@appsforgood/next-supabase-kit 0.1.3 → 0.1.4
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/CHANGELOG.md +9 -0
- package/assistant-adapters/codex-agents.md +15 -0
- package/assistant-adapters/cursor-agent-kit.mdc +1 -0
- package/assistant-adapters/cursor-frontend.mdc +16 -0
- package/assistant-adapters/cursor-planner.mdc +14 -0
- package/assistant-adapters/cursor-security.mdc +18 -0
- package/assistant-adapters/model-selection/codex-config.example.toml +3 -0
- package/dist/index.js +627 -280
- package/dist/index.js.map +1 -1
- package/examples/next-supabase-installed/.agent-kit/manifest.json +3 -3
- package/examples/next-supabase-installed/.agent-kit/overrides.json +1 -7
- package/examples/next-supabase-installed/audit-output.json +9 -2
- package/package.json +1 -1
- package/templates/next-supabase/ASSISTANT_ADAPTERS.md +26 -2
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/studio/wizard/roster.ts","../src/install/diff.ts","../src/research/discover.ts","../src/research/config.ts","../src/research/scan.ts","../src/research/analyze.ts","../src/research/summarize.ts","../src/studio/corrections.ts","../src/studio/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/studio-server.ts","../src/studio/session-checkpoint.ts"],"sourcesContent":["import { 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 { 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 { formatInitSummary, 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\";\n\nconst program = new Command();\nconst requiredOutputStatuses = [\"missing\", \"partial\", \"complete\", \"not-applicable\"] as const;\ntype RequiredOutputStatus = (typeof requiredOutputStatuses)[number];\n\nfunction isRequiredOutputStatus(value: string): value is RequiredOutputStatus {\n return requiredOutputStatuses.includes(value as RequiredOutputStatus);\n}\n\nprogram\n .name(\"agent-kit\")\n .description(\"Next.js + Supabase agent, skill, docs, design, and research kit.\")\n .version(PACKAGE_VERSION);\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(\n `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 );\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) openBrowser(`${handle.url}/`);\n await new Promise<void>((resolve) => {\n const shutdown = () => {\n 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\", \"Deprecated alias for default project context scan (always runs on init).\")\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: {\n stack: \"next-supabase\";\n force?: boolean;\n guided?: boolean;\n activate?: string[];\n json?: boolean;\n setup?: boolean;\n noSetup?: boolean;\n open?: boolean;\n }) => {\n const cwd = process.cwd();\n const result = initProject({\n cwd,\n stack: options.stack,\n force: Boolean(options.force),\n ...(options.activate ? { activate: options.activate } : {})\n });\n\n if (options.json) {\n console.log(JSON.stringify(result, null, 2));\n } else {\n console.log(formatInitSummary(result));\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 console.error(`Invalid --min-readiness value \"${options.minReadiness}\". Expected one of: ${READINESS_ORDER.join(\", \")}.`);\n process.exitCode = 1;\n return;\n }\n minimumReadiness = options.minReadiness;\n }\n\n if (options.json) {\n console.log(JSON.stringify(report, null, 2));\n } else {\n console.log(`READINESS ${report.readiness.level}: ${report.readiness.summary}`);\n console.log(`SUMMARY pass=${report.summary.pass} warn=${report.summary.warn} fail=${report.summary.fail}`);\n if (report.readiness.nextActions.length > 0) {\n console.log(\"NEXT ACTIONS\");\n for (const action of report.readiness.nextActions) console.log(`- ${action}`);\n }\n console.log(\"\");\n for (const finding of report.findings) {\n const prefix = finding.level.toUpperCase().padEnd(4);\n console.log(`${prefix} ${finding.area}: ${finding.message}`);\n if (finding.remediation) console.log(` remediation: ${finding.remediation}`);\n }\n }\n\n if (report.summary.fail > 0) {\n process.exitCode = 1;\n }\n if (minimumReadiness && !meetsMinimumReadiness(report.readiness.level, minimumReadiness)) {\n console.error(`Audit readiness ${report.readiness.level} is below required minimum ${minimumReadiness}.`);\n process.exitCode = 1;\n }\n });\n\nprogram\n .command(\"diff\")\n .description(\"Compare project docs against bundled templates.\")\n .action(() => {\n console.log(JSON.stringify(diffProject(process.cwd()), null, 2));\n });\n\nprogram\n .command(\"update\")\n .description(\"Update installed templates, preserving local conflicts by default.\")\n .option(\"--force\", \"Overwrite local docs.\")\n .action((options: { force?: boolean }) => {\n const result = initProject({ cwd: process.cwd(), force: Boolean(options.force) });\n console.log(JSON.stringify(result, null, 2));\n });\n\nconst addCommand = program.command(\"add\").description(\"Add one agent-kit asset.\");\naddCommand\n .command(\"skill <name>\")\n .description(\"Add a single skill into .agent-kit/skills.\")\n .option(\"--force\", \"Overwrite existing skill.\")\n .action((name: string, options: { force?: boolean }) => {\n console.log(addSkill(process.cwd(), name, { force: Boolean(options.force) }));\n });\n\nprogram\n .command(\"doctor\")\n .description(\"Validate local CLI runtime prerequisites.\")\n .action(() => {\n const cwd = process.cwd();\n console.log(\"agent-kit doctor\");\n console.log(`node: ${process.version}`);\n console.log(`available skills: ${listSkills().length}`);\n if (onboardingStateExists(cwd)) {\n const progress = getSetupProgress(cwd);\n console.log(`setup progress: ${progress.percent}% (depth: ${progress.depth})`);\n if (!progress.quickComplete) {\n console.log(\"tip: run agent-kit setup --open to finish project context onboarding.\");\n }\n } else {\n console.log(\"tip: run agent-kit init then agent-kit setup to onboard this project.\");\n }\n console.log(\"status: ok\");\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 .action(() => {\n console.log(JSON.stringify(initProjectContext(process.cwd()), null, 2));\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 .action(() => {\n console.log(JSON.stringify(initProjectContext(process.cwd()), null, 2));\n });\n\ncontext\n .command(\"scan\")\n .description(\"Print inferred project context without writing it.\")\n .action(() => {\n console.log(JSON.stringify(scanProjectContext(process.cwd()), null, 2));\n });\n\ncontext\n .command(\"ask\")\n .description(\"Print unanswered high-value project context questions.\")\n .action(() => {\n const result = initProjectContext(process.cwd());\n if (result.openQuestions.length === 0) {\n console.log(\"No open project-context questions.\");\n return;\n }\n console.log(\"Answer these in the web setup wizard with: agent-kit setup --open\");\n console.log(\"Check progress with: agent-kit setup --status\");\n for (const question of result.openQuestions) console.log(`- ${question}`);\n });\n\ncontext\n .command(\"render\")\n .description(\"Render .agent-kit/project-context.md from project-context.json.\")\n .action(() => {\n console.log(JSON.stringify(renderProjectContext(process.cwd()), null, 2));\n });\n\ncontext\n .command(\"validate\")\n .description(\"Validate .agent-kit/project-context.json.\")\n .action(() => {\n console.log(JSON.stringify(validateProjectContext(process.cwd()), null, 2));\n });\n\ncontext\n .command(\"show\")\n .description(\"Print rendered project context markdown.\")\n .action(() => {\n console.log(readTextFile(process.cwd(), \".agent-kit/project-context.md\") ?? \"\");\n });\n\nconst session = program.command(\"session\").description(\"Record and render local Agent Studio council sessions.\");\n\nsession\n .command(\"start <title...>\")\n .description(\"Start a local council session.\")\n .option(\"--workflow <workflow>\", \"Workflow id.\", \"planning\")\n .option(\"--request <request>\", \"Original user request.\")\n .action((titleParts: string[], options: { workflow: string; request?: string }) => {\n const title = titleParts.join(\" \");\n console.log(\n JSON.stringify(\n startSession(process.cwd(), {\n title,\n workflowId: options.workflow,\n ...(options.request ? { request: options.request } : {})\n }),\n null,\n 2\n )\n );\n });\n\nsession\n .command(\"list\")\n .description(\"List local council sessions.\")\n .action(() => {\n console.log(JSON.stringify(listSessions(process.cwd()), null, 2));\n });\n\nsession\n .command(\"active\")\n .description(\"Print the active council session id.\")\n .action(() => {\n console.log(getActiveSessionId(process.cwd()));\n });\n\nsession\n .command(\"note <text...>\")\n .description(\"Record a visible agent message.\")\n .requiredOption(\"--agent <agent>\", \"Agent id.\")\n .action((textParts: string[], options: { agent: string }) => {\n console.log(JSON.stringify(recordNote(process.cwd(), options.agent, textParts.join(\" \")), null, 2));\n });\n\nsession\n .command(\"decision <text...>\")\n .description(\"Record an agent decision.\")\n .requiredOption(\"--agent <agent>\", \"Agent id.\")\n .option(\"--risk <risk>\", \"Risk associated with the decision.\")\n .action((textParts: string[], options: { agent: string; risk?: string }) => {\n console.log(JSON.stringify(recordDecision(process.cwd(), options.agent, textParts.join(\" \"), options.risk), null, 2));\n });\n\nsession\n .command(\"handoff\")\n .description(\"Record an agent handoff.\")\n .requiredOption(\"--from <agent>\", \"Source agent id.\")\n .requiredOption(\"--to <agent>\", \"Target agent id.\")\n .requiredOption(\"--decision <decision>\", \"Decision being handed off.\")\n .requiredOption(\"--risk <risk>\", \"Risk that remains.\")\n .option(\"--evidence <evidence...>\", \"Evidence paths or notes.\")\n .action((options: { from: string; to: string; decision: string; risk: string; evidence?: string[] }) => {\n console.log(\n JSON.stringify(\n recordHandoff(process.cwd(), {\n fromAgentId: options.from,\n toAgentId: options.to,\n decision: options.decision,\n risk: options.risk,\n ...(options.evidence ? { evidence: options.evidence } : {})\n }),\n null,\n 2\n )\n );\n });\n\nsession\n .command(\"correct <text...>\")\n .description(\"Record a human correction and optionally promote it to durable rules.\")\n .option(\"--agent <agent>\", \"Agent id.\")\n .option(\"--scope <scope>\", \"Correction scope: session, project, agent, upstream-proposal.\", \"session\")\n .action((textParts: string[], options: { agent?: string; scope: \"session\" | \"project\" | \"agent\" | \"upstream-proposal\" }) => {\n console.log(\n JSON.stringify(\n recordCorrection(process.cwd(), {\n ...(options.agent ? { agentId: options.agent } : {}),\n scope: options.scope,\n text: textParts.join(\" \")\n }),\n null,\n 2\n )\n );\n });\n\nsession\n .command(\"artifact\")\n .description(\"Record a changed or relevant artifact path.\")\n .requiredOption(\"--file <file>\", \"Artifact file path.\")\n .option(\"--note <note>\", \"Artifact note.\")\n .action((options: { file: string; note?: string }) => {\n console.log(JSON.stringify(recordArtifact(process.cwd(), options.file, options.note), null, 2));\n });\n\nsession\n .command(\"verify\")\n .description(\"Record verification evidence.\")\n .requiredOption(\"--command <command>\", \"Command or review performed.\")\n .requiredOption(\"--result <result>\", \"pass, fail, or skipped.\")\n .option(\"--notes <notes>\", \"Verification notes.\")\n .action((options: { command: string; result: \"pass\" | \"fail\" | \"skipped\"; notes?: string }) => {\n console.log(JSON.stringify(recordVerification(process.cwd(), options.command, options.result, options.notes), null, 2));\n });\n\nsession\n .command(\"output <name...>\")\n .description(\"Mark a required session output status.\")\n .requiredOption(\"--status <status>\", \"missing, partial, complete, or not-applicable.\")\n .option(\"--evidence <evidence>\", \"Evidence path, command, or note.\")\n .action((nameParts: string[], options: { status: string; evidence?: string }) => {\n if (!isRequiredOutputStatus(options.status)) {\n console.error(`Invalid --status value \"${options.status}\". Expected one of: ${requiredOutputStatuses.join(\", \")}.`);\n process.exitCode = 1;\n return;\n }\n console.log(JSON.stringify(recordRequiredOutput(process.cwd(), nameParts.join(\" \"), options.status, options.evidence), null, 2));\n });\n\nsession\n .command(\"render\")\n .description(\"Render active session Markdown files.\")\n .action(() => {\n console.log(JSON.stringify(renderActiveSession(process.cwd()), null, 2));\n });\n\nsession\n .command(\"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 .action((options: { status: \"planned\" | \"in-progress\" | \"blocked\" | \"complete\" }) => {\n console.log(JSON.stringify(closeSession(process.cwd(), options.status), null, 2));\n });\n\nconst correction = program.command(\"correction\").description(\"Manage durable Agent Studio correction rules.\");\n\ncorrection\n .command(\"list\")\n .description(\"List correction rules.\")\n .action(() => {\n console.log(JSON.stringify(listCorrections(process.cwd()), null, 2));\n });\n\ncorrection\n .command(\"add <text...>\")\n .description(\"Add a durable correction rule.\")\n .option(\"--scope <scope>\", \"Correction scope: project, agent, or upstream-proposal.\", \"project\")\n .option(\"--agent <agent>\", \"Agent id for agent-scoped corrections.\")\n .action((textParts: string[], options: { scope: \"project\" | \"agent\" | \"upstream-proposal\"; agent?: string }) => {\n console.log(\n JSON.stringify(\n addCorrection(process.cwd(), {\n scope: options.scope,\n ...(options.agent ? { agentId: options.agent } : {}),\n text: textParts.join(\" \")\n }),\n null,\n 2\n )\n );\n });\n\ncorrection\n .command(\"apply [id]\")\n .description(\"Mark a correction rule active and reviewed.\")\n .option(\"--id <id>\", \"Correction id.\")\n .action((idArgument: string | undefined, options: { id?: string }) => {\n const id = idArgument ?? options.id;\n if (!id) {\n console.error(\"Missing correction id. Use agent-kit correction apply <id> or --id <id>.\");\n process.exitCode = 1;\n return;\n }\n console.log(JSON.stringify(applyCorrection(process.cwd(), id), null, 2));\n });\n\ncorrection\n .command(\"retire <id>\")\n .description(\"Retire a correction rule.\")\n .requiredOption(\"--reason <reason>\", \"Reason for retirement.\")\n .action((id: string, options: { reason: string }) => {\n console.log(JSON.stringify(retireCorrection(process.cwd(), id, options.reason), null, 2));\n });\n\ncorrection\n .command(\"propose-upstream <id>\")\n .description(\"Create an upstream proposal from a project or agent correction.\")\n .action((id: string) => {\n console.log(JSON.stringify(proposeCorrectionUpstream(process.cwd(), id), null, 2));\n });\n\nconst studio = program.command(\"studio\").description(\"Export 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(\n `Port ${handle.requestedPort} is in use — using fallback port ${handle.port}. Kill the old process to avoid confusion.`\n );\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) openBrowser(`${handle.url}/`);\n await new Promise<void>((resolve) => {\n const shutdown = () => {\n 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 .action(() => {\n console.log(JSON.stringify(exportStaticStudio(process.cwd()), null, 2));\n });\n\nconst research = program.command(\"research\").description(\"Research high-quality open-source repositories.\");\n\nresearch\n .command(\"discover\")\n .description(\"Discover GitHub repo candidates using configured queries.\")\n .option(\"--limit <number>\", \"Maximum repositories to write.\", (value) => Number.parseInt(value, 10))\n .action(async (options: { limit?: number }) => {\n const repos = await discoverRepos({\n cwd: process.cwd(),\n ...(options.limit === undefined ? {} : { limit: options.limit })\n });\n console.log(`Wrote ${repos.length} candidates to research/repo-candidates.json`);\n });\n\nresearch\n .command(\"scan\")\n .description(\"Shallow clone candidate repos and write repo findings.\")\n .option(\"--keep-clones\", \"Keep cloned repositories in research/workdir.\")\n .action(async (options: { keepClones?: boolean }) => {\n const findings = await scanRepos({ cwd: process.cwd(), keepClones: Boolean(options.keepClones) });\n console.log(`Wrote ${findings.length} findings to research/findings`);\n });\n\nresearch\n .command(\"summarize\")\n .description(\"Generate category summaries from repo findings.\")\n .action(() => {\n const outputs = summarizeFindings(process.cwd());\n for (const output of outputs) console.log(output);\n });\n\nresearch\n .command(\"propose-updates\")\n .description(\"Create a research-to-template update brief.\")\n .action(() => {\n console.log(proposeUpdates(process.cwd()));\n });\n\nprogram.parseAsync(process.argv).catch((error: unknown) => {\n console.error(error instanceof Error ? error.message : String(error));\n process.exitCode = 1;\n});\n","import { existsSync } from \"node:fs\";\nimport { join } from \"node:path\";\nimport { copyTextWithConflict, listFilesRecursive } from \"../utils/fs.js\";\nimport { findPackageRoot } from \"../utils/package-root.js\";\n\nexport function listSkills(): string[] {\n const packageRoot = findPackageRoot();\n return listFilesRecursive(join(packageRoot, \"skills\")).filter((file) => file.endsWith(\".md\"));\n}\n\nexport function addSkill(cwd: string, skillName: string, options: { force?: boolean } = {}): string {\n const packageRoot = findPackageRoot();\n const normalized = skillName.endsWith(\".md\") ? skillName : `${skillName}.md`;\n\n if (!/^[a-z0-9-]+\\.md$/.test(normalized)) {\n throw new Error(\"Skill names may contain only lowercase letters, numbers, and hyphens.\");\n }\n\n const sourcePath = join(packageRoot, \"skills\", normalized);\n\n if (!existsSync(sourcePath)) {\n const available = listSkills().join(\", \");\n throw new Error(`Unknown skill \"${skillName}\". Available skills: ${available}`);\n }\n\n const result = copyTextWithConflict(sourcePath, cwd, join(\".agent-kit\", \"skills\", normalized), {\n force: Boolean(options.force),\n conflictRoot: join(cwd, \".agent-kit\", \"conflicts\")\n });\n\n return `${result.action}: ${result.target}`;\n}\n","import { createHash } from \"node:crypto\";\nimport {\n cpSync,\n existsSync,\n lstatSync,\n mkdirSync,\n readFileSync,\n readdirSync,\n writeFileSync\n} from \"node:fs\";\nimport { basename, dirname, isAbsolute, join, relative, resolve } from \"node:path\";\n\nexport function ensureDir(path: string): void {\n mkdirSync(path, { recursive: true });\n}\n\nexport function readTextIfExists(path: string): string | null {\n if (!existsSync(path)) return null;\n return readFileSync(path, \"utf8\");\n}\n\nexport function writeText(path: string, content: string): void {\n ensureDir(dirname(path));\n writeFileSync(path, content);\n}\n\nexport function sha256(content: string): string {\n return createHash(\"sha256\").update(content).digest(\"hex\");\n}\n\nexport function resolveInside(root: string, requestedPath: string): string {\n const resolvedRoot = resolve(root);\n const resolvedPath = resolve(resolvedRoot, requestedPath);\n const rel = relative(resolvedRoot, resolvedPath);\n\n if (rel === \"..\" || rel.startsWith(\"..\") || isAbsolute(rel)) {\n throw new Error(`Unsafe path outside root: ${requestedPath}`);\n }\n\n return resolvedPath;\n}\n\nexport function listFilesRecursive(root: string): string[] {\n if (!existsSync(root)) return [];\n\n const out: string[] = [];\n const visit = (dir: string) => {\n for (const entry of readdirSync(dir)) {\n const fullPath = join(dir, entry);\n let stats;\n try {\n stats = lstatSync(fullPath);\n } catch {\n continue;\n }\n\n if (stats.isSymbolicLink()) continue;\n\n if (stats.isDirectory()) {\n if (entry === \"node_modules\" || entry === \".git\") continue;\n visit(fullPath);\n } else {\n out.push(relative(root, fullPath));\n }\n }\n };\n\n visit(root);\n return out.sort();\n}\n\nexport interface CopyResult {\n action: \"created\" | \"unchanged\" | \"conflict\" | \"overwritten\";\n target: string;\n conflictPath?: string;\n}\n\nexport function copyTextWithConflict(\n sourcePath: string,\n targetRoot: string,\n targetRelativePath: string,\n options: { force?: boolean; conflictRoot?: string } = {}\n): CopyResult {\n const targetPath = resolveInside(targetRoot, targetRelativePath);\n const sourceContent = readFileSync(sourcePath, \"utf8\");\n const existingContent = readTextIfExists(targetPath);\n\n if (existingContent === null) {\n writeText(targetPath, sourceContent);\n return { action: \"created\", target: targetRelativePath };\n }\n\n if (sha256(existingContent) === sha256(sourceContent)) {\n return { action: \"unchanged\", target: targetRelativePath };\n }\n\n if (options.force) {\n writeText(targetPath, sourceContent);\n return { action: \"overwritten\", target: targetRelativePath };\n }\n\n const conflictRoot = options.conflictRoot ?? join(targetRoot, \".agent-kit\", \"conflicts\");\n const safeName = `${Date.now()}-${targetRelativePath.replace(/[^a-zA-Z0-9_.-]/g, \"_\")}`;\n const conflictPath = join(conflictRoot, safeName);\n writeText(conflictPath, sourceContent);\n\n return {\n action: \"conflict\",\n target: targetRelativePath,\n conflictPath: relative(targetRoot, conflictPath)\n };\n}\n\nexport function copyDirectory(sourceRoot: string, targetRoot: string): void {\n ensureDir(dirname(targetRoot));\n cpSync(sourceRoot, targetRoot, {\n recursive: true,\n force: true,\n filter: (source) => !basename(source).startsWith(\".DS_Store\")\n });\n}\n","import { existsSync } from \"node:fs\";\nimport { dirname, join, resolve } from \"node:path\";\nimport { fileURLToPath } from \"node:url\";\n\nexport function findPackageRoot(start = dirname(fileURLToPath(import.meta.url))): string {\n let current = resolve(start);\n\n for (let i = 0; i < 8; i += 1) {\n if (existsSync(join(current, \"package.json\"))) {\n return current;\n }\n\n const parent = dirname(current);\n if (parent === current) break;\n current = parent;\n }\n\n throw new Error(\"Unable to locate package root from runtime path.\");\n}\n","import { existsSync, readFileSync } from \"node:fs\";\nimport { dirname, 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\";\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 = [\"setup\", \"audit\", \"plan\", \"handoff\", \"frontend\", \"security\", \"copy\", \"ship\", \"upgrade\"] 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 | null {\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: setup, audit, plan, handoff, frontend, security, copy, ship, and upgrade.\"\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\n .map((file) => file.replace(/\\.toml$/, \"\"))\n .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 findings.push({\n level: \"fail\",\n area: \"manifest\",\n message: `plugin.json has an unsafe or missing relative path for ${String(entry.name ?? \"unknown\")}.`,\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 sourcePaths: Record<Exclude<IdeTarget, \"antigravity\">, string[]> = {\n cursor: [\"assistant-adapters/cursor-agent-kit.mdc\", \"assistant-adapters/model-selection/cursor-model-selection.mdc\"],\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\n if (findings.every((finding) => finding.level !== \"fail\")) {\n findings.push({\n level: \"pass\",\n area: \"adapter\",\n message: `${target} adapter templates are present.`\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.3\";\n\nexport const DEFAULT_CONFIG: AgentKitConfig = {\n stack: \"next-supabase\",\n projectType: \"saas\",\n docsMode: \"advisory\",\n agentCouncil: {\n required: true,\n rosterPath: \".agent-kit/agent-roster.json\",\n defaultWorkflow: \"planning\",\n coreChangeWorkflow: \"core-change\"\n },\n modelRouting: {\n required: true,\n routingPath: \".agent-kit/model-routing.json\",\n reviewCadence: \"quarterly-or-when-model-docs-change\"\n },\n designProviders: [\"stitch\", \"claude\", \"figma\", \"human\"],\n research: {\n maxRepos: 100,\n githubTokenEnv: \"GITHUB_TOKEN\",\n workdir: \"research/workdir\"\n }\n};\n\nexport const ROOT_DOCS = [\n \"AGENTS.md\",\n \"AGENT_ROSTER.md\",\n \"ASSISTANT_ADAPTERS.md\",\n \"COUNCIL.md\",\n \"SKILLS.md\",\n \"SPEC.md\",\n \"DECISIONS.md\",\n \"DOCS.md\",\n \"DESIGN.md\",\n \"MESSAGING.md\",\n \"MODEL_ROUTING.md\",\n \"QUALITY_GATES.md\",\n \"STYLE_GUIDE.md\",\n \"SECURITY.md\",\n \"TESTING.md\",\n \"DEPLOYMENT.md\",\n \"UPGRADE.md\"\n] as const;\n\nexport const LIBRARY_FOLDERS = [\n \"agents\",\n \"skills\",\n \"prompts\",\n \"checklists\",\n \"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 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, writeFileSync } from \"node:fs\";\nimport { basename, dirname, join } from \"node:path\";\nimport { ensureDir, readTextIfExists, resolveInside, writeText } from \"../utils/fs.js\";\n\nexport const AGENT_KIT_DIR = \".agent-kit\";\nexport const CONTEXT_JSON = \".agent-kit/project-context.json\";\nexport const CONTEXT_MD = \".agent-kit/project-context.md\";\nexport const CORRECTIONS_DIR = \".agent-kit/corrections\";\nexport const PROJECT_RULES_JSON = \".agent-kit/corrections/project-rules.json\";\nexport const AGENT_RULES_JSON = \".agent-kit/corrections/agent-rules.json\";\nexport const UPSTREAM_PROPOSALS_JSON = \".agent-kit/corrections/upstream-proposals.json\";\nexport const COUNCIL_SESSIONS_DIR = \".agent-kit/council-sessions\";\nexport const ACTIVE_SESSION_FILE = \".agent-kit/council-sessions/active\";\nexport const STUDIO_EXPORT_HTML = \".agent-kit/studio/index.html\";\n\nconst SECRET_PATTERNS = [\n /gh[pousr]_[A-Za-z0-9_]{12,}/g,\n /github_pat_[A-Za-z0-9_]{20,}/g,\n /sk_(?:live|test)_[A-Za-z0-9_]{8,}/g,\n /sbp_[A-Za-z0-9_]{12,}/g,\n /(?:SUPABASE_SERVICE_ROLE_KEY|DATABASE_URL|OPENAI_API_KEY|ANTHROPIC_API_KEY|GITHUB_TOKEN)=(?!\\\\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, \"<\")\n .replace(/>/g, \">\")\n .replace(/[`![\\]()|]/g, \"\\\\$&\")\n .replace(/\\r?\\n/g, \"<br>\");\n}\n\nexport function escapeMarkdownTableCell(value: string | undefined): string {\n return escapeMarkdownText(value)\n .replace(/\\|/g, \"\\\\|\")\n}\n\nexport function listMarkdown(items: string[]): string {\n if (items.length === 0) return \"- None recorded.\\n\";\n return items.map((item) => `- ${escapeMarkdownText(item)}`).join(\"\\n\") + \"\\n\";\n}\n\nexport function unique(values: string[]): string[] {\n return [...new Set(values.filter(Boolean))].sort();\n}\n","import { existsSync, readFileSync, 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\";\n\ninterface TemplateOverride {\n reason?: string;\n reviewedAt?: string;\n owner?: string;\n}\n\ninterface AgentKitOverrides {\n templates?: Record<string, TemplateOverride | string>;\n}\n\ninterface AgentRosterAgent {\n id?: unknown;\n skills?: unknown;\n defaultFor?: unknown;\n}\n\ninterface AgentRosterWorkflow {\n id?: unknown;\n sequence?: unknown;\n council?: unknown;\n requiredOutputs?: unknown;\n}\n\ninterface AgentRoster {\n schemaVersion?: unknown;\n defaultWorkflow?: unknown;\n required?: unknown;\n agents?: unknown;\n workflows?: unknown;\n handoffRules?: unknown;\n}\n\nconst REQUIRED_AGENT_IDS = [\n \"planner\",\n \"lead-architect\",\n \"nextjs-engineer\",\n \"supabase-postgres-engineer\",\n \"security-reviewer\",\n \"frontend-design-lead\",\n \"marketing-copy-lead\",\n \"qa-engineer\",\n \"docs-maintainer\",\n \"deployment-observability-engineer\"\n];\n\nconst REQUIRED_SKILL_IDS = [\n \"planning-council\",\n \"best-practice-maturity-review\",\n \"upgrade-maintenance\",\n \"nextjs-app-router\",\n \"supabase-auth-rls\",\n \"postgres-migrations\",\n \"owasp-security-review\",\n \"agent-handoff-tracing\",\n \"content-first-design\",\n \"reference-led-design-critique\",\n \"frontend-distinctiveness-benchmark\",\n \"frontend-product-quality-rubric\",\n \"frontend-design-system\",\n \"visual-regression-qa\",\n \"positioning-messaging\",\n \"conversion-copywriting\",\n \"landing-page-copy\",\n \"product-voice-tone\",\n \"onboarding-empty-state-copy\",\n \"accessibility-wcag\",\n \"testing-qa\",\n \"docs-maintainer\",\n \"deployment-observability\"\n];\n\nconst REQUIRED_SCHEMA_FILES = [\n \"agent-roster.schema.json\",\n \"council-session.schema.json\",\n \"audit-report.schema.json\",\n \"model-routing.schema.json\",\n \"project-context.schema.json\",\n \"correction-rules.schema.json\",\n \"session-event.schema.json\",\n \"studio-session.schema.json\",\n \"onboarding-state.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\"\n ? { reason: override }\n : override && typeof override === \"object\"\n ? override\n : { reason: String(override) }\n ])\n );\n } catch {\n return {};\n }\n}\n\nfunction readTemplate(stack: StackProfile, file: string): string | null {\n const path = join(findPackageRoot(), \"templates\", stack, file);\n return existsSync(path) ? readFileSync(path, \"utf8\") : null;\n}\n\nfunction asStringArray(value: unknown): string[] {\n if (!Array.isArray(value)) return [];\n return value.filter((item): item is string => typeof item === \"string\");\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === \"object\" && value !== null;\n}\n\nfunction addAgentRosterFindings(cwd: string, findings: AuditFinding[], 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: \"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: \"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 indexRelative = `${COUNCIL_SESSION_DIR}/${normalizedSessionDir}/index.md`;\n const transcriptRelative = `${COUNCIL_SESSION_DIR}/${normalizedSessionDir}/transcript.md`;\n const sessionDirPath = join(sessionsRoot, sessionDir);\n\n let sessionResult: ReturnType<typeof StudioSessionContract.safeParse> | null = null;\n try {\n sessionResult = StudioSessionContract.safeParse(JSON.parse(readFileSync(join(sessionDirPath, \"session.json\"), \"utf8\")) as unknown);\n if (!sessionResult.success) {\n findings.push({\n level: \"fail\",\n area: \"studio\",\n message: `${sessionRelative} does not match the studio-session contract.`,\n remediation: `Fix session metadata. First issue: ${formatContractIssues(sessionResult.error)[0]}`\n });\n continue;\n }\n } catch {\n findings.push({\n level: \"fail\",\n area: \"studio\",\n message: `${sessionRelative} is not valid JSON.`,\n remediation: \"Fix session metadata JSON before relying on rendered session evidence.\"\n });\n continue;\n }\n\n const eventsPath = join(sessionDirPath, \"events.jsonl\");\n if (!existsSync(eventsPath)) {\n findings.push({\n level: \"fail\",\n area: \"studio\",\n message: `${eventsRelative} is missing.`,\n remediation: \"Record session events or remove the incomplete studio session folder.\"\n });\n continue;\n }\n\n const eventText = readFileSync(eventsPath, \"utf8\");\n if (containsLikelySecret(eventText)) {\n findings.push({\n level: \"fail\",\n area: \"studio\",\n message: `${eventsRelative} appears to contain a secret-like value.`,\n remediation: \"Redact tokens, database URLs, env values, and private customer data from session logs.\"\n });\n }\n\n const eventLines = eventText.split(/\\r?\\n/).filter((line) => line.trim().length > 0);\n let validEvents = 0;\n let verificationCount = 0;\n for (const [index, line] of eventLines.entries()) {\n try {\n const result = SessionEventContract.safeParse(JSON.parse(line) as unknown);\n if (!result.success) {\n findings.push({\n level: \"fail\",\n area: \"studio\",\n message: `${eventsRelative} line ${index + 1} does not match the session-event contract.`,\n remediation: `Fix the event row. First issue: ${formatContractIssues(result.error)[0]}`\n });\n } else {\n validEvents += 1;\n if (result.data.type === \"verification_recorded\") verificationCount += 1;\n }\n } catch {\n findings.push({\n level: \"fail\",\n area: \"studio\",\n message: `${eventsRelative} line ${index + 1} is not valid JSON.`,\n remediation: \"Fix malformed JSONL before rendering or auditing session history.\"\n });\n }\n }\n\n if (!existsSync(join(sessionDirPath, \"index.md\")) || !existsSync(join(sessionDirPath, \"transcript.md\"))) {\n findings.push({\n level: \"warn\",\n area: \"studio\",\n message: `${sessionDir} has unrendered session Markdown.`,\n remediation: \"Run agent-kit session render so humans can inspect the current agent transcript and handoffs.\"\n });\n } else {\n const indexText = readFileSync(join(sessionDirPath, \"index.md\"), \"utf8\");\n const transcriptText = readFileSync(join(sessionDirPath, \"transcript.md\"), \"utf8\");\n if (containsLikelySecret(indexText) || containsLikelySecret(transcriptText)) {\n findings.push({\n level: \"fail\",\n area: \"studio\",\n message: `${sessionDir} rendered Markdown appears to contain a secret-like value.`,\n remediation: \"Regenerate Markdown after redacting sensitive values from the event log.\"\n });\n }\n if (statSync(eventsPath).mtimeMs > statSync(join(sessionDirPath, \"index.md\")).mtimeMs) {\n findings.push({\n level: \"warn\",\n area: \"studio\",\n message: `${sessionDir} has events newer than rendered Markdown.`,\n remediation: \"Run agent-kit session render after recording new events.\"\n });\n }\n }\n\n const session = sessionResult.data;\n if (session.status === \"complete\") {\n const missingOutputs = session.requiredOutputs.filter((output) => output.status === \"missing\" || output.status === \"partial\");\n if (missingOutputs.length > 0 || verificationCount === 0) {\n findings.push({\n level: \"fail\",\n area: \"studio\",\n message: `${sessionRelative} is complete but lacks required outputs or verification evidence.`,\n remediation: \"Do not mark sessions complete until required outputs are complete or not-applicable and verification evidence is recorded.\"\n });\n }\n }\n\n if (validEvents > 0) {\n findings.push({\n level: \"pass\",\n area: \"studio\",\n message: `${sessionDir} has ${validEvents} valid Agent Studio events.`\n });\n }\n }\n}\n\nfunction addCouncilDocFindings(cwd: string, findings: AuditFinding[]): void {\n const councilDoc = readDoc(cwd, \"COUNCIL.md\");\n if (!councilDoc) return;\n\n if (!includesAll(councilDoc, [\"council session\", \"handoff\", \"decision\", \"risk\", \"evidence\"])) {\n findings.push({\n level: \"warn\",\n area: \"agents\",\n message: \"COUNCIL.md does not define a complete council-session handoff record.\",\n remediation: \"Require workflow, decision, risk, next handoff, evidence, required outputs, and verification status in council sessions.\"\n });\n } else {\n findings.push({\n level: \"pass\",\n area: \"agents\",\n message: \"COUNCIL.md defines council-session handoff evidence.\"\n });\n }\n}\n\nfunction addAssistantAdapterFindings(\n cwd: string,\n findings: AuditFinding[],\n adapterRootRelativePath = \".agent-kit/assistant-adapters\",\n docsCwd = cwd\n): 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, Claude Code subagents, and the source-of-truth rule for avoiding divergent agent instructions.\"\n });\n } else {\n findings.push({\n level: \"pass\",\n area: \"agents\",\n message: \"ASSISTANT_ADAPTERS.md maps the council roster to tool-specific instruction surfaces.\"\n });\n }\n\n if (!includesAll(adaptersDoc, [\"model selection\", \"enforcement\", \"MODEL_ROUTING.md\", \"model-routing.json\"])) {\n findings.push({\n level: \"warn\",\n area: \"models\",\n message: \"ASSISTANT_ADAPTERS.md does not record model-selection and enforcement status for active tools.\",\n remediation: \"Document which IDEs can enforce, partially apply, advise, or require manual model selection from MODEL_ROUTING.md.\"\n });\n }\n\n if (/\\bTBD\\b/i.test(adaptersDoc)) {\n findings.push({\n level: \"warn\",\n area: \"models\",\n message: \"ASSISTANT_ADAPTERS.md still has unverified tool-surface rows.\",\n remediation: \"Replace TBD adapter rows with date, owner, evidence, model-selection status, and known limitations for each active IDE.\"\n });\n }\n}\n\nfunction addModelRoutingFindings(cwd: string, findings: AuditFinding[], 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: \"Use the DESIGN.md template to capture product category, audience, content inventory, brand traits, creative directions, and token decisions.\"\n });\n }\n\n if (!includesAll(designDoc, [\"reference set\", \"anti-reference\", \"distinctiveness\", \"critique\"])) {\n findings.push({\n level: \"warn\",\n area: \"frontend\",\n message: \"DESIGN.md is missing reference-set, anti-reference, distinctiveness, or critique-gate guidance.\",\n remediation:\n \"Add category references, anti-references, source-safety notes, distinctiveness criteria, and a design critique verdict before accepting frontend work as best-practice ready.\"\n });\n }\n\n if (!includesAll(designDoc, [\"distinctiveness benchmark\", \"first-screen proof\", \"content fingerprint\", \"asset provenance\", \"state proof\", \"visual QA proof\"])) {\n findings.push({\n level: \"warn\",\n area: \"frontend\",\n message: \"DESIGN.md is missing frontend distinctiveness benchmark evidence.\",\n remediation:\n \"Add first-screen proof, content fingerprint, reference benchmark, creative divergence, asset provenance, state proof, visual QA proof, generic-risk, and source-safety fields before accepting significant frontend work.\"\n });\n }\n\n if (!includesAll(designDoc, [\"product quality scorecard\", \"user/task fit\", \"content specificity\", \"source safety\", \"total score\"])) {\n findings.push({\n level: \"warn\",\n area: \"frontend\",\n message: \"DESIGN.md is missing a frontend product-quality scorecard.\",\n remediation:\n \"Add scorecard fields for user/task fit, content specificity, visual identity, information architecture, component states, accessibility and interaction, source safety, total score, and acceptance verdict.\"\n });\n }\n\n if (!includesAll(styleGuide, [\"DESIGN.md\", \"content-first\", \"creative direction\"])) {\n findings.push({\n level: \"warn\",\n area: \"frontend\",\n message: \"STYLE_GUIDE.md does not require content-first creative direction before frontend implementation.\",\n remediation: \"Reference DESIGN.md, brand/content intake, and creative-direction selection before visual implementation starts.\"\n });\n }\n\n const landingText = readLikelyLandingFiles(cwd);\n if (landingText && includesAny(landingText, [\"bg-gradient\", \"from-purple\", \"to-blue\", \"ai-powered\", \"supercharge\", \"revolutionize\", \"10x\"])) {\n findings.push({\n level: \"warn\",\n area: \"frontend\",\n message: \"Likely landing or hero files contain generic AI-site visual or copy patterns.\",\n remediation: \"Review the first screen for domain-specific hierarchy, restrained tokens, real workflows, and useful states.\"\n });\n }\n}\n\nfunction addQualityGateFindings(cwd: string, findings: AuditFinding[]): void {\n const qualityGates = readDoc(cwd, \"QUALITY_GATES.md\");\n if (!qualityGates) return;\n\n if (!includesAll(qualityGates, [\"baseline\", \"strong\", \"best-practice\", \"evidence\"])) {\n findings.push({\n level: \"warn\",\n area: \"quality\",\n message: \"QUALITY_GATES.md does not define baseline, strong, best-practice, and evidence expectations.\",\n remediation: \"Restore the maturity model so project quality is evaluated by evidence, not only by file presence.\"\n });\n }\n\n if (\n !includesAll(qualityGates, [\n \"council\",\n \"architecture\",\n \"security\",\n \"supabase\",\n \"messaging\",\n \"frontend\",\n \"accessibility\",\n \"testing\",\n \"release\",\n \"repo health\"\n ])\n ) {\n findings.push({\n level: \"warn\",\n area: \"quality\",\n message: \"QUALITY_GATES.md is missing one or more best-practice coverage areas.\",\n remediation:\n \"Cover council routing, architecture, security, Supabase/RLS, frontend, accessibility, testing, release, and repo-health evidence.\"\n });\n } else {\n findings.push({\n level: \"pass\",\n area: \"quality\",\n message: \"QUALITY_GATES.md defines a multi-area best-practice maturity model.\"\n });\n }\n}\n\nfunction addUpgradeFindings(cwd: string, findings: AuditFinding[]): void {\n const upgradeDoc = readDoc(cwd, \"UPGRADE.md\");\n if (!upgradeDoc) return;\n\n if (!includesAll(upgradeDoc, [\"agent-kit diff\", \"agent-kit update\", \"audit --min-readiness\", \"rollback\", \"release notes\"])) {\n findings.push({\n level: \"warn\",\n area: \"upgrade\",\n message: \"UPGRADE.md does not define the full agent-kit diff, update, audit, release-notes, and rollback flow.\",\n remediation:\n \"Document branch creation, agent-kit diff, agent-kit update, conflict review, audit readiness threshold, release notes, and rollback evidence.\"\n });\n } else if (!includesAll(upgradeDoc, [\"next.js\", \"codemod\", \"supabase\", \"migration\", \"generated\"])) {\n findings.push({\n level: \"warn\",\n area: \"upgrade\",\n message: \"UPGRADE.md does not cover framework codemods, Supabase migrations, or generated type review.\",\n remediation:\n \"Include Next.js upgrade/codemod review and Supabase migration history, RLS impact, rollback, and generated type checks.\"\n });\n } else {\n findings.push({\n level: \"pass\",\n area: \"upgrade\",\n message: \"UPGRADE.md defines a reviewable upgrade, migration, audit, and rollback lifecycle.\"\n });\n }\n}\n\nconst STARTER_EVIDENCE_PATTERNS = [\n /\\bTBD\\b/i,\n /replace with real/i,\n /example_table/i,\n /describe the product/i,\n /document required/i,\n /pass\\/fail\\/skipped/i\n];\n\nconst EVIDENCE_DOCS = [\n \"COUNCIL.md\",\n \"SPEC.md\",\n \"DESIGN.md\",\n \"MESSAGING.md\",\n \"SECURITY.md\",\n \"TESTING.md\",\n \"DEPLOYMENT.md\",\n \"ASSISTANT_ADAPTERS.md\",\n \"MODEL_ROUTING.md\",\n \"UPGRADE.md\"\n] as const;\n\nfunction addProjectEvidenceFindings(cwd: string, findings: AuditFinding[]): void {\n const placeholderDocs = EVIDENCE_DOCS.filter((doc) => {\n const text = readDoc(cwd, doc);\n return text && STARTER_EVIDENCE_PATTERNS.some((pattern) => pattern.test(text));\n });\n\n if (placeholderDocs.length > 0) {\n findings.push({\n level: \"warn\",\n area: \"evidence\",\n message: `Project evidence docs still contain starter placeholders: ${placeholderDocs.join(\", \")}.`,\n remediation:\n \"Replace TBD/example rows with real project evidence, or document why an item is not applicable before claiming strong or best-practice maturity.\"\n });\n } else {\n findings.push({\n level: \"pass\",\n area: \"evidence\",\n message: \"Project evidence docs do not contain starter placeholders.\"\n });\n }\n}\n\nfunction addMessagingFindings(cwd: string, findings: AuditFinding[]): void {\n const messagingDoc = readDoc(cwd, \"MESSAGING.md\");\n if (!messagingDoc) return;\n\n if (!includesAll(messagingDoc, [\"discovery questions\", \"audience\", \"pain\", \"outcome\", \"differentiator\", \"proof\", \"objections\", \"voice\", \"conversion\"])) {\n findings.push({\n level: \"warn\",\n area: \"messaging\",\n message: \"MESSAGING.md does not capture the required discovery questions and value-proposition inputs.\",\n remediation:\n \"Document audience, pain, outcome, differentiator, proof, objections, voice, conversion goal, and unanswered discovery questions before accepting final copy.\"\n });\n } else {\n findings.push({\n level: \"pass\",\n area: \"messaging\",\n message: \"MESSAGING.md captures question-led positioning and value-proposition inputs.\"\n });\n }\n\n if (!includesAll(messagingDoc, [\"claim\", \"proof required\", \"current proof\", \"objection\", \"cta\"])) {\n findings.push({\n level: \"warn\",\n area: \"messaging\",\n message: \"MESSAGING.md does not connect claims, proof, objections, and CTA hierarchy.\",\n remediation: \"Track claims against proof, objection handling, primary CTA, secondary CTA, and risky claims before release.\"\n });\n } else {\n findings.push({\n level: \"pass\",\n area: \"messaging\",\n message: \"MESSAGING.md connects claims, proof, objections, and CTA hierarchy.\"\n });\n }\n}\n\nexport function auditProject(cwd: string): AuditFinding[] {\n const findings: AuditFinding[] = [];\n const manifest = readManifest(cwd);\n 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: \"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 (\n normalized.startsWith(\"tests/\") &&\n content.includes(`const fakeSecret = \"${testSecretFixture}\"`) &&\n content.includes(\"not.toContain(fakeSecret)\")\n ) {\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\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 })\n .strict();\n\nexport type OnboardingStateContractValue = z.infer<typeof OnboardingStateContract>;\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(\n cwd: string,\n patch: Partial<OnboardingStateContractValue>\n): 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 =\n 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 { CONTEXT_JSON, CONTEXT_MD, ensureStudioDirs, listMarkdown, nowIso, readJsonFile, redactSensitive, unique, writeJsonFile, writeTextFile } from \"./shared.js\";\n\nexport interface ContextCommandResult {\n contextPath: string;\n markdownPath: string;\n openQuestions: string[];\n}\n\nfunction readPackageJson(cwd: string): { scripts?: Record<string, string>; dependencies?: Record<string, string>; devDependencies?: Record<string, string> } | null {\n const path = join(cwd, \"package.json\");\n if (!existsSync(path)) return null;\n return JSON.parse(readFileSync(path, \"utf8\")) as {\n scripts?: Record<string, string>;\n dependencies?: Record<string, string>;\n devDependencies?: Record<string, string>;\n };\n}\n\nfunction detectPackageManager(cwd: string): string | undefined {\n if (existsSync(join(cwd, \"pnpm-lock.yaml\"))) return \"pnpm\";\n if (existsSync(join(cwd, \"yarn.lock\"))) return \"yarn\";\n if (existsSync(join(cwd, \"package-lock.json\"))) return \"npm\";\n if (existsSync(join(cwd, \"bun.lockb\")) || existsSync(join(cwd, \"bun.lock\"))) return \"bun\";\n return undefined;\n}\n\nfunction detectFromDependencies(packageJson: ReturnType<typeof readPackageJson>, names: string[]): string[] {\n const deps = {\n ...(packageJson?.dependencies ?? {}),\n ...(packageJson?.devDependencies ?? {})\n };\n return names.filter((name) => deps[name] !== undefined);\n}\n\nfunction readEnvExampleKeys(cwd: string): string[] {\n const envText = readTextIfExists(join(cwd, \".env.example\")) ?? \"\";\n return unique(\n envText\n .split(/\\r?\\n/)\n .map((line) => line.trim())\n .filter((line) => line && !line.startsWith(\"#\") && line.includes(\"=\"))\n .map((line) => line.split(\"=\")[0]?.trim() ?? \"\")\n .filter(Boolean)\n );\n}\n\nfunction inferOpenQuestions(context: ProjectContextContractValue): string[] {\n const missing: string[] = [];\n const questions = [\n [\"productSummary\", \"What does this product do in one concrete paragraph?\"],\n [\"primaryAudience\", \"Who is the primary user or buyer?\"],\n [\"authModel\", \"What authentication model should agents preserve?\"],\n [\"tenantModel\", \"Is this single-user, team, tenant, marketplace, admin, or public content?\"]\n ] as const;\n missing.push(...questions.flatMap(([field, question]) => (context[field].trim() ? [] : [question])));\n if (context.primaryWorkflows.length === 0) missing.push(\"What are the top three user workflows?\");\n if (!context.uiDirection.preferred.trim()) missing.push(\"What should the UI feel like, and what should it avoid?\");\n if (!context.messaging.valueProposition.trim()) missing.push(\"What value proposition and proof should public copy use?\");\n return unique(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\"\n | \"team\"\n | \"product\"\n | \"access\"\n | \"ui\"\n | \"messaging\"\n | \"review\"\n | \"complete\"\n | \"ide\"\n | \"visualQa\"\n | \"designDoc\"\n | \"messagingDoc\"\n | \"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 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 { loadProjectRosterAgents } from \"../studio/wizard/roster.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\nconst 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\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(\n cwd: string,\n packageRoot: string,\n source: string,\n target: string,\n force: boolean,\n result: ActivateIdeResult\n): 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 buildClaudeSubagentMarkdown(agentId: string, name: string, description: string): string {\n const defaultForHint =\n agentId === \"planner\"\n ? \"Start with the Planner workflow.\"\n : agentId === \"lead-architect\"\n ? \"Convene council for core changes before implementation.\"\n : agentId === \"frontend-design-lead\"\n ? \"Require brand/content intake, creative-direction rationale, and visual QA evidence for UI changes.\"\n : agentId === \"security-reviewer\"\n ? \"Review auth, RLS, data mutation, dependency, external-call, secret, and release-risk changes.\"\n : `Use for ${name.toLowerCase()} work defined in the roster.`;\n\n return `---\nname: ${agentId}\ndescription: ${description}\n---\n\nRead ${CANONICAL_READ_LIST} before making routing or implementation decisions.\n\n${defaultForHint}\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 generateClaudeSubagents(cwd: string, packageRoot: string, force: boolean, result: ActivateIdeResult): void {\n ensureDir(join(cwd, \".claude\", \"agents\"));\n const agents = loadProjectRosterAgents(cwd);\n for (const agent of agents) {\n const description =\n agent.roleSummary.length > 180 ? `${agent.roleSummary.slice(0, 177)}...` : agent.roleSummary;\n const target = `.claude/agents/${agent.id}.md`;\n const content = buildClaudeSubagentMarkdown(agent.id, agent.name, description);\n const targetPath = join(cwd, target);\n if (!force && existsSync(targetPath)) {\n const existing = readFileSync(targetPath, \"utf8\");\n if (existing === content) {\n result.unchanged.push(target);\n continue;\n }\n const conflictPath = join(cwd, \".agent-kit\", \"conflicts\", target.replace(/\\//g, \"__\"));\n ensureDir(join(cwd, \".agent-kit\", \"conflicts\"));\n writeText(conflictPath, existing);\n result.conflicts.push(`${target} -> ${conflictPath}`);\n continue;\n }\n writeText(targetPath, content);\n result.copied.push(target);\n }\n\n copyAdapterFile(cwd, packageRoot, CLAUDE_TEMPLATE, \"CLAUDE.md\", force, result);\n}\n\nfunction copyDirectoryAsConflicts(\n cwd: string,\n packageRoot: string,\n sourceDir: string,\n targetDir: string,\n force: boolean,\n result: ActivateIdeResult\n): 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(\n cwd,\n packageRoot,\n ANTIGRAVITY_COMMANDS_SOURCE_DIR,\n ANTIGRAVITY_COMMANDS_TARGET_DIR,\n force,\n result\n );\n copyDirectoryAsConflicts(\n cwd,\n packageRoot,\n RUNTIME_SKILLS_SOURCE_DIR,\n ANTIGRAVITY_RUNTIME_SKILLS_TARGET_DIR,\n force,\n result\n );\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/cursor-agent-kit.mdc` and `.cursor/rules/cursor-model-selection.mdc` | Active on init | Advisory | Advisory | `agent-kit init` copies rules; verify in Cursor Settings > Rules. | Installed via `agent-kit init` or `agent-kit init --activate 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` | Active | Partial | Partial | Root `AGENTS.md` on init; optional `.codex/config.toml` via `agent-kit init --activate codex`. | Confirm Codex loads root `AGENTS.md` and optional model routing comments. |\"\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 }\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 }\n\n if (activated.has(\"antigravity\")) {\n installAntigravityAdapter(cwd, packageRoot, force, result);\n }\n\n updateAssistantAdaptersTable(cwd, activated);\n\n return result;\n}\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\":\n \"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\":\n \"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\":\n \"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(\n (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}\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","import { existsSync, readFileSync } from \"node:fs\";\nimport { join } from \"node:path\";\nimport {\n DEFAULT_AGENT_ROSTER_SOURCE,\n DEFAULT_AGENT_ROSTER_TARGET,\n DEFAULT_MODEL_ROUTING_SOURCE,\n DEFAULT_MODEL_ROUTING_TARGET,\n LIBRARY_FOLDERS,\n ROOT_DOCS\n} from \"../config/defaults.js\";\nimport { sha256 } from \"../utils/fs.js\";\nimport { findPackageRoot } from \"../utils/package-root.js\";\n\nexport type DiffStatus = \"missing\" | \"unchanged\" | \"changed\";\n\nexport interface DiffResult {\n missing: string[];\n unchanged: string[];\n changed: string[];\n agentRoster: DiffStatus;\n modelRouting: DiffStatus;\n libraryFolders: {\n missing: string[];\n present: string[];\n willRefresh: string[];\n };\n preview: {\n wouldCreate: string[];\n wouldWriteConflicts: string[];\n wouldRefreshLibraryFolders: string[];\n wouldCreateAgentRoster: boolean;\n wouldWriteAgentRosterConflict: boolean;\n wouldCreateModelRouting: boolean;\n wouldWriteModelRoutingConflict: boolean;\n };\n}\n\nfunction statusForTextFile(target: string, template: string): DiffStatus {\n if (!existsSync(target)) return \"missing\";\n\n const targetHash = sha256(readFileSync(target, \"utf8\"));\n const templateHash = sha256(readFileSync(template, \"utf8\"));\n return targetHash === templateHash ? \"unchanged\" : \"changed\";\n}\n\nexport function diffProject(cwd: string, stack = \"next-supabase\"): DiffResult {\n const packageRoot = findPackageRoot();\n const templateRoot = join(packageRoot, \"templates\", stack);\n const libraryFolders = {\n missing: [] as string[],\n present: [] as string[],\n willRefresh: [...LIBRARY_FOLDERS]\n };\n const result: DiffResult = {\n missing: [],\n unchanged: [],\n changed: [],\n agentRoster: \"missing\",\n modelRouting: \"missing\",\n libraryFolders,\n preview: {\n wouldCreate: [],\n wouldWriteConflicts: [],\n wouldRefreshLibraryFolders: [...LIBRARY_FOLDERS],\n wouldCreateAgentRoster: false,\n wouldWriteAgentRosterConflict: false,\n wouldCreateModelRouting: false,\n wouldWriteModelRoutingConflict: false\n }\n };\n\n for (const doc of ROOT_DOCS) {\n const target = join(cwd, doc);\n const template = join(templateRoot, doc);\n const status = statusForTextFile(target, template);\n\n if (status === \"missing\") {\n result.missing.push(doc);\n result.preview.wouldCreate.push(doc);\n continue;\n }\n\n if (status === \"unchanged\") result.unchanged.push(doc);\n else {\n result.changed.push(doc);\n result.preview.wouldWriteConflicts.push(doc);\n }\n }\n\n result.agentRoster = statusForTextFile(join(cwd, DEFAULT_AGENT_ROSTER_TARGET), join(packageRoot, DEFAULT_AGENT_ROSTER_SOURCE));\n if (result.agentRoster === \"missing\") {\n result.preview.wouldCreate.push(DEFAULT_AGENT_ROSTER_TARGET);\n result.preview.wouldCreateAgentRoster = true;\n }\n if (result.agentRoster === \"changed\") {\n result.preview.wouldWriteConflicts.push(DEFAULT_AGENT_ROSTER_TARGET);\n result.preview.wouldWriteAgentRosterConflict = true;\n }\n\n result.modelRouting = statusForTextFile(join(cwd, DEFAULT_MODEL_ROUTING_TARGET), join(packageRoot, DEFAULT_MODEL_ROUTING_SOURCE));\n if (result.modelRouting === \"missing\") {\n result.preview.wouldCreate.push(DEFAULT_MODEL_ROUTING_TARGET);\n result.preview.wouldCreateModelRouting = true;\n }\n if (result.modelRouting === \"changed\") {\n result.preview.wouldWriteConflicts.push(DEFAULT_MODEL_ROUTING_TARGET);\n result.preview.wouldWriteModelRoutingConflict = true;\n }\n\n for (const folder of LIBRARY_FOLDERS) {\n const target = join(cwd, \".agent-kit\", folder);\n if (existsSync(target)) libraryFolders.present.push(folder);\n else libraryFolders.missing.push(folder);\n }\n\n return result;\n}\n","import { Octokit } from \"@octokit/rest\";\nimport { existsSync, readFileSync } from \"node:fs\";\nimport { join } from \"node:path\";\nimport type { RepoCandidate } from \"../config/types.js\";\nimport { writeText } from \"../utils/fs.js\";\nimport { findPackageRoot } from \"../utils/package-root.js\";\nimport { researchConfigSchema } from \"./config.js\";\n\nexport interface DiscoverOptions {\n cwd: string;\n output?: string;\n token?: string;\n limit?: number;\n}\n\nexport async function discoverRepos(options: DiscoverOptions): Promise<RepoCandidate[]> {\n const packageRoot = findPackageRoot();\n const configPath = join(packageRoot, \"research\", \"scan-config.json\");\n const config = researchConfigSchema.parse(JSON.parse(readFileSync(configPath, \"utf8\")));\n const token = options.token ?? process.env.GITHUB_TOKEN;\n\n if (!token) {\n throw new Error(\"GITHUB_TOKEN is required for GitHub API research discovery.\");\n }\n\n const octokit = new Octokit({ auth: token });\n const deduped = new Map<string, RepoCandidate>();\n const maxRepos = options.limit ?? config.maxRepos;\n const excludedRepos = new Set(config.excludeRepos.map((repo) => repo.toLowerCase()));\n\n for (const category of config.categories) {\n let categoryCount = 0;\n\n for (const query of category.queries) {\n if (deduped.size >= maxRepos || categoryCount >= category.targetCount) break;\n\n const response = await octokit.search.repos({\n q: `${query} archived:false pushed:>=${config.activeSince} stars:>=${config.minStars}`,\n sort: \"stars\",\n order: \"desc\",\n per_page: 100\n });\n\n for (const repo of response.data.items) {\n if (deduped.size >= maxRepos || categoryCount >= category.targetCount) break;\n if (deduped.has(repo.full_name)) continue;\n if (excludedRepos.has(repo.full_name.toLowerCase())) continue;\n\n deduped.set(repo.full_name, {\n fullName: repo.full_name,\n htmlUrl: repo.html_url,\n description: repo.description ?? \"\",\n stars: repo.stargazers_count,\n pushedAt: repo.pushed_at ?? \"\",\n language: repo.language,\n topics: repo.topics ?? [],\n category: category.name\n });\n categoryCount += 1;\n }\n }\n }\n\n for (const seed of config.seedRepos) {\n if (deduped.size >= maxRepos) break;\n if (deduped.has(seed.fullName)) continue;\n if (excludedRepos.has(seed.fullName.toLowerCase())) continue;\n\n const [owner, repo] = seed.fullName.split(\"/\");\n if (!owner || !repo) continue;\n\n try {\n const response = await octokit.repos.get({ owner, repo });\n deduped.set(response.data.full_name, {\n fullName: response.data.full_name,\n htmlUrl: response.data.html_url,\n description: response.data.description ?? \"\",\n stars: response.data.stargazers_count,\n pushedAt: response.data.pushed_at ?? \"\",\n language: response.data.language,\n topics: response.data.topics ?? [],\n category: seed.category\n });\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n console.warn(`Skipping seed repo ${seed.fullName}: ${message}`);\n }\n }\n\n const candidates = [...deduped.values()].slice(0, maxRepos);\n const output = options.output ?? join(options.cwd, \"research\", \"repo-candidates.json\");\n writeText(output, `${JSON.stringify(candidates, null, 2)}\\n`);\n return candidates;\n}\n","import { z } from \"zod\";\n\nexport const researchCategorySchema = z.object({\n name: z.string().min(1),\n queries: z.array(z.string().min(1)).min(1),\n targetCount: z.number().int().positive()\n});\n\nexport const researchSeedRepoSchema = z.object({\n fullName: z.string().regex(/^[^/\\s]+\\/[^/\\s]+$/),\n category: z.string().min(1)\n});\n\nexport const researchConfigSchema = z.object({\n maxRepos: z.number().int().positive().default(100),\n minStars: z.number().int().nonnegative().default(100),\n activeSince: z.string().default(\"2024-12-01\"),\n excludeRepos: z.array(z.string().regex(/^[^/\\s]+\\/[^/\\s]+$/)).default([]),\n categories: z.array(researchCategorySchema).min(1),\n seedRepos: z.array(researchSeedRepoSchema).default([])\n});\n\nexport type ResearchConfig = z.infer<typeof researchConfigSchema>;\n","import { existsSync, mkdirSync, readFileSync, rmSync } from \"node:fs\";\nimport { join } from \"node:path\";\nimport { simpleGit } from \"simple-git\";\nimport type { RepoCandidate, RepoFinding } from \"../config/types.js\";\nimport { writeText } from \"../utils/fs.js\";\nimport { analyzeRepository } from \"./analyze.js\";\n\nexport interface ScanOptions {\n cwd: string;\n candidatesPath?: string;\n workdir?: string;\n keepClones?: boolean;\n}\n\nfunction findingToMarkdown(finding: RepoFinding): string {\n const total = Object.values(finding.score).reduce((sum, value) => sum + value, 0);\n const maxScore = Object.keys(finding.score).length * 5;\n\n return `# Repo Finding: ${finding.candidate.fullName}\n\n## Why It Was Selected\n- Category: ${finding.candidate.category}\n- Stars: ${finding.candidate.stars}\n- Last pushed: ${finding.candidate.pushedAt}\n- Language: ${finding.candidate.language ?? \"unknown\"}\n- URL: ${finding.candidate.htmlUrl}\n- Score: ${total}/${maxScore}\n\n## Score\n\\`\\`\\`json\n${JSON.stringify(finding.score, null, 2)}\n\\`\\`\\`\n\n## Strong Practices\n${finding.strongPractices.map((item) => `- ${item}`).join(\"\\n\") || \"- None detected by static scan.\"}\n\n## Weaknesses / Not Worth Copying Blindly\n${finding.weakPractices.map((item) => `- ${item}`).join(\"\\n\") || \"- None detected by static scan.\"}\n\n## Files Worth Studying\n${finding.selectedFiles.map((item) => `- \\`${item}\\``).join(\"\\n\") || \"- No high-signal files detected.\"}\n\n## Patterns To Adopt\n${finding.patternsToAdopt.map((item) => `- ${item}`).join(\"\\n\")}\n\n## Impact On Agent Kit\n${finding.impactOnKit.map((item) => `- ${item}`).join(\"\\n\")}\n`;\n}\n\nexport async function scanRepos(options: ScanOptions): Promise<RepoFinding[]> {\n const candidatesPath = options.candidatesPath ?? join(options.cwd, \"research\", \"repo-candidates.json\");\n if (!existsSync(candidatesPath)) {\n throw new Error(`Candidates file not found: ${candidatesPath}`);\n }\n\n const candidates = JSON.parse(readFileSync(candidatesPath, \"utf8\")) as RepoCandidate[];\n const workdir = options.workdir ?? join(options.cwd, \"research\", \"workdir\");\n mkdirSync(workdir, { recursive: true });\n mkdirSync(join(options.cwd, \"research\", \"findings\"), { recursive: true });\n\n const findings: RepoFinding[] = [];\n const git = simpleGit();\n\n for (const candidate of candidates) {\n const repoSlug = candidate.fullName.replace(\"/\", \"__\");\n const repoPath = join(workdir, repoSlug);\n if (existsSync(repoPath)) rmSync(repoPath, { recursive: true, force: true });\n\n await git.raw([\"clone\", \"--depth\", \"1\", candidate.htmlUrl, repoPath]);\n const finding = analyzeRepository(candidate, repoPath);\n findings.push(finding);\n\n writeText(join(options.cwd, \"research\", \"findings\", `${repoSlug}.md`), findingToMarkdown(finding));\n\n if (!options.keepClones) {\n rmSync(repoPath, { recursive: true, force: true });\n }\n }\n\n return findings;\n}\n","import { existsSync, readFileSync } from \"node:fs\";\nimport { join } from \"node:path\";\nimport type { RepoCandidate, RepoFinding, RepoScore } from \"../config/types.js\";\nimport { listFilesRecursive } from \"../utils/fs.js\";\n\nfunction normalizeRelativePath(file: string): string {\n return file.replace(/\\\\/g, \"/\");\n}\n\nfunction hasFile(files: string[], matcher: RegExp): boolean {\n return files.some((file) => matcher.test(normalizeRelativePath(file)));\n}\n\nfunction fileText(root: string, file: string): string {\n const path = join(root, file);\n return existsSync(path) ? readFileSync(path, \"utf8\") : \"\";\n}\n\nfunction textIncludes(root: string, files: string[], matcher: RegExp, terms: string[]): boolean {\n const lowerTerms = terms.map((term) => term.toLowerCase());\n return files\n .filter((file) => matcher.test(normalizeRelativePath(file)))\n .some((file) => {\n const text = fileText(root, file).toLowerCase();\n return lowerTerms.some((term) => text.includes(term));\n });\n}\n\nfunction bounded(value: number): number {\n return Math.max(0, Math.min(5, value));\n}\n\nexport function analyzeRepository(candidate: RepoCandidate, repoRoot: string): RepoFinding {\n const files = listFilesRecursive(repoRoot);\n const score: RepoScore = {\n architecture: bounded(\n Number(hasFile(files, /^app\\//)) +\n Number(hasFile(files, /^components\\//)) +\n Number(hasFile(files, /^lib\\//)) +\n Number(hasFile(files, /^server\\//)) +\n Number(hasFile(files, /^packages\\//))\n ),\n supabaseAuthRls: bounded(\n Number(hasFile(files, /^supabase\\/migrations\\//)) * 2 +\n Number(textIncludes(repoRoot, files, /\\.(sql|md|ts|tsx)$/, [\"row level security\", \"policy\", \"rls\"])) +\n Number(textIncludes(repoRoot, files, /\\.(ts|tsx)$/, [\"createServerClient\", \"supabase-js\"])) +\n Number(textIncludes(repoRoot, files, /\\.(ts|tsx)$/, [\"service_role\", \"service-role\"]))\n ),\n security: bounded(\n Number(hasFile(files, /(^|\\/)SECURITY\\.md$/)) +\n Number(textIncludes(repoRoot, files, /\\.(md|yml|yaml|ts|tsx)$/, [\"OWASP\", \"CodeQL\", \"rate limit\"])) +\n Number(hasFile(files, /^\\.github\\/workflows\\//)) +\n Number(textIncludes(repoRoot, files, /\\.(ts|tsx)$/, [\"zod\", \"safeParse\"])) +\n Number(textIncludes(repoRoot, files, /\\.(md|ts|tsx)$/, [\"csrf\", \"ssrf\", \"idor\"]))\n ),\n frontendDesign: bounded(\n Number(hasFile(files, /^components\\//)) +\n Number(textIncludes(repoRoot, files, /\\.(css|ts|tsx|json)$/, [\"tokens\", \"theme\", \"tailwind\", \"radix\"])) +\n Number(textIncludes(repoRoot, files, /\\.(tsx|md|mdx)$/, [\"empty state\", \"loading\", \"error state\"])) +\n Number(hasFile(files, /(^|\\/)(DESIGN|STYLE_GUIDE)\\.md$/)) +\n Number(textIncludes(repoRoot, files, /\\.(md|mdx)$/, [\"creative direction\", \"content inventory\", \"user needs\"])) +\n Number(textIncludes(repoRoot, files, /\\.(md|mdx)$/, [\"reference set\", \"anti-reference\", \"design critique\", \"distinctiveness\"])) +\n Number(textIncludes(repoRoot, files, /\\.(md|mdx)$/, [\"product quality scorecard\", \"user/task fit\", \"content specificity\", \"source safety\"])) +\n Number(textIncludes(repoRoot, files, /\\.(tsx|css)$/, [\"aria-\", \"focus-visible\"]))\n ),\n accessibility: bounded(\n Number(textIncludes(repoRoot, files, /\\.(tsx|md)$/, [\"aria-\", \"keyboard\", \"focus-visible\"])) +\n Number(textIncludes(repoRoot, files, /\\.(tsx|md)$/, [\"WCAG\", \"accessibility\", \"a11y\"])) +\n Number(textIncludes(repoRoot, files, /\\.(json|js|ts)$/, [\"axe\", \"eslint-plugin-jsx-a11y\"]))\n ),\n testing: bounded(\n Number(hasFile(files, /(vitest|jest)\\.config\\.(js|ts|mjs)$/)) +\n Number(hasFile(files, /playwright\\.config\\.(js|ts|mjs)$/)) * 2 +\n Number(hasFile(files, /(^|\\/)(tests|__tests__|e2e)\\//)) +\n Number(hasFile(files, /^\\.storybook\\//)) +\n Number(textIncludes(repoRoot, files, /\\.(ts|tsx|js|jsx|md|mdx|json|yml|yaml)$/, [\"toHaveScreenshot\", \"visual regression\", \"chromatic\", \"argos\", \"loki\", \"test-storybook\"])) +\n Number(textIncludes(repoRoot, files, /package\\.json$/, [\"test\"]))\n ),\n documentation: bounded(\n Number(hasFile(files, /(^|\\/)README\\.md$/)) +\n Number(hasFile(files, /(^|\\/)CONTRIBUTING\\.md$/)) +\n Number(hasFile(files, /(^|\\/)CHANGELOG\\.md$/)) +\n Number(hasFile(files, /(^|\\/)(CODE_OF_CONDUCT|SUPPORT|GOVERNANCE)\\.md$/)) +\n Number(hasFile(files, /^docs\\//)) +\n Number(textIncludes(repoRoot, files, /\\.(md|mdx)$/, [\"architecture\", \"decision\", \"deployment\"]))\n ),\n ciDeployment: bounded(\n Number(hasFile(files, /^\\.github\\/workflows\\//)) * 2 +\n Number(hasFile(files, /vercel\\.json$/)) +\n Number(textIncludes(repoRoot, files, /\\.(yml|yaml|json|md)$/, [\"deployment\", \"preview\", \"production\"]))\n ),\n repoHealth: bounded(\n Number(hasFile(files, /^\\.github\\/ISSUE_TEMPLATE\\//)) +\n Number(hasFile(files, /(^|\\/)pull_request_template\\.md$/i)) +\n Number(hasFile(files, /^\\.github\\/CODEOWNERS$/)) +\n Number(hasFile(files, /^\\.github\\/(dependabot|labels|labeler)\\.ya?ml$/)) +\n Number(hasFile(files, /^\\.github\\/workflows\\/.*(codeql|labeler).*\\.ya?ml$/)) +\n Number(hasFile(files, /(^|\\/)(CODE_OF_CONDUCT|SUPPORT|GOVERNANCE|REPOSITORY_SETTINGS)\\.md$/)) +\n Number(textIncludes(repoRoot, files, /\\.(md|yml|yaml)$/, [\"branch protection\", \"private vulnerability reporting\", \"required status checks\"]))\n ),\n supplyChain: bounded(\n Number(hasFile(files, /^\\.github\\/workflows\\/.*dependency.*review.*\\.ya?ml$/)) +\n Number(hasFile(files, /^\\.github\\/workflows\\/.*scorecard.*\\.ya?ml$/)) +\n Number(textIncludes(repoRoot, files, /^\\.github\\/workflows\\/.*\\.ya?ml$/, [\"id-token: write\", \"npm publish\", \"trusted publishing\", \"provenance\"])) +\n Number(textIncludes(repoRoot, files, /^\\.github\\/workflows\\/.*\\.ya?ml$/, [\"dependency-review-action\", \"scorecard-action\", \"npm audit\"])) +\n Number(hasFile(files, /(^|\\/)SUPPLY_CHAIN\\.md$/)) +\n Number(textIncludes(repoRoot, files, /\\.(md|yml|yaml|json)$/, [\"provenance\", \"OIDC\", \"trusted publishing\", \"OpenSSF\"]))\n ),\n agentReadiness: bounded(\n Number(hasFile(files, /(^|\\/)AGENTS\\.md$/)) * 2 +\n Number(hasFile(files, /(^|\\/)\\.cursor\\//)) +\n Number(hasFile(files, /(^|\\/)CLAUDE\\.md$/)) +\n Number(hasFile(files, /(^|\\/)schemas\\//)) +\n Number(textIncludes(repoRoot, files, /\\.(md|mdx|json|ts|tsx)$/, [\"agent\", \"prompt\", \"skill\", \"handoff\", \"trace\", \"guardrail\", \"agent-roster\"]))\n )\n };\n\n const selectedFiles = files\n .filter((file) =>\n /(^|\\/)(README|SECURITY|CONTRIBUTING|CHANGELOG|CODE_OF_CONDUCT|SUPPORT|GOVERNANCE|REPOSITORY_SETTINGS|SUPPLY_CHAIN|AGENTS|CLAUDE|DESIGN|STYLE_GUIDE|TESTING|DEPLOYMENT)\\.md$/.test(file) ||\n /(^|\\/)COUNCIL\\.md$/.test(file) ||\n /^\\.github\\/workflows\\//.test(file) ||\n /^\\.github\\/ISSUE_TEMPLATE\\//.test(file) ||\n /^\\.github\\/CODEOWNERS$/.test(file) ||\n /^\\.github\\/(dependabot|labels|labeler)\\.ya?ml$/.test(file) ||\n /(^|\\/)pull_request_template\\.md$/i.test(file) ||\n /^\\.storybook\\//.test(file) ||\n /^schemas\\//.test(file) ||\n /^supabase\\/migrations\\//.test(file) ||\n /package\\.json$/.test(file) ||\n /playwright\\.config\\.(js|ts|mjs)$/.test(file) ||\n /(chromatic|argos|loki)\\.(config\\.)?(json|js|ts|mjs|yml|yaml)$/.test(file)\n )\n .slice(0, 30);\n\n const strongPractices: string[] = [];\n if (score.security >= 4) strongPractices.push(\"Security posture is explicit through docs, validation, CI, or review tooling.\");\n if (score.supabaseAuthRls >= 4) strongPractices.push(\"Supabase authorization appears to be handled close to the data boundary.\");\n if (score.testing >= 4) strongPractices.push(\"Test setup includes meaningful automated, browser-level, component-state, or visual-regression coverage.\");\n if (score.frontendDesign >= 4)\n strongPractices.push(\"Frontend implementation shows reusable components, states, design-system, content-first direction, or reference-led critique signals.\");\n if (score.documentation >= 4) strongPractices.push(\"Documentation is strong enough for external contributors or agents to onboard.\");\n if (score.repoHealth >= 4) strongPractices.push(\"Repository health is supported by issue/PR templates, labels, dependency automation, code scanning, ownership, branch protection guidance, or support docs.\");\n if (score.supplyChain >= 4) strongPractices.push(\"Supply-chain posture includes provenance, dependency review, Scorecard, OIDC publishing, or release integrity signals.\");\n\n const weakPractices: string[] = [];\n if (score.security < 3) weakPractices.push(\"Security expectations are implicit or incomplete.\");\n if (score.supabaseAuthRls < 3) weakPractices.push(\"Supabase RLS/Auth practices are not clearly discoverable.\");\n if (score.accessibility < 3) weakPractices.push(\"Accessibility signals are weak or absent.\");\n if (score.repoHealth < 3) weakPractices.push(\"Public repository health files, labels, branch protection guidance, contribution workflow, dependency automation, or code scanning are weak.\");\n if (score.supplyChain < 3) weakPractices.push(\"Supply-chain provenance, dependency review, Scorecard, or release-integrity signals are weak.\");\n if (score.agentReadiness < 3) weakPractices.push(\"Agent handoff, tracing, guardrail, schema, or AI-workflow instructions are not mature.\");\n\n const patternsToAdopt = [\n \"Prefer explicit docs and checklists over tribal conventions.\",\n \"Promote authorization and validation rules into reusable review gates.\",\n \"Separate frontend design quality from generic implementation review.\",\n \"Treat brand, content, and creative-direction evidence as frontend quality inputs, not optional polish.\",\n \"Use references and anti-references as critique inputs, not as source designs to copy.\",\n \"Use repeatable frontend product-quality scoring for user task, content specificity, visual identity, IA, states, accessibility, and source safety.\",\n \"Treat component-state screenshots and visual-regression evidence as acceptance artifacts for high-risk UI changes.\",\n \"Promote agent handoff practices into schema-backed records and auditable evidence instead of prose-only instructions.\",\n \"Treat public repository health files, issue/PR templates, labels, branch protection guidance, dependency automation, and code scanning as release-readiness assets.\",\n \"Treat package provenance, dependency review, Scorecard, and release workflow controls as package trust requirements.\"\n ];\n\n const impactOnKit = [\n \"Use score deltas to decide which templates and skills need stronger language.\",\n \"Add repeated high-confidence patterns to checklists, not one-off project quirks.\"\n ];\n\n return {\n candidate,\n score,\n selectedFiles,\n strongPractices,\n weakPractices,\n patternsToAdopt,\n impactOnKit\n };\n}\n","import { existsSync, readFileSync, readdirSync } from \"node:fs\";\nimport { join } from \"node:path\";\nimport type { RepoScore } from \"../config/types.js\";\nimport { writeText } from \"../utils/fs.js\";\n\nconst SUMMARY_TARGETS = {\n \"nextjs-patterns\": {\n title: \"Next.js Patterns\",\n scoreKeys: [\"architecture\", \"ciDeployment\", \"documentation\"] satisfies (keyof RepoScore)[],\n categories: [\"official-nextjs\", \"production-saas\"]\n },\n \"supabase-rls-patterns\": {\n title: \"Supabase RLS Patterns\",\n scoreKeys: [\"supabaseAuthRls\"] satisfies (keyof RepoScore)[],\n categories: [\"supabase-nextjs\"]\n },\n \"security-patterns\": {\n title: \"Security Patterns\",\n scoreKeys: [\"security\"] satisfies (keyof RepoScore)[],\n categories: [\"security-quality\", \"supabase-nextjs\", \"production-saas\"]\n },\n \"frontend-design-patterns\": {\n title: \"Frontend Design Patterns\",\n scoreKeys: [\"frontendDesign\", \"accessibility\"] satisfies (keyof RepoScore)[],\n categories: [\"design-systems\", \"production-saas\"]\n },\n \"testing-patterns\": {\n title: \"Testing Patterns\",\n scoreKeys: [\"testing\"] satisfies (keyof RepoScore)[],\n categories: [\"testing-docs-agents\", \"official-nextjs\", \"production-saas\"]\n },\n \"docs-and-agent-patterns\": {\n title: \"Docs And Agent Patterns\",\n scoreKeys: [\"documentation\", \"agentReadiness\"] satisfies (keyof RepoScore)[],\n categories: [\"testing-docs-agents\", \"official-nextjs\"]\n },\n \"repo-health-patterns\": {\n title: \"Repo Health Patterns\",\n scoreKeys: [\"repoHealth\", \"documentation\", \"ciDeployment\", \"security\"] satisfies (keyof RepoScore)[],\n categories: [\"repo-health-maintainers\", \"testing-docs-agents\", \"security-quality\", \"production-saas\"]\n },\n \"supply-chain-patterns\": {\n title: \"Supply Chain Patterns\",\n scoreKeys: [\"supplyChain\", \"security\", \"ciDeployment\", \"repoHealth\"] satisfies (keyof RepoScore)[],\n categories: [\"supply-chain-security\", \"repo-health-maintainers\", \"security-quality\"]\n }\n} as const;\n\ninterface ParsedFinding {\n file: string;\n fullName: string;\n category: string;\n stars: number;\n score: RepoScore;\n totalScore: number;\n strongPractices: string[];\n weakPractices: string[];\n}\n\nconst SCORE_KEYS: (keyof RepoScore)[] = [\n \"architecture\",\n \"supabaseAuthRls\",\n \"security\",\n \"frontendDesign\",\n \"accessibility\",\n \"testing\",\n \"documentation\",\n \"ciDeployment\",\n \"repoHealth\",\n \"supplyChain\",\n \"agentReadiness\"\n];\n\nfunction sectionBullets(text: string, start: string, end: string): string[] {\n const startIndex = text.indexOf(start);\n if (startIndex === -1) return [];\n\n const afterStart = text.slice(startIndex + start.length);\n const endIndex = afterStart.indexOf(end);\n const section = endIndex === -1 ? afterStart : afterStart.slice(0, endIndex);\n\n return section\n .split(\"\\n\")\n .map((line) => line.trim())\n .filter((line) => line.startsWith(\"- \") && !line.includes(\"None detected\"))\n .map((line) => line.slice(2));\n}\n\nfunction parseFinding(file: string, text: string): ParsedFinding | null {\n const fullName = text.match(/^# Repo Finding: (.+)$/m)?.[1];\n const category = text.match(/^- Category: (.+)$/m)?.[1];\n const stars = Number.parseInt(text.match(/^- Stars: (\\d+)$/m)?.[1] ?? \"0\", 10);\n const scoreJson = text.match(/## Score\\n```json\\n([\\s\\S]*?)\\n```/)?.[1];\n\n if (!fullName || !category || !scoreJson) return null;\n\n const parsedScore = JSON.parse(scoreJson) as Partial<RepoScore>;\n const score = Object.fromEntries(SCORE_KEYS.map((key) => [key, parsedScore[key] ?? 0])) as unknown as RepoScore;\n const totalScore = Object.values(score).reduce((sum, value) => sum + value, 0);\n\n return {\n file,\n fullName,\n category,\n stars,\n score,\n totalScore,\n strongPractices: sectionBullets(text, \"## Strong Practices\", \"## Weaknesses / Not Worth Copying Blindly\"),\n weakPractices: sectionBullets(text, \"## Weaknesses / Not Worth Copying Blindly\", \"## Files Worth Studying\")\n };\n}\n\nfunction countBy(values: string[]): [string, number][] {\n const counts = new Map<string, number>();\n for (const value of values) counts.set(value, (counts.get(value) ?? 0) + 1);\n return [...counts.entries()].sort((a, b) => b[1] - a[1] || a[0].localeCompare(b[0]));\n}\n\nfunction scoreFor(finding: ParsedFinding, scoreKeys: (keyof RepoScore)[]): number {\n return scoreKeys.reduce((sum, key) => sum + finding.score[key], 0);\n}\n\nfunction averageScore(findings: ParsedFinding[], scoreKeys: (keyof RepoScore)[]): string {\n if (findings.length === 0) return \"0.00\";\n const max = scoreKeys.length * 5;\n const avg = findings.reduce((sum, finding) => sum + scoreFor(finding, scoreKeys) / max, 0) / findings.length;\n return avg.toFixed(2);\n}\n\nfunction renderRepoList(findings: ParsedFinding[], scoreKeys: (keyof RepoScore)[]): string {\n const maxTotalScore = findings[0] ? Object.keys(findings[0].score).length * 5 : 0;\n return findings\n .slice()\n .sort((a, b) => scoreFor(b, scoreKeys) - scoreFor(a, scoreKeys) || b.totalScore - a.totalScore || b.stars - a.stars)\n .slice(0, 12)\n .map((finding) => `- ${finding.fullName} (${finding.category}) - focus score ${scoreFor(finding, scoreKeys)}, total ${finding.totalScore}/${maxTotalScore}`)\n .join(\"\\n\");\n}\n\nexport function summarizeFindings(cwd: string): string[] {\n const findingsDir = join(cwd, \"research\", \"findings\");\n if (!existsSync(findingsDir)) {\n throw new Error(\"No research/findings directory exists. Run agent-kit research scan first.\");\n }\n\n const findingFiles = readdirSync(findingsDir).filter((file) => file.endsWith(\".md\"));\n const findings = findingFiles\n .map((file) => parseFinding(file, readFileSync(join(findingsDir, file), \"utf8\")))\n .filter((finding): finding is ParsedFinding => finding !== null);\n\n const categoryCounts = countBy(findings.map((finding) => finding.category));\n const outputs: string[] = [];\n\n const overview = `# Research Scan Overview\n\nGenerated from ${findings.length} parsed repository findings.\n\n## Category Coverage\n${categoryCounts.map(([category, count]) => `- ${category}: ${count}`).join(\"\\n\")}\n\n## Highest Total Scores\n${findings\n .slice()\n .sort((a, b) => b.totalScore - a.totalScore || b.stars - a.stars)\n .slice(0, 20)\n .map((finding) => `- ${finding.fullName} (${finding.category}) - ${finding.totalScore}/${Object.keys(finding.score).length * 5}`)\n .join(\"\\n\")}\n\n## Most Repeated Strengths\n${countBy(findings.flatMap((finding) => finding.strongPractices))\n .slice(0, 12)\n .map(([practice, count]) => `- ${practice} (${count})`)\n .join(\"\\n\")}\n\n## Most Repeated Gaps\n${countBy(findings.flatMap((finding) => finding.weakPractices))\n .slice(0, 12)\n .map(([practice, count]) => `- ${practice} (${count})`)\n .join(\"\\n\")}\n`;\n\n const overviewPath = join(cwd, \"research\", \"summaries\", \"scan-overview.md\");\n writeText(overviewPath, overview);\n outputs.push(overviewPath);\n\n for (const [target, config] of Object.entries(SUMMARY_TARGETS)) {\n const categories: readonly string[] = config.categories;\n const scopedFindings = findings.filter((finding) => categories.includes(finding.category));\n const path = join(cwd, \"research\", \"summaries\", `${target}.md`);\n const summary = `# ${config.title}\n\nGenerated from ${scopedFindings.length} relevant repository findings.\n\n## Focus Areas\n${config.scoreKeys.map((key) => `- ${key}`).join(\"\\n\")}\n\n## Aggregate Evidence\n- Average normalized focus score: ${averageScore(scopedFindings, config.scoreKeys)}\n- Repositories considered: ${scopedFindings.length}\n\n## Strongest Repositories For This Topic\n${renderRepoList(scopedFindings, config.scoreKeys) || \"- No matching findings.\"}\n\n## Repeated Strengths\n${countBy(scopedFindings.flatMap((finding) => finding.strongPractices))\n .slice(0, 8)\n .map(([practice, count]) => `- ${practice} (${count})`)\n .join(\"\\n\") || \"- No repeated strengths detected.\"}\n\n## Repeated Gaps\n${countBy(scopedFindings.flatMap((finding) => finding.weakPractices))\n .slice(0, 8)\n .map(([practice, count]) => `- ${practice} (${count})`)\n .join(\"\\n\") || \"- No repeated gaps detected.\"}\n\n## Source Findings\n${scopedFindings\n .slice()\n .sort((a, b) => scoreFor(b, config.scoreKeys) - scoreFor(a, config.scoreKeys))\n .slice(0, 25)\n .map((finding) => `- research/findings/${finding.file}`)\n .join(\"\\n\")}\n`;\n\n writeText(path, summary);\n outputs.push(path);\n }\n\n return outputs;\n}\n\nexport function proposeUpdates(cwd: string): string {\n const output = `# Proposed Agent Kit Updates\n\nReview the generated research summaries, then convert repeated best practices into:\n\n- Root markdown templates in \\`templates/next-supabase\\`\n- Reusable skills in \\`skills/\\`\n- Agent role docs in \\`agents/\\`\n- Security and frontend checklists in \\`checklists/\\`\n\nDo not copy source code from scanned repositories. Adopt only generalized practices with clear rationale.\n`;\n\n const path = join(cwd, \"research\", \"proposed-updates.md\");\n writeText(path, output);\n return path;\n}\n","import { CorrectionRulesContract, type CorrectionRuleContractValue, type CorrectionRulesContractValue, formatContractIssues } from \"../config/contracts.js\";\nimport {\n AGENT_RULES_JSON,\n PROJECT_RULES_JSON,\n UPSTREAM_PROPOSALS_JSON,\n ensureStudioDirs,\n nowIso,\n readJsonFile,\n redactSensitive,\n safeSlug,\n writeJsonFile\n} from \"./shared.js\";\n\nexport interface AddCorrectionOptions {\n scope: CorrectionRuleContractValue[\"scope\"];\n text: string;\n agentId?: string;\n sourceSessionId?: string;\n id?: string;\n}\n\nexport interface CorrectionListResult {\n project: CorrectionRuleContractValue[];\n agent: CorrectionRuleContractValue[];\n upstream: CorrectionRuleContractValue[];\n}\n\nfunction fileForScope(scope: CorrectionRuleContractValue[\"scope\"]): string {\n if (scope === \"agent\") return AGENT_RULES_JSON;\n if (scope === \"upstream-proposal\") return UPSTREAM_PROPOSALS_JSON;\n return PROJECT_RULES_JSON;\n}\n\nexport function emptyCorrectionRules(): CorrectionRulesContractValue {\n return { schemaVersion: 1, rules: [] };\n}\n\nexport function readCorrectionRules(cwd: string, relativePath: string): CorrectionRulesContractValue {\n const parsed = readJsonFile<unknown>(cwd, relativePath) ?? emptyCorrectionRules();\n const result = CorrectionRulesContract.safeParse(parsed);\n if (!result.success) {\n throw new Error(`Invalid ${relativePath}: ${formatContractIssues(result.error).join(\"; \")}`);\n }\n return result.data;\n}\n\nexport function ensureCorrectionFiles(cwd: string): void {\n ensureStudioDirs(cwd);\n for (const path of [PROJECT_RULES_JSON, AGENT_RULES_JSON, UPSTREAM_PROPOSALS_JSON]) {\n if (!readJsonFile<unknown>(cwd, path)) writeJsonFile(cwd, path, emptyCorrectionRules());\n }\n}\n\nexport function addCorrection(cwd: string, options: AddCorrectionOptions): CorrectionRuleContractValue {\n ensureCorrectionFiles(cwd);\n const targetPath = fileForScope(options.scope);\n const rules = readCorrectionRules(cwd, targetPath);\n const id = options.id ?? safeSlug(options.text).slice(0, 48);\n const rule: CorrectionRuleContractValue = {\n id,\n scope: options.scope,\n status: options.scope === \"upstream-proposal\" ? \"proposed\" : \"active\",\n text: redactSensitive(options.text),\n ...(options.agentId ? { agentId: options.agentId, appliesToAgents: [options.agentId] } : {}),\n ...(options.sourceSessionId ? { sourceSessionId: options.sourceSessionId } : {}),\n createdAt: nowIso(),\n reviewedAt: null\n };\n const parsed = CorrectionRulesContract.parse({ ...rules, rules: [...rules.rules.filter((item) => item.id !== id), rule] });\n writeJsonFile(cwd, targetPath, parsed);\n return rule;\n}\n\nexport function listCorrections(cwd: string): CorrectionListResult {\n ensureCorrectionFiles(cwd);\n return {\n project: readCorrectionRules(cwd, PROJECT_RULES_JSON).rules,\n agent: readCorrectionRules(cwd, AGENT_RULES_JSON).rules,\n upstream: readCorrectionRules(cwd, UPSTREAM_PROPOSALS_JSON).rules\n };\n}\n\nexport function applyCorrection(cwd: string, id: string): CorrectionRuleContractValue {\n ensureCorrectionFiles(cwd);\n for (const path of [PROJECT_RULES_JSON, AGENT_RULES_JSON, UPSTREAM_PROPOSALS_JSON]) {\n const rules = readCorrectionRules(cwd, path);\n const index = rules.rules.findIndex((rule) => rule.id === id);\n if (index === -1) continue;\n const current = rules.rules[index];\n if (!current) continue;\n const { retiredAt: _retiredAt, reason: _reason, ...base } = current;\n const updated: CorrectionRuleContractValue = {\n ...base,\n status: \"active\",\n reviewedAt: nowIso()\n };\n rules.rules[index] = updated;\n writeJsonFile(cwd, path, CorrectionRulesContract.parse(rules));\n return updated;\n }\n throw new Error(`Correction not found: ${id}`);\n}\n\nexport function retireCorrection(cwd: string, id: string, reason: string): CorrectionRuleContractValue {\n ensureCorrectionFiles(cwd);\n for (const path of [PROJECT_RULES_JSON, AGENT_RULES_JSON, UPSTREAM_PROPOSALS_JSON]) {\n const rules = readCorrectionRules(cwd, path);\n const index = rules.rules.findIndex((rule) => rule.id === id);\n if (index === -1) continue;\n const current = rules.rules[index];\n if (!current) continue;\n const updated: CorrectionRuleContractValue = {\n ...current,\n status: \"retired\",\n retiredAt: nowIso(),\n reason\n };\n rules.rules[index] = updated;\n writeJsonFile(cwd, path, CorrectionRulesContract.parse(rules));\n return updated;\n }\n throw new Error(`Correction not found: ${id}`);\n}\n\nexport function proposeCorrectionUpstream(cwd: string, id: string): CorrectionRuleContractValue {\n const all = listCorrections(cwd);\n const found = [...all.project, ...all.agent].find((rule) => rule.id === id);\n if (!found) throw new Error(`Correction not found: ${id}`);\n return addCorrection(cwd, {\n scope: \"upstream-proposal\",\n text: found.text,\n ...(found.agentId ? { agentId: found.agentId } : {}),\n ...(found.sourceSessionId ? { sourceSessionId: found.sourceSessionId } : {}),\n id: `${found.id}-upstream`\n });\n}\n","import { existsSync, readFileSync, readdirSync, statSync } from \"node:fs\";\nimport { join } from \"node:path\";\nimport {\n SessionEventContract,\n StudioSessionContract,\n type SessionEventContractValue,\n type StudioSessionContractValue,\n formatContractIssues\n} from \"../config/contracts.js\";\nimport { DEFAULT_AGENT_ROSTER_TARGET } from \"../config/defaults.js\";\nimport { addCorrection } from \"./corrections.js\";\nimport {\n ACTIVE_SESSION_FILE,\n COUNCIL_SESSIONS_DIR,\n appendJsonLine,\n ensureStudioDirs,\n escapeMarkdownTableCell,\n escapeMarkdownText,\n listMarkdown,\n nowIso,\n readJsonFile,\n readJsonLines,\n readTextFile,\n redactSensitive,\n safeSlug,\n validateRelativeArtifactPath,\n writeJsonFile,\n writeTextFile\n} from \"./shared.js\";\n\nexport interface StartSessionOptions {\n title: string;\n workflowId?: string;\n request?: string;\n affectedLayers?: string[];\n qualityTarget?: StudioSessionContractValue[\"qualityTarget\"];\n}\n\nexport interface HandoffOptions {\n fromAgentId: string;\n toAgentId: string;\n decision: string;\n risk: string;\n evidence?: string[];\n}\n\nexport interface SessionCommandResult {\n sessionId: string;\n sessionPath: string;\n}\n\nfunction sessionDir(sessionId: string): string {\n return `${COUNCIL_SESSIONS_DIR}/${safeSlug(sessionId)}`;\n}\n\nfunction sessionJsonPath(sessionId: string): string {\n return `${sessionDir(sessionId)}/session.json`;\n}\n\nfunction eventsPath(sessionId: string): string {\n return `${sessionDir(sessionId)}/events.jsonl`;\n}\n\nfunction indexPath(sessionId: string): string {\n return `${sessionDir(sessionId)}/index.md`;\n}\n\nfunction transcriptPath(sessionId: string): string {\n return `${sessionDir(sessionId)}/transcript.md`;\n}\n\nfunction readDefaultWorkflowOutputs(cwd: string, workflowId: string): StudioSessionContractValue[\"requiredOutputs\"] {\n const roster = readJsonFile<{ workflows?: Array<{ id?: string; requiredOutputs?: string[] }> }>(cwd, DEFAULT_AGENT_ROSTER_TARGET);\n const workflow = roster?.workflows?.find((item) => item.id === workflowId);\n return (workflow?.requiredOutputs ?? [\"decision\", \"risk\", \"verification evidence\"]).map((name) => ({\n name,\n status: \"missing\" as const\n }));\n}\n\nexport function startSession(cwd: string, options: StartSessionOptions): SessionCommandResult {\n ensureStudioDirs(cwd);\n const datePrefix = new Date().toISOString().slice(0, 10);\n const sessionId = safeSlug(`${datePrefix}-${options.title}`);\n const now = nowIso();\n const workflowId = options.workflowId ?? \"planning\";\n const session: StudioSessionContractValue = {\n schemaVersion: 1,\n sessionId,\n title: options.title,\n createdAt: now,\n updatedAt: now,\n status: \"in-progress\",\n workflowId,\n request: options.request ?? options.title,\n affectedLayers: options.affectedLayers ?? [],\n activeAgentId: \"planner\",\n nextAgentId: undefined,\n qualityTarget: options.qualityTarget ?? \"baseline-setup\",\n requiredOutputs: readDefaultWorkflowOutputs(cwd, workflowId)\n };\n\n writeJsonFile(cwd, sessionJsonPath(sessionId), StudioSessionContract.parse(session));\n writeTextFile(cwd, ACTIVE_SESSION_FILE, `${sessionId}\\n`);\n appendSessionEvent(cwd, sessionId, {\n type: \"session_started\",\n createdAt: now,\n agentId: \"planner\",\n text: `Started ${workflowId} session: ${options.title}`\n });\n return { sessionId, sessionPath: sessionDir(sessionId) };\n}\n\nexport function listSessions(cwd: string): StudioSessionContractValue[] {\n const root = join(cwd, COUNCIL_SESSIONS_DIR);\n if (!existsSync(root)) return [];\n return readdirSync(root)\n .filter((entry) => entry !== \"active\")\n .map((entry) => join(root, entry, \"session.json\"))\n .filter((path) => existsSync(path) && statSync(path).isFile())\n .map((path) => StudioSessionContract.parse(JSON.parse(readFileSync(path, \"utf8\")) as unknown))\n .sort((a, b) => a.createdAt.localeCompare(b.createdAt));\n}\n\nexport function getActiveSessionId(cwd: string): string {\n const active = readTextFile(cwd, ACTIVE_SESSION_FILE)?.trim();\n if (!active) throw new Error(\"No active Agent Studio session. Run agent-kit session start first.\");\n return safeSlug(active);\n}\n\nexport function readSession(cwd: string, sessionId = getActiveSessionId(cwd)): StudioSessionContractValue {\n const parsed = readJsonFile<unknown>(cwd, sessionJsonPath(sessionId));\n const result = StudioSessionContract.safeParse(parsed);\n if (!result.success) throw new Error(`Invalid ${sessionJsonPath(sessionId)}: ${formatContractIssues(result.error).join(\"; \")}`);\n return result.data;\n}\n\nexport function readSessionEvents(cwd: string, sessionId = getActiveSessionId(cwd)): SessionEventContractValue[] {\n return readJsonLines(cwd, eventsPath(sessionId)).map((event, index) => {\n const result = SessionEventContract.safeParse(event);\n if (!result.success) {\n throw new Error(`Invalid ${eventsPath(sessionId)} line ${index + 1}: ${formatContractIssues(result.error).join(\"; \")}`);\n }\n return result.data;\n });\n}\n\nfunction writeSession(cwd: string, session: StudioSessionContractValue): void {\n writeJsonFile(cwd, sessionJsonPath(session.sessionId), StudioSessionContract.parse(session));\n}\n\nexport function appendSessionEvent(cwd: string, sessionId: string, event: SessionEventContractValue): SessionEventContractValue {\n const parsed = SessionEventContract.parse(redactEvent(event));\n appendJsonLine(cwd, eventsPath(sessionId), parsed);\n const session = readSession(cwd, sessionId);\n const updated: StudioSessionContractValue = {\n ...session,\n updatedAt: parsed.createdAt\n };\n if (parsed.agentId) updated.activeAgentId = parsed.agentId;\n if (parsed.type === \"handoff\" && parsed.toAgentId) {\n updated.activeAgentId = parsed.toAgentId;\n updated.nextAgentId = parsed.toAgentId;\n }\n if (parsed.type === \"session_status_changed\" && parsed.status) updated.status = parsed.status;\n writeSession(cwd, updated);\n return parsed;\n}\n\nfunction redactEvent(event: SessionEventContractValue): SessionEventContractValue {\n return {\n ...event,\n ...(event.text ? { text: redactSensitive(event.text) } : {}),\n ...(event.decision ? { decision: redactSensitive(event.decision) } : {}),\n ...(event.risk ? { risk: redactSensitive(event.risk) } : {}),\n ...(event.notes ? { notes: redactSensitive(event.notes) } : {}),\n ...(event.command ? { command: redactSensitive(event.command) } : {}),\n ...(event.outputName ? { outputName: redactSensitive(event.outputName) } : {}),\n ...(event.evidence ? { evidence: event.evidence.map(redactSensitive) } : {})\n };\n}\n\nexport function recordNote(cwd: string, agentId: string, text: string): SessionEventContractValue {\n return appendSessionEvent(cwd, getActiveSessionId(cwd), { type: \"agent_message\", createdAt: nowIso(), agentId, text });\n}\n\nexport function recordDecision(cwd: string, agentId: string, decision: string, risk?: string): SessionEventContractValue {\n return appendSessionEvent(cwd, getActiveSessionId(cwd), {\n type: \"agent_decision\",\n createdAt: nowIso(),\n agentId,\n decision,\n ...(risk ? { risk } : {})\n });\n}\n\nexport function recordHandoff(cwd: string, options: HandoffOptions): SessionEventContractValue {\n return appendSessionEvent(cwd, getActiveSessionId(cwd), {\n type: \"handoff\",\n createdAt: nowIso(),\n fromAgentId: options.fromAgentId,\n toAgentId: options.toAgentId,\n decision: options.decision,\n risk: options.risk,\n evidence: options.evidence ?? []\n });\n}\n\nexport function recordCorrection(\n cwd: string,\n options: { agentId?: string; scope: \"session\" | \"project\" | \"agent\" | \"upstream-proposal\"; text: string }\n): SessionEventContractValue {\n const sessionId = getActiveSessionId(cwd);\n const correction =\n options.scope === \"session\"\n ? undefined\n : addCorrection(cwd, {\n scope: options.scope,\n text: options.text,\n ...(options.agentId ? { agentId: options.agentId } : {}),\n sourceSessionId: sessionId\n });\n return appendSessionEvent(cwd, sessionId, {\n type: \"human_correction\",\n createdAt: nowIso(),\n ...(options.agentId ? { agentId: options.agentId } : {}),\n scope: options.scope,\n text: options.text,\n ...(correction ? { correctionId: correction.id } : {})\n });\n}\n\nexport function recordArtifact(cwd: string, file: string, note?: string): SessionEventContractValue {\n const artifactPath = validateRelativeArtifactPath(cwd, file);\n return appendSessionEvent(cwd, getActiveSessionId(cwd), {\n type: \"artifact_recorded\",\n createdAt: nowIso(),\n artifactPath,\n ...(note ? { notes: note } : {})\n });\n}\n\nexport function recordVerification(cwd: string, command: string, result: \"pass\" | \"fail\" | \"skipped\", notes?: string): SessionEventContractValue {\n return appendSessionEvent(cwd, getActiveSessionId(cwd), {\n type: \"verification_recorded\",\n createdAt: nowIso(),\n command,\n result,\n ...(notes ? { notes } : {})\n });\n}\n\nexport function recordRequiredOutput(\n cwd: string,\n name: string,\n status: \"missing\" | \"partial\" | \"complete\" | \"not-applicable\",\n evidence?: string\n): SessionEventContractValue {\n const trimmedName = name.trim();\n if (!trimmedName) throw new Error(\"Required output name is required.\");\n const sessionId = getActiveSessionId(cwd);\n const session = readSession(cwd, sessionId);\n const now = nowIso();\n const output = {\n name: trimmedName,\n status,\n ...(evidence ? { evidence: redactSensitive(evidence) } : {})\n };\n const outputIndex = session.requiredOutputs.findIndex((item) => item.name === trimmedName);\n const requiredOutputs =\n outputIndex === -1\n ? [...session.requiredOutputs, output]\n : session.requiredOutputs.map((item, index) => (index === outputIndex ? { ...item, ...output } : item));\n writeSession(cwd, { ...session, requiredOutputs, updatedAt: now });\n return appendSessionEvent(cwd, sessionId, {\n type: \"required_output_updated\",\n createdAt: now,\n outputName: trimmedName,\n outputStatus: status,\n ...(evidence ? { evidence: [evidence] } : {})\n });\n}\n\nexport function closeSession(cwd: string, status: \"planned\" | \"in-progress\" | \"blocked\" | \"complete\"): StudioSessionContractValue {\n const sessionId = getActiveSessionId(cwd);\n appendSessionEvent(cwd, sessionId, {\n type: \"session_status_changed\",\n createdAt: nowIso(),\n status,\n text: `Session marked ${status}.`\n });\n return readSession(cwd, sessionId);\n}\n\nexport function renderActiveSession(cwd: string): SessionCommandResult {\n return renderSession(cwd, getActiveSessionId(cwd));\n}\n\nexport function renderSession(cwd: string, sessionId: string): SessionCommandResult {\n const session = readSession(cwd, sessionId);\n const events = readSessionEvents(cwd, sessionId);\n const renderedAt = nowIso();\n const updated = { ...session, renderedAt, updatedAt: renderedAt };\n writeTextFile(cwd, indexPath(sessionId), renderSessionIndex(updated, events));\n writeTextFile(cwd, transcriptPath(sessionId), renderSessionTranscript(updated, events));\n writeSession(cwd, updated);\n return { sessionId, sessionPath: sessionDir(sessionId) };\n}\n\nfunction renderSessionIndex(session: StudioSessionContractValue, events: SessionEventContractValue[]): string {\n const handoffs = events.filter((event) => event.type === \"handoff\");\n const decisions = events.filter((event) => event.type === \"agent_decision\" || event.type === \"handoff\");\n const corrections = events.filter((event) => event.type === \"human_correction\");\n const artifacts = events.filter((event) => event.type === \"artifact_recorded\");\n const verification = events.filter((event) => event.type === \"verification_recorded\");\n\n return `# Council Session: ${escapeMarkdownText(session.title)}\n\nGenerated from \\`${sessionDir(session.sessionId)}/events.jsonl\\` at ${session.renderedAt ?? session.updatedAt}.\n\n## Current State\n\n- Session: ${session.sessionId}\n- Workflow: ${session.workflowId}\n- Status: ${session.status}\n- Active agent: ${session.activeAgentId ?? \"none\"}\n- Next agent: ${session.nextAgentId ?? \"none\"}\n- Quality target: ${session.qualityTarget}\n- Request: ${escapeMarkdownText(session.request)}\n\n## Handoff Graph\n\n\\`\\`\\`mermaid\n${renderMermaidGraph(handoffs)}\n\\`\\`\\`\n\n## Decisions\n\n| Agent | Decision | Risk | Evidence |\n| --- | --- | --- | --- |\n${decisions.map(renderDecisionRow).join(\"\\n\") || \"| None | None recorded | None recorded | None |\"}\n\n## Human Corrections\n\n| Scope | Agent | Correction | Durable Rule |\n| --- | --- | --- | --- |\n${corrections.map((event) => `| ${event.scope ?? \"session\"} | ${escapeMarkdownTableCell(event.agentId ?? \"all\")} | ${escapeMarkdownTableCell(event.text)} | ${event.correctionId ?? \"session-only\"} |`).join(\"\\n\") || \"| None | None | None recorded | None |\"}\n\n## Required Outputs\n\n| Output | Status | Evidence |\n| --- | --- | --- |\n${session.requiredOutputs.map((output) => `| ${escapeMarkdownTableCell(output.name)} | ${output.status} | ${escapeMarkdownTableCell(output.evidence)} |`).join(\"\\n\")}\n\n## Artifacts\n\n${listMarkdown(artifacts.map((event) => `${event.artifactPath}${event.notes ? ` - ${event.notes}` : \"\"}`))}\n\n## Verification\n\n| Command | Result | Notes |\n| --- | --- | --- |\n${verification.map((event) => `| ${escapeMarkdownTableCell(event.command)} | ${event.result ?? \"skipped\"} | ${escapeMarkdownTableCell(event.notes)} |`).join(\"\\n\") || \"| None recorded | skipped | Add verification before completion |\"}\n\n## Next Actions\n\n${renderNextActions(session, verification)}\n`;\n}\n\nfunction renderDecisionRow(event: SessionEventContractValue): string {\n if (event.type === \"handoff\") {\n return `| ${escapeMarkdownTableCell(`${event.fromAgentId ?? \"unknown\"} -> ${event.toAgentId ?? \"unknown\"}`)} | ${escapeMarkdownTableCell(event.decision)} | ${escapeMarkdownTableCell(event.risk)} | ${escapeMarkdownTableCell(event.evidence?.join(\", \"))} |`;\n }\n return `| ${escapeMarkdownTableCell(event.agentId ?? \"unknown\")} | ${escapeMarkdownTableCell(event.decision)} | ${escapeMarkdownTableCell(event.risk)} | ${escapeMarkdownTableCell(event.evidence?.join(\", \"))} |`;\n}\n\nfunction renderMermaidGraph(handoffs: SessionEventContractValue[]): string {\n if (handoffs.length === 0) return \"flowchart LR\\n session[\\\"Session\\\"]\";\n const lines = [\"flowchart LR\"];\n for (const handoff of handoffs) {\n const from = safeNodeId(handoff.fromAgentId ?? \"unknown\");\n const to = safeNodeId(handoff.toAgentId ?? \"unknown\");\n lines.push(` ${from}[\"${safeMermaidLabel(handoff.fromAgentId ?? \"unknown\")}\"] --> ${to}[\"${safeMermaidLabel(handoff.toAgentId ?? \"unknown\")}\"]`);\n }\n return lines.join(\"\\n\");\n}\n\nfunction safeNodeId(value: string): string {\n const id = value.replace(/[^a-zA-Z0-9_]/g, \"_\");\n return id || \"unknown\";\n}\n\nfunction safeMermaidLabel(value: string): string {\n const label = redactSensitive(value)\n .replace(/[^a-zA-Z0-9 _./:-]/g, \" \")\n .replace(/\\s+/g, \" \")\n .trim();\n return label || \"unknown\";\n}\n\nfunction renderNextActions(session: StudioSessionContractValue, verification: SessionEventContractValue[]): string {\n const missingOutputs = session.requiredOutputs.filter((output) => output.status === \"missing\" || output.status === \"partial\");\n const actions = [\n ...missingOutputs.map((output) => `Complete required output: ${output.name}.`),\n ...(verification.length === 0 ? [\"Record verification evidence before closing the session.\"] : []),\n ...(session.nextAgentId ? [`Continue with ${session.nextAgentId}.`] : [])\n ];\n return listMarkdown(actions);\n}\n\nfunction renderSessionTranscript(session: StudioSessionContractValue, events: SessionEventContractValue[]): string {\n const byAgent = new Map<string, SessionEventContractValue[]>();\n for (const event of events) {\n const key = event.agentId ?? event.fromAgentId ?? \"session\";\n byAgent.set(key, [...(byAgent.get(key) ?? []), event]);\n }\n const sections = [...byAgent.entries()]\n .map(([agentId, agentEvents]) => {\n const rows = agentEvents.map((event) => {\n const detail =\n event.text ??\n event.decision ??\n event.command ??\n event.artifactPath ??\n (event.outputName ? `${event.outputName}: ${event.outputStatus ?? \"\"}` : undefined) ??\n event.status ??\n \"\";\n return `- ${event.createdAt} \\`${event.type}\\`: ${escapeMarkdownText(detail)}`;\n });\n return `## ${escapeMarkdownText(agentId)}\\n\\n${rows.join(\"\\n\")}`;\n })\n .join(\"\\n\\n\");\n\n return `# Transcript: ${escapeMarkdownText(session.title)}\n\nGenerated from \\`${sessionDir(session.sessionId)}/events.jsonl\\`.\n\n${sections || \"No events recorded.\"}\n`;\n}\n","import { ProjectContextContract, type SessionEventContractValue, type StudioSessionContractValue } from \"../config/contracts.js\";\nimport { listCorrections } from \"./corrections.js\";\nimport { listSessions, readSessionEvents } from \"./session.js\";\nimport {\n ACTIVE_SESSION_FILE,\n CONTEXT_JSON,\n CONTEXT_MD,\n COUNCIL_SESSIONS_DIR,\n STUDIO_EXPORT_HTML,\n containsLikelySecret,\n ensureStudioDirs,\n nowIso,\n readJsonFile,\n readTextFile,\n redactSensitive,\n safeSlug,\n unique,\n writeTextFile\n} from \"./shared.js\";\n\nexport interface StaticStudioExportResult {\n studioPath: string;\n sessionCount: number;\n exportedAt: string;\n}\n\ninterface StaticStudioSession {\n session: StudioSessionContractValue;\n events: SessionEventContractValue[];\n indexPath: string;\n transcriptPath: string;\n agents: string[];\n}\n\ninterface StaticStudioData {\n generatedAt: string;\n context: unknown | null;\n contextMarkdown: string | null;\n corrections: ReturnType<typeof listCorrections>;\n activeSessionId: string | null;\n sessions: StaticStudioSession[];\n}\n\nexport function exportStaticStudio(cwd: string): StaticStudioExportResult {\n ensureStudioDirs(cwd);\n const exportedAt = nowIso();\n const context = readProjectContext(cwd);\n const contextMarkdown = readTextFile(cwd, CONTEXT_MD);\n const corrections = listCorrections(cwd);\n const sessions = listSessions(cwd).map((session) => {\n const events = readSessionEvents(cwd, session.sessionId);\n return {\n session,\n events,\n indexPath: `${COUNCIL_SESSIONS_DIR}/${safeSlug(session.sessionId)}/index.md`,\n transcriptPath: `${COUNCIL_SESSIONS_DIR}/${safeSlug(session.sessionId)}/transcript.md`,\n agents: unique(events.flatMap((event) => [event.agentId, event.fromAgentId, event.toAgentId].filter(Boolean) as string[]))\n };\n });\n const data: StaticStudioData = {\n generatedAt: exportedAt,\n context,\n contextMarkdown,\n corrections,\n activeSessionId: readTextFile(cwd, ACTIVE_SESSION_FILE)?.trim() ?? null,\n sessions\n };\n const redactedData = redactDeep(data) as StaticStudioData;\n const html = renderStaticStudioHtml(redactedData);\n if (containsLikelySecret(html)) {\n throw new Error(\"Refusing to write static Agent Studio export because the rendered HTML contains a secret-like value.\");\n }\n writeTextFile(cwd, STUDIO_EXPORT_HTML, html);\n return { studioPath: STUDIO_EXPORT_HTML, sessionCount: sessions.length, exportedAt };\n}\n\nfunction readProjectContext(cwd: string): unknown | null {\n const raw = readJsonFile<unknown>(cwd, CONTEXT_JSON);\n if (!raw) return null;\n return ProjectContextContract.parse(raw);\n}\n\nfunction redactDeep(value: unknown): unknown {\n if (typeof value === \"string\") return redactSensitive(value);\n if (Array.isArray(value)) return value.map(redactDeep);\n if (value && typeof value === \"object\") {\n return Object.fromEntries(Object.entries(value).map(([key, item]) => [key, redactDeep(item)]));\n }\n return value;\n}\n\nfunction renderStaticStudioHtml(data: StaticStudioData): string {\n const sessionCount = data.sessions.length;\n const correctionCount = data.corrections.project.length + data.corrections.agent.length;\n return `<!doctype html>\n<html lang=\"en\">\n<head>\n <meta charset=\"utf-8\">\n <meta name=\"viewport\" content=\"width=device-width, initial-scale=1\">\n <meta http-equiv=\"Content-Security-Policy\" content=\"default-src 'none'; style-src 'unsafe-inline'; img-src data:; base-uri 'none'; form-action 'none'\">\n <title>Agent Studio</title>\n <style>\n :root { color-scheme: light; --ink: #1f2933; --muted: #52606d; --line: #d9e2ec; --panel: #ffffff; --bg: #f5f7fa; --accent: #0f766e; --accent-2: #7c3aed; --warn: #b45309; }\n * { box-sizing: border-box; }\n body { margin: 0; font-family: Inter, ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, \"Segoe UI\", sans-serif; color: var(--ink); background: var(--bg); line-height: 1.5; }\n header { padding: 28px clamp(16px, 4vw, 48px) 20px; background: #0b1f24; color: #f8fafc; }\n header h1 { margin: 0 0 8px; font-size: clamp(28px, 4vw, 44px); letter-spacing: 0; }\n header p { margin: 0; color: #cbd5e1; max-width: 980px; }\n main { display: grid; grid-template-columns: minmax(0, 1fr); gap: 18px; padding: 20px clamp(16px, 4vw, 48px) 48px; }\n section, details { background: var(--panel); border: 1px solid var(--line); border-radius: 8px; }\n section { padding: 18px; }\n h2 { margin: 0 0 12px; font-size: 22px; letter-spacing: 0; }\n h3 { margin: 18px 0 10px; font-size: 17px; letter-spacing: 0; }\n .metrics { display: grid; grid-template-columns: repeat(auto-fit, minmax(150px, 1fr)); gap: 10px; margin-top: 18px; }\n .metric { border: 1px solid rgba(255,255,255,.22); border-radius: 8px; padding: 12px; background: rgba(255,255,255,.08); }\n .metric strong { display: block; font-size: 24px; }\n .metric span { color: #cbd5e1; font-size: 13px; }\n .grid { display: grid; grid-template-columns: minmax(0, 340px) minmax(0, 1fr); gap: 18px; align-items: start; }\n .stack { display: grid; gap: 12px; }\n .muted { color: var(--muted); }\n .path { font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, monospace; font-size: 13px; color: var(--muted); overflow-wrap: anywhere; }\n .pill { display: inline-flex; align-items: center; border-radius: 999px; padding: 2px 9px; border: 1px solid var(--line); background: #f8fafc; font-size: 12px; margin: 2px 4px 2px 0; }\n .session-card { padding: 0; overflow: hidden; }\n .session-head { padding: 16px 18px; border-bottom: 1px solid var(--line); display: flex; gap: 10px; flex-wrap: wrap; align-items: baseline; justify-content: space-between; }\n .session-head h2 { margin: 0; }\n .session-body { padding: 18px; display: grid; gap: 18px; }\n .graph-wrap { overflow-x: auto; border: 1px solid var(--line); border-radius: 8px; background: #fbfdff; padding: 8px; }\n svg.agent-graph { width: 100%; min-width: 520px; max-height: 240px; }\n .event-list { margin: 0; padding-left: 20px; }\n .event-list li { margin: 7px 0; }\n details.agent-stream { padding: 0; }\n details.agent-stream > summary { cursor: pointer; padding: 12px 14px; font-weight: 700; }\n details.agent-stream[open] > summary { border-bottom: 1px solid var(--line); }\n details.agent-stream .stream-body { padding: 12px 14px; }\n table { width: 100%; border-collapse: collapse; font-size: 14px; }\n th, td { text-align: left; border-bottom: 1px solid var(--line); padding: 8px; vertical-align: top; }\n th { color: var(--muted); font-size: 12px; text-transform: uppercase; letter-spacing: .04em; }\n code { font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, monospace; font-size: 13px; background: #edf2f7; padding: 1px 4px; border-radius: 4px; }\n @media (max-width: 860px) { .grid { grid-template-columns: 1fr; } header { padding-top: 22px; } }\n </style>\n</head>\n<body>\n <header>\n <h1>Agent Studio</h1>\n <p>Static local export generated from Agent Kit JSON and JSONL files. It embeds a redacted snapshot at export time and does not connect to a server, database, or model API.</p>\n <div class=\"metrics\">\n <div class=\"metric\"><strong>${sessionCount}</strong><span>sessions</span></div>\n <div class=\"metric\"><strong>${correctionCount}</strong><span>active correction files</span></div>\n <div class=\"metric\"><strong>${escapeHtml(data.generatedAt)}</strong><span>generated at</span></div>\n </div>\n </header>\n <main>\n <section>\n <h2>Project Context</h2>\n ${renderContextSummary(data)}\n </section>\n <div class=\"grid\">\n <aside class=\"stack\">\n <section>\n <h2>Corrections</h2>\n ${renderCorrections(data)}\n </section>\n <section>\n <h2>Session Index</h2>\n ${renderSessionIndexLinks(data.sessions)}\n </section>\n </aside>\n <div class=\"stack\">\n ${data.sessions.map(renderSessionSection).join(\"\\n\")}\n </div>\n </div>\n </main>\n <script type=\"application/json\" id=\"agent-studio-data\">${safeJsonForHtml(data)}</script>\n</body>\n</html>\n`;\n}\n\nfunction renderContextSummary(data: StaticStudioData): string {\n const context = data.context as\n | {\n projectName?: string;\n productSummary?: string;\n primaryAudience?: string;\n qualityTarget?: string;\n architecture?: { frameworks?: string[]; testTools?: string[]; hasSupabase?: boolean };\n openQuestions?: string[];\n }\n | null;\n if (!context) return `<p class=\"muted\">No project context found. Run <code>agent-kit onboard</code> or <code>agent-kit init --guided</code>.</p>`;\n return `<div class=\"stack\">\n <p><strong>${escapeHtml(context.projectName || \"TBD\")}</strong> ${escapeHtml(context.productSummary || \"No product summary recorded.\")}</p>\n <p class=\"muted\">Audience: ${escapeHtml(context.primaryAudience || \"TBD\")} | Quality target: ${escapeHtml(context.qualityTarget || \"baseline-setup\")}</p>\n <p>${renderPills([...(context.architecture?.frameworks ?? []), ...(context.architecture?.testTools ?? []), context.architecture?.hasSupabase ? \"supabase\" : \"\"].filter(Boolean))}</p>\n ${context.openQuestions?.length ? `<h3>Open Questions</h3>${renderList(context.openQuestions)}` : \"\"}\n <p class=\"path\">Source: ${CONTEXT_JSON}${data.contextMarkdown ? ` and ${CONTEXT_MD}` : \"\"}</p>\n </div>`;\n}\n\nfunction renderCorrections(data: StaticStudioData): string {\n const rules = [...data.corrections.project, ...data.corrections.agent].filter((rule) => rule.status === \"active\");\n if (rules.length === 0) return `<p class=\"muted\">No active durable corrections recorded.</p>`;\n return `<table>\n <thead><tr><th>Scope</th><th>Agent</th><th>Correction</th></tr></thead>\n <tbody>\n ${rules\n .map((rule) => `<tr><td>${escapeHtml(rule.scope)}</td><td>${escapeHtml(rule.agentId ?? rule.appliesToAgents?.join(\", \") ?? \"all\")}</td><td>${escapeHtml(rule.text)}</td></tr>`)\n .join(\"\\n\")}\n </tbody>\n </table>`;\n}\n\nfunction renderSessionIndexLinks(sessions: StaticStudioSession[]): string {\n if (sessions.length === 0) return `<p class=\"muted\">No sessions recorded yet.</p>`;\n return `<ol class=\"event-list\">${sessions.map((item) => `<li><a href=\"#${htmlId(item.session.sessionId)}\">${escapeHtml(item.session.title)}</a><br><span class=\"muted\">${escapeHtml(item.session.status)} | ${escapeHtml(item.session.workflowId)}</span></li>`).join(\"\")}</ol>`;\n}\n\nfunction renderSessionSection(item: StaticStudioSession): string {\n const verification = item.events.filter((event) => event.type === \"verification_recorded\");\n const corrections = item.events.filter((event) => event.type === \"human_correction\");\n const artifacts = item.events.filter((event) => event.type === \"artifact_recorded\");\n return `<section class=\"session-card\" id=\"${htmlId(item.session.sessionId)}\">\n <div class=\"session-head\">\n <h2>${escapeHtml(item.session.title)}</h2>\n <div>\n <span class=\"pill\">${escapeHtml(item.session.status)}</span>\n <span class=\"pill\">${escapeHtml(item.session.workflowId)}</span>\n <span class=\"pill\">${item.events.length} events</span>\n </div>\n </div>\n <div class=\"session-body\">\n <p class=\"muted\">Request: ${escapeHtml(item.session.request)}</p>\n <p class=\"path\">Markdown: ${escapeHtml(item.indexPath)} | ${escapeHtml(item.transcriptPath)}</p>\n <div class=\"graph-wrap\">${renderSvgGraph(item.events, item.agents)}</div>\n <div>\n <h3>Agent Streams</h3>\n ${renderAgentStreams(item)}\n </div>\n <div class=\"grid\">\n <div>\n <h3>Verification</h3>\n ${verification.length ? renderEventList(verification) : `<p class=\"muted\">No verification recorded.</p>`}\n </div>\n <div>\n <h3>Corrections And Artifacts</h3>\n ${corrections.length || artifacts.length ? renderEventList([...corrections, ...artifacts]) : `<p class=\"muted\">No corrections or artifacts recorded.</p>`}\n </div>\n </div>\n </div>\n </section>`;\n}\n\nfunction renderAgentStreams(item: StaticStudioSession): string {\n if (item.events.length === 0) return `<p class=\"muted\">No events recorded.</p>`;\n const byAgent = new Map<string, SessionEventContractValue[]>();\n for (const event of item.events) {\n const agent = event.agentId ?? event.fromAgentId ?? \"session\";\n byAgent.set(agent, [...(byAgent.get(agent) ?? []), event]);\n }\n return [...byAgent.entries()]\n .map(([agent, events]) => `<details class=\"agent-stream\"><summary>${escapeHtml(agent)} (${events.length})</summary><div class=\"stream-body\">${renderEventList(events)}</div></details>`)\n .join(\"\\n\");\n}\n\nfunction renderEventList(events: SessionEventContractValue[]): string {\n return `<ol class=\"event-list\">${events.map((event) => `<li><time>${escapeHtml(event.createdAt)}</time> <code>${escapeHtml(event.type)}</code>: ${escapeHtml(eventDetail(event))}</li>`).join(\"\\n\")}</ol>`;\n}\n\nfunction eventDetail(event: SessionEventContractValue): string {\n if (event.type === \"handoff\") return `${event.fromAgentId ?? \"unknown\"} -> ${event.toAgentId ?? \"unknown\"}: ${event.decision ?? \"\"} Risk: ${event.risk ?? \"\"}`;\n if (event.type === \"required_output_updated\") return `${event.outputName ?? \"output\"}: ${event.outputStatus ?? \"unknown\"}`;\n return event.text ?? event.decision ?? event.command ?? event.artifactPath ?? event.status ?? \"\";\n}\n\nfunction renderSvgGraph(events: SessionEventContractValue[], knownAgents: string[]): string {\n const handoffs = events.filter((event) => event.type === \"handoff\");\n const agents = unique([...knownAgents, ...handoffs.flatMap((event) => [event.fromAgentId, event.toAgentId].filter(Boolean) as string[])]);\n if (agents.length === 0) {\n return `<svg class=\"agent-graph\" viewBox=\"0 0 520 120\" role=\"img\" aria-label=\"No agent handoffs recorded\"><text x=\"24\" y=\"62\" fill=\"#52606d\">No handoffs recorded yet.</text></svg>`;\n }\n const width = Math.max(520, agents.length * 180);\n const y = 78;\n const positions = new Map(agents.map((agent, index) => [agent, { x: 74 + index * 170, y }]));\n const edges = handoffs\n .map((event) => {\n const from = positions.get(event.fromAgentId ?? \"\");\n const to = positions.get(event.toAgentId ?? \"\");\n if (!from || !to) return \"\";\n return `<line x1=\"${from.x + 34}\" y1=\"${from.y}\" x2=\"${to.x - 34}\" y2=\"${to.y}\" stroke=\"#7c3aed\" stroke-width=\"2\" marker-end=\"url(#arrow)\" />`;\n })\n .join(\"\\n\");\n const nodes = agents\n .map((agent) => {\n const position = positions.get(agent);\n if (!position) return \"\";\n return `<g><circle cx=\"${position.x}\" cy=\"${position.y}\" r=\"34\" fill=\"#ccfbf1\" stroke=\"#0f766e\" stroke-width=\"2\" /><text x=\"${position.x}\" y=\"${position.y + 56}\" text-anchor=\"middle\" fill=\"#1f2933\" font-size=\"12\">${escapeSvgText(agent)}</text></g>`;\n })\n .join(\"\\n\");\n return `<svg class=\"agent-graph\" viewBox=\"0 0 ${width} 150\" role=\"img\" aria-label=\"Agent handoff graph\">\n <defs><marker id=\"arrow\" markerWidth=\"10\" markerHeight=\"10\" refX=\"9\" refY=\"3\" orient=\"auto\" markerUnits=\"strokeWidth\"><path d=\"M0,0 L0,6 L9,3 z\" fill=\"#7c3aed\" /></marker></defs>\n ${edges}\n ${nodes}\n </svg>`;\n}\n\nfunction renderPills(values: string[]): string {\n const cleaned = values.filter(Boolean);\n return cleaned.length ? cleaned.map((value) => `<span class=\"pill\">${escapeHtml(value)}</span>`).join(\"\") : `<span class=\"muted\">No stack signals recorded.</span>`;\n}\n\nfunction renderList(values: string[]): string {\n return `<ul>${values.map((value) => `<li>${escapeHtml(value)}</li>`).join(\"\")}</ul>`;\n}\n\nfunction htmlId(value: string): string {\n return `session-${safeSlug(value)}`;\n}\n\nfunction escapeHtml(value: string | number | undefined | null): string {\n return String(value ?? \"\")\n .replace(/&/g, \"&\")\n .replace(/</g, \"<\")\n .replace(/>/g, \">\")\n .replace(/\"/g, \""\")\n .replace(/'/g, \"'\");\n}\n\nfunction escapeSvgText(value: string): string {\n return escapeHtml(value).slice(0, 42);\n}\n\nfunction safeJsonForHtml(value: unknown): string {\n return JSON.stringify(value)\n .replace(/&/g, \"\\\\u0026\")\n .replace(/</g, \"\\\\u003c\")\n .replace(/>/g, \"\\\\u003e\");\n}\n","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 {\n applySetupFormAnswers,\n ensureProjectContextForSetup,\n getSetupFormViewModel,\n parseSetupFormPayload\n} from \"./setup-form.js\";\nimport {\n getSetupProgress,\n loadOnboardingState,\n markQuickPathComplete,\n markSectionComplete,\n saveOnboardingState\n} from \"./onboarding-state.js\";\nimport { saveIdeChecklist, writeVisualQaTier, type IdeSurface } from \"./wizard/checklist.js\";\nimport { saveAgentBriefs } from \"./wizard/agent-briefs.js\";\nimport {\n buildWizardFormState,\n extractAgentBriefsFromForm,\n extractSetupFormFromWizardForm,\n loadWizardDraft,\n saveWizardDraft\n} 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\";\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): 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 return {\n projectName: viewModel.projectName,\n form: buildWizardFormState(cwd),\n hasExistingContext: Boolean(\n viewModel.form.productSummary.trim() ||\n viewModel.form.primaryAudience.trim() ||\n viewModel.form.valueProposition.trim()\n ),\n openQuestions: viewModel.openQuestions,\n hasSupabase: viewModel.hasSupabase,\n onboarding,\n progress,\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 (Object.keys(patch).length > 0) saveOnboardingState(cwd, patch);\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\") {\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 sendJson(response, 200, {\n ...buildStatePayload(cwd),\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 result = saveIdeChecklist(cwd, body.ideSurface);\n markSectionComplete(cwd, \"ide\");\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/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 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([\n ...base.evidence,\n { source: \"agent-kit setup wizard\", note: \"Project context updated through the local web setup wizard.\" }\n ])\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 (\n qualityTarget !== \"baseline-setup\" &&\n qualityTarget !== \"needs-improvement\" &&\n qualityTarget !== \"best-practice-candidate\"\n ) {\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\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/rules/cursor-agent-kit.mdc\",\n copilot: \".github/copilot-instructions.md\",\n claude: \".claude/agents/\",\n codex: \"AGENTS.md\",\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 (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(\n cwd: string,\n patch: { form?: Partial<SetupFormPayload>; agentBriefs?: Record<string, string> }\n): 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 = [\n \"content-app\",\n \"saas\",\n \"admin\",\n \"marketplace\",\n \"tool\",\n \"ecommerce\",\n \"portfolio\",\n \"education\",\n \"community\",\n \"ai-workflow\",\n \"other\"\n];\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 {\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 }\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=\"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 & save</button>'}\n </div>\n </header>\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 <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 & 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 & 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 = [\n \"content-app\",\n \"saas\",\n \"admin\",\n \"marketplace\",\n \"tool\",\n \"ecommerce\",\n \"portfolio\",\n \"education\",\n \"community\",\n \"ai-workflow\",\n \"other\"\n];\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 })\n .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>\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 { watch, type FSWatcher } from \"node:fs\";\nimport { createServer, type IncomingMessage, type Server, type ServerResponse } from \"node:http\";\nimport { join } from \"node:path\";\nimport {\n getActiveSessionId,\n listSessions,\n readSession,\n readSessionEvents\n} 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\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 === \"/\" || 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 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 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"],"mappings":"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","names":["existsSync","join","existsSync","dirname","join","resolve","join","existsSync","existsSync","readFileSync","join","existsSync","readFileSync","basename","dirname","join","join","existsSync","readFileSync","dirname","basename","existsSync","readFileSync","join","context","existsSync","join","existsSync","readFileSync","join","join","existsSync","readFileSync","context","context","existsSync","join","existsSync","readFileSync","join","existsSync","readFileSync","join","existsSync","readFileSync","join","join","existsSync","readFileSync","join","existsSync","readFileSync","adapter","join","existsSync","readFileSync","adapter","context","join","existsSync","readFileSync","join","existsSync","readFileSync","sessionDir","eventsPath","session","readPackageJson","summary","readFileSync","isRecord","join","existsSync","existsSync","readFileSync","join","existsSync","readFileSync","join","readFileSync","join","z","join","readFileSync","existsSync","mkdirSync","readFileSync","join","existsSync","readFileSync","join","join","existsSync","readFileSync","join","existsSync","readFileSync","mkdirSync","existsSync","readFileSync","readdirSync","join","join","existsSync","readdirSync","readFileSync","summary","existsSync","readFileSync","readdirSync","statSync","join","session","join","existsSync","readdirSync","statSync","readFileSync","correction","context","session","resolve","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","resolve","createServer","join","DEFAULT_PORT","DEFAULT_HOST","sendJson","sendHtml","eventsPath","join","handleRequest","session","listen","resolve","createServer","existsSync","readFileSync","join","readFileSync","correction","join","existsSync","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/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/studio-server.ts","../src/studio/session-checkpoint.ts"],"sourcesContent":["import { 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 { 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 { formatInitSummary, 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\";\n\nconst program = new Command();\nconst requiredOutputStatuses = [\"missing\", \"partial\", \"complete\", \"not-applicable\"] as const;\ntype RequiredOutputStatus = (typeof requiredOutputStatuses)[number];\n\nfunction isRequiredOutputStatus(value: string): value is RequiredOutputStatus {\n return requiredOutputStatuses.includes(value as RequiredOutputStatus);\n}\n\nprogram\n .name(\"agent-kit\")\n .description(\"Next.js + Supabase agent, skill, docs, design, and research kit.\")\n .version(PACKAGE_VERSION);\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(\n `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 );\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) openBrowser(`${handle.url}/`);\n await new Promise<void>((resolve) => {\n const shutdown = () => {\n 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\", \"Deprecated alias for default project context scan (always runs on init).\")\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: {\n stack: \"next-supabase\";\n force?: boolean;\n guided?: boolean;\n activate?: string[];\n json?: boolean;\n setup?: boolean;\n noSetup?: boolean;\n open?: boolean;\n }) => {\n const cwd = process.cwd();\n const result = initProject({\n cwd,\n stack: options.stack,\n force: Boolean(options.force),\n ...(options.activate ? { activate: options.activate } : {})\n });\n\n if (options.json) {\n console.log(JSON.stringify(result, null, 2));\n } else {\n console.log(formatInitSummary(result));\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 console.error(`Invalid --min-readiness value \"${options.minReadiness}\". Expected one of: ${READINESS_ORDER.join(\", \")}.`);\n process.exitCode = 1;\n return;\n }\n minimumReadiness = options.minReadiness;\n }\n\n if (options.json) {\n console.log(JSON.stringify(report, null, 2));\n } else {\n console.log(`READINESS ${report.readiness.level}: ${report.readiness.summary}`);\n console.log(`SUMMARY pass=${report.summary.pass} warn=${report.summary.warn} fail=${report.summary.fail}`);\n if (report.readiness.nextActions.length > 0) {\n console.log(\"NEXT ACTIONS\");\n for (const action of report.readiness.nextActions) console.log(`- ${action}`);\n }\n console.log(\"\");\n for (const finding of report.findings) {\n const prefix = finding.level.toUpperCase().padEnd(4);\n console.log(`${prefix} ${finding.area}: ${finding.message}`);\n if (finding.remediation) console.log(` remediation: ${finding.remediation}`);\n }\n }\n\n if (report.summary.fail > 0) {\n process.exitCode = 1;\n }\n if (minimumReadiness && !meetsMinimumReadiness(report.readiness.level, minimumReadiness)) {\n console.error(`Audit readiness ${report.readiness.level} is below required minimum ${minimumReadiness}.`);\n process.exitCode = 1;\n }\n });\n\nprogram\n .command(\"diff\")\n .description(\"Compare project docs against bundled templates.\")\n .action(() => {\n console.log(JSON.stringify(diffProject(process.cwd()), null, 2));\n });\n\nprogram\n .command(\"update\")\n .description(\"Update installed templates, preserving local conflicts by default.\")\n .option(\"--force\", \"Overwrite local docs.\")\n .action((options: { force?: boolean }) => {\n const result = initProject({ cwd: process.cwd(), force: Boolean(options.force) });\n console.log(JSON.stringify(result, null, 2));\n });\n\nconst addCommand = program.command(\"add\").description(\"Add one agent-kit asset.\");\naddCommand\n .command(\"skill <name>\")\n .description(\"Add a single skill into .agent-kit/skills.\")\n .option(\"--force\", \"Overwrite existing skill.\")\n .action((name: string, options: { force?: boolean }) => {\n console.log(addSkill(process.cwd(), name, { force: Boolean(options.force) }));\n });\n\nprogram\n .command(\"doctor\")\n .description(\"Validate local CLI runtime prerequisites.\")\n .action(() => {\n const cwd = process.cwd();\n console.log(\"agent-kit doctor\");\n console.log(`node: ${process.version}`);\n console.log(`available skills: ${listSkills().length}`);\n if (onboardingStateExists(cwd)) {\n const progress = getSetupProgress(cwd);\n console.log(`setup progress: ${progress.percent}% (depth: ${progress.depth})`);\n if (!progress.quickComplete) {\n console.log(\"tip: run agent-kit setup --open to finish project context onboarding.\");\n }\n } else {\n console.log(\"tip: run agent-kit init then agent-kit setup to onboard this project.\");\n }\n console.log(\"status: ok\");\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 .action(() => {\n console.log(JSON.stringify(initProjectContext(process.cwd()), null, 2));\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 .action(() => {\n console.log(JSON.stringify(initProjectContext(process.cwd()), null, 2));\n });\n\ncontext\n .command(\"scan\")\n .description(\"Print inferred project context without writing it.\")\n .action(() => {\n console.log(JSON.stringify(scanProjectContext(process.cwd()), null, 2));\n });\n\ncontext\n .command(\"ask\")\n .description(\"Print unanswered high-value project context questions.\")\n .action(() => {\n const result = initProjectContext(process.cwd());\n if (result.openQuestions.length === 0) {\n console.log(\"No open project-context questions.\");\n return;\n }\n console.log(\"Answer these in the web setup wizard with: agent-kit setup --open\");\n console.log(\"Check progress with: agent-kit setup --status\");\n for (const question of result.openQuestions) console.log(`- ${question}`);\n });\n\ncontext\n .command(\"render\")\n .description(\"Render .agent-kit/project-context.md from project-context.json.\")\n .action(() => {\n console.log(JSON.stringify(renderProjectContext(process.cwd()), null, 2));\n });\n\ncontext\n .command(\"validate\")\n .description(\"Validate .agent-kit/project-context.json.\")\n .action(() => {\n console.log(JSON.stringify(validateProjectContext(process.cwd()), null, 2));\n });\n\ncontext\n .command(\"show\")\n .description(\"Print rendered project context markdown.\")\n .action(() => {\n console.log(readTextFile(process.cwd(), \".agent-kit/project-context.md\") ?? \"\");\n });\n\nconst session = program.command(\"session\").description(\"Record and render local Agent Studio council sessions.\");\n\nsession\n .command(\"start <title...>\")\n .description(\"Start a local council session.\")\n .option(\"--workflow <workflow>\", \"Workflow id.\", \"planning\")\n .option(\"--request <request>\", \"Original user request.\")\n .action((titleParts: string[], options: { workflow: string; request?: string }) => {\n const title = titleParts.join(\" \");\n console.log(\n JSON.stringify(\n startSession(process.cwd(), {\n title,\n workflowId: options.workflow,\n ...(options.request ? { request: options.request } : {})\n }),\n null,\n 2\n )\n );\n });\n\nsession\n .command(\"list\")\n .description(\"List local council sessions.\")\n .action(() => {\n console.log(JSON.stringify(listSessions(process.cwd()), null, 2));\n });\n\nsession\n .command(\"active\")\n .description(\"Print the active council session id.\")\n .action(() => {\n console.log(getActiveSessionId(process.cwd()));\n });\n\nsession\n .command(\"note <text...>\")\n .description(\"Record a visible agent message.\")\n .requiredOption(\"--agent <agent>\", \"Agent id.\")\n .action((textParts: string[], options: { agent: string }) => {\n console.log(JSON.stringify(recordNote(process.cwd(), options.agent, textParts.join(\" \")), null, 2));\n });\n\nsession\n .command(\"decision <text...>\")\n .description(\"Record an agent decision.\")\n .requiredOption(\"--agent <agent>\", \"Agent id.\")\n .option(\"--risk <risk>\", \"Risk associated with the decision.\")\n .action((textParts: string[], options: { agent: string; risk?: string }) => {\n console.log(JSON.stringify(recordDecision(process.cwd(), options.agent, textParts.join(\" \"), options.risk), null, 2));\n });\n\nsession\n .command(\"handoff\")\n .description(\"Record an agent handoff.\")\n .requiredOption(\"--from <agent>\", \"Source agent id.\")\n .requiredOption(\"--to <agent>\", \"Target agent id.\")\n .requiredOption(\"--decision <decision>\", \"Decision being handed off.\")\n .requiredOption(\"--risk <risk>\", \"Risk that remains.\")\n .option(\"--evidence <evidence...>\", \"Evidence paths or notes.\")\n .action((options: { from: string; to: string; decision: string; risk: string; evidence?: string[] }) => {\n console.log(\n JSON.stringify(\n recordHandoff(process.cwd(), {\n fromAgentId: options.from,\n toAgentId: options.to,\n decision: options.decision,\n risk: options.risk,\n ...(options.evidence ? { evidence: options.evidence } : {})\n }),\n null,\n 2\n )\n );\n });\n\nsession\n .command(\"correct <text...>\")\n .description(\"Record a human correction and optionally promote it to durable rules.\")\n .option(\"--agent <agent>\", \"Agent id.\")\n .option(\"--scope <scope>\", \"Correction scope: session, project, agent, upstream-proposal.\", \"session\")\n .action((textParts: string[], options: { agent?: string; scope: \"session\" | \"project\" | \"agent\" | \"upstream-proposal\" }) => {\n console.log(\n JSON.stringify(\n recordCorrection(process.cwd(), {\n ...(options.agent ? { agentId: options.agent } : {}),\n scope: options.scope,\n text: textParts.join(\" \")\n }),\n null,\n 2\n )\n );\n });\n\nsession\n .command(\"artifact\")\n .description(\"Record a changed or relevant artifact path.\")\n .requiredOption(\"--file <file>\", \"Artifact file path.\")\n .option(\"--note <note>\", \"Artifact note.\")\n .action((options: { file: string; note?: string }) => {\n console.log(JSON.stringify(recordArtifact(process.cwd(), options.file, options.note), null, 2));\n });\n\nsession\n .command(\"verify\")\n .description(\"Record verification evidence.\")\n .requiredOption(\"--command <command>\", \"Command or review performed.\")\n .requiredOption(\"--result <result>\", \"pass, fail, or skipped.\")\n .option(\"--notes <notes>\", \"Verification notes.\")\n .action((options: { command: string; result: \"pass\" | \"fail\" | \"skipped\"; notes?: string }) => {\n console.log(JSON.stringify(recordVerification(process.cwd(), options.command, options.result, options.notes), null, 2));\n });\n\nsession\n .command(\"output <name...>\")\n .description(\"Mark a required session output status.\")\n .requiredOption(\"--status <status>\", \"missing, partial, complete, or not-applicable.\")\n .option(\"--evidence <evidence>\", \"Evidence path, command, or note.\")\n .action((nameParts: string[], options: { status: string; evidence?: string }) => {\n if (!isRequiredOutputStatus(options.status)) {\n console.error(`Invalid --status value \"${options.status}\". Expected one of: ${requiredOutputStatuses.join(\", \")}.`);\n process.exitCode = 1;\n return;\n }\n console.log(JSON.stringify(recordRequiredOutput(process.cwd(), nameParts.join(\" \"), options.status, options.evidence), null, 2));\n });\n\nsession\n .command(\"render\")\n .description(\"Render active session Markdown files.\")\n .action(() => {\n console.log(JSON.stringify(renderActiveSession(process.cwd()), null, 2));\n });\n\nsession\n .command(\"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 .action((options: { status: \"planned\" | \"in-progress\" | \"blocked\" | \"complete\" }) => {\n console.log(JSON.stringify(closeSession(process.cwd(), options.status), null, 2));\n });\n\nconst correction = program.command(\"correction\").description(\"Manage durable Agent Studio correction rules.\");\n\ncorrection\n .command(\"list\")\n .description(\"List correction rules.\")\n .action(() => {\n console.log(JSON.stringify(listCorrections(process.cwd()), null, 2));\n });\n\ncorrection\n .command(\"add <text...>\")\n .description(\"Add a durable correction rule.\")\n .option(\"--scope <scope>\", \"Correction scope: project, agent, or upstream-proposal.\", \"project\")\n .option(\"--agent <agent>\", \"Agent id for agent-scoped corrections.\")\n .action((textParts: string[], options: { scope: \"project\" | \"agent\" | \"upstream-proposal\"; agent?: string }) => {\n console.log(\n JSON.stringify(\n addCorrection(process.cwd(), {\n scope: options.scope,\n ...(options.agent ? { agentId: options.agent } : {}),\n text: textParts.join(\" \")\n }),\n null,\n 2\n )\n );\n });\n\ncorrection\n .command(\"apply [id]\")\n .description(\"Mark a correction rule active and reviewed.\")\n .option(\"--id <id>\", \"Correction id.\")\n .action((idArgument: string | undefined, options: { id?: string }) => {\n const id = idArgument ?? options.id;\n if (!id) {\n console.error(\"Missing correction id. Use agent-kit correction apply <id> or --id <id>.\");\n process.exitCode = 1;\n return;\n }\n console.log(JSON.stringify(applyCorrection(process.cwd(), id), null, 2));\n });\n\ncorrection\n .command(\"retire <id>\")\n .description(\"Retire a correction rule.\")\n .requiredOption(\"--reason <reason>\", \"Reason for retirement.\")\n .action((id: string, options: { reason: string }) => {\n console.log(JSON.stringify(retireCorrection(process.cwd(), id, options.reason), null, 2));\n });\n\ncorrection\n .command(\"propose-upstream <id>\")\n .description(\"Create an upstream proposal from a project or agent correction.\")\n .action((id: string) => {\n console.log(JSON.stringify(proposeCorrectionUpstream(process.cwd(), id), null, 2));\n });\n\nconst studio = program.command(\"studio\").description(\"Export 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(\n `Port ${handle.requestedPort} is in use — using fallback port ${handle.port}. Kill the old process to avoid confusion.`\n );\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) openBrowser(`${handle.url}/`);\n await new Promise<void>((resolve) => {\n const shutdown = () => {\n 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 .action(() => {\n console.log(JSON.stringify(exportStaticStudio(process.cwd()), null, 2));\n });\n\nconst research = program.command(\"research\").description(\"Research high-quality open-source repositories.\");\n\nresearch\n .command(\"discover\")\n .description(\"Discover GitHub repo candidates using configured queries.\")\n .option(\"--limit <number>\", \"Maximum repositories to write.\", (value) => Number.parseInt(value, 10))\n .action(async (options: { limit?: number }) => {\n const repos = await discoverRepos({\n cwd: process.cwd(),\n ...(options.limit === undefined ? {} : { limit: options.limit })\n });\n console.log(`Wrote ${repos.length} candidates to research/repo-candidates.json`);\n });\n\nresearch\n .command(\"scan\")\n .description(\"Shallow clone candidate repos and write repo findings.\")\n .option(\"--keep-clones\", \"Keep cloned repositories in research/workdir.\")\n .action(async (options: { keepClones?: boolean }) => {\n const findings = await scanRepos({ cwd: process.cwd(), keepClones: Boolean(options.keepClones) });\n console.log(`Wrote ${findings.length} findings to research/findings`);\n });\n\nresearch\n .command(\"summarize\")\n .description(\"Generate category summaries from repo findings.\")\n .action(() => {\n const outputs = summarizeFindings(process.cwd());\n for (const output of outputs) console.log(output);\n });\n\nresearch\n .command(\"propose-updates\")\n .description(\"Create a research-to-template update brief.\")\n .action(() => {\n console.log(proposeUpdates(process.cwd()));\n });\n\nprogram.parseAsync(process.argv).catch((error: unknown) => {\n console.error(error instanceof Error ? error.message : String(error));\n process.exitCode = 1;\n});\n","import { existsSync } from \"node:fs\";\nimport { join } from \"node:path\";\nimport { copyTextWithConflict, listFilesRecursive } from \"../utils/fs.js\";\nimport { findPackageRoot } from \"../utils/package-root.js\";\n\nexport function listSkills(): string[] {\n const packageRoot = findPackageRoot();\n return listFilesRecursive(join(packageRoot, \"skills\")).filter((file) => file.endsWith(\".md\"));\n}\n\nexport function addSkill(cwd: string, skillName: string, options: { force?: boolean } = {}): string {\n const packageRoot = findPackageRoot();\n const normalized = skillName.endsWith(\".md\") ? skillName : `${skillName}.md`;\n\n if (!/^[a-z0-9-]+\\.md$/.test(normalized)) {\n throw new Error(\"Skill names may contain only lowercase letters, numbers, and hyphens.\");\n }\n\n const sourcePath = join(packageRoot, \"skills\", normalized);\n\n if (!existsSync(sourcePath)) {\n const available = listSkills().join(\", \");\n throw new Error(`Unknown skill \"${skillName}\". Available skills: ${available}`);\n }\n\n const result = copyTextWithConflict(sourcePath, cwd, join(\".agent-kit\", \"skills\", normalized), {\n force: Boolean(options.force),\n conflictRoot: join(cwd, \".agent-kit\", \"conflicts\")\n });\n\n return `${result.action}: ${result.target}`;\n}\n","import { createHash } from \"node:crypto\";\nimport {\n cpSync,\n existsSync,\n lstatSync,\n mkdirSync,\n readFileSync,\n readdirSync,\n writeFileSync\n} from \"node:fs\";\nimport { basename, dirname, isAbsolute, join, relative, resolve } from \"node:path\";\n\nexport function ensureDir(path: string): void {\n mkdirSync(path, { recursive: true });\n}\n\nexport function readTextIfExists(path: string): string | null {\n if (!existsSync(path)) return null;\n return readFileSync(path, \"utf8\");\n}\n\nexport function writeText(path: string, content: string): void {\n ensureDir(dirname(path));\n writeFileSync(path, content);\n}\n\nexport function sha256(content: string): string {\n return createHash(\"sha256\").update(content).digest(\"hex\");\n}\n\nexport function resolveInside(root: string, requestedPath: string): string {\n const resolvedRoot = resolve(root);\n const resolvedPath = resolve(resolvedRoot, requestedPath);\n const rel = relative(resolvedRoot, resolvedPath);\n\n if (rel === \"..\" || rel.startsWith(\"..\") || isAbsolute(rel)) {\n throw new Error(`Unsafe path outside root: ${requestedPath}`);\n }\n\n return resolvedPath;\n}\n\nexport function listFilesRecursive(root: string): string[] {\n if (!existsSync(root)) return [];\n\n const out: string[] = [];\n const visit = (dir: string) => {\n for (const entry of readdirSync(dir)) {\n const fullPath = join(dir, entry);\n let stats;\n try {\n stats = lstatSync(fullPath);\n } catch {\n continue;\n }\n\n if (stats.isSymbolicLink()) continue;\n\n if (stats.isDirectory()) {\n if (entry === \"node_modules\" || entry === \".git\") continue;\n visit(fullPath);\n } else {\n out.push(relative(root, fullPath));\n }\n }\n };\n\n visit(root);\n return out.sort();\n}\n\nexport interface CopyResult {\n action: \"created\" | \"unchanged\" | \"conflict\" | \"overwritten\";\n target: string;\n conflictPath?: string;\n}\n\nexport function copyTextWithConflict(\n sourcePath: string,\n targetRoot: string,\n targetRelativePath: string,\n options: { force?: boolean; conflictRoot?: string } = {}\n): CopyResult {\n const targetPath = resolveInside(targetRoot, targetRelativePath);\n const sourceContent = readFileSync(sourcePath, \"utf8\");\n const existingContent = readTextIfExists(targetPath);\n\n if (existingContent === null) {\n writeText(targetPath, sourceContent);\n return { action: \"created\", target: targetRelativePath };\n }\n\n if (sha256(existingContent) === sha256(sourceContent)) {\n return { action: \"unchanged\", target: targetRelativePath };\n }\n\n if (options.force) {\n writeText(targetPath, sourceContent);\n return { action: \"overwritten\", target: targetRelativePath };\n }\n\n const conflictRoot = options.conflictRoot ?? join(targetRoot, \".agent-kit\", \"conflicts\");\n const safeName = `${Date.now()}-${targetRelativePath.replace(/[^a-zA-Z0-9_.-]/g, \"_\")}`;\n const conflictPath = join(conflictRoot, safeName);\n writeText(conflictPath, sourceContent);\n\n return {\n action: \"conflict\",\n target: targetRelativePath,\n conflictPath: relative(targetRoot, conflictPath)\n };\n}\n\nexport function copyDirectory(sourceRoot: string, targetRoot: string): void {\n ensureDir(dirname(targetRoot));\n cpSync(sourceRoot, targetRoot, {\n recursive: true,\n force: true,\n filter: (source) => !basename(source).startsWith(\".DS_Store\")\n });\n}\n","import { existsSync } from \"node:fs\";\nimport { dirname, join, resolve } from \"node:path\";\nimport { fileURLToPath } from \"node:url\";\n\nexport function findPackageRoot(start = dirname(fileURLToPath(import.meta.url))): string {\n let current = resolve(start);\n\n for (let i = 0; i < 8; i += 1) {\n if (existsSync(join(current, \"package.json\"))) {\n return current;\n }\n\n const parent = dirname(current);\n if (parent === current) break;\n current = parent;\n }\n\n throw new Error(\"Unable to locate package root from runtime path.\");\n}\n","import { existsSync, readFileSync } from \"node:fs\";\nimport { dirname, 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 = [\"setup\", \"audit\", \"plan\", \"handoff\", \"frontend\", \"security\", \"copy\", \"ship\", \"upgrade\"] 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 | null {\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: setup, audit, plan, handoff, frontend, security, copy, ship, and upgrade.\"\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\n .map((file) => file.replace(/\\.toml$/, \"\"))\n .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 findings.push({\n level: \"fail\",\n area: \"manifest\",\n message: `plugin.json has an unsafe or missing relative path for ${String(entry.name ?? \"unknown\")}.`,\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 =\n existsSync(join(cwd, \"package.json\")) &&\n existsSync(join(cwd, \"src\")) &&\n 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.4\";\n\nexport const DEFAULT_CONFIG: AgentKitConfig = {\n stack: \"next-supabase\",\n projectType: \"saas\",\n docsMode: \"advisory\",\n agentCouncil: {\n required: true,\n rosterPath: \".agent-kit/agent-roster.json\",\n defaultWorkflow: \"planning\",\n coreChangeWorkflow: \"core-change\"\n },\n modelRouting: {\n required: true,\n routingPath: \".agent-kit/model-routing.json\",\n reviewCadence: \"quarterly-or-when-model-docs-change\"\n },\n designProviders: [\"stitch\", \"claude\", \"figma\", \"human\"],\n research: {\n maxRepos: 100,\n githubTokenEnv: \"GITHUB_TOKEN\",\n workdir: \"research/workdir\"\n }\n};\n\nexport const ROOT_DOCS = [\n \"AGENTS.md\",\n \"AGENT_ROSTER.md\",\n \"ASSISTANT_ADAPTERS.md\",\n \"COUNCIL.md\",\n \"SKILLS.md\",\n \"SPEC.md\",\n \"DECISIONS.md\",\n \"DOCS.md\",\n \"DESIGN.md\",\n \"MESSAGING.md\",\n \"MODEL_ROUTING.md\",\n \"QUALITY_GATES.md\",\n \"STYLE_GUIDE.md\",\n \"SECURITY.md\",\n \"TESTING.md\",\n \"DEPLOYMENT.md\",\n \"UPGRADE.md\"\n] as const;\n\nexport const LIBRARY_FOLDERS = [\n \"agents\",\n \"skills\",\n \"prompts\",\n \"checklists\",\n \"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, writeFileSync } from \"node:fs\";\nimport { basename, dirname, join } from \"node:path\";\nimport { ensureDir, readTextIfExists, resolveInside, writeText } from \"../utils/fs.js\";\n\nexport const AGENT_KIT_DIR = \".agent-kit\";\nexport const CONTEXT_JSON = \".agent-kit/project-context.json\";\nexport const CONTEXT_MD = \".agent-kit/project-context.md\";\nexport const CORRECTIONS_DIR = \".agent-kit/corrections\";\nexport const PROJECT_RULES_JSON = \".agent-kit/corrections/project-rules.json\";\nexport const AGENT_RULES_JSON = \".agent-kit/corrections/agent-rules.json\";\nexport const UPSTREAM_PROPOSALS_JSON = \".agent-kit/corrections/upstream-proposals.json\";\nexport const COUNCIL_SESSIONS_DIR = \".agent-kit/council-sessions\";\nexport const ACTIVE_SESSION_FILE = \".agent-kit/council-sessions/active\";\nexport const STUDIO_EXPORT_HTML = \".agent-kit/studio/index.html\";\n\nconst SECRET_PATTERNS = [\n /gh[pousr]_[A-Za-z0-9_]{12,}/g,\n /github_pat_[A-Za-z0-9_]{20,}/g,\n /sk_(?:live|test)_[A-Za-z0-9_]{8,}/g,\n /sbp_[A-Za-z0-9_]{12,}/g,\n /(?:SUPABASE_SERVICE_ROLE_KEY|DATABASE_URL|OPENAI_API_KEY|ANTHROPIC_API_KEY|GITHUB_TOKEN)=(?!\\\\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, \"<\")\n .replace(/>/g, \">\")\n .replace(/[`![\\]()|]/g, \"\\\\$&\")\n .replace(/\\r?\\n/g, \"<br>\");\n}\n\nexport function escapeMarkdownTableCell(value: string | undefined): string {\n return escapeMarkdownText(value)\n .replace(/\\|/g, \"\\\\|\")\n}\n\nexport function listMarkdown(items: string[]): string {\n if (items.length === 0) return \"- None recorded.\\n\";\n return items.map((item) => `- ${escapeMarkdownText(item)}`).join(\"\\n\") + \"\\n\";\n}\n\nexport function unique(values: string[]): string[] {\n return [...new Set(values.filter(Boolean))].sort();\n}\n","import { existsSync, readFileSync, 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 \"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] 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\"\n ? { reason: override }\n : override && typeof override === \"object\"\n ? override\n : { reason: String(override) }\n ])\n );\n } catch {\n return {};\n }\n}\n\nfunction readTemplate(stack: StackProfile, file: string): string | null {\n const path = join(findPackageRoot(), \"templates\", stack, file);\n return existsSync(path) ? readFileSync(path, \"utf8\") : null;\n}\n\nfunction asStringArray(value: unknown): string[] {\n if (!Array.isArray(value)) return [];\n return value.filter((item): item is string => typeof item === \"string\");\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === \"object\" && value !== null;\n}\n\nfunction addAgentRosterFindings(cwd: string, findings: AuditFinding[], 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: \"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: \"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 indexRelative = `${COUNCIL_SESSION_DIR}/${normalizedSessionDir}/index.md`;\n const transcriptRelative = `${COUNCIL_SESSION_DIR}/${normalizedSessionDir}/transcript.md`;\n const sessionDirPath = join(sessionsRoot, sessionDir);\n\n let sessionResult: ReturnType<typeof StudioSessionContract.safeParse> | null = null;\n try {\n sessionResult = StudioSessionContract.safeParse(JSON.parse(readFileSync(join(sessionDirPath, \"session.json\"), \"utf8\")) as unknown);\n if (!sessionResult.success) {\n findings.push({\n level: \"fail\",\n area: \"studio\",\n message: `${sessionRelative} does not match the studio-session contract.`,\n remediation: `Fix session metadata. First issue: ${formatContractIssues(sessionResult.error)[0]}`\n });\n continue;\n }\n } catch {\n findings.push({\n level: \"fail\",\n area: \"studio\",\n message: `${sessionRelative} is not valid JSON.`,\n remediation: \"Fix session metadata JSON before relying on rendered session evidence.\"\n });\n continue;\n }\n\n const eventsPath = join(sessionDirPath, \"events.jsonl\");\n if (!existsSync(eventsPath)) {\n findings.push({\n level: \"fail\",\n area: \"studio\",\n message: `${eventsRelative} is missing.`,\n remediation: \"Record session events or remove the incomplete studio session folder.\"\n });\n continue;\n }\n\n const eventText = readFileSync(eventsPath, \"utf8\");\n if (containsLikelySecret(eventText)) {\n findings.push({\n level: \"fail\",\n area: \"studio\",\n message: `${eventsRelative} appears to contain a secret-like value.`,\n remediation: \"Redact tokens, database URLs, env values, and private customer data from session logs.\"\n });\n }\n\n const eventLines = eventText.split(/\\r?\\n/).filter((line) => line.trim().length > 0);\n let validEvents = 0;\n let verificationCount = 0;\n for (const [index, line] of eventLines.entries()) {\n try {\n const result = SessionEventContract.safeParse(JSON.parse(line) as unknown);\n if (!result.success) {\n findings.push({\n level: \"fail\",\n area: \"studio\",\n message: `${eventsRelative} line ${index + 1} does not match the session-event contract.`,\n remediation: `Fix the event row. First issue: ${formatContractIssues(result.error)[0]}`\n });\n } else {\n validEvents += 1;\n if (result.data.type === \"verification_recorded\") verificationCount += 1;\n }\n } catch {\n findings.push({\n level: \"fail\",\n area: \"studio\",\n message: `${eventsRelative} line ${index + 1} is not valid JSON.`,\n remediation: \"Fix malformed JSONL before rendering or auditing session history.\"\n });\n }\n }\n\n if (!existsSync(join(sessionDirPath, \"index.md\")) || !existsSync(join(sessionDirPath, \"transcript.md\"))) {\n findings.push({\n level: \"warn\",\n area: \"studio\",\n message: `${sessionDir} has unrendered session Markdown.`,\n remediation: \"Run agent-kit session render so humans can inspect the current agent transcript and handoffs.\"\n });\n } else {\n const indexText = readFileSync(join(sessionDirPath, \"index.md\"), \"utf8\");\n const transcriptText = readFileSync(join(sessionDirPath, \"transcript.md\"), \"utf8\");\n if (containsLikelySecret(indexText) || containsLikelySecret(transcriptText)) {\n findings.push({\n level: \"fail\",\n area: \"studio\",\n message: `${sessionDir} rendered Markdown appears to contain a secret-like value.`,\n remediation: \"Regenerate Markdown after redacting sensitive values from the event log.\"\n });\n }\n if (statSync(eventsPath).mtimeMs > statSync(join(sessionDirPath, \"index.md\")).mtimeMs) {\n findings.push({\n level: \"warn\",\n area: \"studio\",\n message: `${sessionDir} has events newer than rendered Markdown.`,\n remediation: \"Run agent-kit session render after recording new events.\"\n });\n }\n }\n\n const session = sessionResult.data;\n if (session.status === \"complete\") {\n const missingOutputs = session.requiredOutputs.filter((output) => output.status === \"missing\" || output.status === \"partial\");\n if (missingOutputs.length > 0 || verificationCount === 0) {\n findings.push({\n level: \"fail\",\n area: \"studio\",\n message: `${sessionRelative} is complete but lacks required outputs or verification evidence.`,\n remediation: \"Do not mark sessions complete until required outputs are complete or not-applicable and verification evidence is recorded.\"\n });\n }\n }\n\n if (validEvents > 0) {\n findings.push({\n level: \"pass\",\n area: \"studio\",\n message: `${sessionDir} has ${validEvents} valid Agent Studio events.`\n });\n }\n }\n}\n\nfunction addCouncilDocFindings(cwd: string, findings: AuditFinding[]): void {\n const councilDoc = readDoc(cwd, \"COUNCIL.md\");\n if (!councilDoc) return;\n\n if (!includesAll(councilDoc, [\"council session\", \"handoff\", \"decision\", \"risk\", \"evidence\"])) {\n findings.push({\n level: \"warn\",\n area: \"agents\",\n message: \"COUNCIL.md does not define a complete council-session handoff record.\",\n remediation: \"Require workflow, decision, risk, next handoff, evidence, required outputs, and verification status in council sessions.\"\n });\n } else {\n findings.push({\n level: \"pass\",\n area: \"agents\",\n message: \"COUNCIL.md defines council-session handoff evidence.\"\n });\n }\n}\n\nfunction addAssistantAdapterFindings(\n cwd: string,\n findings: AuditFinding[],\n adapterRootRelativePath = \".agent-kit/assistant-adapters\",\n docsCwd = cwd\n): 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 (\n assistantAdapterRowIsActive(adaptersDoc, \"Codex / AGENTS.md-compatible tools\") &&\n !existsSync(join(cwd, \".codex/agents/planner.toml\"))\n ) {\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: \"Use the DESIGN.md template to capture product category, audience, content inventory, brand traits, creative directions, and token decisions.\"\n });\n }\n\n if (!includesAll(designDoc, [\"reference set\", \"anti-reference\", \"distinctiveness\", \"critique\"])) {\n findings.push({\n level: \"warn\",\n area: \"frontend\",\n message: \"DESIGN.md is missing reference-set, anti-reference, distinctiveness, or critique-gate guidance.\",\n remediation:\n \"Add category references, anti-references, source-safety notes, distinctiveness criteria, and a design critique verdict before accepting frontend work as best-practice ready.\"\n });\n }\n\n if (!includesAll(designDoc, [\"distinctiveness benchmark\", \"first-screen proof\", \"content fingerprint\", \"asset provenance\", \"state proof\", \"visual QA proof\"])) {\n findings.push({\n level: \"warn\",\n area: \"frontend\",\n message: \"DESIGN.md is missing frontend distinctiveness benchmark evidence.\",\n remediation:\n \"Add first-screen proof, content fingerprint, reference benchmark, creative divergence, asset provenance, state proof, visual QA proof, generic-risk, and source-safety fields before accepting significant frontend work.\"\n });\n }\n\n if (!includesAll(designDoc, [\"product quality scorecard\", \"user/task fit\", \"content specificity\", \"source safety\", \"total score\"])) {\n findings.push({\n level: \"warn\",\n area: \"frontend\",\n message: \"DESIGN.md is missing a frontend product-quality scorecard.\",\n remediation:\n \"Add scorecard fields for user/task fit, content specificity, visual identity, information architecture, component states, accessibility and interaction, source safety, total score, and acceptance verdict.\"\n });\n }\n\n if (!includesAll(styleGuide, [\"DESIGN.md\", \"content-first\", \"creative direction\"])) {\n findings.push({\n level: \"warn\",\n area: \"frontend\",\n message: \"STYLE_GUIDE.md does not require content-first creative direction before frontend implementation.\",\n remediation: \"Reference DESIGN.md, brand/content intake, and creative-direction selection before visual implementation starts.\"\n });\n }\n\n const landingText = readLikelyLandingFiles(cwd);\n if (landingText && includesAny(landingText, [\"bg-gradient\", \"from-purple\", \"to-blue\", \"ai-powered\", \"supercharge\", \"revolutionize\", \"10x\"])) {\n findings.push({\n level: \"warn\",\n area: \"frontend\",\n message: \"Likely landing or hero files contain generic AI-site visual or copy patterns.\",\n remediation: \"Review the first screen for domain-specific hierarchy, restrained tokens, real workflows, and useful states.\"\n });\n }\n}\n\nfunction addQualityGateFindings(cwd: string, findings: AuditFinding[]): void {\n const qualityGates = readDoc(cwd, \"QUALITY_GATES.md\");\n if (!qualityGates) return;\n\n if (!includesAll(qualityGates, [\"baseline\", \"strong\", \"best-practice\", \"evidence\"])) {\n findings.push({\n level: \"warn\",\n area: \"quality\",\n message: \"QUALITY_GATES.md does not define baseline, strong, best-practice, and evidence expectations.\",\n remediation: \"Restore the maturity model so project quality is evaluated by evidence, not only by file presence.\"\n });\n }\n\n if (\n !includesAll(qualityGates, [\n \"council\",\n \"architecture\",\n \"security\",\n \"supabase\",\n \"messaging\",\n \"frontend\",\n \"accessibility\",\n \"testing\",\n \"release\",\n \"repo health\"\n ])\n ) {\n findings.push({\n level: \"warn\",\n area: \"quality\",\n message: \"QUALITY_GATES.md is missing one or more best-practice coverage areas.\",\n remediation:\n \"Cover council routing, architecture, security, Supabase/RLS, frontend, accessibility, testing, release, and repo-health evidence.\"\n });\n } else {\n findings.push({\n level: \"pass\",\n area: \"quality\",\n message: \"QUALITY_GATES.md defines a multi-area best-practice maturity model.\"\n });\n }\n}\n\nfunction addUpgradeFindings(cwd: string, findings: AuditFinding[]): void {\n const upgradeDoc = readDoc(cwd, \"UPGRADE.md\");\n if (!upgradeDoc) return;\n\n if (!includesAll(upgradeDoc, [\"agent-kit diff\", \"agent-kit update\", \"audit --min-readiness\", \"rollback\", \"release notes\"])) {\n findings.push({\n level: \"warn\",\n area: \"upgrade\",\n message: \"UPGRADE.md does not define the full agent-kit diff, update, audit, release-notes, and rollback flow.\",\n remediation:\n \"Document branch creation, agent-kit diff, agent-kit update, conflict review, audit readiness threshold, release notes, and rollback evidence.\"\n });\n } else if (!includesAll(upgradeDoc, [\"next.js\", \"codemod\", \"supabase\", \"migration\", \"generated\"])) {\n findings.push({\n level: \"warn\",\n area: \"upgrade\",\n message: \"UPGRADE.md does not cover framework codemods, Supabase migrations, or generated type review.\",\n remediation:\n \"Include Next.js upgrade/codemod review and Supabase migration history, RLS impact, rollback, and generated type checks.\"\n });\n } else {\n findings.push({\n level: \"pass\",\n area: \"upgrade\",\n message: \"UPGRADE.md defines a reviewable upgrade, migration, audit, and rollback lifecycle.\"\n });\n }\n}\n\nconst STARTER_EVIDENCE_PATTERNS = [\n /\\bTBD\\b/i,\n /replace with real/i,\n /example_table/i,\n /describe the product/i,\n /document required/i,\n /pass\\/fail\\/skipped/i\n];\n\nconst EVIDENCE_DOCS = [\n \"COUNCIL.md\",\n \"SPEC.md\",\n \"DESIGN.md\",\n \"MESSAGING.md\",\n \"SECURITY.md\",\n \"TESTING.md\",\n \"DEPLOYMENT.md\",\n \"ASSISTANT_ADAPTERS.md\",\n \"MODEL_ROUTING.md\",\n \"UPGRADE.md\"\n] as const;\n\nfunction addProjectEvidenceFindings(cwd: string, findings: AuditFinding[]): void {\n const placeholderDocs = EVIDENCE_DOCS.filter((doc) => {\n const text = readDoc(cwd, doc);\n return text && STARTER_EVIDENCE_PATTERNS.some((pattern) => pattern.test(text));\n });\n\n if (placeholderDocs.length > 0) {\n findings.push({\n level: \"warn\",\n area: \"evidence\",\n message: `Project evidence docs still contain starter placeholders: ${placeholderDocs.join(\", \")}.`,\n remediation:\n \"Replace TBD/example rows with real project evidence, or document why an item is not applicable before claiming strong or best-practice maturity.\"\n });\n } else {\n findings.push({\n level: \"pass\",\n area: \"evidence\",\n message: \"Project evidence docs do not contain starter placeholders.\"\n });\n }\n}\n\nfunction addMessagingFindings(cwd: string, findings: AuditFinding[]): void {\n const messagingDoc = readDoc(cwd, \"MESSAGING.md\");\n if (!messagingDoc) return;\n\n if (!includesAll(messagingDoc, [\"discovery questions\", \"audience\", \"pain\", \"outcome\", \"differentiator\", \"proof\", \"objections\", \"voice\", \"conversion\"])) {\n findings.push({\n level: \"warn\",\n area: \"messaging\",\n message: \"MESSAGING.md does not capture the required discovery questions and value-proposition inputs.\",\n remediation:\n \"Document audience, pain, outcome, differentiator, proof, objections, voice, conversion goal, and unanswered discovery questions before accepting final copy.\"\n });\n } else {\n findings.push({\n level: \"pass\",\n area: \"messaging\",\n message: \"MESSAGING.md captures question-led positioning and value-proposition inputs.\"\n });\n }\n\n if (!includesAll(messagingDoc, [\"claim\", \"proof required\", \"current proof\", \"objection\", \"cta\"])) {\n findings.push({\n level: \"warn\",\n area: \"messaging\",\n message: \"MESSAGING.md does not connect claims, proof, objections, and CTA hierarchy.\",\n remediation: \"Track claims against proof, objection handling, primary CTA, secondary CTA, and risky claims before release.\"\n });\n } else {\n findings.push({\n level: \"pass\",\n area: \"messaging\",\n message: \"MESSAGING.md connects claims, proof, objections, and CTA hierarchy.\"\n });\n }\n}\n\nexport function auditProject(cwd: string): AuditFinding[] {\n const findings: AuditFinding[] = [];\n const manifest = readManifest(cwd);\n 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: \"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 (\n normalized.startsWith(\"tests/\") &&\n content.includes(`const fakeSecret = \"${testSecretFixture}\"`) &&\n content.includes(\"not.toContain(fakeSecret)\")\n ) {\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\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 })\n .strict();\n\nexport type OnboardingStateContractValue = z.infer<typeof OnboardingStateContract>;\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(\n cwd: string,\n patch: Partial<OnboardingStateContractValue>\n): 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 =\n 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 { CONTEXT_JSON, CONTEXT_MD, ensureStudioDirs, listMarkdown, nowIso, readJsonFile, redactSensitive, unique, writeJsonFile, writeTextFile } from \"./shared.js\";\n\nexport interface ContextCommandResult {\n contextPath: string;\n markdownPath: string;\n openQuestions: string[];\n}\n\nfunction readPackageJson(cwd: string): { scripts?: Record<string, string>; dependencies?: Record<string, string>; devDependencies?: Record<string, string> } | null {\n const path = join(cwd, \"package.json\");\n if (!existsSync(path)) return null;\n return JSON.parse(readFileSync(path, \"utf8\")) as {\n scripts?: Record<string, string>;\n dependencies?: Record<string, string>;\n devDependencies?: Record<string, string>;\n };\n}\n\nfunction detectPackageManager(cwd: string): string | undefined {\n if (existsSync(join(cwd, \"pnpm-lock.yaml\"))) return \"pnpm\";\n if (existsSync(join(cwd, \"yarn.lock\"))) return \"yarn\";\n if (existsSync(join(cwd, \"package-lock.json\"))) return \"npm\";\n if (existsSync(join(cwd, \"bun.lockb\")) || existsSync(join(cwd, \"bun.lock\"))) return \"bun\";\n return undefined;\n}\n\nfunction detectFromDependencies(packageJson: ReturnType<typeof readPackageJson>, names: string[]): string[] {\n const deps = {\n ...(packageJson?.dependencies ?? {}),\n ...(packageJson?.devDependencies ?? {})\n };\n return names.filter((name) => deps[name] !== undefined);\n}\n\nfunction readEnvExampleKeys(cwd: string): string[] {\n const envText = readTextIfExists(join(cwd, \".env.example\")) ?? \"\";\n return unique(\n envText\n .split(/\\r?\\n/)\n .map((line) => line.trim())\n .filter((line) => line && !line.startsWith(\"#\") && line.includes(\"=\"))\n .map((line) => line.split(\"=\")[0]?.trim() ?? \"\")\n .filter(Boolean)\n );\n}\n\nfunction inferOpenQuestions(context: ProjectContextContractValue): string[] {\n const missing: string[] = [];\n const questions = [\n [\"productSummary\", \"What does this product do in one concrete paragraph?\"],\n [\"primaryAudience\", \"Who is the primary user or buyer?\"],\n [\"authModel\", \"What authentication model should agents preserve?\"],\n [\"tenantModel\", \"Is this single-user, team, tenant, marketplace, admin, or public content?\"]\n ] as const;\n missing.push(...questions.flatMap(([field, question]) => (context[field].trim() ? [] : [question])));\n if (context.primaryWorkflows.length === 0) missing.push(\"What are the top three user workflows?\");\n if (!context.uiDirection.preferred.trim()) missing.push(\"What should the UI feel like, and what should it avoid?\");\n if (!context.messaging.valueProposition.trim()) missing.push(\"What value proposition and proof should public copy use?\");\n return unique(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\"\n | \"team\"\n | \"product\"\n | \"access\"\n | \"ui\"\n | \"messaging\"\n | \"review\"\n | \"complete\"\n | \"ide\"\n | \"visualQa\"\n | \"designDoc\"\n | \"messagingDoc\"\n | \"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 {\n generateCodexCustomAgents,\n generateCursorSkillsFromKit,\n generateCursorSubagents,\n generateMarkdownSubagents\n} 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(\n cwd: string,\n packageRoot: string,\n source: string,\n target: string,\n force: boolean,\n result: ActivateIdeResult\n): 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(\n cwd: string,\n packageRoot: string,\n sourceDir: string,\n targetDir: string,\n force: boolean,\n result: ActivateIdeResult\n): 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(\n cwd,\n packageRoot,\n ANTIGRAVITY_COMMANDS_SOURCE_DIR,\n ANTIGRAVITY_COMMANDS_TARGET_DIR,\n force,\n result\n );\n copyDirectoryAsConflicts(\n cwd,\n packageRoot,\n RUNTIME_SKILLS_SOURCE_DIR,\n ANTIGRAVITY_RUNTIME_SKILLS_TARGET_DIR,\n force,\n result\n );\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\":\n \"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\":\n \"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 =\n 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(\n agent: RosterAgent,\n options: { proactive?: boolean } = {}\n): 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(\n cwd: string,\n relativePath: string,\n content: string,\n force: boolean,\n result: ActivateIdeResult\n): 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(\n cwd: string,\n agentsDir: string,\n options: { proactive?: boolean; force: boolean; result: ActivateIdeResult }\n): 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\":\n \"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\":\n \"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\":\n \"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(\n (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}\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 { Octokit } from \"@octokit/rest\";\nimport { existsSync, readFileSync } from \"node:fs\";\nimport { join } from \"node:path\";\nimport type { RepoCandidate } from \"../config/types.js\";\nimport { writeText } from \"../utils/fs.js\";\nimport { findPackageRoot } from \"../utils/package-root.js\";\nimport { researchConfigSchema } from \"./config.js\";\n\nexport interface DiscoverOptions {\n cwd: string;\n output?: string;\n token?: string;\n limit?: number;\n}\n\nexport async function discoverRepos(options: DiscoverOptions): Promise<RepoCandidate[]> {\n const packageRoot = findPackageRoot();\n const configPath = join(packageRoot, \"research\", \"scan-config.json\");\n const config = researchConfigSchema.parse(JSON.parse(readFileSync(configPath, \"utf8\")));\n const token = options.token ?? process.env.GITHUB_TOKEN;\n\n if (!token) {\n throw new Error(\"GITHUB_TOKEN is required for GitHub API research discovery.\");\n }\n\n const octokit = new Octokit({ auth: token });\n const deduped = new Map<string, RepoCandidate>();\n const maxRepos = options.limit ?? config.maxRepos;\n const excludedRepos = new Set(config.excludeRepos.map((repo) => repo.toLowerCase()));\n\n for (const category of config.categories) {\n let categoryCount = 0;\n\n for (const query of category.queries) {\n if (deduped.size >= maxRepos || categoryCount >= category.targetCount) break;\n\n const response = await octokit.search.repos({\n q: `${query} archived:false pushed:>=${config.activeSince} stars:>=${config.minStars}`,\n sort: \"stars\",\n order: \"desc\",\n per_page: 100\n });\n\n for (const repo of response.data.items) {\n if (deduped.size >= maxRepos || categoryCount >= category.targetCount) break;\n if (deduped.has(repo.full_name)) continue;\n if (excludedRepos.has(repo.full_name.toLowerCase())) continue;\n\n deduped.set(repo.full_name, {\n fullName: repo.full_name,\n htmlUrl: repo.html_url,\n description: repo.description ?? \"\",\n stars: repo.stargazers_count,\n pushedAt: repo.pushed_at ?? \"\",\n language: repo.language,\n topics: repo.topics ?? [],\n category: category.name\n });\n categoryCount += 1;\n }\n }\n }\n\n for (const seed of config.seedRepos) {\n if (deduped.size >= maxRepos) break;\n if (deduped.has(seed.fullName)) continue;\n if (excludedRepos.has(seed.fullName.toLowerCase())) continue;\n\n const [owner, repo] = seed.fullName.split(\"/\");\n if (!owner || !repo) continue;\n\n try {\n const response = await octokit.repos.get({ owner, repo });\n deduped.set(response.data.full_name, {\n fullName: response.data.full_name,\n htmlUrl: response.data.html_url,\n description: response.data.description ?? \"\",\n stars: response.data.stargazers_count,\n pushedAt: response.data.pushed_at ?? \"\",\n language: response.data.language,\n topics: response.data.topics ?? [],\n category: seed.category\n });\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n console.warn(`Skipping seed repo ${seed.fullName}: ${message}`);\n }\n }\n\n const candidates = [...deduped.values()].slice(0, maxRepos);\n const output = options.output ?? join(options.cwd, \"research\", \"repo-candidates.json\");\n writeText(output, `${JSON.stringify(candidates, null, 2)}\\n`);\n return candidates;\n}\n","import { z } from \"zod\";\n\nexport const researchCategorySchema = z.object({\n name: z.string().min(1),\n queries: z.array(z.string().min(1)).min(1),\n targetCount: z.number().int().positive()\n});\n\nexport const researchSeedRepoSchema = z.object({\n fullName: z.string().regex(/^[^/\\s]+\\/[^/\\s]+$/),\n category: z.string().min(1)\n});\n\nexport const researchConfigSchema = z.object({\n maxRepos: z.number().int().positive().default(100),\n minStars: z.number().int().nonnegative().default(100),\n activeSince: z.string().default(\"2024-12-01\"),\n excludeRepos: z.array(z.string().regex(/^[^/\\s]+\\/[^/\\s]+$/)).default([]),\n categories: z.array(researchCategorySchema).min(1),\n seedRepos: z.array(researchSeedRepoSchema).default([])\n});\n\nexport type ResearchConfig = z.infer<typeof researchConfigSchema>;\n","import { existsSync, mkdirSync, readFileSync, rmSync } from \"node:fs\";\nimport { join } from \"node:path\";\nimport { simpleGit } from \"simple-git\";\nimport type { RepoCandidate, RepoFinding } from \"../config/types.js\";\nimport { writeText } from \"../utils/fs.js\";\nimport { analyzeRepository } from \"./analyze.js\";\n\nexport interface ScanOptions {\n cwd: string;\n candidatesPath?: string;\n workdir?: string;\n keepClones?: boolean;\n}\n\nfunction findingToMarkdown(finding: RepoFinding): string {\n const total = Object.values(finding.score).reduce((sum, value) => sum + value, 0);\n const maxScore = Object.keys(finding.score).length * 5;\n\n return `# Repo Finding: ${finding.candidate.fullName}\n\n## Why It Was Selected\n- Category: ${finding.candidate.category}\n- Stars: ${finding.candidate.stars}\n- Last pushed: ${finding.candidate.pushedAt}\n- Language: ${finding.candidate.language ?? \"unknown\"}\n- URL: ${finding.candidate.htmlUrl}\n- Score: ${total}/${maxScore}\n\n## Score\n\\`\\`\\`json\n${JSON.stringify(finding.score, null, 2)}\n\\`\\`\\`\n\n## Strong Practices\n${finding.strongPractices.map((item) => `- ${item}`).join(\"\\n\") || \"- None detected by static scan.\"}\n\n## Weaknesses / Not Worth Copying Blindly\n${finding.weakPractices.map((item) => `- ${item}`).join(\"\\n\") || \"- None detected by static scan.\"}\n\n## Files Worth Studying\n${finding.selectedFiles.map((item) => `- \\`${item}\\``).join(\"\\n\") || \"- No high-signal files detected.\"}\n\n## Patterns To Adopt\n${finding.patternsToAdopt.map((item) => `- ${item}`).join(\"\\n\")}\n\n## Impact On Agent Kit\n${finding.impactOnKit.map((item) => `- ${item}`).join(\"\\n\")}\n`;\n}\n\nexport async function scanRepos(options: ScanOptions): Promise<RepoFinding[]> {\n const candidatesPath = options.candidatesPath ?? join(options.cwd, \"research\", \"repo-candidates.json\");\n if (!existsSync(candidatesPath)) {\n throw new Error(`Candidates file not found: ${candidatesPath}`);\n }\n\n const candidates = JSON.parse(readFileSync(candidatesPath, \"utf8\")) as RepoCandidate[];\n const workdir = options.workdir ?? join(options.cwd, \"research\", \"workdir\");\n mkdirSync(workdir, { recursive: true });\n mkdirSync(join(options.cwd, \"research\", \"findings\"), { recursive: true });\n\n const findings: RepoFinding[] = [];\n const git = simpleGit();\n\n for (const candidate of candidates) {\n const repoSlug = candidate.fullName.replace(\"/\", \"__\");\n const repoPath = join(workdir, repoSlug);\n if (existsSync(repoPath)) rmSync(repoPath, { recursive: true, force: true });\n\n await git.raw([\"clone\", \"--depth\", \"1\", candidate.htmlUrl, repoPath]);\n const finding = analyzeRepository(candidate, repoPath);\n findings.push(finding);\n\n writeText(join(options.cwd, \"research\", \"findings\", `${repoSlug}.md`), findingToMarkdown(finding));\n\n if (!options.keepClones) {\n rmSync(repoPath, { recursive: true, force: true });\n }\n }\n\n return findings;\n}\n","import { existsSync, readFileSync } from \"node:fs\";\nimport { join } from \"node:path\";\nimport type { RepoCandidate, RepoFinding, RepoScore } from \"../config/types.js\";\nimport { listFilesRecursive } from \"../utils/fs.js\";\n\nfunction normalizeRelativePath(file: string): string {\n return file.replace(/\\\\/g, \"/\");\n}\n\nfunction hasFile(files: string[], matcher: RegExp): boolean {\n return files.some((file) => matcher.test(normalizeRelativePath(file)));\n}\n\nfunction fileText(root: string, file: string): string {\n const path = join(root, file);\n return existsSync(path) ? readFileSync(path, \"utf8\") : \"\";\n}\n\nfunction textIncludes(root: string, files: string[], matcher: RegExp, terms: string[]): boolean {\n const lowerTerms = terms.map((term) => term.toLowerCase());\n return files\n .filter((file) => matcher.test(normalizeRelativePath(file)))\n .some((file) => {\n const text = fileText(root, file).toLowerCase();\n return lowerTerms.some((term) => text.includes(term));\n });\n}\n\nfunction bounded(value: number): number {\n return Math.max(0, Math.min(5, value));\n}\n\nexport function analyzeRepository(candidate: RepoCandidate, repoRoot: string): RepoFinding {\n const files = listFilesRecursive(repoRoot);\n const score: RepoScore = {\n architecture: bounded(\n Number(hasFile(files, /^app\\//)) +\n Number(hasFile(files, /^components\\//)) +\n Number(hasFile(files, /^lib\\//)) +\n Number(hasFile(files, /^server\\//)) +\n Number(hasFile(files, /^packages\\//))\n ),\n supabaseAuthRls: bounded(\n Number(hasFile(files, /^supabase\\/migrations\\//)) * 2 +\n Number(textIncludes(repoRoot, files, /\\.(sql|md|ts|tsx)$/, [\"row level security\", \"policy\", \"rls\"])) +\n Number(textIncludes(repoRoot, files, /\\.(ts|tsx)$/, [\"createServerClient\", \"supabase-js\"])) +\n Number(textIncludes(repoRoot, files, /\\.(ts|tsx)$/, [\"service_role\", \"service-role\"]))\n ),\n security: bounded(\n Number(hasFile(files, /(^|\\/)SECURITY\\.md$/)) +\n Number(textIncludes(repoRoot, files, /\\.(md|yml|yaml|ts|tsx)$/, [\"OWASP\", \"CodeQL\", \"rate limit\"])) +\n Number(hasFile(files, /^\\.github\\/workflows\\//)) +\n Number(textIncludes(repoRoot, files, /\\.(ts|tsx)$/, [\"zod\", \"safeParse\"])) +\n Number(textIncludes(repoRoot, files, /\\.(md|ts|tsx)$/, [\"csrf\", \"ssrf\", \"idor\"]))\n ),\n frontendDesign: bounded(\n Number(hasFile(files, /^components\\//)) +\n Number(textIncludes(repoRoot, files, /\\.(css|ts|tsx|json)$/, [\"tokens\", \"theme\", \"tailwind\", \"radix\"])) +\n Number(textIncludes(repoRoot, files, /\\.(tsx|md|mdx)$/, [\"empty state\", \"loading\", \"error state\"])) +\n Number(hasFile(files, /(^|\\/)(DESIGN|STYLE_GUIDE)\\.md$/)) +\n Number(textIncludes(repoRoot, files, /\\.(md|mdx)$/, [\"creative direction\", \"content inventory\", \"user needs\"])) +\n Number(textIncludes(repoRoot, files, /\\.(md|mdx)$/, [\"reference set\", \"anti-reference\", \"design critique\", \"distinctiveness\"])) +\n Number(textIncludes(repoRoot, files, /\\.(md|mdx)$/, [\"product quality scorecard\", \"user/task fit\", \"content specificity\", \"source safety\"])) +\n Number(textIncludes(repoRoot, files, /\\.(tsx|css)$/, [\"aria-\", \"focus-visible\"]))\n ),\n accessibility: bounded(\n Number(textIncludes(repoRoot, files, /\\.(tsx|md)$/, [\"aria-\", \"keyboard\", \"focus-visible\"])) +\n Number(textIncludes(repoRoot, files, /\\.(tsx|md)$/, [\"WCAG\", \"accessibility\", \"a11y\"])) +\n Number(textIncludes(repoRoot, files, /\\.(json|js|ts)$/, [\"axe\", \"eslint-plugin-jsx-a11y\"]))\n ),\n testing: bounded(\n Number(hasFile(files, /(vitest|jest)\\.config\\.(js|ts|mjs)$/)) +\n Number(hasFile(files, /playwright\\.config\\.(js|ts|mjs)$/)) * 2 +\n Number(hasFile(files, /(^|\\/)(tests|__tests__|e2e)\\//)) +\n Number(hasFile(files, /^\\.storybook\\//)) +\n Number(textIncludes(repoRoot, files, /\\.(ts|tsx|js|jsx|md|mdx|json|yml|yaml)$/, [\"toHaveScreenshot\", \"visual regression\", \"chromatic\", \"argos\", \"loki\", \"test-storybook\"])) +\n Number(textIncludes(repoRoot, files, /package\\.json$/, [\"test\"]))\n ),\n documentation: bounded(\n Number(hasFile(files, /(^|\\/)README\\.md$/)) +\n Number(hasFile(files, /(^|\\/)CONTRIBUTING\\.md$/)) +\n Number(hasFile(files, /(^|\\/)CHANGELOG\\.md$/)) +\n Number(hasFile(files, /(^|\\/)(CODE_OF_CONDUCT|SUPPORT|GOVERNANCE)\\.md$/)) +\n Number(hasFile(files, /^docs\\//)) +\n Number(textIncludes(repoRoot, files, /\\.(md|mdx)$/, [\"architecture\", \"decision\", \"deployment\"]))\n ),\n ciDeployment: bounded(\n Number(hasFile(files, /^\\.github\\/workflows\\//)) * 2 +\n Number(hasFile(files, /vercel\\.json$/)) +\n Number(textIncludes(repoRoot, files, /\\.(yml|yaml|json|md)$/, [\"deployment\", \"preview\", \"production\"]))\n ),\n repoHealth: bounded(\n Number(hasFile(files, /^\\.github\\/ISSUE_TEMPLATE\\//)) +\n Number(hasFile(files, /(^|\\/)pull_request_template\\.md$/i)) +\n Number(hasFile(files, /^\\.github\\/CODEOWNERS$/)) +\n Number(hasFile(files, /^\\.github\\/(dependabot|labels|labeler)\\.ya?ml$/)) +\n Number(hasFile(files, /^\\.github\\/workflows\\/.*(codeql|labeler).*\\.ya?ml$/)) +\n Number(hasFile(files, /(^|\\/)(CODE_OF_CONDUCT|SUPPORT|GOVERNANCE|REPOSITORY_SETTINGS)\\.md$/)) +\n Number(textIncludes(repoRoot, files, /\\.(md|yml|yaml)$/, [\"branch protection\", \"private vulnerability reporting\", \"required status checks\"]))\n ),\n supplyChain: bounded(\n Number(hasFile(files, /^\\.github\\/workflows\\/.*dependency.*review.*\\.ya?ml$/)) +\n Number(hasFile(files, /^\\.github\\/workflows\\/.*scorecard.*\\.ya?ml$/)) +\n Number(textIncludes(repoRoot, files, /^\\.github\\/workflows\\/.*\\.ya?ml$/, [\"id-token: write\", \"npm publish\", \"trusted publishing\", \"provenance\"])) +\n Number(textIncludes(repoRoot, files, /^\\.github\\/workflows\\/.*\\.ya?ml$/, [\"dependency-review-action\", \"scorecard-action\", \"npm audit\"])) +\n Number(hasFile(files, /(^|\\/)SUPPLY_CHAIN\\.md$/)) +\n Number(textIncludes(repoRoot, files, /\\.(md|yml|yaml|json)$/, [\"provenance\", \"OIDC\", \"trusted publishing\", \"OpenSSF\"]))\n ),\n agentReadiness: bounded(\n Number(hasFile(files, /(^|\\/)AGENTS\\.md$/)) * 2 +\n Number(hasFile(files, /(^|\\/)\\.cursor\\//)) +\n Number(hasFile(files, /(^|\\/)CLAUDE\\.md$/)) +\n Number(hasFile(files, /(^|\\/)schemas\\//)) +\n Number(textIncludes(repoRoot, files, /\\.(md|mdx|json|ts|tsx)$/, [\"agent\", \"prompt\", \"skill\", \"handoff\", \"trace\", \"guardrail\", \"agent-roster\"]))\n )\n };\n\n const selectedFiles = files\n .filter((file) =>\n /(^|\\/)(README|SECURITY|CONTRIBUTING|CHANGELOG|CODE_OF_CONDUCT|SUPPORT|GOVERNANCE|REPOSITORY_SETTINGS|SUPPLY_CHAIN|AGENTS|CLAUDE|DESIGN|STYLE_GUIDE|TESTING|DEPLOYMENT)\\.md$/.test(file) ||\n /(^|\\/)COUNCIL\\.md$/.test(file) ||\n /^\\.github\\/workflows\\//.test(file) ||\n /^\\.github\\/ISSUE_TEMPLATE\\//.test(file) ||\n /^\\.github\\/CODEOWNERS$/.test(file) ||\n /^\\.github\\/(dependabot|labels|labeler)\\.ya?ml$/.test(file) ||\n /(^|\\/)pull_request_template\\.md$/i.test(file) ||\n /^\\.storybook\\//.test(file) ||\n /^schemas\\//.test(file) ||\n /^supabase\\/migrations\\//.test(file) ||\n /package\\.json$/.test(file) ||\n /playwright\\.config\\.(js|ts|mjs)$/.test(file) ||\n /(chromatic|argos|loki)\\.(config\\.)?(json|js|ts|mjs|yml|yaml)$/.test(file)\n )\n .slice(0, 30);\n\n const strongPractices: string[] = [];\n if (score.security >= 4) strongPractices.push(\"Security posture is explicit through docs, validation, CI, or review tooling.\");\n if (score.supabaseAuthRls >= 4) strongPractices.push(\"Supabase authorization appears to be handled close to the data boundary.\");\n if (score.testing >= 4) strongPractices.push(\"Test setup includes meaningful automated, browser-level, component-state, or visual-regression coverage.\");\n if (score.frontendDesign >= 4)\n strongPractices.push(\"Frontend implementation shows reusable components, states, design-system, content-first direction, or reference-led critique signals.\");\n if (score.documentation >= 4) strongPractices.push(\"Documentation is strong enough for external contributors or agents to onboard.\");\n if (score.repoHealth >= 4) strongPractices.push(\"Repository health is supported by issue/PR templates, labels, dependency automation, code scanning, ownership, branch protection guidance, or support docs.\");\n if (score.supplyChain >= 4) strongPractices.push(\"Supply-chain posture includes provenance, dependency review, Scorecard, OIDC publishing, or release integrity signals.\");\n\n const weakPractices: string[] = [];\n if (score.security < 3) weakPractices.push(\"Security expectations are implicit or incomplete.\");\n if (score.supabaseAuthRls < 3) weakPractices.push(\"Supabase RLS/Auth practices are not clearly discoverable.\");\n if (score.accessibility < 3) weakPractices.push(\"Accessibility signals are weak or absent.\");\n if (score.repoHealth < 3) weakPractices.push(\"Public repository health files, labels, branch protection guidance, contribution workflow, dependency automation, or code scanning are weak.\");\n if (score.supplyChain < 3) weakPractices.push(\"Supply-chain provenance, dependency review, Scorecard, or release-integrity signals are weak.\");\n if (score.agentReadiness < 3) weakPractices.push(\"Agent handoff, tracing, guardrail, schema, or AI-workflow instructions are not mature.\");\n\n const patternsToAdopt = [\n \"Prefer explicit docs and checklists over tribal conventions.\",\n \"Promote authorization and validation rules into reusable review gates.\",\n \"Separate frontend design quality from generic implementation review.\",\n \"Treat brand, content, and creative-direction evidence as frontend quality inputs, not optional polish.\",\n \"Use references and anti-references as critique inputs, not as source designs to copy.\",\n \"Use repeatable frontend product-quality scoring for user task, content specificity, visual identity, IA, states, accessibility, and source safety.\",\n \"Treat component-state screenshots and visual-regression evidence as acceptance artifacts for high-risk UI changes.\",\n \"Promote agent handoff practices into schema-backed records and auditable evidence instead of prose-only instructions.\",\n \"Treat public repository health files, issue/PR templates, labels, branch protection guidance, dependency automation, and code scanning as release-readiness assets.\",\n \"Treat package provenance, dependency review, Scorecard, and release workflow controls as package trust requirements.\"\n ];\n\n const impactOnKit = [\n \"Use score deltas to decide which templates and skills need stronger language.\",\n \"Add repeated high-confidence patterns to checklists, not one-off project quirks.\"\n ];\n\n return {\n candidate,\n score,\n selectedFiles,\n strongPractices,\n weakPractices,\n patternsToAdopt,\n impactOnKit\n };\n}\n","import { existsSync, readFileSync, readdirSync } from \"node:fs\";\nimport { join } from \"node:path\";\nimport type { RepoScore } from \"../config/types.js\";\nimport { writeText } from \"../utils/fs.js\";\n\nconst SUMMARY_TARGETS = {\n \"nextjs-patterns\": {\n title: \"Next.js Patterns\",\n scoreKeys: [\"architecture\", \"ciDeployment\", \"documentation\"] satisfies (keyof RepoScore)[],\n categories: [\"official-nextjs\", \"production-saas\"]\n },\n \"supabase-rls-patterns\": {\n title: \"Supabase RLS Patterns\",\n scoreKeys: [\"supabaseAuthRls\"] satisfies (keyof RepoScore)[],\n categories: [\"supabase-nextjs\"]\n },\n \"security-patterns\": {\n title: \"Security Patterns\",\n scoreKeys: [\"security\"] satisfies (keyof RepoScore)[],\n categories: [\"security-quality\", \"supabase-nextjs\", \"production-saas\"]\n },\n \"frontend-design-patterns\": {\n title: \"Frontend Design Patterns\",\n scoreKeys: [\"frontendDesign\", \"accessibility\"] satisfies (keyof RepoScore)[],\n categories: [\"design-systems\", \"production-saas\"]\n },\n \"testing-patterns\": {\n title: \"Testing Patterns\",\n scoreKeys: [\"testing\"] satisfies (keyof RepoScore)[],\n categories: [\"testing-docs-agents\", \"official-nextjs\", \"production-saas\"]\n },\n \"docs-and-agent-patterns\": {\n title: \"Docs And Agent Patterns\",\n scoreKeys: [\"documentation\", \"agentReadiness\"] satisfies (keyof RepoScore)[],\n categories: [\"testing-docs-agents\", \"official-nextjs\"]\n },\n \"repo-health-patterns\": {\n title: \"Repo Health Patterns\",\n scoreKeys: [\"repoHealth\", \"documentation\", \"ciDeployment\", \"security\"] satisfies (keyof RepoScore)[],\n categories: [\"repo-health-maintainers\", \"testing-docs-agents\", \"security-quality\", \"production-saas\"]\n },\n \"supply-chain-patterns\": {\n title: \"Supply Chain Patterns\",\n scoreKeys: [\"supplyChain\", \"security\", \"ciDeployment\", \"repoHealth\"] satisfies (keyof RepoScore)[],\n categories: [\"supply-chain-security\", \"repo-health-maintainers\", \"security-quality\"]\n }\n} as const;\n\ninterface ParsedFinding {\n file: string;\n fullName: string;\n category: string;\n stars: number;\n score: RepoScore;\n totalScore: number;\n strongPractices: string[];\n weakPractices: string[];\n}\n\nconst SCORE_KEYS: (keyof RepoScore)[] = [\n \"architecture\",\n \"supabaseAuthRls\",\n \"security\",\n \"frontendDesign\",\n \"accessibility\",\n \"testing\",\n \"documentation\",\n \"ciDeployment\",\n \"repoHealth\",\n \"supplyChain\",\n \"agentReadiness\"\n];\n\nfunction sectionBullets(text: string, start: string, end: string): string[] {\n const startIndex = text.indexOf(start);\n if (startIndex === -1) return [];\n\n const afterStart = text.slice(startIndex + start.length);\n const endIndex = afterStart.indexOf(end);\n const section = endIndex === -1 ? afterStart : afterStart.slice(0, endIndex);\n\n return section\n .split(\"\\n\")\n .map((line) => line.trim())\n .filter((line) => line.startsWith(\"- \") && !line.includes(\"None detected\"))\n .map((line) => line.slice(2));\n}\n\nfunction parseFinding(file: string, text: string): ParsedFinding | null {\n const fullName = text.match(/^# Repo Finding: (.+)$/m)?.[1];\n const category = text.match(/^- Category: (.+)$/m)?.[1];\n const stars = Number.parseInt(text.match(/^- Stars: (\\d+)$/m)?.[1] ?? \"0\", 10);\n const scoreJson = text.match(/## Score\\n```json\\n([\\s\\S]*?)\\n```/)?.[1];\n\n if (!fullName || !category || !scoreJson) return null;\n\n const parsedScore = JSON.parse(scoreJson) as Partial<RepoScore>;\n const score = Object.fromEntries(SCORE_KEYS.map((key) => [key, parsedScore[key] ?? 0])) as unknown as RepoScore;\n const totalScore = Object.values(score).reduce((sum, value) => sum + value, 0);\n\n return {\n file,\n fullName,\n category,\n stars,\n score,\n totalScore,\n strongPractices: sectionBullets(text, \"## Strong Practices\", \"## Weaknesses / Not Worth Copying Blindly\"),\n weakPractices: sectionBullets(text, \"## Weaknesses / Not Worth Copying Blindly\", \"## Files Worth Studying\")\n };\n}\n\nfunction countBy(values: string[]): [string, number][] {\n const counts = new Map<string, number>();\n for (const value of values) counts.set(value, (counts.get(value) ?? 0) + 1);\n return [...counts.entries()].sort((a, b) => b[1] - a[1] || a[0].localeCompare(b[0]));\n}\n\nfunction scoreFor(finding: ParsedFinding, scoreKeys: (keyof RepoScore)[]): number {\n return scoreKeys.reduce((sum, key) => sum + finding.score[key], 0);\n}\n\nfunction averageScore(findings: ParsedFinding[], scoreKeys: (keyof RepoScore)[]): string {\n if (findings.length === 0) return \"0.00\";\n const max = scoreKeys.length * 5;\n const avg = findings.reduce((sum, finding) => sum + scoreFor(finding, scoreKeys) / max, 0) / findings.length;\n return avg.toFixed(2);\n}\n\nfunction renderRepoList(findings: ParsedFinding[], scoreKeys: (keyof RepoScore)[]): string {\n const maxTotalScore = findings[0] ? Object.keys(findings[0].score).length * 5 : 0;\n return findings\n .slice()\n .sort((a, b) => scoreFor(b, scoreKeys) - scoreFor(a, scoreKeys) || b.totalScore - a.totalScore || b.stars - a.stars)\n .slice(0, 12)\n .map((finding) => `- ${finding.fullName} (${finding.category}) - focus score ${scoreFor(finding, scoreKeys)}, total ${finding.totalScore}/${maxTotalScore}`)\n .join(\"\\n\");\n}\n\nexport function summarizeFindings(cwd: string): string[] {\n const findingsDir = join(cwd, \"research\", \"findings\");\n if (!existsSync(findingsDir)) {\n throw new Error(\"No research/findings directory exists. Run agent-kit research scan first.\");\n }\n\n const findingFiles = readdirSync(findingsDir).filter((file) => file.endsWith(\".md\"));\n const findings = findingFiles\n .map((file) => parseFinding(file, readFileSync(join(findingsDir, file), \"utf8\")))\n .filter((finding): finding is ParsedFinding => finding !== null);\n\n const categoryCounts = countBy(findings.map((finding) => finding.category));\n const outputs: string[] = [];\n\n const overview = `# Research Scan Overview\n\nGenerated from ${findings.length} parsed repository findings.\n\n## Category Coverage\n${categoryCounts.map(([category, count]) => `- ${category}: ${count}`).join(\"\\n\")}\n\n## Highest Total Scores\n${findings\n .slice()\n .sort((a, b) => b.totalScore - a.totalScore || b.stars - a.stars)\n .slice(0, 20)\n .map((finding) => `- ${finding.fullName} (${finding.category}) - ${finding.totalScore}/${Object.keys(finding.score).length * 5}`)\n .join(\"\\n\")}\n\n## Most Repeated Strengths\n${countBy(findings.flatMap((finding) => finding.strongPractices))\n .slice(0, 12)\n .map(([practice, count]) => `- ${practice} (${count})`)\n .join(\"\\n\")}\n\n## Most Repeated Gaps\n${countBy(findings.flatMap((finding) => finding.weakPractices))\n .slice(0, 12)\n .map(([practice, count]) => `- ${practice} (${count})`)\n .join(\"\\n\")}\n`;\n\n const overviewPath = join(cwd, \"research\", \"summaries\", \"scan-overview.md\");\n writeText(overviewPath, overview);\n outputs.push(overviewPath);\n\n for (const [target, config] of Object.entries(SUMMARY_TARGETS)) {\n const categories: readonly string[] = config.categories;\n const scopedFindings = findings.filter((finding) => categories.includes(finding.category));\n const path = join(cwd, \"research\", \"summaries\", `${target}.md`);\n const summary = `# ${config.title}\n\nGenerated from ${scopedFindings.length} relevant repository findings.\n\n## Focus Areas\n${config.scoreKeys.map((key) => `- ${key}`).join(\"\\n\")}\n\n## Aggregate Evidence\n- Average normalized focus score: ${averageScore(scopedFindings, config.scoreKeys)}\n- Repositories considered: ${scopedFindings.length}\n\n## Strongest Repositories For This Topic\n${renderRepoList(scopedFindings, config.scoreKeys) || \"- No matching findings.\"}\n\n## Repeated Strengths\n${countBy(scopedFindings.flatMap((finding) => finding.strongPractices))\n .slice(0, 8)\n .map(([practice, count]) => `- ${practice} (${count})`)\n .join(\"\\n\") || \"- No repeated strengths detected.\"}\n\n## Repeated Gaps\n${countBy(scopedFindings.flatMap((finding) => finding.weakPractices))\n .slice(0, 8)\n .map(([practice, count]) => `- ${practice} (${count})`)\n .join(\"\\n\") || \"- No repeated gaps detected.\"}\n\n## Source Findings\n${scopedFindings\n .slice()\n .sort((a, b) => scoreFor(b, config.scoreKeys) - scoreFor(a, config.scoreKeys))\n .slice(0, 25)\n .map((finding) => `- research/findings/${finding.file}`)\n .join(\"\\n\")}\n`;\n\n writeText(path, summary);\n outputs.push(path);\n }\n\n return outputs;\n}\n\nexport function proposeUpdates(cwd: string): string {\n const output = `# Proposed Agent Kit Updates\n\nReview the generated research summaries, then convert repeated best practices into:\n\n- Root markdown templates in \\`templates/next-supabase\\`\n- Reusable skills in \\`skills/\\`\n- Agent role docs in \\`agents/\\`\n- Security and frontend checklists in \\`checklists/\\`\n\nDo not copy source code from scanned repositories. Adopt only generalized practices with clear rationale.\n`;\n\n const path = join(cwd, \"research\", \"proposed-updates.md\");\n writeText(path, output);\n return path;\n}\n","import { CorrectionRulesContract, type CorrectionRuleContractValue, type CorrectionRulesContractValue, formatContractIssues } from \"../config/contracts.js\";\nimport {\n AGENT_RULES_JSON,\n PROJECT_RULES_JSON,\n UPSTREAM_PROPOSALS_JSON,\n ensureStudioDirs,\n nowIso,\n readJsonFile,\n redactSensitive,\n safeSlug,\n writeJsonFile\n} from \"./shared.js\";\n\nexport interface AddCorrectionOptions {\n scope: CorrectionRuleContractValue[\"scope\"];\n text: string;\n agentId?: string;\n sourceSessionId?: string;\n id?: string;\n}\n\nexport interface CorrectionListResult {\n project: CorrectionRuleContractValue[];\n agent: CorrectionRuleContractValue[];\n upstream: CorrectionRuleContractValue[];\n}\n\nfunction fileForScope(scope: CorrectionRuleContractValue[\"scope\"]): string {\n if (scope === \"agent\") return AGENT_RULES_JSON;\n if (scope === \"upstream-proposal\") return UPSTREAM_PROPOSALS_JSON;\n return PROJECT_RULES_JSON;\n}\n\nexport function emptyCorrectionRules(): CorrectionRulesContractValue {\n return { schemaVersion: 1, rules: [] };\n}\n\nexport function readCorrectionRules(cwd: string, relativePath: string): CorrectionRulesContractValue {\n const parsed = readJsonFile<unknown>(cwd, relativePath) ?? emptyCorrectionRules();\n const result = CorrectionRulesContract.safeParse(parsed);\n if (!result.success) {\n throw new Error(`Invalid ${relativePath}: ${formatContractIssues(result.error).join(\"; \")}`);\n }\n return result.data;\n}\n\nexport function ensureCorrectionFiles(cwd: string): void {\n ensureStudioDirs(cwd);\n for (const path of [PROJECT_RULES_JSON, AGENT_RULES_JSON, UPSTREAM_PROPOSALS_JSON]) {\n if (!readJsonFile<unknown>(cwd, path)) writeJsonFile(cwd, path, emptyCorrectionRules());\n }\n}\n\nexport function addCorrection(cwd: string, options: AddCorrectionOptions): CorrectionRuleContractValue {\n ensureCorrectionFiles(cwd);\n const targetPath = fileForScope(options.scope);\n const rules = readCorrectionRules(cwd, targetPath);\n const id = options.id ?? safeSlug(options.text).slice(0, 48);\n const rule: CorrectionRuleContractValue = {\n id,\n scope: options.scope,\n status: options.scope === \"upstream-proposal\" ? \"proposed\" : \"active\",\n text: redactSensitive(options.text),\n ...(options.agentId ? { agentId: options.agentId, appliesToAgents: [options.agentId] } : {}),\n ...(options.sourceSessionId ? { sourceSessionId: options.sourceSessionId } : {}),\n createdAt: nowIso(),\n reviewedAt: null\n };\n const parsed = CorrectionRulesContract.parse({ ...rules, rules: [...rules.rules.filter((item) => item.id !== id), rule] });\n writeJsonFile(cwd, targetPath, parsed);\n return rule;\n}\n\nexport function listCorrections(cwd: string): CorrectionListResult {\n ensureCorrectionFiles(cwd);\n return {\n project: readCorrectionRules(cwd, PROJECT_RULES_JSON).rules,\n agent: readCorrectionRules(cwd, AGENT_RULES_JSON).rules,\n upstream: readCorrectionRules(cwd, UPSTREAM_PROPOSALS_JSON).rules\n };\n}\n\nexport function applyCorrection(cwd: string, id: string): CorrectionRuleContractValue {\n ensureCorrectionFiles(cwd);\n for (const path of [PROJECT_RULES_JSON, AGENT_RULES_JSON, UPSTREAM_PROPOSALS_JSON]) {\n const rules = readCorrectionRules(cwd, path);\n const index = rules.rules.findIndex((rule) => rule.id === id);\n if (index === -1) continue;\n const current = rules.rules[index];\n if (!current) continue;\n const { retiredAt: _retiredAt, reason: _reason, ...base } = current;\n const updated: CorrectionRuleContractValue = {\n ...base,\n status: \"active\",\n reviewedAt: nowIso()\n };\n rules.rules[index] = updated;\n writeJsonFile(cwd, path, CorrectionRulesContract.parse(rules));\n return updated;\n }\n throw new Error(`Correction not found: ${id}`);\n}\n\nexport function retireCorrection(cwd: string, id: string, reason: string): CorrectionRuleContractValue {\n ensureCorrectionFiles(cwd);\n for (const path of [PROJECT_RULES_JSON, AGENT_RULES_JSON, UPSTREAM_PROPOSALS_JSON]) {\n const rules = readCorrectionRules(cwd, path);\n const index = rules.rules.findIndex((rule) => rule.id === id);\n if (index === -1) continue;\n const current = rules.rules[index];\n if (!current) continue;\n const updated: CorrectionRuleContractValue = {\n ...current,\n status: \"retired\",\n retiredAt: nowIso(),\n reason\n };\n rules.rules[index] = updated;\n writeJsonFile(cwd, path, CorrectionRulesContract.parse(rules));\n return updated;\n }\n throw new Error(`Correction not found: ${id}`);\n}\n\nexport function proposeCorrectionUpstream(cwd: string, id: string): CorrectionRuleContractValue {\n const all = listCorrections(cwd);\n const found = [...all.project, ...all.agent].find((rule) => rule.id === id);\n if (!found) throw new Error(`Correction not found: ${id}`);\n return addCorrection(cwd, {\n scope: \"upstream-proposal\",\n text: found.text,\n ...(found.agentId ? { agentId: found.agentId } : {}),\n ...(found.sourceSessionId ? { sourceSessionId: found.sourceSessionId } : {}),\n id: `${found.id}-upstream`\n });\n}\n","import { existsSync, readFileSync, readdirSync, statSync } from \"node:fs\";\nimport { join } from \"node:path\";\nimport {\n SessionEventContract,\n StudioSessionContract,\n type SessionEventContractValue,\n type StudioSessionContractValue,\n formatContractIssues\n} from \"../config/contracts.js\";\nimport { DEFAULT_AGENT_ROSTER_TARGET } from \"../config/defaults.js\";\nimport { addCorrection } from \"./corrections.js\";\nimport {\n ACTIVE_SESSION_FILE,\n COUNCIL_SESSIONS_DIR,\n appendJsonLine,\n ensureStudioDirs,\n escapeMarkdownTableCell,\n escapeMarkdownText,\n listMarkdown,\n nowIso,\n readJsonFile,\n readJsonLines,\n readTextFile,\n redactSensitive,\n safeSlug,\n validateRelativeArtifactPath,\n writeJsonFile,\n writeTextFile\n} from \"./shared.js\";\n\nexport interface StartSessionOptions {\n title: string;\n workflowId?: string;\n request?: string;\n affectedLayers?: string[];\n qualityTarget?: StudioSessionContractValue[\"qualityTarget\"];\n}\n\nexport interface HandoffOptions {\n fromAgentId: string;\n toAgentId: string;\n decision: string;\n risk: string;\n evidence?: string[];\n}\n\nexport interface SessionCommandResult {\n sessionId: string;\n sessionPath: string;\n}\n\nfunction sessionDir(sessionId: string): string {\n return `${COUNCIL_SESSIONS_DIR}/${safeSlug(sessionId)}`;\n}\n\nfunction sessionJsonPath(sessionId: string): string {\n return `${sessionDir(sessionId)}/session.json`;\n}\n\nfunction eventsPath(sessionId: string): string {\n return `${sessionDir(sessionId)}/events.jsonl`;\n}\n\nfunction indexPath(sessionId: string): string {\n return `${sessionDir(sessionId)}/index.md`;\n}\n\nfunction transcriptPath(sessionId: string): string {\n return `${sessionDir(sessionId)}/transcript.md`;\n}\n\nfunction readDefaultWorkflowOutputs(cwd: string, workflowId: string): StudioSessionContractValue[\"requiredOutputs\"] {\n const roster = readJsonFile<{ workflows?: Array<{ id?: string; requiredOutputs?: string[] }> }>(cwd, DEFAULT_AGENT_ROSTER_TARGET);\n const workflow = roster?.workflows?.find((item) => item.id === workflowId);\n return (workflow?.requiredOutputs ?? [\"decision\", \"risk\", \"verification evidence\"]).map((name) => ({\n name,\n status: \"missing\" as const\n }));\n}\n\nexport function startSession(cwd: string, options: StartSessionOptions): SessionCommandResult {\n ensureStudioDirs(cwd);\n const datePrefix = new Date().toISOString().slice(0, 10);\n const sessionId = safeSlug(`${datePrefix}-${options.title}`);\n const now = nowIso();\n const workflowId = options.workflowId ?? \"planning\";\n const session: StudioSessionContractValue = {\n schemaVersion: 1,\n sessionId,\n title: options.title,\n createdAt: now,\n updatedAt: now,\n status: \"in-progress\",\n workflowId,\n request: options.request ?? options.title,\n affectedLayers: options.affectedLayers ?? [],\n activeAgentId: \"planner\",\n nextAgentId: undefined,\n qualityTarget: options.qualityTarget ?? \"baseline-setup\",\n requiredOutputs: readDefaultWorkflowOutputs(cwd, workflowId)\n };\n\n writeJsonFile(cwd, sessionJsonPath(sessionId), StudioSessionContract.parse(session));\n writeTextFile(cwd, ACTIVE_SESSION_FILE, `${sessionId}\\n`);\n appendSessionEvent(cwd, sessionId, {\n type: \"session_started\",\n createdAt: now,\n agentId: \"planner\",\n text: `Started ${workflowId} session: ${options.title}`\n });\n return { sessionId, sessionPath: sessionDir(sessionId) };\n}\n\nexport function listSessions(cwd: string): StudioSessionContractValue[] {\n const root = join(cwd, COUNCIL_SESSIONS_DIR);\n if (!existsSync(root)) return [];\n return readdirSync(root)\n .filter((entry) => entry !== \"active\")\n .map((entry) => join(root, entry, \"session.json\"))\n .filter((path) => existsSync(path) && statSync(path).isFile())\n .map((path) => StudioSessionContract.parse(JSON.parse(readFileSync(path, \"utf8\")) as unknown))\n .sort((a, b) => a.createdAt.localeCompare(b.createdAt));\n}\n\nexport function getActiveSessionId(cwd: string): string {\n const active = readTextFile(cwd, ACTIVE_SESSION_FILE)?.trim();\n if (!active) throw new Error(\"No active Agent Studio session. Run agent-kit session start first.\");\n return safeSlug(active);\n}\n\nexport function readSession(cwd: string, sessionId = getActiveSessionId(cwd)): StudioSessionContractValue {\n const parsed = readJsonFile<unknown>(cwd, sessionJsonPath(sessionId));\n const result = StudioSessionContract.safeParse(parsed);\n if (!result.success) throw new Error(`Invalid ${sessionJsonPath(sessionId)}: ${formatContractIssues(result.error).join(\"; \")}`);\n return result.data;\n}\n\nexport function readSessionEvents(cwd: string, sessionId = getActiveSessionId(cwd)): SessionEventContractValue[] {\n return readJsonLines(cwd, eventsPath(sessionId)).map((event, index) => {\n const result = SessionEventContract.safeParse(event);\n if (!result.success) {\n throw new Error(`Invalid ${eventsPath(sessionId)} line ${index + 1}: ${formatContractIssues(result.error).join(\"; \")}`);\n }\n return result.data;\n });\n}\n\nfunction writeSession(cwd: string, session: StudioSessionContractValue): void {\n writeJsonFile(cwd, sessionJsonPath(session.sessionId), StudioSessionContract.parse(session));\n}\n\nexport function appendSessionEvent(cwd: string, sessionId: string, event: SessionEventContractValue): SessionEventContractValue {\n const parsed = SessionEventContract.parse(redactEvent(event));\n appendJsonLine(cwd, eventsPath(sessionId), parsed);\n const session = readSession(cwd, sessionId);\n const updated: StudioSessionContractValue = {\n ...session,\n updatedAt: parsed.createdAt\n };\n if (parsed.agentId) updated.activeAgentId = parsed.agentId;\n if (parsed.type === \"handoff\" && parsed.toAgentId) {\n updated.activeAgentId = parsed.toAgentId;\n updated.nextAgentId = parsed.toAgentId;\n }\n if (parsed.type === \"session_status_changed\" && parsed.status) updated.status = parsed.status;\n writeSession(cwd, updated);\n return parsed;\n}\n\nfunction redactEvent(event: SessionEventContractValue): SessionEventContractValue {\n return {\n ...event,\n ...(event.text ? { text: redactSensitive(event.text) } : {}),\n ...(event.decision ? { decision: redactSensitive(event.decision) } : {}),\n ...(event.risk ? { risk: redactSensitive(event.risk) } : {}),\n ...(event.notes ? { notes: redactSensitive(event.notes) } : {}),\n ...(event.command ? { command: redactSensitive(event.command) } : {}),\n ...(event.outputName ? { outputName: redactSensitive(event.outputName) } : {}),\n ...(event.evidence ? { evidence: event.evidence.map(redactSensitive) } : {})\n };\n}\n\nexport function recordNote(cwd: string, agentId: string, text: string): SessionEventContractValue {\n return appendSessionEvent(cwd, getActiveSessionId(cwd), { type: \"agent_message\", createdAt: nowIso(), agentId, text });\n}\n\nexport function recordDecision(cwd: string, agentId: string, decision: string, risk?: string): SessionEventContractValue {\n return appendSessionEvent(cwd, getActiveSessionId(cwd), {\n type: \"agent_decision\",\n createdAt: nowIso(),\n agentId,\n decision,\n ...(risk ? { risk } : {})\n });\n}\n\nexport function recordHandoff(cwd: string, options: HandoffOptions): SessionEventContractValue {\n return appendSessionEvent(cwd, getActiveSessionId(cwd), {\n type: \"handoff\",\n createdAt: nowIso(),\n fromAgentId: options.fromAgentId,\n toAgentId: options.toAgentId,\n decision: options.decision,\n risk: options.risk,\n evidence: options.evidence ?? []\n });\n}\n\nexport function recordCorrection(\n cwd: string,\n options: { agentId?: string; scope: \"session\" | \"project\" | \"agent\" | \"upstream-proposal\"; text: string }\n): SessionEventContractValue {\n const sessionId = getActiveSessionId(cwd);\n const correction =\n options.scope === \"session\"\n ? undefined\n : addCorrection(cwd, {\n scope: options.scope,\n text: options.text,\n ...(options.agentId ? { agentId: options.agentId } : {}),\n sourceSessionId: sessionId\n });\n return appendSessionEvent(cwd, sessionId, {\n type: \"human_correction\",\n createdAt: nowIso(),\n ...(options.agentId ? { agentId: options.agentId } : {}),\n scope: options.scope,\n text: options.text,\n ...(correction ? { correctionId: correction.id } : {})\n });\n}\n\nexport function recordArtifact(cwd: string, file: string, note?: string): SessionEventContractValue {\n const artifactPath = validateRelativeArtifactPath(cwd, file);\n return appendSessionEvent(cwd, getActiveSessionId(cwd), {\n type: \"artifact_recorded\",\n createdAt: nowIso(),\n artifactPath,\n ...(note ? { notes: note } : {})\n });\n}\n\nexport function recordVerification(cwd: string, command: string, result: \"pass\" | \"fail\" | \"skipped\", notes?: string): SessionEventContractValue {\n return appendSessionEvent(cwd, getActiveSessionId(cwd), {\n type: \"verification_recorded\",\n createdAt: nowIso(),\n command,\n result,\n ...(notes ? { notes } : {})\n });\n}\n\nexport function recordRequiredOutput(\n cwd: string,\n name: string,\n status: \"missing\" | \"partial\" | \"complete\" | \"not-applicable\",\n evidence?: string\n): SessionEventContractValue {\n const trimmedName = name.trim();\n if (!trimmedName) throw new Error(\"Required output name is required.\");\n const sessionId = getActiveSessionId(cwd);\n const session = readSession(cwd, sessionId);\n const now = nowIso();\n const output = {\n name: trimmedName,\n status,\n ...(evidence ? { evidence: redactSensitive(evidence) } : {})\n };\n const outputIndex = session.requiredOutputs.findIndex((item) => item.name === trimmedName);\n const requiredOutputs =\n outputIndex === -1\n ? [...session.requiredOutputs, output]\n : session.requiredOutputs.map((item, index) => (index === outputIndex ? { ...item, ...output } : item));\n writeSession(cwd, { ...session, requiredOutputs, updatedAt: now });\n return appendSessionEvent(cwd, sessionId, {\n type: \"required_output_updated\",\n createdAt: now,\n outputName: trimmedName,\n outputStatus: status,\n ...(evidence ? { evidence: [evidence] } : {})\n });\n}\n\nexport function closeSession(cwd: string, status: \"planned\" | \"in-progress\" | \"blocked\" | \"complete\"): StudioSessionContractValue {\n const sessionId = getActiveSessionId(cwd);\n appendSessionEvent(cwd, sessionId, {\n type: \"session_status_changed\",\n createdAt: nowIso(),\n status,\n text: `Session marked ${status}.`\n });\n return readSession(cwd, sessionId);\n}\n\nexport function renderActiveSession(cwd: string): SessionCommandResult {\n return renderSession(cwd, getActiveSessionId(cwd));\n}\n\nexport function renderSession(cwd: string, sessionId: string): SessionCommandResult {\n const session = readSession(cwd, sessionId);\n const events = readSessionEvents(cwd, sessionId);\n const renderedAt = nowIso();\n const updated = { ...session, renderedAt, updatedAt: renderedAt };\n writeTextFile(cwd, indexPath(sessionId), renderSessionIndex(updated, events));\n writeTextFile(cwd, transcriptPath(sessionId), renderSessionTranscript(updated, events));\n writeSession(cwd, updated);\n return { sessionId, sessionPath: sessionDir(sessionId) };\n}\n\nfunction renderSessionIndex(session: StudioSessionContractValue, events: SessionEventContractValue[]): string {\n const handoffs = events.filter((event) => event.type === \"handoff\");\n const decisions = events.filter((event) => event.type === \"agent_decision\" || event.type === \"handoff\");\n const corrections = events.filter((event) => event.type === \"human_correction\");\n const artifacts = events.filter((event) => event.type === \"artifact_recorded\");\n const verification = events.filter((event) => event.type === \"verification_recorded\");\n\n return `# Council Session: ${escapeMarkdownText(session.title)}\n\nGenerated from \\`${sessionDir(session.sessionId)}/events.jsonl\\` at ${session.renderedAt ?? session.updatedAt}.\n\n## Current State\n\n- Session: ${session.sessionId}\n- Workflow: ${session.workflowId}\n- Status: ${session.status}\n- Active agent: ${session.activeAgentId ?? \"none\"}\n- Next agent: ${session.nextAgentId ?? \"none\"}\n- Quality target: ${session.qualityTarget}\n- Request: ${escapeMarkdownText(session.request)}\n\n## Handoff Graph\n\n\\`\\`\\`mermaid\n${renderMermaidGraph(handoffs)}\n\\`\\`\\`\n\n## Decisions\n\n| Agent | Decision | Risk | Evidence |\n| --- | --- | --- | --- |\n${decisions.map(renderDecisionRow).join(\"\\n\") || \"| None | None recorded | None recorded | None |\"}\n\n## Human Corrections\n\n| Scope | Agent | Correction | Durable Rule |\n| --- | --- | --- | --- |\n${corrections.map((event) => `| ${event.scope ?? \"session\"} | ${escapeMarkdownTableCell(event.agentId ?? \"all\")} | ${escapeMarkdownTableCell(event.text)} | ${event.correctionId ?? \"session-only\"} |`).join(\"\\n\") || \"| None | None | None recorded | None |\"}\n\n## Required Outputs\n\n| Output | Status | Evidence |\n| --- | --- | --- |\n${session.requiredOutputs.map((output) => `| ${escapeMarkdownTableCell(output.name)} | ${output.status} | ${escapeMarkdownTableCell(output.evidence)} |`).join(\"\\n\")}\n\n## Artifacts\n\n${listMarkdown(artifacts.map((event) => `${event.artifactPath}${event.notes ? ` - ${event.notes}` : \"\"}`))}\n\n## Verification\n\n| Command | Result | Notes |\n| --- | --- | --- |\n${verification.map((event) => `| ${escapeMarkdownTableCell(event.command)} | ${event.result ?? \"skipped\"} | ${escapeMarkdownTableCell(event.notes)} |`).join(\"\\n\") || \"| None recorded | skipped | Add verification before completion |\"}\n\n## Next Actions\n\n${renderNextActions(session, verification)}\n`;\n}\n\nfunction renderDecisionRow(event: SessionEventContractValue): string {\n if (event.type === \"handoff\") {\n return `| ${escapeMarkdownTableCell(`${event.fromAgentId ?? \"unknown\"} -> ${event.toAgentId ?? \"unknown\"}`)} | ${escapeMarkdownTableCell(event.decision)} | ${escapeMarkdownTableCell(event.risk)} | ${escapeMarkdownTableCell(event.evidence?.join(\", \"))} |`;\n }\n return `| ${escapeMarkdownTableCell(event.agentId ?? \"unknown\")} | ${escapeMarkdownTableCell(event.decision)} | ${escapeMarkdownTableCell(event.risk)} | ${escapeMarkdownTableCell(event.evidence?.join(\", \"))} |`;\n}\n\nfunction renderMermaidGraph(handoffs: SessionEventContractValue[]): string {\n if (handoffs.length === 0) return \"flowchart LR\\n session[\\\"Session\\\"]\";\n const lines = [\"flowchart LR\"];\n for (const handoff of handoffs) {\n const from = safeNodeId(handoff.fromAgentId ?? \"unknown\");\n const to = safeNodeId(handoff.toAgentId ?? \"unknown\");\n lines.push(` ${from}[\"${safeMermaidLabel(handoff.fromAgentId ?? \"unknown\")}\"] --> ${to}[\"${safeMermaidLabel(handoff.toAgentId ?? \"unknown\")}\"]`);\n }\n return lines.join(\"\\n\");\n}\n\nfunction safeNodeId(value: string): string {\n const id = value.replace(/[^a-zA-Z0-9_]/g, \"_\");\n return id || \"unknown\";\n}\n\nfunction safeMermaidLabel(value: string): string {\n const label = redactSensitive(value)\n .replace(/[^a-zA-Z0-9 _./:-]/g, \" \")\n .replace(/\\s+/g, \" \")\n .trim();\n return label || \"unknown\";\n}\n\nfunction renderNextActions(session: StudioSessionContractValue, verification: SessionEventContractValue[]): string {\n const missingOutputs = session.requiredOutputs.filter((output) => output.status === \"missing\" || output.status === \"partial\");\n const actions = [\n ...missingOutputs.map((output) => `Complete required output: ${output.name}.`),\n ...(verification.length === 0 ? [\"Record verification evidence before closing the session.\"] : []),\n ...(session.nextAgentId ? [`Continue with ${session.nextAgentId}.`] : [])\n ];\n return listMarkdown(actions);\n}\n\nfunction renderSessionTranscript(session: StudioSessionContractValue, events: SessionEventContractValue[]): string {\n const byAgent = new Map<string, SessionEventContractValue[]>();\n for (const event of events) {\n const key = event.agentId ?? event.fromAgentId ?? \"session\";\n byAgent.set(key, [...(byAgent.get(key) ?? []), event]);\n }\n const sections = [...byAgent.entries()]\n .map(([agentId, agentEvents]) => {\n const rows = agentEvents.map((event) => {\n const detail =\n event.text ??\n event.decision ??\n event.command ??\n event.artifactPath ??\n (event.outputName ? `${event.outputName}: ${event.outputStatus ?? \"\"}` : undefined) ??\n event.status ??\n \"\";\n return `- ${event.createdAt} \\`${event.type}\\`: ${escapeMarkdownText(detail)}`;\n });\n return `## ${escapeMarkdownText(agentId)}\\n\\n${rows.join(\"\\n\")}`;\n })\n .join(\"\\n\\n\");\n\n return `# Transcript: ${escapeMarkdownText(session.title)}\n\nGenerated from \\`${sessionDir(session.sessionId)}/events.jsonl\\`.\n\n${sections || \"No events recorded.\"}\n`;\n}\n","import { ProjectContextContract, type SessionEventContractValue, type StudioSessionContractValue } from \"../config/contracts.js\";\nimport { listCorrections } from \"./corrections.js\";\nimport { listSessions, readSessionEvents } from \"./session.js\";\nimport {\n ACTIVE_SESSION_FILE,\n CONTEXT_JSON,\n CONTEXT_MD,\n COUNCIL_SESSIONS_DIR,\n STUDIO_EXPORT_HTML,\n containsLikelySecret,\n ensureStudioDirs,\n nowIso,\n readJsonFile,\n readTextFile,\n redactSensitive,\n safeSlug,\n unique,\n writeTextFile\n} from \"./shared.js\";\n\nexport interface StaticStudioExportResult {\n studioPath: string;\n sessionCount: number;\n exportedAt: string;\n}\n\ninterface StaticStudioSession {\n session: StudioSessionContractValue;\n events: SessionEventContractValue[];\n indexPath: string;\n transcriptPath: string;\n agents: string[];\n}\n\ninterface StaticStudioData {\n generatedAt: string;\n context: unknown | null;\n contextMarkdown: string | null;\n corrections: ReturnType<typeof listCorrections>;\n activeSessionId: string | null;\n sessions: StaticStudioSession[];\n}\n\nexport function exportStaticStudio(cwd: string): StaticStudioExportResult {\n ensureStudioDirs(cwd);\n const exportedAt = nowIso();\n const context = readProjectContext(cwd);\n const contextMarkdown = readTextFile(cwd, CONTEXT_MD);\n const corrections = listCorrections(cwd);\n const sessions = listSessions(cwd).map((session) => {\n const events = readSessionEvents(cwd, session.sessionId);\n return {\n session,\n events,\n indexPath: `${COUNCIL_SESSIONS_DIR}/${safeSlug(session.sessionId)}/index.md`,\n transcriptPath: `${COUNCIL_SESSIONS_DIR}/${safeSlug(session.sessionId)}/transcript.md`,\n agents: unique(events.flatMap((event) => [event.agentId, event.fromAgentId, event.toAgentId].filter(Boolean) as string[]))\n };\n });\n const data: StaticStudioData = {\n generatedAt: exportedAt,\n context,\n contextMarkdown,\n corrections,\n activeSessionId: readTextFile(cwd, ACTIVE_SESSION_FILE)?.trim() ?? null,\n sessions\n };\n const redactedData = redactDeep(data) as StaticStudioData;\n const html = renderStaticStudioHtml(redactedData);\n if (containsLikelySecret(html)) {\n throw new Error(\"Refusing to write static Agent Studio export because the rendered HTML contains a secret-like value.\");\n }\n writeTextFile(cwd, STUDIO_EXPORT_HTML, html);\n return { studioPath: STUDIO_EXPORT_HTML, sessionCount: sessions.length, exportedAt };\n}\n\nfunction readProjectContext(cwd: string): unknown | null {\n const raw = readJsonFile<unknown>(cwd, CONTEXT_JSON);\n if (!raw) return null;\n return ProjectContextContract.parse(raw);\n}\n\nfunction redactDeep(value: unknown): unknown {\n if (typeof value === \"string\") return redactSensitive(value);\n if (Array.isArray(value)) return value.map(redactDeep);\n if (value && typeof value === \"object\") {\n return Object.fromEntries(Object.entries(value).map(([key, item]) => [key, redactDeep(item)]));\n }\n return value;\n}\n\nfunction renderStaticStudioHtml(data: StaticStudioData): string {\n const sessionCount = data.sessions.length;\n const correctionCount = data.corrections.project.length + data.corrections.agent.length;\n return `<!doctype html>\n<html lang=\"en\">\n<head>\n <meta charset=\"utf-8\">\n <meta name=\"viewport\" content=\"width=device-width, initial-scale=1\">\n <meta http-equiv=\"Content-Security-Policy\" content=\"default-src 'none'; style-src 'unsafe-inline'; img-src data:; base-uri 'none'; form-action 'none'\">\n <title>Agent Studio</title>\n <style>\n :root { color-scheme: light; --ink: #1f2933; --muted: #52606d; --line: #d9e2ec; --panel: #ffffff; --bg: #f5f7fa; --accent: #0f766e; --accent-2: #7c3aed; --warn: #b45309; }\n * { box-sizing: border-box; }\n body { margin: 0; font-family: Inter, ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, \"Segoe UI\", sans-serif; color: var(--ink); background: var(--bg); line-height: 1.5; }\n header { padding: 28px clamp(16px, 4vw, 48px) 20px; background: #0b1f24; color: #f8fafc; }\n header h1 { margin: 0 0 8px; font-size: clamp(28px, 4vw, 44px); letter-spacing: 0; }\n header p { margin: 0; color: #cbd5e1; max-width: 980px; }\n main { display: grid; grid-template-columns: minmax(0, 1fr); gap: 18px; padding: 20px clamp(16px, 4vw, 48px) 48px; }\n section, details { background: var(--panel); border: 1px solid var(--line); border-radius: 8px; }\n section { padding: 18px; }\n h2 { margin: 0 0 12px; font-size: 22px; letter-spacing: 0; }\n h3 { margin: 18px 0 10px; font-size: 17px; letter-spacing: 0; }\n .metrics { display: grid; grid-template-columns: repeat(auto-fit, minmax(150px, 1fr)); gap: 10px; margin-top: 18px; }\n .metric { border: 1px solid rgba(255,255,255,.22); border-radius: 8px; padding: 12px; background: rgba(255,255,255,.08); }\n .metric strong { display: block; font-size: 24px; }\n .metric span { color: #cbd5e1; font-size: 13px; }\n .grid { display: grid; grid-template-columns: minmax(0, 340px) minmax(0, 1fr); gap: 18px; align-items: start; }\n .stack { display: grid; gap: 12px; }\n .muted { color: var(--muted); }\n .path { font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, monospace; font-size: 13px; color: var(--muted); overflow-wrap: anywhere; }\n .pill { display: inline-flex; align-items: center; border-radius: 999px; padding: 2px 9px; border: 1px solid var(--line); background: #f8fafc; font-size: 12px; margin: 2px 4px 2px 0; }\n .session-card { padding: 0; overflow: hidden; }\n .session-head { padding: 16px 18px; border-bottom: 1px solid var(--line); display: flex; gap: 10px; flex-wrap: wrap; align-items: baseline; justify-content: space-between; }\n .session-head h2 { margin: 0; }\n .session-body { padding: 18px; display: grid; gap: 18px; }\n .graph-wrap { overflow-x: auto; border: 1px solid var(--line); border-radius: 8px; background: #fbfdff; padding: 8px; }\n svg.agent-graph { width: 100%; min-width: 520px; max-height: 240px; }\n .event-list { margin: 0; padding-left: 20px; }\n .event-list li { margin: 7px 0; }\n details.agent-stream { padding: 0; }\n details.agent-stream > summary { cursor: pointer; padding: 12px 14px; font-weight: 700; }\n details.agent-stream[open] > summary { border-bottom: 1px solid var(--line); }\n details.agent-stream .stream-body { padding: 12px 14px; }\n table { width: 100%; border-collapse: collapse; font-size: 14px; }\n th, td { text-align: left; border-bottom: 1px solid var(--line); padding: 8px; vertical-align: top; }\n th { color: var(--muted); font-size: 12px; text-transform: uppercase; letter-spacing: .04em; }\n code { font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, monospace; font-size: 13px; background: #edf2f7; padding: 1px 4px; border-radius: 4px; }\n @media (max-width: 860px) { .grid { grid-template-columns: 1fr; } header { padding-top: 22px; } }\n </style>\n</head>\n<body>\n <header>\n <h1>Agent Studio</h1>\n <p>Static local export generated from Agent Kit JSON and JSONL files. It embeds a redacted snapshot at export time and does not connect to a server, database, or model API.</p>\n <div class=\"metrics\">\n <div class=\"metric\"><strong>${sessionCount}</strong><span>sessions</span></div>\n <div class=\"metric\"><strong>${correctionCount}</strong><span>active correction files</span></div>\n <div class=\"metric\"><strong>${escapeHtml(data.generatedAt)}</strong><span>generated at</span></div>\n </div>\n </header>\n <main>\n <section>\n <h2>Project Context</h2>\n ${renderContextSummary(data)}\n </section>\n <div class=\"grid\">\n <aside class=\"stack\">\n <section>\n <h2>Corrections</h2>\n ${renderCorrections(data)}\n </section>\n <section>\n <h2>Session Index</h2>\n ${renderSessionIndexLinks(data.sessions)}\n </section>\n </aside>\n <div class=\"stack\">\n ${data.sessions.map(renderSessionSection).join(\"\\n\")}\n </div>\n </div>\n </main>\n <script type=\"application/json\" id=\"agent-studio-data\">${safeJsonForHtml(data)}</script>\n</body>\n</html>\n`;\n}\n\nfunction renderContextSummary(data: StaticStudioData): string {\n const context = data.context as\n | {\n projectName?: string;\n productSummary?: string;\n primaryAudience?: string;\n qualityTarget?: string;\n architecture?: { frameworks?: string[]; testTools?: string[]; hasSupabase?: boolean };\n openQuestions?: string[];\n }\n | null;\n if (!context) return `<p class=\"muted\">No project context found. Run <code>agent-kit onboard</code> or <code>agent-kit init --guided</code>.</p>`;\n return `<div class=\"stack\">\n <p><strong>${escapeHtml(context.projectName || \"TBD\")}</strong> ${escapeHtml(context.productSummary || \"No product summary recorded.\")}</p>\n <p class=\"muted\">Audience: ${escapeHtml(context.primaryAudience || \"TBD\")} | Quality target: ${escapeHtml(context.qualityTarget || \"baseline-setup\")}</p>\n <p>${renderPills([...(context.architecture?.frameworks ?? []), ...(context.architecture?.testTools ?? []), context.architecture?.hasSupabase ? \"supabase\" : \"\"].filter(Boolean))}</p>\n ${context.openQuestions?.length ? `<h3>Open Questions</h3>${renderList(context.openQuestions)}` : \"\"}\n <p class=\"path\">Source: ${CONTEXT_JSON}${data.contextMarkdown ? ` and ${CONTEXT_MD}` : \"\"}</p>\n </div>`;\n}\n\nfunction renderCorrections(data: StaticStudioData): string {\n const rules = [...data.corrections.project, ...data.corrections.agent].filter((rule) => rule.status === \"active\");\n if (rules.length === 0) return `<p class=\"muted\">No active durable corrections recorded.</p>`;\n return `<table>\n <thead><tr><th>Scope</th><th>Agent</th><th>Correction</th></tr></thead>\n <tbody>\n ${rules\n .map((rule) => `<tr><td>${escapeHtml(rule.scope)}</td><td>${escapeHtml(rule.agentId ?? rule.appliesToAgents?.join(\", \") ?? \"all\")}</td><td>${escapeHtml(rule.text)}</td></tr>`)\n .join(\"\\n\")}\n </tbody>\n </table>`;\n}\n\nfunction renderSessionIndexLinks(sessions: StaticStudioSession[]): string {\n if (sessions.length === 0) return `<p class=\"muted\">No sessions recorded yet.</p>`;\n return `<ol class=\"event-list\">${sessions.map((item) => `<li><a href=\"#${htmlId(item.session.sessionId)}\">${escapeHtml(item.session.title)}</a><br><span class=\"muted\">${escapeHtml(item.session.status)} | ${escapeHtml(item.session.workflowId)}</span></li>`).join(\"\")}</ol>`;\n}\n\nfunction renderSessionSection(item: StaticStudioSession): string {\n const verification = item.events.filter((event) => event.type === \"verification_recorded\");\n const corrections = item.events.filter((event) => event.type === \"human_correction\");\n const artifacts = item.events.filter((event) => event.type === \"artifact_recorded\");\n return `<section class=\"session-card\" id=\"${htmlId(item.session.sessionId)}\">\n <div class=\"session-head\">\n <h2>${escapeHtml(item.session.title)}</h2>\n <div>\n <span class=\"pill\">${escapeHtml(item.session.status)}</span>\n <span class=\"pill\">${escapeHtml(item.session.workflowId)}</span>\n <span class=\"pill\">${item.events.length} events</span>\n </div>\n </div>\n <div class=\"session-body\">\n <p class=\"muted\">Request: ${escapeHtml(item.session.request)}</p>\n <p class=\"path\">Markdown: ${escapeHtml(item.indexPath)} | ${escapeHtml(item.transcriptPath)}</p>\n <div class=\"graph-wrap\">${renderSvgGraph(item.events, item.agents)}</div>\n <div>\n <h3>Agent Streams</h3>\n ${renderAgentStreams(item)}\n </div>\n <div class=\"grid\">\n <div>\n <h3>Verification</h3>\n ${verification.length ? renderEventList(verification) : `<p class=\"muted\">No verification recorded.</p>`}\n </div>\n <div>\n <h3>Corrections And Artifacts</h3>\n ${corrections.length || artifacts.length ? renderEventList([...corrections, ...artifacts]) : `<p class=\"muted\">No corrections or artifacts recorded.</p>`}\n </div>\n </div>\n </div>\n </section>`;\n}\n\nfunction renderAgentStreams(item: StaticStudioSession): string {\n if (item.events.length === 0) return `<p class=\"muted\">No events recorded.</p>`;\n const byAgent = new Map<string, SessionEventContractValue[]>();\n for (const event of item.events) {\n const agent = event.agentId ?? event.fromAgentId ?? \"session\";\n byAgent.set(agent, [...(byAgent.get(agent) ?? []), event]);\n }\n return [...byAgent.entries()]\n .map(([agent, events]) => `<details class=\"agent-stream\"><summary>${escapeHtml(agent)} (${events.length})</summary><div class=\"stream-body\">${renderEventList(events)}</div></details>`)\n .join(\"\\n\");\n}\n\nfunction renderEventList(events: SessionEventContractValue[]): string {\n return `<ol class=\"event-list\">${events.map((event) => `<li><time>${escapeHtml(event.createdAt)}</time> <code>${escapeHtml(event.type)}</code>: ${escapeHtml(eventDetail(event))}</li>`).join(\"\\n\")}</ol>`;\n}\n\nfunction eventDetail(event: SessionEventContractValue): string {\n if (event.type === \"handoff\") return `${event.fromAgentId ?? \"unknown\"} -> ${event.toAgentId ?? \"unknown\"}: ${event.decision ?? \"\"} Risk: ${event.risk ?? \"\"}`;\n if (event.type === \"required_output_updated\") return `${event.outputName ?? \"output\"}: ${event.outputStatus ?? \"unknown\"}`;\n return event.text ?? event.decision ?? event.command ?? event.artifactPath ?? event.status ?? \"\";\n}\n\nfunction renderSvgGraph(events: SessionEventContractValue[], knownAgents: string[]): string {\n const handoffs = events.filter((event) => event.type === \"handoff\");\n const agents = unique([...knownAgents, ...handoffs.flatMap((event) => [event.fromAgentId, event.toAgentId].filter(Boolean) as string[])]);\n if (agents.length === 0) {\n return `<svg class=\"agent-graph\" viewBox=\"0 0 520 120\" role=\"img\" aria-label=\"No agent handoffs recorded\"><text x=\"24\" y=\"62\" fill=\"#52606d\">No handoffs recorded yet.</text></svg>`;\n }\n const width = Math.max(520, agents.length * 180);\n const y = 78;\n const positions = new Map(agents.map((agent, index) => [agent, { x: 74 + index * 170, y }]));\n const edges = handoffs\n .map((event) => {\n const from = positions.get(event.fromAgentId ?? \"\");\n const to = positions.get(event.toAgentId ?? \"\");\n if (!from || !to) return \"\";\n return `<line x1=\"${from.x + 34}\" y1=\"${from.y}\" x2=\"${to.x - 34}\" y2=\"${to.y}\" stroke=\"#7c3aed\" stroke-width=\"2\" marker-end=\"url(#arrow)\" />`;\n })\n .join(\"\\n\");\n const nodes = agents\n .map((agent) => {\n const position = positions.get(agent);\n if (!position) return \"\";\n return `<g><circle cx=\"${position.x}\" cy=\"${position.y}\" r=\"34\" fill=\"#ccfbf1\" stroke=\"#0f766e\" stroke-width=\"2\" /><text x=\"${position.x}\" y=\"${position.y + 56}\" text-anchor=\"middle\" fill=\"#1f2933\" font-size=\"12\">${escapeSvgText(agent)}</text></g>`;\n })\n .join(\"\\n\");\n return `<svg class=\"agent-graph\" viewBox=\"0 0 ${width} 150\" role=\"img\" aria-label=\"Agent handoff graph\">\n <defs><marker id=\"arrow\" markerWidth=\"10\" markerHeight=\"10\" refX=\"9\" refY=\"3\" orient=\"auto\" markerUnits=\"strokeWidth\"><path d=\"M0,0 L0,6 L9,3 z\" fill=\"#7c3aed\" /></marker></defs>\n ${edges}\n ${nodes}\n </svg>`;\n}\n\nfunction renderPills(values: string[]): string {\n const cleaned = values.filter(Boolean);\n return cleaned.length ? cleaned.map((value) => `<span class=\"pill\">${escapeHtml(value)}</span>`).join(\"\") : `<span class=\"muted\">No stack signals recorded.</span>`;\n}\n\nfunction renderList(values: string[]): string {\n return `<ul>${values.map((value) => `<li>${escapeHtml(value)}</li>`).join(\"\")}</ul>`;\n}\n\nfunction htmlId(value: string): string {\n return `session-${safeSlug(value)}`;\n}\n\nfunction escapeHtml(value: string | number | undefined | null): string {\n return String(value ?? \"\")\n .replace(/&/g, \"&\")\n .replace(/</g, \"<\")\n .replace(/>/g, \">\")\n .replace(/\"/g, \""\")\n .replace(/'/g, \"'\");\n}\n\nfunction escapeSvgText(value: string): string {\n return escapeHtml(value).slice(0, 42);\n}\n\nfunction safeJsonForHtml(value: unknown): string {\n return JSON.stringify(value)\n .replace(/&/g, \"\\\\u0026\")\n .replace(/</g, \"\\\\u003c\")\n .replace(/>/g, \"\\\\u003e\");\n}\n","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 {\n applySetupFormAnswers,\n ensureProjectContextForSetup,\n getSetupFormViewModel,\n parseSetupFormPayload\n} from \"./setup-form.js\";\nimport {\n getSetupProgress,\n loadOnboardingState,\n markQuickPathComplete,\n markSectionComplete,\n saveOnboardingState\n} 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 {\n buildWizardFormState,\n extractAgentBriefsFromForm,\n extractSetupFormFromWizardForm,\n loadWizardDraft,\n saveWizardDraft\n} 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\";\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): 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 return {\n projectName: viewModel.projectName,\n form: buildWizardFormState(cwd),\n hasExistingContext: Boolean(\n viewModel.form.productSummary.trim() ||\n viewModel.form.primaryAudience.trim() ||\n viewModel.form.valueProposition.trim()\n ),\n openQuestions: viewModel.openQuestions,\n hasSupabase: viewModel.hasSupabase,\n onboarding,\n progress,\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 (Object.keys(patch).length > 0) saveOnboardingState(cwd, patch);\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\") {\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 sendJson(response, 200, {\n ...buildStatePayload(cwd),\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:\n | { activated: string[]; copied: string[]; unchanged: string[]; conflicts: string[] }\n | 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 sendJson(response, 200, { ...result, activation, ...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/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 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([\n ...base.evidence,\n { source: \"agent-kit setup wizard\", note: \"Project context updated through the local web setup wizard.\" }\n ])\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 (\n qualityTarget !== \"baseline-setup\" &&\n qualityTarget !== \"needs-improvement\" &&\n qualityTarget !== \"best-practice-candidate\"\n ) {\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\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 (\n existsSync(join(cwd, rel)) ||\n existsSync(join(cwd, \".cursor/rules/cursor-agent-kit.mdc\"))\n );\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(\n cwd: string,\n patch: { form?: Partial<SetupFormPayload>; agentBriefs?: Record<string, string> }\n): 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 = [\n \"content-app\",\n \"saas\",\n \"admin\",\n \"marketplace\",\n \"tool\",\n \"ecommerce\",\n \"portfolio\",\n \"education\",\n \"community\",\n \"ai-workflow\",\n \"other\"\n];\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 {\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 }\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=\"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 & save</button>'}\n </div>\n </header>\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 <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 & 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 & 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 = [\n \"content-app\",\n \"saas\",\n \"admin\",\n \"marketplace\",\n \"tool\",\n \"ecommerce\",\n \"portfolio\",\n \"education\",\n \"community\",\n \"ai-workflow\",\n \"other\"\n];\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 })\n .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>\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 { watch, type FSWatcher } from \"node:fs\";\nimport { createServer, type IncomingMessage, type Server, type ServerResponse } from \"node:http\";\nimport { join } from \"node:path\";\nimport {\n getActiveSessionId,\n listSessions,\n readSession,\n readSessionEvents\n} 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\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 === \"/\" || 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 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 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"],"mappings":";;;AAAA,SAAS,eAAe;;;ACAxB,SAAS,cAAAA,mBAAkB;AAC3B,SAAS,QAAAC,aAAY;;;ACDrB,SAAS,kBAAkB;AAC3B;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OACK;AACP,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;;;ACxHA,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;AAEO,SAAS,SAAS,KAAa,WAAmB,UAA+B,CAAC,GAAW;AAClG,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,SAAS,qBAAqB,YAAY,KAAKD,MAAK,cAAc,UAAU,UAAU,GAAG;AAAA,IAC7F,OAAO,QAAQ,QAAQ,KAAK;AAAA,IAC5B,cAAcA,MAAK,KAAK,cAAc,WAAW;AAAA,EACnD,CAAC;AAED,SAAO,GAAG,OAAO,MAAM,KAAK,OAAO,MAAM;AAC3C;;;AG/BA,SAAS,cAAAE,cAAY,gBAAAC,qBAAoB;AACzC,SAAkB,QAAAC,QAAM,iBAAiB;;;ACClC,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;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;;;AChIA,SAAS,gBAAgB,cAAAC,aAAY,gBAAAC,qBAAmC;AACxE,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,CAAC,SAAS,KAAK,KAAK,EAAE,SAAS,CAAC,EACvC,IAAI,CAAC,SAAS,KAAK,MAAM,IAAI,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,EAC5B,QAAQ,OAAO,KAAK;AACzB;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;;;AC1HA,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;AAYI,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;AAClE,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;;;ACzXA,SAAS,cAAAC,mBAAkB;AAC3B,SAAS,QAAAC,aAAY;;;ACDrB,SAAS,cAAAC,aAAY,gBAAAC,qBAAoB;AACzC,SAAS,QAAAC,aAAY;AAWrB,SAAS,gBAAgB,KAA2I;AAClK,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,CAAC,SAAS,KAAK,KAAK,CAAC,EACzB,OAAO,CAAC,SAAS,QAAQ,CAAC,KAAK,WAAW,GAAG,KAAK,KAAK,SAAS,GAAG,CAAC,EACpE,IAAI,CAAC,SAAS,KAAK,MAAM,GAAG,EAAE,CAAC,GAAG,KAAK,KAAK,EAAE,EAC9C,OAAO,OAAO;AAAA,EACnB;AACF;AAEA,SAAS,mBAAmBG,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;;;AClNO,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;;;AF1KO,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,oBACd,KACA,OAC8B;AAC9B,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,iBACJ,MAAM,UAAU,cAAc,iBAAiB,iBAAiB,MAAM,KAAK;AAC7E,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;;;AG5IA,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,8BACE;AAAA,EACF,mBAAmB;AAAA,EACnB,wBACE;AAAA,EACF,uBACE;AAAA,EACF,qBAAqB;AAAA,EACrB,eAAe;AAAA,EACf,mBAAmB;AAAA,EACnB,qCACE;AAAA,EACF,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;AAAA,MACR,CAAC,WAA4B;AAAA,QAC3B,IAAI,SAAS,MAAM,EAAE;AAAA,QACrB,SAAS;AAAA,QACT,OAAO,SAAS,MAAM,IAAI;AAAA,QAC1B,KAAK,GAAG,MAAM,WAAW;AAAA,QACzB,QAAQ,CAAC,cAAc,MAAM,EAAE,EAAE;AAAA,QACjC,SAAS,MAAM;AAAA,QACf,WAAW,MAAM;AAAA,QACjB,aAAa,MAAM;AAAA,QACnB,OAAO;AAAA,QACP,UAAU;AAAA,MACZ;AAAA,IACF;AAAA,EACF;AACF;AAEO,SAAS,oBAAoB,SAAyB;AAC3D,SAAO,cAAc,OAAO;AAC9B;;;AChHO,SAAS,2BAA2B,aAAqB,WAAkC;AAChG,aAAW,QAAQ,YAAY,MAAM,IAAI,GAAG;AAC1C,UAAM,UAAU,KAAK,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,qBACE;AAAA,IACF,wBAAwB;AAAA,IACxB,eAAe;AAAA,IACf,8BAA8B;AAAA,IAC9B,mBAAmB;AAAA,IACnB,uBAAuB;AAAA,IACvB,mBAAmB;AAAA,IACnB,qCACE;AAAA,EACJ;AACA,SAAO,SAAS,OAAO,KAAK;AAC9B;AAEO,SAAS,yBAAyB,OAAoB,WAA4B;AACvF,QAAM,OACJ,MAAM,YAAY,SAAS,MAAM,GAAG,MAAM,YAAY,MAAM,GAAG,GAAG,CAAC,QAAQ,MAAM;AACnF,MAAI,CAAC,UAAW,QAAO;AACvB,QAAM,SAAS,qBAAqB,MAAM,EAAE;AAC5C,SAAO,SAAS,GAAG,IAAI,IAAI,MAAM,KAAK;AACxC;AAEO,SAAS,sBACd,OACA,UAAmC,CAAC,GAC5B;AACR,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,wBACP,KACA,cACA,SACA,OACA,QACM;AACN,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,0BACd,KACA,WACA,SACM;AACN,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;;;AD9MA,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,gBACP,KACA,aACA,QACA,QACA,OACA,QACM;AACN,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,yBACP,KACA,aACA,WACA,WACA,OACA,QACM;AACN,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;AAAA,IACE;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF;AACA;AAAA,IACE;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF;AACF;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;;;AD5LO,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;AACF;AAEA,IAAM,wBAAwB;AAAA,EAC5B;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,WAChB,EAAE,QAAQ,SAAS,IACnB,YAAY,OAAO,aAAa,WAC9B,WACA,EAAE,QAAQ,OAAO,QAAQ,EAAE;AAAA,MACnC,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,SAAS;AAAA,IACX,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,aAAa;AAAA,UACf,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,gBAAgB,GAAG,mBAAmB,IAAI,oBAAoB;AACpE,UAAM,qBAAqB,GAAG,mBAAmB,IAAI,oBAAoB;AACzE,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,CAAC,SAAS,KAAK,KAAK,EAAE,SAAS,CAAC;AACnF,QAAI,cAAc;AAClB,QAAI,oBAAoB;AACxB,eAAW,CAAC,OAAO,IAAI,KAAK,WAAW,QAAQ,GAAG;AAChD,UAAI;AACF,cAAM,SAAS,qBAAqB,UAAU,KAAK,MAAM,IAAI,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,CAACH,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,UAAME,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,GAAGF,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,4BACP,KACA,UACA,0BAA0B,iCAC1B,UAAU,KACJ;AACN,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,MACE,4BAA4B,aAAa,oCAAoC,KAC7E,CAACC,aAAWD,OAAK,KAAK,4BAA4B,CAAC,GACnD;AACA,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,aAAa;AAAA,IACf,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,MAAI,CAAC,YAAY,WAAW,CAAC,6BAA6B,sBAAsB,uBAAuB,oBAAoB,eAAe,iBAAiB,CAAC,GAAG;AAC7J,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,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,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,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,IAAM,4BAA4B;AAAA,EAChC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;AAEA,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,aAAa;AAAA,IACf,CAAC;AAAA,EACH;AAEA,SAAO;AACT;AAEA,SAASK,iBAAgB,KAA0D;AACjF,QAAM,OAAON,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,MACE,WAAW,WAAW,QAAQ,KAC9B,QAAQ,SAAS,uBAAuB,iBAAiB,GAAG,KAC5D,QAAQ,SAAS,2BAA2B,GAC5C;AACA,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,cAAcM,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,UAAUJ,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,UAA0BO,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;;;AHvjDA,IAAM,oBAAoB,CAAC,SAAS,SAAS,QAAQ,WAAW,YAAY,YAAY,QAAQ,QAAQ,SAAS;AACjH,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,MAA8B;AAC9C,MAAI;AACF,WAAO,KAAK,MAAMC,cAAa,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,cAAa,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,MACZ,IAAI,CAAC,SAAS,KAAK,QAAQ,WAAW,EAAE,CAAC,EACzC,OAAO,CAAC,SAAS,CAAE,kBAAwC,SAAS,IAAI,CAAC;AAC5E,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,eAAS,KAAK;AAAA,QACZ,OAAO;AAAA,QACP,MAAM;AAAA,QACN,SAAS,0DAA0D,OAAO,MAAM,QAAQ,SAAS,CAAC;AAAA,QAClG,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,cAAa,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,cAAa,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,cAAa,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,kBACJE,aAAWD,OAAK,KAAK,cAAc,CAAC,KACpCC,aAAWD,OAAK,KAAK,KAAK,CAAC,KAC3BC,aAAWD,OAAK,KAAK,WAAW,CAAC;AAEnC,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,cAAa,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,cAAa,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,cAAa,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,cAAa,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;;;AatoBA,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,eAAe;AACxB,SAAqB,gBAAAG,sBAAoB;AACzC,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,KAAK,EAAE,OAAO,CAAC,KAAK,UAAU,MAAM,OAAO,CAAC;AAChF,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,CAAC,SAAS,KAAK,KAAK,CAAC,EACzB,OAAO,CAAC,SAAS,KAAK,WAAW,IAAI,KAAK,CAAC,KAAK,SAAS,eAAe,CAAC,EACzE,IAAI,CAAC,SAAS,KAAK,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,KAAK,EAAE,OAAO,CAAC,KAAK,UAAU,MAAM,OAAO,CAAC;AAE7E,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,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,wBAAsB,GAAG;AACzB,QAAM,aAAa,aAAa,QAAQ,KAAK;AAC7C,QAAM,QAAQ,oBAAoB,KAAK,UAAU;AACjD,QAAM,KAAK,QAAQ,MAAM,SAAS,QAAQ,IAAI,EAAE,MAAM,GAAG,EAAE;AAC3D,QAAM,OAAoC;AAAA,IACxC;AAAA,IACA,OAAO,QAAQ;AAAA,IACf,QAAQ,QAAQ,UAAU,sBAAsB,aAAa;AAAA,IAC7D,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;;;ACvIA,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,YAAM,SACJ,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,mBAAmB,MAAM,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,mBAAmBA,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,QAAMO,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,KAA6B;AACvD,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;AAUrB,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,IAAI,CAAC,SAAS,WAAW,WAAW,KAAK,KAAK,CAAC,YAAY,WAAW,KAAK,WAAW,KAAK,iBAAiB,KAAK,IAAI,KAAK,KAAK,CAAC,YAAY,WAAW,KAAK,IAAI,CAAC,YAAY,EAC7K,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,IAAI,CAAC,CAAC,OAAO,MAAM,MAAM,0CAA0C,WAAW,KAAK,CAAC,KAAK,OAAO,MAAM,uCAAuC,gBAAgB,MAAM,CAAC,kBAAkB,EACtL,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,UAAW,QAAO,GAAG,MAAM,eAAe,SAAS,OAAO,MAAM,aAAa,SAAS,KAAK,MAAM,YAAY,EAAE,UAAU,MAAM,QAAQ,EAAE;AAC5J,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,SAAS,QAAQ,IAAI,CAAC,UAAU,sBAAsB,WAAW,KAAK,CAAC,SAAS,EAAE,KAAK,EAAE,IAAI;AAC9G;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,EACxB,QAAQ,MAAM,SAAS,EACvB,QAAQ,MAAM,SAAS,EACvB,QAAQ,MAAM,SAAS;AAC5B;;;AChVA,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;AAIzB,SAAS,kBAAkB,QAA4B;AAC5D,QAAM,QAAQ;AAAA,IACZ,GAAG,YAAY,KAAK,eAAe;AAAA,IACnC;AAAA,IACA,oBAAoB,OAAO,OAAO,MAAM;AAAA,IACxC,cAAc,OAAO,UAAU,MAAM;AAAA,EACvC;AACA,MAAI,OAAO,UAAU,SAAS,GAAG;AAC/B,UAAM,KAAK,wBAAwB,OAAO,UAAU,MAAM,mCAA8B;AAAA,EAC1F;AACA,MAAI,OAAO,aAAa;AACtB,UAAM,KAAK,oBAAoB,OAAO,WAAW,EAAE;AAAA,EACrD;AACA,MAAI,OAAO,YAAY,UAAU,QAAQ;AACvC,UAAM,KAAK,mBAAmB,OAAO,WAAW,UAAU,KAAK,IAAI,CAAC,EAAE;AAAA,EACxE;AACA,MAAI,CAAC,GAAG,OAAO,QAAQ,GAAG,OAAO,SAAS,EAAE,KAAK,CAAC,SAAS,KAAK,SAAS,qBAAqB,CAAC,GAAG;AAChG,UAAM,KAAK,oDAAoD;AAAA,EACjE;AACA,QAAM,KAAK,IAAI,yEAAyE,0BAA0B;AAClH,SAAO,MAAM,KAAK,IAAI;AACxB;AAEA,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,CAAC,SAAS,KAAK,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;AAAA,MACvB,GAAG,KAAK;AAAA,MACR,EAAE,QAAQ,0BAA0B,MAAM,8DAA8D;AAAA,IAC1G,CAAC;AAAA,EACH;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,MACE,kBAAkB,oBAClB,kBAAkB,uBAClB,kBAAkB,2BAClB;AACA,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;;;AC/JA,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,WACEC,aAAWC,OAAK,KAAK,GAAG,CAAC,KACzBD,aAAWC,OAAK,KAAK,oCAAoC,CAAC;AAAA,EAE9D;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;;;ACpGO,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,gBACd,KACA,OACiB;AACjB,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;;;ACzHA,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;AAAA,EACzB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;AAEA,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;AAAA,IACpB;AAAA,MACE,GAAI,QAAQ;AAAA,QACV,UAAU;AAAA,QACV,WAAW;AAAA,QACX,UAAU;AAAA,QACV,OAAO;AAAA,QACP,UAAU,CAAC;AAAA,QACX,QAAQ,CAAC;AAAA,QACT,YAAY;AAAA,QACZ,cAAc;AAAA,QACd,aAAa,CAAC;AAAA,QACd,aAAa;AAAA,QACb,cAAc,CAAC;AAAA,MACjB;AAAA,MACA;AAAA,IACF;AAAA,EACF,EAAE,QAAQ,MAAM,SAAS;AAEzB,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,mEAAmE,uDAAuD;AAAA,QACrI,WAAW,KAAK,sFAAsF;AAAA;AAAA;AAAA,4BAGlF,WAAW,mBAAmB,EAAE;AAAA,gCAC5B,WAAW,YAAY,EAAE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,yCAMhB,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;;;AE/LO,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;AAAA,EACzB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;AAEA,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,EACzH,QAAQ,MAAM,SAAS;AAE1B,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,iCAsC9B,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;;;AThFA,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,KAAsC;AAC/D,+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,SAAO;AAAA,IACL,aAAa,UAAU;AAAA,IACvB,MAAM,qBAAqB,GAAG;AAAA,IAC9B,oBAAoB;AAAA,MAClB,UAAU,KAAK,eAAe,KAAK,KACjC,UAAU,KAAK,gBAAgB,KAAK,KACpC,UAAU,KAAK,iBAAiB,KAAK;AAAA,IACzC;AAAA,IACA,eAAe,UAAU;AAAA,IACzB,aAAa,UAAU;AAAA,IACvB;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,KAAK,EAAE,SAAS,EAAG,qBAAoB,KAAK,KAAK;AACjE,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,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,eAAS,UAAU,KAAK;AAAA,QACtB,GAAG,kBAAkB,GAAG;AAAA,QACxB,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;AAGJ,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,eAAS,UAAU,KAAK,EAAE,GAAG,QAAQ,YAAY,GAAG,kBAAkB,GAAG,EAAE,CAAC;AAAA,IAC9E,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,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;;;AU1YA,SAAS,aAA6B;AACtC,SAAS,gBAAAC,qBAA4E;AACrF,SAAS,QAAAC,cAAY;AAwBrB,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,eAAeE,eAAc,KAAa,SAA0B,UAAyC;AAC3G,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,IAAAJ,eAAc,QAAQ,KAAK,SAAS,QAAQ,EAAE,MAAM,CAAC,UAAU;AAC7D,MAAAJ,UAAS,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,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;;;AC9OA,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,UAAM,UAAU,YAAY,KAAK,EAAE,YAAY;AAC/C,UAAM,QAAQ,UAAU,IAAI,CAAC,SAAS,KAAK,KAAK,CAAC,EAAE,OAAO,OAAO;AACjE,QAAI,YAAY,SAAS;AACvB,iBAAW,QAAQ,OAAO;AACxB,cAAM,QAAQ,KAAK,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,QAAI,YAAY,aAAa;AAC3B,iBAAW,QAAQ,OAAO;AACxB,cAAM,QAAQ,KAAK,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,QAAI,YAAY,YAAY;AAC1B,iBAAW,QAAQ,OAAO;AACxB,cAAM,QAAQ,KAAK,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,QAAI,YAAY,WAAW;AACzB,iBAAW,QAAQ,OAAO;AACxB,cAAM,QAAQ,KAAK,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,QAAI,YAAY,WAAW;AACzB,UAAI,MAAM,KAAK,CAAC,SAAS,kBAAkB,KAAK,IAAI,CAAC,EAAG,SAAQ,SAAS;AACzE,UAAI,MAAM,KAAK,CAAC,SAAS,iBAAiB,KAAK,IAAI,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;;;AvC9JA,IAAM,UAAU,IAAI,QAAQ;AAC5B,IAAM,yBAAyB,CAAC,WAAW,WAAW,YAAY,gBAAgB;AAGlF,SAAS,uBAAuB,OAA8C;AAC5E,SAAO,uBAAuB,SAAS,KAA6B;AACtE;AAEA,QACG,KAAK,WAAW,EAChB,YAAY,kEAAkE,EAC9E,QAAQ,eAAe;AAE1B,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;AAAA,MACN,QAAQ,OAAO,aAAa;AAAA,IAC9B;AACA,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,aAAY,GAAG,OAAO,GAAG,GAAG;AAC9C,QAAM,IAAI,QAAc,CAACC,aAAY;AACnC,UAAM,WAAW,MAAM;AACrB,aAAO,MAAM,EAAE,QAAQA,QAAO;AAAA,IAChC;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,0EAA0E,EAC7F,OAAO,UAAU,qCAAqC,EACtD,OAAO,WAAW,uCAAuC,EACzD,OAAO,cAAc,4CAA4C,EACjE,OAAO,UAAU,gDAAgD,EACjE,OAAO,OAAO,YAST;AACJ,QAAM,MAAM,QAAQ,IAAI;AACxB,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;AAED,MAAI,QAAQ,MAAM;AAChB,YAAQ,IAAI,KAAK,UAAU,QAAQ,MAAM,CAAC,CAAC;AAAA,EAC7C,OAAO;AACL,YAAQ,IAAI,kBAAkB,MAAM,CAAC;AAAA,EACvC;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,QAAMC,UAAS,kBAAkB,QAAQ,IAAI,CAAC;AAC9C,MAAI;AACJ,MAAI,QAAQ,cAAc;AACxB,QAAI,CAAC,sBAAsB,QAAQ,YAAY,GAAG;AAChD,cAAQ,MAAM,kCAAkC,QAAQ,YAAY,uBAAuB,gBAAgB,KAAK,IAAI,CAAC,GAAG;AACxH,cAAQ,WAAW;AACnB;AAAA,IACF;AACA,uBAAmB,QAAQ;AAAA,EAC7B;AAEA,MAAI,QAAQ,MAAM;AAChB,YAAQ,IAAI,KAAK,UAAUA,SAAQ,MAAM,CAAC,CAAC;AAAA,EAC7C,OAAO;AACL,YAAQ,IAAI,aAAaA,QAAO,UAAU,KAAK,KAAKA,QAAO,UAAU,OAAO,EAAE;AAC9E,YAAQ,IAAI,gBAAgBA,QAAO,QAAQ,IAAI,SAASA,QAAO,QAAQ,IAAI,SAASA,QAAO,QAAQ,IAAI,EAAE;AACzG,QAAIA,QAAO,UAAU,YAAY,SAAS,GAAG;AAC3C,cAAQ,IAAI,cAAc;AAC1B,iBAAW,UAAUA,QAAO,UAAU,YAAa,SAAQ,IAAI,KAAK,MAAM,EAAE;AAAA,IAC9E;AACA,YAAQ,IAAI,EAAE;AACd,eAAW,WAAWA,QAAO,UAAU;AACrC,YAAM,SAAS,QAAQ,MAAM,YAAY,EAAE,OAAO,CAAC;AACnD,cAAQ,IAAI,GAAG,MAAM,IAAI,QAAQ,IAAI,KAAK,QAAQ,OAAO,EAAE;AAC3D,UAAI,QAAQ,YAAa,SAAQ,IAAI,qBAAqB,QAAQ,WAAW,EAAE;AAAA,IACjF;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,MAAM;AACZ,UAAQ,IAAI,KAAK,UAAU,YAAY,QAAQ,IAAI,CAAC,GAAG,MAAM,CAAC,CAAC;AACjE,CAAC;AAEH,QACG,QAAQ,QAAQ,EAChB,YAAY,oEAAoE,EAChF,OAAO,WAAW,uBAAuB,EACzC,OAAO,CAAC,YAAiC;AACxC,QAAM,SAAS,YAAY,EAAE,KAAK,QAAQ,IAAI,GAAG,OAAO,QAAQ,QAAQ,KAAK,EAAE,CAAC;AAChF,UAAQ,IAAI,KAAK,UAAU,QAAQ,MAAM,CAAC,CAAC;AAC7C,CAAC;AAEH,IAAM,aAAa,QAAQ,QAAQ,KAAK,EAAE,YAAY,0BAA0B;AAChF,WACG,QAAQ,cAAc,EACtB,YAAY,4CAA4C,EACxD,OAAO,WAAW,2BAA2B,EAC7C,OAAO,CAAC,MAAc,YAAiC;AACtD,UAAQ,IAAI,SAAS,QAAQ,IAAI,GAAG,MAAM,EAAE,OAAO,QAAQ,QAAQ,KAAK,EAAE,CAAC,CAAC;AAC9E,CAAC;AAEH,QACG,QAAQ,QAAQ,EAChB,YAAY,2CAA2C,EACvD,OAAO,MAAM;AACZ,QAAM,MAAM,QAAQ,IAAI;AACxB,UAAQ,IAAI,kBAAkB;AAC9B,UAAQ,IAAI,SAAS,QAAQ,OAAO,EAAE;AACtC,UAAQ,IAAI,qBAAqB,WAAW,EAAE,MAAM,EAAE;AACtD,MAAI,sBAAsB,GAAG,GAAG;AAC9B,UAAM,WAAW,iBAAiB,GAAG;AACrC,YAAQ,IAAI,mBAAmB,SAAS,OAAO,aAAa,SAAS,KAAK,GAAG;AAC7E,QAAI,CAAC,SAAS,eAAe;AAC3B,cAAQ,IAAI,uEAAuE;AAAA,IACrF;AAAA,EACF,OAAO;AACL,YAAQ,IAAI,uEAAuE;AAAA,EACrF;AACA,UAAQ,IAAI,YAAY;AAC1B,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,MAAM;AACZ,UAAQ,IAAI,KAAK,UAAU,mBAAmB,QAAQ,IAAI,CAAC,GAAG,MAAM,CAAC,CAAC;AACxE,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,MAAM;AACZ,UAAQ,IAAI,KAAK,UAAU,mBAAmB,QAAQ,IAAI,CAAC,GAAG,MAAM,CAAC,CAAC;AACxE,CAAC;AAEH,QACG,QAAQ,MAAM,EACd,YAAY,oDAAoD,EAChE,OAAO,MAAM;AACZ,UAAQ,IAAI,KAAK,UAAU,mBAAmB,QAAQ,IAAI,CAAC,GAAG,MAAM,CAAC,CAAC;AACxE,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,YAAQ,IAAI,oCAAoC;AAChD;AAAA,EACF;AACA,UAAQ,IAAI,mEAAmE;AAC/E,UAAQ,IAAI,+CAA+C;AAC3D,aAAW,YAAY,OAAO,cAAe,SAAQ,IAAI,KAAK,QAAQ,EAAE;AAC1E,CAAC;AAEH,QACG,QAAQ,QAAQ,EAChB,YAAY,iEAAiE,EAC7E,OAAO,MAAM;AACZ,UAAQ,IAAI,KAAK,UAAU,qBAAqB,QAAQ,IAAI,CAAC,GAAG,MAAM,CAAC,CAAC;AAC1E,CAAC;AAEH,QACG,QAAQ,UAAU,EAClB,YAAY,2CAA2C,EACvD,OAAO,MAAM;AACZ,UAAQ,IAAI,KAAK,UAAU,uBAAuB,QAAQ,IAAI,CAAC,GAAG,MAAM,CAAC,CAAC;AAC5E,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,CAAC,YAAsB,YAAoD;AACjF,QAAM,QAAQ,WAAW,KAAK,GAAG;AACjC,UAAQ;AAAA,IACN,KAAK;AAAA,MACH,aAAa,QAAQ,IAAI,GAAG;AAAA,QAC1B;AAAA,QACA,YAAY,QAAQ;AAAA,QACpB,GAAI,QAAQ,UAAU,EAAE,SAAS,QAAQ,QAAQ,IAAI,CAAC;AAAA,MACxD,CAAC;AAAA,MACD;AAAA,MACA;AAAA,IACF;AAAA,EACF;AACF,CAAC;AAEH,QACG,QAAQ,MAAM,EACd,YAAY,8BAA8B,EAC1C,OAAO,MAAM;AACZ,UAAQ,IAAI,KAAK,UAAU,aAAa,QAAQ,IAAI,CAAC,GAAG,MAAM,CAAC,CAAC;AAClE,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,CAAC,WAAqB,YAA+B;AAC3D,UAAQ,IAAI,KAAK,UAAU,WAAW,QAAQ,IAAI,GAAG,QAAQ,OAAO,UAAU,KAAK,GAAG,CAAC,GAAG,MAAM,CAAC,CAAC;AACpG,CAAC;AAEH,QACG,QAAQ,oBAAoB,EAC5B,YAAY,2BAA2B,EACvC,eAAe,mBAAmB,WAAW,EAC7C,OAAO,iBAAiB,oCAAoC,EAC5D,OAAO,CAAC,WAAqB,YAA8C;AAC1E,UAAQ,IAAI,KAAK,UAAU,eAAe,QAAQ,IAAI,GAAG,QAAQ,OAAO,UAAU,KAAK,GAAG,GAAG,QAAQ,IAAI,GAAG,MAAM,CAAC,CAAC;AACtH,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,CAAC,YAA+F;AACtG,UAAQ;AAAA,IACN,KAAK;AAAA,MACH,cAAc,QAAQ,IAAI,GAAG;AAAA,QAC3B,aAAa,QAAQ;AAAA,QACrB,WAAW,QAAQ;AAAA,QACnB,UAAU,QAAQ;AAAA,QAClB,MAAM,QAAQ;AAAA,QACd,GAAI,QAAQ,WAAW,EAAE,UAAU,QAAQ,SAAS,IAAI,CAAC;AAAA,MAC3D,CAAC;AAAA,MACD;AAAA,MACA;AAAA,IACF;AAAA,EACF;AACF,CAAC;AAEH,QACG,QAAQ,mBAAmB,EAC3B,YAAY,uEAAuE,EACnF,OAAO,mBAAmB,WAAW,EACrC,OAAO,mBAAmB,iEAAiE,SAAS,EACpG,OAAO,CAAC,WAAqB,YAA8F;AAC1H,UAAQ;AAAA,IACN,KAAK;AAAA,MACH,iBAAiB,QAAQ,IAAI,GAAG;AAAA,QAC9B,GAAI,QAAQ,QAAQ,EAAE,SAAS,QAAQ,MAAM,IAAI,CAAC;AAAA,QAClD,OAAO,QAAQ;AAAA,QACf,MAAM,UAAU,KAAK,GAAG;AAAA,MAC1B,CAAC;AAAA,MACD;AAAA,MACA;AAAA,IACF;AAAA,EACF;AACF,CAAC;AAEH,QACG,QAAQ,UAAU,EAClB,YAAY,6CAA6C,EACzD,eAAe,iBAAiB,qBAAqB,EACrD,OAAO,iBAAiB,gBAAgB,EACxC,OAAO,CAAC,YAA6C;AACpD,UAAQ,IAAI,KAAK,UAAU,eAAe,QAAQ,IAAI,GAAG,QAAQ,MAAM,QAAQ,IAAI,GAAG,MAAM,CAAC,CAAC;AAChG,CAAC;AAEH,QACG,QAAQ,QAAQ,EAChB,YAAY,+BAA+B,EAC3C,eAAe,uBAAuB,8BAA8B,EACpE,eAAe,qBAAqB,yBAAyB,EAC7D,OAAO,mBAAmB,qBAAqB,EAC/C,OAAO,CAAC,YAAsF;AAC7F,UAAQ,IAAI,KAAK,UAAU,mBAAmB,QAAQ,IAAI,GAAG,QAAQ,SAAS,QAAQ,QAAQ,QAAQ,KAAK,GAAG,MAAM,CAAC,CAAC;AACxH,CAAC;AAEH,QACG,QAAQ,kBAAkB,EAC1B,YAAY,wCAAwC,EACpD,eAAe,qBAAqB,gDAAgD,EACpF,OAAO,yBAAyB,kCAAkC,EAClE,OAAO,CAAC,WAAqB,YAAmD;AAC/E,MAAI,CAAC,uBAAuB,QAAQ,MAAM,GAAG;AAC3C,YAAQ,MAAM,2BAA2B,QAAQ,MAAM,uBAAuB,uBAAuB,KAAK,IAAI,CAAC,GAAG;AAClH,YAAQ,WAAW;AACnB;AAAA,EACF;AACA,UAAQ,IAAI,KAAK,UAAU,qBAAqB,QAAQ,IAAI,GAAG,UAAU,KAAK,GAAG,GAAG,QAAQ,QAAQ,QAAQ,QAAQ,GAAG,MAAM,CAAC,CAAC;AACjI,CAAC;AAEH,QACG,QAAQ,QAAQ,EAChB,YAAY,uCAAuC,EACnD,OAAO,MAAM;AACZ,UAAQ,IAAI,KAAK,UAAU,oBAAoB,QAAQ,IAAI,CAAC,GAAG,MAAM,CAAC,CAAC;AACzE,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,CAAC,YAA4E;AACnF,UAAQ,IAAI,KAAK,UAAU,aAAa,QAAQ,IAAI,GAAG,QAAQ,MAAM,GAAG,MAAM,CAAC,CAAC;AAClF,CAAC;AAEH,IAAM,aAAa,QAAQ,QAAQ,YAAY,EAAE,YAAY,+CAA+C;AAE5G,WACG,QAAQ,MAAM,EACd,YAAY,wBAAwB,EACpC,OAAO,MAAM;AACZ,UAAQ,IAAI,KAAK,UAAU,gBAAgB,QAAQ,IAAI,CAAC,GAAG,MAAM,CAAC,CAAC;AACrE,CAAC;AAEH,WACG,QAAQ,eAAe,EACvB,YAAY,gCAAgC,EAC5C,OAAO,mBAAmB,2DAA2D,SAAS,EAC9F,OAAO,mBAAmB,wCAAwC,EAClE,OAAO,CAAC,WAAqB,YAAkF;AAC9G,UAAQ;AAAA,IACN,KAAK;AAAA,MACH,cAAc,QAAQ,IAAI,GAAG;AAAA,QAC3B,OAAO,QAAQ;AAAA,QACf,GAAI,QAAQ,QAAQ,EAAE,SAAS,QAAQ,MAAM,IAAI,CAAC;AAAA,QAClD,MAAM,UAAU,KAAK,GAAG;AAAA,MAC1B,CAAC;AAAA,MACD;AAAA,MACA;AAAA,IACF;AAAA,EACF;AACF,CAAC;AAEH,WACG,QAAQ,YAAY,EACpB,YAAY,6CAA6C,EACzD,OAAO,aAAa,gBAAgB,EACpC,OAAO,CAAC,YAAgC,YAA6B;AACpE,QAAM,KAAK,cAAc,QAAQ;AACjC,MAAI,CAAC,IAAI;AACP,YAAQ,MAAM,0EAA0E;AACxF,YAAQ,WAAW;AACnB;AAAA,EACF;AACA,UAAQ,IAAI,KAAK,UAAU,gBAAgB,QAAQ,IAAI,GAAG,EAAE,GAAG,MAAM,CAAC,CAAC;AACzE,CAAC;AAEH,WACG,QAAQ,aAAa,EACrB,YAAY,2BAA2B,EACvC,eAAe,qBAAqB,wBAAwB,EAC5D,OAAO,CAAC,IAAY,YAAgC;AACnD,UAAQ,IAAI,KAAK,UAAU,iBAAiB,QAAQ,IAAI,GAAG,IAAI,QAAQ,MAAM,GAAG,MAAM,CAAC,CAAC;AAC1F,CAAC;AAEH,WACG,QAAQ,uBAAuB,EAC/B,YAAY,iEAAiE,EAC7E,OAAO,CAAC,OAAe;AACtB,UAAQ,IAAI,KAAK,UAAU,0BAA0B,QAAQ,IAAI,GAAG,EAAE,GAAG,MAAM,CAAC,CAAC;AACnF,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;AAAA,MACN,QAAQ,OAAO,aAAa,yCAAoC,OAAO,IAAI;AAAA,IAC7E;AAAA,EACF;AACA,UAAQ,IAAI,cAAc,eAAe,0BAAqB,OAAO,GAAG,GAAG;AAC3E,UAAQ,IAAI,uDAAuD;AACnE,MAAI,QAAQ,KAAM,aAAY,GAAG,OAAO,GAAG,GAAG;AAC9C,QAAM,IAAI,QAAc,CAACD,aAAY;AACnC,UAAM,WAAW,MAAM;AACrB,aAAO,MAAM,EAAE,QAAQA,QAAO;AAAA,IAChC;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,MAAM;AACZ,UAAQ,IAAI,KAAK,UAAU,mBAAmB,QAAQ,IAAI,CAAC,GAAG,MAAM,CAAC,CAAC;AACxE,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,UAAQ,MAAM,iBAAiB,QAAQ,MAAM,UAAU,OAAO,KAAK,CAAC;AACpE,UAAQ,WAAW;AACrB,CAAC;","names":["existsSync","join","existsSync","dirname","join","resolve","join","existsSync","existsSync","readFileSync","join","existsSync","readFileSync","basename","dirname","join","join","existsSync","readFileSync","dirname","basename","existsSync","readFileSync","join","context","existsSync","join","existsSync","readFileSync","join","join","existsSync","readFileSync","context","context","existsSync","join","existsSync","readFileSync","join","existsSync","readFileSync","join","existsSync","readFileSync","readdirSync","join","existsSync","readFileSync","join","join","existsSync","readFileSync","join","existsSync","readFileSync","readdirSync","join","existsSync","readFileSync","adapter","join","existsSync","readFileSync","adapter","context","join","existsSync","readFileSync","join","existsSync","readFileSync","sessionDir","eventsPath","session","readPackageJson","summary","readFileSync","isRecord","join","existsSync","existsSync","readFileSync","join","existsSync","readFileSync","join","readFileSync","join","z","join","readFileSync","existsSync","mkdirSync","readFileSync","join","existsSync","readFileSync","join","join","existsSync","readFileSync","join","existsSync","readFileSync","mkdirSync","existsSync","readFileSync","readdirSync","join","join","existsSync","readdirSync","readFileSync","summary","existsSync","readFileSync","readdirSync","statSync","join","session","join","existsSync","readdirSync","statSync","readFileSync","correction","context","session","resolve","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","resolve","createServer","join","DEFAULT_PORT","DEFAULT_HOST","sendJson","sendHtml","eventsPath","join","handleRequest","session","listen","resolve","createServer","existsSync","readFileSync","join","readFileSync","correction","join","existsSync","resolve","report"]}
|