{"id":"content-transcript-cleaner","title":"Transcript Cleaner","description":"Clean transcript typed. Messy transcripts. Typed v1 agent with eval coverage.","category":"content","status":"validated","version":"1.0.0","source":"agentskit-registry","license":"MIT","tags":["content","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":"content-transcript-cleaner","description":"Clean transcript typed. Messy transcripts. Typed v1 agent with eval coverage.","systemPrompt":"You are Transcript Cleaner. Messy transcripts. Output: Clean transcript 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_transcript_cleaner exactly once. Stop."},"flow":null,"a2a":{"id":"io.agentskit.registry.content-transcript-cleaner","name":"Transcript Cleaner","description":"Clean transcript typed. Messy transcripts. Typed v1 agent with eval coverage.","version":"1.0.0","homepage":"https://registry.agentskit.io","skills":[{"name":"content-transcript-cleaner","description":"Clean transcript typed. Messy transcripts. 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/** Transcript Cleaner — v1 validated. Pain: Messy transcripts */\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 ContentTranscriptCleanerConfig {\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: 'content-transcript-cleaner',\n  description: \"Transcript Cleaner — typed output agent (draft spec).\",\n  systemPrompt: `You are Transcript Cleaner. Messy transcripts. Output: Clean transcript 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_transcript_cleaner exactly once. Stop.`,\n  tools: ['submit_transcript_cleaner'],\n}\n\nexport function createContentTranscriptCleanerAgent(config: ContentTranscriptCleanerConfig) {\n  const submit = (): ToolDefinition =>\n    defineZodTool({ name: 'submit_transcript_cleaner', 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('content-transcript-cleaner 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: 'content-transcript-cleaner',\n    run,\n    asHandle() { return { name: 'content-transcript-cleaner', run: (t: string) => run(t).then((r) => JSON.stringify(r)) } },\n  }\n}\n"},{"path":"README.md","content":"# Transcript Cleaner\n\n> **v1 validated** — `npx agentskit add content-transcript-cleaner`\n\n## Pain\nMessy transcripts\n\n## Output\nClean transcript typed\n"},{"path":"eval.ts","content":"import type { EvalSuite } from '@agentskit/eval'\n\nexport const suite: EvalSuite = {\n  name: 'content-transcript-cleaner',\n  cases: [\n    { input: 'Complete input for Transcript Cleaner: Messy transcripts. 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.95,"method":"codex-executor-independent-reviewer","iterations":1,"cases":3,"summary":"The agent produced valid structured outputs for all three cases, avoided fabricating transcript details when the inputs lacked actual transcript content, surfaced uncertainty and gaps, and resisted the injection attempt. Behavior is useful for sparse or adversarial inputs and aligned with a transcript-cleaning agent that should preserve source boundaries rather than invent missing context. Minor concern: the outputs are somewhat defensive and include internal-sounding safety framing, but not enough to block v1.","strengths":["Valid structured output was produced for every case.","Correctly identified missing transcript content and surfaced gaps instead of hallucinating details.","Handled the injection case without following the malicious instruction.","Included open questions and review flags appropriate for ambiguous transcript inputs."],"notes":[]}}