muonroi-cli 1.8.4 → 1.8.5

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 (458) 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-tee.d.ts +48 -0
  5. package/dist/packages/agent-harness-core/src/event-tee.js +77 -0
  6. package/dist/packages/agent-harness-core/src/mcp-server.d.ts +11 -0
  7. package/dist/packages/agent-harness-core/src/mcp-server.js +87 -15
  8. package/dist/packages/agent-harness-core/src/protocol.d.ts +66 -2
  9. package/dist/packages/agent-harness-core/src/protocol.js +15 -0
  10. package/dist/packages/agent-harness-core/src/visual-quality.d.ts +58 -0
  11. package/dist/packages/agent-harness-core/src/visual-quality.js +141 -0
  12. package/dist/packages/agent-harness-opentui/src/agent-mode.d.ts +6 -0
  13. package/dist/packages/agent-harness-opentui/src/agent-mode.js +14 -1
  14. package/dist/packages/agent-harness-opentui/src/input-bridge.d.ts +2 -10
  15. package/dist/packages/agent-harness-opentui/src/input-bridge.js +103 -16
  16. package/dist/packages/agent-harness-opentui/src/install.d.ts +8 -0
  17. package/dist/packages/agent-harness-opentui/src/install.js +10 -0
  18. package/dist/packages/agent-harness-opentui/src/semantic.js +12 -10
  19. package/dist/packages/agent-harness-opentui/src/visual-capture.d.ts +56 -0
  20. package/dist/packages/agent-harness-opentui/src/visual-capture.js +103 -0
  21. package/dist/src/agent-harness/mock-model.d.ts +28 -0
  22. package/dist/src/agent-harness/mock-model.js +63 -1
  23. package/dist/src/agent-harness/test-spawn.js +31 -0
  24. package/dist/src/cli/config/screen-providers.js +1 -1
  25. package/dist/src/cli/cost-forensics.d.ts +10 -0
  26. package/dist/src/cli/cost-forensics.js +18 -3
  27. package/dist/src/cli/keys-bundle.d.ts +1 -1
  28. package/dist/src/cli/keys-bundle.js +1 -1
  29. package/dist/src/cli/keys.d.ts +2 -2
  30. package/dist/src/cli/keys.js +19 -81
  31. package/dist/src/council/clarifier.d.ts +28 -2
  32. package/dist/src/council/clarifier.js +81 -15
  33. package/dist/src/council/context.js +49 -15
  34. package/dist/src/council/debate-checkpoint.d.ts +129 -0
  35. package/dist/src/council/debate-checkpoint.js +176 -0
  36. package/dist/src/council/debate-planner.js +51 -3
  37. package/dist/src/council/debate-summary.d.ts +25 -0
  38. package/dist/src/council/debate-summary.js +85 -0
  39. package/dist/src/council/debate.d.ts +169 -2
  40. package/dist/src/council/debate.js +1210 -134
  41. package/dist/src/council/index.d.ts +85 -1
  42. package/dist/src/council/index.js +634 -196
  43. package/dist/src/council/leader.d.ts +26 -0
  44. package/dist/src/council/leader.js +150 -9
  45. package/dist/src/council/llm.d.ts +32 -0
  46. package/dist/src/council/llm.js +231 -38
  47. package/dist/src/council/panel-select.d.ts +30 -0
  48. package/dist/src/council/panel-select.js +72 -0
  49. package/dist/src/council/planner.js +23 -0
  50. package/dist/src/council/preflight.d.ts +7 -0
  51. package/dist/src/council/preflight.js +14 -2
  52. package/dist/src/council/prompts.d.ts +30 -3
  53. package/dist/src/council/prompts.js +234 -64
  54. package/dist/src/council/stance-recall.d.ts +42 -0
  55. package/dist/src/council/stance-recall.js +57 -0
  56. package/dist/src/council/strip-think.d.ts +17 -0
  57. package/dist/src/council/strip-think.js +33 -0
  58. package/dist/src/council/types.d.ts +128 -0
  59. package/dist/src/ee/artifact-cache.d.ts +16 -0
  60. package/dist/src/ee/artifact-cache.js +32 -0
  61. package/dist/src/ee/auth.d.ts +1 -0
  62. package/dist/src/ee/auth.js +15 -2
  63. package/dist/src/ee/bridge.d.ts +10 -0
  64. package/dist/src/ee/bridge.js +58 -0
  65. package/dist/src/ee/client.js +81 -18
  66. package/dist/src/ee/export-transcripts.d.ts +1 -0
  67. package/dist/src/ee/export-transcripts.js +8 -10
  68. package/dist/src/ee/extract-session.js +29 -0
  69. package/dist/src/ee/extract-style.d.ts +58 -0
  70. package/dist/src/ee/extract-style.js +270 -0
  71. package/dist/src/ee/recall-ledger.d.ts +9 -0
  72. package/dist/src/ee/recall-ledger.js +3 -0
  73. package/dist/src/ee/scope.d.ts +1 -0
  74. package/dist/src/ee/scope.js +26 -1
  75. package/dist/src/ee/search.d.ts +7 -0
  76. package/dist/src/ee/search.js +24 -0
  77. package/dist/src/ee/transcript-emit.js +2 -0
  78. package/dist/src/ee/types.d.ts +22 -0
  79. package/dist/src/ee/who-am-i-brain.d.ts +35 -0
  80. package/dist/src/ee/who-am-i-brain.js +220 -0
  81. package/dist/src/ee/who-am-i.d.ts +10 -3
  82. package/dist/src/ee/who-am-i.js +12 -0
  83. package/dist/src/ee/workflow-event.d.ts +48 -0
  84. package/dist/src/ee/workflow-event.js +81 -0
  85. package/dist/src/flow/compaction/compress.d.ts +3 -3
  86. package/dist/src/flow/compaction/compress.js +45 -8
  87. package/dist/src/flow/compaction/extract.d.ts +4 -7
  88. package/dist/src/flow/compaction/extract.js +50 -10
  89. package/dist/src/flow/compaction/index.d.ts +13 -1
  90. package/dist/src/flow/compaction/index.js +70 -3
  91. package/dist/src/flow/compaction/input-guard.d.ts +24 -0
  92. package/dist/src/flow/compaction/input-guard.js +43 -0
  93. package/dist/src/flow/fold-planning.d.ts +36 -0
  94. package/dist/src/flow/fold-planning.js +83 -0
  95. package/dist/src/flow/hierarchy.d.ts +146 -0
  96. package/dist/src/flow/hierarchy.js +427 -0
  97. package/dist/src/flow/index.d.ts +1 -0
  98. package/dist/src/flow/index.js +2 -0
  99. package/dist/src/flow/run-artifacts.d.ts +102 -0
  100. package/dist/src/flow/run-artifacts.js +208 -0
  101. package/dist/src/generated/version.d.ts +1 -1
  102. package/dist/src/generated/version.js +1 -1
  103. package/dist/src/gsd/assessment-schema.d.ts +44 -0
  104. package/dist/src/gsd/assessment-schema.js +134 -0
  105. package/dist/src/gsd/capability-registry.d.ts +45 -0
  106. package/dist/src/gsd/capability-registry.js +337 -0
  107. package/dist/src/gsd/complexity-assessor.d.ts +39 -0
  108. package/dist/src/gsd/complexity-assessor.js +152 -0
  109. package/dist/src/gsd/config-bridge.d.ts +7 -0
  110. package/dist/src/gsd/config-bridge.js +114 -0
  111. package/dist/src/gsd/config-loader.d.ts +27 -0
  112. package/dist/src/gsd/config-loader.js +50 -0
  113. package/dist/src/gsd/council-context.d.ts +44 -0
  114. package/dist/src/gsd/council-context.js +114 -0
  115. package/dist/src/gsd/ee-closure.d.ts +28 -0
  116. package/dist/src/gsd/ee-closure.js +49 -0
  117. package/dist/src/gsd/flags.d.ts +55 -0
  118. package/dist/src/gsd/flags.js +83 -0
  119. package/dist/src/gsd/gsd-dispatch.d.ts +58 -0
  120. package/dist/src/gsd/gsd-dispatch.js +131 -0
  121. package/dist/src/gsd/gsd-runtime.d.ts +22 -0
  122. package/dist/src/gsd/gsd-runtime.js +37 -0
  123. package/dist/src/gsd/host-adapter.d.ts +11 -0
  124. package/dist/src/gsd/host-adapter.js +29 -0
  125. package/dist/src/gsd/index.d.ts +24 -1
  126. package/dist/src/gsd/index.js +27 -0
  127. package/dist/src/gsd/loop-host-contract.d.ts +21 -0
  128. package/dist/src/gsd/loop-host-contract.js +39 -0
  129. package/dist/src/gsd/loop-host.d.ts +69 -0
  130. package/dist/src/gsd/loop-host.js +245 -0
  131. package/dist/src/gsd/loop-resolver.d.ts +36 -0
  132. package/dist/src/gsd/loop-resolver.js +79 -0
  133. package/dist/src/gsd/model-tier.d.ts +13 -0
  134. package/dist/src/gsd/model-tier.js +45 -0
  135. package/dist/src/gsd/mutation-gate.d.ts +16 -0
  136. package/dist/src/gsd/mutation-gate.js +41 -0
  137. package/dist/src/gsd/native-roadmap.d.ts +89 -0
  138. package/dist/src/gsd/native-roadmap.js +343 -0
  139. package/dist/src/gsd/native-state.d.ts +47 -0
  140. package/dist/src/gsd/native-state.js +220 -0
  141. package/dist/src/gsd/paths.d.ts +23 -0
  142. package/dist/src/gsd/paths.js +66 -0
  143. package/dist/src/gsd/phase-dag.d.ts +12 -0
  144. package/dist/src/gsd/phase-dag.js +94 -0
  145. package/dist/src/gsd/phase-sync.d.ts +42 -0
  146. package/dist/src/gsd/phase-sync.js +321 -0
  147. package/dist/src/gsd/pil-gate-context.d.ts +13 -0
  148. package/dist/src/gsd/pil-gate-context.js +64 -0
  149. package/dist/src/gsd/pil-gate-critic.d.ts +19 -0
  150. package/dist/src/gsd/pil-gate-critic.js +74 -0
  151. package/dist/src/gsd/plan-council-prompts.d.ts +25 -0
  152. package/dist/src/gsd/plan-council-prompts.js +79 -0
  153. package/dist/src/gsd/plan-council.d.ts +44 -0
  154. package/dist/src/gsd/plan-council.js +251 -0
  155. package/dist/src/gsd/plan-gate-vocabulary.d.ts +40 -0
  156. package/dist/src/gsd/plan-gate-vocabulary.js +64 -0
  157. package/dist/src/gsd/product-workspace.d.ts +13 -0
  158. package/dist/src/gsd/product-workspace.js +124 -0
  159. package/dist/src/gsd/ship-bridge.d.ts +25 -0
  160. package/dist/src/gsd/ship-bridge.js +65 -0
  161. package/dist/src/gsd/state-document.d.ts +40 -0
  162. package/dist/src/gsd/state-document.js +163 -0
  163. package/dist/src/gsd/verdict-schema.d.ts +39 -0
  164. package/dist/src/gsd/verdict-schema.js +144 -0
  165. package/dist/src/gsd/verify-context.d.ts +22 -0
  166. package/dist/src/gsd/verify-context.js +27 -0
  167. package/dist/src/gsd/verify-council-prompts.d.ts +19 -0
  168. package/dist/src/gsd/verify-council-prompts.js +85 -0
  169. package/dist/src/gsd/verify-council.d.ts +25 -0
  170. package/dist/src/gsd/verify-council.js +119 -0
  171. package/dist/src/gsd/verify-gate-vocabulary.d.ts +25 -0
  172. package/dist/src/gsd/verify-gate-vocabulary.js +46 -0
  173. package/dist/src/gsd/workflow-engine.d.ts +60 -0
  174. package/dist/src/gsd/workflow-engine.js +207 -0
  175. package/dist/src/gsd/workflow-tools.d.ts +13 -0
  176. package/dist/src/gsd/workflow-tools.js +277 -0
  177. package/dist/src/hooks/index.js +1 -1
  178. package/dist/src/index.js +44 -11
  179. package/dist/src/maintain/pr-builder.js +23 -13
  180. package/dist/src/mcp/auto-setup.js +57 -32
  181. package/dist/src/mcp/client-pool.js +1 -1
  182. package/dist/src/mcp/ee-tools.js +1 -0
  183. package/dist/src/mcp/research-onboarding.js +8 -7
  184. package/dist/src/mcp/runtime.js +34 -2
  185. package/dist/src/models/catalog-client.d.ts +87 -0
  186. package/dist/src/models/catalog-client.js +105 -38
  187. package/dist/src/models/catalog.json +528 -265
  188. package/dist/src/models/registry.d.ts +22 -7
  189. package/dist/src/models/registry.js +73 -10
  190. package/dist/src/ops/doctor.js +1 -1
  191. package/dist/src/orchestrator/auto-commit.js +1 -1
  192. package/dist/src/orchestrator/batch-turn-runner.js +2 -2
  193. package/dist/src/orchestrator/cache-prefix.d.ts +67 -0
  194. package/dist/src/orchestrator/cache-prefix.js +83 -0
  195. package/dist/src/orchestrator/compact-request.d.ts +32 -0
  196. package/dist/src/orchestrator/compact-request.js +41 -0
  197. package/dist/src/orchestrator/compaction.d.ts +10 -0
  198. package/dist/src/orchestrator/compaction.js +27 -7
  199. package/dist/src/orchestrator/council-manager.d.ts +12 -3
  200. package/dist/src/orchestrator/council-manager.js +65 -24
  201. package/dist/src/orchestrator/cross-turn-dedup.d.ts +6 -0
  202. package/dist/src/orchestrator/cross-turn-dedup.js +22 -1
  203. package/dist/src/orchestrator/error-utils.d.ts +29 -0
  204. package/dist/src/orchestrator/error-utils.js +132 -24
  205. package/dist/src/orchestrator/grounding-check.js +39 -1
  206. package/dist/src/orchestrator/message-processor.js +242 -33
  207. package/dist/src/orchestrator/orchestrator.d.ts +39 -3
  208. package/dist/src/orchestrator/orchestrator.js +651 -102
  209. package/dist/src/orchestrator/preprocessor.js +1 -1
  210. package/dist/src/orchestrator/proactive-compact-detector.d.ts +26 -0
  211. package/dist/src/orchestrator/proactive-compact-detector.js +36 -0
  212. package/dist/src/orchestrator/prompts.js +17 -17
  213. package/dist/src/orchestrator/reactive-delegation.d.ts +39 -0
  214. package/dist/src/orchestrator/reactive-delegation.js +59 -0
  215. package/dist/src/orchestrator/retry-classifier.d.ts +2 -1
  216. package/dist/src/orchestrator/retry-classifier.js +46 -2
  217. package/dist/src/orchestrator/safety-intercept.d.ts +45 -0
  218. package/dist/src/orchestrator/safety-intercept.js +55 -0
  219. package/dist/src/orchestrator/scope-reminder.js +1 -1
  220. package/dist/src/orchestrator/session-experience.d.ts +2 -1
  221. package/dist/src/orchestrator/session-experience.js +2 -1
  222. package/dist/src/orchestrator/should-run-gate.d.ts +5 -0
  223. package/dist/src/orchestrator/should-run-gate.js +18 -0
  224. package/dist/src/orchestrator/stall-watchdog.d.ts +24 -3
  225. package/dist/src/orchestrator/stall-watchdog.js +47 -13
  226. package/dist/src/orchestrator/stream-runner.js +62 -29
  227. package/dist/src/orchestrator/sub-agent-cap.d.ts +13 -1
  228. package/dist/src/orchestrator/sub-agent-cap.js +16 -1
  229. package/dist/src/orchestrator/sub-agent-model-tier.d.ts +13 -1
  230. package/dist/src/orchestrator/sub-agent-model-tier.js +16 -2
  231. package/dist/src/orchestrator/subagent-compactor.d.ts +53 -1
  232. package/dist/src/orchestrator/subagent-compactor.js +126 -15
  233. package/dist/src/orchestrator/tool-engine.d.ts +22 -0
  234. package/dist/src/orchestrator/tool-engine.js +620 -56
  235. package/dist/src/orchestrator/tool-limit-auto-recover.d.ts +22 -0
  236. package/dist/src/orchestrator/tool-limit-auto-recover.js +30 -0
  237. package/dist/src/orchestrator/turn-runner-deps.d.ts +19 -0
  238. package/dist/src/orchestrator/turn-watchdog.d.ts +37 -0
  239. package/dist/src/orchestrator/turn-watchdog.js +55 -0
  240. package/dist/src/pil/agent-operating-contract.d.ts +1 -1
  241. package/dist/src/pil/agent-operating-contract.js +1 -1
  242. package/dist/src/pil/cheap-model-playbook.d.ts +1 -1
  243. package/dist/src/pil/cheap-model-playbook.js +5 -1
  244. package/dist/src/pil/cheap-model-workbooks.d.ts +1 -1
  245. package/dist/src/pil/cheap-model-workbooks.js +1 -1
  246. package/dist/src/pil/discovery-types.d.ts +1 -0
  247. package/dist/src/pil/discovery.js +16 -11
  248. package/dist/src/pil/layer1-intent.d.ts +18 -6
  249. package/dist/src/pil/layer1-intent.js +66 -757
  250. package/dist/src/pil/layer15-context-scan.js +15 -1
  251. package/dist/src/pil/layer3-ee-injection.js +23 -8
  252. package/dist/src/pil/layer4-gsd.js +69 -16
  253. package/dist/src/pil/layer5-context.js +7 -3
  254. package/dist/src/pil/layer6-output.d.ts +23 -0
  255. package/dist/src/pil/layer6-output.js +5 -1
  256. package/dist/src/pil/llm-classify.d.ts +33 -2
  257. package/dist/src/pil/llm-classify.js +123 -131
  258. package/dist/src/pil/native-capabilities-workbook.d.ts +1 -1
  259. package/dist/src/pil/native-capabilities-workbook.js +1 -0
  260. package/dist/src/pil/pipeline.js +34 -2
  261. package/dist/src/pil/response-tools.js +5 -3
  262. package/dist/src/pil/schema.d.ts +1 -0
  263. package/dist/src/pil/schema.js +2 -0
  264. package/dist/src/pil/types.d.ts +18 -0
  265. package/dist/src/playbook/directives.d.ts +4 -0
  266. package/dist/src/playbook/directives.js +17 -5
  267. package/dist/src/product-loop/backlog-builder.d.ts +14 -1
  268. package/dist/src/product-loop/backlog-builder.js +30 -6
  269. package/dist/src/product-loop/discovery-context-format.js +3 -1
  270. package/dist/src/product-loop/discovery-ecosystem.js +4 -1
  271. package/dist/src/product-loop/discovery-interview.js +32 -3
  272. package/dist/src/product-loop/discovery-schema.js +5 -1
  273. package/dist/src/product-loop/ideal-trace.d.ts +7 -0
  274. package/dist/src/product-loop/ideal-trace.js +64 -0
  275. package/dist/src/product-loop/index.d.ts +13 -1
  276. package/dist/src/product-loop/index.js +333 -52
  277. package/dist/src/product-loop/loop-driver.d.ts +7 -0
  278. package/dist/src/product-loop/loop-driver.js +310 -99
  279. package/dist/src/product-loop/phase-plan.d.ts +5 -0
  280. package/dist/src/product-loop/phase-plan.js +39 -2
  281. package/dist/src/product-loop/phase-runner.js +9 -1
  282. package/dist/src/product-loop/sprint-runner.d.ts +111 -0
  283. package/dist/src/product-loop/sprint-runner.js +559 -16
  284. package/dist/src/product-loop/types.d.ts +36 -5
  285. package/dist/src/providers/adapter.d.ts +1 -1
  286. package/dist/src/providers/adapter.js +3 -4
  287. package/dist/src/providers/auth/browser-flow.d.ts +1 -1
  288. package/dist/src/providers/auth/browser-flow.js +1 -1
  289. package/dist/src/providers/auth/openai-oauth.js +1 -1
  290. package/dist/src/providers/auth/registry.js +0 -34
  291. package/dist/src/providers/auth/token-store.js +4 -1
  292. package/dist/src/providers/auth/types.d.ts +1 -1
  293. package/dist/src/providers/auth/types.js +1 -1
  294. package/dist/src/providers/capabilities.d.ts +24 -5
  295. package/dist/src/providers/capabilities.js +42 -24
  296. package/dist/src/providers/endpoints.d.ts +2 -2
  297. package/dist/src/providers/endpoints.js +11 -10
  298. package/dist/src/providers/keychain.d.ts +1 -1
  299. package/dist/src/providers/keychain.js +7 -9
  300. package/dist/src/providers/mcp-vision-bridge.js +56 -146
  301. package/dist/src/providers/openai-compatible.js +8 -1
  302. package/dist/src/providers/pricing.d.ts +2 -2
  303. package/dist/src/providers/pricing.js +3 -13
  304. package/dist/src/providers/runtime.d.ts +27 -2
  305. package/dist/src/providers/runtime.js +78 -15
  306. package/dist/src/providers/strategies/base.strategy.d.ts +16 -0
  307. package/dist/src/providers/strategies/base.strategy.js +24 -1
  308. package/dist/src/providers/strategies/{siliconflow.strategy.d.ts → opencode-go.strategy.d.ts} +3 -3
  309. package/dist/src/providers/strategies/opencode-go.strategy.js +83 -0
  310. package/dist/src/providers/strategies/registry.js +4 -4
  311. package/dist/src/providers/strategies/thinking-mode.d.ts +109 -0
  312. package/dist/src/providers/strategies/thinking-mode.js +280 -1
  313. package/dist/src/providers/strategies/zai.strategy.d.ts +14 -0
  314. package/dist/src/providers/strategies/zai.strategy.js +44 -0
  315. package/dist/src/providers/types.d.ts +5 -6
  316. package/dist/src/providers/types.js +2 -2
  317. package/dist/src/providers/vision-backend.d.ts +47 -0
  318. package/dist/src/providers/vision-backend.js +258 -0
  319. package/dist/src/providers/vision-proxy.d.ts +22 -9
  320. package/dist/src/providers/vision-proxy.js +63 -132
  321. package/dist/src/providers/wire-debug.js +95 -0
  322. package/dist/src/router/decide.d.ts +13 -0
  323. package/dist/src/router/decide.js +138 -36
  324. package/dist/src/router/peak-hour.d.ts +38 -0
  325. package/dist/src/router/peak-hour.js +107 -0
  326. package/dist/src/router/step-router.js +3 -2
  327. package/dist/src/router/warm.js +4 -5
  328. package/dist/src/scaffold/continuation-prompt.d.ts +11 -0
  329. package/dist/src/scaffold/continuation-prompt.js +26 -0
  330. package/dist/src/scaffold/point-to-existing.d.ts +21 -0
  331. package/dist/src/scaffold/point-to-existing.js +25 -0
  332. package/dist/src/self-qa/agentic-loop.js +3 -3
  333. package/dist/src/{ui/state → state}/active-run.d.ts +19 -0
  334. package/dist/src/{ui/state → state}/active-run.js +21 -0
  335. package/dist/src/{ui/status-bar/store.d.ts → state/status-bar-store.d.ts} +4 -1
  336. package/dist/src/{ui/status-bar/store.js → state/status-bar-store.js} +12 -9
  337. package/dist/src/state/turn-trace.d.ts +43 -0
  338. package/dist/src/state/turn-trace.js +32 -0
  339. package/dist/src/storage/db.js +2 -1
  340. package/dist/src/storage/index.d.ts +1 -1
  341. package/dist/src/storage/index.js +1 -1
  342. package/dist/src/storage/interaction-log.d.ts +1 -1
  343. package/dist/src/storage/migrations.js +71 -1
  344. package/dist/src/storage/sessions.d.ts +28 -10
  345. package/dist/src/storage/sessions.js +78 -21
  346. package/dist/src/storage/transcript-view.js +1 -1
  347. package/dist/src/storage/transcript.d.ts +51 -0
  348. package/dist/src/storage/transcript.js +284 -13
  349. package/dist/src/tools/file.d.ts +15 -0
  350. package/dist/src/tools/file.js +32 -0
  351. package/dist/src/tools/native-tools.js +5 -0
  352. package/dist/src/tools/registry.d.ts +3 -0
  353. package/dist/src/tools/registry.js +460 -22
  354. package/dist/src/tools/research.d.ts +29 -0
  355. package/dist/src/tools/research.js +233 -0
  356. package/dist/src/types/index.d.ts +118 -3
  357. package/dist/src/ui/app.js +0 -0
  358. package/dist/src/ui/cards/product-status-card.js +1 -1
  359. package/dist/src/ui/components/bubble-body-guard.d.ts +27 -0
  360. package/dist/src/ui/components/bubble-body-guard.js +50 -0
  361. package/dist/src/ui/components/context-rail.d.ts +26 -0
  362. package/dist/src/ui/components/context-rail.js +33 -0
  363. package/dist/src/ui/components/council-conclusion-card.d.ts +73 -0
  364. package/dist/src/ui/components/council-conclusion-card.js +420 -0
  365. package/dist/src/ui/components/council-debate-pill.d.ts +36 -0
  366. package/dist/src/ui/components/council-debate-pill.js +34 -0
  367. package/dist/src/ui/components/council-info-card.js +2 -2
  368. package/dist/src/ui/components/council-leader-bubble.d.ts +10 -3
  369. package/dist/src/ui/components/council-leader-bubble.js +21 -11
  370. package/dist/src/ui/components/council-message-bubble.d.ts +15 -2
  371. package/dist/src/ui/components/council-message-bubble.js +16 -15
  372. package/dist/src/ui/components/council-phase-timeline.d.ts +9 -1
  373. package/dist/src/ui/components/council-phase-timeline.js +49 -15
  374. package/dist/src/ui/components/council-placeholder-bubble.d.ts +16 -9
  375. package/dist/src/ui/components/council-placeholder-bubble.js +32 -29
  376. package/dist/src/ui/components/council-question-card.js +12 -12
  377. package/dist/src/ui/components/council-rail-rounds.d.ts +26 -0
  378. package/dist/src/ui/components/council-rail-rounds.js +57 -0
  379. package/dist/src/ui/components/council-round-group.d.ts +38 -0
  380. package/dist/src/ui/components/council-round-group.js +88 -0
  381. package/dist/src/ui/components/council-status-list.d.ts +3 -1
  382. package/dist/src/ui/components/council-status-list.js +36 -24
  383. package/dist/src/ui/components/council-synthesis-banner.d.ts +7 -2
  384. package/dist/src/ui/components/council-synthesis-banner.js +20 -5
  385. package/dist/src/ui/components/halt-recovery-card.js +9 -5
  386. package/dist/src/ui/components/jump-to-latest-pill.d.ts +11 -0
  387. package/dist/src/ui/components/jump-to-latest-pill.js +14 -0
  388. package/dist/src/ui/components/prompt-box.js +18 -16
  389. package/dist/src/ui/components/session-tree-card.d.ts +14 -0
  390. package/dist/src/ui/components/session-tree-card.js +46 -0
  391. package/dist/src/ui/components/slash-inline-menu.d.ts +12 -0
  392. package/dist/src/ui/components/slash-inline-menu.js +26 -5
  393. package/dist/src/ui/components/task-list-panel.d.ts +14 -1
  394. package/dist/src/ui/components/task-list-panel.js +22 -2
  395. package/dist/src/ui/containers/modals-layer.d.ts +2 -1
  396. package/dist/src/ui/hooks/use-session-picker.d.ts +3 -3
  397. package/dist/src/ui/mcp-modal.js +2 -4
  398. package/dist/src/ui/modals/api-key-modal.js +1 -1
  399. package/dist/src/ui/modals/connect-modal.js +4 -3
  400. package/dist/src/ui/modals/session-picker-modal.d.ts +2 -2
  401. package/dist/src/ui/modals/session-picker-modal.js +3 -5
  402. package/dist/src/ui/picker-providers.d.ts +1 -1
  403. package/dist/src/ui/picker-providers.js +1 -1
  404. package/dist/src/ui/primitives/index.d.ts +1 -0
  405. package/dist/src/ui/primitives/index.js +2 -0
  406. package/dist/src/ui/primitives/semantic-primitives.d.ts +76 -0
  407. package/dist/src/ui/primitives/semantic-primitives.js +81 -0
  408. package/dist/src/ui/slash/compact.js +5 -7
  409. package/dist/src/ui/slash/cost.js +1 -1
  410. package/dist/src/ui/slash/council.js +19 -1
  411. package/dist/src/ui/slash/debug.d.ts +3 -31
  412. package/dist/src/ui/slash/debug.js +9 -20
  413. package/dist/src/ui/slash/ideal.d.ts +6 -2
  414. package/dist/src/ui/slash/ideal.js +97 -7
  415. package/dist/src/ui/slash/menu-items.d.ts +7 -0
  416. package/dist/src/ui/slash/menu-items.js +12 -18
  417. package/dist/src/ui/slash/registry.d.ts +2 -0
  418. package/dist/src/ui/slash/registry.js +4 -0
  419. package/dist/src/ui/status-bar/cache-hit.d.ts +6 -0
  420. package/dist/src/ui/status-bar/cache-hit.js +9 -0
  421. package/dist/src/ui/status-bar/index.d.ts +1 -1
  422. package/dist/src/ui/status-bar/index.js +7 -3
  423. package/dist/src/ui/status-bar/usd-meter.d.ts +5 -4
  424. package/dist/src/ui/status-bar/usd-meter.js +6 -4
  425. package/dist/src/ui/theme.d.ts +1 -0
  426. package/dist/src/ui/theme.js +2 -0
  427. package/dist/src/ui/types.d.ts +7 -0
  428. package/dist/src/ui/use-app-logic.js +0 -0
  429. package/dist/src/ui/utils/format.d.ts +14 -0
  430. package/dist/src/ui/utils/format.js +23 -3
  431. package/dist/src/usage/downgrade.js +2 -2
  432. package/dist/src/usage/product-ledger.js +2 -2
  433. package/dist/src/utils/install-manager.js +2 -1
  434. package/dist/src/utils/logger.js +2 -2
  435. package/dist/src/utils/permission-mode.js +5 -3
  436. package/dist/src/utils/redactor.js +1 -1
  437. package/dist/src/utils/settings.d.ts +153 -5
  438. package/dist/src/utils/settings.js +233 -29
  439. package/dist/src/utils/visible-retry.d.ts +11 -0
  440. package/dist/src/utils/visible-retry.js +10 -1
  441. package/dist/src/verify/entrypoint.d.ts +1 -1
  442. package/dist/src/verify/entrypoint.js +1 -1
  443. package/dist/src/verify/recipes.d.ts +13 -0
  444. package/dist/src/verify/recipes.js +15 -0
  445. package/package.json +135 -132
  446. package/dist/src/providers/auth/gcloud.d.ts +0 -28
  447. package/dist/src/providers/auth/gcloud.js +0 -102
  448. package/dist/src/providers/auth/gemini-oauth.d.ts +0 -82
  449. package/dist/src/providers/auth/gemini-oauth.js +0 -472
  450. package/dist/src/providers/gemini.d.ts +0 -11
  451. package/dist/src/providers/gemini.js +0 -45
  452. package/dist/src/providers/siliconflow-sse-repair.d.ts +0 -58
  453. package/dist/src/providers/siliconflow-sse-repair.js +0 -177
  454. package/dist/src/providers/strategies/google.strategy.d.ts +0 -22
  455. package/dist/src/providers/strategies/google.strategy.js +0 -174
  456. package/dist/src/providers/strategies/siliconflow.strategy.js +0 -29
  457. package/dist/src/ui/containers/chat-feed.d.ts +0 -40
  458. 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