muonroi-cli 1.4.0 → 1.5.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 (2000) hide show
  1. package/LICENSE +21 -21
  2. package/README.md +122 -122
  3. package/dist/packages/agent-harness-core/src/predicate.d.ts +1 -1
  4. package/dist/src/agent-harness/__tests__/mock-model.spec.js +48 -1
  5. package/dist/src/agent-harness/mock-model.d.ts +11 -0
  6. package/dist/src/agent-harness/mock-model.js +21 -0
  7. package/dist/src/cli/cost-forensics.js +12 -12
  8. package/dist/src/council/__tests__/clarification-prompt.test.js +51 -0
  9. package/dist/src/council/__tests__/clarifier-ready-gate.test.js +32 -0
  10. package/dist/src/council/__tests__/decisions-lock.test.js +17 -1
  11. package/dist/src/council/__tests__/oauth-reachable.test.d.ts +1 -0
  12. package/dist/src/council/__tests__/oauth-reachable.test.js +31 -0
  13. package/dist/src/council/__tests__/parse-outcome-fallback.test.js +11 -0
  14. package/dist/src/council/clarifier.js +9 -1
  15. package/dist/src/council/debate.js +5 -1
  16. package/dist/src/council/decisions-lock.js +3 -3
  17. package/dist/src/council/index.js +12 -5
  18. package/dist/src/council/leader.d.ts +0 -17
  19. package/dist/src/council/leader.js +22 -15
  20. package/dist/src/council/planner.js +1 -1
  21. package/dist/src/council/prompts.js +63 -57
  22. package/dist/src/council/types.d.ts +7 -0
  23. package/dist/src/ee/__tests__/ee-onboarding.test.d.ts +1 -0
  24. package/dist/src/ee/__tests__/ee-onboarding.test.js +32 -0
  25. package/dist/src/ee/auth.d.ts +9 -0
  26. package/dist/src/ee/auth.js +19 -0
  27. package/dist/src/ee/ee-onboarding.d.ts +5 -0
  28. package/dist/src/ee/ee-onboarding.js +76 -0
  29. package/dist/src/generated/version.d.ts +1 -1
  30. package/dist/src/generated/version.js +1 -1
  31. package/dist/src/headless/output.js +6 -4
  32. package/dist/src/headless/output.test.js +4 -3
  33. package/dist/src/index.js +20 -1
  34. package/dist/src/mcp/__tests__/auto-setup.test.js +74 -0
  35. package/dist/src/mcp/__tests__/client-pool.spec.d.ts +1 -0
  36. package/dist/src/mcp/__tests__/client-pool.spec.js +98 -0
  37. package/dist/src/mcp/__tests__/parallel-build.spec.d.ts +1 -0
  38. package/dist/src/mcp/__tests__/parallel-build.spec.js +67 -0
  39. package/dist/src/mcp/__tests__/smart-filter.test.js +56 -0
  40. package/dist/src/mcp/auto-setup.js +56 -2
  41. package/dist/src/mcp/client-pool.d.ts +46 -0
  42. package/dist/src/mcp/client-pool.js +212 -0
  43. package/dist/src/mcp/oauth-callback.js +2 -2
  44. package/dist/src/mcp/parse-headers.test.js +14 -14
  45. package/dist/src/mcp/runtime.d.ts +28 -0
  46. package/dist/src/mcp/runtime.js +117 -51
  47. package/dist/src/mcp/self-verify-runner.d.ts +14 -0
  48. package/dist/src/mcp/self-verify-runner.js +38 -0
  49. package/dist/src/mcp/setup-guide-text.d.ts +9 -0
  50. package/dist/src/mcp/setup-guide-text.js +84 -0
  51. package/dist/src/mcp/smart-filter.js +49 -0
  52. package/dist/src/mcp/smoke.test.js +43 -43
  53. package/dist/src/mcp/tools-server.d.ts +7 -0
  54. package/dist/src/mcp/tools-server.js +19 -22
  55. package/dist/src/models/catalog.json +349 -349
  56. package/dist/src/ops/__tests__/doctor-ee-health.test.js +21 -0
  57. package/dist/src/ops/doctor.d.ts +3 -2
  58. package/dist/src/ops/doctor.js +47 -11
  59. package/dist/src/ops/doctor.test.js +4 -3
  60. package/dist/src/orchestrator/__tests__/mcp-capability-block.test.d.ts +1 -0
  61. package/dist/src/orchestrator/__tests__/mcp-capability-block.test.js +39 -0
  62. package/dist/src/orchestrator/__tests__/project-stack.test.d.ts +1 -0
  63. package/dist/src/orchestrator/__tests__/project-stack.test.js +65 -0
  64. package/dist/src/orchestrator/batch-turn-runner.js +7 -11
  65. package/dist/src/orchestrator/message-processor.js +57 -27
  66. package/dist/src/orchestrator/orchestrator.js +26 -0
  67. package/dist/src/orchestrator/prompts.d.ts +51 -0
  68. package/dist/src/orchestrator/prompts.js +257 -134
  69. package/dist/src/orchestrator/scope-ceiling.js +6 -1
  70. package/dist/src/orchestrator/stream-runner.js +20 -15
  71. package/dist/src/orchestrator/text-tool-call-detector.test.js +13 -13
  72. package/dist/src/pil/__tests__/clarity-gate.test.js +24 -215
  73. package/dist/src/pil/__tests__/config.test.js +1 -17
  74. package/dist/src/pil/__tests__/discovery.test.js +144 -11
  75. package/dist/src/pil/__tests__/layer1-intent-trace.test.js +7 -2
  76. package/dist/src/pil/__tests__/layer1-intent.test.js +3 -0
  77. package/dist/src/pil/__tests__/layer16-clarity.test.js +32 -116
  78. package/dist/src/pil/__tests__/layer4-gsd.test.js +37 -0
  79. package/dist/src/pil/__tests__/layer6-output.test.js +137 -18
  80. package/dist/src/pil/__tests__/llm-classify.test.js +49 -2
  81. package/dist/src/pil/agent-operating-contract.d.ts +1 -1
  82. package/dist/src/pil/agent-operating-contract.js +2 -0
  83. package/dist/src/pil/agent-operating-contract.test.js +7 -2
  84. package/dist/src/pil/cheap-model-playbook.js +35 -35
  85. package/dist/src/pil/cheap-model-workbooks.js +16 -13
  86. package/dist/src/pil/clarity-gate.d.ts +21 -19
  87. package/dist/src/pil/clarity-gate.js +26 -153
  88. package/dist/src/pil/config.d.ts +9 -1
  89. package/dist/src/pil/config.js +15 -4
  90. package/dist/src/pil/discovery.js +211 -136
  91. package/dist/src/pil/layer1-intent.d.ts +12 -0
  92. package/dist/src/pil/layer1-intent.js +283 -38
  93. package/dist/src/pil/layer1-intent.test.js +210 -4
  94. package/dist/src/pil/layer16-clarity.d.ts +25 -11
  95. package/dist/src/pil/layer16-clarity.js +19 -306
  96. package/dist/src/pil/layer4-gsd.js +18 -6
  97. package/dist/src/pil/layer6-output.d.ts +2 -0
  98. package/dist/src/pil/layer6-output.js +137 -22
  99. package/dist/src/pil/llm-classify.d.ts +26 -0
  100. package/dist/src/pil/llm-classify.js +34 -5
  101. package/dist/src/pil/native-capabilities-workbook.d.ts +1 -1
  102. package/dist/src/pil/native-capabilities-workbook.js +82 -76
  103. package/dist/src/pil/schema.d.ts +8 -0
  104. package/dist/src/pil/schema.js +12 -1
  105. package/dist/src/pil/task-tier-map.js +4 -0
  106. package/dist/src/pil/types.d.ts +11 -1
  107. package/dist/src/product-loop/done-gate.js +3 -3
  108. package/dist/src/product-loop/loop-driver.js +18 -18
  109. package/dist/src/product-loop/progress-snapshot.js +4 -4
  110. package/dist/src/providers/auth/gemini-oauth.js +6 -15
  111. package/dist/src/providers/auth/grok-oauth.js +6 -15
  112. package/dist/src/providers/auth/openai-oauth.js +6 -15
  113. package/dist/src/providers/mcp-vision-bridge.js +48 -48
  114. package/dist/src/reporter/index.js +1 -1
  115. package/dist/src/scaffold/bb-ecosystem-apply.js +47 -47
  116. package/dist/src/scaffold/bb-quality-gate.js +5 -5
  117. package/dist/src/scaffold/continuation-prompt.js +60 -60
  118. package/dist/src/scaffold/init-new.js +453 -453
  119. package/dist/src/self-qa/__tests__/scenario-planner.test.js +3 -3
  120. package/dist/src/self-qa/agentic-loop.js +24 -19
  121. package/dist/src/self-qa/spec-emitter.js +26 -23
  122. package/dist/src/storage/__tests__/migrations.test.js +2 -2
  123. package/dist/src/storage/interaction-log.js +5 -5
  124. package/dist/src/storage/migrations.js +122 -122
  125. package/dist/src/storage/sessions.js +42 -42
  126. package/dist/src/storage/transcript.js +91 -84
  127. package/dist/src/storage/usage.js +14 -14
  128. package/dist/src/storage/workspaces.js +12 -12
  129. package/dist/src/tools/__tests__/native-tools.test.d.ts +1 -0
  130. package/dist/src/tools/__tests__/native-tools.test.js +53 -0
  131. package/dist/src/tools/git-safety.d.ts +61 -0
  132. package/dist/src/tools/git-safety.js +141 -0
  133. package/dist/src/tools/git-safety.test.d.ts +1 -0
  134. package/dist/src/tools/git-safety.test.js +111 -0
  135. package/dist/src/tools/native-tools.d.ts +31 -0
  136. package/dist/src/tools/native-tools.js +273 -0
  137. package/dist/src/tools/registry-git-safety.test.d.ts +7 -0
  138. package/dist/src/tools/registry-git-safety.test.js +92 -0
  139. package/dist/src/tools/registry.js +39 -4
  140. package/dist/src/ui/__tests__/markdown-render.test.d.ts +1 -0
  141. package/dist/src/ui/__tests__/markdown-render.test.js +48 -0
  142. package/dist/src/ui/app.js +0 -0
  143. package/dist/src/ui/components/message-view.js +4 -1
  144. package/dist/src/ui/components/structured-response-view.js +7 -3
  145. package/dist/src/ui/components/tool-group.js +7 -1
  146. package/dist/src/ui/markdown-render.d.ts +41 -0
  147. package/dist/src/ui/markdown-render.js +223 -0
  148. package/dist/src/ui/markdown.d.ts +10 -0
  149. package/dist/src/ui/markdown.js +12 -35
  150. package/dist/src/ui/slash/council-inspect.js +4 -4
  151. package/dist/src/ui/slash/export.js +4 -4
  152. package/dist/src/ui/utils/text.d.ts +8 -0
  153. package/dist/src/ui/utils/text.js +16 -0
  154. package/dist/src/ui/utils/text.test.d.ts +1 -0
  155. package/dist/src/ui/utils/text.test.js +23 -0
  156. package/dist/src/usage/ledger.js +48 -15
  157. package/dist/src/utils/__tests__/footprint-gitignore.test.d.ts +1 -0
  158. package/dist/src/utils/__tests__/footprint-gitignore.test.js +50 -0
  159. package/dist/src/utils/clipboard-image.js +23 -23
  160. package/dist/src/utils/open-url.d.ts +56 -0
  161. package/dist/src/utils/open-url.js +58 -0
  162. package/dist/src/utils/open-url.test.d.ts +1 -0
  163. package/dist/src/utils/open-url.test.js +86 -0
  164. package/dist/src/utils/settings.d.ts +12 -0
  165. package/dist/src/utils/settings.js +48 -0
  166. package/dist/src/utils/side-question.js +2 -2
  167. package/dist/src/utils/skills.js +3 -3
  168. package/dist/src/verify/__tests__/coverage-parsers.test.js +30 -30
  169. package/dist/src/verify/environment.js +2 -1
  170. package/package.json +3 -2
  171. package/dist/muonroi-cli-standalone.exe +0 -0
  172. package/dist/packages/agent-harness-core/src/driver.js.map +0 -1
  173. package/dist/packages/agent-harness-core/src/event-filter.js.map +0 -1
  174. package/dist/packages/agent-harness-core/src/event-redact.js.map +0 -1
  175. package/dist/packages/agent-harness-core/src/idle.js.map +0 -1
  176. package/dist/packages/agent-harness-core/src/index.js.map +0 -1
  177. package/dist/packages/agent-harness-core/src/mcp-server.js.map +0 -1
  178. package/dist/packages/agent-harness-core/src/mock-llm.js.map +0 -1
  179. package/dist/packages/agent-harness-core/src/predicate.js.map +0 -1
  180. package/dist/packages/agent-harness-core/src/protocol.js.map +0 -1
  181. package/dist/packages/agent-harness-core/src/registry.js.map +0 -1
  182. package/dist/packages/agent-harness-core/src/selector.js.map +0 -1
  183. package/dist/packages/agent-harness-core/src/spec-helpers.js.map +0 -1
  184. package/dist/packages/agent-harness-core/src/transports/sidechannel.js.map +0 -1
  185. package/dist/packages/agent-harness-core/src/transports/ws.js.map +0 -1
  186. package/dist/packages/agent-harness-opentui/src/agent-mode.js.map +0 -1
  187. package/dist/packages/agent-harness-opentui/src/index.js.map +0 -1
  188. package/dist/packages/agent-harness-opentui/src/input-bridge.js.map +0 -1
  189. package/dist/packages/agent-harness-opentui/src/install.js.map +0 -1
  190. package/dist/packages/agent-harness-opentui/src/reconciler-hook.js.map +0 -1
  191. package/dist/packages/agent-harness-opentui/src/semantic.js.map +0 -1
  192. package/dist/src/__test-helpers__/catalog-fixtures.js.map +0 -1
  193. package/dist/src/__test-stubs__/ee-server.js.map +0 -1
  194. package/dist/src/__test-stubs__/vitest-setup.js.map +0 -1
  195. package/dist/src/__tests__/council/bubble-layout.test.js.map +0 -1
  196. package/dist/src/__tests__/council/code-block-truncate.test.js.map +0 -1
  197. package/dist/src/__tests__/council/role-palette.test.js.map +0 -1
  198. package/dist/src/__tests__/first-run-wizard.test.js.map +0 -1
  199. package/dist/src/agent-harness/__tests__/cli-flags.spec.js.map +0 -1
  200. package/dist/src/agent-harness/__tests__/driver.spec.js.map +0 -1
  201. package/dist/src/agent-harness/__tests__/idle.spec.js.map +0 -1
  202. package/dist/src/agent-harness/__tests__/mock-llm.spec.js.map +0 -1
  203. package/dist/src/agent-harness/__tests__/mock-model.spec.js.map +0 -1
  204. package/dist/src/agent-harness/__tests__/predicate.spec.js.map +0 -1
  205. package/dist/src/agent-harness/__tests__/protocol.spec.js.map +0 -1
  206. package/dist/src/agent-harness/__tests__/schema.spec.js.map +0 -1
  207. package/dist/src/agent-harness/__tests__/selector.spec.js.map +0 -1
  208. package/dist/src/agent-harness/__tests__/sidechannel.spec.js.map +0 -1
  209. package/dist/src/agent-harness/__tests__/spec-helpers.spec.js.map +0 -1
  210. package/dist/src/agent-harness/index.js.map +0 -1
  211. package/dist/src/agent-harness/mock-model.js.map +0 -1
  212. package/dist/src/agent-harness/test-spawn.js.map +0 -1
  213. package/dist/src/billing/index.js.map +0 -1
  214. package/dist/src/chat/__tests__/broadcast-bus.test.js.map +0 -1
  215. package/dist/src/chat/__tests__/channel-manager.test.js.map +0 -1
  216. package/dist/src/chat/__tests__/client.test.js.map +0 -1
  217. package/dist/src/chat/__tests__/discord-integration.test.js.map +0 -1
  218. package/dist/src/chat/__tests__/intent-prompt.test.js.map +0 -1
  219. package/dist/src/chat/__tests__/verdict-resolver.test.js.map +0 -1
  220. package/dist/src/chat/broadcast-bus.js.map +0 -1
  221. package/dist/src/chat/channel-manager.js.map +0 -1
  222. package/dist/src/chat/chat-keychain.js.map +0 -1
  223. package/dist/src/chat/factory.js.map +0 -1
  224. package/dist/src/chat/intent-prompt.js.map +0 -1
  225. package/dist/src/chat/providers/discord/client.js.map +0 -1
  226. package/dist/src/chat/types.js.map +0 -1
  227. package/dist/src/chat/verdict-constants.js.map +0 -1
  228. package/dist/src/chat/verdict-resolver.js.map +0 -1
  229. package/dist/src/cli/__tests__/bw-vault.test.js.map +0 -1
  230. package/dist/src/cli/__tests__/keys-bundle.test.js.map +0 -1
  231. package/dist/src/cli/__tests__/share-cmd.test.js.map +0 -1
  232. package/dist/src/cli/bw-vault.js.map +0 -1
  233. package/dist/src/cli/config/__tests__/model-picker.test.js.map +0 -1
  234. package/dist/src/cli/config/__tests__/provider-fetch.test.js.map +0 -1
  235. package/dist/src/cli/config/index.js.map +0 -1
  236. package/dist/src/cli/config/model-picker.js.map +0 -1
  237. package/dist/src/cli/config/provider-fetch.js.map +0 -1
  238. package/dist/src/cli/config/screen-council.js.map +0 -1
  239. package/dist/src/cli/config/screen-models.js.map +0 -1
  240. package/dist/src/cli/config/screen-providers.js.map +0 -1
  241. package/dist/src/cli/config/tui.js.map +0 -1
  242. package/dist/src/cli/cost-forensics.js.map +0 -1
  243. package/dist/src/cli/cost-forensics.test.js.map +0 -1
  244. package/dist/src/cli/keys-bundle.js.map +0 -1
  245. package/dist/src/cli/keys.js.map +0 -1
  246. package/dist/src/cli/keys.test.js.map +0 -1
  247. package/dist/src/cli/pil-report.js.map +0 -1
  248. package/dist/src/cli/reporter-cmd.js.map +0 -1
  249. package/dist/src/cli/share-cmd.js.map +0 -1
  250. package/dist/src/cli/usage-report.js.map +0 -1
  251. package/dist/src/cloud/index.js.map +0 -1
  252. package/dist/src/council/__tests__/accounting.test.js.map +0 -1
  253. package/dist/src/council/__tests__/audit-replay.test.js.map +0 -1
  254. package/dist/src/council/__tests__/clarifier-max-rounds.test.js.map +0 -1
  255. package/dist/src/council/__tests__/clarifier-options.test.js.map +0 -1
  256. package/dist/src/council/__tests__/clarifier-ready-gate.test.js.map +0 -1
  257. package/dist/src/council/__tests__/cost-aware.test.js.map +0 -1
  258. package/dist/src/council/__tests__/debate-planner-structured.test.js.map +0 -1
  259. package/dist/src/council/__tests__/decisions-lock.test.js.map +0 -1
  260. package/dist/src/council/__tests__/evaluator-metrics.test.js.map +0 -1
  261. package/dist/src/council/__tests__/parse-outcome-fallback.test.js.map +0 -1
  262. package/dist/src/council/__tests__/research-tools.test.js.map +0 -1
  263. package/dist/src/council/__tests__/round-tools.test.js.map +0 -1
  264. package/dist/src/council/__tests__/tool-trace.test.js.map +0 -1
  265. package/dist/src/council/__tests__/types-contract.test.js.map +0 -1
  266. package/dist/src/council/clarifier.js.map +0 -1
  267. package/dist/src/council/context.js.map +0 -1
  268. package/dist/src/council/debate-planner.js.map +0 -1
  269. package/dist/src/council/debate.js.map +0 -1
  270. package/dist/src/council/decisions-lock.js.map +0 -1
  271. package/dist/src/council/executor.js.map +0 -1
  272. package/dist/src/council/index.js.map +0 -1
  273. package/dist/src/council/leader.js.map +0 -1
  274. package/dist/src/council/llm.js.map +0 -1
  275. package/dist/src/council/phase-events.js.map +0 -1
  276. package/dist/src/council/planner.js.map +0 -1
  277. package/dist/src/council/preflight.js.map +0 -1
  278. package/dist/src/council/prompts.js.map +0 -1
  279. package/dist/src/council/types.js.map +0 -1
  280. package/dist/src/daemon/scheduler.js.map +0 -1
  281. package/dist/src/daemon/scheduler.test.js.map +0 -1
  282. package/dist/src/ee/__tests__/bb-design.test.js.map +0 -1
  283. package/dist/src/ee/__tests__/export-transcripts.test.js.map +0 -1
  284. package/dist/src/ee/__tests__/pil-context-bridge.test.js.map +0 -1
  285. package/dist/src/ee/__tests__/pipeline.integration.test.js.map +0 -1
  286. package/dist/src/ee/__tests__/recall-format.test.js.map +0 -1
  287. package/dist/src/ee/__tests__/recall-ledger.test.js.map +0 -1
  288. package/dist/src/ee/__tests__/render-sink-wiring.test.js.map +0 -1
  289. package/dist/src/ee/auth.js.map +0 -1
  290. package/dist/src/ee/auth.test.js.map +0 -1
  291. package/dist/src/ee/bb-design.js.map +0 -1
  292. package/dist/src/ee/bb-retrieval.js.map +0 -1
  293. package/dist/src/ee/bridge.js.map +0 -1
  294. package/dist/src/ee/bridge.test.js.map +0 -1
  295. package/dist/src/ee/client-mode.js.map +0 -1
  296. package/dist/src/ee/client.js.map +0 -1
  297. package/dist/src/ee/client.test.js.map +0 -1
  298. package/dist/src/ee/council-bridge.js.map +0 -1
  299. package/dist/src/ee/embedding-cache.js.map +0 -1
  300. package/dist/src/ee/export-transcripts.js.map +0 -1
  301. package/dist/src/ee/extract-session.js.map +0 -1
  302. package/dist/src/ee/extract-session.test.js.map +0 -1
  303. package/dist/src/ee/health.js.map +0 -1
  304. package/dist/src/ee/index.js.map +0 -1
  305. package/dist/src/ee/intercept.js.map +0 -1
  306. package/dist/src/ee/intercept.test.js.map +0 -1
  307. package/dist/src/ee/judge.js.map +0 -1
  308. package/dist/src/ee/judge.test.js.map +0 -1
  309. package/dist/src/ee/mistake-detector.js.map +0 -1
  310. package/dist/src/ee/mistake-detector.test.js.map +0 -1
  311. package/dist/src/ee/offline-queue.js.map +0 -1
  312. package/dist/src/ee/offline-queue.test.js.map +0 -1
  313. package/dist/src/ee/phase-outcome.js.map +0 -1
  314. package/dist/src/ee/phase-outcome.test.js.map +0 -1
  315. package/dist/src/ee/phase-tracker.js.map +0 -1
  316. package/dist/src/ee/phase-tracker.test.js.map +0 -1
  317. package/dist/src/ee/posttool.js.map +0 -1
  318. package/dist/src/ee/posttool.test.js.map +0 -1
  319. package/dist/src/ee/prompt-stale.js.map +0 -1
  320. package/dist/src/ee/prompt-stale.test.js.map +0 -1
  321. package/dist/src/ee/recall-ledger.js.map +0 -1
  322. package/dist/src/ee/recall-mirror.test.js.map +0 -1
  323. package/dist/src/ee/render.js.map +0 -1
  324. package/dist/src/ee/render.test.js.map +0 -1
  325. package/dist/src/ee/scope.js.map +0 -1
  326. package/dist/src/ee/scope.test.js.map +0 -1
  327. package/dist/src/ee/search.js.map +0 -1
  328. package/dist/src/ee/session-trajectory.js.map +0 -1
  329. package/dist/src/ee/session-trajectory.test.js.map +0 -1
  330. package/dist/src/ee/tenant.js.map +0 -1
  331. package/dist/src/ee/touch.test.js.map +0 -1
  332. package/dist/src/ee/transcript-emit.js.map +0 -1
  333. package/dist/src/ee/types.js.map +0 -1
  334. package/dist/src/flow/__tests__/migration.test.js.map +0 -1
  335. package/dist/src/flow/__tests__/parser.test.js.map +0 -1
  336. package/dist/src/flow/__tests__/run-manager-product.test.js.map +0 -1
  337. package/dist/src/flow/__tests__/run-manager.test.js.map +0 -1
  338. package/dist/src/flow/__tests__/scaffold-checkpoint.test.js.map +0 -1
  339. package/dist/src/flow/__tests__/scaffold.test.js.map +0 -1
  340. package/dist/src/flow/__tests__/warning-persist.test.js.map +0 -1
  341. package/dist/src/flow/artifact-io.js.map +0 -1
  342. package/dist/src/flow/compaction/__tests__/compress.test.js.map +0 -1
  343. package/dist/src/flow/compaction/__tests__/extract.test.js.map +0 -1
  344. package/dist/src/flow/compaction/__tests__/preserve.test.js.map +0 -1
  345. package/dist/src/flow/compaction/compress.js.map +0 -1
  346. package/dist/src/flow/compaction/extract.js.map +0 -1
  347. package/dist/src/flow/compaction/index.js.map +0 -1
  348. package/dist/src/flow/compaction/preserve.js.map +0 -1
  349. package/dist/src/flow/index.js.map +0 -1
  350. package/dist/src/flow/migration.js.map +0 -1
  351. package/dist/src/flow/parser.js.map +0 -1
  352. package/dist/src/flow/run-manager.js.map +0 -1
  353. package/dist/src/flow/scaffold-checkpoint.js.map +0 -1
  354. package/dist/src/flow/scaffold.js.map +0 -1
  355. package/dist/src/flow/warning-persist.js.map +0 -1
  356. package/dist/src/generated/version.js.map +0 -1
  357. package/dist/src/gsd/__tests__/complexity.test.js.map +0 -1
  358. package/dist/src/gsd/__tests__/directives.test.js.map +0 -1
  359. package/dist/src/gsd/__tests__/gray-areas.test.js.map +0 -1
  360. package/dist/src/gsd/__tests__/types.test.js.map +0 -1
  361. package/dist/src/gsd/complexity.js.map +0 -1
  362. package/dist/src/gsd/directives.js.map +0 -1
  363. package/dist/src/gsd/gray-areas.js.map +0 -1
  364. package/dist/src/gsd/index.js.map +0 -1
  365. package/dist/src/gsd/types.js.map +0 -1
  366. package/dist/src/headless/__tests__/council-answers.test.js.map +0 -1
  367. package/dist/src/headless/council-answers.js.map +0 -1
  368. package/dist/src/headless/output.js.map +0 -1
  369. package/dist/src/headless/output.test.js.map +0 -1
  370. package/dist/src/hooks/config.js.map +0 -1
  371. package/dist/src/hooks/index.js.map +0 -1
  372. package/dist/src/hooks/types.js.map +0 -1
  373. package/dist/src/index.js.map +0 -1
  374. package/dist/src/lsp/builtins.js.map +0 -1
  375. package/dist/src/lsp/builtins.test.js.map +0 -1
  376. package/dist/src/lsp/client.js.map +0 -1
  377. package/dist/src/lsp/manager.js.map +0 -1
  378. package/dist/src/lsp/manager.test.js.map +0 -1
  379. package/dist/src/lsp/npm-cache.js.map +0 -1
  380. package/dist/src/lsp/npm-cache.test.js.map +0 -1
  381. package/dist/src/lsp/runtime.js.map +0 -1
  382. package/dist/src/lsp/smoke.test.js.map +0 -1
  383. package/dist/src/lsp/types.js.map +0 -1
  384. package/dist/src/maintain/__tests__/codebase-intel.test.js.map +0 -1
  385. package/dist/src/maintain/__tests__/gh-create-pr.test.js.map +0 -1
  386. package/dist/src/maintain/__tests__/pr-builder.test.js.map +0 -1
  387. package/dist/src/maintain/__tests__/repo-map.test.js.map +0 -1
  388. package/dist/src/maintain/__tests__/task-runner.test.js.map +0 -1
  389. package/dist/src/maintain/codebase-intel.js.map +0 -1
  390. package/dist/src/maintain/gh-create-pr.js.map +0 -1
  391. package/dist/src/maintain/index.js.map +0 -1
  392. package/dist/src/maintain/pr-builder.js.map +0 -1
  393. package/dist/src/maintain/repo-map.js.map +0 -1
  394. package/dist/src/maintain/task-runner.js.map +0 -1
  395. package/dist/src/maintain/types.js.map +0 -1
  396. package/dist/src/mcp/__tests__/auto-setup.test.js.map +0 -1
  397. package/dist/src/mcp/__tests__/cap-tool-result.test.js.map +0 -1
  398. package/dist/src/mcp/__tests__/ee-tools.test.js.map +0 -1
  399. package/dist/src/mcp/__tests__/forensics-tools.test.js.map +0 -1
  400. package/dist/src/mcp/__tests__/harness-driver-action-tools.spec.js.map +0 -1
  401. package/dist/src/mcp/__tests__/harness-driver-async-tools.spec.js.map +0 -1
  402. package/dist/src/mcp/__tests__/harness-driver-read-tools.spec.js.map +0 -1
  403. package/dist/src/mcp/__tests__/harness-driver-security.spec.js.map +0 -1
  404. package/dist/src/mcp/__tests__/harness-driver.spec.js.map +0 -1
  405. package/dist/src/mcp/__tests__/lazy-schema.spec.js.map +0 -1
  406. package/dist/src/mcp/__tests__/lsp-tools.test.js.map +0 -1
  407. package/dist/src/mcp/__tests__/mcp-keychain.test.js.map +0 -1
  408. package/dist/src/mcp/__tests__/research-onboarding.test.js.map +0 -1
  409. package/dist/src/mcp/__tests__/runtime-hydration.test.js.map +0 -1
  410. package/dist/src/mcp/__tests__/runtime-output-cap.test.js.map +0 -1
  411. package/dist/src/mcp/__tests__/runtime-sanitize.test.js.map +0 -1
  412. package/dist/src/mcp/__tests__/self-verify-jobs.test.js.map +0 -1
  413. package/dist/src/mcp/__tests__/smart-filter.test.js.map +0 -1
  414. package/dist/src/mcp/__tests__/tools-server.smoke.test.js.map +0 -1
  415. package/dist/src/mcp/auto-setup.js.map +0 -1
  416. package/dist/src/mcp/cap-tool-result.js.map +0 -1
  417. package/dist/src/mcp/catalog.js.map +0 -1
  418. package/dist/src/mcp/ee-tools.js.map +0 -1
  419. package/dist/src/mcp/forensics-tools.js.map +0 -1
  420. package/dist/src/mcp/lsp-tools.js.map +0 -1
  421. package/dist/src/mcp/mcp-keychain.js.map +0 -1
  422. package/dist/src/mcp/oauth-callback.js.map +0 -1
  423. package/dist/src/mcp/oauth-provider.js.map +0 -1
  424. package/dist/src/mcp/opentui-spawn.js.map +0 -1
  425. package/dist/src/mcp/parse-headers.js.map +0 -1
  426. package/dist/src/mcp/parse-headers.test.js.map +0 -1
  427. package/dist/src/mcp/research-onboarding.js.map +0 -1
  428. package/dist/src/mcp/runtime.js.map +0 -1
  429. package/dist/src/mcp/self-verify-jobs.js.map +0 -1
  430. package/dist/src/mcp/smart-filter.js.map +0 -1
  431. package/dist/src/mcp/smoke.test.js.map +0 -1
  432. package/dist/src/mcp/tools-server.js.map +0 -1
  433. package/dist/src/mcp/validate.js.map +0 -1
  434. package/dist/src/models/__tests__/registry.test.js.map +0 -1
  435. package/dist/src/models/catalog-client.js.map +0 -1
  436. package/dist/src/models/catalog-gemini.test.js.map +0 -1
  437. package/dist/src/models/catalog-url.test.js.map +0 -1
  438. package/dist/src/models/catalog-validation.test.js.map +0 -1
  439. package/dist/src/models/classify-tier.js.map +0 -1
  440. package/dist/src/models/index.js.map +0 -1
  441. package/dist/src/models/registry.js.map +0 -1
  442. package/dist/src/ops/__tests__/doctor-council-mcp.test.js.map +0 -1
  443. package/dist/src/ops/__tests__/doctor-ee-health.test.js.map +0 -1
  444. package/dist/src/ops/bug-report.js.map +0 -1
  445. package/dist/src/ops/bug-report.test.js.map +0 -1
  446. package/dist/src/ops/doctor.js.map +0 -1
  447. package/dist/src/ops/doctor.test.js.map +0 -1
  448. package/dist/src/orchestrator/__tests__/agent-base-url-switch.test.js.map +0 -1
  449. package/dist/src/orchestrator/__tests__/batch-turn-runner.test.js.map +0 -1
  450. package/dist/src/orchestrator/__tests__/council-manager.test.js.map +0 -1
  451. package/dist/src/orchestrator/__tests__/cross-turn-dedup.test.js.map +0 -1
  452. package/dist/src/orchestrator/__tests__/current-call-id.test.js.map +0 -1
  453. package/dist/src/orchestrator/__tests__/error-forensics.test.js.map +0 -1
  454. package/dist/src/orchestrator/__tests__/flow-resume.test.js.map +0 -1
  455. package/dist/src/orchestrator/__tests__/humanize-api-error.test.js.map +0 -1
  456. package/dist/src/orchestrator/__tests__/message-processor.test.js.map +0 -1
  457. package/dist/src/orchestrator/__tests__/message-write-ahead.test.js.map +0 -1
  458. package/dist/src/orchestrator/__tests__/read-path-budget.test.js.map +0 -1
  459. package/dist/src/orchestrator/__tests__/retry-classifier.test.js.map +0 -1
  460. package/dist/src/orchestrator/__tests__/retry-stream.test.js.map +0 -1
  461. package/dist/src/orchestrator/__tests__/route-feedback.test.js.map +0 -1
  462. package/dist/src/orchestrator/__tests__/stream-runner.test.js.map +0 -1
  463. package/dist/src/orchestrator/__tests__/sub-agent-model-tier.test.js.map +0 -1
  464. package/dist/src/orchestrator/__tests__/usage-events-shape.test.js.map +0 -1
  465. package/dist/src/orchestrator/__tests__/usage-normalizer-c1.test.js.map +0 -1
  466. package/dist/src/orchestrator/__tests__/usage-shape-threading.test.js.map +0 -1
  467. package/dist/src/orchestrator/__tests__/write-ahead.test.js.map +0 -1
  468. package/dist/src/orchestrator/abort.js.map +0 -1
  469. package/dist/src/orchestrator/abort.test.js.map +0 -1
  470. package/dist/src/orchestrator/agent-options.js.map +0 -1
  471. package/dist/src/orchestrator/agent.test.js.map +0 -1
  472. package/dist/src/orchestrator/batch-turn-runner.js.map +0 -1
  473. package/dist/src/orchestrator/batch-utils.js.map +0 -1
  474. package/dist/src/orchestrator/cleanup.test.js.map +0 -1
  475. package/dist/src/orchestrator/compaction.js.map +0 -1
  476. package/dist/src/orchestrator/compaction.test.js.map +0 -1
  477. package/dist/src/orchestrator/council-manager.js.map +0 -1
  478. package/dist/src/orchestrator/cross-turn-dedup.js.map +0 -1
  479. package/dist/src/orchestrator/delegations.js.map +0 -1
  480. package/dist/src/orchestrator/delegations.test.js.map +0 -1
  481. package/dist/src/orchestrator/error-utils.js.map +0 -1
  482. package/dist/src/orchestrator/flow-resume.js.map +0 -1
  483. package/dist/src/orchestrator/grounding-check.js.map +0 -1
  484. package/dist/src/orchestrator/grounding-check.test.js.map +0 -1
  485. package/dist/src/orchestrator/interrupted-turn.js.map +0 -1
  486. package/dist/src/orchestrator/interrupted-turn.test.js.map +0 -1
  487. package/dist/src/orchestrator/message-processor.js.map +0 -1
  488. package/dist/src/orchestrator/message-seq.js.map +0 -1
  489. package/dist/src/orchestrator/message-seq.test.js.map +0 -1
  490. package/dist/src/orchestrator/orchestrator.js.map +0 -1
  491. package/dist/src/orchestrator/pending-calls.js.map +0 -1
  492. package/dist/src/orchestrator/pending-calls.test.js.map +0 -1
  493. package/dist/src/orchestrator/prompts.js.map +0 -1
  494. package/dist/src/orchestrator/provider-options-shape.js.map +0 -1
  495. package/dist/src/orchestrator/provider-options-shape.spec.js.map +0 -1
  496. package/dist/src/orchestrator/read-path-budget.js.map +0 -1
  497. package/dist/src/orchestrator/reasoning.js.map +0 -1
  498. package/dist/src/orchestrator/reasoning.test.js.map +0 -1
  499. package/dist/src/orchestrator/repair-tool-call.js.map +0 -1
  500. package/dist/src/orchestrator/repetition-detector.js.map +0 -1
  501. package/dist/src/orchestrator/repetition-detector.test.js.map +0 -1
  502. package/dist/src/orchestrator/retry-classifier.js.map +0 -1
  503. package/dist/src/orchestrator/retry-stream.js.map +0 -1
  504. package/dist/src/orchestrator/sandbox.test.js.map +0 -1
  505. package/dist/src/orchestrator/scope-ceiling.js.map +0 -1
  506. package/dist/src/orchestrator/scope-ceiling.test.js.map +0 -1
  507. package/dist/src/orchestrator/scope-reminder.js.map +0 -1
  508. package/dist/src/orchestrator/scope-reminder.test.js.map +0 -1
  509. package/dist/src/orchestrator/stall-rescue.js.map +0 -1
  510. package/dist/src/orchestrator/stall-rescue.test.js.map +0 -1
  511. package/dist/src/orchestrator/stall-watchdog.js.map +0 -1
  512. package/dist/src/orchestrator/stall-watchdog.test.js.map +0 -1
  513. package/dist/src/orchestrator/stream-runner.js.map +0 -1
  514. package/dist/src/orchestrator/sub-agent-cap.js.map +0 -1
  515. package/dist/src/orchestrator/sub-agent-cap.test.js.map +0 -1
  516. package/dist/src/orchestrator/sub-agent-model-tier.js.map +0 -1
  517. package/dist/src/orchestrator/subagent-compactor.js.map +0 -1
  518. package/dist/src/orchestrator/subagent-compactor.spec.js.map +0 -1
  519. package/dist/src/orchestrator/text-tool-call-detector.js.map +0 -1
  520. package/dist/src/orchestrator/text-tool-call-detector.test.js.map +0 -1
  521. package/dist/src/orchestrator/token-counter.js.map +0 -1
  522. package/dist/src/orchestrator/token-counter.test.js.map +0 -1
  523. package/dist/src/orchestrator/tool-args-hash.js.map +0 -1
  524. package/dist/src/orchestrator/tool-args-hash.test.js.map +0 -1
  525. package/dist/src/orchestrator/tool-args-repair.js.map +0 -1
  526. package/dist/src/orchestrator/tool-args-repair.test.js.map +0 -1
  527. package/dist/src/orchestrator/tool-loop-cap.js.map +0 -1
  528. package/dist/src/orchestrator/tool-loop-cap.test.js.map +0 -1
  529. package/dist/src/orchestrator/tool-repetition-detector.js.map +0 -1
  530. package/dist/src/orchestrator/tool-repetition-detector.test.js.map +0 -1
  531. package/dist/src/orchestrator/tool-utils.js.map +0 -1
  532. package/dist/src/orchestrator/turn-runner-deps.js.map +0 -1
  533. package/dist/src/pil/__tests__/budget.test.js.map +0 -1
  534. package/dist/src/pil/__tests__/clarity-gate.test.js.map +0 -1
  535. package/dist/src/pil/__tests__/config.test.js.map +0 -1
  536. package/dist/src/pil/__tests__/discovery-cache.test.js.map +0 -1
  537. package/dist/src/pil/__tests__/discovery-types.test.js.map +0 -1
  538. package/dist/src/pil/__tests__/discovery.test.js.map +0 -1
  539. package/dist/src/pil/__tests__/dual-run.test.js.map +0 -1
  540. package/dist/src/pil/__tests__/layer1-intent-trace.test.js.map +0 -1
  541. package/dist/src/pil/__tests__/layer1-intent.test.js.map +0 -1
  542. package/dist/src/pil/__tests__/layer15-context-scan.test.js.map +0 -1
  543. package/dist/src/pil/__tests__/layer16-clarity.test.js.map +0 -1
  544. package/dist/src/pil/__tests__/layer17-feasibility.test.js.map +0 -1
  545. package/dist/src/pil/__tests__/layer18-acceptance.test.js.map +0 -1
  546. package/dist/src/pil/__tests__/layer2-personality.test.js.map +0 -1
  547. package/dist/src/pil/__tests__/layer3-ee-injection.test.js.map +0 -1
  548. package/dist/src/pil/__tests__/layer3-injected-chunk.test.js.map +0 -1
  549. package/dist/src/pil/__tests__/layer4-gsd.test.js.map +0 -1
  550. package/dist/src/pil/__tests__/layer5-context.test.js.map +0 -1
  551. package/dist/src/pil/__tests__/layer6-output.test.js.map +0 -1
  552. package/dist/src/pil/__tests__/llm-classify.test.js.map +0 -1
  553. package/dist/src/pil/__tests__/native-capabilities-workbook.test.js.map +0 -1
  554. package/dist/src/pil/__tests__/ollama-classify.test.js.map +0 -1
  555. package/dist/src/pil/__tests__/orchestrator-integration.test.js.map +0 -1
  556. package/dist/src/pil/__tests__/pipeline.test.js.map +0 -1
  557. package/dist/src/pil/__tests__/renderer-coverage.test.js.map +0 -1
  558. package/dist/src/pil/__tests__/response-tools.test.js.map +0 -1
  559. package/dist/src/pil/__tests__/schema.test.js.map +0 -1
  560. package/dist/src/pil/__tests__/scoreComplexity.test.js.map +0 -1
  561. package/dist/src/pil/__tests__/scoreSufficiency.test.js.map +0 -1
  562. package/dist/src/pil/__tests__/store.test.js.map +0 -1
  563. package/dist/src/pil/__tests__/task-tier-map.test.js.map +0 -1
  564. package/dist/src/pil/agent-operating-contract.js.map +0 -1
  565. package/dist/src/pil/agent-operating-contract.test.js.map +0 -1
  566. package/dist/src/pil/budget-log.js.map +0 -1
  567. package/dist/src/pil/budget.js.map +0 -1
  568. package/dist/src/pil/cheap-model-playbook.js.map +0 -1
  569. package/dist/src/pil/cheap-model-playbook.test.js.map +0 -1
  570. package/dist/src/pil/cheap-model-workbooks.js.map +0 -1
  571. package/dist/src/pil/cheap-model-workbooks.test.js.map +0 -1
  572. package/dist/src/pil/clarity-gate.js.map +0 -1
  573. package/dist/src/pil/config.js.map +0 -1
  574. package/dist/src/pil/discovery-cache.js.map +0 -1
  575. package/dist/src/pil/discovery-types.js.map +0 -1
  576. package/dist/src/pil/discovery.js.map +0 -1
  577. package/dist/src/pil/index.js.map +0 -1
  578. package/dist/src/pil/layer1-intent.js.map +0 -1
  579. package/dist/src/pil/layer1-intent.test.js.map +0 -1
  580. package/dist/src/pil/layer15-context-scan.js.map +0 -1
  581. package/dist/src/pil/layer16-clarity.js.map +0 -1
  582. package/dist/src/pil/layer16-clarity.test.js +0 -31
  583. package/dist/src/pil/layer16-clarity.test.js.map +0 -1
  584. package/dist/src/pil/layer17-feasibility.js.map +0 -1
  585. package/dist/src/pil/layer18-acceptance.js.map +0 -1
  586. package/dist/src/pil/layer1_5-complexity-size.js.map +0 -1
  587. package/dist/src/pil/layer1_5-complexity-size.test.js.map +0 -1
  588. package/dist/src/pil/layer2-personality.js.map +0 -1
  589. package/dist/src/pil/layer3-ee-injection.js.map +0 -1
  590. package/dist/src/pil/layer4-gsd.js.map +0 -1
  591. package/dist/src/pil/layer5-context.js.map +0 -1
  592. package/dist/src/pil/layer6-output.js.map +0 -1
  593. package/dist/src/pil/llm-classify.js.map +0 -1
  594. package/dist/src/pil/native-capabilities-workbook.js.map +0 -1
  595. package/dist/src/pil/ollama-classify.js.map +0 -1
  596. package/dist/src/pil/pipeline.js.map +0 -1
  597. package/dist/src/pil/response-tools.js.map +0 -1
  598. package/dist/src/pil/schema.js.map +0 -1
  599. package/dist/src/pil/session-state.js.map +0 -1
  600. package/dist/src/pil/session-state.test.js.map +0 -1
  601. package/dist/src/pil/store.js.map +0 -1
  602. package/dist/src/pil/task-tier-map.js.map +0 -1
  603. package/dist/src/pil/timeout.js.map +0 -1
  604. package/dist/src/pil/types.js.map +0 -1
  605. package/dist/src/product-loop/__tests__/artifact-io.test.js.map +0 -1
  606. package/dist/src/product-loop/__tests__/assumption-ledger.test.js.map +0 -1
  607. package/dist/src/product-loop/__tests__/backlog-builder.test.js.map +0 -1
  608. package/dist/src/product-loop/__tests__/backlog-store.test.js.map +0 -1
  609. package/dist/src/product-loop/__tests__/cb2-retry-bonus.test.js.map +0 -1
  610. package/dist/src/product-loop/__tests__/circuit-breakers-coverage.test.js.map +0 -1
  611. package/dist/src/product-loop/__tests__/circuit-breakers.test.js.map +0 -1
  612. package/dist/src/product-loop/__tests__/complexity-routing.spec.js.map +0 -1
  613. package/dist/src/product-loop/__tests__/context-policy.test.js.map +0 -1
  614. package/dist/src/product-loop/__tests__/cost-preview.test.js.map +0 -1
  615. package/dist/src/product-loop/__tests__/cost-scoper.test.js.map +0 -1
  616. package/dist/src/product-loop/__tests__/cross-run-memory.test.js.map +0 -1
  617. package/dist/src/product-loop/__tests__/design-output.spec.js.map +0 -1
  618. package/dist/src/product-loop/__tests__/discover.test.js.map +0 -1
  619. package/dist/src/product-loop/__tests__/discovery-context-format.test.js.map +0 -1
  620. package/dist/src/product-loop/__tests__/discovery-council-runner.test.js.map +0 -1
  621. package/dist/src/product-loop/__tests__/discovery-detection.test.js.map +0 -1
  622. package/dist/src/product-loop/__tests__/discovery-ecosystem.test.js.map +0 -1
  623. package/dist/src/product-loop/__tests__/discovery-integration.test.js.map +0 -1
  624. package/dist/src/product-loop/__tests__/discovery-interview.test.js.map +0 -1
  625. package/dist/src/product-loop/__tests__/discovery-migrations.test.js.map +0 -1
  626. package/dist/src/product-loop/__tests__/discovery-persistence.test.js.map +0 -1
  627. package/dist/src/product-loop/__tests__/discovery-prompt-parser.test.js.map +0 -1
  628. package/dist/src/product-loop/__tests__/discovery-prompt-specificity.test.js.map +0 -1
  629. package/dist/src/product-loop/__tests__/discovery-recommender-ecosystem.test.js.map +0 -1
  630. package/dist/src/product-loop/__tests__/discovery-recommender.test.js.map +0 -1
  631. package/dist/src/product-loop/__tests__/discovery-schema.test.js.map +0 -1
  632. package/dist/src/product-loop/__tests__/done-gate-coverage.test.js.map +0 -1
  633. package/dist/src/product-loop/__tests__/done-gate.test.js.map +0 -1
  634. package/dist/src/product-loop/__tests__/ee-extract-wiring.test.js.map +0 -1
  635. package/dist/src/product-loop/__tests__/extract-to-ee.test.js.map +0 -1
  636. package/dist/src/product-loop/__tests__/feedback-routing.test.js.map +0 -1
  637. package/dist/src/product-loop/__tests__/gather-selectable-alts.test.js.map +0 -1
  638. package/dist/src/product-loop/__tests__/hot-path.spec.js.map +0 -1
  639. package/dist/src/product-loop/__tests__/integration.test.js.map +0 -1
  640. package/dist/src/product-loop/__tests__/loop-driver-audit.test.js.map +0 -1
  641. package/dist/src/product-loop/__tests__/loop-driver.test.js.map +0 -1
  642. package/dist/src/product-loop/__tests__/maintenance-task-synthesis.test.js.map +0 -1
  643. package/dist/src/product-loop/__tests__/phase-a1-a3-sprint-runner.test.js.map +0 -1
  644. package/dist/src/product-loop/__tests__/phase-a2-backlog-build.test.js.map +0 -1
  645. package/dist/src/product-loop/__tests__/phase-budget.test.js.map +0 -1
  646. package/dist/src/product-loop/__tests__/phase-orchestrator-integration.test.js.map +0 -1
  647. package/dist/src/product-loop/__tests__/phase-plan.test.js.map +0 -1
  648. package/dist/src/product-loop/__tests__/phase-rituals.test.js.map +0 -1
  649. package/dist/src/product-loop/__tests__/phase-runner.test.js.map +0 -1
  650. package/dist/src/product-loop/__tests__/phase-tracker-bridge.test.js.map +0 -1
  651. package/dist/src/product-loop/__tests__/pick-backend-stack.test.js.map +0 -1
  652. package/dist/src/product-loop/__tests__/product-identity.test.js.map +0 -1
  653. package/dist/src/product-loop/__tests__/progress-snapshot.test.js.map +0 -1
  654. package/dist/src/product-loop/__tests__/reality-anchor.test.js.map +0 -1
  655. package/dist/src/product-loop/__tests__/repo-audit.test.js.map +0 -1
  656. package/dist/src/product-loop/__tests__/repo-brief.test.js.map +0 -1
  657. package/dist/src/product-loop/__tests__/role-memory.test.js.map +0 -1
  658. package/dist/src/product-loop/__tests__/role-registry.test.js.map +0 -1
  659. package/dist/src/product-loop/__tests__/role-routing-ee.test.js.map +0 -1
  660. package/dist/src/product-loop/__tests__/route-decision-emit.test.js.map +0 -1
  661. package/dist/src/product-loop/__tests__/seed-questions.test.js.map +0 -1
  662. package/dist/src/product-loop/__tests__/ship-polish.test.js.map +0 -1
  663. package/dist/src/product-loop/__tests__/sprint-planner.test.js.map +0 -1
  664. package/dist/src/product-loop/__tests__/sprint-runner-backlog.test.js.map +0 -1
  665. package/dist/src/product-loop/__tests__/sprint-runner-emit.test.js.map +0 -1
  666. package/dist/src/product-loop/__tests__/sprint-runner-phase-chunks.test.js.map +0 -1
  667. package/dist/src/product-loop/__tests__/sprint-runner.test.js.map +0 -1
  668. package/dist/src/product-loop/__tests__/sprint-self-verify.test.js.map +0 -1
  669. package/dist/src/product-loop/__tests__/sprint-store.test.js.map +0 -1
  670. package/dist/src/product-loop/__tests__/stakeholder-acl.test.js.map +0 -1
  671. package/dist/src/product-loop/__tests__/state-md-ee-injections.test.js.map +0 -1
  672. package/dist/src/product-loop/__tests__/sufficiency-routing.spec.js.map +0 -1
  673. package/dist/src/product-loop/__tests__/typed-artifacts.test.js.map +0 -1
  674. package/dist/src/product-loop/__tests__/types.test.js.map +0 -1
  675. package/dist/src/product-loop/__tests__/verify-failure-threshold.test.js.map +0 -1
  676. package/dist/src/product-loop/__tests__/verify-failure-tracking.test.js.map +0 -1
  677. package/dist/src/product-loop/__tests__/verify-result.test.js.map +0 -1
  678. package/dist/src/product-loop/artifact-io.js.map +0 -1
  679. package/dist/src/product-loop/assumption-ledger.js.map +0 -1
  680. package/dist/src/product-loop/backlog-builder.js.map +0 -1
  681. package/dist/src/product-loop/backlog-store.js.map +0 -1
  682. package/dist/src/product-loop/circuit-breakers.js.map +0 -1
  683. package/dist/src/product-loop/context-policy.js.map +0 -1
  684. package/dist/src/product-loop/cost-preview.js.map +0 -1
  685. package/dist/src/product-loop/cost-scoper.js.map +0 -1
  686. package/dist/src/product-loop/cross-run-memory.js.map +0 -1
  687. package/dist/src/product-loop/design-output.js.map +0 -1
  688. package/dist/src/product-loop/discover.js.map +0 -1
  689. package/dist/src/product-loop/discovery-context-format.js.map +0 -1
  690. package/dist/src/product-loop/discovery-council-runner.js.map +0 -1
  691. package/dist/src/product-loop/discovery-detection.js.map +0 -1
  692. package/dist/src/product-loop/discovery-ecosystem.js.map +0 -1
  693. package/dist/src/product-loop/discovery-interview.js.map +0 -1
  694. package/dist/src/product-loop/discovery-migrations.js.map +0 -1
  695. package/dist/src/product-loop/discovery-persistence.js.map +0 -1
  696. package/dist/src/product-loop/discovery-prompt-parser.js.map +0 -1
  697. package/dist/src/product-loop/discovery-recommender.js.map +0 -1
  698. package/dist/src/product-loop/discovery-schema.js.map +0 -1
  699. package/dist/src/product-loop/done-gate.js.map +0 -1
  700. package/dist/src/product-loop/feedback-routing.js.map +0 -1
  701. package/dist/src/product-loop/gather.js.map +0 -1
  702. package/dist/src/product-loop/index.js.map +0 -1
  703. package/dist/src/product-loop/loop-driver.js.map +0 -1
  704. package/dist/src/product-loop/phase-budget.js.map +0 -1
  705. package/dist/src/product-loop/phase-plan.js.map +0 -1
  706. package/dist/src/product-loop/phase-rituals.js.map +0 -1
  707. package/dist/src/product-loop/phase-runner.js.map +0 -1
  708. package/dist/src/product-loop/phase-tracker-bridge.js.map +0 -1
  709. package/dist/src/product-loop/product-identity.js.map +0 -1
  710. package/dist/src/product-loop/progress-snapshot.js.map +0 -1
  711. package/dist/src/product-loop/reality-anchor.js.map +0 -1
  712. package/dist/src/product-loop/repo-audit.js.map +0 -1
  713. package/dist/src/product-loop/repo-brief.js.map +0 -1
  714. package/dist/src/product-loop/role-memory.js.map +0 -1
  715. package/dist/src/product-loop/role-registry.js.map +0 -1
  716. package/dist/src/product-loop/seed-questions.js.map +0 -1
  717. package/dist/src/product-loop/ship-polish.js.map +0 -1
  718. package/dist/src/product-loop/sprint-planner.js.map +0 -1
  719. package/dist/src/product-loop/sprint-runner.js.map +0 -1
  720. package/dist/src/product-loop/sprint-self-verify.js.map +0 -1
  721. package/dist/src/product-loop/sprint-store.js.map +0 -1
  722. package/dist/src/product-loop/stakeholder-acl.js.map +0 -1
  723. package/dist/src/product-loop/typed-artifacts.js.map +0 -1
  724. package/dist/src/product-loop/types.js.map +0 -1
  725. package/dist/src/product-loop/verify-failure-tracking.js.map +0 -1
  726. package/dist/src/product-loop/verify-result.js.map +0 -1
  727. package/dist/src/providers/__test-utils__/load-fixture.js.map +0 -1
  728. package/dist/src/providers/__tests__/adapter-oauth-wiring.test.js.map +0 -1
  729. package/dist/src/providers/__tests__/capabilities-cosmetic.test.js.map +0 -1
  730. package/dist/src/providers/__tests__/capabilities-flags.test.js.map +0 -1
  731. package/dist/src/providers/__tests__/capabilities-provider-options.test.js.map +0 -1
  732. package/dist/src/providers/__tests__/capabilities-sanitize.test.js.map +0 -1
  733. package/dist/src/providers/__tests__/capabilities.test.js.map +0 -1
  734. package/dist/src/providers/__tests__/provider-coverage.test.js.map +0 -1
  735. package/dist/src/providers/__tests__/reasoning-roundtrip.test.js.map +0 -1
  736. package/dist/src/providers/__tests__/runtime-integration.test.js.map +0 -1
  737. package/dist/src/providers/__tests__/runtime.test.js.map +0 -1
  738. package/dist/src/providers/__tests__/siliconflow-sse-repair.test.js.map +0 -1
  739. package/dist/src/providers/__tests__/strategies-registry.test.js.map +0 -1
  740. package/dist/src/providers/__tests__/strategies-resolve.test.js.map +0 -1
  741. package/dist/src/providers/__tests__/wire-debug.test.js.map +0 -1
  742. package/dist/src/providers/adapter.js.map +0 -1
  743. package/dist/src/providers/adapter.test.js.map +0 -1
  744. package/dist/src/providers/anthropic.js.map +0 -1
  745. package/dist/src/providers/auth/__tests__/browser-flow.test.js.map +0 -1
  746. package/dist/src/providers/auth/__tests__/device-flow.test.js.map +0 -1
  747. package/dist/src/providers/auth/__tests__/gemini-oauth.test.js.map +0 -1
  748. package/dist/src/providers/auth/__tests__/grok-oauth.test.js.map +0 -1
  749. package/dist/src/providers/auth/__tests__/openai-oauth.test.js.map +0 -1
  750. package/dist/src/providers/auth/__tests__/token-store.test.js.map +0 -1
  751. package/dist/src/providers/auth/browser-flow.js.map +0 -1
  752. package/dist/src/providers/auth/device-flow.js.map +0 -1
  753. package/dist/src/providers/auth/gemini-oauth.js.map +0 -1
  754. package/dist/src/providers/auth/grok-oauth.js.map +0 -1
  755. package/dist/src/providers/auth/openai-oauth.js.map +0 -1
  756. package/dist/src/providers/auth/registry.js.map +0 -1
  757. package/dist/src/providers/auth/token-store.js.map +0 -1
  758. package/dist/src/providers/auth/types.js.map +0 -1
  759. package/dist/src/providers/capabilities.js.map +0 -1
  760. package/dist/src/providers/endpoints.js.map +0 -1
  761. package/dist/src/providers/errors.js.map +0 -1
  762. package/dist/src/providers/errors.test.js.map +0 -1
  763. package/dist/src/providers/gemini.js.map +0 -1
  764. package/dist/src/providers/gemini.test.js.map +0 -1
  765. package/dist/src/providers/index.js.map +0 -1
  766. package/dist/src/providers/keychain.js.map +0 -1
  767. package/dist/src/providers/keychain.test.js.map +0 -1
  768. package/dist/src/providers/mcp-vision-bridge.js.map +0 -1
  769. package/dist/src/providers/mcp-vision-bridge.test.js.map +0 -1
  770. package/dist/src/providers/ollama.js.map +0 -1
  771. package/dist/src/providers/ollama.test.js.map +0 -1
  772. package/dist/src/providers/openai-compatible.js.map +0 -1
  773. package/dist/src/providers/openai-compatible.test.js.map +0 -1
  774. package/dist/src/providers/openai.js.map +0 -1
  775. package/dist/src/providers/openai.test.js.map +0 -1
  776. package/dist/src/providers/patch-zod-schema.js.map +0 -1
  777. package/dist/src/providers/pricing.js.map +0 -1
  778. package/dist/src/providers/pricing.test.js.map +0 -1
  779. package/dist/src/providers/prompt-cache-key.spec.js.map +0 -1
  780. package/dist/src/providers/runtime-mock.spec.js.map +0 -1
  781. package/dist/src/providers/runtime.js.map +0 -1
  782. package/dist/src/providers/siliconflow-sse-repair.js.map +0 -1
  783. package/dist/src/providers/strategies/anthropic.strategy.js.map +0 -1
  784. package/dist/src/providers/strategies/base.strategy.js.map +0 -1
  785. package/dist/src/providers/strategies/deepseek.strategy.js.map +0 -1
  786. package/dist/src/providers/strategies/google.strategy.js.map +0 -1
  787. package/dist/src/providers/strategies/ollama.strategy.js.map +0 -1
  788. package/dist/src/providers/strategies/openai.strategy.js.map +0 -1
  789. package/dist/src/providers/strategies/registry.js.map +0 -1
  790. package/dist/src/providers/strategies/siliconflow.strategy.js.map +0 -1
  791. package/dist/src/providers/strategies/xai.strategy.js.map +0 -1
  792. package/dist/src/providers/stream-loop.js.map +0 -1
  793. package/dist/src/providers/types.js.map +0 -1
  794. package/dist/src/providers/vision-proxy.js.map +0 -1
  795. package/dist/src/providers/vision-proxy.test.js.map +0 -1
  796. package/dist/src/providers/wire-debug.js.map +0 -1
  797. package/dist/src/reporter/__tests__/acl-check.test.js.map +0 -1
  798. package/dist/src/reporter/__tests__/auto-fire.test.js.map +0 -1
  799. package/dist/src/reporter/__tests__/budget.test.js.map +0 -1
  800. package/dist/src/reporter/__tests__/handlers.test.js.map +0 -1
  801. package/dist/src/reporter/__tests__/query-router.test.js.map +0 -1
  802. package/dist/src/reporter/acl-check.js.map +0 -1
  803. package/dist/src/reporter/auto-fire.js.map +0 -1
  804. package/dist/src/reporter/budget.js.map +0 -1
  805. package/dist/src/reporter/handlers.js.map +0 -1
  806. package/dist/src/reporter/index.js.map +0 -1
  807. package/dist/src/reporter/query-router.js.map +0 -1
  808. package/dist/src/router/__tests__/step-router.test.js.map +0 -1
  809. package/dist/src/router/classifier/grammars.js.map +0 -1
  810. package/dist/src/router/classifier/index.js.map +0 -1
  811. package/dist/src/router/classifier/index.test.js.map +0 -1
  812. package/dist/src/router/classifier/regex.js.map +0 -1
  813. package/dist/src/router/classifier/regex.test.js.map +0 -1
  814. package/dist/src/router/classifier/tree-sitter.js.map +0 -1
  815. package/dist/src/router/classifier/tree-sitter.test.js.map +0 -1
  816. package/dist/src/router/cold.js.map +0 -1
  817. package/dist/src/router/cold.test.js.map +0 -1
  818. package/dist/src/router/decide.js.map +0 -1
  819. package/dist/src/router/decide.test.js.map +0 -1
  820. package/dist/src/router/health.js.map +0 -1
  821. package/dist/src/router/health.test.js.map +0 -1
  822. package/dist/src/router/provider-sentinel.js.map +0 -1
  823. package/dist/src/router/provider-sentinel.test.js.map +0 -1
  824. package/dist/src/router/role-override.test.js.map +0 -1
  825. package/dist/src/router/step-router.js.map +0 -1
  826. package/dist/src/router/store.js.map +0 -1
  827. package/dist/src/router/types.js.map +0 -1
  828. package/dist/src/router/warm.js.map +0 -1
  829. package/dist/src/router/warm.test.js.map +0 -1
  830. package/dist/src/scaffold/__tests__/continuation-prompt.test.js.map +0 -1
  831. package/dist/src/scaffold/__tests__/continue-as-council.spec.js.map +0 -1
  832. package/dist/src/scaffold/__tests__/dotnet-assembly-name.test.js.map +0 -1
  833. package/dist/src/scaffold/__tests__/fe-scaffold-contents.test.js.map +0 -1
  834. package/dist/src/scaffold/__tests__/init-new.smoke.spec.js.map +0 -1
  835. package/dist/src/scaffold/__tests__/init-new.spec.js.map +0 -1
  836. package/dist/src/scaffold/__tests__/install-bb-templates.spec.js.map +0 -1
  837. package/dist/src/scaffold/__tests__/point-to-existing.spec.js.map +0 -1
  838. package/dist/src/scaffold/bb-ecosystem-apply.js.map +0 -1
  839. package/dist/src/scaffold/bb-quality-gate.js.map +0 -1
  840. package/dist/src/scaffold/continuation-prompt.js.map +0 -1
  841. package/dist/src/scaffold/continue-as-council.js.map +0 -1
  842. package/dist/src/scaffold/init-new.js.map +0 -1
  843. package/dist/src/scaffold/point-to-existing.js.map +0 -1
  844. package/dist/src/scaffold/resume-from-gate-failures.js.map +0 -1
  845. package/dist/src/self-qa/__tests__/agentic-context.test.js.map +0 -1
  846. package/dist/src/self-qa/__tests__/agentic-loop.test.js.map +0 -1
  847. package/dist/src/self-qa/__tests__/delta-encoder.test.js.map +0 -1
  848. package/dist/src/self-qa/__tests__/judge.test.js.map +0 -1
  849. package/dist/src/self-qa/__tests__/scenario-planner.test.js.map +0 -1
  850. package/dist/src/self-qa/__tests__/spec-emitter.test.js.map +0 -1
  851. package/dist/src/self-qa/agentic-context.js.map +0 -1
  852. package/dist/src/self-qa/agentic-loop.js.map +0 -1
  853. package/dist/src/self-qa/delta-encoder.js.map +0 -1
  854. package/dist/src/self-qa/index.js.map +0 -1
  855. package/dist/src/self-qa/judge.js.map +0 -1
  856. package/dist/src/self-qa/orchestrator.js.map +0 -1
  857. package/dist/src/self-qa/scenario-planner.js.map +0 -1
  858. package/dist/src/self-qa/spec-emitter.js.map +0 -1
  859. package/dist/src/self-qa/types.js.map +0 -1
  860. package/dist/src/storage/__tests__/migrations.test.js.map +0 -1
  861. package/dist/src/storage/__tests__/sweep-stale-pending.test.js.map +0 -1
  862. package/dist/src/storage/__tests__/ui-interaction-log.test.js.map +0 -1
  863. package/dist/src/storage/atomic-io.js.map +0 -1
  864. package/dist/src/storage/atomic-io.test.js.map +0 -1
  865. package/dist/src/storage/config.js.map +0 -1
  866. package/dist/src/storage/config.test.js.map +0 -1
  867. package/dist/src/storage/db.js.map +0 -1
  868. package/dist/src/storage/index.js.map +0 -1
  869. package/dist/src/storage/interaction-log.js.map +0 -1
  870. package/dist/src/storage/migrations.js.map +0 -1
  871. package/dist/src/storage/session-dir.js.map +0 -1
  872. package/dist/src/storage/sessions.js.map +0 -1
  873. package/dist/src/storage/tool-results.js.map +0 -1
  874. package/dist/src/storage/transcript-response-entry.test.js.map +0 -1
  875. package/dist/src/storage/transcript-view.js.map +0 -1
  876. package/dist/src/storage/transcript.js.map +0 -1
  877. package/dist/src/storage/transcript.test.js.map +0 -1
  878. package/dist/src/storage/ui-interaction-log.js.map +0 -1
  879. package/dist/src/storage/usage-cap.js.map +0 -1
  880. package/dist/src/storage/usage-cap.test.js.map +0 -1
  881. package/dist/src/storage/usage.js.map +0 -1
  882. package/dist/src/storage/workspaces.js.map +0 -1
  883. package/dist/src/tools/__tests__/vision-gate.test.js.map +0 -1
  884. package/dist/src/tools/bash-output-cache.js.map +0 -1
  885. package/dist/src/tools/bash-output-cache.test.js.map +0 -1
  886. package/dist/src/tools/bash-output-integration.test.js.map +0 -1
  887. package/dist/src/tools/bash.js.map +0 -1
  888. package/dist/src/tools/bash.test.js.map +0 -1
  889. package/dist/src/tools/computer.js.map +0 -1
  890. package/dist/src/tools/computer.test.js.map +0 -1
  891. package/dist/src/tools/file-tracker.js.map +0 -1
  892. package/dist/src/tools/file-tracker.test.js.map +0 -1
  893. package/dist/src/tools/file.js.map +0 -1
  894. package/dist/src/tools/file.test.js.map +0 -1
  895. package/dist/src/tools/grep.js.map +0 -1
  896. package/dist/src/tools/registry-bash-empty-command.test.js.map +0 -1
  897. package/dist/src/tools/registry-bash-footer.test.js.map +0 -1
  898. package/dist/src/tools/registry-ee-query.test.js.map +0 -1
  899. package/dist/src/tools/registry-session-repeat.test.js.map +0 -1
  900. package/dist/src/tools/registry.js.map +0 -1
  901. package/dist/src/tools/registry.test.js.map +0 -1
  902. package/dist/src/tools/schedule.js.map +0 -1
  903. package/dist/src/tools/schedule.test.js.map +0 -1
  904. package/dist/src/tools/todo-write-snapshot.js.map +0 -1
  905. package/dist/src/tools/todo-write-snapshot.test.js.map +0 -1
  906. package/dist/src/tools/vision-gate.js.map +0 -1
  907. package/dist/src/types/index.js.map +0 -1
  908. package/dist/src/ui/__tests__/picker-providers.test.js.map +0 -1
  909. package/dist/src/ui/agents-modal.js.map +0 -1
  910. package/dist/src/ui/app.js.map +0 -1
  911. package/dist/src/ui/cards/__tests__/product-status-card.test.js.map +0 -1
  912. package/dist/src/ui/cards/product-status-card.js.map +0 -1
  913. package/dist/src/ui/components/SuggestionOverlay.js.map +0 -1
  914. package/dist/src/ui/components/Toast.js.map +0 -1
  915. package/dist/src/ui/components/__tests__/council-leader-bubble.test.js.map +0 -1
  916. package/dist/src/ui/components/__tests__/council-message-bubble.test.js.map +0 -1
  917. package/dist/src/ui/components/__tests__/council-phase-timeline.test.js.map +0 -1
  918. package/dist/src/ui/components/__tests__/council-placeholder-bubble.test.js.map +0 -1
  919. package/dist/src/ui/components/__tests__/council-question-card.test.js.map +0 -1
  920. package/dist/src/ui/components/__tests__/council-synthesis-banner.test.js.map +0 -1
  921. package/dist/src/ui/components/__tests__/task-list-panel.test.js.map +0 -1
  922. package/dist/src/ui/components/__tests__/use-pair-quote-buffer.test.js.map +0 -1
  923. package/dist/src/ui/components/btw-overlay.js.map +0 -1
  924. package/dist/src/ui/components/bubble-layout.js.map +0 -1
  925. package/dist/src/ui/components/code-block-truncate.js.map +0 -1
  926. package/dist/src/ui/components/copy-flash-banner.js.map +0 -1
  927. package/dist/src/ui/components/council-info-card.js.map +0 -1
  928. package/dist/src/ui/components/council-leader-bubble.js.map +0 -1
  929. package/dist/src/ui/components/council-message-bubble.js.map +0 -1
  930. package/dist/src/ui/components/council-phase-timeline.js.map +0 -1
  931. package/dist/src/ui/components/council-placeholder-bubble.js.map +0 -1
  932. package/dist/src/ui/components/council-question-card.js.map +0 -1
  933. package/dist/src/ui/components/council-status-list.js.map +0 -1
  934. package/dist/src/ui/components/council-synthesis-banner.js.map +0 -1
  935. package/dist/src/ui/components/diff-view.js.map +0 -1
  936. package/dist/src/ui/components/halt-recovery-card.js.map +0 -1
  937. package/dist/src/ui/components/hero-logo.js.map +0 -1
  938. package/dist/src/ui/components/init-new-form-card.js.map +0 -1
  939. package/dist/src/ui/components/lsp-views.js.map +0 -1
  940. package/dist/src/ui/components/media-views.js.map +0 -1
  941. package/dist/src/ui/components/message-view.js.map +0 -1
  942. package/dist/src/ui/components/point-to-existing-form-card.js.map +0 -1
  943. package/dist/src/ui/components/prompt-box.js.map +0 -1
  944. package/dist/src/ui/components/role-palette.js.map +0 -1
  945. package/dist/src/ui/components/session-header.js.map +0 -1
  946. package/dist/src/ui/components/slash-inline-menu.js.map +0 -1
  947. package/dist/src/ui/components/structured-response-view.js.map +0 -1
  948. package/dist/src/ui/components/task-list-panel.js.map +0 -1
  949. package/dist/src/ui/components/tool-group.js.map +0 -1
  950. package/dist/src/ui/components/tool-result-views.js.map +0 -1
  951. package/dist/src/ui/components/use-pair-quote-buffer.js.map +0 -1
  952. package/dist/src/ui/constants.js.map +0 -1
  953. package/dist/src/ui/hooks/use-agent-editor.js.map +0 -1
  954. package/dist/src/ui/hooks/use-mcp-editor.js.map +0 -1
  955. package/dist/src/ui/hooks/use-model-picker.js.map +0 -1
  956. package/dist/src/ui/hooks/useTypeahead.js.map +0 -1
  957. package/dist/src/ui/markdown.js.map +0 -1
  958. package/dist/src/ui/mcp-modal-types.js.map +0 -1
  959. package/dist/src/ui/mcp-modal.js.map +0 -1
  960. package/dist/src/ui/modals/api-key-modal.js.map +0 -1
  961. package/dist/src/ui/modals/connect-modal.js.map +0 -1
  962. package/dist/src/ui/modals/model-picker-modal.js.map +0 -1
  963. package/dist/src/ui/modals/sandbox-picker-modal.js.map +0 -1
  964. package/dist/src/ui/modals/update-modal.js.map +0 -1
  965. package/dist/src/ui/modals/wallet-picker-modal.js.map +0 -1
  966. package/dist/src/ui/picker-providers.js.map +0 -1
  967. package/dist/src/ui/plan.js.map +0 -1
  968. package/dist/src/ui/schedule-modal.js.map +0 -1
  969. package/dist/src/ui/slash/__tests__/clear.test.js.map +0 -1
  970. package/dist/src/ui/slash/__tests__/compact.test.js.map +0 -1
  971. package/dist/src/ui/slash/__tests__/cost.test.js.map +0 -1
  972. package/dist/src/ui/slash/__tests__/discuss.test.js.map +0 -1
  973. package/dist/src/ui/slash/__tests__/execute.test.js.map +0 -1
  974. package/dist/src/ui/slash/__tests__/expand.test.js.map +0 -1
  975. package/dist/src/ui/slash/__tests__/ideal.test.js.map +0 -1
  976. package/dist/src/ui/slash/__tests__/menu-parity.test.js.map +0 -1
  977. package/dist/src/ui/slash/__tests__/optimize.test.js.map +0 -1
  978. package/dist/src/ui/slash/__tests__/pin.test.js.map +0 -1
  979. package/dist/src/ui/slash/__tests__/plan.test.js.map +0 -1
  980. package/dist/src/ui/slash/__tests__/status-render.test.js.map +0 -1
  981. package/dist/src/ui/slash/clear.js.map +0 -1
  982. package/dist/src/ui/slash/compact.js.map +0 -1
  983. package/dist/src/ui/slash/cost.js.map +0 -1
  984. package/dist/src/ui/slash/council-inspect.js.map +0 -1
  985. package/dist/src/ui/slash/council.js.map +0 -1
  986. package/dist/src/ui/slash/debug.js.map +0 -1
  987. package/dist/src/ui/slash/discuss.js.map +0 -1
  988. package/dist/src/ui/slash/ee.js.map +0 -1
  989. package/dist/src/ui/slash/execute.js.map +0 -1
  990. package/dist/src/ui/slash/expand.js.map +0 -1
  991. package/dist/src/ui/slash/export.js.map +0 -1
  992. package/dist/src/ui/slash/ideal.js.map +0 -1
  993. package/dist/src/ui/slash/menu-items.js.map +0 -1
  994. package/dist/src/ui/slash/optimize.js.map +0 -1
  995. package/dist/src/ui/slash/pin.js.map +0 -1
  996. package/dist/src/ui/slash/plan.js.map +0 -1
  997. package/dist/src/ui/slash/registry.js.map +0 -1
  998. package/dist/src/ui/slash/route.js.map +0 -1
  999. package/dist/src/ui/slash/route.test.js.map +0 -1
  1000. package/dist/src/ui/slash/status.js.map +0 -1
  1001. package/dist/src/ui/state/active-run.js.map +0 -1
  1002. package/dist/src/ui/status-bar/index.js.map +0 -1
  1003. package/dist/src/ui/status-bar/index.test.js.map +0 -1
  1004. package/dist/src/ui/status-bar/store.js.map +0 -1
  1005. package/dist/src/ui/status-bar/store.test.js.map +0 -1
  1006. package/dist/src/ui/status-bar/tier-badge.js.map +0 -1
  1007. package/dist/src/ui/status-bar/tier-badge.test.js.map +0 -1
  1008. package/dist/src/ui/status-bar/usd-meter.js.map +0 -1
  1009. package/dist/src/ui/status-bar/usd-meter.test.js.map +0 -1
  1010. package/dist/src/ui/syntax-highlight.js.map +0 -1
  1011. package/dist/src/ui/terminal-selection-text.js.map +0 -1
  1012. package/dist/src/ui/theme.js.map +0 -1
  1013. package/dist/src/ui/types.js.map +0 -1
  1014. package/dist/src/ui/utils/__tests__/format.test.js.map +0 -1
  1015. package/dist/src/ui/utils/__tests__/tools.test.js.map +0 -1
  1016. package/dist/src/ui/utils/color.js.map +0 -1
  1017. package/dist/src/ui/utils/format.js.map +0 -1
  1018. package/dist/src/ui/utils/modal.js.map +0 -1
  1019. package/dist/src/ui/utils/text.js.map +0 -1
  1020. package/dist/src/ui/utils/tools.js.map +0 -1
  1021. package/dist/src/usage/__tests__/product-ledger.test.js.map +0 -1
  1022. package/dist/src/usage/cost-log.js.map +0 -1
  1023. package/dist/src/usage/decision-log.js.map +0 -1
  1024. package/dist/src/usage/downgrade.js.map +0 -1
  1025. package/dist/src/usage/downgrade.test.js.map +0 -1
  1026. package/dist/src/usage/estimator.js.map +0 -1
  1027. package/dist/src/usage/estimator.test.js.map +0 -1
  1028. package/dist/src/usage/ledger.js.map +0 -1
  1029. package/dist/src/usage/ledger.test.js.map +0 -1
  1030. package/dist/src/usage/midstream.js.map +0 -1
  1031. package/dist/src/usage/midstream.test.js.map +0 -1
  1032. package/dist/src/usage/product-ledger.js.map +0 -1
  1033. package/dist/src/usage/thresholds.js.map +0 -1
  1034. package/dist/src/usage/thresholds.test.js.map +0 -1
  1035. package/dist/src/usage/types.js.map +0 -1
  1036. package/dist/src/utils/__tests__/auto-council-settings.test.js.map +0 -1
  1037. package/dist/src/utils/__tests__/ee-logger.test.js.map +0 -1
  1038. package/dist/src/utils/__tests__/file-lock.test.js.map +0 -1
  1039. package/dist/src/utils/__tests__/llm-deadline.test.js.map +0 -1
  1040. package/dist/src/utils/__tests__/rate-limit.test.js.map +0 -1
  1041. package/dist/src/utils/__tests__/settings-disabled-models.test.js.map +0 -1
  1042. package/dist/src/utils/__tests__/settings-web-research.test.js.map +0 -1
  1043. package/dist/src/utils/__tests__/slugify.test.js.map +0 -1
  1044. package/dist/src/utils/__tests__/visible-retry.test.js.map +0 -1
  1045. package/dist/src/utils/at-mentions.js.map +0 -1
  1046. package/dist/src/utils/clipboard-image.js.map +0 -1
  1047. package/dist/src/utils/ee-logger.js.map +0 -1
  1048. package/dist/src/utils/file-index.js.map +0 -1
  1049. package/dist/src/utils/file-lock.js.map +0 -1
  1050. package/dist/src/utils/git-root.js.map +0 -1
  1051. package/dist/src/utils/host-clipboard.js.map +0 -1
  1052. package/dist/src/utils/install-manager.js.map +0 -1
  1053. package/dist/src/utils/install-manager.test.js.map +0 -1
  1054. package/dist/src/utils/instructions.js.map +0 -1
  1055. package/dist/src/utils/instructions.test.js.map +0 -1
  1056. package/dist/src/utils/llm-deadline.js.map +0 -1
  1057. package/dist/src/utils/permission-mode.js.map +0 -1
  1058. package/dist/src/utils/permission-mode.test.js.map +0 -1
  1059. package/dist/src/utils/rate-limit.js.map +0 -1
  1060. package/dist/src/utils/redactor.js.map +0 -1
  1061. package/dist/src/utils/redactor.test.js.map +0 -1
  1062. package/dist/src/utils/settings.js.map +0 -1
  1063. package/dist/src/utils/settings.test.js.map +0 -1
  1064. package/dist/src/utils/shell.js.map +0 -1
  1065. package/dist/src/utils/shell.test.js.map +0 -1
  1066. package/dist/src/utils/side-question.js.map +0 -1
  1067. package/dist/src/utils/skills.js.map +0 -1
  1068. package/dist/src/utils/skills.test.js.map +0 -1
  1069. package/dist/src/utils/slugify.js.map +0 -1
  1070. package/dist/src/utils/subagent-display.js.map +0 -1
  1071. package/dist/src/utils/subagent-display.test.js.map +0 -1
  1072. package/dist/src/utils/subagents-settings.test.js.map +0 -1
  1073. package/dist/src/utils/telegram-audio-settings.test.js.map +0 -1
  1074. package/dist/src/utils/update-checker.js.map +0 -1
  1075. package/dist/src/utils/update-checker.test.js.map +0 -1
  1076. package/dist/src/utils/visible-retry.js.map +0 -1
  1077. package/dist/src/verify/__tests__/coverage-parsers.test.js.map +0 -1
  1078. package/dist/src/verify/__tests__/dotnet-recipe.test.js.map +0 -1
  1079. package/dist/src/verify/checkpoint.js.map +0 -1
  1080. package/dist/src/verify/checkpoint.test.js.map +0 -1
  1081. package/dist/src/verify/coverage-parsers.js.map +0 -1
  1082. package/dist/src/verify/entrypoint.js.map +0 -1
  1083. package/dist/src/verify/entrypoint.test.js.map +0 -1
  1084. package/dist/src/verify/environment.js.map +0 -1
  1085. package/dist/src/verify/environment.test.js.map +0 -1
  1086. package/dist/src/verify/evidence.js.map +0 -1
  1087. package/dist/src/verify/orchestrator.js.map +0 -1
  1088. package/dist/src/verify/orchestrator.test.js.map +0 -1
  1089. package/dist/src/verify/recipes.js.map +0 -1
  1090. package/dist/src/verify/retry.js.map +0 -1
  1091. package/dist/src/verify/runtime-prep.test.js.map +0 -1
  1092. package/src/__test-helpers__/catalog-fixtures.ts +0 -57
  1093. package/src/__test-stubs__/ee-server.ts +0 -173
  1094. package/src/__test-stubs__/vitest-setup.ts +0 -36
  1095. package/src/__tests__/council/bubble-layout.test.ts +0 -45
  1096. package/src/__tests__/council/code-block-truncate.test.ts +0 -50
  1097. package/src/__tests__/council/role-palette.test.ts +0 -66
  1098. package/src/__tests__/first-run-wizard.test.ts +0 -9
  1099. package/src/agent-harness/__tests__/cli-flags.spec.ts +0 -35
  1100. package/src/agent-harness/__tests__/driver.spec.ts +0 -154
  1101. package/src/agent-harness/__tests__/idle.spec.ts +0 -90
  1102. package/src/agent-harness/__tests__/mock-llm.spec.ts +0 -126
  1103. package/src/agent-harness/__tests__/mock-model.spec.ts +0 -195
  1104. package/src/agent-harness/__tests__/predicate.spec.ts +0 -33
  1105. package/src/agent-harness/__tests__/protocol.spec.ts +0 -62
  1106. package/src/agent-harness/__tests__/schema.spec.ts +0 -81
  1107. package/src/agent-harness/__tests__/selector.spec.ts +0 -82
  1108. package/src/agent-harness/__tests__/sidechannel.spec.ts +0 -40
  1109. package/src/agent-harness/__tests__/spec-helpers.spec.ts +0 -76
  1110. package/src/agent-harness/index.ts +0 -24
  1111. package/src/agent-harness/mock-model.ts +0 -445
  1112. package/src/agent-harness/test-spawn.ts +0 -221
  1113. package/src/billing/index.ts +0 -5
  1114. package/src/bun-sqlite.d.ts +0 -15
  1115. package/src/chat/__tests__/broadcast-bus.test.ts +0 -90
  1116. package/src/chat/__tests__/channel-manager.test.ts +0 -149
  1117. package/src/chat/__tests__/client.test.ts +0 -118
  1118. package/src/chat/__tests__/discord-integration.test.ts +0 -162
  1119. package/src/chat/__tests__/intent-prompt.test.ts +0 -92
  1120. package/src/chat/__tests__/verdict-resolver.test.ts +0 -336
  1121. package/src/chat/broadcast-bus.ts +0 -53
  1122. package/src/chat/channel-manager.ts +0 -146
  1123. package/src/chat/chat-keychain.ts +0 -137
  1124. package/src/chat/factory.ts +0 -37
  1125. package/src/chat/intent-prompt.ts +0 -72
  1126. package/src/chat/providers/discord/client.ts +0 -91
  1127. package/src/chat/types.ts +0 -42
  1128. package/src/chat/verdict-constants.ts +0 -26
  1129. package/src/chat/verdict-resolver.ts +0 -231
  1130. package/src/cli/__tests__/bw-vault.test.ts +0 -97
  1131. package/src/cli/__tests__/keys-bundle.test.ts +0 -46
  1132. package/src/cli/__tests__/share-cmd.test.ts +0 -197
  1133. package/src/cli/bw-vault.ts +0 -184
  1134. package/src/cli/config/__tests__/model-picker.test.ts +0 -59
  1135. package/src/cli/config/__tests__/provider-fetch.test.ts +0 -38
  1136. package/src/cli/config/index.ts +0 -112
  1137. package/src/cli/config/model-picker.ts +0 -193
  1138. package/src/cli/config/provider-fetch.ts +0 -75
  1139. package/src/cli/config/screen-council.ts +0 -245
  1140. package/src/cli/config/screen-models.ts +0 -104
  1141. package/src/cli/config/screen-providers.ts +0 -197
  1142. package/src/cli/config/tui.ts +0 -153
  1143. package/src/cli/cost-forensics.test.ts +0 -273
  1144. package/src/cli/cost-forensics.ts +0 -337
  1145. package/src/cli/keys-bundle.ts +0 -91
  1146. package/src/cli/keys.test.ts +0 -104
  1147. package/src/cli/keys.ts +0 -816
  1148. package/src/cli/pil-report.ts +0 -202
  1149. package/src/cli/reporter-cmd.ts +0 -154
  1150. package/src/cli/share-cmd.ts +0 -132
  1151. package/src/cli/usage-report.ts +0 -398
  1152. package/src/cloud/index.ts +0 -5
  1153. package/src/council/__tests__/accounting.test.ts +0 -72
  1154. package/src/council/__tests__/audit-replay.test.ts +0 -344
  1155. package/src/council/__tests__/clarifier-max-rounds.test.ts +0 -90
  1156. package/src/council/__tests__/clarifier-options.test.ts +0 -63
  1157. package/src/council/__tests__/clarifier-ready-gate.test.ts +0 -268
  1158. package/src/council/__tests__/cost-aware.test.ts +0 -60
  1159. package/src/council/__tests__/debate-planner-structured.test.ts +0 -236
  1160. package/src/council/__tests__/decisions-lock.test.ts +0 -404
  1161. package/src/council/__tests__/evaluator-metrics.test.ts +0 -513
  1162. package/src/council/__tests__/parse-outcome-fallback.test.ts +0 -125
  1163. package/src/council/__tests__/research-tools.test.ts +0 -239
  1164. package/src/council/__tests__/round-tools.test.ts +0 -334
  1165. package/src/council/__tests__/tool-trace.test.ts +0 -152
  1166. package/src/council/__tests__/types-contract.test.ts +0 -88
  1167. package/src/council/clarifier.ts +0 -507
  1168. package/src/council/context.ts +0 -249
  1169. package/src/council/debate-planner.ts +0 -303
  1170. package/src/council/debate.ts +0 -1179
  1171. package/src/council/decisions-lock.ts +0 -312
  1172. package/src/council/executor.ts +0 -27
  1173. package/src/council/index.ts +0 -956
  1174. package/src/council/leader.ts +0 -281
  1175. package/src/council/llm.ts +0 -939
  1176. package/src/council/phase-events.ts +0 -64
  1177. package/src/council/planner.ts +0 -303
  1178. package/src/council/preflight.ts +0 -86
  1179. package/src/council/prompts.ts +0 -698
  1180. package/src/council/types.ts +0 -304
  1181. package/src/daemon/scheduler.test.ts +0 -128
  1182. package/src/daemon/scheduler.ts +0 -152
  1183. package/src/ee/.gitkeep +0 -0
  1184. package/src/ee/__tests__/bb-design.test.ts +0 -223
  1185. package/src/ee/__tests__/export-transcripts.test.ts +0 -222
  1186. package/src/ee/__tests__/pil-context-bridge.test.ts +0 -59
  1187. package/src/ee/__tests__/pipeline.integration.test.ts +0 -193
  1188. package/src/ee/__tests__/recall-format.test.ts +0 -66
  1189. package/src/ee/__tests__/recall-ledger.test.ts +0 -55
  1190. package/src/ee/__tests__/render-sink-wiring.test.ts +0 -89
  1191. package/src/ee/auth.test.ts +0 -76
  1192. package/src/ee/auth.ts +0 -80
  1193. package/src/ee/bb-design.ts +0 -284
  1194. package/src/ee/bb-retrieval.ts +0 -467
  1195. package/src/ee/bridge.test.ts +0 -283
  1196. package/src/ee/bridge.ts +0 -443
  1197. package/src/ee/client-mode.ts +0 -161
  1198. package/src/ee/client.test.ts +0 -201
  1199. package/src/ee/client.ts +0 -683
  1200. package/src/ee/council-bridge.ts +0 -89
  1201. package/src/ee/embedding-cache.ts +0 -42
  1202. package/src/ee/export-transcripts.ts +0 -160
  1203. package/src/ee/extract-session.test.ts +0 -231
  1204. package/src/ee/extract-session.ts +0 -71
  1205. package/src/ee/health.ts +0 -83
  1206. package/src/ee/index.ts +0 -33
  1207. package/src/ee/intercept.test.ts +0 -197
  1208. package/src/ee/intercept.ts +0 -168
  1209. package/src/ee/judge.test.ts +0 -213
  1210. package/src/ee/judge.ts +0 -126
  1211. package/src/ee/mistake-detector.test.ts +0 -252
  1212. package/src/ee/mistake-detector.ts +0 -297
  1213. package/src/ee/offline-queue.test.ts +0 -302
  1214. package/src/ee/offline-queue.ts +0 -205
  1215. package/src/ee/phase-outcome.test.ts +0 -107
  1216. package/src/ee/phase-outcome.ts +0 -165
  1217. package/src/ee/phase-tracker.test.ts +0 -175
  1218. package/src/ee/phase-tracker.ts +0 -180
  1219. package/src/ee/posttool.test.ts +0 -81
  1220. package/src/ee/posttool.ts +0 -16
  1221. package/src/ee/prompt-stale.test.ts +0 -92
  1222. package/src/ee/prompt-stale.ts +0 -39
  1223. package/src/ee/recall-ledger.ts +0 -71
  1224. package/src/ee/recall-mirror.test.ts +0 -74
  1225. package/src/ee/render.test.ts +0 -74
  1226. package/src/ee/render.ts +0 -68
  1227. package/src/ee/scope.test.ts +0 -112
  1228. package/src/ee/scope.ts +0 -93
  1229. package/src/ee/search.ts +0 -259
  1230. package/src/ee/session-trajectory.test.ts +0 -139
  1231. package/src/ee/session-trajectory.ts +0 -226
  1232. package/src/ee/tenant.ts +0 -14
  1233. package/src/ee/touch.test.ts +0 -73
  1234. package/src/ee/transcript-emit.ts +0 -174
  1235. package/src/ee/types.ts +0 -432
  1236. package/src/flow/.gitkeep +0 -0
  1237. package/src/flow/__tests__/migration.test.ts +0 -133
  1238. package/src/flow/__tests__/parser.test.ts +0 -77
  1239. package/src/flow/__tests__/run-manager-product.test.ts +0 -59
  1240. package/src/flow/__tests__/run-manager.test.ts +0 -95
  1241. package/src/flow/__tests__/scaffold-checkpoint.test.ts +0 -113
  1242. package/src/flow/__tests__/scaffold.test.ts +0 -57
  1243. package/src/flow/__tests__/warning-persist.test.ts +0 -112
  1244. package/src/flow/artifact-io.ts +0 -41
  1245. package/src/flow/compaction/__tests__/compress.test.ts +0 -69
  1246. package/src/flow/compaction/__tests__/extract.test.ts +0 -74
  1247. package/src/flow/compaction/__tests__/preserve.test.ts +0 -69
  1248. package/src/flow/compaction/compress.ts +0 -67
  1249. package/src/flow/compaction/extract.ts +0 -60
  1250. package/src/flow/compaction/index.ts +0 -86
  1251. package/src/flow/compaction/preserve.ts +0 -48
  1252. package/src/flow/index.ts +0 -18
  1253. package/src/flow/migration.ts +0 -139
  1254. package/src/flow/parser.ts +0 -78
  1255. package/src/flow/run-manager.ts +0 -162
  1256. package/src/flow/scaffold-checkpoint.ts +0 -132
  1257. package/src/flow/scaffold.ts +0 -52
  1258. package/src/flow/warning-persist.ts +0 -84
  1259. package/src/generated/version.ts +0 -5
  1260. package/src/gsd/.gitkeep +0 -0
  1261. package/src/gsd/__tests__/complexity.test.ts +0 -0
  1262. package/src/gsd/__tests__/directives.test.ts +0 -88
  1263. package/src/gsd/__tests__/gray-areas.test.ts +0 -33
  1264. package/src/gsd/__tests__/types.test.ts +0 -91
  1265. package/src/gsd/complexity.ts +0 -124
  1266. package/src/gsd/directives.ts +0 -141
  1267. package/src/gsd/gray-areas.ts +0 -144
  1268. package/src/gsd/index.ts +0 -1
  1269. package/src/gsd/types.ts +0 -63
  1270. package/src/headless/__tests__/council-answers.test.ts +0 -300
  1271. package/src/headless/council-answers.ts +0 -152
  1272. package/src/headless/output.test.ts +0 -201
  1273. package/src/headless/output.ts +0 -312
  1274. package/src/hooks/config.ts +0 -41
  1275. package/src/hooks/index.ts +0 -569
  1276. package/src/hooks/types.ts +0 -263
  1277. package/src/index.ts +0 -1762
  1278. package/src/lsp/builtins.test.ts +0 -129
  1279. package/src/lsp/builtins.ts +0 -453
  1280. package/src/lsp/client.ts +0 -342
  1281. package/src/lsp/manager.test.ts +0 -198
  1282. package/src/lsp/manager.ts +0 -343
  1283. package/src/lsp/npm-cache.test.ts +0 -70
  1284. package/src/lsp/npm-cache.ts +0 -111
  1285. package/src/lsp/runtime.ts +0 -70
  1286. package/src/lsp/smoke.test.ts +0 -74
  1287. package/src/lsp/types.ts +0 -119
  1288. package/src/maintain/__tests__/codebase-intel.test.ts +0 -320
  1289. package/src/maintain/__tests__/gh-create-pr.test.ts +0 -195
  1290. package/src/maintain/__tests__/pr-builder.test.ts +0 -282
  1291. package/src/maintain/__tests__/repo-map.test.ts +0 -128
  1292. package/src/maintain/__tests__/task-runner.test.ts +0 -347
  1293. package/src/maintain/codebase-intel.ts +0 -595
  1294. package/src/maintain/gh-create-pr.ts +0 -148
  1295. package/src/maintain/index.ts +0 -14
  1296. package/src/maintain/pr-builder.ts +0 -373
  1297. package/src/maintain/repo-map.ts +0 -205
  1298. package/src/maintain/task-runner.ts +0 -481
  1299. package/src/maintain/types.ts +0 -49
  1300. package/src/mcp/__tests__/auto-setup.test.ts +0 -88
  1301. package/src/mcp/__tests__/cap-tool-result.test.ts +0 -65
  1302. package/src/mcp/__tests__/ee-tools.test.ts +0 -248
  1303. package/src/mcp/__tests__/forensics-tools.test.ts +0 -66
  1304. package/src/mcp/__tests__/harness-driver-action-tools.spec.ts +0 -116
  1305. package/src/mcp/__tests__/harness-driver-async-tools.spec.ts +0 -129
  1306. package/src/mcp/__tests__/harness-driver-read-tools.spec.ts +0 -140
  1307. package/src/mcp/__tests__/harness-driver-security.spec.ts +0 -69
  1308. package/src/mcp/__tests__/harness-driver.spec.ts +0 -21
  1309. package/src/mcp/__tests__/lazy-schema.spec.ts +0 -173
  1310. package/src/mcp/__tests__/lsp-tools.test.ts +0 -72
  1311. package/src/mcp/__tests__/mcp-keychain.test.ts +0 -46
  1312. package/src/mcp/__tests__/research-onboarding.test.ts +0 -163
  1313. package/src/mcp/__tests__/runtime-hydration.test.ts +0 -86
  1314. package/src/mcp/__tests__/runtime-output-cap.test.ts +0 -49
  1315. package/src/mcp/__tests__/runtime-sanitize.test.ts +0 -44
  1316. package/src/mcp/__tests__/self-verify-jobs.test.ts +0 -102
  1317. package/src/mcp/__tests__/smart-filter.test.ts +0 -139
  1318. package/src/mcp/__tests__/tools-server.smoke.test.ts +0 -41
  1319. package/src/mcp/auto-setup.ts +0 -99
  1320. package/src/mcp/cap-tool-result.ts +0 -68
  1321. package/src/mcp/catalog.ts +0 -155
  1322. package/src/mcp/ee-tools.ts +0 -204
  1323. package/src/mcp/forensics-tools.ts +0 -65
  1324. package/src/mcp/lsp-tools.ts +0 -78
  1325. package/src/mcp/mcp-keychain.ts +0 -85
  1326. package/src/mcp/oauth-callback.ts +0 -75
  1327. package/src/mcp/oauth-provider.ts +0 -128
  1328. package/src/mcp/opentui-spawn.ts +0 -64
  1329. package/src/mcp/parse-headers.test.ts +0 -54
  1330. package/src/mcp/parse-headers.ts +0 -35
  1331. package/src/mcp/research-onboarding.ts +0 -143
  1332. package/src/mcp/runtime.ts +0 -182
  1333. package/src/mcp/self-verify-jobs.ts +0 -137
  1334. package/src/mcp/smart-filter.ts +0 -138
  1335. package/src/mcp/smoke.test.ts +0 -170
  1336. package/src/mcp/tools-server.ts +0 -174
  1337. package/src/mcp/validate.ts +0 -48
  1338. package/src/models/__tests__/registry.test.ts +0 -95
  1339. package/src/models/catalog-client.ts +0 -234
  1340. package/src/models/catalog-gemini.test.ts +0 -52
  1341. package/src/models/catalog-url.test.ts +0 -27
  1342. package/src/models/catalog-validation.test.ts +0 -74
  1343. package/src/models/catalog.README.md +0 -136
  1344. package/src/models/catalog.json +0 -349
  1345. package/src/models/classify-tier.ts +0 -48
  1346. package/src/models/index.ts +0 -9
  1347. package/src/models/registry.ts +0 -87
  1348. package/src/ops/__tests__/doctor-council-mcp.test.ts +0 -161
  1349. package/src/ops/__tests__/doctor-ee-health.test.ts +0 -129
  1350. package/src/ops/bug-report.test.ts +0 -172
  1351. package/src/ops/bug-report.ts +0 -80
  1352. package/src/ops/doctor.test.ts +0 -108
  1353. package/src/ops/doctor.ts +0 -366
  1354. package/src/orchestrator/__tests__/agent-base-url-switch.test.ts +0 -87
  1355. package/src/orchestrator/__tests__/batch-turn-runner.test.ts +0 -186
  1356. package/src/orchestrator/__tests__/council-manager.test.ts +0 -171
  1357. package/src/orchestrator/__tests__/cross-turn-dedup.test.ts +0 -201
  1358. package/src/orchestrator/__tests__/current-call-id.test.ts +0 -160
  1359. package/src/orchestrator/__tests__/error-forensics.test.ts +0 -99
  1360. package/src/orchestrator/__tests__/flow-resume.test.ts +0 -71
  1361. package/src/orchestrator/__tests__/humanize-api-error.test.ts +0 -74
  1362. package/src/orchestrator/__tests__/message-processor.test.ts +0 -201
  1363. package/src/orchestrator/__tests__/message-write-ahead.test.ts +0 -170
  1364. package/src/orchestrator/__tests__/read-path-budget.test.ts +0 -170
  1365. package/src/orchestrator/__tests__/retry-classifier.test.ts +0 -131
  1366. package/src/orchestrator/__tests__/retry-stream.test.ts +0 -186
  1367. package/src/orchestrator/__tests__/route-feedback.test.ts +0 -55
  1368. package/src/orchestrator/__tests__/stream-runner.test.ts +0 -201
  1369. package/src/orchestrator/__tests__/sub-agent-model-tier.test.ts +0 -53
  1370. package/src/orchestrator/__tests__/usage-events-shape.test.ts +0 -80
  1371. package/src/orchestrator/__tests__/usage-normalizer-c1.test.ts +0 -172
  1372. package/src/orchestrator/__tests__/usage-shape-threading.test.ts +0 -111
  1373. package/src/orchestrator/__tests__/write-ahead.test.ts +0 -162
  1374. package/src/orchestrator/abort.test.ts +0 -37
  1375. package/src/orchestrator/abort.ts +0 -51
  1376. package/src/orchestrator/agent-options.ts +0 -167
  1377. package/src/orchestrator/agent.test.ts +0 -191
  1378. package/src/orchestrator/batch-turn-runner.ts +0 -425
  1379. package/src/orchestrator/batch-utils.ts +0 -340
  1380. package/src/orchestrator/cleanup.test.ts +0 -86
  1381. package/src/orchestrator/compaction.test.ts +0 -200
  1382. package/src/orchestrator/compaction.ts +0 -626
  1383. package/src/orchestrator/council-manager.ts +0 -572
  1384. package/src/orchestrator/cross-turn-dedup.ts +0 -208
  1385. package/src/orchestrator/delegations.test.ts +0 -145
  1386. package/src/orchestrator/delegations.ts +0 -370
  1387. package/src/orchestrator/error-utils.ts +0 -165
  1388. package/src/orchestrator/flow-resume.ts +0 -54
  1389. package/src/orchestrator/grounding-check.test.ts +0 -111
  1390. package/src/orchestrator/grounding-check.ts +0 -138
  1391. package/src/orchestrator/interrupted-turn.test.ts +0 -39
  1392. package/src/orchestrator/interrupted-turn.ts +0 -27
  1393. package/src/orchestrator/message-processor.ts +0 -3364
  1394. package/src/orchestrator/message-seq.test.ts +0 -29
  1395. package/src/orchestrator/message-seq.ts +0 -19
  1396. package/src/orchestrator/orchestrator.ts +0 -2752
  1397. package/src/orchestrator/pending-calls.test.ts +0 -226
  1398. package/src/orchestrator/pending-calls.ts +0 -240
  1399. package/src/orchestrator/prompts.ts +0 -579
  1400. package/src/orchestrator/provider-options-shape.spec.ts +0 -67
  1401. package/src/orchestrator/provider-options-shape.ts +0 -70
  1402. package/src/orchestrator/read-path-budget.ts +0 -205
  1403. package/src/orchestrator/reasoning.test.ts +0 -114
  1404. package/src/orchestrator/reasoning.ts +0 -116
  1405. package/src/orchestrator/repair-tool-call.ts +0 -54
  1406. package/src/orchestrator/repetition-detector.test.ts +0 -127
  1407. package/src/orchestrator/repetition-detector.ts +0 -140
  1408. package/src/orchestrator/retry-classifier.ts +0 -140
  1409. package/src/orchestrator/retry-stream.ts +0 -159
  1410. package/src/orchestrator/sandbox.test.ts +0 -117
  1411. package/src/orchestrator/scope-ceiling.test.ts +0 -215
  1412. package/src/orchestrator/scope-ceiling.ts +0 -234
  1413. package/src/orchestrator/scope-reminder.test.ts +0 -232
  1414. package/src/orchestrator/scope-reminder.ts +0 -230
  1415. package/src/orchestrator/stall-rescue.test.ts +0 -100
  1416. package/src/orchestrator/stall-rescue.ts +0 -95
  1417. package/src/orchestrator/stall-watchdog.test.ts +0 -83
  1418. package/src/orchestrator/stall-watchdog.ts +0 -87
  1419. package/src/orchestrator/stream-runner.ts +0 -939
  1420. package/src/orchestrator/sub-agent-cap.test.ts +0 -227
  1421. package/src/orchestrator/sub-agent-cap.ts +0 -240
  1422. package/src/orchestrator/sub-agent-model-tier.ts +0 -58
  1423. package/src/orchestrator/subagent-compactor.spec.ts +0 -332
  1424. package/src/orchestrator/subagent-compactor.ts +0 -456
  1425. package/src/orchestrator/text-tool-call-detector.test.ts +0 -99
  1426. package/src/orchestrator/text-tool-call-detector.ts +0 -200
  1427. package/src/orchestrator/token-counter.test.ts +0 -69
  1428. package/src/orchestrator/token-counter.ts +0 -81
  1429. package/src/orchestrator/tool-args-hash.test.ts +0 -121
  1430. package/src/orchestrator/tool-args-hash.ts +0 -221
  1431. package/src/orchestrator/tool-args-repair.test.ts +0 -156
  1432. package/src/orchestrator/tool-args-repair.ts +0 -227
  1433. package/src/orchestrator/tool-loop-cap.test.ts +0 -193
  1434. package/src/orchestrator/tool-loop-cap.ts +0 -174
  1435. package/src/orchestrator/tool-repetition-detector.test.ts +0 -119
  1436. package/src/orchestrator/tool-repetition-detector.ts +0 -0
  1437. package/src/orchestrator/tool-utils.ts +0 -214
  1438. package/src/orchestrator/turn-runner-deps.ts +0 -85
  1439. package/src/pil/__tests__/budget.test.ts +0 -39
  1440. package/src/pil/__tests__/clarity-gate.test.ts +0 -299
  1441. package/src/pil/__tests__/config.test.ts +0 -78
  1442. package/src/pil/__tests__/discovery-cache.test.ts +0 -45
  1443. package/src/pil/__tests__/discovery-types.test.ts +0 -68
  1444. package/src/pil/__tests__/discovery.test.ts +0 -141
  1445. package/src/pil/__tests__/dual-run.test.ts +0 -53
  1446. package/src/pil/__tests__/layer1-intent-trace.test.ts +0 -142
  1447. package/src/pil/__tests__/layer1-intent.test.ts +0 -365
  1448. package/src/pil/__tests__/layer15-context-scan.test.ts +0 -76
  1449. package/src/pil/__tests__/layer16-clarity.test.ts +0 -184
  1450. package/src/pil/__tests__/layer17-feasibility.test.ts +0 -42
  1451. package/src/pil/__tests__/layer18-acceptance.test.ts +0 -116
  1452. package/src/pil/__tests__/layer2-personality.test.ts +0 -63
  1453. package/src/pil/__tests__/layer3-ee-injection.test.ts +0 -189
  1454. package/src/pil/__tests__/layer3-injected-chunk.test.ts +0 -122
  1455. package/src/pil/__tests__/layer4-gsd.test.ts +0 -109
  1456. package/src/pil/__tests__/layer5-context.test.ts +0 -157
  1457. package/src/pil/__tests__/layer6-output.test.ts +0 -362
  1458. package/src/pil/__tests__/llm-classify.test.ts +0 -140
  1459. package/src/pil/__tests__/native-capabilities-workbook.test.ts +0 -45
  1460. package/src/pil/__tests__/ollama-classify.test.ts +0 -81
  1461. package/src/pil/__tests__/orchestrator-integration.test.ts +0 -107
  1462. package/src/pil/__tests__/pipeline.test.ts +0 -191
  1463. package/src/pil/__tests__/renderer-coverage.test.ts +0 -46
  1464. package/src/pil/__tests__/response-tools.test.ts +0 -239
  1465. package/src/pil/__tests__/schema.test.ts +0 -233
  1466. package/src/pil/__tests__/scoreComplexity.test.ts +0 -134
  1467. package/src/pil/__tests__/scoreSufficiency.test.ts +0 -104
  1468. package/src/pil/__tests__/store.test.ts +0 -49
  1469. package/src/pil/__tests__/task-tier-map.test.ts +0 -41
  1470. package/src/pil/agent-operating-contract.test.ts +0 -84
  1471. package/src/pil/agent-operating-contract.ts +0 -70
  1472. package/src/pil/budget-log.ts +0 -86
  1473. package/src/pil/budget.ts +0 -18
  1474. package/src/pil/cheap-model-playbook.test.ts +0 -191
  1475. package/src/pil/cheap-model-playbook.ts +0 -153
  1476. package/src/pil/cheap-model-workbooks.test.ts +0 -154
  1477. package/src/pil/cheap-model-workbooks.ts +0 -109
  1478. package/src/pil/clarity-gate.ts +0 -188
  1479. package/src/pil/config.ts +0 -25
  1480. package/src/pil/discovery-cache.ts +0 -20
  1481. package/src/pil/discovery-types.ts +0 -97
  1482. package/src/pil/discovery.ts +0 -397
  1483. package/src/pil/index.ts +0 -24
  1484. package/src/pil/layer1-intent.test.ts +0 -520
  1485. package/src/pil/layer1-intent.ts +0 -1236
  1486. package/src/pil/layer15-context-scan.ts +0 -159
  1487. package/src/pil/layer16-clarity.test.ts +0 -35
  1488. package/src/pil/layer16-clarity.ts +0 -417
  1489. package/src/pil/layer17-feasibility.ts +0 -40
  1490. package/src/pil/layer18-acceptance.ts +0 -98
  1491. package/src/pil/layer1_5-complexity-size.test.ts +0 -279
  1492. package/src/pil/layer1_5-complexity-size.ts +0 -175
  1493. package/src/pil/layer2-personality.ts +0 -46
  1494. package/src/pil/layer3-ee-injection.ts +0 -406
  1495. package/src/pil/layer4-gsd.ts +0 -124
  1496. package/src/pil/layer5-context.ts +0 -171
  1497. package/src/pil/layer6-output.ts +0 -364
  1498. package/src/pil/llm-classify.ts +0 -199
  1499. package/src/pil/native-capabilities-workbook.ts +0 -124
  1500. package/src/pil/ollama-classify.ts +0 -49
  1501. package/src/pil/pipeline.ts +0 -313
  1502. package/src/pil/response-tools.ts +0 -187
  1503. package/src/pil/schema.ts +0 -111
  1504. package/src/pil/session-state.test.ts +0 -88
  1505. package/src/pil/session-state.ts +0 -157
  1506. package/src/pil/store.ts +0 -29
  1507. package/src/pil/task-tier-map.ts +0 -97
  1508. package/src/pil/timeout.ts +0 -10
  1509. package/src/pil/types.ts +0 -168
  1510. package/src/product-loop/__tests__/artifact-io.test.ts +0 -97
  1511. package/src/product-loop/__tests__/assumption-ledger.test.ts +0 -292
  1512. package/src/product-loop/__tests__/backlog-builder.test.ts +0 -200
  1513. package/src/product-loop/__tests__/backlog-store.test.ts +0 -119
  1514. package/src/product-loop/__tests__/cb2-retry-bonus.test.ts +0 -182
  1515. package/src/product-loop/__tests__/circuit-breakers-coverage.test.ts +0 -82
  1516. package/src/product-loop/__tests__/circuit-breakers.test.ts +0 -90
  1517. package/src/product-loop/__tests__/complexity-routing.spec.ts +0 -315
  1518. package/src/product-loop/__tests__/context-policy.test.ts +0 -280
  1519. package/src/product-loop/__tests__/cost-preview.test.ts +0 -118
  1520. package/src/product-loop/__tests__/cost-scoper.test.ts +0 -76
  1521. package/src/product-loop/__tests__/cross-run-memory.test.ts +0 -195
  1522. package/src/product-loop/__tests__/design-output.spec.ts +0 -39
  1523. package/src/product-loop/__tests__/discover.test.ts +0 -98
  1524. package/src/product-loop/__tests__/discovery-context-format.test.ts +0 -111
  1525. package/src/product-loop/__tests__/discovery-council-runner.test.ts +0 -13
  1526. package/src/product-loop/__tests__/discovery-detection.test.ts +0 -180
  1527. package/src/product-loop/__tests__/discovery-ecosystem.test.ts +0 -246
  1528. package/src/product-loop/__tests__/discovery-integration.test.ts +0 -133
  1529. package/src/product-loop/__tests__/discovery-interview.test.ts +0 -305
  1530. package/src/product-loop/__tests__/discovery-migrations.test.ts +0 -75
  1531. package/src/product-loop/__tests__/discovery-persistence.test.ts +0 -171
  1532. package/src/product-loop/__tests__/discovery-prompt-parser.test.ts +0 -77
  1533. package/src/product-loop/__tests__/discovery-prompt-specificity.test.ts +0 -65
  1534. package/src/product-loop/__tests__/discovery-recommender-ecosystem.test.ts +0 -192
  1535. package/src/product-loop/__tests__/discovery-recommender.test.ts +0 -382
  1536. package/src/product-loop/__tests__/discovery-schema.test.ts +0 -102
  1537. package/src/product-loop/__tests__/done-gate-coverage.test.ts +0 -151
  1538. package/src/product-loop/__tests__/done-gate.test.ts +0 -140
  1539. package/src/product-loop/__tests__/ee-extract-wiring.test.ts +0 -222
  1540. package/src/product-loop/__tests__/extract-to-ee.test.ts +0 -205
  1541. package/src/product-loop/__tests__/feedback-routing.test.ts +0 -93
  1542. package/src/product-loop/__tests__/gather-selectable-alts.test.ts +0 -119
  1543. package/src/product-loop/__tests__/hot-path.spec.ts +0 -177
  1544. package/src/product-loop/__tests__/integration.test.ts +0 -350
  1545. package/src/product-loop/__tests__/loop-driver-audit.test.ts +0 -327
  1546. package/src/product-loop/__tests__/loop-driver.test.ts +0 -253
  1547. package/src/product-loop/__tests__/maintenance-task-synthesis.test.ts +0 -78
  1548. package/src/product-loop/__tests__/phase-a1-a3-sprint-runner.test.ts +0 -315
  1549. package/src/product-loop/__tests__/phase-a2-backlog-build.test.ts +0 -189
  1550. package/src/product-loop/__tests__/phase-budget.test.ts +0 -172
  1551. package/src/product-loop/__tests__/phase-orchestrator-integration.test.ts +0 -143
  1552. package/src/product-loop/__tests__/phase-plan.test.ts +0 -241
  1553. package/src/product-loop/__tests__/phase-rituals.test.ts +0 -205
  1554. package/src/product-loop/__tests__/phase-runner.test.ts +0 -454
  1555. package/src/product-loop/__tests__/phase-tracker-bridge.test.ts +0 -85
  1556. package/src/product-loop/__tests__/pick-backend-stack.test.ts +0 -117
  1557. package/src/product-loop/__tests__/product-identity.test.ts +0 -47
  1558. package/src/product-loop/__tests__/progress-snapshot.test.ts +0 -180
  1559. package/src/product-loop/__tests__/reality-anchor.test.ts +0 -58
  1560. package/src/product-loop/__tests__/repo-audit.test.ts +0 -103
  1561. package/src/product-loop/__tests__/repo-brief.test.ts +0 -155
  1562. package/src/product-loop/__tests__/role-memory.test.ts +0 -70
  1563. package/src/product-loop/__tests__/role-registry.test.ts +0 -235
  1564. package/src/product-loop/__tests__/role-routing-ee.test.ts +0 -90
  1565. package/src/product-loop/__tests__/route-decision-emit.test.ts +0 -258
  1566. package/src/product-loop/__tests__/seed-questions.test.ts +0 -33
  1567. package/src/product-loop/__tests__/ship-polish.test.ts +0 -109
  1568. package/src/product-loop/__tests__/sprint-planner.test.ts +0 -166
  1569. package/src/product-loop/__tests__/sprint-runner-backlog.test.ts +0 -248
  1570. package/src/product-loop/__tests__/sprint-runner-emit.test.ts +0 -324
  1571. package/src/product-loop/__tests__/sprint-runner-phase-chunks.test.ts +0 -220
  1572. package/src/product-loop/__tests__/sprint-runner.test.ts +0 -501
  1573. package/src/product-loop/__tests__/sprint-self-verify.test.ts +0 -77
  1574. package/src/product-loop/__tests__/sprint-store.test.ts +0 -98
  1575. package/src/product-loop/__tests__/stakeholder-acl.test.ts +0 -94
  1576. package/src/product-loop/__tests__/state-md-ee-injections.test.ts +0 -229
  1577. package/src/product-loop/__tests__/sufficiency-routing.spec.ts +0 -183
  1578. package/src/product-loop/__tests__/typed-artifacts.test.ts +0 -259
  1579. package/src/product-loop/__tests__/types.test.ts +0 -103
  1580. package/src/product-loop/__tests__/verify-failure-threshold.test.ts +0 -178
  1581. package/src/product-loop/__tests__/verify-failure-tracking.test.ts +0 -154
  1582. package/src/product-loop/__tests__/verify-result.test.ts +0 -60
  1583. package/src/product-loop/artifact-io.ts +0 -239
  1584. package/src/product-loop/assumption-ledger.ts +0 -270
  1585. package/src/product-loop/backlog-builder.ts +0 -253
  1586. package/src/product-loop/backlog-store.ts +0 -62
  1587. package/src/product-loop/circuit-breakers.ts +0 -76
  1588. package/src/product-loop/context-policy.ts +0 -180
  1589. package/src/product-loop/cost-preview.ts +0 -139
  1590. package/src/product-loop/cost-scoper.ts +0 -49
  1591. package/src/product-loop/cross-run-memory.ts +0 -450
  1592. package/src/product-loop/design-output.ts +0 -24
  1593. package/src/product-loop/discover.ts +0 -159
  1594. package/src/product-loop/discovery-context-format.ts +0 -56
  1595. package/src/product-loop/discovery-council-runner.ts +0 -78
  1596. package/src/product-loop/discovery-detection.ts +0 -161
  1597. package/src/product-loop/discovery-ecosystem.ts +0 -239
  1598. package/src/product-loop/discovery-interview.ts +0 -288
  1599. package/src/product-loop/discovery-migrations.ts +0 -40
  1600. package/src/product-loop/discovery-persistence.ts +0 -219
  1601. package/src/product-loop/discovery-prompt-parser.ts +0 -80
  1602. package/src/product-loop/discovery-recommender.ts +0 -514
  1603. package/src/product-loop/discovery-schema.ts +0 -143
  1604. package/src/product-loop/done-gate.ts +0 -224
  1605. package/src/product-loop/feedback-routing.ts +0 -82
  1606. package/src/product-loop/gather.ts +0 -386
  1607. package/src/product-loop/index.ts +0 -1855
  1608. package/src/product-loop/loop-driver.ts +0 -900
  1609. package/src/product-loop/phase-budget.ts +0 -182
  1610. package/src/product-loop/phase-plan.ts +0 -158
  1611. package/src/product-loop/phase-rituals.ts +0 -158
  1612. package/src/product-loop/phase-runner.ts +0 -455
  1613. package/src/product-loop/phase-tracker-bridge.ts +0 -60
  1614. package/src/product-loop/product-identity.ts +0 -11
  1615. package/src/product-loop/progress-snapshot.ts +0 -216
  1616. package/src/product-loop/reality-anchor.ts +0 -45
  1617. package/src/product-loop/repo-audit.ts +0 -314
  1618. package/src/product-loop/repo-brief.ts +0 -235
  1619. package/src/product-loop/role-memory.ts +0 -72
  1620. package/src/product-loop/role-registry.ts +0 -175
  1621. package/src/product-loop/seed-questions.ts +0 -51
  1622. package/src/product-loop/ship-polish.ts +0 -164
  1623. package/src/product-loop/sprint-planner.ts +0 -241
  1624. package/src/product-loop/sprint-runner.ts +0 -801
  1625. package/src/product-loop/sprint-self-verify.ts +0 -189
  1626. package/src/product-loop/sprint-store.ts +0 -96
  1627. package/src/product-loop/stakeholder-acl.ts +0 -82
  1628. package/src/product-loop/typed-artifacts.ts +0 -332
  1629. package/src/product-loop/types.ts +0 -570
  1630. package/src/product-loop/verify-failure-tracking.ts +0 -225
  1631. package/src/product-loop/verify-result.ts +0 -39
  1632. package/src/providers/.gitkeep +0 -0
  1633. package/src/providers/__test-utils__/load-fixture.ts +0 -36
  1634. package/src/providers/__tests__/adapter-oauth-wiring.test.ts +0 -147
  1635. package/src/providers/__tests__/capabilities-cosmetic.test.ts +0 -119
  1636. package/src/providers/__tests__/capabilities-flags.test.ts +0 -166
  1637. package/src/providers/__tests__/capabilities-provider-options.test.ts +0 -232
  1638. package/src/providers/__tests__/capabilities-sanitize.test.ts +0 -66
  1639. package/src/providers/__tests__/capabilities.test.ts +0 -44
  1640. package/src/providers/__tests__/provider-coverage.test.ts +0 -48
  1641. package/src/providers/__tests__/reasoning-roundtrip.test.ts +0 -150
  1642. package/src/providers/__tests__/runtime-integration.test.ts +0 -106
  1643. package/src/providers/__tests__/runtime.test.ts +0 -94
  1644. package/src/providers/__tests__/siliconflow-sse-repair.test.ts +0 -300
  1645. package/src/providers/__tests__/strategies-registry.test.ts +0 -55
  1646. package/src/providers/__tests__/strategies-resolve.test.ts +0 -137
  1647. package/src/providers/__tests__/wire-debug.test.ts +0 -42
  1648. package/src/providers/adapter.test.ts +0 -21
  1649. package/src/providers/adapter.ts +0 -156
  1650. package/src/providers/anthropic.ts +0 -174
  1651. package/src/providers/auth/__tests__/browser-flow.test.ts +0 -230
  1652. package/src/providers/auth/__tests__/device-flow.test.ts +0 -263
  1653. package/src/providers/auth/__tests__/gemini-oauth.test.ts +0 -387
  1654. package/src/providers/auth/__tests__/grok-oauth.test.ts +0 -283
  1655. package/src/providers/auth/__tests__/openai-oauth.test.ts +0 -378
  1656. package/src/providers/auth/__tests__/token-store.test.ts +0 -152
  1657. package/src/providers/auth/browser-flow.ts +0 -140
  1658. package/src/providers/auth/device-flow.ts +0 -221
  1659. package/src/providers/auth/gemini-oauth.ts +0 -351
  1660. package/src/providers/auth/grok-oauth.ts +0 -406
  1661. package/src/providers/auth/openai-oauth.ts +0 -455
  1662. package/src/providers/auth/registry.ts +0 -138
  1663. package/src/providers/auth/token-store.ts +0 -154
  1664. package/src/providers/auth/types.ts +0 -111
  1665. package/src/providers/capabilities.ts +0 -355
  1666. package/src/providers/endpoints.ts +0 -68
  1667. package/src/providers/errors.test.ts +0 -76
  1668. package/src/providers/errors.ts +0 -46
  1669. package/src/providers/gemini.test.ts +0 -46
  1670. package/src/providers/gemini.ts +0 -42
  1671. package/src/providers/index.ts +0 -28
  1672. package/src/providers/keychain.test.ts +0 -100
  1673. package/src/providers/keychain.ts +0 -278
  1674. package/src/providers/mcp-vision-bridge.test.ts +0 -513
  1675. package/src/providers/mcp-vision-bridge.ts +0 -1020
  1676. package/src/providers/ollama.test.ts +0 -46
  1677. package/src/providers/ollama.ts +0 -36
  1678. package/src/providers/openai-compatible.test.ts +0 -63
  1679. package/src/providers/openai-compatible.ts +0 -62
  1680. package/src/providers/openai.test.ts +0 -65
  1681. package/src/providers/openai.ts +0 -56
  1682. package/src/providers/patch-zod-schema.ts +0 -126
  1683. package/src/providers/pricing.test.ts +0 -97
  1684. package/src/providers/pricing.ts +0 -128
  1685. package/src/providers/prompt-cache-key.spec.ts +0 -28
  1686. package/src/providers/runtime-mock.spec.ts +0 -86
  1687. package/src/providers/runtime.ts +0 -311
  1688. package/src/providers/siliconflow-sse-repair.ts +0 -201
  1689. package/src/providers/strategies/anthropic.strategy.ts +0 -25
  1690. package/src/providers/strategies/base.strategy.ts +0 -76
  1691. package/src/providers/strategies/deepseek.strategy.ts +0 -55
  1692. package/src/providers/strategies/google.strategy.ts +0 -28
  1693. package/src/providers/strategies/ollama.strategy.ts +0 -22
  1694. package/src/providers/strategies/openai.strategy.ts +0 -55
  1695. package/src/providers/strategies/registry.ts +0 -43
  1696. package/src/providers/strategies/siliconflow.strategy.ts +0 -28
  1697. package/src/providers/strategies/xai.strategy.ts +0 -33
  1698. package/src/providers/stream-loop.ts +0 -83
  1699. package/src/providers/types.ts +0 -145
  1700. package/src/providers/vision-proxy.test.ts +0 -252
  1701. package/src/providers/vision-proxy.ts +0 -317
  1702. package/src/providers/wire-debug.ts +0 -163
  1703. package/src/reporter/__tests__/acl-check.test.ts +0 -71
  1704. package/src/reporter/__tests__/auto-fire.test.ts +0 -161
  1705. package/src/reporter/__tests__/budget.test.ts +0 -74
  1706. package/src/reporter/__tests__/handlers.test.ts +0 -192
  1707. package/src/reporter/__tests__/query-router.test.ts +0 -115
  1708. package/src/reporter/acl-check.ts +0 -54
  1709. package/src/reporter/auto-fire.ts +0 -168
  1710. package/src/reporter/budget.ts +0 -59
  1711. package/src/reporter/handlers.ts +0 -212
  1712. package/src/reporter/index.ts +0 -210
  1713. package/src/reporter/query-router.ts +0 -51
  1714. package/src/router/.gitkeep +0 -0
  1715. package/src/router/__tests__/step-router.test.ts +0 -150
  1716. package/src/router/classifier/grammars.ts +0 -17
  1717. package/src/router/classifier/index.test.ts +0 -33
  1718. package/src/router/classifier/index.ts +0 -21
  1719. package/src/router/classifier/regex.test.ts +0 -51
  1720. package/src/router/classifier/regex.ts +0 -160
  1721. package/src/router/classifier/tree-sitter.test.ts +0 -26
  1722. package/src/router/classifier/tree-sitter.ts +0 -87
  1723. package/src/router/cold.test.ts +0 -62
  1724. package/src/router/cold.ts +0 -27
  1725. package/src/router/decide.test.ts +0 -209
  1726. package/src/router/decide.ts +0 -509
  1727. package/src/router/health.test.ts +0 -59
  1728. package/src/router/health.ts +0 -49
  1729. package/src/router/provider-sentinel.test.ts +0 -22
  1730. package/src/router/provider-sentinel.ts +0 -20
  1731. package/src/router/role-override.test.ts +0 -37
  1732. package/src/router/step-router.ts +0 -194
  1733. package/src/router/store.ts +0 -47
  1734. package/src/router/types.ts +0 -20
  1735. package/src/router/warm.test.ts +0 -234
  1736. package/src/router/warm.ts +0 -93
  1737. package/src/scaffold/__tests__/continuation-prompt.test.ts +0 -93
  1738. package/src/scaffold/__tests__/continue-as-council.spec.ts +0 -122
  1739. package/src/scaffold/__tests__/dotnet-assembly-name.test.ts +0 -28
  1740. package/src/scaffold/__tests__/fe-scaffold-contents.test.ts +0 -127
  1741. package/src/scaffold/__tests__/init-new.smoke.spec.ts +0 -99
  1742. package/src/scaffold/__tests__/init-new.spec.ts +0 -450
  1743. package/src/scaffold/__tests__/install-bb-templates.spec.ts +0 -86
  1744. package/src/scaffold/__tests__/point-to-existing.spec.ts +0 -114
  1745. package/src/scaffold/bb-ecosystem-apply.ts +0 -457
  1746. package/src/scaffold/bb-quality-gate.ts +0 -287
  1747. package/src/scaffold/continuation-prompt.ts +0 -80
  1748. package/src/scaffold/continue-as-council.ts +0 -99
  1749. package/src/scaffold/init-new.ts +0 -1691
  1750. package/src/scaffold/point-to-existing.ts +0 -83
  1751. package/src/scaffold/resume-from-gate-failures.ts +0 -167
  1752. package/src/self-qa/__tests__/agentic-context.test.ts +0 -104
  1753. package/src/self-qa/__tests__/agentic-loop.test.ts +0 -70
  1754. package/src/self-qa/__tests__/delta-encoder.test.ts +0 -113
  1755. package/src/self-qa/__tests__/judge.test.ts +0 -152
  1756. package/src/self-qa/__tests__/scenario-planner.test.ts +0 -87
  1757. package/src/self-qa/__tests__/spec-emitter.test.ts +0 -67
  1758. package/src/self-qa/agentic-context.ts +0 -211
  1759. package/src/self-qa/agentic-loop.ts +0 -590
  1760. package/src/self-qa/delta-encoder.ts +0 -149
  1761. package/src/self-qa/index.ts +0 -117
  1762. package/src/self-qa/judge.ts +0 -248
  1763. package/src/self-qa/orchestrator.ts +0 -269
  1764. package/src/self-qa/scenario-planner.ts +0 -289
  1765. package/src/self-qa/spec-emitter.ts +0 -152
  1766. package/src/self-qa/types.ts +0 -98
  1767. package/src/storage/__tests__/migrations.test.ts +0 -395
  1768. package/src/storage/__tests__/sweep-stale-pending.test.ts +0 -112
  1769. package/src/storage/__tests__/ui-interaction-log.test.ts +0 -136
  1770. package/src/storage/atomic-io.test.ts +0 -92
  1771. package/src/storage/atomic-io.ts +0 -160
  1772. package/src/storage/config.test.ts +0 -33
  1773. package/src/storage/config.ts +0 -53
  1774. package/src/storage/db.ts +0 -184
  1775. package/src/storage/index.ts +0 -26
  1776. package/src/storage/interaction-log.ts +0 -126
  1777. package/src/storage/migrations.ts +0 -205
  1778. package/src/storage/session-dir.ts +0 -37
  1779. package/src/storage/sessions.ts +0 -225
  1780. package/src/storage/tool-results.ts +0 -56
  1781. package/src/storage/transcript-response-entry.test.ts +0 -115
  1782. package/src/storage/transcript-view.ts +0 -45
  1783. package/src/storage/transcript.test.ts +0 -24
  1784. package/src/storage/transcript.ts +0 -637
  1785. package/src/storage/ui-interaction-log.ts +0 -170
  1786. package/src/storage/usage-cap.test.ts +0 -59
  1787. package/src/storage/usage-cap.ts +0 -81
  1788. package/src/storage/usage.ts +0 -117
  1789. package/src/storage/workspaces.ts +0 -84
  1790. package/src/tools/__tests__/vision-gate.test.ts +0 -66
  1791. package/src/tools/bash-output-cache.test.ts +0 -113
  1792. package/src/tools/bash-output-cache.ts +0 -156
  1793. package/src/tools/bash-output-integration.test.ts +0 -33
  1794. package/src/tools/bash.test.ts +0 -447
  1795. package/src/tools/bash.ts +0 -769
  1796. package/src/tools/computer.test.ts +0 -187
  1797. package/src/tools/computer.ts +0 -632
  1798. package/src/tools/file-tracker.test.ts +0 -101
  1799. package/src/tools/file-tracker.ts +0 -70
  1800. package/src/tools/file.test.ts +0 -151
  1801. package/src/tools/file.ts +0 -203
  1802. package/src/tools/grep.ts +0 -187
  1803. package/src/tools/registry-bash-empty-command.test.ts +0 -64
  1804. package/src/tools/registry-bash-footer.test.ts +0 -95
  1805. package/src/tools/registry-ee-query.test.ts +0 -57
  1806. package/src/tools/registry-session-repeat.test.ts +0 -105
  1807. package/src/tools/registry.test.ts +0 -38
  1808. package/src/tools/registry.ts +0 -704
  1809. package/src/tools/schedule.test.ts +0 -143
  1810. package/src/tools/schedule.ts +0 -610
  1811. package/src/tools/todo-write-snapshot.test.ts +0 -53
  1812. package/src/tools/todo-write-snapshot.ts +0 -63
  1813. package/src/tools/vision-gate.ts +0 -74
  1814. package/src/types/index.ts +0 -550
  1815. package/src/ui/__tests__/picker-providers.test.ts +0 -37
  1816. package/src/ui/agents-modal.tsx +0 -293
  1817. package/src/ui/app.tsx +0 -7084
  1818. package/src/ui/cards/__tests__/product-status-card.test.ts +0 -30
  1819. package/src/ui/cards/product-status-card.tsx +0 -117
  1820. package/src/ui/components/SuggestionOverlay.tsx +0 -38
  1821. package/src/ui/components/Toast.tsx +0 -100
  1822. package/src/ui/components/__tests__/council-leader-bubble.test.ts +0 -16
  1823. package/src/ui/components/__tests__/council-message-bubble.test.ts +0 -85
  1824. package/src/ui/components/__tests__/council-phase-timeline.test.ts +0 -57
  1825. package/src/ui/components/__tests__/council-placeholder-bubble.test.ts +0 -16
  1826. package/src/ui/components/__tests__/council-question-card.test.ts +0 -133
  1827. package/src/ui/components/__tests__/council-synthesis-banner.test.ts +0 -12
  1828. package/src/ui/components/__tests__/task-list-panel.test.ts +0 -37
  1829. package/src/ui/components/__tests__/use-pair-quote-buffer.test.ts +0 -41
  1830. package/src/ui/components/btw-overlay.tsx +0 -66
  1831. package/src/ui/components/bubble-layout.ts +0 -66
  1832. package/src/ui/components/code-block-truncate.ts +0 -24
  1833. package/src/ui/components/copy-flash-banner.tsx +0 -31
  1834. package/src/ui/components/council-info-card.tsx +0 -44
  1835. package/src/ui/components/council-leader-bubble.tsx +0 -40
  1836. package/src/ui/components/council-message-bubble.tsx +0 -110
  1837. package/src/ui/components/council-phase-timeline.tsx +0 -112
  1838. package/src/ui/components/council-placeholder-bubble.tsx +0 -64
  1839. package/src/ui/components/council-question-card.tsx +0 -256
  1840. package/src/ui/components/council-status-list.tsx +0 -111
  1841. package/src/ui/components/council-synthesis-banner.tsx +0 -36
  1842. package/src/ui/components/diff-view.tsx +0 -225
  1843. package/src/ui/components/halt-recovery-card.tsx +0 -84
  1844. package/src/ui/components/hero-logo.tsx +0 -62
  1845. package/src/ui/components/init-new-form-card.tsx +0 -470
  1846. package/src/ui/components/lsp-views.tsx +0 -104
  1847. package/src/ui/components/media-views.tsx +0 -66
  1848. package/src/ui/components/message-view.tsx +0 -442
  1849. package/src/ui/components/point-to-existing-form-card.tsx +0 -136
  1850. package/src/ui/components/prompt-box.tsx +0 -306
  1851. package/src/ui/components/role-palette.ts +0 -62
  1852. package/src/ui/components/session-header.tsx +0 -68
  1853. package/src/ui/components/slash-inline-menu.tsx +0 -63
  1854. package/src/ui/components/structured-response-view.tsx +0 -191
  1855. package/src/ui/components/task-list-panel.tsx +0 -127
  1856. package/src/ui/components/tool-group.tsx +0 -129
  1857. package/src/ui/components/tool-result-views.tsx +0 -258
  1858. package/src/ui/components/use-pair-quote-buffer.ts +0 -23
  1859. package/src/ui/constants.ts +0 -242
  1860. package/src/ui/hooks/use-agent-editor.ts +0 -61
  1861. package/src/ui/hooks/use-mcp-editor.ts +0 -39
  1862. package/src/ui/hooks/use-model-picker.ts +0 -50
  1863. package/src/ui/hooks/useTypeahead.ts +0 -160
  1864. package/src/ui/markdown.tsx +0 -49
  1865. package/src/ui/mcp-modal-types.ts +0 -33
  1866. package/src/ui/mcp-modal.tsx +0 -484
  1867. package/src/ui/modals/api-key-modal.tsx +0 -99
  1868. package/src/ui/modals/connect-modal.tsx +0 -259
  1869. package/src/ui/modals/model-picker-modal.tsx +0 -347
  1870. package/src/ui/modals/sandbox-picker-modal.tsx +0 -99
  1871. package/src/ui/modals/update-modal.tsx +0 -67
  1872. package/src/ui/modals/wallet-picker-modal.tsx +0 -186
  1873. package/src/ui/picker-providers.ts +0 -41
  1874. package/src/ui/plan.tsx +0 -346
  1875. package/src/ui/schedule-modal.tsx +0 -138
  1876. package/src/ui/slash/__tests__/clear.test.ts +0 -86
  1877. package/src/ui/slash/__tests__/compact.test.ts +0 -56
  1878. package/src/ui/slash/__tests__/cost.test.ts +0 -62
  1879. package/src/ui/slash/__tests__/discuss.test.ts +0 -101
  1880. package/src/ui/slash/__tests__/execute.test.ts +0 -86
  1881. package/src/ui/slash/__tests__/expand.test.ts +0 -86
  1882. package/src/ui/slash/__tests__/ideal.test.ts +0 -182
  1883. package/src/ui/slash/__tests__/menu-parity.test.ts +0 -44
  1884. package/src/ui/slash/__tests__/optimize.test.ts +0 -155
  1885. package/src/ui/slash/__tests__/pin.test.ts +0 -47
  1886. package/src/ui/slash/__tests__/plan.test.ts +0 -98
  1887. package/src/ui/slash/__tests__/status-render.test.ts +0 -82
  1888. package/src/ui/slash/clear.ts +0 -89
  1889. package/src/ui/slash/compact.ts +0 -46
  1890. package/src/ui/slash/cost.ts +0 -63
  1891. package/src/ui/slash/council-inspect.ts +0 -188
  1892. package/src/ui/slash/council.ts +0 -30
  1893. package/src/ui/slash/debug.ts +0 -153
  1894. package/src/ui/slash/discuss.ts +0 -71
  1895. package/src/ui/slash/ee.ts +0 -304
  1896. package/src/ui/slash/execute.ts +0 -44
  1897. package/src/ui/slash/expand.ts +0 -51
  1898. package/src/ui/slash/export.ts +0 -309
  1899. package/src/ui/slash/ideal.ts +0 -292
  1900. package/src/ui/slash/menu-items.ts +0 -107
  1901. package/src/ui/slash/optimize.ts +0 -47
  1902. package/src/ui/slash/pin.ts +0 -41
  1903. package/src/ui/slash/plan.ts +0 -62
  1904. package/src/ui/slash/registry.ts +0 -47
  1905. package/src/ui/slash/route.test.ts +0 -82
  1906. package/src/ui/slash/route.ts +0 -43
  1907. package/src/ui/slash/status.ts +0 -36
  1908. package/src/ui/state/active-run.ts +0 -56
  1909. package/src/ui/status-bar/index.test.tsx +0 -154
  1910. package/src/ui/status-bar/index.tsx +0 -126
  1911. package/src/ui/status-bar/store.test.ts +0 -131
  1912. package/src/ui/status-bar/store.ts +0 -332
  1913. package/src/ui/status-bar/tier-badge.test.tsx +0 -38
  1914. package/src/ui/status-bar/tier-badge.tsx +0 -29
  1915. package/src/ui/status-bar/usd-meter.test.tsx +0 -37
  1916. package/src/ui/status-bar/usd-meter.tsx +0 -22
  1917. package/src/ui/syntax-highlight.ts +0 -627
  1918. package/src/ui/terminal-selection-text.ts +0 -72
  1919. package/src/ui/theme.ts +0 -95
  1920. package/src/ui/types.ts +0 -83
  1921. package/src/ui/utils/__tests__/format.test.ts +0 -71
  1922. package/src/ui/utils/__tests__/tools.test.ts +0 -57
  1923. package/src/ui/utils/color.ts +0 -19
  1924. package/src/ui/utils/format.ts +0 -133
  1925. package/src/ui/utils/modal.ts +0 -9
  1926. package/src/ui/utils/text.ts +0 -32
  1927. package/src/ui/utils/tools.ts +0 -137
  1928. package/src/usage/.gitkeep +0 -0
  1929. package/src/usage/__tests__/product-ledger.test.ts +0 -86
  1930. package/src/usage/cost-log.ts +0 -158
  1931. package/src/usage/decision-log.ts +0 -86
  1932. package/src/usage/downgrade.test.ts +0 -86
  1933. package/src/usage/downgrade.ts +0 -88
  1934. package/src/usage/estimator.test.ts +0 -43
  1935. package/src/usage/estimator.ts +0 -58
  1936. package/src/usage/ledger.test.ts +0 -200
  1937. package/src/usage/ledger.ts +0 -253
  1938. package/src/usage/midstream.test.ts +0 -55
  1939. package/src/usage/midstream.ts +0 -51
  1940. package/src/usage/product-ledger.ts +0 -119
  1941. package/src/usage/thresholds.test.ts +0 -83
  1942. package/src/usage/thresholds.ts +0 -74
  1943. package/src/usage/types.ts +0 -41
  1944. package/src/utils/__tests__/auto-council-settings.test.ts +0 -46
  1945. package/src/utils/__tests__/ee-logger.test.ts +0 -197
  1946. package/src/utils/__tests__/file-lock.test.ts +0 -74
  1947. package/src/utils/__tests__/llm-deadline.test.ts +0 -64
  1948. package/src/utils/__tests__/rate-limit.test.ts +0 -42
  1949. package/src/utils/__tests__/settings-disabled-models.test.ts +0 -113
  1950. package/src/utils/__tests__/settings-web-research.test.ts +0 -45
  1951. package/src/utils/__tests__/slugify.test.ts +0 -45
  1952. package/src/utils/__tests__/visible-retry.test.ts +0 -195
  1953. package/src/utils/at-mentions.ts +0 -120
  1954. package/src/utils/clipboard-image.ts +0 -139
  1955. package/src/utils/ee-logger.ts +0 -163
  1956. package/src/utils/file-index.ts +0 -152
  1957. package/src/utils/file-lock.ts +0 -66
  1958. package/src/utils/git-root.ts +0 -17
  1959. package/src/utils/host-clipboard.ts +0 -68
  1960. package/src/utils/install-manager.test.ts +0 -167
  1961. package/src/utils/install-manager.ts +0 -429
  1962. package/src/utils/instructions.test.ts +0 -112
  1963. package/src/utils/instructions.ts +0 -149
  1964. package/src/utils/llm-deadline.ts +0 -80
  1965. package/src/utils/permission-mode.test.ts +0 -121
  1966. package/src/utils/permission-mode.ts +0 -94
  1967. package/src/utils/rate-limit.ts +0 -21
  1968. package/src/utils/redactor.test.ts +0 -100
  1969. package/src/utils/redactor.ts +0 -223
  1970. package/src/utils/settings.test.ts +0 -181
  1971. package/src/utils/settings.ts +0 -1163
  1972. package/src/utils/shell.test.ts +0 -102
  1973. package/src/utils/shell.ts +0 -204
  1974. package/src/utils/side-question.ts +0 -39
  1975. package/src/utils/skills.test.ts +0 -58
  1976. package/src/utils/skills.ts +0 -207
  1977. package/src/utils/slugify.ts +0 -9
  1978. package/src/utils/subagent-display.test.ts +0 -23
  1979. package/src/utils/subagent-display.ts +0 -11
  1980. package/src/utils/subagents-settings.test.ts +0 -84
  1981. package/src/utils/telegram-audio-settings.test.ts +0 -44
  1982. package/src/utils/update-checker.test.ts +0 -182
  1983. package/src/utils/update-checker.ts +0 -33
  1984. package/src/utils/visible-retry.ts +0 -56
  1985. package/src/verify/__tests__/coverage-parsers.test.ts +0 -86
  1986. package/src/verify/__tests__/dotnet-recipe.test.ts +0 -88
  1987. package/src/verify/checkpoint.test.ts +0 -186
  1988. package/src/verify/checkpoint.ts +0 -239
  1989. package/src/verify/coverage-parsers.ts +0 -76
  1990. package/src/verify/entrypoint.test.ts +0 -293
  1991. package/src/verify/entrypoint.ts +0 -495
  1992. package/src/verify/environment.test.ts +0 -119
  1993. package/src/verify/environment.ts +0 -115
  1994. package/src/verify/evidence.ts +0 -104
  1995. package/src/verify/orchestrator.test.ts +0 -159
  1996. package/src/verify/orchestrator.ts +0 -129
  1997. package/src/verify/recipes.ts +0 -592
  1998. package/src/verify/retry.ts +0 -62
  1999. package/src/verify/runtime-prep.test.ts +0 -47
  2000. /package/dist/src/{pil/layer16-clarity.test.d.ts → council/__tests__/clarification-prompt.test.d.ts} +0 -0
package/src/index.ts DELETED
@@ -1,1762 +0,0 @@
1
- #!/usr/bin/env bun
2
- // SECURITY: Redactor must be the FIRST import. installGlobalPatches() wraps
3
- // console.* before any subsequent import side-effect or log can emit an API key.
4
- // See: PROV-07, Pitfall 2 (HIGH severity API key leakage).
5
- import { redactor } from "./utils/redactor.js";
6
-
7
- redactor.installGlobalPatches();
8
-
9
- import { readFileSync } from "node:fs";
10
- import { InvalidArgumentError, program } from "commander";
11
- import { createInterface } from "readline";
12
-
13
- // Version is generated at build time by scripts/sync-version.cjs from
14
- // package.json. Inlining as a constant avoids three failure modes:
15
- // - Node ESM rejecting `import pkg from "../package.json"` without assertion
16
- // - bun --compile virtual fs not resolving readFileSync paths
17
- // - Stripping package.json from published files list
18
- import { PACKAGE_DESCRIPTION, PACKAGE_VERSION } from "./generated/version.js";
19
-
20
- const packageJson = { version: PACKAGE_VERSION, description: PACKAGE_DESCRIPTION };
21
-
22
- import { hydrateChatEnvFromKeychain } from "./chat/chat-keychain.js";
23
- import { setRenderSink } from "./ee/render.js";
24
- import {
25
- type CouncilAnswersFile,
26
- type CouncilAutoAnswerer,
27
- createHeadlessCouncilAutoAnswerer,
28
- handleCouncilChunk,
29
- parseCouncilAnswersFile,
30
- } from "./headless/council-answers";
31
- import {
32
- createHeadlessJsonlEmitter,
33
- type HeadlessOutputFormat,
34
- isHeadlessOutputFormat,
35
- renderHeadlessChunk,
36
- renderHeadlessPrelude,
37
- } from "./headless/output";
38
- import { loadCatalog, normalizeModelId } from "./models/registry.js";
39
- // Plan 00-07: boot-order modules — AbortContext + PendingCallsLog (TUI-01, TUI-03, TUI-04).
40
- import { createAbortContext } from "./orchestrator/abort.js";
41
- import { completeDelegation, failDelegation, loadDelegation } from "./orchestrator/delegations";
42
- import { Agent } from "./orchestrator/orchestrator";
43
- import { createPendingCallsLog } from "./orchestrator/pending-calls.js";
44
- import { getProviderCapabilities } from "./providers/capabilities.js";
45
- import { listStoredProviders, loadKeyForProvider, setKeyForProvider } from "./providers/keychain.js";
46
- import { detectProviderForModel } from "./providers/runtime.js";
47
- import type { ProviderId } from "./providers/types.js";
48
- import { loadConfig } from "./storage/config.js";
49
- import { loadUsage } from "./storage/usage-cap.js";
50
- import { startScheduleDaemon } from "./tools/schedule";
51
- import type { StreamChunk } from "./types/index.js";
52
- import { processAtMentions } from "./utils/at-mentions.js";
53
- import { runScriptManagedUninstall } from "./utils/install-manager";
54
- import type { PermissionMode } from "./utils/permission-mode.js";
55
- import {
56
- getApiKey,
57
- getBaseURL,
58
- getCurrentModel,
59
- getCurrentSandboxMode,
60
- getCurrentSandboxSettings,
61
- mergeSandboxSettings,
62
- type SandboxMode,
63
- type SandboxSettings,
64
- saveUserSettings,
65
- } from "./utils/settings";
66
- import { runUpdate } from "./utils/update-checker";
67
- import { buildVerifyPrompt, getVerifyCliError } from "./verify/entrypoint";
68
-
69
- // Hydrate chat secrets from OS keychain before CLI bootstrap
70
- await hydrateChatEnvFromKeychain();
71
-
72
- const exitCleanlyOnSigterm = () => {
73
- process.exit(0);
74
- };
75
-
76
- process.on("SIGTERM", exitCleanlyOnSigterm);
77
-
78
- process.on("uncaughtException", (err) => {
79
- try {
80
- require("fs").appendFileSync(
81
- require("path").join(require("os").homedir(), ".muonroi-cli", "crash.log"),
82
- `[${new Date().toISOString()}] UNCAUGHT: ${err.stack || err.message}\n`,
83
- );
84
- } catch {}
85
- console.error("Fatal:", err.message);
86
- process.exit(1);
87
- });
88
-
89
- process.on("unhandledRejection", (reason) => {
90
- const msg = reason instanceof Error ? reason.stack || reason.message : String(reason);
91
- try {
92
- require("fs").appendFileSync(
93
- require("path").join(require("os").homedir(), ".muonroi-cli", "crash.log"),
94
- `[${new Date().toISOString()}] REJECTION: ${msg}\n`,
95
- );
96
- } catch {}
97
- if (reason instanceof Error) {
98
- console.error("Unhandled rejection:", reason.stack || reason.message);
99
- } else if (reason && typeof reason === "object") {
100
- console.error("Unhandled rejection:", JSON.stringify(reason, Object.getOwnPropertyNames(reason)));
101
- } else {
102
- console.error("Unhandled rejection:", String(reason));
103
- }
104
- process.exit(1);
105
- });
106
-
107
- // ── EE render sink wiring (CQ-16a) ─────────────────────────────────────────
108
- // Single-orchestrator-at-a-time invariant holds (no multi-session concurrency in v1.6).
109
- // Sink routes experience_warning chunks into the active orchestrator's chat stream.
110
- // When no active stream (headless / idle): drop silently — never leak to stderr in TUI.
111
- let _activeEeYield: ((chunk: StreamChunk) => void) | null = null;
112
-
113
- export function setActiveEeYield(fn: ((chunk: StreamChunk) => void) | null): void {
114
- _activeEeYield = fn;
115
- }
116
-
117
- setRenderSink((lineOrChunk) => {
118
- if (!_activeEeYield) return; // drop silently when no TUI active
119
- const chunk: StreamChunk =
120
- typeof lineOrChunk === "string"
121
- ? { type: "experience_warning" as StreamChunk["type"], content: lineOrChunk }
122
- : lineOrChunk;
123
- _activeEeYield(chunk);
124
- });
125
-
126
- /**
127
- * First-run wizard: prompts for API key interactively when none is configured.
128
- * Output goes to stderr so it doesn't pollute piped stdout.
129
- * Returns the trimmed key or null if user cancels / stdin is not a TTY.
130
- */
131
- // Provider console URLs are sourced from providers/capabilities.ts via ProviderCapabilities.consoleSignupURL().
132
-
133
- /**
134
- * Try to find an API key for the model the CLI is about to run with.
135
- * Resolution: env (legacy MUONROI_API_KEY) → OS keychain → settings.json.
136
- * Returns null if nothing usable is configured anywhere.
137
- */
138
- async function resolveKeyForModel(modelId: string): Promise<string | null> {
139
- // Test escape hatch: harness specs that need to assert the API-key modal
140
- // appearance (api-key.spec.ts) set MUONROI_TEST_NO_KEYCHAIN=1 to suppress
141
- // the dev machine's real keychain entry from masking the unauthenticated
142
- // boot path. Honoured ONLY in tests — never read in production flows.
143
- if (process.env.MUONROI_TEST_NO_KEYCHAIN === "1") return null;
144
- const provider = detectProviderForModel(modelId);
145
- try {
146
- const k = await loadKeyForProvider(provider);
147
- if (k) return k;
148
- } catch {
149
- /* fall through to wizard */
150
- }
151
- return null;
152
- }
153
-
154
- /**
155
- * True when the active model's provider is authenticated via OAuth tokens
156
- * (subscription login) instead of an API key. Lets the boot flow skip the
157
- * first-run wizard for OAuth-only setups like a freshly logged-in ChatGPT
158
- * subscription.
159
- */
160
- async function hasOAuthForModel(modelId: string): Promise<boolean> {
161
- if (process.env.MUONROI_TEST_NO_KEYCHAIN === "1") return false;
162
- const provider = detectProviderForModel(modelId);
163
- try {
164
- const { getOAuthProviderConfig } = await import("./providers/auth/registry.js");
165
- const cfg = await getOAuthProviderConfig(provider);
166
- if (!cfg) return false;
167
- const tokens = await cfg.loadTokensWithRefresh();
168
- return !!tokens?.accessToken;
169
- } catch {
170
- return false;
171
- }
172
- }
173
-
174
- /**
175
- * First-run wizard. If the keychain already has keys, prints a hint
176
- * (model probably doesn't match any stored provider). Otherwise prompts
177
- * for provider + key and persists to the OS keychain.
178
- */
179
- /**
180
- * Supported splash providers — mirrors SPLASH_PROVIDERS in ui/app.tsx.
181
- * The wizard only surfaces these; other providers still work programmatically.
182
- */
183
- const WIZARD_PROVIDERS: readonly ProviderId[] = ["deepseek", "siliconflow"];
184
-
185
- async function firstRunWizard(currentModel?: string): Promise<string | null> {
186
- let rl: ReturnType<typeof createInterface> | undefined;
187
- try {
188
- rl = createInterface({ input: process.stdin, output: process.stderr });
189
- const ask = (q: string): Promise<string> => new Promise((resolve) => rl!.question(q, (answer) => resolve(answer)));
190
-
191
- process.stderr.write("\nWelcome to muonroi-cli!\n\n");
192
-
193
- const stored = await listStoredProviders();
194
- if (stored.length > 0) {
195
- process.stderr.write(`Keys already in keychain for: ${stored.join(", ")}\n`);
196
- if (currentModel) {
197
- const provider = detectProviderForModel(currentModel);
198
- process.stderr.write(`Current model '${currentModel}' uses provider '${provider}', which has no stored key.\n`);
199
- }
200
- process.stderr.write(
201
- "\nOptions:\n" +
202
- " 1. Run with a model that matches a stored provider:\n" +
203
- " muonroi-cli --model <model-id>\n" +
204
- " 2. Open /providers inside the TUI to add another key.\n" +
205
- " 3. muonroi-cli keys set <provider>\n\n",
206
- );
207
- rl.close();
208
- return null;
209
- }
210
-
211
- process.stderr.write("Pick how you want to add credentials:\n\n");
212
- process.stderr.write(" 1. Paste an API key (most common)\n");
213
- process.stderr.write(" 2. Import an encrypted bundle file (from another device)\n");
214
- process.stderr.write(" 3. Sync from a Bitwarden vault\n");
215
- process.stderr.write(" 4. Skip — set up later via /providers inside the TUI\n\n");
216
- const actionChoice = (await ask("Choice [1-4, default 1]: ")).trim() || "1";
217
-
218
- if (actionChoice === "4") {
219
- process.stderr.write("\nSkipped. Open /providers inside the TUI to add a key any time.\n");
220
- rl.close();
221
- return null;
222
- }
223
-
224
- if (actionChoice === "2") {
225
- const file = (await ask("Path to bundle file: ")).trim();
226
- if (!file) {
227
- process.stderr.write("No file provided. Aborted.\n");
228
- rl.close();
229
- return null;
230
- }
231
- const passphrase = await ask("Bundle passphrase: ");
232
- try {
233
- const { readFileSync: readFile } = await import("node:fs");
234
- const { decryptBundle } = await import("./cli/keys-bundle.js");
235
- const raw = readFile(file, "utf8");
236
- const bundle = JSON.parse(raw);
237
- const payload = decryptBundle(bundle, passphrase);
238
- let imported = 0;
239
- for (const [prov, key] of Object.entries(payload.providers)) {
240
- if (!(WIZARD_PROVIDERS as readonly string[]).includes(prov)) continue;
241
- if (typeof key !== "string" || key.length < 20) continue;
242
- const ok = await setKeyForProvider(prov as ProviderId, key);
243
- if (ok) {
244
- imported++;
245
- process.stderr.write(` ✓ ${prov} → keychain\n`);
246
- }
247
- }
248
- process.stderr.write(`\nImported ${imported} key(s). Launch the TUI to start.\n`);
249
- rl.close();
250
- // Return any imported key just so caller treats setup as done.
251
- return imported > 0 ? "imported" : null;
252
- } catch (err) {
253
- process.stderr.write(`\nImport failed: ${(err as Error).message}\n`);
254
- rl.close();
255
- return null;
256
- }
257
- }
258
-
259
- if (actionChoice === "3") {
260
- const password = await ask("Bitwarden master password: ");
261
- try {
262
- const { unlockWithPassword, listSecureNotesByPrefix } = await import("./cli/bw-vault.js");
263
- const unlock = await unlockWithPassword(password);
264
- if (!unlock.ok || !unlock.session) {
265
- process.stderr.write(`\nBitwarden unlock failed: ${unlock.error ?? "unknown error"}\n`);
266
- rl.close();
267
- return null;
268
- }
269
- const list = await listSecureNotesByPrefix(unlock.session, "muonroi-cli/");
270
- if (!list.ok) {
271
- process.stderr.write(`\nBitwarden list failed: ${list.error}\n`);
272
- rl.close();
273
- return null;
274
- }
275
- let imported = 0;
276
- for (const item of list.items) {
277
- const prov = item.name.slice("muonroi-cli/".length);
278
- if (!(WIZARD_PROVIDERS as readonly string[]).includes(prov)) continue;
279
- if (item.notes.length < 20) continue;
280
- const ok = await setKeyForProvider(prov as ProviderId, item.notes);
281
- if (ok) {
282
- imported++;
283
- process.stderr.write(` ✓ ${prov} → keychain\n`);
284
- }
285
- }
286
- process.stderr.write(`\nImported ${imported} key(s) from Bitwarden. Launch the TUI to start.\n`);
287
- rl.close();
288
- return imported > 0 ? "imported" : null;
289
- } catch (err) {
290
- process.stderr.write(`\nBitwarden sync failed: ${(err as Error).message}\n`);
291
- rl.close();
292
- return null;
293
- }
294
- }
295
-
296
- // Default path: paste an API key for one of WIZARD_PROVIDERS.
297
- process.stderr.write("\nSupported providers:\n\n");
298
- WIZARD_PROVIDERS.forEach((p, i) => {
299
- process.stderr.write(` ${i + 1}. ${p.padEnd(12)} ${getProviderCapabilities(p).consoleSignupURL()}\n`);
300
- });
301
- process.stderr.write("\n");
302
-
303
- const choice = (await ask(`Provider [1-${WIZARD_PROVIDERS.length}, default 1]: `)).trim();
304
- const idx = choice ? Number.parseInt(choice, 10) - 1 : 0;
305
- if (!Number.isFinite(idx) || idx < 0 || idx >= WIZARD_PROVIDERS.length) {
306
- process.stderr.write("Invalid choice — aborted.\n");
307
- rl.close();
308
- return null;
309
- }
310
- const provider = WIZARD_PROVIDERS[idx];
311
- if (!provider) {
312
- process.stderr.write("Invalid choice — aborted.\n");
313
- rl.close();
314
- return null;
315
- }
316
-
317
- process.stderr.write(`\nGet a key here: ${getProviderCapabilities(provider).consoleSignupURL()}\n`);
318
- const raw = await ask(`Paste your ${provider} API key: `);
319
-
320
- const trimmed = raw.trim();
321
- if (!trimmed) {
322
- process.stderr.write("No key provided. Aborted.\n");
323
- rl.close();
324
- return null;
325
- }
326
- if (trimmed.length < 20) {
327
- process.stderr.write("Key looks too short (< 20 chars). Aborted.\n");
328
- rl.close();
329
- return null;
330
- }
331
-
332
- try {
333
- const ok = await setKeyForProvider(provider, trimmed);
334
- if (ok) {
335
- process.stderr.write(`\nStored ${provider} key in OS keychain.\n`);
336
- process.stderr.write("Tip: run 'muonroi-cli keys export ~/keys.json' to back up + move to other devices.\n");
337
- if (currentModel) {
338
- const currentProvider = detectProviderForModel(currentModel);
339
- if (currentProvider !== provider) {
340
- process.stderr.write(
341
- `\nNote: defaultModel '${currentModel}' is on '${currentProvider}'. ` +
342
- `Edit ~/.muonroi-cli/user-settings.json or rerun with --model to use ${provider}.\n`,
343
- );
344
- }
345
- }
346
- } else {
347
- process.stderr.write(
348
- "\nOS keychain unavailable (keytar or secret service backend).\n" +
349
- "Linux: sudo dnf install libsecret (Fedora) or sudo apt-get install libsecret-1-0 (Ubuntu).\n" +
350
- "Key will be used for this session only. For persistence across runs:\n" +
351
- ` export ${provider.toUpperCase()}_API_KEY=...\n`,
352
- );
353
- }
354
- } catch (err) {
355
- process.stderr.write(`\nWarning: failed to store key in keychain: ${(err as Error).message}\n`);
356
- }
357
-
358
- rl.close();
359
- return trimmed;
360
- } catch {
361
- rl?.close();
362
- return null;
363
- }
364
- }
365
-
366
- async function startInteractive(
367
- apiKey: string | undefined,
368
- baseURL: string,
369
- model: string | undefined,
370
- maxToolRounds: number,
371
- batchApi: boolean,
372
- sandboxMode: SandboxMode,
373
- sandboxSettings: SandboxSettings,
374
- session?: string,
375
- initialMessage?: string,
376
- permissionMode: PermissionMode = "safe",
377
- injectHalt = false,
378
- ) {
379
- // ── Plan 00-07 boot order ──────────────────────────────────────────────────
380
- // 1. redactor.installGlobalPatches() — already at top of file (line 6).
381
- // 2. loadConfig + loadUsage (validates storage paths, logs usage cap state).
382
- const [config, usage] = await Promise.all([loadConfig(), loadUsage()]);
383
- void config; // Phase 0: plumbed but not yet surfaced in TUI status bar (TUI-05, Phase 1).
384
- void usage; // Phase 0: same — cap guard will gate on this in plan 00-06+ / Phase 1.
385
-
386
- // 3. Load API key for the active provider — enrolls into redactor.
387
- const activeModel = getCurrentModel();
388
- const activeProvider = detectProviderForModel(activeModel);
389
- const providerKey = await loadKeyForProvider(activeProvider).catch(() => undefined);
390
- void providerKey; // Agent also loads key internally; this run is for early redactor enrollment.
391
-
392
- // Web-research migration prompt — runs once per install for existing users
393
- // who never saw the first-run wizard's research step. Skip in non-interactive
394
- // mode (--prompt, --verify, headless harnesses).
395
- if (process.stdin.isTTY) {
396
- try {
397
- const { loadUserSettings } = await import("./utils/settings.js");
398
- if (loadUserSettings().webResearchPrompted !== true) {
399
- const rl = createInterface({ input: process.stdin, output: process.stderr });
400
- const ask = (q: string): Promise<string> => new Promise((resolve) => rl.question(q, (a) => resolve(a)));
401
- try {
402
- const { runResearchMigrationPrompt } = await import("./mcp/research-onboarding.js");
403
- await runResearchMigrationPrompt({
404
- askChoice: ask,
405
- askText: ask,
406
- log: (m) => process.stderr.write(m),
407
- });
408
- } finally {
409
- rl.close();
410
- }
411
- }
412
- } catch (err) {
413
- process.stderr.write(`\nWarning: research migration prompt failed: ${(err as Error).message}\n`);
414
- }
415
- }
416
-
417
- // 5-6. createPendingCallsLog + createAbortContext — wired before Agent so
418
- // the Agent receives them via AgentOptions (Pitfall 9, TUI-04).
419
- // Session ID is not available until Agent opens SQLite; use a stable
420
- // pre-session sentinel "pre-session" for the pending-calls log.
421
- // After Agent is constructed we promote to the real session ID.
422
- const orchestratorAbort = createAbortContext();
423
-
424
- // 7. SIGINT handler — must be registered BEFORE mountTUI so Ctrl+C fires
425
- // abort before OpenTUI's own handler chains. The handler is non-blocking:
426
- // it only sets the abort signal; OpenTUI's teardown flushes terminal state
427
- // on its own reconciler path.
428
- process.on("SIGINT", () => {
429
- orchestratorAbort.abort("SIGINT");
430
- // OpenTUI will receive its own SIGINT / Ctrl+C via exitOnCtrlC:false;
431
- // onExit below handles the cleanup sequence.
432
- });
433
-
434
- // ── Construct Agent (opens SQLite, loads transcript, wires abort + pending) ─
435
- // PendingCallsLog: use session selector as provisional ID; Agent will have
436
- // the real session ID after construction.
437
- const provisionalSessionId = session ?? "latest";
438
- const pendingCalls = createPendingCallsLog(provisionalSessionId);
439
- // Reconcile any orphaned .tmp files from a prior crash (Pitfall 9).
440
- const reconciled = await pendingCalls.reconcile();
441
- if (reconciled.abandoned > 0) {
442
- console.warn(`[muonroi-cli] reconciled ${reconciled.abandoned} abandoned tool calls from prior session`);
443
- }
444
-
445
- const agent = new Agent(apiKey, baseURL, model, maxToolRounds, {
446
- session,
447
- sandboxMode,
448
- sandboxSettings,
449
- batchApi,
450
- abortContext: orchestratorAbort,
451
- pendingCalls,
452
- permissionMode,
453
- });
454
- // ── /Plan 00-07 boot order ────────────────────────────────────────────────
455
-
456
- const { createCliRenderer } = await import("@opentui/core");
457
- const { createRoot } = await import("@opentui/react");
458
- const { createElement } = await import("react");
459
- const { App } = await import("./ui/app");
460
-
461
- const renderer = await createCliRenderer({
462
- exitOnCtrlC: false,
463
- // We manage SIGINT ourselves (orchestrator abort → agent cleanup → renderer destroy).
464
- // Prevent OpenTUI from registering its own SIGINT/SIGTERM handler which would
465
- // call renderer.destroy() prematurely and race with our orderly shutdown.
466
- exitSignals: [],
467
- // Lets terminals (Kitty, iTerm2, WezTerm, …) report Command as `super` on KeyEvent — needed for ⌘C in the TUI.
468
- useKittyKeyboard: {
469
- disambiguate: true,
470
- alternateKeys: true,
471
- },
472
- });
473
-
474
- /**
475
- * Restore terminal to main-screen mode before the process exits.
476
- *
477
- * On some terminals (WezTerm, especially under MINGW64/Git Bash), the native
478
- * destroyRenderer() call inside renderer.destroy() does not reliably flush
479
- * the Kitty-keyboard-disable and alternate-screen-exit escape sequences
480
- * before process.exit() kills the runtime. This leaves the terminal in a
481
- * half-restored state where subsequent shell output is interpreted as raw
482
- * escape codes, producing the "jumping numbers" effect.
483
- *
484
- * The fix explicitly writes the restore sequences from JS and adds a brief
485
- * flush delay before process.exit().
486
- */
487
- function restoreTerminalSync(): void {
488
- try {
489
- // 1. Disable Kitty keyboard protocol if enabled.
490
- if (typeof (renderer as any).disableKittyKeyboard === "function") {
491
- (renderer as any).disableKittyKeyboard();
492
- }
493
- // 2. Restore terminal modes (bracketed paste, cursor, etc.).
494
- if (typeof (renderer as any).lib?.restoreTerminalModes === "function") {
495
- (renderer as any).lib.restoreTerminalModes((renderer as any).rendererPtr);
496
- }
497
- } catch {
498
- // best-effort — terminal restore must never throw
499
- }
500
- }
501
-
502
- // WezTerm closes the pane/window when the foreground process exits.
503
- // Detect WezTerm via env vars and hold the process open briefly so the
504
- // user can see the terminal before the window disappears.
505
- const isWezTerm =
506
- !!process.env.WEZTERM_PANE ||
507
- !!process.env.WEZTERM_EXECUTABLE ||
508
- !!process.env.WEZTERM_CONFIG_FILE ||
509
- !!process.env.WEZTERM_UNIX_SOCKET ||
510
- process.env.TERM_PROGRAM === "WezTerm" ||
511
- process.env.TERM_PROGRAM === "wezterm" ||
512
- process.env.MUONROI_FORCE_SHELL_HOLD === "1";
513
-
514
- const onExit = () => {
515
- void agent.cleanup().finally(() => {
516
- // Restore terminal state from JS before the native destroyRenderer runs
517
- restoreTerminalSync();
518
-
519
- renderer.destroy();
520
-
521
- // Restore terminal modes BEFORE spawning child shell. Use synchronous
522
- // writes to stdout's underlying fd so escape codes flush before the
523
- // child inherits stdin — async process.stdout.write() can buffer past
524
- // the spawn() boundary, leaving the terminal in mouse-tracking mode.
525
- const writeSync = (seq: string) => {
526
- try {
527
- const fs = require("node:fs") as typeof import("node:fs");
528
- fs.writeSync(1, seq);
529
- } catch {
530
- /* fall back to async */
531
- try {
532
- process.stdout.write(seq);
533
- } catch {
534
- /* noop */
535
- }
536
- }
537
- };
538
- try {
539
- // 1. Take stdin out of raw mode + pause it so no buffered keystrokes
540
- // (or in-flight mouse-event bytes) hit the child shell.
541
- if (process.stdin.isTTY && typeof process.stdin.setRawMode === "function") {
542
- try {
543
- process.stdin.setRawMode(false);
544
- } catch {
545
- /* noop */
546
- }
547
- }
548
- try {
549
- process.stdin.pause();
550
- } catch {
551
- /* noop */
552
- }
553
- try {
554
- (process.stdin as unknown as { unref?: () => void }).unref?.();
555
- } catch {
556
- /* noop */
557
- }
558
- // 2. Disable extended-coords first (1006/1015/1005), then the basic
559
- // tracking modes (1003→1002→1000). Wrong order leaves the terminal
560
- // emitting SGR-formatted events after the base modes are off.
561
- writeSync("\x1B[?1006l\x1B[?1015l\x1B[?1005l");
562
- writeSync("\x1B[?1003l\x1B[?1002l\x1B[?1000l");
563
- writeSync("\x1B[?2004l\x1B[?25h"); // bracketed paste off, cursor on
564
- writeSync("\x1B[?1049l\x1B[0m\x1B[!p"); // exit alt-screen, reset SGR, soft reset
565
- } catch {
566
- // best-effort
567
- }
568
-
569
- // WezTerm (and similar single-pane terminals) closes the window when
570
- // the foreground process exits. To keep the pane usable after `/exit`,
571
- // we hand control over to an interactive shell instead of exiting.
572
- // Disable with MUONROI_NO_SHELL_HOLD=1.
573
- const holdMode = process.env.MUONROI_NO_SHELL_HOLD === "1" ? "exit" : isWezTerm ? "shell" : "exit";
574
- if (holdMode === "shell") {
575
- // Defer spawn so the disable sequences are processed by the terminal
576
- // BEFORE the child shell takes over stdin. Without this, the child
577
- // can race with the in-flight disable codes and inherit a still-
578
- // mouse-tracking terminal (visible as "35;145;26M" garbage at the
579
- // shell prompt when the user moves the mouse).
580
- setTimeout(() => {
581
- try {
582
- const { spawn } = require("node:child_process") as typeof import("node:child_process");
583
- const isWin = process.platform === "win32";
584
- const shellCmd =
585
- process.env.MUONROI_EXIT_SHELL ||
586
- process.env.SHELL ||
587
- (isWin ? process.env.COMSPEC || "cmd.exe" : "/bin/bash");
588
- writeSync("\nSession ended. Returning to shell — type `exit` to close this pane.\n\n");
589
- const child = spawn(shellCmd, [], { stdio: "inherit", shell: false });
590
- child.on("exit", (code) => process.exit(code ?? 0));
591
- child.on("error", () => process.exit(0));
592
- } catch {
593
- setTimeout(() => process.exit(0), 16);
594
- }
595
- }, 80);
596
- } else {
597
- // Give the OS a tick to flush stdout before we exit.
598
- setTimeout(() => process.exit(0), 16);
599
- }
600
- });
601
- };
602
-
603
- createRoot(renderer).render(
604
- createElement(App, {
605
- agent,
606
- startupConfig: {
607
- apiKey,
608
- baseURL,
609
- model: agent.getModel(),
610
- maxToolRounds,
611
- sandboxMode,
612
- sandboxSettings,
613
- version: packageJson.version,
614
- injectHalt,
615
- },
616
- initialMessage,
617
- onExit,
618
- }),
619
- );
620
- }
621
-
622
- async function runHeadless(
623
- prompt: string,
624
- apiKey: string,
625
- baseURL: string,
626
- model: string | undefined,
627
- maxToolRounds: number,
628
- batchApi: boolean,
629
- sandboxMode: SandboxMode,
630
- sandboxSettings: SandboxSettings,
631
- format: HeadlessOutputFormat,
632
- session?: string,
633
- permissionMode: PermissionMode = "safe",
634
- councilAutoAnswer?: CouncilAutoAnswerer | null,
635
- ) {
636
- const agent = new Agent(apiKey, baseURL, model, maxToolRounds, {
637
- session,
638
- sandboxMode,
639
- sandboxSettings,
640
- batchApi,
641
- permissionMode,
642
- });
643
- const prelude = renderHeadlessPrelude(format, agent.getSessionId() || undefined);
644
- if (prelude.stdout) process.stdout.write(prelude.stdout);
645
- if (prelude.stderr) process.stderr.write(prelude.stderr);
646
-
647
- function writeSafe(stream: NodeJS.WriteStream, data: string): void {
648
- try {
649
- stream.write(data);
650
- } catch (e: unknown) {
651
- if ((e as NodeJS.ErrnoException).code === "EPIPE") process.exit(0);
652
- throw e;
653
- }
654
- }
655
-
656
- // Council askcards have no TUI to render them in headless mode. When
657
- // auto-answer is enabled, resolve the responder promises with either the
658
- // scripted answer or `defaultIndex` — otherwise the process hangs forever.
659
- const councilSink = {
660
- respondToQuestion: (id: string, a: string) => agent.respondToCouncilQuestion(id, a),
661
- respondToPreflight: (id: string, ok: boolean) => agent.respondToCouncilPreflight(id, ok),
662
- };
663
- function maybeAutoAnswer(chunk: {
664
- type: string;
665
- councilQuestion?: import("./types/index.js").CouncilQuestionData;
666
- councilPreflight?: { preflightId: string };
667
- }): void {
668
- const auditLine = handleCouncilChunk(chunk, councilAutoAnswer ?? null, councilSink);
669
- if (auditLine) writeSafe(process.stderr, `${auditLine}\n`);
670
- }
671
-
672
- try {
673
- const { enhancedMessage } = processAtMentions(prompt, process.cwd());
674
-
675
- if (format === "json") {
676
- const { observer, consumeChunk, flush } = createHeadlessJsonlEmitter(agent.getSessionId() || undefined);
677
- for await (const chunk of agent.processMessage(enhancedMessage, observer)) {
678
- maybeAutoAnswer(chunk);
679
- const writes = consumeChunk(chunk);
680
- if (writes.stdout) writeSafe(process.stdout, writes.stdout);
681
- if (writes.stderr) writeSafe(process.stderr, writes.stderr ?? "");
682
- }
683
- const tail = flush();
684
- if (tail.stdout) writeSafe(process.stdout, tail.stdout);
685
- if (tail.stderr) writeSafe(process.stderr, tail.stderr ?? "");
686
- return;
687
- }
688
-
689
- for await (const chunk of agent.processMessage(enhancedMessage)) {
690
- maybeAutoAnswer(chunk);
691
- const writes = renderHeadlessChunk(chunk);
692
- if (writes.stdout) writeSafe(process.stdout, writes.stdout);
693
- if (writes.stderr) writeSafe(process.stderr, writes.stderr);
694
- }
695
- } finally {
696
- await agent.cleanup();
697
- }
698
- }
699
-
700
- function loadCouncilAnswersOrExit(filePath: string): CouncilAnswersFile {
701
- try {
702
- const raw = readFileSync(filePath, "utf8");
703
- return parseCouncilAnswersFile(raw);
704
- } catch (err: unknown) {
705
- const msg = err instanceof Error ? err.message : String(err);
706
- console.error(`Cannot load --council-answers file "${filePath}": ${msg}`);
707
- process.exit(1);
708
- }
709
- }
710
-
711
- function changeDirectoryOrExit(directory: string | undefined) {
712
- if (!directory) {
713
- return;
714
- }
715
-
716
- try {
717
- process.chdir(directory);
718
- } catch (err: unknown) {
719
- const msg = err instanceof Error ? err.message : String(err);
720
- console.error(`Cannot change to directory ${directory}: ${msg}`);
721
- process.exit(1);
722
- }
723
- }
724
-
725
- type CliOptions = Record<string, string | boolean | undefined>;
726
-
727
- function stringOption(value: string | boolean | undefined): string | undefined {
728
- return typeof value === "string" ? value : undefined;
729
- }
730
-
731
- function collect(value: string, prev: string[]): string[] {
732
- return [...prev, value];
733
- }
734
-
735
- function resolveCliSandboxMode(value: string | boolean | undefined): SandboxMode | undefined {
736
- if (value === true) return "shuru";
737
- if (value === false) return "off";
738
- return undefined;
739
- }
740
-
741
- async function runBackgroundDelegation(jobPath: string, options: CliOptions) {
742
- let output = "";
743
- let agent: Agent | undefined;
744
-
745
- try {
746
- const delegation = await loadDelegation(jobPath);
747
-
748
- const baseURL = stringOption(options.baseUrl) || getBaseURL();
749
- const explicitModel = stringOption(options.model) || delegation.model;
750
- const model = explicitModel ? normalizeModelId(explicitModel) : undefined;
751
-
752
- // Resolve API key: explicit flag > legacy env/settings.apiKey > per-provider keychain
753
- // (matches the foreground flow — delegations were previously broken when the user
754
- // only had a per-provider key in the OS keychain, e.g. deepseek.)
755
- let apiKey = stringOption(options.apiKey) || getApiKey();
756
- if (!apiKey) {
757
- const modelForResolve = model ?? delegation.model ?? getCurrentModel("agent");
758
- const keychainKey = await resolveKeyForModel(modelForResolve);
759
- if (keychainKey) {
760
- apiKey = keychainKey;
761
- } else if (await hasOAuthForModel(modelForResolve)) {
762
- apiKey = "oauth";
763
- }
764
- }
765
- if (!apiKey) {
766
- throw new Error(
767
- "API key required. Set MUONROI_API_KEY, use --api-key, save it to ~/.muonroi-cli/user-settings.json, " +
768
- "or run 'muonroi-cli keys login <provider>' for subscription OAuth.",
769
- );
770
- }
771
- const maxToolRounds =
772
- parseInt(stringOption(options.maxToolRounds) || String(delegation.maxToolRounds), 10) || delegation.maxToolRounds;
773
- const sandboxMode = resolveCliSandboxMode(options.sandbox) || delegation.sandboxMode || getCurrentSandboxMode();
774
- const sandboxSettings = mergeSandboxSettings(getCurrentSandboxSettings(), delegation.sandboxSettings);
775
- agent = new Agent(apiKey, baseURL, model, maxToolRounds, {
776
- persistSession: false,
777
- sandboxMode,
778
- sandboxSettings,
779
- batchApi: Boolean(delegation.batchApi ?? options.batchApi === true),
780
- });
781
- const result = await agent.runTaskRequest({
782
- agent: delegation.agent,
783
- description: delegation.description,
784
- prompt: delegation.prompt,
785
- });
786
-
787
- output = (result.output || "").trim();
788
-
789
- if (!result.success) {
790
- await failDelegation(jobPath, result.output || result.error || "Background delegation failed.", output);
791
- return;
792
- }
793
-
794
- await completeDelegation(jobPath, output, result.task?.summary);
795
- } catch (err: unknown) {
796
- const msg = err instanceof Error ? err.message : String(err);
797
- try {
798
- await failDelegation(jobPath, msg, output);
799
- } catch {
800
- // Best effort — background tasks should fail silently if persistence is unavailable.
801
- }
802
- process.exit(1);
803
- } finally {
804
- await agent?.cleanup();
805
- }
806
- }
807
-
808
- async function persistApiKeyToKeychain(rawKey: string, modelHint?: string): Promise<boolean> {
809
- const provider = detectProviderForModel(modelHint ?? getCurrentModel("agent"));
810
- try {
811
- return await setKeyForProvider(provider, rawKey);
812
- } catch {
813
- return false;
814
- }
815
- }
816
-
817
- function resolveConfig(options: CliOptions) {
818
- const apiKey = stringOption(options.apiKey) || getApiKey();
819
- const baseURL = stringOption(options.baseUrl) || getBaseURL();
820
- const explicitModel = stringOption(options.model);
821
- const model = explicitModel ? normalizeModelId(explicitModel) : undefined;
822
- // PIL-L6 v2 — default cap lowered 400 → 100 after session 127140a47b56
823
- // (a single debug turn ran 275 LLM calls over 21 min, $0.63 cost, never
824
- // converged). 100 rounds still covers legitimate multi-file refactor/debug
825
- // work; runaway loops abort with the "Reached max tool rounds" error
826
- // surface so the user can adjust scope. Override via --max-tool-rounds CLI
827
- // flag or MUONROI_MAX_TOOL_ROUNDS env.
828
- const maxToolRounds = parseInt(stringOption(options.maxToolRounds) || "12", 10) || 12;
829
- const sandboxMode = resolveCliSandboxMode(options.sandbox) || getCurrentSandboxMode();
830
-
831
- const cliOverrides: SandboxSettings = {};
832
- if (options.allowNet === true) cliOverrides.allowNet = true;
833
- const allowHostValue = options.allowHost;
834
- if (Array.isArray(allowHostValue) && allowHostValue.length > 0) {
835
- cliOverrides.allowedHosts = allowHostValue as string[];
836
- if (!cliOverrides.allowNet) cliOverrides.allowNet = true;
837
- }
838
- const portValue = options.port;
839
- if (Array.isArray(portValue) && portValue.length > 0) {
840
- cliOverrides.ports = portValue as string[];
841
- }
842
- const sandboxSettings = mergeSandboxSettings(getCurrentSandboxSettings(), cliOverrides);
843
-
844
- if (typeof options.apiKey === "string" && process.env.MUONROI_TEST_NO_PERSIST !== "1") {
845
- // Persist to OS keychain (per-provider) instead of plaintext settings.json.
846
- // Fire-and-forget: keychain write is async; if it fails (no keytar), the key still
847
- // works for this run via `apiKey` above and the user can re-supply it next invocation.
848
- void persistApiKeyToKeychain(options.apiKey, stringOption(options.model)).catch(() => {});
849
- }
850
- if (typeof options.model === "string") saveUserSettings({ defaultModel: normalizeModelId(options.model) });
851
-
852
- if (options.sandbox !== undefined) {
853
- const resolved = resolveCliSandboxMode(options.sandbox);
854
- if (resolved) {
855
- saveUserSettings({ sandboxMode: resolved });
856
- }
857
- }
858
-
859
- return { apiKey, baseURL, model, maxToolRounds, sandboxMode, sandboxSettings };
860
- }
861
-
862
- function requireApiKey(apiKey: string | undefined): string {
863
- if (!apiKey) {
864
- console.error(
865
- "Error: API key required. Set MUONROI_API_KEY env var, use --api-key, or save to ~/.muonroi-cli/user-settings.json",
866
- );
867
- process.exit(1);
868
- }
869
-
870
- return apiKey;
871
- }
872
-
873
- function parseHeadlessOutputFormat(value: string): HeadlessOutputFormat {
874
- if (isHeadlessOutputFormat(value)) {
875
- return value;
876
- }
877
-
878
- throw new InvalidArgumentError(`Invalid headless format "${value}". Expected "text" or "json".`);
879
- }
880
-
881
- program
882
- .name("muonroi-cli")
883
- .description("AI coding agent — built with Bun and OpenTUI")
884
- .version(packageJson.version)
885
- .argument("[message...]", "Initial message to send")
886
- .option("-k, --api-key <key>", "API key")
887
- .option("-u, --base-url <url>", "API base URL")
888
- .option("-m, --model <model>", "Model to use")
889
- .option("-d, --directory <dir>", "Working directory", process.cwd())
890
- .option("-p, --prompt <prompt>", "Run a single prompt headlessly")
891
- .option("--verify", "Run the built-in verify flow headlessly")
892
- .option("--format <format>", "Headless output format: text or json", parseHeadlessOutputFormat, "text")
893
- .option("--sandbox", "Run agent shell commands inside a Shuru sandbox")
894
- .option("--no-sandbox", "Run agent shell commands directly on the host")
895
- .option("--allow-net", "Enable network access inside the Shuru sandbox")
896
- .option("--allow-host <pattern>", "Restrict sandbox network to specific hosts (repeatable)", collect, [])
897
- .option("--port <mapping>", "Forward a host port to sandbox guest (HOST:GUEST, repeatable)", collect, [])
898
- .option("-s, --session <id>", "Continue a saved session by id, or use 'latest'")
899
- .option("--background-task-file <path>", "Run a persisted background delegation")
900
- .option("--max-tool-rounds <n>", "Max tool execution rounds (ultimate runaway safety net)", "120")
901
- .option("--batch-api", "Use xAI Batch API for model calls (async, lower cost)")
902
- .option(
903
- "--permission <mode>",
904
- "Permission mode: safe (confirm all), auto-edit (auto-approve file ops), yolo (auto-approve all)",
905
- "safe",
906
- )
907
- .option("-y, --yes", "Headless: auto-answer council askcards with their default option and approve preflights")
908
- .option("--council-answers <file>", "Headless: JSON file with scripted council answers per phase (FIFO)")
909
- .option("--update", "Update muonroi-cli to the latest version and exit")
910
- .option("--smoke-boot-only", "CI smoke: validate loadConfig + loadUsage and exit 0 — no keychain access")
911
- .option("--agent-mode", "Enable agent harness mode (JSONL sidechannel)")
912
- .option("--agent-cols <n>", "Terminal columns in agent-mode", (v) => parseInt(v, 10), 120)
913
- .option("--agent-rows <n>", "Terminal rows in agent-mode", (v) => parseInt(v, 10), 40)
914
- .option("--agent-idle-ms <n>", "Idle quiescence window (ms)", (v) => parseInt(v, 10), 50)
915
- .option("--agent-fake-clock", "Use deterministic frame-counter clock")
916
- .option("--mock-llm <dir>", "Use fixture-based mock LLM from <dir> instead of real provider (E2E testing)")
917
- .option("--inject-halt", "TEST SEAM: render a synthetic halt recovery card after boot (harness E2E only)")
918
- .action(async (message: string[], options) => {
919
- // Agent-mode: start the sidechannel runtime BEFORE any TUI or model work.
920
- // The runtime is exposed on globalThis so the renderer wiring (Task 1.6c)
921
- // can pick it up without a direct import dependency.
922
- if (options.agentMode) {
923
- const { startAgentMode } = await import("@muonroi/agent-harness-opentui");
924
- const runtime = await startAgentMode({
925
- cols: options.agentCols as number,
926
- rows: options.agentRows as number,
927
- idleMs: options.agentIdleMs as number,
928
- fakeClock: !!options.agentFakeClock,
929
- });
930
- (globalThis as Record<string, unknown>).__muonroiAgentRuntime = runtime;
931
- }
932
-
933
- // Mock-LLM: load fixture directory and inject into globalThis BEFORE any
934
- // provider call. Dynamic import keeps startup lean when flag is absent.
935
- if (typeof options.mockLlm === "string") {
936
- const { createMockLlm } = await import("@muonroi/agent-harness-core/mock-llm");
937
- (globalThis as Record<string, unknown>).__muonroiMockLlm = createMockLlm({ dir: options.mockLlm });
938
-
939
- // Phase H1: AI-SDK-level mock. If any fixture declares a `model` block
940
- // it is installed so `resolveModelRuntime` returns it instead of the
941
- // real provider model. This enables cost-leak verification (G1, F1,
942
- // B3/B4, C1) through the orchestrator's streamText path.
943
- //
944
- // Failure mode (silent until 2026-05-26): the original
945
- // `.catch(() => null)` swallowed every load error — directory
946
- // missing, JSON parse fail, no `model` block in any file — and
947
- // the orchestrator silently fell back to the real provider, which
948
- // failed because tests use a FAKE_KEY. The dump file then contained
949
- // `[]`, producing the cryptic "expected 0 to be greater than or
950
- // equal to 3" failures in cost-leak-b3/b4 TUI specs. Logging every
951
- // failure path makes the root cause visible in CI stderr.
952
- const { loadMockModelFromDir } = await import("./agent-harness/mock-model.js");
953
- const modelHandle = await loadMockModelFromDir(options.mockLlm).catch((err) => {
954
- process.stderr.write(
955
- `[muonroi-cli] mock-llm: loadMockModelFromDir(${options.mockLlm}) threw: ${
956
- err instanceof Error ? `${err.name}: ${err.message}` : String(err)
957
- }\n`,
958
- );
959
- return null;
960
- });
961
- if (!modelHandle) {
962
- // The user explicitly passed `--mock-llm <dir>` — they EXPECT the
963
- // mock to be installed. Silent fallback to the real provider is the
964
- // wrong default for test environments. Refuse to continue so the
965
- // failure is loud, not a dump full of zero calls.
966
- process.stderr.write(
967
- `[muonroi-cli] mock-llm: no fixture in ${options.mockLlm} declared a {model:...} block — refusing to fall back to real provider. ` +
968
- `Verify the fixture JSON has a top-level "model" key with a "stream" array.\n`,
969
- );
970
- // Exit code chosen to differ from the AI SDK's typical 1/2 so test
971
- // harnesses can distinguish "mock didn't install" from "test
972
- // assertion failed". 78 = EX_CONFIG per BSD sysexits.
973
- process.exit(78);
974
- }
975
- if (modelHandle) {
976
- // Install all three globals atomically so the runtime sees a
977
- // consistent picture: model + the OAuth-registry-equivalent
978
- // unsupportedParams / defaultProviderOptions parsed from the fixture.
979
- const g = globalThis as Record<string, unknown>;
980
- g.__muonroiMockModel = modelHandle.model;
981
- g.__muonroiMockUnsupportedParams = modelHandle.unsupportedParams;
982
- g.__muonroiMockDefaultProviderOptions = modelHandle.defaultProviderOptions;
983
-
984
- // Phase H3 — exfiltrate recordings to a file at exit so the parent
985
- // vitest spec can assert across the child-process boundary. Activated
986
- // only when MUONROI_MOCK_MODEL_DUMP is set; otherwise no-op.
987
- const dumpPath = process.env.MUONROI_MOCK_MODEL_DUMP;
988
- if (typeof dumpPath === "string" && dumpPath.length > 0) {
989
- const { dumpRecordings } = await import("./agent-harness/mock-model.js");
990
- let dumped = false;
991
- const doDump = (): void => {
992
- if (dumped) return;
993
- dumped = true;
994
- try {
995
- dumpRecordings(dumpPath, modelHandle.model);
996
- } catch (err) {
997
- // Last-ditch: surface on stderr so the parent test can see why.
998
- process.stderr.write(`[muonroi-cli] dumpRecordings failed: ${String(err)}\n`);
999
- }
1000
- };
1001
- // Continuous dump: write after every streamText completes so tests
1002
- // can read the dump without relying on a graceful exit handler. On
1003
- // Windows + Bun + named pipes, `process.on("exit")` handlers may
1004
- // not fire when process.exit() is called from deep async chains
1005
- // (observed empirically — exit event reaches the parent, but the
1006
- // exit-handler callbacks in the child never run). Patching
1007
- // doStream guarantees the dump exists after at least one call.
1008
- const writeDumpAlways = (): void => {
1009
- try {
1010
- dumpRecordings(dumpPath, modelHandle.model);
1011
- } catch {
1012
- // ignore — best-effort
1013
- }
1014
- };
1015
- const origDoStream = modelHandle.model.doStream.bind(modelHandle.model);
1016
- modelHandle.model.doStream = async (options: unknown) => {
1017
- // biome-ignore lint/suspicious/noExplicitAny: AI SDK call options
1018
- const r = await origDoStream(options as any);
1019
- writeDumpAlways();
1020
- return r;
1021
- };
1022
- process.on("exit", doDump);
1023
- process.on("SIGINT", () => {
1024
- doDump();
1025
- process.exit(130);
1026
- });
1027
- process.on("SIGTERM", () => {
1028
- doDump();
1029
- process.exit(143);
1030
- });
1031
- }
1032
- }
1033
- }
1034
-
1035
- // CI smoke affordance — exit cleanly WITHOUT invoking the provider.
1036
- // Deliberately exits BEFORE provider key loading — CI runners have no keychain configured.
1037
- if (options.smokeBootOnly) {
1038
- const [_cfg, _usg] = await Promise.all([loadConfig(), loadUsage()]);
1039
- console.log("[muonroi-cli] smoke-boot-only — config + usage loaded; exiting 0.");
1040
- process.exit(0);
1041
- }
1042
-
1043
- if (options.update) {
1044
- console.log("Checking for updates...");
1045
- const result = await runUpdate(packageJson.version);
1046
- console.log(result.output);
1047
- process.exit(result.success ? 0 : 1);
1048
- }
1049
-
1050
- changeDirectoryOrExit(options.directory);
1051
-
1052
- // Boot model registry BEFORE any key resolution path runs —
1053
- // detectProviderForModel consults the catalog's alias map to route e.g.
1054
- // "deepseek-v4-flash" to provider "siliconflow". With an empty registry
1055
- // it falls back to a prefix match ("deepseek") and the CLI loads the
1056
- // wrong provider's key. Affects both runBackgroundDelegation and the
1057
- // main interactive/headless path below.
1058
- let catalogLoadFailed = false;
1059
- await loadCatalog().catch(() => {
1060
- catalogLoadFailed = true;
1061
- });
1062
-
1063
- if (options.backgroundTaskFile) {
1064
- await runBackgroundDelegation(options.backgroundTaskFile, options);
1065
- return;
1066
- }
1067
-
1068
- const config = resolveConfig(options);
1069
-
1070
- // No legacy key in env / settings — try the OS keychain for the resolved
1071
- // model's provider before falling back to the wizard.
1072
- if (!config.apiKey) {
1073
- const modelForResolve = config.model ?? getCurrentModel("agent");
1074
- const keychainKey = await resolveKeyForModel(modelForResolve);
1075
- if (keychainKey) {
1076
- config.apiKey = keychainKey;
1077
- } else if (await hasOAuthForModel(modelForResolve)) {
1078
- // OAuth-authenticated provider — runtime will inject Bearer headers.
1079
- // Set placeholder so downstream gating code (which only checks for
1080
- // a truthy apiKey) is satisfied.
1081
- config.apiKey = "oauth";
1082
- }
1083
- }
1084
-
1085
- // First-run wizard (interactive only, before any TUI code)
1086
- const isInteractive = !options.prompt && !options.verify && process.stdin.isTTY;
1087
- if (!config.apiKey && isInteractive) {
1088
- const modelForWizard = config.model ?? getCurrentModel("agent");
1089
- const wizardKey = await firstRunWizard(modelForWizard);
1090
- if (wizardKey) {
1091
- // Key is already persisted to the OS keychain by the wizard. We DO NOT
1092
- // write it back to settings.json (avoids resurrecting plaintext that
1093
- // 'keys cleanup-settings' just removed).
1094
- config.apiKey = wizardKey;
1095
- } else {
1096
- process.exit(1);
1097
- }
1098
- }
1099
-
1100
- // Bootstrap EE auth (loads serverBaseUrl + token from ~/.experience/config.json)
1101
- const { loadEEAuthToken } = await import("./ee/auth.js");
1102
- await loadEEAuthToken().catch(() => {});
1103
-
1104
- // Auto-detect EE client mode (thin / thin-degraded / fat / disabled).
1105
- // Result is cached for downstream callsites (PIL layers, bridge.searchByText)
1106
- // so each request doesn't re-probe.
1107
- const { detectEEClientMode, describeMode } = await import("./ee/client-mode.js");
1108
- detectEEClientMode()
1109
- .then((info) => {
1110
- if (process.env.MUONROI_EE_DEBUG === "1") {
1111
- console.error(`[muonroi-cli] ${describeMode(info)}`);
1112
- }
1113
- })
1114
- .catch(() => {});
1115
-
1116
- // Patch zod-to-json-schema for Zod v4 compat (fixes tool calls for DeepSeek etc.)
1117
- const { patchZodToJsonSchema } = await import("./providers/patch-zod-schema.js");
1118
- patchZodToJsonSchema();
1119
-
1120
- // Catalog already loaded above (before key resolution). Read the
1121
- // populated registry now to surface any load failure to the user.
1122
- const { MODELS: loadedModels, getModelInfo: lookupModel } = await import("./models/registry.js");
1123
-
1124
- // No models loaded — check root cause
1125
- if (loadedModels.length === 0) {
1126
- if (catalogLoadFailed) {
1127
- console.error(
1128
- "\x1b[31mCould not load the model catalog. The installation may be corrupted.\x1b[0m\n" +
1129
- " The file \x1b[33mdist/models/catalog.json\x1b[0m was not found.\n" +
1130
- "\nTry reinstalling:\n" +
1131
- " \x1b[33mnpm install -g muonroi-cli\x1b[0m\n" +
1132
- " # or: \x1b[33mbun install -g muonroi-cli\x1b[0m\n" +
1133
- "\nIf building from source:\n" +
1134
- " \x1b[33mbun run build\x1b[0m\n",
1135
- );
1136
- } else if (config.apiKey) {
1137
- console.error(
1138
- "\x1b[31mAPI key is invalid or expired. No models could be loaded.\x1b[0m\n" +
1139
- "Update your key:\n" +
1140
- " muonroi-cli -k YOUR_NEW_KEY\n" +
1141
- " # or: export MUONROI_API_KEY=YOUR_NEW_KEY\n" +
1142
- `\nGet a key at: https://docs.muonroi.com/docs/cli/providers`,
1143
- );
1144
- } else {
1145
- console.error(
1146
- "\x1b[31mNo API key configured and no models could be loaded.\x1b[0m\n" +
1147
- "Set your key:\n" +
1148
- " muonroi-cli -k YOUR_API_KEY\n" +
1149
- " # or: export MUONROI_API_KEY=YOUR_API_KEY\n" +
1150
- `\nGet a key at: https://docs.muonroi.com/docs/cli/providers`,
1151
- );
1152
- }
1153
- process.exit(1);
1154
- }
1155
-
1156
- // Validate configured model exists in loaded registry — fallback to first available
1157
- if (loadedModels.length > 0) {
1158
- const { getCurrentModel } = await import("./utils/settings.js");
1159
- const effectiveModel = config.model || getCurrentModel();
1160
- if (effectiveModel && !lookupModel(effectiveModel)) {
1161
- console.error(
1162
- `\x1b[31mModel "${effectiveModel}" is not available (may be retired or not in your plan).\x1b[0m\n`,
1163
- );
1164
- console.error("Available models:\n");
1165
- for (const m of loadedModels.slice(0, 15)) {
1166
- console.error(` \x1b[36m${m.id}\x1b[0m — ${m.name}`);
1167
- }
1168
- if (loadedModels.length > 15) {
1169
- console.error(` ... and ${loadedModels.length - 15} more (run \`muonroi-cli models\` to see all)`);
1170
- }
1171
- console.error(
1172
- "\n\x1b[33mSet your model:\x1b[0m\n" +
1173
- " muonroi-cli -m MODEL_ID\n" +
1174
- " # or add to ~/.muonroi-cli/user-settings.json:\n" +
1175
- ' # { "defaultModel": "MODEL_ID" }\n',
1176
- );
1177
- process.exit(1);
1178
- }
1179
- }
1180
-
1181
- const councilAnswersFile =
1182
- typeof options.councilAnswers === "string" ? loadCouncilAnswersOrExit(options.councilAnswers) : undefined;
1183
- // Headless (`-p` / `--verify`) has no TUI to render council askcards, so the
1184
- // answerer is ALWAYS active (auto-proceeds with the recommended option). This
1185
- // is why a council-triggering prompt no longer hangs without `--yes`. A
1186
- // `--council-answers` file still customizes per-phase answers.
1187
- const councilAutoAnswer = createHeadlessCouncilAutoAnswerer({
1188
- file: councilAnswersFile,
1189
- });
1190
-
1191
- if (options.verify) {
1192
- const verifyError = getVerifyCliError({ hasPrompt: Boolean(options.prompt), hasMessageArgs: message.length > 0 });
1193
- if (verifyError) {
1194
- console.error(verifyError);
1195
- process.exit(1);
1196
- }
1197
-
1198
- await runHeadless(
1199
- buildVerifyPrompt(process.cwd(), config.sandboxMode),
1200
- requireApiKey(config.apiKey),
1201
- config.baseURL,
1202
- config.model,
1203
- config.maxToolRounds,
1204
- options.batchApi === true,
1205
- config.sandboxMode,
1206
- config.sandboxSettings,
1207
- options.format,
1208
- options.session,
1209
- options.permission as PermissionMode,
1210
- councilAutoAnswer,
1211
- );
1212
- return;
1213
- }
1214
-
1215
- if (options.prompt) {
1216
- await runHeadless(
1217
- options.prompt,
1218
- requireApiKey(config.apiKey),
1219
- config.baseURL,
1220
- config.model,
1221
- config.maxToolRounds,
1222
- options.batchApi === true,
1223
- config.sandboxMode,
1224
- config.sandboxSettings,
1225
- options.format,
1226
- options.session,
1227
- options.permission as PermissionMode,
1228
- councilAutoAnswer,
1229
- );
1230
- return;
1231
- }
1232
-
1233
- const initialMessage = message.length > 0 ? message.join(" ") : undefined;
1234
- await startInteractive(
1235
- config.apiKey,
1236
- config.baseURL,
1237
- config.model,
1238
- config.maxToolRounds,
1239
- options.batchApi === true,
1240
- config.sandboxMode,
1241
- config.sandboxSettings,
1242
- options.session,
1243
- initialMessage,
1244
- options.permission as PermissionMode,
1245
- options.injectHalt === true,
1246
- );
1247
- });
1248
-
1249
- program
1250
- .command("models")
1251
- .description("List available models")
1252
- .action(async () => {
1253
- console.log("\nLoading model catalog...\n");
1254
- await loadCatalog();
1255
- const { MODELS } = await import("./models/registry.js");
1256
- for (const m of MODELS) {
1257
- const tags = [
1258
- m.reasoning ? "reasoning" : "non-reasoning",
1259
- m.multiAgent ? "multi-agent" : null,
1260
- m.responsesOnly ? "responses-only" : null,
1261
- ].filter(Boolean);
1262
- const suffix = tags.length > 0 ? ` (${tags.join(", ")})` : "";
1263
- console.log(` \x1b[36m${m.id}\x1b[0m — ${m.name}${suffix}`);
1264
- console.log(
1265
- ` ${m.description} | ${formatContext(m.contextWindow)} context | $${m.inputPrice}/$${m.outputPrice} per 1M tokens`,
1266
- );
1267
- if ((m.aliases?.length ?? 0) > 0) {
1268
- console.log(` aliases: ${(m.aliases ?? []).join(", ")}`);
1269
- }
1270
- }
1271
- console.log();
1272
- });
1273
-
1274
- program
1275
- .command("update")
1276
- .description("Update muonroi-cli to the latest release")
1277
- .action(async () => {
1278
- console.log("Checking for updates...");
1279
- const result = await runUpdate(packageJson.version);
1280
- console.log(result.output);
1281
- process.exit(result.success ? 0 : 1);
1282
- });
1283
-
1284
- program
1285
- .command("uninstall")
1286
- .description("Remove a script-installed muonroi-cli binary and optional data")
1287
- .option("--dry-run", "Show what would be removed without removing it")
1288
- .option("--force", "Skip the confirmation prompt")
1289
- .option("--keep-config", "Keep ~/.muonroi-cli config files")
1290
- .option("--keep-data", "Keep ~/.muonroi-cli data files")
1291
- .action(async (options) => {
1292
- const result = await runScriptManagedUninstall({
1293
- dryRun: options.dryRun === true,
1294
- force: options.force === true,
1295
- keepConfig: options.keepConfig === true,
1296
- keepData: options.keepData === true,
1297
- });
1298
- console.log(result.output);
1299
- process.exit(result.success ? 0 : 1);
1300
- });
1301
-
1302
- program
1303
- .command("daemon")
1304
- .description("Start the schedule daemon to run scheduled tasks")
1305
- .option("--background", "Detach and run in the background")
1306
- .action(async (options) => {
1307
- if (options.background) {
1308
- const result = await startScheduleDaemon(process.cwd());
1309
- console.log(
1310
- result.alreadyRunning
1311
- ? `Schedule daemon already running (pid: ${result.status.pid ?? "unknown"}).`
1312
- : `Schedule daemon started in the background (pid: ${result.pid ?? "unknown"}).`,
1313
- );
1314
- return;
1315
- }
1316
-
1317
- process.off("SIGTERM", exitCleanlyOnSigterm);
1318
- const { SchedulerDaemon } = await import("./daemon/scheduler");
1319
- const daemon = new SchedulerDaemon();
1320
- await daemon.start();
1321
- });
1322
-
1323
- program
1324
- .command("doctor")
1325
- .description("Run health checks for muonroi-cli dependencies and services")
1326
- .action(async () => {
1327
- const { loadEEAuthToken } = await import("./ee/auth.js");
1328
- await loadEEAuthToken().catch(() => {});
1329
- const { runDoctor, formatDoctorReport } = await import("./ops/doctor.js");
1330
- const results = await runDoctor();
1331
- console.log("\nmuonroi-cli doctor\n");
1332
- console.log(formatDoctorReport(results, packageJson.version));
1333
- const hasFail = results.some((r) => r.status === "fail");
1334
- process.exit(hasFail ? 1 : 0);
1335
- });
1336
-
1337
- program
1338
- .command("bug-report")
1339
- .description("Generate anonymized diagnostic bundle for issue submission")
1340
- .action(async () => {
1341
- const { buildBugReport, formatBugReport } = await import("./ops/bug-report.js");
1342
- const bundle = await buildBugReport();
1343
- console.log(formatBugReport(bundle));
1344
- });
1345
-
1346
- const keys = program
1347
- .command("keys")
1348
- .description("Manage provider API keys via the OS keychain (set, list, delete, import-bw)");
1349
-
1350
- keys
1351
- .command("set <provider>")
1352
- .description("Prompt for a provider API key and store it in the OS keychain")
1353
- .option("--bw", "Also write the key to a Bitwarden vault Secure Note (requires bw CLI + BW_SESSION)")
1354
- .option("--prefix <prefix>", "Bitwarden item name prefix when --bw is set (default: 'muonroi-cli/')", "muonroi-cli/")
1355
- .action(async (provider: string, opts: { bw?: boolean; prefix: string }) => {
1356
- const { runKeysSet } = await import("./cli/keys.js");
1357
- await runKeysSet(provider, { bw: opts.bw, itemPrefix: opts.prefix });
1358
- });
1359
-
1360
- keys
1361
- .command("list")
1362
- .description("Show provider keys currently stored in the OS keychain (masked)")
1363
- .action(async () => {
1364
- const { runKeysList } = await import("./cli/keys.js");
1365
- await runKeysList();
1366
- });
1367
-
1368
- keys
1369
- .command("delete <provider>")
1370
- .description("Delete a stored provider key from the OS keychain")
1371
- .action(async (provider: string) => {
1372
- const { runKeysDelete } = await import("./cli/keys.js");
1373
- await runKeysDelete(provider);
1374
- });
1375
-
1376
- keys
1377
- .command("import-bw [providers...]")
1378
- .description("Import keys from a Bitwarden vault into the OS keychain (requires bw CLI + BW_SESSION)")
1379
- .option("--prefix <prefix>", "Vault item name prefix (default: 'muonroi-cli/')", "muonroi-cli/")
1380
- .action(async (providers: string[], opts: { prefix: string }) => {
1381
- const { runKeysImportBw } = await import("./cli/keys.js");
1382
- await runKeysImportBw({ providers, itemPrefix: opts.prefix });
1383
- });
1384
-
1385
- keys
1386
- .command("login <provider>")
1387
- .description("Log in to a provider via OAuth subscription (supported: openai, google, xai)")
1388
- .action(async (provider: string) => {
1389
- const { runKeysLogin } = await import("./cli/keys.js");
1390
- await runKeysLogin(provider);
1391
- });
1392
-
1393
- keys
1394
- .command("logout <provider>")
1395
- .description("Log out of an OAuth provider and revoke stored tokens")
1396
- .action(async (provider: string) => {
1397
- const { runKeysLogout } = await import("./cli/keys.js");
1398
- await runKeysLogout(provider);
1399
- });
1400
-
1401
- keys
1402
- .command("export <file>")
1403
- .description("Export all keychain keys to an encrypted portable bundle (move between devices)")
1404
- .action(async (file: string) => {
1405
- const { runKeysExport } = await import("./cli/keys.js");
1406
- await runKeysExport(file);
1407
- });
1408
-
1409
- keys
1410
- .command("import <file>")
1411
- .description("Import an encrypted bundle into the OS keychain (created by 'keys export')")
1412
- .action(async (file: string) => {
1413
- const { runKeysImport } = await import("./cli/keys.js");
1414
- await runKeysImport(file);
1415
- });
1416
-
1417
- keys
1418
- .command("cleanup-settings")
1419
- .description("Strip plaintext API keys out of ~/.muonroi-cli/user-settings.json after migrating to keychain")
1420
- .action(async () => {
1421
- const { runKeysCleanupSettings } = await import("./cli/keys.js");
1422
- await runKeysCleanupSettings();
1423
- });
1424
-
1425
- keys
1426
- .command("set-chat <id>")
1427
- .description(
1428
- "Set a chat-service secret (discord-token, discord-guild-id, slack-token, slack-team-id) in the OS keychain",
1429
- )
1430
- .action(async (id: string) => {
1431
- const { runChatKeySet } = await import("./cli/keys.js");
1432
- if (!["discord-token", "discord-guild-id", "slack-token", "slack-team-id"].includes(id)) {
1433
- console.error(`Unknown chat secret '${id}'. Valid: discord-token, discord-guild-id, slack-token, slack-team-id`);
1434
- process.exit(1);
1435
- }
1436
- const value = (
1437
- await new Promise<string>((resolve) => {
1438
- const rl = createInterface({ input: process.stdin, output: process.stderr });
1439
- rl.question(`Paste ${id} value (hidden): `, (answer) => {
1440
- rl.close();
1441
- resolve(answer);
1442
- });
1443
- })
1444
- ).trim();
1445
- if (!value) {
1446
- console.error("Aborted (empty value).");
1447
- process.exit(1);
1448
- }
1449
- await runChatKeySet(id as any, value);
1450
- });
1451
-
1452
- keys
1453
- .command("import-bw-chat [ids...]")
1454
- .option("--prefix <prefix>", "BW item name prefix", "muonroi-cli/chat-")
1455
- .description("Import chat-service secrets from Bitwarden vault into OS keychain")
1456
- .action(async (ids: string[], opts: { prefix?: string }) => {
1457
- const { runChatImportBw } = await import("./cli/keys.js");
1458
- await runChatImportBw({ ids: ids.length > 0 ? (ids as any) : undefined, itemPrefix: opts.prefix });
1459
- });
1460
-
1461
- const usage = program.command("usage").description("Inspect cost ledger and find spend bloat");
1462
-
1463
- usage
1464
- .command("report")
1465
- .description("Aggregate per-call cost log + product ledger to find where spend grew")
1466
- .option("--by <dim>", "Group by: callsite | role | phase | model | provider", "callsite")
1467
- .option("--date <yyyy-mm-dd>", "Restrict cost-log to a single UTC date")
1468
- .option("--run <productRunId>", "Restrict product ledger to one runId")
1469
- .option("--source <src>", "cost-log | product | both", "both")
1470
- .option("--breakdown", "Show orchestrator system-prompt / tools / messages breakdown")
1471
- .option("--json", "Emit aggregated rows as JSON")
1472
- .action(
1473
- async (opts: { by: string; date?: string; run?: string; source: string; breakdown?: boolean; json?: boolean }) => {
1474
- const { runUsageReport } = await import("./cli/usage-report.js");
1475
- await runUsageReport({
1476
- by: opts.by as "callsite" | "role" | "phase" | "model" | "provider",
1477
- date: opts.date,
1478
- runId: opts.run,
1479
- source: opts.source as "cost-log" | "product" | "both",
1480
- breakdown: opts.breakdown,
1481
- json: opts.json,
1482
- });
1483
- },
1484
- );
1485
-
1486
- usage
1487
- .command("pil")
1488
- .description("Attribute system-prompt size growth to PIL layers (intent/personality/EE/GSD/context)")
1489
- .option("--date <yyyy-mm-dd>", "Restrict to a single UTC date")
1490
- .option("--top <n>", "Show top N largest prompts", "5")
1491
- .option("--json", "Emit aggregated rows as JSON")
1492
- .action(async (opts: { date?: string; top: string; json?: boolean }) => {
1493
- const { runPilReport } = await import("./cli/pil-report.js");
1494
- await runPilReport({
1495
- date: opts.date,
1496
- top: parseInt(opts.top, 10) || 5,
1497
- json: opts.json,
1498
- });
1499
- });
1500
-
1501
- usage
1502
- .command("forensics <sessionPrefix>")
1503
- .description(
1504
- "Per-event token + cache breakdown for a session (joins usage_events ∪ interaction_logs). Use to verify Phase A/B/C cost-optimization caps.",
1505
- )
1506
- .option("--json", "Emit summary as JSON")
1507
- .action(async (sessionPrefix: string, opts: { json?: boolean }) => {
1508
- const { runCostForensics } = await import("./cli/cost-forensics.js");
1509
- await runCostForensics({ prefix: sessionPrefix, json: opts.json });
1510
- });
1511
-
1512
- usage
1513
- .command("security-audit")
1514
- .description("Security posture: yolo/permission overrides, high-risk cmds, shuru audits + cost (from decision-log events)")
1515
- .option("--since <date|7d|1h|30m>", "Restrict to UTC date or relative window")
1516
- .option("--json", "Emit as JSON")
1517
- .option("--format <fmt>", "table | json | md", "table")
1518
- .action(async (opts: { since?: string; json?: boolean; format?: string }) => {
1519
- const { runSecurityAudit } = await import("./cli/usage-report.js");
1520
- await runSecurityAudit({ since: opts.since, json: opts.json, format: opts.format as any });
1521
- });
1522
-
1523
- usage
1524
- .command("perf-regression")
1525
- .description("Perf snapshot + estimator drift (compare baseline stub for later)")
1526
- .option("--compare <file>", "Baseline file for delta")
1527
- .option("--json", "Emit JSON")
1528
- .action(async (opts: { compare?: string; json?: boolean }) => {
1529
- const { runPerfRegression } = await import("./cli/usage-report.js");
1530
- await runPerfRegression({ compare: opts.compare, json: opts.json });
1531
- });
1532
-
1533
- const mcp = program.command("mcp").description("Manage MCP server configuration");
1534
-
1535
- mcp
1536
- .command("setup-research")
1537
- .description("Configure web research MCP servers (context7, fetch, tavily)")
1538
- .action(async () => {
1539
- const rl = createInterface({ input: process.stdin, output: process.stderr });
1540
- const ask = (q: string): Promise<string> => new Promise((resolve) => rl.question(q, (a) => resolve(a)));
1541
- try {
1542
- const { runResearchOnboarding } = await import("./mcp/research-onboarding.js");
1543
- const result = await runResearchOnboarding({
1544
- askYesNo: ask,
1545
- askText: ask,
1546
- log: (m) => process.stderr.write(m),
1547
- });
1548
- process.stderr.write(`\nDone. Tavily ${result.tavilyEnabled ? "enabled" : "skipped"}.\n`);
1549
- } finally {
1550
- rl.close();
1551
- }
1552
- });
1553
-
1554
- mcp
1555
- .command("set <id>")
1556
- .description("Prompt for an MCP API key (e.g. tavily) and store it in the OS keychain")
1557
- .option("--bw", "Also write the key to a Bitwarden vault Secure Note (requires bw CLI + BW_SESSION)")
1558
- .option("--prefix <prefix>", "Bitwarden item name prefix when --bw is set (default: 'muonroi-cli/')", "muonroi-cli/")
1559
- .action(async (id: string, opts: { bw?: boolean; prefix: string }) => {
1560
- const { runMcpKeysSet } = await import("./cli/keys.js");
1561
- await runMcpKeysSet(id, { bw: opts.bw, itemPrefix: opts.prefix });
1562
- });
1563
-
1564
- mcp
1565
- .command("import-bw [keys...]")
1566
- .description(
1567
- "Import MCP secrets (e.g. tavily) from a Bitwarden vault into the OS keychain (requires bw CLI + BW_SESSION)",
1568
- )
1569
- .option("--prefix <prefix>", "Vault item name prefix (default: 'muonroi-cli/')", "muonroi-cli/")
1570
- .action(async (keys: string[], opts: { prefix: string }) => {
1571
- const { runMcpImportBw } = await import("./cli/keys.js");
1572
- await runMcpImportBw({ keys, itemPrefix: opts.prefix });
1573
- });
1574
-
1575
- program
1576
- .command("mcp-driver")
1577
- .description("Run the agent-harness MCP driver over stdio")
1578
- .action(async () => {
1579
- const { runHarnessDriver } = await import("@muonroi/agent-harness-core/mcp-server");
1580
- const { opentuiSpawn } = await import("./mcp/opentui-spawn.js");
1581
- await runHarnessDriver(opentuiSpawn);
1582
- });
1583
-
1584
- program
1585
- .command("tools-mcp")
1586
- .description("Run the muonroi native-tools MCP server over stdio (self-verify; more tools later)")
1587
- .action(async () => {
1588
- const { runToolsMcpServer } = await import("./mcp/tools-server.js");
1589
- await runToolsMcpServer();
1590
- });
1591
-
1592
- program
1593
- .command("self-verify")
1594
- .description(
1595
- "Harness-Verified Self-QA: spawn a child muonroi-cli, drive it through scenarios derived from git diff, and emit regression specs for every passing run",
1596
- )
1597
- .option("--since <ref>", "Git base ref for the diff window", "HEAD~1")
1598
- .option("--max <n>", "Maximum number of scenarios to run", "8")
1599
- .option("--no-emit", "Do not write tests/harness/auto/*.spec.ts on pass")
1600
- .option("--out <dir>", "Override the emitted-spec directory")
1601
- .option("--json", "Print machine-readable JSON report to stdout")
1602
- .option(
1603
- "--agentic",
1604
- "Tier 2: outer LLM drives the child interactively (reads frame deltas + events, decides next step). Requires --goal and --model.",
1605
- )
1606
- .option("--goal <text>", "Free-form goal for agentic mode (e.g. 'open agents modal and add a researcher')")
1607
- .option("--llm <id>", "LLM model id for agentic mode (e.g. 'deepseek-v4-flash')")
1608
- .option("--turns <n>", "Max agentic turns", "20")
1609
- .action(
1610
- async (opts: {
1611
- since: string;
1612
- max: string;
1613
- emit?: boolean;
1614
- out?: string;
1615
- json?: boolean;
1616
- agentic?: boolean;
1617
- goal?: string;
1618
- llm?: string;
1619
- turns: string;
1620
- }) => {
1621
- const log = opts.json ? () => {} : (m: string) => console.log(m);
1622
-
1623
- if (opts.agentic) {
1624
- if (!opts.goal || !opts.llm) {
1625
- console.error("--agentic requires both --goal and --llm");
1626
- process.exit(2);
1627
- }
1628
- const { runAgenticLoop, createLLMBrain } = await import("./self-qa/agentic-loop.js");
1629
- const brain = await createLLMBrain({ modelId: opts.llm });
1630
- const report = await runAgenticLoop({
1631
- goal: opts.goal,
1632
- brain,
1633
- maxTurns: Number.parseInt(opts.turns, 10) || 20,
1634
- log,
1635
- });
1636
- if (opts.json) {
1637
- process.stdout.write(`${JSON.stringify(report, null, 2)}\n`);
1638
- } else {
1639
- console.log(
1640
- `\n[self-verify agentic] verdict=${report.verdict} | ${report.turns.length} turns | ${report.totalDurationMs}ms`,
1641
- );
1642
- console.log(` reason: ${report.reason}`);
1643
- }
1644
- process.exit(report.verdict === "fail" ? 1 : 0);
1645
- }
1646
-
1647
- const { runSelfVerify } = await import("./self-qa/index.js");
1648
- const report = await runSelfVerify({
1649
- baseRef: opts.since,
1650
- maxScenarios: Number.parseInt(opts.max, 10) || 8,
1651
- emitSpecs: opts.emit !== false,
1652
- specOutDir: opts.out,
1653
- log,
1654
- });
1655
- if (opts.json) {
1656
- process.stdout.write(`${JSON.stringify(report, null, 2)}\n`);
1657
- } else {
1658
- const s = report.summary;
1659
- console.log(
1660
- `\n[self-verify] ${s.passed}/${s.total} passed | ${s.failed} failed | ${s.inconclusive} inconclusive | ${report.durationMs}ms`,
1661
- );
1662
- if (report.emittedSpecs.length > 0) {
1663
- console.log(`[self-verify] Emitted ${report.emittedSpecs.length} regression spec(s):`);
1664
- for (const path of report.emittedSpecs) console.log(` ${path}`);
1665
- }
1666
- }
1667
- process.exit(report.summary.failed > 0 ? 1 : 0);
1668
- },
1669
- );
1670
-
1671
- program
1672
- .command("export-transcripts")
1673
- .description("One-shot dump of SQLite session history → ~/.experience/muonroi-cli-sessions/ for EE backfill")
1674
- .option("--days <n>", "Only export sessions updated within N days (default 30)", "30")
1675
- .option("--min-messages <n>", "Skip sessions with fewer than N messages (default 4)", "4")
1676
- .option("--dry-run", "List sessions that would be exported without writing files")
1677
- .action(async (opts: { days: string; minMessages: string; dryRun?: boolean }) => {
1678
- const { exportTranscripts } = await import("./ee/export-transcripts.js");
1679
- try {
1680
- const res = await exportTranscripts({
1681
- maxAgeDays: Number.parseInt(opts.days, 10),
1682
- minMessages: Number.parseInt(opts.minMessages, 10),
1683
- dryRun: !!opts.dryRun,
1684
- });
1685
- console.log(
1686
- `[export-transcripts] sessions=${res.totalSessions} written=${res.written} skipped_empty=${res.skippedEmpty} skipped_small=${res.skippedTooSmall}\n output: ${res.outputRoot}`,
1687
- );
1688
- process.exit(0);
1689
- } catch (e) {
1690
- console.error(`[export-transcripts] failed: ${(e as Error).message}`);
1691
- process.exit(1);
1692
- }
1693
- });
1694
-
1695
- program
1696
- .command("share <user>")
1697
- .description("Add a stakeholder to the current product's Discord channel")
1698
- .option("--product <slug>", "Override product slug (default: most recent run)")
1699
- .option("--display <name>", "Display name for the stakeholder")
1700
- .action(async (user: string, opts: { product?: string; display?: string }) => {
1701
- const token = process.env.MUONROI_DISCORD_TOKEN;
1702
- const guildId = process.env.MUONROI_DISCORD_GUILD_ID;
1703
- if (!token || !guildId) {
1704
- console.error("muonroi share: MUONROI_DISCORD_TOKEN and MUONROI_DISCORD_GUILD_ID must both be set.");
1705
- process.exit(1);
1706
- }
1707
- const { DiscordChatProvider } = await import("./chat/providers/discord/client.js");
1708
- const { runShareCommand } = await import("./cli/share-cmd.js");
1709
- const client = new DiscordChatProvider(token);
1710
- const result = await runShareCommand({
1711
- cwd: process.cwd(),
1712
- user,
1713
- product: opts.product,
1714
- display: opts.display,
1715
- client,
1716
- });
1717
- switch (result.kind) {
1718
- case "granted":
1719
- console.log(`Granted channel access to <@${result.userId}> in product ${result.slug}.`);
1720
- break;
1721
- case "acl-only":
1722
- console.log(`Added <@${result.userId}> to product ${result.slug}. Channel will be granted access on creation.`);
1723
- break;
1724
- case "already-stakeholder":
1725
- console.log(`User <@${result.userId}> is already a stakeholder of ${result.slug}.`);
1726
- break;
1727
- case "perm-error":
1728
- console.error(
1729
- `Failed to grant Discord permission (status=${result.status}). ACL was still updated; user can join when bot has permission.`,
1730
- );
1731
- process.exit(1);
1732
- break;
1733
- case "error":
1734
- console.error(`muonroi share: ${result.message}`);
1735
- process.exit(1);
1736
- break;
1737
- }
1738
- });
1739
-
1740
- program
1741
- .command("reporter")
1742
- .description("Run the P8 reporter agent — polls Discord and serves progress queries")
1743
- .requiredOption("--run <runId>", "Run ID to observe")
1744
- .option("--product-slug <slug>", "Product slug (inferred from run manifest if omitted)")
1745
- .option("--daily-budget <usd>", "Daily LLM budget in USD (default 0.50)", "0.50")
1746
- .action(async (opts: { run: string; productSlug?: string; dailyBudget?: string }) => {
1747
- const { runReporterCmd } = await import("./cli/reporter-cmd.js");
1748
- try {
1749
- await runReporterCmd({ run: opts.run, productSlug: opts.productSlug, dailyBudget: opts.dailyBudget });
1750
- process.exit(0);
1751
- } catch (e) {
1752
- console.error(`muonroi reporter: ${(e as Error).message}`);
1753
- process.exit(1);
1754
- }
1755
- });
1756
-
1757
- program.parse();
1758
-
1759
- function formatContext(tokens: number): string {
1760
- if (tokens >= 1_000_000) return `${tokens / 1_000_000}M`;
1761
- return `${tokens / 1_000}K`;
1762
- }