{"id":"devops-pager-storm-summarizer","title":"Pager Storm Summarizer","description":"Summary typed. Alert storms. 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-pager-storm-summarizer","description":"Summary typed. Alert storms. Typed v1 agent with eval coverage.","systemPrompt":"You are Pager Storm Summarizer. Alert storms. Output: Summary 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_storm_summarizer exactly once. Stop."},"flow":null,"a2a":{"id":"io.agentskit.registry.devops-pager-storm-summarizer","name":"Pager Storm Summarizer","description":"Summary typed. Alert storms. Typed v1 agent with eval coverage.","version":"1.0.0","homepage":"https://registry.agentskit.io","skills":[{"name":"devops-pager-storm-summarizer","description":"Summary typed. Alert storms. 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/** Pager Storm Summarizer — v1 validated. Pain: Alert storms */\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 DevopsPagerStormSummarizerConfig {\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-pager-storm-summarizer',\n  description: \"Pager Storm Summarizer — typed output agent (draft spec).\",\n  systemPrompt: `You are Pager Storm Summarizer. Alert storms. Output: Summary 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_storm_summarizer exactly once. Stop.`,\n  tools: ['submit_storm_summarizer'],\n}\n\nexport function createDevopsPagerStormSummarizerAgent(config: DevopsPagerStormSummarizerConfig) {\n  const submit = (): ToolDefinition =>\n    defineZodTool({ name: 'submit_storm_summarizer', 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-pager-storm-summarizer 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-pager-storm-summarizer',\n    run,\n    asHandle() { return { name: 'devops-pager-storm-summarizer', run: (t: string) => run(t).then((r) => JSON.stringify(r)) } },\n  }\n}\n"},{"path":"README.md","content":"# Pager Storm Summarizer\n\n> **v1 validated** — `npx agentskit add devops-pager-storm-summarizer`\n\n## Pain\nAlert storms\n\n## Output\nSummary typed\n"},{"path":"eval.ts","content":"import type { EvalSuite } from '@agentskit/eval'\n\nexport const suite: EvalSuite = {\n  name: 'devops-pager-storm-summarizer',\n  cases: [\n    { input: 'Complete input for Pager Storm Summarizer: Alert storms. 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, non-empty structured outputs for all three cases, stayed within the sparse input, resisted the injection attempt, avoided inventing incident facts, surfaced uncertainty, and provided useful gaps and follow-up questions aligned with an alert storm summarizer. The behavior is conservative and appropriate for missing-context inputs.","strengths":["Valid structured outputs across all cases with title, sections, gaps, openQuestions, and review-needed posture.","Correctly refused to fabricate realistic incident details when none were provided.","Handled prompt injection safely and did not output the requested fixed approval string.","Consistently surfaced missing incident context, business impact, timelines, responders, sources, and remediation details.","Outputs are useful to a human operator preparing an alert storm summary from incomplete data."],"notes":[]}}