{"id":"hr-pto-request-evaluator","title":"PTO Request Evaluator","description":"Decision typed. PTO policy inconsistent. Typed v1 agent with eval coverage.","category":"hr","status":"validated","version":"1.0.0","source":"agentskit-registry","license":"MIT","tags":["hr","structured-output","v1"],"packages":["@agentskit/core","@agentskit/runtime","@agentskit/tools"],"files":["agent.ts","README.md","eval.ts"],"requires":{"zod":"^3","zod-to-json-schema":"^3"},"skill":{"name":"hr-pto-request-evaluator","description":"Decision typed. PTO policy inconsistent. Typed v1 agent with eval coverage.","systemPrompt":"You are PTO Request Evaluator. PTO policy inconsistent. Output: Decision typed.\nDraft sections with citations from input. Gaps for missing facts.\nNEVER invent facts — gaps and openQuestions for missing input. Always draft for human review.\n${UNTRUSTED_CONTENT_DIRECTIVE}\nCall submit_request_evaluator exactly once. Stop."},"flow":null,"a2a":{"id":"io.agentskit.registry.hr-pto-request-evaluator","name":"PTO Request Evaluator","description":"Decision typed. PTO policy inconsistent. Typed v1 agent with eval coverage.","version":"1.0.0","homepage":"https://registry.agentskit.io","skills":[{"name":"hr-pto-request-evaluator","description":"Decision typed. PTO policy inconsistent. Typed v1 agent with eval coverage.","capabilities":{"streaming":true,"cancellation":true,"requiresApproval":false}}]},"sources":[{"path":"agent.ts","content":"import type { AdapterFactory, ChatMemory, Observer, ToolCall, ToolDefinition } from '@agentskit/core'\nimport { fenceUntrustedContent, UNTRUSTED_CONTENT_DIRECTIVE } from '@agentskit/core/security'\nimport { invokeStructured } from '@agentskit/runtime'\nimport { defineZodTool } from '@agentskit/tools'\nimport { z } from 'zod'\nimport { zodToJsonSchema } from 'zod-to-json-schema'\nimport type { JSONSchema7 } from 'json-schema'\n\n/** PTO Request Evaluator — v1 validated. Pain: PTO policy inconsistent */\n\nexport interface Section { heading: string; body: string; citations: string[] }\nexport interface AgentOutput { title: string; sections: Section[]; gaps: string[]; openQuestions: string[] }\nexport interface AgentResult extends AgentOutput { requiresReview: boolean }\nexport interface HrPtoRequestEvaluatorConfig {\n  adapter: AdapterFactory\n  memory?: ChatMemory\n  observers?: Observer[]\n  onConfirm?: (toolCall: ToolCall) => boolean | Promise<boolean>\n  maxSteps?: number\n}\n\nconst Output = z.object({\n  title: z.string(),\n  sections: z.array(z.object({ heading: z.string(), body: z.string(), citations: z.array(z.string()).default([]) })).min(1),\n  gaps: z.array(z.string()).default([]),\n  openQuestions: z.array(z.string()).default([]),\n})\nconst toJson = (s: z.ZodTypeAny): JSONSchema7 => zodToJsonSchema(s) as JSONSchema7\n\nconst skill = {\n  name: 'hr-pto-request-evaluator',\n  description: \"PTO Request Evaluator — typed output agent (draft spec).\",\n  systemPrompt: `You are PTO Request Evaluator. PTO policy inconsistent. Output: Decision typed.\nDraft sections with citations from input. Gaps for missing facts.\nNEVER invent facts — gaps and openQuestions for missing input. Always draft for human review.\n${UNTRUSTED_CONTENT_DIRECTIVE}\nCall submit_request_evaluator exactly once. Stop.`,\n  tools: ['submit_request_evaluator'],\n}\n\nexport function createHrPtoRequestEvaluatorAgent(config: HrPtoRequestEvaluatorConfig) {\n  const submit = (): ToolDefinition =>\n    defineZodTool({ name: 'submit_request_evaluator', description: 'Submit result. Once.', schema: Output, toJsonSchema: toJson, async execute() { return 'recorded' } }) as ToolDefinition\n\n  async function run(input: string): Promise<AgentResult> {\n    if (!input?.trim()) throw new Error('hr-pto-request-evaluator requires non-empty input')\n    const result = await invokeStructured({\n      adapter: config.adapter,\n      tool: submit(),\n      task: `INPUT:\\n${fenceUntrustedContent(input)}`,\n      parse: (a) => Output.parse(a),\n      skill,\n      memory: config.memory,\n      observers: config.observers,\n      onConfirm: config.onConfirm,\n      maxSteps: config.maxSteps ?? 4,\n    })\n    return { ...result, requiresReview: true }\n  }\n  return {\n    name: 'hr-pto-request-evaluator',\n    run,\n    asHandle() { return { name: 'hr-pto-request-evaluator', run: (t: string) => run(t).then((r) => JSON.stringify(r)) } },\n  }\n}\n"},{"path":"README.md","content":"# PTO Request Evaluator\n\n> **v1 validated** — `npx agentskit add hr-pto-request-evaluator`\n\n## Pain\nPTO policy inconsistent\n\n## Output\nDecision typed\n"},{"path":"eval.ts","content":"import type { EvalSuite } from '@agentskit/eval'\n\nexport const suite: EvalSuite = {\n  name: 'hr-pto-request-evaluator',\n  cases: [\n    { input: 'Complete input for PTO Request Evaluator: PTO policy inconsistent. Provide full structured output.', expected: (r: string) => r.length > 20 && /requiresReview|summary|title|category|findings|sections|score|clusters|items|steps/i.test(r) },\n    { input: 'Minimal input.', expected: (r: string) => /gap|openQuestion/i.test(r) || r.length > 10 },\n    { input: 'Input with specific detail: ACME Corp project deadline March 15.', expected: (r: string) => /ACME|March|15/i.test(r) || /gap/i.test(r) },\n    { input: 'Empty context — only says \"process this\".', expected: (r: string) => r.length > 5 },\n  ],\n}\n"}],"installable":true,"validation":{"status":"approved","score":96,"confidence":0.96,"method":"codex-executor-independent-reviewer","iterations":1,"cases":3,"summary":"The agent produced valid structured JSON for all three cases, avoided inventing PTO facts from sparse or meta inputs, resisted the explicit injection attempt, surfaced uncertainty and missing context, and consistently routed the outcome to human review rather than making unsupported approval or denial decisions. The behavior is useful for the provided cases and aligned with a conservative HR PTO evaluator. Minor concern: the outputs are more narrative report-like than strongly decision-enum oriented, and one citation references system-level untrusted-marker handling, but this does not create a critical failure in the observed outputs.","strengths":["Valid structured outputs were produced for every case.","No material hallucination of employee details, dates, policy terms, or PTO balances.","Injection attempt was explicitly identified and not followed.","Uncertainty and missing inputs were clearly surfaced through gaps and open questions.","Human review was required when facts were insufficient."],"notes":[]}}