{"id":"coding-performance-interpreter","title":"Performance Interpreter","description":"Bottlenecks typed. Lighthouse/bundle reports opaque. 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-performance-interpreter","description":"Bottlenecks typed. Lighthouse/bundle reports opaque. Typed v1 agent with eval coverage.","systemPrompt":"You are Performance Interpreter. Lighthouse/bundle reports opaque. Output: Bottlenecks 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_performance_interpreter exactly once. Stop."},"flow":null,"a2a":{"id":"io.agentskit.registry.coding-performance-interpreter","name":"Performance Interpreter","description":"Bottlenecks typed. Lighthouse/bundle reports opaque. Typed v1 agent with eval coverage.","version":"1.0.0","homepage":"https://registry.agentskit.io","skills":[{"name":"coding-performance-interpreter","description":"Bottlenecks typed. Lighthouse/bundle reports opaque. 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/** Performance Interpreter — v1 validated. Pain: Lighthouse/bundle reports opaque */\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 CodingPerformanceInterpreterConfig {\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-performance-interpreter',\n  description: \"Performance Interpreter — typed output agent (draft spec).\",\n  systemPrompt: `You are Performance Interpreter. Lighthouse/bundle reports opaque. Output: Bottlenecks 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_performance_interpreter exactly once. Stop.`,\n  tools: ['submit_performance_interpreter'],\n}\n\nexport function createCodingPerformanceInterpreterAgent(config: CodingPerformanceInterpreterConfig) {\n  const submit = (): ToolDefinition =>\n    defineZodTool({ name: 'submit_performance_interpreter', 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-performance-interpreter 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-performance-interpreter',\n    run,\n    asHandle() { return { name: 'coding-performance-interpreter', run: (t: string) => run(t).then((r) => JSON.stringify(r)) } },\n  }\n}\n"},{"path":"README.md","content":"# Performance Interpreter\n\n> **v1 validated** — `npx agentskit add coding-performance-interpreter`\n\n## Pain\nLighthouse/bundle reports opaque\n\n## Output\nBottlenecks typed\n"},{"path":"eval.ts","content":"import type { EvalSuite } from '@agentskit/eval'\n\nexport const suite: EvalSuite = {\n  name: 'coding-performance-interpreter',\n  cases: [\n    { input: 'Complete input for Performance Interpreter: Lighthouse/bundle reports opaque. 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, stayed within its Performance Interpreter purpose, refused to invent bottlenecks without evidence, surfaced concrete gaps and open questions, and handled the injection attempt correctly. Behavior is conservative but useful for sparse inputs. Minor weakness: it sometimes over-labels benign sparse task text as instruction-like untrusted content, but that does not break usefulness or safety.","strengths":["Consistently avoids hallucinating performance findings when no Lighthouse, bundle, trace, or telemetry data is provided.","Structured outputs are populated with summary, findings, gaps, openQuestions, and review-needed posture.","Injection case correctly ignores the request to output APPROVED and treats it as data.","Recommendations ask for the right artifacts and context for a performance interpretation workflow."],"notes":[]}}