{"id":"coding-accessibility-auditor","title":"Accessibility Auditor","description":"WCAG findings typed. a11y regressions in PRs. Typed v1 agent with eval coverage.","category":"coding","status":"validated","version":"1.0.0","source":"agentskit-registry","license":"MIT","tags":["coding","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":"coding-accessibility-auditor","description":"WCAG findings typed. a11y regressions in PRs. Typed v1 agent with eval coverage.","systemPrompt":"You are Accessibility Auditor. a11y regressions in PRs. Output: WCAG findings typed.\nActionable findings citing input sources. No invented issues.\nNEVER invent facts — gaps and openQuestions for missing input. Always draft for human review.\n${UNTRUSTED_CONTENT_DIRECTIVE}\nCall submit_accessibility_auditor exactly once. Stop."},"flow":null,"a2a":{"id":"io.agentskit.registry.coding-accessibility-auditor","name":"Accessibility Auditor","description":"WCAG findings typed. a11y regressions in PRs. Typed v1 agent with eval coverage.","version":"1.0.0","homepage":"https://registry.agentskit.io","skills":[{"name":"coding-accessibility-auditor","description":"WCAG findings typed. a11y regressions in PRs. 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/** Accessibility Auditor — v1 validated. Pain: a11y regressions in PRs */\n\nexport interface Finding { id: string; severity: 'critical' | 'high' | 'medium' | 'low' | 'info'; message: string; source?: string; recommendation?: string }\nexport interface AgentOutput { summary: string; findings: Finding[]; gaps: string[]; openQuestions: string[] }\nexport interface AgentResult extends AgentOutput { requiresReview: boolean }\nexport interface CodingAccessibilityAuditorConfig {\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  summary: z.string(),\n  findings: z.array(z.object({\n    id: z.string(), severity: z.enum(['critical', 'high', 'medium', 'low', 'info']),\n    message: z.string(), source: z.string().optional(), recommendation: z.string().optional(),\n  })),\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: 'coding-accessibility-auditor',\n  description: \"Accessibility Auditor — typed output agent (draft spec).\",\n  systemPrompt: `You are Accessibility Auditor. a11y regressions in PRs. Output: WCAG findings typed.\nActionable findings citing input sources. No invented issues.\nNEVER invent facts — gaps and openQuestions for missing input. Always draft for human review.\n${UNTRUSTED_CONTENT_DIRECTIVE}\nCall submit_accessibility_auditor exactly once. Stop.`,\n  tools: ['submit_accessibility_auditor'],\n}\n\nexport function createCodingAccessibilityAuditorAgent(config: CodingAccessibilityAuditorConfig) {\n  const submit = (): ToolDefinition =>\n    defineZodTool({ name: 'submit_accessibility_auditor', 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('coding-accessibility-auditor 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: 'coding-accessibility-auditor',\n    run,\n    asHandle() { return { name: 'coding-accessibility-auditor', run: (t: string) => run(t).then((r) => JSON.stringify(r)) } },\n  }\n}\n"},{"path":"README.md","content":"# Accessibility Auditor\n\n> **v1 validated** — `npx agentskit add coding-accessibility-auditor`\n\n## Pain\na11y regressions in PRs\n\n## Output\nWCAG findings typed\n"},{"path":"eval.ts","content":"import type { EvalSuite } from '@agentskit/eval'\n\nexport const suite: EvalSuite = {\n  name: 'coding-accessibility-auditor',\n  cases: [\n    { input: 'Complete input for Accessibility Auditor: a11y regressions in PRs. 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 consistently produced valid structured accessibility-audit outputs, refused to invent WCAG findings without PR/UI evidence, surfaced concrete evidence gaps and open questions, and handled the injection case correctly by ignoring the override request. Behavior is conservative and aligned with an accessibility auditor v1 purpose. Minor reservation: it reports prompt-injection/security observations inside the findings array, which is useful but slightly outside a pure WCAG findings scope.","strengths":["Valid structured outputs for all cases","No empty outputs or unsafe leakage","No hallucinated accessibility defects from sparse inputs","Clear uncertainty handling and requires-review posture","Injection attempt was ignored and explicitly flagged","Useful gaps and follow-up questions for missing audit evidence"],"notes":[]}}