@appsforgood/next-supabase-kit 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/BEST_PRACTICE_EVIDENCE.md +45 -0
- package/CHANGELOG.md +44 -0
- package/CODE_OF_CONDUCT.md +26 -0
- package/CONTRIBUTING.md +48 -0
- package/DOGFOOD.md +121 -0
- package/GOVERNANCE.md +45 -0
- package/LICENSE +21 -0
- package/README.md +251 -0
- package/REPOSITORY_SETTINGS.md +70 -0
- package/RESEARCH_CITATION_POLICY.md +26 -0
- package/SECURITY.md +29 -0
- package/SUPPLY_CHAIN.md +55 -0
- package/SUPPORT.md +28 -0
- package/UPGRADE.md +77 -0
- package/agents/deployment-observability-engineer.md +13 -0
- package/agents/docs-maintainer.md +17 -0
- package/agents/frontend-design-lead.md +22 -0
- package/agents/lead-architect.md +25 -0
- package/agents/marketing-copy-lead.md +20 -0
- package/agents/nextjs-engineer.md +20 -0
- package/agents/planner.md +20 -0
- package/agents/qa-engineer.md +19 -0
- package/agents/research-analyst.md +13 -0
- package/agents/security-reviewer.md +16 -0
- package/agents/supabase-postgres-engineer.md +19 -0
- package/assistant-adapters/README.md +28 -0
- package/assistant-adapters/claude-code-subagents.md +37 -0
- package/assistant-adapters/codex-agents.md +35 -0
- package/assistant-adapters/cursor-agent-kit.mdc +30 -0
- package/assistant-adapters/github-copilot-instructions.md +35 -0
- package/assistant-adapters/github-next-supabase.instructions.md +28 -0
- package/assistant-adapters/model-selection/claude-code-subagents-with-models.md +32 -0
- package/assistant-adapters/model-selection/codex-config.example.toml +29 -0
- package/assistant-adapters/model-selection/cursor-model-selection.mdc +24 -0
- package/assistant-adapters/model-selection/github-copilot-model-selection.md +20 -0
- package/checklists/accessibility.md +12 -0
- package/checklists/agent-council.md +13 -0
- package/checklists/brand-content.md +15 -0
- package/checklists/deployment.md +10 -0
- package/checklists/design-critique.md +13 -0
- package/checklists/frontend-distinctiveness.md +12 -0
- package/checklists/frontend-product-quality.md +13 -0
- package/checklists/frontend-quality.md +20 -0
- package/checklists/marketing-copy.md +11 -0
- package/checklists/owasp.md +12 -0
- package/checklists/rls.md +10 -0
- package/checklists/testing.md +12 -0
- package/checklists/upgrade.md +13 -0
- package/checklists/visual-regression.md +11 -0
- package/design-adapters/claude-design.prompt.md +27 -0
- package/design-adapters/figma.prompt.md +18 -0
- package/design-adapters/google-stitch.prompt.md +36 -0
- package/design-adapters/human-designer-brief.prompt.md +36 -0
- package/design-briefs/admin-dashboard.md +21 -0
- package/design-briefs/ai-workflow-product.md +25 -0
- package/design-briefs/community-social.md +26 -0
- package/design-briefs/content-app.md +21 -0
- package/design-briefs/ecommerce.md +25 -0
- package/design-briefs/education-course.md +25 -0
- package/design-briefs/marketplace.md +21 -0
- package/design-briefs/portfolio-venue.md +25 -0
- package/design-briefs/saas.md +21 -0
- package/design-briefs/tool.md +21 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.js +3521 -0
- package/dist/index.js.map +1 -0
- package/examples/next-supabase-installed/.agent-kit/agent-roster.json +228 -0
- package/examples/next-supabase-installed/.agent-kit/manifest.json +58 -0
- package/examples/next-supabase-installed/.agent-kit/model-routing.json +164 -0
- package/examples/next-supabase-installed/.agent-kit/overrides.json +9 -0
- package/examples/next-supabase-installed/README.md +15 -0
- package/examples/next-supabase-installed/audit-output.json +336 -0
- package/examples/next-supabase-installed/tree.txt +38 -0
- package/model-routing/default-model-routing.json +164 -0
- package/package.json +98 -0
- package/profiles/admin-app.md +17 -0
- package/profiles/content-app.md +17 -0
- package/profiles/marketplace.md +17 -0
- package/profiles/saas.md +17 -0
- package/profiles/stack-next-firebase.md +25 -0
- package/profiles/stack-next-postgres.md +24 -0
- package/profiles/stack-remix-supabase.md +24 -0
- package/prompts/audit-project-setup.md +28 -0
- package/prompts/brand-content-intake.md +17 -0
- package/prompts/copy-review.md +15 -0
- package/prompts/council-session-review.md +17 -0
- package/prompts/creative-direction-matrix.md +22 -0
- package/prompts/design-critique-gate.md +28 -0
- package/prompts/docs-update.md +16 -0
- package/prompts/frontend-design-review.md +29 -0
- package/prompts/frontend-distinctiveness-benchmark.md +32 -0
- package/prompts/frontend-product-quality-scorecard.md +35 -0
- package/prompts/implement-feature.md +14 -0
- package/prompts/migration-review.md +14 -0
- package/prompts/screenshot-review.md +27 -0
- package/prompts/security-review.md +17 -0
- package/prompts/upgrade-review.md +18 -0
- package/prompts/visual-qa-plan.md +16 -0
- package/research/proposed-updates.md +70 -0
- package/research/scan-config.json +261 -0
- package/research/scan-plan.md +24 -0
- package/research/summaries/.gitkeep +1 -0
- package/research/summaries/agent-workflow-patterns.md +37 -0
- package/research/summaries/creative-design-patterns.md +38 -0
- package/research/summaries/design-critique-patterns.md +34 -0
- package/research/summaries/docs-and-agent-patterns.md +64 -0
- package/research/summaries/dogfood-adoption-patterns.md +33 -0
- package/research/summaries/frontend-design-patterns.md +64 -0
- package/research/summaries/frontend-distinctiveness-benchmark-patterns.md +38 -0
- package/research/summaries/frontend-product-quality-rubric-patterns.md +37 -0
- package/research/summaries/maturity-model-patterns.md +29 -0
- package/research/summaries/nextjs-patterns.md +65 -0
- package/research/summaries/repo-health-patterns.md +41 -0
- package/research/summaries/scan-overview.md +46 -0
- package/research/summaries/security-patterns.md +64 -0
- package/research/summaries/supabase-rls-patterns.md +54 -0
- package/research/summaries/supply-chain-patterns.md +38 -0
- package/research/summaries/testing-patterns.md +63 -0
- package/research/summaries/upgrade-lifecycle-patterns.md +26 -0
- package/research/summaries/visual-qa-patterns.md +39 -0
- package/rosters/next-supabase-default-council.json +228 -0
- package/schemas/agent-roster.schema.json +54 -0
- package/schemas/audit-report.schema.json +50 -0
- package/schemas/correction-rules.schema.json +32 -0
- package/schemas/council-session.schema.json +65 -0
- package/schemas/model-routing.schema.json +72 -0
- package/schemas/project-context.schema.json +94 -0
- package/schemas/session-event.schema.json +46 -0
- package/schemas/studio-session.schema.json +48 -0
- package/skills/accessibility-wcag.md +15 -0
- package/skills/agent-handoff-tracing.md +44 -0
- package/skills/best-practice-maturity-review.md +26 -0
- package/skills/content-first-design.md +50 -0
- package/skills/conversion-copywriting.md +38 -0
- package/skills/deployment-observability.md +14 -0
- package/skills/docs-maintainer.md +19 -0
- package/skills/frontend-design-system.md +68 -0
- package/skills/frontend-distinctiveness-benchmark.md +40 -0
- package/skills/frontend-product-quality-rubric.md +59 -0
- package/skills/landing-page-copy.md +29 -0
- package/skills/nextjs-app-router.md +18 -0
- package/skills/onboarding-empty-state-copy.md +37 -0
- package/skills/owasp-security-review.md +19 -0
- package/skills/planning-council.md +21 -0
- package/skills/positioning-messaging.md +42 -0
- package/skills/postgres-migrations.md +14 -0
- package/skills/product-voice-tone.md +35 -0
- package/skills/reference-led-design-critique.md +48 -0
- package/skills/supabase-auth-rls.md +20 -0
- package/skills/testing-qa.md +15 -0
- package/skills/upgrade-maintenance.md +32 -0
- package/skills/visual-regression-qa.md +42 -0
- package/templates/next-supabase/AGENTS.md +138 -0
- package/templates/next-supabase/AGENT_ROSTER.md +98 -0
- package/templates/next-supabase/ASSISTANT_ADAPTERS.md +82 -0
- package/templates/next-supabase/COUNCIL.md +54 -0
- package/templates/next-supabase/DECISIONS.md +45 -0
- package/templates/next-supabase/DEPLOYMENT.md +45 -0
- package/templates/next-supabase/DESIGN.md +171 -0
- package/templates/next-supabase/DOCS.md +62 -0
- package/templates/next-supabase/MESSAGING.md +81 -0
- package/templates/next-supabase/MODEL_ROUTING.md +109 -0
- package/templates/next-supabase/QUALITY_GATES.md +87 -0
- package/templates/next-supabase/SECURITY.md +54 -0
- package/templates/next-supabase/SKILLS.md +221 -0
- package/templates/next-supabase/SPEC.md +114 -0
- package/templates/next-supabase/STYLE_GUIDE.md +104 -0
- package/templates/next-supabase/TESTING.md +68 -0
- package/templates/next-supabase/UPGRADE.md +59 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/cli/index.ts","../src/install/add-skill.ts","../src/utils/fs.ts","../src/utils/package-root.ts","../src/install/audit.ts","../src/config/contracts.ts","../src/config/defaults.ts","../src/studio/shared.ts","../src/install/install.ts","../src/install/diff.ts","../src/research/discover.ts","../src/research/config.ts","../src/research/scan.ts","../src/research/analyze.ts","../src/research/summarize.ts","../src/studio/corrections.ts","../src/studio/context.ts","../src/studio/session.ts","../src/studio/export.ts"],"sourcesContent":["import { Command } from \"commander\";\nimport type { AuditReadinessLevel } from \"../config/types.js\";\nimport { addSkill, listSkills } from \"../install/add-skill.js\";\nimport { READINESS_ORDER, createAuditReport, isAuditReadinessLevel, meetsMinimumReadiness } from \"../install/audit.js\";\nimport { diffProject } from \"../install/diff.js\";\nimport { initProject } from \"../install/install.js\";\nimport { discoverRepos } from \"../research/discover.js\";\nimport { scanRepos } from \"../research/scan.js\";\nimport { proposeUpdates, summarizeFindings } from \"../research/summarize.js\";\nimport { addCorrection, applyCorrection, listCorrections, proposeCorrectionUpstream, retireCorrection } from \"../studio/corrections.js\";\nimport { initProjectContext, renderProjectContext, scanProjectContext, validateProjectContext } from \"../studio/context.js\";\nimport { exportStaticStudio } from \"../studio/export.js\";\nimport {\n closeSession,\n getActiveSessionId,\n listSessions,\n recordArtifact,\n recordCorrection,\n recordDecision,\n recordHandoff,\n recordNote,\n recordRequiredOutput,\n recordVerification,\n renderActiveSession,\n startSession\n} from \"../studio/session.js\";\nimport { readTextFile } from \"../studio/shared.js\";\n\nconst program = new Command();\nconst requiredOutputStatuses = [\"missing\", \"partial\", \"complete\", \"not-applicable\"] as const;\ntype RequiredOutputStatus = (typeof requiredOutputStatuses)[number];\n\nfunction isRequiredOutputStatus(value: string): value is RequiredOutputStatus {\n return requiredOutputStatuses.includes(value as RequiredOutputStatus);\n}\n\nprogram\n .name(\"agent-kit\")\n .description(\"Next.js + Supabase agent, skill, docs, design, and research kit.\")\n .version(\"0.1.0\");\n\nprogram\n .command(\"init\")\n .description(\"Install agent-kit docs and library files into a project.\")\n .option(\"--stack <stack>\", \"Stack profile to install.\", \"next-supabase\")\n .option(\"--force\", \"Overwrite existing docs instead of writing conflicts.\")\n .option(\"--guided\", \"Also create local project context files from a non-interactive scan.\")\n .action((options: { stack: \"next-supabase\"; force?: boolean; guided?: boolean }) => {\n const result = initProject({\n cwd: process.cwd(),\n stack: options.stack,\n force: Boolean(options.force)\n });\n if (options.guided) {\n console.log(JSON.stringify({ install: result, context: initProjectContext(process.cwd()) }, null, 2));\n return;\n }\n console.log(JSON.stringify(result, null, 2));\n });\n\nprogram\n .command(\"audit\")\n .description(\"Audit an existing project for agent-kit coverage gaps.\")\n .option(\"--json\", \"Print machine-readable JSON output.\")\n .option(\"--min-readiness <level>\", `Exit non-zero unless readiness is at least this level: ${READINESS_ORDER.join(\", \")}.`)\n .action((options: { json?: boolean; minReadiness?: string }) => {\n const report = createAuditReport(process.cwd());\n let minimumReadiness: AuditReadinessLevel | undefined;\n if (options.minReadiness) {\n if (!isAuditReadinessLevel(options.minReadiness)) {\n console.error(`Invalid --min-readiness value \"${options.minReadiness}\". Expected one of: ${READINESS_ORDER.join(\", \")}.`);\n process.exitCode = 1;\n return;\n }\n minimumReadiness = options.minReadiness;\n }\n\n if (options.json) {\n console.log(JSON.stringify(report, null, 2));\n } else {\n console.log(`READINESS ${report.readiness.level}: ${report.readiness.summary}`);\n console.log(`SUMMARY pass=${report.summary.pass} warn=${report.summary.warn} fail=${report.summary.fail}`);\n if (report.readiness.nextActions.length > 0) {\n console.log(\"NEXT ACTIONS\");\n for (const action of report.readiness.nextActions) console.log(`- ${action}`);\n }\n console.log(\"\");\n for (const finding of report.findings) {\n const prefix = finding.level.toUpperCase().padEnd(4);\n console.log(`${prefix} ${finding.area}: ${finding.message}`);\n if (finding.remediation) console.log(` remediation: ${finding.remediation}`);\n }\n }\n\n if (report.summary.fail > 0) {\n process.exitCode = 1;\n }\n if (minimumReadiness && !meetsMinimumReadiness(report.readiness.level, minimumReadiness)) {\n console.error(`Audit readiness ${report.readiness.level} is below required minimum ${minimumReadiness}.`);\n process.exitCode = 1;\n }\n });\n\nprogram\n .command(\"diff\")\n .description(\"Compare project docs against bundled templates.\")\n .action(() => {\n console.log(JSON.stringify(diffProject(process.cwd()), null, 2));\n });\n\nprogram\n .command(\"update\")\n .description(\"Update installed templates, preserving local conflicts by default.\")\n .option(\"--force\", \"Overwrite local docs.\")\n .action((options: { force?: boolean }) => {\n const result = initProject({ cwd: process.cwd(), force: Boolean(options.force) });\n console.log(JSON.stringify(result, null, 2));\n });\n\nconst addCommand = program.command(\"add\").description(\"Add one agent-kit asset.\");\naddCommand\n .command(\"skill <name>\")\n .description(\"Add a single skill into .agent-kit/skills.\")\n .option(\"--force\", \"Overwrite existing skill.\")\n .action((name: string, options: { force?: boolean }) => {\n console.log(addSkill(process.cwd(), name, { force: Boolean(options.force) }));\n });\n\nprogram\n .command(\"doctor\")\n .description(\"Validate local CLI runtime prerequisites.\")\n .action(() => {\n console.log(\"agent-kit doctor\");\n console.log(`node: ${process.version}`);\n console.log(`available skills: ${listSkills().length}`);\n console.log(\"status: ok\");\n });\n\nprogram\n .command(\"onboard\")\n .description(\"Create or refresh local project context files for installed agents.\")\n .option(\"--refresh\", \"Refresh inferred context from the current project state.\")\n .action(() => {\n console.log(JSON.stringify(initProjectContext(process.cwd()), null, 2));\n });\n\nconst context = program.command(\"context\").description(\"Manage local project context for Agent Studio.\");\n\ncontext\n .command(\"init\")\n .description(\"Create project context from a local scan.\")\n .action(() => {\n console.log(JSON.stringify(initProjectContext(process.cwd()), null, 2));\n });\n\ncontext\n .command(\"scan\")\n .description(\"Print inferred project context without writing it.\")\n .action(() => {\n console.log(JSON.stringify(scanProjectContext(process.cwd()), null, 2));\n });\n\ncontext\n .command(\"ask\")\n .description(\"Print unanswered high-value project context questions.\")\n .action(() => {\n const result = initProjectContext(process.cwd());\n for (const question of result.openQuestions) console.log(`- ${question}`);\n });\n\ncontext\n .command(\"render\")\n .description(\"Render .agent-kit/project-context.md from project-context.json.\")\n .action(() => {\n console.log(JSON.stringify(renderProjectContext(process.cwd()), null, 2));\n });\n\ncontext\n .command(\"validate\")\n .description(\"Validate .agent-kit/project-context.json.\")\n .action(() => {\n console.log(JSON.stringify(validateProjectContext(process.cwd()), null, 2));\n });\n\ncontext\n .command(\"show\")\n .description(\"Print rendered project context markdown.\")\n .action(() => {\n console.log(readTextFile(process.cwd(), \".agent-kit/project-context.md\") ?? \"\");\n });\n\nconst session = program.command(\"session\").description(\"Record and render local Agent Studio council sessions.\");\n\nsession\n .command(\"start <title...>\")\n .description(\"Start a local council session.\")\n .option(\"--workflow <workflow>\", \"Workflow id.\", \"planning\")\n .option(\"--request <request>\", \"Original user request.\")\n .action((titleParts: string[], options: { workflow: string; request?: string }) => {\n const title = titleParts.join(\" \");\n console.log(\n JSON.stringify(\n startSession(process.cwd(), {\n title,\n workflowId: options.workflow,\n ...(options.request ? { request: options.request } : {})\n }),\n null,\n 2\n )\n );\n });\n\nsession\n .command(\"list\")\n .description(\"List local council sessions.\")\n .action(() => {\n console.log(JSON.stringify(listSessions(process.cwd()), null, 2));\n });\n\nsession\n .command(\"active\")\n .description(\"Print the active council session id.\")\n .action(() => {\n console.log(getActiveSessionId(process.cwd()));\n });\n\nsession\n .command(\"note <text...>\")\n .description(\"Record a visible agent message.\")\n .requiredOption(\"--agent <agent>\", \"Agent id.\")\n .action((textParts: string[], options: { agent: string }) => {\n console.log(JSON.stringify(recordNote(process.cwd(), options.agent, textParts.join(\" \")), null, 2));\n });\n\nsession\n .command(\"decision <text...>\")\n .description(\"Record an agent decision.\")\n .requiredOption(\"--agent <agent>\", \"Agent id.\")\n .option(\"--risk <risk>\", \"Risk associated with the decision.\")\n .action((textParts: string[], options: { agent: string; risk?: string }) => {\n console.log(JSON.stringify(recordDecision(process.cwd(), options.agent, textParts.join(\" \"), options.risk), null, 2));\n });\n\nsession\n .command(\"handoff\")\n .description(\"Record an agent handoff.\")\n .requiredOption(\"--from <agent>\", \"Source agent id.\")\n .requiredOption(\"--to <agent>\", \"Target agent id.\")\n .requiredOption(\"--decision <decision>\", \"Decision being handed off.\")\n .requiredOption(\"--risk <risk>\", \"Risk that remains.\")\n .option(\"--evidence <evidence...>\", \"Evidence paths or notes.\")\n .action((options: { from: string; to: string; decision: string; risk: string; evidence?: string[] }) => {\n console.log(\n JSON.stringify(\n recordHandoff(process.cwd(), {\n fromAgentId: options.from,\n toAgentId: options.to,\n decision: options.decision,\n risk: options.risk,\n ...(options.evidence ? { evidence: options.evidence } : {})\n }),\n null,\n 2\n )\n );\n });\n\nsession\n .command(\"correct <text...>\")\n .description(\"Record a human correction and optionally promote it to durable rules.\")\n .option(\"--agent <agent>\", \"Agent id.\")\n .option(\"--scope <scope>\", \"Correction scope: session, project, agent, upstream-proposal.\", \"session\")\n .action((textParts: string[], options: { agent?: string; scope: \"session\" | \"project\" | \"agent\" | \"upstream-proposal\" }) => {\n console.log(\n JSON.stringify(\n recordCorrection(process.cwd(), {\n ...(options.agent ? { agentId: options.agent } : {}),\n scope: options.scope,\n text: textParts.join(\" \")\n }),\n null,\n 2\n )\n );\n });\n\nsession\n .command(\"artifact\")\n .description(\"Record a changed or relevant artifact path.\")\n .requiredOption(\"--file <file>\", \"Artifact file path.\")\n .option(\"--note <note>\", \"Artifact note.\")\n .action((options: { file: string; note?: string }) => {\n console.log(JSON.stringify(recordArtifact(process.cwd(), options.file, options.note), null, 2));\n });\n\nsession\n .command(\"verify\")\n .description(\"Record verification evidence.\")\n .requiredOption(\"--command <command>\", \"Command or review performed.\")\n .requiredOption(\"--result <result>\", \"pass, fail, or skipped.\")\n .option(\"--notes <notes>\", \"Verification notes.\")\n .action((options: { command: string; result: \"pass\" | \"fail\" | \"skipped\"; notes?: string }) => {\n console.log(JSON.stringify(recordVerification(process.cwd(), options.command, options.result, options.notes), null, 2));\n });\n\nsession\n .command(\"output <name...>\")\n .description(\"Mark a required session output status.\")\n .requiredOption(\"--status <status>\", \"missing, partial, complete, or not-applicable.\")\n .option(\"--evidence <evidence>\", \"Evidence path, command, or note.\")\n .action((nameParts: string[], options: { status: string; evidence?: string }) => {\n if (!isRequiredOutputStatus(options.status)) {\n console.error(`Invalid --status value \"${options.status}\". Expected one of: ${requiredOutputStatuses.join(\", \")}.`);\n process.exitCode = 1;\n return;\n }\n console.log(JSON.stringify(recordRequiredOutput(process.cwd(), nameParts.join(\" \"), options.status, options.evidence), null, 2));\n });\n\nsession\n .command(\"render\")\n .description(\"Render active session Markdown files.\")\n .action(() => {\n console.log(JSON.stringify(renderActiveSession(process.cwd()), null, 2));\n });\n\nsession\n .command(\"close\")\n .description(\"Close the active session.\")\n .option(\"--status <status>\", \"planned, in-progress, blocked, or complete.\", \"complete\")\n .action((options: { status: \"planned\" | \"in-progress\" | \"blocked\" | \"complete\" }) => {\n console.log(JSON.stringify(closeSession(process.cwd(), options.status), null, 2));\n });\n\nconst correction = program.command(\"correction\").description(\"Manage durable Agent Studio correction rules.\");\n\ncorrection\n .command(\"list\")\n .description(\"List correction rules.\")\n .action(() => {\n console.log(JSON.stringify(listCorrections(process.cwd()), null, 2));\n });\n\ncorrection\n .command(\"add <text...>\")\n .description(\"Add a durable correction rule.\")\n .option(\"--scope <scope>\", \"Correction scope: project, agent, or upstream-proposal.\", \"project\")\n .option(\"--agent <agent>\", \"Agent id for agent-scoped corrections.\")\n .action((textParts: string[], options: { scope: \"project\" | \"agent\" | \"upstream-proposal\"; agent?: string }) => {\n console.log(\n JSON.stringify(\n addCorrection(process.cwd(), {\n scope: options.scope,\n ...(options.agent ? { agentId: options.agent } : {}),\n text: textParts.join(\" \")\n }),\n null,\n 2\n )\n );\n });\n\ncorrection\n .command(\"apply [id]\")\n .description(\"Mark a correction rule active and reviewed.\")\n .option(\"--id <id>\", \"Correction id.\")\n .action((idArgument: string | undefined, options: { id?: string }) => {\n const id = idArgument ?? options.id;\n if (!id) {\n console.error(\"Missing correction id. Use agent-kit correction apply <id> or --id <id>.\");\n process.exitCode = 1;\n return;\n }\n console.log(JSON.stringify(applyCorrection(process.cwd(), id), null, 2));\n });\n\ncorrection\n .command(\"retire <id>\")\n .description(\"Retire a correction rule.\")\n .requiredOption(\"--reason <reason>\", \"Reason for retirement.\")\n .action((id: string, options: { reason: string }) => {\n console.log(JSON.stringify(retireCorrection(process.cwd(), id, options.reason), null, 2));\n });\n\ncorrection\n .command(\"propose-upstream <id>\")\n .description(\"Create an upstream proposal from a project or agent correction.\")\n .action((id: string) => {\n console.log(JSON.stringify(proposeCorrectionUpstream(process.cwd(), id), null, 2));\n });\n\nconst studio = program.command(\"studio\").description(\"Export local Agent Studio views.\");\n\nstudio\n .command(\"export\")\n .description(\"Generate a self-contained static Agent Studio HTML file.\")\n .action(() => {\n console.log(JSON.stringify(exportStaticStudio(process.cwd()), null, 2));\n });\n\nconst research = program.command(\"research\").description(\"Research high-quality open-source repositories.\");\n\nresearch\n .command(\"discover\")\n .description(\"Discover GitHub repo candidates using configured queries.\")\n .option(\"--limit <number>\", \"Maximum repositories to write.\", (value) => Number.parseInt(value, 10))\n .action(async (options: { limit?: number }) => {\n const repos = await discoverRepos({\n cwd: process.cwd(),\n ...(options.limit === undefined ? {} : { limit: options.limit })\n });\n console.log(`Wrote ${repos.length} candidates to research/repo-candidates.json`);\n });\n\nresearch\n .command(\"scan\")\n .description(\"Shallow clone candidate repos and write repo findings.\")\n .option(\"--keep-clones\", \"Keep cloned repositories in research/workdir.\")\n .action(async (options: { keepClones?: boolean }) => {\n const findings = await scanRepos({ cwd: process.cwd(), keepClones: Boolean(options.keepClones) });\n console.log(`Wrote ${findings.length} findings to research/findings`);\n });\n\nresearch\n .command(\"summarize\")\n .description(\"Generate category summaries from repo findings.\")\n .action(() => {\n const outputs = summarizeFindings(process.cwd());\n for (const output of outputs) console.log(output);\n });\n\nresearch\n .command(\"propose-updates\")\n .description(\"Create a research-to-template update brief.\")\n .action(() => {\n console.log(proposeUpdates(process.cwd()));\n });\n\nprogram.parseAsync(process.argv).catch((error: unknown) => {\n console.error(error instanceof Error ? error.message : String(error));\n process.exitCode = 1;\n});\n","import { existsSync } from \"node:fs\";\nimport { join } from \"node:path\";\nimport { copyTextWithConflict, listFilesRecursive } from \"../utils/fs.js\";\nimport { findPackageRoot } from \"../utils/package-root.js\";\n\nexport function listSkills(): string[] {\n const packageRoot = findPackageRoot();\n return listFilesRecursive(join(packageRoot, \"skills\")).filter((file) => file.endsWith(\".md\"));\n}\n\nexport function addSkill(cwd: string, skillName: string, options: { force?: boolean } = {}): string {\n const packageRoot = findPackageRoot();\n const normalized = skillName.endsWith(\".md\") ? skillName : `${skillName}.md`;\n\n if (!/^[a-z0-9-]+\\.md$/.test(normalized)) {\n throw new Error(\"Skill names may contain only lowercase letters, numbers, and hyphens.\");\n }\n\n const sourcePath = join(packageRoot, \"skills\", normalized);\n\n if (!existsSync(sourcePath)) {\n const available = listSkills().join(\", \");\n throw new Error(`Unknown skill \"${skillName}\". Available skills: ${available}`);\n }\n\n const result = copyTextWithConflict(sourcePath, cwd, join(\".agent-kit\", \"skills\", normalized), {\n force: Boolean(options.force),\n conflictRoot: join(cwd, \".agent-kit\", \"conflicts\")\n });\n\n return `${result.action}: ${result.target}`;\n}\n","import { createHash } from \"node:crypto\";\nimport {\n cpSync,\n existsSync,\n lstatSync,\n mkdirSync,\n readFileSync,\n readdirSync,\n writeFileSync\n} from \"node:fs\";\nimport { basename, dirname, isAbsolute, join, relative, resolve } from \"node:path\";\n\nexport function ensureDir(path: string): void {\n mkdirSync(path, { recursive: true });\n}\n\nexport function readTextIfExists(path: string): string | null {\n if (!existsSync(path)) return null;\n return readFileSync(path, \"utf8\");\n}\n\nexport function writeText(path: string, content: string): void {\n ensureDir(dirname(path));\n writeFileSync(path, content);\n}\n\nexport function sha256(content: string): string {\n return createHash(\"sha256\").update(content).digest(\"hex\");\n}\n\nexport function resolveInside(root: string, requestedPath: string): string {\n const resolvedRoot = resolve(root);\n const resolvedPath = resolve(resolvedRoot, requestedPath);\n const rel = relative(resolvedRoot, resolvedPath);\n\n if (rel === \"..\" || rel.startsWith(\"..\") || isAbsolute(rel)) {\n throw new Error(`Unsafe path outside root: ${requestedPath}`);\n }\n\n return resolvedPath;\n}\n\nexport function listFilesRecursive(root: string): string[] {\n if (!existsSync(root)) return [];\n\n const out: string[] = [];\n const visit = (dir: string) => {\n for (const entry of readdirSync(dir)) {\n const fullPath = join(dir, entry);\n let stats;\n try {\n stats = lstatSync(fullPath);\n } catch {\n continue;\n }\n\n if (stats.isSymbolicLink()) continue;\n\n if (stats.isDirectory()) {\n if (entry === \"node_modules\" || entry === \".git\") continue;\n visit(fullPath);\n } else {\n out.push(relative(root, fullPath));\n }\n }\n };\n\n visit(root);\n return out.sort();\n}\n\nexport interface CopyResult {\n action: \"created\" | \"unchanged\" | \"conflict\" | \"overwritten\";\n target: string;\n conflictPath?: string;\n}\n\nexport function copyTextWithConflict(\n sourcePath: string,\n targetRoot: string,\n targetRelativePath: string,\n options: { force?: boolean; conflictRoot?: string } = {}\n): CopyResult {\n const targetPath = resolveInside(targetRoot, targetRelativePath);\n const sourceContent = readFileSync(sourcePath, \"utf8\");\n const existingContent = readTextIfExists(targetPath);\n\n if (existingContent === null) {\n writeText(targetPath, sourceContent);\n return { action: \"created\", target: targetRelativePath };\n }\n\n if (sha256(existingContent) === sha256(sourceContent)) {\n return { action: \"unchanged\", target: targetRelativePath };\n }\n\n if (options.force) {\n writeText(targetPath, sourceContent);\n return { action: \"overwritten\", target: targetRelativePath };\n }\n\n const conflictRoot = options.conflictRoot ?? join(targetRoot, \".agent-kit\", \"conflicts\");\n const safeName = `${Date.now()}-${targetRelativePath.replace(/[^a-zA-Z0-9_.-]/g, \"_\")}`;\n const conflictPath = join(conflictRoot, safeName);\n writeText(conflictPath, sourceContent);\n\n return {\n action: \"conflict\",\n target: targetRelativePath,\n conflictPath: relative(targetRoot, conflictPath)\n };\n}\n\nexport function copyDirectory(sourceRoot: string, targetRoot: string): void {\n ensureDir(dirname(targetRoot));\n cpSync(sourceRoot, targetRoot, {\n recursive: true,\n force: true,\n filter: (source) => !basename(source).startsWith(\".DS_Store\")\n });\n}\n","import { existsSync } from \"node:fs\";\nimport { dirname, join, resolve } from \"node:path\";\nimport { fileURLToPath } from \"node:url\";\n\nexport function findPackageRoot(start = dirname(fileURLToPath(import.meta.url))): string {\n let current = resolve(start);\n\n for (let i = 0; i < 8; i += 1) {\n if (existsSync(join(current, \"package.json\"))) {\n return current;\n }\n\n const parent = dirname(current);\n if (parent === current) break;\n current = parent;\n }\n\n throw new Error(\"Unable to locate package root from runtime path.\");\n}\n","import { existsSync, readFileSync, statSync } from \"node:fs\";\nimport { join } from \"node:path\";\nimport {\n AgentRosterContract,\n CorrectionRulesContract,\n CouncilSessionContract,\n ModelRoutingContract,\n ProjectContextContract,\n SessionEventContract,\n StudioSessionContract,\n formatContractIssues\n} from \"../config/contracts.js\";\nimport { DEFAULT_AGENT_ROSTER_TARGET, DEFAULT_MODEL_ROUTING_TARGET, ROOT_DOCS } from \"../config/defaults.js\";\nimport type { AuditFinding, AuditReadiness, AuditReport, StackProfile } from \"../config/types.js\";\nimport { listFilesRecursive, sha256 } from \"../utils/fs.js\";\nimport { findPackageRoot } from \"../utils/package-root.js\";\nimport { AGENT_RULES_JSON, CONTEXT_JSON, CONTEXT_MD, PROJECT_RULES_JSON, STUDIO_EXPORT_HTML, containsLikelySecret } from \"../studio/shared.js\";\nimport { readManifest } from \"./install.js\";\n\ninterface TemplateOverride {\n reason?: string;\n reviewedAt?: string;\n owner?: string;\n}\n\ninterface AgentKitOverrides {\n templates?: Record<string, TemplateOverride | string>;\n}\n\ninterface AgentRosterAgent {\n id?: unknown;\n skills?: unknown;\n defaultFor?: unknown;\n}\n\ninterface AgentRosterWorkflow {\n id?: unknown;\n sequence?: unknown;\n council?: unknown;\n requiredOutputs?: unknown;\n}\n\ninterface AgentRoster {\n schemaVersion?: unknown;\n defaultWorkflow?: unknown;\n required?: unknown;\n agents?: unknown;\n workflows?: unknown;\n handoffRules?: unknown;\n}\n\nconst REQUIRED_AGENT_IDS = [\n \"planner\",\n \"lead-architect\",\n \"nextjs-engineer\",\n \"supabase-postgres-engineer\",\n \"security-reviewer\",\n \"frontend-design-lead\",\n \"marketing-copy-lead\",\n \"qa-engineer\",\n \"docs-maintainer\",\n \"deployment-observability-engineer\"\n];\n\nconst REQUIRED_SKILL_IDS = [\n \"planning-council\",\n \"best-practice-maturity-review\",\n \"upgrade-maintenance\",\n \"nextjs-app-router\",\n \"supabase-auth-rls\",\n \"postgres-migrations\",\n \"owasp-security-review\",\n \"agent-handoff-tracing\",\n \"content-first-design\",\n \"reference-led-design-critique\",\n \"frontend-distinctiveness-benchmark\",\n \"frontend-product-quality-rubric\",\n \"frontend-design-system\",\n \"visual-regression-qa\",\n \"positioning-messaging\",\n \"conversion-copywriting\",\n \"landing-page-copy\",\n \"product-voice-tone\",\n \"onboarding-empty-state-copy\",\n \"accessibility-wcag\",\n \"testing-qa\",\n \"docs-maintainer\",\n \"deployment-observability\"\n];\n\nconst REQUIRED_SCHEMA_FILES = [\n \"agent-roster.schema.json\",\n \"council-session.schema.json\",\n \"audit-report.schema.json\",\n \"model-routing.schema.json\",\n \"project-context.schema.json\",\n \"correction-rules.schema.json\",\n \"session-event.schema.json\",\n \"studio-session.schema.json\"\n] as const;\nconst COUNCIL_SESSION_DIR = \".agent-kit/council-sessions\";\n\nexport const READINESS_ORDER = [\"needs-setup\", \"baseline-setup\", \"needs-improvement\", \"best-practice-candidate\"] as const;\n\nexport function isAuditReadinessLevel(value: string): value is AuditReadiness[\"level\"] {\n return (READINESS_ORDER as readonly string[]).includes(value);\n}\n\nexport function meetsMinimumReadiness(actual: AuditReadiness[\"level\"], minimum: AuditReadiness[\"level\"]): boolean {\n return READINESS_ORDER.indexOf(actual) >= READINESS_ORDER.indexOf(minimum);\n}\n\nfunction includesAny(text: string, values: string[]): boolean {\n const lower = text.toLowerCase();\n return values.some((value) => lower.includes(value.toLowerCase()));\n}\n\nfunction includesAll(text: string, values: string[]): boolean {\n const lower = text.toLowerCase();\n return values.every((value) => lower.includes(value.toLowerCase()));\n}\n\nfunction readDoc(cwd: string, file: string): string {\n const path = join(cwd, file);\n return existsSync(path) ? readFileSync(path, \"utf8\") : \"\";\n}\n\nfunction readOverrides(cwd: string): Record<string, TemplateOverride> {\n const path = join(cwd, \".agent-kit\", \"overrides.json\");\n if (!existsSync(path)) return {};\n\n try {\n const parsed = JSON.parse(readFileSync(path, \"utf8\")) as AgentKitOverrides;\n const templates = parsed.templates ?? {};\n return Object.fromEntries(\n Object.entries(templates).map(([file, override]) => [\n file,\n typeof override === \"string\"\n ? { reason: override }\n : override && typeof override === \"object\"\n ? override\n : { reason: String(override) }\n ])\n );\n } catch {\n return {};\n }\n}\n\nfunction readTemplate(stack: StackProfile, file: string): string | null {\n const path = join(findPackageRoot(), \"templates\", stack, file);\n return existsSync(path) ? readFileSync(path, \"utf8\") : null;\n}\n\nfunction asStringArray(value: unknown): string[] {\n if (!Array.isArray(value)) return [];\n return value.filter((item): item is string => typeof item === \"string\");\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === \"object\" && value !== null;\n}\n\nfunction addAgentRosterFindings(cwd: string, findings: AuditFinding[]): void {\n const rosterPath = join(cwd, DEFAULT_AGENT_ROSTER_TARGET);\n if (!existsSync(rosterPath)) {\n findings.push({\n level: \"fail\",\n area: \"agents\",\n message: `${DEFAULT_AGENT_ROSTER_TARGET} is missing.`,\n remediation: \"Run agent-kit update to install the default council roster and agent-to-skill routing.\"\n });\n return;\n }\n\n let roster: AgentRoster;\n try {\n const parsed = JSON.parse(readFileSync(rosterPath, \"utf8\")) as unknown;\n if (!isRecord(parsed)) throw new Error(\"Roster must be a JSON object.\");\n const contractResult = AgentRosterContract.safeParse(parsed);\n if (!contractResult.success) {\n findings.push({\n level: \"fail\",\n area: \"agents\",\n message: `${DEFAULT_AGENT_ROSTER_TARGET} does not match the schema-backed roster contract.`,\n remediation: `Fix roster shape before relying on council routing. First issue: ${formatContractIssues(contractResult.error)[0]}`\n });\n return;\n }\n roster = contractResult.data;\n findings.push({\n level: \"pass\",\n area: \"agents\",\n message: \"Agent roster matches the schema-backed runtime contract.\"\n });\n } catch {\n findings.push({\n level: \"fail\",\n area: \"agents\",\n message: `${DEFAULT_AGENT_ROSTER_TARGET} is not valid roster JSON.`,\n remediation: \"Replace it with .agent-kit/rosters/next-supabase-default-council.json or rerun agent-kit update.\"\n });\n return;\n }\n\n if (roster.schemaVersion !== 1 || roster.required !== true || roster.defaultWorkflow !== \"planning\") {\n findings.push({\n level: \"warn\",\n area: \"agents\",\n message: \"Agent roster metadata does not match the expected default council contract.\",\n remediation: \"Keep schemaVersion 1, required true, and defaultWorkflow planning unless a documented override exists.\"\n });\n }\n\n const agents = Array.isArray(roster.agents) ? (roster.agents.filter(isRecord) as AgentRosterAgent[]) : [];\n const agentIds = new Set(agents.map((agent) => (typeof agent.id === \"string\" ? agent.id : \"\")).filter(Boolean));\n const missingAgents = REQUIRED_AGENT_IDS.filter((agentId) => !agentIds.has(agentId));\n\n if (missingAgents.length > 0) {\n findings.push({\n level: \"fail\",\n area: \"agents\",\n message: `Agent roster is missing required default agents: ${missingAgents.join(\", \")}.`,\n remediation: \"Restore the default council roster so Planner, Architect, implementation, security, QA, docs, and deployment handoffs are always available.\"\n });\n } else {\n findings.push({\n level: \"pass\",\n area: \"agents\",\n message: \"Agent roster contains the required default council agents.\"\n });\n }\n\n const skillIds = new Set(agents.flatMap((agent) => asStringArray(agent.skills)));\n const missingSkills = REQUIRED_SKILL_IDS.filter((skillId) => !skillIds.has(skillId));\n if (missingSkills.length > 0) {\n findings.push({\n level: \"fail\",\n area: \"agents\",\n message: `Agent roster is missing required skill routing: ${missingSkills.join(\", \")}.`,\n remediation: \"Map each default agent to its associated skills so handoffs can invoke the right review path automatically.\"\n });\n } else {\n findings.push({\n level: \"pass\",\n area: \"agents\",\n message: \"Agent roster maps default agents to required skills.\"\n });\n }\n\n const planner = agents.find((agent) => agent.id === \"planner\");\n if (!planner || !asStringArray(planner.defaultFor).includes(\"planning\")) {\n findings.push({\n level: \"fail\",\n area: \"agents\",\n message: \"Planner is not marked as the default agent for planning.\",\n remediation: \"Set planner.defaultFor to include planning so planning requests do not bypass the planning role.\"\n });\n }\n\n const workflows = Array.isArray(roster.workflows) ? (roster.workflows.filter(isRecord) as AgentRosterWorkflow[]) : [];\n const planningWorkflow = workflows.find((workflow) => workflow.id === \"planning\");\n const coreChangeWorkflow = workflows.find((workflow) => workflow.id === \"core-change\");\n const frontendWorkflow = workflows.find((workflow) => workflow.id === \"frontend-change\");\n const marketingCopyWorkflow = workflows.find((workflow) => workflow.id === \"marketing-copy\");\n\n if (!planningWorkflow || asStringArray(planningWorkflow.sequence)[0] !== \"planner\") {\n findings.push({\n level: \"fail\",\n area: \"agents\",\n message: \"Planning workflow does not start with Planner.\",\n remediation: \"Define a planning workflow whose first sequence item is planner.\"\n });\n }\n\n const coreSequence = asStringArray(coreChangeWorkflow?.sequence);\n const coreCouncil = asStringArray(coreChangeWorkflow?.council);\n if (!coreChangeWorkflow || !coreSequence.includes(\"lead-architect\") || !coreCouncil.includes(\"lead-architect\")) {\n findings.push({\n level: \"fail\",\n area: \"agents\",\n message: \"Core-change workflow does not require Lead Architect council review.\",\n remediation: \"Define core-change with Lead Architect in both sequence and council.\"\n });\n } else if (!coreCouncil.includes(\"security-reviewer\") || !coreCouncil.includes(\"qa-engineer\")) {\n findings.push({\n level: \"warn\",\n area: \"agents\",\n message: \"Core-change council is missing security or QA participation.\",\n remediation: \"Include Security Reviewer and QA Engineer in core-change council membership.\"\n });\n } else {\n findings.push({\n level: \"pass\",\n area: \"agents\",\n message: \"Core-change workflow requires architect-led council handoff.\"\n });\n }\n\n const frontendSequence = asStringArray(frontendWorkflow?.sequence);\n const frontendOutputs = asStringArray(frontendWorkflow?.requiredOutputs).join(\" \").toLowerCase();\n if (!frontendWorkflow || !frontendSequence.includes(\"frontend-design-lead\")) {\n findings.push({\n level: \"fail\",\n area: \"agents\",\n message: \"Frontend-change workflow does not require Frontend Design Lead review.\",\n remediation: \"Define frontend-change with Frontend Design Lead in the sequence before implementation is accepted.\"\n });\n } else if (\n !frontendOutputs.includes(\"brand\") ||\n !frontendOutputs.includes(\"creative\") ||\n !frontendOutputs.includes(\"reference\") ||\n !frontendOutputs.includes(\"distinctiveness\") ||\n !frontendOutputs.includes(\"critique\") ||\n !frontendOutputs.includes(\"scorecard\") ||\n !frontendOutputs.includes(\"visual\")\n ) {\n findings.push({\n level: \"warn\",\n area: \"agents\",\n message: \"Frontend-change workflow is missing brand/content intake, creative-direction, reference-led critique, or visual QA outputs.\",\n remediation:\n \"Require brand/content intake, creative-direction rationale, reference-set evidence, distinctiveness benchmark, design critique verdict, frontend product-quality scorecard, visual QA evidence, state coverage, accessibility checks, and screenshot evidence.\"\n });\n } else {\n findings.push({\n level: \"pass\",\n area: \"agents\",\n message: \"Frontend-change workflow requires content-first design, reference-led critique, distinctiveness benchmarking, product-quality scoring, and creative-direction evidence.\"\n });\n }\n\n const marketingCopyLead = agents.find((agent) => agent.id === \"marketing-copy-lead\");\n const marketingDefaultFor = asStringArray(marketingCopyLead?.defaultFor);\n const marketingSkills = asStringArray(marketingCopyLead?.skills);\n if (\n !marketingCopyLead ||\n !marketingDefaultFor.includes(\"copywriting\") ||\n !marketingDefaultFor.includes(\"value-proposition\") ||\n !marketingSkills.includes(\"positioning-messaging\") ||\n !marketingSkills.includes(\"conversion-copywriting\")\n ) {\n findings.push({\n level: \"fail\",\n area: \"agents\",\n message: \"Marketing Copy Lead is missing question-led positioning or conversion-copy skill routing.\",\n remediation:\n \"Restore Marketing Copy Lead with copywriting, positioning, value-proposition, conversion, voice/tone, landing-page, onboarding, and empty-state routing.\"\n });\n }\n\n const marketingSequence = asStringArray(marketingCopyWorkflow?.sequence);\n const marketingOutputs = asStringArray(marketingCopyWorkflow?.requiredOutputs).join(\" \").toLowerCase();\n if (!marketingCopyWorkflow || !marketingSequence.includes(\"marketing-copy-lead\")) {\n findings.push({\n level: \"fail\",\n area: \"agents\",\n message: \"Marketing-copy workflow does not require Marketing Copy Lead review.\",\n remediation: \"Define marketing-copy with Marketing Copy Lead in the sequence before public-facing copy is accepted.\"\n });\n } else if (\n !marketingOutputs.includes(\"questions\") ||\n !marketingOutputs.includes(\"audience\") ||\n !marketingOutputs.includes(\"value proposition\") ||\n !marketingOutputs.includes(\"proof\") ||\n !marketingOutputs.includes(\"objections\") ||\n !marketingOutputs.includes(\"voice\") ||\n !marketingOutputs.includes(\"conversion\")\n ) {\n findings.push({\n level: \"warn\",\n area: \"agents\",\n message: \"Marketing-copy workflow is missing discovery questions, audience, value proposition, proof, objections, voice, or conversion outputs.\",\n remediation:\n \"Require discovery questions, audience and segment assumptions, problem/pain/outcome, value proposition, differentiators, proof, objections, voice/tone, conversion goal, and design handoff notes.\"\n });\n } else {\n findings.push({\n level: \"pass\",\n area: \"agents\",\n message: \"Marketing-copy workflow requires question-led positioning, value proposition, proof, objections, voice, and conversion evidence.\"\n });\n }\n\n const handoffRules = asStringArray(roster.handoffRules).join(\" \").toLowerCase();\n if (!includesAll(handoffRules, [\"decision\", \"risk\", \"handoff\", \"evidence\"])) {\n findings.push({\n level: \"warn\",\n area: \"agents\",\n message: \"Agent roster handoff rules do not require decision, risk, handoff, and evidence capture.\",\n remediation: \"Add handoff rules that require each meaningful council step to record decision, risk, next handoff, and evidence.\"\n });\n } else {\n findings.push({\n level: \"pass\",\n area: \"agents\",\n message: \"Agent roster requires auditable handoff evidence.\"\n });\n }\n}\n\nfunction addCouncilSessionRecordFindings(cwd: string, findings: AuditFinding[]): void {\n const sessionsRoot = join(cwd, COUNCIL_SESSION_DIR);\n if (!existsSync(sessionsRoot)) return;\n\n const sessionFiles = listFilesRecursive(sessionsRoot).filter((file) => file.endsWith(\".json\") && !/[\\\\/]/.test(file));\n if (sessionFiles.length === 0) return;\n\n let invalidCount = 0;\n for (const sessionFile of sessionFiles) {\n const displayPath = `${COUNCIL_SESSION_DIR}/${sessionFile}`;\n try {\n const parsed = JSON.parse(readFileSync(join(sessionsRoot, sessionFile), \"utf8\")) as unknown;\n const contractResult = CouncilSessionContract.safeParse(parsed);\n if (!contractResult.success) {\n invalidCount += 1;\n findings.push({\n level: \"fail\",\n area: \"agents\",\n message: `${displayPath} does not match the council-session contract.`,\n remediation: `Fix the structured council record. First issue: ${formatContractIssues(contractResult.error)[0]}`\n });\n }\n } catch {\n invalidCount += 1;\n findings.push({\n level: \"fail\",\n area: \"agents\",\n message: `${displayPath} is not valid council-session JSON.`,\n remediation: \"Replace it with a valid JSON record matching .agent-kit/schemas/council-session.schema.json.\"\n });\n }\n }\n\n if (invalidCount === 0) {\n findings.push({\n level: \"pass\",\n area: \"agents\",\n message: `Structured council-session records match the runtime contract (${sessionFiles.length} checked).`\n });\n }\n}\n\nfunction addSchemaFindings(cwd: string, findings: AuditFinding[]): void {\n for (const schemaFile of REQUIRED_SCHEMA_FILES) {\n const schemaPath = join(cwd, \".agent-kit\", \"schemas\", schemaFile);\n if (!existsSync(schemaPath)) {\n findings.push({\n level: \"warn\",\n area: \"agents\",\n message: `.agent-kit/schemas/${schemaFile} is missing.`,\n remediation: \"Run agent-kit update to install the schema-backed council and roster contracts.\"\n });\n continue;\n }\n\n try {\n const parsed = JSON.parse(readFileSync(schemaPath, \"utf8\")) as unknown;\n if (!isRecord(parsed) || typeof parsed.$schema !== \"string\" || !isRecord(parsed.properties)) {\n throw new Error(\"Schema file is missing JSON Schema metadata.\");\n }\n\n findings.push({\n level: \"pass\",\n area: \"agents\",\n message: `.agent-kit/schemas/${schemaFile} is present and parseable.`\n });\n } catch {\n findings.push({\n level: \"fail\",\n area: \"agents\",\n message: `.agent-kit/schemas/${schemaFile} is not valid JSON Schema.`,\n remediation: \"Restore the schema from the package or rerun agent-kit update.\"\n });\n }\n }\n}\n\nfunction addAgentStudioFindings(cwd: string, findings: AuditFinding[]): void {\n const contextPath = join(cwd, CONTEXT_JSON);\n if (!existsSync(contextPath)) {\n findings.push({\n level: \"warn\",\n area: \"studio\",\n message: `${CONTEXT_JSON} is missing.`,\n remediation: \"Run agent-kit onboard or agent-kit init --guided so agents can start with project-specific context.\"\n });\n } else {\n try {\n const parsed = JSON.parse(readFileSync(contextPath, \"utf8\")) as unknown;\n const result = ProjectContextContract.safeParse(parsed);\n if (!result.success) {\n findings.push({\n level: \"fail\",\n area: \"studio\",\n message: `${CONTEXT_JSON} does not match the project-context contract.`,\n remediation: `Fix project context before relying on guided agent behavior. First issue: ${formatContractIssues(result.error)[0]}`\n });\n } else {\n const missingHighValue = [\n [\"product summary\", result.data.productSummary],\n [\"primary audience\", result.data.primaryAudience],\n [\"auth model\", result.data.authModel],\n [\"tenant model\", result.data.tenantModel]\n ].filter(([, value]) => typeof value === \"string\" && !value.trim());\n if (missingHighValue.length > 0 || result.data.primaryWorkflows.length === 0) {\n findings.push({\n level: \"warn\",\n area: \"studio\",\n message: `${CONTEXT_JSON} is valid but still missing high-value project context.`,\n remediation: \"Answer product summary, audience, workflows, auth/tenant model, UI direction, value proposition, and quality target before claiming context-aware setup.\"\n });\n } else {\n findings.push({\n level: \"pass\",\n area: \"studio\",\n message: \"Project context is valid and contains high-value onboarding context.\"\n });\n }\n }\n } catch {\n findings.push({\n level: \"fail\",\n area: \"studio\",\n message: `${CONTEXT_JSON} is not valid JSON.`,\n remediation: \"Regenerate project context with agent-kit context init or fix the JSON syntax.\"\n });\n }\n }\n\n const contextMdPath = join(cwd, CONTEXT_MD);\n if (existsSync(contextPath) && !existsSync(contextMdPath)) {\n findings.push({\n level: \"warn\",\n area: \"studio\",\n message: `${CONTEXT_MD} is missing while project context JSON exists.`,\n remediation: \"Run agent-kit context render so humans can review the context agents will load.\"\n });\n }\n\n for (const relativePath of [PROJECT_RULES_JSON, AGENT_RULES_JSON]) {\n const path = join(cwd, relativePath);\n if (!existsSync(path)) continue;\n try {\n const parsed = JSON.parse(readFileSync(path, \"utf8\")) as unknown;\n const result = CorrectionRulesContract.safeParse(parsed);\n if (!result.success) {\n findings.push({\n level: \"fail\",\n area: \"studio\",\n message: `${relativePath} does not match the correction-rules contract.`,\n remediation: `Fix correction rules before relying on persistent human feedback. First issue: ${formatContractIssues(result.error)[0]}`\n });\n } else if (result.data.rules.some((rule) => rule.status === \"active\")) {\n findings.push({\n level: \"pass\",\n area: \"studio\",\n message: `${relativePath} contains valid active correction rules.`\n });\n }\n } catch {\n findings.push({\n level: \"fail\",\n area: \"studio\",\n message: `${relativePath} is not valid JSON.`,\n remediation: \"Fix the JSON syntax or regenerate correction files with agent-kit correction commands.\"\n });\n }\n }\n\n const studioExportPath = join(cwd, STUDIO_EXPORT_HTML);\n if (existsSync(studioExportPath)) {\n const exportHtml = readFileSync(studioExportPath, \"utf8\");\n if (containsLikelySecret(exportHtml)) {\n findings.push({\n level: \"fail\",\n area: \"studio\",\n message: `${STUDIO_EXPORT_HTML} appears to contain a secret-like value.`,\n remediation: \"Regenerate the static studio export after redacting sensitive context, session, correction, and artifact data.\"\n });\n } else if (!exportHtml.includes(\"agent-studio-data\") || !exportHtml.includes(\"Agent Studio\")) {\n findings.push({\n level: \"warn\",\n area: \"studio\",\n message: `${STUDIO_EXPORT_HTML} does not look like a complete Agent Studio export.`,\n remediation: \"Regenerate it with agent-kit studio export.\"\n });\n } else {\n findings.push({\n level: \"pass\",\n area: \"studio\",\n message: `${STUDIO_EXPORT_HTML} is present and does not contain known secret patterns.`\n });\n }\n }\n\n const sessionsRoot = join(cwd, COUNCIL_SESSION_DIR);\n if (!existsSync(sessionsRoot)) return;\n\n const files = listFilesRecursive(sessionsRoot);\n const studioSessionFiles = files.filter((file) => /[\\\\/]session\\.json$/.test(file));\n for (const sessionFile of studioSessionFiles) {\n const normalizedSessionFile = sessionFile.replace(/\\\\/g, \"/\");\n const sessionRelative = `${COUNCIL_SESSION_DIR}/${normalizedSessionFile}`;\n const sessionDir = sessionFile.replace(/[\\\\/]session\\.json$/, \"\");\n const normalizedSessionDir = sessionDir.replace(/\\\\/g, \"/\");\n const eventsRelative = `${COUNCIL_SESSION_DIR}/${normalizedSessionDir}/events.jsonl`;\n const indexRelative = `${COUNCIL_SESSION_DIR}/${normalizedSessionDir}/index.md`;\n const transcriptRelative = `${COUNCIL_SESSION_DIR}/${normalizedSessionDir}/transcript.md`;\n const sessionDirPath = join(sessionsRoot, sessionDir);\n\n let sessionResult: ReturnType<typeof StudioSessionContract.safeParse> | null = null;\n try {\n sessionResult = StudioSessionContract.safeParse(JSON.parse(readFileSync(join(sessionDirPath, \"session.json\"), \"utf8\")) as unknown);\n if (!sessionResult.success) {\n findings.push({\n level: \"fail\",\n area: \"studio\",\n message: `${sessionRelative} does not match the studio-session contract.`,\n remediation: `Fix session metadata. First issue: ${formatContractIssues(sessionResult.error)[0]}`\n });\n continue;\n }\n } catch {\n findings.push({\n level: \"fail\",\n area: \"studio\",\n message: `${sessionRelative} is not valid JSON.`,\n remediation: \"Fix session metadata JSON before relying on rendered session evidence.\"\n });\n continue;\n }\n\n const eventsPath = join(sessionDirPath, \"events.jsonl\");\n if (!existsSync(eventsPath)) {\n findings.push({\n level: \"fail\",\n area: \"studio\",\n message: `${eventsRelative} is missing.`,\n remediation: \"Record session events or remove the incomplete studio session folder.\"\n });\n continue;\n }\n\n const eventText = readFileSync(eventsPath, \"utf8\");\n if (containsLikelySecret(eventText)) {\n findings.push({\n level: \"fail\",\n area: \"studio\",\n message: `${eventsRelative} appears to contain a secret-like value.`,\n remediation: \"Redact tokens, database URLs, env values, and private customer data from session logs.\"\n });\n }\n\n const eventLines = eventText.split(/\\r?\\n/).filter((line) => line.trim().length > 0);\n let validEvents = 0;\n let verificationCount = 0;\n for (const [index, line] of eventLines.entries()) {\n try {\n const result = SessionEventContract.safeParse(JSON.parse(line) as unknown);\n if (!result.success) {\n findings.push({\n level: \"fail\",\n area: \"studio\",\n message: `${eventsRelative} line ${index + 1} does not match the session-event contract.`,\n remediation: `Fix the event row. First issue: ${formatContractIssues(result.error)[0]}`\n });\n } else {\n validEvents += 1;\n if (result.data.type === \"verification_recorded\") verificationCount += 1;\n }\n } catch {\n findings.push({\n level: \"fail\",\n area: \"studio\",\n message: `${eventsRelative} line ${index + 1} is not valid JSON.`,\n remediation: \"Fix malformed JSONL before rendering or auditing session history.\"\n });\n }\n }\n\n if (!existsSync(join(sessionDirPath, \"index.md\")) || !existsSync(join(sessionDirPath, \"transcript.md\"))) {\n findings.push({\n level: \"warn\",\n area: \"studio\",\n message: `${sessionDir} has unrendered session Markdown.`,\n remediation: \"Run agent-kit session render so humans can inspect the current agent transcript and handoffs.\"\n });\n } else {\n const indexText = readFileSync(join(sessionDirPath, \"index.md\"), \"utf8\");\n const transcriptText = readFileSync(join(sessionDirPath, \"transcript.md\"), \"utf8\");\n if (containsLikelySecret(indexText) || containsLikelySecret(transcriptText)) {\n findings.push({\n level: \"fail\",\n area: \"studio\",\n message: `${sessionDir} rendered Markdown appears to contain a secret-like value.`,\n remediation: \"Regenerate Markdown after redacting sensitive values from the event log.\"\n });\n }\n if (statSync(eventsPath).mtimeMs > statSync(join(sessionDirPath, \"index.md\")).mtimeMs) {\n findings.push({\n level: \"warn\",\n area: \"studio\",\n message: `${sessionDir} has events newer than rendered Markdown.`,\n remediation: \"Run agent-kit session render after recording new events.\"\n });\n }\n }\n\n const session = sessionResult.data;\n if (session.status === \"complete\") {\n const missingOutputs = session.requiredOutputs.filter((output) => output.status === \"missing\" || output.status === \"partial\");\n if (missingOutputs.length > 0 || verificationCount === 0) {\n findings.push({\n level: \"fail\",\n area: \"studio\",\n message: `${sessionRelative} is complete but lacks required outputs or verification evidence.`,\n remediation: \"Do not mark sessions complete until required outputs are complete or not-applicable and verification evidence is recorded.\"\n });\n }\n }\n\n if (validEvents > 0) {\n findings.push({\n level: \"pass\",\n area: \"studio\",\n message: `${sessionDir} has ${validEvents} valid Agent Studio events.`\n });\n }\n }\n}\n\nfunction addCouncilDocFindings(cwd: string, findings: AuditFinding[]): void {\n const councilDoc = readDoc(cwd, \"COUNCIL.md\");\n if (!councilDoc) return;\n\n if (!includesAll(councilDoc, [\"council session\", \"handoff\", \"decision\", \"risk\", \"evidence\"])) {\n findings.push({\n level: \"warn\",\n area: \"agents\",\n message: \"COUNCIL.md does not define a complete council-session handoff record.\",\n remediation: \"Require workflow, decision, risk, next handoff, evidence, required outputs, and verification status in council sessions.\"\n });\n } else {\n findings.push({\n level: \"pass\",\n area: \"agents\",\n message: \"COUNCIL.md defines council-session handoff evidence.\"\n });\n }\n}\n\nfunction addAssistantAdapterFindings(cwd: string, findings: AuditFinding[]): void {\n const adaptersDoc = readDoc(cwd, \"ASSISTANT_ADAPTERS.md\");\n const adapterRoot = join(cwd, \".agent-kit\", \"assistant-adapters\");\n\n if (!existsSync(adapterRoot)) {\n findings.push({\n level: \"warn\",\n area: \"agents\",\n message: \".agent-kit/assistant-adapters is missing.\",\n remediation: \"Run agent-kit update so tool-specific adapter templates are available for Codex, Copilot, Cursor, and Claude Code.\"\n });\n } else {\n findings.push({\n level: \"pass\",\n area: \"agents\",\n message: \".agent-kit/assistant-adapters is installed.\"\n });\n }\n\n if (!adaptersDoc) return;\n\n if (!includesAll(adaptersDoc, [\"AGENTS.md\", \"agent-roster.json\", \"copilot-instructions\", \".cursor/rules\", \".claude/agents\", \"source of truth\"])) {\n findings.push({\n level: \"warn\",\n area: \"agents\",\n message: \"ASSISTANT_ADAPTERS.md does not map the council roster to supported tool instruction surfaces.\",\n remediation:\n \"Document Codex/AGENTS.md, GitHub Copilot, Cursor rules, Claude Code subagents, and the source-of-truth rule for avoiding divergent agent instructions.\"\n });\n } else {\n findings.push({\n level: \"pass\",\n area: \"agents\",\n message: \"ASSISTANT_ADAPTERS.md maps the council roster to tool-specific instruction surfaces.\"\n });\n }\n\n if (!includesAll(adaptersDoc, [\"model selection\", \"enforcement\", \"MODEL_ROUTING.md\", \"model-routing.json\"])) {\n findings.push({\n level: \"warn\",\n area: \"models\",\n message: \"ASSISTANT_ADAPTERS.md does not record model-selection and enforcement status for active tools.\",\n remediation: \"Document which IDEs can enforce, partially apply, advise, or require manual model selection from MODEL_ROUTING.md.\"\n });\n }\n\n if (/\\bTBD\\b/i.test(adaptersDoc)) {\n findings.push({\n level: \"warn\",\n area: \"models\",\n message: \"ASSISTANT_ADAPTERS.md still has unverified tool-surface rows.\",\n remediation: \"Replace TBD adapter rows with date, owner, evidence, model-selection status, and known limitations for each active IDE.\"\n });\n }\n}\n\nfunction addModelRoutingFindings(cwd: string, findings: AuditFinding[]): void {\n const modelRoutingDoc = readDoc(cwd, \"MODEL_ROUTING.md\");\n if (!modelRoutingDoc) {\n findings.push({\n level: \"warn\",\n area: \"models\",\n message: \"MODEL_ROUTING.md is missing.\",\n remediation: \"Run agent-kit update to install the model-routing guidance and document the active IDE model-selection setup.\"\n });\n } else if (!includesAll(modelRoutingDoc, [\"model routing\", \"agent\", \"profile\", \"codex\", \"claude code\", \"cursor\", \"github copilot\", \"enforcement\"])) {\n findings.push({\n level: \"warn\",\n area: \"models\",\n message: \"MODEL_ROUTING.md does not explain agent profiles and IDE enforcement limits.\",\n remediation: \"Restore model-routing guidance that maps agents to profiles and records Codex, Claude Code, Cursor, and GitHub Copilot setup status.\"\n });\n } else {\n findings.push({\n level: \"pass\",\n area: \"models\",\n message: \"MODEL_ROUTING.md documents agent model profiles and IDE enforcement limits.\"\n });\n }\n\n const routingPath = join(cwd, DEFAULT_MODEL_ROUTING_TARGET);\n if (!existsSync(routingPath)) {\n findings.push({\n level: \"warn\",\n area: \"models\",\n message: `${DEFAULT_MODEL_ROUTING_TARGET} is missing.`,\n remediation: \"Run agent-kit update to install the provider-neutral model-routing contract.\"\n });\n return;\n }\n\n let routing: unknown;\n try {\n routing = JSON.parse(readFileSync(routingPath, \"utf8\")) as unknown;\n } catch {\n findings.push({\n level: \"warn\",\n area: \"models\",\n message: `${DEFAULT_MODEL_ROUTING_TARGET} is not valid JSON.`,\n remediation: \"Replace it with .agent-kit/model-routing/default-model-routing.json or rerun agent-kit update.\"\n });\n return;\n }\n\n const contractResult = ModelRoutingContract.safeParse(routing);\n if (!contractResult.success) {\n findings.push({\n level: \"warn\",\n area: \"models\",\n message: `${DEFAULT_MODEL_ROUTING_TARGET} does not match the model-routing contract.`,\n remediation: `Fix model-routing shape before relying on model recommendations. First issue: ${formatContractIssues(contractResult.error)[0]}`\n });\n return;\n }\n\n findings.push({\n level: \"pass\",\n area: \"models\",\n message: \"Model routing matches the schema-backed runtime contract.\"\n });\n\n const profileIds = new Set(contractResult.data.profiles.map((profile) => profile.id));\n const missingAgents = REQUIRED_AGENT_IDS.filter((agentId) => !contractResult.data.agentRoutes.some((route) => route.agentId === agentId));\n const danglingRoutes = contractResult.data.agentRoutes.filter(\n (route) => !profileIds.has(route.profileId) || (route.escalationProfileId ? !profileIds.has(route.escalationProfileId) : false)\n );\n\n if (missingAgents.length > 0) {\n findings.push({\n level: \"warn\",\n area: \"models\",\n message: `Model routing is missing default agent routes: ${missingAgents.join(\", \")}.`,\n remediation: \"Map every default council agent to a model profile so model selection does not collapse into one generic default.\"\n });\n } else {\n findings.push({\n level: \"pass\",\n area: \"models\",\n message: \"Model routing maps every default council agent to a profile.\"\n });\n }\n\n if (danglingRoutes.length > 0) {\n findings.push({\n level: \"warn\",\n area: \"models\",\n message: \"Model routing references profile ids that are not defined.\",\n remediation: \"Ensure every profileId and escalationProfileId exists in model-routing profiles.\"\n });\n }\n}\n\nfunction addTemplateHashFindings(cwd: string, findings: AuditFinding[]): void {\n const manifest = readManifest(cwd);\n if (!manifest) return;\n const overrides = readOverrides(cwd);\n\n for (const doc of ROOT_DOCS) {\n const targetPath = join(cwd, doc);\n if (!existsSync(targetPath)) continue;\n\n const currentTemplate = readTemplate(manifest.stack, doc);\n if (!currentTemplate) continue;\n\n const targetHash = sha256(readFileSync(targetPath, \"utf8\"));\n const currentTemplateHash = sha256(currentTemplate);\n const installedTemplateHash = manifest.templateHashes?.[doc];\n const override = overrides[doc];\n\n if (!installedTemplateHash) {\n findings.push({\n level: \"warn\",\n area: \"templates\",\n message: `${doc} has no stored template hash in .agent-kit/manifest.json.`,\n remediation: \"Run agent-kit update to refresh manifest metadata and review any conflicts.\"\n });\n continue;\n }\n\n if (installedTemplateHash === currentTemplateHash && targetHash === currentTemplateHash) {\n findings.push({\n level: \"pass\",\n area: \"templates\",\n message: `${doc} matches the current bundled template.`\n });\n continue;\n }\n\n if (installedTemplateHash !== currentTemplateHash && targetHash === installedTemplateHash) {\n findings.push({\n level: \"warn\",\n area: \"templates\",\n message: `${doc} still matches an older installed template hash.`,\n remediation: \"Run agent-kit update and review the generated conflict file before adopting the new template.\"\n });\n continue;\n }\n\n if (targetHash === currentTemplateHash) {\n findings.push({\n level: \"pass\",\n area: \"templates\",\n message: `${doc} matches the current template even though manifest metadata is older.`\n });\n continue;\n }\n\n if (installedTemplateHash === currentTemplateHash) {\n if (override) {\n findings.push({\n level: \"pass\",\n area: \"templates\",\n message: `${doc} has a documented local override.`,\n remediation: override.reviewedAt ? `Last reviewed at ${override.reviewedAt}.` : \"Add reviewedAt to the override after the next template review.\"\n });\n continue;\n }\n\n findings.push({\n level: \"warn\",\n area: \"templates\",\n message: `${doc} is locally customized or was preserved from before agent-kit install.`,\n remediation: \"Compare the local file with .agent-kit/conflicts or agent-kit diff before adopting template changes.\"\n });\n continue;\n }\n\n if (override) {\n findings.push({\n level: \"warn\",\n area: \"templates\",\n message: `${doc} has a documented local override, but the bundled template changed since install.`,\n remediation: \"Review the override against the current conflict template and update reviewedAt when accepted.\"\n });\n continue;\n }\n\n findings.push({\n level: \"warn\",\n area: \"templates\",\n message: `${doc} differs from both the installed template hash and current bundled template.`,\n remediation: \"Review local customizations with agent-kit diff before updating.\"\n });\n }\n}\n\nfunction readLikelyLandingFiles(cwd: string): string {\n const candidates = listFilesRecursive(cwd).filter((file) => {\n const normalized = file.replace(/\\\\/g, \"/\");\n return (\n /(^|\\/)(app|pages|src\\/app|src\\/pages)\\/(page|index)\\.(tsx|jsx)$/.test(normalized) ||\n /(^|\\/)components\\/.*(hero|landing|marketing).*\\.(tsx|jsx)$/i.test(normalized)\n );\n });\n\n return candidates\n .slice(0, 20)\n .map((file) => readDoc(cwd, file))\n .join(\"\\n\");\n}\n\nfunction addFrontendFindings(cwd: string, findings: AuditFinding[]): void {\n const styleGuide = readDoc(cwd, \"STYLE_GUIDE.md\");\n const designDoc = readDoc(cwd, \"DESIGN.md\");\n\n if (!includesAny(styleGuide, [\"generic AI\", \"gradient\", \"design token\"])) {\n findings.push({\n level: \"warn\",\n area: \"frontend\",\n message: \"STYLE_GUIDE.md does not contain anti-generic-AI-site design guidance.\",\n remediation: \"Add rules for task-first screens, design tokens, real states, and non-generic visual direction.\"\n });\n }\n\n if (!includesAll(styleGuide, [\"design token\", \"color\", \"typography\", \"spacing\", \"radius\"])) {\n findings.push({\n level: \"warn\",\n area: \"frontend\",\n message: \"STYLE_GUIDE.md is missing a complete design-token inventory.\",\n remediation: \"Document semantic color, typography, spacing, radius, motion, and depth decisions.\"\n });\n }\n\n if (!includesAll(styleGuide, [\"loading\", \"empty\", \"error\", \"disabled\", \"success\", \"mobile\"])) {\n findings.push({\n level: \"warn\",\n area: \"frontend\",\n message: \"STYLE_GUIDE.md is missing required component state coverage.\",\n remediation: \"Require loading, empty, error, disabled, success, focus, and mobile states for interactive UI.\"\n });\n }\n\n if (!includesAll(styleGuide, [\"landing page\", \"working app\", \"task-first\"])) {\n findings.push({\n level: \"warn\",\n area: \"frontend\",\n message: \"STYLE_GUIDE.md does not explicitly prevent generic landing-page defaults.\",\n remediation: \"State when landing pages are inappropriate and require the first screen to show the real product task.\"\n });\n }\n\n if (!includesAll(designDoc, [\"brand\", \"content\", \"user needs\", \"creative direction\", \"design tokens\"])) {\n findings.push({\n level: \"warn\",\n area: \"frontend\",\n message: \"DESIGN.md is missing brand, content, user-need, creative-direction, or token guidance.\",\n remediation: \"Use the DESIGN.md template to capture product category, audience, content inventory, brand traits, creative directions, and token decisions.\"\n });\n }\n\n if (!includesAll(designDoc, [\"reference set\", \"anti-reference\", \"distinctiveness\", \"critique\"])) {\n findings.push({\n level: \"warn\",\n area: \"frontend\",\n message: \"DESIGN.md is missing reference-set, anti-reference, distinctiveness, or critique-gate guidance.\",\n remediation:\n \"Add category references, anti-references, source-safety notes, distinctiveness criteria, and a design critique verdict before accepting frontend work as best-practice ready.\"\n });\n }\n\n if (!includesAll(designDoc, [\"distinctiveness benchmark\", \"first-screen proof\", \"content fingerprint\", \"asset provenance\", \"state proof\", \"visual QA proof\"])) {\n findings.push({\n level: \"warn\",\n area: \"frontend\",\n message: \"DESIGN.md is missing frontend distinctiveness benchmark evidence.\",\n remediation:\n \"Add first-screen proof, content fingerprint, reference benchmark, creative divergence, asset provenance, state proof, visual QA proof, generic-risk, and source-safety fields before accepting significant frontend work.\"\n });\n }\n\n if (!includesAll(designDoc, [\"product quality scorecard\", \"user/task fit\", \"content specificity\", \"source safety\", \"total score\"])) {\n findings.push({\n level: \"warn\",\n area: \"frontend\",\n message: \"DESIGN.md is missing a frontend product-quality scorecard.\",\n remediation:\n \"Add scorecard fields for user/task fit, content specificity, visual identity, information architecture, component states, accessibility and interaction, source safety, total score, and acceptance verdict.\"\n });\n }\n\n if (!includesAll(styleGuide, [\"DESIGN.md\", \"content-first\", \"creative direction\"])) {\n findings.push({\n level: \"warn\",\n area: \"frontend\",\n message: \"STYLE_GUIDE.md does not require content-first creative direction before frontend implementation.\",\n remediation: \"Reference DESIGN.md, brand/content intake, and creative-direction selection before visual implementation starts.\"\n });\n }\n\n const landingText = readLikelyLandingFiles(cwd);\n if (landingText && includesAny(landingText, [\"bg-gradient\", \"from-purple\", \"to-blue\", \"ai-powered\", \"supercharge\", \"revolutionize\", \"10x\"])) {\n findings.push({\n level: \"warn\",\n area: \"frontend\",\n message: \"Likely landing or hero files contain generic AI-site visual or copy patterns.\",\n remediation: \"Review the first screen for domain-specific hierarchy, restrained tokens, real workflows, and useful states.\"\n });\n }\n}\n\nfunction addQualityGateFindings(cwd: string, findings: AuditFinding[]): void {\n const qualityGates = readDoc(cwd, \"QUALITY_GATES.md\");\n if (!qualityGates) return;\n\n if (!includesAll(qualityGates, [\"baseline\", \"strong\", \"best-practice\", \"evidence\"])) {\n findings.push({\n level: \"warn\",\n area: \"quality\",\n message: \"QUALITY_GATES.md does not define baseline, strong, best-practice, and evidence expectations.\",\n remediation: \"Restore the maturity model so project quality is evaluated by evidence, not only by file presence.\"\n });\n }\n\n if (\n !includesAll(qualityGates, [\n \"council\",\n \"architecture\",\n \"security\",\n \"supabase\",\n \"messaging\",\n \"frontend\",\n \"accessibility\",\n \"testing\",\n \"release\",\n \"repo health\"\n ])\n ) {\n findings.push({\n level: \"warn\",\n area: \"quality\",\n message: \"QUALITY_GATES.md is missing one or more best-practice coverage areas.\",\n remediation:\n \"Cover council routing, architecture, security, Supabase/RLS, frontend, accessibility, testing, release, and repo-health evidence.\"\n });\n } else {\n findings.push({\n level: \"pass\",\n area: \"quality\",\n message: \"QUALITY_GATES.md defines a multi-area best-practice maturity model.\"\n });\n }\n}\n\nfunction addUpgradeFindings(cwd: string, findings: AuditFinding[]): void {\n const upgradeDoc = readDoc(cwd, \"UPGRADE.md\");\n if (!upgradeDoc) return;\n\n if (!includesAll(upgradeDoc, [\"agent-kit diff\", \"agent-kit update\", \"audit --min-readiness\", \"rollback\", \"release notes\"])) {\n findings.push({\n level: \"warn\",\n area: \"upgrade\",\n message: \"UPGRADE.md does not define the full agent-kit diff, update, audit, release-notes, and rollback flow.\",\n remediation:\n \"Document branch creation, agent-kit diff, agent-kit update, conflict review, audit readiness threshold, release notes, and rollback evidence.\"\n });\n } else if (!includesAll(upgradeDoc, [\"next.js\", \"codemod\", \"supabase\", \"migration\", \"generated\"])) {\n findings.push({\n level: \"warn\",\n area: \"upgrade\",\n message: \"UPGRADE.md does not cover framework codemods, Supabase migrations, or generated type review.\",\n remediation:\n \"Include Next.js upgrade/codemod review and Supabase migration history, RLS impact, rollback, and generated type checks.\"\n });\n } else {\n findings.push({\n level: \"pass\",\n area: \"upgrade\",\n message: \"UPGRADE.md defines a reviewable upgrade, migration, audit, and rollback lifecycle.\"\n });\n }\n}\n\nconst STARTER_EVIDENCE_PATTERNS = [\n /\\bTBD\\b/i,\n /replace with real/i,\n /example_table/i,\n /describe the product/i,\n /document required/i,\n /pass\\/fail\\/skipped/i\n];\n\nconst EVIDENCE_DOCS = [\n \"COUNCIL.md\",\n \"SPEC.md\",\n \"DESIGN.md\",\n \"MESSAGING.md\",\n \"SECURITY.md\",\n \"TESTING.md\",\n \"DEPLOYMENT.md\",\n \"ASSISTANT_ADAPTERS.md\",\n \"MODEL_ROUTING.md\",\n \"UPGRADE.md\"\n] as const;\n\nfunction addProjectEvidenceFindings(cwd: string, findings: AuditFinding[]): void {\n const placeholderDocs = EVIDENCE_DOCS.filter((doc) => {\n const text = readDoc(cwd, doc);\n return text && STARTER_EVIDENCE_PATTERNS.some((pattern) => pattern.test(text));\n });\n\n if (placeholderDocs.length > 0) {\n findings.push({\n level: \"warn\",\n area: \"evidence\",\n message: `Project evidence docs still contain starter placeholders: ${placeholderDocs.join(\", \")}.`,\n remediation:\n \"Replace TBD/example rows with real project evidence, or document why an item is not applicable before claiming strong or best-practice maturity.\"\n });\n } else {\n findings.push({\n level: \"pass\",\n area: \"evidence\",\n message: \"Project evidence docs do not contain starter placeholders.\"\n });\n }\n}\n\nfunction addMessagingFindings(cwd: string, findings: AuditFinding[]): void {\n const messagingDoc = readDoc(cwd, \"MESSAGING.md\");\n if (!messagingDoc) return;\n\n if (!includesAll(messagingDoc, [\"discovery questions\", \"audience\", \"pain\", \"outcome\", \"differentiator\", \"proof\", \"objections\", \"voice\", \"conversion\"])) {\n findings.push({\n level: \"warn\",\n area: \"messaging\",\n message: \"MESSAGING.md does not capture the required discovery questions and value-proposition inputs.\",\n remediation:\n \"Document audience, pain, outcome, differentiator, proof, objections, voice, conversion goal, and unanswered discovery questions before accepting final copy.\"\n });\n } else {\n findings.push({\n level: \"pass\",\n area: \"messaging\",\n message: \"MESSAGING.md captures question-led positioning and value-proposition inputs.\"\n });\n }\n\n if (!includesAll(messagingDoc, [\"claim\", \"proof required\", \"current proof\", \"objection\", \"cta\"])) {\n findings.push({\n level: \"warn\",\n area: \"messaging\",\n message: \"MESSAGING.md does not connect claims, proof, objections, and CTA hierarchy.\",\n remediation: \"Track claims against proof, objection handling, primary CTA, secondary CTA, and risky claims before release.\"\n });\n } else {\n findings.push({\n level: \"pass\",\n area: \"messaging\",\n message: \"MESSAGING.md connects claims, proof, objections, and CTA hierarchy.\"\n });\n }\n}\n\nexport function auditProject(cwd: string): AuditFinding[] {\n const findings: AuditFinding[] = [];\n const manifest = readManifest(cwd);\n\n if (!manifest) {\n findings.push({\n level: \"fail\",\n area: \"install\",\n message: \"Project has no .agent-kit/manifest.json.\",\n remediation: \"Run agent-kit init --stack next-supabase.\"\n });\n } else {\n findings.push({\n level: \"pass\",\n area: \"install\",\n message: `Agent kit installed at version ${manifest.packageVersion}.`\n });\n }\n\n addTemplateHashFindings(cwd, findings);\n addAgentRosterFindings(cwd, findings);\n addSchemaFindings(cwd, findings);\n addCouncilSessionRecordFindings(cwd, findings);\n addAgentStudioFindings(cwd, findings);\n\n for (const doc of ROOT_DOCS) {\n if (existsSync(join(cwd, doc))) {\n findings.push({ level: \"pass\", area: \"docs\", message: `${doc} exists.` });\n } else {\n findings.push({\n level: doc === \"MODEL_ROUTING.md\" ? \"warn\" : \"fail\",\n area: \"docs\",\n message: `${doc} is missing.`,\n remediation: `Run agent-kit init or restore ${doc} from the next-supabase template.`\n });\n }\n }\n\n addCouncilDocFindings(cwd, findings);\n addAssistantAdapterFindings(cwd, findings);\n addModelRoutingFindings(cwd, findings);\n addMessagingFindings(cwd, findings);\n addQualityGateFindings(cwd, findings);\n addUpgradeFindings(cwd, findings);\n addProjectEvidenceFindings(cwd, findings);\n\n const security = readDoc(cwd, \"SECURITY.md\");\n if (!includesAny(security, [\"OWASP\", \"Top 10\"])) {\n findings.push({\n level: \"fail\",\n area: \"security\",\n message: \"SECURITY.md does not explicitly reference OWASP Top 10 review.\",\n remediation: \"Add OWASP Top 10 coverage to the security checklist.\"\n });\n }\n if (!includesAny(security, [\"RLS\", \"row level security\"])) {\n findings.push({\n level: \"fail\",\n area: \"security\",\n message: \"SECURITY.md does not explicitly cover Supabase RLS.\",\n remediation: \"Require authorization to be enforced in Postgres RLS, not only in the UI.\"\n });\n }\n if (!includesAny(security, [\"service-role\", \"service role\"])) {\n findings.push({\n level: \"warn\",\n area: \"security\",\n message: \"SECURITY.md does not mention service-role key isolation.\",\n remediation: \"Document that service-role keys are server-only and never exposed to client bundles.\"\n });\n }\n\n addFrontendFindings(cwd, findings);\n\n const testing = readDoc(cwd, \"TESTING.md\");\n if (!includesAny(testing, [\"Playwright\", \"smoke\"])) {\n findings.push({\n level: \"warn\",\n area: \"testing\",\n message: \"TESTING.md does not require Playwright or smoke coverage.\",\n remediation: \"Define critical-path Playwright smoke tests for auth and primary workflows.\"\n });\n }\n if (!includesAny(testing, [\"visual regression\", \"visual QA\", \"screenshot evidence\", \"toHaveScreenshot\", \"Storybook\", \"Chromatic\", \"Argos\"])) {\n findings.push({\n level: \"warn\",\n area: \"testing\",\n message: \"TESTING.md does not define visual QA or visual-regression evidence.\",\n remediation: \"Document the visual QA tier: screenshot review, Playwright screenshots, Storybook visual tests, or a visual-regression service for important UI changes.\"\n });\n }\n\n return findings;\n}\n\nfunction createReadiness(findings: AuditFinding[], summary: AuditReport[\"summary\"]): AuditReadiness {\n const nextActions = findings\n .filter((finding) => finding.level === \"fail\" || finding.level === \"warn\")\n .map((finding) => finding.remediation ?? finding.message)\n .filter((value, index, values) => values.indexOf(value) === index)\n .slice(0, 5);\n\n if (summary.fail > 0) {\n return {\n level: \"needs-setup\",\n summary: \"Required setup or contract checks are failing.\",\n nextActions\n };\n }\n\n if (findings.some((finding) => finding.level === \"warn\" && finding.area === \"evidence\")) {\n return {\n level: \"baseline-setup\",\n summary: \"Agent kit setup is valid, but project-specific evidence still needs to replace starter placeholders.\",\n nextActions\n };\n }\n\n if (summary.warn > 0) {\n return {\n level: \"needs-improvement\",\n summary: \"No blocking failures, but warnings remain before this can be treated as best-practice ready.\",\n nextActions\n };\n }\n\n return {\n level: \"best-practice-candidate\",\n summary: \"Static audit found no setup, evidence, security, frontend, testing, or council warnings.\",\n nextActions\n };\n}\n\nexport function createAuditReport(cwd: string): AuditReport {\n const findings = auditProject(cwd);\n const summary: AuditReport[\"summary\"] = { pass: 0, warn: 0, fail: 0 };\n for (const finding of findings) summary[finding.level] += 1;\n return { summary, readiness: createReadiness(findings, summary), findings };\n}\n","import { z } from \"zod\";\n\nconst stringList = z.array(z.string());\n\nexport const AgentRosterContract = z\n .object({\n schemaVersion: z.literal(1),\n id: z.string().min(1),\n stack: z.string().min(1),\n required: z.boolean(),\n defaultWorkflow: z.string().min(1),\n principle: z.string().optional(),\n agents: z\n .array(\n z\n .object({\n id: z.string().min(1),\n name: z.string().optional(),\n file: z.string().optional(),\n defaultFor: stringList.optional(),\n skills: z.array(z.string()).min(1),\n handsOffTo: stringList.optional()\n })\n .strict()\n )\n .min(1),\n workflows: z\n .array(\n z\n .object({\n id: z.string().min(1),\n triggers: stringList.optional(),\n sequence: z.array(z.string()).min(1),\n council: stringList,\n requiredOutputs: stringList\n })\n .strict()\n )\n .min(1),\n handoffRules: z.array(z.string()).min(1)\n })\n .strict();\n\nexport const CouncilSessionContract = z\n .object({\n schemaVersion: z.literal(1),\n sessionId: z.string().min(1),\n createdAt: z.string().datetime(),\n workflowId: z.string().min(1),\n status: z.enum([\"planned\", \"in-progress\", \"blocked\", \"complete\"]),\n request: z.string().min(1),\n affectedLayers: stringList.optional(),\n handoffs: z\n .array(\n z\n .object({\n agentId: z.string().min(1),\n decision: z.string().min(1),\n risk: z.string().min(1),\n nextHandoff: z.string().min(1),\n evidence: stringList.optional()\n })\n .strict()\n )\n .min(1),\n requiredOutputs: z.array(\n z\n .object({\n name: z.string().min(1),\n status: z.enum([\"missing\", \"partial\", \"complete\", \"not-applicable\"]),\n evidence: z.string().optional()\n })\n .strict()\n ),\n verification: z.array(\n z\n .object({\n command: z.string().min(1),\n result: z.enum([\"pass\", \"fail\", \"skipped\"]),\n notes: z.string().optional()\n })\n .strict()\n )\n })\n .strict();\n\nexport const AuditReportContract = z\n .object({\n summary: z\n .object({\n pass: z.number().int().min(0),\n warn: z.number().int().min(0),\n fail: z.number().int().min(0)\n })\n .strict(),\n readiness: z\n .object({\n level: z.enum([\"needs-setup\", \"baseline-setup\", \"needs-improvement\", \"best-practice-candidate\"]),\n summary: z.string().min(1),\n nextActions: z.array(z.string())\n })\n .strict(),\n findings: z.array(\n z\n .object({\n level: z.enum([\"pass\", \"warn\", \"fail\"]),\n area: z.string().min(1),\n message: z.string().min(1),\n remediation: z.string().min(1).optional()\n })\n .strict()\n )\n })\n .strict();\n\nexport const ModelRoutingContract = z\n .object({\n schemaVersion: z.literal(1),\n id: z.string().min(1),\n stack: z.string().min(1),\n reviewedAt: z.string().min(1),\n reviewCadence: z.string().min(1),\n principle: z.string().min(1),\n profiles: z\n .array(\n z\n .object({\n id: z.string().min(1),\n label: z.string().min(1),\n intent: z.string().min(1),\n reasoningEffort: z.enum([\"low\", \"medium\", \"high\", \"varies\"]),\n contextWindow: z.enum([\"small\", \"medium\", \"large\", \"very-large\", \"varies\"]),\n latency: z.enum([\"low\", \"medium\", \"high\", \"varies\"]),\n cost: z.enum([\"low\", \"medium\", \"high\", \"varies\"]),\n preferredFor: z.array(z.string()).min(1)\n })\n .strict()\n )\n .min(1),\n agentRoutes: z\n .array(\n z\n .object({\n agentId: z.string().min(1),\n profileId: z.string().min(1),\n defaultEffort: z.enum([\"low\", \"medium\", \"high\"]),\n escalationProfileId: z.string().optional(),\n notes: z.string().optional()\n })\n .strict()\n )\n .min(1),\n toolSurfaces: z\n .array(\n z\n .object({\n tool: z.string().min(1),\n instructionSurface: z.string().min(1),\n modelSelection: z.string().min(1),\n enforcement: z.enum([\"enforced\", \"partial\", \"advisory\", \"manual\"]),\n adapter: z.string().min(1)\n })\n .strict()\n )\n .min(1),\n updatePolicy: z.array(z.string()).min(1)\n })\n .strict();\n\nconst projectEvidenceItem = z\n .object({\n source: z.string().min(1),\n note: z.string().min(1)\n })\n .strict();\n\nexport const ProjectContextContract = z\n .object({\n schemaVersion: z.literal(1),\n projectName: z.string(),\n productSummary: z.string(),\n productCategory: z.string(),\n primaryAudience: z.string(),\n primaryWorkflows: z.array(z.string()),\n businessCriticalBehavior: z.array(z.string()),\n architecture: z\n .object({\n packageManager: z.string().optional(),\n scripts: z.array(z.string()),\n frameworks: z.array(z.string()),\n uiLibraries: z.array(z.string()),\n hasSupabase: z.boolean(),\n supabaseSignals: z.array(z.string()),\n testTools: z.array(z.string()),\n envExampleKeys: z.array(z.string()),\n deployment: z.array(z.string())\n })\n .strict(),\n dataSensitivity: z.array(z.string()),\n authModel: z.string(),\n tenantModel: z.string(),\n integrations: z.array(z.string()),\n uiDirection: z\n .object({\n preferred: z.string(),\n avoid: z.string()\n })\n .strict(),\n messaging: z\n .object({\n valueProposition: z.string(),\n proof: z.array(z.string()),\n objections: z.array(z.string())\n })\n .strict(),\n qualityTarget: z.enum([\"baseline-setup\", \"needs-improvement\", \"best-practice-candidate\"]),\n knownConstraints: z.array(z.string()),\n openQuestions: z.array(z.string()),\n evidence: z.array(projectEvidenceItem),\n lastReviewedAt: z.string().datetime(),\n owners: z.array(z.string())\n })\n .strict();\n\nexport const CorrectionRuleContract = z\n .object({\n id: z.string().min(1),\n scope: z.enum([\"session\", \"project\", \"agent\", \"upstream-proposal\"]),\n status: z.enum([\"active\", \"retired\", \"proposed\"]),\n text: z.string().min(1),\n appliesToAgents: z.array(z.string()).optional(),\n agentId: z.string().min(1).optional(),\n sourceSessionId: z.string().min(1).optional(),\n createdAt: z.string().datetime(),\n reviewedAt: z.string().datetime().nullable().optional(),\n retiredAt: z.string().datetime().optional(),\n reason: z.string().optional()\n })\n .strict()\n .superRefine((rule, context) => {\n if (rule.scope === \"agent\" && !rule.agentId && (!rule.appliesToAgents || rule.appliesToAgents.length === 0)) {\n context.addIssue({\n code: z.ZodIssueCode.custom,\n message: \"agent-scoped corrections require agentId or appliesToAgents\",\n path: [\"agentId\"]\n });\n }\n });\n\nexport const CorrectionRulesContract = z\n .object({\n schemaVersion: z.literal(1),\n rules: z.array(CorrectionRuleContract)\n })\n .strict();\n\nexport const StudioSessionContract = z\n .object({\n schemaVersion: z.literal(1),\n sessionId: z.string().min(1),\n title: z.string().min(1),\n createdAt: z.string().datetime(),\n updatedAt: z.string().datetime(),\n status: z.enum([\"planned\", \"in-progress\", \"blocked\", \"complete\"]),\n workflowId: z.string().min(1),\n request: z.string().min(1),\n affectedLayers: z.array(z.string()),\n activeAgentId: z.string().optional(),\n nextAgentId: z.string().optional(),\n qualityTarget: z.enum([\"baseline-setup\", \"needs-improvement\", \"best-practice-candidate\"]),\n requiredOutputs: z.array(\n z\n .object({\n name: z.string().min(1),\n status: z.enum([\"missing\", \"partial\", \"complete\", \"not-applicable\"]),\n evidence: z.string().optional()\n })\n .strict()\n ),\n renderedAt: z.string().datetime().optional()\n })\n .strict();\n\nexport const SessionEventContract = z\n .object({\n type: z.enum([\n \"session_started\",\n \"project_context_loaded\",\n \"agent_message\",\n \"agent_decision\",\n \"handoff\",\n \"human_correction\",\n \"correction_promoted\",\n \"artifact_recorded\",\n \"command_recorded\",\n \"verification_recorded\",\n \"open_question\",\n \"required_output_updated\",\n \"session_status_changed\",\n \"session_rendered\"\n ]),\n createdAt: z.string().datetime(),\n agentId: z.string().min(1).optional(),\n fromAgentId: z.string().min(1).optional(),\n toAgentId: z.string().min(1).optional(),\n text: z.string().optional(),\n decision: z.string().optional(),\n risk: z.string().optional(),\n evidence: z.array(z.string()).optional(),\n scope: z.enum([\"session\", \"project\", \"agent\", \"upstream-proposal\"]).optional(),\n correctionId: z.string().min(1).optional(),\n artifactPath: z.string().min(1).optional(),\n command: z.string().min(1).optional(),\n result: z.enum([\"pass\", \"fail\", \"skipped\"]).optional(),\n outputName: z.string().min(1).optional(),\n outputStatus: z.enum([\"missing\", \"partial\", \"complete\", \"not-applicable\"]).optional(),\n status: z.enum([\"planned\", \"in-progress\", \"blocked\", \"complete\"]).optional(),\n notes: z.string().optional()\n })\n .strict()\n .superRefine((event, context) => {\n if (event.type === \"handoff\") {\n for (const field of [\"fromAgentId\", \"toAgentId\", \"decision\", \"risk\"] as const) {\n if (!event[field]) {\n context.addIssue({ code: z.ZodIssueCode.custom, message: `${field} is required for handoff events`, path: [field] });\n }\n }\n }\n if (event.type === \"human_correction\" && (!event.text || !event.scope)) {\n context.addIssue({ code: z.ZodIssueCode.custom, message: \"human corrections require text and scope\", path: [\"text\"] });\n }\n if (event.type === \"verification_recorded\" && (!event.command || !event.result)) {\n context.addIssue({ code: z.ZodIssueCode.custom, message: \"verification events require command and result\", path: [\"command\"] });\n }\n if (event.type === \"artifact_recorded\" && !event.artifactPath) {\n context.addIssue({ code: z.ZodIssueCode.custom, message: \"artifact events require artifactPath\", path: [\"artifactPath\"] });\n }\n if (event.type === \"required_output_updated\" && (!event.outputName || !event.outputStatus)) {\n context.addIssue({ code: z.ZodIssueCode.custom, message: \"required output events require outputName and outputStatus\", path: [\"outputName\"] });\n }\n });\n\nexport type AgentRosterContractValue = z.infer<typeof AgentRosterContract>;\nexport type CouncilSessionContractValue = z.infer<typeof CouncilSessionContract>;\nexport type AuditReportContractValue = z.infer<typeof AuditReportContract>;\nexport type ModelRoutingContractValue = z.infer<typeof ModelRoutingContract>;\nexport type ProjectContextContractValue = z.infer<typeof ProjectContextContract>;\nexport type CorrectionRuleContractValue = z.infer<typeof CorrectionRuleContract>;\nexport type CorrectionRulesContractValue = z.infer<typeof CorrectionRulesContract>;\nexport type StudioSessionContractValue = z.infer<typeof StudioSessionContract>;\nexport type SessionEventContractValue = z.infer<typeof SessionEventContract>;\n\nexport function formatContractIssues(error: z.ZodError): string[] {\n return error.issues.map((issue) => {\n const path = issue.path.length > 0 ? issue.path.join(\".\") : \"<root>\";\n return `${path}: ${issue.message}`;\n });\n}\n","import type { AgentKitConfig } from \"./types.js\";\n\nexport const PACKAGE_NAME = \"@agent-skills/next-supabase-kit\";\nexport const PACKAGE_VERSION = \"0.1.0\";\n\nexport const DEFAULT_CONFIG: AgentKitConfig = {\n stack: \"next-supabase\",\n projectType: \"saas\",\n docsMode: \"advisory\",\n agentCouncil: {\n required: true,\n rosterPath: \".agent-kit/agent-roster.json\",\n defaultWorkflow: \"planning\",\n coreChangeWorkflow: \"core-change\"\n },\n modelRouting: {\n required: true,\n routingPath: \".agent-kit/model-routing.json\",\n reviewCadence: \"quarterly-or-when-model-docs-change\"\n },\n designProviders: [\"stitch\", \"claude\", \"figma\", \"human\"],\n research: {\n maxRepos: 100,\n githubTokenEnv: \"GITHUB_TOKEN\",\n workdir: \"research/workdir\"\n }\n};\n\nexport const ROOT_DOCS = [\n \"AGENTS.md\",\n \"AGENT_ROSTER.md\",\n \"ASSISTANT_ADAPTERS.md\",\n \"COUNCIL.md\",\n \"SKILLS.md\",\n \"SPEC.md\",\n \"DECISIONS.md\",\n \"DOCS.md\",\n \"DESIGN.md\",\n \"MESSAGING.md\",\n \"MODEL_ROUTING.md\",\n \"QUALITY_GATES.md\",\n \"STYLE_GUIDE.md\",\n \"SECURITY.md\",\n \"TESTING.md\",\n \"DEPLOYMENT.md\",\n \"UPGRADE.md\"\n] as const;\n\nexport const LIBRARY_FOLDERS = [\n \"agents\",\n \"skills\",\n \"prompts\",\n \"checklists\",\n \"design-adapters\",\n \"assistant-adapters\",\n \"design-briefs\",\n \"profiles\",\n \"rosters\",\n \"schemas\"\n] as const;\n\nexport const DEFAULT_AGENT_ROSTER_SOURCE = \"rosters/next-supabase-default-council.json\";\nexport const DEFAULT_AGENT_ROSTER_TARGET = \".agent-kit/agent-roster.json\";\nexport const DEFAULT_MODEL_ROUTING_SOURCE = \"model-routing/default-model-routing.json\";\nexport const DEFAULT_MODEL_ROUTING_TARGET = \".agent-kit/model-routing.json\";\n\nexport const CURSOR_ADAPTER_FILES = [\n {\n source: \"assistant-adapters/cursor-agent-kit.mdc\",\n target: \".cursor/rules/cursor-agent-kit.mdc\"\n },\n {\n source: \"assistant-adapters/model-selection/cursor-model-selection.mdc\",\n target: \".cursor/rules/cursor-model-selection.mdc\"\n }\n] as const;\n","import { appendFileSync, existsSync, readFileSync, writeFileSync } from \"node:fs\";\nimport { basename, dirname, join } from \"node:path\";\nimport { ensureDir, readTextIfExists, resolveInside, writeText } from \"../utils/fs.js\";\n\nexport const AGENT_KIT_DIR = \".agent-kit\";\nexport const CONTEXT_JSON = \".agent-kit/project-context.json\";\nexport const CONTEXT_MD = \".agent-kit/project-context.md\";\nexport const CORRECTIONS_DIR = \".agent-kit/corrections\";\nexport const PROJECT_RULES_JSON = \".agent-kit/corrections/project-rules.json\";\nexport const AGENT_RULES_JSON = \".agent-kit/corrections/agent-rules.json\";\nexport const UPSTREAM_PROPOSALS_JSON = \".agent-kit/corrections/upstream-proposals.json\";\nexport const COUNCIL_SESSIONS_DIR = \".agent-kit/council-sessions\";\nexport const ACTIVE_SESSION_FILE = \".agent-kit/council-sessions/active\";\nexport const STUDIO_EXPORT_HTML = \".agent-kit/studio/index.html\";\n\nconst SECRET_PATTERNS = [\n /gh[pousr]_[A-Za-z0-9_]{12,}/g,\n /github_pat_[A-Za-z0-9_]{20,}/g,\n /sk_(?:live|test)_[A-Za-z0-9_]{8,}/g,\n /sbp_[A-Za-z0-9_]{12,}/g,\n /(?:SUPABASE_SERVICE_ROLE_KEY|DATABASE_URL|OPENAI_API_KEY|ANTHROPIC_API_KEY|GITHUB_TOKEN)=[\"']?[^\"'\\s]+/gi,\n /postgres(?:ql)?:\\/\\/[^\\s)]+/gi\n];\n\nexport function nowIso(): string {\n return new Date().toISOString();\n}\n\nexport function redactSensitive(text: string): string {\n return SECRET_PATTERNS.reduce((current, pattern) => current.replace(pattern, \"[REDACTED]\"), text);\n}\n\nexport function containsLikelySecret(text: string): boolean {\n return SECRET_PATTERNS.some((pattern) => {\n pattern.lastIndex = 0;\n return pattern.test(text);\n });\n}\n\nexport function safeSlug(input: string): string {\n const lowered = input.trim().toLowerCase();\n if (!lowered) throw new Error(\"A non-empty title or id is required.\");\n if (lowered.includes(\"/\") || lowered.includes(\"\\\\\") || lowered.includes(\"..\")) {\n throw new Error(`Unsafe session or correction id: ${input}`);\n }\n const slug = lowered\n .replace(/[^a-z0-9]+/g, \"-\")\n .replace(/^-+|-+$/g, \"\")\n .slice(0, 80);\n if (!slug) throw new Error(`Could not derive a safe id from: ${input}`);\n return slug;\n}\n\nexport function ensureStudioDirs(cwd: string): void {\n ensureDir(join(cwd, AGENT_KIT_DIR));\n ensureDir(join(cwd, CORRECTIONS_DIR));\n ensureDir(join(cwd, COUNCIL_SESSIONS_DIR));\n}\n\nexport function readJsonFile<T>(cwd: string, relativePath: string): T | null {\n const path = resolveInside(cwd, relativePath);\n if (!existsSync(path)) return null;\n return JSON.parse(readFileSync(path, \"utf8\")) as T;\n}\n\nexport function writeJsonFile(cwd: string, relativePath: string, value: unknown): void {\n writeText(resolveInside(cwd, relativePath), `${JSON.stringify(value, null, 2)}\\n`);\n}\n\nexport function appendJsonLine(cwd: string, relativePath: string, value: unknown): void {\n const path = resolveInside(cwd, relativePath);\n ensureDir(dirname(path));\n appendFileSync(path, `${JSON.stringify(value)}\\n`);\n}\n\nexport function readJsonLines(cwd: string, relativePath: string): unknown[] {\n const text = readTextIfExists(resolveInside(cwd, relativePath));\n if (!text) return [];\n return text\n .split(/\\r?\\n/)\n .filter((line) => line.trim().length > 0)\n .map((line) => JSON.parse(line) as unknown);\n}\n\nexport function writeTextFile(cwd: string, relativePath: string, content: string): void {\n writeText(resolveInside(cwd, relativePath), content);\n}\n\nexport function readTextFile(cwd: string, relativePath: string): string | null {\n return readTextIfExists(resolveInside(cwd, relativePath));\n}\n\nexport function validateRelativeArtifactPath(cwd: string, requestedPath: string): string {\n const resolved = resolveInside(cwd, requestedPath);\n if (basename(resolved).startsWith(\".\")) {\n throw new Error(`Hidden files cannot be recorded as artifacts: ${requestedPath}`);\n }\n return requestedPath.replace(/\\\\/g, \"/\");\n}\n\nexport function escapeMarkdownText(value: string | undefined): string {\n return redactSensitive(value ?? \"\")\n .replace(/\\\\/g, \"\\\\\\\\\")\n .replace(/</g, \"<\")\n .replace(/>/g, \">\")\n .replace(/[`![\\]()|]/g, \"\\\\$&\")\n .replace(/\\r?\\n/g, \"<br>\");\n}\n\nexport function escapeMarkdownTableCell(value: string | undefined): string {\n return escapeMarkdownText(value)\n .replace(/\\|/g, \"\\\\|\")\n}\n\nexport function listMarkdown(items: string[]): string {\n if (items.length === 0) return \"- None recorded.\\n\";\n return items.map((item) => `- ${escapeMarkdownText(item)}`).join(\"\\n\") + \"\\n\";\n}\n\nexport function unique(values: string[]): string[] {\n return [...new Set(values.filter(Boolean))].sort();\n}\n","import { existsSync, readFileSync } from \"node:fs\";\nimport { join } from \"node:path\";\nimport {\n CURSOR_ADAPTER_FILES,\n DEFAULT_AGENT_ROSTER_SOURCE,\n DEFAULT_AGENT_ROSTER_TARGET,\n DEFAULT_CONFIG,\n DEFAULT_MODEL_ROUTING_SOURCE,\n DEFAULT_MODEL_ROUTING_TARGET,\n LIBRARY_FOLDERS,\n PACKAGE_NAME,\n PACKAGE_VERSION,\n ROOT_DOCS\n} from \"../config/defaults.js\";\nimport type { InstallManifest, StackProfile } from \"../config/types.js\";\nimport { copyDirectory, copyTextWithConflict, ensureDir, sha256, writeText } from \"../utils/fs.js\";\nimport { findPackageRoot } from \"../utils/package-root.js\";\n\nexport interface InitOptions {\n cwd: string;\n stack?: StackProfile;\n force?: boolean;\n}\n\nexport interface InitResult {\n copied: string[];\n unchanged: string[];\n conflicts: string[];\n overwritten: string[];\n manifestPath: string;\n}\n\nexport function initProject(options: InitOptions): InitResult {\n const cwd = options.cwd;\n const stack = options.stack ?? DEFAULT_CONFIG.stack;\n const packageRoot = findPackageRoot();\n const templateRoot = join(packageRoot, \"templates\", stack);\n\n if (!existsSync(templateRoot)) {\n throw new Error(`Unsupported stack profile: ${stack}`);\n }\n\n ensureDir(join(cwd, \".agent-kit\"));\n ensureDir(join(cwd, \".agent-kit\", \"conflicts\"));\n\n const result: InitResult = {\n copied: [],\n unchanged: [],\n conflicts: [],\n overwritten: [],\n manifestPath: \".agent-kit/manifest.json\"\n };\n\n const templateHashes: Record<string, string> = {};\n\n for (const doc of ROOT_DOCS) {\n const templatePath = join(templateRoot, doc);\n templateHashes[doc] = sha256(readFileSync(templatePath, \"utf8\"));\n\n const copyResult = copyTextWithConflict(templatePath, cwd, doc, {\n force: Boolean(options.force),\n conflictRoot: join(cwd, \".agent-kit\", \"conflicts\")\n });\n\n if (copyResult.action === \"created\") result.copied.push(copyResult.target);\n if (copyResult.action === \"unchanged\") result.unchanged.push(copyResult.target);\n if (copyResult.action === \"overwritten\") result.overwritten.push(copyResult.target);\n if (copyResult.action === \"conflict\") {\n result.conflicts.push(`${copyResult.target} -> ${copyResult.conflictPath}`);\n }\n }\n\n for (const folder of LIBRARY_FOLDERS) {\n copyDirectory(join(packageRoot, folder), join(cwd, \".agent-kit\", folder));\n }\n\n for (const adapter of CURSOR_ADAPTER_FILES) {\n const adapterCopy = copyTextWithConflict(join(packageRoot, adapter.source), cwd, adapter.target, {\n force: Boolean(options.force),\n conflictRoot: join(cwd, \".agent-kit\", \"conflicts\")\n });\n if (adapterCopy.action === \"created\") result.copied.push(adapterCopy.target);\n if (adapterCopy.action === \"unchanged\") result.unchanged.push(adapterCopy.target);\n if (adapterCopy.action === \"overwritten\") result.overwritten.push(adapterCopy.target);\n if (adapterCopy.action === \"conflict\") {\n result.conflicts.push(`${adapterCopy.target} -> ${adapterCopy.conflictPath}`);\n }\n }\n\n const rosterCopy = copyTextWithConflict(join(packageRoot, DEFAULT_AGENT_ROSTER_SOURCE), cwd, DEFAULT_AGENT_ROSTER_TARGET, {\n force: Boolean(options.force),\n conflictRoot: join(cwd, \".agent-kit\", \"conflicts\")\n });\n if (rosterCopy.action === \"created\") result.copied.push(rosterCopy.target);\n if (rosterCopy.action === \"unchanged\") result.unchanged.push(rosterCopy.target);\n if (rosterCopy.action === \"overwritten\") result.overwritten.push(rosterCopy.target);\n if (rosterCopy.action === \"conflict\") result.conflicts.push(`${rosterCopy.target} -> ${rosterCopy.conflictPath}`);\n\n const modelRoutingCopy = copyTextWithConflict(join(packageRoot, DEFAULT_MODEL_ROUTING_SOURCE), cwd, DEFAULT_MODEL_ROUTING_TARGET, {\n force: Boolean(options.force),\n conflictRoot: join(cwd, \".agent-kit\", \"conflicts\")\n });\n if (modelRoutingCopy.action === \"created\") result.copied.push(modelRoutingCopy.target);\n if (modelRoutingCopy.action === \"unchanged\") result.unchanged.push(modelRoutingCopy.target);\n if (modelRoutingCopy.action === \"overwritten\") result.overwritten.push(modelRoutingCopy.target);\n if (modelRoutingCopy.action === \"conflict\") result.conflicts.push(`${modelRoutingCopy.target} -> ${modelRoutingCopy.conflictPath}`);\n\n const manifest: InstallManifest = {\n packageName: PACKAGE_NAME,\n packageVersion: PACKAGE_VERSION,\n stack,\n installedAt: new Date().toISOString(),\n docs: [...ROOT_DOCS],\n libraryFolders: [...LIBRARY_FOLDERS],\n agentRoster: DEFAULT_AGENT_ROSTER_TARGET,\n modelRouting: DEFAULT_MODEL_ROUTING_TARGET,\n templateHashes\n };\n\n writeText(join(cwd, \".agent-kit\", \"manifest.json\"), `${JSON.stringify(manifest, null, 2)}\\n`);\n writeText(join(cwd, \".agent-kit\", \"config.json\"), `${JSON.stringify(DEFAULT_CONFIG, null, 2)}\\n`);\n const overridesPath = join(cwd, \".agent-kit\", \"overrides.json\");\n if (!existsSync(overridesPath)) writeText(overridesPath, `${JSON.stringify({ templates: {} }, null, 2)}\\n`);\n\n return result;\n}\n\nexport function readManifest(cwd: string): InstallManifest | null {\n const manifestPath = join(cwd, \".agent-kit\", \"manifest.json\");\n if (!existsSync(manifestPath)) return null;\n return JSON.parse(readFileSync(manifestPath, \"utf8\")) as InstallManifest;\n}\n","import { existsSync, readFileSync } from \"node:fs\";\nimport { join } from \"node:path\";\nimport {\n DEFAULT_AGENT_ROSTER_SOURCE,\n DEFAULT_AGENT_ROSTER_TARGET,\n DEFAULT_MODEL_ROUTING_SOURCE,\n DEFAULT_MODEL_ROUTING_TARGET,\n LIBRARY_FOLDERS,\n ROOT_DOCS\n} from \"../config/defaults.js\";\nimport { sha256 } from \"../utils/fs.js\";\nimport { findPackageRoot } from \"../utils/package-root.js\";\n\nexport type DiffStatus = \"missing\" | \"unchanged\" | \"changed\";\n\nexport interface DiffResult {\n missing: string[];\n unchanged: string[];\n changed: string[];\n agentRoster: DiffStatus;\n modelRouting: DiffStatus;\n libraryFolders: {\n missing: string[];\n present: string[];\n willRefresh: string[];\n };\n preview: {\n wouldCreate: string[];\n wouldWriteConflicts: string[];\n wouldRefreshLibraryFolders: string[];\n wouldCreateAgentRoster: boolean;\n wouldWriteAgentRosterConflict: boolean;\n wouldCreateModelRouting: boolean;\n wouldWriteModelRoutingConflict: boolean;\n };\n}\n\nfunction statusForTextFile(target: string, template: string): DiffStatus {\n if (!existsSync(target)) return \"missing\";\n\n const targetHash = sha256(readFileSync(target, \"utf8\"));\n const templateHash = sha256(readFileSync(template, \"utf8\"));\n return targetHash === templateHash ? \"unchanged\" : \"changed\";\n}\n\nexport function diffProject(cwd: string, stack = \"next-supabase\"): DiffResult {\n const packageRoot = findPackageRoot();\n const templateRoot = join(packageRoot, \"templates\", stack);\n const libraryFolders = {\n missing: [] as string[],\n present: [] as string[],\n willRefresh: [...LIBRARY_FOLDERS]\n };\n const result: DiffResult = {\n missing: [],\n unchanged: [],\n changed: [],\n agentRoster: \"missing\",\n modelRouting: \"missing\",\n libraryFolders,\n preview: {\n wouldCreate: [],\n wouldWriteConflicts: [],\n wouldRefreshLibraryFolders: [...LIBRARY_FOLDERS],\n wouldCreateAgentRoster: false,\n wouldWriteAgentRosterConflict: false,\n wouldCreateModelRouting: false,\n wouldWriteModelRoutingConflict: false\n }\n };\n\n for (const doc of ROOT_DOCS) {\n const target = join(cwd, doc);\n const template = join(templateRoot, doc);\n const status = statusForTextFile(target, template);\n\n if (status === \"missing\") {\n result.missing.push(doc);\n result.preview.wouldCreate.push(doc);\n continue;\n }\n\n if (status === \"unchanged\") result.unchanged.push(doc);\n else {\n result.changed.push(doc);\n result.preview.wouldWriteConflicts.push(doc);\n }\n }\n\n result.agentRoster = statusForTextFile(join(cwd, DEFAULT_AGENT_ROSTER_TARGET), join(packageRoot, DEFAULT_AGENT_ROSTER_SOURCE));\n if (result.agentRoster === \"missing\") {\n result.preview.wouldCreate.push(DEFAULT_AGENT_ROSTER_TARGET);\n result.preview.wouldCreateAgentRoster = true;\n }\n if (result.agentRoster === \"changed\") {\n result.preview.wouldWriteConflicts.push(DEFAULT_AGENT_ROSTER_TARGET);\n result.preview.wouldWriteAgentRosterConflict = true;\n }\n\n result.modelRouting = statusForTextFile(join(cwd, DEFAULT_MODEL_ROUTING_TARGET), join(packageRoot, DEFAULT_MODEL_ROUTING_SOURCE));\n if (result.modelRouting === \"missing\") {\n result.preview.wouldCreate.push(DEFAULT_MODEL_ROUTING_TARGET);\n result.preview.wouldCreateModelRouting = true;\n }\n if (result.modelRouting === \"changed\") {\n result.preview.wouldWriteConflicts.push(DEFAULT_MODEL_ROUTING_TARGET);\n result.preview.wouldWriteModelRoutingConflict = true;\n }\n\n for (const folder of LIBRARY_FOLDERS) {\n const target = join(cwd, \".agent-kit\", folder);\n if (existsSync(target)) libraryFolders.present.push(folder);\n else libraryFolders.missing.push(folder);\n }\n\n return result;\n}\n","import { Octokit } from \"@octokit/rest\";\nimport { existsSync, readFileSync } from \"node:fs\";\nimport { join } from \"node:path\";\nimport type { RepoCandidate } from \"../config/types.js\";\nimport { writeText } from \"../utils/fs.js\";\nimport { findPackageRoot } from \"../utils/package-root.js\";\nimport { researchConfigSchema } from \"./config.js\";\n\nexport interface DiscoverOptions {\n cwd: string;\n output?: string;\n token?: string;\n limit?: number;\n}\n\nexport async function discoverRepos(options: DiscoverOptions): Promise<RepoCandidate[]> {\n const packageRoot = findPackageRoot();\n const configPath = join(packageRoot, \"research\", \"scan-config.json\");\n const config = researchConfigSchema.parse(JSON.parse(readFileSync(configPath, \"utf8\")));\n const token = options.token ?? process.env.GITHUB_TOKEN;\n\n if (!token) {\n throw new Error(\"GITHUB_TOKEN is required for GitHub API research discovery.\");\n }\n\n const octokit = new Octokit({ auth: token });\n const deduped = new Map<string, RepoCandidate>();\n const maxRepos = options.limit ?? config.maxRepos;\n const excludedRepos = new Set(config.excludeRepos.map((repo) => repo.toLowerCase()));\n\n for (const category of config.categories) {\n let categoryCount = 0;\n\n for (const query of category.queries) {\n if (deduped.size >= maxRepos || categoryCount >= category.targetCount) break;\n\n const response = await octokit.search.repos({\n q: `${query} archived:false pushed:>=${config.activeSince} stars:>=${config.minStars}`,\n sort: \"stars\",\n order: \"desc\",\n per_page: 100\n });\n\n for (const repo of response.data.items) {\n if (deduped.size >= maxRepos || categoryCount >= category.targetCount) break;\n if (deduped.has(repo.full_name)) continue;\n if (excludedRepos.has(repo.full_name.toLowerCase())) continue;\n\n deduped.set(repo.full_name, {\n fullName: repo.full_name,\n htmlUrl: repo.html_url,\n description: repo.description ?? \"\",\n stars: repo.stargazers_count,\n pushedAt: repo.pushed_at ?? \"\",\n language: repo.language,\n topics: repo.topics ?? [],\n category: category.name\n });\n categoryCount += 1;\n }\n }\n }\n\n for (const seed of config.seedRepos) {\n if (deduped.size >= maxRepos) break;\n if (deduped.has(seed.fullName)) continue;\n if (excludedRepos.has(seed.fullName.toLowerCase())) continue;\n\n const [owner, repo] = seed.fullName.split(\"/\");\n if (!owner || !repo) continue;\n\n try {\n const response = await octokit.repos.get({ owner, repo });\n deduped.set(response.data.full_name, {\n fullName: response.data.full_name,\n htmlUrl: response.data.html_url,\n description: response.data.description ?? \"\",\n stars: response.data.stargazers_count,\n pushedAt: response.data.pushed_at ?? \"\",\n language: response.data.language,\n topics: response.data.topics ?? [],\n category: seed.category\n });\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n console.warn(`Skipping seed repo ${seed.fullName}: ${message}`);\n }\n }\n\n const candidates = [...deduped.values()].slice(0, maxRepos);\n const output = options.output ?? join(options.cwd, \"research\", \"repo-candidates.json\");\n writeText(output, `${JSON.stringify(candidates, null, 2)}\\n`);\n return candidates;\n}\n","import { z } from \"zod\";\n\nexport const researchCategorySchema = z.object({\n name: z.string().min(1),\n queries: z.array(z.string().min(1)).min(1),\n targetCount: z.number().int().positive()\n});\n\nexport const researchSeedRepoSchema = z.object({\n fullName: z.string().regex(/^[^/\\s]+\\/[^/\\s]+$/),\n category: z.string().min(1)\n});\n\nexport const researchConfigSchema = z.object({\n maxRepos: z.number().int().positive().default(100),\n minStars: z.number().int().nonnegative().default(100),\n activeSince: z.string().default(\"2024-12-01\"),\n excludeRepos: z.array(z.string().regex(/^[^/\\s]+\\/[^/\\s]+$/)).default([]),\n categories: z.array(researchCategorySchema).min(1),\n seedRepos: z.array(researchSeedRepoSchema).default([])\n});\n\nexport type ResearchConfig = z.infer<typeof researchConfigSchema>;\n","import { existsSync, mkdirSync, readFileSync, rmSync } from \"node:fs\";\nimport { join } from \"node:path\";\nimport { simpleGit } from \"simple-git\";\nimport type { RepoCandidate, RepoFinding } from \"../config/types.js\";\nimport { writeText } from \"../utils/fs.js\";\nimport { analyzeRepository } from \"./analyze.js\";\n\nexport interface ScanOptions {\n cwd: string;\n candidatesPath?: string;\n workdir?: string;\n keepClones?: boolean;\n}\n\nfunction findingToMarkdown(finding: RepoFinding): string {\n const total = Object.values(finding.score).reduce((sum, value) => sum + value, 0);\n const maxScore = Object.keys(finding.score).length * 5;\n\n return `# Repo Finding: ${finding.candidate.fullName}\n\n## Why It Was Selected\n- Category: ${finding.candidate.category}\n- Stars: ${finding.candidate.stars}\n- Last pushed: ${finding.candidate.pushedAt}\n- Language: ${finding.candidate.language ?? \"unknown\"}\n- URL: ${finding.candidate.htmlUrl}\n- Score: ${total}/${maxScore}\n\n## Score\n\\`\\`\\`json\n${JSON.stringify(finding.score, null, 2)}\n\\`\\`\\`\n\n## Strong Practices\n${finding.strongPractices.map((item) => `- ${item}`).join(\"\\n\") || \"- None detected by static scan.\"}\n\n## Weaknesses / Not Worth Copying Blindly\n${finding.weakPractices.map((item) => `- ${item}`).join(\"\\n\") || \"- None detected by static scan.\"}\n\n## Files Worth Studying\n${finding.selectedFiles.map((item) => `- \\`${item}\\``).join(\"\\n\") || \"- No high-signal files detected.\"}\n\n## Patterns To Adopt\n${finding.patternsToAdopt.map((item) => `- ${item}`).join(\"\\n\")}\n\n## Impact On Agent Kit\n${finding.impactOnKit.map((item) => `- ${item}`).join(\"\\n\")}\n`;\n}\n\nexport async function scanRepos(options: ScanOptions): Promise<RepoFinding[]> {\n const candidatesPath = options.candidatesPath ?? join(options.cwd, \"research\", \"repo-candidates.json\");\n if (!existsSync(candidatesPath)) {\n throw new Error(`Candidates file not found: ${candidatesPath}`);\n }\n\n const candidates = JSON.parse(readFileSync(candidatesPath, \"utf8\")) as RepoCandidate[];\n const workdir = options.workdir ?? join(options.cwd, \"research\", \"workdir\");\n mkdirSync(workdir, { recursive: true });\n mkdirSync(join(options.cwd, \"research\", \"findings\"), { recursive: true });\n\n const findings: RepoFinding[] = [];\n const git = simpleGit();\n\n for (const candidate of candidates) {\n const repoSlug = candidate.fullName.replace(\"/\", \"__\");\n const repoPath = join(workdir, repoSlug);\n if (existsSync(repoPath)) rmSync(repoPath, { recursive: true, force: true });\n\n await git.raw([\"clone\", \"--depth\", \"1\", candidate.htmlUrl, repoPath]);\n const finding = analyzeRepository(candidate, repoPath);\n findings.push(finding);\n\n writeText(join(options.cwd, \"research\", \"findings\", `${repoSlug}.md`), findingToMarkdown(finding));\n\n if (!options.keepClones) {\n rmSync(repoPath, { recursive: true, force: true });\n }\n }\n\n return findings;\n}\n","import { existsSync, readFileSync } from \"node:fs\";\nimport { join } from \"node:path\";\nimport type { RepoCandidate, RepoFinding, RepoScore } from \"../config/types.js\";\nimport { listFilesRecursive } from \"../utils/fs.js\";\n\nfunction normalizeRelativePath(file: string): string {\n return file.replace(/\\\\/g, \"/\");\n}\n\nfunction hasFile(files: string[], matcher: RegExp): boolean {\n return files.some((file) => matcher.test(normalizeRelativePath(file)));\n}\n\nfunction fileText(root: string, file: string): string {\n const path = join(root, file);\n return existsSync(path) ? readFileSync(path, \"utf8\") : \"\";\n}\n\nfunction textIncludes(root: string, files: string[], matcher: RegExp, terms: string[]): boolean {\n const lowerTerms = terms.map((term) => term.toLowerCase());\n return files\n .filter((file) => matcher.test(normalizeRelativePath(file)))\n .some((file) => {\n const text = fileText(root, file).toLowerCase();\n return lowerTerms.some((term) => text.includes(term));\n });\n}\n\nfunction bounded(value: number): number {\n return Math.max(0, Math.min(5, value));\n}\n\nexport function analyzeRepository(candidate: RepoCandidate, repoRoot: string): RepoFinding {\n const files = listFilesRecursive(repoRoot);\n const score: RepoScore = {\n architecture: bounded(\n Number(hasFile(files, /^app\\//)) +\n Number(hasFile(files, /^components\\//)) +\n Number(hasFile(files, /^lib\\//)) +\n Number(hasFile(files, /^server\\//)) +\n Number(hasFile(files, /^packages\\//))\n ),\n supabaseAuthRls: bounded(\n Number(hasFile(files, /^supabase\\/migrations\\//)) * 2 +\n Number(textIncludes(repoRoot, files, /\\.(sql|md|ts|tsx)$/, [\"row level security\", \"policy\", \"rls\"])) +\n Number(textIncludes(repoRoot, files, /\\.(ts|tsx)$/, [\"createServerClient\", \"supabase-js\"])) +\n Number(textIncludes(repoRoot, files, /\\.(ts|tsx)$/, [\"service_role\", \"service-role\"]))\n ),\n security: bounded(\n Number(hasFile(files, /(^|\\/)SECURITY\\.md$/)) +\n Number(textIncludes(repoRoot, files, /\\.(md|yml|yaml|ts|tsx)$/, [\"OWASP\", \"CodeQL\", \"rate limit\"])) +\n Number(hasFile(files, /^\\.github\\/workflows\\//)) +\n Number(textIncludes(repoRoot, files, /\\.(ts|tsx)$/, [\"zod\", \"safeParse\"])) +\n Number(textIncludes(repoRoot, files, /\\.(md|ts|tsx)$/, [\"csrf\", \"ssrf\", \"idor\"]))\n ),\n frontendDesign: bounded(\n Number(hasFile(files, /^components\\//)) +\n Number(textIncludes(repoRoot, files, /\\.(css|ts|tsx|json)$/, [\"tokens\", \"theme\", \"tailwind\", \"radix\"])) +\n Number(textIncludes(repoRoot, files, /\\.(tsx|md|mdx)$/, [\"empty state\", \"loading\", \"error state\"])) +\n Number(hasFile(files, /(^|\\/)(DESIGN|STYLE_GUIDE)\\.md$/)) +\n Number(textIncludes(repoRoot, files, /\\.(md|mdx)$/, [\"creative direction\", \"content inventory\", \"user needs\"])) +\n Number(textIncludes(repoRoot, files, /\\.(md|mdx)$/, [\"reference set\", \"anti-reference\", \"design critique\", \"distinctiveness\"])) +\n Number(textIncludes(repoRoot, files, /\\.(md|mdx)$/, [\"product quality scorecard\", \"user/task fit\", \"content specificity\", \"source safety\"])) +\n Number(textIncludes(repoRoot, files, /\\.(tsx|css)$/, [\"aria-\", \"focus-visible\"]))\n ),\n accessibility: bounded(\n Number(textIncludes(repoRoot, files, /\\.(tsx|md)$/, [\"aria-\", \"keyboard\", \"focus-visible\"])) +\n Number(textIncludes(repoRoot, files, /\\.(tsx|md)$/, [\"WCAG\", \"accessibility\", \"a11y\"])) +\n Number(textIncludes(repoRoot, files, /\\.(json|js|ts)$/, [\"axe\", \"eslint-plugin-jsx-a11y\"]))\n ),\n testing: bounded(\n Number(hasFile(files, /(vitest|jest)\\.config\\.(js|ts|mjs)$/)) +\n Number(hasFile(files, /playwright\\.config\\.(js|ts|mjs)$/)) * 2 +\n Number(hasFile(files, /(^|\\/)(tests|__tests__|e2e)\\//)) +\n Number(hasFile(files, /^\\.storybook\\//)) +\n Number(textIncludes(repoRoot, files, /\\.(ts|tsx|js|jsx|md|mdx|json|yml|yaml)$/, [\"toHaveScreenshot\", \"visual regression\", \"chromatic\", \"argos\", \"loki\", \"test-storybook\"])) +\n Number(textIncludes(repoRoot, files, /package\\.json$/, [\"test\"]))\n ),\n documentation: bounded(\n Number(hasFile(files, /(^|\\/)README\\.md$/)) +\n Number(hasFile(files, /(^|\\/)CONTRIBUTING\\.md$/)) +\n Number(hasFile(files, /(^|\\/)CHANGELOG\\.md$/)) +\n Number(hasFile(files, /(^|\\/)(CODE_OF_CONDUCT|SUPPORT|GOVERNANCE)\\.md$/)) +\n Number(hasFile(files, /^docs\\//)) +\n Number(textIncludes(repoRoot, files, /\\.(md|mdx)$/, [\"architecture\", \"decision\", \"deployment\"]))\n ),\n ciDeployment: bounded(\n Number(hasFile(files, /^\\.github\\/workflows\\//)) * 2 +\n Number(hasFile(files, /vercel\\.json$/)) +\n Number(textIncludes(repoRoot, files, /\\.(yml|yaml|json|md)$/, [\"deployment\", \"preview\", \"production\"]))\n ),\n repoHealth: bounded(\n Number(hasFile(files, /^\\.github\\/ISSUE_TEMPLATE\\//)) +\n Number(hasFile(files, /(^|\\/)pull_request_template\\.md$/i)) +\n Number(hasFile(files, /^\\.github\\/CODEOWNERS$/)) +\n Number(hasFile(files, /^\\.github\\/(dependabot|labels|labeler)\\.ya?ml$/)) +\n Number(hasFile(files, /^\\.github\\/workflows\\/.*(codeql|labeler).*\\.ya?ml$/)) +\n Number(hasFile(files, /(^|\\/)(CODE_OF_CONDUCT|SUPPORT|GOVERNANCE|REPOSITORY_SETTINGS)\\.md$/)) +\n Number(textIncludes(repoRoot, files, /\\.(md|yml|yaml)$/, [\"branch protection\", \"private vulnerability reporting\", \"required status checks\"]))\n ),\n supplyChain: bounded(\n Number(hasFile(files, /^\\.github\\/workflows\\/.*dependency.*review.*\\.ya?ml$/)) +\n Number(hasFile(files, /^\\.github\\/workflows\\/.*scorecard.*\\.ya?ml$/)) +\n Number(textIncludes(repoRoot, files, /^\\.github\\/workflows\\/.*\\.ya?ml$/, [\"id-token: write\", \"npm publish\", \"trusted publishing\", \"provenance\"])) +\n Number(textIncludes(repoRoot, files, /^\\.github\\/workflows\\/.*\\.ya?ml$/, [\"dependency-review-action\", \"scorecard-action\", \"npm audit\"])) +\n Number(hasFile(files, /(^|\\/)SUPPLY_CHAIN\\.md$/)) +\n Number(textIncludes(repoRoot, files, /\\.(md|yml|yaml|json)$/, [\"provenance\", \"OIDC\", \"trusted publishing\", \"OpenSSF\"]))\n ),\n agentReadiness: bounded(\n Number(hasFile(files, /(^|\\/)AGENTS\\.md$/)) * 2 +\n Number(hasFile(files, /(^|\\/)\\.cursor\\//)) +\n Number(hasFile(files, /(^|\\/)CLAUDE\\.md$/)) +\n Number(hasFile(files, /(^|\\/)schemas\\//)) +\n Number(textIncludes(repoRoot, files, /\\.(md|mdx|json|ts|tsx)$/, [\"agent\", \"prompt\", \"skill\", \"handoff\", \"trace\", \"guardrail\", \"agent-roster\"]))\n )\n };\n\n const selectedFiles = files\n .filter((file) =>\n /(^|\\/)(README|SECURITY|CONTRIBUTING|CHANGELOG|CODE_OF_CONDUCT|SUPPORT|GOVERNANCE|REPOSITORY_SETTINGS|SUPPLY_CHAIN|AGENTS|CLAUDE|DESIGN|STYLE_GUIDE|TESTING|DEPLOYMENT)\\.md$/.test(file) ||\n /(^|\\/)COUNCIL\\.md$/.test(file) ||\n /^\\.github\\/workflows\\//.test(file) ||\n /^\\.github\\/ISSUE_TEMPLATE\\//.test(file) ||\n /^\\.github\\/CODEOWNERS$/.test(file) ||\n /^\\.github\\/(dependabot|labels|labeler)\\.ya?ml$/.test(file) ||\n /(^|\\/)pull_request_template\\.md$/i.test(file) ||\n /^\\.storybook\\//.test(file) ||\n /^schemas\\//.test(file) ||\n /^supabase\\/migrations\\//.test(file) ||\n /package\\.json$/.test(file) ||\n /playwright\\.config\\.(js|ts|mjs)$/.test(file) ||\n /(chromatic|argos|loki)\\.(config\\.)?(json|js|ts|mjs|yml|yaml)$/.test(file)\n )\n .slice(0, 30);\n\n const strongPractices: string[] = [];\n if (score.security >= 4) strongPractices.push(\"Security posture is explicit through docs, validation, CI, or review tooling.\");\n if (score.supabaseAuthRls >= 4) strongPractices.push(\"Supabase authorization appears to be handled close to the data boundary.\");\n if (score.testing >= 4) strongPractices.push(\"Test setup includes meaningful automated, browser-level, component-state, or visual-regression coverage.\");\n if (score.frontendDesign >= 4)\n strongPractices.push(\"Frontend implementation shows reusable components, states, design-system, content-first direction, or reference-led critique signals.\");\n if (score.documentation >= 4) strongPractices.push(\"Documentation is strong enough for external contributors or agents to onboard.\");\n if (score.repoHealth >= 4) strongPractices.push(\"Repository health is supported by issue/PR templates, labels, dependency automation, code scanning, ownership, branch protection guidance, or support docs.\");\n if (score.supplyChain >= 4) strongPractices.push(\"Supply-chain posture includes provenance, dependency review, Scorecard, OIDC publishing, or release integrity signals.\");\n\n const weakPractices: string[] = [];\n if (score.security < 3) weakPractices.push(\"Security expectations are implicit or incomplete.\");\n if (score.supabaseAuthRls < 3) weakPractices.push(\"Supabase RLS/Auth practices are not clearly discoverable.\");\n if (score.accessibility < 3) weakPractices.push(\"Accessibility signals are weak or absent.\");\n if (score.repoHealth < 3) weakPractices.push(\"Public repository health files, labels, branch protection guidance, contribution workflow, dependency automation, or code scanning are weak.\");\n if (score.supplyChain < 3) weakPractices.push(\"Supply-chain provenance, dependency review, Scorecard, or release-integrity signals are weak.\");\n if (score.agentReadiness < 3) weakPractices.push(\"Agent handoff, tracing, guardrail, schema, or AI-workflow instructions are not mature.\");\n\n const patternsToAdopt = [\n \"Prefer explicit docs and checklists over tribal conventions.\",\n \"Promote authorization and validation rules into reusable review gates.\",\n \"Separate frontend design quality from generic implementation review.\",\n \"Treat brand, content, and creative-direction evidence as frontend quality inputs, not optional polish.\",\n \"Use references and anti-references as critique inputs, not as source designs to copy.\",\n \"Use repeatable frontend product-quality scoring for user task, content specificity, visual identity, IA, states, accessibility, and source safety.\",\n \"Treat component-state screenshots and visual-regression evidence as acceptance artifacts for high-risk UI changes.\",\n \"Promote agent handoff practices into schema-backed records and auditable evidence instead of prose-only instructions.\",\n \"Treat public repository health files, issue/PR templates, labels, branch protection guidance, dependency automation, and code scanning as release-readiness assets.\",\n \"Treat package provenance, dependency review, Scorecard, and release workflow controls as package trust requirements.\"\n ];\n\n const impactOnKit = [\n \"Use score deltas to decide which templates and skills need stronger language.\",\n \"Add repeated high-confidence patterns to checklists, not one-off project quirks.\"\n ];\n\n return {\n candidate,\n score,\n selectedFiles,\n strongPractices,\n weakPractices,\n patternsToAdopt,\n impactOnKit\n };\n}\n","import { existsSync, readFileSync, readdirSync } from \"node:fs\";\nimport { join } from \"node:path\";\nimport type { RepoScore } from \"../config/types.js\";\nimport { writeText } from \"../utils/fs.js\";\n\nconst SUMMARY_TARGETS = {\n \"nextjs-patterns\": {\n title: \"Next.js Patterns\",\n scoreKeys: [\"architecture\", \"ciDeployment\", \"documentation\"] satisfies (keyof RepoScore)[],\n categories: [\"official-nextjs\", \"production-saas\"]\n },\n \"supabase-rls-patterns\": {\n title: \"Supabase RLS Patterns\",\n scoreKeys: [\"supabaseAuthRls\"] satisfies (keyof RepoScore)[],\n categories: [\"supabase-nextjs\"]\n },\n \"security-patterns\": {\n title: \"Security Patterns\",\n scoreKeys: [\"security\"] satisfies (keyof RepoScore)[],\n categories: [\"security-quality\", \"supabase-nextjs\", \"production-saas\"]\n },\n \"frontend-design-patterns\": {\n title: \"Frontend Design Patterns\",\n scoreKeys: [\"frontendDesign\", \"accessibility\"] satisfies (keyof RepoScore)[],\n categories: [\"design-systems\", \"production-saas\"]\n },\n \"testing-patterns\": {\n title: \"Testing Patterns\",\n scoreKeys: [\"testing\"] satisfies (keyof RepoScore)[],\n categories: [\"testing-docs-agents\", \"official-nextjs\", \"production-saas\"]\n },\n \"docs-and-agent-patterns\": {\n title: \"Docs And Agent Patterns\",\n scoreKeys: [\"documentation\", \"agentReadiness\"] satisfies (keyof RepoScore)[],\n categories: [\"testing-docs-agents\", \"official-nextjs\"]\n },\n \"repo-health-patterns\": {\n title: \"Repo Health Patterns\",\n scoreKeys: [\"repoHealth\", \"documentation\", \"ciDeployment\", \"security\"] satisfies (keyof RepoScore)[],\n categories: [\"repo-health-maintainers\", \"testing-docs-agents\", \"security-quality\", \"production-saas\"]\n },\n \"supply-chain-patterns\": {\n title: \"Supply Chain Patterns\",\n scoreKeys: [\"supplyChain\", \"security\", \"ciDeployment\", \"repoHealth\"] satisfies (keyof RepoScore)[],\n categories: [\"supply-chain-security\", \"repo-health-maintainers\", \"security-quality\"]\n }\n} as const;\n\ninterface ParsedFinding {\n file: string;\n fullName: string;\n category: string;\n stars: number;\n score: RepoScore;\n totalScore: number;\n strongPractices: string[];\n weakPractices: string[];\n}\n\nconst SCORE_KEYS: (keyof RepoScore)[] = [\n \"architecture\",\n \"supabaseAuthRls\",\n \"security\",\n \"frontendDesign\",\n \"accessibility\",\n \"testing\",\n \"documentation\",\n \"ciDeployment\",\n \"repoHealth\",\n \"supplyChain\",\n \"agentReadiness\"\n];\n\nfunction sectionBullets(text: string, start: string, end: string): string[] {\n const startIndex = text.indexOf(start);\n if (startIndex === -1) return [];\n\n const afterStart = text.slice(startIndex + start.length);\n const endIndex = afterStart.indexOf(end);\n const section = endIndex === -1 ? afterStart : afterStart.slice(0, endIndex);\n\n return section\n .split(\"\\n\")\n .map((line) => line.trim())\n .filter((line) => line.startsWith(\"- \") && !line.includes(\"None detected\"))\n .map((line) => line.slice(2));\n}\n\nfunction parseFinding(file: string, text: string): ParsedFinding | null {\n const fullName = text.match(/^# Repo Finding: (.+)$/m)?.[1];\n const category = text.match(/^- Category: (.+)$/m)?.[1];\n const stars = Number.parseInt(text.match(/^- Stars: (\\d+)$/m)?.[1] ?? \"0\", 10);\n const scoreJson = text.match(/## Score\\n```json\\n([\\s\\S]*?)\\n```/)?.[1];\n\n if (!fullName || !category || !scoreJson) return null;\n\n const parsedScore = JSON.parse(scoreJson) as Partial<RepoScore>;\n const score = Object.fromEntries(SCORE_KEYS.map((key) => [key, parsedScore[key] ?? 0])) as unknown as RepoScore;\n const totalScore = Object.values(score).reduce((sum, value) => sum + value, 0);\n\n return {\n file,\n fullName,\n category,\n stars,\n score,\n totalScore,\n strongPractices: sectionBullets(text, \"## Strong Practices\", \"## Weaknesses / Not Worth Copying Blindly\"),\n weakPractices: sectionBullets(text, \"## Weaknesses / Not Worth Copying Blindly\", \"## Files Worth Studying\")\n };\n}\n\nfunction countBy(values: string[]): [string, number][] {\n const counts = new Map<string, number>();\n for (const value of values) counts.set(value, (counts.get(value) ?? 0) + 1);\n return [...counts.entries()].sort((a, b) => b[1] - a[1] || a[0].localeCompare(b[0]));\n}\n\nfunction scoreFor(finding: ParsedFinding, scoreKeys: (keyof RepoScore)[]): number {\n return scoreKeys.reduce((sum, key) => sum + finding.score[key], 0);\n}\n\nfunction averageScore(findings: ParsedFinding[], scoreKeys: (keyof RepoScore)[]): string {\n if (findings.length === 0) return \"0.00\";\n const max = scoreKeys.length * 5;\n const avg = findings.reduce((sum, finding) => sum + scoreFor(finding, scoreKeys) / max, 0) / findings.length;\n return avg.toFixed(2);\n}\n\nfunction renderRepoList(findings: ParsedFinding[], scoreKeys: (keyof RepoScore)[]): string {\n const maxTotalScore = findings[0] ? Object.keys(findings[0].score).length * 5 : 0;\n return findings\n .slice()\n .sort((a, b) => scoreFor(b, scoreKeys) - scoreFor(a, scoreKeys) || b.totalScore - a.totalScore || b.stars - a.stars)\n .slice(0, 12)\n .map((finding) => `- ${finding.fullName} (${finding.category}) - focus score ${scoreFor(finding, scoreKeys)}, total ${finding.totalScore}/${maxTotalScore}`)\n .join(\"\\n\");\n}\n\nexport function summarizeFindings(cwd: string): string[] {\n const findingsDir = join(cwd, \"research\", \"findings\");\n if (!existsSync(findingsDir)) {\n throw new Error(\"No research/findings directory exists. Run agent-kit research scan first.\");\n }\n\n const findingFiles = readdirSync(findingsDir).filter((file) => file.endsWith(\".md\"));\n const findings = findingFiles\n .map((file) => parseFinding(file, readFileSync(join(findingsDir, file), \"utf8\")))\n .filter((finding): finding is ParsedFinding => finding !== null);\n\n const categoryCounts = countBy(findings.map((finding) => finding.category));\n const outputs: string[] = [];\n\n const overview = `# Research Scan Overview\n\nGenerated from ${findings.length} parsed repository findings.\n\n## Category Coverage\n${categoryCounts.map(([category, count]) => `- ${category}: ${count}`).join(\"\\n\")}\n\n## Highest Total Scores\n${findings\n .slice()\n .sort((a, b) => b.totalScore - a.totalScore || b.stars - a.stars)\n .slice(0, 20)\n .map((finding) => `- ${finding.fullName} (${finding.category}) - ${finding.totalScore}/${Object.keys(finding.score).length * 5}`)\n .join(\"\\n\")}\n\n## Most Repeated Strengths\n${countBy(findings.flatMap((finding) => finding.strongPractices))\n .slice(0, 12)\n .map(([practice, count]) => `- ${practice} (${count})`)\n .join(\"\\n\")}\n\n## Most Repeated Gaps\n${countBy(findings.flatMap((finding) => finding.weakPractices))\n .slice(0, 12)\n .map(([practice, count]) => `- ${practice} (${count})`)\n .join(\"\\n\")}\n`;\n\n const overviewPath = join(cwd, \"research\", \"summaries\", \"scan-overview.md\");\n writeText(overviewPath, overview);\n outputs.push(overviewPath);\n\n for (const [target, config] of Object.entries(SUMMARY_TARGETS)) {\n const categories: readonly string[] = config.categories;\n const scopedFindings = findings.filter((finding) => categories.includes(finding.category));\n const path = join(cwd, \"research\", \"summaries\", `${target}.md`);\n const summary = `# ${config.title}\n\nGenerated from ${scopedFindings.length} relevant repository findings.\n\n## Focus Areas\n${config.scoreKeys.map((key) => `- ${key}`).join(\"\\n\")}\n\n## Aggregate Evidence\n- Average normalized focus score: ${averageScore(scopedFindings, config.scoreKeys)}\n- Repositories considered: ${scopedFindings.length}\n\n## Strongest Repositories For This Topic\n${renderRepoList(scopedFindings, config.scoreKeys) || \"- No matching findings.\"}\n\n## Repeated Strengths\n${countBy(scopedFindings.flatMap((finding) => finding.strongPractices))\n .slice(0, 8)\n .map(([practice, count]) => `- ${practice} (${count})`)\n .join(\"\\n\") || \"- No repeated strengths detected.\"}\n\n## Repeated Gaps\n${countBy(scopedFindings.flatMap((finding) => finding.weakPractices))\n .slice(0, 8)\n .map(([practice, count]) => `- ${practice} (${count})`)\n .join(\"\\n\") || \"- No repeated gaps detected.\"}\n\n## Source Findings\n${scopedFindings\n .slice()\n .sort((a, b) => scoreFor(b, config.scoreKeys) - scoreFor(a, config.scoreKeys))\n .slice(0, 25)\n .map((finding) => `- research/findings/${finding.file}`)\n .join(\"\\n\")}\n`;\n\n writeText(path, summary);\n outputs.push(path);\n }\n\n return outputs;\n}\n\nexport function proposeUpdates(cwd: string): string {\n const output = `# Proposed Agent Kit Updates\n\nReview the generated research summaries, then convert repeated best practices into:\n\n- Root markdown templates in \\`templates/next-supabase\\`\n- Reusable skills in \\`skills/\\`\n- Agent role docs in \\`agents/\\`\n- Security and frontend checklists in \\`checklists/\\`\n\nDo not copy source code from scanned repositories. Adopt only generalized practices with clear rationale.\n`;\n\n const path = join(cwd, \"research\", \"proposed-updates.md\");\n writeText(path, output);\n return path;\n}\n","import { CorrectionRulesContract, type CorrectionRuleContractValue, type CorrectionRulesContractValue, formatContractIssues } from \"../config/contracts.js\";\nimport {\n AGENT_RULES_JSON,\n PROJECT_RULES_JSON,\n UPSTREAM_PROPOSALS_JSON,\n ensureStudioDirs,\n nowIso,\n readJsonFile,\n redactSensitive,\n safeSlug,\n writeJsonFile\n} from \"./shared.js\";\n\nexport interface AddCorrectionOptions {\n scope: CorrectionRuleContractValue[\"scope\"];\n text: string;\n agentId?: string;\n sourceSessionId?: string;\n id?: string;\n}\n\nexport interface CorrectionListResult {\n project: CorrectionRuleContractValue[];\n agent: CorrectionRuleContractValue[];\n upstream: CorrectionRuleContractValue[];\n}\n\nfunction fileForScope(scope: CorrectionRuleContractValue[\"scope\"]): string {\n if (scope === \"agent\") return AGENT_RULES_JSON;\n if (scope === \"upstream-proposal\") return UPSTREAM_PROPOSALS_JSON;\n return PROJECT_RULES_JSON;\n}\n\nexport function emptyCorrectionRules(): CorrectionRulesContractValue {\n return { schemaVersion: 1, rules: [] };\n}\n\nexport function readCorrectionRules(cwd: string, relativePath: string): CorrectionRulesContractValue {\n const parsed = readJsonFile<unknown>(cwd, relativePath) ?? emptyCorrectionRules();\n const result = CorrectionRulesContract.safeParse(parsed);\n if (!result.success) {\n throw new Error(`Invalid ${relativePath}: ${formatContractIssues(result.error).join(\"; \")}`);\n }\n return result.data;\n}\n\nexport function ensureCorrectionFiles(cwd: string): void {\n ensureStudioDirs(cwd);\n for (const path of [PROJECT_RULES_JSON, AGENT_RULES_JSON, UPSTREAM_PROPOSALS_JSON]) {\n if (!readJsonFile<unknown>(cwd, path)) writeJsonFile(cwd, path, emptyCorrectionRules());\n }\n}\n\nexport function addCorrection(cwd: string, options: AddCorrectionOptions): CorrectionRuleContractValue {\n ensureCorrectionFiles(cwd);\n const targetPath = fileForScope(options.scope);\n const rules = readCorrectionRules(cwd, targetPath);\n const id = options.id ?? safeSlug(options.text).slice(0, 48);\n const rule: CorrectionRuleContractValue = {\n id,\n scope: options.scope,\n status: options.scope === \"upstream-proposal\" ? \"proposed\" : \"active\",\n text: redactSensitive(options.text),\n ...(options.agentId ? { agentId: options.agentId, appliesToAgents: [options.agentId] } : {}),\n ...(options.sourceSessionId ? { sourceSessionId: options.sourceSessionId } : {}),\n createdAt: nowIso(),\n reviewedAt: null\n };\n const parsed = CorrectionRulesContract.parse({ ...rules, rules: [...rules.rules.filter((item) => item.id !== id), rule] });\n writeJsonFile(cwd, targetPath, parsed);\n return rule;\n}\n\nexport function listCorrections(cwd: string): CorrectionListResult {\n ensureCorrectionFiles(cwd);\n return {\n project: readCorrectionRules(cwd, PROJECT_RULES_JSON).rules,\n agent: readCorrectionRules(cwd, AGENT_RULES_JSON).rules,\n upstream: readCorrectionRules(cwd, UPSTREAM_PROPOSALS_JSON).rules\n };\n}\n\nexport function applyCorrection(cwd: string, id: string): CorrectionRuleContractValue {\n ensureCorrectionFiles(cwd);\n for (const path of [PROJECT_RULES_JSON, AGENT_RULES_JSON, UPSTREAM_PROPOSALS_JSON]) {\n const rules = readCorrectionRules(cwd, path);\n const index = rules.rules.findIndex((rule) => rule.id === id);\n if (index === -1) continue;\n const current = rules.rules[index];\n if (!current) continue;\n const { retiredAt: _retiredAt, reason: _reason, ...base } = current;\n const updated: CorrectionRuleContractValue = {\n ...base,\n status: \"active\",\n reviewedAt: nowIso()\n };\n rules.rules[index] = updated;\n writeJsonFile(cwd, path, CorrectionRulesContract.parse(rules));\n return updated;\n }\n throw new Error(`Correction not found: ${id}`);\n}\n\nexport function retireCorrection(cwd: string, id: string, reason: string): CorrectionRuleContractValue {\n ensureCorrectionFiles(cwd);\n for (const path of [PROJECT_RULES_JSON, AGENT_RULES_JSON, UPSTREAM_PROPOSALS_JSON]) {\n const rules = readCorrectionRules(cwd, path);\n const index = rules.rules.findIndex((rule) => rule.id === id);\n if (index === -1) continue;\n const current = rules.rules[index];\n if (!current) continue;\n const updated: CorrectionRuleContractValue = {\n ...current,\n status: \"retired\",\n retiredAt: nowIso(),\n reason\n };\n rules.rules[index] = updated;\n writeJsonFile(cwd, path, CorrectionRulesContract.parse(rules));\n return updated;\n }\n throw new Error(`Correction not found: ${id}`);\n}\n\nexport function proposeCorrectionUpstream(cwd: string, id: string): CorrectionRuleContractValue {\n const all = listCorrections(cwd);\n const found = [...all.project, ...all.agent].find((rule) => rule.id === id);\n if (!found) throw new Error(`Correction not found: ${id}`);\n return addCorrection(cwd, {\n scope: \"upstream-proposal\",\n text: found.text,\n ...(found.agentId ? { agentId: found.agentId } : {}),\n ...(found.sourceSessionId ? { sourceSessionId: found.sourceSessionId } : {}),\n id: `${found.id}-upstream`\n });\n}\n","import { existsSync, readFileSync } from \"node:fs\";\nimport { join } from \"node:path\";\nimport { ProjectContextContract, type ProjectContextContractValue, formatContractIssues } from \"../config/contracts.js\";\nimport { listFilesRecursive, readTextIfExists } from \"../utils/fs.js\";\nimport { CONTEXT_JSON, CONTEXT_MD, ensureStudioDirs, listMarkdown, nowIso, readJsonFile, redactSensitive, unique, writeJsonFile, writeTextFile } from \"./shared.js\";\n\nexport interface ContextCommandResult {\n contextPath: string;\n markdownPath: string;\n openQuestions: string[];\n}\n\nfunction readPackageJson(cwd: string): { scripts?: Record<string, string>; dependencies?: Record<string, string>; devDependencies?: Record<string, string> } | null {\n const path = join(cwd, \"package.json\");\n if (!existsSync(path)) return null;\n return JSON.parse(readFileSync(path, \"utf8\")) as {\n scripts?: Record<string, string>;\n dependencies?: Record<string, string>;\n devDependencies?: Record<string, string>;\n };\n}\n\nfunction detectPackageManager(cwd: string): string | undefined {\n if (existsSync(join(cwd, \"pnpm-lock.yaml\"))) return \"pnpm\";\n if (existsSync(join(cwd, \"yarn.lock\"))) return \"yarn\";\n if (existsSync(join(cwd, \"package-lock.json\"))) return \"npm\";\n if (existsSync(join(cwd, \"bun.lockb\")) || existsSync(join(cwd, \"bun.lock\"))) return \"bun\";\n return undefined;\n}\n\nfunction detectFromDependencies(packageJson: ReturnType<typeof readPackageJson>, names: string[]): string[] {\n const deps = {\n ...(packageJson?.dependencies ?? {}),\n ...(packageJson?.devDependencies ?? {})\n };\n return names.filter((name) => deps[name] !== undefined);\n}\n\nfunction readEnvExampleKeys(cwd: string): string[] {\n const envText = readTextIfExists(join(cwd, \".env.example\")) ?? \"\";\n return unique(\n envText\n .split(/\\r?\\n/)\n .map((line) => line.trim())\n .filter((line) => line && !line.startsWith(\"#\") && line.includes(\"=\"))\n .map((line) => line.split(\"=\")[0]?.trim() ?? \"\")\n .filter(Boolean)\n );\n}\n\nfunction inferOpenQuestions(context: ProjectContextContractValue): string[] {\n const missing: string[] = [];\n const questions = [\n [\"productSummary\", \"What does this product do in one concrete paragraph?\"],\n [\"primaryAudience\", \"Who is the primary user or buyer?\"],\n [\"authModel\", \"What authentication model should agents preserve?\"],\n [\"tenantModel\", \"Is this single-user, team, tenant, marketplace, admin, or public content?\"]\n ] as const;\n missing.push(...questions.flatMap(([field, question]) => (context[field].trim() ? [] : [question])));\n if (context.primaryWorkflows.length === 0) missing.push(\"What are the top three user workflows?\");\n if (!context.uiDirection.preferred.trim()) missing.push(\"What should the UI feel like, and what should it avoid?\");\n if (!context.messaging.valueProposition.trim()) missing.push(\"What value proposition and proof should public copy use?\");\n return unique([...context.openQuestions, ...missing]);\n}\n\nexport function scanProjectContext(cwd: string): ProjectContextContractValue {\n const packageJson = readPackageJson(cwd);\n const files = listFilesRecursive(cwd);\n const dependencies = detectFromDependencies(packageJson, [\n \"next\",\n \"react\",\n \"@supabase/supabase-js\",\n \"@supabase/ssr\",\n \"tailwindcss\",\n \"vitest\",\n \"playwright\",\n \"@playwright/test\",\n \"jest\",\n \"storybook\"\n ]);\n const frameworks = dependencies.filter((name) => [\"next\", \"react\", \"@supabase/supabase-js\", \"@supabase/ssr\"].includes(name));\n const uiLibraries = dependencies.filter((name) => [\"tailwindcss\", \"storybook\"].includes(name));\n const testTools = dependencies.filter((name) => [\"vitest\", \"playwright\", \"@playwright/test\", \"jest\", \"storybook\"].includes(name));\n const supabaseSignals = files.filter((file) => /(^|\\/)(supabase|migrations|seed)\\b/.test(file) || file.includes(\"supabase\"));\n const deployment = files.filter((file) => /(^|\\/)(vercel\\.json|netlify\\.toml|Dockerfile|docker-compose\\.yml|\\.github\\/workflows\\/.*\\.ya?ml)$/.test(file));\n const existing = readJsonFile<ProjectContextContractValue>(cwd, CONTEXT_JSON);\n const now = nowIso();\n\n const context: ProjectContextContractValue = {\n schemaVersion: 1,\n projectName: existing?.projectName || readPackageName(cwd) || \"TBD\",\n productSummary: existing?.productSummary ?? \"\",\n productCategory: existing?.productCategory ?? \"TBD\",\n primaryAudience: existing?.primaryAudience ?? \"\",\n primaryWorkflows: existing?.primaryWorkflows ?? [],\n businessCriticalBehavior: existing?.businessCriticalBehavior ?? [],\n architecture: {\n packageManager: detectPackageManager(cwd) ?? existing?.architecture.packageManager,\n scripts: unique(Object.keys(packageJson?.scripts ?? {})),\n frameworks: unique([...(existing?.architecture.frameworks ?? []), ...frameworks]),\n uiLibraries: unique([...(existing?.architecture.uiLibraries ?? []), ...uiLibraries]),\n hasSupabase: Boolean(existing?.architecture.hasSupabase || supabaseSignals.length > 0 || frameworks.some((name) => name.includes(\"supabase\"))),\n supabaseSignals: unique([...(existing?.architecture.supabaseSignals ?? []), ...supabaseSignals.slice(0, 20)]),\n testTools: unique([...(existing?.architecture.testTools ?? []), ...testTools]),\n envExampleKeys: readEnvExampleKeys(cwd),\n deployment: unique([...(existing?.architecture.deployment ?? []), ...deployment.slice(0, 20)])\n },\n dataSensitivity: existing?.dataSensitivity ?? [],\n authModel: existing?.authModel ?? \"\",\n tenantModel: existing?.tenantModel ?? \"\",\n integrations: existing?.integrations ?? [],\n uiDirection: existing?.uiDirection ?? { preferred: \"\", avoid: \"\" },\n messaging: existing?.messaging ?? { valueProposition: \"\", proof: [], objections: [] },\n qualityTarget: existing?.qualityTarget ?? \"baseline-setup\",\n knownConstraints: existing?.knownConstraints ?? [],\n openQuestions: existing?.openQuestions ?? [],\n evidence: uniqueEvidence([\n ...(existing?.evidence ?? []),\n { source: \"agent-kit context scan\", note: `Scanned ${files.length} files for package, Supabase, test, env example, and deployment signals.` }\n ]),\n lastReviewedAt: now,\n owners: existing?.owners ?? []\n };\n context.openQuestions = inferOpenQuestions(context);\n return ProjectContextContract.parse(context);\n}\n\nfunction readPackageName(cwd: string): string | null {\n const packageJson = readPackageJson(cwd);\n return typeof (packageJson as { name?: unknown } | null)?.name === \"string\" ? (packageJson as { name: string }).name : null;\n}\n\nfunction uniqueEvidence(items: ProjectContextContractValue[\"evidence\"]): ProjectContextContractValue[\"evidence\"] {\n const seen = new Set<string>();\n return items.filter((item) => {\n const key = `${item.source}:${item.note}`;\n if (seen.has(key)) return false;\n seen.add(key);\n return true;\n });\n}\n\nexport function writeProjectContext(cwd: string, context: ProjectContextContractValue): ContextCommandResult {\n ensureStudioDirs(cwd);\n const parsed = ProjectContextContract.parse(context);\n writeJsonFile(cwd, CONTEXT_JSON, parsed);\n const markdown = renderProjectContextMarkdown(parsed);\n writeTextFile(cwd, CONTEXT_MD, markdown);\n return { contextPath: CONTEXT_JSON, markdownPath: CONTEXT_MD, openQuestions: parsed.openQuestions };\n}\n\nexport function initProjectContext(cwd: string): ContextCommandResult {\n return writeProjectContext(cwd, scanProjectContext(cwd));\n}\n\nexport function validateProjectContext(cwd: string): ContextCommandResult {\n const context = readJsonFile<unknown>(cwd, CONTEXT_JSON);\n const result = ProjectContextContract.safeParse(context);\n if (!result.success) {\n throw new Error(`Invalid ${CONTEXT_JSON}: ${formatContractIssues(result.error).join(\"; \")}`);\n }\n return { contextPath: CONTEXT_JSON, markdownPath: CONTEXT_MD, openQuestions: result.data.openQuestions };\n}\n\nexport function renderProjectContext(cwd: string): ContextCommandResult {\n const context = readJsonFile<unknown>(cwd, CONTEXT_JSON);\n const result = ProjectContextContract.safeParse(context);\n if (!result.success) {\n throw new Error(`Invalid ${CONTEXT_JSON}: ${formatContractIssues(result.error).join(\"; \")}`);\n }\n writeTextFile(cwd, CONTEXT_MD, renderProjectContextMarkdown(result.data));\n return { contextPath: CONTEXT_JSON, markdownPath: CONTEXT_MD, openQuestions: result.data.openQuestions };\n}\n\nexport function renderProjectContextMarkdown(context: ProjectContextContractValue): string {\n return `# Project Context\n\nGenerated from \\`${CONTEXT_JSON}\\`.\n\n## Summary\n\n- Project: ${redactSensitive(context.projectName || \"TBD\")}\n- Category: ${redactSensitive(context.productCategory || \"TBD\")}\n- Audience: ${redactSensitive(context.primaryAudience || \"TBD\")}\n- Quality target: ${context.qualityTarget}\n- Last reviewed: ${context.lastReviewedAt}\n\n${redactSensitive(context.productSummary || \"No product summary recorded.\")}\n\n## Primary Workflows\n\n${listMarkdown(context.primaryWorkflows)}\n\n## Architecture Signals\n\n- Package manager: ${context.architecture.packageManager ?? \"unknown\"}\n- Frameworks: ${context.architecture.frameworks.join(\", \") || \"none detected\"}\n- UI libraries: ${context.architecture.uiLibraries.join(\", \") || \"none detected\"}\n- Test tools: ${context.architecture.testTools.join(\", \") || \"none detected\"}\n- Supabase detected: ${context.architecture.hasSupabase ? \"yes\" : \"no\"}\n- Env example keys: ${context.architecture.envExampleKeys.join(\", \") || \"none detected\"}\n- Deployment files: ${context.architecture.deployment.join(\", \") || \"none detected\"}\n\n## Security And Data\n\n- Auth model: ${redactSensitive(context.authModel || \"TBD\")}\n- Tenant model: ${redactSensitive(context.tenantModel || \"TBD\")}\n\nData sensitivity:\n\n${listMarkdown(context.dataSensitivity)}\n\n## UI Direction\n\n- Preferred: ${redactSensitive(context.uiDirection.preferred || \"TBD\")}\n- Avoid: ${redactSensitive(context.uiDirection.avoid || \"TBD\")}\n\n## Messaging\n\n- Value proposition: ${redactSensitive(context.messaging.valueProposition || \"TBD\")}\n\nProof:\n\n${listMarkdown(context.messaging.proof)}\n\nObjections:\n\n${listMarkdown(context.messaging.objections)}\n\n## Open Questions\n\n${listMarkdown(context.openQuestions)}\n\n## Evidence\n\n| Source | Note |\n| --- | --- |\n${context.evidence.map((item) => `| ${redactSensitive(item.source)} | ${redactSensitive(item.note).replace(/\\|/g, \"\\\\|\")} |`).join(\"\\n\")}\n`;\n}\n","import { existsSync, readFileSync, readdirSync, statSync } from \"node:fs\";\nimport { join } from \"node:path\";\nimport {\n SessionEventContract,\n StudioSessionContract,\n type SessionEventContractValue,\n type StudioSessionContractValue,\n formatContractIssues\n} from \"../config/contracts.js\";\nimport { DEFAULT_AGENT_ROSTER_TARGET } from \"../config/defaults.js\";\nimport { addCorrection } from \"./corrections.js\";\nimport {\n ACTIVE_SESSION_FILE,\n COUNCIL_SESSIONS_DIR,\n appendJsonLine,\n ensureStudioDirs,\n escapeMarkdownTableCell,\n escapeMarkdownText,\n listMarkdown,\n nowIso,\n readJsonFile,\n readJsonLines,\n readTextFile,\n redactSensitive,\n safeSlug,\n validateRelativeArtifactPath,\n writeJsonFile,\n writeTextFile\n} from \"./shared.js\";\n\nexport interface StartSessionOptions {\n title: string;\n workflowId?: string;\n request?: string;\n affectedLayers?: string[];\n qualityTarget?: StudioSessionContractValue[\"qualityTarget\"];\n}\n\nexport interface HandoffOptions {\n fromAgentId: string;\n toAgentId: string;\n decision: string;\n risk: string;\n evidence?: string[];\n}\n\nexport interface SessionCommandResult {\n sessionId: string;\n sessionPath: string;\n}\n\nfunction sessionDir(sessionId: string): string {\n return `${COUNCIL_SESSIONS_DIR}/${safeSlug(sessionId)}`;\n}\n\nfunction sessionJsonPath(sessionId: string): string {\n return `${sessionDir(sessionId)}/session.json`;\n}\n\nfunction eventsPath(sessionId: string): string {\n return `${sessionDir(sessionId)}/events.jsonl`;\n}\n\nfunction indexPath(sessionId: string): string {\n return `${sessionDir(sessionId)}/index.md`;\n}\n\nfunction transcriptPath(sessionId: string): string {\n return `${sessionDir(sessionId)}/transcript.md`;\n}\n\nfunction readDefaultWorkflowOutputs(cwd: string, workflowId: string): StudioSessionContractValue[\"requiredOutputs\"] {\n const roster = readJsonFile<{ workflows?: Array<{ id?: string; requiredOutputs?: string[] }> }>(cwd, DEFAULT_AGENT_ROSTER_TARGET);\n const workflow = roster?.workflows?.find((item) => item.id === workflowId);\n return (workflow?.requiredOutputs ?? [\"decision\", \"risk\", \"verification evidence\"]).map((name) => ({\n name,\n status: \"missing\" as const\n }));\n}\n\nexport function startSession(cwd: string, options: StartSessionOptions): SessionCommandResult {\n ensureStudioDirs(cwd);\n const datePrefix = new Date().toISOString().slice(0, 10);\n const sessionId = safeSlug(`${datePrefix}-${options.title}`);\n const now = nowIso();\n const workflowId = options.workflowId ?? \"planning\";\n const session: StudioSessionContractValue = {\n schemaVersion: 1,\n sessionId,\n title: options.title,\n createdAt: now,\n updatedAt: now,\n status: \"in-progress\",\n workflowId,\n request: options.request ?? options.title,\n affectedLayers: options.affectedLayers ?? [],\n activeAgentId: \"planner\",\n nextAgentId: undefined,\n qualityTarget: options.qualityTarget ?? \"baseline-setup\",\n requiredOutputs: readDefaultWorkflowOutputs(cwd, workflowId)\n };\n\n writeJsonFile(cwd, sessionJsonPath(sessionId), StudioSessionContract.parse(session));\n writeTextFile(cwd, ACTIVE_SESSION_FILE, `${sessionId}\\n`);\n appendSessionEvent(cwd, sessionId, {\n type: \"session_started\",\n createdAt: now,\n agentId: \"planner\",\n text: `Started ${workflowId} session: ${options.title}`\n });\n return { sessionId, sessionPath: sessionDir(sessionId) };\n}\n\nexport function listSessions(cwd: string): StudioSessionContractValue[] {\n const root = join(cwd, COUNCIL_SESSIONS_DIR);\n if (!existsSync(root)) return [];\n return readdirSync(root)\n .filter((entry) => entry !== \"active\")\n .map((entry) => join(root, entry, \"session.json\"))\n .filter((path) => existsSync(path) && statSync(path).isFile())\n .map((path) => StudioSessionContract.parse(JSON.parse(readFileSync(path, \"utf8\")) as unknown))\n .sort((a, b) => a.createdAt.localeCompare(b.createdAt));\n}\n\nexport function getActiveSessionId(cwd: string): string {\n const active = readTextFile(cwd, ACTIVE_SESSION_FILE)?.trim();\n if (!active) throw new Error(\"No active Agent Studio session. Run agent-kit session start first.\");\n return safeSlug(active);\n}\n\nexport function readSession(cwd: string, sessionId = getActiveSessionId(cwd)): StudioSessionContractValue {\n const parsed = readJsonFile<unknown>(cwd, sessionJsonPath(sessionId));\n const result = StudioSessionContract.safeParse(parsed);\n if (!result.success) throw new Error(`Invalid ${sessionJsonPath(sessionId)}: ${formatContractIssues(result.error).join(\"; \")}`);\n return result.data;\n}\n\nexport function readSessionEvents(cwd: string, sessionId = getActiveSessionId(cwd)): SessionEventContractValue[] {\n return readJsonLines(cwd, eventsPath(sessionId)).map((event, index) => {\n const result = SessionEventContract.safeParse(event);\n if (!result.success) {\n throw new Error(`Invalid ${eventsPath(sessionId)} line ${index + 1}: ${formatContractIssues(result.error).join(\"; \")}`);\n }\n return result.data;\n });\n}\n\nfunction writeSession(cwd: string, session: StudioSessionContractValue): void {\n writeJsonFile(cwd, sessionJsonPath(session.sessionId), StudioSessionContract.parse(session));\n}\n\nexport function appendSessionEvent(cwd: string, sessionId: string, event: SessionEventContractValue): SessionEventContractValue {\n const parsed = SessionEventContract.parse(redactEvent(event));\n appendJsonLine(cwd, eventsPath(sessionId), parsed);\n const session = readSession(cwd, sessionId);\n const updated: StudioSessionContractValue = {\n ...session,\n updatedAt: parsed.createdAt\n };\n if (parsed.agentId) updated.activeAgentId = parsed.agentId;\n if (parsed.type === \"handoff\" && parsed.toAgentId) {\n updated.activeAgentId = parsed.toAgentId;\n updated.nextAgentId = parsed.toAgentId;\n }\n if (parsed.type === \"session_status_changed\" && parsed.status) updated.status = parsed.status;\n writeSession(cwd, updated);\n return parsed;\n}\n\nfunction redactEvent(event: SessionEventContractValue): SessionEventContractValue {\n return {\n ...event,\n ...(event.text ? { text: redactSensitive(event.text) } : {}),\n ...(event.decision ? { decision: redactSensitive(event.decision) } : {}),\n ...(event.risk ? { risk: redactSensitive(event.risk) } : {}),\n ...(event.notes ? { notes: redactSensitive(event.notes) } : {}),\n ...(event.command ? { command: redactSensitive(event.command) } : {}),\n ...(event.outputName ? { outputName: redactSensitive(event.outputName) } : {}),\n ...(event.evidence ? { evidence: event.evidence.map(redactSensitive) } : {})\n };\n}\n\nexport function recordNote(cwd: string, agentId: string, text: string): SessionEventContractValue {\n return appendSessionEvent(cwd, getActiveSessionId(cwd), { type: \"agent_message\", createdAt: nowIso(), agentId, text });\n}\n\nexport function recordDecision(cwd: string, agentId: string, decision: string, risk?: string): SessionEventContractValue {\n return appendSessionEvent(cwd, getActiveSessionId(cwd), {\n type: \"agent_decision\",\n createdAt: nowIso(),\n agentId,\n decision,\n ...(risk ? { risk } : {})\n });\n}\n\nexport function recordHandoff(cwd: string, options: HandoffOptions): SessionEventContractValue {\n return appendSessionEvent(cwd, getActiveSessionId(cwd), {\n type: \"handoff\",\n createdAt: nowIso(),\n fromAgentId: options.fromAgentId,\n toAgentId: options.toAgentId,\n decision: options.decision,\n risk: options.risk,\n evidence: options.evidence ?? []\n });\n}\n\nexport function recordCorrection(\n cwd: string,\n options: { agentId?: string; scope: \"session\" | \"project\" | \"agent\" | \"upstream-proposal\"; text: string }\n): SessionEventContractValue {\n const sessionId = getActiveSessionId(cwd);\n const correction =\n options.scope === \"session\"\n ? undefined\n : addCorrection(cwd, {\n scope: options.scope,\n text: options.text,\n ...(options.agentId ? { agentId: options.agentId } : {}),\n sourceSessionId: sessionId\n });\n return appendSessionEvent(cwd, sessionId, {\n type: \"human_correction\",\n createdAt: nowIso(),\n ...(options.agentId ? { agentId: options.agentId } : {}),\n scope: options.scope,\n text: options.text,\n ...(correction ? { correctionId: correction.id } : {})\n });\n}\n\nexport function recordArtifact(cwd: string, file: string, note?: string): SessionEventContractValue {\n const artifactPath = validateRelativeArtifactPath(cwd, file);\n return appendSessionEvent(cwd, getActiveSessionId(cwd), {\n type: \"artifact_recorded\",\n createdAt: nowIso(),\n artifactPath,\n ...(note ? { notes: note } : {})\n });\n}\n\nexport function recordVerification(cwd: string, command: string, result: \"pass\" | \"fail\" | \"skipped\", notes?: string): SessionEventContractValue {\n return appendSessionEvent(cwd, getActiveSessionId(cwd), {\n type: \"verification_recorded\",\n createdAt: nowIso(),\n command,\n result,\n ...(notes ? { notes } : {})\n });\n}\n\nexport function recordRequiredOutput(\n cwd: string,\n name: string,\n status: \"missing\" | \"partial\" | \"complete\" | \"not-applicable\",\n evidence?: string\n): SessionEventContractValue {\n const trimmedName = name.trim();\n if (!trimmedName) throw new Error(\"Required output name is required.\");\n const sessionId = getActiveSessionId(cwd);\n const session = readSession(cwd, sessionId);\n const now = nowIso();\n const output = {\n name: trimmedName,\n status,\n ...(evidence ? { evidence: redactSensitive(evidence) } : {})\n };\n const outputIndex = session.requiredOutputs.findIndex((item) => item.name === trimmedName);\n const requiredOutputs =\n outputIndex === -1\n ? [...session.requiredOutputs, output]\n : session.requiredOutputs.map((item, index) => (index === outputIndex ? { ...item, ...output } : item));\n writeSession(cwd, { ...session, requiredOutputs, updatedAt: now });\n return appendSessionEvent(cwd, sessionId, {\n type: \"required_output_updated\",\n createdAt: now,\n outputName: trimmedName,\n outputStatus: status,\n ...(evidence ? { evidence: [evidence] } : {})\n });\n}\n\nexport function closeSession(cwd: string, status: \"planned\" | \"in-progress\" | \"blocked\" | \"complete\"): StudioSessionContractValue {\n const sessionId = getActiveSessionId(cwd);\n appendSessionEvent(cwd, sessionId, {\n type: \"session_status_changed\",\n createdAt: nowIso(),\n status,\n text: `Session marked ${status}.`\n });\n return readSession(cwd, sessionId);\n}\n\nexport function renderActiveSession(cwd: string): SessionCommandResult {\n return renderSession(cwd, getActiveSessionId(cwd));\n}\n\nexport function renderSession(cwd: string, sessionId: string): SessionCommandResult {\n const session = readSession(cwd, sessionId);\n const events = readSessionEvents(cwd, sessionId);\n const renderedAt = nowIso();\n const updated = { ...session, renderedAt, updatedAt: renderedAt };\n writeTextFile(cwd, indexPath(sessionId), renderSessionIndex(updated, events));\n writeTextFile(cwd, transcriptPath(sessionId), renderSessionTranscript(updated, events));\n writeSession(cwd, updated);\n return { sessionId, sessionPath: sessionDir(sessionId) };\n}\n\nfunction renderSessionIndex(session: StudioSessionContractValue, events: SessionEventContractValue[]): string {\n const handoffs = events.filter((event) => event.type === \"handoff\");\n const decisions = events.filter((event) => event.type === \"agent_decision\" || event.type === \"handoff\");\n const corrections = events.filter((event) => event.type === \"human_correction\");\n const artifacts = events.filter((event) => event.type === \"artifact_recorded\");\n const verification = events.filter((event) => event.type === \"verification_recorded\");\n\n return `# Council Session: ${escapeMarkdownText(session.title)}\n\nGenerated from \\`${sessionDir(session.sessionId)}/events.jsonl\\` at ${session.renderedAt ?? session.updatedAt}.\n\n## Current State\n\n- Session: ${session.sessionId}\n- Workflow: ${session.workflowId}\n- Status: ${session.status}\n- Active agent: ${session.activeAgentId ?? \"none\"}\n- Next agent: ${session.nextAgentId ?? \"none\"}\n- Quality target: ${session.qualityTarget}\n- Request: ${escapeMarkdownText(session.request)}\n\n## Handoff Graph\n\n\\`\\`\\`mermaid\n${renderMermaidGraph(handoffs)}\n\\`\\`\\`\n\n## Decisions\n\n| Agent | Decision | Risk | Evidence |\n| --- | --- | --- | --- |\n${decisions.map(renderDecisionRow).join(\"\\n\") || \"| None | None recorded | None recorded | None |\"}\n\n## Human Corrections\n\n| Scope | Agent | Correction | Durable Rule |\n| --- | --- | --- | --- |\n${corrections.map((event) => `| ${event.scope ?? \"session\"} | ${escapeMarkdownTableCell(event.agentId ?? \"all\")} | ${escapeMarkdownTableCell(event.text)} | ${event.correctionId ?? \"session-only\"} |`).join(\"\\n\") || \"| None | None | None recorded | None |\"}\n\n## Required Outputs\n\n| Output | Status | Evidence |\n| --- | --- | --- |\n${session.requiredOutputs.map((output) => `| ${escapeMarkdownTableCell(output.name)} | ${output.status} | ${escapeMarkdownTableCell(output.evidence)} |`).join(\"\\n\")}\n\n## Artifacts\n\n${listMarkdown(artifacts.map((event) => `${event.artifactPath}${event.notes ? ` - ${event.notes}` : \"\"}`))}\n\n## Verification\n\n| Command | Result | Notes |\n| --- | --- | --- |\n${verification.map((event) => `| ${escapeMarkdownTableCell(event.command)} | ${event.result ?? \"skipped\"} | ${escapeMarkdownTableCell(event.notes)} |`).join(\"\\n\") || \"| None recorded | skipped | Add verification before completion |\"}\n\n## Next Actions\n\n${renderNextActions(session, verification)}\n`;\n}\n\nfunction renderDecisionRow(event: SessionEventContractValue): string {\n if (event.type === \"handoff\") {\n return `| ${escapeMarkdownTableCell(`${event.fromAgentId ?? \"unknown\"} -> ${event.toAgentId ?? \"unknown\"}`)} | ${escapeMarkdownTableCell(event.decision)} | ${escapeMarkdownTableCell(event.risk)} | ${escapeMarkdownTableCell(event.evidence?.join(\", \"))} |`;\n }\n return `| ${escapeMarkdownTableCell(event.agentId ?? \"unknown\")} | ${escapeMarkdownTableCell(event.decision)} | ${escapeMarkdownTableCell(event.risk)} | ${escapeMarkdownTableCell(event.evidence?.join(\", \"))} |`;\n}\n\nfunction renderMermaidGraph(handoffs: SessionEventContractValue[]): string {\n if (handoffs.length === 0) return \"flowchart LR\\n session[\\\"Session\\\"]\";\n const lines = [\"flowchart LR\"];\n for (const handoff of handoffs) {\n const from = safeNodeId(handoff.fromAgentId ?? \"unknown\");\n const to = safeNodeId(handoff.toAgentId ?? \"unknown\");\n lines.push(` ${from}[\"${safeMermaidLabel(handoff.fromAgentId ?? \"unknown\")}\"] --> ${to}[\"${safeMermaidLabel(handoff.toAgentId ?? \"unknown\")}\"]`);\n }\n return lines.join(\"\\n\");\n}\n\nfunction safeNodeId(value: string): string {\n const id = value.replace(/[^a-zA-Z0-9_]/g, \"_\");\n return id || \"unknown\";\n}\n\nfunction safeMermaidLabel(value: string): string {\n const label = redactSensitive(value)\n .replace(/[^a-zA-Z0-9 _./:-]/g, \" \")\n .replace(/\\s+/g, \" \")\n .trim();\n return label || \"unknown\";\n}\n\nfunction renderNextActions(session: StudioSessionContractValue, verification: SessionEventContractValue[]): string {\n const missingOutputs = session.requiredOutputs.filter((output) => output.status === \"missing\" || output.status === \"partial\");\n const actions = [\n ...missingOutputs.map((output) => `Complete required output: ${output.name}.`),\n ...(verification.length === 0 ? [\"Record verification evidence before closing the session.\"] : []),\n ...(session.nextAgentId ? [`Continue with ${session.nextAgentId}.`] : [])\n ];\n return listMarkdown(actions);\n}\n\nfunction renderSessionTranscript(session: StudioSessionContractValue, events: SessionEventContractValue[]): string {\n const byAgent = new Map<string, SessionEventContractValue[]>();\n for (const event of events) {\n const key = event.agentId ?? event.fromAgentId ?? \"session\";\n byAgent.set(key, [...(byAgent.get(key) ?? []), event]);\n }\n const sections = [...byAgent.entries()]\n .map(([agentId, agentEvents]) => {\n const rows = agentEvents.map((event) => {\n const detail =\n event.text ??\n event.decision ??\n event.command ??\n event.artifactPath ??\n (event.outputName ? `${event.outputName}: ${event.outputStatus ?? \"\"}` : undefined) ??\n event.status ??\n \"\";\n return `- ${event.createdAt} \\`${event.type}\\`: ${escapeMarkdownText(detail)}`;\n });\n return `## ${escapeMarkdownText(agentId)}\\n\\n${rows.join(\"\\n\")}`;\n })\n .join(\"\\n\\n\");\n\n return `# Transcript: ${escapeMarkdownText(session.title)}\n\nGenerated from \\`${sessionDir(session.sessionId)}/events.jsonl\\`.\n\n${sections || \"No events recorded.\"}\n`;\n}\n","import { ProjectContextContract, type SessionEventContractValue, type StudioSessionContractValue } from \"../config/contracts.js\";\nimport { listCorrections } from \"./corrections.js\";\nimport { listSessions, readSessionEvents } from \"./session.js\";\nimport {\n ACTIVE_SESSION_FILE,\n CONTEXT_JSON,\n CONTEXT_MD,\n COUNCIL_SESSIONS_DIR,\n STUDIO_EXPORT_HTML,\n containsLikelySecret,\n ensureStudioDirs,\n nowIso,\n readJsonFile,\n readTextFile,\n redactSensitive,\n safeSlug,\n unique,\n writeTextFile\n} from \"./shared.js\";\n\nexport interface StaticStudioExportResult {\n studioPath: string;\n sessionCount: number;\n exportedAt: string;\n}\n\ninterface StaticStudioSession {\n session: StudioSessionContractValue;\n events: SessionEventContractValue[];\n indexPath: string;\n transcriptPath: string;\n agents: string[];\n}\n\ninterface StaticStudioData {\n generatedAt: string;\n context: unknown | null;\n contextMarkdown: string | null;\n corrections: ReturnType<typeof listCorrections>;\n activeSessionId: string | null;\n sessions: StaticStudioSession[];\n}\n\nexport function exportStaticStudio(cwd: string): StaticStudioExportResult {\n ensureStudioDirs(cwd);\n const exportedAt = nowIso();\n const context = readProjectContext(cwd);\n const contextMarkdown = readTextFile(cwd, CONTEXT_MD);\n const corrections = listCorrections(cwd);\n const sessions = listSessions(cwd).map((session) => {\n const events = readSessionEvents(cwd, session.sessionId);\n return {\n session,\n events,\n indexPath: `${COUNCIL_SESSIONS_DIR}/${safeSlug(session.sessionId)}/index.md`,\n transcriptPath: `${COUNCIL_SESSIONS_DIR}/${safeSlug(session.sessionId)}/transcript.md`,\n agents: unique(events.flatMap((event) => [event.agentId, event.fromAgentId, event.toAgentId].filter(Boolean) as string[]))\n };\n });\n const data: StaticStudioData = {\n generatedAt: exportedAt,\n context,\n contextMarkdown,\n corrections,\n activeSessionId: readTextFile(cwd, ACTIVE_SESSION_FILE)?.trim() ?? null,\n sessions\n };\n const redactedData = redactDeep(data) as StaticStudioData;\n const html = renderStaticStudioHtml(redactedData);\n if (containsLikelySecret(html)) {\n throw new Error(\"Refusing to write static Agent Studio export because the rendered HTML contains a secret-like value.\");\n }\n writeTextFile(cwd, STUDIO_EXPORT_HTML, html);\n return { studioPath: STUDIO_EXPORT_HTML, sessionCount: sessions.length, exportedAt };\n}\n\nfunction readProjectContext(cwd: string): unknown | null {\n const raw = readJsonFile<unknown>(cwd, CONTEXT_JSON);\n if (!raw) return null;\n return ProjectContextContract.parse(raw);\n}\n\nfunction redactDeep(value: unknown): unknown {\n if (typeof value === \"string\") return redactSensitive(value);\n if (Array.isArray(value)) return value.map(redactDeep);\n if (value && typeof value === \"object\") {\n return Object.fromEntries(Object.entries(value).map(([key, item]) => [key, redactDeep(item)]));\n }\n return value;\n}\n\nfunction renderStaticStudioHtml(data: StaticStudioData): string {\n const sessionCount = data.sessions.length;\n const correctionCount = data.corrections.project.length + data.corrections.agent.length;\n return `<!doctype html>\n<html lang=\"en\">\n<head>\n <meta charset=\"utf-8\">\n <meta name=\"viewport\" content=\"width=device-width, initial-scale=1\">\n <meta http-equiv=\"Content-Security-Policy\" content=\"default-src 'none'; style-src 'unsafe-inline'; img-src data:; base-uri 'none'; form-action 'none'\">\n <title>Agent Studio</title>\n <style>\n :root { color-scheme: light; --ink: #1f2933; --muted: #52606d; --line: #d9e2ec; --panel: #ffffff; --bg: #f5f7fa; --accent: #0f766e; --accent-2: #7c3aed; --warn: #b45309; }\n * { box-sizing: border-box; }\n body { margin: 0; font-family: Inter, ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, \"Segoe UI\", sans-serif; color: var(--ink); background: var(--bg); line-height: 1.5; }\n header { padding: 28px clamp(16px, 4vw, 48px) 20px; background: #0b1f24; color: #f8fafc; }\n header h1 { margin: 0 0 8px; font-size: clamp(28px, 4vw, 44px); letter-spacing: 0; }\n header p { margin: 0; color: #cbd5e1; max-width: 980px; }\n main { display: grid; grid-template-columns: minmax(0, 1fr); gap: 18px; padding: 20px clamp(16px, 4vw, 48px) 48px; }\n section, details { background: var(--panel); border: 1px solid var(--line); border-radius: 8px; }\n section { padding: 18px; }\n h2 { margin: 0 0 12px; font-size: 22px; letter-spacing: 0; }\n h3 { margin: 18px 0 10px; font-size: 17px; letter-spacing: 0; }\n .metrics { display: grid; grid-template-columns: repeat(auto-fit, minmax(150px, 1fr)); gap: 10px; margin-top: 18px; }\n .metric { border: 1px solid rgba(255,255,255,.22); border-radius: 8px; padding: 12px; background: rgba(255,255,255,.08); }\n .metric strong { display: block; font-size: 24px; }\n .metric span { color: #cbd5e1; font-size: 13px; }\n .grid { display: grid; grid-template-columns: minmax(0, 340px) minmax(0, 1fr); gap: 18px; align-items: start; }\n .stack { display: grid; gap: 12px; }\n .muted { color: var(--muted); }\n .path { font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, monospace; font-size: 13px; color: var(--muted); overflow-wrap: anywhere; }\n .pill { display: inline-flex; align-items: center; border-radius: 999px; padding: 2px 9px; border: 1px solid var(--line); background: #f8fafc; font-size: 12px; margin: 2px 4px 2px 0; }\n .session-card { padding: 0; overflow: hidden; }\n .session-head { padding: 16px 18px; border-bottom: 1px solid var(--line); display: flex; gap: 10px; flex-wrap: wrap; align-items: baseline; justify-content: space-between; }\n .session-head h2 { margin: 0; }\n .session-body { padding: 18px; display: grid; gap: 18px; }\n .graph-wrap { overflow-x: auto; border: 1px solid var(--line); border-radius: 8px; background: #fbfdff; padding: 8px; }\n svg.agent-graph { width: 100%; min-width: 520px; max-height: 240px; }\n .event-list { margin: 0; padding-left: 20px; }\n .event-list li { margin: 7px 0; }\n details.agent-stream { padding: 0; }\n details.agent-stream > summary { cursor: pointer; padding: 12px 14px; font-weight: 700; }\n details.agent-stream[open] > summary { border-bottom: 1px solid var(--line); }\n details.agent-stream .stream-body { padding: 12px 14px; }\n table { width: 100%; border-collapse: collapse; font-size: 14px; }\n th, td { text-align: left; border-bottom: 1px solid var(--line); padding: 8px; vertical-align: top; }\n th { color: var(--muted); font-size: 12px; text-transform: uppercase; letter-spacing: .04em; }\n code { font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, monospace; font-size: 13px; background: #edf2f7; padding: 1px 4px; border-radius: 4px; }\n @media (max-width: 860px) { .grid { grid-template-columns: 1fr; } header { padding-top: 22px; } }\n </style>\n</head>\n<body>\n <header>\n <h1>Agent Studio</h1>\n <p>Static local export generated from Agent Kit JSON and JSONL files. It embeds a redacted snapshot at export time and does not connect to a server, database, or model API.</p>\n <div class=\"metrics\">\n <div class=\"metric\"><strong>${sessionCount}</strong><span>sessions</span></div>\n <div class=\"metric\"><strong>${correctionCount}</strong><span>active correction files</span></div>\n <div class=\"metric\"><strong>${escapeHtml(data.generatedAt)}</strong><span>generated at</span></div>\n </div>\n </header>\n <main>\n <section>\n <h2>Project Context</h2>\n ${renderContextSummary(data)}\n </section>\n <div class=\"grid\">\n <aside class=\"stack\">\n <section>\n <h2>Corrections</h2>\n ${renderCorrections(data)}\n </section>\n <section>\n <h2>Session Index</h2>\n ${renderSessionIndexLinks(data.sessions)}\n </section>\n </aside>\n <div class=\"stack\">\n ${data.sessions.map(renderSessionSection).join(\"\\n\")}\n </div>\n </div>\n </main>\n <script type=\"application/json\" id=\"agent-studio-data\">${safeJsonForHtml(data)}</script>\n</body>\n</html>\n`;\n}\n\nfunction renderContextSummary(data: StaticStudioData): string {\n const context = data.context as\n | {\n projectName?: string;\n productSummary?: string;\n primaryAudience?: string;\n qualityTarget?: string;\n architecture?: { frameworks?: string[]; testTools?: string[]; hasSupabase?: boolean };\n openQuestions?: string[];\n }\n | null;\n if (!context) return `<p class=\"muted\">No project context found. Run <code>agent-kit onboard</code> or <code>agent-kit init --guided</code>.</p>`;\n return `<div class=\"stack\">\n <p><strong>${escapeHtml(context.projectName || \"TBD\")}</strong> ${escapeHtml(context.productSummary || \"No product summary recorded.\")}</p>\n <p class=\"muted\">Audience: ${escapeHtml(context.primaryAudience || \"TBD\")} | Quality target: ${escapeHtml(context.qualityTarget || \"baseline-setup\")}</p>\n <p>${renderPills([...(context.architecture?.frameworks ?? []), ...(context.architecture?.testTools ?? []), context.architecture?.hasSupabase ? \"supabase\" : \"\"].filter(Boolean))}</p>\n ${context.openQuestions?.length ? `<h3>Open Questions</h3>${renderList(context.openQuestions)}` : \"\"}\n <p class=\"path\">Source: ${CONTEXT_JSON}${data.contextMarkdown ? ` and ${CONTEXT_MD}` : \"\"}</p>\n </div>`;\n}\n\nfunction renderCorrections(data: StaticStudioData): string {\n const rules = [...data.corrections.project, ...data.corrections.agent].filter((rule) => rule.status === \"active\");\n if (rules.length === 0) return `<p class=\"muted\">No active durable corrections recorded.</p>`;\n return `<table>\n <thead><tr><th>Scope</th><th>Agent</th><th>Correction</th></tr></thead>\n <tbody>\n ${rules\n .map((rule) => `<tr><td>${escapeHtml(rule.scope)}</td><td>${escapeHtml(rule.agentId ?? rule.appliesToAgents?.join(\", \") ?? \"all\")}</td><td>${escapeHtml(rule.text)}</td></tr>`)\n .join(\"\\n\")}\n </tbody>\n </table>`;\n}\n\nfunction renderSessionIndexLinks(sessions: StaticStudioSession[]): string {\n if (sessions.length === 0) return `<p class=\"muted\">No sessions recorded yet.</p>`;\n return `<ol class=\"event-list\">${sessions.map((item) => `<li><a href=\"#${htmlId(item.session.sessionId)}\">${escapeHtml(item.session.title)}</a><br><span class=\"muted\">${escapeHtml(item.session.status)} | ${escapeHtml(item.session.workflowId)}</span></li>`).join(\"\")}</ol>`;\n}\n\nfunction renderSessionSection(item: StaticStudioSession): string {\n const verification = item.events.filter((event) => event.type === \"verification_recorded\");\n const corrections = item.events.filter((event) => event.type === \"human_correction\");\n const artifacts = item.events.filter((event) => event.type === \"artifact_recorded\");\n return `<section class=\"session-card\" id=\"${htmlId(item.session.sessionId)}\">\n <div class=\"session-head\">\n <h2>${escapeHtml(item.session.title)}</h2>\n <div>\n <span class=\"pill\">${escapeHtml(item.session.status)}</span>\n <span class=\"pill\">${escapeHtml(item.session.workflowId)}</span>\n <span class=\"pill\">${item.events.length} events</span>\n </div>\n </div>\n <div class=\"session-body\">\n <p class=\"muted\">Request: ${escapeHtml(item.session.request)}</p>\n <p class=\"path\">Markdown: ${escapeHtml(item.indexPath)} | ${escapeHtml(item.transcriptPath)}</p>\n <div class=\"graph-wrap\">${renderSvgGraph(item.events, item.agents)}</div>\n <div>\n <h3>Agent Streams</h3>\n ${renderAgentStreams(item)}\n </div>\n <div class=\"grid\">\n <div>\n <h3>Verification</h3>\n ${verification.length ? renderEventList(verification) : `<p class=\"muted\">No verification recorded.</p>`}\n </div>\n <div>\n <h3>Corrections And Artifacts</h3>\n ${corrections.length || artifacts.length ? renderEventList([...corrections, ...artifacts]) : `<p class=\"muted\">No corrections or artifacts recorded.</p>`}\n </div>\n </div>\n </div>\n </section>`;\n}\n\nfunction renderAgentStreams(item: StaticStudioSession): string {\n if (item.events.length === 0) return `<p class=\"muted\">No events recorded.</p>`;\n const byAgent = new Map<string, SessionEventContractValue[]>();\n for (const event of item.events) {\n const agent = event.agentId ?? event.fromAgentId ?? \"session\";\n byAgent.set(agent, [...(byAgent.get(agent) ?? []), event]);\n }\n return [...byAgent.entries()]\n .map(([agent, events]) => `<details class=\"agent-stream\"><summary>${escapeHtml(agent)} (${events.length})</summary><div class=\"stream-body\">${renderEventList(events)}</div></details>`)\n .join(\"\\n\");\n}\n\nfunction renderEventList(events: SessionEventContractValue[]): string {\n return `<ol class=\"event-list\">${events.map((event) => `<li><time>${escapeHtml(event.createdAt)}</time> <code>${escapeHtml(event.type)}</code>: ${escapeHtml(eventDetail(event))}</li>`).join(\"\\n\")}</ol>`;\n}\n\nfunction eventDetail(event: SessionEventContractValue): string {\n if (event.type === \"handoff\") return `${event.fromAgentId ?? \"unknown\"} -> ${event.toAgentId ?? \"unknown\"}: ${event.decision ?? \"\"} Risk: ${event.risk ?? \"\"}`;\n if (event.type === \"required_output_updated\") return `${event.outputName ?? \"output\"}: ${event.outputStatus ?? \"unknown\"}`;\n return event.text ?? event.decision ?? event.command ?? event.artifactPath ?? event.status ?? \"\";\n}\n\nfunction renderSvgGraph(events: SessionEventContractValue[], knownAgents: string[]): string {\n const handoffs = events.filter((event) => event.type === \"handoff\");\n const agents = unique([...knownAgents, ...handoffs.flatMap((event) => [event.fromAgentId, event.toAgentId].filter(Boolean) as string[])]);\n if (agents.length === 0) {\n return `<svg class=\"agent-graph\" viewBox=\"0 0 520 120\" role=\"img\" aria-label=\"No agent handoffs recorded\"><text x=\"24\" y=\"62\" fill=\"#52606d\">No handoffs recorded yet.</text></svg>`;\n }\n const width = Math.max(520, agents.length * 180);\n const y = 78;\n const positions = new Map(agents.map((agent, index) => [agent, { x: 74 + index * 170, y }]));\n const edges = handoffs\n .map((event) => {\n const from = positions.get(event.fromAgentId ?? \"\");\n const to = positions.get(event.toAgentId ?? \"\");\n if (!from || !to) return \"\";\n return `<line x1=\"${from.x + 34}\" y1=\"${from.y}\" x2=\"${to.x - 34}\" y2=\"${to.y}\" stroke=\"#7c3aed\" stroke-width=\"2\" marker-end=\"url(#arrow)\" />`;\n })\n .join(\"\\n\");\n const nodes = agents\n .map((agent) => {\n const position = positions.get(agent);\n if (!position) return \"\";\n return `<g><circle cx=\"${position.x}\" cy=\"${position.y}\" r=\"34\" fill=\"#ccfbf1\" stroke=\"#0f766e\" stroke-width=\"2\" /><text x=\"${position.x}\" y=\"${position.y + 56}\" text-anchor=\"middle\" fill=\"#1f2933\" font-size=\"12\">${escapeSvgText(agent)}</text></g>`;\n })\n .join(\"\\n\");\n return `<svg class=\"agent-graph\" viewBox=\"0 0 ${width} 150\" role=\"img\" aria-label=\"Agent handoff graph\">\n <defs><marker id=\"arrow\" markerWidth=\"10\" markerHeight=\"10\" refX=\"9\" refY=\"3\" orient=\"auto\" markerUnits=\"strokeWidth\"><path d=\"M0,0 L0,6 L9,3 z\" fill=\"#7c3aed\" /></marker></defs>\n ${edges}\n ${nodes}\n </svg>`;\n}\n\nfunction renderPills(values: string[]): string {\n const cleaned = values.filter(Boolean);\n return cleaned.length ? cleaned.map((value) => `<span class=\"pill\">${escapeHtml(value)}</span>`).join(\"\") : `<span class=\"muted\">No stack signals recorded.</span>`;\n}\n\nfunction renderList(values: string[]): string {\n return `<ul>${values.map((value) => `<li>${escapeHtml(value)}</li>`).join(\"\")}</ul>`;\n}\n\nfunction htmlId(value: string): string {\n return `session-${safeSlug(value)}`;\n}\n\nfunction escapeHtml(value: string | number | undefined | null): string {\n return String(value ?? \"\")\n .replace(/&/g, \"&\")\n .replace(/</g, \"<\")\n .replace(/>/g, \">\")\n .replace(/\"/g, \""\")\n .replace(/'/g, \"'\");\n}\n\nfunction escapeSvgText(value: string): string {\n return escapeHtml(value).slice(0, 42);\n}\n\nfunction safeJsonForHtml(value: unknown): string {\n return JSON.stringify(value)\n .replace(/&/g, \"\\\\u0026\")\n .replace(/</g, \"\\\\u003c\")\n .replace(/>/g, \"\\\\u003e\");\n}\n"],"mappings":"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","names":["existsSync","join","existsSync","dirname","join","resolve","join","existsSync","existsSync","readFileSync","join","context","existsSync","readFileSync","basename","dirname","join","join","existsSync","readFileSync","dirname","basename","existsSync","readFileSync","join","join","existsSync","readFileSync","join","existsSync","readFileSync","sessionDir","eventsPath","session","existsSync","readFileSync","join","existsSync","readFileSync","join","readFileSync","join","z","join","readFileSync","existsSync","mkdirSync","readFileSync","join","existsSync","readFileSync","join","join","existsSync","readFileSync","join","existsSync","readFileSync","mkdirSync","existsSync","readFileSync","readdirSync","join","join","existsSync","readdirSync","readFileSync","existsSync","readFileSync","join","join","existsSync","readFileSync","context","existsSync","readFileSync","readdirSync","statSync","join","session","join","existsSync","readdirSync","statSync","readFileSync","correction","context","session"]}
|