muonroi-cli 1.4.0 → 1.4.1

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 (1831) hide show
  1. package/dist/src/generated/version.d.ts +1 -1
  2. package/dist/src/generated/version.js +1 -1
  3. package/package.json +3 -2
  4. package/dist/muonroi-cli-standalone.exe +0 -0
  5. package/dist/packages/agent-harness-core/src/driver.js.map +0 -1
  6. package/dist/packages/agent-harness-core/src/event-filter.js.map +0 -1
  7. package/dist/packages/agent-harness-core/src/event-redact.js.map +0 -1
  8. package/dist/packages/agent-harness-core/src/idle.js.map +0 -1
  9. package/dist/packages/agent-harness-core/src/index.js.map +0 -1
  10. package/dist/packages/agent-harness-core/src/mcp-server.js.map +0 -1
  11. package/dist/packages/agent-harness-core/src/mock-llm.js.map +0 -1
  12. package/dist/packages/agent-harness-core/src/predicate.js.map +0 -1
  13. package/dist/packages/agent-harness-core/src/protocol.js.map +0 -1
  14. package/dist/packages/agent-harness-core/src/registry.js.map +0 -1
  15. package/dist/packages/agent-harness-core/src/selector.js.map +0 -1
  16. package/dist/packages/agent-harness-core/src/spec-helpers.js.map +0 -1
  17. package/dist/packages/agent-harness-core/src/transports/sidechannel.js.map +0 -1
  18. package/dist/packages/agent-harness-core/src/transports/ws.js.map +0 -1
  19. package/dist/packages/agent-harness-opentui/src/agent-mode.js.map +0 -1
  20. package/dist/packages/agent-harness-opentui/src/index.js.map +0 -1
  21. package/dist/packages/agent-harness-opentui/src/input-bridge.js.map +0 -1
  22. package/dist/packages/agent-harness-opentui/src/install.js.map +0 -1
  23. package/dist/packages/agent-harness-opentui/src/reconciler-hook.js.map +0 -1
  24. package/dist/packages/agent-harness-opentui/src/semantic.js.map +0 -1
  25. package/dist/src/__test-helpers__/catalog-fixtures.js.map +0 -1
  26. package/dist/src/__test-stubs__/ee-server.js.map +0 -1
  27. package/dist/src/__test-stubs__/vitest-setup.js.map +0 -1
  28. package/dist/src/__tests__/council/bubble-layout.test.js.map +0 -1
  29. package/dist/src/__tests__/council/code-block-truncate.test.js.map +0 -1
  30. package/dist/src/__tests__/council/role-palette.test.js.map +0 -1
  31. package/dist/src/__tests__/first-run-wizard.test.js.map +0 -1
  32. package/dist/src/agent-harness/__tests__/cli-flags.spec.js.map +0 -1
  33. package/dist/src/agent-harness/__tests__/driver.spec.js.map +0 -1
  34. package/dist/src/agent-harness/__tests__/idle.spec.js.map +0 -1
  35. package/dist/src/agent-harness/__tests__/mock-llm.spec.js.map +0 -1
  36. package/dist/src/agent-harness/__tests__/mock-model.spec.js.map +0 -1
  37. package/dist/src/agent-harness/__tests__/predicate.spec.js.map +0 -1
  38. package/dist/src/agent-harness/__tests__/protocol.spec.js.map +0 -1
  39. package/dist/src/agent-harness/__tests__/schema.spec.js.map +0 -1
  40. package/dist/src/agent-harness/__tests__/selector.spec.js.map +0 -1
  41. package/dist/src/agent-harness/__tests__/sidechannel.spec.js.map +0 -1
  42. package/dist/src/agent-harness/__tests__/spec-helpers.spec.js.map +0 -1
  43. package/dist/src/agent-harness/index.js.map +0 -1
  44. package/dist/src/agent-harness/mock-model.js.map +0 -1
  45. package/dist/src/agent-harness/test-spawn.js.map +0 -1
  46. package/dist/src/billing/index.js.map +0 -1
  47. package/dist/src/chat/__tests__/broadcast-bus.test.js.map +0 -1
  48. package/dist/src/chat/__tests__/channel-manager.test.js.map +0 -1
  49. package/dist/src/chat/__tests__/client.test.js.map +0 -1
  50. package/dist/src/chat/__tests__/discord-integration.test.js.map +0 -1
  51. package/dist/src/chat/__tests__/intent-prompt.test.js.map +0 -1
  52. package/dist/src/chat/__tests__/verdict-resolver.test.js.map +0 -1
  53. package/dist/src/chat/broadcast-bus.js.map +0 -1
  54. package/dist/src/chat/channel-manager.js.map +0 -1
  55. package/dist/src/chat/chat-keychain.js.map +0 -1
  56. package/dist/src/chat/factory.js.map +0 -1
  57. package/dist/src/chat/intent-prompt.js.map +0 -1
  58. package/dist/src/chat/providers/discord/client.js.map +0 -1
  59. package/dist/src/chat/types.js.map +0 -1
  60. package/dist/src/chat/verdict-constants.js.map +0 -1
  61. package/dist/src/chat/verdict-resolver.js.map +0 -1
  62. package/dist/src/cli/__tests__/bw-vault.test.js.map +0 -1
  63. package/dist/src/cli/__tests__/keys-bundle.test.js.map +0 -1
  64. package/dist/src/cli/__tests__/share-cmd.test.js.map +0 -1
  65. package/dist/src/cli/bw-vault.js.map +0 -1
  66. package/dist/src/cli/config/__tests__/model-picker.test.js.map +0 -1
  67. package/dist/src/cli/config/__tests__/provider-fetch.test.js.map +0 -1
  68. package/dist/src/cli/config/index.js.map +0 -1
  69. package/dist/src/cli/config/model-picker.js.map +0 -1
  70. package/dist/src/cli/config/provider-fetch.js.map +0 -1
  71. package/dist/src/cli/config/screen-council.js.map +0 -1
  72. package/dist/src/cli/config/screen-models.js.map +0 -1
  73. package/dist/src/cli/config/screen-providers.js.map +0 -1
  74. package/dist/src/cli/config/tui.js.map +0 -1
  75. package/dist/src/cli/cost-forensics.js.map +0 -1
  76. package/dist/src/cli/cost-forensics.test.js.map +0 -1
  77. package/dist/src/cli/keys-bundle.js.map +0 -1
  78. package/dist/src/cli/keys.js.map +0 -1
  79. package/dist/src/cli/keys.test.js.map +0 -1
  80. package/dist/src/cli/pil-report.js.map +0 -1
  81. package/dist/src/cli/reporter-cmd.js.map +0 -1
  82. package/dist/src/cli/share-cmd.js.map +0 -1
  83. package/dist/src/cli/usage-report.js.map +0 -1
  84. package/dist/src/cloud/index.js.map +0 -1
  85. package/dist/src/council/__tests__/accounting.test.js.map +0 -1
  86. package/dist/src/council/__tests__/audit-replay.test.js.map +0 -1
  87. package/dist/src/council/__tests__/clarifier-max-rounds.test.js.map +0 -1
  88. package/dist/src/council/__tests__/clarifier-options.test.js.map +0 -1
  89. package/dist/src/council/__tests__/clarifier-ready-gate.test.js.map +0 -1
  90. package/dist/src/council/__tests__/cost-aware.test.js.map +0 -1
  91. package/dist/src/council/__tests__/debate-planner-structured.test.js.map +0 -1
  92. package/dist/src/council/__tests__/decisions-lock.test.js.map +0 -1
  93. package/dist/src/council/__tests__/evaluator-metrics.test.js.map +0 -1
  94. package/dist/src/council/__tests__/parse-outcome-fallback.test.js.map +0 -1
  95. package/dist/src/council/__tests__/research-tools.test.js.map +0 -1
  96. package/dist/src/council/__tests__/round-tools.test.js.map +0 -1
  97. package/dist/src/council/__tests__/tool-trace.test.js.map +0 -1
  98. package/dist/src/council/__tests__/types-contract.test.js.map +0 -1
  99. package/dist/src/council/clarifier.js.map +0 -1
  100. package/dist/src/council/context.js.map +0 -1
  101. package/dist/src/council/debate-planner.js.map +0 -1
  102. package/dist/src/council/debate.js.map +0 -1
  103. package/dist/src/council/decisions-lock.js.map +0 -1
  104. package/dist/src/council/executor.js.map +0 -1
  105. package/dist/src/council/index.js.map +0 -1
  106. package/dist/src/council/leader.js.map +0 -1
  107. package/dist/src/council/llm.js.map +0 -1
  108. package/dist/src/council/phase-events.js.map +0 -1
  109. package/dist/src/council/planner.js.map +0 -1
  110. package/dist/src/council/preflight.js.map +0 -1
  111. package/dist/src/council/prompts.js.map +0 -1
  112. package/dist/src/council/types.js.map +0 -1
  113. package/dist/src/daemon/scheduler.js.map +0 -1
  114. package/dist/src/daemon/scheduler.test.js.map +0 -1
  115. package/dist/src/ee/__tests__/bb-design.test.js.map +0 -1
  116. package/dist/src/ee/__tests__/export-transcripts.test.js.map +0 -1
  117. package/dist/src/ee/__tests__/pil-context-bridge.test.js.map +0 -1
  118. package/dist/src/ee/__tests__/pipeline.integration.test.js.map +0 -1
  119. package/dist/src/ee/__tests__/recall-format.test.js.map +0 -1
  120. package/dist/src/ee/__tests__/recall-ledger.test.js.map +0 -1
  121. package/dist/src/ee/__tests__/render-sink-wiring.test.js.map +0 -1
  122. package/dist/src/ee/auth.js.map +0 -1
  123. package/dist/src/ee/auth.test.js.map +0 -1
  124. package/dist/src/ee/bb-design.js.map +0 -1
  125. package/dist/src/ee/bb-retrieval.js.map +0 -1
  126. package/dist/src/ee/bridge.js.map +0 -1
  127. package/dist/src/ee/bridge.test.js.map +0 -1
  128. package/dist/src/ee/client-mode.js.map +0 -1
  129. package/dist/src/ee/client.js.map +0 -1
  130. package/dist/src/ee/client.test.js.map +0 -1
  131. package/dist/src/ee/council-bridge.js.map +0 -1
  132. package/dist/src/ee/embedding-cache.js.map +0 -1
  133. package/dist/src/ee/export-transcripts.js.map +0 -1
  134. package/dist/src/ee/extract-session.js.map +0 -1
  135. package/dist/src/ee/extract-session.test.js.map +0 -1
  136. package/dist/src/ee/health.js.map +0 -1
  137. package/dist/src/ee/index.js.map +0 -1
  138. package/dist/src/ee/intercept.js.map +0 -1
  139. package/dist/src/ee/intercept.test.js.map +0 -1
  140. package/dist/src/ee/judge.js.map +0 -1
  141. package/dist/src/ee/judge.test.js.map +0 -1
  142. package/dist/src/ee/mistake-detector.js.map +0 -1
  143. package/dist/src/ee/mistake-detector.test.js.map +0 -1
  144. package/dist/src/ee/offline-queue.js.map +0 -1
  145. package/dist/src/ee/offline-queue.test.js.map +0 -1
  146. package/dist/src/ee/phase-outcome.js.map +0 -1
  147. package/dist/src/ee/phase-outcome.test.js.map +0 -1
  148. package/dist/src/ee/phase-tracker.js.map +0 -1
  149. package/dist/src/ee/phase-tracker.test.js.map +0 -1
  150. package/dist/src/ee/posttool.js.map +0 -1
  151. package/dist/src/ee/posttool.test.js.map +0 -1
  152. package/dist/src/ee/prompt-stale.js.map +0 -1
  153. package/dist/src/ee/prompt-stale.test.js.map +0 -1
  154. package/dist/src/ee/recall-ledger.js.map +0 -1
  155. package/dist/src/ee/recall-mirror.test.js.map +0 -1
  156. package/dist/src/ee/render.js.map +0 -1
  157. package/dist/src/ee/render.test.js.map +0 -1
  158. package/dist/src/ee/scope.js.map +0 -1
  159. package/dist/src/ee/scope.test.js.map +0 -1
  160. package/dist/src/ee/search.js.map +0 -1
  161. package/dist/src/ee/session-trajectory.js.map +0 -1
  162. package/dist/src/ee/session-trajectory.test.js.map +0 -1
  163. package/dist/src/ee/tenant.js.map +0 -1
  164. package/dist/src/ee/touch.test.js.map +0 -1
  165. package/dist/src/ee/transcript-emit.js.map +0 -1
  166. package/dist/src/ee/types.js.map +0 -1
  167. package/dist/src/flow/__tests__/migration.test.js.map +0 -1
  168. package/dist/src/flow/__tests__/parser.test.js.map +0 -1
  169. package/dist/src/flow/__tests__/run-manager-product.test.js.map +0 -1
  170. package/dist/src/flow/__tests__/run-manager.test.js.map +0 -1
  171. package/dist/src/flow/__tests__/scaffold-checkpoint.test.js.map +0 -1
  172. package/dist/src/flow/__tests__/scaffold.test.js.map +0 -1
  173. package/dist/src/flow/__tests__/warning-persist.test.js.map +0 -1
  174. package/dist/src/flow/artifact-io.js.map +0 -1
  175. package/dist/src/flow/compaction/__tests__/compress.test.js.map +0 -1
  176. package/dist/src/flow/compaction/__tests__/extract.test.js.map +0 -1
  177. package/dist/src/flow/compaction/__tests__/preserve.test.js.map +0 -1
  178. package/dist/src/flow/compaction/compress.js.map +0 -1
  179. package/dist/src/flow/compaction/extract.js.map +0 -1
  180. package/dist/src/flow/compaction/index.js.map +0 -1
  181. package/dist/src/flow/compaction/preserve.js.map +0 -1
  182. package/dist/src/flow/index.js.map +0 -1
  183. package/dist/src/flow/migration.js.map +0 -1
  184. package/dist/src/flow/parser.js.map +0 -1
  185. package/dist/src/flow/run-manager.js.map +0 -1
  186. package/dist/src/flow/scaffold-checkpoint.js.map +0 -1
  187. package/dist/src/flow/scaffold.js.map +0 -1
  188. package/dist/src/flow/warning-persist.js.map +0 -1
  189. package/dist/src/generated/version.js.map +0 -1
  190. package/dist/src/gsd/__tests__/complexity.test.js.map +0 -1
  191. package/dist/src/gsd/__tests__/directives.test.js.map +0 -1
  192. package/dist/src/gsd/__tests__/gray-areas.test.js.map +0 -1
  193. package/dist/src/gsd/__tests__/types.test.js.map +0 -1
  194. package/dist/src/gsd/complexity.js.map +0 -1
  195. package/dist/src/gsd/directives.js.map +0 -1
  196. package/dist/src/gsd/gray-areas.js.map +0 -1
  197. package/dist/src/gsd/index.js.map +0 -1
  198. package/dist/src/gsd/types.js.map +0 -1
  199. package/dist/src/headless/__tests__/council-answers.test.js.map +0 -1
  200. package/dist/src/headless/council-answers.js.map +0 -1
  201. package/dist/src/headless/output.js.map +0 -1
  202. package/dist/src/headless/output.test.js.map +0 -1
  203. package/dist/src/hooks/config.js.map +0 -1
  204. package/dist/src/hooks/index.js.map +0 -1
  205. package/dist/src/hooks/types.js.map +0 -1
  206. package/dist/src/index.js.map +0 -1
  207. package/dist/src/lsp/builtins.js.map +0 -1
  208. package/dist/src/lsp/builtins.test.js.map +0 -1
  209. package/dist/src/lsp/client.js.map +0 -1
  210. package/dist/src/lsp/manager.js.map +0 -1
  211. package/dist/src/lsp/manager.test.js.map +0 -1
  212. package/dist/src/lsp/npm-cache.js.map +0 -1
  213. package/dist/src/lsp/npm-cache.test.js.map +0 -1
  214. package/dist/src/lsp/runtime.js.map +0 -1
  215. package/dist/src/lsp/smoke.test.js.map +0 -1
  216. package/dist/src/lsp/types.js.map +0 -1
  217. package/dist/src/maintain/__tests__/codebase-intel.test.js.map +0 -1
  218. package/dist/src/maintain/__tests__/gh-create-pr.test.js.map +0 -1
  219. package/dist/src/maintain/__tests__/pr-builder.test.js.map +0 -1
  220. package/dist/src/maintain/__tests__/repo-map.test.js.map +0 -1
  221. package/dist/src/maintain/__tests__/task-runner.test.js.map +0 -1
  222. package/dist/src/maintain/codebase-intel.js.map +0 -1
  223. package/dist/src/maintain/gh-create-pr.js.map +0 -1
  224. package/dist/src/maintain/index.js.map +0 -1
  225. package/dist/src/maintain/pr-builder.js.map +0 -1
  226. package/dist/src/maintain/repo-map.js.map +0 -1
  227. package/dist/src/maintain/task-runner.js.map +0 -1
  228. package/dist/src/maintain/types.js.map +0 -1
  229. package/dist/src/mcp/__tests__/auto-setup.test.js.map +0 -1
  230. package/dist/src/mcp/__tests__/cap-tool-result.test.js.map +0 -1
  231. package/dist/src/mcp/__tests__/ee-tools.test.js.map +0 -1
  232. package/dist/src/mcp/__tests__/forensics-tools.test.js.map +0 -1
  233. package/dist/src/mcp/__tests__/harness-driver-action-tools.spec.js.map +0 -1
  234. package/dist/src/mcp/__tests__/harness-driver-async-tools.spec.js.map +0 -1
  235. package/dist/src/mcp/__tests__/harness-driver-read-tools.spec.js.map +0 -1
  236. package/dist/src/mcp/__tests__/harness-driver-security.spec.js.map +0 -1
  237. package/dist/src/mcp/__tests__/harness-driver.spec.js.map +0 -1
  238. package/dist/src/mcp/__tests__/lazy-schema.spec.js.map +0 -1
  239. package/dist/src/mcp/__tests__/lsp-tools.test.js.map +0 -1
  240. package/dist/src/mcp/__tests__/mcp-keychain.test.js.map +0 -1
  241. package/dist/src/mcp/__tests__/research-onboarding.test.js.map +0 -1
  242. package/dist/src/mcp/__tests__/runtime-hydration.test.js.map +0 -1
  243. package/dist/src/mcp/__tests__/runtime-output-cap.test.js.map +0 -1
  244. package/dist/src/mcp/__tests__/runtime-sanitize.test.js.map +0 -1
  245. package/dist/src/mcp/__tests__/self-verify-jobs.test.js.map +0 -1
  246. package/dist/src/mcp/__tests__/smart-filter.test.js.map +0 -1
  247. package/dist/src/mcp/__tests__/tools-server.smoke.test.js.map +0 -1
  248. package/dist/src/mcp/auto-setup.js.map +0 -1
  249. package/dist/src/mcp/cap-tool-result.js.map +0 -1
  250. package/dist/src/mcp/catalog.js.map +0 -1
  251. package/dist/src/mcp/ee-tools.js.map +0 -1
  252. package/dist/src/mcp/forensics-tools.js.map +0 -1
  253. package/dist/src/mcp/lsp-tools.js.map +0 -1
  254. package/dist/src/mcp/mcp-keychain.js.map +0 -1
  255. package/dist/src/mcp/oauth-callback.js.map +0 -1
  256. package/dist/src/mcp/oauth-provider.js.map +0 -1
  257. package/dist/src/mcp/opentui-spawn.js.map +0 -1
  258. package/dist/src/mcp/parse-headers.js.map +0 -1
  259. package/dist/src/mcp/parse-headers.test.js.map +0 -1
  260. package/dist/src/mcp/research-onboarding.js.map +0 -1
  261. package/dist/src/mcp/runtime.js.map +0 -1
  262. package/dist/src/mcp/self-verify-jobs.js.map +0 -1
  263. package/dist/src/mcp/smart-filter.js.map +0 -1
  264. package/dist/src/mcp/smoke.test.js.map +0 -1
  265. package/dist/src/mcp/tools-server.js.map +0 -1
  266. package/dist/src/mcp/validate.js.map +0 -1
  267. package/dist/src/models/__tests__/registry.test.js.map +0 -1
  268. package/dist/src/models/catalog-client.js.map +0 -1
  269. package/dist/src/models/catalog-gemini.test.js.map +0 -1
  270. package/dist/src/models/catalog-url.test.js.map +0 -1
  271. package/dist/src/models/catalog-validation.test.js.map +0 -1
  272. package/dist/src/models/classify-tier.js.map +0 -1
  273. package/dist/src/models/index.js.map +0 -1
  274. package/dist/src/models/registry.js.map +0 -1
  275. package/dist/src/ops/__tests__/doctor-council-mcp.test.js.map +0 -1
  276. package/dist/src/ops/__tests__/doctor-ee-health.test.js.map +0 -1
  277. package/dist/src/ops/bug-report.js.map +0 -1
  278. package/dist/src/ops/bug-report.test.js.map +0 -1
  279. package/dist/src/ops/doctor.js.map +0 -1
  280. package/dist/src/ops/doctor.test.js.map +0 -1
  281. package/dist/src/orchestrator/__tests__/agent-base-url-switch.test.js.map +0 -1
  282. package/dist/src/orchestrator/__tests__/batch-turn-runner.test.js.map +0 -1
  283. package/dist/src/orchestrator/__tests__/council-manager.test.js.map +0 -1
  284. package/dist/src/orchestrator/__tests__/cross-turn-dedup.test.js.map +0 -1
  285. package/dist/src/orchestrator/__tests__/current-call-id.test.js.map +0 -1
  286. package/dist/src/orchestrator/__tests__/error-forensics.test.js.map +0 -1
  287. package/dist/src/orchestrator/__tests__/flow-resume.test.js.map +0 -1
  288. package/dist/src/orchestrator/__tests__/humanize-api-error.test.js.map +0 -1
  289. package/dist/src/orchestrator/__tests__/message-processor.test.js.map +0 -1
  290. package/dist/src/orchestrator/__tests__/message-write-ahead.test.js.map +0 -1
  291. package/dist/src/orchestrator/__tests__/read-path-budget.test.js.map +0 -1
  292. package/dist/src/orchestrator/__tests__/retry-classifier.test.js.map +0 -1
  293. package/dist/src/orchestrator/__tests__/retry-stream.test.js.map +0 -1
  294. package/dist/src/orchestrator/__tests__/route-feedback.test.js.map +0 -1
  295. package/dist/src/orchestrator/__tests__/stream-runner.test.js.map +0 -1
  296. package/dist/src/orchestrator/__tests__/sub-agent-model-tier.test.js.map +0 -1
  297. package/dist/src/orchestrator/__tests__/usage-events-shape.test.js.map +0 -1
  298. package/dist/src/orchestrator/__tests__/usage-normalizer-c1.test.js.map +0 -1
  299. package/dist/src/orchestrator/__tests__/usage-shape-threading.test.js.map +0 -1
  300. package/dist/src/orchestrator/__tests__/write-ahead.test.js.map +0 -1
  301. package/dist/src/orchestrator/abort.js.map +0 -1
  302. package/dist/src/orchestrator/abort.test.js.map +0 -1
  303. package/dist/src/orchestrator/agent-options.js.map +0 -1
  304. package/dist/src/orchestrator/agent.test.js.map +0 -1
  305. package/dist/src/orchestrator/batch-turn-runner.js.map +0 -1
  306. package/dist/src/orchestrator/batch-utils.js.map +0 -1
  307. package/dist/src/orchestrator/cleanup.test.js.map +0 -1
  308. package/dist/src/orchestrator/compaction.js.map +0 -1
  309. package/dist/src/orchestrator/compaction.test.js.map +0 -1
  310. package/dist/src/orchestrator/council-manager.js.map +0 -1
  311. package/dist/src/orchestrator/cross-turn-dedup.js.map +0 -1
  312. package/dist/src/orchestrator/delegations.js.map +0 -1
  313. package/dist/src/orchestrator/delegations.test.js.map +0 -1
  314. package/dist/src/orchestrator/error-utils.js.map +0 -1
  315. package/dist/src/orchestrator/flow-resume.js.map +0 -1
  316. package/dist/src/orchestrator/grounding-check.js.map +0 -1
  317. package/dist/src/orchestrator/grounding-check.test.js.map +0 -1
  318. package/dist/src/orchestrator/interrupted-turn.js.map +0 -1
  319. package/dist/src/orchestrator/interrupted-turn.test.js.map +0 -1
  320. package/dist/src/orchestrator/message-processor.js.map +0 -1
  321. package/dist/src/orchestrator/message-seq.js.map +0 -1
  322. package/dist/src/orchestrator/message-seq.test.js.map +0 -1
  323. package/dist/src/orchestrator/orchestrator.js.map +0 -1
  324. package/dist/src/orchestrator/pending-calls.js.map +0 -1
  325. package/dist/src/orchestrator/pending-calls.test.js.map +0 -1
  326. package/dist/src/orchestrator/prompts.js.map +0 -1
  327. package/dist/src/orchestrator/provider-options-shape.js.map +0 -1
  328. package/dist/src/orchestrator/provider-options-shape.spec.js.map +0 -1
  329. package/dist/src/orchestrator/read-path-budget.js.map +0 -1
  330. package/dist/src/orchestrator/reasoning.js.map +0 -1
  331. package/dist/src/orchestrator/reasoning.test.js.map +0 -1
  332. package/dist/src/orchestrator/repair-tool-call.js.map +0 -1
  333. package/dist/src/orchestrator/repetition-detector.js.map +0 -1
  334. package/dist/src/orchestrator/repetition-detector.test.js.map +0 -1
  335. package/dist/src/orchestrator/retry-classifier.js.map +0 -1
  336. package/dist/src/orchestrator/retry-stream.js.map +0 -1
  337. package/dist/src/orchestrator/sandbox.test.js.map +0 -1
  338. package/dist/src/orchestrator/scope-ceiling.js.map +0 -1
  339. package/dist/src/orchestrator/scope-ceiling.test.js.map +0 -1
  340. package/dist/src/orchestrator/scope-reminder.js.map +0 -1
  341. package/dist/src/orchestrator/scope-reminder.test.js.map +0 -1
  342. package/dist/src/orchestrator/stall-rescue.js.map +0 -1
  343. package/dist/src/orchestrator/stall-rescue.test.js.map +0 -1
  344. package/dist/src/orchestrator/stall-watchdog.js.map +0 -1
  345. package/dist/src/orchestrator/stall-watchdog.test.js.map +0 -1
  346. package/dist/src/orchestrator/stream-runner.js.map +0 -1
  347. package/dist/src/orchestrator/sub-agent-cap.js.map +0 -1
  348. package/dist/src/orchestrator/sub-agent-cap.test.js.map +0 -1
  349. package/dist/src/orchestrator/sub-agent-model-tier.js.map +0 -1
  350. package/dist/src/orchestrator/subagent-compactor.js.map +0 -1
  351. package/dist/src/orchestrator/subagent-compactor.spec.js.map +0 -1
  352. package/dist/src/orchestrator/text-tool-call-detector.js.map +0 -1
  353. package/dist/src/orchestrator/text-tool-call-detector.test.js.map +0 -1
  354. package/dist/src/orchestrator/token-counter.js.map +0 -1
  355. package/dist/src/orchestrator/token-counter.test.js.map +0 -1
  356. package/dist/src/orchestrator/tool-args-hash.js.map +0 -1
  357. package/dist/src/orchestrator/tool-args-hash.test.js.map +0 -1
  358. package/dist/src/orchestrator/tool-args-repair.js.map +0 -1
  359. package/dist/src/orchestrator/tool-args-repair.test.js.map +0 -1
  360. package/dist/src/orchestrator/tool-loop-cap.js.map +0 -1
  361. package/dist/src/orchestrator/tool-loop-cap.test.js.map +0 -1
  362. package/dist/src/orchestrator/tool-repetition-detector.js.map +0 -1
  363. package/dist/src/orchestrator/tool-repetition-detector.test.js.map +0 -1
  364. package/dist/src/orchestrator/tool-utils.js.map +0 -1
  365. package/dist/src/orchestrator/turn-runner-deps.js.map +0 -1
  366. package/dist/src/pil/__tests__/budget.test.js.map +0 -1
  367. package/dist/src/pil/__tests__/clarity-gate.test.js.map +0 -1
  368. package/dist/src/pil/__tests__/config.test.js.map +0 -1
  369. package/dist/src/pil/__tests__/discovery-cache.test.js.map +0 -1
  370. package/dist/src/pil/__tests__/discovery-types.test.js.map +0 -1
  371. package/dist/src/pil/__tests__/discovery.test.js.map +0 -1
  372. package/dist/src/pil/__tests__/dual-run.test.js.map +0 -1
  373. package/dist/src/pil/__tests__/layer1-intent-trace.test.js.map +0 -1
  374. package/dist/src/pil/__tests__/layer1-intent.test.js.map +0 -1
  375. package/dist/src/pil/__tests__/layer15-context-scan.test.js.map +0 -1
  376. package/dist/src/pil/__tests__/layer16-clarity.test.js.map +0 -1
  377. package/dist/src/pil/__tests__/layer17-feasibility.test.js.map +0 -1
  378. package/dist/src/pil/__tests__/layer18-acceptance.test.js.map +0 -1
  379. package/dist/src/pil/__tests__/layer2-personality.test.js.map +0 -1
  380. package/dist/src/pil/__tests__/layer3-ee-injection.test.js.map +0 -1
  381. package/dist/src/pil/__tests__/layer3-injected-chunk.test.js.map +0 -1
  382. package/dist/src/pil/__tests__/layer4-gsd.test.js.map +0 -1
  383. package/dist/src/pil/__tests__/layer5-context.test.js.map +0 -1
  384. package/dist/src/pil/__tests__/layer6-output.test.js.map +0 -1
  385. package/dist/src/pil/__tests__/llm-classify.test.js.map +0 -1
  386. package/dist/src/pil/__tests__/native-capabilities-workbook.test.js.map +0 -1
  387. package/dist/src/pil/__tests__/ollama-classify.test.js.map +0 -1
  388. package/dist/src/pil/__tests__/orchestrator-integration.test.js.map +0 -1
  389. package/dist/src/pil/__tests__/pipeline.test.js.map +0 -1
  390. package/dist/src/pil/__tests__/renderer-coverage.test.js.map +0 -1
  391. package/dist/src/pil/__tests__/response-tools.test.js.map +0 -1
  392. package/dist/src/pil/__tests__/schema.test.js.map +0 -1
  393. package/dist/src/pil/__tests__/scoreComplexity.test.js.map +0 -1
  394. package/dist/src/pil/__tests__/scoreSufficiency.test.js.map +0 -1
  395. package/dist/src/pil/__tests__/store.test.js.map +0 -1
  396. package/dist/src/pil/__tests__/task-tier-map.test.js.map +0 -1
  397. package/dist/src/pil/agent-operating-contract.js.map +0 -1
  398. package/dist/src/pil/agent-operating-contract.test.js.map +0 -1
  399. package/dist/src/pil/budget-log.js.map +0 -1
  400. package/dist/src/pil/budget.js.map +0 -1
  401. package/dist/src/pil/cheap-model-playbook.js.map +0 -1
  402. package/dist/src/pil/cheap-model-playbook.test.js.map +0 -1
  403. package/dist/src/pil/cheap-model-workbooks.js.map +0 -1
  404. package/dist/src/pil/cheap-model-workbooks.test.js.map +0 -1
  405. package/dist/src/pil/clarity-gate.js.map +0 -1
  406. package/dist/src/pil/config.js.map +0 -1
  407. package/dist/src/pil/discovery-cache.js.map +0 -1
  408. package/dist/src/pil/discovery-types.js.map +0 -1
  409. package/dist/src/pil/discovery.js.map +0 -1
  410. package/dist/src/pil/index.js.map +0 -1
  411. package/dist/src/pil/layer1-intent.js.map +0 -1
  412. package/dist/src/pil/layer1-intent.test.js.map +0 -1
  413. package/dist/src/pil/layer15-context-scan.js.map +0 -1
  414. package/dist/src/pil/layer16-clarity.js.map +0 -1
  415. package/dist/src/pil/layer16-clarity.test.js.map +0 -1
  416. package/dist/src/pil/layer17-feasibility.js.map +0 -1
  417. package/dist/src/pil/layer18-acceptance.js.map +0 -1
  418. package/dist/src/pil/layer1_5-complexity-size.js.map +0 -1
  419. package/dist/src/pil/layer1_5-complexity-size.test.js.map +0 -1
  420. package/dist/src/pil/layer2-personality.js.map +0 -1
  421. package/dist/src/pil/layer3-ee-injection.js.map +0 -1
  422. package/dist/src/pil/layer4-gsd.js.map +0 -1
  423. package/dist/src/pil/layer5-context.js.map +0 -1
  424. package/dist/src/pil/layer6-output.js.map +0 -1
  425. package/dist/src/pil/llm-classify.js.map +0 -1
  426. package/dist/src/pil/native-capabilities-workbook.js.map +0 -1
  427. package/dist/src/pil/ollama-classify.js.map +0 -1
  428. package/dist/src/pil/pipeline.js.map +0 -1
  429. package/dist/src/pil/response-tools.js.map +0 -1
  430. package/dist/src/pil/schema.js.map +0 -1
  431. package/dist/src/pil/session-state.js.map +0 -1
  432. package/dist/src/pil/session-state.test.js.map +0 -1
  433. package/dist/src/pil/store.js.map +0 -1
  434. package/dist/src/pil/task-tier-map.js.map +0 -1
  435. package/dist/src/pil/timeout.js.map +0 -1
  436. package/dist/src/pil/types.js.map +0 -1
  437. package/dist/src/product-loop/__tests__/artifact-io.test.js.map +0 -1
  438. package/dist/src/product-loop/__tests__/assumption-ledger.test.js.map +0 -1
  439. package/dist/src/product-loop/__tests__/backlog-builder.test.js.map +0 -1
  440. package/dist/src/product-loop/__tests__/backlog-store.test.js.map +0 -1
  441. package/dist/src/product-loop/__tests__/cb2-retry-bonus.test.js.map +0 -1
  442. package/dist/src/product-loop/__tests__/circuit-breakers-coverage.test.js.map +0 -1
  443. package/dist/src/product-loop/__tests__/circuit-breakers.test.js.map +0 -1
  444. package/dist/src/product-loop/__tests__/complexity-routing.spec.js.map +0 -1
  445. package/dist/src/product-loop/__tests__/context-policy.test.js.map +0 -1
  446. package/dist/src/product-loop/__tests__/cost-preview.test.js.map +0 -1
  447. package/dist/src/product-loop/__tests__/cost-scoper.test.js.map +0 -1
  448. package/dist/src/product-loop/__tests__/cross-run-memory.test.js.map +0 -1
  449. package/dist/src/product-loop/__tests__/design-output.spec.js.map +0 -1
  450. package/dist/src/product-loop/__tests__/discover.test.js.map +0 -1
  451. package/dist/src/product-loop/__tests__/discovery-context-format.test.js.map +0 -1
  452. package/dist/src/product-loop/__tests__/discovery-council-runner.test.js.map +0 -1
  453. package/dist/src/product-loop/__tests__/discovery-detection.test.js.map +0 -1
  454. package/dist/src/product-loop/__tests__/discovery-ecosystem.test.js.map +0 -1
  455. package/dist/src/product-loop/__tests__/discovery-integration.test.js.map +0 -1
  456. package/dist/src/product-loop/__tests__/discovery-interview.test.js.map +0 -1
  457. package/dist/src/product-loop/__tests__/discovery-migrations.test.js.map +0 -1
  458. package/dist/src/product-loop/__tests__/discovery-persistence.test.js.map +0 -1
  459. package/dist/src/product-loop/__tests__/discovery-prompt-parser.test.js.map +0 -1
  460. package/dist/src/product-loop/__tests__/discovery-prompt-specificity.test.js.map +0 -1
  461. package/dist/src/product-loop/__tests__/discovery-recommender-ecosystem.test.js.map +0 -1
  462. package/dist/src/product-loop/__tests__/discovery-recommender.test.js.map +0 -1
  463. package/dist/src/product-loop/__tests__/discovery-schema.test.js.map +0 -1
  464. package/dist/src/product-loop/__tests__/done-gate-coverage.test.js.map +0 -1
  465. package/dist/src/product-loop/__tests__/done-gate.test.js.map +0 -1
  466. package/dist/src/product-loop/__tests__/ee-extract-wiring.test.js.map +0 -1
  467. package/dist/src/product-loop/__tests__/extract-to-ee.test.js.map +0 -1
  468. package/dist/src/product-loop/__tests__/feedback-routing.test.js.map +0 -1
  469. package/dist/src/product-loop/__tests__/gather-selectable-alts.test.js.map +0 -1
  470. package/dist/src/product-loop/__tests__/hot-path.spec.js.map +0 -1
  471. package/dist/src/product-loop/__tests__/integration.test.js.map +0 -1
  472. package/dist/src/product-loop/__tests__/loop-driver-audit.test.js.map +0 -1
  473. package/dist/src/product-loop/__tests__/loop-driver.test.js.map +0 -1
  474. package/dist/src/product-loop/__tests__/maintenance-task-synthesis.test.js.map +0 -1
  475. package/dist/src/product-loop/__tests__/phase-a1-a3-sprint-runner.test.js.map +0 -1
  476. package/dist/src/product-loop/__tests__/phase-a2-backlog-build.test.js.map +0 -1
  477. package/dist/src/product-loop/__tests__/phase-budget.test.js.map +0 -1
  478. package/dist/src/product-loop/__tests__/phase-orchestrator-integration.test.js.map +0 -1
  479. package/dist/src/product-loop/__tests__/phase-plan.test.js.map +0 -1
  480. package/dist/src/product-loop/__tests__/phase-rituals.test.js.map +0 -1
  481. package/dist/src/product-loop/__tests__/phase-runner.test.js.map +0 -1
  482. package/dist/src/product-loop/__tests__/phase-tracker-bridge.test.js.map +0 -1
  483. package/dist/src/product-loop/__tests__/pick-backend-stack.test.js.map +0 -1
  484. package/dist/src/product-loop/__tests__/product-identity.test.js.map +0 -1
  485. package/dist/src/product-loop/__tests__/progress-snapshot.test.js.map +0 -1
  486. package/dist/src/product-loop/__tests__/reality-anchor.test.js.map +0 -1
  487. package/dist/src/product-loop/__tests__/repo-audit.test.js.map +0 -1
  488. package/dist/src/product-loop/__tests__/repo-brief.test.js.map +0 -1
  489. package/dist/src/product-loop/__tests__/role-memory.test.js.map +0 -1
  490. package/dist/src/product-loop/__tests__/role-registry.test.js.map +0 -1
  491. package/dist/src/product-loop/__tests__/role-routing-ee.test.js.map +0 -1
  492. package/dist/src/product-loop/__tests__/route-decision-emit.test.js.map +0 -1
  493. package/dist/src/product-loop/__tests__/seed-questions.test.js.map +0 -1
  494. package/dist/src/product-loop/__tests__/ship-polish.test.js.map +0 -1
  495. package/dist/src/product-loop/__tests__/sprint-planner.test.js.map +0 -1
  496. package/dist/src/product-loop/__tests__/sprint-runner-backlog.test.js.map +0 -1
  497. package/dist/src/product-loop/__tests__/sprint-runner-emit.test.js.map +0 -1
  498. package/dist/src/product-loop/__tests__/sprint-runner-phase-chunks.test.js.map +0 -1
  499. package/dist/src/product-loop/__tests__/sprint-runner.test.js.map +0 -1
  500. package/dist/src/product-loop/__tests__/sprint-self-verify.test.js.map +0 -1
  501. package/dist/src/product-loop/__tests__/sprint-store.test.js.map +0 -1
  502. package/dist/src/product-loop/__tests__/stakeholder-acl.test.js.map +0 -1
  503. package/dist/src/product-loop/__tests__/state-md-ee-injections.test.js.map +0 -1
  504. package/dist/src/product-loop/__tests__/sufficiency-routing.spec.js.map +0 -1
  505. package/dist/src/product-loop/__tests__/typed-artifacts.test.js.map +0 -1
  506. package/dist/src/product-loop/__tests__/types.test.js.map +0 -1
  507. package/dist/src/product-loop/__tests__/verify-failure-threshold.test.js.map +0 -1
  508. package/dist/src/product-loop/__tests__/verify-failure-tracking.test.js.map +0 -1
  509. package/dist/src/product-loop/__tests__/verify-result.test.js.map +0 -1
  510. package/dist/src/product-loop/artifact-io.js.map +0 -1
  511. package/dist/src/product-loop/assumption-ledger.js.map +0 -1
  512. package/dist/src/product-loop/backlog-builder.js.map +0 -1
  513. package/dist/src/product-loop/backlog-store.js.map +0 -1
  514. package/dist/src/product-loop/circuit-breakers.js.map +0 -1
  515. package/dist/src/product-loop/context-policy.js.map +0 -1
  516. package/dist/src/product-loop/cost-preview.js.map +0 -1
  517. package/dist/src/product-loop/cost-scoper.js.map +0 -1
  518. package/dist/src/product-loop/cross-run-memory.js.map +0 -1
  519. package/dist/src/product-loop/design-output.js.map +0 -1
  520. package/dist/src/product-loop/discover.js.map +0 -1
  521. package/dist/src/product-loop/discovery-context-format.js.map +0 -1
  522. package/dist/src/product-loop/discovery-council-runner.js.map +0 -1
  523. package/dist/src/product-loop/discovery-detection.js.map +0 -1
  524. package/dist/src/product-loop/discovery-ecosystem.js.map +0 -1
  525. package/dist/src/product-loop/discovery-interview.js.map +0 -1
  526. package/dist/src/product-loop/discovery-migrations.js.map +0 -1
  527. package/dist/src/product-loop/discovery-persistence.js.map +0 -1
  528. package/dist/src/product-loop/discovery-prompt-parser.js.map +0 -1
  529. package/dist/src/product-loop/discovery-recommender.js.map +0 -1
  530. package/dist/src/product-loop/discovery-schema.js.map +0 -1
  531. package/dist/src/product-loop/done-gate.js.map +0 -1
  532. package/dist/src/product-loop/feedback-routing.js.map +0 -1
  533. package/dist/src/product-loop/gather.js.map +0 -1
  534. package/dist/src/product-loop/index.js.map +0 -1
  535. package/dist/src/product-loop/loop-driver.js.map +0 -1
  536. package/dist/src/product-loop/phase-budget.js.map +0 -1
  537. package/dist/src/product-loop/phase-plan.js.map +0 -1
  538. package/dist/src/product-loop/phase-rituals.js.map +0 -1
  539. package/dist/src/product-loop/phase-runner.js.map +0 -1
  540. package/dist/src/product-loop/phase-tracker-bridge.js.map +0 -1
  541. package/dist/src/product-loop/product-identity.js.map +0 -1
  542. package/dist/src/product-loop/progress-snapshot.js.map +0 -1
  543. package/dist/src/product-loop/reality-anchor.js.map +0 -1
  544. package/dist/src/product-loop/repo-audit.js.map +0 -1
  545. package/dist/src/product-loop/repo-brief.js.map +0 -1
  546. package/dist/src/product-loop/role-memory.js.map +0 -1
  547. package/dist/src/product-loop/role-registry.js.map +0 -1
  548. package/dist/src/product-loop/seed-questions.js.map +0 -1
  549. package/dist/src/product-loop/ship-polish.js.map +0 -1
  550. package/dist/src/product-loop/sprint-planner.js.map +0 -1
  551. package/dist/src/product-loop/sprint-runner.js.map +0 -1
  552. package/dist/src/product-loop/sprint-self-verify.js.map +0 -1
  553. package/dist/src/product-loop/sprint-store.js.map +0 -1
  554. package/dist/src/product-loop/stakeholder-acl.js.map +0 -1
  555. package/dist/src/product-loop/typed-artifacts.js.map +0 -1
  556. package/dist/src/product-loop/types.js.map +0 -1
  557. package/dist/src/product-loop/verify-failure-tracking.js.map +0 -1
  558. package/dist/src/product-loop/verify-result.js.map +0 -1
  559. package/dist/src/providers/__test-utils__/load-fixture.js.map +0 -1
  560. package/dist/src/providers/__tests__/adapter-oauth-wiring.test.js.map +0 -1
  561. package/dist/src/providers/__tests__/capabilities-cosmetic.test.js.map +0 -1
  562. package/dist/src/providers/__tests__/capabilities-flags.test.js.map +0 -1
  563. package/dist/src/providers/__tests__/capabilities-provider-options.test.js.map +0 -1
  564. package/dist/src/providers/__tests__/capabilities-sanitize.test.js.map +0 -1
  565. package/dist/src/providers/__tests__/capabilities.test.js.map +0 -1
  566. package/dist/src/providers/__tests__/provider-coverage.test.js.map +0 -1
  567. package/dist/src/providers/__tests__/reasoning-roundtrip.test.js.map +0 -1
  568. package/dist/src/providers/__tests__/runtime-integration.test.js.map +0 -1
  569. package/dist/src/providers/__tests__/runtime.test.js.map +0 -1
  570. package/dist/src/providers/__tests__/siliconflow-sse-repair.test.js.map +0 -1
  571. package/dist/src/providers/__tests__/strategies-registry.test.js.map +0 -1
  572. package/dist/src/providers/__tests__/strategies-resolve.test.js.map +0 -1
  573. package/dist/src/providers/__tests__/wire-debug.test.js.map +0 -1
  574. package/dist/src/providers/adapter.js.map +0 -1
  575. package/dist/src/providers/adapter.test.js.map +0 -1
  576. package/dist/src/providers/anthropic.js.map +0 -1
  577. package/dist/src/providers/auth/__tests__/browser-flow.test.js.map +0 -1
  578. package/dist/src/providers/auth/__tests__/device-flow.test.js.map +0 -1
  579. package/dist/src/providers/auth/__tests__/gemini-oauth.test.js.map +0 -1
  580. package/dist/src/providers/auth/__tests__/grok-oauth.test.js.map +0 -1
  581. package/dist/src/providers/auth/__tests__/openai-oauth.test.js.map +0 -1
  582. package/dist/src/providers/auth/__tests__/token-store.test.js.map +0 -1
  583. package/dist/src/providers/auth/browser-flow.js.map +0 -1
  584. package/dist/src/providers/auth/device-flow.js.map +0 -1
  585. package/dist/src/providers/auth/gemini-oauth.js.map +0 -1
  586. package/dist/src/providers/auth/grok-oauth.js.map +0 -1
  587. package/dist/src/providers/auth/openai-oauth.js.map +0 -1
  588. package/dist/src/providers/auth/registry.js.map +0 -1
  589. package/dist/src/providers/auth/token-store.js.map +0 -1
  590. package/dist/src/providers/auth/types.js.map +0 -1
  591. package/dist/src/providers/capabilities.js.map +0 -1
  592. package/dist/src/providers/endpoints.js.map +0 -1
  593. package/dist/src/providers/errors.js.map +0 -1
  594. package/dist/src/providers/errors.test.js.map +0 -1
  595. package/dist/src/providers/gemini.js.map +0 -1
  596. package/dist/src/providers/gemini.test.js.map +0 -1
  597. package/dist/src/providers/index.js.map +0 -1
  598. package/dist/src/providers/keychain.js.map +0 -1
  599. package/dist/src/providers/keychain.test.js.map +0 -1
  600. package/dist/src/providers/mcp-vision-bridge.js.map +0 -1
  601. package/dist/src/providers/mcp-vision-bridge.test.js.map +0 -1
  602. package/dist/src/providers/ollama.js.map +0 -1
  603. package/dist/src/providers/ollama.test.js.map +0 -1
  604. package/dist/src/providers/openai-compatible.js.map +0 -1
  605. package/dist/src/providers/openai-compatible.test.js.map +0 -1
  606. package/dist/src/providers/openai.js.map +0 -1
  607. package/dist/src/providers/openai.test.js.map +0 -1
  608. package/dist/src/providers/patch-zod-schema.js.map +0 -1
  609. package/dist/src/providers/pricing.js.map +0 -1
  610. package/dist/src/providers/pricing.test.js.map +0 -1
  611. package/dist/src/providers/prompt-cache-key.spec.js.map +0 -1
  612. package/dist/src/providers/runtime-mock.spec.js.map +0 -1
  613. package/dist/src/providers/runtime.js.map +0 -1
  614. package/dist/src/providers/siliconflow-sse-repair.js.map +0 -1
  615. package/dist/src/providers/strategies/anthropic.strategy.js.map +0 -1
  616. package/dist/src/providers/strategies/base.strategy.js.map +0 -1
  617. package/dist/src/providers/strategies/deepseek.strategy.js.map +0 -1
  618. package/dist/src/providers/strategies/google.strategy.js.map +0 -1
  619. package/dist/src/providers/strategies/ollama.strategy.js.map +0 -1
  620. package/dist/src/providers/strategies/openai.strategy.js.map +0 -1
  621. package/dist/src/providers/strategies/registry.js.map +0 -1
  622. package/dist/src/providers/strategies/siliconflow.strategy.js.map +0 -1
  623. package/dist/src/providers/strategies/xai.strategy.js.map +0 -1
  624. package/dist/src/providers/stream-loop.js.map +0 -1
  625. package/dist/src/providers/types.js.map +0 -1
  626. package/dist/src/providers/vision-proxy.js.map +0 -1
  627. package/dist/src/providers/vision-proxy.test.js.map +0 -1
  628. package/dist/src/providers/wire-debug.js.map +0 -1
  629. package/dist/src/reporter/__tests__/acl-check.test.js.map +0 -1
  630. package/dist/src/reporter/__tests__/auto-fire.test.js.map +0 -1
  631. package/dist/src/reporter/__tests__/budget.test.js.map +0 -1
  632. package/dist/src/reporter/__tests__/handlers.test.js.map +0 -1
  633. package/dist/src/reporter/__tests__/query-router.test.js.map +0 -1
  634. package/dist/src/reporter/acl-check.js.map +0 -1
  635. package/dist/src/reporter/auto-fire.js.map +0 -1
  636. package/dist/src/reporter/budget.js.map +0 -1
  637. package/dist/src/reporter/handlers.js.map +0 -1
  638. package/dist/src/reporter/index.js.map +0 -1
  639. package/dist/src/reporter/query-router.js.map +0 -1
  640. package/dist/src/router/__tests__/step-router.test.js.map +0 -1
  641. package/dist/src/router/classifier/grammars.js.map +0 -1
  642. package/dist/src/router/classifier/index.js.map +0 -1
  643. package/dist/src/router/classifier/index.test.js.map +0 -1
  644. package/dist/src/router/classifier/regex.js.map +0 -1
  645. package/dist/src/router/classifier/regex.test.js.map +0 -1
  646. package/dist/src/router/classifier/tree-sitter.js.map +0 -1
  647. package/dist/src/router/classifier/tree-sitter.test.js.map +0 -1
  648. package/dist/src/router/cold.js.map +0 -1
  649. package/dist/src/router/cold.test.js.map +0 -1
  650. package/dist/src/router/decide.js.map +0 -1
  651. package/dist/src/router/decide.test.js.map +0 -1
  652. package/dist/src/router/health.js.map +0 -1
  653. package/dist/src/router/health.test.js.map +0 -1
  654. package/dist/src/router/provider-sentinel.js.map +0 -1
  655. package/dist/src/router/provider-sentinel.test.js.map +0 -1
  656. package/dist/src/router/role-override.test.js.map +0 -1
  657. package/dist/src/router/step-router.js.map +0 -1
  658. package/dist/src/router/store.js.map +0 -1
  659. package/dist/src/router/types.js.map +0 -1
  660. package/dist/src/router/warm.js.map +0 -1
  661. package/dist/src/router/warm.test.js.map +0 -1
  662. package/dist/src/scaffold/__tests__/continuation-prompt.test.js.map +0 -1
  663. package/dist/src/scaffold/__tests__/continue-as-council.spec.js.map +0 -1
  664. package/dist/src/scaffold/__tests__/dotnet-assembly-name.test.js.map +0 -1
  665. package/dist/src/scaffold/__tests__/fe-scaffold-contents.test.js.map +0 -1
  666. package/dist/src/scaffold/__tests__/init-new.smoke.spec.js.map +0 -1
  667. package/dist/src/scaffold/__tests__/init-new.spec.js.map +0 -1
  668. package/dist/src/scaffold/__tests__/install-bb-templates.spec.js.map +0 -1
  669. package/dist/src/scaffold/__tests__/point-to-existing.spec.js.map +0 -1
  670. package/dist/src/scaffold/bb-ecosystem-apply.js.map +0 -1
  671. package/dist/src/scaffold/bb-quality-gate.js.map +0 -1
  672. package/dist/src/scaffold/continuation-prompt.js.map +0 -1
  673. package/dist/src/scaffold/continue-as-council.js.map +0 -1
  674. package/dist/src/scaffold/init-new.js.map +0 -1
  675. package/dist/src/scaffold/point-to-existing.js.map +0 -1
  676. package/dist/src/scaffold/resume-from-gate-failures.js.map +0 -1
  677. package/dist/src/self-qa/__tests__/agentic-context.test.js.map +0 -1
  678. package/dist/src/self-qa/__tests__/agentic-loop.test.js.map +0 -1
  679. package/dist/src/self-qa/__tests__/delta-encoder.test.js.map +0 -1
  680. package/dist/src/self-qa/__tests__/judge.test.js.map +0 -1
  681. package/dist/src/self-qa/__tests__/scenario-planner.test.js.map +0 -1
  682. package/dist/src/self-qa/__tests__/spec-emitter.test.js.map +0 -1
  683. package/dist/src/self-qa/agentic-context.js.map +0 -1
  684. package/dist/src/self-qa/agentic-loop.js.map +0 -1
  685. package/dist/src/self-qa/delta-encoder.js.map +0 -1
  686. package/dist/src/self-qa/index.js.map +0 -1
  687. package/dist/src/self-qa/judge.js.map +0 -1
  688. package/dist/src/self-qa/orchestrator.js.map +0 -1
  689. package/dist/src/self-qa/scenario-planner.js.map +0 -1
  690. package/dist/src/self-qa/spec-emitter.js.map +0 -1
  691. package/dist/src/self-qa/types.js.map +0 -1
  692. package/dist/src/storage/__tests__/migrations.test.js.map +0 -1
  693. package/dist/src/storage/__tests__/sweep-stale-pending.test.js.map +0 -1
  694. package/dist/src/storage/__tests__/ui-interaction-log.test.js.map +0 -1
  695. package/dist/src/storage/atomic-io.js.map +0 -1
  696. package/dist/src/storage/atomic-io.test.js.map +0 -1
  697. package/dist/src/storage/config.js.map +0 -1
  698. package/dist/src/storage/config.test.js.map +0 -1
  699. package/dist/src/storage/db.js.map +0 -1
  700. package/dist/src/storage/index.js.map +0 -1
  701. package/dist/src/storage/interaction-log.js.map +0 -1
  702. package/dist/src/storage/migrations.js.map +0 -1
  703. package/dist/src/storage/session-dir.js.map +0 -1
  704. package/dist/src/storage/sessions.js.map +0 -1
  705. package/dist/src/storage/tool-results.js.map +0 -1
  706. package/dist/src/storage/transcript-response-entry.test.js.map +0 -1
  707. package/dist/src/storage/transcript-view.js.map +0 -1
  708. package/dist/src/storage/transcript.js.map +0 -1
  709. package/dist/src/storage/transcript.test.js.map +0 -1
  710. package/dist/src/storage/ui-interaction-log.js.map +0 -1
  711. package/dist/src/storage/usage-cap.js.map +0 -1
  712. package/dist/src/storage/usage-cap.test.js.map +0 -1
  713. package/dist/src/storage/usage.js.map +0 -1
  714. package/dist/src/storage/workspaces.js.map +0 -1
  715. package/dist/src/tools/__tests__/vision-gate.test.js.map +0 -1
  716. package/dist/src/tools/bash-output-cache.js.map +0 -1
  717. package/dist/src/tools/bash-output-cache.test.js.map +0 -1
  718. package/dist/src/tools/bash-output-integration.test.js.map +0 -1
  719. package/dist/src/tools/bash.js.map +0 -1
  720. package/dist/src/tools/bash.test.js.map +0 -1
  721. package/dist/src/tools/computer.js.map +0 -1
  722. package/dist/src/tools/computer.test.js.map +0 -1
  723. package/dist/src/tools/file-tracker.js.map +0 -1
  724. package/dist/src/tools/file-tracker.test.js.map +0 -1
  725. package/dist/src/tools/file.js.map +0 -1
  726. package/dist/src/tools/file.test.js.map +0 -1
  727. package/dist/src/tools/grep.js.map +0 -1
  728. package/dist/src/tools/registry-bash-empty-command.test.js.map +0 -1
  729. package/dist/src/tools/registry-bash-footer.test.js.map +0 -1
  730. package/dist/src/tools/registry-ee-query.test.js.map +0 -1
  731. package/dist/src/tools/registry-session-repeat.test.js.map +0 -1
  732. package/dist/src/tools/registry.js.map +0 -1
  733. package/dist/src/tools/registry.test.js.map +0 -1
  734. package/dist/src/tools/schedule.js.map +0 -1
  735. package/dist/src/tools/schedule.test.js.map +0 -1
  736. package/dist/src/tools/todo-write-snapshot.js.map +0 -1
  737. package/dist/src/tools/todo-write-snapshot.test.js.map +0 -1
  738. package/dist/src/tools/vision-gate.js.map +0 -1
  739. package/dist/src/types/index.js.map +0 -1
  740. package/dist/src/ui/__tests__/picker-providers.test.js.map +0 -1
  741. package/dist/src/ui/agents-modal.js.map +0 -1
  742. package/dist/src/ui/app.js.map +0 -1
  743. package/dist/src/ui/cards/__tests__/product-status-card.test.js.map +0 -1
  744. package/dist/src/ui/cards/product-status-card.js.map +0 -1
  745. package/dist/src/ui/components/SuggestionOverlay.js.map +0 -1
  746. package/dist/src/ui/components/Toast.js.map +0 -1
  747. package/dist/src/ui/components/__tests__/council-leader-bubble.test.js.map +0 -1
  748. package/dist/src/ui/components/__tests__/council-message-bubble.test.js.map +0 -1
  749. package/dist/src/ui/components/__tests__/council-phase-timeline.test.js.map +0 -1
  750. package/dist/src/ui/components/__tests__/council-placeholder-bubble.test.js.map +0 -1
  751. package/dist/src/ui/components/__tests__/council-question-card.test.js.map +0 -1
  752. package/dist/src/ui/components/__tests__/council-synthesis-banner.test.js.map +0 -1
  753. package/dist/src/ui/components/__tests__/task-list-panel.test.js.map +0 -1
  754. package/dist/src/ui/components/__tests__/use-pair-quote-buffer.test.js.map +0 -1
  755. package/dist/src/ui/components/btw-overlay.js.map +0 -1
  756. package/dist/src/ui/components/bubble-layout.js.map +0 -1
  757. package/dist/src/ui/components/code-block-truncate.js.map +0 -1
  758. package/dist/src/ui/components/copy-flash-banner.js.map +0 -1
  759. package/dist/src/ui/components/council-info-card.js.map +0 -1
  760. package/dist/src/ui/components/council-leader-bubble.js.map +0 -1
  761. package/dist/src/ui/components/council-message-bubble.js.map +0 -1
  762. package/dist/src/ui/components/council-phase-timeline.js.map +0 -1
  763. package/dist/src/ui/components/council-placeholder-bubble.js.map +0 -1
  764. package/dist/src/ui/components/council-question-card.js.map +0 -1
  765. package/dist/src/ui/components/council-status-list.js.map +0 -1
  766. package/dist/src/ui/components/council-synthesis-banner.js.map +0 -1
  767. package/dist/src/ui/components/diff-view.js.map +0 -1
  768. package/dist/src/ui/components/halt-recovery-card.js.map +0 -1
  769. package/dist/src/ui/components/hero-logo.js.map +0 -1
  770. package/dist/src/ui/components/init-new-form-card.js.map +0 -1
  771. package/dist/src/ui/components/lsp-views.js.map +0 -1
  772. package/dist/src/ui/components/media-views.js.map +0 -1
  773. package/dist/src/ui/components/message-view.js.map +0 -1
  774. package/dist/src/ui/components/point-to-existing-form-card.js.map +0 -1
  775. package/dist/src/ui/components/prompt-box.js.map +0 -1
  776. package/dist/src/ui/components/role-palette.js.map +0 -1
  777. package/dist/src/ui/components/session-header.js.map +0 -1
  778. package/dist/src/ui/components/slash-inline-menu.js.map +0 -1
  779. package/dist/src/ui/components/structured-response-view.js.map +0 -1
  780. package/dist/src/ui/components/task-list-panel.js.map +0 -1
  781. package/dist/src/ui/components/tool-group.js.map +0 -1
  782. package/dist/src/ui/components/tool-result-views.js.map +0 -1
  783. package/dist/src/ui/components/use-pair-quote-buffer.js.map +0 -1
  784. package/dist/src/ui/constants.js.map +0 -1
  785. package/dist/src/ui/hooks/use-agent-editor.js.map +0 -1
  786. package/dist/src/ui/hooks/use-mcp-editor.js.map +0 -1
  787. package/dist/src/ui/hooks/use-model-picker.js.map +0 -1
  788. package/dist/src/ui/hooks/useTypeahead.js.map +0 -1
  789. package/dist/src/ui/markdown.js.map +0 -1
  790. package/dist/src/ui/mcp-modal-types.js.map +0 -1
  791. package/dist/src/ui/mcp-modal.js.map +0 -1
  792. package/dist/src/ui/modals/api-key-modal.js.map +0 -1
  793. package/dist/src/ui/modals/connect-modal.js.map +0 -1
  794. package/dist/src/ui/modals/model-picker-modal.js.map +0 -1
  795. package/dist/src/ui/modals/sandbox-picker-modal.js.map +0 -1
  796. package/dist/src/ui/modals/update-modal.js.map +0 -1
  797. package/dist/src/ui/modals/wallet-picker-modal.js.map +0 -1
  798. package/dist/src/ui/picker-providers.js.map +0 -1
  799. package/dist/src/ui/plan.js.map +0 -1
  800. package/dist/src/ui/schedule-modal.js.map +0 -1
  801. package/dist/src/ui/slash/__tests__/clear.test.js.map +0 -1
  802. package/dist/src/ui/slash/__tests__/compact.test.js.map +0 -1
  803. package/dist/src/ui/slash/__tests__/cost.test.js.map +0 -1
  804. package/dist/src/ui/slash/__tests__/discuss.test.js.map +0 -1
  805. package/dist/src/ui/slash/__tests__/execute.test.js.map +0 -1
  806. package/dist/src/ui/slash/__tests__/expand.test.js.map +0 -1
  807. package/dist/src/ui/slash/__tests__/ideal.test.js.map +0 -1
  808. package/dist/src/ui/slash/__tests__/menu-parity.test.js.map +0 -1
  809. package/dist/src/ui/slash/__tests__/optimize.test.js.map +0 -1
  810. package/dist/src/ui/slash/__tests__/pin.test.js.map +0 -1
  811. package/dist/src/ui/slash/__tests__/plan.test.js.map +0 -1
  812. package/dist/src/ui/slash/__tests__/status-render.test.js.map +0 -1
  813. package/dist/src/ui/slash/clear.js.map +0 -1
  814. package/dist/src/ui/slash/compact.js.map +0 -1
  815. package/dist/src/ui/slash/cost.js.map +0 -1
  816. package/dist/src/ui/slash/council-inspect.js.map +0 -1
  817. package/dist/src/ui/slash/council.js.map +0 -1
  818. package/dist/src/ui/slash/debug.js.map +0 -1
  819. package/dist/src/ui/slash/discuss.js.map +0 -1
  820. package/dist/src/ui/slash/ee.js.map +0 -1
  821. package/dist/src/ui/slash/execute.js.map +0 -1
  822. package/dist/src/ui/slash/expand.js.map +0 -1
  823. package/dist/src/ui/slash/export.js.map +0 -1
  824. package/dist/src/ui/slash/ideal.js.map +0 -1
  825. package/dist/src/ui/slash/menu-items.js.map +0 -1
  826. package/dist/src/ui/slash/optimize.js.map +0 -1
  827. package/dist/src/ui/slash/pin.js.map +0 -1
  828. package/dist/src/ui/slash/plan.js.map +0 -1
  829. package/dist/src/ui/slash/registry.js.map +0 -1
  830. package/dist/src/ui/slash/route.js.map +0 -1
  831. package/dist/src/ui/slash/route.test.js.map +0 -1
  832. package/dist/src/ui/slash/status.js.map +0 -1
  833. package/dist/src/ui/state/active-run.js.map +0 -1
  834. package/dist/src/ui/status-bar/index.js.map +0 -1
  835. package/dist/src/ui/status-bar/index.test.js.map +0 -1
  836. package/dist/src/ui/status-bar/store.js.map +0 -1
  837. package/dist/src/ui/status-bar/store.test.js.map +0 -1
  838. package/dist/src/ui/status-bar/tier-badge.js.map +0 -1
  839. package/dist/src/ui/status-bar/tier-badge.test.js.map +0 -1
  840. package/dist/src/ui/status-bar/usd-meter.js.map +0 -1
  841. package/dist/src/ui/status-bar/usd-meter.test.js.map +0 -1
  842. package/dist/src/ui/syntax-highlight.js.map +0 -1
  843. package/dist/src/ui/terminal-selection-text.js.map +0 -1
  844. package/dist/src/ui/theme.js.map +0 -1
  845. package/dist/src/ui/types.js.map +0 -1
  846. package/dist/src/ui/utils/__tests__/format.test.js.map +0 -1
  847. package/dist/src/ui/utils/__tests__/tools.test.js.map +0 -1
  848. package/dist/src/ui/utils/color.js.map +0 -1
  849. package/dist/src/ui/utils/format.js.map +0 -1
  850. package/dist/src/ui/utils/modal.js.map +0 -1
  851. package/dist/src/ui/utils/text.js.map +0 -1
  852. package/dist/src/ui/utils/tools.js.map +0 -1
  853. package/dist/src/usage/__tests__/product-ledger.test.js.map +0 -1
  854. package/dist/src/usage/cost-log.js.map +0 -1
  855. package/dist/src/usage/decision-log.js.map +0 -1
  856. package/dist/src/usage/downgrade.js.map +0 -1
  857. package/dist/src/usage/downgrade.test.js.map +0 -1
  858. package/dist/src/usage/estimator.js.map +0 -1
  859. package/dist/src/usage/estimator.test.js.map +0 -1
  860. package/dist/src/usage/ledger.js.map +0 -1
  861. package/dist/src/usage/ledger.test.js.map +0 -1
  862. package/dist/src/usage/midstream.js.map +0 -1
  863. package/dist/src/usage/midstream.test.js.map +0 -1
  864. package/dist/src/usage/product-ledger.js.map +0 -1
  865. package/dist/src/usage/thresholds.js.map +0 -1
  866. package/dist/src/usage/thresholds.test.js.map +0 -1
  867. package/dist/src/usage/types.js.map +0 -1
  868. package/dist/src/utils/__tests__/auto-council-settings.test.js.map +0 -1
  869. package/dist/src/utils/__tests__/ee-logger.test.js.map +0 -1
  870. package/dist/src/utils/__tests__/file-lock.test.js.map +0 -1
  871. package/dist/src/utils/__tests__/llm-deadline.test.js.map +0 -1
  872. package/dist/src/utils/__tests__/rate-limit.test.js.map +0 -1
  873. package/dist/src/utils/__tests__/settings-disabled-models.test.js.map +0 -1
  874. package/dist/src/utils/__tests__/settings-web-research.test.js.map +0 -1
  875. package/dist/src/utils/__tests__/slugify.test.js.map +0 -1
  876. package/dist/src/utils/__tests__/visible-retry.test.js.map +0 -1
  877. package/dist/src/utils/at-mentions.js.map +0 -1
  878. package/dist/src/utils/clipboard-image.js.map +0 -1
  879. package/dist/src/utils/ee-logger.js.map +0 -1
  880. package/dist/src/utils/file-index.js.map +0 -1
  881. package/dist/src/utils/file-lock.js.map +0 -1
  882. package/dist/src/utils/git-root.js.map +0 -1
  883. package/dist/src/utils/host-clipboard.js.map +0 -1
  884. package/dist/src/utils/install-manager.js.map +0 -1
  885. package/dist/src/utils/install-manager.test.js.map +0 -1
  886. package/dist/src/utils/instructions.js.map +0 -1
  887. package/dist/src/utils/instructions.test.js.map +0 -1
  888. package/dist/src/utils/llm-deadline.js.map +0 -1
  889. package/dist/src/utils/permission-mode.js.map +0 -1
  890. package/dist/src/utils/permission-mode.test.js.map +0 -1
  891. package/dist/src/utils/rate-limit.js.map +0 -1
  892. package/dist/src/utils/redactor.js.map +0 -1
  893. package/dist/src/utils/redactor.test.js.map +0 -1
  894. package/dist/src/utils/settings.js.map +0 -1
  895. package/dist/src/utils/settings.test.js.map +0 -1
  896. package/dist/src/utils/shell.js.map +0 -1
  897. package/dist/src/utils/shell.test.js.map +0 -1
  898. package/dist/src/utils/side-question.js.map +0 -1
  899. package/dist/src/utils/skills.js.map +0 -1
  900. package/dist/src/utils/skills.test.js.map +0 -1
  901. package/dist/src/utils/slugify.js.map +0 -1
  902. package/dist/src/utils/subagent-display.js.map +0 -1
  903. package/dist/src/utils/subagent-display.test.js.map +0 -1
  904. package/dist/src/utils/subagents-settings.test.js.map +0 -1
  905. package/dist/src/utils/telegram-audio-settings.test.js.map +0 -1
  906. package/dist/src/utils/update-checker.js.map +0 -1
  907. package/dist/src/utils/update-checker.test.js.map +0 -1
  908. package/dist/src/utils/visible-retry.js.map +0 -1
  909. package/dist/src/verify/__tests__/coverage-parsers.test.js.map +0 -1
  910. package/dist/src/verify/__tests__/dotnet-recipe.test.js.map +0 -1
  911. package/dist/src/verify/checkpoint.js.map +0 -1
  912. package/dist/src/verify/checkpoint.test.js.map +0 -1
  913. package/dist/src/verify/coverage-parsers.js.map +0 -1
  914. package/dist/src/verify/entrypoint.js.map +0 -1
  915. package/dist/src/verify/entrypoint.test.js.map +0 -1
  916. package/dist/src/verify/environment.js.map +0 -1
  917. package/dist/src/verify/environment.test.js.map +0 -1
  918. package/dist/src/verify/evidence.js.map +0 -1
  919. package/dist/src/verify/orchestrator.js.map +0 -1
  920. package/dist/src/verify/orchestrator.test.js.map +0 -1
  921. package/dist/src/verify/recipes.js.map +0 -1
  922. package/dist/src/verify/retry.js.map +0 -1
  923. package/dist/src/verify/runtime-prep.test.js.map +0 -1
  924. package/src/__test-helpers__/catalog-fixtures.ts +0 -57
  925. package/src/__test-stubs__/ee-server.ts +0 -173
  926. package/src/__test-stubs__/vitest-setup.ts +0 -36
  927. package/src/__tests__/council/bubble-layout.test.ts +0 -45
  928. package/src/__tests__/council/code-block-truncate.test.ts +0 -50
  929. package/src/__tests__/council/role-palette.test.ts +0 -66
  930. package/src/__tests__/first-run-wizard.test.ts +0 -9
  931. package/src/agent-harness/__tests__/cli-flags.spec.ts +0 -35
  932. package/src/agent-harness/__tests__/driver.spec.ts +0 -154
  933. package/src/agent-harness/__tests__/idle.spec.ts +0 -90
  934. package/src/agent-harness/__tests__/mock-llm.spec.ts +0 -126
  935. package/src/agent-harness/__tests__/mock-model.spec.ts +0 -195
  936. package/src/agent-harness/__tests__/predicate.spec.ts +0 -33
  937. package/src/agent-harness/__tests__/protocol.spec.ts +0 -62
  938. package/src/agent-harness/__tests__/schema.spec.ts +0 -81
  939. package/src/agent-harness/__tests__/selector.spec.ts +0 -82
  940. package/src/agent-harness/__tests__/sidechannel.spec.ts +0 -40
  941. package/src/agent-harness/__tests__/spec-helpers.spec.ts +0 -76
  942. package/src/agent-harness/index.ts +0 -24
  943. package/src/agent-harness/mock-model.ts +0 -445
  944. package/src/agent-harness/test-spawn.ts +0 -221
  945. package/src/billing/index.ts +0 -5
  946. package/src/bun-sqlite.d.ts +0 -15
  947. package/src/chat/__tests__/broadcast-bus.test.ts +0 -90
  948. package/src/chat/__tests__/channel-manager.test.ts +0 -149
  949. package/src/chat/__tests__/client.test.ts +0 -118
  950. package/src/chat/__tests__/discord-integration.test.ts +0 -162
  951. package/src/chat/__tests__/intent-prompt.test.ts +0 -92
  952. package/src/chat/__tests__/verdict-resolver.test.ts +0 -336
  953. package/src/chat/broadcast-bus.ts +0 -53
  954. package/src/chat/channel-manager.ts +0 -146
  955. package/src/chat/chat-keychain.ts +0 -137
  956. package/src/chat/factory.ts +0 -37
  957. package/src/chat/intent-prompt.ts +0 -72
  958. package/src/chat/providers/discord/client.ts +0 -91
  959. package/src/chat/types.ts +0 -42
  960. package/src/chat/verdict-constants.ts +0 -26
  961. package/src/chat/verdict-resolver.ts +0 -231
  962. package/src/cli/__tests__/bw-vault.test.ts +0 -97
  963. package/src/cli/__tests__/keys-bundle.test.ts +0 -46
  964. package/src/cli/__tests__/share-cmd.test.ts +0 -197
  965. package/src/cli/bw-vault.ts +0 -184
  966. package/src/cli/config/__tests__/model-picker.test.ts +0 -59
  967. package/src/cli/config/__tests__/provider-fetch.test.ts +0 -38
  968. package/src/cli/config/index.ts +0 -112
  969. package/src/cli/config/model-picker.ts +0 -193
  970. package/src/cli/config/provider-fetch.ts +0 -75
  971. package/src/cli/config/screen-council.ts +0 -245
  972. package/src/cli/config/screen-models.ts +0 -104
  973. package/src/cli/config/screen-providers.ts +0 -197
  974. package/src/cli/config/tui.ts +0 -153
  975. package/src/cli/cost-forensics.test.ts +0 -273
  976. package/src/cli/cost-forensics.ts +0 -337
  977. package/src/cli/keys-bundle.ts +0 -91
  978. package/src/cli/keys.test.ts +0 -104
  979. package/src/cli/keys.ts +0 -816
  980. package/src/cli/pil-report.ts +0 -202
  981. package/src/cli/reporter-cmd.ts +0 -154
  982. package/src/cli/share-cmd.ts +0 -132
  983. package/src/cli/usage-report.ts +0 -398
  984. package/src/cloud/index.ts +0 -5
  985. package/src/council/__tests__/accounting.test.ts +0 -72
  986. package/src/council/__tests__/audit-replay.test.ts +0 -344
  987. package/src/council/__tests__/clarifier-max-rounds.test.ts +0 -90
  988. package/src/council/__tests__/clarifier-options.test.ts +0 -63
  989. package/src/council/__tests__/clarifier-ready-gate.test.ts +0 -268
  990. package/src/council/__tests__/cost-aware.test.ts +0 -60
  991. package/src/council/__tests__/debate-planner-structured.test.ts +0 -236
  992. package/src/council/__tests__/decisions-lock.test.ts +0 -404
  993. package/src/council/__tests__/evaluator-metrics.test.ts +0 -513
  994. package/src/council/__tests__/parse-outcome-fallback.test.ts +0 -125
  995. package/src/council/__tests__/research-tools.test.ts +0 -239
  996. package/src/council/__tests__/round-tools.test.ts +0 -334
  997. package/src/council/__tests__/tool-trace.test.ts +0 -152
  998. package/src/council/__tests__/types-contract.test.ts +0 -88
  999. package/src/council/clarifier.ts +0 -507
  1000. package/src/council/context.ts +0 -249
  1001. package/src/council/debate-planner.ts +0 -303
  1002. package/src/council/debate.ts +0 -1179
  1003. package/src/council/decisions-lock.ts +0 -312
  1004. package/src/council/executor.ts +0 -27
  1005. package/src/council/index.ts +0 -956
  1006. package/src/council/leader.ts +0 -281
  1007. package/src/council/llm.ts +0 -939
  1008. package/src/council/phase-events.ts +0 -64
  1009. package/src/council/planner.ts +0 -303
  1010. package/src/council/preflight.ts +0 -86
  1011. package/src/council/prompts.ts +0 -698
  1012. package/src/council/types.ts +0 -304
  1013. package/src/daemon/scheduler.test.ts +0 -128
  1014. package/src/daemon/scheduler.ts +0 -152
  1015. package/src/ee/.gitkeep +0 -0
  1016. package/src/ee/__tests__/bb-design.test.ts +0 -223
  1017. package/src/ee/__tests__/export-transcripts.test.ts +0 -222
  1018. package/src/ee/__tests__/pil-context-bridge.test.ts +0 -59
  1019. package/src/ee/__tests__/pipeline.integration.test.ts +0 -193
  1020. package/src/ee/__tests__/recall-format.test.ts +0 -66
  1021. package/src/ee/__tests__/recall-ledger.test.ts +0 -55
  1022. package/src/ee/__tests__/render-sink-wiring.test.ts +0 -89
  1023. package/src/ee/auth.test.ts +0 -76
  1024. package/src/ee/auth.ts +0 -80
  1025. package/src/ee/bb-design.ts +0 -284
  1026. package/src/ee/bb-retrieval.ts +0 -467
  1027. package/src/ee/bridge.test.ts +0 -283
  1028. package/src/ee/bridge.ts +0 -443
  1029. package/src/ee/client-mode.ts +0 -161
  1030. package/src/ee/client.test.ts +0 -201
  1031. package/src/ee/client.ts +0 -683
  1032. package/src/ee/council-bridge.ts +0 -89
  1033. package/src/ee/embedding-cache.ts +0 -42
  1034. package/src/ee/export-transcripts.ts +0 -160
  1035. package/src/ee/extract-session.test.ts +0 -231
  1036. package/src/ee/extract-session.ts +0 -71
  1037. package/src/ee/health.ts +0 -83
  1038. package/src/ee/index.ts +0 -33
  1039. package/src/ee/intercept.test.ts +0 -197
  1040. package/src/ee/intercept.ts +0 -168
  1041. package/src/ee/judge.test.ts +0 -213
  1042. package/src/ee/judge.ts +0 -126
  1043. package/src/ee/mistake-detector.test.ts +0 -252
  1044. package/src/ee/mistake-detector.ts +0 -297
  1045. package/src/ee/offline-queue.test.ts +0 -302
  1046. package/src/ee/offline-queue.ts +0 -205
  1047. package/src/ee/phase-outcome.test.ts +0 -107
  1048. package/src/ee/phase-outcome.ts +0 -165
  1049. package/src/ee/phase-tracker.test.ts +0 -175
  1050. package/src/ee/phase-tracker.ts +0 -180
  1051. package/src/ee/posttool.test.ts +0 -81
  1052. package/src/ee/posttool.ts +0 -16
  1053. package/src/ee/prompt-stale.test.ts +0 -92
  1054. package/src/ee/prompt-stale.ts +0 -39
  1055. package/src/ee/recall-ledger.ts +0 -71
  1056. package/src/ee/recall-mirror.test.ts +0 -74
  1057. package/src/ee/render.test.ts +0 -74
  1058. package/src/ee/render.ts +0 -68
  1059. package/src/ee/scope.test.ts +0 -112
  1060. package/src/ee/scope.ts +0 -93
  1061. package/src/ee/search.ts +0 -259
  1062. package/src/ee/session-trajectory.test.ts +0 -139
  1063. package/src/ee/session-trajectory.ts +0 -226
  1064. package/src/ee/tenant.ts +0 -14
  1065. package/src/ee/touch.test.ts +0 -73
  1066. package/src/ee/transcript-emit.ts +0 -174
  1067. package/src/ee/types.ts +0 -432
  1068. package/src/flow/.gitkeep +0 -0
  1069. package/src/flow/__tests__/migration.test.ts +0 -133
  1070. package/src/flow/__tests__/parser.test.ts +0 -77
  1071. package/src/flow/__tests__/run-manager-product.test.ts +0 -59
  1072. package/src/flow/__tests__/run-manager.test.ts +0 -95
  1073. package/src/flow/__tests__/scaffold-checkpoint.test.ts +0 -113
  1074. package/src/flow/__tests__/scaffold.test.ts +0 -57
  1075. package/src/flow/__tests__/warning-persist.test.ts +0 -112
  1076. package/src/flow/artifact-io.ts +0 -41
  1077. package/src/flow/compaction/__tests__/compress.test.ts +0 -69
  1078. package/src/flow/compaction/__tests__/extract.test.ts +0 -74
  1079. package/src/flow/compaction/__tests__/preserve.test.ts +0 -69
  1080. package/src/flow/compaction/compress.ts +0 -67
  1081. package/src/flow/compaction/extract.ts +0 -60
  1082. package/src/flow/compaction/index.ts +0 -86
  1083. package/src/flow/compaction/preserve.ts +0 -48
  1084. package/src/flow/index.ts +0 -18
  1085. package/src/flow/migration.ts +0 -139
  1086. package/src/flow/parser.ts +0 -78
  1087. package/src/flow/run-manager.ts +0 -162
  1088. package/src/flow/scaffold-checkpoint.ts +0 -132
  1089. package/src/flow/scaffold.ts +0 -52
  1090. package/src/flow/warning-persist.ts +0 -84
  1091. package/src/generated/version.ts +0 -5
  1092. package/src/gsd/.gitkeep +0 -0
  1093. package/src/gsd/__tests__/complexity.test.ts +0 -0
  1094. package/src/gsd/__tests__/directives.test.ts +0 -88
  1095. package/src/gsd/__tests__/gray-areas.test.ts +0 -33
  1096. package/src/gsd/__tests__/types.test.ts +0 -91
  1097. package/src/gsd/complexity.ts +0 -124
  1098. package/src/gsd/directives.ts +0 -141
  1099. package/src/gsd/gray-areas.ts +0 -144
  1100. package/src/gsd/index.ts +0 -1
  1101. package/src/gsd/types.ts +0 -63
  1102. package/src/headless/__tests__/council-answers.test.ts +0 -300
  1103. package/src/headless/council-answers.ts +0 -152
  1104. package/src/headless/output.test.ts +0 -201
  1105. package/src/headless/output.ts +0 -312
  1106. package/src/hooks/config.ts +0 -41
  1107. package/src/hooks/index.ts +0 -569
  1108. package/src/hooks/types.ts +0 -263
  1109. package/src/index.ts +0 -1762
  1110. package/src/lsp/builtins.test.ts +0 -129
  1111. package/src/lsp/builtins.ts +0 -453
  1112. package/src/lsp/client.ts +0 -342
  1113. package/src/lsp/manager.test.ts +0 -198
  1114. package/src/lsp/manager.ts +0 -343
  1115. package/src/lsp/npm-cache.test.ts +0 -70
  1116. package/src/lsp/npm-cache.ts +0 -111
  1117. package/src/lsp/runtime.ts +0 -70
  1118. package/src/lsp/smoke.test.ts +0 -74
  1119. package/src/lsp/types.ts +0 -119
  1120. package/src/maintain/__tests__/codebase-intel.test.ts +0 -320
  1121. package/src/maintain/__tests__/gh-create-pr.test.ts +0 -195
  1122. package/src/maintain/__tests__/pr-builder.test.ts +0 -282
  1123. package/src/maintain/__tests__/repo-map.test.ts +0 -128
  1124. package/src/maintain/__tests__/task-runner.test.ts +0 -347
  1125. package/src/maintain/codebase-intel.ts +0 -595
  1126. package/src/maintain/gh-create-pr.ts +0 -148
  1127. package/src/maintain/index.ts +0 -14
  1128. package/src/maintain/pr-builder.ts +0 -373
  1129. package/src/maintain/repo-map.ts +0 -205
  1130. package/src/maintain/task-runner.ts +0 -481
  1131. package/src/maintain/types.ts +0 -49
  1132. package/src/mcp/__tests__/auto-setup.test.ts +0 -88
  1133. package/src/mcp/__tests__/cap-tool-result.test.ts +0 -65
  1134. package/src/mcp/__tests__/ee-tools.test.ts +0 -248
  1135. package/src/mcp/__tests__/forensics-tools.test.ts +0 -66
  1136. package/src/mcp/__tests__/harness-driver-action-tools.spec.ts +0 -116
  1137. package/src/mcp/__tests__/harness-driver-async-tools.spec.ts +0 -129
  1138. package/src/mcp/__tests__/harness-driver-read-tools.spec.ts +0 -140
  1139. package/src/mcp/__tests__/harness-driver-security.spec.ts +0 -69
  1140. package/src/mcp/__tests__/harness-driver.spec.ts +0 -21
  1141. package/src/mcp/__tests__/lazy-schema.spec.ts +0 -173
  1142. package/src/mcp/__tests__/lsp-tools.test.ts +0 -72
  1143. package/src/mcp/__tests__/mcp-keychain.test.ts +0 -46
  1144. package/src/mcp/__tests__/research-onboarding.test.ts +0 -163
  1145. package/src/mcp/__tests__/runtime-hydration.test.ts +0 -86
  1146. package/src/mcp/__tests__/runtime-output-cap.test.ts +0 -49
  1147. package/src/mcp/__tests__/runtime-sanitize.test.ts +0 -44
  1148. package/src/mcp/__tests__/self-verify-jobs.test.ts +0 -102
  1149. package/src/mcp/__tests__/smart-filter.test.ts +0 -139
  1150. package/src/mcp/__tests__/tools-server.smoke.test.ts +0 -41
  1151. package/src/mcp/auto-setup.ts +0 -99
  1152. package/src/mcp/cap-tool-result.ts +0 -68
  1153. package/src/mcp/catalog.ts +0 -155
  1154. package/src/mcp/ee-tools.ts +0 -204
  1155. package/src/mcp/forensics-tools.ts +0 -65
  1156. package/src/mcp/lsp-tools.ts +0 -78
  1157. package/src/mcp/mcp-keychain.ts +0 -85
  1158. package/src/mcp/oauth-callback.ts +0 -75
  1159. package/src/mcp/oauth-provider.ts +0 -128
  1160. package/src/mcp/opentui-spawn.ts +0 -64
  1161. package/src/mcp/parse-headers.test.ts +0 -54
  1162. package/src/mcp/parse-headers.ts +0 -35
  1163. package/src/mcp/research-onboarding.ts +0 -143
  1164. package/src/mcp/runtime.ts +0 -182
  1165. package/src/mcp/self-verify-jobs.ts +0 -137
  1166. package/src/mcp/smart-filter.ts +0 -138
  1167. package/src/mcp/smoke.test.ts +0 -170
  1168. package/src/mcp/tools-server.ts +0 -174
  1169. package/src/mcp/validate.ts +0 -48
  1170. package/src/models/__tests__/registry.test.ts +0 -95
  1171. package/src/models/catalog-client.ts +0 -234
  1172. package/src/models/catalog-gemini.test.ts +0 -52
  1173. package/src/models/catalog-url.test.ts +0 -27
  1174. package/src/models/catalog-validation.test.ts +0 -74
  1175. package/src/models/catalog.README.md +0 -136
  1176. package/src/models/catalog.json +0 -349
  1177. package/src/models/classify-tier.ts +0 -48
  1178. package/src/models/index.ts +0 -9
  1179. package/src/models/registry.ts +0 -87
  1180. package/src/ops/__tests__/doctor-council-mcp.test.ts +0 -161
  1181. package/src/ops/__tests__/doctor-ee-health.test.ts +0 -129
  1182. package/src/ops/bug-report.test.ts +0 -172
  1183. package/src/ops/bug-report.ts +0 -80
  1184. package/src/ops/doctor.test.ts +0 -108
  1185. package/src/ops/doctor.ts +0 -366
  1186. package/src/orchestrator/__tests__/agent-base-url-switch.test.ts +0 -87
  1187. package/src/orchestrator/__tests__/batch-turn-runner.test.ts +0 -186
  1188. package/src/orchestrator/__tests__/council-manager.test.ts +0 -171
  1189. package/src/orchestrator/__tests__/cross-turn-dedup.test.ts +0 -201
  1190. package/src/orchestrator/__tests__/current-call-id.test.ts +0 -160
  1191. package/src/orchestrator/__tests__/error-forensics.test.ts +0 -99
  1192. package/src/orchestrator/__tests__/flow-resume.test.ts +0 -71
  1193. package/src/orchestrator/__tests__/humanize-api-error.test.ts +0 -74
  1194. package/src/orchestrator/__tests__/message-processor.test.ts +0 -201
  1195. package/src/orchestrator/__tests__/message-write-ahead.test.ts +0 -170
  1196. package/src/orchestrator/__tests__/read-path-budget.test.ts +0 -170
  1197. package/src/orchestrator/__tests__/retry-classifier.test.ts +0 -131
  1198. package/src/orchestrator/__tests__/retry-stream.test.ts +0 -186
  1199. package/src/orchestrator/__tests__/route-feedback.test.ts +0 -55
  1200. package/src/orchestrator/__tests__/stream-runner.test.ts +0 -201
  1201. package/src/orchestrator/__tests__/sub-agent-model-tier.test.ts +0 -53
  1202. package/src/orchestrator/__tests__/usage-events-shape.test.ts +0 -80
  1203. package/src/orchestrator/__tests__/usage-normalizer-c1.test.ts +0 -172
  1204. package/src/orchestrator/__tests__/usage-shape-threading.test.ts +0 -111
  1205. package/src/orchestrator/__tests__/write-ahead.test.ts +0 -162
  1206. package/src/orchestrator/abort.test.ts +0 -37
  1207. package/src/orchestrator/abort.ts +0 -51
  1208. package/src/orchestrator/agent-options.ts +0 -167
  1209. package/src/orchestrator/agent.test.ts +0 -191
  1210. package/src/orchestrator/batch-turn-runner.ts +0 -425
  1211. package/src/orchestrator/batch-utils.ts +0 -340
  1212. package/src/orchestrator/cleanup.test.ts +0 -86
  1213. package/src/orchestrator/compaction.test.ts +0 -200
  1214. package/src/orchestrator/compaction.ts +0 -626
  1215. package/src/orchestrator/council-manager.ts +0 -572
  1216. package/src/orchestrator/cross-turn-dedup.ts +0 -208
  1217. package/src/orchestrator/delegations.test.ts +0 -145
  1218. package/src/orchestrator/delegations.ts +0 -370
  1219. package/src/orchestrator/error-utils.ts +0 -165
  1220. package/src/orchestrator/flow-resume.ts +0 -54
  1221. package/src/orchestrator/grounding-check.test.ts +0 -111
  1222. package/src/orchestrator/grounding-check.ts +0 -138
  1223. package/src/orchestrator/interrupted-turn.test.ts +0 -39
  1224. package/src/orchestrator/interrupted-turn.ts +0 -27
  1225. package/src/orchestrator/message-processor.ts +0 -3364
  1226. package/src/orchestrator/message-seq.test.ts +0 -29
  1227. package/src/orchestrator/message-seq.ts +0 -19
  1228. package/src/orchestrator/orchestrator.ts +0 -2752
  1229. package/src/orchestrator/pending-calls.test.ts +0 -226
  1230. package/src/orchestrator/pending-calls.ts +0 -240
  1231. package/src/orchestrator/prompts.ts +0 -579
  1232. package/src/orchestrator/provider-options-shape.spec.ts +0 -67
  1233. package/src/orchestrator/provider-options-shape.ts +0 -70
  1234. package/src/orchestrator/read-path-budget.ts +0 -205
  1235. package/src/orchestrator/reasoning.test.ts +0 -114
  1236. package/src/orchestrator/reasoning.ts +0 -116
  1237. package/src/orchestrator/repair-tool-call.ts +0 -54
  1238. package/src/orchestrator/repetition-detector.test.ts +0 -127
  1239. package/src/orchestrator/repetition-detector.ts +0 -140
  1240. package/src/orchestrator/retry-classifier.ts +0 -140
  1241. package/src/orchestrator/retry-stream.ts +0 -159
  1242. package/src/orchestrator/sandbox.test.ts +0 -117
  1243. package/src/orchestrator/scope-ceiling.test.ts +0 -215
  1244. package/src/orchestrator/scope-ceiling.ts +0 -234
  1245. package/src/orchestrator/scope-reminder.test.ts +0 -232
  1246. package/src/orchestrator/scope-reminder.ts +0 -230
  1247. package/src/orchestrator/stall-rescue.test.ts +0 -100
  1248. package/src/orchestrator/stall-rescue.ts +0 -95
  1249. package/src/orchestrator/stall-watchdog.test.ts +0 -83
  1250. package/src/orchestrator/stall-watchdog.ts +0 -87
  1251. package/src/orchestrator/stream-runner.ts +0 -939
  1252. package/src/orchestrator/sub-agent-cap.test.ts +0 -227
  1253. package/src/orchestrator/sub-agent-cap.ts +0 -240
  1254. package/src/orchestrator/sub-agent-model-tier.ts +0 -58
  1255. package/src/orchestrator/subagent-compactor.spec.ts +0 -332
  1256. package/src/orchestrator/subagent-compactor.ts +0 -456
  1257. package/src/orchestrator/text-tool-call-detector.test.ts +0 -99
  1258. package/src/orchestrator/text-tool-call-detector.ts +0 -200
  1259. package/src/orchestrator/token-counter.test.ts +0 -69
  1260. package/src/orchestrator/token-counter.ts +0 -81
  1261. package/src/orchestrator/tool-args-hash.test.ts +0 -121
  1262. package/src/orchestrator/tool-args-hash.ts +0 -221
  1263. package/src/orchestrator/tool-args-repair.test.ts +0 -156
  1264. package/src/orchestrator/tool-args-repair.ts +0 -227
  1265. package/src/orchestrator/tool-loop-cap.test.ts +0 -193
  1266. package/src/orchestrator/tool-loop-cap.ts +0 -174
  1267. package/src/orchestrator/tool-repetition-detector.test.ts +0 -119
  1268. package/src/orchestrator/tool-repetition-detector.ts +0 -0
  1269. package/src/orchestrator/tool-utils.ts +0 -214
  1270. package/src/orchestrator/turn-runner-deps.ts +0 -85
  1271. package/src/pil/__tests__/budget.test.ts +0 -39
  1272. package/src/pil/__tests__/clarity-gate.test.ts +0 -299
  1273. package/src/pil/__tests__/config.test.ts +0 -78
  1274. package/src/pil/__tests__/discovery-cache.test.ts +0 -45
  1275. package/src/pil/__tests__/discovery-types.test.ts +0 -68
  1276. package/src/pil/__tests__/discovery.test.ts +0 -141
  1277. package/src/pil/__tests__/dual-run.test.ts +0 -53
  1278. package/src/pil/__tests__/layer1-intent-trace.test.ts +0 -142
  1279. package/src/pil/__tests__/layer1-intent.test.ts +0 -365
  1280. package/src/pil/__tests__/layer15-context-scan.test.ts +0 -76
  1281. package/src/pil/__tests__/layer16-clarity.test.ts +0 -184
  1282. package/src/pil/__tests__/layer17-feasibility.test.ts +0 -42
  1283. package/src/pil/__tests__/layer18-acceptance.test.ts +0 -116
  1284. package/src/pil/__tests__/layer2-personality.test.ts +0 -63
  1285. package/src/pil/__tests__/layer3-ee-injection.test.ts +0 -189
  1286. package/src/pil/__tests__/layer3-injected-chunk.test.ts +0 -122
  1287. package/src/pil/__tests__/layer4-gsd.test.ts +0 -109
  1288. package/src/pil/__tests__/layer5-context.test.ts +0 -157
  1289. package/src/pil/__tests__/layer6-output.test.ts +0 -362
  1290. package/src/pil/__tests__/llm-classify.test.ts +0 -140
  1291. package/src/pil/__tests__/native-capabilities-workbook.test.ts +0 -45
  1292. package/src/pil/__tests__/ollama-classify.test.ts +0 -81
  1293. package/src/pil/__tests__/orchestrator-integration.test.ts +0 -107
  1294. package/src/pil/__tests__/pipeline.test.ts +0 -191
  1295. package/src/pil/__tests__/renderer-coverage.test.ts +0 -46
  1296. package/src/pil/__tests__/response-tools.test.ts +0 -239
  1297. package/src/pil/__tests__/schema.test.ts +0 -233
  1298. package/src/pil/__tests__/scoreComplexity.test.ts +0 -134
  1299. package/src/pil/__tests__/scoreSufficiency.test.ts +0 -104
  1300. package/src/pil/__tests__/store.test.ts +0 -49
  1301. package/src/pil/__tests__/task-tier-map.test.ts +0 -41
  1302. package/src/pil/agent-operating-contract.test.ts +0 -84
  1303. package/src/pil/agent-operating-contract.ts +0 -70
  1304. package/src/pil/budget-log.ts +0 -86
  1305. package/src/pil/budget.ts +0 -18
  1306. package/src/pil/cheap-model-playbook.test.ts +0 -191
  1307. package/src/pil/cheap-model-playbook.ts +0 -153
  1308. package/src/pil/cheap-model-workbooks.test.ts +0 -154
  1309. package/src/pil/cheap-model-workbooks.ts +0 -109
  1310. package/src/pil/clarity-gate.ts +0 -188
  1311. package/src/pil/config.ts +0 -25
  1312. package/src/pil/discovery-cache.ts +0 -20
  1313. package/src/pil/discovery-types.ts +0 -97
  1314. package/src/pil/discovery.ts +0 -397
  1315. package/src/pil/index.ts +0 -24
  1316. package/src/pil/layer1-intent.test.ts +0 -520
  1317. package/src/pil/layer1-intent.ts +0 -1236
  1318. package/src/pil/layer15-context-scan.ts +0 -159
  1319. package/src/pil/layer16-clarity.test.ts +0 -35
  1320. package/src/pil/layer16-clarity.ts +0 -417
  1321. package/src/pil/layer17-feasibility.ts +0 -40
  1322. package/src/pil/layer18-acceptance.ts +0 -98
  1323. package/src/pil/layer1_5-complexity-size.test.ts +0 -279
  1324. package/src/pil/layer1_5-complexity-size.ts +0 -175
  1325. package/src/pil/layer2-personality.ts +0 -46
  1326. package/src/pil/layer3-ee-injection.ts +0 -406
  1327. package/src/pil/layer4-gsd.ts +0 -124
  1328. package/src/pil/layer5-context.ts +0 -171
  1329. package/src/pil/layer6-output.ts +0 -364
  1330. package/src/pil/llm-classify.ts +0 -199
  1331. package/src/pil/native-capabilities-workbook.ts +0 -124
  1332. package/src/pil/ollama-classify.ts +0 -49
  1333. package/src/pil/pipeline.ts +0 -313
  1334. package/src/pil/response-tools.ts +0 -187
  1335. package/src/pil/schema.ts +0 -111
  1336. package/src/pil/session-state.test.ts +0 -88
  1337. package/src/pil/session-state.ts +0 -157
  1338. package/src/pil/store.ts +0 -29
  1339. package/src/pil/task-tier-map.ts +0 -97
  1340. package/src/pil/timeout.ts +0 -10
  1341. package/src/pil/types.ts +0 -168
  1342. package/src/product-loop/__tests__/artifact-io.test.ts +0 -97
  1343. package/src/product-loop/__tests__/assumption-ledger.test.ts +0 -292
  1344. package/src/product-loop/__tests__/backlog-builder.test.ts +0 -200
  1345. package/src/product-loop/__tests__/backlog-store.test.ts +0 -119
  1346. package/src/product-loop/__tests__/cb2-retry-bonus.test.ts +0 -182
  1347. package/src/product-loop/__tests__/circuit-breakers-coverage.test.ts +0 -82
  1348. package/src/product-loop/__tests__/circuit-breakers.test.ts +0 -90
  1349. package/src/product-loop/__tests__/complexity-routing.spec.ts +0 -315
  1350. package/src/product-loop/__tests__/context-policy.test.ts +0 -280
  1351. package/src/product-loop/__tests__/cost-preview.test.ts +0 -118
  1352. package/src/product-loop/__tests__/cost-scoper.test.ts +0 -76
  1353. package/src/product-loop/__tests__/cross-run-memory.test.ts +0 -195
  1354. package/src/product-loop/__tests__/design-output.spec.ts +0 -39
  1355. package/src/product-loop/__tests__/discover.test.ts +0 -98
  1356. package/src/product-loop/__tests__/discovery-context-format.test.ts +0 -111
  1357. package/src/product-loop/__tests__/discovery-council-runner.test.ts +0 -13
  1358. package/src/product-loop/__tests__/discovery-detection.test.ts +0 -180
  1359. package/src/product-loop/__tests__/discovery-ecosystem.test.ts +0 -246
  1360. package/src/product-loop/__tests__/discovery-integration.test.ts +0 -133
  1361. package/src/product-loop/__tests__/discovery-interview.test.ts +0 -305
  1362. package/src/product-loop/__tests__/discovery-migrations.test.ts +0 -75
  1363. package/src/product-loop/__tests__/discovery-persistence.test.ts +0 -171
  1364. package/src/product-loop/__tests__/discovery-prompt-parser.test.ts +0 -77
  1365. package/src/product-loop/__tests__/discovery-prompt-specificity.test.ts +0 -65
  1366. package/src/product-loop/__tests__/discovery-recommender-ecosystem.test.ts +0 -192
  1367. package/src/product-loop/__tests__/discovery-recommender.test.ts +0 -382
  1368. package/src/product-loop/__tests__/discovery-schema.test.ts +0 -102
  1369. package/src/product-loop/__tests__/done-gate-coverage.test.ts +0 -151
  1370. package/src/product-loop/__tests__/done-gate.test.ts +0 -140
  1371. package/src/product-loop/__tests__/ee-extract-wiring.test.ts +0 -222
  1372. package/src/product-loop/__tests__/extract-to-ee.test.ts +0 -205
  1373. package/src/product-loop/__tests__/feedback-routing.test.ts +0 -93
  1374. package/src/product-loop/__tests__/gather-selectable-alts.test.ts +0 -119
  1375. package/src/product-loop/__tests__/hot-path.spec.ts +0 -177
  1376. package/src/product-loop/__tests__/integration.test.ts +0 -350
  1377. package/src/product-loop/__tests__/loop-driver-audit.test.ts +0 -327
  1378. package/src/product-loop/__tests__/loop-driver.test.ts +0 -253
  1379. package/src/product-loop/__tests__/maintenance-task-synthesis.test.ts +0 -78
  1380. package/src/product-loop/__tests__/phase-a1-a3-sprint-runner.test.ts +0 -315
  1381. package/src/product-loop/__tests__/phase-a2-backlog-build.test.ts +0 -189
  1382. package/src/product-loop/__tests__/phase-budget.test.ts +0 -172
  1383. package/src/product-loop/__tests__/phase-orchestrator-integration.test.ts +0 -143
  1384. package/src/product-loop/__tests__/phase-plan.test.ts +0 -241
  1385. package/src/product-loop/__tests__/phase-rituals.test.ts +0 -205
  1386. package/src/product-loop/__tests__/phase-runner.test.ts +0 -454
  1387. package/src/product-loop/__tests__/phase-tracker-bridge.test.ts +0 -85
  1388. package/src/product-loop/__tests__/pick-backend-stack.test.ts +0 -117
  1389. package/src/product-loop/__tests__/product-identity.test.ts +0 -47
  1390. package/src/product-loop/__tests__/progress-snapshot.test.ts +0 -180
  1391. package/src/product-loop/__tests__/reality-anchor.test.ts +0 -58
  1392. package/src/product-loop/__tests__/repo-audit.test.ts +0 -103
  1393. package/src/product-loop/__tests__/repo-brief.test.ts +0 -155
  1394. package/src/product-loop/__tests__/role-memory.test.ts +0 -70
  1395. package/src/product-loop/__tests__/role-registry.test.ts +0 -235
  1396. package/src/product-loop/__tests__/role-routing-ee.test.ts +0 -90
  1397. package/src/product-loop/__tests__/route-decision-emit.test.ts +0 -258
  1398. package/src/product-loop/__tests__/seed-questions.test.ts +0 -33
  1399. package/src/product-loop/__tests__/ship-polish.test.ts +0 -109
  1400. package/src/product-loop/__tests__/sprint-planner.test.ts +0 -166
  1401. package/src/product-loop/__tests__/sprint-runner-backlog.test.ts +0 -248
  1402. package/src/product-loop/__tests__/sprint-runner-emit.test.ts +0 -324
  1403. package/src/product-loop/__tests__/sprint-runner-phase-chunks.test.ts +0 -220
  1404. package/src/product-loop/__tests__/sprint-runner.test.ts +0 -501
  1405. package/src/product-loop/__tests__/sprint-self-verify.test.ts +0 -77
  1406. package/src/product-loop/__tests__/sprint-store.test.ts +0 -98
  1407. package/src/product-loop/__tests__/stakeholder-acl.test.ts +0 -94
  1408. package/src/product-loop/__tests__/state-md-ee-injections.test.ts +0 -229
  1409. package/src/product-loop/__tests__/sufficiency-routing.spec.ts +0 -183
  1410. package/src/product-loop/__tests__/typed-artifacts.test.ts +0 -259
  1411. package/src/product-loop/__tests__/types.test.ts +0 -103
  1412. package/src/product-loop/__tests__/verify-failure-threshold.test.ts +0 -178
  1413. package/src/product-loop/__tests__/verify-failure-tracking.test.ts +0 -154
  1414. package/src/product-loop/__tests__/verify-result.test.ts +0 -60
  1415. package/src/product-loop/artifact-io.ts +0 -239
  1416. package/src/product-loop/assumption-ledger.ts +0 -270
  1417. package/src/product-loop/backlog-builder.ts +0 -253
  1418. package/src/product-loop/backlog-store.ts +0 -62
  1419. package/src/product-loop/circuit-breakers.ts +0 -76
  1420. package/src/product-loop/context-policy.ts +0 -180
  1421. package/src/product-loop/cost-preview.ts +0 -139
  1422. package/src/product-loop/cost-scoper.ts +0 -49
  1423. package/src/product-loop/cross-run-memory.ts +0 -450
  1424. package/src/product-loop/design-output.ts +0 -24
  1425. package/src/product-loop/discover.ts +0 -159
  1426. package/src/product-loop/discovery-context-format.ts +0 -56
  1427. package/src/product-loop/discovery-council-runner.ts +0 -78
  1428. package/src/product-loop/discovery-detection.ts +0 -161
  1429. package/src/product-loop/discovery-ecosystem.ts +0 -239
  1430. package/src/product-loop/discovery-interview.ts +0 -288
  1431. package/src/product-loop/discovery-migrations.ts +0 -40
  1432. package/src/product-loop/discovery-persistence.ts +0 -219
  1433. package/src/product-loop/discovery-prompt-parser.ts +0 -80
  1434. package/src/product-loop/discovery-recommender.ts +0 -514
  1435. package/src/product-loop/discovery-schema.ts +0 -143
  1436. package/src/product-loop/done-gate.ts +0 -224
  1437. package/src/product-loop/feedback-routing.ts +0 -82
  1438. package/src/product-loop/gather.ts +0 -386
  1439. package/src/product-loop/index.ts +0 -1855
  1440. package/src/product-loop/loop-driver.ts +0 -900
  1441. package/src/product-loop/phase-budget.ts +0 -182
  1442. package/src/product-loop/phase-plan.ts +0 -158
  1443. package/src/product-loop/phase-rituals.ts +0 -158
  1444. package/src/product-loop/phase-runner.ts +0 -455
  1445. package/src/product-loop/phase-tracker-bridge.ts +0 -60
  1446. package/src/product-loop/product-identity.ts +0 -11
  1447. package/src/product-loop/progress-snapshot.ts +0 -216
  1448. package/src/product-loop/reality-anchor.ts +0 -45
  1449. package/src/product-loop/repo-audit.ts +0 -314
  1450. package/src/product-loop/repo-brief.ts +0 -235
  1451. package/src/product-loop/role-memory.ts +0 -72
  1452. package/src/product-loop/role-registry.ts +0 -175
  1453. package/src/product-loop/seed-questions.ts +0 -51
  1454. package/src/product-loop/ship-polish.ts +0 -164
  1455. package/src/product-loop/sprint-planner.ts +0 -241
  1456. package/src/product-loop/sprint-runner.ts +0 -801
  1457. package/src/product-loop/sprint-self-verify.ts +0 -189
  1458. package/src/product-loop/sprint-store.ts +0 -96
  1459. package/src/product-loop/stakeholder-acl.ts +0 -82
  1460. package/src/product-loop/typed-artifacts.ts +0 -332
  1461. package/src/product-loop/types.ts +0 -570
  1462. package/src/product-loop/verify-failure-tracking.ts +0 -225
  1463. package/src/product-loop/verify-result.ts +0 -39
  1464. package/src/providers/.gitkeep +0 -0
  1465. package/src/providers/__test-utils__/load-fixture.ts +0 -36
  1466. package/src/providers/__tests__/adapter-oauth-wiring.test.ts +0 -147
  1467. package/src/providers/__tests__/capabilities-cosmetic.test.ts +0 -119
  1468. package/src/providers/__tests__/capabilities-flags.test.ts +0 -166
  1469. package/src/providers/__tests__/capabilities-provider-options.test.ts +0 -232
  1470. package/src/providers/__tests__/capabilities-sanitize.test.ts +0 -66
  1471. package/src/providers/__tests__/capabilities.test.ts +0 -44
  1472. package/src/providers/__tests__/provider-coverage.test.ts +0 -48
  1473. package/src/providers/__tests__/reasoning-roundtrip.test.ts +0 -150
  1474. package/src/providers/__tests__/runtime-integration.test.ts +0 -106
  1475. package/src/providers/__tests__/runtime.test.ts +0 -94
  1476. package/src/providers/__tests__/siliconflow-sse-repair.test.ts +0 -300
  1477. package/src/providers/__tests__/strategies-registry.test.ts +0 -55
  1478. package/src/providers/__tests__/strategies-resolve.test.ts +0 -137
  1479. package/src/providers/__tests__/wire-debug.test.ts +0 -42
  1480. package/src/providers/adapter.test.ts +0 -21
  1481. package/src/providers/adapter.ts +0 -156
  1482. package/src/providers/anthropic.ts +0 -174
  1483. package/src/providers/auth/__tests__/browser-flow.test.ts +0 -230
  1484. package/src/providers/auth/__tests__/device-flow.test.ts +0 -263
  1485. package/src/providers/auth/__tests__/gemini-oauth.test.ts +0 -387
  1486. package/src/providers/auth/__tests__/grok-oauth.test.ts +0 -283
  1487. package/src/providers/auth/__tests__/openai-oauth.test.ts +0 -378
  1488. package/src/providers/auth/__tests__/token-store.test.ts +0 -152
  1489. package/src/providers/auth/browser-flow.ts +0 -140
  1490. package/src/providers/auth/device-flow.ts +0 -221
  1491. package/src/providers/auth/gemini-oauth.ts +0 -351
  1492. package/src/providers/auth/grok-oauth.ts +0 -406
  1493. package/src/providers/auth/openai-oauth.ts +0 -455
  1494. package/src/providers/auth/registry.ts +0 -138
  1495. package/src/providers/auth/token-store.ts +0 -154
  1496. package/src/providers/auth/types.ts +0 -111
  1497. package/src/providers/capabilities.ts +0 -355
  1498. package/src/providers/endpoints.ts +0 -68
  1499. package/src/providers/errors.test.ts +0 -76
  1500. package/src/providers/errors.ts +0 -46
  1501. package/src/providers/gemini.test.ts +0 -46
  1502. package/src/providers/gemini.ts +0 -42
  1503. package/src/providers/index.ts +0 -28
  1504. package/src/providers/keychain.test.ts +0 -100
  1505. package/src/providers/keychain.ts +0 -278
  1506. package/src/providers/mcp-vision-bridge.test.ts +0 -513
  1507. package/src/providers/mcp-vision-bridge.ts +0 -1020
  1508. package/src/providers/ollama.test.ts +0 -46
  1509. package/src/providers/ollama.ts +0 -36
  1510. package/src/providers/openai-compatible.test.ts +0 -63
  1511. package/src/providers/openai-compatible.ts +0 -62
  1512. package/src/providers/openai.test.ts +0 -65
  1513. package/src/providers/openai.ts +0 -56
  1514. package/src/providers/patch-zod-schema.ts +0 -126
  1515. package/src/providers/pricing.test.ts +0 -97
  1516. package/src/providers/pricing.ts +0 -128
  1517. package/src/providers/prompt-cache-key.spec.ts +0 -28
  1518. package/src/providers/runtime-mock.spec.ts +0 -86
  1519. package/src/providers/runtime.ts +0 -311
  1520. package/src/providers/siliconflow-sse-repair.ts +0 -201
  1521. package/src/providers/strategies/anthropic.strategy.ts +0 -25
  1522. package/src/providers/strategies/base.strategy.ts +0 -76
  1523. package/src/providers/strategies/deepseek.strategy.ts +0 -55
  1524. package/src/providers/strategies/google.strategy.ts +0 -28
  1525. package/src/providers/strategies/ollama.strategy.ts +0 -22
  1526. package/src/providers/strategies/openai.strategy.ts +0 -55
  1527. package/src/providers/strategies/registry.ts +0 -43
  1528. package/src/providers/strategies/siliconflow.strategy.ts +0 -28
  1529. package/src/providers/strategies/xai.strategy.ts +0 -33
  1530. package/src/providers/stream-loop.ts +0 -83
  1531. package/src/providers/types.ts +0 -145
  1532. package/src/providers/vision-proxy.test.ts +0 -252
  1533. package/src/providers/vision-proxy.ts +0 -317
  1534. package/src/providers/wire-debug.ts +0 -163
  1535. package/src/reporter/__tests__/acl-check.test.ts +0 -71
  1536. package/src/reporter/__tests__/auto-fire.test.ts +0 -161
  1537. package/src/reporter/__tests__/budget.test.ts +0 -74
  1538. package/src/reporter/__tests__/handlers.test.ts +0 -192
  1539. package/src/reporter/__tests__/query-router.test.ts +0 -115
  1540. package/src/reporter/acl-check.ts +0 -54
  1541. package/src/reporter/auto-fire.ts +0 -168
  1542. package/src/reporter/budget.ts +0 -59
  1543. package/src/reporter/handlers.ts +0 -212
  1544. package/src/reporter/index.ts +0 -210
  1545. package/src/reporter/query-router.ts +0 -51
  1546. package/src/router/.gitkeep +0 -0
  1547. package/src/router/__tests__/step-router.test.ts +0 -150
  1548. package/src/router/classifier/grammars.ts +0 -17
  1549. package/src/router/classifier/index.test.ts +0 -33
  1550. package/src/router/classifier/index.ts +0 -21
  1551. package/src/router/classifier/regex.test.ts +0 -51
  1552. package/src/router/classifier/regex.ts +0 -160
  1553. package/src/router/classifier/tree-sitter.test.ts +0 -26
  1554. package/src/router/classifier/tree-sitter.ts +0 -87
  1555. package/src/router/cold.test.ts +0 -62
  1556. package/src/router/cold.ts +0 -27
  1557. package/src/router/decide.test.ts +0 -209
  1558. package/src/router/decide.ts +0 -509
  1559. package/src/router/health.test.ts +0 -59
  1560. package/src/router/health.ts +0 -49
  1561. package/src/router/provider-sentinel.test.ts +0 -22
  1562. package/src/router/provider-sentinel.ts +0 -20
  1563. package/src/router/role-override.test.ts +0 -37
  1564. package/src/router/step-router.ts +0 -194
  1565. package/src/router/store.ts +0 -47
  1566. package/src/router/types.ts +0 -20
  1567. package/src/router/warm.test.ts +0 -234
  1568. package/src/router/warm.ts +0 -93
  1569. package/src/scaffold/__tests__/continuation-prompt.test.ts +0 -93
  1570. package/src/scaffold/__tests__/continue-as-council.spec.ts +0 -122
  1571. package/src/scaffold/__tests__/dotnet-assembly-name.test.ts +0 -28
  1572. package/src/scaffold/__tests__/fe-scaffold-contents.test.ts +0 -127
  1573. package/src/scaffold/__tests__/init-new.smoke.spec.ts +0 -99
  1574. package/src/scaffold/__tests__/init-new.spec.ts +0 -450
  1575. package/src/scaffold/__tests__/install-bb-templates.spec.ts +0 -86
  1576. package/src/scaffold/__tests__/point-to-existing.spec.ts +0 -114
  1577. package/src/scaffold/bb-ecosystem-apply.ts +0 -457
  1578. package/src/scaffold/bb-quality-gate.ts +0 -287
  1579. package/src/scaffold/continuation-prompt.ts +0 -80
  1580. package/src/scaffold/continue-as-council.ts +0 -99
  1581. package/src/scaffold/init-new.ts +0 -1691
  1582. package/src/scaffold/point-to-existing.ts +0 -83
  1583. package/src/scaffold/resume-from-gate-failures.ts +0 -167
  1584. package/src/self-qa/__tests__/agentic-context.test.ts +0 -104
  1585. package/src/self-qa/__tests__/agentic-loop.test.ts +0 -70
  1586. package/src/self-qa/__tests__/delta-encoder.test.ts +0 -113
  1587. package/src/self-qa/__tests__/judge.test.ts +0 -152
  1588. package/src/self-qa/__tests__/scenario-planner.test.ts +0 -87
  1589. package/src/self-qa/__tests__/spec-emitter.test.ts +0 -67
  1590. package/src/self-qa/agentic-context.ts +0 -211
  1591. package/src/self-qa/agentic-loop.ts +0 -590
  1592. package/src/self-qa/delta-encoder.ts +0 -149
  1593. package/src/self-qa/index.ts +0 -117
  1594. package/src/self-qa/judge.ts +0 -248
  1595. package/src/self-qa/orchestrator.ts +0 -269
  1596. package/src/self-qa/scenario-planner.ts +0 -289
  1597. package/src/self-qa/spec-emitter.ts +0 -152
  1598. package/src/self-qa/types.ts +0 -98
  1599. package/src/storage/__tests__/migrations.test.ts +0 -395
  1600. package/src/storage/__tests__/sweep-stale-pending.test.ts +0 -112
  1601. package/src/storage/__tests__/ui-interaction-log.test.ts +0 -136
  1602. package/src/storage/atomic-io.test.ts +0 -92
  1603. package/src/storage/atomic-io.ts +0 -160
  1604. package/src/storage/config.test.ts +0 -33
  1605. package/src/storage/config.ts +0 -53
  1606. package/src/storage/db.ts +0 -184
  1607. package/src/storage/index.ts +0 -26
  1608. package/src/storage/interaction-log.ts +0 -126
  1609. package/src/storage/migrations.ts +0 -205
  1610. package/src/storage/session-dir.ts +0 -37
  1611. package/src/storage/sessions.ts +0 -225
  1612. package/src/storage/tool-results.ts +0 -56
  1613. package/src/storage/transcript-response-entry.test.ts +0 -115
  1614. package/src/storage/transcript-view.ts +0 -45
  1615. package/src/storage/transcript.test.ts +0 -24
  1616. package/src/storage/transcript.ts +0 -637
  1617. package/src/storage/ui-interaction-log.ts +0 -170
  1618. package/src/storage/usage-cap.test.ts +0 -59
  1619. package/src/storage/usage-cap.ts +0 -81
  1620. package/src/storage/usage.ts +0 -117
  1621. package/src/storage/workspaces.ts +0 -84
  1622. package/src/tools/__tests__/vision-gate.test.ts +0 -66
  1623. package/src/tools/bash-output-cache.test.ts +0 -113
  1624. package/src/tools/bash-output-cache.ts +0 -156
  1625. package/src/tools/bash-output-integration.test.ts +0 -33
  1626. package/src/tools/bash.test.ts +0 -447
  1627. package/src/tools/bash.ts +0 -769
  1628. package/src/tools/computer.test.ts +0 -187
  1629. package/src/tools/computer.ts +0 -632
  1630. package/src/tools/file-tracker.test.ts +0 -101
  1631. package/src/tools/file-tracker.ts +0 -70
  1632. package/src/tools/file.test.ts +0 -151
  1633. package/src/tools/file.ts +0 -203
  1634. package/src/tools/grep.ts +0 -187
  1635. package/src/tools/registry-bash-empty-command.test.ts +0 -64
  1636. package/src/tools/registry-bash-footer.test.ts +0 -95
  1637. package/src/tools/registry-ee-query.test.ts +0 -57
  1638. package/src/tools/registry-session-repeat.test.ts +0 -105
  1639. package/src/tools/registry.test.ts +0 -38
  1640. package/src/tools/registry.ts +0 -704
  1641. package/src/tools/schedule.test.ts +0 -143
  1642. package/src/tools/schedule.ts +0 -610
  1643. package/src/tools/todo-write-snapshot.test.ts +0 -53
  1644. package/src/tools/todo-write-snapshot.ts +0 -63
  1645. package/src/tools/vision-gate.ts +0 -74
  1646. package/src/types/index.ts +0 -550
  1647. package/src/ui/__tests__/picker-providers.test.ts +0 -37
  1648. package/src/ui/agents-modal.tsx +0 -293
  1649. package/src/ui/app.tsx +0 -7084
  1650. package/src/ui/cards/__tests__/product-status-card.test.ts +0 -30
  1651. package/src/ui/cards/product-status-card.tsx +0 -117
  1652. package/src/ui/components/SuggestionOverlay.tsx +0 -38
  1653. package/src/ui/components/Toast.tsx +0 -100
  1654. package/src/ui/components/__tests__/council-leader-bubble.test.ts +0 -16
  1655. package/src/ui/components/__tests__/council-message-bubble.test.ts +0 -85
  1656. package/src/ui/components/__tests__/council-phase-timeline.test.ts +0 -57
  1657. package/src/ui/components/__tests__/council-placeholder-bubble.test.ts +0 -16
  1658. package/src/ui/components/__tests__/council-question-card.test.ts +0 -133
  1659. package/src/ui/components/__tests__/council-synthesis-banner.test.ts +0 -12
  1660. package/src/ui/components/__tests__/task-list-panel.test.ts +0 -37
  1661. package/src/ui/components/__tests__/use-pair-quote-buffer.test.ts +0 -41
  1662. package/src/ui/components/btw-overlay.tsx +0 -66
  1663. package/src/ui/components/bubble-layout.ts +0 -66
  1664. package/src/ui/components/code-block-truncate.ts +0 -24
  1665. package/src/ui/components/copy-flash-banner.tsx +0 -31
  1666. package/src/ui/components/council-info-card.tsx +0 -44
  1667. package/src/ui/components/council-leader-bubble.tsx +0 -40
  1668. package/src/ui/components/council-message-bubble.tsx +0 -110
  1669. package/src/ui/components/council-phase-timeline.tsx +0 -112
  1670. package/src/ui/components/council-placeholder-bubble.tsx +0 -64
  1671. package/src/ui/components/council-question-card.tsx +0 -256
  1672. package/src/ui/components/council-status-list.tsx +0 -111
  1673. package/src/ui/components/council-synthesis-banner.tsx +0 -36
  1674. package/src/ui/components/diff-view.tsx +0 -225
  1675. package/src/ui/components/halt-recovery-card.tsx +0 -84
  1676. package/src/ui/components/hero-logo.tsx +0 -62
  1677. package/src/ui/components/init-new-form-card.tsx +0 -470
  1678. package/src/ui/components/lsp-views.tsx +0 -104
  1679. package/src/ui/components/media-views.tsx +0 -66
  1680. package/src/ui/components/message-view.tsx +0 -442
  1681. package/src/ui/components/point-to-existing-form-card.tsx +0 -136
  1682. package/src/ui/components/prompt-box.tsx +0 -306
  1683. package/src/ui/components/role-palette.ts +0 -62
  1684. package/src/ui/components/session-header.tsx +0 -68
  1685. package/src/ui/components/slash-inline-menu.tsx +0 -63
  1686. package/src/ui/components/structured-response-view.tsx +0 -191
  1687. package/src/ui/components/task-list-panel.tsx +0 -127
  1688. package/src/ui/components/tool-group.tsx +0 -129
  1689. package/src/ui/components/tool-result-views.tsx +0 -258
  1690. package/src/ui/components/use-pair-quote-buffer.ts +0 -23
  1691. package/src/ui/constants.ts +0 -242
  1692. package/src/ui/hooks/use-agent-editor.ts +0 -61
  1693. package/src/ui/hooks/use-mcp-editor.ts +0 -39
  1694. package/src/ui/hooks/use-model-picker.ts +0 -50
  1695. package/src/ui/hooks/useTypeahead.ts +0 -160
  1696. package/src/ui/markdown.tsx +0 -49
  1697. package/src/ui/mcp-modal-types.ts +0 -33
  1698. package/src/ui/mcp-modal.tsx +0 -484
  1699. package/src/ui/modals/api-key-modal.tsx +0 -99
  1700. package/src/ui/modals/connect-modal.tsx +0 -259
  1701. package/src/ui/modals/model-picker-modal.tsx +0 -347
  1702. package/src/ui/modals/sandbox-picker-modal.tsx +0 -99
  1703. package/src/ui/modals/update-modal.tsx +0 -67
  1704. package/src/ui/modals/wallet-picker-modal.tsx +0 -186
  1705. package/src/ui/picker-providers.ts +0 -41
  1706. package/src/ui/plan.tsx +0 -346
  1707. package/src/ui/schedule-modal.tsx +0 -138
  1708. package/src/ui/slash/__tests__/clear.test.ts +0 -86
  1709. package/src/ui/slash/__tests__/compact.test.ts +0 -56
  1710. package/src/ui/slash/__tests__/cost.test.ts +0 -62
  1711. package/src/ui/slash/__tests__/discuss.test.ts +0 -101
  1712. package/src/ui/slash/__tests__/execute.test.ts +0 -86
  1713. package/src/ui/slash/__tests__/expand.test.ts +0 -86
  1714. package/src/ui/slash/__tests__/ideal.test.ts +0 -182
  1715. package/src/ui/slash/__tests__/menu-parity.test.ts +0 -44
  1716. package/src/ui/slash/__tests__/optimize.test.ts +0 -155
  1717. package/src/ui/slash/__tests__/pin.test.ts +0 -47
  1718. package/src/ui/slash/__tests__/plan.test.ts +0 -98
  1719. package/src/ui/slash/__tests__/status-render.test.ts +0 -82
  1720. package/src/ui/slash/clear.ts +0 -89
  1721. package/src/ui/slash/compact.ts +0 -46
  1722. package/src/ui/slash/cost.ts +0 -63
  1723. package/src/ui/slash/council-inspect.ts +0 -188
  1724. package/src/ui/slash/council.ts +0 -30
  1725. package/src/ui/slash/debug.ts +0 -153
  1726. package/src/ui/slash/discuss.ts +0 -71
  1727. package/src/ui/slash/ee.ts +0 -304
  1728. package/src/ui/slash/execute.ts +0 -44
  1729. package/src/ui/slash/expand.ts +0 -51
  1730. package/src/ui/slash/export.ts +0 -309
  1731. package/src/ui/slash/ideal.ts +0 -292
  1732. package/src/ui/slash/menu-items.ts +0 -107
  1733. package/src/ui/slash/optimize.ts +0 -47
  1734. package/src/ui/slash/pin.ts +0 -41
  1735. package/src/ui/slash/plan.ts +0 -62
  1736. package/src/ui/slash/registry.ts +0 -47
  1737. package/src/ui/slash/route.test.ts +0 -82
  1738. package/src/ui/slash/route.ts +0 -43
  1739. package/src/ui/slash/status.ts +0 -36
  1740. package/src/ui/state/active-run.ts +0 -56
  1741. package/src/ui/status-bar/index.test.tsx +0 -154
  1742. package/src/ui/status-bar/index.tsx +0 -126
  1743. package/src/ui/status-bar/store.test.ts +0 -131
  1744. package/src/ui/status-bar/store.ts +0 -332
  1745. package/src/ui/status-bar/tier-badge.test.tsx +0 -38
  1746. package/src/ui/status-bar/tier-badge.tsx +0 -29
  1747. package/src/ui/status-bar/usd-meter.test.tsx +0 -37
  1748. package/src/ui/status-bar/usd-meter.tsx +0 -22
  1749. package/src/ui/syntax-highlight.ts +0 -627
  1750. package/src/ui/terminal-selection-text.ts +0 -72
  1751. package/src/ui/theme.ts +0 -95
  1752. package/src/ui/types.ts +0 -83
  1753. package/src/ui/utils/__tests__/format.test.ts +0 -71
  1754. package/src/ui/utils/__tests__/tools.test.ts +0 -57
  1755. package/src/ui/utils/color.ts +0 -19
  1756. package/src/ui/utils/format.ts +0 -133
  1757. package/src/ui/utils/modal.ts +0 -9
  1758. package/src/ui/utils/text.ts +0 -32
  1759. package/src/ui/utils/tools.ts +0 -137
  1760. package/src/usage/.gitkeep +0 -0
  1761. package/src/usage/__tests__/product-ledger.test.ts +0 -86
  1762. package/src/usage/cost-log.ts +0 -158
  1763. package/src/usage/decision-log.ts +0 -86
  1764. package/src/usage/downgrade.test.ts +0 -86
  1765. package/src/usage/downgrade.ts +0 -88
  1766. package/src/usage/estimator.test.ts +0 -43
  1767. package/src/usage/estimator.ts +0 -58
  1768. package/src/usage/ledger.test.ts +0 -200
  1769. package/src/usage/ledger.ts +0 -253
  1770. package/src/usage/midstream.test.ts +0 -55
  1771. package/src/usage/midstream.ts +0 -51
  1772. package/src/usage/product-ledger.ts +0 -119
  1773. package/src/usage/thresholds.test.ts +0 -83
  1774. package/src/usage/thresholds.ts +0 -74
  1775. package/src/usage/types.ts +0 -41
  1776. package/src/utils/__tests__/auto-council-settings.test.ts +0 -46
  1777. package/src/utils/__tests__/ee-logger.test.ts +0 -197
  1778. package/src/utils/__tests__/file-lock.test.ts +0 -74
  1779. package/src/utils/__tests__/llm-deadline.test.ts +0 -64
  1780. package/src/utils/__tests__/rate-limit.test.ts +0 -42
  1781. package/src/utils/__tests__/settings-disabled-models.test.ts +0 -113
  1782. package/src/utils/__tests__/settings-web-research.test.ts +0 -45
  1783. package/src/utils/__tests__/slugify.test.ts +0 -45
  1784. package/src/utils/__tests__/visible-retry.test.ts +0 -195
  1785. package/src/utils/at-mentions.ts +0 -120
  1786. package/src/utils/clipboard-image.ts +0 -139
  1787. package/src/utils/ee-logger.ts +0 -163
  1788. package/src/utils/file-index.ts +0 -152
  1789. package/src/utils/file-lock.ts +0 -66
  1790. package/src/utils/git-root.ts +0 -17
  1791. package/src/utils/host-clipboard.ts +0 -68
  1792. package/src/utils/install-manager.test.ts +0 -167
  1793. package/src/utils/install-manager.ts +0 -429
  1794. package/src/utils/instructions.test.ts +0 -112
  1795. package/src/utils/instructions.ts +0 -149
  1796. package/src/utils/llm-deadline.ts +0 -80
  1797. package/src/utils/permission-mode.test.ts +0 -121
  1798. package/src/utils/permission-mode.ts +0 -94
  1799. package/src/utils/rate-limit.ts +0 -21
  1800. package/src/utils/redactor.test.ts +0 -100
  1801. package/src/utils/redactor.ts +0 -223
  1802. package/src/utils/settings.test.ts +0 -181
  1803. package/src/utils/settings.ts +0 -1163
  1804. package/src/utils/shell.test.ts +0 -102
  1805. package/src/utils/shell.ts +0 -204
  1806. package/src/utils/side-question.ts +0 -39
  1807. package/src/utils/skills.test.ts +0 -58
  1808. package/src/utils/skills.ts +0 -207
  1809. package/src/utils/slugify.ts +0 -9
  1810. package/src/utils/subagent-display.test.ts +0 -23
  1811. package/src/utils/subagent-display.ts +0 -11
  1812. package/src/utils/subagents-settings.test.ts +0 -84
  1813. package/src/utils/telegram-audio-settings.test.ts +0 -44
  1814. package/src/utils/update-checker.test.ts +0 -182
  1815. package/src/utils/update-checker.ts +0 -33
  1816. package/src/utils/visible-retry.ts +0 -56
  1817. package/src/verify/__tests__/coverage-parsers.test.ts +0 -86
  1818. package/src/verify/__tests__/dotnet-recipe.test.ts +0 -88
  1819. package/src/verify/checkpoint.test.ts +0 -186
  1820. package/src/verify/checkpoint.ts +0 -239
  1821. package/src/verify/coverage-parsers.ts +0 -76
  1822. package/src/verify/entrypoint.test.ts +0 -293
  1823. package/src/verify/entrypoint.ts +0 -495
  1824. package/src/verify/environment.test.ts +0 -119
  1825. package/src/verify/environment.ts +0 -115
  1826. package/src/verify/evidence.ts +0 -104
  1827. package/src/verify/orchestrator.test.ts +0 -159
  1828. package/src/verify/orchestrator.ts +0 -129
  1829. package/src/verify/recipes.ts +0 -592
  1830. package/src/verify/retry.ts +0 -62
  1831. package/src/verify/runtime-prep.test.ts +0 -47
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
- }