muonroi-cli 1.3.4 → 1.4.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (2202) hide show
  1. package/LICENSE +21 -21
  2. package/README.md +122 -122
  3. package/dist/packages/agent-harness-core/src/predicate.d.ts +2 -2
  4. package/dist/packages/agent-harness-core/src/protocol.d.ts +8 -0
  5. package/dist/src/__test-helpers__/catalog-fixtures.d.ts +22 -0
  6. package/dist/src/__test-helpers__/catalog-fixtures.js +55 -0
  7. package/dist/src/agent-harness/index.js +1 -1
  8. package/dist/src/agent-harness/mock-model.d.ts +5 -0
  9. package/dist/src/agent-harness/mock-model.js +68 -23
  10. package/dist/src/agent-harness/test-spawn.d.ts +7 -1
  11. package/dist/src/agent-harness/test-spawn.js +19 -4
  12. package/dist/src/chat/__tests__/broadcast-bus.test.js +2 -2
  13. package/dist/src/chat/__tests__/client.test.js +1 -1
  14. package/dist/src/chat/broadcast-bus.js +2 -2
  15. package/dist/src/chat/chat-keychain.js +11 -2
  16. package/dist/src/chat/providers/discord/client.d.ts +1 -1
  17. package/dist/src/chat/providers/discord/client.js +1 -1
  18. package/dist/src/cli/config/screen-council.js +1 -1
  19. package/dist/src/cli/config/screen-models.js +2 -2
  20. package/dist/src/cli/config/screen-providers.js +2 -2
  21. package/dist/src/cli/config/tui.js +1 -1
  22. package/dist/src/cli/cost-forensics.d.ts +31 -0
  23. package/dist/src/cli/cost-forensics.js +58 -12
  24. package/dist/src/cli/cost-forensics.test.js +125 -2
  25. package/dist/src/cli/keys.d.ts +5 -1
  26. package/dist/src/cli/keys.js +48 -20
  27. package/dist/src/cli/keys.test.js +1 -1
  28. package/dist/src/cli/reporter-cmd.d.ts +15 -0
  29. package/dist/src/cli/reporter-cmd.js +120 -0
  30. package/dist/src/cli/usage-report.d.ts +38 -1
  31. package/dist/src/cli/usage-report.js +133 -0
  32. package/dist/src/council/__tests__/audit-replay.test.js +1 -1
  33. package/dist/src/council/__tests__/clarifier-max-rounds.test.js +5 -5
  34. package/dist/src/council/__tests__/clarifier-ready-gate.test.js +233 -0
  35. package/dist/src/council/__tests__/debate-planner-structured.test.js +2 -2
  36. package/dist/src/council/__tests__/decisions-lock.test.d.ts +6 -0
  37. package/dist/src/council/__tests__/decisions-lock.test.js +336 -0
  38. package/dist/src/council/__tests__/tool-trace.test.js +2 -2
  39. package/dist/src/council/clarifier.d.ts +19 -2
  40. package/dist/src/council/clarifier.js +84 -6
  41. package/dist/src/council/context.js +3 -3
  42. package/dist/src/council/debate-planner.d.ts +1 -1
  43. package/dist/src/council/debate-planner.js +40 -7
  44. package/dist/src/council/debate.js +1 -1
  45. package/dist/src/council/decisions-lock.d.ts +76 -0
  46. package/dist/src/council/decisions-lock.js +239 -0
  47. package/dist/src/council/index.d.ts +5 -0
  48. package/dist/src/council/index.js +50 -18
  49. package/dist/src/council/leader.d.ts +1 -1
  50. package/dist/src/council/leader.js +14 -1
  51. package/dist/src/council/llm.js +33 -61
  52. package/dist/src/council/phase-events.d.ts +5 -0
  53. package/dist/src/council/phase-events.js +1 -0
  54. package/dist/src/council/planner.js +1 -1
  55. package/dist/src/council/prompts.d.ts +24 -0
  56. package/dist/src/council/prompts.js +112 -22
  57. package/dist/src/council/types.d.ts +18 -0
  58. package/dist/src/ee/__tests__/export-transcripts.test.d.ts +11 -0
  59. package/dist/src/ee/__tests__/export-transcripts.test.js +200 -0
  60. package/dist/src/ee/__tests__/recall-format.test.d.ts +10 -0
  61. package/dist/src/ee/__tests__/recall-format.test.js +57 -0
  62. package/dist/src/ee/__tests__/recall-ledger.test.d.ts +1 -0
  63. package/dist/src/ee/__tests__/recall-ledger.test.js +45 -0
  64. package/dist/src/ee/auth.test.js +2 -2
  65. package/dist/src/ee/client.js +59 -0
  66. package/dist/src/ee/client.test.js +30 -0
  67. package/dist/src/ee/council-bridge.js +3 -3
  68. package/dist/src/ee/export-transcripts.d.ts +26 -0
  69. package/dist/src/ee/export-transcripts.js +115 -0
  70. package/dist/src/ee/intercept.d.ts +9 -0
  71. package/dist/src/ee/intercept.js +19 -0
  72. package/dist/src/ee/offline-queue.test.js +3 -3
  73. package/dist/src/ee/phase-tracker.js +1 -1
  74. package/dist/src/ee/recall-ledger.d.ts +32 -0
  75. package/dist/src/ee/recall-ledger.js +52 -0
  76. package/dist/src/ee/recall-mirror.test.d.ts +1 -0
  77. package/dist/src/ee/recall-mirror.test.js +65 -0
  78. package/dist/src/ee/scope.js +1 -1
  79. package/dist/src/ee/scope.test.js +1 -1
  80. package/dist/src/ee/search.d.ts +99 -0
  81. package/dist/src/ee/search.js +220 -0
  82. package/dist/src/ee/session-trajectory.js +1 -1
  83. package/dist/src/ee/session-trajectory.test.js +1 -1
  84. package/dist/src/ee/transcript-emit.d.ts +51 -0
  85. package/dist/src/ee/transcript-emit.js +140 -0
  86. package/dist/src/ee/types.d.ts +37 -1
  87. package/dist/src/flow/__tests__/migration.test.js +1 -1
  88. package/dist/src/flow/__tests__/run-manager-product.test.js +1 -1
  89. package/dist/src/flow/__tests__/run-manager.test.js +1 -1
  90. package/dist/src/flow/__tests__/scaffold-checkpoint.test.js +2 -2
  91. package/dist/src/flow/__tests__/scaffold.test.js +1 -1
  92. package/dist/src/flow/__tests__/warning-persist.test.js +1 -1
  93. package/dist/src/generated/version.d.ts +1 -1
  94. package/dist/src/generated/version.js +1 -1
  95. package/dist/src/gsd/__tests__/directives.test.js +35 -0
  96. package/dist/src/gsd/__tests__/types.test.js +14 -1
  97. package/dist/src/gsd/directives.d.ts +10 -0
  98. package/dist/src/gsd/directives.js +38 -2
  99. package/dist/src/gsd/gray-areas.js +1 -1
  100. package/dist/src/gsd/types.d.ts +1 -1
  101. package/dist/src/gsd/types.js +20 -6
  102. package/dist/src/headless/__tests__/council-answers.test.js +26 -1
  103. package/dist/src/headless/council-answers.d.ts +17 -2
  104. package/dist/src/headless/council-answers.js +21 -0
  105. package/dist/src/hooks/index.js +74 -49
  106. package/dist/src/index.js +180 -16
  107. package/dist/src/lsp/builtins.js +44 -0
  108. package/dist/src/lsp/builtins.test.js +22 -1
  109. package/dist/src/lsp/manager.js +40 -9
  110. package/dist/src/lsp/manager.test.js +23 -1
  111. package/dist/src/lsp/npm-cache.js +2 -1
  112. package/dist/src/lsp/npm-cache.test.js +1 -1
  113. package/dist/src/lsp/smoke.test.js +1 -1
  114. package/dist/src/lsp/types.d.ts +3 -1
  115. package/dist/src/maintain/__tests__/codebase-intel.test.d.ts +5 -0
  116. package/dist/src/maintain/__tests__/codebase-intel.test.js +237 -0
  117. package/dist/src/maintain/__tests__/gh-create-pr.test.d.ts +11 -0
  118. package/dist/src/maintain/__tests__/gh-create-pr.test.js +156 -0
  119. package/dist/src/maintain/__tests__/pr-builder.test.d.ts +10 -0
  120. package/dist/src/maintain/__tests__/pr-builder.test.js +225 -0
  121. package/dist/src/maintain/__tests__/repo-map.test.d.ts +5 -0
  122. package/dist/src/maintain/__tests__/repo-map.test.js +90 -0
  123. package/dist/src/maintain/__tests__/task-runner.test.d.ts +11 -0
  124. package/dist/src/maintain/__tests__/task-runner.test.js +281 -0
  125. package/dist/src/maintain/codebase-intel.d.ts +22 -0
  126. package/dist/src/maintain/codebase-intel.js +548 -0
  127. package/dist/src/maintain/gh-create-pr.d.ts +24 -0
  128. package/dist/src/maintain/gh-create-pr.js +111 -0
  129. package/dist/src/maintain/index.d.ts +12 -0
  130. package/dist/src/maintain/index.js +10 -0
  131. package/dist/src/maintain/pr-builder.d.ts +35 -0
  132. package/dist/src/maintain/pr-builder.js +305 -0
  133. package/dist/src/maintain/repo-map.d.ts +25 -0
  134. package/dist/src/maintain/repo-map.js +189 -0
  135. package/dist/src/maintain/task-runner.d.ts +45 -0
  136. package/dist/src/maintain/task-runner.js +401 -0
  137. package/dist/src/maintain/types.d.ts +45 -0
  138. package/dist/src/maintain/types.js +7 -0
  139. package/dist/src/mcp/__tests__/auto-setup.test.js +1 -1
  140. package/dist/src/mcp/__tests__/cap-tool-result.test.d.ts +1 -0
  141. package/dist/src/mcp/__tests__/cap-tool-result.test.js +58 -0
  142. package/dist/src/mcp/__tests__/ee-tools.test.d.ts +1 -0
  143. package/dist/src/mcp/__tests__/ee-tools.test.js +198 -0
  144. package/dist/src/mcp/__tests__/forensics-tools.test.d.ts +1 -0
  145. package/dist/src/mcp/__tests__/forensics-tools.test.js +53 -0
  146. package/dist/src/mcp/__tests__/harness-driver-action-tools.spec.js +3 -1
  147. package/dist/src/mcp/__tests__/harness-driver-async-tools.spec.js +3 -1
  148. package/dist/src/mcp/__tests__/lsp-tools.test.d.ts +1 -0
  149. package/dist/src/mcp/__tests__/lsp-tools.test.js +56 -0
  150. package/dist/src/mcp/__tests__/runtime-output-cap.test.d.ts +1 -0
  151. package/dist/src/mcp/__tests__/runtime-output-cap.test.js +42 -0
  152. package/dist/src/mcp/__tests__/self-verify-jobs.test.d.ts +1 -0
  153. package/dist/src/mcp/__tests__/self-verify-jobs.test.js +92 -0
  154. package/dist/src/mcp/__tests__/smart-filter.test.d.ts +1 -0
  155. package/dist/src/mcp/__tests__/smart-filter.test.js +121 -0
  156. package/dist/src/mcp/__tests__/tools-server.smoke.test.d.ts +1 -0
  157. package/dist/src/mcp/__tests__/tools-server.smoke.test.js +42 -0
  158. package/dist/src/mcp/cap-tool-result.d.ts +1 -0
  159. package/dist/src/mcp/cap-tool-result.js +35 -0
  160. package/dist/src/mcp/ee-tools.d.ts +36 -0
  161. package/dist/src/mcp/ee-tools.js +159 -0
  162. package/dist/src/mcp/forensics-tools.d.ts +13 -0
  163. package/dist/src/mcp/forensics-tools.js +52 -0
  164. package/dist/src/mcp/lsp-tools.d.ts +16 -0
  165. package/dist/src/mcp/lsp-tools.js +65 -0
  166. package/dist/src/mcp/mcp-keychain.js +11 -2
  167. package/dist/src/mcp/oauth-callback.js +2 -2
  168. package/dist/src/mcp/opentui-spawn.js +1 -1
  169. package/dist/src/mcp/parse-headers.test.js +14 -14
  170. package/dist/src/mcp/runtime.js +11 -0
  171. package/dist/src/mcp/self-verify-jobs.d.ts +55 -0
  172. package/dist/src/mcp/self-verify-jobs.js +86 -0
  173. package/dist/src/mcp/smart-filter.d.ts +48 -0
  174. package/dist/src/mcp/smart-filter.js +115 -0
  175. package/dist/src/mcp/smoke.test.js +44 -44
  176. package/dist/src/mcp/tools-server.d.ts +14 -0
  177. package/dist/src/mcp/tools-server.js +147 -0
  178. package/dist/src/models/catalog-client.d.ts +22 -0
  179. package/dist/src/models/catalog-client.js +95 -9
  180. package/dist/src/models/catalog-gemini.test.d.ts +1 -0
  181. package/dist/src/models/catalog-gemini.test.js +46 -0
  182. package/dist/src/models/catalog-url.test.d.ts +1 -0
  183. package/dist/src/models/catalog-url.test.js +26 -0
  184. package/dist/src/models/catalog-validation.test.d.ts +1 -0
  185. package/dist/src/models/catalog-validation.test.js +63 -0
  186. package/dist/src/models/catalog.json +349 -177
  187. package/dist/src/models/classify-tier.d.ts +1 -1
  188. package/dist/src/models/classify-tier.js +1 -1
  189. package/dist/src/models/registry.d.ts +2 -0
  190. package/dist/src/models/registry.js +9 -0
  191. package/dist/src/ops/__tests__/doctor-ee-health.test.js +1 -1
  192. package/dist/src/ops/doctor.js +7 -7
  193. package/dist/src/orchestrator/__tests__/agent-base-url-switch.test.d.ts +1 -0
  194. package/dist/src/orchestrator/__tests__/agent-base-url-switch.test.js +77 -0
  195. package/dist/src/orchestrator/__tests__/batch-turn-runner.test.js +10 -3
  196. package/dist/src/orchestrator/__tests__/cross-turn-dedup.test.js +38 -16
  197. package/dist/src/orchestrator/__tests__/error-forensics.test.d.ts +1 -0
  198. package/dist/src/orchestrator/__tests__/error-forensics.test.js +93 -0
  199. package/dist/src/orchestrator/__tests__/flow-resume.test.js +1 -1
  200. package/dist/src/orchestrator/__tests__/humanize-api-error.test.d.ts +1 -0
  201. package/dist/src/orchestrator/__tests__/humanize-api-error.test.js +68 -0
  202. package/dist/src/orchestrator/__tests__/message-processor.test.js +6 -1
  203. package/dist/src/orchestrator/__tests__/read-path-budget.test.js +62 -4
  204. package/dist/src/orchestrator/__tests__/retry-classifier.test.js +10 -0
  205. package/dist/src/orchestrator/__tests__/stream-runner.test.js +77 -4
  206. package/dist/src/orchestrator/__tests__/sub-agent-model-tier.test.d.ts +1 -0
  207. package/dist/src/orchestrator/__tests__/sub-agent-model-tier.test.js +45 -0
  208. package/dist/src/orchestrator/__tests__/usage-shape-threading.test.d.ts +1 -0
  209. package/dist/src/orchestrator/__tests__/usage-shape-threading.test.js +98 -0
  210. package/dist/src/orchestrator/agent.test.js +33 -18
  211. package/dist/src/orchestrator/batch-turn-runner.d.ts +1 -1
  212. package/dist/src/orchestrator/batch-turn-runner.js +3 -2
  213. package/dist/src/orchestrator/compaction.js +99 -87
  214. package/dist/src/orchestrator/compaction.test.js +17 -0
  215. package/dist/src/orchestrator/council-manager.d.ts +1 -1
  216. package/dist/src/orchestrator/council-manager.js +3 -10
  217. package/dist/src/orchestrator/cross-turn-dedup.js +21 -1
  218. package/dist/src/orchestrator/delegations.js +7 -1
  219. package/dist/src/orchestrator/delegations.test.js +1 -1
  220. package/dist/src/orchestrator/error-utils.d.ts +27 -1
  221. package/dist/src/orchestrator/error-utils.js +63 -1
  222. package/dist/src/orchestrator/grounding-check.d.ts +50 -0
  223. package/dist/src/orchestrator/grounding-check.js +123 -0
  224. package/dist/src/orchestrator/grounding-check.test.d.ts +1 -0
  225. package/dist/src/orchestrator/grounding-check.test.js +94 -0
  226. package/dist/src/orchestrator/interrupted-turn.d.ts +19 -0
  227. package/dist/src/orchestrator/interrupted-turn.js +28 -0
  228. package/dist/src/orchestrator/interrupted-turn.test.d.ts +1 -0
  229. package/dist/src/orchestrator/interrupted-turn.test.js +34 -0
  230. package/dist/src/orchestrator/message-processor.d.ts +11 -10
  231. package/dist/src/orchestrator/message-processor.js +1367 -93
  232. package/dist/src/orchestrator/orchestrator.d.ts +7 -3
  233. package/dist/src/orchestrator/orchestrator.js +158 -43
  234. package/dist/src/orchestrator/pending-calls.test.js +1 -1
  235. package/dist/src/orchestrator/prompts.d.ts +1 -1
  236. package/dist/src/orchestrator/prompts.js +237 -154
  237. package/dist/src/orchestrator/read-path-budget.d.ts +22 -2
  238. package/dist/src/orchestrator/read-path-budget.js +96 -18
  239. package/dist/src/orchestrator/reasoning.js +43 -1
  240. package/dist/src/orchestrator/reasoning.test.js +75 -0
  241. package/dist/src/orchestrator/repair-tool-call.d.ts +32 -0
  242. package/dist/src/orchestrator/repair-tool-call.js +50 -0
  243. package/dist/src/orchestrator/repetition-detector.d.ts +58 -0
  244. package/dist/src/orchestrator/repetition-detector.js +126 -0
  245. package/dist/src/orchestrator/repetition-detector.test.d.ts +1 -0
  246. package/dist/src/orchestrator/repetition-detector.test.js +103 -0
  247. package/dist/src/orchestrator/retry-classifier.js +8 -0
  248. package/dist/src/orchestrator/sandbox.test.js +3 -1
  249. package/dist/src/orchestrator/scope-ceiling.d.ts +86 -0
  250. package/dist/src/orchestrator/scope-ceiling.js +161 -0
  251. package/dist/src/orchestrator/scope-ceiling.test.d.ts +13 -0
  252. package/dist/src/orchestrator/scope-ceiling.test.js +181 -0
  253. package/dist/src/orchestrator/scope-reminder.d.ts +102 -0
  254. package/dist/src/orchestrator/scope-reminder.js +221 -0
  255. package/dist/src/orchestrator/scope-reminder.test.d.ts +15 -0
  256. package/dist/src/orchestrator/scope-reminder.test.js +204 -0
  257. package/dist/src/orchestrator/stall-rescue.d.ts +67 -0
  258. package/dist/src/orchestrator/stall-rescue.js +72 -0
  259. package/dist/src/orchestrator/stall-rescue.test.d.ts +1 -0
  260. package/dist/src/orchestrator/stall-rescue.test.js +88 -0
  261. package/dist/src/orchestrator/stall-watchdog.d.ts +34 -0
  262. package/dist/src/orchestrator/stall-watchdog.js +72 -0
  263. package/dist/src/orchestrator/stall-watchdog.test.d.ts +1 -0
  264. package/dist/src/orchestrator/stall-watchdog.test.js +73 -0
  265. package/dist/src/orchestrator/stream-runner.d.ts +18 -2
  266. package/dist/src/orchestrator/stream-runner.js +248 -77
  267. package/dist/src/orchestrator/sub-agent-cap.js +21 -1
  268. package/dist/src/orchestrator/sub-agent-cap.test.js +41 -3
  269. package/dist/src/orchestrator/sub-agent-model-tier.d.ts +13 -0
  270. package/dist/src/orchestrator/sub-agent-model-tier.js +45 -0
  271. package/dist/src/orchestrator/subagent-compactor.d.ts +49 -0
  272. package/dist/src/orchestrator/subagent-compactor.js +184 -11
  273. package/dist/src/orchestrator/subagent-compactor.spec.js +187 -2
  274. package/dist/src/orchestrator/text-tool-call-detector.d.ts +61 -0
  275. package/dist/src/orchestrator/text-tool-call-detector.js +163 -0
  276. package/dist/src/orchestrator/text-tool-call-detector.test.d.ts +1 -0
  277. package/dist/src/orchestrator/text-tool-call-detector.test.js +89 -0
  278. package/dist/src/orchestrator/tool-args-hash.d.ts +51 -0
  279. package/dist/src/orchestrator/tool-args-hash.js +219 -0
  280. package/dist/src/orchestrator/tool-args-hash.test.d.ts +1 -0
  281. package/dist/src/orchestrator/tool-args-hash.test.js +105 -0
  282. package/dist/src/orchestrator/tool-args-repair.d.ts +93 -0
  283. package/dist/src/orchestrator/tool-args-repair.js +219 -0
  284. package/dist/src/orchestrator/tool-args-repair.test.d.ts +1 -0
  285. package/dist/src/orchestrator/tool-args-repair.test.js +136 -0
  286. package/dist/src/orchestrator/tool-loop-cap.d.ts +66 -0
  287. package/dist/src/orchestrator/tool-loop-cap.js +138 -0
  288. package/dist/src/orchestrator/tool-loop-cap.test.d.ts +1 -0
  289. package/dist/src/orchestrator/tool-loop-cap.test.js +176 -0
  290. package/dist/src/orchestrator/tool-repetition-detector.d.ts +64 -0
  291. package/dist/src/orchestrator/tool-repetition-detector.js +0 -0
  292. package/dist/src/orchestrator/tool-repetition-detector.test.d.ts +1 -0
  293. package/dist/src/orchestrator/tool-repetition-detector.test.js +101 -0
  294. package/dist/src/orchestrator/turn-runner-deps.d.ts +3 -1
  295. package/dist/src/pil/__tests__/clarity-gate.test.d.ts +1 -0
  296. package/dist/src/pil/__tests__/clarity-gate.test.js +228 -0
  297. package/dist/src/pil/__tests__/config.test.js +44 -1
  298. package/dist/src/pil/__tests__/discovery-cache.test.d.ts +1 -0
  299. package/dist/src/pil/__tests__/discovery-cache.test.js +38 -0
  300. package/dist/src/pil/__tests__/discovery-types.test.d.ts +1 -0
  301. package/dist/src/pil/__tests__/discovery-types.test.js +54 -0
  302. package/dist/src/pil/__tests__/discovery.test.d.ts +1 -0
  303. package/dist/src/pil/__tests__/discovery.test.js +101 -0
  304. package/dist/src/pil/__tests__/layer1-intent-trace.test.js +5 -3
  305. package/dist/src/pil/__tests__/layer1-intent.test.js +25 -7
  306. package/dist/src/pil/__tests__/layer15-context-scan.test.d.ts +1 -0
  307. package/dist/src/pil/__tests__/layer15-context-scan.test.js +64 -0
  308. package/dist/src/pil/__tests__/layer16-clarity.test.d.ts +1 -0
  309. package/dist/src/pil/__tests__/layer16-clarity.test.js +153 -0
  310. package/dist/src/pil/__tests__/layer17-feasibility.test.d.ts +1 -0
  311. package/dist/src/pil/__tests__/layer17-feasibility.test.js +36 -0
  312. package/dist/src/pil/__tests__/layer18-acceptance.test.d.ts +1 -0
  313. package/dist/src/pil/__tests__/layer18-acceptance.test.js +95 -0
  314. package/dist/src/pil/__tests__/layer3-ee-injection.test.js +4 -1
  315. package/dist/src/pil/__tests__/layer3-injected-chunk.test.js +3 -3
  316. package/dist/src/pil/__tests__/layer6-output.test.js +69 -9
  317. package/dist/src/pil/__tests__/llm-classify.test.d.ts +1 -0
  318. package/dist/src/pil/__tests__/llm-classify.test.js +113 -0
  319. package/dist/src/pil/__tests__/native-capabilities-workbook.test.d.ts +1 -0
  320. package/dist/src/pil/__tests__/native-capabilities-workbook.test.js +40 -0
  321. package/dist/src/pil/__tests__/pipeline.test.js +3 -2
  322. package/dist/src/pil/__tests__/renderer-coverage.test.js +1 -1
  323. package/dist/src/pil/__tests__/response-tools.test.js +49 -1
  324. package/dist/src/pil/__tests__/scoreComplexity.test.js +2 -2
  325. package/dist/src/pil/agent-operating-contract.d.ts +51 -0
  326. package/dist/src/pil/agent-operating-contract.js +66 -0
  327. package/dist/src/pil/agent-operating-contract.test.d.ts +1 -0
  328. package/dist/src/pil/agent-operating-contract.test.js +75 -0
  329. package/dist/src/pil/budget-log.js +1 -1
  330. package/dist/src/pil/cheap-model-playbook.d.ts +80 -0
  331. package/dist/src/pil/cheap-model-playbook.js +147 -0
  332. package/dist/src/pil/cheap-model-playbook.test.d.ts +1 -0
  333. package/dist/src/pil/cheap-model-playbook.test.js +160 -0
  334. package/dist/src/pil/cheap-model-workbooks.d.ts +55 -0
  335. package/dist/src/pil/cheap-model-workbooks.js +102 -0
  336. package/dist/src/pil/cheap-model-workbooks.test.d.ts +1 -0
  337. package/dist/src/pil/cheap-model-workbooks.test.js +129 -0
  338. package/dist/src/pil/clarity-gate.d.ts +22 -0
  339. package/dist/src/pil/clarity-gate.js +162 -0
  340. package/dist/src/pil/config.d.ts +3 -0
  341. package/dist/src/pil/config.js +11 -0
  342. package/dist/src/pil/discovery-cache.d.ts +4 -0
  343. package/dist/src/pil/discovery-cache.js +18 -0
  344. package/dist/src/pil/discovery-types.d.ts +94 -0
  345. package/dist/src/pil/discovery-types.js +2 -0
  346. package/dist/src/pil/discovery.d.ts +18 -0
  347. package/dist/src/pil/discovery.js +341 -0
  348. package/dist/src/pil/index.d.ts +3 -1
  349. package/dist/src/pil/index.js +2 -1
  350. package/dist/src/pil/layer1-intent.d.ts +37 -1
  351. package/dist/src/pil/layer1-intent.js +675 -39
  352. package/dist/src/pil/layer1-intent.test.js +333 -1
  353. package/dist/src/pil/layer15-context-scan.d.ts +9 -0
  354. package/dist/src/pil/layer15-context-scan.js +164 -0
  355. package/dist/src/pil/layer16-clarity.d.ts +19 -0
  356. package/dist/src/pil/layer16-clarity.js +394 -0
  357. package/dist/src/pil/layer16-clarity.test.d.ts +1 -0
  358. package/dist/src/pil/layer16-clarity.test.js +31 -0
  359. package/dist/src/pil/layer17-feasibility.d.ts +4 -0
  360. package/dist/src/pil/layer17-feasibility.js +30 -0
  361. package/dist/src/pil/layer18-acceptance.d.ts +4 -0
  362. package/dist/src/pil/layer18-acceptance.js +84 -0
  363. package/dist/src/pil/layer1_5-complexity-size.d.ts +23 -0
  364. package/dist/src/pil/layer1_5-complexity-size.js +152 -0
  365. package/dist/src/pil/layer1_5-complexity-size.test.d.ts +10 -0
  366. package/dist/src/pil/layer1_5-complexity-size.test.js +248 -0
  367. package/dist/src/pil/layer3-ee-injection.js +63 -6
  368. package/dist/src/pil/layer4-gsd.js +7 -1
  369. package/dist/src/pil/layer5-context.js +15 -5
  370. package/dist/src/pil/layer6-output.d.ts +2 -0
  371. package/dist/src/pil/layer6-output.js +110 -18
  372. package/dist/src/pil/llm-classify.d.ts +16 -0
  373. package/dist/src/pil/llm-classify.js +179 -0
  374. package/dist/src/pil/native-capabilities-workbook.d.ts +39 -0
  375. package/dist/src/pil/native-capabilities-workbook.js +112 -0
  376. package/dist/src/pil/pipeline.d.ts +21 -0
  377. package/dist/src/pil/pipeline.js +89 -13
  378. package/dist/src/pil/response-tools.d.ts +56 -0
  379. package/dist/src/pil/response-tools.js +76 -2
  380. package/dist/src/pil/schema.d.ts +10 -1
  381. package/dist/src/pil/schema.js +8 -0
  382. package/dist/src/pil/session-state.d.ts +44 -0
  383. package/dist/src/pil/session-state.js +143 -0
  384. package/dist/src/pil/session-state.test.d.ts +1 -0
  385. package/dist/src/pil/session-state.test.js +73 -0
  386. package/dist/src/pil/task-tier-map.d.ts +6 -1
  387. package/dist/src/pil/task-tier-map.js +13 -6
  388. package/dist/src/pil/types.d.ts +18 -0
  389. package/dist/src/product-loop/__tests__/artifact-io.test.js +1 -1
  390. package/dist/src/product-loop/__tests__/assumption-ledger.test.js +1 -1
  391. package/dist/src/product-loop/__tests__/backlog-builder.test.d.ts +10 -0
  392. package/dist/src/product-loop/__tests__/backlog-builder.test.js +175 -0
  393. package/dist/src/product-loop/__tests__/backlog-store.test.d.ts +4 -0
  394. package/dist/src/product-loop/__tests__/backlog-store.test.js +96 -0
  395. package/dist/src/product-loop/__tests__/cb2-retry-bonus.test.js +1 -1
  396. package/dist/src/product-loop/__tests__/complexity-routing.spec.js +113 -7
  397. package/dist/src/product-loop/__tests__/context-policy.test.js +3 -3
  398. package/dist/src/product-loop/__tests__/cost-scoper.test.js +1 -1
  399. package/dist/src/product-loop/__tests__/discovery-context-format.test.d.ts +13 -0
  400. package/dist/src/product-loop/__tests__/discovery-context-format.test.js +100 -0
  401. package/dist/src/product-loop/__tests__/discovery-ecosystem.test.js +100 -1
  402. package/dist/src/product-loop/__tests__/discovery-prompt-specificity.test.d.ts +1 -0
  403. package/dist/src/product-loop/__tests__/discovery-prompt-specificity.test.js +55 -0
  404. package/dist/src/product-loop/__tests__/discovery-recommender-ecosystem.test.js +92 -0
  405. package/dist/src/product-loop/__tests__/ee-extract-wiring.test.js +8 -3
  406. package/dist/src/product-loop/__tests__/extract-to-ee.test.js +2 -2
  407. package/dist/src/product-loop/__tests__/gather-selectable-alts.test.d.ts +15 -0
  408. package/dist/src/product-loop/__tests__/gather-selectable-alts.test.js +109 -0
  409. package/dist/src/product-loop/__tests__/integration.test.js +7 -2
  410. package/dist/src/product-loop/__tests__/loop-driver-audit.test.js +7 -2
  411. package/dist/src/product-loop/__tests__/loop-driver.test.js +7 -2
  412. package/dist/src/product-loop/__tests__/maintenance-task-synthesis.test.d.ts +8 -0
  413. package/dist/src/product-loop/__tests__/maintenance-task-synthesis.test.js +67 -0
  414. package/dist/src/product-loop/__tests__/phase-a1-a3-sprint-runner.test.d.ts +13 -0
  415. package/dist/src/product-loop/__tests__/phase-a1-a3-sprint-runner.test.js +268 -0
  416. package/dist/src/product-loop/__tests__/phase-a2-backlog-build.test.d.ts +8 -0
  417. package/dist/src/product-loop/__tests__/phase-a2-backlog-build.test.js +162 -0
  418. package/dist/src/product-loop/__tests__/phase-rituals.test.js +1 -1
  419. package/dist/src/product-loop/__tests__/pick-backend-stack.test.d.ts +11 -0
  420. package/dist/src/product-loop/__tests__/pick-backend-stack.test.js +95 -0
  421. package/dist/src/product-loop/__tests__/progress-snapshot.test.d.ts +8 -0
  422. package/dist/src/product-loop/__tests__/progress-snapshot.test.js +152 -0
  423. package/dist/src/product-loop/__tests__/repo-audit.test.js +1 -1
  424. package/dist/src/product-loop/__tests__/repo-brief.test.d.ts +9 -0
  425. package/dist/src/product-loop/__tests__/repo-brief.test.js +132 -0
  426. package/dist/src/product-loop/__tests__/route-decision-emit.test.js +51 -2
  427. package/dist/src/product-loop/__tests__/ship-polish.test.js +1 -1
  428. package/dist/src/product-loop/__tests__/sprint-planner.test.d.ts +6 -0
  429. package/dist/src/product-loop/__tests__/sprint-planner.test.js +140 -0
  430. package/dist/src/product-loop/__tests__/sprint-runner-backlog.test.d.ts +8 -0
  431. package/dist/src/product-loop/__tests__/sprint-runner-backlog.test.js +221 -0
  432. package/dist/src/product-loop/__tests__/sprint-runner-phase-chunks.test.d.ts +14 -0
  433. package/dist/src/product-loop/__tests__/sprint-runner-phase-chunks.test.js +193 -0
  434. package/dist/src/product-loop/__tests__/sprint-self-verify.test.d.ts +8 -0
  435. package/dist/src/product-loop/__tests__/sprint-self-verify.test.js +73 -0
  436. package/dist/src/product-loop/__tests__/sprint-store.test.d.ts +7 -0
  437. package/dist/src/product-loop/__tests__/sprint-store.test.js +84 -0
  438. package/dist/src/product-loop/__tests__/sufficiency-routing.spec.js +6 -0
  439. package/dist/src/product-loop/__tests__/types.test.js +7 -7
  440. package/dist/src/product-loop/__tests__/verify-failure-threshold.test.js +3 -2
  441. package/dist/src/product-loop/__tests__/verify-failure-tracking.test.js +2 -2
  442. package/dist/src/product-loop/assumption-ledger.js +6 -6
  443. package/dist/src/product-loop/backlog-builder.d.ts +32 -0
  444. package/dist/src/product-loop/backlog-builder.js +198 -0
  445. package/dist/src/product-loop/backlog-store.d.ts +22 -0
  446. package/dist/src/product-loop/backlog-store.js +49 -0
  447. package/dist/src/product-loop/context-policy.js +1 -1
  448. package/dist/src/product-loop/cost-preview.js +17 -1
  449. package/dist/src/product-loop/cross-run-memory.js +11 -11
  450. package/dist/src/product-loop/discover.js +6 -6
  451. package/dist/src/product-loop/discovery-context-format.d.ts +16 -0
  452. package/dist/src/product-loop/discovery-context-format.js +45 -13
  453. package/dist/src/product-loop/discovery-council-runner.js +5 -10
  454. package/dist/src/product-loop/discovery-detection.js +3 -3
  455. package/dist/src/product-loop/discovery-ecosystem.d.ts +23 -0
  456. package/dist/src/product-loop/discovery-ecosystem.js +104 -0
  457. package/dist/src/product-loop/discovery-interview.d.ts +6 -0
  458. package/dist/src/product-loop/discovery-interview.js +38 -2
  459. package/dist/src/product-loop/discovery-recommender.d.ts +29 -0
  460. package/dist/src/product-loop/discovery-recommender.js +126 -7
  461. package/dist/src/product-loop/done-gate.js +5 -5
  462. package/dist/src/product-loop/gather.d.ts +12 -1
  463. package/dist/src/product-loop/gather.js +93 -12
  464. package/dist/src/product-loop/index.d.ts +23 -0
  465. package/dist/src/product-loop/index.js +502 -9
  466. package/dist/src/product-loop/loop-driver.js +27 -28
  467. package/dist/src/product-loop/phase-budget.js +2 -2
  468. package/dist/src/product-loop/progress-snapshot.d.ts +25 -0
  469. package/dist/src/product-loop/progress-snapshot.js +180 -0
  470. package/dist/src/product-loop/repo-brief.d.ts +40 -0
  471. package/dist/src/product-loop/repo-brief.js +212 -0
  472. package/dist/src/product-loop/role-registry.js +1 -1
  473. package/dist/src/product-loop/sprint-planner.d.ts +39 -0
  474. package/dist/src/product-loop/sprint-planner.js +189 -0
  475. package/dist/src/product-loop/sprint-runner.js +201 -9
  476. package/dist/src/product-loop/sprint-self-verify.d.ts +54 -0
  477. package/dist/src/product-loop/sprint-self-verify.js +145 -0
  478. package/dist/src/product-loop/sprint-store.d.ts +27 -0
  479. package/dist/src/product-loop/sprint-store.js +81 -0
  480. package/dist/src/product-loop/typed-artifacts.js +5 -5
  481. package/dist/src/product-loop/types.d.ts +113 -2
  482. package/dist/src/product-loop/verify-failure-tracking.js +1 -1
  483. package/dist/src/providers/__tests__/adapter-oauth-wiring.test.js +18 -2
  484. package/dist/src/providers/__tests__/capabilities-provider-options.test.js +23 -1
  485. package/dist/src/providers/__tests__/capabilities-sanitize.test.js +46 -61
  486. package/dist/src/providers/__tests__/reasoning-roundtrip.test.d.ts +1 -0
  487. package/dist/src/providers/__tests__/reasoning-roundtrip.test.js +135 -0
  488. package/dist/src/providers/__tests__/runtime-integration.test.js +19 -12
  489. package/dist/src/providers/__tests__/runtime.test.js +3 -6
  490. package/dist/src/providers/__tests__/siliconflow-sse-repair.test.d.ts +1 -0
  491. package/dist/src/providers/__tests__/siliconflow-sse-repair.test.js +267 -0
  492. package/dist/src/providers/auth/__tests__/browser-flow.test.js +1 -1
  493. package/dist/src/providers/auth/__tests__/gemini-oauth.test.js +1 -1
  494. package/dist/src/providers/auth/__tests__/grok-oauth.test.d.ts +8 -0
  495. package/dist/src/providers/auth/__tests__/grok-oauth.test.js +236 -0
  496. package/dist/src/providers/auth/__tests__/token-store.test.js +7 -7
  497. package/dist/src/providers/auth/gemini-oauth.js +2 -2
  498. package/dist/src/providers/auth/grok-oauth.d.ts +63 -0
  499. package/dist/src/providers/auth/grok-oauth.js +341 -0
  500. package/dist/src/providers/auth/registry.js +17 -0
  501. package/dist/src/providers/auth/token-store.js +1 -1
  502. package/dist/src/providers/capabilities.js +9 -15
  503. package/dist/src/providers/keychain.js +14 -2
  504. package/dist/src/providers/mcp-vision-bridge.js +49 -49
  505. package/dist/src/providers/mcp-vision-bridge.test.js +12 -12
  506. package/dist/src/providers/openai-compatible.js +5 -1
  507. package/dist/src/providers/pricing.d.ts +7 -4
  508. package/dist/src/providers/pricing.js +21 -5
  509. package/dist/src/providers/pricing.test.js +35 -9
  510. package/dist/src/providers/runtime.d.ts +1 -0
  511. package/dist/src/providers/runtime.js +39 -13
  512. package/dist/src/providers/siliconflow-sse-repair.d.ts +58 -0
  513. package/dist/src/providers/siliconflow-sse-repair.js +177 -0
  514. package/dist/src/providers/strategies/deepseek.strategy.js +28 -0
  515. package/dist/src/providers/strategies/siliconflow.strategy.js +2 -0
  516. package/dist/src/providers/strategies/xai.strategy.js +8 -1
  517. package/dist/src/providers/wire-debug.js +2 -2
  518. package/dist/src/reporter/__tests__/acl-check.test.d.ts +6 -0
  519. package/dist/src/reporter/__tests__/acl-check.test.js +59 -0
  520. package/dist/src/reporter/__tests__/auto-fire.test.d.ts +10 -0
  521. package/dist/src/reporter/__tests__/auto-fire.test.js +140 -0
  522. package/dist/src/reporter/__tests__/budget.test.d.ts +7 -0
  523. package/dist/src/reporter/__tests__/budget.test.js +60 -0
  524. package/dist/src/reporter/__tests__/handlers.test.d.ts +7 -0
  525. package/dist/src/reporter/__tests__/handlers.test.js +163 -0
  526. package/dist/src/reporter/__tests__/query-router.test.d.ts +6 -0
  527. package/dist/src/reporter/__tests__/query-router.test.js +90 -0
  528. package/dist/src/reporter/acl-check.d.ts +23 -0
  529. package/dist/src/reporter/acl-check.js +43 -0
  530. package/dist/src/reporter/auto-fire.d.ts +59 -0
  531. package/dist/src/reporter/auto-fire.js +126 -0
  532. package/dist/src/reporter/budget.d.ts +17 -0
  533. package/dist/src/reporter/budget.js +52 -0
  534. package/dist/src/reporter/handlers.d.ts +32 -0
  535. package/dist/src/reporter/handlers.js +180 -0
  536. package/dist/src/reporter/index.d.ts +44 -0
  537. package/dist/src/reporter/index.js +167 -0
  538. package/dist/src/reporter/query-router.d.ts +21 -0
  539. package/dist/src/reporter/query-router.js +32 -0
  540. package/dist/src/router/__tests__/step-router.test.js +3 -3
  541. package/dist/src/router/classifier/regex.js +49 -2
  542. package/dist/src/router/classifier/regex.test.js +3 -1
  543. package/dist/src/router/decide.d.ts +18 -0
  544. package/dist/src/router/decide.js +39 -7
  545. package/dist/src/router/decide.test.js +58 -8
  546. package/dist/src/router/role-override.test.d.ts +1 -0
  547. package/dist/src/router/role-override.test.js +26 -0
  548. package/dist/src/router/step-router.js +1 -1
  549. package/dist/src/router/warm.d.ts +2 -0
  550. package/dist/src/router/warm.js +42 -12
  551. package/dist/src/router/warm.test.js +59 -1
  552. package/dist/src/scaffold/__tests__/init-new.spec.js +3 -3
  553. package/dist/src/scaffold/bb-ecosystem-apply.js +51 -49
  554. package/dist/src/scaffold/bb-quality-gate.js +5 -5
  555. package/dist/src/scaffold/continuation-prompt.js +60 -60
  556. package/dist/src/scaffold/init-new.js +454 -454
  557. package/dist/src/self-qa/__tests__/agentic-context.test.d.ts +1 -0
  558. package/dist/src/self-qa/__tests__/agentic-context.test.js +98 -0
  559. package/dist/src/self-qa/__tests__/agentic-loop.test.d.ts +1 -0
  560. package/dist/src/self-qa/__tests__/agentic-loop.test.js +62 -0
  561. package/dist/src/self-qa/__tests__/delta-encoder.test.d.ts +1 -0
  562. package/dist/src/self-qa/__tests__/delta-encoder.test.js +97 -0
  563. package/dist/src/self-qa/__tests__/judge.test.d.ts +1 -0
  564. package/dist/src/self-qa/__tests__/judge.test.js +131 -0
  565. package/dist/src/self-qa/__tests__/scenario-planner.test.d.ts +1 -0
  566. package/dist/src/self-qa/__tests__/scenario-planner.test.js +79 -0
  567. package/dist/src/self-qa/__tests__/spec-emitter.test.d.ts +1 -0
  568. package/dist/src/self-qa/__tests__/spec-emitter.test.js +62 -0
  569. package/dist/src/self-qa/agentic-context.d.ts +29 -0
  570. package/dist/src/self-qa/agentic-context.js +189 -0
  571. package/dist/src/self-qa/agentic-loop.d.ts +96 -0
  572. package/dist/src/self-qa/agentic-loop.js +516 -0
  573. package/dist/src/self-qa/delta-encoder.d.ts +35 -0
  574. package/dist/src/self-qa/delta-encoder.js +138 -0
  575. package/dist/src/self-qa/index.d.ts +43 -0
  576. package/dist/src/self-qa/index.js +65 -0
  577. package/dist/src/self-qa/judge.d.ts +25 -0
  578. package/dist/src/self-qa/judge.js +233 -0
  579. package/dist/src/self-qa/orchestrator.d.ts +31 -0
  580. package/dist/src/self-qa/orchestrator.js +236 -0
  581. package/dist/src/self-qa/scenario-planner.d.ts +39 -0
  582. package/dist/src/self-qa/scenario-planner.js +262 -0
  583. package/dist/src/self-qa/spec-emitter.d.ts +25 -0
  584. package/dist/src/self-qa/spec-emitter.js +138 -0
  585. package/dist/src/self-qa/types.d.ts +113 -0
  586. package/dist/src/self-qa/types.js +11 -0
  587. package/dist/src/storage/__tests__/migrations.test.js +2 -2
  588. package/dist/src/storage/__tests__/sweep-stale-pending.test.d.ts +10 -0
  589. package/dist/src/storage/__tests__/sweep-stale-pending.test.js +97 -0
  590. package/dist/src/storage/__tests__/ui-interaction-log.test.js +30 -0
  591. package/dist/src/storage/atomic-io.test.js +2 -2
  592. package/dist/src/storage/config.test.js +1 -1
  593. package/dist/src/storage/interaction-log.d.ts +1 -1
  594. package/dist/src/storage/interaction-log.js +5 -5
  595. package/dist/src/storage/migrations.js +122 -122
  596. package/dist/src/storage/sessions.js +57 -42
  597. package/dist/src/storage/transcript-response-entry.test.d.ts +1 -0
  598. package/dist/src/storage/transcript-response-entry.test.js +98 -0
  599. package/dist/src/storage/transcript.d.ts +22 -0
  600. package/dist/src/storage/transcript.js +149 -74
  601. package/dist/src/storage/ui-interaction-log.d.ts +11 -1
  602. package/dist/src/storage/usage-cap.test.js +1 -1
  603. package/dist/src/storage/usage.js +14 -14
  604. package/dist/src/storage/workspaces.js +12 -12
  605. package/dist/src/tools/__tests__/vision-gate.test.d.ts +1 -0
  606. package/dist/src/tools/__tests__/vision-gate.test.js +56 -0
  607. package/dist/src/tools/bash-output-cache.d.ts +59 -0
  608. package/dist/src/tools/bash-output-cache.js +108 -0
  609. package/dist/src/tools/bash-output-cache.test.d.ts +1 -0
  610. package/dist/src/tools/bash-output-cache.test.js +89 -0
  611. package/dist/src/tools/bash-output-integration.test.d.ts +10 -0
  612. package/dist/src/tools/bash-output-integration.test.js +30 -0
  613. package/dist/src/tools/bash.d.ts +12 -0
  614. package/dist/src/tools/bash.js +114 -21
  615. package/dist/src/tools/bash.test.js +80 -3
  616. package/dist/src/tools/computer.test.js +1 -1
  617. package/dist/src/tools/file-tracker.test.js +1 -1
  618. package/dist/src/tools/file.js +23 -2
  619. package/dist/src/tools/file.test.js +49 -1
  620. package/dist/src/tools/registry-bash-empty-command.test.d.ts +13 -0
  621. package/dist/src/tools/registry-bash-empty-command.test.js +56 -0
  622. package/dist/src/tools/registry-bash-footer.test.d.ts +7 -0
  623. package/dist/src/tools/registry-bash-footer.test.js +82 -0
  624. package/dist/src/tools/registry-ee-query.test.d.ts +11 -0
  625. package/dist/src/tools/registry-ee-query.test.js +48 -0
  626. package/dist/src/tools/registry-session-repeat.test.d.ts +12 -0
  627. package/dist/src/tools/registry-session-repeat.test.js +87 -0
  628. package/dist/src/tools/registry.d.ts +38 -0
  629. package/dist/src/tools/registry.js +262 -4
  630. package/dist/src/tools/schedule.test.js +1 -1
  631. package/dist/src/tools/todo-write-snapshot.d.ts +18 -0
  632. package/dist/src/tools/todo-write-snapshot.js +66 -0
  633. package/dist/src/tools/todo-write-snapshot.test.d.ts +1 -0
  634. package/dist/src/tools/todo-write-snapshot.test.js +43 -0
  635. package/dist/src/tools/vision-gate.d.ts +41 -0
  636. package/dist/src/tools/vision-gate.js +67 -0
  637. package/dist/src/types/index.d.ts +65 -4
  638. package/dist/src/ui/__tests__/picker-providers.test.d.ts +1 -0
  639. package/dist/src/ui/__tests__/picker-providers.test.js +31 -0
  640. package/dist/src/ui/agents-modal.js +2 -0
  641. package/dist/src/ui/app.d.ts +1 -0
  642. package/dist/src/ui/app.js +0 -0
  643. package/dist/src/ui/components/__tests__/task-list-panel.test.d.ts +1 -0
  644. package/dist/src/ui/components/__tests__/task-list-panel.test.js +31 -0
  645. package/dist/src/ui/components/council-info-card.d.ts +1 -2
  646. package/dist/src/ui/components/council-leader-bubble.d.ts +1 -2
  647. package/dist/src/ui/components/council-message-bubble.d.ts +1 -2
  648. package/dist/src/ui/components/council-phase-timeline.js +20 -1
  649. package/dist/src/ui/components/council-placeholder-bubble.d.ts +1 -2
  650. package/dist/src/ui/components/council-question-card.js +3 -0
  651. package/dist/src/ui/components/council-synthesis-banner.d.ts +1 -2
  652. package/dist/src/ui/components/halt-recovery-card.js +1 -0
  653. package/dist/src/ui/components/message-view.d.ts +11 -1
  654. package/dist/src/ui/components/message-view.js +65 -3
  655. package/dist/src/ui/components/point-to-existing-form-card.js +5 -1
  656. package/dist/src/ui/components/task-list-panel.d.ts +32 -0
  657. package/dist/src/ui/components/task-list-panel.js +84 -0
  658. package/dist/src/ui/components/tool-group.d.ts +22 -0
  659. package/dist/src/ui/components/tool-group.js +85 -0
  660. package/dist/src/ui/hooks/use-agent-editor.js +2 -3
  661. package/dist/src/ui/hooks/use-model-picker.d.ts +2 -2
  662. package/dist/src/ui/modals/model-picker-modal.d.ts +2 -0
  663. package/dist/src/ui/modals/model-picker-modal.js +2 -4
  664. package/dist/src/ui/picker-providers.d.ts +21 -0
  665. package/dist/src/ui/picker-providers.js +39 -0
  666. package/dist/src/ui/slash/__tests__/clear.test.js +1 -1
  667. package/dist/src/ui/slash/__tests__/compact.test.js +1 -1
  668. package/dist/src/ui/slash/__tests__/discuss.test.js +1 -1
  669. package/dist/src/ui/slash/__tests__/execute.test.js +1 -1
  670. package/dist/src/ui/slash/__tests__/expand.test.js +1 -1
  671. package/dist/src/ui/slash/__tests__/ideal.test.js +41 -0
  672. package/dist/src/ui/slash/__tests__/menu-parity.test.d.ts +1 -0
  673. package/dist/src/ui/slash/__tests__/menu-parity.test.js +1 -0
  674. package/dist/src/ui/slash/__tests__/plan.test.js +4 -1
  675. package/dist/src/ui/slash/__tests__/status-render.test.d.ts +7 -0
  676. package/dist/src/ui/slash/__tests__/status-render.test.js +77 -0
  677. package/dist/src/ui/slash/council-inspect.js +4 -4
  678. package/dist/src/ui/slash/export.js +32 -5
  679. package/dist/src/ui/slash/ideal.d.ts +9 -0
  680. package/dist/src/ui/slash/ideal.js +27 -1
  681. package/dist/src/ui/slash/menu-items.js +1 -0
  682. package/dist/src/ui/slash/status.d.ts +12 -0
  683. package/dist/src/ui/slash/status.js +32 -0
  684. package/dist/src/ui/state/active-run.d.ts +26 -0
  685. package/dist/src/ui/state/active-run.js +44 -0
  686. package/dist/src/ui/status-bar/index.d.ts +6 -1
  687. package/dist/src/ui/status-bar/index.js +21 -2
  688. package/dist/src/ui/status-bar/index.test.js +60 -1
  689. package/dist/src/ui/status-bar/store.d.ts +16 -0
  690. package/dist/src/ui/status-bar/store.js +120 -1
  691. package/dist/src/ui/utils/__tests__/format.test.d.ts +1 -0
  692. package/dist/src/ui/utils/__tests__/format.test.js +50 -0
  693. package/dist/src/ui/utils/__tests__/tools.test.d.ts +1 -0
  694. package/dist/src/ui/utils/__tests__/tools.test.js +48 -0
  695. package/dist/src/ui/utils/format.d.ts +17 -0
  696. package/dist/src/ui/utils/format.js +45 -2
  697. package/dist/src/ui/utils/text.js +2 -1
  698. package/dist/src/ui/utils/tools.d.ts +2 -0
  699. package/dist/src/ui/utils/tools.js +58 -9
  700. package/dist/src/usage/__tests__/product-ledger.test.js +5 -4
  701. package/dist/src/usage/decision-log.d.ts +1 -1
  702. package/dist/src/usage/downgrade.d.ts +3 -2
  703. package/dist/src/usage/downgrade.js +25 -9
  704. package/dist/src/usage/downgrade.test.js +40 -37
  705. package/dist/src/usage/product-ledger.d.ts +4 -0
  706. package/dist/src/usage/product-ledger.js +8 -1
  707. package/dist/src/utils/__tests__/llm-deadline.test.d.ts +1 -0
  708. package/dist/src/utils/__tests__/llm-deadline.test.js +56 -0
  709. package/dist/src/utils/__tests__/settings-disabled-models.test.js +1 -1
  710. package/dist/src/utils/__tests__/settings-web-research.test.js +1 -1
  711. package/dist/src/utils/__tests__/visible-retry.test.js +1 -1
  712. package/dist/src/utils/clipboard-image.js +23 -23
  713. package/dist/src/utils/install-manager.test.js +1 -1
  714. package/dist/src/utils/llm-deadline.d.ts +44 -0
  715. package/dist/src/utils/llm-deadline.js +80 -0
  716. package/dist/src/utils/permission-mode.d.ts +16 -9
  717. package/dist/src/utils/permission-mode.js +55 -4
  718. package/dist/src/utils/settings.d.ts +22 -0
  719. package/dist/src/utils/settings.js +47 -6
  720. package/dist/src/utils/shell.d.ts +12 -0
  721. package/dist/src/utils/shell.js +23 -12
  722. package/dist/src/utils/shell.test.js +27 -1
  723. package/dist/src/utils/side-question.js +2 -2
  724. package/dist/src/utils/skills.js +3 -3
  725. package/dist/src/utils/skills.test.js +1 -1
  726. package/dist/src/utils/subagents-settings.test.js +9 -3
  727. package/dist/src/verify/__tests__/coverage-parsers.test.js +30 -30
  728. package/dist/src/verify/__tests__/dotnet-recipe.test.js +1 -1
  729. package/dist/src/verify/checkpoint.test.js +1 -1
  730. package/dist/src/verify/entrypoint.d.ts +8 -8
  731. package/dist/src/verify/entrypoint.js +69 -32
  732. package/dist/src/verify/entrypoint.test.js +1 -1
  733. package/dist/src/verify/environment.test.js +1 -1
  734. package/dist/src/verify/orchestrator.test.js +1 -1
  735. package/dist/src/verify/runtime-prep.test.js +1 -1
  736. package/package.json +125 -122
  737. package/scripts/postinstall.cjs +76 -73
  738. package/dist/packages/agent-harness-core/src/driver.js.map +0 -1
  739. package/dist/packages/agent-harness-core/src/event-filter.js.map +0 -1
  740. package/dist/packages/agent-harness-core/src/event-redact.js.map +0 -1
  741. package/dist/packages/agent-harness-core/src/idle.js.map +0 -1
  742. package/dist/packages/agent-harness-core/src/index.js.map +0 -1
  743. package/dist/packages/agent-harness-core/src/mcp-server.js.map +0 -1
  744. package/dist/packages/agent-harness-core/src/mock-llm.js.map +0 -1
  745. package/dist/packages/agent-harness-core/src/predicate.js.map +0 -1
  746. package/dist/packages/agent-harness-core/src/protocol.js.map +0 -1
  747. package/dist/packages/agent-harness-core/src/registry.js.map +0 -1
  748. package/dist/packages/agent-harness-core/src/selector.js.map +0 -1
  749. package/dist/packages/agent-harness-core/src/spec-helpers.js.map +0 -1
  750. package/dist/packages/agent-harness-core/src/transports/sidechannel.js.map +0 -1
  751. package/dist/packages/agent-harness-core/src/transports/ws.js.map +0 -1
  752. package/dist/packages/agent-harness-opentui/src/agent-mode.js.map +0 -1
  753. package/dist/packages/agent-harness-opentui/src/index.js.map +0 -1
  754. package/dist/packages/agent-harness-opentui/src/input-bridge.js.map +0 -1
  755. package/dist/packages/agent-harness-opentui/src/install.js.map +0 -1
  756. package/dist/packages/agent-harness-opentui/src/reconciler-hook.js.map +0 -1
  757. package/dist/packages/agent-harness-opentui/src/semantic.js.map +0 -1
  758. package/dist/src/__test-stubs__/ee-server.js.map +0 -1
  759. package/dist/src/__test-stubs__/vitest-setup.js.map +0 -1
  760. package/dist/src/__tests__/council/bubble-layout.test.js.map +0 -1
  761. package/dist/src/__tests__/council/code-block-truncate.test.js.map +0 -1
  762. package/dist/src/__tests__/council/role-palette.test.js.map +0 -1
  763. package/dist/src/__tests__/first-run-wizard.test.js.map +0 -1
  764. package/dist/src/agent-harness/__tests__/cli-flags.spec.js.map +0 -1
  765. package/dist/src/agent-harness/__tests__/driver.spec.js.map +0 -1
  766. package/dist/src/agent-harness/__tests__/idle.spec.js.map +0 -1
  767. package/dist/src/agent-harness/__tests__/mock-llm.spec.js.map +0 -1
  768. package/dist/src/agent-harness/__tests__/mock-model.spec.js.map +0 -1
  769. package/dist/src/agent-harness/__tests__/predicate.spec.js.map +0 -1
  770. package/dist/src/agent-harness/__tests__/protocol.spec.js.map +0 -1
  771. package/dist/src/agent-harness/__tests__/schema.spec.js.map +0 -1
  772. package/dist/src/agent-harness/__tests__/selector.spec.js.map +0 -1
  773. package/dist/src/agent-harness/__tests__/sidechannel.spec.js.map +0 -1
  774. package/dist/src/agent-harness/__tests__/spec-helpers.spec.js.map +0 -1
  775. package/dist/src/agent-harness/index.js.map +0 -1
  776. package/dist/src/agent-harness/mock-model.js.map +0 -1
  777. package/dist/src/agent-harness/test-spawn.js.map +0 -1
  778. package/dist/src/billing/index.js.map +0 -1
  779. package/dist/src/chat/__tests__/broadcast-bus.test.js.map +0 -1
  780. package/dist/src/chat/__tests__/channel-manager.test.js.map +0 -1
  781. package/dist/src/chat/__tests__/client.test.js.map +0 -1
  782. package/dist/src/chat/__tests__/discord-integration.test.js.map +0 -1
  783. package/dist/src/chat/__tests__/intent-prompt.test.js.map +0 -1
  784. package/dist/src/chat/__tests__/verdict-resolver.test.js.map +0 -1
  785. package/dist/src/chat/broadcast-bus.js.map +0 -1
  786. package/dist/src/chat/channel-manager.js.map +0 -1
  787. package/dist/src/chat/chat-keychain.js.map +0 -1
  788. package/dist/src/chat/factory.js.map +0 -1
  789. package/dist/src/chat/intent-prompt.js.map +0 -1
  790. package/dist/src/chat/providers/discord/client.js.map +0 -1
  791. package/dist/src/chat/types.js.map +0 -1
  792. package/dist/src/chat/verdict-constants.js.map +0 -1
  793. package/dist/src/chat/verdict-resolver.js.map +0 -1
  794. package/dist/src/cli/__tests__/bw-vault.test.js.map +0 -1
  795. package/dist/src/cli/__tests__/keys-bundle.test.js.map +0 -1
  796. package/dist/src/cli/__tests__/share-cmd.test.js.map +0 -1
  797. package/dist/src/cli/bw-vault.js.map +0 -1
  798. package/dist/src/cli/config/__tests__/model-picker.test.js.map +0 -1
  799. package/dist/src/cli/config/__tests__/provider-fetch.test.js.map +0 -1
  800. package/dist/src/cli/config/index.js.map +0 -1
  801. package/dist/src/cli/config/model-picker.js.map +0 -1
  802. package/dist/src/cli/config/provider-fetch.js.map +0 -1
  803. package/dist/src/cli/config/screen-council.js.map +0 -1
  804. package/dist/src/cli/config/screen-models.js.map +0 -1
  805. package/dist/src/cli/config/screen-providers.js.map +0 -1
  806. package/dist/src/cli/config/tui.js.map +0 -1
  807. package/dist/src/cli/cost-forensics.js.map +0 -1
  808. package/dist/src/cli/cost-forensics.test.js.map +0 -1
  809. package/dist/src/cli/keys-bundle.js.map +0 -1
  810. package/dist/src/cli/keys.js.map +0 -1
  811. package/dist/src/cli/keys.test.js.map +0 -1
  812. package/dist/src/cli/pil-report.js.map +0 -1
  813. package/dist/src/cli/share-cmd.js.map +0 -1
  814. package/dist/src/cli/usage-report.js.map +0 -1
  815. package/dist/src/cloud/index.js.map +0 -1
  816. package/dist/src/council/__tests__/accounting.test.js.map +0 -1
  817. package/dist/src/council/__tests__/audit-replay.test.js.map +0 -1
  818. package/dist/src/council/__tests__/clarifier-max-rounds.test.js.map +0 -1
  819. package/dist/src/council/__tests__/clarifier-options.test.js.map +0 -1
  820. package/dist/src/council/__tests__/cost-aware.test.js.map +0 -1
  821. package/dist/src/council/__tests__/debate-planner-structured.test.js.map +0 -1
  822. package/dist/src/council/__tests__/evaluator-metrics.test.js.map +0 -1
  823. package/dist/src/council/__tests__/parse-outcome-fallback.test.js.map +0 -1
  824. package/dist/src/council/__tests__/research-tools.test.js.map +0 -1
  825. package/dist/src/council/__tests__/round-tools.test.js.map +0 -1
  826. package/dist/src/council/__tests__/tool-trace.test.js.map +0 -1
  827. package/dist/src/council/__tests__/types-contract.test.js.map +0 -1
  828. package/dist/src/council/clarifier.js.map +0 -1
  829. package/dist/src/council/context.js.map +0 -1
  830. package/dist/src/council/debate-planner.js.map +0 -1
  831. package/dist/src/council/debate.js.map +0 -1
  832. package/dist/src/council/executor.js.map +0 -1
  833. package/dist/src/council/index.js.map +0 -1
  834. package/dist/src/council/leader.js.map +0 -1
  835. package/dist/src/council/llm.js.map +0 -1
  836. package/dist/src/council/phase-events.js.map +0 -1
  837. package/dist/src/council/planner.js.map +0 -1
  838. package/dist/src/council/preflight.js.map +0 -1
  839. package/dist/src/council/prompts.js.map +0 -1
  840. package/dist/src/council/types.js.map +0 -1
  841. package/dist/src/daemon/scheduler.js.map +0 -1
  842. package/dist/src/daemon/scheduler.test.js.map +0 -1
  843. package/dist/src/ee/__tests__/bb-design.test.js.map +0 -1
  844. package/dist/src/ee/__tests__/pil-context-bridge.test.js.map +0 -1
  845. package/dist/src/ee/__tests__/pipeline.integration.test.js.map +0 -1
  846. package/dist/src/ee/__tests__/render-sink-wiring.test.js.map +0 -1
  847. package/dist/src/ee/auth.js.map +0 -1
  848. package/dist/src/ee/auth.test.js.map +0 -1
  849. package/dist/src/ee/bb-design.js.map +0 -1
  850. package/dist/src/ee/bb-retrieval.js.map +0 -1
  851. package/dist/src/ee/bridge.js.map +0 -1
  852. package/dist/src/ee/bridge.test.js.map +0 -1
  853. package/dist/src/ee/client-mode.js.map +0 -1
  854. package/dist/src/ee/client.js.map +0 -1
  855. package/dist/src/ee/client.test.js.map +0 -1
  856. package/dist/src/ee/council-bridge.js.map +0 -1
  857. package/dist/src/ee/embedding-cache.js.map +0 -1
  858. package/dist/src/ee/extract-session.js.map +0 -1
  859. package/dist/src/ee/extract-session.test.js.map +0 -1
  860. package/dist/src/ee/health.js.map +0 -1
  861. package/dist/src/ee/index.js.map +0 -1
  862. package/dist/src/ee/intercept.js.map +0 -1
  863. package/dist/src/ee/intercept.test.js.map +0 -1
  864. package/dist/src/ee/judge.js.map +0 -1
  865. package/dist/src/ee/judge.test.js.map +0 -1
  866. package/dist/src/ee/mistake-detector.js.map +0 -1
  867. package/dist/src/ee/mistake-detector.test.js.map +0 -1
  868. package/dist/src/ee/offline-queue.js.map +0 -1
  869. package/dist/src/ee/offline-queue.test.js.map +0 -1
  870. package/dist/src/ee/phase-outcome.js.map +0 -1
  871. package/dist/src/ee/phase-outcome.test.js.map +0 -1
  872. package/dist/src/ee/phase-tracker.js.map +0 -1
  873. package/dist/src/ee/phase-tracker.test.js.map +0 -1
  874. package/dist/src/ee/posttool.js.map +0 -1
  875. package/dist/src/ee/posttool.test.js.map +0 -1
  876. package/dist/src/ee/prompt-stale.js.map +0 -1
  877. package/dist/src/ee/prompt-stale.test.js.map +0 -1
  878. package/dist/src/ee/render.js.map +0 -1
  879. package/dist/src/ee/render.test.js.map +0 -1
  880. package/dist/src/ee/scope.js.map +0 -1
  881. package/dist/src/ee/scope.test.js.map +0 -1
  882. package/dist/src/ee/session-trajectory.js.map +0 -1
  883. package/dist/src/ee/session-trajectory.test.js.map +0 -1
  884. package/dist/src/ee/tenant.js.map +0 -1
  885. package/dist/src/ee/touch.test.js.map +0 -1
  886. package/dist/src/ee/types.js.map +0 -1
  887. package/dist/src/flow/__tests__/migration.test.js.map +0 -1
  888. package/dist/src/flow/__tests__/parser.test.js.map +0 -1
  889. package/dist/src/flow/__tests__/run-manager-product.test.js.map +0 -1
  890. package/dist/src/flow/__tests__/run-manager.test.js.map +0 -1
  891. package/dist/src/flow/__tests__/scaffold-checkpoint.test.js.map +0 -1
  892. package/dist/src/flow/__tests__/scaffold.test.js.map +0 -1
  893. package/dist/src/flow/__tests__/warning-persist.test.js.map +0 -1
  894. package/dist/src/flow/artifact-io.js.map +0 -1
  895. package/dist/src/flow/compaction/__tests__/compress.test.js.map +0 -1
  896. package/dist/src/flow/compaction/__tests__/extract.test.js.map +0 -1
  897. package/dist/src/flow/compaction/__tests__/preserve.test.js.map +0 -1
  898. package/dist/src/flow/compaction/compress.js.map +0 -1
  899. package/dist/src/flow/compaction/extract.js.map +0 -1
  900. package/dist/src/flow/compaction/index.js.map +0 -1
  901. package/dist/src/flow/compaction/preserve.js.map +0 -1
  902. package/dist/src/flow/index.js.map +0 -1
  903. package/dist/src/flow/migration.js.map +0 -1
  904. package/dist/src/flow/parser.js.map +0 -1
  905. package/dist/src/flow/run-manager.js.map +0 -1
  906. package/dist/src/flow/scaffold-checkpoint.js.map +0 -1
  907. package/dist/src/flow/scaffold.js.map +0 -1
  908. package/dist/src/flow/warning-persist.js.map +0 -1
  909. package/dist/src/generated/version.js.map +0 -1
  910. package/dist/src/gsd/__tests__/complexity.test.js.map +0 -1
  911. package/dist/src/gsd/__tests__/directives.test.js.map +0 -1
  912. package/dist/src/gsd/__tests__/gray-areas.test.js.map +0 -1
  913. package/dist/src/gsd/__tests__/types.test.js.map +0 -1
  914. package/dist/src/gsd/complexity.js.map +0 -1
  915. package/dist/src/gsd/directives.js.map +0 -1
  916. package/dist/src/gsd/gray-areas.js.map +0 -1
  917. package/dist/src/gsd/index.js.map +0 -1
  918. package/dist/src/gsd/types.js.map +0 -1
  919. package/dist/src/headless/__tests__/council-answers.test.js.map +0 -1
  920. package/dist/src/headless/council-answers.js.map +0 -1
  921. package/dist/src/headless/output.js.map +0 -1
  922. package/dist/src/headless/output.test.js.map +0 -1
  923. package/dist/src/hooks/config.js.map +0 -1
  924. package/dist/src/hooks/index.js.map +0 -1
  925. package/dist/src/hooks/types.js.map +0 -1
  926. package/dist/src/index.js.map +0 -1
  927. package/dist/src/lsp/builtins.js.map +0 -1
  928. package/dist/src/lsp/builtins.test.js.map +0 -1
  929. package/dist/src/lsp/client.js.map +0 -1
  930. package/dist/src/lsp/manager.js.map +0 -1
  931. package/dist/src/lsp/manager.test.js.map +0 -1
  932. package/dist/src/lsp/npm-cache.js.map +0 -1
  933. package/dist/src/lsp/npm-cache.test.js.map +0 -1
  934. package/dist/src/lsp/runtime.js.map +0 -1
  935. package/dist/src/lsp/smoke.test.js.map +0 -1
  936. package/dist/src/lsp/types.js.map +0 -1
  937. package/dist/src/mcp/__tests__/auto-setup.test.js.map +0 -1
  938. package/dist/src/mcp/__tests__/harness-driver-action-tools.spec.js.map +0 -1
  939. package/dist/src/mcp/__tests__/harness-driver-async-tools.spec.js.map +0 -1
  940. package/dist/src/mcp/__tests__/harness-driver-read-tools.spec.js.map +0 -1
  941. package/dist/src/mcp/__tests__/harness-driver-security.spec.js.map +0 -1
  942. package/dist/src/mcp/__tests__/harness-driver.spec.js.map +0 -1
  943. package/dist/src/mcp/__tests__/lazy-schema.spec.js.map +0 -1
  944. package/dist/src/mcp/__tests__/mcp-keychain.test.js.map +0 -1
  945. package/dist/src/mcp/__tests__/research-onboarding.test.js.map +0 -1
  946. package/dist/src/mcp/__tests__/runtime-hydration.test.js.map +0 -1
  947. package/dist/src/mcp/__tests__/runtime-sanitize.test.js.map +0 -1
  948. package/dist/src/mcp/auto-setup.js.map +0 -1
  949. package/dist/src/mcp/catalog.js.map +0 -1
  950. package/dist/src/mcp/mcp-keychain.js.map +0 -1
  951. package/dist/src/mcp/oauth-callback.js.map +0 -1
  952. package/dist/src/mcp/oauth-provider.js.map +0 -1
  953. package/dist/src/mcp/opentui-spawn.js.map +0 -1
  954. package/dist/src/mcp/parse-headers.js.map +0 -1
  955. package/dist/src/mcp/parse-headers.test.js.map +0 -1
  956. package/dist/src/mcp/research-onboarding.js.map +0 -1
  957. package/dist/src/mcp/runtime.js.map +0 -1
  958. package/dist/src/mcp/smoke.test.js.map +0 -1
  959. package/dist/src/mcp/validate.js.map +0 -1
  960. package/dist/src/models/__tests__/registry.test.js.map +0 -1
  961. package/dist/src/models/catalog-client.js.map +0 -1
  962. package/dist/src/models/classify-tier.js.map +0 -1
  963. package/dist/src/models/index.js.map +0 -1
  964. package/dist/src/models/registry.js.map +0 -1
  965. package/dist/src/ops/__tests__/doctor-council-mcp.test.js.map +0 -1
  966. package/dist/src/ops/__tests__/doctor-ee-health.test.js.map +0 -1
  967. package/dist/src/ops/bug-report.js.map +0 -1
  968. package/dist/src/ops/bug-report.test.js.map +0 -1
  969. package/dist/src/ops/doctor.js.map +0 -1
  970. package/dist/src/ops/doctor.test.js.map +0 -1
  971. package/dist/src/orchestrator/__tests__/batch-turn-runner.test.js.map +0 -1
  972. package/dist/src/orchestrator/__tests__/council-manager.test.js.map +0 -1
  973. package/dist/src/orchestrator/__tests__/cross-turn-dedup.test.js.map +0 -1
  974. package/dist/src/orchestrator/__tests__/current-call-id.test.js.map +0 -1
  975. package/dist/src/orchestrator/__tests__/flow-resume.test.js.map +0 -1
  976. package/dist/src/orchestrator/__tests__/message-processor.test.js.map +0 -1
  977. package/dist/src/orchestrator/__tests__/message-write-ahead.test.js.map +0 -1
  978. package/dist/src/orchestrator/__tests__/read-path-budget.test.js.map +0 -1
  979. package/dist/src/orchestrator/__tests__/retry-classifier.test.js.map +0 -1
  980. package/dist/src/orchestrator/__tests__/retry-stream.test.js.map +0 -1
  981. package/dist/src/orchestrator/__tests__/route-feedback.test.js.map +0 -1
  982. package/dist/src/orchestrator/__tests__/stream-runner.test.js.map +0 -1
  983. package/dist/src/orchestrator/__tests__/usage-events-shape.test.js.map +0 -1
  984. package/dist/src/orchestrator/__tests__/usage-normalizer-c1.test.js.map +0 -1
  985. package/dist/src/orchestrator/__tests__/write-ahead.test.js.map +0 -1
  986. package/dist/src/orchestrator/abort.js.map +0 -1
  987. package/dist/src/orchestrator/abort.test.js.map +0 -1
  988. package/dist/src/orchestrator/agent-options.js.map +0 -1
  989. package/dist/src/orchestrator/agent.test.js.map +0 -1
  990. package/dist/src/orchestrator/batch-turn-runner.js.map +0 -1
  991. package/dist/src/orchestrator/batch-utils.js.map +0 -1
  992. package/dist/src/orchestrator/cleanup.test.js.map +0 -1
  993. package/dist/src/orchestrator/compaction.js.map +0 -1
  994. package/dist/src/orchestrator/compaction.test.js.map +0 -1
  995. package/dist/src/orchestrator/council-manager.js.map +0 -1
  996. package/dist/src/orchestrator/cross-turn-dedup.js.map +0 -1
  997. package/dist/src/orchestrator/delegations.js.map +0 -1
  998. package/dist/src/orchestrator/delegations.test.js.map +0 -1
  999. package/dist/src/orchestrator/error-utils.js.map +0 -1
  1000. package/dist/src/orchestrator/flow-resume.js.map +0 -1
  1001. package/dist/src/orchestrator/message-processor.js.map +0 -1
  1002. package/dist/src/orchestrator/message-seq.js.map +0 -1
  1003. package/dist/src/orchestrator/message-seq.test.js.map +0 -1
  1004. package/dist/src/orchestrator/orchestrator.js.map +0 -1
  1005. package/dist/src/orchestrator/pending-calls.js.map +0 -1
  1006. package/dist/src/orchestrator/pending-calls.test.js.map +0 -1
  1007. package/dist/src/orchestrator/prompts.js.map +0 -1
  1008. package/dist/src/orchestrator/provider-options-shape.js.map +0 -1
  1009. package/dist/src/orchestrator/provider-options-shape.spec.js.map +0 -1
  1010. package/dist/src/orchestrator/read-path-budget.js.map +0 -1
  1011. package/dist/src/orchestrator/reasoning.js.map +0 -1
  1012. package/dist/src/orchestrator/reasoning.test.js.map +0 -1
  1013. package/dist/src/orchestrator/retry-classifier.js.map +0 -1
  1014. package/dist/src/orchestrator/retry-stream.js.map +0 -1
  1015. package/dist/src/orchestrator/sandbox.test.js.map +0 -1
  1016. package/dist/src/orchestrator/stream-runner.js.map +0 -1
  1017. package/dist/src/orchestrator/sub-agent-cap.js.map +0 -1
  1018. package/dist/src/orchestrator/sub-agent-cap.test.js.map +0 -1
  1019. package/dist/src/orchestrator/subagent-compactor.js.map +0 -1
  1020. package/dist/src/orchestrator/subagent-compactor.spec.js.map +0 -1
  1021. package/dist/src/orchestrator/token-counter.js.map +0 -1
  1022. package/dist/src/orchestrator/token-counter.test.js.map +0 -1
  1023. package/dist/src/orchestrator/tool-utils.js.map +0 -1
  1024. package/dist/src/orchestrator/turn-runner-deps.js.map +0 -1
  1025. package/dist/src/pil/__tests__/budget.test.js.map +0 -1
  1026. package/dist/src/pil/__tests__/config.test.js.map +0 -1
  1027. package/dist/src/pil/__tests__/dual-run.test.js.map +0 -1
  1028. package/dist/src/pil/__tests__/layer1-intent-trace.test.js.map +0 -1
  1029. package/dist/src/pil/__tests__/layer1-intent.test.js.map +0 -1
  1030. package/dist/src/pil/__tests__/layer2-personality.test.js.map +0 -1
  1031. package/dist/src/pil/__tests__/layer3-ee-injection.test.js.map +0 -1
  1032. package/dist/src/pil/__tests__/layer3-injected-chunk.test.js.map +0 -1
  1033. package/dist/src/pil/__tests__/layer4-gsd.test.js.map +0 -1
  1034. package/dist/src/pil/__tests__/layer5-context.test.js.map +0 -1
  1035. package/dist/src/pil/__tests__/layer6-output.test.js.map +0 -1
  1036. package/dist/src/pil/__tests__/ollama-classify.test.js.map +0 -1
  1037. package/dist/src/pil/__tests__/orchestrator-integration.test.js.map +0 -1
  1038. package/dist/src/pil/__tests__/pipeline.test.js.map +0 -1
  1039. package/dist/src/pil/__tests__/renderer-coverage.test.js.map +0 -1
  1040. package/dist/src/pil/__tests__/response-tools.test.js.map +0 -1
  1041. package/dist/src/pil/__tests__/schema.test.js.map +0 -1
  1042. package/dist/src/pil/__tests__/scoreComplexity.test.js.map +0 -1
  1043. package/dist/src/pil/__tests__/scoreSufficiency.test.js.map +0 -1
  1044. package/dist/src/pil/__tests__/store.test.js.map +0 -1
  1045. package/dist/src/pil/__tests__/task-tier-map.test.js.map +0 -1
  1046. package/dist/src/pil/budget-log.js.map +0 -1
  1047. package/dist/src/pil/budget.js.map +0 -1
  1048. package/dist/src/pil/config.js.map +0 -1
  1049. package/dist/src/pil/index.js.map +0 -1
  1050. package/dist/src/pil/layer1-intent.js.map +0 -1
  1051. package/dist/src/pil/layer1-intent.test.js.map +0 -1
  1052. package/dist/src/pil/layer2-personality.js.map +0 -1
  1053. package/dist/src/pil/layer3-ee-injection.js.map +0 -1
  1054. package/dist/src/pil/layer4-gsd.js.map +0 -1
  1055. package/dist/src/pil/layer5-context.js.map +0 -1
  1056. package/dist/src/pil/layer6-output.js.map +0 -1
  1057. package/dist/src/pil/ollama-classify.js.map +0 -1
  1058. package/dist/src/pil/pipeline.js.map +0 -1
  1059. package/dist/src/pil/response-tools.js.map +0 -1
  1060. package/dist/src/pil/schema.js.map +0 -1
  1061. package/dist/src/pil/store.js.map +0 -1
  1062. package/dist/src/pil/task-tier-map.js.map +0 -1
  1063. package/dist/src/pil/timeout.js.map +0 -1
  1064. package/dist/src/pil/types.js.map +0 -1
  1065. package/dist/src/product-loop/__tests__/artifact-io.test.js.map +0 -1
  1066. package/dist/src/product-loop/__tests__/assumption-ledger.test.js.map +0 -1
  1067. package/dist/src/product-loop/__tests__/cb2-retry-bonus.test.js.map +0 -1
  1068. package/dist/src/product-loop/__tests__/circuit-breakers-coverage.test.js.map +0 -1
  1069. package/dist/src/product-loop/__tests__/circuit-breakers.test.js.map +0 -1
  1070. package/dist/src/product-loop/__tests__/complexity-routing.spec.js.map +0 -1
  1071. package/dist/src/product-loop/__tests__/context-policy.test.js.map +0 -1
  1072. package/dist/src/product-loop/__tests__/cost-preview.test.js.map +0 -1
  1073. package/dist/src/product-loop/__tests__/cost-scoper.test.js.map +0 -1
  1074. package/dist/src/product-loop/__tests__/cross-run-memory.test.js.map +0 -1
  1075. package/dist/src/product-loop/__tests__/design-output.spec.js.map +0 -1
  1076. package/dist/src/product-loop/__tests__/discover.test.js.map +0 -1
  1077. package/dist/src/product-loop/__tests__/discovery-council-runner.test.js.map +0 -1
  1078. package/dist/src/product-loop/__tests__/discovery-detection.test.js.map +0 -1
  1079. package/dist/src/product-loop/__tests__/discovery-ecosystem.test.js.map +0 -1
  1080. package/dist/src/product-loop/__tests__/discovery-integration.test.js.map +0 -1
  1081. package/dist/src/product-loop/__tests__/discovery-interview.test.js.map +0 -1
  1082. package/dist/src/product-loop/__tests__/discovery-migrations.test.js.map +0 -1
  1083. package/dist/src/product-loop/__tests__/discovery-persistence.test.js.map +0 -1
  1084. package/dist/src/product-loop/__tests__/discovery-prompt-parser.test.js.map +0 -1
  1085. package/dist/src/product-loop/__tests__/discovery-recommender-ecosystem.test.js.map +0 -1
  1086. package/dist/src/product-loop/__tests__/discovery-recommender.test.js.map +0 -1
  1087. package/dist/src/product-loop/__tests__/discovery-schema.test.js.map +0 -1
  1088. package/dist/src/product-loop/__tests__/done-gate-coverage.test.js.map +0 -1
  1089. package/dist/src/product-loop/__tests__/done-gate.test.js.map +0 -1
  1090. package/dist/src/product-loop/__tests__/ee-extract-wiring.test.js.map +0 -1
  1091. package/dist/src/product-loop/__tests__/extract-to-ee.test.js.map +0 -1
  1092. package/dist/src/product-loop/__tests__/feedback-routing.test.js.map +0 -1
  1093. package/dist/src/product-loop/__tests__/hot-path.spec.js.map +0 -1
  1094. package/dist/src/product-loop/__tests__/integration.test.js.map +0 -1
  1095. package/dist/src/product-loop/__tests__/loop-driver-audit.test.js.map +0 -1
  1096. package/dist/src/product-loop/__tests__/loop-driver.test.js.map +0 -1
  1097. package/dist/src/product-loop/__tests__/phase-budget.test.js.map +0 -1
  1098. package/dist/src/product-loop/__tests__/phase-orchestrator-integration.test.js.map +0 -1
  1099. package/dist/src/product-loop/__tests__/phase-plan.test.js.map +0 -1
  1100. package/dist/src/product-loop/__tests__/phase-rituals.test.js.map +0 -1
  1101. package/dist/src/product-loop/__tests__/phase-runner.test.js.map +0 -1
  1102. package/dist/src/product-loop/__tests__/phase-tracker-bridge.test.js.map +0 -1
  1103. package/dist/src/product-loop/__tests__/product-identity.test.js.map +0 -1
  1104. package/dist/src/product-loop/__tests__/reality-anchor.test.js.map +0 -1
  1105. package/dist/src/product-loop/__tests__/repo-audit.test.js.map +0 -1
  1106. package/dist/src/product-loop/__tests__/role-memory.test.js.map +0 -1
  1107. package/dist/src/product-loop/__tests__/role-registry.test.js.map +0 -1
  1108. package/dist/src/product-loop/__tests__/role-routing-ee.test.js.map +0 -1
  1109. package/dist/src/product-loop/__tests__/route-decision-emit.test.js.map +0 -1
  1110. package/dist/src/product-loop/__tests__/seed-questions.test.js.map +0 -1
  1111. package/dist/src/product-loop/__tests__/ship-polish.test.js.map +0 -1
  1112. package/dist/src/product-loop/__tests__/sprint-runner-emit.test.js.map +0 -1
  1113. package/dist/src/product-loop/__tests__/sprint-runner.test.js.map +0 -1
  1114. package/dist/src/product-loop/__tests__/stakeholder-acl.test.js.map +0 -1
  1115. package/dist/src/product-loop/__tests__/state-md-ee-injections.test.js.map +0 -1
  1116. package/dist/src/product-loop/__tests__/sufficiency-routing.spec.js.map +0 -1
  1117. package/dist/src/product-loop/__tests__/typed-artifacts.test.js.map +0 -1
  1118. package/dist/src/product-loop/__tests__/types.test.js.map +0 -1
  1119. package/dist/src/product-loop/__tests__/verify-failure-threshold.test.js.map +0 -1
  1120. package/dist/src/product-loop/__tests__/verify-failure-tracking.test.js.map +0 -1
  1121. package/dist/src/product-loop/__tests__/verify-result.test.js.map +0 -1
  1122. package/dist/src/product-loop/artifact-io.js.map +0 -1
  1123. package/dist/src/product-loop/assumption-ledger.js.map +0 -1
  1124. package/dist/src/product-loop/circuit-breakers.js.map +0 -1
  1125. package/dist/src/product-loop/context-policy.js.map +0 -1
  1126. package/dist/src/product-loop/cost-preview.js.map +0 -1
  1127. package/dist/src/product-loop/cost-scoper.js.map +0 -1
  1128. package/dist/src/product-loop/cross-run-memory.js.map +0 -1
  1129. package/dist/src/product-loop/design-output.js.map +0 -1
  1130. package/dist/src/product-loop/discover.js.map +0 -1
  1131. package/dist/src/product-loop/discovery-context-format.js.map +0 -1
  1132. package/dist/src/product-loop/discovery-council-runner.js.map +0 -1
  1133. package/dist/src/product-loop/discovery-detection.js.map +0 -1
  1134. package/dist/src/product-loop/discovery-ecosystem.js.map +0 -1
  1135. package/dist/src/product-loop/discovery-interview.js.map +0 -1
  1136. package/dist/src/product-loop/discovery-migrations.js.map +0 -1
  1137. package/dist/src/product-loop/discovery-persistence.js.map +0 -1
  1138. package/dist/src/product-loop/discovery-prompt-parser.js.map +0 -1
  1139. package/dist/src/product-loop/discovery-recommender.js.map +0 -1
  1140. package/dist/src/product-loop/discovery-schema.js.map +0 -1
  1141. package/dist/src/product-loop/done-gate.js.map +0 -1
  1142. package/dist/src/product-loop/feedback-routing.js.map +0 -1
  1143. package/dist/src/product-loop/gather.js.map +0 -1
  1144. package/dist/src/product-loop/index.js.map +0 -1
  1145. package/dist/src/product-loop/loop-driver.js.map +0 -1
  1146. package/dist/src/product-loop/phase-budget.js.map +0 -1
  1147. package/dist/src/product-loop/phase-plan.js.map +0 -1
  1148. package/dist/src/product-loop/phase-rituals.js.map +0 -1
  1149. package/dist/src/product-loop/phase-runner.js.map +0 -1
  1150. package/dist/src/product-loop/phase-tracker-bridge.js.map +0 -1
  1151. package/dist/src/product-loop/product-identity.js.map +0 -1
  1152. package/dist/src/product-loop/reality-anchor.js.map +0 -1
  1153. package/dist/src/product-loop/repo-audit.js.map +0 -1
  1154. package/dist/src/product-loop/role-memory.js.map +0 -1
  1155. package/dist/src/product-loop/role-registry.js.map +0 -1
  1156. package/dist/src/product-loop/seed-questions.js.map +0 -1
  1157. package/dist/src/product-loop/ship-polish.js.map +0 -1
  1158. package/dist/src/product-loop/sprint-runner.js.map +0 -1
  1159. package/dist/src/product-loop/stakeholder-acl.js.map +0 -1
  1160. package/dist/src/product-loop/typed-artifacts.js.map +0 -1
  1161. package/dist/src/product-loop/types.js.map +0 -1
  1162. package/dist/src/product-loop/verify-failure-tracking.js.map +0 -1
  1163. package/dist/src/product-loop/verify-result.js.map +0 -1
  1164. package/dist/src/providers/__test-utils__/load-fixture.js.map +0 -1
  1165. package/dist/src/providers/__tests__/adapter-oauth-wiring.test.js.map +0 -1
  1166. package/dist/src/providers/__tests__/capabilities-cosmetic.test.js.map +0 -1
  1167. package/dist/src/providers/__tests__/capabilities-flags.test.js.map +0 -1
  1168. package/dist/src/providers/__tests__/capabilities-provider-options.test.js.map +0 -1
  1169. package/dist/src/providers/__tests__/capabilities-sanitize.test.js.map +0 -1
  1170. package/dist/src/providers/__tests__/capabilities.test.js.map +0 -1
  1171. package/dist/src/providers/__tests__/provider-coverage.test.js.map +0 -1
  1172. package/dist/src/providers/__tests__/runtime-integration.test.js.map +0 -1
  1173. package/dist/src/providers/__tests__/runtime.test.js.map +0 -1
  1174. package/dist/src/providers/__tests__/siliconflow-history.test.js +0 -76
  1175. package/dist/src/providers/__tests__/siliconflow-history.test.js.map +0 -1
  1176. package/dist/src/providers/__tests__/strategies-registry.test.js.map +0 -1
  1177. package/dist/src/providers/__tests__/strategies-resolve.test.js.map +0 -1
  1178. package/dist/src/providers/__tests__/wire-debug.test.js.map +0 -1
  1179. package/dist/src/providers/adapter.js.map +0 -1
  1180. package/dist/src/providers/adapter.test.js.map +0 -1
  1181. package/dist/src/providers/anthropic.js.map +0 -1
  1182. package/dist/src/providers/auth/__tests__/browser-flow.test.js.map +0 -1
  1183. package/dist/src/providers/auth/__tests__/device-flow.test.js.map +0 -1
  1184. package/dist/src/providers/auth/__tests__/gemini-oauth.test.js.map +0 -1
  1185. package/dist/src/providers/auth/__tests__/openai-oauth.test.js.map +0 -1
  1186. package/dist/src/providers/auth/__tests__/token-store.test.js.map +0 -1
  1187. package/dist/src/providers/auth/browser-flow.js.map +0 -1
  1188. package/dist/src/providers/auth/device-flow.js.map +0 -1
  1189. package/dist/src/providers/auth/gemini-oauth.js.map +0 -1
  1190. package/dist/src/providers/auth/openai-oauth.js.map +0 -1
  1191. package/dist/src/providers/auth/registry.js.map +0 -1
  1192. package/dist/src/providers/auth/token-store.js.map +0 -1
  1193. package/dist/src/providers/auth/types.js.map +0 -1
  1194. package/dist/src/providers/capabilities.js.map +0 -1
  1195. package/dist/src/providers/endpoints.js.map +0 -1
  1196. package/dist/src/providers/errors.js.map +0 -1
  1197. package/dist/src/providers/errors.test.js.map +0 -1
  1198. package/dist/src/providers/gemini.js.map +0 -1
  1199. package/dist/src/providers/gemini.test.js.map +0 -1
  1200. package/dist/src/providers/index.js.map +0 -1
  1201. package/dist/src/providers/keychain.js.map +0 -1
  1202. package/dist/src/providers/keychain.test.js.map +0 -1
  1203. package/dist/src/providers/mcp-vision-bridge.js.map +0 -1
  1204. package/dist/src/providers/mcp-vision-bridge.test.js.map +0 -1
  1205. package/dist/src/providers/ollama.js.map +0 -1
  1206. package/dist/src/providers/ollama.test.js.map +0 -1
  1207. package/dist/src/providers/openai-compatible.js.map +0 -1
  1208. package/dist/src/providers/openai-compatible.test.js.map +0 -1
  1209. package/dist/src/providers/openai.js.map +0 -1
  1210. package/dist/src/providers/openai.test.js.map +0 -1
  1211. package/dist/src/providers/patch-zod-schema.js.map +0 -1
  1212. package/dist/src/providers/pricing.js.map +0 -1
  1213. package/dist/src/providers/pricing.test.js.map +0 -1
  1214. package/dist/src/providers/prompt-cache-key.spec.js.map +0 -1
  1215. package/dist/src/providers/runtime-mock.spec.js.map +0 -1
  1216. package/dist/src/providers/runtime.js.map +0 -1
  1217. package/dist/src/providers/siliconflow-history.d.ts +0 -50
  1218. package/dist/src/providers/siliconflow-history.js +0 -64
  1219. package/dist/src/providers/siliconflow-history.js.map +0 -1
  1220. package/dist/src/providers/strategies/anthropic.strategy.js.map +0 -1
  1221. package/dist/src/providers/strategies/base.strategy.js.map +0 -1
  1222. package/dist/src/providers/strategies/deepseek.strategy.js.map +0 -1
  1223. package/dist/src/providers/strategies/google.strategy.js.map +0 -1
  1224. package/dist/src/providers/strategies/ollama.strategy.js.map +0 -1
  1225. package/dist/src/providers/strategies/openai.strategy.js.map +0 -1
  1226. package/dist/src/providers/strategies/registry.js.map +0 -1
  1227. package/dist/src/providers/strategies/siliconflow.strategy.js.map +0 -1
  1228. package/dist/src/providers/strategies/xai.strategy.js.map +0 -1
  1229. package/dist/src/providers/stream-loop.js.map +0 -1
  1230. package/dist/src/providers/types.js.map +0 -1
  1231. package/dist/src/providers/vision-proxy.js.map +0 -1
  1232. package/dist/src/providers/vision-proxy.test.js.map +0 -1
  1233. package/dist/src/providers/wire-debug.js.map +0 -1
  1234. package/dist/src/router/__tests__/step-router.test.js.map +0 -1
  1235. package/dist/src/router/classifier/grammars.js.map +0 -1
  1236. package/dist/src/router/classifier/index.js.map +0 -1
  1237. package/dist/src/router/classifier/index.test.js.map +0 -1
  1238. package/dist/src/router/classifier/regex.js.map +0 -1
  1239. package/dist/src/router/classifier/regex.test.js.map +0 -1
  1240. package/dist/src/router/classifier/tree-sitter.js.map +0 -1
  1241. package/dist/src/router/classifier/tree-sitter.test.js.map +0 -1
  1242. package/dist/src/router/cold.js.map +0 -1
  1243. package/dist/src/router/cold.test.js.map +0 -1
  1244. package/dist/src/router/decide.js.map +0 -1
  1245. package/dist/src/router/decide.test.js.map +0 -1
  1246. package/dist/src/router/health.js.map +0 -1
  1247. package/dist/src/router/health.test.js.map +0 -1
  1248. package/dist/src/router/provider-sentinel.js.map +0 -1
  1249. package/dist/src/router/provider-sentinel.test.js.map +0 -1
  1250. package/dist/src/router/step-router.js.map +0 -1
  1251. package/dist/src/router/store.js.map +0 -1
  1252. package/dist/src/router/types.js.map +0 -1
  1253. package/dist/src/router/warm.js.map +0 -1
  1254. package/dist/src/router/warm.test.js.map +0 -1
  1255. package/dist/src/scaffold/__tests__/continuation-prompt.test.js.map +0 -1
  1256. package/dist/src/scaffold/__tests__/continue-as-council.spec.js.map +0 -1
  1257. package/dist/src/scaffold/__tests__/dotnet-assembly-name.test.js.map +0 -1
  1258. package/dist/src/scaffold/__tests__/fe-scaffold-contents.test.js.map +0 -1
  1259. package/dist/src/scaffold/__tests__/init-new.smoke.spec.js.map +0 -1
  1260. package/dist/src/scaffold/__tests__/init-new.spec.js.map +0 -1
  1261. package/dist/src/scaffold/__tests__/install-bb-templates.spec.js.map +0 -1
  1262. package/dist/src/scaffold/__tests__/point-to-existing.spec.js.map +0 -1
  1263. package/dist/src/scaffold/bb-ecosystem-apply.js.map +0 -1
  1264. package/dist/src/scaffold/bb-quality-gate.js.map +0 -1
  1265. package/dist/src/scaffold/continuation-prompt.js.map +0 -1
  1266. package/dist/src/scaffold/continue-as-council.js.map +0 -1
  1267. package/dist/src/scaffold/init-new.js.map +0 -1
  1268. package/dist/src/scaffold/point-to-existing.js.map +0 -1
  1269. package/dist/src/scaffold/resume-from-gate-failures.js.map +0 -1
  1270. package/dist/src/storage/__tests__/migrations.test.js.map +0 -1
  1271. package/dist/src/storage/__tests__/ui-interaction-log.test.js.map +0 -1
  1272. package/dist/src/storage/atomic-io.js.map +0 -1
  1273. package/dist/src/storage/atomic-io.test.js.map +0 -1
  1274. package/dist/src/storage/config.js.map +0 -1
  1275. package/dist/src/storage/config.test.js.map +0 -1
  1276. package/dist/src/storage/db.js.map +0 -1
  1277. package/dist/src/storage/index.js.map +0 -1
  1278. package/dist/src/storage/interaction-log.js.map +0 -1
  1279. package/dist/src/storage/migrations.js.map +0 -1
  1280. package/dist/src/storage/session-dir.js.map +0 -1
  1281. package/dist/src/storage/sessions.js.map +0 -1
  1282. package/dist/src/storage/tool-results.js.map +0 -1
  1283. package/dist/src/storage/transcript-view.js.map +0 -1
  1284. package/dist/src/storage/transcript.js.map +0 -1
  1285. package/dist/src/storage/transcript.test.js.map +0 -1
  1286. package/dist/src/storage/ui-interaction-log.js.map +0 -1
  1287. package/dist/src/storage/usage-cap.js.map +0 -1
  1288. package/dist/src/storage/usage-cap.test.js.map +0 -1
  1289. package/dist/src/storage/usage.js.map +0 -1
  1290. package/dist/src/storage/workspaces.js.map +0 -1
  1291. package/dist/src/tools/bash.js.map +0 -1
  1292. package/dist/src/tools/bash.test.js.map +0 -1
  1293. package/dist/src/tools/computer.js.map +0 -1
  1294. package/dist/src/tools/computer.test.js.map +0 -1
  1295. package/dist/src/tools/file-tracker.js.map +0 -1
  1296. package/dist/src/tools/file-tracker.test.js.map +0 -1
  1297. package/dist/src/tools/file.js.map +0 -1
  1298. package/dist/src/tools/file.test.js.map +0 -1
  1299. package/dist/src/tools/grep.js.map +0 -1
  1300. package/dist/src/tools/registry.js.map +0 -1
  1301. package/dist/src/tools/registry.test.js.map +0 -1
  1302. package/dist/src/tools/schedule.js.map +0 -1
  1303. package/dist/src/tools/schedule.test.js.map +0 -1
  1304. package/dist/src/types/index.js.map +0 -1
  1305. package/dist/src/ui/agents-modal.js.map +0 -1
  1306. package/dist/src/ui/app.js.map +0 -1
  1307. package/dist/src/ui/cards/__tests__/product-status-card.test.js.map +0 -1
  1308. package/dist/src/ui/cards/product-status-card.js.map +0 -1
  1309. package/dist/src/ui/components/SuggestionOverlay.js.map +0 -1
  1310. package/dist/src/ui/components/Toast.js.map +0 -1
  1311. package/dist/src/ui/components/__tests__/council-leader-bubble.test.js.map +0 -1
  1312. package/dist/src/ui/components/__tests__/council-message-bubble.test.js.map +0 -1
  1313. package/dist/src/ui/components/__tests__/council-phase-timeline.test.js.map +0 -1
  1314. package/dist/src/ui/components/__tests__/council-placeholder-bubble.test.js.map +0 -1
  1315. package/dist/src/ui/components/__tests__/council-question-card.test.js.map +0 -1
  1316. package/dist/src/ui/components/__tests__/council-synthesis-banner.test.js.map +0 -1
  1317. package/dist/src/ui/components/__tests__/use-pair-quote-buffer.test.js.map +0 -1
  1318. package/dist/src/ui/components/btw-overlay.js.map +0 -1
  1319. package/dist/src/ui/components/bubble-layout.js.map +0 -1
  1320. package/dist/src/ui/components/code-block-truncate.js.map +0 -1
  1321. package/dist/src/ui/components/copy-flash-banner.js.map +0 -1
  1322. package/dist/src/ui/components/council-info-card.js.map +0 -1
  1323. package/dist/src/ui/components/council-leader-bubble.js.map +0 -1
  1324. package/dist/src/ui/components/council-message-bubble.js.map +0 -1
  1325. package/dist/src/ui/components/council-phase-timeline.js.map +0 -1
  1326. package/dist/src/ui/components/council-placeholder-bubble.js.map +0 -1
  1327. package/dist/src/ui/components/council-question-card.js.map +0 -1
  1328. package/dist/src/ui/components/council-status-list.js.map +0 -1
  1329. package/dist/src/ui/components/council-synthesis-banner.js.map +0 -1
  1330. package/dist/src/ui/components/diff-view.js.map +0 -1
  1331. package/dist/src/ui/components/halt-recovery-card.js.map +0 -1
  1332. package/dist/src/ui/components/hero-logo.js.map +0 -1
  1333. package/dist/src/ui/components/init-new-form-card.js.map +0 -1
  1334. package/dist/src/ui/components/lsp-views.js.map +0 -1
  1335. package/dist/src/ui/components/media-views.js.map +0 -1
  1336. package/dist/src/ui/components/message-view.js.map +0 -1
  1337. package/dist/src/ui/components/point-to-existing-form-card.js.map +0 -1
  1338. package/dist/src/ui/components/prompt-box.js.map +0 -1
  1339. package/dist/src/ui/components/role-palette.js.map +0 -1
  1340. package/dist/src/ui/components/session-header.js.map +0 -1
  1341. package/dist/src/ui/components/slash-inline-menu.js.map +0 -1
  1342. package/dist/src/ui/components/structured-response-view.js.map +0 -1
  1343. package/dist/src/ui/components/tool-result-views.js.map +0 -1
  1344. package/dist/src/ui/components/use-pair-quote-buffer.js.map +0 -1
  1345. package/dist/src/ui/constants.js.map +0 -1
  1346. package/dist/src/ui/hooks/use-agent-editor.js.map +0 -1
  1347. package/dist/src/ui/hooks/use-mcp-editor.js.map +0 -1
  1348. package/dist/src/ui/hooks/use-model-picker.js.map +0 -1
  1349. package/dist/src/ui/hooks/useTypeahead.js.map +0 -1
  1350. package/dist/src/ui/markdown.js.map +0 -1
  1351. package/dist/src/ui/mcp-modal-types.js.map +0 -1
  1352. package/dist/src/ui/mcp-modal.js.map +0 -1
  1353. package/dist/src/ui/modals/api-key-modal.js.map +0 -1
  1354. package/dist/src/ui/modals/connect-modal.js.map +0 -1
  1355. package/dist/src/ui/modals/model-picker-modal.js.map +0 -1
  1356. package/dist/src/ui/modals/sandbox-picker-modal.js.map +0 -1
  1357. package/dist/src/ui/modals/update-modal.js.map +0 -1
  1358. package/dist/src/ui/modals/wallet-picker-modal.js.map +0 -1
  1359. package/dist/src/ui/plan.js.map +0 -1
  1360. package/dist/src/ui/schedule-modal.js.map +0 -1
  1361. package/dist/src/ui/slash/__tests__/clear.test.js.map +0 -1
  1362. package/dist/src/ui/slash/__tests__/compact.test.js.map +0 -1
  1363. package/dist/src/ui/slash/__tests__/cost.test.js.map +0 -1
  1364. package/dist/src/ui/slash/__tests__/discuss.test.js.map +0 -1
  1365. package/dist/src/ui/slash/__tests__/execute.test.js.map +0 -1
  1366. package/dist/src/ui/slash/__tests__/expand.test.js.map +0 -1
  1367. package/dist/src/ui/slash/__tests__/ideal.test.js.map +0 -1
  1368. package/dist/src/ui/slash/__tests__/menu-parity.test.js.map +0 -1
  1369. package/dist/src/ui/slash/__tests__/optimize.test.js.map +0 -1
  1370. package/dist/src/ui/slash/__tests__/pin.test.js.map +0 -1
  1371. package/dist/src/ui/slash/__tests__/plan.test.js.map +0 -1
  1372. package/dist/src/ui/slash/clear.js.map +0 -1
  1373. package/dist/src/ui/slash/compact.js.map +0 -1
  1374. package/dist/src/ui/slash/cost.js.map +0 -1
  1375. package/dist/src/ui/slash/council-inspect.js.map +0 -1
  1376. package/dist/src/ui/slash/council.js.map +0 -1
  1377. package/dist/src/ui/slash/debug.js.map +0 -1
  1378. package/dist/src/ui/slash/discuss.js.map +0 -1
  1379. package/dist/src/ui/slash/ee.js.map +0 -1
  1380. package/dist/src/ui/slash/execute.js.map +0 -1
  1381. package/dist/src/ui/slash/expand.js.map +0 -1
  1382. package/dist/src/ui/slash/export.js.map +0 -1
  1383. package/dist/src/ui/slash/ideal.js.map +0 -1
  1384. package/dist/src/ui/slash/menu-items.js.map +0 -1
  1385. package/dist/src/ui/slash/optimize.js.map +0 -1
  1386. package/dist/src/ui/slash/pin.js.map +0 -1
  1387. package/dist/src/ui/slash/plan.js.map +0 -1
  1388. package/dist/src/ui/slash/registry.js.map +0 -1
  1389. package/dist/src/ui/slash/route.js.map +0 -1
  1390. package/dist/src/ui/slash/route.test.js.map +0 -1
  1391. package/dist/src/ui/status-bar/index.js.map +0 -1
  1392. package/dist/src/ui/status-bar/index.test.js.map +0 -1
  1393. package/dist/src/ui/status-bar/store.js.map +0 -1
  1394. package/dist/src/ui/status-bar/store.test.js.map +0 -1
  1395. package/dist/src/ui/status-bar/tier-badge.js.map +0 -1
  1396. package/dist/src/ui/status-bar/tier-badge.test.js.map +0 -1
  1397. package/dist/src/ui/status-bar/usd-meter.js.map +0 -1
  1398. package/dist/src/ui/status-bar/usd-meter.test.js.map +0 -1
  1399. package/dist/src/ui/syntax-highlight.js.map +0 -1
  1400. package/dist/src/ui/terminal-selection-text.js.map +0 -1
  1401. package/dist/src/ui/theme.js.map +0 -1
  1402. package/dist/src/ui/types.js.map +0 -1
  1403. package/dist/src/ui/utils/color.js.map +0 -1
  1404. package/dist/src/ui/utils/format.js.map +0 -1
  1405. package/dist/src/ui/utils/modal.js.map +0 -1
  1406. package/dist/src/ui/utils/text.js.map +0 -1
  1407. package/dist/src/ui/utils/tools.js.map +0 -1
  1408. package/dist/src/usage/__tests__/product-ledger.test.js.map +0 -1
  1409. package/dist/src/usage/cost-log.js.map +0 -1
  1410. package/dist/src/usage/decision-log.js.map +0 -1
  1411. package/dist/src/usage/downgrade.js.map +0 -1
  1412. package/dist/src/usage/downgrade.test.js.map +0 -1
  1413. package/dist/src/usage/estimator.js.map +0 -1
  1414. package/dist/src/usage/estimator.test.js.map +0 -1
  1415. package/dist/src/usage/ledger.js.map +0 -1
  1416. package/dist/src/usage/ledger.test.js.map +0 -1
  1417. package/dist/src/usage/midstream.js.map +0 -1
  1418. package/dist/src/usage/midstream.test.js.map +0 -1
  1419. package/dist/src/usage/product-ledger.js.map +0 -1
  1420. package/dist/src/usage/thresholds.js.map +0 -1
  1421. package/dist/src/usage/thresholds.test.js.map +0 -1
  1422. package/dist/src/usage/types.js.map +0 -1
  1423. package/dist/src/utils/__tests__/auto-council-settings.test.js.map +0 -1
  1424. package/dist/src/utils/__tests__/ee-logger.test.js.map +0 -1
  1425. package/dist/src/utils/__tests__/file-lock.test.js.map +0 -1
  1426. package/dist/src/utils/__tests__/rate-limit.test.js.map +0 -1
  1427. package/dist/src/utils/__tests__/settings-disabled-models.test.js.map +0 -1
  1428. package/dist/src/utils/__tests__/settings-web-research.test.js.map +0 -1
  1429. package/dist/src/utils/__tests__/slugify.test.js.map +0 -1
  1430. package/dist/src/utils/__tests__/visible-retry.test.js.map +0 -1
  1431. package/dist/src/utils/at-mentions.js.map +0 -1
  1432. package/dist/src/utils/clipboard-image.js.map +0 -1
  1433. package/dist/src/utils/ee-logger.js.map +0 -1
  1434. package/dist/src/utils/file-index.js.map +0 -1
  1435. package/dist/src/utils/file-lock.js.map +0 -1
  1436. package/dist/src/utils/git-root.js.map +0 -1
  1437. package/dist/src/utils/host-clipboard.js.map +0 -1
  1438. package/dist/src/utils/install-manager.js.map +0 -1
  1439. package/dist/src/utils/install-manager.test.js.map +0 -1
  1440. package/dist/src/utils/instructions.js.map +0 -1
  1441. package/dist/src/utils/instructions.test.js.map +0 -1
  1442. package/dist/src/utils/permission-mode.js.map +0 -1
  1443. package/dist/src/utils/permission-mode.test.js.map +0 -1
  1444. package/dist/src/utils/rate-limit.js.map +0 -1
  1445. package/dist/src/utils/redactor.js.map +0 -1
  1446. package/dist/src/utils/redactor.test.js.map +0 -1
  1447. package/dist/src/utils/settings.js.map +0 -1
  1448. package/dist/src/utils/settings.test.js.map +0 -1
  1449. package/dist/src/utils/shell.js.map +0 -1
  1450. package/dist/src/utils/shell.test.js.map +0 -1
  1451. package/dist/src/utils/side-question.js.map +0 -1
  1452. package/dist/src/utils/skills.js.map +0 -1
  1453. package/dist/src/utils/skills.test.js.map +0 -1
  1454. package/dist/src/utils/slugify.js.map +0 -1
  1455. package/dist/src/utils/subagent-display.js.map +0 -1
  1456. package/dist/src/utils/subagent-display.test.js.map +0 -1
  1457. package/dist/src/utils/subagents-settings.test.js.map +0 -1
  1458. package/dist/src/utils/telegram-audio-settings.test.js.map +0 -1
  1459. package/dist/src/utils/update-checker.js.map +0 -1
  1460. package/dist/src/utils/update-checker.test.js.map +0 -1
  1461. package/dist/src/utils/visible-retry.js.map +0 -1
  1462. package/dist/src/verify/__tests__/coverage-parsers.test.js.map +0 -1
  1463. package/dist/src/verify/__tests__/dotnet-recipe.test.js.map +0 -1
  1464. package/dist/src/verify/checkpoint.js.map +0 -1
  1465. package/dist/src/verify/checkpoint.test.js.map +0 -1
  1466. package/dist/src/verify/coverage-parsers.js.map +0 -1
  1467. package/dist/src/verify/entrypoint.js.map +0 -1
  1468. package/dist/src/verify/entrypoint.test.js.map +0 -1
  1469. package/dist/src/verify/environment.js.map +0 -1
  1470. package/dist/src/verify/environment.test.js.map +0 -1
  1471. package/dist/src/verify/evidence.js.map +0 -1
  1472. package/dist/src/verify/orchestrator.js.map +0 -1
  1473. package/dist/src/verify/orchestrator.test.js.map +0 -1
  1474. package/dist/src/verify/recipes.js.map +0 -1
  1475. package/dist/src/verify/retry.js.map +0 -1
  1476. package/dist/src/verify/runtime-prep.test.js.map +0 -1
  1477. package/src/__test-stubs__/ee-server.ts +0 -173
  1478. package/src/__test-stubs__/vitest-setup.ts +0 -36
  1479. package/src/__tests__/council/bubble-layout.test.ts +0 -45
  1480. package/src/__tests__/council/code-block-truncate.test.ts +0 -50
  1481. package/src/__tests__/council/role-palette.test.ts +0 -66
  1482. package/src/__tests__/first-run-wizard.test.ts +0 -9
  1483. package/src/agent-harness/__tests__/cli-flags.spec.ts +0 -35
  1484. package/src/agent-harness/__tests__/driver.spec.ts +0 -154
  1485. package/src/agent-harness/__tests__/idle.spec.ts +0 -90
  1486. package/src/agent-harness/__tests__/mock-llm.spec.ts +0 -126
  1487. package/src/agent-harness/__tests__/mock-model.spec.ts +0 -195
  1488. package/src/agent-harness/__tests__/predicate.spec.ts +0 -33
  1489. package/src/agent-harness/__tests__/protocol.spec.ts +0 -62
  1490. package/src/agent-harness/__tests__/schema.spec.ts +0 -81
  1491. package/src/agent-harness/__tests__/selector.spec.ts +0 -82
  1492. package/src/agent-harness/__tests__/sidechannel.spec.ts +0 -40
  1493. package/src/agent-harness/__tests__/spec-helpers.spec.ts +0 -76
  1494. package/src/agent-harness/index.ts +0 -24
  1495. package/src/agent-harness/mock-model.ts +0 -394
  1496. package/src/agent-harness/test-spawn.ts +0 -200
  1497. package/src/billing/index.ts +0 -5
  1498. package/src/bun-sqlite.d.ts +0 -15
  1499. package/src/chat/__tests__/broadcast-bus.test.ts +0 -90
  1500. package/src/chat/__tests__/channel-manager.test.ts +0 -149
  1501. package/src/chat/__tests__/client.test.ts +0 -118
  1502. package/src/chat/__tests__/discord-integration.test.ts +0 -162
  1503. package/src/chat/__tests__/intent-prompt.test.ts +0 -92
  1504. package/src/chat/__tests__/verdict-resolver.test.ts +0 -336
  1505. package/src/chat/broadcast-bus.ts +0 -53
  1506. package/src/chat/channel-manager.ts +0 -146
  1507. package/src/chat/chat-keychain.ts +0 -129
  1508. package/src/chat/factory.ts +0 -37
  1509. package/src/chat/intent-prompt.ts +0 -72
  1510. package/src/chat/providers/discord/client.ts +0 -91
  1511. package/src/chat/types.ts +0 -42
  1512. package/src/chat/verdict-constants.ts +0 -26
  1513. package/src/chat/verdict-resolver.ts +0 -231
  1514. package/src/cli/__tests__/bw-vault.test.ts +0 -97
  1515. package/src/cli/__tests__/keys-bundle.test.ts +0 -46
  1516. package/src/cli/__tests__/share-cmd.test.ts +0 -197
  1517. package/src/cli/bw-vault.ts +0 -184
  1518. package/src/cli/config/__tests__/model-picker.test.ts +0 -59
  1519. package/src/cli/config/__tests__/provider-fetch.test.ts +0 -38
  1520. package/src/cli/config/index.ts +0 -112
  1521. package/src/cli/config/model-picker.ts +0 -193
  1522. package/src/cli/config/provider-fetch.ts +0 -75
  1523. package/src/cli/config/screen-council.ts +0 -245
  1524. package/src/cli/config/screen-models.ts +0 -104
  1525. package/src/cli/config/screen-providers.ts +0 -197
  1526. package/src/cli/config/tui.ts +0 -153
  1527. package/src/cli/cost-forensics.test.ts +0 -128
  1528. package/src/cli/cost-forensics.ts +0 -264
  1529. package/src/cli/keys-bundle.ts +0 -91
  1530. package/src/cli/keys.test.ts +0 -104
  1531. package/src/cli/keys.ts +0 -787
  1532. package/src/cli/pil-report.ts +0 -202
  1533. package/src/cli/share-cmd.ts +0 -132
  1534. package/src/cli/usage-report.ts +0 -266
  1535. package/src/cloud/index.ts +0 -5
  1536. package/src/council/__tests__/accounting.test.ts +0 -72
  1537. package/src/council/__tests__/audit-replay.test.ts +0 -344
  1538. package/src/council/__tests__/clarifier-max-rounds.test.ts +0 -91
  1539. package/src/council/__tests__/clarifier-options.test.ts +0 -63
  1540. package/src/council/__tests__/cost-aware.test.ts +0 -60
  1541. package/src/council/__tests__/debate-planner-structured.test.ts +0 -236
  1542. package/src/council/__tests__/evaluator-metrics.test.ts +0 -513
  1543. package/src/council/__tests__/parse-outcome-fallback.test.ts +0 -125
  1544. package/src/council/__tests__/research-tools.test.ts +0 -239
  1545. package/src/council/__tests__/round-tools.test.ts +0 -334
  1546. package/src/council/__tests__/tool-trace.test.ts +0 -152
  1547. package/src/council/__tests__/types-contract.test.ts +0 -88
  1548. package/src/council/clarifier.ts +0 -409
  1549. package/src/council/context.ts +0 -250
  1550. package/src/council/debate-planner.ts +0 -264
  1551. package/src/council/debate.ts +0 -1179
  1552. package/src/council/executor.ts +0 -27
  1553. package/src/council/index.ts +0 -916
  1554. package/src/council/leader.ts +0 -262
  1555. package/src/council/llm.ts +0 -967
  1556. package/src/council/phase-events.ts +0 -58
  1557. package/src/council/planner.ts +0 -303
  1558. package/src/council/preflight.ts +0 -86
  1559. package/src/council/prompts.ts +0 -600
  1560. package/src/council/types.ts +0 -286
  1561. package/src/daemon/scheduler.test.ts +0 -128
  1562. package/src/daemon/scheduler.ts +0 -152
  1563. package/src/ee/.gitkeep +0 -0
  1564. package/src/ee/__tests__/bb-design.test.ts +0 -223
  1565. package/src/ee/__tests__/pil-context-bridge.test.ts +0 -59
  1566. package/src/ee/__tests__/pipeline.integration.test.ts +0 -193
  1567. package/src/ee/__tests__/render-sink-wiring.test.ts +0 -89
  1568. package/src/ee/auth.test.ts +0 -76
  1569. package/src/ee/auth.ts +0 -80
  1570. package/src/ee/bb-design.ts +0 -284
  1571. package/src/ee/bb-retrieval.ts +0 -467
  1572. package/src/ee/bridge.test.ts +0 -283
  1573. package/src/ee/bridge.ts +0 -443
  1574. package/src/ee/client-mode.ts +0 -161
  1575. package/src/ee/client.test.ts +0 -171
  1576. package/src/ee/client.ts +0 -620
  1577. package/src/ee/council-bridge.ts +0 -89
  1578. package/src/ee/embedding-cache.ts +0 -42
  1579. package/src/ee/extract-session.test.ts +0 -231
  1580. package/src/ee/extract-session.ts +0 -71
  1581. package/src/ee/health.ts +0 -83
  1582. package/src/ee/index.ts +0 -33
  1583. package/src/ee/intercept.test.ts +0 -197
  1584. package/src/ee/intercept.ts +0 -143
  1585. package/src/ee/judge.test.ts +0 -213
  1586. package/src/ee/judge.ts +0 -126
  1587. package/src/ee/mistake-detector.test.ts +0 -252
  1588. package/src/ee/mistake-detector.ts +0 -297
  1589. package/src/ee/offline-queue.test.ts +0 -302
  1590. package/src/ee/offline-queue.ts +0 -205
  1591. package/src/ee/phase-outcome.test.ts +0 -107
  1592. package/src/ee/phase-outcome.ts +0 -165
  1593. package/src/ee/phase-tracker.test.ts +0 -175
  1594. package/src/ee/phase-tracker.ts +0 -180
  1595. package/src/ee/posttool.test.ts +0 -81
  1596. package/src/ee/posttool.ts +0 -16
  1597. package/src/ee/prompt-stale.test.ts +0 -92
  1598. package/src/ee/prompt-stale.ts +0 -39
  1599. package/src/ee/render.test.ts +0 -74
  1600. package/src/ee/render.ts +0 -68
  1601. package/src/ee/scope.test.ts +0 -112
  1602. package/src/ee/scope.ts +0 -93
  1603. package/src/ee/session-trajectory.test.ts +0 -139
  1604. package/src/ee/session-trajectory.ts +0 -226
  1605. package/src/ee/tenant.ts +0 -14
  1606. package/src/ee/touch.test.ts +0 -73
  1607. package/src/ee/types.ts +0 -387
  1608. package/src/flow/.gitkeep +0 -0
  1609. package/src/flow/__tests__/migration.test.ts +0 -133
  1610. package/src/flow/__tests__/parser.test.ts +0 -77
  1611. package/src/flow/__tests__/run-manager-product.test.ts +0 -59
  1612. package/src/flow/__tests__/run-manager.test.ts +0 -95
  1613. package/src/flow/__tests__/scaffold-checkpoint.test.ts +0 -113
  1614. package/src/flow/__tests__/scaffold.test.ts +0 -57
  1615. package/src/flow/__tests__/warning-persist.test.ts +0 -112
  1616. package/src/flow/artifact-io.ts +0 -41
  1617. package/src/flow/compaction/__tests__/compress.test.ts +0 -69
  1618. package/src/flow/compaction/__tests__/extract.test.ts +0 -74
  1619. package/src/flow/compaction/__tests__/preserve.test.ts +0 -69
  1620. package/src/flow/compaction/compress.ts +0 -67
  1621. package/src/flow/compaction/extract.ts +0 -60
  1622. package/src/flow/compaction/index.ts +0 -86
  1623. package/src/flow/compaction/preserve.ts +0 -48
  1624. package/src/flow/index.ts +0 -18
  1625. package/src/flow/migration.ts +0 -139
  1626. package/src/flow/parser.ts +0 -78
  1627. package/src/flow/run-manager.ts +0 -162
  1628. package/src/flow/scaffold-checkpoint.ts +0 -132
  1629. package/src/flow/scaffold.ts +0 -52
  1630. package/src/flow/warning-persist.ts +0 -84
  1631. package/src/generated/version.ts +0 -4
  1632. package/src/gsd/.gitkeep +0 -0
  1633. package/src/gsd/__tests__/complexity.test.ts +0 -0
  1634. package/src/gsd/__tests__/directives.test.ts +0 -49
  1635. package/src/gsd/__tests__/gray-areas.test.ts +0 -33
  1636. package/src/gsd/__tests__/types.test.ts +0 -77
  1637. package/src/gsd/complexity.ts +0 -124
  1638. package/src/gsd/directives.ts +0 -94
  1639. package/src/gsd/gray-areas.ts +0 -144
  1640. package/src/gsd/index.ts +0 -1
  1641. package/src/gsd/types.ts +0 -49
  1642. package/src/headless/__tests__/council-answers.test.ts +0 -266
  1643. package/src/headless/council-answers.ts +0 -130
  1644. package/src/headless/output.test.ts +0 -201
  1645. package/src/headless/output.ts +0 -312
  1646. package/src/hooks/config.ts +0 -41
  1647. package/src/hooks/index.ts +0 -547
  1648. package/src/hooks/types.ts +0 -263
  1649. package/src/index.ts +0 -1570
  1650. package/src/lsp/builtins.test.ts +0 -104
  1651. package/src/lsp/builtins.ts +0 -409
  1652. package/src/lsp/client.ts +0 -342
  1653. package/src/lsp/manager.test.ts +0 -164
  1654. package/src/lsp/manager.ts +0 -293
  1655. package/src/lsp/npm-cache.test.ts +0 -68
  1656. package/src/lsp/npm-cache.ts +0 -108
  1657. package/src/lsp/runtime.ts +0 -70
  1658. package/src/lsp/smoke.test.ts +0 -74
  1659. package/src/lsp/types.ts +0 -116
  1660. package/src/mcp/__tests__/auto-setup.test.ts +0 -88
  1661. package/src/mcp/__tests__/harness-driver-action-tools.spec.ts +0 -114
  1662. package/src/mcp/__tests__/harness-driver-async-tools.spec.ts +0 -127
  1663. package/src/mcp/__tests__/harness-driver-read-tools.spec.ts +0 -140
  1664. package/src/mcp/__tests__/harness-driver-security.spec.ts +0 -71
  1665. package/src/mcp/__tests__/harness-driver.spec.ts +0 -21
  1666. package/src/mcp/__tests__/lazy-schema.spec.ts +0 -173
  1667. package/src/mcp/__tests__/mcp-keychain.test.ts +0 -46
  1668. package/src/mcp/__tests__/research-onboarding.test.ts +0 -163
  1669. package/src/mcp/__tests__/runtime-hydration.test.ts +0 -86
  1670. package/src/mcp/__tests__/runtime-sanitize.test.ts +0 -44
  1671. package/src/mcp/auto-setup.ts +0 -99
  1672. package/src/mcp/catalog.ts +0 -155
  1673. package/src/mcp/mcp-keychain.ts +0 -77
  1674. package/src/mcp/oauth-callback.ts +0 -75
  1675. package/src/mcp/oauth-provider.ts +0 -128
  1676. package/src/mcp/opentui-spawn.ts +0 -64
  1677. package/src/mcp/parse-headers.test.ts +0 -54
  1678. package/src/mcp/parse-headers.ts +0 -35
  1679. package/src/mcp/research-onboarding.ts +0 -143
  1680. package/src/mcp/runtime.ts +0 -171
  1681. package/src/mcp/smoke.test.ts +0 -170
  1682. package/src/mcp/validate.ts +0 -48
  1683. package/src/models/__tests__/registry.test.ts +0 -95
  1684. package/src/models/catalog-client.ts +0 -140
  1685. package/src/models/catalog.README.md +0 -136
  1686. package/src/models/catalog.json +0 -177
  1687. package/src/models/classify-tier.ts +0 -48
  1688. package/src/models/index.ts +0 -9
  1689. package/src/models/registry.ts +0 -77
  1690. package/src/ops/__tests__/doctor-council-mcp.test.ts +0 -161
  1691. package/src/ops/__tests__/doctor-ee-health.test.ts +0 -129
  1692. package/src/ops/bug-report.test.ts +0 -172
  1693. package/src/ops/bug-report.ts +0 -80
  1694. package/src/ops/doctor.test.ts +0 -108
  1695. package/src/ops/doctor.ts +0 -366
  1696. package/src/orchestrator/__tests__/batch-turn-runner.test.ts +0 -178
  1697. package/src/orchestrator/__tests__/council-manager.test.ts +0 -171
  1698. package/src/orchestrator/__tests__/cross-turn-dedup.test.ts +0 -174
  1699. package/src/orchestrator/__tests__/current-call-id.test.ts +0 -160
  1700. package/src/orchestrator/__tests__/flow-resume.test.ts +0 -71
  1701. package/src/orchestrator/__tests__/message-processor.test.ts +0 -196
  1702. package/src/orchestrator/__tests__/message-write-ahead.test.ts +0 -170
  1703. package/src/orchestrator/__tests__/read-path-budget.test.ts +0 -107
  1704. package/src/orchestrator/__tests__/retry-classifier.test.ts +0 -120
  1705. package/src/orchestrator/__tests__/retry-stream.test.ts +0 -186
  1706. package/src/orchestrator/__tests__/route-feedback.test.ts +0 -55
  1707. package/src/orchestrator/__tests__/stream-runner.test.ts +0 -123
  1708. package/src/orchestrator/__tests__/usage-events-shape.test.ts +0 -80
  1709. package/src/orchestrator/__tests__/usage-normalizer-c1.test.ts +0 -172
  1710. package/src/orchestrator/__tests__/write-ahead.test.ts +0 -162
  1711. package/src/orchestrator/abort.test.ts +0 -37
  1712. package/src/orchestrator/abort.ts +0 -51
  1713. package/src/orchestrator/agent-options.ts +0 -168
  1714. package/src/orchestrator/agent.test.ts +0 -184
  1715. package/src/orchestrator/batch-turn-runner.ts +0 -425
  1716. package/src/orchestrator/batch-utils.ts +0 -340
  1717. package/src/orchestrator/cleanup.test.ts +0 -86
  1718. package/src/orchestrator/compaction.test.ts +0 -181
  1719. package/src/orchestrator/compaction.ts +0 -613
  1720. package/src/orchestrator/council-manager.ts +0 -580
  1721. package/src/orchestrator/cross-turn-dedup.ts +0 -187
  1722. package/src/orchestrator/delegations.test.ts +0 -145
  1723. package/src/orchestrator/delegations.ts +0 -364
  1724. package/src/orchestrator/error-utils.ts +0 -72
  1725. package/src/orchestrator/flow-resume.ts +0 -54
  1726. package/src/orchestrator/message-processor.ts +0 -1985
  1727. package/src/orchestrator/message-seq.test.ts +0 -29
  1728. package/src/orchestrator/message-seq.ts +0 -19
  1729. package/src/orchestrator/orchestrator.ts +0 -2641
  1730. package/src/orchestrator/pending-calls.test.ts +0 -226
  1731. package/src/orchestrator/pending-calls.ts +0 -240
  1732. package/src/orchestrator/prompts.ts +0 -482
  1733. package/src/orchestrator/provider-options-shape.spec.ts +0 -67
  1734. package/src/orchestrator/provider-options-shape.ts +0 -70
  1735. package/src/orchestrator/read-path-budget.ts +0 -128
  1736. package/src/orchestrator/reasoning.test.ts +0 -29
  1737. package/src/orchestrator/reasoning.ts +0 -69
  1738. package/src/orchestrator/retry-classifier.ts +0 -131
  1739. package/src/orchestrator/retry-stream.ts +0 -159
  1740. package/src/orchestrator/sandbox.test.ts +0 -115
  1741. package/src/orchestrator/stream-runner.ts +0 -729
  1742. package/src/orchestrator/sub-agent-cap.test.ts +0 -186
  1743. package/src/orchestrator/sub-agent-cap.ts +0 -218
  1744. package/src/orchestrator/subagent-compactor.spec.ts +0 -144
  1745. package/src/orchestrator/subagent-compactor.ts +0 -242
  1746. package/src/orchestrator/token-counter.test.ts +0 -69
  1747. package/src/orchestrator/token-counter.ts +0 -81
  1748. package/src/orchestrator/tool-utils.ts +0 -214
  1749. package/src/orchestrator/turn-runner-deps.ts +0 -83
  1750. package/src/pil/__tests__/budget.test.ts +0 -39
  1751. package/src/pil/__tests__/config.test.ts +0 -32
  1752. package/src/pil/__tests__/dual-run.test.ts +0 -53
  1753. package/src/pil/__tests__/layer1-intent-trace.test.ts +0 -140
  1754. package/src/pil/__tests__/layer1-intent.test.ts +0 -346
  1755. package/src/pil/__tests__/layer2-personality.test.ts +0 -63
  1756. package/src/pil/__tests__/layer3-ee-injection.test.ts +0 -181
  1757. package/src/pil/__tests__/layer3-injected-chunk.test.ts +0 -122
  1758. package/src/pil/__tests__/layer4-gsd.test.ts +0 -109
  1759. package/src/pil/__tests__/layer5-context.test.ts +0 -157
  1760. package/src/pil/__tests__/layer6-output.test.ts +0 -284
  1761. package/src/pil/__tests__/ollama-classify.test.ts +0 -81
  1762. package/src/pil/__tests__/orchestrator-integration.test.ts +0 -107
  1763. package/src/pil/__tests__/pipeline.test.ts +0 -190
  1764. package/src/pil/__tests__/renderer-coverage.test.ts +0 -46
  1765. package/src/pil/__tests__/response-tools.test.ts +0 -174
  1766. package/src/pil/__tests__/schema.test.ts +0 -233
  1767. package/src/pil/__tests__/scoreComplexity.test.ts +0 -134
  1768. package/src/pil/__tests__/scoreSufficiency.test.ts +0 -104
  1769. package/src/pil/__tests__/store.test.ts +0 -49
  1770. package/src/pil/__tests__/task-tier-map.test.ts +0 -41
  1771. package/src/pil/budget-log.ts +0 -86
  1772. package/src/pil/budget.ts +0 -18
  1773. package/src/pil/config.ts +0 -11
  1774. package/src/pil/index.ts +0 -12
  1775. package/src/pil/layer1-intent.test.ts +0 -127
  1776. package/src/pil/layer1-intent.ts +0 -580
  1777. package/src/pil/layer2-personality.ts +0 -46
  1778. package/src/pil/layer3-ee-injection.ts +0 -345
  1779. package/src/pil/layer4-gsd.ts +0 -118
  1780. package/src/pil/layer5-context.ts +0 -160
  1781. package/src/pil/layer6-output.ts +0 -260
  1782. package/src/pil/ollama-classify.ts +0 -49
  1783. package/src/pil/pipeline.ts +0 -207
  1784. package/src/pil/response-tools.ts +0 -110
  1785. package/src/pil/schema.ts +0 -103
  1786. package/src/pil/store.ts +0 -29
  1787. package/src/pil/task-tier-map.ts +0 -90
  1788. package/src/pil/timeout.ts +0 -10
  1789. package/src/pil/types.ts +0 -150
  1790. package/src/product-loop/__tests__/artifact-io.test.ts +0 -97
  1791. package/src/product-loop/__tests__/assumption-ledger.test.ts +0 -292
  1792. package/src/product-loop/__tests__/cb2-retry-bonus.test.ts +0 -182
  1793. package/src/product-loop/__tests__/circuit-breakers-coverage.test.ts +0 -82
  1794. package/src/product-loop/__tests__/circuit-breakers.test.ts +0 -90
  1795. package/src/product-loop/__tests__/complexity-routing.spec.ts +0 -169
  1796. package/src/product-loop/__tests__/context-policy.test.ts +0 -280
  1797. package/src/product-loop/__tests__/cost-preview.test.ts +0 -118
  1798. package/src/product-loop/__tests__/cost-scoper.test.ts +0 -76
  1799. package/src/product-loop/__tests__/cross-run-memory.test.ts +0 -195
  1800. package/src/product-loop/__tests__/design-output.spec.ts +0 -39
  1801. package/src/product-loop/__tests__/discover.test.ts +0 -98
  1802. package/src/product-loop/__tests__/discovery-council-runner.test.ts +0 -13
  1803. package/src/product-loop/__tests__/discovery-detection.test.ts +0 -180
  1804. package/src/product-loop/__tests__/discovery-ecosystem.test.ts +0 -132
  1805. package/src/product-loop/__tests__/discovery-integration.test.ts +0 -133
  1806. package/src/product-loop/__tests__/discovery-interview.test.ts +0 -305
  1807. package/src/product-loop/__tests__/discovery-migrations.test.ts +0 -75
  1808. package/src/product-loop/__tests__/discovery-persistence.test.ts +0 -171
  1809. package/src/product-loop/__tests__/discovery-prompt-parser.test.ts +0 -77
  1810. package/src/product-loop/__tests__/discovery-recommender-ecosystem.test.ts +0 -94
  1811. package/src/product-loop/__tests__/discovery-recommender.test.ts +0 -382
  1812. package/src/product-loop/__tests__/discovery-schema.test.ts +0 -102
  1813. package/src/product-loop/__tests__/done-gate-coverage.test.ts +0 -151
  1814. package/src/product-loop/__tests__/done-gate.test.ts +0 -140
  1815. package/src/product-loop/__tests__/ee-extract-wiring.test.ts +0 -216
  1816. package/src/product-loop/__tests__/extract-to-ee.test.ts +0 -205
  1817. package/src/product-loop/__tests__/feedback-routing.test.ts +0 -93
  1818. package/src/product-loop/__tests__/hot-path.spec.ts +0 -177
  1819. package/src/product-loop/__tests__/integration.test.ts +0 -344
  1820. package/src/product-loop/__tests__/loop-driver-audit.test.ts +0 -321
  1821. package/src/product-loop/__tests__/loop-driver.test.ts +0 -247
  1822. package/src/product-loop/__tests__/phase-budget.test.ts +0 -172
  1823. package/src/product-loop/__tests__/phase-orchestrator-integration.test.ts +0 -143
  1824. package/src/product-loop/__tests__/phase-plan.test.ts +0 -241
  1825. package/src/product-loop/__tests__/phase-rituals.test.ts +0 -211
  1826. package/src/product-loop/__tests__/phase-runner.test.ts +0 -454
  1827. package/src/product-loop/__tests__/phase-tracker-bridge.test.ts +0 -85
  1828. package/src/product-loop/__tests__/product-identity.test.ts +0 -47
  1829. package/src/product-loop/__tests__/reality-anchor.test.ts +0 -58
  1830. package/src/product-loop/__tests__/repo-audit.test.ts +0 -103
  1831. package/src/product-loop/__tests__/role-memory.test.ts +0 -70
  1832. package/src/product-loop/__tests__/role-registry.test.ts +0 -235
  1833. package/src/product-loop/__tests__/role-routing-ee.test.ts +0 -90
  1834. package/src/product-loop/__tests__/route-decision-emit.test.ts +0 -207
  1835. package/src/product-loop/__tests__/seed-questions.test.ts +0 -33
  1836. package/src/product-loop/__tests__/ship-polish.test.ts +0 -109
  1837. package/src/product-loop/__tests__/sprint-runner-emit.test.ts +0 -324
  1838. package/src/product-loop/__tests__/sprint-runner.test.ts +0 -501
  1839. package/src/product-loop/__tests__/stakeholder-acl.test.ts +0 -94
  1840. package/src/product-loop/__tests__/state-md-ee-injections.test.ts +0 -229
  1841. package/src/product-loop/__tests__/sufficiency-routing.spec.ts +0 -177
  1842. package/src/product-loop/__tests__/typed-artifacts.test.ts +0 -261
  1843. package/src/product-loop/__tests__/types.test.ts +0 -103
  1844. package/src/product-loop/__tests__/verify-failure-threshold.test.ts +0 -177
  1845. package/src/product-loop/__tests__/verify-failure-tracking.test.ts +0 -154
  1846. package/src/product-loop/__tests__/verify-result.test.ts +0 -60
  1847. package/src/product-loop/artifact-io.ts +0 -239
  1848. package/src/product-loop/assumption-ledger.ts +0 -270
  1849. package/src/product-loop/circuit-breakers.ts +0 -76
  1850. package/src/product-loop/context-policy.ts +0 -180
  1851. package/src/product-loop/cost-preview.ts +0 -124
  1852. package/src/product-loop/cost-scoper.ts +0 -49
  1853. package/src/product-loop/cross-run-memory.ts +0 -450
  1854. package/src/product-loop/design-output.ts +0 -24
  1855. package/src/product-loop/discover.ts +0 -159
  1856. package/src/product-loop/discovery-context-format.ts +0 -32
  1857. package/src/product-loop/discovery-council-runner.ts +0 -82
  1858. package/src/product-loop/discovery-detection.ts +0 -161
  1859. package/src/product-loop/discovery-ecosystem.ts +0 -124
  1860. package/src/product-loop/discovery-interview.ts +0 -237
  1861. package/src/product-loop/discovery-migrations.ts +0 -40
  1862. package/src/product-loop/discovery-persistence.ts +0 -219
  1863. package/src/product-loop/discovery-prompt-parser.ts +0 -80
  1864. package/src/product-loop/discovery-recommender.ts +0 -366
  1865. package/src/product-loop/discovery-schema.ts +0 -143
  1866. package/src/product-loop/done-gate.ts +0 -224
  1867. package/src/product-loop/feedback-routing.ts +0 -82
  1868. package/src/product-loop/gather.ts +0 -304
  1869. package/src/product-loop/index.ts +0 -1305
  1870. package/src/product-loop/loop-driver.ts +0 -901
  1871. package/src/product-loop/phase-budget.ts +0 -182
  1872. package/src/product-loop/phase-plan.ts +0 -158
  1873. package/src/product-loop/phase-rituals.ts +0 -158
  1874. package/src/product-loop/phase-runner.ts +0 -455
  1875. package/src/product-loop/phase-tracker-bridge.ts +0 -60
  1876. package/src/product-loop/product-identity.ts +0 -11
  1877. package/src/product-loop/reality-anchor.ts +0 -45
  1878. package/src/product-loop/repo-audit.ts +0 -314
  1879. package/src/product-loop/role-memory.ts +0 -72
  1880. package/src/product-loop/role-registry.ts +0 -175
  1881. package/src/product-loop/seed-questions.ts +0 -51
  1882. package/src/product-loop/ship-polish.ts +0 -164
  1883. package/src/product-loop/sprint-runner.ts +0 -610
  1884. package/src/product-loop/stakeholder-acl.ts +0 -82
  1885. package/src/product-loop/typed-artifacts.ts +0 -332
  1886. package/src/product-loop/types.ts +0 -443
  1887. package/src/product-loop/verify-failure-tracking.ts +0 -225
  1888. package/src/product-loop/verify-result.ts +0 -39
  1889. package/src/providers/.gitkeep +0 -0
  1890. package/src/providers/__test-utils__/load-fixture.ts +0 -36
  1891. package/src/providers/__tests__/adapter-oauth-wiring.test.ts +0 -129
  1892. package/src/providers/__tests__/capabilities-cosmetic.test.ts +0 -119
  1893. package/src/providers/__tests__/capabilities-flags.test.ts +0 -166
  1894. package/src/providers/__tests__/capabilities-provider-options.test.ts +0 -203
  1895. package/src/providers/__tests__/capabilities-sanitize.test.ts +0 -82
  1896. package/src/providers/__tests__/capabilities.test.ts +0 -44
  1897. package/src/providers/__tests__/provider-coverage.test.ts +0 -48
  1898. package/src/providers/__tests__/runtime-integration.test.ts +0 -97
  1899. package/src/providers/__tests__/runtime.test.ts +0 -96
  1900. package/src/providers/__tests__/siliconflow-history.test.ts +0 -82
  1901. package/src/providers/__tests__/strategies-registry.test.ts +0 -55
  1902. package/src/providers/__tests__/strategies-resolve.test.ts +0 -137
  1903. package/src/providers/__tests__/wire-debug.test.ts +0 -42
  1904. package/src/providers/adapter.test.ts +0 -21
  1905. package/src/providers/adapter.ts +0 -156
  1906. package/src/providers/anthropic.ts +0 -174
  1907. package/src/providers/auth/__tests__/browser-flow.test.ts +0 -235
  1908. package/src/providers/auth/__tests__/device-flow.test.ts +0 -263
  1909. package/src/providers/auth/__tests__/gemini-oauth.test.ts +0 -387
  1910. package/src/providers/auth/__tests__/openai-oauth.test.ts +0 -378
  1911. package/src/providers/auth/__tests__/token-store.test.ts +0 -152
  1912. package/src/providers/auth/browser-flow.ts +0 -140
  1913. package/src/providers/auth/device-flow.ts +0 -221
  1914. package/src/providers/auth/gemini-oauth.ts +0 -351
  1915. package/src/providers/auth/openai-oauth.ts +0 -455
  1916. package/src/providers/auth/registry.ts +0 -121
  1917. package/src/providers/auth/token-store.ts +0 -154
  1918. package/src/providers/auth/types.ts +0 -111
  1919. package/src/providers/capabilities.ts +0 -351
  1920. package/src/providers/endpoints.ts +0 -68
  1921. package/src/providers/errors.test.ts +0 -76
  1922. package/src/providers/errors.ts +0 -46
  1923. package/src/providers/gemini.test.ts +0 -46
  1924. package/src/providers/gemini.ts +0 -42
  1925. package/src/providers/index.ts +0 -28
  1926. package/src/providers/keychain.test.ts +0 -100
  1927. package/src/providers/keychain.ts +0 -267
  1928. package/src/providers/mcp-vision-bridge.test.ts +0 -513
  1929. package/src/providers/mcp-vision-bridge.ts +0 -1020
  1930. package/src/providers/ollama.test.ts +0 -46
  1931. package/src/providers/ollama.ts +0 -36
  1932. package/src/providers/openai-compatible.test.ts +0 -63
  1933. package/src/providers/openai-compatible.ts +0 -58
  1934. package/src/providers/openai.test.ts +0 -65
  1935. package/src/providers/openai.ts +0 -56
  1936. package/src/providers/patch-zod-schema.ts +0 -126
  1937. package/src/providers/pricing.test.ts +0 -65
  1938. package/src/providers/pricing.ts +0 -111
  1939. package/src/providers/prompt-cache-key.spec.ts +0 -28
  1940. package/src/providers/runtime-mock.spec.ts +0 -86
  1941. package/src/providers/runtime.ts +0 -283
  1942. package/src/providers/siliconflow-history.ts +0 -74
  1943. package/src/providers/strategies/anthropic.strategy.ts +0 -25
  1944. package/src/providers/strategies/base.strategy.ts +0 -76
  1945. package/src/providers/strategies/deepseek.strategy.ts +0 -26
  1946. package/src/providers/strategies/google.strategy.ts +0 -28
  1947. package/src/providers/strategies/ollama.strategy.ts +0 -22
  1948. package/src/providers/strategies/openai.strategy.ts +0 -55
  1949. package/src/providers/strategies/registry.ts +0 -43
  1950. package/src/providers/strategies/siliconflow.strategy.ts +0 -26
  1951. package/src/providers/strategies/xai.strategy.ts +0 -26
  1952. package/src/providers/stream-loop.ts +0 -83
  1953. package/src/providers/types.ts +0 -145
  1954. package/src/providers/vision-proxy.test.ts +0 -252
  1955. package/src/providers/vision-proxy.ts +0 -317
  1956. package/src/providers/wire-debug.ts +0 -163
  1957. package/src/router/.gitkeep +0 -0
  1958. package/src/router/__tests__/step-router.test.ts +0 -150
  1959. package/src/router/classifier/grammars.ts +0 -17
  1960. package/src/router/classifier/index.test.ts +0 -33
  1961. package/src/router/classifier/index.ts +0 -21
  1962. package/src/router/classifier/regex.test.ts +0 -49
  1963. package/src/router/classifier/regex.ts +0 -113
  1964. package/src/router/classifier/tree-sitter.test.ts +0 -26
  1965. package/src/router/classifier/tree-sitter.ts +0 -87
  1966. package/src/router/cold.test.ts +0 -62
  1967. package/src/router/cold.ts +0 -27
  1968. package/src/router/decide.test.ts +0 -147
  1969. package/src/router/decide.ts +0 -472
  1970. package/src/router/health.test.ts +0 -59
  1971. package/src/router/health.ts +0 -49
  1972. package/src/router/provider-sentinel.test.ts +0 -22
  1973. package/src/router/provider-sentinel.ts +0 -20
  1974. package/src/router/step-router.ts +0 -194
  1975. package/src/router/store.ts +0 -47
  1976. package/src/router/types.ts +0 -20
  1977. package/src/router/warm.test.ts +0 -168
  1978. package/src/router/warm.ts +0 -53
  1979. package/src/scaffold/__tests__/continuation-prompt.test.ts +0 -93
  1980. package/src/scaffold/__tests__/continue-as-council.spec.ts +0 -124
  1981. package/src/scaffold/__tests__/dotnet-assembly-name.test.ts +0 -28
  1982. package/src/scaffold/__tests__/fe-scaffold-contents.test.ts +0 -127
  1983. package/src/scaffold/__tests__/init-new.smoke.spec.ts +0 -99
  1984. package/src/scaffold/__tests__/init-new.spec.ts +0 -450
  1985. package/src/scaffold/__tests__/install-bb-templates.spec.ts +0 -86
  1986. package/src/scaffold/__tests__/point-to-existing.spec.ts +0 -114
  1987. package/src/scaffold/bb-ecosystem-apply.ts +0 -454
  1988. package/src/scaffold/bb-quality-gate.ts +0 -287
  1989. package/src/scaffold/continuation-prompt.ts +0 -80
  1990. package/src/scaffold/continue-as-council.ts +0 -99
  1991. package/src/scaffold/init-new.ts +0 -1691
  1992. package/src/scaffold/point-to-existing.ts +0 -83
  1993. package/src/scaffold/resume-from-gate-failures.ts +0 -167
  1994. package/src/storage/__tests__/migrations.test.ts +0 -395
  1995. package/src/storage/__tests__/ui-interaction-log.test.ts +0 -105
  1996. package/src/storage/atomic-io.test.ts +0 -92
  1997. package/src/storage/atomic-io.ts +0 -160
  1998. package/src/storage/config.test.ts +0 -33
  1999. package/src/storage/config.ts +0 -53
  2000. package/src/storage/db.ts +0 -184
  2001. package/src/storage/index.ts +0 -26
  2002. package/src/storage/interaction-log.ts +0 -121
  2003. package/src/storage/migrations.ts +0 -205
  2004. package/src/storage/session-dir.ts +0 -37
  2005. package/src/storage/sessions.ts +0 -206
  2006. package/src/storage/tool-results.ts +0 -56
  2007. package/src/storage/transcript-view.ts +0 -45
  2008. package/src/storage/transcript.test.ts +0 -24
  2009. package/src/storage/transcript.ts +0 -561
  2010. package/src/storage/ui-interaction-log.ts +0 -160
  2011. package/src/storage/usage-cap.test.ts +0 -59
  2012. package/src/storage/usage-cap.ts +0 -81
  2013. package/src/storage/usage.ts +0 -117
  2014. package/src/storage/workspaces.ts +0 -84
  2015. package/src/tools/bash.test.ts +0 -363
  2016. package/src/tools/bash.ts +0 -668
  2017. package/src/tools/computer.test.ts +0 -187
  2018. package/src/tools/computer.ts +0 -632
  2019. package/src/tools/file-tracker.test.ts +0 -99
  2020. package/src/tools/file-tracker.ts +0 -70
  2021. package/src/tools/file.test.ts +0 -95
  2022. package/src/tools/file.ts +0 -182
  2023. package/src/tools/grep.ts +0 -187
  2024. package/src/tools/registry.test.ts +0 -38
  2025. package/src/tools/registry.ts +0 -388
  2026. package/src/tools/schedule.test.ts +0 -143
  2027. package/src/tools/schedule.ts +0 -610
  2028. package/src/types/index.ts +0 -474
  2029. package/src/ui/agents-modal.tsx +0 -292
  2030. package/src/ui/app.tsx +0 -6464
  2031. package/src/ui/cards/__tests__/product-status-card.test.ts +0 -30
  2032. package/src/ui/cards/product-status-card.tsx +0 -117
  2033. package/src/ui/components/SuggestionOverlay.tsx +0 -38
  2034. package/src/ui/components/Toast.tsx +0 -100
  2035. package/src/ui/components/__tests__/council-leader-bubble.test.ts +0 -16
  2036. package/src/ui/components/__tests__/council-message-bubble.test.ts +0 -85
  2037. package/src/ui/components/__tests__/council-phase-timeline.test.ts +0 -57
  2038. package/src/ui/components/__tests__/council-placeholder-bubble.test.ts +0 -16
  2039. package/src/ui/components/__tests__/council-question-card.test.ts +0 -133
  2040. package/src/ui/components/__tests__/council-synthesis-banner.test.ts +0 -12
  2041. package/src/ui/components/__tests__/use-pair-quote-buffer.test.ts +0 -41
  2042. package/src/ui/components/btw-overlay.tsx +0 -66
  2043. package/src/ui/components/bubble-layout.ts +0 -66
  2044. package/src/ui/components/code-block-truncate.ts +0 -24
  2045. package/src/ui/components/copy-flash-banner.tsx +0 -31
  2046. package/src/ui/components/council-info-card.tsx +0 -45
  2047. package/src/ui/components/council-leader-bubble.tsx +0 -41
  2048. package/src/ui/components/council-message-bubble.tsx +0 -111
  2049. package/src/ui/components/council-phase-timeline.tsx +0 -91
  2050. package/src/ui/components/council-placeholder-bubble.tsx +0 -65
  2051. package/src/ui/components/council-question-card.tsx +0 -253
  2052. package/src/ui/components/council-status-list.tsx +0 -111
  2053. package/src/ui/components/council-synthesis-banner.tsx +0 -37
  2054. package/src/ui/components/diff-view.tsx +0 -225
  2055. package/src/ui/components/halt-recovery-card.tsx +0 -83
  2056. package/src/ui/components/hero-logo.tsx +0 -62
  2057. package/src/ui/components/init-new-form-card.tsx +0 -470
  2058. package/src/ui/components/lsp-views.tsx +0 -104
  2059. package/src/ui/components/media-views.tsx +0 -66
  2060. package/src/ui/components/message-view.tsx +0 -343
  2061. package/src/ui/components/point-to-existing-form-card.tsx +0 -136
  2062. package/src/ui/components/prompt-box.tsx +0 -306
  2063. package/src/ui/components/role-palette.ts +0 -62
  2064. package/src/ui/components/session-header.tsx +0 -68
  2065. package/src/ui/components/slash-inline-menu.tsx +0 -63
  2066. package/src/ui/components/structured-response-view.tsx +0 -191
  2067. package/src/ui/components/tool-result-views.tsx +0 -258
  2068. package/src/ui/components/use-pair-quote-buffer.ts +0 -23
  2069. package/src/ui/constants.ts +0 -242
  2070. package/src/ui/hooks/use-agent-editor.ts +0 -64
  2071. package/src/ui/hooks/use-mcp-editor.ts +0 -39
  2072. package/src/ui/hooks/use-model-picker.ts +0 -50
  2073. package/src/ui/hooks/useTypeahead.ts +0 -160
  2074. package/src/ui/markdown.tsx +0 -49
  2075. package/src/ui/mcp-modal-types.ts +0 -33
  2076. package/src/ui/mcp-modal.tsx +0 -484
  2077. package/src/ui/modals/api-key-modal.tsx +0 -99
  2078. package/src/ui/modals/connect-modal.tsx +0 -259
  2079. package/src/ui/modals/model-picker-modal.tsx +0 -323
  2080. package/src/ui/modals/sandbox-picker-modal.tsx +0 -99
  2081. package/src/ui/modals/update-modal.tsx +0 -67
  2082. package/src/ui/modals/wallet-picker-modal.tsx +0 -186
  2083. package/src/ui/plan.tsx +0 -346
  2084. package/src/ui/schedule-modal.tsx +0 -138
  2085. package/src/ui/slash/__tests__/clear.test.ts +0 -86
  2086. package/src/ui/slash/__tests__/compact.test.ts +0 -56
  2087. package/src/ui/slash/__tests__/cost.test.ts +0 -62
  2088. package/src/ui/slash/__tests__/discuss.test.ts +0 -101
  2089. package/src/ui/slash/__tests__/execute.test.ts +0 -86
  2090. package/src/ui/slash/__tests__/expand.test.ts +0 -86
  2091. package/src/ui/slash/__tests__/ideal.test.ts +0 -134
  2092. package/src/ui/slash/__tests__/menu-parity.test.ts +0 -43
  2093. package/src/ui/slash/__tests__/optimize.test.ts +0 -155
  2094. package/src/ui/slash/__tests__/pin.test.ts +0 -47
  2095. package/src/ui/slash/__tests__/plan.test.ts +0 -95
  2096. package/src/ui/slash/clear.ts +0 -89
  2097. package/src/ui/slash/compact.ts +0 -46
  2098. package/src/ui/slash/cost.ts +0 -63
  2099. package/src/ui/slash/council-inspect.ts +0 -188
  2100. package/src/ui/slash/council.ts +0 -30
  2101. package/src/ui/slash/debug.ts +0 -153
  2102. package/src/ui/slash/discuss.ts +0 -71
  2103. package/src/ui/slash/ee.ts +0 -304
  2104. package/src/ui/slash/execute.ts +0 -44
  2105. package/src/ui/slash/expand.ts +0 -51
  2106. package/src/ui/slash/export.ts +0 -281
  2107. package/src/ui/slash/ideal.ts +0 -254
  2108. package/src/ui/slash/menu-items.ts +0 -106
  2109. package/src/ui/slash/optimize.ts +0 -47
  2110. package/src/ui/slash/pin.ts +0 -41
  2111. package/src/ui/slash/plan.ts +0 -62
  2112. package/src/ui/slash/registry.ts +0 -47
  2113. package/src/ui/slash/route.test.ts +0 -82
  2114. package/src/ui/slash/route.ts +0 -43
  2115. package/src/ui/status-bar/index.test.tsx +0 -90
  2116. package/src/ui/status-bar/index.tsx +0 -98
  2117. package/src/ui/status-bar/store.test.ts +0 -131
  2118. package/src/ui/status-bar/store.ts +0 -186
  2119. package/src/ui/status-bar/tier-badge.test.tsx +0 -38
  2120. package/src/ui/status-bar/tier-badge.tsx +0 -29
  2121. package/src/ui/status-bar/usd-meter.test.tsx +0 -37
  2122. package/src/ui/status-bar/usd-meter.tsx +0 -22
  2123. package/src/ui/syntax-highlight.ts +0 -627
  2124. package/src/ui/terminal-selection-text.ts +0 -72
  2125. package/src/ui/theme.ts +0 -95
  2126. package/src/ui/types.ts +0 -83
  2127. package/src/ui/utils/color.ts +0 -19
  2128. package/src/ui/utils/format.ts +0 -86
  2129. package/src/ui/utils/modal.ts +0 -9
  2130. package/src/ui/utils/text.ts +0 -31
  2131. package/src/ui/utils/tools.ts +0 -95
  2132. package/src/usage/.gitkeep +0 -0
  2133. package/src/usage/__tests__/product-ledger.test.ts +0 -85
  2134. package/src/usage/cost-log.ts +0 -158
  2135. package/src/usage/decision-log.ts +0 -86
  2136. package/src/usage/downgrade.test.ts +0 -82
  2137. package/src/usage/downgrade.ts +0 -70
  2138. package/src/usage/estimator.test.ts +0 -43
  2139. package/src/usage/estimator.ts +0 -58
  2140. package/src/usage/ledger.test.ts +0 -200
  2141. package/src/usage/ledger.ts +0 -253
  2142. package/src/usage/midstream.test.ts +0 -55
  2143. package/src/usage/midstream.ts +0 -51
  2144. package/src/usage/product-ledger.ts +0 -111
  2145. package/src/usage/thresholds.test.ts +0 -83
  2146. package/src/usage/thresholds.ts +0 -74
  2147. package/src/usage/types.ts +0 -41
  2148. package/src/utils/__tests__/auto-council-settings.test.ts +0 -46
  2149. package/src/utils/__tests__/ee-logger.test.ts +0 -197
  2150. package/src/utils/__tests__/file-lock.test.ts +0 -74
  2151. package/src/utils/__tests__/rate-limit.test.ts +0 -42
  2152. package/src/utils/__tests__/settings-disabled-models.test.ts +0 -113
  2153. package/src/utils/__tests__/settings-web-research.test.ts +0 -45
  2154. package/src/utils/__tests__/slugify.test.ts +0 -45
  2155. package/src/utils/__tests__/visible-retry.test.ts +0 -195
  2156. package/src/utils/at-mentions.ts +0 -120
  2157. package/src/utils/clipboard-image.ts +0 -139
  2158. package/src/utils/ee-logger.ts +0 -163
  2159. package/src/utils/file-index.ts +0 -152
  2160. package/src/utils/file-lock.ts +0 -66
  2161. package/src/utils/git-root.ts +0 -17
  2162. package/src/utils/host-clipboard.ts +0 -68
  2163. package/src/utils/install-manager.test.ts +0 -167
  2164. package/src/utils/install-manager.ts +0 -429
  2165. package/src/utils/instructions.test.ts +0 -112
  2166. package/src/utils/instructions.ts +0 -149
  2167. package/src/utils/permission-mode.test.ts +0 -121
  2168. package/src/utils/permission-mode.ts +0 -37
  2169. package/src/utils/rate-limit.ts +0 -21
  2170. package/src/utils/redactor.test.ts +0 -100
  2171. package/src/utils/redactor.ts +0 -223
  2172. package/src/utils/settings.test.ts +0 -181
  2173. package/src/utils/settings.ts +0 -1108
  2174. package/src/utils/shell.test.ts +0 -72
  2175. package/src/utils/shell.ts +0 -193
  2176. package/src/utils/side-question.ts +0 -39
  2177. package/src/utils/skills.test.ts +0 -58
  2178. package/src/utils/skills.ts +0 -207
  2179. package/src/utils/slugify.ts +0 -9
  2180. package/src/utils/subagent-display.test.ts +0 -23
  2181. package/src/utils/subagent-display.ts +0 -11
  2182. package/src/utils/subagents-settings.test.ts +0 -77
  2183. package/src/utils/telegram-audio-settings.test.ts +0 -44
  2184. package/src/utils/update-checker.test.ts +0 -182
  2185. package/src/utils/update-checker.ts +0 -33
  2186. package/src/utils/visible-retry.ts +0 -56
  2187. package/src/verify/__tests__/coverage-parsers.test.ts +0 -86
  2188. package/src/verify/__tests__/dotnet-recipe.test.ts +0 -88
  2189. package/src/verify/checkpoint.test.ts +0 -186
  2190. package/src/verify/checkpoint.ts +0 -239
  2191. package/src/verify/coverage-parsers.ts +0 -76
  2192. package/src/verify/entrypoint.test.ts +0 -293
  2193. package/src/verify/entrypoint.ts +0 -439
  2194. package/src/verify/environment.test.ts +0 -119
  2195. package/src/verify/environment.ts +0 -115
  2196. package/src/verify/evidence.ts +0 -104
  2197. package/src/verify/orchestrator.test.ts +0 -159
  2198. package/src/verify/orchestrator.ts +0 -129
  2199. package/src/verify/recipes.ts +0 -592
  2200. package/src/verify/retry.ts +0 -62
  2201. package/src/verify/runtime-prep.test.ts +0 -47
  2202. /package/dist/src/{providers/__tests__/siliconflow-history.test.d.ts → council/__tests__/clarifier-ready-gate.test.d.ts} +0 -0
@@ -1,1985 +0,0 @@
1
- // MessageProcessor — extracted from orchestrator.ts as part of Phase 12.4.
2
- //
3
- // Owns the main streaming turn loop that lives in `Agent.processMessage`:
4
- // - Abort wiring (external AbortContext + per-turn AbortController)
5
- // - Trajectory + phase tracker observations on user_turn / abort
6
- // - PIL enrichment pipeline (layers 1/3/6 — fail-open with logging)
7
- // - ROUTE-11 per-turn model routing (decide + fallback to non-disabled
8
- // provider via CouncilManager)
9
- // - Vision proxy (history + current turn)
10
- // - Auto-council gate (PIL taskType + heavy tier + role count) — routes
11
- // into runCouncilV2 and re-enters processMessage with synthesis
12
- // - System prompt assembly (chitchat / playwright gating + PIL suffix +
13
- // model constraints)
14
- // - SAMR step-aware routing (phase1 reasoning → phase2 execution)
15
- // - Tool roundtrip loop:
16
- // - Compaction (relax on overflow recovery, B4 top-level prepareStep)
17
- // - Tool set assembly: builtin + MCP (smart filter for chitchat /
18
- // browser-vocab) + PIL response tools, all wrapped with top-level
19
- // cumulative cap (F1), cross-turn dedup (C3), read-path budget
20
- // - ProviderOptions composition (buildTurnProviderOptions +
21
- // taskTypeToReasoningEffort budget + thinkingType adaptive override
22
- // + O1 shape capture)
23
- // - streamText({...}) with prepareStep (top-level compactor +
24
- // capability sanitizeHistory), onStepStart/Finish, onFinish
25
- // (correlation cleanup)
26
- // - fullStream consumer (text-delta / reasoning-delta / tool-call
27
- // with EE PreToolUse intercept / tool-result with EE PostToolUse
28
- // and vision-bridge / tool-error / tool-approval-request /
29
- // error / abort)
30
- // - Write-ahead persistence (Phase A4 tool_calls, A5 message_seq)
31
- // - Context-overflow recovery + transient retry with exponential backoff
32
- // - Post-turn compact + Stop / StopFailure hooks
33
- // - Debug pipeline trace
34
- //
35
- // Zero behavioral changes — every method body mirrors the original
36
- // `processMessage` (see commit history). The DI surface (`MessageProcessorDeps`)
37
- // is the minimum proxy onto Agent state needed to reach back into Agent
38
- // without holding a circular reference. Public `Agent.processMessage`
39
- // signature is unchanged and continues to be the entrypoint; internally it
40
- // constructs a `MessageProcessor` per call.
41
- //
42
- // Cost-leak code paths preserved here:
43
- // - F1 (top-level cumulative cap) — wrapToolSetWithCap (top-level)
44
- // - F1 (openai.promptCacheKey) — buildTurnProviderOptions
45
- // - G1 (OAuth `maxOutputTokens` drop) — shouldDropParam(runtime, ...)
46
- // - B4 (top-level prepareStep compaction) — compactSubAgentMessages
47
- // - C3 (cross-turn dedup wrap) — wrapToolSetWithDedup
48
- // - A4 (tool_call write-ahead) — persistToolCallWriteAhead
49
- // - A5 (message_seq write-ahead) — persistMessageWriteAhead
50
- // - O1 (providerOptions shape forensics) — extractProviderOptionsShape
51
- // - siliconflow reasoning-strip — turnCaps.sanitizeHistory
52
-
53
- import { type ModelMessage, stepCountIs, streamText, type ToolSet } from "ai";
54
- import { getCachedAuthToken, getCachedServerBaseUrl } from "../ee/auth.js";
55
- import { routeFeedback, routeModel } from "../ee/bridge.js";
56
- import { getMistakeDetector } from "../ee/mistake-detector.js";
57
- import { fireAndForgetPhaseOutcome } from "../ee/phase-outcome.js";
58
- import * as phaseTracker from "../ee/phase-tracker.js";
59
- import { buildScope as buildScopeForVeto } from "../ee/scope.js";
60
- import { fireTrajectoryEvent } from "../ee/session-trajectory.js";
61
- import { getTenantId as getTenantIdForVeto } from "../ee/tenant.js";
62
- import type {
63
- PostToolUseFailureHookInput,
64
- PostToolUseHookInput,
65
- PreToolUseHookInput,
66
- SessionStartHookInput,
67
- StopFailureHookInput,
68
- StopHookInput,
69
- UserPromptSubmitHookInput,
70
- } from "../hooks/types";
71
- import { buildMcpToolSet } from "../mcp/runtime";
72
- import { getModelInfo } from "../models/registry.js";
73
- import { applyPilSuffix, getResponseTaskType, getResponseToolSet, isResponseTool, runPipeline } from "../pil/index.js";
74
- import { taskTypeToMaxTokens, taskTypeToReasoningEffort, taskTypeToTier } from "../pil/task-tier-map.js";
75
- import { getProviderCapabilities } from "../providers/capabilities.js";
76
- import { loadKeyForProvider } from "../providers/keychain.js";
77
- import {
78
- bridgeMcpToolResult,
79
- getVisionGuidanceForTextOnly,
80
- scrubImagePayloadsInMessages,
81
- } from "../providers/mcp-vision-bridge.js";
82
- import { captureToolSchemas } from "../providers/patch-zod-schema.js";
83
- import {
84
- buildTurnProviderOptions,
85
- detectProviderForModel,
86
- type ResolvedModelRuntime,
87
- resolveModelRuntime,
88
- shouldDropParam,
89
- } from "../providers/runtime.js";
90
- import type { ProviderId } from "../providers/types.js";
91
- import { needsVisionProxy, proxyVision } from "../providers/vision-proxy.js";
92
- import { wireDebug } from "../providers/wire-debug.js";
93
- import { reportRouteOutcome } from "../router/decide.js";
94
- import { decideStepRouting, getStepRouterConfig } from "../router/step-router.js";
95
- import { routerStore } from "../router/store.js";
96
- import {
97
- getNextMessageSequence,
98
- logInteraction,
99
- markMessageErrored,
100
- markToolCallErrored,
101
- persistMessageWriteAhead,
102
- persistToolCallWriteAhead,
103
- type SessionStore,
104
- } from "../storage/index";
105
- import type { BashTool } from "../tools/bash";
106
- import { createBuiltinTools } from "../tools/registry.js";
107
- import type { AgentMode, SessionInfo, StreamChunk, SubagentStatus, ToolCall, ToolResult } from "../types/index";
108
- import { isDebugEnabled, type PipelineStep, recordTurnTrace, type TurnTrace } from "../ui/slash/debug.js";
109
- import { statusBarStore } from "../ui/status-bar/store.js";
110
- import { appendDecisionLog } from "../usage/decision-log.js";
111
- import { type PermissionMode, toolNeedsApproval } from "../utils/permission-mode.js";
112
- import {
113
- getAutoCouncilConfidence,
114
- getAutoCouncilMinRoles,
115
- getRoleModels,
116
- getTopLevelCompactKeepLast,
117
- getTopLevelCompactThresholdChars,
118
- getTopLevelToolBudgetChars,
119
- isAutoCouncilEnabled,
120
- isProviderDisabled,
121
- loadMcpServers,
122
- loadValidSubAgents,
123
- } from "../utils/settings";
124
- import type { AbortContext } from "./abort.js";
125
- import type { LegacyProvider, ProcessMessageObserver } from "./agent-options";
126
- import { relaxCompactionSettings } from "./compaction";
127
- import type { CouncilManager } from "./council-manager.js";
128
- import type { CrossTurnDedup } from "./cross-turn-dedup.js";
129
- import { wrapToolSetWithDedup } from "./cross-turn-dedup.js";
130
- import { humanizeApiError, isAuthenticationError, isContextLimitError } from "./error-utils";
131
- import { lastPersistedSeq } from "./message-seq.js";
132
- import type { PendingCallsLog } from "./pending-calls.js";
133
- import { stableCallId } from "./pending-calls.js";
134
- import { applyModelConstraints, buildSystemPromptParts } from "./prompts";
135
- import { extractProviderOptionsShape } from "./provider-options-shape.js";
136
- import type { ReadPathBudget } from "./read-path-budget.js";
137
- import { wrapToolSetWithReadBudget } from "./read-path-budget.js";
138
- import { containsEncryptedReasoning, sanitizeModelMessages } from "./reasoning";
139
- import { classifyStreamError } from "./retry-classifier.js";
140
- import { wrapToolSetWithCap } from "./sub-agent-cap.js";
141
- import { compactSubAgentMessages } from "./subagent-compactor.js";
142
- import {
143
- combineAbortSignals,
144
- getFinishReason,
145
- getStepNumber,
146
- getUsage,
147
- notifyObserver,
148
- toToolCall,
149
- toToolResult,
150
- } from "./tool-utils";
151
- import type { TurnRunnerDepsBase } from "./turn-runner-deps.js";
152
-
153
- /**
154
- * Dependency surface the MessageProcessor needs to reach back into Agent
155
- * state without holding a circular reference. Properties expose array
156
- * references (mutating push() must affect the same array the Agent reads on
157
- * subsequent turns). Method callbacks delegate to Agent private methods.
158
- */
159
- export interface MessageProcessorDeps extends TurnRunnerDepsBase {
160
- // ---- Read/write state references --------------------------------------
161
- // (messages, bash, mode, maxToolRounds, schedules, sendTelegramFile inherited)
162
- /** Live messageSeqs array (mutated by push; parallel to messages). */
163
- readonly messageSeqs: Array<number | null>;
164
- /** Session bookkeeping. */
165
- readonly session: SessionInfo | null;
166
- readonly sessionStore: SessionStore | null;
167
- readonly modelId: string;
168
- readonly providerId: ProviderId;
169
- readonly batchApi: boolean;
170
- readonly permissionMode: PermissionMode;
171
- readonly externalAbortContext: AbortContext | null;
172
- readonly pendingCalls: PendingCallsLog | null;
173
- readonly councilManager: CouncilManager;
174
- readonly crossTurnDedup: CrossTurnDedup | null;
175
- readonly readBudget: ReadPathBudget | null;
176
- readonly priorWarningIdsInSession: Set<string>;
177
- readonly sessionEEGuidance: Map<string, { toolName: string; message: string; why: string; confidence: number }>;
178
- readonly flowReady: Promise<void> | null;
179
-
180
- // ---- Scalar getters / setters -----------------------------------------
181
- getAbortController(): AbortController | null;
182
- setAbortController(ctrl: AbortController | null): void;
183
- getSessionStartHookFired(): boolean;
184
- setSessionStartHookFired(v: boolean): void;
185
- getPlanContext(): string | null;
186
- setPlanContext(v: string | null): void;
187
- getResumeDigest(): string | null;
188
- setResumeDigest(v: string | null): void;
189
- getActiveRunId(): string | null;
190
- getPendingCwdNote(): string | null;
191
- setPendingCwdNote(v: string | null): void;
192
- setPilActive(v: boolean): void;
193
- setPilEnrichmentDelta(n: number): void;
194
- setCurrentCallId(id: string): void;
195
- setLastPromptBreakdown(
196
- b: {
197
- systemChars: number;
198
- staticPrefixChars: number;
199
- dynamicSuffixChars: number;
200
- playwrightGuidanceChars: number;
201
- messagesChars: number;
202
- messagesCount: number;
203
- toolsChars: number;
204
- toolsCount: number;
205
- } | null,
206
- ): void;
207
- setTurnUserGoalExcerpt(v: string): void;
208
- setTurnAssistantReasoning(v: string): void;
209
- appendTurnAssistantReasoning(delta: string): void;
210
- getTurnAssistantReasoning(): string;
211
- setPriorWarningIdsInSession(s: Set<string>): void;
212
- setMessages(messages: ModelMessage[]): void;
213
-
214
- // ---- Behavior delegators ----------------------------------------------
215
- requireProvider(): LegacyProvider;
216
- emitSubagentStatus(status: SubagentStatus | null): void;
217
- fireHook(
218
- input: unknown,
219
- signal?: AbortSignal,
220
- ): Promise<{
221
- blocked: boolean;
222
- blockingErrors: Array<{ command: string; stderr: string }>;
223
- preventContinuation: boolean;
224
- additionalContexts: string[];
225
- results: import("../hooks/types.js").HookResult[];
226
- eeMatches: import("../hooks/types.js").EEMatchEntry[];
227
- }>;
228
- consumeBackgroundNotifications(): Promise<string[]>;
229
- initOAuthProvider(): Promise<void>;
230
- buildRecentTurnsSummary(): string | null;
231
- estimateProjectSize(): "small" | "medium" | "large" | null;
232
- countFilesTouched(): number;
233
- respondToToolApproval(approvalId: string, approved: boolean): void;
234
- runCouncilV2(
235
- userMessage: string,
236
- opts: { skipClarification: boolean; observer?: ProcessMessageObserver; userModelMessage: ModelMessage },
237
- ): AsyncGenerator<StreamChunk, void, unknown>;
238
- processMessage(
239
- userMessage: string,
240
- observer?: ProcessMessageObserver,
241
- images?: Array<{ path: string; mediaType: string; base64: string }>,
242
- ): AsyncGenerator<StreamChunk, void, unknown>;
243
- processMessageBatchTurn(args: {
244
- userModelMessage: ModelMessage;
245
- observer?: ProcessMessageObserver;
246
- provider: LegacyProvider;
247
- subagents: ReturnType<typeof loadValidSubAgents>;
248
- system: string;
249
- runtime: ResolvedModelRuntime;
250
- modelInfo: ResolvedModelRuntime["modelInfo"];
251
- signal: AbortSignal;
252
- }): AsyncGenerator<StreamChunk, void, unknown>;
253
- }
254
-
255
- /**
256
- * MessageProcessor — extracted streaming turn loop.
257
- *
258
- * Lifecycle:
259
- * const processor = new MessageProcessor(deps);
260
- * yield* processor.run(userMessage, observer, images);
261
- *
262
- * Constructed per call (heap allocation is negligible against the streamText
263
- * cost), matching the StreamRunner / CouncilManager pattern.
264
- */
265
- export class MessageProcessor {
266
- constructor(private deps: MessageProcessorDeps) {}
267
-
268
- async *run(
269
- userMessage: string,
270
- observer?: ProcessMessageObserver,
271
- images?: Array<{ path: string; mediaType: string; base64: string }>,
272
- ): AsyncGenerator<StreamChunk, void, unknown> {
273
- const deps = this.deps;
274
- // TUI-04: prefer the external AbortContext (from SIGINT handler) so that
275
- // Ctrl+C mid-tool-call triggers a single, unified abort across all I/O.
276
- // If no external context, fall back to creating a local AbortController.
277
- if (deps.externalAbortContext) {
278
- // Wrap the external signal in a local controller so existing cleanup
279
- // paths (setAbortController(null)) still work without side-effects.
280
- const ctrl = new AbortController();
281
- deps.setAbortController(ctrl);
282
- // Forward external abort to the local controller.
283
- deps.externalAbortContext.signal.addEventListener(
284
- "abort",
285
- () => {
286
- deps.getAbortController()?.abort(deps.externalAbortContext?.reason());
287
- },
288
- { once: true },
289
- );
290
- } else {
291
- deps.setAbortController(new AbortController());
292
- }
293
- const signal = deps.getAbortController()!.signal;
294
- deps.emitSubagentStatus(null);
295
-
296
- // Phase C3: advance the cross-turn dedup turn counter so stubs can point
297
- // back to the correct prior turn.
298
- deps.crossTurnDedup?.beginTurn();
299
-
300
- // P0 native observation: turn boundary. Capture the prior batch via
301
- // resetBatch — file-revert detection (in the hook layer) reads it on
302
- // the first edit of the new turn. No language-based veto matching.
303
- try {
304
- getMistakeDetector().resetBatch();
305
- if (deps.session?.id) {
306
- fireTrajectoryEvent({
307
- ts: new Date().toISOString(),
308
- sessionId: deps.session.id,
309
- kind: "user_turn",
310
- excerpt: userMessage.slice(0, 200),
311
- vetoDetected: false,
312
- });
313
- }
314
- } catch {
315
- /* fail-open: detector state must never block the turn */
316
- }
317
-
318
- // P0 native observation: AbortSignal → fire user-veto for any in-flight
319
- // batch tools that had warnings. Listener attaches here and self-removes
320
- // after fire so it can't double-fire on later aborts in the same turn.
321
- {
322
- const aborter = () => {
323
- try {
324
- // P1 Item 3 wiring: mark current phase aborted so the next setPhase
325
- // call drains an "abandoned" outcome.
326
- phaseTracker.markAborted(
327
- deps.getAbortController()?.signal.reason ? String(deps.getAbortController()!.signal.reason) : undefined,
328
- );
329
- } catch {
330
- /* fail-open */
331
- }
332
- try {
333
- const det = getMistakeDetector();
334
- const events = det.detectAbort(
335
- deps.getAbortController()?.signal.reason ? String(deps.getAbortController()!.signal.reason) : undefined,
336
- );
337
- if (events.length === 0) return;
338
- const cwd = deps.bash.getCwd();
339
- const tenantId = getTenantIdForVeto();
340
- void buildScopeForVeto({ cwd })
341
- .then(async (scope) => {
342
- const { getDefaultEEClient } = await import("../ee/intercept.js");
343
- for (const ev of events) {
344
- void getDefaultEEClient()
345
- .posttool({
346
- toolName: ev.toolName,
347
- toolInput: ev.toolInput,
348
- outcome: { success: false, mistakeKind: ev.kind, evidence: ev.evidence },
349
- cwd,
350
- tenantId,
351
- scope,
352
- })
353
- .catch(() => {
354
- /* fire-and-forget */
355
- });
356
- }
357
- })
358
- .catch(() => {
359
- /* fire-and-forget */
360
- });
361
- } catch {
362
- /* fail-open */
363
- }
364
- };
365
- signal.addEventListener("abort", aborter, { once: true });
366
- }
367
-
368
- // P0 native observation: cache turn-level intent fields for PreToolUse.
369
- deps.setTurnUserGoalExcerpt(userMessage.slice(0, 200));
370
- deps.setTurnAssistantReasoning("");
371
-
372
- // Ensure flow run is ready before processing (fail-open).
373
- await deps.flowReady?.catch(() => {});
374
-
375
- // Upgrade to OAuth-backed provider on first turn if tokens are available.
376
- await deps.initOAuthProvider().catch(() => {});
377
-
378
- if (!deps.getSessionStartHookFired()) {
379
- deps.setSessionStartHookFired(true);
380
- const isResume = deps.messages.length > 0;
381
- const sessionStartInput: SessionStartHookInput = {
382
- hook_event_name: "SessionStart",
383
- source: isResume ? "resume" : "startup",
384
- session_id: deps.session?.id,
385
- cwd: deps.bash.getCwd(),
386
- };
387
- await deps.fireHook(sessionStartInput, signal).catch(() => {});
388
- }
389
-
390
- const promptInput: UserPromptSubmitHookInput = {
391
- hook_event_name: "UserPromptSubmit",
392
- user_prompt: userMessage,
393
- session_id: deps.session?.id,
394
- cwd: deps.bash.getCwd(),
395
- };
396
- await deps.fireHook(promptInput, signal).catch(() => {});
397
-
398
- await deps.consumeBackgroundNotifications();
399
-
400
- const _debugOn = isDebugEnabled();
401
- const _debugSteps: PipelineStep[] = [];
402
- const _debugTurnId = deps.messages.filter((m) => m.role === "user").length + 1;
403
-
404
- // PIL: enrich prompt before pushing to messages (D-01, D-03, D-04)
405
- // Promise.race timeout of 200ms is inside runPipeline — fail-open guaranteed
406
- const _pilStart = Date.now();
407
- const pilCtx = await runPipeline(userMessage, {
408
- resumeDigest: deps.getResumeDigest(),
409
- activeRunId: deps.getActiveRunId(),
410
- sessionId: deps.session?.id ?? null,
411
- }).catch((err) => ({
412
- raw: userMessage,
413
- enriched: userMessage,
414
- taskType: null,
415
- domain: null,
416
- confidence: 0,
417
- outputStyle: null,
418
- tokenBudget: 500,
419
- metrics: null,
420
- layers: [],
421
- gsdPhase: null,
422
- activeRunId: null,
423
- intentKind: null as "task" | "chitchat" | null,
424
- fallbackReason: err instanceof Error ? `orchestrator-catch:${err.name}` : "orchestrator-catch:unknown",
425
- }));
426
- // Cheap signal forwarded from PIL Layer 1 — true when input is greeting /
427
- // small-talk (≤10 chars + ≤2 words OR brain-classified "none"). Used to
428
- // skip the MCP tool catalog, which dominates input tokens (~20K) and is
429
- // useless for "hi" / "ok" / "thanks".
430
- const isChitchat = pilCtx.intentKind === "chitchat";
431
- const enrichedMessage = pilCtx.enriched;
432
- deps.setPilActive(pilCtx.taskType !== null);
433
- deps.setPilEnrichmentDelta(
434
- pilCtx.metrics?.suffixInstructionTokens ?? Math.round((enrichedMessage.length - userMessage.length) / 4),
435
- );
436
- const _pilEnrichmentDeltaSnapshot =
437
- pilCtx.metrics?.suffixInstructionTokens ?? Math.round((enrichedMessage.length - userMessage.length) / 4);
438
-
439
- // P1 Item 3 wiring: phase-boundary detection. setPhase returns a snapshot
440
- // of the prior phase iff the phase NAME just changed. We classify the
441
- // outcome (pass/fail/abandoned/null) and fire phase-outcome to the EE
442
- // server when there is a high-SNR verdict. Endpoint is feature-flagged
443
- // server-side; 404 is silently swallowed by the client wrapper.
444
- try {
445
- const drained = phaseTracker.setPhase(pilCtx.gsdPhase ?? null);
446
- if (drained && drained.principleRefs.length > 0 && deps.session?.id) {
447
- const outcome = phaseTracker.classifyOutcome(drained);
448
- if (outcome) {
449
- fireAndForgetPhaseOutcome(
450
- {
451
- sessionId: deps.session.id,
452
- phaseName: drained.phaseName,
453
- outcome,
454
- toolEventIds: drained.principleRefs,
455
- evidence: {
456
- durationMs: drained.endedAt - drained.startedAt,
457
- toolCount: drained.toolCount,
458
- cwd: deps.bash.getCwd(),
459
- ...(drained.verifyResult ? { verifyResult: drained.verifyResult } : {}),
460
- ...(drained.aborted ? { aborted: true } : {}),
461
- ...(drained.abortReason ? { abortReason: drained.abortReason } : {}),
462
- },
463
- },
464
- {
465
- ...(getCachedServerBaseUrl() ? { baseUrl: getCachedServerBaseUrl()! } : {}),
466
- ...(getCachedAuthToken() ? { authToken: getCachedAuthToken()! } : {}),
467
- },
468
- );
469
- }
470
- }
471
- } catch {
472
- /* fail-open: phase-outcome must never block a turn */
473
- }
474
-
475
- if (_debugOn) {
476
- const appliedLayers = pilCtx.layers?.filter((l) => l.applied).map((l) => l.name) ?? [];
477
- _debugSteps.push({
478
- name: "PIL Pipeline",
479
- duration_ms: Date.now() - _pilStart,
480
- input_summary: `"${userMessage.slice(0, 60)}${userMessage.length > 60 ? "..." : ""}"`,
481
- output_summary: `task=${pilCtx.taskType ?? "none"} domain=${pilCtx.domain ?? "none"} layers=[${appliedLayers.join(",")}]`,
482
- tokens_saved: _pilEnrichmentDeltaSnapshot > 0 ? _pilEnrichmentDeltaSnapshot : undefined,
483
- });
484
- }
485
-
486
- // Interaction log: PIL classification
487
- try {
488
- if (deps.session) {
489
- const pilDurationMs = Date.now() - _pilStart;
490
- logInteraction(deps.session.id, "pil", {
491
- eventSubtype: pilCtx.taskType ?? "none",
492
- durationMs: pilDurationMs,
493
- data: {
494
- layers: pilCtx.layers?.filter((l) => l.applied).map((l) => l.name) ?? [],
495
- fullLayers: pilCtx.layers?.map((l) => ({ name: l.name, applied: l.applied, delta: l.delta })) ?? [],
496
- layerCount: pilCtx.layers?.length ?? 0,
497
- layerTimings: pilCtx.metrics?.layerTimings ?? null,
498
- domain: pilCtx.domain,
499
- confidence: pilCtx.confidence,
500
- outputStyle: pilCtx.outputStyle,
501
- intentKind: pilCtx.intentKind ?? null,
502
- mcpSkipped: isChitchat,
503
- fallbackReason: pilCtx.fallbackReason ?? null,
504
- eeMode: (await import("../ee/client-mode.js")).getCachedEEClientMode()?.mode ?? "unknown",
505
- },
506
- });
507
- logInteraction(deps.session.id, "user_message", {
508
- data: {
509
- raw_length: userMessage.length,
510
- enriched_length: enrichedMessage.length,
511
- taskType: pilCtx.taskType,
512
- intentKind: pilCtx.intentKind ?? null,
513
- confidence: pilCtx.confidence,
514
- pilActive: pilCtx.taskType !== null,
515
- },
516
- });
517
- }
518
- } catch {
519
- /* fail-open */
520
- }
521
-
522
- // ROUTE-11: Per-turn model routing via decide() — picks cheapest capable model
523
- const turnStartMs = Date.now();
524
- let turnModelId = deps.modelId;
525
- let taskHash: string | null = null;
526
- const _routeStart = Date.now();
527
- try {
528
- const { decide } = await import("../router/decide.js");
529
- const routeDecision = await decide(userMessage, {
530
- tenantId: "local",
531
- cwd: deps.bash.getCwd(),
532
- defaultModel: deps.modelId,
533
- defaultProvider: deps.providerId,
534
- pil: {
535
- domain: pilCtx.domain,
536
- taskType: pilCtx.taskType,
537
- confidence: pilCtx.confidence,
538
- gsdPhase: pilCtx.gsdPhase ?? null,
539
- activeRunId: pilCtx.activeRunId ?? null,
540
- recentTurnsSummary: deps.buildRecentTurnsSummary(),
541
- projectSize: deps.estimateProjectSize(),
542
- filesTouched: deps.countFilesTouched(),
543
- mode: deps.mode,
544
- },
545
- });
546
- if (routeDecision.model && routeDecision.model !== "HALT") {
547
- // Respect user's default model when it has a vision proxy and the
548
- // current turn (or history) has images — the proxy will convert
549
- // images to text, so there's no need to switch to a vision-capable
550
- // (and usually pricier / rate-limited) model.
551
- const defaultHasVisionProxy = needsVisionProxy(deps.modelId);
552
- const historyHasImages = deps.messages.some(
553
- (m) => Array.isArray(m.content) && (m.content as Array<{ type: string }>).some((p) => p.type === "image"),
554
- );
555
- const turnHasImages = (images?.length ?? 0) > 0;
556
- const skipVisionRoute = defaultHasVisionProxy && (turnHasImages || historyHasImages);
557
- if (!skipVisionRoute) {
558
- turnModelId = routeDecision.model;
559
- }
560
- }
561
- taskHash = routeDecision.taskHash ?? null;
562
- // Update status bar with router switch info. Also reset back to the
563
- // session default when the router does NOT switch on this turn —
564
- // otherwise the bar stays "stuck" showing the previously-routed model
565
- // (e.g. claude-sonnet-4-6) on later turns that actually run on the
566
- // user's chosen default (e.g. deepseek-v4-flash).
567
- if (turnModelId !== deps.modelId) {
568
- statusBarStore.setState({ routed_from: deps.modelId, model: turnModelId });
569
- } else {
570
- const prev = statusBarStore.getState();
571
- if (prev.routed_from || prev.model !== deps.modelId) {
572
- statusBarStore.setState({ routed_from: null, model: deps.modelId });
573
- }
574
- }
575
- if (_debugOn) {
576
- _debugSteps.push({
577
- name: "Router",
578
- duration_ms: Date.now() - _routeStart,
579
- input_summary: `default=${deps.modelId}`,
580
- output_summary: turnModelId !== deps.modelId ? `routed→${turnModelId}` : `kept ${turnModelId}`,
581
- });
582
- }
583
- } catch {
584
- // Router unavailable — use session default model (skip if provider is disabled)
585
- if (!isProviderDisabled(deps.providerId as ProviderId)) {
586
- const eeRoute = await routeModel(userMessage, {}, deps.providerId).catch(() => null);
587
- taskHash = eeRoute?.taskHash ?? null;
588
- }
589
- }
590
-
591
- // Interaction log: model routing
592
- try {
593
- if (deps.session) {
594
- logInteraction(deps.session.id, "routing", {
595
- model: turnModelId,
596
- data: { defaultModel: deps.modelId, routedModel: turnModelId, taskHash },
597
- });
598
- }
599
- } catch {
600
- /* fail-open */
601
- }
602
-
603
- // Re-detect provider if router picked a model from a different provider
604
- const turnProviderId = detectProviderForModel(turnModelId);
605
- let turnProvider: LegacyProvider;
606
- if (turnProviderId !== deps.providerId) {
607
- // Even if the key is reachable, skip disabled providers
608
- const turnKey = !isProviderDisabled(turnProviderId as ProviderId)
609
- ? await loadKeyForProvider(turnProviderId).catch(() => null)
610
- : null;
611
- if (turnKey) {
612
- const { createProviderFactory } = await import("../providers/runtime.js");
613
- turnProvider = createProviderFactory(turnProviderId, { apiKey: turnKey }).factory;
614
- } else {
615
- // Router's provider unreachable or disabled — fall back to a non-disabled provider
616
- const fallback = await deps.councilManager.resolveNonDisabledFallback();
617
- turnModelId = fallback.modelId;
618
- turnProvider = deps.requireProvider();
619
- }
620
- } else if (isProviderDisabled(deps.providerId as ProviderId)) {
621
- // Session provider is disabled — find a non-disabled alternative
622
- const fallback = await deps.councilManager.resolveNonDisabledFallback();
623
- turnModelId = fallback.modelId;
624
- turnProvider = deps.requireProvider();
625
- } else {
626
- turnProvider = deps.requireProvider();
627
- }
628
-
629
- // E4: prepend one-shot cwd note when setCwd() changed the working directory
630
- // mid-session. Clears after injection so only the first subsequent turn sees it.
631
- const cwdNote = deps.getPendingCwdNote();
632
- deps.setPendingCwdNote(null);
633
- const messageForModel = cwdNote ? `${cwdNote}\n\n${enrichedMessage}` : enrichedMessage;
634
-
635
- let userModelMessage: ModelMessage;
636
- if (images?.length) {
637
- const parts: Array<{ type: "text"; text: string } | { type: "image"; image: string; mediaType: string }> = [
638
- { type: "text", text: messageForModel },
639
- ];
640
- for (const img of images) {
641
- parts.push({ type: "image", image: img.base64, mediaType: img.mediaType });
642
- }
643
- userModelMessage = { role: "user", content: parts };
644
- } else {
645
- userModelMessage = { role: "user", content: messageForModel };
646
- }
647
-
648
- // Vision proxy: convert images to text for models that don't support vision.
649
- // Process BOTH the current user message and any historical messages that
650
- // still carry image parts — otherwise sending the conversation back to a
651
- // text-only provider (e.g. DeepSeek) fails with "unknown variant
652
- // `image_url`" once history contains an image from a prior turn.
653
- if (needsVisionProxy(turnModelId)) {
654
- const historyHasImages = deps.messages.some(
655
- (m) => Array.isArray(m.content) && (m.content as Array<{ type: string }>).some((p) => p.type === "image"),
656
- );
657
- const turnHasImages = (images?.length ?? 0) > 0;
658
- if (turnHasImages || historyHasImages) {
659
- try {
660
- if (historyHasImages) {
661
- const historyResult = await proxyVision(deps.messages, turnModelId, signal);
662
- if (historyResult.proxied) {
663
- deps.setMessages(historyResult.messages);
664
- yield {
665
- type: "content",
666
- content: `[Vision proxy: ${historyResult.imageCount} historical image(s) → text]\n`,
667
- };
668
- }
669
- }
670
- if (turnHasImages) {
671
- const proxyResult = await proxyVision([userModelMessage], turnModelId, signal);
672
- if (proxyResult.proxied) {
673
- userModelMessage = proxyResult.messages[0];
674
- yield {
675
- type: "content",
676
- content: `[Vision proxy: ${proxyResult.imageCount} image(s) → ${turnModelId} via SiliconFlow]\n`,
677
- };
678
- }
679
- }
680
- } catch {
681
- yield { type: "content", content: "[Vision proxy: failed, images dropped]\n" };
682
- if (turnHasImages) {
683
- userModelMessage = { role: "user", content: enrichedMessage };
684
- }
685
- // Strip image parts from history as a last-resort fallback so the
686
- // request doesn't blow up at the provider serialization layer.
687
- deps.setMessages(
688
- deps.messages.map((m) => {
689
- if (!Array.isArray(m.content)) return m;
690
- const filtered = (m.content as Array<{ type: string }>).filter((p) => p.type !== "image");
691
- return { ...m, content: filtered } as typeof m;
692
- }),
693
- );
694
- }
695
- }
696
- }
697
-
698
- deps.messages.push(userModelMessage);
699
- // Phase A5 — write-ahead the user row so `recordUsage` mid-stream can
700
- // attribute usage to a real `message_seq` instead of falling back to
701
- // NULL (or to the previous turn's assistant seq for a session that has
702
- // multi-turn history). The post-stream `appendCompletedTurn(...)` path
703
- // upserts the same row to `status='completed'` via the
704
- // `ON CONFLICT(session_id, seq) DO UPDATE` clause in `appendMessages`.
705
- let userWriteAheadSeq: number | null = null;
706
- if (deps.session) {
707
- try {
708
- userWriteAheadSeq = getNextMessageSequence(deps.session.id);
709
- persistMessageWriteAhead(deps.session.id, userWriteAheadSeq, "user", JSON.stringify(userModelMessage));
710
- } catch {
711
- // Fail-open: if seq lookup throws, fall back to the legacy NULL
712
- // path. The forensics anomaly returns but the turn proceeds.
713
- userWriteAheadSeq = null;
714
- }
715
- }
716
- deps.messageSeqs.push(userWriteAheadSeq);
717
-
718
- // Inject accumulated EE session guidance as a system message so the model
719
- // is informed of past warnings before making tool decisions this turn.
720
- if (deps.sessionEEGuidance.size > 0) {
721
- const lines = Array.from(deps.sessionEEGuidance.entries()).map(([, g]) => {
722
- const pct = Math.round(g.confidence * 100);
723
- return `- [${g.toolName}] ${g.message} (Why: ${g.why}) [${pct}%]`;
724
- });
725
- deps.messages.push({
726
- role: "system",
727
- content: `[EE Session Guidance — avoid these patterns when using tools]\n${lines.join("\n")}`,
728
- });
729
- deps.messageSeqs.push(null);
730
- }
731
-
732
- const provider = turnProvider;
733
- const subagents = loadValidSubAgents();
734
- const _pilResponseTools = getResponseToolSet(pilCtx, deps.providerId);
735
- const _hasResponseTools = Object.keys(_pilResponseTools).length > 0;
736
- const systemParts = buildSystemPromptParts(
737
- deps.bash.getCwd(),
738
- deps.mode,
739
- deps.bash.getSandboxMode(),
740
- deps.getPlanContext(),
741
- subagents,
742
- deps.bash.getSandboxSettings(),
743
- deps.providerId,
744
- deps.getResumeDigest(),
745
- { chitchat: isChitchat },
746
- );
747
- if (deps.getResumeDigest()) deps.setResumeDigest(null);
748
- // Skip vision/playwright guidance unless the user's message has a URL
749
- // or browser/screenshot vocabulary. ~400 tokens of routing hints
750
- // the model only needs when it might call a browser MCP.
751
- const _browserGuidanceNeeded =
752
- /https?:\/\/\S+|\b(screenshot|browser|playwright|chrome|figma|canva|render|webpage|website|url|hyperlink|navigate|click|scrape)\b/i.test(
753
- userMessage,
754
- );
755
- const playwrightGuidance = isChitchat || !_browserGuidanceNeeded ? "" : getVisionGuidanceForTextOnly(turnModelId);
756
- const system = applyModelConstraints(
757
- applyPilSuffix(
758
- `${systemParts.staticPrefix}${playwrightGuidance}${systemParts.dynamicSuffix}`,
759
- pilCtx,
760
- _hasResponseTools,
761
- ),
762
- turnModelId,
763
- );
764
- let runtime = resolveModelRuntime(provider, turnModelId);
765
- let modelInfo = runtime.modelInfo;
766
-
767
- // SAMR: Step-Aware Model Routing — downgrade to fast model for tool-execution
768
- // steps after the initial reasoning step. The premium model decides WHAT to do;
769
- // a cheaper model handles the mechanical "read results, call more tools" loop.
770
- const stepRouterCfg = getStepRouterConfig();
771
- const stepRouterDecision = decideStepRouting(turnModelId, deps.providerId, stepRouterCfg);
772
- let stepRouterPhase: "phase1" | "phase2" | "done" = stepRouterDecision.phase2ModelId ? "phase1" : "done";
773
- const phase2Runtime = stepRouterDecision.phase2ModelId
774
- ? resolveModelRuntime(provider, stepRouterDecision.phase2ModelId)
775
- : null;
776
- if (stepRouterDecision.phase2ModelId && _debugOn) {
777
- _debugSteps.push({
778
- name: "StepRouter",
779
- duration_ms: 0,
780
- input_summary: `phase1=${turnModelId}`,
781
- output_summary: stepRouterDecision.reason,
782
- });
783
- }
784
-
785
- deps.setPlanContext(null);
786
- let attemptedOverflowRecovery = false;
787
- // Stream-retry state: track how many transient retries have been attempted
788
- // for the current turn. Reset to 0 on each new user turn (we're in processMessage).
789
- let streamRetryCount = 0;
790
- const MAX_STREAM_RETRIES = 2; // 3 total attempts = 1 first try + 2 retries
791
-
792
- // Auto-council: route to multi-model debate when EITHER
793
- // (a) PIL classified taskType=plan|analyze with high confidence, OR
794
- // (b) GSD-native tier === "heavy" (wholesale / multi-step / cross-repo work).
795
- // After the debate finishes, runCouncilV2 records synthesis on
796
- // councilManager.lastSynthesis; we then re-enter processMessage with the synthesis
797
- // as the next user turn so the main loop continues with full debate context.
798
- // Skip if this is already a council continuation turn (prevent infinite recursion).
799
- const autoCouncilTypes = new Set(["plan", "analyze"]);
800
- const councilRoles = getRoleModels();
801
- const configuredRoleCount = Object.values(councilRoles).filter(Boolean).length;
802
- const heavyTier = (pilCtx as { complexityTier?: string | null }).complexityTier === "heavy";
803
- const autoCouncilConfidence = getAutoCouncilConfidence();
804
- const autoCouncilMinRoles = getAutoCouncilMinRoles();
805
- const taskTypeMatch =
806
- pilCtx.taskType && autoCouncilTypes.has(pilCtx.taskType) && pilCtx.confidence >= autoCouncilConfidence;
807
- const shouldAutoCouncil =
808
- !deps.councilManager.isContinuation &&
809
- isAutoCouncilEnabled() &&
810
- configuredRoleCount >= autoCouncilMinRoles &&
811
- (taskTypeMatch || heavyTier);
812
-
813
- // Always log the auto-council decision (taken or skipped) with the gate
814
- // values that decided it. Lets reports answer "why did this turn cost
815
- // $0.30?" and "is the confidence floor tuned wrong for my prompts?".
816
- const autoCouncilSkipReason = (() => {
817
- if (deps.councilManager.isContinuation) return "continuation-turn";
818
- if (!isAutoCouncilEnabled()) return "feature-disabled";
819
- if (configuredRoleCount < autoCouncilMinRoles)
820
- return `role-count<${autoCouncilMinRoles} (have ${configuredRoleCount})`;
821
- if (!taskTypeMatch && !heavyTier) {
822
- if (!pilCtx.taskType || !autoCouncilTypes.has(pilCtx.taskType))
823
- return `taskType=${pilCtx.taskType ?? "null"} not in plan|analyze`;
824
- if (pilCtx.confidence < autoCouncilConfidence)
825
- return `confidence<${autoCouncilConfidence} (got ${pilCtx.confidence.toFixed(2)})`;
826
- return "no-trigger";
827
- }
828
- return "taken";
829
- })();
830
- appendDecisionLog({
831
- ts: Date.now(),
832
- sessionId: deps.session?.id ?? null,
833
- kind: "auto-council",
834
- taken: shouldAutoCouncil,
835
- reason: autoCouncilSkipReason,
836
- meta: {
837
- taskType: pilCtx.taskType ?? null,
838
- confidence: pilCtx.confidence,
839
- complexityTier: (pilCtx as { complexityTier?: string | null }).complexityTier ?? null,
840
- configuredRoleCount,
841
- autoCouncilConfidence,
842
- autoCouncilMinRoles,
843
- heavyTier,
844
- isContinuation: deps.councilManager.isContinuation,
845
- },
846
- }).catch(() => undefined);
847
-
848
- if (shouldAutoCouncil) {
849
- const reason = heavyTier
850
- ? `complexity=heavy${pilCtx.taskType ? ` task=${pilCtx.taskType}` : ""}`
851
- : `${pilCtx.taskType} task detected with ${(pilCtx.confidence * 100).toFixed(0)}% confidence`;
852
- yield { type: "content", content: `\n[Auto-council triggered: ${reason}]\n` };
853
- yield* deps.runCouncilV2(userMessage, { skipClarification: true, observer, userModelMessage });
854
- const synthesis = deps.councilManager.lastSynthesis;
855
- deps.councilManager.setLastSynthesis(null);
856
- if (synthesis) {
857
- yield { type: "content", content: "\n[Auto-continuing with council recommendations...]\n" };
858
- deps.councilManager.setContinuation(true);
859
- try {
860
- yield* deps.processMessage(
861
- `Council debate completed. Synthesis:\n\n${synthesis}\n\nProceed with the recommended action items.`,
862
- observer,
863
- );
864
- } finally {
865
- deps.councilManager.setContinuation(false);
866
- }
867
- }
868
- return;
869
- }
870
-
871
- if (deps.batchApi) {
872
- try {
873
- yield* deps.processMessageBatchTurn({
874
- userModelMessage,
875
- observer,
876
- provider,
877
- subagents,
878
- system,
879
- runtime,
880
- modelInfo,
881
- signal,
882
- });
883
- } finally {
884
- if (deps.getAbortController()?.signal === signal) {
885
- deps.setAbortController(null);
886
- }
887
- }
888
- return;
889
- }
890
-
891
- try {
892
- while (true) {
893
- // SAMR Phase 2: switch to fast model for tool-execution steps
894
- if (stepRouterPhase === "phase2" && phase2Runtime) {
895
- runtime = phase2Runtime;
896
- modelInfo = runtime.modelInfo;
897
- }
898
-
899
- deps.setCompactedThisTurn(false);
900
- let assistantText = "";
901
- let reasoningPreview = "";
902
- let encryptedReasoningHidden = false;
903
- let streamOk = false;
904
- let closeMcp: (() => Promise<void>) | undefined;
905
- let stepNumber = -1;
906
- const activeToolCalls: ToolCall[] = [];
907
- // SAMR: track whether Phase 1 produced tool calls
908
- let phase1HadToolCalls = false;
909
-
910
- try {
911
- const settings = attemptedOverflowRecovery
912
- ? relaxCompactionSettings(deps.getCompactionSettings(modelInfo?.contextWindow))
913
- : deps.getCompactionSettings(modelInfo?.contextWindow);
914
- if (modelInfo?.contextWindow) {
915
- await deps.compactForContext(
916
- provider,
917
- system,
918
- modelInfo.contextWindow,
919
- signal,
920
- settings,
921
- attemptedOverflowRecovery,
922
- );
923
- }
924
-
925
- const baseToolsRaw = createBuiltinTools(deps.bash, deps.mode, {
926
- runTask: (request, abortSignal) => deps.runTask(request, combineAbortSignals(signal, abortSignal)),
927
- runDelegation: (request, abortSignal) =>
928
- deps.runDelegation(request, combineAbortSignals(signal, abortSignal)),
929
- readDelegation: (id) => deps.readDelegation(id),
930
- listDelegations: () => deps.listDelegations(),
931
- modelId: turnModelId,
932
- });
933
- // Top-level cumulative cap state. We accumulate the raw tool set
934
- // (base + MCP + PIL response tools) across the assembly below,
935
- // then apply the cap once. Tier ratios are looser than the
936
- // sub-agent cap (50%/80%) so casual single-tool turns are not
937
- // trimmed. See sub-agent-cap.ts.
938
- // Chitchat: drop builtin tools too (not just MCP). A 1-word greeting
939
- // never needs bash/read_file/edit_file/grep — those schemas alone
940
- // cost ~1.5K input tokens on this CLI. Falls back to baseTools for
941
- // every non-chitchat turn (PIL gates conservatively).
942
- const turnCaps = getProviderCapabilities(runtime.modelInfo?.provider ?? "anthropic");
943
- let rawToolSet: ToolSet = !turnCaps.supportsClientTools(runtime.modelInfo)
944
- ? {}
945
- : isChitchat
946
- ? {}
947
- : baseToolsRaw;
948
- // MCP skip: chitchat / greeting inputs don't need 7 MCP servers'
949
- // worth of tool schemas (~20K input tokens). PIL Layer 1 already
950
- // gates this conservatively (≤10 chars + ≤2 words OR brain "none").
951
- if (deps.mode === "agent" && !isChitchat && turnCaps.supportsClientTools(runtime.modelInfo)) {
952
- // Smart MCP filter: skip browser/vision MCP servers unless the
953
- // user's current message has a URL or explicitly invokes the
954
- // browser/screenshot/design vocabulary. Local code work — which
955
- // is the majority of turns — does not need Playwright/Figma/Canva
956
- // tool schemas (each MCP contributes 8-15 tools at ~150 tok each).
957
- // Override with MUONROI_DISABLE_SMART_MCP=1.
958
- const smartMcp = process.env.MUONROI_DISABLE_SMART_MCP !== "1";
959
- const browserSignal =
960
- /https?:\/\/\S+|\b(screenshot|browser|playwright|chrome|figma|canva|render|webpage|website|url|hyperlink|navigate|click|scrape)\b/i.test(
961
- userMessage,
962
- );
963
- const SKIP_WHEN_NO_BROWSER = /playwright|chrome|browser|devtools|vision|figma|canva/i;
964
- const allServers = loadMcpServers();
965
- const filteredServers =
966
- smartMcp && !browserSignal ? allServers.filter((s) => !SKIP_WHEN_NO_BROWSER.test(s.id)) : allServers;
967
- const mcpBundle = await buildMcpToolSet(filteredServers, {
968
- onOAuthRequired: (_serverId, url) => {
969
- const urlStr = url.toString();
970
- import("child_process").then(({ exec }) => {
971
- const cmd =
972
- process.platform === "win32"
973
- ? `start "" "${urlStr}"`
974
- : process.platform === "darwin"
975
- ? `open "${urlStr}"`
976
- : `xdg-open "${urlStr}"`;
977
- exec(cmd);
978
- });
979
- },
980
- });
981
- closeMcp = mcpBundle.close;
982
- rawToolSet = { ...rawToolSet, ...mcpBundle.tools };
983
- if (mcpBundle.errors.length > 0) {
984
- yield { type: "content", content: `MCP unavailable: ${mcpBundle.errors.join(" | ")}\n\n` };
985
- }
986
- }
987
-
988
- // PIL response tools: inject structured output tool when taskType detected
989
- if (_hasResponseTools && turnCaps.supportsClientTools(runtime.modelInfo)) {
990
- rawToolSet = { ...rawToolSet, ..._pilResponseTools };
991
- captureToolSchemas(_pilResponseTools);
992
- }
993
-
994
- // Apply the top-level cumulative cap once over the fully-assembled
995
- // raw tool set. State is per-turn; each turn gets a fresh budget.
996
- const topLevelCap = wrapToolSetWithCap(rawToolSet, {
997
- maxCumulativeChars: getTopLevelToolBudgetChars(),
998
- midTierRatio: 0.5,
999
- highTierRatio: 0.8,
1000
- label: "top-level",
1001
- });
1002
- // Phase C3: layer cross-turn dedup on top of the top-level cap.
1003
- const tools: ToolSet = wrapToolSetWithReadBudget(
1004
- wrapToolSetWithDedup(topLevelCap.tools, deps.crossTurnDedup),
1005
- deps.readBudget,
1006
- );
1007
- captureToolSchemas(tools);
1008
- let responseToolCalled = false;
1009
-
1010
- // G3: providerOptions assembly is owned by the capability layer
1011
- // (src/providers/capabilities.ts). buildTurnProviderOptions feeds
1012
- // sessionId in so openai.promptCacheKey is derived per turn.
1013
- // The task-type-driven anthropic.thinking budget override stays
1014
- // here because it depends on PIL task context, not provider quirks.
1015
- // biome-ignore lint/suspicious/noExplicitAny: matches RuntimeResult.providerOptions shape (any) used downstream
1016
- const baseProviderOpts: any = buildTurnProviderOptions(runtime, { sessionId: deps.session?.id }) ?? {};
1017
- const providerOpts = runtime.modelInfo?.reasoning
1018
- ? {
1019
- ...baseProviderOpts,
1020
- anthropic: {
1021
- ...(baseProviderOpts.anthropic ?? {}),
1022
- thinking: {
1023
- type: "enabled" as const,
1024
- budgetTokens:
1025
- taskTypeToReasoningEffort(pilCtx.taskType) === "high"
1026
- ? 32_768
1027
- : taskTypeToReasoningEffort(pilCtx.taskType) === "medium"
1028
- ? 8_192
1029
- : 2_048,
1030
- },
1031
- },
1032
- }
1033
- : baseProviderOpts;
1034
- // Use catalog's thinkingType field instead of regex matching.
1035
- // providerOpts is loosely typed (Record<string, unknown>) after the
1036
- // g1 capability refactor — narrow with a local typed view.
1037
- const thinkingModelInfo = getModelInfo(runtime.modelId);
1038
- const providerOptsAnyView = providerOpts as {
1039
- anthropic?: { thinking?: { type?: string } };
1040
- };
1041
- if (
1042
- providerOptsAnyView.anthropic?.thinking?.type === "enabled" &&
1043
- thinkingModelInfo?.thinkingType === "adaptive"
1044
- ) {
1045
- providerOptsAnyView.anthropic.thinking = { type: "adaptive" as unknown as "enabled" };
1046
- }
1047
-
1048
- // OpenAI api-key path: `store: true` is seeded by OpenAIStrategy
1049
- // via factory.defaultProviderOptions (Phase 12.2-G4 migration).
1050
- // OAuth backend (ChatGPT Codex) overrides with `store: false` via
1051
- // the auth registry. Both flow through resolveModelRuntime →
1052
- // runtime.providerOptions → buildTurnProviderOptions and arrive
1053
- // here merged into providerOpts.openai.
1054
- // Top-level dropParam — shared with sub-agent path via shouldDropParam.
1055
- // See src/providers/runtime.ts for the central rule.
1056
- const dropParam = (p: "maxOutputTokens" | "temperature" | "topP"): boolean => shouldDropParam(runtime, p);
1057
-
1058
- const systemForModel = runtime.modelId.startsWith("claude")
1059
- ? [
1060
- {
1061
- role: "system" as const,
1062
- content: systemParts.staticPrefix,
1063
- providerOptions: { anthropic: { cacheControl: { type: "ephemeral" as const } } },
1064
- },
1065
- { role: "system" as const, content: system.slice(systemParts.staticPrefix.length) },
1066
- ]
1067
- : system;
1068
-
1069
- // Capture prompt-size breakdown so recordUsage can attach it to the
1070
- // cost-log entry. Without this, "system prompt is huge" is unfalsifiable.
1071
- // chars/4 ≈ tokens for English; reported as chars to keep math obvious.
1072
- const messagesChars = deps.messages.reduce((s, m) => {
1073
- const c = m.content;
1074
- if (typeof c === "string") return s + c.length;
1075
- if (Array.isArray(c)) {
1076
- for (const part of c) {
1077
- if (typeof (part as { text?: unknown }).text === "string") {
1078
- s += (part as { text: string }).text.length;
1079
- }
1080
- }
1081
- }
1082
- return s;
1083
- }, 0);
1084
- let toolsChars = 0;
1085
- let toolsCount = 0;
1086
- for (const [name, t] of Object.entries(tools)) {
1087
- toolsCount += 1;
1088
- toolsChars += name.length;
1089
- const desc = (t as { description?: string }).description;
1090
- if (typeof desc === "string") toolsChars += desc.length;
1091
- try {
1092
- // Schemas often dominate tool size on non-Anthropic providers
1093
- // (Zod-derived JSON schemas can be 2-5K chars per tool).
1094
- const params =
1095
- (t as { parameters?: unknown; inputSchema?: unknown }).parameters ??
1096
- (t as { inputSchema?: unknown }).inputSchema;
1097
- if (params) toolsChars += JSON.stringify(params).length;
1098
- } catch {
1099
- /* best-effort */
1100
- }
1101
- }
1102
- deps.setLastPromptBreakdown({
1103
- systemChars: system.length,
1104
- staticPrefixChars: systemParts.staticPrefix.length,
1105
- dynamicSuffixChars: systemParts.dynamicSuffix.length,
1106
- playwrightGuidanceChars: playwrightGuidance.length,
1107
- messagesChars,
1108
- messagesCount: deps.messages.length,
1109
- toolsChars,
1110
- toolsCount,
1111
- });
1112
-
1113
- // Task 2.6a — assign a fresh correlation ID for this top-level streamText call.
1114
- const _topCallId = crypto.randomUUID();
1115
- deps.setCurrentCallId(_topCallId);
1116
- // Phase B4: compact older tool_result parts before each top-level
1117
- // step once cumulative message chars exceed the configured threshold.
1118
- // The compactor preserves system + first user verbatim and keeps the
1119
- // last N tool turns intact; older results are rewritten into short
1120
- // stubs. Symmetric to the B3 sub-agent path; reuses the same module
1121
- // with `label: "top-level"` so the stub text reflects which loop
1122
- // elided the content.
1123
- const topLevelCompactThreshold = getTopLevelCompactThresholdChars();
1124
- const topLevelCompactKeepLast = getTopLevelCompactKeepLast();
1125
- // Phase O1 — capture providerOptions SHAPE (types only) for forensics.
1126
- deps.setLastProviderOptionsShape(
1127
- Object.keys(providerOpts).length > 0 ? extractProviderOptionsShape(providerOpts) : null,
1128
- );
1129
- if (wireDebug.enabled) {
1130
- wireDebug.logRequest({
1131
- providerId: runtime.modelInfo?.provider ?? "unknown",
1132
- modelId: runtime.modelId,
1133
- messages: deps.messages as readonly unknown[],
1134
- systemChars: (systemForModel as unknown as { length?: number })?.length ?? 0,
1135
- toolNames: tools ? Object.keys(tools as Record<string, unknown>) : undefined,
1136
- providerOptions: providerOpts,
1137
- });
1138
- }
1139
- // SiliconFlow DeepSeek thinking-mode reasoning_content workaround
1140
- // (see siliconflow-history.ts). Sub-agent path applies the same strip
1141
- // via the capability hook; identity for every other provider.
1142
- const _topMessagesForCall = turnCaps.sanitizeHistory(deps.messages) as typeof deps.messages;
1143
- const result = streamText({
1144
- model: runtime.model,
1145
- system: systemForModel,
1146
- messages: _topMessagesForCall,
1147
- tools,
1148
- toolChoice: _hasResponseTools && turnCaps.supportsClientTools(runtime.modelInfo) ? "auto" : undefined,
1149
- stopWhen:
1150
- stepRouterPhase === "phase1"
1151
- ? stepCountIs(1) // SAMR Phase 1: stop after reasoning step
1152
- : stepCountIs(deps.maxToolRounds),
1153
- maxRetries: 0,
1154
- abortSignal: signal,
1155
- prepareStep: ({ stepNumber: sn, messages: stepMessages }) => {
1156
- if (sn < 1) return {};
1157
- const stripped = turnCaps.sanitizeHistory(stepMessages) as typeof stepMessages;
1158
- const compacted = compactSubAgentMessages(stripped, {
1159
- thresholdChars: topLevelCompactThreshold,
1160
- keepLastTurns: topLevelCompactKeepLast,
1161
- label: "top-level",
1162
- });
1163
- if (compacted === stripped && stripped === stepMessages) return {};
1164
- return { messages: compacted };
1165
- },
1166
- ...(dropParam("temperature") ? {} : { temperature: 0.7 }),
1167
- ...(dropParam("maxOutputTokens") ? {} : { maxOutputTokens: taskTypeToMaxTokens(pilCtx.taskType) }),
1168
- ...(Object.keys(providerOpts).length > 0 ? { providerOptions: providerOpts } : {}),
1169
- experimental_onStepStart: (event: unknown) => {
1170
- stepNumber = getStepNumber(event, stepNumber + 1);
1171
- notifyObserver(observer?.onStepStart, {
1172
- stepNumber,
1173
- timestamp: Date.now(),
1174
- });
1175
- },
1176
- onStepFinish: (event: unknown) => {
1177
- const currentStep = getStepNumber(event, Math.max(stepNumber, 0));
1178
- stepNumber = Math.max(stepNumber, currentStep);
1179
- const stepUsage = getUsage(event);
1180
- notifyObserver(observer?.onStepFinish, {
1181
- stepNumber: currentStep,
1182
- timestamp: Date.now(),
1183
- finishReason: getFinishReason(event),
1184
- usage: stepUsage,
1185
- });
1186
- // Realtime status bar update per step
1187
- if (stepUsage.inputTokens || stepUsage.outputTokens) {
1188
- deps.recordUsage(stepUsage, "message", runtime.modelId);
1189
- }
1190
- },
1191
- onFinish: ({ finishReason }) => {
1192
- // Task 2.6b — emit llm-done (agent-mode only).
1193
- try {
1194
- const _ar = (globalThis as Record<string, unknown>).__muonroiAgentRuntime as
1195
- | { emitEvent: (e: unknown) => void }
1196
- | undefined;
1197
- _ar?.emitEvent({
1198
- t: "event",
1199
- kind: "llm-done",
1200
- correlationId: _topCallId,
1201
- totalChars: assistantText.length,
1202
- finishReason: finishReason ?? "stop",
1203
- });
1204
- } catch {
1205
- /* best-effort */
1206
- }
1207
- deps.setCurrentCallId("");
1208
- },
1209
- });
1210
-
1211
- let _topTokenIndex = 0;
1212
- const _wireProviderIdTop = runtime.modelInfo?.provider ?? "unknown";
1213
- for await (const part of result.fullStream) {
1214
- if (signal.aborted) {
1215
- yield { type: "content", content: "\n\n[Cancelled]" };
1216
- break;
1217
- }
1218
-
1219
- if (wireDebug.enabled) {
1220
- wireDebug.logChunk(_wireProviderIdTop, String(part.type ?? "unknown"), {
1221
- hasText:
1222
- typeof (part as { text?: string }).text === "string"
1223
- ? (part as { text: string }).text.length
1224
- : undefined,
1225
- hasReasoning:
1226
- typeof (part as unknown as { reasoning?: string }).reasoning === "string"
1227
- ? (part as unknown as { reasoning: string }).reasoning.length
1228
- : undefined,
1229
- });
1230
- if (part.type === "error") {
1231
- wireDebug.logError(_wireProviderIdTop, (part as { error?: unknown }).error);
1232
- }
1233
- }
1234
-
1235
- switch (part.type) {
1236
- case "text-delta":
1237
- assistantText += part.text;
1238
- // Task 2.6b — emit llm-token (agent-mode only; high-volume, default-off per Phase 4).
1239
- try {
1240
- const _ar = (globalThis as Record<string, unknown>).__muonroiAgentRuntime as
1241
- | { emitEvent: (e: unknown) => void }
1242
- | undefined;
1243
- _ar?.emitEvent({
1244
- t: "event",
1245
- kind: "llm-token",
1246
- correlationId: _topCallId,
1247
- delta: part.text,
1248
- tokenIndex: _topTokenIndex++,
1249
- });
1250
- } catch {
1251
- /* best-effort */
1252
- }
1253
- yield { type: "content", content: part.text };
1254
- break;
1255
-
1256
- case "reasoning-delta":
1257
- reasoningPreview = `${reasoningPreview}${part.text}`.slice(-256);
1258
- if (containsEncryptedReasoning(reasoningPreview)) {
1259
- if (!encryptedReasoningHidden) {
1260
- encryptedReasoningHidden = true;
1261
- yield { type: "reasoning", content: "[Encrypted reasoning hidden]" };
1262
- }
1263
- break;
1264
- }
1265
- // P0 native observation: accumulate reasoning for intent context.
1266
- deps.appendTurnAssistantReasoning(part.text);
1267
- yield { type: "reasoning", content: part.text };
1268
- break;
1269
-
1270
- case "tool-call": {
1271
- const tc = toToolCall(part);
1272
- activeToolCalls.push(tc);
1273
- // SAMR: track that Phase 1 produced tool calls → transition to Phase 2
1274
- if (stepRouterPhase === "phase1") phase1HadToolCalls = true;
1275
-
1276
- // EE PreToolUse hook: fire intercept before tool execution.
1277
- {
1278
- const turnAssistantReasoning = deps.getTurnAssistantReasoning();
1279
- const intentContext: import("../hooks/types.js").PreToolIntentContext = {
1280
- ...(turnAssistantReasoning
1281
- ? { assistantReasoningExcerpt: turnAssistantReasoning.slice(-200) }
1282
- : {}),
1283
- ...(deps.priorWarningIdsInSession.size > 0
1284
- ? {
1285
- priorWarningIdsInSession: Array.from(deps.priorWarningIdsInSession).slice(-20),
1286
- }
1287
- : {}),
1288
- ...(pilCtx.gsdPhase ? { gsdPhase: pilCtx.gsdPhase } : {}),
1289
- ...(userMessage.slice(0, 200) ? { userGoalExcerpt: userMessage.slice(0, 200) } : {}),
1290
- };
1291
- const preInput: PreToolUseHookInput = {
1292
- hook_event_name: "PreToolUse",
1293
- tool_name: tc.function.name,
1294
- tool_input: JSON.parse(tc.function.arguments || "{}"),
1295
- session_id: deps.session?.id,
1296
- cwd: deps.bash.getCwd(),
1297
- ...(Object.keys(intentContext).length > 0 ? { intent_context: intentContext } : {}),
1298
- };
1299
- const preResult = await deps.fireHook(preInput, signal).catch(() => ({
1300
- blocked: false,
1301
- blockingErrors: [] as Array<{ command: string; stderr: string }>,
1302
- preventContinuation: false,
1303
- additionalContexts: [] as string[],
1304
- results: [] as import("../hooks/types.js").HookResult[],
1305
- eeMatches: [] as import("../hooks/types.js").EEMatchEntry[],
1306
- }));
1307
- for (const ctx of preResult.additionalContexts ?? []) {
1308
- yield { type: "content", content: `${ctx}\n` };
1309
- }
1310
- // Store structured EE matches for session guidance injection on next turn.
1311
- for (const m of preResult.eeMatches ?? []) {
1312
- deps.sessionEEGuidance.set(m.id, {
1313
- toolName: m.toolName,
1314
- message: m.message,
1315
- why: m.why,
1316
- confidence: m.confidence,
1317
- });
1318
- // Cap at 30 entries — oldest first, trim when exceeded.
1319
- if (deps.sessionEEGuidance.size > 30) {
1320
- const firstKey = deps.sessionEEGuidance.keys().next().value;
1321
- if (firstKey !== undefined) deps.sessionEEGuidance.delete(firstKey);
1322
- }
1323
- }
1324
- // P0 native observation: track which principle IDs surfaced
1325
- // this turn so the next intercept can dedup server-side.
1326
- try {
1327
- const { getLastSurfacedState } = await import("../ee/intercept.js");
1328
- const { surfacedIds } = getLastSurfacedState();
1329
- for (const id of surfacedIds) deps.priorWarningIdsInSession.add(id);
1330
- // Cap memory: keep only most-recent 100 IDs.
1331
- if (deps.priorWarningIdsInSession.size > 100) {
1332
- const arr = Array.from(deps.priorWarningIdsInSession);
1333
- deps.setPriorWarningIdsInSession(new Set(arr.slice(-100)));
1334
- }
1335
- } catch {
1336
- /* fail-open */
1337
- }
1338
- }
1339
-
1340
- // Pitfall 9: log the pending call so reconcile() can recover any
1341
- // staged .tmp files if the process is killed before tool-result.
1342
- if (deps.pendingCalls) {
1343
- const turnId = deps.session?.id ?? "anon";
1344
- const callId = stableCallId(turnId, tc.function.name, tc.function.arguments);
1345
- // Phase 0: predictStagedPaths = [] for all tools (refined in Phase 1).
1346
- void deps.pendingCalls.begin({ call_id: callId, tool_name: tc.function.name }).catch(() => {});
1347
- // Attach callId to the ToolCall so tool-result can end it.
1348
- (tc as ToolCall & { _pendingCallId?: string })._pendingCallId = callId;
1349
- }
1350
-
1351
- // Phase A4: write-ahead persistence — insert a pending row into
1352
- // tool_calls BEFORE executing the tool. If the stream throws
1353
- // mid-call (e.g. provider 5xx, abort, network drop), this row
1354
- // remains as `pending` so `usage forensics` can show the args
1355
- // the model passed. The post-stream appendMessages() path
1356
- // (INSERT OR IGNORE + UPDATE) will finalize this row to
1357
- // `completed` once the turn settles normally.
1358
- if (deps.sessionStore && deps.session) {
1359
- // Predicted assistant seq: user message + assistant message
1360
- // are appended atomically by appendCompletedTurn().
1361
- // getNextMessageSequence() returns the seq the user message
1362
- // will get; the assistant message is the next one after.
1363
- let predictedSeq = -1;
1364
- try {
1365
- predictedSeq = getNextMessageSequence(deps.session.id) + 1;
1366
- } catch {
1367
- /* fail-open — leave predictedSeq=-1; post-stream UPDATE corrects it */
1368
- }
1369
- persistToolCallWriteAhead(
1370
- deps.session.id,
1371
- predictedSeq,
1372
- tc.id,
1373
- tc.function.name,
1374
- tc.function.arguments || "{}",
1375
- );
1376
- }
1377
- notifyObserver(observer?.onToolStart, {
1378
- toolCall: tc,
1379
- timestamp: Date.now(),
1380
- });
1381
- // Interaction log: tool call start
1382
- try {
1383
- if (deps.session) {
1384
- logInteraction(deps.session.id, "tool_call", {
1385
- eventSubtype: tc.function.name,
1386
- data: {
1387
- toolCallId: tc.id,
1388
- argsPreview: tc.function.arguments.slice(0, 200),
1389
- },
1390
- });
1391
- }
1392
- } catch {
1393
- /* fail-open */
1394
- }
1395
- yield { type: "tool_calls", toolCalls: [tc] };
1396
- break;
1397
- }
1398
-
1399
- case "tool-result": {
1400
- const tc: ToolCall = {
1401
- id: part.toolCallId,
1402
- type: "function",
1403
- function: { name: part.toolName, arguments: JSON.stringify(part.input ?? {}) },
1404
- };
1405
- let tr = toToolResult(part.output);
1406
-
1407
- // Vision Bridge: proxy image-bearing tool results for text-only models (any tool, not just MCP)
1408
- try {
1409
- const bridgeResult = await bridgeMcpToolResult(
1410
- part.toolName,
1411
- tr.output,
1412
- turnModelId,
1413
- signal,
1414
- part.toolCallId,
1415
- );
1416
- if (bridgeResult.proxied) {
1417
- tr = {
1418
- ...tr,
1419
- output:
1420
- typeof bridgeResult.output === "string"
1421
- ? bridgeResult.output
1422
- : JSON.stringify(bridgeResult.output),
1423
- };
1424
- yield { type: "content", content: `[Vision Bridge: image → text for ${turnModelId}]\n` };
1425
- }
1426
- } catch {
1427
- /* fail-open */
1428
- }
1429
-
1430
- // Pitfall 9: settle the pending call log entry.
1431
- if (deps.pendingCalls) {
1432
- const pending = activeToolCalls.find((t) => t.id === part.toolCallId);
1433
- const callId = (pending as ToolCall & { _pendingCallId?: string })?._pendingCallId;
1434
- if (callId) {
1435
- const endStatus = signal.aborted ? "aborted" : "settled";
1436
- void deps.pendingCalls.end(callId, endStatus).catch(() => {});
1437
- }
1438
- }
1439
- // EE PostToolUse hook: fire-and-forget after tool execution.
1440
- {
1441
- const postInput: PostToolUseHookInput = {
1442
- hook_event_name: "PostToolUse",
1443
- tool_name: part.toolName,
1444
- tool_input: (part.input as Record<string, unknown>) ?? {},
1445
- tool_output:
1446
- typeof tr.output === "string"
1447
- ? { text: tr.output }
1448
- : ((tr.output as unknown as Record<string, unknown>) ?? {}),
1449
- session_id: deps.session?.id,
1450
- cwd: deps.bash.getCwd(),
1451
- };
1452
- await deps.fireHook(postInput, signal).catch(() => {});
1453
- }
1454
-
1455
- // Response tool: yield as structured_response instead of tool_result.
1456
- // AI SDK v5 wraps tool outputs as `{type:"json", value:{...}}`; unwrap
1457
- // to expose the schema-shaped payload to the UI renderer.
1458
- if (isResponseTool(part.toolName)) {
1459
- responseToolCalled = true;
1460
- const taskType = getResponseTaskType(part.toolName);
1461
- const rawOutput = part.output as unknown;
1462
- const unwrapped =
1463
- rawOutput && typeof rawOutput === "object" && (rawOutput as { type?: string }).type === "json"
1464
- ? ((rawOutput as { value?: unknown }).value ?? {})
1465
- : (rawOutput ?? {});
1466
- yield {
1467
- type: "structured_response" as StreamChunk["type"],
1468
- structuredResponse: {
1469
- taskType: taskType ?? part.toolName,
1470
- data: unwrapped as Record<string, unknown>,
1471
- },
1472
- };
1473
- notifyObserver(observer?.onToolFinish, { toolCall: tc, toolResult: tr, timestamp: Date.now() });
1474
- break;
1475
- }
1476
-
1477
- notifyObserver(observer?.onToolFinish, {
1478
- toolCall: tc,
1479
- toolResult: tr,
1480
- timestamp: Date.now(),
1481
- });
1482
- // Interaction log: tool result
1483
- try {
1484
- if (deps.session) {
1485
- const outputPreview =
1486
- typeof tr.output === "string" ? tr.output.slice(0, 200) : JSON.stringify(tr.output).slice(0, 200);
1487
- logInteraction(deps.session.id, "tool_result", {
1488
- eventSubtype: tc.function.name,
1489
- data: { success: tr.success, outputPreview },
1490
- });
1491
- }
1492
- } catch {
1493
- /* fail-open */
1494
- }
1495
- yield { type: "tool_result", toolCall: tc, toolResult: tr };
1496
- break;
1497
- }
1498
-
1499
- case "tool-error": {
1500
- // AI SDK emits this when tool execution throws/aborts before
1501
- // producing a tool-result. Without this branch, the tool_call
1502
- // log row has no matching tool_result and the EE judge never
1503
- // sees the failure → silent ~1.6% pairing leak in prod DB.
1504
- const errPart = part as {
1505
- type: "tool-error";
1506
- toolCallId: string;
1507
- toolName: string;
1508
- input?: unknown;
1509
- error: unknown;
1510
- };
1511
- const tc: ToolCall = {
1512
- id: errPart.toolCallId,
1513
- type: "function",
1514
- function: { name: errPart.toolName, arguments: JSON.stringify(errPart.input ?? {}) },
1515
- };
1516
- const errMsg =
1517
- errPart.error instanceof Error
1518
- ? errPart.error.message
1519
- : typeof errPart.error === "string"
1520
- ? errPart.error
1521
- : JSON.stringify(errPart.error);
1522
- const tr = { success: false, output: `[tool-error] ${errMsg}` };
1523
-
1524
- // Settle pending-call ledger so we don't leak stale .tmp files.
1525
- if (deps.pendingCalls) {
1526
- const pending = activeToolCalls.find((t) => t.id === errPart.toolCallId);
1527
- const callId = (pending as ToolCall & { _pendingCallId?: string })?._pendingCallId;
1528
- if (callId) void deps.pendingCalls.end(callId, "settled").catch(() => {});
1529
- }
1530
-
1531
- // Phase A4: mark the write-ahead tool_calls row as `errored`.
1532
- // The post-stream appendMessages() path does NOT see tool-error
1533
- // parts in the assistant message content (the SDK doesn't emit
1534
- // them there), so without this explicit update the row would
1535
- // remain `pending` after a clean tool failure.
1536
- if (deps.session) {
1537
- markToolCallErrored(deps.session.id, errPart.toolCallId, errMsg);
1538
- }
1539
-
1540
- // Fire PostToolUseFailure so EE judge can record IGNORED outcome.
1541
- {
1542
- const failInput: PostToolUseFailureHookInput = {
1543
- hook_event_name: "PostToolUseFailure",
1544
- tool_name: errPart.toolName,
1545
- tool_input: (errPart.input as Record<string, unknown>) ?? {},
1546
- error: errMsg,
1547
- session_id: deps.session?.id,
1548
- cwd: deps.bash.getCwd(),
1549
- };
1550
- await deps.fireHook(failInput, signal).catch(() => {});
1551
- }
1552
-
1553
- try {
1554
- if (deps.session) {
1555
- logInteraction(deps.session.id, "tool_result", {
1556
- eventSubtype: errPart.toolName,
1557
- data: { success: false, error: errMsg.slice(0, 500), reason: "tool-error" },
1558
- });
1559
- }
1560
- } catch {
1561
- /* fail-open */
1562
- }
1563
-
1564
- notifyObserver(observer?.onToolFinish, { toolCall: tc, toolResult: tr, timestamp: Date.now() });
1565
- yield { type: "tool_result", toolCall: tc, toolResult: tr };
1566
- break;
1567
- }
1568
-
1569
- case "tool-approval-request": {
1570
- const approvalPart = part as unknown as {
1571
- approvalId: string;
1572
- toolCall: { toolCallId: string; toolName: string; input: unknown };
1573
- };
1574
- const toolCallId = approvalPart.toolCall?.toolCallId ?? "";
1575
- const pendingTc = activeToolCalls.find((tc) => tc.id === toolCallId);
1576
- const tcForChunk = pendingTc ?? {
1577
- id: toolCallId,
1578
- type: "function" as const,
1579
- function: {
1580
- name: approvalPart.toolCall?.toolName ?? "paid_request",
1581
- arguments: JSON.stringify(approvalPart.toolCall?.input ?? {}),
1582
- },
1583
- };
1584
-
1585
- // Payment pre-check disabled — Stripe billing pending.
1586
- const paymentPrecheck: import("../types/index").PaymentPrecheck | undefined = undefined;
1587
-
1588
- // Plan 03-01: check permission mode before yielding approval request to UI.
1589
- // auto-edit auto-approves file ops; yolo auto-approves everything.
1590
- const toolName = approvalPart.toolCall?.toolName ?? "";
1591
- if (!toolNeedsApproval(toolName, deps.permissionMode)) {
1592
- // Auto-approve: respond directly without surfacing to UI.
1593
- deps.respondToToolApproval(approvalPart.approvalId, true);
1594
- break;
1595
- }
1596
-
1597
- yield {
1598
- type: "tool_approval_request",
1599
- approvalId: approvalPart.approvalId,
1600
- toolCall: tcForChunk,
1601
- paymentPrecheck,
1602
- };
1603
- break;
1604
- }
1605
-
1606
- case "error": {
1607
- const authError = isAuthenticationError(part.error);
1608
- const friendly = humanizeApiError(part.error);
1609
- notifyObserver(observer?.onError, {
1610
- message: friendly,
1611
- timestamp: Date.now(),
1612
- });
1613
- // Interaction log: error
1614
- try {
1615
- if (deps.session) {
1616
- logInteraction(deps.session.id, "error", {
1617
- eventSubtype: authError ? "auth" : "api",
1618
- data: { message: friendly.slice(0, 200) },
1619
- });
1620
- }
1621
- } catch {
1622
- /* fail-open */
1623
- }
1624
- yield {
1625
- type: "error",
1626
- content: friendly,
1627
- isAuthError: authError,
1628
- };
1629
- break;
1630
- }
1631
-
1632
- case "abort":
1633
- yield { type: "content", content: "\n\n[Cancelled]" };
1634
- break;
1635
- }
1636
- }
1637
-
1638
- // ─── SAMR Phase 1 → Phase 2 transition ─────────────────────────
1639
- // Phase 1 (premium model) produced tool calls but the SDK stopped
1640
- // before executing them (stopWhen: stepCountIs(1)). Append the
1641
- // assistant message to deps.messages and restart the loop with
1642
- // the fast execution model. Phase 2's streamText call will see
1643
- // the pending tool calls and execute them automatically.
1644
- if (stepRouterPhase === "phase1" && phase1HadToolCalls) {
1645
- try {
1646
- const phase1Response = await result.response;
1647
- // Append only new messages (assistant message with tool calls)
1648
- const newMsgs = phase1Response.messages.slice(deps.messages.length);
1649
- for (const msg of newMsgs) {
1650
- if (msg.role === "assistant") {
1651
- deps.messages.push(msg);
1652
- }
1653
- }
1654
- } catch {
1655
- // If response extraction fails, fall through to normal completion
1656
- }
1657
- stepRouterPhase = "phase2";
1658
- continue; // Re-enter while loop with Phase 2 (fast) model
1659
- }
1660
-
1661
- if (signal.aborted) {
1662
- deps.discardAbortedTurn(userModelMessage);
1663
- yield { type: "done" };
1664
- return;
1665
- }
1666
-
1667
- try {
1668
- const response = await result.response;
1669
- if (!signal.aborted) {
1670
- // Scrub oversized base64 image payloads from tool-result parts
1671
- // BEFORE persisting. The vision bridge above only modified the
1672
- // transient `tr` shown to the user — `response.messages` from
1673
- // the AI SDK still carries the full base64 (e.g. Playwright
1674
- // screenshot, ~1.5MB). Persisting that lets it accumulate and
1675
- // overflow the model's context on subsequent turns.
1676
- const scrubbed = scrubImagePayloadsInMessages(response.messages);
1677
- deps.appendCompletedTurn(userModelMessage, sanitizeModelMessages(scrubbed));
1678
- streamOk = true;
1679
- }
1680
- } catch (responseError: unknown) {
1681
- if (
1682
- !attemptedOverflowRecovery &&
1683
- !assistantText.trim() &&
1684
- modelInfo &&
1685
- isContextLimitError(responseError)
1686
- ) {
1687
- attemptedOverflowRecovery = true;
1688
- continue;
1689
- }
1690
- }
1691
-
1692
- if (signal.aborted) {
1693
- deps.discardAbortedTurn(userModelMessage);
1694
- yield { type: "done" };
1695
- return;
1696
- }
1697
-
1698
- if (!streamOk && assistantText.trim()) {
1699
- deps.appendCompletedTurn(userModelMessage, [{ role: "assistant", content: assistantText }]);
1700
- }
1701
-
1702
- // Fallback: model responded in text despite tool_choice=required
1703
- // Attempt JSON extraction from assistant text → yield as structured_response
1704
- if (_hasResponseTools && !responseToolCalled && pilCtx.taskType && assistantText.trim()) {
1705
- try {
1706
- const jsonMatch = assistantText.match(/\{[\s\S]*\}/);
1707
- if (jsonMatch) {
1708
- const parsed = JSON.parse(jsonMatch[0]) as Record<string, unknown>;
1709
- if (Object.keys(parsed).length > 0) {
1710
- responseToolCalled = true;
1711
- yield {
1712
- type: "structured_response" as StreamChunk["type"],
1713
- structuredResponse: {
1714
- taskType: pilCtx.taskType,
1715
- data: parsed,
1716
- },
1717
- };
1718
- }
1719
- }
1720
- } catch {
1721
- // JSON parse failed — leave as text-fallback
1722
- }
1723
- }
1724
-
1725
- // Track PIL output mode for /optimize metrics
1726
- {
1727
- const { setLastOutputMode } = await import("../pil/store.js");
1728
- if (!_hasResponseTools) setLastOutputMode("conversational");
1729
- else if (responseToolCalled) setLastOutputMode("structured");
1730
- else setLastOutputMode("text-fallback");
1731
- }
1732
-
1733
- // ROUTE-11: Fire routeFeedback after turn completes (success path).
1734
- // Must come AFTER posttool calls (posttool fires during tool-result processing above).
1735
- // Fire-and-forget — no await. Skipped when taskHash is null (bridge absent).
1736
- {
1737
- const turnDuration = Date.now() - turnStartMs;
1738
- if (taskHash) {
1739
- const tier = taskTypeToTier(pilCtx.taskType);
1740
- void routeFeedback(
1741
- taskHash,
1742
- tier,
1743
- runtime.modelId,
1744
- "success", // Phase 6: all normal completions = 'success'
1745
- 0, // retryCount: 0 for first attempt
1746
- turnDuration,
1747
- );
1748
- }
1749
- // HTTP path: also report via router store taskHash (covers warm/cold EE routes)
1750
- const storeHash = routerStore.getState().taskHash;
1751
- if (storeHash) {
1752
- reportRouteOutcome(storeHash, "success", turnDuration);
1753
- }
1754
- }
1755
-
1756
- // Interaction log: agent response complete
1757
- try {
1758
- if (deps.session) {
1759
- const sb = statusBarStore.getState();
1760
- const turnDurationMs = Date.now() - turnStartMs;
1761
- logInteraction(deps.session.id, "agent_response", {
1762
- model: turnModelId,
1763
- inputTokens: sb.in_tokens,
1764
- outputTokens: sb.out_tokens,
1765
- durationMs: turnDurationMs,
1766
- data: {
1767
- textLength: assistantText.length,
1768
- toolCallCount: activeToolCalls.length,
1769
- compacted: deps.getCompactedThisTurn(),
1770
- },
1771
- });
1772
- }
1773
- } catch {
1774
- /* fail-open */
1775
- }
1776
-
1777
- const stopInput: StopHookInput = {
1778
- hook_event_name: "Stop",
1779
- session_id: deps.session?.id,
1780
- cwd: deps.bash.getCwd(),
1781
- };
1782
- await deps.fireHook(stopInput, signal).catch(() => {});
1783
-
1784
- // Debug trace: emit pipeline summary
1785
- if (_debugOn) {
1786
- const sb = statusBarStore.getState();
1787
- const defaultInfo = getModelInfo(deps.modelId);
1788
- const usedInfo = getModelInfo(turnModelId);
1789
- const routerSaved =
1790
- defaultInfo && usedInfo && defaultInfo.outputPrice > usedInfo.outputPrice
1791
- ? (sb.out_tokens * (defaultInfo.outputPrice - usedInfo.outputPrice)) / 1_000_000
1792
- : 0;
1793
- const cacheSaved =
1794
- sb.cache_read_tokens > 0 && defaultInfo
1795
- ? (sb.cache_read_tokens *
1796
- (defaultInfo.inputPrice - (defaultInfo.cachedInputPrice ?? defaultInfo.inputPrice * 0.1))) /
1797
- 1_000_000
1798
- : 0;
1799
- const trace: TurnTrace = {
1800
- turn_id: _debugTurnId,
1801
- timestamp: turnStartMs,
1802
- raw_prompt: userMessage,
1803
- steps: _debugSteps,
1804
- model_requested: deps.modelId,
1805
- model_used: turnModelId,
1806
- routed: turnModelId !== deps.modelId,
1807
- input_tokens: sb.in_tokens,
1808
- output_tokens: sb.out_tokens,
1809
- cache_read_tokens: sb.cache_read_tokens,
1810
- cost_usd: sb.session_usd,
1811
- estimated_savings: {
1812
- pil_tokens_saved: _pilEnrichmentDeltaSnapshot > 0 ? _pilEnrichmentDeltaSnapshot : 0,
1813
- cache_tokens_saved: sb.cache_read_tokens,
1814
- router_cost_saved_usd: routerSaved,
1815
- total_tokens_saved:
1816
- (_pilEnrichmentDeltaSnapshot > 0 ? _pilEnrichmentDeltaSnapshot : 0) + sb.cache_read_tokens,
1817
- total_cost_saved_usd: routerSaved + cacheSaved,
1818
- },
1819
- };
1820
- recordTurnTrace(trace);
1821
-
1822
- const traceLines: string[] = [];
1823
- traceLines.push("\n┌─ Pipeline Trace ─────────────────────────");
1824
- for (const step of _debugSteps) {
1825
- const dur = step.duration_ms < 1 ? "<1ms" : `${step.duration_ms}ms`;
1826
- const saved = step.tokens_saved ? ` (saved ~${step.tokens_saved} tok)` : "";
1827
- traceLines.push(`│ ▸ ${step.name} [${dur}]${saved}`);
1828
- traceLines.push(`│ ${step.output_summary}`);
1829
- }
1830
- const routeLabel = trace.routed ? `${trace.model_requested}→${trace.model_used}` : trace.model_used;
1831
- traceLines.push(
1832
- `│ Model: ${routeLabel} | ↑${sb.in_tokens} ↓${sb.out_tokens} | $${sb.session_usd.toFixed(4)}`,
1833
- );
1834
- if (trace.estimated_savings.total_cost_saved_usd > 0) {
1835
- traceLines.push(
1836
- `│ Savings: ~${trace.estimated_savings.total_tokens_saved} tok, ~$${trace.estimated_savings.total_cost_saved_usd.toFixed(4)}`,
1837
- );
1838
- }
1839
- traceLines.push("└──────────────────────────────────────────\n");
1840
- yield { type: "content", content: traceLines.join("\n") };
1841
- }
1842
-
1843
- if (modelInfo?.contextWindow) {
1844
- await deps.postTurnCompact(provider, system, modelInfo.contextWindow, signal);
1845
- }
1846
- yield { type: "done" };
1847
- return;
1848
- } catch (err: unknown) {
1849
- if (signal.aborted) {
1850
- deps.discardAbortedTurn(userModelMessage);
1851
- // ROUTE-11: Fire routeFeedback for cancelled turns (abort path).
1852
- // Fire-and-forget — no await. Skipped when taskHash is null.
1853
- {
1854
- const turnDuration = Date.now() - turnStartMs;
1855
- if (taskHash) {
1856
- const tier = taskTypeToTier(pilCtx.taskType);
1857
- void routeFeedback(taskHash, tier, runtime.modelId, "cancelled", 0, turnDuration);
1858
- }
1859
- const storeHash = routerStore.getState().taskHash;
1860
- if (storeHash) {
1861
- reportRouteOutcome(storeHash, "cancelled", turnDuration);
1862
- }
1863
- }
1864
- yield { type: "content", content: "\n\n[Cancelled]" };
1865
- yield { type: "done" };
1866
- return;
1867
- }
1868
-
1869
- if (!attemptedOverflowRecovery && !assistantText.trim() && modelInfo && isContextLimitError(err)) {
1870
- attemptedOverflowRecovery = true;
1871
- continue;
1872
- }
1873
-
1874
- // Transient network/server error retry — up to MAX_STREAM_RETRIES extra attempts.
1875
- // Only retry when no content has flowed yet (assistantText empty) to avoid
1876
- // partial-output corruption. Honour the abort signal between retries.
1877
- if (!assistantText.trim() && streamRetryCount < MAX_STREAM_RETRIES && !signal.aborted) {
1878
- const { transient } = classifyStreamError(err);
1879
- if (transient) {
1880
- streamRetryCount++;
1881
- // Exponential backoff: 500 → 2000 ms with ±25% jitter
1882
- const baseMs = 500;
1883
- const expMs = Math.min(baseMs * 4 ** (streamRetryCount - 1), 8_000);
1884
- const spread = expMs * 0.25;
1885
- const nextDelayMs = Math.round(expMs + (Math.random() * 2 - 1) * spread);
1886
- const errorName = err instanceof Error ? err.name : "Error";
1887
- const errorMessage = err instanceof Error ? err.message : String(err);
1888
- // Emit harness telemetry event
1889
- try {
1890
- const _ar = (globalThis as Record<string, unknown>).__muonroiAgentRuntime as
1891
- | { emitEvent: (e: unknown) => void }
1892
- | undefined;
1893
- _ar?.emitEvent({
1894
- t: "event",
1895
- kind: "stream-retry",
1896
- attempt: streamRetryCount,
1897
- maxAttempts: MAX_STREAM_RETRIES + 1,
1898
- errorName,
1899
- errorMessage,
1900
- nextDelayMs,
1901
- });
1902
- } catch {
1903
- /* best-effort */
1904
- }
1905
- try {
1906
- if (deps.session) {
1907
- logInteraction(deps.session.id, "stream_retry", {
1908
- data: {
1909
- attempt: streamRetryCount,
1910
- maxAttempts: MAX_STREAM_RETRIES + 1,
1911
- errorName,
1912
- errorMessage: errorMessage.slice(0, 200),
1913
- nextDelayMs,
1914
- },
1915
- });
1916
- }
1917
- } catch {
1918
- /* fail-open */
1919
- }
1920
- await new Promise<void>((resolve) => setTimeout(resolve, nextDelayMs));
1921
- if (!signal.aborted) {
1922
- continue;
1923
- }
1924
- }
1925
- }
1926
-
1927
- const authError = isAuthenticationError(err);
1928
- const friendly = humanizeApiError(err);
1929
- notifyObserver(observer?.onError, {
1930
- message: friendly,
1931
- timestamp: Date.now(),
1932
- });
1933
- yield {
1934
- type: "error",
1935
- content: friendly,
1936
- isAuthError: authError,
1937
- };
1938
- if (assistantText.trim()) {
1939
- deps.appendCompletedTurn(userModelMessage, [{ role: "assistant", content: assistantText }]);
1940
- } else if (deps.session && userWriteAheadSeq != null) {
1941
- // Phase A5 — Stream threw before producing assistant text. The
1942
- // write-ahead user row is stuck at `status='pending'`. Mark it
1943
- // errored so forensics + recovery can distinguish "in-flight"
1944
- // from "crashed mid-flight".
1945
- markMessageErrored(deps.session.id, userWriteAheadSeq);
1946
- }
1947
-
1948
- // ROUTE-11: Fire routeFeedback for failed turns (error path).
1949
- // Must come AFTER posttool calls. Fire-and-forget — no await.
1950
- {
1951
- const turnDuration = Date.now() - turnStartMs;
1952
- if (taskHash) {
1953
- const tier = taskTypeToTier(pilCtx.taskType);
1954
- void routeFeedback(taskHash, tier, runtime.modelId, "fail", 0, turnDuration);
1955
- }
1956
- const storeHash = routerStore.getState().taskHash;
1957
- if (storeHash) {
1958
- reportRouteOutcome(storeHash, "fail", turnDuration);
1959
- }
1960
- }
1961
-
1962
- const stopFailureInput: StopFailureHookInput = {
1963
- hook_event_name: "StopFailure",
1964
- error: friendly,
1965
- session_id: deps.session?.id,
1966
- cwd: deps.bash.getCwd(),
1967
- };
1968
- await deps.fireHook(stopFailureInput, signal).catch(() => {});
1969
-
1970
- if (modelInfo?.contextWindow) {
1971
- await deps.postTurnCompact(provider, system, modelInfo.contextWindow, signal);
1972
- }
1973
- yield { type: "done" };
1974
- return;
1975
- } finally {
1976
- await closeMcp?.().catch(() => {});
1977
- }
1978
- }
1979
- } finally {
1980
- if (deps.getAbortController()?.signal === signal) {
1981
- deps.setAbortController(null);
1982
- }
1983
- }
1984
- }
1985
- }