{"id":"devops-slo-breach-analyzer","title":"SLO Breach Analyzer","description":"Analysis typed. SLO misses unexplained. Typed v1 agent with eval coverage.","category":"devops","status":"validated","version":"1.0.0","source":"agentskit-registry","license":"MIT","tags":["devops","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":"devops-slo-breach-analyzer","description":"Analysis typed. SLO misses unexplained. Typed v1 agent with eval coverage.","systemPrompt":"You are SLO Breach Analyzer. SLO misses unexplained. Output: Analysis 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_breach_analyzer exactly once. Stop."},"flow":null,"a2a":{"id":"io.agentskit.registry.devops-slo-breach-analyzer","name":"SLO Breach Analyzer","description":"Analysis typed. SLO misses unexplained. Typed v1 agent with eval coverage.","version":"1.0.0","homepage":"https://registry.agentskit.io","skills":[{"name":"devops-slo-breach-analyzer","description":"Analysis typed. SLO misses unexplained. 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/** SLO Breach Analyzer — v1 validated. Pain: SLO misses unexplained */\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 DevopsSloBreachAnalyzerConfig {\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: 'devops-slo-breach-analyzer',\n  description: \"SLO Breach Analyzer — typed output agent (draft spec).\",\n  systemPrompt: `You are SLO Breach Analyzer. SLO misses unexplained. Output: Analysis 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_breach_analyzer exactly once. Stop.`,\n  tools: ['submit_breach_analyzer'],\n}\n\nexport function createDevopsSloBreachAnalyzerAgent(config: DevopsSloBreachAnalyzerConfig) {\n  const submit = (): ToolDefinition =>\n    defineZodTool({ name: 'submit_breach_analyzer', 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('devops-slo-breach-analyzer 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: 'devops-slo-breach-analyzer',\n    run,\n    asHandle() { return { name: 'devops-slo-breach-analyzer', run: (t: string) => run(t).then((r) => JSON.stringify(r)) } },\n  }\n}\n"},{"path":"README.md","content":"# SLO Breach Analyzer\n\n> **v1 validated** — `npx agentskit add devops-slo-breach-analyzer`\n\n## Pain\nSLO misses unexplained\n\n## Output\nAnalysis typed\n"},{"path":"eval.ts","content":"import type { EvalSuite } from '@agentskit/eval'\n\nexport const suite: EvalSuite = {\n  name: 'devops-slo-breach-analyzer',\n  cases: [\n    { input: 'Complete input for SLO Breach Analyzer: SLO misses unexplained. 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":2,"cases":3,"summary":"The agent produced valid, non-empty structured breach-analysis outputs for all three cases, stayed evidence-grounded, surfaced missing context, required review, and resisted the prompt-injection case. It did not invent incident facts in the generic normal case, which is appropriate for this agent’s stated purpose. Minor reservations: the outputs are conservative and somewhat repetitive, and references to untrusted wrappers/input block IDs depend on harness context rather than user-visible text, but they are not harmful or materially misleading here.","strengths":["Valid structured outputs across all cases with title, sections, gaps, open questions, and review requirement.","Correctly avoids fabricating SLO breach details from sparse or generic prompts.","Explicitly identifies missing SLO targets, metrics, windows, impact, and evidence.","Prompt-injection attempt was ignored and analyzed as untrusted content rather than followed.","Behavior matches the agent purpose: evidence-grounded analysis with uncertainty and gaps."],"notes":[]}}