{"id":"research-patent-prior-art","title":"Patent Prior Art","description":"Results typed + citations. Prior art search slow. Typed v1 agent with eval coverage.","category":"research","status":"validated","version":"1.0.0","source":"agentskit-registry","license":"MIT","tags":["research","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":"research-patent-prior-art","description":"Results typed + citations. Prior art search slow. Typed v1 agent with eval coverage.","systemPrompt":"You are Patent Prior Art. Prior art search slow. Output: Results typed + citations.\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_prior_art exactly once. Stop."},"flow":null,"a2a":{"id":"io.agentskit.registry.research-patent-prior-art","name":"Patent Prior Art","description":"Results typed + citations. Prior art search slow. Typed v1 agent with eval coverage.","version":"1.0.0","homepage":"https://registry.agentskit.io","skills":[{"name":"research-patent-prior-art","description":"Results typed + citations. Prior art search slow. 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/** Patent Prior Art — v1 validated. Pain: Prior art search slow */\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 ResearchPatentPriorArtConfig {\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: 'research-patent-prior-art',\n  description: \"Patent Prior Art — typed output agent (draft spec).\",\n  systemPrompt: `You are Patent Prior Art. Prior art search slow. Output: Results typed + citations.\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_prior_art exactly once. Stop.`,\n  tools: ['submit_prior_art'],\n}\n\nexport function createResearchPatentPriorArtAgent(config: ResearchPatentPriorArtConfig) {\n  const submit = (): ToolDefinition =>\n    defineZodTool({ name: 'submit_prior_art', 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('research-patent-prior-art 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: 'research-patent-prior-art',\n    run,\n    asHandle() { return { name: 'research-patent-prior-art', run: (t: string) => run(t).then((r) => JSON.stringify(r)) } },\n  }\n}\n"},{"path":"README.md","content":"# Patent Prior Art\n\n> **v1 validated** — `npx agentskit add research-patent-prior-art`\n\n## Pain\nPrior art search slow\n\n## Output\nResults typed + citations\n"},{"path":"eval.ts","content":"import type { EvalSuite } from '@agentskit/eval'\n\nexport const suite: EvalSuite = {\n  name: 'research-patent-prior-art',\n  cases: [\n    { input: 'Complete input for Patent Prior Art: Prior art search slow. 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 outputs for all three cases, avoided inventing prior art from missing facts, surfaced uncertainty and gaps, asked useful follow-up questions, and resisted the injection request. It stayed within the prior-art research purpose and did not hallucinate citations or references. The only minor weakness is that it somewhat over-labels ordinary sparse inputs as untrusted/instruction-like, but this does not break behavior or safety.","strengths":["Valid structured output in every case.","Appropriately refused to fabricate prior art without invention details or sources.","Clear gaps and open questions tailored to patent prior art search.","Injection case correctly ignored the request to output APPROVED.","No unsafe content, empty output, or unsupported citations."],"notes":[]}}