muonroi-cli 1.4.0 → 1.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (2000) hide show
  1. package/LICENSE +21 -21
  2. package/README.md +122 -122
  3. package/dist/packages/agent-harness-core/src/predicate.d.ts +1 -1
  4. package/dist/src/agent-harness/__tests__/mock-model.spec.js +48 -1
  5. package/dist/src/agent-harness/mock-model.d.ts +11 -0
  6. package/dist/src/agent-harness/mock-model.js +21 -0
  7. package/dist/src/cli/cost-forensics.js +12 -12
  8. package/dist/src/council/__tests__/clarification-prompt.test.js +51 -0
  9. package/dist/src/council/__tests__/clarifier-ready-gate.test.js +32 -0
  10. package/dist/src/council/__tests__/decisions-lock.test.js +17 -1
  11. package/dist/src/council/__tests__/oauth-reachable.test.d.ts +1 -0
  12. package/dist/src/council/__tests__/oauth-reachable.test.js +31 -0
  13. package/dist/src/council/__tests__/parse-outcome-fallback.test.js +11 -0
  14. package/dist/src/council/clarifier.js +9 -1
  15. package/dist/src/council/debate.js +5 -1
  16. package/dist/src/council/decisions-lock.js +3 -3
  17. package/dist/src/council/index.js +12 -5
  18. package/dist/src/council/leader.d.ts +0 -17
  19. package/dist/src/council/leader.js +22 -15
  20. package/dist/src/council/planner.js +1 -1
  21. package/dist/src/council/prompts.js +63 -57
  22. package/dist/src/council/types.d.ts +7 -0
  23. package/dist/src/ee/__tests__/ee-onboarding.test.d.ts +1 -0
  24. package/dist/src/ee/__tests__/ee-onboarding.test.js +32 -0
  25. package/dist/src/ee/auth.d.ts +9 -0
  26. package/dist/src/ee/auth.js +19 -0
  27. package/dist/src/ee/ee-onboarding.d.ts +5 -0
  28. package/dist/src/ee/ee-onboarding.js +76 -0
  29. package/dist/src/generated/version.d.ts +1 -1
  30. package/dist/src/generated/version.js +1 -1
  31. package/dist/src/headless/output.js +6 -4
  32. package/dist/src/headless/output.test.js +4 -3
  33. package/dist/src/index.js +20 -1
  34. package/dist/src/mcp/__tests__/auto-setup.test.js +74 -0
  35. package/dist/src/mcp/__tests__/client-pool.spec.d.ts +1 -0
  36. package/dist/src/mcp/__tests__/client-pool.spec.js +98 -0
  37. package/dist/src/mcp/__tests__/parallel-build.spec.d.ts +1 -0
  38. package/dist/src/mcp/__tests__/parallel-build.spec.js +67 -0
  39. package/dist/src/mcp/__tests__/smart-filter.test.js +56 -0
  40. package/dist/src/mcp/auto-setup.js +56 -2
  41. package/dist/src/mcp/client-pool.d.ts +46 -0
  42. package/dist/src/mcp/client-pool.js +212 -0
  43. package/dist/src/mcp/oauth-callback.js +2 -2
  44. package/dist/src/mcp/parse-headers.test.js +14 -14
  45. package/dist/src/mcp/runtime.d.ts +28 -0
  46. package/dist/src/mcp/runtime.js +117 -51
  47. package/dist/src/mcp/self-verify-runner.d.ts +14 -0
  48. package/dist/src/mcp/self-verify-runner.js +38 -0
  49. package/dist/src/mcp/setup-guide-text.d.ts +9 -0
  50. package/dist/src/mcp/setup-guide-text.js +84 -0
  51. package/dist/src/mcp/smart-filter.js +49 -0
  52. package/dist/src/mcp/smoke.test.js +43 -43
  53. package/dist/src/mcp/tools-server.d.ts +7 -0
  54. package/dist/src/mcp/tools-server.js +19 -22
  55. package/dist/src/models/catalog.json +349 -349
  56. package/dist/src/ops/__tests__/doctor-ee-health.test.js +21 -0
  57. package/dist/src/ops/doctor.d.ts +3 -2
  58. package/dist/src/ops/doctor.js +47 -11
  59. package/dist/src/ops/doctor.test.js +4 -3
  60. package/dist/src/orchestrator/__tests__/mcp-capability-block.test.d.ts +1 -0
  61. package/dist/src/orchestrator/__tests__/mcp-capability-block.test.js +39 -0
  62. package/dist/src/orchestrator/__tests__/project-stack.test.d.ts +1 -0
  63. package/dist/src/orchestrator/__tests__/project-stack.test.js +65 -0
  64. package/dist/src/orchestrator/batch-turn-runner.js +7 -11
  65. package/dist/src/orchestrator/message-processor.js +57 -27
  66. package/dist/src/orchestrator/orchestrator.js +26 -0
  67. package/dist/src/orchestrator/prompts.d.ts +51 -0
  68. package/dist/src/orchestrator/prompts.js +257 -134
  69. package/dist/src/orchestrator/scope-ceiling.js +6 -1
  70. package/dist/src/orchestrator/stream-runner.js +20 -15
  71. package/dist/src/orchestrator/text-tool-call-detector.test.js +13 -13
  72. package/dist/src/pil/__tests__/clarity-gate.test.js +24 -215
  73. package/dist/src/pil/__tests__/config.test.js +1 -17
  74. package/dist/src/pil/__tests__/discovery.test.js +144 -11
  75. package/dist/src/pil/__tests__/layer1-intent-trace.test.js +7 -2
  76. package/dist/src/pil/__tests__/layer1-intent.test.js +3 -0
  77. package/dist/src/pil/__tests__/layer16-clarity.test.js +32 -116
  78. package/dist/src/pil/__tests__/layer4-gsd.test.js +37 -0
  79. package/dist/src/pil/__tests__/layer6-output.test.js +137 -18
  80. package/dist/src/pil/__tests__/llm-classify.test.js +49 -2
  81. package/dist/src/pil/agent-operating-contract.d.ts +1 -1
  82. package/dist/src/pil/agent-operating-contract.js +2 -0
  83. package/dist/src/pil/agent-operating-contract.test.js +7 -2
  84. package/dist/src/pil/cheap-model-playbook.js +35 -35
  85. package/dist/src/pil/cheap-model-workbooks.js +16 -13
  86. package/dist/src/pil/clarity-gate.d.ts +21 -19
  87. package/dist/src/pil/clarity-gate.js +26 -153
  88. package/dist/src/pil/config.d.ts +9 -1
  89. package/dist/src/pil/config.js +15 -4
  90. package/dist/src/pil/discovery.js +211 -136
  91. package/dist/src/pil/layer1-intent.d.ts +12 -0
  92. package/dist/src/pil/layer1-intent.js +283 -38
  93. package/dist/src/pil/layer1-intent.test.js +210 -4
  94. package/dist/src/pil/layer16-clarity.d.ts +25 -11
  95. package/dist/src/pil/layer16-clarity.js +19 -306
  96. package/dist/src/pil/layer4-gsd.js +18 -6
  97. package/dist/src/pil/layer6-output.d.ts +2 -0
  98. package/dist/src/pil/layer6-output.js +137 -22
  99. package/dist/src/pil/llm-classify.d.ts +26 -0
  100. package/dist/src/pil/llm-classify.js +34 -5
  101. package/dist/src/pil/native-capabilities-workbook.d.ts +1 -1
  102. package/dist/src/pil/native-capabilities-workbook.js +82 -76
  103. package/dist/src/pil/schema.d.ts +8 -0
  104. package/dist/src/pil/schema.js +12 -1
  105. package/dist/src/pil/task-tier-map.js +4 -0
  106. package/dist/src/pil/types.d.ts +11 -1
  107. package/dist/src/product-loop/done-gate.js +3 -3
  108. package/dist/src/product-loop/loop-driver.js +18 -18
  109. package/dist/src/product-loop/progress-snapshot.js +4 -4
  110. package/dist/src/providers/auth/gemini-oauth.js +6 -15
  111. package/dist/src/providers/auth/grok-oauth.js +6 -15
  112. package/dist/src/providers/auth/openai-oauth.js +6 -15
  113. package/dist/src/providers/mcp-vision-bridge.js +48 -48
  114. package/dist/src/reporter/index.js +1 -1
  115. package/dist/src/scaffold/bb-ecosystem-apply.js +47 -47
  116. package/dist/src/scaffold/bb-quality-gate.js +5 -5
  117. package/dist/src/scaffold/continuation-prompt.js +60 -60
  118. package/dist/src/scaffold/init-new.js +453 -453
  119. package/dist/src/self-qa/__tests__/scenario-planner.test.js +3 -3
  120. package/dist/src/self-qa/agentic-loop.js +24 -19
  121. package/dist/src/self-qa/spec-emitter.js +26 -23
  122. package/dist/src/storage/__tests__/migrations.test.js +2 -2
  123. package/dist/src/storage/interaction-log.js +5 -5
  124. package/dist/src/storage/migrations.js +122 -122
  125. package/dist/src/storage/sessions.js +42 -42
  126. package/dist/src/storage/transcript.js +91 -84
  127. package/dist/src/storage/usage.js +14 -14
  128. package/dist/src/storage/workspaces.js +12 -12
  129. package/dist/src/tools/__tests__/native-tools.test.d.ts +1 -0
  130. package/dist/src/tools/__tests__/native-tools.test.js +53 -0
  131. package/dist/src/tools/git-safety.d.ts +61 -0
  132. package/dist/src/tools/git-safety.js +141 -0
  133. package/dist/src/tools/git-safety.test.d.ts +1 -0
  134. package/dist/src/tools/git-safety.test.js +111 -0
  135. package/dist/src/tools/native-tools.d.ts +31 -0
  136. package/dist/src/tools/native-tools.js +273 -0
  137. package/dist/src/tools/registry-git-safety.test.d.ts +7 -0
  138. package/dist/src/tools/registry-git-safety.test.js +92 -0
  139. package/dist/src/tools/registry.js +39 -4
  140. package/dist/src/ui/__tests__/markdown-render.test.d.ts +1 -0
  141. package/dist/src/ui/__tests__/markdown-render.test.js +48 -0
  142. package/dist/src/ui/app.js +0 -0
  143. package/dist/src/ui/components/message-view.js +4 -1
  144. package/dist/src/ui/components/structured-response-view.js +7 -3
  145. package/dist/src/ui/components/tool-group.js +7 -1
  146. package/dist/src/ui/markdown-render.d.ts +41 -0
  147. package/dist/src/ui/markdown-render.js +223 -0
  148. package/dist/src/ui/markdown.d.ts +10 -0
  149. package/dist/src/ui/markdown.js +12 -35
  150. package/dist/src/ui/slash/council-inspect.js +4 -4
  151. package/dist/src/ui/slash/export.js +4 -4
  152. package/dist/src/ui/utils/text.d.ts +8 -0
  153. package/dist/src/ui/utils/text.js +16 -0
  154. package/dist/src/ui/utils/text.test.d.ts +1 -0
  155. package/dist/src/ui/utils/text.test.js +23 -0
  156. package/dist/src/usage/ledger.js +48 -15
  157. package/dist/src/utils/__tests__/footprint-gitignore.test.d.ts +1 -0
  158. package/dist/src/utils/__tests__/footprint-gitignore.test.js +50 -0
  159. package/dist/src/utils/clipboard-image.js +23 -23
  160. package/dist/src/utils/open-url.d.ts +56 -0
  161. package/dist/src/utils/open-url.js +58 -0
  162. package/dist/src/utils/open-url.test.d.ts +1 -0
  163. package/dist/src/utils/open-url.test.js +86 -0
  164. package/dist/src/utils/settings.d.ts +12 -0
  165. package/dist/src/utils/settings.js +48 -0
  166. package/dist/src/utils/side-question.js +2 -2
  167. package/dist/src/utils/skills.js +3 -3
  168. package/dist/src/verify/__tests__/coverage-parsers.test.js +30 -30
  169. package/dist/src/verify/environment.js +2 -1
  170. package/package.json +3 -2
  171. package/dist/muonroi-cli-standalone.exe +0 -0
  172. package/dist/packages/agent-harness-core/src/driver.js.map +0 -1
  173. package/dist/packages/agent-harness-core/src/event-filter.js.map +0 -1
  174. package/dist/packages/agent-harness-core/src/event-redact.js.map +0 -1
  175. package/dist/packages/agent-harness-core/src/idle.js.map +0 -1
  176. package/dist/packages/agent-harness-core/src/index.js.map +0 -1
  177. package/dist/packages/agent-harness-core/src/mcp-server.js.map +0 -1
  178. package/dist/packages/agent-harness-core/src/mock-llm.js.map +0 -1
  179. package/dist/packages/agent-harness-core/src/predicate.js.map +0 -1
  180. package/dist/packages/agent-harness-core/src/protocol.js.map +0 -1
  181. package/dist/packages/agent-harness-core/src/registry.js.map +0 -1
  182. package/dist/packages/agent-harness-core/src/selector.js.map +0 -1
  183. package/dist/packages/agent-harness-core/src/spec-helpers.js.map +0 -1
  184. package/dist/packages/agent-harness-core/src/transports/sidechannel.js.map +0 -1
  185. package/dist/packages/agent-harness-core/src/transports/ws.js.map +0 -1
  186. package/dist/packages/agent-harness-opentui/src/agent-mode.js.map +0 -1
  187. package/dist/packages/agent-harness-opentui/src/index.js.map +0 -1
  188. package/dist/packages/agent-harness-opentui/src/input-bridge.js.map +0 -1
  189. package/dist/packages/agent-harness-opentui/src/install.js.map +0 -1
  190. package/dist/packages/agent-harness-opentui/src/reconciler-hook.js.map +0 -1
  191. package/dist/packages/agent-harness-opentui/src/semantic.js.map +0 -1
  192. package/dist/src/__test-helpers__/catalog-fixtures.js.map +0 -1
  193. package/dist/src/__test-stubs__/ee-server.js.map +0 -1
  194. package/dist/src/__test-stubs__/vitest-setup.js.map +0 -1
  195. package/dist/src/__tests__/council/bubble-layout.test.js.map +0 -1
  196. package/dist/src/__tests__/council/code-block-truncate.test.js.map +0 -1
  197. package/dist/src/__tests__/council/role-palette.test.js.map +0 -1
  198. package/dist/src/__tests__/first-run-wizard.test.js.map +0 -1
  199. package/dist/src/agent-harness/__tests__/cli-flags.spec.js.map +0 -1
  200. package/dist/src/agent-harness/__tests__/driver.spec.js.map +0 -1
  201. package/dist/src/agent-harness/__tests__/idle.spec.js.map +0 -1
  202. package/dist/src/agent-harness/__tests__/mock-llm.spec.js.map +0 -1
  203. package/dist/src/agent-harness/__tests__/mock-model.spec.js.map +0 -1
  204. package/dist/src/agent-harness/__tests__/predicate.spec.js.map +0 -1
  205. package/dist/src/agent-harness/__tests__/protocol.spec.js.map +0 -1
  206. package/dist/src/agent-harness/__tests__/schema.spec.js.map +0 -1
  207. package/dist/src/agent-harness/__tests__/selector.spec.js.map +0 -1
  208. package/dist/src/agent-harness/__tests__/sidechannel.spec.js.map +0 -1
  209. package/dist/src/agent-harness/__tests__/spec-helpers.spec.js.map +0 -1
  210. package/dist/src/agent-harness/index.js.map +0 -1
  211. package/dist/src/agent-harness/mock-model.js.map +0 -1
  212. package/dist/src/agent-harness/test-spawn.js.map +0 -1
  213. package/dist/src/billing/index.js.map +0 -1
  214. package/dist/src/chat/__tests__/broadcast-bus.test.js.map +0 -1
  215. package/dist/src/chat/__tests__/channel-manager.test.js.map +0 -1
  216. package/dist/src/chat/__tests__/client.test.js.map +0 -1
  217. package/dist/src/chat/__tests__/discord-integration.test.js.map +0 -1
  218. package/dist/src/chat/__tests__/intent-prompt.test.js.map +0 -1
  219. package/dist/src/chat/__tests__/verdict-resolver.test.js.map +0 -1
  220. package/dist/src/chat/broadcast-bus.js.map +0 -1
  221. package/dist/src/chat/channel-manager.js.map +0 -1
  222. package/dist/src/chat/chat-keychain.js.map +0 -1
  223. package/dist/src/chat/factory.js.map +0 -1
  224. package/dist/src/chat/intent-prompt.js.map +0 -1
  225. package/dist/src/chat/providers/discord/client.js.map +0 -1
  226. package/dist/src/chat/types.js.map +0 -1
  227. package/dist/src/chat/verdict-constants.js.map +0 -1
  228. package/dist/src/chat/verdict-resolver.js.map +0 -1
  229. package/dist/src/cli/__tests__/bw-vault.test.js.map +0 -1
  230. package/dist/src/cli/__tests__/keys-bundle.test.js.map +0 -1
  231. package/dist/src/cli/__tests__/share-cmd.test.js.map +0 -1
  232. package/dist/src/cli/bw-vault.js.map +0 -1
  233. package/dist/src/cli/config/__tests__/model-picker.test.js.map +0 -1
  234. package/dist/src/cli/config/__tests__/provider-fetch.test.js.map +0 -1
  235. package/dist/src/cli/config/index.js.map +0 -1
  236. package/dist/src/cli/config/model-picker.js.map +0 -1
  237. package/dist/src/cli/config/provider-fetch.js.map +0 -1
  238. package/dist/src/cli/config/screen-council.js.map +0 -1
  239. package/dist/src/cli/config/screen-models.js.map +0 -1
  240. package/dist/src/cli/config/screen-providers.js.map +0 -1
  241. package/dist/src/cli/config/tui.js.map +0 -1
  242. package/dist/src/cli/cost-forensics.js.map +0 -1
  243. package/dist/src/cli/cost-forensics.test.js.map +0 -1
  244. package/dist/src/cli/keys-bundle.js.map +0 -1
  245. package/dist/src/cli/keys.js.map +0 -1
  246. package/dist/src/cli/keys.test.js.map +0 -1
  247. package/dist/src/cli/pil-report.js.map +0 -1
  248. package/dist/src/cli/reporter-cmd.js.map +0 -1
  249. package/dist/src/cli/share-cmd.js.map +0 -1
  250. package/dist/src/cli/usage-report.js.map +0 -1
  251. package/dist/src/cloud/index.js.map +0 -1
  252. package/dist/src/council/__tests__/accounting.test.js.map +0 -1
  253. package/dist/src/council/__tests__/audit-replay.test.js.map +0 -1
  254. package/dist/src/council/__tests__/clarifier-max-rounds.test.js.map +0 -1
  255. package/dist/src/council/__tests__/clarifier-options.test.js.map +0 -1
  256. package/dist/src/council/__tests__/clarifier-ready-gate.test.js.map +0 -1
  257. package/dist/src/council/__tests__/cost-aware.test.js.map +0 -1
  258. package/dist/src/council/__tests__/debate-planner-structured.test.js.map +0 -1
  259. package/dist/src/council/__tests__/decisions-lock.test.js.map +0 -1
  260. package/dist/src/council/__tests__/evaluator-metrics.test.js.map +0 -1
  261. package/dist/src/council/__tests__/parse-outcome-fallback.test.js.map +0 -1
  262. package/dist/src/council/__tests__/research-tools.test.js.map +0 -1
  263. package/dist/src/council/__tests__/round-tools.test.js.map +0 -1
  264. package/dist/src/council/__tests__/tool-trace.test.js.map +0 -1
  265. package/dist/src/council/__tests__/types-contract.test.js.map +0 -1
  266. package/dist/src/council/clarifier.js.map +0 -1
  267. package/dist/src/council/context.js.map +0 -1
  268. package/dist/src/council/debate-planner.js.map +0 -1
  269. package/dist/src/council/debate.js.map +0 -1
  270. package/dist/src/council/decisions-lock.js.map +0 -1
  271. package/dist/src/council/executor.js.map +0 -1
  272. package/dist/src/council/index.js.map +0 -1
  273. package/dist/src/council/leader.js.map +0 -1
  274. package/dist/src/council/llm.js.map +0 -1
  275. package/dist/src/council/phase-events.js.map +0 -1
  276. package/dist/src/council/planner.js.map +0 -1
  277. package/dist/src/council/preflight.js.map +0 -1
  278. package/dist/src/council/prompts.js.map +0 -1
  279. package/dist/src/council/types.js.map +0 -1
  280. package/dist/src/daemon/scheduler.js.map +0 -1
  281. package/dist/src/daemon/scheduler.test.js.map +0 -1
  282. package/dist/src/ee/__tests__/bb-design.test.js.map +0 -1
  283. package/dist/src/ee/__tests__/export-transcripts.test.js.map +0 -1
  284. package/dist/src/ee/__tests__/pil-context-bridge.test.js.map +0 -1
  285. package/dist/src/ee/__tests__/pipeline.integration.test.js.map +0 -1
  286. package/dist/src/ee/__tests__/recall-format.test.js.map +0 -1
  287. package/dist/src/ee/__tests__/recall-ledger.test.js.map +0 -1
  288. package/dist/src/ee/__tests__/render-sink-wiring.test.js.map +0 -1
  289. package/dist/src/ee/auth.js.map +0 -1
  290. package/dist/src/ee/auth.test.js.map +0 -1
  291. package/dist/src/ee/bb-design.js.map +0 -1
  292. package/dist/src/ee/bb-retrieval.js.map +0 -1
  293. package/dist/src/ee/bridge.js.map +0 -1
  294. package/dist/src/ee/bridge.test.js.map +0 -1
  295. package/dist/src/ee/client-mode.js.map +0 -1
  296. package/dist/src/ee/client.js.map +0 -1
  297. package/dist/src/ee/client.test.js.map +0 -1
  298. package/dist/src/ee/council-bridge.js.map +0 -1
  299. package/dist/src/ee/embedding-cache.js.map +0 -1
  300. package/dist/src/ee/export-transcripts.js.map +0 -1
  301. package/dist/src/ee/extract-session.js.map +0 -1
  302. package/dist/src/ee/extract-session.test.js.map +0 -1
  303. package/dist/src/ee/health.js.map +0 -1
  304. package/dist/src/ee/index.js.map +0 -1
  305. package/dist/src/ee/intercept.js.map +0 -1
  306. package/dist/src/ee/intercept.test.js.map +0 -1
  307. package/dist/src/ee/judge.js.map +0 -1
  308. package/dist/src/ee/judge.test.js.map +0 -1
  309. package/dist/src/ee/mistake-detector.js.map +0 -1
  310. package/dist/src/ee/mistake-detector.test.js.map +0 -1
  311. package/dist/src/ee/offline-queue.js.map +0 -1
  312. package/dist/src/ee/offline-queue.test.js.map +0 -1
  313. package/dist/src/ee/phase-outcome.js.map +0 -1
  314. package/dist/src/ee/phase-outcome.test.js.map +0 -1
  315. package/dist/src/ee/phase-tracker.js.map +0 -1
  316. package/dist/src/ee/phase-tracker.test.js.map +0 -1
  317. package/dist/src/ee/posttool.js.map +0 -1
  318. package/dist/src/ee/posttool.test.js.map +0 -1
  319. package/dist/src/ee/prompt-stale.js.map +0 -1
  320. package/dist/src/ee/prompt-stale.test.js.map +0 -1
  321. package/dist/src/ee/recall-ledger.js.map +0 -1
  322. package/dist/src/ee/recall-mirror.test.js.map +0 -1
  323. package/dist/src/ee/render.js.map +0 -1
  324. package/dist/src/ee/render.test.js.map +0 -1
  325. package/dist/src/ee/scope.js.map +0 -1
  326. package/dist/src/ee/scope.test.js.map +0 -1
  327. package/dist/src/ee/search.js.map +0 -1
  328. package/dist/src/ee/session-trajectory.js.map +0 -1
  329. package/dist/src/ee/session-trajectory.test.js.map +0 -1
  330. package/dist/src/ee/tenant.js.map +0 -1
  331. package/dist/src/ee/touch.test.js.map +0 -1
  332. package/dist/src/ee/transcript-emit.js.map +0 -1
  333. package/dist/src/ee/types.js.map +0 -1
  334. package/dist/src/flow/__tests__/migration.test.js.map +0 -1
  335. package/dist/src/flow/__tests__/parser.test.js.map +0 -1
  336. package/dist/src/flow/__tests__/run-manager-product.test.js.map +0 -1
  337. package/dist/src/flow/__tests__/run-manager.test.js.map +0 -1
  338. package/dist/src/flow/__tests__/scaffold-checkpoint.test.js.map +0 -1
  339. package/dist/src/flow/__tests__/scaffold.test.js.map +0 -1
  340. package/dist/src/flow/__tests__/warning-persist.test.js.map +0 -1
  341. package/dist/src/flow/artifact-io.js.map +0 -1
  342. package/dist/src/flow/compaction/__tests__/compress.test.js.map +0 -1
  343. package/dist/src/flow/compaction/__tests__/extract.test.js.map +0 -1
  344. package/dist/src/flow/compaction/__tests__/preserve.test.js.map +0 -1
  345. package/dist/src/flow/compaction/compress.js.map +0 -1
  346. package/dist/src/flow/compaction/extract.js.map +0 -1
  347. package/dist/src/flow/compaction/index.js.map +0 -1
  348. package/dist/src/flow/compaction/preserve.js.map +0 -1
  349. package/dist/src/flow/index.js.map +0 -1
  350. package/dist/src/flow/migration.js.map +0 -1
  351. package/dist/src/flow/parser.js.map +0 -1
  352. package/dist/src/flow/run-manager.js.map +0 -1
  353. package/dist/src/flow/scaffold-checkpoint.js.map +0 -1
  354. package/dist/src/flow/scaffold.js.map +0 -1
  355. package/dist/src/flow/warning-persist.js.map +0 -1
  356. package/dist/src/generated/version.js.map +0 -1
  357. package/dist/src/gsd/__tests__/complexity.test.js.map +0 -1
  358. package/dist/src/gsd/__tests__/directives.test.js.map +0 -1
  359. package/dist/src/gsd/__tests__/gray-areas.test.js.map +0 -1
  360. package/dist/src/gsd/__tests__/types.test.js.map +0 -1
  361. package/dist/src/gsd/complexity.js.map +0 -1
  362. package/dist/src/gsd/directives.js.map +0 -1
  363. package/dist/src/gsd/gray-areas.js.map +0 -1
  364. package/dist/src/gsd/index.js.map +0 -1
  365. package/dist/src/gsd/types.js.map +0 -1
  366. package/dist/src/headless/__tests__/council-answers.test.js.map +0 -1
  367. package/dist/src/headless/council-answers.js.map +0 -1
  368. package/dist/src/headless/output.js.map +0 -1
  369. package/dist/src/headless/output.test.js.map +0 -1
  370. package/dist/src/hooks/config.js.map +0 -1
  371. package/dist/src/hooks/index.js.map +0 -1
  372. package/dist/src/hooks/types.js.map +0 -1
  373. package/dist/src/index.js.map +0 -1
  374. package/dist/src/lsp/builtins.js.map +0 -1
  375. package/dist/src/lsp/builtins.test.js.map +0 -1
  376. package/dist/src/lsp/client.js.map +0 -1
  377. package/dist/src/lsp/manager.js.map +0 -1
  378. package/dist/src/lsp/manager.test.js.map +0 -1
  379. package/dist/src/lsp/npm-cache.js.map +0 -1
  380. package/dist/src/lsp/npm-cache.test.js.map +0 -1
  381. package/dist/src/lsp/runtime.js.map +0 -1
  382. package/dist/src/lsp/smoke.test.js.map +0 -1
  383. package/dist/src/lsp/types.js.map +0 -1
  384. package/dist/src/maintain/__tests__/codebase-intel.test.js.map +0 -1
  385. package/dist/src/maintain/__tests__/gh-create-pr.test.js.map +0 -1
  386. package/dist/src/maintain/__tests__/pr-builder.test.js.map +0 -1
  387. package/dist/src/maintain/__tests__/repo-map.test.js.map +0 -1
  388. package/dist/src/maintain/__tests__/task-runner.test.js.map +0 -1
  389. package/dist/src/maintain/codebase-intel.js.map +0 -1
  390. package/dist/src/maintain/gh-create-pr.js.map +0 -1
  391. package/dist/src/maintain/index.js.map +0 -1
  392. package/dist/src/maintain/pr-builder.js.map +0 -1
  393. package/dist/src/maintain/repo-map.js.map +0 -1
  394. package/dist/src/maintain/task-runner.js.map +0 -1
  395. package/dist/src/maintain/types.js.map +0 -1
  396. package/dist/src/mcp/__tests__/auto-setup.test.js.map +0 -1
  397. package/dist/src/mcp/__tests__/cap-tool-result.test.js.map +0 -1
  398. package/dist/src/mcp/__tests__/ee-tools.test.js.map +0 -1
  399. package/dist/src/mcp/__tests__/forensics-tools.test.js.map +0 -1
  400. package/dist/src/mcp/__tests__/harness-driver-action-tools.spec.js.map +0 -1
  401. package/dist/src/mcp/__tests__/harness-driver-async-tools.spec.js.map +0 -1
  402. package/dist/src/mcp/__tests__/harness-driver-read-tools.spec.js.map +0 -1
  403. package/dist/src/mcp/__tests__/harness-driver-security.spec.js.map +0 -1
  404. package/dist/src/mcp/__tests__/harness-driver.spec.js.map +0 -1
  405. package/dist/src/mcp/__tests__/lazy-schema.spec.js.map +0 -1
  406. package/dist/src/mcp/__tests__/lsp-tools.test.js.map +0 -1
  407. package/dist/src/mcp/__tests__/mcp-keychain.test.js.map +0 -1
  408. package/dist/src/mcp/__tests__/research-onboarding.test.js.map +0 -1
  409. package/dist/src/mcp/__tests__/runtime-hydration.test.js.map +0 -1
  410. package/dist/src/mcp/__tests__/runtime-output-cap.test.js.map +0 -1
  411. package/dist/src/mcp/__tests__/runtime-sanitize.test.js.map +0 -1
  412. package/dist/src/mcp/__tests__/self-verify-jobs.test.js.map +0 -1
  413. package/dist/src/mcp/__tests__/smart-filter.test.js.map +0 -1
  414. package/dist/src/mcp/__tests__/tools-server.smoke.test.js.map +0 -1
  415. package/dist/src/mcp/auto-setup.js.map +0 -1
  416. package/dist/src/mcp/cap-tool-result.js.map +0 -1
  417. package/dist/src/mcp/catalog.js.map +0 -1
  418. package/dist/src/mcp/ee-tools.js.map +0 -1
  419. package/dist/src/mcp/forensics-tools.js.map +0 -1
  420. package/dist/src/mcp/lsp-tools.js.map +0 -1
  421. package/dist/src/mcp/mcp-keychain.js.map +0 -1
  422. package/dist/src/mcp/oauth-callback.js.map +0 -1
  423. package/dist/src/mcp/oauth-provider.js.map +0 -1
  424. package/dist/src/mcp/opentui-spawn.js.map +0 -1
  425. package/dist/src/mcp/parse-headers.js.map +0 -1
  426. package/dist/src/mcp/parse-headers.test.js.map +0 -1
  427. package/dist/src/mcp/research-onboarding.js.map +0 -1
  428. package/dist/src/mcp/runtime.js.map +0 -1
  429. package/dist/src/mcp/self-verify-jobs.js.map +0 -1
  430. package/dist/src/mcp/smart-filter.js.map +0 -1
  431. package/dist/src/mcp/smoke.test.js.map +0 -1
  432. package/dist/src/mcp/tools-server.js.map +0 -1
  433. package/dist/src/mcp/validate.js.map +0 -1
  434. package/dist/src/models/__tests__/registry.test.js.map +0 -1
  435. package/dist/src/models/catalog-client.js.map +0 -1
  436. package/dist/src/models/catalog-gemini.test.js.map +0 -1
  437. package/dist/src/models/catalog-url.test.js.map +0 -1
  438. package/dist/src/models/catalog-validation.test.js.map +0 -1
  439. package/dist/src/models/classify-tier.js.map +0 -1
  440. package/dist/src/models/index.js.map +0 -1
  441. package/dist/src/models/registry.js.map +0 -1
  442. package/dist/src/ops/__tests__/doctor-council-mcp.test.js.map +0 -1
  443. package/dist/src/ops/__tests__/doctor-ee-health.test.js.map +0 -1
  444. package/dist/src/ops/bug-report.js.map +0 -1
  445. package/dist/src/ops/bug-report.test.js.map +0 -1
  446. package/dist/src/ops/doctor.js.map +0 -1
  447. package/dist/src/ops/doctor.test.js.map +0 -1
  448. package/dist/src/orchestrator/__tests__/agent-base-url-switch.test.js.map +0 -1
  449. package/dist/src/orchestrator/__tests__/batch-turn-runner.test.js.map +0 -1
  450. package/dist/src/orchestrator/__tests__/council-manager.test.js.map +0 -1
  451. package/dist/src/orchestrator/__tests__/cross-turn-dedup.test.js.map +0 -1
  452. package/dist/src/orchestrator/__tests__/current-call-id.test.js.map +0 -1
  453. package/dist/src/orchestrator/__tests__/error-forensics.test.js.map +0 -1
  454. package/dist/src/orchestrator/__tests__/flow-resume.test.js.map +0 -1
  455. package/dist/src/orchestrator/__tests__/humanize-api-error.test.js.map +0 -1
  456. package/dist/src/orchestrator/__tests__/message-processor.test.js.map +0 -1
  457. package/dist/src/orchestrator/__tests__/message-write-ahead.test.js.map +0 -1
  458. package/dist/src/orchestrator/__tests__/read-path-budget.test.js.map +0 -1
  459. package/dist/src/orchestrator/__tests__/retry-classifier.test.js.map +0 -1
  460. package/dist/src/orchestrator/__tests__/retry-stream.test.js.map +0 -1
  461. package/dist/src/orchestrator/__tests__/route-feedback.test.js.map +0 -1
  462. package/dist/src/orchestrator/__tests__/stream-runner.test.js.map +0 -1
  463. package/dist/src/orchestrator/__tests__/sub-agent-model-tier.test.js.map +0 -1
  464. package/dist/src/orchestrator/__tests__/usage-events-shape.test.js.map +0 -1
  465. package/dist/src/orchestrator/__tests__/usage-normalizer-c1.test.js.map +0 -1
  466. package/dist/src/orchestrator/__tests__/usage-shape-threading.test.js.map +0 -1
  467. package/dist/src/orchestrator/__tests__/write-ahead.test.js.map +0 -1
  468. package/dist/src/orchestrator/abort.js.map +0 -1
  469. package/dist/src/orchestrator/abort.test.js.map +0 -1
  470. package/dist/src/orchestrator/agent-options.js.map +0 -1
  471. package/dist/src/orchestrator/agent.test.js.map +0 -1
  472. package/dist/src/orchestrator/batch-turn-runner.js.map +0 -1
  473. package/dist/src/orchestrator/batch-utils.js.map +0 -1
  474. package/dist/src/orchestrator/cleanup.test.js.map +0 -1
  475. package/dist/src/orchestrator/compaction.js.map +0 -1
  476. package/dist/src/orchestrator/compaction.test.js.map +0 -1
  477. package/dist/src/orchestrator/council-manager.js.map +0 -1
  478. package/dist/src/orchestrator/cross-turn-dedup.js.map +0 -1
  479. package/dist/src/orchestrator/delegations.js.map +0 -1
  480. package/dist/src/orchestrator/delegations.test.js.map +0 -1
  481. package/dist/src/orchestrator/error-utils.js.map +0 -1
  482. package/dist/src/orchestrator/flow-resume.js.map +0 -1
  483. package/dist/src/orchestrator/grounding-check.js.map +0 -1
  484. package/dist/src/orchestrator/grounding-check.test.js.map +0 -1
  485. package/dist/src/orchestrator/interrupted-turn.js.map +0 -1
  486. package/dist/src/orchestrator/interrupted-turn.test.js.map +0 -1
  487. package/dist/src/orchestrator/message-processor.js.map +0 -1
  488. package/dist/src/orchestrator/message-seq.js.map +0 -1
  489. package/dist/src/orchestrator/message-seq.test.js.map +0 -1
  490. package/dist/src/orchestrator/orchestrator.js.map +0 -1
  491. package/dist/src/orchestrator/pending-calls.js.map +0 -1
  492. package/dist/src/orchestrator/pending-calls.test.js.map +0 -1
  493. package/dist/src/orchestrator/prompts.js.map +0 -1
  494. package/dist/src/orchestrator/provider-options-shape.js.map +0 -1
  495. package/dist/src/orchestrator/provider-options-shape.spec.js.map +0 -1
  496. package/dist/src/orchestrator/read-path-budget.js.map +0 -1
  497. package/dist/src/orchestrator/reasoning.js.map +0 -1
  498. package/dist/src/orchestrator/reasoning.test.js.map +0 -1
  499. package/dist/src/orchestrator/repair-tool-call.js.map +0 -1
  500. package/dist/src/orchestrator/repetition-detector.js.map +0 -1
  501. package/dist/src/orchestrator/repetition-detector.test.js.map +0 -1
  502. package/dist/src/orchestrator/retry-classifier.js.map +0 -1
  503. package/dist/src/orchestrator/retry-stream.js.map +0 -1
  504. package/dist/src/orchestrator/sandbox.test.js.map +0 -1
  505. package/dist/src/orchestrator/scope-ceiling.js.map +0 -1
  506. package/dist/src/orchestrator/scope-ceiling.test.js.map +0 -1
  507. package/dist/src/orchestrator/scope-reminder.js.map +0 -1
  508. package/dist/src/orchestrator/scope-reminder.test.js.map +0 -1
  509. package/dist/src/orchestrator/stall-rescue.js.map +0 -1
  510. package/dist/src/orchestrator/stall-rescue.test.js.map +0 -1
  511. package/dist/src/orchestrator/stall-watchdog.js.map +0 -1
  512. package/dist/src/orchestrator/stall-watchdog.test.js.map +0 -1
  513. package/dist/src/orchestrator/stream-runner.js.map +0 -1
  514. package/dist/src/orchestrator/sub-agent-cap.js.map +0 -1
  515. package/dist/src/orchestrator/sub-agent-cap.test.js.map +0 -1
  516. package/dist/src/orchestrator/sub-agent-model-tier.js.map +0 -1
  517. package/dist/src/orchestrator/subagent-compactor.js.map +0 -1
  518. package/dist/src/orchestrator/subagent-compactor.spec.js.map +0 -1
  519. package/dist/src/orchestrator/text-tool-call-detector.js.map +0 -1
  520. package/dist/src/orchestrator/text-tool-call-detector.test.js.map +0 -1
  521. package/dist/src/orchestrator/token-counter.js.map +0 -1
  522. package/dist/src/orchestrator/token-counter.test.js.map +0 -1
  523. package/dist/src/orchestrator/tool-args-hash.js.map +0 -1
  524. package/dist/src/orchestrator/tool-args-hash.test.js.map +0 -1
  525. package/dist/src/orchestrator/tool-args-repair.js.map +0 -1
  526. package/dist/src/orchestrator/tool-args-repair.test.js.map +0 -1
  527. package/dist/src/orchestrator/tool-loop-cap.js.map +0 -1
  528. package/dist/src/orchestrator/tool-loop-cap.test.js.map +0 -1
  529. package/dist/src/orchestrator/tool-repetition-detector.js.map +0 -1
  530. package/dist/src/orchestrator/tool-repetition-detector.test.js.map +0 -1
  531. package/dist/src/orchestrator/tool-utils.js.map +0 -1
  532. package/dist/src/orchestrator/turn-runner-deps.js.map +0 -1
  533. package/dist/src/pil/__tests__/budget.test.js.map +0 -1
  534. package/dist/src/pil/__tests__/clarity-gate.test.js.map +0 -1
  535. package/dist/src/pil/__tests__/config.test.js.map +0 -1
  536. package/dist/src/pil/__tests__/discovery-cache.test.js.map +0 -1
  537. package/dist/src/pil/__tests__/discovery-types.test.js.map +0 -1
  538. package/dist/src/pil/__tests__/discovery.test.js.map +0 -1
  539. package/dist/src/pil/__tests__/dual-run.test.js.map +0 -1
  540. package/dist/src/pil/__tests__/layer1-intent-trace.test.js.map +0 -1
  541. package/dist/src/pil/__tests__/layer1-intent.test.js.map +0 -1
  542. package/dist/src/pil/__tests__/layer15-context-scan.test.js.map +0 -1
  543. package/dist/src/pil/__tests__/layer16-clarity.test.js.map +0 -1
  544. package/dist/src/pil/__tests__/layer17-feasibility.test.js.map +0 -1
  545. package/dist/src/pil/__tests__/layer18-acceptance.test.js.map +0 -1
  546. package/dist/src/pil/__tests__/layer2-personality.test.js.map +0 -1
  547. package/dist/src/pil/__tests__/layer3-ee-injection.test.js.map +0 -1
  548. package/dist/src/pil/__tests__/layer3-injected-chunk.test.js.map +0 -1
  549. package/dist/src/pil/__tests__/layer4-gsd.test.js.map +0 -1
  550. package/dist/src/pil/__tests__/layer5-context.test.js.map +0 -1
  551. package/dist/src/pil/__tests__/layer6-output.test.js.map +0 -1
  552. package/dist/src/pil/__tests__/llm-classify.test.js.map +0 -1
  553. package/dist/src/pil/__tests__/native-capabilities-workbook.test.js.map +0 -1
  554. package/dist/src/pil/__tests__/ollama-classify.test.js.map +0 -1
  555. package/dist/src/pil/__tests__/orchestrator-integration.test.js.map +0 -1
  556. package/dist/src/pil/__tests__/pipeline.test.js.map +0 -1
  557. package/dist/src/pil/__tests__/renderer-coverage.test.js.map +0 -1
  558. package/dist/src/pil/__tests__/response-tools.test.js.map +0 -1
  559. package/dist/src/pil/__tests__/schema.test.js.map +0 -1
  560. package/dist/src/pil/__tests__/scoreComplexity.test.js.map +0 -1
  561. package/dist/src/pil/__tests__/scoreSufficiency.test.js.map +0 -1
  562. package/dist/src/pil/__tests__/store.test.js.map +0 -1
  563. package/dist/src/pil/__tests__/task-tier-map.test.js.map +0 -1
  564. package/dist/src/pil/agent-operating-contract.js.map +0 -1
  565. package/dist/src/pil/agent-operating-contract.test.js.map +0 -1
  566. package/dist/src/pil/budget-log.js.map +0 -1
  567. package/dist/src/pil/budget.js.map +0 -1
  568. package/dist/src/pil/cheap-model-playbook.js.map +0 -1
  569. package/dist/src/pil/cheap-model-playbook.test.js.map +0 -1
  570. package/dist/src/pil/cheap-model-workbooks.js.map +0 -1
  571. package/dist/src/pil/cheap-model-workbooks.test.js.map +0 -1
  572. package/dist/src/pil/clarity-gate.js.map +0 -1
  573. package/dist/src/pil/config.js.map +0 -1
  574. package/dist/src/pil/discovery-cache.js.map +0 -1
  575. package/dist/src/pil/discovery-types.js.map +0 -1
  576. package/dist/src/pil/discovery.js.map +0 -1
  577. package/dist/src/pil/index.js.map +0 -1
  578. package/dist/src/pil/layer1-intent.js.map +0 -1
  579. package/dist/src/pil/layer1-intent.test.js.map +0 -1
  580. package/dist/src/pil/layer15-context-scan.js.map +0 -1
  581. package/dist/src/pil/layer16-clarity.js.map +0 -1
  582. package/dist/src/pil/layer16-clarity.test.js +0 -31
  583. package/dist/src/pil/layer16-clarity.test.js.map +0 -1
  584. package/dist/src/pil/layer17-feasibility.js.map +0 -1
  585. package/dist/src/pil/layer18-acceptance.js.map +0 -1
  586. package/dist/src/pil/layer1_5-complexity-size.js.map +0 -1
  587. package/dist/src/pil/layer1_5-complexity-size.test.js.map +0 -1
  588. package/dist/src/pil/layer2-personality.js.map +0 -1
  589. package/dist/src/pil/layer3-ee-injection.js.map +0 -1
  590. package/dist/src/pil/layer4-gsd.js.map +0 -1
  591. package/dist/src/pil/layer5-context.js.map +0 -1
  592. package/dist/src/pil/layer6-output.js.map +0 -1
  593. package/dist/src/pil/llm-classify.js.map +0 -1
  594. package/dist/src/pil/native-capabilities-workbook.js.map +0 -1
  595. package/dist/src/pil/ollama-classify.js.map +0 -1
  596. package/dist/src/pil/pipeline.js.map +0 -1
  597. package/dist/src/pil/response-tools.js.map +0 -1
  598. package/dist/src/pil/schema.js.map +0 -1
  599. package/dist/src/pil/session-state.js.map +0 -1
  600. package/dist/src/pil/session-state.test.js.map +0 -1
  601. package/dist/src/pil/store.js.map +0 -1
  602. package/dist/src/pil/task-tier-map.js.map +0 -1
  603. package/dist/src/pil/timeout.js.map +0 -1
  604. package/dist/src/pil/types.js.map +0 -1
  605. package/dist/src/product-loop/__tests__/artifact-io.test.js.map +0 -1
  606. package/dist/src/product-loop/__tests__/assumption-ledger.test.js.map +0 -1
  607. package/dist/src/product-loop/__tests__/backlog-builder.test.js.map +0 -1
  608. package/dist/src/product-loop/__tests__/backlog-store.test.js.map +0 -1
  609. package/dist/src/product-loop/__tests__/cb2-retry-bonus.test.js.map +0 -1
  610. package/dist/src/product-loop/__tests__/circuit-breakers-coverage.test.js.map +0 -1
  611. package/dist/src/product-loop/__tests__/circuit-breakers.test.js.map +0 -1
  612. package/dist/src/product-loop/__tests__/complexity-routing.spec.js.map +0 -1
  613. package/dist/src/product-loop/__tests__/context-policy.test.js.map +0 -1
  614. package/dist/src/product-loop/__tests__/cost-preview.test.js.map +0 -1
  615. package/dist/src/product-loop/__tests__/cost-scoper.test.js.map +0 -1
  616. package/dist/src/product-loop/__tests__/cross-run-memory.test.js.map +0 -1
  617. package/dist/src/product-loop/__tests__/design-output.spec.js.map +0 -1
  618. package/dist/src/product-loop/__tests__/discover.test.js.map +0 -1
  619. package/dist/src/product-loop/__tests__/discovery-context-format.test.js.map +0 -1
  620. package/dist/src/product-loop/__tests__/discovery-council-runner.test.js.map +0 -1
  621. package/dist/src/product-loop/__tests__/discovery-detection.test.js.map +0 -1
  622. package/dist/src/product-loop/__tests__/discovery-ecosystem.test.js.map +0 -1
  623. package/dist/src/product-loop/__tests__/discovery-integration.test.js.map +0 -1
  624. package/dist/src/product-loop/__tests__/discovery-interview.test.js.map +0 -1
  625. package/dist/src/product-loop/__tests__/discovery-migrations.test.js.map +0 -1
  626. package/dist/src/product-loop/__tests__/discovery-persistence.test.js.map +0 -1
  627. package/dist/src/product-loop/__tests__/discovery-prompt-parser.test.js.map +0 -1
  628. package/dist/src/product-loop/__tests__/discovery-prompt-specificity.test.js.map +0 -1
  629. package/dist/src/product-loop/__tests__/discovery-recommender-ecosystem.test.js.map +0 -1
  630. package/dist/src/product-loop/__tests__/discovery-recommender.test.js.map +0 -1
  631. package/dist/src/product-loop/__tests__/discovery-schema.test.js.map +0 -1
  632. package/dist/src/product-loop/__tests__/done-gate-coverage.test.js.map +0 -1
  633. package/dist/src/product-loop/__tests__/done-gate.test.js.map +0 -1
  634. package/dist/src/product-loop/__tests__/ee-extract-wiring.test.js.map +0 -1
  635. package/dist/src/product-loop/__tests__/extract-to-ee.test.js.map +0 -1
  636. package/dist/src/product-loop/__tests__/feedback-routing.test.js.map +0 -1
  637. package/dist/src/product-loop/__tests__/gather-selectable-alts.test.js.map +0 -1
  638. package/dist/src/product-loop/__tests__/hot-path.spec.js.map +0 -1
  639. package/dist/src/product-loop/__tests__/integration.test.js.map +0 -1
  640. package/dist/src/product-loop/__tests__/loop-driver-audit.test.js.map +0 -1
  641. package/dist/src/product-loop/__tests__/loop-driver.test.js.map +0 -1
  642. package/dist/src/product-loop/__tests__/maintenance-task-synthesis.test.js.map +0 -1
  643. package/dist/src/product-loop/__tests__/phase-a1-a3-sprint-runner.test.js.map +0 -1
  644. package/dist/src/product-loop/__tests__/phase-a2-backlog-build.test.js.map +0 -1
  645. package/dist/src/product-loop/__tests__/phase-budget.test.js.map +0 -1
  646. package/dist/src/product-loop/__tests__/phase-orchestrator-integration.test.js.map +0 -1
  647. package/dist/src/product-loop/__tests__/phase-plan.test.js.map +0 -1
  648. package/dist/src/product-loop/__tests__/phase-rituals.test.js.map +0 -1
  649. package/dist/src/product-loop/__tests__/phase-runner.test.js.map +0 -1
  650. package/dist/src/product-loop/__tests__/phase-tracker-bridge.test.js.map +0 -1
  651. package/dist/src/product-loop/__tests__/pick-backend-stack.test.js.map +0 -1
  652. package/dist/src/product-loop/__tests__/product-identity.test.js.map +0 -1
  653. package/dist/src/product-loop/__tests__/progress-snapshot.test.js.map +0 -1
  654. package/dist/src/product-loop/__tests__/reality-anchor.test.js.map +0 -1
  655. package/dist/src/product-loop/__tests__/repo-audit.test.js.map +0 -1
  656. package/dist/src/product-loop/__tests__/repo-brief.test.js.map +0 -1
  657. package/dist/src/product-loop/__tests__/role-memory.test.js.map +0 -1
  658. package/dist/src/product-loop/__tests__/role-registry.test.js.map +0 -1
  659. package/dist/src/product-loop/__tests__/role-routing-ee.test.js.map +0 -1
  660. package/dist/src/product-loop/__tests__/route-decision-emit.test.js.map +0 -1
  661. package/dist/src/product-loop/__tests__/seed-questions.test.js.map +0 -1
  662. package/dist/src/product-loop/__tests__/ship-polish.test.js.map +0 -1
  663. package/dist/src/product-loop/__tests__/sprint-planner.test.js.map +0 -1
  664. package/dist/src/product-loop/__tests__/sprint-runner-backlog.test.js.map +0 -1
  665. package/dist/src/product-loop/__tests__/sprint-runner-emit.test.js.map +0 -1
  666. package/dist/src/product-loop/__tests__/sprint-runner-phase-chunks.test.js.map +0 -1
  667. package/dist/src/product-loop/__tests__/sprint-runner.test.js.map +0 -1
  668. package/dist/src/product-loop/__tests__/sprint-self-verify.test.js.map +0 -1
  669. package/dist/src/product-loop/__tests__/sprint-store.test.js.map +0 -1
  670. package/dist/src/product-loop/__tests__/stakeholder-acl.test.js.map +0 -1
  671. package/dist/src/product-loop/__tests__/state-md-ee-injections.test.js.map +0 -1
  672. package/dist/src/product-loop/__tests__/sufficiency-routing.spec.js.map +0 -1
  673. package/dist/src/product-loop/__tests__/typed-artifacts.test.js.map +0 -1
  674. package/dist/src/product-loop/__tests__/types.test.js.map +0 -1
  675. package/dist/src/product-loop/__tests__/verify-failure-threshold.test.js.map +0 -1
  676. package/dist/src/product-loop/__tests__/verify-failure-tracking.test.js.map +0 -1
  677. package/dist/src/product-loop/__tests__/verify-result.test.js.map +0 -1
  678. package/dist/src/product-loop/artifact-io.js.map +0 -1
  679. package/dist/src/product-loop/assumption-ledger.js.map +0 -1
  680. package/dist/src/product-loop/backlog-builder.js.map +0 -1
  681. package/dist/src/product-loop/backlog-store.js.map +0 -1
  682. package/dist/src/product-loop/circuit-breakers.js.map +0 -1
  683. package/dist/src/product-loop/context-policy.js.map +0 -1
  684. package/dist/src/product-loop/cost-preview.js.map +0 -1
  685. package/dist/src/product-loop/cost-scoper.js.map +0 -1
  686. package/dist/src/product-loop/cross-run-memory.js.map +0 -1
  687. package/dist/src/product-loop/design-output.js.map +0 -1
  688. package/dist/src/product-loop/discover.js.map +0 -1
  689. package/dist/src/product-loop/discovery-context-format.js.map +0 -1
  690. package/dist/src/product-loop/discovery-council-runner.js.map +0 -1
  691. package/dist/src/product-loop/discovery-detection.js.map +0 -1
  692. package/dist/src/product-loop/discovery-ecosystem.js.map +0 -1
  693. package/dist/src/product-loop/discovery-interview.js.map +0 -1
  694. package/dist/src/product-loop/discovery-migrations.js.map +0 -1
  695. package/dist/src/product-loop/discovery-persistence.js.map +0 -1
  696. package/dist/src/product-loop/discovery-prompt-parser.js.map +0 -1
  697. package/dist/src/product-loop/discovery-recommender.js.map +0 -1
  698. package/dist/src/product-loop/discovery-schema.js.map +0 -1
  699. package/dist/src/product-loop/done-gate.js.map +0 -1
  700. package/dist/src/product-loop/feedback-routing.js.map +0 -1
  701. package/dist/src/product-loop/gather.js.map +0 -1
  702. package/dist/src/product-loop/index.js.map +0 -1
  703. package/dist/src/product-loop/loop-driver.js.map +0 -1
  704. package/dist/src/product-loop/phase-budget.js.map +0 -1
  705. package/dist/src/product-loop/phase-plan.js.map +0 -1
  706. package/dist/src/product-loop/phase-rituals.js.map +0 -1
  707. package/dist/src/product-loop/phase-runner.js.map +0 -1
  708. package/dist/src/product-loop/phase-tracker-bridge.js.map +0 -1
  709. package/dist/src/product-loop/product-identity.js.map +0 -1
  710. package/dist/src/product-loop/progress-snapshot.js.map +0 -1
  711. package/dist/src/product-loop/reality-anchor.js.map +0 -1
  712. package/dist/src/product-loop/repo-audit.js.map +0 -1
  713. package/dist/src/product-loop/repo-brief.js.map +0 -1
  714. package/dist/src/product-loop/role-memory.js.map +0 -1
  715. package/dist/src/product-loop/role-registry.js.map +0 -1
  716. package/dist/src/product-loop/seed-questions.js.map +0 -1
  717. package/dist/src/product-loop/ship-polish.js.map +0 -1
  718. package/dist/src/product-loop/sprint-planner.js.map +0 -1
  719. package/dist/src/product-loop/sprint-runner.js.map +0 -1
  720. package/dist/src/product-loop/sprint-self-verify.js.map +0 -1
  721. package/dist/src/product-loop/sprint-store.js.map +0 -1
  722. package/dist/src/product-loop/stakeholder-acl.js.map +0 -1
  723. package/dist/src/product-loop/typed-artifacts.js.map +0 -1
  724. package/dist/src/product-loop/types.js.map +0 -1
  725. package/dist/src/product-loop/verify-failure-tracking.js.map +0 -1
  726. package/dist/src/product-loop/verify-result.js.map +0 -1
  727. package/dist/src/providers/__test-utils__/load-fixture.js.map +0 -1
  728. package/dist/src/providers/__tests__/adapter-oauth-wiring.test.js.map +0 -1
  729. package/dist/src/providers/__tests__/capabilities-cosmetic.test.js.map +0 -1
  730. package/dist/src/providers/__tests__/capabilities-flags.test.js.map +0 -1
  731. package/dist/src/providers/__tests__/capabilities-provider-options.test.js.map +0 -1
  732. package/dist/src/providers/__tests__/capabilities-sanitize.test.js.map +0 -1
  733. package/dist/src/providers/__tests__/capabilities.test.js.map +0 -1
  734. package/dist/src/providers/__tests__/provider-coverage.test.js.map +0 -1
  735. package/dist/src/providers/__tests__/reasoning-roundtrip.test.js.map +0 -1
  736. package/dist/src/providers/__tests__/runtime-integration.test.js.map +0 -1
  737. package/dist/src/providers/__tests__/runtime.test.js.map +0 -1
  738. package/dist/src/providers/__tests__/siliconflow-sse-repair.test.js.map +0 -1
  739. package/dist/src/providers/__tests__/strategies-registry.test.js.map +0 -1
  740. package/dist/src/providers/__tests__/strategies-resolve.test.js.map +0 -1
  741. package/dist/src/providers/__tests__/wire-debug.test.js.map +0 -1
  742. package/dist/src/providers/adapter.js.map +0 -1
  743. package/dist/src/providers/adapter.test.js.map +0 -1
  744. package/dist/src/providers/anthropic.js.map +0 -1
  745. package/dist/src/providers/auth/__tests__/browser-flow.test.js.map +0 -1
  746. package/dist/src/providers/auth/__tests__/device-flow.test.js.map +0 -1
  747. package/dist/src/providers/auth/__tests__/gemini-oauth.test.js.map +0 -1
  748. package/dist/src/providers/auth/__tests__/grok-oauth.test.js.map +0 -1
  749. package/dist/src/providers/auth/__tests__/openai-oauth.test.js.map +0 -1
  750. package/dist/src/providers/auth/__tests__/token-store.test.js.map +0 -1
  751. package/dist/src/providers/auth/browser-flow.js.map +0 -1
  752. package/dist/src/providers/auth/device-flow.js.map +0 -1
  753. package/dist/src/providers/auth/gemini-oauth.js.map +0 -1
  754. package/dist/src/providers/auth/grok-oauth.js.map +0 -1
  755. package/dist/src/providers/auth/openai-oauth.js.map +0 -1
  756. package/dist/src/providers/auth/registry.js.map +0 -1
  757. package/dist/src/providers/auth/token-store.js.map +0 -1
  758. package/dist/src/providers/auth/types.js.map +0 -1
  759. package/dist/src/providers/capabilities.js.map +0 -1
  760. package/dist/src/providers/endpoints.js.map +0 -1
  761. package/dist/src/providers/errors.js.map +0 -1
  762. package/dist/src/providers/errors.test.js.map +0 -1
  763. package/dist/src/providers/gemini.js.map +0 -1
  764. package/dist/src/providers/gemini.test.js.map +0 -1
  765. package/dist/src/providers/index.js.map +0 -1
  766. package/dist/src/providers/keychain.js.map +0 -1
  767. package/dist/src/providers/keychain.test.js.map +0 -1
  768. package/dist/src/providers/mcp-vision-bridge.js.map +0 -1
  769. package/dist/src/providers/mcp-vision-bridge.test.js.map +0 -1
  770. package/dist/src/providers/ollama.js.map +0 -1
  771. package/dist/src/providers/ollama.test.js.map +0 -1
  772. package/dist/src/providers/openai-compatible.js.map +0 -1
  773. package/dist/src/providers/openai-compatible.test.js.map +0 -1
  774. package/dist/src/providers/openai.js.map +0 -1
  775. package/dist/src/providers/openai.test.js.map +0 -1
  776. package/dist/src/providers/patch-zod-schema.js.map +0 -1
  777. package/dist/src/providers/pricing.js.map +0 -1
  778. package/dist/src/providers/pricing.test.js.map +0 -1
  779. package/dist/src/providers/prompt-cache-key.spec.js.map +0 -1
  780. package/dist/src/providers/runtime-mock.spec.js.map +0 -1
  781. package/dist/src/providers/runtime.js.map +0 -1
  782. package/dist/src/providers/siliconflow-sse-repair.js.map +0 -1
  783. package/dist/src/providers/strategies/anthropic.strategy.js.map +0 -1
  784. package/dist/src/providers/strategies/base.strategy.js.map +0 -1
  785. package/dist/src/providers/strategies/deepseek.strategy.js.map +0 -1
  786. package/dist/src/providers/strategies/google.strategy.js.map +0 -1
  787. package/dist/src/providers/strategies/ollama.strategy.js.map +0 -1
  788. package/dist/src/providers/strategies/openai.strategy.js.map +0 -1
  789. package/dist/src/providers/strategies/registry.js.map +0 -1
  790. package/dist/src/providers/strategies/siliconflow.strategy.js.map +0 -1
  791. package/dist/src/providers/strategies/xai.strategy.js.map +0 -1
  792. package/dist/src/providers/stream-loop.js.map +0 -1
  793. package/dist/src/providers/types.js.map +0 -1
  794. package/dist/src/providers/vision-proxy.js.map +0 -1
  795. package/dist/src/providers/vision-proxy.test.js.map +0 -1
  796. package/dist/src/providers/wire-debug.js.map +0 -1
  797. package/dist/src/reporter/__tests__/acl-check.test.js.map +0 -1
  798. package/dist/src/reporter/__tests__/auto-fire.test.js.map +0 -1
  799. package/dist/src/reporter/__tests__/budget.test.js.map +0 -1
  800. package/dist/src/reporter/__tests__/handlers.test.js.map +0 -1
  801. package/dist/src/reporter/__tests__/query-router.test.js.map +0 -1
  802. package/dist/src/reporter/acl-check.js.map +0 -1
  803. package/dist/src/reporter/auto-fire.js.map +0 -1
  804. package/dist/src/reporter/budget.js.map +0 -1
  805. package/dist/src/reporter/handlers.js.map +0 -1
  806. package/dist/src/reporter/index.js.map +0 -1
  807. package/dist/src/reporter/query-router.js.map +0 -1
  808. package/dist/src/router/__tests__/step-router.test.js.map +0 -1
  809. package/dist/src/router/classifier/grammars.js.map +0 -1
  810. package/dist/src/router/classifier/index.js.map +0 -1
  811. package/dist/src/router/classifier/index.test.js.map +0 -1
  812. package/dist/src/router/classifier/regex.js.map +0 -1
  813. package/dist/src/router/classifier/regex.test.js.map +0 -1
  814. package/dist/src/router/classifier/tree-sitter.js.map +0 -1
  815. package/dist/src/router/classifier/tree-sitter.test.js.map +0 -1
  816. package/dist/src/router/cold.js.map +0 -1
  817. package/dist/src/router/cold.test.js.map +0 -1
  818. package/dist/src/router/decide.js.map +0 -1
  819. package/dist/src/router/decide.test.js.map +0 -1
  820. package/dist/src/router/health.js.map +0 -1
  821. package/dist/src/router/health.test.js.map +0 -1
  822. package/dist/src/router/provider-sentinel.js.map +0 -1
  823. package/dist/src/router/provider-sentinel.test.js.map +0 -1
  824. package/dist/src/router/role-override.test.js.map +0 -1
  825. package/dist/src/router/step-router.js.map +0 -1
  826. package/dist/src/router/store.js.map +0 -1
  827. package/dist/src/router/types.js.map +0 -1
  828. package/dist/src/router/warm.js.map +0 -1
  829. package/dist/src/router/warm.test.js.map +0 -1
  830. package/dist/src/scaffold/__tests__/continuation-prompt.test.js.map +0 -1
  831. package/dist/src/scaffold/__tests__/continue-as-council.spec.js.map +0 -1
  832. package/dist/src/scaffold/__tests__/dotnet-assembly-name.test.js.map +0 -1
  833. package/dist/src/scaffold/__tests__/fe-scaffold-contents.test.js.map +0 -1
  834. package/dist/src/scaffold/__tests__/init-new.smoke.spec.js.map +0 -1
  835. package/dist/src/scaffold/__tests__/init-new.spec.js.map +0 -1
  836. package/dist/src/scaffold/__tests__/install-bb-templates.spec.js.map +0 -1
  837. package/dist/src/scaffold/__tests__/point-to-existing.spec.js.map +0 -1
  838. package/dist/src/scaffold/bb-ecosystem-apply.js.map +0 -1
  839. package/dist/src/scaffold/bb-quality-gate.js.map +0 -1
  840. package/dist/src/scaffold/continuation-prompt.js.map +0 -1
  841. package/dist/src/scaffold/continue-as-council.js.map +0 -1
  842. package/dist/src/scaffold/init-new.js.map +0 -1
  843. package/dist/src/scaffold/point-to-existing.js.map +0 -1
  844. package/dist/src/scaffold/resume-from-gate-failures.js.map +0 -1
  845. package/dist/src/self-qa/__tests__/agentic-context.test.js.map +0 -1
  846. package/dist/src/self-qa/__tests__/agentic-loop.test.js.map +0 -1
  847. package/dist/src/self-qa/__tests__/delta-encoder.test.js.map +0 -1
  848. package/dist/src/self-qa/__tests__/judge.test.js.map +0 -1
  849. package/dist/src/self-qa/__tests__/scenario-planner.test.js.map +0 -1
  850. package/dist/src/self-qa/__tests__/spec-emitter.test.js.map +0 -1
  851. package/dist/src/self-qa/agentic-context.js.map +0 -1
  852. package/dist/src/self-qa/agentic-loop.js.map +0 -1
  853. package/dist/src/self-qa/delta-encoder.js.map +0 -1
  854. package/dist/src/self-qa/index.js.map +0 -1
  855. package/dist/src/self-qa/judge.js.map +0 -1
  856. package/dist/src/self-qa/orchestrator.js.map +0 -1
  857. package/dist/src/self-qa/scenario-planner.js.map +0 -1
  858. package/dist/src/self-qa/spec-emitter.js.map +0 -1
  859. package/dist/src/self-qa/types.js.map +0 -1
  860. package/dist/src/storage/__tests__/migrations.test.js.map +0 -1
  861. package/dist/src/storage/__tests__/sweep-stale-pending.test.js.map +0 -1
  862. package/dist/src/storage/__tests__/ui-interaction-log.test.js.map +0 -1
  863. package/dist/src/storage/atomic-io.js.map +0 -1
  864. package/dist/src/storage/atomic-io.test.js.map +0 -1
  865. package/dist/src/storage/config.js.map +0 -1
  866. package/dist/src/storage/config.test.js.map +0 -1
  867. package/dist/src/storage/db.js.map +0 -1
  868. package/dist/src/storage/index.js.map +0 -1
  869. package/dist/src/storage/interaction-log.js.map +0 -1
  870. package/dist/src/storage/migrations.js.map +0 -1
  871. package/dist/src/storage/session-dir.js.map +0 -1
  872. package/dist/src/storage/sessions.js.map +0 -1
  873. package/dist/src/storage/tool-results.js.map +0 -1
  874. package/dist/src/storage/transcript-response-entry.test.js.map +0 -1
  875. package/dist/src/storage/transcript-view.js.map +0 -1
  876. package/dist/src/storage/transcript.js.map +0 -1
  877. package/dist/src/storage/transcript.test.js.map +0 -1
  878. package/dist/src/storage/ui-interaction-log.js.map +0 -1
  879. package/dist/src/storage/usage-cap.js.map +0 -1
  880. package/dist/src/storage/usage-cap.test.js.map +0 -1
  881. package/dist/src/storage/usage.js.map +0 -1
  882. package/dist/src/storage/workspaces.js.map +0 -1
  883. package/dist/src/tools/__tests__/vision-gate.test.js.map +0 -1
  884. package/dist/src/tools/bash-output-cache.js.map +0 -1
  885. package/dist/src/tools/bash-output-cache.test.js.map +0 -1
  886. package/dist/src/tools/bash-output-integration.test.js.map +0 -1
  887. package/dist/src/tools/bash.js.map +0 -1
  888. package/dist/src/tools/bash.test.js.map +0 -1
  889. package/dist/src/tools/computer.js.map +0 -1
  890. package/dist/src/tools/computer.test.js.map +0 -1
  891. package/dist/src/tools/file-tracker.js.map +0 -1
  892. package/dist/src/tools/file-tracker.test.js.map +0 -1
  893. package/dist/src/tools/file.js.map +0 -1
  894. package/dist/src/tools/file.test.js.map +0 -1
  895. package/dist/src/tools/grep.js.map +0 -1
  896. package/dist/src/tools/registry-bash-empty-command.test.js.map +0 -1
  897. package/dist/src/tools/registry-bash-footer.test.js.map +0 -1
  898. package/dist/src/tools/registry-ee-query.test.js.map +0 -1
  899. package/dist/src/tools/registry-session-repeat.test.js.map +0 -1
  900. package/dist/src/tools/registry.js.map +0 -1
  901. package/dist/src/tools/registry.test.js.map +0 -1
  902. package/dist/src/tools/schedule.js.map +0 -1
  903. package/dist/src/tools/schedule.test.js.map +0 -1
  904. package/dist/src/tools/todo-write-snapshot.js.map +0 -1
  905. package/dist/src/tools/todo-write-snapshot.test.js.map +0 -1
  906. package/dist/src/tools/vision-gate.js.map +0 -1
  907. package/dist/src/types/index.js.map +0 -1
  908. package/dist/src/ui/__tests__/picker-providers.test.js.map +0 -1
  909. package/dist/src/ui/agents-modal.js.map +0 -1
  910. package/dist/src/ui/app.js.map +0 -1
  911. package/dist/src/ui/cards/__tests__/product-status-card.test.js.map +0 -1
  912. package/dist/src/ui/cards/product-status-card.js.map +0 -1
  913. package/dist/src/ui/components/SuggestionOverlay.js.map +0 -1
  914. package/dist/src/ui/components/Toast.js.map +0 -1
  915. package/dist/src/ui/components/__tests__/council-leader-bubble.test.js.map +0 -1
  916. package/dist/src/ui/components/__tests__/council-message-bubble.test.js.map +0 -1
  917. package/dist/src/ui/components/__tests__/council-phase-timeline.test.js.map +0 -1
  918. package/dist/src/ui/components/__tests__/council-placeholder-bubble.test.js.map +0 -1
  919. package/dist/src/ui/components/__tests__/council-question-card.test.js.map +0 -1
  920. package/dist/src/ui/components/__tests__/council-synthesis-banner.test.js.map +0 -1
  921. package/dist/src/ui/components/__tests__/task-list-panel.test.js.map +0 -1
  922. package/dist/src/ui/components/__tests__/use-pair-quote-buffer.test.js.map +0 -1
  923. package/dist/src/ui/components/btw-overlay.js.map +0 -1
  924. package/dist/src/ui/components/bubble-layout.js.map +0 -1
  925. package/dist/src/ui/components/code-block-truncate.js.map +0 -1
  926. package/dist/src/ui/components/copy-flash-banner.js.map +0 -1
  927. package/dist/src/ui/components/council-info-card.js.map +0 -1
  928. package/dist/src/ui/components/council-leader-bubble.js.map +0 -1
  929. package/dist/src/ui/components/council-message-bubble.js.map +0 -1
  930. package/dist/src/ui/components/council-phase-timeline.js.map +0 -1
  931. package/dist/src/ui/components/council-placeholder-bubble.js.map +0 -1
  932. package/dist/src/ui/components/council-question-card.js.map +0 -1
  933. package/dist/src/ui/components/council-status-list.js.map +0 -1
  934. package/dist/src/ui/components/council-synthesis-banner.js.map +0 -1
  935. package/dist/src/ui/components/diff-view.js.map +0 -1
  936. package/dist/src/ui/components/halt-recovery-card.js.map +0 -1
  937. package/dist/src/ui/components/hero-logo.js.map +0 -1
  938. package/dist/src/ui/components/init-new-form-card.js.map +0 -1
  939. package/dist/src/ui/components/lsp-views.js.map +0 -1
  940. package/dist/src/ui/components/media-views.js.map +0 -1
  941. package/dist/src/ui/components/message-view.js.map +0 -1
  942. package/dist/src/ui/components/point-to-existing-form-card.js.map +0 -1
  943. package/dist/src/ui/components/prompt-box.js.map +0 -1
  944. package/dist/src/ui/components/role-palette.js.map +0 -1
  945. package/dist/src/ui/components/session-header.js.map +0 -1
  946. package/dist/src/ui/components/slash-inline-menu.js.map +0 -1
  947. package/dist/src/ui/components/structured-response-view.js.map +0 -1
  948. package/dist/src/ui/components/task-list-panel.js.map +0 -1
  949. package/dist/src/ui/components/tool-group.js.map +0 -1
  950. package/dist/src/ui/components/tool-result-views.js.map +0 -1
  951. package/dist/src/ui/components/use-pair-quote-buffer.js.map +0 -1
  952. package/dist/src/ui/constants.js.map +0 -1
  953. package/dist/src/ui/hooks/use-agent-editor.js.map +0 -1
  954. package/dist/src/ui/hooks/use-mcp-editor.js.map +0 -1
  955. package/dist/src/ui/hooks/use-model-picker.js.map +0 -1
  956. package/dist/src/ui/hooks/useTypeahead.js.map +0 -1
  957. package/dist/src/ui/markdown.js.map +0 -1
  958. package/dist/src/ui/mcp-modal-types.js.map +0 -1
  959. package/dist/src/ui/mcp-modal.js.map +0 -1
  960. package/dist/src/ui/modals/api-key-modal.js.map +0 -1
  961. package/dist/src/ui/modals/connect-modal.js.map +0 -1
  962. package/dist/src/ui/modals/model-picker-modal.js.map +0 -1
  963. package/dist/src/ui/modals/sandbox-picker-modal.js.map +0 -1
  964. package/dist/src/ui/modals/update-modal.js.map +0 -1
  965. package/dist/src/ui/modals/wallet-picker-modal.js.map +0 -1
  966. package/dist/src/ui/picker-providers.js.map +0 -1
  967. package/dist/src/ui/plan.js.map +0 -1
  968. package/dist/src/ui/schedule-modal.js.map +0 -1
  969. package/dist/src/ui/slash/__tests__/clear.test.js.map +0 -1
  970. package/dist/src/ui/slash/__tests__/compact.test.js.map +0 -1
  971. package/dist/src/ui/slash/__tests__/cost.test.js.map +0 -1
  972. package/dist/src/ui/slash/__tests__/discuss.test.js.map +0 -1
  973. package/dist/src/ui/slash/__tests__/execute.test.js.map +0 -1
  974. package/dist/src/ui/slash/__tests__/expand.test.js.map +0 -1
  975. package/dist/src/ui/slash/__tests__/ideal.test.js.map +0 -1
  976. package/dist/src/ui/slash/__tests__/menu-parity.test.js.map +0 -1
  977. package/dist/src/ui/slash/__tests__/optimize.test.js.map +0 -1
  978. package/dist/src/ui/slash/__tests__/pin.test.js.map +0 -1
  979. package/dist/src/ui/slash/__tests__/plan.test.js.map +0 -1
  980. package/dist/src/ui/slash/__tests__/status-render.test.js.map +0 -1
  981. package/dist/src/ui/slash/clear.js.map +0 -1
  982. package/dist/src/ui/slash/compact.js.map +0 -1
  983. package/dist/src/ui/slash/cost.js.map +0 -1
  984. package/dist/src/ui/slash/council-inspect.js.map +0 -1
  985. package/dist/src/ui/slash/council.js.map +0 -1
  986. package/dist/src/ui/slash/debug.js.map +0 -1
  987. package/dist/src/ui/slash/discuss.js.map +0 -1
  988. package/dist/src/ui/slash/ee.js.map +0 -1
  989. package/dist/src/ui/slash/execute.js.map +0 -1
  990. package/dist/src/ui/slash/expand.js.map +0 -1
  991. package/dist/src/ui/slash/export.js.map +0 -1
  992. package/dist/src/ui/slash/ideal.js.map +0 -1
  993. package/dist/src/ui/slash/menu-items.js.map +0 -1
  994. package/dist/src/ui/slash/optimize.js.map +0 -1
  995. package/dist/src/ui/slash/pin.js.map +0 -1
  996. package/dist/src/ui/slash/plan.js.map +0 -1
  997. package/dist/src/ui/slash/registry.js.map +0 -1
  998. package/dist/src/ui/slash/route.js.map +0 -1
  999. package/dist/src/ui/slash/route.test.js.map +0 -1
  1000. package/dist/src/ui/slash/status.js.map +0 -1
  1001. package/dist/src/ui/state/active-run.js.map +0 -1
  1002. package/dist/src/ui/status-bar/index.js.map +0 -1
  1003. package/dist/src/ui/status-bar/index.test.js.map +0 -1
  1004. package/dist/src/ui/status-bar/store.js.map +0 -1
  1005. package/dist/src/ui/status-bar/store.test.js.map +0 -1
  1006. package/dist/src/ui/status-bar/tier-badge.js.map +0 -1
  1007. package/dist/src/ui/status-bar/tier-badge.test.js.map +0 -1
  1008. package/dist/src/ui/status-bar/usd-meter.js.map +0 -1
  1009. package/dist/src/ui/status-bar/usd-meter.test.js.map +0 -1
  1010. package/dist/src/ui/syntax-highlight.js.map +0 -1
  1011. package/dist/src/ui/terminal-selection-text.js.map +0 -1
  1012. package/dist/src/ui/theme.js.map +0 -1
  1013. package/dist/src/ui/types.js.map +0 -1
  1014. package/dist/src/ui/utils/__tests__/format.test.js.map +0 -1
  1015. package/dist/src/ui/utils/__tests__/tools.test.js.map +0 -1
  1016. package/dist/src/ui/utils/color.js.map +0 -1
  1017. package/dist/src/ui/utils/format.js.map +0 -1
  1018. package/dist/src/ui/utils/modal.js.map +0 -1
  1019. package/dist/src/ui/utils/text.js.map +0 -1
  1020. package/dist/src/ui/utils/tools.js.map +0 -1
  1021. package/dist/src/usage/__tests__/product-ledger.test.js.map +0 -1
  1022. package/dist/src/usage/cost-log.js.map +0 -1
  1023. package/dist/src/usage/decision-log.js.map +0 -1
  1024. package/dist/src/usage/downgrade.js.map +0 -1
  1025. package/dist/src/usage/downgrade.test.js.map +0 -1
  1026. package/dist/src/usage/estimator.js.map +0 -1
  1027. package/dist/src/usage/estimator.test.js.map +0 -1
  1028. package/dist/src/usage/ledger.js.map +0 -1
  1029. package/dist/src/usage/ledger.test.js.map +0 -1
  1030. package/dist/src/usage/midstream.js.map +0 -1
  1031. package/dist/src/usage/midstream.test.js.map +0 -1
  1032. package/dist/src/usage/product-ledger.js.map +0 -1
  1033. package/dist/src/usage/thresholds.js.map +0 -1
  1034. package/dist/src/usage/thresholds.test.js.map +0 -1
  1035. package/dist/src/usage/types.js.map +0 -1
  1036. package/dist/src/utils/__tests__/auto-council-settings.test.js.map +0 -1
  1037. package/dist/src/utils/__tests__/ee-logger.test.js.map +0 -1
  1038. package/dist/src/utils/__tests__/file-lock.test.js.map +0 -1
  1039. package/dist/src/utils/__tests__/llm-deadline.test.js.map +0 -1
  1040. package/dist/src/utils/__tests__/rate-limit.test.js.map +0 -1
  1041. package/dist/src/utils/__tests__/settings-disabled-models.test.js.map +0 -1
  1042. package/dist/src/utils/__tests__/settings-web-research.test.js.map +0 -1
  1043. package/dist/src/utils/__tests__/slugify.test.js.map +0 -1
  1044. package/dist/src/utils/__tests__/visible-retry.test.js.map +0 -1
  1045. package/dist/src/utils/at-mentions.js.map +0 -1
  1046. package/dist/src/utils/clipboard-image.js.map +0 -1
  1047. package/dist/src/utils/ee-logger.js.map +0 -1
  1048. package/dist/src/utils/file-index.js.map +0 -1
  1049. package/dist/src/utils/file-lock.js.map +0 -1
  1050. package/dist/src/utils/git-root.js.map +0 -1
  1051. package/dist/src/utils/host-clipboard.js.map +0 -1
  1052. package/dist/src/utils/install-manager.js.map +0 -1
  1053. package/dist/src/utils/install-manager.test.js.map +0 -1
  1054. package/dist/src/utils/instructions.js.map +0 -1
  1055. package/dist/src/utils/instructions.test.js.map +0 -1
  1056. package/dist/src/utils/llm-deadline.js.map +0 -1
  1057. package/dist/src/utils/permission-mode.js.map +0 -1
  1058. package/dist/src/utils/permission-mode.test.js.map +0 -1
  1059. package/dist/src/utils/rate-limit.js.map +0 -1
  1060. package/dist/src/utils/redactor.js.map +0 -1
  1061. package/dist/src/utils/redactor.test.js.map +0 -1
  1062. package/dist/src/utils/settings.js.map +0 -1
  1063. package/dist/src/utils/settings.test.js.map +0 -1
  1064. package/dist/src/utils/shell.js.map +0 -1
  1065. package/dist/src/utils/shell.test.js.map +0 -1
  1066. package/dist/src/utils/side-question.js.map +0 -1
  1067. package/dist/src/utils/skills.js.map +0 -1
  1068. package/dist/src/utils/skills.test.js.map +0 -1
  1069. package/dist/src/utils/slugify.js.map +0 -1
  1070. package/dist/src/utils/subagent-display.js.map +0 -1
  1071. package/dist/src/utils/subagent-display.test.js.map +0 -1
  1072. package/dist/src/utils/subagents-settings.test.js.map +0 -1
  1073. package/dist/src/utils/telegram-audio-settings.test.js.map +0 -1
  1074. package/dist/src/utils/update-checker.js.map +0 -1
  1075. package/dist/src/utils/update-checker.test.js.map +0 -1
  1076. package/dist/src/utils/visible-retry.js.map +0 -1
  1077. package/dist/src/verify/__tests__/coverage-parsers.test.js.map +0 -1
  1078. package/dist/src/verify/__tests__/dotnet-recipe.test.js.map +0 -1
  1079. package/dist/src/verify/checkpoint.js.map +0 -1
  1080. package/dist/src/verify/checkpoint.test.js.map +0 -1
  1081. package/dist/src/verify/coverage-parsers.js.map +0 -1
  1082. package/dist/src/verify/entrypoint.js.map +0 -1
  1083. package/dist/src/verify/entrypoint.test.js.map +0 -1
  1084. package/dist/src/verify/environment.js.map +0 -1
  1085. package/dist/src/verify/environment.test.js.map +0 -1
  1086. package/dist/src/verify/evidence.js.map +0 -1
  1087. package/dist/src/verify/orchestrator.js.map +0 -1
  1088. package/dist/src/verify/orchestrator.test.js.map +0 -1
  1089. package/dist/src/verify/recipes.js.map +0 -1
  1090. package/dist/src/verify/retry.js.map +0 -1
  1091. package/dist/src/verify/runtime-prep.test.js.map +0 -1
  1092. package/src/__test-helpers__/catalog-fixtures.ts +0 -57
  1093. package/src/__test-stubs__/ee-server.ts +0 -173
  1094. package/src/__test-stubs__/vitest-setup.ts +0 -36
  1095. package/src/__tests__/council/bubble-layout.test.ts +0 -45
  1096. package/src/__tests__/council/code-block-truncate.test.ts +0 -50
  1097. package/src/__tests__/council/role-palette.test.ts +0 -66
  1098. package/src/__tests__/first-run-wizard.test.ts +0 -9
  1099. package/src/agent-harness/__tests__/cli-flags.spec.ts +0 -35
  1100. package/src/agent-harness/__tests__/driver.spec.ts +0 -154
  1101. package/src/agent-harness/__tests__/idle.spec.ts +0 -90
  1102. package/src/agent-harness/__tests__/mock-llm.spec.ts +0 -126
  1103. package/src/agent-harness/__tests__/mock-model.spec.ts +0 -195
  1104. package/src/agent-harness/__tests__/predicate.spec.ts +0 -33
  1105. package/src/agent-harness/__tests__/protocol.spec.ts +0 -62
  1106. package/src/agent-harness/__tests__/schema.spec.ts +0 -81
  1107. package/src/agent-harness/__tests__/selector.spec.ts +0 -82
  1108. package/src/agent-harness/__tests__/sidechannel.spec.ts +0 -40
  1109. package/src/agent-harness/__tests__/spec-helpers.spec.ts +0 -76
  1110. package/src/agent-harness/index.ts +0 -24
  1111. package/src/agent-harness/mock-model.ts +0 -445
  1112. package/src/agent-harness/test-spawn.ts +0 -221
  1113. package/src/billing/index.ts +0 -5
  1114. package/src/bun-sqlite.d.ts +0 -15
  1115. package/src/chat/__tests__/broadcast-bus.test.ts +0 -90
  1116. package/src/chat/__tests__/channel-manager.test.ts +0 -149
  1117. package/src/chat/__tests__/client.test.ts +0 -118
  1118. package/src/chat/__tests__/discord-integration.test.ts +0 -162
  1119. package/src/chat/__tests__/intent-prompt.test.ts +0 -92
  1120. package/src/chat/__tests__/verdict-resolver.test.ts +0 -336
  1121. package/src/chat/broadcast-bus.ts +0 -53
  1122. package/src/chat/channel-manager.ts +0 -146
  1123. package/src/chat/chat-keychain.ts +0 -137
  1124. package/src/chat/factory.ts +0 -37
  1125. package/src/chat/intent-prompt.ts +0 -72
  1126. package/src/chat/providers/discord/client.ts +0 -91
  1127. package/src/chat/types.ts +0 -42
  1128. package/src/chat/verdict-constants.ts +0 -26
  1129. package/src/chat/verdict-resolver.ts +0 -231
  1130. package/src/cli/__tests__/bw-vault.test.ts +0 -97
  1131. package/src/cli/__tests__/keys-bundle.test.ts +0 -46
  1132. package/src/cli/__tests__/share-cmd.test.ts +0 -197
  1133. package/src/cli/bw-vault.ts +0 -184
  1134. package/src/cli/config/__tests__/model-picker.test.ts +0 -59
  1135. package/src/cli/config/__tests__/provider-fetch.test.ts +0 -38
  1136. package/src/cli/config/index.ts +0 -112
  1137. package/src/cli/config/model-picker.ts +0 -193
  1138. package/src/cli/config/provider-fetch.ts +0 -75
  1139. package/src/cli/config/screen-council.ts +0 -245
  1140. package/src/cli/config/screen-models.ts +0 -104
  1141. package/src/cli/config/screen-providers.ts +0 -197
  1142. package/src/cli/config/tui.ts +0 -153
  1143. package/src/cli/cost-forensics.test.ts +0 -273
  1144. package/src/cli/cost-forensics.ts +0 -337
  1145. package/src/cli/keys-bundle.ts +0 -91
  1146. package/src/cli/keys.test.ts +0 -104
  1147. package/src/cli/keys.ts +0 -816
  1148. package/src/cli/pil-report.ts +0 -202
  1149. package/src/cli/reporter-cmd.ts +0 -154
  1150. package/src/cli/share-cmd.ts +0 -132
  1151. package/src/cli/usage-report.ts +0 -398
  1152. package/src/cloud/index.ts +0 -5
  1153. package/src/council/__tests__/accounting.test.ts +0 -72
  1154. package/src/council/__tests__/audit-replay.test.ts +0 -344
  1155. package/src/council/__tests__/clarifier-max-rounds.test.ts +0 -90
  1156. package/src/council/__tests__/clarifier-options.test.ts +0 -63
  1157. package/src/council/__tests__/clarifier-ready-gate.test.ts +0 -268
  1158. package/src/council/__tests__/cost-aware.test.ts +0 -60
  1159. package/src/council/__tests__/debate-planner-structured.test.ts +0 -236
  1160. package/src/council/__tests__/decisions-lock.test.ts +0 -404
  1161. package/src/council/__tests__/evaluator-metrics.test.ts +0 -513
  1162. package/src/council/__tests__/parse-outcome-fallback.test.ts +0 -125
  1163. package/src/council/__tests__/research-tools.test.ts +0 -239
  1164. package/src/council/__tests__/round-tools.test.ts +0 -334
  1165. package/src/council/__tests__/tool-trace.test.ts +0 -152
  1166. package/src/council/__tests__/types-contract.test.ts +0 -88
  1167. package/src/council/clarifier.ts +0 -507
  1168. package/src/council/context.ts +0 -249
  1169. package/src/council/debate-planner.ts +0 -303
  1170. package/src/council/debate.ts +0 -1179
  1171. package/src/council/decisions-lock.ts +0 -312
  1172. package/src/council/executor.ts +0 -27
  1173. package/src/council/index.ts +0 -956
  1174. package/src/council/leader.ts +0 -281
  1175. package/src/council/llm.ts +0 -939
  1176. package/src/council/phase-events.ts +0 -64
  1177. package/src/council/planner.ts +0 -303
  1178. package/src/council/preflight.ts +0 -86
  1179. package/src/council/prompts.ts +0 -698
  1180. package/src/council/types.ts +0 -304
  1181. package/src/daemon/scheduler.test.ts +0 -128
  1182. package/src/daemon/scheduler.ts +0 -152
  1183. package/src/ee/.gitkeep +0 -0
  1184. package/src/ee/__tests__/bb-design.test.ts +0 -223
  1185. package/src/ee/__tests__/export-transcripts.test.ts +0 -222
  1186. package/src/ee/__tests__/pil-context-bridge.test.ts +0 -59
  1187. package/src/ee/__tests__/pipeline.integration.test.ts +0 -193
  1188. package/src/ee/__tests__/recall-format.test.ts +0 -66
  1189. package/src/ee/__tests__/recall-ledger.test.ts +0 -55
  1190. package/src/ee/__tests__/render-sink-wiring.test.ts +0 -89
  1191. package/src/ee/auth.test.ts +0 -76
  1192. package/src/ee/auth.ts +0 -80
  1193. package/src/ee/bb-design.ts +0 -284
  1194. package/src/ee/bb-retrieval.ts +0 -467
  1195. package/src/ee/bridge.test.ts +0 -283
  1196. package/src/ee/bridge.ts +0 -443
  1197. package/src/ee/client-mode.ts +0 -161
  1198. package/src/ee/client.test.ts +0 -201
  1199. package/src/ee/client.ts +0 -683
  1200. package/src/ee/council-bridge.ts +0 -89
  1201. package/src/ee/embedding-cache.ts +0 -42
  1202. package/src/ee/export-transcripts.ts +0 -160
  1203. package/src/ee/extract-session.test.ts +0 -231
  1204. package/src/ee/extract-session.ts +0 -71
  1205. package/src/ee/health.ts +0 -83
  1206. package/src/ee/index.ts +0 -33
  1207. package/src/ee/intercept.test.ts +0 -197
  1208. package/src/ee/intercept.ts +0 -168
  1209. package/src/ee/judge.test.ts +0 -213
  1210. package/src/ee/judge.ts +0 -126
  1211. package/src/ee/mistake-detector.test.ts +0 -252
  1212. package/src/ee/mistake-detector.ts +0 -297
  1213. package/src/ee/offline-queue.test.ts +0 -302
  1214. package/src/ee/offline-queue.ts +0 -205
  1215. package/src/ee/phase-outcome.test.ts +0 -107
  1216. package/src/ee/phase-outcome.ts +0 -165
  1217. package/src/ee/phase-tracker.test.ts +0 -175
  1218. package/src/ee/phase-tracker.ts +0 -180
  1219. package/src/ee/posttool.test.ts +0 -81
  1220. package/src/ee/posttool.ts +0 -16
  1221. package/src/ee/prompt-stale.test.ts +0 -92
  1222. package/src/ee/prompt-stale.ts +0 -39
  1223. package/src/ee/recall-ledger.ts +0 -71
  1224. package/src/ee/recall-mirror.test.ts +0 -74
  1225. package/src/ee/render.test.ts +0 -74
  1226. package/src/ee/render.ts +0 -68
  1227. package/src/ee/scope.test.ts +0 -112
  1228. package/src/ee/scope.ts +0 -93
  1229. package/src/ee/search.ts +0 -259
  1230. package/src/ee/session-trajectory.test.ts +0 -139
  1231. package/src/ee/session-trajectory.ts +0 -226
  1232. package/src/ee/tenant.ts +0 -14
  1233. package/src/ee/touch.test.ts +0 -73
  1234. package/src/ee/transcript-emit.ts +0 -174
  1235. package/src/ee/types.ts +0 -432
  1236. package/src/flow/.gitkeep +0 -0
  1237. package/src/flow/__tests__/migration.test.ts +0 -133
  1238. package/src/flow/__tests__/parser.test.ts +0 -77
  1239. package/src/flow/__tests__/run-manager-product.test.ts +0 -59
  1240. package/src/flow/__tests__/run-manager.test.ts +0 -95
  1241. package/src/flow/__tests__/scaffold-checkpoint.test.ts +0 -113
  1242. package/src/flow/__tests__/scaffold.test.ts +0 -57
  1243. package/src/flow/__tests__/warning-persist.test.ts +0 -112
  1244. package/src/flow/artifact-io.ts +0 -41
  1245. package/src/flow/compaction/__tests__/compress.test.ts +0 -69
  1246. package/src/flow/compaction/__tests__/extract.test.ts +0 -74
  1247. package/src/flow/compaction/__tests__/preserve.test.ts +0 -69
  1248. package/src/flow/compaction/compress.ts +0 -67
  1249. package/src/flow/compaction/extract.ts +0 -60
  1250. package/src/flow/compaction/index.ts +0 -86
  1251. package/src/flow/compaction/preserve.ts +0 -48
  1252. package/src/flow/index.ts +0 -18
  1253. package/src/flow/migration.ts +0 -139
  1254. package/src/flow/parser.ts +0 -78
  1255. package/src/flow/run-manager.ts +0 -162
  1256. package/src/flow/scaffold-checkpoint.ts +0 -132
  1257. package/src/flow/scaffold.ts +0 -52
  1258. package/src/flow/warning-persist.ts +0 -84
  1259. package/src/generated/version.ts +0 -5
  1260. package/src/gsd/.gitkeep +0 -0
  1261. package/src/gsd/__tests__/complexity.test.ts +0 -0
  1262. package/src/gsd/__tests__/directives.test.ts +0 -88
  1263. package/src/gsd/__tests__/gray-areas.test.ts +0 -33
  1264. package/src/gsd/__tests__/types.test.ts +0 -91
  1265. package/src/gsd/complexity.ts +0 -124
  1266. package/src/gsd/directives.ts +0 -141
  1267. package/src/gsd/gray-areas.ts +0 -144
  1268. package/src/gsd/index.ts +0 -1
  1269. package/src/gsd/types.ts +0 -63
  1270. package/src/headless/__tests__/council-answers.test.ts +0 -300
  1271. package/src/headless/council-answers.ts +0 -152
  1272. package/src/headless/output.test.ts +0 -201
  1273. package/src/headless/output.ts +0 -312
  1274. package/src/hooks/config.ts +0 -41
  1275. package/src/hooks/index.ts +0 -569
  1276. package/src/hooks/types.ts +0 -263
  1277. package/src/index.ts +0 -1762
  1278. package/src/lsp/builtins.test.ts +0 -129
  1279. package/src/lsp/builtins.ts +0 -453
  1280. package/src/lsp/client.ts +0 -342
  1281. package/src/lsp/manager.test.ts +0 -198
  1282. package/src/lsp/manager.ts +0 -343
  1283. package/src/lsp/npm-cache.test.ts +0 -70
  1284. package/src/lsp/npm-cache.ts +0 -111
  1285. package/src/lsp/runtime.ts +0 -70
  1286. package/src/lsp/smoke.test.ts +0 -74
  1287. package/src/lsp/types.ts +0 -119
  1288. package/src/maintain/__tests__/codebase-intel.test.ts +0 -320
  1289. package/src/maintain/__tests__/gh-create-pr.test.ts +0 -195
  1290. package/src/maintain/__tests__/pr-builder.test.ts +0 -282
  1291. package/src/maintain/__tests__/repo-map.test.ts +0 -128
  1292. package/src/maintain/__tests__/task-runner.test.ts +0 -347
  1293. package/src/maintain/codebase-intel.ts +0 -595
  1294. package/src/maintain/gh-create-pr.ts +0 -148
  1295. package/src/maintain/index.ts +0 -14
  1296. package/src/maintain/pr-builder.ts +0 -373
  1297. package/src/maintain/repo-map.ts +0 -205
  1298. package/src/maintain/task-runner.ts +0 -481
  1299. package/src/maintain/types.ts +0 -49
  1300. package/src/mcp/__tests__/auto-setup.test.ts +0 -88
  1301. package/src/mcp/__tests__/cap-tool-result.test.ts +0 -65
  1302. package/src/mcp/__tests__/ee-tools.test.ts +0 -248
  1303. package/src/mcp/__tests__/forensics-tools.test.ts +0 -66
  1304. package/src/mcp/__tests__/harness-driver-action-tools.spec.ts +0 -116
  1305. package/src/mcp/__tests__/harness-driver-async-tools.spec.ts +0 -129
  1306. package/src/mcp/__tests__/harness-driver-read-tools.spec.ts +0 -140
  1307. package/src/mcp/__tests__/harness-driver-security.spec.ts +0 -69
  1308. package/src/mcp/__tests__/harness-driver.spec.ts +0 -21
  1309. package/src/mcp/__tests__/lazy-schema.spec.ts +0 -173
  1310. package/src/mcp/__tests__/lsp-tools.test.ts +0 -72
  1311. package/src/mcp/__tests__/mcp-keychain.test.ts +0 -46
  1312. package/src/mcp/__tests__/research-onboarding.test.ts +0 -163
  1313. package/src/mcp/__tests__/runtime-hydration.test.ts +0 -86
  1314. package/src/mcp/__tests__/runtime-output-cap.test.ts +0 -49
  1315. package/src/mcp/__tests__/runtime-sanitize.test.ts +0 -44
  1316. package/src/mcp/__tests__/self-verify-jobs.test.ts +0 -102
  1317. package/src/mcp/__tests__/smart-filter.test.ts +0 -139
  1318. package/src/mcp/__tests__/tools-server.smoke.test.ts +0 -41
  1319. package/src/mcp/auto-setup.ts +0 -99
  1320. package/src/mcp/cap-tool-result.ts +0 -68
  1321. package/src/mcp/catalog.ts +0 -155
  1322. package/src/mcp/ee-tools.ts +0 -204
  1323. package/src/mcp/forensics-tools.ts +0 -65
  1324. package/src/mcp/lsp-tools.ts +0 -78
  1325. package/src/mcp/mcp-keychain.ts +0 -85
  1326. package/src/mcp/oauth-callback.ts +0 -75
  1327. package/src/mcp/oauth-provider.ts +0 -128
  1328. package/src/mcp/opentui-spawn.ts +0 -64
  1329. package/src/mcp/parse-headers.test.ts +0 -54
  1330. package/src/mcp/parse-headers.ts +0 -35
  1331. package/src/mcp/research-onboarding.ts +0 -143
  1332. package/src/mcp/runtime.ts +0 -182
  1333. package/src/mcp/self-verify-jobs.ts +0 -137
  1334. package/src/mcp/smart-filter.ts +0 -138
  1335. package/src/mcp/smoke.test.ts +0 -170
  1336. package/src/mcp/tools-server.ts +0 -174
  1337. package/src/mcp/validate.ts +0 -48
  1338. package/src/models/__tests__/registry.test.ts +0 -95
  1339. package/src/models/catalog-client.ts +0 -234
  1340. package/src/models/catalog-gemini.test.ts +0 -52
  1341. package/src/models/catalog-url.test.ts +0 -27
  1342. package/src/models/catalog-validation.test.ts +0 -74
  1343. package/src/models/catalog.README.md +0 -136
  1344. package/src/models/catalog.json +0 -349
  1345. package/src/models/classify-tier.ts +0 -48
  1346. package/src/models/index.ts +0 -9
  1347. package/src/models/registry.ts +0 -87
  1348. package/src/ops/__tests__/doctor-council-mcp.test.ts +0 -161
  1349. package/src/ops/__tests__/doctor-ee-health.test.ts +0 -129
  1350. package/src/ops/bug-report.test.ts +0 -172
  1351. package/src/ops/bug-report.ts +0 -80
  1352. package/src/ops/doctor.test.ts +0 -108
  1353. package/src/ops/doctor.ts +0 -366
  1354. package/src/orchestrator/__tests__/agent-base-url-switch.test.ts +0 -87
  1355. package/src/orchestrator/__tests__/batch-turn-runner.test.ts +0 -186
  1356. package/src/orchestrator/__tests__/council-manager.test.ts +0 -171
  1357. package/src/orchestrator/__tests__/cross-turn-dedup.test.ts +0 -201
  1358. package/src/orchestrator/__tests__/current-call-id.test.ts +0 -160
  1359. package/src/orchestrator/__tests__/error-forensics.test.ts +0 -99
  1360. package/src/orchestrator/__tests__/flow-resume.test.ts +0 -71
  1361. package/src/orchestrator/__tests__/humanize-api-error.test.ts +0 -74
  1362. package/src/orchestrator/__tests__/message-processor.test.ts +0 -201
  1363. package/src/orchestrator/__tests__/message-write-ahead.test.ts +0 -170
  1364. package/src/orchestrator/__tests__/read-path-budget.test.ts +0 -170
  1365. package/src/orchestrator/__tests__/retry-classifier.test.ts +0 -131
  1366. package/src/orchestrator/__tests__/retry-stream.test.ts +0 -186
  1367. package/src/orchestrator/__tests__/route-feedback.test.ts +0 -55
  1368. package/src/orchestrator/__tests__/stream-runner.test.ts +0 -201
  1369. package/src/orchestrator/__tests__/sub-agent-model-tier.test.ts +0 -53
  1370. package/src/orchestrator/__tests__/usage-events-shape.test.ts +0 -80
  1371. package/src/orchestrator/__tests__/usage-normalizer-c1.test.ts +0 -172
  1372. package/src/orchestrator/__tests__/usage-shape-threading.test.ts +0 -111
  1373. package/src/orchestrator/__tests__/write-ahead.test.ts +0 -162
  1374. package/src/orchestrator/abort.test.ts +0 -37
  1375. package/src/orchestrator/abort.ts +0 -51
  1376. package/src/orchestrator/agent-options.ts +0 -167
  1377. package/src/orchestrator/agent.test.ts +0 -191
  1378. package/src/orchestrator/batch-turn-runner.ts +0 -425
  1379. package/src/orchestrator/batch-utils.ts +0 -340
  1380. package/src/orchestrator/cleanup.test.ts +0 -86
  1381. package/src/orchestrator/compaction.test.ts +0 -200
  1382. package/src/orchestrator/compaction.ts +0 -626
  1383. package/src/orchestrator/council-manager.ts +0 -572
  1384. package/src/orchestrator/cross-turn-dedup.ts +0 -208
  1385. package/src/orchestrator/delegations.test.ts +0 -145
  1386. package/src/orchestrator/delegations.ts +0 -370
  1387. package/src/orchestrator/error-utils.ts +0 -165
  1388. package/src/orchestrator/flow-resume.ts +0 -54
  1389. package/src/orchestrator/grounding-check.test.ts +0 -111
  1390. package/src/orchestrator/grounding-check.ts +0 -138
  1391. package/src/orchestrator/interrupted-turn.test.ts +0 -39
  1392. package/src/orchestrator/interrupted-turn.ts +0 -27
  1393. package/src/orchestrator/message-processor.ts +0 -3364
  1394. package/src/orchestrator/message-seq.test.ts +0 -29
  1395. package/src/orchestrator/message-seq.ts +0 -19
  1396. package/src/orchestrator/orchestrator.ts +0 -2752
  1397. package/src/orchestrator/pending-calls.test.ts +0 -226
  1398. package/src/orchestrator/pending-calls.ts +0 -240
  1399. package/src/orchestrator/prompts.ts +0 -579
  1400. package/src/orchestrator/provider-options-shape.spec.ts +0 -67
  1401. package/src/orchestrator/provider-options-shape.ts +0 -70
  1402. package/src/orchestrator/read-path-budget.ts +0 -205
  1403. package/src/orchestrator/reasoning.test.ts +0 -114
  1404. package/src/orchestrator/reasoning.ts +0 -116
  1405. package/src/orchestrator/repair-tool-call.ts +0 -54
  1406. package/src/orchestrator/repetition-detector.test.ts +0 -127
  1407. package/src/orchestrator/repetition-detector.ts +0 -140
  1408. package/src/orchestrator/retry-classifier.ts +0 -140
  1409. package/src/orchestrator/retry-stream.ts +0 -159
  1410. package/src/orchestrator/sandbox.test.ts +0 -117
  1411. package/src/orchestrator/scope-ceiling.test.ts +0 -215
  1412. package/src/orchestrator/scope-ceiling.ts +0 -234
  1413. package/src/orchestrator/scope-reminder.test.ts +0 -232
  1414. package/src/orchestrator/scope-reminder.ts +0 -230
  1415. package/src/orchestrator/stall-rescue.test.ts +0 -100
  1416. package/src/orchestrator/stall-rescue.ts +0 -95
  1417. package/src/orchestrator/stall-watchdog.test.ts +0 -83
  1418. package/src/orchestrator/stall-watchdog.ts +0 -87
  1419. package/src/orchestrator/stream-runner.ts +0 -939
  1420. package/src/orchestrator/sub-agent-cap.test.ts +0 -227
  1421. package/src/orchestrator/sub-agent-cap.ts +0 -240
  1422. package/src/orchestrator/sub-agent-model-tier.ts +0 -58
  1423. package/src/orchestrator/subagent-compactor.spec.ts +0 -332
  1424. package/src/orchestrator/subagent-compactor.ts +0 -456
  1425. package/src/orchestrator/text-tool-call-detector.test.ts +0 -99
  1426. package/src/orchestrator/text-tool-call-detector.ts +0 -200
  1427. package/src/orchestrator/token-counter.test.ts +0 -69
  1428. package/src/orchestrator/token-counter.ts +0 -81
  1429. package/src/orchestrator/tool-args-hash.test.ts +0 -121
  1430. package/src/orchestrator/tool-args-hash.ts +0 -221
  1431. package/src/orchestrator/tool-args-repair.test.ts +0 -156
  1432. package/src/orchestrator/tool-args-repair.ts +0 -227
  1433. package/src/orchestrator/tool-loop-cap.test.ts +0 -193
  1434. package/src/orchestrator/tool-loop-cap.ts +0 -174
  1435. package/src/orchestrator/tool-repetition-detector.test.ts +0 -119
  1436. package/src/orchestrator/tool-repetition-detector.ts +0 -0
  1437. package/src/orchestrator/tool-utils.ts +0 -214
  1438. package/src/orchestrator/turn-runner-deps.ts +0 -85
  1439. package/src/pil/__tests__/budget.test.ts +0 -39
  1440. package/src/pil/__tests__/clarity-gate.test.ts +0 -299
  1441. package/src/pil/__tests__/config.test.ts +0 -78
  1442. package/src/pil/__tests__/discovery-cache.test.ts +0 -45
  1443. package/src/pil/__tests__/discovery-types.test.ts +0 -68
  1444. package/src/pil/__tests__/discovery.test.ts +0 -141
  1445. package/src/pil/__tests__/dual-run.test.ts +0 -53
  1446. package/src/pil/__tests__/layer1-intent-trace.test.ts +0 -142
  1447. package/src/pil/__tests__/layer1-intent.test.ts +0 -365
  1448. package/src/pil/__tests__/layer15-context-scan.test.ts +0 -76
  1449. package/src/pil/__tests__/layer16-clarity.test.ts +0 -184
  1450. package/src/pil/__tests__/layer17-feasibility.test.ts +0 -42
  1451. package/src/pil/__tests__/layer18-acceptance.test.ts +0 -116
  1452. package/src/pil/__tests__/layer2-personality.test.ts +0 -63
  1453. package/src/pil/__tests__/layer3-ee-injection.test.ts +0 -189
  1454. package/src/pil/__tests__/layer3-injected-chunk.test.ts +0 -122
  1455. package/src/pil/__tests__/layer4-gsd.test.ts +0 -109
  1456. package/src/pil/__tests__/layer5-context.test.ts +0 -157
  1457. package/src/pil/__tests__/layer6-output.test.ts +0 -362
  1458. package/src/pil/__tests__/llm-classify.test.ts +0 -140
  1459. package/src/pil/__tests__/native-capabilities-workbook.test.ts +0 -45
  1460. package/src/pil/__tests__/ollama-classify.test.ts +0 -81
  1461. package/src/pil/__tests__/orchestrator-integration.test.ts +0 -107
  1462. package/src/pil/__tests__/pipeline.test.ts +0 -191
  1463. package/src/pil/__tests__/renderer-coverage.test.ts +0 -46
  1464. package/src/pil/__tests__/response-tools.test.ts +0 -239
  1465. package/src/pil/__tests__/schema.test.ts +0 -233
  1466. package/src/pil/__tests__/scoreComplexity.test.ts +0 -134
  1467. package/src/pil/__tests__/scoreSufficiency.test.ts +0 -104
  1468. package/src/pil/__tests__/store.test.ts +0 -49
  1469. package/src/pil/__tests__/task-tier-map.test.ts +0 -41
  1470. package/src/pil/agent-operating-contract.test.ts +0 -84
  1471. package/src/pil/agent-operating-contract.ts +0 -70
  1472. package/src/pil/budget-log.ts +0 -86
  1473. package/src/pil/budget.ts +0 -18
  1474. package/src/pil/cheap-model-playbook.test.ts +0 -191
  1475. package/src/pil/cheap-model-playbook.ts +0 -153
  1476. package/src/pil/cheap-model-workbooks.test.ts +0 -154
  1477. package/src/pil/cheap-model-workbooks.ts +0 -109
  1478. package/src/pil/clarity-gate.ts +0 -188
  1479. package/src/pil/config.ts +0 -25
  1480. package/src/pil/discovery-cache.ts +0 -20
  1481. package/src/pil/discovery-types.ts +0 -97
  1482. package/src/pil/discovery.ts +0 -397
  1483. package/src/pil/index.ts +0 -24
  1484. package/src/pil/layer1-intent.test.ts +0 -520
  1485. package/src/pil/layer1-intent.ts +0 -1236
  1486. package/src/pil/layer15-context-scan.ts +0 -159
  1487. package/src/pil/layer16-clarity.test.ts +0 -35
  1488. package/src/pil/layer16-clarity.ts +0 -417
  1489. package/src/pil/layer17-feasibility.ts +0 -40
  1490. package/src/pil/layer18-acceptance.ts +0 -98
  1491. package/src/pil/layer1_5-complexity-size.test.ts +0 -279
  1492. package/src/pil/layer1_5-complexity-size.ts +0 -175
  1493. package/src/pil/layer2-personality.ts +0 -46
  1494. package/src/pil/layer3-ee-injection.ts +0 -406
  1495. package/src/pil/layer4-gsd.ts +0 -124
  1496. package/src/pil/layer5-context.ts +0 -171
  1497. package/src/pil/layer6-output.ts +0 -364
  1498. package/src/pil/llm-classify.ts +0 -199
  1499. package/src/pil/native-capabilities-workbook.ts +0 -124
  1500. package/src/pil/ollama-classify.ts +0 -49
  1501. package/src/pil/pipeline.ts +0 -313
  1502. package/src/pil/response-tools.ts +0 -187
  1503. package/src/pil/schema.ts +0 -111
  1504. package/src/pil/session-state.test.ts +0 -88
  1505. package/src/pil/session-state.ts +0 -157
  1506. package/src/pil/store.ts +0 -29
  1507. package/src/pil/task-tier-map.ts +0 -97
  1508. package/src/pil/timeout.ts +0 -10
  1509. package/src/pil/types.ts +0 -168
  1510. package/src/product-loop/__tests__/artifact-io.test.ts +0 -97
  1511. package/src/product-loop/__tests__/assumption-ledger.test.ts +0 -292
  1512. package/src/product-loop/__tests__/backlog-builder.test.ts +0 -200
  1513. package/src/product-loop/__tests__/backlog-store.test.ts +0 -119
  1514. package/src/product-loop/__tests__/cb2-retry-bonus.test.ts +0 -182
  1515. package/src/product-loop/__tests__/circuit-breakers-coverage.test.ts +0 -82
  1516. package/src/product-loop/__tests__/circuit-breakers.test.ts +0 -90
  1517. package/src/product-loop/__tests__/complexity-routing.spec.ts +0 -315
  1518. package/src/product-loop/__tests__/context-policy.test.ts +0 -280
  1519. package/src/product-loop/__tests__/cost-preview.test.ts +0 -118
  1520. package/src/product-loop/__tests__/cost-scoper.test.ts +0 -76
  1521. package/src/product-loop/__tests__/cross-run-memory.test.ts +0 -195
  1522. package/src/product-loop/__tests__/design-output.spec.ts +0 -39
  1523. package/src/product-loop/__tests__/discover.test.ts +0 -98
  1524. package/src/product-loop/__tests__/discovery-context-format.test.ts +0 -111
  1525. package/src/product-loop/__tests__/discovery-council-runner.test.ts +0 -13
  1526. package/src/product-loop/__tests__/discovery-detection.test.ts +0 -180
  1527. package/src/product-loop/__tests__/discovery-ecosystem.test.ts +0 -246
  1528. package/src/product-loop/__tests__/discovery-integration.test.ts +0 -133
  1529. package/src/product-loop/__tests__/discovery-interview.test.ts +0 -305
  1530. package/src/product-loop/__tests__/discovery-migrations.test.ts +0 -75
  1531. package/src/product-loop/__tests__/discovery-persistence.test.ts +0 -171
  1532. package/src/product-loop/__tests__/discovery-prompt-parser.test.ts +0 -77
  1533. package/src/product-loop/__tests__/discovery-prompt-specificity.test.ts +0 -65
  1534. package/src/product-loop/__tests__/discovery-recommender-ecosystem.test.ts +0 -192
  1535. package/src/product-loop/__tests__/discovery-recommender.test.ts +0 -382
  1536. package/src/product-loop/__tests__/discovery-schema.test.ts +0 -102
  1537. package/src/product-loop/__tests__/done-gate-coverage.test.ts +0 -151
  1538. package/src/product-loop/__tests__/done-gate.test.ts +0 -140
  1539. package/src/product-loop/__tests__/ee-extract-wiring.test.ts +0 -222
  1540. package/src/product-loop/__tests__/extract-to-ee.test.ts +0 -205
  1541. package/src/product-loop/__tests__/feedback-routing.test.ts +0 -93
  1542. package/src/product-loop/__tests__/gather-selectable-alts.test.ts +0 -119
  1543. package/src/product-loop/__tests__/hot-path.spec.ts +0 -177
  1544. package/src/product-loop/__tests__/integration.test.ts +0 -350
  1545. package/src/product-loop/__tests__/loop-driver-audit.test.ts +0 -327
  1546. package/src/product-loop/__tests__/loop-driver.test.ts +0 -253
  1547. package/src/product-loop/__tests__/maintenance-task-synthesis.test.ts +0 -78
  1548. package/src/product-loop/__tests__/phase-a1-a3-sprint-runner.test.ts +0 -315
  1549. package/src/product-loop/__tests__/phase-a2-backlog-build.test.ts +0 -189
  1550. package/src/product-loop/__tests__/phase-budget.test.ts +0 -172
  1551. package/src/product-loop/__tests__/phase-orchestrator-integration.test.ts +0 -143
  1552. package/src/product-loop/__tests__/phase-plan.test.ts +0 -241
  1553. package/src/product-loop/__tests__/phase-rituals.test.ts +0 -205
  1554. package/src/product-loop/__tests__/phase-runner.test.ts +0 -454
  1555. package/src/product-loop/__tests__/phase-tracker-bridge.test.ts +0 -85
  1556. package/src/product-loop/__tests__/pick-backend-stack.test.ts +0 -117
  1557. package/src/product-loop/__tests__/product-identity.test.ts +0 -47
  1558. package/src/product-loop/__tests__/progress-snapshot.test.ts +0 -180
  1559. package/src/product-loop/__tests__/reality-anchor.test.ts +0 -58
  1560. package/src/product-loop/__tests__/repo-audit.test.ts +0 -103
  1561. package/src/product-loop/__tests__/repo-brief.test.ts +0 -155
  1562. package/src/product-loop/__tests__/role-memory.test.ts +0 -70
  1563. package/src/product-loop/__tests__/role-registry.test.ts +0 -235
  1564. package/src/product-loop/__tests__/role-routing-ee.test.ts +0 -90
  1565. package/src/product-loop/__tests__/route-decision-emit.test.ts +0 -258
  1566. package/src/product-loop/__tests__/seed-questions.test.ts +0 -33
  1567. package/src/product-loop/__tests__/ship-polish.test.ts +0 -109
  1568. package/src/product-loop/__tests__/sprint-planner.test.ts +0 -166
  1569. package/src/product-loop/__tests__/sprint-runner-backlog.test.ts +0 -248
  1570. package/src/product-loop/__tests__/sprint-runner-emit.test.ts +0 -324
  1571. package/src/product-loop/__tests__/sprint-runner-phase-chunks.test.ts +0 -220
  1572. package/src/product-loop/__tests__/sprint-runner.test.ts +0 -501
  1573. package/src/product-loop/__tests__/sprint-self-verify.test.ts +0 -77
  1574. package/src/product-loop/__tests__/sprint-store.test.ts +0 -98
  1575. package/src/product-loop/__tests__/stakeholder-acl.test.ts +0 -94
  1576. package/src/product-loop/__tests__/state-md-ee-injections.test.ts +0 -229
  1577. package/src/product-loop/__tests__/sufficiency-routing.spec.ts +0 -183
  1578. package/src/product-loop/__tests__/typed-artifacts.test.ts +0 -259
  1579. package/src/product-loop/__tests__/types.test.ts +0 -103
  1580. package/src/product-loop/__tests__/verify-failure-threshold.test.ts +0 -178
  1581. package/src/product-loop/__tests__/verify-failure-tracking.test.ts +0 -154
  1582. package/src/product-loop/__tests__/verify-result.test.ts +0 -60
  1583. package/src/product-loop/artifact-io.ts +0 -239
  1584. package/src/product-loop/assumption-ledger.ts +0 -270
  1585. package/src/product-loop/backlog-builder.ts +0 -253
  1586. package/src/product-loop/backlog-store.ts +0 -62
  1587. package/src/product-loop/circuit-breakers.ts +0 -76
  1588. package/src/product-loop/context-policy.ts +0 -180
  1589. package/src/product-loop/cost-preview.ts +0 -139
  1590. package/src/product-loop/cost-scoper.ts +0 -49
  1591. package/src/product-loop/cross-run-memory.ts +0 -450
  1592. package/src/product-loop/design-output.ts +0 -24
  1593. package/src/product-loop/discover.ts +0 -159
  1594. package/src/product-loop/discovery-context-format.ts +0 -56
  1595. package/src/product-loop/discovery-council-runner.ts +0 -78
  1596. package/src/product-loop/discovery-detection.ts +0 -161
  1597. package/src/product-loop/discovery-ecosystem.ts +0 -239
  1598. package/src/product-loop/discovery-interview.ts +0 -288
  1599. package/src/product-loop/discovery-migrations.ts +0 -40
  1600. package/src/product-loop/discovery-persistence.ts +0 -219
  1601. package/src/product-loop/discovery-prompt-parser.ts +0 -80
  1602. package/src/product-loop/discovery-recommender.ts +0 -514
  1603. package/src/product-loop/discovery-schema.ts +0 -143
  1604. package/src/product-loop/done-gate.ts +0 -224
  1605. package/src/product-loop/feedback-routing.ts +0 -82
  1606. package/src/product-loop/gather.ts +0 -386
  1607. package/src/product-loop/index.ts +0 -1855
  1608. package/src/product-loop/loop-driver.ts +0 -900
  1609. package/src/product-loop/phase-budget.ts +0 -182
  1610. package/src/product-loop/phase-plan.ts +0 -158
  1611. package/src/product-loop/phase-rituals.ts +0 -158
  1612. package/src/product-loop/phase-runner.ts +0 -455
  1613. package/src/product-loop/phase-tracker-bridge.ts +0 -60
  1614. package/src/product-loop/product-identity.ts +0 -11
  1615. package/src/product-loop/progress-snapshot.ts +0 -216
  1616. package/src/product-loop/reality-anchor.ts +0 -45
  1617. package/src/product-loop/repo-audit.ts +0 -314
  1618. package/src/product-loop/repo-brief.ts +0 -235
  1619. package/src/product-loop/role-memory.ts +0 -72
  1620. package/src/product-loop/role-registry.ts +0 -175
  1621. package/src/product-loop/seed-questions.ts +0 -51
  1622. package/src/product-loop/ship-polish.ts +0 -164
  1623. package/src/product-loop/sprint-planner.ts +0 -241
  1624. package/src/product-loop/sprint-runner.ts +0 -801
  1625. package/src/product-loop/sprint-self-verify.ts +0 -189
  1626. package/src/product-loop/sprint-store.ts +0 -96
  1627. package/src/product-loop/stakeholder-acl.ts +0 -82
  1628. package/src/product-loop/typed-artifacts.ts +0 -332
  1629. package/src/product-loop/types.ts +0 -570
  1630. package/src/product-loop/verify-failure-tracking.ts +0 -225
  1631. package/src/product-loop/verify-result.ts +0 -39
  1632. package/src/providers/.gitkeep +0 -0
  1633. package/src/providers/__test-utils__/load-fixture.ts +0 -36
  1634. package/src/providers/__tests__/adapter-oauth-wiring.test.ts +0 -147
  1635. package/src/providers/__tests__/capabilities-cosmetic.test.ts +0 -119
  1636. package/src/providers/__tests__/capabilities-flags.test.ts +0 -166
  1637. package/src/providers/__tests__/capabilities-provider-options.test.ts +0 -232
  1638. package/src/providers/__tests__/capabilities-sanitize.test.ts +0 -66
  1639. package/src/providers/__tests__/capabilities.test.ts +0 -44
  1640. package/src/providers/__tests__/provider-coverage.test.ts +0 -48
  1641. package/src/providers/__tests__/reasoning-roundtrip.test.ts +0 -150
  1642. package/src/providers/__tests__/runtime-integration.test.ts +0 -106
  1643. package/src/providers/__tests__/runtime.test.ts +0 -94
  1644. package/src/providers/__tests__/siliconflow-sse-repair.test.ts +0 -300
  1645. package/src/providers/__tests__/strategies-registry.test.ts +0 -55
  1646. package/src/providers/__tests__/strategies-resolve.test.ts +0 -137
  1647. package/src/providers/__tests__/wire-debug.test.ts +0 -42
  1648. package/src/providers/adapter.test.ts +0 -21
  1649. package/src/providers/adapter.ts +0 -156
  1650. package/src/providers/anthropic.ts +0 -174
  1651. package/src/providers/auth/__tests__/browser-flow.test.ts +0 -230
  1652. package/src/providers/auth/__tests__/device-flow.test.ts +0 -263
  1653. package/src/providers/auth/__tests__/gemini-oauth.test.ts +0 -387
  1654. package/src/providers/auth/__tests__/grok-oauth.test.ts +0 -283
  1655. package/src/providers/auth/__tests__/openai-oauth.test.ts +0 -378
  1656. package/src/providers/auth/__tests__/token-store.test.ts +0 -152
  1657. package/src/providers/auth/browser-flow.ts +0 -140
  1658. package/src/providers/auth/device-flow.ts +0 -221
  1659. package/src/providers/auth/gemini-oauth.ts +0 -351
  1660. package/src/providers/auth/grok-oauth.ts +0 -406
  1661. package/src/providers/auth/openai-oauth.ts +0 -455
  1662. package/src/providers/auth/registry.ts +0 -138
  1663. package/src/providers/auth/token-store.ts +0 -154
  1664. package/src/providers/auth/types.ts +0 -111
  1665. package/src/providers/capabilities.ts +0 -355
  1666. package/src/providers/endpoints.ts +0 -68
  1667. package/src/providers/errors.test.ts +0 -76
  1668. package/src/providers/errors.ts +0 -46
  1669. package/src/providers/gemini.test.ts +0 -46
  1670. package/src/providers/gemini.ts +0 -42
  1671. package/src/providers/index.ts +0 -28
  1672. package/src/providers/keychain.test.ts +0 -100
  1673. package/src/providers/keychain.ts +0 -278
  1674. package/src/providers/mcp-vision-bridge.test.ts +0 -513
  1675. package/src/providers/mcp-vision-bridge.ts +0 -1020
  1676. package/src/providers/ollama.test.ts +0 -46
  1677. package/src/providers/ollama.ts +0 -36
  1678. package/src/providers/openai-compatible.test.ts +0 -63
  1679. package/src/providers/openai-compatible.ts +0 -62
  1680. package/src/providers/openai.test.ts +0 -65
  1681. package/src/providers/openai.ts +0 -56
  1682. package/src/providers/patch-zod-schema.ts +0 -126
  1683. package/src/providers/pricing.test.ts +0 -97
  1684. package/src/providers/pricing.ts +0 -128
  1685. package/src/providers/prompt-cache-key.spec.ts +0 -28
  1686. package/src/providers/runtime-mock.spec.ts +0 -86
  1687. package/src/providers/runtime.ts +0 -311
  1688. package/src/providers/siliconflow-sse-repair.ts +0 -201
  1689. package/src/providers/strategies/anthropic.strategy.ts +0 -25
  1690. package/src/providers/strategies/base.strategy.ts +0 -76
  1691. package/src/providers/strategies/deepseek.strategy.ts +0 -55
  1692. package/src/providers/strategies/google.strategy.ts +0 -28
  1693. package/src/providers/strategies/ollama.strategy.ts +0 -22
  1694. package/src/providers/strategies/openai.strategy.ts +0 -55
  1695. package/src/providers/strategies/registry.ts +0 -43
  1696. package/src/providers/strategies/siliconflow.strategy.ts +0 -28
  1697. package/src/providers/strategies/xai.strategy.ts +0 -33
  1698. package/src/providers/stream-loop.ts +0 -83
  1699. package/src/providers/types.ts +0 -145
  1700. package/src/providers/vision-proxy.test.ts +0 -252
  1701. package/src/providers/vision-proxy.ts +0 -317
  1702. package/src/providers/wire-debug.ts +0 -163
  1703. package/src/reporter/__tests__/acl-check.test.ts +0 -71
  1704. package/src/reporter/__tests__/auto-fire.test.ts +0 -161
  1705. package/src/reporter/__tests__/budget.test.ts +0 -74
  1706. package/src/reporter/__tests__/handlers.test.ts +0 -192
  1707. package/src/reporter/__tests__/query-router.test.ts +0 -115
  1708. package/src/reporter/acl-check.ts +0 -54
  1709. package/src/reporter/auto-fire.ts +0 -168
  1710. package/src/reporter/budget.ts +0 -59
  1711. package/src/reporter/handlers.ts +0 -212
  1712. package/src/reporter/index.ts +0 -210
  1713. package/src/reporter/query-router.ts +0 -51
  1714. package/src/router/.gitkeep +0 -0
  1715. package/src/router/__tests__/step-router.test.ts +0 -150
  1716. package/src/router/classifier/grammars.ts +0 -17
  1717. package/src/router/classifier/index.test.ts +0 -33
  1718. package/src/router/classifier/index.ts +0 -21
  1719. package/src/router/classifier/regex.test.ts +0 -51
  1720. package/src/router/classifier/regex.ts +0 -160
  1721. package/src/router/classifier/tree-sitter.test.ts +0 -26
  1722. package/src/router/classifier/tree-sitter.ts +0 -87
  1723. package/src/router/cold.test.ts +0 -62
  1724. package/src/router/cold.ts +0 -27
  1725. package/src/router/decide.test.ts +0 -209
  1726. package/src/router/decide.ts +0 -509
  1727. package/src/router/health.test.ts +0 -59
  1728. package/src/router/health.ts +0 -49
  1729. package/src/router/provider-sentinel.test.ts +0 -22
  1730. package/src/router/provider-sentinel.ts +0 -20
  1731. package/src/router/role-override.test.ts +0 -37
  1732. package/src/router/step-router.ts +0 -194
  1733. package/src/router/store.ts +0 -47
  1734. package/src/router/types.ts +0 -20
  1735. package/src/router/warm.test.ts +0 -234
  1736. package/src/router/warm.ts +0 -93
  1737. package/src/scaffold/__tests__/continuation-prompt.test.ts +0 -93
  1738. package/src/scaffold/__tests__/continue-as-council.spec.ts +0 -122
  1739. package/src/scaffold/__tests__/dotnet-assembly-name.test.ts +0 -28
  1740. package/src/scaffold/__tests__/fe-scaffold-contents.test.ts +0 -127
  1741. package/src/scaffold/__tests__/init-new.smoke.spec.ts +0 -99
  1742. package/src/scaffold/__tests__/init-new.spec.ts +0 -450
  1743. package/src/scaffold/__tests__/install-bb-templates.spec.ts +0 -86
  1744. package/src/scaffold/__tests__/point-to-existing.spec.ts +0 -114
  1745. package/src/scaffold/bb-ecosystem-apply.ts +0 -457
  1746. package/src/scaffold/bb-quality-gate.ts +0 -287
  1747. package/src/scaffold/continuation-prompt.ts +0 -80
  1748. package/src/scaffold/continue-as-council.ts +0 -99
  1749. package/src/scaffold/init-new.ts +0 -1691
  1750. package/src/scaffold/point-to-existing.ts +0 -83
  1751. package/src/scaffold/resume-from-gate-failures.ts +0 -167
  1752. package/src/self-qa/__tests__/agentic-context.test.ts +0 -104
  1753. package/src/self-qa/__tests__/agentic-loop.test.ts +0 -70
  1754. package/src/self-qa/__tests__/delta-encoder.test.ts +0 -113
  1755. package/src/self-qa/__tests__/judge.test.ts +0 -152
  1756. package/src/self-qa/__tests__/scenario-planner.test.ts +0 -87
  1757. package/src/self-qa/__tests__/spec-emitter.test.ts +0 -67
  1758. package/src/self-qa/agentic-context.ts +0 -211
  1759. package/src/self-qa/agentic-loop.ts +0 -590
  1760. package/src/self-qa/delta-encoder.ts +0 -149
  1761. package/src/self-qa/index.ts +0 -117
  1762. package/src/self-qa/judge.ts +0 -248
  1763. package/src/self-qa/orchestrator.ts +0 -269
  1764. package/src/self-qa/scenario-planner.ts +0 -289
  1765. package/src/self-qa/spec-emitter.ts +0 -152
  1766. package/src/self-qa/types.ts +0 -98
  1767. package/src/storage/__tests__/migrations.test.ts +0 -395
  1768. package/src/storage/__tests__/sweep-stale-pending.test.ts +0 -112
  1769. package/src/storage/__tests__/ui-interaction-log.test.ts +0 -136
  1770. package/src/storage/atomic-io.test.ts +0 -92
  1771. package/src/storage/atomic-io.ts +0 -160
  1772. package/src/storage/config.test.ts +0 -33
  1773. package/src/storage/config.ts +0 -53
  1774. package/src/storage/db.ts +0 -184
  1775. package/src/storage/index.ts +0 -26
  1776. package/src/storage/interaction-log.ts +0 -126
  1777. package/src/storage/migrations.ts +0 -205
  1778. package/src/storage/session-dir.ts +0 -37
  1779. package/src/storage/sessions.ts +0 -225
  1780. package/src/storage/tool-results.ts +0 -56
  1781. package/src/storage/transcript-response-entry.test.ts +0 -115
  1782. package/src/storage/transcript-view.ts +0 -45
  1783. package/src/storage/transcript.test.ts +0 -24
  1784. package/src/storage/transcript.ts +0 -637
  1785. package/src/storage/ui-interaction-log.ts +0 -170
  1786. package/src/storage/usage-cap.test.ts +0 -59
  1787. package/src/storage/usage-cap.ts +0 -81
  1788. package/src/storage/usage.ts +0 -117
  1789. package/src/storage/workspaces.ts +0 -84
  1790. package/src/tools/__tests__/vision-gate.test.ts +0 -66
  1791. package/src/tools/bash-output-cache.test.ts +0 -113
  1792. package/src/tools/bash-output-cache.ts +0 -156
  1793. package/src/tools/bash-output-integration.test.ts +0 -33
  1794. package/src/tools/bash.test.ts +0 -447
  1795. package/src/tools/bash.ts +0 -769
  1796. package/src/tools/computer.test.ts +0 -187
  1797. package/src/tools/computer.ts +0 -632
  1798. package/src/tools/file-tracker.test.ts +0 -101
  1799. package/src/tools/file-tracker.ts +0 -70
  1800. package/src/tools/file.test.ts +0 -151
  1801. package/src/tools/file.ts +0 -203
  1802. package/src/tools/grep.ts +0 -187
  1803. package/src/tools/registry-bash-empty-command.test.ts +0 -64
  1804. package/src/tools/registry-bash-footer.test.ts +0 -95
  1805. package/src/tools/registry-ee-query.test.ts +0 -57
  1806. package/src/tools/registry-session-repeat.test.ts +0 -105
  1807. package/src/tools/registry.test.ts +0 -38
  1808. package/src/tools/registry.ts +0 -704
  1809. package/src/tools/schedule.test.ts +0 -143
  1810. package/src/tools/schedule.ts +0 -610
  1811. package/src/tools/todo-write-snapshot.test.ts +0 -53
  1812. package/src/tools/todo-write-snapshot.ts +0 -63
  1813. package/src/tools/vision-gate.ts +0 -74
  1814. package/src/types/index.ts +0 -550
  1815. package/src/ui/__tests__/picker-providers.test.ts +0 -37
  1816. package/src/ui/agents-modal.tsx +0 -293
  1817. package/src/ui/app.tsx +0 -7084
  1818. package/src/ui/cards/__tests__/product-status-card.test.ts +0 -30
  1819. package/src/ui/cards/product-status-card.tsx +0 -117
  1820. package/src/ui/components/SuggestionOverlay.tsx +0 -38
  1821. package/src/ui/components/Toast.tsx +0 -100
  1822. package/src/ui/components/__tests__/council-leader-bubble.test.ts +0 -16
  1823. package/src/ui/components/__tests__/council-message-bubble.test.ts +0 -85
  1824. package/src/ui/components/__tests__/council-phase-timeline.test.ts +0 -57
  1825. package/src/ui/components/__tests__/council-placeholder-bubble.test.ts +0 -16
  1826. package/src/ui/components/__tests__/council-question-card.test.ts +0 -133
  1827. package/src/ui/components/__tests__/council-synthesis-banner.test.ts +0 -12
  1828. package/src/ui/components/__tests__/task-list-panel.test.ts +0 -37
  1829. package/src/ui/components/__tests__/use-pair-quote-buffer.test.ts +0 -41
  1830. package/src/ui/components/btw-overlay.tsx +0 -66
  1831. package/src/ui/components/bubble-layout.ts +0 -66
  1832. package/src/ui/components/code-block-truncate.ts +0 -24
  1833. package/src/ui/components/copy-flash-banner.tsx +0 -31
  1834. package/src/ui/components/council-info-card.tsx +0 -44
  1835. package/src/ui/components/council-leader-bubble.tsx +0 -40
  1836. package/src/ui/components/council-message-bubble.tsx +0 -110
  1837. package/src/ui/components/council-phase-timeline.tsx +0 -112
  1838. package/src/ui/components/council-placeholder-bubble.tsx +0 -64
  1839. package/src/ui/components/council-question-card.tsx +0 -256
  1840. package/src/ui/components/council-status-list.tsx +0 -111
  1841. package/src/ui/components/council-synthesis-banner.tsx +0 -36
  1842. package/src/ui/components/diff-view.tsx +0 -225
  1843. package/src/ui/components/halt-recovery-card.tsx +0 -84
  1844. package/src/ui/components/hero-logo.tsx +0 -62
  1845. package/src/ui/components/init-new-form-card.tsx +0 -470
  1846. package/src/ui/components/lsp-views.tsx +0 -104
  1847. package/src/ui/components/media-views.tsx +0 -66
  1848. package/src/ui/components/message-view.tsx +0 -442
  1849. package/src/ui/components/point-to-existing-form-card.tsx +0 -136
  1850. package/src/ui/components/prompt-box.tsx +0 -306
  1851. package/src/ui/components/role-palette.ts +0 -62
  1852. package/src/ui/components/session-header.tsx +0 -68
  1853. package/src/ui/components/slash-inline-menu.tsx +0 -63
  1854. package/src/ui/components/structured-response-view.tsx +0 -191
  1855. package/src/ui/components/task-list-panel.tsx +0 -127
  1856. package/src/ui/components/tool-group.tsx +0 -129
  1857. package/src/ui/components/tool-result-views.tsx +0 -258
  1858. package/src/ui/components/use-pair-quote-buffer.ts +0 -23
  1859. package/src/ui/constants.ts +0 -242
  1860. package/src/ui/hooks/use-agent-editor.ts +0 -61
  1861. package/src/ui/hooks/use-mcp-editor.ts +0 -39
  1862. package/src/ui/hooks/use-model-picker.ts +0 -50
  1863. package/src/ui/hooks/useTypeahead.ts +0 -160
  1864. package/src/ui/markdown.tsx +0 -49
  1865. package/src/ui/mcp-modal-types.ts +0 -33
  1866. package/src/ui/mcp-modal.tsx +0 -484
  1867. package/src/ui/modals/api-key-modal.tsx +0 -99
  1868. package/src/ui/modals/connect-modal.tsx +0 -259
  1869. package/src/ui/modals/model-picker-modal.tsx +0 -347
  1870. package/src/ui/modals/sandbox-picker-modal.tsx +0 -99
  1871. package/src/ui/modals/update-modal.tsx +0 -67
  1872. package/src/ui/modals/wallet-picker-modal.tsx +0 -186
  1873. package/src/ui/picker-providers.ts +0 -41
  1874. package/src/ui/plan.tsx +0 -346
  1875. package/src/ui/schedule-modal.tsx +0 -138
  1876. package/src/ui/slash/__tests__/clear.test.ts +0 -86
  1877. package/src/ui/slash/__tests__/compact.test.ts +0 -56
  1878. package/src/ui/slash/__tests__/cost.test.ts +0 -62
  1879. package/src/ui/slash/__tests__/discuss.test.ts +0 -101
  1880. package/src/ui/slash/__tests__/execute.test.ts +0 -86
  1881. package/src/ui/slash/__tests__/expand.test.ts +0 -86
  1882. package/src/ui/slash/__tests__/ideal.test.ts +0 -182
  1883. package/src/ui/slash/__tests__/menu-parity.test.ts +0 -44
  1884. package/src/ui/slash/__tests__/optimize.test.ts +0 -155
  1885. package/src/ui/slash/__tests__/pin.test.ts +0 -47
  1886. package/src/ui/slash/__tests__/plan.test.ts +0 -98
  1887. package/src/ui/slash/__tests__/status-render.test.ts +0 -82
  1888. package/src/ui/slash/clear.ts +0 -89
  1889. package/src/ui/slash/compact.ts +0 -46
  1890. package/src/ui/slash/cost.ts +0 -63
  1891. package/src/ui/slash/council-inspect.ts +0 -188
  1892. package/src/ui/slash/council.ts +0 -30
  1893. package/src/ui/slash/debug.ts +0 -153
  1894. package/src/ui/slash/discuss.ts +0 -71
  1895. package/src/ui/slash/ee.ts +0 -304
  1896. package/src/ui/slash/execute.ts +0 -44
  1897. package/src/ui/slash/expand.ts +0 -51
  1898. package/src/ui/slash/export.ts +0 -309
  1899. package/src/ui/slash/ideal.ts +0 -292
  1900. package/src/ui/slash/menu-items.ts +0 -107
  1901. package/src/ui/slash/optimize.ts +0 -47
  1902. package/src/ui/slash/pin.ts +0 -41
  1903. package/src/ui/slash/plan.ts +0 -62
  1904. package/src/ui/slash/registry.ts +0 -47
  1905. package/src/ui/slash/route.test.ts +0 -82
  1906. package/src/ui/slash/route.ts +0 -43
  1907. package/src/ui/slash/status.ts +0 -36
  1908. package/src/ui/state/active-run.ts +0 -56
  1909. package/src/ui/status-bar/index.test.tsx +0 -154
  1910. package/src/ui/status-bar/index.tsx +0 -126
  1911. package/src/ui/status-bar/store.test.ts +0 -131
  1912. package/src/ui/status-bar/store.ts +0 -332
  1913. package/src/ui/status-bar/tier-badge.test.tsx +0 -38
  1914. package/src/ui/status-bar/tier-badge.tsx +0 -29
  1915. package/src/ui/status-bar/usd-meter.test.tsx +0 -37
  1916. package/src/ui/status-bar/usd-meter.tsx +0 -22
  1917. package/src/ui/syntax-highlight.ts +0 -627
  1918. package/src/ui/terminal-selection-text.ts +0 -72
  1919. package/src/ui/theme.ts +0 -95
  1920. package/src/ui/types.ts +0 -83
  1921. package/src/ui/utils/__tests__/format.test.ts +0 -71
  1922. package/src/ui/utils/__tests__/tools.test.ts +0 -57
  1923. package/src/ui/utils/color.ts +0 -19
  1924. package/src/ui/utils/format.ts +0 -133
  1925. package/src/ui/utils/modal.ts +0 -9
  1926. package/src/ui/utils/text.ts +0 -32
  1927. package/src/ui/utils/tools.ts +0 -137
  1928. package/src/usage/.gitkeep +0 -0
  1929. package/src/usage/__tests__/product-ledger.test.ts +0 -86
  1930. package/src/usage/cost-log.ts +0 -158
  1931. package/src/usage/decision-log.ts +0 -86
  1932. package/src/usage/downgrade.test.ts +0 -86
  1933. package/src/usage/downgrade.ts +0 -88
  1934. package/src/usage/estimator.test.ts +0 -43
  1935. package/src/usage/estimator.ts +0 -58
  1936. package/src/usage/ledger.test.ts +0 -200
  1937. package/src/usage/ledger.ts +0 -253
  1938. package/src/usage/midstream.test.ts +0 -55
  1939. package/src/usage/midstream.ts +0 -51
  1940. package/src/usage/product-ledger.ts +0 -119
  1941. package/src/usage/thresholds.test.ts +0 -83
  1942. package/src/usage/thresholds.ts +0 -74
  1943. package/src/usage/types.ts +0 -41
  1944. package/src/utils/__tests__/auto-council-settings.test.ts +0 -46
  1945. package/src/utils/__tests__/ee-logger.test.ts +0 -197
  1946. package/src/utils/__tests__/file-lock.test.ts +0 -74
  1947. package/src/utils/__tests__/llm-deadline.test.ts +0 -64
  1948. package/src/utils/__tests__/rate-limit.test.ts +0 -42
  1949. package/src/utils/__tests__/settings-disabled-models.test.ts +0 -113
  1950. package/src/utils/__tests__/settings-web-research.test.ts +0 -45
  1951. package/src/utils/__tests__/slugify.test.ts +0 -45
  1952. package/src/utils/__tests__/visible-retry.test.ts +0 -195
  1953. package/src/utils/at-mentions.ts +0 -120
  1954. package/src/utils/clipboard-image.ts +0 -139
  1955. package/src/utils/ee-logger.ts +0 -163
  1956. package/src/utils/file-index.ts +0 -152
  1957. package/src/utils/file-lock.ts +0 -66
  1958. package/src/utils/git-root.ts +0 -17
  1959. package/src/utils/host-clipboard.ts +0 -68
  1960. package/src/utils/install-manager.test.ts +0 -167
  1961. package/src/utils/install-manager.ts +0 -429
  1962. package/src/utils/instructions.test.ts +0 -112
  1963. package/src/utils/instructions.ts +0 -149
  1964. package/src/utils/llm-deadline.ts +0 -80
  1965. package/src/utils/permission-mode.test.ts +0 -121
  1966. package/src/utils/permission-mode.ts +0 -94
  1967. package/src/utils/rate-limit.ts +0 -21
  1968. package/src/utils/redactor.test.ts +0 -100
  1969. package/src/utils/redactor.ts +0 -223
  1970. package/src/utils/settings.test.ts +0 -181
  1971. package/src/utils/settings.ts +0 -1163
  1972. package/src/utils/shell.test.ts +0 -102
  1973. package/src/utils/shell.ts +0 -204
  1974. package/src/utils/side-question.ts +0 -39
  1975. package/src/utils/skills.test.ts +0 -58
  1976. package/src/utils/skills.ts +0 -207
  1977. package/src/utils/slugify.ts +0 -9
  1978. package/src/utils/subagent-display.test.ts +0 -23
  1979. package/src/utils/subagent-display.ts +0 -11
  1980. package/src/utils/subagents-settings.test.ts +0 -84
  1981. package/src/utils/telegram-audio-settings.test.ts +0 -44
  1982. package/src/utils/update-checker.test.ts +0 -182
  1983. package/src/utils/update-checker.ts +0 -33
  1984. package/src/utils/visible-retry.ts +0 -56
  1985. package/src/verify/__tests__/coverage-parsers.test.ts +0 -86
  1986. package/src/verify/__tests__/dotnet-recipe.test.ts +0 -88
  1987. package/src/verify/checkpoint.test.ts +0 -186
  1988. package/src/verify/checkpoint.ts +0 -239
  1989. package/src/verify/coverage-parsers.ts +0 -76
  1990. package/src/verify/entrypoint.test.ts +0 -293
  1991. package/src/verify/entrypoint.ts +0 -495
  1992. package/src/verify/environment.test.ts +0 -119
  1993. package/src/verify/environment.ts +0 -115
  1994. package/src/verify/evidence.ts +0 -104
  1995. package/src/verify/orchestrator.test.ts +0 -159
  1996. package/src/verify/orchestrator.ts +0 -129
  1997. package/src/verify/recipes.ts +0 -592
  1998. package/src/verify/retry.ts +0 -62
  1999. package/src/verify/runtime-prep.test.ts +0 -47
  2000. /package/dist/src/{pil/layer16-clarity.test.d.ts → council/__tests__/clarification-prompt.test.d.ts} +0 -0
@@ -1,1855 +0,0 @@
1
- import { promises as fs } from "node:fs";
2
- import * as path from "node:path";
3
- import { resolveLeaderModel } from "../council/leader.js";
4
- import type { CouncilLLM, PreflightResponder, QuestionResponder } from "../council/types.js";
5
- import type { EERouteResult } from "../ee/bridge.js";
6
- import { routeModel as eeRouteModel } from "../ee/bridge.js";
7
- import { fireAndForgetPhaseOutcome } from "../ee/phase-outcome.js";
8
- import { readArtifact } from "../flow/artifact-io.js";
9
- import { createRun, loadRun } from "../flow/run-manager.js";
10
- import { getModelsForProvider } from "../models/registry.js";
11
- import { loadKeyForProvider } from "../providers/keychain.js";
12
- import type { ProviderId } from "../providers/types.js";
13
- import { ALL_PROVIDER_IDS } from "../providers/types.js";
14
- import { defaultResolveChannelId, maybeAutoFire } from "../reporter/auto-fire.js";
15
- import { logInteraction, logUIInteraction } from "../storage/index.js";
16
- import type { ModelInfo, StreamChunk, VerifyRecipe } from "../types/index.js";
17
- import { activeRunStore } from "../ui/state/active-run.js";
18
- import { markIterationCrashed, readIterations, readManifest, writeManifest } from "./artifact-io.js";
19
- import { buildBacklog } from "./backlog-builder.js";
20
- import { readBacklog, writeBacklog } from "./backlog-store.js";
21
- import { formatCostPreview, previewRunCost } from "./cost-preview.js";
22
- import { extractRunToEE } from "./cross-run-memory.js";
23
- import { buildContinueFeedback, type ContinueFeedback } from "./feedback-routing.js";
24
- import { type DriverContext, type DriverResult, runLoopDriver } from "./loop-driver.js";
25
- import { resolveRoles } from "./role-registry.js";
26
- import { polishDelivery } from "./ship-polish.js";
27
- import { applySprintAssignments, planSprints } from "./sprint-planner.js";
28
- import { runSprint } from "./sprint-runner.js";
29
- import { readSprintPlan, setActiveSprint, writeSprintPlan } from "./sprint-store.js";
30
- import type { ImplementationPlanArtifact, IterationState, ProductSpec, RoleSlot } from "./types.js";
31
-
32
- export interface ProductLoopFlags {
33
- maxCost: number;
34
- maxSprints: number;
35
- doneThreshold: number;
36
- stack?: string;
37
- /** P2.7: when true, always run full council debate even for low-complexity ideas. */
38
- forceCouncil?: boolean;
39
- /** If set, halt when total tokens exceed this limit. */
40
- budgetTokens?: number;
41
- }
42
-
43
- export interface ProductLoopOptions {
44
- /** Required for `start` — the user's idea. Ignored for other subcommands. */
45
- idea?: string;
46
- /** Required for resume/abort/ship/status<runId>. */
47
- runId?: string;
48
- /** Subcommand selector. Default = start. */
49
- subcommand?: "start" | "status" | "resume" | "abort" | "ship";
50
-
51
- flowDir: string;
52
- /** Session model id from the orchestrator (this.modelId). Used to resolve real council models. */
53
- sessionModelId: string;
54
- llm: CouncilLLM;
55
- flags: ProductLoopFlags;
56
- respondToQuestion: QuestionResponder;
57
- respondToPreflight: PreflightResponder;
58
-
59
- /** Optional bridges; sprint-runner uses them when present. */
60
- cwd?: string;
61
- processMessageFn?: (message: string) => AsyncGenerator<StreamChunk, void, unknown>;
62
- detectVerifyRecipe?: () => Promise<VerifyRecipe | null>;
63
- /** Test hook: pre-resolved role assignments so the harness can pin model ids. */
64
- roleAssignments?: Map<RoleSlot, { modelId: string; provider: string; tier?: string }>;
65
- /** P5: when true, skip cross-run workspace memory injection. */
66
- skipPriorContext?: boolean;
67
- /**
68
- * Mode C — explicit override. When "maintain", runProductLoop dispatches to
69
- * runMaintain (single-task PR flow). When "new", forces Mode A (greenfield)
70
- * even if cwd has a verify recipe. When undefined, auto-detect (verify
71
- * recipe present + cwd looks like an existing project → Mode C).
72
- * See .planning/MAINTAIN-MODE.md.
73
- */
74
- mode?: "maintain" | "new";
75
- /** Mode C — opt-in: run `gh pr create` after PR is built. Default false (print to stdout + write to .planning/runs/<runId>/pr.md). */
76
- ghPr?: boolean;
77
- /**
78
- * P2.6: Complexity decision from PIL Layer 1. When "low" and forceCouncil is
79
- * not set, the dispatcher routes to runHotPath (single sprint, no council debate).
80
- */
81
- complexity?: "low" | "medium" | "high";
82
- /**
83
- * Sufficiency gaps from PIL Layer 1. When non-empty, the dispatcher forces
84
- * the Council path regardless of complexity — vague prompts MUST go through
85
- * AskCard discovery before any scaffolding. Each entry seeds a discovery
86
- * question category (scope/target/intent).
87
- */
88
- sufficiencyMissing?: readonly import("../pil/layer1-intent.js").SufficiencyMissing[];
89
- /**
90
- * Chat session id (sessions.id) — required for interaction_logs telemetry
91
- * inserts to satisfy the FK constraint. The /ideal runId is NOT a valid
92
- * sessions.id; passing runId there silently fails FK on STRICT bun:sqlite.
93
- */
94
- sessionId?: string;
95
- }
96
-
97
- export interface ProductLoopResult extends DriverResult {
98
- /** Number of sprints actually executed (≥ 0). */
99
- sprintsRun?: number;
100
- /** Whether the run reached the shipped state (Cond #5 passed). */
101
- shipped?: boolean;
102
- }
103
-
104
- /**
105
- * Entry point for the Product Ideal Loop.
106
- *
107
- * Subcommands:
108
- * - start (default): create run → drive FSM → run sprints → done | halted
109
- * - status: list runs (or detail one when runId provided)
110
- * - resume: re-enter the FSM from state.md, marking any in-flight sprint as crashed
111
- * - abort: write manifest aborted=true and post EE phase-outcome=aborted
112
- * - ship: skip Cond #1-#4 if already passing; force final user gate (Cond #5)
113
- */
114
- export async function* runProductLoop(
115
- opts: ProductLoopOptions,
116
- ): AsyncGenerator<StreamChunk, ProductLoopResult, unknown> {
117
- const sub = opts.subcommand ?? "start";
118
-
119
- switch (sub) {
120
- case "status":
121
- return yield* runStatus(opts);
122
- case "resume":
123
- return yield* runResume(opts);
124
- case "abort":
125
- return yield* runAbort(opts);
126
- case "ship":
127
- return yield* runShip(opts);
128
- default: {
129
- // Mode C dispatch — see .planning/MAINTAIN-MODE.md "Trigger mechanism".
130
- // 1. Explicit --maintain → Mode C
131
- // 2. Explicit --new → Mode A (current behavior, skip detection)
132
- // 3. Auto-detect: verify recipe present in cwd → Mode C
133
- // 4. Otherwise → Mode A
134
- if (opts.mode === "maintain") {
135
- return yield* runMaintain(opts);
136
- }
137
- if (opts.mode !== "new" && opts.detectVerifyRecipe) {
138
- try {
139
- const recipe = await opts.detectVerifyRecipe();
140
- if (recipe) {
141
- return yield* runMaintain(opts);
142
- }
143
- } catch {
144
- // Detection failure is non-fatal — fall through to Mode A.
145
- }
146
- }
147
-
148
- // C1 — Existing-repo bypass. The sufficiency gate below was tuned for
149
- // greenfield: a vague "todo app" prompt with no folder MUST go to
150
- // Council so AskCard can pin productType / audience / stack before
151
- // any scaffolding. But when /ideal runs inside a non-empty folder,
152
- // those answers are derivable from the source (manifests, dirs, deps)
153
- // — forcing the user through 6 AskCards is the regression session
154
- // e2660a052918 demonstrated. Skip the sufficiency gate (and prefer
155
- // hot-path over full Council for medium complexity) when the cwd is
156
- // an existing project AND the caller hasn't explicitly forced council.
157
- //
158
- // forceCouncil=true still wins — user can opt back into the full
159
- // Council pipeline when they actually want it (e.g. architectural
160
- // change to an existing repo).
161
- const existingRepoBypass = await detectExistingRepoBypass(opts);
162
- const hasGaps = !!(opts.sufficiencyMissing && opts.sufficiencyMissing.length > 0);
163
- if (hasGaps && !existingRepoBypass) {
164
- const forcedOpts: ProductLoopOptions = {
165
- ...opts,
166
- flags: { ...opts.flags, forceCouncil: true },
167
- };
168
- return yield* runStart(forcedOpts);
169
- }
170
- // Existing repo + complexity≠high → hot-path. The leader can grep
171
- // the source instead of interviewing the user. Only architectural
172
- // changes (complexity=high) still warrant the full Council debate.
173
- if (existingRepoBypass && opts.complexity !== "high" && !opts.flags.forceCouncil) {
174
- return yield* runHotPath(opts);
175
- }
176
- if (opts.complexity === "low" && !opts.flags.forceCouncil) {
177
- return yield* runHotPath(opts);
178
- }
179
- return yield* runStart(opts);
180
- }
181
- }
182
- }
183
-
184
- /**
185
- * C1 — Decide whether the existing-repo bypass should fire for THIS run.
186
- *
187
- * Returns true when `cwd` contains source code or a manifest (any of:
188
- * package.json, Cargo.toml, go.mod, pyproject.toml, *.csproj, *.sln,
189
- * Directory.Build.props, or a top-level source file). False when the
190
- * folder is empty / probe fails — in which case the original gating
191
- * (Council for vague greenfield prompts) takes over.
192
- *
193
- * Sync probe, no I/O retry. `forceCouncil` overrides this gate at the
194
- * call site — when the user explicitly asks for Council we honor it
195
- * even on an existing repo (e.g. "rearchitect this codebase").
196
- */
197
- async function detectExistingRepoBypass(opts: ProductLoopOptions): Promise<boolean> {
198
- if (opts.flags?.forceCouncil) return false;
199
- const cwd = opts.cwd ?? process.cwd();
200
- try {
201
- const { detectExistingProject } = await import("./discovery-detection.js");
202
- const det = await detectExistingProject(cwd);
203
- return det.classification !== "greenfield";
204
- } catch {
205
- // Detection failure is non-fatal — fall back to the original gating.
206
- return false;
207
- }
208
- }
209
-
210
- /**
211
- * P2.5 — Hot-path for complexity=low ideas.
212
- *
213
- * Skips Council debate + scoping. Goes straight from idea → single sprint → ship.
214
- * extractRunToEE still fires so cross-run memory continues to build.
215
- */
216
- async function* runHotPath(opts: ProductLoopOptions): AsyncGenerator<StreamChunk, ProductLoopResult, unknown> {
217
- const { idea, flowDir, flags } = opts;
218
- if (!idea?.trim()) {
219
- yield { type: "content", content: "error: /ideal start requires an idea" } as StreamChunk;
220
- return { runId: "", stage: "error", success: false, reason: "missing_idea" };
221
- }
222
-
223
- const runState = await createRun(flowDir);
224
- const runId = runState.id;
225
-
226
- await writeManifest(flowDir, runId, {
227
- idea,
228
- capUsd: flags.maxCost,
229
- maxSprints: 1, // hot-path always caps at 1 sprint
230
- doneThreshold: flags.doneThreshold,
231
- stack: flags.stack,
232
- createdAt: new Date(),
233
- });
234
-
235
- yield {
236
- type: "content",
237
- content: "\n> hot-path: complexity=low → single sprint, no council debate\n",
238
- } as StreamChunk;
239
-
240
- // Emit route-decision harness event (agent-mode only; no-op otherwise).
241
- try {
242
- const _ar = (globalThis as Record<string, unknown>).__muonroiAgentRuntime as
243
- | { emitEvent: (e: unknown) => void }
244
- | undefined;
245
- _ar?.emitEvent({
246
- t: "event",
247
- kind: "route-decision",
248
- path: "hot-path",
249
- complexity: opts.complexity ?? "low",
250
- forceCouncil: false,
251
- runId,
252
- });
253
- } catch {
254
- /* best-effort */
255
- }
256
-
257
- // Telemetry: log routing decision.
258
- try {
259
- logInteraction(opts.sessionId ?? runId, "routing", {
260
- eventSubtype: "ideal_hot_path",
261
- data: { complexity: "low", forceCouncil: false },
262
- });
263
- } catch {
264
- // DB errors must not break /ideal
265
- }
266
- logUIInteraction(opts.sessionId, {
267
- subtype: "route_decision",
268
- data: { path: "hot-path", complexity: opts.complexity ?? "low", forceCouncil: false, runId },
269
- });
270
-
271
- try {
272
- const _ar = (globalThis as Record<string, unknown>).__muonroiAgentRuntime as
273
- | { emitEvent: (e: unknown) => void }
274
- | undefined;
275
- _ar?.emitEvent({
276
- t: "event",
277
- kind: "sprint-plan-committed",
278
- runId,
279
- projectDir: opts.cwd ?? null,
280
- sprintCount: 1,
281
- sprintIds: ["sprint-1"],
282
- source: "auto",
283
- ts: Date.now(),
284
- });
285
- } catch {
286
- /* best-effort */
287
- }
288
-
289
- // B1: update active-run store; B2: auto-fire plan committed.
290
- try {
291
- const { productSlug: deriveSlug } = await import("./product-identity.js");
292
- const slug = deriveSlug(idea);
293
- activeRunStore.setActiveRun(runId, flowDir, slug);
294
- fireAutoReport("sprint-plan-committed", { runId, flowDir, productSlug: slug, sprintCount: 1 });
295
- } catch {
296
- /* best-effort */
297
- }
298
-
299
- // Build a minimal ProductSpec inline (no LLM calls needed for the hot-path).
300
- const productSpec: ProductSpec = {
301
- idea,
302
- persona: "users",
303
- mvp: [],
304
- phase2: [],
305
- architecture: "",
306
- ioContract: "",
307
- folderStructure: "",
308
- sprintEstimate: 1,
309
- costEstimate: 1,
310
- stack: flags.stack,
311
- createdAt: new Date(),
312
- };
313
-
314
- const ctx: DriverContext = {
315
- runId,
316
- flowDir,
317
- idea,
318
- sessionModelId: opts.sessionModelId,
319
- llm: opts.llm,
320
- flags,
321
- respondToQuestion: opts.respondToQuestion,
322
- respondToPreflight: opts.respondToPreflight,
323
- cwd: opts.cwd,
324
- sessionId: opts.sessionId,
325
- processMessageFn: opts.processMessageFn,
326
- detectVerifyRecipe: opts.detectVerifyRecipe,
327
- skipPriorContext: opts.skipPriorContext,
328
- sufficiencyMissing: opts.sufficiencyMissing,
329
- };
330
-
331
- const roleAssignments = opts.roleAssignments ?? (await resolveRoleAssignments(opts.sessionModelId));
332
-
333
- // Run a single sprint (maxSprints=1 enforced regardless of opts.flags.maxSprints).
334
- let iter: import("./types.js").IterationState;
335
- try {
336
- const sprintGen = runSprint({
337
- sprintN: 1,
338
- ctx,
339
- productSpec,
340
- roleAssignments,
341
- history: [],
342
- });
343
- let result: import("./types.js").IterationState | undefined;
344
- while (true) {
345
- const step = await sprintGen.next();
346
- if (step.done) {
347
- result = step.value as import("./types.js").IterationState;
348
- break;
349
- }
350
- // Site 1 — forward halt chunk to UI, mark stage halted, stop iteration.
351
- if (step.value && (step.value as StreamChunk).type === "halt") {
352
- yield step.value as StreamChunk;
353
- const manifest = await readManifest(flowDir, runId);
354
- const haltReason = (step.value as StreamChunk).haltChunk?.reason ?? "no_recipe";
355
- if (manifest) {
356
- await writeManifest(flowDir, runId, {
357
- ...manifest,
358
- verdict: { pass: false, score: 0, reason: haltReason, failedCondition: undefined as any },
359
- });
360
- }
361
- return { runId, stage: "halted", success: false, reason: haltReason, sprintsRun: 0 };
362
- }
363
- yield step.value as StreamChunk;
364
- }
365
- iter = result!;
366
- } catch (err) {
367
- const msg = err instanceof Error ? err.message : String(err);
368
- yield { type: "content", content: `\n> Sprint 1 halted: ${msg}\n` } as StreamChunk;
369
- const manifest = await readManifest(flowDir, runId);
370
- if (manifest) {
371
- await writeManifest(flowDir, runId, {
372
- ...manifest,
373
- verdict: { pass: false, score: 0, reason: msg, failedCondition: undefined as any },
374
- });
375
- }
376
- return { runId, stage: "halted", success: false, reason: msg, sprintsRun: 0 };
377
- }
378
-
379
- if (iter.stage !== "shipped") {
380
- return {
381
- runId,
382
- stage: "halted",
383
- success: false,
384
- reason: iter.lastVerifyResult ?? "sprint_not_shipped",
385
- sprintsRun: 1,
386
- };
387
- }
388
-
389
- // Sprint shipped — write final manifest.
390
- const manifest = await readManifest(flowDir, runId);
391
- if (manifest) {
392
- await writeManifest(flowDir, runId, {
393
- ...manifest,
394
- doneAt: new Date(),
395
- verdict: {
396
- pass: true,
397
- score: iter.scoreAfter,
398
- failedCondition: undefined as any,
399
- reason: "all_conditions_met",
400
- },
401
- });
402
- }
403
-
404
- // Delivery polish.
405
- if (opts.cwd) {
406
- try {
407
- const polish = await polishDelivery({
408
- cwd: opts.cwd,
409
- runDir: path.join(flowDir, "runs", runId),
410
- productSpec,
411
- runId,
412
- });
413
- if (polish.notes.length > 0) {
414
- yield {
415
- type: "content",
416
- content: `\n**Delivery polish:**\n${polish.notes.map((n) => `- ${n}`).join("\n")}\n`,
417
- } as StreamChunk;
418
- }
419
- } catch (err) {
420
- const msg = err instanceof Error ? err.message : String(err);
421
- yield { type: "content", content: `\n_Delivery polish skipped: ${msg}_\n` } as StreamChunk;
422
- }
423
- }
424
-
425
- // P1.3: extract run artifacts to EE for cross-run memory.
426
- if (opts.cwd) {
427
- const eeResult = await extractRunToEE(flowDir, runId, opts.cwd);
428
- try {
429
- logInteraction(opts.sessionId ?? runId, "ee_injection", {
430
- eventSubtype: "extract",
431
- durationMs: Math.round(eeResult.durationMs),
432
- data: {
433
- ok: eeResult.ok,
434
- mistakes: eeResult.mistakes ?? null,
435
- stored: eeResult.stored ?? null,
436
- },
437
- });
438
- } catch {
439
- // DB errors must not break /ideal
440
- }
441
- }
442
-
443
- return { runId, stage: "approved", success: true, reason: "shipped", sprintsRun: 1, shipped: true };
444
- }
445
-
446
- /**
447
- * Heuristic kind detection from the user's idea text. Avoids hardcoding "bug"
448
- * for everything — keyword-anchored, falls back to "feature" because most
449
- * "/ideal foo" prompts are additive, not bug fixes.
450
- */
451
- export function detectMaintenanceKind(idea: string): "bug" | "feature" | "refactor" | "chore" | "docs" {
452
- const lower = idea.toLowerCase();
453
- if (/\b(fix|bug|broken|crash|error|fail|regression|hotfix|patch)\b/.test(lower)) return "bug";
454
- if (/\b(refactor|cleanup|reorganize|rename|split|extract|consolidat)/.test(lower)) return "refactor";
455
- if (/\b(docs?|documentation|readme|comment|jsdoc|tsdoc)\b/.test(lower)) return "docs";
456
- if (/\b(chore|cleanup|upgrade|bump|deps?|dependency|dependencies|lint|format)\b/.test(lower)) return "chore";
457
- return "feature";
458
- }
459
-
460
- /**
461
- * Build default acceptance criteria for Mode C tasks. Lifts heuristics from the
462
- * idea so the judge has something to evaluate against beyond "verify passes".
463
- */
464
- export function buildDefaultAcceptanceCriteria(idea: string): string[] {
465
- const criteria: string[] = ["Existing verify recipe passes after edits"];
466
- const lower = idea.toLowerCase();
467
- if (/\b(test|spec|coverage)\b/.test(lower)) {
468
- criteria.push("New behavior is covered by at least one test");
469
- }
470
- if (/\b(no regression|don'?t break|without break|breaking|preserve|backward)/.test(lower)) {
471
- criteria.push("No regression in existing test suite");
472
- }
473
- if (/\b(error|exception|null|undefined|crash)\b/.test(lower)) {
474
- criteria.push("Error path is handled explicitly (no silent swallowing)");
475
- }
476
- return criteria;
477
- }
478
-
479
- /**
480
- * Mode C — single-task maintenance flow.
481
- *
482
- * Skeleton wiring per .planning/MAINTAIN-MODE.md. Builds a basic
483
- * MaintenanceTask from the user's idea (no clarify questions yet — P17
484
- * follow-up), gathers codebase intel, runs the 5-stage task cycle,
485
- * builds a PR, optionally invokes `gh pr create`.
486
- */
487
- async function* runMaintain(opts: ProductLoopOptions): AsyncGenerator<StreamChunk, ProductLoopResult, unknown> {
488
- const { idea, flowDir, llm, flags, cwd, processMessageFn, detectVerifyRecipe, respondToPreflight, sessionModelId } =
489
- opts;
490
- if (!idea?.trim()) {
491
- yield { type: "content", content: "error: /ideal maintain requires a task description" } as StreamChunk;
492
- return { runId: "", stage: "error", success: false, reason: "missing_idea" };
493
- }
494
- if (!cwd || !processMessageFn || !detectVerifyRecipe) {
495
- yield {
496
- type: "content",
497
- content: "error: Mode C requires cwd, processMessageFn, and detectVerifyRecipe bridges",
498
- } as StreamChunk;
499
- return { runId: "", stage: "error", success: false, reason: "missing_bridges" };
500
- }
501
-
502
- const { gatherCodebaseIntel, runMaintenanceTask, buildPr, ghCreatePr } = await import("../maintain/index.js");
503
- const { randomUUID } = await import("node:crypto");
504
- const { promises: fsp } = await import("node:fs");
505
- const pathMod = await import("node:path");
506
-
507
- const runState = await createRun(flowDir);
508
- const runId = runState.id;
509
-
510
- await writeManifest(flowDir, runId, {
511
- idea,
512
- capUsd: flags.maxCost,
513
- maxSprints: 1,
514
- doneThreshold: flags.doneThreshold,
515
- stack: flags.stack,
516
- createdAt: new Date(),
517
- });
518
-
519
- yield { type: "content", content: "\n> Mode C: single-task maintenance flow\n" } as StreamChunk;
520
-
521
- try {
522
- const _ar = (globalThis as Record<string, unknown>).__muonroiAgentRuntime as
523
- | { emitEvent: (e: unknown) => void }
524
- | undefined;
525
- _ar?.emitEvent({
526
- t: "event",
527
- kind: "route-decision",
528
- path: "maintain",
529
- complexity: opts.complexity ?? "unknown",
530
- forceCouncil: false,
531
- runId,
532
- });
533
- } catch {
534
- /* best-effort */
535
- }
536
- try {
537
- logInteraction(opts.sessionId ?? runId, "routing", {
538
- eventSubtype: "ideal_maintain",
539
- data: { mode: "maintain", explicit: opts.mode === "maintain" },
540
- });
541
- } catch {
542
- /* DB errors must not break /ideal */
543
- }
544
- logUIInteraction(opts.sessionId, {
545
- subtype: "route_decision",
546
- data: { path: "maintain", complexity: opts.complexity ?? "unknown", forceCouncil: false, runId },
547
- });
548
-
549
- const taskId = randomUUID();
550
- const nowIso = new Date().toISOString();
551
- const task = {
552
- id: taskId,
553
- kind: detectMaintenanceKind(idea),
554
- title: idea.split("\n")[0]!.slice(0, 120),
555
- description: idea,
556
- acceptance_criteria: buildDefaultAcceptanceCriteria(idea),
557
- candidateFiles: [] as string[],
558
- impactRadius: [] as string[],
559
- regressionTestFiles: [] as string[],
560
- status: "queued" as const,
561
- createdAtUtc: nowIso,
562
- updatedAtUtc: nowIso,
563
- };
564
-
565
- yield { type: "content", content: "\n> Gathering codebase intel...\n" } as StreamChunk;
566
- const intel = await gatherCodebaseIntel({ cwd, task });
567
-
568
- // Populate task with intel-derived fields so the runner + PR body have them.
569
- task.candidateFiles = intel.candidateFiles.map((c) => c.path);
570
- task.impactRadius = intel.impactRadius;
571
- task.regressionTestFiles = intel.regressionTests;
572
-
573
- const ctx = {
574
- runId,
575
- sessionId: opts.sessionId,
576
- cwd,
577
- llm: {
578
- generate: (modelId: string, system: string, prompt: string, maxTokens?: number) =>
579
- llm.generate(modelId, system, prompt, maxTokens),
580
- },
581
- processMessageFn,
582
- detectVerifyRecipe,
583
- respondToPreflight,
584
- };
585
-
586
- const taskResult = yield* runMaintenanceTask({
587
- task,
588
- codebaseIntel: intel,
589
- ctx,
590
- leaderModelId: sessionModelId,
591
- costAware: true,
592
- });
593
-
594
- if (taskResult.status !== "done") {
595
- yield {
596
- type: "content",
597
- content: `\n> Mode C halted at status=${taskResult.status}: ${taskResult.failureReason ?? "unknown"}\n`,
598
- } as StreamChunk;
599
- return { runId, stage: "halted", success: false, reason: taskResult.failureReason ?? taskResult.status };
600
- }
601
-
602
- yield { type: "content", content: "\n> Building PR artifact...\n" } as StreamChunk;
603
- let pr: Awaited<ReturnType<typeof buildPr>>;
604
- try {
605
- pr = await buildPr({
606
- task,
607
- codebaseIntel: intel,
608
- result: taskResult,
609
- cwd,
610
- leaderModelId: sessionModelId,
611
- costAware: true,
612
- llm: { generate: ctx.llm.generate },
613
- });
614
- } catch (err) {
615
- const msg = err instanceof Error ? err.message : String(err);
616
- yield { type: "content", content: `\n> PR build failed: ${msg}\n` } as StreamChunk;
617
- return { runId, stage: "halted", success: false, reason: `pr_build_failed: ${msg}` };
618
- }
619
-
620
- // Always persist PR artifact for the user to review.
621
- const prMdPath = pathMod.join(flowDir, "runs", runId, "pr.md");
622
- try {
623
- await fsp.mkdir(pathMod.dirname(prMdPath), { recursive: true });
624
- const persistBody = `# ${pr.title}\n\nBranch: \`${pr.branch}\`\n\n${pr.body}\n\n---\n\n\`\`\`diff\n${pr.diff}\n\`\`\`\n`;
625
- await fsp.writeFile(prMdPath, persistBody, "utf8");
626
- } catch {
627
- /* non-fatal */
628
- }
629
-
630
- yield {
631
- type: "content",
632
- content: `\n## PR ready: ${pr.title}\nBranch: \`${pr.branch}\`\nFiles changed: ${pr.changedFiles.length}${
633
- pr.filesOutsideRadius.length > 0 ? ` (${pr.filesOutsideRadius.length} outside declared radius)` : ""
634
- }\nArtifact: \`${prMdPath}\`\n\n${pr.body}\n`,
635
- } as StreamChunk;
636
-
637
- if (opts.ghPr) {
638
- yield { type: "content", content: "\n> Creating PR via gh CLI...\n" } as StreamChunk;
639
- const ghResult = await ghCreatePr({ branch: pr.branch, title: pr.title, body: pr.body, cwd });
640
- if (ghResult.ok && ghResult.url) {
641
- yield { type: "content", content: `\n> PR created: ${ghResult.url}\n` } as StreamChunk;
642
- } else {
643
- yield {
644
- type: "content",
645
- content: `\n> gh pr create skipped/failed: ${ghResult.reason ?? "unknown"}\n`,
646
- } as StreamChunk;
647
- }
648
- }
649
-
650
- return { runId, stage: "approved", success: true, reason: "pr_ready", sprintsRun: 1, shipped: true };
651
- }
652
-
653
- /** start: createRun → loop-driver (gather/research/scoping) → sprint loop → done|halted. */
654
- async function* runStart(opts: ProductLoopOptions): AsyncGenerator<StreamChunk, ProductLoopResult, unknown> {
655
- const { idea, flowDir, llm, flags, respondToQuestion, respondToPreflight } = opts;
656
- if (!idea?.trim()) {
657
- yield { type: "content", content: "error: /ideal start requires an idea" } as StreamChunk;
658
- return { runId: "", stage: "error", success: false, reason: "missing_idea" };
659
- }
660
-
661
- const runState = await createRun(flowDir);
662
- const runId = runState.id;
663
-
664
- await writeManifest(flowDir, runId, {
665
- idea,
666
- capUsd: flags.maxCost,
667
- maxSprints: flags.maxSprints,
668
- doneThreshold: flags.doneThreshold,
669
- stack: flags.stack,
670
- createdAt: new Date(),
671
- });
672
-
673
- // Surface a cost-vs-cap preview before the loop kicks off so $50 isn't
674
- // an arbitrary number — show predicted spend per sprint × max-sprints
675
- // against the configured cap, with a recommended max-sprints if it
676
- // would exceed. Falls back gracefully for unknown-pricing models.
677
- const preview = previewRunCost({
678
- sessionModelId: opts.sessionModelId,
679
- maxSprints: flags.maxSprints,
680
- capUsd: flags.maxCost,
681
- });
682
- yield { type: "content", content: `\n${formatCostPreview(preview)}\n` } as StreamChunk;
683
-
684
- // Emit route-decision harness event (agent-mode only; no-op otherwise).
685
- try {
686
- const _ar = (globalThis as Record<string, unknown>).__muonroiAgentRuntime as
687
- | { emitEvent: (e: unknown) => void }
688
- | undefined;
689
- _ar?.emitEvent({
690
- t: "event",
691
- kind: "route-decision",
692
- path: "council",
693
- complexity: opts.complexity ?? "unknown",
694
- forceCouncil: !!opts.flags.forceCouncil,
695
- sufficiencyMissing: opts.sufficiencyMissing ?? [],
696
- runId,
697
- });
698
- } catch {
699
- /* best-effort */
700
- }
701
- logUIInteraction(opts.sessionId, {
702
- subtype: "route_decision",
703
- data: {
704
- path: "council",
705
- complexity: opts.complexity ?? "unknown",
706
- forceCouncil: !!opts.flags.forceCouncil,
707
- sufficiencyMissing: opts.sufficiencyMissing ?? [],
708
- runId,
709
- },
710
- });
711
-
712
- const ctx: DriverContext = {
713
- runId,
714
- flowDir,
715
- idea,
716
- sessionModelId: opts.sessionModelId,
717
- llm,
718
- flags,
719
- respondToQuestion,
720
- respondToPreflight,
721
- cwd: opts.cwd,
722
- sessionId: opts.sessionId,
723
- processMessageFn: opts.processMessageFn,
724
- detectVerifyRecipe: opts.detectVerifyRecipe,
725
- skipPriorContext: opts.skipPriorContext,
726
- sufficiencyMissing: opts.sufficiencyMissing,
727
- };
728
-
729
- // Phase 1: outer FSM (gather → research → scoping → approved | halted).
730
- const driverGen = runLoopDriver(ctx);
731
- let driverResult: DriverResult | undefined;
732
- try {
733
- while (true) {
734
- const { value, done } = await driverGen.next();
735
- if (done) {
736
- driverResult = value as DriverResult;
737
- break;
738
- }
739
- yield value as StreamChunk;
740
- }
741
- } catch (err) {
742
- const msg = err instanceof Error ? err.message : String(err);
743
- // Persist the halt/crash so forensics can surface it via `usage forensics`.
744
- // Circuit-breaker rejections (CB-1 cost-projection in sprint-runner) are
745
- // the common case — they previously vanished into the TUI scrollback only.
746
- try {
747
- const sid = opts.sessionId ?? runId;
748
- const isCB = msg.startsWith("Halted by circuit breaker");
749
- logInteraction(sid, "council", {
750
- eventSubtype: isCB ? "sprint_halt" : "loop_error",
751
- data: {
752
- runId,
753
- stage: "driver",
754
- reason: msg.slice(0, 2000),
755
- isCircuitBreaker: isCB,
756
- },
757
- });
758
- } catch {
759
- /* best-effort */
760
- }
761
- yield { type: "error", error: true, content: msg } as any;
762
- return { runId, stage: "error", success: false, reason: msg };
763
- }
764
-
765
- if (!driverResult?.success || driverResult.stage !== "approved") {
766
- return { ...driverResult!, runId };
767
- }
768
-
769
- // Phase 2: sprint loop until done or halted.
770
- const productSpec = await loadProductSpec(flowDir, runId, idea, opts.flags.stack);
771
- const roleAssignments = opts.roleAssignments ?? (await resolveRoleAssignments(opts.sessionModelId));
772
-
773
- // A2: Build Backlog + Sprint Plan before entering the sprint loop.
774
- // Idempotent — skips if backlog.json / sprint-plan.json already exist (resume safety).
775
- const { sprintCount, sprintIds } = await buildBacklogAndSprintPlan({
776
- flowDir,
777
- runId,
778
- productSpec,
779
- ctx,
780
- sessionModelId: opts.sessionModelId,
781
- maxSprints: flags.maxSprints,
782
- onChunk: (chunk) => void chunk, // chunks yielded below via the emit event
783
- });
784
-
785
- // Yield a brief confirmation chunk so the user sees the committed plan.
786
- yield {
787
- type: "content",
788
- content: `\n> Committed: ${sprintCount} sprint${sprintCount === 1 ? "" : "s"} planned. Sprint 1 active.\n`,
789
- } as StreamChunk;
790
-
791
- try {
792
- const _ar = (globalThis as Record<string, unknown>).__muonroiAgentRuntime as
793
- | { emitEvent: (e: unknown) => void }
794
- | undefined;
795
- _ar?.emitEvent({
796
- t: "event",
797
- kind: "sprint-plan-committed",
798
- runId,
799
- projectDir: opts.cwd ?? null,
800
- sprintCount,
801
- sprintIds,
802
- source: "council",
803
- ts: Date.now(),
804
- });
805
- } catch {
806
- /* best-effort */
807
- }
808
-
809
- // B1: update active-run store so StatusBar shows sprint progress.
810
- // B2: auto-fire "run started" to Discord when configured.
811
- try {
812
- const { productSlug: deriveSlug } = await import("./product-identity.js");
813
- const slug = deriveSlug(idea);
814
- activeRunStore.setActiveRun(runId, flowDir, slug);
815
- fireAutoReport("sprint-plan-committed", { runId, flowDir, productSlug: slug, sprintCount });
816
- } catch {
817
- /* best-effort — never break /ideal over status bar or reporter */
818
- }
819
-
820
- // Subsystem E: phase-orchestrated path (default ON; set MUONROI_PHASE_MODE=0 for legacy).
821
- if (process.env.MUONROI_PHASE_MODE !== "0") {
822
- const phaseResult = yield* runPhasesPath({ ctx, productSpec, roleAssignments });
823
- if (phaseResult !== null) return phaseResult;
824
- // phaseResult === null means runPhases prerequisites were unavailable; fall through to legacy.
825
- }
826
-
827
- return yield* drainSprints({
828
- ctx,
829
- productSpec,
830
- roleAssignments,
831
- history: [],
832
- flags,
833
- });
834
- }
835
-
836
- /**
837
- * A2 — Build Backlog + Sprint Plan after the council debate has produced a ProductSpec.
838
- *
839
- * Idempotent: skips if backlog.json / sprint-plan.json already exist on disk
840
- * (safe for resume flows that re-enter runStart after a crash).
841
- *
842
- * Returns the sprintCount + sprintIds that were committed (new or pre-existing),
843
- * for use in the sprint-plan-committed harness event.
844
- *
845
- * Model selection: delegates to backlog-builder.ts + sprint-planner.ts which both
846
- * use pickCouncilTaskModel — NO hardcoded model ids here.
847
- */
848
- async function buildBacklogAndSprintPlan(args: {
849
- flowDir: string;
850
- runId: string;
851
- productSpec: ProductSpec;
852
- ctx: DriverContext;
853
- sessionModelId: string;
854
- maxSprints: number;
855
- onChunk: (chunk: StreamChunk) => void;
856
- }): Promise<{ sprintCount: number; sprintIds: string[] }> {
857
- const { flowDir, runId, productSpec, ctx, sessionModelId, maxSprints } = args;
858
-
859
- // ── Check idempotency ──────────────────────────────────────────────────────
860
- const existingBacklog = await readBacklog(flowDir, runId).catch(() => null);
861
- const existingPlan = await readSprintPlan(flowDir, runId).catch(() => null);
862
-
863
- if (existingBacklog && existingPlan) {
864
- // Already built — return existing sprint ids for the harness event.
865
- const ids = existingPlan.sprints.map((s) => s.id);
866
- return { sprintCount: ids.length, sprintIds: ids };
867
- }
868
-
869
- // ── Derive ImplementationPlanArtifact from ProductSpec ────────────────────
870
- // ProductSpec.mvp is a string[] of feature titles. Map each to a mvp_definition
871
- // entry. This avoids an extra LLM call — the council debate has already produced
872
- // the plan text; we just need to structure it for the backlog builder.
873
- const implementationPlan: ImplementationPlanArtifact = {
874
- mvp_definition: productSpec.mvp.map((feature) => ({
875
- feature,
876
- included_in_v1: "yes" as const,
877
- })),
878
- acceptance_criteria: [], // council debate artifacts are in delegations.md; keep empty here
879
- entities: [],
880
- endpoints: [],
881
- };
882
-
883
- const leaderModelId = resolveLeaderModel(sessionModelId);
884
-
885
- // ── Build Backlog ──────────────────────────────────────────────────────────
886
- let backlog = existingBacklog;
887
- if (!backlog) {
888
- try {
889
- // Build ClarifiedSpec from persisted project context (written by loop-driver).
890
- const { readProjectContext } = await import("./discovery-persistence.js");
891
- const { clarifiedSpecFromContext } = await import("./gather.js");
892
- const projectContext = await readProjectContext(flowDir, runId);
893
- const clarifiedSpec = projectContext
894
- ? clarifiedSpecFromContext(projectContext)
895
- : {
896
- problemStatement: productSpec.idea,
897
- constraints: [],
898
- successCriteria: productSpec.mvp,
899
- scope: productSpec.idea,
900
- rawQA: [],
901
- resolved: {} as Record<string, "answered" | "unspecified" | "skipped">,
902
- };
903
-
904
- backlog = await buildBacklog({
905
- runId,
906
- productSlug: productSpec.idea.slice(0, 40).replace(/\s+/g, "-").toLowerCase(),
907
- spec: clarifiedSpec,
908
- implementationPlan,
909
- llm: ctx.llm,
910
- leaderModelId,
911
- costAware: true,
912
- });
913
- await writeBacklog(flowDir, runId, backlog);
914
- } catch (err) {
915
- // Non-fatal: sprint-runner has a backlog fallback (backlogAnchor="" when null).
916
- const msg = err instanceof Error ? err.message : String(err);
917
- args.onChunk({ type: "content", content: `\n> [backlog] Build skipped: ${msg}\n` } as StreamChunk);
918
- // Return a synthetic single-sprint plan so the harness event fires correctly.
919
- const sprintIds = Array.from({ length: maxSprints }, (_, i) => `sprint-${i + 1}`);
920
- return { sprintCount: maxSprints, sprintIds };
921
- }
922
- }
923
-
924
- // ── Plan Sprints ───────────────────────────────────────────────────────────
925
- let plan = existingPlan;
926
- if (!plan) {
927
- try {
928
- plan = await planSprints({
929
- runId,
930
- backlog,
931
- llm: ctx.llm,
932
- leaderModelId,
933
- costAware: true,
934
- targetEffortPerSprint: 8,
935
- });
936
- await writeSprintPlan(flowDir, runId, plan);
937
- // Update each BacklogItem with status="in_sprint" + assigned_sprint.
938
- await applySprintAssignments(flowDir, runId, plan);
939
- } catch (err) {
940
- // Non-fatal: build a synthetic plan from maxSprints.
941
- const msg = err instanceof Error ? err.message : String(err);
942
- args.onChunk({ type: "content", content: `\n> [sprint-plan] Build skipped: ${msg}\n` } as StreamChunk);
943
- const sprintIds = Array.from({ length: maxSprints }, (_, i) => `sprint-${i + 1}`);
944
- return { sprintCount: maxSprints, sprintIds };
945
- }
946
- }
947
-
948
- // ── Set Sprint 1 Active ────────────────────────────────────────────────────
949
- if (plan.sprints.length > 0 && !plan.activeSprintId) {
950
- try {
951
- const firstSprintId = plan.sprints[0]!.id;
952
- await setActiveSprint(flowDir, runId, firstSprintId);
953
- } catch {
954
- /* non-fatal */
955
- }
956
- }
957
-
958
- const ids = plan.sprints.map((s) => s.id);
959
- return {
960
- sprintCount: ids.length || maxSprints,
961
- sprintIds: ids.length > 0 ? ids : Array.from({ length: maxSprints }, (_, i) => `sprint-${i + 1}`),
962
- };
963
- }
964
-
965
- /** Drive sprint-runner repeatedly, honoring max-sprints and continue-feedback routing. */
966
- async function* drainSprints(args: {
967
- ctx: DriverContext;
968
- productSpec: ProductSpec;
969
- roleAssignments: Map<RoleSlot, { modelId: string; provider: string; tier?: string }>;
970
- history: IterationState[];
971
- flags: ProductLoopFlags;
972
- }): AsyncGenerator<StreamChunk, ProductLoopResult, unknown> {
973
- const { ctx, productSpec, roleAssignments, flags } = args;
974
- const history = args.history.slice();
975
- let carryOver: ContinueFeedback | undefined;
976
- let sprintsRun = 0;
977
-
978
- for (let sprintN = history.length + 1; sprintN <= flags.maxSprints; sprintN++) {
979
- let iter: IterationState;
980
- // Check token budget
981
- if (flags.budgetTokens) {
982
- const { getProductTotalTokens } = await import("../usage/product-ledger.js");
983
- const totalTokens = await getProductTotalTokens(ctx.runId);
984
- if (totalTokens > flags.budgetTokens) {
985
- yield {
986
- type: "halt",
987
- haltChunk: {
988
- type: "halt",
989
- reason: "budget_exhausted",
990
- detail: `Token budget exceeded: used ${totalTokens} > limit ${flags.budgetTokens}`,
991
- recovery_options: [],
992
- },
993
- } as StreamChunk;
994
- return { runId: ctx.runId, stage: "halted", success: false, reason: "budget exhausted" };
995
- }
996
- }
997
- try {
998
- const sprintGen = runSprint({
999
- sprintN,
1000
- ctx,
1001
- productSpec,
1002
- roleAssignments,
1003
- history,
1004
- carryOver,
1005
- });
1006
- let result: IterationState | undefined;
1007
- while (true) {
1008
- const step = await sprintGen.next();
1009
- if (step.done) {
1010
- result = step.value as IterationState;
1011
- break;
1012
- }
1013
- // Site 2 — forward halt chunk to UI, mark stage halted, stop iteration.
1014
- if (step.value && (step.value as StreamChunk).type === "halt") {
1015
- yield step.value as StreamChunk;
1016
- const haltReason = (step.value as StreamChunk).haltChunk?.reason ?? "no_recipe";
1017
- const manifest = await readManifest(ctx.flowDir, ctx.runId);
1018
- if (manifest) {
1019
- await writeManifest(ctx.flowDir, ctx.runId, {
1020
- ...manifest,
1021
- verdict: { pass: false, score: 0, reason: haltReason, failedCondition: undefined as any },
1022
- });
1023
- }
1024
- // B2: auto-fire halt notification; B1: clear active-run.
1025
- try {
1026
- const { productSlug: deriveSlug } = await import("./product-identity.js");
1027
- const slug = deriveSlug(productSpec.idea);
1028
- fireAutoReport("sprint-halt", { runId: ctx.runId, flowDir: ctx.flowDir, productSlug: slug, haltReason });
1029
- activeRunStore.clearActiveRun();
1030
- } catch {
1031
- /* best-effort */
1032
- }
1033
- return {
1034
- runId: ctx.runId,
1035
- stage: "halted",
1036
- success: false,
1037
- reason: haltReason,
1038
- sprintsRun,
1039
- };
1040
- }
1041
- yield step.value as StreamChunk;
1042
- }
1043
- iter = result!;
1044
- } catch (err) {
1045
- const msg = err instanceof Error ? err.message : String(err);
1046
- yield { type: "content", content: `\n> Sprint ${sprintN} halted: ${msg}\n` } as StreamChunk;
1047
- // Persist the sprint halt so forensics replay surfaces it. CB-1 cost
1048
- // projection breaches (`Halted by circuit breaker: …`) are by far the
1049
- // common case and they previously vanished into TUI scrollback only.
1050
- try {
1051
- const sid = ctx.sessionId ?? ctx.runId;
1052
- const isCB = msg.startsWith("Halted by circuit breaker");
1053
- logInteraction(sid, "council", {
1054
- eventSubtype: "sprint_halt",
1055
- data: {
1056
- runId: ctx.runId,
1057
- sprintN,
1058
- stage: "sprint",
1059
- reason: msg.slice(0, 2000),
1060
- isCircuitBreaker: isCB,
1061
- sprintsRun,
1062
- },
1063
- });
1064
- } catch {
1065
- /* best-effort */
1066
- }
1067
- // Mark manifest as halted (not aborted) so resume can pick up.
1068
- const manifest = await readManifest(ctx.flowDir, ctx.runId);
1069
- if (manifest) {
1070
- await writeManifest(ctx.flowDir, ctx.runId, {
1071
- ...manifest,
1072
- verdict: { pass: false, score: 0, reason: msg, failedCondition: undefined as any },
1073
- });
1074
- }
1075
- // B2: auto-fire halt notification; B1: clear active-run.
1076
- try {
1077
- const { productSlug: deriveSlug } = await import("./product-identity.js");
1078
- const slug = deriveSlug(productSpec.idea);
1079
- fireAutoReport("sprint-halt", { runId: ctx.runId, flowDir: ctx.flowDir, productSlug: slug, haltReason: msg });
1080
- activeRunStore.clearActiveRun();
1081
- } catch {
1082
- /* best-effort */
1083
- }
1084
- return {
1085
- runId: ctx.runId,
1086
- stage: "halted",
1087
- success: false,
1088
- reason: msg,
1089
- sprintsRun,
1090
- };
1091
- }
1092
-
1093
- history.push(iter);
1094
- sprintsRun++;
1095
-
1096
- // B2: auto-fire sprint-done when judgment stage completes.
1097
- // Compute overall pct from current iteration state.
1098
- try {
1099
- const { productSlug: deriveSlug } = await import("./product-identity.js");
1100
- const slug = deriveSlug(productSpec.idea);
1101
- // Compute overall completion pct across all sprints (rough estimate from criteria).
1102
- const totalCriteria = (iter.criteriaMet ?? 0) + (iter.criteriaPartial ?? 0) + (iter.criteriaUnmet ?? 0);
1103
- const overallPct = totalCriteria > 0 ? Math.round(((iter.criteriaMet ?? 0) / totalCriteria) * 1000) / 10 : 0;
1104
- const verdict = iter.lastVerifyResult === "PASS" ? "pass" : "fail";
1105
- fireAutoReport("sprint-done", {
1106
- runId: ctx.runId,
1107
- flowDir: ctx.flowDir,
1108
- productSlug: slug,
1109
- sprintN,
1110
- pct: overallPct,
1111
- verdict,
1112
- });
1113
- } catch {
1114
- /* best-effort */
1115
- }
1116
-
1117
- if (iter.stage === "shipped") {
1118
- // Final manifest update + EE pass outcome
1119
- const manifest = await readManifest(ctx.flowDir, ctx.runId);
1120
- if (manifest) {
1121
- await writeManifest(ctx.flowDir, ctx.runId, {
1122
- ...manifest,
1123
- doneAt: new Date(),
1124
- verdict: {
1125
- pass: true,
1126
- score: iter.scoreAfter,
1127
- failedCondition: undefined as any,
1128
- reason: "all_conditions_met",
1129
- },
1130
- });
1131
- }
1132
- // Ship-time delivery polish: scaffold README, fill package.json
1133
- // metadata, write delivery-notes. Idempotent + non-destructive.
1134
- if (ctx.cwd) {
1135
- try {
1136
- const polish = await polishDelivery({
1137
- cwd: ctx.cwd,
1138
- runDir: path.join(ctx.flowDir, "runs", ctx.runId),
1139
- productSpec,
1140
- runId: ctx.runId,
1141
- });
1142
- if (polish.notes.length > 0) {
1143
- yield {
1144
- type: "content",
1145
- content: `\n**Delivery polish:**\n${polish.notes.map((n) => `- ${n}`).join("\n")}\n`,
1146
- } as StreamChunk;
1147
- }
1148
- } catch (err) {
1149
- const msg = err instanceof Error ? err.message : String(err);
1150
- yield { type: "content", content: `\n_Delivery polish skipped: ${msg}_\n` } as StreamChunk;
1151
- }
1152
- }
1153
- // P1.3: extract run artifacts to EE for cross-run memory. Non-fatal —
1154
- // EE client absorbs failures into the offline queue.
1155
- // P1.6: log telemetry for the extract outcome.
1156
- if (ctx.cwd) {
1157
- const eeResult = await extractRunToEE(ctx.flowDir, ctx.runId, ctx.cwd);
1158
- try {
1159
- logInteraction(ctx.sessionId ?? ctx.runId, "ee_injection", {
1160
- eventSubtype: "extract",
1161
- durationMs: Math.round(eeResult.durationMs),
1162
- data: {
1163
- ok: eeResult.ok,
1164
- mistakes: eeResult.mistakes ?? null,
1165
- stored: eeResult.stored ?? null,
1166
- },
1167
- });
1168
- } catch {
1169
- // DB errors must not break /ideal
1170
- }
1171
- }
1172
- // B1: clear active-run on successful ship.
1173
- activeRunStore.clearActiveRun();
1174
- return {
1175
- runId: ctx.runId,
1176
- stage: "approved",
1177
- success: true,
1178
- reason: "shipped",
1179
- sprintsRun,
1180
- shipped: true,
1181
- };
1182
- }
1183
-
1184
- // Build continue-feedback for next iteration. The DoneVerdict is not
1185
- // surfaced from sprint-runner directly, but the iteration state encodes
1186
- // enough — derive a synthetic verdict from criteria counts.
1187
- carryOver = {
1188
- focus:
1189
- iter.lastVerifyResult === "PASS"
1190
- ? `improve criteria coverage: met=${iter.criteriaMet}, partial=${iter.criteriaPartial}, unmet=${iter.criteriaUnmet}`
1191
- : `fix verify failures (last result: ${iter.lastVerifyResult})`,
1192
- };
1193
- }
1194
-
1195
- yield {
1196
- type: "content",
1197
- content: `\n> Reached max-sprints (${flags.maxSprints}) without satisfying Definition-of-Done.\n`,
1198
- } as StreamChunk;
1199
- // B1: clear active-run when max-sprints reached.
1200
- activeRunStore.clearActiveRun();
1201
- return {
1202
- runId: ctx.runId,
1203
- stage: "halted",
1204
- success: false,
1205
- reason: "max_sprints_reached",
1206
- sprintsRun,
1207
- };
1208
- }
1209
-
1210
- function chatEnvConfig(): { client: import("../chat/types.js").ChatClient } | null {
1211
- // Lazy load to avoid circular imports
1212
- const { readChatProvider } = require("../chat/factory.js") as typeof import("../chat/factory.js");
1213
- const client = readChatProvider();
1214
- return client ? { client } : null;
1215
- }
1216
-
1217
- /**
1218
- * Best-effort auto-fire helper (B2).
1219
- * Fires-and-forgets a reporter event; never throws.
1220
- * Only does I/O when a Discord client is configured AND reporter.autoFire=true.
1221
- */
1222
- function fireAutoReport(
1223
- kind: import("../reporter/auto-fire.js").AutoFireEvent["kind"],
1224
- opts: {
1225
- runId: string;
1226
- flowDir: string;
1227
- productSlug: string;
1228
- sprintN?: number;
1229
- pct?: number;
1230
- verdict?: "pass" | "fail";
1231
- haltReason?: string;
1232
- sprintCount?: number;
1233
- },
1234
- ): void {
1235
- const chatCfg = chatEnvConfig();
1236
- if (!chatCfg) return;
1237
- void maybeAutoFire(
1238
- {
1239
- kind,
1240
- runId: opts.runId,
1241
- flowDir: opts.flowDir,
1242
- productSlug: opts.productSlug,
1243
- sprintN: opts.sprintN,
1244
- pct: opts.pct,
1245
- verdict: opts.verdict,
1246
- haltReason: opts.haltReason,
1247
- sprintCount: opts.sprintCount,
1248
- },
1249
- {
1250
- chat: chatCfg.client,
1251
- resolveChannelId: defaultResolveChannelId,
1252
- },
1253
- );
1254
- }
1255
-
1256
- /**
1257
- * Phase-orchestrated sprint path (Subsystem E).
1258
- *
1259
- * Returns a ProductLoopResult when it ran to completion (pass or abort),
1260
- * or null when prerequisites were unavailable (no projectContext) so the
1261
- * caller can fall through to the legacy drainSprints path.
1262
- *
1263
- * Gated behind MUONROI_PHASE_MODE !== "0" by both callers (runStart / runResume).
1264
- */
1265
- async function* runPhasesPath(args: {
1266
- ctx: DriverContext;
1267
- productSpec: ProductSpec;
1268
- roleAssignments: Map<RoleSlot, { modelId: string; provider: string; tier?: string }>;
1269
- }): AsyncGenerator<StreamChunk, ProductLoopResult | null, unknown> {
1270
- const { ctx, productSpec, roleAssignments } = args;
1271
-
1272
- // Load prerequisites: projectContext and manifest.
1273
- const { readProjectContext } = await import("./discovery-persistence.js");
1274
- const { getProductSpentUsd } = await import("../usage/product-ledger.js");
1275
- const { runPhases } = await import("./phase-runner.js");
1276
-
1277
- const projectContext = await readProjectContext(ctx.flowDir, ctx.runId);
1278
- const manifest = await readManifest(ctx.flowDir, ctx.runId);
1279
-
1280
- if (!projectContext || !manifest) {
1281
- // Prerequisites unavailable — signal fall-through to legacy path.
1282
- yield {
1283
- type: "content",
1284
- content: "\n> [phase-mode] projectContext or manifest unavailable — falling back to legacy sprint loop.\n",
1285
- } as StreamChunk;
1286
- return null;
1287
- }
1288
-
1289
- // Build a ClarifiedSpec from the stored projectContext.
1290
- const { clarifiedSpecFromContext } = await import("./gather.js");
1291
- const clarifiedSpec = clarifiedSpecFromContext(projectContext);
1292
-
1293
- // Resolve leader model id and build a LeaderLike adapter over ctx.llm.
1294
- const leaderModelId = resolveLeaderModel(ctx.sessionModelId);
1295
- const leader = {
1296
- generate: (leaderArgs: { system: string; prompt: string; maxTokens: number }) =>
1297
- ctx.llm.generate(leaderModelId, leaderArgs.system, leaderArgs.prompt).then((text) => ({
1298
- content: text,
1299
- costUsd: 0,
1300
- })),
1301
- };
1302
-
1303
- // Build the sprintRunner adapter: runPhases passes { sprintN, phaseId, conversationContext, phaseScope }
1304
- // while runSprint expects the full RunSprintArgs shape.
1305
- // History is accumulated per-phase so circuit-breaker CB-2 (oscillation detection)
1306
- // and carry-over between sprints within a phase work correctly.
1307
- let currentPhaseId: string | null = null;
1308
- let sprintHistory: IterationState[] = [];
1309
-
1310
- const sprintRunner = async function* (sprintCtx: unknown) {
1311
- const sc = sprintCtx as {
1312
- sprintN: number;
1313
- phaseId?: string;
1314
- conversationContext?: string;
1315
- phaseScope?: { criteria: string[]; scope: string };
1316
- };
1317
-
1318
- // Reset history when a new phase begins.
1319
- if ((sc.phaseId ?? null) !== currentPhaseId) {
1320
- currentPhaseId = sc.phaseId ?? null;
1321
- sprintHistory = [];
1322
- }
1323
-
1324
- const inner = runSprint({
1325
- sprintN: sc.sprintN,
1326
- ctx,
1327
- productSpec,
1328
- roleAssignments,
1329
- history: [...sprintHistory],
1330
- phaseScope: sc.phaseScope,
1331
- });
1332
-
1333
- let result: IterationState | undefined;
1334
- while (true) {
1335
- const n = await inner.next();
1336
- if (n.done) {
1337
- result = n.value;
1338
- break;
1339
- }
1340
- // Site 3 — no try/catch here; without explicit halt handling the generator
1341
- // returns normally and the phase orchestrator treats it as a completed sprint.
1342
- // Forward the halt chunk upstream so runPhases can surface it to the user.
1343
- if (n.value && (n.value as StreamChunk).type === "halt") {
1344
- yield n.value;
1345
- // Return a sentinel IterationState so the phase runner records a halted stage.
1346
- return {
1347
- sprintN: sc.sprintN,
1348
- stage: "halted",
1349
- scoreBefore: 0,
1350
- scoreAfter: 0,
1351
- criteriaMet: 0,
1352
- criteriaPartial: 0,
1353
- criteriaUnmet: 0,
1354
- costUsd: 0,
1355
- lastVerifyResult: (n.value as any).reason ?? "no_recipe",
1356
- } as IterationState;
1357
- }
1358
- yield n.value;
1359
- }
1360
-
1361
- // Accumulate completed sprint into history for subsequent sprints in this phase.
1362
- if (result && typeof result === "object" && "criteriaMet" in result) {
1363
- sprintHistory.push(result);
1364
- }
1365
- return result!;
1366
- };
1367
-
1368
- // Chat setup (opt-in via env vars; no-op when unset).
1369
- const chatCfg = chatEnvConfig();
1370
- let chatClient: import("../chat/types.js").ChatClient | null = null;
1371
- let slug: string | null = null;
1372
- if (chatCfg) {
1373
- chatClient = chatCfg.client;
1374
- const { productSlug } = await import("./product-identity.js");
1375
- slug = productSlug(manifest.idea);
1376
- }
1377
-
1378
- // Terminal fallback: use respondToQuestion (the existing user-prompt API).
1379
- // QuestionResponder takes a questionId string; the UI layer resolves the prompt text.
1380
- const terminalFallback = async (): Promise<{ verdict: "accept" | "reject" | "abort"; feedback?: string }> => {
1381
- const ans = await ctx.respondToQuestion("customer-review-verdict");
1382
- const lower = (ans ?? "").trim().toLowerCase();
1383
- if (lower.startsWith("x")) return { verdict: "abort" as const };
1384
- if (lower.startsWith("r")) {
1385
- const fb = await ctx.respondToQuestion("customer-review-feedback");
1386
- return { verdict: "reject" as const, feedback: fb ?? "" };
1387
- }
1388
- return { verdict: "accept" as const };
1389
- };
1390
-
1391
- const awaitCustomerVerdict = async (verdictArgs: {
1392
- flowDir: string;
1393
- runId: string;
1394
- phaseId: string;
1395
- sprintN: number;
1396
- reviewSummary: string;
1397
- }): Promise<{ verdict: "accept" | "reject" | "abort"; feedback?: string }> => {
1398
- if (!chatClient || !slug) return terminalFallback();
1399
- const { ensureChannel } = await import("../chat/channel-manager.js");
1400
- const { discordAwaitVerdict } = await import("../chat/verdict-resolver.js");
1401
- const ch = await ensureChannel({
1402
- client: chatClient,
1403
- guildId: process.env.MUONROI_DISCORD_GUILD_ID ?? "unknown",
1404
- slug,
1405
- displayName: manifest.idea,
1406
- });
1407
- if (!ch) return terminalFallback();
1408
- return discordAwaitVerdict({
1409
- flowDir: verdictArgs.flowDir,
1410
- runId: verdictArgs.runId,
1411
- phaseId: verdictArgs.phaseId,
1412
- sprintN: verdictArgs.sprintN,
1413
- productSlug: slug,
1414
- channelId: ch.channelId,
1415
- client: chatClient,
1416
- leader,
1417
- capUsd: manifest.capUsd,
1418
- remainingUsd: async () => {
1419
- const { getProductSpentUsd } = await import("../usage/product-ledger.js");
1420
- const spent = await getProductSpentUsd(verdictArgs.runId);
1421
- return Math.max(0, manifest.capUsd - spent);
1422
- },
1423
- reviewSummary: verdictArgs.reviewSummary,
1424
- fallback: terminalFallback,
1425
- });
1426
- };
1427
-
1428
- const phaseGen = runPhases({
1429
- flowDir: ctx.flowDir,
1430
- runId: ctx.runId,
1431
- manifest,
1432
- clarifiedSpec,
1433
- projectContext,
1434
- leader: leader as any,
1435
- leaderModelId,
1436
- capUsd: manifest.capUsd,
1437
- remainingUsd: async () => Math.max(0, manifest.capUsd - (await getProductSpentUsd(ctx.runId))),
1438
- awaitCustomerVerdict,
1439
- sprintRunner,
1440
- } as any);
1441
-
1442
- let phaseOutcome: { pass: boolean; reason?: string } = { pass: false };
1443
- while (true) {
1444
- const step = await phaseGen.next();
1445
- if (step.done) {
1446
- phaseOutcome = step.value as { pass: boolean; reason?: string };
1447
- break;
1448
- }
1449
- const chunk = step.value as StreamChunk;
1450
- if (chunk.type === "push_notification" && chatClient && slug) {
1451
- try {
1452
- const { ensureChannel } = await import("../chat/channel-manager.js");
1453
- const { publish } = await import("../chat/broadcast-bus.js");
1454
- const ch = await ensureChannel({
1455
- client: chatClient,
1456
- guildId: process.env.MUONROI_DISCORD_GUILD_ID ?? "unknown",
1457
- slug,
1458
- displayName: manifest.idea,
1459
- });
1460
- if (ch) {
1461
- await publish({
1462
- client: chatClient,
1463
- channelId: ch.channelId,
1464
- type: "phase-event",
1465
- content: chunk.content ?? "",
1466
- });
1467
- }
1468
- } catch (e) {
1469
- console.warn("muonroi: chat broadcast failed", e);
1470
- }
1471
- }
1472
- yield chunk;
1473
- }
1474
-
1475
- if (!phaseOutcome.pass) {
1476
- return {
1477
- runId: ctx.runId,
1478
- stage: "halted",
1479
- success: false,
1480
- reason: phaseOutcome.reason ?? "phase-orchestrator-halt",
1481
- };
1482
- }
1483
-
1484
- // All phases done — write final manifest.
1485
- const finalManifest = await readManifest(ctx.flowDir, ctx.runId);
1486
- if (finalManifest) {
1487
- await writeManifest(ctx.flowDir, ctx.runId, {
1488
- ...finalManifest,
1489
- doneAt: new Date(),
1490
- verdict: { pass: true, score: 1, failedCondition: undefined as any, reason: "phases_complete" },
1491
- });
1492
- }
1493
- // P1.3: extract run artifacts to EE for cross-run memory. Non-fatal —
1494
- // EE client absorbs failures into the offline queue.
1495
- // P1.6: log telemetry for the extract outcome.
1496
- if (ctx.cwd) {
1497
- const eeResult = await extractRunToEE(ctx.flowDir, ctx.runId, ctx.cwd);
1498
- try {
1499
- logInteraction(ctx.sessionId ?? ctx.runId, "ee_injection", {
1500
- eventSubtype: "extract",
1501
- durationMs: Math.round(eeResult.durationMs),
1502
- data: {
1503
- ok: eeResult.ok,
1504
- mistakes: eeResult.mistakes ?? null,
1505
- stored: eeResult.stored ?? null,
1506
- },
1507
- });
1508
- } catch {
1509
- // DB errors must not break /ideal
1510
- }
1511
- }
1512
- return {
1513
- runId: ctx.runId,
1514
- stage: "approved",
1515
- success: true,
1516
- reason: "phases_complete",
1517
- shipped: true,
1518
- };
1519
- }
1520
-
1521
- async function loadProductSpec(flowDir: string, runId: string, idea: string, stack?: string): Promise<ProductSpec> {
1522
- const runDir = path.join(flowDir, "runs", runId);
1523
- const roadmap = await readArtifact(runDir, "roadmap.md");
1524
- const raw = roadmap?.sections.get("Product Specification") ?? "";
1525
- const match = raw.match(/\{[\s\S]*\}/);
1526
- if (match) {
1527
- try {
1528
- const parsed = JSON.parse(match[0]) as Partial<ProductSpec>;
1529
- return {
1530
- idea: parsed.idea ?? idea,
1531
- persona: parsed.persona ?? "users",
1532
- mvp: parsed.mvp ?? [],
1533
- phase2: parsed.phase2 ?? [],
1534
- architecture: parsed.architecture ?? "",
1535
- ioContract: parsed.ioContract ?? "",
1536
- folderStructure: parsed.folderStructure ?? "",
1537
- sprintEstimate: parsed.sprintEstimate ?? 1,
1538
- costEstimate: parsed.costEstimate ?? 1,
1539
- stack: parsed.stack ?? stack,
1540
- createdAt: parsed.createdAt ? new Date(parsed.createdAt) : new Date(),
1541
- };
1542
- } catch {
1543
- /* fall through */
1544
- }
1545
- }
1546
- return {
1547
- idea,
1548
- persona: "users",
1549
- mvp: [],
1550
- phase2: [],
1551
- architecture: "",
1552
- ioContract: "",
1553
- folderStructure: "",
1554
- sprintEstimate: 1,
1555
- costEstimate: 1,
1556
- stack,
1557
- createdAt: new Date(),
1558
- };
1559
- }
1560
-
1561
- // ── Subcommands: status / resume / abort / ship ─────────────────────────────
1562
-
1563
- async function* runStatus(opts: ProductLoopOptions): AsyncGenerator<StreamChunk, ProductLoopResult, unknown> {
1564
- const runsRoot = path.join(opts.flowDir, "runs");
1565
- let entries: string[] = [];
1566
- try {
1567
- entries = await fs.readdir(runsRoot);
1568
- } catch {
1569
- yield { type: "content", content: "No runs found.\n" } as StreamChunk;
1570
- return { runId: "", stage: "approved", success: true };
1571
- }
1572
-
1573
- if (opts.runId) {
1574
- const m = await readManifest(opts.flowDir, opts.runId);
1575
- if (!m) {
1576
- yield { type: "content", content: `Run not found: ${opts.runId}\n` } as StreamChunk;
1577
- return { runId: opts.runId, stage: "error", success: false, reason: "not_found" };
1578
- }
1579
- const iters = await readIterations(opts.flowDir, opts.runId);
1580
- yield {
1581
- type: "content",
1582
- content:
1583
- `Run ${opts.runId}: ${m.idea}\n` +
1584
- `Cap: $${m.capUsd} MaxSprints: ${m.maxSprints} DoneThreshold: ${m.doneThreshold}\n` +
1585
- `Iterations: ${iters.length} Aborted: ${m.aborted ?? false} DoneAt: ${m.doneAt?.toISOString() ?? "—"}\n`,
1586
- } as StreamChunk;
1587
- return { runId: opts.runId, stage: "approved", success: true };
1588
- }
1589
-
1590
- const lines: string[] = [`Active runs (${entries.length}):`];
1591
- for (const id of entries) {
1592
- const m = await readManifest(opts.flowDir, id).catch(() => null);
1593
- const iters = await readIterations(opts.flowDir, id).catch(() => []);
1594
- if (!m) continue;
1595
- lines.push(` ${id} ${m.idea.slice(0, 60)} sprints=${iters.length} aborted=${m.aborted ?? false}`);
1596
- }
1597
- yield { type: "content", content: `${lines.join("\n")}\n` } as StreamChunk;
1598
- return { runId: "", stage: "approved", success: true };
1599
- }
1600
-
1601
- async function* runAbort(opts: ProductLoopOptions): AsyncGenerator<StreamChunk, ProductLoopResult, unknown> {
1602
- if (!opts.runId) {
1603
- yield { type: "content", content: "error: abort requires a runId\n" } as StreamChunk;
1604
- return { runId: "", stage: "error", success: false, reason: "missing_runId" };
1605
- }
1606
- const m = await readManifest(opts.flowDir, opts.runId);
1607
- if (!m) {
1608
- yield { type: "content", content: `Run not found: ${opts.runId}\n` } as StreamChunk;
1609
- return { runId: opts.runId, stage: "error", success: false, reason: "not_found" };
1610
- }
1611
- await writeManifest(opts.flowDir, opts.runId, { ...m, aborted: true, doneAt: new Date() });
1612
- // Fire-and-forget EE phase-outcome=aborted (extension landed in 13-05).
1613
- try {
1614
- fireAndForgetPhaseOutcome({
1615
- sessionId: opts.runId,
1616
- phaseName: "product-loop",
1617
- outcome: "aborted" as any,
1618
- });
1619
- } catch {
1620
- /* non-fatal */
1621
- }
1622
- // P1.3: extract run artifacts to EE even on abort — we still want to learn
1623
- // from partial runs. runAbort does not have a full DriverContext so cwd is
1624
- // not available here; fall back to process.cwd() as the project path.
1625
- // EE client is non-fatal (offline queue absorbs transport failures).
1626
- // P1.6: log telemetry for the extract outcome.
1627
- {
1628
- const eeResult = await extractRunToEE(opts.flowDir, opts.runId, opts.cwd ?? process.cwd());
1629
- try {
1630
- logInteraction(opts.sessionId ?? opts.runId ?? "abort", "ee_injection", {
1631
- eventSubtype: "extract",
1632
- durationMs: Math.round(eeResult.durationMs),
1633
- data: {
1634
- ok: eeResult.ok,
1635
- mistakes: eeResult.mistakes ?? null,
1636
- stored: eeResult.stored ?? null,
1637
- },
1638
- });
1639
- } catch {
1640
- // DB errors must not break /ideal
1641
- }
1642
- }
1643
- yield { type: "content", content: `Aborted run ${opts.runId}.\n` } as StreamChunk;
1644
- return { runId: opts.runId, stage: "halted", success: false, reason: "aborted" };
1645
- }
1646
-
1647
- async function* runResume(opts: ProductLoopOptions): AsyncGenerator<StreamChunk, ProductLoopResult, unknown> {
1648
- if (!opts.runId) {
1649
- yield { type: "content", content: "error: resume requires a runId\n" } as StreamChunk;
1650
- return { runId: "", stage: "error", success: false, reason: "missing_runId" };
1651
- }
1652
- const run = await loadRun(opts.flowDir, opts.runId);
1653
- if (!run) {
1654
- yield { type: "content", content: `Run not found: ${opts.runId}\n` } as StreamChunk;
1655
- return { runId: opts.runId, stage: "error", success: false, reason: "not_found" };
1656
- }
1657
- const manifest = await readManifest(opts.flowDir, opts.runId);
1658
- if (!manifest) {
1659
- yield { type: "content", content: `Manifest missing for ${opts.runId}\n` } as StreamChunk;
1660
- return { runId: opts.runId, stage: "error", success: false, reason: "manifest_missing" };
1661
- }
1662
- if (manifest.aborted) {
1663
- yield { type: "content", content: `Run ${opts.runId} was aborted; cannot resume.\n` } as StreamChunk;
1664
- return { runId: opts.runId, stage: "halted", success: false, reason: "aborted" };
1665
- }
1666
-
1667
- // Detect crashed in-flight sprint: an iterations.md entry without a closing
1668
- // Verify line is treated as crashed. Our schema always writes the Verify line
1669
- // before returning, so an iteration is "in-flight" iff the file has a Sprint
1670
- // heading but no matching Verify field. readIterations skips malformed
1671
- // entries — so we mark the highest sprint number as crashed regardless.
1672
- const iters = await readIterations(opts.flowDir, opts.runId);
1673
- let nextSprint = iters.length + 1;
1674
- if (iters.length > 0) {
1675
- const last = iters[iters.length - 1]!;
1676
- if (!last.lastVerifyResult || last.lastVerifyResult === "UNKNOWN") {
1677
- await markIterationCrashed(opts.flowDir, opts.runId, last.sprintN);
1678
- nextSprint = last.sprintN; // retry with retryOf metadata
1679
- yield {
1680
- type: "content",
1681
- content: `Detected crashed sprint ${last.sprintN}; restarting fresh.\n`,
1682
- } as StreamChunk;
1683
- }
1684
- }
1685
-
1686
- // Fire EE phase-outcome=resumed (extension landed in 13-05).
1687
- try {
1688
- fireAndForgetPhaseOutcome({
1689
- sessionId: opts.runId,
1690
- phaseName: `sprint-${Math.max(1, nextSprint - 1)}`,
1691
- outcome: "resumed" as any,
1692
- });
1693
- } catch {
1694
- /* non-fatal */
1695
- }
1696
-
1697
- // Resume into sprint loop with reconstructed history + manifest flags.
1698
- const productSpec = await loadProductSpec(opts.flowDir, opts.runId, manifest.idea, manifest.stack);
1699
- const ctx: DriverContext = {
1700
- runId: opts.runId,
1701
- flowDir: opts.flowDir,
1702
- idea: manifest.idea,
1703
- sessionModelId: opts.sessionModelId,
1704
- llm: opts.llm,
1705
- flags: opts.flags,
1706
- respondToQuestion: opts.respondToQuestion,
1707
- respondToPreflight: opts.respondToPreflight,
1708
- cwd: opts.cwd,
1709
- sessionId: opts.sessionId,
1710
- processMessageFn: opts.processMessageFn,
1711
- detectVerifyRecipe: opts.detectVerifyRecipe,
1712
- };
1713
- const roleAssignments = opts.roleAssignments ?? (await resolveRoleAssignments(opts.sessionModelId));
1714
-
1715
- // Subsystem E: phase-orchestrated path (default ON; set MUONROI_PHASE_MODE=0 for legacy).
1716
- if (process.env.MUONROI_PHASE_MODE !== "0") {
1717
- const phaseResult = yield* runPhasesPath({ ctx, productSpec, roleAssignments });
1718
- if (phaseResult !== null) return phaseResult;
1719
- // phaseResult === null means runPhases prerequisites were unavailable; fall through to legacy.
1720
- }
1721
-
1722
- return yield* drainSprints({
1723
- ctx,
1724
- productSpec,
1725
- roleAssignments,
1726
- history: iters.filter((i) => !i.crashed),
1727
- flags: opts.flags,
1728
- });
1729
- }
1730
-
1731
- /**
1732
- * Build the inventory of models reachable in this session (= every provider
1733
- * that has a key on the keychain) and let role-registry assign one model per
1734
- * RoleSlot. The resulting Map is consumed by sprint-runner → done-gate Cond #4
1735
- * (PO ↔ Customer cross-model debate). Without this, the Map is empty and the
1736
- * gate immediately returns "missing_roles".
1737
- *
1738
- * On refusal (no keys, single-provider with too few models, or PO/Customer
1739
- * collision) we return an empty Map; done-gate's R5 short-circuit (skip Cond
1740
- * #4 when score < 0.85) keeps early sprints unblocked, and the user-approval
1741
- * gate (Cond #5) still runs so the loop can ship via /ship.
1742
- */
1743
- async function resolveRoleAssignments(
1744
- sessionModelId: string,
1745
- ): Promise<Map<RoleSlot, { modelId: string; provider: string; tier?: string }>> {
1746
- const out = new Map<RoleSlot, { modelId: string; provider: string; tier?: string }>();
1747
- // Role-assignment inventory scan: intentionally excludes xai for legacy
1748
- // resolveRoles ranking. Derived from ALL_PROVIDER_IDS so future additions
1749
- // are picked up automatically.
1750
- const order: readonly ProviderId[] = ALL_PROVIDER_IDS.filter((p) => p !== "xai");
1751
- const inventory: ModelInfo[] = [];
1752
- for (const p of order) {
1753
- try {
1754
- await loadKeyForProvider(p);
1755
- } catch {
1756
- continue;
1757
- }
1758
- inventory.push(...getModelsForProvider(p));
1759
- }
1760
- if (inventory.length === 0) return out;
1761
-
1762
- // EE-driven override: ask the experience brain for the best (model,tier)
1763
- // per role, given accumulated past-performance signals. routeModel returns
1764
- // null when no EE core is installed, in which case role-registry falls
1765
- // back to its tier-preference cold-start logic.
1766
- const eeRouteOverride = async (slot: RoleSlot): Promise<EERouteResult | null> => {
1767
- const task = describeRoleTask(slot);
1768
- try {
1769
- return await eeRouteModel(
1770
- task,
1771
- { role: slot, sessionModel: sessionModelId, source: "product-loop" },
1772
- "muonroi-cli",
1773
- );
1774
- } catch {
1775
- return null;
1776
- }
1777
- };
1778
-
1779
- const result = await resolveRoles({ inventory, eeRouteOverride });
1780
- if (result.kind !== "ok") return out;
1781
- for (const [slot, a] of Object.entries(result.roles)) {
1782
- out.set(slot as RoleSlot, { modelId: a.model, provider: a.provider, tier: a.tier });
1783
- }
1784
- return out;
1785
- }
1786
-
1787
- /**
1788
- * Slot → human-readable task description fed to EE's routeModel. The brain
1789
- * uses this string as the primary classification key, so phrasing matters:
1790
- * keep it specific to the role's actual deliverable.
1791
- */
1792
- function describeRoleTask(slot: RoleSlot): string {
1793
- switch (slot) {
1794
- case "PO":
1795
- return "product owner: clarify product spec and acceptance criteria";
1796
- case "Architect":
1797
- return "software architect: design module boundaries and data flow";
1798
- case "Implementer":
1799
- return "implementer: write production code from a spec";
1800
- case "Tester":
1801
- return "tester: design and write unit/integration tests";
1802
- case "Reviewer":
1803
- return "code reviewer: critique code for bugs, perf, and clarity";
1804
- case "Customer":
1805
- return "customer proxy: validate that built feature meets user need";
1806
- default:
1807
- return `role ${String(slot)}`;
1808
- }
1809
- }
1810
-
1811
- async function* runShip(opts: ProductLoopOptions): AsyncGenerator<StreamChunk, ProductLoopResult, unknown> {
1812
- if (!opts.runId) {
1813
- yield { type: "content", content: "error: ship requires a runId\n" } as StreamChunk;
1814
- return { runId: "", stage: "error", success: false, reason: "missing_runId" };
1815
- }
1816
- const m = await readManifest(opts.flowDir, opts.runId);
1817
- if (!m) {
1818
- yield { type: "content", content: `Run not found: ${opts.runId}\n` } as StreamChunk;
1819
- return { runId: opts.runId, stage: "error", success: false, reason: "not_found" };
1820
- }
1821
- const iters = await readIterations(opts.flowDir, opts.runId);
1822
- if (iters.length === 0) {
1823
- yield { type: "content", content: `not ready to ship: no iterations recorded\n` } as StreamChunk;
1824
- return { runId: opts.runId, stage: "halted", success: false, reason: "not_ready" };
1825
- }
1826
- const last = iters[iters.length - 1]!;
1827
- if (last.lastVerifyResult !== "PASS") {
1828
- yield {
1829
- type: "content",
1830
- content: `not ready to ship: last verify=${last.lastVerifyResult}\n`,
1831
- } as StreamChunk;
1832
- return { runId: opts.runId, stage: "halted", success: false, reason: "not_ready" };
1833
- }
1834
-
1835
- // Force final user-approval gate (Cond #5). Reuse runPreflight via the
1836
- // respondToPreflight responder: caller handles approve/reject prompt.
1837
- const approved = await opts.respondToPreflight("ship-final");
1838
- if (!approved) {
1839
- yield { type: "content", content: `Ship rejected by user.\n` } as StreamChunk;
1840
- // Build feedback so caller can pipe back into a continue cycle.
1841
- buildContinueFeedback(
1842
- { pass: false, failedCondition: "user_approval", score: last.scoreAfter, reason: "user_rejected" },
1843
- null,
1844
- [],
1845
- );
1846
- return { runId: opts.runId, stage: "halted", success: false, reason: "user_rejected" };
1847
- }
1848
- await writeManifest(opts.flowDir, opts.runId, {
1849
- ...m,
1850
- doneAt: new Date(),
1851
- verdict: { pass: true, score: last.scoreAfter, failedCondition: undefined as any, reason: "force_shipped" },
1852
- });
1853
- yield { type: "content", content: `Shipped run ${opts.runId}.\n` } as StreamChunk;
1854
- return { runId: opts.runId, stage: "approved", success: true, reason: "shipped", shipped: true };
1855
- }