@appsforgood/next-supabase-kit 0.1.6 → 0.1.8

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/dist/index.js.map CHANGED
@@ -1 +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/adapter-validate.ts","../src/config/defaults.ts","../src/studio/shared.ts","../src/install/audit.ts","../src/config/contracts.ts","../src/studio/onboarding-state.ts","../src/studio/context.ts","../src/studio/wizard/steps.ts","../src/install/install.ts","../src/install/ide-activate.ts","../src/install/roster-adapters.ts","../src/studio/wizard/roster.ts","../src/install/assistant-adapters-table.ts","../src/install/diff.ts","../src/install/update.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/session.ts","../src/studio/export.ts","../src/studio/setup-browser.ts","../src/studio/setup-init.ts","../src/studio/setup-server.ts","../src/studio/setup-form.ts","../src/studio/wizard/checklist.ts","../src/studio/wizard/agent-briefs.ts","../src/studio/wizard/wizard-draft.ts","../src/studio/wizard/drafts.ts","../src/studio/office/render.ts","../src/studio/office/map.ts","../src/studio/office/section-map.ts","../src/studio/wizard/render.ts","../src/studio/agentic-level.ts","../src/studio/studio-server.ts","../src/studio/session-checkpoint.ts","../src/cli/output.ts"],"sourcesContent":["import { existsSync, readFileSync, writeFileSync } from \"node:fs\";\nimport { join } from \"node:path\";\nimport { Command } from \"commander\";\nimport type { AuditReadinessLevel } from \"../config/types.js\";\nimport { addSkill, listSkills } from \"../install/add-skill.js\";\nimport { validateAdapter, validatePackage, type AdapterValidationTarget, type ValidationReport } from \"../install/adapter-validate.js\";\nimport { READINESS_ORDER, createAuditReport, isAuditReadinessLevel, meetsMinimumReadiness } from \"../install/audit.js\";\nimport { diffProject } from \"../install/diff.js\";\nimport { initProject } from \"../install/install.js\";\nimport { updateProject } from \"../install/update.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 { getSetupProgress, onboardingStateExists } from \"../studio/onboarding-state.js\";\nimport { openBrowser } from \"../studio/setup-browser.js\";\nimport { promptStartSetup } from \"../studio/setup-init.js\";\nimport { startSetupServer } from \"../studio/setup-server.js\";\nimport { startStudioServer } from \"../studio/studio-server.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 { checkpointSessionFromFile } from \"../studio/session-checkpoint.js\";\nimport { readTextFile } from \"../studio/shared.js\";\nimport { PACKAGE_VERSION } from \"../config/defaults.js\";\nimport { detail, fail, fileGroup, heading, levelLabel, line, listItem, printJson, style } from \"./output.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.name(\"agent-kit\").description(\"Next.js + Supabase agent, skill, docs, design, and research kit.\").version(PACKAGE_VERSION);\n\ninterface InitCommandOptions {\n stack: \"next-supabase\";\n force?: boolean;\n guided?: boolean;\n json?: boolean;\n dryRun?: boolean;\n activate?: string[];\n setup?: boolean;\n noSetup?: boolean;\n open?: boolean;\n}\n\nasync function runGuidedContextPrompts(cwd: string): Promise<void> {\n // Interactive prompts only make sense on a TTY; CI and scripts get the scan-based fallback.\n if (!process.stdin.isTTY || !process.stdout.isTTY) return;\n\n const clack = await import(\"@clack/prompts\");\n clack.intro(\"agent-kit guided setup\");\n\n const questions = [\n { key: \"productSummary\", message: \"What does this product do, in one concrete paragraph?\" },\n { key: \"primaryAudience\", message: \"Who is the primary user or buyer?\" },\n { key: \"authModel\", message: \"What authentication model should agents preserve?\" },\n { key: \"tenantModel\", message: \"Is this single-user, team, tenant, marketplace, admin, or public content?\" }\n ] as const;\n\n const answers: Record<string, string> = {};\n for (const question of questions) {\n const answer = await clack.text({ message: question.message, placeholder: \"Leave empty to answer later\" });\n if (clack.isCancel(answer)) {\n clack.cancel(\"Guided setup cancelled. Context files were still created; answer later with agent-kit context ask.\");\n return;\n }\n if (typeof answer === \"string\" && answer.trim()) answers[question.key] = answer.trim();\n }\n\n if (Object.keys(answers).length > 0) {\n const contextPath = join(cwd, \".agent-kit\", \"project-context.json\");\n if (existsSync(contextPath)) {\n const context = JSON.parse(readFileSync(contextPath, \"utf8\")) as Record<string, unknown>;\n Object.assign(context, answers);\n writeFileSync(contextPath, `${JSON.stringify(context, null, 2)}\\n`);\n renderProjectContext(cwd);\n }\n }\n\n clack.outro(\"Project context saved. Run agent-kit audit next.\");\n}\n\nasync function runSetupServer(options: { port: number; host: string; open?: boolean }): Promise<void> {\n const handle = await startSetupServer({\n cwd: process.cwd(),\n port: options.port,\n host: options.host\n });\n if (handle.portFallback) {\n console.warn(`Port ${handle.requestedPort} is in use — an old setup server may still be running. Kill it and restart to load the latest Agent Office.`);\n console.warn(`Using fallback port ${handle.port} instead.`);\n }\n console.log(`Agent Kit v${PACKAGE_VERSION} — ${handle.defaultView} view at ${handle.url}/`);\n console.log(`Pixel office (default): ${handle.url}/ | Form fallback: ${handle.url}/wizard`);\n console.log(\"Pick Quick, Standard, or Complete on first visit. Press Ctrl+C to stop.\");\n if (options.open) void openBrowser(`${handle.url}/`);\n await new Promise<void>((resolve) => {\n const shutdown = () => {\n void handle.close().finally(resolve);\n };\n process.once(\"SIGINT\", shutdown);\n process.once(\"SIGTERM\", shutdown);\n });\n}\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(\"--activate <targets...>\", \"Promote IDE/runtime adapters: cursor, claude, codex, copilot, antigravity, or all.\")\n .option(\"--guided\", \"Also create local project context files (interactive on a terminal, scan-based otherwise).\")\n .option(\"--dry-run\", \"Preview what init would create or conflict on without writing files.\")\n .option(\"--json\", \"Print machine-readable JSON output.\")\n .option(\"--setup\", \"Start the setup wizard after install.\")\n .option(\"--no-setup\", \"Skip the post-install setup wizard prompt.\")\n .option(\"--open\", \"Open the setup wizard in your default browser.\")\n .action(async (options: InitCommandOptions) => {\n const cwd = process.cwd();\n\n if (options.dryRun) {\n const preview = diffProject(cwd, options.stack);\n if (options.json) {\n printJson({ dryRun: true, preview: preview.preview, missing: preview.missing, changed: preview.changed, unchanged: preview.unchanged });\n return;\n }\n heading(\"agent-kit init --dry-run\");\n fileGroup(\"Would create\", preview.preview.wouldCreate);\n fileGroup(\"Would write conflicts for\", preview.preview.wouldWriteConflicts);\n fileGroup(\"Already up to date\", preview.unchanged);\n line();\n line(`Run ${style.bold(\"agent-kit init\")} to apply.`);\n return;\n }\n\n const result = initProject({\n cwd,\n stack: options.stack,\n force: Boolean(options.force),\n ...(options.activate ? { activate: options.activate } : {})\n });\n const context = options.guided ? initProjectContext(cwd) : null;\n\n if (options.json) {\n printJson(context ? { install: result, context } : result);\n } else {\n heading(`agent-kit ${PACKAGE_VERSION} installed (stack: ${options.stack})`);\n fileGroup(\"Created\", result.copied);\n fileGroup(\"Unchanged\", result.unchanged);\n fileGroup(\"Overwritten\", result.overwritten);\n if (result.conflicts.length > 0) {\n fileGroup(\"Conflicts (local file kept, template saved for review)\", result.conflicts);\n detail(\"Review .agent-kit/conflicts/ before adopting template changes.\");\n }\n line();\n line(`Manifest: ${result.manifestPath}`);\n }\n\n if (options.guided && context) {\n if (!options.json) {\n line();\n heading(\"Project context\");\n line(`Context: ${context.contextPath}`);\n if (context.openQuestions.length > 0) {\n line(\"Open questions:\");\n for (const question of context.openQuestions) listItem(question);\n }\n }\n await runGuidedContextPrompts(cwd);\n }\n\n if (!options.json) {\n line();\n line(`Next: run ${style.bold(\"agent-kit audit\")} to check readiness.`);\n }\n\n const shouldPrompt = !options.noSetup && !options.json;\n const startWizard = Boolean(options.setup) || (shouldPrompt && (await promptStartSetup(true)));\n if (startWizard) {\n await runSetupServer({ port: 9321, host: \"127.0.0.1\", open: Boolean(options.open) });\n }\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 fail(`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 printJson(report);\n } else {\n const readinessStyle = report.summary.fail > 0 ? style.fail : report.summary.warn > 0 ? style.warn : style.pass;\n line(`${style.bold(\"READINESS\")} ${readinessStyle(report.readiness.level)}: ${report.readiness.summary}`);\n line(`${style.bold(\"SUMMARY\")} pass=${report.summary.pass} warn=${report.summary.warn} fail=${report.summary.fail}`);\n if (report.readiness.nextActions.length > 0) {\n line(style.bold(\"NEXT ACTIONS\"));\n for (const action of report.readiness.nextActions) listItem(action);\n }\n line();\n for (const finding of report.findings) {\n line(`${levelLabel(finding.level)} ${finding.area}: ${finding.message}`);\n if (finding.remediation) detail(`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 .option(\"--json\", \"Print machine-readable JSON output.\")\n .action((options: { json?: boolean }) => {\n const result = diffProject(process.cwd());\n if (options.json) {\n printJson(result);\n return;\n }\n heading(\"agent-kit diff\");\n fileGroup(\"Missing (update would create)\", result.missing);\n fileGroup(\"Changed locally (update would write conflicts)\", result.changed);\n fileGroup(\"Unchanged\", result.unchanged);\n line();\n line(`Agent roster: ${result.agentRoster}`);\n line(`Model routing: ${result.modelRouting}`);\n if (result.libraryFolders.missing.length > 0) {\n line(`Missing library folders: ${result.libraryFolders.missing.join(\", \")}`);\n }\n line();\n line(`Next: run ${style.bold(\"agent-kit update --dry-run\")} to preview the exact per-file plan.`);\n });\n\nprogram\n .command(\"update\")\n .description(\"Update installed templates: pristine docs are refreshed, local edits are preserved, and template conflicts are written for review.\")\n .option(\"--force\", \"Overwrite locally customized docs with the current templates.\")\n .option(\"--dry-run\", \"Report what would change without writing any files.\")\n .option(\"--json\", \"Print machine-readable JSON output.\")\n .action((options: { force?: boolean; dryRun?: boolean; json?: boolean }) => {\n const result = updateProject({ cwd: process.cwd(), force: Boolean(options.force), dryRun: Boolean(options.dryRun) });\n if (options.json) {\n printJson(result);\n return;\n }\n\n heading(result.dryRun ? \"agent-kit update --dry-run\" : \"agent-kit update\");\n const byAction = (action: string) => result.files.filter((file) => file.action === action).map((file) => file.target);\n fileGroup(result.dryRun ? \"Would create\" : \"Created\", byAction(\"created\"));\n fileGroup(result.dryRun ? \"Would update (pristine)\" : \"Updated (pristine)\", byAction(\"updated\"));\n fileGroup(\"Kept local customizations\", byAction(\"kept-local\"));\n fileGroup(result.dryRun ? \"Would overwrite\" : \"Overwritten\", byAction(\"overwritten\"));\n const conflicts = result.files.filter((file) => file.action === \"conflict\");\n if (conflicts.length > 0) {\n line(`${style.bold(\"Conflicts\")} (${conflicts.length})`);\n for (const file of conflicts) {\n line(` ${file.target}${file.conflictPath ? ` -> ${file.conflictPath}` : \"\"}`);\n }\n detail(\"Local files were kept. Review the conflict copies before adopting template changes.\");\n }\n detail(`unchanged: ${result.summary.unchanged} file(s) already match the current templates`);\n if (!result.dryRun) {\n line();\n line(`Library folders refreshed: ${result.libraryFoldersRefreshed.length}`);\n line(`Manifest: ${result.manifestPath}`);\n }\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 .option(\"--dry-run\", \"Report what would happen without writing.\")\n .option(\"--json\", \"Print machine-readable JSON output.\")\n .action((name: string, options: { force?: boolean; dryRun?: boolean; json?: boolean }) => {\n const result = addSkill(process.cwd(), name, { force: Boolean(options.force), dryRun: Boolean(options.dryRun) });\n if (options.json) {\n printJson(result);\n return;\n }\n line(`${result.action}: ${result.target}${result.conflictPath ? ` -> ${result.conflictPath}` : \"\"}`);\n if (options.dryRun) detail(\"dry run: no files were written\");\n });\n\nprogram\n .command(\"doctor\")\n .description(\"Validate local CLI runtime prerequisites.\")\n .option(\"--json\", \"Print machine-readable JSON output.\")\n .action((options: { json?: boolean }) => {\n const cwd = process.cwd();\n const report = {\n version: PACKAGE_VERSION,\n node: process.version,\n availableSkills: listSkills().length,\n setupProgress: onboardingStateExists(cwd) ? getSetupProgress(cwd) : null,\n status: \"ok\" as const\n };\n if (options.json) {\n printJson(report);\n return;\n }\n heading(\"agent-kit doctor\");\n line(`version: ${report.version}`);\n line(`node: ${report.node}`);\n line(`available skills: ${report.availableSkills}`);\n if (report.setupProgress) {\n line(`setup progress: ${report.setupProgress.percent}% (depth: ${report.setupProgress.depth})`);\n if (!report.setupProgress.quickComplete) {\n detail(\"run agent-kit setup --open to finish project context onboarding.\");\n }\n } else {\n detail(\"run agent-kit init then agent-kit setup to onboard this project.\");\n }\n line(`status: ${style.pass(report.status)}`);\n });\n\nfunction printValidationReport(report: ValidationReport, json?: boolean): void {\n if (json) {\n console.log(JSON.stringify(report, null, 2));\n return;\n }\n console.log(`SUMMARY pass=${report.summary.pass} warn=${report.summary.warn} fail=${report.summary.fail}`);\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\nconst adapter = program.command(\"adapter\").description(\"Validate runtime and IDE adapter assets.\");\n\nadapter\n .command(\"validate [target]\")\n .description(\"Validate adapter assets. Targets: antigravity, cursor, claude, codex, copilot, all.\")\n .option(\"--json\", \"Print machine-readable JSON output.\")\n .action((target: AdapterValidationTarget | undefined, options: { json?: boolean }) => {\n const selected = target ?? \"antigravity\";\n const allowed = new Set([\"antigravity\", \"cursor\", \"claude\", \"codex\", \"copilot\", \"all\"]);\n if (!allowed.has(selected)) {\n console.error(`Invalid adapter target \"${selected}\". Expected one of: ${[...allowed].join(\", \")}.`);\n process.exitCode = 1;\n return;\n }\n const report = validateAdapter(process.cwd(), selected);\n printValidationReport(report, Boolean(options.json));\n if (report.summary.fail > 0) process.exitCode = 1;\n });\n\nconst packageCommand = program.command(\"package\").description(\"Validate package-source release assets.\");\n\npackageCommand\n .command(\"validate\")\n .description(\"Validate package assets, runtime adapters, docs, examples, and source audit behavior.\")\n .option(\"--json\", \"Print machine-readable JSON output.\")\n .action((options: { json?: boolean }) => {\n const report = validatePackage(process.cwd());\n printValidationReport(report, Boolean(options.json));\n if (report.summary.fail > 0) process.exitCode = 1;\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 .option(\"--json\", \"Print machine-readable JSON output.\")\n .action((options: { json?: boolean }) => {\n const result = initProjectContext(process.cwd());\n if (options.json) {\n printJson(result);\n return;\n }\n heading(\"agent-kit onboard\");\n line(`Context: ${result.contextPath}`);\n line(`Markdown: ${result.markdownPath}`);\n if (result.openQuestions.length > 0) {\n line(\"Open questions:\");\n for (const question of result.openQuestions) listItem(question);\n }\n });\n\nprogram\n .command(\"setup\")\n .description(\"Start the local Agent Office setup view for project context.\")\n .option(\"--port <number>\", \"Port to listen on.\", (value) => Number.parseInt(value, 10), 9321)\n .option(\"--host <host>\", \"Host to bind.\", \"127.0.0.1\")\n .option(\"--open\", \"Open the wizard in your default browser.\")\n .option(\"--status\", \"Print setup progress and exit.\")\n .action(async (options: { port: number; host: string; open?: boolean; status?: boolean }) => {\n const cwd = process.cwd();\n if (options.status) {\n const progress = getSetupProgress(cwd);\n console.log(JSON.stringify(progress, null, 2));\n process.exitCode = progress.quickComplete ? 0 : 1;\n return;\n }\n await runSetupServer({ port: options.port, host: options.host, open: Boolean(options.open) });\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 .option(\"--json\", \"Print machine-readable JSON output.\")\n .action((options: { json?: boolean }) => {\n const result = initProjectContext(process.cwd());\n if (options.json) {\n printJson(result);\n return;\n }\n line(`Context written: ${result.contextPath}`);\n if (result.openQuestions.length > 0) {\n line(\"Open questions:\");\n for (const question of result.openQuestions) listItem(question);\n }\n });\n\ncontext\n .command(\"scan\")\n .description(\"Print inferred project context without writing it.\")\n .action(() => {\n printJson(scanProjectContext(process.cwd()));\n });\n\ncontext\n .command(\"ask\")\n .description(\"Print unanswered high-value project context questions.\")\n .action(() => {\n const result = initProjectContext(process.cwd());\n if (result.openQuestions.length === 0) {\n line(\"No open project-context questions.\");\n return;\n }\n line(\"Answer these in the web setup wizard with: agent-kit setup --open\");\n detail(\"Check progress with: agent-kit setup --status\");\n for (const question of result.openQuestions) listItem(question);\n });\n\ncontext\n .command(\"render\")\n .description(\"Render .agent-kit/project-context.md from project-context.json.\")\n .option(\"--json\", \"Print machine-readable JSON output.\")\n .action((options: { json?: boolean }) => {\n const result = renderProjectContext(process.cwd());\n if (options.json) {\n printJson(result);\n return;\n }\n line(`Rendered: ${result.markdownPath}`);\n });\n\ncontext\n .command(\"validate\")\n .description(\"Validate .agent-kit/project-context.json.\")\n .option(\"--json\", \"Print machine-readable JSON output.\")\n .action((options: { json?: boolean }) => {\n const result = validateProjectContext(process.cwd());\n if (options.json) {\n printJson(result);\n return;\n }\n line(`Valid: ${result.contextPath}`);\n if (result.openQuestions.length > 0) {\n line(\"Open questions:\");\n for (const question of result.openQuestions) listItem(question);\n }\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 .option(\"--json\", \"Print machine-readable JSON output.\")\n .action((titleParts: string[], options: { workflow: string; request?: string; json?: boolean }) => {\n const title = titleParts.join(\" \");\n const result = startSession(process.cwd(), {\n title,\n workflowId: options.workflow,\n ...(options.request ? { request: options.request } : {})\n });\n if (options.json) {\n printJson(result);\n return;\n }\n line(`Session started: ${result.sessionId}`);\n line(`Path: ${result.sessionPath}`);\n });\n\nsession\n .command(\"list\")\n .description(\"List local council sessions.\")\n .option(\"--json\", \"Print machine-readable JSON output.\")\n .action((options: { json?: boolean }) => {\n const sessions = listSessions(process.cwd());\n if (options.json) {\n printJson(sessions);\n return;\n }\n if (sessions.length === 0) {\n line(\"No sessions yet. Start one with agent-kit session start <title>.\");\n return;\n }\n for (const item of sessions) {\n line(`${item.sessionId} [${item.status}] ${item.title}`);\n }\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 .option(\"--json\", \"Print machine-readable JSON output.\")\n .action((textParts: string[], options: { agent: string; json?: boolean }) => {\n const result = recordNote(process.cwd(), options.agent, textParts.join(\" \"));\n if (options.json) printJson(result);\n else line(`Recorded note from ${options.agent}.`);\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 .option(\"--json\", \"Print machine-readable JSON output.\")\n .action((textParts: string[], options: { agent: string; risk?: string; json?: boolean }) => {\n const result = recordDecision(process.cwd(), options.agent, textParts.join(\" \"), options.risk);\n if (options.json) printJson(result);\n else line(`Recorded decision from ${options.agent}.`);\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 .option(\"--json\", \"Print machine-readable JSON output.\")\n .action((options: { from: string; to: string; decision: string; risk: string; evidence?: string[]; json?: boolean }) => {\n const result = 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 if (options.json) printJson(result);\n else line(`Recorded handoff ${options.from} -> ${options.to}.`);\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 .option(\"--json\", \"Print machine-readable JSON output.\")\n .action((textParts: string[], options: { agent?: string; scope: \"session\" | \"project\" | \"agent\" | \"upstream-proposal\"; json?: boolean }) => {\n const result = recordCorrection(process.cwd(), {\n ...(options.agent ? { agentId: options.agent } : {}),\n scope: options.scope,\n text: textParts.join(\" \")\n });\n if (options.json) printJson(result);\n else line(`Recorded ${options.scope}-scoped correction.`);\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 .option(\"--json\", \"Print machine-readable JSON output.\")\n .action((options: { file: string; note?: string; json?: boolean }) => {\n const result = recordArtifact(process.cwd(), options.file, options.note);\n if (options.json) printJson(result);\n else line(`Recorded artifact ${options.file}.`);\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 .option(\"--json\", \"Print machine-readable JSON output.\")\n .action((options: { command: string; result: \"pass\" | \"fail\" | \"skipped\"; notes?: string; json?: boolean }) => {\n const result = recordVerification(process.cwd(), options.command, options.result, options.notes);\n if (options.json) printJson(result);\n else line(`Recorded verification (${options.result}): ${options.command}`);\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 .option(\"--json\", \"Print machine-readable JSON output.\")\n .action((nameParts: string[], options: { status: string; evidence?: string; json?: boolean }) => {\n if (!isRequiredOutputStatus(options.status)) {\n fail(`Invalid --status value \"${options.status}\". Expected one of: ${requiredOutputStatuses.join(\", \")}.`);\n process.exitCode = 1;\n return;\n }\n const result = recordRequiredOutput(process.cwd(), nameParts.join(\" \"), options.status, options.evidence);\n if (options.json) printJson(result);\n else line(`Marked \"${nameParts.join(\" \")}\" as ${options.status}.`);\n });\n\nsession\n .command(\"render\")\n .description(\"Render active session Markdown files.\")\n .option(\"--json\", \"Print machine-readable JSON output.\")\n .action((options: { json?: boolean }) => {\n const result = renderActiveSession(process.cwd());\n if (options.json) printJson(result);\n else line(`Rendered session ${result.sessionId} at ${result.sessionPath}.`);\n });\n\nsession\n .command(\"checkpoint\")\n .description(\"Apply a batch of session events from a JSON or Markdown checkpoint file.\")\n .requiredOption(\"--file <file>\", \"Checkpoint file (.json or .md) relative to the project root.\")\n .action((options: { file: string }) => {\n console.log(JSON.stringify(checkpointSessionFromFile(process.cwd(), options.file), 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 .option(\"--json\", \"Print machine-readable JSON output.\")\n .action((options: { status: \"planned\" | \"in-progress\" | \"blocked\" | \"complete\"; json?: boolean }) => {\n const result = closeSession(process.cwd(), options.status);\n if (options.json) printJson(result);\n else line(`Closed session ${result.sessionId} with status ${options.status}.`);\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 .option(\"--json\", \"Print machine-readable JSON output.\")\n .action((options: { json?: boolean }) => {\n const corrections = listCorrections(process.cwd());\n if (options.json) {\n printJson(corrections);\n return;\n }\n const rules = [...corrections.project, ...corrections.agent, ...corrections.upstream];\n if (rules.length === 0) {\n line(\"No correction rules yet. Add one with agent-kit correction add <text>.\");\n return;\n }\n for (const rule of rules) {\n line(`${rule.id} [${rule.status}] (${rule.scope}) ${rule.text}`);\n }\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 .option(\"--json\", \"Print machine-readable JSON output.\")\n .action((textParts: string[], options: { scope: \"project\" | \"agent\" | \"upstream-proposal\"; agent?: string; json?: boolean }) => {\n const result = addCorrection(process.cwd(), {\n scope: options.scope,\n ...(options.agent ? { agentId: options.agent } : {}),\n text: textParts.join(\" \")\n });\n if (options.json) printJson(result);\n else line(`Added ${options.scope}-scoped correction ${result.id}.`);\n });\n\ncorrection\n .command(\"apply [id]\")\n .description(\"Mark a correction rule active and reviewed.\")\n .option(\"--id <id>\", \"Correction id.\")\n .option(\"--json\", \"Print machine-readable JSON output.\")\n .action((idArgument: string | undefined, options: { id?: string; json?: boolean }) => {\n const id = idArgument ?? options.id;\n if (!id) {\n fail(\"Missing correction id. Use agent-kit correction apply <id> or --id <id>.\");\n process.exitCode = 1;\n return;\n }\n const result = applyCorrection(process.cwd(), id);\n if (options.json) printJson(result);\n else line(`Applied correction ${id}.`);\n });\n\ncorrection\n .command(\"retire <id>\")\n .description(\"Retire a correction rule.\")\n .requiredOption(\"--reason <reason>\", \"Reason for retirement.\")\n .option(\"--json\", \"Print machine-readable JSON output.\")\n .action((id: string, options: { reason: string; json?: boolean }) => {\n const result = retireCorrection(process.cwd(), id, options.reason);\n if (options.json) printJson(result);\n else line(`Retired correction ${id}: ${options.reason}`);\n });\n\ncorrection\n .command(\"propose-upstream <id>\")\n .description(\"Create an upstream proposal from a project or agent correction.\")\n .option(\"--json\", \"Print machine-readable JSON output.\")\n .action((id: string, options: { json?: boolean }) => {\n const result = proposeCorrectionUpstream(process.cwd(), id);\n if (options.json) printJson(result);\n else line(`Created upstream proposal from correction ${id}.`);\n });\n\nconst studio = program.command(\"studio\").description(\"Export and serve local Agent Studio views.\");\n\nasync function runStudioServer(options: { port: number; host: string; open?: boolean }): Promise<void> {\n const handle = await startStudioServer({\n cwd: process.cwd(),\n port: options.port,\n host: options.host\n });\n if (handle.portFallback) {\n console.warn(`Port ${handle.requestedPort} is in use — using fallback port ${handle.port}. Kill the old process to avoid confusion.`);\n }\n console.log(`Agent Kit v${PACKAGE_VERSION} — live studio at ${handle.url}/`);\n console.log(\"SSE: GET /api/events/stream | Press Ctrl+C to stop.\");\n if (options.open) void openBrowser(`${handle.url}/`);\n await new Promise<void>((resolve) => {\n const shutdown = () => {\n void handle.close().finally(resolve);\n };\n process.once(\"SIGINT\", shutdown);\n process.once(\"SIGTERM\", shutdown);\n });\n}\n\nstudio\n .command(\"serve\")\n .description(\"Start localhost live Agent Studio viewer with SSE session events.\")\n .option(\"--port <number>\", \"Port to listen on.\", (value) => Number.parseInt(value, 10), 9331)\n .option(\"--host <host>\", \"Host to bind.\", \"127.0.0.1\")\n .option(\"--open\", \"Open the studio in your default browser.\")\n .action(async (options: { port: number; host: string; open?: boolean }) => {\n await runStudioServer(options);\n });\n\nstudio\n .command(\"export\")\n .description(\"Generate a self-contained static Agent Studio HTML file.\")\n .option(\"--json\", \"Print machine-readable JSON output.\")\n .action((options: { json?: boolean }) => {\n const result = exportStaticStudio(process.cwd());\n if (options.json) {\n printJson(result);\n return;\n }\n line(`Exported ${result.sessionCount} session(s) to ${result.studioPath}.`);\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 fail(error instanceof Error ? error.message : String(error));\n process.exitCode = 1;\n});\n","import { existsSync, readFileSync } from \"node:fs\";\nimport { join } from \"node:path\";\nimport { copyTextWithConflict, listFilesRecursive, readTextIfExists, sha256, type CopyResult } 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 interface AddSkillResult extends CopyResult {\n dryRun: boolean;\n}\n\nexport function addSkill(cwd: string, skillName: string, options: { force?: boolean; dryRun?: boolean } = {}): AddSkillResult {\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 targetRelativePath = join(\".agent-kit\", \"skills\", normalized);\n\n if (options.dryRun) {\n const existing = readTextIfExists(join(cwd, targetRelativePath));\n const sourceContent = readFileSync(sourcePath, \"utf8\");\n let action: CopyResult[\"action\"];\n if (existing === null) action = \"created\";\n else if (sha256(existing) === sha256(sourceContent)) action = \"unchanged\";\n else action = options.force ? \"overwritten\" : \"conflict\";\n return { action, target: targetRelativePath, dryRun: true };\n }\n\n const result = copyTextWithConflict(sourcePath, cwd, targetRelativePath, {\n force: Boolean(options.force),\n conflictRoot: join(cwd, \".agent-kit\", \"conflicts\")\n });\n\n return { ...result, dryRun: false };\n}\n","import { createHash } from \"node:crypto\";\nimport { cpSync, existsSync, lstatSync, mkdirSync, readFileSync, readdirSync, writeFileSync } 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 } from \"node:fs\";\nimport { join, normalize } from \"node:path\";\nimport {\n ANTIGRAVITY_COMMANDS_SOURCE_DIR,\n ANTIGRAVITY_COMMANDS_TARGET_DIR,\n ANTIGRAVITY_RUNTIME_SKILLS_TARGET_DIR,\n RUNTIME_SKILLS_SOURCE_DIR\n} from \"../config/defaults.js\";\nimport { containsLikelySecret } from \"../studio/shared.js\";\nimport { listFilesRecursive } from \"../utils/fs.js\";\nimport { createAuditReport } from \"./audit.js\";\nimport type { IdeTarget } from \"./ide-activate.js\";\nimport { assistantAdapterRowIsActive } from \"./assistant-adapters-table.js\";\n\nexport type ValidationLevel = \"pass\" | \"warn\" | \"fail\";\nexport type AdapterValidationTarget = IdeTarget | \"all\";\n\nexport interface ValidationFinding {\n level: ValidationLevel;\n area: string;\n message: string;\n remediation?: string;\n}\n\nexport interface ValidationReport {\n target: string;\n summary: Record<ValidationLevel, number>;\n findings: ValidationFinding[];\n}\n\nconst REQUIRED_COMMANDS = [\n \"setup\",\n \"audit\",\n \"plan\",\n \"handoff\",\n \"frontend\",\n \"ui-audit\",\n \"ui-polish\",\n \"layout-cleanup\",\n \"responsive-cleanup\",\n \"accessibility-pass\",\n \"distinctiveness-pass\",\n \"screenshot-critique\",\n \"browser-qa\",\n \"security\",\n \"copy\",\n \"ship\",\n \"upgrade\"\n] as const;\nconst REQUIRED_SOURCE_REFERENCES = [\"AGENTS.md\", \".agent-kit/agent-roster.json\", \"QUALITY_GATES.md\"];\n\ninterface AntigravityLayout {\n mode: \"source\" | \"installed\";\n pluginRoot: string;\n commandsRoot: string;\n runtimeSkillsRoot: string;\n adapterDocPath: string;\n}\n\nfunction summary(findings: ValidationFinding[]): Record<ValidationLevel, number> {\n return {\n pass: findings.filter((finding) => finding.level === \"pass\").length,\n warn: findings.filter((finding) => finding.level === \"warn\").length,\n fail: findings.filter((finding) => finding.level === \"fail\").length\n };\n}\n\nfunction report(target: string, findings: ValidationFinding[]): ValidationReport {\n return { target, summary: summary(findings), findings };\n}\n\nfunction readJson(path: string): unknown {\n try {\n return JSON.parse(readFileSync(path, \"utf8\")) as unknown;\n } catch {\n return null;\n }\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === \"object\" && value !== null;\n}\n\nfunction isSafeRelativePath(path: string): boolean {\n const normalized = normalize(path).replace(/\\\\/g, \"/\");\n if (normalized.startsWith(\"../runtime-skills/\")) return !normalized.slice(\"../runtime-skills/\".length).includes(\"../\");\n return !normalized.startsWith(\"/\") && !normalized.startsWith(\"../\") && !normalized.includes(\"/../\");\n}\n\nfunction findAntigravityLayout(cwd: string): AntigravityLayout | null {\n const sourcePlugin = join(cwd, \"antigravity\", \"plugin.json\");\n if (existsSync(sourcePlugin)) {\n return {\n mode: \"source\",\n pluginRoot: join(cwd, \"antigravity\"),\n commandsRoot: join(cwd, ANTIGRAVITY_COMMANDS_SOURCE_DIR),\n runtimeSkillsRoot: join(cwd, RUNTIME_SKILLS_SOURCE_DIR),\n adapterDocPath: join(cwd, \"assistant-adapters\", \"antigravity.md\")\n };\n }\n\n const installedPlugin = join(cwd, \".antigravity\", \"agent-kit\", \"plugin.json\");\n if (existsSync(installedPlugin)) {\n return {\n mode: \"installed\",\n pluginRoot: join(cwd, \".antigravity\", \"agent-kit\"),\n commandsRoot: join(cwd, ANTIGRAVITY_COMMANDS_TARGET_DIR),\n runtimeSkillsRoot: join(cwd, ANTIGRAVITY_RUNTIME_SKILLS_TARGET_DIR),\n adapterDocPath: join(cwd, \".antigravity\", \"agent-kit\", \"README.md\")\n };\n }\n\n return null;\n}\n\nfunction addSecretFinding(path: string, text: string, findings: ValidationFinding[]): void {\n if (containsLikelySecret(text)) {\n findings.push({\n level: \"fail\",\n area: \"secrets\",\n message: `${path} contains a secret-like value.`,\n remediation: \"Remove tokens, credentials, private URLs, database URLs, and customer data from runtime adapter assets.\"\n });\n }\n}\n\nfunction commandField(text: string, field: string): string | null {\n const match = text.match(new RegExp(`^${field}\\\\s*=\\\\s*\"([^\"]+)\"`, \"m\"));\n return match?.[1] ?? null;\n}\n\nfunction validateAntigravityCommands(layout: AntigravityLayout, findings: ValidationFinding[]): void {\n const files = listFilesRecursive(layout.commandsRoot).filter((file) => file.endsWith(\".toml\"));\n const commandNames = new Set<string>();\n\n for (const command of REQUIRED_COMMANDS) {\n const relativePath = `${command}.toml`;\n const path = join(layout.commandsRoot, relativePath);\n if (!existsSync(path)) {\n findings.push({\n level: \"fail\",\n area: \"commands\",\n message: `Missing Antigravity command ${relativePath}.`,\n remediation: \"Restore the full native command set, including frontend and UI improvement commands.\"\n });\n continue;\n }\n\n const text = readFileSync(path, \"utf8\");\n addSecretFinding(relativePath, text, findings);\n\n const name = commandField(text, \"name\");\n const description = commandField(text, \"description\");\n if (name !== command) {\n findings.push({\n level: \"fail\",\n area: \"commands\",\n message: `${relativePath} has name \"${name ?? \"missing\"}\" instead of \"${command}\".`,\n remediation: \"Keep command filename and command name aligned.\"\n });\n } else {\n commandNames.add(name);\n }\n\n if (!description || description.length < 20) {\n findings.push({\n level: \"fail\",\n area: \"commands\",\n message: `${relativePath} is missing a useful description.`,\n remediation: \"Add a concise runtime-facing description.\"\n });\n }\n\n if (!text.includes('prompt = \"\"\"') || !text.includes(\"Canonical sources:\") || !text.includes(\"Required outputs:\")) {\n findings.push({\n level: \"fail\",\n area: \"commands\",\n message: `${relativePath} is missing the prompt, canonical source list, or required output list.`,\n remediation: \"Every native command must wrap Agent Kit source-of-truth files and name required outputs.\"\n });\n }\n\n if (!REQUIRED_SOURCE_REFERENCES.some((reference) => text.includes(reference))) {\n findings.push({\n level: \"fail\",\n area: \"commands\",\n message: `${relativePath} does not reference Agent Kit source-of-truth files.`,\n remediation: \"Reference AGENTS.md, .agent-kit/agent-roster.json, QUALITY_GATES.md, or another canonical Agent Kit contract.\"\n });\n }\n }\n\n const extras = files.map((file) => file.replace(/\\.toml$/, \"\")).filter((name) => !(REQUIRED_COMMANDS as readonly string[]).includes(name));\n if (extras.length > 0) {\n findings.push({\n level: \"warn\",\n area: \"commands\",\n message: `Antigravity command directory contains extra commands: ${extras.join(\", \")}.`,\n remediation: \"Keep extra commands only if they are documented and validated as runtime adapters.\"\n });\n }\n\n if (commandNames.size === REQUIRED_COMMANDS.length) {\n findings.push({\n level: \"pass\",\n area: \"commands\",\n message: \"Antigravity native command set is complete and structurally valid.\"\n });\n }\n}\n\nfunction validateAntigravityPlugin(layout: AntigravityLayout, findings: ValidationFinding[]): void {\n const pluginPath = join(layout.pluginRoot, \"plugin.json\");\n const plugin = readJson(pluginPath);\n if (!plugin || !isRecord(plugin)) {\n findings.push({\n level: \"fail\",\n area: \"manifest\",\n message: \"Antigravity plugin.json is missing or invalid JSON.\",\n remediation: \"Restore antigravity/plugin.json and run agent-kit adapter validate antigravity.\"\n });\n return;\n }\n\n const commands = Array.isArray(plugin.commands) ? plugin.commands.filter(isRecord) : [];\n const skills = Array.isArray(plugin.skills) ? plugin.skills.filter(isRecord) : [];\n const commandNames = new Set(commands.map((command) => command.name).filter((name): name is string => typeof name === \"string\"));\n const missingCommands = REQUIRED_COMMANDS.filter((command) => !commandNames.has(command));\n\n if (missingCommands.length > 0) {\n findings.push({\n level: \"fail\",\n area: \"manifest\",\n message: `plugin.json is missing command entries: ${missingCommands.join(\", \")}.`,\n remediation: \"List every native command in plugin.json.\"\n });\n } else {\n findings.push({\n level: \"pass\",\n area: \"manifest\",\n message: \"plugin.json lists the required native commands.\"\n });\n }\n\n for (const entry of [...commands, ...skills]) {\n const path = typeof entry.path === \"string\" ? entry.path : \"\";\n if (!path || !isSafeRelativePath(path)) {\n const entryName = typeof entry.name === \"string\" ? entry.name : \"unknown\";\n findings.push({\n level: \"fail\",\n area: \"manifest\",\n message: `plugin.json has an unsafe or missing relative path for ${entryName}.`,\n remediation: \"Use relative paths that stay inside the plugin/runtime skill bundle.\"\n });\n continue;\n }\n const resolved = join(layout.pluginRoot, path);\n if (!existsSync(resolved)) {\n findings.push({\n level: \"fail\",\n area: \"manifest\",\n message: `plugin.json references missing path ${path}.`,\n remediation: \"Restore the referenced command or runtime skill asset.\"\n });\n }\n }\n\n const pluginText = readFileSync(pluginPath, \"utf8\");\n addSecretFinding(\"plugin.json\", pluginText, findings);\n if (Array.isArray(plugin.sourceOfTruth) && plugin.sourceOfTruth.includes(\"AGENTS.md\") && plugin.sourceOfTruth.includes(\".agent-kit/agent-roster.json\")) {\n findings.push({\n level: \"pass\",\n area: \"manifest\",\n message: \"plugin.json points back to Agent Kit source-of-truth contracts.\"\n });\n } else {\n findings.push({\n level: \"fail\",\n area: \"manifest\",\n message: \"plugin.json does not declare Agent Kit source-of-truth contracts.\",\n remediation: \"Keep AGENTS.md and .agent-kit/agent-roster.json as canonical references.\"\n });\n }\n}\n\nfunction validateRuntimeSkills(cwd: string, layout: AntigravityLayout, findings: ValidationFinding[]): void {\n const canonicalSkillsRoot = existsSync(join(cwd, \"skills\")) ? join(cwd, \"skills\") : join(cwd, \".agent-kit\", \"skills\");\n const canonicalSkillNames = listFilesRecursive(canonicalSkillsRoot)\n .filter((file) => file.endsWith(\".md\"))\n .map((file) => file.replace(/\\.md$/, \"\"));\n const runtimeSkillFiles = listFilesRecursive(layout.runtimeSkillsRoot).filter((file) => file.endsWith(\"/SKILL.md\") || file === \"SKILL.md\");\n const runtimeSkillNames = runtimeSkillFiles\n .map((file) => file.split(/[\\\\/]/)[0])\n .filter((value): value is string => typeof value === \"string\" && value.length > 0)\n .filter((value, index, values) => values.indexOf(value) === index);\n\n for (const skillName of canonicalSkillNames) {\n const runtimePath = join(layout.runtimeSkillsRoot, skillName, \"SKILL.md\");\n if (!existsSync(runtimePath)) {\n findings.push({\n level: \"fail\",\n area: \"runtime-skills\",\n message: `Missing runtime skill wrapper for ${skillName}.`,\n remediation: \"Add runtime-skills/<skill-id>/SKILL.md with frontmatter and a canonical skill reference.\"\n });\n continue;\n }\n\n const text = readFileSync(runtimePath, \"utf8\");\n addSecretFinding(`${skillName}/SKILL.md`, text, findings);\n if (!/^---\\nname: .+\\ndescription: .+\\n---/m.test(text)) {\n findings.push({\n level: \"fail\",\n area: \"runtime-skills\",\n message: `${skillName}/SKILL.md is missing required frontmatter.`,\n remediation: \"Add name and trigger-focused description frontmatter.\"\n });\n }\n if (!text.includes(`skills/${skillName}.md`) && !text.includes(`.agent-kit/skills/${skillName}.md`)) {\n findings.push({\n level: \"fail\",\n area: \"runtime-skills\",\n message: `${skillName}/SKILL.md does not reference the canonical skill file.`,\n remediation: \"Runtime skill wrappers must not fork canonical skill policy.\"\n });\n }\n }\n\n const extras = runtimeSkillNames.filter((name) => !canonicalSkillNames.includes(name));\n if (extras.length > 0) {\n findings.push({\n level: \"warn\",\n area: \"runtime-skills\",\n message: `Runtime skills contain wrappers without canonical skills: ${extras.join(\", \")}.`,\n remediation: \"Add canonical skills or remove orphan runtime wrappers.\"\n });\n }\n\n if (canonicalSkillNames.length > 0 && canonicalSkillNames.every((skillName) => existsSync(join(layout.runtimeSkillsRoot, skillName, \"SKILL.md\")))) {\n findings.push({\n level: \"pass\",\n area: \"runtime-skills\",\n message: `Runtime SKILL.md wrappers exist for ${canonicalSkillNames.length} canonical skills.`\n });\n }\n}\n\nfunction validateAntigravity(cwd: string): ValidationReport {\n const findings: ValidationFinding[] = [];\n const layout = findAntigravityLayout(cwd);\n if (!layout) {\n return report(\"antigravity\", [\n {\n level: \"fail\",\n area: \"adapter\",\n message: \"No Antigravity adapter assets found.\",\n remediation: \"Run agent-kit init --activate antigravity or restore antigravity/plugin.json in the package source.\"\n }\n ]);\n }\n\n const adapterDoc = existsSync(layout.adapterDocPath) ? readFileSync(layout.adapterDocPath, \"utf8\") : \"\";\n if (!adapterDoc) {\n findings.push({\n level: \"fail\",\n area: \"adapter\",\n message: \"Antigravity adapter documentation is missing.\",\n remediation: \"Restore assistant-adapters/antigravity.md or rerun agent-kit init --activate antigravity.\"\n });\n } else {\n addSecretFinding(layout.adapterDocPath, adapterDoc, findings);\n if (adapterDoc.includes(\"AGENTS.md\") && adapterDoc.includes(\"agent-kit adapter validate antigravity\")) {\n findings.push({\n level: \"pass\",\n area: \"adapter\",\n message: \"Antigravity adapter documentation points to canonical Agent Kit validation.\"\n });\n } else {\n findings.push({\n level: \"fail\",\n area: \"adapter\",\n message: \"Antigravity adapter documentation does not explain source-of-truth and validation behavior.\",\n remediation: \"Document canonical Agent Kit files and the structural validation command.\"\n });\n }\n }\n\n validateAntigravityPlugin(layout, findings);\n validateAntigravityCommands(layout, findings);\n validateRuntimeSkills(cwd, layout, findings);\n\n if (layout.mode === \"source\") {\n const packageJson = readJson(join(cwd, \"package.json\"));\n const files = isRecord(packageJson) && Array.isArray(packageJson.files) ? packageJson.files : [];\n for (const requiredFile of [\"antigravity\", \"runtime-skills\", \"assistant-adapters\"]) {\n if (!files.includes(requiredFile)) {\n findings.push({\n level: \"fail\",\n area: \"package\",\n message: `package.json#files does not include ${requiredFile}.`,\n remediation: \"Add the runtime adapter asset to the public package allowlist.\"\n });\n }\n }\n }\n\n if (findings.every((finding) => finding.level !== \"fail\")) {\n findings.push({\n level: \"pass\",\n area: \"adapter\",\n message: \"Antigravity adapter validation completed without blocking failures.\"\n });\n }\n\n return report(\"antigravity\", findings);\n}\n\nfunction validateBasicAdapter(cwd: string, target: Exclude<IdeTarget, \"antigravity\">): ValidationReport {\n const findings: ValidationFinding[] = [];\n const isPackageSource = existsSync(join(cwd, \"package.json\")) && existsSync(join(cwd, \"src\")) && existsSync(join(cwd, \"templates\"));\n\n if (isPackageSource) {\n const sourcePaths: Record<Exclude<IdeTarget, \"antigravity\">, string[]> = {\n cursor: [\n \"assistant-adapters/cursor-agent-kit.mdc\",\n \"assistant-adapters/model-selection/cursor-model-selection.mdc\",\n \"assistant-adapters/cursor-planner.mdc\"\n ],\n claude: [\"assistant-adapters/claude-code-subagents.md\"],\n codex: [\"assistant-adapters/codex-agents.md\", \"assistant-adapters/model-selection/codex-config.example.toml\"],\n copilot: [\"assistant-adapters/github-copilot-instructions.md\", \"assistant-adapters/github-next-supabase.instructions.md\"]\n };\n\n for (const relativePath of sourcePaths[target]) {\n const path = join(cwd, relativePath);\n if (!existsSync(path)) {\n findings.push({\n level: \"fail\",\n area: \"adapter\",\n message: `${relativePath} is missing.`,\n remediation: \"Restore the adapter template or run agent-kit update.\"\n });\n continue;\n }\n const text = readFileSync(path, \"utf8\");\n addSecretFinding(relativePath, text, findings);\n if (!text.includes(\"AGENTS.md\") && !text.includes(\"MODEL_ROUTING.md\")) {\n findings.push({\n level: \"warn\",\n area: \"adapter\",\n message: `${relativePath} does not clearly reference Agent Kit source-of-truth files.`,\n remediation: \"Adapter templates should point back to AGENTS.md, MODEL_ROUTING.md, and the roster contract.\"\n });\n }\n }\n } else {\n findings.push(...validateInstalledIdeAdapter(cwd, target).findings);\n }\n\n if (findings.every((finding) => finding.level !== \"fail\")) {\n findings.push({\n level: \"pass\",\n area: \"adapter\",\n message: `${target} adapter ${isPackageSource ? \"templates are present\" : \"activation assets are present\"}.`\n });\n }\n\n return report(target, findings);\n}\n\nfunction readAssistantAdaptersDoc(cwd: string): string {\n const path = join(cwd, \"ASSISTANT_ADAPTERS.md\");\n return existsSync(path) ? readFileSync(path, \"utf8\") : \"\";\n}\n\nfunction adaptersRowIsActive(doc: string, toolLabel: string): boolean {\n return assistantAdapterRowIsActive(doc, toolLabel);\n}\n\nfunction validateInstalledIdeAdapter(cwd: string, target: Exclude<IdeTarget, \"antigravity\">): ValidationReport {\n const findings: ValidationFinding[] = [];\n const adaptersDoc = readAssistantAdaptersDoc(cwd);\n\n if (target === \"cursor\") {\n const rulesPath = join(cwd, \".cursor/rules/cursor-agent-kit.mdc\");\n if (!existsSync(rulesPath)) {\n findings.push({\n level: \"fail\",\n area: \"adapter\",\n message: \".cursor/rules/cursor-agent-kit.mdc is missing.\",\n remediation: \"Run agent-kit init or agent-kit init --activate cursor.\"\n });\n } else {\n addSecretFinding(\".cursor/rules/cursor-agent-kit.mdc\", readFileSync(rulesPath, \"utf8\"), findings);\n }\n\n const plannerAgent = join(cwd, \".cursor/agents/planner.md\");\n if (existsSync(plannerAgent)) {\n findings.push({\n level: \"pass\",\n area: \"adapter\",\n message: \".cursor/agents/planner.md is installed.\"\n });\n } else if (adaptersRowIsActive(adaptersDoc, \"Cursor\")) {\n findings.push({\n level: \"warn\",\n area: \"adapter\",\n message: \"Cursor is marked Active but .cursor/agents/planner.md is missing.\",\n remediation: \"Run agent-kit init --activate cursor to generate council subagents from the roster.\"\n });\n }\n\n const skillSample = join(cwd, \".cursor/skills/planning-council/SKILL.md\");\n if (existsSync(skillSample)) {\n findings.push({\n level: \"pass\",\n area: \"adapter\",\n message: \".cursor/skills/*/SKILL.md project skills are installed.\"\n });\n }\n }\n\n if (target === \"claude\") {\n const plannerAgent = join(cwd, \".claude/agents/planner.md\");\n if (!existsSync(plannerAgent)) {\n findings.push({\n level: \"fail\",\n area: \"adapter\",\n message: \".claude/agents/planner.md is missing.\",\n remediation: \"Run agent-kit init --activate claude.\"\n });\n }\n }\n\n if (target === \"codex\") {\n const configPath = join(cwd, \".codex/config.toml\");\n if (!existsSync(configPath)) {\n findings.push({\n level: \"fail\",\n area: \"adapter\",\n message: \".codex/config.toml is missing.\",\n remediation: \"Run agent-kit init --activate codex.\"\n });\n }\n const plannerAgent = join(cwd, \".codex/agents/planner.toml\");\n if (existsSync(plannerAgent)) {\n findings.push({\n level: \"pass\",\n area: \"adapter\",\n message: \".codex/agents/planner.toml is installed.\"\n });\n } else if (adaptersRowIsActive(adaptersDoc, \"Codex / AGENTS.md-compatible tools\")) {\n findings.push({\n level: \"warn\",\n area: \"adapter\",\n message: \"Codex is marked Active but .codex/agents/planner.toml is missing.\",\n remediation: \"Run agent-kit init --activate codex to generate council custom agents from the roster.\"\n });\n }\n }\n\n if (target === \"copilot\") {\n const instructions = join(cwd, \".github/copilot-instructions.md\");\n if (!existsSync(instructions)) {\n findings.push({\n level: \"fail\",\n area: \"adapter\",\n message: \".github/copilot-instructions.md is missing.\",\n remediation: \"Run agent-kit init --activate copilot.\"\n });\n }\n }\n\n return report(target, findings);\n}\n\nexport function validateAdapter(cwd: string, target: AdapterValidationTarget = \"antigravity\"): ValidationReport {\n if (target === \"all\") {\n const findings: ValidationFinding[] = [];\n for (const item of [\"antigravity\", \"cursor\", \"claude\", \"codex\", \"copilot\"] as const) {\n findings.push(...validateAdapter(cwd, item).findings);\n }\n return report(\"all\", findings);\n }\n\n if (target === \"antigravity\") return validateAntigravity(cwd);\n return validateBasicAdapter(cwd, target);\n}\n\nexport function validatePackage(cwd: string): ValidationReport {\n const findings: ValidationFinding[] = [];\n const sourceMode = existsSync(join(cwd, \"package.json\")) && existsSync(join(cwd, \"src\")) && existsSync(join(cwd, \"templates\"));\n if (!sourceMode) {\n return report(\"package\", [\n {\n level: \"fail\",\n area: \"package\",\n message: \"Package validation must run from the Agent Kit source repository root.\",\n remediation: \"Run this command from the package repository, not from an installed downstream project.\"\n }\n ]);\n }\n\n findings.push(...validateAntigravity(cwd).findings);\n\n for (const doc of [\"README.md\", \"DOCS.md\", \"SPEC.md\", \"DECISIONS.md\", \"QUALITY_GATES.md\", \"TESTING.md\", \"UPGRADE.md\"]) {\n const path = join(cwd, doc);\n const text = existsSync(path) ? readFileSync(path, \"utf8\") : \"\";\n const lower = text.toLowerCase();\n if (!lower.includes(\"antigravity\") && !lower.includes(\"runtime command\") && !lower.includes(\"runtime adapter\")) {\n findings.push({\n level: \"warn\",\n area: \"docs\",\n message: `${doc} does not mention the runtime adapter or Antigravity command layer.`,\n remediation: \"Update living docs when runtime adapter behavior changes.\"\n });\n }\n }\n\n for (const examplePath of [\n \"examples/next-supabase-installed/.agent-kit/agent-roster.json\",\n \"examples/next-supabase-installed/.agent-kit/model-routing.json\",\n \"examples/next-supabase-installed/.agent-kit/manifest.json\",\n \"examples/next-supabase-installed/audit-output.json\"\n ]) {\n if (!existsSync(join(cwd, examplePath))) {\n findings.push({\n level: \"fail\",\n area: \"examples\",\n message: `${examplePath} is missing.`,\n remediation: \"Regenerate or restore the example install snapshot.\"\n });\n }\n }\n\n const auditReport = createAuditReport(cwd);\n if (auditReport.summary.fail > 0) {\n findings.push({\n level: \"fail\",\n area: \"audit\",\n message: `Source package audit has ${auditReport.summary.fail} failure(s).`,\n remediation: \"Fix package-root audit failures before release.\"\n });\n } else {\n findings.push({\n level: \"pass\",\n area: \"audit\",\n message: `Source package audit has no failures (${auditReport.readiness.level}).`\n });\n }\n\n if (findings.every((finding) => finding.level !== \"fail\")) {\n findings.push({\n level: \"pass\",\n area: \"package\",\n message: \"Package validation completed without blocking failures.\"\n });\n }\n\n return report(\"package\", findings);\n}\n","import type { AgentKitConfig } from \"./types.js\";\n\nexport const PACKAGE_NAME = \"@appsforgood/next-supabase-kit\";\nexport const PACKAGE_VERSION = \"0.1.6\";\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 \"LOOP_CODING.md\",\n \"DEPLOYMENT.md\",\n \"UPGRADE.md\"\n] as const;\n\nexport const LIBRARY_FOLDERS = [\n \"agents\",\n \"skills\",\n \"prompts\",\n \"checklists\",\n \"runtime-skills\",\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\nexport const CURSOR_SCOPED_ADAPTER_FILES = [\n {\n source: \"assistant-adapters/cursor-planner.mdc\",\n target: \".cursor/rules/cursor-planner.mdc\"\n },\n {\n source: \"assistant-adapters/cursor-security.mdc\",\n target: \".cursor/rules/cursor-security.mdc\"\n },\n {\n source: \"assistant-adapters/cursor-frontend.mdc\",\n target: \".cursor/rules/cursor-frontend.mdc\"\n }\n] as const;\n\nexport const COPILOT_INSTRUCTION_FILES = [\n {\n source: \"assistant-adapters/github-copilot-instructions.md\",\n target: \".github/copilot-instructions.md\"\n },\n {\n source: \"assistant-adapters/github-next-supabase.instructions.md\",\n target: \".github/instructions/next-supabase.instructions.md\"\n }\n] as const;\n\nexport const CODEX_CONFIG_SOURCE = \"assistant-adapters/model-selection/codex-config.example.toml\";\nexport const CLAUDE_TEMPLATE = \"templates/next-supabase/CLAUDE.md\";\n\nexport const ANTIGRAVITY_PLUGIN_FILES = [\n {\n source: \"antigravity/plugin.json\",\n target: \".antigravity/agent-kit/plugin.json\"\n },\n {\n source: \"assistant-adapters/antigravity.md\",\n target: \".antigravity/agent-kit/README.md\"\n }\n] as const;\n\nexport const ANTIGRAVITY_COMMANDS_SOURCE_DIR = \"antigravity/commands\";\nexport const ANTIGRAVITY_COMMANDS_TARGET_DIR = \".antigravity/agent-kit/commands\";\nexport const RUNTIME_SKILLS_SOURCE_DIR = \"runtime-skills\";\nexport const ANTIGRAVITY_RUNTIME_SKILLS_TARGET_DIR = \".antigravity/runtime-skills\";\n\nexport const CI_TEMPLATE_FILES = [\n {\n source: \"templates/next-supabase/.github/workflows/agent-kit-audit.yml\",\n target: \".github/workflows/agent-kit-audit.yml\"\n }\n] as const;\n","import { appendFileSync, existsSync, readFileSync } 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)=(?!\\\\n|\\\\r|\\\\r\\\\n)[\"']?[A-Za-z0-9][A-Za-z0-9_./+:-]+/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 ensureDir(join(cwd, AGENT_KIT_DIR, \"onboarding\"));\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, \"&lt;\")\n .replace(/>/g, \"&gt;\")\n .replace(/[`![\\]()|]/g, \"\\\\$&\")\n .replace(/\\r?\\n/g, \"<br>\");\n}\n\nexport function escapeMarkdownTableCell(value: string | undefined): string {\n return escapeMarkdownText(value).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, 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 { getSetupProgress, onboardingStateExists } from \"../studio/onboarding-state.js\";\nimport { readManifest } from \"./install.js\";\nimport { assistantAdapterRowIsActive } from \"./assistant-adapters-table.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 \"ui-improvement-harness\",\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 \"onboarding-state.schema.json\",\n \"agentic-level.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 isPackageRepository(cwd: string): boolean {\n const packagePath = join(cwd, \"package.json\");\n if (!existsSync(packagePath)) return false;\n try {\n const packageJson = JSON.parse(readFileSync(packagePath, \"utf8\")) as { name?: string };\n return (\n packageJson.name === \"@appsforgood/next-supabase-kit\" &&\n existsSync(join(cwd, \"src\", \"cli\", \"index.ts\")) &&\n existsSync(join(cwd, \"templates\", \"next-supabase\")) &&\n existsSync(join(cwd, \"rosters\", \"next-supabase-default-council.json\"))\n );\n } catch {\n return false;\n }\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\" ? { reason: override } : override && typeof override === \"object\" ? override : { 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[], rosterRelativePath = DEFAULT_AGENT_ROSTER_TARGET): void {\n const rosterPath = join(cwd, rosterRelativePath);\n if (!existsSync(rosterPath)) {\n findings.push({\n level: \"fail\",\n area: \"agents\",\n message: `${rosterRelativePath} 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: `${rosterRelativePath} 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: `${rosterRelativePath} 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:\n \"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[], schemaRootRelativePath = \".agent-kit/schemas\"): void {\n for (const schemaFile of REQUIRED_SCHEMA_FILES) {\n const schemaPath = join(cwd, schemaRootRelativePath, schemaFile);\n if (!existsSync(schemaPath)) {\n findings.push({\n level: \"warn\",\n area: \"agents\",\n message: `${schemaRootRelativePath}/${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: `${schemaRootRelativePath}/${schemaFile} is present and parseable.`\n });\n } catch {\n findings.push({\n level: \"fail\",\n area: \"agents\",\n message: `${schemaRootRelativePath}/${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 setup, 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:\n \"Answer product summary, audience, workflows, auth/tenant model, UI direction, value proposition, and quality target with agent-kit setup or by editing .agent-kit/project-context.json.\"\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 if (onboardingStateExists(cwd)) {\n const progress = getSetupProgress(cwd);\n if (!progress.quickComplete) {\n findings.push({\n level: \"warn\",\n area: \"studio\",\n message: `Setup wizard progress is ${progress.percent}% complete (depth: ${progress.depth}).`,\n remediation: \"Run agent-kit setup --open to finish project context onboarding, or agent-kit setup --status to inspect progress.\"\n });\n } else {\n findings.push({\n level: \"pass\",\n area: \"studio\",\n message: \"Setup wizard quick path is complete.\"\n });\n }\n } else if (missingHighValue.length === 0 && result.data.primaryWorkflows.length > 0) {\n findings.push({\n level: \"warn\",\n area: \"studio\",\n message: \"Project context exists but setup wizard state has not been recorded.\",\n remediation: \"Run agent-kit setup --open once so onboarding progress and depth are tracked locally.\"\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 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[], adapterRootRelativePath = \".agent-kit/assistant-adapters\", docsCwd = cwd): void {\n const adaptersDoc = readDoc(docsCwd, \"ASSISTANT_ADAPTERS.md\");\n const adapterRoot = join(cwd, adapterRootRelativePath);\n\n if (!existsSync(adapterRoot)) {\n findings.push({\n level: \"warn\",\n area: \"agents\",\n message: `${adapterRootRelativePath} 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: `${adapterRootRelativePath} 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 and subagents, 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 (assistantAdapterRowIsActive(adaptersDoc, \"Cursor\") && !existsSync(join(cwd, \".cursor/agents/planner.md\"))) {\n findings.push({\n level: \"warn\",\n area: \"agents\",\n message: \"Cursor is marked Active but .cursor/agents/planner.md is missing.\",\n remediation: \"Run agent-kit init --activate cursor to generate council subagents from the roster.\"\n });\n }\n\n if (assistantAdapterRowIsActive(adaptersDoc, \"Codex / AGENTS.md-compatible tools\") && !existsSync(join(cwd, \".codex/agents/planner.toml\"))) {\n findings.push({\n level: \"warn\",\n area: \"agents\",\n message: \"Codex is marked Active but .codex/agents/planner.toml is missing.\",\n remediation: \"Run agent-kit init --activate codex to generate council custom agents from the roster.\"\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[], routingRelativePath = DEFAULT_MODEL_ROUTING_TARGET, docsCwd = cwd): void {\n const modelRoutingDoc = readDoc(docsCwd, \"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, routingRelativePath);\n if (!existsSync(routingPath)) {\n findings.push({\n level: \"warn\",\n area: \"models\",\n message: `${routingRelativePath} 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: `${routingRelativePath} 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: `${routingRelativePath} 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:\n \"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 (\n !includesAll(designDoc, [\"distinctiveness benchmark\", \"first-screen proof\", \"content fingerprint\", \"asset provenance\", \"state proof\", \"visual QA proof\"])\n ) {\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: \"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: \"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 = [/\\bTBD\\b/i, /replace with real/i, /example_table/i, /describe the product/i, /document required/i, /pass\\/fail\\/skipped/i];\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 const packageRepository = isPackageRepository(cwd);\n const packageSourceMode = packageRepository && !manifest;\n const docsCwd = packageSourceMode ? join(cwd, \"templates\", \"next-supabase\") : cwd;\n\n if (!manifest) {\n if (packageRepository) {\n findings.push({\n level: \"pass\",\n area: \"install\",\n message: \"Package source repository mode detected; installed-project manifest is not required.\"\n });\n } else {\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 }\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, packageSourceMode ? \"rosters/next-supabase-default-council.json\" : DEFAULT_AGENT_ROSTER_TARGET);\n addSchemaFindings(cwd, findings, packageSourceMode ? \"schemas\" : \".agent-kit/schemas\");\n addCouncilSessionRecordFindings(cwd, findings);\n if (!packageRepository || existsSync(join(cwd, CONTEXT_JSON)) || existsSync(join(cwd, COUNCIL_SESSION_DIR))) {\n addAgentStudioFindings(cwd, findings);\n }\n\n for (const doc of ROOT_DOCS) {\n const docPath = join(docsCwd, doc);\n const displayPath = packageSourceMode ? `templates/next-supabase/${doc}` : doc;\n if (existsSync(docPath)) {\n findings.push({ level: \"pass\", area: \"docs\", message: `${displayPath} exists.` });\n } else {\n findings.push({\n level: doc === \"MODEL_ROUTING.md\" ? \"warn\" : \"fail\",\n area: \"docs\",\n message: `${displayPath} is missing.`,\n remediation: packageSourceMode\n ? `Restore ${displayPath}; package source audits validate shipped templates instead of installed-project root docs.`\n : `Run agent-kit init or restore ${doc} from the next-supabase template.`\n });\n }\n }\n\n addCouncilDocFindings(docsCwd, findings);\n addAssistantAdapterFindings(cwd, findings, packageSourceMode ? \"assistant-adapters\" : \".agent-kit/assistant-adapters\", docsCwd);\n addModelRoutingFindings(cwd, findings, packageSourceMode ? \"model-routing/default-model-routing.json\" : DEFAULT_MODEL_ROUTING_TARGET, docsCwd);\n addMessagingFindings(docsCwd, findings);\n addQualityGateFindings(docsCwd, findings);\n addUpgradeFindings(docsCwd, findings);\n addProjectEvidenceFindings(docsCwd, findings);\n addProjectRealityFindings(cwd, findings, { packageRepository });\n\n const security = readDoc(docsCwd, \"SECURITY.md\");\n if (!includesAny(security, [\"OWASP\", \"Top 10\"])) {\n findings.push({\n level: \"fail\",\n area: \"docs-hygiene\",\n message: \"SECURITY.md does not explicitly reference OWASP Top 10 review (docs hygiene check).\",\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: \"docs-hygiene\",\n message: \"SECURITY.md does not explicitly cover Supabase RLS (docs hygiene check).\",\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: \"docs-hygiene\",\n message: \"SECURITY.md does not mention service-role key isolation (docs hygiene check).\",\n remediation: \"Document that service-role keys are server-only and never exposed to client bundles.\"\n });\n }\n\n addFrontendFindings(docsCwd, findings);\n\n const testing = readDoc(docsCwd, \"TESTING.md\");\n if (!includesAny(testing, [\"Playwright\", \"smoke\"])) {\n findings.push({\n level: \"warn\",\n area: \"docs-hygiene\",\n message: \"TESTING.md does not require Playwright or smoke coverage (docs hygiene check).\",\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: \"docs-hygiene\",\n message: \"TESTING.md does not define visual QA or visual-regression evidence (docs hygiene check).\",\n remediation:\n \"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 readPackageJson(cwd: string): { scripts?: Record<string, string> } | null {\n const path = join(cwd, \"package.json\");\n if (!existsSync(path)) return null;\n try {\n return JSON.parse(readFileSync(path, \"utf8\")) as { scripts?: Record<string, string> };\n } catch {\n return null;\n }\n}\n\nfunction containsLikelySecretForAudit(relativeFile: string, content: string): boolean {\n const normalized = relativeFile.replace(/\\\\/g, \"/\");\n const testSecretFixture = [\"sk\", \"test\", \"fake\", \"secret\", \"value\"].join(\"_\");\n if (normalized.startsWith(\"tests/\") && content.includes(`const fakeSecret = \"${testSecretFixture}\"`) && content.includes(\"not.toContain(fakeSecret)\")) {\n return containsLikelySecret(content.split(testSecretFixture).join(\"[TEST_SECRET_FIXTURE]\"));\n }\n return containsLikelySecret(content);\n}\n\nfunction addProjectRealityFindings(cwd: string, findings: AuditFinding[], options: { packageRepository?: boolean } = {}): void {\n const migrationsDir = join(cwd, \"supabase\", \"migrations\");\n if (existsSync(migrationsDir)) {\n const sqlFiles = listFilesRecursive(migrationsDir).filter((file) => file.endsWith(\".sql\"));\n if (sqlFiles.length === 0) {\n findings.push({\n level: \"warn\",\n area: \"project-reality\",\n message: \"supabase/migrations exists but contains no SQL migration files.\",\n remediation: \"Add versioned SQL migrations or remove the empty migrations directory if Supabase is not in use.\"\n });\n } else {\n const rlsFiles = sqlFiles.filter((file) => {\n const content = readFileSync(join(migrationsDir, file), \"utf8\");\n return /enable\\s+row\\s+level\\s+security/i.test(content);\n });\n if (rlsFiles.length === 0) {\n findings.push({\n level: \"fail\",\n area: \"project-reality\",\n message: \"No Supabase migration enables row level security.\",\n remediation: \"Add `ALTER TABLE ... ENABLE ROW LEVEL SECURITY` (or equivalent) in supabase/migrations before shipping user data.\"\n });\n } else {\n findings.push({\n level: \"pass\",\n area: \"project-reality\",\n message: `Supabase migrations enable RLS in ${rlsFiles.length} file(s).`\n });\n }\n }\n }\n\n const packageJson = readPackageJson(cwd);\n if (!packageJson) {\n findings.push({\n level: \"warn\",\n area: \"project-reality\",\n message: \"No package.json found to verify test scripts.\",\n remediation: \"Add package.json with test, lint, and build scripts appropriate to the stack.\"\n });\n } else {\n const scripts = packageJson.scripts ?? {};\n const testScript = scripts.test ?? scripts[\"test:unit\"] ?? scripts[\"test:ci\"];\n if (!testScript) {\n findings.push({\n level: \"warn\",\n area: \"project-reality\",\n message: \"package.json has no test script (test, test:unit, or test:ci).\",\n remediation: \"Add a test script and document it in TESTING.md.\"\n });\n } else {\n findings.push({\n level: \"pass\",\n area: \"project-reality\",\n message: \"package.json defines a test script.\"\n });\n }\n }\n\n const trackedSourceFiles = listFilesRecursive(cwd).filter((file) => {\n if (file.includes(\"node_modules/\") || file.includes(\".agent-kit/\")) return false;\n return /\\.(ts|tsx|js|jsx|env|json)$/.test(file);\n });\n const secretHits = trackedSourceFiles\n .map((file) => {\n const content = readFileSync(join(cwd, file), \"utf8\");\n return containsLikelySecretForAudit(file, content) ? file : null;\n })\n .filter((file): file is string => file !== null)\n .slice(0, 5);\n if (secretHits.length > 0) {\n findings.push({\n level: \"fail\",\n area: \"project-reality\",\n message: `Possible committed secret patterns detected in: ${secretHits.join(\", \")}.`,\n remediation: \"Remove secrets from tracked files, rotate exposed credentials, and use environment variables.\"\n });\n } else if (trackedSourceFiles.length > 0) {\n findings.push({\n level: \"pass\",\n area: \"project-reality\",\n message: \"No obvious committed secret patterns detected in tracked source files.\"\n });\n }\n\n if (options.packageRepository) {\n findings.push({\n level: \"pass\",\n area: \"project-reality\",\n message: \"Package source repository mode does not require installed-project context files.\"\n });\n } else if (!existsSync(join(cwd, CONTEXT_JSON))) {\n findings.push({\n level: \"warn\",\n area: \"project-reality\",\n message: \".agent-kit/project-context.json is missing.\",\n remediation: \"Run agent-kit init or agent-kit context init to create project context.\"\n });\n } else {\n findings.push({\n level: \"pass\",\n area: \"project-reality\",\n message: \".agent-kit/project-context.json exists.\"\n });\n }\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\nconst AgenticLevelCore = z.union([z.literal(3), z.literal(4), z.literal(5), z.literal(6)]);\nconst AgenticLevelTarget = z.union([z.literal(3), z.literal(4), z.literal(5), z.literal(6), z.literal(7), z.literal(8)]);\n\nexport const OnboardingStateContract = z\n .object({\n schemaVersion: z.literal(1),\n depth: z.enum([\"quick\", \"standard\", \"complete\", \"undecided\"]),\n startedAt: z.string().datetime(),\n lastVisitedAt: z.string().datetime(),\n completedAt: z.string().datetime().optional(),\n completedSections: z.array(z.string()),\n skippedSections: z.array(z.string()),\n currentSection: z.string(),\n currentStep: z.number().int().min(0),\n wizardVersion: z.string(),\n ideSurface: z.enum([\"cursor\", \"copilot\", \"claude\", \"codex\", \"other\"]).optional(),\n ideVerifiedAt: z.string().datetime().optional(),\n visualQaTier: z.enum([\"baseline\", \"strong\", \"mature\"]).optional(),\n targetAgenticLevel: AgenticLevelTarget.optional(),\n lastAgenticLevel: AgenticLevelCore.optional(),\n lastAgenticComputedAt: z.string().datetime().optional()\n })\n .strict();\n\nexport type OnboardingStateContractValue = z.infer<typeof OnboardingStateContract>;\n\nexport const AgenticLevelSignalContract = z\n .object({\n id: z.string().min(1),\n level: AgenticLevelCore,\n label: z.string().min(1),\n pass: z.boolean(),\n evidence: z.string().min(1),\n remediation: z.string().min(1)\n })\n .strict();\n\nexport const AgenticLevelContract = z\n .object({\n currentLevel: AgenticLevelCore,\n targetLevel: AgenticLevelTarget,\n maintainerProfile: z.boolean(),\n computedAt: z.string().datetime(),\n maintainerNote: z.string().optional(),\n signals: z.array(AgenticLevelSignalContract),\n climbSteps: z.array(AgenticLevelSignalContract)\n })\n .strict();\n\nexport type AgenticLevelContractValue = z.infer<typeof AgenticLevelContract>;\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 { existsSync } from \"node:fs\";\nimport { join } from \"node:path\";\nimport { OnboardingStateContract, type OnboardingStateContractValue } from \"../config/contracts.js\";\nimport { scanProjectContext } from \"./context.js\";\nimport {\n COMPLETE_SECTIONS,\n QUICK_SECTIONS,\n SECTION_LABELS,\n STANDARD_SECTIONS,\n WIZARD_VERSION,\n type WizardDepth,\n type WizardSectionId,\n sectionsForDepth\n} from \"./wizard/steps.js\";\nimport { ensureStudioDirs, nowIso, readJsonFile, writeJsonFile } from \"./shared.js\";\n\nexport const ONBOARDING_DIR = \".agent-kit/onboarding\";\nexport const ONBOARDING_STATE_JSON = \".agent-kit/onboarding/state.json\";\n\nexport type SectionStatus = \"done\" | \"in_progress\" | \"optional\" | \"not_started\";\n\nexport interface SetupProgressSection {\n id: WizardSectionId;\n label: string;\n status: SectionStatus;\n}\n\nexport interface SetupProgress {\n percent: number;\n depth: WizardDepth;\n quickComplete: boolean;\n sections: SetupProgressSection[];\n recommendedNext: WizardSectionId | null;\n openContextQuestions: number;\n}\n\nfunction defaultState(): OnboardingStateContractValue {\n const now = nowIso();\n return {\n schemaVersion: 1,\n depth: \"undecided\",\n startedAt: now,\n lastVisitedAt: now,\n completedSections: [],\n skippedSections: [],\n currentSection: \"home\",\n currentStep: 0,\n wizardVersion: WIZARD_VERSION\n };\n}\n\nexport function loadOnboardingState(cwd: string): OnboardingStateContractValue {\n ensureStudioDirs(cwd);\n const existing = readJsonFile<unknown>(cwd, ONBOARDING_STATE_JSON);\n if (!existing) return defaultState();\n const parsed = OnboardingStateContract.safeParse(existing);\n if (!parsed.success) return defaultState();\n return parsed.data;\n}\n\nexport function saveOnboardingState(cwd: string, patch: Partial<OnboardingStateContractValue>): OnboardingStateContractValue {\n const current = loadOnboardingState(cwd);\n const next: OnboardingStateContractValue = OnboardingStateContract.parse({\n ...current,\n ...patch,\n lastVisitedAt: nowIso()\n });\n writeJsonFile(cwd, ONBOARDING_STATE_JSON, next);\n return next;\n}\n\nfunction sectionStatus(state: OnboardingStateContractValue, section: WizardSectionId): SectionStatus {\n if (state.completedSections.includes(section)) return \"done\";\n if (state.skippedSections.includes(section)) return \"optional\";\n if (state.currentSection === section) return \"in_progress\";\n const optionalSections: WizardSectionId[] = [\"visualQa\", \"designDoc\", \"messagingDoc\", \"applyDrafts\", \"ui\"];\n if (optionalSections.includes(section) && state.depth === \"quick\") return \"optional\";\n if (section === \"review\" && state.completedSections.includes(\"messaging\")) return \"in_progress\";\n return \"not_started\";\n}\n\nfunction isQuickComplete(state: OnboardingStateContractValue, openQuestions: number): boolean {\n const required = QUICK_SECTIONS.filter((s) => s !== \"review\");\n const done = required.every((section) => state.completedSections.includes(section));\n return done && openQuestions === 0;\n}\n\nexport function getSetupProgress(cwd: string): SetupProgress {\n const state = loadOnboardingState(cwd);\n const context = scanProjectContext(cwd);\n const openContextQuestions = context.openQuestions.length;\n const activeSections = state.depth === \"undecided\" ? QUICK_SECTIONS : sectionsForDepth(state.depth);\n const sections: SetupProgressSection[] = activeSections.map((id) => ({\n id,\n label: SECTION_LABELS[id],\n status: sectionStatus(state, id)\n }));\n\n const doneCount = sections.filter((s) => s.status === \"done\").length;\n const percent = sections.length === 0 ? 0 : Math.round((doneCount / sections.length) * 100);\n\n let recommendedNext: WizardSectionId | null = null;\n for (const section of activeSections) {\n if (!state.completedSections.includes(section) && !state.skippedSections.includes(section)) {\n recommendedNext = section;\n break;\n }\n }\n\n return {\n percent,\n depth: state.depth,\n quickComplete: isQuickComplete(state, openContextQuestions),\n sections,\n recommendedNext,\n openContextQuestions\n };\n}\n\nexport function markSectionComplete(cwd: string, section: WizardSectionId): OnboardingStateContractValue {\n const state = loadOnboardingState(cwd);\n const completedSections = [...new Set([...state.completedSections, section])];\n return saveOnboardingState(cwd, { completedSections });\n}\n\nexport function markQuickPathComplete(cwd: string): OnboardingStateContractValue {\n const state = loadOnboardingState(cwd);\n return saveOnboardingState(cwd, {\n completedSections: [...new Set([...state.completedSections, ...QUICK_SECTIONS, \"complete\"])],\n completedAt: nowIso(),\n currentSection: \"complete\"\n });\n}\n\nexport function onboardingStateExists(cwd: string): boolean {\n return existsSync(join(cwd, ONBOARDING_STATE_JSON));\n}\n\nexport function depthIncludesStandard(depth: WizardDepth): boolean {\n return depth === \"standard\" || depth === \"complete\";\n}\n\nexport function depthIncludesComplete(depth: WizardDepth): boolean {\n return depth === \"complete\";\n}\n\nexport { QUICK_SECTIONS, STANDARD_SECTIONS, COMPLETE_SECTIONS };\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 {\n CONTEXT_JSON,\n CONTEXT_MD,\n ensureStudioDirs,\n listMarkdown,\n nowIso,\n readJsonFile,\n redactSensitive,\n unique,\n writeJsonFile,\n writeTextFile\n} from \"./shared.js\";\n\nexport interface ContextCommandResult {\n contextPath: string;\n markdownPath: string;\n openQuestions: string[];\n}\n\nfunction readPackageJson(\n cwd: string\n): { 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(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 withOpenQuestions = { ...context, openQuestions: inferOpenQuestions(context) };\n const parsed = ProjectContextContract.parse(withOpenQuestions);\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","export type WizardDepth = \"quick\" | \"standard\" | \"complete\" | \"undecided\";\n\nexport type WizardSectionId =\n \"home\" | \"team\" | \"product\" | \"access\" | \"ui\" | \"messaging\" | \"review\" | \"complete\" | \"ide\" | \"visualQa\" | \"designDoc\" | \"messagingDoc\" | \"applyDrafts\";\n\nexport interface WizardStepDef {\n id: string;\n section: WizardSectionId;\n title: string;\n why: string;\n fields: string[];\n depth: WizardDepth[];\n optional?: boolean;\n agentId?: string;\n agentName?: string;\n roleSummary?: string;\n}\n\nexport const WIZARD_VERSION = \"1.0.0\";\n\nexport const SECTION_LABELS: Record<WizardSectionId, string> = {\n home: \"Home\",\n team: \"Agent team\",\n product: \"Product\",\n access: \"Access\",\n ui: \"UI\",\n messaging: \"Messaging\",\n review: \"Review\",\n complete: \"Done\",\n ide: \"Your IDE\",\n visualQa: \"Visual QA\",\n designDoc: \"Design intake\",\n messagingDoc: \"Copy intake\",\n applyDrafts: \"Apply drafts\"\n};\n\nexport const QUICK_SECTIONS: WizardSectionId[] = [\"ide\", \"team\", \"product\", \"access\", \"ui\", \"messaging\", \"review\"];\n\nexport const STANDARD_SECTIONS: WizardSectionId[] = [...QUICK_SECTIONS, \"visualQa\"];\n\nexport const COMPLETE_SECTIONS: WizardSectionId[] = [...STANDARD_SECTIONS, \"designDoc\", \"messagingDoc\", \"applyDrafts\"];\n\nexport const WIZARD_STEPS: WizardStepDef[] = [\n {\n id: \"ide-surface\",\n section: \"ide\",\n title: \"Which AI coding tool do you use?\",\n why: \"We wire project instructions to the path your IDE actually loads — Cursor rules, Copilot instructions, Claude agents, or AGENTS.md.\",\n fields: [\"ideSurface\"],\n depth: [\"quick\", \"standard\", \"complete\", \"undecided\"]\n },\n {\n id: \"product-summary\",\n section: \"product\",\n title: \"What does this product do?\",\n why: \"Agents need a concrete summary before they guess from folder names.\",\n fields: [\"productSummary\"],\n depth: [\"quick\", \"standard\", \"complete\", \"undecided\"]\n },\n {\n id: \"product-audience\",\n section: \"product\",\n title: \"Who is the primary user or buyer?\",\n why: \"Audience shapes UX, copy tone, and which workflows matter most.\",\n fields: [\"productCategory\", \"primaryAudience\"],\n depth: [\"quick\", \"standard\", \"complete\", \"undecided\"]\n },\n {\n id: \"product-workflows\",\n section: \"product\",\n title: \"What are the top workflows?\",\n why: \"Naming real workflows stops agents from inventing generic SaaS screens.\",\n fields: [\"primaryWorkflows\"],\n depth: [\"quick\", \"standard\", \"complete\", \"undecided\"]\n },\n {\n id: \"access-tenant\",\n section: \"access\",\n title: \"Who uses the system?\",\n why: \"Single-user, team, and tenant models need different auth and data boundaries.\",\n fields: [\"tenantModel\", \"owner\"],\n depth: [\"quick\", \"standard\", \"complete\", \"undecided\"]\n },\n {\n id: \"access-auth\",\n section: \"access\",\n title: \"What authentication model must agents preserve?\",\n why: \"Auth regressions are common when agents refactor routes or Supabase clients.\",\n fields: [\"authModel\"],\n depth: [\"quick\", \"standard\", \"complete\", \"undecided\"]\n },\n {\n id: \"ui-preferred\",\n section: \"ui\",\n title: \"How should the UI feel?\",\n why: \"Explicit direction reduces generic AI dashboard layouts.\",\n fields: [\"uiPreferred\"],\n depth: [\"quick\", \"standard\", \"complete\", \"undecided\"]\n },\n {\n id: \"ui-avoid\",\n section: \"ui\",\n title: \"What should the UI avoid?\",\n why: \"Anti-patterns are as important as positive direction for frontend agents.\",\n fields: [\"uiAvoid\"],\n depth: [\"quick\", \"standard\", \"complete\", \"undecided\"],\n optional: true\n },\n {\n id: \"messaging-value\",\n section: \"messaging\",\n title: \"What is the value proposition?\",\n why: \"Public copy agents need a stated outcome, not invented marketing fluff.\",\n fields: [\"valueProposition\"],\n depth: [\"quick\", \"standard\", \"complete\", \"undecided\"]\n },\n {\n id: \"messaging-proof\",\n section: \"messaging\",\n title: \"What proof supports your claims?\",\n why: \"Claims without proof should stay marked provisional in MESSAGING.md.\",\n fields: [\"proof\", \"objections\"],\n depth: [\"quick\", \"standard\", \"complete\", \"undecided\"],\n optional: true\n },\n {\n id: \"messaging-quality\",\n section: \"messaging\",\n title: \"What quality target fits this project now?\",\n why: \"Sets audit expectations: baseline setup vs aiming for a fully clean audit.\",\n fields: [\"qualityTarget\"],\n depth: [\"quick\", \"standard\", \"complete\", \"undecided\"]\n },\n {\n id: \"visual-qa-tier\",\n section: \"visualQa\",\n title: \"Which visual QA tier fits this project?\",\n why: \"TESTING.md should name the smallest reliable visual evidence for UI changes.\",\n fields: [\"visualQaTier\"],\n depth: [\"standard\", \"complete\"],\n optional: true\n },\n {\n id: \"design-intake\",\n section: \"designDoc\",\n title: \"Design direction intake\",\n why: \"DESIGN.md needs audience, content inventory, and anti-references before UI work.\",\n fields: [\"designAudience\", \"designContent\", \"designAntiReferences\"],\n depth: [\"complete\"],\n optional: true\n },\n {\n id: \"messaging-intake\",\n section: \"messagingDoc\",\n title: \"Messaging discovery intake\",\n why: \"MESSAGING.md needs audience pain, outcome, and objections in customer language.\",\n fields: [\"msgAudience\", \"msgPain\", \"msgOutcome\"],\n depth: [\"complete\"],\n optional: true\n },\n {\n id: \"apply-drafts\",\n section: \"applyDrafts\",\n title: \"Review and apply doc drafts\",\n why: \"Preview generated snippets before they update DESIGN.md or MESSAGING.md.\",\n fields: [],\n depth: [\"complete\"],\n optional: true\n }\n];\n\nexport function sectionsForDepth(depth: WizardDepth): WizardSectionId[] {\n if (depth === \"complete\") return COMPLETE_SECTIONS;\n if (depth === \"standard\") return STANDARD_SECTIONS;\n return QUICK_SECTIONS;\n}\n\nexport function stepsForDepth(depth: WizardDepth): WizardStepDef[] {\n return WIZARD_STEPS.filter((step) => step.depth.includes(depth));\n}\n","import { existsSync, readFileSync } from \"node:fs\";\nimport { join } from \"node:path\";\nimport {\n CI_TEMPLATE_FILES,\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 { initProjectContext } from \"../studio/context.js\";\nimport { copyDirectory, copyTextWithConflict, ensureDir, sha256, writeText } from \"../utils/fs.js\";\nimport { findPackageRoot } from \"../utils/package-root.js\";\nimport { activateIdeTargets, parseActivateTargets, type ActivateIdeResult, type IdeTarget } from \"./ide-activate.js\";\n\nexport interface InitOptions {\n cwd: string;\n stack?: StackProfile;\n force?: boolean;\n activate?: string[];\n}\n\nexport interface InitResult {\n copied: string[];\n unchanged: string[];\n conflicts: string[];\n overwritten: string[];\n manifestPath: string;\n contextPath?: string;\n activation?: ActivateIdeResult;\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 for (const template of CI_TEMPLATE_FILES) {\n const ciCopy = copyTextWithConflict(join(packageRoot, template.source), cwd, template.target, {\n force: Boolean(options.force),\n conflictRoot: join(cwd, \".agent-kit\", \"conflicts\")\n });\n if (ciCopy.action === \"created\") result.copied.push(ciCopy.target);\n if (ciCopy.action === \"unchanged\") result.unchanged.push(ciCopy.target);\n if (ciCopy.action === \"overwritten\") result.overwritten.push(ciCopy.target);\n if (ciCopy.action === \"conflict\") result.conflicts.push(`${ciCopy.target} -> ${ciCopy.conflictPath}`);\n }\n\n const context = initProjectContext(cwd);\n result.contextPath = context.contextPath;\n\n const activateTargets = parseActivateTargets(options.activate);\n if (activateTargets.length > 0) {\n result.activation = activateIdeTargets({\n cwd,\n targets: activateTargets,\n force: Boolean(options.force)\n });\n result.copied.push(...result.activation.copied.filter((path) => !result.copied.includes(path)));\n result.unchanged.push(...result.activation.unchanged.filter((path) => !result.unchanged.includes(path)));\n result.conflicts.push(...result.activation.conflicts.filter((path) => !result.conflicts.includes(path)));\n result.overwritten.push(...result.activation.overwritten.filter((path) => !result.overwritten.includes(path)));\n }\n\n return result;\n}\n\nexport { type IdeTarget };\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 ANTIGRAVITY_COMMANDS_SOURCE_DIR,\n ANTIGRAVITY_COMMANDS_TARGET_DIR,\n ANTIGRAVITY_PLUGIN_FILES,\n ANTIGRAVITY_RUNTIME_SKILLS_TARGET_DIR,\n CLAUDE_TEMPLATE,\n CODEX_CONFIG_SOURCE,\n COPILOT_INSTRUCTION_FILES,\n CURSOR_ADAPTER_FILES,\n CURSOR_SCOPED_ADAPTER_FILES,\n RUNTIME_SKILLS_SOURCE_DIR\n} from \"../config/defaults.js\";\nimport { copyTextWithConflict, ensureDir, listFilesRecursive, writeText } from \"../utils/fs.js\";\nimport { findPackageRoot } from \"../utils/package-root.js\";\nimport { generateCodexCustomAgents, generateCursorSkillsFromKit, generateCursorSubagents, generateMarkdownSubagents } from \"./roster-adapters.js\";\n\nexport type IdeTarget = \"cursor\" | \"claude\" | \"codex\" | \"copilot\" | \"antigravity\";\n\nexport interface ActivateIdeOptions {\n cwd: string;\n targets: Array<IdeTarget | \"all\">;\n force?: boolean;\n}\n\nexport interface ActivateIdeResult {\n activated: IdeTarget[];\n copied: string[];\n unchanged: string[];\n conflicts: string[];\n overwritten: string[];\n}\n\nfunction normalizeTargets(targets: string[]): IdeTarget[] {\n const allowed = new Set<IdeTarget>([\"cursor\", \"claude\", \"codex\", \"copilot\", \"antigravity\"]);\n const normalized = new Set<IdeTarget>();\n for (const target of targets) {\n const value = target.trim().toLowerCase();\n if (value === \"all\") {\n for (const item of allowed) normalized.add(item);\n continue;\n }\n if (allowed.has(value as IdeTarget)) normalized.add(value as IdeTarget);\n }\n return [...normalized];\n}\n\nfunction copyAdapterFile(cwd: string, packageRoot: string, source: string, target: string, force: boolean, result: ActivateIdeResult): void {\n const copyResult = copyTextWithConflict(join(packageRoot, source), cwd, target, {\n force,\n conflictRoot: join(cwd, \".agent-kit\", \"conflicts\")\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\nfunction generateClaudeSubagents(cwd: string, packageRoot: string, force: boolean, result: ActivateIdeResult): void {\n generateMarkdownSubagents(cwd, \".claude/agents\", { proactive: false, force, result });\n copyAdapterFile(cwd, packageRoot, CLAUDE_TEMPLATE, \"CLAUDE.md\", force, result);\n}\n\nfunction copyDirectoryAsConflicts(cwd: string, packageRoot: string, sourceDir: string, targetDir: string, force: boolean, result: ActivateIdeResult): void {\n for (const file of listFilesRecursive(join(packageRoot, sourceDir))) {\n copyAdapterFile(cwd, packageRoot, join(sourceDir, file), join(targetDir, file).replace(/\\\\/g, \"/\"), force, result);\n }\n}\n\nfunction installAntigravityAdapter(cwd: string, packageRoot: string, force: boolean, result: ActivateIdeResult): void {\n ensureDir(join(cwd, \".antigravity\", \"agent-kit\", \"commands\"));\n ensureDir(join(cwd, \".antigravity\", \"runtime-skills\"));\n\n for (const file of ANTIGRAVITY_PLUGIN_FILES) {\n copyAdapterFile(cwd, packageRoot, file.source, file.target, force, result);\n }\n\n copyDirectoryAsConflicts(cwd, packageRoot, ANTIGRAVITY_COMMANDS_SOURCE_DIR, ANTIGRAVITY_COMMANDS_TARGET_DIR, force, result);\n copyDirectoryAsConflicts(cwd, packageRoot, RUNTIME_SKILLS_SOURCE_DIR, ANTIGRAVITY_RUNTIME_SKILLS_TARGET_DIR, force, result);\n}\n\nfunction updateAssistantAdaptersTable(cwd: string, activated: Set<IdeTarget>): void {\n const path = join(cwd, \"ASSISTANT_ADAPTERS.md\");\n if (!existsSync(path)) return;\n let content = readFileSync(path, \"utf8\");\n const today = new Date().toISOString().slice(0, 10);\n\n if (activated.has(\"cursor\") && content.includes(\"| Cursor |\")) {\n content = content.replace(\n /\\| Cursor \\|[^|]*\\|[^|]*\\|[^|]*\\|[^|]*\\|[^|]*\\|[^|]*\\|/,\n `| Cursor | \\`.cursor/rules/*.mdc\\`, \\`.cursor/agents/*.md\\`, \\`.cursor/skills/*/SKILL.md\\` | Active | Partial | Partial | \\`agent-kit init --activate cursor\\` on ${today}; verify subagents in Cursor. | Delegate to council subagents instead of role-playing; run \\`agent-kit adapter validate cursor\\`. |`\n );\n }\n\n if (activated.has(\"copilot\") && content.includes(\"| GitHub Copilot\")) {\n content = content.replace(\n /\\| GitHub Copilot[^|]*\\|[^|]*\\|[^|]*\\|[^|]*\\|[^|]*\\|[^|]*\\|[^|]*\\|/,\n `| GitHub Copilot / VS Code | \\`.github/copilot-instructions.md\\` and \\`.github/instructions/next-supabase.instructions.md\\` | Active | Advisory | Advisory | \\`agent-kit init --activate copilot\\` on ${today}. | Copilot loads repository and path-specific instructions automatically in VS Code. |`\n );\n }\n\n if (activated.has(\"claude\") && content.includes(\"| Claude Code |\")) {\n content = content.replace(\n /\\| Claude Code \\|[^|]*\\|[^|]*\\|[^|]*\\|[^|]*\\|[^|]*\\|[^|]*\\|/,\n `| Claude Code | \\`.claude/agents/*.md\\` and \\`CLAUDE.md\\` | Active | Partial | Partial | \\`agent-kit init --activate claude\\` generated subagents on ${today}. | Subagents generated from \\`.agent-kit/agent-roster.json\\`; verify in Claude Code project settings. |`\n );\n }\n\n if (activated.has(\"codex\") && content.includes(\"| Codex / AGENTS.md-compatible tools |\")) {\n content = content.replace(\n /\\| Codex \\/ AGENTS\\.md-compatible tools \\|[^|]*\\|[^|]*\\|[^|]*\\|[^|]*\\|[^|]*\\|[^|]*\\|/,\n `| Codex / AGENTS.md-compatible tools | \\`AGENTS.md\\`, \\`.codex/config.toml\\`, \\`.codex/agents/*.toml\\` | Active | Partial | Partial | \\`agent-kit init --activate codex\\` on ${today}. | Spawn council custom agents from \\`.codex/agents/\\`; run \\`agent-kit adapter validate codex\\`. |`\n );\n }\n\n if (activated.has(\"antigravity\") && content.includes(\"| Antigravity |\")) {\n content = content.replace(\n /\\| Antigravity \\|[^|]*\\|[^|]*\\|[^|]*\\|[^|]*\\|[^|]*\\|[^|]*\\|/,\n `| Antigravity | \\`.antigravity/agent-kit/plugin.json\\`, \\`.antigravity/agent-kit/commands/*.toml\\`, \\`.antigravity/runtime-skills/*/SKILL.md\\` | Active | Advisory | Advisory | \\`agent-kit init --activate antigravity\\` on ${today}; run \\`agent-kit adapter validate antigravity\\`. | Native commands wrap the Agent Kit council/session contract; runtime validation is structural unless \\`agy\\` is installed. |`\n );\n }\n\n writeText(path, content);\n}\n\nexport function parseActivateTargets(raw: string[] | undefined): IdeTarget[] {\n if (!raw || raw.length === 0) return [];\n return normalizeTargets(raw.flatMap((value) => value.split(\",\")));\n}\n\nexport function activateIdeTargets(options: ActivateIdeOptions): ActivateIdeResult {\n const cwd = options.cwd;\n const packageRoot = findPackageRoot();\n const targets = normalizeTargets(options.targets);\n const force = Boolean(options.force);\n const result: ActivateIdeResult = {\n activated: targets,\n copied: [],\n unchanged: [],\n conflicts: [],\n overwritten: []\n };\n\n if (targets.length === 0) return result;\n\n const activated = new Set<IdeTarget>(targets);\n\n if (activated.has(\"cursor\")) {\n for (const adapter of CURSOR_ADAPTER_FILES) {\n copyAdapterFile(cwd, packageRoot, adapter.source, adapter.target, force, result);\n }\n for (const adapter of CURSOR_SCOPED_ADAPTER_FILES) {\n copyAdapterFile(cwd, packageRoot, adapter.source, adapter.target, force, result);\n }\n generateCursorSubagents(cwd, force, result);\n generateCursorSkillsFromKit(cwd, force, result);\n }\n\n if (activated.has(\"copilot\")) {\n ensureDir(join(cwd, \".github\", \"instructions\"));\n for (const file of COPILOT_INSTRUCTION_FILES) {\n copyAdapterFile(cwd, packageRoot, file.source, file.target, force, result);\n }\n }\n\n if (activated.has(\"claude\")) {\n generateClaudeSubagents(cwd, packageRoot, force, result);\n }\n\n if (activated.has(\"codex\")) {\n ensureDir(join(cwd, \".codex\"));\n copyAdapterFile(cwd, packageRoot, CODEX_CONFIG_SOURCE, \".codex/config.toml\", force, result);\n generateCodexCustomAgents(cwd, force, result);\n }\n\n if (activated.has(\"antigravity\")) {\n installAntigravityAdapter(cwd, packageRoot, force, result);\n }\n\n updateAssistantAdaptersTable(cwd, activated);\n\n return result;\n}\n\nexport function ideSurfaceToActivateTarget(ideSurface: string): IdeTarget | null {\n const value = ideSurface.trim().toLowerCase();\n if (value === \"cursor\" || value === \"claude\" || value === \"codex\" || value === \"copilot\") {\n return value;\n }\n return null;\n}\n","import { existsSync, readFileSync, readdirSync } from \"node:fs\";\nimport { join } from \"node:path\";\nimport { ensureDir, writeText } from \"../utils/fs.js\";\nimport { loadProjectRosterAgents, type RosterAgent } from \"../studio/wizard/roster.js\";\nimport type { ActivateIdeResult } from \"./ide-activate.js\";\n\nexport const CANONICAL_READ_LIST =\n \"`AGENTS.md`, `AGENT_ROSTER.md`, `.agent-kit/agent-roster.json`, `MODEL_ROUTING.md`, `.agent-kit/model-routing.json`, `.agent-kit/project-context.json`, `.agent-kit/project-context.md`, `.agent-kit/agent-briefs.md` when present, `.agent-kit/corrections/project-rules.json`, `.agent-kit/corrections/agent-rules.json`, `COUNCIL.md`, `.agent-kit/council-sessions/`, and `QUALITY_GATES.md`\";\n\ntype ReasoningEffort = \"low\" | \"medium\" | \"high\";\n\n/** Quote a value for YAML frontmatter scalar fields. */\nexport function quoteYamlScalar(value: string): string {\n return JSON.stringify(value);\n}\n\nfunction buildAgentHint(agentId: string, name: string): string {\n if (agentId === \"planner\") return \"Start with the Planner workflow.\";\n if (agentId === \"lead-architect\") return \"Convene council for core changes before implementation.\";\n if (agentId === \"frontend-design-lead\") {\n return \"Require brand/content intake, creative-direction rationale, and visual QA evidence for UI changes.\";\n }\n if (agentId === \"security-reviewer\") {\n return \"Review auth, RLS, data mutation, dependency, external-call, secret, and release-risk changes.\";\n }\n return `Use for ${name.toLowerCase()} work defined in the roster.`;\n}\n\nfunction buildProactiveSuffix(agentId: string): string {\n const suffixes: Record<string, string> = {\n planner: \"Use proactively for planning, scope breakdown, ambiguous requests, and workflow routing.\",\n \"lead-architect\": \"Use proactively for core changes, architecture, and cross-layer decisions.\",\n \"security-reviewer\": \"Use proactively for auth, RLS, API, Server Action, data mutation, dependency, secret, and release-risk changes.\",\n \"frontend-design-lead\": \"Use proactively for UI, design system, accessibility, and visual QA work.\",\n \"qa-engineer\": \"Use proactively after behavior changes to add or verify tests and acceptance evidence.\",\n \"supabase-postgres-engineer\": \"Use proactively for schema, migrations, RLS, auth, and SQL changes.\",\n \"nextjs-engineer\": \"Use proactively for App Router, Server Components, route handlers, and UI state work.\",\n \"marketing-copy-lead\": \"Use proactively for public-facing copy, positioning, and conversion surfaces.\",\n \"docs-maintainer\": \"Use proactively after significant changes to update living documentation.\",\n \"deployment-observability-engineer\": \"Use proactively for release, env var, migration order, monitoring, and rollback work.\"\n };\n return suffixes[agentId] ?? \"\";\n}\n\nexport function buildSubagentDescription(agent: RosterAgent, proactive: boolean): string {\n const base = agent.roleSummary.length > 140 ? `${agent.roleSummary.slice(0, 137)}...` : agent.roleSummary;\n if (!proactive) return base;\n const suffix = buildProactiveSuffix(agent.id);\n return suffix ? `${base} ${suffix}` : base;\n}\n\nexport function buildSubagentMarkdown(agent: RosterAgent, options: { proactive?: boolean } = {}): string {\n const description = buildSubagentDescription(agent, Boolean(options.proactive));\n const agentFile = agent.file ?? `.agent-kit/agents/${agent.id}.md`;\n const hint = buildAgentHint(agent.id, agent.name);\n\n return `---\nname: ${quoteYamlScalar(agent.id)}\ndescription: ${quoteYamlScalar(description)}\n---\n\nRead ${CANONICAL_READ_LIST} before making routing or implementation decisions.\n\nAlso read \\`${agentFile}\\` for this role's detailed contract.\n\n${hint}\n\nFor council work, delegate to this subagent instead of role-playing the council in the main thread.\n\nRecord meaningful decisions, risks, handoffs, human corrections, artifacts, evidence, and verification through \\`agent-kit session checkpoint\\` or individual \\`agent-kit session ...\\` commands when available.\n`;\n}\n\nfunction writeGeneratedAgentFile(cwd: string, relativePath: string, content: string, force: boolean, result: ActivateIdeResult): void {\n const targetPath = join(cwd, relativePath);\n if (!force && existsSync(targetPath)) {\n const existing = readFileSync(targetPath, \"utf8\");\n if (existing === content) {\n result.unchanged.push(relativePath);\n return;\n }\n const conflictPath = join(cwd, \".agent-kit\", \"conflicts\", relativePath.replace(/\\//g, \"__\"));\n ensureDir(join(cwd, \".agent-kit\", \"conflicts\"));\n writeText(conflictPath, existing);\n result.conflicts.push(`${relativePath} -> ${conflictPath}`);\n return;\n }\n ensureDir(join(cwd, relativePath.split(\"/\").slice(0, -1).join(\"/\")));\n writeText(targetPath, content);\n result.copied.push(relativePath);\n}\n\nexport function generateMarkdownSubagents(cwd: string, agentsDir: string, options: { proactive?: boolean; force: boolean; result: ActivateIdeResult }): void {\n ensureDir(join(cwd, agentsDir));\n for (const agent of loadProjectRosterAgents(cwd)) {\n const relativePath = `${agentsDir}/${agent.id}.md`;\n writeGeneratedAgentFile(cwd, relativePath, buildSubagentMarkdown(agent, options), options.force, options.result);\n }\n}\n\nconst CURSOR_AGENTS_README = `# Cursor council subagents\n\nProject subagents generated from \\`.agent-kit/agent-roster.json\\`. Use them for isolated specialist context instead of role-playing the whole council in one chat.\n\n## Delegation\n\n| Risk / work type | Subagent |\n| --- | --- |\n| Planning / scope | \\`@planner\\` |\n| Core architecture | \\`@lead-architect\\` |\n| Auth / RLS / secrets | \\`@security-reviewer\\` or Task \\`security-review\\` |\n| Frontend UI | \\`@frontend-design-lead\\` |\n| QA / tests | \\`@qa-engineer\\` |\n\nRecord handoffs with \\`agent-kit session checkpoint --file <json>\\` when the CLI is available.\n\nRegenerate with \\`agent-kit init --activate cursor\\` after roster changes.\n`;\n\nexport function generateCursorSubagents(cwd: string, force: boolean, result: ActivateIdeResult): void {\n generateMarkdownSubagents(cwd, \".cursor/agents\", { proactive: true, force, result });\n writeGeneratedAgentFile(cwd, \".cursor/agents/README.md\", CURSOR_AGENTS_README, force, result);\n}\n\nexport function loadAgentReasoningEffortMap(cwd: string): Map<string, ReasoningEffort> {\n const path = join(cwd, \".agent-kit/model-routing.json\");\n const map = new Map<string, ReasoningEffort>();\n if (!existsSync(path)) return map;\n\n try {\n const parsed = JSON.parse(readFileSync(path, \"utf8\")) as {\n agentRoutes?: Array<{ agentId?: string; defaultEffort?: string; profileId?: string }>;\n profiles?: Array<{ id?: string; reasoningEffort?: string }>;\n };\n const profileEffort = new Map<string, ReasoningEffort>();\n for (const profile of parsed.profiles ?? []) {\n if (profile.id && profile.reasoningEffort) {\n const effort = profile.reasoningEffort as ReasoningEffort;\n if (effort === \"low\" || effort === \"medium\" || effort === \"high\") {\n profileEffort.set(profile.id, effort);\n }\n }\n }\n for (const binding of parsed.agentRoutes ?? []) {\n if (!binding.agentId) continue;\n const direct = binding.defaultEffort as ReasoningEffort | undefined;\n if (direct === \"low\" || direct === \"medium\" || direct === \"high\") {\n map.set(binding.agentId, direct);\n continue;\n }\n if (binding.profileId && profileEffort.has(binding.profileId)) {\n map.set(binding.agentId, profileEffort.get(binding.profileId)!);\n }\n }\n } catch {\n return map;\n }\n return map;\n}\n\nfunction escapeTomlString(value: string): string {\n return value.replace(/\\\\/g, \"\\\\\\\\\").replace(/\"/g, '\\\\\"');\n}\n\nexport function buildCodexAgentToml(agent: RosterAgent, effort: ReasoningEffort): string {\n const description = buildSubagentDescription(agent, true);\n const agentFile = agent.file ?? `.agent-kit/agents/${agent.id}.md`;\n const hint = buildAgentHint(agent.id, agent.name);\n const instructions = [\n `Read AGENTS.md, AGENT_ROSTER.md, .agent-kit/agent-roster.json, MODEL_ROUTING.md,`,\n `.agent-kit/model-routing.json, project context, corrections, COUNCIL.md, QUALITY_GATES.md,`,\n `and ${agentFile} before reviewing or implementing.`,\n \"\",\n hint,\n \"\",\n \"Record meaningful decisions, risks, handoffs, and verification through agent-kit session checkpoint when available.\"\n ].join(\"\\n\");\n\n return `name = \"${agent.id}\"\ndescription = \"${escapeTomlString(description)}\"\n# model = \"gpt-5.5\" # verify in your Codex environment; see MODEL_ROUTING.md\nmodel_reasoning_effort = \"${effort}\"\n\ndeveloper_instructions = \"\"\"\n${instructions}\n\"\"\"\n`;\n}\n\nexport function generateCodexCustomAgents(cwd: string, force: boolean, result: ActivateIdeResult): void {\n ensureDir(join(cwd, \".codex/agents\"));\n const effortMap = loadAgentReasoningEffortMap(cwd);\n for (const agent of loadProjectRosterAgents(cwd)) {\n const effort = effortMap.get(agent.id) ?? \"medium\";\n const relativePath = `.codex/agents/${agent.id}.toml`;\n writeGeneratedAgentFile(cwd, relativePath, buildCodexAgentToml(agent, effort), force, result);\n }\n}\n\nfunction skillDescriptionFromMarkdown(text: string, skillId: string): string {\n const useWhen = text.match(/## Use When\\s*\\n+\\s*([^\\n#]+)/);\n if (useWhen?.[1]) return useWhen[1].trim().slice(0, 200);\n const firstHeading = text.match(/^#\\s+(.+)/m);\n if (firstHeading?.[1]) return `${firstHeading[1].trim()} — Agent Kit council skill.`;\n return `Agent Kit skill for ${skillId.replace(/-/g, \" \")}.`;\n}\n\nfunction kitSkillToCursorSkill(skillId: string, kitMarkdown: string): string {\n const description = skillDescriptionFromMarkdown(kitMarkdown, skillId);\n const body = kitMarkdown.replace(/^#\\s+.+\\n+/, \"\").trimStart();\n return `---\nname: ${quoteYamlScalar(skillId)}\ndescription: ${quoteYamlScalar(description)}\n---\n\n${body.trim()}\n`;\n}\n\nexport function generateCursorSkillsFromKit(cwd: string, force: boolean, result: ActivateIdeResult): void {\n const skillsRoot = join(cwd, \".agent-kit/skills\");\n if (!existsSync(skillsRoot)) return;\n\n for (const file of readdirSync(skillsRoot).filter((name) => name.endsWith(\".md\"))) {\n const skillId = file.replace(/\\.md$/, \"\");\n const kitMarkdown = readFileSync(join(skillsRoot, file), \"utf8\");\n const relativePath = `.cursor/skills/${skillId}/SKILL.md`;\n writeGeneratedAgentFile(cwd, relativePath, kitSkillToCursorSkill(skillId, kitMarkdown), force, result);\n }\n}\n\nexport { assistantAdapterRowIsActive } from \"./assistant-adapters-table.js\";\n","import { existsSync, readFileSync } from \"node:fs\";\nimport { join } from \"node:path\";\nimport { readJsonFile } from \"../shared.js\";\nimport type { WizardDepth } from \"./steps.js\";\n\nexport interface RosterAgent {\n id: string;\n name: string;\n roleSummary: string;\n file?: string;\n}\n\nexport interface AgentWizardStep {\n id: string;\n section: \"team\";\n title: string;\n why: string;\n fields: string[];\n agentId: string;\n agentName: string;\n roleSummary: string;\n depth: WizardDepth[];\n optional: true;\n}\n\nconst AGENT_ROSTER_JSON = \".agent-kit/agent-roster.json\";\n\nconst FALLBACK_SUMMARIES: Record<string, string> = {\n planner: \"Owns planning, scope breakdown, sequencing, and council routing before implementation starts.\",\n \"lead-architect\": \"Owns architecture, affected-layer mapping, tradeoffs, and final delivery direction.\",\n \"supabase-postgres-engineer\": \"Owns Supabase Auth, SSR clients, schema, migrations, RLS, Storage policies, SQL functions, and indexes.\",\n \"nextjs-engineer\": \"Owns App Router implementation, rendering boundaries, data loading, forms, and UI state.\",\n \"frontend-design-lead\":\n \"Prevents generic AI-looking UI by owning content-first creative direction, design-system quality, visual QA, accessibility, and screenshot acceptance.\",\n \"marketing-copy-lead\": \"Owns positioning, value proposition, conversion copy, product voice, and UX copy for public-facing surfaces.\",\n \"security-reviewer\": \"Reviews implementation against OWASP Top 10 and project-specific auth/data boundaries.\",\n \"qa-engineer\": \"Owns tests, regression coverage, smoke checks, and acceptance evidence.\",\n \"docs-maintainer\": \"Keeps living docs accurate enough for another engineer or agent to continue safely.\",\n \"deployment-observability-engineer\": \"Owns release safety, environment configuration, migrations, logs, monitoring, and rollback.\",\n \"research-analyst\": \"Owns open-source repo research and conversion of evidence into reusable kit improvements.\"\n};\n\nfunction readPurposeFromAgentFile(cwd: string, relPath: string | undefined): string | null {\n if (!relPath) return null;\n const path = join(cwd, relPath);\n if (!existsSync(path)) return null;\n const text = readFileSync(path, \"utf8\");\n const match = text.match(/## Purpose\\s*\\n+\\s*([^\\n#]+)/);\n return match?.[1]?.trim() ?? null;\n}\n\nexport function loadProjectRosterAgents(cwd: string): RosterAgent[] {\n const roster = readJsonFile<{ agents?: Array<{ id: string; name?: string; file?: string }> }>(cwd, AGENT_ROSTER_JSON);\n const agents = roster?.agents ?? [];\n if (agents.length === 0) {\n return Object.entries(FALLBACK_SUMMARIES).map(([id, roleSummary]) => ({\n id,\n name: id\n .split(\"-\")\n .map((part) => part.charAt(0).toUpperCase() + part.slice(1))\n .join(\" \"),\n roleSummary\n }));\n }\n return agents.map((agent) => {\n const fromFile = readPurposeFromAgentFile(cwd, agent.file);\n return {\n id: agent.id,\n name: agent.name ?? agent.id,\n roleSummary: fromFile ?? FALLBACK_SUMMARIES[agent.id] ?? \"Specialist agent on your project council.\",\n ...(agent.file ? { file: agent.file } : {})\n };\n });\n}\n\nexport function buildAgentWizardSteps(cwd: string): AgentWizardStep[] {\n const agents = loadProjectRosterAgents(cwd);\n const depths: WizardDepth[] = [\"quick\", \"standard\", \"complete\", \"undecided\"];\n return [\n {\n id: \"team-intro\",\n section: \"team\",\n title: \"Meet your agent team\",\n why: \"These specialists already know their craft. Brief them like freelancers you just hired — what is unique about this project?\",\n fields: [],\n agentId: \"\",\n agentName: \"\",\n roleSummary: \"\",\n depth: depths,\n optional: true as const\n },\n ...agents.map((agent): AgentWizardStep => ({\n id: `brief-${agent.id}`,\n section: \"team\",\n title: `Brief ${agent.name}`,\n why: `${agent.roleSummary} What should they know about this project that is not obvious from the repo?`,\n fields: [`agentBrief_${agent.id}`],\n agentId: agent.id,\n agentName: agent.name,\n roleSummary: agent.roleSummary,\n depth: depths,\n optional: true\n }))\n ];\n}\n\nexport function agentBriefFieldName(agentId: string): string {\n return `agentBrief_${agentId}`;\n}\n\nexport function parseAgentBriefFieldName(field: string): string | null {\n if (!field.startsWith(\"agentBrief_\")) return null;\n return field.slice(\"agentBrief_\".length);\n}\n","/** Extract a markdown table row from ASSISTANT_ADAPTERS.md by tool label in the first column. */\nexport function extractAssistantAdapterRow(adaptersDoc: string, toolLabel: string): string | null {\n for (const line of adaptersDoc.split(\"\\n\")) {\n const trimmed = line.trim();\n if (!trimmed.startsWith(\"|\")) continue;\n const cells = trimmed\n .split(\"|\")\n .map((cell) => cell.trim())\n .filter((cell) => cell.length > 0);\n if (cells[0] === toolLabel) return trimmed;\n }\n return null;\n}\n\n/** True when the Instruction status column (3rd cell) is Active and not TBD. */\nexport function assistantAdapterRowIsActive(adaptersDoc: string, toolLabel: string): boolean {\n const row = extractAssistantAdapterRow(adaptersDoc, toolLabel);\n if (!row) return false;\n const cells = row\n .split(\"|\")\n .map((cell) => cell.trim())\n .filter((cell) => cell.length > 0);\n const instructionStatus = cells[2] ?? \"\";\n return /^Active/i.test(instructionStatus) && !/^TBD/i.test(instructionStatus);\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 { existsSync, readFileSync } from \"node:fs\";\nimport { join, relative } from \"node:path\";\nimport {\n CURSOR_ADAPTER_FILES,\n DEFAULT_AGENT_ROSTER_SOURCE,\n DEFAULT_AGENT_ROSTER_TARGET,\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 } from \"../config/types.js\";\nimport { copyDirectory, ensureDir, resolveInside, sha256, writeText } from \"../utils/fs.js\";\nimport { findPackageRoot } from \"../utils/package-root.js\";\nimport { initProject, readManifest } from \"./install.js\";\n\nexport type UpdateAction = \"created\" | \"updated\" | \"unchanged\" | \"kept-local\" | \"conflict\" | \"overwritten\";\n\nexport interface UpdateFileResult {\n target: string;\n action: UpdateAction;\n conflictPath?: string;\n reason: string;\n}\n\nexport interface UpdateResult {\n dryRun: boolean;\n files: UpdateFileResult[];\n libraryFoldersRefreshed: string[];\n manifestPath: string;\n summary: Record<UpdateAction, number>;\n}\n\nexport interface UpdateOptions {\n cwd: string;\n force?: boolean;\n dryRun?: boolean;\n}\n\ninterface PlanInput {\n target: string;\n sourcePath: string;\n installedHash: string | undefined;\n force: boolean;\n}\n\nfunction planFileUpdate(cwd: string, input: PlanInput): UpdateFileResult & { sourceContent: string } {\n const sourceContent = readFileSync(input.sourcePath, \"utf8\");\n const sourceHash = sha256(sourceContent);\n const targetPath = resolveInside(cwd, input.target);\n\n if (!existsSync(targetPath)) {\n return { target: input.target, action: \"created\", reason: \"File is missing locally.\", sourceContent };\n }\n\n const localHash = sha256(readFileSync(targetPath, \"utf8\"));\n\n if (localHash === sourceHash) {\n return { target: input.target, action: \"unchanged\", reason: \"File already matches the current template.\", sourceContent };\n }\n\n // Pristine install of an older template: safe to auto-update.\n if (input.installedHash && localHash === input.installedHash) {\n return { target: input.target, action: \"updated\", reason: \"File was unmodified since install; applied the newer template.\", sourceContent };\n }\n\n if (input.force) {\n return { target: input.target, action: \"overwritten\", reason: \"Local changes overwritten because --force was used.\", sourceContent };\n }\n\n // Locally modified. If the bundled template did not change, keep local edits silently.\n if (input.installedHash && input.installedHash === sourceHash) {\n return { target: input.target, action: \"kept-local\", reason: \"File is locally customized and the template has not changed.\", sourceContent };\n }\n\n return {\n target: input.target,\n action: \"conflict\",\n reason: \"File is locally customized and the bundled template changed; review the conflict copy.\",\n sourceContent\n };\n}\n\nfunction writeConflictCopy(cwd: string, target: string, content: string): string {\n const conflictRoot = join(cwd, \".agent-kit\", \"conflicts\");\n const safeName = `${Date.now()}-${target.replace(/[^a-zA-Z0-9_.-]/g, \"_\")}`;\n const conflictPath = join(conflictRoot, safeName);\n writeText(conflictPath, content);\n return relative(cwd, conflictPath).replace(/\\\\/g, \"/\");\n}\n\nexport function updateProject(options: UpdateOptions): UpdateResult {\n const cwd = options.cwd;\n const force = Boolean(options.force);\n const dryRun = Boolean(options.dryRun);\n const manifest = readManifest(cwd);\n\n if (!manifest) {\n // No previous install: update degrades to a fresh conflict-safe init.\n if (dryRun) {\n throw new Error(\"No .agent-kit/manifest.json found. Run agent-kit init first (or run update without --dry-run to install).\");\n }\n const initResult = initProject({ cwd, force });\n const files: UpdateFileResult[] = [\n ...initResult.copied.map((target): UpdateFileResult => ({ target, action: \"created\", reason: \"Installed by init fallback.\" })),\n ...initResult.unchanged.map((target): UpdateFileResult => ({ target, action: \"unchanged\", reason: \"Already matched the template.\" })),\n ...initResult.overwritten.map((target): UpdateFileResult => ({ target, action: \"overwritten\", reason: \"Overwritten by init --force fallback.\" })),\n ...initResult.conflicts.map((entry): UpdateFileResult => {\n const [target, conflictPath] = entry.split(\" -> \");\n return {\n target: target ?? entry,\n action: \"conflict\",\n reason: \"Local file differed from the template during init fallback.\",\n ...(conflictPath ? { conflictPath } : {})\n };\n })\n ];\n return {\n dryRun,\n files,\n libraryFoldersRefreshed: [...LIBRARY_FOLDERS],\n manifestPath: \".agent-kit/manifest.json\",\n summary: summarize(files)\n };\n }\n\n const packageRoot = findPackageRoot();\n const stack = manifest.stack ?? \"next-supabase\";\n const templateRoot = join(packageRoot, \"templates\", stack);\n if (!existsSync(templateRoot)) {\n throw new Error(`Unsupported stack profile in manifest: ${stack}`);\n }\n\n const files: UpdateFileResult[] = [];\n const templateHashes: Record<string, string> = {};\n\n const plans: Array<UpdateFileResult & { sourceContent: string }> = [];\n\n for (const doc of ROOT_DOCS) {\n const sourcePath = join(templateRoot, doc);\n templateHashes[doc] = sha256(readFileSync(sourcePath, \"utf8\"));\n plans.push(\n planFileUpdate(cwd, {\n target: doc,\n sourcePath,\n installedHash: manifest.templateHashes?.[doc],\n force\n })\n );\n }\n\n for (const adapter of CURSOR_ADAPTER_FILES) {\n plans.push(\n planFileUpdate(cwd, {\n target: adapter.target,\n sourcePath: join(packageRoot, adapter.source),\n installedHash: undefined,\n force\n })\n );\n }\n\n plans.push(\n planFileUpdate(cwd, {\n target: DEFAULT_AGENT_ROSTER_TARGET,\n sourcePath: join(packageRoot, DEFAULT_AGENT_ROSTER_SOURCE),\n installedHash: undefined,\n force\n }),\n planFileUpdate(cwd, {\n target: DEFAULT_MODEL_ROUTING_TARGET,\n sourcePath: join(packageRoot, DEFAULT_MODEL_ROUTING_SOURCE),\n installedHash: undefined,\n force\n })\n );\n\n for (const plan of plans) {\n const { sourceContent, ...fileResult } = plan;\n if (!dryRun) {\n if (plan.action === \"created\" || plan.action === \"updated\" || plan.action === \"overwritten\") {\n writeText(resolveInside(cwd, plan.target), sourceContent);\n } else if (plan.action === \"conflict\") {\n fileResult.conflictPath = writeConflictCopy(cwd, plan.target, sourceContent);\n }\n }\n files.push(fileResult);\n }\n\n if (!dryRun) {\n ensureDir(join(cwd, \".agent-kit\"));\n for (const folder of LIBRARY_FOLDERS) {\n copyDirectory(join(packageRoot, folder), join(cwd, \".agent-kit\", folder));\n }\n\n const updatedManifest: InstallManifest = {\n packageName: PACKAGE_NAME,\n packageVersion: PACKAGE_VERSION,\n stack,\n installedAt: manifest.installedAt,\n updatedAt: 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 writeText(join(cwd, \".agent-kit\", \"manifest.json\"), `${JSON.stringify(updatedManifest, null, 2)}\\n`);\n }\n\n return {\n dryRun,\n files,\n libraryFoldersRefreshed: [...LIBRARY_FOLDERS],\n manifestPath: \".agent-kit/manifest.json\",\n summary: summarize(files)\n };\n}\n\nfunction summarize(files: UpdateFileResult[]): Record<UpdateAction, number> {\n const summary: Record<UpdateAction, number> = {\n created: 0,\n updated: 0,\n unchanged: 0,\n \"kept-local\": 0,\n conflict: 0,\n overwritten: 0\n };\n for (const file of files) summary[file.action] += 1;\n return summary;\n}\n","import { Octokit } from \"@octokit/rest\";\nimport { 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 as unknown as Record<string, number>).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 as unknown as Record<string, number>).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\nconst VALID_CORRECTION_SCOPES = [\"session\", \"project\", \"agent\", \"upstream-proposal\"] as const;\n\nfunction parseCorrectionScope(scope: unknown): CorrectionRuleContractValue[\"scope\"] {\n if (typeof scope === \"string\" && (VALID_CORRECTION_SCOPES as readonly string[]).includes(scope)) {\n return scope as CorrectionRuleContractValue[\"scope\"];\n }\n throw new Error(`Invalid correction scope: expected one of ${VALID_CORRECTION_SCOPES.join(\", \")}`);\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 const scope = parseCorrectionScope(options.scope);\n ensureCorrectionFiles(cwd);\n const targetPath = fileForScope(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,\n status: 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, 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;\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 {\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 projectName?: string;\n productSummary?: string;\n primaryAudience?: string;\n qualityTarget?: string;\n architecture?: { frameworks?: string[]; testTools?: string[]; hasSupabase?: boolean };\n openQuestions?: string[];\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(\n (rule) =>\n `<tr><td>${escapeHtml(rule.scope)}</td><td>${escapeHtml(rule.agentId ?? rule.appliesToAgents?.join(\", \") ?? \"all\")}</td><td>${escapeHtml(rule.text)}</td></tr>`\n )\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(\n ([agent, events]) =>\n `<details class=\"agent-stream\"><summary>${escapeHtml(agent)} (${events.length})</summary><div class=\"stream-body\">${renderEventList(events)}</div></details>`\n )\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\")\n 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\n ? cleaned.map((value) => `<span class=\"pill\">${escapeHtml(value)}</span>`).join(\"\")\n : `<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, \"&amp;\")\n .replace(/</g, \"&lt;\")\n .replace(/>/g, \"&gt;\")\n .replace(/\"/g, \"&quot;\")\n .replace(/'/g, \"&#39;\");\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).replace(/&/g, \"\\\\u0026\").replace(/</g, \"\\\\u003c\").replace(/>/g, \"\\\\u003e\");\n}\n","import { execFileSync } from \"node:child_process\";\n\nexport function openBrowser(url: string): void {\n const platform = process.platform;\n try {\n if (platform === \"darwin\") {\n execFileSync(\"open\", [url], { stdio: \"ignore\" });\n return;\n }\n if (platform === \"win32\") {\n execFileSync(\"cmd\", [\"/c\", \"start\", \"\", url], { stdio: \"ignore\" });\n return;\n }\n execFileSync(\"xdg-open\", [url], { stdio: \"ignore\" });\n } catch {\n console.log(`Open this URL in your browser: ${url}`);\n }\n}\n","import { createInterface } from \"node:readline\";\nimport type { InitResult } from \"../install/install.js\";\nimport { PACKAGE_NAME, PACKAGE_VERSION } from \"../config/defaults.js\";\n\nexport function formatInitSummary(result: InitResult): string {\n const lines = [\n `${PACKAGE_NAME} v${PACKAGE_VERSION} installed.`,\n \"\",\n `Created/updated: ${result.copied.length} file(s)`,\n `Unchanged: ${result.unchanged.length} file(s)`\n ];\n if (result.conflicts.length > 0) {\n lines.push(`Conflicts to review: ${result.conflicts.length} → see .agent-kit/conflicts/`);\n }\n if (result.contextPath) {\n lines.push(`Project context: ${result.contextPath}`);\n }\n if (result.activation?.activated.length) {\n lines.push(`IDE activation: ${result.activation.activated.join(\", \")}`);\n }\n if ([...result.copied, ...result.unchanged].some((path) => path.includes(\"agent-kit-audit.yml\"))) {\n lines.push(\"CI template: .github/workflows/agent-kit-audit.yml\");\n }\n lines.push(\"\", \"Next: teach agents about your project with the setup wizard (~5 min).\", \" agent-kit setup --open\");\n return lines.join(\"\\n\");\n}\n\nexport async function promptStartSetup(defaultYes = true): Promise<boolean> {\n if (!process.stdin.isTTY || !process.stdout.isTTY) return false;\n const rl = createInterface({ input: process.stdin, output: process.stdout });\n const question = defaultYes ? \"Start setup wizard now? [Y/n] \" : \"Start setup wizard now? [y/N] \";\n const answer = await new Promise<string>((resolve) => {\n rl.question(question, (value) => {\n rl.close();\n resolve(value.trim().toLowerCase());\n });\n });\n if (!answer) return defaultYes;\n if (defaultYes) return answer !== \"n\" && answer !== \"no\";\n return answer === \"y\" || answer === \"yes\";\n}\n","import { createServer, type IncomingMessage, type Server, type ServerResponse } from \"node:http\";\nimport { applySetupFormAnswers, ensureProjectContextForSetup, getSetupFormViewModel, parseSetupFormPayload } from \"./setup-form.js\";\nimport { getSetupProgress, loadOnboardingState, markQuickPathComplete, markSectionComplete, saveOnboardingState } from \"./onboarding-state.js\";\nimport { activateIdeTargets, ideSurfaceToActivateTarget } from \"../install/ide-activate.js\";\nimport { saveIdeChecklist, writeVisualQaTier, type IdeSurface } from \"./wizard/checklist.js\";\nimport { saveAgentBriefs } from \"./wizard/agent-briefs.js\";\nimport { buildWizardFormState, extractAgentBriefsFromForm, extractSetupFormFromWizardForm, loadWizardDraft, saveWizardDraft } from \"./wizard/wizard-draft.js\";\nimport { loadProjectRosterAgents } from \"./wizard/roster.js\";\nimport {\n applyDrafts,\n loadDesignDraft,\n loadMessagingDraft,\n previewDesignMarkdown,\n previewMessagingMarkdown,\n saveDesignDraft,\n saveMessagingDraft\n} from \"./wizard/drafts.js\";\nimport { renderSetupOfficeHtmlWithContext } from \"./office/render.js\";\nimport { buildOfficeStations } from \"./office/map.js\";\nimport { allAgentBriefsComplete, wizardSectionForStation } from \"./office/section-map.js\";\nimport type { OfficeStation } from \"./office/types.js\";\nimport { renderSetupWizardHtmlWithContext } from \"./wizard/render.js\";\nimport type { WizardDepth, WizardSectionId } from \"./wizard/steps.js\";\nimport { computeAgenticLevel, invalidateAgenticLevelCache, summarizeAdapterValidation } from \"./agentic-level.js\";\n\nexport interface SetupServerOptions {\n cwd: string;\n port?: number;\n host?: string;\n}\n\nexport interface SetupServerHandle {\n url: string;\n port: number;\n requestedPort: number;\n portFallback: boolean;\n defaultView: \"office\";\n close: () => Promise<void>;\n}\n\nconst DEFAULT_PORT = 9321;\nconst DEFAULT_HOST = \"127.0.0.1\";\n\nfunction readJsonBody(request: IncomingMessage): Promise<unknown> {\n return new Promise((resolve, reject) => {\n const chunks: Buffer[] = [];\n request.on(\"data\", (chunk: Buffer) => {\n chunks.push(chunk);\n if (chunks.reduce((total, item) => total + item.length, 0) > 256_000) {\n reject(new Error(\"Request body too large.\"));\n request.destroy();\n }\n });\n request.on(\"end\", () => {\n const raw = Buffer.concat(chunks).toString(\"utf8\").trim();\n if (!raw) {\n resolve({});\n return;\n }\n try {\n resolve(JSON.parse(raw) as unknown);\n } catch {\n reject(new Error(\"Request body must be valid JSON.\"));\n }\n });\n request.on(\"error\", reject);\n });\n}\n\nfunction sendJson(response: ServerResponse, statusCode: number, payload: unknown): void {\n response.writeHead(statusCode, {\n \"Content-Type\": \"application/json; charset=utf-8\",\n \"Cache-Control\": \"no-store\"\n });\n response.end(JSON.stringify(payload));\n}\n\nfunction sendHtml(response: ServerResponse, html: string): void {\n response.writeHead(200, {\n \"Content-Type\": \"text/html; charset=utf-8\",\n \"Cache-Control\": \"no-store\",\n \"Content-Security-Policy\":\n \"default-src 'none'; connect-src 'self'; style-src 'unsafe-inline'; script-src 'unsafe-inline'; img-src data:; base-uri 'none'; form-action 'self'\"\n });\n response.end(html);\n}\n\nfunction buildStatePayload(cwd: string, options: { forceAgenticRefresh?: boolean } = {}): Record<string, unknown> {\n ensureProjectContextForSetup(cwd);\n const viewModel = getSetupFormViewModel(cwd);\n const onboarding = loadOnboardingState(cwd);\n const progress = getSetupProgress(cwd);\n const designDraft = loadDesignDraft(cwd);\n const messagingDraft = loadMessagingDraft(cwd);\n const draft = loadWizardDraft(cwd);\n const agenticLevel = computeAgenticLevel(cwd, options.forceAgenticRefresh ? { forceRefresh: true } : {});\n return {\n projectName: viewModel.projectName,\n form: buildWizardFormState(cwd),\n hasExistingContext: Boolean(viewModel.form.productSummary.trim() || viewModel.form.primaryAudience.trim() || viewModel.form.valueProposition.trim()),\n openQuestions: viewModel.openQuestions,\n hasSupabase: viewModel.hasSupabase,\n onboarding,\n progress,\n agenticLevel,\n designDraft,\n messagingDraft,\n draftUpdatedAt: draft.updatedAt,\n agents: loadProjectRosterAgents(cwd),\n designPreview: designDraft ? previewDesignMarkdown(designDraft) : null,\n messagingPreview: messagingDraft ? previewMessagingMarkdown(messagingDraft) : null\n };\n}\n\nfunction sendRedirect(response: ServerResponse, location: string): void {\n response.writeHead(302, { Location: location, \"Cache-Control\": \"no-store\" });\n response.end();\n}\n\nfunction findOfficeStation(cwd: string, stationId: string): OfficeStation | undefined {\n const agents = loadProjectRosterAgents(cwd);\n return buildOfficeStations(agents).find((s) => s.id === stationId);\n}\n\nfunction markOfficeSectionComplete(cwd: string, stationId: string, form: Record<string, string>): void {\n const station = findOfficeStation(cwd, stationId);\n if (!station) return;\n const section = wizardSectionForStation(station);\n if (!section) return;\n if (section === \"team\") {\n const agentIds = loadProjectRosterAgents(cwd).map((a) => a.id);\n if (allAgentBriefsComplete(form, agentIds)) markSectionComplete(cwd, \"team\");\n return;\n }\n markSectionComplete(cwd, section);\n}\n\nasync function handleRequest(cwd: string, request: IncomingMessage, response: ServerResponse): Promise<void> {\n const url = new URL(request.url ?? \"/\", \"http://127.0.0.1\");\n\n if (request.method === \"GET\" && url.pathname === \"/setup/wizard\") {\n sendRedirect(response, \"/wizard\");\n return;\n }\n\n if (request.method === \"GET\" && (url.pathname === \"/\" || url.pathname === \"/office\" || url.pathname === \"/setup\")) {\n sendHtml(response, renderSetupOfficeHtmlWithContext(cwd));\n return;\n }\n\n if (request.method === \"GET\" && url.pathname === \"/wizard\") {\n sendHtml(response, renderSetupWizardHtmlWithContext(cwd));\n return;\n }\n\n if (request.method === \"GET\" && url.pathname === \"/api/state\") {\n sendJson(response, 200, buildStatePayload(cwd));\n return;\n }\n\n if (request.method === \"GET\" && url.pathname === \"/api/context\") {\n sendJson(response, 200, getSetupFormViewModel(cwd));\n return;\n }\n\n if (request.method === \"PATCH\" && url.pathname === \"/api/state\") {\n try {\n const body = (await readJsonBody(request)) as Record<string, unknown>;\n if (typeof body.completeSection === \"string\") {\n markSectionComplete(cwd, body.completeSection as WizardSectionId);\n }\n const patch: Record<string, unknown> = {};\n if (body.depth) patch.depth = body.depth as WizardDepth;\n if (body.currentSection) patch.currentSection = String(body.currentSection);\n if (typeof body.currentStep === \"number\") patch.currentStep = body.currentStep;\n if (Array.isArray(body.completedSections)) patch.completedSections = body.completedSections;\n if (typeof body.targetAgenticLevel === \"number\") patch.targetAgenticLevel = body.targetAgenticLevel;\n if (Object.keys(patch).length > 0) saveOnboardingState(cwd, patch);\n invalidateAgenticLevelCache(cwd);\n sendJson(response, 200, buildStatePayload(cwd, { forceAgenticRefresh: true }));\n } catch (error) {\n sendJson(response, 400, { error: error instanceof Error ? error.message : String(error) });\n }\n return;\n }\n\n if (request.method === \"POST\" && url.pathname === \"/api/context\") {\n try {\n const raw = (await readJsonBody(request)) as Record<string, unknown>;\n const payload = parseSetupFormPayload(extractSetupFormFromWizardForm(raw as Record<string, string>));\n const result = applySetupFormAnswers(cwd, payload);\n saveAgentBriefs(cwd, extractAgentBriefsFromForm(raw as Record<string, string>));\n markQuickPathComplete(cwd);\n invalidateAgenticLevelCache(cwd);\n sendJson(response, 200, {\n ...buildStatePayload(cwd, { forceAgenticRefresh: true }),\n saved: true,\n contextPath: result.contextPath,\n markdownPath: result.markdownPath,\n openQuestions: result.openQuestions\n });\n } catch (error) {\n sendJson(response, 400, { error: error instanceof Error ? error.message : String(error) });\n }\n return;\n }\n\n if (request.method === \"POST\" && url.pathname === \"/api/draft\") {\n try {\n const body = (await readJsonBody(request)) as {\n form?: Record<string, string>;\n stationId?: string;\n };\n const form = body.form ?? {};\n saveWizardDraft(cwd, {\n form: extractSetupFormFromWizardForm(form),\n agentBriefs: extractAgentBriefsFromForm(form)\n });\n if (body.stationId) markOfficeSectionComplete(cwd, body.stationId, form);\n sendJson(response, 200, buildStatePayload(cwd));\n } catch (error) {\n sendJson(response, 400, { error: error instanceof Error ? error.message : String(error) });\n }\n return;\n }\n\n if (request.method === \"POST\" && url.pathname === \"/api/context/import\") {\n try {\n const viewModel = getSetupFormViewModel(cwd);\n saveWizardDraft(cwd, { form: viewModel.form });\n sendJson(response, 200, buildStatePayload(cwd));\n } catch (error) {\n sendJson(response, 400, { error: error instanceof Error ? error.message : String(error) });\n }\n return;\n }\n\n if (request.method === \"POST\" && url.pathname === \"/api/checklist/ide\") {\n try {\n const body = (await readJsonBody(request)) as { ideSurface?: IdeSurface };\n if (!body.ideSurface) throw new Error(\"ideSurface is required.\");\n const activateTarget = ideSurfaceToActivateTarget(body.ideSurface);\n let activation: { activated: string[]; copied: string[]; unchanged: string[]; conflicts: string[] } | undefined;\n if (activateTarget) {\n const activateResult = activateIdeTargets({ cwd, targets: [activateTarget] });\n activation = {\n activated: activateResult.activated,\n copied: activateResult.copied,\n unchanged: activateResult.unchanged,\n conflicts: activateResult.conflicts\n };\n }\n const result = saveIdeChecklist(cwd, body.ideSurface);\n markSectionComplete(cwd, \"ide\");\n invalidateAgenticLevelCache(cwd);\n const adapterValidation = summarizeAdapterValidation(cwd, body.ideSurface);\n sendJson(response, 200, {\n ...result,\n activation,\n adapterValidation,\n ...buildStatePayload(cwd, { forceAgenticRefresh: true })\n });\n } catch (error) {\n sendJson(response, 400, { error: error instanceof Error ? error.message : String(error) });\n }\n return;\n }\n\n if (request.method === \"POST\" && url.pathname === \"/api/checklist/visual-qa\") {\n try {\n const body = (await readJsonBody(request)) as { tier?: \"baseline\" | \"strong\" | \"mature\" };\n if (!body.tier) throw new Error(\"tier is required.\");\n const result = writeVisualQaTier(cwd, body.tier);\n markSectionComplete(cwd, \"visualQa\");\n sendJson(response, 200, { ...result, ...buildStatePayload(cwd) });\n } catch (error) {\n sendJson(response, 400, { error: error instanceof Error ? error.message : String(error) });\n }\n return;\n }\n\n if (request.method === \"POST\" && url.pathname === \"/api/drafts/design\") {\n try {\n const body = (await readJsonBody(request)) as {\n audience?: string;\n contentInventory?: string;\n antiReferences?: string;\n };\n const draft = saveDesignDraft(cwd, {\n audience: String(body.audience ?? \"\"),\n contentInventory: String(body.contentInventory ?? \"\"),\n antiReferences: String(body.antiReferences ?? \"\")\n });\n markSectionComplete(cwd, \"designDoc\");\n sendJson(response, 200, { draft, preview: previewDesignMarkdown(draft), ...buildStatePayload(cwd) });\n } catch (error) {\n sendJson(response, 400, { error: error instanceof Error ? error.message : String(error) });\n }\n return;\n }\n\n if (request.method === \"POST\" && url.pathname === \"/api/drafts/messaging\") {\n try {\n const body = (await readJsonBody(request)) as { audience?: string; pain?: string; outcome?: string };\n const draft = saveMessagingDraft(cwd, {\n audience: String(body.audience ?? \"\"),\n pain: String(body.pain ?? \"\"),\n outcome: String(body.outcome ?? \"\")\n });\n markSectionComplete(cwd, \"messagingDoc\");\n sendJson(response, 200, { draft, preview: previewMessagingMarkdown(draft), ...buildStatePayload(cwd) });\n } catch (error) {\n sendJson(response, 400, { error: error instanceof Error ? error.message : String(error) });\n }\n return;\n }\n\n if (request.method === \"POST\" && url.pathname === \"/api/drafts/apply\") {\n try {\n const results = applyDrafts(cwd);\n markSectionComplete(cwd, \"applyDrafts\");\n sendJson(response, 200, { results, ...buildStatePayload(cwd) });\n } catch (error) {\n sendJson(response, 400, { error: error instanceof Error ? error.message : String(error) });\n }\n return;\n }\n\n if (request.method === \"POST\" && url.pathname === \"/api/agentic-level/refresh\") {\n invalidateAgenticLevelCache(cwd);\n sendJson(response, 200, buildStatePayload(cwd, { forceAgenticRefresh: true }));\n return;\n }\n\n sendJson(response, 404, { error: \"Not found.\" });\n}\n\nfunction listen(server: Server, host: string, port: number): Promise<number> {\n return new Promise((resolve, reject) => {\n server.once(\"error\", reject);\n server.listen(port, host, () => {\n const address = server.address();\n if (!address || typeof address === \"string\") {\n reject(new Error(\"Could not determine setup server port.\"));\n return;\n }\n resolve(address.port);\n });\n });\n}\n\nexport async function startSetupServer(options: SetupServerOptions): Promise<SetupServerHandle> {\n const host = options.host ?? DEFAULT_HOST;\n const requestedPort = options.port ?? DEFAULT_PORT;\n ensureProjectContextForSetup(options.cwd);\n loadOnboardingState(options.cwd);\n\n const server = createServer((request, response) => {\n handleRequest(options.cwd, request, response).catch((error) => {\n sendJson(response, 500, { error: error instanceof Error ? error.message : String(error) });\n });\n });\n\n let port = requestedPort;\n let portFallback = false;\n try {\n port = await listen(server, host, requestedPort);\n } catch (error) {\n if (error instanceof Error && \"code\" in error && error.code === \"EADDRINUSE\") {\n portFallback = true;\n port = await listen(server, host, 0);\n } else {\n throw error;\n }\n }\n\n return {\n url: `http://${host}:${port}`,\n port,\n requestedPort,\n portFallback,\n defaultView: \"office\",\n close: () =>\n new Promise((resolve, reject) => {\n server.close((closeError) => {\n if (closeError) reject(closeError);\n else resolve();\n });\n })\n };\n}\n","import type { ProjectContextContractValue } from \"../config/contracts.js\";\nimport { initProjectContext, scanProjectContext, writeProjectContext, type ContextCommandResult } from \"./context.js\";\nimport { nowIso } from \"./shared.js\";\n\nexport interface SetupFormPayload {\n productSummary: string;\n productCategory: string;\n primaryAudience: string;\n primaryWorkflows: string;\n authModel: string;\n tenantModel: string;\n uiPreferred: string;\n uiAvoid: string;\n valueProposition: string;\n proof: string;\n objections: string;\n qualityTarget: ProjectContextContractValue[\"qualityTarget\"];\n owner: string;\n ideSurface?: string;\n visualQaTier?: string;\n designAudience?: string;\n designContent?: string;\n designAntiReferences?: string;\n msgAudience?: string;\n msgPain?: string;\n msgOutcome?: string;\n}\n\nexport interface SetupFormViewModel {\n projectName: string;\n openQuestions: string[];\n hasSupabase: boolean;\n form: SetupFormPayload;\n}\n\n/** Generic Next.js + Supabase auth baseline — downstream projects customize in the wizard. */\nexport const RECOMMENDED_SUPABASE_AUTH =\n \"Supabase Auth with server-set session cookies via @supabase/ssr. Authorization is enforced in Postgres RLS for private tables, not only in UI code. Service-role keys stay server-only. Document how privileged admin or operator roles are granted and verified before changing auth boundaries.\";\n\nfunction splitLines(value: string): string[] {\n return value\n .split(/\\r?\\n/)\n .map((line) => line.trim())\n .filter(Boolean);\n}\n\nfunction uniqueStrings(values: string[]): string[] {\n return [...new Set(values.filter(Boolean))];\n}\n\nexport function buildSetupFormViewModel(context: ProjectContextContractValue): SetupFormViewModel {\n return {\n projectName: context.projectName,\n openQuestions: context.openQuestions,\n hasSupabase: context.architecture.hasSupabase,\n form: {\n productSummary: context.productSummary,\n productCategory: context.productCategory,\n primaryAudience: context.primaryAudience,\n primaryWorkflows: context.primaryWorkflows.join(\"\\n\"),\n authModel: context.authModel,\n tenantModel: context.tenantModel,\n uiPreferred: context.uiDirection.preferred,\n uiAvoid: context.uiDirection.avoid,\n valueProposition: context.messaging.valueProposition,\n proof: context.messaging.proof.join(\"\\n\"),\n objections: context.messaging.objections.join(\"\\n\"),\n qualityTarget: context.qualityTarget,\n owner: context.owners[0] ?? \"\"\n }\n };\n}\n\nexport function getSetupFormViewModel(cwd: string): SetupFormViewModel {\n const context = scanProjectContext(cwd);\n return buildSetupFormViewModel(context);\n}\n\nexport function applySetupFormAnswers(cwd: string, payload: SetupFormPayload): ContextCommandResult {\n const base = scanProjectContext(cwd);\n const owners = uniqueStrings([payload.owner.trim(), ...base.owners]);\n const updated: ProjectContextContractValue = {\n ...base,\n productSummary: payload.productSummary.trim(),\n productCategory: payload.productCategory.trim() || \"TBD\",\n primaryAudience: payload.primaryAudience.trim(),\n primaryWorkflows: splitLines(payload.primaryWorkflows),\n authModel: payload.authModel.trim(),\n tenantModel: payload.tenantModel.trim(),\n uiDirection: {\n preferred: payload.uiPreferred.trim(),\n avoid: payload.uiAvoid.trim()\n },\n messaging: {\n valueProposition: payload.valueProposition.trim(),\n proof: splitLines(payload.proof),\n objections: splitLines(payload.objections)\n },\n qualityTarget: payload.qualityTarget,\n owners,\n lastReviewedAt: nowIso(),\n evidence: uniqueEvidence([...base.evidence, { source: \"agent-kit setup wizard\", note: \"Project context updated through the local web setup wizard.\" }])\n };\n return writeProjectContext(cwd, updated);\n}\n\nexport function ensureProjectContextForSetup(cwd: string): ContextCommandResult {\n return initProjectContext(cwd);\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 parseSetupFormPayload(raw: unknown): SetupFormPayload {\n if (!raw || typeof raw !== \"object\") {\n throw new Error(\"Setup form payload must be a JSON object.\");\n }\n const body = raw as Record<string, unknown>;\n const qualityTarget = body.qualityTarget;\n if (qualityTarget !== \"baseline-setup\" && qualityTarget !== \"needs-improvement\" && qualityTarget !== \"best-practice-candidate\") {\n throw new Error(\"qualityTarget must be baseline-setup, needs-improvement, or best-practice-candidate.\");\n }\n return {\n productSummary: String(body.productSummary ?? \"\"),\n productCategory: String(body.productCategory ?? \"\"),\n primaryAudience: String(body.primaryAudience ?? \"\"),\n primaryWorkflows: String(body.primaryWorkflows ?? \"\"),\n authModel: String(body.authModel ?? \"\"),\n tenantModel: String(body.tenantModel ?? \"\"),\n uiPreferred: String(body.uiPreferred ?? \"\"),\n uiAvoid: String(body.uiAvoid ?? \"\"),\n valueProposition: String(body.valueProposition ?? \"\"),\n proof: String(body.proof ?? \"\"),\n objections: String(body.objections ?? \"\"),\n qualityTarget,\n owner: String(body.owner ?? \"\"),\n ...(body.ideSurface ? { ideSurface: String(body.ideSurface) } : {}),\n ...(body.visualQaTier ? { visualQaTier: String(body.visualQaTier) } : {}),\n ...(body.designAudience ? { designAudience: String(body.designAudience) } : {}),\n ...(body.designContent ? { designContent: String(body.designContent) } : {}),\n ...(body.designAntiReferences ? { designAntiReferences: String(body.designAntiReferences) } : {}),\n ...(body.msgAudience ? { msgAudience: String(body.msgAudience) } : {}),\n ...(body.msgPain ? { msgPain: String(body.msgPain) } : {}),\n ...(body.msgOutcome ? { msgOutcome: String(body.msgOutcome) } : {})\n };\n}\n","import { existsSync, readFileSync } from \"node:fs\";\nimport { join } from \"node:path\";\nimport { loadOnboardingState, saveOnboardingState } from \"../onboarding-state.js\";\nimport { nowIso, writeTextFile } from \"../shared.js\";\n\nexport type IdeSurface = \"cursor\" | \"copilot\" | \"claude\" | \"codex\" | \"other\";\n\nconst IDE_PATHS: Record<IdeSurface, string> = {\n cursor: \".cursor/agents/planner.md\",\n copilot: \".github/copilot-instructions.md\",\n claude: \".claude/agents/planner.md\",\n codex: \".codex/agents/planner.toml\",\n other: \"ASSISTANT_ADAPTERS.md\"\n};\n\nexport function saveIdeChecklist(cwd: string, ideSurface: IdeSurface): { idePath: string; present: boolean } {\n const state = loadOnboardingState(cwd);\n saveOnboardingState(cwd, {\n ideSurface,\n ideVerifiedAt: nowIso(),\n completedSections: [...new Set([...state.completedSections, \"ide\"])]\n });\n const idePath = IDE_PATHS[ideSurface];\n return { idePath, present: detectIdeRulePresent(cwd, ideSurface) };\n}\n\nexport function detectIdeRulePresent(cwd: string, ideSurface: IdeSurface): boolean {\n const rel = IDE_PATHS[ideSurface];\n if (ideSurface === \"cursor\") {\n return existsSync(join(cwd, rel)) || existsSync(join(cwd, \".cursor/rules/cursor-agent-kit.mdc\"));\n }\n if (rel.endsWith(\"/\")) {\n return existsSync(join(cwd, rel));\n }\n return existsSync(join(cwd, rel));\n}\n\nconst VISUAL_QA_MARKER = \"## Visual QA Tier\";\n\nconst VISUAL_QA_BLOCKS: Record<\"baseline\" | \"strong\" | \"mature\", string> = {\n baseline: `${VISUAL_QA_MARKER}\n\nThis project uses the **Baseline** visual QA tier.\n\n- Manual desktop/mobile screenshot review for important UI changes\n- Use \\`.agent-kit/prompts/screenshot-review.md\\` as the review checklist\n`,\n strong: `${VISUAL_QA_MARKER}\n\nThis project uses the **Strong** visual QA tier.\n\n- Playwright screenshot checks for stable pages and states\n- Manual screenshot review for high-risk UI changes using \\`.agent-kit/prompts/screenshot-review.md\\`\n`,\n mature: `${VISUAL_QA_MARKER}\n\nThis project uses the **Mature** visual QA tier.\n\n- Storybook or component-state coverage where practical\n- Visual regression in CI through Playwright snapshots, Chromatic, Argos, Loki, or equivalent\n`\n};\n\nexport interface VisualQaWriteResult {\n updated: boolean;\n path: string;\n reason?: string;\n}\n\nexport function writeVisualQaTier(cwd: string, tier: \"baseline\" | \"strong\" | \"mature\"): VisualQaWriteResult {\n const path = \"TESTING.md\";\n const fullPath = join(cwd, path);\n if (!existsSync(fullPath)) {\n return { updated: false, path, reason: \"TESTING.md not found in project root.\" };\n }\n const current = readFileSync(fullPath, \"utf8\");\n if (current.includes(VISUAL_QA_MARKER)) {\n return {\n updated: false,\n path,\n reason: \"Visual QA tier block already exists — edit TESTING.md manually to avoid overwriting custom content.\"\n };\n }\n writeTextFile(cwd, path, `${current.trimEnd()}\\n\\n${VISUAL_QA_BLOCKS[tier]}`);\n const state = loadOnboardingState(cwd);\n saveOnboardingState(cwd, {\n visualQaTier: tier,\n completedSections: [...new Set([...state.completedSections, \"visualQa\"])]\n });\n return { updated: true, path };\n}\n\nexport function getIdeSurfaces(): { id: IdeSurface; label: string; path: string }[] {\n return [\n { id: \"cursor\", label: \"Cursor\", path: IDE_PATHS.cursor },\n { id: \"copilot\", label: \"GitHub Copilot / VS Code\", path: IDE_PATHS.copilot },\n { id: \"claude\", label: \"Claude Code\", path: IDE_PATHS.claude },\n { id: \"codex\", label: \"Codex / AGENTS.md tools\", path: IDE_PATHS.codex },\n { id: \"other\", label: \"Other / multiple\", path: IDE_PATHS.other }\n ];\n}\n","import { ensureStudioDirs, nowIso, readJsonFile, writeJsonFile, writeTextFile } from \"../shared.js\";\nimport { loadProjectRosterAgents } from \"./roster.js\";\n\nexport const AGENT_BRIEFS_JSON = \".agent-kit/onboarding/agent-briefs.json\";\nexport const AGENT_BRIEFS_MD = \".agent-kit/agent-briefs.md\";\n\nexport interface AgentBriefsFile {\n schemaVersion: 1;\n updatedAt: string;\n briefs: Record<string, string>;\n}\n\nfunction emptyBriefs(): AgentBriefsFile {\n return { schemaVersion: 1, updatedAt: nowIso(), briefs: {} };\n}\n\nexport function loadAgentBriefs(cwd: string): AgentBriefsFile {\n ensureStudioDirs(cwd);\n const existing = readJsonFile<AgentBriefsFile>(cwd, AGENT_BRIEFS_JSON);\n if (!existing || existing.schemaVersion !== 1 || typeof existing.briefs !== \"object\") {\n return emptyBriefs();\n }\n return existing;\n}\n\nexport function saveAgentBriefs(cwd: string, briefs: Record<string, string>): AgentBriefsFile {\n const cleaned = Object.fromEntries(\n Object.entries(briefs)\n .map(([id, text]) => [id, String(text).trim()] as const)\n .filter(([, text]) => text.length > 0)\n );\n const next: AgentBriefsFile = { schemaVersion: 1, updatedAt: nowIso(), briefs: cleaned };\n writeJsonFile(cwd, AGENT_BRIEFS_JSON, next);\n writeTextFile(cwd, AGENT_BRIEFS_MD, renderAgentBriefsMarkdown(cwd, next));\n return next;\n}\n\nexport function renderAgentBriefsMarkdown(cwd: string, file: AgentBriefsFile): string {\n const agents = loadProjectRosterAgents(cwd);\n const lines = [\n \"# Agent Team Briefings\",\n \"\",\n \"Project-specific notes for each council agent. Specialists already know their domain — this file tells them what is unique about **this** project.\",\n \"\",\n `Updated: ${file.updatedAt}`,\n \"\"\n ];\n let wroteAny = false;\n for (const agent of agents) {\n const text = file.briefs[agent.id]?.trim();\n if (!text) continue;\n wroteAny = true;\n lines.push(`## ${agent.name}`, \"\", `**Role:** ${agent.roleSummary}`, \"\", text, \"\");\n }\n if (!wroteAny) {\n lines.push(\"_No agent briefs recorded yet. Run `agent-kit setup` to brief your team._\", \"\");\n }\n return lines.join(\"\\n\");\n}\n","import type { SetupFormPayload } from \"../setup-form.js\";\nimport { loadOnboardingState } from \"../onboarding-state.js\";\nimport { ensureStudioDirs, nowIso, readJsonFile, writeJsonFile } from \"../shared.js\";\nimport { loadAgentBriefs } from \"./agent-briefs.js\";\nimport { agentBriefFieldName } from \"./roster.js\";\n\nexport const WIZARD_DRAFT_JSON = \".agent-kit/onboarding/wizard-draft.json\";\n\nexport interface WizardDraftFile {\n schemaVersion: 1;\n updatedAt: string;\n form: Partial<SetupFormPayload>;\n agentBriefs: Record<string, string>;\n}\n\nfunction emptyDraft(): WizardDraftFile {\n return { schemaVersion: 1, updatedAt: nowIso(), form: {}, agentBriefs: {} };\n}\n\nexport function loadWizardDraft(cwd: string): WizardDraftFile {\n ensureStudioDirs(cwd);\n const existing = readJsonFile<WizardDraftFile>(cwd, WIZARD_DRAFT_JSON);\n if (!existing || existing.schemaVersion !== 1) return emptyDraft();\n return {\n schemaVersion: 1,\n updatedAt: existing.updatedAt ?? nowIso(),\n form: existing.form ?? {},\n agentBriefs: existing.agentBriefs ?? {}\n };\n}\n\nexport function saveWizardDraft(cwd: string, patch: { form?: Partial<SetupFormPayload>; agentBriefs?: Record<string, string> }): WizardDraftFile {\n const current = loadWizardDraft(cwd);\n const next: WizardDraftFile = {\n schemaVersion: 1,\n updatedAt: nowIso(),\n form: { ...current.form, ...(patch.form ?? {}) },\n agentBriefs: { ...current.agentBriefs, ...(patch.agentBriefs ?? {}) }\n };\n writeJsonFile(cwd, WIZARD_DRAFT_JSON, next);\n return next;\n}\n\n/** Empty interview fields for a fresh wizard; resume from draft + onboarding IDE choice only. */\nexport function buildWizardFormState(cwd: string): Record<string, string> {\n const draft = loadWizardDraft(cwd);\n const onboarding = loadOnboardingState(cwd);\n const briefs = loadAgentBriefs(cwd);\n const form: Record<string, string> = {\n productSummary: \"\",\n productCategory: \"TBD\",\n primaryAudience: \"\",\n primaryWorkflows: \"\",\n authModel: \"\",\n tenantModel: \"single-user\",\n uiPreferred: \"\",\n uiAvoid: \"\",\n valueProposition: \"\",\n proof: \"\",\n objections: \"\",\n qualityTarget: \"baseline-setup\",\n owner: \"\",\n ideSurface: onboarding.ideSurface ?? draft.form.ideSurface ?? \"\",\n visualQaTier: onboarding.visualQaTier ?? draft.form.visualQaTier ?? \"baseline\",\n designAudience: \"\",\n designContent: \"\",\n designAntiReferences: \"\",\n msgAudience: \"\",\n msgPain: \"\",\n msgOutcome: \"\"\n };\n for (const [key, value] of Object.entries(draft.form)) {\n if (value !== undefined && value !== null && String(value).trim()) {\n form[key] = String(value);\n }\n }\n const mergedBriefs = { ...briefs.briefs, ...draft.agentBriefs };\n for (const [agentId, text] of Object.entries(mergedBriefs)) {\n if (text.trim()) form[agentBriefFieldName(agentId)] = text.trim();\n }\n return form;\n}\n\nexport function extractAgentBriefsFromForm(form: Record<string, string>): Record<string, string> {\n const briefs: Record<string, string> = {};\n for (const [key, value] of Object.entries(form)) {\n if (!key.startsWith(\"agentBrief_\")) continue;\n const agentId = key.slice(\"agentBrief_\".length);\n const text = String(value).trim();\n if (text) briefs[agentId] = text;\n }\n return briefs;\n}\n\nexport function extractSetupFormFromWizardForm(form: Record<string, string>): SetupFormPayload {\n return {\n productSummary: form.productSummary ?? \"\",\n productCategory: form.productCategory ?? \"TBD\",\n primaryAudience: form.primaryAudience ?? \"\",\n primaryWorkflows: form.primaryWorkflows ?? \"\",\n authModel: form.authModel ?? \"\",\n tenantModel: form.tenantModel ?? \"single-user\",\n uiPreferred: form.uiPreferred ?? \"\",\n uiAvoid: form.uiAvoid ?? \"\",\n valueProposition: form.valueProposition ?? \"\",\n proof: form.proof ?? \"\",\n objections: form.objections ?? \"\",\n qualityTarget: (form.qualityTarget as SetupFormPayload[\"qualityTarget\"]) ?? \"baseline-setup\",\n owner: form.owner ?? \"\",\n ...(form.ideSurface ? { ideSurface: form.ideSurface } : {}),\n ...(form.visualQaTier ? { visualQaTier: form.visualQaTier } : {}),\n ...(form.designAudience ? { designAudience: form.designAudience } : {}),\n ...(form.designContent ? { designContent: form.designContent } : {}),\n ...(form.designAntiReferences ? { designAntiReferences: form.designAntiReferences } : {}),\n ...(form.msgAudience ? { msgAudience: form.msgAudience } : {}),\n ...(form.msgPain ? { msgPain: form.msgPain } : {}),\n ...(form.msgOutcome ? { msgOutcome: form.msgOutcome } : {})\n };\n}\n","import { existsSync, readFileSync } from \"node:fs\";\nimport { join } from \"node:path\";\nimport { loadOnboardingState, saveOnboardingState } from \"../onboarding-state.js\";\nimport { ensureStudioDirs, nowIso, readJsonFile, writeJsonFile, writeTextFile } from \"../shared.js\";\n\nexport interface DesignDraft {\n audience: string;\n contentInventory: string;\n antiReferences: string;\n updatedAt: string;\n}\n\nexport interface MessagingDraft {\n audience: string;\n pain: string;\n outcome: string;\n updatedAt: string;\n}\n\nexport const DESIGN_DRAFT_JSON = \".agent-kit/onboarding/design-draft.json\";\nexport const MESSAGING_DRAFT_JSON = \".agent-kit/onboarding/messaging-draft.json\";\n\nexport function loadDesignDraft(cwd: string): DesignDraft | null {\n return readJsonFile<DesignDraft>(cwd, DESIGN_DRAFT_JSON);\n}\n\nexport function saveDesignDraft(cwd: string, draft: Omit<DesignDraft, \"updatedAt\">): DesignDraft {\n ensureStudioDirs(cwd);\n const payload: DesignDraft = { ...draft, updatedAt: nowIso() };\n writeJsonFile(cwd, DESIGN_DRAFT_JSON, payload);\n return payload;\n}\n\nexport function loadMessagingDraft(cwd: string): MessagingDraft | null {\n return readJsonFile<MessagingDraft>(cwd, MESSAGING_DRAFT_JSON);\n}\n\nexport function saveMessagingDraft(cwd: string, draft: Omit<MessagingDraft, \"updatedAt\">): MessagingDraft {\n ensureStudioDirs(cwd);\n const payload: MessagingDraft = { ...draft, updatedAt: nowIso() };\n writeJsonFile(cwd, MESSAGING_DRAFT_JSON, payload);\n return payload;\n}\n\nexport function previewDesignMarkdown(draft: DesignDraft): string {\n return `## Brand And Content Inputs (wizard draft)\n\n| Area | Wizard draft |\n| --- | --- |\n| Primary audience | ${draft.audience.trim() || \"TBD\"} |\n| Content inventory | ${draft.contentInventory.trim() || \"TBD\"} |\n\n## Anti-References (wizard draft)\n\n${draft.antiReferences.trim() || \"- TBD: pattern to avoid.\"}\n`;\n}\n\nexport function previewMessagingMarkdown(draft: MessagingDraft): string {\n return `## Discovery Questions (wizard draft)\n\n| Question | Current Answer |\n| --- | --- |\n| Who is the primary audience? | ${draft.audience.trim() || \"TBD\"} |\n| What painful problem do they need solved? | ${draft.pain.trim() || \"TBD\"} |\n| What outcome do they want? | ${draft.outcome.trim() || \"TBD\"} |\n`;\n}\n\nexport interface ApplyDraftResult {\n target: string;\n action: \"appended\" | \"conflict\" | \"missing\";\n conflictPath?: string;\n}\n\nfunction appendSectionToDoc(cwd: string, doc: string, sectionMarkdown: string): ApplyDraftResult {\n const fullPath = join(cwd, doc);\n if (!existsSync(fullPath)) {\n return { target: doc, action: \"missing\" };\n }\n const current = readFileSync(fullPath, \"utf8\");\n if (current.includes(\"(wizard draft)\")) {\n return { target: doc, action: \"conflict\", conflictPath: `.agent-kit/conflicts/wizard-${doc}` };\n }\n writeTextFile(cwd, doc, `${current.trimEnd()}\\n\\n${sectionMarkdown.trim()}\\n`);\n return { target: doc, action: \"appended\" };\n}\n\nexport function applyDesignDraft(cwd: string): ApplyDraftResult {\n const draft = loadDesignDraft(cwd);\n if (!draft) return { target: \"DESIGN.md\", action: \"missing\" };\n const result = appendSectionToDoc(cwd, \"DESIGN.md\", previewDesignMarkdown(draft));\n if (result.action === \"appended\") {\n const state = loadOnboardingState(cwd);\n saveOnboardingState(cwd, {\n completedSections: [...new Set([...state.completedSections, \"designDoc\", \"applyDrafts\"])]\n });\n }\n return result;\n}\n\nexport function applyMessagingDraft(cwd: string): ApplyDraftResult {\n const draft = loadMessagingDraft(cwd);\n if (!draft) return { target: \"MESSAGING.md\", action: \"missing\" };\n const result = appendSectionToDoc(cwd, \"MESSAGING.md\", previewMessagingMarkdown(draft));\n if (result.action === \"appended\") {\n const state = loadOnboardingState(cwd);\n saveOnboardingState(cwd, {\n completedSections: [...new Set([...state.completedSections, \"messagingDoc\", \"applyDrafts\"])]\n });\n }\n return result;\n}\n\nexport function applyDrafts(cwd: string): ApplyDraftResult[] {\n return [applyDesignDraft(cwd), applyMessagingDraft(cwd)];\n}\n","import { readFileSync } from \"node:fs\";\nimport { join } from \"node:path\";\nimport { findPackageRoot } from \"../../utils/package-root.js\";\nimport { scanProjectContext } from \"../context.js\";\nimport { getSetupFormViewModel, RECOMMENDED_SUPABASE_AUTH } from \"../setup-form.js\";\nimport { getActiveSessionId } from \"../session.js\";\nimport { getIdeSurfaces } from \"../wizard/checklist.js\";\nimport { loadProjectRosterAgents } from \"../wizard/roster.js\";\nimport { CANVAS_SCALE, MAP_HEIGHT, MAP_WIDTH, TILE_SIZE, buildOfficeStations } from \"./map.js\";\nimport type { OfficeBootConfig } from \"./types.js\";\nimport { PACKAGE_VERSION } from \"../../config/defaults.js\";\n\nconst PRODUCT_CATEGORIES = [\"content-app\", \"saas\", \"admin\", \"marketplace\", \"tool\", \"ecommerce\", \"portfolio\", \"education\", \"community\", \"ai-workflow\", \"other\"];\n\nconst TENANT_MODELS = [\"single-user\", \"team\", \"tenant\", \"marketplace\", \"admin\", \"public-content\"];\n\nfunction readOfficeAsset(name: string): string {\n const root = findPackageRoot();\n const distPath = join(root, \"dist\", \"studio\", \"office\", \"assets\", name);\n const srcPath = join(root, \"src\", \"studio\", \"office\", \"assets\", name);\n try {\n return readFileSync(distPath, \"utf8\");\n } catch {\n return readFileSync(srcPath, \"utf8\");\n }\n}\n\nexport function buildOfficeBootConfig(cwd: string, viewModel: ReturnType<typeof getSetupFormViewModel>): OfficeBootConfig {\n const agents = loadProjectRosterAgents(cwd);\n return {\n mapWidth: MAP_WIDTH,\n mapHeight: MAP_HEIGHT,\n tileSize: TILE_SIZE,\n scale: CANVAS_SCALE,\n stations: buildOfficeStations(agents),\n agents,\n categories: PRODUCT_CATEGORIES,\n tenantModels: TENANT_MODELS,\n recommendedSupabaseAuth: RECOMMENDED_SUPABASE_AUTH,\n ideSurfaces: getIdeSurfaces(),\n hasSupabase: viewModel.hasSupabase,\n stackSignals: []\n };\n}\n\nexport function renderSetupOfficeHtml(boot?: OfficeBootConfig): string {\n return renderOfficeHtml(boot, \"setup\");\n}\n\nfunction renderOfficeHtml(boot: OfficeBootConfig | undefined, mode: \"setup\" | \"studio\"): string {\n const css = readOfficeAsset(\"office.css\");\n const js = readOfficeAsset(\"office.js\");\n const bootJson = JSON.stringify({\n ...(boot ?? {\n mapWidth: MAP_WIDTH,\n mapHeight: MAP_HEIGHT,\n tileSize: TILE_SIZE,\n scale: CANVAS_SCALE,\n stations: [],\n agents: [],\n categories: PRODUCT_CATEGORIES,\n tenantModels: TENANT_MODELS,\n ideSurfaces: [],\n hasSupabase: false,\n stackSignals: []\n }),\n mode\n }).replace(/</g, \"\\\\u003c\");\n\n const isStudio = mode === \"studio\";\n const title = isStudio ? \"Agent Kit — Live Studio\" : \"Agent Kit — Setup Office\";\n const dataView = isStudio ? \"studio-v1\" : \"office-v1\";\n\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 <title>${title}</title>\n <style>${css}</style>\n</head>\n<body data-view=\"${dataView}\" data-kit-version=\"${PACKAGE_VERSION}\">\n <header class=\"office-header\">\n <div class=\"brand\">\n <h1>${isStudio ? \"Live Agent Studio\" : \"Agent Office\"}</h1>\n <p class=\"project-name\" id=\"project-name\">…</p>\n </div>\n <div class=\"header-actions\">\n <span class=\"progress-pill\" id=\"progress-pill\">${isStudio ? \"Live\" : \"0% ready\"}</span>\n ${isStudio ? \"\" : '<span class=\"level-pill\" id=\"level-pill\" aria-live=\"polite\">L3 → L5</span>'}\n ${isStudio ? '<span class=\"session-pill\" id=\"session-pill\">No session</span>' : '<a class=\"btn secondary\" href=\"/wizard\">Form view</a>'}\n ${isStudio ? \"\" : '<button type=\"button\" class=\"btn primary\" id=\"review-btn\">Review &amp; save</button>'}\n </div>\n </header>\n ${isStudio ? \"\" : '<div class=\"iceberg-strip\" id=\"iceberg-strip\" aria-label=\"Agentic engineering levels L3 through L8\"></div>'}\n <main class=\"office-main${isStudio ? \" studio-layout\" : \"\"}\">\n <aside class=\"station-list${isStudio ? \" hidden\" : \"\"}\" aria-label=\"Setup stations\">\n <h2>Stations</h2>\n <p class=\"hint\">Keyboard-friendly list — same actions as the office floor.</p>\n <div class=\"climb-panel\" id=\"climb-panel\" hidden>\n <h3>Climb checklist</h3>\n <ol id=\"climb-list\"></ol>\n <button type=\"button\" class=\"btn secondary climb-refresh\" id=\"climb-refresh\">Refresh level</button>\n </div>\n <ul id=\"station-list\"></ul>\n </aside>\n <div class=\"canvas-wrap\">\n <canvas id=\"office-floor\" width=\"${MAP_WIDTH * TILE_SIZE}\" height=\"${MAP_HEIGHT * TILE_SIZE}\" role=\"img\" aria-labelledby=\"canvas-desc\"></canvas>\n <p id=\"canvas-desc\" class=\"sr-only\">${isStudio ? \"Live council session office floor with agent speech bubbles.\" : \"Top-down pixel office. Click agents at desks or zone stations to configure your project.\"}</p>\n <div id=\"hover-label\" class=\"hover-label hidden\" aria-hidden=\"true\"></div>\n <div id=\"bubble-layer\" class=\"bubble-layer\" aria-hidden=\"true\"></div>\n <div id=\"nameplate-layer\" class=\"nameplate-layer\" aria-hidden=\"true\"></div>\n <div id=\"office-hint\" class=\"office-hint hidden\" role=\"status\">${isStudio ? \"Watching council session events…\" : \"Click a desk or zone to brief your agent team.\"}</div>\n </div>\n ${isStudio ? '<aside class=\"transcript-panel\" id=\"transcript-panel\" aria-label=\"Session transcript\"><h2>Transcript</h2><ol id=\"transcript-list\"></ol></aside>' : \"\"}\n </main>\n <div id=\"status\" class=\"status\" role=\"status\" aria-live=\"polite\"></div>\n <div id=\"depth-modal\" class=\"modal modal-blur\" hidden>\n <div class=\"modal-card\" role=\"dialog\" aria-labelledby=\"depth-title\" aria-modal=\"true\">\n <h2 id=\"depth-title\">Choose setup depth</h2>\n <p class=\"why\">Unlocks more stations on the office floor.</p>\n <div class=\"depth-grid\" id=\"depth-grid\"></div>\n </div>\n </div>\n <aside id=\"panel\" class=\"panel hidden\" aria-labelledby=\"panel-title\">\n <div class=\"panel-head\">\n <h2 id=\"panel-title\">Station</h2>\n <button type=\"button\" class=\"panel-close\" id=\"panel-close\" aria-label=\"Close panel\">×</button>\n </div>\n <div class=\"panel-body\" id=\"panel-body\"></div>\n <div class=\"panel-foot\">\n <button type=\"button\" class=\"btn secondary\" id=\"panel-cancel\">Cancel</button>\n <button type=\"button\" class=\"btn primary\" id=\"panel-save\">Save &amp; close</button>\n </div>\n </aside>\n <div id=\"review-modal\" class=\"modal hidden\" role=\"dialog\" aria-labelledby=\"review-title\" aria-modal=\"true\">\n <div class=\"modal-card modal-wide\">\n <h2 id=\"review-title\">Review &amp; save</h2>\n <dl class=\"review\" id=\"review-list\"></dl>\n <div class=\"modal-actions\">\n <button type=\"button\" class=\"btn secondary\" id=\"review-cancel\">Back to office</button>\n <button type=\"button\" class=\"btn primary\" id=\"review-save\">Save project context</button>\n </div>\n </div>\n </div>\n <script>window.OFFICE_BOOT = ${bootJson};</script>\n <script>${js}</script>\n</body>\n</html>`;\n}\n\nexport function renderLiveStudioHtml(boot?: OfficeBootConfig): string {\n return renderOfficeHtml(boot, \"studio\");\n}\n\nexport function renderLiveStudioHtmlWithContext(cwd: string): string {\n const viewModel = getSetupFormViewModel(cwd);\n const context = scanProjectContext(cwd);\n const boot = buildOfficeBootConfig(cwd, viewModel);\n let activeSessionId = \"\";\n try {\n activeSessionId = getActiveSessionId(cwd);\n } catch {\n activeSessionId = \"\";\n }\n const stackSignals = [\n ...context.architecture.frameworks,\n ...context.architecture.testTools.slice(0, 2),\n ...(viewModel.hasSupabase ? [\"supabase\"] : [])\n ].filter(Boolean);\n return renderLiveStudioHtml({\n ...boot,\n mode: \"studio\",\n activeSessionId,\n stackSignals: [...new Set(stackSignals)]\n });\n}\n\nexport function renderSetupOfficeHtmlWithContext(cwd: string): string {\n const viewModel = getSetupFormViewModel(cwd);\n const context = scanProjectContext(cwd);\n const boot = buildOfficeBootConfig(cwd, viewModel);\n const stackSignals = [\n ...context.architecture.frameworks,\n ...context.architecture.testTools.slice(0, 2),\n ...(viewModel.hasSupabase ? [\"supabase\"] : [])\n ].filter(Boolean);\n return renderSetupOfficeHtml({ ...boot, mode: \"setup\", stackSignals: [...new Set(stackSignals)] });\n}\n","import type { RosterAgent } from \"../wizard/roster.js\";\nimport type { WizardDepth } from \"../wizard/steps.js\";\nimport type { OfficeStation } from \"./types.js\";\n\nexport const MAP_WIDTH = 28;\nexport const MAP_HEIGHT = 18;\nexport const TILE_SIZE = 24;\nexport const CANVAS_SCALE = 4;\n\nconst ALL_DEPTHS: WizardDepth[] = [\"quick\", \"standard\", \"complete\", \"undecided\"];\nconst STANDARD_DEPTHS: WizardDepth[] = [\"standard\", \"complete\"];\nconst COMPLETE_DEPTHS: WizardDepth[] = [\"complete\"];\n\nconst ZONE_STATIONS: Omit<OfficeStation, \"agentId\">[] = [\n { id: \"ide\", kind: \"zone\", label: \"IDE Terminal\", section: \"ide\", x: 1, y: 1, w: 4, h: 3, depths: ALL_DEPTHS },\n { id: \"product\", kind: \"zone\", label: \"Product Board\", section: \"product\", x: 22, y: 1, w: 5, h: 3, depths: ALL_DEPTHS },\n { id: \"access\", kind: \"zone\", label: \"Security Door\", section: \"access\", x: 1, y: 14, w: 4, h: 3, depths: ALL_DEPTHS },\n { id: \"ui\", kind: \"zone\", label: \"Design Corner\", section: \"ui\", x: 22, y: 14, w: 5, h: 3, depths: ALL_DEPTHS },\n { id: \"messaging\", kind: \"zone\", label: \"Marketing Booth\", section: \"messaging\", x: 11, y: 1, w: 6, h: 2, depths: ALL_DEPTHS },\n {\n id: \"visualQa\",\n kind: \"zone\",\n label: \"QA Camera\",\n section: \"visualQa\",\n x: 11,\n y: 15,\n w: 6,\n h: 2,\n depths: STANDARD_DEPTHS\n },\n {\n id: \"designDoc\",\n kind: \"zone\",\n label: \"Design Archive\",\n section: \"designDoc\",\n x: 6,\n y: 14,\n w: 4,\n h: 3,\n depths: COMPLETE_DEPTHS\n },\n {\n id: \"messagingDoc\",\n kind: \"zone\",\n label: \"Copy Archive\",\n section: \"messagingDoc\",\n x: 18,\n y: 14,\n w: 4,\n h: 3,\n depths: COMPLETE_DEPTHS\n },\n {\n id: \"applyDrafts\",\n kind: \"zone\",\n label: \"Publishing Desk\",\n section: \"applyDrafts\",\n x: 9,\n y: 8,\n w: 3,\n h: 2,\n depths: COMPLETE_DEPTHS\n },\n { id: \"review\", kind: \"review\", label: \"Review Board\", section: \"review\", x: 16, y: 8, w: 4, h: 2, depths: ALL_DEPTHS },\n {\n id: \"coffee\",\n kind: \"amenity\",\n label: \"Coffee Machine\",\n section: \"agent\",\n amenityId: \"coffee\",\n x: 12,\n y: 10,\n w: 2,\n h: 2,\n depths: ALL_DEPTHS\n },\n {\n id: \"cooler\",\n kind: \"amenity\",\n label: \"Water Cooler\",\n section: \"agent\",\n amenityId: \"cooler\",\n x: 14,\n y: 10,\n w: 2,\n h: 2,\n depths: ALL_DEPTHS\n }\n];\n\n/** Break-room rug tile bounds (inclusive tile coords). */\nexport const BREAK_ROOM_RUG = { x: 11, y: 9, w: 7, h: 4 };\n\nfunction agentDeskPositions(count: number): { x: number; y: number }[] {\n const positions: { x: number; y: number }[] = [];\n const cols = Math.min(5, Math.ceil(count / 2));\n const startX = 4;\n const startY = 5;\n const gapX = 4;\n const gapY = 5;\n for (let i = 0; i < count; i += 1) {\n const row = Math.floor(i / cols);\n const col = i % cols;\n positions.push({ x: startX + col * gapX, y: startY + row * gapY });\n }\n return positions;\n}\n\nexport function buildOfficeStations(agents: RosterAgent[]): OfficeStation[] {\n const desks = agentDeskPositions(agents.length);\n const agentStations: OfficeStation[] = agents.map((agent, index) => ({\n id: `agent-${agent.id}`,\n kind: \"agent\",\n label: agent.name,\n section: \"agent\",\n agentId: agent.id,\n x: desks[index]?.x ?? 4,\n y: desks[index]?.y ?? 5,\n w: 3,\n h: 3,\n depths: ALL_DEPTHS\n }));\n return [...ZONE_STATIONS, ...agentStations];\n}\n\nexport function stationsForDepth(stations: OfficeStation[], depth: WizardDepth): OfficeStation[] {\n if (depth === \"undecided\") return stations.filter((s) => s.depths.includes(\"quick\"));\n return stations.filter((s) => s.depths.includes(depth));\n}\n\nexport function amenityTileCenter(amenityId: \"coffee\" | \"cooler\"): { x: number; y: number } {\n const station = ZONE_STATIONS.find((s) => s.amenityId === amenityId);\n if (!station) return { x: 13, y: 10 };\n return { x: station.x + station.w / 2, y: station.y + station.h / 2 };\n}\n","import type { WizardSectionId } from \"../wizard/steps.js\";\nimport type { OfficeStation } from \"./types.js\";\n\n/** Map an office station to the wizard section used for onboarding progress. */\nexport function wizardSectionForStation(station: OfficeStation): WizardSectionId | null {\n if (station.kind === \"amenity\") return null;\n if (station.kind === \"agent\") return \"team\";\n if (station.section === \"agent\") return \"team\";\n return station.section;\n}\n\nexport function allAgentBriefsComplete(form: Record<string, string>, agentIds: string[]): boolean {\n if (agentIds.length === 0) return false;\n return agentIds.every((id) => Boolean(form[`agentBrief_${id}`]?.trim()));\n}\n","import { readFileSync } from \"node:fs\";\nimport { join } from \"node:path\";\nimport { findPackageRoot } from \"../../utils/package-root.js\";\nimport { scanProjectContext } from \"../context.js\";\nimport { getSetupFormViewModel, RECOMMENDED_SUPABASE_AUTH } from \"../setup-form.js\";\nimport { getIdeSurfaces } from \"./checklist.js\";\nimport { buildAgentWizardSteps, loadProjectRosterAgents } from \"./roster.js\";\nimport { WIZARD_STEPS, type WizardStepDef } from \"./steps.js\";\nimport { PACKAGE_VERSION } from \"../../config/defaults.js\";\n\nconst PRODUCT_CATEGORIES = [\"content-app\", \"saas\", \"admin\", \"marketplace\", \"tool\", \"ecommerce\", \"portfolio\", \"education\", \"community\", \"ai-workflow\", \"other\"];\n\nconst TENANT_MODELS = [\"single-user\", \"team\", \"tenant\", \"marketplace\", \"admin\", \"public-content\"];\n\nfunction readWizardAsset(name: string): string {\n const root = findPackageRoot();\n const distPath = join(root, \"dist\", \"studio\", \"wizard\", \"assets\", name);\n const srcPath = join(root, \"src\", \"studio\", \"wizard\", \"assets\", name);\n try {\n return readFileSync(distPath, \"utf8\");\n } catch {\n return readFileSync(srcPath, \"utf8\");\n }\n}\n\nexport interface WizardBootConfig {\n steps: WizardStepDef[];\n categories: string[];\n tenantModels: string[];\n recommendedSupabaseAuth: string;\n ideSurfaces: ReturnType<typeof getIdeSurfaces>;\n stackSignals: string[];\n hasSupabase: boolean;\n agents: ReturnType<typeof loadProjectRosterAgents>;\n}\n\nexport function mergeWizardSteps(cwd: string): WizardStepDef[] {\n const agentSteps = buildAgentWizardSteps(cwd) as WizardStepDef[];\n const ideIndex = WIZARD_STEPS.findIndex((step) => step.id === \"ide-surface\");\n if (ideIndex < 0) return [...WIZARD_STEPS, ...agentSteps];\n return [...WIZARD_STEPS.slice(0, ideIndex + 1), ...agentSteps, ...WIZARD_STEPS.slice(ideIndex + 1)];\n}\n\nexport function buildWizardBootConfig(cwd: string, viewModel: ReturnType<typeof getSetupFormViewModel>): WizardBootConfig {\n return {\n steps: mergeWizardSteps(cwd),\n categories: PRODUCT_CATEGORIES,\n tenantModels: TENANT_MODELS,\n recommendedSupabaseAuth: RECOMMENDED_SUPABASE_AUTH,\n ideSurfaces: getIdeSurfaces(),\n hasSupabase: viewModel.hasSupabase,\n stackSignals: [],\n agents: loadProjectRosterAgents(cwd)\n };\n}\n\nexport function renderSetupWizardHtml(boot?: WizardBootConfig): string {\n const css = readWizardAsset(\"wizard.css\");\n const js = readWizardAsset(\"wizard.js\");\n const bootJson = JSON.stringify(boot ?? { steps: WIZARD_STEPS, categories: PRODUCT_CATEGORIES, tenantModels: TENANT_MODELS }).replace(/</g, \"\\\\u003c\");\n\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 <title>Agent Kit Setup Wizard</title>\n <style>${css}</style>\n</head>\n<body data-view=\"wizard-v1\" data-kit-version=\"${PACKAGE_VERSION}\">\n <div class=\"office-banner\" role=\"navigation\" aria-label=\"Agent Office\">\n <a href=\"/\" class=\"office-banner-link\">\n <span class=\"office-banner-title\">Open Agent Office</span>\n <span class=\"office-banner-sub\">Pixel setup — walk the floor, click desks, brief your team</span>\n </a>\n </div>\n <div class=\"shell\">\n <aside class=\"rail\" aria-label=\"Setup progress\">\n <h1>Form view</h1>\n <a href=\"/\" class=\"office-cta-card\">\n <span class=\"office-cta-label\">Agent Office</span>\n <span class=\"office-cta-desc\">Gamified pixel setup (recommended)</span>\n <span class=\"office-cta-action\">Open office →</span>\n </a>\n <div class=\"project\" id=\"project-name\">…</div>\n <div class=\"ring-wrap\">\n <div class=\"ring\" id=\"progress-ring\" style=\"--pct: 0\"><span id=\"ring-pct\">0%</span></div>\n <div>\n <div style=\"font-weight:600;color:#f8fafc\">Setup progress</div>\n <div style=\"font-size:13px;color:#94a3b8\">Save anytime — resume with agent-kit setup</div>\n <div class=\"wizard-level-pill\" id=\"wizard-level-pill\" hidden aria-live=\"polite\">L3 → L5</div>\n </div>\n </div>\n <ul class=\"section-nav\" id=\"section-nav\"></ul>\n </aside>\n <div class=\"main\">\n <div id=\"status\" class=\"status\" role=\"status\" aria-live=\"polite\"></div>\n <article class=\"card\" id=\"wizard-card\" aria-labelledby=\"step-title\"></article>\n <div class=\"footer\" id=\"wizard-footer\">\n <a href=\"/\" class=\"btn office-footer-btn\">Agent Office</a>\n <div class=\"footer-actions\">\n <button type=\"button\" class=\"btn secondary hidden\" id=\"back-btn\">Back</button>\n <button type=\"button\" class=\"btn primary\" id=\"next-btn\">Next</button>\n <button type=\"button\" class=\"btn primary hidden\" id=\"save-btn\">Save project context</button>\n </div>\n </div>\n </div>\n </div>\n <script>window.WIZARD_BOOT = ${bootJson};</script>\n <script>${js}</script>\n</body>\n</html>`;\n}\n\nexport function renderSetupWizardHtmlWithContext(cwd: string): string {\n const viewModel = getSetupFormViewModel(cwd);\n const context = scanProjectContext(cwd);\n const boot = buildWizardBootConfig(cwd, viewModel);\n const stackSignals = [\n ...context.architecture.frameworks,\n ...context.architecture.testTools.slice(0, 2),\n ...(viewModel.hasSupabase ? [\"supabase\"] : [])\n ].filter(Boolean);\n return renderSetupWizardHtml({ ...boot, stackSignals: [...new Set(stackSignals)] });\n}\n","import { existsSync, readFileSync } from \"node:fs\";\nimport { join } from \"node:path\";\nimport { AgenticLevelContract, type AgenticLevelContractValue } from \"../config/contracts.js\";\nimport { createAuditReport } from \"../install/audit.js\";\nimport { validateAdapter, type AdapterValidationTarget } from \"../install/adapter-validate.js\";\nimport { scanProjectContext } from \"./context.js\";\nimport { loadOnboardingState, saveOnboardingState } from \"./onboarding-state.js\";\nimport { detectIdeRulePresent, type IdeSurface } from \"./wizard/checklist.js\";\nimport { nowIso } from \"./shared.js\";\n\nexport type AgenticLevelNumber = 3 | 4 | 5 | 6 | 7 | 8;\nexport type AgenticLevelSignal = AgenticLevelContractValue[\"signals\"][number];\nexport type AgenticLevelReport = AgenticLevelContractValue;\n\nconst CACHE_TTL_MS = 30_000;\nconst cache = new Map<string, { at: number; report: AgenticLevelReport }>();\n\nexport function isMaintainerSourceRepo(cwd: string): boolean {\n return existsSync(join(cwd, \"package.json\")) && existsSync(join(cwd, \"src\")) && existsSync(join(cwd, \"templates\"));\n}\n\nfunction signal(id: string, level: 3 | 4 | 5 | 6, label: string, pass: boolean, evidence: string, remediation: string): AgenticLevelSignal {\n return { id, level, label, pass, evidence, remediation };\n}\n\nfunction detectIdePresent(cwd: string): { pass: boolean; evidence: string } {\n const onboarding = loadOnboardingState(cwd);\n if (onboarding.ideSurface && detectIdeRulePresent(cwd, onboarding.ideSurface)) {\n return { pass: true, evidence: `${onboarding.ideSurface} adapter configured` };\n }\n const surfaces: IdeSurface[] = [\"cursor\", \"copilot\", \"claude\", \"codex\"];\n for (const surface of surfaces) {\n if (detectIdeRulePresent(cwd, surface)) {\n return { pass: true, evidence: `${surface} adapter files detected` };\n }\n }\n if (existsSync(join(cwd, \".cursor/rules/cursor-agent-kit.mdc\"))) {\n return { pass: true, evidence: \"Cursor council rules from init\" };\n }\n return { pass: false, evidence: \"No IDE adapter rules or subagents detected\" };\n}\n\nfunction detectTierBSubagents(cwd: string): { pass: boolean; evidence: string } {\n const paths = [\".cursor/agents/planner.md\", \".codex/agents/planner.toml\", \".claude/agents/planner.md\", \".github/copilot-instructions.md\"];\n const found = paths.filter((rel) => existsSync(join(cwd, rel)));\n if (found.length > 0) {\n return { pass: true, evidence: `Specialist surface: ${found[0]}` };\n }\n return { pass: false, evidence: \"No council subagents or Copilot instructions installed\" };\n}\n\nfunction readDocSnippet(cwd: string, name: string, needles: string[]): boolean {\n const path = join(cwd, name);\n if (!existsSync(path)) return false;\n const lower = readFileSync(path, \"utf8\").toLowerCase();\n return needles.every((needle) => lower.includes(needle.toLowerCase()));\n}\n\nfunction adapterTargetForIde(ide: IdeSurface | undefined): AdapterValidationTarget | null {\n if (ide === \"cursor\" || ide === \"codex\" || ide === \"claude\" || ide === \"copilot\") return ide;\n return null;\n}\n\nfunction buildSignals(cwd: string, maintainerProfile: boolean): AgenticLevelSignal[] {\n const signals: AgenticLevelSignal[] = [];\n const ide = detectIdePresent(cwd);\n signals.push(\n signal(\n \"l3-ide\",\n 3,\n \"AI-native IDE or adapter rules\",\n ide.pass,\n ide.evidence,\n \"Run agent-kit init and complete the IDE station, or agent-kit init --activate cursor|codex\"\n )\n );\n\n const context = scanProjectContext(cwd);\n const openQuestions = context.openQuestions.length;\n const contextReady =\n Boolean(context.productSummary.trim()) &&\n Boolean(context.primaryAudience.trim()) &&\n Boolean(context.authModel.trim()) &&\n context.primaryWorkflows.length > 0 &&\n openQuestions === 0;\n\n signals.push(\n signal(\n \"l4-agents-md\",\n 4,\n \"Council contract (AGENTS.md)\",\n existsSync(join(cwd, \"AGENTS.md\")),\n existsSync(join(cwd, \"AGENTS.md\")) ? \"AGENTS.md installed\" : \"AGENTS.md missing\",\n \"Run agent-kit init --stack next-supabase\"\n )\n );\n signals.push(\n signal(\n \"l4-adapters-doc\",\n 4,\n \"Assistant activation doc\",\n existsSync(join(cwd, \"ASSISTANT_ADAPTERS.md\")),\n existsSync(join(cwd, \"ASSISTANT_ADAPTERS.md\")) ? \"ASSISTANT_ADAPTERS.md installed\" : \"ASSISTANT_ADAPTERS.md missing\",\n \"Run agent-kit init or agent-kit update\"\n )\n );\n signals.push(\n signal(\n \"l4-roster\",\n 4,\n \"Machine-readable council roster\",\n existsSync(join(cwd, \".agent-kit/agent-roster.json\")),\n existsSync(join(cwd, \".agent-kit/agent-roster.json\")) ? \".agent-kit/agent-roster.json present\" : \"Roster missing\",\n \"Run agent-kit init or agent-kit update\"\n )\n );\n signals.push(\n signal(\n \"l4-project-context\",\n 4,\n \"Project context without open questions\",\n contextReady,\n contextReady\n ? \"Core project context fields complete\"\n : openQuestions > 0\n ? `${openQuestions} open question(s) remain`\n : \"Fill product, audience, auth, and workflows in setup\",\n \"Complete setup wizard or edit .agent-kit/project-context.json\"\n )\n );\n\n const tierB = detectTierBSubagents(cwd);\n signals.push(\n signal(\"l5-subagents\", 5, \"Tier-B specialist activation\", tierB.pass, tierB.evidence, \"Run agent-kit init --activate cursor|codex|claude|copilot\")\n );\n\n const loopCoding = existsSync(join(cwd, \"LOOP_CODING.md\"));\n signals.push(\n signal(\n \"l6-loop-coding\",\n 6,\n \"Loop coding playbook\",\n loopCoding,\n loopCoding ? \"LOOP_CODING.md installed\" : \"LOOP_CODING.md missing\",\n \"Run agent-kit update or agent-kit init on a current kit version\"\n )\n );\n\n let auditPass = false;\n let auditEvidence = \"Audit not run\";\n try {\n const audit = createAuditReport(cwd);\n auditPass = audit.summary.fail === 0 && audit.readiness.level !== \"needs-setup\";\n auditEvidence = `${audit.summary.pass} pass / ${audit.summary.warn} warn / ${audit.summary.fail} fail · ${audit.readiness.level}`;\n } catch (error) {\n auditEvidence = error instanceof Error ? error.message : String(error);\n }\n signals.push(\n signal(\n \"l6-audit-gate\",\n 6,\n \"Audit gate at baseline-setup or better\",\n auditPass,\n auditEvidence,\n \"Run agent-kit audit --min-readiness baseline-setup and fix failures\"\n )\n );\n\n if (maintainerProfile) {\n const pkgPath = join(cwd, \"package.json\");\n let releaseCheck = false;\n if (existsSync(pkgPath)) {\n try {\n const pkg = JSON.parse(readFileSync(pkgPath, \"utf8\")) as { scripts?: Record<string, string> };\n releaseCheck = Boolean(pkg.scripts?.[\"release:check\"]) && existsSync(join(cwd, \"scripts/release-check.mjs\"));\n } catch {\n releaseCheck = false;\n }\n }\n signals.push(\n signal(\n \"l6-maintainer-release-check\",\n 6,\n \"Maintainer release-check gate\",\n releaseCheck,\n releaseCheck ? \"npm run release:check wired in package.json\" : \"release:check script missing\",\n \"Use npm run release:check before merge; see MAINTAINER_RELEASE.md\"\n )\n );\n const maintainerDocs = existsSync(join(cwd, \"MAINTAINER_RELEASE.md\")) || readDocSnippet(cwd, \"DOCS.md\", [\"maintainer dogfood\", \"dogfood:init\"]);\n signals.push(\n signal(\n \"l6-maintainer-docs\",\n 6,\n \"Maintainer dogfood and release evidence docs\",\n maintainerDocs,\n maintainerDocs ? \"Maintainer climb docs present\" : \"Add MAINTAINER_RELEASE.md / DOCS maintainer section\",\n \"Read MAINTAINER_RELEASE.md and run npm run dogfood:init locally\"\n )\n );\n } else {\n const onboarding = loadOnboardingState(cwd);\n const adapterTarget = adapterTargetForIde(onboarding.ideSurface);\n let adapterPass = false;\n let adapterEvidence = \"No IDE surface selected for validation\";\n if (adapterTarget) {\n const report = validateAdapter(cwd, adapterTarget);\n adapterPass = report.summary.fail === 0;\n adapterEvidence = `${adapterTarget}: ${report.summary.pass} pass / ${report.summary.warn} warn / ${report.summary.fail} fail`;\n } else if (tierB.pass) {\n const report = validateAdapter(cwd, \"cursor\");\n adapterPass = report.summary.fail === 0;\n adapterEvidence = `cursor (detected): ${report.summary.pass} pass / ${report.summary.fail} fail`;\n }\n signals.push(\n signal(\"l6-adapter-validate\", 6, \"Adapter validate for active IDE\", adapterPass, adapterEvidence, \"Run agent-kit adapter validate cursor|codex|all\")\n );\n\n const ciWorkflow = existsSync(join(cwd, \".github/workflows/agent-kit-audit.yml\"));\n const testingEval = existsSync(join(cwd, \"TESTING.md\")) && readDocSnippet(cwd, \"TESTING.md\", [\"agent-kit audit\", \"eval\"]);\n const evalLoop = ciWorkflow || testingEval;\n signals.push(\n signal(\n \"l6-eval-loop\",\n 6,\n \"Eval-driven loop documented in CI or TESTING.md\",\n evalLoop,\n ciWorkflow\n ? \".github/workflows/agent-kit-audit.yml present\"\n : testingEval\n ? \"TESTING.md documents eval/audit loop\"\n : \"No CI audit workflow or TESTING eval section\",\n \"Enable agent-kit-audit.yml or add eval loop section to TESTING.md (see LOOP_CODING.md)\"\n )\n );\n }\n\n return signals;\n}\n\nfunction computeCurrentLevel(signals: AgenticLevelSignal[]): 3 | 4 | 5 | 6 {\n let current: 3 | 4 | 5 | 6 = 3;\n for (const level of [3, 4, 5, 6] as const) {\n const tier = signals.filter((item) => item.level === level);\n if (tier.length === 0) continue;\n if (tier.every((item) => item.pass)) {\n current = level;\n } else {\n break;\n }\n }\n return current;\n}\n\nfunction defaultTargetLevel(maintainerProfile: boolean): AgenticLevelNumber {\n return maintainerProfile ? 6 : 5;\n}\n\nexport function resolveTargetLevel(cwd: string, maintainerProfile: boolean): AgenticLevelNumber {\n const onboarding = loadOnboardingState(cwd);\n const raw = onboarding.targetAgenticLevel;\n if (raw && raw >= 3 && raw <= 8) return raw;\n return defaultTargetLevel(maintainerProfile);\n}\n\nexport function computeAgenticLevel(cwd: string, options: { forceRefresh?: boolean } = {}): AgenticLevelReport {\n const cacheKey = cwd;\n const cached = cache.get(cacheKey);\n if (!options.forceRefresh && cached && Date.now() - cached.at < CACHE_TTL_MS) {\n return cached.report;\n }\n\n const maintainerProfile = isMaintainerSourceRepo(cwd);\n const signals = buildSignals(cwd, maintainerProfile);\n const currentLevel = computeCurrentLevel(signals);\n const targetLevel = resolveTargetLevel(cwd, maintainerProfile);\n const climbSteps = signals.filter((item) => !item.pass && item.level <= Math.min(targetLevel, 6)).slice(0, 5);\n\n const report: AgenticLevelReport = AgenticLevelContract.parse({\n currentLevel,\n targetLevel,\n maintainerProfile,\n computedAt: nowIso(),\n maintainerNote: maintainerProfile ? \"Kit source repo — run npm run dogfood:init locally; overlay is gitignored.\" : undefined,\n signals,\n climbSteps\n });\n\n cache.set(cacheKey, { at: Date.now(), report });\n saveOnboardingState(cwd, {\n lastAgenticLevel: currentLevel,\n lastAgenticComputedAt: report.computedAt\n });\n\n return report;\n}\n\nexport function summarizeAdapterValidation(\n cwd: string,\n ideSurface: IdeSurface | undefined\n): { pass: number; warn: number; fail: number; target: string | null } {\n const target = adapterTargetForIde(ideSurface);\n if (!target) {\n return { pass: 0, warn: 0, fail: 0, target: null };\n }\n const report = validateAdapter(cwd, target);\n return {\n pass: report.summary.pass,\n warn: report.summary.warn,\n fail: report.summary.fail,\n target\n };\n}\n\nexport function invalidateAgenticLevelCache(cwd: string): void {\n cache.delete(cwd);\n}\n","import { watch, type FSWatcher } from \"node:fs\";\nimport { createServer, type IncomingMessage, type Server, type ServerResponse } from \"node:http\";\nimport { join } from \"node:path\";\nimport { getActiveSessionId, listSessions, readSession, readSessionEvents } from \"./session.js\";\nimport { renderLiveStudioHtmlWithContext } from \"./office/render.js\";\nimport { COUNCIL_SESSIONS_DIR, ensureStudioDirs } from \"./shared.js\";\n\nexport interface StudioServerOptions {\n cwd: string;\n port?: number;\n host?: string;\n}\n\nexport interface StudioServerHandle {\n url: string;\n port: number;\n requestedPort: number;\n portFallback: boolean;\n close: () => Promise<void>;\n}\n\nconst DEFAULT_PORT = 9331;\nconst DEFAULT_HOST = \"127.0.0.1\";\n\ntype SseClient = ServerResponse;\n\nconst sseClients = new Set<SseClient>();\nlet activeWatcher: FSWatcher | null = null;\nlet watchedEventsPath: string | null = null;\n\nfunction sendJson(response: ServerResponse, statusCode: number, payload: unknown): void {\n response.writeHead(statusCode, {\n \"Content-Type\": \"application/json; charset=utf-8\",\n \"Cache-Control\": \"no-store\"\n });\n response.end(JSON.stringify(payload));\n}\n\nfunction sendHtml(response: ServerResponse, html: string): void {\n response.writeHead(200, {\n \"Content-Type\": \"text/html; charset=utf-8\",\n \"Cache-Control\": \"no-store\",\n \"Content-Security-Policy\":\n \"default-src 'none'; connect-src 'self'; style-src 'unsafe-inline'; script-src 'unsafe-inline'; img-src data:; base-uri 'none'; form-action 'self'\"\n });\n response.end(html);\n}\n\nfunction broadcastSse(event: string, data: unknown): void {\n const payload = `event: ${event}\\ndata: ${JSON.stringify(data)}\\n\\n`;\n for (const client of sseClients) {\n try {\n client.write(payload);\n } catch {\n sseClients.delete(client);\n }\n }\n}\n\nfunction stopWatcher(): void {\n if (activeWatcher) {\n activeWatcher.close();\n activeWatcher = null;\n watchedEventsPath = null;\n }\n}\n\nfunction watchSessionEvents(cwd: string, sessionId: string): void {\n const eventsPath = join(cwd, COUNCIL_SESSIONS_DIR, sessionId, \"events.jsonl\");\n if (watchedEventsPath === eventsPath && activeWatcher) return;\n stopWatcher();\n watchedEventsPath = eventsPath;\n try {\n activeWatcher = watch(eventsPath, () => {\n try {\n const events = readSessionEvents(cwd, sessionId);\n const latest = events.at(-1);\n if (latest) broadcastSse(\"event\", { sessionId, event: latest, total: events.length });\n } catch {\n // file may be mid-write\n }\n });\n } catch {\n watchedEventsPath = null;\n activeWatcher = null;\n }\n}\n\nfunction safeSessionId(raw: string): string | null {\n if (!/^[a-z0-9-]+$/i.test(raw)) return null;\n return raw;\n}\n\nfunction handleRequest(cwd: string, request: IncomingMessage, response: ServerResponse): void {\n const url = new URL(request.url ?? \"/\", \"http://127.0.0.1\");\n\n if (request.method === \"GET\" && (url.pathname === \"/\" || url.pathname === \"/office\")) {\n sendHtml(response, renderLiveStudioHtmlWithContext(cwd));\n return;\n }\n\n if (request.method === \"GET\" && url.pathname === \"/api/sessions\") {\n ensureStudioDirs(cwd);\n let activeSessionId = \"\";\n try {\n activeSessionId = getActiveSessionId(cwd);\n } catch {\n activeSessionId = \"\";\n }\n const sessions = listSessions(cwd);\n sendJson(response, 200, { activeSessionId, sessions });\n return;\n }\n\n const eventsMatch = url.pathname.match(/^\\/api\\/sessions\\/([^/]+)\\/events$/);\n if (request.method === \"GET\" && eventsMatch) {\n const sessionId = safeSessionId(eventsMatch[1] ?? \"\");\n if (!sessionId) {\n sendJson(response, 400, { error: \"Invalid session id.\" });\n return;\n }\n try {\n const session = readSession(cwd, sessionId);\n const events = readSessionEvents(cwd, sessionId);\n sendJson(response, 200, { session, events });\n } catch (error) {\n sendJson(response, 404, { error: error instanceof Error ? error.message : String(error) });\n }\n return;\n }\n\n if (request.method === \"GET\" && url.pathname === \"/api/events/stream\") {\n const sessionId = url.searchParams.get(\"sessionId\") ?? \"\";\n let activeId = sessionId;\n if (!activeId) {\n try {\n activeId = getActiveSessionId(cwd);\n } catch {\n sendJson(response, 404, { error: \"No active session.\" });\n return;\n }\n }\n if (!safeSessionId(activeId)) {\n sendJson(response, 400, { error: \"Invalid session id.\" });\n return;\n }\n\n response.writeHead(200, {\n \"Content-Type\": \"text/event-stream; charset=utf-8\",\n \"Cache-Control\": \"no-store\",\n Connection: \"keep-alive\"\n });\n response.write(\": connected\\n\\n\");\n sseClients.add(response);\n watchSessionEvents(cwd, activeId);\n\n try {\n const events = readSessionEvents(cwd, activeId);\n response.write(`event: snapshot\\ndata: ${JSON.stringify({ sessionId: activeId, events })}\\n\\n`);\n } catch {\n response.write(`event: snapshot\\ndata: ${JSON.stringify({ sessionId: activeId, events: [] })}\\n\\n`);\n }\n\n request.on(\"close\", () => {\n sseClients.delete(response);\n if (sseClients.size === 0) stopWatcher();\n });\n return;\n }\n\n sendJson(response, 404, { error: \"Not found.\" });\n}\n\nfunction listen(server: Server, host: string, port: number): Promise<number> {\n return new Promise((resolve, reject) => {\n server.once(\"error\", reject);\n server.listen(port, host, () => {\n const address = server.address();\n if (!address || typeof address === \"string\") {\n reject(new Error(\"Could not determine studio server port.\"));\n return;\n }\n resolve(address.port);\n });\n });\n}\n\nexport async function startStudioServer(options: StudioServerOptions): Promise<StudioServerHandle> {\n const host = options.host ?? DEFAULT_HOST;\n const requestedPort = options.port ?? DEFAULT_PORT;\n ensureStudioDirs(options.cwd);\n\n const server = createServer((request, response) => {\n try {\n handleRequest(options.cwd, request, response);\n } catch (error) {\n sendJson(response, 500, { error: error instanceof Error ? error.message : String(error) });\n }\n });\n\n let port = requestedPort;\n let portFallback = false;\n try {\n port = await listen(server, host, requestedPort);\n } catch (error) {\n if (error instanceof Error && \"code\" in error && error.code === \"EADDRINUSE\") {\n portFallback = true;\n port = await listen(server, host, 0);\n } else {\n throw error;\n }\n }\n\n return {\n url: `http://${host}:${port}`,\n port,\n requestedPort,\n portFallback,\n close: () =>\n new Promise((resolve, reject) => {\n stopWatcher();\n for (const client of sseClients) {\n try {\n client.end();\n } catch {\n // ignore\n }\n }\n sseClients.clear();\n server.close((closeError) => {\n if (closeError) reject(closeError);\n else resolve();\n });\n })\n };\n}\n","import { existsSync, readFileSync } from \"node:fs\";\nimport { extname, join } from \"node:path\";\nimport {\n closeSession,\n recordArtifact,\n recordCorrection,\n recordDecision,\n recordHandoff,\n recordNote,\n recordRequiredOutput,\n recordVerification,\n renderActiveSession,\n startSession,\n getActiveSessionId,\n type HandoffOptions,\n type SessionCommandResult,\n type StartSessionOptions\n} from \"./session.js\";\n\nexport interface SessionCheckpointPayload {\n start?: StartSessionOptions;\n notes?: Array<{ agent: string; text: string }>;\n decisions?: Array<{ agent: string; text: string; risk?: string }>;\n handoffs?: Array<HandoffOptions>;\n corrections?: Array<{ agent?: string; scope?: \"session\" | \"project\" | \"agent\" | \"upstream-proposal\"; text: string }>;\n artifacts?: Array<{ file: string; note?: string }>;\n verifications?: Array<{ command: string; result: \"pass\" | \"fail\" | \"skipped\"; notes?: string }>;\n outputs?: Array<{ name: string; status: \"missing\" | \"partial\" | \"complete\" | \"not-applicable\"; evidence?: string }>;\n render?: boolean;\n close?: boolean | \"planned\" | \"in-progress\" | \"blocked\" | \"complete\";\n}\n\nexport interface SessionCheckpointResult extends SessionCommandResult {\n applied: {\n notes: number;\n decisions: number;\n handoffs: number;\n corrections: number;\n artifacts: number;\n verifications: number;\n outputs: number;\n };\n rendered: boolean;\n closed: boolean;\n}\n\nfunction parseCheckpointMarkdown(content: string): SessionCheckpointPayload {\n const payload: SessionCheckpointPayload = { notes: [], decisions: [], handoffs: [], outputs: [] };\n const sections = content.split(/^## /m).slice(1);\n for (const section of sections) {\n const [headingLine, ...bodyLines] = section.split(\"\\n\");\n if (!headingLine) continue;\n const heading = headingLine.trim().toLowerCase();\n const lines = bodyLines.map((line) => line.trim()).filter(Boolean);\n if (heading === \"notes\") {\n for (const line of lines) {\n const match = line.match(/^-?\\s*@(\\S+):\\s*(.+)$/);\n if (match?.[1] && match[2]) payload.notes?.push({ agent: match[1], text: match[2] });\n }\n }\n if (heading === \"decisions\") {\n for (const line of lines) {\n const match = line.match(/^-?\\s*@(\\S+):\\s*(.+?)(?:\\s+\\(risk:\\s*(.+)\\))?$/i);\n if (match?.[1] && match[2]) {\n payload.decisions?.push({ agent: match[1], text: match[2], ...(match[3] ? { risk: match[3] } : {}) });\n }\n }\n }\n if (heading === \"handoffs\") {\n for (const line of lines) {\n const match = line.match(/^-?\\s*(\\S+)\\s*->\\s*(\\S+):\\s*(.+?)\\s+\\|\\s*risk:\\s*(.+)$/i);\n if (match?.[1] && match?.[2] && match?.[3] && match?.[4]) {\n payload.handoffs?.push({\n fromAgentId: match[1],\n toAgentId: match[2],\n decision: match[3],\n risk: match[4]\n });\n }\n }\n }\n if (heading === \"outputs\") {\n for (const line of lines) {\n const match = line.match(/^-?\\s*(.+?):\\s*(missing|partial|complete|not-applicable)(?:\\s+\\|\\s*(.+))?$/i);\n if (match?.[1] && match?.[2]) {\n payload.outputs?.push({\n name: match[1].trim(),\n status: match[2].toLowerCase() as \"missing\" | \"partial\" | \"complete\" | \"not-applicable\",\n ...(match[3] ? { evidence: match[3].trim() } : {})\n });\n }\n }\n }\n if (heading === \"options\") {\n if (lines.some((line) => /render:\\s*true/i.test(line))) payload.render = true;\n if (lines.some((line) => /close:\\s*true/i.test(line))) payload.close = true;\n }\n }\n return payload;\n}\n\nexport function parseCheckpointFile(filePath: string): SessionCheckpointPayload {\n const content = readFileSync(filePath, \"utf8\");\n const ext = extname(filePath).toLowerCase();\n if (ext === \".json\") {\n const parsed = JSON.parse(content) as SessionCheckpointPayload;\n if (!parsed || typeof parsed !== \"object\") throw new Error(\"Checkpoint JSON must be an object.\");\n return parsed;\n }\n if (ext === \".md\" || ext === \".markdown\") return parseCheckpointMarkdown(content);\n throw new Error(\"Checkpoint file must be .json or .md\");\n}\n\nexport function applySessionCheckpoint(cwd: string, payload: SessionCheckpointPayload): SessionCheckpointResult {\n const applied = {\n notes: 0,\n decisions: 0,\n handoffs: 0,\n corrections: 0,\n artifacts: 0,\n verifications: 0,\n outputs: 0\n };\n\n if (payload.start) {\n startSession(cwd, payload.start);\n }\n\n for (const note of payload.notes ?? []) {\n recordNote(cwd, note.agent, note.text);\n applied.notes += 1;\n }\n\n for (const decision of payload.decisions ?? []) {\n recordDecision(cwd, decision.agent, decision.text, decision.risk);\n applied.decisions += 1;\n }\n\n for (const handoff of payload.handoffs ?? []) {\n recordHandoff(cwd, handoff);\n applied.handoffs += 1;\n }\n\n for (const correction of payload.corrections ?? []) {\n recordCorrection(cwd, {\n scope: correction.scope ?? \"session\",\n text: correction.text,\n ...(correction.agent ? { agentId: correction.agent } : {})\n });\n applied.corrections += 1;\n }\n\n for (const artifact of payload.artifacts ?? []) {\n recordArtifact(cwd, artifact.file, artifact.note);\n applied.artifacts += 1;\n }\n\n for (const verification of payload.verifications ?? []) {\n recordVerification(cwd, verification.command, verification.result, verification.notes);\n applied.verifications += 1;\n }\n\n for (const output of payload.outputs ?? []) {\n recordRequiredOutput(cwd, output.name, output.status, output.evidence);\n applied.outputs += 1;\n }\n\n let rendered = false;\n if (payload.render !== false) {\n renderActiveSession(cwd);\n rendered = true;\n }\n\n let closed = false;\n if (payload.close) {\n const status = payload.close === true ? \"complete\" : payload.close;\n closeSession(cwd, status);\n closed = true;\n }\n\n const sessionId = getActiveSessionId(cwd);\n return {\n sessionId,\n sessionPath: `.agent-kit/council-sessions/${sessionId}`,\n applied,\n rendered,\n closed\n };\n}\n\nexport function checkpointSessionFromFile(cwd: string, filePath: string): SessionCheckpointResult {\n const absolute = join(cwd, filePath);\n if (!existsSync(absolute)) throw new Error(`Checkpoint file not found: ${filePath}`);\n return applySessionCheckpoint(cwd, parseCheckpointFile(absolute));\n}\n","import pc from \"picocolors\";\n\nconst colorEnabled = process.env.NO_COLOR === undefined && process.stdout.isTTY === true;\n\nfunction paint(painter: (text: string) => string, text: string): string {\n return colorEnabled ? painter(text) : text;\n}\n\nexport const style = {\n heading: (text: string) => paint(pc.cyan, text),\n pass: (text: string) => paint(pc.green, text),\n warn: (text: string) => paint(pc.yellow, text),\n fail: (text: string) => paint(pc.red, text),\n dim: (text: string) => paint(pc.dim, text),\n bold: (text: string) => paint(pc.bold, text)\n};\n\nexport function levelLabel(level: \"pass\" | \"warn\" | \"fail\"): string {\n const label = level.toUpperCase().padEnd(4);\n if (level === \"pass\") return style.pass(label);\n if (level === \"warn\") return style.warn(label);\n return style.fail(label);\n}\n\nexport function printJson(value: unknown): void {\n console.log(JSON.stringify(value, null, 2));\n}\n\nexport function heading(text: string): void {\n console.log(style.heading(text));\n}\n\nexport function line(text = \"\"): void {\n console.log(text);\n}\n\nexport function detail(text: string): void {\n console.log(style.dim(` ${text}`));\n}\n\nexport function listItem(text: string): void {\n console.log(`- ${text}`);\n}\n\n/** Print a labeled list of file paths, skipping empty groups. */\nexport function fileGroup(label: string, files: string[]): void {\n if (files.length === 0) return;\n console.log(`${style.bold(label)} (${files.length})`);\n for (const file of files) console.log(` ${file}`);\n}\n\nexport function fail(message: string): void {\n console.error(style.fail(`error: ${message}`));\n}\n"],"mappings":";;;AAAA,SAAS,cAAAA,cAAY,gBAAAC,gBAAc,iBAAAC,sBAAqB;AACxD,SAAS,QAAAC,cAAY;AACrB,SAAS,eAAe;;;ACFxB,SAAS,cAAAC,aAAY,gBAAAC,qBAAoB;AACzC,SAAS,QAAAC,aAAY;;;ACDrB,SAAS,kBAAkB;AAC3B,SAAS,QAAQ,YAAY,WAAW,WAAW,cAAc,aAAa,qBAAqB;AACnG,SAAS,UAAU,SAAS,YAAY,MAAM,UAAU,eAAe;AAEhE,SAAS,UAAU,MAAoB;AAC5C,YAAU,MAAM,EAAE,WAAW,KAAK,CAAC;AACrC;AAEO,SAAS,iBAAiB,MAA6B;AAC5D,MAAI,CAAC,WAAW,IAAI,EAAG,QAAO;AAC9B,SAAO,aAAa,MAAM,MAAM;AAClC;AAEO,SAAS,UAAU,MAAc,SAAuB;AAC7D,YAAU,QAAQ,IAAI,CAAC;AACvB,gBAAc,MAAM,OAAO;AAC7B;AAEO,SAAS,OAAO,SAAyB;AAC9C,SAAO,WAAW,QAAQ,EAAE,OAAO,OAAO,EAAE,OAAO,KAAK;AAC1D;AAEO,SAAS,cAAc,MAAc,eAA+B;AACzE,QAAM,eAAe,QAAQ,IAAI;AACjC,QAAM,eAAe,QAAQ,cAAc,aAAa;AACxD,QAAM,MAAM,SAAS,cAAc,YAAY;AAE/C,MAAI,QAAQ,QAAQ,IAAI,WAAW,IAAI,KAAK,WAAW,GAAG,GAAG;AAC3D,UAAM,IAAI,MAAM,6BAA6B,aAAa,EAAE;AAAA,EAC9D;AAEA,SAAO;AACT;AAEO,SAAS,mBAAmB,MAAwB;AACzD,MAAI,CAAC,WAAW,IAAI,EAAG,QAAO,CAAC;AAE/B,QAAM,MAAgB,CAAC;AACvB,QAAM,QAAQ,CAAC,QAAgB;AAC7B,eAAW,SAAS,YAAY,GAAG,GAAG;AACpC,YAAM,WAAW,KAAK,KAAK,KAAK;AAChC,UAAI;AACJ,UAAI;AACF,gBAAQ,UAAU,QAAQ;AAAA,MAC5B,QAAQ;AACN;AAAA,MACF;AAEA,UAAI,MAAM,eAAe,EAAG;AAE5B,UAAI,MAAM,YAAY,GAAG;AACvB,YAAI,UAAU,kBAAkB,UAAU,OAAQ;AAClD,cAAM,QAAQ;AAAA,MAChB,OAAO;AACL,YAAI,KAAK,SAAS,MAAM,QAAQ,CAAC;AAAA,MACnC;AAAA,IACF;AAAA,EACF;AAEA,QAAM,IAAI;AACV,SAAO,IAAI,KAAK;AAClB;AAQO,SAAS,qBACd,YACA,YACA,oBACA,UAAsD,CAAC,GAC3C;AACZ,QAAM,aAAa,cAAc,YAAY,kBAAkB;AAC/D,QAAM,gBAAgB,aAAa,YAAY,MAAM;AACrD,QAAM,kBAAkB,iBAAiB,UAAU;AAEnD,MAAI,oBAAoB,MAAM;AAC5B,cAAU,YAAY,aAAa;AACnC,WAAO,EAAE,QAAQ,WAAW,QAAQ,mBAAmB;AAAA,EACzD;AAEA,MAAI,OAAO,eAAe,MAAM,OAAO,aAAa,GAAG;AACrD,WAAO,EAAE,QAAQ,aAAa,QAAQ,mBAAmB;AAAA,EAC3D;AAEA,MAAI,QAAQ,OAAO;AACjB,cAAU,YAAY,aAAa;AACnC,WAAO,EAAE,QAAQ,eAAe,QAAQ,mBAAmB;AAAA,EAC7D;AAEA,QAAM,eAAe,QAAQ,gBAAgB,KAAK,YAAY,cAAc,WAAW;AACvF,QAAM,WAAW,GAAG,KAAK,IAAI,CAAC,IAAI,mBAAmB,QAAQ,oBAAoB,GAAG,CAAC;AACrF,QAAM,eAAe,KAAK,cAAc,QAAQ;AAChD,YAAU,cAAc,aAAa;AAErC,SAAO;AAAA,IACL,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,cAAc,SAAS,YAAY,YAAY;AAAA,EACjD;AACF;AAEO,SAAS,cAAc,YAAoB,YAA0B;AAC1E,YAAU,QAAQ,UAAU,CAAC;AAC7B,SAAO,YAAY,YAAY;AAAA,IAC7B,WAAW;AAAA,IACX,OAAO;AAAA,IACP,QAAQ,CAAC,WAAW,CAAC,SAAS,MAAM,EAAE,WAAW,WAAW;AAAA,EAC9D,CAAC;AACH;;;AChHA,SAAS,cAAAC,mBAAkB;AAC3B,SAAS,WAAAC,UAAS,QAAAC,OAAM,WAAAC,gBAAe;AACvC,SAAS,qBAAqB;AAEvB,SAAS,gBAAgB,QAAQF,SAAQ,cAAc,YAAY,GAAG,CAAC,GAAW;AACvF,MAAI,UAAUE,SAAQ,KAAK;AAE3B,WAAS,IAAI,GAAG,IAAI,GAAG,KAAK,GAAG;AAC7B,QAAIH,YAAWE,MAAK,SAAS,cAAc,CAAC,GAAG;AAC7C,aAAO;AAAA,IACT;AAEA,UAAM,SAASD,SAAQ,OAAO;AAC9B,QAAI,WAAW,QAAS;AACxB,cAAU;AAAA,EACZ;AAEA,QAAM,IAAI,MAAM,kDAAkD;AACpE;;;AFbO,SAAS,aAAuB;AACrC,QAAM,cAAc,gBAAgB;AACpC,SAAO,mBAAmBG,MAAK,aAAa,QAAQ,CAAC,EAAE,OAAO,CAAC,SAAS,KAAK,SAAS,KAAK,CAAC;AAC9F;AAMO,SAAS,SAAS,KAAa,WAAmB,UAAiD,CAAC,GAAmB;AAC5H,QAAM,cAAc,gBAAgB;AACpC,QAAM,aAAa,UAAU,SAAS,KAAK,IAAI,YAAY,GAAG,SAAS;AAEvE,MAAI,CAAC,mBAAmB,KAAK,UAAU,GAAG;AACxC,UAAM,IAAI,MAAM,uEAAuE;AAAA,EACzF;AAEA,QAAM,aAAaA,MAAK,aAAa,UAAU,UAAU;AAEzD,MAAI,CAACC,YAAW,UAAU,GAAG;AAC3B,UAAM,YAAY,WAAW,EAAE,KAAK,IAAI;AACxC,UAAM,IAAI,MAAM,kBAAkB,SAAS,wBAAwB,SAAS,EAAE;AAAA,EAChF;AAEA,QAAM,qBAAqBD,MAAK,cAAc,UAAU,UAAU;AAElE,MAAI,QAAQ,QAAQ;AAClB,UAAM,WAAW,iBAAiBA,MAAK,KAAK,kBAAkB,CAAC;AAC/D,UAAM,gBAAgBE,cAAa,YAAY,MAAM;AACrD,QAAI;AACJ,QAAI,aAAa,KAAM,UAAS;AAAA,aACvB,OAAO,QAAQ,MAAM,OAAO,aAAa,EAAG,UAAS;AAAA,QACzD,UAAS,QAAQ,QAAQ,gBAAgB;AAC9C,WAAO,EAAE,QAAQ,QAAQ,oBAAoB,QAAQ,KAAK;AAAA,EAC5D;AAEA,QAAM,SAAS,qBAAqB,YAAY,KAAK,oBAAoB;AAAA,IACvE,OAAO,QAAQ,QAAQ,KAAK;AAAA,IAC5B,cAAcF,MAAK,KAAK,cAAc,WAAW;AAAA,EACnD,CAAC;AAED,SAAO,EAAE,GAAG,QAAQ,QAAQ,MAAM;AACpC;;;AG/CA,SAAS,cAAAG,cAAY,gBAAAC,sBAAoB;AACzC,SAAS,QAAAC,QAAM,iBAAiB;;;ACCzB,IAAM,eAAe;AACrB,IAAM,kBAAkB;AAExB,IAAM,iBAAiC;AAAA,EAC5C,OAAO;AAAA,EACP,aAAa;AAAA,EACb,UAAU;AAAA,EACV,cAAc;AAAA,IACZ,UAAU;AAAA,IACV,YAAY;AAAA,IACZ,iBAAiB;AAAA,IACjB,oBAAoB;AAAA,EACtB;AAAA,EACA,cAAc;AAAA,IACZ,UAAU;AAAA,IACV,aAAa;AAAA,IACb,eAAe;AAAA,EACjB;AAAA,EACA,iBAAiB,CAAC,UAAU,UAAU,SAAS,OAAO;AAAA,EACtD,UAAU;AAAA,IACR,UAAU;AAAA,IACV,gBAAgB;AAAA,IAChB,SAAS;AAAA,EACX;AACF;AAEO,IAAM,YAAY;AAAA,EACvB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;AAEO,IAAM,kBAAkB;AAAA,EAC7B;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;AAEO,IAAM,8BAA8B;AACpC,IAAM,8BAA8B;AACpC,IAAM,+BAA+B;AACrC,IAAM,+BAA+B;AAErC,IAAM,uBAAuB;AAAA,EAClC;AAAA,IACE,QAAQ;AAAA,IACR,QAAQ;AAAA,EACV;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,IACR,QAAQ;AAAA,EACV;AACF;AAEO,IAAM,8BAA8B;AAAA,EACzC;AAAA,IACE,QAAQ;AAAA,IACR,QAAQ;AAAA,EACV;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,IACR,QAAQ;AAAA,EACV;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,IACR,QAAQ;AAAA,EACV;AACF;AAEO,IAAM,4BAA4B;AAAA,EACvC;AAAA,IACE,QAAQ;AAAA,IACR,QAAQ;AAAA,EACV;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,IACR,QAAQ;AAAA,EACV;AACF;AAEO,IAAM,sBAAsB;AAC5B,IAAM,kBAAkB;AAExB,IAAM,2BAA2B;AAAA,EACtC;AAAA,IACE,QAAQ;AAAA,IACR,QAAQ;AAAA,EACV;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,IACR,QAAQ;AAAA,EACV;AACF;AAEO,IAAM,kCAAkC;AACxC,IAAM,kCAAkC;AACxC,IAAM,4BAA4B;AAClC,IAAM,wCAAwC;AAE9C,IAAM,oBAAoB;AAAA,EAC/B;AAAA,IACE,QAAQ;AAAA,IACR,QAAQ;AAAA,EACV;AACF;;;ACjIA,SAAS,gBAAgB,cAAAC,aAAY,gBAAAC,qBAAoB;AACzD,SAAS,YAAAC,WAAU,WAAAC,UAAS,QAAAC,aAAY;AAGjC,IAAM,gBAAgB;AACtB,IAAM,eAAe;AACrB,IAAM,aAAa;AACnB,IAAM,kBAAkB;AACxB,IAAM,qBAAqB;AAC3B,IAAM,mBAAmB;AACzB,IAAM,0BAA0B;AAChC,IAAM,uBAAuB;AAC7B,IAAM,sBAAsB;AAC5B,IAAM,qBAAqB;AAElC,IAAM,kBAAkB;AAAA,EACtB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;AAEO,SAAS,SAAiB;AAC/B,UAAO,oBAAI,KAAK,GAAE,YAAY;AAChC;AAEO,SAAS,gBAAgB,MAAsB;AACpD,SAAO,gBAAgB,OAAO,CAAC,SAAS,YAAY,QAAQ,QAAQ,SAAS,YAAY,GAAG,IAAI;AAClG;AAEO,SAAS,qBAAqB,MAAuB;AAC1D,SAAO,gBAAgB,KAAK,CAAC,YAAY;AACvC,YAAQ,YAAY;AACpB,WAAO,QAAQ,KAAK,IAAI;AAAA,EAC1B,CAAC;AACH;AAEO,SAAS,SAAS,OAAuB;AAC9C,QAAM,UAAU,MAAM,KAAK,EAAE,YAAY;AACzC,MAAI,CAAC,QAAS,OAAM,IAAI,MAAM,sCAAsC;AACpE,MAAI,QAAQ,SAAS,GAAG,KAAK,QAAQ,SAAS,IAAI,KAAK,QAAQ,SAAS,IAAI,GAAG;AAC7E,UAAM,IAAI,MAAM,oCAAoC,KAAK,EAAE;AAAA,EAC7D;AACA,QAAM,OAAO,QACV,QAAQ,eAAe,GAAG,EAC1B,QAAQ,YAAY,EAAE,EACtB,MAAM,GAAG,EAAE;AACd,MAAI,CAAC,KAAM,OAAM,IAAI,MAAM,oCAAoC,KAAK,EAAE;AACtE,SAAO;AACT;AAEO,SAAS,iBAAiB,KAAmB;AAClD,YAAUC,MAAK,KAAK,aAAa,CAAC;AAClC,YAAUA,MAAK,KAAK,eAAe,CAAC;AACpC,YAAUA,MAAK,KAAK,oBAAoB,CAAC;AACzC,YAAUA,MAAK,KAAK,eAAe,YAAY,CAAC;AAClD;AAEO,SAAS,aAAgB,KAAa,cAAgC;AAC3E,QAAM,OAAO,cAAc,KAAK,YAAY;AAC5C,MAAI,CAACC,YAAW,IAAI,EAAG,QAAO;AAC9B,SAAO,KAAK,MAAMC,cAAa,MAAM,MAAM,CAAC;AAC9C;AAEO,SAAS,cAAc,KAAa,cAAsB,OAAsB;AACrF,YAAU,cAAc,KAAK,YAAY,GAAG,GAAG,KAAK,UAAU,OAAO,MAAM,CAAC,CAAC;AAAA,CAAI;AACnF;AAEO,SAAS,eAAe,KAAa,cAAsB,OAAsB;AACtF,QAAM,OAAO,cAAc,KAAK,YAAY;AAC5C,YAAUC,SAAQ,IAAI,CAAC;AACvB,iBAAe,MAAM,GAAG,KAAK,UAAU,KAAK,CAAC;AAAA,CAAI;AACnD;AAEO,SAAS,cAAc,KAAa,cAAiC;AAC1E,QAAM,OAAO,iBAAiB,cAAc,KAAK,YAAY,CAAC;AAC9D,MAAI,CAAC,KAAM,QAAO,CAAC;AACnB,SAAO,KACJ,MAAM,OAAO,EACb,OAAO,CAACC,UAASA,MAAK,KAAK,EAAE,SAAS,CAAC,EACvC,IAAI,CAACA,UAAS,KAAK,MAAMA,KAAI,CAAY;AAC9C;AAEO,SAAS,cAAc,KAAa,cAAsB,SAAuB;AACtF,YAAU,cAAc,KAAK,YAAY,GAAG,OAAO;AACrD;AAEO,SAAS,aAAa,KAAa,cAAqC;AAC7E,SAAO,iBAAiB,cAAc,KAAK,YAAY,CAAC;AAC1D;AAEO,SAAS,6BAA6B,KAAa,eAA+B;AACvF,QAAM,WAAW,cAAc,KAAK,aAAa;AACjD,MAAIC,UAAS,QAAQ,EAAE,WAAW,GAAG,GAAG;AACtC,UAAM,IAAI,MAAM,iDAAiD,aAAa,EAAE;AAAA,EAClF;AACA,SAAO,cAAc,QAAQ,OAAO,GAAG;AACzC;AAEO,SAAS,mBAAmB,OAAmC;AACpE,SAAO,gBAAgB,SAAS,EAAE,EAC/B,QAAQ,OAAO,MAAM,EACrB,QAAQ,MAAM,MAAM,EACpB,QAAQ,MAAM,MAAM,EACpB,QAAQ,eAAe,MAAM,EAC7B,QAAQ,UAAU,MAAM;AAC7B;AAEO,SAAS,wBAAwB,OAAmC;AACzE,SAAO,mBAAmB,KAAK,EAAE,QAAQ,OAAO,KAAK;AACvD;AAEO,SAAS,aAAa,OAAyB;AACpD,MAAI,MAAM,WAAW,EAAG,QAAO;AAC/B,SAAO,MAAM,IAAI,CAAC,SAAS,KAAK,mBAAmB,IAAI,CAAC,EAAE,EAAE,KAAK,IAAI,IAAI;AAC3E;AAEO,SAAS,OAAO,QAA4B;AACjD,SAAO,CAAC,GAAG,IAAI,IAAI,OAAO,OAAO,OAAO,CAAC,CAAC,EAAE,KAAK;AACnD;;;ACzHA,SAAS,cAAAC,cAAY,gBAAAC,eAAc,gBAAgB;AACnD,SAAS,QAAAC,cAAY;;;ACDrB,SAAS,SAAS;AAElB,IAAM,aAAa,EAAE,MAAM,EAAE,OAAO,CAAC;AAE9B,IAAM,sBAAsB,EAChC,OAAO;AAAA,EACN,eAAe,EAAE,QAAQ,CAAC;AAAA,EAC1B,IAAI,EAAE,OAAO,EAAE,IAAI,CAAC;AAAA,EACpB,OAAO,EAAE,OAAO,EAAE,IAAI,CAAC;AAAA,EACvB,UAAU,EAAE,QAAQ;AAAA,EACpB,iBAAiB,EAAE,OAAO,EAAE,IAAI,CAAC;AAAA,EACjC,WAAW,EAAE,OAAO,EAAE,SAAS;AAAA,EAC/B,QAAQ,EACL;AAAA,IACC,EACG,OAAO;AAAA,MACN,IAAI,EAAE,OAAO,EAAE,IAAI,CAAC;AAAA,MACpB,MAAM,EAAE,OAAO,EAAE,SAAS;AAAA,MAC1B,MAAM,EAAE,OAAO,EAAE,SAAS;AAAA,MAC1B,YAAY,WAAW,SAAS;AAAA,MAChC,QAAQ,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,IAAI,CAAC;AAAA,MACjC,YAAY,WAAW,SAAS;AAAA,IAClC,CAAC,EACA,OAAO;AAAA,EACZ,EACC,IAAI,CAAC;AAAA,EACR,WAAW,EACR;AAAA,IACC,EACG,OAAO;AAAA,MACN,IAAI,EAAE,OAAO,EAAE,IAAI,CAAC;AAAA,MACpB,UAAU,WAAW,SAAS;AAAA,MAC9B,UAAU,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,IAAI,CAAC;AAAA,MACnC,SAAS;AAAA,MACT,iBAAiB;AAAA,IACnB,CAAC,EACA,OAAO;AAAA,EACZ,EACC,IAAI,CAAC;AAAA,EACR,cAAc,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,IAAI,CAAC;AACzC,CAAC,EACA,OAAO;AAEH,IAAM,yBAAyB,EACnC,OAAO;AAAA,EACN,eAAe,EAAE,QAAQ,CAAC;AAAA,EAC1B,WAAW,EAAE,OAAO,EAAE,IAAI,CAAC;AAAA,EAC3B,WAAW,EAAE,OAAO,EAAE,SAAS;AAAA,EAC/B,YAAY,EAAE,OAAO,EAAE,IAAI,CAAC;AAAA,EAC5B,QAAQ,EAAE,KAAK,CAAC,WAAW,eAAe,WAAW,UAAU,CAAC;AAAA,EAChE,SAAS,EAAE,OAAO,EAAE,IAAI,CAAC;AAAA,EACzB,gBAAgB,WAAW,SAAS;AAAA,EACpC,UAAU,EACP;AAAA,IACC,EACG,OAAO;AAAA,MACN,SAAS,EAAE,OAAO,EAAE,IAAI,CAAC;AAAA,MACzB,UAAU,EAAE,OAAO,EAAE,IAAI,CAAC;AAAA,MAC1B,MAAM,EAAE,OAAO,EAAE,IAAI,CAAC;AAAA,MACtB,aAAa,EAAE,OAAO,EAAE,IAAI,CAAC;AAAA,MAC7B,UAAU,WAAW,SAAS;AAAA,IAChC,CAAC,EACA,OAAO;AAAA,EACZ,EACC,IAAI,CAAC;AAAA,EACR,iBAAiB,EAAE;AAAA,IACjB,EACG,OAAO;AAAA,MACN,MAAM,EAAE,OAAO,EAAE,IAAI,CAAC;AAAA,MACtB,QAAQ,EAAE,KAAK,CAAC,WAAW,WAAW,YAAY,gBAAgB,CAAC;AAAA,MACnE,UAAU,EAAE,OAAO,EAAE,SAAS;AAAA,IAChC,CAAC,EACA,OAAO;AAAA,EACZ;AAAA,EACA,cAAc,EAAE;AAAA,IACd,EACG,OAAO;AAAA,MACN,SAAS,EAAE,OAAO,EAAE,IAAI,CAAC;AAAA,MACzB,QAAQ,EAAE,KAAK,CAAC,QAAQ,QAAQ,SAAS,CAAC;AAAA,MAC1C,OAAO,EAAE,OAAO,EAAE,SAAS;AAAA,IAC7B,CAAC,EACA,OAAO;AAAA,EACZ;AACF,CAAC,EACA,OAAO;AAEH,IAAM,sBAAsB,EAChC,OAAO;AAAA,EACN,SAAS,EACN,OAAO;AAAA,IACN,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC;AAAA,IAC5B,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC;AAAA,IAC5B,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC;AAAA,EAC9B,CAAC,EACA,OAAO;AAAA,EACV,WAAW,EACR,OAAO;AAAA,IACN,OAAO,EAAE,KAAK,CAAC,eAAe,kBAAkB,qBAAqB,yBAAyB,CAAC;AAAA,IAC/F,SAAS,EAAE,OAAO,EAAE,IAAI,CAAC;AAAA,IACzB,aAAa,EAAE,MAAM,EAAE,OAAO,CAAC;AAAA,EACjC,CAAC,EACA,OAAO;AAAA,EACV,UAAU,EAAE;AAAA,IACV,EACG,OAAO;AAAA,MACN,OAAO,EAAE,KAAK,CAAC,QAAQ,QAAQ,MAAM,CAAC;AAAA,MACtC,MAAM,EAAE,OAAO,EAAE,IAAI,CAAC;AAAA,MACtB,SAAS,EAAE,OAAO,EAAE,IAAI,CAAC;AAAA,MACzB,aAAa,EAAE,OAAO,EAAE,IAAI,CAAC,EAAE,SAAS;AAAA,IAC1C,CAAC,EACA,OAAO;AAAA,EACZ;AACF,CAAC,EACA,OAAO;AAEH,IAAM,uBAAuB,EACjC,OAAO;AAAA,EACN,eAAe,EAAE,QAAQ,CAAC;AAAA,EAC1B,IAAI,EAAE,OAAO,EAAE,IAAI,CAAC;AAAA,EACpB,OAAO,EAAE,OAAO,EAAE,IAAI,CAAC;AAAA,EACvB,YAAY,EAAE,OAAO,EAAE,IAAI,CAAC;AAAA,EAC5B,eAAe,EAAE,OAAO,EAAE,IAAI,CAAC;AAAA,EAC/B,WAAW,EAAE,OAAO,EAAE,IAAI,CAAC;AAAA,EAC3B,UAAU,EACP;AAAA,IACC,EACG,OAAO;AAAA,MACN,IAAI,EAAE,OAAO,EAAE,IAAI,CAAC;AAAA,MACpB,OAAO,EAAE,OAAO,EAAE,IAAI,CAAC;AAAA,MACvB,QAAQ,EAAE,OAAO,EAAE,IAAI,CAAC;AAAA,MACxB,iBAAiB,EAAE,KAAK,CAAC,OAAO,UAAU,QAAQ,QAAQ,CAAC;AAAA,MAC3D,eAAe,EAAE,KAAK,CAAC,SAAS,UAAU,SAAS,cAAc,QAAQ,CAAC;AAAA,MAC1E,SAAS,EAAE,KAAK,CAAC,OAAO,UAAU,QAAQ,QAAQ,CAAC;AAAA,MACnD,MAAM,EAAE,KAAK,CAAC,OAAO,UAAU,QAAQ,QAAQ,CAAC;AAAA,MAChD,cAAc,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,IAAI,CAAC;AAAA,IACzC,CAAC,EACA,OAAO;AAAA,EACZ,EACC,IAAI,CAAC;AAAA,EACR,aAAa,EACV;AAAA,IACC,EACG,OAAO;AAAA,MACN,SAAS,EAAE,OAAO,EAAE,IAAI,CAAC;AAAA,MACzB,WAAW,EAAE,OAAO,EAAE,IAAI,CAAC;AAAA,MAC3B,eAAe,EAAE,KAAK,CAAC,OAAO,UAAU,MAAM,CAAC;AAAA,MAC/C,qBAAqB,EAAE,OAAO,EAAE,SAAS;AAAA,MACzC,OAAO,EAAE,OAAO,EAAE,SAAS;AAAA,IAC7B,CAAC,EACA,OAAO;AAAA,EACZ,EACC,IAAI,CAAC;AAAA,EACR,cAAc,EACX;AAAA,IACC,EACG,OAAO;AAAA,MACN,MAAM,EAAE,OAAO,EAAE,IAAI,CAAC;AAAA,MACtB,oBAAoB,EAAE,OAAO,EAAE,IAAI,CAAC;AAAA,MACpC,gBAAgB,EAAE,OAAO,EAAE,IAAI,CAAC;AAAA,MAChC,aAAa,EAAE,KAAK,CAAC,YAAY,WAAW,YAAY,QAAQ,CAAC;AAAA,MACjE,SAAS,EAAE,OAAO,EAAE,IAAI,CAAC;AAAA,IAC3B,CAAC,EACA,OAAO;AAAA,EACZ,EACC,IAAI,CAAC;AAAA,EACR,cAAc,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,IAAI,CAAC;AACzC,CAAC,EACA,OAAO;AAEV,IAAM,sBAAsB,EACzB,OAAO;AAAA,EACN,QAAQ,EAAE,OAAO,EAAE,IAAI,CAAC;AAAA,EACxB,MAAM,EAAE,OAAO,EAAE,IAAI,CAAC;AACxB,CAAC,EACA,OAAO;AAEH,IAAM,yBAAyB,EACnC,OAAO;AAAA,EACN,eAAe,EAAE,QAAQ,CAAC;AAAA,EAC1B,aAAa,EAAE,OAAO;AAAA,EACtB,gBAAgB,EAAE,OAAO;AAAA,EACzB,iBAAiB,EAAE,OAAO;AAAA,EAC1B,iBAAiB,EAAE,OAAO;AAAA,EAC1B,kBAAkB,EAAE,MAAM,EAAE,OAAO,CAAC;AAAA,EACpC,0BAA0B,EAAE,MAAM,EAAE,OAAO,CAAC;AAAA,EAC5C,cAAc,EACX,OAAO;AAAA,IACN,gBAAgB,EAAE,OAAO,EAAE,SAAS;AAAA,IACpC,SAAS,EAAE,MAAM,EAAE,OAAO,CAAC;AAAA,IAC3B,YAAY,EAAE,MAAM,EAAE,OAAO,CAAC;AAAA,IAC9B,aAAa,EAAE,MAAM,EAAE,OAAO,CAAC;AAAA,IAC/B,aAAa,EAAE,QAAQ;AAAA,IACvB,iBAAiB,EAAE,MAAM,EAAE,OAAO,CAAC;AAAA,IACnC,WAAW,EAAE,MAAM,EAAE,OAAO,CAAC;AAAA,IAC7B,gBAAgB,EAAE,MAAM,EAAE,OAAO,CAAC;AAAA,IAClC,YAAY,EAAE,MAAM,EAAE,OAAO,CAAC;AAAA,EAChC,CAAC,EACA,OAAO;AAAA,EACV,iBAAiB,EAAE,MAAM,EAAE,OAAO,CAAC;AAAA,EACnC,WAAW,EAAE,OAAO;AAAA,EACpB,aAAa,EAAE,OAAO;AAAA,EACtB,cAAc,EAAE,MAAM,EAAE,OAAO,CAAC;AAAA,EAChC,aAAa,EACV,OAAO;AAAA,IACN,WAAW,EAAE,OAAO;AAAA,IACpB,OAAO,EAAE,OAAO;AAAA,EAClB,CAAC,EACA,OAAO;AAAA,EACV,WAAW,EACR,OAAO;AAAA,IACN,kBAAkB,EAAE,OAAO;AAAA,IAC3B,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC;AAAA,IACzB,YAAY,EAAE,MAAM,EAAE,OAAO,CAAC;AAAA,EAChC,CAAC,EACA,OAAO;AAAA,EACV,eAAe,EAAE,KAAK,CAAC,kBAAkB,qBAAqB,yBAAyB,CAAC;AAAA,EACxF,kBAAkB,EAAE,MAAM,EAAE,OAAO,CAAC;AAAA,EACpC,eAAe,EAAE,MAAM,EAAE,OAAO,CAAC;AAAA,EACjC,UAAU,EAAE,MAAM,mBAAmB;AAAA,EACrC,gBAAgB,EAAE,OAAO,EAAE,SAAS;AAAA,EACpC,QAAQ,EAAE,MAAM,EAAE,OAAO,CAAC;AAC5B,CAAC,EACA,OAAO;AAEH,IAAM,yBAAyB,EACnC,OAAO;AAAA,EACN,IAAI,EAAE,OAAO,EAAE,IAAI,CAAC;AAAA,EACpB,OAAO,EAAE,KAAK,CAAC,WAAW,WAAW,SAAS,mBAAmB,CAAC;AAAA,EAClE,QAAQ,EAAE,KAAK,CAAC,UAAU,WAAW,UAAU,CAAC;AAAA,EAChD,MAAM,EAAE,OAAO,EAAE,IAAI,CAAC;AAAA,EACtB,iBAAiB,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,SAAS;AAAA,EAC9C,SAAS,EAAE,OAAO,EAAE,IAAI,CAAC,EAAE,SAAS;AAAA,EACpC,iBAAiB,EAAE,OAAO,EAAE,IAAI,CAAC,EAAE,SAAS;AAAA,EAC5C,WAAW,EAAE,OAAO,EAAE,SAAS;AAAA,EAC/B,YAAY,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS;AAAA,EACtD,WAAW,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS;AAAA,EAC1C,QAAQ,EAAE,OAAO,EAAE,SAAS;AAC9B,CAAC,EACA,OAAO,EACP,YAAY,CAAC,MAAMC,aAAY;AAC9B,MAAI,KAAK,UAAU,WAAW,CAAC,KAAK,YAAY,CAAC,KAAK,mBAAmB,KAAK,gBAAgB,WAAW,IAAI;AAC3G,IAAAA,SAAQ,SAAS;AAAA,MACf,MAAM,EAAE,aAAa;AAAA,MACrB,SAAS;AAAA,MACT,MAAM,CAAC,SAAS;AAAA,IAClB,CAAC;AAAA,EACH;AACF,CAAC;AAEI,IAAM,0BAA0B,EACpC,OAAO;AAAA,EACN,eAAe,EAAE,QAAQ,CAAC;AAAA,EAC1B,OAAO,EAAE,MAAM,sBAAsB;AACvC,CAAC,EACA,OAAO;AAEH,IAAM,wBAAwB,EAClC,OAAO;AAAA,EACN,eAAe,EAAE,QAAQ,CAAC;AAAA,EAC1B,WAAW,EAAE,OAAO,EAAE,IAAI,CAAC;AAAA,EAC3B,OAAO,EAAE,OAAO,EAAE,IAAI,CAAC;AAAA,EACvB,WAAW,EAAE,OAAO,EAAE,SAAS;AAAA,EAC/B,WAAW,EAAE,OAAO,EAAE,SAAS;AAAA,EAC/B,QAAQ,EAAE,KAAK,CAAC,WAAW,eAAe,WAAW,UAAU,CAAC;AAAA,EAChE,YAAY,EAAE,OAAO,EAAE,IAAI,CAAC;AAAA,EAC5B,SAAS,EAAE,OAAO,EAAE,IAAI,CAAC;AAAA,EACzB,gBAAgB,EAAE,MAAM,EAAE,OAAO,CAAC;AAAA,EAClC,eAAe,EAAE,OAAO,EAAE,SAAS;AAAA,EACnC,aAAa,EAAE,OAAO,EAAE,SAAS;AAAA,EACjC,eAAe,EAAE,KAAK,CAAC,kBAAkB,qBAAqB,yBAAyB,CAAC;AAAA,EACxF,iBAAiB,EAAE;AAAA,IACjB,EACG,OAAO;AAAA,MACN,MAAM,EAAE,OAAO,EAAE,IAAI,CAAC;AAAA,MACtB,QAAQ,EAAE,KAAK,CAAC,WAAW,WAAW,YAAY,gBAAgB,CAAC;AAAA,MACnE,UAAU,EAAE,OAAO,EAAE,SAAS;AAAA,IAChC,CAAC,EACA,OAAO;AAAA,EACZ;AAAA,EACA,YAAY,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS;AAC7C,CAAC,EACA,OAAO;AAEH,IAAM,uBAAuB,EACjC,OAAO;AAAA,EACN,MAAM,EAAE,KAAK;AAAA,IACX;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF,CAAC;AAAA,EACD,WAAW,EAAE,OAAO,EAAE,SAAS;AAAA,EAC/B,SAAS,EAAE,OAAO,EAAE,IAAI,CAAC,EAAE,SAAS;AAAA,EACpC,aAAa,EAAE,OAAO,EAAE,IAAI,CAAC,EAAE,SAAS;AAAA,EACxC,WAAW,EAAE,OAAO,EAAE,IAAI,CAAC,EAAE,SAAS;AAAA,EACtC,MAAM,EAAE,OAAO,EAAE,SAAS;AAAA,EAC1B,UAAU,EAAE,OAAO,EAAE,SAAS;AAAA,EAC9B,MAAM,EAAE,OAAO,EAAE,SAAS;AAAA,EAC1B,UAAU,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,SAAS;AAAA,EACvC,OAAO,EAAE,KAAK,CAAC,WAAW,WAAW,SAAS,mBAAmB,CAAC,EAAE,SAAS;AAAA,EAC7E,cAAc,EAAE,OAAO,EAAE,IAAI,CAAC,EAAE,SAAS;AAAA,EACzC,cAAc,EAAE,OAAO,EAAE,IAAI,CAAC,EAAE,SAAS;AAAA,EACzC,SAAS,EAAE,OAAO,EAAE,IAAI,CAAC,EAAE,SAAS;AAAA,EACpC,QAAQ,EAAE,KAAK,CAAC,QAAQ,QAAQ,SAAS,CAAC,EAAE,SAAS;AAAA,EACrD,YAAY,EAAE,OAAO,EAAE,IAAI,CAAC,EAAE,SAAS;AAAA,EACvC,cAAc,EAAE,KAAK,CAAC,WAAW,WAAW,YAAY,gBAAgB,CAAC,EAAE,SAAS;AAAA,EACpF,QAAQ,EAAE,KAAK,CAAC,WAAW,eAAe,WAAW,UAAU,CAAC,EAAE,SAAS;AAAA,EAC3E,OAAO,EAAE,OAAO,EAAE,SAAS;AAC7B,CAAC,EACA,OAAO,EACP,YAAY,CAAC,OAAOA,aAAY;AAC/B,MAAI,MAAM,SAAS,WAAW;AAC5B,eAAW,SAAS,CAAC,eAAe,aAAa,YAAY,MAAM,GAAY;AAC7E,UAAI,CAAC,MAAM,KAAK,GAAG;AACjB,QAAAA,SAAQ,SAAS,EAAE,MAAM,EAAE,aAAa,QAAQ,SAAS,GAAG,KAAK,mCAAmC,MAAM,CAAC,KAAK,EAAE,CAAC;AAAA,MACrH;AAAA,IACF;AAAA,EACF;AACA,MAAI,MAAM,SAAS,uBAAuB,CAAC,MAAM,QAAQ,CAAC,MAAM,QAAQ;AACtE,IAAAA,SAAQ,SAAS,EAAE,MAAM,EAAE,aAAa,QAAQ,SAAS,4CAA4C,MAAM,CAAC,MAAM,EAAE,CAAC;AAAA,EACvH;AACA,MAAI,MAAM,SAAS,4BAA4B,CAAC,MAAM,WAAW,CAAC,MAAM,SAAS;AAC/E,IAAAA,SAAQ,SAAS,EAAE,MAAM,EAAE,aAAa,QAAQ,SAAS,kDAAkD,MAAM,CAAC,SAAS,EAAE,CAAC;AAAA,EAChI;AACA,MAAI,MAAM,SAAS,uBAAuB,CAAC,MAAM,cAAc;AAC7D,IAAAA,SAAQ,SAAS,EAAE,MAAM,EAAE,aAAa,QAAQ,SAAS,wCAAwC,MAAM,CAAC,cAAc,EAAE,CAAC;AAAA,EAC3H;AACA,MAAI,MAAM,SAAS,8BAA8B,CAAC,MAAM,cAAc,CAAC,MAAM,eAAe;AAC1F,IAAAA,SAAQ,SAAS,EAAE,MAAM,EAAE,aAAa,QAAQ,SAAS,8DAA8D,MAAM,CAAC,YAAY,EAAE,CAAC;AAAA,EAC/I;AACF,CAAC;AAYH,IAAM,mBAAmB,EAAE,MAAM,CAAC,EAAE,QAAQ,CAAC,GAAG,EAAE,QAAQ,CAAC,GAAG,EAAE,QAAQ,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC,CAAC;AACzF,IAAM,qBAAqB,EAAE,MAAM,CAAC,EAAE,QAAQ,CAAC,GAAG,EAAE,QAAQ,CAAC,GAAG,EAAE,QAAQ,CAAC,GAAG,EAAE,QAAQ,CAAC,GAAG,EAAE,QAAQ,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC,CAAC;AAEhH,IAAM,0BAA0B,EACpC,OAAO;AAAA,EACN,eAAe,EAAE,QAAQ,CAAC;AAAA,EAC1B,OAAO,EAAE,KAAK,CAAC,SAAS,YAAY,YAAY,WAAW,CAAC;AAAA,EAC5D,WAAW,EAAE,OAAO,EAAE,SAAS;AAAA,EAC/B,eAAe,EAAE,OAAO,EAAE,SAAS;AAAA,EACnC,aAAa,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS;AAAA,EAC5C,mBAAmB,EAAE,MAAM,EAAE,OAAO,CAAC;AAAA,EACrC,iBAAiB,EAAE,MAAM,EAAE,OAAO,CAAC;AAAA,EACnC,gBAAgB,EAAE,OAAO;AAAA,EACzB,aAAa,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC;AAAA,EACnC,eAAe,EAAE,OAAO;AAAA,EACxB,YAAY,EAAE,KAAK,CAAC,UAAU,WAAW,UAAU,SAAS,OAAO,CAAC,EAAE,SAAS;AAAA,EAC/E,eAAe,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS;AAAA,EAC9C,cAAc,EAAE,KAAK,CAAC,YAAY,UAAU,QAAQ,CAAC,EAAE,SAAS;AAAA,EAChE,oBAAoB,mBAAmB,SAAS;AAAA,EAChD,kBAAkB,iBAAiB,SAAS;AAAA,EAC5C,uBAAuB,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS;AACxD,CAAC,EACA,OAAO;AAIH,IAAM,6BAA6B,EACvC,OAAO;AAAA,EACN,IAAI,EAAE,OAAO,EAAE,IAAI,CAAC;AAAA,EACpB,OAAO;AAAA,EACP,OAAO,EAAE,OAAO,EAAE,IAAI,CAAC;AAAA,EACvB,MAAM,EAAE,QAAQ;AAAA,EAChB,UAAU,EAAE,OAAO,EAAE,IAAI,CAAC;AAAA,EAC1B,aAAa,EAAE,OAAO,EAAE,IAAI,CAAC;AAC/B,CAAC,EACA,OAAO;AAEH,IAAM,uBAAuB,EACjC,OAAO;AAAA,EACN,cAAc;AAAA,EACd,aAAa;AAAA,EACb,mBAAmB,EAAE,QAAQ;AAAA,EAC7B,YAAY,EAAE,OAAO,EAAE,SAAS;AAAA,EAChC,gBAAgB,EAAE,OAAO,EAAE,SAAS;AAAA,EACpC,SAAS,EAAE,MAAM,0BAA0B;AAAA,EAC3C,YAAY,EAAE,MAAM,0BAA0B;AAChD,CAAC,EACA,OAAO;AAIH,SAAS,qBAAqB,OAA6B;AAChE,SAAO,MAAM,OAAO,IAAI,CAAC,UAAU;AACjC,UAAM,OAAO,MAAM,KAAK,SAAS,IAAI,MAAM,KAAK,KAAK,GAAG,IAAI;AAC5D,WAAO,GAAG,IAAI,KAAK,MAAM,OAAO;AAAA,EAClC,CAAC;AACH;;;ACxZA,SAAS,cAAAC,mBAAkB;AAC3B,SAAS,QAAAC,aAAY;;;ACDrB,SAAS,cAAAC,aAAY,gBAAAC,qBAAoB;AACzC,SAAS,QAAAC,aAAY;AAsBrB,SAAS,gBACP,KAC8H;AAC9H,QAAM,OAAOC,MAAK,KAAK,cAAc;AACrC,MAAI,CAACC,YAAW,IAAI,EAAG,QAAO;AAC9B,SAAO,KAAK,MAAMC,cAAa,MAAM,MAAM,CAAC;AAK9C;AAEA,SAAS,qBAAqB,KAAiC;AAC7D,MAAID,YAAWD,MAAK,KAAK,gBAAgB,CAAC,EAAG,QAAO;AACpD,MAAIC,YAAWD,MAAK,KAAK,WAAW,CAAC,EAAG,QAAO;AAC/C,MAAIC,YAAWD,MAAK,KAAK,mBAAmB,CAAC,EAAG,QAAO;AACvD,MAAIC,YAAWD,MAAK,KAAK,WAAW,CAAC,KAAKC,YAAWD,MAAK,KAAK,UAAU,CAAC,EAAG,QAAO;AACpF,SAAO;AACT;AAEA,SAAS,uBAAuB,aAAiD,OAA2B;AAC1G,QAAM,OAAO;AAAA,IACX,GAAI,aAAa,gBAAgB,CAAC;AAAA,IAClC,GAAI,aAAa,mBAAmB,CAAC;AAAA,EACvC;AACA,SAAO,MAAM,OAAO,CAAC,SAAS,KAAK,IAAI,MAAM,MAAS;AACxD;AAEA,SAAS,mBAAmB,KAAuB;AACjD,QAAM,UAAU,iBAAiBA,MAAK,KAAK,cAAc,CAAC,KAAK;AAC/D,SAAO;AAAA,IACL,QACG,MAAM,OAAO,EACb,IAAI,CAACG,UAASA,MAAK,KAAK,CAAC,EACzB,OAAO,CAACA,UAASA,SAAQ,CAACA,MAAK,WAAW,GAAG,KAAKA,MAAK,SAAS,GAAG,CAAC,EACpE,IAAI,CAACA,UAASA,MAAK,MAAM,GAAG,EAAE,CAAC,GAAG,KAAK,KAAK,EAAE,EAC9C,OAAO,OAAO;AAAA,EACnB;AACF;AAEA,SAAS,mBAAmBC,UAAgD;AAC1E,QAAM,UAAoB,CAAC;AAC3B,QAAM,YAAY;AAAA,IAChB,CAAC,kBAAkB,sDAAsD;AAAA,IACzE,CAAC,mBAAmB,mCAAmC;AAAA,IACvD,CAAC,aAAa,mDAAmD;AAAA,IACjE,CAAC,eAAe,2EAA2E;AAAA,EAC7F;AACA,UAAQ,KAAK,GAAG,UAAU,QAAQ,CAAC,CAAC,OAAO,QAAQ,MAAOA,SAAQ,KAAK,EAAE,KAAK,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAE,CAAC;AACnG,MAAIA,SAAQ,iBAAiB,WAAW,EAAG,SAAQ,KAAK,wCAAwC;AAChG,MAAI,CAACA,SAAQ,YAAY,UAAU,KAAK,EAAG,SAAQ,KAAK,yDAAyD;AACjH,MAAI,CAACA,SAAQ,UAAU,iBAAiB,KAAK,EAAG,SAAQ,KAAK,0DAA0D;AACvH,SAAO,OAAO,OAAO;AACvB;AAEO,SAAS,mBAAmB,KAA0C;AAC3E,QAAM,cAAc,gBAAgB,GAAG;AACvC,QAAM,QAAQ,mBAAmB,GAAG;AACpC,QAAM,eAAe,uBAAuB,aAAa;AAAA,IACvD;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF,CAAC;AACD,QAAM,aAAa,aAAa,OAAO,CAAC,SAAS,CAAC,QAAQ,SAAS,yBAAyB,eAAe,EAAE,SAAS,IAAI,CAAC;AAC3H,QAAM,cAAc,aAAa,OAAO,CAAC,SAAS,CAAC,eAAe,WAAW,EAAE,SAAS,IAAI,CAAC;AAC7F,QAAM,YAAY,aAAa,OAAO,CAAC,SAAS,CAAC,UAAU,cAAc,oBAAoB,QAAQ,WAAW,EAAE,SAAS,IAAI,CAAC;AAChI,QAAM,kBAAkB,MAAM,OAAO,CAAC,SAAS,qCAAqC,KAAK,IAAI,KAAK,KAAK,SAAS,UAAU,CAAC;AAC3H,QAAM,aAAa,MAAM,OAAO,CAAC,SAAS,oGAAoG,KAAK,IAAI,CAAC;AACxJ,QAAM,WAAW,aAA0C,KAAK,YAAY;AAC5E,QAAM,MAAM,OAAO;AAEnB,QAAMA,WAAuC;AAAA,IAC3C,eAAe;AAAA,IACf,aAAa,UAAU,eAAe,gBAAgB,GAAG,KAAK;AAAA,IAC9D,gBAAgB,UAAU,kBAAkB;AAAA,IAC5C,iBAAiB,UAAU,mBAAmB;AAAA,IAC9C,iBAAiB,UAAU,mBAAmB;AAAA,IAC9C,kBAAkB,UAAU,oBAAoB,CAAC;AAAA,IACjD,0BAA0B,UAAU,4BAA4B,CAAC;AAAA,IACjE,cAAc;AAAA,MACZ,gBAAgB,qBAAqB,GAAG,KAAK,UAAU,aAAa;AAAA,MACpE,SAAS,OAAO,OAAO,KAAK,aAAa,WAAW,CAAC,CAAC,CAAC;AAAA,MACvD,YAAY,OAAO,CAAC,GAAI,UAAU,aAAa,cAAc,CAAC,GAAI,GAAG,UAAU,CAAC;AAAA,MAChF,aAAa,OAAO,CAAC,GAAI,UAAU,aAAa,eAAe,CAAC,GAAI,GAAG,WAAW,CAAC;AAAA,MACnF,aAAa,QAAQ,UAAU,aAAa,eAAe,gBAAgB,SAAS,KAAK,WAAW,KAAK,CAAC,SAAS,KAAK,SAAS,UAAU,CAAC,CAAC;AAAA,MAC7I,iBAAiB,OAAO,CAAC,GAAI,UAAU,aAAa,mBAAmB,CAAC,GAAI,GAAG,gBAAgB,MAAM,GAAG,EAAE,CAAC,CAAC;AAAA,MAC5G,WAAW,OAAO,CAAC,GAAI,UAAU,aAAa,aAAa,CAAC,GAAI,GAAG,SAAS,CAAC;AAAA,MAC7E,gBAAgB,mBAAmB,GAAG;AAAA,MACtC,YAAY,OAAO,CAAC,GAAI,UAAU,aAAa,cAAc,CAAC,GAAI,GAAG,WAAW,MAAM,GAAG,EAAE,CAAC,CAAC;AAAA,IAC/F;AAAA,IACA,iBAAiB,UAAU,mBAAmB,CAAC;AAAA,IAC/C,WAAW,UAAU,aAAa;AAAA,IAClC,aAAa,UAAU,eAAe;AAAA,IACtC,cAAc,UAAU,gBAAgB,CAAC;AAAA,IACzC,aAAa,UAAU,eAAe,EAAE,WAAW,IAAI,OAAO,GAAG;AAAA,IACjE,WAAW,UAAU,aAAa,EAAE,kBAAkB,IAAI,OAAO,CAAC,GAAG,YAAY,CAAC,EAAE;AAAA,IACpF,eAAe,UAAU,iBAAiB;AAAA,IAC1C,kBAAkB,UAAU,oBAAoB,CAAC;AAAA,IACjD,eAAe,UAAU,iBAAiB,CAAC;AAAA,IAC3C,UAAU,eAAe;AAAA,MACvB,GAAI,UAAU,YAAY,CAAC;AAAA,MAC3B,EAAE,QAAQ,0BAA0B,MAAM,WAAW,MAAM,MAAM,2EAA2E;AAAA,IAC9I,CAAC;AAAA,IACD,gBAAgB;AAAA,IAChB,QAAQ,UAAU,UAAU,CAAC;AAAA,EAC/B;AACA,EAAAA,SAAQ,gBAAgB,mBAAmBA,QAAO;AAClD,SAAO,uBAAuB,MAAMA,QAAO;AAC7C;AAEA,SAAS,gBAAgB,KAA4B;AACnD,QAAM,cAAc,gBAAgB,GAAG;AACvC,SAAO,OAAQ,aAA2C,SAAS,WAAY,YAAiC,OAAO;AACzH;AAEA,SAAS,eAAe,OAAyF;AAC/G,QAAM,OAAO,oBAAI,IAAY;AAC7B,SAAO,MAAM,OAAO,CAAC,SAAS;AAC5B,UAAM,MAAM,GAAG,KAAK,MAAM,IAAI,KAAK,IAAI;AACvC,QAAI,KAAK,IAAI,GAAG,EAAG,QAAO;AAC1B,SAAK,IAAI,GAAG;AACZ,WAAO;AAAA,EACT,CAAC;AACH;AAEO,SAAS,oBAAoB,KAAaA,UAA4D;AAC3G,mBAAiB,GAAG;AACpB,QAAM,oBAAoB,EAAE,GAAGA,UAAS,eAAe,mBAAmBA,QAAO,EAAE;AACnF,QAAM,SAAS,uBAAuB,MAAM,iBAAiB;AAC7D,gBAAc,KAAK,cAAc,MAAM;AACvC,QAAM,WAAW,6BAA6B,MAAM;AACpD,gBAAc,KAAK,YAAY,QAAQ;AACvC,SAAO,EAAE,aAAa,cAAc,cAAc,YAAY,eAAe,OAAO,cAAc;AACpG;AAEO,SAAS,mBAAmB,KAAmC;AACpE,SAAO,oBAAoB,KAAK,mBAAmB,GAAG,CAAC;AACzD;AAEO,SAAS,uBAAuB,KAAmC;AACxE,QAAMA,WAAU,aAAsB,KAAK,YAAY;AACvD,QAAM,SAAS,uBAAuB,UAAUA,QAAO;AACvD,MAAI,CAAC,OAAO,SAAS;AACnB,UAAM,IAAI,MAAM,WAAW,YAAY,KAAK,qBAAqB,OAAO,KAAK,EAAE,KAAK,IAAI,CAAC,EAAE;AAAA,EAC7F;AACA,SAAO,EAAE,aAAa,cAAc,cAAc,YAAY,eAAe,OAAO,KAAK,cAAc;AACzG;AAEO,SAAS,qBAAqB,KAAmC;AACtE,QAAMA,WAAU,aAAsB,KAAK,YAAY;AACvD,QAAM,SAAS,uBAAuB,UAAUA,QAAO;AACvD,MAAI,CAAC,OAAO,SAAS;AACnB,UAAM,IAAI,MAAM,WAAW,YAAY,KAAK,qBAAqB,OAAO,KAAK,EAAE,KAAK,IAAI,CAAC,EAAE;AAAA,EAC7F;AACA,gBAAc,KAAK,YAAY,6BAA6B,OAAO,IAAI,CAAC;AACxE,SAAO,EAAE,aAAa,cAAc,cAAc,YAAY,eAAe,OAAO,KAAK,cAAc;AACzG;AAEO,SAAS,6BAA6BA,UAA8C;AACzF,SAAO;AAAA;AAAA,mBAEU,YAAY;AAAA;AAAA;AAAA;AAAA,aAIlB,gBAAgBA,SAAQ,eAAe,KAAK,CAAC;AAAA,cAC5C,gBAAgBA,SAAQ,mBAAmB,KAAK,CAAC;AAAA,cACjD,gBAAgBA,SAAQ,mBAAmB,KAAK,CAAC;AAAA,oBAC3CA,SAAQ,aAAa;AAAA,mBACtBA,SAAQ,cAAc;AAAA;AAAA,EAEvC,gBAAgBA,SAAQ,kBAAkB,8BAA8B,CAAC;AAAA;AAAA;AAAA;AAAA,EAIzE,aAAaA,SAAQ,gBAAgB,CAAC;AAAA;AAAA;AAAA;AAAA,qBAInBA,SAAQ,aAAa,kBAAkB,SAAS;AAAA,gBACrDA,SAAQ,aAAa,WAAW,KAAK,IAAI,KAAK,eAAe;AAAA,kBAC3DA,SAAQ,aAAa,YAAY,KAAK,IAAI,KAAK,eAAe;AAAA,gBAChEA,SAAQ,aAAa,UAAU,KAAK,IAAI,KAAK,eAAe;AAAA,uBACrDA,SAAQ,aAAa,cAAc,QAAQ,IAAI;AAAA,sBAChDA,SAAQ,aAAa,eAAe,KAAK,IAAI,KAAK,eAAe;AAAA,sBACjEA,SAAQ,aAAa,WAAW,KAAK,IAAI,KAAK,eAAe;AAAA;AAAA;AAAA;AAAA,gBAInE,gBAAgBA,SAAQ,aAAa,KAAK,CAAC;AAAA,kBACzC,gBAAgBA,SAAQ,eAAe,KAAK,CAAC;AAAA;AAAA;AAAA;AAAA,EAI7D,aAAaA,SAAQ,eAAe,CAAC;AAAA;AAAA;AAAA;AAAA,eAIxB,gBAAgBA,SAAQ,YAAY,aAAa,KAAK,CAAC;AAAA,WAC3D,gBAAgBA,SAAQ,YAAY,SAAS,KAAK,CAAC;AAAA;AAAA;AAAA;AAAA,uBAIvC,gBAAgBA,SAAQ,UAAU,oBAAoB,KAAK,CAAC;AAAA;AAAA;AAAA;AAAA,EAIjF,aAAaA,SAAQ,UAAU,KAAK,CAAC;AAAA;AAAA;AAAA;AAAA,EAIrC,aAAaA,SAAQ,UAAU,UAAU,CAAC;AAAA;AAAA;AAAA;AAAA,EAI1C,aAAaA,SAAQ,aAAa,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAMnCA,SAAQ,SAAS,IAAI,CAAC,SAAS,KAAK,gBAAgB,KAAK,MAAM,CAAC,MAAM,gBAAgB,KAAK,IAAI,EAAE,QAAQ,OAAO,KAAK,CAAC,IAAI,EAAE,KAAK,IAAI,CAAC;AAAA;AAExI;;;AC3OO,IAAM,iBAAiB;AAEvB,IAAM,iBAAkD;AAAA,EAC7D,MAAM;AAAA,EACN,MAAM;AAAA,EACN,SAAS;AAAA,EACT,QAAQ;AAAA,EACR,IAAI;AAAA,EACJ,WAAW;AAAA,EACX,QAAQ;AAAA,EACR,UAAU;AAAA,EACV,KAAK;AAAA,EACL,UAAU;AAAA,EACV,WAAW;AAAA,EACX,cAAc;AAAA,EACd,aAAa;AACf;AAEO,IAAM,iBAAoC,CAAC,OAAO,QAAQ,WAAW,UAAU,MAAM,aAAa,QAAQ;AAE1G,IAAM,oBAAuC,CAAC,GAAG,gBAAgB,UAAU;AAE3E,IAAM,oBAAuC,CAAC,GAAG,mBAAmB,aAAa,gBAAgB,aAAa;AAE9G,IAAM,eAAgC;AAAA,EAC3C;AAAA,IACE,IAAI;AAAA,IACJ,SAAS;AAAA,IACT,OAAO;AAAA,IACP,KAAK;AAAA,IACL,QAAQ,CAAC,YAAY;AAAA,IACrB,OAAO,CAAC,SAAS,YAAY,YAAY,WAAW;AAAA,EACtD;AAAA,EACA;AAAA,IACE,IAAI;AAAA,IACJ,SAAS;AAAA,IACT,OAAO;AAAA,IACP,KAAK;AAAA,IACL,QAAQ,CAAC,gBAAgB;AAAA,IACzB,OAAO,CAAC,SAAS,YAAY,YAAY,WAAW;AAAA,EACtD;AAAA,EACA;AAAA,IACE,IAAI;AAAA,IACJ,SAAS;AAAA,IACT,OAAO;AAAA,IACP,KAAK;AAAA,IACL,QAAQ,CAAC,mBAAmB,iBAAiB;AAAA,IAC7C,OAAO,CAAC,SAAS,YAAY,YAAY,WAAW;AAAA,EACtD;AAAA,EACA;AAAA,IACE,IAAI;AAAA,IACJ,SAAS;AAAA,IACT,OAAO;AAAA,IACP,KAAK;AAAA,IACL,QAAQ,CAAC,kBAAkB;AAAA,IAC3B,OAAO,CAAC,SAAS,YAAY,YAAY,WAAW;AAAA,EACtD;AAAA,EACA;AAAA,IACE,IAAI;AAAA,IACJ,SAAS;AAAA,IACT,OAAO;AAAA,IACP,KAAK;AAAA,IACL,QAAQ,CAAC,eAAe,OAAO;AAAA,IAC/B,OAAO,CAAC,SAAS,YAAY,YAAY,WAAW;AAAA,EACtD;AAAA,EACA;AAAA,IACE,IAAI;AAAA,IACJ,SAAS;AAAA,IACT,OAAO;AAAA,IACP,KAAK;AAAA,IACL,QAAQ,CAAC,WAAW;AAAA,IACpB,OAAO,CAAC,SAAS,YAAY,YAAY,WAAW;AAAA,EACtD;AAAA,EACA;AAAA,IACE,IAAI;AAAA,IACJ,SAAS;AAAA,IACT,OAAO;AAAA,IACP,KAAK;AAAA,IACL,QAAQ,CAAC,aAAa;AAAA,IACtB,OAAO,CAAC,SAAS,YAAY,YAAY,WAAW;AAAA,EACtD;AAAA,EACA;AAAA,IACE,IAAI;AAAA,IACJ,SAAS;AAAA,IACT,OAAO;AAAA,IACP,KAAK;AAAA,IACL,QAAQ,CAAC,SAAS;AAAA,IAClB,OAAO,CAAC,SAAS,YAAY,YAAY,WAAW;AAAA,IACpD,UAAU;AAAA,EACZ;AAAA,EACA;AAAA,IACE,IAAI;AAAA,IACJ,SAAS;AAAA,IACT,OAAO;AAAA,IACP,KAAK;AAAA,IACL,QAAQ,CAAC,kBAAkB;AAAA,IAC3B,OAAO,CAAC,SAAS,YAAY,YAAY,WAAW;AAAA,EACtD;AAAA,EACA;AAAA,IACE,IAAI;AAAA,IACJ,SAAS;AAAA,IACT,OAAO;AAAA,IACP,KAAK;AAAA,IACL,QAAQ,CAAC,SAAS,YAAY;AAAA,IAC9B,OAAO,CAAC,SAAS,YAAY,YAAY,WAAW;AAAA,IACpD,UAAU;AAAA,EACZ;AAAA,EACA;AAAA,IACE,IAAI;AAAA,IACJ,SAAS;AAAA,IACT,OAAO;AAAA,IACP,KAAK;AAAA,IACL,QAAQ,CAAC,eAAe;AAAA,IACxB,OAAO,CAAC,SAAS,YAAY,YAAY,WAAW;AAAA,EACtD;AAAA,EACA;AAAA,IACE,IAAI;AAAA,IACJ,SAAS;AAAA,IACT,OAAO;AAAA,IACP,KAAK;AAAA,IACL,QAAQ,CAAC,cAAc;AAAA,IACvB,OAAO,CAAC,YAAY,UAAU;AAAA,IAC9B,UAAU;AAAA,EACZ;AAAA,EACA;AAAA,IACE,IAAI;AAAA,IACJ,SAAS;AAAA,IACT,OAAO;AAAA,IACP,KAAK;AAAA,IACL,QAAQ,CAAC,kBAAkB,iBAAiB,sBAAsB;AAAA,IAClE,OAAO,CAAC,UAAU;AAAA,IAClB,UAAU;AAAA,EACZ;AAAA,EACA;AAAA,IACE,IAAI;AAAA,IACJ,SAAS;AAAA,IACT,OAAO;AAAA,IACP,KAAK;AAAA,IACL,QAAQ,CAAC,eAAe,WAAW,YAAY;AAAA,IAC/C,OAAO,CAAC,UAAU;AAAA,IAClB,UAAU;AAAA,EACZ;AAAA,EACA;AAAA,IACE,IAAI;AAAA,IACJ,SAAS;AAAA,IACT,OAAO;AAAA,IACP,KAAK;AAAA,IACL,QAAQ,CAAC;AAAA,IACT,OAAO,CAAC,UAAU;AAAA,IAClB,UAAU;AAAA,EACZ;AACF;AAEO,SAAS,iBAAiB,OAAuC;AACtE,MAAI,UAAU,WAAY,QAAO;AACjC,MAAI,UAAU,WAAY,QAAO;AACjC,SAAO;AACT;;;AF9JO,IAAM,wBAAwB;AAmBrC,SAAS,eAA6C;AACpD,QAAM,MAAM,OAAO;AACnB,SAAO;AAAA,IACL,eAAe;AAAA,IACf,OAAO;AAAA,IACP,WAAW;AAAA,IACX,eAAe;AAAA,IACf,mBAAmB,CAAC;AAAA,IACpB,iBAAiB,CAAC;AAAA,IAClB,gBAAgB;AAAA,IAChB,aAAa;AAAA,IACb,eAAe;AAAA,EACjB;AACF;AAEO,SAAS,oBAAoB,KAA2C;AAC7E,mBAAiB,GAAG;AACpB,QAAM,WAAW,aAAsB,KAAK,qBAAqB;AACjE,MAAI,CAAC,SAAU,QAAO,aAAa;AACnC,QAAM,SAAS,wBAAwB,UAAU,QAAQ;AACzD,MAAI,CAAC,OAAO,QAAS,QAAO,aAAa;AACzC,SAAO,OAAO;AAChB;AAEO,SAAS,oBAAoB,KAAa,OAA4E;AAC3H,QAAM,UAAU,oBAAoB,GAAG;AACvC,QAAM,OAAqC,wBAAwB,MAAM;AAAA,IACvE,GAAG;AAAA,IACH,GAAG;AAAA,IACH,eAAe,OAAO;AAAA,EACxB,CAAC;AACD,gBAAc,KAAK,uBAAuB,IAAI;AAC9C,SAAO;AACT;AAEA,SAAS,cAAc,OAAqC,SAAyC;AACnG,MAAI,MAAM,kBAAkB,SAAS,OAAO,EAAG,QAAO;AACtD,MAAI,MAAM,gBAAgB,SAAS,OAAO,EAAG,QAAO;AACpD,MAAI,MAAM,mBAAmB,QAAS,QAAO;AAC7C,QAAM,mBAAsC,CAAC,YAAY,aAAa,gBAAgB,eAAe,IAAI;AACzG,MAAI,iBAAiB,SAAS,OAAO,KAAK,MAAM,UAAU,QAAS,QAAO;AAC1E,MAAI,YAAY,YAAY,MAAM,kBAAkB,SAAS,WAAW,EAAG,QAAO;AAClF,SAAO;AACT;AAEA,SAAS,gBAAgB,OAAqC,eAAgC;AAC5F,QAAM,WAAW,eAAe,OAAO,CAAC,MAAM,MAAM,QAAQ;AAC5D,QAAM,OAAO,SAAS,MAAM,CAAC,YAAY,MAAM,kBAAkB,SAAS,OAAO,CAAC;AAClF,SAAO,QAAQ,kBAAkB;AACnC;AAEO,SAAS,iBAAiB,KAA4B;AAC3D,QAAM,QAAQ,oBAAoB,GAAG;AACrC,QAAMC,WAAU,mBAAmB,GAAG;AACtC,QAAM,uBAAuBA,SAAQ,cAAc;AACnD,QAAM,iBAAiB,MAAM,UAAU,cAAc,iBAAiB,iBAAiB,MAAM,KAAK;AAClG,QAAM,WAAmC,eAAe,IAAI,CAAC,QAAQ;AAAA,IACnE;AAAA,IACA,OAAO,eAAe,EAAE;AAAA,IACxB,QAAQ,cAAc,OAAO,EAAE;AAAA,EACjC,EAAE;AAEF,QAAM,YAAY,SAAS,OAAO,CAAC,MAAM,EAAE,WAAW,MAAM,EAAE;AAC9D,QAAM,UAAU,SAAS,WAAW,IAAI,IAAI,KAAK,MAAO,YAAY,SAAS,SAAU,GAAG;AAE1F,MAAI,kBAA0C;AAC9C,aAAW,WAAW,gBAAgB;AACpC,QAAI,CAAC,MAAM,kBAAkB,SAAS,OAAO,KAAK,CAAC,MAAM,gBAAgB,SAAS,OAAO,GAAG;AAC1F,wBAAkB;AAClB;AAAA,IACF;AAAA,EACF;AAEA,SAAO;AAAA,IACL;AAAA,IACA,OAAO,MAAM;AAAA,IACb,eAAe,gBAAgB,OAAO,oBAAoB;AAAA,IAC1D;AAAA,IACA;AAAA,IACA;AAAA,EACF;AACF;AAEO,SAAS,oBAAoB,KAAa,SAAwD;AACvG,QAAM,QAAQ,oBAAoB,GAAG;AACrC,QAAM,oBAAoB,CAAC,GAAG,oBAAI,IAAI,CAAC,GAAG,MAAM,mBAAmB,OAAO,CAAC,CAAC;AAC5E,SAAO,oBAAoB,KAAK,EAAE,kBAAkB,CAAC;AACvD;AAEO,SAAS,sBAAsB,KAA2C;AAC/E,QAAM,QAAQ,oBAAoB,GAAG;AACrC,SAAO,oBAAoB,KAAK;AAAA,IAC9B,mBAAmB,CAAC,GAAG,oBAAI,IAAI,CAAC,GAAG,MAAM,mBAAmB,GAAG,gBAAgB,UAAU,CAAC,CAAC;AAAA,IAC3F,aAAa,OAAO;AAAA,IACpB,gBAAgB;AAAA,EAClB,CAAC;AACH;AAEO,SAAS,sBAAsB,KAAsB;AAC1D,SAAOC,YAAWC,MAAK,KAAK,qBAAqB,CAAC;AACpD;;;AGxIA,SAAS,cAAAC,cAAY,gBAAAC,qBAAoB;AACzC,SAAS,QAAAC,cAAY;;;ACDrB,SAAS,cAAAC,aAAY,gBAAAC,qBAAoB;AACzC,SAAS,QAAAC,aAAY;;;ACDrB,SAAS,cAAAC,aAAY,gBAAAC,eAAc,eAAAC,oBAAmB;AACtD,SAAS,QAAAC,aAAY;;;ACDrB,SAAS,cAAAC,aAAY,gBAAAC,qBAAoB;AACzC,SAAS,QAAAC,aAAY;AAwBrB,IAAM,oBAAoB;AAE1B,IAAM,qBAA6C;AAAA,EACjD,SAAS;AAAA,EACT,kBAAkB;AAAA,EAClB,8BAA8B;AAAA,EAC9B,mBAAmB;AAAA,EACnB,wBACE;AAAA,EACF,uBAAuB;AAAA,EACvB,qBAAqB;AAAA,EACrB,eAAe;AAAA,EACf,mBAAmB;AAAA,EACnB,qCAAqC;AAAA,EACrC,oBAAoB;AACtB;AAEA,SAAS,yBAAyB,KAAa,SAA4C;AACzF,MAAI,CAAC,QAAS,QAAO;AACrB,QAAM,OAAOC,MAAK,KAAK,OAAO;AAC9B,MAAI,CAACC,YAAW,IAAI,EAAG,QAAO;AAC9B,QAAM,OAAOC,cAAa,MAAM,MAAM;AACtC,QAAM,QAAQ,KAAK,MAAM,8BAA8B;AACvD,SAAO,QAAQ,CAAC,GAAG,KAAK,KAAK;AAC/B;AAEO,SAAS,wBAAwB,KAA4B;AAClE,QAAM,SAAS,aAA+E,KAAK,iBAAiB;AACpH,QAAM,SAAS,QAAQ,UAAU,CAAC;AAClC,MAAI,OAAO,WAAW,GAAG;AACvB,WAAO,OAAO,QAAQ,kBAAkB,EAAE,IAAI,CAAC,CAAC,IAAI,WAAW,OAAO;AAAA,MACpE;AAAA,MACA,MAAM,GACH,MAAM,GAAG,EACT,IAAI,CAAC,SAAS,KAAK,OAAO,CAAC,EAAE,YAAY,IAAI,KAAK,MAAM,CAAC,CAAC,EAC1D,KAAK,GAAG;AAAA,MACX;AAAA,IACF,EAAE;AAAA,EACJ;AACA,SAAO,OAAO,IAAI,CAAC,UAAU;AAC3B,UAAM,WAAW,yBAAyB,KAAK,MAAM,IAAI;AACzD,WAAO;AAAA,MACL,IAAI,MAAM;AAAA,MACV,MAAM,MAAM,QAAQ,MAAM;AAAA,MAC1B,aAAa,YAAY,mBAAmB,MAAM,EAAE,KAAK;AAAA,MACzD,GAAI,MAAM,OAAO,EAAE,MAAM,MAAM,KAAK,IAAI,CAAC;AAAA,IAC3C;AAAA,EACF,CAAC;AACH;AAEO,SAAS,sBAAsB,KAAgC;AACpE,QAAM,SAAS,wBAAwB,GAAG;AAC1C,QAAM,SAAwB,CAAC,SAAS,YAAY,YAAY,WAAW;AAC3E,SAAO;AAAA,IACL;AAAA,MACE,IAAI;AAAA,MACJ,SAAS;AAAA,MACT,OAAO;AAAA,MACP,KAAK;AAAA,MACL,QAAQ,CAAC;AAAA,MACT,SAAS;AAAA,MACT,WAAW;AAAA,MACX,aAAa;AAAA,MACb,OAAO;AAAA,MACP,UAAU;AAAA,IACZ;AAAA,IACA,GAAG,OAAO,IAAI,CAAC,WAA4B;AAAA,MACzC,IAAI,SAAS,MAAM,EAAE;AAAA,MACrB,SAAS;AAAA,MACT,OAAO,SAAS,MAAM,IAAI;AAAA,MAC1B,KAAK,GAAG,MAAM,WAAW;AAAA,MACzB,QAAQ,CAAC,cAAc,MAAM,EAAE,EAAE;AAAA,MACjC,SAAS,MAAM;AAAA,MACf,WAAW,MAAM;AAAA,MACjB,aAAa,MAAM;AAAA,MACnB,OAAO;AAAA,MACP,UAAU;AAAA,IACZ,EAAE;AAAA,EACJ;AACF;AAEO,SAAS,oBAAoB,SAAyB;AAC3D,SAAO,cAAc,OAAO;AAC9B;;;AC3GO,SAAS,2BAA2B,aAAqB,WAAkC;AAChG,aAAWC,SAAQ,YAAY,MAAM,IAAI,GAAG;AAC1C,UAAM,UAAUA,MAAK,KAAK;AAC1B,QAAI,CAAC,QAAQ,WAAW,GAAG,EAAG;AAC9B,UAAM,QAAQ,QACX,MAAM,GAAG,EACT,IAAI,CAAC,SAAS,KAAK,KAAK,CAAC,EACzB,OAAO,CAAC,SAAS,KAAK,SAAS,CAAC;AACnC,QAAI,MAAM,CAAC,MAAM,UAAW,QAAO;AAAA,EACrC;AACA,SAAO;AACT;AAGO,SAAS,4BAA4B,aAAqB,WAA4B;AAC3F,QAAM,MAAM,2BAA2B,aAAa,SAAS;AAC7D,MAAI,CAAC,IAAK,QAAO;AACjB,QAAM,QAAQ,IACX,MAAM,GAAG,EACT,IAAI,CAAC,SAAS,KAAK,KAAK,CAAC,EACzB,OAAO,CAAC,SAAS,KAAK,SAAS,CAAC;AACnC,QAAM,oBAAoB,MAAM,CAAC,KAAK;AACtC,SAAO,WAAW,KAAK,iBAAiB,KAAK,CAAC,QAAQ,KAAK,iBAAiB;AAC9E;;;AFlBO,IAAM,sBACX;AAKK,SAAS,gBAAgB,OAAuB;AACrD,SAAO,KAAK,UAAU,KAAK;AAC7B;AAEA,SAAS,eAAe,SAAiB,MAAsB;AAC7D,MAAI,YAAY,UAAW,QAAO;AAClC,MAAI,YAAY,iBAAkB,QAAO;AACzC,MAAI,YAAY,wBAAwB;AACtC,WAAO;AAAA,EACT;AACA,MAAI,YAAY,qBAAqB;AACnC,WAAO;AAAA,EACT;AACA,SAAO,WAAW,KAAK,YAAY,CAAC;AACtC;AAEA,SAAS,qBAAqB,SAAyB;AACrD,QAAM,WAAmC;AAAA,IACvC,SAAS;AAAA,IACT,kBAAkB;AAAA,IAClB,qBAAqB;AAAA,IACrB,wBAAwB;AAAA,IACxB,eAAe;AAAA,IACf,8BAA8B;AAAA,IAC9B,mBAAmB;AAAA,IACnB,uBAAuB;AAAA,IACvB,mBAAmB;AAAA,IACnB,qCAAqC;AAAA,EACvC;AACA,SAAO,SAAS,OAAO,KAAK;AAC9B;AAEO,SAAS,yBAAyB,OAAoB,WAA4B;AACvF,QAAM,OAAO,MAAM,YAAY,SAAS,MAAM,GAAG,MAAM,YAAY,MAAM,GAAG,GAAG,CAAC,QAAQ,MAAM;AAC9F,MAAI,CAAC,UAAW,QAAO;AACvB,QAAM,SAAS,qBAAqB,MAAM,EAAE;AAC5C,SAAO,SAAS,GAAG,IAAI,IAAI,MAAM,KAAK;AACxC;AAEO,SAAS,sBAAsB,OAAoB,UAAmC,CAAC,GAAW;AACvG,QAAM,cAAc,yBAAyB,OAAO,QAAQ,QAAQ,SAAS,CAAC;AAC9E,QAAM,YAAY,MAAM,QAAQ,qBAAqB,MAAM,EAAE;AAC7D,QAAM,OAAO,eAAe,MAAM,IAAI,MAAM,IAAI;AAEhD,SAAO;AAAA,QACD,gBAAgB,MAAM,EAAE,CAAC;AAAA,eAClB,gBAAgB,WAAW,CAAC;AAAA;AAAA;AAAA,OAGpC,mBAAmB;AAAA;AAAA,cAEZ,SAAS;AAAA;AAAA,EAErB,IAAI;AAAA;AAAA;AAAA;AAAA;AAAA;AAMN;AAEA,SAAS,wBAAwB,KAAa,cAAsB,SAAiB,OAAgB,QAAiC;AACpI,QAAM,aAAaC,MAAK,KAAK,YAAY;AACzC,MAAI,CAAC,SAASC,YAAW,UAAU,GAAG;AACpC,UAAM,WAAWC,cAAa,YAAY,MAAM;AAChD,QAAI,aAAa,SAAS;AACxB,aAAO,UAAU,KAAK,YAAY;AAClC;AAAA,IACF;AACA,UAAM,eAAeF,MAAK,KAAK,cAAc,aAAa,aAAa,QAAQ,OAAO,IAAI,CAAC;AAC3F,cAAUA,MAAK,KAAK,cAAc,WAAW,CAAC;AAC9C,cAAU,cAAc,QAAQ;AAChC,WAAO,UAAU,KAAK,GAAG,YAAY,OAAO,YAAY,EAAE;AAC1D;AAAA,EACF;AACA,YAAUA,MAAK,KAAK,aAAa,MAAM,GAAG,EAAE,MAAM,GAAG,EAAE,EAAE,KAAK,GAAG,CAAC,CAAC;AACnE,YAAU,YAAY,OAAO;AAC7B,SAAO,OAAO,KAAK,YAAY;AACjC;AAEO,SAAS,0BAA0B,KAAa,WAAmB,SAAmF;AAC3J,YAAUA,MAAK,KAAK,SAAS,CAAC;AAC9B,aAAW,SAAS,wBAAwB,GAAG,GAAG;AAChD,UAAM,eAAe,GAAG,SAAS,IAAI,MAAM,EAAE;AAC7C,4BAAwB,KAAK,cAAc,sBAAsB,OAAO,OAAO,GAAG,QAAQ,OAAO,QAAQ,MAAM;AAAA,EACjH;AACF;AAEA,IAAM,uBAAuB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAmBtB,SAAS,wBAAwB,KAAa,OAAgB,QAAiC;AACpG,4BAA0B,KAAK,kBAAkB,EAAE,WAAW,MAAM,OAAO,OAAO,CAAC;AACnF,0BAAwB,KAAK,4BAA4B,sBAAsB,OAAO,MAAM;AAC9F;AAEO,SAAS,4BAA4B,KAA2C;AACrF,QAAM,OAAOA,MAAK,KAAK,+BAA+B;AACtD,QAAM,MAAM,oBAAI,IAA6B;AAC7C,MAAI,CAACC,YAAW,IAAI,EAAG,QAAO;AAE9B,MAAI;AACF,UAAM,SAAS,KAAK,MAAMC,cAAa,MAAM,MAAM,CAAC;AAIpD,UAAM,gBAAgB,oBAAI,IAA6B;AACvD,eAAW,WAAW,OAAO,YAAY,CAAC,GAAG;AAC3C,UAAI,QAAQ,MAAM,QAAQ,iBAAiB;AACzC,cAAM,SAAS,QAAQ;AACvB,YAAI,WAAW,SAAS,WAAW,YAAY,WAAW,QAAQ;AAChE,wBAAc,IAAI,QAAQ,IAAI,MAAM;AAAA,QACtC;AAAA,MACF;AAAA,IACF;AACA,eAAW,WAAW,OAAO,eAAe,CAAC,GAAG;AAC9C,UAAI,CAAC,QAAQ,QAAS;AACtB,YAAM,SAAS,QAAQ;AACvB,UAAI,WAAW,SAAS,WAAW,YAAY,WAAW,QAAQ;AAChE,YAAI,IAAI,QAAQ,SAAS,MAAM;AAC/B;AAAA,MACF;AACA,UAAI,QAAQ,aAAa,cAAc,IAAI,QAAQ,SAAS,GAAG;AAC7D,YAAI,IAAI,QAAQ,SAAS,cAAc,IAAI,QAAQ,SAAS,CAAE;AAAA,MAChE;AAAA,IACF;AAAA,EACF,QAAQ;AACN,WAAO;AAAA,EACT;AACA,SAAO;AACT;AAEA,SAAS,iBAAiB,OAAuB;AAC/C,SAAO,MAAM,QAAQ,OAAO,MAAM,EAAE,QAAQ,MAAM,KAAK;AACzD;AAEO,SAAS,oBAAoB,OAAoB,QAAiC;AACvF,QAAM,cAAc,yBAAyB,OAAO,IAAI;AACxD,QAAM,YAAY,MAAM,QAAQ,qBAAqB,MAAM,EAAE;AAC7D,QAAM,OAAO,eAAe,MAAM,IAAI,MAAM,IAAI;AAChD,QAAM,eAAe;AAAA,IACnB;AAAA,IACA;AAAA,IACA,OAAO,SAAS;AAAA,IAChB;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF,EAAE,KAAK,IAAI;AAEX,SAAO,WAAW,MAAM,EAAE;AAAA,iBACX,iBAAiB,WAAW,CAAC;AAAA;AAAA,4BAElB,MAAM;AAAA;AAAA;AAAA,EAGhC,YAAY;AAAA;AAAA;AAGd;AAEO,SAAS,0BAA0B,KAAa,OAAgB,QAAiC;AACtG,YAAUF,MAAK,KAAK,eAAe,CAAC;AACpC,QAAM,YAAY,4BAA4B,GAAG;AACjD,aAAW,SAAS,wBAAwB,GAAG,GAAG;AAChD,UAAM,SAAS,UAAU,IAAI,MAAM,EAAE,KAAK;AAC1C,UAAM,eAAe,iBAAiB,MAAM,EAAE;AAC9C,4BAAwB,KAAK,cAAc,oBAAoB,OAAO,MAAM,GAAG,OAAO,MAAM;AAAA,EAC9F;AACF;AAEA,SAAS,6BAA6B,MAAc,SAAyB;AAC3E,QAAM,UAAU,KAAK,MAAM,+BAA+B;AAC1D,MAAI,UAAU,CAAC,EAAG,QAAO,QAAQ,CAAC,EAAE,KAAK,EAAE,MAAM,GAAG,GAAG;AACvD,QAAM,eAAe,KAAK,MAAM,YAAY;AAC5C,MAAI,eAAe,CAAC,EAAG,QAAO,GAAG,aAAa,CAAC,EAAE,KAAK,CAAC;AACvD,SAAO,uBAAuB,QAAQ,QAAQ,MAAM,GAAG,CAAC;AAC1D;AAEA,SAAS,sBAAsB,SAAiB,aAA6B;AAC3E,QAAM,cAAc,6BAA6B,aAAa,OAAO;AACrE,QAAM,OAAO,YAAY,QAAQ,cAAc,EAAE,EAAE,UAAU;AAC7D,SAAO;AAAA,QACD,gBAAgB,OAAO,CAAC;AAAA,eACjB,gBAAgB,WAAW,CAAC;AAAA;AAAA;AAAA,EAGzC,KAAK,KAAK,CAAC;AAAA;AAEb;AAEO,SAAS,4BAA4B,KAAa,OAAgB,QAAiC;AACxG,QAAM,aAAaA,MAAK,KAAK,mBAAmB;AAChD,MAAI,CAACC,YAAW,UAAU,EAAG;AAE7B,aAAW,QAAQE,aAAY,UAAU,EAAE,OAAO,CAAC,SAAS,KAAK,SAAS,KAAK,CAAC,GAAG;AACjF,UAAM,UAAU,KAAK,QAAQ,SAAS,EAAE;AACxC,UAAM,cAAcD,cAAaF,MAAK,YAAY,IAAI,GAAG,MAAM;AAC/D,UAAM,eAAe,kBAAkB,OAAO;AAC9C,4BAAwB,KAAK,cAAc,sBAAsB,SAAS,WAAW,GAAG,OAAO,MAAM;AAAA,EACvG;AACF;;;ADnMA,SAAS,iBAAiB,SAAgC;AACxD,QAAM,UAAU,oBAAI,IAAe,CAAC,UAAU,UAAU,SAAS,WAAW,aAAa,CAAC;AAC1F,QAAM,aAAa,oBAAI,IAAe;AACtC,aAAW,UAAU,SAAS;AAC5B,UAAM,QAAQ,OAAO,KAAK,EAAE,YAAY;AACxC,QAAI,UAAU,OAAO;AACnB,iBAAW,QAAQ,QAAS,YAAW,IAAI,IAAI;AAC/C;AAAA,IACF;AACA,QAAI,QAAQ,IAAI,KAAkB,EAAG,YAAW,IAAI,KAAkB;AAAA,EACxE;AACA,SAAO,CAAC,GAAG,UAAU;AACvB;AAEA,SAAS,gBAAgB,KAAa,aAAqB,QAAgB,QAAgB,OAAgB,QAAiC;AAC1I,QAAM,aAAa,qBAAqBI,MAAK,aAAa,MAAM,GAAG,KAAK,QAAQ;AAAA,IAC9E;AAAA,IACA,cAAcA,MAAK,KAAK,cAAc,WAAW;AAAA,EACnD,CAAC;AACD,MAAI,WAAW,WAAW,UAAW,QAAO,OAAO,KAAK,WAAW,MAAM;AACzE,MAAI,WAAW,WAAW,YAAa,QAAO,UAAU,KAAK,WAAW,MAAM;AAC9E,MAAI,WAAW,WAAW,cAAe,QAAO,YAAY,KAAK,WAAW,MAAM;AAClF,MAAI,WAAW,WAAW,YAAY;AACpC,WAAO,UAAU,KAAK,GAAG,WAAW,MAAM,OAAO,WAAW,YAAY,EAAE;AAAA,EAC5E;AACF;AAEA,SAAS,wBAAwB,KAAa,aAAqB,OAAgB,QAAiC;AAClH,4BAA0B,KAAK,kBAAkB,EAAE,WAAW,OAAO,OAAO,OAAO,CAAC;AACpF,kBAAgB,KAAK,aAAa,iBAAiB,aAAa,OAAO,MAAM;AAC/E;AAEA,SAAS,yBAAyB,KAAa,aAAqB,WAAmB,WAAmB,OAAgB,QAAiC;AACzJ,aAAW,QAAQ,mBAAmBA,MAAK,aAAa,SAAS,CAAC,GAAG;AACnE,oBAAgB,KAAK,aAAaA,MAAK,WAAW,IAAI,GAAGA,MAAK,WAAW,IAAI,EAAE,QAAQ,OAAO,GAAG,GAAG,OAAO,MAAM;AAAA,EACnH;AACF;AAEA,SAAS,0BAA0B,KAAa,aAAqB,OAAgB,QAAiC;AACpH,YAAUA,MAAK,KAAK,gBAAgB,aAAa,UAAU,CAAC;AAC5D,YAAUA,MAAK,KAAK,gBAAgB,gBAAgB,CAAC;AAErD,aAAW,QAAQ,0BAA0B;AAC3C,oBAAgB,KAAK,aAAa,KAAK,QAAQ,KAAK,QAAQ,OAAO,MAAM;AAAA,EAC3E;AAEA,2BAAyB,KAAK,aAAa,iCAAiC,iCAAiC,OAAO,MAAM;AAC1H,2BAAyB,KAAK,aAAa,2BAA2B,uCAAuC,OAAO,MAAM;AAC5H;AAEA,SAAS,6BAA6B,KAAa,WAAiC;AAClF,QAAM,OAAOA,MAAK,KAAK,uBAAuB;AAC9C,MAAI,CAACC,YAAW,IAAI,EAAG;AACvB,MAAI,UAAUC,cAAa,MAAM,MAAM;AACvC,QAAM,SAAQ,oBAAI,KAAK,GAAE,YAAY,EAAE,MAAM,GAAG,EAAE;AAElD,MAAI,UAAU,IAAI,QAAQ,KAAK,QAAQ,SAAS,YAAY,GAAG;AAC7D,cAAU,QAAQ;AAAA,MAChB;AAAA,MACA,qKAAqK,KAAK;AAAA,IAC5K;AAAA,EACF;AAEA,MAAI,UAAU,IAAI,SAAS,KAAK,QAAQ,SAAS,kBAAkB,GAAG;AACpE,cAAU,QAAQ;AAAA,MAChB;AAAA,MACA,yMAAyM,KAAK;AAAA,IAChN;AAAA,EACF;AAEA,MAAI,UAAU,IAAI,QAAQ,KAAK,QAAQ,SAAS,iBAAiB,GAAG;AAClE,cAAU,QAAQ;AAAA,MAChB;AAAA,MACA,wJAAwJ,KAAK;AAAA,IAC/J;AAAA,EACF;AAEA,MAAI,UAAU,IAAI,OAAO,KAAK,QAAQ,SAAS,wCAAwC,GAAG;AACxF,cAAU,QAAQ;AAAA,MAChB;AAAA,MACA,gLAAgL,KAAK;AAAA,IACvL;AAAA,EACF;AAEA,MAAI,UAAU,IAAI,aAAa,KAAK,QAAQ,SAAS,iBAAiB,GAAG;AACvE,cAAU,QAAQ;AAAA,MAChB;AAAA,MACA,gOAAgO,KAAK;AAAA,IACvO;AAAA,EACF;AAEA,YAAU,MAAM,OAAO;AACzB;AAEO,SAAS,qBAAqB,KAAwC;AAC3E,MAAI,CAAC,OAAO,IAAI,WAAW,EAAG,QAAO,CAAC;AACtC,SAAO,iBAAiB,IAAI,QAAQ,CAAC,UAAU,MAAM,MAAM,GAAG,CAAC,CAAC;AAClE;AAEO,SAAS,mBAAmB,SAAgD;AACjF,QAAM,MAAM,QAAQ;AACpB,QAAM,cAAc,gBAAgB;AACpC,QAAM,UAAU,iBAAiB,QAAQ,OAAO;AAChD,QAAM,QAAQ,QAAQ,QAAQ,KAAK;AACnC,QAAM,SAA4B;AAAA,IAChC,WAAW;AAAA,IACX,QAAQ,CAAC;AAAA,IACT,WAAW,CAAC;AAAA,IACZ,WAAW,CAAC;AAAA,IACZ,aAAa,CAAC;AAAA,EAChB;AAEA,MAAI,QAAQ,WAAW,EAAG,QAAO;AAEjC,QAAM,YAAY,IAAI,IAAe,OAAO;AAE5C,MAAI,UAAU,IAAI,QAAQ,GAAG;AAC3B,eAAWC,YAAW,sBAAsB;AAC1C,sBAAgB,KAAK,aAAaA,SAAQ,QAAQA,SAAQ,QAAQ,OAAO,MAAM;AAAA,IACjF;AACA,eAAWA,YAAW,6BAA6B;AACjD,sBAAgB,KAAK,aAAaA,SAAQ,QAAQA,SAAQ,QAAQ,OAAO,MAAM;AAAA,IACjF;AACA,4BAAwB,KAAK,OAAO,MAAM;AAC1C,gCAA4B,KAAK,OAAO,MAAM;AAAA,EAChD;AAEA,MAAI,UAAU,IAAI,SAAS,GAAG;AAC5B,cAAUH,MAAK,KAAK,WAAW,cAAc,CAAC;AAC9C,eAAW,QAAQ,2BAA2B;AAC5C,sBAAgB,KAAK,aAAa,KAAK,QAAQ,KAAK,QAAQ,OAAO,MAAM;AAAA,IAC3E;AAAA,EACF;AAEA,MAAI,UAAU,IAAI,QAAQ,GAAG;AAC3B,4BAAwB,KAAK,aAAa,OAAO,MAAM;AAAA,EACzD;AAEA,MAAI,UAAU,IAAI,OAAO,GAAG;AAC1B,cAAUA,MAAK,KAAK,QAAQ,CAAC;AAC7B,oBAAgB,KAAK,aAAa,qBAAqB,sBAAsB,OAAO,MAAM;AAC1F,8BAA0B,KAAK,OAAO,MAAM;AAAA,EAC9C;AAEA,MAAI,UAAU,IAAI,aAAa,GAAG;AAChC,8BAA0B,KAAK,aAAa,OAAO,MAAM;AAAA,EAC3D;AAEA,+BAA6B,KAAK,SAAS;AAE3C,SAAO;AACT;AAEO,SAAS,2BAA2B,YAAsC;AAC/E,QAAM,QAAQ,WAAW,KAAK,EAAE,YAAY;AAC5C,MAAI,UAAU,YAAY,UAAU,YAAY,UAAU,WAAW,UAAU,WAAW;AACxF,WAAO;AAAA,EACT;AACA,SAAO;AACT;;;AD3JO,SAAS,YAAY,SAAkC;AAC5D,QAAM,MAAM,QAAQ;AACpB,QAAM,QAAQ,QAAQ,SAAS,eAAe;AAC9C,QAAM,cAAc,gBAAgB;AACpC,QAAM,eAAeI,OAAK,aAAa,aAAa,KAAK;AAEzD,MAAI,CAACC,aAAW,YAAY,GAAG;AAC7B,UAAM,IAAI,MAAM,8BAA8B,KAAK,EAAE;AAAA,EACvD;AAEA,YAAUD,OAAK,KAAK,YAAY,CAAC;AACjC,YAAUA,OAAK,KAAK,cAAc,WAAW,CAAC;AAE9C,QAAM,SAAqB;AAAA,IACzB,QAAQ,CAAC;AAAA,IACT,WAAW,CAAC;AAAA,IACZ,WAAW,CAAC;AAAA,IACZ,aAAa,CAAC;AAAA,IACd,cAAc;AAAA,EAChB;AAEA,QAAM,iBAAyC,CAAC;AAEhD,aAAW,OAAO,WAAW;AAC3B,UAAM,eAAeA,OAAK,cAAc,GAAG;AAC3C,mBAAe,GAAG,IAAI,OAAOE,cAAa,cAAc,MAAM,CAAC;AAE/D,UAAM,aAAa,qBAAqB,cAAc,KAAK,KAAK;AAAA,MAC9D,OAAO,QAAQ,QAAQ,KAAK;AAAA,MAC5B,cAAcF,OAAK,KAAK,cAAc,WAAW;AAAA,IACnD,CAAC;AAED,QAAI,WAAW,WAAW,UAAW,QAAO,OAAO,KAAK,WAAW,MAAM;AACzE,QAAI,WAAW,WAAW,YAAa,QAAO,UAAU,KAAK,WAAW,MAAM;AAC9E,QAAI,WAAW,WAAW,cAAe,QAAO,YAAY,KAAK,WAAW,MAAM;AAClF,QAAI,WAAW,WAAW,YAAY;AACpC,aAAO,UAAU,KAAK,GAAG,WAAW,MAAM,OAAO,WAAW,YAAY,EAAE;AAAA,IAC5E;AAAA,EACF;AAEA,aAAW,UAAU,iBAAiB;AACpC,kBAAcA,OAAK,aAAa,MAAM,GAAGA,OAAK,KAAK,cAAc,MAAM,CAAC;AAAA,EAC1E;AAEA,aAAWG,YAAW,sBAAsB;AAC1C,UAAM,cAAc,qBAAqBH,OAAK,aAAaG,SAAQ,MAAM,GAAG,KAAKA,SAAQ,QAAQ;AAAA,MAC/F,OAAO,QAAQ,QAAQ,KAAK;AAAA,MAC5B,cAAcH,OAAK,KAAK,cAAc,WAAW;AAAA,IACnD,CAAC;AACD,QAAI,YAAY,WAAW,UAAW,QAAO,OAAO,KAAK,YAAY,MAAM;AAC3E,QAAI,YAAY,WAAW,YAAa,QAAO,UAAU,KAAK,YAAY,MAAM;AAChF,QAAI,YAAY,WAAW,cAAe,QAAO,YAAY,KAAK,YAAY,MAAM;AACpF,QAAI,YAAY,WAAW,YAAY;AACrC,aAAO,UAAU,KAAK,GAAG,YAAY,MAAM,OAAO,YAAY,YAAY,EAAE;AAAA,IAC9E;AAAA,EACF;AAEA,QAAM,aAAa,qBAAqBA,OAAK,aAAa,2BAA2B,GAAG,KAAK,6BAA6B;AAAA,IACxH,OAAO,QAAQ,QAAQ,KAAK;AAAA,IAC5B,cAAcA,OAAK,KAAK,cAAc,WAAW;AAAA,EACnD,CAAC;AACD,MAAI,WAAW,WAAW,UAAW,QAAO,OAAO,KAAK,WAAW,MAAM;AACzE,MAAI,WAAW,WAAW,YAAa,QAAO,UAAU,KAAK,WAAW,MAAM;AAC9E,MAAI,WAAW,WAAW,cAAe,QAAO,YAAY,KAAK,WAAW,MAAM;AAClF,MAAI,WAAW,WAAW,WAAY,QAAO,UAAU,KAAK,GAAG,WAAW,MAAM,OAAO,WAAW,YAAY,EAAE;AAEhH,QAAM,mBAAmB,qBAAqBA,OAAK,aAAa,4BAA4B,GAAG,KAAK,8BAA8B;AAAA,IAChI,OAAO,QAAQ,QAAQ,KAAK;AAAA,IAC5B,cAAcA,OAAK,KAAK,cAAc,WAAW;AAAA,EACnD,CAAC;AACD,MAAI,iBAAiB,WAAW,UAAW,QAAO,OAAO,KAAK,iBAAiB,MAAM;AACrF,MAAI,iBAAiB,WAAW,YAAa,QAAO,UAAU,KAAK,iBAAiB,MAAM;AAC1F,MAAI,iBAAiB,WAAW,cAAe,QAAO,YAAY,KAAK,iBAAiB,MAAM;AAC9F,MAAI,iBAAiB,WAAW,WAAY,QAAO,UAAU,KAAK,GAAG,iBAAiB,MAAM,OAAO,iBAAiB,YAAY,EAAE;AAElI,QAAM,WAA4B;AAAA,IAChC,aAAa;AAAA,IACb,gBAAgB;AAAA,IAChB;AAAA,IACA,cAAa,oBAAI,KAAK,GAAE,YAAY;AAAA,IACpC,MAAM,CAAC,GAAG,SAAS;AAAA,IACnB,gBAAgB,CAAC,GAAG,eAAe;AAAA,IACnC,aAAa;AAAA,IACb,cAAc;AAAA,IACd;AAAA,EACF;AAEA,YAAUA,OAAK,KAAK,cAAc,eAAe,GAAG,GAAG,KAAK,UAAU,UAAU,MAAM,CAAC,CAAC;AAAA,CAAI;AAC5F,YAAUA,OAAK,KAAK,cAAc,aAAa,GAAG,GAAG,KAAK,UAAU,gBAAgB,MAAM,CAAC,CAAC;AAAA,CAAI;AAChG,QAAM,gBAAgBA,OAAK,KAAK,cAAc,gBAAgB;AAC9D,MAAI,CAACC,aAAW,aAAa,EAAG,WAAU,eAAe,GAAG,KAAK,UAAU,EAAE,WAAW,CAAC,EAAE,GAAG,MAAM,CAAC,CAAC;AAAA,CAAI;AAE1G,aAAW,YAAY,mBAAmB;AACxC,UAAM,SAAS,qBAAqBD,OAAK,aAAa,SAAS,MAAM,GAAG,KAAK,SAAS,QAAQ;AAAA,MAC5F,OAAO,QAAQ,QAAQ,KAAK;AAAA,MAC5B,cAAcA,OAAK,KAAK,cAAc,WAAW;AAAA,IACnD,CAAC;AACD,QAAI,OAAO,WAAW,UAAW,QAAO,OAAO,KAAK,OAAO,MAAM;AACjE,QAAI,OAAO,WAAW,YAAa,QAAO,UAAU,KAAK,OAAO,MAAM;AACtE,QAAI,OAAO,WAAW,cAAe,QAAO,YAAY,KAAK,OAAO,MAAM;AAC1E,QAAI,OAAO,WAAW,WAAY,QAAO,UAAU,KAAK,GAAG,OAAO,MAAM,OAAO,OAAO,YAAY,EAAE;AAAA,EACtG;AAEA,QAAMI,WAAU,mBAAmB,GAAG;AACtC,SAAO,cAAcA,SAAQ;AAE7B,QAAM,kBAAkB,qBAAqB,QAAQ,QAAQ;AAC7D,MAAI,gBAAgB,SAAS,GAAG;AAC9B,WAAO,aAAa,mBAAmB;AAAA,MACrC;AAAA,MACA,SAAS;AAAA,MACT,OAAO,QAAQ,QAAQ,KAAK;AAAA,IAC9B,CAAC;AACD,WAAO,OAAO,KAAK,GAAG,OAAO,WAAW,OAAO,OAAO,CAAC,SAAS,CAAC,OAAO,OAAO,SAAS,IAAI,CAAC,CAAC;AAC9F,WAAO,UAAU,KAAK,GAAG,OAAO,WAAW,UAAU,OAAO,CAAC,SAAS,CAAC,OAAO,UAAU,SAAS,IAAI,CAAC,CAAC;AACvG,WAAO,UAAU,KAAK,GAAG,OAAO,WAAW,UAAU,OAAO,CAAC,SAAS,CAAC,OAAO,UAAU,SAAS,IAAI,CAAC,CAAC;AACvG,WAAO,YAAY,KAAK,GAAG,OAAO,WAAW,YAAY,OAAO,CAAC,SAAS,CAAC,OAAO,YAAY,SAAS,IAAI,CAAC,CAAC;AAAA,EAC/G;AAEA,SAAO;AACT;AAIO,SAAS,aAAa,KAAqC;AAChE,QAAM,eAAeC,OAAK,KAAK,cAAc,eAAe;AAC5D,MAAI,CAACC,aAAW,YAAY,EAAG,QAAO;AACtC,SAAO,KAAK,MAAMC,cAAa,cAAc,MAAM,CAAC;AACtD;;;ALjHA,IAAM,qBAAqB;AAAA,EACzB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;AAEA,IAAM,qBAAqB;AAAA,EACzB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;AAEA,IAAM,wBAAwB;AAAA,EAC5B;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;AACA,IAAM,sBAAsB;AAErB,IAAM,kBAAkB,CAAC,eAAe,kBAAkB,qBAAqB,yBAAyB;AAExG,SAAS,sBAAsB,OAAiD;AACrF,SAAQ,gBAAsC,SAAS,KAAK;AAC9D;AAEO,SAAS,sBAAsB,QAAiC,SAA2C;AAChH,SAAO,gBAAgB,QAAQ,MAAM,KAAK,gBAAgB,QAAQ,OAAO;AAC3E;AAEA,SAAS,YAAY,MAAc,QAA2B;AAC5D,QAAM,QAAQ,KAAK,YAAY;AAC/B,SAAO,OAAO,KAAK,CAAC,UAAU,MAAM,SAAS,MAAM,YAAY,CAAC,CAAC;AACnE;AAEA,SAAS,YAAY,MAAc,QAA2B;AAC5D,QAAM,QAAQ,KAAK,YAAY;AAC/B,SAAO,OAAO,MAAM,CAAC,UAAU,MAAM,SAAS,MAAM,YAAY,CAAC,CAAC;AACpE;AAEA,SAAS,QAAQ,KAAa,MAAsB;AAClD,QAAM,OAAOC,OAAK,KAAK,IAAI;AAC3B,SAAOC,aAAW,IAAI,IAAIC,cAAa,MAAM,MAAM,IAAI;AACzD;AAEA,SAAS,oBAAoB,KAAsB;AACjD,QAAM,cAAcF,OAAK,KAAK,cAAc;AAC5C,MAAI,CAACC,aAAW,WAAW,EAAG,QAAO;AACrC,MAAI;AACF,UAAM,cAAc,KAAK,MAAMC,cAAa,aAAa,MAAM,CAAC;AAChE,WACE,YAAY,SAAS,oCACrBD,aAAWD,OAAK,KAAK,OAAO,OAAO,UAAU,CAAC,KAC9CC,aAAWD,OAAK,KAAK,aAAa,eAAe,CAAC,KAClDC,aAAWD,OAAK,KAAK,WAAW,oCAAoC,CAAC;AAAA,EAEzE,QAAQ;AACN,WAAO;AAAA,EACT;AACF;AAEA,SAAS,cAAc,KAA+C;AACpE,QAAM,OAAOA,OAAK,KAAK,cAAc,gBAAgB;AACrD,MAAI,CAACC,aAAW,IAAI,EAAG,QAAO,CAAC;AAE/B,MAAI;AACF,UAAM,SAAS,KAAK,MAAMC,cAAa,MAAM,MAAM,CAAC;AACpD,UAAM,YAAY,OAAO,aAAa,CAAC;AACvC,WAAO,OAAO;AAAA,MACZ,OAAO,QAAQ,SAAS,EAAE,IAAI,CAAC,CAAC,MAAM,QAAQ,MAAM;AAAA,QAClD;AAAA,QACA,OAAO,aAAa,WAAW,EAAE,QAAQ,SAAS,IAAI,YAAY,OAAO,aAAa,WAAW,WAAW,EAAE,QAAQ,OAAO,QAAQ,EAAE;AAAA,MACzI,CAAC;AAAA,IACH;AAAA,EACF,QAAQ;AACN,WAAO,CAAC;AAAA,EACV;AACF;AAEA,SAAS,aAAa,OAAqB,MAA6B;AACtE,QAAM,OAAOF,OAAK,gBAAgB,GAAG,aAAa,OAAO,IAAI;AAC7D,SAAOC,aAAW,IAAI,IAAIC,cAAa,MAAM,MAAM,IAAI;AACzD;AAEA,SAAS,cAAc,OAA0B;AAC/C,MAAI,CAAC,MAAM,QAAQ,KAAK,EAAG,QAAO,CAAC;AACnC,SAAO,MAAM,OAAO,CAAC,SAAyB,OAAO,SAAS,QAAQ;AACxE;AAEA,SAAS,SAAS,OAAkD;AAClE,SAAO,OAAO,UAAU,YAAY,UAAU;AAChD;AAEA,SAAS,uBAAuB,KAAa,UAA0B,qBAAqB,6BAAmC;AAC7H,QAAM,aAAaF,OAAK,KAAK,kBAAkB;AAC/C,MAAI,CAACC,aAAW,UAAU,GAAG;AAC3B,aAAS,KAAK;AAAA,MACZ,OAAO;AAAA,MACP,MAAM;AAAA,MACN,SAAS,GAAG,kBAAkB;AAAA,MAC9B,aAAa;AAAA,IACf,CAAC;AACD;AAAA,EACF;AAEA,MAAI;AACJ,MAAI;AACF,UAAM,SAAS,KAAK,MAAMC,cAAa,YAAY,MAAM,CAAC;AAC1D,QAAI,CAAC,SAAS,MAAM,EAAG,OAAM,IAAI,MAAM,+BAA+B;AACtE,UAAM,iBAAiB,oBAAoB,UAAU,MAAM;AAC3D,QAAI,CAAC,eAAe,SAAS;AAC3B,eAAS,KAAK;AAAA,QACZ,OAAO;AAAA,QACP,MAAM;AAAA,QACN,SAAS,GAAG,kBAAkB;AAAA,QAC9B,aAAa,oEAAoE,qBAAqB,eAAe,KAAK,EAAE,CAAC,CAAC;AAAA,MAChI,CAAC;AACD;AAAA,IACF;AACA,aAAS,eAAe;AACxB,aAAS,KAAK;AAAA,MACZ,OAAO;AAAA,MACP,MAAM;AAAA,MACN,SAAS;AAAA,IACX,CAAC;AAAA,EACH,QAAQ;AACN,aAAS,KAAK;AAAA,MACZ,OAAO;AAAA,MACP,MAAM;AAAA,MACN,SAAS,GAAG,kBAAkB;AAAA,MAC9B,aAAa;AAAA,IACf,CAAC;AACD;AAAA,EACF;AAEA,MAAI,OAAO,kBAAkB,KAAK,OAAO,aAAa,QAAQ,OAAO,oBAAoB,YAAY;AACnG,aAAS,KAAK;AAAA,MACZ,OAAO;AAAA,MACP,MAAM;AAAA,MACN,SAAS;AAAA,MACT,aAAa;AAAA,IACf,CAAC;AAAA,EACH;AAEA,QAAM,SAAS,MAAM,QAAQ,OAAO,MAAM,IAAK,OAAO,OAAO,OAAO,QAAQ,IAA2B,CAAC;AACxG,QAAM,WAAW,IAAI,IAAI,OAAO,IAAI,CAAC,UAAW,OAAO,MAAM,OAAO,WAAW,MAAM,KAAK,EAAG,EAAE,OAAO,OAAO,CAAC;AAC9G,QAAM,gBAAgB,mBAAmB,OAAO,CAAC,YAAY,CAAC,SAAS,IAAI,OAAO,CAAC;AAEnF,MAAI,cAAc,SAAS,GAAG;AAC5B,aAAS,KAAK;AAAA,MACZ,OAAO;AAAA,MACP,MAAM;AAAA,MACN,SAAS,oDAAoD,cAAc,KAAK,IAAI,CAAC;AAAA,MACrF,aAAa;AAAA,IACf,CAAC;AAAA,EACH,OAAO;AACL,aAAS,KAAK;AAAA,MACZ,OAAO;AAAA,MACP,MAAM;AAAA,MACN,SAAS;AAAA,IACX,CAAC;AAAA,EACH;AAEA,QAAM,WAAW,IAAI,IAAI,OAAO,QAAQ,CAAC,UAAU,cAAc,MAAM,MAAM,CAAC,CAAC;AAC/E,QAAM,gBAAgB,mBAAmB,OAAO,CAAC,YAAY,CAAC,SAAS,IAAI,OAAO,CAAC;AACnF,MAAI,cAAc,SAAS,GAAG;AAC5B,aAAS,KAAK;AAAA,MACZ,OAAO;AAAA,MACP,MAAM;AAAA,MACN,SAAS,mDAAmD,cAAc,KAAK,IAAI,CAAC;AAAA,MACpF,aAAa;AAAA,IACf,CAAC;AAAA,EACH,OAAO;AACL,aAAS,KAAK;AAAA,MACZ,OAAO;AAAA,MACP,MAAM;AAAA,MACN,SAAS;AAAA,IACX,CAAC;AAAA,EACH;AAEA,QAAM,UAAU,OAAO,KAAK,CAAC,UAAU,MAAM,OAAO,SAAS;AAC7D,MAAI,CAAC,WAAW,CAAC,cAAc,QAAQ,UAAU,EAAE,SAAS,UAAU,GAAG;AACvE,aAAS,KAAK;AAAA,MACZ,OAAO;AAAA,MACP,MAAM;AAAA,MACN,SAAS;AAAA,MACT,aAAa;AAAA,IACf,CAAC;AAAA,EACH;AAEA,QAAM,YAAY,MAAM,QAAQ,OAAO,SAAS,IAAK,OAAO,UAAU,OAAO,QAAQ,IAA8B,CAAC;AACpH,QAAM,mBAAmB,UAAU,KAAK,CAAC,aAAa,SAAS,OAAO,UAAU;AAChF,QAAM,qBAAqB,UAAU,KAAK,CAAC,aAAa,SAAS,OAAO,aAAa;AACrF,QAAM,mBAAmB,UAAU,KAAK,CAAC,aAAa,SAAS,OAAO,iBAAiB;AACvF,QAAM,wBAAwB,UAAU,KAAK,CAAC,aAAa,SAAS,OAAO,gBAAgB;AAE3F,MAAI,CAAC,oBAAoB,cAAc,iBAAiB,QAAQ,EAAE,CAAC,MAAM,WAAW;AAClF,aAAS,KAAK;AAAA,MACZ,OAAO;AAAA,MACP,MAAM;AAAA,MACN,SAAS;AAAA,MACT,aAAa;AAAA,IACf,CAAC;AAAA,EACH;AAEA,QAAM,eAAe,cAAc,oBAAoB,QAAQ;AAC/D,QAAM,cAAc,cAAc,oBAAoB,OAAO;AAC7D,MAAI,CAAC,sBAAsB,CAAC,aAAa,SAAS,gBAAgB,KAAK,CAAC,YAAY,SAAS,gBAAgB,GAAG;AAC9G,aAAS,KAAK;AAAA,MACZ,OAAO;AAAA,MACP,MAAM;AAAA,MACN,SAAS;AAAA,MACT,aAAa;AAAA,IACf,CAAC;AAAA,EACH,WAAW,CAAC,YAAY,SAAS,mBAAmB,KAAK,CAAC,YAAY,SAAS,aAAa,GAAG;AAC7F,aAAS,KAAK;AAAA,MACZ,OAAO;AAAA,MACP,MAAM;AAAA,MACN,SAAS;AAAA,MACT,aAAa;AAAA,IACf,CAAC;AAAA,EACH,OAAO;AACL,aAAS,KAAK;AAAA,MACZ,OAAO;AAAA,MACP,MAAM;AAAA,MACN,SAAS;AAAA,IACX,CAAC;AAAA,EACH;AAEA,QAAM,mBAAmB,cAAc,kBAAkB,QAAQ;AACjE,QAAM,kBAAkB,cAAc,kBAAkB,eAAe,EAAE,KAAK,GAAG,EAAE,YAAY;AAC/F,MAAI,CAAC,oBAAoB,CAAC,iBAAiB,SAAS,sBAAsB,GAAG;AAC3E,aAAS,KAAK;AAAA,MACZ,OAAO;AAAA,MACP,MAAM;AAAA,MACN,SAAS;AAAA,MACT,aAAa;AAAA,IACf,CAAC;AAAA,EACH,WACE,CAAC,gBAAgB,SAAS,OAAO,KACjC,CAAC,gBAAgB,SAAS,UAAU,KACpC,CAAC,gBAAgB,SAAS,WAAW,KACrC,CAAC,gBAAgB,SAAS,iBAAiB,KAC3C,CAAC,gBAAgB,SAAS,UAAU,KACpC,CAAC,gBAAgB,SAAS,WAAW,KACrC,CAAC,gBAAgB,SAAS,QAAQ,GAClC;AACA,aAAS,KAAK;AAAA,MACZ,OAAO;AAAA,MACP,MAAM;AAAA,MACN,SAAS;AAAA,MACT,aACE;AAAA,IACJ,CAAC;AAAA,EACH,OAAO;AACL,aAAS,KAAK;AAAA,MACZ,OAAO;AAAA,MACP,MAAM;AAAA,MACN,SACE;AAAA,IACJ,CAAC;AAAA,EACH;AAEA,QAAM,oBAAoB,OAAO,KAAK,CAAC,UAAU,MAAM,OAAO,qBAAqB;AACnF,QAAM,sBAAsB,cAAc,mBAAmB,UAAU;AACvE,QAAM,kBAAkB,cAAc,mBAAmB,MAAM;AAC/D,MACE,CAAC,qBACD,CAAC,oBAAoB,SAAS,aAAa,KAC3C,CAAC,oBAAoB,SAAS,mBAAmB,KACjD,CAAC,gBAAgB,SAAS,uBAAuB,KACjD,CAAC,gBAAgB,SAAS,wBAAwB,GAClD;AACA,aAAS,KAAK;AAAA,MACZ,OAAO;AAAA,MACP,MAAM;AAAA,MACN,SAAS;AAAA,MACT,aACE;AAAA,IACJ,CAAC;AAAA,EACH;AAEA,QAAM,oBAAoB,cAAc,uBAAuB,QAAQ;AACvE,QAAM,mBAAmB,cAAc,uBAAuB,eAAe,EAAE,KAAK,GAAG,EAAE,YAAY;AACrG,MAAI,CAAC,yBAAyB,CAAC,kBAAkB,SAAS,qBAAqB,GAAG;AAChF,aAAS,KAAK;AAAA,MACZ,OAAO;AAAA,MACP,MAAM;AAAA,MACN,SAAS;AAAA,MACT,aAAa;AAAA,IACf,CAAC;AAAA,EACH,WACE,CAAC,iBAAiB,SAAS,WAAW,KACtC,CAAC,iBAAiB,SAAS,UAAU,KACrC,CAAC,iBAAiB,SAAS,mBAAmB,KAC9C,CAAC,iBAAiB,SAAS,OAAO,KAClC,CAAC,iBAAiB,SAAS,YAAY,KACvC,CAAC,iBAAiB,SAAS,OAAO,KAClC,CAAC,iBAAiB,SAAS,YAAY,GACvC;AACA,aAAS,KAAK;AAAA,MACZ,OAAO;AAAA,MACP,MAAM;AAAA,MACN,SAAS;AAAA,MACT,aACE;AAAA,IACJ,CAAC;AAAA,EACH,OAAO;AACL,aAAS,KAAK;AAAA,MACZ,OAAO;AAAA,MACP,MAAM;AAAA,MACN,SAAS;AAAA,IACX,CAAC;AAAA,EACH;AAEA,QAAM,eAAe,cAAc,OAAO,YAAY,EAAE,KAAK,GAAG,EAAE,YAAY;AAC9E,MAAI,CAAC,YAAY,cAAc,CAAC,YAAY,QAAQ,WAAW,UAAU,CAAC,GAAG;AAC3E,aAAS,KAAK;AAAA,MACZ,OAAO;AAAA,MACP,MAAM;AAAA,MACN,SAAS;AAAA,MACT,aAAa;AAAA,IACf,CAAC;AAAA,EACH,OAAO;AACL,aAAS,KAAK;AAAA,MACZ,OAAO;AAAA,MACP,MAAM;AAAA,MACN,SAAS;AAAA,IACX,CAAC;AAAA,EACH;AACF;AAEA,SAAS,gCAAgC,KAAa,UAAgC;AACpF,QAAM,eAAeF,OAAK,KAAK,mBAAmB;AAClD,MAAI,CAACC,aAAW,YAAY,EAAG;AAE/B,QAAM,eAAe,mBAAmB,YAAY,EAAE,OAAO,CAAC,SAAS,KAAK,SAAS,OAAO,KAAK,CAAC,QAAQ,KAAK,IAAI,CAAC;AACpH,MAAI,aAAa,WAAW,EAAG;AAE/B,MAAI,eAAe;AACnB,aAAW,eAAe,cAAc;AACtC,UAAM,cAAc,GAAG,mBAAmB,IAAI,WAAW;AACzD,QAAI;AACF,YAAM,SAAS,KAAK,MAAMC,cAAaF,OAAK,cAAc,WAAW,GAAG,MAAM,CAAC;AAC/E,YAAM,iBAAiB,uBAAuB,UAAU,MAAM;AAC9D,UAAI,CAAC,eAAe,SAAS;AAC3B,wBAAgB;AAChB,iBAAS,KAAK;AAAA,UACZ,OAAO;AAAA,UACP,MAAM;AAAA,UACN,SAAS,GAAG,WAAW;AAAA,UACvB,aAAa,mDAAmD,qBAAqB,eAAe,KAAK,EAAE,CAAC,CAAC;AAAA,QAC/G,CAAC;AAAA,MACH;AAAA,IACF,QAAQ;AACN,sBAAgB;AAChB,eAAS,KAAK;AAAA,QACZ,OAAO;AAAA,QACP,MAAM;AAAA,QACN,SAAS,GAAG,WAAW;AAAA,QACvB,aAAa;AAAA,MACf,CAAC;AAAA,IACH;AAAA,EACF;AAEA,MAAI,iBAAiB,GAAG;AACtB,aAAS,KAAK;AAAA,MACZ,OAAO;AAAA,MACP,MAAM;AAAA,MACN,SAAS,kEAAkE,aAAa,MAAM;AAAA,IAChG,CAAC;AAAA,EACH;AACF;AAEA,SAAS,kBAAkB,KAAa,UAA0B,yBAAyB,sBAA4B;AACrH,aAAW,cAAc,uBAAuB;AAC9C,UAAM,aAAaA,OAAK,KAAK,wBAAwB,UAAU;AAC/D,QAAI,CAACC,aAAW,UAAU,GAAG;AAC3B,eAAS,KAAK;AAAA,QACZ,OAAO;AAAA,QACP,MAAM;AAAA,QACN,SAAS,GAAG,sBAAsB,IAAI,UAAU;AAAA,QAChD,aAAa;AAAA,MACf,CAAC;AACD;AAAA,IACF;AAEA,QAAI;AACF,YAAM,SAAS,KAAK,MAAMC,cAAa,YAAY,MAAM,CAAC;AAC1D,UAAI,CAAC,SAAS,MAAM,KAAK,OAAO,OAAO,YAAY,YAAY,CAAC,SAAS,OAAO,UAAU,GAAG;AAC3F,cAAM,IAAI,MAAM,8CAA8C;AAAA,MAChE;AAEA,eAAS,KAAK;AAAA,QACZ,OAAO;AAAA,QACP,MAAM;AAAA,QACN,SAAS,GAAG,sBAAsB,IAAI,UAAU;AAAA,MAClD,CAAC;AAAA,IACH,QAAQ;AACN,eAAS,KAAK;AAAA,QACZ,OAAO;AAAA,QACP,MAAM;AAAA,QACN,SAAS,GAAG,sBAAsB,IAAI,UAAU;AAAA,QAChD,aAAa;AAAA,MACf,CAAC;AAAA,IACH;AAAA,EACF;AACF;AAEA,SAAS,uBAAuB,KAAa,UAAgC;AAC3E,QAAM,cAAcF,OAAK,KAAK,YAAY;AAC1C,MAAI,CAACC,aAAW,WAAW,GAAG;AAC5B,aAAS,KAAK;AAAA,MACZ,OAAO;AAAA,MACP,MAAM;AAAA,MACN,SAAS,GAAG,YAAY;AAAA,MACxB,aAAa;AAAA,IACf,CAAC;AAAA,EACH,OAAO;AACL,QAAI;AACF,YAAM,SAAS,KAAK,MAAMC,cAAa,aAAa,MAAM,CAAC;AAC3D,YAAM,SAAS,uBAAuB,UAAU,MAAM;AACtD,UAAI,CAAC,OAAO,SAAS;AACnB,iBAAS,KAAK;AAAA,UACZ,OAAO;AAAA,UACP,MAAM;AAAA,UACN,SAAS,GAAG,YAAY;AAAA,UACxB,aAAa,6EAA6E,qBAAqB,OAAO,KAAK,EAAE,CAAC,CAAC;AAAA,QACjI,CAAC;AAAA,MACH,OAAO;AACL,cAAM,mBAAmB;AAAA,UACvB,CAAC,mBAAmB,OAAO,KAAK,cAAc;AAAA,UAC9C,CAAC,oBAAoB,OAAO,KAAK,eAAe;AAAA,UAChD,CAAC,cAAc,OAAO,KAAK,SAAS;AAAA,UACpC,CAAC,gBAAgB,OAAO,KAAK,WAAW;AAAA,QAC1C,EAAE,OAAO,CAAC,CAAC,EAAE,KAAK,MAAM,OAAO,UAAU,YAAY,CAAC,MAAM,KAAK,CAAC;AAClE,YAAI,iBAAiB,SAAS,KAAK,OAAO,KAAK,iBAAiB,WAAW,GAAG;AAC5E,mBAAS,KAAK;AAAA,YACZ,OAAO;AAAA,YACP,MAAM;AAAA,YACN,SAAS,GAAG,YAAY;AAAA,YACxB,aACE;AAAA,UACJ,CAAC;AAAA,QACH,OAAO;AACL,mBAAS,KAAK;AAAA,YACZ,OAAO;AAAA,YACP,MAAM;AAAA,YACN,SAAS;AAAA,UACX,CAAC;AAAA,QACH;AACA,YAAI,sBAAsB,GAAG,GAAG;AAC9B,gBAAM,WAAW,iBAAiB,GAAG;AACrC,cAAI,CAAC,SAAS,eAAe;AAC3B,qBAAS,KAAK;AAAA,cACZ,OAAO;AAAA,cACP,MAAM;AAAA,cACN,SAAS,4BAA4B,SAAS,OAAO,sBAAsB,SAAS,KAAK;AAAA,cACzF,aAAa;AAAA,YACf,CAAC;AAAA,UACH,OAAO;AACL,qBAAS,KAAK;AAAA,cACZ,OAAO;AAAA,cACP,MAAM;AAAA,cACN,SAAS;AAAA,YACX,CAAC;AAAA,UACH;AAAA,QACF,WAAW,iBAAiB,WAAW,KAAK,OAAO,KAAK,iBAAiB,SAAS,GAAG;AACnF,mBAAS,KAAK;AAAA,YACZ,OAAO;AAAA,YACP,MAAM;AAAA,YACN,SAAS;AAAA,YACT,aAAa;AAAA,UACf,CAAC;AAAA,QACH;AAAA,MACF;AAAA,IACF,QAAQ;AACN,eAAS,KAAK;AAAA,QACZ,OAAO;AAAA,QACP,MAAM;AAAA,QACN,SAAS,GAAG,YAAY;AAAA,QACxB,aAAa;AAAA,MACf,CAAC;AAAA,IACH;AAAA,EACF;AAEA,QAAM,gBAAgBF,OAAK,KAAK,UAAU;AAC1C,MAAIC,aAAW,WAAW,KAAK,CAACA,aAAW,aAAa,GAAG;AACzD,aAAS,KAAK;AAAA,MACZ,OAAO;AAAA,MACP,MAAM;AAAA,MACN,SAAS,GAAG,UAAU;AAAA,MACtB,aAAa;AAAA,IACf,CAAC;AAAA,EACH;AAEA,aAAW,gBAAgB,CAAC,oBAAoB,gBAAgB,GAAG;AACjE,UAAM,OAAOD,OAAK,KAAK,YAAY;AACnC,QAAI,CAACC,aAAW,IAAI,EAAG;AACvB,QAAI;AACF,YAAM,SAAS,KAAK,MAAMC,cAAa,MAAM,MAAM,CAAC;AACpD,YAAM,SAAS,wBAAwB,UAAU,MAAM;AACvD,UAAI,CAAC,OAAO,SAAS;AACnB,iBAAS,KAAK;AAAA,UACZ,OAAO;AAAA,UACP,MAAM;AAAA,UACN,SAAS,GAAG,YAAY;AAAA,UACxB,aAAa,kFAAkF,qBAAqB,OAAO,KAAK,EAAE,CAAC,CAAC;AAAA,QACtI,CAAC;AAAA,MACH,WAAW,OAAO,KAAK,MAAM,KAAK,CAAC,SAAS,KAAK,WAAW,QAAQ,GAAG;AACrE,iBAAS,KAAK;AAAA,UACZ,OAAO;AAAA,UACP,MAAM;AAAA,UACN,SAAS,GAAG,YAAY;AAAA,QAC1B,CAAC;AAAA,MACH;AAAA,IACF,QAAQ;AACN,eAAS,KAAK;AAAA,QACZ,OAAO;AAAA,QACP,MAAM;AAAA,QACN,SAAS,GAAG,YAAY;AAAA,QACxB,aAAa;AAAA,MACf,CAAC;AAAA,IACH;AAAA,EACF;AAEA,QAAM,mBAAmBF,OAAK,KAAK,kBAAkB;AACrD,MAAIC,aAAW,gBAAgB,GAAG;AAChC,UAAM,aAAaC,cAAa,kBAAkB,MAAM;AACxD,QAAI,qBAAqB,UAAU,GAAG;AACpC,eAAS,KAAK;AAAA,QACZ,OAAO;AAAA,QACP,MAAM;AAAA,QACN,SAAS,GAAG,kBAAkB;AAAA,QAC9B,aAAa;AAAA,MACf,CAAC;AAAA,IACH,WAAW,CAAC,WAAW,SAAS,mBAAmB,KAAK,CAAC,WAAW,SAAS,cAAc,GAAG;AAC5F,eAAS,KAAK;AAAA,QACZ,OAAO;AAAA,QACP,MAAM;AAAA,QACN,SAAS,GAAG,kBAAkB;AAAA,QAC9B,aAAa;AAAA,MACf,CAAC;AAAA,IACH,OAAO;AACL,eAAS,KAAK;AAAA,QACZ,OAAO;AAAA,QACP,MAAM;AAAA,QACN,SAAS,GAAG,kBAAkB;AAAA,MAChC,CAAC;AAAA,IACH;AAAA,EACF;AAEA,QAAM,eAAeF,OAAK,KAAK,mBAAmB;AAClD,MAAI,CAACC,aAAW,YAAY,EAAG;AAE/B,QAAM,QAAQ,mBAAmB,YAAY;AAC7C,QAAM,qBAAqB,MAAM,OAAO,CAAC,SAAS,sBAAsB,KAAK,IAAI,CAAC;AAClF,aAAW,eAAe,oBAAoB;AAC5C,UAAM,wBAAwB,YAAY,QAAQ,OAAO,GAAG;AAC5D,UAAM,kBAAkB,GAAG,mBAAmB,IAAI,qBAAqB;AACvE,UAAME,cAAa,YAAY,QAAQ,uBAAuB,EAAE;AAChE,UAAM,uBAAuBA,YAAW,QAAQ,OAAO,GAAG;AAC1D,UAAM,iBAAiB,GAAG,mBAAmB,IAAI,oBAAoB;AACrE,UAAM,iBAAiBH,OAAK,cAAcG,WAAU;AAEpD,QAAI,gBAA2E;AAC/E,QAAI;AACF,sBAAgB,sBAAsB,UAAU,KAAK,MAAMD,cAAaF,OAAK,gBAAgB,cAAc,GAAG,MAAM,CAAC,CAAY;AACjI,UAAI,CAAC,cAAc,SAAS;AAC1B,iBAAS,KAAK;AAAA,UACZ,OAAO;AAAA,UACP,MAAM;AAAA,UACN,SAAS,GAAG,eAAe;AAAA,UAC3B,aAAa,sCAAsC,qBAAqB,cAAc,KAAK,EAAE,CAAC,CAAC;AAAA,QACjG,CAAC;AACD;AAAA,MACF;AAAA,IACF,QAAQ;AACN,eAAS,KAAK;AAAA,QACZ,OAAO;AAAA,QACP,MAAM;AAAA,QACN,SAAS,GAAG,eAAe;AAAA,QAC3B,aAAa;AAAA,MACf,CAAC;AACD;AAAA,IACF;AAEA,UAAMI,cAAaJ,OAAK,gBAAgB,cAAc;AACtD,QAAI,CAACC,aAAWG,WAAU,GAAG;AAC3B,eAAS,KAAK;AAAA,QACZ,OAAO;AAAA,QACP,MAAM;AAAA,QACN,SAAS,GAAG,cAAc;AAAA,QAC1B,aAAa;AAAA,MACf,CAAC;AACD;AAAA,IACF;AAEA,UAAM,YAAYF,cAAaE,aAAY,MAAM;AACjD,QAAI,qBAAqB,SAAS,GAAG;AACnC,eAAS,KAAK;AAAA,QACZ,OAAO;AAAA,QACP,MAAM;AAAA,QACN,SAAS,GAAG,cAAc;AAAA,QAC1B,aAAa;AAAA,MACf,CAAC;AAAA,IACH;AAEA,UAAM,aAAa,UAAU,MAAM,OAAO,EAAE,OAAO,CAACC,UAASA,MAAK,KAAK,EAAE,SAAS,CAAC;AACnF,QAAI,cAAc;AAClB,QAAI,oBAAoB;AACxB,eAAW,CAAC,OAAOA,KAAI,KAAK,WAAW,QAAQ,GAAG;AAChD,UAAI;AACF,cAAM,SAAS,qBAAqB,UAAU,KAAK,MAAMA,KAAI,CAAY;AACzE,YAAI,CAAC,OAAO,SAAS;AACnB,mBAAS,KAAK;AAAA,YACZ,OAAO;AAAA,YACP,MAAM;AAAA,YACN,SAAS,GAAG,cAAc,SAAS,QAAQ,CAAC;AAAA,YAC5C,aAAa,mCAAmC,qBAAqB,OAAO,KAAK,EAAE,CAAC,CAAC;AAAA,UACvF,CAAC;AAAA,QACH,OAAO;AACL,yBAAe;AACf,cAAI,OAAO,KAAK,SAAS,wBAAyB,sBAAqB;AAAA,QACzE;AAAA,MACF,QAAQ;AACN,iBAAS,KAAK;AAAA,UACZ,OAAO;AAAA,UACP,MAAM;AAAA,UACN,SAAS,GAAG,cAAc,SAAS,QAAQ,CAAC;AAAA,UAC5C,aAAa;AAAA,QACf,CAAC;AAAA,MACH;AAAA,IACF;AAEA,QAAI,CAACJ,aAAWD,OAAK,gBAAgB,UAAU,CAAC,KAAK,CAACC,aAAWD,OAAK,gBAAgB,eAAe,CAAC,GAAG;AACvG,eAAS,KAAK;AAAA,QACZ,OAAO;AAAA,QACP,MAAM;AAAA,QACN,SAAS,GAAGG,WAAU;AAAA,QACtB,aAAa;AAAA,MACf,CAAC;AAAA,IACH,OAAO;AACL,YAAM,YAAYD,cAAaF,OAAK,gBAAgB,UAAU,GAAG,MAAM;AACvE,YAAM,iBAAiBE,cAAaF,OAAK,gBAAgB,eAAe,GAAG,MAAM;AACjF,UAAI,qBAAqB,SAAS,KAAK,qBAAqB,cAAc,GAAG;AAC3E,iBAAS,KAAK;AAAA,UACZ,OAAO;AAAA,UACP,MAAM;AAAA,UACN,SAAS,GAAGG,WAAU;AAAA,UACtB,aAAa;AAAA,QACf,CAAC;AAAA,MACH;AACA,UAAI,SAASC,WAAU,EAAE,UAAU,SAASJ,OAAK,gBAAgB,UAAU,CAAC,EAAE,SAAS;AACrF,iBAAS,KAAK;AAAA,UACZ,OAAO;AAAA,UACP,MAAM;AAAA,UACN,SAAS,GAAGG,WAAU;AAAA,UACtB,aAAa;AAAA,QACf,CAAC;AAAA,MACH;AAAA,IACF;AAEA,UAAMG,WAAU,cAAc;AAC9B,QAAIA,SAAQ,WAAW,YAAY;AACjC,YAAM,iBAAiBA,SAAQ,gBAAgB,OAAO,CAAC,WAAW,OAAO,WAAW,aAAa,OAAO,WAAW,SAAS;AAC5H,UAAI,eAAe,SAAS,KAAK,sBAAsB,GAAG;AACxD,iBAAS,KAAK;AAAA,UACZ,OAAO;AAAA,UACP,MAAM;AAAA,UACN,SAAS,GAAG,eAAe;AAAA,UAC3B,aAAa;AAAA,QACf,CAAC;AAAA,MACH;AAAA,IACF;AAEA,QAAI,cAAc,GAAG;AACnB,eAAS,KAAK;AAAA,QACZ,OAAO;AAAA,QACP,MAAM;AAAA,QACN,SAAS,GAAGH,WAAU,QAAQ,WAAW;AAAA,MAC3C,CAAC;AAAA,IACH;AAAA,EACF;AACF;AAEA,SAAS,sBAAsB,KAAa,UAAgC;AAC1E,QAAM,aAAa,QAAQ,KAAK,YAAY;AAC5C,MAAI,CAAC,WAAY;AAEjB,MAAI,CAAC,YAAY,YAAY,CAAC,mBAAmB,WAAW,YAAY,QAAQ,UAAU,CAAC,GAAG;AAC5F,aAAS,KAAK;AAAA,MACZ,OAAO;AAAA,MACP,MAAM;AAAA,MACN,SAAS;AAAA,MACT,aAAa;AAAA,IACf,CAAC;AAAA,EACH,OAAO;AACL,aAAS,KAAK;AAAA,MACZ,OAAO;AAAA,MACP,MAAM;AAAA,MACN,SAAS;AAAA,IACX,CAAC;AAAA,EACH;AACF;AAEA,SAAS,4BAA4B,KAAa,UAA0B,0BAA0B,iCAAiC,UAAU,KAAW;AAC1J,QAAM,cAAc,QAAQ,SAAS,uBAAuB;AAC5D,QAAM,cAAcH,OAAK,KAAK,uBAAuB;AAErD,MAAI,CAACC,aAAW,WAAW,GAAG;AAC5B,aAAS,KAAK;AAAA,MACZ,OAAO;AAAA,MACP,MAAM;AAAA,MACN,SAAS,GAAG,uBAAuB;AAAA,MACnC,aAAa;AAAA,IACf,CAAC;AAAA,EACH,OAAO;AACL,aAAS,KAAK;AAAA,MACZ,OAAO;AAAA,MACP,MAAM;AAAA,MACN,SAAS,GAAG,uBAAuB;AAAA,IACrC,CAAC;AAAA,EACH;AAEA,MAAI,CAAC,YAAa;AAElB,MAAI,CAAC,YAAY,aAAa,CAAC,aAAa,qBAAqB,wBAAwB,iBAAiB,kBAAkB,iBAAiB,CAAC,GAAG;AAC/I,aAAS,KAAK;AAAA,MACZ,OAAO;AAAA,MACP,MAAM;AAAA,MACN,SAAS;AAAA,MACT,aACE;AAAA,IACJ,CAAC;AAAA,EACH,OAAO;AACL,aAAS,KAAK;AAAA,MACZ,OAAO;AAAA,MACP,MAAM;AAAA,MACN,SAAS;AAAA,IACX,CAAC;AAAA,EACH;AAEA,MAAI,4BAA4B,aAAa,QAAQ,KAAK,CAACA,aAAWD,OAAK,KAAK,2BAA2B,CAAC,GAAG;AAC7G,aAAS,KAAK;AAAA,MACZ,OAAO;AAAA,MACP,MAAM;AAAA,MACN,SAAS;AAAA,MACT,aAAa;AAAA,IACf,CAAC;AAAA,EACH;AAEA,MAAI,4BAA4B,aAAa,oCAAoC,KAAK,CAACC,aAAWD,OAAK,KAAK,4BAA4B,CAAC,GAAG;AAC1I,aAAS,KAAK;AAAA,MACZ,OAAO;AAAA,MACP,MAAM;AAAA,MACN,SAAS;AAAA,MACT,aAAa;AAAA,IACf,CAAC;AAAA,EACH;AAEA,MAAI,CAAC,YAAY,aAAa,CAAC,mBAAmB,eAAe,oBAAoB,oBAAoB,CAAC,GAAG;AAC3G,aAAS,KAAK;AAAA,MACZ,OAAO;AAAA,MACP,MAAM;AAAA,MACN,SAAS;AAAA,MACT,aAAa;AAAA,IACf,CAAC;AAAA,EACH;AAEA,MAAI,WAAW,KAAK,WAAW,GAAG;AAChC,aAAS,KAAK;AAAA,MACZ,OAAO;AAAA,MACP,MAAM;AAAA,MACN,SAAS;AAAA,MACT,aAAa;AAAA,IACf,CAAC;AAAA,EACH;AACF;AAEA,SAAS,wBAAwB,KAAa,UAA0B,sBAAsB,8BAA8B,UAAU,KAAW;AAC/I,QAAM,kBAAkB,QAAQ,SAAS,kBAAkB;AAC3D,MAAI,CAAC,iBAAiB;AACpB,aAAS,KAAK;AAAA,MACZ,OAAO;AAAA,MACP,MAAM;AAAA,MACN,SAAS;AAAA,MACT,aAAa;AAAA,IACf,CAAC;AAAA,EACH,WAAW,CAAC,YAAY,iBAAiB,CAAC,iBAAiB,SAAS,WAAW,SAAS,eAAe,UAAU,kBAAkB,aAAa,CAAC,GAAG;AAClJ,aAAS,KAAK;AAAA,MACZ,OAAO;AAAA,MACP,MAAM;AAAA,MACN,SAAS;AAAA,MACT,aAAa;AAAA,IACf,CAAC;AAAA,EACH,OAAO;AACL,aAAS,KAAK;AAAA,MACZ,OAAO;AAAA,MACP,MAAM;AAAA,MACN,SAAS;AAAA,IACX,CAAC;AAAA,EACH;AAEA,QAAM,cAAcA,OAAK,KAAK,mBAAmB;AACjD,MAAI,CAACC,aAAW,WAAW,GAAG;AAC5B,aAAS,KAAK;AAAA,MACZ,OAAO;AAAA,MACP,MAAM;AAAA,MACN,SAAS,GAAG,mBAAmB;AAAA,MAC/B,aAAa;AAAA,IACf,CAAC;AACD;AAAA,EACF;AAEA,MAAI;AACJ,MAAI;AACF,cAAU,KAAK,MAAMC,cAAa,aAAa,MAAM,CAAC;AAAA,EACxD,QAAQ;AACN,aAAS,KAAK;AAAA,MACZ,OAAO;AAAA,MACP,MAAM;AAAA,MACN,SAAS,GAAG,mBAAmB;AAAA,MAC/B,aAAa;AAAA,IACf,CAAC;AACD;AAAA,EACF;AAEA,QAAM,iBAAiB,qBAAqB,UAAU,OAAO;AAC7D,MAAI,CAAC,eAAe,SAAS;AAC3B,aAAS,KAAK;AAAA,MACZ,OAAO;AAAA,MACP,MAAM;AAAA,MACN,SAAS,GAAG,mBAAmB;AAAA,MAC/B,aAAa,iFAAiF,qBAAqB,eAAe,KAAK,EAAE,CAAC,CAAC;AAAA,IAC7I,CAAC;AACD;AAAA,EACF;AAEA,WAAS,KAAK;AAAA,IACZ,OAAO;AAAA,IACP,MAAM;AAAA,IACN,SAAS;AAAA,EACX,CAAC;AAED,QAAM,aAAa,IAAI,IAAI,eAAe,KAAK,SAAS,IAAI,CAAC,YAAY,QAAQ,EAAE,CAAC;AACpF,QAAM,gBAAgB,mBAAmB,OAAO,CAAC,YAAY,CAAC,eAAe,KAAK,YAAY,KAAK,CAAC,UAAU,MAAM,YAAY,OAAO,CAAC;AACxI,QAAM,iBAAiB,eAAe,KAAK,YAAY;AAAA,IACrD,CAAC,UAAU,CAAC,WAAW,IAAI,MAAM,SAAS,MAAM,MAAM,sBAAsB,CAAC,WAAW,IAAI,MAAM,mBAAmB,IAAI;AAAA,EAC3H;AAEA,MAAI,cAAc,SAAS,GAAG;AAC5B,aAAS,KAAK;AAAA,MACZ,OAAO;AAAA,MACP,MAAM;AAAA,MACN,SAAS,kDAAkD,cAAc,KAAK,IAAI,CAAC;AAAA,MACnF,aAAa;AAAA,IACf,CAAC;AAAA,EACH,OAAO;AACL,aAAS,KAAK;AAAA,MACZ,OAAO;AAAA,MACP,MAAM;AAAA,MACN,SAAS;AAAA,IACX,CAAC;AAAA,EACH;AAEA,MAAI,eAAe,SAAS,GAAG;AAC7B,aAAS,KAAK;AAAA,MACZ,OAAO;AAAA,MACP,MAAM;AAAA,MACN,SAAS;AAAA,MACT,aAAa;AAAA,IACf,CAAC;AAAA,EACH;AACF;AAEA,SAAS,wBAAwB,KAAa,UAAgC;AAC5E,QAAM,WAAW,aAAa,GAAG;AACjC,MAAI,CAAC,SAAU;AACf,QAAM,YAAY,cAAc,GAAG;AAEnC,aAAW,OAAO,WAAW;AAC3B,UAAM,aAAaF,OAAK,KAAK,GAAG;AAChC,QAAI,CAACC,aAAW,UAAU,EAAG;AAE7B,UAAM,kBAAkB,aAAa,SAAS,OAAO,GAAG;AACxD,QAAI,CAAC,gBAAiB;AAEtB,UAAM,aAAa,OAAOC,cAAa,YAAY,MAAM,CAAC;AAC1D,UAAM,sBAAsB,OAAO,eAAe;AAClD,UAAM,wBAAwB,SAAS,iBAAiB,GAAG;AAC3D,UAAM,WAAW,UAAU,GAAG;AAE9B,QAAI,CAAC,uBAAuB;AAC1B,eAAS,KAAK;AAAA,QACZ,OAAO;AAAA,QACP,MAAM;AAAA,QACN,SAAS,GAAG,GAAG;AAAA,QACf,aAAa;AAAA,MACf,CAAC;AACD;AAAA,IACF;AAEA,QAAI,0BAA0B,uBAAuB,eAAe,qBAAqB;AACvF,eAAS,KAAK;AAAA,QACZ,OAAO;AAAA,QACP,MAAM;AAAA,QACN,SAAS,GAAG,GAAG;AAAA,MACjB,CAAC;AACD;AAAA,IACF;AAEA,QAAI,0BAA0B,uBAAuB,eAAe,uBAAuB;AACzF,eAAS,KAAK;AAAA,QACZ,OAAO;AAAA,QACP,MAAM;AAAA,QACN,SAAS,GAAG,GAAG;AAAA,QACf,aAAa;AAAA,MACf,CAAC;AACD;AAAA,IACF;AAEA,QAAI,eAAe,qBAAqB;AACtC,eAAS,KAAK;AAAA,QACZ,OAAO;AAAA,QACP,MAAM;AAAA,QACN,SAAS,GAAG,GAAG;AAAA,MACjB,CAAC;AACD;AAAA,IACF;AAEA,QAAI,0BAA0B,qBAAqB;AACjD,UAAI,UAAU;AACZ,iBAAS,KAAK;AAAA,UACZ,OAAO;AAAA,UACP,MAAM;AAAA,UACN,SAAS,GAAG,GAAG;AAAA,UACf,aAAa,SAAS,aAAa,oBAAoB,SAAS,UAAU,MAAM;AAAA,QAClF,CAAC;AACD;AAAA,MACF;AAEA,eAAS,KAAK;AAAA,QACZ,OAAO;AAAA,QACP,MAAM;AAAA,QACN,SAAS,GAAG,GAAG;AAAA,QACf,aAAa;AAAA,MACf,CAAC;AACD;AAAA,IACF;AAEA,QAAI,UAAU;AACZ,eAAS,KAAK;AAAA,QACZ,OAAO;AAAA,QACP,MAAM;AAAA,QACN,SAAS,GAAG,GAAG;AAAA,QACf,aAAa;AAAA,MACf,CAAC;AACD;AAAA,IACF;AAEA,aAAS,KAAK;AAAA,MACZ,OAAO;AAAA,MACP,MAAM;AAAA,MACN,SAAS,GAAG,GAAG;AAAA,MACf,aAAa;AAAA,IACf,CAAC;AAAA,EACH;AACF;AAEA,SAAS,uBAAuB,KAAqB;AACnD,QAAM,aAAa,mBAAmB,GAAG,EAAE,OAAO,CAAC,SAAS;AAC1D,UAAM,aAAa,KAAK,QAAQ,OAAO,GAAG;AAC1C,WACE,kEAAkE,KAAK,UAAU,KACjF,8DAA8D,KAAK,UAAU;AAAA,EAEjF,CAAC;AAED,SAAO,WACJ,MAAM,GAAG,EAAE,EACX,IAAI,CAAC,SAAS,QAAQ,KAAK,IAAI,CAAC,EAChC,KAAK,IAAI;AACd;AAEA,SAAS,oBAAoB,KAAa,UAAgC;AACxE,QAAM,aAAa,QAAQ,KAAK,gBAAgB;AAChD,QAAM,YAAY,QAAQ,KAAK,WAAW;AAE1C,MAAI,CAAC,YAAY,YAAY,CAAC,cAAc,YAAY,cAAc,CAAC,GAAG;AACxE,aAAS,KAAK;AAAA,MACZ,OAAO;AAAA,MACP,MAAM;AAAA,MACN,SAAS;AAAA,MACT,aAAa;AAAA,IACf,CAAC;AAAA,EACH;AAEA,MAAI,CAAC,YAAY,YAAY,CAAC,gBAAgB,SAAS,cAAc,WAAW,QAAQ,CAAC,GAAG;AAC1F,aAAS,KAAK;AAAA,MACZ,OAAO;AAAA,MACP,MAAM;AAAA,MACN,SAAS;AAAA,MACT,aAAa;AAAA,IACf,CAAC;AAAA,EACH;AAEA,MAAI,CAAC,YAAY,YAAY,CAAC,WAAW,SAAS,SAAS,YAAY,WAAW,QAAQ,CAAC,GAAG;AAC5F,aAAS,KAAK;AAAA,MACZ,OAAO;AAAA,MACP,MAAM;AAAA,MACN,SAAS;AAAA,MACT,aAAa;AAAA,IACf,CAAC;AAAA,EACH;AAEA,MAAI,CAAC,YAAY,YAAY,CAAC,gBAAgB,eAAe,YAAY,CAAC,GAAG;AAC3E,aAAS,KAAK;AAAA,MACZ,OAAO;AAAA,MACP,MAAM;AAAA,MACN,SAAS;AAAA,MACT,aAAa;AAAA,IACf,CAAC;AAAA,EACH;AAEA,MAAI,CAAC,YAAY,WAAW,CAAC,SAAS,WAAW,cAAc,sBAAsB,eAAe,CAAC,GAAG;AACtG,aAAS,KAAK;AAAA,MACZ,OAAO;AAAA,MACP,MAAM;AAAA,MACN,SAAS;AAAA,MACT,aACE;AAAA,IACJ,CAAC;AAAA,EACH;AAEA,MAAI,CAAC,YAAY,WAAW,CAAC,iBAAiB,kBAAkB,mBAAmB,UAAU,CAAC,GAAG;AAC/F,aAAS,KAAK;AAAA,MACZ,OAAO;AAAA,MACP,MAAM;AAAA,MACN,SAAS;AAAA,MACT,aACE;AAAA,IACJ,CAAC;AAAA,EACH;AAEA,MACE,CAAC,YAAY,WAAW,CAAC,6BAA6B,sBAAsB,uBAAuB,oBAAoB,eAAe,iBAAiB,CAAC,GACxJ;AACA,aAAS,KAAK;AAAA,MACZ,OAAO;AAAA,MACP,MAAM;AAAA,MACN,SAAS;AAAA,MACT,aACE;AAAA,IACJ,CAAC;AAAA,EACH;AAEA,MAAI,CAAC,YAAY,WAAW,CAAC,6BAA6B,iBAAiB,uBAAuB,iBAAiB,aAAa,CAAC,GAAG;AAClI,aAAS,KAAK;AAAA,MACZ,OAAO;AAAA,MACP,MAAM;AAAA,MACN,SAAS;AAAA,MACT,aACE;AAAA,IACJ,CAAC;AAAA,EACH;AAEA,MAAI,CAAC,YAAY,YAAY,CAAC,aAAa,iBAAiB,oBAAoB,CAAC,GAAG;AAClF,aAAS,KAAK;AAAA,MACZ,OAAO;AAAA,MACP,MAAM;AAAA,MACN,SAAS;AAAA,MACT,aAAa;AAAA,IACf,CAAC;AAAA,EACH;AAEA,QAAM,cAAc,uBAAuB,GAAG;AAC9C,MAAI,eAAe,YAAY,aAAa,CAAC,eAAe,eAAe,WAAW,cAAc,eAAe,iBAAiB,KAAK,CAAC,GAAG;AAC3I,aAAS,KAAK;AAAA,MACZ,OAAO;AAAA,MACP,MAAM;AAAA,MACN,SAAS;AAAA,MACT,aAAa;AAAA,IACf,CAAC;AAAA,EACH;AACF;AAEA,SAAS,uBAAuB,KAAa,UAAgC;AAC3E,QAAM,eAAe,QAAQ,KAAK,kBAAkB;AACpD,MAAI,CAAC,aAAc;AAEnB,MAAI,CAAC,YAAY,cAAc,CAAC,YAAY,UAAU,iBAAiB,UAAU,CAAC,GAAG;AACnF,aAAS,KAAK;AAAA,MACZ,OAAO;AAAA,MACP,MAAM;AAAA,MACN,SAAS;AAAA,MACT,aAAa;AAAA,IACf,CAAC;AAAA,EACH;AAEA,MACE,CAAC,YAAY,cAAc;AAAA,IACzB;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF,CAAC,GACD;AACA,aAAS,KAAK;AAAA,MACZ,OAAO;AAAA,MACP,MAAM;AAAA,MACN,SAAS;AAAA,MACT,aAAa;AAAA,IACf,CAAC;AAAA,EACH,OAAO;AACL,aAAS,KAAK;AAAA,MACZ,OAAO;AAAA,MACP,MAAM;AAAA,MACN,SAAS;AAAA,IACX,CAAC;AAAA,EACH;AACF;AAEA,SAAS,mBAAmB,KAAa,UAAgC;AACvE,QAAM,aAAa,QAAQ,KAAK,YAAY;AAC5C,MAAI,CAAC,WAAY;AAEjB,MAAI,CAAC,YAAY,YAAY,CAAC,kBAAkB,oBAAoB,yBAAyB,YAAY,eAAe,CAAC,GAAG;AAC1H,aAAS,KAAK;AAAA,MACZ,OAAO;AAAA,MACP,MAAM;AAAA,MACN,SAAS;AAAA,MACT,aACE;AAAA,IACJ,CAAC;AAAA,EACH,WAAW,CAAC,YAAY,YAAY,CAAC,WAAW,WAAW,YAAY,aAAa,WAAW,CAAC,GAAG;AACjG,aAAS,KAAK;AAAA,MACZ,OAAO;AAAA,MACP,MAAM;AAAA,MACN,SAAS;AAAA,MACT,aAAa;AAAA,IACf,CAAC;AAAA,EACH,OAAO;AACL,aAAS,KAAK;AAAA,MACZ,OAAO;AAAA,MACP,MAAM;AAAA,MACN,SAAS;AAAA,IACX,CAAC;AAAA,EACH;AACF;AAEA,IAAM,4BAA4B,CAAC,YAAY,sBAAsB,kBAAkB,yBAAyB,sBAAsB,sBAAsB;AAE5J,IAAM,gBAAgB;AAAA,EACpB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;AAEA,SAAS,2BAA2B,KAAa,UAAgC;AAC/E,QAAM,kBAAkB,cAAc,OAAO,CAAC,QAAQ;AACpD,UAAM,OAAO,QAAQ,KAAK,GAAG;AAC7B,WAAO,QAAQ,0BAA0B,KAAK,CAAC,YAAY,QAAQ,KAAK,IAAI,CAAC;AAAA,EAC/E,CAAC;AAED,MAAI,gBAAgB,SAAS,GAAG;AAC9B,aAAS,KAAK;AAAA,MACZ,OAAO;AAAA,MACP,MAAM;AAAA,MACN,SAAS,6DAA6D,gBAAgB,KAAK,IAAI,CAAC;AAAA,MAChG,aACE;AAAA,IACJ,CAAC;AAAA,EACH,OAAO;AACL,aAAS,KAAK;AAAA,MACZ,OAAO;AAAA,MACP,MAAM;AAAA,MACN,SAAS;AAAA,IACX,CAAC;AAAA,EACH;AACF;AAEA,SAAS,qBAAqB,KAAa,UAAgC;AACzE,QAAM,eAAe,QAAQ,KAAK,cAAc;AAChD,MAAI,CAAC,aAAc;AAEnB,MAAI,CAAC,YAAY,cAAc,CAAC,uBAAuB,YAAY,QAAQ,WAAW,kBAAkB,SAAS,cAAc,SAAS,YAAY,CAAC,GAAG;AACtJ,aAAS,KAAK;AAAA,MACZ,OAAO;AAAA,MACP,MAAM;AAAA,MACN,SAAS;AAAA,MACT,aACE;AAAA,IACJ,CAAC;AAAA,EACH,OAAO;AACL,aAAS,KAAK;AAAA,MACZ,OAAO;AAAA,MACP,MAAM;AAAA,MACN,SAAS;AAAA,IACX,CAAC;AAAA,EACH;AAEA,MAAI,CAAC,YAAY,cAAc,CAAC,SAAS,kBAAkB,iBAAiB,aAAa,KAAK,CAAC,GAAG;AAChG,aAAS,KAAK;AAAA,MACZ,OAAO;AAAA,MACP,MAAM;AAAA,MACN,SAAS;AAAA,MACT,aAAa;AAAA,IACf,CAAC;AAAA,EACH,OAAO;AACL,aAAS,KAAK;AAAA,MACZ,OAAO;AAAA,MACP,MAAM;AAAA,MACN,SAAS;AAAA,IACX,CAAC;AAAA,EACH;AACF;AAEO,SAAS,aAAa,KAA6B;AACxD,QAAM,WAA2B,CAAC;AAClC,QAAM,WAAW,aAAa,GAAG;AACjC,QAAM,oBAAoB,oBAAoB,GAAG;AACjD,QAAM,oBAAoB,qBAAqB,CAAC;AAChD,QAAM,UAAU,oBAAoBF,OAAK,KAAK,aAAa,eAAe,IAAI;AAE9E,MAAI,CAAC,UAAU;AACb,QAAI,mBAAmB;AACrB,eAAS,KAAK;AAAA,QACZ,OAAO;AAAA,QACP,MAAM;AAAA,QACN,SAAS;AAAA,MACX,CAAC;AAAA,IACH,OAAO;AACL,eAAS,KAAK;AAAA,QACZ,OAAO;AAAA,QACP,MAAM;AAAA,QACN,SAAS;AAAA,QACT,aAAa;AAAA,MACf,CAAC;AAAA,IACH;AAAA,EACF,OAAO;AACL,aAAS,KAAK;AAAA,MACZ,OAAO;AAAA,MACP,MAAM;AAAA,MACN,SAAS,kCAAkC,SAAS,cAAc;AAAA,IACpE,CAAC;AAAA,EACH;AAEA,0BAAwB,KAAK,QAAQ;AACrC,yBAAuB,KAAK,UAAU,oBAAoB,+CAA+C,2BAA2B;AACpI,oBAAkB,KAAK,UAAU,oBAAoB,YAAY,oBAAoB;AACrF,kCAAgC,KAAK,QAAQ;AAC7C,MAAI,CAAC,qBAAqBC,aAAWD,OAAK,KAAK,YAAY,CAAC,KAAKC,aAAWD,OAAK,KAAK,mBAAmB,CAAC,GAAG;AAC3G,2BAAuB,KAAK,QAAQ;AAAA,EACtC;AAEA,aAAW,OAAO,WAAW;AAC3B,UAAM,UAAUA,OAAK,SAAS,GAAG;AACjC,UAAM,cAAc,oBAAoB,2BAA2B,GAAG,KAAK;AAC3E,QAAIC,aAAW,OAAO,GAAG;AACvB,eAAS,KAAK,EAAE,OAAO,QAAQ,MAAM,QAAQ,SAAS,GAAG,WAAW,WAAW,CAAC;AAAA,IAClF,OAAO;AACL,eAAS,KAAK;AAAA,QACZ,OAAO,QAAQ,qBAAqB,SAAS;AAAA,QAC7C,MAAM;AAAA,QACN,SAAS,GAAG,WAAW;AAAA,QACvB,aAAa,oBACT,WAAW,WAAW,+FACtB,iCAAiC,GAAG;AAAA,MAC1C,CAAC;AAAA,IACH;AAAA,EACF;AAEA,wBAAsB,SAAS,QAAQ;AACvC,8BAA4B,KAAK,UAAU,oBAAoB,uBAAuB,iCAAiC,OAAO;AAC9H,0BAAwB,KAAK,UAAU,oBAAoB,6CAA6C,8BAA8B,OAAO;AAC7I,uBAAqB,SAAS,QAAQ;AACtC,yBAAuB,SAAS,QAAQ;AACxC,qBAAmB,SAAS,QAAQ;AACpC,6BAA2B,SAAS,QAAQ;AAC5C,4BAA0B,KAAK,UAAU,EAAE,kBAAkB,CAAC;AAE9D,QAAM,WAAW,QAAQ,SAAS,aAAa;AAC/C,MAAI,CAAC,YAAY,UAAU,CAAC,SAAS,QAAQ,CAAC,GAAG;AAC/C,aAAS,KAAK;AAAA,MACZ,OAAO;AAAA,MACP,MAAM;AAAA,MACN,SAAS;AAAA,MACT,aAAa;AAAA,IACf,CAAC;AAAA,EACH;AACA,MAAI,CAAC,YAAY,UAAU,CAAC,OAAO,oBAAoB,CAAC,GAAG;AACzD,aAAS,KAAK;AAAA,MACZ,OAAO;AAAA,MACP,MAAM;AAAA,MACN,SAAS;AAAA,MACT,aAAa;AAAA,IACf,CAAC;AAAA,EACH;AACA,MAAI,CAAC,YAAY,UAAU,CAAC,gBAAgB,cAAc,CAAC,GAAG;AAC5D,aAAS,KAAK;AAAA,MACZ,OAAO;AAAA,MACP,MAAM;AAAA,MACN,SAAS;AAAA,MACT,aAAa;AAAA,IACf,CAAC;AAAA,EACH;AAEA,sBAAoB,SAAS,QAAQ;AAErC,QAAM,UAAU,QAAQ,SAAS,YAAY;AAC7C,MAAI,CAAC,YAAY,SAAS,CAAC,cAAc,OAAO,CAAC,GAAG;AAClD,aAAS,KAAK;AAAA,MACZ,OAAO;AAAA,MACP,MAAM;AAAA,MACN,SAAS;AAAA,MACT,aAAa;AAAA,IACf,CAAC;AAAA,EACH;AACA,MAAI,CAAC,YAAY,SAAS,CAAC,qBAAqB,aAAa,uBAAuB,oBAAoB,aAAa,aAAa,OAAO,CAAC,GAAG;AAC3I,aAAS,KAAK;AAAA,MACZ,OAAO;AAAA,MACP,MAAM;AAAA,MACN,SAAS;AAAA,MACT,aACE;AAAA,IACJ,CAAC;AAAA,EACH;AAEA,SAAO;AACT;AAEA,SAASM,iBAAgB,KAA0D;AACjF,QAAM,OAAOP,OAAK,KAAK,cAAc;AACrC,MAAI,CAACC,aAAW,IAAI,EAAG,QAAO;AAC9B,MAAI;AACF,WAAO,KAAK,MAAMC,cAAa,MAAM,MAAM,CAAC;AAAA,EAC9C,QAAQ;AACN,WAAO;AAAA,EACT;AACF;AAEA,SAAS,6BAA6B,cAAsB,SAA0B;AACpF,QAAM,aAAa,aAAa,QAAQ,OAAO,GAAG;AAClD,QAAM,oBAAoB,CAAC,MAAM,QAAQ,QAAQ,UAAU,OAAO,EAAE,KAAK,GAAG;AAC5E,MAAI,WAAW,WAAW,QAAQ,KAAK,QAAQ,SAAS,uBAAuB,iBAAiB,GAAG,KAAK,QAAQ,SAAS,2BAA2B,GAAG;AACrJ,WAAO,qBAAqB,QAAQ,MAAM,iBAAiB,EAAE,KAAK,uBAAuB,CAAC;AAAA,EAC5F;AACA,SAAO,qBAAqB,OAAO;AACrC;AAEA,SAAS,0BAA0B,KAAa,UAA0B,UAA2C,CAAC,GAAS;AAC7H,QAAM,gBAAgBF,OAAK,KAAK,YAAY,YAAY;AACxD,MAAIC,aAAW,aAAa,GAAG;AAC7B,UAAM,WAAW,mBAAmB,aAAa,EAAE,OAAO,CAAC,SAAS,KAAK,SAAS,MAAM,CAAC;AACzF,QAAI,SAAS,WAAW,GAAG;AACzB,eAAS,KAAK;AAAA,QACZ,OAAO;AAAA,QACP,MAAM;AAAA,QACN,SAAS;AAAA,QACT,aAAa;AAAA,MACf,CAAC;AAAA,IACH,OAAO;AACL,YAAM,WAAW,SAAS,OAAO,CAAC,SAAS;AACzC,cAAM,UAAUC,cAAaF,OAAK,eAAe,IAAI,GAAG,MAAM;AAC9D,eAAO,mCAAmC,KAAK,OAAO;AAAA,MACxD,CAAC;AACD,UAAI,SAAS,WAAW,GAAG;AACzB,iBAAS,KAAK;AAAA,UACZ,OAAO;AAAA,UACP,MAAM;AAAA,UACN,SAAS;AAAA,UACT,aAAa;AAAA,QACf,CAAC;AAAA,MACH,OAAO;AACL,iBAAS,KAAK;AAAA,UACZ,OAAO;AAAA,UACP,MAAM;AAAA,UACN,SAAS,qCAAqC,SAAS,MAAM;AAAA,QAC/D,CAAC;AAAA,MACH;AAAA,IACF;AAAA,EACF;AAEA,QAAM,cAAcO,iBAAgB,GAAG;AACvC,MAAI,CAAC,aAAa;AAChB,aAAS,KAAK;AAAA,MACZ,OAAO;AAAA,MACP,MAAM;AAAA,MACN,SAAS;AAAA,MACT,aAAa;AAAA,IACf,CAAC;AAAA,EACH,OAAO;AACL,UAAM,UAAU,YAAY,WAAW,CAAC;AACxC,UAAM,aAAa,QAAQ,QAAQ,QAAQ,WAAW,KAAK,QAAQ,SAAS;AAC5E,QAAI,CAAC,YAAY;AACf,eAAS,KAAK;AAAA,QACZ,OAAO;AAAA,QACP,MAAM;AAAA,QACN,SAAS;AAAA,QACT,aAAa;AAAA,MACf,CAAC;AAAA,IACH,OAAO;AACL,eAAS,KAAK;AAAA,QACZ,OAAO;AAAA,QACP,MAAM;AAAA,QACN,SAAS;AAAA,MACX,CAAC;AAAA,IACH;AAAA,EACF;AAEA,QAAM,qBAAqB,mBAAmB,GAAG,EAAE,OAAO,CAAC,SAAS;AAClE,QAAI,KAAK,SAAS,eAAe,KAAK,KAAK,SAAS,aAAa,EAAG,QAAO;AAC3E,WAAO,8BAA8B,KAAK,IAAI;AAAA,EAChD,CAAC;AACD,QAAM,aAAa,mBAChB,IAAI,CAAC,SAAS;AACb,UAAM,UAAUL,cAAaF,OAAK,KAAK,IAAI,GAAG,MAAM;AACpD,WAAO,6BAA6B,MAAM,OAAO,IAAI,OAAO;AAAA,EAC9D,CAAC,EACA,OAAO,CAAC,SAAyB,SAAS,IAAI,EAC9C,MAAM,GAAG,CAAC;AACb,MAAI,WAAW,SAAS,GAAG;AACzB,aAAS,KAAK;AAAA,MACZ,OAAO;AAAA,MACP,MAAM;AAAA,MACN,SAAS,mDAAmD,WAAW,KAAK,IAAI,CAAC;AAAA,MACjF,aAAa;AAAA,IACf,CAAC;AAAA,EACH,WAAW,mBAAmB,SAAS,GAAG;AACxC,aAAS,KAAK;AAAA,MACZ,OAAO;AAAA,MACP,MAAM;AAAA,MACN,SAAS;AAAA,IACX,CAAC;AAAA,EACH;AAEA,MAAI,QAAQ,mBAAmB;AAC7B,aAAS,KAAK;AAAA,MACZ,OAAO;AAAA,MACP,MAAM;AAAA,MACN,SAAS;AAAA,IACX,CAAC;AAAA,EACH,WAAW,CAACC,aAAWD,OAAK,KAAK,YAAY,CAAC,GAAG;AAC/C,aAAS,KAAK;AAAA,MACZ,OAAO;AAAA,MACP,MAAM;AAAA,MACN,SAAS;AAAA,MACT,aAAa;AAAA,IACf,CAAC;AAAA,EACH,OAAO;AACL,aAAS,KAAK;AAAA,MACZ,OAAO;AAAA,MACP,MAAM;AAAA,MACN,SAAS;AAAA,IACX,CAAC;AAAA,EACH;AACF;AAEA,SAAS,gBAAgB,UAA0BQ,UAAiD;AAClG,QAAM,cAAc,SACjB,OAAO,CAAC,YAAY,QAAQ,UAAU,UAAU,QAAQ,UAAU,MAAM,EACxE,IAAI,CAAC,YAAY,QAAQ,eAAe,QAAQ,OAAO,EACvD,OAAO,CAAC,OAAO,OAAO,WAAW,OAAO,QAAQ,KAAK,MAAM,KAAK,EAChE,MAAM,GAAG,CAAC;AAEb,MAAIA,SAAQ,OAAO,GAAG;AACpB,WAAO;AAAA,MACL,OAAO;AAAA,MACP,SAAS;AAAA,MACT;AAAA,IACF;AAAA,EACF;AAEA,MAAI,SAAS,KAAK,CAAC,YAAY,QAAQ,UAAU,UAAU,QAAQ,SAAS,UAAU,GAAG;AACvF,WAAO;AAAA,MACL,OAAO;AAAA,MACP,SAAS;AAAA,MACT;AAAA,IACF;AAAA,EACF;AAEA,MAAIA,SAAQ,OAAO,GAAG;AACpB,WAAO;AAAA,MACL,OAAO;AAAA,MACP,SAAS;AAAA,MACT;AAAA,IACF;AAAA,EACF;AAEA,SAAO;AAAA,IACL,OAAO;AAAA,IACP,SAAS;AAAA,IACT;AAAA,EACF;AACF;AAEO,SAAS,kBAAkB,KAA0B;AAC1D,QAAM,WAAW,aAAa,GAAG;AACjC,QAAMA,WAAkC,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM,EAAE;AACpE,aAAW,WAAW,SAAU,CAAAA,SAAQ,QAAQ,KAAK,KAAK;AAC1D,SAAO,EAAE,SAAAA,UAAS,WAAW,gBAAgB,UAAUA,QAAO,GAAG,SAAS;AAC5E;;;AHpiDA,IAAM,oBAAoB;AAAA,EACxB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;AACA,IAAM,6BAA6B,CAAC,aAAa,gCAAgC,kBAAkB;AAUnG,SAAS,QAAQ,UAAgE;AAC/E,SAAO;AAAA,IACL,MAAM,SAAS,OAAO,CAAC,YAAY,QAAQ,UAAU,MAAM,EAAE;AAAA,IAC7D,MAAM,SAAS,OAAO,CAAC,YAAY,QAAQ,UAAU,MAAM,EAAE;AAAA,IAC7D,MAAM,SAAS,OAAO,CAAC,YAAY,QAAQ,UAAU,MAAM,EAAE;AAAA,EAC/D;AACF;AAEA,SAAS,OAAO,QAAgB,UAAiD;AAC/E,SAAO,EAAE,QAAQ,SAAS,QAAQ,QAAQ,GAAG,SAAS;AACxD;AAEA,SAAS,SAAS,MAAuB;AACvC,MAAI;AACF,WAAO,KAAK,MAAMC,eAAa,MAAM,MAAM,CAAC;AAAA,EAC9C,QAAQ;AACN,WAAO;AAAA,EACT;AACF;AAEA,SAASC,UAAS,OAAkD;AAClE,SAAO,OAAO,UAAU,YAAY,UAAU;AAChD;AAEA,SAAS,mBAAmB,MAAuB;AACjD,QAAM,aAAa,UAAU,IAAI,EAAE,QAAQ,OAAO,GAAG;AACrD,MAAI,WAAW,WAAW,oBAAoB,EAAG,QAAO,CAAC,WAAW,MAAM,qBAAqB,MAAM,EAAE,SAAS,KAAK;AACrH,SAAO,CAAC,WAAW,WAAW,GAAG,KAAK,CAAC,WAAW,WAAW,KAAK,KAAK,CAAC,WAAW,SAAS,MAAM;AACpG;AAEA,SAAS,sBAAsB,KAAuC;AACpE,QAAM,eAAeC,OAAK,KAAK,eAAe,aAAa;AAC3D,MAAIC,aAAW,YAAY,GAAG;AAC5B,WAAO;AAAA,MACL,MAAM;AAAA,MACN,YAAYD,OAAK,KAAK,aAAa;AAAA,MACnC,cAAcA,OAAK,KAAK,+BAA+B;AAAA,MACvD,mBAAmBA,OAAK,KAAK,yBAAyB;AAAA,MACtD,gBAAgBA,OAAK,KAAK,sBAAsB,gBAAgB;AAAA,IAClE;AAAA,EACF;AAEA,QAAM,kBAAkBA,OAAK,KAAK,gBAAgB,aAAa,aAAa;AAC5E,MAAIC,aAAW,eAAe,GAAG;AAC/B,WAAO;AAAA,MACL,MAAM;AAAA,MACN,YAAYD,OAAK,KAAK,gBAAgB,WAAW;AAAA,MACjD,cAAcA,OAAK,KAAK,+BAA+B;AAAA,MACvD,mBAAmBA,OAAK,KAAK,qCAAqC;AAAA,MAClE,gBAAgBA,OAAK,KAAK,gBAAgB,aAAa,WAAW;AAAA,IACpE;AAAA,EACF;AAEA,SAAO;AACT;AAEA,SAAS,iBAAiB,MAAc,MAAc,UAAqC;AACzF,MAAI,qBAAqB,IAAI,GAAG;AAC9B,aAAS,KAAK;AAAA,MACZ,OAAO;AAAA,MACP,MAAM;AAAA,MACN,SAAS,GAAG,IAAI;AAAA,MAChB,aAAa;AAAA,IACf,CAAC;AAAA,EACH;AACF;AAEA,SAAS,aAAa,MAAc,OAA8B;AAChE,QAAM,QAAQ,KAAK,MAAM,IAAI,OAAO,IAAI,KAAK,sBAAsB,GAAG,CAAC;AACvE,SAAO,QAAQ,CAAC,KAAK;AACvB;AAEA,SAAS,4BAA4B,QAA2B,UAAqC;AACnG,QAAM,QAAQ,mBAAmB,OAAO,YAAY,EAAE,OAAO,CAAC,SAAS,KAAK,SAAS,OAAO,CAAC;AAC7F,QAAM,eAAe,oBAAI,IAAY;AAErC,aAAW,WAAW,mBAAmB;AACvC,UAAM,eAAe,GAAG,OAAO;AAC/B,UAAM,OAAOA,OAAK,OAAO,cAAc,YAAY;AACnD,QAAI,CAACC,aAAW,IAAI,GAAG;AACrB,eAAS,KAAK;AAAA,QACZ,OAAO;AAAA,QACP,MAAM;AAAA,QACN,SAAS,+BAA+B,YAAY;AAAA,QACpD,aAAa;AAAA,MACf,CAAC;AACD;AAAA,IACF;AAEA,UAAM,OAAOH,eAAa,MAAM,MAAM;AACtC,qBAAiB,cAAc,MAAM,QAAQ;AAE7C,UAAM,OAAO,aAAa,MAAM,MAAM;AACtC,UAAM,cAAc,aAAa,MAAM,aAAa;AACpD,QAAI,SAAS,SAAS;AACpB,eAAS,KAAK;AAAA,QACZ,OAAO;AAAA,QACP,MAAM;AAAA,QACN,SAAS,GAAG,YAAY,cAAc,QAAQ,SAAS,iBAAiB,OAAO;AAAA,QAC/E,aAAa;AAAA,MACf,CAAC;AAAA,IACH,OAAO;AACL,mBAAa,IAAI,IAAI;AAAA,IACvB;AAEA,QAAI,CAAC,eAAe,YAAY,SAAS,IAAI;AAC3C,eAAS,KAAK;AAAA,QACZ,OAAO;AAAA,QACP,MAAM;AAAA,QACN,SAAS,GAAG,YAAY;AAAA,QACxB,aAAa;AAAA,MACf,CAAC;AAAA,IACH;AAEA,QAAI,CAAC,KAAK,SAAS,cAAc,KAAK,CAAC,KAAK,SAAS,oBAAoB,KAAK,CAAC,KAAK,SAAS,mBAAmB,GAAG;AACjH,eAAS,KAAK;AAAA,QACZ,OAAO;AAAA,QACP,MAAM;AAAA,QACN,SAAS,GAAG,YAAY;AAAA,QACxB,aAAa;AAAA,MACf,CAAC;AAAA,IACH;AAEA,QAAI,CAAC,2BAA2B,KAAK,CAAC,cAAc,KAAK,SAAS,SAAS,CAAC,GAAG;AAC7E,eAAS,KAAK;AAAA,QACZ,OAAO;AAAA,QACP,MAAM;AAAA,QACN,SAAS,GAAG,YAAY;AAAA,QACxB,aAAa;AAAA,MACf,CAAC;AAAA,IACH;AAAA,EACF;AAEA,QAAM,SAAS,MAAM,IAAI,CAAC,SAAS,KAAK,QAAQ,WAAW,EAAE,CAAC,EAAE,OAAO,CAAC,SAAS,CAAE,kBAAwC,SAAS,IAAI,CAAC;AACzI,MAAI,OAAO,SAAS,GAAG;AACrB,aAAS,KAAK;AAAA,MACZ,OAAO;AAAA,MACP,MAAM;AAAA,MACN,SAAS,0DAA0D,OAAO,KAAK,IAAI,CAAC;AAAA,MACpF,aAAa;AAAA,IACf,CAAC;AAAA,EACH;AAEA,MAAI,aAAa,SAAS,kBAAkB,QAAQ;AAClD,aAAS,KAAK;AAAA,MACZ,OAAO;AAAA,MACP,MAAM;AAAA,MACN,SAAS;AAAA,IACX,CAAC;AAAA,EACH;AACF;AAEA,SAAS,0BAA0B,QAA2B,UAAqC;AACjG,QAAM,aAAaE,OAAK,OAAO,YAAY,aAAa;AACxD,QAAM,SAAS,SAAS,UAAU;AAClC,MAAI,CAAC,UAAU,CAACD,UAAS,MAAM,GAAG;AAChC,aAAS,KAAK;AAAA,MACZ,OAAO;AAAA,MACP,MAAM;AAAA,MACN,SAAS;AAAA,MACT,aAAa;AAAA,IACf,CAAC;AACD;AAAA,EACF;AAEA,QAAM,WAAW,MAAM,QAAQ,OAAO,QAAQ,IAAI,OAAO,SAAS,OAAOA,SAAQ,IAAI,CAAC;AACtF,QAAM,SAAS,MAAM,QAAQ,OAAO,MAAM,IAAI,OAAO,OAAO,OAAOA,SAAQ,IAAI,CAAC;AAChF,QAAM,eAAe,IAAI,IAAI,SAAS,IAAI,CAAC,YAAY,QAAQ,IAAI,EAAE,OAAO,CAAC,SAAyB,OAAO,SAAS,QAAQ,CAAC;AAC/H,QAAM,kBAAkB,kBAAkB,OAAO,CAAC,YAAY,CAAC,aAAa,IAAI,OAAO,CAAC;AAExF,MAAI,gBAAgB,SAAS,GAAG;AAC9B,aAAS,KAAK;AAAA,MACZ,OAAO;AAAA,MACP,MAAM;AAAA,MACN,SAAS,2CAA2C,gBAAgB,KAAK,IAAI,CAAC;AAAA,MAC9E,aAAa;AAAA,IACf,CAAC;AAAA,EACH,OAAO;AACL,aAAS,KAAK;AAAA,MACZ,OAAO;AAAA,MACP,MAAM;AAAA,MACN,SAAS;AAAA,IACX,CAAC;AAAA,EACH;AAEA,aAAW,SAAS,CAAC,GAAG,UAAU,GAAG,MAAM,GAAG;AAC5C,UAAM,OAAO,OAAO,MAAM,SAAS,WAAW,MAAM,OAAO;AAC3D,QAAI,CAAC,QAAQ,CAAC,mBAAmB,IAAI,GAAG;AACtC,YAAM,YAAY,OAAO,MAAM,SAAS,WAAW,MAAM,OAAO;AAChE,eAAS,KAAK;AAAA,QACZ,OAAO;AAAA,QACP,MAAM;AAAA,QACN,SAAS,0DAA0D,SAAS;AAAA,QAC5E,aAAa;AAAA,MACf,CAAC;AACD;AAAA,IACF;AACA,UAAM,WAAWC,OAAK,OAAO,YAAY,IAAI;AAC7C,QAAI,CAACC,aAAW,QAAQ,GAAG;AACzB,eAAS,KAAK;AAAA,QACZ,OAAO;AAAA,QACP,MAAM;AAAA,QACN,SAAS,uCAAuC,IAAI;AAAA,QACpD,aAAa;AAAA,MACf,CAAC;AAAA,IACH;AAAA,EACF;AAEA,QAAM,aAAaH,eAAa,YAAY,MAAM;AAClD,mBAAiB,eAAe,YAAY,QAAQ;AACpD,MAAI,MAAM,QAAQ,OAAO,aAAa,KAAK,OAAO,cAAc,SAAS,WAAW,KAAK,OAAO,cAAc,SAAS,8BAA8B,GAAG;AACtJ,aAAS,KAAK;AAAA,MACZ,OAAO;AAAA,MACP,MAAM;AAAA,MACN,SAAS;AAAA,IACX,CAAC;AAAA,EACH,OAAO;AACL,aAAS,KAAK;AAAA,MACZ,OAAO;AAAA,MACP,MAAM;AAAA,MACN,SAAS;AAAA,MACT,aAAa;AAAA,IACf,CAAC;AAAA,EACH;AACF;AAEA,SAAS,sBAAsB,KAAa,QAA2B,UAAqC;AAC1G,QAAM,sBAAsBG,aAAWD,OAAK,KAAK,QAAQ,CAAC,IAAIA,OAAK,KAAK,QAAQ,IAAIA,OAAK,KAAK,cAAc,QAAQ;AACpH,QAAM,sBAAsB,mBAAmB,mBAAmB,EAC/D,OAAO,CAAC,SAAS,KAAK,SAAS,KAAK,CAAC,EACrC,IAAI,CAAC,SAAS,KAAK,QAAQ,SAAS,EAAE,CAAC;AAC1C,QAAM,oBAAoB,mBAAmB,OAAO,iBAAiB,EAAE,OAAO,CAAC,SAAS,KAAK,SAAS,WAAW,KAAK,SAAS,UAAU;AACzI,QAAM,oBAAoB,kBACvB,IAAI,CAAC,SAAS,KAAK,MAAM,OAAO,EAAE,CAAC,CAAC,EACpC,OAAO,CAAC,UAA2B,OAAO,UAAU,YAAY,MAAM,SAAS,CAAC,EAChF,OAAO,CAAC,OAAO,OAAO,WAAW,OAAO,QAAQ,KAAK,MAAM,KAAK;AAEnE,aAAW,aAAa,qBAAqB;AAC3C,UAAM,cAAcA,OAAK,OAAO,mBAAmB,WAAW,UAAU;AACxE,QAAI,CAACC,aAAW,WAAW,GAAG;AAC5B,eAAS,KAAK;AAAA,QACZ,OAAO;AAAA,QACP,MAAM;AAAA,QACN,SAAS,qCAAqC,SAAS;AAAA,QACvD,aAAa;AAAA,MACf,CAAC;AACD;AAAA,IACF;AAEA,UAAM,OAAOH,eAAa,aAAa,MAAM;AAC7C,qBAAiB,GAAG,SAAS,aAAa,MAAM,QAAQ;AACxD,QAAI,CAAC,wCAAwC,KAAK,IAAI,GAAG;AACvD,eAAS,KAAK;AAAA,QACZ,OAAO;AAAA,QACP,MAAM;AAAA,QACN,SAAS,GAAG,SAAS;AAAA,QACrB,aAAa;AAAA,MACf,CAAC;AAAA,IACH;AACA,QAAI,CAAC,KAAK,SAAS,UAAU,SAAS,KAAK,KAAK,CAAC,KAAK,SAAS,qBAAqB,SAAS,KAAK,GAAG;AACnG,eAAS,KAAK;AAAA,QACZ,OAAO;AAAA,QACP,MAAM;AAAA,QACN,SAAS,GAAG,SAAS;AAAA,QACrB,aAAa;AAAA,MACf,CAAC;AAAA,IACH;AAAA,EACF;AAEA,QAAM,SAAS,kBAAkB,OAAO,CAAC,SAAS,CAAC,oBAAoB,SAAS,IAAI,CAAC;AACrF,MAAI,OAAO,SAAS,GAAG;AACrB,aAAS,KAAK;AAAA,MACZ,OAAO;AAAA,MACP,MAAM;AAAA,MACN,SAAS,6DAA6D,OAAO,KAAK,IAAI,CAAC;AAAA,MACvF,aAAa;AAAA,IACf,CAAC;AAAA,EACH;AAEA,MAAI,oBAAoB,SAAS,KAAK,oBAAoB,MAAM,CAAC,cAAcG,aAAWD,OAAK,OAAO,mBAAmB,WAAW,UAAU,CAAC,CAAC,GAAG;AACjJ,aAAS,KAAK;AAAA,MACZ,OAAO;AAAA,MACP,MAAM;AAAA,MACN,SAAS,uCAAuC,oBAAoB,MAAM;AAAA,IAC5E,CAAC;AAAA,EACH;AACF;AAEA,SAAS,oBAAoB,KAA+B;AAC1D,QAAM,WAAgC,CAAC;AACvC,QAAM,SAAS,sBAAsB,GAAG;AACxC,MAAI,CAAC,QAAQ;AACX,WAAO,OAAO,eAAe;AAAA,MAC3B;AAAA,QACE,OAAO;AAAA,QACP,MAAM;AAAA,QACN,SAAS;AAAA,QACT,aAAa;AAAA,MACf;AAAA,IACF,CAAC;AAAA,EACH;AAEA,QAAM,aAAaC,aAAW,OAAO,cAAc,IAAIH,eAAa,OAAO,gBAAgB,MAAM,IAAI;AACrG,MAAI,CAAC,YAAY;AACf,aAAS,KAAK;AAAA,MACZ,OAAO;AAAA,MACP,MAAM;AAAA,MACN,SAAS;AAAA,MACT,aAAa;AAAA,IACf,CAAC;AAAA,EACH,OAAO;AACL,qBAAiB,OAAO,gBAAgB,YAAY,QAAQ;AAC5D,QAAI,WAAW,SAAS,WAAW,KAAK,WAAW,SAAS,wCAAwC,GAAG;AACrG,eAAS,KAAK;AAAA,QACZ,OAAO;AAAA,QACP,MAAM;AAAA,QACN,SAAS;AAAA,MACX,CAAC;AAAA,IACH,OAAO;AACL,eAAS,KAAK;AAAA,QACZ,OAAO;AAAA,QACP,MAAM;AAAA,QACN,SAAS;AAAA,QACT,aAAa;AAAA,MACf,CAAC;AAAA,IACH;AAAA,EACF;AAEA,4BAA0B,QAAQ,QAAQ;AAC1C,8BAA4B,QAAQ,QAAQ;AAC5C,wBAAsB,KAAK,QAAQ,QAAQ;AAE3C,MAAI,OAAO,SAAS,UAAU;AAC5B,UAAM,cAAc,SAASE,OAAK,KAAK,cAAc,CAAC;AACtD,UAAM,QAAQD,UAAS,WAAW,KAAK,MAAM,QAAQ,YAAY,KAAK,IAAI,YAAY,QAAQ,CAAC;AAC/F,eAAW,gBAAgB,CAAC,eAAe,kBAAkB,oBAAoB,GAAG;AAClF,UAAI,CAAC,MAAM,SAAS,YAAY,GAAG;AACjC,iBAAS,KAAK;AAAA,UACZ,OAAO;AAAA,UACP,MAAM;AAAA,UACN,SAAS,uCAAuC,YAAY;AAAA,UAC5D,aAAa;AAAA,QACf,CAAC;AAAA,MACH;AAAA,IACF;AAAA,EACF;AAEA,MAAI,SAAS,MAAM,CAAC,YAAY,QAAQ,UAAU,MAAM,GAAG;AACzD,aAAS,KAAK;AAAA,MACZ,OAAO;AAAA,MACP,MAAM;AAAA,MACN,SAAS;AAAA,IACX,CAAC;AAAA,EACH;AAEA,SAAO,OAAO,eAAe,QAAQ;AACvC;AAEA,SAAS,qBAAqB,KAAa,QAA6D;AACtG,QAAM,WAAgC,CAAC;AACvC,QAAM,kBAAkBE,aAAWD,OAAK,KAAK,cAAc,CAAC,KAAKC,aAAWD,OAAK,KAAK,KAAK,CAAC,KAAKC,aAAWD,OAAK,KAAK,WAAW,CAAC;AAElI,MAAI,iBAAiB;AACnB,UAAM,cAAmE;AAAA,MACvE,QAAQ;AAAA,QACN;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,MACA,QAAQ,CAAC,6CAA6C;AAAA,MACtD,OAAO,CAAC,sCAAsC,8DAA8D;AAAA,MAC5G,SAAS,CAAC,qDAAqD,yDAAyD;AAAA,IAC1H;AAEA,eAAW,gBAAgB,YAAY,MAAM,GAAG;AAC9C,YAAM,OAAOA,OAAK,KAAK,YAAY;AACnC,UAAI,CAACC,aAAW,IAAI,GAAG;AACrB,iBAAS,KAAK;AAAA,UACZ,OAAO;AAAA,UACP,MAAM;AAAA,UACN,SAAS,GAAG,YAAY;AAAA,UACxB,aAAa;AAAA,QACf,CAAC;AACD;AAAA,MACF;AACA,YAAM,OAAOH,eAAa,MAAM,MAAM;AACtC,uBAAiB,cAAc,MAAM,QAAQ;AAC7C,UAAI,CAAC,KAAK,SAAS,WAAW,KAAK,CAAC,KAAK,SAAS,kBAAkB,GAAG;AACrE,iBAAS,KAAK;AAAA,UACZ,OAAO;AAAA,UACP,MAAM;AAAA,UACN,SAAS,GAAG,YAAY;AAAA,UACxB,aAAa;AAAA,QACf,CAAC;AAAA,MACH;AAAA,IACF;AAAA,EACF,OAAO;AACL,aAAS,KAAK,GAAG,4BAA4B,KAAK,MAAM,EAAE,QAAQ;AAAA,EACpE;AAEA,MAAI,SAAS,MAAM,CAAC,YAAY,QAAQ,UAAU,MAAM,GAAG;AACzD,aAAS,KAAK;AAAA,MACZ,OAAO;AAAA,MACP,MAAM;AAAA,MACN,SAAS,GAAG,MAAM,YAAY,kBAAkB,0BAA0B,+BAA+B;AAAA,IAC3G,CAAC;AAAA,EACH;AAEA,SAAO,OAAO,QAAQ,QAAQ;AAChC;AAEA,SAAS,yBAAyB,KAAqB;AACrD,QAAM,OAAOE,OAAK,KAAK,uBAAuB;AAC9C,SAAOC,aAAW,IAAI,IAAIH,eAAa,MAAM,MAAM,IAAI;AACzD;AAEA,SAAS,oBAAoB,KAAa,WAA4B;AACpE,SAAO,4BAA4B,KAAK,SAAS;AACnD;AAEA,SAAS,4BAA4B,KAAa,QAA6D;AAC7G,QAAM,WAAgC,CAAC;AACvC,QAAM,cAAc,yBAAyB,GAAG;AAEhD,MAAI,WAAW,UAAU;AACvB,UAAM,YAAYE,OAAK,KAAK,oCAAoC;AAChE,QAAI,CAACC,aAAW,SAAS,GAAG;AAC1B,eAAS,KAAK;AAAA,QACZ,OAAO;AAAA,QACP,MAAM;AAAA,QACN,SAAS;AAAA,QACT,aAAa;AAAA,MACf,CAAC;AAAA,IACH,OAAO;AACL,uBAAiB,sCAAsCH,eAAa,WAAW,MAAM,GAAG,QAAQ;AAAA,IAClG;AAEA,UAAM,eAAeE,OAAK,KAAK,2BAA2B;AAC1D,QAAIC,aAAW,YAAY,GAAG;AAC5B,eAAS,KAAK;AAAA,QACZ,OAAO;AAAA,QACP,MAAM;AAAA,QACN,SAAS;AAAA,MACX,CAAC;AAAA,IACH,WAAW,oBAAoB,aAAa,QAAQ,GAAG;AACrD,eAAS,KAAK;AAAA,QACZ,OAAO;AAAA,QACP,MAAM;AAAA,QACN,SAAS;AAAA,QACT,aAAa;AAAA,MACf,CAAC;AAAA,IACH;AAEA,UAAM,cAAcD,OAAK,KAAK,0CAA0C;AACxE,QAAIC,aAAW,WAAW,GAAG;AAC3B,eAAS,KAAK;AAAA,QACZ,OAAO;AAAA,QACP,MAAM;AAAA,QACN,SAAS;AAAA,MACX,CAAC;AAAA,IACH;AAAA,EACF;AAEA,MAAI,WAAW,UAAU;AACvB,UAAM,eAAeD,OAAK,KAAK,2BAA2B;AAC1D,QAAI,CAACC,aAAW,YAAY,GAAG;AAC7B,eAAS,KAAK;AAAA,QACZ,OAAO;AAAA,QACP,MAAM;AAAA,QACN,SAAS;AAAA,QACT,aAAa;AAAA,MACf,CAAC;AAAA,IACH;AAAA,EACF;AAEA,MAAI,WAAW,SAAS;AACtB,UAAM,aAAaD,OAAK,KAAK,oBAAoB;AACjD,QAAI,CAACC,aAAW,UAAU,GAAG;AAC3B,eAAS,KAAK;AAAA,QACZ,OAAO;AAAA,QACP,MAAM;AAAA,QACN,SAAS;AAAA,QACT,aAAa;AAAA,MACf,CAAC;AAAA,IACH;AACA,UAAM,eAAeD,OAAK,KAAK,4BAA4B;AAC3D,QAAIC,aAAW,YAAY,GAAG;AAC5B,eAAS,KAAK;AAAA,QACZ,OAAO;AAAA,QACP,MAAM;AAAA,QACN,SAAS;AAAA,MACX,CAAC;AAAA,IACH,WAAW,oBAAoB,aAAa,oCAAoC,GAAG;AACjF,eAAS,KAAK;AAAA,QACZ,OAAO;AAAA,QACP,MAAM;AAAA,QACN,SAAS;AAAA,QACT,aAAa;AAAA,MACf,CAAC;AAAA,IACH;AAAA,EACF;AAEA,MAAI,WAAW,WAAW;AACxB,UAAM,eAAeD,OAAK,KAAK,iCAAiC;AAChE,QAAI,CAACC,aAAW,YAAY,GAAG;AAC7B,eAAS,KAAK;AAAA,QACZ,OAAO;AAAA,QACP,MAAM;AAAA,QACN,SAAS;AAAA,QACT,aAAa;AAAA,MACf,CAAC;AAAA,IACH;AAAA,EACF;AAEA,SAAO,OAAO,QAAQ,QAAQ;AAChC;AAEO,SAAS,gBAAgB,KAAa,SAAkC,eAAiC;AAC9G,MAAI,WAAW,OAAO;AACpB,UAAM,WAAgC,CAAC;AACvC,eAAW,QAAQ,CAAC,eAAe,UAAU,UAAU,SAAS,SAAS,GAAY;AACnF,eAAS,KAAK,GAAG,gBAAgB,KAAK,IAAI,EAAE,QAAQ;AAAA,IACtD;AACA,WAAO,OAAO,OAAO,QAAQ;AAAA,EAC/B;AAEA,MAAI,WAAW,cAAe,QAAO,oBAAoB,GAAG;AAC5D,SAAO,qBAAqB,KAAK,MAAM;AACzC;AAEO,SAAS,gBAAgB,KAA+B;AAC7D,QAAM,WAAgC,CAAC;AACvC,QAAM,aAAaA,aAAWD,OAAK,KAAK,cAAc,CAAC,KAAKC,aAAWD,OAAK,KAAK,KAAK,CAAC,KAAKC,aAAWD,OAAK,KAAK,WAAW,CAAC;AAC7H,MAAI,CAAC,YAAY;AACf,WAAO,OAAO,WAAW;AAAA,MACvB;AAAA,QACE,OAAO;AAAA,QACP,MAAM;AAAA,QACN,SAAS;AAAA,QACT,aAAa;AAAA,MACf;AAAA,IACF,CAAC;AAAA,EACH;AAEA,WAAS,KAAK,GAAG,oBAAoB,GAAG,EAAE,QAAQ;AAElD,aAAW,OAAO,CAAC,aAAa,WAAW,WAAW,gBAAgB,oBAAoB,cAAc,YAAY,GAAG;AACrH,UAAM,OAAOA,OAAK,KAAK,GAAG;AAC1B,UAAM,OAAOC,aAAW,IAAI,IAAIH,eAAa,MAAM,MAAM,IAAI;AAC7D,UAAM,QAAQ,KAAK,YAAY;AAC/B,QAAI,CAAC,MAAM,SAAS,aAAa,KAAK,CAAC,MAAM,SAAS,iBAAiB,KAAK,CAAC,MAAM,SAAS,iBAAiB,GAAG;AAC9G,eAAS,KAAK;AAAA,QACZ,OAAO;AAAA,QACP,MAAM;AAAA,QACN,SAAS,GAAG,GAAG;AAAA,QACf,aAAa;AAAA,MACf,CAAC;AAAA,IACH;AAAA,EACF;AAEA,aAAW,eAAe;AAAA,IACxB;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF,GAAG;AACD,QAAI,CAACG,aAAWD,OAAK,KAAK,WAAW,CAAC,GAAG;AACvC,eAAS,KAAK;AAAA,QACZ,OAAO;AAAA,QACP,MAAM;AAAA,QACN,SAAS,GAAG,WAAW;AAAA,QACvB,aAAa;AAAA,MACf,CAAC;AAAA,IACH;AAAA,EACF;AAEA,QAAM,cAAc,kBAAkB,GAAG;AACzC,MAAI,YAAY,QAAQ,OAAO,GAAG;AAChC,aAAS,KAAK;AAAA,MACZ,OAAO;AAAA,MACP,MAAM;AAAA,MACN,SAAS,4BAA4B,YAAY,QAAQ,IAAI;AAAA,MAC7D,aAAa;AAAA,IACf,CAAC;AAAA,EACH,OAAO;AACL,aAAS,KAAK;AAAA,MACZ,OAAO;AAAA,MACP,MAAM;AAAA,MACN,SAAS,yCAAyC,YAAY,UAAU,KAAK;AAAA,IAC/E,CAAC;AAAA,EACH;AAEA,MAAI,SAAS,MAAM,CAAC,YAAY,QAAQ,UAAU,MAAM,GAAG;AACzD,aAAS,KAAK;AAAA,MACZ,OAAO;AAAA,MACP,MAAM;AAAA,MACN,SAAS;AAAA,IACX,CAAC;AAAA,EACH;AAEA,SAAO,OAAO,WAAW,QAAQ;AACnC;;;AappBA,SAAS,cAAAE,cAAY,gBAAAC,sBAAoB;AACzC,SAAS,QAAAC,cAAY;AAoCrB,SAAS,kBAAkB,QAAgB,UAA8B;AACvE,MAAI,CAACC,aAAW,MAAM,EAAG,QAAO;AAEhC,QAAM,aAAa,OAAOC,eAAa,QAAQ,MAAM,CAAC;AACtD,QAAM,eAAe,OAAOA,eAAa,UAAU,MAAM,CAAC;AAC1D,SAAO,eAAe,eAAe,cAAc;AACrD;AAEO,SAAS,YAAY,KAAa,QAAQ,iBAA6B;AAC5E,QAAM,cAAc,gBAAgB;AACpC,QAAM,eAAeC,OAAK,aAAa,aAAa,KAAK;AACzD,QAAM,iBAAiB;AAAA,IACrB,SAAS,CAAC;AAAA,IACV,SAAS,CAAC;AAAA,IACV,aAAa,CAAC,GAAG,eAAe;AAAA,EAClC;AACA,QAAM,SAAqB;AAAA,IACzB,SAAS,CAAC;AAAA,IACV,WAAW,CAAC;AAAA,IACZ,SAAS,CAAC;AAAA,IACV,aAAa;AAAA,IACb,cAAc;AAAA,IACd;AAAA,IACA,SAAS;AAAA,MACP,aAAa,CAAC;AAAA,MACd,qBAAqB,CAAC;AAAA,MACtB,4BAA4B,CAAC,GAAG,eAAe;AAAA,MAC/C,wBAAwB;AAAA,MACxB,+BAA+B;AAAA,MAC/B,yBAAyB;AAAA,MACzB,gCAAgC;AAAA,IAClC;AAAA,EACF;AAEA,aAAW,OAAO,WAAW;AAC3B,UAAM,SAASA,OAAK,KAAK,GAAG;AAC5B,UAAM,WAAWA,OAAK,cAAc,GAAG;AACvC,UAAM,SAAS,kBAAkB,QAAQ,QAAQ;AAEjD,QAAI,WAAW,WAAW;AACxB,aAAO,QAAQ,KAAK,GAAG;AACvB,aAAO,QAAQ,YAAY,KAAK,GAAG;AACnC;AAAA,IACF;AAEA,QAAI,WAAW,YAAa,QAAO,UAAU,KAAK,GAAG;AAAA,SAChD;AACH,aAAO,QAAQ,KAAK,GAAG;AACvB,aAAO,QAAQ,oBAAoB,KAAK,GAAG;AAAA,IAC7C;AAAA,EACF;AAEA,SAAO,cAAc,kBAAkBA,OAAK,KAAK,2BAA2B,GAAGA,OAAK,aAAa,2BAA2B,CAAC;AAC7H,MAAI,OAAO,gBAAgB,WAAW;AACpC,WAAO,QAAQ,YAAY,KAAK,2BAA2B;AAC3D,WAAO,QAAQ,yBAAyB;AAAA,EAC1C;AACA,MAAI,OAAO,gBAAgB,WAAW;AACpC,WAAO,QAAQ,oBAAoB,KAAK,2BAA2B;AACnE,WAAO,QAAQ,gCAAgC;AAAA,EACjD;AAEA,SAAO,eAAe,kBAAkBA,OAAK,KAAK,4BAA4B,GAAGA,OAAK,aAAa,4BAA4B,CAAC;AAChI,MAAI,OAAO,iBAAiB,WAAW;AACrC,WAAO,QAAQ,YAAY,KAAK,4BAA4B;AAC5D,WAAO,QAAQ,0BAA0B;AAAA,EAC3C;AACA,MAAI,OAAO,iBAAiB,WAAW;AACrC,WAAO,QAAQ,oBAAoB,KAAK,4BAA4B;AACpE,WAAO,QAAQ,iCAAiC;AAAA,EAClD;AAEA,aAAW,UAAU,iBAAiB;AACpC,UAAM,SAASA,OAAK,KAAK,cAAc,MAAM;AAC7C,QAAIF,aAAW,MAAM,EAAG,gBAAe,QAAQ,KAAK,MAAM;AAAA,QACrD,gBAAe,QAAQ,KAAK,MAAM;AAAA,EACzC;AAEA,SAAO;AACT;;;ACpHA,SAAS,cAAAG,cAAY,gBAAAC,sBAAoB;AACzC,SAAS,QAAAC,QAAM,YAAAC,iBAAgB;AA+C/B,SAAS,eAAe,KAAa,OAAgE;AACnG,QAAM,gBAAgBC,eAAa,MAAM,YAAY,MAAM;AAC3D,QAAM,aAAa,OAAO,aAAa;AACvC,QAAM,aAAa,cAAc,KAAK,MAAM,MAAM;AAElD,MAAI,CAACC,aAAW,UAAU,GAAG;AAC3B,WAAO,EAAE,QAAQ,MAAM,QAAQ,QAAQ,WAAW,QAAQ,4BAA4B,cAAc;AAAA,EACtG;AAEA,QAAM,YAAY,OAAOD,eAAa,YAAY,MAAM,CAAC;AAEzD,MAAI,cAAc,YAAY;AAC5B,WAAO,EAAE,QAAQ,MAAM,QAAQ,QAAQ,aAAa,QAAQ,8CAA8C,cAAc;AAAA,EAC1H;AAGA,MAAI,MAAM,iBAAiB,cAAc,MAAM,eAAe;AAC5D,WAAO,EAAE,QAAQ,MAAM,QAAQ,QAAQ,WAAW,QAAQ,kEAAkE,cAAc;AAAA,EAC5I;AAEA,MAAI,MAAM,OAAO;AACf,WAAO,EAAE,QAAQ,MAAM,QAAQ,QAAQ,eAAe,QAAQ,uDAAuD,cAAc;AAAA,EACrI;AAGA,MAAI,MAAM,iBAAiB,MAAM,kBAAkB,YAAY;AAC7D,WAAO,EAAE,QAAQ,MAAM,QAAQ,QAAQ,cAAc,QAAQ,gEAAgE,cAAc;AAAA,EAC7I;AAEA,SAAO;AAAA,IACL,QAAQ,MAAM;AAAA,IACd,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR;AAAA,EACF;AACF;AAEA,SAAS,kBAAkB,KAAa,QAAgB,SAAyB;AAC/E,QAAM,eAAeE,OAAK,KAAK,cAAc,WAAW;AACxD,QAAM,WAAW,GAAG,KAAK,IAAI,CAAC,IAAI,OAAO,QAAQ,oBAAoB,GAAG,CAAC;AACzE,QAAM,eAAeA,OAAK,cAAc,QAAQ;AAChD,YAAU,cAAc,OAAO;AAC/B,SAAOC,UAAS,KAAK,YAAY,EAAE,QAAQ,OAAO,GAAG;AACvD;AAEO,SAAS,cAAc,SAAsC;AAClE,QAAM,MAAM,QAAQ;AACpB,QAAM,QAAQ,QAAQ,QAAQ,KAAK;AACnC,QAAM,SAAS,QAAQ,QAAQ,MAAM;AACrC,QAAM,WAAW,aAAa,GAAG;AAEjC,MAAI,CAAC,UAAU;AAEb,QAAI,QAAQ;AACV,YAAM,IAAI,MAAM,2GAA2G;AAAA,IAC7H;AACA,UAAM,aAAa,YAAY,EAAE,KAAK,MAAM,CAAC;AAC7C,UAAMC,SAA4B;AAAA,MAChC,GAAG,WAAW,OAAO,IAAI,CAAC,YAA8B,EAAE,QAAQ,QAAQ,WAAW,QAAQ,8BAA8B,EAAE;AAAA,MAC7H,GAAG,WAAW,UAAU,IAAI,CAAC,YAA8B,EAAE,QAAQ,QAAQ,aAAa,QAAQ,gCAAgC,EAAE;AAAA,MACpI,GAAG,WAAW,YAAY,IAAI,CAAC,YAA8B,EAAE,QAAQ,QAAQ,eAAe,QAAQ,wCAAwC,EAAE;AAAA,MAChJ,GAAG,WAAW,UAAU,IAAI,CAAC,UAA4B;AACvD,cAAM,CAAC,QAAQ,YAAY,IAAI,MAAM,MAAM,MAAM;AACjD,eAAO;AAAA,UACL,QAAQ,UAAU;AAAA,UAClB,QAAQ;AAAA,UACR,QAAQ;AAAA,UACR,GAAI,eAAe,EAAE,aAAa,IAAI,CAAC;AAAA,QACzC;AAAA,MACF,CAAC;AAAA,IACH;AACA,WAAO;AAAA,MACL;AAAA,MACA,OAAAA;AAAA,MACA,yBAAyB,CAAC,GAAG,eAAe;AAAA,MAC5C,cAAc;AAAA,MACd,SAAS,UAAUA,MAAK;AAAA,IAC1B;AAAA,EACF;AAEA,QAAM,cAAc,gBAAgB;AACpC,QAAM,QAAQ,SAAS,SAAS;AAChC,QAAM,eAAeF,OAAK,aAAa,aAAa,KAAK;AACzD,MAAI,CAACD,aAAW,YAAY,GAAG;AAC7B,UAAM,IAAI,MAAM,0CAA0C,KAAK,EAAE;AAAA,EACnE;AAEA,QAAM,QAA4B,CAAC;AACnC,QAAM,iBAAyC,CAAC;AAEhD,QAAM,QAA6D,CAAC;AAEpE,aAAW,OAAO,WAAW;AAC3B,UAAM,aAAaC,OAAK,cAAc,GAAG;AACzC,mBAAe,GAAG,IAAI,OAAOF,eAAa,YAAY,MAAM,CAAC;AAC7D,UAAM;AAAA,MACJ,eAAe,KAAK;AAAA,QAClB,QAAQ;AAAA,QACR;AAAA,QACA,eAAe,SAAS,iBAAiB,GAAG;AAAA,QAC5C;AAAA,MACF,CAAC;AAAA,IACH;AAAA,EACF;AAEA,aAAWK,YAAW,sBAAsB;AAC1C,UAAM;AAAA,MACJ,eAAe,KAAK;AAAA,QAClB,QAAQA,SAAQ;AAAA,QAChB,YAAYH,OAAK,aAAaG,SAAQ,MAAM;AAAA,QAC5C,eAAe;AAAA,QACf;AAAA,MACF,CAAC;AAAA,IACH;AAAA,EACF;AAEA,QAAM;AAAA,IACJ,eAAe,KAAK;AAAA,MAClB,QAAQ;AAAA,MACR,YAAYH,OAAK,aAAa,2BAA2B;AAAA,MACzD,eAAe;AAAA,MACf;AAAA,IACF,CAAC;AAAA,IACD,eAAe,KAAK;AAAA,MAClB,QAAQ;AAAA,MACR,YAAYA,OAAK,aAAa,4BAA4B;AAAA,MAC1D,eAAe;AAAA,MACf;AAAA,IACF,CAAC;AAAA,EACH;AAEA,aAAW,QAAQ,OAAO;AACxB,UAAM,EAAE,eAAe,GAAG,WAAW,IAAI;AACzC,QAAI,CAAC,QAAQ;AACX,UAAI,KAAK,WAAW,aAAa,KAAK,WAAW,aAAa,KAAK,WAAW,eAAe;AAC3F,kBAAU,cAAc,KAAK,KAAK,MAAM,GAAG,aAAa;AAAA,MAC1D,WAAW,KAAK,WAAW,YAAY;AACrC,mBAAW,eAAe,kBAAkB,KAAK,KAAK,QAAQ,aAAa;AAAA,MAC7E;AAAA,IACF;AACA,UAAM,KAAK,UAAU;AAAA,EACvB;AAEA,MAAI,CAAC,QAAQ;AACX,cAAUA,OAAK,KAAK,YAAY,CAAC;AACjC,eAAW,UAAU,iBAAiB;AACpC,oBAAcA,OAAK,aAAa,MAAM,GAAGA,OAAK,KAAK,cAAc,MAAM,CAAC;AAAA,IAC1E;AAEA,UAAM,kBAAmC;AAAA,MACvC,aAAa;AAAA,MACb,gBAAgB;AAAA,MAChB;AAAA,MACA,aAAa,SAAS;AAAA,MACtB,YAAW,oBAAI,KAAK,GAAE,YAAY;AAAA,MAClC,MAAM,CAAC,GAAG,SAAS;AAAA,MACnB,gBAAgB,CAAC,GAAG,eAAe;AAAA,MACnC,aAAa;AAAA,MACb,cAAc;AAAA,MACd;AAAA,IACF;AACA,cAAUA,OAAK,KAAK,cAAc,eAAe,GAAG,GAAG,KAAK,UAAU,iBAAiB,MAAM,CAAC,CAAC;AAAA,CAAI;AAAA,EACrG;AAEA,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA,yBAAyB,CAAC,GAAG,eAAe;AAAA,IAC5C,cAAc;AAAA,IACd,SAAS,UAAU,KAAK;AAAA,EAC1B;AACF;AAEA,SAAS,UAAU,OAAyD;AAC1E,QAAMI,WAAwC;AAAA,IAC5C,SAAS;AAAA,IACT,SAAS;AAAA,IACT,WAAW;AAAA,IACX,cAAc;AAAA,IACd,UAAU;AAAA,IACV,aAAa;AAAA,EACf;AACA,aAAW,QAAQ,MAAO,CAAAA,SAAQ,KAAK,MAAM,KAAK;AAClD,SAAOA;AACT;;;ACxOA,SAAS,eAAe;AACxB,SAAS,gBAAAC,sBAAoB;AAC7B,SAAS,QAAAC,cAAY;;;ACFrB,SAAS,KAAAC,UAAS;AAEX,IAAM,yBAAyBA,GAAE,OAAO;AAAA,EAC7C,MAAMA,GAAE,OAAO,EAAE,IAAI,CAAC;AAAA,EACtB,SAASA,GAAE,MAAMA,GAAE,OAAO,EAAE,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC;AAAA,EACzC,aAAaA,GAAE,OAAO,EAAE,IAAI,EAAE,SAAS;AACzC,CAAC;AAEM,IAAM,yBAAyBA,GAAE,OAAO;AAAA,EAC7C,UAAUA,GAAE,OAAO,EAAE,MAAM,oBAAoB;AAAA,EAC/C,UAAUA,GAAE,OAAO,EAAE,IAAI,CAAC;AAC5B,CAAC;AAEM,IAAM,uBAAuBA,GAAE,OAAO;AAAA,EAC3C,UAAUA,GAAE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,QAAQ,GAAG;AAAA,EACjD,UAAUA,GAAE,OAAO,EAAE,IAAI,EAAE,YAAY,EAAE,QAAQ,GAAG;AAAA,EACpD,aAAaA,GAAE,OAAO,EAAE,QAAQ,YAAY;AAAA,EAC5C,cAAcA,GAAE,MAAMA,GAAE,OAAO,EAAE,MAAM,oBAAoB,CAAC,EAAE,QAAQ,CAAC,CAAC;AAAA,EACxE,YAAYA,GAAE,MAAM,sBAAsB,EAAE,IAAI,CAAC;AAAA,EACjD,WAAWA,GAAE,MAAM,sBAAsB,EAAE,QAAQ,CAAC,CAAC;AACvD,CAAC;;;ADLD,eAAsB,cAAc,SAAoD;AACtF,QAAM,cAAc,gBAAgB;AACpC,QAAM,aAAaC,OAAK,aAAa,YAAY,kBAAkB;AACnE,QAAM,SAAS,qBAAqB,MAAM,KAAK,MAAMC,eAAa,YAAY,MAAM,CAAC,CAAC;AACtF,QAAM,QAAQ,QAAQ,SAAS,QAAQ,IAAI;AAE3C,MAAI,CAAC,OAAO;AACV,UAAM,IAAI,MAAM,6DAA6D;AAAA,EAC/E;AAEA,QAAM,UAAU,IAAI,QAAQ,EAAE,MAAM,MAAM,CAAC;AAC3C,QAAM,UAAU,oBAAI,IAA2B;AAC/C,QAAM,WAAW,QAAQ,SAAS,OAAO;AACzC,QAAM,gBAAgB,IAAI,IAAI,OAAO,aAAa,IAAI,CAAC,SAAS,KAAK,YAAY,CAAC,CAAC;AAEnF,aAAW,YAAY,OAAO,YAAY;AACxC,QAAI,gBAAgB;AAEpB,eAAW,SAAS,SAAS,SAAS;AACpC,UAAI,QAAQ,QAAQ,YAAY,iBAAiB,SAAS,YAAa;AAEvE,YAAM,WAAW,MAAM,QAAQ,OAAO,MAAM;AAAA,QAC1C,GAAG,GAAG,KAAK,4BAA4B,OAAO,WAAW,YAAY,OAAO,QAAQ;AAAA,QACpF,MAAM;AAAA,QACN,OAAO;AAAA,QACP,UAAU;AAAA,MACZ,CAAC;AAED,iBAAW,QAAQ,SAAS,KAAK,OAAO;AACtC,YAAI,QAAQ,QAAQ,YAAY,iBAAiB,SAAS,YAAa;AACvE,YAAI,QAAQ,IAAI,KAAK,SAAS,EAAG;AACjC,YAAI,cAAc,IAAI,KAAK,UAAU,YAAY,CAAC,EAAG;AAErD,gBAAQ,IAAI,KAAK,WAAW;AAAA,UAC1B,UAAU,KAAK;AAAA,UACf,SAAS,KAAK;AAAA,UACd,aAAa,KAAK,eAAe;AAAA,UACjC,OAAO,KAAK;AAAA,UACZ,UAAU,KAAK,aAAa;AAAA,UAC5B,UAAU,KAAK;AAAA,UACf,QAAQ,KAAK,UAAU,CAAC;AAAA,UACxB,UAAU,SAAS;AAAA,QACrB,CAAC;AACD,yBAAiB;AAAA,MACnB;AAAA,IACF;AAAA,EACF;AAEA,aAAW,QAAQ,OAAO,WAAW;AACnC,QAAI,QAAQ,QAAQ,SAAU;AAC9B,QAAI,QAAQ,IAAI,KAAK,QAAQ,EAAG;AAChC,QAAI,cAAc,IAAI,KAAK,SAAS,YAAY,CAAC,EAAG;AAEpD,UAAM,CAAC,OAAO,IAAI,IAAI,KAAK,SAAS,MAAM,GAAG;AAC7C,QAAI,CAAC,SAAS,CAAC,KAAM;AAErB,QAAI;AACF,YAAM,WAAW,MAAM,QAAQ,MAAM,IAAI,EAAE,OAAO,KAAK,CAAC;AACxD,cAAQ,IAAI,SAAS,KAAK,WAAW;AAAA,QACnC,UAAU,SAAS,KAAK;AAAA,QACxB,SAAS,SAAS,KAAK;AAAA,QACvB,aAAa,SAAS,KAAK,eAAe;AAAA,QAC1C,OAAO,SAAS,KAAK;AAAA,QACrB,UAAU,SAAS,KAAK,aAAa;AAAA,QACrC,UAAU,SAAS,KAAK;AAAA,QACxB,QAAQ,SAAS,KAAK,UAAU,CAAC;AAAA,QACjC,UAAU,KAAK;AAAA,MACjB,CAAC;AAAA,IACH,SAAS,OAAO;AACd,YAAM,UAAU,iBAAiB,QAAQ,MAAM,UAAU,OAAO,KAAK;AACrE,cAAQ,KAAK,sBAAsB,KAAK,QAAQ,KAAK,OAAO,EAAE;AAAA,IAChE;AAAA,EACF;AAEA,QAAM,aAAa,CAAC,GAAG,QAAQ,OAAO,CAAC,EAAE,MAAM,GAAG,QAAQ;AAC1D,QAAM,SAAS,QAAQ,UAAUD,OAAK,QAAQ,KAAK,YAAY,sBAAsB;AACrF,YAAU,QAAQ,GAAG,KAAK,UAAU,YAAY,MAAM,CAAC,CAAC;AAAA,CAAI;AAC5D,SAAO;AACT;;;AE7FA,SAAS,cAAAE,cAAY,aAAAC,YAAW,gBAAAC,gBAAc,cAAc;AAC5D,SAAS,QAAAC,cAAY;AACrB,SAAS,iBAAiB;;;ACF1B,SAAS,cAAAC,cAAY,gBAAAC,sBAAoB;AACzC,SAAS,QAAAC,cAAY;AAIrB,SAAS,sBAAsB,MAAsB;AACnD,SAAO,KAAK,QAAQ,OAAO,GAAG;AAChC;AAEA,SAAS,QAAQ,OAAiB,SAA0B;AAC1D,SAAO,MAAM,KAAK,CAAC,SAAS,QAAQ,KAAK,sBAAsB,IAAI,CAAC,CAAC;AACvE;AAEA,SAAS,SAAS,MAAc,MAAsB;AACpD,QAAM,OAAOC,OAAK,MAAM,IAAI;AAC5B,SAAOC,aAAW,IAAI,IAAIC,eAAa,MAAM,MAAM,IAAI;AACzD;AAEA,SAAS,aAAa,MAAc,OAAiB,SAAiB,OAA0B;AAC9F,QAAM,aAAa,MAAM,IAAI,CAAC,SAAS,KAAK,YAAY,CAAC;AACzD,SAAO,MACJ,OAAO,CAAC,SAAS,QAAQ,KAAK,sBAAsB,IAAI,CAAC,CAAC,EAC1D,KAAK,CAAC,SAAS;AACd,UAAM,OAAO,SAAS,MAAM,IAAI,EAAE,YAAY;AAC9C,WAAO,WAAW,KAAK,CAAC,SAAS,KAAK,SAAS,IAAI,CAAC;AAAA,EACtD,CAAC;AACL;AAEA,SAAS,QAAQ,OAAuB;AACtC,SAAO,KAAK,IAAI,GAAG,KAAK,IAAI,GAAG,KAAK,CAAC;AACvC;AAEO,SAAS,kBAAkB,WAA0B,UAA+B;AACzF,QAAM,QAAQ,mBAAmB,QAAQ;AACzC,QAAM,QAAmB;AAAA,IACvB,cAAc;AAAA,MACZ,OAAO,QAAQ,OAAO,QAAQ,CAAC,IAC7B,OAAO,QAAQ,OAAO,eAAe,CAAC,IACtC,OAAO,QAAQ,OAAO,QAAQ,CAAC,IAC/B,OAAO,QAAQ,OAAO,WAAW,CAAC,IAClC,OAAO,QAAQ,OAAO,aAAa,CAAC;AAAA,IACxC;AAAA,IACA,iBAAiB;AAAA,MACf,OAAO,QAAQ,OAAO,yBAAyB,CAAC,IAAI,IAClD,OAAO,aAAa,UAAU,OAAO,sBAAsB,CAAC,sBAAsB,UAAU,KAAK,CAAC,CAAC,IACnG,OAAO,aAAa,UAAU,OAAO,eAAe,CAAC,sBAAsB,aAAa,CAAC,CAAC,IAC1F,OAAO,aAAa,UAAU,OAAO,eAAe,CAAC,gBAAgB,cAAc,CAAC,CAAC;AAAA,IACzF;AAAA,IACA,UAAU;AAAA,MACR,OAAO,QAAQ,OAAO,qBAAqB,CAAC,IAC1C,OAAO,aAAa,UAAU,OAAO,2BAA2B,CAAC,SAAS,UAAU,YAAY,CAAC,CAAC,IAClG,OAAO,QAAQ,OAAO,wBAAwB,CAAC,IAC/C,OAAO,aAAa,UAAU,OAAO,eAAe,CAAC,OAAO,WAAW,CAAC,CAAC,IACzE,OAAO,aAAa,UAAU,OAAO,kBAAkB,CAAC,QAAQ,QAAQ,MAAM,CAAC,CAAC;AAAA,IACpF;AAAA,IACA,gBAAgB;AAAA,MACd,OAAO,QAAQ,OAAO,eAAe,CAAC,IACpC,OAAO,aAAa,UAAU,OAAO,wBAAwB,CAAC,UAAU,SAAS,YAAY,OAAO,CAAC,CAAC,IACtG,OAAO,aAAa,UAAU,OAAO,mBAAmB,CAAC,eAAe,WAAW,aAAa,CAAC,CAAC,IAClG,OAAO,QAAQ,OAAO,iCAAiC,CAAC,IACxD,OAAO,aAAa,UAAU,OAAO,eAAe,CAAC,sBAAsB,qBAAqB,YAAY,CAAC,CAAC,IAC9G,OAAO,aAAa,UAAU,OAAO,eAAe,CAAC,iBAAiB,kBAAkB,mBAAmB,iBAAiB,CAAC,CAAC,IAC9H,OAAO,aAAa,UAAU,OAAO,eAAe,CAAC,6BAA6B,iBAAiB,uBAAuB,eAAe,CAAC,CAAC,IAC3I,OAAO,aAAa,UAAU,OAAO,gBAAgB,CAAC,SAAS,eAAe,CAAC,CAAC;AAAA,IACpF;AAAA,IACA,eAAe;AAAA,MACb,OAAO,aAAa,UAAU,OAAO,eAAe,CAAC,SAAS,YAAY,eAAe,CAAC,CAAC,IACzF,OAAO,aAAa,UAAU,OAAO,eAAe,CAAC,QAAQ,iBAAiB,MAAM,CAAC,CAAC,IACtF,OAAO,aAAa,UAAU,OAAO,mBAAmB,CAAC,OAAO,wBAAwB,CAAC,CAAC;AAAA,IAC9F;AAAA,IACA,SAAS;AAAA,MACP,OAAO,QAAQ,OAAO,qCAAqC,CAAC,IAC1D,OAAO,QAAQ,OAAO,kCAAkC,CAAC,IAAI,IAC7D,OAAO,QAAQ,OAAO,+BAA+B,CAAC,IACtD,OAAO,QAAQ,OAAO,gBAAgB,CAAC,IACvC,OAAO,aAAa,UAAU,OAAO,2CAA2C,CAAC,oBAAoB,qBAAqB,aAAa,SAAS,QAAQ,gBAAgB,CAAC,CAAC,IAC1K,OAAO,aAAa,UAAU,OAAO,kBAAkB,CAAC,MAAM,CAAC,CAAC;AAAA,IACpE;AAAA,IACA,eAAe;AAAA,MACb,OAAO,QAAQ,OAAO,mBAAmB,CAAC,IACxC,OAAO,QAAQ,OAAO,yBAAyB,CAAC,IAChD,OAAO,QAAQ,OAAO,sBAAsB,CAAC,IAC7C,OAAO,QAAQ,OAAO,iDAAiD,CAAC,IACxE,OAAO,QAAQ,OAAO,SAAS,CAAC,IAChC,OAAO,aAAa,UAAU,OAAO,eAAe,CAAC,gBAAgB,YAAY,YAAY,CAAC,CAAC;AAAA,IACnG;AAAA,IACA,cAAc;AAAA,MACZ,OAAO,QAAQ,OAAO,wBAAwB,CAAC,IAAI,IACjD,OAAO,QAAQ,OAAO,eAAe,CAAC,IACtC,OAAO,aAAa,UAAU,OAAO,yBAAyB,CAAC,cAAc,WAAW,YAAY,CAAC,CAAC;AAAA,IAC1G;AAAA,IACA,YAAY;AAAA,MACV,OAAO,QAAQ,OAAO,6BAA6B,CAAC,IAClD,OAAO,QAAQ,OAAO,mCAAmC,CAAC,IAC1D,OAAO,QAAQ,OAAO,wBAAwB,CAAC,IAC/C,OAAO,QAAQ,OAAO,gDAAgD,CAAC,IACvE,OAAO,QAAQ,OAAO,oDAAoD,CAAC,IAC3E,OAAO,QAAQ,OAAO,qEAAqE,CAAC,IAC5F,OAAO,aAAa,UAAU,OAAO,oBAAoB,CAAC,qBAAqB,mCAAmC,wBAAwB,CAAC,CAAC;AAAA,IAChJ;AAAA,IACA,aAAa;AAAA,MACX,OAAO,QAAQ,OAAO,sDAAsD,CAAC,IAC3E,OAAO,QAAQ,OAAO,6CAA6C,CAAC,IACpE,OAAO,aAAa,UAAU,OAAO,oCAAoC,CAAC,mBAAmB,eAAe,sBAAsB,YAAY,CAAC,CAAC,IAChJ,OAAO,aAAa,UAAU,OAAO,oCAAoC,CAAC,4BAA4B,oBAAoB,WAAW,CAAC,CAAC,IACvI,OAAO,QAAQ,OAAO,yBAAyB,CAAC,IAChD,OAAO,aAAa,UAAU,OAAO,yBAAyB,CAAC,cAAc,QAAQ,sBAAsB,SAAS,CAAC,CAAC;AAAA,IAC1H;AAAA,IACA,gBAAgB;AAAA,MACd,OAAO,QAAQ,OAAO,mBAAmB,CAAC,IAAI,IAC5C,OAAO,QAAQ,OAAO,kBAAkB,CAAC,IACzC,OAAO,QAAQ,OAAO,mBAAmB,CAAC,IAC1C,OAAO,QAAQ,OAAO,iBAAiB,CAAC,IACxC,OAAO,aAAa,UAAU,OAAO,2BAA2B,CAAC,SAAS,UAAU,SAAS,WAAW,SAAS,aAAa,cAAc,CAAC,CAAC;AAAA,IAClJ;AAAA,EACF;AAEA,QAAM,gBAAgB,MACnB;AAAA,IAAO,CAAC,SACP,8KAA8K,KAAK,IAAI,KACvL,qBAAqB,KAAK,IAAI,KAC9B,yBAAyB,KAAK,IAAI,KAClC,8BAA8B,KAAK,IAAI,KACvC,yBAAyB,KAAK,IAAI,KAClC,iDAAiD,KAAK,IAAI,KAC1D,oCAAoC,KAAK,IAAI,KAC7C,iBAAiB,KAAK,IAAI,KAC1B,aAAa,KAAK,IAAI,KACtB,0BAA0B,KAAK,IAAI,KACnC,iBAAiB,KAAK,IAAI,KAC1B,mCAAmC,KAAK,IAAI,KAC5C,gEAAgE,KAAK,IAAI;AAAA,EAC3E,EACC,MAAM,GAAG,EAAE;AAEd,QAAM,kBAA4B,CAAC;AACnC,MAAI,MAAM,YAAY,EAAG,iBAAgB,KAAK,+EAA+E;AAC7H,MAAI,MAAM,mBAAmB,EAAG,iBAAgB,KAAK,0EAA0E;AAC/H,MAAI,MAAM,WAAW,EAAG,iBAAgB,KAAK,0GAA0G;AACvJ,MAAI,MAAM,kBAAkB;AAC1B,oBAAgB,KAAK,uIAAuI;AAC9J,MAAI,MAAM,iBAAiB,EAAG,iBAAgB,KAAK,gFAAgF;AACnI,MAAI,MAAM,cAAc,EAAG,iBAAgB,KAAK,6JAA6J;AAC7M,MAAI,MAAM,eAAe,EAAG,iBAAgB,KAAK,wHAAwH;AAEzK,QAAM,gBAA0B,CAAC;AACjC,MAAI,MAAM,WAAW,EAAG,eAAc,KAAK,mDAAmD;AAC9F,MAAI,MAAM,kBAAkB,EAAG,eAAc,KAAK,2DAA2D;AAC7G,MAAI,MAAM,gBAAgB,EAAG,eAAc,KAAK,2CAA2C;AAC3F,MAAI,MAAM,aAAa,EAAG,eAAc,KAAK,8IAA8I;AAC3L,MAAI,MAAM,cAAc,EAAG,eAAc,KAAK,+FAA+F;AAC7I,MAAI,MAAM,iBAAiB,EAAG,eAAc,KAAK,wFAAwF;AAEzI,QAAM,kBAAkB;AAAA,IACtB;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF;AAEA,QAAM,cAAc;AAAA,IAClB;AAAA,IACA;AAAA,EACF;AAEA,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF;AACF;;;ADtKA,SAAS,kBAAkB,SAA8B;AACvD,QAAM,QAAQ,OAAO,OAAO,QAAQ,KAA0C,EAAE,OAAO,CAAC,KAAK,UAAU,MAAM,OAAO,CAAC;AACrH,QAAM,WAAW,OAAO,KAAK,QAAQ,KAAK,EAAE,SAAS;AAErD,SAAO,mBAAmB,QAAQ,UAAU,QAAQ;AAAA;AAAA;AAAA,cAGxC,QAAQ,UAAU,QAAQ;AAAA,WAC7B,QAAQ,UAAU,KAAK;AAAA,iBACjB,QAAQ,UAAU,QAAQ;AAAA,cAC7B,QAAQ,UAAU,YAAY,SAAS;AAAA,SAC5C,QAAQ,UAAU,OAAO;AAAA,WACvB,KAAK,IAAI,QAAQ;AAAA;AAAA;AAAA;AAAA,EAI1B,KAAK,UAAU,QAAQ,OAAO,MAAM,CAAC,CAAC;AAAA;AAAA;AAAA;AAAA,EAItC,QAAQ,gBAAgB,IAAI,CAAC,SAAS,KAAK,IAAI,EAAE,EAAE,KAAK,IAAI,KAAK,iCAAiC;AAAA;AAAA;AAAA,EAGlG,QAAQ,cAAc,IAAI,CAAC,SAAS,KAAK,IAAI,EAAE,EAAE,KAAK,IAAI,KAAK,iCAAiC;AAAA;AAAA;AAAA,EAGhG,QAAQ,cAAc,IAAI,CAAC,SAAS,OAAO,IAAI,IAAI,EAAE,KAAK,IAAI,KAAK,kCAAkC;AAAA;AAAA;AAAA,EAGrG,QAAQ,gBAAgB,IAAI,CAAC,SAAS,KAAK,IAAI,EAAE,EAAE,KAAK,IAAI,CAAC;AAAA;AAAA;AAAA,EAG7D,QAAQ,YAAY,IAAI,CAAC,SAAS,KAAK,IAAI,EAAE,EAAE,KAAK,IAAI,CAAC;AAAA;AAE3D;AAEA,eAAsB,UAAU,SAA8C;AAC5E,QAAM,iBAAiB,QAAQ,kBAAkBC,OAAK,QAAQ,KAAK,YAAY,sBAAsB;AACrG,MAAI,CAACC,aAAW,cAAc,GAAG;AAC/B,UAAM,IAAI,MAAM,8BAA8B,cAAc,EAAE;AAAA,EAChE;AAEA,QAAM,aAAa,KAAK,MAAMC,eAAa,gBAAgB,MAAM,CAAC;AAClE,QAAM,UAAU,QAAQ,WAAWF,OAAK,QAAQ,KAAK,YAAY,SAAS;AAC1E,EAAAG,WAAU,SAAS,EAAE,WAAW,KAAK,CAAC;AACtC,EAAAA,WAAUH,OAAK,QAAQ,KAAK,YAAY,UAAU,GAAG,EAAE,WAAW,KAAK,CAAC;AAExE,QAAM,WAA0B,CAAC;AACjC,QAAM,MAAM,UAAU;AAEtB,aAAW,aAAa,YAAY;AAClC,UAAM,WAAW,UAAU,SAAS,QAAQ,KAAK,IAAI;AACrD,UAAM,WAAWA,OAAK,SAAS,QAAQ;AACvC,QAAIC,aAAW,QAAQ,EAAG,QAAO,UAAU,EAAE,WAAW,MAAM,OAAO,KAAK,CAAC;AAE3E,UAAM,IAAI,IAAI,CAAC,SAAS,WAAW,KAAK,UAAU,SAAS,QAAQ,CAAC;AACpE,UAAM,UAAU,kBAAkB,WAAW,QAAQ;AACrD,aAAS,KAAK,OAAO;AAErB,cAAUD,OAAK,QAAQ,KAAK,YAAY,YAAY,GAAG,QAAQ,KAAK,GAAG,kBAAkB,OAAO,CAAC;AAEjG,QAAI,CAAC,QAAQ,YAAY;AACvB,aAAO,UAAU,EAAE,WAAW,MAAM,OAAO,KAAK,CAAC;AAAA,IACnD;AAAA,EACF;AAEA,SAAO;AACT;;;AEjFA,SAAS,cAAAI,cAAY,gBAAAC,gBAAc,eAAAC,oBAAmB;AACtD,SAAS,QAAAC,cAAY;AAIrB,IAAM,kBAAkB;AAAA,EACtB,mBAAmB;AAAA,IACjB,OAAO;AAAA,IACP,WAAW,CAAC,gBAAgB,gBAAgB,eAAe;AAAA,IAC3D,YAAY,CAAC,mBAAmB,iBAAiB;AAAA,EACnD;AAAA,EACA,yBAAyB;AAAA,IACvB,OAAO;AAAA,IACP,WAAW,CAAC,iBAAiB;AAAA,IAC7B,YAAY,CAAC,iBAAiB;AAAA,EAChC;AAAA,EACA,qBAAqB;AAAA,IACnB,OAAO;AAAA,IACP,WAAW,CAAC,UAAU;AAAA,IACtB,YAAY,CAAC,oBAAoB,mBAAmB,iBAAiB;AAAA,EACvE;AAAA,EACA,4BAA4B;AAAA,IAC1B,OAAO;AAAA,IACP,WAAW,CAAC,kBAAkB,eAAe;AAAA,IAC7C,YAAY,CAAC,kBAAkB,iBAAiB;AAAA,EAClD;AAAA,EACA,oBAAoB;AAAA,IAClB,OAAO;AAAA,IACP,WAAW,CAAC,SAAS;AAAA,IACrB,YAAY,CAAC,uBAAuB,mBAAmB,iBAAiB;AAAA,EAC1E;AAAA,EACA,2BAA2B;AAAA,IACzB,OAAO;AAAA,IACP,WAAW,CAAC,iBAAiB,gBAAgB;AAAA,IAC7C,YAAY,CAAC,uBAAuB,iBAAiB;AAAA,EACvD;AAAA,EACA,wBAAwB;AAAA,IACtB,OAAO;AAAA,IACP,WAAW,CAAC,cAAc,iBAAiB,gBAAgB,UAAU;AAAA,IACrE,YAAY,CAAC,2BAA2B,uBAAuB,oBAAoB,iBAAiB;AAAA,EACtG;AAAA,EACA,yBAAyB;AAAA,IACvB,OAAO;AAAA,IACP,WAAW,CAAC,eAAe,YAAY,gBAAgB,YAAY;AAAA,IACnE,YAAY,CAAC,yBAAyB,2BAA2B,kBAAkB;AAAA,EACrF;AACF;AAaA,IAAM,aAAkC;AAAA,EACtC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;AAEA,SAAS,eAAe,MAAc,OAAe,KAAuB;AAC1E,QAAM,aAAa,KAAK,QAAQ,KAAK;AACrC,MAAI,eAAe,GAAI,QAAO,CAAC;AAE/B,QAAM,aAAa,KAAK,MAAM,aAAa,MAAM,MAAM;AACvD,QAAM,WAAW,WAAW,QAAQ,GAAG;AACvC,QAAM,UAAU,aAAa,KAAK,aAAa,WAAW,MAAM,GAAG,QAAQ;AAE3E,SAAO,QACJ,MAAM,IAAI,EACV,IAAI,CAACC,UAASA,MAAK,KAAK,CAAC,EACzB,OAAO,CAACA,UAASA,MAAK,WAAW,IAAI,KAAK,CAACA,MAAK,SAAS,eAAe,CAAC,EACzE,IAAI,CAACA,UAASA,MAAK,MAAM,CAAC,CAAC;AAChC;AAEA,SAAS,aAAa,MAAc,MAAoC;AACtE,QAAM,WAAW,KAAK,MAAM,yBAAyB,IAAI,CAAC;AAC1D,QAAM,WAAW,KAAK,MAAM,qBAAqB,IAAI,CAAC;AACtD,QAAM,QAAQ,OAAO,SAAS,KAAK,MAAM,mBAAmB,IAAI,CAAC,KAAK,KAAK,EAAE;AAC7E,QAAM,YAAY,KAAK,MAAM,oCAAoC,IAAI,CAAC;AAEtE,MAAI,CAAC,YAAY,CAAC,YAAY,CAAC,UAAW,QAAO;AAEjD,QAAM,cAAc,KAAK,MAAM,SAAS;AACxC,QAAM,QAAQ,OAAO,YAAY,WAAW,IAAI,CAAC,QAAQ,CAAC,KAAK,YAAY,GAAG,KAAK,CAAC,CAAC,CAAC;AACtF,QAAM,aAAa,OAAO,OAAO,KAA0C,EAAE,OAAO,CAAC,KAAK,UAAU,MAAM,OAAO,CAAC;AAElH,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,iBAAiB,eAAe,MAAM,uBAAuB,2CAA2C;AAAA,IACxG,eAAe,eAAe,MAAM,6CAA6C,yBAAyB;AAAA,EAC5G;AACF;AAEA,SAAS,QAAQ,QAAsC;AACrD,QAAM,SAAS,oBAAI,IAAoB;AACvC,aAAW,SAAS,OAAQ,QAAO,IAAI,QAAQ,OAAO,IAAI,KAAK,KAAK,KAAK,CAAC;AAC1E,SAAO,CAAC,GAAG,OAAO,QAAQ,CAAC,EAAE,KAAK,CAAC,GAAG,MAAM,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK,EAAE,CAAC,EAAE,cAAc,EAAE,CAAC,CAAC,CAAC;AACrF;AAEA,SAAS,SAAS,SAAwB,WAAwC;AAChF,SAAO,UAAU,OAAO,CAAC,KAAK,QAAQ,MAAM,QAAQ,MAAM,GAAG,GAAG,CAAC;AACnE;AAEA,SAAS,aAAa,UAA2B,WAAwC;AACvF,MAAI,SAAS,WAAW,EAAG,QAAO;AAClC,QAAM,MAAM,UAAU,SAAS;AAC/B,QAAM,MAAM,SAAS,OAAO,CAAC,KAAK,YAAY,MAAM,SAAS,SAAS,SAAS,IAAI,KAAK,CAAC,IAAI,SAAS;AACtG,SAAO,IAAI,QAAQ,CAAC;AACtB;AAEA,SAAS,eAAe,UAA2B,WAAwC;AACzF,QAAM,gBAAgB,SAAS,CAAC,IAAI,OAAO,KAAK,SAAS,CAAC,EAAE,KAAK,EAAE,SAAS,IAAI;AAChF,SAAO,SACJ,MAAM,EACN,KAAK,CAAC,GAAG,MAAM,SAAS,GAAG,SAAS,IAAI,SAAS,GAAG,SAAS,KAAK,EAAE,aAAa,EAAE,cAAc,EAAE,QAAQ,EAAE,KAAK,EAClH,MAAM,GAAG,EAAE,EACX,IAAI,CAAC,YAAY,KAAK,QAAQ,QAAQ,KAAK,QAAQ,QAAQ,mBAAmB,SAAS,SAAS,SAAS,CAAC,WAAW,QAAQ,UAAU,IAAI,aAAa,EAAE,EAC1J,KAAK,IAAI;AACd;AAEO,SAAS,kBAAkB,KAAuB;AACvD,QAAM,cAAcC,OAAK,KAAK,YAAY,UAAU;AACpD,MAAI,CAACC,aAAW,WAAW,GAAG;AAC5B,UAAM,IAAI,MAAM,2EAA2E;AAAA,EAC7F;AAEA,QAAM,eAAeC,aAAY,WAAW,EAAE,OAAO,CAAC,SAAS,KAAK,SAAS,KAAK,CAAC;AACnF,QAAM,WAAW,aACd,IAAI,CAAC,SAAS,aAAa,MAAMC,eAAaH,OAAK,aAAa,IAAI,GAAG,MAAM,CAAC,CAAC,EAC/E,OAAO,CAAC,YAAsC,YAAY,IAAI;AAEjE,QAAM,iBAAiB,QAAQ,SAAS,IAAI,CAAC,YAAY,QAAQ,QAAQ,CAAC;AAC1E,QAAM,UAAoB,CAAC;AAE3B,QAAM,WAAW;AAAA;AAAA,iBAEF,SAAS,MAAM;AAAA;AAAA;AAAA,EAG9B,eAAe,IAAI,CAAC,CAAC,UAAU,KAAK,MAAM,KAAK,QAAQ,KAAK,KAAK,EAAE,EAAE,KAAK,IAAI,CAAC;AAAA;AAAA;AAAA,EAG/E,SACC,MAAM,EACN,KAAK,CAAC,GAAG,MAAM,EAAE,aAAa,EAAE,cAAc,EAAE,QAAQ,EAAE,KAAK,EAC/D,MAAM,GAAG,EAAE,EACX,IAAI,CAAC,YAAY,KAAK,QAAQ,QAAQ,KAAK,QAAQ,QAAQ,OAAO,QAAQ,UAAU,IAAI,OAAO,KAAK,QAAQ,KAAK,EAAE,SAAS,CAAC,EAAE,EAC/H,KAAK,IAAI,CAAC;AAAA;AAAA;AAAA,EAGX,QAAQ,SAAS,QAAQ,CAAC,YAAY,QAAQ,eAAe,CAAC,EAC7D,MAAM,GAAG,EAAE,EACX,IAAI,CAAC,CAAC,UAAU,KAAK,MAAM,KAAK,QAAQ,KAAK,KAAK,GAAG,EACrD,KAAK,IAAI,CAAC;AAAA;AAAA;AAAA,EAGX,QAAQ,SAAS,QAAQ,CAAC,YAAY,QAAQ,aAAa,CAAC,EAC3D,MAAM,GAAG,EAAE,EACX,IAAI,CAAC,CAAC,UAAU,KAAK,MAAM,KAAK,QAAQ,KAAK,KAAK,GAAG,EACrD,KAAK,IAAI,CAAC;AAAA;AAGX,QAAM,eAAeA,OAAK,KAAK,YAAY,aAAa,kBAAkB;AAC1E,YAAU,cAAc,QAAQ;AAChC,UAAQ,KAAK,YAAY;AAEzB,aAAW,CAAC,QAAQ,MAAM,KAAK,OAAO,QAAQ,eAAe,GAAG;AAC9D,UAAM,aAAgC,OAAO;AAC7C,UAAM,iBAAiB,SAAS,OAAO,CAAC,YAAY,WAAW,SAAS,QAAQ,QAAQ,CAAC;AACzF,UAAM,OAAOA,OAAK,KAAK,YAAY,aAAa,GAAG,MAAM,KAAK;AAC9D,UAAMI,WAAU,KAAK,OAAO,KAAK;AAAA;AAAA,iBAEpB,eAAe,MAAM;AAAA;AAAA;AAAA,EAGpC,OAAO,UAAU,IAAI,CAAC,QAAQ,KAAK,GAAG,EAAE,EAAE,KAAK,IAAI,CAAC;AAAA;AAAA;AAAA,oCAGlB,aAAa,gBAAgB,OAAO,SAAS,CAAC;AAAA,6BACrD,eAAe,MAAM;AAAA;AAAA;AAAA,EAGhD,eAAe,gBAAgB,OAAO,SAAS,KAAK,yBAAyB;AAAA;AAAA;AAAA,EAG7E,QAAQ,eAAe,QAAQ,CAAC,YAAY,QAAQ,eAAe,CAAC,EACnE,MAAM,GAAG,CAAC,EACV,IAAI,CAAC,CAAC,UAAU,KAAK,MAAM,KAAK,QAAQ,KAAK,KAAK,GAAG,EACrD,KAAK,IAAI,KAAK,mCAAmC;AAAA;AAAA;AAAA,EAGlD,QAAQ,eAAe,QAAQ,CAAC,YAAY,QAAQ,aAAa,CAAC,EACjE,MAAM,GAAG,CAAC,EACV,IAAI,CAAC,CAAC,UAAU,KAAK,MAAM,KAAK,QAAQ,KAAK,KAAK,GAAG,EACrD,KAAK,IAAI,KAAK,8BAA8B;AAAA;AAAA;AAAA,EAG7C,eACC,MAAM,EACN,KAAK,CAAC,GAAG,MAAM,SAAS,GAAG,OAAO,SAAS,IAAI,SAAS,GAAG,OAAO,SAAS,CAAC,EAC5E,MAAM,GAAG,EAAE,EACX,IAAI,CAAC,YAAY,uBAAuB,QAAQ,IAAI,EAAE,EACtD,KAAK,IAAI,CAAC;AAAA;AAGT,cAAU,MAAMA,QAAO;AACvB,YAAQ,KAAK,IAAI;AAAA,EACnB;AAEA,SAAO;AACT;AAEO,SAAS,eAAe,KAAqB;AAClD,QAAM,SAAS;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAYf,QAAM,OAAOJ,OAAK,KAAK,YAAY,qBAAqB;AACxD,YAAU,MAAM,MAAM;AACtB,SAAO;AACT;;;AC5NA,IAAM,0BAA0B,CAAC,WAAW,WAAW,SAAS,mBAAmB;AAEnF,SAAS,qBAAqB,OAAsD;AAClF,MAAI,OAAO,UAAU,YAAa,wBAA8C,SAAS,KAAK,GAAG;AAC/F,WAAO;AAAA,EACT;AACA,QAAM,IAAI,MAAM,6CAA6C,wBAAwB,KAAK,IAAI,CAAC,EAAE;AACnG;AAEA,SAAS,aAAa,OAAqD;AACzE,MAAI,UAAU,QAAS,QAAO;AAC9B,MAAI,UAAU,oBAAqB,QAAO;AAC1C,SAAO;AACT;AAEO,SAAS,uBAAqD;AACnE,SAAO,EAAE,eAAe,GAAG,OAAO,CAAC,EAAE;AACvC;AAEO,SAAS,oBAAoB,KAAa,cAAoD;AACnG,QAAM,SAAS,aAAsB,KAAK,YAAY,KAAK,qBAAqB;AAChF,QAAM,SAAS,wBAAwB,UAAU,MAAM;AACvD,MAAI,CAAC,OAAO,SAAS;AACnB,UAAM,IAAI,MAAM,WAAW,YAAY,KAAK,qBAAqB,OAAO,KAAK,EAAE,KAAK,IAAI,CAAC,EAAE;AAAA,EAC7F;AACA,SAAO,OAAO;AAChB;AAEO,SAAS,sBAAsB,KAAmB;AACvD,mBAAiB,GAAG;AACpB,aAAW,QAAQ,CAAC,oBAAoB,kBAAkB,uBAAuB,GAAG;AAClF,QAAI,CAAC,aAAsB,KAAK,IAAI,EAAG,eAAc,KAAK,MAAM,qBAAqB,CAAC;AAAA,EACxF;AACF;AAEO,SAAS,cAAc,KAAa,SAA4D;AACrG,QAAM,QAAQ,qBAAqB,QAAQ,KAAK;AAChD,wBAAsB,GAAG;AACzB,QAAM,aAAa,aAAa,KAAK;AACrC,QAAM,QAAQ,oBAAoB,KAAK,UAAU;AACjD,QAAM,KAAK,QAAQ,MAAM,SAAS,QAAQ,IAAI,EAAE,MAAM,GAAG,EAAE;AAC3D,QAAM,OAAoC;AAAA,IACxC;AAAA,IACA;AAAA,IACA,QAAQ,UAAU,sBAAsB,aAAa;AAAA,IACrD,MAAM,gBAAgB,QAAQ,IAAI;AAAA,IAClC,GAAI,QAAQ,UAAU,EAAE,SAAS,QAAQ,SAAS,iBAAiB,CAAC,QAAQ,OAAO,EAAE,IAAI,CAAC;AAAA,IAC1F,GAAI,QAAQ,kBAAkB,EAAE,iBAAiB,QAAQ,gBAAgB,IAAI,CAAC;AAAA,IAC9E,WAAW,OAAO;AAAA,IAClB,YAAY;AAAA,EACd;AACA,QAAM,SAAS,wBAAwB,MAAM,EAAE,GAAG,OAAO,OAAO,CAAC,GAAG,MAAM,MAAM,OAAO,CAAC,SAAS,KAAK,OAAO,EAAE,GAAG,IAAI,EAAE,CAAC;AACzH,gBAAc,KAAK,YAAY,MAAM;AACrC,SAAO;AACT;AAEO,SAAS,gBAAgB,KAAmC;AACjE,wBAAsB,GAAG;AACzB,SAAO;AAAA,IACL,SAAS,oBAAoB,KAAK,kBAAkB,EAAE;AAAA,IACtD,OAAO,oBAAoB,KAAK,gBAAgB,EAAE;AAAA,IAClD,UAAU,oBAAoB,KAAK,uBAAuB,EAAE;AAAA,EAC9D;AACF;AAEO,SAAS,gBAAgB,KAAa,IAAyC;AACpF,wBAAsB,GAAG;AACzB,aAAW,QAAQ,CAAC,oBAAoB,kBAAkB,uBAAuB,GAAG;AAClF,UAAM,QAAQ,oBAAoB,KAAK,IAAI;AAC3C,UAAM,QAAQ,MAAM,MAAM,UAAU,CAAC,SAAS,KAAK,OAAO,EAAE;AAC5D,QAAI,UAAU,GAAI;AAClB,UAAM,UAAU,MAAM,MAAM,KAAK;AACjC,QAAI,CAAC,QAAS;AACd,UAAM,EAAE,WAAW,YAAY,QAAQ,SAAS,GAAG,KAAK,IAAI;AAC5D,UAAM,UAAuC;AAAA,MAC3C,GAAG;AAAA,MACH,QAAQ;AAAA,MACR,YAAY,OAAO;AAAA,IACrB;AACA,UAAM,MAAM,KAAK,IAAI;AACrB,kBAAc,KAAK,MAAM,wBAAwB,MAAM,KAAK,CAAC;AAC7D,WAAO;AAAA,EACT;AACA,QAAM,IAAI,MAAM,yBAAyB,EAAE,EAAE;AAC/C;AAEO,SAAS,iBAAiB,KAAa,IAAY,QAA6C;AACrG,wBAAsB,GAAG;AACzB,aAAW,QAAQ,CAAC,oBAAoB,kBAAkB,uBAAuB,GAAG;AAClF,UAAM,QAAQ,oBAAoB,KAAK,IAAI;AAC3C,UAAM,QAAQ,MAAM,MAAM,UAAU,CAAC,SAAS,KAAK,OAAO,EAAE;AAC5D,QAAI,UAAU,GAAI;AAClB,UAAM,UAAU,MAAM,MAAM,KAAK;AACjC,QAAI,CAAC,QAAS;AACd,UAAM,UAAuC;AAAA,MAC3C,GAAG;AAAA,MACH,QAAQ;AAAA,MACR,WAAW,OAAO;AAAA,MAClB;AAAA,IACF;AACA,UAAM,MAAM,KAAK,IAAI;AACrB,kBAAc,KAAK,MAAM,wBAAwB,MAAM,KAAK,CAAC;AAC7D,WAAO;AAAA,EACT;AACA,QAAM,IAAI,MAAM,yBAAyB,EAAE,EAAE;AAC/C;AAEO,SAAS,0BAA0B,KAAa,IAAyC;AAC9F,QAAM,MAAM,gBAAgB,GAAG;AAC/B,QAAM,QAAQ,CAAC,GAAG,IAAI,SAAS,GAAG,IAAI,KAAK,EAAE,KAAK,CAAC,SAAS,KAAK,OAAO,EAAE;AAC1E,MAAI,CAAC,MAAO,OAAM,IAAI,MAAM,yBAAyB,EAAE,EAAE;AACzD,SAAO,cAAc,KAAK;AAAA,IACxB,OAAO;AAAA,IACP,MAAM,MAAM;AAAA,IACZ,GAAI,MAAM,UAAU,EAAE,SAAS,MAAM,QAAQ,IAAI,CAAC;AAAA,IAClD,GAAI,MAAM,kBAAkB,EAAE,iBAAiB,MAAM,gBAAgB,IAAI,CAAC;AAAA,IAC1E,IAAI,GAAG,MAAM,EAAE;AAAA,EACjB,CAAC;AACH;;;ACjJA,SAAS,cAAAK,cAAY,gBAAAC,gBAAc,eAAAC,cAAa,YAAAC,iBAAgB;AAChE,SAAS,QAAAC,cAAY;AAkDrB,SAAS,WAAW,WAA2B;AAC7C,SAAO,GAAG,oBAAoB,IAAI,SAAS,SAAS,CAAC;AACvD;AAEA,SAAS,gBAAgB,WAA2B;AAClD,SAAO,GAAG,WAAW,SAAS,CAAC;AACjC;AAEA,SAAS,WAAW,WAA2B;AAC7C,SAAO,GAAG,WAAW,SAAS,CAAC;AACjC;AAEA,SAAS,UAAU,WAA2B;AAC5C,SAAO,GAAG,WAAW,SAAS,CAAC;AACjC;AAEA,SAAS,eAAe,WAA2B;AACjD,SAAO,GAAG,WAAW,SAAS,CAAC;AACjC;AAEA,SAAS,2BAA2B,KAAa,YAAmE;AAClH,QAAM,SAAS,aAAiF,KAAK,2BAA2B;AAChI,QAAM,WAAW,QAAQ,WAAW,KAAK,CAAC,SAAS,KAAK,OAAO,UAAU;AACzE,UAAQ,UAAU,mBAAmB,CAAC,YAAY,QAAQ,uBAAuB,GAAG,IAAI,CAAC,UAAU;AAAA,IACjG;AAAA,IACA,QAAQ;AAAA,EACV,EAAE;AACJ;AAEO,SAAS,aAAa,KAAa,SAAoD;AAC5F,mBAAiB,GAAG;AACpB,QAAM,cAAa,oBAAI,KAAK,GAAE,YAAY,EAAE,MAAM,GAAG,EAAE;AACvD,QAAM,YAAY,SAAS,GAAG,UAAU,IAAI,QAAQ,KAAK,EAAE;AAC3D,QAAM,MAAM,OAAO;AACnB,QAAM,aAAa,QAAQ,cAAc;AACzC,QAAMC,WAAsC;AAAA,IAC1C,eAAe;AAAA,IACf;AAAA,IACA,OAAO,QAAQ;AAAA,IACf,WAAW;AAAA,IACX,WAAW;AAAA,IACX,QAAQ;AAAA,IACR;AAAA,IACA,SAAS,QAAQ,WAAW,QAAQ;AAAA,IACpC,gBAAgB,QAAQ,kBAAkB,CAAC;AAAA,IAC3C,eAAe;AAAA,IACf,aAAa;AAAA,IACb,eAAe,QAAQ,iBAAiB;AAAA,IACxC,iBAAiB,2BAA2B,KAAK,UAAU;AAAA,EAC7D;AAEA,gBAAc,KAAK,gBAAgB,SAAS,GAAG,sBAAsB,MAAMA,QAAO,CAAC;AACnF,gBAAc,KAAK,qBAAqB,GAAG,SAAS;AAAA,CAAI;AACxD,qBAAmB,KAAK,WAAW;AAAA,IACjC,MAAM;AAAA,IACN,WAAW;AAAA,IACX,SAAS;AAAA,IACT,MAAM,WAAW,UAAU,aAAa,QAAQ,KAAK;AAAA,EACvD,CAAC;AACD,SAAO,EAAE,WAAW,aAAa,WAAW,SAAS,EAAE;AACzD;AAEO,SAAS,aAAa,KAA2C;AACtE,QAAM,OAAOC,OAAK,KAAK,oBAAoB;AAC3C,MAAI,CAACC,aAAW,IAAI,EAAG,QAAO,CAAC;AAC/B,SAAOC,aAAY,IAAI,EACpB,OAAO,CAAC,UAAU,UAAU,QAAQ,EACpC,IAAI,CAAC,UAAUF,OAAK,MAAM,OAAO,cAAc,CAAC,EAChD,OAAO,CAAC,SAASC,aAAW,IAAI,KAAKE,UAAS,IAAI,EAAE,OAAO,CAAC,EAC5D,IAAI,CAAC,SAAS,sBAAsB,MAAM,KAAK,MAAMC,eAAa,MAAM,MAAM,CAAC,CAAY,CAAC,EAC5F,KAAK,CAAC,GAAG,MAAM,EAAE,UAAU,cAAc,EAAE,SAAS,CAAC;AAC1D;AAEO,SAAS,mBAAmB,KAAqB;AACtD,QAAM,SAAS,aAAa,KAAK,mBAAmB,GAAG,KAAK;AAC5D,MAAI,CAAC,OAAQ,OAAM,IAAI,MAAM,oEAAoE;AACjG,SAAO,SAAS,MAAM;AACxB;AAEO,SAAS,YAAY,KAAa,YAAY,mBAAmB,GAAG,GAA+B;AACxG,QAAM,SAAS,aAAsB,KAAK,gBAAgB,SAAS,CAAC;AACpE,QAAM,SAAS,sBAAsB,UAAU,MAAM;AACrD,MAAI,CAAC,OAAO,QAAS,OAAM,IAAI,MAAM,WAAW,gBAAgB,SAAS,CAAC,KAAK,qBAAqB,OAAO,KAAK,EAAE,KAAK,IAAI,CAAC,EAAE;AAC9H,SAAO,OAAO;AAChB;AAEO,SAAS,kBAAkB,KAAa,YAAY,mBAAmB,GAAG,GAAgC;AAC/G,SAAO,cAAc,KAAK,WAAW,SAAS,CAAC,EAAE,IAAI,CAAC,OAAO,UAAU;AACrE,UAAM,SAAS,qBAAqB,UAAU,KAAK;AACnD,QAAI,CAAC,OAAO,SAAS;AACnB,YAAM,IAAI,MAAM,WAAW,WAAW,SAAS,CAAC,SAAS,QAAQ,CAAC,KAAK,qBAAqB,OAAO,KAAK,EAAE,KAAK,IAAI,CAAC,EAAE;AAAA,IACxH;AACA,WAAO,OAAO;AAAA,EAChB,CAAC;AACH;AAEA,SAAS,aAAa,KAAaL,UAA2C;AAC5E,gBAAc,KAAK,gBAAgBA,SAAQ,SAAS,GAAG,sBAAsB,MAAMA,QAAO,CAAC;AAC7F;AAEO,SAAS,mBAAmB,KAAa,WAAmB,OAA6D;AAC9H,QAAM,SAAS,qBAAqB,MAAM,YAAY,KAAK,CAAC;AAC5D,iBAAe,KAAK,WAAW,SAAS,GAAG,MAAM;AACjD,QAAMA,WAAU,YAAY,KAAK,SAAS;AAC1C,QAAM,UAAsC;AAAA,IAC1C,GAAGA;AAAA,IACH,WAAW,OAAO;AAAA,EACpB;AACA,MAAI,OAAO,QAAS,SAAQ,gBAAgB,OAAO;AACnD,MAAI,OAAO,SAAS,aAAa,OAAO,WAAW;AACjD,YAAQ,gBAAgB,OAAO;AAC/B,YAAQ,cAAc,OAAO;AAAA,EAC/B;AACA,MAAI,OAAO,SAAS,4BAA4B,OAAO,OAAQ,SAAQ,SAAS,OAAO;AACvF,eAAa,KAAK,OAAO;AACzB,SAAO;AACT;AAEA,SAAS,YAAY,OAA6D;AAChF,SAAO;AAAA,IACL,GAAG;AAAA,IACH,GAAI,MAAM,OAAO,EAAE,MAAM,gBAAgB,MAAM,IAAI,EAAE,IAAI,CAAC;AAAA,IAC1D,GAAI,MAAM,WAAW,EAAE,UAAU,gBAAgB,MAAM,QAAQ,EAAE,IAAI,CAAC;AAAA,IACtE,GAAI,MAAM,OAAO,EAAE,MAAM,gBAAgB,MAAM,IAAI,EAAE,IAAI,CAAC;AAAA,IAC1D,GAAI,MAAM,QAAQ,EAAE,OAAO,gBAAgB,MAAM,KAAK,EAAE,IAAI,CAAC;AAAA,IAC7D,GAAI,MAAM,UAAU,EAAE,SAAS,gBAAgB,MAAM,OAAO,EAAE,IAAI,CAAC;AAAA,IACnE,GAAI,MAAM,aAAa,EAAE,YAAY,gBAAgB,MAAM,UAAU,EAAE,IAAI,CAAC;AAAA,IAC5E,GAAI,MAAM,WAAW,EAAE,UAAU,MAAM,SAAS,IAAI,eAAe,EAAE,IAAI,CAAC;AAAA,EAC5E;AACF;AAEO,SAAS,WAAW,KAAa,SAAiB,MAAyC;AAChG,SAAO,mBAAmB,KAAK,mBAAmB,GAAG,GAAG,EAAE,MAAM,iBAAiB,WAAW,OAAO,GAAG,SAAS,KAAK,CAAC;AACvH;AAEO,SAAS,eAAe,KAAa,SAAiB,UAAkB,MAA0C;AACvH,SAAO,mBAAmB,KAAK,mBAAmB,GAAG,GAAG;AAAA,IACtD,MAAM;AAAA,IACN,WAAW,OAAO;AAAA,IAClB;AAAA,IACA;AAAA,IACA,GAAI,OAAO,EAAE,KAAK,IAAI,CAAC;AAAA,EACzB,CAAC;AACH;AAEO,SAAS,cAAc,KAAa,SAAoD;AAC7F,SAAO,mBAAmB,KAAK,mBAAmB,GAAG,GAAG;AAAA,IACtD,MAAM;AAAA,IACN,WAAW,OAAO;AAAA,IAClB,aAAa,QAAQ;AAAA,IACrB,WAAW,QAAQ;AAAA,IACnB,UAAU,QAAQ;AAAA,IAClB,MAAM,QAAQ;AAAA,IACd,UAAU,QAAQ,YAAY,CAAC;AAAA,EACjC,CAAC;AACH;AAEO,SAAS,iBACd,KACA,SAC2B;AAC3B,QAAM,YAAY,mBAAmB,GAAG;AACxC,QAAMM,cACJ,QAAQ,UAAU,YACd,SACA,cAAc,KAAK;AAAA,IACjB,OAAO,QAAQ;AAAA,IACf,MAAM,QAAQ;AAAA,IACd,GAAI,QAAQ,UAAU,EAAE,SAAS,QAAQ,QAAQ,IAAI,CAAC;AAAA,IACtD,iBAAiB;AAAA,EACnB,CAAC;AACP,SAAO,mBAAmB,KAAK,WAAW;AAAA,IACxC,MAAM;AAAA,IACN,WAAW,OAAO;AAAA,IAClB,GAAI,QAAQ,UAAU,EAAE,SAAS,QAAQ,QAAQ,IAAI,CAAC;AAAA,IACtD,OAAO,QAAQ;AAAA,IACf,MAAM,QAAQ;AAAA,IACd,GAAIA,cAAa,EAAE,cAAcA,YAAW,GAAG,IAAI,CAAC;AAAA,EACtD,CAAC;AACH;AAEO,SAAS,eAAe,KAAa,MAAc,MAA0C;AAClG,QAAM,eAAe,6BAA6B,KAAK,IAAI;AAC3D,SAAO,mBAAmB,KAAK,mBAAmB,GAAG,GAAG;AAAA,IACtD,MAAM;AAAA,IACN,WAAW,OAAO;AAAA,IAClB;AAAA,IACA,GAAI,OAAO,EAAE,OAAO,KAAK,IAAI,CAAC;AAAA,EAChC,CAAC;AACH;AAEO,SAAS,mBAAmB,KAAa,SAAiB,QAAqC,OAA2C;AAC/I,SAAO,mBAAmB,KAAK,mBAAmB,GAAG,GAAG;AAAA,IACtD,MAAM;AAAA,IACN,WAAW,OAAO;AAAA,IAClB;AAAA,IACA;AAAA,IACA,GAAI,QAAQ,EAAE,MAAM,IAAI,CAAC;AAAA,EAC3B,CAAC;AACH;AAEO,SAAS,qBACd,KACA,MACA,QACA,UAC2B;AAC3B,QAAM,cAAc,KAAK,KAAK;AAC9B,MAAI,CAAC,YAAa,OAAM,IAAI,MAAM,mCAAmC;AACrE,QAAM,YAAY,mBAAmB,GAAG;AACxC,QAAMN,WAAU,YAAY,KAAK,SAAS;AAC1C,QAAM,MAAM,OAAO;AACnB,QAAM,SAAS;AAAA,IACb,MAAM;AAAA,IACN;AAAA,IACA,GAAI,WAAW,EAAE,UAAU,gBAAgB,QAAQ,EAAE,IAAI,CAAC;AAAA,EAC5D;AACA,QAAM,cAAcA,SAAQ,gBAAgB,UAAU,CAAC,SAAS,KAAK,SAAS,WAAW;AACzF,QAAM,kBACJ,gBAAgB,KACZ,CAAC,GAAGA,SAAQ,iBAAiB,MAAM,IACnCA,SAAQ,gBAAgB,IAAI,CAAC,MAAM,UAAW,UAAU,cAAc,EAAE,GAAG,MAAM,GAAG,OAAO,IAAI,IAAK;AAC1G,eAAa,KAAK,EAAE,GAAGA,UAAS,iBAAiB,WAAW,IAAI,CAAC;AACjE,SAAO,mBAAmB,KAAK,WAAW;AAAA,IACxC,MAAM;AAAA,IACN,WAAW;AAAA,IACX,YAAY;AAAA,IACZ,cAAc;AAAA,IACd,GAAI,WAAW,EAAE,UAAU,CAAC,QAAQ,EAAE,IAAI,CAAC;AAAA,EAC7C,CAAC;AACH;AAEO,SAAS,aAAa,KAAa,QAAwF;AAChI,QAAM,YAAY,mBAAmB,GAAG;AACxC,qBAAmB,KAAK,WAAW;AAAA,IACjC,MAAM;AAAA,IACN,WAAW,OAAO;AAAA,IAClB;AAAA,IACA,MAAM,kBAAkB,MAAM;AAAA,EAChC,CAAC;AACD,SAAO,YAAY,KAAK,SAAS;AACnC;AAEO,SAAS,oBAAoB,KAAmC;AACrE,SAAO,cAAc,KAAK,mBAAmB,GAAG,CAAC;AACnD;AAEO,SAAS,cAAc,KAAa,WAAyC;AAClF,QAAMA,WAAU,YAAY,KAAK,SAAS;AAC1C,QAAM,SAAS,kBAAkB,KAAK,SAAS;AAC/C,QAAM,aAAa,OAAO;AAC1B,QAAM,UAAU,EAAE,GAAGA,UAAS,YAAY,WAAW,WAAW;AAChE,gBAAc,KAAK,UAAU,SAAS,GAAG,mBAAmB,SAAS,MAAM,CAAC;AAC5E,gBAAc,KAAK,eAAe,SAAS,GAAG,wBAAwB,SAAS,MAAM,CAAC;AACtF,eAAa,KAAK,OAAO;AACzB,SAAO,EAAE,WAAW,aAAa,WAAW,SAAS,EAAE;AACzD;AAEA,SAAS,mBAAmBA,UAAqC,QAA6C;AAC5G,QAAM,WAAW,OAAO,OAAO,CAAC,UAAU,MAAM,SAAS,SAAS;AAClE,QAAM,YAAY,OAAO,OAAO,CAAC,UAAU,MAAM,SAAS,oBAAoB,MAAM,SAAS,SAAS;AACtG,QAAM,cAAc,OAAO,OAAO,CAAC,UAAU,MAAM,SAAS,kBAAkB;AAC9E,QAAM,YAAY,OAAO,OAAO,CAAC,UAAU,MAAM,SAAS,mBAAmB;AAC7E,QAAM,eAAe,OAAO,OAAO,CAAC,UAAU,MAAM,SAAS,uBAAuB;AAEpF,SAAO,sBAAsB,mBAAmBA,SAAQ,KAAK,CAAC;AAAA;AAAA,mBAE7C,WAAWA,SAAQ,SAAS,CAAC,sBAAsBA,SAAQ,cAAcA,SAAQ,SAAS;AAAA;AAAA;AAAA;AAAA,aAIhGA,SAAQ,SAAS;AAAA,cAChBA,SAAQ,UAAU;AAAA,YACpBA,SAAQ,MAAM;AAAA,kBACRA,SAAQ,iBAAiB,MAAM;AAAA,gBACjCA,SAAQ,eAAe,MAAM;AAAA,oBACzBA,SAAQ,aAAa;AAAA,aAC5B,mBAAmBA,SAAQ,OAAO,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA,EAK9C,mBAAmB,QAAQ,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAO5B,UAAU,IAAI,iBAAiB,EAAE,KAAK,IAAI,KAAK,iDAAiD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAMhG,YAAY,IAAI,CAAC,UAAU,KAAK,MAAM,SAAS,SAAS,MAAM,wBAAwB,MAAM,WAAW,KAAK,CAAC,MAAM,wBAAwB,MAAM,IAAI,CAAC,MAAM,MAAM,gBAAgB,cAAc,IAAI,EAAE,KAAK,IAAI,KAAK,wCAAwC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAM5PA,SAAQ,gBAAgB,IAAI,CAAC,WAAW,KAAK,wBAAwB,OAAO,IAAI,CAAC,MAAM,OAAO,MAAM,MAAM,wBAAwB,OAAO,QAAQ,CAAC,IAAI,EAAE,KAAK,IAAI,CAAC;AAAA;AAAA;AAAA;AAAA,EAIlK,aAAa,UAAU,IAAI,CAAC,UAAU,GAAG,MAAM,YAAY,GAAG,MAAM,QAAQ,MAAM,MAAM,KAAK,KAAK,EAAE,EAAE,CAAC,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAMxG,aAAa,IAAI,CAAC,UAAU,KAAK,wBAAwB,MAAM,OAAO,CAAC,MAAM,MAAM,UAAU,SAAS,MAAM,wBAAwB,MAAM,KAAK,CAAC,IAAI,EAAE,KAAK,IAAI,KAAK,kEAAkE;AAAA;AAAA;AAAA;AAAA,EAItO,kBAAkBA,UAAS,YAAY,CAAC;AAAA;AAE1C;AAEA,SAAS,kBAAkB,OAA0C;AACnE,MAAI,MAAM,SAAS,WAAW;AAC5B,WAAO,KAAK,wBAAwB,GAAG,MAAM,eAAe,SAAS,OAAO,MAAM,aAAa,SAAS,EAAE,CAAC,MAAM,wBAAwB,MAAM,QAAQ,CAAC,MAAM,wBAAwB,MAAM,IAAI,CAAC,MAAM,wBAAwB,MAAM,UAAU,KAAK,IAAI,CAAC,CAAC;AAAA,EAC5P;AACA,SAAO,KAAK,wBAAwB,MAAM,WAAW,SAAS,CAAC,MAAM,wBAAwB,MAAM,QAAQ,CAAC,MAAM,wBAAwB,MAAM,IAAI,CAAC,MAAM,wBAAwB,MAAM,UAAU,KAAK,IAAI,CAAC,CAAC;AAChN;AAEA,SAAS,mBAAmB,UAA+C;AACzE,MAAI,SAAS,WAAW,EAAG,QAAO;AAClC,QAAM,QAAQ,CAAC,cAAc;AAC7B,aAAW,WAAW,UAAU;AAC9B,UAAM,OAAO,WAAW,QAAQ,eAAe,SAAS;AACxD,UAAM,KAAK,WAAW,QAAQ,aAAa,SAAS;AACpD,UAAM,KAAK,KAAK,IAAI,KAAK,iBAAiB,QAAQ,eAAe,SAAS,CAAC,UAAU,EAAE,KAAK,iBAAiB,QAAQ,aAAa,SAAS,CAAC,IAAI;AAAA,EAClJ;AACA,SAAO,MAAM,KAAK,IAAI;AACxB;AAEA,SAAS,WAAW,OAAuB;AACzC,QAAM,KAAK,MAAM,QAAQ,kBAAkB,GAAG;AAC9C,SAAO,MAAM;AACf;AAEA,SAAS,iBAAiB,OAAuB;AAC/C,QAAM,QAAQ,gBAAgB,KAAK,EAChC,QAAQ,uBAAuB,GAAG,EAClC,QAAQ,QAAQ,GAAG,EACnB,KAAK;AACR,SAAO,SAAS;AAClB;AAEA,SAAS,kBAAkBA,UAAqC,cAAmD;AACjH,QAAM,iBAAiBA,SAAQ,gBAAgB,OAAO,CAAC,WAAW,OAAO,WAAW,aAAa,OAAO,WAAW,SAAS;AAC5H,QAAM,UAAU;AAAA,IACd,GAAG,eAAe,IAAI,CAAC,WAAW,6BAA6B,OAAO,IAAI,GAAG;AAAA,IAC7E,GAAI,aAAa,WAAW,IAAI,CAAC,0DAA0D,IAAI,CAAC;AAAA,IAChG,GAAIA,SAAQ,cAAc,CAAC,iBAAiBA,SAAQ,WAAW,GAAG,IAAI,CAAC;AAAA,EACzE;AACA,SAAO,aAAa,OAAO;AAC7B;AAEA,SAAS,wBAAwBA,UAAqC,QAA6C;AACjH,QAAM,UAAU,oBAAI,IAAyC;AAC7D,aAAW,SAAS,QAAQ;AAC1B,UAAM,MAAM,MAAM,WAAW,MAAM,eAAe;AAClD,YAAQ,IAAI,KAAK,CAAC,GAAI,QAAQ,IAAI,GAAG,KAAK,CAAC,GAAI,KAAK,CAAC;AAAA,EACvD;AACA,QAAM,WAAW,CAAC,GAAG,QAAQ,QAAQ,CAAC,EACnC,IAAI,CAAC,CAAC,SAAS,WAAW,MAAM;AAC/B,UAAM,OAAO,YAAY,IAAI,CAAC,UAAU;AACtC,YAAMO,UACJ,MAAM,QACN,MAAM,YACN,MAAM,WACN,MAAM,iBACL,MAAM,aAAa,GAAG,MAAM,UAAU,KAAK,MAAM,gBAAgB,EAAE,KAAK,WACzE,MAAM,UACN;AACF,aAAO,KAAK,MAAM,SAAS,MAAM,MAAM,IAAI,OAAO,mBAAmBA,OAAM,CAAC;AAAA,IAC9E,CAAC;AACD,WAAO,MAAM,mBAAmB,OAAO,CAAC;AAAA;AAAA,EAAO,KAAK,KAAK,IAAI,CAAC;AAAA,EAChE,CAAC,EACA,KAAK,MAAM;AAEd,SAAO,iBAAiB,mBAAmBP,SAAQ,KAAK,CAAC;AAAA;AAAA,mBAExC,WAAWA,SAAQ,SAAS,CAAC;AAAA;AAAA,EAE9C,YAAY,qBAAqB;AAAA;AAEnC;;;AC7YO,SAAS,mBAAmB,KAAuC;AACxE,mBAAiB,GAAG;AACpB,QAAM,aAAa,OAAO;AAC1B,QAAMQ,WAAU,mBAAmB,GAAG;AACtC,QAAM,kBAAkB,aAAa,KAAK,UAAU;AACpD,QAAM,cAAc,gBAAgB,GAAG;AACvC,QAAM,WAAW,aAAa,GAAG,EAAE,IAAI,CAACC,aAAY;AAClD,UAAM,SAAS,kBAAkB,KAAKA,SAAQ,SAAS;AACvD,WAAO;AAAA,MACL,SAAAA;AAAA,MACA;AAAA,MACA,WAAW,GAAG,oBAAoB,IAAI,SAASA,SAAQ,SAAS,CAAC;AAAA,MACjE,gBAAgB,GAAG,oBAAoB,IAAI,SAASA,SAAQ,SAAS,CAAC;AAAA,MACtE,QAAQ,OAAO,OAAO,QAAQ,CAAC,UAAU,CAAC,MAAM,SAAS,MAAM,aAAa,MAAM,SAAS,EAAE,OAAO,OAAO,CAAa,CAAC;AAAA,IAC3H;AAAA,EACF,CAAC;AACD,QAAM,OAAyB;AAAA,IAC7B,aAAa;AAAA,IACb,SAAAD;AAAA,IACA;AAAA,IACA;AAAA,IACA,iBAAiB,aAAa,KAAK,mBAAmB,GAAG,KAAK,KAAK;AAAA,IACnE;AAAA,EACF;AACA,QAAM,eAAe,WAAW,IAAI;AACpC,QAAM,OAAO,uBAAuB,YAAY;AAChD,MAAI,qBAAqB,IAAI,GAAG;AAC9B,UAAM,IAAI,MAAM,sGAAsG;AAAA,EACxH;AACA,gBAAc,KAAK,oBAAoB,IAAI;AAC3C,SAAO,EAAE,YAAY,oBAAoB,cAAc,SAAS,QAAQ,WAAW;AACrF;AAEA,SAAS,mBAAmB,KAAsB;AAChD,QAAM,MAAM,aAAsB,KAAK,YAAY;AACnD,MAAI,CAAC,IAAK,QAAO;AACjB,SAAO,uBAAuB,MAAM,GAAG;AACzC;AAEA,SAAS,WAAW,OAAyB;AAC3C,MAAI,OAAO,UAAU,SAAU,QAAO,gBAAgB,KAAK;AAC3D,MAAI,MAAM,QAAQ,KAAK,EAAG,QAAO,MAAM,IAAI,UAAU;AACrD,MAAI,SAAS,OAAO,UAAU,UAAU;AACtC,WAAO,OAAO,YAAY,OAAO,QAAQ,KAAK,EAAE,IAAI,CAAC,CAAC,KAAK,IAAI,MAAM,CAAC,KAAK,WAAW,IAAI,CAAC,CAAC,CAAC;AAAA,EAC/F;AACA,SAAO;AACT;AAEA,SAAS,uBAAuB,MAAgC;AAC9D,QAAM,eAAe,KAAK,SAAS;AACnC,QAAM,kBAAkB,KAAK,YAAY,QAAQ,SAAS,KAAK,YAAY,MAAM;AACjF,SAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,oCAoD2B,YAAY;AAAA,oCACZ,eAAe;AAAA,oCACf,WAAW,KAAK,WAAW,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,QAMxD,qBAAqB,IAAI,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,YAMtB,kBAAkB,IAAI,CAAC;AAAA;AAAA;AAAA;AAAA,YAIvB,wBAAwB,KAAK,QAAQ,CAAC;AAAA;AAAA;AAAA;AAAA,UAIxC,KAAK,SAAS,IAAI,oBAAoB,EAAE,KAAK,IAAI,CAAC;AAAA;AAAA;AAAA;AAAA,2DAID,gBAAgB,IAAI,CAAC;AAAA;AAAA;AAAA;AAIhF;AAEA,SAAS,qBAAqB,MAAgC;AAC5D,QAAMA,WAAU,KAAK;AAQrB,MAAI,CAACA,SAAS,QAAO;AACrB,SAAO;AAAA,iBACQ,WAAWA,SAAQ,eAAe,KAAK,CAAC,aAAa,WAAWA,SAAQ,kBAAkB,8BAA8B,CAAC;AAAA,iCACzG,WAAWA,SAAQ,mBAAmB,KAAK,CAAC,sBAAsB,WAAWA,SAAQ,iBAAiB,gBAAgB,CAAC;AAAA,SAC/I,YAAY,CAAC,GAAIA,SAAQ,cAAc,cAAc,CAAC,GAAI,GAAIA,SAAQ,cAAc,aAAa,CAAC,GAAIA,SAAQ,cAAc,cAAc,aAAa,EAAE,EAAE,OAAO,OAAO,CAAC,CAAC;AAAA,MAC9KA,SAAQ,eAAe,SAAS,0BAA0B,WAAWA,SAAQ,aAAa,CAAC,KAAK,EAAE;AAAA,8BAC1E,YAAY,GAAG,KAAK,kBAAkB,QAAQ,UAAU,KAAK,EAAE;AAAA;AAE7F;AAEA,SAAS,kBAAkB,MAAgC;AACzD,QAAM,QAAQ,CAAC,GAAG,KAAK,YAAY,SAAS,GAAG,KAAK,YAAY,KAAK,EAAE,OAAO,CAAC,SAAS,KAAK,WAAW,QAAQ;AAChH,MAAI,MAAM,WAAW,EAAG,QAAO;AAC/B,SAAO;AAAA;AAAA;AAAA,QAGD,MACC;AAAA,IACC,CAAC,SACC,WAAW,WAAW,KAAK,KAAK,CAAC,YAAY,WAAW,KAAK,WAAW,KAAK,iBAAiB,KAAK,IAAI,KAAK,KAAK,CAAC,YAAY,WAAW,KAAK,IAAI,CAAC;AAAA,EACvJ,EACC,KAAK,IAAI,CAAC;AAAA;AAAA;AAGnB;AAEA,SAAS,wBAAwB,UAAyC;AACxE,MAAI,SAAS,WAAW,EAAG,QAAO;AAClC,SAAO,0BAA0B,SAAS,IAAI,CAAC,SAAS,iBAAiB,OAAO,KAAK,QAAQ,SAAS,CAAC,KAAK,WAAW,KAAK,QAAQ,KAAK,CAAC,+BAA+B,WAAW,KAAK,QAAQ,MAAM,CAAC,MAAM,WAAW,KAAK,QAAQ,UAAU,CAAC,cAAc,EAAE,KAAK,EAAE,CAAC;AAC3Q;AAEA,SAAS,qBAAqB,MAAmC;AAC/D,QAAM,eAAe,KAAK,OAAO,OAAO,CAAC,UAAU,MAAM,SAAS,uBAAuB;AACzF,QAAM,cAAc,KAAK,OAAO,OAAO,CAAC,UAAU,MAAM,SAAS,kBAAkB;AACnF,QAAM,YAAY,KAAK,OAAO,OAAO,CAAC,UAAU,MAAM,SAAS,mBAAmB;AAClF,SAAO,qCAAqC,OAAO,KAAK,QAAQ,SAAS,CAAC;AAAA;AAAA,YAEhE,WAAW,KAAK,QAAQ,KAAK,CAAC;AAAA;AAAA,6BAEb,WAAW,KAAK,QAAQ,MAAM,CAAC;AAAA,6BAC/B,WAAW,KAAK,QAAQ,UAAU,CAAC;AAAA,6BACnC,KAAK,OAAO,MAAM;AAAA;AAAA;AAAA;AAAA,kCAIb,WAAW,KAAK,QAAQ,OAAO,CAAC;AAAA,kCAChC,WAAW,KAAK,SAAS,CAAC,MAAM,WAAW,KAAK,cAAc,CAAC;AAAA,gCACjE,eAAe,KAAK,QAAQ,KAAK,MAAM,CAAC;AAAA;AAAA;AAAA,UAG9D,mBAAmB,IAAI,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA,YAKtB,aAAa,SAAS,gBAAgB,YAAY,IAAI,gDAAgD;AAAA;AAAA;AAAA;AAAA,YAItG,YAAY,UAAU,UAAU,SAAS,gBAAgB,CAAC,GAAG,aAAa,GAAG,SAAS,CAAC,IAAI,4DAA4D;AAAA;AAAA;AAAA;AAAA;AAKnK;AAEA,SAAS,mBAAmB,MAAmC;AAC7D,MAAI,KAAK,OAAO,WAAW,EAAG,QAAO;AACrC,QAAM,UAAU,oBAAI,IAAyC;AAC7D,aAAW,SAAS,KAAK,QAAQ;AAC/B,UAAM,QAAQ,MAAM,WAAW,MAAM,eAAe;AACpD,YAAQ,IAAI,OAAO,CAAC,GAAI,QAAQ,IAAI,KAAK,KAAK,CAAC,GAAI,KAAK,CAAC;AAAA,EAC3D;AACA,SAAO,CAAC,GAAG,QAAQ,QAAQ,CAAC,EACzB;AAAA,IACC,CAAC,CAAC,OAAO,MAAM,MACb,0CAA0C,WAAW,KAAK,CAAC,KAAK,OAAO,MAAM,uCAAuC,gBAAgB,MAAM,CAAC;AAAA,EAC/I,EACC,KAAK,IAAI;AACd;AAEA,SAAS,gBAAgB,QAA6C;AACpE,SAAO,0BAA0B,OAAO,IAAI,CAAC,UAAU,aAAa,WAAW,MAAM,SAAS,CAAC,iBAAiB,WAAW,MAAM,IAAI,CAAC,YAAY,WAAW,YAAY,KAAK,CAAC,CAAC,OAAO,EAAE,KAAK,IAAI,CAAC;AACrM;AAEA,SAAS,YAAY,OAA0C;AAC7D,MAAI,MAAM,SAAS;AACjB,WAAO,GAAG,MAAM,eAAe,SAAS,OAAO,MAAM,aAAa,SAAS,KAAK,MAAM,YAAY,EAAE,UAAU,MAAM,QAAQ,EAAE;AAChI,MAAI,MAAM,SAAS,0BAA2B,QAAO,GAAG,MAAM,cAAc,QAAQ,KAAK,MAAM,gBAAgB,SAAS;AACxH,SAAO,MAAM,QAAQ,MAAM,YAAY,MAAM,WAAW,MAAM,gBAAgB,MAAM,UAAU;AAChG;AAEA,SAAS,eAAe,QAAqC,aAA+B;AAC1F,QAAM,WAAW,OAAO,OAAO,CAAC,UAAU,MAAM,SAAS,SAAS;AAClE,QAAM,SAAS,OAAO,CAAC,GAAG,aAAa,GAAG,SAAS,QAAQ,CAAC,UAAU,CAAC,MAAM,aAAa,MAAM,SAAS,EAAE,OAAO,OAAO,CAAa,CAAC,CAAC;AACxI,MAAI,OAAO,WAAW,GAAG;AACvB,WAAO;AAAA,EACT;AACA,QAAM,QAAQ,KAAK,IAAI,KAAK,OAAO,SAAS,GAAG;AAC/C,QAAM,IAAI;AACV,QAAM,YAAY,IAAI,IAAI,OAAO,IAAI,CAAC,OAAO,UAAU,CAAC,OAAO,EAAE,GAAG,KAAK,QAAQ,KAAK,EAAE,CAAC,CAAC,CAAC;AAC3F,QAAM,QAAQ,SACX,IAAI,CAAC,UAAU;AACd,UAAM,OAAO,UAAU,IAAI,MAAM,eAAe,EAAE;AAClD,UAAM,KAAK,UAAU,IAAI,MAAM,aAAa,EAAE;AAC9C,QAAI,CAAC,QAAQ,CAAC,GAAI,QAAO;AACzB,WAAO,aAAa,KAAK,IAAI,EAAE,SAAS,KAAK,CAAC,SAAS,GAAG,IAAI,EAAE,SAAS,GAAG,CAAC;AAAA,EAC/E,CAAC,EACA,KAAK,IAAI;AACZ,QAAM,QAAQ,OACX,IAAI,CAAC,UAAU;AACd,UAAM,WAAW,UAAU,IAAI,KAAK;AACpC,QAAI,CAAC,SAAU,QAAO;AACtB,WAAO,kBAAkB,SAAS,CAAC,SAAS,SAAS,CAAC,wEAAwE,SAAS,CAAC,QAAQ,SAAS,IAAI,EAAE,wDAAwD,cAAc,KAAK,CAAC;AAAA,EAC7O,CAAC,EACA,KAAK,IAAI;AACZ,SAAO,yCAAyC,KAAK;AAAA;AAAA,MAEjD,KAAK;AAAA,MACL,KAAK;AAAA;AAEX;AAEA,SAAS,YAAY,QAA0B;AAC7C,QAAM,UAAU,OAAO,OAAO,OAAO;AACrC,SAAO,QAAQ,SACX,QAAQ,IAAI,CAAC,UAAU,sBAAsB,WAAW,KAAK,CAAC,SAAS,EAAE,KAAK,EAAE,IAChF;AACN;AAEA,SAAS,WAAW,QAA0B;AAC5C,SAAO,OAAO,OAAO,IAAI,CAAC,UAAU,OAAO,WAAW,KAAK,CAAC,OAAO,EAAE,KAAK,EAAE,CAAC;AAC/E;AAEA,SAAS,OAAO,OAAuB;AACrC,SAAO,WAAW,SAAS,KAAK,CAAC;AACnC;AAEA,SAAS,WAAW,OAAmD;AACrE,SAAO,OAAO,SAAS,EAAE,EACtB,QAAQ,MAAM,OAAO,EACrB,QAAQ,MAAM,MAAM,EACpB,QAAQ,MAAM,MAAM,EACpB,QAAQ,MAAM,QAAQ,EACtB,QAAQ,MAAM,OAAO;AAC1B;AAEA,SAAS,cAAc,OAAuB;AAC5C,SAAO,WAAW,KAAK,EAAE,MAAM,GAAG,EAAE;AACtC;AAEA,SAAS,gBAAgB,OAAwB;AAC/C,SAAO,KAAK,UAAU,KAAK,EAAE,QAAQ,MAAM,SAAS,EAAE,QAAQ,MAAM,SAAS,EAAE,QAAQ,MAAM,SAAS;AACxG;;;ACpVA,SAAS,oBAAoB;AAEtB,SAAS,YAAY,KAAmB;AAC7C,QAAM,WAAW,QAAQ;AACzB,MAAI;AACF,QAAI,aAAa,UAAU;AACzB,mBAAa,QAAQ,CAAC,GAAG,GAAG,EAAE,OAAO,SAAS,CAAC;AAC/C;AAAA,IACF;AACA,QAAI,aAAa,SAAS;AACxB,mBAAa,OAAO,CAAC,MAAM,SAAS,IAAI,GAAG,GAAG,EAAE,OAAO,SAAS,CAAC;AACjE;AAAA,IACF;AACA,iBAAa,YAAY,CAAC,GAAG,GAAG,EAAE,OAAO,SAAS,CAAC;AAAA,EACrD,QAAQ;AACN,YAAQ,IAAI,kCAAkC,GAAG,EAAE;AAAA,EACrD;AACF;;;ACjBA,SAAS,uBAAuB;AA2BhC,eAAsB,iBAAiB,aAAa,MAAwB;AAC1E,MAAI,CAAC,QAAQ,MAAM,SAAS,CAAC,QAAQ,OAAO,MAAO,QAAO;AAC1D,QAAM,KAAK,gBAAgB,EAAE,OAAO,QAAQ,OAAO,QAAQ,QAAQ,OAAO,CAAC;AAC3E,QAAM,WAAW,aAAa,mCAAmC;AACjE,QAAM,SAAS,MAAM,IAAI,QAAgB,CAACE,aAAY;AACpD,OAAG,SAAS,UAAU,CAAC,UAAU;AAC/B,SAAG,MAAM;AACT,MAAAA,SAAQ,MAAM,KAAK,EAAE,YAAY,CAAC;AAAA,IACpC,CAAC;AAAA,EACH,CAAC;AACD,MAAI,CAAC,OAAQ,QAAO;AACpB,MAAI,WAAY,QAAO,WAAW,OAAO,WAAW;AACpD,SAAO,WAAW,OAAO,WAAW;AACtC;;;ACxCA,SAAS,oBAA4E;;;ACoC9E,IAAM,4BACX;AAEF,SAAS,WAAW,OAAyB;AAC3C,SAAO,MACJ,MAAM,OAAO,EACb,IAAI,CAACC,UAASA,MAAK,KAAK,CAAC,EACzB,OAAO,OAAO;AACnB;AAEA,SAAS,cAAc,QAA4B;AACjD,SAAO,CAAC,GAAG,IAAI,IAAI,OAAO,OAAO,OAAO,CAAC,CAAC;AAC5C;AAEO,SAAS,wBAAwBC,UAA0D;AAChG,SAAO;AAAA,IACL,aAAaA,SAAQ;AAAA,IACrB,eAAeA,SAAQ;AAAA,IACvB,aAAaA,SAAQ,aAAa;AAAA,IAClC,MAAM;AAAA,MACJ,gBAAgBA,SAAQ;AAAA,MACxB,iBAAiBA,SAAQ;AAAA,MACzB,iBAAiBA,SAAQ;AAAA,MACzB,kBAAkBA,SAAQ,iBAAiB,KAAK,IAAI;AAAA,MACpD,WAAWA,SAAQ;AAAA,MACnB,aAAaA,SAAQ;AAAA,MACrB,aAAaA,SAAQ,YAAY;AAAA,MACjC,SAASA,SAAQ,YAAY;AAAA,MAC7B,kBAAkBA,SAAQ,UAAU;AAAA,MACpC,OAAOA,SAAQ,UAAU,MAAM,KAAK,IAAI;AAAA,MACxC,YAAYA,SAAQ,UAAU,WAAW,KAAK,IAAI;AAAA,MAClD,eAAeA,SAAQ;AAAA,MACvB,OAAOA,SAAQ,OAAO,CAAC,KAAK;AAAA,IAC9B;AAAA,EACF;AACF;AAEO,SAAS,sBAAsB,KAAiC;AACrE,QAAMA,WAAU,mBAAmB,GAAG;AACtC,SAAO,wBAAwBA,QAAO;AACxC;AAEO,SAAS,sBAAsB,KAAa,SAAiD;AAClG,QAAM,OAAO,mBAAmB,GAAG;AACnC,QAAM,SAAS,cAAc,CAAC,QAAQ,MAAM,KAAK,GAAG,GAAG,KAAK,MAAM,CAAC;AACnE,QAAM,UAAuC;AAAA,IAC3C,GAAG;AAAA,IACH,gBAAgB,QAAQ,eAAe,KAAK;AAAA,IAC5C,iBAAiB,QAAQ,gBAAgB,KAAK,KAAK;AAAA,IACnD,iBAAiB,QAAQ,gBAAgB,KAAK;AAAA,IAC9C,kBAAkB,WAAW,QAAQ,gBAAgB;AAAA,IACrD,WAAW,QAAQ,UAAU,KAAK;AAAA,IAClC,aAAa,QAAQ,YAAY,KAAK;AAAA,IACtC,aAAa;AAAA,MACX,WAAW,QAAQ,YAAY,KAAK;AAAA,MACpC,OAAO,QAAQ,QAAQ,KAAK;AAAA,IAC9B;AAAA,IACA,WAAW;AAAA,MACT,kBAAkB,QAAQ,iBAAiB,KAAK;AAAA,MAChD,OAAO,WAAW,QAAQ,KAAK;AAAA,MAC/B,YAAY,WAAW,QAAQ,UAAU;AAAA,IAC3C;AAAA,IACA,eAAe,QAAQ;AAAA,IACvB;AAAA,IACA,gBAAgB,OAAO;AAAA,IACvB,UAAUC,gBAAe,CAAC,GAAG,KAAK,UAAU,EAAE,QAAQ,0BAA0B,MAAM,8DAA8D,CAAC,CAAC;AAAA,EACxJ;AACA,SAAO,oBAAoB,KAAK,OAAO;AACzC;AAEO,SAAS,6BAA6B,KAAmC;AAC9E,SAAO,mBAAmB,GAAG;AAC/B;AAEA,SAASA,gBAAe,OAAyF;AAC/G,QAAM,OAAO,oBAAI,IAAY;AAC7B,SAAO,MAAM,OAAO,CAAC,SAAS;AAC5B,UAAM,MAAM,GAAG,KAAK,MAAM,IAAI,KAAK,IAAI;AACvC,QAAI,KAAK,IAAI,GAAG,EAAG,QAAO;AAC1B,SAAK,IAAI,GAAG;AACZ,WAAO;AAAA,EACT,CAAC;AACH;AAEO,SAAS,sBAAsB,KAAgC;AACpE,MAAI,CAAC,OAAO,OAAO,QAAQ,UAAU;AACnC,UAAM,IAAI,MAAM,2CAA2C;AAAA,EAC7D;AACA,QAAM,OAAO;AACb,QAAM,gBAAgB,KAAK;AAC3B,MAAI,kBAAkB,oBAAoB,kBAAkB,uBAAuB,kBAAkB,2BAA2B;AAC9H,UAAM,IAAI,MAAM,sFAAsF;AAAA,EACxG;AACA,SAAO;AAAA,IACL,gBAAgB,OAAO,KAAK,kBAAkB,EAAE;AAAA,IAChD,iBAAiB,OAAO,KAAK,mBAAmB,EAAE;AAAA,IAClD,iBAAiB,OAAO,KAAK,mBAAmB,EAAE;AAAA,IAClD,kBAAkB,OAAO,KAAK,oBAAoB,EAAE;AAAA,IACpD,WAAW,OAAO,KAAK,aAAa,EAAE;AAAA,IACtC,aAAa,OAAO,KAAK,eAAe,EAAE;AAAA,IAC1C,aAAa,OAAO,KAAK,eAAe,EAAE;AAAA,IAC1C,SAAS,OAAO,KAAK,WAAW,EAAE;AAAA,IAClC,kBAAkB,OAAO,KAAK,oBAAoB,EAAE;AAAA,IACpD,OAAO,OAAO,KAAK,SAAS,EAAE;AAAA,IAC9B,YAAY,OAAO,KAAK,cAAc,EAAE;AAAA,IACxC;AAAA,IACA,OAAO,OAAO,KAAK,SAAS,EAAE;AAAA,IAC9B,GAAI,KAAK,aAAa,EAAE,YAAY,OAAO,KAAK,UAAU,EAAE,IAAI,CAAC;AAAA,IACjE,GAAI,KAAK,eAAe,EAAE,cAAc,OAAO,KAAK,YAAY,EAAE,IAAI,CAAC;AAAA,IACvE,GAAI,KAAK,iBAAiB,EAAE,gBAAgB,OAAO,KAAK,cAAc,EAAE,IAAI,CAAC;AAAA,IAC7E,GAAI,KAAK,gBAAgB,EAAE,eAAe,OAAO,KAAK,aAAa,EAAE,IAAI,CAAC;AAAA,IAC1E,GAAI,KAAK,uBAAuB,EAAE,sBAAsB,OAAO,KAAK,oBAAoB,EAAE,IAAI,CAAC;AAAA,IAC/F,GAAI,KAAK,cAAc,EAAE,aAAa,OAAO,KAAK,WAAW,EAAE,IAAI,CAAC;AAAA,IACpE,GAAI,KAAK,UAAU,EAAE,SAAS,OAAO,KAAK,OAAO,EAAE,IAAI,CAAC;AAAA,IACxD,GAAI,KAAK,aAAa,EAAE,YAAY,OAAO,KAAK,UAAU,EAAE,IAAI,CAAC;AAAA,EACnE;AACF;;;ACxJA,SAAS,cAAAC,cAAY,gBAAAC,sBAAoB;AACzC,SAAS,QAAAC,cAAY;AAMrB,IAAM,YAAwC;AAAA,EAC5C,QAAQ;AAAA,EACR,SAAS;AAAA,EACT,QAAQ;AAAA,EACR,OAAO;AAAA,EACP,OAAO;AACT;AAEO,SAAS,iBAAiB,KAAa,YAA+D;AAC3G,QAAM,QAAQ,oBAAoB,GAAG;AACrC,sBAAoB,KAAK;AAAA,IACvB;AAAA,IACA,eAAe,OAAO;AAAA,IACtB,mBAAmB,CAAC,GAAG,oBAAI,IAAI,CAAC,GAAG,MAAM,mBAAmB,KAAK,CAAC,CAAC;AAAA,EACrE,CAAC;AACD,QAAM,UAAU,UAAU,UAAU;AACpC,SAAO,EAAE,SAAS,SAAS,qBAAqB,KAAK,UAAU,EAAE;AACnE;AAEO,SAAS,qBAAqB,KAAa,YAAiC;AACjF,QAAM,MAAM,UAAU,UAAU;AAChC,MAAI,eAAe,UAAU;AAC3B,WAAOC,aAAWC,OAAK,KAAK,GAAG,CAAC,KAAKD,aAAWC,OAAK,KAAK,oCAAoC,CAAC;AAAA,EACjG;AACA,MAAI,IAAI,SAAS,GAAG,GAAG;AACrB,WAAOD,aAAWC,OAAK,KAAK,GAAG,CAAC;AAAA,EAClC;AACA,SAAOD,aAAWC,OAAK,KAAK,GAAG,CAAC;AAClC;AAEA,IAAM,mBAAmB;AAEzB,IAAM,mBAAqE;AAAA,EACzE,UAAU,GAAG,gBAAgB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAO7B,QAAQ,GAAG,gBAAgB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAO3B,QAAQ,GAAG,gBAAgB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAO7B;AAQO,SAAS,kBAAkB,KAAa,MAA6D;AAC1G,QAAM,OAAO;AACb,QAAM,WAAWA,OAAK,KAAK,IAAI;AAC/B,MAAI,CAACD,aAAW,QAAQ,GAAG;AACzB,WAAO,EAAE,SAAS,OAAO,MAAM,QAAQ,wCAAwC;AAAA,EACjF;AACA,QAAM,UAAUE,eAAa,UAAU,MAAM;AAC7C,MAAI,QAAQ,SAAS,gBAAgB,GAAG;AACtC,WAAO;AAAA,MACL,SAAS;AAAA,MACT;AAAA,MACA,QAAQ;AAAA,IACV;AAAA,EACF;AACA,gBAAc,KAAK,MAAM,GAAG,QAAQ,QAAQ,CAAC;AAAA;AAAA,EAAO,iBAAiB,IAAI,CAAC,EAAE;AAC5E,QAAM,QAAQ,oBAAoB,GAAG;AACrC,sBAAoB,KAAK;AAAA,IACvB,cAAc;AAAA,IACd,mBAAmB,CAAC,GAAG,oBAAI,IAAI,CAAC,GAAG,MAAM,mBAAmB,UAAU,CAAC,CAAC;AAAA,EAC1E,CAAC;AACD,SAAO,EAAE,SAAS,MAAM,KAAK;AAC/B;AAEO,SAAS,iBAAoE;AAClF,SAAO;AAAA,IACL,EAAE,IAAI,UAAU,OAAO,UAAU,MAAM,UAAU,OAAO;AAAA,IACxD,EAAE,IAAI,WAAW,OAAO,4BAA4B,MAAM,UAAU,QAAQ;AAAA,IAC5E,EAAE,IAAI,UAAU,OAAO,eAAe,MAAM,UAAU,OAAO;AAAA,IAC7D,EAAE,IAAI,SAAS,OAAO,2BAA2B,MAAM,UAAU,MAAM;AAAA,IACvE,EAAE,IAAI,SAAS,OAAO,oBAAoB,MAAM,UAAU,MAAM;AAAA,EAClE;AACF;;;ACjGO,IAAM,oBAAoB;AAC1B,IAAM,kBAAkB;AAQ/B,SAAS,cAA+B;AACtC,SAAO,EAAE,eAAe,GAAG,WAAW,OAAO,GAAG,QAAQ,CAAC,EAAE;AAC7D;AAEO,SAAS,gBAAgB,KAA8B;AAC5D,mBAAiB,GAAG;AACpB,QAAM,WAAW,aAA8B,KAAK,iBAAiB;AACrE,MAAI,CAAC,YAAY,SAAS,kBAAkB,KAAK,OAAO,SAAS,WAAW,UAAU;AACpF,WAAO,YAAY;AAAA,EACrB;AACA,SAAO;AACT;AAEO,SAAS,gBAAgB,KAAa,QAAiD;AAC5F,QAAM,UAAU,OAAO;AAAA,IACrB,OAAO,QAAQ,MAAM,EAClB,IAAI,CAAC,CAAC,IAAI,IAAI,MAAM,CAAC,IAAI,OAAO,IAAI,EAAE,KAAK,CAAC,CAAU,EACtD,OAAO,CAAC,CAAC,EAAE,IAAI,MAAM,KAAK,SAAS,CAAC;AAAA,EACzC;AACA,QAAM,OAAwB,EAAE,eAAe,GAAG,WAAW,OAAO,GAAG,QAAQ,QAAQ;AACvF,gBAAc,KAAK,mBAAmB,IAAI;AAC1C,gBAAc,KAAK,iBAAiB,0BAA0B,KAAK,IAAI,CAAC;AACxE,SAAO;AACT;AAEO,SAAS,0BAA0B,KAAa,MAA+B;AACpF,QAAM,SAAS,wBAAwB,GAAG;AAC1C,QAAM,QAAQ;AAAA,IACZ;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,YAAY,KAAK,SAAS;AAAA,IAC1B;AAAA,EACF;AACA,MAAI,WAAW;AACf,aAAW,SAAS,QAAQ;AAC1B,UAAM,OAAO,KAAK,OAAO,MAAM,EAAE,GAAG,KAAK;AACzC,QAAI,CAAC,KAAM;AACX,eAAW;AACX,UAAM,KAAK,MAAM,MAAM,IAAI,IAAI,IAAI,aAAa,MAAM,WAAW,IAAI,IAAI,MAAM,EAAE;AAAA,EACnF;AACA,MAAI,CAAC,UAAU;AACb,UAAM,KAAK,6EAA6E,EAAE;AAAA,EAC5F;AACA,SAAO,MAAM,KAAK,IAAI;AACxB;;;ACpDO,IAAM,oBAAoB;AASjC,SAAS,aAA8B;AACrC,SAAO,EAAE,eAAe,GAAG,WAAW,OAAO,GAAG,MAAM,CAAC,GAAG,aAAa,CAAC,EAAE;AAC5E;AAEO,SAAS,gBAAgB,KAA8B;AAC5D,mBAAiB,GAAG;AACpB,QAAM,WAAW,aAA8B,KAAK,iBAAiB;AACrE,MAAI,CAAC,YAAY,SAAS,kBAAkB,EAAG,QAAO,WAAW;AACjE,SAAO;AAAA,IACL,eAAe;AAAA,IACf,WAAW,SAAS,aAAa,OAAO;AAAA,IACxC,MAAM,SAAS,QAAQ,CAAC;AAAA,IACxB,aAAa,SAAS,eAAe,CAAC;AAAA,EACxC;AACF;AAEO,SAAS,gBAAgB,KAAa,OAAoG;AAC/I,QAAM,UAAU,gBAAgB,GAAG;AACnC,QAAM,OAAwB;AAAA,IAC5B,eAAe;AAAA,IACf,WAAW,OAAO;AAAA,IAClB,MAAM,EAAE,GAAG,QAAQ,MAAM,GAAI,MAAM,QAAQ,CAAC,EAAG;AAAA,IAC/C,aAAa,EAAE,GAAG,QAAQ,aAAa,GAAI,MAAM,eAAe,CAAC,EAAG;AAAA,EACtE;AACA,gBAAc,KAAK,mBAAmB,IAAI;AAC1C,SAAO;AACT;AAGO,SAAS,qBAAqB,KAAqC;AACxE,QAAM,QAAQ,gBAAgB,GAAG;AACjC,QAAM,aAAa,oBAAoB,GAAG;AAC1C,QAAM,SAAS,gBAAgB,GAAG;AAClC,QAAM,OAA+B;AAAA,IACnC,gBAAgB;AAAA,IAChB,iBAAiB;AAAA,IACjB,iBAAiB;AAAA,IACjB,kBAAkB;AAAA,IAClB,WAAW;AAAA,IACX,aAAa;AAAA,IACb,aAAa;AAAA,IACb,SAAS;AAAA,IACT,kBAAkB;AAAA,IAClB,OAAO;AAAA,IACP,YAAY;AAAA,IACZ,eAAe;AAAA,IACf,OAAO;AAAA,IACP,YAAY,WAAW,cAAc,MAAM,KAAK,cAAc;AAAA,IAC9D,cAAc,WAAW,gBAAgB,MAAM,KAAK,gBAAgB;AAAA,IACpE,gBAAgB;AAAA,IAChB,eAAe;AAAA,IACf,sBAAsB;AAAA,IACtB,aAAa;AAAA,IACb,SAAS;AAAA,IACT,YAAY;AAAA,EACd;AACA,aAAW,CAAC,KAAK,KAAK,KAAK,OAAO,QAAQ,MAAM,IAAI,GAAG;AACrD,QAAI,UAAU,UAAa,UAAU,QAAQ,OAAO,KAAK,EAAE,KAAK,GAAG;AACjE,WAAK,GAAG,IAAI,OAAO,KAAK;AAAA,IAC1B;AAAA,EACF;AACA,QAAM,eAAe,EAAE,GAAG,OAAO,QAAQ,GAAG,MAAM,YAAY;AAC9D,aAAW,CAAC,SAAS,IAAI,KAAK,OAAO,QAAQ,YAAY,GAAG;AAC1D,QAAI,KAAK,KAAK,EAAG,MAAK,oBAAoB,OAAO,CAAC,IAAI,KAAK,KAAK;AAAA,EAClE;AACA,SAAO;AACT;AAEO,SAAS,2BAA2B,MAAsD;AAC/F,QAAM,SAAiC,CAAC;AACxC,aAAW,CAAC,KAAK,KAAK,KAAK,OAAO,QAAQ,IAAI,GAAG;AAC/C,QAAI,CAAC,IAAI,WAAW,aAAa,EAAG;AACpC,UAAM,UAAU,IAAI,MAAM,cAAc,MAAM;AAC9C,UAAM,OAAO,OAAO,KAAK,EAAE,KAAK;AAChC,QAAI,KAAM,QAAO,OAAO,IAAI;AAAA,EAC9B;AACA,SAAO;AACT;AAEO,SAAS,+BAA+B,MAAgD;AAC7F,SAAO;AAAA,IACL,gBAAgB,KAAK,kBAAkB;AAAA,IACvC,iBAAiB,KAAK,mBAAmB;AAAA,IACzC,iBAAiB,KAAK,mBAAmB;AAAA,IACzC,kBAAkB,KAAK,oBAAoB;AAAA,IAC3C,WAAW,KAAK,aAAa;AAAA,IAC7B,aAAa,KAAK,eAAe;AAAA,IACjC,aAAa,KAAK,eAAe;AAAA,IACjC,SAAS,KAAK,WAAW;AAAA,IACzB,kBAAkB,KAAK,oBAAoB;AAAA,IAC3C,OAAO,KAAK,SAAS;AAAA,IACrB,YAAY,KAAK,cAAc;AAAA,IAC/B,eAAgB,KAAK,iBAAuD;AAAA,IAC5E,OAAO,KAAK,SAAS;AAAA,IACrB,GAAI,KAAK,aAAa,EAAE,YAAY,KAAK,WAAW,IAAI,CAAC;AAAA,IACzD,GAAI,KAAK,eAAe,EAAE,cAAc,KAAK,aAAa,IAAI,CAAC;AAAA,IAC/D,GAAI,KAAK,iBAAiB,EAAE,gBAAgB,KAAK,eAAe,IAAI,CAAC;AAAA,IACrE,GAAI,KAAK,gBAAgB,EAAE,eAAe,KAAK,cAAc,IAAI,CAAC;AAAA,IAClE,GAAI,KAAK,uBAAuB,EAAE,sBAAsB,KAAK,qBAAqB,IAAI,CAAC;AAAA,IACvF,GAAI,KAAK,cAAc,EAAE,aAAa,KAAK,YAAY,IAAI,CAAC;AAAA,IAC5D,GAAI,KAAK,UAAU,EAAE,SAAS,KAAK,QAAQ,IAAI,CAAC;AAAA,IAChD,GAAI,KAAK,aAAa,EAAE,YAAY,KAAK,WAAW,IAAI,CAAC;AAAA,EAC3D;AACF;;;ACtHA,SAAS,cAAAC,cAAY,gBAAAC,sBAAoB;AACzC,SAAS,QAAAC,cAAY;AAkBd,IAAM,oBAAoB;AAC1B,IAAM,uBAAuB;AAE7B,SAAS,gBAAgB,KAAiC;AAC/D,SAAO,aAA0B,KAAK,iBAAiB;AACzD;AAEO,SAAS,gBAAgB,KAAa,OAAoD;AAC/F,mBAAiB,GAAG;AACpB,QAAM,UAAuB,EAAE,GAAG,OAAO,WAAW,OAAO,EAAE;AAC7D,gBAAc,KAAK,mBAAmB,OAAO;AAC7C,SAAO;AACT;AAEO,SAAS,mBAAmB,KAAoC;AACrE,SAAO,aAA6B,KAAK,oBAAoB;AAC/D;AAEO,SAAS,mBAAmB,KAAa,OAA0D;AACxG,mBAAiB,GAAG;AACpB,QAAM,UAA0B,EAAE,GAAG,OAAO,WAAW,OAAO,EAAE;AAChE,gBAAc,KAAK,sBAAsB,OAAO;AAChD,SAAO;AACT;AAEO,SAAS,sBAAsB,OAA4B;AAChE,SAAO;AAAA;AAAA;AAAA;AAAA,uBAIc,MAAM,SAAS,KAAK,KAAK,KAAK;AAAA,wBAC7B,MAAM,iBAAiB,KAAK,KAAK,KAAK;AAAA;AAAA;AAAA;AAAA,EAI5D,MAAM,eAAe,KAAK,KAAK,0BAA0B;AAAA;AAE3D;AAEO,SAAS,yBAAyB,OAA+B;AACtE,SAAO;AAAA;AAAA;AAAA;AAAA,mCAI0B,MAAM,SAAS,KAAK,KAAK,KAAK;AAAA,gDACjB,MAAM,KAAK,KAAK,KAAK,KAAK;AAAA,iCACzC,MAAM,QAAQ,KAAK,KAAK,KAAK;AAAA;AAE9D;AAQA,SAAS,mBAAmB,KAAa,KAAa,iBAA2C;AAC/F,QAAM,WAAWC,OAAK,KAAK,GAAG;AAC9B,MAAI,CAACC,aAAW,QAAQ,GAAG;AACzB,WAAO,EAAE,QAAQ,KAAK,QAAQ,UAAU;AAAA,EAC1C;AACA,QAAM,UAAUC,eAAa,UAAU,MAAM;AAC7C,MAAI,QAAQ,SAAS,gBAAgB,GAAG;AACtC,WAAO,EAAE,QAAQ,KAAK,QAAQ,YAAY,cAAc,+BAA+B,GAAG,GAAG;AAAA,EAC/F;AACA,gBAAc,KAAK,KAAK,GAAG,QAAQ,QAAQ,CAAC;AAAA;AAAA,EAAO,gBAAgB,KAAK,CAAC;AAAA,CAAI;AAC7E,SAAO,EAAE,QAAQ,KAAK,QAAQ,WAAW;AAC3C;AAEO,SAAS,iBAAiB,KAA+B;AAC9D,QAAM,QAAQ,gBAAgB,GAAG;AACjC,MAAI,CAAC,MAAO,QAAO,EAAE,QAAQ,aAAa,QAAQ,UAAU;AAC5D,QAAM,SAAS,mBAAmB,KAAK,aAAa,sBAAsB,KAAK,CAAC;AAChF,MAAI,OAAO,WAAW,YAAY;AAChC,UAAM,QAAQ,oBAAoB,GAAG;AACrC,wBAAoB,KAAK;AAAA,MACvB,mBAAmB,CAAC,GAAG,oBAAI,IAAI,CAAC,GAAG,MAAM,mBAAmB,aAAa,aAAa,CAAC,CAAC;AAAA,IAC1F,CAAC;AAAA,EACH;AACA,SAAO;AACT;AAEO,SAAS,oBAAoB,KAA+B;AACjE,QAAM,QAAQ,mBAAmB,GAAG;AACpC,MAAI,CAAC,MAAO,QAAO,EAAE,QAAQ,gBAAgB,QAAQ,UAAU;AAC/D,QAAM,SAAS,mBAAmB,KAAK,gBAAgB,yBAAyB,KAAK,CAAC;AACtF,MAAI,OAAO,WAAW,YAAY;AAChC,UAAM,QAAQ,oBAAoB,GAAG;AACrC,wBAAoB,KAAK;AAAA,MACvB,mBAAmB,CAAC,GAAG,oBAAI,IAAI,CAAC,GAAG,MAAM,mBAAmB,gBAAgB,aAAa,CAAC,CAAC;AAAA,IAC7F,CAAC;AAAA,EACH;AACA,SAAO;AACT;AAEO,SAAS,YAAY,KAAiC;AAC3D,SAAO,CAAC,iBAAiB,GAAG,GAAG,oBAAoB,GAAG,CAAC;AACzD;;;ACpHA,SAAS,gBAAAC,sBAAoB;AAC7B,SAAS,QAAAC,cAAY;;;ACGd,IAAM,YAAY;AAClB,IAAM,aAAa;AACnB,IAAM,YAAY;AAClB,IAAM,eAAe;AAE5B,IAAM,aAA4B,CAAC,SAAS,YAAY,YAAY,WAAW;AAC/E,IAAM,kBAAiC,CAAC,YAAY,UAAU;AAC9D,IAAM,kBAAiC,CAAC,UAAU;AAElD,IAAM,gBAAkD;AAAA,EACtD,EAAE,IAAI,OAAO,MAAM,QAAQ,OAAO,gBAAgB,SAAS,OAAO,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,QAAQ,WAAW;AAAA,EAC7G,EAAE,IAAI,WAAW,MAAM,QAAQ,OAAO,iBAAiB,SAAS,WAAW,GAAG,IAAI,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,QAAQ,WAAW;AAAA,EACvH,EAAE,IAAI,UAAU,MAAM,QAAQ,OAAO,iBAAiB,SAAS,UAAU,GAAG,GAAG,GAAG,IAAI,GAAG,GAAG,GAAG,GAAG,QAAQ,WAAW;AAAA,EACrH,EAAE,IAAI,MAAM,MAAM,QAAQ,OAAO,iBAAiB,SAAS,MAAM,GAAG,IAAI,GAAG,IAAI,GAAG,GAAG,GAAG,GAAG,QAAQ,WAAW;AAAA,EAC9G,EAAE,IAAI,aAAa,MAAM,QAAQ,OAAO,mBAAmB,SAAS,aAAa,GAAG,IAAI,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,QAAQ,WAAW;AAAA,EAC7H;AAAA,IACE,IAAI;AAAA,IACJ,MAAM;AAAA,IACN,OAAO;AAAA,IACP,SAAS;AAAA,IACT,GAAG;AAAA,IACH,GAAG;AAAA,IACH,GAAG;AAAA,IACH,GAAG;AAAA,IACH,QAAQ;AAAA,EACV;AAAA,EACA;AAAA,IACE,IAAI;AAAA,IACJ,MAAM;AAAA,IACN,OAAO;AAAA,IACP,SAAS;AAAA,IACT,GAAG;AAAA,IACH,GAAG;AAAA,IACH,GAAG;AAAA,IACH,GAAG;AAAA,IACH,QAAQ;AAAA,EACV;AAAA,EACA;AAAA,IACE,IAAI;AAAA,IACJ,MAAM;AAAA,IACN,OAAO;AAAA,IACP,SAAS;AAAA,IACT,GAAG;AAAA,IACH,GAAG;AAAA,IACH,GAAG;AAAA,IACH,GAAG;AAAA,IACH,QAAQ;AAAA,EACV;AAAA,EACA;AAAA,IACE,IAAI;AAAA,IACJ,MAAM;AAAA,IACN,OAAO;AAAA,IACP,SAAS;AAAA,IACT,GAAG;AAAA,IACH,GAAG;AAAA,IACH,GAAG;AAAA,IACH,GAAG;AAAA,IACH,QAAQ;AAAA,EACV;AAAA,EACA,EAAE,IAAI,UAAU,MAAM,UAAU,OAAO,gBAAgB,SAAS,UAAU,GAAG,IAAI,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,QAAQ,WAAW;AAAA,EACtH;AAAA,IACE,IAAI;AAAA,IACJ,MAAM;AAAA,IACN,OAAO;AAAA,IACP,SAAS;AAAA,IACT,WAAW;AAAA,IACX,GAAG;AAAA,IACH,GAAG;AAAA,IACH,GAAG;AAAA,IACH,GAAG;AAAA,IACH,QAAQ;AAAA,EACV;AAAA,EACA;AAAA,IACE,IAAI;AAAA,IACJ,MAAM;AAAA,IACN,OAAO;AAAA,IACP,SAAS;AAAA,IACT,WAAW;AAAA,IACX,GAAG;AAAA,IACH,GAAG;AAAA,IACH,GAAG;AAAA,IACH,GAAG;AAAA,IACH,QAAQ;AAAA,EACV;AACF;AAKA,SAAS,mBAAmB,OAA2C;AACrE,QAAM,YAAwC,CAAC;AAC/C,QAAM,OAAO,KAAK,IAAI,GAAG,KAAK,KAAK,QAAQ,CAAC,CAAC;AAC7C,QAAM,SAAS;AACf,QAAM,SAAS;AACf,QAAM,OAAO;AACb,QAAM,OAAO;AACb,WAAS,IAAI,GAAG,IAAI,OAAO,KAAK,GAAG;AACjC,UAAM,MAAM,KAAK,MAAM,IAAI,IAAI;AAC/B,UAAM,MAAM,IAAI;AAChB,cAAU,KAAK,EAAE,GAAG,SAAS,MAAM,MAAM,GAAG,SAAS,MAAM,KAAK,CAAC;AAAA,EACnE;AACA,SAAO;AACT;AAEO,SAAS,oBAAoB,QAAwC;AAC1E,QAAM,QAAQ,mBAAmB,OAAO,MAAM;AAC9C,QAAM,gBAAiC,OAAO,IAAI,CAAC,OAAO,WAAW;AAAA,IACnE,IAAI,SAAS,MAAM,EAAE;AAAA,IACrB,MAAM;AAAA,IACN,OAAO,MAAM;AAAA,IACb,SAAS;AAAA,IACT,SAAS,MAAM;AAAA,IACf,GAAG,MAAM,KAAK,GAAG,KAAK;AAAA,IACtB,GAAG,MAAM,KAAK,GAAG,KAAK;AAAA,IACtB,GAAG;AAAA,IACH,GAAG;AAAA,IACH,QAAQ;AAAA,EACV,EAAE;AACF,SAAO,CAAC,GAAG,eAAe,GAAG,aAAa;AAC5C;;;AD/GA,IAAM,qBAAqB,CAAC,eAAe,QAAQ,SAAS,eAAe,QAAQ,aAAa,aAAa,aAAa,aAAa,eAAe,OAAO;AAE7J,IAAM,gBAAgB,CAAC,eAAe,QAAQ,UAAU,eAAe,SAAS,gBAAgB;AAEhG,SAAS,gBAAgB,MAAsB;AAC7C,QAAM,OAAO,gBAAgB;AAC7B,QAAM,WAAWC,OAAK,MAAM,QAAQ,UAAU,UAAU,UAAU,IAAI;AACtE,QAAM,UAAUA,OAAK,MAAM,OAAO,UAAU,UAAU,UAAU,IAAI;AACpE,MAAI;AACF,WAAOC,eAAa,UAAU,MAAM;AAAA,EACtC,QAAQ;AACN,WAAOA,eAAa,SAAS,MAAM;AAAA,EACrC;AACF;AAEO,SAAS,sBAAsB,KAAa,WAAuE;AACxH,QAAM,SAAS,wBAAwB,GAAG;AAC1C,SAAO;AAAA,IACL,UAAU;AAAA,IACV,WAAW;AAAA,IACX,UAAU;AAAA,IACV,OAAO;AAAA,IACP,UAAU,oBAAoB,MAAM;AAAA,IACpC;AAAA,IACA,YAAY;AAAA,IACZ,cAAc;AAAA,IACd,yBAAyB;AAAA,IACzB,aAAa,eAAe;AAAA,IAC5B,aAAa,UAAU;AAAA,IACvB,cAAc,CAAC;AAAA,EACjB;AACF;AAEO,SAAS,sBAAsB,MAAiC;AACrE,SAAO,iBAAiB,MAAM,OAAO;AACvC;AAEA,SAAS,iBAAiB,MAAoC,MAAkC;AAC9F,QAAM,MAAM,gBAAgB,YAAY;AACxC,QAAM,KAAK,gBAAgB,WAAW;AACtC,QAAM,WAAW,KAAK,UAAU;AAAA,IAC9B,GAAI,QAAQ;AAAA,MACV,UAAU;AAAA,MACV,WAAW;AAAA,MACX,UAAU;AAAA,MACV,OAAO;AAAA,MACP,UAAU,CAAC;AAAA,MACX,QAAQ,CAAC;AAAA,MACT,YAAY;AAAA,MACZ,cAAc;AAAA,MACd,aAAa,CAAC;AAAA,MACd,aAAa;AAAA,MACb,cAAc,CAAC;AAAA,IACjB;AAAA,IACA;AAAA,EACF,CAAC,EAAE,QAAQ,MAAM,SAAS;AAE1B,QAAM,WAAW,SAAS;AAC1B,QAAM,QAAQ,WAAW,iCAA4B;AACrD,QAAM,WAAW,WAAW,cAAc;AAE1C,SAAO;AAAA;AAAA;AAAA;AAAA;AAAA,WAKE,KAAK;AAAA,WACL,GAAG;AAAA;AAAA,mBAEK,QAAQ,uBAAuB,eAAe;AAAA;AAAA;AAAA,YAGrD,WAAW,sBAAsB,cAAc;AAAA;AAAA;AAAA;AAAA,uDAIJ,WAAW,SAAS,UAAU;AAAA,QAC7E,WAAW,KAAK,iFAA4E;AAAA,QAC5F,WAAW,mEAAmE,uDAAuD;AAAA,QACrI,WAAW,KAAK,sFAAsF;AAAA;AAAA;AAAA,IAG1G,WAAW,KAAK,4GAA4G;AAAA,4BACpG,WAAW,mBAAmB,EAAE;AAAA,gCAC5B,WAAW,YAAY,EAAE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,yCAWhB,YAAY,SAAS,aAAa,aAAa,SAAS;AAAA,4CACrD,WAAW,iEAAiE,0FAA0F;AAAA;AAAA;AAAA;AAAA,uEAI3I,WAAW,0CAAqC,gDAAgD;AAAA;AAAA,MAEjK,WAAW,oJAAoJ,EAAE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,iCA+BtI,QAAQ;AAAA,YAC7B,EAAE;AAAA;AAAA;AAGd;AAEO,SAAS,qBAAqB,MAAiC;AACpE,SAAO,iBAAiB,MAAM,QAAQ;AACxC;AAEO,SAAS,gCAAgC,KAAqB;AACnE,QAAM,YAAY,sBAAsB,GAAG;AAC3C,QAAMC,WAAU,mBAAmB,GAAG;AACtC,QAAM,OAAO,sBAAsB,KAAK,SAAS;AACjD,MAAI,kBAAkB;AACtB,MAAI;AACF,sBAAkB,mBAAmB,GAAG;AAAA,EAC1C,QAAQ;AACN,sBAAkB;AAAA,EACpB;AACA,QAAM,eAAe;AAAA,IACnB,GAAGA,SAAQ,aAAa;AAAA,IACxB,GAAGA,SAAQ,aAAa,UAAU,MAAM,GAAG,CAAC;AAAA,IAC5C,GAAI,UAAU,cAAc,CAAC,UAAU,IAAI,CAAC;AAAA,EAC9C,EAAE,OAAO,OAAO;AAChB,SAAO,qBAAqB;AAAA,IAC1B,GAAG;AAAA,IACH,MAAM;AAAA,IACN;AAAA,IACA,cAAc,CAAC,GAAG,IAAI,IAAI,YAAY,CAAC;AAAA,EACzC,CAAC;AACH;AAEO,SAAS,iCAAiC,KAAqB;AACpE,QAAM,YAAY,sBAAsB,GAAG;AAC3C,QAAMA,WAAU,mBAAmB,GAAG;AACtC,QAAM,OAAO,sBAAsB,KAAK,SAAS;AACjD,QAAM,eAAe;AAAA,IACnB,GAAGA,SAAQ,aAAa;AAAA,IACxB,GAAGA,SAAQ,aAAa,UAAU,MAAM,GAAG,CAAC;AAAA,IAC5C,GAAI,UAAU,cAAc,CAAC,UAAU,IAAI,CAAC;AAAA,EAC9C,EAAE,OAAO,OAAO;AAChB,SAAO,sBAAsB,EAAE,GAAG,MAAM,MAAM,SAAS,cAAc,CAAC,GAAG,IAAI,IAAI,YAAY,CAAC,EAAE,CAAC;AACnG;;;AExLO,SAAS,wBAAwB,SAAgD;AACtF,MAAI,QAAQ,SAAS,UAAW,QAAO;AACvC,MAAI,QAAQ,SAAS,QAAS,QAAO;AACrC,MAAI,QAAQ,YAAY,QAAS,QAAO;AACxC,SAAO,QAAQ;AACjB;AAEO,SAAS,uBAAuB,MAA8B,UAA6B;AAChG,MAAI,SAAS,WAAW,EAAG,QAAO;AAClC,SAAO,SAAS,MAAM,CAAC,OAAO,QAAQ,KAAK,cAAc,EAAE,EAAE,GAAG,KAAK,CAAC,CAAC;AACzE;;;ACdA,SAAS,gBAAAC,sBAAoB;AAC7B,SAAS,QAAAC,cAAY;AASrB,IAAMC,sBAAqB,CAAC,eAAe,QAAQ,SAAS,eAAe,QAAQ,aAAa,aAAa,aAAa,aAAa,eAAe,OAAO;AAE7J,IAAMC,iBAAgB,CAAC,eAAe,QAAQ,UAAU,eAAe,SAAS,gBAAgB;AAEhG,SAAS,gBAAgB,MAAsB;AAC7C,QAAM,OAAO,gBAAgB;AAC7B,QAAM,WAAWC,OAAK,MAAM,QAAQ,UAAU,UAAU,UAAU,IAAI;AACtE,QAAM,UAAUA,OAAK,MAAM,OAAO,UAAU,UAAU,UAAU,IAAI;AACpE,MAAI;AACF,WAAOC,eAAa,UAAU,MAAM;AAAA,EACtC,QAAQ;AACN,WAAOA,eAAa,SAAS,MAAM;AAAA,EACrC;AACF;AAaO,SAAS,iBAAiB,KAA8B;AAC7D,QAAM,aAAa,sBAAsB,GAAG;AAC5C,QAAM,WAAW,aAAa,UAAU,CAAC,SAAS,KAAK,OAAO,aAAa;AAC3E,MAAI,WAAW,EAAG,QAAO,CAAC,GAAG,cAAc,GAAG,UAAU;AACxD,SAAO,CAAC,GAAG,aAAa,MAAM,GAAG,WAAW,CAAC,GAAG,GAAG,YAAY,GAAG,aAAa,MAAM,WAAW,CAAC,CAAC;AACpG;AAEO,SAAS,sBAAsB,KAAa,WAAuE;AACxH,SAAO;AAAA,IACL,OAAO,iBAAiB,GAAG;AAAA,IAC3B,YAAYH;AAAA,IACZ,cAAcC;AAAA,IACd,yBAAyB;AAAA,IACzB,aAAa,eAAe;AAAA,IAC5B,aAAa,UAAU;AAAA,IACvB,cAAc,CAAC;AAAA,IACf,QAAQ,wBAAwB,GAAG;AAAA,EACrC;AACF;AAEO,SAAS,sBAAsB,MAAiC;AACrE,QAAM,MAAM,gBAAgB,YAAY;AACxC,QAAM,KAAK,gBAAgB,WAAW;AACtC,QAAM,WAAW,KAAK,UAAU,QAAQ,EAAE,OAAO,cAAc,YAAYD,qBAAoB,cAAcC,eAAc,CAAC,EAAE,QAAQ,MAAM,SAAS;AAErJ,SAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,WAME,GAAG;AAAA;AAAA,gDAEkC,eAAe;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,iCAuC9B,QAAQ;AAAA,YAC7B,EAAE;AAAA;AAAA;AAGd;AAEO,SAAS,iCAAiC,KAAqB;AACpE,QAAM,YAAY,sBAAsB,GAAG;AAC3C,QAAMG,WAAU,mBAAmB,GAAG;AACtC,QAAM,OAAO,sBAAsB,KAAK,SAAS;AACjD,QAAM,eAAe;AAAA,IACnB,GAAGA,SAAQ,aAAa;AAAA,IACxB,GAAGA,SAAQ,aAAa,UAAU,MAAM,GAAG,CAAC;AAAA,IAC5C,GAAI,UAAU,cAAc,CAAC,UAAU,IAAI,CAAC;AAAA,EAC9C,EAAE,OAAO,OAAO;AAChB,SAAO,sBAAsB,EAAE,GAAG,MAAM,cAAc,CAAC,GAAG,IAAI,IAAI,YAAY,CAAC,EAAE,CAAC;AACpF;;;AC5HA,SAAS,cAAAC,cAAY,gBAAAC,sBAAoB;AACzC,SAAS,QAAAC,cAAY;AAarB,IAAM,eAAe;AACrB,IAAM,QAAQ,oBAAI,IAAwD;AAEnE,SAAS,uBAAuB,KAAsB;AAC3D,SAAOC,aAAWC,OAAK,KAAK,cAAc,CAAC,KAAKD,aAAWC,OAAK,KAAK,KAAK,CAAC,KAAKD,aAAWC,OAAK,KAAK,WAAW,CAAC;AACnH;AAEA,SAAS,OAAO,IAAY,OAAsB,OAAe,MAAe,UAAkB,aAAyC;AACzI,SAAO,EAAE,IAAI,OAAO,OAAO,MAAM,UAAU,YAAY;AACzD;AAEA,SAAS,iBAAiB,KAAkD;AAC1E,QAAM,aAAa,oBAAoB,GAAG;AAC1C,MAAI,WAAW,cAAc,qBAAqB,KAAK,WAAW,UAAU,GAAG;AAC7E,WAAO,EAAE,MAAM,MAAM,UAAU,GAAG,WAAW,UAAU,sBAAsB;AAAA,EAC/E;AACA,QAAM,WAAyB,CAAC,UAAU,WAAW,UAAU,OAAO;AACtE,aAAW,WAAW,UAAU;AAC9B,QAAI,qBAAqB,KAAK,OAAO,GAAG;AACtC,aAAO,EAAE,MAAM,MAAM,UAAU,GAAG,OAAO,0BAA0B;AAAA,IACrE;AAAA,EACF;AACA,MAAID,aAAWC,OAAK,KAAK,oCAAoC,CAAC,GAAG;AAC/D,WAAO,EAAE,MAAM,MAAM,UAAU,iCAAiC;AAAA,EAClE;AACA,SAAO,EAAE,MAAM,OAAO,UAAU,6CAA6C;AAC/E;AAEA,SAAS,qBAAqB,KAAkD;AAC9E,QAAM,QAAQ,CAAC,6BAA6B,8BAA8B,6BAA6B,iCAAiC;AACxI,QAAM,QAAQ,MAAM,OAAO,CAAC,QAAQD,aAAWC,OAAK,KAAK,GAAG,CAAC,CAAC;AAC9D,MAAI,MAAM,SAAS,GAAG;AACpB,WAAO,EAAE,MAAM,MAAM,UAAU,uBAAuB,MAAM,CAAC,CAAC,GAAG;AAAA,EACnE;AACA,SAAO,EAAE,MAAM,OAAO,UAAU,yDAAyD;AAC3F;AAEA,SAAS,eAAe,KAAa,MAAc,SAA4B;AAC7E,QAAM,OAAOA,OAAK,KAAK,IAAI;AAC3B,MAAI,CAACD,aAAW,IAAI,EAAG,QAAO;AAC9B,QAAM,QAAQE,eAAa,MAAM,MAAM,EAAE,YAAY;AACrD,SAAO,QAAQ,MAAM,CAAC,WAAW,MAAM,SAAS,OAAO,YAAY,CAAC,CAAC;AACvE;AAEA,SAAS,oBAAoB,KAA6D;AACxF,MAAI,QAAQ,YAAY,QAAQ,WAAW,QAAQ,YAAY,QAAQ,UAAW,QAAO;AACzF,SAAO;AACT;AAEA,SAAS,aAAa,KAAa,mBAAkD;AACnF,QAAM,UAAgC,CAAC;AACvC,QAAM,MAAM,iBAAiB,GAAG;AAChC,UAAQ;AAAA,IACN;AAAA,MACE;AAAA,MACA;AAAA,MACA;AAAA,MACA,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ;AAAA,IACF;AAAA,EACF;AAEA,QAAMC,WAAU,mBAAmB,GAAG;AACtC,QAAM,gBAAgBA,SAAQ,cAAc;AAC5C,QAAM,eACJ,QAAQA,SAAQ,eAAe,KAAK,CAAC,KACrC,QAAQA,SAAQ,gBAAgB,KAAK,CAAC,KACtC,QAAQA,SAAQ,UAAU,KAAK,CAAC,KAChCA,SAAQ,iBAAiB,SAAS,KAClC,kBAAkB;AAEpB,UAAQ;AAAA,IACN;AAAA,MACE;AAAA,MACA;AAAA,MACA;AAAA,MACAH,aAAWC,OAAK,KAAK,WAAW,CAAC;AAAA,MACjCD,aAAWC,OAAK,KAAK,WAAW,CAAC,IAAI,wBAAwB;AAAA,MAC7D;AAAA,IACF;AAAA,EACF;AACA,UAAQ;AAAA,IACN;AAAA,MACE;AAAA,MACA;AAAA,MACA;AAAA,MACAD,aAAWC,OAAK,KAAK,uBAAuB,CAAC;AAAA,MAC7CD,aAAWC,OAAK,KAAK,uBAAuB,CAAC,IAAI,oCAAoC;AAAA,MACrF;AAAA,IACF;AAAA,EACF;AACA,UAAQ;AAAA,IACN;AAAA,MACE;AAAA,MACA;AAAA,MACA;AAAA,MACAD,aAAWC,OAAK,KAAK,8BAA8B,CAAC;AAAA,MACpDD,aAAWC,OAAK,KAAK,8BAA8B,CAAC,IAAI,yCAAyC;AAAA,MACjG;AAAA,IACF;AAAA,EACF;AACA,UAAQ;AAAA,IACN;AAAA,MACE;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA,eACI,yCACA,gBAAgB,IACd,GAAG,aAAa,6BAChB;AAAA,MACN;AAAA,IACF;AAAA,EACF;AAEA,QAAM,QAAQ,qBAAqB,GAAG;AACtC,UAAQ;AAAA,IACN,OAAO,gBAAgB,GAAG,gCAAgC,MAAM,MAAM,MAAM,UAAU,2DAA2D;AAAA,EACnJ;AAEA,QAAM,aAAaD,aAAWC,OAAK,KAAK,gBAAgB,CAAC;AACzD,UAAQ;AAAA,IACN;AAAA,MACE;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA,aAAa,6BAA6B;AAAA,MAC1C;AAAA,IACF;AAAA,EACF;AAEA,MAAI,YAAY;AAChB,MAAI,gBAAgB;AACpB,MAAI;AACF,UAAM,QAAQ,kBAAkB,GAAG;AACnC,gBAAY,MAAM,QAAQ,SAAS,KAAK,MAAM,UAAU,UAAU;AAClE,oBAAgB,GAAG,MAAM,QAAQ,IAAI,WAAW,MAAM,QAAQ,IAAI,WAAW,MAAM,QAAQ,IAAI,cAAW,MAAM,UAAU,KAAK;AAAA,EACjI,SAAS,OAAO;AACd,oBAAgB,iBAAiB,QAAQ,MAAM,UAAU,OAAO,KAAK;AAAA,EACvE;AACA,UAAQ;AAAA,IACN;AAAA,MACE;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAEA,MAAI,mBAAmB;AACrB,UAAM,UAAUA,OAAK,KAAK,cAAc;AACxC,QAAI,eAAe;AACnB,QAAID,aAAW,OAAO,GAAG;AACvB,UAAI;AACF,cAAM,MAAM,KAAK,MAAME,eAAa,SAAS,MAAM,CAAC;AACpD,uBAAe,QAAQ,IAAI,UAAU,eAAe,CAAC,KAAKF,aAAWC,OAAK,KAAK,2BAA2B,CAAC;AAAA,MAC7G,QAAQ;AACN,uBAAe;AAAA,MACjB;AAAA,IACF;AACA,YAAQ;AAAA,MACN;AAAA,QACE;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA,eAAe,gDAAgD;AAAA,QAC/D;AAAA,MACF;AAAA,IACF;AACA,UAAM,iBAAiBD,aAAWC,OAAK,KAAK,uBAAuB,CAAC,KAAK,eAAe,KAAK,WAAW,CAAC,sBAAsB,cAAc,CAAC;AAC9I,YAAQ;AAAA,MACN;AAAA,QACE;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA,iBAAiB,kCAAkC;AAAA,QACnD;AAAA,MACF;AAAA,IACF;AAAA,EACF,OAAO;AACL,UAAM,aAAa,oBAAoB,GAAG;AAC1C,UAAM,gBAAgB,oBAAoB,WAAW,UAAU;AAC/D,QAAI,cAAc;AAClB,QAAI,kBAAkB;AACtB,QAAI,eAAe;AACjB,YAAMG,UAAS,gBAAgB,KAAK,aAAa;AACjD,oBAAcA,QAAO,QAAQ,SAAS;AACtC,wBAAkB,GAAG,aAAa,KAAKA,QAAO,QAAQ,IAAI,WAAWA,QAAO,QAAQ,IAAI,WAAWA,QAAO,QAAQ,IAAI;AAAA,IACxH,WAAW,MAAM,MAAM;AACrB,YAAMA,UAAS,gBAAgB,KAAK,QAAQ;AAC5C,oBAAcA,QAAO,QAAQ,SAAS;AACtC,wBAAkB,sBAAsBA,QAAO,QAAQ,IAAI,WAAWA,QAAO,QAAQ,IAAI;AAAA,IAC3F;AACA,YAAQ;AAAA,MACN,OAAO,uBAAuB,GAAG,mCAAmC,aAAa,iBAAiB,iDAAiD;AAAA,IACrJ;AAEA,UAAM,aAAaJ,aAAWC,OAAK,KAAK,uCAAuC,CAAC;AAChF,UAAM,cAAcD,aAAWC,OAAK,KAAK,YAAY,CAAC,KAAK,eAAe,KAAK,cAAc,CAAC,mBAAmB,MAAM,CAAC;AACxH,UAAM,WAAW,cAAc;AAC/B,YAAQ;AAAA,MACN;AAAA,QACE;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA,aACI,kDACA,cACE,yCACA;AAAA,QACN;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAEA,SAAO;AACT;AAEA,SAAS,oBAAoB,SAA8C;AACzE,MAAI,UAAyB;AAC7B,aAAW,SAAS,CAAC,GAAG,GAAG,GAAG,CAAC,GAAY;AACzC,UAAM,OAAO,QAAQ,OAAO,CAAC,SAAS,KAAK,UAAU,KAAK;AAC1D,QAAI,KAAK,WAAW,EAAG;AACvB,QAAI,KAAK,MAAM,CAAC,SAAS,KAAK,IAAI,GAAG;AACnC,gBAAU;AAAA,IACZ,OAAO;AACL;AAAA,IACF;AAAA,EACF;AACA,SAAO;AACT;AAEA,SAAS,mBAAmB,mBAAgD;AAC1E,SAAO,oBAAoB,IAAI;AACjC;AAEO,SAAS,mBAAmB,KAAa,mBAAgD;AAC9F,QAAM,aAAa,oBAAoB,GAAG;AAC1C,QAAM,MAAM,WAAW;AACvB,MAAI,OAAO,OAAO,KAAK,OAAO,EAAG,QAAO;AACxC,SAAO,mBAAmB,iBAAiB;AAC7C;AAEO,SAAS,oBAAoB,KAAa,UAAsC,CAAC,GAAuB;AAC7G,QAAM,WAAW;AACjB,QAAM,SAAS,MAAM,IAAI,QAAQ;AACjC,MAAI,CAAC,QAAQ,gBAAgB,UAAU,KAAK,IAAI,IAAI,OAAO,KAAK,cAAc;AAC5E,WAAO,OAAO;AAAA,EAChB;AAEA,QAAM,oBAAoB,uBAAuB,GAAG;AACpD,QAAM,UAAU,aAAa,KAAK,iBAAiB;AACnD,QAAM,eAAe,oBAAoB,OAAO;AAChD,QAAM,cAAc,mBAAmB,KAAK,iBAAiB;AAC7D,QAAM,aAAa,QAAQ,OAAO,CAAC,SAAS,CAAC,KAAK,QAAQ,KAAK,SAAS,KAAK,IAAI,aAAa,CAAC,CAAC,EAAE,MAAM,GAAG,CAAC;AAE5G,QAAMG,UAA6B,qBAAqB,MAAM;AAAA,IAC5D;AAAA,IACA;AAAA,IACA;AAAA,IACA,YAAY,OAAO;AAAA,IACnB,gBAAgB,oBAAoB,oFAA+E;AAAA,IACnH;AAAA,IACA;AAAA,EACF,CAAC;AAED,QAAM,IAAI,UAAU,EAAE,IAAI,KAAK,IAAI,GAAG,QAAAA,QAAO,CAAC;AAC9C,sBAAoB,KAAK;AAAA,IACvB,kBAAkB;AAAA,IAClB,uBAAuBA,QAAO;AAAA,EAChC,CAAC;AAED,SAAOA;AACT;AAEO,SAAS,2BACd,KACA,YACqE;AACrE,QAAM,SAAS,oBAAoB,UAAU;AAC7C,MAAI,CAAC,QAAQ;AACX,WAAO,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM,GAAG,QAAQ,KAAK;AAAA,EACnD;AACA,QAAMA,UAAS,gBAAgB,KAAK,MAAM;AAC1C,SAAO;AAAA,IACL,MAAMA,QAAO,QAAQ;AAAA,IACrB,MAAMA,QAAO,QAAQ;AAAA,IACrB,MAAMA,QAAO,QAAQ;AAAA,IACrB;AAAA,EACF;AACF;AAEO,SAAS,4BAA4B,KAAmB;AAC7D,QAAM,OAAO,GAAG;AAClB;;;AVpRA,IAAM,eAAe;AACrB,IAAM,eAAe;AAErB,SAAS,aAAa,SAA4C;AAChE,SAAO,IAAI,QAAQ,CAACC,UAAS,WAAW;AACtC,UAAM,SAAmB,CAAC;AAC1B,YAAQ,GAAG,QAAQ,CAAC,UAAkB;AACpC,aAAO,KAAK,KAAK;AACjB,UAAI,OAAO,OAAO,CAAC,OAAO,SAAS,QAAQ,KAAK,QAAQ,CAAC,IAAI,OAAS;AACpE,eAAO,IAAI,MAAM,yBAAyB,CAAC;AAC3C,gBAAQ,QAAQ;AAAA,MAClB;AAAA,IACF,CAAC;AACD,YAAQ,GAAG,OAAO,MAAM;AACtB,YAAM,MAAM,OAAO,OAAO,MAAM,EAAE,SAAS,MAAM,EAAE,KAAK;AACxD,UAAI,CAAC,KAAK;AACR,QAAAA,SAAQ,CAAC,CAAC;AACV;AAAA,MACF;AACA,UAAI;AACF,QAAAA,SAAQ,KAAK,MAAM,GAAG,CAAY;AAAA,MACpC,QAAQ;AACN,eAAO,IAAI,MAAM,kCAAkC,CAAC;AAAA,MACtD;AAAA,IACF,CAAC;AACD,YAAQ,GAAG,SAAS,MAAM;AAAA,EAC5B,CAAC;AACH;AAEA,SAAS,SAAS,UAA0B,YAAoB,SAAwB;AACtF,WAAS,UAAU,YAAY;AAAA,IAC7B,gBAAgB;AAAA,IAChB,iBAAiB;AAAA,EACnB,CAAC;AACD,WAAS,IAAI,KAAK,UAAU,OAAO,CAAC;AACtC;AAEA,SAAS,SAAS,UAA0B,MAAoB;AAC9D,WAAS,UAAU,KAAK;AAAA,IACtB,gBAAgB;AAAA,IAChB,iBAAiB;AAAA,IACjB,2BACE;AAAA,EACJ,CAAC;AACD,WAAS,IAAI,IAAI;AACnB;AAEA,SAAS,kBAAkB,KAAa,UAA6C,CAAC,GAA4B;AAChH,+BAA6B,GAAG;AAChC,QAAM,YAAY,sBAAsB,GAAG;AAC3C,QAAM,aAAa,oBAAoB,GAAG;AAC1C,QAAM,WAAW,iBAAiB,GAAG;AACrC,QAAM,cAAc,gBAAgB,GAAG;AACvC,QAAM,iBAAiB,mBAAmB,GAAG;AAC7C,QAAM,QAAQ,gBAAgB,GAAG;AACjC,QAAM,eAAe,oBAAoB,KAAK,QAAQ,sBAAsB,EAAE,cAAc,KAAK,IAAI,CAAC,CAAC;AACvG,SAAO;AAAA,IACL,aAAa,UAAU;AAAA,IACvB,MAAM,qBAAqB,GAAG;AAAA,IAC9B,oBAAoB,QAAQ,UAAU,KAAK,eAAe,KAAK,KAAK,UAAU,KAAK,gBAAgB,KAAK,KAAK,UAAU,KAAK,iBAAiB,KAAK,CAAC;AAAA,IACnJ,eAAe,UAAU;AAAA,IACzB,aAAa,UAAU;AAAA,IACvB;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,gBAAgB,MAAM;AAAA,IACtB,QAAQ,wBAAwB,GAAG;AAAA,IACnC,eAAe,cAAc,sBAAsB,WAAW,IAAI;AAAA,IAClE,kBAAkB,iBAAiB,yBAAyB,cAAc,IAAI;AAAA,EAChF;AACF;AAEA,SAAS,aAAa,UAA0B,UAAwB;AACtE,WAAS,UAAU,KAAK,EAAE,UAAU,UAAU,iBAAiB,WAAW,CAAC;AAC3E,WAAS,IAAI;AACf;AAEA,SAAS,kBAAkB,KAAa,WAA8C;AACpF,QAAM,SAAS,wBAAwB,GAAG;AAC1C,SAAO,oBAAoB,MAAM,EAAE,KAAK,CAAC,MAAM,EAAE,OAAO,SAAS;AACnE;AAEA,SAAS,0BAA0B,KAAa,WAAmB,MAAoC;AACrG,QAAM,UAAU,kBAAkB,KAAK,SAAS;AAChD,MAAI,CAAC,QAAS;AACd,QAAM,UAAU,wBAAwB,OAAO;AAC/C,MAAI,CAAC,QAAS;AACd,MAAI,YAAY,QAAQ;AACtB,UAAM,WAAW,wBAAwB,GAAG,EAAE,IAAI,CAAC,MAAM,EAAE,EAAE;AAC7D,QAAI,uBAAuB,MAAM,QAAQ,EAAG,qBAAoB,KAAK,MAAM;AAC3E;AAAA,EACF;AACA,sBAAoB,KAAK,OAAO;AAClC;AAEA,eAAe,cAAc,KAAa,SAA0B,UAAyC;AAC3G,QAAM,MAAM,IAAI,IAAI,QAAQ,OAAO,KAAK,kBAAkB;AAE1D,MAAI,QAAQ,WAAW,SAAS,IAAI,aAAa,iBAAiB;AAChE,iBAAa,UAAU,SAAS;AAChC;AAAA,EACF;AAEA,MAAI,QAAQ,WAAW,UAAU,IAAI,aAAa,OAAO,IAAI,aAAa,aAAa,IAAI,aAAa,WAAW;AACjH,aAAS,UAAU,iCAAiC,GAAG,CAAC;AACxD;AAAA,EACF;AAEA,MAAI,QAAQ,WAAW,SAAS,IAAI,aAAa,WAAW;AAC1D,aAAS,UAAU,iCAAiC,GAAG,CAAC;AACxD;AAAA,EACF;AAEA,MAAI,QAAQ,WAAW,SAAS,IAAI,aAAa,cAAc;AAC7D,aAAS,UAAU,KAAK,kBAAkB,GAAG,CAAC;AAC9C;AAAA,EACF;AAEA,MAAI,QAAQ,WAAW,SAAS,IAAI,aAAa,gBAAgB;AAC/D,aAAS,UAAU,KAAK,sBAAsB,GAAG,CAAC;AAClD;AAAA,EACF;AAEA,MAAI,QAAQ,WAAW,WAAW,IAAI,aAAa,cAAc;AAC/D,QAAI;AACF,YAAM,OAAQ,MAAM,aAAa,OAAO;AACxC,UAAI,OAAO,KAAK,oBAAoB,UAAU;AAC5C,4BAAoB,KAAK,KAAK,eAAkC;AAAA,MAClE;AACA,YAAM,QAAiC,CAAC;AACxC,UAAI,KAAK,MAAO,OAAM,QAAQ,KAAK;AACnC,UAAI,KAAK,eAAgB,OAAM,iBAAiB,OAAO,KAAK,cAAc;AAC1E,UAAI,OAAO,KAAK,gBAAgB,SAAU,OAAM,cAAc,KAAK;AACnE,UAAI,MAAM,QAAQ,KAAK,iBAAiB,EAAG,OAAM,oBAAoB,KAAK;AAC1E,UAAI,OAAO,KAAK,uBAAuB,SAAU,OAAM,qBAAqB,KAAK;AACjF,UAAI,OAAO,KAAK,KAAK,EAAE,SAAS,EAAG,qBAAoB,KAAK,KAAK;AACjE,kCAA4B,GAAG;AAC/B,eAAS,UAAU,KAAK,kBAAkB,KAAK,EAAE,qBAAqB,KAAK,CAAC,CAAC;AAAA,IAC/E,SAAS,OAAO;AACd,eAAS,UAAU,KAAK,EAAE,OAAO,iBAAiB,QAAQ,MAAM,UAAU,OAAO,KAAK,EAAE,CAAC;AAAA,IAC3F;AACA;AAAA,EACF;AAEA,MAAI,QAAQ,WAAW,UAAU,IAAI,aAAa,gBAAgB;AAChE,QAAI;AACF,YAAM,MAAO,MAAM,aAAa,OAAO;AACvC,YAAM,UAAU,sBAAsB,+BAA+B,GAA6B,CAAC;AACnG,YAAM,SAAS,sBAAsB,KAAK,OAAO;AACjD,sBAAgB,KAAK,2BAA2B,GAA6B,CAAC;AAC9E,4BAAsB,GAAG;AACzB,kCAA4B,GAAG;AAC/B,eAAS,UAAU,KAAK;AAAA,QACtB,GAAG,kBAAkB,KAAK,EAAE,qBAAqB,KAAK,CAAC;AAAA,QACvD,OAAO;AAAA,QACP,aAAa,OAAO;AAAA,QACpB,cAAc,OAAO;AAAA,QACrB,eAAe,OAAO;AAAA,MACxB,CAAC;AAAA,IACH,SAAS,OAAO;AACd,eAAS,UAAU,KAAK,EAAE,OAAO,iBAAiB,QAAQ,MAAM,UAAU,OAAO,KAAK,EAAE,CAAC;AAAA,IAC3F;AACA;AAAA,EACF;AAEA,MAAI,QAAQ,WAAW,UAAU,IAAI,aAAa,cAAc;AAC9D,QAAI;AACF,YAAM,OAAQ,MAAM,aAAa,OAAO;AAIxC,YAAM,OAAO,KAAK,QAAQ,CAAC;AAC3B,sBAAgB,KAAK;AAAA,QACnB,MAAM,+BAA+B,IAAI;AAAA,QACzC,aAAa,2BAA2B,IAAI;AAAA,MAC9C,CAAC;AACD,UAAI,KAAK,UAAW,2BAA0B,KAAK,KAAK,WAAW,IAAI;AACvE,eAAS,UAAU,KAAK,kBAAkB,GAAG,CAAC;AAAA,IAChD,SAAS,OAAO;AACd,eAAS,UAAU,KAAK,EAAE,OAAO,iBAAiB,QAAQ,MAAM,UAAU,OAAO,KAAK,EAAE,CAAC;AAAA,IAC3F;AACA;AAAA,EACF;AAEA,MAAI,QAAQ,WAAW,UAAU,IAAI,aAAa,uBAAuB;AACvE,QAAI;AACF,YAAM,YAAY,sBAAsB,GAAG;AAC3C,sBAAgB,KAAK,EAAE,MAAM,UAAU,KAAK,CAAC;AAC7C,eAAS,UAAU,KAAK,kBAAkB,GAAG,CAAC;AAAA,IAChD,SAAS,OAAO;AACd,eAAS,UAAU,KAAK,EAAE,OAAO,iBAAiB,QAAQ,MAAM,UAAU,OAAO,KAAK,EAAE,CAAC;AAAA,IAC3F;AACA;AAAA,EACF;AAEA,MAAI,QAAQ,WAAW,UAAU,IAAI,aAAa,sBAAsB;AACtE,QAAI;AACF,YAAM,OAAQ,MAAM,aAAa,OAAO;AACxC,UAAI,CAAC,KAAK,WAAY,OAAM,IAAI,MAAM,yBAAyB;AAC/D,YAAM,iBAAiB,2BAA2B,KAAK,UAAU;AACjE,UAAI;AACJ,UAAI,gBAAgB;AAClB,cAAM,iBAAiB,mBAAmB,EAAE,KAAK,SAAS,CAAC,cAAc,EAAE,CAAC;AAC5E,qBAAa;AAAA,UACX,WAAW,eAAe;AAAA,UAC1B,QAAQ,eAAe;AAAA,UACvB,WAAW,eAAe;AAAA,UAC1B,WAAW,eAAe;AAAA,QAC5B;AAAA,MACF;AACA,YAAM,SAAS,iBAAiB,KAAK,KAAK,UAAU;AACpD,0BAAoB,KAAK,KAAK;AAC9B,kCAA4B,GAAG;AAC/B,YAAM,oBAAoB,2BAA2B,KAAK,KAAK,UAAU;AACzE,eAAS,UAAU,KAAK;AAAA,QACtB,GAAG;AAAA,QACH;AAAA,QACA;AAAA,QACA,GAAG,kBAAkB,KAAK,EAAE,qBAAqB,KAAK,CAAC;AAAA,MACzD,CAAC;AAAA,IACH,SAAS,OAAO;AACd,eAAS,UAAU,KAAK,EAAE,OAAO,iBAAiB,QAAQ,MAAM,UAAU,OAAO,KAAK,EAAE,CAAC;AAAA,IAC3F;AACA;AAAA,EACF;AAEA,MAAI,QAAQ,WAAW,UAAU,IAAI,aAAa,4BAA4B;AAC5E,QAAI;AACF,YAAM,OAAQ,MAAM,aAAa,OAAO;AACxC,UAAI,CAAC,KAAK,KAAM,OAAM,IAAI,MAAM,mBAAmB;AACnD,YAAM,SAAS,kBAAkB,KAAK,KAAK,IAAI;AAC/C,0BAAoB,KAAK,UAAU;AACnC,eAAS,UAAU,KAAK,EAAE,GAAG,QAAQ,GAAG,kBAAkB,GAAG,EAAE,CAAC;AAAA,IAClE,SAAS,OAAO;AACd,eAAS,UAAU,KAAK,EAAE,OAAO,iBAAiB,QAAQ,MAAM,UAAU,OAAO,KAAK,EAAE,CAAC;AAAA,IAC3F;AACA;AAAA,EACF;AAEA,MAAI,QAAQ,WAAW,UAAU,IAAI,aAAa,sBAAsB;AACtE,QAAI;AACF,YAAM,OAAQ,MAAM,aAAa,OAAO;AAKxC,YAAM,QAAQ,gBAAgB,KAAK;AAAA,QACjC,UAAU,OAAO,KAAK,YAAY,EAAE;AAAA,QACpC,kBAAkB,OAAO,KAAK,oBAAoB,EAAE;AAAA,QACpD,gBAAgB,OAAO,KAAK,kBAAkB,EAAE;AAAA,MAClD,CAAC;AACD,0BAAoB,KAAK,WAAW;AACpC,eAAS,UAAU,KAAK,EAAE,OAAO,SAAS,sBAAsB,KAAK,GAAG,GAAG,kBAAkB,GAAG,EAAE,CAAC;AAAA,IACrG,SAAS,OAAO;AACd,eAAS,UAAU,KAAK,EAAE,OAAO,iBAAiB,QAAQ,MAAM,UAAU,OAAO,KAAK,EAAE,CAAC;AAAA,IAC3F;AACA;AAAA,EACF;AAEA,MAAI,QAAQ,WAAW,UAAU,IAAI,aAAa,yBAAyB;AACzE,QAAI;AACF,YAAM,OAAQ,MAAM,aAAa,OAAO;AACxC,YAAM,QAAQ,mBAAmB,KAAK;AAAA,QACpC,UAAU,OAAO,KAAK,YAAY,EAAE;AAAA,QACpC,MAAM,OAAO,KAAK,QAAQ,EAAE;AAAA,QAC5B,SAAS,OAAO,KAAK,WAAW,EAAE;AAAA,MACpC,CAAC;AACD,0BAAoB,KAAK,cAAc;AACvC,eAAS,UAAU,KAAK,EAAE,OAAO,SAAS,yBAAyB,KAAK,GAAG,GAAG,kBAAkB,GAAG,EAAE,CAAC;AAAA,IACxG,SAAS,OAAO;AACd,eAAS,UAAU,KAAK,EAAE,OAAO,iBAAiB,QAAQ,MAAM,UAAU,OAAO,KAAK,EAAE,CAAC;AAAA,IAC3F;AACA;AAAA,EACF;AAEA,MAAI,QAAQ,WAAW,UAAU,IAAI,aAAa,qBAAqB;AACrE,QAAI;AACF,YAAM,UAAU,YAAY,GAAG;AAC/B,0BAAoB,KAAK,aAAa;AACtC,eAAS,UAAU,KAAK,EAAE,SAAS,GAAG,kBAAkB,GAAG,EAAE,CAAC;AAAA,IAChE,SAAS,OAAO;AACd,eAAS,UAAU,KAAK,EAAE,OAAO,iBAAiB,QAAQ,MAAM,UAAU,OAAO,KAAK,EAAE,CAAC;AAAA,IAC3F;AACA;AAAA,EACF;AAEA,MAAI,QAAQ,WAAW,UAAU,IAAI,aAAa,8BAA8B;AAC9E,gCAA4B,GAAG;AAC/B,aAAS,UAAU,KAAK,kBAAkB,KAAK,EAAE,qBAAqB,KAAK,CAAC,CAAC;AAC7E;AAAA,EACF;AAEA,WAAS,UAAU,KAAK,EAAE,OAAO,aAAa,CAAC;AACjD;AAEA,SAAS,OAAO,QAAgB,MAAc,MAA+B;AAC3E,SAAO,IAAI,QAAQ,CAACA,UAAS,WAAW;AACtC,WAAO,KAAK,SAAS,MAAM;AAC3B,WAAO,OAAO,MAAM,MAAM,MAAM;AAC9B,YAAM,UAAU,OAAO,QAAQ;AAC/B,UAAI,CAAC,WAAW,OAAO,YAAY,UAAU;AAC3C,eAAO,IAAI,MAAM,wCAAwC,CAAC;AAC1D;AAAA,MACF;AACA,MAAAA,SAAQ,QAAQ,IAAI;AAAA,IACtB,CAAC;AAAA,EACH,CAAC;AACH;AAEA,eAAsB,iBAAiB,SAAyD;AAC9F,QAAM,OAAO,QAAQ,QAAQ;AAC7B,QAAM,gBAAgB,QAAQ,QAAQ;AACtC,+BAA6B,QAAQ,GAAG;AACxC,sBAAoB,QAAQ,GAAG;AAE/B,QAAM,SAAS,aAAa,CAAC,SAAS,aAAa;AACjD,kBAAc,QAAQ,KAAK,SAAS,QAAQ,EAAE,MAAM,CAAC,UAAU;AAC7D,eAAS,UAAU,KAAK,EAAE,OAAO,iBAAiB,QAAQ,MAAM,UAAU,OAAO,KAAK,EAAE,CAAC;AAAA,IAC3F,CAAC;AAAA,EACH,CAAC;AAED,MAAI,OAAO;AACX,MAAI,eAAe;AACnB,MAAI;AACF,WAAO,MAAM,OAAO,QAAQ,MAAM,aAAa;AAAA,EACjD,SAAS,OAAO;AACd,QAAI,iBAAiB,SAAS,UAAU,SAAS,MAAM,SAAS,cAAc;AAC5E,qBAAe;AACf,aAAO,MAAM,OAAO,QAAQ,MAAM,CAAC;AAAA,IACrC,OAAO;AACL,YAAM;AAAA,IACR;AAAA,EACF;AAEA,SAAO;AAAA,IACL,KAAK,UAAU,IAAI,IAAI,IAAI;AAAA,IAC3B;AAAA,IACA;AAAA,IACA;AAAA,IACA,aAAa;AAAA,IACb,OAAO,MACL,IAAI,QAAQ,CAACA,UAAS,WAAW;AAC/B,aAAO,MAAM,CAAC,eAAe;AAC3B,YAAI,WAAY,QAAO,UAAU;AAAA,YAC5B,CAAAA,SAAQ;AAAA,MACf,CAAC;AAAA,IACH,CAAC;AAAA,EACL;AACF;;;AWtYA,SAAS,aAA6B;AACtC,SAAS,gBAAAC,qBAA4E;AACrF,SAAS,QAAAC,cAAY;AAmBrB,IAAMC,gBAAe;AACrB,IAAMC,gBAAe;AAIrB,IAAM,aAAa,oBAAI,IAAe;AACtC,IAAI,gBAAkC;AACtC,IAAI,oBAAmC;AAEvC,SAASC,UAAS,UAA0B,YAAoB,SAAwB;AACtF,WAAS,UAAU,YAAY;AAAA,IAC7B,gBAAgB;AAAA,IAChB,iBAAiB;AAAA,EACnB,CAAC;AACD,WAAS,IAAI,KAAK,UAAU,OAAO,CAAC;AACtC;AAEA,SAASC,UAAS,UAA0B,MAAoB;AAC9D,WAAS,UAAU,KAAK;AAAA,IACtB,gBAAgB;AAAA,IAChB,iBAAiB;AAAA,IACjB,2BACE;AAAA,EACJ,CAAC;AACD,WAAS,IAAI,IAAI;AACnB;AAEA,SAAS,aAAa,OAAe,MAAqB;AACxD,QAAM,UAAU,UAAU,KAAK;AAAA,QAAW,KAAK,UAAU,IAAI,CAAC;AAAA;AAAA;AAC9D,aAAW,UAAU,YAAY;AAC/B,QAAI;AACF,aAAO,MAAM,OAAO;AAAA,IACtB,QAAQ;AACN,iBAAW,OAAO,MAAM;AAAA,IAC1B;AAAA,EACF;AACF;AAEA,SAAS,cAAoB;AAC3B,MAAI,eAAe;AACjB,kBAAc,MAAM;AACpB,oBAAgB;AAChB,wBAAoB;AAAA,EACtB;AACF;AAEA,SAAS,mBAAmB,KAAa,WAAyB;AAChE,QAAMC,cAAaC,OAAK,KAAK,sBAAsB,WAAW,cAAc;AAC5E,MAAI,sBAAsBD,eAAc,cAAe;AACvD,cAAY;AACZ,sBAAoBA;AACpB,MAAI;AACF,oBAAgB,MAAMA,aAAY,MAAM;AACtC,UAAI;AACF,cAAM,SAAS,kBAAkB,KAAK,SAAS;AAC/C,cAAM,SAAS,OAAO,GAAG,EAAE;AAC3B,YAAI,OAAQ,cAAa,SAAS,EAAE,WAAW,OAAO,QAAQ,OAAO,OAAO,OAAO,CAAC;AAAA,MACtF,QAAQ;AAAA,MAER;AAAA,IACF,CAAC;AAAA,EACH,QAAQ;AACN,wBAAoB;AACpB,oBAAgB;AAAA,EAClB;AACF;AAEA,SAAS,cAAc,KAA4B;AACjD,MAAI,CAAC,gBAAgB,KAAK,GAAG,EAAG,QAAO;AACvC,SAAO;AACT;AAEA,SAASE,eAAc,KAAa,SAA0B,UAAgC;AAC5F,QAAM,MAAM,IAAI,IAAI,QAAQ,OAAO,KAAK,kBAAkB;AAE1D,MAAI,QAAQ,WAAW,UAAU,IAAI,aAAa,OAAO,IAAI,aAAa,YAAY;AACpF,IAAAH,UAAS,UAAU,gCAAgC,GAAG,CAAC;AACvD;AAAA,EACF;AAEA,MAAI,QAAQ,WAAW,SAAS,IAAI,aAAa,iBAAiB;AAChE,qBAAiB,GAAG;AACpB,QAAI,kBAAkB;AACtB,QAAI;AACF,wBAAkB,mBAAmB,GAAG;AAAA,IAC1C,QAAQ;AACN,wBAAkB;AAAA,IACpB;AACA,UAAM,WAAW,aAAa,GAAG;AACjC,IAAAD,UAAS,UAAU,KAAK,EAAE,iBAAiB,SAAS,CAAC;AACrD;AAAA,EACF;AAEA,QAAM,cAAc,IAAI,SAAS,MAAM,oCAAoC;AAC3E,MAAI,QAAQ,WAAW,SAAS,aAAa;AAC3C,UAAM,YAAY,cAAc,YAAY,CAAC,KAAK,EAAE;AACpD,QAAI,CAAC,WAAW;AACd,MAAAA,UAAS,UAAU,KAAK,EAAE,OAAO,sBAAsB,CAAC;AACxD;AAAA,IACF;AACA,QAAI;AACF,YAAMK,WAAU,YAAY,KAAK,SAAS;AAC1C,YAAM,SAAS,kBAAkB,KAAK,SAAS;AAC/C,MAAAL,UAAS,UAAU,KAAK,EAAE,SAAAK,UAAS,OAAO,CAAC;AAAA,IAC7C,SAAS,OAAO;AACd,MAAAL,UAAS,UAAU,KAAK,EAAE,OAAO,iBAAiB,QAAQ,MAAM,UAAU,OAAO,KAAK,EAAE,CAAC;AAAA,IAC3F;AACA;AAAA,EACF;AAEA,MAAI,QAAQ,WAAW,SAAS,IAAI,aAAa,sBAAsB;AACrE,UAAM,YAAY,IAAI,aAAa,IAAI,WAAW,KAAK;AACvD,QAAI,WAAW;AACf,QAAI,CAAC,UAAU;AACb,UAAI;AACF,mBAAW,mBAAmB,GAAG;AAAA,MACnC,QAAQ;AACN,QAAAA,UAAS,UAAU,KAAK,EAAE,OAAO,qBAAqB,CAAC;AACvD;AAAA,MACF;AAAA,IACF;AACA,QAAI,CAAC,cAAc,QAAQ,GAAG;AAC5B,MAAAA,UAAS,UAAU,KAAK,EAAE,OAAO,sBAAsB,CAAC;AACxD;AAAA,IACF;AAEA,aAAS,UAAU,KAAK;AAAA,MACtB,gBAAgB;AAAA,MAChB,iBAAiB;AAAA,MACjB,YAAY;AAAA,IACd,CAAC;AACD,aAAS,MAAM,iBAAiB;AAChC,eAAW,IAAI,QAAQ;AACvB,uBAAmB,KAAK,QAAQ;AAEhC,QAAI;AACF,YAAM,SAAS,kBAAkB,KAAK,QAAQ;AAC9C,eAAS,MAAM;AAAA,QAA0B,KAAK,UAAU,EAAE,WAAW,UAAU,OAAO,CAAC,CAAC;AAAA;AAAA,CAAM;AAAA,IAChG,QAAQ;AACN,eAAS,MAAM;AAAA,QAA0B,KAAK,UAAU,EAAE,WAAW,UAAU,QAAQ,CAAC,EAAE,CAAC,CAAC;AAAA;AAAA,CAAM;AAAA,IACpG;AAEA,YAAQ,GAAG,SAAS,MAAM;AACxB,iBAAW,OAAO,QAAQ;AAC1B,UAAI,WAAW,SAAS,EAAG,aAAY;AAAA,IACzC,CAAC;AACD;AAAA,EACF;AAEA,EAAAA,UAAS,UAAU,KAAK,EAAE,OAAO,aAAa,CAAC;AACjD;AAEA,SAASM,QAAO,QAAgB,MAAc,MAA+B;AAC3E,SAAO,IAAI,QAAQ,CAACC,UAAS,WAAW;AACtC,WAAO,KAAK,SAAS,MAAM;AAC3B,WAAO,OAAO,MAAM,MAAM,MAAM;AAC9B,YAAM,UAAU,OAAO,QAAQ;AAC/B,UAAI,CAAC,WAAW,OAAO,YAAY,UAAU;AAC3C,eAAO,IAAI,MAAM,yCAAyC,CAAC;AAC3D;AAAA,MACF;AACA,MAAAA,SAAQ,QAAQ,IAAI;AAAA,IACtB,CAAC;AAAA,EACH,CAAC;AACH;AAEA,eAAsB,kBAAkB,SAA2D;AACjG,QAAM,OAAO,QAAQ,QAAQR;AAC7B,QAAM,gBAAgB,QAAQ,QAAQD;AACtC,mBAAiB,QAAQ,GAAG;AAE5B,QAAM,SAASU,cAAa,CAAC,SAAS,aAAa;AACjD,QAAI;AACF,MAAAJ,eAAc,QAAQ,KAAK,SAAS,QAAQ;AAAA,IAC9C,SAAS,OAAO;AACd,MAAAJ,UAAS,UAAU,KAAK,EAAE,OAAO,iBAAiB,QAAQ,MAAM,UAAU,OAAO,KAAK,EAAE,CAAC;AAAA,IAC3F;AAAA,EACF,CAAC;AAED,MAAI,OAAO;AACX,MAAI,eAAe;AACnB,MAAI;AACF,WAAO,MAAMM,QAAO,QAAQ,MAAM,aAAa;AAAA,EACjD,SAAS,OAAO;AACd,QAAI,iBAAiB,SAAS,UAAU,SAAS,MAAM,SAAS,cAAc;AAC5E,qBAAe;AACf,aAAO,MAAMA,QAAO,QAAQ,MAAM,CAAC;AAAA,IACrC,OAAO;AACL,YAAM;AAAA,IACR;AAAA,EACF;AAEA,SAAO;AAAA,IACL,KAAK,UAAU,IAAI,IAAI,IAAI;AAAA,IAC3B;AAAA,IACA;AAAA,IACA;AAAA,IACA,OAAO,MACL,IAAI,QAAQ,CAACC,UAAS,WAAW;AAC/B,kBAAY;AACZ,iBAAW,UAAU,YAAY;AAC/B,YAAI;AACF,iBAAO,IAAI;AAAA,QACb,QAAQ;AAAA,QAER;AAAA,MACF;AACA,iBAAW,MAAM;AACjB,aAAO,MAAM,CAAC,eAAe;AAC3B,YAAI,WAAY,QAAO,UAAU;AAAA,YAC5B,CAAAA,SAAQ;AAAA,MACf,CAAC;AAAA,IACH,CAAC;AAAA,EACL;AACF;;;AC3OA,SAAS,cAAAE,cAAY,gBAAAC,sBAAoB;AACzC,SAAS,SAAS,QAAAC,cAAY;AA6C9B,SAAS,wBAAwB,SAA2C;AAC1E,QAAM,UAAoC,EAAE,OAAO,CAAC,GAAG,WAAW,CAAC,GAAG,UAAU,CAAC,GAAG,SAAS,CAAC,EAAE;AAChG,QAAM,WAAW,QAAQ,MAAM,OAAO,EAAE,MAAM,CAAC;AAC/C,aAAW,WAAW,UAAU;AAC9B,UAAM,CAAC,aAAa,GAAG,SAAS,IAAI,QAAQ,MAAM,IAAI;AACtD,QAAI,CAAC,YAAa;AAClB,UAAMC,WAAU,YAAY,KAAK,EAAE,YAAY;AAC/C,UAAM,QAAQ,UAAU,IAAI,CAACC,UAASA,MAAK,KAAK,CAAC,EAAE,OAAO,OAAO;AACjE,QAAID,aAAY,SAAS;AACvB,iBAAWC,SAAQ,OAAO;AACxB,cAAM,QAAQA,MAAK,MAAM,uBAAuB;AAChD,YAAI,QAAQ,CAAC,KAAK,MAAM,CAAC,EAAG,SAAQ,OAAO,KAAK,EAAE,OAAO,MAAM,CAAC,GAAG,MAAM,MAAM,CAAC,EAAE,CAAC;AAAA,MACrF;AAAA,IACF;AACA,QAAID,aAAY,aAAa;AAC3B,iBAAWC,SAAQ,OAAO;AACxB,cAAM,QAAQA,MAAK,MAAM,iDAAiD;AAC1E,YAAI,QAAQ,CAAC,KAAK,MAAM,CAAC,GAAG;AAC1B,kBAAQ,WAAW,KAAK,EAAE,OAAO,MAAM,CAAC,GAAG,MAAM,MAAM,CAAC,GAAG,GAAI,MAAM,CAAC,IAAI,EAAE,MAAM,MAAM,CAAC,EAAE,IAAI,CAAC,EAAG,CAAC;AAAA,QACtG;AAAA,MACF;AAAA,IACF;AACA,QAAID,aAAY,YAAY;AAC1B,iBAAWC,SAAQ,OAAO;AACxB,cAAM,QAAQA,MAAK,MAAM,yDAAyD;AAClF,YAAI,QAAQ,CAAC,KAAK,QAAQ,CAAC,KAAK,QAAQ,CAAC,KAAK,QAAQ,CAAC,GAAG;AACxD,kBAAQ,UAAU,KAAK;AAAA,YACrB,aAAa,MAAM,CAAC;AAAA,YACpB,WAAW,MAAM,CAAC;AAAA,YAClB,UAAU,MAAM,CAAC;AAAA,YACjB,MAAM,MAAM,CAAC;AAAA,UACf,CAAC;AAAA,QACH;AAAA,MACF;AAAA,IACF;AACA,QAAID,aAAY,WAAW;AACzB,iBAAWC,SAAQ,OAAO;AACxB,cAAM,QAAQA,MAAK,MAAM,6EAA6E;AACtG,YAAI,QAAQ,CAAC,KAAK,QAAQ,CAAC,GAAG;AAC5B,kBAAQ,SAAS,KAAK;AAAA,YACpB,MAAM,MAAM,CAAC,EAAE,KAAK;AAAA,YACpB,QAAQ,MAAM,CAAC,EAAE,YAAY;AAAA,YAC7B,GAAI,MAAM,CAAC,IAAI,EAAE,UAAU,MAAM,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC;AAAA,UAClD,CAAC;AAAA,QACH;AAAA,MACF;AAAA,IACF;AACA,QAAID,aAAY,WAAW;AACzB,UAAI,MAAM,KAAK,CAACC,UAAS,kBAAkB,KAAKA,KAAI,CAAC,EAAG,SAAQ,SAAS;AACzE,UAAI,MAAM,KAAK,CAACA,UAAS,iBAAiB,KAAKA,KAAI,CAAC,EAAG,SAAQ,QAAQ;AAAA,IACzE;AAAA,EACF;AACA,SAAO;AACT;AAEO,SAAS,oBAAoB,UAA4C;AAC9E,QAAM,UAAUC,eAAa,UAAU,MAAM;AAC7C,QAAM,MAAM,QAAQ,QAAQ,EAAE,YAAY;AAC1C,MAAI,QAAQ,SAAS;AACnB,UAAM,SAAS,KAAK,MAAM,OAAO;AACjC,QAAI,CAAC,UAAU,OAAO,WAAW,SAAU,OAAM,IAAI,MAAM,oCAAoC;AAC/F,WAAO;AAAA,EACT;AACA,MAAI,QAAQ,SAAS,QAAQ,YAAa,QAAO,wBAAwB,OAAO;AAChF,QAAM,IAAI,MAAM,sCAAsC;AACxD;AAEO,SAAS,uBAAuB,KAAa,SAA4D;AAC9G,QAAM,UAAU;AAAA,IACd,OAAO;AAAA,IACP,WAAW;AAAA,IACX,UAAU;AAAA,IACV,aAAa;AAAA,IACb,WAAW;AAAA,IACX,eAAe;AAAA,IACf,SAAS;AAAA,EACX;AAEA,MAAI,QAAQ,OAAO;AACjB,iBAAa,KAAK,QAAQ,KAAK;AAAA,EACjC;AAEA,aAAW,QAAQ,QAAQ,SAAS,CAAC,GAAG;AACtC,eAAW,KAAK,KAAK,OAAO,KAAK,IAAI;AACrC,YAAQ,SAAS;AAAA,EACnB;AAEA,aAAW,YAAY,QAAQ,aAAa,CAAC,GAAG;AAC9C,mBAAe,KAAK,SAAS,OAAO,SAAS,MAAM,SAAS,IAAI;AAChE,YAAQ,aAAa;AAAA,EACvB;AAEA,aAAW,WAAW,QAAQ,YAAY,CAAC,GAAG;AAC5C,kBAAc,KAAK,OAAO;AAC1B,YAAQ,YAAY;AAAA,EACtB;AAEA,aAAWC,eAAc,QAAQ,eAAe,CAAC,GAAG;AAClD,qBAAiB,KAAK;AAAA,MACpB,OAAOA,YAAW,SAAS;AAAA,MAC3B,MAAMA,YAAW;AAAA,MACjB,GAAIA,YAAW,QAAQ,EAAE,SAASA,YAAW,MAAM,IAAI,CAAC;AAAA,IAC1D,CAAC;AACD,YAAQ,eAAe;AAAA,EACzB;AAEA,aAAW,YAAY,QAAQ,aAAa,CAAC,GAAG;AAC9C,mBAAe,KAAK,SAAS,MAAM,SAAS,IAAI;AAChD,YAAQ,aAAa;AAAA,EACvB;AAEA,aAAW,gBAAgB,QAAQ,iBAAiB,CAAC,GAAG;AACtD,uBAAmB,KAAK,aAAa,SAAS,aAAa,QAAQ,aAAa,KAAK;AACrF,YAAQ,iBAAiB;AAAA,EAC3B;AAEA,aAAW,UAAU,QAAQ,WAAW,CAAC,GAAG;AAC1C,yBAAqB,KAAK,OAAO,MAAM,OAAO,QAAQ,OAAO,QAAQ;AACrE,YAAQ,WAAW;AAAA,EACrB;AAEA,MAAI,WAAW;AACf,MAAI,QAAQ,WAAW,OAAO;AAC5B,wBAAoB,GAAG;AACvB,eAAW;AAAA,EACb;AAEA,MAAI,SAAS;AACb,MAAI,QAAQ,OAAO;AACjB,UAAM,SAAS,QAAQ,UAAU,OAAO,aAAa,QAAQ;AAC7D,iBAAa,KAAK,MAAM;AACxB,aAAS;AAAA,EACX;AAEA,QAAM,YAAY,mBAAmB,GAAG;AACxC,SAAO;AAAA,IACL;AAAA,IACA,aAAa,+BAA+B,SAAS;AAAA,IACrD;AAAA,IACA;AAAA,IACA;AAAA,EACF;AACF;AAEO,SAAS,0BAA0B,KAAa,UAA2C;AAChG,QAAM,WAAWC,OAAK,KAAK,QAAQ;AACnC,MAAI,CAACC,aAAW,QAAQ,EAAG,OAAM,IAAI,MAAM,8BAA8B,QAAQ,EAAE;AACnF,SAAO,uBAAuB,KAAK,oBAAoB,QAAQ,CAAC;AAClE;;;AClMA,OAAO,QAAQ;AAEf,IAAM,eAAe,QAAQ,IAAI,aAAa,UAAa,QAAQ,OAAO,UAAU;AAEpF,SAAS,MAAM,SAAmC,MAAsB;AACtE,SAAO,eAAe,QAAQ,IAAI,IAAI;AACxC;AAEO,IAAM,QAAQ;AAAA,EACnB,SAAS,CAAC,SAAiB,MAAM,GAAG,MAAM,IAAI;AAAA,EAC9C,MAAM,CAAC,SAAiB,MAAM,GAAG,OAAO,IAAI;AAAA,EAC5C,MAAM,CAAC,SAAiB,MAAM,GAAG,QAAQ,IAAI;AAAA,EAC7C,MAAM,CAAC,SAAiB,MAAM,GAAG,KAAK,IAAI;AAAA,EAC1C,KAAK,CAAC,SAAiB,MAAM,GAAG,KAAK,IAAI;AAAA,EACzC,MAAM,CAAC,SAAiB,MAAM,GAAG,MAAM,IAAI;AAC7C;AAEO,SAAS,WAAW,OAAyC;AAClE,QAAM,QAAQ,MAAM,YAAY,EAAE,OAAO,CAAC;AAC1C,MAAI,UAAU,OAAQ,QAAO,MAAM,KAAK,KAAK;AAC7C,MAAI,UAAU,OAAQ,QAAO,MAAM,KAAK,KAAK;AAC7C,SAAO,MAAM,KAAK,KAAK;AACzB;AAEO,SAAS,UAAU,OAAsB;AAC9C,UAAQ,IAAI,KAAK,UAAU,OAAO,MAAM,CAAC,CAAC;AAC5C;AAEO,SAAS,QAAQ,MAAoB;AAC1C,UAAQ,IAAI,MAAM,QAAQ,IAAI,CAAC;AACjC;AAEO,SAAS,KAAK,OAAO,IAAU;AACpC,UAAQ,IAAI,IAAI;AAClB;AAEO,SAAS,OAAO,MAAoB;AACzC,UAAQ,IAAI,MAAM,IAAI,KAAK,IAAI,EAAE,CAAC;AACpC;AAEO,SAAS,SAAS,MAAoB;AAC3C,UAAQ,IAAI,KAAK,IAAI,EAAE;AACzB;AAGO,SAAS,UAAU,OAAe,OAAuB;AAC9D,MAAI,MAAM,WAAW,EAAG;AACxB,UAAQ,IAAI,GAAG,MAAM,KAAK,KAAK,CAAC,KAAK,MAAM,MAAM,GAAG;AACpD,aAAW,QAAQ,MAAO,SAAQ,IAAI,KAAK,IAAI,EAAE;AACnD;AAEO,SAAS,KAAK,SAAuB;AAC1C,UAAQ,MAAM,MAAM,KAAK,UAAU,OAAO,EAAE,CAAC;AAC/C;;;A1CbA,IAAM,UAAU,IAAI,QAAQ;AAC5B,IAAM,yBAAyB,CAAC,WAAW,WAAW,YAAY,gBAAgB;AAGlF,SAAS,uBAAuB,OAA8C;AAC5E,SAAO,uBAAuB,SAAS,KAA6B;AACtE;AAEA,QAAQ,KAAK,WAAW,EAAE,YAAY,kEAAkE,EAAE,QAAQ,eAAe;AAcjI,eAAe,wBAAwB,KAA4B;AAEjE,MAAI,CAAC,QAAQ,MAAM,SAAS,CAAC,QAAQ,OAAO,MAAO;AAEnD,QAAM,QAAQ,MAAM,OAAO,gBAAgB;AAC3C,QAAM,MAAM,wBAAwB;AAEpC,QAAM,YAAY;AAAA,IAChB,EAAE,KAAK,kBAAkB,SAAS,wDAAwD;AAAA,IAC1F,EAAE,KAAK,mBAAmB,SAAS,oCAAoC;AAAA,IACvE,EAAE,KAAK,aAAa,SAAS,oDAAoD;AAAA,IACjF,EAAE,KAAK,eAAe,SAAS,4EAA4E;AAAA,EAC7G;AAEA,QAAM,UAAkC,CAAC;AACzC,aAAW,YAAY,WAAW;AAChC,UAAM,SAAS,MAAM,MAAM,KAAK,EAAE,SAAS,SAAS,SAAS,aAAa,8BAA8B,CAAC;AACzG,QAAI,MAAM,SAAS,MAAM,GAAG;AAC1B,YAAM,OAAO,oGAAoG;AACjH;AAAA,IACF;AACA,QAAI,OAAO,WAAW,YAAY,OAAO,KAAK,EAAG,SAAQ,SAAS,GAAG,IAAI,OAAO,KAAK;AAAA,EACvF;AAEA,MAAI,OAAO,KAAK,OAAO,EAAE,SAAS,GAAG;AACnC,UAAM,cAAcC,OAAK,KAAK,cAAc,sBAAsB;AAClE,QAAIC,aAAW,WAAW,GAAG;AAC3B,YAAMC,WAAU,KAAK,MAAMC,eAAa,aAAa,MAAM,CAAC;AAC5D,aAAO,OAAOD,UAAS,OAAO;AAC9B,MAAAE,eAAc,aAAa,GAAG,KAAK,UAAUF,UAAS,MAAM,CAAC,CAAC;AAAA,CAAI;AAClE,2BAAqB,GAAG;AAAA,IAC1B;AAAA,EACF;AAEA,QAAM,MAAM,kDAAkD;AAChE;AAEA,eAAe,eAAe,SAAwE;AACpG,QAAM,SAAS,MAAM,iBAAiB;AAAA,IACpC,KAAK,QAAQ,IAAI;AAAA,IACjB,MAAM,QAAQ;AAAA,IACd,MAAM,QAAQ;AAAA,EAChB,CAAC;AACD,MAAI,OAAO,cAAc;AACvB,YAAQ,KAAK,QAAQ,OAAO,aAAa,kHAA6G;AACtJ,YAAQ,KAAK,uBAAuB,OAAO,IAAI,WAAW;AAAA,EAC5D;AACA,UAAQ,IAAI,cAAc,eAAe,WAAM,OAAO,WAAW,YAAY,OAAO,GAAG,GAAG;AAC1F,UAAQ,IAAI,2BAA2B,OAAO,GAAG,wBAAwB,OAAO,GAAG,SAAS;AAC5F,UAAQ,IAAI,yEAAyE;AACrF,MAAI,QAAQ,KAAM,MAAK,YAAY,GAAG,OAAO,GAAG,GAAG;AACnD,QAAM,IAAI,QAAc,CAACG,aAAY;AACnC,UAAM,WAAW,MAAM;AACrB,WAAK,OAAO,MAAM,EAAE,QAAQA,QAAO;AAAA,IACrC;AACA,YAAQ,KAAK,UAAU,QAAQ;AAC/B,YAAQ,KAAK,WAAW,QAAQ;AAAA,EAClC,CAAC;AACH;AAEA,QACG,QAAQ,MAAM,EACd,YAAY,0DAA0D,EACtE,OAAO,mBAAmB,6BAA6B,eAAe,EACtE,OAAO,WAAW,uDAAuD,EACzE,OAAO,2BAA2B,oFAAoF,EACtH,OAAO,YAAY,4FAA4F,EAC/G,OAAO,aAAa,sEAAsE,EAC1F,OAAO,UAAU,qCAAqC,EACtD,OAAO,WAAW,uCAAuC,EACzD,OAAO,cAAc,4CAA4C,EACjE,OAAO,UAAU,gDAAgD,EACjE,OAAO,OAAO,YAAgC;AAC7C,QAAM,MAAM,QAAQ,IAAI;AAExB,MAAI,QAAQ,QAAQ;AAClB,UAAM,UAAU,YAAY,KAAK,QAAQ,KAAK;AAC9C,QAAI,QAAQ,MAAM;AAChB,gBAAU,EAAE,QAAQ,MAAM,SAAS,QAAQ,SAAS,SAAS,QAAQ,SAAS,SAAS,QAAQ,SAAS,WAAW,QAAQ,UAAU,CAAC;AACtI;AAAA,IACF;AACA,YAAQ,0BAA0B;AAClC,cAAU,gBAAgB,QAAQ,QAAQ,WAAW;AACrD,cAAU,6BAA6B,QAAQ,QAAQ,mBAAmB;AAC1E,cAAU,sBAAsB,QAAQ,SAAS;AACjD,SAAK;AACL,SAAK,OAAO,MAAM,KAAK,gBAAgB,CAAC,YAAY;AACpD;AAAA,EACF;AAEA,QAAM,SAAS,YAAY;AAAA,IACzB;AAAA,IACA,OAAO,QAAQ;AAAA,IACf,OAAO,QAAQ,QAAQ,KAAK;AAAA,IAC5B,GAAI,QAAQ,WAAW,EAAE,UAAU,QAAQ,SAAS,IAAI,CAAC;AAAA,EAC3D,CAAC;AACD,QAAMH,WAAU,QAAQ,SAAS,mBAAmB,GAAG,IAAI;AAE3D,MAAI,QAAQ,MAAM;AAChB,cAAUA,WAAU,EAAE,SAAS,QAAQ,SAAAA,SAAQ,IAAI,MAAM;AAAA,EAC3D,OAAO;AACL,YAAQ,aAAa,eAAe,sBAAsB,QAAQ,KAAK,GAAG;AAC1E,cAAU,WAAW,OAAO,MAAM;AAClC,cAAU,aAAa,OAAO,SAAS;AACvC,cAAU,eAAe,OAAO,WAAW;AAC3C,QAAI,OAAO,UAAU,SAAS,GAAG;AAC/B,gBAAU,0DAA0D,OAAO,SAAS;AACpF,aAAO,gEAAgE;AAAA,IACzE;AACA,SAAK;AACL,SAAK,aAAa,OAAO,YAAY,EAAE;AAAA,EACzC;AAEA,MAAI,QAAQ,UAAUA,UAAS;AAC7B,QAAI,CAAC,QAAQ,MAAM;AACjB,WAAK;AACL,cAAQ,iBAAiB;AACzB,WAAK,YAAYA,SAAQ,WAAW,EAAE;AACtC,UAAIA,SAAQ,cAAc,SAAS,GAAG;AACpC,aAAK,iBAAiB;AACtB,mBAAW,YAAYA,SAAQ,cAAe,UAAS,QAAQ;AAAA,MACjE;AAAA,IACF;AACA,UAAM,wBAAwB,GAAG;AAAA,EACnC;AAEA,MAAI,CAAC,QAAQ,MAAM;AACjB,SAAK;AACL,SAAK,aAAa,MAAM,KAAK,iBAAiB,CAAC,sBAAsB;AAAA,EACvE;AAEA,QAAM,eAAe,CAAC,QAAQ,WAAW,CAAC,QAAQ;AAClD,QAAM,cAAc,QAAQ,QAAQ,KAAK,KAAM,gBAAiB,MAAM,iBAAiB,IAAI;AAC3F,MAAI,aAAa;AACf,UAAM,eAAe,EAAE,MAAM,MAAM,MAAM,aAAa,MAAM,QAAQ,QAAQ,IAAI,EAAE,CAAC;AAAA,EACrF;AACF,CAAC;AAEH,QACG,QAAQ,OAAO,EACf,YAAY,wDAAwD,EACpE,OAAO,UAAU,qCAAqC,EACtD,OAAO,2BAA2B,0DAA0D,gBAAgB,KAAK,IAAI,CAAC,GAAG,EACzH,OAAO,CAAC,YAAuD;AAC9D,QAAMI,UAAS,kBAAkB,QAAQ,IAAI,CAAC;AAC9C,MAAI;AACJ,MAAI,QAAQ,cAAc;AACxB,QAAI,CAAC,sBAAsB,QAAQ,YAAY,GAAG;AAChD,WAAK,kCAAkC,QAAQ,YAAY,uBAAuB,gBAAgB,KAAK,IAAI,CAAC,GAAG;AAC/G,cAAQ,WAAW;AACnB;AAAA,IACF;AACA,uBAAmB,QAAQ;AAAA,EAC7B;AAEA,MAAI,QAAQ,MAAM;AAChB,cAAUA,OAAM;AAAA,EAClB,OAAO;AACL,UAAM,iBAAiBA,QAAO,QAAQ,OAAO,IAAI,MAAM,OAAOA,QAAO,QAAQ,OAAO,IAAI,MAAM,OAAO,MAAM;AAC3G,SAAK,GAAG,MAAM,KAAK,WAAW,CAAC,IAAI,eAAeA,QAAO,UAAU,KAAK,CAAC,KAAKA,QAAO,UAAU,OAAO,EAAE;AACxG,SAAK,GAAG,MAAM,KAAK,SAAS,CAAC,SAASA,QAAO,QAAQ,IAAI,SAASA,QAAO,QAAQ,IAAI,SAASA,QAAO,QAAQ,IAAI,EAAE;AACnH,QAAIA,QAAO,UAAU,YAAY,SAAS,GAAG;AAC3C,WAAK,MAAM,KAAK,cAAc,CAAC;AAC/B,iBAAW,UAAUA,QAAO,UAAU,YAAa,UAAS,MAAM;AAAA,IACpE;AACA,SAAK;AACL,eAAW,WAAWA,QAAO,UAAU;AACrC,WAAK,GAAG,WAAW,QAAQ,KAAK,CAAC,IAAI,QAAQ,IAAI,KAAK,QAAQ,OAAO,EAAE;AACvE,UAAI,QAAQ,YAAa,QAAO,gBAAgB,QAAQ,WAAW,EAAE;AAAA,IACvE;AAAA,EACF;AAEA,MAAIA,QAAO,QAAQ,OAAO,GAAG;AAC3B,YAAQ,WAAW;AAAA,EACrB;AACA,MAAI,oBAAoB,CAAC,sBAAsBA,QAAO,UAAU,OAAO,gBAAgB,GAAG;AACxF,YAAQ,MAAM,mBAAmBA,QAAO,UAAU,KAAK,8BAA8B,gBAAgB,GAAG;AACxG,YAAQ,WAAW;AAAA,EACrB;AACF,CAAC;AAEH,QACG,QAAQ,MAAM,EACd,YAAY,iDAAiD,EAC7D,OAAO,UAAU,qCAAqC,EACtD,OAAO,CAAC,YAAgC;AACvC,QAAM,SAAS,YAAY,QAAQ,IAAI,CAAC;AACxC,MAAI,QAAQ,MAAM;AAChB,cAAU,MAAM;AAChB;AAAA,EACF;AACA,UAAQ,gBAAgB;AACxB,YAAU,iCAAiC,OAAO,OAAO;AACzD,YAAU,kDAAkD,OAAO,OAAO;AAC1E,YAAU,aAAa,OAAO,SAAS;AACvC,OAAK;AACL,OAAK,iBAAiB,OAAO,WAAW,EAAE;AAC1C,OAAK,kBAAkB,OAAO,YAAY,EAAE;AAC5C,MAAI,OAAO,eAAe,QAAQ,SAAS,GAAG;AAC5C,SAAK,4BAA4B,OAAO,eAAe,QAAQ,KAAK,IAAI,CAAC,EAAE;AAAA,EAC7E;AACA,OAAK;AACL,OAAK,aAAa,MAAM,KAAK,4BAA4B,CAAC,sCAAsC;AAClG,CAAC;AAEH,QACG,QAAQ,QAAQ,EAChB,YAAY,oIAAoI,EAChJ,OAAO,WAAW,+DAA+D,EACjF,OAAO,aAAa,qDAAqD,EACzE,OAAO,UAAU,qCAAqC,EACtD,OAAO,CAAC,YAAmE;AAC1E,QAAM,SAAS,cAAc,EAAE,KAAK,QAAQ,IAAI,GAAG,OAAO,QAAQ,QAAQ,KAAK,GAAG,QAAQ,QAAQ,QAAQ,MAAM,EAAE,CAAC;AACnH,MAAI,QAAQ,MAAM;AAChB,cAAU,MAAM;AAChB;AAAA,EACF;AAEA,UAAQ,OAAO,SAAS,+BAA+B,kBAAkB;AACzE,QAAM,WAAW,CAAC,WAAmB,OAAO,MAAM,OAAO,CAAC,SAAS,KAAK,WAAW,MAAM,EAAE,IAAI,CAAC,SAAS,KAAK,MAAM;AACpH,YAAU,OAAO,SAAS,iBAAiB,WAAW,SAAS,SAAS,CAAC;AACzE,YAAU,OAAO,SAAS,4BAA4B,sBAAsB,SAAS,SAAS,CAAC;AAC/F,YAAU,6BAA6B,SAAS,YAAY,CAAC;AAC7D,YAAU,OAAO,SAAS,oBAAoB,eAAe,SAAS,aAAa,CAAC;AACpF,QAAM,YAAY,OAAO,MAAM,OAAO,CAAC,SAAS,KAAK,WAAW,UAAU;AAC1E,MAAI,UAAU,SAAS,GAAG;AACxB,SAAK,GAAG,MAAM,KAAK,WAAW,CAAC,KAAK,UAAU,MAAM,GAAG;AACvD,eAAW,QAAQ,WAAW;AAC5B,WAAK,KAAK,KAAK,MAAM,GAAG,KAAK,eAAe,OAAO,KAAK,YAAY,KAAK,EAAE,EAAE;AAAA,IAC/E;AACA,WAAO,qFAAqF;AAAA,EAC9F;AACA,SAAO,cAAc,OAAO,QAAQ,SAAS,8CAA8C;AAC3F,MAAI,CAAC,OAAO,QAAQ;AAClB,SAAK;AACL,SAAK,8BAA8B,OAAO,wBAAwB,MAAM,EAAE;AAC1E,SAAK,aAAa,OAAO,YAAY,EAAE;AAAA,EACzC;AACF,CAAC;AAEH,IAAM,aAAa,QAAQ,QAAQ,KAAK,EAAE,YAAY,0BAA0B;AAChF,WACG,QAAQ,cAAc,EACtB,YAAY,4CAA4C,EACxD,OAAO,WAAW,2BAA2B,EAC7C,OAAO,aAAa,2CAA2C,EAC/D,OAAO,UAAU,qCAAqC,EACtD,OAAO,CAAC,MAAc,YAAmE;AACxF,QAAM,SAAS,SAAS,QAAQ,IAAI,GAAG,MAAM,EAAE,OAAO,QAAQ,QAAQ,KAAK,GAAG,QAAQ,QAAQ,QAAQ,MAAM,EAAE,CAAC;AAC/G,MAAI,QAAQ,MAAM;AAChB,cAAU,MAAM;AAChB;AAAA,EACF;AACA,OAAK,GAAG,OAAO,MAAM,KAAK,OAAO,MAAM,GAAG,OAAO,eAAe,OAAO,OAAO,YAAY,KAAK,EAAE,EAAE;AACnG,MAAI,QAAQ,OAAQ,QAAO,gCAAgC;AAC7D,CAAC;AAEH,QACG,QAAQ,QAAQ,EAChB,YAAY,2CAA2C,EACvD,OAAO,UAAU,qCAAqC,EACtD,OAAO,CAAC,YAAgC;AACvC,QAAM,MAAM,QAAQ,IAAI;AACxB,QAAMA,UAAS;AAAA,IACb,SAAS;AAAA,IACT,MAAM,QAAQ;AAAA,IACd,iBAAiB,WAAW,EAAE;AAAA,IAC9B,eAAe,sBAAsB,GAAG,IAAI,iBAAiB,GAAG,IAAI;AAAA,IACpE,QAAQ;AAAA,EACV;AACA,MAAI,QAAQ,MAAM;AAChB,cAAUA,OAAM;AAChB;AAAA,EACF;AACA,UAAQ,kBAAkB;AAC1B,OAAK,YAAYA,QAAO,OAAO,EAAE;AACjC,OAAK,SAASA,QAAO,IAAI,EAAE;AAC3B,OAAK,qBAAqBA,QAAO,eAAe,EAAE;AAClD,MAAIA,QAAO,eAAe;AACxB,SAAK,mBAAmBA,QAAO,cAAc,OAAO,aAAaA,QAAO,cAAc,KAAK,GAAG;AAC9F,QAAI,CAACA,QAAO,cAAc,eAAe;AACvC,aAAO,kEAAkE;AAAA,IAC3E;AAAA,EACF,OAAO;AACL,WAAO,kEAAkE;AAAA,EAC3E;AACA,OAAK,WAAW,MAAM,KAAKA,QAAO,MAAM,CAAC,EAAE;AAC7C,CAAC;AAEH,SAAS,sBAAsBA,SAA0B,MAAsB;AAC7E,MAAI,MAAM;AACR,YAAQ,IAAI,KAAK,UAAUA,SAAQ,MAAM,CAAC,CAAC;AAC3C;AAAA,EACF;AACA,UAAQ,IAAI,gBAAgBA,QAAO,QAAQ,IAAI,SAASA,QAAO,QAAQ,IAAI,SAASA,QAAO,QAAQ,IAAI,EAAE;AACzG,aAAW,WAAWA,QAAO,UAAU;AACrC,UAAM,SAAS,QAAQ,MAAM,YAAY,EAAE,OAAO,CAAC;AACnD,YAAQ,IAAI,GAAG,MAAM,IAAI,QAAQ,IAAI,KAAK,QAAQ,OAAO,EAAE;AAC3D,QAAI,QAAQ,YAAa,SAAQ,IAAI,qBAAqB,QAAQ,WAAW,EAAE;AAAA,EACjF;AACF;AAEA,IAAM,UAAU,QAAQ,QAAQ,SAAS,EAAE,YAAY,0CAA0C;AAEjG,QACG,QAAQ,mBAAmB,EAC3B,YAAY,qFAAqF,EACjG,OAAO,UAAU,qCAAqC,EACtD,OAAO,CAAC,QAA6C,YAAgC;AACpF,QAAM,WAAW,UAAU;AAC3B,QAAM,UAAU,oBAAI,IAAI,CAAC,eAAe,UAAU,UAAU,SAAS,WAAW,KAAK,CAAC;AACtF,MAAI,CAAC,QAAQ,IAAI,QAAQ,GAAG;AAC1B,YAAQ,MAAM,2BAA2B,QAAQ,uBAAuB,CAAC,GAAG,OAAO,EAAE,KAAK,IAAI,CAAC,GAAG;AAClG,YAAQ,WAAW;AACnB;AAAA,EACF;AACA,QAAMA,UAAS,gBAAgB,QAAQ,IAAI,GAAG,QAAQ;AACtD,wBAAsBA,SAAQ,QAAQ,QAAQ,IAAI,CAAC;AACnD,MAAIA,QAAO,QAAQ,OAAO,EAAG,SAAQ,WAAW;AAClD,CAAC;AAEH,IAAM,iBAAiB,QAAQ,QAAQ,SAAS,EAAE,YAAY,yCAAyC;AAEvG,eACG,QAAQ,UAAU,EAClB,YAAY,uFAAuF,EACnG,OAAO,UAAU,qCAAqC,EACtD,OAAO,CAAC,YAAgC;AACvC,QAAMA,UAAS,gBAAgB,QAAQ,IAAI,CAAC;AAC5C,wBAAsBA,SAAQ,QAAQ,QAAQ,IAAI,CAAC;AACnD,MAAIA,QAAO,QAAQ,OAAO,EAAG,SAAQ,WAAW;AAClD,CAAC;AAEH,QACG,QAAQ,SAAS,EACjB,YAAY,qEAAqE,EACjF,OAAO,aAAa,0DAA0D,EAC9E,OAAO,UAAU,qCAAqC,EACtD,OAAO,CAAC,YAAgC;AACvC,QAAM,SAAS,mBAAmB,QAAQ,IAAI,CAAC;AAC/C,MAAI,QAAQ,MAAM;AAChB,cAAU,MAAM;AAChB;AAAA,EACF;AACA,UAAQ,mBAAmB;AAC3B,OAAK,YAAY,OAAO,WAAW,EAAE;AACrC,OAAK,aAAa,OAAO,YAAY,EAAE;AACvC,MAAI,OAAO,cAAc,SAAS,GAAG;AACnC,SAAK,iBAAiB;AACtB,eAAW,YAAY,OAAO,cAAe,UAAS,QAAQ;AAAA,EAChE;AACF,CAAC;AAEH,QACG,QAAQ,OAAO,EACf,YAAY,8DAA8D,EAC1E,OAAO,mBAAmB,sBAAsB,CAAC,UAAU,OAAO,SAAS,OAAO,EAAE,GAAG,IAAI,EAC3F,OAAO,iBAAiB,iBAAiB,WAAW,EACpD,OAAO,UAAU,0CAA0C,EAC3D,OAAO,YAAY,gCAAgC,EACnD,OAAO,OAAO,YAA8E;AAC3F,QAAM,MAAM,QAAQ,IAAI;AACxB,MAAI,QAAQ,QAAQ;AAClB,UAAM,WAAW,iBAAiB,GAAG;AACrC,YAAQ,IAAI,KAAK,UAAU,UAAU,MAAM,CAAC,CAAC;AAC7C,YAAQ,WAAW,SAAS,gBAAgB,IAAI;AAChD;AAAA,EACF;AACA,QAAM,eAAe,EAAE,MAAM,QAAQ,MAAM,MAAM,QAAQ,MAAM,MAAM,QAAQ,QAAQ,IAAI,EAAE,CAAC;AAC9F,CAAC;AAEH,IAAM,UAAU,QAAQ,QAAQ,SAAS,EAAE,YAAY,gDAAgD;AAEvG,QACG,QAAQ,MAAM,EACd,YAAY,2CAA2C,EACvD,OAAO,UAAU,qCAAqC,EACtD,OAAO,CAAC,YAAgC;AACvC,QAAM,SAAS,mBAAmB,QAAQ,IAAI,CAAC;AAC/C,MAAI,QAAQ,MAAM;AAChB,cAAU,MAAM;AAChB;AAAA,EACF;AACA,OAAK,oBAAoB,OAAO,WAAW,EAAE;AAC7C,MAAI,OAAO,cAAc,SAAS,GAAG;AACnC,SAAK,iBAAiB;AACtB,eAAW,YAAY,OAAO,cAAe,UAAS,QAAQ;AAAA,EAChE;AACF,CAAC;AAEH,QACG,QAAQ,MAAM,EACd,YAAY,oDAAoD,EAChE,OAAO,MAAM;AACZ,YAAU,mBAAmB,QAAQ,IAAI,CAAC,CAAC;AAC7C,CAAC;AAEH,QACG,QAAQ,KAAK,EACb,YAAY,wDAAwD,EACpE,OAAO,MAAM;AACZ,QAAM,SAAS,mBAAmB,QAAQ,IAAI,CAAC;AAC/C,MAAI,OAAO,cAAc,WAAW,GAAG;AACrC,SAAK,oCAAoC;AACzC;AAAA,EACF;AACA,OAAK,mEAAmE;AACxE,SAAO,+CAA+C;AACtD,aAAW,YAAY,OAAO,cAAe,UAAS,QAAQ;AAChE,CAAC;AAEH,QACG,QAAQ,QAAQ,EAChB,YAAY,iEAAiE,EAC7E,OAAO,UAAU,qCAAqC,EACtD,OAAO,CAAC,YAAgC;AACvC,QAAM,SAAS,qBAAqB,QAAQ,IAAI,CAAC;AACjD,MAAI,QAAQ,MAAM;AAChB,cAAU,MAAM;AAChB;AAAA,EACF;AACA,OAAK,aAAa,OAAO,YAAY,EAAE;AACzC,CAAC;AAEH,QACG,QAAQ,UAAU,EAClB,YAAY,2CAA2C,EACvD,OAAO,UAAU,qCAAqC,EACtD,OAAO,CAAC,YAAgC;AACvC,QAAM,SAAS,uBAAuB,QAAQ,IAAI,CAAC;AACnD,MAAI,QAAQ,MAAM;AAChB,cAAU,MAAM;AAChB;AAAA,EACF;AACA,OAAK,UAAU,OAAO,WAAW,EAAE;AACnC,MAAI,OAAO,cAAc,SAAS,GAAG;AACnC,SAAK,iBAAiB;AACtB,eAAW,YAAY,OAAO,cAAe,UAAS,QAAQ;AAAA,EAChE;AACF,CAAC;AAEH,QACG,QAAQ,MAAM,EACd,YAAY,0CAA0C,EACtD,OAAO,MAAM;AACZ,UAAQ,IAAI,aAAa,QAAQ,IAAI,GAAG,+BAA+B,KAAK,EAAE;AAChF,CAAC;AAEH,IAAM,UAAU,QAAQ,QAAQ,SAAS,EAAE,YAAY,wDAAwD;AAE/G,QACG,QAAQ,kBAAkB,EAC1B,YAAY,gCAAgC,EAC5C,OAAO,yBAAyB,gBAAgB,UAAU,EAC1D,OAAO,uBAAuB,wBAAwB,EACtD,OAAO,UAAU,qCAAqC,EACtD,OAAO,CAAC,YAAsB,YAAoE;AACjG,QAAM,QAAQ,WAAW,KAAK,GAAG;AACjC,QAAM,SAAS,aAAa,QAAQ,IAAI,GAAG;AAAA,IACzC;AAAA,IACA,YAAY,QAAQ;AAAA,IACpB,GAAI,QAAQ,UAAU,EAAE,SAAS,QAAQ,QAAQ,IAAI,CAAC;AAAA,EACxD,CAAC;AACD,MAAI,QAAQ,MAAM;AAChB,cAAU,MAAM;AAChB;AAAA,EACF;AACA,OAAK,oBAAoB,OAAO,SAAS,EAAE;AAC3C,OAAK,SAAS,OAAO,WAAW,EAAE;AACpC,CAAC;AAEH,QACG,QAAQ,MAAM,EACd,YAAY,8BAA8B,EAC1C,OAAO,UAAU,qCAAqC,EACtD,OAAO,CAAC,YAAgC;AACvC,QAAM,WAAW,aAAa,QAAQ,IAAI,CAAC;AAC3C,MAAI,QAAQ,MAAM;AAChB,cAAU,QAAQ;AAClB;AAAA,EACF;AACA,MAAI,SAAS,WAAW,GAAG;AACzB,SAAK,kEAAkE;AACvE;AAAA,EACF;AACA,aAAW,QAAQ,UAAU;AAC3B,SAAK,GAAG,KAAK,SAAS,KAAK,KAAK,MAAM,KAAK,KAAK,KAAK,EAAE;AAAA,EACzD;AACF,CAAC;AAEH,QACG,QAAQ,QAAQ,EAChB,YAAY,sCAAsC,EAClD,OAAO,MAAM;AACZ,UAAQ,IAAI,mBAAmB,QAAQ,IAAI,CAAC,CAAC;AAC/C,CAAC;AAEH,QACG,QAAQ,gBAAgB,EACxB,YAAY,iCAAiC,EAC7C,eAAe,mBAAmB,WAAW,EAC7C,OAAO,UAAU,qCAAqC,EACtD,OAAO,CAAC,WAAqB,YAA+C;AAC3E,QAAM,SAAS,WAAW,QAAQ,IAAI,GAAG,QAAQ,OAAO,UAAU,KAAK,GAAG,CAAC;AAC3E,MAAI,QAAQ,KAAM,WAAU,MAAM;AAAA,MAC7B,MAAK,sBAAsB,QAAQ,KAAK,GAAG;AAClD,CAAC;AAEH,QACG,QAAQ,oBAAoB,EAC5B,YAAY,2BAA2B,EACvC,eAAe,mBAAmB,WAAW,EAC7C,OAAO,iBAAiB,oCAAoC,EAC5D,OAAO,UAAU,qCAAqC,EACtD,OAAO,CAAC,WAAqB,YAA8D;AAC1F,QAAM,SAAS,eAAe,QAAQ,IAAI,GAAG,QAAQ,OAAO,UAAU,KAAK,GAAG,GAAG,QAAQ,IAAI;AAC7F,MAAI,QAAQ,KAAM,WAAU,MAAM;AAAA,MAC7B,MAAK,0BAA0B,QAAQ,KAAK,GAAG;AACtD,CAAC;AAEH,QACG,QAAQ,SAAS,EACjB,YAAY,0BAA0B,EACtC,eAAe,kBAAkB,kBAAkB,EACnD,eAAe,gBAAgB,kBAAkB,EACjD,eAAe,yBAAyB,4BAA4B,EACpE,eAAe,iBAAiB,oBAAoB,EACpD,OAAO,4BAA4B,0BAA0B,EAC7D,OAAO,UAAU,qCAAqC,EACtD,OAAO,CAAC,YAA+G;AACtH,QAAM,SAAS,cAAc,QAAQ,IAAI,GAAG;AAAA,IAC1C,aAAa,QAAQ;AAAA,IACrB,WAAW,QAAQ;AAAA,IACnB,UAAU,QAAQ;AAAA,IAClB,MAAM,QAAQ;AAAA,IACd,GAAI,QAAQ,WAAW,EAAE,UAAU,QAAQ,SAAS,IAAI,CAAC;AAAA,EAC3D,CAAC;AACD,MAAI,QAAQ,KAAM,WAAU,MAAM;AAAA,MAC7B,MAAK,oBAAoB,QAAQ,IAAI,OAAO,QAAQ,EAAE,GAAG;AAChE,CAAC;AAEH,QACG,QAAQ,mBAAmB,EAC3B,YAAY,uEAAuE,EACnF,OAAO,mBAAmB,WAAW,EACrC,OAAO,mBAAmB,iEAAiE,SAAS,EACpG,OAAO,UAAU,qCAAqC,EACtD,OAAO,CAAC,WAAqB,YAA8G;AAC1I,QAAM,SAAS,iBAAiB,QAAQ,IAAI,GAAG;AAAA,IAC7C,GAAI,QAAQ,QAAQ,EAAE,SAAS,QAAQ,MAAM,IAAI,CAAC;AAAA,IAClD,OAAO,QAAQ;AAAA,IACf,MAAM,UAAU,KAAK,GAAG;AAAA,EAC1B,CAAC;AACD,MAAI,QAAQ,KAAM,WAAU,MAAM;AAAA,MAC7B,MAAK,YAAY,QAAQ,KAAK,qBAAqB;AAC1D,CAAC;AAEH,QACG,QAAQ,UAAU,EAClB,YAAY,6CAA6C,EACzD,eAAe,iBAAiB,qBAAqB,EACrD,OAAO,iBAAiB,gBAAgB,EACxC,OAAO,UAAU,qCAAqC,EACtD,OAAO,CAAC,YAA6D;AACpE,QAAM,SAAS,eAAe,QAAQ,IAAI,GAAG,QAAQ,MAAM,QAAQ,IAAI;AACvE,MAAI,QAAQ,KAAM,WAAU,MAAM;AAAA,MAC7B,MAAK,qBAAqB,QAAQ,IAAI,GAAG;AAChD,CAAC;AAEH,QACG,QAAQ,QAAQ,EAChB,YAAY,+BAA+B,EAC3C,eAAe,uBAAuB,8BAA8B,EACpE,eAAe,qBAAqB,yBAAyB,EAC7D,OAAO,mBAAmB,qBAAqB,EAC/C,OAAO,UAAU,qCAAqC,EACtD,OAAO,CAAC,YAAsG;AAC7G,QAAM,SAAS,mBAAmB,QAAQ,IAAI,GAAG,QAAQ,SAAS,QAAQ,QAAQ,QAAQ,KAAK;AAC/F,MAAI,QAAQ,KAAM,WAAU,MAAM;AAAA,MAC7B,MAAK,0BAA0B,QAAQ,MAAM,MAAM,QAAQ,OAAO,EAAE;AAC3E,CAAC;AAEH,QACG,QAAQ,kBAAkB,EAC1B,YAAY,wCAAwC,EACpD,eAAe,qBAAqB,gDAAgD,EACpF,OAAO,yBAAyB,kCAAkC,EAClE,OAAO,UAAU,qCAAqC,EACtD,OAAO,CAAC,WAAqB,YAAmE;AAC/F,MAAI,CAAC,uBAAuB,QAAQ,MAAM,GAAG;AAC3C,SAAK,2BAA2B,QAAQ,MAAM,uBAAuB,uBAAuB,KAAK,IAAI,CAAC,GAAG;AACzG,YAAQ,WAAW;AACnB;AAAA,EACF;AACA,QAAM,SAAS,qBAAqB,QAAQ,IAAI,GAAG,UAAU,KAAK,GAAG,GAAG,QAAQ,QAAQ,QAAQ,QAAQ;AACxG,MAAI,QAAQ,KAAM,WAAU,MAAM;AAAA,MAC7B,MAAK,WAAW,UAAU,KAAK,GAAG,CAAC,QAAQ,QAAQ,MAAM,GAAG;AACnE,CAAC;AAEH,QACG,QAAQ,QAAQ,EAChB,YAAY,uCAAuC,EACnD,OAAO,UAAU,qCAAqC,EACtD,OAAO,CAAC,YAAgC;AACvC,QAAM,SAAS,oBAAoB,QAAQ,IAAI,CAAC;AAChD,MAAI,QAAQ,KAAM,WAAU,MAAM;AAAA,MAC7B,MAAK,oBAAoB,OAAO,SAAS,OAAO,OAAO,WAAW,GAAG;AAC5E,CAAC;AAEH,QACG,QAAQ,YAAY,EACpB,YAAY,0EAA0E,EACtF,eAAe,iBAAiB,8DAA8D,EAC9F,OAAO,CAAC,YAA8B;AACrC,UAAQ,IAAI,KAAK,UAAU,0BAA0B,QAAQ,IAAI,GAAG,QAAQ,IAAI,GAAG,MAAM,CAAC,CAAC;AAC7F,CAAC;AAEH,QACG,QAAQ,OAAO,EACf,YAAY,2BAA2B,EACvC,OAAO,qBAAqB,+CAA+C,UAAU,EACrF,OAAO,UAAU,qCAAqC,EACtD,OAAO,CAAC,YAA4F;AACnG,QAAM,SAAS,aAAa,QAAQ,IAAI,GAAG,QAAQ,MAAM;AACzD,MAAI,QAAQ,KAAM,WAAU,MAAM;AAAA,MAC7B,MAAK,kBAAkB,OAAO,SAAS,gBAAgB,QAAQ,MAAM,GAAG;AAC/E,CAAC;AAEH,IAAM,aAAa,QAAQ,QAAQ,YAAY,EAAE,YAAY,+CAA+C;AAE5G,WACG,QAAQ,MAAM,EACd,YAAY,wBAAwB,EACpC,OAAO,UAAU,qCAAqC,EACtD,OAAO,CAAC,YAAgC;AACvC,QAAM,cAAc,gBAAgB,QAAQ,IAAI,CAAC;AACjD,MAAI,QAAQ,MAAM;AAChB,cAAU,WAAW;AACrB;AAAA,EACF;AACA,QAAM,QAAQ,CAAC,GAAG,YAAY,SAAS,GAAG,YAAY,OAAO,GAAG,YAAY,QAAQ;AACpF,MAAI,MAAM,WAAW,GAAG;AACtB,SAAK,wEAAwE;AAC7E;AAAA,EACF;AACA,aAAW,QAAQ,OAAO;AACxB,SAAK,GAAG,KAAK,EAAE,KAAK,KAAK,MAAM,MAAM,KAAK,KAAK,KAAK,KAAK,IAAI,EAAE;AAAA,EACjE;AACF,CAAC;AAEH,WACG,QAAQ,eAAe,EACvB,YAAY,gCAAgC,EAC5C,OAAO,mBAAmB,2DAA2D,SAAS,EAC9F,OAAO,mBAAmB,wCAAwC,EAClE,OAAO,UAAU,qCAAqC,EACtD,OAAO,CAAC,WAAqB,YAAkG;AAC9H,QAAM,SAAS,cAAc,QAAQ,IAAI,GAAG;AAAA,IAC1C,OAAO,QAAQ;AAAA,IACf,GAAI,QAAQ,QAAQ,EAAE,SAAS,QAAQ,MAAM,IAAI,CAAC;AAAA,IAClD,MAAM,UAAU,KAAK,GAAG;AAAA,EAC1B,CAAC;AACD,MAAI,QAAQ,KAAM,WAAU,MAAM;AAAA,MAC7B,MAAK,SAAS,QAAQ,KAAK,sBAAsB,OAAO,EAAE,GAAG;AACpE,CAAC;AAEH,WACG,QAAQ,YAAY,EACpB,YAAY,6CAA6C,EACzD,OAAO,aAAa,gBAAgB,EACpC,OAAO,UAAU,qCAAqC,EACtD,OAAO,CAAC,YAAgC,YAA6C;AACpF,QAAM,KAAK,cAAc,QAAQ;AACjC,MAAI,CAAC,IAAI;AACP,SAAK,0EAA0E;AAC/E,YAAQ,WAAW;AACnB;AAAA,EACF;AACA,QAAM,SAAS,gBAAgB,QAAQ,IAAI,GAAG,EAAE;AAChD,MAAI,QAAQ,KAAM,WAAU,MAAM;AAAA,MAC7B,MAAK,sBAAsB,EAAE,GAAG;AACvC,CAAC;AAEH,WACG,QAAQ,aAAa,EACrB,YAAY,2BAA2B,EACvC,eAAe,qBAAqB,wBAAwB,EAC5D,OAAO,UAAU,qCAAqC,EACtD,OAAO,CAAC,IAAY,YAAgD;AACnE,QAAM,SAAS,iBAAiB,QAAQ,IAAI,GAAG,IAAI,QAAQ,MAAM;AACjE,MAAI,QAAQ,KAAM,WAAU,MAAM;AAAA,MAC7B,MAAK,sBAAsB,EAAE,KAAK,QAAQ,MAAM,EAAE;AACzD,CAAC;AAEH,WACG,QAAQ,uBAAuB,EAC/B,YAAY,iEAAiE,EAC7E,OAAO,UAAU,qCAAqC,EACtD,OAAO,CAAC,IAAY,YAAgC;AACnD,QAAM,SAAS,0BAA0B,QAAQ,IAAI,GAAG,EAAE;AAC1D,MAAI,QAAQ,KAAM,WAAU,MAAM;AAAA,MAC7B,MAAK,6CAA6C,EAAE,GAAG;AAC9D,CAAC;AAEH,IAAM,SAAS,QAAQ,QAAQ,QAAQ,EAAE,YAAY,4CAA4C;AAEjG,eAAe,gBAAgB,SAAwE;AACrG,QAAM,SAAS,MAAM,kBAAkB;AAAA,IACrC,KAAK,QAAQ,IAAI;AAAA,IACjB,MAAM,QAAQ;AAAA,IACd,MAAM,QAAQ;AAAA,EAChB,CAAC;AACD,MAAI,OAAO,cAAc;AACvB,YAAQ,KAAK,QAAQ,OAAO,aAAa,yCAAoC,OAAO,IAAI,4CAA4C;AAAA,EACtI;AACA,UAAQ,IAAI,cAAc,eAAe,0BAAqB,OAAO,GAAG,GAAG;AAC3E,UAAQ,IAAI,uDAAuD;AACnE,MAAI,QAAQ,KAAM,MAAK,YAAY,GAAG,OAAO,GAAG,GAAG;AACnD,QAAM,IAAI,QAAc,CAACD,aAAY;AACnC,UAAM,WAAW,MAAM;AACrB,WAAK,OAAO,MAAM,EAAE,QAAQA,QAAO;AAAA,IACrC;AACA,YAAQ,KAAK,UAAU,QAAQ;AAC/B,YAAQ,KAAK,WAAW,QAAQ;AAAA,EAClC,CAAC;AACH;AAEA,OACG,QAAQ,OAAO,EACf,YAAY,mEAAmE,EAC/E,OAAO,mBAAmB,sBAAsB,CAAC,UAAU,OAAO,SAAS,OAAO,EAAE,GAAG,IAAI,EAC3F,OAAO,iBAAiB,iBAAiB,WAAW,EACpD,OAAO,UAAU,0CAA0C,EAC3D,OAAO,OAAO,YAA4D;AACzE,QAAM,gBAAgB,OAAO;AAC/B,CAAC;AAEH,OACG,QAAQ,QAAQ,EAChB,YAAY,0DAA0D,EACtE,OAAO,UAAU,qCAAqC,EACtD,OAAO,CAAC,YAAgC;AACvC,QAAM,SAAS,mBAAmB,QAAQ,IAAI,CAAC;AAC/C,MAAI,QAAQ,MAAM;AAChB,cAAU,MAAM;AAChB;AAAA,EACF;AACA,OAAK,YAAY,OAAO,YAAY,kBAAkB,OAAO,UAAU,GAAG;AAC5E,CAAC;AAEH,IAAM,WAAW,QAAQ,QAAQ,UAAU,EAAE,YAAY,iDAAiD;AAE1G,SACG,QAAQ,UAAU,EAClB,YAAY,2DAA2D,EACvE,OAAO,oBAAoB,kCAAkC,CAAC,UAAU,OAAO,SAAS,OAAO,EAAE,CAAC,EAClG,OAAO,OAAO,YAAgC;AAC7C,QAAM,QAAQ,MAAM,cAAc;AAAA,IAChC,KAAK,QAAQ,IAAI;AAAA,IACjB,GAAI,QAAQ,UAAU,SAAY,CAAC,IAAI,EAAE,OAAO,QAAQ,MAAM;AAAA,EAChE,CAAC;AACD,UAAQ,IAAI,SAAS,MAAM,MAAM,8CAA8C;AACjF,CAAC;AAEH,SACG,QAAQ,MAAM,EACd,YAAY,wDAAwD,EACpE,OAAO,iBAAiB,+CAA+C,EACvE,OAAO,OAAO,YAAsC;AACnD,QAAM,WAAW,MAAM,UAAU,EAAE,KAAK,QAAQ,IAAI,GAAG,YAAY,QAAQ,QAAQ,UAAU,EAAE,CAAC;AAChG,UAAQ,IAAI,SAAS,SAAS,MAAM,gCAAgC;AACtE,CAAC;AAEH,SACG,QAAQ,WAAW,EACnB,YAAY,iDAAiD,EAC7D,OAAO,MAAM;AACZ,QAAM,UAAU,kBAAkB,QAAQ,IAAI,CAAC;AAC/C,aAAW,UAAU,QAAS,SAAQ,IAAI,MAAM;AAClD,CAAC;AAEH,SACG,QAAQ,iBAAiB,EACzB,YAAY,6CAA6C,EACzD,OAAO,MAAM;AACZ,UAAQ,IAAI,eAAe,QAAQ,IAAI,CAAC,CAAC;AAC3C,CAAC;AAEH,QAAQ,WAAW,QAAQ,IAAI,EAAE,MAAM,CAAC,UAAmB;AACzD,OAAK,iBAAiB,QAAQ,MAAM,UAAU,OAAO,KAAK,CAAC;AAC3D,UAAQ,WAAW;AACrB,CAAC;","names":["existsSync","readFileSync","writeFileSync","join","existsSync","readFileSync","join","existsSync","dirname","join","resolve","join","existsSync","readFileSync","existsSync","readFileSync","join","existsSync","readFileSync","basename","dirname","join","join","existsSync","readFileSync","dirname","line","basename","existsSync","readFileSync","join","context","existsSync","join","existsSync","readFileSync","join","join","existsSync","readFileSync","line","context","context","existsSync","join","existsSync","readFileSync","join","existsSync","readFileSync","join","existsSync","readFileSync","readdirSync","join","existsSync","readFileSync","join","join","existsSync","readFileSync","line","join","existsSync","readFileSync","readdirSync","join","existsSync","readFileSync","adapter","join","existsSync","readFileSync","adapter","context","join","existsSync","readFileSync","join","existsSync","readFileSync","sessionDir","eventsPath","line","session","readPackageJson","summary","readFileSync","isRecord","join","existsSync","existsSync","readFileSync","join","existsSync","readFileSync","join","existsSync","readFileSync","join","relative","readFileSync","existsSync","join","relative","files","adapter","summary","readFileSync","join","z","join","readFileSync","existsSync","mkdirSync","readFileSync","join","existsSync","readFileSync","join","join","existsSync","readFileSync","join","existsSync","readFileSync","mkdirSync","existsSync","readFileSync","readdirSync","join","line","join","existsSync","readdirSync","readFileSync","summary","existsSync","readFileSync","readdirSync","statSync","join","session","join","existsSync","readdirSync","statSync","readFileSync","correction","detail","context","session","resolve","line","context","uniqueEvidence","existsSync","readFileSync","join","existsSync","join","readFileSync","existsSync","readFileSync","join","join","existsSync","readFileSync","readFileSync","join","join","readFileSync","context","readFileSync","join","PRODUCT_CATEGORIES","TENANT_MODELS","join","readFileSync","context","existsSync","readFileSync","join","existsSync","join","readFileSync","context","report","resolve","createServer","join","DEFAULT_PORT","DEFAULT_HOST","sendJson","sendHtml","eventsPath","join","handleRequest","session","listen","resolve","createServer","existsSync","readFileSync","join","heading","line","readFileSync","correction","join","existsSync","join","existsSync","context","readFileSync","writeFileSync","resolve","report"]}
1
+ {"version":3,"sources":["../src/cli/index.ts","../src/install/add-skill.ts","../src/utils/fs.ts","../src/utils/package-root.ts","../src/install/adapter-validate.ts","../src/config/defaults.ts","../src/studio/shared.ts","../src/install/audit.ts","../src/config/contracts.ts","../src/studio/onboarding-state.ts","../src/studio/context.ts","../src/studio/wizard/steps.ts","../src/install/install.ts","../src/install/ide-activate.ts","../src/install/roster-adapters.ts","../src/studio/wizard/roster.ts","../src/install/assistant-adapters-table.ts","../src/install/diff.ts","../src/install/update.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/session.ts","../src/studio/export.ts","../src/studio/setup-browser.ts","../src/studio/setup-init.ts","../src/studio/setup-server.ts","../src/studio/setup-form.ts","../src/studio/wizard/checklist.ts","../src/studio/wizard/agent-briefs.ts","../src/studio/wizard/wizard-draft.ts","../src/studio/wizard/drafts.ts","../src/studio/office/render.ts","../src/studio/office/map.ts","../src/studio/office/section-map.ts","../src/studio/wizard/render.ts","../src/studio/agentic-level.ts","../src/studio/studio-server.ts","../src/studio/session-checkpoint.ts","../src/cli/output.ts"],"sourcesContent":["import { existsSync, readFileSync, writeFileSync } from \"node:fs\";\nimport { join } from \"node:path\";\nimport { Command } from \"commander\";\nimport type { AuditReadinessLevel } from \"../config/types.js\";\nimport { addSkill, listSkills } from \"../install/add-skill.js\";\nimport { validateAdapter, validatePackage, type AdapterValidationTarget, type ValidationReport } from \"../install/adapter-validate.js\";\nimport { READINESS_ORDER, createAuditReport, isAuditReadinessLevel, meetsMinimumReadiness } from \"../install/audit.js\";\nimport { diffProject } from \"../install/diff.js\";\nimport { initProject } from \"../install/install.js\";\nimport { updateProject } from \"../install/update.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 { getSetupProgress, onboardingStateExists } from \"../studio/onboarding-state.js\";\nimport { openBrowser } from \"../studio/setup-browser.js\";\nimport { promptStartSetup } from \"../studio/setup-init.js\";\nimport { startSetupServer } from \"../studio/setup-server.js\";\nimport { startStudioServer } from \"../studio/studio-server.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 { checkpointSessionFromFile } from \"../studio/session-checkpoint.js\";\nimport { readTextFile } from \"../studio/shared.js\";\nimport { PACKAGE_VERSION } from \"../config/defaults.js\";\nimport { detail, fail, fileGroup, heading, levelLabel, line, listItem, printJson, style } from \"./output.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.name(\"agent-kit\").description(\"Next.js + Supabase agent, skill, docs, design, and research kit.\").version(PACKAGE_VERSION);\n\ninterface InitCommandOptions {\n stack: \"next-supabase\";\n force?: boolean;\n guided?: boolean;\n json?: boolean;\n dryRun?: boolean;\n activate?: string[];\n setup?: boolean;\n noSetup?: boolean;\n open?: boolean;\n}\n\nasync function runGuidedContextPrompts(cwd: string): Promise<void> {\n // Interactive prompts only make sense on a TTY; CI and scripts get the scan-based fallback.\n if (!process.stdin.isTTY || !process.stdout.isTTY) return;\n\n const clack = await import(\"@clack/prompts\");\n clack.intro(\"agent-kit guided setup\");\n\n const questions = [\n { key: \"productSummary\", message: \"What does this product do, in one concrete paragraph?\" },\n { key: \"primaryAudience\", message: \"Who is the primary user or buyer?\" },\n { key: \"authModel\", message: \"What authentication model should agents preserve?\" },\n { key: \"tenantModel\", message: \"Is this single-user, team, tenant, marketplace, admin, or public content?\" }\n ] as const;\n\n const answers: Record<string, string> = {};\n for (const question of questions) {\n const answer = await clack.text({ message: question.message, placeholder: \"Leave empty to answer later\" });\n if (clack.isCancel(answer)) {\n clack.cancel(\"Guided setup cancelled. Context files were still created; answer later with agent-kit context ask.\");\n return;\n }\n if (typeof answer === \"string\" && answer.trim()) answers[question.key] = answer.trim();\n }\n\n if (Object.keys(answers).length > 0) {\n const contextPath = join(cwd, \".agent-kit\", \"project-context.json\");\n if (existsSync(contextPath)) {\n const context = JSON.parse(readFileSync(contextPath, \"utf8\")) as Record<string, unknown>;\n Object.assign(context, answers);\n writeFileSync(contextPath, `${JSON.stringify(context, null, 2)}\\n`);\n renderProjectContext(cwd);\n }\n }\n\n clack.outro(\"Project context saved. Run agent-kit audit next.\");\n}\n\nasync function runSetupServer(options: { port: number; host: string; open?: boolean }): Promise<void> {\n const handle = await startSetupServer({\n cwd: process.cwd(),\n port: options.port,\n host: options.host\n });\n if (handle.portFallback) {\n console.warn(`Port ${handle.requestedPort} is in use — an old setup server may still be running. Kill it and restart to load the latest Agent Office.`);\n console.warn(`Using fallback port ${handle.port} instead.`);\n }\n console.log(`Agent Kit v${PACKAGE_VERSION} — ${handle.defaultView} view at ${handle.url}/`);\n console.log(`Pixel office (default): ${handle.url}/ | Form fallback: ${handle.url}/wizard`);\n console.log(\"Pick Quick, Standard, or Complete on first visit. Press Ctrl+C to stop.\");\n if (options.open) void openBrowser(`${handle.url}/`);\n await new Promise<void>((resolve) => {\n const shutdown = () => {\n void handle.close().finally(resolve);\n };\n process.once(\"SIGINT\", shutdown);\n process.once(\"SIGTERM\", shutdown);\n });\n}\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(\"--activate <targets...>\", \"Promote IDE/runtime adapters: cursor, claude, codex, copilot, antigravity, or all.\")\n .option(\"--guided\", \"Also create local project context files (interactive on a terminal, scan-based otherwise).\")\n .option(\"--dry-run\", \"Preview what init would create or conflict on without writing files.\")\n .option(\"--json\", \"Print machine-readable JSON output.\")\n .option(\"--setup\", \"Start the setup wizard after install.\")\n .option(\"--no-setup\", \"Skip the post-install setup wizard prompt.\")\n .option(\"--open\", \"Open the setup wizard in your default browser.\")\n .action(async (options: InitCommandOptions) => {\n const cwd = process.cwd();\n\n if (options.dryRun) {\n const preview = diffProject(cwd, options.stack);\n if (options.json) {\n printJson({ dryRun: true, preview: preview.preview, missing: preview.missing, changed: preview.changed, unchanged: preview.unchanged });\n return;\n }\n heading(\"agent-kit init --dry-run\");\n fileGroup(\"Would create\", preview.preview.wouldCreate);\n fileGroup(\"Would write conflicts for\", preview.preview.wouldWriteConflicts);\n fileGroup(\"Already up to date\", preview.unchanged);\n line();\n line(`Run ${style.bold(\"agent-kit init\")} to apply.`);\n return;\n }\n\n const result = initProject({\n cwd,\n stack: options.stack,\n force: Boolean(options.force),\n ...(options.activate ? { activate: options.activate } : {})\n });\n const context = options.guided ? initProjectContext(cwd) : null;\n\n if (options.json) {\n printJson(context ? { install: result, context } : result);\n } else {\n heading(`agent-kit ${PACKAGE_VERSION} installed (stack: ${options.stack})`);\n fileGroup(\"Created\", result.copied);\n fileGroup(\"Unchanged\", result.unchanged);\n fileGroup(\"Overwritten\", result.overwritten);\n if (result.conflicts.length > 0) {\n fileGroup(\"Conflicts (local file kept, template saved for review)\", result.conflicts);\n detail(\"Review .agent-kit/conflicts/ before adopting template changes.\");\n }\n line();\n line(`Manifest: ${result.manifestPath}`);\n }\n\n if (options.guided && context) {\n if (!options.json) {\n line();\n heading(\"Project context\");\n line(`Context: ${context.contextPath}`);\n if (context.openQuestions.length > 0) {\n line(\"Open questions:\");\n for (const question of context.openQuestions) listItem(question);\n }\n }\n await runGuidedContextPrompts(cwd);\n }\n\n if (!options.json) {\n line();\n line(`Next: run ${style.bold(\"agent-kit audit\")} to check readiness.`);\n }\n\n const shouldPrompt = !options.noSetup && !options.json;\n const startWizard = Boolean(options.setup) || (shouldPrompt && (await promptStartSetup(true)));\n if (startWizard) {\n await runSetupServer({ port: 9321, host: \"127.0.0.1\", open: Boolean(options.open) });\n }\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 fail(`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 printJson(report);\n } else {\n const readinessStyle = report.summary.fail > 0 ? style.fail : report.summary.warn > 0 ? style.warn : style.pass;\n line(`${style.bold(\"READINESS\")} ${readinessStyle(report.readiness.level)}: ${report.readiness.summary}`);\n line(`${style.bold(\"SUMMARY\")} pass=${report.summary.pass} warn=${report.summary.warn} fail=${report.summary.fail}`);\n if (report.readiness.nextActions.length > 0) {\n line(style.bold(\"NEXT ACTIONS\"));\n for (const action of report.readiness.nextActions) listItem(action);\n }\n line();\n for (const finding of report.findings) {\n line(`${levelLabel(finding.level)} ${finding.area}: ${finding.message}`);\n if (finding.remediation) detail(`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 .option(\"--json\", \"Print machine-readable JSON output.\")\n .action((options: { json?: boolean }) => {\n const result = diffProject(process.cwd());\n if (options.json) {\n printJson(result);\n return;\n }\n heading(\"agent-kit diff\");\n fileGroup(\"Missing (update would create)\", result.missing);\n fileGroup(\"Changed locally (update would write conflicts)\", result.changed);\n fileGroup(\"Unchanged\", result.unchanged);\n line();\n line(`Agent roster: ${result.agentRoster}`);\n line(`Model routing: ${result.modelRouting}`);\n if (result.libraryFolders.missing.length > 0) {\n line(`Missing library folders: ${result.libraryFolders.missing.join(\", \")}`);\n }\n line();\n line(`Next: run ${style.bold(\"agent-kit update --dry-run\")} to preview the exact per-file plan.`);\n });\n\nprogram\n .command(\"update\")\n .description(\"Update installed templates: pristine docs are refreshed, local edits are preserved, and template conflicts are written for review.\")\n .option(\"--force\", \"Overwrite locally customized docs with the current templates.\")\n .option(\"--dry-run\", \"Report what would change without writing any files.\")\n .option(\"--json\", \"Print machine-readable JSON output.\")\n .action((options: { force?: boolean; dryRun?: boolean; json?: boolean }) => {\n const result = updateProject({ cwd: process.cwd(), force: Boolean(options.force), dryRun: Boolean(options.dryRun) });\n if (options.json) {\n printJson(result);\n return;\n }\n\n heading(result.dryRun ? \"agent-kit update --dry-run\" : \"agent-kit update\");\n const byAction = (action: string) => result.files.filter((file) => file.action === action).map((file) => file.target);\n fileGroup(result.dryRun ? \"Would create\" : \"Created\", byAction(\"created\"));\n fileGroup(result.dryRun ? \"Would update (pristine)\" : \"Updated (pristine)\", byAction(\"updated\"));\n fileGroup(\"Kept local customizations\", byAction(\"kept-local\"));\n fileGroup(result.dryRun ? \"Would overwrite\" : \"Overwritten\", byAction(\"overwritten\"));\n const conflicts = result.files.filter((file) => file.action === \"conflict\");\n if (conflicts.length > 0) {\n line(`${style.bold(\"Conflicts\")} (${conflicts.length})`);\n for (const file of conflicts) {\n line(` ${file.target}${file.conflictPath ? ` -> ${file.conflictPath}` : \"\"}`);\n }\n detail(\"Local files were kept. Review the conflict copies before adopting template changes.\");\n }\n detail(`unchanged: ${result.summary.unchanged} file(s) already match the current templates`);\n if (!result.dryRun) {\n line();\n line(`Library folders refreshed: ${result.libraryFoldersRefreshed.length}`);\n line(`Manifest: ${result.manifestPath}`);\n }\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 .option(\"--dry-run\", \"Report what would happen without writing.\")\n .option(\"--json\", \"Print machine-readable JSON output.\")\n .action((name: string, options: { force?: boolean; dryRun?: boolean; json?: boolean }) => {\n const result = addSkill(process.cwd(), name, { force: Boolean(options.force), dryRun: Boolean(options.dryRun) });\n if (options.json) {\n printJson(result);\n return;\n }\n line(`${result.action}: ${result.target}${result.conflictPath ? ` -> ${result.conflictPath}` : \"\"}`);\n if (options.dryRun) detail(\"dry run: no files were written\");\n });\n\nprogram\n .command(\"doctor\")\n .description(\"Validate local CLI runtime prerequisites.\")\n .option(\"--json\", \"Print machine-readable JSON output.\")\n .action((options: { json?: boolean }) => {\n const cwd = process.cwd();\n const report = {\n version: PACKAGE_VERSION,\n node: process.version,\n availableSkills: listSkills().length,\n setupProgress: onboardingStateExists(cwd) ? getSetupProgress(cwd) : null,\n status: \"ok\" as const\n };\n if (options.json) {\n printJson(report);\n return;\n }\n heading(\"agent-kit doctor\");\n line(`version: ${report.version}`);\n line(`node: ${report.node}`);\n line(`available skills: ${report.availableSkills}`);\n if (report.setupProgress) {\n line(`setup progress: ${report.setupProgress.percent}% (depth: ${report.setupProgress.depth})`);\n if (!report.setupProgress.quickComplete) {\n detail(\"run agent-kit setup --open to finish project context onboarding.\");\n }\n } else {\n detail(\"run agent-kit init then agent-kit setup to onboard this project.\");\n }\n line(`status: ${style.pass(report.status)}`);\n });\n\nfunction printValidationReport(report: ValidationReport, json?: boolean): void {\n if (json) {\n console.log(JSON.stringify(report, null, 2));\n return;\n }\n console.log(`SUMMARY pass=${report.summary.pass} warn=${report.summary.warn} fail=${report.summary.fail}`);\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\nconst adapter = program.command(\"adapter\").description(\"Validate runtime and IDE adapter assets.\");\n\nadapter\n .command(\"validate [target]\")\n .description(\"Validate adapter assets. Targets: antigravity, cursor, claude, codex, copilot, all.\")\n .option(\"--json\", \"Print machine-readable JSON output.\")\n .action((target: AdapterValidationTarget | undefined, options: { json?: boolean }) => {\n const selected = target ?? \"antigravity\";\n const allowed = new Set([\"antigravity\", \"cursor\", \"claude\", \"codex\", \"copilot\", \"all\"]);\n if (!allowed.has(selected)) {\n console.error(`Invalid adapter target \"${selected}\". Expected one of: ${[...allowed].join(\", \")}.`);\n process.exitCode = 1;\n return;\n }\n const report = validateAdapter(process.cwd(), selected);\n printValidationReport(report, Boolean(options.json));\n if (report.summary.fail > 0) process.exitCode = 1;\n });\n\nconst packageCommand = program.command(\"package\").description(\"Validate package-source release assets.\");\n\npackageCommand\n .command(\"validate\")\n .description(\"Validate package assets, runtime adapters, docs, examples, and source audit behavior.\")\n .option(\"--json\", \"Print machine-readable JSON output.\")\n .action((options: { json?: boolean }) => {\n const report = validatePackage(process.cwd());\n printValidationReport(report, Boolean(options.json));\n if (report.summary.fail > 0) process.exitCode = 1;\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 .option(\"--json\", \"Print machine-readable JSON output.\")\n .action((options: { json?: boolean }) => {\n const result = initProjectContext(process.cwd());\n if (options.json) {\n printJson(result);\n return;\n }\n heading(\"agent-kit onboard\");\n line(`Context: ${result.contextPath}`);\n line(`Markdown: ${result.markdownPath}`);\n if (result.openQuestions.length > 0) {\n line(\"Open questions:\");\n for (const question of result.openQuestions) listItem(question);\n }\n });\n\nprogram\n .command(\"setup\")\n .description(\"Start the local Agent Office setup view for project context.\")\n .option(\"--port <number>\", \"Port to listen on.\", (value) => Number.parseInt(value, 10), 9321)\n .option(\"--host <host>\", \"Host to bind.\", \"127.0.0.1\")\n .option(\"--open\", \"Open the wizard in your default browser.\")\n .option(\"--status\", \"Print setup progress and exit.\")\n .action(async (options: { port: number; host: string; open?: boolean; status?: boolean }) => {\n const cwd = process.cwd();\n if (options.status) {\n const progress = getSetupProgress(cwd);\n console.log(JSON.stringify(progress, null, 2));\n process.exitCode = progress.quickComplete ? 0 : 1;\n return;\n }\n await runSetupServer({ port: options.port, host: options.host, open: Boolean(options.open) });\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 .option(\"--json\", \"Print machine-readable JSON output.\")\n .action((options: { json?: boolean }) => {\n const result = initProjectContext(process.cwd());\n if (options.json) {\n printJson(result);\n return;\n }\n line(`Context written: ${result.contextPath}`);\n if (result.openQuestions.length > 0) {\n line(\"Open questions:\");\n for (const question of result.openQuestions) listItem(question);\n }\n });\n\ncontext\n .command(\"scan\")\n .description(\"Print inferred project context without writing it.\")\n .action(() => {\n printJson(scanProjectContext(process.cwd()));\n });\n\ncontext\n .command(\"ask\")\n .description(\"Print unanswered high-value project context questions.\")\n .action(() => {\n const result = initProjectContext(process.cwd());\n if (result.openQuestions.length === 0) {\n line(\"No open project-context questions.\");\n return;\n }\n line(\"Answer these in the web setup wizard with: agent-kit setup --open\");\n detail(\"Check progress with: agent-kit setup --status\");\n for (const question of result.openQuestions) listItem(question);\n });\n\ncontext\n .command(\"render\")\n .description(\"Render .agent-kit/project-context.md from project-context.json.\")\n .option(\"--json\", \"Print machine-readable JSON output.\")\n .action((options: { json?: boolean }) => {\n const result = renderProjectContext(process.cwd());\n if (options.json) {\n printJson(result);\n return;\n }\n line(`Rendered: ${result.markdownPath}`);\n });\n\ncontext\n .command(\"validate\")\n .description(\"Validate .agent-kit/project-context.json.\")\n .option(\"--json\", \"Print machine-readable JSON output.\")\n .action((options: { json?: boolean }) => {\n const result = validateProjectContext(process.cwd());\n if (options.json) {\n printJson(result);\n return;\n }\n line(`Valid: ${result.contextPath}`);\n if (result.openQuestions.length > 0) {\n line(\"Open questions:\");\n for (const question of result.openQuestions) listItem(question);\n }\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 .option(\"--json\", \"Print machine-readable JSON output.\")\n .action((titleParts: string[], options: { workflow: string; request?: string; json?: boolean }) => {\n const title = titleParts.join(\" \");\n const result = startSession(process.cwd(), {\n title,\n workflowId: options.workflow,\n ...(options.request ? { request: options.request } : {})\n });\n if (options.json) {\n printJson(result);\n return;\n }\n line(`Session started: ${result.sessionId}`);\n line(`Path: ${result.sessionPath}`);\n });\n\nsession\n .command(\"list\")\n .description(\"List local council sessions.\")\n .option(\"--json\", \"Print machine-readable JSON output.\")\n .action((options: { json?: boolean }) => {\n const sessions = listSessions(process.cwd());\n if (options.json) {\n printJson(sessions);\n return;\n }\n if (sessions.length === 0) {\n line(\"No sessions yet. Start one with agent-kit session start <title>.\");\n return;\n }\n for (const item of sessions) {\n line(`${item.sessionId} [${item.status}] ${item.title}`);\n }\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 .option(\"--json\", \"Print machine-readable JSON output.\")\n .action((textParts: string[], options: { agent: string; json?: boolean }) => {\n const result = recordNote(process.cwd(), options.agent, textParts.join(\" \"));\n if (options.json) printJson(result);\n else line(`Recorded note from ${options.agent}.`);\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 .option(\"--json\", \"Print machine-readable JSON output.\")\n .action((textParts: string[], options: { agent: string; risk?: string; json?: boolean }) => {\n const result = recordDecision(process.cwd(), options.agent, textParts.join(\" \"), options.risk);\n if (options.json) printJson(result);\n else line(`Recorded decision from ${options.agent}.`);\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 .option(\"--json\", \"Print machine-readable JSON output.\")\n .action((options: { from: string; to: string; decision: string; risk: string; evidence?: string[]; json?: boolean }) => {\n const result = 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 if (options.json) printJson(result);\n else line(`Recorded handoff ${options.from} -> ${options.to}.`);\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 .option(\"--json\", \"Print machine-readable JSON output.\")\n .action((textParts: string[], options: { agent?: string; scope: \"session\" | \"project\" | \"agent\" | \"upstream-proposal\"; json?: boolean }) => {\n const result = recordCorrection(process.cwd(), {\n ...(options.agent ? { agentId: options.agent } : {}),\n scope: options.scope,\n text: textParts.join(\" \")\n });\n if (options.json) printJson(result);\n else line(`Recorded ${options.scope}-scoped correction.`);\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 .option(\"--json\", \"Print machine-readable JSON output.\")\n .action((options: { file: string; note?: string; json?: boolean }) => {\n const result = recordArtifact(process.cwd(), options.file, options.note);\n if (options.json) printJson(result);\n else line(`Recorded artifact ${options.file}.`);\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 .option(\"--json\", \"Print machine-readable JSON output.\")\n .action((options: { command: string; result: \"pass\" | \"fail\" | \"skipped\"; notes?: string; json?: boolean }) => {\n const result = recordVerification(process.cwd(), options.command, options.result, options.notes);\n if (options.json) printJson(result);\n else line(`Recorded verification (${options.result}): ${options.command}`);\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 .option(\"--json\", \"Print machine-readable JSON output.\")\n .action((nameParts: string[], options: { status: string; evidence?: string; json?: boolean }) => {\n if (!isRequiredOutputStatus(options.status)) {\n fail(`Invalid --status value \"${options.status}\". Expected one of: ${requiredOutputStatuses.join(\", \")}.`);\n process.exitCode = 1;\n return;\n }\n const result = recordRequiredOutput(process.cwd(), nameParts.join(\" \"), options.status, options.evidence);\n if (options.json) printJson(result);\n else line(`Marked \"${nameParts.join(\" \")}\" as ${options.status}.`);\n });\n\nsession\n .command(\"render\")\n .description(\"Render active session Markdown files.\")\n .option(\"--json\", \"Print machine-readable JSON output.\")\n .action((options: { json?: boolean }) => {\n const result = renderActiveSession(process.cwd());\n if (options.json) printJson(result);\n else line(`Rendered session ${result.sessionId} at ${result.sessionPath}.`);\n });\n\nsession\n .command(\"checkpoint\")\n .description(\"Apply a batch of session events from a JSON or Markdown checkpoint file.\")\n .requiredOption(\"--file <file>\", \"Checkpoint file (.json or .md) relative to the project root.\")\n .action((options: { file: string }) => {\n console.log(JSON.stringify(checkpointSessionFromFile(process.cwd(), options.file), 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 .option(\"--json\", \"Print machine-readable JSON output.\")\n .action((options: { status: \"planned\" | \"in-progress\" | \"blocked\" | \"complete\"; json?: boolean }) => {\n const result = closeSession(process.cwd(), options.status);\n if (options.json) printJson(result);\n else line(`Closed session ${result.sessionId} with status ${options.status}.`);\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 .option(\"--json\", \"Print machine-readable JSON output.\")\n .action((options: { json?: boolean }) => {\n const corrections = listCorrections(process.cwd());\n if (options.json) {\n printJson(corrections);\n return;\n }\n const rules = [...corrections.project, ...corrections.agent, ...corrections.upstream];\n if (rules.length === 0) {\n line(\"No correction rules yet. Add one with agent-kit correction add <text>.\");\n return;\n }\n for (const rule of rules) {\n line(`${rule.id} [${rule.status}] (${rule.scope}) ${rule.text}`);\n }\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 .option(\"--json\", \"Print machine-readable JSON output.\")\n .action((textParts: string[], options: { scope: \"project\" | \"agent\" | \"upstream-proposal\"; agent?: string; json?: boolean }) => {\n const result = addCorrection(process.cwd(), {\n scope: options.scope,\n ...(options.agent ? { agentId: options.agent } : {}),\n text: textParts.join(\" \")\n });\n if (options.json) printJson(result);\n else line(`Added ${options.scope}-scoped correction ${result.id}.`);\n });\n\ncorrection\n .command(\"apply [id]\")\n .description(\"Mark a correction rule active and reviewed.\")\n .option(\"--id <id>\", \"Correction id.\")\n .option(\"--json\", \"Print machine-readable JSON output.\")\n .action((idArgument: string | undefined, options: { id?: string; json?: boolean }) => {\n const id = idArgument ?? options.id;\n if (!id) {\n fail(\"Missing correction id. Use agent-kit correction apply <id> or --id <id>.\");\n process.exitCode = 1;\n return;\n }\n const result = applyCorrection(process.cwd(), id);\n if (options.json) printJson(result);\n else line(`Applied correction ${id}.`);\n });\n\ncorrection\n .command(\"retire <id>\")\n .description(\"Retire a correction rule.\")\n .requiredOption(\"--reason <reason>\", \"Reason for retirement.\")\n .option(\"--json\", \"Print machine-readable JSON output.\")\n .action((id: string, options: { reason: string; json?: boolean }) => {\n const result = retireCorrection(process.cwd(), id, options.reason);\n if (options.json) printJson(result);\n else line(`Retired correction ${id}: ${options.reason}`);\n });\n\ncorrection\n .command(\"propose-upstream <id>\")\n .description(\"Create an upstream proposal from a project or agent correction.\")\n .option(\"--json\", \"Print machine-readable JSON output.\")\n .action((id: string, options: { json?: boolean }) => {\n const result = proposeCorrectionUpstream(process.cwd(), id);\n if (options.json) printJson(result);\n else line(`Created upstream proposal from correction ${id}.`);\n });\n\nconst studio = program.command(\"studio\").description(\"Export and serve local Agent Studio views.\");\n\nasync function runStudioServer(options: { port: number; host: string; open?: boolean }): Promise<void> {\n const handle = await startStudioServer({\n cwd: process.cwd(),\n port: options.port,\n host: options.host\n });\n if (handle.portFallback) {\n console.warn(`Port ${handle.requestedPort} is in use — using fallback port ${handle.port}. Kill the old process to avoid confusion.`);\n }\n console.log(`Agent Kit v${PACKAGE_VERSION} — live studio at ${handle.url}/`);\n console.log(\"SSE: GET /api/events/stream | Press Ctrl+C to stop.\");\n if (options.open) void openBrowser(`${handle.url}/`);\n await new Promise<void>((resolve) => {\n const shutdown = () => {\n void handle.close().finally(resolve);\n };\n process.once(\"SIGINT\", shutdown);\n process.once(\"SIGTERM\", shutdown);\n });\n}\n\nstudio\n .command(\"serve\")\n .description(\"Start localhost live Agent Studio viewer with SSE session events.\")\n .option(\"--port <number>\", \"Port to listen on.\", (value) => Number.parseInt(value, 10), 9331)\n .option(\"--host <host>\", \"Host to bind.\", \"127.0.0.1\")\n .option(\"--open\", \"Open the studio in your default browser.\")\n .action(async (options: { port: number; host: string; open?: boolean }) => {\n await runStudioServer(options);\n });\n\nstudio\n .command(\"export\")\n .description(\"Generate a self-contained static Agent Studio HTML file.\")\n .option(\"--json\", \"Print machine-readable JSON output.\")\n .action((options: { json?: boolean }) => {\n const result = exportStaticStudio(process.cwd());\n if (options.json) {\n printJson(result);\n return;\n }\n line(`Exported ${result.sessionCount} session(s) to ${result.studioPath}.`);\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 fail(error instanceof Error ? error.message : String(error));\n process.exitCode = 1;\n});\n","import { existsSync, readFileSync } from \"node:fs\";\nimport { join } from \"node:path\";\nimport { copyTextWithConflict, listFilesRecursive, readTextIfExists, sha256, type CopyResult } 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 interface AddSkillResult extends CopyResult {\n dryRun: boolean;\n}\n\nexport function addSkill(cwd: string, skillName: string, options: { force?: boolean; dryRun?: boolean } = {}): AddSkillResult {\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 targetRelativePath = join(\".agent-kit\", \"skills\", normalized);\n\n if (options.dryRun) {\n const existing = readTextIfExists(join(cwd, targetRelativePath));\n const sourceContent = readFileSync(sourcePath, \"utf8\");\n let action: CopyResult[\"action\"];\n if (existing === null) action = \"created\";\n else if (sha256(existing) === sha256(sourceContent)) action = \"unchanged\";\n else action = options.force ? \"overwritten\" : \"conflict\";\n return { action, target: targetRelativePath, dryRun: true };\n }\n\n const result = copyTextWithConflict(sourcePath, cwd, targetRelativePath, {\n force: Boolean(options.force),\n conflictRoot: join(cwd, \".agent-kit\", \"conflicts\")\n });\n\n return { ...result, dryRun: false };\n}\n","import { createHash } from \"node:crypto\";\nimport { cpSync, existsSync, lstatSync, mkdirSync, readFileSync, readdirSync, writeFileSync } 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 } from \"node:fs\";\nimport { join, normalize } from \"node:path\";\nimport {\n ANTIGRAVITY_COMMANDS_SOURCE_DIR,\n ANTIGRAVITY_COMMANDS_TARGET_DIR,\n ANTIGRAVITY_RUNTIME_SKILLS_TARGET_DIR,\n RUNTIME_SKILLS_SOURCE_DIR\n} from \"../config/defaults.js\";\nimport { containsLikelySecret } from \"../studio/shared.js\";\nimport { listFilesRecursive } from \"../utils/fs.js\";\nimport { createAuditReport } from \"./audit.js\";\nimport type { IdeTarget } from \"./ide-activate.js\";\nimport { assistantAdapterRowIsActive } from \"./assistant-adapters-table.js\";\n\nexport type ValidationLevel = \"pass\" | \"warn\" | \"fail\";\nexport type AdapterValidationTarget = IdeTarget | \"all\";\n\nexport interface ValidationFinding {\n level: ValidationLevel;\n area: string;\n message: string;\n remediation?: string;\n}\n\nexport interface ValidationReport {\n target: string;\n summary: Record<ValidationLevel, number>;\n findings: ValidationFinding[];\n}\n\nconst REQUIRED_COMMANDS = [\n \"setup\",\n \"spec\",\n \"audit\",\n \"plan\",\n \"handoff\",\n \"frontend\",\n \"ui-audit\",\n \"ui-polish\",\n \"layout-cleanup\",\n \"responsive-cleanup\",\n \"accessibility-pass\",\n \"distinctiveness-pass\",\n \"screenshot-critique\",\n \"browser-qa\",\n \"test\",\n \"review\",\n \"security\",\n \"copy\",\n \"ship\",\n \"upgrade\"\n] as const;\nconst REQUIRED_SOURCE_REFERENCES = [\"AGENTS.md\", \".agent-kit/agent-roster.json\", \"QUALITY_GATES.md\"];\n\ninterface AntigravityLayout {\n mode: \"source\" | \"installed\";\n pluginRoot: string;\n commandsRoot: string;\n runtimeSkillsRoot: string;\n adapterDocPath: string;\n}\n\nfunction summary(findings: ValidationFinding[]): Record<ValidationLevel, number> {\n return {\n pass: findings.filter((finding) => finding.level === \"pass\").length,\n warn: findings.filter((finding) => finding.level === \"warn\").length,\n fail: findings.filter((finding) => finding.level === \"fail\").length\n };\n}\n\nfunction report(target: string, findings: ValidationFinding[]): ValidationReport {\n return { target, summary: summary(findings), findings };\n}\n\nfunction readJson(path: string): unknown {\n try {\n return JSON.parse(readFileSync(path, \"utf8\")) as unknown;\n } catch {\n return null;\n }\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === \"object\" && value !== null;\n}\n\nfunction isSafeRelativePath(path: string): boolean {\n const normalized = normalize(path).replace(/\\\\/g, \"/\");\n if (normalized.startsWith(\"../runtime-skills/\")) return !normalized.slice(\"../runtime-skills/\".length).includes(\"../\");\n return !normalized.startsWith(\"/\") && !normalized.startsWith(\"../\") && !normalized.includes(\"/../\");\n}\n\nfunction findAntigravityLayout(cwd: string): AntigravityLayout | null {\n const sourcePlugin = join(cwd, \"antigravity\", \"plugin.json\");\n if (existsSync(sourcePlugin)) {\n return {\n mode: \"source\",\n pluginRoot: join(cwd, \"antigravity\"),\n commandsRoot: join(cwd, ANTIGRAVITY_COMMANDS_SOURCE_DIR),\n runtimeSkillsRoot: join(cwd, RUNTIME_SKILLS_SOURCE_DIR),\n adapterDocPath: join(cwd, \"assistant-adapters\", \"antigravity.md\")\n };\n }\n\n const installedPlugin = join(cwd, \".antigravity\", \"agent-kit\", \"plugin.json\");\n if (existsSync(installedPlugin)) {\n return {\n mode: \"installed\",\n pluginRoot: join(cwd, \".antigravity\", \"agent-kit\"),\n commandsRoot: join(cwd, ANTIGRAVITY_COMMANDS_TARGET_DIR),\n runtimeSkillsRoot: join(cwd, ANTIGRAVITY_RUNTIME_SKILLS_TARGET_DIR),\n adapterDocPath: join(cwd, \".antigravity\", \"agent-kit\", \"README.md\")\n };\n }\n\n return null;\n}\n\nfunction addSecretFinding(path: string, text: string, findings: ValidationFinding[]): void {\n if (containsLikelySecret(text)) {\n findings.push({\n level: \"fail\",\n area: \"secrets\",\n message: `${path} contains a secret-like value.`,\n remediation: \"Remove tokens, credentials, private URLs, database URLs, and customer data from runtime adapter assets.\"\n });\n }\n}\n\nfunction commandField(text: string, field: string): string | null {\n const match = text.match(new RegExp(`^${field}\\\\s*=\\\\s*\"([^\"]+)\"`, \"m\"));\n return match?.[1] ?? null;\n}\n\nfunction validateAntigravityCommands(layout: AntigravityLayout, findings: ValidationFinding[]): void {\n const files = listFilesRecursive(layout.commandsRoot).filter((file) => file.endsWith(\".toml\"));\n const commandNames = new Set<string>();\n\n for (const command of REQUIRED_COMMANDS) {\n const relativePath = `${command}.toml`;\n const path = join(layout.commandsRoot, relativePath);\n if (!existsSync(path)) {\n findings.push({\n level: \"fail\",\n area: \"commands\",\n message: `Missing Antigravity command ${relativePath}.`,\n remediation: \"Restore the full native command set, including frontend and UI improvement commands.\"\n });\n continue;\n }\n\n const text = readFileSync(path, \"utf8\");\n addSecretFinding(relativePath, text, findings);\n\n const name = commandField(text, \"name\");\n const description = commandField(text, \"description\");\n if (name !== command) {\n findings.push({\n level: \"fail\",\n area: \"commands\",\n message: `${relativePath} has name \"${name ?? \"missing\"}\" instead of \"${command}\".`,\n remediation: \"Keep command filename and command name aligned.\"\n });\n } else {\n commandNames.add(name);\n }\n\n if (!description || description.length < 20) {\n findings.push({\n level: \"fail\",\n area: \"commands\",\n message: `${relativePath} is missing a useful description.`,\n remediation: \"Add a concise runtime-facing description.\"\n });\n }\n\n if (!text.includes('prompt = \"\"\"') || !text.includes(\"Canonical sources:\") || !text.includes(\"Required outputs:\")) {\n findings.push({\n level: \"fail\",\n area: \"commands\",\n message: `${relativePath} is missing the prompt, canonical source list, or required output list.`,\n remediation: \"Every native command must wrap Agent Kit source-of-truth files and name required outputs.\"\n });\n }\n\n if (!REQUIRED_SOURCE_REFERENCES.some((reference) => text.includes(reference))) {\n findings.push({\n level: \"fail\",\n area: \"commands\",\n message: `${relativePath} does not reference Agent Kit source-of-truth files.`,\n remediation: \"Reference AGENTS.md, .agent-kit/agent-roster.json, QUALITY_GATES.md, or another canonical Agent Kit contract.\"\n });\n }\n }\n\n const extras = files.map((file) => file.replace(/\\.toml$/, \"\")).filter((name) => !(REQUIRED_COMMANDS as readonly string[]).includes(name));\n if (extras.length > 0) {\n findings.push({\n level: \"warn\",\n area: \"commands\",\n message: `Antigravity command directory contains extra commands: ${extras.join(\", \")}.`,\n remediation: \"Keep extra commands only if they are documented and validated as runtime adapters.\"\n });\n }\n\n if (commandNames.size === REQUIRED_COMMANDS.length) {\n findings.push({\n level: \"pass\",\n area: \"commands\",\n message: \"Antigravity native command set is complete and structurally valid.\"\n });\n }\n}\n\nfunction validateAntigravityPlugin(layout: AntigravityLayout, findings: ValidationFinding[]): void {\n const pluginPath = join(layout.pluginRoot, \"plugin.json\");\n const plugin = readJson(pluginPath);\n if (!plugin || !isRecord(plugin)) {\n findings.push({\n level: \"fail\",\n area: \"manifest\",\n message: \"Antigravity plugin.json is missing or invalid JSON.\",\n remediation: \"Restore antigravity/plugin.json and run agent-kit adapter validate antigravity.\"\n });\n return;\n }\n\n const commands = Array.isArray(plugin.commands) ? plugin.commands.filter(isRecord) : [];\n const skills = Array.isArray(plugin.skills) ? plugin.skills.filter(isRecord) : [];\n const commandNames = new Set(commands.map((command) => command.name).filter((name): name is string => typeof name === \"string\"));\n const missingCommands = REQUIRED_COMMANDS.filter((command) => !commandNames.has(command));\n\n if (missingCommands.length > 0) {\n findings.push({\n level: \"fail\",\n area: \"manifest\",\n message: `plugin.json is missing command entries: ${missingCommands.join(\", \")}.`,\n remediation: \"List every native command in plugin.json.\"\n });\n } else {\n findings.push({\n level: \"pass\",\n area: \"manifest\",\n message: \"plugin.json lists the required native commands.\"\n });\n }\n\n for (const entry of [...commands, ...skills]) {\n const path = typeof entry.path === \"string\" ? entry.path : \"\";\n if (!path || !isSafeRelativePath(path)) {\n const entryName = typeof entry.name === \"string\" ? entry.name : \"unknown\";\n findings.push({\n level: \"fail\",\n area: \"manifest\",\n message: `plugin.json has an unsafe or missing relative path for ${entryName}.`,\n remediation: \"Use relative paths that stay inside the plugin/runtime skill bundle.\"\n });\n continue;\n }\n const resolved = join(layout.pluginRoot, path);\n if (!existsSync(resolved)) {\n findings.push({\n level: \"fail\",\n area: \"manifest\",\n message: `plugin.json references missing path ${path}.`,\n remediation: \"Restore the referenced command or runtime skill asset.\"\n });\n }\n }\n\n const pluginText = readFileSync(pluginPath, \"utf8\");\n addSecretFinding(\"plugin.json\", pluginText, findings);\n if (Array.isArray(plugin.sourceOfTruth) && plugin.sourceOfTruth.includes(\"AGENTS.md\") && plugin.sourceOfTruth.includes(\".agent-kit/agent-roster.json\")) {\n findings.push({\n level: \"pass\",\n area: \"manifest\",\n message: \"plugin.json points back to Agent Kit source-of-truth contracts.\"\n });\n } else {\n findings.push({\n level: \"fail\",\n area: \"manifest\",\n message: \"plugin.json does not declare Agent Kit source-of-truth contracts.\",\n remediation: \"Keep AGENTS.md and .agent-kit/agent-roster.json as canonical references.\"\n });\n }\n}\n\nfunction validateRuntimeSkills(cwd: string, layout: AntigravityLayout, findings: ValidationFinding[]): void {\n const canonicalSkillsRoot = existsSync(join(cwd, \"skills\")) ? join(cwd, \"skills\") : join(cwd, \".agent-kit\", \"skills\");\n const canonicalSkillNames = listFilesRecursive(canonicalSkillsRoot)\n .filter((file) => file.endsWith(\".md\"))\n .map((file) => file.replace(/\\.md$/, \"\"));\n const runtimeSkillFiles = listFilesRecursive(layout.runtimeSkillsRoot).filter((file) => file.endsWith(\"/SKILL.md\") || file === \"SKILL.md\");\n const runtimeSkillNames = runtimeSkillFiles\n .map((file) => file.split(/[\\\\/]/)[0])\n .filter((value): value is string => typeof value === \"string\" && value.length > 0)\n .filter((value, index, values) => values.indexOf(value) === index);\n\n for (const skillName of canonicalSkillNames) {\n const runtimePath = join(layout.runtimeSkillsRoot, skillName, \"SKILL.md\");\n if (!existsSync(runtimePath)) {\n findings.push({\n level: \"fail\",\n area: \"runtime-skills\",\n message: `Missing runtime skill wrapper for ${skillName}.`,\n remediation: \"Add runtime-skills/<skill-id>/SKILL.md with frontmatter and a canonical skill reference.\"\n });\n continue;\n }\n\n const text = readFileSync(runtimePath, \"utf8\");\n addSecretFinding(`${skillName}/SKILL.md`, text, findings);\n if (!/^---\\nname: .+\\ndescription: .+\\n---/m.test(text)) {\n findings.push({\n level: \"fail\",\n area: \"runtime-skills\",\n message: `${skillName}/SKILL.md is missing required frontmatter.`,\n remediation: \"Add name and trigger-focused description frontmatter.\"\n });\n }\n if (!text.includes(`skills/${skillName}.md`) && !text.includes(`.agent-kit/skills/${skillName}.md`)) {\n findings.push({\n level: \"fail\",\n area: \"runtime-skills\",\n message: `${skillName}/SKILL.md does not reference the canonical skill file.`,\n remediation: \"Runtime skill wrappers must not fork canonical skill policy.\"\n });\n }\n }\n\n const extras = runtimeSkillNames.filter((name) => !canonicalSkillNames.includes(name));\n if (extras.length > 0) {\n findings.push({\n level: \"warn\",\n area: \"runtime-skills\",\n message: `Runtime skills contain wrappers without canonical skills: ${extras.join(\", \")}.`,\n remediation: \"Add canonical skills or remove orphan runtime wrappers.\"\n });\n }\n\n if (canonicalSkillNames.length > 0 && canonicalSkillNames.every((skillName) => existsSync(join(layout.runtimeSkillsRoot, skillName, \"SKILL.md\")))) {\n findings.push({\n level: \"pass\",\n area: \"runtime-skills\",\n message: `Runtime SKILL.md wrappers exist for ${canonicalSkillNames.length} canonical skills.`\n });\n }\n}\n\nfunction validateAntigravity(cwd: string): ValidationReport {\n const findings: ValidationFinding[] = [];\n const layout = findAntigravityLayout(cwd);\n if (!layout) {\n return report(\"antigravity\", [\n {\n level: \"fail\",\n area: \"adapter\",\n message: \"No Antigravity adapter assets found.\",\n remediation: \"Run agent-kit init --activate antigravity or restore antigravity/plugin.json in the package source.\"\n }\n ]);\n }\n\n const adapterDoc = existsSync(layout.adapterDocPath) ? readFileSync(layout.adapterDocPath, \"utf8\") : \"\";\n if (!adapterDoc) {\n findings.push({\n level: \"fail\",\n area: \"adapter\",\n message: \"Antigravity adapter documentation is missing.\",\n remediation: \"Restore assistant-adapters/antigravity.md or rerun agent-kit init --activate antigravity.\"\n });\n } else {\n addSecretFinding(layout.adapterDocPath, adapterDoc, findings);\n if (adapterDoc.includes(\"AGENTS.md\") && adapterDoc.includes(\"agent-kit adapter validate antigravity\")) {\n findings.push({\n level: \"pass\",\n area: \"adapter\",\n message: \"Antigravity adapter documentation points to canonical Agent Kit validation.\"\n });\n } else {\n findings.push({\n level: \"fail\",\n area: \"adapter\",\n message: \"Antigravity adapter documentation does not explain source-of-truth and validation behavior.\",\n remediation: \"Document canonical Agent Kit files and the structural validation command.\"\n });\n }\n }\n\n validateAntigravityPlugin(layout, findings);\n validateAntigravityCommands(layout, findings);\n validateRuntimeSkills(cwd, layout, findings);\n\n if (layout.mode === \"source\") {\n const packageJson = readJson(join(cwd, \"package.json\"));\n const files = isRecord(packageJson) && Array.isArray(packageJson.files) ? packageJson.files : [];\n for (const requiredFile of [\"antigravity\", \"runtime-skills\", \"assistant-adapters\"]) {\n if (!files.includes(requiredFile)) {\n findings.push({\n level: \"fail\",\n area: \"package\",\n message: `package.json#files does not include ${requiredFile}.`,\n remediation: \"Add the runtime adapter asset to the public package allowlist.\"\n });\n }\n }\n }\n\n if (findings.every((finding) => finding.level !== \"fail\")) {\n findings.push({\n level: \"pass\",\n area: \"adapter\",\n message: \"Antigravity adapter validation completed without blocking failures.\"\n });\n }\n\n return report(\"antigravity\", findings);\n}\n\nfunction validateBasicAdapter(cwd: string, target: Exclude<IdeTarget, \"antigravity\">): ValidationReport {\n const findings: ValidationFinding[] = [];\n const isPackageSource = existsSync(join(cwd, \"package.json\")) && existsSync(join(cwd, \"src\")) && existsSync(join(cwd, \"templates\"));\n\n if (isPackageSource) {\n const sourcePaths: Record<Exclude<IdeTarget, \"antigravity\">, string[]> = {\n cursor: [\n \"assistant-adapters/cursor-agent-kit.mdc\",\n \"assistant-adapters/model-selection/cursor-model-selection.mdc\",\n \"assistant-adapters/cursor-planner.mdc\"\n ],\n claude: [\"assistant-adapters/claude-code-subagents.md\"],\n codex: [\"assistant-adapters/codex-agents.md\", \"assistant-adapters/model-selection/codex-config.example.toml\"],\n copilot: [\"assistant-adapters/github-copilot-instructions.md\", \"assistant-adapters/github-next-supabase.instructions.md\"]\n };\n\n for (const relativePath of sourcePaths[target]) {\n const path = join(cwd, relativePath);\n if (!existsSync(path)) {\n findings.push({\n level: \"fail\",\n area: \"adapter\",\n message: `${relativePath} is missing.`,\n remediation: \"Restore the adapter template or run agent-kit update.\"\n });\n continue;\n }\n const text = readFileSync(path, \"utf8\");\n addSecretFinding(relativePath, text, findings);\n if (!text.includes(\"AGENTS.md\") && !text.includes(\"MODEL_ROUTING.md\")) {\n findings.push({\n level: \"warn\",\n area: \"adapter\",\n message: `${relativePath} does not clearly reference Agent Kit source-of-truth files.`,\n remediation: \"Adapter templates should point back to AGENTS.md, MODEL_ROUTING.md, and the roster contract.\"\n });\n }\n }\n } else {\n findings.push(...validateInstalledIdeAdapter(cwd, target).findings);\n }\n\n if (findings.every((finding) => finding.level !== \"fail\")) {\n findings.push({\n level: \"pass\",\n area: \"adapter\",\n message: `${target} adapter ${isPackageSource ? \"templates are present\" : \"activation assets are present\"}.`\n });\n }\n\n return report(target, findings);\n}\n\nfunction readAssistantAdaptersDoc(cwd: string): string {\n const path = join(cwd, \"ASSISTANT_ADAPTERS.md\");\n return existsSync(path) ? readFileSync(path, \"utf8\") : \"\";\n}\n\nfunction adaptersRowIsActive(doc: string, toolLabel: string): boolean {\n return assistantAdapterRowIsActive(doc, toolLabel);\n}\n\nfunction validateInstalledIdeAdapter(cwd: string, target: Exclude<IdeTarget, \"antigravity\">): ValidationReport {\n const findings: ValidationFinding[] = [];\n const adaptersDoc = readAssistantAdaptersDoc(cwd);\n\n if (target === \"cursor\") {\n const rulesPath = join(cwd, \".cursor/rules/cursor-agent-kit.mdc\");\n if (!existsSync(rulesPath)) {\n findings.push({\n level: \"fail\",\n area: \"adapter\",\n message: \".cursor/rules/cursor-agent-kit.mdc is missing.\",\n remediation: \"Run agent-kit init or agent-kit init --activate cursor.\"\n });\n } else {\n addSecretFinding(\".cursor/rules/cursor-agent-kit.mdc\", readFileSync(rulesPath, \"utf8\"), findings);\n }\n\n const plannerAgent = join(cwd, \".cursor/agents/planner.md\");\n if (existsSync(plannerAgent)) {\n findings.push({\n level: \"pass\",\n area: \"adapter\",\n message: \".cursor/agents/planner.md is installed.\"\n });\n } else if (adaptersRowIsActive(adaptersDoc, \"Cursor\")) {\n findings.push({\n level: \"warn\",\n area: \"adapter\",\n message: \"Cursor is marked Active but .cursor/agents/planner.md is missing.\",\n remediation: \"Run agent-kit init --activate cursor to generate council subagents from the roster.\"\n });\n }\n\n const skillSample = join(cwd, \".cursor/skills/planning-council/SKILL.md\");\n if (existsSync(skillSample)) {\n findings.push({\n level: \"pass\",\n area: \"adapter\",\n message: \".cursor/skills/*/SKILL.md project skills are installed.\"\n });\n }\n }\n\n if (target === \"claude\") {\n const plannerAgent = join(cwd, \".claude/agents/planner.md\");\n if (!existsSync(plannerAgent)) {\n findings.push({\n level: \"fail\",\n area: \"adapter\",\n message: \".claude/agents/planner.md is missing.\",\n remediation: \"Run agent-kit init --activate claude.\"\n });\n }\n }\n\n if (target === \"codex\") {\n const configPath = join(cwd, \".codex/config.toml\");\n if (!existsSync(configPath)) {\n findings.push({\n level: \"fail\",\n area: \"adapter\",\n message: \".codex/config.toml is missing.\",\n remediation: \"Run agent-kit init --activate codex.\"\n });\n }\n const plannerAgent = join(cwd, \".codex/agents/planner.toml\");\n if (existsSync(plannerAgent)) {\n findings.push({\n level: \"pass\",\n area: \"adapter\",\n message: \".codex/agents/planner.toml is installed.\"\n });\n } else if (adaptersRowIsActive(adaptersDoc, \"Codex / AGENTS.md-compatible tools\")) {\n findings.push({\n level: \"warn\",\n area: \"adapter\",\n message: \"Codex is marked Active but .codex/agents/planner.toml is missing.\",\n remediation: \"Run agent-kit init --activate codex to generate council custom agents from the roster.\"\n });\n }\n }\n\n if (target === \"copilot\") {\n const instructions = join(cwd, \".github/copilot-instructions.md\");\n if (!existsSync(instructions)) {\n findings.push({\n level: \"fail\",\n area: \"adapter\",\n message: \".github/copilot-instructions.md is missing.\",\n remediation: \"Run agent-kit init --activate copilot.\"\n });\n }\n }\n\n return report(target, findings);\n}\n\nexport function validateAdapter(cwd: string, target: AdapterValidationTarget = \"antigravity\"): ValidationReport {\n if (target === \"all\") {\n const findings: ValidationFinding[] = [];\n for (const item of [\"antigravity\", \"cursor\", \"claude\", \"codex\", \"copilot\"] as const) {\n findings.push(...validateAdapter(cwd, item).findings);\n }\n return report(\"all\", findings);\n }\n\n if (target === \"antigravity\") return validateAntigravity(cwd);\n return validateBasicAdapter(cwd, target);\n}\n\nexport function validatePackage(cwd: string): ValidationReport {\n const findings: ValidationFinding[] = [];\n const sourceMode = existsSync(join(cwd, \"package.json\")) && existsSync(join(cwd, \"src\")) && existsSync(join(cwd, \"templates\"));\n if (!sourceMode) {\n return report(\"package\", [\n {\n level: \"fail\",\n area: \"package\",\n message: \"Package validation must run from the Agent Kit source repository root.\",\n remediation: \"Run this command from the package repository, not from an installed downstream project.\"\n }\n ]);\n }\n\n findings.push(...validateAntigravity(cwd).findings);\n\n for (const doc of [\"README.md\", \"DOCS.md\", \"SPEC.md\", \"DECISIONS.md\", \"QUALITY_GATES.md\", \"TESTING.md\", \"UPGRADE.md\"]) {\n const path = join(cwd, doc);\n const text = existsSync(path) ? readFileSync(path, \"utf8\") : \"\";\n const lower = text.toLowerCase();\n if (!lower.includes(\"antigravity\") && !lower.includes(\"runtime command\") && !lower.includes(\"runtime adapter\")) {\n findings.push({\n level: \"warn\",\n area: \"docs\",\n message: `${doc} does not mention the runtime adapter or Antigravity command layer.`,\n remediation: \"Update living docs when runtime adapter behavior changes.\"\n });\n }\n }\n\n for (const examplePath of [\n \"examples/next-supabase-installed/.agent-kit/agent-roster.json\",\n \"examples/next-supabase-installed/.agent-kit/model-routing.json\",\n \"examples/next-supabase-installed/.agent-kit/manifest.json\",\n \"examples/next-supabase-installed/audit-output.json\"\n ]) {\n if (!existsSync(join(cwd, examplePath))) {\n findings.push({\n level: \"fail\",\n area: \"examples\",\n message: `${examplePath} is missing.`,\n remediation: \"Regenerate or restore the example install snapshot.\"\n });\n }\n }\n\n const auditReport = createAuditReport(cwd);\n if (auditReport.summary.fail > 0) {\n findings.push({\n level: \"fail\",\n area: \"audit\",\n message: `Source package audit has ${auditReport.summary.fail} failure(s).`,\n remediation: \"Fix package-root audit failures before release.\"\n });\n } else {\n findings.push({\n level: \"pass\",\n area: \"audit\",\n message: `Source package audit has no failures (${auditReport.readiness.level}).`\n });\n }\n\n if (findings.every((finding) => finding.level !== \"fail\")) {\n findings.push({\n level: \"pass\",\n area: \"package\",\n message: \"Package validation completed without blocking failures.\"\n });\n }\n\n return report(\"package\", findings);\n}\n","import type { AgentKitConfig } from \"./types.js\";\n\nexport const PACKAGE_NAME = \"@appsforgood/next-supabase-kit\";\nexport const PACKAGE_VERSION = \"0.1.8\";\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 \"LOOP_CODING.md\",\n \"DEPLOYMENT.md\",\n \"UPGRADE.md\"\n] as const;\n\nexport const LIBRARY_FOLDERS = [\n \"agents\",\n \"skills\",\n \"prompts\",\n \"checklists\",\n \"runtime-skills\",\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\nexport const CURSOR_SCOPED_ADAPTER_FILES = [\n {\n source: \"assistant-adapters/cursor-planner.mdc\",\n target: \".cursor/rules/cursor-planner.mdc\"\n },\n {\n source: \"assistant-adapters/cursor-security.mdc\",\n target: \".cursor/rules/cursor-security.mdc\"\n },\n {\n source: \"assistant-adapters/cursor-frontend.mdc\",\n target: \".cursor/rules/cursor-frontend.mdc\"\n }\n] as const;\n\nexport const COPILOT_INSTRUCTION_FILES = [\n {\n source: \"assistant-adapters/github-copilot-instructions.md\",\n target: \".github/copilot-instructions.md\"\n },\n {\n source: \"assistant-adapters/github-next-supabase.instructions.md\",\n target: \".github/instructions/next-supabase.instructions.md\"\n }\n] as const;\n\nexport const CODEX_CONFIG_SOURCE = \"assistant-adapters/model-selection/codex-config.example.toml\";\nexport const CLAUDE_TEMPLATE = \"templates/next-supabase/CLAUDE.md\";\n\nexport const ANTIGRAVITY_PLUGIN_FILES = [\n {\n source: \"antigravity/plugin.json\",\n target: \".antigravity/agent-kit/plugin.json\"\n },\n {\n source: \"assistant-adapters/antigravity.md\",\n target: \".antigravity/agent-kit/README.md\"\n }\n] as const;\n\nexport const ANTIGRAVITY_COMMANDS_SOURCE_DIR = \"antigravity/commands\";\nexport const ANTIGRAVITY_COMMANDS_TARGET_DIR = \".antigravity/agent-kit/commands\";\nexport const RUNTIME_SKILLS_SOURCE_DIR = \"runtime-skills\";\nexport const ANTIGRAVITY_RUNTIME_SKILLS_TARGET_DIR = \".antigravity/runtime-skills\";\n\nexport const CI_TEMPLATE_FILES = [\n {\n source: \"templates/next-supabase/.github/workflows/agent-kit-audit.yml\",\n target: \".github/workflows/agent-kit-audit.yml\"\n }\n] as const;\n","import { appendFileSync, existsSync, readFileSync } from \"node:fs\";\nimport type { IncomingMessage } from \"node:http\";\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)=(?!\\\\n|\\\\r|\\\\r\\\\n)[\"']?[A-Za-z0-9][A-Za-z0-9_./+:-]+/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 ensureDir(join(cwd, AGENT_KIT_DIR, \"onboarding\"));\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, \"&lt;\")\n .replace(/>/g, \"&gt;\")\n .replace(/[`![\\]()|]/g, \"\\\\$&\")\n .replace(/\\r?\\n/g, \"<br>\");\n}\n\nexport function escapeMarkdownTableCell(value: string | undefined): string {\n return escapeMarkdownText(value).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\nexport function readJsonBody(request: IncomingMessage): Promise<unknown> {\n return new Promise((resolve, reject) => {\n const chunks: Buffer[] = [];\n let bodyTooLarge = false;\n request.on(\"data\", (chunk: Buffer) => {\n if (bodyTooLarge) return;\n chunks.push(chunk);\n if (chunks.reduce((total, item) => total + item.length, 0) > 256_000) {\n bodyTooLarge = true;\n reject(new Error(\"Request body too large.\"));\n }\n });\n request.on(\"end\", () => {\n if (bodyTooLarge) return;\n const raw = Buffer.concat(chunks).toString(\"utf8\").trim();\n if (!raw) {\n resolve({});\n return;\n }\n try {\n resolve(JSON.parse(raw) as unknown);\n } catch {\n reject(new Error(\"Request body must be valid JSON.\"));\n }\n });\n request.on(\"error\", reject);\n });\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 { getSetupProgress, onboardingStateExists } from \"../studio/onboarding-state.js\";\nimport { readManifest } from \"./install.js\";\nimport { assistantAdapterRowIsActive } from \"./assistant-adapters-table.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 \"ui-improvement-harness\",\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 \"onboarding-state.schema.json\",\n \"agentic-level.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 isPackageRepository(cwd: string): boolean {\n const packagePath = join(cwd, \"package.json\");\n if (!existsSync(packagePath)) return false;\n try {\n const packageJson = JSON.parse(readFileSync(packagePath, \"utf8\")) as { name?: string };\n return (\n packageJson.name === \"@appsforgood/next-supabase-kit\" &&\n existsSync(join(cwd, \"src\", \"cli\", \"index.ts\")) &&\n existsSync(join(cwd, \"templates\", \"next-supabase\")) &&\n existsSync(join(cwd, \"rosters\", \"next-supabase-default-council.json\"))\n );\n } catch {\n return false;\n }\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\" ? { reason: override } : override && typeof override === \"object\" ? override : { 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[], rosterRelativePath = DEFAULT_AGENT_ROSTER_TARGET): void {\n const rosterPath = join(cwd, rosterRelativePath);\n if (!existsSync(rosterPath)) {\n findings.push({\n level: \"fail\",\n area: \"agents\",\n message: `${rosterRelativePath} 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: `${rosterRelativePath} 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: `${rosterRelativePath} 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:\n \"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[], schemaRootRelativePath = \".agent-kit/schemas\"): void {\n for (const schemaFile of REQUIRED_SCHEMA_FILES) {\n const schemaPath = join(cwd, schemaRootRelativePath, schemaFile);\n if (!existsSync(schemaPath)) {\n findings.push({\n level: \"warn\",\n area: \"agents\",\n message: `${schemaRootRelativePath}/${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: `${schemaRootRelativePath}/${schemaFile} is present and parseable.`\n });\n } catch {\n findings.push({\n level: \"fail\",\n area: \"agents\",\n message: `${schemaRootRelativePath}/${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 setup, 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:\n \"Answer product summary, audience, workflows, auth/tenant model, UI direction, value proposition, and quality target with agent-kit setup or by editing .agent-kit/project-context.json.\"\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 if (onboardingStateExists(cwd)) {\n const progress = getSetupProgress(cwd);\n if (!progress.quickComplete) {\n findings.push({\n level: \"warn\",\n area: \"studio\",\n message: `Setup wizard progress is ${progress.percent}% complete (depth: ${progress.depth}).`,\n remediation: \"Run agent-kit setup --open to finish project context onboarding, or agent-kit setup --status to inspect progress.\"\n });\n } else {\n findings.push({\n level: \"pass\",\n area: \"studio\",\n message: \"Setup wizard quick path is complete.\"\n });\n }\n } else if (missingHighValue.length === 0 && result.data.primaryWorkflows.length > 0) {\n findings.push({\n level: \"warn\",\n area: \"studio\",\n message: \"Project context exists but setup wizard state has not been recorded.\",\n remediation: \"Run agent-kit setup --open once so onboarding progress and depth are tracked locally.\"\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 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[], adapterRootRelativePath = \".agent-kit/assistant-adapters\", docsCwd = cwd): void {\n const adaptersDoc = readDoc(docsCwd, \"ASSISTANT_ADAPTERS.md\");\n const adapterRoot = join(cwd, adapterRootRelativePath);\n\n if (!existsSync(adapterRoot)) {\n findings.push({\n level: \"warn\",\n area: \"agents\",\n message: `${adapterRootRelativePath} 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: `${adapterRootRelativePath} 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 and subagents, 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 (assistantAdapterRowIsActive(adaptersDoc, \"Cursor\") && !existsSync(join(cwd, \".cursor/agents/planner.md\"))) {\n findings.push({\n level: \"warn\",\n area: \"agents\",\n message: \"Cursor is marked Active but .cursor/agents/planner.md is missing.\",\n remediation: \"Run agent-kit init --activate cursor to generate council subagents from the roster.\"\n });\n }\n\n if (assistantAdapterRowIsActive(adaptersDoc, \"Codex / AGENTS.md-compatible tools\") && !existsSync(join(cwd, \".codex/agents/planner.toml\"))) {\n findings.push({\n level: \"warn\",\n area: \"agents\",\n message: \"Codex is marked Active but .codex/agents/planner.toml is missing.\",\n remediation: \"Run agent-kit init --activate codex to generate council custom agents from the roster.\"\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[], routingRelativePath = DEFAULT_MODEL_ROUTING_TARGET, docsCwd = cwd): void {\n const modelRoutingDoc = readDoc(docsCwd, \"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, routingRelativePath);\n if (!existsSync(routingPath)) {\n findings.push({\n level: \"warn\",\n area: \"models\",\n message: `${routingRelativePath} 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: `${routingRelativePath} 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: `${routingRelativePath} 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:\n \"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 (\n !includesAll(designDoc, [\"distinctiveness benchmark\", \"first-screen proof\", \"content fingerprint\", \"asset provenance\", \"state proof\", \"visual QA proof\"])\n ) {\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: \"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: \"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 = [/\\bTBD\\b/i, /replace with real/i, /example_table/i, /describe the product/i, /document required/i, /pass\\/fail\\/skipped/i];\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 const packageRepository = isPackageRepository(cwd);\n const packageSourceMode = packageRepository && !manifest;\n const docsCwd = packageSourceMode ? join(cwd, \"templates\", \"next-supabase\") : cwd;\n\n if (!manifest) {\n if (packageRepository) {\n findings.push({\n level: \"pass\",\n area: \"install\",\n message: \"Package source repository mode detected; installed-project manifest is not required.\"\n });\n } else {\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 }\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, packageSourceMode ? \"rosters/next-supabase-default-council.json\" : DEFAULT_AGENT_ROSTER_TARGET);\n addSchemaFindings(cwd, findings, packageSourceMode ? \"schemas\" : \".agent-kit/schemas\");\n addCouncilSessionRecordFindings(cwd, findings);\n if (!packageRepository || existsSync(join(cwd, CONTEXT_JSON)) || existsSync(join(cwd, COUNCIL_SESSION_DIR))) {\n addAgentStudioFindings(cwd, findings);\n }\n\n for (const doc of ROOT_DOCS) {\n const docPath = join(docsCwd, doc);\n const displayPath = packageSourceMode ? `templates/next-supabase/${doc}` : doc;\n if (existsSync(docPath)) {\n findings.push({ level: \"pass\", area: \"docs\", message: `${displayPath} exists.` });\n } else {\n findings.push({\n level: doc === \"MODEL_ROUTING.md\" ? \"warn\" : \"fail\",\n area: \"docs\",\n message: `${displayPath} is missing.`,\n remediation: packageSourceMode\n ? `Restore ${displayPath}; package source audits validate shipped templates instead of installed-project root docs.`\n : `Run agent-kit init or restore ${doc} from the next-supabase template.`\n });\n }\n }\n\n addCouncilDocFindings(docsCwd, findings);\n addAssistantAdapterFindings(cwd, findings, packageSourceMode ? \"assistant-adapters\" : \".agent-kit/assistant-adapters\", docsCwd);\n addModelRoutingFindings(cwd, findings, packageSourceMode ? \"model-routing/default-model-routing.json\" : DEFAULT_MODEL_ROUTING_TARGET, docsCwd);\n addMessagingFindings(docsCwd, findings);\n addQualityGateFindings(docsCwd, findings);\n addUpgradeFindings(docsCwd, findings);\n addProjectEvidenceFindings(docsCwd, findings);\n addProjectRealityFindings(cwd, findings, { packageRepository });\n\n const security = readDoc(docsCwd, \"SECURITY.md\");\n if (!includesAny(security, [\"OWASP\", \"Top 10\"])) {\n findings.push({\n level: \"fail\",\n area: \"docs-hygiene\",\n message: \"SECURITY.md does not explicitly reference OWASP Top 10 review (docs hygiene check).\",\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: \"docs-hygiene\",\n message: \"SECURITY.md does not explicitly cover Supabase RLS (docs hygiene check).\",\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: \"docs-hygiene\",\n message: \"SECURITY.md does not mention service-role key isolation (docs hygiene check).\",\n remediation: \"Document that service-role keys are server-only and never exposed to client bundles.\"\n });\n }\n\n addFrontendFindings(docsCwd, findings);\n\n const testing = readDoc(docsCwd, \"TESTING.md\");\n if (!includesAny(testing, [\"Playwright\", \"smoke\"])) {\n findings.push({\n level: \"warn\",\n area: \"docs-hygiene\",\n message: \"TESTING.md does not require Playwright or smoke coverage (docs hygiene check).\",\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: \"docs-hygiene\",\n message: \"TESTING.md does not define visual QA or visual-regression evidence (docs hygiene check).\",\n remediation:\n \"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 readPackageJson(cwd: string): { scripts?: Record<string, string> } | null {\n const path = join(cwd, \"package.json\");\n if (!existsSync(path)) return null;\n try {\n return JSON.parse(readFileSync(path, \"utf8\")) as { scripts?: Record<string, string> };\n } catch {\n return null;\n }\n}\n\nfunction containsLikelySecretForAudit(relativeFile: string, content: string): boolean {\n const normalized = relativeFile.replace(/\\\\/g, \"/\");\n const testSecretFixture = [\"sk\", \"test\", \"fake\", \"secret\", \"value\"].join(\"_\");\n if (normalized.startsWith(\"tests/\") && content.includes(`const fakeSecret = \"${testSecretFixture}\"`) && content.includes(\"not.toContain(fakeSecret)\")) {\n return containsLikelySecret(content.split(testSecretFixture).join(\"[TEST_SECRET_FIXTURE]\"));\n }\n return containsLikelySecret(content);\n}\n\nfunction addProjectRealityFindings(cwd: string, findings: AuditFinding[], options: { packageRepository?: boolean } = {}): void {\n const migrationsDir = join(cwd, \"supabase\", \"migrations\");\n if (existsSync(migrationsDir)) {\n const sqlFiles = listFilesRecursive(migrationsDir).filter((file) => file.endsWith(\".sql\"));\n if (sqlFiles.length === 0) {\n findings.push({\n level: \"warn\",\n area: \"project-reality\",\n message: \"supabase/migrations exists but contains no SQL migration files.\",\n remediation: \"Add versioned SQL migrations or remove the empty migrations directory if Supabase is not in use.\"\n });\n } else {\n const rlsFiles = sqlFiles.filter((file) => {\n const content = readFileSync(join(migrationsDir, file), \"utf8\");\n return /enable\\s+row\\s+level\\s+security/i.test(content);\n });\n if (rlsFiles.length === 0) {\n findings.push({\n level: \"fail\",\n area: \"project-reality\",\n message: \"No Supabase migration enables row level security.\",\n remediation: \"Add `ALTER TABLE ... ENABLE ROW LEVEL SECURITY` (or equivalent) in supabase/migrations before shipping user data.\"\n });\n } else {\n findings.push({\n level: \"pass\",\n area: \"project-reality\",\n message: `Supabase migrations enable RLS in ${rlsFiles.length} file(s).`\n });\n }\n }\n }\n\n const packageJson = readPackageJson(cwd);\n if (!packageJson) {\n findings.push({\n level: \"warn\",\n area: \"project-reality\",\n message: \"No package.json found to verify test scripts.\",\n remediation: \"Add package.json with test, lint, and build scripts appropriate to the stack.\"\n });\n } else {\n const scripts = packageJson.scripts ?? {};\n const testScript = scripts.test ?? scripts[\"test:unit\"] ?? scripts[\"test:ci\"];\n if (!testScript) {\n findings.push({\n level: \"warn\",\n area: \"project-reality\",\n message: \"package.json has no test script (test, test:unit, or test:ci).\",\n remediation: \"Add a test script and document it in TESTING.md.\"\n });\n } else {\n findings.push({\n level: \"pass\",\n area: \"project-reality\",\n message: \"package.json defines a test script.\"\n });\n }\n }\n\n const trackedSourceFiles = listFilesRecursive(cwd).filter((file) => {\n if (file.includes(\"node_modules/\") || file.includes(\".agent-kit/\")) return false;\n return /\\.(ts|tsx|js|jsx|env|json)$/.test(file);\n });\n const secretHits = trackedSourceFiles\n .map((file) => {\n const content = readFileSync(join(cwd, file), \"utf8\");\n return containsLikelySecretForAudit(file, content) ? file : null;\n })\n .filter((file): file is string => file !== null)\n .slice(0, 5);\n if (secretHits.length > 0) {\n findings.push({\n level: \"fail\",\n area: \"project-reality\",\n message: `Possible committed secret patterns detected in: ${secretHits.join(\", \")}.`,\n remediation: \"Remove secrets from tracked files, rotate exposed credentials, and use environment variables.\"\n });\n } else if (trackedSourceFiles.length > 0) {\n findings.push({\n level: \"pass\",\n area: \"project-reality\",\n message: \"No obvious committed secret patterns detected in tracked source files.\"\n });\n }\n\n if (options.packageRepository) {\n findings.push({\n level: \"pass\",\n area: \"project-reality\",\n message: \"Package source repository mode does not require installed-project context files.\"\n });\n } else if (!existsSync(join(cwd, CONTEXT_JSON))) {\n findings.push({\n level: \"warn\",\n area: \"project-reality\",\n message: \".agent-kit/project-context.json is missing.\",\n remediation: \"Run agent-kit init or agent-kit context init to create project context.\"\n });\n } else {\n findings.push({\n level: \"pass\",\n area: \"project-reality\",\n message: \".agent-kit/project-context.json exists.\"\n });\n }\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\nconst AgenticLevelCore = z.union([z.literal(3), z.literal(4), z.literal(5), z.literal(6)]);\nconst AgenticLevelTarget = z.union([z.literal(3), z.literal(4), z.literal(5), z.literal(6), z.literal(7), z.literal(8)]);\n\nexport const OnboardingStateContract = z\n .object({\n schemaVersion: z.literal(1),\n depth: z.enum([\"quick\", \"standard\", \"complete\", \"undecided\"]),\n startedAt: z.string().datetime(),\n lastVisitedAt: z.string().datetime(),\n completedAt: z.string().datetime().optional(),\n completedSections: z.array(z.string()),\n skippedSections: z.array(z.string()),\n currentSection: z.string(),\n currentStep: z.number().int().min(0),\n wizardVersion: z.string(),\n ideSurface: z.enum([\"cursor\", \"copilot\", \"claude\", \"codex\", \"other\"]).optional(),\n ideVerifiedAt: z.string().datetime().optional(),\n visualQaTier: z.enum([\"baseline\", \"strong\", \"mature\"]).optional(),\n targetAgenticLevel: AgenticLevelTarget.optional(),\n lastAgenticLevel: AgenticLevelCore.optional(),\n lastAgenticComputedAt: z.string().datetime().optional()\n })\n .strict();\n\nexport type OnboardingStateContractValue = z.infer<typeof OnboardingStateContract>;\n\nexport const AgenticLevelSignalContract = z\n .object({\n id: z.string().min(1),\n level: AgenticLevelCore,\n label: z.string().min(1),\n pass: z.boolean(),\n evidence: z.string().min(1),\n remediation: z.string().min(1)\n })\n .strict();\n\nexport const AgenticLevelContract = z\n .object({\n currentLevel: AgenticLevelCore,\n targetLevel: AgenticLevelTarget,\n maintainerProfile: z.boolean(),\n computedAt: z.string().datetime(),\n maintainerNote: z.string().optional(),\n signals: z.array(AgenticLevelSignalContract),\n climbSteps: z.array(AgenticLevelSignalContract)\n })\n .strict();\n\nexport type AgenticLevelContractValue = z.infer<typeof AgenticLevelContract>;\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 { existsSync } from \"node:fs\";\nimport { join } from \"node:path\";\nimport { OnboardingStateContract, type OnboardingStateContractValue } from \"../config/contracts.js\";\nimport { scanProjectContext } from \"./context.js\";\nimport {\n COMPLETE_SECTIONS,\n QUICK_SECTIONS,\n SECTION_LABELS,\n STANDARD_SECTIONS,\n WIZARD_VERSION,\n type WizardDepth,\n type WizardSectionId,\n sectionsForDepth\n} from \"./wizard/steps.js\";\nimport { ensureStudioDirs, nowIso, readJsonFile, writeJsonFile } from \"./shared.js\";\n\nexport const ONBOARDING_DIR = \".agent-kit/onboarding\";\nexport const ONBOARDING_STATE_JSON = \".agent-kit/onboarding/state.json\";\n\nexport type SectionStatus = \"done\" | \"in_progress\" | \"optional\" | \"not_started\";\n\nexport interface SetupProgressSection {\n id: WizardSectionId;\n label: string;\n status: SectionStatus;\n}\n\nexport interface SetupProgress {\n percent: number;\n depth: WizardDepth;\n quickComplete: boolean;\n sections: SetupProgressSection[];\n recommendedNext: WizardSectionId | null;\n openContextQuestions: number;\n}\n\nfunction defaultState(): OnboardingStateContractValue {\n const now = nowIso();\n return {\n schemaVersion: 1,\n depth: \"undecided\",\n startedAt: now,\n lastVisitedAt: now,\n completedSections: [],\n skippedSections: [],\n currentSection: \"home\",\n currentStep: 0,\n wizardVersion: WIZARD_VERSION\n };\n}\n\nexport function loadOnboardingState(cwd: string): OnboardingStateContractValue {\n ensureStudioDirs(cwd);\n const existing = readJsonFile<unknown>(cwd, ONBOARDING_STATE_JSON);\n if (!existing) return defaultState();\n const parsed = OnboardingStateContract.safeParse(existing);\n if (!parsed.success) return defaultState();\n return parsed.data;\n}\n\nexport function saveOnboardingState(cwd: string, patch: Partial<OnboardingStateContractValue>): OnboardingStateContractValue {\n const current = loadOnboardingState(cwd);\n const next: OnboardingStateContractValue = OnboardingStateContract.parse({\n ...current,\n ...patch,\n lastVisitedAt: nowIso()\n });\n writeJsonFile(cwd, ONBOARDING_STATE_JSON, next);\n return next;\n}\n\nfunction sectionStatus(state: OnboardingStateContractValue, section: WizardSectionId): SectionStatus {\n if (state.completedSections.includes(section)) return \"done\";\n if (state.skippedSections.includes(section)) return \"optional\";\n if (state.currentSection === section) return \"in_progress\";\n const optionalSections: WizardSectionId[] = [\"visualQa\", \"designDoc\", \"messagingDoc\", \"applyDrafts\", \"ui\"];\n if (optionalSections.includes(section) && state.depth === \"quick\") return \"optional\";\n if (section === \"review\" && state.completedSections.includes(\"messaging\")) return \"in_progress\";\n return \"not_started\";\n}\n\nfunction isQuickComplete(state: OnboardingStateContractValue, openQuestions: number): boolean {\n const required = QUICK_SECTIONS.filter((s) => s !== \"review\");\n const done = required.every((section) => state.completedSections.includes(section));\n return done && openQuestions === 0;\n}\n\nexport function getSetupProgress(cwd: string): SetupProgress {\n const state = loadOnboardingState(cwd);\n const context = scanProjectContext(cwd);\n const openContextQuestions = context.openQuestions.length;\n const activeSections = state.depth === \"undecided\" ? QUICK_SECTIONS : sectionsForDepth(state.depth);\n const sections: SetupProgressSection[] = activeSections.map((id) => ({\n id,\n label: SECTION_LABELS[id],\n status: sectionStatus(state, id)\n }));\n\n const doneCount = sections.filter((s) => s.status === \"done\").length;\n const percent = sections.length === 0 ? 0 : Math.round((doneCount / sections.length) * 100);\n\n let recommendedNext: WizardSectionId | null = null;\n for (const section of activeSections) {\n if (!state.completedSections.includes(section) && !state.skippedSections.includes(section)) {\n recommendedNext = section;\n break;\n }\n }\n\n return {\n percent,\n depth: state.depth,\n quickComplete: isQuickComplete(state, openContextQuestions),\n sections,\n recommendedNext,\n openContextQuestions\n };\n}\n\nexport function markSectionComplete(cwd: string, section: WizardSectionId): OnboardingStateContractValue {\n const state = loadOnboardingState(cwd);\n const completedSections = [...new Set([...state.completedSections, section])];\n return saveOnboardingState(cwd, { completedSections });\n}\n\nexport function markQuickPathComplete(cwd: string): OnboardingStateContractValue {\n const state = loadOnboardingState(cwd);\n return saveOnboardingState(cwd, {\n completedSections: [...new Set([...state.completedSections, ...QUICK_SECTIONS, \"complete\"])],\n completedAt: nowIso(),\n currentSection: \"complete\"\n });\n}\n\nexport function onboardingStateExists(cwd: string): boolean {\n return existsSync(join(cwd, ONBOARDING_STATE_JSON));\n}\n\nexport function depthIncludesStandard(depth: WizardDepth): boolean {\n return depth === \"standard\" || depth === \"complete\";\n}\n\nexport function depthIncludesComplete(depth: WizardDepth): boolean {\n return depth === \"complete\";\n}\n\nexport { QUICK_SECTIONS, STANDARD_SECTIONS, COMPLETE_SECTIONS };\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 {\n CONTEXT_JSON,\n CONTEXT_MD,\n ensureStudioDirs,\n listMarkdown,\n nowIso,\n readJsonFile,\n redactSensitive,\n unique,\n writeJsonFile,\n writeTextFile\n} from \"./shared.js\";\n\nexport interface ContextCommandResult {\n contextPath: string;\n markdownPath: string;\n openQuestions: string[];\n}\n\nfunction readPackageJson(\n cwd: string\n): { 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(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 withOpenQuestions = { ...context, openQuestions: inferOpenQuestions(context) };\n const parsed = ProjectContextContract.parse(withOpenQuestions);\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","export type WizardDepth = \"quick\" | \"standard\" | \"complete\" | \"undecided\";\n\nexport type WizardSectionId =\n \"home\" | \"team\" | \"product\" | \"access\" | \"ui\" | \"messaging\" | \"review\" | \"complete\" | \"ide\" | \"visualQa\" | \"designDoc\" | \"messagingDoc\" | \"applyDrafts\";\n\nexport interface WizardStepDef {\n id: string;\n section: WizardSectionId;\n title: string;\n why: string;\n fields: string[];\n depth: WizardDepth[];\n optional?: boolean;\n agentId?: string;\n agentName?: string;\n roleSummary?: string;\n}\n\nexport const WIZARD_VERSION = \"1.0.0\";\n\nexport const SECTION_LABELS: Record<WizardSectionId, string> = {\n home: \"Home\",\n team: \"Agent team\",\n product: \"Product\",\n access: \"Access\",\n ui: \"UI\",\n messaging: \"Messaging\",\n review: \"Review\",\n complete: \"Done\",\n ide: \"Your IDE\",\n visualQa: \"Visual QA\",\n designDoc: \"Design intake\",\n messagingDoc: \"Copy intake\",\n applyDrafts: \"Apply drafts\"\n};\n\nexport const QUICK_SECTIONS: WizardSectionId[] = [\"ide\", \"team\", \"product\", \"access\", \"ui\", \"messaging\", \"review\"];\n\nexport const STANDARD_SECTIONS: WizardSectionId[] = [...QUICK_SECTIONS, \"visualQa\"];\n\nexport const COMPLETE_SECTIONS: WizardSectionId[] = [...STANDARD_SECTIONS, \"designDoc\", \"messagingDoc\", \"applyDrafts\"];\n\nexport const WIZARD_STEPS: WizardStepDef[] = [\n {\n id: \"ide-surface\",\n section: \"ide\",\n title: \"Which AI coding tool do you use?\",\n why: \"We wire project instructions to the path your IDE actually loads — Cursor rules, Copilot instructions, Claude agents, or AGENTS.md.\",\n fields: [\"ideSurface\"],\n depth: [\"quick\", \"standard\", \"complete\", \"undecided\"]\n },\n {\n id: \"product-summary\",\n section: \"product\",\n title: \"What does this product do?\",\n why: \"Agents need a concrete summary before they guess from folder names.\",\n fields: [\"productSummary\"],\n depth: [\"quick\", \"standard\", \"complete\", \"undecided\"]\n },\n {\n id: \"product-audience\",\n section: \"product\",\n title: \"Who is the primary user or buyer?\",\n why: \"Audience shapes UX, copy tone, and which workflows matter most.\",\n fields: [\"productCategory\", \"primaryAudience\"],\n depth: [\"quick\", \"standard\", \"complete\", \"undecided\"]\n },\n {\n id: \"product-workflows\",\n section: \"product\",\n title: \"What are the top workflows?\",\n why: \"Naming real workflows stops agents from inventing generic SaaS screens.\",\n fields: [\"primaryWorkflows\"],\n depth: [\"quick\", \"standard\", \"complete\", \"undecided\"]\n },\n {\n id: \"access-tenant\",\n section: \"access\",\n title: \"Who uses the system?\",\n why: \"Single-user, team, and tenant models need different auth and data boundaries.\",\n fields: [\"tenantModel\", \"owner\"],\n depth: [\"quick\", \"standard\", \"complete\", \"undecided\"]\n },\n {\n id: \"access-auth\",\n section: \"access\",\n title: \"What authentication model must agents preserve?\",\n why: \"Auth regressions are common when agents refactor routes or Supabase clients.\",\n fields: [\"authModel\"],\n depth: [\"quick\", \"standard\", \"complete\", \"undecided\"]\n },\n {\n id: \"ui-preferred\",\n section: \"ui\",\n title: \"How should the UI feel?\",\n why: \"Explicit direction reduces generic AI dashboard layouts.\",\n fields: [\"uiPreferred\"],\n depth: [\"quick\", \"standard\", \"complete\", \"undecided\"]\n },\n {\n id: \"ui-avoid\",\n section: \"ui\",\n title: \"What should the UI avoid?\",\n why: \"Anti-patterns are as important as positive direction for frontend agents.\",\n fields: [\"uiAvoid\"],\n depth: [\"quick\", \"standard\", \"complete\", \"undecided\"],\n optional: true\n },\n {\n id: \"messaging-value\",\n section: \"messaging\",\n title: \"What is the value proposition?\",\n why: \"Public copy agents need a stated outcome, not invented marketing fluff.\",\n fields: [\"valueProposition\"],\n depth: [\"quick\", \"standard\", \"complete\", \"undecided\"]\n },\n {\n id: \"messaging-proof\",\n section: \"messaging\",\n title: \"What proof supports your claims?\",\n why: \"Claims without proof should stay marked provisional in MESSAGING.md.\",\n fields: [\"proof\", \"objections\"],\n depth: [\"quick\", \"standard\", \"complete\", \"undecided\"],\n optional: true\n },\n {\n id: \"messaging-quality\",\n section: \"messaging\",\n title: \"What quality target fits this project now?\",\n why: \"Sets audit expectations: baseline setup vs aiming for a fully clean audit.\",\n fields: [\"qualityTarget\"],\n depth: [\"quick\", \"standard\", \"complete\", \"undecided\"]\n },\n {\n id: \"visual-qa-tier\",\n section: \"visualQa\",\n title: \"Which visual QA tier fits this project?\",\n why: \"TESTING.md should name the smallest reliable visual evidence for UI changes.\",\n fields: [\"visualQaTier\"],\n depth: [\"standard\", \"complete\"],\n optional: true\n },\n {\n id: \"design-intake\",\n section: \"designDoc\",\n title: \"Design direction intake\",\n why: \"DESIGN.md needs audience, content inventory, and anti-references before UI work.\",\n fields: [\"designAudience\", \"designContent\", \"designAntiReferences\"],\n depth: [\"complete\"],\n optional: true\n },\n {\n id: \"messaging-intake\",\n section: \"messagingDoc\",\n title: \"Messaging discovery intake\",\n why: \"MESSAGING.md needs audience pain, outcome, and objections in customer language.\",\n fields: [\"msgAudience\", \"msgPain\", \"msgOutcome\"],\n depth: [\"complete\"],\n optional: true\n },\n {\n id: \"apply-drafts\",\n section: \"applyDrafts\",\n title: \"Review and apply doc drafts\",\n why: \"Preview generated snippets before they update DESIGN.md or MESSAGING.md.\",\n fields: [],\n depth: [\"complete\"],\n optional: true\n }\n];\n\nexport function sectionsForDepth(depth: WizardDepth): WizardSectionId[] {\n if (depth === \"complete\") return COMPLETE_SECTIONS;\n if (depth === \"standard\") return STANDARD_SECTIONS;\n return QUICK_SECTIONS;\n}\n\nexport function stepsForDepth(depth: WizardDepth): WizardStepDef[] {\n return WIZARD_STEPS.filter((step) => step.depth.includes(depth));\n}\n","import { existsSync, readFileSync } from \"node:fs\";\nimport { join } from \"node:path\";\nimport {\n CI_TEMPLATE_FILES,\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 { initProjectContext } from \"../studio/context.js\";\nimport { copyDirectory, copyTextWithConflict, ensureDir, sha256, writeText } from \"../utils/fs.js\";\nimport { findPackageRoot } from \"../utils/package-root.js\";\nimport { activateIdeTargets, parseActivateTargets, type ActivateIdeResult, type IdeTarget } from \"./ide-activate.js\";\n\nexport interface InitOptions {\n cwd: string;\n stack?: StackProfile;\n force?: boolean;\n activate?: string[];\n}\n\nexport interface InitResult {\n copied: string[];\n unchanged: string[];\n conflicts: string[];\n overwritten: string[];\n manifestPath: string;\n contextPath?: string;\n activation?: ActivateIdeResult;\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 for (const template of CI_TEMPLATE_FILES) {\n const ciCopy = copyTextWithConflict(join(packageRoot, template.source), cwd, template.target, {\n force: Boolean(options.force),\n conflictRoot: join(cwd, \".agent-kit\", \"conflicts\")\n });\n if (ciCopy.action === \"created\") result.copied.push(ciCopy.target);\n if (ciCopy.action === \"unchanged\") result.unchanged.push(ciCopy.target);\n if (ciCopy.action === \"overwritten\") result.overwritten.push(ciCopy.target);\n if (ciCopy.action === \"conflict\") result.conflicts.push(`${ciCopy.target} -> ${ciCopy.conflictPath}`);\n }\n\n const context = initProjectContext(cwd);\n result.contextPath = context.contextPath;\n\n const activateTargets = parseActivateTargets(options.activate);\n if (activateTargets.length > 0) {\n result.activation = activateIdeTargets({\n cwd,\n targets: activateTargets,\n force: Boolean(options.force)\n });\n result.copied.push(...result.activation.copied.filter((path) => !result.copied.includes(path)));\n result.unchanged.push(...result.activation.unchanged.filter((path) => !result.unchanged.includes(path)));\n result.conflicts.push(...result.activation.conflicts.filter((path) => !result.conflicts.includes(path)));\n result.overwritten.push(...result.activation.overwritten.filter((path) => !result.overwritten.includes(path)));\n }\n\n return result;\n}\n\nexport { type IdeTarget };\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 ANTIGRAVITY_COMMANDS_SOURCE_DIR,\n ANTIGRAVITY_COMMANDS_TARGET_DIR,\n ANTIGRAVITY_PLUGIN_FILES,\n ANTIGRAVITY_RUNTIME_SKILLS_TARGET_DIR,\n CLAUDE_TEMPLATE,\n CODEX_CONFIG_SOURCE,\n COPILOT_INSTRUCTION_FILES,\n CURSOR_ADAPTER_FILES,\n CURSOR_SCOPED_ADAPTER_FILES,\n RUNTIME_SKILLS_SOURCE_DIR\n} from \"../config/defaults.js\";\nimport { copyTextWithConflict, ensureDir, listFilesRecursive, writeText } from \"../utils/fs.js\";\nimport { findPackageRoot } from \"../utils/package-root.js\";\nimport { generateCodexCustomAgents, generateCursorSkillsFromKit, generateCursorSubagents, generateMarkdownSubagents } from \"./roster-adapters.js\";\n\nexport type IdeTarget = \"cursor\" | \"claude\" | \"codex\" | \"copilot\" | \"antigravity\";\n\nexport interface ActivateIdeOptions {\n cwd: string;\n targets: Array<IdeTarget | \"all\">;\n force?: boolean;\n}\n\nexport interface ActivateIdeResult {\n activated: IdeTarget[];\n copied: string[];\n unchanged: string[];\n conflicts: string[];\n overwritten: string[];\n}\n\nfunction normalizeTargets(targets: string[]): IdeTarget[] {\n const allowed = new Set<IdeTarget>([\"cursor\", \"claude\", \"codex\", \"copilot\", \"antigravity\"]);\n const normalized = new Set<IdeTarget>();\n for (const target of targets) {\n const value = target.trim().toLowerCase();\n if (value === \"all\") {\n for (const item of allowed) normalized.add(item);\n continue;\n }\n if (allowed.has(value as IdeTarget)) normalized.add(value as IdeTarget);\n }\n return [...normalized];\n}\n\nfunction copyAdapterFile(cwd: string, packageRoot: string, source: string, target: string, force: boolean, result: ActivateIdeResult): void {\n const copyResult = copyTextWithConflict(join(packageRoot, source), cwd, target, {\n force,\n conflictRoot: join(cwd, \".agent-kit\", \"conflicts\")\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\nfunction generateClaudeSubagents(cwd: string, packageRoot: string, force: boolean, result: ActivateIdeResult): void {\n generateMarkdownSubagents(cwd, \".claude/agents\", { proactive: false, force, result });\n copyAdapterFile(cwd, packageRoot, CLAUDE_TEMPLATE, \"CLAUDE.md\", force, result);\n}\n\nfunction copyDirectoryAsConflicts(cwd: string, packageRoot: string, sourceDir: string, targetDir: string, force: boolean, result: ActivateIdeResult): void {\n for (const file of listFilesRecursive(join(packageRoot, sourceDir))) {\n copyAdapterFile(cwd, packageRoot, join(sourceDir, file), join(targetDir, file).replace(/\\\\/g, \"/\"), force, result);\n }\n}\n\nfunction installAntigravityAdapter(cwd: string, packageRoot: string, force: boolean, result: ActivateIdeResult): void {\n ensureDir(join(cwd, \".antigravity\", \"agent-kit\", \"commands\"));\n ensureDir(join(cwd, \".antigravity\", \"runtime-skills\"));\n\n for (const file of ANTIGRAVITY_PLUGIN_FILES) {\n copyAdapterFile(cwd, packageRoot, file.source, file.target, force, result);\n }\n\n copyDirectoryAsConflicts(cwd, packageRoot, ANTIGRAVITY_COMMANDS_SOURCE_DIR, ANTIGRAVITY_COMMANDS_TARGET_DIR, force, result);\n copyDirectoryAsConflicts(cwd, packageRoot, RUNTIME_SKILLS_SOURCE_DIR, ANTIGRAVITY_RUNTIME_SKILLS_TARGET_DIR, force, result);\n}\n\nfunction updateAssistantAdaptersTable(cwd: string, activated: Set<IdeTarget>): void {\n const path = join(cwd, \"ASSISTANT_ADAPTERS.md\");\n if (!existsSync(path)) return;\n let content = readFileSync(path, \"utf8\");\n const today = new Date().toISOString().slice(0, 10);\n\n if (activated.has(\"cursor\") && content.includes(\"| Cursor |\")) {\n content = content.replace(\n /\\| Cursor \\|[^|]*\\|[^|]*\\|[^|]*\\|[^|]*\\|[^|]*\\|[^|]*\\|/,\n `| Cursor | \\`.cursor/rules/*.mdc\\`, \\`.cursor/agents/*.md\\`, \\`.cursor/skills/*/SKILL.md\\` | Active | Partial | Partial | \\`agent-kit init --activate cursor\\` on ${today}; verify subagents in Cursor. | Delegate to council subagents instead of role-playing; run \\`agent-kit adapter validate cursor\\`. |`\n );\n }\n\n if (activated.has(\"copilot\") && content.includes(\"| GitHub Copilot\")) {\n content = content.replace(\n /\\| GitHub Copilot[^|]*\\|[^|]*\\|[^|]*\\|[^|]*\\|[^|]*\\|[^|]*\\|[^|]*\\|/,\n `| GitHub Copilot / VS Code | \\`.github/copilot-instructions.md\\` and \\`.github/instructions/next-supabase.instructions.md\\` | Active | Advisory | Advisory | \\`agent-kit init --activate copilot\\` on ${today}. | Copilot loads repository and path-specific instructions automatically in VS Code. |`\n );\n }\n\n if (activated.has(\"claude\") && content.includes(\"| Claude Code |\")) {\n content = content.replace(\n /\\| Claude Code \\|[^|]*\\|[^|]*\\|[^|]*\\|[^|]*\\|[^|]*\\|[^|]*\\|/,\n `| Claude Code | \\`.claude/agents/*.md\\` and \\`CLAUDE.md\\` | Active | Partial | Partial | \\`agent-kit init --activate claude\\` generated subagents on ${today}. | Subagents generated from \\`.agent-kit/agent-roster.json\\`; verify in Claude Code project settings. |`\n );\n }\n\n if (activated.has(\"codex\") && content.includes(\"| Codex / AGENTS.md-compatible tools |\")) {\n content = content.replace(\n /\\| Codex \\/ AGENTS\\.md-compatible tools \\|[^|]*\\|[^|]*\\|[^|]*\\|[^|]*\\|[^|]*\\|[^|]*\\|/,\n `| Codex / AGENTS.md-compatible tools | \\`AGENTS.md\\`, \\`.codex/config.toml\\`, \\`.codex/agents/*.toml\\` | Active | Partial | Partial | \\`agent-kit init --activate codex\\` on ${today}. | Spawn council custom agents from \\`.codex/agents/\\`; run \\`agent-kit adapter validate codex\\`. |`\n );\n }\n\n if (activated.has(\"antigravity\") && content.includes(\"| Antigravity |\")) {\n content = content.replace(\n /\\| Antigravity \\|[^|]*\\|[^|]*\\|[^|]*\\|[^|]*\\|[^|]*\\|[^|]*\\|/,\n `| Antigravity | \\`.antigravity/agent-kit/plugin.json\\`, \\`.antigravity/agent-kit/commands/*.toml\\`, \\`.antigravity/runtime-skills/*/SKILL.md\\` | Active | Advisory | Advisory | \\`agent-kit init --activate antigravity\\` on ${today}; run \\`agent-kit adapter validate antigravity\\`. | Native commands wrap the Agent Kit council/session contract; runtime validation is structural unless \\`agy\\` is installed. |`\n );\n }\n\n writeText(path, content);\n}\n\nexport function parseActivateTargets(raw: string[] | undefined): IdeTarget[] {\n if (!raw || raw.length === 0) return [];\n return normalizeTargets(raw.flatMap((value) => value.split(\",\")));\n}\n\nexport function activateIdeTargets(options: ActivateIdeOptions): ActivateIdeResult {\n const cwd = options.cwd;\n const packageRoot = findPackageRoot();\n const targets = normalizeTargets(options.targets);\n const force = Boolean(options.force);\n const result: ActivateIdeResult = {\n activated: targets,\n copied: [],\n unchanged: [],\n conflicts: [],\n overwritten: []\n };\n\n if (targets.length === 0) return result;\n\n const activated = new Set<IdeTarget>(targets);\n\n if (activated.has(\"cursor\")) {\n for (const adapter of CURSOR_ADAPTER_FILES) {\n copyAdapterFile(cwd, packageRoot, adapter.source, adapter.target, force, result);\n }\n for (const adapter of CURSOR_SCOPED_ADAPTER_FILES) {\n copyAdapterFile(cwd, packageRoot, adapter.source, adapter.target, force, result);\n }\n generateCursorSubagents(cwd, force, result);\n generateCursorSkillsFromKit(cwd, force, result);\n }\n\n if (activated.has(\"copilot\")) {\n ensureDir(join(cwd, \".github\", \"instructions\"));\n for (const file of COPILOT_INSTRUCTION_FILES) {\n copyAdapterFile(cwd, packageRoot, file.source, file.target, force, result);\n }\n }\n\n if (activated.has(\"claude\")) {\n generateClaudeSubagents(cwd, packageRoot, force, result);\n }\n\n if (activated.has(\"codex\")) {\n ensureDir(join(cwd, \".codex\"));\n copyAdapterFile(cwd, packageRoot, CODEX_CONFIG_SOURCE, \".codex/config.toml\", force, result);\n generateCodexCustomAgents(cwd, force, result);\n }\n\n if (activated.has(\"antigravity\")) {\n installAntigravityAdapter(cwd, packageRoot, force, result);\n }\n\n updateAssistantAdaptersTable(cwd, activated);\n\n return result;\n}\n\nexport function ideSurfaceToActivateTarget(ideSurface: string): IdeTarget | null {\n const value = ideSurface.trim().toLowerCase();\n if (value === \"cursor\" || value === \"claude\" || value === \"codex\" || value === \"copilot\") {\n return value;\n }\n return null;\n}\n","import { existsSync, readFileSync, readdirSync } from \"node:fs\";\nimport { join } from \"node:path\";\nimport { ensureDir, writeText } from \"../utils/fs.js\";\nimport { loadProjectRosterAgents, type RosterAgent } from \"../studio/wizard/roster.js\";\nimport type { ActivateIdeResult } from \"./ide-activate.js\";\n\nexport const CANONICAL_READ_LIST =\n \"`AGENTS.md`, `AGENT_ROSTER.md`, `.agent-kit/agent-roster.json`, `MODEL_ROUTING.md`, `.agent-kit/model-routing.json`, `.agent-kit/project-context.json`, `.agent-kit/project-context.md`, `.agent-kit/agent-briefs.md` when present, `.agent-kit/corrections/project-rules.json`, `.agent-kit/corrections/agent-rules.json`, `COUNCIL.md`, `.agent-kit/council-sessions/`, and `QUALITY_GATES.md`\";\n\ntype ReasoningEffort = \"low\" | \"medium\" | \"high\";\n\n/** Quote a value for YAML frontmatter scalar fields. */\nexport function quoteYamlScalar(value: string): string {\n return JSON.stringify(value);\n}\n\nfunction buildAgentHint(agentId: string, name: string): string {\n if (agentId === \"planner\") return \"Start with the Planner workflow.\";\n if (agentId === \"lead-architect\") return \"Convene council for core changes before implementation.\";\n if (agentId === \"frontend-design-lead\") {\n return \"Require brand/content intake, creative-direction rationale, and visual QA evidence for UI changes.\";\n }\n if (agentId === \"security-reviewer\") {\n return \"Review auth, RLS, data mutation, dependency, external-call, secret, and release-risk changes.\";\n }\n return `Use for ${name.toLowerCase()} work defined in the roster.`;\n}\n\nfunction buildProactiveSuffix(agentId: string): string {\n const suffixes: Record<string, string> = {\n planner: \"Use proactively for planning, scope breakdown, ambiguous requests, and workflow routing.\",\n \"lead-architect\": \"Use proactively for core changes, architecture, and cross-layer decisions.\",\n \"security-reviewer\": \"Use proactively for auth, RLS, API, Server Action, data mutation, dependency, secret, and release-risk changes.\",\n \"frontend-design-lead\": \"Use proactively for UI, design system, accessibility, and visual QA work.\",\n \"qa-engineer\": \"Use proactively after behavior changes to add or verify tests and acceptance evidence.\",\n \"supabase-postgres-engineer\": \"Use proactively for schema, migrations, RLS, auth, and SQL changes.\",\n \"nextjs-engineer\": \"Use proactively for App Router, Server Components, route handlers, and UI state work.\",\n \"marketing-copy-lead\": \"Use proactively for public-facing copy, positioning, and conversion surfaces.\",\n \"docs-maintainer\": \"Use proactively after significant changes to update living documentation.\",\n \"deployment-observability-engineer\": \"Use proactively for release, env var, migration order, monitoring, and rollback work.\"\n };\n return suffixes[agentId] ?? \"\";\n}\n\nexport function buildSubagentDescription(agent: RosterAgent, proactive: boolean): string {\n const base = agent.roleSummary.length > 140 ? `${agent.roleSummary.slice(0, 137)}...` : agent.roleSummary;\n if (!proactive) return base;\n const suffix = buildProactiveSuffix(agent.id);\n return suffix ? `${base} ${suffix}` : base;\n}\n\nexport function buildSubagentMarkdown(agent: RosterAgent, options: { proactive?: boolean } = {}): string {\n const description = buildSubagentDescription(agent, Boolean(options.proactive));\n const agentFile = agent.file ?? `.agent-kit/agents/${agent.id}.md`;\n const hint = buildAgentHint(agent.id, agent.name);\n\n return `---\nname: ${quoteYamlScalar(agent.id)}\ndescription: ${quoteYamlScalar(description)}\n---\n\nRead ${CANONICAL_READ_LIST} before making routing or implementation decisions.\n\nAlso read \\`${agentFile}\\` for this role's detailed contract.\n\n${hint}\n\nFor council work, delegate to this subagent instead of role-playing the council in the main thread.\n\nRecord meaningful decisions, risks, handoffs, human corrections, artifacts, evidence, and verification through \\`agent-kit session checkpoint\\` or individual \\`agent-kit session ...\\` commands when available.\n`;\n}\n\nfunction writeGeneratedAgentFile(cwd: string, relativePath: string, content: string, force: boolean, result: ActivateIdeResult): void {\n const targetPath = join(cwd, relativePath);\n if (!force && existsSync(targetPath)) {\n const existing = readFileSync(targetPath, \"utf8\");\n if (existing === content) {\n result.unchanged.push(relativePath);\n return;\n }\n const conflictPath = join(cwd, \".agent-kit\", \"conflicts\", relativePath.replace(/\\//g, \"__\"));\n ensureDir(join(cwd, \".agent-kit\", \"conflicts\"));\n writeText(conflictPath, existing);\n result.conflicts.push(`${relativePath} -> ${conflictPath}`);\n return;\n }\n ensureDir(join(cwd, relativePath.split(\"/\").slice(0, -1).join(\"/\")));\n writeText(targetPath, content);\n result.copied.push(relativePath);\n}\n\nexport function generateMarkdownSubagents(cwd: string, agentsDir: string, options: { proactive?: boolean; force: boolean; result: ActivateIdeResult }): void {\n ensureDir(join(cwd, agentsDir));\n for (const agent of loadProjectRosterAgents(cwd)) {\n const relativePath = `${agentsDir}/${agent.id}.md`;\n writeGeneratedAgentFile(cwd, relativePath, buildSubagentMarkdown(agent, options), options.force, options.result);\n }\n}\n\nconst CURSOR_AGENTS_README = `# Cursor council subagents\n\nProject subagents generated from \\`.agent-kit/agent-roster.json\\`. Use them for isolated specialist context instead of role-playing the whole council in one chat.\n\n## Delegation\n\n| Risk / work type | Subagent |\n| --- | --- |\n| Planning / scope | \\`@planner\\` |\n| Core architecture | \\`@lead-architect\\` |\n| Auth / RLS / secrets | \\`@security-reviewer\\` or Task \\`security-review\\` |\n| Frontend UI | \\`@frontend-design-lead\\` |\n| QA / tests | \\`@qa-engineer\\` |\n\nRecord handoffs with \\`agent-kit session checkpoint --file <json>\\` when the CLI is available.\n\nRegenerate with \\`agent-kit init --activate cursor\\` after roster changes.\n`;\n\nexport function generateCursorSubagents(cwd: string, force: boolean, result: ActivateIdeResult): void {\n generateMarkdownSubagents(cwd, \".cursor/agents\", { proactive: true, force, result });\n writeGeneratedAgentFile(cwd, \".cursor/agents/README.md\", CURSOR_AGENTS_README, force, result);\n}\n\nexport function loadAgentReasoningEffortMap(cwd: string): Map<string, ReasoningEffort> {\n const path = join(cwd, \".agent-kit/model-routing.json\");\n const map = new Map<string, ReasoningEffort>();\n if (!existsSync(path)) return map;\n\n try {\n const parsed = JSON.parse(readFileSync(path, \"utf8\")) as {\n agentRoutes?: Array<{ agentId?: string; defaultEffort?: string; profileId?: string }>;\n profiles?: Array<{ id?: string; reasoningEffort?: string }>;\n };\n const profileEffort = new Map<string, ReasoningEffort>();\n for (const profile of parsed.profiles ?? []) {\n if (profile.id && profile.reasoningEffort) {\n const effort = profile.reasoningEffort as ReasoningEffort;\n if (effort === \"low\" || effort === \"medium\" || effort === \"high\") {\n profileEffort.set(profile.id, effort);\n }\n }\n }\n for (const binding of parsed.agentRoutes ?? []) {\n if (!binding.agentId) continue;\n const direct = binding.defaultEffort as ReasoningEffort | undefined;\n if (direct === \"low\" || direct === \"medium\" || direct === \"high\") {\n map.set(binding.agentId, direct);\n continue;\n }\n if (binding.profileId && profileEffort.has(binding.profileId)) {\n map.set(binding.agentId, profileEffort.get(binding.profileId)!);\n }\n }\n } catch {\n return map;\n }\n return map;\n}\n\nfunction escapeTomlString(value: string): string {\n return value.replace(/\\\\/g, \"\\\\\\\\\").replace(/\"/g, '\\\\\"');\n}\n\nexport function buildCodexAgentToml(agent: RosterAgent, effort: ReasoningEffort): string {\n const description = buildSubagentDescription(agent, true);\n const agentFile = agent.file ?? `.agent-kit/agents/${agent.id}.md`;\n const hint = buildAgentHint(agent.id, agent.name);\n const instructions = [\n `Read AGENTS.md, AGENT_ROSTER.md, .agent-kit/agent-roster.json, MODEL_ROUTING.md,`,\n `.agent-kit/model-routing.json, project context, corrections, COUNCIL.md, QUALITY_GATES.md,`,\n `and ${agentFile} before reviewing or implementing.`,\n \"\",\n hint,\n \"\",\n \"Record meaningful decisions, risks, handoffs, and verification through agent-kit session checkpoint when available.\"\n ].join(\"\\n\");\n\n return `name = \"${agent.id}\"\ndescription = \"${escapeTomlString(description)}\"\n# model = \"gpt-5.5\" # verify in your Codex environment; see MODEL_ROUTING.md\nmodel_reasoning_effort = \"${effort}\"\n\ndeveloper_instructions = \"\"\"\n${instructions}\n\"\"\"\n`;\n}\n\nexport function generateCodexCustomAgents(cwd: string, force: boolean, result: ActivateIdeResult): void {\n ensureDir(join(cwd, \".codex/agents\"));\n const effortMap = loadAgentReasoningEffortMap(cwd);\n for (const agent of loadProjectRosterAgents(cwd)) {\n const effort = effortMap.get(agent.id) ?? \"medium\";\n const relativePath = `.codex/agents/${agent.id}.toml`;\n writeGeneratedAgentFile(cwd, relativePath, buildCodexAgentToml(agent, effort), force, result);\n }\n}\n\nfunction skillDescriptionFromMarkdown(text: string, skillId: string): string {\n const useWhen = text.match(/## Use When\\s*\\n+\\s*([^\\n#]+)/);\n if (useWhen?.[1]) return useWhen[1].trim().slice(0, 200);\n const firstHeading = text.match(/^#\\s+(.+)/m);\n if (firstHeading?.[1]) return `${firstHeading[1].trim()} — Agent Kit council skill.`;\n return `Agent Kit skill for ${skillId.replace(/-/g, \" \")}.`;\n}\n\nfunction kitSkillToCursorSkill(skillId: string, kitMarkdown: string): string {\n const description = skillDescriptionFromMarkdown(kitMarkdown, skillId);\n const body = kitMarkdown.replace(/^#\\s+.+\\n+/, \"\").trimStart();\n return `---\nname: ${quoteYamlScalar(skillId)}\ndescription: ${quoteYamlScalar(description)}\n---\n\n${body.trim()}\n`;\n}\n\nexport function generateCursorSkillsFromKit(cwd: string, force: boolean, result: ActivateIdeResult): void {\n const skillsRoot = join(cwd, \".agent-kit/skills\");\n if (!existsSync(skillsRoot)) return;\n\n for (const file of readdirSync(skillsRoot).filter((name) => name.endsWith(\".md\"))) {\n const skillId = file.replace(/\\.md$/, \"\");\n const kitMarkdown = readFileSync(join(skillsRoot, file), \"utf8\");\n const relativePath = `.cursor/skills/${skillId}/SKILL.md`;\n writeGeneratedAgentFile(cwd, relativePath, kitSkillToCursorSkill(skillId, kitMarkdown), force, result);\n }\n}\n\nexport { assistantAdapterRowIsActive } from \"./assistant-adapters-table.js\";\n","import { existsSync, readFileSync } from \"node:fs\";\nimport { join } from \"node:path\";\nimport { readJsonFile } from \"../shared.js\";\nimport type { WizardDepth } from \"./steps.js\";\n\nexport interface RosterAgent {\n id: string;\n name: string;\n roleSummary: string;\n file?: string;\n}\n\nexport interface AgentWizardStep {\n id: string;\n section: \"team\";\n title: string;\n why: string;\n fields: string[];\n agentId: string;\n agentName: string;\n roleSummary: string;\n depth: WizardDepth[];\n optional: true;\n}\n\nconst AGENT_ROSTER_JSON = \".agent-kit/agent-roster.json\";\n\nconst FALLBACK_SUMMARIES: Record<string, string> = {\n planner: \"Owns planning, scope breakdown, sequencing, and council routing before implementation starts.\",\n \"lead-architect\": \"Owns architecture, affected-layer mapping, tradeoffs, and final delivery direction.\",\n \"supabase-postgres-engineer\": \"Owns Supabase Auth, SSR clients, schema, migrations, RLS, Storage policies, SQL functions, and indexes.\",\n \"nextjs-engineer\": \"Owns App Router implementation, rendering boundaries, data loading, forms, and UI state.\",\n \"frontend-design-lead\":\n \"Prevents generic AI-looking UI by owning content-first creative direction, design-system quality, visual QA, accessibility, and screenshot acceptance.\",\n \"marketing-copy-lead\": \"Owns positioning, value proposition, conversion copy, product voice, and UX copy for public-facing surfaces.\",\n \"security-reviewer\": \"Reviews implementation against OWASP Top 10 and project-specific auth/data boundaries.\",\n \"qa-engineer\": \"Owns tests, regression coverage, smoke checks, and acceptance evidence.\",\n \"docs-maintainer\": \"Keeps living docs accurate enough for another engineer or agent to continue safely.\",\n \"deployment-observability-engineer\": \"Owns release safety, environment configuration, migrations, logs, monitoring, and rollback.\",\n \"research-analyst\": \"Owns open-source repo research and conversion of evidence into reusable kit improvements.\"\n};\n\nfunction readPurposeFromAgentFile(cwd: string, relPath: string | undefined): string | null {\n if (!relPath) return null;\n const path = join(cwd, relPath);\n if (!existsSync(path)) return null;\n const text = readFileSync(path, \"utf8\");\n const match = text.match(/## Purpose\\s*\\n+\\s*([^\\n#]+)/);\n return match?.[1]?.trim() ?? null;\n}\n\nexport function loadProjectRosterAgents(cwd: string): RosterAgent[] {\n const roster = readJsonFile<{ agents?: Array<{ id: string; name?: string; file?: string }> }>(cwd, AGENT_ROSTER_JSON);\n const agents = roster?.agents ?? [];\n if (agents.length === 0) {\n return Object.entries(FALLBACK_SUMMARIES).map(([id, roleSummary]) => ({\n id,\n name: id\n .split(\"-\")\n .map((part) => part.charAt(0).toUpperCase() + part.slice(1))\n .join(\" \"),\n roleSummary\n }));\n }\n return agents.map((agent) => {\n const fromFile = readPurposeFromAgentFile(cwd, agent.file);\n return {\n id: agent.id,\n name: agent.name ?? agent.id,\n roleSummary: fromFile ?? FALLBACK_SUMMARIES[agent.id] ?? \"Specialist agent on your project council.\",\n ...(agent.file ? { file: agent.file } : {})\n };\n });\n}\n\nexport function buildAgentWizardSteps(cwd: string): AgentWizardStep[] {\n const agents = loadProjectRosterAgents(cwd);\n const depths: WizardDepth[] = [\"quick\", \"standard\", \"complete\", \"undecided\"];\n return [\n {\n id: \"team-intro\",\n section: \"team\",\n title: \"Meet your agent team\",\n why: \"These specialists already know their craft. Brief them like freelancers you just hired — what is unique about this project?\",\n fields: [],\n agentId: \"\",\n agentName: \"\",\n roleSummary: \"\",\n depth: depths,\n optional: true as const\n },\n ...agents.map((agent): AgentWizardStep => ({\n id: `brief-${agent.id}`,\n section: \"team\",\n title: `Brief ${agent.name}`,\n why: `${agent.roleSummary} What should they know about this project that is not obvious from the repo?`,\n fields: [`agentBrief_${agent.id}`],\n agentId: agent.id,\n agentName: agent.name,\n roleSummary: agent.roleSummary,\n depth: depths,\n optional: true\n }))\n ];\n}\n\nexport function agentBriefFieldName(agentId: string): string {\n return `agentBrief_${agentId}`;\n}\n\nexport function parseAgentBriefFieldName(field: string): string | null {\n if (!field.startsWith(\"agentBrief_\")) return null;\n return field.slice(\"agentBrief_\".length);\n}\n","/** Extract a markdown table row from ASSISTANT_ADAPTERS.md by tool label in the first column. */\nexport function extractAssistantAdapterRow(adaptersDoc: string, toolLabel: string): string | null {\n for (const line of adaptersDoc.split(\"\\n\")) {\n const trimmed = line.trim();\n if (!trimmed.startsWith(\"|\")) continue;\n const cells = trimmed\n .split(\"|\")\n .map((cell) => cell.trim())\n .filter((cell) => cell.length > 0);\n if (cells[0] === toolLabel) return trimmed;\n }\n return null;\n}\n\n/** True when the Instruction status column (3rd cell) is Active and not TBD. */\nexport function assistantAdapterRowIsActive(adaptersDoc: string, toolLabel: string): boolean {\n const row = extractAssistantAdapterRow(adaptersDoc, toolLabel);\n if (!row) return false;\n const cells = row\n .split(\"|\")\n .map((cell) => cell.trim())\n .filter((cell) => cell.length > 0);\n const instructionStatus = cells[2] ?? \"\";\n return /^Active/i.test(instructionStatus) && !/^TBD/i.test(instructionStatus);\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 { existsSync, readFileSync } from \"node:fs\";\nimport { join, relative } from \"node:path\";\nimport {\n CURSOR_ADAPTER_FILES,\n DEFAULT_AGENT_ROSTER_SOURCE,\n DEFAULT_AGENT_ROSTER_TARGET,\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 } from \"../config/types.js\";\nimport { copyDirectory, ensureDir, resolveInside, sha256, writeText } from \"../utils/fs.js\";\nimport { findPackageRoot } from \"../utils/package-root.js\";\nimport { initProject, readManifest } from \"./install.js\";\n\nexport type UpdateAction = \"created\" | \"updated\" | \"unchanged\" | \"kept-local\" | \"conflict\" | \"overwritten\";\n\nexport interface UpdateFileResult {\n target: string;\n action: UpdateAction;\n conflictPath?: string;\n reason: string;\n}\n\nexport interface UpdateResult {\n dryRun: boolean;\n files: UpdateFileResult[];\n libraryFoldersRefreshed: string[];\n manifestPath: string;\n summary: Record<UpdateAction, number>;\n}\n\nexport interface UpdateOptions {\n cwd: string;\n force?: boolean;\n dryRun?: boolean;\n}\n\ninterface PlanInput {\n target: string;\n sourcePath: string;\n installedHash: string | undefined;\n force: boolean;\n}\n\nfunction planFileUpdate(cwd: string, input: PlanInput): UpdateFileResult & { sourceContent: string } {\n const sourceContent = readFileSync(input.sourcePath, \"utf8\");\n const sourceHash = sha256(sourceContent);\n const targetPath = resolveInside(cwd, input.target);\n\n if (!existsSync(targetPath)) {\n return { target: input.target, action: \"created\", reason: \"File is missing locally.\", sourceContent };\n }\n\n const localHash = sha256(readFileSync(targetPath, \"utf8\"));\n\n if (localHash === sourceHash) {\n return { target: input.target, action: \"unchanged\", reason: \"File already matches the current template.\", sourceContent };\n }\n\n // Pristine install of an older template: safe to auto-update.\n if (input.installedHash && localHash === input.installedHash) {\n return { target: input.target, action: \"updated\", reason: \"File was unmodified since install; applied the newer template.\", sourceContent };\n }\n\n if (input.force) {\n return { target: input.target, action: \"overwritten\", reason: \"Local changes overwritten because --force was used.\", sourceContent };\n }\n\n // Locally modified. If the bundled template did not change, keep local edits silently.\n if (input.installedHash && input.installedHash === sourceHash) {\n return { target: input.target, action: \"kept-local\", reason: \"File is locally customized and the template has not changed.\", sourceContent };\n }\n\n return {\n target: input.target,\n action: \"conflict\",\n reason: \"File is locally customized and the bundled template changed; review the conflict copy.\",\n sourceContent\n };\n}\n\nfunction writeConflictCopy(cwd: string, target: string, content: string): string {\n const conflictRoot = join(cwd, \".agent-kit\", \"conflicts\");\n const safeName = `${Date.now()}-${target.replace(/[^a-zA-Z0-9_.-]/g, \"_\")}`;\n const conflictPath = join(conflictRoot, safeName);\n writeText(conflictPath, content);\n return relative(cwd, conflictPath).replace(/\\\\/g, \"/\");\n}\n\nexport function updateProject(options: UpdateOptions): UpdateResult {\n const cwd = options.cwd;\n const force = Boolean(options.force);\n const dryRun = Boolean(options.dryRun);\n const manifest = readManifest(cwd);\n\n if (!manifest) {\n // No previous install: update degrades to a fresh conflict-safe init.\n if (dryRun) {\n throw new Error(\"No .agent-kit/manifest.json found. Run agent-kit init first (or run update without --dry-run to install).\");\n }\n const initResult = initProject({ cwd, force });\n const files: UpdateFileResult[] = [\n ...initResult.copied.map((target): UpdateFileResult => ({ target, action: \"created\", reason: \"Installed by init fallback.\" })),\n ...initResult.unchanged.map((target): UpdateFileResult => ({ target, action: \"unchanged\", reason: \"Already matched the template.\" })),\n ...initResult.overwritten.map((target): UpdateFileResult => ({ target, action: \"overwritten\", reason: \"Overwritten by init --force fallback.\" })),\n ...initResult.conflicts.map((entry): UpdateFileResult => {\n const [target, conflictPath] = entry.split(\" -> \");\n return {\n target: target ?? entry,\n action: \"conflict\",\n reason: \"Local file differed from the template during init fallback.\",\n ...(conflictPath ? { conflictPath } : {})\n };\n })\n ];\n return {\n dryRun,\n files,\n libraryFoldersRefreshed: [...LIBRARY_FOLDERS],\n manifestPath: \".agent-kit/manifest.json\",\n summary: summarize(files)\n };\n }\n\n const packageRoot = findPackageRoot();\n const stack = manifest.stack ?? \"next-supabase\";\n const templateRoot = join(packageRoot, \"templates\", stack);\n if (!existsSync(templateRoot)) {\n throw new Error(`Unsupported stack profile in manifest: ${stack}`);\n }\n\n const files: UpdateFileResult[] = [];\n const templateHashes: Record<string, string> = {};\n\n const plans: Array<UpdateFileResult & { sourceContent: string }> = [];\n\n for (const doc of ROOT_DOCS) {\n const sourcePath = join(templateRoot, doc);\n templateHashes[doc] = sha256(readFileSync(sourcePath, \"utf8\"));\n plans.push(\n planFileUpdate(cwd, {\n target: doc,\n sourcePath,\n installedHash: manifest.templateHashes?.[doc],\n force\n })\n );\n }\n\n for (const adapter of CURSOR_ADAPTER_FILES) {\n plans.push(\n planFileUpdate(cwd, {\n target: adapter.target,\n sourcePath: join(packageRoot, adapter.source),\n installedHash: undefined,\n force\n })\n );\n }\n\n plans.push(\n planFileUpdate(cwd, {\n target: DEFAULT_AGENT_ROSTER_TARGET,\n sourcePath: join(packageRoot, DEFAULT_AGENT_ROSTER_SOURCE),\n installedHash: undefined,\n force\n }),\n planFileUpdate(cwd, {\n target: DEFAULT_MODEL_ROUTING_TARGET,\n sourcePath: join(packageRoot, DEFAULT_MODEL_ROUTING_SOURCE),\n installedHash: undefined,\n force\n })\n );\n\n for (const plan of plans) {\n const { sourceContent, ...fileResult } = plan;\n if (!dryRun) {\n if (plan.action === \"created\" || plan.action === \"updated\" || plan.action === \"overwritten\") {\n writeText(resolveInside(cwd, plan.target), sourceContent);\n } else if (plan.action === \"conflict\") {\n fileResult.conflictPath = writeConflictCopy(cwd, plan.target, sourceContent);\n }\n }\n files.push(fileResult);\n }\n\n if (!dryRun) {\n ensureDir(join(cwd, \".agent-kit\"));\n for (const folder of LIBRARY_FOLDERS) {\n copyDirectory(join(packageRoot, folder), join(cwd, \".agent-kit\", folder));\n }\n\n const updatedManifest: InstallManifest = {\n packageName: PACKAGE_NAME,\n packageVersion: PACKAGE_VERSION,\n stack,\n installedAt: manifest.installedAt,\n updatedAt: 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 writeText(join(cwd, \".agent-kit\", \"manifest.json\"), `${JSON.stringify(updatedManifest, null, 2)}\\n`);\n }\n\n return {\n dryRun,\n files,\n libraryFoldersRefreshed: [...LIBRARY_FOLDERS],\n manifestPath: \".agent-kit/manifest.json\",\n summary: summarize(files)\n };\n}\n\nfunction summarize(files: UpdateFileResult[]): Record<UpdateAction, number> {\n const summary: Record<UpdateAction, number> = {\n created: 0,\n updated: 0,\n unchanged: 0,\n \"kept-local\": 0,\n conflict: 0,\n overwritten: 0\n };\n for (const file of files) summary[file.action] += 1;\n return summary;\n}\n","import { Octokit } from \"@octokit/rest\";\nimport { 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 as unknown as Record<string, number>).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 as unknown as Record<string, number>).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\nconst VALID_CORRECTION_SCOPES = [\"session\", \"project\", \"agent\", \"upstream-proposal\"] as const;\n\nfunction parseCorrectionScope(scope: unknown): CorrectionRuleContractValue[\"scope\"] {\n if (typeof scope === \"string\" && (VALID_CORRECTION_SCOPES as readonly string[]).includes(scope)) {\n return scope as CorrectionRuleContractValue[\"scope\"];\n }\n throw new Error(`Invalid correction scope: expected one of ${VALID_CORRECTION_SCOPES.join(\", \")}`);\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 const scope = parseCorrectionScope(options.scope);\n ensureCorrectionFiles(cwd);\n const targetPath = fileForScope(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,\n status: 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, 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 recordSessionNote(cwd, getActiveSessionId(cwd), agentId, text);\n}\n\nexport function recordSessionNote(cwd: string, sessionId: string, agentId: string, text: string): SessionEventContractValue {\n return appendSessionEvent(cwd, sessionId, { 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;\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 {\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 projectName?: string;\n productSummary?: string;\n primaryAudience?: string;\n qualityTarget?: string;\n architecture?: { frameworks?: string[]; testTools?: string[]; hasSupabase?: boolean };\n openQuestions?: string[];\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(\n (rule) =>\n `<tr><td>${escapeHtml(rule.scope)}</td><td>${escapeHtml(rule.agentId ?? rule.appliesToAgents?.join(\", \") ?? \"all\")}</td><td>${escapeHtml(rule.text)}</td></tr>`\n )\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(\n ([agent, events]) =>\n `<details class=\"agent-stream\"><summary>${escapeHtml(agent)} (${events.length})</summary><div class=\"stream-body\">${renderEventList(events)}</div></details>`\n )\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\")\n 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\n ? cleaned.map((value) => `<span class=\"pill\">${escapeHtml(value)}</span>`).join(\"\")\n : `<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, \"&amp;\")\n .replace(/</g, \"&lt;\")\n .replace(/>/g, \"&gt;\")\n .replace(/\"/g, \"&quot;\")\n .replace(/'/g, \"&#39;\");\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).replace(/&/g, \"\\\\u0026\").replace(/</g, \"\\\\u003c\").replace(/>/g, \"\\\\u003e\");\n}\n","import { execFileSync } from \"node:child_process\";\n\nexport function openBrowser(url: string): void {\n const platform = process.platform;\n try {\n if (platform === \"darwin\") {\n execFileSync(\"open\", [url], { stdio: \"ignore\" });\n return;\n }\n if (platform === \"win32\") {\n execFileSync(\"cmd\", [\"/c\", \"start\", \"\", url], { stdio: \"ignore\" });\n return;\n }\n execFileSync(\"xdg-open\", [url], { stdio: \"ignore\" });\n } catch {\n console.log(`Open this URL in your browser: ${url}`);\n }\n}\n","import { createInterface } from \"node:readline\";\nimport type { InitResult } from \"../install/install.js\";\nimport { PACKAGE_NAME, PACKAGE_VERSION } from \"../config/defaults.js\";\n\nexport function formatInitSummary(result: InitResult): string {\n const lines = [\n `${PACKAGE_NAME} v${PACKAGE_VERSION} installed.`,\n \"\",\n `Created/updated: ${result.copied.length} file(s)`,\n `Unchanged: ${result.unchanged.length} file(s)`\n ];\n if (result.conflicts.length > 0) {\n lines.push(`Conflicts to review: ${result.conflicts.length} → see .agent-kit/conflicts/`);\n }\n if (result.contextPath) {\n lines.push(`Project context: ${result.contextPath}`);\n }\n if (result.activation?.activated.length) {\n lines.push(`IDE activation: ${result.activation.activated.join(\", \")}`);\n }\n if ([...result.copied, ...result.unchanged].some((path) => path.includes(\"agent-kit-audit.yml\"))) {\n lines.push(\"CI template: .github/workflows/agent-kit-audit.yml\");\n }\n lines.push(\"\", \"Next: teach agents about your project with the setup wizard (~5 min).\", \" agent-kit setup --open\");\n return lines.join(\"\\n\");\n}\n\nexport async function promptStartSetup(defaultYes = true): Promise<boolean> {\n if (!process.stdin.isTTY || !process.stdout.isTTY) return false;\n const rl = createInterface({ input: process.stdin, output: process.stdout });\n const question = defaultYes ? \"Start setup wizard now? [Y/n] \" : \"Start setup wizard now? [y/N] \";\n const answer = await new Promise<string>((resolve) => {\n rl.question(question, (value) => {\n rl.close();\n resolve(value.trim().toLowerCase());\n });\n });\n if (!answer) return defaultYes;\n if (defaultYes) return answer !== \"n\" && answer !== \"no\";\n return answer === \"y\" || answer === \"yes\";\n}\n","import { createServer, type IncomingMessage, type Server, type ServerResponse } from \"node:http\";\nimport { applySetupFormAnswers, ensureProjectContextForSetup, getSetupFormViewModel, parseSetupFormPayload } from \"./setup-form.js\";\nimport { getSetupProgress, loadOnboardingState, markQuickPathComplete, markSectionComplete, saveOnboardingState } from \"./onboarding-state.js\";\nimport { activateIdeTargets, ideSurfaceToActivateTarget } from \"../install/ide-activate.js\";\nimport { saveIdeChecklist, writeVisualQaTier, type IdeSurface } from \"./wizard/checklist.js\";\nimport { saveAgentBriefs } from \"./wizard/agent-briefs.js\";\nimport { buildWizardFormState, extractAgentBriefsFromForm, extractSetupFormFromWizardForm, loadWizardDraft, saveWizardDraft } from \"./wizard/wizard-draft.js\";\nimport { loadProjectRosterAgents } from \"./wizard/roster.js\";\nimport {\n applyDrafts,\n loadDesignDraft,\n loadMessagingDraft,\n previewDesignMarkdown,\n previewMessagingMarkdown,\n saveDesignDraft,\n saveMessagingDraft\n} from \"./wizard/drafts.js\";\nimport { renderSetupOfficeHtmlWithContext } from \"./office/render.js\";\nimport { buildOfficeStations } from \"./office/map.js\";\nimport { allAgentBriefsComplete, wizardSectionForStation } from \"./office/section-map.js\";\nimport type { OfficeStation } from \"./office/types.js\";\nimport { renderSetupWizardHtmlWithContext } from \"./wizard/render.js\";\nimport { SECTION_LABELS, type WizardDepth, type WizardSectionId } from \"./wizard/steps.js\";\nimport { computeAgenticLevel, invalidateAgenticLevelCache, summarizeAdapterValidation } from \"./agentic-level.js\";\nimport { readJsonBody } from \"./shared.js\";\n\nexport interface SetupServerOptions {\n cwd: string;\n port?: number;\n host?: string;\n}\n\nexport interface SetupServerHandle {\n url: string;\n port: number;\n requestedPort: number;\n portFallback: boolean;\n defaultView: \"office\";\n close: () => Promise<void>;\n}\n\nconst DEFAULT_PORT = 9321;\nconst DEFAULT_HOST = \"127.0.0.1\";\n\nfunction sendJson(response: ServerResponse, statusCode: number, payload: unknown): void {\n response.writeHead(statusCode, {\n \"Content-Type\": \"application/json; charset=utf-8\",\n \"Cache-Control\": \"no-store\"\n });\n response.end(JSON.stringify(payload));\n}\n\nfunction sendHtml(response: ServerResponse, html: string): void {\n response.writeHead(200, {\n \"Content-Type\": \"text/html; charset=utf-8\",\n \"Cache-Control\": \"no-store\",\n \"Content-Security-Policy\":\n \"default-src 'none'; connect-src 'self'; style-src 'unsafe-inline'; script-src 'unsafe-inline'; img-src data:; base-uri 'none'; form-action 'self'\"\n });\n response.end(html);\n}\n\nfunction buildStatePayload(cwd: string, options: { forceAgenticRefresh?: boolean } = {}): Record<string, unknown> {\n ensureProjectContextForSetup(cwd);\n const viewModel = getSetupFormViewModel(cwd);\n const onboarding = loadOnboardingState(cwd);\n const progress = getSetupProgress(cwd);\n const designDraft = loadDesignDraft(cwd);\n const messagingDraft = loadMessagingDraft(cwd);\n const draft = loadWizardDraft(cwd);\n const agenticLevel = computeAgenticLevel(cwd, options.forceAgenticRefresh ? { forceRefresh: true } : {});\n return {\n projectName: viewModel.projectName,\n form: buildWizardFormState(cwd),\n hasExistingContext: Boolean(viewModel.form.productSummary.trim() || viewModel.form.primaryAudience.trim() || viewModel.form.valueProposition.trim()),\n openQuestions: viewModel.openQuestions,\n hasSupabase: viewModel.hasSupabase,\n onboarding,\n progress,\n agenticLevel,\n designDraft,\n messagingDraft,\n draftUpdatedAt: draft.updatedAt,\n agents: loadProjectRosterAgents(cwd),\n designPreview: designDraft ? previewDesignMarkdown(designDraft) : null,\n messagingPreview: messagingDraft ? previewMessagingMarkdown(messagingDraft) : null\n };\n}\n\nfunction sendRedirect(response: ServerResponse, location: string): void {\n response.writeHead(302, { Location: location, \"Cache-Control\": \"no-store\" });\n response.end();\n}\n\nfunction findOfficeStation(cwd: string, stationId: string): OfficeStation | undefined {\n const agents = loadProjectRosterAgents(cwd);\n return buildOfficeStations(agents).find((s) => s.id === stationId);\n}\n\nfunction markOfficeSectionComplete(cwd: string, stationId: string, form: Record<string, string>): void {\n const station = findOfficeStation(cwd, stationId);\n if (!station) return;\n const section = wizardSectionForStation(station);\n if (!section) return;\n if (section === \"team\") {\n const agentIds = loadProjectRosterAgents(cwd).map((a) => a.id);\n if (allAgentBriefsComplete(form, agentIds)) markSectionComplete(cwd, \"team\");\n return;\n }\n markSectionComplete(cwd, section);\n}\n\nasync function handleRequest(cwd: string, request: IncomingMessage, response: ServerResponse): Promise<void> {\n const url = new URL(request.url ?? \"/\", \"http://127.0.0.1\");\n\n if (request.method === \"GET\" && url.pathname === \"/setup/wizard\") {\n sendRedirect(response, \"/wizard\");\n return;\n }\n\n if (request.method === \"GET\" && (url.pathname === \"/\" || url.pathname === \"/office\" || url.pathname === \"/setup\")) {\n sendHtml(response, renderSetupOfficeHtmlWithContext(cwd));\n return;\n }\n\n if (request.method === \"GET\" && url.pathname === \"/wizard\") {\n sendHtml(response, renderSetupWizardHtmlWithContext(cwd));\n return;\n }\n\n if (request.method === \"GET\" && url.pathname === \"/api/state\") {\n sendJson(response, 200, buildStatePayload(cwd));\n return;\n }\n\n if (request.method === \"GET\" && url.pathname === \"/api/context\") {\n sendJson(response, 200, getSetupFormViewModel(cwd));\n return;\n }\n\n if (request.method === \"PATCH\" && url.pathname === \"/api/state\") {\n try {\n const body = (await readJsonBody(request)) as Record<string, unknown>;\n if (typeof body.completeSection === \"string\") {\n if (!(body.completeSection in SECTION_LABELS)) {\n throw new Error(\"Invalid section id.\");\n }\n markSectionComplete(cwd, body.completeSection as WizardSectionId);\n }\n const patch: Record<string, unknown> = {};\n if (body.depth) patch.depth = body.depth as WizardDepth;\n if (body.currentSection) patch.currentSection = String(body.currentSection);\n if (typeof body.currentStep === \"number\") patch.currentStep = body.currentStep;\n if (Array.isArray(body.completedSections)) patch.completedSections = body.completedSections;\n if (typeof body.targetAgenticLevel === \"number\") patch.targetAgenticLevel = body.targetAgenticLevel;\n if (Object.keys(patch).length > 0) saveOnboardingState(cwd, patch);\n invalidateAgenticLevelCache(cwd);\n sendJson(response, 200, buildStatePayload(cwd, { forceAgenticRefresh: true }));\n } catch (error) {\n sendJson(response, 400, { error: error instanceof Error ? error.message : String(error) });\n }\n return;\n }\n\n if (request.method === \"POST\" && url.pathname === \"/api/context\") {\n try {\n const raw = (await readJsonBody(request)) as Record<string, unknown>;\n const payload = parseSetupFormPayload(extractSetupFormFromWizardForm(raw as Record<string, string>));\n const result = applySetupFormAnswers(cwd, payload);\n saveAgentBriefs(cwd, extractAgentBriefsFromForm(raw as Record<string, string>));\n markQuickPathComplete(cwd);\n invalidateAgenticLevelCache(cwd);\n sendJson(response, 200, {\n ...buildStatePayload(cwd, { forceAgenticRefresh: true }),\n saved: true,\n contextPath: result.contextPath,\n markdownPath: result.markdownPath,\n openQuestions: result.openQuestions\n });\n } catch (error) {\n sendJson(response, 400, { error: error instanceof Error ? error.message : String(error) });\n }\n return;\n }\n\n if (request.method === \"POST\" && url.pathname === \"/api/draft\") {\n try {\n const body = (await readJsonBody(request)) as {\n form?: Record<string, string>;\n stationId?: string;\n };\n const form = body.form ?? {};\n saveWizardDraft(cwd, {\n form: extractSetupFormFromWizardForm(form),\n agentBriefs: extractAgentBriefsFromForm(form)\n });\n if (body.stationId) markOfficeSectionComplete(cwd, body.stationId, form);\n sendJson(response, 200, buildStatePayload(cwd));\n } catch (error) {\n sendJson(response, 400, { error: error instanceof Error ? error.message : String(error) });\n }\n return;\n }\n\n if (request.method === \"POST\" && url.pathname === \"/api/context/import\") {\n try {\n const viewModel = getSetupFormViewModel(cwd);\n saveWizardDraft(cwd, { form: viewModel.form });\n sendJson(response, 200, buildStatePayload(cwd));\n } catch (error) {\n sendJson(response, 400, { error: error instanceof Error ? error.message : String(error) });\n }\n return;\n }\n\n if (request.method === \"POST\" && url.pathname === \"/api/checklist/ide\") {\n try {\n const body = (await readJsonBody(request)) as { ideSurface?: IdeSurface };\n if (!body.ideSurface) throw new Error(\"ideSurface is required.\");\n const activateTarget = ideSurfaceToActivateTarget(body.ideSurface);\n let activation: { activated: string[]; copied: string[]; unchanged: string[]; conflicts: string[] } | undefined;\n if (activateTarget) {\n const activateResult = activateIdeTargets({ cwd, targets: [activateTarget] });\n activation = {\n activated: activateResult.activated,\n copied: activateResult.copied,\n unchanged: activateResult.unchanged,\n conflicts: activateResult.conflicts\n };\n }\n const result = saveIdeChecklist(cwd, body.ideSurface);\n markSectionComplete(cwd, \"ide\");\n invalidateAgenticLevelCache(cwd);\n const adapterValidation = summarizeAdapterValidation(cwd, body.ideSurface);\n sendJson(response, 200, {\n ...result,\n activation,\n adapterValidation,\n ...buildStatePayload(cwd, { forceAgenticRefresh: true })\n });\n } catch (error) {\n sendJson(response, 400, { error: error instanceof Error ? error.message : String(error) });\n }\n return;\n }\n\n if (request.method === \"POST\" && url.pathname === \"/api/checklist/visual-qa\") {\n try {\n const body = (await readJsonBody(request)) as { tier?: \"baseline\" | \"strong\" | \"mature\" };\n if (!body.tier) throw new Error(\"tier is required.\");\n const result = writeVisualQaTier(cwd, body.tier);\n markSectionComplete(cwd, \"visualQa\");\n sendJson(response, 200, { ...result, ...buildStatePayload(cwd) });\n } catch (error) {\n sendJson(response, 400, { error: error instanceof Error ? error.message : String(error) });\n }\n return;\n }\n\n if (request.method === \"POST\" && url.pathname === \"/api/drafts/design\") {\n try {\n const body = (await readJsonBody(request)) as {\n audience?: string;\n contentInventory?: string;\n antiReferences?: string;\n };\n const draft = saveDesignDraft(cwd, {\n audience: String(body.audience ?? \"\"),\n contentInventory: String(body.contentInventory ?? \"\"),\n antiReferences: String(body.antiReferences ?? \"\")\n });\n markSectionComplete(cwd, \"designDoc\");\n sendJson(response, 200, { draft, preview: previewDesignMarkdown(draft), ...buildStatePayload(cwd) });\n } catch (error) {\n sendJson(response, 400, { error: error instanceof Error ? error.message : String(error) });\n }\n return;\n }\n\n if (request.method === \"POST\" && url.pathname === \"/api/drafts/messaging\") {\n try {\n const body = (await readJsonBody(request)) as { audience?: string; pain?: string; outcome?: string };\n const draft = saveMessagingDraft(cwd, {\n audience: String(body.audience ?? \"\"),\n pain: String(body.pain ?? \"\"),\n outcome: String(body.outcome ?? \"\")\n });\n markSectionComplete(cwd, \"messagingDoc\");\n sendJson(response, 200, { draft, preview: previewMessagingMarkdown(draft), ...buildStatePayload(cwd) });\n } catch (error) {\n sendJson(response, 400, { error: error instanceof Error ? error.message : String(error) });\n }\n return;\n }\n\n if (request.method === \"POST\" && url.pathname === \"/api/drafts/apply\") {\n try {\n const results = applyDrafts(cwd);\n markSectionComplete(cwd, \"applyDrafts\");\n sendJson(response, 200, { results, ...buildStatePayload(cwd) });\n } catch (error) {\n sendJson(response, 400, { error: error instanceof Error ? error.message : String(error) });\n }\n return;\n }\n\n if (request.method === \"POST\" && url.pathname === \"/api/agentic-level/refresh\") {\n invalidateAgenticLevelCache(cwd);\n sendJson(response, 200, buildStatePayload(cwd, { forceAgenticRefresh: true }));\n return;\n }\n\n sendJson(response, 404, { error: \"Not found.\" });\n}\n\nfunction listen(server: Server, host: string, port: number): Promise<number> {\n return new Promise((resolve, reject) => {\n server.once(\"error\", reject);\n server.listen(port, host, () => {\n const address = server.address();\n if (!address || typeof address === \"string\") {\n reject(new Error(\"Could not determine setup server port.\"));\n return;\n }\n resolve(address.port);\n });\n });\n}\n\nexport async function startSetupServer(options: SetupServerOptions): Promise<SetupServerHandle> {\n const host = options.host ?? DEFAULT_HOST;\n const requestedPort = options.port ?? DEFAULT_PORT;\n ensureProjectContextForSetup(options.cwd);\n loadOnboardingState(options.cwd);\n\n const server = createServer((request, response) => {\n handleRequest(options.cwd, request, response).catch((error) => {\n sendJson(response, 500, { error: error instanceof Error ? error.message : String(error) });\n });\n });\n\n let port = requestedPort;\n let portFallback = false;\n try {\n port = await listen(server, host, requestedPort);\n } catch (error) {\n if (error instanceof Error && \"code\" in error && error.code === \"EADDRINUSE\") {\n portFallback = true;\n port = await listen(server, host, 0);\n } else {\n throw error;\n }\n }\n\n return {\n url: `http://${host}:${port}`,\n port,\n requestedPort,\n portFallback,\n defaultView: \"office\",\n close: () =>\n new Promise((resolve, reject) => {\n server.close((closeError) => {\n if (closeError) reject(closeError);\n else resolve();\n });\n })\n };\n}\n","import type { ProjectContextContractValue } from \"../config/contracts.js\";\nimport { initProjectContext, scanProjectContext, writeProjectContext, type ContextCommandResult } from \"./context.js\";\nimport { nowIso } from \"./shared.js\";\n\nexport interface SetupFormPayload {\n productSummary: string;\n productCategory: string;\n primaryAudience: string;\n primaryWorkflows: string;\n authModel: string;\n tenantModel: string;\n uiPreferred: string;\n uiAvoid: string;\n valueProposition: string;\n proof: string;\n objections: string;\n qualityTarget: ProjectContextContractValue[\"qualityTarget\"];\n owner: string;\n ideSurface?: string;\n visualQaTier?: string;\n designAudience?: string;\n designContent?: string;\n designAntiReferences?: string;\n msgAudience?: string;\n msgPain?: string;\n msgOutcome?: string;\n}\n\nexport interface SetupFormViewModel {\n projectName: string;\n openQuestions: string[];\n hasSupabase: boolean;\n form: SetupFormPayload;\n}\n\n/** Generic Next.js + Supabase auth baseline — downstream projects customize in the wizard. */\nexport const RECOMMENDED_SUPABASE_AUTH =\n \"Supabase Auth with server-set session cookies via @supabase/ssr. Authorization is enforced in Postgres RLS for private tables, not only in UI code. Service-role keys stay server-only. Document how privileged admin or operator roles are granted and verified before changing auth boundaries.\";\n\nfunction splitLines(value: string): string[] {\n return value\n .split(/\\r?\\n/)\n .map((line) => line.trim())\n .filter(Boolean);\n}\n\nfunction uniqueStrings(values: string[]): string[] {\n return [...new Set(values.filter(Boolean))];\n}\n\nexport function buildSetupFormViewModel(context: ProjectContextContractValue): SetupFormViewModel {\n return {\n projectName: context.projectName,\n openQuestions: context.openQuestions,\n hasSupabase: context.architecture.hasSupabase,\n form: {\n productSummary: context.productSummary,\n productCategory: context.productCategory,\n primaryAudience: context.primaryAudience,\n primaryWorkflows: context.primaryWorkflows.join(\"\\n\"),\n authModel: context.authModel,\n tenantModel: context.tenantModel,\n uiPreferred: context.uiDirection.preferred,\n uiAvoid: context.uiDirection.avoid,\n valueProposition: context.messaging.valueProposition,\n proof: context.messaging.proof.join(\"\\n\"),\n objections: context.messaging.objections.join(\"\\n\"),\n qualityTarget: context.qualityTarget,\n owner: context.owners[0] ?? \"\"\n }\n };\n}\n\nexport function getSetupFormViewModel(cwd: string): SetupFormViewModel {\n const context = scanProjectContext(cwd);\n return buildSetupFormViewModel(context);\n}\n\nexport function applySetupFormAnswers(cwd: string, payload: SetupFormPayload): ContextCommandResult {\n const base = scanProjectContext(cwd);\n const owners = uniqueStrings([payload.owner.trim(), ...base.owners]);\n const updated: ProjectContextContractValue = {\n ...base,\n productSummary: payload.productSummary.trim(),\n productCategory: payload.productCategory.trim() || \"TBD\",\n primaryAudience: payload.primaryAudience.trim(),\n primaryWorkflows: splitLines(payload.primaryWorkflows),\n authModel: payload.authModel.trim(),\n tenantModel: payload.tenantModel.trim(),\n uiDirection: {\n preferred: payload.uiPreferred.trim(),\n avoid: payload.uiAvoid.trim()\n },\n messaging: {\n valueProposition: payload.valueProposition.trim(),\n proof: splitLines(payload.proof),\n objections: splitLines(payload.objections)\n },\n qualityTarget: payload.qualityTarget,\n owners,\n lastReviewedAt: nowIso(),\n evidence: uniqueEvidence([...base.evidence, { source: \"agent-kit setup wizard\", note: \"Project context updated through the local web setup wizard.\" }])\n };\n return writeProjectContext(cwd, updated);\n}\n\nexport function ensureProjectContextForSetup(cwd: string): ContextCommandResult {\n return initProjectContext(cwd);\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 parseSetupFormPayload(raw: unknown): SetupFormPayload {\n if (!raw || typeof raw !== \"object\") {\n throw new Error(\"Setup form payload must be a JSON object.\");\n }\n const body = raw as Record<string, unknown>;\n const qualityTarget = body.qualityTarget;\n if (qualityTarget !== \"baseline-setup\" && qualityTarget !== \"needs-improvement\" && qualityTarget !== \"best-practice-candidate\") {\n throw new Error(\"qualityTarget must be baseline-setup, needs-improvement, or best-practice-candidate.\");\n }\n return {\n productSummary: String(body.productSummary ?? \"\"),\n productCategory: String(body.productCategory ?? \"\"),\n primaryAudience: String(body.primaryAudience ?? \"\"),\n primaryWorkflows: String(body.primaryWorkflows ?? \"\"),\n authModel: String(body.authModel ?? \"\"),\n tenantModel: String(body.tenantModel ?? \"\"),\n uiPreferred: String(body.uiPreferred ?? \"\"),\n uiAvoid: String(body.uiAvoid ?? \"\"),\n valueProposition: String(body.valueProposition ?? \"\"),\n proof: String(body.proof ?? \"\"),\n objections: String(body.objections ?? \"\"),\n qualityTarget,\n owner: String(body.owner ?? \"\"),\n ...(body.ideSurface ? { ideSurface: String(body.ideSurface) } : {}),\n ...(body.visualQaTier ? { visualQaTier: String(body.visualQaTier) } : {}),\n ...(body.designAudience ? { designAudience: String(body.designAudience) } : {}),\n ...(body.designContent ? { designContent: String(body.designContent) } : {}),\n ...(body.designAntiReferences ? { designAntiReferences: String(body.designAntiReferences) } : {}),\n ...(body.msgAudience ? { msgAudience: String(body.msgAudience) } : {}),\n ...(body.msgPain ? { msgPain: String(body.msgPain) } : {}),\n ...(body.msgOutcome ? { msgOutcome: String(body.msgOutcome) } : {})\n };\n}\n","import { existsSync, readFileSync } from \"node:fs\";\nimport { join } from \"node:path\";\nimport { loadOnboardingState, saveOnboardingState } from \"../onboarding-state.js\";\nimport { nowIso, writeTextFile } from \"../shared.js\";\n\nexport type IdeSurface = \"cursor\" | \"copilot\" | \"claude\" | \"codex\" | \"other\";\n\nconst IDE_PATHS: Record<IdeSurface, string> = {\n cursor: \".cursor/agents/planner.md\",\n copilot: \".github/copilot-instructions.md\",\n claude: \".claude/agents/planner.md\",\n codex: \".codex/agents/planner.toml\",\n other: \"ASSISTANT_ADAPTERS.md\"\n};\n\nexport function saveIdeChecklist(cwd: string, ideSurface: IdeSurface): { idePath: string; present: boolean } {\n const state = loadOnboardingState(cwd);\n saveOnboardingState(cwd, {\n ideSurface,\n ideVerifiedAt: nowIso(),\n completedSections: [...new Set([...state.completedSections, \"ide\"])]\n });\n const idePath = IDE_PATHS[ideSurface];\n return { idePath, present: detectIdeRulePresent(cwd, ideSurface) };\n}\n\nexport function detectIdeRulePresent(cwd: string, ideSurface: IdeSurface): boolean {\n const rel = IDE_PATHS[ideSurface];\n if (ideSurface === \"cursor\") {\n return existsSync(join(cwd, rel)) || existsSync(join(cwd, \".cursor/rules/cursor-agent-kit.mdc\"));\n }\n if (rel.endsWith(\"/\")) {\n return existsSync(join(cwd, rel));\n }\n return existsSync(join(cwd, rel));\n}\n\nconst VISUAL_QA_MARKER = \"## Visual QA Tier\";\n\nconst VISUAL_QA_BLOCKS: Record<\"baseline\" | \"strong\" | \"mature\", string> = {\n baseline: `${VISUAL_QA_MARKER}\n\nThis project uses the **Baseline** visual QA tier.\n\n- Manual desktop/mobile screenshot review for important UI changes\n- Use \\`.agent-kit/prompts/screenshot-review.md\\` as the review checklist\n`,\n strong: `${VISUAL_QA_MARKER}\n\nThis project uses the **Strong** visual QA tier.\n\n- Playwright screenshot checks for stable pages and states\n- Manual screenshot review for high-risk UI changes using \\`.agent-kit/prompts/screenshot-review.md\\`\n`,\n mature: `${VISUAL_QA_MARKER}\n\nThis project uses the **Mature** visual QA tier.\n\n- Storybook or component-state coverage where practical\n- Visual regression in CI through Playwright snapshots, Chromatic, Argos, Loki, or equivalent\n`\n};\n\nexport interface VisualQaWriteResult {\n updated: boolean;\n path: string;\n reason?: string;\n}\n\nexport function writeVisualQaTier(cwd: string, tier: \"baseline\" | \"strong\" | \"mature\"): VisualQaWriteResult {\n const path = \"TESTING.md\";\n const fullPath = join(cwd, path);\n if (!existsSync(fullPath)) {\n return { updated: false, path, reason: \"TESTING.md not found in project root.\" };\n }\n const current = readFileSync(fullPath, \"utf8\");\n if (current.includes(VISUAL_QA_MARKER)) {\n return {\n updated: false,\n path,\n reason: \"Visual QA tier block already exists — edit TESTING.md manually to avoid overwriting custom content.\"\n };\n }\n writeTextFile(cwd, path, `${current.trimEnd()}\\n\\n${VISUAL_QA_BLOCKS[tier]}`);\n const state = loadOnboardingState(cwd);\n saveOnboardingState(cwd, {\n visualQaTier: tier,\n completedSections: [...new Set([...state.completedSections, \"visualQa\"])]\n });\n return { updated: true, path };\n}\n\nexport function getIdeSurfaces(): { id: IdeSurface; label: string; path: string }[] {\n return [\n { id: \"cursor\", label: \"Cursor\", path: IDE_PATHS.cursor },\n { id: \"copilot\", label: \"GitHub Copilot / VS Code\", path: IDE_PATHS.copilot },\n { id: \"claude\", label: \"Claude Code\", path: IDE_PATHS.claude },\n { id: \"codex\", label: \"Codex / AGENTS.md tools\", path: IDE_PATHS.codex },\n { id: \"other\", label: \"Other / multiple\", path: IDE_PATHS.other }\n ];\n}\n","import { ensureStudioDirs, nowIso, readJsonFile, writeJsonFile, writeTextFile } from \"../shared.js\";\nimport { loadProjectRosterAgents } from \"./roster.js\";\n\nexport const AGENT_BRIEFS_JSON = \".agent-kit/onboarding/agent-briefs.json\";\nexport const AGENT_BRIEFS_MD = \".agent-kit/agent-briefs.md\";\n\nexport interface AgentBriefsFile {\n schemaVersion: 1;\n updatedAt: string;\n briefs: Record<string, string>;\n}\n\nfunction emptyBriefs(): AgentBriefsFile {\n return { schemaVersion: 1, updatedAt: nowIso(), briefs: {} };\n}\n\nexport function loadAgentBriefs(cwd: string): AgentBriefsFile {\n ensureStudioDirs(cwd);\n const existing = readJsonFile<AgentBriefsFile>(cwd, AGENT_BRIEFS_JSON);\n if (!existing || existing.schemaVersion !== 1 || typeof existing.briefs !== \"object\") {\n return emptyBriefs();\n }\n return existing;\n}\n\nexport function saveAgentBriefs(cwd: string, briefs: Record<string, string>): AgentBriefsFile {\n const cleaned = Object.fromEntries(\n Object.entries(briefs)\n .map(([id, text]) => [id, String(text).trim()] as const)\n .filter(([, text]) => text.length > 0)\n );\n const next: AgentBriefsFile = { schemaVersion: 1, updatedAt: nowIso(), briefs: cleaned };\n writeJsonFile(cwd, AGENT_BRIEFS_JSON, next);\n writeTextFile(cwd, AGENT_BRIEFS_MD, renderAgentBriefsMarkdown(cwd, next));\n return next;\n}\n\nexport function renderAgentBriefsMarkdown(cwd: string, file: AgentBriefsFile): string {\n const agents = loadProjectRosterAgents(cwd);\n const lines = [\n \"# Agent Team Briefings\",\n \"\",\n \"Project-specific notes for each council agent. Specialists already know their domain — this file tells them what is unique about **this** project.\",\n \"\",\n `Updated: ${file.updatedAt}`,\n \"\"\n ];\n let wroteAny = false;\n for (const agent of agents) {\n const text = file.briefs[agent.id]?.trim();\n if (!text) continue;\n wroteAny = true;\n lines.push(`## ${agent.name}`, \"\", `**Role:** ${agent.roleSummary}`, \"\", text, \"\");\n }\n if (!wroteAny) {\n lines.push(\"_No agent briefs recorded yet. Run `agent-kit setup` to brief your team._\", \"\");\n }\n return lines.join(\"\\n\");\n}\n","import type { SetupFormPayload } from \"../setup-form.js\";\nimport { loadOnboardingState } from \"../onboarding-state.js\";\nimport { ensureStudioDirs, nowIso, readJsonFile, writeJsonFile } from \"../shared.js\";\nimport { loadAgentBriefs } from \"./agent-briefs.js\";\nimport { agentBriefFieldName } from \"./roster.js\";\n\nexport const WIZARD_DRAFT_JSON = \".agent-kit/onboarding/wizard-draft.json\";\n\nexport interface WizardDraftFile {\n schemaVersion: 1;\n updatedAt: string;\n form: Partial<SetupFormPayload>;\n agentBriefs: Record<string, string>;\n}\n\nfunction emptyDraft(): WizardDraftFile {\n return { schemaVersion: 1, updatedAt: nowIso(), form: {}, agentBriefs: {} };\n}\n\nexport function loadWizardDraft(cwd: string): WizardDraftFile {\n ensureStudioDirs(cwd);\n const existing = readJsonFile<WizardDraftFile>(cwd, WIZARD_DRAFT_JSON);\n if (!existing || existing.schemaVersion !== 1) return emptyDraft();\n return {\n schemaVersion: 1,\n updatedAt: existing.updatedAt ?? nowIso(),\n form: existing.form ?? {},\n agentBriefs: existing.agentBriefs ?? {}\n };\n}\n\nexport function saveWizardDraft(cwd: string, patch: { form?: Partial<SetupFormPayload>; agentBriefs?: Record<string, string> }): WizardDraftFile {\n const current = loadWizardDraft(cwd);\n const next: WizardDraftFile = {\n schemaVersion: 1,\n updatedAt: nowIso(),\n form: { ...current.form, ...(patch.form ?? {}) },\n agentBriefs: { ...current.agentBriefs, ...(patch.agentBriefs ?? {}) }\n };\n writeJsonFile(cwd, WIZARD_DRAFT_JSON, next);\n return next;\n}\n\n/** Empty interview fields for a fresh wizard; resume from draft + onboarding IDE choice only. */\nexport function buildWizardFormState(cwd: string): Record<string, string> {\n const draft = loadWizardDraft(cwd);\n const onboarding = loadOnboardingState(cwd);\n const briefs = loadAgentBriefs(cwd);\n const form: Record<string, string> = {\n productSummary: \"\",\n productCategory: \"TBD\",\n primaryAudience: \"\",\n primaryWorkflows: \"\",\n authModel: \"\",\n tenantModel: \"single-user\",\n uiPreferred: \"\",\n uiAvoid: \"\",\n valueProposition: \"\",\n proof: \"\",\n objections: \"\",\n qualityTarget: \"baseline-setup\",\n owner: \"\",\n ideSurface: onboarding.ideSurface ?? draft.form.ideSurface ?? \"\",\n visualQaTier: onboarding.visualQaTier ?? draft.form.visualQaTier ?? \"baseline\",\n designAudience: \"\",\n designContent: \"\",\n designAntiReferences: \"\",\n msgAudience: \"\",\n msgPain: \"\",\n msgOutcome: \"\"\n };\n for (const [key, value] of Object.entries(draft.form)) {\n if (value !== undefined && value !== null && String(value).trim()) {\n form[key] = String(value);\n }\n }\n const mergedBriefs = { ...briefs.briefs, ...draft.agentBriefs };\n for (const [agentId, text] of Object.entries(mergedBriefs)) {\n if (text.trim()) form[agentBriefFieldName(agentId)] = text.trim();\n }\n return form;\n}\n\nexport function extractAgentBriefsFromForm(form: Record<string, string>): Record<string, string> {\n const briefs: Record<string, string> = {};\n for (const [key, value] of Object.entries(form)) {\n if (!key.startsWith(\"agentBrief_\")) continue;\n const agentId = key.slice(\"agentBrief_\".length);\n const text = String(value).trim();\n if (text) briefs[agentId] = text;\n }\n return briefs;\n}\n\nexport function extractSetupFormFromWizardForm(form: Record<string, string>): SetupFormPayload {\n return {\n productSummary: form.productSummary ?? \"\",\n productCategory: form.productCategory ?? \"TBD\",\n primaryAudience: form.primaryAudience ?? \"\",\n primaryWorkflows: form.primaryWorkflows ?? \"\",\n authModel: form.authModel ?? \"\",\n tenantModel: form.tenantModel ?? \"single-user\",\n uiPreferred: form.uiPreferred ?? \"\",\n uiAvoid: form.uiAvoid ?? \"\",\n valueProposition: form.valueProposition ?? \"\",\n proof: form.proof ?? \"\",\n objections: form.objections ?? \"\",\n qualityTarget: (form.qualityTarget as SetupFormPayload[\"qualityTarget\"]) ?? \"baseline-setup\",\n owner: form.owner ?? \"\",\n ...(form.ideSurface ? { ideSurface: form.ideSurface } : {}),\n ...(form.visualQaTier ? { visualQaTier: form.visualQaTier } : {}),\n ...(form.designAudience ? { designAudience: form.designAudience } : {}),\n ...(form.designContent ? { designContent: form.designContent } : {}),\n ...(form.designAntiReferences ? { designAntiReferences: form.designAntiReferences } : {}),\n ...(form.msgAudience ? { msgAudience: form.msgAudience } : {}),\n ...(form.msgPain ? { msgPain: form.msgPain } : {}),\n ...(form.msgOutcome ? { msgOutcome: form.msgOutcome } : {})\n };\n}\n","import { existsSync, readFileSync } from \"node:fs\";\nimport { join } from \"node:path\";\nimport { loadOnboardingState, saveOnboardingState } from \"../onboarding-state.js\";\nimport { ensureStudioDirs, nowIso, readJsonFile, writeJsonFile, writeTextFile } from \"../shared.js\";\n\nexport interface DesignDraft {\n audience: string;\n contentInventory: string;\n antiReferences: string;\n updatedAt: string;\n}\n\nexport interface MessagingDraft {\n audience: string;\n pain: string;\n outcome: string;\n updatedAt: string;\n}\n\nexport const DESIGN_DRAFT_JSON = \".agent-kit/onboarding/design-draft.json\";\nexport const MESSAGING_DRAFT_JSON = \".agent-kit/onboarding/messaging-draft.json\";\n\nexport function loadDesignDraft(cwd: string): DesignDraft | null {\n return readJsonFile<DesignDraft>(cwd, DESIGN_DRAFT_JSON);\n}\n\nexport function saveDesignDraft(cwd: string, draft: Omit<DesignDraft, \"updatedAt\">): DesignDraft {\n ensureStudioDirs(cwd);\n const payload: DesignDraft = { ...draft, updatedAt: nowIso() };\n writeJsonFile(cwd, DESIGN_DRAFT_JSON, payload);\n return payload;\n}\n\nexport function loadMessagingDraft(cwd: string): MessagingDraft | null {\n return readJsonFile<MessagingDraft>(cwd, MESSAGING_DRAFT_JSON);\n}\n\nexport function saveMessagingDraft(cwd: string, draft: Omit<MessagingDraft, \"updatedAt\">): MessagingDraft {\n ensureStudioDirs(cwd);\n const payload: MessagingDraft = { ...draft, updatedAt: nowIso() };\n writeJsonFile(cwd, MESSAGING_DRAFT_JSON, payload);\n return payload;\n}\n\nexport function previewDesignMarkdown(draft: DesignDraft): string {\n return `## Brand And Content Inputs (wizard draft)\n\n| Area | Wizard draft |\n| --- | --- |\n| Primary audience | ${draft.audience.trim() || \"TBD\"} |\n| Content inventory | ${draft.contentInventory.trim() || \"TBD\"} |\n\n## Anti-References (wizard draft)\n\n${draft.antiReferences.trim() || \"- TBD: pattern to avoid.\"}\n`;\n}\n\nexport function previewMessagingMarkdown(draft: MessagingDraft): string {\n return `## Discovery Questions (wizard draft)\n\n| Question | Current Answer |\n| --- | --- |\n| Who is the primary audience? | ${draft.audience.trim() || \"TBD\"} |\n| What painful problem do they need solved? | ${draft.pain.trim() || \"TBD\"} |\n| What outcome do they want? | ${draft.outcome.trim() || \"TBD\"} |\n`;\n}\n\nexport interface ApplyDraftResult {\n target: string;\n action: \"appended\" | \"conflict\" | \"missing\";\n conflictPath?: string;\n}\n\nfunction appendSectionToDoc(cwd: string, doc: string, sectionMarkdown: string): ApplyDraftResult {\n const fullPath = join(cwd, doc);\n if (!existsSync(fullPath)) {\n return { target: doc, action: \"missing\" };\n }\n const current = readFileSync(fullPath, \"utf8\");\n if (current.includes(\"(wizard draft)\")) {\n return { target: doc, action: \"conflict\", conflictPath: `.agent-kit/conflicts/wizard-${doc}` };\n }\n writeTextFile(cwd, doc, `${current.trimEnd()}\\n\\n${sectionMarkdown.trim()}\\n`);\n return { target: doc, action: \"appended\" };\n}\n\nexport function applyDesignDraft(cwd: string): ApplyDraftResult {\n const draft = loadDesignDraft(cwd);\n if (!draft) return { target: \"DESIGN.md\", action: \"missing\" };\n const result = appendSectionToDoc(cwd, \"DESIGN.md\", previewDesignMarkdown(draft));\n if (result.action === \"appended\") {\n const state = loadOnboardingState(cwd);\n saveOnboardingState(cwd, {\n completedSections: [...new Set([...state.completedSections, \"designDoc\", \"applyDrafts\"])]\n });\n }\n return result;\n}\n\nexport function applyMessagingDraft(cwd: string): ApplyDraftResult {\n const draft = loadMessagingDraft(cwd);\n if (!draft) return { target: \"MESSAGING.md\", action: \"missing\" };\n const result = appendSectionToDoc(cwd, \"MESSAGING.md\", previewMessagingMarkdown(draft));\n if (result.action === \"appended\") {\n const state = loadOnboardingState(cwd);\n saveOnboardingState(cwd, {\n completedSections: [...new Set([...state.completedSections, \"messagingDoc\", \"applyDrafts\"])]\n });\n }\n return result;\n}\n\nexport function applyDrafts(cwd: string): ApplyDraftResult[] {\n return [applyDesignDraft(cwd), applyMessagingDraft(cwd)];\n}\n","import { readFileSync } from \"node:fs\";\nimport { join } from \"node:path\";\nimport { findPackageRoot } from \"../../utils/package-root.js\";\nimport { scanProjectContext } from \"../context.js\";\nimport { getSetupFormViewModel, RECOMMENDED_SUPABASE_AUTH } from \"../setup-form.js\";\nimport { getActiveSessionId } from \"../session.js\";\nimport { getIdeSurfaces } from \"../wizard/checklist.js\";\nimport { loadProjectRosterAgents } from \"../wizard/roster.js\";\nimport { CANVAS_SCALE, MAP_HEIGHT, MAP_WIDTH, TILE_SIZE, buildOfficeStations } from \"./map.js\";\nimport type { OfficeBootConfig } from \"./types.js\";\nimport { PACKAGE_VERSION } from \"../../config/defaults.js\";\n\nconst PRODUCT_CATEGORIES = [\"content-app\", \"saas\", \"admin\", \"marketplace\", \"tool\", \"ecommerce\", \"portfolio\", \"education\", \"community\", \"ai-workflow\", \"other\"];\n\nconst TENANT_MODELS = [\"single-user\", \"team\", \"tenant\", \"marketplace\", \"admin\", \"public-content\"];\n\nfunction readOfficeAsset(name: string): string {\n const root = findPackageRoot();\n const distPath = join(root, \"dist\", \"studio\", \"office\", \"assets\", name);\n const srcPath = join(root, \"src\", \"studio\", \"office\", \"assets\", name);\n try {\n return readFileSync(distPath, \"utf8\");\n } catch {\n return readFileSync(srcPath, \"utf8\");\n }\n}\n\nexport function buildOfficeBootConfig(cwd: string, viewModel: ReturnType<typeof getSetupFormViewModel>): OfficeBootConfig {\n const agents = loadProjectRosterAgents(cwd);\n return {\n mapWidth: MAP_WIDTH,\n mapHeight: MAP_HEIGHT,\n tileSize: TILE_SIZE,\n scale: CANVAS_SCALE,\n stations: buildOfficeStations(agents),\n agents,\n categories: PRODUCT_CATEGORIES,\n tenantModels: TENANT_MODELS,\n recommendedSupabaseAuth: RECOMMENDED_SUPABASE_AUTH,\n ideSurfaces: getIdeSurfaces(),\n hasSupabase: viewModel.hasSupabase,\n stackSignals: []\n };\n}\n\nexport function renderSetupOfficeHtml(boot?: OfficeBootConfig): string {\n return renderOfficeHtml(boot, \"setup\");\n}\n\nfunction renderOfficeHtml(boot: OfficeBootConfig | undefined, mode: \"setup\" | \"studio\"): string {\n const css = readOfficeAsset(\"office.css\");\n const js = readOfficeAsset(\"office.js\");\n const bootJson = JSON.stringify({\n ...(boot ?? {\n mapWidth: MAP_WIDTH,\n mapHeight: MAP_HEIGHT,\n tileSize: TILE_SIZE,\n scale: CANVAS_SCALE,\n stations: [],\n agents: [],\n categories: PRODUCT_CATEGORIES,\n tenantModels: TENANT_MODELS,\n ideSurfaces: [],\n hasSupabase: false,\n stackSignals: []\n }),\n mode\n }).replace(/</g, \"\\\\u003c\");\n\n const isStudio = mode === \"studio\";\n const title = isStudio ? \"Agent Kit — Live Studio\" : \"Agent Kit — Setup Office\";\n const dataView = isStudio ? \"studio-v1\" : \"office-v1\";\n\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 <title>${title}</title>\n <style>${css}</style>\n</head>\n<body data-view=\"${dataView}\" data-kit-version=\"${PACKAGE_VERSION}\">\n <header class=\"office-header\">\n <div class=\"brand\">\n <h1>${isStudio ? \"Live Agent Studio\" : \"Agent Office\"}</h1>\n <p class=\"project-name\" id=\"project-name\">…</p>\n </div>\n <div class=\"header-actions\">\n <span class=\"progress-pill\" id=\"progress-pill\">${isStudio ? \"Live\" : \"0% ready\"}</span>\n ${isStudio ? \"\" : '<span class=\"level-pill\" id=\"level-pill\" aria-live=\"polite\">L3 → L5</span>'}\n ${isStudio ? '<span class=\"session-pill\" id=\"session-pill\">No session</span>' : '<a class=\"btn secondary\" href=\"/wizard\">Form view</a>'}\n ${isStudio ? \"\" : '<button type=\"button\" class=\"btn primary\" id=\"review-btn\">Review &amp; save</button>'}\n </div>\n </header>\n ${isStudio ? \"\" : '<div class=\"iceberg-strip\" id=\"iceberg-strip\" aria-label=\"Agentic engineering levels L3 through L8\"></div>'}\n <main class=\"office-main${isStudio ? \" studio-layout\" : \"\"}\">\n <aside class=\"station-list${isStudio ? \" hidden\" : \"\"}\" aria-label=\"Setup stations\">\n <h2>Stations</h2>\n <p class=\"hint\">Keyboard-friendly list — same actions as the office floor.</p>\n <div class=\"climb-panel\" id=\"climb-panel\" hidden>\n <h3>Climb checklist</h3>\n <ol id=\"climb-list\"></ol>\n <button type=\"button\" class=\"btn secondary climb-refresh\" id=\"climb-refresh\">Refresh level</button>\n </div>\n <ul id=\"station-list\"></ul>\n </aside>\n <div class=\"canvas-wrap\">\n <canvas id=\"office-floor\" width=\"${MAP_WIDTH * TILE_SIZE}\" height=\"${MAP_HEIGHT * TILE_SIZE}\" role=\"img\" aria-labelledby=\"canvas-desc\"></canvas>\n <p id=\"canvas-desc\" class=\"sr-only\">${isStudio ? \"Live council session office floor with agent speech bubbles.\" : \"Top-down pixel office. Click agents at desks or zone stations to configure your project.\"}</p>\n <div id=\"hover-label\" class=\"hover-label hidden\" aria-hidden=\"true\"></div>\n <div id=\"bubble-layer\" class=\"bubble-layer\" aria-hidden=\"true\"></div>\n <div id=\"nameplate-layer\" class=\"nameplate-layer\" aria-hidden=\"true\"></div>\n <div id=\"office-hint\" class=\"office-hint hidden\" role=\"status\">${isStudio ? \"Watching council session events…\" : \"Click a desk or zone to brief your agent team.\"}</div>\n </div>\n ${isStudio ? '<aside class=\"transcript-panel\" id=\"transcript-panel\" aria-label=\"Session transcript\"><div class=\"studio-controls\" id=\"studio-controls\"><label class=\"studio-label\" for=\"session-picker\">Session</label><select id=\"session-picker\" aria-label=\"Council session\"></select><form id=\"studio-note-form\" class=\"studio-note-form\"><select id=\"studio-note-agent\" aria-label=\"Agent for note\"></select><input id=\"studio-note-text\" type=\"text\" maxlength=\"3999\" placeholder=\"Add council note…\" /><button type=\"submit\" class=\"btn secondary\">Add note</button></form><button type=\"button\" class=\"btn primary\" id=\"studio-render-btn\">Render markdown</button></div><h2>Transcript</h2><ol id=\"transcript-list\"></ol></aside>' : \"\"}\n </main>\n <div id=\"status\" class=\"status\" role=\"status\" aria-live=\"polite\"></div>\n <div id=\"depth-modal\" class=\"modal modal-blur\" hidden>\n <div class=\"modal-card\" role=\"dialog\" aria-labelledby=\"depth-title\" aria-modal=\"true\">\n <h2 id=\"depth-title\">Choose setup depth</h2>\n <p class=\"why\">Unlocks more stations on the office floor.</p>\n <div class=\"depth-grid\" id=\"depth-grid\"></div>\n </div>\n </div>\n <aside id=\"panel\" class=\"panel hidden\" aria-labelledby=\"panel-title\">\n <div class=\"panel-head\">\n <h2 id=\"panel-title\">Station</h2>\n <button type=\"button\" class=\"panel-close\" id=\"panel-close\" aria-label=\"Close panel\">×</button>\n </div>\n <div class=\"panel-body\" id=\"panel-body\"></div>\n <div class=\"panel-foot\">\n <button type=\"button\" class=\"btn secondary\" id=\"panel-cancel\">Cancel</button>\n <button type=\"button\" class=\"btn primary\" id=\"panel-save\">Save &amp; close</button>\n </div>\n </aside>\n <div id=\"review-modal\" class=\"modal hidden\" role=\"dialog\" aria-labelledby=\"review-title\" aria-modal=\"true\">\n <div class=\"modal-card modal-wide\">\n <h2 id=\"review-title\">Review &amp; save</h2>\n <dl class=\"review\" id=\"review-list\"></dl>\n <div class=\"modal-actions\">\n <button type=\"button\" class=\"btn secondary\" id=\"review-cancel\">Back to office</button>\n <button type=\"button\" class=\"btn primary\" id=\"review-save\">Save project context</button>\n </div>\n </div>\n </div>\n <script>window.OFFICE_BOOT = ${bootJson};</script>\n <script>${js}</script>\n</body>\n</html>`;\n}\n\nexport function renderLiveStudioHtml(boot?: OfficeBootConfig): string {\n return renderOfficeHtml(boot, \"studio\");\n}\n\nexport function renderLiveStudioHtmlWithContext(cwd: string): string {\n const viewModel = getSetupFormViewModel(cwd);\n const context = scanProjectContext(cwd);\n const boot = buildOfficeBootConfig(cwd, viewModel);\n let activeSessionId = \"\";\n try {\n activeSessionId = getActiveSessionId(cwd);\n } catch {\n activeSessionId = \"\";\n }\n const stackSignals = [\n ...context.architecture.frameworks,\n ...context.architecture.testTools.slice(0, 2),\n ...(viewModel.hasSupabase ? [\"supabase\"] : [])\n ].filter(Boolean);\n return renderLiveStudioHtml({\n ...boot,\n mode: \"studio\",\n activeSessionId,\n stackSignals: [...new Set(stackSignals)]\n });\n}\n\nexport function renderSetupOfficeHtmlWithContext(cwd: string): string {\n const viewModel = getSetupFormViewModel(cwd);\n const context = scanProjectContext(cwd);\n const boot = buildOfficeBootConfig(cwd, viewModel);\n const stackSignals = [\n ...context.architecture.frameworks,\n ...context.architecture.testTools.slice(0, 2),\n ...(viewModel.hasSupabase ? [\"supabase\"] : [])\n ].filter(Boolean);\n return renderSetupOfficeHtml({ ...boot, mode: \"setup\", stackSignals: [...new Set(stackSignals)] });\n}\n","import type { RosterAgent } from \"../wizard/roster.js\";\nimport type { WizardDepth } from \"../wizard/steps.js\";\nimport type { OfficeStation } from \"./types.js\";\n\nexport const MAP_WIDTH = 28;\nexport const MAP_HEIGHT = 18;\nexport const TILE_SIZE = 24;\nexport const CANVAS_SCALE = 4;\n\nconst ALL_DEPTHS: WizardDepth[] = [\"quick\", \"standard\", \"complete\", \"undecided\"];\nconst STANDARD_DEPTHS: WizardDepth[] = [\"standard\", \"complete\"];\nconst COMPLETE_DEPTHS: WizardDepth[] = [\"complete\"];\n\nconst ZONE_STATIONS: Omit<OfficeStation, \"agentId\">[] = [\n { id: \"ide\", kind: \"zone\", label: \"IDE Terminal\", section: \"ide\", x: 1, y: 1, w: 4, h: 3, depths: ALL_DEPTHS },\n { id: \"product\", kind: \"zone\", label: \"Product Board\", section: \"product\", x: 22, y: 1, w: 5, h: 3, depths: ALL_DEPTHS },\n { id: \"access\", kind: \"zone\", label: \"Security Door\", section: \"access\", x: 1, y: 14, w: 4, h: 3, depths: ALL_DEPTHS },\n { id: \"ui\", kind: \"zone\", label: \"Design Corner\", section: \"ui\", x: 22, y: 14, w: 5, h: 3, depths: ALL_DEPTHS },\n { id: \"messaging\", kind: \"zone\", label: \"Marketing Booth\", section: \"messaging\", x: 11, y: 1, w: 6, h: 2, depths: ALL_DEPTHS },\n {\n id: \"visualQa\",\n kind: \"zone\",\n label: \"QA Camera\",\n section: \"visualQa\",\n x: 11,\n y: 15,\n w: 6,\n h: 2,\n depths: STANDARD_DEPTHS\n },\n {\n id: \"designDoc\",\n kind: \"zone\",\n label: \"Design Archive\",\n section: \"designDoc\",\n x: 6,\n y: 14,\n w: 4,\n h: 3,\n depths: COMPLETE_DEPTHS\n },\n {\n id: \"messagingDoc\",\n kind: \"zone\",\n label: \"Copy Archive\",\n section: \"messagingDoc\",\n x: 18,\n y: 14,\n w: 4,\n h: 3,\n depths: COMPLETE_DEPTHS\n },\n {\n id: \"applyDrafts\",\n kind: \"zone\",\n label: \"Publishing Desk\",\n section: \"applyDrafts\",\n x: 9,\n y: 8,\n w: 3,\n h: 2,\n depths: COMPLETE_DEPTHS\n },\n { id: \"review\", kind: \"review\", label: \"Review Board\", section: \"review\", x: 16, y: 8, w: 4, h: 2, depths: ALL_DEPTHS },\n {\n id: \"coffee\",\n kind: \"amenity\",\n label: \"Coffee Machine\",\n section: \"agent\",\n amenityId: \"coffee\",\n x: 12,\n y: 10,\n w: 2,\n h: 2,\n depths: ALL_DEPTHS\n },\n {\n id: \"cooler\",\n kind: \"amenity\",\n label: \"Water Cooler\",\n section: \"agent\",\n amenityId: \"cooler\",\n x: 14,\n y: 10,\n w: 2,\n h: 2,\n depths: ALL_DEPTHS\n }\n];\n\n/** Break-room rug tile bounds (inclusive tile coords). */\nexport const BREAK_ROOM_RUG = { x: 11, y: 9, w: 7, h: 4 };\n\nfunction agentDeskPositions(count: number): { x: number; y: number }[] {\n const positions: { x: number; y: number }[] = [];\n const cols = Math.min(5, Math.ceil(count / 2));\n const startX = 4;\n const startY = 5;\n const gapX = 4;\n const gapY = 5;\n for (let i = 0; i < count; i += 1) {\n const row = Math.floor(i / cols);\n const col = i % cols;\n positions.push({ x: startX + col * gapX, y: startY + row * gapY });\n }\n return positions;\n}\n\nexport function buildOfficeStations(agents: RosterAgent[]): OfficeStation[] {\n const desks = agentDeskPositions(agents.length);\n const agentStations: OfficeStation[] = agents.map((agent, index) => ({\n id: `agent-${agent.id}`,\n kind: \"agent\",\n label: agent.name,\n section: \"agent\",\n agentId: agent.id,\n x: desks[index]?.x ?? 4,\n y: desks[index]?.y ?? 5,\n w: 3,\n h: 3,\n depths: ALL_DEPTHS\n }));\n return [...ZONE_STATIONS, ...agentStations];\n}\n\nexport function stationsForDepth(stations: OfficeStation[], depth: WizardDepth): OfficeStation[] {\n if (depth === \"undecided\") return stations.filter((s) => s.depths.includes(\"quick\"));\n return stations.filter((s) => s.depths.includes(depth));\n}\n\nexport function amenityTileCenter(amenityId: \"coffee\" | \"cooler\"): { x: number; y: number } {\n const station = ZONE_STATIONS.find((s) => s.amenityId === amenityId);\n if (!station) return { x: 13, y: 10 };\n return { x: station.x + station.w / 2, y: station.y + station.h / 2 };\n}\n","import type { WizardSectionId } from \"../wizard/steps.js\";\nimport type { OfficeStation } from \"./types.js\";\n\n/** Map an office station to the wizard section used for onboarding progress. */\nexport function wizardSectionForStation(station: OfficeStation): WizardSectionId | null {\n if (station.kind === \"amenity\") return null;\n if (station.kind === \"agent\") return \"team\";\n if (station.section === \"agent\") return \"team\";\n return station.section;\n}\n\nexport function allAgentBriefsComplete(form: Record<string, string>, agentIds: string[]): boolean {\n if (agentIds.length === 0) return false;\n return agentIds.every((id) => Boolean(form[`agentBrief_${id}`]?.trim()));\n}\n","import { readFileSync } from \"node:fs\";\nimport { join } from \"node:path\";\nimport { findPackageRoot } from \"../../utils/package-root.js\";\nimport { scanProjectContext } from \"../context.js\";\nimport { getSetupFormViewModel, RECOMMENDED_SUPABASE_AUTH } from \"../setup-form.js\";\nimport { getIdeSurfaces } from \"./checklist.js\";\nimport { buildAgentWizardSteps, loadProjectRosterAgents } from \"./roster.js\";\nimport { WIZARD_STEPS, type WizardStepDef } from \"./steps.js\";\nimport { PACKAGE_VERSION } from \"../../config/defaults.js\";\n\nconst PRODUCT_CATEGORIES = [\"content-app\", \"saas\", \"admin\", \"marketplace\", \"tool\", \"ecommerce\", \"portfolio\", \"education\", \"community\", \"ai-workflow\", \"other\"];\n\nconst TENANT_MODELS = [\"single-user\", \"team\", \"tenant\", \"marketplace\", \"admin\", \"public-content\"];\n\nfunction readWizardAsset(name: string): string {\n const root = findPackageRoot();\n const distPath = join(root, \"dist\", \"studio\", \"wizard\", \"assets\", name);\n const srcPath = join(root, \"src\", \"studio\", \"wizard\", \"assets\", name);\n try {\n return readFileSync(distPath, \"utf8\");\n } catch {\n return readFileSync(srcPath, \"utf8\");\n }\n}\n\nexport interface WizardBootConfig {\n steps: WizardStepDef[];\n categories: string[];\n tenantModels: string[];\n recommendedSupabaseAuth: string;\n ideSurfaces: ReturnType<typeof getIdeSurfaces>;\n stackSignals: string[];\n hasSupabase: boolean;\n agents: ReturnType<typeof loadProjectRosterAgents>;\n}\n\nexport function mergeWizardSteps(cwd: string): WizardStepDef[] {\n const agentSteps = buildAgentWizardSteps(cwd) as WizardStepDef[];\n const ideIndex = WIZARD_STEPS.findIndex((step) => step.id === \"ide-surface\");\n if (ideIndex < 0) return [...WIZARD_STEPS, ...agentSteps];\n return [...WIZARD_STEPS.slice(0, ideIndex + 1), ...agentSteps, ...WIZARD_STEPS.slice(ideIndex + 1)];\n}\n\nexport function buildWizardBootConfig(cwd: string, viewModel: ReturnType<typeof getSetupFormViewModel>): WizardBootConfig {\n return {\n steps: mergeWizardSteps(cwd),\n categories: PRODUCT_CATEGORIES,\n tenantModels: TENANT_MODELS,\n recommendedSupabaseAuth: RECOMMENDED_SUPABASE_AUTH,\n ideSurfaces: getIdeSurfaces(),\n hasSupabase: viewModel.hasSupabase,\n stackSignals: [],\n agents: loadProjectRosterAgents(cwd)\n };\n}\n\nexport function renderSetupWizardHtml(boot?: WizardBootConfig): string {\n const css = readWizardAsset(\"wizard.css\");\n const js = readWizardAsset(\"wizard.js\");\n const bootJson = JSON.stringify(boot ?? { steps: WIZARD_STEPS, categories: PRODUCT_CATEGORIES, tenantModels: TENANT_MODELS }).replace(/</g, \"\\\\u003c\");\n\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 <title>Agent Kit Setup Wizard</title>\n <style>${css}</style>\n</head>\n<body data-view=\"wizard-v1\" data-kit-version=\"${PACKAGE_VERSION}\">\n <div class=\"office-banner\" role=\"navigation\" aria-label=\"Agent Office\">\n <a href=\"/\" class=\"office-banner-link\">\n <span class=\"office-banner-title\">Open Agent Office</span>\n <span class=\"office-banner-sub\">Pixel setup — walk the floor, click desks, brief your team</span>\n </a>\n </div>\n <div class=\"shell\">\n <aside class=\"rail\" aria-label=\"Setup progress\">\n <h1>Form view</h1>\n <a href=\"/\" class=\"office-cta-card\">\n <span class=\"office-cta-label\">Agent Office</span>\n <span class=\"office-cta-desc\">Gamified pixel setup (recommended)</span>\n <span class=\"office-cta-action\">Open office →</span>\n </a>\n <div class=\"project\" id=\"project-name\">…</div>\n <div class=\"ring-wrap\">\n <div class=\"ring\" id=\"progress-ring\" style=\"--pct: 0\"><span id=\"ring-pct\">0%</span></div>\n <div>\n <div style=\"font-weight:600;color:#f8fafc\">Setup progress</div>\n <div style=\"font-size:13px;color:#94a3b8\">Save anytime — resume with agent-kit setup</div>\n <div class=\"wizard-level-pill\" id=\"wizard-level-pill\" hidden aria-live=\"polite\">L3 → L5</div>\n </div>\n </div>\n <ul class=\"section-nav\" id=\"section-nav\"></ul>\n </aside>\n <div class=\"main\">\n <div id=\"status\" class=\"status\" role=\"status\" aria-live=\"polite\"></div>\n <article class=\"card\" id=\"wizard-card\" aria-labelledby=\"step-title\"></article>\n <div class=\"footer\" id=\"wizard-footer\">\n <a href=\"/\" class=\"btn office-footer-btn\">Agent Office</a>\n <div class=\"footer-actions\">\n <button type=\"button\" class=\"btn secondary hidden\" id=\"back-btn\">Back</button>\n <button type=\"button\" class=\"btn primary\" id=\"next-btn\">Next</button>\n <button type=\"button\" class=\"btn primary hidden\" id=\"save-btn\">Save project context</button>\n </div>\n </div>\n </div>\n </div>\n <script>window.WIZARD_BOOT = ${bootJson};</script>\n <script>${js}</script>\n</body>\n</html>`;\n}\n\nexport function renderSetupWizardHtmlWithContext(cwd: string): string {\n const viewModel = getSetupFormViewModel(cwd);\n const context = scanProjectContext(cwd);\n const boot = buildWizardBootConfig(cwd, viewModel);\n const stackSignals = [\n ...context.architecture.frameworks,\n ...context.architecture.testTools.slice(0, 2),\n ...(viewModel.hasSupabase ? [\"supabase\"] : [])\n ].filter(Boolean);\n return renderSetupWizardHtml({ ...boot, stackSignals: [...new Set(stackSignals)] });\n}\n","import { existsSync, readFileSync } from \"node:fs\";\nimport { join } from \"node:path\";\nimport { AgenticLevelContract, type AgenticLevelContractValue } from \"../config/contracts.js\";\nimport { createAuditReport } from \"../install/audit.js\";\nimport { validateAdapter, type AdapterValidationTarget } from \"../install/adapter-validate.js\";\nimport { scanProjectContext } from \"./context.js\";\nimport { loadOnboardingState, saveOnboardingState } from \"./onboarding-state.js\";\nimport { detectIdeRulePresent, type IdeSurface } from \"./wizard/checklist.js\";\nimport { nowIso } from \"./shared.js\";\n\nexport type AgenticLevelNumber = 3 | 4 | 5 | 6 | 7 | 8;\nexport type AgenticLevelSignal = AgenticLevelContractValue[\"signals\"][number];\nexport type AgenticLevelReport = AgenticLevelContractValue;\n\nconst CACHE_TTL_MS = 30_000;\nconst cache = new Map<string, { at: number; report: AgenticLevelReport }>();\n\nexport function isMaintainerSourceRepo(cwd: string): boolean {\n return existsSync(join(cwd, \"package.json\")) && existsSync(join(cwd, \"src\")) && existsSync(join(cwd, \"templates\"));\n}\n\nfunction signal(id: string, level: 3 | 4 | 5 | 6, label: string, pass: boolean, evidence: string, remediation: string): AgenticLevelSignal {\n return { id, level, label, pass, evidence, remediation };\n}\n\nfunction detectIdePresent(cwd: string): { pass: boolean; evidence: string } {\n const onboarding = loadOnboardingState(cwd);\n if (onboarding.ideSurface && detectIdeRulePresent(cwd, onboarding.ideSurface)) {\n return { pass: true, evidence: `${onboarding.ideSurface} adapter configured` };\n }\n const surfaces: IdeSurface[] = [\"cursor\", \"copilot\", \"claude\", \"codex\"];\n for (const surface of surfaces) {\n if (detectIdeRulePresent(cwd, surface)) {\n return { pass: true, evidence: `${surface} adapter files detected` };\n }\n }\n if (existsSync(join(cwd, \".cursor/rules/cursor-agent-kit.mdc\"))) {\n return { pass: true, evidence: \"Cursor council rules from init\" };\n }\n return { pass: false, evidence: \"No IDE adapter rules or subagents detected\" };\n}\n\nfunction detectTierBSubagents(cwd: string): { pass: boolean; evidence: string } {\n const paths = [\".cursor/agents/planner.md\", \".codex/agents/planner.toml\", \".claude/agents/planner.md\", \".github/copilot-instructions.md\"];\n const found = paths.filter((rel) => existsSync(join(cwd, rel)));\n if (found.length > 0) {\n return { pass: true, evidence: `Specialist surface: ${found[0]}` };\n }\n return { pass: false, evidence: \"No council subagents or Copilot instructions installed\" };\n}\n\nfunction readDocSnippet(cwd: string, name: string, needles: string[]): boolean {\n const path = join(cwd, name);\n if (!existsSync(path)) return false;\n const lower = readFileSync(path, \"utf8\").toLowerCase();\n return needles.every((needle) => lower.includes(needle.toLowerCase()));\n}\n\nfunction adapterTargetForIde(ide: IdeSurface | undefined): AdapterValidationTarget | null {\n if (ide === \"cursor\" || ide === \"codex\" || ide === \"claude\" || ide === \"copilot\") return ide;\n return null;\n}\n\nfunction buildSignals(cwd: string, maintainerProfile: boolean): AgenticLevelSignal[] {\n const signals: AgenticLevelSignal[] = [];\n const ide = detectIdePresent(cwd);\n signals.push(\n signal(\n \"l3-ide\",\n 3,\n \"AI-native IDE or adapter rules\",\n ide.pass,\n ide.evidence,\n \"Run agent-kit init and complete the IDE station, or agent-kit init --activate cursor|codex\"\n )\n );\n\n const context = scanProjectContext(cwd);\n const openQuestions = context.openQuestions.length;\n const contextReady =\n Boolean(context.productSummary.trim()) &&\n Boolean(context.primaryAudience.trim()) &&\n Boolean(context.authModel.trim()) &&\n context.primaryWorkflows.length > 0 &&\n openQuestions === 0;\n\n signals.push(\n signal(\n \"l4-agents-md\",\n 4,\n \"Council contract (AGENTS.md)\",\n existsSync(join(cwd, \"AGENTS.md\")),\n existsSync(join(cwd, \"AGENTS.md\")) ? \"AGENTS.md installed\" : \"AGENTS.md missing\",\n \"Run agent-kit init --stack next-supabase\"\n )\n );\n signals.push(\n signal(\n \"l4-adapters-doc\",\n 4,\n \"Assistant activation doc\",\n existsSync(join(cwd, \"ASSISTANT_ADAPTERS.md\")),\n existsSync(join(cwd, \"ASSISTANT_ADAPTERS.md\")) ? \"ASSISTANT_ADAPTERS.md installed\" : \"ASSISTANT_ADAPTERS.md missing\",\n \"Run agent-kit init or agent-kit update\"\n )\n );\n signals.push(\n signal(\n \"l4-roster\",\n 4,\n \"Machine-readable council roster\",\n existsSync(join(cwd, \".agent-kit/agent-roster.json\")),\n existsSync(join(cwd, \".agent-kit/agent-roster.json\")) ? \".agent-kit/agent-roster.json present\" : \"Roster missing\",\n \"Run agent-kit init or agent-kit update\"\n )\n );\n signals.push(\n signal(\n \"l4-project-context\",\n 4,\n \"Project context without open questions\",\n contextReady,\n contextReady\n ? \"Core project context fields complete\"\n : openQuestions > 0\n ? `${openQuestions} open question(s) remain`\n : \"Fill product, audience, auth, and workflows in setup\",\n \"Complete setup wizard or edit .agent-kit/project-context.json\"\n )\n );\n\n const tierB = detectTierBSubagents(cwd);\n signals.push(\n signal(\"l5-subagents\", 5, \"Tier-B specialist activation\", tierB.pass, tierB.evidence, \"Run agent-kit init --activate cursor|codex|claude|copilot\")\n );\n\n const loopCoding = existsSync(join(cwd, \"LOOP_CODING.md\"));\n signals.push(\n signal(\n \"l6-loop-coding\",\n 6,\n \"Loop coding playbook\",\n loopCoding,\n loopCoding ? \"LOOP_CODING.md installed\" : \"LOOP_CODING.md missing\",\n \"Run agent-kit update or agent-kit init on a current kit version\"\n )\n );\n\n let auditPass = false;\n let auditEvidence = \"Audit not run\";\n try {\n const audit = createAuditReport(cwd);\n auditPass = audit.summary.fail === 0 && audit.readiness.level !== \"needs-setup\";\n auditEvidence = `${audit.summary.pass} pass / ${audit.summary.warn} warn / ${audit.summary.fail} fail · ${audit.readiness.level}`;\n } catch (error) {\n auditEvidence = error instanceof Error ? error.message : String(error);\n }\n signals.push(\n signal(\n \"l6-audit-gate\",\n 6,\n \"Audit gate at baseline-setup or better\",\n auditPass,\n auditEvidence,\n \"Run agent-kit audit --min-readiness baseline-setup and fix failures\"\n )\n );\n\n if (maintainerProfile) {\n const pkgPath = join(cwd, \"package.json\");\n let releaseCheck = false;\n if (existsSync(pkgPath)) {\n try {\n const pkg = JSON.parse(readFileSync(pkgPath, \"utf8\")) as { scripts?: Record<string, string> };\n releaseCheck = Boolean(pkg.scripts?.[\"release:check\"]) && existsSync(join(cwd, \"scripts/release-check.mjs\"));\n } catch {\n releaseCheck = false;\n }\n }\n signals.push(\n signal(\n \"l6-maintainer-release-check\",\n 6,\n \"Maintainer release-check gate\",\n releaseCheck,\n releaseCheck ? \"npm run release:check wired in package.json\" : \"release:check script missing\",\n \"Use npm run release:check before merge; see MAINTAINER_RELEASE.md\"\n )\n );\n const maintainerDocs = existsSync(join(cwd, \"MAINTAINER_RELEASE.md\")) || readDocSnippet(cwd, \"DOCS.md\", [\"maintainer dogfood\", \"dogfood:init\"]);\n signals.push(\n signal(\n \"l6-maintainer-docs\",\n 6,\n \"Maintainer dogfood and release evidence docs\",\n maintainerDocs,\n maintainerDocs ? \"Maintainer climb docs present\" : \"Add MAINTAINER_RELEASE.md / DOCS maintainer section\",\n \"Read MAINTAINER_RELEASE.md and run npm run dogfood:init locally\"\n )\n );\n } else {\n const onboarding = loadOnboardingState(cwd);\n const adapterTarget = adapterTargetForIde(onboarding.ideSurface);\n let adapterPass = false;\n let adapterEvidence = \"No IDE surface selected for validation\";\n if (adapterTarget) {\n const report = validateAdapter(cwd, adapterTarget);\n adapterPass = report.summary.fail === 0;\n adapterEvidence = `${adapterTarget}: ${report.summary.pass} pass / ${report.summary.warn} warn / ${report.summary.fail} fail`;\n } else if (tierB.pass) {\n const report = validateAdapter(cwd, \"cursor\");\n adapterPass = report.summary.fail === 0;\n adapterEvidence = `cursor (detected): ${report.summary.pass} pass / ${report.summary.fail} fail`;\n }\n signals.push(\n signal(\"l6-adapter-validate\", 6, \"Adapter validate for active IDE\", adapterPass, adapterEvidence, \"Run agent-kit adapter validate cursor|codex|all\")\n );\n\n const ciWorkflow = existsSync(join(cwd, \".github/workflows/agent-kit-audit.yml\"));\n const testingEval = existsSync(join(cwd, \"TESTING.md\")) && readDocSnippet(cwd, \"TESTING.md\", [\"agent-kit audit\", \"eval\"]);\n const evalLoop = ciWorkflow || testingEval;\n signals.push(\n signal(\n \"l6-eval-loop\",\n 6,\n \"Eval-driven loop documented in CI or TESTING.md\",\n evalLoop,\n ciWorkflow\n ? \".github/workflows/agent-kit-audit.yml present\"\n : testingEval\n ? \"TESTING.md documents eval/audit loop\"\n : \"No CI audit workflow or TESTING eval section\",\n \"Enable agent-kit-audit.yml or add eval loop section to TESTING.md (see LOOP_CODING.md)\"\n )\n );\n }\n\n return signals;\n}\n\nfunction computeCurrentLevel(signals: AgenticLevelSignal[]): 3 | 4 | 5 | 6 {\n let current: 3 | 4 | 5 | 6 = 3;\n for (const level of [3, 4, 5, 6] as const) {\n const tier = signals.filter((item) => item.level === level);\n if (tier.length === 0) continue;\n if (tier.every((item) => item.pass)) {\n current = level;\n } else {\n break;\n }\n }\n return current;\n}\n\nfunction defaultTargetLevel(maintainerProfile: boolean): AgenticLevelNumber {\n return maintainerProfile ? 6 : 5;\n}\n\nexport function resolveTargetLevel(cwd: string, maintainerProfile: boolean): AgenticLevelNumber {\n const onboarding = loadOnboardingState(cwd);\n const raw = onboarding.targetAgenticLevel;\n if (raw && raw >= 3 && raw <= 8) return raw;\n return defaultTargetLevel(maintainerProfile);\n}\n\nexport function computeAgenticLevel(cwd: string, options: { forceRefresh?: boolean } = {}): AgenticLevelReport {\n const cacheKey = cwd;\n const cached = cache.get(cacheKey);\n if (!options.forceRefresh && cached && Date.now() - cached.at < CACHE_TTL_MS) {\n return cached.report;\n }\n\n const maintainerProfile = isMaintainerSourceRepo(cwd);\n const signals = buildSignals(cwd, maintainerProfile);\n const currentLevel = computeCurrentLevel(signals);\n const targetLevel = resolveTargetLevel(cwd, maintainerProfile);\n const climbSteps = signals.filter((item) => !item.pass && item.level <= Math.min(targetLevel, 6)).slice(0, 5);\n\n const report: AgenticLevelReport = AgenticLevelContract.parse({\n currentLevel,\n targetLevel,\n maintainerProfile,\n computedAt: nowIso(),\n maintainerNote: maintainerProfile ? \"Kit source repo — run npm run dogfood:init locally; overlay is gitignored.\" : undefined,\n signals,\n climbSteps\n });\n\n cache.set(cacheKey, { at: Date.now(), report });\n saveOnboardingState(cwd, {\n lastAgenticLevel: currentLevel,\n lastAgenticComputedAt: report.computedAt\n });\n\n return report;\n}\n\nexport function summarizeAdapterValidation(\n cwd: string,\n ideSurface: IdeSurface | undefined\n): { pass: number; warn: number; fail: number; target: string | null } {\n const target = adapterTargetForIde(ideSurface);\n if (!target) {\n return { pass: 0, warn: 0, fail: 0, target: null };\n }\n const report = validateAdapter(cwd, target);\n return {\n pass: report.summary.pass,\n warn: report.summary.warn,\n fail: report.summary.fail,\n target\n };\n}\n\nexport function invalidateAgenticLevelCache(cwd: string): void {\n cache.delete(cwd);\n}\n","import { watch, type FSWatcher } from \"node:fs\";\nimport { createServer, type IncomingMessage, type Server, type ServerResponse } from \"node:http\";\nimport { join } from \"node:path\";\nimport { getActiveSessionId, listSessions, readSession, readSessionEvents, recordSessionNote, renderSession } from \"./session.js\";\nimport { renderLiveStudioHtmlWithContext } from \"./office/render.js\";\nimport { COUNCIL_SESSIONS_DIR, ensureStudioDirs, readJsonBody } from \"./shared.js\";\n\nexport interface StudioServerOptions {\n cwd: string;\n port?: number;\n host?: string;\n}\n\nexport interface StudioServerHandle {\n url: string;\n port: number;\n requestedPort: number;\n portFallback: boolean;\n close: () => Promise<void>;\n}\n\nconst DEFAULT_PORT = 9331;\nconst DEFAULT_HOST = \"127.0.0.1\";\n\ntype SseClient = ServerResponse;\n\nconst sseClients = new Set<SseClient>();\nlet activeWatcher: FSWatcher | null = null;\nlet watchedEventsPath: string | null = null;\n\nfunction sendJson(response: ServerResponse, statusCode: number, payload: unknown): void {\n response.writeHead(statusCode, {\n \"Content-Type\": \"application/json; charset=utf-8\",\n \"Cache-Control\": \"no-store\"\n });\n response.end(JSON.stringify(payload));\n}\n\nfunction sendHtml(response: ServerResponse, html: string): void {\n response.writeHead(200, {\n \"Content-Type\": \"text/html; charset=utf-8\",\n \"Cache-Control\": \"no-store\",\n \"Content-Security-Policy\":\n \"default-src 'none'; connect-src 'self'; style-src 'unsafe-inline'; script-src 'unsafe-inline'; img-src data:; base-uri 'none'; form-action 'self'\"\n });\n response.end(html);\n}\n\nfunction broadcastSse(event: string, data: unknown): void {\n const payload = `event: ${event}\\ndata: ${JSON.stringify(data)}\\n\\n`;\n for (const client of sseClients) {\n try {\n client.write(payload);\n } catch {\n sseClients.delete(client);\n }\n }\n}\n\nfunction stopWatcher(): void {\n if (activeWatcher) {\n activeWatcher.close();\n activeWatcher = null;\n watchedEventsPath = null;\n }\n}\n\nfunction watchSessionEvents(cwd: string, sessionId: string): void {\n const eventsPath = join(cwd, COUNCIL_SESSIONS_DIR, sessionId, \"events.jsonl\");\n if (watchedEventsPath === eventsPath && activeWatcher) return;\n stopWatcher();\n watchedEventsPath = eventsPath;\n try {\n activeWatcher = watch(eventsPath, () => {\n try {\n const events = readSessionEvents(cwd, sessionId);\n const latest = events.at(-1);\n if (latest) broadcastSse(\"event\", { sessionId, event: latest, total: events.length });\n } catch {\n // file may be mid-write\n }\n });\n } catch {\n watchedEventsPath = null;\n activeWatcher = null;\n }\n}\n\nfunction safeSessionId(raw: string): string | null {\n if (!/^[a-z0-9-]+$/i.test(raw)) return null;\n return raw;\n}\n\nfunction handleRequest(cwd: string, request: IncomingMessage, response: ServerResponse): void {\n handleRequestAsync(cwd, request, response).catch((error) => {\n sendJson(response, 500, { error: error instanceof Error ? error.message : String(error) });\n });\n}\n\nasync function handleRequestAsync(cwd: string, request: IncomingMessage, response: ServerResponse): Promise<void> {\n const url = new URL(request.url ?? \"/\", \"http://127.0.0.1\");\n\n if (request.method === \"GET\" && (url.pathname === \"/\" || url.pathname === \"/office\")) {\n sendHtml(response, renderLiveStudioHtmlWithContext(cwd));\n return;\n }\n\n if (request.method === \"GET\" && url.pathname === \"/api/sessions\") {\n ensureStudioDirs(cwd);\n let activeSessionId = \"\";\n try {\n activeSessionId = getActiveSessionId(cwd);\n } catch {\n activeSessionId = \"\";\n }\n const sessions = listSessions(cwd);\n sendJson(response, 200, { activeSessionId, sessions });\n return;\n }\n\n const eventsMatch = url.pathname.match(/^\\/api\\/sessions\\/([^/]+)\\/events$/);\n if (request.method === \"GET\" && eventsMatch) {\n const sessionId = safeSessionId(eventsMatch[1] ?? \"\");\n if (!sessionId) {\n sendJson(response, 400, { error: \"Invalid session id.\" });\n return;\n }\n try {\n const session = readSession(cwd, sessionId);\n const events = readSessionEvents(cwd, sessionId);\n sendJson(response, 200, { session, events });\n } catch (error) {\n sendJson(response, 404, { error: error instanceof Error ? error.message : String(error) });\n }\n return;\n }\n\n if (request.method === \"GET\" && url.pathname === \"/api/events/stream\") {\n const sessionId = url.searchParams.get(\"sessionId\") ?? \"\";\n let activeId = sessionId;\n if (!activeId) {\n try {\n activeId = getActiveSessionId(cwd);\n } catch {\n sendJson(response, 404, { error: \"No active session.\" });\n return;\n }\n }\n if (!safeSessionId(activeId)) {\n sendJson(response, 400, { error: \"Invalid session id.\" });\n return;\n }\n\n response.writeHead(200, {\n \"Content-Type\": \"text/event-stream; charset=utf-8\",\n \"Cache-Control\": \"no-store\",\n Connection: \"keep-alive\"\n });\n response.write(\": connected\\n\\n\");\n sseClients.add(response);\n watchSessionEvents(cwd, activeId);\n\n try {\n const events = readSessionEvents(cwd, activeId);\n response.write(`event: snapshot\\ndata: ${JSON.stringify({ sessionId: activeId, events })}\\n\\n`);\n } catch {\n response.write(`event: snapshot\\ndata: ${JSON.stringify({ sessionId: activeId, events: [] })}\\n\\n`);\n }\n\n request.on(\"close\", () => {\n sseClients.delete(response);\n if (sseClients.size === 0) stopWatcher();\n });\n return;\n }\n\n const noteMatch = url.pathname.match(/^\\/api\\/sessions\\/([^/]+)\\/note$/);\n if (request.method === \"POST\" && noteMatch) {\n const sessionId = safeSessionId(noteMatch[1] ?? \"\");\n if (!sessionId) {\n sendJson(response, 400, { error: \"Invalid session id.\" });\n return;\n }\n try {\n const body = (await readJsonBody(request)) as { agent?: string; text?: string };\n const agent = typeof body.agent === \"string\" ? body.agent.trim() : \"\";\n const text = typeof body.text === \"string\" ? body.text.trim() : \"\";\n if (!agent) {\n sendJson(response, 400, { error: \"agent is required.\" });\n return;\n }\n if (!text) {\n sendJson(response, 400, { error: \"text is required.\" });\n return;\n }\n if (text.length >= 4000) {\n sendJson(response, 400, { error: \"text must be under 4000 characters.\" });\n return;\n }\n const event = recordSessionNote(cwd, sessionId, agent, text);\n broadcastSse(\"event\", { sessionId, event, total: readSessionEvents(cwd, sessionId).length });\n sendJson(response, 200, { event });\n } catch (error) {\n sendJson(response, 404, { error: error instanceof Error ? error.message : String(error) });\n }\n return;\n }\n\n const renderMatch = url.pathname.match(/^\\/api\\/sessions\\/([^/]+)\\/render$/);\n if (request.method === \"POST\" && renderMatch) {\n const sessionId = safeSessionId(renderMatch[1] ?? \"\");\n if (!sessionId) {\n sendJson(response, 400, { error: \"Invalid session id.\" });\n return;\n }\n try {\n const result = renderSession(cwd, sessionId);\n sendJson(response, 200, {\n rendered: true,\n sessionId: result.sessionId,\n sessionPath: result.sessionPath,\n files: [`${result.sessionPath}/index.md`, `${result.sessionPath}/transcript.md`]\n });\n } catch (error) {\n sendJson(response, 404, { error: error instanceof Error ? error.message : String(error) });\n }\n return;\n }\n\n sendJson(response, 404, { error: \"Not found.\" });\n}\n\nfunction listen(server: Server, host: string, port: number): Promise<number> {\n return new Promise((resolve, reject) => {\n server.once(\"error\", reject);\n server.listen(port, host, () => {\n const address = server.address();\n if (!address || typeof address === \"string\") {\n reject(new Error(\"Could not determine studio server port.\"));\n return;\n }\n resolve(address.port);\n });\n });\n}\n\nexport async function startStudioServer(options: StudioServerOptions): Promise<StudioServerHandle> {\n const host = options.host ?? DEFAULT_HOST;\n const requestedPort = options.port ?? DEFAULT_PORT;\n ensureStudioDirs(options.cwd);\n\n const server = createServer((request, response) => {\n try {\n handleRequest(options.cwd, request, response);\n } catch (error) {\n sendJson(response, 500, { error: error instanceof Error ? error.message : String(error) });\n }\n });\n\n let port = requestedPort;\n let portFallback = false;\n try {\n port = await listen(server, host, requestedPort);\n } catch (error) {\n if (error instanceof Error && \"code\" in error && error.code === \"EADDRINUSE\") {\n portFallback = true;\n port = await listen(server, host, 0);\n } else {\n throw error;\n }\n }\n\n return {\n url: `http://${host}:${port}`,\n port,\n requestedPort,\n portFallback,\n close: () =>\n new Promise((resolve, reject) => {\n stopWatcher();\n for (const client of sseClients) {\n try {\n client.end();\n } catch {\n // ignore\n }\n }\n sseClients.clear();\n server.close((closeError) => {\n if (closeError) reject(closeError);\n else resolve();\n });\n })\n };\n}\n","import { existsSync, readFileSync } from \"node:fs\";\nimport { extname, join } from \"node:path\";\nimport {\n closeSession,\n recordArtifact,\n recordCorrection,\n recordDecision,\n recordHandoff,\n recordNote,\n recordRequiredOutput,\n recordVerification,\n renderActiveSession,\n startSession,\n getActiveSessionId,\n type HandoffOptions,\n type SessionCommandResult,\n type StartSessionOptions\n} from \"./session.js\";\n\nexport interface SessionCheckpointPayload {\n start?: StartSessionOptions;\n notes?: Array<{ agent: string; text: string }>;\n decisions?: Array<{ agent: string; text: string; risk?: string }>;\n handoffs?: Array<HandoffOptions>;\n corrections?: Array<{ agent?: string; scope?: \"session\" | \"project\" | \"agent\" | \"upstream-proposal\"; text: string }>;\n artifacts?: Array<{ file: string; note?: string }>;\n verifications?: Array<{ command: string; result: \"pass\" | \"fail\" | \"skipped\"; notes?: string }>;\n outputs?: Array<{ name: string; status: \"missing\" | \"partial\" | \"complete\" | \"not-applicable\"; evidence?: string }>;\n render?: boolean;\n close?: boolean | \"planned\" | \"in-progress\" | \"blocked\" | \"complete\";\n}\n\nexport interface SessionCheckpointResult extends SessionCommandResult {\n applied: {\n notes: number;\n decisions: number;\n handoffs: number;\n corrections: number;\n artifacts: number;\n verifications: number;\n outputs: number;\n };\n rendered: boolean;\n closed: boolean;\n}\n\nfunction parseCheckpointMarkdown(content: string): SessionCheckpointPayload {\n const payload: SessionCheckpointPayload = { notes: [], decisions: [], handoffs: [], outputs: [] };\n const sections = content.split(/^## /m).slice(1);\n for (const section of sections) {\n const [headingLine, ...bodyLines] = section.split(\"\\n\");\n if (!headingLine) continue;\n const heading = headingLine.trim().toLowerCase();\n const lines = bodyLines.map((line) => line.trim()).filter(Boolean);\n if (heading === \"notes\") {\n for (const line of lines) {\n const match = line.match(/^-?\\s*@(\\S+):\\s*(.+)$/);\n if (match?.[1] && match[2]) payload.notes?.push({ agent: match[1], text: match[2] });\n }\n }\n if (heading === \"decisions\") {\n for (const line of lines) {\n const match = line.match(/^-?\\s*@(\\S+):\\s*(.+?)(?:\\s+\\(risk:\\s*(.+)\\))?$/i);\n if (match?.[1] && match[2]) {\n payload.decisions?.push({ agent: match[1], text: match[2], ...(match[3] ? { risk: match[3] } : {}) });\n }\n }\n }\n if (heading === \"handoffs\") {\n for (const line of lines) {\n const match = line.match(/^-?\\s*(\\S+)\\s*->\\s*(\\S+):\\s*(.+?)\\s+\\|\\s*risk:\\s*(.+)$/i);\n if (match?.[1] && match?.[2] && match?.[3] && match?.[4]) {\n payload.handoffs?.push({\n fromAgentId: match[1],\n toAgentId: match[2],\n decision: match[3],\n risk: match[4]\n });\n }\n }\n }\n if (heading === \"outputs\") {\n for (const line of lines) {\n const match = line.match(/^-?\\s*(.+?):\\s*(missing|partial|complete|not-applicable)(?:\\s+\\|\\s*(.+))?$/i);\n if (match?.[1] && match?.[2]) {\n payload.outputs?.push({\n name: match[1].trim(),\n status: match[2].toLowerCase() as \"missing\" | \"partial\" | \"complete\" | \"not-applicable\",\n ...(match[3] ? { evidence: match[3].trim() } : {})\n });\n }\n }\n }\n if (heading === \"options\") {\n if (lines.some((line) => /render:\\s*true/i.test(line))) payload.render = true;\n if (lines.some((line) => /close:\\s*true/i.test(line))) payload.close = true;\n }\n }\n return payload;\n}\n\nexport function parseCheckpointFile(filePath: string): SessionCheckpointPayload {\n const content = readFileSync(filePath, \"utf8\");\n const ext = extname(filePath).toLowerCase();\n if (ext === \".json\") {\n const parsed = JSON.parse(content) as SessionCheckpointPayload;\n if (!parsed || typeof parsed !== \"object\") throw new Error(\"Checkpoint JSON must be an object.\");\n return parsed;\n }\n if (ext === \".md\" || ext === \".markdown\") return parseCheckpointMarkdown(content);\n throw new Error(\"Checkpoint file must be .json or .md\");\n}\n\nexport function applySessionCheckpoint(cwd: string, payload: SessionCheckpointPayload): SessionCheckpointResult {\n const applied = {\n notes: 0,\n decisions: 0,\n handoffs: 0,\n corrections: 0,\n artifacts: 0,\n verifications: 0,\n outputs: 0\n };\n\n if (payload.start) {\n startSession(cwd, payload.start);\n }\n\n for (const note of payload.notes ?? []) {\n recordNote(cwd, note.agent, note.text);\n applied.notes += 1;\n }\n\n for (const decision of payload.decisions ?? []) {\n recordDecision(cwd, decision.agent, decision.text, decision.risk);\n applied.decisions += 1;\n }\n\n for (const handoff of payload.handoffs ?? []) {\n recordHandoff(cwd, handoff);\n applied.handoffs += 1;\n }\n\n for (const correction of payload.corrections ?? []) {\n recordCorrection(cwd, {\n scope: correction.scope ?? \"session\",\n text: correction.text,\n ...(correction.agent ? { agentId: correction.agent } : {})\n });\n applied.corrections += 1;\n }\n\n for (const artifact of payload.artifacts ?? []) {\n recordArtifact(cwd, artifact.file, artifact.note);\n applied.artifacts += 1;\n }\n\n for (const verification of payload.verifications ?? []) {\n recordVerification(cwd, verification.command, verification.result, verification.notes);\n applied.verifications += 1;\n }\n\n for (const output of payload.outputs ?? []) {\n recordRequiredOutput(cwd, output.name, output.status, output.evidence);\n applied.outputs += 1;\n }\n\n let rendered = false;\n if (payload.render !== false) {\n renderActiveSession(cwd);\n rendered = true;\n }\n\n let closed = false;\n if (payload.close) {\n const status = payload.close === true ? \"complete\" : payload.close;\n closeSession(cwd, status);\n closed = true;\n }\n\n const sessionId = getActiveSessionId(cwd);\n return {\n sessionId,\n sessionPath: `.agent-kit/council-sessions/${sessionId}`,\n applied,\n rendered,\n closed\n };\n}\n\nexport function checkpointSessionFromFile(cwd: string, filePath: string): SessionCheckpointResult {\n const absolute = join(cwd, filePath);\n if (!existsSync(absolute)) throw new Error(`Checkpoint file not found: ${filePath}`);\n return applySessionCheckpoint(cwd, parseCheckpointFile(absolute));\n}\n","import pc from \"picocolors\";\n\nconst colorEnabled = process.env.NO_COLOR === undefined && process.stdout.isTTY === true;\n\nfunction paint(painter: (text: string) => string, text: string): string {\n return colorEnabled ? painter(text) : text;\n}\n\nexport const style = {\n heading: (text: string) => paint(pc.cyan, text),\n pass: (text: string) => paint(pc.green, text),\n warn: (text: string) => paint(pc.yellow, text),\n fail: (text: string) => paint(pc.red, text),\n dim: (text: string) => paint(pc.dim, text),\n bold: (text: string) => paint(pc.bold, text)\n};\n\nexport function levelLabel(level: \"pass\" | \"warn\" | \"fail\"): string {\n const label = level.toUpperCase().padEnd(4);\n if (level === \"pass\") return style.pass(label);\n if (level === \"warn\") return style.warn(label);\n return style.fail(label);\n}\n\nexport function printJson(value: unknown): void {\n console.log(JSON.stringify(value, null, 2));\n}\n\nexport function heading(text: string): void {\n console.log(style.heading(text));\n}\n\nexport function line(text = \"\"): void {\n console.log(text);\n}\n\nexport function detail(text: string): void {\n console.log(style.dim(` ${text}`));\n}\n\nexport function listItem(text: string): void {\n console.log(`- ${text}`);\n}\n\n/** Print a labeled list of file paths, skipping empty groups. */\nexport function fileGroup(label: string, files: string[]): void {\n if (files.length === 0) return;\n console.log(`${style.bold(label)} (${files.length})`);\n for (const file of files) console.log(` ${file}`);\n}\n\nexport function fail(message: string): void {\n console.error(style.fail(`error: ${message}`));\n}\n"],"mappings":"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","names":["existsSync","readFileSync","writeFileSync","join","existsSync","readFileSync","join","existsSync","dirname","join","resolve","join","existsSync","readFileSync","existsSync","readFileSync","join","existsSync","readFileSync","basename","dirname","join","join","existsSync","readFileSync","dirname","line","basename","resolve","existsSync","readFileSync","join","context","existsSync","join","existsSync","readFileSync","join","join","existsSync","readFileSync","line","context","context","existsSync","join","existsSync","readFileSync","join","existsSync","readFileSync","join","existsSync","readFileSync","readdirSync","join","existsSync","readFileSync","join","join","existsSync","readFileSync","line","join","existsSync","readFileSync","readdirSync","join","existsSync","readFileSync","adapter","join","existsSync","readFileSync","adapter","context","join","existsSync","readFileSync","join","existsSync","readFileSync","sessionDir","eventsPath","line","session","readPackageJson","summary","readFileSync","isRecord","join","existsSync","existsSync","readFileSync","join","existsSync","readFileSync","join","existsSync","readFileSync","join","relative","readFileSync","existsSync","join","relative","files","adapter","summary","readFileSync","join","z","join","readFileSync","existsSync","mkdirSync","readFileSync","join","existsSync","readFileSync","join","join","existsSync","readFileSync","join","existsSync","readFileSync","mkdirSync","existsSync","readFileSync","readdirSync","join","line","join","existsSync","readdirSync","readFileSync","summary","existsSync","readFileSync","readdirSync","statSync","join","session","join","existsSync","readdirSync","statSync","readFileSync","correction","detail","context","session","resolve","line","context","uniqueEvidence","existsSync","readFileSync","join","existsSync","join","readFileSync","existsSync","readFileSync","join","join","existsSync","readFileSync","readFileSync","join","join","readFileSync","context","readFileSync","join","PRODUCT_CATEGORIES","TENANT_MODELS","join","readFileSync","context","existsSync","readFileSync","join","existsSync","join","readFileSync","context","report","resolve","createServer","join","DEFAULT_PORT","DEFAULT_HOST","sendJson","sendHtml","eventsPath","join","handleRequest","session","listen","resolve","createServer","existsSync","readFileSync","join","heading","line","readFileSync","correction","join","existsSync","join","existsSync","context","readFileSync","writeFileSync","resolve","report"]}