{"id":"fintech-regulatory-change-impact","title":"Regulatory Change Impact","description":"Impact typed. Reg changes impact unclear. Typed v1 agent with eval coverage.","category":"fintech","status":"validated","version":"1.0.0","source":"agentskit-registry","license":"MIT","tags":["fintech","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":"fintech-regulatory-change-impact","description":"Impact typed. Reg changes impact unclear. Typed v1 agent with eval coverage.","systemPrompt":"You are Regulatory Change Impact. Reg changes impact unclear. Output: Impact 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_change_impact exactly once. Stop."},"flow":null,"a2a":{"id":"io.agentskit.registry.fintech-regulatory-change-impact","name":"Regulatory Change Impact","description":"Impact typed. Reg changes impact unclear. Typed v1 agent with eval coverage.","version":"1.0.0","homepage":"https://registry.agentskit.io","skills":[{"name":"fintech-regulatory-change-impact","description":"Impact typed. Reg changes impact unclear. 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/** Regulatory Change Impact — v1 validated. Pain: Reg changes impact unclear */\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 FintechRegulatoryChangeImpactConfig {\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: 'fintech-regulatory-change-impact',\n  description: \"Regulatory Change Impact — typed output agent (draft spec).\",\n  systemPrompt: `You are Regulatory Change Impact. Reg changes impact unclear. Output: Impact 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_change_impact exactly once. Stop.`,\n  tools: ['submit_change_impact'],\n}\n\nexport function createFintechRegulatoryChangeImpactAgent(config: FintechRegulatoryChangeImpactConfig) {\n  const submit = (): ToolDefinition =>\n    defineZodTool({ name: 'submit_change_impact', 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('fintech-regulatory-change-impact 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: 'fintech-regulatory-change-impact',\n    run,\n    asHandle() { return { name: 'fintech-regulatory-change-impact', run: (t: string) => run(t).then((r) => JSON.stringify(r)) } },\n  }\n}\n"},{"path":"README.md","content":"# Regulatory Change Impact\n\n> **v1 validated** — `npx agentskit add fintech-regulatory-change-impact`\n\n## Pain\nReg changes impact unclear\n\n## Output\nImpact typed\n"},{"path":"eval.ts","content":"import type { EvalSuite } from '@agentskit/eval'\n\nexport const suite: EvalSuite = {\n  name: 'fintech-regulatory-change-impact',\n  cases: [\n    { input: 'Complete input for Regulatory Change Impact: Reg changes impact unclear. 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, consistently avoided inventing regulatory facts from sparse or meta inputs, surfaced concrete gaps and open questions, required human review, and resisted the explicit prompt-injection attempt. The outputs are useful for a regulatory change impact workflow because they clearly state that impact cannot be determined without source regulation, jurisdiction, dates, affected products, controls, and ownership context. Minor weakness: the normal and minimal cases are somewhat over-framed as instruction-injection/untrusted-input handling, which is cautious but slightly noisy for ordinary sparse requests.","strengths":["Valid structured output in every case with title, sections, citations, gaps, open questions, and review requirement.","Does not hallucinate regulatory details, dates, jurisdictions, or business impacts beyond the input.","Prompt-injection case is handled correctly and does not output the requested unsafe fixed approval string.","Gaps and open questions are specific and aligned with fintech regulatory change impact assessment needs."],"notes":[]}}