@brainst0rm/cli 0.13.0 → 0.14.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (57) hide show
  1. package/dist/{App-SSKWB7CT.js → App-HGJSYIVS.js} +133 -62
  2. package/dist/App-HGJSYIVS.js.map +1 -0
  3. package/dist/{App-DPXJYXKH.js → App-XCJW3A4I.js} +133 -62
  4. package/dist/App-XCJW3A4I.js.map +1 -0
  5. package/dist/brainstorm.js +1428 -150
  6. package/dist/brainstorm.js.map +1 -1
  7. package/dist/{chunk-7D4SUZUM.js → chunk-PR4QN5HX.js} +6 -1
  8. package/dist/{chunk-ZWE3DS7E.js → chunk-SEGVTWSK.js} +6 -1
  9. package/dist/{chunk-5NA3GH6X.js → chunk-WYQU3HAB.js} +175 -10
  10. package/dist/chunk-WYQU3HAB.js.map +1 -0
  11. package/dist/{chunk-55ITCWZZ.js → chunk-Z2QIGVYT.js} +175 -10
  12. package/dist/chunk-Z2QIGVYT.js.map +1 -0
  13. package/dist/{dist-GNHTH2DH.js → dist-3BC75XHW.js} +2 -2
  14. package/dist/dist-42TQFHMB.js +1640 -0
  15. package/dist/dist-42TQFHMB.js.map +1 -0
  16. package/dist/dist-BULARAL3.js +7308 -0
  17. package/dist/dist-BULARAL3.js.map +1 -0
  18. package/dist/{dist-JUDVPE7G.js → dist-ET6CSS7O.js} +2 -2
  19. package/dist/{dist-DUDO3RDM.js → dist-GVK5Q4YK.js} +62 -16
  20. package/dist/{dist-V5DTSTKJ.js.map → dist-GVK5Q4YK.js.map} +1 -1
  21. package/dist/{dist-V5DTSTKJ.js → dist-K7BDAMTO.js} +62 -16
  22. package/dist/{dist-DUDO3RDM.js.map → dist-K7BDAMTO.js.map} +1 -1
  23. package/dist/{dist-WLTQTLFO.js → dist-OYQTULIU.js} +2 -2
  24. package/dist/dist-S5JYXFUW.js +7307 -0
  25. package/dist/dist-S5JYXFUW.js.map +1 -0
  26. package/dist/{dist-YIGU37Q2.js → dist-Y25MC2VO.js} +2 -2
  27. package/dist/dist-Z4SBSK4Q.js +1639 -0
  28. package/dist/dist-Z4SBSK4Q.js.map +1 -0
  29. package/dist/index.js +1428 -150
  30. package/dist/index.js.map +1 -1
  31. package/dist/mcp-server-CROPNYHI.js +4252 -0
  32. package/dist/mcp-server-CROPNYHI.js.map +1 -0
  33. package/dist/mcp-server-IJVEG6CS.js +4251 -0
  34. package/dist/mcp-server-IJVEG6CS.js.map +1 -0
  35. package/dist/{recorder-D6ILEOZP.js → recorder-33N4U6TO.js} +2 -2
  36. package/dist/{recorder-SPYYF4DL.js → recorder-APOOXJYA.js} +2 -2
  37. package/dist/{roles-2DGF4PZU.js → roles-GKDCLP5G.js} +2 -2
  38. package/dist/{roles-UIPX7GBC.js → roles-UUIISXEW.js} +2 -2
  39. package/dist/{slash-PDWKCZOQ.js → slash-4XSR3SJD.js} +3 -3
  40. package/dist/{slash-ZDC4DKL4.js → slash-CVWH3LTR.js} +3 -3
  41. package/package.json +4 -2
  42. package/dist/App-DPXJYXKH.js.map +0 -1
  43. package/dist/App-SSKWB7CT.js.map +0 -1
  44. package/dist/chunk-55ITCWZZ.js.map +0 -1
  45. package/dist/chunk-5NA3GH6X.js.map +0 -1
  46. /package/dist/{chunk-7D4SUZUM.js.map → chunk-PR4QN5HX.js.map} +0 -0
  47. /package/dist/{chunk-ZWE3DS7E.js.map → chunk-SEGVTWSK.js.map} +0 -0
  48. /package/dist/{dist-GNHTH2DH.js.map → dist-3BC75XHW.js.map} +0 -0
  49. /package/dist/{dist-JUDVPE7G.js.map → dist-ET6CSS7O.js.map} +0 -0
  50. /package/dist/{dist-WLTQTLFO.js.map → dist-OYQTULIU.js.map} +0 -0
  51. /package/dist/{dist-YIGU37Q2.js.map → dist-Y25MC2VO.js.map} +0 -0
  52. /package/dist/{recorder-D6ILEOZP.js.map → recorder-33N4U6TO.js.map} +0 -0
  53. /package/dist/{recorder-SPYYF4DL.js.map → recorder-APOOXJYA.js.map} +0 -0
  54. /package/dist/{roles-2DGF4PZU.js.map → roles-GKDCLP5G.js.map} +0 -0
  55. /package/dist/{roles-UIPX7GBC.js.map → roles-UUIISXEW.js.map} +0 -0
  56. /package/dist/{slash-PDWKCZOQ.js.map → slash-4XSR3SJD.js.map} +0 -0
  57. /package/dist/{slash-ZDC4DKL4.js.map → slash-CVWH3LTR.js.map} +0 -0
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/bin/brainstorm.ts","../src/init/detect.ts","../src/init/prompts.ts","../src/init/generate.ts","../src/init/templates.ts","../src/init/index.ts"],"sourcesContent":["import { Command } from \"commander\";\nimport { loadConfig } from \"@brainst0rm/config\";\nimport { getDb, closeDb, CostRepository } from \"@brainst0rm/db\";\nimport {\n createProviderRegistry,\n getBrainstormApiKey,\n isCommunityKey,\n} from \"@brainst0rm/providers\";\nimport { BrainstormRouter, CostTracker } from \"@brainst0rm/router\";\nimport {\n createDefaultToolRegistry,\n configureSandbox,\n stopDockerSandbox,\n} from \"@brainst0rm/tools\";\nimport {\n runAgentLoop,\n buildSystemPrompt,\n buildToolAwarenessSection,\n SessionManager,\n PermissionManager,\n createSubagentTool,\n spawnSubagent,\n spawnParallel,\n createDefaultMiddlewarePipeline,\n type CompactionCallbacks,\n} from \"@brainst0rm/core\";\nimport type { OutputStyle } from \"@brainst0rm/core\";\nimport { AgentManager, parseAgentNL } from \"@brainst0rm/agents\";\nimport { ROLES, type RoleId } from \"../commands/roles.js\";\nimport {\n runWorkflow,\n getPresetWorkflow,\n autoSelectPreset,\n PRESET_WORKFLOWS,\n} from \"@brainst0rm/workflow\";\nimport { renderMarkdownToString } from \"../components/MarkdownRenderer.js\";\nimport { runInit } from \"../init/index.js\";\nimport { runEvalCli, runProbe } from \"@brainst0rm/eval\";\nimport {\n createGatewayClient,\n createIntelligenceClient,\n formatGatewayFeedback,\n} from \"@brainst0rm/gateway\";\nimport { MCPClientManager } from \"@brainst0rm/mcp\";\nimport { BrainstormVault, KeyResolver } from \"@brainst0rm/vault\";\nimport { createInterface } from \"node:readline\";\nimport { homedir } from \"node:os\";\nimport { join } from \"node:path\";\nimport type { ResolvedKeys } from \"@brainst0rm/providers\";\n\n/** Known API key names that providers need at startup. */\nconst PROVIDER_KEY_NAMES = [\n \"BRAINSTORM_API_KEY\",\n \"ANTHROPIC_API_KEY\",\n \"OPENAI_API_KEY\",\n \"GOOGLE_GENERATIVE_AI_API_KEY\",\n \"DEEPSEEK_API_KEY\",\n \"MOONSHOT_API_KEY\",\n \"BRAINSTORM_ADMIN_KEY\",\n];\n\n/**\n * Eagerly resolve all provider keys through the vault/1Password/env chain.\n * Triggers the lazy vault password prompt if a vault exists and keys are needed.\n * Returns a sync ResolvedKeys map for createProviderRegistry.\n */\nasync function resolveProviderKeys(): Promise<ResolvedKeys> {\n const vault = new BrainstormVault(VAULT_PATH);\n const resolver = new KeyResolver(vault.exists() ? vault : null, () =>\n promptPassword(\" Vault password: \"),\n );\n\n const resolved = new Map<string, string>();\n for (const name of PROVIDER_KEY_NAMES) {\n const value = await resolver.get(name);\n if (value) resolved.set(name, value);\n }\n\n return { get: (name: string) => resolved.get(name) ?? null };\n}\n\nfunction buildCompactionCallbacks(\n sessionManager: SessionManager,\n): CompactionCallbacks {\n return {\n getTokenEstimate: () => sessionManager.getTokenEstimate(),\n compact: (opts) => sessionManager.compact(opts),\n };\n}\n\n/**\n * Connect to MCP servers from config + BrainstormRouter gateway.\n * Loads user-configured servers from config.mcp.servers (populated from\n * config.toml and .brainstorm/mcp.json), plus the built-in gateway server.\n */\nasync function connectMCPServers(\n tools: ReturnType<typeof createDefaultToolRegistry>,\n config: ReturnType<typeof loadConfig>,\n resolvedBRKey?: string | null,\n): Promise<void> {\n const mcp = new MCPClientManager();\n\n // User-configured MCP servers from config.toml / .brainstorm/mcp.json\n if (config.mcp.servers.length > 0) {\n mcp.addServers(\n config.mcp.servers.map((s) => ({\n name: s.name,\n transport: s.transport,\n url: s.url ?? \"\",\n command: s.command,\n args: s.args,\n env: s.env,\n enabled: s.enabled,\n toolFilter: s.toolFilter,\n })),\n );\n }\n\n // BrainstormRouter intelligence tools are built-in natively\n // (br_status, br_budget, etc.). MCP is used for user-configured servers.\n // Tool definitions are validated before registration (see mcp/client.ts).\n\n const { connected, errors } = await mcp.connectAll(tools);\n if (connected.length > 0) {\n process.stderr.write(`[mcp] Connected: ${connected.join(\", \")}\\n`);\n }\n for (const err of errors) {\n process.stderr.write(`[mcp] ${err.name}: ${err.error}\\n`);\n }\n}\n\nconst program = new Command();\n\n// Read version from package.json at runtime (stays in sync with bump-version.mjs)\nimport { readFileSync as readFileSyncVersion } from \"node:fs\";\nimport { dirname as dirnameVersion } from \"node:path\";\nimport { fileURLToPath as fileURLToPathVersion } from \"node:url\";\nconst __pkg_dir = join(\n dirnameVersion(fileURLToPathVersion(import.meta.url)),\n \"..\",\n);\nlet CLI_VERSION = \"0.12.1\";\ntry {\n CLI_VERSION = JSON.parse(\n readFileSyncVersion(join(__pkg_dir, \"package.json\"), \"utf-8\"),\n ).version;\n} catch {\n /* fallback */\n}\n\nprogram\n .name(\"brainstorm\")\n .description(\"AI coding assistant with intelligent model routing\")\n .version(CLI_VERSION);\n\nprogram\n .command(\"init\")\n .description(\"Initialize project for AI-assisted development\")\n .option(\"--yes\", \"Use defaults, skip prompts\")\n .option(\"--force\", \"Overwrite existing files\")\n .action(async (opts: { yes?: boolean; force?: boolean }) => {\n await runInit(process.cwd(), opts);\n });\n\nprogram\n .command(\"eval\")\n .description(\"Run capability evaluation probes against a model\")\n .option(\n \"--model <id>\",\n \"Model to evaluate (e.g., anthropic/claude-sonnet-4-6)\",\n )\n .option(\"--capability <dim>\", \"Run only probes for this dimension\")\n .option(\"--compare\", \"Compare results across all previously evaluated models\")\n .option(\n \"--scorecard\",\n \"Show current capability scores without re-running probes\",\n )\n .option(\"--all-models\", \"Run probes against every available model\")\n .option(\"--timeout <ms>\", \"Timeout per probe in milliseconds\", \"30000\")\n .action(\n async (opts: {\n model?: string;\n capability?: string;\n compare?: boolean;\n scorecard?: boolean;\n allModels?: boolean;\n timeout?: string;\n }) => {\n await runEvalCli({\n model: opts.model,\n capability: opts.capability,\n compare: opts.compare,\n scorecard: opts.scorecard,\n allModels: opts.allModels,\n timeout: parseInt(opts.timeout ?? \"30000\"),\n });\n },\n );\n\n// ── SWE-bench Eval Command ────────────────────────────────────────\n\nprogram\n .command(\"eval-swe-bench\")\n .description(\n \"Run SWE-bench evaluation: apply agent to instances, score with Docker\",\n )\n .requiredOption(\n \"--instances <path>\",\n \"Path to SWE-bench instances.jsonl file\",\n )\n .option(\"--model <id>\", \"Target model (default: let router decide)\")\n .option(\"--limit <n>\", \"Max instances to evaluate\", \"10\")\n .option(\"--concurrency <n>\", \"Parallel evaluations\", \"2\")\n .option(\"--json\", \"Output results as JSON\")\n .action(\n async (opts: {\n instances: string;\n model?: string;\n limit: string;\n concurrency: string;\n json?: boolean;\n }) => {\n const { loadInstances, runSWEBench, scorePatch, generateScorecard } =\n await import(\"@brainst0rm/eval\");\n\n const limit = parseInt(opts.limit);\n const concurrency = parseInt(opts.concurrency);\n\n console.log(`\\n SWE-bench Evaluation`);\n console.log(` ─────────────────────\\n`);\n console.log(` Instances: ${opts.instances}`);\n console.log(` Limit: ${limit}`);\n console.log(` Model: ${opts.model ?? \"auto (router decides)\"}`);\n console.log(` Concurrency: ${concurrency}\\n`);\n\n // Load instances\n const instances = loadInstances(opts.instances, limit);\n console.log(` Loaded ${instances.length} instances.\\n`);\n\n if (instances.length === 0) {\n console.error(\" No instances found in file.\");\n process.exit(1);\n }\n\n // Set up agent infrastructure (needed for spawnSubagent)\n const config = loadConfig();\n config.general.defaultPermissionMode = \"auto\"; // unattended\n const db = getDb();\n const resolvedKeys = await resolveProviderKeys();\n const registry = await createProviderRegistry(config, resolvedKeys);\n const costTracker = new CostTracker(db, config.budget);\n const tools = createDefaultToolRegistry();\n const { frontmatter } = buildSystemPrompt(process.cwd());\n const router = new BrainstormRouter(\n config,\n registry,\n costTracker,\n frontmatter,\n );\n if (opts.model) {\n // Force specific model if requested\n } else {\n router.setStrategy(\"quality-first\");\n }\n\n const { execFileSync: execGit } = await import(\"node:child_process\");\n const {\n mkdtempSync,\n writeFileSync: writePatch,\n rmSync,\n } = await import(\"node:fs\");\n const { tmpdir } = await import(\"node:os\");\n\n let completed = 0;\n\n // Run agent on each instance — REAL implementation\n console.log(` Running agent on ${instances.length} instances...\\n`);\n const patches = await runSWEBench(\n instances,\n async (instance: any) => {\n const startTime = Date.now();\n const instanceNum = ++completed;\n const shortId = instance.instanceId.slice(0, 40);\n\n try {\n // 1. Create isolated workspace\n const workDir = mkdtempSync(join(tmpdir(), \"swe-bench-\"));\n const repoDir = join(workDir, \"repo\");\n\n try {\n // 2. Clone repo at baseCommit\n process.stderr.write(\n ` [${instanceNum}/${instances.length}] ${shortId} — cloning...`,\n );\n execGit(\n \"git\",\n [\n \"clone\",\n \"--depth\",\n \"100\",\n `https://github.com/${instance.repo}.git`,\n \"repo\",\n ],\n {\n cwd: workDir,\n timeout: 120000,\n stdio: [\"ignore\", \"pipe\", \"pipe\"],\n },\n );\n execGit(\"git\", [\"checkout\", instance.baseCommit], {\n cwd: repoDir,\n timeout: 30000,\n stdio: [\"ignore\", \"pipe\", \"pipe\"],\n });\n\n // 3. Run Brainstorm agent on the issue\n process.stderr.write(` solving...`);\n const issuePrompt = [\n `You are solving a GitHub issue in this repository.`,\n ``,\n `## Problem`,\n instance.issue,\n instance.hints ? `\\n## Hints\\n${instance.hints}` : \"\",\n ``,\n `## Instructions`,\n `1. Read the relevant source files to understand the codebase`,\n `2. Identify the root cause of the issue`,\n `3. Make the minimal code changes needed to fix it`,\n `4. Do NOT modify test files`,\n `5. Verify your changes make sense by re-reading the modified files`,\n ].join(\"\\n\");\n\n const result = await spawnSubagent(issuePrompt, {\n config,\n registry,\n router,\n costTracker,\n tools,\n projectPath: repoDir,\n type: \"code\",\n maxSteps: 15,\n budgetLimit: 3.0,\n permissionCheck: () => \"allow\", // unattended — auto-approve everything\n });\n\n // 4. Capture the diff (what the agent actually changed)\n let patch = \"\";\n try {\n patch = execGit(\"git\", [\"diff\"], {\n cwd: repoDir,\n encoding: \"utf-8\",\n timeout: 10000,\n stdio: [\"ignore\", \"pipe\", \"pipe\"],\n }) as unknown as string;\n\n // Also capture any new untracked files\n const untrackedDiff = execGit(\"git\", [\"diff\", \"--cached\"], {\n cwd: repoDir,\n encoding: \"utf-8\",\n timeout: 10000,\n stdio: [\"ignore\", \"pipe\", \"pipe\"],\n }) as unknown as string;\n if (untrackedDiff) patch += \"\\n\" + untrackedDiff;\n } catch {\n // git diff failed — no changes made\n }\n\n const success = patch.length > 0 && !result.budgetExceeded;\n const status = success\n ? \"✓\"\n : patch.length === 0\n ? \"no changes\"\n : \"budget exceeded\";\n process.stderr.write(\n ` ${status} ($${result.cost.toFixed(3)}, ${result.modelUsed})\\n`,\n );\n\n return {\n instanceId: instance.instanceId,\n patch,\n model: result.modelUsed,\n strategy: opts.model ? \"forced\" : \"quality-first\",\n cost: result.cost,\n latencyMs: Date.now() - startTime,\n success,\n };\n } finally {\n // Cleanup workspace\n try {\n rmSync(workDir, { recursive: true, force: true });\n } catch {\n /* best effort */\n }\n }\n } catch (err: any) {\n process.stderr.write(\n ` ERROR: ${(err.message ?? \"\").slice(0, 80)}\\n`,\n );\n return {\n instanceId: instance.instanceId,\n patch: \"\",\n model: \"error\",\n strategy: \"quality-first\",\n cost: 0,\n latencyMs: Date.now() - startTime,\n success: false,\n };\n }\n },\n concurrency,\n );\n\n // Score patches\n console.log(` Scoring ${patches.length} patches...`);\n const scores = patches.map((patch: any, i: number) =>\n scorePatch(instances[i], patch),\n );\n const scorecard = generateScorecard(patches, scores);\n\n if (opts.json) {\n console.log(JSON.stringify(scorecard, null, 2));\n return;\n }\n\n console.log(`\\n ══════════════════════════════════════════════════`);\n console.log(` SWE-bench Results`);\n console.log(` ══════════════════════════════════════════════════\\n`);\n console.log(` Total: ${scorecard.total}`);\n console.log(\n ` Passed: ${scorecard.passed} (${(scorecard.passRate * 100).toFixed(1)}%)`,\n );\n console.log(` Failed: ${scorecard.failed}`);\n console.log(` Errored: ${scorecard.errored}`);\n console.log(` Cost: $${scorecard.totalCost.toFixed(4)}`);\n console.log(` Avg Lat: ${scorecard.avgLatencyMs}ms`);\n console.log();\n },\n );\n\n// ── Router Commands (BrainstormRouter Gateway) ───────────────────\n\nconst routerCmd = program\n .command(\"router\")\n .description(\"Manage BrainstormRouter gateway\");\n\nrouterCmd\n .command(\"status\")\n .description(\"Show gateway health, budget, and rate limits\")\n .action(async () => {\n const gw = createGatewayClient();\n if (!gw) {\n console.error(\n \" BRAINSTORM_API_KEY not set. Configure with: export BRAINSTORM_API_KEY=br_live_xxx\",\n );\n return;\n }\n try {\n const [self, health] = await Promise.all([gw.getSelf(), gw.getHealth()]);\n console.log(\"\\n BrainstormRouter Gateway\\n\");\n console.log(` Health: ${health.status}`);\n console.log(` Role: ${self.identity.roles.join(\", \")}`);\n console.log(` Caps: ${self.capabilities.granted.length} permissions`);\n try {\n const discovery = await gw.getDiscovery();\n if (discovery.budget) {\n console.log(\n ` Budget: $${discovery.budget.remaining_usd?.toFixed(2)} / $${discovery.budget.limit_usd?.toFixed(2)} (${discovery.budget.period})`,\n );\n }\n if (discovery.models) {\n console.log(\n ` Models: ${discovery.models.available} available, ${discovery.models.runnable} runnable`,\n );\n }\n } catch {\n console.log(\" Budget: (discovery unavailable)\");\n console.log(\" Models: (discovery unavailable)\");\n }\n console.log();\n } catch (e: any) {\n console.error(` Error: ${e.message}`);\n }\n });\n\nrouterCmd\n .command(\"models\")\n .description(\"List models available through the gateway\")\n .option(\"--json\", \"Output as JSON\")\n .action(async (opts: { json?: boolean }) => {\n const gw = createGatewayClient();\n if (!gw) {\n console.error(\" BRAINSTORM_API_KEY not set.\");\n return;\n }\n try {\n const models = await gw.listModels();\n if (opts.json) {\n console.log(JSON.stringify(models, null, 2));\n return;\n }\n console.log(`\\n Gateway Models (${models.length})\\n`);\n for (const m of models.slice(0, 30)) {\n const name = (m.name ?? m.id).padEnd(40);\n const provider = (m.provider ?? \"\").padEnd(12);\n console.log(` ${provider} ${name}`);\n }\n if (models.length > 30)\n console.log(` ... and ${models.length - 30} more`);\n console.log();\n } catch (e: any) {\n console.error(` Error: ${e.message}`);\n }\n });\n\nrouterCmd\n .command(\"budget\")\n .description(\"Show gateway-side cost tracking and forecast\")\n .action(async () => {\n const gw = createGatewayClient();\n if (!gw) {\n console.error(\" BRAINSTORM_API_KEY not set.\");\n return;\n }\n try {\n const usage = await gw.getUsageSummary();\n console.log(\"\\n Gateway Budget\\n\");\n console.log(` Requests: ${usage.total_requests ?? \"N/A\"}`);\n console.log(` Cost: $${(usage.total_cost_usd ?? 0).toFixed(4)}`);\n console.log(\n ` Tokens: ${(usage.total_input_tokens ?? 0).toLocaleString()} in / ${(usage.total_output_tokens ?? 0).toLocaleString()} out`,\n );\n if (usage.by_model?.length > 0) {\n console.log(\"\\n By model:\");\n for (const m of usage.by_model) {\n console.log(\n ` ${m.model}: $${m.cost_usd.toFixed(4)} (${m.requests} reqs)`,\n );\n }\n }\n console.log();\n } catch (e: any) {\n console.error(` Error: ${e.message}`);\n }\n });\n\nrouterCmd\n .command(\"keys\")\n .description(\"List API keys\")\n .option(\"--json\", \"Output as JSON\")\n .action(async (opts: { json?: boolean }) => {\n const gw = createGatewayClient();\n if (!gw) {\n console.error(\" BRAINSTORM_API_KEY not set.\");\n return;\n }\n try {\n const keys = await gw.listKeys();\n if (opts.json) {\n console.log(JSON.stringify(keys, null, 2));\n return;\n }\n console.log(`\\n API Keys (${keys.length})\\n`);\n for (const k of keys) {\n const budget = k.budgetLimitUsd\n ? `$${k.budgetLimitUsd}/${k.budgetPeriod}`\n : \"unlimited\";\n console.log(\n ` ${k.id.slice(0, 8)} ${(k.name ?? \"\").padEnd(30)} scopes=${JSON.stringify(k.scopes)} budget=${budget}`,\n );\n }\n console.log();\n } catch (e: any) {\n console.error(` Error: ${e.message}`);\n }\n });\n\nrouterCmd\n .command(\"config\")\n .description(\"Get or set gateway configuration\")\n .argument(\"<key>\", \"Config key (e.g., guardrails, tools)\")\n .argument(\"[value]\", \"JSON value to set (omit to read)\")\n .action(async (key: string, value?: string) => {\n const gw = createGatewayClient();\n if (!gw) {\n console.error(\" BRAINSTORM_API_KEY not set.\");\n return;\n }\n try {\n if (value) {\n await gw.setConfig(key, JSON.parse(value));\n console.log(` Set config/${key}`);\n } else {\n const data = await gw.getConfig(key);\n console.log(JSON.stringify(data, null, 2));\n }\n } catch (e: any) {\n console.error(` Error: ${e.message}`);\n }\n });\n\nrouterCmd\n .command(\"audit\")\n .description(\"Show recent request audit trail\")\n .option(\"--since <duration>\", \"Time range (e.g., 1h, 24h, 7d)\", \"24h\")\n .action(async (opts: { since: string }) => {\n const gw = createGatewayClient();\n if (!gw) {\n console.error(\" BRAINSTORM_API_KEY not set.\");\n return;\n }\n try {\n const entries = await gw.getCompletionAudit(opts.since);\n console.log(`\\n Audit Trail (last ${opts.since})\\n`);\n if (entries.length === 0) {\n console.log(\" No entries found.\");\n }\n for (const e of entries.slice(0, 20)) {\n console.log(\n ` ${e.timestamp} ${(e.model ?? \"\").padEnd(35)} $${(e.cost_usd ?? 0).toFixed(4)} ${e.latency_ms ?? \"?\"}ms guardian=${e.guardian_status ?? \"?\"}`,\n );\n }\n if (entries.length > 20)\n console.log(` ... ${entries.length - 20} more`);\n console.log();\n } catch (e: any) {\n console.error(` Error: ${e.message}`);\n }\n });\n\nrouterCmd\n .command(\"memory\")\n .description(\"List gateway memory entries\")\n .action(async () => {\n const gw = createGatewayClient();\n if (!gw) {\n console.error(\" BRAINSTORM_API_KEY not set.\");\n return;\n }\n try {\n const entries = await gw.listMemory();\n console.log(`\\n Gateway Memory (${entries.length} entries)\\n`);\n for (const e of entries) {\n const block = e.block ?? \"unknown\";\n const content = e.content ?? JSON.stringify(e).slice(0, 80);\n console.log(\n ` [${block}] ${content.slice(0, 80)}${content.length > 80 ? \"...\" : \"\"}`,\n );\n }\n console.log();\n } catch (e: any) {\n console.error(` Error: ${e.message}`);\n }\n });\n\n// ── Models Command ────────────────────────────────────────────────\n\nprogram\n .command(\"models\")\n .description(\"List available models and their status\")\n .action(async () => {\n const config = loadConfig();\n const registry = await createProviderRegistry(\n config,\n await resolveProviderKeys(),\n );\n\n console.log(\"\\n🧠 Brainstorm — Available Models\\n\");\n\n const local = registry.models.filter((m) => m.isLocal);\n const cloud = registry.models.filter((m) => !m.isLocal);\n\n if (local.length > 0) {\n console.log(\" Local Models:\");\n for (const m of local) {\n const status = m.status === \"available\" ? \"●\" : \"○\";\n console.log(\n ` ${status} ${m.id} (quality: ${m.capabilities.qualityTier}, speed: ${m.capabilities.speedTier})`,\n );\n }\n console.log();\n } else {\n console.log(\n \" Local Models: none detected (start Ollama, LM Studio, or llama.cpp)\\n\",\n );\n }\n\n console.log(\" Cloud Models (via AI Gateway):\");\n for (const m of cloud) {\n const cost = `$${m.pricing.inputPer1MTokens}/${m.pricing.outputPer1MTokens} per 1M tokens`;\n console.log(\n ` ● ${m.id} (quality: ${m.capabilities.qualityTier}, ${cost})`,\n );\n }\n console.log();\n });\n\nprogram\n .command(\"budget\")\n .description(\"Show cost tracking and budget status\")\n .action(async () => {\n const config = loadConfig();\n const db = getDb();\n const costTracker = new CostTracker(db, config.budget);\n const summary = costTracker.getSummary();\n\n console.log(\"\\n🧠 Brainstorm — Budget Status\\n\");\n console.log(` Session: $${summary.session.toFixed(4)}`);\n console.log(\n ` Today: $${summary.today.toFixed(4)}${config.budget.daily ? ` / $${config.budget.daily.toFixed(2)}` : \"\"}`,\n );\n console.log(\n ` This month: $${summary.thisMonth.toFixed(4)}${config.budget.monthly ? ` / $${config.budget.monthly.toFixed(2)}` : \"\"}`,\n );\n\n if (summary.byModel.length > 0) {\n console.log(\"\\n Cost by model:\");\n for (const entry of summary.byModel) {\n console.log(\n ` ${entry.modelId}: $${entry.totalCost.toFixed(4)} (${entry.requestCount} requests)`,\n );\n }\n }\n console.log();\n });\n\nprogram\n .command(\"config\")\n .description(\"Show current configuration\")\n .action(async () => {\n const config = loadConfig();\n console.log(\"\\n🧠 Brainstorm — Configuration\\n\");\n console.log(` Strategy: ${config.general.defaultStrategy}`);\n console.log(` Max steps: ${config.general.maxSteps}`);\n console.log(` Confirm tools: ${config.general.confirmTools}`);\n console.log(\n ` Budget daily: ${config.budget.daily ? `$${config.budget.daily}` : \"unlimited\"}`,\n );\n console.log(\n ` Budget monthly: ${config.budget.monthly ? `$${config.budget.monthly}` : \"unlimited\"}`,\n );\n console.log(` Hard limit: ${config.budget.hardLimit}`);\n console.log(\n ` Ollama: ${config.providers.ollama.enabled ? config.providers.ollama.baseUrl : \"disabled\"}`,\n );\n console.log(\n ` LM Studio: ${config.providers.lmstudio.enabled ? config.providers.lmstudio.baseUrl : \"disabled\"}`,\n );\n console.log(\n ` llama.cpp: ${config.providers.llamacpp.enabled ? config.providers.llamacpp.baseUrl : \"disabled\"}`,\n );\n console.log(\n ` AI Gateway: ${config.providers.gateway.enabled ? \"enabled\" : \"disabled\"}`,\n );\n if (config.routing.rules.length > 0) {\n console.log(` Routing rules: ${config.routing.rules.length}`);\n }\n console.log();\n });\n\n// ── Agent Commands ─────────────────────────────────────────────────\n\nconst agentCmd = program.command(\"agent\").description(\"Manage named agents\");\n\nagentCmd\n .command(\"create\")\n .description(\"Create an agent (structured flags or natural language)\")\n .argument(\n \"[description...]\",\n 'Natural language description (e.g., \"architect using opus with $30 budget\")',\n )\n .option(\"--id <id>\", \"Agent ID\")\n .option(\"--model <model>\", \"Model ID or alias\")\n .option(\n \"--role <role>\",\n \"Agent role (architect|coder|reviewer|debugger|analyst|custom)\",\n )\n .option(\"--budget <usd>\", \"Per-workflow budget in USD\", parseFloat)\n .option(\"--budget-daily <usd>\", \"Daily budget in USD\", parseFloat)\n .option(\"--description <desc>\", \"What this agent does\")\n .option(\"--confidence <threshold>\", \"Confidence threshold 0-1\", parseFloat)\n .action(async (descWords: string[], opts: any) => {\n const config = loadConfig();\n const db = getDb();\n const manager = new AgentManager(db, config);\n\n // Try natural language first\n const nlInput = descWords.join(\" \");\n const parseResult = nlInput ? parseAgentNL(nlInput) : null;\n const parsed = parseResult?.intent;\n\n if (nlInput && !parsed && parseResult?.suggestion) {\n console.log(\n ` Could not parse agent definition.\\n ${parseResult.suggestion}`,\n );\n process.exit(1);\n }\n\n const id = opts.id ?? parsed?.id ?? \"agent-\" + Date.now().toString(36);\n const role = opts.role ?? parsed?.role ?? \"custom\";\n const modelId = opts.model ?? parsed?.modelId ?? \"auto\";\n const budget = opts.budget ?? parsed?.budget;\n const budgetDaily = opts.budgetDaily ?? parsed?.budgetDaily;\n const description = opts.description ?? parsed?.description ?? \"\";\n const confidence = opts.confidence ?? 0.7;\n\n const agent = manager.create({\n id,\n displayName: id.charAt(0).toUpperCase() + id.slice(1),\n role,\n description,\n modelId,\n allowedTools: role === \"coder\" ? \"all\" : [\"file_read\", \"glob\", \"grep\"],\n budget: {\n perWorkflow: budget,\n daily: budgetDaily,\n exhaustionAction: \"downgrade\",\n },\n confidenceThreshold: confidence,\n maxSteps: 10,\n fallbackChain: [],\n guardrails: { pii: parsed?.guardrailsPii },\n lifecycle: \"active\",\n });\n\n console.log(`\\n Created agent '${agent.id}'`);\n console.log(` Role: ${agent.role}`);\n console.log(` Model: ${agent.modelId}`);\n if (agent.budget.perWorkflow)\n console.log(` Budget: $${agent.budget.perWorkflow}/workflow`);\n if (agent.budget.daily)\n console.log(` Daily: $${agent.budget.daily}/day`);\n if (agent.guardrails.pii) console.log(` Guardrails: PII enabled`);\n console.log();\n });\n\nagentCmd\n .command(\"list\")\n .description(\"List all agents\")\n .action(async () => {\n const config = loadConfig();\n const db = getDb();\n const manager = new AgentManager(db, config);\n const agents = manager.list();\n\n console.log(\"\\n Agents:\\n\");\n if (agents.length === 0) {\n console.log(\n \" No agents defined. Create one with: storm agent create <description>\",\n );\n }\n for (const a of agents) {\n const budget = a.budget.perWorkflow\n ? `$${a.budget.perWorkflow}/wf`\n : a.budget.daily\n ? `$${a.budget.daily}/day`\n : \"unlimited\";\n console.log(\n ` ${a.id} (${a.role}) model: ${a.modelId} budget: ${budget}`,\n );\n }\n console.log();\n });\n\nagentCmd\n .command(\"show\")\n .description(\"Show agent details\")\n .argument(\"<id>\", \"Agent ID\")\n .action(async (id: string) => {\n const config = loadConfig();\n const db = getDb();\n const manager = new AgentManager(db, config);\n const agent = manager.get(id);\n\n if (!agent) {\n console.error(` Agent '${id}' not found.`);\n process.exit(1);\n }\n\n console.log(`\\n Agent: ${agent.id}`);\n console.log(` Display Name: ${agent.displayName}`);\n console.log(` Role: ${agent.role}`);\n console.log(` Model: ${agent.modelId}`);\n console.log(` Description: ${agent.description || \"(none)\"}`);\n console.log(` Allowed Tools: ${JSON.stringify(agent.allowedTools)}`);\n console.log(\n ` Budget/Workflow: ${agent.budget.perWorkflow ? `$${agent.budget.perWorkflow}` : \"unlimited\"}`,\n );\n console.log(\n ` Budget/Daily: ${agent.budget.daily ? `$${agent.budget.daily}` : \"unlimited\"}`,\n );\n console.log(` Confidence: ${agent.confidenceThreshold}`);\n console.log(\n ` Fallback Chain: ${agent.fallbackChain.length > 0 ? agent.fallbackChain.join(\" → \") : \"(none)\"}`,\n );\n console.log(` Guardrails: PII=${agent.guardrails.pii ?? false}`);\n console.log(` Status: ${agent.lifecycle}`);\n console.log();\n });\n\nagentCmd\n .command(\"delete\")\n .description(\"Delete an agent\")\n .argument(\"<id>\", \"Agent ID\")\n .action(async (id: string) => {\n const config = loadConfig();\n const db = getDb();\n const manager = new AgentManager(db, config);\n try {\n const deleted = manager.delete(id);\n if (deleted) console.log(` Deleted agent '${id}'.`);\n else console.error(` Agent '${id}' not found.`);\n } catch (e: any) {\n console.error(` ${e.message}`);\n }\n });\n\n// ── Workflow Commands ──────────────────────────────────────────────\n\nconst workflowCmd = program\n .command(\"workflow\")\n .description(\"Run multi-agent workflows\");\n\nworkflowCmd\n .command(\"list\")\n .description(\"List available workflows\")\n .action(async () => {\n console.log(\"\\n Workflows:\\n\");\n for (const w of PRESET_WORKFLOWS) {\n const steps = w.steps.map((s) => s.agentRole).join(\" → \");\n console.log(` ${w.id} — ${w.description}`);\n console.log(\n ` Steps: ${steps} (mode: ${w.communicationMode}, max loops: ${w.maxIterations})`,\n );\n }\n console.log();\n });\n\nworkflowCmd\n .command(\"run\")\n .description(\"Run a workflow\")\n .argument(\"<preset>\", \"Workflow preset ID or natural language description\")\n .argument(\"[description...]\", \"What to build/fix/review\")\n .option(\n \"--agents <mapping>\",\n 'Agent role overrides (e.g., \"architect=my-arch,coder=my-coder\")',\n )\n .option(\"--mode <mode>\", \"Communication mode (handoff|shared)\", \"handoff\")\n .option(\n \"--step-model <overrides...>\",\n 'Per-step model overrides (e.g., \"plan=claude-opus-4.6 code=claude-sonnet-4.6\")',\n )\n .option(\"--dry-run\", \"Show cost forecast only\")\n .action(async (preset: string, descWords: string[], opts: any) => {\n const description = descWords.join(\" \") || preset;\n\n // Resolve workflow\n let workflow = getPresetWorkflow(preset);\n if (!workflow) {\n const autoPreset = autoSelectPreset(preset + \" \" + description);\n if (autoPreset) workflow = getPresetWorkflow(autoPreset);\n }\n if (!workflow) {\n console.error(\n ` Unknown workflow: '${preset}'. Run 'storm workflow list' to see available workflows.`,\n );\n process.exit(1);\n }\n\n const config = loadConfig();\n const db = getDb();\n const registry = await createProviderRegistry(\n config,\n await resolveProviderKeys(),\n );\n const costTracker = new CostTracker(db, config.budget);\n const projectPath = process.cwd();\n const { frontmatter } = buildSystemPrompt(projectPath);\n const router = new BrainstormRouter(\n config,\n registry,\n costTracker,\n frontmatter,\n );\n const agentManager = new AgentManager(db, config);\n\n // Parse agent overrides\n const agentOverrides: Record<string, string> = {};\n if (opts.agents) {\n for (const pair of opts.agents.split(\",\")) {\n const [role, agentId] = pair.split(\"=\");\n if (role && agentId) agentOverrides[role.trim()] = agentId.trim();\n }\n }\n\n // Parse step model overrides: --step-model \"plan=claude-opus-4.6\" \"code=claude-sonnet-4.6\"\n const stepModelOverrides: Record<string, string> = {};\n if (opts.stepModel) {\n const items = Array.isArray(opts.stepModel)\n ? opts.stepModel\n : [opts.stepModel];\n for (const item of items) {\n for (const pair of (item as string).split(/\\s+/)) {\n const [step, model] = pair.split(\"=\");\n if (step && model) stepModelOverrides[step.trim()] = model.trim();\n }\n }\n }\n\n console.log(`\\n Workflow: ${workflow.name}`);\n console.log(` Request: \"${description}\"`);\n console.log(\n ` Steps: ${workflow.steps.map((s) => s.agentRole).join(\" → \")}`,\n );\n if (Object.keys(stepModelOverrides).length > 0) {\n console.log(\n ` Model overrides: ${Object.entries(stepModelOverrides)\n .map(([s, m]) => `${s}=${m}`)\n .join(\", \")}`,\n );\n }\n console.log();\n\n for await (const event of runWorkflow(\n workflow,\n description,\n agentOverrides,\n {\n config,\n db,\n registry,\n router,\n costTracker,\n agentManager,\n projectPath,\n stepModelOverrides,\n },\n )) {\n switch (event.type) {\n case \"cost-forecast\":\n console.log(` Estimated cost: $${event.estimated.toFixed(4)}`);\n for (const b of event.breakdown) {\n console.log(` ${b.step}: $${b.cost.toFixed(4)}`);\n }\n if (opts.dryRun) {\n console.log(\"\\n (dry run — not executing)\\n\");\n return;\n }\n console.log();\n break;\n case \"step-started\":\n process.stdout.write(\n ` [${event.agent.role}] ${event.agent.displayName} (${event.agent.modelId})...`,\n );\n break;\n case \"step-progress\":\n if (event.event.type === \"text-delta\") {\n // Don't flood output — just show dots for progress\n }\n if (event.event.type === \"routing\") {\n process.stdout.write(` → ${event.event.decision.model.name}`);\n }\n break;\n case \"step-completed\":\n console.log(\n ` done ($${event.step.cost.toFixed(4)}, confidence: ${event.artifact.confidence.toFixed(2)})`,\n );\n break;\n case \"step-failed\":\n console.log(` FAILED: ${event.error.message}`);\n break;\n case \"review-rejected\":\n console.log(\n ` [review] Rejected — looping back to ${event.loopingBackTo} (iteration ${event.step.iteration + 1})`,\n );\n break;\n case \"confidence-escalation\":\n console.log(\n ` [confidence] ${event.action} (${event.confidence.toFixed(2)})`,\n );\n break;\n case \"model-fallback\":\n console.log(\n ` [fallback] ${event.originalModel} → ${event.fallbackModel}: ${event.reason}`,\n );\n break;\n case \"workflow-completed\":\n console.log(\n `\\n Workflow complete. Total cost: $${event.run.totalCost.toFixed(4)}`,\n );\n console.log(\n ` Artifacts: ${event.run.artifacts.map((a) => a.id).join(\", \")}\\n`,\n );\n break;\n case \"workflow-failed\":\n console.log(`\\n Workflow failed: ${event.error.message}\\n`);\n break;\n }\n }\n });\n\n// ── Run Command ────────────────────────────────────────────────────\n\nprogram\n .command(\"run\")\n .description(\"Run a single prompt non-interactively\")\n .argument(\"[prompt]\", \"The prompt to send\")\n .option(\"--json\", \"Output structured JSON (for CI/CD pipelines)\")\n .option(\"--pipe\", \"Read from stdin if no prompt given\")\n .option(\"--model <id>\", \"Target a specific model (bypass routing)\")\n .option(\"--tools\", \"Enable tool use (default: disabled)\")\n .option(\"--max-steps <n>\", \"Maximum agentic steps (default: 1)\", \"1\")\n .option(\n \"--strategy <name>\",\n \"Routing strategy: cost-first, quality-first, combined, capability\",\n )\n .option(\"--lfg\", \"Full auto mode — skip all permission confirmations\")\n .option(\n \"--unattended\",\n \"Unattended mode — enable tools, auto-approve, auto-commit on success\",\n )\n .action(\n async (\n prompt: string | undefined,\n opts: {\n json?: boolean;\n pipe?: boolean;\n model?: string;\n tools?: boolean;\n maxSteps?: string;\n strategy?: string;\n lfg?: boolean;\n unattended?: boolean;\n },\n ) => {\n // Handle --pipe: read prompt from stdin\n let finalPrompt = prompt;\n if (opts.pipe) {\n const chunks: Buffer[] = [];\n for await (const chunk of process.stdin) {\n chunks.push(chunk);\n }\n const stdinText = Buffer.concat(chunks).toString(\"utf-8\").trim();\n if (finalPrompt) {\n // Append stdin to prompt argument\n finalPrompt = `${finalPrompt}\\n\\n${stdinText}`;\n } else {\n finalPrompt = stdinText;\n }\n }\n if (!finalPrompt) {\n process.stderr.write(\n \"Error: No prompt provided. Pass a prompt argument or use --pipe to read from stdin.\\n\",\n );\n process.exit(1);\n }\n\n const config = loadConfig();\n\n // --lfg / --unattended: full auto mode, skip all permission confirmations\n if (opts.lfg || opts.unattended) {\n config.general.defaultPermissionMode = \"auto\";\n }\n // --unattended: enable tools and higher step count by default\n if (opts.unattended) {\n opts.tools = true;\n if (!opts.maxSteps || opts.maxSteps === \"1\") opts.maxSteps = \"15\";\n }\n\n const db = getDb();\n const resolvedKeys = await resolveProviderKeys();\n const resolvedBRKey =\n resolvedKeys.get(\"BRAINSTORM_API_KEY\") ?? getBrainstormApiKey();\n const isCommunityTier = isCommunityKey(resolvedBRKey);\n // Set env for native BR tools (br_status, br_budget, etc.)\n if (resolvedBRKey) process.env._BR_RESOLVED_KEY = resolvedBRKey;\n const registry = await createProviderRegistry(config, resolvedKeys);\n const costTracker = new CostTracker(db, config.budget);\n const tools = createDefaultToolRegistry();\n await connectMCPServers(\n tools,\n config,\n resolvedKeys.get(\"BRAINSTORM_API_KEY\"),\n );\n const sessionManager = new SessionManager(db);\n const projectPath = process.cwd();\n configureSandbox(\n config.shell.sandbox as any,\n projectPath,\n config.shell.maxOutputBytes,\n config.shell.containerImage,\n config.shell.containerTimeout,\n );\n const { prompt: rawPrompt, frontmatter } = buildSystemPrompt(projectPath);\n const systemPrompt =\n rawPrompt + buildToolAwarenessSection(tools.listTools());\n const router = new BrainstormRouter(\n config,\n registry,\n costTracker,\n frontmatter,\n );\n\n // Permission manager — gates tool execution\n const permissionManager = new PermissionManager(\n config.general.defaultPermissionMode as any,\n config.permissions,\n );\n\n // Strategy: CLI flag → paid/direct-key default → config default\n const hasDirectKeys =\n !!resolvedKeys.get(\"DEEPSEEK_API_KEY\") ||\n !!resolvedKeys.get(\"ANTHROPIC_API_KEY\") ||\n !!resolvedKeys.get(\"OPENAI_API_KEY\") ||\n !!resolvedKeys.get(\"GOOGLE_GENERATIVE_AI_API_KEY\") ||\n !!resolvedKeys.get(\"MOONSHOT_API_KEY\");\n if (opts.strategy) {\n router.setStrategy(opts.strategy as any);\n } else if (!isCommunityTier || hasDirectKeys) {\n router.setStrategy(\"quality-first\");\n }\n\n const session = sessionManager.start(projectPath);\n\n sessionManager.addUserMessage(finalPrompt);\n\n let fullResponse = \"\";\n let modelName = \"unknown\";\n let toolCallCount = 0;\n\n if (!opts.json) {\n process.stdout.write(\"\\n\");\n }\n\n const middleware = createDefaultMiddlewarePipeline(projectPath);\n for await (const event of runAgentLoop(sessionManager.getHistory(), {\n config,\n registry,\n router,\n costTracker,\n tools,\n sessionId: session.id,\n projectPath,\n systemPrompt,\n disableTools: !opts.tools,\n preferredModelId:\n opts.model ??\n (resolvedKeys.get(\"MOONSHOT_API_KEY\")\n ? \"moonshot/kimi-k2.5\"\n : isCommunityTier &&\n !resolvedKeys.get(\"DEEPSEEK_API_KEY\") &&\n !resolvedKeys.get(\"ANTHROPIC_API_KEY\") &&\n !resolvedKeys.get(\"OPENAI_API_KEY\") &&\n !resolvedKeys.get(\"GOOGLE_GENERATIVE_AI_API_KEY\")\n ? \"brainstormrouter/auto\"\n : undefined),\n maxSteps: parseInt(opts.maxSteps ?? \"1\"),\n compaction: buildCompactionCallbacks(sessionManager),\n permissionCheck: (tool, args) => permissionManager.check(tool, args),\n middleware,\n })) {\n switch (event.type) {\n case \"thinking\":\n if (!opts.json) {\n const spinnerFrames = [\n \"⠋\",\n \"⠙\",\n \"⠹\",\n \"⠸\",\n \"⠼\",\n \"⠴\",\n \"⠦\",\n \"⠧\",\n \"⠇\",\n \"⠏\",\n ];\n const frame =\n spinnerFrames[\n Math.floor(Date.now() / 100) % spinnerFrames.length\n ];\n const phases: Record<string, string> = {\n classifying: \"Classifying task...\",\n routing: \"Selecting model...\",\n connecting: `Connecting...`,\n streaming: \"Streaming...\",\n };\n process.stderr.write(\n `\\r${frame} ${phases[event.phase] ?? event.phase}`,\n );\n }\n break;\n case \"routing\":\n modelName = event.decision.model.name;\n process.stderr.write(\n `\\r[${event.decision.strategy}] → ${modelName}\\n`,\n );\n break;\n case \"text-delta\":\n fullResponse += event.delta;\n break;\n case \"tool-call-start\":\n toolCallCount++;\n process.stderr.write(`\\n[tool: ${event.toolName}]\\n`);\n break;\n case \"gateway-feedback\": {\n const gwLine = formatGatewayFeedback(event.feedback);\n if (gwLine) process.stderr.write(`${gwLine}\\n`);\n break;\n }\n case \"model-retry\":\n process.stderr.write(\n `\\n[retry] ${event.fromModel} → ${event.toModel} (${event.reason})\\n`,\n );\n modelName = event.toModel;\n fullResponse = \"\"; // Reset for retry\n break;\n case \"done\":\n if (opts.json) {\n // Structured JSON output for CI/CD — only valid JSON on stdout\n process.stdout.write(\n JSON.stringify({\n text: fullResponse,\n model: modelName,\n cost: event.totalCost,\n toolCalls: toolCallCount,\n success: true,\n }) + \"\\n\",\n );\n } else {\n process.stdout.write(renderMarkdownToString(fullResponse));\n process.stdout.write(\n `\\n\\n[cost: $${event.totalCost.toFixed(4)}]\\n`,\n );\n }\n break;\n case \"error\":\n if (opts.json) {\n process.stdout.write(\n JSON.stringify({\n text: \"\",\n model: modelName,\n cost: 0,\n toolCalls: toolCallCount,\n error: event.error.message,\n success: false,\n }) + \"\\n\",\n );\n process.exit(1);\n } else {\n process.stderr.write(`\\nError: ${event.error.message}\\n`);\n }\n break;\n }\n }\n\n if (fullResponse) {\n sessionManager.addAssistantMessage(fullResponse);\n }\n },\n );\n\n// ── Probe Command ─────────────────────────────────────────────────\n\nprogram\n .command(\"probe\")\n .description(\n \"Run an ad-hoc eval probe with verification (for autonomous testing)\",\n )\n .argument(\"<prompt>\", \"The prompt to test\")\n .option(\"--model <id>\", \"Target a specific model\")\n .option(\n \"--expect-tools <tools>\",\n \"Comma-separated tool names that must be called\",\n )\n .option(\n \"--expect-contains <strings>\",\n \"Comma-separated strings that must appear in output\",\n )\n .option(\n \"--expect-excludes <strings>\",\n \"Comma-separated strings that must NOT appear\",\n )\n .option(\"--min-steps <n>\", \"Minimum number of agentic steps\")\n .option(\"--max-steps <n>\", \"Maximum number of agentic steps\", \"10\")\n .option(\"--timeout <ms>\", \"Timeout in milliseconds\", \"30000\")\n .option(\"--json\", \"Output full ProbeResult as JSON\")\n .option(\"--setup-file <pairs...>\", \"Setup files as path=content pairs\")\n .action(async (prompt: string, opts: any) => {\n // Build Probe from CLI args\n const probe: any = {\n id: `adhoc-${Date.now().toString(36)}`,\n capability: \"multi-step\" as const,\n prompt,\n verify: {},\n timeout_ms: parseInt(opts.timeout),\n };\n\n if (opts.expectTools) {\n probe.verify.tool_calls_include = opts.expectTools\n .split(\",\")\n .map((s: string) => s.trim());\n }\n if (opts.expectContains) {\n probe.verify.answer_contains = opts.expectContains\n .split(\",\")\n .map((s: string) => s.trim());\n }\n if (opts.expectExcludes) {\n probe.verify.answer_excludes = opts.expectExcludes\n .split(\",\")\n .map((s: string) => s.trim());\n }\n if (opts.minSteps) {\n probe.verify.min_steps = parseInt(opts.minSteps);\n }\n if (opts.maxSteps) {\n probe.verify.max_steps = parseInt(opts.maxSteps);\n }\n\n // Parse setup files: --setup-file \"path=content\" --setup-file \"path2=content2\"\n if (opts.setupFile) {\n probe.setup = { files: {} as Record<string, string> };\n for (const pair of opts.setupFile) {\n const eqIdx = pair.indexOf(\"=\");\n if (eqIdx > 0) {\n probe.setup.files[pair.slice(0, eqIdx)] = pair.slice(eqIdx + 1);\n }\n }\n }\n\n const result = await runProbe(probe, {\n modelId: opts.model,\n maxSteps: parseInt(opts.maxSteps),\n defaultTimeout: parseInt(opts.timeout),\n });\n\n if (opts.json) {\n process.stdout.write(JSON.stringify(result, null, 2) + \"\\n\");\n } else {\n const status = result.passed ? \"PASSED\" : \"FAILED\";\n console.log(`\\n Probe: ${status}`);\n console.log(` Model: ${result.modelId}`);\n console.log(` Steps: ${result.steps}`);\n console.log(` Cost: $${result.cost.toFixed(4)}`);\n console.log(` Time: ${result.durationMs}ms`);\n if (result.toolCalls.length > 0) {\n console.log(\n ` Tools: ${result.toolCalls.map((t) => t.name).join(\", \")}`,\n );\n }\n if (!result.passed) {\n const failures = result.checks.filter((c) => !c.passed);\n console.log(` Failures:`);\n for (const f of failures) {\n console.log(` - ${f.check}: ${f.detail ?? \"failed\"}`);\n }\n }\n if (result.error) console.log(` Error: ${result.error}`);\n console.log(\n ` Output: ${result.output.slice(0, 200)}${result.output.length > 200 ? \"...\" : \"\"}`,\n );\n console.log();\n }\n\n process.exit(result.passed ? 0 : 1);\n });\n\n// ── Vault Commands ─────────────────────────────────────────────────\n\nconst VAULT_PATH = join(homedir(), \".brainstorm\", \"vault.enc\");\n\nfunction printResumeSummary(\n session: any,\n sessionManager: SessionManager,\n): void {\n const age = Math.floor((Date.now() / 1000 - session.createdAt) / 60);\n const ageStr =\n age < 60\n ? `${age}m ago`\n : age < 1440\n ? `${Math.floor(age / 60)}h ago`\n : `${Math.floor(age / 1440)}d ago`;\n const history = sessionManager.getHistory();\n const lastMsg = history.length > 0 ? history[history.length - 1] : null;\n const lastPreview = lastMsg\n ? `\"${lastMsg.content.slice(0, 60)}${lastMsg.content.length > 60 ? \"...\" : \"\"}\"`\n : \"none\";\n console.log(\n ` Resumed session ${session.id.slice(0, 8)} | ${session.messageCount} msgs | $${(session.totalCost ?? 0).toFixed(4)} | ${ageStr}`,\n );\n if (lastMsg) console.log(` Last ${lastMsg.role}: ${lastPreview}`);\n}\n\n/** Prompt for a password with masked echo. Supports BRAINSTORM_VAULT_PASSWORD env for non-interactive use. */\nfunction promptPassword(prompt: string): Promise<string> {\n // Non-interactive: use env var if set (for CI/CD and scripting)\n const envPassword = process.env.BRAINSTORM_VAULT_PASSWORD;\n if (envPassword) {\n console.error(\n \" [vault] Using BRAINSTORM_VAULT_PASSWORD from environment (no prompt)\",\n );\n return Promise.resolve(envPassword);\n }\n\n return new Promise((resolve, reject) => {\n process.stderr.write(prompt);\n\n // Always try to set raw mode to prevent terminal echo\n let rawModeWasSet = false;\n try {\n if (process.stdin.setRawMode) {\n process.stdin.setRawMode(true);\n rawModeWasSet = true;\n }\n } catch {\n // Some environments don't support raw mode\n }\n\n // Ensure stdin is in flowing mode\n if (process.stdin.isPaused?.()) process.stdin.resume();\n\n let password = \"\";\n const cleanup = () => {\n process.stdin.removeListener(\"data\", onData);\n if (rawModeWasSet) {\n try {\n process.stdin.setRawMode?.(false);\n } catch {\n /* ignore */\n }\n }\n process.stderr.write(\"\\n\");\n };\n\n const onData = (ch: Buffer) => {\n const c = ch.toString();\n if (c === \"\\n\" || c === \"\\r\" || c === \"\\u0004\") {\n cleanup();\n resolve(password);\n } else if (c === \"\\u0003\") {\n cleanup();\n reject(new Error(\"Cancelled\"));\n } else if (c === \"\\u007F\" || c === \"\\b\") {\n if (password.length > 0) {\n password = password.slice(0, -1);\n process.stderr.write(\"\\b \\b\");\n }\n } else if (c.charCodeAt(0) >= 32) {\n // Only accept printable characters\n password += c;\n process.stderr.write(\"*\");\n }\n };\n process.stdin.on(\"data\", onData);\n });\n}\n\nconst vaultCmd = program\n .command(\"vault\")\n .description(\"Manage encrypted key vault\");\n\nvaultCmd\n .command(\"init\")\n .description(\"Create a new encrypted vault\")\n .action(async () => {\n const vault = new BrainstormVault(VAULT_PATH);\n if (vault.exists()) {\n console.error(\n \" Vault already exists. Use `brainstorm vault rotate` to change password.\",\n );\n process.exit(1);\n }\n const password = await promptPassword(\" Master password: \");\n const confirm = await promptPassword(\" Confirm password: \");\n if (password !== confirm) {\n console.error(\" Passwords do not match.\");\n process.exit(1);\n }\n if (password.length < 8) {\n console.error(\" Password must be at least 8 characters.\");\n process.exit(1);\n }\n await vault.init(password);\n console.log(` Vault created at ${VAULT_PATH}`);\n });\n\nvaultCmd\n .command(\"add <name>\")\n .description(\"Add a key to the vault\")\n .argument(\"[value]\", \"Key value (prompted if omitted)\")\n .action(async (name: string, value?: string) => {\n const vault = new BrainstormVault(VAULT_PATH);\n const password = await promptPassword(\" Master password: \");\n vault.open(password);\n const keyValue = value ?? (await promptPassword(` Value for ${name}: `));\n vault.set(name, keyValue);\n vault.seal();\n console.log(` Added ${name} to vault.`);\n });\n\nvaultCmd\n .command(\"list\")\n .description(\"List stored key names\")\n .action(async () => {\n const vault = new BrainstormVault(VAULT_PATH);\n if (!vault.exists()) {\n console.log(\" No vault found. Run `brainstorm vault init` first.\");\n return;\n }\n const password = await promptPassword(\" Master password: \");\n vault.open(password);\n const keys = vault.list();\n if (keys.length === 0) {\n console.log(\" Vault is empty.\");\n } else {\n console.log(`\\n Keys (${keys.length}):\\n`);\n for (const k of keys) console.log(` ${k}`);\n console.log();\n }\n });\n\nvaultCmd\n .command(\"get <name>\")\n .description(\"Show a key value (masked by default)\")\n .option(\"--reveal\", \"Show the full unmasked value\")\n .action(async (name: string, opts: { reveal?: boolean }) => {\n const vault = new BrainstormVault(VAULT_PATH);\n const password = await promptPassword(\" Master password: \");\n vault.open(password);\n const value = vault.get(name);\n if (value) {\n if (opts.reveal) {\n console.log(value);\n } else {\n const masked =\n value.slice(0, 8) + \"*\".repeat(Math.max(0, value.length - 8));\n console.log(masked);\n }\n } else {\n console.error(` Key \"${name}\" not found in vault.`);\n process.exit(1);\n }\n });\n\nvaultCmd\n .command(\"remove <name>\")\n .description(\"Remove a key from the vault\")\n .action(async (name: string) => {\n const vault = new BrainstormVault(VAULT_PATH);\n const password = await promptPassword(\" Master password: \");\n vault.open(password);\n if (vault.delete(name)) {\n vault.seal();\n console.log(` Removed ${name} from vault.`);\n } else {\n console.error(` Key \"${name}\" not found in vault.`);\n process.exit(1);\n }\n });\n\nvaultCmd\n .command(\"rotate\")\n .description(\"Change vault master password\")\n .action(async () => {\n const vault = new BrainstormVault(VAULT_PATH);\n const current = await promptPassword(\" Current password: \");\n vault.open(current);\n const newPass = await promptPassword(\" New password: \");\n const confirm = await promptPassword(\" Confirm new password: \");\n if (newPass !== confirm) {\n console.error(\" Passwords do not match.\");\n process.exit(1);\n }\n if (newPass.length < 8) {\n console.error(\" Password must be at least 8 characters.\");\n process.exit(1);\n }\n vault.rotate(newPass);\n console.log(\" Vault password rotated.\");\n });\n\nvaultCmd\n .command(\"lock\")\n .description(\"Clear vault keys from memory\")\n .action(() => {\n console.log(\" Vault locked (keys cleared from memory).\");\n });\n\nvaultCmd\n .command(\"status\")\n .description(\"Show vault and backend status\")\n .action(async () => {\n const vault = new BrainstormVault(VAULT_PATH);\n const resolver = new KeyResolver(vault.exists() ? vault : null);\n const s = resolver.status();\n console.log(\"\\n Vault Status:\\n\");\n console.log(` Vault: ${s.vault}`);\n console.log(` 1Password: ${s.op}`);\n console.log(` Env vars: ${s.env}`);\n console.log(` Priority: vault → 1Password → env vars\\n`);\n });\n\n// ── Projects Command ──────────────────────────────────────────────\n\nconst projectsCmd = program\n .command(\"projects\")\n .description(\"Manage registered projects\");\n\nprojectsCmd\n .command(\"list\")\n .description(\"List all registered projects\")\n .option(\"--all\", \"Include inactive projects\")\n .action(async (opts: { all?: boolean }) => {\n const { ProjectManager } = await import(\"@brainst0rm/projects\");\n const db = getDb();\n const pm = new ProjectManager(db);\n const projects = pm.projects.list(opts.all);\n\n console.log(\"\\n Registered Projects:\\n\");\n if (projects.length === 0) {\n console.log(\n \" No projects registered. Run: storm projects register <path>\",\n );\n console.log(\" Or scan all: storm projects import ~/Projects\\n\");\n return;\n }\n for (const p of projects) {\n const dash = pm.dashboard(p.id);\n const cost = dash ? `$${dash.costToday.toFixed(4)}/day` : \"\";\n const sessions = dash ? `${dash.sessionCount} sessions` : \"\";\n const active = p.isActive ? \"\" : \" [inactive]\";\n console.log(\n ` ${p.name.padEnd(25)} ${sessions.padEnd(15)} ${cost.padEnd(15)} ${p.path}${active}`,\n );\n }\n console.log();\n });\n\nprojectsCmd\n .command(\"register\")\n .argument(\"<path>\", \"Path to project directory\")\n .option(\"-n, --name <name>\", \"Project name (default: directory name)\")\n .option(\"--budget-daily <amount>\", \"Daily budget limit in dollars\")\n .option(\"--budget-monthly <amount>\", \"Monthly budget limit in dollars\")\n .description(\"Register a project\")\n .action(\n async (\n path: string,\n opts: { name?: string; budgetDaily?: string; budgetMonthly?: string },\n ) => {\n const { ProjectManager } = await import(\"@brainst0rm/projects\");\n const db = getDb();\n const pm = new ProjectManager(db);\n try {\n const project = pm.register(path, opts.name, {\n budgetDaily: opts.budgetDaily\n ? parseFloat(opts.budgetDaily)\n : undefined,\n budgetMonthly: opts.budgetMonthly\n ? parseFloat(opts.budgetMonthly)\n : undefined,\n });\n console.log(`\\n ✓ Registered \"${project.name}\" → ${project.path}\\n`);\n } catch (err) {\n console.error(\n `\\n ✗ ${err instanceof Error ? err.message : String(err)}\\n`,\n );\n }\n },\n );\n\nprojectsCmd\n .command(\"switch\")\n .argument(\"<name>\", \"Project name to switch to\")\n .description(\"Set the active project for this session\")\n .action(async (name: string) => {\n const { ProjectManager } = await import(\"@brainst0rm/projects\");\n const db = getDb();\n const pm = new ProjectManager(db);\n try {\n const project = pm.switch(name);\n console.log(`\\n ✓ Switched to \"${project.name}\" (${project.path})\\n`);\n } catch (err) {\n console.error(\n `\\n ✗ ${err instanceof Error ? err.message : String(err)}\\n`,\n );\n }\n });\n\nprojectsCmd\n .command(\"show\")\n .argument(\"<name>\", \"Project name\")\n .description(\"Show project dashboard\")\n .action(async (name: string) => {\n const { ProjectManager } = await import(\"@brainst0rm/projects\");\n const db = getDb();\n const pm = new ProjectManager(db);\n const project = pm.projects.getByName(name);\n if (!project) {\n console.error(`\\n ✗ Project \"${name}\" not found.\\n`);\n return;\n }\n const dash = pm.dashboard(project.id);\n if (!dash) return;\n\n console.log(`\\n ── ${project.name} ──`);\n console.log(` Path: ${project.path}`);\n if (project.description)\n console.log(` Description: ${project.description}`);\n console.log(` Sessions: ${dash.sessionCount}`);\n console.log(` Cost today: $${dash.costToday.toFixed(4)}`);\n console.log(` Cost month: $${dash.costThisMonth.toFixed(4)}`);\n if (project.budgetDaily) {\n console.log(\n ` Budget daily: $${project.budgetDaily.toFixed(2)} (${dash.budgetDailyUsed.toFixed(0)}% used)`,\n );\n }\n if (project.budgetMonthly) {\n console.log(\n ` Budget month: $${project.budgetMonthly.toFixed(2)} (${dash.budgetMonthlyUsed.toFixed(0)}% used)`,\n );\n }\n\n const memory = pm.memory.list(project.id);\n if (memory.length > 0) {\n console.log(` Memory: ${memory.length} entries`);\n }\n console.log();\n });\n\nprojectsCmd\n .command(\"import\")\n .argument(\"[dir]\", \"Parent directory to scan\", join(homedir(), \"Projects\"))\n .description(\"Scan a directory and register all project subdirectories\")\n .action(async (dir: string) => {\n const { ProjectManager } = await import(\"@brainst0rm/projects\");\n const db = getDb();\n const pm = new ProjectManager(db);\n const registered = pm.import(dir);\n if (registered.length === 0) {\n console.log(`\\n No new projects found in ${dir}\\n`);\n } else {\n console.log(`\\n Registered ${registered.length} projects:`);\n for (const p of registered) {\n console.log(` ✓ ${p.name} → ${p.path}`);\n }\n console.log();\n }\n });\n\n// ── Schedule Command ──────────────────────────────────────────────\n\nconst scheduleCmd = program\n .command(\"schedule\")\n .description(\"Manage scheduled tasks\");\n\nscheduleCmd\n .command(\"list\")\n .option(\"-p, --project <name>\", \"Filter by project\")\n .description(\"List scheduled tasks\")\n .action(async (opts: { project?: string }) => {\n const { ScheduledTaskRepository } = await import(\"@brainst0rm/scheduler\");\n const { ProjectManager } = await import(\"@brainst0rm/projects\");\n const db = getDb();\n const taskRepo = new ScheduledTaskRepository(db);\n\n let projectId: string | undefined;\n if (opts.project) {\n const pm = new ProjectManager(db);\n const p = pm.projects.getByName(opts.project);\n if (!p) {\n console.error(` Project \"${opts.project}\" not found.`);\n return;\n }\n projectId = p.id;\n }\n\n const tasks = taskRepo.list(projectId, \"active\");\n console.log(\"\\n Scheduled Tasks:\\n\");\n if (tasks.length === 0) {\n console.log(\n ' No tasks. Add one: storm schedule add \"<prompt>\" --project <name>\\n',\n );\n return;\n }\n for (const t of tasks) {\n const cron = t.cronExpression || \"one-shot\";\n const mutations = t.allowMutations ? \"read+write\" : \"read-only\";\n const budget = t.budgetLimit\n ? `$${t.budgetLimit.toFixed(2)}`\n : \"no limit\";\n console.log(\n ` ${t.name.padEnd(25)} ${cron.padEnd(18)} ${mutations.padEnd(12)} ${budget}`,\n );\n }\n console.log();\n });\n\nscheduleCmd\n .command(\"add\")\n .argument(\"<prompt>\", \"Task instruction\")\n .requiredOption(\"-p, --project <name>\", \"Project name\")\n .option(\"-n, --name <name>\", \"Task name (default: first 30 chars of prompt)\")\n .option(\"--cron <expression>\", \"Cron schedule (e.g. '0 9 * * *')\")\n .option(\"--budget <amount>\", \"Budget limit per run in dollars\", \"0.50\")\n .option(\"--max-turns <n>\", \"Maximum turns per run\", \"20\")\n .option(\"--allow-mutations\", \"Allow file writes and shell commands\")\n .option(\"--model <id>\", \"Model override for this task\")\n .description(\"Add a scheduled task\")\n .action(async (prompt: string, opts: any) => {\n const { ScheduledTaskRepository, validateCron, validateTaskSafety } =\n await import(\"@brainst0rm/scheduler\");\n const { ProjectManager } = await import(\"@brainst0rm/projects\");\n const db = getDb();\n const pm = new ProjectManager(db);\n const project = pm.projects.getByName(opts.project);\n if (!project) {\n console.error(` Project \"${opts.project}\" not found.`);\n return;\n }\n\n if (opts.cron) {\n const err = validateCron(opts.cron);\n if (err) {\n console.error(` Invalid cron: ${err}`);\n return;\n }\n }\n\n const taskRepo = new ScheduledTaskRepository(db);\n const task = taskRepo.create({\n projectId: project.id,\n name: opts.name || prompt.slice(0, 30),\n prompt,\n cronExpression: opts.cron,\n budgetLimit: parseFloat(opts.budget),\n maxTurns: parseInt(opts.maxTurns),\n allowMutations: opts.allowMutations ?? false,\n modelId: opts.model,\n });\n\n const warnings = validateTaskSafety(task);\n console.log(`\\n ✓ Created task \"${task.name}\" (${task.id.slice(0, 8)})`);\n if (task.cronExpression) {\n const { describeCron } = await import(\"@brainst0rm/scheduler\");\n console.log(` Schedule: ${describeCron(task.cronExpression)}`);\n }\n if (warnings.length > 0) {\n console.log(\" Warnings:\");\n for (const w of warnings) console.log(` ⚠ ${w}`);\n }\n console.log();\n });\n\nscheduleCmd\n .command(\"run\")\n .option(\"--task-id <id>\", \"Run a specific task\")\n .option(\"--dry-run\", \"Show what would run without executing\")\n .description(\"Trigger due tasks\")\n .action(async (opts: { taskId?: string; dryRun?: boolean }) => {\n const { TriggerRunner } = await import(\"@brainst0rm/scheduler\");\n const db = getDb();\n const runner = new TriggerRunner(db);\n const result = await runner.runDueTasks(opts);\n\n console.log(`\\n Checked: ${result.tasksChecked} tasks`);\n console.log(` Run: ${result.tasksRun}`);\n if (result.tasksFailed > 0) console.log(` Failed: ${result.tasksFailed}`);\n if (result.tasksSkipped > 0)\n console.log(` Skipped: ${result.tasksSkipped} (concurrency limit)`);\n\n for (const r of result.runs) {\n const icon =\n r.status === \"completed\" ? \"✓\" : r.status === \"failed\" ? \"✗\" : \"○\";\n console.log(\n ` ${icon} ${r.taskName} → ${r.status}${r.error ? ` (${r.error})` : \"\"}`,\n );\n }\n console.log();\n });\n\nscheduleCmd\n .command(\"history\")\n .option(\"--task-id <id>\", \"Filter by task\")\n .option(\"-n, --limit <count>\", \"Number of runs to show\", \"10\")\n .description(\"Show task run history\")\n .action(async (opts: { taskId?: string; limit: string }) => {\n const { TaskRunRepository, ScheduledTaskRepository } =\n await import(\"@brainst0rm/scheduler\");\n const db = getDb();\n const runRepo = new TaskRunRepository(db);\n const taskRepo = new ScheduledTaskRepository(db);\n\n const runs = opts.taskId\n ? runRepo.listByTask(opts.taskId, parseInt(opts.limit))\n : runRepo.listRecent(parseInt(opts.limit));\n\n console.log(\"\\n Task Run History:\\n\");\n if (runs.length === 0) {\n console.log(\" No runs yet.\\n\");\n return;\n }\n for (const r of runs) {\n const task = taskRepo.getById(r.taskId);\n const icon =\n r.status === \"completed\" ? \"✓\" : r.status === \"failed\" ? \"✗\" : \"●\";\n const date = new Date(r.createdAt * 1000).toLocaleString();\n console.log(\n ` ${icon} ${(task?.name ?? r.taskId.slice(0, 8)).padEnd(22)} $${r.cost.toFixed(4).padEnd(10)} ${r.status.padEnd(16)} ${date}`,\n );\n }\n console.log();\n });\n\nscheduleCmd\n .command(\"pause\")\n .argument(\"<task-id>\", \"Task ID to pause\")\n .description(\"Pause a scheduled task\")\n .action(async (taskId: string) => {\n const { ScheduledTaskRepository } = await import(\"@brainst0rm/scheduler\");\n const db = getDb();\n const repo = new ScheduledTaskRepository(db);\n repo.updateStatus(taskId, \"paused\");\n console.log(` ✓ Paused task ${taskId.slice(0, 8)}\\n`);\n });\n\nscheduleCmd\n .command(\"resume\")\n .argument(\"<task-id>\", \"Task ID to resume\")\n .description(\"Resume a paused task\")\n .action(async (taskId: string) => {\n const { ScheduledTaskRepository } = await import(\"@brainst0rm/scheduler\");\n const db = getDb();\n const repo = new ScheduledTaskRepository(db);\n repo.updateStatus(taskId, \"active\");\n console.log(` ✓ Resumed task ${taskId.slice(0, 8)}\\n`);\n });\n\nscheduleCmd\n .command(\"delete\")\n .argument(\"<task-id>\", \"Task ID to delete\")\n .description(\"Delete a scheduled task\")\n .action(async (taskId: string) => {\n const { ScheduledTaskRepository } = await import(\"@brainst0rm/scheduler\");\n const db = getDb();\n const repo = new ScheduledTaskRepository(db);\n repo.delete(taskId);\n console.log(` ✓ Deleted task ${taskId.slice(0, 8)}\\n`);\n });\n\n// ── Plan Command ──────────────────────────────────────────────────\n\nconst planCmd = program\n .command(\"plan\")\n .description(\"Execute and manage structured plans\");\n\nplanCmd\n .command(\"execute\")\n .argument(\"<path>\", \"Path to .plan.md file\")\n .option(\"--auto\", \"Run autonomously (no pauses)\")\n .option(\"--dry-run\", \"Show dispatch plan without executing\")\n .option(\"--budget <amount>\", \"Total budget limit in dollars\")\n .option(\"--task-budget <amount>\", \"Per-task budget limit\", \"0.50\")\n .option(\"--retries <n>\", \"Max retries per task\", \"2\")\n .description(\"Execute a plan file task-by-task using subagents\")\n .action(async (path: string, opts: any) => {\n const { executePlan } = await import(\"@brainst0rm/core\");\n const { resolve } = await import(\"node:path\");\n const { execFileSync } = await import(\"node:child_process\");\n\n const planPath = resolve(path);\n const mode = opts.dryRun\n ? \"dry-run\"\n : opts.auto\n ? \"autonomous\"\n : \"interactive\";\n\n console.log(`\\n Plan Executor (${mode} mode)\\n`);\n\n const dispatcher = {\n async execute(prompt: string, execOpts: any) {\n console.log(\n ` Dispatching: ${execOpts.subagentType}/${execOpts.modelHint}`,\n );\n return {\n text: `[Placeholder] Completed via ${execOpts.subagentType} subagent`,\n cost: 0,\n modelUsed: execOpts.modelHint,\n toolCalls: [],\n budgetExceeded: false,\n };\n },\n async checkBuild(command: string, cwd: string) {\n const parts = command.split(/\\s+/);\n try {\n execFileSync(parts[0], parts.slice(1), {\n cwd,\n timeout: 60000,\n stdio: \"pipe\",\n });\n return { passed: true, output: \"\" };\n } catch (err: any) {\n return {\n passed: false,\n output: err.stderr?.toString()?.slice(0, 500) ?? \"\",\n };\n }\n },\n };\n\n try {\n for await (const event of executePlan(planPath, dispatcher, {\n projectPath: process.cwd(),\n buildCommand: \"npx turbo run build --force\",\n defaultBudgetPerTask: parseFloat(opts.taskBudget),\n planBudgetLimit: opts.budget ? parseFloat(opts.budget) : undefined,\n mode,\n maxRetries: parseInt(opts.retries),\n compactBetweenPhases: true,\n })) {\n switch (event.type) {\n case \"plan-started\":\n console.log(` Plan: ${event.plan.name}`);\n console.log(` Tasks: ${event.totalTasks} pending\\n`);\n break;\n case \"phase-started\":\n console.log(` ── ${event.phase.name} ──`);\n break;\n case \"sprint-started\":\n console.log(` ${event.sprint.name}`);\n break;\n case \"task-started\":\n console.log(\n ` ● ${event.task.description.slice(0, 60)} [${event.subagentType}/${event.model}]`,\n );\n break;\n case \"task-completed\":\n console.log(\n ` ✓ ${event.task.description.slice(0, 60)} $${event.cost.toFixed(4)}`,\n );\n break;\n case \"task-failed\":\n console.log(\n ` ✗ ${event.task.description.slice(0, 60)} ${event.reason}`,\n );\n break;\n case \"task-retrying\":\n console.log(` ↻ Retry #${event.attempt} with ${event.model}`);\n break;\n case \"task-budget-exceeded\":\n console.log(` $ Budget exceeded: $${event.cost.toFixed(4)}`);\n break;\n case \"build-check\":\n console.log(\n ` ${event.passed ? \"✓\" : \"✗\"} Build ${event.passed ? \"passed\" : \"FAILED\"}`,\n );\n break;\n case \"phase-completed\":\n console.log(\n ` ✓ ${event.phase.name} complete $${event.cost.toFixed(4)}\\n`,\n );\n break;\n case \"plan-completed\":\n console.log(` ═══════════════════════════════`);\n console.log(\n ` Plan complete: $${event.totalCost.toFixed(4)} total\\n`,\n );\n break;\n case \"plan-paused\":\n console.log(`\\n ⚠ Paused: ${event.reason}\\n`);\n break;\n case \"skill-activated\":\n console.log(` ✦ Skill: ${event.skillName}`);\n break;\n case \"dry-run-task\": {\n const d = event.dispatch;\n console.log(\n ` ○ ${event.task.description.slice(0, 45).padEnd(47)} ${d.subagentType.padEnd(10)} ${d.modelHint.padEnd(10)} ~$${event.estimatedCost.toFixed(2)}`,\n );\n break;\n }\n case \"dry-run-summary\":\n console.log(\n `\\n Summary: ${event.totalTasks} tasks, ~$${event.estimatedCost.toFixed(2)} estimated`,\n );\n console.log(\n ` By type: ${Object.entries(event.tasksByType)\n .map(([k, v]) => `${k}:${v}`)\n .join(\", \")}\\n`,\n );\n break;\n }\n }\n } catch (err) {\n console.error(\n `\\n ✗ ${err instanceof Error ? err.message : String(err)}\\n`,\n );\n }\n });\n\nplanCmd\n .command(\"parse\")\n .argument(\"<path>\", \"Path to .plan.md file\")\n .description(\"Parse and display a plan file structure\")\n .action(async (path: string) => {\n const { parsePlanFile } = await import(\"@brainst0rm/core\");\n const { resolve } = await import(\"node:path\");\n let plan;\n try {\n plan = parsePlanFile(resolve(path));\n } catch (err) {\n console.error(\n `\\n ✗ ${err instanceof Error ? err.message : String(err)}\\n`,\n );\n return;\n }\n\n console.log(`\\n ${plan.name} (${plan.status})`);\n console.log(` ${plan.completedTasks}/${plan.totalTasks} tasks complete\\n`);\n\n for (const phase of plan.phases) {\n const icon =\n phase.status === \"completed\"\n ? \"✓\"\n : phase.status === \"in_progress\"\n ? \"◐\"\n : \"○\";\n console.log(\n ` ${icon} ${phase.name} ${phase.completedCount}/${phase.taskCount}`,\n );\n for (const sprint of phase.sprints) {\n console.log(` ${sprint.name}`);\n for (const task of sprint.tasks) {\n const tIcon = task.status === \"completed\" ? \"✓\" : \"○\";\n const cost = task.cost ? `$${task.cost.toFixed(2)}` : \"\";\n const skill = task.assignedSkill ? `[${task.assignedSkill}]` : \"\";\n console.log(` ${tIcon} ${task.description} ${skill} ${cost}`);\n }\n }\n }\n console.log();\n });\n\n// ── Orchestrate Command ───────────────────────────────────────────\n\nconst orchestrateCmd = program\n .command(\"orchestrate\")\n .description(\"Coordinate work across multiple projects\");\n\norchestrateCmd\n .command(\"pipeline\")\n .argument(\"<request>\", \"What to build (natural language)\")\n .option(\"--build <cmd>\", \"Build command\", \"npx turbo run build --force\")\n .option(\"--test <cmd>\", \"Test command\", \"npx turbo run test\")\n .option(\"--deploy\", \"Include deployment phase\")\n .option(\"--budget <amount>\", \"Total budget limit in dollars\")\n .option(\n \"--phases <list>\",\n \"Comma-separated phases to run (spec,architecture,implementation,review,verify,refactor,deploy,document,report)\",\n )\n .option(\"--resume-from <phase>\", \"Resume from a specific phase\")\n .option(\"--dry-run\", \"Show what agents would be dispatched\")\n .description(\"Run the full 9-phase development pipeline\")\n .action(async (request: string, opts: any) => {\n const { runOrchestrationPipeline, createPipelineDispatcher } =\n await import(\"@brainst0rm/core\");\n\n console.log(`\\n Orchestration Pipeline\\n`);\n console.log(` Request: \"${request}\"`);\n console.log(` Mode: ${opts.dryRun ? \"dry-run\" : \"execute\"}\\n`);\n\n // Set up real runtime — env vars only (no vault prompt for non-interactive pipeline)\n const config = loadConfig();\n const db = getDb();\n const envKeys = new Map<string, string>();\n for (const name of PROVIDER_KEY_NAMES) {\n const val = process.env[name];\n if (val) envKeys.set(name, val);\n }\n const resolvedKeys: ResolvedKeys = {\n get: (name: string) => envKeys.get(name) ?? null,\n };\n const registry = await createProviderRegistry(config, resolvedKeys);\n const costTracker = new CostTracker(db, config.budget);\n const projectPath = process.cwd();\n const tools = createDefaultToolRegistry();\n const { frontmatter } = buildSystemPrompt(projectPath);\n const router = new BrainstormRouter(\n config,\n registry,\n costTracker,\n frontmatter,\n );\n\n // Create real dispatcher — wired to spawnSubagent() with agent.md definitions\n const dispatcher = createPipelineDispatcher({\n config,\n registry,\n router,\n costTracker,\n tools,\n projectPath,\n });\n\n // Fallback: if no provider keys, use placeholder\n const hasProviders = PROVIDER_KEY_NAMES.some(\n (k) => resolvedKeys.get(k) !== null,\n );\n if (!hasProviders && !opts.dryRun) {\n console.log(\n \" ⚠ No model providers configured. Using placeholder dispatcher.\",\n );\n console.log(\" Set API keys via: storm vault add ANTHROPIC_API_KEY\\n\");\n }\n\n const activeDispatcher =\n hasProviders || opts.dryRun\n ? dispatcher\n : {\n async runPhase(\n agentId: string,\n subagentType: string,\n prompt: string,\n phaseOpts: any,\n ) {\n console.log(` Agent: ${agentId} (${subagentType})`);\n return {\n text: `[No providers] ${agentId} would execute`,\n cost: 0,\n toolCalls: [],\n };\n },\n async runParallel(specs: any[], phaseOpts: any) {\n return specs.map((s: any) => {\n console.log(` Agent: ${s.agentId} (${s.subagentType})`);\n return {\n agentId: s.agentId,\n text: `[No providers] ${s.agentId} would execute`,\n cost: 0,\n toolCalls: [],\n };\n });\n },\n async runCommand(command: string, cwd: string) {\n const { execFileSync } = await import(\"node:child_process\");\n const parts = command.split(/\\s+/);\n try {\n execFileSync(parts[0], parts.slice(1), {\n cwd,\n timeout: 120000,\n stdio: \"pipe\",\n });\n return { passed: true, output: \"\" };\n } catch (err: any) {\n return {\n passed: false,\n output: err.stderr?.toString()?.slice(0, 500) ?? \"\",\n };\n }\n },\n };\n\n const phases = opts.phases?.split(\",\") ?? undefined;\n\n for await (const event of runOrchestrationPipeline(\n request,\n activeDispatcher,\n {\n projectPath,\n buildCommand: opts.build,\n testCommand: opts.test,\n deploy: opts.deploy,\n budget: opts.budget ? parseFloat(opts.budget) : undefined,\n phases,\n resumeFrom: opts.resumeFrom,\n dryRun: opts.dryRun,\n },\n )) {\n switch (event.type) {\n case \"pipeline-started\":\n console.log(` Phases: ${event.phases.join(\" → \")}\\n`);\n break;\n case \"phase-started\":\n console.log(\n ` ── ${event.phase.toUpperCase()} ── (${event.agentId})`,\n );\n break;\n case \"phase-completed\":\n const icon = event.result.success ? \"✓\" : \"✗\";\n console.log(\n ` ${icon} ${event.result.phase} $${event.result.cost.toFixed(4)} ${event.result.duration}ms`,\n );\n if (event.result.output && !event.result.output.startsWith(\"[\")) {\n console.log(\n ` ${event.result.output.split(\"\\n\")[0].slice(0, 100)}`,\n );\n }\n console.log();\n break;\n case \"phase-failed\":\n console.log(` ✗ ${event.phase}: ${event.error}\\n`);\n break;\n case \"review-findings\":\n console.log(\n ` Reviews: ${event.findings.length} finding(s)${event.hasCritical ? \" (CRITICAL)\" : \"\"}`,\n );\n for (const f of event.findings.slice(0, 5)) {\n console.log(` [${f.severity}] ${f.description.slice(0, 80)}`);\n }\n console.log();\n break;\n case \"feedback-loop\":\n console.log(\n ` ↻ Feedback: ${event.from} → ${event.to} (${event.reason})\\n`,\n );\n break;\n case \"pipeline-completed\":\n console.log(` ═══════════════════════════════════`);\n console.log(\n ` Pipeline complete: $${event.totalCost.toFixed(4)} total`,\n );\n console.log(\n ` ${event.results.filter((r) => r.success).length}/${event.results.length} phases succeeded\\n`,\n );\n break;\n case \"pipeline-paused\":\n console.log(` ⚠ Paused at ${event.phase}: ${event.reason}\\n`);\n break;\n }\n }\n });\n\norchestrateCmd\n .command(\"run\")\n .argument(\"<description>\", \"What to do across projects\")\n .requiredOption(\"-p, --projects <names>\", \"Comma-separated project names\")\n .option(\"--budget <amount>\", \"Total budget limit in dollars\")\n .option(\"--type <type>\", \"Subagent type (explore, code, review)\", \"code\")\n .description(\"Run a cross-project orchestration\")\n .action(\n async (\n description: string,\n opts: { projects: string; budget?: string; type: string },\n ) => {\n const { OrchestrationEngine, formatAggregatedResults, aggregateResults } =\n await import(\"@brainst0rm/orchestrator\");\n const { ProjectManager } = await import(\"@brainst0rm/projects\");\n const db = getDb();\n const engine = new OrchestrationEngine(db);\n const pm = new ProjectManager(db);\n\n const projectNames = opts.projects\n .split(\",\")\n .map((s: string) => s.trim());\n\n console.log(\n `\\n Orchestrating across ${projectNames.length} projects...`,\n );\n console.log(` \"${description}\"\\n`);\n\n try {\n for await (const event of engine.run({\n description,\n projectNames,\n budgetLimit: opts.budget ? parseFloat(opts.budget) : undefined,\n subagentType: opts.type,\n })) {\n switch (event.type) {\n case \"plan-ready\":\n console.log(` Plan: ${event.tasks.length} tasks created`);\n break;\n case \"task-started\":\n console.log(` ● ${event.project.name} — starting...`);\n break;\n case \"task-completed\":\n console.log(\n ` ✓ ${event.project.name} — $${event.cost.toFixed(4)}`,\n );\n if (event.summary)\n console.log(` ${event.summary.slice(0, 120)}`);\n break;\n case \"task-failed\":\n console.log(` ✗ ${event.project.name} — ${event.error}`);\n break;\n case \"orchestration-completed\": {\n const projectMap = new Map<string, string>();\n for (const name of projectNames) {\n const p = pm.projects.getByName(name);\n if (p) projectMap.set(p.id, p.name);\n }\n const tasks = event.results.map((r, i) => ({\n ...event.run,\n projectId: projectMap.get(r.projectName) ?? r.projectName,\n }));\n console.log(`\\n ── Complete ──`);\n console.log(` Total cost: $${event.run.totalCost.toFixed(4)}`);\n console.log(\n ` ${event.results.filter((r) => !r.summary.startsWith(\"FAILED\")).length}/${event.results.length} succeeded\\n`,\n );\n break;\n }\n }\n }\n } catch (err) {\n console.error(\n `\\n ✗ ${err instanceof Error ? err.message : String(err)}\\n`,\n );\n }\n },\n );\n\norchestrateCmd\n .command(\"history\")\n .option(\"-n, --limit <count>\", \"Number of runs to show\", \"10\")\n .description(\"Show recent orchestration runs\")\n .action(async (opts: { limit: string }) => {\n const { OrchestrationEngine } = await import(\"@brainst0rm/orchestrator\");\n const db = getDb();\n const engine = new OrchestrationEngine(db);\n const runs = engine.listRecent(parseInt(opts.limit));\n\n console.log(\"\\n Orchestration History:\\n\");\n if (runs.length === 0) {\n console.log(\" No orchestration runs yet.\\n\");\n return;\n }\n for (const r of runs) {\n const icon =\n r.status === \"completed\"\n ? \"✓\"\n : r.status === \"failed\"\n ? \"✗\"\n : r.status === \"cancelled\"\n ? \"○\"\n : \"●\";\n const date = new Date(r.createdAt * 1000).toLocaleString();\n console.log(\n ` ${icon} ${r.name.slice(0, 40).padEnd(42)} $${r.totalCost.toFixed(4).padEnd(10)} ${r.status.padEnd(12)} ${date}`,\n );\n }\n console.log();\n });\n\norchestrateCmd\n .command(\"status\")\n .argument(\"<run-id>\", \"Orchestration run ID\")\n .description(\"Show status of an orchestration run\")\n .action(async (runId: string) => {\n const { OrchestrationEngine } = await import(\"@brainst0rm/orchestrator\");\n const { ProjectManager } = await import(\"@brainst0rm/projects\");\n const db = getDb();\n const engine = new OrchestrationEngine(db);\n const pm = new ProjectManager(db);\n const detail = engine.getRunWithTasks(runId);\n if (!detail) {\n console.error(` Run \"${runId}\" not found.\\n`);\n return;\n }\n\n console.log(`\\n ── ${detail.run.name} ──`);\n console.log(` Status: ${detail.run.status}`);\n console.log(` Cost: $${detail.run.totalCost.toFixed(4)}`);\n console.log(` Tasks: ${detail.tasks.length}\\n`);\n\n for (const t of detail.tasks) {\n const project = pm.projects.getById(t.projectId);\n const icon =\n t.status === \"completed\"\n ? \"✓\"\n : t.status === \"failed\"\n ? \"✗\"\n : t.status === \"skipped\"\n ? \"○\"\n : \"●\";\n console.log(\n ` ${icon} ${(project?.name ?? t.projectId.slice(0, 8)).padEnd(25)} ${t.status.padEnd(12)} $${t.cost.toFixed(4)}`,\n );\n if (t.resultSummary)\n console.log(` ${t.resultSummary.slice(0, 100)}`);\n }\n console.log();\n });\n\n// ── Intelligence Command ───────────────────────────────────────────\n\nprogram\n .command(\"intelligence\")\n .alias(\"intel\")\n .description(\"Show what BrainstormRouter has learned about your usage\")\n .option(\"--json\", \"Output as JSON\")\n .option(\n \"--period <period>\",\n \"Usage period (daily, weekly, monthly)\",\n \"weekly\",\n )\n .action(async (opts: { json?: boolean; period: string }) => {\n const gw = createGatewayClient();\n const intel = createIntelligenceClient();\n\n if (!gw) {\n console.log(\n \"\\n No BRAINSTORM_API_KEY set. Cannot connect to BrainstormRouter.\\n\",\n );\n process.exit(1);\n }\n\n console.log(\"\\n Fetching intelligence from BrainstormRouter...\\n\");\n\n // Fetch all data in parallel — graceful fallback on each endpoint\n const [\n leaderboard,\n usage,\n waste,\n forecast,\n daily,\n governance,\n recommendations,\n patterns,\n ] = await Promise.all([\n gw.getLeaderboard().catch(() => []),\n gw.getUsageSummary(opts.period).catch(() => null),\n gw.getWasteInsights().catch(() => null),\n gw.getForecast().catch(() => null),\n gw.getDailyInsights().catch(() => []),\n gw.getGovernanceSummary().catch(() => null),\n intel?.getRecommendations(\"code\", \"typescript\").catch(() => []) ?? [],\n intel?.getPatterns(\"typescript\").catch(() => []) ?? [],\n ]);\n\n if (opts.json) {\n console.log(\n JSON.stringify(\n {\n leaderboard,\n usage,\n waste,\n forecast,\n daily,\n governance,\n recommendations,\n patterns,\n },\n null,\n 2,\n ),\n );\n return;\n }\n\n // ── Header ──\n console.log(\" ══════════════════════════════════════════════════\");\n console.log(\" BrainstormRouter Intelligence Report\");\n console.log(\" ══════════════════════════════════════════════════\\n\");\n\n // ── Learning Status ──\n // Usage shape: { data: [{ requestCount, totalCostUsd, ... }] }\n const usageData = (usage as any)?.data?.[0];\n const totalRequests = usageData?.requestCount ?? 0;\n const confidence =\n totalRequests >= 200 ? \"HIGH\" : totalRequests >= 50 ? \"MEDIUM\" : \"LOW\";\n const confidenceNote =\n confidence === \"LOW\"\n ? ` (need ${200 - totalRequests} more for high confidence)`\n : \"\";\n console.log(\n ` Learning Status: ${totalRequests.toLocaleString()} requests analyzed`,\n );\n console.log(` Routing Confidence: ${confidence}${confidenceNote}\\n`);\n\n // ── Model Performance ──\n // Leaderboard shape: { id, model_id, reward_score, value_score, latency_ms, sample_count, ... }\n const realLeaderboard = leaderboard.filter(\n (m: any) => m.id && !m.id.startsWith(\"cache/\"),\n );\n if (realLeaderboard.length > 0) {\n console.log(\" Model Performance:\\n\");\n for (const entry of realLeaderboard.slice(0, 8)) {\n const m = entry as any;\n const modelName = m.model_id ?? m.id ?? m.model ?? \"unknown\";\n const name =\n modelName.length > 35 ? modelName.slice(0, 35) + \"…\" : modelName;\n const latency =\n m.latency_ms != null\n ? m.latency_ms < 1000\n ? `${Math.round(m.latency_ms)}ms`\n : `${(m.latency_ms / 1000).toFixed(1)}s`\n : \" n/a\";\n const reward =\n m.reward_score != null\n ? (m.reward_score * 100).toFixed(0) + \"%\"\n : \"n/a\";\n const value = m.value_score != null ? m.value_score.toFixed(0) : \"n/a\";\n const samples = m.sample_count ?? m.request_count ?? 0;\n const isBest = entry === realLeaderboard[0] ? \" ← BEST\" : \"\";\n console.log(\n ` ${name.padEnd(37)} reward:${reward.padStart(4)} value:${value.padStart(5)} ${latency.padStart(6)} (${samples} samples)${isBest}`,\n );\n }\n console.log();\n }\n\n // ── What the System Learned ──\n if (recommendations.length > 0) {\n console.log(\" What the system learned:\\n\");\n for (const rec of recommendations.slice(0, 5)) {\n const r = rec as any;\n const conf =\n r.confidence != null ? `${Math.round(r.confidence * 100)}%` : \"\";\n console.log(\n ` • ${r.taskType} → ${r.recommendedModel} (${conf} confidence)`,\n );\n if (r.reasoning) {\n console.log(` ${r.reasoning}`);\n }\n }\n console.log();\n }\n\n // ── Cost Intelligence ──\n if (usageData) {\n const totalTokens =\n (usageData.totalInputTokens ?? 0) + (usageData.totalOutputTokens ?? 0);\n console.log(\" Cost Summary:\\n\");\n console.log(` Period: ${(usage as any)?.period ?? opts.period}`);\n console.log(\n ` Total: $${(usageData.totalCostUsd ?? 0).toFixed(4)}`,\n );\n console.log(\n ` Requests: ${(usageData.requestCount ?? 0).toLocaleString()}`,\n );\n console.log(` Tokens: ${totalTokens.toLocaleString()}`);\n console.log(\n ` Avg latency: ${(usageData.avgLatencyMs ?? 0).toFixed(0)}ms`,\n );\n console.log();\n }\n\n // ── Budget Forecast ──\n // Forecast shape: { forecast: { avgDailySpendUsd, trend, confidence, projectedPeriodSpendUsd }, todaySpendUsd, daysOfData }\n const fc = (forecast as any)?.forecast;\n if (fc) {\n const trend = fc.trend ?? \"stable\";\n const trendIcon =\n trend === \"increasing\" ? \"↑\" : trend === \"decreasing\" ? \"↓\" : \"→\";\n console.log(\" Budget Forecast:\\n\");\n console.log(\n ` Avg daily: $${(fc.avgDailySpendUsd ?? 0).toFixed(2)} (${trendIcon} ${trend})`,\n );\n console.log(\n ` Projected: $${(fc.projectedPeriodSpendUsd ?? 0).toFixed(2)}`,\n );\n console.log(\n ` Today: $${((forecast as any)?.todaySpendUsd ?? 0).toFixed(4)}`,\n );\n console.log(\n ` Data points: ${(forecast as any)?.daysOfData ?? 0} days`,\n );\n console.log();\n }\n\n // ── Waste Insights ──\n // Waste shape: { estimatedWasteUsd, overQualifiedModels: [...], duplicateRequests: [...] }\n const wasteAny = waste as any;\n if (\n wasteAny &&\n (wasteAny.overQualifiedModels?.length > 0 ||\n wasteAny.duplicateRequests?.length > 0)\n ) {\n console.log(\" Optimization Opportunities:\\n\");\n console.log(\n ` Total recoverable: $${(wasteAny.estimatedWasteUsd ?? 0).toFixed(4)}\\n`,\n );\n for (const m of (wasteAny.overQualifiedModels ?? []).slice(0, 3)) {\n console.log(\n ` • ${m.model}: $${m.totalCostUsd.toFixed(4)} on ${m.requestCount} reqs`,\n );\n console.log(` → ${m.suggestion}`);\n }\n const dupeCount = (wasteAny.duplicateRequests ?? []).length;\n if (dupeCount > 0) {\n const totalDupeWaste = (wasteAny.duplicateRequests ?? []).reduce(\n (sum: number, d: any) => sum + (d.wastedCostUsd ?? 0),\n 0,\n );\n console.log(\n ` • ${dupeCount} duplicate request patterns ($${totalDupeWaste.toFixed(4)} wasted)`,\n );\n console.log(` → Enable prompt caching to reduce duplicates`);\n }\n console.log();\n }\n\n // ── Community Patterns ──\n if (patterns.length > 0) {\n console.log(\" Community Patterns (TypeScript):\\n\");\n for (const p of patterns.slice(0, 3)) {\n const pat = p as any;\n console.log(\n ` • ${pat.taskType}: prefer ${(pat.preferredTools ?? []).join(\", \")} (${pat.confirmations ?? 0} confirmations)`,\n );\n if (pat.avoidTools?.length > 0) {\n console.log(` avoid: ${pat.avoidTools.join(\", \")}`);\n }\n }\n console.log();\n }\n\n // ── Governance ──\n if (governance) {\n const gov = governance as any;\n console.log(\" Governance:\\n\");\n if (gov.memory_health) {\n console.log(\n ` Memory: ${gov.memory_health.total_entries} entries (${gov.memory_health.compliance_status})`,\n );\n }\n if (gov.audit_stats) {\n console.log(\n ` Audit: ${gov.audit_stats.total_requests} requests, ${gov.audit_stats.flagged} flagged`,\n );\n }\n if (gov.anomaly_score != null) {\n console.log(\n ` Anomaly: ${gov.anomaly_score.toFixed(2)} (0=clean, 1=suspicious)`,\n );\n }\n console.log();\n }\n\n console.log(\" ──────────────────────────────────────────────────\");\n console.log(\n ` Tip: Run \\`storm intel --json\\` for machine-readable output.`,\n );\n console.log();\n });\n\n// ── Analyze Command ───────────────────────────────────────────────\n\nprogram\n .command(\"analyze\")\n .description(\n \"Analyze a codebase — languages, frameworks, dependencies, complexity\",\n )\n .argument(\"[path]\", \"Project path to analyze\", \".\")\n .option(\"--json\", \"Output as JSON\")\n .action(async (projectPath: string, opts: { json?: boolean }) => {\n const { resolve } = await import(\"node:path\");\n const absPath = resolve(projectPath);\n\n console.log(`\\n Analyzing ${absPath}...\\n`);\n const startTime = Date.now();\n\n const { analyzeProject } = await import(\"@brainst0rm/ingest\");\n const analysis = analyzeProject(absPath);\n const elapsed = Date.now() - startTime;\n\n if (opts.json) {\n console.log(JSON.stringify(analysis, null, 2));\n return;\n }\n\n console.log(\" ══════════════════════════════════════════════════\");\n console.log(\" Codebase Analysis\");\n console.log(\" ══════════════════════════════════════════════════\\n\");\n\n console.log(\n ` ${analysis.summary.totalFiles} files | ${analysis.summary.totalLines.toLocaleString()} lines | ${analysis.summary.primaryLanguage}`,\n );\n console.log(\n ` ${analysis.summary.moduleCount} modules | avg complexity: ${analysis.summary.avgComplexity}/100 | ${elapsed}ms\\n`,\n );\n\n // Languages\n console.log(\" Languages:\");\n for (const l of analysis.languages.languages.slice(0, 8)) {\n const bar = \"█\".repeat(Math.max(1, Math.round(l.percentage / 5)));\n console.log(\n ` ${l.language.padEnd(15)} ${bar} ${l.percentage}% (${l.files} files, ${l.lines.toLocaleString()} lines)`,\n );\n }\n\n // Frameworks\n const hasStack =\n analysis.frameworks.frameworks.length > 0 ||\n analysis.frameworks.buildTools.length > 0;\n if (hasStack) {\n console.log(\"\\n Stack:\");\n if (analysis.frameworks.frameworks.length > 0)\n console.log(\n ` Frameworks: ${analysis.frameworks.frameworks.join(\", \")}`,\n );\n if (analysis.frameworks.buildTools.length > 0)\n console.log(\n ` Build: ${analysis.frameworks.buildTools.join(\", \")}`,\n );\n if (analysis.frameworks.databases.length > 0)\n console.log(\n ` Databases: ${analysis.frameworks.databases.join(\", \")}`,\n );\n if (analysis.frameworks.testing.length > 0)\n console.log(\n ` Testing: ${analysis.frameworks.testing.join(\", \")}`,\n );\n if (analysis.frameworks.deployment.length > 0)\n console.log(\n ` Deploy: ${analysis.frameworks.deployment.join(\", \")}`,\n );\n if (analysis.frameworks.ci.length > 0)\n console.log(` CI/CD: ${analysis.frameworks.ci.join(\", \")}`);\n }\n\n // Complexity hotspots\n if (analysis.complexity.summary.hotspots.length > 0) {\n console.log(\"\\n Complexity Hotspots (score > 70):\");\n for (const f of analysis.complexity.files\n .filter((cf: any) => cf.score >= 70)\n .slice(0, 8)) {\n console.log(\n ` ${f.path.padEnd(50)} score:${f.score} branches:${f.branchCount} nesting:${f.maxNesting}`,\n );\n }\n }\n\n // Module clusters\n if (analysis.dependencies.clusters.length > 0) {\n console.log(\"\\n Module Clusters (by size):\");\n for (const c of analysis.dependencies.clusters.slice(0, 8)) {\n const cohesionLabel =\n c.cohesion > 0.5 ? \"high\" : c.cohesion > 0.2 ? \"med\" : \"low\";\n console.log(\n ` ${c.directory.padEnd(40)} ${c.files.length} files cohesion:${cohesionLabel}`,\n );\n }\n }\n\n console.log(\"\\n ──────────────────────────────────────────────────\");\n console.log(` Run \\`storm analyze --json\\` for machine-readable output.`);\n console.log();\n });\n\n// ── Docgen Command ────────────────────────────────────────────────\n\nprogram\n .command(\"docgen\")\n .description(\n \"Generate documentation — architecture docs, module docs, API reference\",\n )\n .argument(\"[path]\", \"Project path to document\", \".\")\n .option(\"--output <dir>\", \"Output directory (default: docs/generated)\")\n .option(\"--json\", \"Output file list as JSON\")\n .action(\n async (projectPath: string, opts: { output?: string; json?: boolean }) => {\n const { resolve } = await import(\"node:path\");\n const absPath = resolve(projectPath);\n\n console.log(`\\n Analyzing ${absPath}...`);\n const { analyzeProject } = await import(\"@brainst0rm/ingest\");\n const analysis = analyzeProject(absPath);\n\n console.log(` Generating documentation...\\n`);\n const { generateAllDocs } = await import(\"@brainst0rm/docgen\");\n const result = generateAllDocs(analysis, opts.output);\n\n if (opts.json) {\n console.log(JSON.stringify(result, null, 2));\n return;\n }\n\n console.log(\" ══════════════════════════════════════════════════\");\n console.log(\" Documentation Generated\");\n console.log(\" ══════════════════════════════════════════════════\\n\");\n console.log(` Output: ${result.outputDir}`);\n console.log(` Files written: ${result.filesWritten.length}`);\n console.log(\"\");\n console.log(` Architecture: ${result.architectureDoc}`);\n console.log(` Modules: ${result.moduleDocs} module docs`);\n if (result.apiDoc) {\n console.log(` API Reference: ${result.apiDoc}`);\n } else {\n console.log(` API Reference: (no endpoints detected)`);\n }\n console.log(\"\\n ──────────────────────────────────────────────────\");\n console.log(\n ` Tip: Use these docs as context for AI agents with @docs/generated/ARCHITECTURE.md`,\n );\n console.log();\n },\n );\n\n// ── Spawn Command (Background Worktree Agents) ───────────────────\n\nprogram\n .command(\"spawn\")\n .description(\"Spawn a background agent in an isolated git worktree\")\n .argument(\"<task>\", \"Task description for the background agent\")\n .option(\n \"--type <type>\",\n \"Subagent type (code, review, explore, research)\",\n \"code\",\n )\n .option(\"--budget <amount>\", \"Budget limit in dollars\", \"1.0\")\n .action(async (task: string, opts: { type: string; budget: string }) => {\n const { resolve } = await import(\"node:path\");\n const { createWorktree, removeWorktree } = await import(\"@brainst0rm/core\");\n const projectPath = resolve(\".\");\n const worktreePath = createWorktree(projectPath, opts.type);\n\n console.log(`\\n Spawned background agent in worktree:`);\n console.log(` Path: ${worktreePath}`);\n console.log(` Type: ${opts.type}`);\n console.log(` Budget: $${opts.budget}`);\n console.log(` Task: ${task}`);\n console.log();\n console.log(` The agent is running in an isolated copy of your repo.`);\n console.log(` When done, changes will be on a spec-* branch.`);\n console.log(` Use \\`git worktree list\\` to see active worktrees.`);\n console.log(` Use \\`git diff main...<branch>\\` to review changes.`);\n console.log();\n\n // In a full implementation, this would fork a child process running\n // runAgentLoop in the worktree directory. For now, it sets up the\n // worktree and reports the path for manual or CI-driven execution.\n // The worktree is ready for: storm run --unattended \"<task>\" in the worktree dir.\n console.log(` To run the agent:`);\n console.log(` cd ${worktreePath} && storm run --unattended \"${task}\"`);\n console.log();\n });\n\n// ── Storm Command (Parallel Agent Spawning) ──────────────────────\n\nprogram\n .command(\"storm\")\n .description(\"Run multiple tasks in parallel using subagents\")\n .argument(\n \"<tasks...>\",\n \"Task descriptions (each runs as a separate subagent)\",\n )\n .option(\n \"--type <type>\",\n \"Subagent type for all tasks (explore, plan, code, review, research)\",\n \"code\",\n )\n .option(\"--budget <amount>\", \"Budget limit per task in dollars\", \"1.0\")\n .action(async (tasks: string[], opts: { type: string; budget: string }) => {\n const config = loadConfig();\n const db = getDb();\n const resolvedKeys = await resolveProviderKeys();\n const registry = await createProviderRegistry(config, resolvedKeys);\n const costTracker = new CostTracker(db, config.budget);\n const tools = createDefaultToolRegistry();\n const projectPath = process.cwd();\n const { prompt: systemPrompt, frontmatter } =\n buildSystemPrompt(projectPath);\n const router = new BrainstormRouter(\n config,\n registry,\n costTracker,\n frontmatter,\n );\n\n console.log(`\\n Storm — ${tasks.length} parallel agents`);\n console.log(` Type: ${opts.type} | Budget: $${opts.budget}/task\\n`);\n\n for (let i = 0; i < tasks.length; i++) {\n console.log(` [${i + 1}] ${tasks[i]}`);\n }\n console.log();\n\n const startTime = Date.now();\n const results = await spawnParallel(\n tasks.map((task) => ({ task, type: opts.type as any })),\n {\n config,\n registry,\n router,\n costTracker,\n tools,\n projectPath,\n systemPrompt,\n budgetLimit: parseFloat(opts.budget),\n },\n );\n\n const elapsed = ((Date.now() - startTime) / 1000).toFixed(1);\n console.log(` ──────────────────────────────────────────────────`);\n console.log(` ${results.length} agents completed in ${elapsed}s\\n`);\n\n for (let i = 0; i < results.length; i++) {\n const r = results[i];\n const status = r.text ? \"done\" : \"failed\";\n const cost = `$${r.cost.toFixed(4)}`;\n console.log(\n ` [${i + 1}] ${status} (${r.toolCalls.length} tool calls, ${cost})`,\n );\n if (r.text) {\n // Show first 200 chars of response\n const preview = r.text.slice(0, 200).replace(/\\n/g, \" \");\n console.log(` ${preview}${r.text.length > 200 ? \"...\" : \"\"}`);\n }\n console.log();\n }\n\n const totalCost = results.reduce((sum, r) => sum + r.cost, 0);\n console.log(` Total cost: $${totalCost.toFixed(4)}`);\n console.log();\n closeDb();\n });\n\n// ── Queue Command (Task Queue) ───────────────────────────────────\n\nprogram\n .command(\"queue\")\n .description(\"Manage the task queue for batch execution\")\n .argument(\"<action>\", \"Action: add, list, run, clear\")\n .argument(\"[tasks...]\", \"Task descriptions (for add)\")\n .option(\"--budget <amount>\", \"Total budget limit in dollars\")\n .option(\"--parallel <n>\", \"Max parallel tasks (default: 1)\", \"1\")\n .action(\n async (\n action: string,\n tasks: string[],\n opts: { budget?: string; parallel?: string },\n ) => {\n const { existsSync, readFileSync, writeFileSync, mkdirSync } =\n await import(\"node:fs\");\n const { join } = await import(\"node:path\");\n const { homedir } = await import(\"node:os\");\n\n const queueDir = join(homedir(), \".brainstorm\", \"queue\");\n const queueFile = join(queueDir, \"pending.json\");\n\n if (!existsSync(queueDir)) mkdirSync(queueDir, { recursive: true });\n\n interface QueueItem {\n id: string;\n task: string;\n status: \"pending\" | \"running\" | \"done\" | \"failed\";\n addedAt: string;\n }\n\n const loadQueue = (): QueueItem[] => {\n if (!existsSync(queueFile)) return [];\n try {\n return JSON.parse(readFileSync(queueFile, \"utf-8\"));\n } catch {\n return [];\n }\n };\n const saveQueue = (q: QueueItem[]) =>\n writeFileSync(queueFile, JSON.stringify(q, null, 2), \"utf-8\");\n\n switch (action) {\n case \"add\": {\n if (tasks.length === 0) {\n console.error(\" Error: provide task descriptions to add.\");\n process.exit(1);\n }\n const queue = loadQueue();\n for (const task of tasks) {\n queue.push({\n id: `q-${Date.now()}-${Math.random().toString(36).slice(2, 6)}`,\n task,\n status: \"pending\",\n addedAt: new Date().toISOString(),\n });\n }\n saveQueue(queue);\n console.log(\n `\\n Added ${tasks.length} task(s) to queue. Total: ${queue.length} pending.`,\n );\n break;\n }\n case \"list\": {\n const queue = loadQueue();\n if (queue.length === 0) {\n console.log(\"\\n Queue is empty.\");\n break;\n }\n console.log(`\\n Task Queue (${queue.length} items):\\n`);\n for (const item of queue) {\n const icon =\n item.status === \"done\"\n ? \"✓\"\n : item.status === \"failed\"\n ? \"✗\"\n : item.status === \"running\"\n ? \"⟳\"\n : \"○\";\n console.log(` ${icon} [${item.status}] ${item.task}`);\n }\n break;\n }\n case \"run\": {\n const queue = loadQueue();\n const pending = queue.filter((q) => q.status === \"pending\");\n if (pending.length === 0) {\n console.log(\"\\n No pending tasks in queue.\");\n break;\n }\n console.log(`\\n Running ${pending.length} queued task(s)...`);\n console.log(\n ` Budget: ${opts.budget ?? \"unlimited\"} | Parallel: ${opts.parallel}`,\n );\n console.log(\n `\\n Execute each task with: storm run --unattended \"<task>\"`,\n );\n // Mark as running\n for (const item of pending) item.status = \"running\";\n saveQueue(queue);\n // In full implementation, this would fork child processes.\n // For now, it outputs the commands to run.\n for (const item of pending) {\n console.log(` storm run --unattended \"${item.task}\"`);\n }\n break;\n }\n case \"clear\": {\n saveQueue([]);\n console.log(\"\\n Queue cleared.\");\n break;\n }\n default:\n console.error(\n ` Unknown action: ${action}. Use: add, list, run, clear`,\n );\n }\n console.log();\n },\n );\n\n// ── Search Command (Cross-Repo) ──────────────────────────────────\n\nprogram\n .command(\"search\")\n .description(\"Search code — local semantic search or cross-repo via GitHub\")\n .argument(\"<query>\", \"Search query\")\n .option(\"--global\", \"Search across GitHub (not just local repo)\")\n .option(\"--language <lang>\", \"Filter by language\")\n .option(\"--limit <n>\", \"Max results (default: 10)\", \"10\")\n .action(\n async (\n query: string,\n opts: { global?: boolean; language?: string; limit?: string },\n ) => {\n const limit = parseInt(opts.limit ?? \"10\");\n\n if (opts.global) {\n // Cross-repo search via GitHub Code Search API\n console.log(`\\n Searching GitHub for: \"${query}\"...\\n`);\n const { execFileSync } = await import(\"node:child_process\");\n try {\n const ghArgs = [\"search\", \"code\", query, \"--limit\", String(limit)];\n if (opts.language) ghArgs.push(\"--language\", opts.language);\n const output = execFileSync(\"gh\", ghArgs, {\n encoding: \"utf-8\",\n timeout: 30000,\n stdio: [\"ignore\", \"pipe\", \"pipe\"],\n });\n console.log(output);\n } catch (err: any) {\n if (err.message?.includes(\"ENOENT\")) {\n console.error(\n \" Error: `gh` CLI not found. Install: https://cli.github.com\",\n );\n } else {\n console.error(` Search failed: ${err.message}`);\n }\n }\n } else {\n // Local semantic search\n const { semanticSearch } = await import(\"@brainst0rm/core\");\n const results = semanticSearch(process.cwd(), query, limit);\n if (results.length === 0) {\n console.log(`\\n No results for \"${query}\".`);\n } else {\n console.log(`\\n ${results.length} result(s) for \"${query}\":\\n`);\n for (const r of results) {\n const score = (r.score * 100).toFixed(0);\n console.log(\n ` [${score}%] ${r.filePath}${r.symbolName ? `:${r.symbolName}` : \"\"}`,\n );\n if (r.snippet) {\n console.log(` ${r.snippet.trim().slice(0, 120)}`);\n }\n }\n }\n }\n console.log();\n },\n );\n\n// ── Setup-Infra Command ──────────────────────────────────────────\n\nprogram\n .command(\"setup-infra\")\n .description(\n \"Auto-generate AI infrastructure: BRAINSTORM.md, .agent.md files, routing profiles\",\n )\n .argument(\"[path]\", \"Project path\", \".\")\n .action(async (projectPath: string) => {\n const { resolve, join: pathJoin } = await import(\"node:path\");\n const {\n existsSync,\n writeFileSync: fsWrite,\n mkdirSync: fsMkdir,\n } = await import(\"node:fs\");\n const absPath = resolve(projectPath);\n\n console.log(`\\n Setting up AI infrastructure for ${absPath}...\\n`);\n\n // Phase 1: Analyze\n const { analyzeProject } = await import(\"@brainst0rm/ingest\");\n const analysis = analyzeProject(absPath);\n\n // Phase 2: Auto-generate BRAINSTORM.md (#33)\n const brainstormMdPath = pathJoin(absPath, \"BRAINSTORM.md\");\n if (!existsSync(brainstormMdPath)) {\n const lines = [\n \"---\",\n `build_command: \"npm run build\"`,\n `test_command: \"npm test\"`,\n \"---\",\n \"\",\n `# ${absPath.split(\"/\").pop()}`,\n \"\",\n \"## Stack\",\n \"\",\n ];\n if (analysis.frameworks.frameworks.length > 0)\n lines.push(\n `- Frameworks: ${analysis.frameworks.frameworks.join(\", \")}`,\n );\n if (analysis.languages.primary)\n lines.push(`- Primary language: ${analysis.languages.primary}`);\n if (analysis.frameworks.databases.length > 0)\n lines.push(`- Databases: ${analysis.frameworks.databases.join(\", \")}`);\n if (analysis.frameworks.testing.length > 0)\n lines.push(`- Testing: ${analysis.frameworks.testing.join(\", \")}`);\n\n lines.push(\"\", \"## Architecture\", \"\");\n lines.push(\n `${analysis.summary.totalFiles} files, ${analysis.summary.totalLines.toLocaleString()} lines across ${analysis.summary.moduleCount} modules.`,\n );\n if (analysis.dependencies.entryPoints.length > 0) {\n lines.push(\"\", \"Entry points:\");\n for (const ep of analysis.dependencies.entryPoints.slice(0, 10)) {\n lines.push(`- \\`${ep}\\``);\n }\n }\n\n lines.push(\n \"\",\n \"## Conventions\",\n \"\",\n \"<!-- Add project conventions here -->\",\n );\n\n fsWrite(brainstormMdPath, lines.join(\"\\n\"), \"utf-8\");\n console.log(` ✓ Generated BRAINSTORM.md`);\n } else {\n console.log(` · BRAINSTORM.md already exists (skipped)`);\n }\n\n // Phase 3: Auto-generate .agent.md per module cluster (#34)\n const agentsDir = pathJoin(absPath, \".brainstorm\", \"agents\");\n if (!existsSync(agentsDir)) fsMkdir(agentsDir, { recursive: true });\n\n let agentsCreated = 0;\n for (const cluster of analysis.dependencies.clusters.slice(0, 10)) {\n const safeName = cluster.directory\n .replace(/[/\\\\]/g, \"-\")\n .replace(/^-/, \"\");\n const agentPath = pathJoin(agentsDir, `${safeName}.agent.md`);\n if (existsSync(agentPath)) continue;\n\n const node = analysis.dependencies.nodes.find((n) =>\n cluster.files.includes(n.path),\n );\n const lang = node?.language ?? analysis.languages.primary;\n const exports = cluster.files\n .flatMap(\n (f) =>\n analysis.dependencies.nodes.find((n) => n.path === f)?.exports ??\n [],\n )\n .slice(0, 20);\n\n const agentLines = [\n \"---\",\n `name: ${safeName}-expert`,\n `role: coder`,\n `model: auto`,\n \"---\",\n \"\",\n `# ${safeName} Module Expert`,\n \"\",\n `You are an expert in the ${safeName} module of this project.`,\n \"\",\n `## Context`,\n \"\",\n `- Language: ${lang}`,\n `- Files: ${cluster.files.length}`,\n `- Cohesion: ${cluster.cohesion > 0.5 ? \"high\" : cluster.cohesion > 0.2 ? \"medium\" : \"low\"}`,\n ];\n if (exports.length > 0) {\n agentLines.push(`- Key exports: ${exports.join(\", \")}`);\n }\n agentLines.push(\n \"\",\n \"## Files\",\n \"\",\n ...cluster.files.slice(0, 15).map((f) => `- \\`${f}\\``),\n );\n if (cluster.files.length > 15)\n agentLines.push(`- ... and ${cluster.files.length - 15} more`);\n\n fsWrite(agentPath, agentLines.join(\"\\n\"), \"utf-8\");\n agentsCreated++;\n }\n console.log(\n ` ✓ Generated ${agentsCreated} .agent.md files in .brainstorm/agents/`,\n );\n\n // Phase 4: Generate docs\n const { generateAllDocs } = await import(\"@brainst0rm/docgen\");\n const docResult = generateAllDocs(analysis);\n console.log(\n ` ✓ Generated ${docResult.filesWritten.length} documentation files`,\n );\n\n // Phase 5: Initialize recipe directory\n const { initRecipeDir } = await import(\"@brainst0rm/workflow\");\n initRecipeDir(absPath);\n console.log(` ✓ Initialized .brainstorm/recipes/`);\n\n console.log(\"\\n ══════════════════════════════════════════════════\");\n console.log(\" AI Infrastructure Setup Complete\");\n console.log(\" ══════════════════════════════════════════════════\\n\");\n console.log(` BRAINSTORM.md → project context for agents`);\n console.log(\n ` .brainstorm/agents/ → ${agentsCreated} domain expert agents`,\n );\n console.log(` .brainstorm/recipes/ → shareable workflow templates`);\n console.log(` docs/generated/ → architecture + module + API docs`);\n console.log(\n `\\n Next: Run \\`storm chat\\` to start working with AI agents that know your codebase.`,\n );\n console.log();\n });\n\n// ── Route Explain Command ─────────────────────────────────────────\n\nprogram\n .command(\"route\")\n .description(\"Explain how Brainstorm classifies and routes a task\")\n .argument(\"[task]\", \"Task description to classify\")\n .option(\"--json\", \"Output as JSON\")\n .action(async (task: string | undefined, opts: { json?: boolean }) => {\n const { classifyTask } = await import(\"@brainst0rm/router\");\n\n const taskText = task ?? \"write a function that validates email addresses\";\n const profile = classifyTask(taskText);\n\n if (opts.json) {\n console.log(JSON.stringify({ task: taskText, profile }, null, 2));\n return;\n }\n\n console.log(\"\\n Route Explain\");\n console.log(\" ══════════════════════════════════════════════════\\n\");\n console.log(` Task: \"${taskText.slice(0, 80)}\"`);\n console.log();\n console.log(` Classification:`);\n console.log(` Type: ${profile.type}`);\n console.log(` Complexity: ${profile.complexity}`);\n console.log(` Tools: ${profile.requiresToolUse ? \"yes\" : \"no\"}`);\n console.log(` Reasoning: ${profile.requiresReasoning ? \"yes\" : \"no\"}`);\n if (profile.language) console.log(` Language: ${profile.language}`);\n if (profile.domain) console.log(` Domain: ${profile.domain}`);\n console.log(\n ` Est tokens: ${profile.estimatedTokens.input}in / ${profile.estimatedTokens.output}out`,\n );\n\n console.log();\n console.log(` Routing Logic:`);\n if (profile.type === \"ingest\")\n console.log(` → Ingest pipeline: analysis + docgen + infra setup`);\n else if (profile.type === \"audit\")\n console.log(` → Full review pipeline: security + quality + tech debt`);\n else if (profile.type === \"migration\")\n console.log(` → Migration pipeline: parallel agents per module`);\n else if (profile.type === \"documentation\")\n console.log(` → Documentation pipeline: architecture + module docs`);\n else if (profile.requiresReasoning)\n console.log(\n ` → Routes to frontier model (Opus/GPT-5.4) for reasoning`,\n );\n else if (\n profile.complexity === \"trivial\" ||\n profile.complexity === \"simple\"\n )\n console.log(\n ` → Routes to fast/cheap model (Haiku/Flash) for simple tasks`,\n );\n else\n console.log(\n ` → Routes based on active strategy (quality/cost/combined)`,\n );\n\n console.log();\n });\n\n// ── Loop Command ──────────────────────────────────────────────────\n\nprogram\n .command(\"loop\")\n .description(\"Run a prompt or slash command on a recurring interval\")\n .argument(\"<prompt>\", \"Prompt or /command to run repeatedly\")\n .option(\"-i, --interval <minutes>\", \"Interval between runs in minutes\", \"10\")\n .option(\n \"-n, --max-runs <count>\",\n \"Maximum number of runs (0 = unlimited)\",\n \"0\",\n )\n .action(\n async (prompt: string, opts: { interval: string; maxRuns: string }) => {\n const intervalMs = Math.max(1, parseInt(opts.interval) || 10) * 60 * 1000;\n const maxRuns = parseInt(opts.maxRuns) || 0;\n let runCount = 0;\n\n console.log(\n `\\n Loop: \"${prompt}\" every ${opts.interval}m${maxRuns > 0 ? ` (max ${maxRuns} runs)` : \"\"}`,\n );\n console.log(` Press Ctrl+C to stop.\\n`);\n\n const runOnce = async () => {\n runCount++;\n const ts = new Date().toLocaleTimeString();\n console.log(` [${ts}] Run #${runCount}...`);\n\n try {\n // Shell out to `storm run` for each iteration — clean process per run\n const { execFile } = await import(\"node:child_process\");\n const { promisify } = await import(\"node:util\");\n const execFileAsync = promisify(execFile);\n\n const stormBin = process.argv[1]; // path to this script\n const { stdout, stderr } = await execFileAsync(\n process.execPath,\n [stormBin, \"run\", prompt],\n {\n cwd: process.cwd(),\n timeout: 5 * 60 * 1000, // 5 min max per run\n env: { ...process.env },\n },\n );\n if (stdout.trim()) console.log(stdout.trim());\n if (stderr.trim()) console.error(stderr.trim());\n } catch (err: any) {\n console.error(\n ` Error: ${(err.stderr ?? err.message).slice(0, 200)}`,\n );\n }\n\n if (maxRuns > 0 && runCount >= maxRuns) {\n console.log(`\\n Loop complete (${runCount} runs).`);\n process.exit(0);\n }\n };\n\n // Run immediately, then on interval\n await runOnce();\n setInterval(runOnce, intervalMs);\n },\n );\n\n// ── Memory Command ────────────────────────────────────────────────\n\nprogram\n .command(\"memory\")\n .description(\"View and manage agent memory entries\")\n .argument(\"[action]\", \"Action: list, search, forget\", \"list\")\n .argument(\"[query]\", \"Search query or memory key to forget\")\n .action(async (action: string, query?: string) => {\n const { MemoryManager } = await import(\"@brainst0rm/core\");\n const homePath = join(homedir(), \".brainstorm\", \"memory\");\n const memory = new MemoryManager(homePath);\n\n switch (action) {\n case \"list\": {\n const entries = memory.list();\n if (entries.length === 0) {\n console.log(\"\\n No memory entries.\\n\");\n return;\n }\n console.log(`\\n Memory (${entries.length} entries):\\n`);\n for (const entry of entries) {\n const typeIcon =\n entry.type === \"user\"\n ? \"👤\"\n : entry.type === \"feedback\"\n ? \"💬\"\n : entry.type === \"project\"\n ? \"📁\"\n : \"🔗\";\n console.log(` ${typeIcon} ${entry.name}`);\n console.log(` ${entry.description.slice(0, 80)}`);\n }\n console.log();\n break;\n }\n case \"search\": {\n if (!query) {\n console.error(\" Usage: storm memory search <query>\");\n process.exit(1);\n }\n const results = memory.search(query);\n if (results.length === 0) {\n console.log(`\\n No memory entries matching \"${query}\".\\n`);\n return;\n }\n console.log(\n `\\n Found ${results.length} entries matching \"${query}\":\\n`,\n );\n for (const entry of results) {\n console.log(` ${entry.name}: ${entry.description.slice(0, 80)}`);\n }\n console.log();\n break;\n }\n case \"forget\": {\n if (!query) {\n console.error(\" Usage: storm memory forget <key>\");\n process.exit(1);\n }\n const deleted = memory.delete(query);\n if (deleted) {\n console.log(`\\n Forgot: \"${query}\"\\n`);\n } else {\n console.log(`\\n Memory \"${query}\" not found.\\n`);\n }\n break;\n }\n default:\n console.error(\n ` Unknown action: ${action}. Use list, search, or forget.`,\n );\n process.exit(1);\n }\n });\n\n// ── Sessions Command ───────────────────────────────────────────────\n\nprogram\n .command(\"sessions\")\n .description(\"List recent chat sessions\")\n .option(\"-n, --limit <count>\", \"Number of sessions to show\", \"10\")\n .action(async (opts: { limit: string }) => {\n const db = getDb();\n const sessionManager = new SessionManager(db);\n const sessions = sessionManager.listRecent(parseInt(opts.limit));\n\n console.log(\"\\n Recent Sessions:\\n\");\n if (sessions.length === 0) {\n console.log(\" No sessions found.\");\n }\n for (const s of sessions) {\n const age = Math.floor((Date.now() / 1000 - s.updatedAt) / 60);\n const ageStr =\n age < 60\n ? `${age}m ago`\n : age < 1440\n ? `${Math.floor(age / 60)}h ago`\n : `${Math.floor(age / 1440)}d ago`;\n console.log(\n ` ${s.id.slice(0, 8)} ${s.messageCount} msgs $${s.totalCost.toFixed(4)} ${ageStr} ${s.projectPath}`,\n );\n }\n console.log();\n });\n\n// ── Metrics Command ────────────────────────────────────────────────\n\nprogram\n .command(\"metrics\")\n .description(\"Export tool stats, model latency, and cost breakdown\")\n .option(\"--json\", \"Output as JSON\")\n .action(async (opts: { json?: boolean }) => {\n const db = getDb();\n const costRepo = new CostRepository(db);\n\n const byModel = costRepo.recentByModel(20);\n const byTaskType = costRepo.byTaskType();\n const todayCost = costRepo.totalCostToday();\n const monthCost = costRepo.totalCostThisMonth();\n\n if (opts.json) {\n console.log(\n JSON.stringify({ todayCost, monthCost, byModel, byTaskType }, null, 2),\n );\n return;\n }\n\n console.log(\"\\n Cost Summary:\");\n console.log(` Today: $${todayCost.toFixed(4)}`);\n console.log(` This month: $${monthCost.toFixed(4)}`);\n\n if (byModel.length > 0) {\n console.log(\"\\n Cost by Model:\");\n for (const m of byModel) {\n console.log(\n ` ${m.modelId.padEnd(40)} $${m.totalCost.toFixed(4)} (${m.requestCount} reqs)`,\n );\n }\n }\n\n if (byTaskType.length > 0) {\n console.log(\"\\n Cost by Task Type:\");\n for (const t of byTaskType) {\n console.log(\n ` ${t.taskType.padEnd(20)} $${t.totalCost.toFixed(4)} (${t.requestCount} reqs, avg $${t.avgCost.toFixed(4)})`,\n );\n }\n }\n console.log();\n });\n\n// ── Ingest Command (Unified Pipeline) ────────────────────────────\n\nprogram\n .command(\"ingest\")\n .description(\n \"Full ingest pipeline: analyze → generate docs → set up AI infrastructure\",\n )\n .argument(\"[path]\", \"Project path to ingest\", \".\")\n .option(\"--depth <level>\", \"Analysis depth: quick or full\", \"full\")\n .option(\"--output <dir>\", \"Output directory for analysis artifacts\")\n .action(\n async (projectPath: string, opts: { depth: string; output?: string }) => {\n const { resolve } = await import(\"node:path\");\n const absPath = resolve(projectPath);\n const startTime = Date.now();\n\n console.log(`\\n ══════════════════════════════════════════════════`);\n console.log(` Brainstorm Ingest — ${absPath}`);\n console.log(` ══════════════════════════════════════════════════\\n`);\n\n // Phase 1: Analyze\n console.log(` Phase 1: Analyzing codebase...`);\n const { analyzeProject } = await import(\"@brainst0rm/ingest\");\n const analysis = analyzeProject(absPath);\n console.log(\n ` ✓ ${analysis.summary.totalFiles} files, ${analysis.summary.totalLines.toLocaleString()} lines, ${analysis.summary.moduleCount} modules`,\n );\n\n // Phase 2: Generate docs\n console.log(` Phase 2: Generating documentation...`);\n const { generateAllDocs } = await import(\"@brainst0rm/docgen\");\n const docResult = generateAllDocs(analysis, opts.output);\n console.log(` ✓ ${docResult.filesWritten.length} doc files written`);\n\n // Phase 3: Setup infrastructure (reuse setup-infra logic)\n console.log(` Phase 3: Setting up AI infrastructure...`);\n // Trigger setup-infra programmatically by executing the same logic inline\n const {\n existsSync,\n writeFileSync: fsWrite,\n mkdirSync: fsMkdir,\n } = await import(\"node:fs\");\n const { join: pathJoin } = await import(\"node:path\");\n\n // BRAINSTORM.md\n const bmPath = pathJoin(absPath, \"BRAINSTORM.md\");\n if (!existsSync(bmPath)) {\n const lines = [\n \"---\",\n `build_command: \"npm run build\"`,\n `test_command: \"npm test\"`,\n \"---\",\n \"\",\n `# ${absPath.split(\"/\").pop()}`,\n \"\",\n `${analysis.languages.primary} project with ${analysis.summary.frameworkList.join(\", \") || \"no detected frameworks\"}.`,\n `${analysis.summary.totalFiles} files, ${analysis.summary.totalLines.toLocaleString()} lines across ${analysis.summary.moduleCount} modules.`,\n ];\n fsWrite(bmPath, lines.join(\"\\n\"), \"utf-8\");\n console.log(` ✓ Generated BRAINSTORM.md`);\n }\n\n // Agent profiles\n const agentsDir = pathJoin(absPath, \".brainstorm\", \"agents\");\n if (!existsSync(agentsDir)) fsMkdir(agentsDir, { recursive: true });\n let agentCount = 0;\n for (const cluster of analysis.dependencies.clusters.slice(0, 10)) {\n const safeName = cluster.directory\n .replace(/[/\\\\]/g, \"-\")\n .replace(/^-/, \"\");\n const agentPath = pathJoin(agentsDir, `${safeName}.agent.md`);\n if (!existsSync(agentPath)) {\n fsWrite(\n agentPath,\n `---\\nname: ${safeName}-expert\\nrole: coder\\n---\\n\\n# ${safeName} Expert\\n\\nDomain expert for the ${safeName} module.\\n`,\n \"utf-8\",\n );\n agentCount++;\n }\n }\n console.log(` ✓ ${agentCount} agent profiles created`);\n\n // Recipes\n const { initRecipeDir } = await import(\"@brainst0rm/workflow\");\n initRecipeDir(absPath);\n console.log(` ✓ Recipe directory initialized`);\n\n const elapsed = ((Date.now() - startTime) / 1000).toFixed(1);\n console.log(`\\n ──────────────────────────────────────────────────`);\n console.log(` Ingest complete in ${elapsed}s.`);\n console.log(\n ` Your codebase is now AI-ready. Run \\`storm chat\\` to start.`,\n );\n console.log();\n },\n );\n\n// ── Audit Command ────────────────────────────────────────────────\n\nprogram\n .command(\"audit\")\n .description(\n \"Full code audit: security, quality, tech debt, dependency review\",\n )\n .argument(\"[path]\", \"Project path to audit\", \".\")\n .option(\"--json\", \"Output as JSON\")\n .option(\n \"--focus <area>\",\n \"Focus area: security, quality, dependencies, all\",\n \"all\",\n )\n .action(\n async (projectPath: string, opts: { json?: boolean; focus: string }) => {\n const { resolve } = await import(\"node:path\");\n const absPath = resolve(projectPath);\n\n console.log(`\\n Auditing ${absPath}...\\n`);\n\n const { analyzeProject } = await import(\"@brainst0rm/ingest\");\n const analysis = analyzeProject(absPath);\n\n const findings: Array<{\n severity: string;\n category: string;\n message: string;\n file?: string;\n }> = [];\n\n // Complexity hotspots\n if (opts.focus === \"all\" || opts.focus === \"quality\") {\n for (const f of analysis.complexity.files.filter(\n (cf: any) => cf.score >= 70,\n )) {\n findings.push({\n severity: \"warning\",\n category: \"complexity\",\n message: `High complexity score (${f.score}/100) — consider refactoring`,\n file: f.path,\n });\n }\n }\n\n // Large files\n if (opts.focus === \"all\" || opts.focus === \"quality\") {\n for (const f of analysis.complexity.files.filter(\n (cf: any) => cf.lines > 500,\n )) {\n findings.push({\n severity: \"info\",\n category: \"file-size\",\n message: `Large file (${f.lines} lines) — consider splitting`,\n file: f.path,\n });\n }\n }\n\n // Low cohesion modules\n if (opts.focus === \"all\" || opts.focus === \"quality\") {\n for (const c of analysis.dependencies.clusters.filter(\n (cl) => cl.cohesion < 0.1,\n )) {\n findings.push({\n severity: \"info\",\n category: \"cohesion\",\n message: `Low cohesion module (${c.cohesion.toFixed(2)}) — files may be unrelated`,\n file: c.directory,\n });\n }\n }\n\n if (opts.json) {\n console.log(\n JSON.stringify({ findings, summary: analysis.summary }, null, 2),\n );\n return;\n }\n\n console.log(` Audit Results: ${findings.length} finding(s)\\n`);\n const bySeverity = { warning: 0, info: 0, error: 0 };\n for (const f of findings) {\n const icon =\n f.severity === \"warning\" ? \"⚠\" : f.severity === \"error\" ? \"✗\" : \"ℹ\";\n console.log(\n ` ${icon} [${f.category}] ${f.message}${f.file ? ` (${f.file})` : \"\"}`,\n );\n bySeverity[f.severity as keyof typeof bySeverity]++;\n }\n console.log(\n `\\n Summary: ${bySeverity.error} errors, ${bySeverity.warning} warnings, ${bySeverity.info} info`,\n );\n console.log();\n },\n );\n\n// ── Share Command ────────────────────────────────────────────────\n\nprogram\n .command(\"share\")\n .description(\"Export or import session context for team sharing\")\n .argument(\"<action>\", \"Action: export or import\")\n .argument(\"[file]\", \"File path for export/import\")\n .action(async (action: string, file?: string) => {\n const { writeFileSync, readFileSync } = await import(\"node:fs\");\n const db = getDb();\n const sessionManager = new SessionManager(db);\n\n if (action === \"export\") {\n const sessions = db\n .prepare(\"SELECT * FROM sessions ORDER BY created_at DESC LIMIT 1\")\n .all() as any[];\n if (sessions.length === 0) {\n console.log(\"\\n No sessions to export.\");\n return;\n }\n const session = sessions[0];\n const messages = db\n .prepare(\"SELECT * FROM messages WHERE session_id = ?\")\n .all(session.id);\n const exportData = {\n version: 1,\n exportedAt: new Date().toISOString(),\n session: { id: session.id, projectPath: session.project_path },\n messages,\n };\n const outPath =\n file ?? `brainstorm-session-${session.id.slice(0, 8)}.json`;\n writeFileSync(outPath, JSON.stringify(exportData, null, 2), \"utf-8\");\n console.log(\n `\\n Exported session to ${outPath} (${messages.length} messages)`,\n );\n } else if (action === \"import\") {\n if (!file) {\n console.error(\"\\n Usage: storm share import <file.json>\");\n process.exit(1);\n }\n const data = JSON.parse(readFileSync(file, \"utf-8\"));\n console.log(\n `\\n Imported session context: ${data.messages?.length ?? 0} messages from ${data.exportedAt}`,\n );\n console.log(` Use this context in your next chat session.`);\n } else {\n console.error(`\\n Unknown action: ${action}. Use: export or import`);\n }\n console.log();\n closeDb();\n });\n\n// ── Cloud Command (Remote Agents) ────────────────────────────────\n\nprogram\n .command(\"cloud\")\n .description(\"Run agents remotely via BrainstormRouter cloud\")\n .argument(\"<action>\", \"Action: run, status, list\")\n .argument(\"[task]\", \"Task description (for run)\")\n .option(\"--budget <amount>\", \"Budget limit in dollars\", \"5.0\")\n .action(async (action: string, task?: string, opts?: { budget: string }) => {\n console.log(`\\n BrainstormRouter Cloud Agents`);\n console.log(` ─────────────────────────────\\n`);\n\n switch (action) {\n case \"run\":\n if (!task) {\n console.error(\" Usage: storm cloud run <task>\");\n break;\n }\n console.log(` Task: ${task}`);\n console.log(` Budget: $${opts?.budget ?? \"5.0\"}`);\n console.log(` Status: Queued`);\n console.log(\n `\\n Cloud execution requires a BrainstormRouter Pro subscription.`,\n );\n console.log(\n ` Sign up at https://brainstorm.co/cloud to enable remote agents.`,\n );\n break;\n case \"status\":\n console.log(` No active cloud agents.`);\n break;\n case \"list\":\n console.log(` No completed cloud runs.`);\n break;\n default:\n console.error(` Unknown action: ${action}. Use: run, status, list`);\n }\n console.log();\n });\n\n// ── CI/CD Generation Command ─────────────────────────────────────\n\nprogram\n .command(\"ci-gen\")\n .description(\"Generate CI/CD workflow files (GitHub Actions, GitLab CI)\")\n .argument(\"[platform]\", \"CI platform: github, gitlab\", \"github\")\n .option(\"--output <path>\", \"Output path\")\n .action(async (platform: string, opts: { output?: string }) => {\n const { existsSync, writeFileSync, mkdirSync } = await import(\"node:fs\");\n const { join } = await import(\"node:path\");\n const { analyzeProject } = await import(\"@brainst0rm/ingest\");\n\n const projectPath = process.cwd();\n const analysis = analyzeProject(projectPath);\n\n if (platform === \"github\") {\n const workflowDir =\n opts.output ?? join(projectPath, \".github\", \"workflows\");\n if (!existsSync(workflowDir)) mkdirSync(workflowDir, { recursive: true });\n\n const buildCmd = analysis.frameworks.packageManagers.includes(\"pnpm\")\n ? \"pnpm\"\n : analysis.frameworks.packageManagers.includes(\"yarn\")\n ? \"yarn\"\n : \"npm\";\n\n const hasTurbo = analysis.frameworks.buildTools.includes(\"Turborepo\");\n\n const workflow = [\n \"name: Brainstorm AI Review\",\n \"\",\n \"on:\",\n \" pull_request:\",\n \" branches: [main, master]\",\n \"\",\n \"jobs:\",\n \" ai-review:\",\n \" runs-on: ubuntu-latest\",\n \" steps:\",\n \" - uses: actions/checkout@v4\",\n ` - uses: actions/setup-node@v4`,\n \" with:\",\n ' node-version: \"22\"',\n ` - run: ${buildCmd} install`,\n hasTurbo\n ? ` - run: npx turbo run build test`\n : ` - run: ${buildCmd} run build && ${buildCmd} test`,\n \"\",\n \" # AI-assisted code review via Brainstorm\",\n ` - name: Brainstorm Review`,\n ` run: npx @brainst0rm/cli run --unattended \"Review the PR changes for bugs and security issues\"`,\n \" env:\",\n \" BRAINSTORM_API_KEY: ${{ secrets.BRAINSTORM_API_KEY }}\",\n ];\n\n const outPath = join(workflowDir, \"brainstorm-review.yml\");\n writeFileSync(outPath, workflow.join(\"\\n\"), \"utf-8\");\n console.log(`\\n Generated GitHub Actions workflow: ${outPath}`);\n } else if (platform === \"gitlab\") {\n const outPath =\n opts.output ?? join(projectPath, \".gitlab-ci-brainstorm.yml\");\n const workflow = [\n \"brainstorm-review:\",\n \" stage: review\",\n \" image: node:22\",\n \" script:\",\n \" - npm install\",\n ' - npx @brainst0rm/cli run --unattended \"Review changes for bugs and security\"',\n \" only:\",\n \" - merge_requests\",\n \" variables:\",\n \" BRAINSTORM_API_KEY: $BRAINSTORM_API_KEY\",\n ];\n writeFileSync(outPath, workflow.join(\"\\n\"), \"utf-8\");\n console.log(`\\n Generated GitLab CI config: ${outPath}`);\n } else {\n console.error(`\\n Unknown platform: ${platform}. Use: github, gitlab`);\n }\n console.log();\n });\n\n// ── Start Command (One-Command Onboarding) ───────────────────────\n\nprogram\n .command(\"start\")\n .description(\n \"One-command setup: detect project, connect to community tier, start chatting\",\n )\n .action(async () => {\n const { resolve } = await import(\"node:path\");\n const { existsSync } = await import(\"node:fs\");\n const projectPath = resolve(\".\");\n\n console.log(`\\n ══════════════════════════════════════════════════`);\n console.log(` brainstorm start`);\n console.log(` ══════════════════════════════════════════════════\\n`);\n\n // Step 1: Check if already initialized\n const hasBrainstormMd =\n existsSync(resolve(\"BRAINSTORM.md\")) || existsSync(resolve(\"STORM.md\"));\n const hasConfig = existsSync(resolve(\"brainstorm.toml\"));\n\n if (!hasBrainstormMd && !hasConfig) {\n console.log(` Step 1: Initializing project...`);\n // Run init with defaults\n const { execFileSync } = await import(\"node:child_process\");\n try {\n execFileSync(process.execPath, [process.argv[1], \"init\", \"--yes\"], {\n cwd: projectPath,\n stdio: \"inherit\",\n });\n } catch {\n // init may not exist as standalone — generate minimal config\n const { writeFileSync } = await import(\"node:fs\");\n writeFileSync(\n resolve(\"BRAINSTORM.md\"),\n `# ${projectPath.split(\"/\").pop()}\\n\\nProject initialized by \\`storm start\\`.\\n`,\n \"utf-8\",\n );\n console.log(` ✓ Generated BRAINSTORM.md`);\n }\n } else {\n console.log(` Step 1: Project already initialized ✓`);\n }\n\n // Step 2: Check API key / community tier\n const brKey = process.env.BRAINSTORM_API_KEY;\n if (brKey) {\n console.log(` Step 2: BrainstormRouter API key detected ✓`);\n } else {\n console.log(` Step 2: Using free community tier`);\n console.log(` → 10 requests/min · $5/month cap · 362 models`);\n console.log(` → Upgrade: https://brainstormrouter.com/dashboard`);\n }\n\n // Step 3: Quick health check\n console.log(` Step 3: Checking connectivity...`);\n try {\n const resp = await fetch(\"https://api.brainstormrouter.com/health\", {\n signal: AbortSignal.timeout(5000),\n });\n if (resp.ok) {\n console.log(` ✓ BrainstormRouter reachable`);\n } else {\n console.log(\n ` ⚠ BrainstormRouter returned ${resp.status} (will work offline with local models)`,\n );\n }\n } catch {\n console.log(\n ` ⚠ BrainstormRouter unreachable (will work offline with local models)`,\n );\n }\n\n console.log(`\\n ──────────────────────────────────────────────────`);\n console.log(` Ready! Run one of:`);\n console.log(` storm chat Interactive session`);\n console.log(` storm ingest Analyze this codebase`);\n console.log(` storm run \"prompt\" Single-shot execution`);\n console.log();\n });\n\n// ── Chat Command ──────────────────────────────────────────────────\n\nprogram\n .command(\"chat\", { isDefault: true })\n .description(\"Start an interactive chat session\")\n .option(\"--simple\", \"Use simple readline interface instead of TUI\")\n .option(\"--continue\", \"Resume the most recent session\")\n .option(\"--resume <id>\", \"Resume a specific session by ID\")\n .option(\"--fork <id>\", \"Fork a session (copy history, new session)\")\n .option(\"--lfg\", \"Full auto mode — skip all permission confirmations\")\n .option(\n \"--strategy <name>\",\n \"Routing strategy: cost-first, quality-first, combined, capability\",\n )\n .option(\"--verbose-routing\", \"Print routing decisions to stderr\")\n .option(\n \"--fast\",\n \"Fast startup — skip provider discovery, MCP connections, and eval probes\",\n )\n .action(\n async (opts: {\n simple?: boolean;\n continue?: boolean;\n resume?: string;\n fork?: string;\n lfg?: boolean;\n strategy?: string;\n verboseRouting?: boolean;\n fast?: boolean;\n }) => {\n const config = loadConfig();\n\n // --lfg: full auto mode, skip all permission confirmations\n if (opts.lfg) {\n config.general.defaultPermissionMode = \"auto\";\n }\n\n // --fast: skip heavy initialization for <200ms startup\n if (opts.fast) {\n (config.general as any).skipProviderDiscovery = true;\n (config.general as any).skipEvalProbes = true;\n }\n\n const db = getDb();\n const resolvedKeys = await resolveProviderKeys();\n const resolvedBRKey =\n resolvedKeys.get(\"BRAINSTORM_API_KEY\") ?? getBrainstormApiKey();\n const isCommunityTier = isCommunityKey(resolvedBRKey);\n // Set env for native BR tools (br_status, br_budget, etc.)\n if (resolvedBRKey) process.env._BR_RESOLVED_KEY = resolvedBRKey;\n const registry = await createProviderRegistry(config, resolvedKeys);\n const costTracker = new CostTracker(db, config.budget);\n const tools = createDefaultToolRegistry();\n // --fast: skip MCP server connections\n if (!opts.fast)\n await connectMCPServers(\n tools,\n config,\n resolvedKeys.get(\"BRAINSTORM_API_KEY\"),\n );\n const projectPath = process.cwd();\n configureSandbox(\n config.shell.sandbox as any,\n projectPath,\n config.shell.maxOutputBytes,\n config.shell.containerImage,\n config.shell.containerTimeout,\n );\n\n // Permission manager — gates tool execution\n const permissionManager = new PermissionManager(\n config.general.defaultPermissionMode as any,\n config.permissions,\n );\n\n // Output style — mutable so /style can change it mid-session\n let currentOutputStyle: OutputStyle =\n (config.general.outputStyle as OutputStyle) ?? \"concise\";\n\n // Active role — mutable, set by /architect, /sr-developer, etc.\n let currentRole: string | undefined;\n\n const sessionManager = new SessionManager(db);\n const middleware = createDefaultMiddlewarePipeline(projectPath);\n let { prompt: systemPrompt, frontmatter } = buildSystemPrompt(\n projectPath,\n currentOutputStyle,\n );\n systemPrompt += buildToolAwarenessSection(tools.listTools());\n const router = new BrainstormRouter(\n config,\n registry,\n costTracker,\n frontmatter,\n );\n // Paid keys or direct provider keys get quality-first by default.\n // Community tier without own keys stays on BR server-side routing.\n const hasOwnKeys =\n !!resolvedKeys.get(\"DEEPSEEK_API_KEY\") ||\n !!resolvedKeys.get(\"ANTHROPIC_API_KEY\") ||\n !!resolvedKeys.get(\"OPENAI_API_KEY\") ||\n !!resolvedKeys.get(\"MOONSHOT_API_KEY\") ||\n !!resolvedKeys.get(\"GOOGLE_GENERATIVE_AI_API_KEY\");\n if (opts.strategy) {\n router.setStrategy(opts.strategy as any);\n } else if (\n (!isCommunityTier || hasOwnKeys) &&\n router.getActiveStrategy() !== \"capability\"\n ) {\n router.setStrategy(\"quality-first\");\n }\n\n // Register the subagent tool (model can spawn focused subagents)\n const subagentTool = createSubagentTool({\n config,\n registry,\n router,\n costTracker,\n tools,\n projectPath,\n permissionCheck: (name, perm) => permissionManager.check(name, perm),\n containerIsolation: config.shell.sandbox === \"container\",\n });\n tools.register(subagentTool);\n\n // Preferred model override — mutable so /model can change it\n // Community tier without direct provider keys: force brainstormrouter/auto\n // If user has their own keys (DEEPSEEK, ANTHROPIC, etc.), let local routing use them\n const hasDirectProviderKeys =\n !!resolvedKeys.get(\"DEEPSEEK_API_KEY\") ||\n !!resolvedKeys.get(\"ANTHROPIC_API_KEY\") ||\n !!resolvedKeys.get(\"OPENAI_API_KEY\") ||\n !!resolvedKeys.get(\"GOOGLE_GENERATIVE_AI_API_KEY\") ||\n !!resolvedKeys.get(\"MOONSHOT_API_KEY\");\n // Default model: Kimi K2.5 when key available, otherwise router decides\n let preferredModelId: string | undefined = resolvedKeys.get(\n \"MOONSHOT_API_KEY\",\n )\n ? \"moonshot/kimi-k2.5\"\n : isCommunityTier && !hasDirectProviderKeys\n ? \"brainstormrouter/auto\"\n : undefined;\n\n // Session management: resume, fork, or start new\n let session: any;\n if (opts.fork) {\n session = sessionManager.fork(opts.fork);\n if (!session) {\n console.error(` Session '${opts.fork}' not found.`);\n process.exit(1);\n }\n console.log(\n ` Forked session ${opts.fork.slice(0, 8)} -> ${session.id.slice(0, 8)}`,\n );\n } else if (opts.resume) {\n session = sessionManager.resume(opts.resume);\n if (!session) {\n console.error(` Session '${opts.resume}' not found.`);\n process.exit(1);\n }\n printResumeSummary(session, sessionManager);\n } else if (opts.continue) {\n session = sessionManager.resumeLatest(projectPath);\n if (!session) {\n session = sessionManager.start(projectPath);\n } else {\n printResumeSummary(session, sessionManager);\n }\n } else {\n session = sessionManager.start(projectPath);\n }\n\n const localCount = registry.models.filter((m) => m.isLocal).length;\n const cloudCount = registry.models.filter((m) => !m.isLocal).length;\n\n if (opts.simple) {\n // Simple readline fallback\n const readline = await import(\"node:readline/promises\");\n const rl = readline.createInterface({\n input: process.stdin,\n output: process.stdout,\n });\n\n console.log(`\\n 🧠 brainstorm v0.1.0`);\n console.log(\n ` Strategy: ${router.getActiveStrategy()} | Models: ${localCount} local, ${cloudCount} cloud`,\n );\n console.log(` Project: ${projectPath}`);\n if (isCommunityTier)\n console.log(\n ` Community tier (5 req/min, cheap models). Set BRAINSTORM_API_KEY for full access.`,\n );\n console.log(\n ` Commands: /quit, /model <id>, /strategy <name>, /compact`,\n );\n console.log(` Ctrl+C to interrupt, Ctrl+D to exit.\\n`);\n\n let simpleAbortController: AbortController | null = null;\n\n // First Ctrl-C aborts current operation, second exits\n process.on(\"SIGINT\", () => {\n if (simpleAbortController) {\n simpleAbortController.abort();\n simpleAbortController = null;\n process.stdout.write(\"\\n [interrupted]\\n\\n\");\n } else {\n rl.close();\n process.exit(0);\n }\n });\n\n while (true) {\n const input = await rl.question(\"you > \");\n if (!input.trim()) continue;\n if (input.trim() === \"/quit\" || input.trim() === \"/exit\") break;\n\n // Handle slash commands in simple mode\n if (input.startsWith(\"/\")) {\n const { isSlashCommand, executeSlashCommand } =\n await import(\"../commands/slash.js\");\n if (isSlashCommand(input)) {\n const result = await executeSlashCommand(input, {\n getModel: () => preferredModelId,\n getSessionCost: () => costTracker.getSessionCost(),\n getTokenCount: () => ({\n input: 0,\n output: 0,\n }),\n exit: () => {\n rl.close();\n process.exit(0);\n },\n clearHistory: () => {\n session = sessionManager.start(projectPath);\n },\n setModel: (m) => {\n preferredModelId = m;\n },\n setStrategy: (s) => {\n router.setStrategy(s as any);\n },\n getStrategy: () => router.getActiveStrategy(),\n setMode: (m) => {\n permissionManager.setMode(m as any);\n },\n getMode: () => permissionManager.getMode(),\n setOutputStyle: (s) => {\n currentOutputStyle = s as any;\n const rebuilt = buildSystemPrompt(\n projectPath,\n currentOutputStyle,\n );\n systemPrompt =\n rebuilt.prompt +\n buildToolAwarenessSection(tools.listTools());\n },\n getOutputStyle: () => currentOutputStyle,\n getBudget: () => {\n const remaining = costTracker.getRemainingBudget();\n if (remaining === null) return null;\n return {\n remaining,\n limit: config.budget.perSession ?? 0,\n };\n },\n compact: async () => {\n const result = await sessionManager.compact({\n contextWindow: 200000,\n keepRecent: 5,\n });\n console.log(\n ` Compacted: ${result.removed} messages removed (${result.tokensBefore} → ${result.tokensAfter} tokens)`,\n );\n },\n });\n console.log(` ${result}`);\n continue;\n }\n // Unknown slash command — pass to model as regular message\n }\n\n sessionManager.addUserMessage(input);\n let fullResponse = \"\";\n const sessionTotalBefore = costTracker.getSessionCost();\n process.stdout.write(\"\\nbrainstorm > \");\n simpleAbortController = new AbortController();\n\n // Build role tool filter from active role (if any)\n const roleToolFilter =\n currentRole && ROLES[currentRole as RoleId]\n ? {\n allowedTools: ROLES[currentRole as RoleId].allowedTools,\n blockedTools: ROLES[currentRole as RoleId].blockedTools,\n }\n : undefined;\n\n for await (const event of runAgentLoop(sessionManager.getHistory(), {\n config,\n registry,\n router,\n costTracker,\n tools,\n sessionId: session.id,\n projectPath,\n systemPrompt,\n compaction: buildCompactionCallbacks(sessionManager),\n signal: simpleAbortController.signal,\n permissionCheck: (name, perm) =>\n permissionManager.check(name, perm),\n preferredModelId,\n middleware,\n roleToolFilter,\n onTurnComplete: (ctx) => {\n ctx.turn = sessionManager.incrementTurn();\n ctx.sessionMinutes = sessionManager.getSessionMinutes();\n sessionManager.addTurnContext(ctx);\n },\n })) {\n switch (event.type) {\n case \"thinking\": {\n const spinFrames = [\n \"⠋\",\n \"⠙\",\n \"⠹\",\n \"⠸\",\n \"⠼\",\n \"⠴\",\n \"⠦\",\n \"⠧\",\n \"⠇\",\n \"⠏\",\n ];\n const f =\n spinFrames[Math.floor(Date.now() / 100) % spinFrames.length];\n const chatPhases: Record<string, string> = {\n classifying: \"Analyzing...\",\n routing: \"Selecting model...\",\n connecting: \"Connecting...\",\n streaming: \"Streaming...\",\n };\n process.stderr.write(\n `\\r ${f} ${chatPhases[event.phase] ?? event.phase}`,\n );\n break;\n }\n case \"routing\":\n process.stderr.write(`\\r [${event.decision.model.name}]\\n`);\n if (opts.verboseRouting) {\n const d = event.decision;\n process.stderr.write(\n ` routing: strategy=${d.strategy} model=${d.model.id} provider=${d.model.provider} cost=$${d.estimatedCost.toFixed(4)} reason=\"${d.reason}\"\\n`,\n );\n }\n break;\n case \"text-delta\":\n fullResponse += event.delta;\n process.stdout.write(event.delta);\n break;\n case \"tool-call-start\":\n process.stdout.write(`\\n [tool: ${event.toolName}]\\n`);\n break;\n case \"tool-call-result\":\n break; // Tool results are shown by the model's text response\n case \"model-retry\":\n process.stderr.write(\n `\\n [retry: ${event.fromModel} → ${event.toModel}]\\n`,\n );\n break;\n case \"gateway-feedback\": {\n const gw = formatGatewayFeedback(event.feedback);\n if (gw) process.stderr.write(` ${gw}\\n`);\n break;\n }\n case \"context-budget\":\n process.stderr.write(\n ` [${Math.round(event.used / 1000)}k/${Math.round(event.limit / 1000)}k tokens (${event.percent}%)]\\n`,\n );\n break;\n case \"interrupted\":\n process.stdout.write(\"\\n [interrupted]\\n\\n\");\n break;\n case \"done\": {\n const turn = sessionManager.getTurnCount();\n const turnCost = event.totalCost - (sessionTotalBefore ?? 0);\n sessionManager.syncSessionCost(turnCost);\n process.stdout.write(\n `\\n [Turn ${turn}: $${turnCost.toFixed(4)} | Session: $${event.totalCost.toFixed(4)}]\\n\\n`,\n );\n break;\n }\n case \"error\":\n process.stderr.write(`\\n Error: ${event.error.message}\\n\\n`);\n break;\n }\n }\n simpleAbortController = null;\n if (fullResponse) sessionManager.addAssistantMessage(fullResponse);\n }\n rl.close();\n return;\n }\n\n // Ink TUI\n const { render } = await import(\"ink\");\n const React = await import(\"react\");\n const { App } = await import(\"../components/App.js\");\n\n let currentAbortController: AbortController | null = null;\n\n function handleSendMessage(text: string) {\n sessionManager.addUserMessage(text);\n currentAbortController = new AbortController();\n // Build role tool filter from active role (if any)\n const roleFilter =\n currentRole && ROLES[currentRole as RoleId]\n ? {\n allowedTools: ROLES[currentRole as RoleId].allowedTools,\n blockedTools: ROLES[currentRole as RoleId].blockedTools,\n }\n : undefined;\n\n const gen = runAgentLoop(sessionManager.getHistory(), {\n config,\n registry,\n router,\n costTracker,\n tools,\n sessionId: session.id,\n projectPath,\n systemPrompt,\n compaction: buildCompactionCallbacks(sessionManager),\n signal: currentAbortController.signal,\n permissionCheck: (name, perm) => permissionManager.check(name, perm),\n middleware,\n preferredModelId,\n roleToolFilter: roleFilter,\n });\n // Wrap to capture assistant message after completion\n return (async function* () {\n let fullResponse = \"\";\n for await (const event of gen) {\n if (event.type === \"text-delta\") fullResponse += event.delta;\n yield event;\n }\n if (fullResponse) sessionManager.addAssistantMessage(fullResponse);\n currentAbortController = null;\n })();\n }\n\n function handleAbort() {\n if (currentAbortController) {\n currentAbortController.abort();\n currentAbortController = null;\n }\n }\n\n // Prepare model data for Models mode\n const modelData = registry.models.map((m: any) => ({\n id: m.id,\n name: m.name,\n provider: m.provider,\n qualityTier: m.capabilities?.qualityTier ?? 3,\n speedTier: m.capabilities?.speedTier ?? 2,\n pricing: {\n input: m.pricing?.inputPer1MTokens ?? 0,\n output: m.pricing?.outputPer1MTokens ?? 0,\n },\n status: m.status ?? \"available\",\n }));\n\n const brGateway = createGatewayClient();\n\n render(\n React.createElement(App, {\n strategy: config.general.defaultStrategy,\n modelCount: { local: localCount, cloud: cloudCount },\n onSendMessage: handleSendMessage,\n onAbort: handleAbort,\n models: modelData,\n gateway: brGateway,\n configInfo: {\n strategy: config.general.defaultStrategy,\n permissionMode: config.general.defaultPermissionMode ?? \"confirm\",\n outputStyle: config.general.outputStyle ?? \"concise\",\n sandbox: config.shell?.sandbox ?? \"none\",\n },\n vaultInfo: {\n exists: new BrainstormVault(VAULT_PATH).exists(),\n isOpen: false,\n keyCount: 0,\n keys: [],\n createdAt: null,\n opAvailable: !!process.env.OP_SERVICE_ACCOUNT_TOKEN,\n resolvedKeys: PROVIDER_KEY_NAMES.filter((k) => resolvedKeys.get(k)),\n },\n memoryInfo: await (async () => {\n try {\n const { MemoryManager } = await import(\"@brainst0rm/core\");\n const mem = new MemoryManager(projectPath);\n const entries = mem.list();\n const types: Record<string, number> = {};\n for (const e of entries) {\n types[e.type] = (types[e.type] ?? 0) + 1;\n }\n return { localCount: entries.length, types };\n } catch {\n return { localCount: 0, types: {} };\n }\n })(),\n slashCallbacks: {\n setModel: (model: string) => {\n preferredModelId = model;\n },\n setStrategy: (s: string) => {\n router.setStrategy(s as any);\n },\n getStrategy: () => router.getActiveStrategy(),\n setMode: (mode: string) => {\n permissionManager.setMode(mode as any);\n },\n getMode: () => permissionManager.getMode(),\n setOutputStyle: (style: string) => {\n currentOutputStyle = style as OutputStyle;\n const rebuilt = buildSystemPrompt(\n projectPath,\n currentOutputStyle,\n );\n systemPrompt =\n rebuilt.prompt + buildToolAwarenessSection(tools.listTools());\n },\n getOutputStyle: () => currentOutputStyle,\n rebuildSystemPrompt: (basePromptOverride?: string) => {\n const rebuilt = buildSystemPrompt(\n projectPath,\n currentOutputStyle,\n basePromptOverride,\n );\n systemPrompt =\n rebuilt.prompt + buildToolAwarenessSection(tools.listTools());\n },\n getActiveRole: () => currentRole,\n setActiveRole: (role: string | undefined) => {\n currentRole = role;\n },\n getBudget: () => {\n const state = costTracker.getBudgetState();\n if (!state.sessionLimit) return null;\n return {\n remaining: Math.max(0, state.sessionLimit - state.sessionUsed),\n limit: state.sessionLimit,\n };\n },\n compact: async () => {\n // Use the current model's context window, or fall back to 128k\n const models = router.getModels();\n const activeModel = preferredModelId\n ? models.find((m) => m.id === preferredModelId)\n : models[0];\n const contextWindow =\n activeModel?.limits?.contextWindow || 128_000;\n const cb = buildCompactionCallbacks(sessionManager);\n await cb.compact({ contextWindow });\n },\n dream: async () => {\n const { MemoryManager, DREAM_SYSTEM_PROMPT, buildDreamPrompt } =\n await import(\"@brainst0rm/core\");\n const memory = new MemoryManager(projectPath);\n const rawFiles = memory.getRawFiles();\n if (rawFiles.length === 0)\n return \"No memory files to consolidate.\";\n const dreamPrompt = buildDreamPrompt(\n memory.getMemoryDir(),\n rawFiles,\n );\n const result = await spawnSubagent(dreamPrompt, {\n config,\n registry,\n router,\n costTracker,\n tools,\n projectPath,\n type: \"code\",\n systemPrompt: DREAM_SYSTEM_PROMPT,\n maxSteps: 12,\n budgetLimit: 0.5,\n });\n return `Dream complete. ${result.toolCalls.length} tool calls, $${result.cost.toFixed(4)}.\\n${result.text}`;\n },\n vault: async (action: string, args: string) => {\n const vault = new BrainstormVault(VAULT_PATH);\n switch (action) {\n case \"list\":\n case \"ls\": {\n if (!vault.exists())\n return \"No vault found. Run `brainstorm vault init` to create one.\";\n const keys = vault.list();\n if (keys.length === 0)\n return \"Vault is empty (or locked). Keys: none\";\n return `Vault keys (${keys.length}):\\n${keys.map((k) => ` - ${k}`).join(\"\\n\")}`;\n }\n case \"status\": {\n if (!vault.exists()) return \"Vault: not initialized\";\n return `Vault: ${VAULT_PATH}\\nStatus: ${vault.isOpen() ? \"unlocked\" : \"locked\"}\\nKeys: ${vault.list().length}`;\n }\n case \"get\": {\n if (!args) return \"Usage: /vault get <key-name>\";\n const val = vault.get(args);\n if (val === null)\n return `Key '${args}' not found (or vault is locked).`;\n return `${args} = ${val.slice(0, 8)}${\"*\".repeat(Math.max(0, val.length - 8))}`;\n }\n case \"add\":\n case \"set\": {\n return \"Use `brainstorm vault add <name>` from the terminal — requires interactive password input.\";\n }\n case \"remove\":\n case \"rm\":\n case \"delete\": {\n return \"Use `brainstorm vault remove <name>` from the terminal — requires interactive password input.\";\n }\n default:\n return \"Usage: /vault [list|status|get <name>]\\nFor add/remove, use the `brainstorm vault` CLI command.\";\n }\n },\n },\n }),\n );\n },\n );\n\nexport function run() {\n // Graceful shutdown: stop Docker sandbox, close DB\n const cleanup = () => {\n try {\n stopDockerSandbox();\n } catch {\n // Best effort — container may already be stopped\n }\n try {\n closeDb();\n } catch {\n // Best effort — DB may already be closed\n }\n };\n\n process.on(\"SIGTERM\", () => {\n cleanup();\n process.exit(0);\n });\n\n process.on(\"SIGINT\", () => {\n cleanup();\n process.exit(0);\n });\n\n process.on(\"exit\", () => {\n cleanup();\n });\n\n program.parse();\n}\n\nrun();\n","import { existsSync, readFileSync } from 'node:fs';\nimport { join, basename } from 'node:path';\nimport { createConnection } from 'node:net';\n\nexport interface ProjectDetection {\n name: string;\n type: 'monorepo' | 'app' | 'cli' | 'library' | 'api' | null;\n language: 'typescript' | 'python' | 'rust' | 'go' | null;\n framework: 'nextjs' | 'hono' | 'fastapi' | 'express' | 'none' | null;\n runtime: 'node' | 'python' | 'go' | 'bun' | 'deno' | null;\n\n // Existing files\n hasGit: boolean;\n hasStormMd: boolean;\n hasBrainstormMd: boolean;\n hasClaudeMd: boolean;\n hasGitignore: boolean;\n hasGithubWorkflows: boolean;\n hasEnvExample: boolean;\n hasPrettierrc: boolean;\n hasBrainstormToml: boolean;\n\n // Package info\n packageName: string | null;\n scripts: Record<string, string>;\n\n // Local model runtimes\n localModels: Array<'ollama' | 'lmstudio' | 'llamacpp'>;\n}\n\n/**\n * Scan the project directory and detect what exists.\n * Zero interaction — purely reads filesystem and probes ports.\n */\nexport async function detectProject(projectDir: string): Promise<ProjectDetection> {\n const detection: ProjectDetection = {\n name: basename(projectDir),\n type: null,\n language: null,\n framework: null,\n runtime: null,\n hasGit: existsSync(join(projectDir, '.git')),\n hasStormMd: existsSync(join(projectDir, 'STORM.md')),\n hasBrainstormMd: existsSync(join(projectDir, 'BRAINSTORM.md')),\n hasClaudeMd: existsSync(join(projectDir, 'CLAUDE.md')),\n hasGitignore: existsSync(join(projectDir, '.gitignore')),\n hasGithubWorkflows: existsSync(join(projectDir, '.github', 'workflows')),\n hasEnvExample: existsSync(join(projectDir, '.env.example')),\n hasPrettierrc: existsSync(join(projectDir, '.prettierrc')),\n hasBrainstormToml: existsSync(join(projectDir, 'brainstorm.toml')),\n packageName: null,\n scripts: {},\n localModels: [],\n };\n\n // Read package.json\n const pkgPath = join(projectDir, 'package.json');\n if (existsSync(pkgPath)) {\n try {\n const pkg = JSON.parse(readFileSync(pkgPath, 'utf-8'));\n detection.packageName = pkg.name ?? null;\n if (detection.packageName) detection.name = detection.packageName;\n detection.scripts = pkg.scripts ?? {};\n detection.language = 'typescript'; // Node project\n detection.runtime = 'node';\n\n // Detect monorepo\n if (pkg.workspaces || existsSync(join(projectDir, 'turbo.json')) || existsSync(join(projectDir, 'pnpm-workspace.yaml'))) {\n detection.type = 'monorepo';\n }\n\n // Detect framework from deps\n const allDeps = { ...pkg.dependencies, ...pkg.devDependencies };\n if (allDeps?.next) detection.framework = 'nextjs';\n else if (allDeps?.hono) detection.framework = 'hono';\n else if (allDeps?.express) detection.framework = 'express';\n\n // Detect CLI\n if (pkg.bin) detection.type = detection.type ?? 'cli';\n\n // Detect library\n if (pkg.exports || pkg.main) detection.type = detection.type ?? 'library';\n } catch { /* invalid package.json */ }\n }\n\n // Detect framework from config files\n if (!detection.framework) {\n if (existsSync(join(projectDir, 'next.config.ts')) || existsSync(join(projectDir, 'next.config.js')) || existsSync(join(projectDir, 'next.config.mjs'))) {\n detection.framework = 'nextjs';\n } else if (existsSync(join(projectDir, 'vite.config.ts')) || existsSync(join(projectDir, 'vite.config.js'))) {\n detection.framework = 'none'; // Vite but no specific framework signal\n }\n }\n\n // Detect Python\n if (existsSync(join(projectDir, 'pyproject.toml')) || existsSync(join(projectDir, 'requirements.txt'))) {\n detection.language = 'python';\n detection.runtime = 'python';\n // Check for FastAPI\n try {\n const content = readFileSync(join(projectDir, 'requirements.txt'), 'utf-8');\n if (content.includes('fastapi')) detection.framework = 'fastapi';\n } catch { /* no requirements.txt */ }\n detection.type = detection.type ?? 'api';\n }\n\n // Detect Rust\n if (existsSync(join(projectDir, 'Cargo.toml'))) {\n detection.language = 'rust';\n detection.type = detection.type ?? 'cli';\n }\n\n // Detect Go\n if (existsSync(join(projectDir, 'go.mod'))) {\n detection.language = 'go';\n detection.runtime = 'go';\n detection.type = detection.type ?? 'api';\n }\n\n // Default type\n detection.type = detection.type ?? 'app';\n\n // Probe local model runtimes (non-blocking, fast timeout)\n const probes = await Promise.allSettled([\n probePort(11434).then((ok) => ok ? 'ollama' as const : null),\n probePort(1234).then((ok) => ok ? 'lmstudio' as const : null),\n probePort(8080).then((ok) => ok ? 'llamacpp' as const : null),\n ]);\n\n for (const result of probes) {\n if (result.status === 'fulfilled' && result.value) {\n detection.localModels.push(result.value);\n }\n }\n\n return detection;\n}\n\n/** Probe a localhost port with a 500ms timeout. */\nfunction probePort(port: number): Promise<boolean> {\n return new Promise((resolve) => {\n const socket = createConnection({ host: '127.0.0.1', port, timeout: 500 });\n socket.on('connect', () => { socket.destroy(); resolve(true); });\n socket.on('error', () => resolve(false));\n socket.on('timeout', () => { socket.destroy(); resolve(false); });\n });\n}\n","import { createInterface } from 'node:readline/promises';\nimport { stdin as input, stdout as output } from 'node:process';\nimport type { ProjectDetection } from './detect.js';\nimport type { InitChoices } from './templates.js';\n\n/**\n * Interactive prompt flow for brainstorm init.\n * Uses readline/promises (same as chat --simple, no new deps).\n */\nexport async function runPrompts(detection: ProjectDetection): Promise<InitChoices | null> {\n const rl = createInterface({ input, output });\n\n try {\n console.log('\\n brainstorm init\\n');\n\n // Show detection results\n const detected: string[] = [];\n if (detection.type) detected.push(`${detection.language ?? 'unknown'} ${detection.type}`);\n if (detection.framework && detection.framework !== 'none') detected.push(`framework: ${detection.framework}`);\n if (detection.localModels.length > 0) detected.push(`local models: ${detection.localModels.join(', ')}`);\n\n if (detected.length > 0) {\n console.log(` Detected: ${detected.join(' | ')}\\n`);\n }\n\n const name = await ask(rl, 'Project name', detection.name);\n const type = await askChoice(rl, 'Project type', ['monorepo', 'app', 'cli', 'library', 'api'], detection.type ?? 'app');\n const language = await askChoice(rl, 'Language', ['typescript', 'python', 'rust', 'go', 'multi'], detection.language ?? 'typescript');\n const framework = await askChoice(rl, 'Framework', ['nextjs', 'hono', 'fastapi', 'express', 'none'], detection.framework ?? 'none');\n const runtime = language === 'python' ? 'python' : language === 'go' ? 'go' : (detection.runtime ?? 'node') as InitChoices['runtime'];\n const deploy = await askChoice(rl, 'Deploy target', ['vercel', 'do-app-platform', 'docker', 'aws', 'none'], 'none');\n\n console.log();\n const cloudProvider = await askChoice(rl, 'Cloud LLM routing', ['brainstormrouter', 'direct', 'none'], 'brainstormrouter');\n const budgetTier = await askChoice(rl, 'Budget tier', ['low', 'standard', 'premium'], 'standard');\n\n console.log();\n const secretsStrategy = await askChoice(rl, 'Secrets strategy', ['env-file', 'op-cli', 'sops', 'doppler', 'infisical', 'manual'], 'env-file');\n const ciTier = await askChoice(rl, 'CI/CD setup', ['standard', 'full', 'monorepo', 'none'], type === 'monorepo' ? 'monorepo' : 'standard');\n\n console.log();\n const architecture = await ask(rl, 'Architecture (one line)', '');\n\n const choices: InitChoices = {\n name,\n type: type as InitChoices['type'],\n language: language as InitChoices['language'],\n framework: framework as InitChoices['framework'],\n runtime,\n deploy: deploy as InitChoices['deploy'],\n cloudProvider: cloudProvider as InitChoices['cloudProvider'],\n localModels: detection.localModels,\n budgetTier: budgetTier as InitChoices['budgetTier'],\n secretsStrategy: secretsStrategy as InitChoices['secretsStrategy'],\n ciTier: ciTier as InitChoices['ciTier'],\n architecture,\n };\n\n console.log('\\n Will create:');\n console.log(' STORM.md — project context for AI routing');\n console.log(' brainstorm.toml — routing + provider config');\n console.log(' .brainstormignore — AI file exclusions');\n if (!detection.hasGitignore) console.log(' .gitignore — comprehensive ignore patterns');\n if (!detection.hasPrettierrc) console.log(' .prettierrc — code formatting');\n console.log(' .env.example — documented environment variables');\n if (ciTier !== 'none') {\n console.log(' .github/workflows/ — CI/CD pipeline');\n console.log(' .github/ISSUE_TEMPLATE/ — bug + feature templates');\n console.log(' .github/pull_request_template.md');\n }\n\n console.log();\n const confirm = await ask(rl, 'Proceed? [Y/n]', 'Y');\n if (confirm.toLowerCase() === 'n') {\n console.log(' Aborted.\\n');\n return null;\n }\n\n return choices;\n } finally {\n rl.close();\n }\n}\n\n/**\n * Build choices from detection defaults (for --yes mode).\n */\nexport function buildDefaultChoices(detection: ProjectDetection): InitChoices {\n return {\n name: detection.name,\n type: detection.type ?? 'app',\n language: (detection.language ?? 'typescript') as InitChoices['language'],\n framework: (detection.framework ?? 'none') as InitChoices['framework'],\n runtime: (detection.runtime ?? 'node') as InitChoices['runtime'],\n deploy: 'none',\n cloudProvider: 'brainstormrouter',\n localModels: detection.localModels,\n budgetTier: 'standard',\n secretsStrategy: 'env-file',\n ciTier: detection.type === 'monorepo' ? 'monorepo' : 'standard',\n architecture: '',\n };\n}\n\nasync function ask(rl: any, prompt: string, defaultVal: string): Promise<string> {\n const suffix = defaultVal ? ` [${defaultVal}]` : '';\n const answer = await rl.question(` ${prompt}${suffix}: `);\n return answer.trim() || defaultVal;\n}\n\nasync function askChoice(rl: any, prompt: string, options: string[], defaultVal: string): Promise<string> {\n const optStr = options.map((o) => o === defaultVal ? `[${o}]` : o).join(' / ');\n const answer = await rl.question(` ${prompt}: ${optStr}: `);\n const trimmed = answer.trim().toLowerCase();\n if (!trimmed) return defaultVal;\n const match = options.find((o) => o.startsWith(trimmed));\n return match ?? defaultVal;\n}\n","import { existsSync, mkdirSync, readFileSync, writeFileSync } from 'node:fs';\nimport { join, dirname } from 'node:path';\n\nexport interface GenerateResult {\n action: 'created' | 'skipped' | 'merged';\n path: string;\n}\n\n/**\n * Write a file if it doesn't exist. Returns the action taken.\n * Creates parent directories as needed.\n */\nexport function generateFile(\n projectDir: string,\n relativePath: string,\n content: string,\n options: { force?: boolean } = {},\n): GenerateResult {\n const fullPath = join(projectDir, relativePath);\n const dir = dirname(fullPath);\n\n if (!existsSync(dir)) {\n mkdirSync(dir, { recursive: true });\n }\n\n if (existsSync(fullPath) && !options.force) {\n return { action: 'skipped', path: relativePath };\n }\n\n writeFileSync(fullPath, content, 'utf-8');\n return { action: 'created', path: relativePath };\n}\n\n/**\n * Merge patterns into an existing .gitignore.\n * Appends missing patterns with a comment block. Never removes existing patterns.\n */\nexport function mergeGitignore(\n projectDir: string,\n newContent: string,\n): GenerateResult {\n const fullPath = join(projectDir, '.gitignore');\n\n if (!existsSync(fullPath)) {\n writeFileSync(fullPath, newContent, 'utf-8');\n return { action: 'created', path: '.gitignore' };\n }\n\n const existing = readFileSync(fullPath, 'utf-8');\n const existingPatterns = new Set(\n existing.split('\\n').map((l) => l.trim()).filter((l) => l && !l.startsWith('#')),\n );\n\n const newPatterns = newContent\n .split('\\n')\n .map((l) => l.trim())\n .filter((l) => l && !l.startsWith('#'))\n .filter((l) => !existingPatterns.has(l));\n\n if (newPatterns.length === 0) {\n return { action: 'skipped', path: '.gitignore' };\n }\n\n const appendBlock = '\\n# Added by brainstorm init\\n' + newPatterns.join('\\n') + '\\n';\n writeFileSync(fullPath, existing.trimEnd() + '\\n' + appendBlock, 'utf-8');\n return { action: 'merged', path: '.gitignore' };\n}\n","export interface InitChoices {\n name: string;\n type: 'monorepo' | 'app' | 'cli' | 'library' | 'api';\n language: 'typescript' | 'python' | 'rust' | 'go' | 'java' | 'multi';\n framework: 'nextjs' | 'hono' | 'fastapi' | 'express' | 'none';\n runtime: 'node' | 'deno' | 'bun' | 'python' | 'go';\n deploy: 'vercel' | 'do-app-platform' | 'docker' | 'aws' | 'none';\n cloudProvider: 'brainstormrouter' | 'direct' | 'none';\n localModels: Array<'ollama' | 'lmstudio' | 'llamacpp'>;\n budgetTier: 'low' | 'standard' | 'premium';\n secretsStrategy: 'env-file' | 'op-cli' | 'sops' | 'doppler' | 'infisical' | 'manual';\n ciTier: 'standard' | 'full' | 'monorepo' | 'none';\n architecture: string;\n}\n\n// ── STORM.md ────────────────────────────────────────────────────────\n\nexport interface GatewayInfo {\n connected: boolean;\n modelCount: number;\n budget?: string;\n health: string;\n}\n\nexport function generateStormMd(choices: InitChoices): string {\n const lines = [\n '---',\n 'version: 1',\n `name: ${choices.name}`,\n `type: ${choices.type}`,\n `language: ${choices.language}`,\n `framework: ${choices.framework}`,\n `runtime: ${choices.runtime}`,\n `deploy: ${choices.deploy}`,\n 'routing:',\n ' primary_tasks: [code-generation, debugging]',\n ` typical_complexity: moderate`,\n ` prefer_local: ${choices.budgetTier === 'low'}`,\n ` budget_tier: ${choices.budgetTier}`,\n 'providers:',\n ` cloud: ${choices.cloudProvider}`,\n ` local: [${choices.localModels.join(', ')}]`,\n 'secrets:',\n ` strategy: ${choices.secretsStrategy}`,\n `entry_points: []`,\n choices.language === 'typescript' ? 'test_command: npm test' : choices.language === 'python' ? 'test_command: pytest' : undefined,\n choices.language === 'typescript' ? 'build_command: npm run build' : undefined,\n choices.language === 'typescript' ? 'dev_command: npm run dev' : choices.language === 'python' ? 'dev_command: python -m uvicorn app:app --reload' : undefined,\n '---',\n '',\n '## What is this?',\n `<!-- One sentence. What does this project do? -->`,\n choices.architecture || '[Describe your project here.]',\n '',\n '## Start here',\n '<!-- The 5 files to read first to understand the architecture. -->',\n '- [Add your key entry point]',\n '- [Add your main abstraction]',\n '- [Add your data schema]',\n '- [Add your route definitions]',\n '- [Add your config file]',\n '',\n '## Commands that work',\n '<!-- Copy-pasteable. Must work on a fresh clone. -->',\n '```bash',\n choices.language === 'typescript' ? 'npm install' : choices.language === 'python' ? 'pip install -r requirements.txt' : '# install dependencies',\n choices.language === 'typescript' ? 'npm run dev' : choices.language === 'python' ? 'python -m uvicorn app:app --reload' : '# start dev server',\n choices.language === 'typescript' ? 'npm test' : choices.language === 'python' ? 'pytest' : '# run tests',\n choices.language === 'typescript' ? 'npm run build' : '# build',\n '```',\n '',\n '## Conventions',\n '<!-- Show patterns by example. I learn by reading code, not rules. -->',\n '```' + (choices.language === 'typescript' ? 'typescript' : choices.language),\n '// Add code examples of your project\\'s patterns here',\n '```',\n '',\n '## Environment',\n '<!-- Required vars marked [REQUIRED]. -->',\n choices.cloudProvider === 'brainstormrouter' ? '- `BRAINSTORM_API_KEY` [REQUIRED] — BrainstormRouter SaaS key' : '- [Add required environment variables]',\n '',\n '## Don\\'t touch',\n '<!-- Files I should never modify without asking. -->',\n '- [Add protected files/directories here]',\n '',\n ];\n\n return lines.filter((l) => l !== undefined).join('\\n');\n}\n\n// ── brainstorm.toml ─────────────────────────────────────────────────\n\nexport function generateBrainstormToml(choices: InitChoices): string {\n const strategy = choices.budgetTier === 'low' ? 'cost-first'\n : choices.budgetTier === 'premium' ? 'quality-first'\n : 'combined';\n\n const lines = [\n '[general]',\n `defaultStrategy = \"${strategy}\"`,\n '',\n '[providers.gateway]',\n `enabled = ${choices.cloudProvider === 'brainstormrouter'}`,\n '',\n '[providers.ollama]',\n `enabled = ${choices.localModels.includes('ollama')}`,\n '',\n '[providers.lmstudio]',\n `enabled = ${choices.localModels.includes('lmstudio')}`,\n '',\n '[budget]',\n choices.budgetTier === 'low' ? 'daily = 2.00' : choices.budgetTier === 'premium' ? 'daily = 20.00' : 'daily = 5.00',\n 'hardLimit = false',\n '',\n ];\n\n return lines.join('\\n');\n}\n\n// ── .gitignore ──────────────────────────────────────────────────────\n\nexport function generateGitignore(choices: InitChoices): string {\n return `# Dependencies\nnode_modules/\n.pnp.*\nvenv/\n__pycache__/\n\n# Build\ndist/\nbuild/\n.next/\n.turbo/\n*.tsbuildinfo\n\n# Environment & secrets\n.env\n.env.*\n!.env.example\n*.pem\n*.key\nsecrets.dec.yaml\n\n# Data\n*.db\n*.db-wal\n*.db-shm\n\n# IDE & OS\n.idea/\n.vscode/settings.json\n*.swp\n.DS_Store\n\n# Test\ncoverage/\n\n# Brainstorm\n.brainstorm/cache/\n`;\n}\n\n// ── .brainstormignore ───────────────────────────────────────────────\n\nexport function generateBrainstormignore(): string {\n return `# Build artifacts — never useful, always stale\ndist/\nbuild/\n.next/\n.turbo/\n__pycache__/\n*.pyc\n\n# Dependencies — I don't need to read library source\nnode_modules/\n.pnp.*\nvenv/\n\n# Lock files — huge, never informative\npackage-lock.json\nyarn.lock\npnpm-lock.yaml\nCargo.lock\n\n# Binary/media — I can't read these meaningfully\n*.jpg\n*.png\n*.gif\n*.svg\n*.ico\n*.woff\n*.woff2\n*.ttf\n*.eot\n*.mp4\n*.mp3\n*.pdf\n\n# Generated/cached\n*.tsbuildinfo\ncoverage/\n.cache/\n.eslintcache\n\n# Secrets — I should never see these\n.env\n.env.*\n!.env.example\n*.pem\n*.key\n*.p12\ncredentials.json\n`;\n}\n\n// ── .prettierrc ─────────────────────────────────────────────────────\n\nexport function generatePrettierrc(): string {\n return JSON.stringify({\n semi: true,\n singleQuote: true,\n tabWidth: 2,\n printWidth: 100,\n trailingComma: 'all',\n }, null, 2) + '\\n';\n}\n\n// ── .env.example ────────────────────────────────────────────────────\n\nexport function generateEnvExample(choices: InitChoices): string {\n const lines = [\n '# === LLM Providers ===',\n ];\n\n if (choices.cloudProvider === 'brainstormrouter') {\n lines.push(\n '# BrainstormRouter SaaS (recommended — routes to optimal model)',\n '# Sign up: https://brainstormrouter.com',\n 'BRAINSTORM_API_KEY=',\n );\n } else if (choices.cloudProvider === 'direct') {\n lines.push(\n '# Direct provider keys (set the ones you use)',\n '# ANTHROPIC_API_KEY=',\n '# OPENAI_API_KEY=',\n '# GOOGLE_GENERATIVE_AI_API_KEY=',\n '# DEEPSEEK_API_KEY=',\n );\n }\n\n lines.push(\n '',\n '# === Local Models ===',\n '# Ollama runs on localhost:11434 by default (auto-detected)',\n '# LM Studio runs on localhost:1234 by default (auto-detected)',\n '',\n '# === Application ===',\n '# DATABASE_URL=',\n '# Add project-specific env vars below',\n '',\n );\n\n return lines.join('\\n');\n}\n\n// ── CI/CD Workflows ─────────────────────────────────────────────────\n\nexport function generateCiWorkflow(choices: InitChoices): string {\n if (choices.ciTier === 'monorepo') {\n return `name: CI\non:\n push: { branches: [main] }\n pull_request: { branches: [main] }\n\njobs:\n check:\n runs-on: ubuntu-latest\n steps:\n - uses: actions/checkout@v4\n with: { fetch-depth: 2 }\n - uses: actions/setup-node@v4\n with: { node-version: 22, cache: npm }\n - run: npm ci\n - run: npx turbo run typecheck test build --affected\n`;\n }\n\n if (choices.language === 'python') {\n return `name: CI\non:\n push: { branches: [main] }\n pull_request: { branches: [main] }\n\njobs:\n check:\n runs-on: ubuntu-latest\n steps:\n - uses: actions/checkout@v4\n - uses: actions/setup-python@v5\n with: { python-version: \"3.13\" }\n - run: pip install -r requirements.txt\n - run: pytest\n`;\n }\n\n return `name: CI\non:\n push: { branches: [main] }\n pull_request: { branches: [main] }\n\njobs:\n check:\n runs-on: ubuntu-latest\n steps:\n - uses: actions/checkout@v4\n - uses: actions/setup-node@v4\n with: { node-version: 22, cache: npm }\n - run: npm ci\n - run: npx tsc --noEmit\n - run: npm test\n - run: npm run build\n`;\n}\n\nexport function generateDeployWorkflow(choices: InitChoices): string {\n return `name: Deploy\non:\n push: { branches: [main] }\n\njobs:\n deploy:\n runs-on: ubuntu-latest\n steps:\n - uses: actions/checkout@v4\n - uses: actions/setup-node@v4\n with: { node-version: 22, cache: npm }\n - run: npm ci && npm run build\n # Add deployment command for your target:\n # Vercel: npx vercel --prod --token=\\${{ secrets.VERCEL_TOKEN }}\n # DO App Platform: doctl apps create-deployment \\$APP_ID\n # Docker: docker build -t app . && docker push\n - run: echo \"Configure deployment for ${choices.deploy}\"\n`;\n}\n\nexport function generateReleaseWorkflow(): string {\n return `name: Release\non:\n push: { tags: ['v*'] }\n\njobs:\n publish:\n runs-on: ubuntu-latest\n permissions:\n contents: write\n steps:\n - uses: actions/checkout@v4\n - uses: actions/setup-node@v4\n with: { node-version: 22, cache: npm }\n - run: npm ci && npm run build\n - run: npm publish\n env:\n NODE_AUTH_TOKEN: \\${{ secrets.NPM_TOKEN }}\n - uses: softprops/action-gh-release@v2\n with:\n generate_release_notes: true\n`;\n}\n\nexport function generateDependabot(): string {\n return `version: 2\nupdates:\n - package-ecosystem: npm\n directory: /\n schedule: { interval: weekly }\n open-pull-requests-limit: 5\n groups:\n dev-deps:\n dependency-type: development\n prod-deps:\n dependency-type: production\n`;\n}\n\nexport function generatePrTemplate(): string {\n return `## Summary\n<!-- What does this PR do? -->\n\n## Test plan\n- [ ] Tests pass locally\n- [ ] Manually verified\n\n## Notes\n<!-- Anything reviewers should know? -->\n`;\n}\n\nexport function generateBugTemplate(): string {\n return `---\nname: Bug Report\nabout: Report a bug\nlabels: bug\n---\n\n## Expected behavior\n\n## Actual behavior\n\n## Steps to reproduce\n\n## Environment\n- OS:\n- Node:\n- Version:\n`;\n}\n\nexport function generateFeatureTemplate(): string {\n return `---\nname: Feature Request\nabout: Suggest a feature\nlabels: enhancement\n---\n\n## Problem\n<!-- What problem does this solve? -->\n\n## Proposed solution\n\n## Alternatives considered\n`;\n}\n","import { detectProject } from \"./detect.js\";\nimport { runPrompts, buildDefaultChoices } from \"./prompts.js\";\nimport {\n generateFile,\n mergeGitignore,\n type GenerateResult,\n} from \"./generate.js\";\nimport {\n generateStormMd,\n generateBrainstormToml,\n generateGitignore,\n generateBrainstormignore,\n generatePrettierrc,\n generateEnvExample,\n generateCiWorkflow,\n generateDeployWorkflow,\n generateReleaseWorkflow,\n generateDependabot,\n generatePrTemplate,\n generateBugTemplate,\n generateFeatureTemplate,\n type InitChoices,\n type GatewayInfo,\n} from \"./templates.js\";\nimport { createGatewayClient } from \"@brainst0rm/gateway\";\n\nexport interface InitOptions {\n yes?: boolean;\n force?: boolean;\n}\n\n/**\n * Orchestrate the init flow: detect → gateway probe → prompt → generate → report.\n */\nexport async function runInit(\n projectDir: string,\n options: InitOptions,\n): Promise<void> {\n // Phase 1: Detect\n const detection = await detectProject(projectDir);\n\n // Phase 1.5: Probe BrainstormRouter gateway if API key is set\n let gatewayInfo: GatewayInfo | null = null;\n const gw = createGatewayClient();\n if (gw) {\n try {\n const [self, health, discovery] = await Promise.all([\n gw.getSelf().catch(() => null),\n gw.getHealth().catch(() => ({ status: \"unknown\" })),\n gw.getDiscovery().catch(() => null),\n ]);\n if (self) {\n gatewayInfo = {\n connected: true,\n modelCount: discovery?.models?.available ?? 0,\n budget: discovery?.budget\n ? `$${discovery.budget.remaining_usd?.toFixed(2)}/${discovery.budget.period}`\n : undefined,\n health: health.status,\n };\n }\n } catch {\n // Gateway not reachable — proceed without it\n }\n }\n\n // Phase 2: Get choices (interactive or defaults)\n let choices: InitChoices | null;\n if (options.yes) {\n choices = buildDefaultChoices(detection);\n // Auto-set cloud provider when gateway is detected\n if (gatewayInfo) choices.cloudProvider = \"brainstormrouter\";\n console.log(\"\\n brainstorm init --yes\\n\");\n console.log(` Auto-detected: ${choices.language} ${choices.type}`);\n if (detection.localModels.length > 0) {\n console.log(` Local models: ${detection.localModels.join(\", \")}`);\n }\n if (gatewayInfo) {\n console.log(\n ` Gateway: connected (${gatewayInfo.modelCount} models, ${gatewayInfo.health})`,\n );\n if (gatewayInfo.budget) console.log(` Budget: ${gatewayInfo.budget}`);\n }\n console.log();\n } else {\n // Show gateway detection before prompts\n if (gatewayInfo) {\n console.log(\n `\\n BrainstormRouter detected: ${gatewayInfo.modelCount} models, ${gatewayInfo.health}`,\n );\n }\n choices = await runPrompts(detection);\n if (!choices) return; // User aborted\n // Auto-set cloud provider when gateway is detected\n if (gatewayInfo) choices.cloudProvider = \"brainstormrouter\";\n }\n\n // Phase 3: Generate files\n const results: GenerateResult[] = [];\n const opts = { force: options.force };\n\n // Core files (always generated)\n results.push(\n generateFile(projectDir, \"STORM.md\", generateStormMd(choices), opts),\n );\n results.push(\n generateFile(\n projectDir,\n \"brainstorm.toml\",\n generateBrainstormToml(choices),\n opts,\n ),\n );\n results.push(\n generateFile(\n projectDir,\n \".brainstormignore\",\n generateBrainstormignore(),\n opts,\n ),\n );\n results.push(\n generateFile(projectDir, \".env.example\", generateEnvExample(choices), opts),\n );\n\n // .gitignore (merge mode)\n results.push(mergeGitignore(projectDir, generateGitignore(choices)));\n\n // Formatting\n results.push(\n generateFile(projectDir, \".prettierrc\", generatePrettierrc(), opts),\n );\n\n // CI/CD\n if (choices.ciTier !== \"none\") {\n results.push(\n generateFile(\n projectDir,\n \".github/workflows/ci.yml\",\n generateCiWorkflow(choices),\n opts,\n ),\n );\n results.push(\n generateFile(\n projectDir,\n \".github/pull_request_template.md\",\n generatePrTemplate(),\n opts,\n ),\n );\n results.push(\n generateFile(\n projectDir,\n \".github/ISSUE_TEMPLATE/bug_report.md\",\n generateBugTemplate(),\n opts,\n ),\n );\n results.push(\n generateFile(\n projectDir,\n \".github/ISSUE_TEMPLATE/feature_request.md\",\n generateFeatureTemplate(),\n opts,\n ),\n );\n\n if (choices.ciTier === \"full\") {\n results.push(\n generateFile(\n projectDir,\n \".github/workflows/deploy.yml\",\n generateDeployWorkflow(choices),\n opts,\n ),\n );\n results.push(\n generateFile(\n projectDir,\n \".github/workflows/release.yml\",\n generateReleaseWorkflow(),\n opts,\n ),\n );\n results.push(\n generateFile(\n projectDir,\n \".github/dependabot.yml\",\n generateDependabot(),\n opts,\n ),\n );\n }\n }\n\n // Phase 4: Report\n console.log(\" Results:\\n\");\n for (const r of results) {\n const icon =\n r.action === \"created\" ? \"+\" : r.action === \"merged\" ? \"~\" : \"-\";\n const label =\n r.action === \"created\"\n ? \"created\"\n : r.action === \"merged\"\n ? \"merged\"\n : \"exists (skipped)\";\n console.log(` ${icon} ${r.path} (${label})`);\n }\n\n const created = results.filter((r) => r.action === \"created\").length;\n const merged = results.filter((r) => r.action === \"merged\").length;\n const skipped = results.filter((r) => r.action === \"skipped\").length;\n\n console.log(\n `\\n Done. ${created} created, ${merged} merged, ${skipped} skipped.`,\n );\n console.log(\n \" Edit STORM.md to add your architecture, entry points, and conventions.\\n\",\n );\n}\n"],"mappings":"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","names":["existsSync","readFileSync","join","createGatewayClient","join","existsSync","readFileSync","writeFileSync","mkdirSync","homedir","output","input","result"]}
1
+ {"version":3,"sources":["../src/bin/brainstorm.ts","../src/init/detect.ts","../src/init/prompts.ts","../src/init/generate.ts","../src/init/templates.ts","../src/init/index.ts"],"sourcesContent":["import { Command } from \"commander\";\nimport { initSentry, captureError, flushSentry } from \"@brainst0rm/shared\";\nimport { loadConfig } from \"@brainst0rm/config\";\nimport {\n getDb,\n closeDb,\n CostRepository,\n RoutingOutcomeRepository,\n} from \"@brainst0rm/db\";\nimport {\n createProviderRegistry,\n getBrainstormApiKey,\n isCommunityKey,\n} from \"@brainst0rm/providers\";\nimport { BrainstormRouter, CostTracker } from \"@brainst0rm/router\";\nimport {\n createDefaultToolRegistry,\n configureSandbox,\n stopDockerSandbox,\n} from \"@brainst0rm/tools\";\nimport {\n runAgentLoop,\n buildSystemPrompt,\n buildToolAwarenessSection,\n SessionManager,\n PermissionManager,\n createSubagentTool,\n spawnSubagent,\n spawnParallel,\n createDefaultMiddlewarePipeline,\n segmentsToString,\n type CompactionCallbacks,\n type SystemPromptSegment,\n} from \"@brainst0rm/core\";\nimport type { OutputStyle } from \"@brainst0rm/core\";\nimport { AgentManager, parseAgentNL } from \"@brainst0rm/agents\";\nimport { ROLES, type RoleId } from \"../commands/roles.js\";\nimport {\n runWorkflow,\n getPresetWorkflow,\n autoSelectPreset,\n PRESET_WORKFLOWS,\n} from \"@brainst0rm/workflow\";\nimport { renderMarkdownToString } from \"../components/MarkdownRenderer.js\";\nimport { runInit } from \"../init/index.js\";\nimport { runEvalCli, runProbe } from \"@brainst0rm/eval\";\nimport {\n createGatewayClient,\n createIntelligenceClient,\n formatGatewayFeedback,\n} from \"@brainst0rm/gateway\";\nimport { MCPClientManager } from \"@brainst0rm/mcp\";\nimport { BrainstormVault, KeyResolver } from \"@brainst0rm/vault\";\nimport { createInterface } from \"node:readline\";\nimport { homedir } from \"node:os\";\nimport { join } from \"node:path\";\nimport type { ResolvedKeys } from \"@brainst0rm/providers\";\n\n/** Known API key names that providers and connectors need at startup. */\nconst PROVIDER_KEY_NAMES = [\n \"BRAINSTORM_API_KEY\",\n \"ANTHROPIC_API_KEY\",\n \"OPENAI_API_KEY\",\n \"GOOGLE_GENERATIVE_AI_API_KEY\",\n \"DEEPSEEK_API_KEY\",\n \"MOONSHOT_API_KEY\",\n \"BRAINSTORM_ADMIN_KEY\",\n // God Mode connector keys — resolved so connectors can authenticate\n \"BRAINSTORM_MSP_API_KEY\",\n \"BRAINSTORM_EMAIL_API_KEY\",\n \"BRAINSTORM_VM_API_KEY\",\n];\n\n/**\n * Eagerly resolve all provider keys through the vault/1Password/env chain.\n * Triggers the lazy vault password prompt if a vault exists and keys are needed.\n * Returns a sync ResolvedKeys map for createProviderRegistry.\n */\nasync function resolveProviderKeys(): Promise<ResolvedKeys> {\n const vault = new BrainstormVault(VAULT_PATH);\n const resolver = new KeyResolver(vault.exists() ? vault : null, () =>\n promptPassword(\" Vault password: \"),\n );\n\n const resolved = new Map<string, string>();\n for (const name of PROVIDER_KEY_NAMES) {\n const value = await resolver.get(name);\n if (value) {\n resolved.set(name, value);\n // Make resolved keys available via process.env for God Mode connectors\n // and other subsystems that read from environment\n process.env[name] = value;\n }\n }\n\n return { get: (name: string) => resolved.get(name) ?? null };\n}\n\nfunction buildCompactionCallbacks(\n sessionManager: SessionManager,\n): CompactionCallbacks {\n return {\n getTokenEstimate: () => sessionManager.getTokenEstimate(),\n compact: (opts) => sessionManager.compact(opts),\n };\n}\n\n/**\n * Connect to MCP servers from config + BrainstormRouter gateway.\n * Loads user-configured servers from config.mcp.servers (populated from\n * config.toml and .brainstorm/mcp.json), plus the built-in gateway server.\n */\nasync function connectMCPServers(\n tools: ReturnType<typeof createDefaultToolRegistry>,\n config: ReturnType<typeof loadConfig>,\n resolvedBRKey?: string | null,\n): Promise<void> {\n const mcp = new MCPClientManager();\n\n // User-configured MCP servers from config.toml / .brainstorm/mcp.json\n if (config.mcp.servers.length > 0) {\n mcp.addServers(\n config.mcp.servers.map((s) => ({\n name: s.name,\n transport: s.transport,\n url: s.url ?? \"\",\n command: s.command,\n args: s.args,\n env: s.env,\n enabled: s.enabled,\n toolFilter: s.toolFilter,\n })),\n );\n }\n\n // BrainstormRouter intelligence tools are built-in natively\n // (br_status, br_budget, etc.). MCP is used for user-configured servers.\n // Tool definitions are validated before registration (see mcp/client.ts).\n\n const { connected, errors } = await mcp.connectAll(tools);\n if (connected.length > 0) {\n process.stderr.write(`[mcp] Connected: ${connected.join(\", \")}\\n`);\n }\n for (const err of errors) {\n process.stderr.write(`[mcp] ${err.name}: ${err.error}\\n`);\n }\n}\n\nconst program = new Command();\n\n// Read version from package.json at runtime (stays in sync with bump-version.mjs)\nimport { readFileSync as readFileSyncVersion } from \"node:fs\";\nimport { dirname as dirnameVersion } from \"node:path\";\nimport { fileURLToPath as fileURLToPathVersion } from \"node:url\";\nconst __pkg_dir = join(\n dirnameVersion(fileURLToPathVersion(import.meta.url)),\n \"..\",\n);\nlet CLI_VERSION = \"0.12.1\";\ntry {\n CLI_VERSION = JSON.parse(\n readFileSyncVersion(join(__pkg_dir, \"package.json\"), \"utf-8\"),\n ).version;\n} catch {\n /* fallback */\n}\n\nprogram\n .name(\"brainstorm\")\n .description(\"AI coding assistant with intelligent model routing\")\n .version(CLI_VERSION);\n\nprogram\n .command(\"init\")\n .description(\"Initialize project for AI-assisted development\")\n .option(\"--yes\", \"Use defaults, skip prompts\")\n .option(\"--force\", \"Overwrite existing files\")\n .action(async (opts: { yes?: boolean; force?: boolean }) => {\n await runInit(process.cwd(), opts);\n });\n\nprogram\n .command(\"eval\")\n .description(\"Run capability evaluation probes against a model\")\n .option(\n \"--model <id>\",\n \"Model to evaluate (e.g., anthropic/claude-sonnet-4-6)\",\n )\n .option(\"--capability <dim>\", \"Run only probes for this dimension\")\n .option(\"--compare\", \"Compare results across all previously evaluated models\")\n .option(\n \"--scorecard\",\n \"Show current capability scores without re-running probes\",\n )\n .option(\"--all-models\", \"Run probes against every available model\")\n .option(\"--timeout <ms>\", \"Timeout per probe in milliseconds\", \"30000\")\n .action(\n async (opts: {\n model?: string;\n capability?: string;\n compare?: boolean;\n scorecard?: boolean;\n allModels?: boolean;\n timeout?: string;\n }) => {\n await runEvalCli({\n model: opts.model,\n capability: opts.capability,\n compare: opts.compare,\n scorecard: opts.scorecard,\n allModels: opts.allModels,\n timeout: parseInt(opts.timeout ?? \"30000\"),\n });\n },\n );\n\n// ── SWE-bench Eval Command ────────────────────────────────────────\n\nprogram\n .command(\"eval-swe-bench\")\n .description(\n \"Run SWE-bench evaluation: apply agent to instances, score with Docker\",\n )\n .requiredOption(\n \"--instances <path>\",\n \"Path to SWE-bench instances.jsonl file\",\n )\n .option(\"--model <id>\", \"Target model (default: let router decide)\")\n .option(\"--limit <n>\", \"Max instances to evaluate\", \"10\")\n .option(\"--concurrency <n>\", \"Parallel evaluations\", \"2\")\n .option(\"--json\", \"Output results as JSON\")\n .action(\n async (opts: {\n instances: string;\n model?: string;\n limit: string;\n concurrency: string;\n json?: boolean;\n }) => {\n const { loadInstances, runSWEBench, scorePatch, generateScorecard } =\n await import(\"@brainst0rm/eval\");\n\n const limit = parseInt(opts.limit);\n const concurrency = parseInt(opts.concurrency);\n\n console.log(`\\n SWE-bench Evaluation`);\n console.log(` ─────────────────────\\n`);\n console.log(` Instances: ${opts.instances}`);\n console.log(` Limit: ${limit}`);\n console.log(` Model: ${opts.model ?? \"auto (router decides)\"}`);\n console.log(` Concurrency: ${concurrency}\\n`);\n\n // Load instances\n const instances = loadInstances(opts.instances, limit);\n console.log(` Loaded ${instances.length} instances.\\n`);\n\n if (instances.length === 0) {\n console.error(\" No instances found in file.\");\n process.exit(1);\n }\n\n // Set up agent infrastructure (needed for spawnSubagent)\n const config = loadConfig();\n config.general.defaultPermissionMode = \"auto\"; // unattended\n const db = getDb();\n const resolvedKeys = await resolveProviderKeys();\n const registry = await createProviderRegistry(config, resolvedKeys);\n const costTracker = new CostTracker(db, config.budget);\n const tools = createDefaultToolRegistry();\n const { frontmatter } = buildSystemPrompt(process.cwd());\n const router = new BrainstormRouter(\n config,\n registry,\n costTracker,\n frontmatter,\n );\n if (opts.model) {\n // Force specific model if requested\n } else {\n router.setStrategy(\"quality-first\");\n }\n\n const { execFileSync: execGit } = await import(\"node:child_process\");\n const {\n mkdtempSync,\n writeFileSync: writePatch,\n rmSync,\n } = await import(\"node:fs\");\n const { tmpdir } = await import(\"node:os\");\n\n let completed = 0;\n\n // Run agent on each instance — REAL implementation\n console.log(` Running agent on ${instances.length} instances...\\n`);\n const patches = await runSWEBench(\n instances,\n async (instance: any) => {\n const startTime = Date.now();\n const instanceNum = ++completed;\n const shortId = instance.instanceId.slice(0, 40);\n\n try {\n // 1. Create isolated workspace\n const workDir = mkdtempSync(join(tmpdir(), \"swe-bench-\"));\n const repoDir = join(workDir, \"repo\");\n\n try {\n // 2. Clone repo at baseCommit\n process.stderr.write(\n ` [${instanceNum}/${instances.length}] ${shortId} — cloning...`,\n );\n execGit(\n \"git\",\n [\n \"clone\",\n \"--depth\",\n \"100\",\n `https://github.com/${instance.repo}.git`,\n \"repo\",\n ],\n {\n cwd: workDir,\n timeout: 120000,\n stdio: [\"ignore\", \"pipe\", \"pipe\"],\n },\n );\n execGit(\"git\", [\"checkout\", instance.baseCommit], {\n cwd: repoDir,\n timeout: 30000,\n stdio: [\"ignore\", \"pipe\", \"pipe\"],\n });\n\n // 3. Run Brainstorm agent on the issue\n process.stderr.write(` solving...`);\n const issuePrompt = [\n `You are solving a GitHub issue in this repository.`,\n ``,\n `## Problem`,\n instance.issue,\n instance.hints ? `\\n## Hints\\n${instance.hints}` : \"\",\n ``,\n `## Instructions`,\n `1. Read the relevant source files to understand the codebase`,\n `2. Identify the root cause of the issue`,\n `3. Make the minimal code changes needed to fix it`,\n `4. Do NOT modify test files`,\n `5. Verify your changes make sense by re-reading the modified files`,\n ].join(\"\\n\");\n\n const result = await spawnSubagent(issuePrompt, {\n config,\n registry,\n router,\n costTracker,\n tools,\n projectPath: repoDir,\n type: \"code\",\n maxSteps: 15,\n budgetLimit: 3.0,\n permissionCheck: () => \"allow\", // unattended — auto-approve everything\n });\n\n // 4. Capture the diff (what the agent actually changed)\n let patch = \"\";\n try {\n patch = execGit(\"git\", [\"diff\"], {\n cwd: repoDir,\n encoding: \"utf-8\",\n timeout: 10000,\n stdio: [\"ignore\", \"pipe\", \"pipe\"],\n }) as unknown as string;\n\n // Also capture any new untracked files\n const untrackedDiff = execGit(\"git\", [\"diff\", \"--cached\"], {\n cwd: repoDir,\n encoding: \"utf-8\",\n timeout: 10000,\n stdio: [\"ignore\", \"pipe\", \"pipe\"],\n }) as unknown as string;\n if (untrackedDiff) patch += \"\\n\" + untrackedDiff;\n } catch {\n // git diff failed — no changes made\n }\n\n const success = patch.length > 0 && !result.budgetExceeded;\n const status = success\n ? \"✓\"\n : patch.length === 0\n ? \"no changes\"\n : \"budget exceeded\";\n process.stderr.write(\n ` ${status} ($${result.cost.toFixed(3)}, ${result.modelUsed})\\n`,\n );\n\n return {\n instanceId: instance.instanceId,\n patch,\n model: result.modelUsed,\n strategy: opts.model ? \"forced\" : \"quality-first\",\n cost: result.cost,\n latencyMs: Date.now() - startTime,\n success,\n };\n } finally {\n // Cleanup workspace\n try {\n rmSync(workDir, { recursive: true, force: true });\n } catch {\n /* best effort */\n }\n }\n } catch (err: any) {\n process.stderr.write(\n ` ERROR: ${(err.message ?? \"\").slice(0, 80)}\\n`,\n );\n return {\n instanceId: instance.instanceId,\n patch: \"\",\n model: \"error\",\n strategy: \"quality-first\",\n cost: 0,\n latencyMs: Date.now() - startTime,\n success: false,\n };\n }\n },\n concurrency,\n );\n\n // Score patches\n console.log(` Scoring ${patches.length} patches...`);\n const scores = patches.map((patch: any, i: number) =>\n scorePatch(instances[i], patch),\n );\n const scorecard = generateScorecard(patches, scores);\n\n if (opts.json) {\n console.log(JSON.stringify(scorecard, null, 2));\n return;\n }\n\n console.log(`\\n ══════════════════════════════════════════════════`);\n console.log(` SWE-bench Results`);\n console.log(` ══════════════════════════════════════════════════\\n`);\n console.log(` Total: ${scorecard.total}`);\n console.log(\n ` Passed: ${scorecard.passed} (${(scorecard.passRate * 100).toFixed(1)}%)`,\n );\n console.log(` Failed: ${scorecard.failed}`);\n console.log(` Errored: ${scorecard.errored}`);\n console.log(` Cost: $${scorecard.totalCost.toFixed(4)}`);\n console.log(` Avg Lat: ${scorecard.avgLatencyMs}ms`);\n console.log();\n },\n );\n\n// ── Router Commands (BrainstormRouter Gateway) ───────────────────\n\nconst routerCmd = program\n .command(\"router\")\n .description(\"Manage BrainstormRouter gateway\");\n\nrouterCmd\n .command(\"status\")\n .description(\"Show gateway health, budget, and rate limits\")\n .action(async () => {\n const gw = createGatewayClient();\n if (!gw) {\n console.error(\n \" BRAINSTORM_API_KEY not set. Configure with: export BRAINSTORM_API_KEY=br_live_xxx\",\n );\n return;\n }\n try {\n const [self, health] = await Promise.all([gw.getSelf(), gw.getHealth()]);\n console.log(\"\\n BrainstormRouter Gateway\\n\");\n console.log(` Health: ${health.status}`);\n console.log(` Role: ${self.identity.roles.join(\", \")}`);\n console.log(` Caps: ${self.capabilities.granted.length} permissions`);\n try {\n const discovery = await gw.getDiscovery();\n if (discovery.budget) {\n console.log(\n ` Budget: $${discovery.budget.remaining_usd?.toFixed(2)} / $${discovery.budget.limit_usd?.toFixed(2)} (${discovery.budget.period})`,\n );\n }\n if (discovery.models) {\n console.log(\n ` Models: ${discovery.models.available} available, ${discovery.models.runnable} runnable`,\n );\n }\n } catch {\n console.log(\" Budget: (discovery unavailable)\");\n console.log(\" Models: (discovery unavailable)\");\n }\n console.log();\n } catch (e: any) {\n console.error(` Error: ${e.message}`);\n }\n });\n\nrouterCmd\n .command(\"models\")\n .description(\"List models available through the gateway\")\n .option(\"--json\", \"Output as JSON\")\n .action(async (opts: { json?: boolean }) => {\n const gw = createGatewayClient();\n if (!gw) {\n console.error(\" BRAINSTORM_API_KEY not set.\");\n return;\n }\n try {\n const models = await gw.listModels();\n if (opts.json) {\n console.log(JSON.stringify(models, null, 2));\n return;\n }\n console.log(`\\n Gateway Models (${models.length})\\n`);\n for (const m of models.slice(0, 30)) {\n const name = (m.name ?? m.id).padEnd(40);\n const provider = (m.provider ?? \"\").padEnd(12);\n console.log(` ${provider} ${name}`);\n }\n if (models.length > 30)\n console.log(` ... and ${models.length - 30} more`);\n console.log();\n } catch (e: any) {\n console.error(` Error: ${e.message}`);\n }\n });\n\nrouterCmd\n .command(\"budget\")\n .description(\"Show gateway-side cost tracking and forecast\")\n .action(async () => {\n const gw = createGatewayClient();\n if (!gw) {\n console.error(\" BRAINSTORM_API_KEY not set.\");\n return;\n }\n try {\n const usage = await gw.getUsageSummary();\n console.log(\"\\n Gateway Budget\\n\");\n console.log(` Requests: ${usage.total_requests ?? \"N/A\"}`);\n console.log(` Cost: $${(usage.total_cost_usd ?? 0).toFixed(4)}`);\n console.log(\n ` Tokens: ${(usage.total_input_tokens ?? 0).toLocaleString()} in / ${(usage.total_output_tokens ?? 0).toLocaleString()} out`,\n );\n if (usage.by_model?.length > 0) {\n console.log(\"\\n By model:\");\n for (const m of usage.by_model) {\n console.log(\n ` ${m.model}: $${m.cost_usd.toFixed(4)} (${m.requests} reqs)`,\n );\n }\n }\n console.log();\n } catch (e: any) {\n console.error(` Error: ${e.message}`);\n }\n });\n\nrouterCmd\n .command(\"keys\")\n .description(\"List API keys\")\n .option(\"--json\", \"Output as JSON\")\n .action(async (opts: { json?: boolean }) => {\n const gw = createGatewayClient();\n if (!gw) {\n console.error(\" BRAINSTORM_API_KEY not set.\");\n return;\n }\n try {\n const keys = await gw.listKeys();\n if (opts.json) {\n console.log(JSON.stringify(keys, null, 2));\n return;\n }\n console.log(`\\n API Keys (${keys.length})\\n`);\n for (const k of keys) {\n const budget = k.budgetLimitUsd\n ? `$${k.budgetLimitUsd}/${k.budgetPeriod}`\n : \"unlimited\";\n console.log(\n ` ${k.id.slice(0, 8)} ${(k.name ?? \"\").padEnd(30)} scopes=${JSON.stringify(k.scopes)} budget=${budget}`,\n );\n }\n console.log();\n } catch (e: any) {\n console.error(` Error: ${e.message}`);\n }\n });\n\nrouterCmd\n .command(\"config\")\n .description(\"Get or set gateway configuration\")\n .argument(\"<key>\", \"Config key (e.g., guardrails, tools)\")\n .argument(\"[value]\", \"JSON value to set (omit to read)\")\n .action(async (key: string, value?: string) => {\n const gw = createGatewayClient();\n if (!gw) {\n console.error(\" BRAINSTORM_API_KEY not set.\");\n return;\n }\n try {\n if (value) {\n await gw.setConfig(key, JSON.parse(value));\n console.log(` Set config/${key}`);\n } else {\n const data = await gw.getConfig(key);\n console.log(JSON.stringify(data, null, 2));\n }\n } catch (e: any) {\n console.error(` Error: ${e.message}`);\n }\n });\n\nrouterCmd\n .command(\"audit\")\n .description(\"Show recent request audit trail\")\n .option(\"--since <duration>\", \"Time range (e.g., 1h, 24h, 7d)\", \"24h\")\n .action(async (opts: { since: string }) => {\n const gw = createGatewayClient();\n if (!gw) {\n console.error(\" BRAINSTORM_API_KEY not set.\");\n return;\n }\n try {\n const entries = await gw.getCompletionAudit(opts.since);\n console.log(`\\n Audit Trail (last ${opts.since})\\n`);\n if (entries.length === 0) {\n console.log(\" No entries found.\");\n }\n for (const e of entries.slice(0, 20)) {\n console.log(\n ` ${e.timestamp} ${(e.model ?? \"\").padEnd(35)} $${(e.cost_usd ?? 0).toFixed(4)} ${e.latency_ms ?? \"?\"}ms guardian=${e.guardian_status ?? \"?\"}`,\n );\n }\n if (entries.length > 20)\n console.log(` ... ${entries.length - 20} more`);\n console.log();\n } catch (e: any) {\n console.error(` Error: ${e.message}`);\n }\n });\n\nrouterCmd\n .command(\"memory\")\n .description(\"List gateway memory entries\")\n .action(async () => {\n const gw = createGatewayClient();\n if (!gw) {\n console.error(\" BRAINSTORM_API_KEY not set.\");\n return;\n }\n try {\n const entries = await gw.listMemory();\n console.log(`\\n Gateway Memory (${entries.length} entries)\\n`);\n for (const e of entries) {\n const block = e.block ?? \"unknown\";\n const content = e.content ?? JSON.stringify(e).slice(0, 80);\n console.log(\n ` [${block}] ${content.slice(0, 80)}${content.length > 80 ? \"...\" : \"\"}`,\n );\n }\n console.log();\n } catch (e: any) {\n console.error(` Error: ${e.message}`);\n }\n });\n\n// ── Models Command ────────────────────────────────────────────────\n\nprogram\n .command(\"models\")\n .description(\"List available models and their status\")\n .action(async () => {\n const config = loadConfig();\n const registry = await createProviderRegistry(\n config,\n await resolveProviderKeys(),\n );\n\n console.log(\"\\n🧠 Brainstorm — Available Models\\n\");\n\n const local = registry.models.filter((m) => m.isLocal);\n const cloud = registry.models.filter((m) => !m.isLocal);\n\n if (local.length > 0) {\n console.log(\" Local Models:\");\n for (const m of local) {\n const status = m.status === \"available\" ? \"●\" : \"○\";\n console.log(\n ` ${status} ${m.id} (quality: ${m.capabilities.qualityTier}, speed: ${m.capabilities.speedTier})`,\n );\n }\n console.log();\n } else {\n console.log(\n \" Local Models: none detected (start Ollama, LM Studio, or llama.cpp)\\n\",\n );\n }\n\n console.log(\" Cloud Models (via AI Gateway):\");\n for (const m of cloud) {\n const cost = `$${m.pricing.inputPer1MTokens}/${m.pricing.outputPer1MTokens} per 1M tokens`;\n console.log(\n ` ● ${m.id} (quality: ${m.capabilities.qualityTier}, ${cost})`,\n );\n }\n console.log();\n });\n\nprogram\n .command(\"budget\")\n .description(\"Show cost tracking and budget status\")\n .action(async () => {\n const config = loadConfig();\n const db = getDb();\n const costTracker = new CostTracker(db, config.budget);\n const summary = costTracker.getSummary();\n\n console.log(\"\\n🧠 Brainstorm — Budget Status\\n\");\n console.log(` Session: $${summary.session.toFixed(4)}`);\n console.log(\n ` Today: $${summary.today.toFixed(4)}${config.budget.daily ? ` / $${config.budget.daily.toFixed(2)}` : \"\"}`,\n );\n console.log(\n ` This month: $${summary.thisMonth.toFixed(4)}${config.budget.monthly ? ` / $${config.budget.monthly.toFixed(2)}` : \"\"}`,\n );\n\n if (summary.byModel.length > 0) {\n console.log(\"\\n Cost by model:\");\n for (const entry of summary.byModel) {\n console.log(\n ` ${entry.modelId}: $${entry.totalCost.toFixed(4)} (${entry.requestCount} requests)`,\n );\n }\n }\n console.log();\n });\n\nprogram\n .command(\"config\")\n .description(\"Show current configuration\")\n .action(async () => {\n const config = loadConfig();\n console.log(\"\\n🧠 Brainstorm — Configuration\\n\");\n console.log(` Strategy: ${config.general.defaultStrategy}`);\n console.log(` Max steps: ${config.general.maxSteps}`);\n console.log(` Confirm tools: ${config.general.confirmTools}`);\n console.log(\n ` Budget daily: ${config.budget.daily ? `$${config.budget.daily}` : \"unlimited\"}`,\n );\n console.log(\n ` Budget monthly: ${config.budget.monthly ? `$${config.budget.monthly}` : \"unlimited\"}`,\n );\n console.log(` Hard limit: ${config.budget.hardLimit}`);\n console.log(\n ` Ollama: ${config.providers.ollama.enabled ? config.providers.ollama.baseUrl : \"disabled\"}`,\n );\n console.log(\n ` LM Studio: ${config.providers.lmstudio.enabled ? config.providers.lmstudio.baseUrl : \"disabled\"}`,\n );\n console.log(\n ` llama.cpp: ${config.providers.llamacpp.enabled ? config.providers.llamacpp.baseUrl : \"disabled\"}`,\n );\n console.log(\n ` AI Gateway: ${config.providers.gateway.enabled ? \"enabled\" : \"disabled\"}`,\n );\n if (config.routing.rules.length > 0) {\n console.log(` Routing rules: ${config.routing.rules.length}`);\n }\n console.log();\n });\n\n// ── Agent Commands ─────────────────────────────────────────────────\n\nconst agentCmd = program.command(\"agent\").description(\"Manage named agents\");\n\nagentCmd\n .command(\"create\")\n .description(\"Create an agent (structured flags or natural language)\")\n .argument(\n \"[description...]\",\n 'Natural language description (e.g., \"architect using opus with $30 budget\")',\n )\n .option(\"--id <id>\", \"Agent ID\")\n .option(\"--model <model>\", \"Model ID or alias\")\n .option(\n \"--role <role>\",\n \"Agent role (architect|coder|reviewer|debugger|analyst|custom)\",\n )\n .option(\"--budget <usd>\", \"Per-workflow budget in USD\", parseFloat)\n .option(\"--budget-daily <usd>\", \"Daily budget in USD\", parseFloat)\n .option(\"--description <desc>\", \"What this agent does\")\n .option(\"--confidence <threshold>\", \"Confidence threshold 0-1\", parseFloat)\n .action(async (descWords: string[], opts: any) => {\n const config = loadConfig();\n const db = getDb();\n const manager = new AgentManager(db, config);\n\n // Try natural language first\n const nlInput = descWords.join(\" \");\n const parseResult = nlInput ? parseAgentNL(nlInput) : null;\n const parsed = parseResult?.intent;\n\n if (nlInput && !parsed && parseResult?.suggestion) {\n console.log(\n ` Could not parse agent definition.\\n ${parseResult.suggestion}`,\n );\n process.exit(1);\n }\n\n const id = opts.id ?? parsed?.id ?? \"agent-\" + Date.now().toString(36);\n const role = opts.role ?? parsed?.role ?? \"custom\";\n const modelId = opts.model ?? parsed?.modelId ?? \"auto\";\n const budget = opts.budget ?? parsed?.budget;\n const budgetDaily = opts.budgetDaily ?? parsed?.budgetDaily;\n const description = opts.description ?? parsed?.description ?? \"\";\n const confidence = opts.confidence ?? 0.7;\n\n const agent = manager.create({\n id,\n displayName: id.charAt(0).toUpperCase() + id.slice(1),\n role,\n description,\n modelId,\n allowedTools: role === \"coder\" ? \"all\" : [\"file_read\", \"glob\", \"grep\"],\n budget: {\n perWorkflow: budget,\n daily: budgetDaily,\n exhaustionAction: \"downgrade\",\n },\n confidenceThreshold: confidence,\n maxSteps: 10,\n fallbackChain: [],\n guardrails: { pii: parsed?.guardrailsPii },\n lifecycle: \"active\",\n });\n\n console.log(`\\n Created agent '${agent.id}'`);\n console.log(` Role: ${agent.role}`);\n console.log(` Model: ${agent.modelId}`);\n if (agent.budget.perWorkflow)\n console.log(` Budget: $${agent.budget.perWorkflow}/workflow`);\n if (agent.budget.daily)\n console.log(` Daily: $${agent.budget.daily}/day`);\n if (agent.guardrails.pii) console.log(` Guardrails: PII enabled`);\n console.log();\n });\n\nagentCmd\n .command(\"list\")\n .description(\"List all agents\")\n .action(async () => {\n const config = loadConfig();\n const db = getDb();\n const manager = new AgentManager(db, config);\n const agents = manager.list();\n\n console.log(\"\\n Agents:\\n\");\n if (agents.length === 0) {\n console.log(\n \" No agents defined. Create one with: storm agent create <description>\",\n );\n }\n for (const a of agents) {\n const budget = a.budget.perWorkflow\n ? `$${a.budget.perWorkflow}/wf`\n : a.budget.daily\n ? `$${a.budget.daily}/day`\n : \"unlimited\";\n console.log(\n ` ${a.id} (${a.role}) model: ${a.modelId} budget: ${budget}`,\n );\n }\n console.log();\n });\n\nagentCmd\n .command(\"show\")\n .description(\"Show agent details\")\n .argument(\"<id>\", \"Agent ID\")\n .action(async (id: string) => {\n const config = loadConfig();\n const db = getDb();\n const manager = new AgentManager(db, config);\n const agent = manager.get(id);\n\n if (!agent) {\n console.error(` Agent '${id}' not found.`);\n process.exit(1);\n }\n\n console.log(`\\n Agent: ${agent.id}`);\n console.log(` Display Name: ${agent.displayName}`);\n console.log(` Role: ${agent.role}`);\n console.log(` Model: ${agent.modelId}`);\n console.log(` Description: ${agent.description || \"(none)\"}`);\n console.log(` Allowed Tools: ${JSON.stringify(agent.allowedTools)}`);\n console.log(\n ` Budget/Workflow: ${agent.budget.perWorkflow ? `$${agent.budget.perWorkflow}` : \"unlimited\"}`,\n );\n console.log(\n ` Budget/Daily: ${agent.budget.daily ? `$${agent.budget.daily}` : \"unlimited\"}`,\n );\n console.log(` Confidence: ${agent.confidenceThreshold}`);\n console.log(\n ` Fallback Chain: ${agent.fallbackChain.length > 0 ? agent.fallbackChain.join(\" → \") : \"(none)\"}`,\n );\n console.log(` Guardrails: PII=${agent.guardrails.pii ?? false}`);\n console.log(` Status: ${agent.lifecycle}`);\n console.log();\n });\n\nagentCmd\n .command(\"delete\")\n .description(\"Delete an agent\")\n .argument(\"<id>\", \"Agent ID\")\n .action(async (id: string) => {\n const config = loadConfig();\n const db = getDb();\n const manager = new AgentManager(db, config);\n try {\n const deleted = manager.delete(id);\n if (deleted) console.log(` Deleted agent '${id}'.`);\n else console.error(` Agent '${id}' not found.`);\n } catch (e: any) {\n console.error(` ${e.message}`);\n }\n });\n\n// ── Workflow Commands ──────────────────────────────────────────────\n\nconst workflowCmd = program\n .command(\"workflow\")\n .description(\"Run multi-agent workflows\");\n\nworkflowCmd\n .command(\"list\")\n .description(\"List available workflows\")\n .action(async () => {\n console.log(\"\\n Workflows:\\n\");\n for (const w of PRESET_WORKFLOWS) {\n const steps = w.steps.map((s) => s.agentRole).join(\" → \");\n console.log(` ${w.id} — ${w.description}`);\n console.log(\n ` Steps: ${steps} (mode: ${w.communicationMode}, max loops: ${w.maxIterations})`,\n );\n }\n console.log();\n });\n\nworkflowCmd\n .command(\"run\")\n .description(\"Run a workflow\")\n .argument(\"<preset>\", \"Workflow preset ID or natural language description\")\n .argument(\"[description...]\", \"What to build/fix/review\")\n .option(\n \"--agents <mapping>\",\n 'Agent role overrides (e.g., \"architect=my-arch,coder=my-coder\")',\n )\n .option(\"--mode <mode>\", \"Communication mode (handoff|shared)\", \"handoff\")\n .option(\n \"--step-model <overrides...>\",\n 'Per-step model overrides (e.g., \"plan=claude-opus-4.6 code=claude-sonnet-4.6\")',\n )\n .option(\"--dry-run\", \"Show cost forecast only\")\n .action(async (preset: string, descWords: string[], opts: any) => {\n const description = descWords.join(\" \") || preset;\n\n // Resolve workflow\n let workflow = getPresetWorkflow(preset);\n if (!workflow) {\n const autoPreset = autoSelectPreset(preset + \" \" + description);\n if (autoPreset) workflow = getPresetWorkflow(autoPreset);\n }\n if (!workflow) {\n console.error(\n ` Unknown workflow: '${preset}'. Run 'storm workflow list' to see available workflows.`,\n );\n process.exit(1);\n }\n\n const config = loadConfig();\n const db = getDb();\n const registry = await createProviderRegistry(\n config,\n await resolveProviderKeys(),\n );\n const costTracker = new CostTracker(db, config.budget);\n const projectPath = process.cwd();\n const { frontmatter } = buildSystemPrompt(projectPath);\n const router = new BrainstormRouter(\n config,\n registry,\n costTracker,\n frontmatter,\n );\n const agentManager = new AgentManager(db, config);\n\n // Parse agent overrides\n const agentOverrides: Record<string, string> = {};\n if (opts.agents) {\n for (const pair of opts.agents.split(\",\")) {\n const [role, agentId] = pair.split(\"=\");\n if (role && agentId) agentOverrides[role.trim()] = agentId.trim();\n }\n }\n\n // Parse step model overrides: --step-model \"plan=claude-opus-4.6\" \"code=claude-sonnet-4.6\"\n const stepModelOverrides: Record<string, string> = {};\n if (opts.stepModel) {\n const items = Array.isArray(opts.stepModel)\n ? opts.stepModel\n : [opts.stepModel];\n for (const item of items) {\n for (const pair of (item as string).split(/\\s+/)) {\n const [step, model] = pair.split(\"=\");\n if (step && model) stepModelOverrides[step.trim()] = model.trim();\n }\n }\n }\n\n console.log(`\\n Workflow: ${workflow.name}`);\n console.log(` Request: \"${description}\"`);\n console.log(\n ` Steps: ${workflow.steps.map((s) => s.agentRole).join(\" → \")}`,\n );\n if (Object.keys(stepModelOverrides).length > 0) {\n console.log(\n ` Model overrides: ${Object.entries(stepModelOverrides)\n .map(([s, m]) => `${s}=${m}`)\n .join(\", \")}`,\n );\n }\n console.log();\n\n for await (const event of runWorkflow(\n workflow,\n description,\n agentOverrides,\n {\n config,\n db,\n registry,\n router,\n costTracker,\n agentManager,\n projectPath,\n stepModelOverrides,\n },\n )) {\n switch (event.type) {\n case \"cost-forecast\":\n console.log(` Estimated cost: $${event.estimated.toFixed(4)}`);\n for (const b of event.breakdown) {\n console.log(` ${b.step}: $${b.cost.toFixed(4)}`);\n }\n if (opts.dryRun) {\n console.log(\"\\n (dry run — not executing)\\n\");\n return;\n }\n console.log();\n break;\n case \"step-started\":\n process.stdout.write(\n ` [${event.agent.role}] ${event.agent.displayName} (${event.agent.modelId})...`,\n );\n break;\n case \"step-progress\":\n if (event.event.type === \"text-delta\") {\n // Don't flood output — just show dots for progress\n }\n if (event.event.type === \"routing\") {\n process.stdout.write(` → ${event.event.decision.model.name}`);\n }\n break;\n case \"step-completed\":\n console.log(\n ` done ($${event.step.cost.toFixed(4)}, confidence: ${event.artifact.confidence.toFixed(2)})`,\n );\n break;\n case \"step-failed\":\n console.log(` FAILED: ${event.error.message}`);\n break;\n case \"review-rejected\":\n console.log(\n ` [review] Rejected — looping back to ${event.loopingBackTo} (iteration ${event.step.iteration + 1})`,\n );\n break;\n case \"confidence-escalation\":\n console.log(\n ` [confidence] ${event.action} (${event.confidence.toFixed(2)})`,\n );\n break;\n case \"model-fallback\":\n console.log(\n ` [fallback] ${event.originalModel} → ${event.fallbackModel}: ${event.reason}`,\n );\n break;\n case \"workflow-completed\":\n console.log(\n `\\n Workflow complete. Total cost: $${event.run.totalCost.toFixed(4)}`,\n );\n console.log(\n ` Artifacts: ${event.run.artifacts.map((a) => a.id).join(\", \")}\\n`,\n );\n break;\n case \"workflow-failed\":\n console.log(`\\n Workflow failed: ${event.error.message}\\n`);\n break;\n }\n }\n });\n\n// ── Run Command ────────────────────────────────────────────────────\n\nprogram\n .command(\"run\")\n .description(\"Run a single prompt non-interactively\")\n .argument(\"[prompt]\", \"The prompt to send\")\n .option(\"--json\", \"Output structured JSON (for CI/CD pipelines)\")\n .option(\"--pipe\", \"Read from stdin if no prompt given\")\n .option(\"--model <id>\", \"Target a specific model (bypass routing)\")\n .option(\"--tools\", \"Enable tool use (default: disabled)\")\n .option(\"--max-steps <n>\", \"Maximum agentic steps (default: 1)\", \"1\")\n .option(\n \"--strategy <name>\",\n \"Routing strategy: cost-first, quality-first, combined, capability\",\n )\n .option(\"--lfg\", \"Full auto mode — skip all permission confirmations\")\n .option(\n \"--unattended\",\n \"Unattended mode — enable tools, auto-approve, auto-commit on success\",\n )\n .action(\n async (\n prompt: string | undefined,\n opts: {\n json?: boolean;\n pipe?: boolean;\n model?: string;\n tools?: boolean;\n maxSteps?: string;\n strategy?: string;\n lfg?: boolean;\n unattended?: boolean;\n },\n ) => {\n // Handle --pipe: read prompt from stdin\n let finalPrompt = prompt;\n if (opts.pipe) {\n const chunks: Buffer[] = [];\n for await (const chunk of process.stdin) {\n chunks.push(chunk);\n }\n const stdinText = Buffer.concat(chunks).toString(\"utf-8\").trim();\n if (finalPrompt) {\n // Append stdin to prompt argument\n finalPrompt = `${finalPrompt}\\n\\n${stdinText}`;\n } else {\n finalPrompt = stdinText;\n }\n }\n if (!finalPrompt) {\n process.stderr.write(\n \"Error: No prompt provided. Pass a prompt argument or use --pipe to read from stdin.\\n\",\n );\n process.exit(1);\n }\n\n const config = loadConfig();\n\n // --lfg / --unattended: full auto mode, skip all permission confirmations\n if (opts.lfg || opts.unattended) {\n config.general.defaultPermissionMode = \"auto\";\n }\n // --unattended: enable tools and higher step count by default\n if (opts.unattended) {\n opts.tools = true;\n if (!opts.maxSteps || opts.maxSteps === \"1\") opts.maxSteps = \"15\";\n }\n\n const db = getDb();\n const resolvedKeys = await resolveProviderKeys();\n const resolvedBRKey =\n resolvedKeys.get(\"BRAINSTORM_API_KEY\") ?? getBrainstormApiKey();\n const isCommunityTier = isCommunityKey(resolvedBRKey);\n // Set env for native BR tools (br_status, br_budget, etc.)\n if (resolvedBRKey) process.env._BR_RESOLVED_KEY = resolvedBRKey;\n const registry = await createProviderRegistry(config, resolvedKeys);\n const costTracker = new CostTracker(db, config.budget);\n const tools = createDefaultToolRegistry();\n await connectMCPServers(\n tools,\n config,\n resolvedKeys.get(\"BRAINSTORM_API_KEY\"),\n );\n const sessionManager = new SessionManager(db);\n const projectPath = process.cwd();\n configureSandbox(\n config.shell.sandbox as any,\n projectPath,\n config.shell.maxOutputBytes,\n config.shell.containerImage,\n config.shell.containerTimeout,\n );\n const {\n prompt: rawPrompt,\n segments: rawSegments,\n frontmatter,\n } = buildSystemPrompt(projectPath);\n const toolSection = buildToolAwarenessSection(tools.listTools());\n const systemPrompt = rawPrompt + toolSection;\n const systemSegments: SystemPromptSegment[] =\n rawSegments.length > 0\n ? [\n { text: rawSegments[0].text + toolSection, cacheable: true },\n ...rawSegments.slice(1),\n ]\n : [{ text: systemPrompt, cacheable: true }];\n const routingOutcomeRepo = new RoutingOutcomeRepository(db);\n const router = new BrainstormRouter(\n config,\n registry,\n costTracker,\n frontmatter,\n routingOutcomeRepo.loadAggregated(),\n );\n\n // Permission manager — gates tool execution\n const permissionManager = new PermissionManager(\n config.general.defaultPermissionMode as any,\n config.permissions,\n );\n\n // Strategy: CLI flag → paid/direct-key default → config default\n const hasDirectKeys =\n !!resolvedKeys.get(\"DEEPSEEK_API_KEY\") ||\n !!resolvedKeys.get(\"ANTHROPIC_API_KEY\") ||\n !!resolvedKeys.get(\"OPENAI_API_KEY\") ||\n !!resolvedKeys.get(\"GOOGLE_GENERATIVE_AI_API_KEY\") ||\n !!resolvedKeys.get(\"MOONSHOT_API_KEY\");\n if (opts.strategy) {\n router.setStrategy(opts.strategy as any);\n } else if (!isCommunityTier || hasDirectKeys) {\n router.setStrategy(\"quality-first\");\n }\n\n // God Mode: connect if any connector key is present\n const runHasConnectorKey = !!(\n process.env.BRAINSTORM_MSP_API_KEY ||\n process.env.BRAINSTORM_EMAIL_API_KEY ||\n process.env.BRAINSTORM_VM_API_KEY ||\n process.env._GM_MSP_KEY ||\n process.env._GM_EMAIL_KEY ||\n process.env._GM_VM_KEY\n );\n if (runHasConnectorKey || config.godmode.enabled) {\n try {\n const {\n connectGodMode: connectGM,\n createProductConnectors: createPC,\n setAuditPersister: setAP,\n } = await import(\"@brainst0rm/godmode\");\n const { ChangeSetLogRepository: CSLogRun } =\n await import(\"@brainst0rm/db\");\n\n const csLogRun = new CSLogRun(db);\n setAP((entry) => {\n csLogRun.log({\n changesetId: entry.changesetId,\n connector: entry.connector,\n action: entry.action,\n description: entry.description,\n riskScore: entry.riskScore,\n status: entry.status,\n changesJson: entry.changesJson,\n simulationJson: entry.simulationJson,\n rollbackJson: entry.rollbackJson,\n createdAt: entry.createdAt,\n executedAt: entry.executedAt,\n sessionId: null,\n });\n });\n\n const defaultConns: Record<string, any> = {\n msp: {\n enabled: true,\n baseUrl:\n process.env.BRAINSTORM_MSP_URL ?? \"https://brainstormmsp.ai\",\n apiKeyName: \"BRAINSTORM_MSP_API_KEY\",\n },\n };\n const mergedConfig = {\n ...config.godmode,\n connectors: { ...defaultConns, ...config.godmode.connectors },\n };\n const activeConns = await createPC(mergedConfig);\n\n const gmResult = await connectGM(tools, mergedConfig, activeConns);\n\n if (gmResult.connectedSystems.length > 0) {\n // Rebuild tool awareness and system prompt with God Mode tools\n const gmToolSection = buildToolAwarenessSection(tools.listTools());\n systemSegments[0] = {\n text:\n rawSegments[0]?.text +\n gmToolSection +\n \"\\n\" +\n (gmResult.promptSegment?.text ?? \"\"),\n cacheable: true,\n };\n process.stderr.write(\n `[godmode] Connected: ${gmResult.connectedSystems.map((s) => s.displayName).join(\", \")} (${gmResult.totalTools} tools)\\n`,\n );\n }\n } catch (err) {\n process.stderr.write(\n `[godmode] ${err instanceof Error ? err.message : String(err)}\\n`,\n );\n }\n }\n\n const session = sessionManager.start(projectPath);\n\n sessionManager.addUserMessage(finalPrompt);\n\n let fullResponse = \"\";\n let modelName = \"unknown\";\n let toolCallCount = 0;\n\n if (!opts.json) {\n process.stdout.write(\"\\n\");\n }\n\n const middleware = createDefaultMiddlewarePipeline(projectPath);\n for await (const event of runAgentLoop(sessionManager.getHistory(), {\n config,\n registry,\n router,\n costTracker,\n tools,\n sessionId: session.id,\n projectPath,\n systemPrompt,\n systemSegments,\n disableTools: !opts.tools,\n preferredModelId:\n opts.model ??\n (resolvedKeys.get(\"MOONSHOT_API_KEY\")\n ? \"moonshot/kimi-k2.5\"\n : isCommunityTier &&\n !resolvedKeys.get(\"DEEPSEEK_API_KEY\") &&\n !resolvedKeys.get(\"ANTHROPIC_API_KEY\") &&\n !resolvedKeys.get(\"OPENAI_API_KEY\") &&\n !resolvedKeys.get(\"GOOGLE_GENERATIVE_AI_API_KEY\")\n ? \"brainstormrouter/auto\"\n : undefined),\n maxSteps: parseInt(opts.maxSteps ?? \"1\"),\n compaction: buildCompactionCallbacks(sessionManager),\n permissionCheck: (tool, args) => permissionManager.check(tool, args),\n middleware,\n routingOutcomeRepo,\n })) {\n switch (event.type) {\n case \"thinking\":\n if (!opts.json) {\n const spinnerFrames = [\n \"⠋\",\n \"⠙\",\n \"⠹\",\n \"⠸\",\n \"⠼\",\n \"⠴\",\n \"⠦\",\n \"⠧\",\n \"⠇\",\n \"⠏\",\n ];\n const frame =\n spinnerFrames[\n Math.floor(Date.now() / 100) % spinnerFrames.length\n ];\n const phases: Record<string, string> = {\n classifying: \"Classifying task...\",\n routing: \"Selecting model...\",\n connecting: `Connecting...`,\n streaming: \"Streaming...\",\n };\n process.stderr.write(\n `\\r${frame} ${phases[event.phase] ?? event.phase}`,\n );\n }\n break;\n case \"routing\":\n modelName = event.decision.model.name;\n process.stderr.write(\n `\\r[${event.decision.strategy}] → ${modelName}\\n`,\n );\n break;\n case \"text-delta\":\n fullResponse += event.delta;\n break;\n case \"tool-call-start\":\n toolCallCount++;\n process.stderr.write(`\\n[tool: ${event.toolName}]\\n`);\n break;\n case \"gateway-feedback\": {\n const gwLine = formatGatewayFeedback(event.feedback);\n if (gwLine) process.stderr.write(`${gwLine}\\n`);\n break;\n }\n case \"model-retry\":\n process.stderr.write(\n `\\n[retry] ${event.fromModel} → ${event.toModel} (${event.reason})\\n`,\n );\n modelName = event.toModel;\n fullResponse = \"\"; // Reset for retry\n break;\n case \"done\":\n if (opts.json) {\n // Structured JSON output for CI/CD — only valid JSON on stdout\n process.stdout.write(\n JSON.stringify({\n text: fullResponse,\n model: modelName,\n cost: event.totalCost,\n toolCalls: toolCallCount,\n success: true,\n }) + \"\\n\",\n );\n } else {\n process.stdout.write(renderMarkdownToString(fullResponse));\n process.stdout.write(\n `\\n\\n[cost: $${event.totalCost.toFixed(4)}]\\n`,\n );\n }\n break;\n case \"error\":\n if (opts.json) {\n process.stdout.write(\n JSON.stringify({\n text: \"\",\n model: modelName,\n cost: 0,\n toolCalls: toolCallCount,\n error: event.error.message,\n success: false,\n }) + \"\\n\",\n );\n process.exit(1);\n } else {\n process.stderr.write(`\\nError: ${event.error.message}\\n`);\n }\n break;\n }\n }\n\n if (fullResponse) {\n sessionManager.addAssistantMessage(fullResponse);\n sessionManager.flush();\n }\n },\n );\n\n// ── Probe Command ─────────────────────────────────────────────────\n\nprogram\n .command(\"probe\")\n .description(\n \"Run an ad-hoc eval probe with verification (for autonomous testing)\",\n )\n .argument(\"<prompt>\", \"The prompt to test\")\n .option(\"--model <id>\", \"Target a specific model\")\n .option(\n \"--expect-tools <tools>\",\n \"Comma-separated tool names that must be called\",\n )\n .option(\n \"--expect-contains <strings>\",\n \"Comma-separated strings that must appear in output\",\n )\n .option(\n \"--expect-excludes <strings>\",\n \"Comma-separated strings that must NOT appear\",\n )\n .option(\"--min-steps <n>\", \"Minimum number of agentic steps\")\n .option(\"--max-steps <n>\", \"Maximum number of agentic steps\", \"10\")\n .option(\"--timeout <ms>\", \"Timeout in milliseconds\", \"30000\")\n .option(\"--json\", \"Output full ProbeResult as JSON\")\n .option(\"--setup-file <pairs...>\", \"Setup files as path=content pairs\")\n .action(async (prompt: string, opts: any) => {\n // Build Probe from CLI args\n const probe: any = {\n id: `adhoc-${Date.now().toString(36)}`,\n capability: \"multi-step\" as const,\n prompt,\n verify: {},\n timeout_ms: parseInt(opts.timeout),\n };\n\n if (opts.expectTools) {\n probe.verify.tool_calls_include = opts.expectTools\n .split(\",\")\n .map((s: string) => s.trim());\n }\n if (opts.expectContains) {\n probe.verify.answer_contains = opts.expectContains\n .split(\",\")\n .map((s: string) => s.trim());\n }\n if (opts.expectExcludes) {\n probe.verify.answer_excludes = opts.expectExcludes\n .split(\",\")\n .map((s: string) => s.trim());\n }\n if (opts.minSteps) {\n probe.verify.min_steps = parseInt(opts.minSteps);\n }\n if (opts.maxSteps) {\n probe.verify.max_steps = parseInt(opts.maxSteps);\n }\n\n // Parse setup files: --setup-file \"path=content\" --setup-file \"path2=content2\"\n if (opts.setupFile) {\n probe.setup = { files: {} as Record<string, string> };\n for (const pair of opts.setupFile) {\n const eqIdx = pair.indexOf(\"=\");\n if (eqIdx > 0) {\n probe.setup.files[pair.slice(0, eqIdx)] = pair.slice(eqIdx + 1);\n }\n }\n }\n\n const result = await runProbe(probe, {\n modelId: opts.model,\n maxSteps: parseInt(opts.maxSteps),\n defaultTimeout: parseInt(opts.timeout),\n });\n\n if (opts.json) {\n process.stdout.write(JSON.stringify(result, null, 2) + \"\\n\");\n } else {\n const status = result.passed ? \"PASSED\" : \"FAILED\";\n console.log(`\\n Probe: ${status}`);\n console.log(` Model: ${result.modelId}`);\n console.log(` Steps: ${result.steps}`);\n console.log(` Cost: $${result.cost.toFixed(4)}`);\n console.log(` Time: ${result.durationMs}ms`);\n if (result.toolCalls.length > 0) {\n console.log(\n ` Tools: ${result.toolCalls.map((t) => t.name).join(\", \")}`,\n );\n }\n if (!result.passed) {\n const failures = result.checks.filter((c) => !c.passed);\n console.log(` Failures:`);\n for (const f of failures) {\n console.log(` - ${f.check}: ${f.detail ?? \"failed\"}`);\n }\n }\n if (result.error) console.log(` Error: ${result.error}`);\n console.log(\n ` Output: ${result.output.slice(0, 200)}${result.output.length > 200 ? \"...\" : \"\"}`,\n );\n console.log();\n }\n\n process.exit(result.passed ? 0 : 1);\n });\n\n// ── Vault Commands ─────────────────────────────────────────────────\n\nconst VAULT_PATH = join(homedir(), \".brainstorm\", \"vault.enc\");\n\nfunction printResumeSummary(\n session: any,\n sessionManager: SessionManager,\n): void {\n const age = Math.floor((Date.now() / 1000 - session.createdAt) / 60);\n const ageStr =\n age < 60\n ? `${age}m ago`\n : age < 1440\n ? `${Math.floor(age / 60)}h ago`\n : `${Math.floor(age / 1440)}d ago`;\n const history = sessionManager.getHistory();\n const lastMsg = history.length > 0 ? history[history.length - 1] : null;\n const lastPreview = lastMsg\n ? `\"${lastMsg.content.slice(0, 60)}${lastMsg.content.length > 60 ? \"...\" : \"\"}\"`\n : \"none\";\n console.log(\n ` Resumed session ${session.id.slice(0, 8)} | ${session.messageCount} msgs | $${(session.totalCost ?? 0).toFixed(4)} | ${ageStr}`,\n );\n if (lastMsg) console.log(` Last ${lastMsg.role}: ${lastPreview}`);\n}\n\n/** Prompt for a password with masked echo. Supports BRAINSTORM_VAULT_PASSWORD env for non-interactive use. */\nfunction promptPassword(prompt: string): Promise<string> {\n // Non-interactive: use env var if set (for CI/CD and scripting)\n const envPassword = process.env.BRAINSTORM_VAULT_PASSWORD;\n if (envPassword) {\n console.error(\n \" [vault] Using BRAINSTORM_VAULT_PASSWORD from environment (no prompt)\",\n );\n return Promise.resolve(envPassword);\n }\n\n return new Promise((resolve, reject) => {\n process.stderr.write(prompt);\n\n // Always try to set raw mode to prevent terminal echo\n let rawModeWasSet = false;\n try {\n if (process.stdin.setRawMode) {\n process.stdin.setRawMode(true);\n rawModeWasSet = true;\n }\n } catch {\n // Some environments don't support raw mode\n }\n\n // Ensure stdin is in flowing mode\n if (process.stdin.isPaused?.()) process.stdin.resume();\n\n let password = \"\";\n const cleanup = () => {\n process.stdin.removeListener(\"data\", onData);\n if (rawModeWasSet) {\n try {\n process.stdin.setRawMode?.(false);\n } catch {\n /* ignore */\n }\n }\n process.stderr.write(\"\\n\");\n };\n\n const onData = (ch: Buffer) => {\n const c = ch.toString();\n if (c === \"\\n\" || c === \"\\r\" || c === \"\\u0004\") {\n cleanup();\n resolve(password);\n } else if (c === \"\\u0003\") {\n cleanup();\n reject(new Error(\"Cancelled\"));\n } else if (c === \"\\u007F\" || c === \"\\b\") {\n if (password.length > 0) {\n password = password.slice(0, -1);\n process.stderr.write(\"\\b \\b\");\n }\n } else if (c.charCodeAt(0) >= 32) {\n // Only accept printable characters\n password += c;\n process.stderr.write(\"*\");\n }\n };\n process.stdin.on(\"data\", onData);\n });\n}\n\nconst vaultCmd = program\n .command(\"vault\")\n .description(\"Manage encrypted key vault\");\n\nvaultCmd\n .command(\"init\")\n .description(\"Create a new encrypted vault\")\n .action(async () => {\n const vault = new BrainstormVault(VAULT_PATH);\n if (vault.exists()) {\n console.error(\n \" Vault already exists. Use `brainstorm vault rotate` to change password.\",\n );\n process.exit(1);\n }\n const password = await promptPassword(\" Master password: \");\n const confirm = await promptPassword(\" Confirm password: \");\n if (password !== confirm) {\n console.error(\" Passwords do not match.\");\n process.exit(1);\n }\n if (password.length < 8) {\n console.error(\" Password must be at least 8 characters.\");\n process.exit(1);\n }\n await vault.init(password);\n console.log(` Vault created at ${VAULT_PATH}`);\n });\n\nvaultCmd\n .command(\"add <name>\")\n .description(\"Add a key to the vault\")\n .argument(\"[value]\", \"Key value (prompted if omitted)\")\n .action(async (name: string, value?: string) => {\n const vault = new BrainstormVault(VAULT_PATH);\n const password = await promptPassword(\" Master password: \");\n vault.open(password);\n const keyValue = value ?? (await promptPassword(` Value for ${name}: `));\n vault.set(name, keyValue);\n vault.seal();\n console.log(` Added ${name} to vault.`);\n });\n\nvaultCmd\n .command(\"list\")\n .description(\"List stored key names\")\n .action(async () => {\n const vault = new BrainstormVault(VAULT_PATH);\n if (!vault.exists()) {\n console.log(\" No vault found. Run `brainstorm vault init` first.\");\n return;\n }\n const password = await promptPassword(\" Master password: \");\n vault.open(password);\n const keys = vault.list();\n if (keys.length === 0) {\n console.log(\" Vault is empty.\");\n } else {\n console.log(`\\n Keys (${keys.length}):\\n`);\n for (const k of keys) console.log(` ${k}`);\n console.log();\n }\n });\n\nvaultCmd\n .command(\"get <name>\")\n .description(\"Show a key value (masked by default)\")\n .option(\"--reveal\", \"Show the full unmasked value\")\n .action(async (name: string, opts: { reveal?: boolean }) => {\n const vault = new BrainstormVault(VAULT_PATH);\n const password = await promptPassword(\" Master password: \");\n vault.open(password);\n const value = vault.get(name);\n if (value) {\n if (opts.reveal) {\n console.log(value);\n } else {\n const masked =\n value.slice(0, 8) + \"*\".repeat(Math.max(0, value.length - 8));\n console.log(masked);\n }\n } else {\n console.error(` Key \"${name}\" not found in vault.`);\n process.exit(1);\n }\n });\n\nvaultCmd\n .command(\"remove <name>\")\n .description(\"Remove a key from the vault\")\n .action(async (name: string) => {\n const vault = new BrainstormVault(VAULT_PATH);\n const password = await promptPassword(\" Master password: \");\n vault.open(password);\n if (vault.delete(name)) {\n vault.seal();\n console.log(` Removed ${name} from vault.`);\n } else {\n console.error(` Key \"${name}\" not found in vault.`);\n process.exit(1);\n }\n });\n\nvaultCmd\n .command(\"rotate\")\n .description(\"Change vault master password\")\n .action(async () => {\n const vault = new BrainstormVault(VAULT_PATH);\n const current = await promptPassword(\" Current password: \");\n vault.open(current);\n const newPass = await promptPassword(\" New password: \");\n const confirm = await promptPassword(\" Confirm new password: \");\n if (newPass !== confirm) {\n console.error(\" Passwords do not match.\");\n process.exit(1);\n }\n if (newPass.length < 8) {\n console.error(\" Password must be at least 8 characters.\");\n process.exit(1);\n }\n vault.rotate(newPass);\n console.log(\" Vault password rotated.\");\n });\n\nvaultCmd\n .command(\"lock\")\n .description(\"Clear vault keys from memory\")\n .action(() => {\n console.log(\" Vault locked (keys cleared from memory).\");\n });\n\nvaultCmd\n .command(\"status\")\n .description(\"Show vault and backend status\")\n .action(async () => {\n const vault = new BrainstormVault(VAULT_PATH);\n const resolver = new KeyResolver(vault.exists() ? vault : null);\n const s = resolver.status();\n console.log(\"\\n Vault Status:\\n\");\n console.log(` Vault: ${s.vault}`);\n console.log(` 1Password: ${s.op}`);\n console.log(` Env vars: ${s.env}`);\n console.log(` Priority: vault → 1Password → env vars\\n`);\n });\n\n// ── Projects Command ──────────────────────────────────────────────\n\nconst projectsCmd = program\n .command(\"projects\")\n .description(\"Manage registered projects\");\n\nprojectsCmd\n .command(\"list\")\n .description(\"List all registered projects\")\n .option(\"--all\", \"Include inactive projects\")\n .action(async (opts: { all?: boolean }) => {\n const { ProjectManager } = await import(\"@brainst0rm/projects\");\n const db = getDb();\n const pm = new ProjectManager(db);\n const projects = pm.projects.list(opts.all);\n\n console.log(\"\\n Registered Projects:\\n\");\n if (projects.length === 0) {\n console.log(\n \" No projects registered. Run: storm projects register <path>\",\n );\n console.log(\" Or scan all: storm projects import ~/Projects\\n\");\n return;\n }\n for (const p of projects) {\n const dash = pm.dashboard(p.id);\n const cost = dash ? `$${dash.costToday.toFixed(4)}/day` : \"\";\n const sessions = dash ? `${dash.sessionCount} sessions` : \"\";\n const active = p.isActive ? \"\" : \" [inactive]\";\n console.log(\n ` ${p.name.padEnd(25)} ${sessions.padEnd(15)} ${cost.padEnd(15)} ${p.path}${active}`,\n );\n }\n console.log();\n });\n\nprojectsCmd\n .command(\"register\")\n .argument(\"<path>\", \"Path to project directory\")\n .option(\"-n, --name <name>\", \"Project name (default: directory name)\")\n .option(\"--budget-daily <amount>\", \"Daily budget limit in dollars\")\n .option(\"--budget-monthly <amount>\", \"Monthly budget limit in dollars\")\n .description(\"Register a project\")\n .action(\n async (\n path: string,\n opts: { name?: string; budgetDaily?: string; budgetMonthly?: string },\n ) => {\n const { ProjectManager } = await import(\"@brainst0rm/projects\");\n const db = getDb();\n const pm = new ProjectManager(db);\n try {\n const project = pm.register(path, opts.name, {\n budgetDaily: opts.budgetDaily\n ? parseFloat(opts.budgetDaily)\n : undefined,\n budgetMonthly: opts.budgetMonthly\n ? parseFloat(opts.budgetMonthly)\n : undefined,\n });\n console.log(`\\n ✓ Registered \"${project.name}\" → ${project.path}\\n`);\n } catch (err) {\n console.error(\n `\\n ✗ ${err instanceof Error ? err.message : String(err)}\\n`,\n );\n }\n },\n );\n\nprojectsCmd\n .command(\"switch\")\n .argument(\"<name>\", \"Project name to switch to\")\n .description(\"Set the active project for this session\")\n .action(async (name: string) => {\n const { ProjectManager } = await import(\"@brainst0rm/projects\");\n const db = getDb();\n const pm = new ProjectManager(db);\n try {\n const project = pm.switch(name);\n console.log(`\\n ✓ Switched to \"${project.name}\" (${project.path})\\n`);\n } catch (err) {\n console.error(\n `\\n ✗ ${err instanceof Error ? err.message : String(err)}\\n`,\n );\n }\n });\n\nprojectsCmd\n .command(\"show\")\n .argument(\"<name>\", \"Project name\")\n .description(\"Show project dashboard\")\n .action(async (name: string) => {\n const { ProjectManager } = await import(\"@brainst0rm/projects\");\n const db = getDb();\n const pm = new ProjectManager(db);\n const project = pm.projects.getByName(name);\n if (!project) {\n console.error(`\\n ✗ Project \"${name}\" not found.\\n`);\n return;\n }\n const dash = pm.dashboard(project.id);\n if (!dash) return;\n\n console.log(`\\n ── ${project.name} ──`);\n console.log(` Path: ${project.path}`);\n if (project.description)\n console.log(` Description: ${project.description}`);\n console.log(` Sessions: ${dash.sessionCount}`);\n console.log(` Cost today: $${dash.costToday.toFixed(4)}`);\n console.log(` Cost month: $${dash.costThisMonth.toFixed(4)}`);\n if (project.budgetDaily) {\n console.log(\n ` Budget daily: $${project.budgetDaily.toFixed(2)} (${dash.budgetDailyUsed.toFixed(0)}% used)`,\n );\n }\n if (project.budgetMonthly) {\n console.log(\n ` Budget month: $${project.budgetMonthly.toFixed(2)} (${dash.budgetMonthlyUsed.toFixed(0)}% used)`,\n );\n }\n\n const memory = pm.memory.list(project.id);\n if (memory.length > 0) {\n console.log(` Memory: ${memory.length} entries`);\n }\n console.log();\n });\n\nprojectsCmd\n .command(\"import\")\n .argument(\"[dir]\", \"Parent directory to scan\", join(homedir(), \"Projects\"))\n .description(\"Scan a directory and register all project subdirectories\")\n .action(async (dir: string) => {\n const { ProjectManager } = await import(\"@brainst0rm/projects\");\n const db = getDb();\n const pm = new ProjectManager(db);\n const registered = pm.import(dir);\n if (registered.length === 0) {\n console.log(`\\n No new projects found in ${dir}\\n`);\n } else {\n console.log(`\\n Registered ${registered.length} projects:`);\n for (const p of registered) {\n console.log(` ✓ ${p.name} → ${p.path}`);\n }\n console.log();\n }\n });\n\n// ── Schedule Command ──────────────────────────────────────────────\n\nconst scheduleCmd = program\n .command(\"schedule\")\n .description(\"Manage scheduled tasks\");\n\nscheduleCmd\n .command(\"list\")\n .option(\"-p, --project <name>\", \"Filter by project\")\n .description(\"List scheduled tasks\")\n .action(async (opts: { project?: string }) => {\n const { ScheduledTaskRepository } = await import(\"@brainst0rm/scheduler\");\n const { ProjectManager } = await import(\"@brainst0rm/projects\");\n const db = getDb();\n const taskRepo = new ScheduledTaskRepository(db);\n\n let projectId: string | undefined;\n if (opts.project) {\n const pm = new ProjectManager(db);\n const p = pm.projects.getByName(opts.project);\n if (!p) {\n console.error(` Project \"${opts.project}\" not found.`);\n return;\n }\n projectId = p.id;\n }\n\n const tasks = taskRepo.list(projectId, \"active\");\n console.log(\"\\n Scheduled Tasks:\\n\");\n if (tasks.length === 0) {\n console.log(\n ' No tasks. Add one: storm schedule add \"<prompt>\" --project <name>\\n',\n );\n return;\n }\n for (const t of tasks) {\n const cron = t.cronExpression || \"one-shot\";\n const mutations = t.allowMutations ? \"read+write\" : \"read-only\";\n const budget = t.budgetLimit\n ? `$${t.budgetLimit.toFixed(2)}`\n : \"no limit\";\n console.log(\n ` ${t.name.padEnd(25)} ${cron.padEnd(18)} ${mutations.padEnd(12)} ${budget}`,\n );\n }\n console.log();\n });\n\nscheduleCmd\n .command(\"add\")\n .argument(\"<prompt>\", \"Task instruction\")\n .requiredOption(\"-p, --project <name>\", \"Project name\")\n .option(\"-n, --name <name>\", \"Task name (default: first 30 chars of prompt)\")\n .option(\"--cron <expression>\", \"Cron schedule (e.g. '0 9 * * *')\")\n .option(\"--budget <amount>\", \"Budget limit per run in dollars\", \"0.50\")\n .option(\"--max-turns <n>\", \"Maximum turns per run\", \"20\")\n .option(\"--allow-mutations\", \"Allow file writes and shell commands\")\n .option(\"--model <id>\", \"Model override for this task\")\n .description(\"Add a scheduled task\")\n .action(async (prompt: string, opts: any) => {\n const { ScheduledTaskRepository, validateCron, validateTaskSafety } =\n await import(\"@brainst0rm/scheduler\");\n const { ProjectManager } = await import(\"@brainst0rm/projects\");\n const db = getDb();\n const pm = new ProjectManager(db);\n const project = pm.projects.getByName(opts.project);\n if (!project) {\n console.error(` Project \"${opts.project}\" not found.`);\n return;\n }\n\n if (opts.cron) {\n const err = validateCron(opts.cron);\n if (err) {\n console.error(` Invalid cron: ${err}`);\n return;\n }\n }\n\n const taskRepo = new ScheduledTaskRepository(db);\n const task = taskRepo.create({\n projectId: project.id,\n name: opts.name || prompt.slice(0, 30),\n prompt,\n cronExpression: opts.cron,\n budgetLimit: parseFloat(opts.budget),\n maxTurns: parseInt(opts.maxTurns),\n allowMutations: opts.allowMutations ?? false,\n modelId: opts.model,\n });\n\n const warnings = validateTaskSafety(task);\n console.log(`\\n ✓ Created task \"${task.name}\" (${task.id.slice(0, 8)})`);\n if (task.cronExpression) {\n const { describeCron } = await import(\"@brainst0rm/scheduler\");\n console.log(` Schedule: ${describeCron(task.cronExpression)}`);\n }\n if (warnings.length > 0) {\n console.log(\" Warnings:\");\n for (const w of warnings) console.log(` ⚠ ${w}`);\n }\n console.log();\n });\n\nscheduleCmd\n .command(\"run\")\n .option(\"--task-id <id>\", \"Run a specific task\")\n .option(\"--dry-run\", \"Show what would run without executing\")\n .description(\"Trigger due tasks\")\n .action(async (opts: { taskId?: string; dryRun?: boolean }) => {\n const { TriggerRunner } = await import(\"@brainst0rm/scheduler\");\n const db = getDb();\n const runner = new TriggerRunner(db);\n const result = await runner.runDueTasks(opts);\n\n console.log(`\\n Checked: ${result.tasksChecked} tasks`);\n console.log(` Run: ${result.tasksRun}`);\n if (result.tasksFailed > 0) console.log(` Failed: ${result.tasksFailed}`);\n if (result.tasksSkipped > 0)\n console.log(` Skipped: ${result.tasksSkipped} (concurrency limit)`);\n\n for (const r of result.runs) {\n const icon =\n r.status === \"completed\" ? \"✓\" : r.status === \"failed\" ? \"✗\" : \"○\";\n console.log(\n ` ${icon} ${r.taskName} → ${r.status}${r.error ? ` (${r.error})` : \"\"}`,\n );\n }\n console.log();\n });\n\nscheduleCmd\n .command(\"history\")\n .option(\"--task-id <id>\", \"Filter by task\")\n .option(\"-n, --limit <count>\", \"Number of runs to show\", \"10\")\n .description(\"Show task run history\")\n .action(async (opts: { taskId?: string; limit: string }) => {\n const { TaskRunRepository, ScheduledTaskRepository } =\n await import(\"@brainst0rm/scheduler\");\n const db = getDb();\n const runRepo = new TaskRunRepository(db);\n const taskRepo = new ScheduledTaskRepository(db);\n\n const runs = opts.taskId\n ? runRepo.listByTask(opts.taskId, parseInt(opts.limit))\n : runRepo.listRecent(parseInt(opts.limit));\n\n console.log(\"\\n Task Run History:\\n\");\n if (runs.length === 0) {\n console.log(\" No runs yet.\\n\");\n return;\n }\n for (const r of runs) {\n const task = taskRepo.getById(r.taskId);\n const icon =\n r.status === \"completed\" ? \"✓\" : r.status === \"failed\" ? \"✗\" : \"●\";\n const date = new Date(r.createdAt * 1000).toLocaleString();\n console.log(\n ` ${icon} ${(task?.name ?? r.taskId.slice(0, 8)).padEnd(22)} $${r.cost.toFixed(4).padEnd(10)} ${r.status.padEnd(16)} ${date}`,\n );\n }\n console.log();\n });\n\nscheduleCmd\n .command(\"pause\")\n .argument(\"<task-id>\", \"Task ID to pause\")\n .description(\"Pause a scheduled task\")\n .action(async (taskId: string) => {\n const { ScheduledTaskRepository } = await import(\"@brainst0rm/scheduler\");\n const db = getDb();\n const repo = new ScheduledTaskRepository(db);\n repo.updateStatus(taskId, \"paused\");\n console.log(` ✓ Paused task ${taskId.slice(0, 8)}\\n`);\n });\n\nscheduleCmd\n .command(\"resume\")\n .argument(\"<task-id>\", \"Task ID to resume\")\n .description(\"Resume a paused task\")\n .action(async (taskId: string) => {\n const { ScheduledTaskRepository } = await import(\"@brainst0rm/scheduler\");\n const db = getDb();\n const repo = new ScheduledTaskRepository(db);\n repo.updateStatus(taskId, \"active\");\n console.log(` ✓ Resumed task ${taskId.slice(0, 8)}\\n`);\n });\n\nscheduleCmd\n .command(\"delete\")\n .argument(\"<task-id>\", \"Task ID to delete\")\n .description(\"Delete a scheduled task\")\n .action(async (taskId: string) => {\n const { ScheduledTaskRepository } = await import(\"@brainst0rm/scheduler\");\n const db = getDb();\n const repo = new ScheduledTaskRepository(db);\n repo.delete(taskId);\n console.log(` ✓ Deleted task ${taskId.slice(0, 8)}\\n`);\n });\n\n// ── Plan Command ──────────────────────────────────────────────────\n\nconst planCmd = program\n .command(\"plan\")\n .description(\"Execute and manage structured plans\");\n\nplanCmd\n .command(\"execute\")\n .argument(\"<path>\", \"Path to .plan.md file\")\n .option(\"--auto\", \"Run autonomously (no pauses)\")\n .option(\"--dry-run\", \"Show dispatch plan without executing\")\n .option(\"--budget <amount>\", \"Total budget limit in dollars\")\n .option(\"--task-budget <amount>\", \"Per-task budget limit\", \"0.50\")\n .option(\"--retries <n>\", \"Max retries per task\", \"2\")\n .description(\"Execute a plan file task-by-task using subagents\")\n .action(async (path: string, opts: any) => {\n const { executePlan } = await import(\"@brainst0rm/core\");\n const { resolve } = await import(\"node:path\");\n const { execFileSync } = await import(\"node:child_process\");\n\n const planPath = resolve(path);\n const mode = opts.dryRun\n ? \"dry-run\"\n : opts.auto\n ? \"autonomous\"\n : \"interactive\";\n\n console.log(`\\n Plan Executor (${mode} mode)\\n`);\n\n const dispatcher = {\n async execute(prompt: string, execOpts: any) {\n console.log(\n ` Dispatching: ${execOpts.subagentType}/${execOpts.modelHint}`,\n );\n return {\n text: `[Placeholder] Completed via ${execOpts.subagentType} subagent`,\n cost: 0,\n modelUsed: execOpts.modelHint,\n toolCalls: [],\n budgetExceeded: false,\n };\n },\n async checkBuild(command: string, cwd: string) {\n const parts = command.split(/\\s+/);\n try {\n execFileSync(parts[0], parts.slice(1), {\n cwd,\n timeout: 60000,\n stdio: \"pipe\",\n });\n return { passed: true, output: \"\" };\n } catch (err: any) {\n return {\n passed: false,\n output: err.stderr?.toString()?.slice(0, 500) ?? \"\",\n };\n }\n },\n };\n\n try {\n for await (const event of executePlan(planPath, dispatcher, {\n projectPath: process.cwd(),\n buildCommand: \"npx turbo run build --force\",\n defaultBudgetPerTask: parseFloat(opts.taskBudget),\n planBudgetLimit: opts.budget ? parseFloat(opts.budget) : undefined,\n mode,\n maxRetries: parseInt(opts.retries),\n compactBetweenPhases: true,\n })) {\n switch (event.type) {\n case \"plan-started\":\n console.log(` Plan: ${event.plan.name}`);\n console.log(` Tasks: ${event.totalTasks} pending\\n`);\n break;\n case \"phase-started\":\n console.log(` ── ${event.phase.name} ──`);\n break;\n case \"sprint-started\":\n console.log(` ${event.sprint.name}`);\n break;\n case \"task-started\":\n console.log(\n ` ● ${event.task.description.slice(0, 60)} [${event.subagentType}/${event.model}]`,\n );\n break;\n case \"task-completed\":\n console.log(\n ` ✓ ${event.task.description.slice(0, 60)} $${event.cost.toFixed(4)}`,\n );\n break;\n case \"task-failed\":\n console.log(\n ` ✗ ${event.task.description.slice(0, 60)} ${event.reason}`,\n );\n break;\n case \"task-retrying\":\n console.log(` ↻ Retry #${event.attempt} with ${event.model}`);\n break;\n case \"task-budget-exceeded\":\n console.log(` $ Budget exceeded: $${event.cost.toFixed(4)}`);\n break;\n case \"build-check\":\n console.log(\n ` ${event.passed ? \"✓\" : \"✗\"} Build ${event.passed ? \"passed\" : \"FAILED\"}`,\n );\n break;\n case \"phase-completed\":\n console.log(\n ` ✓ ${event.phase.name} complete $${event.cost.toFixed(4)}\\n`,\n );\n break;\n case \"plan-completed\":\n console.log(` ═══════════════════════════════`);\n console.log(\n ` Plan complete: $${event.totalCost.toFixed(4)} total\\n`,\n );\n break;\n case \"plan-paused\":\n console.log(`\\n ⚠ Paused: ${event.reason}\\n`);\n break;\n case \"skill-activated\":\n console.log(` ✦ Skill: ${event.skillName}`);\n break;\n case \"dry-run-task\": {\n const d = event.dispatch;\n console.log(\n ` ○ ${event.task.description.slice(0, 45).padEnd(47)} ${d.subagentType.padEnd(10)} ${d.modelHint.padEnd(10)} ~$${event.estimatedCost.toFixed(2)}`,\n );\n break;\n }\n case \"dry-run-summary\":\n console.log(\n `\\n Summary: ${event.totalTasks} tasks, ~$${event.estimatedCost.toFixed(2)} estimated`,\n );\n console.log(\n ` By type: ${Object.entries(event.tasksByType)\n .map(([k, v]) => `${k}:${v}`)\n .join(\", \")}\\n`,\n );\n break;\n }\n }\n } catch (err) {\n console.error(\n `\\n ✗ ${err instanceof Error ? err.message : String(err)}\\n`,\n );\n }\n });\n\nplanCmd\n .command(\"parse\")\n .argument(\"<path>\", \"Path to .plan.md file\")\n .description(\"Parse and display a plan file structure\")\n .action(async (path: string) => {\n const { parsePlanFile } = await import(\"@brainst0rm/core\");\n const { resolve } = await import(\"node:path\");\n let plan;\n try {\n plan = parsePlanFile(resolve(path));\n } catch (err) {\n console.error(\n `\\n ✗ ${err instanceof Error ? err.message : String(err)}\\n`,\n );\n return;\n }\n\n console.log(`\\n ${plan.name} (${plan.status})`);\n console.log(` ${plan.completedTasks}/${plan.totalTasks} tasks complete\\n`);\n\n for (const phase of plan.phases) {\n const icon =\n phase.status === \"completed\"\n ? \"✓\"\n : phase.status === \"in_progress\"\n ? \"◐\"\n : \"○\";\n console.log(\n ` ${icon} ${phase.name} ${phase.completedCount}/${phase.taskCount}`,\n );\n for (const sprint of phase.sprints) {\n console.log(` ${sprint.name}`);\n for (const task of sprint.tasks) {\n const tIcon = task.status === \"completed\" ? \"✓\" : \"○\";\n const cost = task.cost ? `$${task.cost.toFixed(2)}` : \"\";\n const skill = task.assignedSkill ? `[${task.assignedSkill}]` : \"\";\n console.log(` ${tIcon} ${task.description} ${skill} ${cost}`);\n }\n }\n }\n console.log();\n });\n\n// ── Orchestrate Command ───────────────────────────────────────────\n\nconst orchestrateCmd = program\n .command(\"orchestrate\")\n .description(\"Coordinate work across multiple projects\");\n\norchestrateCmd\n .command(\"pipeline\")\n .argument(\"<request>\", \"What to build (natural language)\")\n .option(\"--build <cmd>\", \"Build command\", \"npx turbo run build --force\")\n .option(\"--test <cmd>\", \"Test command\", \"npx turbo run test\")\n .option(\"--deploy\", \"Include deployment phase\")\n .option(\"--budget <amount>\", \"Total budget limit in dollars\")\n .option(\n \"--phases <list>\",\n \"Comma-separated phases to run (spec,architecture,implementation,review,verify,refactor,deploy,document,report)\",\n )\n .option(\"--resume-from <phase>\", \"Resume from a specific phase\")\n .option(\"--dry-run\", \"Show what agents would be dispatched\")\n .description(\"Run the full 9-phase development pipeline\")\n .action(async (request: string, opts: any) => {\n const { runOrchestrationPipeline, createPipelineDispatcher } =\n await import(\"@brainst0rm/core\");\n\n console.log(`\\n Orchestration Pipeline\\n`);\n console.log(` Request: \"${request}\"`);\n console.log(` Mode: ${opts.dryRun ? \"dry-run\" : \"execute\"}\\n`);\n\n // Set up real runtime — env vars only (no vault prompt for non-interactive pipeline)\n const config = loadConfig();\n const db = getDb();\n const envKeys = new Map<string, string>();\n for (const name of PROVIDER_KEY_NAMES) {\n const val = process.env[name];\n if (val) envKeys.set(name, val);\n }\n const resolvedKeys: ResolvedKeys = {\n get: (name: string) => envKeys.get(name) ?? null,\n };\n const registry = await createProviderRegistry(config, resolvedKeys);\n const costTracker = new CostTracker(db, config.budget);\n const projectPath = process.cwd();\n const tools = createDefaultToolRegistry();\n const { frontmatter } = buildSystemPrompt(projectPath);\n const router = new BrainstormRouter(\n config,\n registry,\n costTracker,\n frontmatter,\n );\n\n // Create real dispatcher — wired to spawnSubagent() with agent.md definitions\n const dispatcher = createPipelineDispatcher({\n config,\n registry,\n router,\n costTracker,\n tools,\n projectPath,\n });\n\n // Fallback: if no provider keys, use placeholder\n const hasProviders = PROVIDER_KEY_NAMES.some(\n (k) => resolvedKeys.get(k) !== null,\n );\n if (!hasProviders && !opts.dryRun) {\n console.log(\n \" ⚠ No model providers configured. Using placeholder dispatcher.\",\n );\n console.log(\" Set API keys via: storm vault add ANTHROPIC_API_KEY\\n\");\n }\n\n const activeDispatcher =\n hasProviders || opts.dryRun\n ? dispatcher\n : {\n async runPhase(\n agentId: string,\n subagentType: string,\n prompt: string,\n phaseOpts: any,\n ) {\n console.log(` Agent: ${agentId} (${subagentType})`);\n return {\n text: `[No providers] ${agentId} would execute`,\n cost: 0,\n toolCalls: [],\n };\n },\n async runParallel(specs: any[], phaseOpts: any) {\n return specs.map((s: any) => {\n console.log(` Agent: ${s.agentId} (${s.subagentType})`);\n return {\n agentId: s.agentId,\n text: `[No providers] ${s.agentId} would execute`,\n cost: 0,\n toolCalls: [],\n };\n });\n },\n async runCommand(command: string, cwd: string) {\n const { execFileSync } = await import(\"node:child_process\");\n const parts = command.split(/\\s+/);\n try {\n execFileSync(parts[0], parts.slice(1), {\n cwd,\n timeout: 120000,\n stdio: \"pipe\",\n });\n return { passed: true, output: \"\" };\n } catch (err: any) {\n return {\n passed: false,\n output: err.stderr?.toString()?.slice(0, 500) ?? \"\",\n };\n }\n },\n };\n\n const phases = opts.phases?.split(\",\") ?? undefined;\n\n for await (const event of runOrchestrationPipeline(\n request,\n activeDispatcher,\n {\n projectPath,\n buildCommand: opts.build,\n testCommand: opts.test,\n deploy: opts.deploy,\n budget: opts.budget ? parseFloat(opts.budget) : undefined,\n phases,\n resumeFrom: opts.resumeFrom,\n dryRun: opts.dryRun,\n },\n )) {\n switch (event.type) {\n case \"pipeline-started\":\n console.log(` Phases: ${event.phases.join(\" → \")}\\n`);\n break;\n case \"phase-started\":\n console.log(\n ` ── ${event.phase.toUpperCase()} ── (${event.agentId})`,\n );\n break;\n case \"phase-completed\":\n const icon = event.result.success ? \"✓\" : \"✗\";\n console.log(\n ` ${icon} ${event.result.phase} $${event.result.cost.toFixed(4)} ${event.result.duration}ms`,\n );\n if (event.result.output && !event.result.output.startsWith(\"[\")) {\n console.log(\n ` ${event.result.output.split(\"\\n\")[0].slice(0, 100)}`,\n );\n }\n console.log();\n break;\n case \"phase-failed\":\n console.log(` ✗ ${event.phase}: ${event.error}\\n`);\n break;\n case \"review-findings\":\n console.log(\n ` Reviews: ${event.findings.length} finding(s)${event.hasCritical ? \" (CRITICAL)\" : \"\"}`,\n );\n for (const f of event.findings.slice(0, 5)) {\n console.log(` [${f.severity}] ${f.description.slice(0, 80)}`);\n }\n console.log();\n break;\n case \"feedback-loop\":\n console.log(\n ` ↻ Feedback: ${event.from} → ${event.to} (${event.reason})\\n`,\n );\n break;\n case \"pipeline-completed\":\n console.log(` ═══════════════════════════════════`);\n console.log(\n ` Pipeline complete: $${event.totalCost.toFixed(4)} total`,\n );\n console.log(\n ` ${event.results.filter((r) => r.success).length}/${event.results.length} phases succeeded\\n`,\n );\n break;\n case \"pipeline-paused\":\n console.log(` ⚠ Paused at ${event.phase}: ${event.reason}\\n`);\n break;\n }\n }\n });\n\norchestrateCmd\n .command(\"run\")\n .argument(\"<description>\", \"What to do across projects\")\n .requiredOption(\"-p, --projects <names>\", \"Comma-separated project names\")\n .option(\"--budget <amount>\", \"Total budget limit in dollars\")\n .option(\"--type <type>\", \"Subagent type (explore, code, review)\", \"code\")\n .description(\"Run a cross-project orchestration\")\n .action(\n async (\n description: string,\n opts: { projects: string; budget?: string; type: string },\n ) => {\n const { OrchestrationEngine, formatAggregatedResults, aggregateResults } =\n await import(\"@brainst0rm/orchestrator\");\n const { ProjectManager } = await import(\"@brainst0rm/projects\");\n const db = getDb();\n const engine = new OrchestrationEngine(db);\n const pm = new ProjectManager(db);\n\n const projectNames = opts.projects\n .split(\",\")\n .map((s: string) => s.trim());\n\n console.log(\n `\\n Orchestrating across ${projectNames.length} projects...`,\n );\n console.log(` \"${description}\"\\n`);\n\n try {\n for await (const event of engine.run({\n description,\n projectNames,\n budgetLimit: opts.budget ? parseFloat(opts.budget) : undefined,\n subagentType: opts.type,\n })) {\n switch (event.type) {\n case \"plan-ready\":\n console.log(` Plan: ${event.tasks.length} tasks created`);\n break;\n case \"task-started\":\n console.log(` ● ${event.project.name} — starting...`);\n break;\n case \"task-completed\":\n console.log(\n ` ✓ ${event.project.name} — $${event.cost.toFixed(4)}`,\n );\n if (event.summary)\n console.log(` ${event.summary.slice(0, 120)}`);\n break;\n case \"task-failed\":\n console.log(` ✗ ${event.project.name} — ${event.error}`);\n break;\n case \"orchestration-completed\": {\n const projectMap = new Map<string, string>();\n for (const name of projectNames) {\n const p = pm.projects.getByName(name);\n if (p) projectMap.set(p.id, p.name);\n }\n const tasks = event.results.map((r, i) => ({\n ...event.run,\n projectId: projectMap.get(r.projectName) ?? r.projectName,\n }));\n console.log(`\\n ── Complete ──`);\n console.log(` Total cost: $${event.run.totalCost.toFixed(4)}`);\n console.log(\n ` ${event.results.filter((r) => !r.summary.startsWith(\"FAILED\")).length}/${event.results.length} succeeded\\n`,\n );\n break;\n }\n }\n }\n } catch (err) {\n console.error(\n `\\n ✗ ${err instanceof Error ? err.message : String(err)}\\n`,\n );\n }\n },\n );\n\norchestrateCmd\n .command(\"history\")\n .option(\"-n, --limit <count>\", \"Number of runs to show\", \"10\")\n .description(\"Show recent orchestration runs\")\n .action(async (opts: { limit: string }) => {\n const { OrchestrationEngine } = await import(\"@brainst0rm/orchestrator\");\n const db = getDb();\n const engine = new OrchestrationEngine(db);\n const runs = engine.listRecent(parseInt(opts.limit));\n\n console.log(\"\\n Orchestration History:\\n\");\n if (runs.length === 0) {\n console.log(\" No orchestration runs yet.\\n\");\n return;\n }\n for (const r of runs) {\n const icon =\n r.status === \"completed\"\n ? \"✓\"\n : r.status === \"failed\"\n ? \"✗\"\n : r.status === \"cancelled\"\n ? \"○\"\n : \"●\";\n const date = new Date(r.createdAt * 1000).toLocaleString();\n console.log(\n ` ${icon} ${r.name.slice(0, 40).padEnd(42)} $${r.totalCost.toFixed(4).padEnd(10)} ${r.status.padEnd(12)} ${date}`,\n );\n }\n console.log();\n });\n\norchestrateCmd\n .command(\"status\")\n .argument(\"<run-id>\", \"Orchestration run ID\")\n .description(\"Show status of an orchestration run\")\n .action(async (runId: string) => {\n const { OrchestrationEngine } = await import(\"@brainst0rm/orchestrator\");\n const { ProjectManager } = await import(\"@brainst0rm/projects\");\n const db = getDb();\n const engine = new OrchestrationEngine(db);\n const pm = new ProjectManager(db);\n const detail = engine.getRunWithTasks(runId);\n if (!detail) {\n console.error(` Run \"${runId}\" not found.\\n`);\n return;\n }\n\n console.log(`\\n ── ${detail.run.name} ──`);\n console.log(` Status: ${detail.run.status}`);\n console.log(` Cost: $${detail.run.totalCost.toFixed(4)}`);\n console.log(` Tasks: ${detail.tasks.length}\\n`);\n\n for (const t of detail.tasks) {\n const project = pm.projects.getById(t.projectId);\n const icon =\n t.status === \"completed\"\n ? \"✓\"\n : t.status === \"failed\"\n ? \"✗\"\n : t.status === \"skipped\"\n ? \"○\"\n : \"●\";\n console.log(\n ` ${icon} ${(project?.name ?? t.projectId.slice(0, 8)).padEnd(25)} ${t.status.padEnd(12)} $${t.cost.toFixed(4)}`,\n );\n if (t.resultSummary)\n console.log(` ${t.resultSummary.slice(0, 100)}`);\n }\n console.log();\n });\n\n// ── Intelligence Command ───────────────────────────────────────────\n\nprogram\n .command(\"intelligence\")\n .alias(\"intel\")\n .description(\"Show what BrainstormRouter has learned about your usage\")\n .option(\"--json\", \"Output as JSON\")\n .option(\n \"--period <period>\",\n \"Usage period (daily, weekly, monthly)\",\n \"weekly\",\n )\n .action(async (opts: { json?: boolean; period: string }) => {\n const gw = createGatewayClient();\n const intel = createIntelligenceClient();\n\n if (!gw) {\n console.log(\n \"\\n No BRAINSTORM_API_KEY set. Cannot connect to BrainstormRouter.\\n\",\n );\n process.exit(1);\n }\n\n console.log(\"\\n Fetching intelligence from BrainstormRouter...\\n\");\n\n // Fetch all data in parallel — graceful fallback on each endpoint\n const [\n leaderboard,\n usage,\n waste,\n forecast,\n daily,\n governance,\n recommendations,\n patterns,\n ] = await Promise.all([\n gw.getLeaderboard().catch(() => []),\n gw.getUsageSummary(opts.period).catch(() => null),\n gw.getWasteInsights().catch(() => null),\n gw.getForecast().catch(() => null),\n gw.getDailyInsights().catch(() => []),\n gw.getGovernanceSummary().catch(() => null),\n intel?.getRecommendations(\"code\", \"typescript\").catch(() => []) ?? [],\n intel?.getPatterns(\"typescript\").catch(() => []) ?? [],\n ]);\n\n if (opts.json) {\n console.log(\n JSON.stringify(\n {\n leaderboard,\n usage,\n waste,\n forecast,\n daily,\n governance,\n recommendations,\n patterns,\n },\n null,\n 2,\n ),\n );\n return;\n }\n\n // ── Header ──\n console.log(\" ══════════════════════════════════════════════════\");\n console.log(\" BrainstormRouter Intelligence Report\");\n console.log(\" ══════════════════════════════════════════════════\\n\");\n\n // ── Learning Status ──\n // Usage shape: { data: [{ requestCount, totalCostUsd, ... }] }\n const usageData = (usage as any)?.data?.[0];\n const totalRequests = usageData?.requestCount ?? 0;\n const confidence =\n totalRequests >= 200 ? \"HIGH\" : totalRequests >= 50 ? \"MEDIUM\" : \"LOW\";\n const confidenceNote =\n confidence === \"LOW\"\n ? ` (need ${200 - totalRequests} more for high confidence)`\n : \"\";\n console.log(\n ` Learning Status: ${totalRequests.toLocaleString()} requests analyzed`,\n );\n console.log(` Routing Confidence: ${confidence}${confidenceNote}\\n`);\n\n // ── Model Performance ──\n // Leaderboard shape: { id, model_id, reward_score, value_score, latency_ms, sample_count, ... }\n const realLeaderboard = leaderboard.filter(\n (m: any) => m.id && !m.id.startsWith(\"cache/\"),\n );\n if (realLeaderboard.length > 0) {\n console.log(\" Model Performance:\\n\");\n for (const entry of realLeaderboard.slice(0, 8)) {\n const m = entry as any;\n const modelName = m.model_id ?? m.id ?? m.model ?? \"unknown\";\n const name =\n modelName.length > 35 ? modelName.slice(0, 35) + \"…\" : modelName;\n const latency =\n m.latency_ms != null\n ? m.latency_ms < 1000\n ? `${Math.round(m.latency_ms)}ms`\n : `${(m.latency_ms / 1000).toFixed(1)}s`\n : \" n/a\";\n const reward =\n m.reward_score != null\n ? (m.reward_score * 100).toFixed(0) + \"%\"\n : \"n/a\";\n const value = m.value_score != null ? m.value_score.toFixed(0) : \"n/a\";\n const samples = m.sample_count ?? m.request_count ?? 0;\n const isBest = entry === realLeaderboard[0] ? \" ← BEST\" : \"\";\n console.log(\n ` ${name.padEnd(37)} reward:${reward.padStart(4)} value:${value.padStart(5)} ${latency.padStart(6)} (${samples} samples)${isBest}`,\n );\n }\n console.log();\n }\n\n // ── What the System Learned ──\n if (recommendations.length > 0) {\n console.log(\" What the system learned:\\n\");\n for (const rec of recommendations.slice(0, 5)) {\n const r = rec as any;\n const conf =\n r.confidence != null ? `${Math.round(r.confidence * 100)}%` : \"\";\n console.log(\n ` • ${r.taskType} → ${r.recommendedModel} (${conf} confidence)`,\n );\n if (r.reasoning) {\n console.log(` ${r.reasoning}`);\n }\n }\n console.log();\n }\n\n // ── Cost Intelligence ──\n if (usageData) {\n const totalTokens =\n (usageData.totalInputTokens ?? 0) + (usageData.totalOutputTokens ?? 0);\n console.log(\" Cost Summary:\\n\");\n console.log(` Period: ${(usage as any)?.period ?? opts.period}`);\n console.log(\n ` Total: $${(usageData.totalCostUsd ?? 0).toFixed(4)}`,\n );\n console.log(\n ` Requests: ${(usageData.requestCount ?? 0).toLocaleString()}`,\n );\n console.log(` Tokens: ${totalTokens.toLocaleString()}`);\n console.log(\n ` Avg latency: ${(usageData.avgLatencyMs ?? 0).toFixed(0)}ms`,\n );\n console.log();\n }\n\n // ── Budget Forecast ──\n // Forecast shape: { forecast: { avgDailySpendUsd, trend, confidence, projectedPeriodSpendUsd }, todaySpendUsd, daysOfData }\n const fc = (forecast as any)?.forecast;\n if (fc) {\n const trend = fc.trend ?? \"stable\";\n const trendIcon =\n trend === \"increasing\" ? \"↑\" : trend === \"decreasing\" ? \"↓\" : \"→\";\n console.log(\" Budget Forecast:\\n\");\n console.log(\n ` Avg daily: $${(fc.avgDailySpendUsd ?? 0).toFixed(2)} (${trendIcon} ${trend})`,\n );\n console.log(\n ` Projected: $${(fc.projectedPeriodSpendUsd ?? 0).toFixed(2)}`,\n );\n console.log(\n ` Today: $${((forecast as any)?.todaySpendUsd ?? 0).toFixed(4)}`,\n );\n console.log(\n ` Data points: ${(forecast as any)?.daysOfData ?? 0} days`,\n );\n console.log();\n }\n\n // ── Waste Insights ──\n // Waste shape: { estimatedWasteUsd, overQualifiedModels: [...], duplicateRequests: [...] }\n const wasteAny = waste as any;\n if (\n wasteAny &&\n (wasteAny.overQualifiedModels?.length > 0 ||\n wasteAny.duplicateRequests?.length > 0)\n ) {\n console.log(\" Optimization Opportunities:\\n\");\n console.log(\n ` Total recoverable: $${(wasteAny.estimatedWasteUsd ?? 0).toFixed(4)}\\n`,\n );\n for (const m of (wasteAny.overQualifiedModels ?? []).slice(0, 3)) {\n console.log(\n ` • ${m.model}: $${m.totalCostUsd.toFixed(4)} on ${m.requestCount} reqs`,\n );\n console.log(` → ${m.suggestion}`);\n }\n const dupeCount = (wasteAny.duplicateRequests ?? []).length;\n if (dupeCount > 0) {\n const totalDupeWaste = (wasteAny.duplicateRequests ?? []).reduce(\n (sum: number, d: any) => sum + (d.wastedCostUsd ?? 0),\n 0,\n );\n console.log(\n ` • ${dupeCount} duplicate request patterns ($${totalDupeWaste.toFixed(4)} wasted)`,\n );\n console.log(` → Enable prompt caching to reduce duplicates`);\n }\n console.log();\n }\n\n // ── Community Patterns ──\n if (patterns.length > 0) {\n console.log(\" Community Patterns (TypeScript):\\n\");\n for (const p of patterns.slice(0, 3)) {\n const pat = p as any;\n console.log(\n ` • ${pat.taskType}: prefer ${(pat.preferredTools ?? []).join(\", \")} (${pat.confirmations ?? 0} confirmations)`,\n );\n if (pat.avoidTools?.length > 0) {\n console.log(` avoid: ${pat.avoidTools.join(\", \")}`);\n }\n }\n console.log();\n }\n\n // ── Governance ──\n if (governance) {\n const gov = governance as any;\n console.log(\" Governance:\\n\");\n if (gov.memory_health) {\n console.log(\n ` Memory: ${gov.memory_health.total_entries} entries (${gov.memory_health.compliance_status})`,\n );\n }\n if (gov.audit_stats) {\n console.log(\n ` Audit: ${gov.audit_stats.total_requests} requests, ${gov.audit_stats.flagged} flagged`,\n );\n }\n if (gov.anomaly_score != null) {\n console.log(\n ` Anomaly: ${gov.anomaly_score.toFixed(2)} (0=clean, 1=suspicious)`,\n );\n }\n console.log();\n }\n\n console.log(\" ──────────────────────────────────────────────────\");\n console.log(\n ` Tip: Run \\`storm intel --json\\` for machine-readable output.`,\n );\n console.log();\n });\n\n// ── Analyze Command ───────────────────────────────────────────────\n\nprogram\n .command(\"analyze\")\n .description(\n \"Analyze a codebase — languages, frameworks, dependencies, complexity\",\n )\n .argument(\"[path]\", \"Project path to analyze\", \".\")\n .option(\"--json\", \"Output as JSON\")\n .action(async (projectPath: string, opts: { json?: boolean }) => {\n const { resolve } = await import(\"node:path\");\n const absPath = resolve(projectPath);\n\n console.log(`\\n Analyzing ${absPath}...\\n`);\n const startTime = Date.now();\n\n const { analyzeProject } = await import(\"@brainst0rm/ingest\");\n const analysis = analyzeProject(absPath);\n const elapsed = Date.now() - startTime;\n\n if (opts.json) {\n console.log(JSON.stringify(analysis, null, 2));\n return;\n }\n\n console.log(\" ══════════════════════════════════════════════════\");\n console.log(\" Codebase Analysis\");\n console.log(\" ══════════════════════════════════════════════════\\n\");\n\n console.log(\n ` ${analysis.summary.totalFiles} files | ${analysis.summary.totalLines.toLocaleString()} lines | ${analysis.summary.primaryLanguage}`,\n );\n console.log(\n ` ${analysis.summary.moduleCount} modules | avg complexity: ${analysis.summary.avgComplexity}/100 | ${elapsed}ms\\n`,\n );\n\n // Languages\n console.log(\" Languages:\");\n for (const l of analysis.languages.languages.slice(0, 8)) {\n const bar = \"█\".repeat(Math.max(1, Math.round(l.percentage / 5)));\n console.log(\n ` ${l.language.padEnd(15)} ${bar} ${l.percentage}% (${l.files} files, ${l.lines.toLocaleString()} lines)`,\n );\n }\n\n // Frameworks\n const hasStack =\n analysis.frameworks.frameworks.length > 0 ||\n analysis.frameworks.buildTools.length > 0;\n if (hasStack) {\n console.log(\"\\n Stack:\");\n if (analysis.frameworks.frameworks.length > 0)\n console.log(\n ` Frameworks: ${analysis.frameworks.frameworks.join(\", \")}`,\n );\n if (analysis.frameworks.buildTools.length > 0)\n console.log(\n ` Build: ${analysis.frameworks.buildTools.join(\", \")}`,\n );\n if (analysis.frameworks.databases.length > 0)\n console.log(\n ` Databases: ${analysis.frameworks.databases.join(\", \")}`,\n );\n if (analysis.frameworks.testing.length > 0)\n console.log(\n ` Testing: ${analysis.frameworks.testing.join(\", \")}`,\n );\n if (analysis.frameworks.deployment.length > 0)\n console.log(\n ` Deploy: ${analysis.frameworks.deployment.join(\", \")}`,\n );\n if (analysis.frameworks.ci.length > 0)\n console.log(` CI/CD: ${analysis.frameworks.ci.join(\", \")}`);\n }\n\n // Complexity hotspots\n if (analysis.complexity.summary.hotspots.length > 0) {\n console.log(\"\\n Complexity Hotspots (score > 70):\");\n for (const f of analysis.complexity.files\n .filter((cf: any) => cf.score >= 70)\n .slice(0, 8)) {\n console.log(\n ` ${f.path.padEnd(50)} score:${f.score} branches:${f.branchCount} nesting:${f.maxNesting}`,\n );\n }\n }\n\n // Module clusters\n if (analysis.dependencies.clusters.length > 0) {\n console.log(\"\\n Module Clusters (by size):\");\n for (const c of analysis.dependencies.clusters.slice(0, 8)) {\n const cohesionLabel =\n c.cohesion > 0.5 ? \"high\" : c.cohesion > 0.2 ? \"med\" : \"low\";\n console.log(\n ` ${c.directory.padEnd(40)} ${c.files.length} files cohesion:${cohesionLabel}`,\n );\n }\n }\n\n console.log(\"\\n ──────────────────────────────────────────────────\");\n console.log(` Run \\`storm analyze --json\\` for machine-readable output.`);\n console.log();\n });\n\n// ── Docgen Command ────────────────────────────────────────────────\n\nprogram\n .command(\"docgen\")\n .description(\n \"Generate documentation — architecture docs, module docs, API reference\",\n )\n .argument(\"[path]\", \"Project path to document\", \".\")\n .option(\"--output <dir>\", \"Output directory (default: docs/generated)\")\n .option(\"--json\", \"Output file list as JSON\")\n .action(\n async (projectPath: string, opts: { output?: string; json?: boolean }) => {\n const { resolve } = await import(\"node:path\");\n const absPath = resolve(projectPath);\n\n console.log(`\\n Analyzing ${absPath}...`);\n const { analyzeProject } = await import(\"@brainst0rm/ingest\");\n const analysis = analyzeProject(absPath);\n\n console.log(` Generating documentation...\\n`);\n const { generateAllDocs } = await import(\"@brainst0rm/docgen\");\n const result = generateAllDocs(analysis, opts.output);\n\n if (opts.json) {\n console.log(JSON.stringify(result, null, 2));\n return;\n }\n\n console.log(\" ══════════════════════════════════════════════════\");\n console.log(\" Documentation Generated\");\n console.log(\" ══════════════════════════════════════════════════\\n\");\n console.log(` Output: ${result.outputDir}`);\n console.log(` Files written: ${result.filesWritten.length}`);\n console.log(\"\");\n console.log(` Architecture: ${result.architectureDoc}`);\n console.log(` Modules: ${result.moduleDocs} module docs`);\n if (result.apiDoc) {\n console.log(` API Reference: ${result.apiDoc}`);\n } else {\n console.log(` API Reference: (no endpoints detected)`);\n }\n console.log(\"\\n ──────────────────────────────────────────────────\");\n console.log(\n ` Tip: Use these docs as context for AI agents with @docs/generated/ARCHITECTURE.md`,\n );\n console.log();\n },\n );\n\n// ── Spawn Command (Background Worktree Agents) ───────────────────\n\nprogram\n .command(\"spawn\")\n .description(\"Spawn a background agent in an isolated git worktree\")\n .argument(\"<task>\", \"Task description for the background agent\")\n .option(\n \"--type <type>\",\n \"Subagent type (code, review, explore, research)\",\n \"code\",\n )\n .option(\"--budget <amount>\", \"Budget limit in dollars\", \"1.0\")\n .action(async (task: string, opts: { type: string; budget: string }) => {\n const { resolve } = await import(\"node:path\");\n const { createWorktree, removeWorktree } = await import(\"@brainst0rm/core\");\n const projectPath = resolve(\".\");\n const worktreePath = createWorktree(projectPath, opts.type);\n\n console.log(`\\n Spawned background agent in worktree:`);\n console.log(` Path: ${worktreePath}`);\n console.log(` Type: ${opts.type}`);\n console.log(` Budget: $${opts.budget}`);\n console.log(` Task: ${task}`);\n console.log();\n console.log(` The agent is running in an isolated copy of your repo.`);\n console.log(` When done, changes will be on a spec-* branch.`);\n console.log(` Use \\`git worktree list\\` to see active worktrees.`);\n console.log(` Use \\`git diff main...<branch>\\` to review changes.`);\n console.log();\n\n // In a full implementation, this would fork a child process running\n // runAgentLoop in the worktree directory. For now, it sets up the\n // worktree and reports the path for manual or CI-driven execution.\n // The worktree is ready for: storm run --unattended \"<task>\" in the worktree dir.\n console.log(` To run the agent:`);\n console.log(` cd ${worktreePath} && storm run --unattended \"${task}\"`);\n console.log();\n });\n\n// ── Storm Command (Parallel Agent Spawning) ──────────────────────\n\nprogram\n .command(\"storm\")\n .description(\"Run multiple tasks in parallel using subagents\")\n .argument(\n \"<tasks...>\",\n \"Task descriptions (each runs as a separate subagent)\",\n )\n .option(\n \"--type <type>\",\n \"Subagent type for all tasks (explore, plan, code, review, research)\",\n \"code\",\n )\n .option(\"--budget <amount>\", \"Budget limit per task in dollars\", \"1.0\")\n .action(async (tasks: string[], opts: { type: string; budget: string }) => {\n const config = loadConfig();\n const db = getDb();\n const resolvedKeys = await resolveProviderKeys();\n const registry = await createProviderRegistry(config, resolvedKeys);\n const costTracker = new CostTracker(db, config.budget);\n const tools = createDefaultToolRegistry();\n const projectPath = process.cwd();\n const { prompt: systemPrompt, frontmatter } =\n buildSystemPrompt(projectPath);\n const router = new BrainstormRouter(\n config,\n registry,\n costTracker,\n frontmatter,\n );\n\n console.log(`\\n Storm — ${tasks.length} parallel agents`);\n console.log(` Type: ${opts.type} | Budget: $${opts.budget}/task\\n`);\n\n for (let i = 0; i < tasks.length; i++) {\n console.log(` [${i + 1}] ${tasks[i]}`);\n }\n console.log();\n\n const startTime = Date.now();\n const results = await spawnParallel(\n tasks.map((task) => ({ task, type: opts.type as any })),\n {\n config,\n registry,\n router,\n costTracker,\n tools,\n projectPath,\n systemPrompt,\n budgetLimit: parseFloat(opts.budget),\n },\n );\n\n const elapsed = ((Date.now() - startTime) / 1000).toFixed(1);\n console.log(` ──────────────────────────────────────────────────`);\n console.log(` ${results.length} agents completed in ${elapsed}s\\n`);\n\n for (let i = 0; i < results.length; i++) {\n const r = results[i];\n const status = r.text ? \"done\" : \"failed\";\n const cost = `$${r.cost.toFixed(4)}`;\n console.log(\n ` [${i + 1}] ${status} (${r.toolCalls.length} tool calls, ${cost})`,\n );\n if (r.text) {\n // Show first 200 chars of response\n const preview = r.text.slice(0, 200).replace(/\\n/g, \" \");\n console.log(` ${preview}${r.text.length > 200 ? \"...\" : \"\"}`);\n }\n console.log();\n }\n\n const totalCost = results.reduce((sum, r) => sum + r.cost, 0);\n console.log(` Total cost: $${totalCost.toFixed(4)}`);\n console.log();\n closeDb();\n });\n\n// ── Queue Command (Task Queue) ───────────────────────────────────\n\nprogram\n .command(\"queue\")\n .description(\"Manage the task queue for batch execution\")\n .argument(\"<action>\", \"Action: add, list, run, clear\")\n .argument(\"[tasks...]\", \"Task descriptions (for add)\")\n .option(\"--budget <amount>\", \"Total budget limit in dollars\")\n .option(\"--parallel <n>\", \"Max parallel tasks (default: 1)\", \"1\")\n .action(\n async (\n action: string,\n tasks: string[],\n opts: { budget?: string; parallel?: string },\n ) => {\n const { existsSync, readFileSync, writeFileSync, mkdirSync } =\n await import(\"node:fs\");\n const { join } = await import(\"node:path\");\n const { homedir } = await import(\"node:os\");\n\n const queueDir = join(homedir(), \".brainstorm\", \"queue\");\n const queueFile = join(queueDir, \"pending.json\");\n\n if (!existsSync(queueDir)) mkdirSync(queueDir, { recursive: true });\n\n interface QueueItem {\n id: string;\n task: string;\n status: \"pending\" | \"running\" | \"done\" | \"failed\";\n addedAt: string;\n }\n\n const loadQueue = (): QueueItem[] => {\n if (!existsSync(queueFile)) return [];\n try {\n return JSON.parse(readFileSync(queueFile, \"utf-8\"));\n } catch {\n return [];\n }\n };\n const saveQueue = (q: QueueItem[]) =>\n writeFileSync(queueFile, JSON.stringify(q, null, 2), \"utf-8\");\n\n switch (action) {\n case \"add\": {\n if (tasks.length === 0) {\n console.error(\" Error: provide task descriptions to add.\");\n process.exit(1);\n }\n const queue = loadQueue();\n for (const task of tasks) {\n queue.push({\n id: `q-${Date.now()}-${Math.random().toString(36).slice(2, 6)}`,\n task,\n status: \"pending\",\n addedAt: new Date().toISOString(),\n });\n }\n saveQueue(queue);\n console.log(\n `\\n Added ${tasks.length} task(s) to queue. Total: ${queue.length} pending.`,\n );\n break;\n }\n case \"list\": {\n const queue = loadQueue();\n if (queue.length === 0) {\n console.log(\"\\n Queue is empty.\");\n break;\n }\n console.log(`\\n Task Queue (${queue.length} items):\\n`);\n for (const item of queue) {\n const icon =\n item.status === \"done\"\n ? \"✓\"\n : item.status === \"failed\"\n ? \"✗\"\n : item.status === \"running\"\n ? \"⟳\"\n : \"○\";\n console.log(` ${icon} [${item.status}] ${item.task}`);\n }\n break;\n }\n case \"run\": {\n const queue = loadQueue();\n const pending = queue.filter((q) => q.status === \"pending\");\n if (pending.length === 0) {\n console.log(\"\\n No pending tasks in queue.\");\n break;\n }\n console.log(`\\n Running ${pending.length} queued task(s)...`);\n console.log(\n ` Budget: ${opts.budget ?? \"unlimited\"} | Parallel: ${opts.parallel}`,\n );\n console.log(\n `\\n Execute each task with: storm run --unattended \"<task>\"`,\n );\n // Mark as running\n for (const item of pending) item.status = \"running\";\n saveQueue(queue);\n // In full implementation, this would fork child processes.\n // For now, it outputs the commands to run.\n for (const item of pending) {\n console.log(` storm run --unattended \"${item.task}\"`);\n }\n break;\n }\n case \"clear\": {\n saveQueue([]);\n console.log(\"\\n Queue cleared.\");\n break;\n }\n default:\n console.error(\n ` Unknown action: ${action}. Use: add, list, run, clear`,\n );\n }\n console.log();\n },\n );\n\n// ── Search Command (Cross-Repo) ──────────────────────────────────\n\nprogram\n .command(\"search\")\n .description(\"Search code — local semantic search or cross-repo via GitHub\")\n .argument(\"<query>\", \"Search query\")\n .option(\"--global\", \"Search across GitHub (not just local repo)\")\n .option(\"--language <lang>\", \"Filter by language\")\n .option(\"--limit <n>\", \"Max results (default: 10)\", \"10\")\n .action(\n async (\n query: string,\n opts: { global?: boolean; language?: string; limit?: string },\n ) => {\n const limit = parseInt(opts.limit ?? \"10\");\n\n if (opts.global) {\n // Cross-repo search via GitHub Code Search API\n console.log(`\\n Searching GitHub for: \"${query}\"...\\n`);\n const { execFileSync } = await import(\"node:child_process\");\n try {\n const ghArgs = [\"search\", \"code\", query, \"--limit\", String(limit)];\n if (opts.language) ghArgs.push(\"--language\", opts.language);\n const output = execFileSync(\"gh\", ghArgs, {\n encoding: \"utf-8\",\n timeout: 30000,\n stdio: [\"ignore\", \"pipe\", \"pipe\"],\n });\n console.log(output);\n } catch (err: any) {\n if (err.message?.includes(\"ENOENT\")) {\n console.error(\n \" Error: `gh` CLI not found. Install: https://cli.github.com\",\n );\n } else {\n console.error(` Search failed: ${err.message}`);\n }\n }\n } else {\n // Local semantic search\n const { semanticSearch } = await import(\"@brainst0rm/core\");\n const results = semanticSearch(process.cwd(), query, limit);\n if (results.length === 0) {\n console.log(`\\n No results for \"${query}\".`);\n } else {\n console.log(`\\n ${results.length} result(s) for \"${query}\":\\n`);\n for (const r of results) {\n const score = (r.score * 100).toFixed(0);\n console.log(\n ` [${score}%] ${r.filePath}${r.symbolName ? `:${r.symbolName}` : \"\"}`,\n );\n if (r.snippet) {\n console.log(` ${r.snippet.trim().slice(0, 120)}`);\n }\n }\n }\n }\n console.log();\n },\n );\n\n// ── Setup-Infra Command ──────────────────────────────────────────\n\nprogram\n .command(\"setup-infra\")\n .description(\n \"Auto-generate AI infrastructure: BRAINSTORM.md, .agent.md files, routing profiles\",\n )\n .argument(\"[path]\", \"Project path\", \".\")\n .action(async (projectPath: string) => {\n const { resolve, join: pathJoin } = await import(\"node:path\");\n const {\n existsSync,\n writeFileSync: fsWrite,\n mkdirSync: fsMkdir,\n } = await import(\"node:fs\");\n const absPath = resolve(projectPath);\n\n console.log(`\\n Setting up AI infrastructure for ${absPath}...\\n`);\n\n // Phase 1: Analyze\n const { analyzeProject } = await import(\"@brainst0rm/ingest\");\n const analysis = analyzeProject(absPath);\n\n // Phase 2: Auto-generate BRAINSTORM.md (#33)\n const brainstormMdPath = pathJoin(absPath, \"BRAINSTORM.md\");\n if (!existsSync(brainstormMdPath)) {\n const lines = [\n \"---\",\n `build_command: \"npm run build\"`,\n `test_command: \"npm test\"`,\n \"---\",\n \"\",\n `# ${absPath.split(\"/\").pop()}`,\n \"\",\n \"## Stack\",\n \"\",\n ];\n if (analysis.frameworks.frameworks.length > 0)\n lines.push(\n `- Frameworks: ${analysis.frameworks.frameworks.join(\", \")}`,\n );\n if (analysis.languages.primary)\n lines.push(`- Primary language: ${analysis.languages.primary}`);\n if (analysis.frameworks.databases.length > 0)\n lines.push(`- Databases: ${analysis.frameworks.databases.join(\", \")}`);\n if (analysis.frameworks.testing.length > 0)\n lines.push(`- Testing: ${analysis.frameworks.testing.join(\", \")}`);\n\n lines.push(\"\", \"## Architecture\", \"\");\n lines.push(\n `${analysis.summary.totalFiles} files, ${analysis.summary.totalLines.toLocaleString()} lines across ${analysis.summary.moduleCount} modules.`,\n );\n if (analysis.dependencies.entryPoints.length > 0) {\n lines.push(\"\", \"Entry points:\");\n for (const ep of analysis.dependencies.entryPoints.slice(0, 10)) {\n lines.push(`- \\`${ep}\\``);\n }\n }\n\n lines.push(\n \"\",\n \"## Conventions\",\n \"\",\n \"<!-- Add project conventions here -->\",\n );\n\n fsWrite(brainstormMdPath, lines.join(\"\\n\"), \"utf-8\");\n console.log(` ✓ Generated BRAINSTORM.md`);\n } else {\n console.log(` · BRAINSTORM.md already exists (skipped)`);\n }\n\n // Phase 3: Auto-generate .agent.md per module cluster (#34)\n const agentsDir = pathJoin(absPath, \".brainstorm\", \"agents\");\n if (!existsSync(agentsDir)) fsMkdir(agentsDir, { recursive: true });\n\n let agentsCreated = 0;\n for (const cluster of analysis.dependencies.clusters.slice(0, 10)) {\n const safeName = cluster.directory\n .replace(/[/\\\\]/g, \"-\")\n .replace(/^-/, \"\");\n const agentPath = pathJoin(agentsDir, `${safeName}.agent.md`);\n if (existsSync(agentPath)) continue;\n\n const node = analysis.dependencies.nodes.find((n) =>\n cluster.files.includes(n.path),\n );\n const lang = node?.language ?? analysis.languages.primary;\n const exports = cluster.files\n .flatMap(\n (f) =>\n analysis.dependencies.nodes.find((n) => n.path === f)?.exports ??\n [],\n )\n .slice(0, 20);\n\n const agentLines = [\n \"---\",\n `name: ${safeName}-expert`,\n `role: coder`,\n `model: auto`,\n \"---\",\n \"\",\n `# ${safeName} Module Expert`,\n \"\",\n `You are an expert in the ${safeName} module of this project.`,\n \"\",\n `## Context`,\n \"\",\n `- Language: ${lang}`,\n `- Files: ${cluster.files.length}`,\n `- Cohesion: ${cluster.cohesion > 0.5 ? \"high\" : cluster.cohesion > 0.2 ? \"medium\" : \"low\"}`,\n ];\n if (exports.length > 0) {\n agentLines.push(`- Key exports: ${exports.join(\", \")}`);\n }\n agentLines.push(\n \"\",\n \"## Files\",\n \"\",\n ...cluster.files.slice(0, 15).map((f) => `- \\`${f}\\``),\n );\n if (cluster.files.length > 15)\n agentLines.push(`- ... and ${cluster.files.length - 15} more`);\n\n fsWrite(agentPath, agentLines.join(\"\\n\"), \"utf-8\");\n agentsCreated++;\n }\n console.log(\n ` ✓ Generated ${agentsCreated} .agent.md files in .brainstorm/agents/`,\n );\n\n // Phase 4: Generate docs\n const { generateAllDocs } = await import(\"@brainst0rm/docgen\");\n const docResult = generateAllDocs(analysis);\n console.log(\n ` ✓ Generated ${docResult.filesWritten.length} documentation files`,\n );\n\n // Phase 5: Initialize recipe directory\n const { initRecipeDir } = await import(\"@brainst0rm/workflow\");\n initRecipeDir(absPath);\n console.log(` ✓ Initialized .brainstorm/recipes/`);\n\n console.log(\"\\n ══════════════════════════════════════════════════\");\n console.log(\" AI Infrastructure Setup Complete\");\n console.log(\" ══════════════════════════════════════════════════\\n\");\n console.log(` BRAINSTORM.md → project context for agents`);\n console.log(\n ` .brainstorm/agents/ → ${agentsCreated} domain expert agents`,\n );\n console.log(` .brainstorm/recipes/ → shareable workflow templates`);\n console.log(` docs/generated/ → architecture + module + API docs`);\n console.log(\n `\\n Next: Run \\`storm chat\\` to start working with AI agents that know your codebase.`,\n );\n console.log();\n });\n\n// ── Onboard Command ─────────────────────────────────────────────\n\nprogram\n .command(\"onboard\")\n .description(\n \"LLM-driven project onboarding — discover conventions, generate specialized agents, wire routing\",\n )\n .argument(\"[path]\", \"Project path\", \".\")\n .option(\n \"--budget <dollars>\",\n \"Max spend in USD (default: auto from project size)\",\n )\n .option(\"--static-only\", \"Skip LLM phases (equivalent to setup-infra)\")\n .option(\"--dry-run\", \"Show plan without writing files or calling LLMs\")\n .option(\"--phases <phases>\", \"Comma-separated phases to run\")\n .action(\n async (\n projectPath: string,\n opts: {\n budget?: string;\n staticOnly?: boolean;\n dryRun?: boolean;\n phases?: string;\n },\n ) => {\n const { resolve } = await import(\"node:path\");\n const { runOnboardPipeline, ALL_PHASES } =\n await import(\"@brainst0rm/onboard\");\n const absPath = resolve(projectPath);\n\n const options = {\n projectPath: absPath,\n budget: opts.budget ? parseFloat(opts.budget) : undefined,\n staticOnly: opts.staticOnly ?? false,\n dryRun: opts.dryRun ?? false,\n phases: opts.phases\n ? (opts.phases.split(\",\").map((p) => p.trim()) as any)\n : undefined,\n };\n\n console.log(\n `\\n storm onboard ${absPath === process.cwd() ? \".\" : absPath}${opts.staticOnly ? \" --static-only\" : \"\"}${opts.dryRun ? \" --dry-run\" : \"\"}`,\n );\n console.log();\n\n for await (const event of runOnboardPipeline(options)) {\n switch (event.type) {\n case \"onboard-started\":\n if (event.estimatedBudget > 0) {\n console.log(\n ` Budget: $${options.budget?.toFixed(2) ?? \"auto\"} (estimated ~$${event.estimatedBudget.toFixed(2)})`,\n );\n console.log();\n }\n break;\n\n case \"phase-started\":\n process.stdout.write(` Phase: ${event.description} ...`);\n break;\n\n case \"phase-completed\": {\n const cost = event.cost > 0 ? `, $${event.cost.toFixed(2)}` : \"\";\n const dur = (event.durationMs / 1000).toFixed(1);\n console.log(` done (${dur}s${cost})`);\n console.log(` ${event.summary}`);\n console.log();\n break;\n }\n\n case \"phase-skipped\": {\n const { PHASE_LABELS } = await import(\"@brainst0rm/onboard\");\n const label = PHASE_LABELS[event.phase] ?? event.phase;\n console.log(` Phase: ${label} ... skipped`);\n console.log(` ${event.reason}`);\n console.log();\n break;\n }\n\n case \"phase-failed\":\n console.log(` FAILED`);\n console.log(` ${event.error}`);\n console.log();\n break;\n\n case \"file-written\":\n console.log(` → ${event.path}`);\n break;\n\n case \"budget-warning\":\n console.log(\n ` ⚠ Budget: $${event.spent.toFixed(2)} spent, $${event.remaining.toFixed(2)} remaining`,\n );\n break;\n\n case \"onboard-completed\": {\n const r = event.result;\n const dur = (r.totalDurationMs / 1000).toFixed(1);\n console.log(\" ══════════════════════════════════════════════════\");\n console.log(\n ` Onboarding Complete — $${r.totalCost.toFixed(2)} total, ${dur}s`,\n );\n console.log(\" ══════════════════════════════════════════════════\");\n if (r.filesWritten.length > 0) {\n console.log();\n for (const f of r.filesWritten) {\n console.log(` ${f}`);\n }\n }\n console.log(\n `\\n Next: Run \\`storm chat\\` to start working with agents that know your codebase.\\n`,\n );\n break;\n }\n }\n }\n },\n );\n\n// ── Route Explain Command ─────────────────────────────────────────\n\nprogram\n .command(\"route\")\n .description(\"Explain how Brainstorm classifies and routes a task\")\n .argument(\"[task]\", \"Task description to classify\")\n .option(\"--json\", \"Output as JSON\")\n .action(async (task: string | undefined, opts: { json?: boolean }) => {\n const { classifyTask } = await import(\"@brainst0rm/router\");\n\n const taskText = task ?? \"write a function that validates email addresses\";\n const profile = classifyTask(taskText);\n\n if (opts.json) {\n console.log(JSON.stringify({ task: taskText, profile }, null, 2));\n return;\n }\n\n console.log(\"\\n Route Explain\");\n console.log(\" ══════════════════════════════════════════════════\\n\");\n console.log(` Task: \"${taskText.slice(0, 80)}\"`);\n console.log();\n console.log(` Classification:`);\n console.log(` Type: ${profile.type}`);\n console.log(` Complexity: ${profile.complexity}`);\n console.log(` Tools: ${profile.requiresToolUse ? \"yes\" : \"no\"}`);\n console.log(` Reasoning: ${profile.requiresReasoning ? \"yes\" : \"no\"}`);\n if (profile.language) console.log(` Language: ${profile.language}`);\n if (profile.domain) console.log(` Domain: ${profile.domain}`);\n console.log(\n ` Est tokens: ${profile.estimatedTokens.input}in / ${profile.estimatedTokens.output}out`,\n );\n\n console.log();\n console.log(` Routing Logic:`);\n if (profile.type === \"ingest\")\n console.log(` → Ingest pipeline: analysis + docgen + infra setup`);\n else if (profile.type === \"audit\")\n console.log(` → Full review pipeline: security + quality + tech debt`);\n else if (profile.type === \"migration\")\n console.log(` → Migration pipeline: parallel agents per module`);\n else if (profile.type === \"documentation\")\n console.log(` → Documentation pipeline: architecture + module docs`);\n else if (profile.requiresReasoning)\n console.log(\n ` → Routes to frontier model (Opus/GPT-5.4) for reasoning`,\n );\n else if (\n profile.complexity === \"trivial\" ||\n profile.complexity === \"simple\"\n )\n console.log(\n ` → Routes to fast/cheap model (Haiku/Flash) for simple tasks`,\n );\n else\n console.log(\n ` → Routes based on active strategy (quality/cost/combined)`,\n );\n\n console.log();\n });\n\n// ── Loop Command ──────────────────────────────────────────────────\n\nprogram\n .command(\"loop\")\n .description(\"Run a prompt or slash command on a recurring interval\")\n .argument(\"<prompt>\", \"Prompt or /command to run repeatedly\")\n .option(\"-i, --interval <minutes>\", \"Interval between runs in minutes\", \"10\")\n .option(\n \"-n, --max-runs <count>\",\n \"Maximum number of runs (0 = unlimited)\",\n \"0\",\n )\n .action(\n async (prompt: string, opts: { interval: string; maxRuns: string }) => {\n const intervalMs = Math.max(1, parseInt(opts.interval) || 10) * 60 * 1000;\n const maxRuns = parseInt(opts.maxRuns) || 0;\n let runCount = 0;\n\n console.log(\n `\\n Loop: \"${prompt}\" every ${opts.interval}m${maxRuns > 0 ? ` (max ${maxRuns} runs)` : \"\"}`,\n );\n console.log(` Press Ctrl+C to stop.\\n`);\n\n const runOnce = async () => {\n runCount++;\n const ts = new Date().toLocaleTimeString();\n console.log(` [${ts}] Run #${runCount}...`);\n\n try {\n // Shell out to `storm run` for each iteration — clean process per run\n const { execFile } = await import(\"node:child_process\");\n const { promisify } = await import(\"node:util\");\n const execFileAsync = promisify(execFile);\n\n const stormBin = process.argv[1]; // path to this script\n const { stdout, stderr } = await execFileAsync(\n process.execPath,\n [stormBin, \"run\", prompt],\n {\n cwd: process.cwd(),\n timeout: 5 * 60 * 1000, // 5 min max per run\n env: { ...process.env },\n },\n );\n if (stdout.trim()) console.log(stdout.trim());\n if (stderr.trim()) console.error(stderr.trim());\n } catch (err: any) {\n console.error(\n ` Error: ${(err.stderr ?? err.message).slice(0, 200)}`,\n );\n }\n\n if (maxRuns > 0 && runCount >= maxRuns) {\n console.log(`\\n Loop complete (${runCount} runs).`);\n process.exit(0);\n }\n };\n\n // Run immediately, then on interval\n await runOnce();\n setInterval(runOnce, intervalMs);\n },\n );\n\n// ── Memory Command ────────────────────────────────────────────────\n\nprogram\n .command(\"memory\")\n .description(\"View and manage agent memory entries\")\n .argument(\"[action]\", \"Action: list, search, forget\", \"list\")\n .argument(\"[query]\", \"Search query or memory key to forget\")\n .action(async (action: string, query?: string) => {\n const { MemoryManager } = await import(\"@brainst0rm/core\");\n const homePath = join(homedir(), \".brainstorm\", \"memory\");\n const memory = new MemoryManager(homePath);\n\n switch (action) {\n case \"list\": {\n const entries = memory.list();\n if (entries.length === 0) {\n console.log(\"\\n No memory entries.\\n\");\n return;\n }\n console.log(`\\n Memory (${entries.length} entries):\\n`);\n for (const entry of entries) {\n const typeIcon =\n entry.type === \"user\"\n ? \"👤\"\n : entry.type === \"feedback\"\n ? \"💬\"\n : entry.type === \"project\"\n ? \"📁\"\n : \"🔗\";\n console.log(` ${typeIcon} ${entry.name}`);\n console.log(` ${entry.description.slice(0, 80)}`);\n }\n console.log();\n break;\n }\n case \"search\": {\n if (!query) {\n console.error(\" Usage: storm memory search <query>\");\n process.exit(1);\n }\n const results = memory.search(query);\n if (results.length === 0) {\n console.log(`\\n No memory entries matching \"${query}\".\\n`);\n return;\n }\n console.log(\n `\\n Found ${results.length} entries matching \"${query}\":\\n`,\n );\n for (const entry of results) {\n console.log(` ${entry.name}: ${entry.description.slice(0, 80)}`);\n }\n console.log();\n break;\n }\n case \"forget\": {\n if (!query) {\n console.error(\" Usage: storm memory forget <key>\");\n process.exit(1);\n }\n const deleted = memory.delete(query);\n if (deleted) {\n console.log(`\\n Forgot: \"${query}\"\\n`);\n } else {\n console.log(`\\n Memory \"${query}\" not found.\\n`);\n }\n break;\n }\n default:\n console.error(\n ` Unknown action: ${action}. Use list, search, or forget.`,\n );\n process.exit(1);\n }\n });\n\n// ── Sessions Command ───────────────────────────────────────────────\n\nprogram\n .command(\"sessions\")\n .description(\"List recent chat sessions\")\n .option(\"-n, --limit <count>\", \"Number of sessions to show\", \"10\")\n .action(async (opts: { limit: string }) => {\n const db = getDb();\n const sessionManager = new SessionManager(db);\n const sessions = sessionManager.listRecent(parseInt(opts.limit));\n\n console.log(\"\\n Recent Sessions:\\n\");\n if (sessions.length === 0) {\n console.log(\" No sessions found.\");\n }\n for (const s of sessions) {\n const age = Math.floor((Date.now() / 1000 - s.updatedAt) / 60);\n const ageStr =\n age < 60\n ? `${age}m ago`\n : age < 1440\n ? `${Math.floor(age / 60)}h ago`\n : `${Math.floor(age / 1440)}d ago`;\n console.log(\n ` ${s.id.slice(0, 8)} ${s.messageCount} msgs $${s.totalCost.toFixed(4)} ${ageStr} ${s.projectPath}`,\n );\n }\n console.log();\n });\n\n// ── Metrics Command ────────────────────────────────────────────────\n\nprogram\n .command(\"metrics\")\n .description(\"Export tool stats, model latency, and cost breakdown\")\n .option(\"--json\", \"Output as JSON\")\n .action(async (opts: { json?: boolean }) => {\n const db = getDb();\n const costRepo = new CostRepository(db);\n\n const byModel = costRepo.recentByModel(20);\n const byTaskType = costRepo.byTaskType();\n const todayCost = costRepo.totalCostToday();\n const monthCost = costRepo.totalCostThisMonth();\n\n if (opts.json) {\n console.log(\n JSON.stringify({ todayCost, monthCost, byModel, byTaskType }, null, 2),\n );\n return;\n }\n\n console.log(\"\\n Cost Summary:\");\n console.log(` Today: $${todayCost.toFixed(4)}`);\n console.log(` This month: $${monthCost.toFixed(4)}`);\n\n if (byModel.length > 0) {\n console.log(\"\\n Cost by Model:\");\n for (const m of byModel) {\n console.log(\n ` ${m.modelId.padEnd(40)} $${m.totalCost.toFixed(4)} (${m.requestCount} reqs)`,\n );\n }\n }\n\n if (byTaskType.length > 0) {\n console.log(\"\\n Cost by Task Type:\");\n for (const t of byTaskType) {\n console.log(\n ` ${t.taskType.padEnd(20)} $${t.totalCost.toFixed(4)} (${t.requestCount} reqs, avg $${t.avgCost.toFixed(4)})`,\n );\n }\n }\n console.log();\n });\n\n// ── Ingest Command (Unified Pipeline) ────────────────────────────\n\nprogram\n .command(\"ingest\")\n .description(\n \"Full ingest pipeline: analyze → generate docs → set up AI infrastructure\",\n )\n .argument(\"[path]\", \"Project path to ingest\", \".\")\n .option(\"--depth <level>\", \"Analysis depth: quick or full\", \"full\")\n .option(\"--output <dir>\", \"Output directory for analysis artifacts\")\n .action(\n async (projectPath: string, opts: { depth: string; output?: string }) => {\n const { resolve } = await import(\"node:path\");\n const absPath = resolve(projectPath);\n const startTime = Date.now();\n\n console.log(`\\n ══════════════════════════════════════════════════`);\n console.log(` Brainstorm Ingest — ${absPath}`);\n console.log(` ══════════════════════════════════════════════════\\n`);\n\n // Phase 1: Analyze\n console.log(` Phase 1: Analyzing codebase...`);\n const { analyzeProject } = await import(\"@brainst0rm/ingest\");\n const analysis = analyzeProject(absPath);\n console.log(\n ` ✓ ${analysis.summary.totalFiles} files, ${analysis.summary.totalLines.toLocaleString()} lines, ${analysis.summary.moduleCount} modules`,\n );\n\n // Phase 2: Generate docs\n console.log(` Phase 2: Generating documentation...`);\n const { generateAllDocs } = await import(\"@brainst0rm/docgen\");\n const docResult = generateAllDocs(analysis, opts.output);\n console.log(` ✓ ${docResult.filesWritten.length} doc files written`);\n\n // Phase 3: Setup infrastructure (reuse setup-infra logic)\n console.log(` Phase 3: Setting up AI infrastructure...`);\n // Trigger setup-infra programmatically by executing the same logic inline\n const {\n existsSync,\n writeFileSync: fsWrite,\n mkdirSync: fsMkdir,\n } = await import(\"node:fs\");\n const { join: pathJoin } = await import(\"node:path\");\n\n // BRAINSTORM.md\n const bmPath = pathJoin(absPath, \"BRAINSTORM.md\");\n if (!existsSync(bmPath)) {\n const lines = [\n \"---\",\n `build_command: \"npm run build\"`,\n `test_command: \"npm test\"`,\n \"---\",\n \"\",\n `# ${absPath.split(\"/\").pop()}`,\n \"\",\n `${analysis.languages.primary} project with ${analysis.summary.frameworkList.join(\", \") || \"no detected frameworks\"}.`,\n `${analysis.summary.totalFiles} files, ${analysis.summary.totalLines.toLocaleString()} lines across ${analysis.summary.moduleCount} modules.`,\n ];\n fsWrite(bmPath, lines.join(\"\\n\"), \"utf-8\");\n console.log(` ✓ Generated BRAINSTORM.md`);\n }\n\n // Agent profiles\n const agentsDir = pathJoin(absPath, \".brainstorm\", \"agents\");\n if (!existsSync(agentsDir)) fsMkdir(agentsDir, { recursive: true });\n let agentCount = 0;\n for (const cluster of analysis.dependencies.clusters.slice(0, 10)) {\n const safeName = cluster.directory\n .replace(/[/\\\\]/g, \"-\")\n .replace(/^-/, \"\");\n const agentPath = pathJoin(agentsDir, `${safeName}.agent.md`);\n if (!existsSync(agentPath)) {\n fsWrite(\n agentPath,\n `---\\nname: ${safeName}-expert\\nrole: coder\\n---\\n\\n# ${safeName} Expert\\n\\nDomain expert for the ${safeName} module.\\n`,\n \"utf-8\",\n );\n agentCount++;\n }\n }\n console.log(` ✓ ${agentCount} agent profiles created`);\n\n // Recipes\n const { initRecipeDir } = await import(\"@brainst0rm/workflow\");\n initRecipeDir(absPath);\n console.log(` ✓ Recipe directory initialized`);\n\n const elapsed = ((Date.now() - startTime) / 1000).toFixed(1);\n console.log(`\\n ──────────────────────────────────────────────────`);\n console.log(` Ingest complete in ${elapsed}s.`);\n console.log(\n ` Your codebase is now AI-ready. Run \\`storm chat\\` to start.`,\n );\n console.log();\n },\n );\n\n// ── Audit Command ────────────────────────────────────────────────\n\nprogram\n .command(\"audit\")\n .description(\n \"Full code audit: security, quality, tech debt, dependency review\",\n )\n .argument(\"[path]\", \"Project path to audit\", \".\")\n .option(\"--json\", \"Output as JSON\")\n .option(\n \"--focus <area>\",\n \"Focus area: security, quality, dependencies, all\",\n \"all\",\n )\n .action(\n async (projectPath: string, opts: { json?: boolean; focus: string }) => {\n const { resolve } = await import(\"node:path\");\n const absPath = resolve(projectPath);\n\n console.log(`\\n Auditing ${absPath}...\\n`);\n\n const { analyzeProject } = await import(\"@brainst0rm/ingest\");\n const analysis = analyzeProject(absPath);\n\n const findings: Array<{\n severity: string;\n category: string;\n message: string;\n file?: string;\n }> = [];\n\n // Complexity hotspots\n if (opts.focus === \"all\" || opts.focus === \"quality\") {\n for (const f of analysis.complexity.files.filter(\n (cf: any) => cf.score >= 70,\n )) {\n findings.push({\n severity: \"warning\",\n category: \"complexity\",\n message: `High complexity score (${f.score}/100) — consider refactoring`,\n file: f.path,\n });\n }\n }\n\n // Large files\n if (opts.focus === \"all\" || opts.focus === \"quality\") {\n for (const f of analysis.complexity.files.filter(\n (cf: any) => cf.lines > 500,\n )) {\n findings.push({\n severity: \"info\",\n category: \"file-size\",\n message: `Large file (${f.lines} lines) — consider splitting`,\n file: f.path,\n });\n }\n }\n\n // Low cohesion modules\n if (opts.focus === \"all\" || opts.focus === \"quality\") {\n for (const c of analysis.dependencies.clusters.filter(\n (cl) => cl.cohesion < 0.1,\n )) {\n findings.push({\n severity: \"info\",\n category: \"cohesion\",\n message: `Low cohesion module (${c.cohesion.toFixed(2)}) — files may be unrelated`,\n file: c.directory,\n });\n }\n }\n\n if (opts.json) {\n console.log(\n JSON.stringify({ findings, summary: analysis.summary }, null, 2),\n );\n return;\n }\n\n console.log(` Audit Results: ${findings.length} finding(s)\\n`);\n const bySeverity = { warning: 0, info: 0, error: 0 };\n for (const f of findings) {\n const icon =\n f.severity === \"warning\" ? \"⚠\" : f.severity === \"error\" ? \"✗\" : \"ℹ\";\n console.log(\n ` ${icon} [${f.category}] ${f.message}${f.file ? ` (${f.file})` : \"\"}`,\n );\n bySeverity[f.severity as keyof typeof bySeverity]++;\n }\n console.log(\n `\\n Summary: ${bySeverity.error} errors, ${bySeverity.warning} warnings, ${bySeverity.info} info`,\n );\n console.log();\n },\n );\n\n// ── Share Command ────────────────────────────────────────────────\n\nprogram\n .command(\"share\")\n .description(\"Export or import session context for team sharing\")\n .argument(\"<action>\", \"Action: export or import\")\n .argument(\"[file]\", \"File path for export/import\")\n .action(async (action: string, file?: string) => {\n const { writeFileSync, readFileSync } = await import(\"node:fs\");\n const db = getDb();\n const sessionManager = new SessionManager(db);\n\n if (action === \"export\") {\n const sessions = db\n .prepare(\"SELECT * FROM sessions ORDER BY created_at DESC LIMIT 1\")\n .all() as any[];\n if (sessions.length === 0) {\n console.log(\"\\n No sessions to export.\");\n return;\n }\n const session = sessions[0];\n const messages = db\n .prepare(\"SELECT * FROM messages WHERE session_id = ?\")\n .all(session.id);\n const exportData = {\n version: 1,\n exportedAt: new Date().toISOString(),\n session: { id: session.id, projectPath: session.project_path },\n messages,\n };\n const outPath =\n file ?? `brainstorm-session-${session.id.slice(0, 8)}.json`;\n writeFileSync(outPath, JSON.stringify(exportData, null, 2), \"utf-8\");\n console.log(\n `\\n Exported session to ${outPath} (${messages.length} messages)`,\n );\n } else if (action === \"import\") {\n if (!file) {\n console.error(\"\\n Usage: storm share import <file.json>\");\n process.exit(1);\n }\n const data = JSON.parse(readFileSync(file, \"utf-8\"));\n console.log(\n `\\n Imported session context: ${data.messages?.length ?? 0} messages from ${data.exportedAt}`,\n );\n console.log(` Use this context in your next chat session.`);\n } else {\n console.error(`\\n Unknown action: ${action}. Use: export or import`);\n }\n console.log();\n closeDb();\n });\n\n// ── Cloud Command (Remote Agents) ────────────────────────────────\n\nprogram\n .command(\"cloud\")\n .description(\"Run agents remotely via BrainstormRouter cloud\")\n .argument(\"<action>\", \"Action: run, status, list\")\n .argument(\"[task]\", \"Task description (for run)\")\n .option(\"--budget <amount>\", \"Budget limit in dollars\", \"5.0\")\n .action(async (action: string, task?: string, opts?: { budget: string }) => {\n console.log(`\\n BrainstormRouter Cloud Agents`);\n console.log(` ─────────────────────────────\\n`);\n\n switch (action) {\n case \"run\":\n if (!task) {\n console.error(\" Usage: storm cloud run <task>\");\n break;\n }\n console.log(` Task: ${task}`);\n console.log(` Budget: $${opts?.budget ?? \"5.0\"}`);\n console.log(` Status: Queued`);\n console.log(\n `\\n Cloud execution requires a BrainstormRouter Pro subscription.`,\n );\n console.log(\n ` Sign up at https://brainstorm.co/cloud to enable remote agents.`,\n );\n break;\n case \"status\":\n console.log(` No active cloud agents.`);\n break;\n case \"list\":\n console.log(` No completed cloud runs.`);\n break;\n default:\n console.error(` Unknown action: ${action}. Use: run, status, list`);\n }\n console.log();\n });\n\n// ── CI/CD Generation Command ─────────────────────────────────────\n\nprogram\n .command(\"ci-gen\")\n .description(\"Generate CI/CD workflow files (GitHub Actions, GitLab CI)\")\n .argument(\"[platform]\", \"CI platform: github, gitlab\", \"github\")\n .option(\"--output <path>\", \"Output path\")\n .action(async (platform: string, opts: { output?: string }) => {\n const { existsSync, writeFileSync, mkdirSync } = await import(\"node:fs\");\n const { join } = await import(\"node:path\");\n const { analyzeProject } = await import(\"@brainst0rm/ingest\");\n\n const projectPath = process.cwd();\n const analysis = analyzeProject(projectPath);\n\n if (platform === \"github\") {\n const workflowDir =\n opts.output ?? join(projectPath, \".github\", \"workflows\");\n if (!existsSync(workflowDir)) mkdirSync(workflowDir, { recursive: true });\n\n const buildCmd = analysis.frameworks.packageManagers.includes(\"pnpm\")\n ? \"pnpm\"\n : analysis.frameworks.packageManagers.includes(\"yarn\")\n ? \"yarn\"\n : \"npm\";\n\n const hasTurbo = analysis.frameworks.buildTools.includes(\"Turborepo\");\n\n const workflow = [\n \"name: Brainstorm AI Review\",\n \"\",\n \"on:\",\n \" pull_request:\",\n \" branches: [main, master]\",\n \"\",\n \"jobs:\",\n \" ai-review:\",\n \" runs-on: ubuntu-latest\",\n \" steps:\",\n \" - uses: actions/checkout@v4\",\n ` - uses: actions/setup-node@v4`,\n \" with:\",\n ' node-version: \"22\"',\n ` - run: ${buildCmd} install`,\n hasTurbo\n ? ` - run: npx turbo run build test`\n : ` - run: ${buildCmd} run build && ${buildCmd} test`,\n \"\",\n \" # AI-assisted code review via Brainstorm\",\n ` - name: Brainstorm Review`,\n ` run: npx @brainst0rm/cli run --unattended \"Review the PR changes for bugs and security issues\"`,\n \" env:\",\n \" BRAINSTORM_API_KEY: ${{ secrets.BRAINSTORM_API_KEY }}\",\n ];\n\n const outPath = join(workflowDir, \"brainstorm-review.yml\");\n writeFileSync(outPath, workflow.join(\"\\n\"), \"utf-8\");\n console.log(`\\n Generated GitHub Actions workflow: ${outPath}`);\n } else if (platform === \"gitlab\") {\n const outPath =\n opts.output ?? join(projectPath, \".gitlab-ci-brainstorm.yml\");\n const workflow = [\n \"brainstorm-review:\",\n \" stage: review\",\n \" image: node:22\",\n \" script:\",\n \" - npm install\",\n ' - npx @brainst0rm/cli run --unattended \"Review changes for bugs and security\"',\n \" only:\",\n \" - merge_requests\",\n \" variables:\",\n \" BRAINSTORM_API_KEY: $BRAINSTORM_API_KEY\",\n ];\n writeFileSync(outPath, workflow.join(\"\\n\"), \"utf-8\");\n console.log(`\\n Generated GitLab CI config: ${outPath}`);\n } else {\n console.error(`\\n Unknown platform: ${platform}. Use: github, gitlab`);\n }\n console.log();\n });\n\n// ── Start Command (One-Command Onboarding) ───────────────────────\n\nprogram\n .command(\"start\")\n .description(\n \"One-command setup: detect project, connect to community tier, start chatting\",\n )\n .action(async () => {\n const { resolve } = await import(\"node:path\");\n const { existsSync } = await import(\"node:fs\");\n const projectPath = resolve(\".\");\n\n console.log(`\\n ══════════════════════════════════════════════════`);\n console.log(` brainstorm start`);\n console.log(` ══════════════════════════════════════════════════\\n`);\n\n // Step 1: Check if already initialized\n const hasBrainstormMd =\n existsSync(resolve(\"BRAINSTORM.md\")) || existsSync(resolve(\"STORM.md\"));\n const hasConfig = existsSync(resolve(\"brainstorm.toml\"));\n\n if (!hasBrainstormMd && !hasConfig) {\n console.log(` Step 1: Initializing project...`);\n // Run init with defaults\n const { execFileSync } = await import(\"node:child_process\");\n try {\n execFileSync(process.execPath, [process.argv[1], \"init\", \"--yes\"], {\n cwd: projectPath,\n stdio: \"inherit\",\n });\n } catch {\n // init may not exist as standalone — generate minimal config\n const { writeFileSync } = await import(\"node:fs\");\n writeFileSync(\n resolve(\"BRAINSTORM.md\"),\n `# ${projectPath.split(\"/\").pop()}\\n\\nProject initialized by \\`storm start\\`.\\n`,\n \"utf-8\",\n );\n console.log(` ✓ Generated BRAINSTORM.md`);\n }\n } else {\n console.log(` Step 1: Project already initialized ✓`);\n }\n\n // Step 2: Check API key / community tier\n const brKey = process.env.BRAINSTORM_API_KEY;\n if (brKey) {\n console.log(` Step 2: BrainstormRouter API key detected ✓`);\n } else {\n console.log(` Step 2: Using free community tier`);\n console.log(` → 10 requests/min · $5/month cap · 362 models`);\n console.log(` → Upgrade: https://brainstormrouter.com/dashboard`);\n }\n\n // Step 3: Quick health check\n console.log(` Step 3: Checking connectivity...`);\n try {\n const resp = await fetch(\"https://api.brainstormrouter.com/health\", {\n signal: AbortSignal.timeout(5000),\n });\n if (resp.ok) {\n console.log(` ✓ BrainstormRouter reachable`);\n } else {\n console.log(\n ` ⚠ BrainstormRouter returned ${resp.status} (will work offline with local models)`,\n );\n }\n } catch {\n console.log(\n ` ⚠ BrainstormRouter unreachable (will work offline with local models)`,\n );\n }\n\n console.log(`\\n ──────────────────────────────────────────────────`);\n console.log(` Ready! Run one of:`);\n console.log(` storm chat Interactive session`);\n console.log(` storm ingest Analyze this codebase`);\n console.log(` storm run \"prompt\" Single-shot execution`);\n console.log();\n });\n\n// ── Platform Command ─────────────────────────────────────────────\n\nconst platformCmd = program\n .command(\"platform\")\n .description(\"Platform contract tools — verify, init, manifest\");\n\nplatformCmd\n .command(\"verify\")\n .description(\"Verify a product implements the Brainstorm platform contract\")\n .argument(\"<url>\", \"Product API base URL (e.g., https://brainstormmsp.ai)\")\n .option(\"--token <jwt>\", \"Bearer token for authenticated endpoints\")\n .option(\"--timeout <ms>\", \"Request timeout in milliseconds\", \"10000\")\n .action(async (url: string, opts: { token?: string; timeout?: string }) => {\n const { verifyProductContract } = await import(\"@brainst0rm/godmode\");\n\n console.log(`\\n Platform Contract Verification`);\n console.log(` ──────────────────────────────\\n`);\n console.log(` Target: ${url}`);\n console.log();\n\n const results = await verifyProductContract(url, {\n timeout: parseInt(opts.timeout ?? \"10000\"),\n token: opts.token,\n });\n\n let passed = 0;\n let failed = 0;\n\n for (const r of results) {\n const icon = r.status === \"pass\" ? \"✓\" : r.status === \"fail\" ? \"✗\" : \"○\";\n const color =\n r.status === \"pass\"\n ? \"\\x1b[32m\"\n : r.status === \"fail\"\n ? \"\\x1b[31m\"\n : \"\\x1b[90m\";\n const latency = r.latencyMs ? ` (${r.latencyMs}ms)` : \"\";\n console.log(\n ` ${color}${icon}\\x1b[0m ${r.endpoint} — ${r.message}${latency}`,\n );\n\n if (r.status === \"pass\") passed++;\n else if (r.status === \"fail\") failed++;\n }\n\n console.log();\n console.log(\n ` ${passed} passed, ${failed} failed, ${results.length} total`,\n );\n\n if (failed > 0) {\n console.log(`\\n Missing endpoints need to be implemented.`);\n console.log(` See: brainstorm platform init`);\n } else {\n console.log(`\\n Product implements the platform contract.`);\n }\n console.log();\n\n process.exit(failed > 0 ? 1 : 0);\n });\n\nplatformCmd\n .command(\"init\")\n .description(\"Generate a product-manifest.yaml template\")\n .option(\"--id <id>\", \"Product ID (lowercase, hyphens)\", \"my-product\")\n .option(\"--name <name>\", \"Display name\", \"My Product\")\n .option(\"--url <url>\", \"API base URL\", \"http://localhost:3000\")\n .action(async (opts: { id: string; name: string; url: string }) => {\n const { generateManifestTemplate } = await import(\"@brainst0rm/godmode\");\n const { writeFileSync, existsSync } = await import(\"node:fs\");\n const { resolve } = await import(\"node:path\");\n\n const template = generateManifestTemplate(opts.id, opts.name, opts.url);\n\n const outPath = resolve(\"product-manifest.yaml\");\n if (existsSync(outPath)) {\n console.error(\n ` product-manifest.yaml already exists. Delete it first to regenerate.`,\n );\n process.exit(1);\n }\n\n writeFileSync(outPath, template, \"utf-8\");\n console.log(`\\n ✓ Generated product-manifest.yaml`);\n console.log(\n ` Edit the file, then run: brainstorm platform verify ${opts.url}\\n`,\n );\n });\n\nplatformCmd\n .command(\"validate\")\n .description(\"Validate a product-manifest.yaml file\")\n .argument(\"[path]\", \"Path to manifest file\", \"product-manifest.yaml\")\n .action(async (path: string) => {\n const { readFileSync, existsSync } = await import(\"node:fs\");\n const { resolve } = await import(\"node:path\");\n const { validateManifestData } = await import(\"@brainst0rm/godmode\");\n\n const filePath = resolve(path);\n if (!existsSync(filePath)) {\n console.error(` File not found: ${filePath}`);\n console.error(` Run: brainstorm platform init`);\n process.exit(1);\n }\n\n const content = readFileSync(filePath, \"utf-8\");\n let data: unknown;\n try {\n // Try YAML-compatible JSON parse, or fall back to simple key:value parsing\n data = JSON.parse(content);\n } catch {\n // For YAML, we need a parser — suggest installing yaml package\n console.error(\n ` Cannot parse ${path}. Install 'yaml' package or use JSON format.`,\n );\n try {\n const yaml = await import(\"yaml\");\n data = yaml.parse(content);\n } catch {\n console.error(` Tip: npm install yaml`);\n process.exit(1);\n }\n }\n\n const result = validateManifestData(data);\n if (result.ok) {\n const m = result.manifest!;\n console.log(\n `\\n ✓ Valid manifest: ${m.product.name} (${m.product.id}) v${m.product.version}`,\n );\n console.log(` API: ${m.security.api_base}`);\n console.log(\n ` Auth: human=${m.security.auth.human}, machine=${m.security.auth.machine}`,\n );\n console.log(` Capabilities: ${m.capabilities.length}`);\n console.log(\n ` Events: publishes=${m.events.publishes.length}, subscribes=${m.events.subscribes.length}`,\n );\n console.log();\n } else {\n console.error(`\\n ✗ Invalid manifest:`);\n for (const err of result.errors ?? []) {\n console.error(` - ${err}`);\n }\n console.error();\n process.exit(1);\n }\n });\n\n// ── MCP Command ──────────────────────────────────────────────────\n\nprogram\n .command(\"mcp\")\n .description(\n \"Start MCP server (stdio) — exposes God Mode tools to Claude Code/Desktop\",\n )\n .action(async () => {\n const { startMCPServer } = await import(\"../mcp-server.js\");\n await startMCPServer();\n });\n\n// ── Setup Command ────────────────────────────────────────────────\n\nprogram\n .command(\"setup\")\n .description(\n \"Bootstrap Brainstorm on this machine — auth, config, MCP, ecosystem context\",\n )\n .action(async () => {\n const { existsSync, mkdirSync, writeFileSync, readFileSync } =\n await import(\"node:fs\");\n const { join } = await import(\"node:path\");\n const { homedir } = await import(\"node:os\");\n\n console.log(`\\n ══════════════════════════════════════════════════`);\n console.log(` brainstorm setup`);\n console.log(` ══════════════════════════════════════════════════\\n`);\n\n // Step 1: Check BR API key\n const brKey = process.env.BRAINSTORM_API_KEY;\n if (brKey) {\n console.log(` ✓ BrainstormRouter API key found`);\n } else {\n console.log(` ✗ BRAINSTORM_API_KEY not set`);\n console.log(` Get one at https://brainstormrouter.com/dashboard`);\n console.log(` Then: export BRAINSTORM_API_KEY=br_live_xxx\\n`);\n }\n\n // Step 2: Check 1Password\n const opToken = process.env.OP_SERVICE_ACCOUNT_TOKEN;\n if (opToken) {\n console.log(` ✓ 1Password service account connected`);\n } else {\n console.log(` ○ 1Password not configured (optional)`);\n }\n\n // Step 3: Test product connectivity\n console.log(`\\n Testing products...\\n`);\n const products = [\n {\n id: \"msp\",\n url: process.env.BRAINSTORM_MSP_URL ?? \"https://brainstormmsp.ai\",\n key: \"BRAINSTORM_MSP_API_KEY\",\n },\n {\n id: \"br\",\n url:\n process.env.BRAINSTORM_BR_URL ?? \"https://api.brainstormrouter.com\",\n key: \"BRAINSTORM_API_KEY\",\n },\n {\n id: \"gtm\",\n url: process.env.BRAINSTORM_GTM_URL ?? \"https://catsfeet.com\",\n key: \"BRAINSTORM_GTM_API_KEY\",\n },\n {\n id: \"vm\",\n url: process.env.BRAINSTORM_VM_URL ?? \"https://vm.brainstorm.co\",\n key: \"BRAINSTORM_VM_API_KEY\",\n },\n {\n id: \"shield\",\n url:\n process.env.BRAINSTORM_SHIELD_URL ?? \"https://shield.brainstorm.co\",\n key: \"BRAINSTORM_SHIELD_API_KEY\",\n },\n ];\n\n let connectedCount = 0;\n let totalTools = 0;\n const connectedSystems: string[] = [];\n\n for (const p of products) {\n try {\n const res = await fetch(`${p.url}/health`, {\n signal: AbortSignal.timeout(5000),\n });\n if (res.ok) {\n const health = (await res.json()) as any;\n // Try to get tool count\n let toolCount = 0;\n const apiKey = process.env[p.key];\n if (apiKey) {\n try {\n const toolsRes = await fetch(`${p.url}/api/v1/god-mode/tools`, {\n headers: { Authorization: `Bearer ${apiKey}` },\n signal: AbortSignal.timeout(5000),\n });\n if (toolsRes.ok) {\n const data = (await toolsRes.json()) as any;\n toolCount = data.tool_count ?? data.tools?.length ?? 0;\n }\n } catch {}\n }\n console.log(\n ` ● ${p.id.padEnd(8)} ${String(toolCount).padStart(2)} tools ${health.version ?? \"\"}`,\n );\n connectedCount++;\n totalTools += toolCount;\n connectedSystems.push(p.id);\n } else {\n console.log(` ○ ${p.id.padEnd(8)} unreachable (${res.status})`);\n }\n } catch {\n console.log(` ○ ${p.id.padEnd(8)} offline`);\n }\n }\n\n // Step 4: Configure MCP for Claude Code\n const claudeDir = join(homedir(), \".claude\");\n const mcpPath = join(claudeDir, \"mcp.json\");\n\n if (existsSync(mcpPath)) {\n try {\n const existing = JSON.parse(readFileSync(mcpPath, \"utf-8\"));\n if (!existing.mcpServers?.brainstorm) {\n existing.mcpServers = existing.mcpServers ?? {};\n existing.mcpServers.brainstorm = {\n command: \"brainstorm\",\n args: [\"mcp\"],\n };\n writeFileSync(mcpPath, JSON.stringify(existing, null, 2));\n console.log(\n `\\n ✓ Added brainstorm MCP server to ~/.claude/mcp.json`,\n );\n } else {\n console.log(\n `\\n ✓ brainstorm MCP server already in ~/.claude/mcp.json`,\n );\n }\n } catch {\n console.log(`\\n ⚠ Could not update ~/.claude/mcp.json (parse error)`);\n }\n } else {\n console.log(\n `\\n ○ ~/.claude/mcp.json not found (Claude Code not detected)`,\n );\n }\n\n // Step 5: Summary\n console.log(`\\n ──────────────────────────────────────────────────`);\n console.log(\n ` ${connectedCount} products connected, ${totalTools} tools available`,\n );\n console.log(` Run: brainstorm status (full diagnostic)`);\n console.log(` Run: brainstorm mcp (start MCP server for Claude)`);\n console.log();\n });\n\n// ── Status Command (ecosystem) ───────────────────────────────────\n\nprogram\n .command(\"ecosystem\")\n .alias(\"status\")\n .description(\n \"Show full ecosystem status — all products, tools, auth, connectivity\",\n )\n .action(async () => {\n console.log(`\\n Brainstorm Ecosystem Status`);\n console.log(` ───────────────────────────\\n`);\n\n // Auth\n const brKey = process.env.BRAINSTORM_API_KEY;\n console.log(\n ` Auth: ${brKey ? \"✓ BR key set\" : \"✗ BRAINSTORM_API_KEY not set\"}`,\n );\n console.log(\n ` Vault: ${process.env.OP_SERVICE_ACCOUNT_TOKEN ? \"✓ 1Password connected\" : \"○ 1Password not configured\"}`,\n );\n\n // Products\n console.log(`\\n Products:`);\n const products = [\n {\n id: \"msp\",\n name: \"BrainstormMSP\",\n url: process.env.BRAINSTORM_MSP_URL ?? \"https://brainstormmsp.ai\",\n key: \"BRAINSTORM_MSP_API_KEY\",\n },\n {\n id: \"br\",\n name: \"BrainstormRouter\",\n url:\n process.env.BRAINSTORM_BR_URL ?? \"https://api.brainstormrouter.com\",\n key: \"BRAINSTORM_API_KEY\",\n },\n {\n id: \"gtm\",\n name: \"BrainstormGTM\",\n url: process.env.BRAINSTORM_GTM_URL ?? \"https://catsfeet.com\",\n key: \"BRAINSTORM_GTM_API_KEY\",\n },\n {\n id: \"vm\",\n name: \"BrainstormVM\",\n url: process.env.BRAINSTORM_VM_URL ?? \"https://vm.brainstorm.co\",\n key: \"BRAINSTORM_VM_API_KEY\",\n },\n {\n id: \"shield\",\n name: \"BrainstormShield\",\n url:\n process.env.BRAINSTORM_SHIELD_URL ?? \"https://shield.brainstorm.co\",\n key: \"BRAINSTORM_SHIELD_API_KEY\",\n },\n ];\n\n let totalTools = 0;\n for (const p of products) {\n try {\n const start = Date.now();\n const res = await fetch(`${p.url}/health`, {\n signal: AbortSignal.timeout(5000),\n });\n const latency = Date.now() - start;\n if (res.ok) {\n const health = (await res.json()) as any;\n let toolCount = 0;\n const apiKey = process.env[p.key];\n if (apiKey) {\n try {\n const toolsRes = await fetch(`${p.url}/api/v1/god-mode/tools`, {\n headers: { Authorization: `Bearer ${apiKey}` },\n signal: AbortSignal.timeout(5000),\n });\n if (toolsRes.ok) {\n const data = (await toolsRes.json()) as any;\n toolCount = data.tool_count ?? data.tools?.length ?? 0;\n totalTools += toolCount;\n }\n } catch {}\n }\n console.log(\n ` ● ${p.name.padEnd(20)} ${String(toolCount).padStart(2)} tools ${p.url.padEnd(35)} ${latency}ms ${health.status ?? \"ok\"}`,\n );\n } else {\n console.log(\n ` ○ ${p.name.padEnd(20)} — tools ${p.url.padEnd(35)} — ${res.status}`,\n );\n }\n } catch {\n console.log(\n ` ○ ${p.name.padEnd(20)} — tools ${p.url.padEnd(35)} — offline`,\n );\n }\n }\n\n // MCP\n const { existsSync } = await import(\"node:fs\");\n const { join } = await import(\"node:path\");\n const { homedir } = await import(\"node:os\");\n const mcpPath = join(homedir(), \".claude\", \"mcp.json\");\n let mcpConfigured = false;\n if (existsSync(mcpPath)) {\n try {\n const mcp = JSON.parse(\n (await import(\"node:fs\")).readFileSync(mcpPath, \"utf-8\"),\n );\n mcpConfigured = !!mcp.mcpServers?.brainstorm;\n } catch {}\n }\n console.log(\n `\\n MCP: ${mcpConfigured ? \"✓ brainstorm MCP server configured\" : \"○ not configured (run brainstorm setup)\"}`,\n );\n\n console.log(`\\n ${totalTools} tools available across ecosystem.`);\n console.log();\n });\n\n// ── Serve Command ────────────────────────────────────────────────\n\nprogram\n .command(\"serve\")\n .description(\n \"Start the Brainstorm control plane HTTP API server (God Mode over HTTP)\",\n )\n .option(\"--port <port>\", \"Port to listen on\", \"8000\")\n .option(\"--host <host>\", \"Host to bind to\", \"127.0.0.1\")\n .option(\"--cors\", \"Enable CORS for dashboard access\")\n .action(async (opts: { port: string; host: string; cors?: boolean }) => {\n const { createServer } = await import(\"node:http\");\n const { randomUUID } = await import(\"node:crypto\");\n const {\n connectGodMode,\n createProductConnectors,\n listChangeSets,\n approveChangeSet,\n rejectChangeSet,\n verifyEvent,\n verifyJWT,\n extractBearerToken,\n setAuditPersister,\n } = await import(\"@brainst0rm/godmode\");\n const { ChangeSetLogRepository } = await import(\"@brainst0rm/db\");\n const config = loadConfig();\n const port = parseInt(opts.port);\n const host = opts.host;\n\n console.log(`\\n ══════════════════════════════════════════════════`);\n console.log(` brainstorm serve — Control Plane API`);\n console.log(` ══════════════════════════════════════════════════\\n`);\n\n // ── Boot: resolve keys from env only (non-interactive) ─────\n const envKeys = new Map<string, string>();\n for (const name of PROVIDER_KEY_NAMES) {\n const val = process.env[name];\n if (val) envKeys.set(name, val);\n }\n const resolvedKeys: ResolvedKeys = {\n get: (name: string) => envKeys.get(name) ?? null,\n };\n const registry = await createProviderRegistry(config, resolvedKeys);\n const db = getDb();\n\n // Wire audit persistence — changeset executions go to SQLite\n const csLogRepo = new ChangeSetLogRepository(db);\n setAuditPersister((entry) => {\n csLogRepo.log({\n changesetId: entry.changesetId,\n connector: entry.connector,\n action: entry.action,\n description: entry.description,\n riskScore: entry.riskScore,\n status: entry.status,\n changesJson: entry.changesJson,\n simulationJson: entry.simulationJson,\n rollbackJson: entry.rollbackJson,\n createdAt: entry.createdAt,\n executedAt: entry.executedAt,\n sessionId: null,\n });\n });\n\n const costTracker = new CostTracker(db, config.budget);\n const tools = createDefaultToolRegistry();\n const { frontmatter } = buildSystemPrompt(process.cwd());\n const router = new BrainstormRouter(\n config,\n registry,\n costTracker,\n frontmatter,\n );\n\n // ── Boot: connect God Mode connectors (generic, config-driven) ─\n const defaultConnectors: Record<string, any> = {\n msp: {\n enabled: true,\n baseUrl: process.env.BRAINSTORM_MSP_URL ?? \"https://brainstormmsp.ai\",\n apiKeyName: \"BRAINSTORM_MSP_API_KEY\",\n },\n };\n const mergedGmConfig = {\n ...config.godmode,\n connectors: { ...defaultConnectors, ...config.godmode.connectors },\n };\n const connectors = await createProductConnectors(mergedGmConfig);\n const godmode = await connectGodMode(tools, mergedGmConfig, connectors);\n\n console.log(\n ` God Mode: ${godmode.connectedSystems.length} systems connected, ${godmode.totalTools} tools`,\n );\n for (const sys of godmode.connectedSystems) {\n console.log(\n ` ✓ ${sys.displayName} (${sys.toolCount} tools, ${sys.latencyMs}ms)`,\n );\n }\n for (const err of godmode.errors) {\n console.log(` ✗ ${err.name}: ${err.error}`);\n }\n\n // ── Helpers ────────────────────────────────────────────────\n\n function json(res: any, status: number, body: unknown): void {\n const payload = JSON.stringify(body);\n res.writeHead(status, {\n \"Content-Type\": \"application/json\",\n ...(opts.cors\n ? {\n \"Access-Control-Allow-Origin\": \"*\",\n \"Access-Control-Allow-Methods\": \"GET, POST, OPTIONS\",\n \"Access-Control-Allow-Headers\": \"Content-Type, Authorization\",\n }\n : {}),\n });\n res.end(payload);\n }\n\n function envelope<T>(data: T): {\n ok: true;\n data: T;\n request_id: string;\n timestamp: string;\n } {\n return {\n ok: true,\n data,\n request_id: randomUUID(),\n timestamp: new Date().toISOString(),\n };\n }\n\n function errorResponse(res: any, status: number, message: string): void {\n json(res, status, {\n ok: false,\n error: message,\n request_id: randomUUID(),\n timestamp: new Date().toISOString(),\n });\n }\n\n async function readBody(req: any): Promise<string> {\n const chunks: Buffer[] = [];\n for await (const chunk of req) chunks.push(chunk);\n return Buffer.concat(chunks).toString(\"utf-8\");\n }\n\n // ── All tools flattened for the /tools endpoint ────────────\n const allTools = tools.listTools();\n\n // ── HTTP Server ────────────────────────────────────────────\n\n const server = createServer(async (req, res) => {\n const url = new URL(req.url ?? \"/\", `http://${req.headers.host}`);\n const path = url.pathname;\n const method = req.method ?? \"GET\";\n\n // CORS preflight\n if (method === \"OPTIONS\" && opts.cors) {\n res.writeHead(204, {\n \"Access-Control-Allow-Origin\": \"*\",\n \"Access-Control-Allow-Methods\": \"GET, POST, OPTIONS\",\n \"Access-Control-Allow-Headers\": \"Content-Type, Authorization\",\n \"Access-Control-Max-Age\": \"86400\",\n });\n res.end();\n return;\n }\n\n try {\n // ── Health (no auth) ────────────────────────────────────\n if (path === \"/health\" && method === \"GET\") {\n json(res, 200, {\n status: \"healthy\",\n version: CLI_VERSION,\n uptime_seconds: Math.floor(process.uptime()),\n god_mode: {\n connected: godmode.connectedSystems.length,\n tools: godmode.totalTools,\n },\n });\n return;\n }\n\n // ── Auth gate for /api/* routes ────────────────────────\n const jwtSecret = process.env.SUPABASE_JWT_SECRET;\n let tenantId: string | undefined;\n\n if (path.startsWith(\"/api/\")) {\n if (!jwtSecret) {\n // No JWT secret configured — allow unauthenticated access\n // (development mode). Log a warning on first request.\n } else {\n const token = extractBearerToken(\n req.headers.authorization as string | undefined,\n );\n if (!token) {\n errorResponse(res, 401, \"Missing Authorization header\");\n return;\n }\n const auth = verifyJWT(token, jwtSecret);\n if (!auth.authenticated) {\n errorResponse(res, 401, auth.error ?? \"Authentication failed\");\n return;\n }\n tenantId = auth.payload?.platform_tenant_id;\n }\n }\n\n // ── Products ────────────────────────────────────────────\n if (path === \"/api/v1/products\" && method === \"GET\") {\n const products = godmode.connectedSystems.map((sys) => ({\n product: sys.name,\n display_name: sys.displayName,\n status: \"healthy\" as const,\n latency_ms: sys.latencyMs,\n tool_count: sys.toolCount,\n capabilities: sys.capabilities,\n last_checked: new Date().toISOString(),\n }));\n json(res, 200, envelope(products));\n return;\n }\n\n // ── Tools ───────────────────────────────────────────────\n if (path === \"/api/v1/tools\" && method === \"GET\") {\n json(res, 200, envelope(allTools));\n return;\n }\n\n // ── Execute Tool ────────────────────────────────────────\n if (path === \"/api/v1/tools/execute\" && method === \"POST\") {\n const body = JSON.parse(await readBody(req));\n const { tool: toolName, params } = body;\n\n if (!toolName) {\n errorResponse(res, 400, \"Missing 'tool' field\");\n return;\n }\n\n const tool = tools.get(toolName);\n if (!tool) {\n errorResponse(res, 404, `Tool '${toolName}' not found`);\n return;\n }\n\n try {\n const result = await tool.execute(params ?? {});\n json(\n res,\n 200,\n envelope({\n tool: toolName,\n result,\n executed_at: new Date().toISOString(),\n }),\n );\n } catch (err) {\n const msg = err instanceof Error ? err.message : String(err);\n errorResponse(res, 500, `Tool execution failed: ${msg}`);\n }\n return;\n }\n\n // ── ChangeSets ──────────────────────────────────────────\n if (path === \"/api/v1/changesets\" && method === \"GET\") {\n json(res, 200, envelope(listChangeSets()));\n return;\n }\n\n // ── Approve ChangeSet ───────────────────────────────────\n const approveMatch = path.match(\n /^\\/api\\/v1\\/changesets\\/([^/]+)\\/approve$/,\n );\n if (approveMatch && method === \"POST\") {\n const result = await approveChangeSet(approveMatch[1], \"user\");\n json(res, result.success ? 200 : 400, envelope(result));\n return;\n }\n\n // ── Reject ChangeSet ────────────────────────────────────\n const rejectMatch = path.match(\n /^\\/api\\/v1\\/changesets\\/([^/]+)\\/reject$/,\n );\n if (rejectMatch && method === \"POST\") {\n const result = rejectChangeSet(rejectMatch[1]);\n json(res, result.success ? 200 : 400, envelope(result));\n return;\n }\n\n // ── Audit Trail (tool calls) ──────────────────────────────\n if (path === \"/api/v1/audit\" && method === \"GET\") {\n const limit = parseInt(url.searchParams.get(\"limit\") ?? \"50\");\n const offset = parseInt(url.searchParams.get(\"offset\") ?? \"0\");\n try {\n const rows = db\n .prepare(\n `SELECT * FROM audit_log ORDER BY created_at DESC LIMIT ? OFFSET ?`,\n )\n .all(limit, offset);\n json(res, 200, envelope({ entries: rows, limit, offset }));\n } catch {\n json(res, 200, envelope({ entries: [], limit, offset }));\n }\n return;\n }\n\n // ── Audit Trail (God Mode changesets) ───────────────────\n if (path === \"/api/v1/audit/changesets\" && method === \"GET\") {\n const { ChangeSetLogRepository } = await import(\"@brainst0rm/db\");\n const csLog = new ChangeSetLogRepository(db);\n const limit = parseInt(url.searchParams.get(\"limit\") ?? \"50\");\n const offset = parseInt(url.searchParams.get(\"offset\") ?? \"0\");\n const connector = url.searchParams.get(\"connector\");\n const entries = connector\n ? csLog.byConnector(connector, limit)\n : csLog.recent(limit, offset);\n json(\n res,\n 200,\n envelope({\n entries,\n total: csLog.count(),\n limit,\n offset,\n }),\n );\n return;\n }\n\n // ── Platform Events (receive) ───────────────────────────\n if (path === \"/api/v1/platform/events\" && method === \"POST\") {\n const body = JSON.parse(await readBody(req));\n const masterSecret = process.env.BRAINSTORM_PLATFORM_SECRET;\n\n if (!masterSecret) {\n errorResponse(res, 503, \"Platform secret not configured\");\n return;\n }\n\n if (!verifyEvent(body, masterSecret)) {\n errorResponse(res, 401, \"Invalid event signature\");\n return;\n }\n\n // Log the verified event\n console.log(\n ` [event] ${body.type} from ${body.product} (tenant: ${body.tenant_id})`,\n );\n json(res, 200, envelope({ received: true, event_id: body.id }));\n return;\n }\n\n // ── Chat (non-streaming) ────────────────────────────────\n if (path === \"/api/v1/chat\" && method === \"POST\") {\n const body = JSON.parse(await readBody(req));\n const { message } = body;\n\n if (!message) {\n errorResponse(res, 400, \"Missing 'message' field\");\n return;\n }\n\n const sessionManager = new SessionManager(db);\n const session = sessionManager.start(process.cwd());\n const { prompt: sysPrompt, segments: sysSegments } =\n buildSystemPrompt(process.cwd());\n const gmPromptText = godmode.promptSegment?.text ?? \"\";\n const fullSystemPrompt = sysPrompt + gmPromptText;\n\n const messages = [{ role: \"user\" as const, content: message }];\n let finalText = \"\";\n let totalCost = 0;\n\n for await (const event of runAgentLoop(messages, {\n config,\n registry,\n router,\n costTracker,\n tools,\n sessionId: session.id,\n projectPath: process.cwd(),\n systemPrompt: fullSystemPrompt,\n systemSegments: sysSegments,\n permissionCheck: () => \"allow\" as const,\n middleware: createDefaultMiddlewarePipeline(process.cwd()),\n })) {\n if (event.type === \"text-delta\") {\n finalText += event.delta;\n }\n if (event.type === \"done\") {\n totalCost = event.totalCost;\n }\n }\n\n json(\n res,\n 200,\n envelope({\n response: finalText,\n session_id: session.id,\n cost: totalCost,\n }),\n );\n return;\n }\n\n // ── Chat Stream (SSE) ───────────────────────────────────\n if (path === \"/api/v1/chat/stream\" && method === \"POST\") {\n const body = JSON.parse(await readBody(req));\n const { message } = body;\n\n if (!message) {\n errorResponse(res, 400, \"Missing 'message' field\");\n return;\n }\n\n res.writeHead(200, {\n \"Content-Type\": \"text/event-stream\",\n \"Cache-Control\": \"no-cache\",\n Connection: \"keep-alive\",\n ...(opts.cors ? { \"Access-Control-Allow-Origin\": \"*\" } : {}),\n });\n\n const sessionManager = new SessionManager(db);\n const session = sessionManager.start(process.cwd());\n const { prompt: sysPrompt, segments: sysSegments } =\n buildSystemPrompt(process.cwd());\n const gmPromptText = godmode.promptSegment?.text ?? \"\";\n const fullSystemPrompt = sysPrompt + gmPromptText;\n\n const messages = [{ role: \"user\" as const, content: message }];\n\n for await (const event of runAgentLoop(messages, {\n config,\n registry,\n router,\n costTracker,\n tools,\n sessionId: session.id,\n projectPath: process.cwd(),\n systemPrompt: fullSystemPrompt,\n systemSegments: sysSegments,\n permissionCheck: () => \"allow\" as const,\n middleware: createDefaultMiddlewarePipeline(process.cwd()),\n })) {\n res.write(`data: ${JSON.stringify(event)}\\n\\n`);\n if (event.type === \"done\" || event.type === \"error\") break;\n }\n\n res.write(\"data: [DONE]\\n\\n\");\n res.end();\n return;\n }\n\n // ── 404 ─────────────────────────────────────────────────\n errorResponse(res, 404, `Not found: ${method} ${path}`);\n } catch (err) {\n const msg = err instanceof Error ? err.message : String(err);\n console.error(` [serve] Error: ${msg}`);\n errorResponse(res, 500, msg);\n }\n });\n\n server.listen(port, host, () => {\n console.log(`\\n ──────────────────────────────────────────────────`);\n console.log(` API server listening on http://${host}:${port}`);\n console.log();\n console.log(` Endpoints:`);\n console.log(` GET /health Health check`);\n console.log(\n ` GET /api/v1/products Connected products`,\n );\n console.log(\n ` GET /api/v1/tools All God Mode tools`,\n );\n console.log(` POST /api/v1/tools/execute Execute a tool`);\n console.log(\n ` GET /api/v1/changesets Pending ChangeSets`,\n );\n console.log(\n ` POST /api/v1/changesets/:id/approve Approve + execute`,\n );\n console.log(\n ` POST /api/v1/changesets/:id/reject Reject a ChangeSet`,\n );\n console.log(` GET /api/v1/audit Audit trail`);\n console.log(\n ` POST /api/v1/platform/events Receive signed events`,\n );\n console.log(\n ` POST /api/v1/chat Natural language query`,\n );\n console.log(\n ` POST /api/v1/chat/stream SSE streaming chat`,\n );\n console.log();\n });\n\n // Keep alive — SIGINT/SIGTERM handled by the global handlers\n await new Promise(() => {});\n });\n\n// ── Chat Command ──────────────────────────────────────────────────\n\nprogram\n .command(\"chat\", { isDefault: true })\n .description(\"Start an interactive chat session\")\n .option(\"--simple\", \"Use simple readline interface instead of TUI\")\n .option(\n \"--daemon\",\n \"Daemon mode — model-driven tick loop (requires --simple for MVP)\",\n )\n .option(\"--continue\", \"Resume the most recent session\")\n .option(\"--resume <id>\", \"Resume a specific session by ID\")\n .option(\"--fork <id>\", \"Fork a session (copy history, new session)\")\n .option(\"--lfg\", \"Full auto mode — skip all permission confirmations\")\n .option(\n \"--strategy <name>\",\n \"Routing strategy: cost-first, quality-first, combined, capability\",\n )\n .option(\"--verbose-routing\", \"Print routing decisions to stderr\")\n .option(\n \"--fast\",\n \"Fast startup — skip provider discovery, MCP connections, and eval probes\",\n )\n .action(\n async (opts: {\n simple?: boolean;\n daemon?: boolean;\n continue?: boolean;\n resume?: string;\n fork?: string;\n lfg?: boolean;\n strategy?: string;\n verboseRouting?: boolean;\n fast?: boolean;\n }) => {\n const config = loadConfig();\n\n // --daemon requires --simple for MVP\n if (opts.daemon && !opts.simple) {\n console.error(\n \" Daemon mode requires --simple for MVP. Run: brainstorm chat --simple --daemon\",\n );\n process.exit(1);\n }\n\n // --lfg: full auto mode, skip all permission confirmations\n if (opts.lfg) {\n config.general.defaultPermissionMode = \"auto\";\n }\n\n // --fast: skip heavy initialization for <200ms startup\n if (opts.fast) {\n (config.general as any).skipProviderDiscovery = true;\n (config.general as any).skipEvalProbes = true;\n }\n\n // Boot Phase A: sync initialization (instant)\n const db = getDb();\n const projectPath = process.cwd();\n const tools = createDefaultToolRegistry({ daemon: opts.daemon });\n configureSandbox(\n config.shell.sandbox as any,\n projectPath,\n config.shell.maxOutputBytes,\n config.shell.containerImage,\n config.shell.containerTimeout,\n );\n const permissionManager = new PermissionManager(\n config.general.defaultPermissionMode as any,\n config.permissions,\n );\n let currentOutputStyle: OutputStyle =\n (config.general.outputStyle as OutputStyle) ?? \"concise\";\n let currentRole: string | undefined;\n const sessionManager = new SessionManager(db);\n const middleware = createDefaultMiddlewarePipeline(projectPath);\n\n // Boot Phase B: async key resolution runs in parallel with system prompt build\n const [resolvedKeys, promptResult] = await Promise.all([\n resolveProviderKeys(),\n Promise.resolve(buildSystemPrompt(projectPath, currentOutputStyle)),\n ]);\n let {\n prompt: systemPrompt,\n segments: systemSegments,\n frontmatter,\n } = promptResult;\n // Tool awareness goes in the cacheable zone (stable within session)\n const toolSection = buildToolAwarenessSection(tools.listTools());\n systemPrompt += toolSection;\n if (systemSegments.length > 0) {\n systemSegments[0] = {\n text: systemSegments[0].text + toolSection,\n cacheable: true,\n };\n }\n const resolvedBRKey =\n resolvedKeys.get(\"BRAINSTORM_API_KEY\") ?? getBrainstormApiKey();\n const isCommunityTier = isCommunityKey(resolvedBRKey);\n if (resolvedBRKey) process.env._BR_RESOLVED_KEY = resolvedBRKey;\n\n // Boot Phase C: provider registry + MCP connections in parallel\n const [registry] = await Promise.all([\n createProviderRegistry(config, resolvedKeys),\n opts.fast\n ? Promise.resolve()\n : connectMCPServers(\n tools,\n config,\n resolvedKeys.get(\"BRAINSTORM_API_KEY\"),\n ),\n ]);\n\n // Boot Phase D: final assembly (depends on everything above)\n const costTracker = new CostTracker(db, config.budget);\n const routingOutcomeRepo = new RoutingOutcomeRepository(db);\n const historicalStats = routingOutcomeRepo.loadAggregated();\n const router = new BrainstormRouter(\n config,\n registry,\n costTracker,\n frontmatter,\n historicalStats,\n );\n // Paid keys or direct provider keys get quality-first by default.\n // Community tier without own keys stays on BR server-side routing.\n const hasOwnKeys =\n !!resolvedKeys.get(\"DEEPSEEK_API_KEY\") ||\n !!resolvedKeys.get(\"ANTHROPIC_API_KEY\") ||\n !!resolvedKeys.get(\"OPENAI_API_KEY\") ||\n !!resolvedKeys.get(\"MOONSHOT_API_KEY\") ||\n !!resolvedKeys.get(\"GOOGLE_GENERATIVE_AI_API_KEY\");\n if (opts.strategy) {\n router.setStrategy(opts.strategy as any);\n } else if (\n (!isCommunityTier || hasOwnKeys) &&\n router.getActiveStrategy() !== \"capability\"\n ) {\n router.setStrategy(\"quality-first\");\n }\n\n // Register the subagent tool (model can spawn focused subagents)\n const subagentTool = createSubagentTool({\n config,\n registry,\n router,\n costTracker,\n tools,\n projectPath,\n permissionCheck: (name, perm) => permissionManager.check(name, perm),\n containerIsolation: config.shell.sandbox === \"container\",\n parentSegments: systemSegments,\n });\n tools.register(subagentTool);\n\n // Boot Phase E: God Mode connectors (parallel, non-blocking)\n let godModeResult: Awaited<\n ReturnType<typeof import(\"@brainst0rm/godmode\").connectGodMode>\n > | null = null;\n // Auto-enable God Mode when any connector key is present in env\n const hasAnyConnectorKey = !!(\n process.env.BRAINSTORM_MSP_API_KEY ||\n process.env.BRAINSTORM_EMAIL_API_KEY ||\n process.env.BRAINSTORM_VM_API_KEY ||\n process.env._GM_MSP_KEY ||\n process.env._GM_EMAIL_KEY ||\n process.env._GM_VM_KEY\n );\n const godmodeEnabled = config.godmode.enabled || hasAnyConnectorKey;\n\n if (godmodeEnabled && !opts.fast) {\n try {\n const {\n connectGodMode,\n createProductConnectors,\n setAuditPersister: setAuditPersisterChat,\n } = await import(\"@brainst0rm/godmode\");\n const { ChangeSetLogRepository: CSLogChat } =\n await import(\"@brainst0rm/db\");\n\n // Wire audit persistence for chat sessions\n const csLogChat = new CSLogChat(db);\n setAuditPersisterChat((entry) => {\n csLogChat.log({\n changesetId: entry.changesetId,\n connector: entry.connector,\n action: entry.action,\n description: entry.description,\n riskScore: entry.riskScore,\n status: entry.status,\n changesJson: entry.changesJson,\n simulationJson: entry.simulationJson,\n rollbackJson: entry.rollbackJson,\n createdAt: entry.createdAt,\n executedAt: entry.executedAt,\n sessionId: null,\n });\n });\n\n const defaultConnectors: Record<string, any> = {\n msp: {\n enabled: true,\n baseUrl:\n process.env.BRAINSTORM_MSP_URL ?? \"https://brainstormmsp.ai\",\n apiKeyName: \"BRAINSTORM_MSP_API_KEY\",\n },\n };\n const mergedGmConfig = {\n ...config.godmode,\n connectors: { ...defaultConnectors, ...config.godmode.connectors },\n };\n const activeConnectors =\n await createProductConnectors(mergedGmConfig);\n\n godModeResult = await connectGodMode(\n tools,\n mergedGmConfig,\n activeConnectors,\n );\n\n if (godModeResult.connectedSystems.length > 0) {\n process.stderr.write(\n `[godmode] Connected: ${godModeResult.connectedSystems.map((s) => s.displayName).join(\", \")} (${godModeResult.totalTools} tools)\\n`,\n );\n // Inject God Mode capabilities into system prompt\n if (godModeResult.promptSegment?.text) {\n systemPrompt += \"\\n\" + godModeResult.promptSegment.text;\n if (systemSegments.length > 0) {\n systemSegments.push(godModeResult.promptSegment);\n }\n }\n }\n } catch (err) {\n process.stderr.write(\n `[godmode] Init failed: ${err instanceof Error ? err.message : String(err)}\\n`,\n );\n }\n }\n\n // Preferred model override — mutable so /model can change it\n // Community tier without direct provider keys: force brainstormrouter/auto\n // If user has their own keys (DEEPSEEK, ANTHROPIC, etc.), let local routing use them\n const hasDirectProviderKeys =\n !!resolvedKeys.get(\"DEEPSEEK_API_KEY\") ||\n !!resolvedKeys.get(\"ANTHROPIC_API_KEY\") ||\n !!resolvedKeys.get(\"OPENAI_API_KEY\") ||\n !!resolvedKeys.get(\"GOOGLE_GENERATIVE_AI_API_KEY\") ||\n !!resolvedKeys.get(\"MOONSHOT_API_KEY\");\n // Default model: Kimi K2.5 when key available, otherwise router decides\n let preferredModelId: string | undefined = resolvedKeys.get(\n \"MOONSHOT_API_KEY\",\n )\n ? \"moonshot/kimi-k2.5\"\n : isCommunityTier && !hasDirectProviderKeys\n ? \"brainstormrouter/auto\"\n : undefined;\n\n // Session management: resume, fork, or start new\n let session: any;\n if (opts.fork) {\n session = sessionManager.fork(opts.fork);\n if (!session) {\n console.error(` Session '${opts.fork}' not found.`);\n process.exit(1);\n }\n console.log(\n ` Forked session ${opts.fork.slice(0, 8)} -> ${session.id.slice(0, 8)}`,\n );\n } else if (opts.resume) {\n session = sessionManager.resume(opts.resume);\n if (!session) {\n console.error(` Session '${opts.resume}' not found.`);\n process.exit(1);\n }\n printResumeSummary(session, sessionManager);\n } else if (opts.continue) {\n if (opts.daemon) {\n // Daemon --continue: resume the last daemon session specifically\n const { SessionRepository: SessRepoResume } =\n await import(\"@brainst0rm/db\");\n const sessRepoResume = new SessRepoResume(db);\n const lastDaemon = sessRepoResume.getLastDaemon(projectPath);\n if (lastDaemon) {\n session = sessionManager.resume(lastDaemon.id);\n if (session) {\n console.log(\n ` Resuming daemon session ${lastDaemon.id.slice(0, 8)} (${lastDaemon.tickCount ?? 0} ticks, $${(lastDaemon.totalCost ?? 0).toFixed(4)})`,\n );\n } else {\n session = sessionManager.start(projectPath);\n }\n } else {\n session = sessionManager.start(projectPath);\n }\n } else {\n session = sessionManager.resumeLatest(projectPath);\n if (!session) {\n session = sessionManager.start(projectPath);\n } else {\n printResumeSummary(session, sessionManager);\n }\n }\n } else {\n session = sessionManager.start(projectPath);\n }\n\n const localCount = registry.models.filter((m) => m.isLocal).length;\n const cloudCount = registry.models.filter((m) => !m.isLocal).length;\n\n if (opts.simple) {\n // Simple readline fallback\n const readline = await import(\"node:readline/promises\");\n const rl = readline.createInterface({\n input: process.stdin,\n output: process.stdout,\n });\n\n console.log(`\\n 🧠 brainstorm v0.1.0`);\n console.log(\n ` Strategy: ${router.getActiveStrategy()} | Models: ${localCount} local, ${cloudCount} cloud`,\n );\n console.log(` Project: ${projectPath}`);\n if (isCommunityTier)\n console.log(\n ` Community tier (5 req/min, cheap models). Set BRAINSTORM_API_KEY for full access.`,\n );\n console.log(\n ` Commands: /quit, /model <id>, /strategy <name>, /compact`,\n );\n if (opts.daemon)\n console.log(\n ` DAEMON MODE: tick every ${config.daemon.tickIntervalMs / 1000}s, max ${config.daemon.maxTicksPerSession} ticks`,\n );\n console.log(` Ctrl+C to interrupt, Ctrl+D to exit.\\n`);\n\n // ── Daemon Mode ──────────────────────────────────────────\n if (opts.daemon) {\n const { DaemonController, DailyLog } =\n await import(\"@brainst0rm/core\");\n const { DailyLogRepository, SessionRepository: SessRepo } =\n await import(\"@brainst0rm/db\");\n\n const sessRepo = new SessRepo(db);\n sessRepo.markDaemon(session.id, config.daemon.tickIntervalMs);\n\n const dailyLogRepo = new DailyLogRepository(db);\n const dailyLog = new DailyLog({\n logDir: config.daemon.dailyLogDir,\n repo: dailyLogRepo,\n sessionId: session.id,\n });\n\n dailyLog.append(\"Daemon session started\", {\n eventType: \"start\",\n });\n\n // Wire scheduler so due tasks appear in tick messages\n const { TriggerRunner } = await import(\"@brainst0rm/scheduler\");\n const triggerRunner = new TriggerRunner(db);\n\n const daemon = new DaemonController({\n config: config.daemon,\n sessionId: session.id,\n projectPath,\n runTick: (tickMessage: string) => {\n sessionManager.addUserMessage(tickMessage);\n return runAgentLoop(sessionManager.getHistory(), {\n config,\n registry,\n router,\n costTracker,\n tools,\n sessionId: session.id,\n projectPath,\n systemPrompt,\n systemSegments,\n compaction: buildCompactionCallbacks(sessionManager),\n permissionCheck: (name: string, perm: any) =>\n permissionManager.check(name, perm),\n preferredModelId,\n middleware,\n routingOutcomeRepo,\n onTurnComplete: (ctx: any) => {\n ctx.turn = sessionManager.incrementTurn();\n ctx.sessionMinutes = sessionManager.getSessionMinutes();\n sessionManager.addTurnContext(ctx);\n },\n });\n },\n getDueTasks: () => triggerRunner.getDueTaskSummaries(),\n getLogSummary: () => {\n const recent = dailyLog.readRecent(10);\n if (recent.length === 0) return \"No recent activity.\";\n return recent\n .map((e) => `[${e.eventType}] ${e.content.slice(0, 100)}`)\n .join(\"\\n\");\n },\n onTickComplete: async (result) => {\n dailyLog.append(\n `${result.toolCalls.length} tools, model=${result.modelUsed}`,\n {\n tickNumber: result.tickNumber,\n eventType: \"tick\",\n cost: result.cost,\n modelId: result.modelUsed,\n },\n );\n sessRepo.updateDaemonState(session.id, {\n tickCount: result.tickNumber,\n lastTickAt: Math.floor(Date.now() / 1000),\n totalCost: costTracker.getSessionCost(),\n });\n },\n });\n\n // Readline for user input preemption\n const readline = await import(\"node:readline/promises\");\n const rl = readline.createInterface({\n input: process.stdin,\n output: process.stdout,\n });\n\n // User input listener — preempts daemon sleep\n const inputLoop = (async () => {\n try {\n while (true) {\n const line = await rl.question(\"\");\n if (!line.trim()) continue;\n if (line.trim() === \"/quit\" || line.trim() === \"/exit\") {\n daemon.stop();\n break;\n }\n if (line.trim() === \"/daemon pause\") {\n daemon.pause();\n console.log(\" [daemon paused]\");\n continue;\n }\n if (line.trim() === \"/daemon resume\") {\n daemon.resume();\n console.log(\" [daemon resumed]\");\n continue;\n }\n if (line.trim() === \"/daemon status\") {\n const s = daemon.getState();\n console.log(\n ` [daemon: ${s.status} | ticks: ${s.tickCount} | cost: $${s.totalCost.toFixed(4)}]`,\n );\n continue;\n }\n if (line.trim() === \"/daemon log\") {\n const todayLog = dailyLog.readToday();\n console.log(todayLog || \" [no daemon log entries today]\");\n continue;\n }\n // Regular user message — inject into daemon\n daemon.injectUserMessage(line.trim());\n }\n } catch {\n // readline closed (Ctrl+D)\n daemon.stop();\n }\n })();\n\n // Ctrl+C stops daemon\n process.on(\"SIGINT\", () => {\n daemon.stop();\n rl.close();\n });\n\n // Run daemon event loop\n for await (const event of daemon.run()) {\n switch (event.type) {\n case \"daemon-tick\":\n process.stderr.write(\n ` [tick #${(event as any).tickNumber} | $${(event as any).cost.toFixed(4)}]\\n`,\n );\n break;\n case \"daemon-sleep\":\n process.stderr.write(\n ` [sleeping ${Math.round((event as any).sleepMs / 1000)}s: ${(event as any).reason}]\\n`,\n );\n break;\n case \"daemon-wake\":\n process.stderr.write(` [wake: ${(event as any).trigger}]\\n`);\n break;\n case \"daemon-stopped\":\n process.stderr.write(\n `\\n [daemon stopped: ${(event as any).tickCount} ticks, $${(event as any).totalCost.toFixed(4)} total]\\n`,\n );\n break;\n case \"text-delta\":\n process.stdout.write(event.delta);\n break;\n case \"tool-call-start\":\n process.stdout.write(`\\n [tool: ${event.toolName}]\\n`);\n break;\n case \"routing\":\n process.stderr.write(`\\r [${event.decision.model.name}]\\n`);\n break;\n case \"done\": {\n const turnCost = event.totalCost - costTracker.getSessionCost();\n process.stdout.write(\n `\\n [$${event.totalCost.toFixed(4)} session]\\n`,\n );\n break;\n }\n case \"error\":\n process.stderr.write(`\\n Error: ${event.error.message}\\n`);\n break;\n }\n }\n\n dailyLog.append(\"Daemon session ended\", {\n eventType: \"stop\",\n });\n await inputLoop;\n rl.close();\n return;\n }\n\n let simpleAbortController: AbortController | null = null;\n\n // First Ctrl-C aborts current operation, second exits\n process.on(\"SIGINT\", () => {\n if (simpleAbortController) {\n simpleAbortController.abort();\n simpleAbortController = null;\n process.stdout.write(\"\\n [interrupted]\\n\\n\");\n } else {\n rl.close();\n process.exit(0);\n }\n });\n\n while (true) {\n const input = await rl.question(\"you > \");\n if (!input.trim()) continue;\n if (input.trim() === \"/quit\" || input.trim() === \"/exit\") break;\n\n // Handle slash commands in simple mode\n if (input.startsWith(\"/\")) {\n const { isSlashCommand, executeSlashCommand } =\n await import(\"../commands/slash.js\");\n if (isSlashCommand(input)) {\n const result = await executeSlashCommand(input, {\n getModel: () => preferredModelId,\n getSessionCost: () => costTracker.getSessionCost(),\n getTokenCount: () => ({\n input: 0,\n output: 0,\n }),\n exit: () => {\n rl.close();\n process.exit(0);\n },\n clearHistory: () => {\n session = sessionManager.start(projectPath);\n },\n setModel: (m) => {\n preferredModelId = m;\n },\n setStrategy: (s) => {\n router.setStrategy(s as any);\n },\n getStrategy: () => router.getActiveStrategy(),\n setMode: (m) => {\n permissionManager.setMode(m as any);\n },\n getMode: () => permissionManager.getMode(),\n setOutputStyle: (s) => {\n currentOutputStyle = s as any;\n const rebuilt = buildSystemPrompt(\n projectPath,\n currentOutputStyle,\n );\n const ts = buildToolAwarenessSection(tools.listTools());\n systemPrompt = rebuilt.prompt + ts;\n // Rebuild segments with tool section in cacheable zone\n systemSegments =\n rebuilt.segments.length > 0\n ? [\n {\n text: rebuilt.segments[0].text + ts,\n cacheable: true,\n },\n ...rebuilt.segments.slice(1),\n ]\n : [{ text: systemPrompt, cacheable: true }];\n },\n getOutputStyle: () => currentOutputStyle,\n getBudget: () => {\n const remaining = costTracker.getRemainingBudget();\n if (remaining === null) return null;\n return {\n remaining,\n limit: config.budget.perSession ?? 0,\n };\n },\n compact: async () => {\n const result = await sessionManager.compact({\n contextWindow: 200000,\n keepRecent: 5,\n });\n console.log(\n ` Compacted: ${result.removed} messages removed (${result.tokensBefore} → ${result.tokensAfter} tokens)`,\n );\n },\n });\n console.log(` ${result}`);\n continue;\n }\n // Unknown slash command — pass to model as regular message\n }\n\n sessionManager.addUserMessage(input);\n let fullResponse = \"\";\n const sessionTotalBefore = costTracker.getSessionCost();\n process.stdout.write(\"\\nbrainstorm > \");\n simpleAbortController = new AbortController();\n\n // Build role tool filter from active role (if any)\n const roleToolFilter =\n currentRole && ROLES[currentRole as RoleId]\n ? {\n allowedTools: ROLES[currentRole as RoleId].allowedTools,\n blockedTools: ROLES[currentRole as RoleId].blockedTools,\n }\n : undefined;\n\n for await (const event of runAgentLoop(sessionManager.getHistory(), {\n config,\n registry,\n router,\n costTracker,\n tools,\n sessionId: session.id,\n projectPath,\n systemPrompt,\n systemSegments,\n compaction: buildCompactionCallbacks(sessionManager),\n signal: simpleAbortController.signal,\n permissionCheck: (name, perm) =>\n permissionManager.check(name, perm),\n preferredModelId,\n middleware,\n roleToolFilter,\n routingOutcomeRepo,\n onTurnComplete: (ctx) => {\n ctx.turn = sessionManager.incrementTurn();\n ctx.sessionMinutes = sessionManager.getSessionMinutes();\n sessionManager.addTurnContext(ctx);\n },\n })) {\n switch (event.type) {\n case \"thinking\": {\n const spinFrames = [\n \"⠋\",\n \"⠙\",\n \"⠹\",\n \"⠸\",\n \"⠼\",\n \"⠴\",\n \"⠦\",\n \"⠧\",\n \"⠇\",\n \"⠏\",\n ];\n const f =\n spinFrames[Math.floor(Date.now() / 100) % spinFrames.length];\n const chatPhases: Record<string, string> = {\n classifying: \"Analyzing...\",\n routing: \"Selecting model...\",\n connecting: \"Connecting...\",\n streaming: \"Streaming...\",\n };\n process.stderr.write(\n `\\r ${f} ${chatPhases[event.phase] ?? event.phase}`,\n );\n break;\n }\n case \"routing\":\n process.stderr.write(`\\r [${event.decision.model.name}]\\n`);\n if (opts.verboseRouting) {\n const d = event.decision;\n process.stderr.write(\n ` routing: strategy=${d.strategy} model=${d.model.id} provider=${d.model.provider} cost=$${d.estimatedCost.toFixed(4)} reason=\"${d.reason}\"\\n`,\n );\n }\n break;\n case \"text-delta\":\n fullResponse += event.delta;\n process.stdout.write(event.delta);\n break;\n case \"tool-call-start\":\n process.stdout.write(`\\n [tool: ${event.toolName}]\\n`);\n break;\n case \"tool-call-result\":\n break; // Tool results are shown by the model's text response\n case \"model-retry\":\n process.stderr.write(\n `\\n [retry: ${event.fromModel} → ${event.toModel}]\\n`,\n );\n break;\n case \"gateway-feedback\": {\n const gw = formatGatewayFeedback(event.feedback);\n if (gw) process.stderr.write(` ${gw}\\n`);\n break;\n }\n case \"context-budget\":\n process.stderr.write(\n ` [${Math.round(event.used / 1000)}k/${Math.round(event.limit / 1000)}k tokens (${event.percent}%)]\\n`,\n );\n break;\n case \"interrupted\":\n process.stdout.write(\"\\n [interrupted]\\n\\n\");\n break;\n case \"done\": {\n const turn = sessionManager.getTurnCount();\n const turnCost = event.totalCost - (sessionTotalBefore ?? 0);\n sessionManager.syncSessionCost(turnCost);\n process.stdout.write(\n `\\n [Turn ${turn}: $${turnCost.toFixed(4)} | Session: $${event.totalCost.toFixed(4)}]\\n\\n`,\n );\n break;\n }\n case \"error\":\n process.stderr.write(`\\n Error: ${event.error.message}\\n\\n`);\n break;\n }\n }\n simpleAbortController = null;\n if (fullResponse) {\n sessionManager.addAssistantMessage(fullResponse);\n sessionManager.flush();\n }\n }\n rl.close();\n return;\n }\n\n // Ink TUI\n const { render } = await import(\"ink\");\n const React = await import(\"react\");\n const { App } = await import(\"../components/App.js\");\n\n let currentAbortController: AbortController | null = null;\n\n function handleSendMessage(text: string) {\n sessionManager.addUserMessage(text);\n currentAbortController = new AbortController();\n // Build role tool filter from active role (if any)\n const roleFilter =\n currentRole && ROLES[currentRole as RoleId]\n ? {\n allowedTools: ROLES[currentRole as RoleId].allowedTools,\n blockedTools: ROLES[currentRole as RoleId].blockedTools,\n }\n : undefined;\n\n const gen = runAgentLoop(sessionManager.getHistory(), {\n config,\n registry,\n router,\n costTracker,\n tools,\n sessionId: session.id,\n projectPath,\n systemPrompt,\n systemSegments,\n compaction: buildCompactionCallbacks(sessionManager),\n signal: currentAbortController.signal,\n permissionCheck: (name, perm) => permissionManager.check(name, perm),\n middleware,\n preferredModelId,\n roleToolFilter: roleFilter,\n routingOutcomeRepo,\n });\n // Wrap to capture assistant message after completion\n return (async function* () {\n let fullResponse = \"\";\n for await (const event of gen) {\n if (event.type === \"text-delta\") fullResponse += event.delta;\n yield event;\n }\n if (fullResponse) {\n sessionManager.addAssistantMessage(fullResponse);\n sessionManager.flush();\n }\n currentAbortController = null;\n })();\n }\n\n function handleAbort() {\n if (currentAbortController) {\n currentAbortController.abort();\n currentAbortController = null;\n }\n }\n\n // Prepare model data for Models mode\n const modelData = registry.models.map((m: any) => ({\n id: m.id,\n name: m.name,\n provider: m.provider,\n qualityTier: m.capabilities?.qualityTier ?? 3,\n speedTier: m.capabilities?.speedTier ?? 2,\n pricing: {\n input: m.pricing?.inputPer1MTokens ?? 0,\n output: m.pricing?.outputPer1MTokens ?? 0,\n },\n status: m.status ?? \"available\",\n }));\n\n const brGateway = createGatewayClient();\n\n render(\n React.createElement(App, {\n strategy: config.general.defaultStrategy,\n modelCount: { local: localCount, cloud: cloudCount },\n onSendMessage: handleSendMessage,\n onAbort: handleAbort,\n models: modelData,\n gateway: brGateway,\n configInfo: {\n strategy: config.general.defaultStrategy,\n permissionMode: config.general.defaultPermissionMode ?? \"confirm\",\n outputStyle: config.general.outputStyle ?? \"concise\",\n sandbox: config.shell?.sandbox ?? \"none\",\n },\n vaultInfo: {\n exists: new BrainstormVault(VAULT_PATH).exists(),\n isOpen: false,\n keyCount: 0,\n keys: [],\n createdAt: null,\n opAvailable: !!process.env.OP_SERVICE_ACCOUNT_TOKEN,\n resolvedKeys: PROVIDER_KEY_NAMES.filter((k) => resolvedKeys.get(k)),\n },\n godModeInfo: godModeResult\n ? {\n connectedSystems: godModeResult.connectedSystems,\n errors: godModeResult.errors,\n totalTools: godModeResult.totalTools,\n }\n : undefined,\n memoryInfo: await (async () => {\n try {\n const { MemoryManager } = await import(\"@brainst0rm/core\");\n const mem = new MemoryManager(projectPath);\n const entries = mem.list();\n const types: Record<string, number> = {};\n for (const e of entries) {\n types[e.type] = (types[e.type] ?? 0) + 1;\n }\n return { localCount: entries.length, types };\n } catch {\n return { localCount: 0, types: {} };\n }\n })(),\n slashCallbacks: {\n setModel: (model: string) => {\n preferredModelId = model;\n },\n setStrategy: (s: string) => {\n router.setStrategy(s as any);\n },\n getStrategy: () => router.getActiveStrategy(),\n setMode: (mode: string) => {\n permissionManager.setMode(mode as any);\n },\n getMode: () => permissionManager.getMode(),\n setOutputStyle: (style: string) => {\n currentOutputStyle = style as OutputStyle;\n const rebuilt = buildSystemPrompt(\n projectPath,\n currentOutputStyle,\n );\n const ts = buildToolAwarenessSection(tools.listTools());\n systemPrompt = rebuilt.prompt + ts;\n systemSegments =\n rebuilt.segments.length > 0\n ? [\n { text: rebuilt.segments[0].text + ts, cacheable: true },\n ...rebuilt.segments.slice(1),\n ]\n : [{ text: systemPrompt, cacheable: true }];\n },\n getOutputStyle: () => currentOutputStyle,\n rebuildSystemPrompt: (basePromptOverride?: string) => {\n const rebuilt = buildSystemPrompt(\n projectPath,\n currentOutputStyle,\n basePromptOverride,\n );\n const ts = buildToolAwarenessSection(tools.listTools());\n systemPrompt = rebuilt.prompt + ts;\n systemSegments =\n rebuilt.segments.length > 0\n ? [\n { text: rebuilt.segments[0].text + ts, cacheable: true },\n ...rebuilt.segments.slice(1),\n ]\n : [{ text: systemPrompt, cacheable: true }];\n },\n getActiveRole: () => currentRole,\n setActiveRole: (role: string | undefined) => {\n currentRole = role;\n },\n getBudget: () => {\n const state = costTracker.getBudgetState();\n if (!state.sessionLimit) return null;\n return {\n remaining: Math.max(0, state.sessionLimit - state.sessionUsed),\n limit: state.sessionLimit,\n };\n },\n compact: async () => {\n // Use the current model's context window, or fall back to 128k\n const models = router.getModels();\n const activeModel = preferredModelId\n ? models.find((m) => m.id === preferredModelId)\n : models[0];\n const contextWindow =\n activeModel?.limits?.contextWindow || 128_000;\n const cb = buildCompactionCallbacks(sessionManager);\n await cb.compact({ contextWindow });\n },\n dream: async () => {\n const { MemoryManager, DREAM_SYSTEM_PROMPT, buildDreamPrompt } =\n await import(\"@brainst0rm/core\");\n const memory = new MemoryManager(projectPath);\n const rawFiles = memory.getRawFiles();\n if (rawFiles.length === 0)\n return \"No memory files to consolidate.\";\n const dreamPrompt = buildDreamPrompt(\n memory.getMemoryDir(),\n rawFiles,\n );\n const result = await spawnSubagent(dreamPrompt, {\n config,\n registry,\n router,\n costTracker,\n tools,\n projectPath,\n type: \"code\",\n systemPrompt: DREAM_SYSTEM_PROMPT,\n maxSteps: 12,\n budgetLimit: 0.5,\n });\n return `Dream complete. ${result.toolCalls.length} tool calls, $${result.cost.toFixed(4)}.\\n${result.text}`;\n },\n vault: async (action: string, args: string) => {\n const vault = new BrainstormVault(VAULT_PATH);\n switch (action) {\n case \"list\":\n case \"ls\": {\n if (!vault.exists())\n return \"No vault found. Run `brainstorm vault init` to create one.\";\n const keys = vault.list();\n if (keys.length === 0)\n return \"Vault is empty (or locked). Keys: none\";\n return `Vault keys (${keys.length}):\\n${keys.map((k) => ` - ${k}`).join(\"\\n\")}`;\n }\n case \"status\": {\n if (!vault.exists()) return \"Vault: not initialized\";\n return `Vault: ${VAULT_PATH}\\nStatus: ${vault.isOpen() ? \"unlocked\" : \"locked\"}\\nKeys: ${vault.list().length}`;\n }\n case \"get\": {\n if (!args) return \"Usage: /vault get <key-name>\";\n const val = vault.get(args);\n if (val === null)\n return `Key '${args}' not found (or vault is locked).`;\n return `${args} = ${val.slice(0, 8)}${\"*\".repeat(Math.max(0, val.length - 8))}`;\n }\n case \"add\":\n case \"set\": {\n return \"Use `brainstorm vault add <name>` from the terminal — requires interactive password input.\";\n }\n case \"remove\":\n case \"rm\":\n case \"delete\": {\n return \"Use `brainstorm vault remove <name>` from the terminal — requires interactive password input.\";\n }\n default:\n return \"Usage: /vault [list|status|get <name>]\\nFor add/remove, use the `brainstorm vault` CLI command.\";\n }\n },\n },\n }),\n );\n },\n );\n\nexport function run() {\n // Initialize Sentry — no-ops if SENTRY_DSN is not set\n initSentry({ release: process.env.npm_package_version });\n\n // Graceful shutdown: stop Docker sandbox, close DB, flush Sentry\n const cleanup = () => {\n try {\n stopDockerSandbox();\n } catch {\n // Best effort — container may already be stopped\n }\n try {\n closeDb();\n } catch {\n // Best effort — DB may already be closed\n }\n flushSentry(1500).catch(() => {});\n };\n\n // Catch unhandled errors and report to Sentry\n process.on(\"uncaughtException\", (err) => {\n captureError(err, { source: \"uncaughtException\" });\n cleanup();\n process.exit(1);\n });\n\n process.on(\"unhandledRejection\", (reason) => {\n const err = reason instanceof Error ? reason : new Error(String(reason));\n captureError(err, { source: \"unhandledRejection\" });\n });\n\n process.on(\"SIGTERM\", () => {\n cleanup();\n process.exit(0);\n });\n\n process.on(\"SIGINT\", () => {\n cleanup();\n process.exit(0);\n });\n\n process.on(\"exit\", () => {\n cleanup();\n });\n\n program.parse();\n}\n\nrun();\n","import { existsSync, readFileSync } from 'node:fs';\nimport { join, basename } from 'node:path';\nimport { createConnection } from 'node:net';\n\nexport interface ProjectDetection {\n name: string;\n type: 'monorepo' | 'app' | 'cli' | 'library' | 'api' | null;\n language: 'typescript' | 'python' | 'rust' | 'go' | null;\n framework: 'nextjs' | 'hono' | 'fastapi' | 'express' | 'none' | null;\n runtime: 'node' | 'python' | 'go' | 'bun' | 'deno' | null;\n\n // Existing files\n hasGit: boolean;\n hasStormMd: boolean;\n hasBrainstormMd: boolean;\n hasClaudeMd: boolean;\n hasGitignore: boolean;\n hasGithubWorkflows: boolean;\n hasEnvExample: boolean;\n hasPrettierrc: boolean;\n hasBrainstormToml: boolean;\n\n // Package info\n packageName: string | null;\n scripts: Record<string, string>;\n\n // Local model runtimes\n localModels: Array<'ollama' | 'lmstudio' | 'llamacpp'>;\n}\n\n/**\n * Scan the project directory and detect what exists.\n * Zero interaction — purely reads filesystem and probes ports.\n */\nexport async function detectProject(projectDir: string): Promise<ProjectDetection> {\n const detection: ProjectDetection = {\n name: basename(projectDir),\n type: null,\n language: null,\n framework: null,\n runtime: null,\n hasGit: existsSync(join(projectDir, '.git')),\n hasStormMd: existsSync(join(projectDir, 'STORM.md')),\n hasBrainstormMd: existsSync(join(projectDir, 'BRAINSTORM.md')),\n hasClaudeMd: existsSync(join(projectDir, 'CLAUDE.md')),\n hasGitignore: existsSync(join(projectDir, '.gitignore')),\n hasGithubWorkflows: existsSync(join(projectDir, '.github', 'workflows')),\n hasEnvExample: existsSync(join(projectDir, '.env.example')),\n hasPrettierrc: existsSync(join(projectDir, '.prettierrc')),\n hasBrainstormToml: existsSync(join(projectDir, 'brainstorm.toml')),\n packageName: null,\n scripts: {},\n localModels: [],\n };\n\n // Read package.json\n const pkgPath = join(projectDir, 'package.json');\n if (existsSync(pkgPath)) {\n try {\n const pkg = JSON.parse(readFileSync(pkgPath, 'utf-8'));\n detection.packageName = pkg.name ?? null;\n if (detection.packageName) detection.name = detection.packageName;\n detection.scripts = pkg.scripts ?? {};\n detection.language = 'typescript'; // Node project\n detection.runtime = 'node';\n\n // Detect monorepo\n if (pkg.workspaces || existsSync(join(projectDir, 'turbo.json')) || existsSync(join(projectDir, 'pnpm-workspace.yaml'))) {\n detection.type = 'monorepo';\n }\n\n // Detect framework from deps\n const allDeps = { ...pkg.dependencies, ...pkg.devDependencies };\n if (allDeps?.next) detection.framework = 'nextjs';\n else if (allDeps?.hono) detection.framework = 'hono';\n else if (allDeps?.express) detection.framework = 'express';\n\n // Detect CLI\n if (pkg.bin) detection.type = detection.type ?? 'cli';\n\n // Detect library\n if (pkg.exports || pkg.main) detection.type = detection.type ?? 'library';\n } catch { /* invalid package.json */ }\n }\n\n // Detect framework from config files\n if (!detection.framework) {\n if (existsSync(join(projectDir, 'next.config.ts')) || existsSync(join(projectDir, 'next.config.js')) || existsSync(join(projectDir, 'next.config.mjs'))) {\n detection.framework = 'nextjs';\n } else if (existsSync(join(projectDir, 'vite.config.ts')) || existsSync(join(projectDir, 'vite.config.js'))) {\n detection.framework = 'none'; // Vite but no specific framework signal\n }\n }\n\n // Detect Python\n if (existsSync(join(projectDir, 'pyproject.toml')) || existsSync(join(projectDir, 'requirements.txt'))) {\n detection.language = 'python';\n detection.runtime = 'python';\n // Check for FastAPI\n try {\n const content = readFileSync(join(projectDir, 'requirements.txt'), 'utf-8');\n if (content.includes('fastapi')) detection.framework = 'fastapi';\n } catch { /* no requirements.txt */ }\n detection.type = detection.type ?? 'api';\n }\n\n // Detect Rust\n if (existsSync(join(projectDir, 'Cargo.toml'))) {\n detection.language = 'rust';\n detection.type = detection.type ?? 'cli';\n }\n\n // Detect Go\n if (existsSync(join(projectDir, 'go.mod'))) {\n detection.language = 'go';\n detection.runtime = 'go';\n detection.type = detection.type ?? 'api';\n }\n\n // Default type\n detection.type = detection.type ?? 'app';\n\n // Probe local model runtimes (non-blocking, fast timeout)\n const probes = await Promise.allSettled([\n probePort(11434).then((ok) => ok ? 'ollama' as const : null),\n probePort(1234).then((ok) => ok ? 'lmstudio' as const : null),\n probePort(8080).then((ok) => ok ? 'llamacpp' as const : null),\n ]);\n\n for (const result of probes) {\n if (result.status === 'fulfilled' && result.value) {\n detection.localModels.push(result.value);\n }\n }\n\n return detection;\n}\n\n/** Probe a localhost port with a 500ms timeout. */\nfunction probePort(port: number): Promise<boolean> {\n return new Promise((resolve) => {\n const socket = createConnection({ host: '127.0.0.1', port, timeout: 500 });\n socket.on('connect', () => { socket.destroy(); resolve(true); });\n socket.on('error', () => resolve(false));\n socket.on('timeout', () => { socket.destroy(); resolve(false); });\n });\n}\n","import { createInterface } from 'node:readline/promises';\nimport { stdin as input, stdout as output } from 'node:process';\nimport type { ProjectDetection } from './detect.js';\nimport type { InitChoices } from './templates.js';\n\n/**\n * Interactive prompt flow for brainstorm init.\n * Uses readline/promises (same as chat --simple, no new deps).\n */\nexport async function runPrompts(detection: ProjectDetection): Promise<InitChoices | null> {\n const rl = createInterface({ input, output });\n\n try {\n console.log('\\n brainstorm init\\n');\n\n // Show detection results\n const detected: string[] = [];\n if (detection.type) detected.push(`${detection.language ?? 'unknown'} ${detection.type}`);\n if (detection.framework && detection.framework !== 'none') detected.push(`framework: ${detection.framework}`);\n if (detection.localModels.length > 0) detected.push(`local models: ${detection.localModels.join(', ')}`);\n\n if (detected.length > 0) {\n console.log(` Detected: ${detected.join(' | ')}\\n`);\n }\n\n const name = await ask(rl, 'Project name', detection.name);\n const type = await askChoice(rl, 'Project type', ['monorepo', 'app', 'cli', 'library', 'api'], detection.type ?? 'app');\n const language = await askChoice(rl, 'Language', ['typescript', 'python', 'rust', 'go', 'multi'], detection.language ?? 'typescript');\n const framework = await askChoice(rl, 'Framework', ['nextjs', 'hono', 'fastapi', 'express', 'none'], detection.framework ?? 'none');\n const runtime = language === 'python' ? 'python' : language === 'go' ? 'go' : (detection.runtime ?? 'node') as InitChoices['runtime'];\n const deploy = await askChoice(rl, 'Deploy target', ['vercel', 'do-app-platform', 'docker', 'aws', 'none'], 'none');\n\n console.log();\n const cloudProvider = await askChoice(rl, 'Cloud LLM routing', ['brainstormrouter', 'direct', 'none'], 'brainstormrouter');\n const budgetTier = await askChoice(rl, 'Budget tier', ['low', 'standard', 'premium'], 'standard');\n\n console.log();\n const secretsStrategy = await askChoice(rl, 'Secrets strategy', ['env-file', 'op-cli', 'sops', 'doppler', 'infisical', 'manual'], 'env-file');\n const ciTier = await askChoice(rl, 'CI/CD setup', ['standard', 'full', 'monorepo', 'none'], type === 'monorepo' ? 'monorepo' : 'standard');\n\n console.log();\n const architecture = await ask(rl, 'Architecture (one line)', '');\n\n const choices: InitChoices = {\n name,\n type: type as InitChoices['type'],\n language: language as InitChoices['language'],\n framework: framework as InitChoices['framework'],\n runtime,\n deploy: deploy as InitChoices['deploy'],\n cloudProvider: cloudProvider as InitChoices['cloudProvider'],\n localModels: detection.localModels,\n budgetTier: budgetTier as InitChoices['budgetTier'],\n secretsStrategy: secretsStrategy as InitChoices['secretsStrategy'],\n ciTier: ciTier as InitChoices['ciTier'],\n architecture,\n };\n\n console.log('\\n Will create:');\n console.log(' STORM.md — project context for AI routing');\n console.log(' brainstorm.toml — routing + provider config');\n console.log(' .brainstormignore — AI file exclusions');\n if (!detection.hasGitignore) console.log(' .gitignore — comprehensive ignore patterns');\n if (!detection.hasPrettierrc) console.log(' .prettierrc — code formatting');\n console.log(' .env.example — documented environment variables');\n if (ciTier !== 'none') {\n console.log(' .github/workflows/ — CI/CD pipeline');\n console.log(' .github/ISSUE_TEMPLATE/ — bug + feature templates');\n console.log(' .github/pull_request_template.md');\n }\n\n console.log();\n const confirm = await ask(rl, 'Proceed? [Y/n]', 'Y');\n if (confirm.toLowerCase() === 'n') {\n console.log(' Aborted.\\n');\n return null;\n }\n\n return choices;\n } finally {\n rl.close();\n }\n}\n\n/**\n * Build choices from detection defaults (for --yes mode).\n */\nexport function buildDefaultChoices(detection: ProjectDetection): InitChoices {\n return {\n name: detection.name,\n type: detection.type ?? 'app',\n language: (detection.language ?? 'typescript') as InitChoices['language'],\n framework: (detection.framework ?? 'none') as InitChoices['framework'],\n runtime: (detection.runtime ?? 'node') as InitChoices['runtime'],\n deploy: 'none',\n cloudProvider: 'brainstormrouter',\n localModels: detection.localModels,\n budgetTier: 'standard',\n secretsStrategy: 'env-file',\n ciTier: detection.type === 'monorepo' ? 'monorepo' : 'standard',\n architecture: '',\n };\n}\n\nasync function ask(rl: any, prompt: string, defaultVal: string): Promise<string> {\n const suffix = defaultVal ? ` [${defaultVal}]` : '';\n const answer = await rl.question(` ${prompt}${suffix}: `);\n return answer.trim() || defaultVal;\n}\n\nasync function askChoice(rl: any, prompt: string, options: string[], defaultVal: string): Promise<string> {\n const optStr = options.map((o) => o === defaultVal ? `[${o}]` : o).join(' / ');\n const answer = await rl.question(` ${prompt}: ${optStr}: `);\n const trimmed = answer.trim().toLowerCase();\n if (!trimmed) return defaultVal;\n const match = options.find((o) => o.startsWith(trimmed));\n return match ?? defaultVal;\n}\n","import { existsSync, mkdirSync, readFileSync, writeFileSync } from 'node:fs';\nimport { join, dirname } from 'node:path';\n\nexport interface GenerateResult {\n action: 'created' | 'skipped' | 'merged';\n path: string;\n}\n\n/**\n * Write a file if it doesn't exist. Returns the action taken.\n * Creates parent directories as needed.\n */\nexport function generateFile(\n projectDir: string,\n relativePath: string,\n content: string,\n options: { force?: boolean } = {},\n): GenerateResult {\n const fullPath = join(projectDir, relativePath);\n const dir = dirname(fullPath);\n\n if (!existsSync(dir)) {\n mkdirSync(dir, { recursive: true });\n }\n\n if (existsSync(fullPath) && !options.force) {\n return { action: 'skipped', path: relativePath };\n }\n\n writeFileSync(fullPath, content, 'utf-8');\n return { action: 'created', path: relativePath };\n}\n\n/**\n * Merge patterns into an existing .gitignore.\n * Appends missing patterns with a comment block. Never removes existing patterns.\n */\nexport function mergeGitignore(\n projectDir: string,\n newContent: string,\n): GenerateResult {\n const fullPath = join(projectDir, '.gitignore');\n\n if (!existsSync(fullPath)) {\n writeFileSync(fullPath, newContent, 'utf-8');\n return { action: 'created', path: '.gitignore' };\n }\n\n const existing = readFileSync(fullPath, 'utf-8');\n const existingPatterns = new Set(\n existing.split('\\n').map((l) => l.trim()).filter((l) => l && !l.startsWith('#')),\n );\n\n const newPatterns = newContent\n .split('\\n')\n .map((l) => l.trim())\n .filter((l) => l && !l.startsWith('#'))\n .filter((l) => !existingPatterns.has(l));\n\n if (newPatterns.length === 0) {\n return { action: 'skipped', path: '.gitignore' };\n }\n\n const appendBlock = '\\n# Added by brainstorm init\\n' + newPatterns.join('\\n') + '\\n';\n writeFileSync(fullPath, existing.trimEnd() + '\\n' + appendBlock, 'utf-8');\n return { action: 'merged', path: '.gitignore' };\n}\n","export interface InitChoices {\n name: string;\n type: 'monorepo' | 'app' | 'cli' | 'library' | 'api';\n language: 'typescript' | 'python' | 'rust' | 'go' | 'java' | 'multi';\n framework: 'nextjs' | 'hono' | 'fastapi' | 'express' | 'none';\n runtime: 'node' | 'deno' | 'bun' | 'python' | 'go';\n deploy: 'vercel' | 'do-app-platform' | 'docker' | 'aws' | 'none';\n cloudProvider: 'brainstormrouter' | 'direct' | 'none';\n localModels: Array<'ollama' | 'lmstudio' | 'llamacpp'>;\n budgetTier: 'low' | 'standard' | 'premium';\n secretsStrategy: 'env-file' | 'op-cli' | 'sops' | 'doppler' | 'infisical' | 'manual';\n ciTier: 'standard' | 'full' | 'monorepo' | 'none';\n architecture: string;\n}\n\n// ── STORM.md ────────────────────────────────────────────────────────\n\nexport interface GatewayInfo {\n connected: boolean;\n modelCount: number;\n budget?: string;\n health: string;\n}\n\nexport function generateStormMd(choices: InitChoices): string {\n const lines = [\n '---',\n 'version: 1',\n `name: ${choices.name}`,\n `type: ${choices.type}`,\n `language: ${choices.language}`,\n `framework: ${choices.framework}`,\n `runtime: ${choices.runtime}`,\n `deploy: ${choices.deploy}`,\n 'routing:',\n ' primary_tasks: [code-generation, debugging]',\n ` typical_complexity: moderate`,\n ` prefer_local: ${choices.budgetTier === 'low'}`,\n ` budget_tier: ${choices.budgetTier}`,\n 'providers:',\n ` cloud: ${choices.cloudProvider}`,\n ` local: [${choices.localModels.join(', ')}]`,\n 'secrets:',\n ` strategy: ${choices.secretsStrategy}`,\n `entry_points: []`,\n choices.language === 'typescript' ? 'test_command: npm test' : choices.language === 'python' ? 'test_command: pytest' : undefined,\n choices.language === 'typescript' ? 'build_command: npm run build' : undefined,\n choices.language === 'typescript' ? 'dev_command: npm run dev' : choices.language === 'python' ? 'dev_command: python -m uvicorn app:app --reload' : undefined,\n '---',\n '',\n '## What is this?',\n `<!-- One sentence. What does this project do? -->`,\n choices.architecture || '[Describe your project here.]',\n '',\n '## Start here',\n '<!-- The 5 files to read first to understand the architecture. -->',\n '- [Add your key entry point]',\n '- [Add your main abstraction]',\n '- [Add your data schema]',\n '- [Add your route definitions]',\n '- [Add your config file]',\n '',\n '## Commands that work',\n '<!-- Copy-pasteable. Must work on a fresh clone. -->',\n '```bash',\n choices.language === 'typescript' ? 'npm install' : choices.language === 'python' ? 'pip install -r requirements.txt' : '# install dependencies',\n choices.language === 'typescript' ? 'npm run dev' : choices.language === 'python' ? 'python -m uvicorn app:app --reload' : '# start dev server',\n choices.language === 'typescript' ? 'npm test' : choices.language === 'python' ? 'pytest' : '# run tests',\n choices.language === 'typescript' ? 'npm run build' : '# build',\n '```',\n '',\n '## Conventions',\n '<!-- Show patterns by example. I learn by reading code, not rules. -->',\n '```' + (choices.language === 'typescript' ? 'typescript' : choices.language),\n '// Add code examples of your project\\'s patterns here',\n '```',\n '',\n '## Environment',\n '<!-- Required vars marked [REQUIRED]. -->',\n choices.cloudProvider === 'brainstormrouter' ? '- `BRAINSTORM_API_KEY` [REQUIRED] — BrainstormRouter SaaS key' : '- [Add required environment variables]',\n '',\n '## Don\\'t touch',\n '<!-- Files I should never modify without asking. -->',\n '- [Add protected files/directories here]',\n '',\n ];\n\n return lines.filter((l) => l !== undefined).join('\\n');\n}\n\n// ── brainstorm.toml ─────────────────────────────────────────────────\n\nexport function generateBrainstormToml(choices: InitChoices): string {\n const strategy = choices.budgetTier === 'low' ? 'cost-first'\n : choices.budgetTier === 'premium' ? 'quality-first'\n : 'combined';\n\n const lines = [\n '[general]',\n `defaultStrategy = \"${strategy}\"`,\n '',\n '[providers.gateway]',\n `enabled = ${choices.cloudProvider === 'brainstormrouter'}`,\n '',\n '[providers.ollama]',\n `enabled = ${choices.localModels.includes('ollama')}`,\n '',\n '[providers.lmstudio]',\n `enabled = ${choices.localModels.includes('lmstudio')}`,\n '',\n '[budget]',\n choices.budgetTier === 'low' ? 'daily = 2.00' : choices.budgetTier === 'premium' ? 'daily = 20.00' : 'daily = 5.00',\n 'hardLimit = false',\n '',\n ];\n\n return lines.join('\\n');\n}\n\n// ── .gitignore ──────────────────────────────────────────────────────\n\nexport function generateGitignore(choices: InitChoices): string {\n return `# Dependencies\nnode_modules/\n.pnp.*\nvenv/\n__pycache__/\n\n# Build\ndist/\nbuild/\n.next/\n.turbo/\n*.tsbuildinfo\n\n# Environment & secrets\n.env\n.env.*\n!.env.example\n*.pem\n*.key\nsecrets.dec.yaml\n\n# Data\n*.db\n*.db-wal\n*.db-shm\n\n# IDE & OS\n.idea/\n.vscode/settings.json\n*.swp\n.DS_Store\n\n# Test\ncoverage/\n\n# Brainstorm\n.brainstorm/cache/\n`;\n}\n\n// ── .brainstormignore ───────────────────────────────────────────────\n\nexport function generateBrainstormignore(): string {\n return `# Build artifacts — never useful, always stale\ndist/\nbuild/\n.next/\n.turbo/\n__pycache__/\n*.pyc\n\n# Dependencies — I don't need to read library source\nnode_modules/\n.pnp.*\nvenv/\n\n# Lock files — huge, never informative\npackage-lock.json\nyarn.lock\npnpm-lock.yaml\nCargo.lock\n\n# Binary/media — I can't read these meaningfully\n*.jpg\n*.png\n*.gif\n*.svg\n*.ico\n*.woff\n*.woff2\n*.ttf\n*.eot\n*.mp4\n*.mp3\n*.pdf\n\n# Generated/cached\n*.tsbuildinfo\ncoverage/\n.cache/\n.eslintcache\n\n# Secrets — I should never see these\n.env\n.env.*\n!.env.example\n*.pem\n*.key\n*.p12\ncredentials.json\n`;\n}\n\n// ── .prettierrc ─────────────────────────────────────────────────────\n\nexport function generatePrettierrc(): string {\n return JSON.stringify({\n semi: true,\n singleQuote: true,\n tabWidth: 2,\n printWidth: 100,\n trailingComma: 'all',\n }, null, 2) + '\\n';\n}\n\n// ── .env.example ────────────────────────────────────────────────────\n\nexport function generateEnvExample(choices: InitChoices): string {\n const lines = [\n '# === LLM Providers ===',\n ];\n\n if (choices.cloudProvider === 'brainstormrouter') {\n lines.push(\n '# BrainstormRouter SaaS (recommended — routes to optimal model)',\n '# Sign up: https://brainstormrouter.com',\n 'BRAINSTORM_API_KEY=',\n );\n } else if (choices.cloudProvider === 'direct') {\n lines.push(\n '# Direct provider keys (set the ones you use)',\n '# ANTHROPIC_API_KEY=',\n '# OPENAI_API_KEY=',\n '# GOOGLE_GENERATIVE_AI_API_KEY=',\n '# DEEPSEEK_API_KEY=',\n );\n }\n\n lines.push(\n '',\n '# === Local Models ===',\n '# Ollama runs on localhost:11434 by default (auto-detected)',\n '# LM Studio runs on localhost:1234 by default (auto-detected)',\n '',\n '# === Application ===',\n '# DATABASE_URL=',\n '# Add project-specific env vars below',\n '',\n );\n\n return lines.join('\\n');\n}\n\n// ── CI/CD Workflows ─────────────────────────────────────────────────\n\nexport function generateCiWorkflow(choices: InitChoices): string {\n if (choices.ciTier === 'monorepo') {\n return `name: CI\non:\n push: { branches: [main] }\n pull_request: { branches: [main] }\n\njobs:\n check:\n runs-on: ubuntu-latest\n steps:\n - uses: actions/checkout@v4\n with: { fetch-depth: 2 }\n - uses: actions/setup-node@v4\n with: { node-version: 22, cache: npm }\n - run: npm ci\n - run: npx turbo run typecheck test build --affected\n`;\n }\n\n if (choices.language === 'python') {\n return `name: CI\non:\n push: { branches: [main] }\n pull_request: { branches: [main] }\n\njobs:\n check:\n runs-on: ubuntu-latest\n steps:\n - uses: actions/checkout@v4\n - uses: actions/setup-python@v5\n with: { python-version: \"3.13\" }\n - run: pip install -r requirements.txt\n - run: pytest\n`;\n }\n\n return `name: CI\non:\n push: { branches: [main] }\n pull_request: { branches: [main] }\n\njobs:\n check:\n runs-on: ubuntu-latest\n steps:\n - uses: actions/checkout@v4\n - uses: actions/setup-node@v4\n with: { node-version: 22, cache: npm }\n - run: npm ci\n - run: npx tsc --noEmit\n - run: npm test\n - run: npm run build\n`;\n}\n\nexport function generateDeployWorkflow(choices: InitChoices): string {\n return `name: Deploy\non:\n push: { branches: [main] }\n\njobs:\n deploy:\n runs-on: ubuntu-latest\n steps:\n - uses: actions/checkout@v4\n - uses: actions/setup-node@v4\n with: { node-version: 22, cache: npm }\n - run: npm ci && npm run build\n # Add deployment command for your target:\n # Vercel: npx vercel --prod --token=\\${{ secrets.VERCEL_TOKEN }}\n # DO App Platform: doctl apps create-deployment \\$APP_ID\n # Docker: docker build -t app . && docker push\n - run: echo \"Configure deployment for ${choices.deploy}\"\n`;\n}\n\nexport function generateReleaseWorkflow(): string {\n return `name: Release\non:\n push: { tags: ['v*'] }\n\njobs:\n publish:\n runs-on: ubuntu-latest\n permissions:\n contents: write\n steps:\n - uses: actions/checkout@v4\n - uses: actions/setup-node@v4\n with: { node-version: 22, cache: npm }\n - run: npm ci && npm run build\n - run: npm publish\n env:\n NODE_AUTH_TOKEN: \\${{ secrets.NPM_TOKEN }}\n - uses: softprops/action-gh-release@v2\n with:\n generate_release_notes: true\n`;\n}\n\nexport function generateDependabot(): string {\n return `version: 2\nupdates:\n - package-ecosystem: npm\n directory: /\n schedule: { interval: weekly }\n open-pull-requests-limit: 5\n groups:\n dev-deps:\n dependency-type: development\n prod-deps:\n dependency-type: production\n`;\n}\n\nexport function generatePrTemplate(): string {\n return `## Summary\n<!-- What does this PR do? -->\n\n## Test plan\n- [ ] Tests pass locally\n- [ ] Manually verified\n\n## Notes\n<!-- Anything reviewers should know? -->\n`;\n}\n\nexport function generateBugTemplate(): string {\n return `---\nname: Bug Report\nabout: Report a bug\nlabels: bug\n---\n\n## Expected behavior\n\n## Actual behavior\n\n## Steps to reproduce\n\n## Environment\n- OS:\n- Node:\n- Version:\n`;\n}\n\nexport function generateFeatureTemplate(): string {\n return `---\nname: Feature Request\nabout: Suggest a feature\nlabels: enhancement\n---\n\n## Problem\n<!-- What problem does this solve? -->\n\n## Proposed solution\n\n## Alternatives considered\n`;\n}\n","import { detectProject } from \"./detect.js\";\nimport { runPrompts, buildDefaultChoices } from \"./prompts.js\";\nimport {\n generateFile,\n mergeGitignore,\n type GenerateResult,\n} from \"./generate.js\";\nimport {\n generateStormMd,\n generateBrainstormToml,\n generateGitignore,\n generateBrainstormignore,\n generatePrettierrc,\n generateEnvExample,\n generateCiWorkflow,\n generateDeployWorkflow,\n generateReleaseWorkflow,\n generateDependabot,\n generatePrTemplate,\n generateBugTemplate,\n generateFeatureTemplate,\n type InitChoices,\n type GatewayInfo,\n} from \"./templates.js\";\nimport { createGatewayClient } from \"@brainst0rm/gateway\";\n\nexport interface InitOptions {\n yes?: boolean;\n force?: boolean;\n}\n\n/**\n * Orchestrate the init flow: detect → gateway probe → prompt → generate → report.\n */\nexport async function runInit(\n projectDir: string,\n options: InitOptions,\n): Promise<void> {\n // Phase 1: Detect\n const detection = await detectProject(projectDir);\n\n // Phase 1.5: Probe BrainstormRouter gateway if API key is set\n let gatewayInfo: GatewayInfo | null = null;\n const gw = createGatewayClient();\n if (gw) {\n try {\n const [self, health, discovery] = await Promise.all([\n gw.getSelf().catch(() => null),\n gw.getHealth().catch(() => ({ status: \"unknown\" })),\n gw.getDiscovery().catch(() => null),\n ]);\n if (self) {\n gatewayInfo = {\n connected: true,\n modelCount: discovery?.models?.available ?? 0,\n budget: discovery?.budget\n ? `$${discovery.budget.remaining_usd?.toFixed(2)}/${discovery.budget.period}`\n : undefined,\n health: health.status,\n };\n }\n } catch {\n // Gateway not reachable — proceed without it\n }\n }\n\n // Phase 2: Get choices (interactive or defaults)\n let choices: InitChoices | null;\n if (options.yes) {\n choices = buildDefaultChoices(detection);\n // Auto-set cloud provider when gateway is detected\n if (gatewayInfo) choices.cloudProvider = \"brainstormrouter\";\n console.log(\"\\n brainstorm init --yes\\n\");\n console.log(` Auto-detected: ${choices.language} ${choices.type}`);\n if (detection.localModels.length > 0) {\n console.log(` Local models: ${detection.localModels.join(\", \")}`);\n }\n if (gatewayInfo) {\n console.log(\n ` Gateway: connected (${gatewayInfo.modelCount} models, ${gatewayInfo.health})`,\n );\n if (gatewayInfo.budget) console.log(` Budget: ${gatewayInfo.budget}`);\n }\n console.log();\n } else {\n // Show gateway detection before prompts\n if (gatewayInfo) {\n console.log(\n `\\n BrainstormRouter detected: ${gatewayInfo.modelCount} models, ${gatewayInfo.health}`,\n );\n }\n choices = await runPrompts(detection);\n if (!choices) return; // User aborted\n // Auto-set cloud provider when gateway is detected\n if (gatewayInfo) choices.cloudProvider = \"brainstormrouter\";\n }\n\n // Phase 3: Generate files\n const results: GenerateResult[] = [];\n const opts = { force: options.force };\n\n // Core files (always generated)\n results.push(\n generateFile(projectDir, \"STORM.md\", generateStormMd(choices), opts),\n );\n results.push(\n generateFile(\n projectDir,\n \"brainstorm.toml\",\n generateBrainstormToml(choices),\n opts,\n ),\n );\n results.push(\n generateFile(\n projectDir,\n \".brainstormignore\",\n generateBrainstormignore(),\n opts,\n ),\n );\n results.push(\n generateFile(projectDir, \".env.example\", generateEnvExample(choices), opts),\n );\n\n // .gitignore (merge mode)\n results.push(mergeGitignore(projectDir, generateGitignore(choices)));\n\n // Formatting\n results.push(\n generateFile(projectDir, \".prettierrc\", generatePrettierrc(), opts),\n );\n\n // CI/CD\n if (choices.ciTier !== \"none\") {\n results.push(\n generateFile(\n projectDir,\n \".github/workflows/ci.yml\",\n generateCiWorkflow(choices),\n opts,\n ),\n );\n results.push(\n generateFile(\n projectDir,\n \".github/pull_request_template.md\",\n generatePrTemplate(),\n opts,\n ),\n );\n results.push(\n generateFile(\n projectDir,\n \".github/ISSUE_TEMPLATE/bug_report.md\",\n generateBugTemplate(),\n opts,\n ),\n );\n results.push(\n generateFile(\n projectDir,\n \".github/ISSUE_TEMPLATE/feature_request.md\",\n generateFeatureTemplate(),\n opts,\n ),\n );\n\n if (choices.ciTier === \"full\") {\n results.push(\n generateFile(\n projectDir,\n \".github/workflows/deploy.yml\",\n generateDeployWorkflow(choices),\n opts,\n ),\n );\n results.push(\n generateFile(\n projectDir,\n \".github/workflows/release.yml\",\n generateReleaseWorkflow(),\n opts,\n ),\n );\n results.push(\n generateFile(\n projectDir,\n \".github/dependabot.yml\",\n generateDependabot(),\n opts,\n ),\n );\n }\n }\n\n // Phase 4: Report\n console.log(\" Results:\\n\");\n for (const r of results) {\n const icon =\n r.action === \"created\" ? \"+\" : r.action === \"merged\" ? \"~\" : \"-\";\n const label =\n r.action === \"created\"\n ? \"created\"\n : r.action === \"merged\"\n ? \"merged\"\n : \"exists (skipped)\";\n console.log(` ${icon} ${r.path} (${label})`);\n }\n\n const created = results.filter((r) => r.action === \"created\").length;\n const merged = results.filter((r) => r.action === \"merged\").length;\n const skipped = results.filter((r) => r.action === \"skipped\").length;\n\n console.log(\n `\\n Done. ${created} created, ${merged} merged, ${skipped} skipped.`,\n );\n console.log(\n \" Edit STORM.md to add your architecture, entry points, and conventions.\\n\",\n );\n}\n"],"mappings":"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","names":["existsSync","readFileSync","join","createGatewayClient","join","existsSync","readFileSync","writeFileSync","mkdirSync","homedir","output","ChangeSetLogRepository","readline","rl","input","result"]}