muonroi-cli 1.8.4 → 1.9.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (562) hide show
  1. package/LICENSE +17 -5
  2. package/dist/packages/agent-harness-core/src/driver.d.ts +27 -1
  3. package/dist/packages/agent-harness-core/src/driver.js +46 -0
  4. package/dist/packages/agent-harness-core/src/event-filter.js +11 -0
  5. package/dist/packages/agent-harness-core/src/event-redact.js +7 -0
  6. package/dist/packages/agent-harness-core/src/event-tee.d.ts +64 -0
  7. package/dist/packages/agent-harness-core/src/event-tee.js +104 -0
  8. package/dist/packages/agent-harness-core/src/mcp-server.d.ts +25 -0
  9. package/dist/packages/agent-harness-core/src/mcp-server.js +169 -21
  10. package/dist/packages/agent-harness-core/src/predicate.d.ts +1 -1
  11. package/dist/packages/agent-harness-core/src/protocol.d.ts +90 -4
  12. package/dist/packages/agent-harness-core/src/protocol.js +15 -0
  13. package/dist/packages/agent-harness-core/src/visual-quality.d.ts +58 -0
  14. package/dist/packages/agent-harness-core/src/visual-quality.js +141 -0
  15. package/dist/packages/agent-harness-opentui/src/agent-mode.d.ts +6 -0
  16. package/dist/packages/agent-harness-opentui/src/agent-mode.js +14 -1
  17. package/dist/packages/agent-harness-opentui/src/input-bridge.d.ts +2 -10
  18. package/dist/packages/agent-harness-opentui/src/input-bridge.js +103 -16
  19. package/dist/packages/agent-harness-opentui/src/install.d.ts +8 -0
  20. package/dist/packages/agent-harness-opentui/src/install.js +10 -0
  21. package/dist/packages/agent-harness-opentui/src/semantic.js +12 -10
  22. package/dist/packages/agent-harness-opentui/src/visual-capture.d.ts +56 -0
  23. package/dist/packages/agent-harness-opentui/src/visual-capture.js +103 -0
  24. package/dist/src/agent-harness/mock-model.d.ts +38 -0
  25. package/dist/src/agent-harness/mock-model.js +69 -3
  26. package/dist/src/agent-harness/test-spawn.js +31 -0
  27. package/dist/src/chat/chat-keychain.d.ts +7 -12
  28. package/dist/src/chat/chat-keychain.js +19 -86
  29. package/dist/src/cli/config/screen-providers.js +1 -1
  30. package/dist/src/cli/cost-forensics.d.ts +10 -0
  31. package/dist/src/cli/cost-forensics.js +18 -3
  32. package/dist/src/cli/keys-bundle.d.ts +1 -1
  33. package/dist/src/cli/keys-bundle.js +1 -1
  34. package/dist/src/cli/keys.d.ts +10 -47
  35. package/dist/src/cli/keys.js +31 -399
  36. package/dist/src/council/clarifier.d.ts +31 -3
  37. package/dist/src/council/clarifier.js +220 -32
  38. package/dist/src/council/context.js +49 -15
  39. package/dist/src/council/debate-checkpoint.d.ts +129 -0
  40. package/dist/src/council/debate-checkpoint.js +176 -0
  41. package/dist/src/council/debate-planner.js +54 -5
  42. package/dist/src/council/debate-summary.d.ts +25 -0
  43. package/dist/src/council/debate-summary.js +85 -0
  44. package/dist/src/council/debate.d.ts +169 -2
  45. package/dist/src/council/debate.js +1265 -135
  46. package/dist/src/council/index.d.ts +108 -1
  47. package/dist/src/council/index.js +670 -197
  48. package/dist/src/council/leader.d.ts +26 -0
  49. package/dist/src/council/leader.js +150 -9
  50. package/dist/src/council/llm.d.ts +94 -0
  51. package/dist/src/council/llm.js +348 -55
  52. package/dist/src/council/panel-select.d.ts +30 -0
  53. package/dist/src/council/panel-select.js +82 -0
  54. package/dist/src/council/planner.js +40 -0
  55. package/dist/src/council/preflight.d.ts +17 -0
  56. package/dist/src/council/preflight.js +50 -2
  57. package/dist/src/council/prompts.d.ts +39 -4
  58. package/dist/src/council/prompts.js +256 -69
  59. package/dist/src/council/stance-recall.d.ts +42 -0
  60. package/dist/src/council/stance-recall.js +57 -0
  61. package/dist/src/council/strip-think.d.ts +17 -0
  62. package/dist/src/council/strip-think.js +33 -0
  63. package/dist/src/council/types.d.ts +138 -0
  64. package/dist/src/ee/artifact-cache.d.ts +16 -0
  65. package/dist/src/ee/artifact-cache.js +32 -0
  66. package/dist/src/ee/auth.d.ts +20 -0
  67. package/dist/src/ee/auth.js +54 -2
  68. package/dist/src/ee/bridge.d.ts +10 -0
  69. package/dist/src/ee/bridge.js +58 -0
  70. package/dist/src/ee/client.js +109 -21
  71. package/dist/src/ee/ee-onboarding.js +6 -26
  72. package/dist/src/ee/export-transcripts.d.ts +1 -0
  73. package/dist/src/ee/export-transcripts.js +8 -10
  74. package/dist/src/ee/extract-session.js +29 -0
  75. package/dist/src/ee/extract-style.d.ts +58 -0
  76. package/dist/src/ee/extract-style.js +270 -0
  77. package/dist/src/ee/recall-ledger.d.ts +9 -0
  78. package/dist/src/ee/recall-ledger.js +3 -0
  79. package/dist/src/ee/scope.d.ts +1 -0
  80. package/dist/src/ee/scope.js +26 -1
  81. package/dist/src/ee/search.d.ts +7 -0
  82. package/dist/src/ee/search.js +24 -0
  83. package/dist/src/ee/transcript-emit.js +2 -0
  84. package/dist/src/ee/types.d.ts +22 -0
  85. package/dist/src/ee/who-am-i-brain.d.ts +35 -0
  86. package/dist/src/ee/who-am-i-brain.js +220 -0
  87. package/dist/src/ee/who-am-i.d.ts +10 -3
  88. package/dist/src/ee/who-am-i.js +12 -0
  89. package/dist/src/ee/workflow-event.d.ts +48 -0
  90. package/dist/src/ee/workflow-event.js +81 -0
  91. package/dist/src/flow/compaction/compress.d.ts +3 -3
  92. package/dist/src/flow/compaction/compress.js +58 -8
  93. package/dist/src/flow/compaction/extract.d.ts +4 -7
  94. package/dist/src/flow/compaction/extract.js +50 -10
  95. package/dist/src/flow/compaction/index.d.ts +14 -1
  96. package/dist/src/flow/compaction/index.js +96 -3
  97. package/dist/src/flow/compaction/input-guard.d.ts +24 -0
  98. package/dist/src/flow/compaction/input-guard.js +43 -0
  99. package/dist/src/flow/compaction/progress.d.ts +35 -0
  100. package/dist/src/flow/compaction/progress.js +35 -0
  101. package/dist/src/flow/fold-planning.d.ts +36 -0
  102. package/dist/src/flow/fold-planning.js +83 -0
  103. package/dist/src/flow/hierarchy.d.ts +146 -0
  104. package/dist/src/flow/hierarchy.js +427 -0
  105. package/dist/src/flow/index.d.ts +1 -0
  106. package/dist/src/flow/index.js +2 -0
  107. package/dist/src/flow/run-artifacts.d.ts +102 -0
  108. package/dist/src/flow/run-artifacts.js +208 -0
  109. package/dist/src/generated/version.d.ts +1 -1
  110. package/dist/src/generated/version.js +1 -1
  111. package/dist/src/gsd/assessment-schema.d.ts +44 -0
  112. package/dist/src/gsd/assessment-schema.js +134 -0
  113. package/dist/src/gsd/capability-registry.d.ts +45 -0
  114. package/dist/src/gsd/capability-registry.js +337 -0
  115. package/dist/src/gsd/complexity-assessor.d.ts +39 -0
  116. package/dist/src/gsd/complexity-assessor.js +152 -0
  117. package/dist/src/gsd/config-bridge.d.ts +7 -0
  118. package/dist/src/gsd/config-bridge.js +114 -0
  119. package/dist/src/gsd/config-loader.d.ts +27 -0
  120. package/dist/src/gsd/config-loader.js +50 -0
  121. package/dist/src/gsd/council-context.d.ts +44 -0
  122. package/dist/src/gsd/council-context.js +114 -0
  123. package/dist/src/gsd/ee-closure.d.ts +28 -0
  124. package/dist/src/gsd/ee-closure.js +49 -0
  125. package/dist/src/gsd/flags.d.ts +66 -0
  126. package/dist/src/gsd/flags.js +102 -0
  127. package/dist/src/gsd/gsd-dispatch.d.ts +58 -0
  128. package/dist/src/gsd/gsd-dispatch.js +131 -0
  129. package/dist/src/gsd/gsd-runtime.d.ts +22 -0
  130. package/dist/src/gsd/gsd-runtime.js +37 -0
  131. package/dist/src/gsd/host-adapter.d.ts +11 -0
  132. package/dist/src/gsd/host-adapter.js +29 -0
  133. package/dist/src/gsd/index.d.ts +24 -1
  134. package/dist/src/gsd/index.js +27 -0
  135. package/dist/src/gsd/loop-host-contract.d.ts +21 -0
  136. package/dist/src/gsd/loop-host-contract.js +39 -0
  137. package/dist/src/gsd/loop-host.d.ts +69 -0
  138. package/dist/src/gsd/loop-host.js +245 -0
  139. package/dist/src/gsd/loop-resolver.d.ts +36 -0
  140. package/dist/src/gsd/loop-resolver.js +79 -0
  141. package/dist/src/gsd/model-tier.d.ts +13 -0
  142. package/dist/src/gsd/model-tier.js +45 -0
  143. package/dist/src/gsd/mutation-gate.d.ts +16 -0
  144. package/dist/src/gsd/mutation-gate.js +41 -0
  145. package/dist/src/gsd/native-roadmap.d.ts +89 -0
  146. package/dist/src/gsd/native-roadmap.js +343 -0
  147. package/dist/src/gsd/native-state.d.ts +47 -0
  148. package/dist/src/gsd/native-state.js +220 -0
  149. package/dist/src/gsd/paths.d.ts +23 -0
  150. package/dist/src/gsd/paths.js +66 -0
  151. package/dist/src/gsd/phase-dag.d.ts +12 -0
  152. package/dist/src/gsd/phase-dag.js +94 -0
  153. package/dist/src/gsd/phase-sync.d.ts +42 -0
  154. package/dist/src/gsd/phase-sync.js +321 -0
  155. package/dist/src/gsd/pil-gate-context.d.ts +13 -0
  156. package/dist/src/gsd/pil-gate-context.js +64 -0
  157. package/dist/src/gsd/pil-gate-critic.d.ts +19 -0
  158. package/dist/src/gsd/pil-gate-critic.js +74 -0
  159. package/dist/src/gsd/plan-council-prompts.d.ts +25 -0
  160. package/dist/src/gsd/plan-council-prompts.js +79 -0
  161. package/dist/src/gsd/plan-council.d.ts +44 -0
  162. package/dist/src/gsd/plan-council.js +283 -0
  163. package/dist/src/gsd/plan-gate-vocabulary.d.ts +40 -0
  164. package/dist/src/gsd/plan-gate-vocabulary.js +64 -0
  165. package/dist/src/gsd/product-workspace.d.ts +13 -0
  166. package/dist/src/gsd/product-workspace.js +124 -0
  167. package/dist/src/gsd/ship-bridge.d.ts +25 -0
  168. package/dist/src/gsd/ship-bridge.js +65 -0
  169. package/dist/src/gsd/state-document.d.ts +40 -0
  170. package/dist/src/gsd/state-document.js +163 -0
  171. package/dist/src/gsd/verdict-schema.d.ts +39 -0
  172. package/dist/src/gsd/verdict-schema.js +144 -0
  173. package/dist/src/gsd/verify-context.d.ts +22 -0
  174. package/dist/src/gsd/verify-context.js +27 -0
  175. package/dist/src/gsd/verify-council-prompts.d.ts +19 -0
  176. package/dist/src/gsd/verify-council-prompts.js +85 -0
  177. package/dist/src/gsd/verify-council.d.ts +25 -0
  178. package/dist/src/gsd/verify-council.js +119 -0
  179. package/dist/src/gsd/verify-gate-vocabulary.d.ts +25 -0
  180. package/dist/src/gsd/verify-gate-vocabulary.js +46 -0
  181. package/dist/src/gsd/workflow-engine.d.ts +60 -0
  182. package/dist/src/gsd/workflow-engine.js +207 -0
  183. package/dist/src/gsd/workflow-tools.d.ts +13 -0
  184. package/dist/src/gsd/workflow-tools.js +277 -0
  185. package/dist/src/headless/council-answers.js +4 -0
  186. package/dist/src/hooks/index.js +1 -1
  187. package/dist/src/index.js +172 -270
  188. package/dist/src/lsp/builtins.js +3 -1
  189. package/dist/src/lsp/manager.d.ts +5 -1
  190. package/dist/src/lsp/manager.js +249 -3
  191. package/dist/src/lsp/npm-cache.d.ts +11 -1
  192. package/dist/src/lsp/npm-cache.js +17 -1
  193. package/dist/src/lsp/runtime.d.ts +6 -1
  194. package/dist/src/lsp/runtime.js +17 -1
  195. package/dist/src/lsp/types.d.ts +83 -1
  196. package/dist/src/lsp/types.js +10 -0
  197. package/dist/src/maintain/pr-builder.js +23 -13
  198. package/dist/src/mcp/auto-setup.js +57 -32
  199. package/dist/src/mcp/client-pool.js +44 -16
  200. package/dist/src/mcp/lsp-tools.d.ts +5 -1
  201. package/dist/src/mcp/lsp-tools.js +93 -2
  202. package/dist/src/mcp/mcp-keychain.d.ts +3 -5
  203. package/dist/src/mcp/mcp-keychain.js +9 -49
  204. package/dist/src/mcp/research-onboarding.js +8 -7
  205. package/dist/src/mcp/runtime.js +34 -2
  206. package/dist/src/mcp/setup-guide-text.d.ts +1 -1
  207. package/dist/src/mcp/setup-guide-text.js +22 -2
  208. package/dist/src/mcp/tools-server.d.ts +10 -0
  209. package/dist/src/mcp/tools-server.js +10 -2
  210. package/dist/src/models/catalog-client.d.ts +87 -0
  211. package/dist/src/models/catalog-client.js +105 -38
  212. package/dist/src/models/catalog.json +528 -265
  213. package/dist/src/models/registry.d.ts +22 -7
  214. package/dist/src/models/registry.js +73 -10
  215. package/dist/src/ops/doctor.js +1 -1
  216. package/dist/src/orchestrator/ask-user.d.ts +61 -0
  217. package/dist/src/orchestrator/ask-user.js +65 -0
  218. package/dist/src/orchestrator/auto-commit.js +1 -1
  219. package/dist/src/orchestrator/batch-turn-runner.js +2 -2
  220. package/dist/src/orchestrator/cache-prefix.d.ts +67 -0
  221. package/dist/src/orchestrator/cache-prefix.js +83 -0
  222. package/dist/src/orchestrator/compact-request.d.ts +32 -0
  223. package/dist/src/orchestrator/compact-request.js +41 -0
  224. package/dist/src/orchestrator/compaction.d.ts +12 -3
  225. package/dist/src/orchestrator/compaction.js +35 -15
  226. package/dist/src/orchestrator/council-manager.d.ts +12 -3
  227. package/dist/src/orchestrator/council-manager.js +74 -32
  228. package/dist/src/orchestrator/council-request.d.ts +49 -0
  229. package/dist/src/orchestrator/council-request.js +62 -0
  230. package/dist/src/orchestrator/cross-turn-dedup.d.ts +6 -0
  231. package/dist/src/orchestrator/cross-turn-dedup.js +22 -1
  232. package/dist/src/orchestrator/error-utils.d.ts +29 -0
  233. package/dist/src/orchestrator/error-utils.js +132 -24
  234. package/dist/src/orchestrator/grounding-check.js +39 -1
  235. package/dist/src/orchestrator/interactive-pause.d.ts +26 -0
  236. package/dist/src/orchestrator/interactive-pause.js +36 -0
  237. package/dist/src/orchestrator/message-processor.d.ts +4 -0
  238. package/dist/src/orchestrator/message-processor.js +268 -41
  239. package/dist/src/orchestrator/orchestrator.d.ts +64 -3
  240. package/dist/src/orchestrator/orchestrator.js +823 -120
  241. package/dist/src/orchestrator/preprocessor.js +3 -3
  242. package/dist/src/orchestrator/proactive-compact-detector.d.ts +26 -0
  243. package/dist/src/orchestrator/proactive-compact-detector.js +36 -0
  244. package/dist/src/orchestrator/prompts.js +17 -17
  245. package/dist/src/orchestrator/reactive-delegation.d.ts +39 -0
  246. package/dist/src/orchestrator/reactive-delegation.js +59 -0
  247. package/dist/src/orchestrator/retry-classifier.d.ts +2 -1
  248. package/dist/src/orchestrator/retry-classifier.js +46 -2
  249. package/dist/src/orchestrator/safety-askcard.d.ts +1 -1
  250. package/dist/src/orchestrator/safety-askcard.js +5 -2
  251. package/dist/src/orchestrator/safety-intercept.d.ts +50 -0
  252. package/dist/src/orchestrator/safety-intercept.js +62 -0
  253. package/dist/src/orchestrator/scope-reminder.js +1 -1
  254. package/dist/src/orchestrator/session-experience.d.ts +2 -1
  255. package/dist/src/orchestrator/session-experience.js +2 -1
  256. package/dist/src/orchestrator/should-run-gate.d.ts +5 -0
  257. package/dist/src/orchestrator/should-run-gate.js +18 -0
  258. package/dist/src/orchestrator/stall-watchdog.d.ts +31 -3
  259. package/dist/src/orchestrator/stall-watchdog.js +65 -10
  260. package/dist/src/orchestrator/stream-runner.d.ts +13 -3
  261. package/dist/src/orchestrator/stream-runner.js +115 -49
  262. package/dist/src/orchestrator/sub-agent-cap.d.ts +13 -1
  263. package/dist/src/orchestrator/sub-agent-cap.js +16 -1
  264. package/dist/src/orchestrator/sub-agent-model-tier.d.ts +13 -1
  265. package/dist/src/orchestrator/sub-agent-model-tier.js +16 -2
  266. package/dist/src/orchestrator/subagent-compactor.d.ts +53 -1
  267. package/dist/src/orchestrator/subagent-compactor.js +126 -15
  268. package/dist/src/orchestrator/tool-engine.d.ts +41 -0
  269. package/dist/src/orchestrator/tool-engine.js +846 -66
  270. package/dist/src/orchestrator/tool-limit-auto-recover.d.ts +22 -0
  271. package/dist/src/orchestrator/tool-limit-auto-recover.js +30 -0
  272. package/dist/src/orchestrator/turn-runner-deps.d.ts +19 -0
  273. package/dist/src/orchestrator/turn-watchdog.d.ts +44 -0
  274. package/dist/src/orchestrator/turn-watchdog.js +84 -0
  275. package/dist/src/pil/agent-operating-contract.d.ts +1 -1
  276. package/dist/src/pil/agent-operating-contract.js +6 -4
  277. package/dist/src/pil/cheap-model-playbook.d.ts +1 -1
  278. package/dist/src/pil/cheap-model-playbook.js +5 -1
  279. package/dist/src/pil/cheap-model-workbooks.d.ts +1 -1
  280. package/dist/src/pil/cheap-model-workbooks.js +1 -1
  281. package/dist/src/pil/discovery-types.d.ts +1 -0
  282. package/dist/src/pil/discovery.d.ts +1 -1
  283. package/dist/src/pil/discovery.js +18 -13
  284. package/dist/src/pil/layer1-intent.d.ts +18 -6
  285. package/dist/src/pil/layer1-intent.js +66 -757
  286. package/dist/src/pil/layer15-context-scan.js +15 -1
  287. package/dist/src/pil/layer1_5-complexity-size.d.ts +7 -0
  288. package/dist/src/pil/layer1_5-complexity-size.js +31 -5
  289. package/dist/src/pil/layer3-ee-injection.js +23 -8
  290. package/dist/src/pil/layer4-gsd.js +69 -16
  291. package/dist/src/pil/layer5-context.js +7 -3
  292. package/dist/src/pil/layer6-output.d.ts +23 -0
  293. package/dist/src/pil/layer6-output.js +5 -1
  294. package/dist/src/pil/llm-classify.d.ts +111 -5
  295. package/dist/src/pil/llm-classify.js +421 -189
  296. package/dist/src/pil/native-capabilities-workbook.d.ts +1 -1
  297. package/dist/src/pil/native-capabilities-workbook.js +8 -0
  298. package/dist/src/pil/pipeline.js +36 -2
  299. package/dist/src/pil/repo-grounding-probe.d.ts +15 -0
  300. package/dist/src/pil/repo-grounding-probe.js +136 -0
  301. package/dist/src/pil/repo-structure-hints.d.ts +7 -0
  302. package/dist/src/pil/repo-structure-hints.js +45 -0
  303. package/dist/src/pil/response-tools.js +5 -3
  304. package/dist/src/pil/schema.d.ts +1 -0
  305. package/dist/src/pil/schema.js +2 -0
  306. package/dist/src/pil/types.d.ts +18 -0
  307. package/dist/src/playbook/directives.d.ts +4 -0
  308. package/dist/src/playbook/directives.js +17 -5
  309. package/dist/src/product-loop/artifact-io.js +4 -0
  310. package/dist/src/product-loop/backlog-builder.d.ts +14 -1
  311. package/dist/src/product-loop/backlog-builder.js +30 -6
  312. package/dist/src/product-loop/criteria-seed.d.ts +51 -0
  313. package/dist/src/product-loop/criteria-seed.js +200 -0
  314. package/dist/src/product-loop/discovery-context-format.js +3 -1
  315. package/dist/src/product-loop/discovery-ecosystem.js +4 -1
  316. package/dist/src/product-loop/discovery-interview.d.ts +9 -0
  317. package/dist/src/product-loop/discovery-interview.js +60 -12
  318. package/dist/src/product-loop/discovery-recommender.js +2 -1
  319. package/dist/src/product-loop/discovery-schema.js +19 -2
  320. package/dist/src/product-loop/discovery-triage.d.ts +23 -0
  321. package/dist/src/product-loop/discovery-triage.js +109 -0
  322. package/dist/src/product-loop/gather.js +150 -2
  323. package/dist/src/product-loop/ideal-trace.d.ts +7 -0
  324. package/dist/src/product-loop/ideal-trace.js +64 -0
  325. package/dist/src/product-loop/index.d.ts +13 -1
  326. package/dist/src/product-loop/index.js +340 -52
  327. package/dist/src/product-loop/loop-driver.d.ts +7 -0
  328. package/dist/src/product-loop/loop-driver.js +330 -106
  329. package/dist/src/product-loop/phase-plan.d.ts +21 -0
  330. package/dist/src/product-loop/phase-plan.js +81 -6
  331. package/dist/src/product-loop/phase-rituals.d.ts +3 -0
  332. package/dist/src/product-loop/phase-rituals.js +8 -3
  333. package/dist/src/product-loop/phase-runner.js +39 -12
  334. package/dist/src/product-loop/plan-adherence-review.d.ts +26 -0
  335. package/dist/src/product-loop/plan-adherence-review.js +144 -0
  336. package/dist/src/product-loop/sprint-runner.d.ts +173 -0
  337. package/dist/src/product-loop/sprint-runner.js +863 -19
  338. package/dist/src/product-loop/types.d.ts +61 -5
  339. package/dist/src/providers/adapter.d.ts +1 -1
  340. package/dist/src/providers/adapter.js +3 -4
  341. package/dist/src/providers/anthropic.d.ts +9 -8
  342. package/dist/src/providers/anthropic.js +13 -47
  343. package/dist/src/providers/auth/browser-flow.d.ts +1 -1
  344. package/dist/src/providers/auth/browser-flow.js +1 -1
  345. package/dist/src/providers/auth/grok-oauth.d.ts +1 -0
  346. package/dist/src/providers/auth/grok-oauth.js +30 -5
  347. package/dist/src/providers/auth/openai-oauth.d.ts +1 -0
  348. package/dist/src/providers/auth/openai-oauth.js +15 -1
  349. package/dist/src/providers/auth/registry.js +0 -34
  350. package/dist/src/providers/auth/token-store.d.ts +9 -9
  351. package/dist/src/providers/auth/token-store.js +8 -67
  352. package/dist/src/providers/auth/types.d.ts +9 -1
  353. package/dist/src/providers/auth/types.js +1 -1
  354. package/dist/src/providers/capabilities.d.ts +24 -5
  355. package/dist/src/providers/capabilities.js +42 -24
  356. package/dist/src/providers/endpoints.d.ts +2 -2
  357. package/dist/src/providers/endpoints.js +11 -10
  358. package/dist/src/providers/env-store.d.ts +17 -0
  359. package/dist/src/providers/env-store.js +228 -0
  360. package/dist/src/providers/keychain.d.ts +22 -18
  361. package/dist/src/providers/keychain.js +127 -140
  362. package/dist/src/providers/mcp-vision-bridge.js +56 -146
  363. package/dist/src/providers/openai-compatible.js +8 -1
  364. package/dist/src/providers/pricing.d.ts +2 -2
  365. package/dist/src/providers/pricing.js +3 -13
  366. package/dist/src/providers/runtime.d.ts +43 -3
  367. package/dist/src/providers/runtime.js +88 -14
  368. package/dist/src/providers/strategies/base.strategy.d.ts +16 -0
  369. package/dist/src/providers/strategies/base.strategy.js +24 -1
  370. package/dist/src/providers/strategies/{siliconflow.strategy.d.ts → opencode-go.strategy.d.ts} +3 -3
  371. package/dist/src/providers/strategies/opencode-go.strategy.js +83 -0
  372. package/dist/src/providers/strategies/registry.js +4 -4
  373. package/dist/src/providers/strategies/thinking-mode.d.ts +109 -0
  374. package/dist/src/providers/strategies/thinking-mode.js +288 -1
  375. package/dist/src/providers/strategies/xai.strategy.js +27 -0
  376. package/dist/src/providers/strategies/zai.strategy.d.ts +14 -0
  377. package/dist/src/providers/strategies/zai.strategy.js +44 -0
  378. package/dist/src/providers/types.d.ts +5 -6
  379. package/dist/src/providers/types.js +2 -2
  380. package/dist/src/providers/vision-backend.d.ts +47 -0
  381. package/dist/src/providers/vision-backend.js +258 -0
  382. package/dist/src/providers/vision-proxy.d.ts +22 -9
  383. package/dist/src/providers/vision-proxy.js +63 -132
  384. package/dist/src/providers/warm.d.ts +65 -0
  385. package/dist/src/providers/warm.js +145 -0
  386. package/dist/src/providers/wire-debug.js +95 -0
  387. package/dist/src/router/decide.d.ts +13 -0
  388. package/dist/src/router/decide.js +138 -36
  389. package/dist/src/router/peak-hour.d.ts +38 -0
  390. package/dist/src/router/peak-hour.js +107 -0
  391. package/dist/src/router/step-router.js +3 -2
  392. package/dist/src/router/warm.js +4 -5
  393. package/dist/src/scaffold/continuation-prompt.d.ts +11 -0
  394. package/dist/src/scaffold/continuation-prompt.js +26 -0
  395. package/dist/src/scaffold/point-to-existing.d.ts +21 -0
  396. package/dist/src/scaffold/point-to-existing.js +25 -0
  397. package/dist/src/self-qa/agentic-loop.js +6 -5
  398. package/dist/src/{ui/state → state}/active-run.d.ts +19 -0
  399. package/dist/src/{ui/state → state}/active-run.js +21 -0
  400. package/dist/src/{ui/status-bar/store.d.ts → state/status-bar-store.d.ts} +4 -1
  401. package/dist/src/{ui/status-bar/store.js → state/status-bar-store.js} +12 -9
  402. package/dist/src/state/turn-trace.d.ts +43 -0
  403. package/dist/src/state/turn-trace.js +32 -0
  404. package/dist/src/storage/db.js +2 -1
  405. package/dist/src/storage/index.d.ts +1 -1
  406. package/dist/src/storage/index.js +1 -1
  407. package/dist/src/storage/interaction-log.d.ts +1 -1
  408. package/dist/src/storage/migrations.js +71 -1
  409. package/dist/src/storage/sessions.d.ts +28 -10
  410. package/dist/src/storage/sessions.js +78 -21
  411. package/dist/src/storage/transcript-view.js +1 -1
  412. package/dist/src/storage/transcript.d.ts +51 -0
  413. package/dist/src/storage/transcript.js +340 -15
  414. package/dist/src/tools/file.d.ts +15 -0
  415. package/dist/src/tools/file.js +32 -0
  416. package/dist/src/tools/git-safety.d.ts +19 -0
  417. package/dist/src/tools/git-safety.js +168 -0
  418. package/dist/src/tools/native-tools.d.ts +1 -1
  419. package/dist/src/tools/native-tools.js +81 -1
  420. package/dist/src/tools/registry.d.ts +20 -0
  421. package/dist/src/tools/registry.js +576 -23
  422. package/dist/src/tools/research.d.ts +29 -0
  423. package/dist/src/tools/research.js +233 -0
  424. package/dist/src/types/index.d.ts +147 -4
  425. package/dist/src/ui/app.js +0 -0
  426. package/dist/src/ui/cards/product-status-card.js +1 -1
  427. package/dist/src/ui/components/agent-rail-activities.d.ts +26 -0
  428. package/dist/src/ui/components/agent-rail-activities.js +47 -0
  429. package/dist/src/ui/components/bubble-body-guard.d.ts +27 -0
  430. package/dist/src/ui/components/bubble-body-guard.js +50 -0
  431. package/dist/src/ui/components/compact-progress-card.d.ts +24 -0
  432. package/dist/src/ui/components/compact-progress-card.js +42 -0
  433. package/dist/src/ui/components/context-rail.d.ts +26 -0
  434. package/dist/src/ui/components/context-rail.js +33 -0
  435. package/dist/src/ui/components/council-conclusion-card.d.ts +73 -0
  436. package/dist/src/ui/components/council-conclusion-card.js +420 -0
  437. package/dist/src/ui/components/council-debate-pill.d.ts +36 -0
  438. package/dist/src/ui/components/council-debate-pill.js +34 -0
  439. package/dist/src/ui/components/council-info-card.js +2 -2
  440. package/dist/src/ui/components/council-leader-bubble.d.ts +10 -3
  441. package/dist/src/ui/components/council-leader-bubble.js +21 -11
  442. package/dist/src/ui/components/council-message-bubble.d.ts +15 -2
  443. package/dist/src/ui/components/council-message-bubble.js +16 -15
  444. package/dist/src/ui/components/council-phase-timeline.d.ts +9 -1
  445. package/dist/src/ui/components/council-phase-timeline.js +66 -17
  446. package/dist/src/ui/components/council-placeholder-bubble.d.ts +16 -9
  447. package/dist/src/ui/components/council-placeholder-bubble.js +32 -29
  448. package/dist/src/ui/components/council-question-card.js +13 -12
  449. package/dist/src/ui/components/council-rail-rounds.d.ts +26 -0
  450. package/dist/src/ui/components/council-rail-rounds.js +57 -0
  451. package/dist/src/ui/components/council-round-group.d.ts +38 -0
  452. package/dist/src/ui/components/council-round-group.js +88 -0
  453. package/dist/src/ui/components/council-status-list.d.ts +3 -1
  454. package/dist/src/ui/components/council-status-list.js +36 -24
  455. package/dist/src/ui/components/council-synthesis-banner.d.ts +7 -2
  456. package/dist/src/ui/components/council-synthesis-banner.js +20 -5
  457. package/dist/src/ui/components/halt-recovery-card.js +9 -5
  458. package/dist/src/ui/components/jump-to-latest-pill.d.ts +11 -0
  459. package/dist/src/ui/components/jump-to-latest-pill.js +14 -0
  460. package/dist/src/ui/components/message-view.d.ts +15 -0
  461. package/dist/src/ui/components/message-view.js +50 -1
  462. package/dist/src/ui/components/prompt-box.js +18 -16
  463. package/dist/src/ui/components/session-tree-card.d.ts +14 -0
  464. package/dist/src/ui/components/session-tree-card.js +46 -0
  465. package/dist/src/ui/components/slash-inline-menu.d.ts +12 -0
  466. package/dist/src/ui/components/slash-inline-menu.js +26 -5
  467. package/dist/src/ui/components/task-list-panel.d.ts +14 -1
  468. package/dist/src/ui/components/task-list-panel.js +22 -2
  469. package/dist/src/ui/components/tool-group.d.ts +15 -3
  470. package/dist/src/ui/components/tool-group.js +69 -11
  471. package/dist/src/ui/containers/modals-layer.d.ts +4 -2
  472. package/dist/src/ui/containers/modals-layer.js +2 -2
  473. package/dist/src/ui/council-harness-event.d.ts +57 -0
  474. package/dist/src/ui/council-harness-event.js +46 -0
  475. package/dist/src/ui/heartbeat-debug.d.ts +29 -0
  476. package/dist/src/ui/heartbeat-debug.js +45 -0
  477. package/dist/src/ui/hooks/use-session-picker.d.ts +3 -3
  478. package/dist/src/ui/mcp-modal.js +2 -4
  479. package/dist/src/ui/modals/api-key-modal.js +1 -1
  480. package/dist/src/ui/modals/connect-modal.js +4 -3
  481. package/dist/src/ui/modals/model-picker-modal.d.ts +8 -18
  482. package/dist/src/ui/modals/model-picker-modal.js +8 -10
  483. package/dist/src/ui/modals/session-picker-modal.d.ts +2 -2
  484. package/dist/src/ui/modals/session-picker-modal.js +3 -5
  485. package/dist/src/ui/picker-providers.d.ts +1 -1
  486. package/dist/src/ui/picker-providers.js +1 -1
  487. package/dist/src/ui/primitives/index.d.ts +1 -0
  488. package/dist/src/ui/primitives/index.js +2 -0
  489. package/dist/src/ui/primitives/semantic-primitives.d.ts +76 -0
  490. package/dist/src/ui/primitives/semantic-primitives.js +81 -0
  491. package/dist/src/ui/slash/compact.js +5 -7
  492. package/dist/src/ui/slash/cost.js +1 -1
  493. package/dist/src/ui/slash/council.js +19 -1
  494. package/dist/src/ui/slash/debug.d.ts +3 -31
  495. package/dist/src/ui/slash/debug.js +9 -20
  496. package/dist/src/ui/slash/ee.js +81 -0
  497. package/dist/src/ui/slash/ideal.d.ts +6 -2
  498. package/dist/src/ui/slash/ideal.js +97 -7
  499. package/dist/src/ui/slash/menu-items.d.ts +7 -0
  500. package/dist/src/ui/slash/menu-items.js +23 -20
  501. package/dist/src/ui/slash/registry.d.ts +2 -0
  502. package/dist/src/ui/slash/registry.js +4 -0
  503. package/dist/src/ui/status-bar/cache-hit.d.ts +6 -0
  504. package/dist/src/ui/status-bar/cache-hit.js +9 -0
  505. package/dist/src/ui/status-bar/index.d.ts +1 -1
  506. package/dist/src/ui/status-bar/index.js +7 -3
  507. package/dist/src/ui/status-bar/usd-meter.d.ts +5 -4
  508. package/dist/src/ui/status-bar/usd-meter.js +6 -4
  509. package/dist/src/ui/theme.d.ts +1 -0
  510. package/dist/src/ui/theme.js +2 -0
  511. package/dist/src/ui/types.d.ts +7 -0
  512. package/dist/src/ui/use-app-logic.js +0 -0
  513. package/dist/src/ui/utils/agent-activities.d.ts +39 -0
  514. package/dist/src/ui/utils/agent-activities.js +96 -0
  515. package/dist/src/ui/utils/format.d.ts +14 -0
  516. package/dist/src/ui/utils/format.js +23 -3
  517. package/dist/src/ui/utils/group-tool-entries.d.ts +26 -0
  518. package/dist/src/ui/utils/group-tool-entries.js +111 -0
  519. package/dist/src/ui/utils/tool-summary.d.ts +21 -0
  520. package/dist/src/ui/utils/tool-summary.js +91 -0
  521. package/dist/src/usage/downgrade.js +2 -2
  522. package/dist/src/usage/product-ledger.js +2 -2
  523. package/dist/src/utils/event-loop-monitor.d.ts +85 -0
  524. package/dist/src/utils/event-loop-monitor.js +107 -0
  525. package/dist/src/utils/install-manager.js +2 -1
  526. package/dist/src/utils/llm-deadline.d.ts +14 -0
  527. package/dist/src/utils/llm-deadline.js +19 -0
  528. package/dist/src/utils/logger.js +2 -2
  529. package/dist/src/utils/loop-profiler.d.ts +102 -0
  530. package/dist/src/utils/loop-profiler.js +202 -0
  531. package/dist/src/utils/permission-mode.js +5 -3
  532. package/dist/src/utils/redactor.js +1 -1
  533. package/dist/src/utils/settings.d.ts +180 -5
  534. package/dist/src/utils/settings.js +271 -31
  535. package/dist/src/utils/side-question.d.ts +1 -2
  536. package/dist/src/utils/side-question.js +2 -2
  537. package/dist/src/utils/visible-retry.d.ts +11 -0
  538. package/dist/src/utils/visible-retry.js +10 -1
  539. package/dist/src/verify/entrypoint.d.ts +1 -1
  540. package/dist/src/verify/entrypoint.js +52 -17
  541. package/dist/src/verify/orchestrator.d.ts +1 -1
  542. package/dist/src/verify/orchestrator.js +20 -3
  543. package/dist/src/verify/recipes.d.ts +13 -0
  544. package/dist/src/verify/recipes.js +15 -0
  545. package/package.json +134 -132
  546. package/dist/src/cli/bw-vault.d.ts +0 -55
  547. package/dist/src/cli/bw-vault.js +0 -133
  548. package/dist/src/mcp/ee-tools.d.ts +0 -46
  549. package/dist/src/mcp/ee-tools.js +0 -193
  550. package/dist/src/providers/auth/gcloud.d.ts +0 -28
  551. package/dist/src/providers/auth/gcloud.js +0 -102
  552. package/dist/src/providers/auth/gemini-oauth.d.ts +0 -82
  553. package/dist/src/providers/auth/gemini-oauth.js +0 -472
  554. package/dist/src/providers/gemini.d.ts +0 -11
  555. package/dist/src/providers/gemini.js +0 -45
  556. package/dist/src/providers/siliconflow-sse-repair.d.ts +0 -58
  557. package/dist/src/providers/siliconflow-sse-repair.js +0 -177
  558. package/dist/src/providers/strategies/google.strategy.d.ts +0 -22
  559. package/dist/src/providers/strategies/google.strategy.js +0 -174
  560. package/dist/src/providers/strategies/siliconflow.strategy.js +0 -29
  561. package/dist/src/ui/containers/chat-feed.d.ts +0 -40
  562. package/dist/src/ui/containers/chat-feed.js +0 -66
@@ -1,177 +0,0 @@
1
- /**
2
- * src/providers/siliconflow-sse-repair.ts
3
- *
4
- * SiliconFlow streaming returns OpenAI-compatible SSE, but on Qwen3-30B
5
- * tool-calling turns the FIRST `tool_calls` delta for a given index can
6
- * arrive without `id` and/or `function.name` — those fields are pushed
7
- * into a later chunk while the first chunk carries partial arguments.
8
- *
9
- * `@ai-sdk/openai-compatible@2.0.42` throws
10
- * `InvalidResponseDataError("Expected 'id' to be a string.")` at
11
- * `openai-compatible-chat-language-model.ts:537-541` the moment that
12
- * first malformed delta lands. The user-visible failure: session
13
- * 44db9105b119 (2026-05-26) crashed mid-stream right after the first
14
- * grep tool call returned, with no recoverable state.
15
- *
16
- * Evidence chain:
17
- * - DB row `routing|Qwen/Qwen3-30B-A3B-Instruct-2507` ts=12:30:33
18
- * - DB row `tool_result|grep` ts=12:31:05.753 (last persisted event)
19
- * - TUI scrollback shows `Expected 'id' to be a string.` ts=12:31:10
20
- * - AI SDK source at the cited line confirms this is the ONLY path
21
- * to that exact error message
22
- *
23
- * The fix is a `fetch` interceptor for SiliconFlow streaming responses:
24
- *
25
- * 1. Per index, buffer (id, name, args) until BOTH id+name are seen.
26
- * 2. The moment both arrive, emit ONE synthesized "first chunk" with
27
- * the accumulated arguments string.
28
- * 3. After that, every subsequent delta for that index passes through
29
- * unmodified.
30
- *
31
- * Well-formed streams (id+name on the first chunk) hit only the
32
- * pass-through path — the repairer is a no-op for them.
33
- *
34
- * Tests in `__tests__/siliconflow-sse-repair.test.ts` pin both the
35
- * malformed and well-formed cases, plus non-SSE pass-through, [DONE]
36
- * sentinel, and multi-index streams.
37
- */
38
- export class SiliconflowSseRepairer {
39
- states = new Map();
40
- /**
41
- * Process one SSE event. Returns the repaired event text (possibly
42
- * empty string to suppress the event entirely).
43
- *
44
- * The event text MUST include the trailing blank-line terminator
45
- * (`\n\n` or `\r\n\r\n`); the caller is responsible for splitting on
46
- * event boundaries.
47
- */
48
- repairEvent(eventText) {
49
- const dataMatch = eventText.match(/^data: (.+?)(\r?\n|$)/m);
50
- if (!dataMatch)
51
- return eventText;
52
- const dataPayload = dataMatch[1] ?? "";
53
- if (dataPayload === "[DONE]" || dataPayload.trim() === "")
54
- return eventText;
55
- let obj;
56
- try {
57
- obj = JSON.parse(dataPayload);
58
- }
59
- catch {
60
- return eventText;
61
- }
62
- const choice = obj?.choices?.[0];
63
- const delta = choice?.delta;
64
- if (!delta || typeof delta !== "object")
65
- return eventText;
66
- const rawToolCalls = delta.tool_calls;
67
- if (!Array.isArray(rawToolCalls) || rawToolCalls.length === 0)
68
- return eventText;
69
- const tcs = rawToolCalls;
70
- const outTcs = [];
71
- for (const tc of tcs) {
72
- const idx = typeof tc.index === "number" ? tc.index : 0;
73
- let st = this.states.get(idx);
74
- if (!st) {
75
- st = { index: idx, args: "", flushed: false };
76
- this.states.set(idx, st);
77
- }
78
- if (st.flushed) {
79
- outTcs.push(tc);
80
- continue;
81
- }
82
- if (typeof tc.id === "string" && tc.id.length > 0)
83
- st.id = tc.id;
84
- if (typeof tc.function?.name === "string" && tc.function.name.length > 0)
85
- st.name = tc.function.name;
86
- if (typeof tc.type === "string" && tc.type.length > 0)
87
- st.type = tc.type;
88
- if (typeof tc.function?.arguments === "string")
89
- st.args += tc.function.arguments;
90
- if (st.id != null && st.name != null) {
91
- outTcs.push({
92
- index: idx,
93
- id: st.id,
94
- type: st.type ?? "function",
95
- function: {
96
- name: st.name,
97
- arguments: st.args,
98
- },
99
- });
100
- st.flushed = true;
101
- st.args = "";
102
- }
103
- }
104
- const hasOtherContent = delta.content != null ||
105
- delta.reasoning_content != null ||
106
- choice?.finish_reason != null;
107
- if (outTcs.length === 0 && !hasOtherContent)
108
- return "";
109
- if (outTcs.length === 0) {
110
- delete delta.tool_calls;
111
- }
112
- else {
113
- delta.tool_calls = outTcs;
114
- }
115
- const newPayload = JSON.stringify(obj);
116
- return eventText.replace(/^data: .+?(\r?\n|$)/m, `data: ${newPayload}$1`);
117
- }
118
- }
119
- /**
120
- * Wrap a `fetch` implementation so SiliconFlow SSE responses are
121
- * repaired before reaching `@ai-sdk/openai-compatible`. Non-SSE
122
- * responses are passed through untouched.
123
- */
124
- export function createSiliconflowRepairFetch(base = fetch) {
125
- return async function repairFetch(input, init) {
126
- const res = await base(input, init);
127
- if (!res.body)
128
- return res;
129
- const ct = (res.headers.get("content-type") ?? "").toLowerCase();
130
- if (!ct.includes("text/event-stream"))
131
- return res;
132
- const repairer = new SiliconflowSseRepairer();
133
- const decoder = new TextDecoder();
134
- const encoder = new TextEncoder();
135
- let buf = "";
136
- const repaired = new ReadableStream({
137
- async start(controller) {
138
- const reader = res.body.getReader();
139
- try {
140
- for (;;) {
141
- const { done, value } = await reader.read();
142
- if (done) {
143
- if (buf.length > 0)
144
- controller.enqueue(encoder.encode(buf));
145
- controller.close();
146
- return;
147
- }
148
- buf += decoder.decode(value, { stream: true });
149
- for (;;) {
150
- const crlf = buf.indexOf("\r\n\r\n");
151
- const lf = buf.indexOf("\n\n");
152
- const idx = crlf === -1 ? lf : lf === -1 ? crlf : Math.min(crlf, lf);
153
- if (idx === -1)
154
- break;
155
- const sepLen = idx === crlf ? 4 : 2;
156
- const event = buf.slice(0, idx + sepLen);
157
- buf = buf.slice(idx + sepLen);
158
- const out = repairer.repairEvent(event);
159
- if (out.length > 0)
160
- controller.enqueue(encoder.encode(out));
161
- }
162
- }
163
- }
164
- catch (err) {
165
- controller.error(err);
166
- }
167
- },
168
- });
169
- return new Response(repaired, {
170
- status: res.status,
171
- statusText: res.statusText,
172
- headers: res.headers,
173
- });
174
- };
175
- }
176
- export const _internals = { SiliconflowSseRepairer };
177
- //# sourceMappingURL=siliconflow-sse-repair.js.map
@@ -1,22 +0,0 @@
1
- /**
2
- * src/providers/strategies/google.strategy.ts
3
- *
4
- * Google strategy (powered by Agy OAuth when using "google" provider without API key).
5
- *
6
- * Approach A: When OAuth Bearer headers are present, uses a custom fetch-based
7
- * provider that sends `Authorization: Bearer <token>` directly to the Gemini
8
- * API, bypassing @ai-sdk/google's apiKey-based auth.
9
- *
10
- * Approach C: Supports self-registered OAuth client via env vars
11
- * (MUONROI_GOOGLE_CLIENT_ID / MUONROI_GOOGLE_CLIENT_SECRET) or user settings
12
- * (providers.google.oauthClientId / oauthClientSecret).
13
- */
14
- import { type ProviderCapabilities } from "../capabilities.js";
15
- import type { ProviderFactory } from "../runtime.js";
16
- import type { ProviderId } from "../types.js";
17
- import { BaseProviderStrategy, type CreateFactoryOpts } from "./base.strategy.js";
18
- export declare class GoogleStrategy extends BaseProviderStrategy {
19
- readonly id: ProviderId;
20
- readonly capabilities: ProviderCapabilities;
21
- createFactory(opts: CreateFactoryOpts): ProviderFactory;
22
- }
@@ -1,174 +0,0 @@
1
- /**
2
- * src/providers/strategies/google.strategy.ts
3
- *
4
- * Google strategy (powered by Agy OAuth when using "google" provider without API key).
5
- *
6
- * Approach A: When OAuth Bearer headers are present, uses a custom fetch-based
7
- * provider that sends `Authorization: Bearer <token>` directly to the Gemini
8
- * API, bypassing @ai-sdk/google's apiKey-based auth.
9
- *
10
- * Approach C: Supports self-registered OAuth client via env vars
11
- * (MUONROI_GOOGLE_CLIENT_ID / MUONROI_GOOGLE_CLIENT_SECRET) or user settings
12
- * (providers.google.oauthClientId / oauthClientSecret).
13
- */
14
- import { createGoogleGenerativeAI } from "@ai-sdk/google";
15
- import { getProviderCapabilities } from "../capabilities.js";
16
- import { BaseProviderStrategy } from "./base.strategy.js";
17
- function createBearerTokenModel(baseURL, headers) {
18
- // Remove any trailing slash from baseURL for consistent path building
19
- const apiBase = baseURL.replace(/\/+$/, "");
20
- return (modelId) => {
21
- // Return a minimal LanguageModelV1-compatible object that streamText can use.
22
- // We implement the subset of the interface that streamText actually calls.
23
- return {
24
- specificationVersion: "v1",
25
- provider: "google",
26
- modelId,
27
- async doGenerate(options) {
28
- const url = `${apiBase}/models/${modelId}:generateContent`;
29
- const requestBody = {
30
- contents: [{ parts: [{ text: options.prompt }] }],
31
- };
32
- if (options.maxTokens)
33
- requestBody.generationConfig = {
34
- ...requestBody.generationConfig,
35
- maxOutputTokens: options.maxTokens,
36
- };
37
- if (options.temperature !== undefined)
38
- requestBody.generationConfig = {
39
- ...requestBody.generationConfig,
40
- temperature: options.temperature,
41
- };
42
- if (options.tools && options.tools.length > 0) {
43
- requestBody.tools = options.tools.map((t) => ({
44
- functionDeclarations: [
45
- {
46
- name: t.name ?? "unknown",
47
- description: t.description ?? "",
48
- parameters: t.parameters ?? {},
49
- },
50
- ],
51
- }));
52
- }
53
- const res = await fetch(url, {
54
- method: "POST",
55
- headers: {
56
- "Content-Type": "application/json",
57
- ...headers,
58
- },
59
- body: JSON.stringify(requestBody),
60
- });
61
- if (!res.ok) {
62
- const text = await res.text().catch(() => "");
63
- throw new Error(`Gemini API error (${res.status}): ${text}`);
64
- }
65
- const data = (await res.json());
66
- const candidate = data.candidates?.[0];
67
- const text = candidate?.content?.parts?.map((p) => p.text ?? "").join("") ?? "";
68
- return {
69
- text,
70
- finishReason: candidate?.finishReason?.toLowerCase() ?? "stop",
71
- usage: { promptTokens: 0, completionTokens: 0 },
72
- };
73
- },
74
- async doStream(options) {
75
- const url = `${apiBase}/models/${modelId}:streamGenerateContent`;
76
- const requestBody = {
77
- contents: [{ parts: [{ text: options.prompt }] }],
78
- };
79
- if (options.maxTokens)
80
- requestBody.generationConfig = {
81
- ...requestBody.generationConfig,
82
- maxOutputTokens: options.maxTokens,
83
- };
84
- if (options.temperature !== undefined)
85
- requestBody.generationConfig = {
86
- ...requestBody.generationConfig,
87
- temperature: options.temperature,
88
- };
89
- const res = await fetch(url, {
90
- method: "POST",
91
- headers: {
92
- "Content-Type": "application/json",
93
- ...headers,
94
- },
95
- body: JSON.stringify(requestBody),
96
- });
97
- if (!res.ok) {
98
- const text = await res.text().catch(() => "");
99
- throw new Error(`Gemini API error (${res.status}): ${text}`);
100
- }
101
- const reader = res.body?.getReader();
102
- if (!reader)
103
- throw new Error("No response body");
104
- const decoder = new TextDecoder();
105
- let buffer = "";
106
- return {
107
- stream: new ReadableStream({
108
- async start(controller) {
109
- try {
110
- while (true) {
111
- const { done, value } = await reader.read();
112
- if (done)
113
- break;
114
- buffer += decoder.decode(value, { stream: true });
115
- // Parse SSE-like lines: "data: {...}\n\n"
116
- const lines = buffer.split("\n");
117
- buffer = lines.pop() ?? "";
118
- for (const line of lines) {
119
- const trimmed = line.trim();
120
- if (!trimmed || trimmed.startsWith("data: ")) {
121
- const jsonStr = trimmed.startsWith("data: ") ? trimmed.slice(6) : trimmed;
122
- if (!jsonStr)
123
- continue;
124
- try {
125
- const parsed = JSON.parse(jsonStr);
126
- const candidate = parsed.candidates?.[0];
127
- const text = candidate?.content?.parts?.map((p) => p.text ?? "").join("") ?? "";
128
- if (text) {
129
- controller.enqueue({ type: "text-delta", textDelta: text });
130
- }
131
- }
132
- catch {
133
- // skip unparseable chunks
134
- }
135
- }
136
- }
137
- }
138
- }
139
- catch (e) {
140
- controller.error(e);
141
- }
142
- finally {
143
- controller.close();
144
- }
145
- },
146
- }),
147
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
148
- rawCall: async () => ({ rawResponse: undefined }),
149
- };
150
- },
151
- };
152
- };
153
- }
154
- // ---------------------------------------------------------------------------
155
- // GoogleStrategy
156
- // ---------------------------------------------------------------------------
157
- export class GoogleStrategy extends BaseProviderStrategy {
158
- id = "google";
159
- capabilities = getProviderCapabilities("google");
160
- createFactory(opts) {
161
- // Approach A: When OAuth Bearer headers are present, use the custom
162
- // fetch-based provider that sends ONLY the Authorization header (no
163
- // apiKey / X-Goog-Api-Key). This works with gcloud ADC tokens (Approach B)
164
- // and self-registered OAuth tokens (Approach C).
165
- if (opts.headers) {
166
- const bearerModelFn = createBearerTokenModel(opts.baseURL ?? "https://generativelanguage.googleapis.com/v1beta", opts.headers);
167
- return (modelId) => bearerModelFn(modelId);
168
- }
169
- // Standard API-key path: delegate to @ai-sdk/google.
170
- const p = createGoogleGenerativeAI({ apiKey: opts.apiKey, baseURL: opts.baseURL });
171
- return (modelId) => p(modelId);
172
- }
173
- }
174
- //# sourceMappingURL=google.strategy.js.map
@@ -1,29 +0,0 @@
1
- /**
2
- * src/providers/strategies/siliconflow.strategy.ts
3
- *
4
- * Phase 12.2-G4 — SiliconFlow strategy via `@ai-sdk/openai-compatible`.
5
- */
6
- import { createOpenAICompatible } from "@ai-sdk/openai-compatible";
7
- import { getProviderCapabilities } from "../capabilities.js";
8
- import { OPENAI_COMPATIBLE_BASE_URLS } from "../endpoints.js";
9
- import { createSiliconflowRepairFetch } from "../siliconflow-sse-repair.js";
10
- import { BaseProviderStrategy } from "./base.strategy.js";
11
- import { transformThinkingModeBody } from "./thinking-mode.js";
12
- export class SiliconflowStrategy extends BaseProviderStrategy {
13
- id = "siliconflow";
14
- capabilities = getProviderCapabilities("siliconflow");
15
- createFactory(opts) {
16
- const p = createOpenAICompatible({
17
- name: this.id,
18
- baseURL: opts.baseURL ?? OPENAI_COMPATIBLE_BASE_URLS.siliconflow,
19
- apiKey: opts.apiKey,
20
- fetch: createSiliconflowRepairFetch(),
21
- // Thinking-mode round-trip fix (code 20015): backfill reasoning_content
22
- // on every assistant turn, or disable thinking when
23
- // MUONROI_DEEPSEEK_DISABLE_THINKING=1. See thinking-mode.ts.
24
- transformRequestBody: (body) => transformThinkingModeBody(body),
25
- });
26
- return (modelId) => p(modelId);
27
- }
28
- }
29
- //# sourceMappingURL=siliconflow.strategy.js.map
@@ -1,40 +0,0 @@
1
- import React from "react";
2
- export interface ChatFeedProps {
3
- getSide: any;
4
- getPartnerLast: any;
5
- resolveStyle: any;
6
- scrollRef: any;
7
- messages: any;
8
- expandedMessages: any;
9
- liveTurnSourceLabel: any;
10
- activeToolCalls: any;
11
- streamContent: any;
12
- isProcessing: any;
13
- activeSubagent: any;
14
- councilPhases: any;
15
- productStatus: any;
16
- councilStatuses: any;
17
- councilInfoCards: any;
18
- councilMessages: any;
19
- councilPlaceholders: any;
20
- reasoningActive: any;
21
- lastReasoningElapsedMs: any;
22
- streamReasoning: any;
23
- showPlanPanel: any;
24
- planQuestions: any;
25
- pqs: any;
26
- pendingPaymentApproval: any;
27
- activeHaltCard: any;
28
- haltSelectedIndex: any;
29
- initNewForm: any;
30
- pointToExistingForm: any;
31
- councilProgress: any;
32
- pendingCouncilQuestion: any;
33
- councilCardState: any;
34
- pendingCouncilPreflight: any;
35
- preflightCardState: any;
36
- t: any;
37
- width: any;
38
- modeInfo: any;
39
- }
40
- export declare function ChatFeed(props: ChatFeedProps): React.ReactNode;
@@ -1,66 +0,0 @@
1
- import { jsx as _jsx, jsxs as _jsxs } from "@opentui/react/jsx-runtime";
2
- import { Semantic } from "@muonroi/agent-harness-opentui";
3
- import { ProductStatusCard } from "../cards/product-status-card.js";
4
- import { makePairKey } from "../components/bubble-layout.js";
5
- import { CouncilInfoCardView } from "../components/council-info-card.js";
6
- import { CouncilLeaderBubble } from "../components/council-leader-bubble.js";
7
- import { CouncilMessageBubble } from "../components/council-message-bubble.js";
8
- import { CouncilPhaseTimeline } from "../components/council-phase-timeline.js";
9
- import { CouncilPlaceholderBubble } from "../components/council-placeholder-bubble.js";
10
- import { CouncilQuestionCard } from "../components/council-question-card.js";
11
- import { CouncilStatusList } from "../components/council-status-list.js";
12
- import { CouncilSynthesisBanner } from "../components/council-synthesis-banner.js";
13
- import { HaltRecoveryCard } from "../components/halt-recovery-card.js";
14
- import { InitNewFormCard } from "../components/init-new-form-card.js";
15
- import { computeMcpRunInfo, MessageView } from "../components/message-view.js";
16
- import { PointToExistingFormCard } from "../components/point-to-existing-form-card.js";
17
- import { DelegationTaskLine, InlineTool, ShimmerText, SubagentActivity, SubagentTaskLine, } from "../components/tool-result-views.js";
18
- import { Markdown } from "../markdown.js";
19
- import { PaymentApprovalPanel } from "../modals/wallet-picker-modal.js";
20
- import { PlanQuestionsPanel } from "../plan.js";
21
- import { buildPreflightQuestion } from "../utils/format.js";
22
- import { toolArgs, toolLabel, tryParseArg } from "../utils/tools.js";
23
- export function ChatFeed(props) {
24
- const { modeInfo, getSide, getPartnerLast, resolveStyle, scrollRef, messages, expandedMessages, liveTurnSourceLabel, activeToolCalls, streamContent, isProcessing, activeSubagent, councilPhases, productStatus, councilStatuses, councilInfoCards, councilMessages, councilPlaceholders, reasoningActive, lastReasoningElapsedMs, streamReasoning, showPlanPanel, planQuestions, pqs, pendingPaymentApproval, activeHaltCard, haltSelectedIndex, initNewForm, pointToExistingForm, councilProgress, pendingCouncilQuestion, councilCardState, pendingCouncilPreflight, preflightCardState, t, width, } = props;
25
- return (_jsx(Semantic, { id: "log", role: "log", props: { scrollTop: scrollRef.current?.scrollTop ?? 0 }, children: _jsxs("scrollbox", { ref: scrollRef, flexGrow: 1, stickyScroll: true, stickyStart: "bottom", children: [(() => {
26
- const mcpRuns = computeMcpRunInfo(messages);
27
- // Phase 5 F7 — index of the last assistant message so
28
- // MessageView can skip auto-collapse on it (final answer
29
- // should always be fully visible, not hidden behind
30
- // "ctrl+e expand").
31
- let _lastAssistantIdx = -1;
32
- for (let _i = messages.length - 1; _i >= 0; _i--) {
33
- if (messages[_i]?.type === "assistant") {
34
- _lastAssistantIdx = _i;
35
- break;
36
- }
37
- }
38
- return messages.map((msg, i) => (
39
- // biome-ignore lint/suspicious/noArrayIndexKey: append-only message log; index is part of the stable semantic id
40
- _jsx(Semantic, { id: `msg-${i}`, role: "listitem", name: `${msg.type ?? "msg"}:${String(msg.content ?? "").slice(0, 40)}`, children: _jsx(MessageView, { entry: msg, index: i, t: t, modeColor: modeInfo.color, expandedMessages: expandedMessages, mcpRun: mcpRuns[i], isFinalAssistant: i === _lastAssistantIdx }, `${msg.timestamp?.getTime?.() ?? i}-${msg.type}-${msg.remoteKey ?? ""}-${String(msg.content ?? "").slice(0, 24)}`) }, `sem-${msg.timestamp?.getTime?.() ?? i}-${i}`)));
41
- })(), liveTurnSourceLabel && (activeToolCalls.length > 0 || streamContent || isProcessing) && (_jsx("box", { paddingLeft: 3, marginTop: 1, flexShrink: 0, children: _jsx("text", { fg: t.textMuted, children: liveTurnSourceLabel }) })), activeToolCalls.map((tc) => tc.function.name === "task" ? (_jsx(SubagentTaskLine, { t: t, agent: tryParseArg(tc, "agent") || "sub-agent", label: toolArgs(tc) || "Working", pending: true }, tc.id)) : tc.function.name === "delegate" ? (_jsx(DelegationTaskLine, { t: t, label: toolArgs(tc) || "Background research", pending: true, id: undefined }, tc.id)) : (_jsx(InlineTool, { t: t, pending: true, children: toolLabel(tc) }, tc.id))), activeSubagent && _jsx(SubagentActivity, { t: t, status: activeSubagent }), councilPhases.length > 0 && (_jsx(Semantic, { id: "council-phases", role: "listbox", name: "Council Phases", children: _jsx(CouncilPhaseTimeline, { phases: councilPhases, theme: t }) })), productStatus && _jsx(ProductStatusCard, { data: productStatus, theme: t }), councilStatuses.length > 0 && (_jsx(Semantic, { id: "council-status", role: "listbox", name: "Council Status", children: _jsx(CouncilStatusList, { statuses: councilStatuses, theme: t }) })), councilInfoCards.map((card, idx) => (_jsx(Semantic, { id: `council-card-${idx}`, role: "listitem", name: card.title || `Council card ${idx}`, children: _jsx(CouncilInfoCardView, { card: card, terminalCols: width, theme: t }, `info-card-${idx}-${card.title}`) }, `sem-info-${idx}-${card.title}`))), councilMessages.map((cm, idx) => {
42
- const side = cm.kind === "debate" && cm.partner
43
- ? getSide(makePairKey(cm.speaker.role, cm.partner.role), cm.speaker.role)
44
- : "left";
45
- const semName = `${cm.kind}:${cm.speaker?.role ?? "?"}`;
46
- if (cm.kind === "leader") {
47
- return (_jsx(Semantic, { id: `council-msg-${idx}`, role: "listitem", name: semName, value: cm.text, children: _jsx(CouncilLeaderBubble, { msg: cm, terminalCols: width }, idx) }, `sem-cm-${idx}`));
48
- }
49
- if (cm.kind === "synthesis") {
50
- return (_jsx(Semantic, { id: `council-msg-${idx}`, role: "listitem", name: semName, value: cm.text, children: _jsx(CouncilSynthesisBanner, { msg: cm }, idx) }, `sem-cm-${idx}`));
51
- }
52
- const pairKey = cm.partner ? makePairKey(cm.speaker.role, cm.partner.role) : `solo::${cm.speaker.role}`;
53
- const partnerLastText = cm.partner ? getPartnerLast(pairKey, cm.partner.role) : undefined;
54
- return (_jsx(Semantic, { id: `council-msg-${idx}`, role: "listitem", name: semName, value: cm.text, children: _jsx(CouncilMessageBubble, { msg: cm, terminalCols: width, side: side, resolveStyle: resolveStyle, partnerLastText: partnerLastText, partnerRole: cm.partner?.role, theme: t }, idx) }, `sem-cm-${idx}`));
55
- }), Array.from(councilPlaceholders.entries()).map(([id, p]) => (_jsx(CouncilPlaceholderBubble, { role: p.role, side: p.side, terminalCols: width, color: p.color, theme: t, variant: p.variant }, id))), (reasoningActive || lastReasoningElapsedMs > 0) && (_jsxs("box", { paddingLeft: 3, marginTop: 1, flexShrink: 0, flexDirection: "column", children: [_jsx("text", { fg: t.textMuted, children: reasoningActive ? "[Thought] Thinking..." : `[Thought] Thought for ${(lastReasoningElapsedMs / 1000).toFixed(1)}s` }), streamReasoning ? (_jsx("box", { border: ["left"], borderColor: t.textMuted, paddingLeft: 2, marginTop: 1, flexDirection: "column", children: reasoningActive ? (
56
- // While actively streaming, render only the last 3
57
- // non-empty lines as plain text to avoid Markdown
58
- // re-parse overhead every 150ms.
59
- _jsx("text", { fg: t.textMuted, children: streamReasoning
60
- .split("\n")
61
- .filter((l) => l.trim().length > 0)
62
- .slice(-3)
63
- .join(" · ") })) : (_jsx(Markdown, { content: streamReasoning, t: t })) })) : null] })), streamContent && (_jsx("box", { paddingLeft: 3, marginTop: 1, flexShrink: 0, children: _jsx(Markdown, { content: streamContent, t: t }) })), isProcessing && !streamContent && activeToolCalls.length === 0 && (_jsx(ShimmerText, { t: t, text: "Planning next moves" })), showPlanPanel && _jsx(PlanQuestionsPanel, { t: t, questions: planQuestions, state: pqs }), pendingPaymentApproval && _jsx(PaymentApprovalPanel, { t: t, payment: pendingPaymentApproval }), activeHaltCard && (_jsx(HaltRecoveryCard, { halt: activeHaltCard, selectedIndex: haltSelectedIndex, terminalCols: width, theme: t })), initNewForm && _jsx(InitNewFormCard, { state: initNewForm, terminalCols: width, theme: t }), pointToExistingForm && _jsx(PointToExistingFormCard, { state: pointToExistingForm, terminalCols: width, theme: t }), councilProgress && (_jsx(Semantic, { id: "continue-as-council-progress", role: "log", name: "Council brainstorm", children: _jsx("box", { flexDirection: "column", borderStyle: "single", borderColor: councilProgress.status === "error" ? t.initFormError : t.text, padding: 1, marginTop: 1, children: _jsxs("text", { fg: t.text, children: [councilProgress.status === "running" && "Council brainstorming — writing spec.md...", councilProgress.status === "done" &&
64
- `Council brainstorm complete: ${councilProgress.specPath}${councilProgress.hasContent ? "" : " (no content — production council wiring deferred)"}`, councilProgress.status === "error" && `Council brainstorm failed: ${councilProgress.error}`] }) }) })), pendingCouncilQuestion && councilCardState && (_jsx(CouncilQuestionCard, { question: pendingCouncilQuestion, theme: t, state: councilCardState })), pendingCouncilPreflight && preflightCardState && (_jsx(CouncilQuestionCard, { question: buildPreflightQuestion(pendingCouncilPreflight), theme: t, state: preflightCardState }))] }) }));
65
- }
66
- //# sourceMappingURL=chat-feed.js.map