muonroi-cli 1.8.3 → 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 (477) hide show
  1. package/LICENSE +21 -21
  2. package/README.md +133 -122
  3. package/dist/packages/agent-harness-core/src/driver.d.ts +27 -1
  4. package/dist/packages/agent-harness-core/src/driver.js +46 -0
  5. package/dist/packages/agent-harness-core/src/event-tee.d.ts +48 -0
  6. package/dist/packages/agent-harness-core/src/event-tee.js +77 -0
  7. package/dist/packages/agent-harness-core/src/mcp-server.d.ts +11 -0
  8. package/dist/packages/agent-harness-core/src/mcp-server.js +87 -15
  9. package/dist/packages/agent-harness-core/src/protocol.d.ts +66 -2
  10. package/dist/packages/agent-harness-core/src/protocol.js +15 -0
  11. package/dist/packages/agent-harness-core/src/visual-quality.d.ts +58 -0
  12. package/dist/packages/agent-harness-core/src/visual-quality.js +141 -0
  13. package/dist/packages/agent-harness-opentui/src/agent-mode.d.ts +6 -0
  14. package/dist/packages/agent-harness-opentui/src/agent-mode.js +14 -1
  15. package/dist/packages/agent-harness-opentui/src/input-bridge.d.ts +2 -10
  16. package/dist/packages/agent-harness-opentui/src/input-bridge.js +103 -16
  17. package/dist/packages/agent-harness-opentui/src/install.d.ts +8 -0
  18. package/dist/packages/agent-harness-opentui/src/install.js +10 -0
  19. package/dist/packages/agent-harness-opentui/src/semantic.js +12 -10
  20. package/dist/packages/agent-harness-opentui/src/visual-capture.d.ts +56 -0
  21. package/dist/packages/agent-harness-opentui/src/visual-capture.js +103 -0
  22. package/dist/src/agent-harness/mock-model.d.ts +28 -0
  23. package/dist/src/agent-harness/mock-model.js +63 -1
  24. package/dist/src/agent-harness/test-spawn.js +31 -0
  25. package/dist/src/cli/config/screen-providers.js +1 -1
  26. package/dist/src/cli/cost-forensics.d.ts +10 -0
  27. package/dist/src/cli/cost-forensics.js +30 -15
  28. package/dist/src/cli/keys-bundle.d.ts +1 -1
  29. package/dist/src/cli/keys-bundle.js +1 -1
  30. package/dist/src/cli/keys.d.ts +2 -2
  31. package/dist/src/cli/keys.js +19 -81
  32. package/dist/src/council/clarifier.d.ts +28 -2
  33. package/dist/src/council/clarifier.js +81 -15
  34. package/dist/src/council/context.js +49 -15
  35. package/dist/src/council/debate-checkpoint.d.ts +129 -0
  36. package/dist/src/council/debate-checkpoint.js +176 -0
  37. package/dist/src/council/debate-planner.js +51 -3
  38. package/dist/src/council/debate-summary.d.ts +25 -0
  39. package/dist/src/council/debate-summary.js +85 -0
  40. package/dist/src/council/debate.d.ts +169 -2
  41. package/dist/src/council/debate.js +1210 -134
  42. package/dist/src/council/index.d.ts +85 -1
  43. package/dist/src/council/index.js +634 -196
  44. package/dist/src/council/leader.d.ts +26 -0
  45. package/dist/src/council/leader.js +150 -9
  46. package/dist/src/council/llm.d.ts +32 -0
  47. package/dist/src/council/llm.js +231 -38
  48. package/dist/src/council/panel-select.d.ts +30 -0
  49. package/dist/src/council/panel-select.js +72 -0
  50. package/dist/src/council/planner.js +23 -0
  51. package/dist/src/council/preflight.d.ts +7 -0
  52. package/dist/src/council/preflight.js +14 -2
  53. package/dist/src/council/prompts.d.ts +30 -3
  54. package/dist/src/council/prompts.js +254 -84
  55. package/dist/src/council/stance-recall.d.ts +42 -0
  56. package/dist/src/council/stance-recall.js +57 -0
  57. package/dist/src/council/strip-think.d.ts +17 -0
  58. package/dist/src/council/strip-think.js +33 -0
  59. package/dist/src/council/types.d.ts +128 -0
  60. package/dist/src/ee/artifact-cache.d.ts +16 -0
  61. package/dist/src/ee/artifact-cache.js +32 -0
  62. package/dist/src/ee/auth.d.ts +1 -0
  63. package/dist/src/ee/auth.js +15 -2
  64. package/dist/src/ee/bridge.d.ts +10 -0
  65. package/dist/src/ee/bridge.js +58 -0
  66. package/dist/src/ee/client.js +81 -18
  67. package/dist/src/ee/export-transcripts.d.ts +1 -0
  68. package/dist/src/ee/export-transcripts.js +8 -10
  69. package/dist/src/ee/extract-session.js +29 -0
  70. package/dist/src/ee/extract-style.d.ts +58 -0
  71. package/dist/src/ee/extract-style.js +270 -0
  72. package/dist/src/ee/recall-ledger.d.ts +9 -0
  73. package/dist/src/ee/recall-ledger.js +3 -0
  74. package/dist/src/ee/scope.d.ts +1 -0
  75. package/dist/src/ee/scope.js +26 -1
  76. package/dist/src/ee/search.d.ts +7 -0
  77. package/dist/src/ee/search.js +24 -0
  78. package/dist/src/ee/transcript-emit.js +2 -0
  79. package/dist/src/ee/types.d.ts +22 -0
  80. package/dist/src/ee/who-am-i-brain.d.ts +35 -0
  81. package/dist/src/ee/who-am-i-brain.js +220 -0
  82. package/dist/src/ee/who-am-i.d.ts +10 -3
  83. package/dist/src/ee/who-am-i.js +12 -0
  84. package/dist/src/ee/workflow-event.d.ts +48 -0
  85. package/dist/src/ee/workflow-event.js +81 -0
  86. package/dist/src/flow/compaction/compress.d.ts +3 -3
  87. package/dist/src/flow/compaction/compress.js +45 -8
  88. package/dist/src/flow/compaction/extract.d.ts +4 -7
  89. package/dist/src/flow/compaction/extract.js +50 -10
  90. package/dist/src/flow/compaction/index.d.ts +13 -1
  91. package/dist/src/flow/compaction/index.js +70 -3
  92. package/dist/src/flow/compaction/input-guard.d.ts +24 -0
  93. package/dist/src/flow/compaction/input-guard.js +43 -0
  94. package/dist/src/flow/fold-planning.d.ts +36 -0
  95. package/dist/src/flow/fold-planning.js +83 -0
  96. package/dist/src/flow/hierarchy.d.ts +146 -0
  97. package/dist/src/flow/hierarchy.js +427 -0
  98. package/dist/src/flow/index.d.ts +1 -0
  99. package/dist/src/flow/index.js +2 -0
  100. package/dist/src/flow/run-artifacts.d.ts +102 -0
  101. package/dist/src/flow/run-artifacts.js +208 -0
  102. package/dist/src/generated/version.d.ts +1 -1
  103. package/dist/src/generated/version.js +1 -1
  104. package/dist/src/gsd/assessment-schema.d.ts +44 -0
  105. package/dist/src/gsd/assessment-schema.js +134 -0
  106. package/dist/src/gsd/capability-registry.d.ts +45 -0
  107. package/dist/src/gsd/capability-registry.js +337 -0
  108. package/dist/src/gsd/complexity-assessor.d.ts +39 -0
  109. package/dist/src/gsd/complexity-assessor.js +152 -0
  110. package/dist/src/gsd/config-bridge.d.ts +7 -0
  111. package/dist/src/gsd/config-bridge.js +114 -0
  112. package/dist/src/gsd/config-loader.d.ts +27 -0
  113. package/dist/src/gsd/config-loader.js +50 -0
  114. package/dist/src/gsd/council-context.d.ts +44 -0
  115. package/dist/src/gsd/council-context.js +114 -0
  116. package/dist/src/gsd/ee-closure.d.ts +28 -0
  117. package/dist/src/gsd/ee-closure.js +49 -0
  118. package/dist/src/gsd/flags.d.ts +55 -0
  119. package/dist/src/gsd/flags.js +83 -0
  120. package/dist/src/gsd/gsd-dispatch.d.ts +58 -0
  121. package/dist/src/gsd/gsd-dispatch.js +131 -0
  122. package/dist/src/gsd/gsd-runtime.d.ts +22 -0
  123. package/dist/src/gsd/gsd-runtime.js +37 -0
  124. package/dist/src/gsd/host-adapter.d.ts +11 -0
  125. package/dist/src/gsd/host-adapter.js +29 -0
  126. package/dist/src/gsd/index.d.ts +24 -1
  127. package/dist/src/gsd/index.js +27 -0
  128. package/dist/src/gsd/loop-host-contract.d.ts +21 -0
  129. package/dist/src/gsd/loop-host-contract.js +39 -0
  130. package/dist/src/gsd/loop-host.d.ts +69 -0
  131. package/dist/src/gsd/loop-host.js +245 -0
  132. package/dist/src/gsd/loop-resolver.d.ts +36 -0
  133. package/dist/src/gsd/loop-resolver.js +79 -0
  134. package/dist/src/gsd/model-tier.d.ts +13 -0
  135. package/dist/src/gsd/model-tier.js +45 -0
  136. package/dist/src/gsd/mutation-gate.d.ts +16 -0
  137. package/dist/src/gsd/mutation-gate.js +41 -0
  138. package/dist/src/gsd/native-roadmap.d.ts +89 -0
  139. package/dist/src/gsd/native-roadmap.js +343 -0
  140. package/dist/src/gsd/native-state.d.ts +47 -0
  141. package/dist/src/gsd/native-state.js +220 -0
  142. package/dist/src/gsd/paths.d.ts +23 -0
  143. package/dist/src/gsd/paths.js +66 -0
  144. package/dist/src/gsd/phase-dag.d.ts +12 -0
  145. package/dist/src/gsd/phase-dag.js +94 -0
  146. package/dist/src/gsd/phase-sync.d.ts +42 -0
  147. package/dist/src/gsd/phase-sync.js +321 -0
  148. package/dist/src/gsd/pil-gate-context.d.ts +13 -0
  149. package/dist/src/gsd/pil-gate-context.js +64 -0
  150. package/dist/src/gsd/pil-gate-critic.d.ts +19 -0
  151. package/dist/src/gsd/pil-gate-critic.js +74 -0
  152. package/dist/src/gsd/plan-council-prompts.d.ts +25 -0
  153. package/dist/src/gsd/plan-council-prompts.js +79 -0
  154. package/dist/src/gsd/plan-council.d.ts +44 -0
  155. package/dist/src/gsd/plan-council.js +251 -0
  156. package/dist/src/gsd/plan-gate-vocabulary.d.ts +40 -0
  157. package/dist/src/gsd/plan-gate-vocabulary.js +64 -0
  158. package/dist/src/gsd/product-workspace.d.ts +13 -0
  159. package/dist/src/gsd/product-workspace.js +124 -0
  160. package/dist/src/gsd/ship-bridge.d.ts +25 -0
  161. package/dist/src/gsd/ship-bridge.js +65 -0
  162. package/dist/src/gsd/state-document.d.ts +40 -0
  163. package/dist/src/gsd/state-document.js +163 -0
  164. package/dist/src/gsd/verdict-schema.d.ts +39 -0
  165. package/dist/src/gsd/verdict-schema.js +144 -0
  166. package/dist/src/gsd/verify-context.d.ts +22 -0
  167. package/dist/src/gsd/verify-context.js +27 -0
  168. package/dist/src/gsd/verify-council-prompts.d.ts +19 -0
  169. package/dist/src/gsd/verify-council-prompts.js +85 -0
  170. package/dist/src/gsd/verify-council.d.ts +25 -0
  171. package/dist/src/gsd/verify-council.js +119 -0
  172. package/dist/src/gsd/verify-gate-vocabulary.d.ts +25 -0
  173. package/dist/src/gsd/verify-gate-vocabulary.js +46 -0
  174. package/dist/src/gsd/workflow-engine.d.ts +60 -0
  175. package/dist/src/gsd/workflow-engine.js +207 -0
  176. package/dist/src/gsd/workflow-tools.d.ts +13 -0
  177. package/dist/src/gsd/workflow-tools.js +277 -0
  178. package/dist/src/hooks/index.js +1 -1
  179. package/dist/src/index.js +44 -11
  180. package/dist/src/maintain/pr-builder.js +23 -13
  181. package/dist/src/mcp/auto-setup.js +57 -32
  182. package/dist/src/mcp/client-pool.js +1 -1
  183. package/dist/src/mcp/ee-tools.js +1 -0
  184. package/dist/src/mcp/oauth-callback.js +2 -2
  185. package/dist/src/mcp/research-onboarding.js +8 -7
  186. package/dist/src/mcp/runtime.js +34 -2
  187. package/dist/src/mcp/setup-guide-text.d.ts +1 -1
  188. package/dist/src/mcp/setup-guide-text.js +77 -76
  189. package/dist/src/models/catalog-client.d.ts +87 -0
  190. package/dist/src/models/catalog-client.js +105 -38
  191. package/dist/src/models/catalog.json +528 -265
  192. package/dist/src/models/registry.d.ts +22 -7
  193. package/dist/src/models/registry.js +73 -10
  194. package/dist/src/ops/doctor.js +8 -8
  195. package/dist/src/orchestrator/auto-commit.js +1 -1
  196. package/dist/src/orchestrator/batch-turn-runner.js +2 -2
  197. package/dist/src/orchestrator/cache-prefix.d.ts +67 -0
  198. package/dist/src/orchestrator/cache-prefix.js +83 -0
  199. package/dist/src/orchestrator/compact-request.d.ts +32 -0
  200. package/dist/src/orchestrator/compact-request.js +41 -0
  201. package/dist/src/orchestrator/compaction.d.ts +10 -0
  202. package/dist/src/orchestrator/compaction.js +27 -7
  203. package/dist/src/orchestrator/council-manager.d.ts +12 -3
  204. package/dist/src/orchestrator/council-manager.js +65 -24
  205. package/dist/src/orchestrator/cross-turn-dedup.d.ts +6 -0
  206. package/dist/src/orchestrator/cross-turn-dedup.js +22 -1
  207. package/dist/src/orchestrator/error-utils.d.ts +29 -0
  208. package/dist/src/orchestrator/error-utils.js +132 -24
  209. package/dist/src/orchestrator/grounding-check.js +39 -1
  210. package/dist/src/orchestrator/message-processor.js +242 -33
  211. package/dist/src/orchestrator/orchestrator.d.ts +39 -3
  212. package/dist/src/orchestrator/orchestrator.js +651 -102
  213. package/dist/src/orchestrator/preprocessor.js +1 -1
  214. package/dist/src/orchestrator/proactive-compact-detector.d.ts +26 -0
  215. package/dist/src/orchestrator/proactive-compact-detector.js +36 -0
  216. package/dist/src/orchestrator/prompts.js +159 -159
  217. package/dist/src/orchestrator/reactive-delegation.d.ts +39 -0
  218. package/dist/src/orchestrator/reactive-delegation.js +59 -0
  219. package/dist/src/orchestrator/retry-classifier.d.ts +2 -1
  220. package/dist/src/orchestrator/retry-classifier.js +46 -2
  221. package/dist/src/orchestrator/safety-intercept.d.ts +45 -0
  222. package/dist/src/orchestrator/safety-intercept.js +55 -0
  223. package/dist/src/orchestrator/scope-reminder.js +1 -1
  224. package/dist/src/orchestrator/session-experience.d.ts +2 -1
  225. package/dist/src/orchestrator/session-experience.js +2 -1
  226. package/dist/src/orchestrator/should-run-gate.d.ts +5 -0
  227. package/dist/src/orchestrator/should-run-gate.js +18 -0
  228. package/dist/src/orchestrator/stall-watchdog.d.ts +24 -3
  229. package/dist/src/orchestrator/stall-watchdog.js +47 -13
  230. package/dist/src/orchestrator/stream-runner.js +62 -29
  231. package/dist/src/orchestrator/sub-agent-cap.d.ts +13 -1
  232. package/dist/src/orchestrator/sub-agent-cap.js +16 -1
  233. package/dist/src/orchestrator/sub-agent-model-tier.d.ts +13 -1
  234. package/dist/src/orchestrator/sub-agent-model-tier.js +16 -2
  235. package/dist/src/orchestrator/subagent-compactor.d.ts +53 -1
  236. package/dist/src/orchestrator/subagent-compactor.js +126 -15
  237. package/dist/src/orchestrator/tool-engine.d.ts +26 -0
  238. package/dist/src/orchestrator/tool-engine.js +669 -56
  239. package/dist/src/orchestrator/tool-limit-auto-recover.d.ts +22 -0
  240. package/dist/src/orchestrator/tool-limit-auto-recover.js +30 -0
  241. package/dist/src/orchestrator/turn-runner-deps.d.ts +19 -0
  242. package/dist/src/orchestrator/turn-watchdog.d.ts +37 -0
  243. package/dist/src/orchestrator/turn-watchdog.js +55 -0
  244. package/dist/src/pil/agent-operating-contract.d.ts +1 -1
  245. package/dist/src/pil/agent-operating-contract.js +1 -1
  246. package/dist/src/pil/cheap-model-playbook.d.ts +1 -1
  247. package/dist/src/pil/cheap-model-playbook.js +5 -1
  248. package/dist/src/pil/cheap-model-workbooks.d.ts +1 -1
  249. package/dist/src/pil/cheap-model-workbooks.js +1 -1
  250. package/dist/src/pil/discovery-types.d.ts +1 -0
  251. package/dist/src/pil/discovery.js +16 -11
  252. package/dist/src/pil/layer1-intent.d.ts +18 -6
  253. package/dist/src/pil/layer1-intent.js +66 -757
  254. package/dist/src/pil/layer15-context-scan.js +15 -1
  255. package/dist/src/pil/layer2_5-ponytail.js +8 -8
  256. package/dist/src/pil/layer3-ee-injection.js +23 -8
  257. package/dist/src/pil/layer4-gsd.js +69 -16
  258. package/dist/src/pil/layer5-context.js +7 -3
  259. package/dist/src/pil/layer6-output.d.ts +23 -0
  260. package/dist/src/pil/layer6-output.js +5 -1
  261. package/dist/src/pil/llm-classify.d.ts +33 -2
  262. package/dist/src/pil/llm-classify.js +123 -131
  263. package/dist/src/pil/native-capabilities-workbook.d.ts +1 -1
  264. package/dist/src/pil/native-capabilities-workbook.js +1 -0
  265. package/dist/src/pil/pipeline.js +34 -2
  266. package/dist/src/pil/response-tools.js +5 -3
  267. package/dist/src/pil/schema.d.ts +1 -0
  268. package/dist/src/pil/schema.js +2 -0
  269. package/dist/src/pil/types.d.ts +18 -0
  270. package/dist/src/playbook/directives.d.ts +4 -0
  271. package/dist/src/playbook/directives.js +17 -5
  272. package/dist/src/product-loop/backlog-builder.d.ts +14 -1
  273. package/dist/src/product-loop/backlog-builder.js +30 -6
  274. package/dist/src/product-loop/discovery-context-format.js +3 -1
  275. package/dist/src/product-loop/discovery-ecosystem.js +4 -1
  276. package/dist/src/product-loop/discovery-interview.js +32 -3
  277. package/dist/src/product-loop/discovery-schema.js +5 -1
  278. package/dist/src/product-loop/done-gate.js +3 -3
  279. package/dist/src/product-loop/ideal-trace.d.ts +7 -0
  280. package/dist/src/product-loop/ideal-trace.js +64 -0
  281. package/dist/src/product-loop/index.d.ts +13 -1
  282. package/dist/src/product-loop/index.js +333 -52
  283. package/dist/src/product-loop/loop-driver.d.ts +7 -0
  284. package/dist/src/product-loop/loop-driver.js +327 -116
  285. package/dist/src/product-loop/phase-plan.d.ts +5 -0
  286. package/dist/src/product-loop/phase-plan.js +39 -2
  287. package/dist/src/product-loop/phase-runner.js +9 -1
  288. package/dist/src/product-loop/progress-snapshot.js +4 -4
  289. package/dist/src/product-loop/sprint-runner.d.ts +111 -0
  290. package/dist/src/product-loop/sprint-runner.js +559 -16
  291. package/dist/src/product-loop/types.d.ts +36 -5
  292. package/dist/src/providers/adapter.d.ts +1 -1
  293. package/dist/src/providers/adapter.js +3 -4
  294. package/dist/src/providers/auth/browser-flow.d.ts +1 -1
  295. package/dist/src/providers/auth/browser-flow.js +1 -1
  296. package/dist/src/providers/auth/openai-oauth.js +1 -1
  297. package/dist/src/providers/auth/registry.js +0 -34
  298. package/dist/src/providers/auth/token-store.js +4 -1
  299. package/dist/src/providers/auth/types.d.ts +1 -1
  300. package/dist/src/providers/auth/types.js +1 -1
  301. package/dist/src/providers/capabilities.d.ts +24 -5
  302. package/dist/src/providers/capabilities.js +42 -24
  303. package/dist/src/providers/endpoints.d.ts +2 -2
  304. package/dist/src/providers/endpoints.js +11 -10
  305. package/dist/src/providers/keychain.d.ts +1 -1
  306. package/dist/src/providers/keychain.js +7 -9
  307. package/dist/src/providers/mcp-vision-bridge.js +82 -172
  308. package/dist/src/providers/openai-compatible.js +8 -1
  309. package/dist/src/providers/pricing.d.ts +2 -2
  310. package/dist/src/providers/pricing.js +3 -13
  311. package/dist/src/providers/runtime.d.ts +27 -2
  312. package/dist/src/providers/runtime.js +78 -15
  313. package/dist/src/providers/strategies/base.strategy.d.ts +16 -0
  314. package/dist/src/providers/strategies/base.strategy.js +24 -1
  315. package/dist/src/providers/strategies/{siliconflow.strategy.d.ts → opencode-go.strategy.d.ts} +3 -3
  316. package/dist/src/providers/strategies/opencode-go.strategy.js +83 -0
  317. package/dist/src/providers/strategies/registry.js +4 -4
  318. package/dist/src/providers/strategies/thinking-mode.d.ts +109 -0
  319. package/dist/src/providers/strategies/thinking-mode.js +280 -1
  320. package/dist/src/providers/strategies/zai.strategy.d.ts +14 -0
  321. package/dist/src/providers/strategies/zai.strategy.js +44 -0
  322. package/dist/src/providers/types.d.ts +5 -6
  323. package/dist/src/providers/types.js +2 -2
  324. package/dist/src/providers/vision-backend.d.ts +47 -0
  325. package/dist/src/providers/vision-backend.js +258 -0
  326. package/dist/src/providers/vision-proxy.d.ts +22 -9
  327. package/dist/src/providers/vision-proxy.js +63 -132
  328. package/dist/src/providers/wire-debug.js +95 -0
  329. package/dist/src/reporter/index.js +1 -1
  330. package/dist/src/router/decide.d.ts +13 -0
  331. package/dist/src/router/decide.js +138 -36
  332. package/dist/src/router/peak-hour.d.ts +38 -0
  333. package/dist/src/router/peak-hour.js +107 -0
  334. package/dist/src/router/step-router.js +3 -2
  335. package/dist/src/router/warm.js +4 -5
  336. package/dist/src/scaffold/bb-ecosystem-apply.js +47 -47
  337. package/dist/src/scaffold/bb-quality-gate.js +5 -5
  338. package/dist/src/scaffold/continuation-prompt.d.ts +11 -0
  339. package/dist/src/scaffold/continuation-prompt.js +86 -60
  340. package/dist/src/scaffold/init-new.js +453 -453
  341. package/dist/src/scaffold/point-to-existing.d.ts +21 -0
  342. package/dist/src/scaffold/point-to-existing.js +25 -0
  343. package/dist/src/self-qa/agentic-loop.js +22 -22
  344. package/dist/src/{ui/state → state}/active-run.d.ts +19 -0
  345. package/dist/src/{ui/state → state}/active-run.js +21 -0
  346. package/dist/src/{ui/status-bar/store.d.ts → state/status-bar-store.d.ts} +4 -1
  347. package/dist/src/{ui/status-bar/store.js → state/status-bar-store.js} +12 -9
  348. package/dist/src/state/turn-trace.d.ts +43 -0
  349. package/dist/src/state/turn-trace.js +32 -0
  350. package/dist/src/storage/db.js +2 -1
  351. package/dist/src/storage/index.d.ts +1 -1
  352. package/dist/src/storage/index.js +1 -1
  353. package/dist/src/storage/interaction-log.d.ts +1 -1
  354. package/dist/src/storage/interaction-log.js +5 -5
  355. package/dist/src/storage/migrations.js +196 -126
  356. package/dist/src/storage/session-experience-store.js +4 -4
  357. package/dist/src/storage/sessions.d.ts +28 -10
  358. package/dist/src/storage/sessions.js +112 -55
  359. package/dist/src/storage/transcript-view.js +1 -1
  360. package/dist/src/storage/transcript.d.ts +51 -0
  361. package/dist/src/storage/transcript.js +383 -112
  362. package/dist/src/storage/usage.js +14 -14
  363. package/dist/src/storage/workspaces.js +12 -12
  364. package/dist/src/tools/file.d.ts +15 -0
  365. package/dist/src/tools/file.js +32 -0
  366. package/dist/src/tools/native-tools.js +5 -0
  367. package/dist/src/tools/registry.d.ts +3 -0
  368. package/dist/src/tools/registry.js +460 -22
  369. package/dist/src/tools/research.d.ts +29 -0
  370. package/dist/src/tools/research.js +233 -0
  371. package/dist/src/types/index.d.ts +118 -3
  372. package/dist/src/ui/app.js +0 -0
  373. package/dist/src/ui/cards/product-status-card.js +1 -1
  374. package/dist/src/ui/components/bubble-body-guard.d.ts +27 -0
  375. package/dist/src/ui/components/bubble-body-guard.js +50 -0
  376. package/dist/src/ui/components/context-rail.d.ts +26 -0
  377. package/dist/src/ui/components/context-rail.js +33 -0
  378. package/dist/src/ui/components/council-conclusion-card.d.ts +73 -0
  379. package/dist/src/ui/components/council-conclusion-card.js +420 -0
  380. package/dist/src/ui/components/council-debate-pill.d.ts +36 -0
  381. package/dist/src/ui/components/council-debate-pill.js +34 -0
  382. package/dist/src/ui/components/council-info-card.js +2 -2
  383. package/dist/src/ui/components/council-leader-bubble.d.ts +10 -3
  384. package/dist/src/ui/components/council-leader-bubble.js +21 -11
  385. package/dist/src/ui/components/council-message-bubble.d.ts +15 -2
  386. package/dist/src/ui/components/council-message-bubble.js +16 -15
  387. package/dist/src/ui/components/council-phase-timeline.d.ts +9 -1
  388. package/dist/src/ui/components/council-phase-timeline.js +49 -15
  389. package/dist/src/ui/components/council-placeholder-bubble.d.ts +16 -9
  390. package/dist/src/ui/components/council-placeholder-bubble.js +32 -29
  391. package/dist/src/ui/components/council-question-card.js +12 -12
  392. package/dist/src/ui/components/council-rail-rounds.d.ts +26 -0
  393. package/dist/src/ui/components/council-rail-rounds.js +57 -0
  394. package/dist/src/ui/components/council-round-group.d.ts +38 -0
  395. package/dist/src/ui/components/council-round-group.js +88 -0
  396. package/dist/src/ui/components/council-status-list.d.ts +3 -1
  397. package/dist/src/ui/components/council-status-list.js +36 -24
  398. package/dist/src/ui/components/council-synthesis-banner.d.ts +7 -2
  399. package/dist/src/ui/components/council-synthesis-banner.js +20 -5
  400. package/dist/src/ui/components/halt-recovery-card.js +9 -5
  401. package/dist/src/ui/components/jump-to-latest-pill.d.ts +11 -0
  402. package/dist/src/ui/components/jump-to-latest-pill.js +14 -0
  403. package/dist/src/ui/components/prompt-box.js +18 -16
  404. package/dist/src/ui/components/session-tree-card.d.ts +14 -0
  405. package/dist/src/ui/components/session-tree-card.js +46 -0
  406. package/dist/src/ui/components/slash-inline-menu.d.ts +12 -0
  407. package/dist/src/ui/components/slash-inline-menu.js +26 -5
  408. package/dist/src/ui/components/task-list-panel.d.ts +14 -1
  409. package/dist/src/ui/components/task-list-panel.js +22 -2
  410. package/dist/src/ui/containers/modals-layer.d.ts +2 -1
  411. package/dist/src/ui/hooks/use-session-picker.d.ts +3 -3
  412. package/dist/src/ui/mcp-modal.js +2 -4
  413. package/dist/src/ui/modals/api-key-modal.js +1 -1
  414. package/dist/src/ui/modals/connect-modal.js +4 -3
  415. package/dist/src/ui/modals/session-picker-modal.d.ts +2 -2
  416. package/dist/src/ui/modals/session-picker-modal.js +3 -5
  417. package/dist/src/ui/picker-providers.d.ts +1 -1
  418. package/dist/src/ui/picker-providers.js +1 -1
  419. package/dist/src/ui/primitives/index.d.ts +1 -0
  420. package/dist/src/ui/primitives/index.js +2 -0
  421. package/dist/src/ui/primitives/semantic-primitives.d.ts +76 -0
  422. package/dist/src/ui/primitives/semantic-primitives.js +81 -0
  423. package/dist/src/ui/slash/compact.js +5 -7
  424. package/dist/src/ui/slash/cost.js +1 -1
  425. package/dist/src/ui/slash/council-inspect.js +4 -4
  426. package/dist/src/ui/slash/council.js +19 -1
  427. package/dist/src/ui/slash/debug.d.ts +3 -31
  428. package/dist/src/ui/slash/debug.js +9 -20
  429. package/dist/src/ui/slash/ideal.d.ts +6 -2
  430. package/dist/src/ui/slash/ideal.js +97 -7
  431. package/dist/src/ui/slash/menu-items.d.ts +7 -0
  432. package/dist/src/ui/slash/menu-items.js +12 -18
  433. package/dist/src/ui/slash/registry.d.ts +2 -0
  434. package/dist/src/ui/slash/registry.js +4 -0
  435. package/dist/src/ui/status-bar/cache-hit.d.ts +6 -0
  436. package/dist/src/ui/status-bar/cache-hit.js +9 -0
  437. package/dist/src/ui/status-bar/index.d.ts +1 -1
  438. package/dist/src/ui/status-bar/index.js +7 -3
  439. package/dist/src/ui/status-bar/usd-meter.d.ts +5 -4
  440. package/dist/src/ui/status-bar/usd-meter.js +6 -4
  441. package/dist/src/ui/theme.d.ts +1 -0
  442. package/dist/src/ui/theme.js +2 -0
  443. package/dist/src/ui/types.d.ts +7 -0
  444. package/dist/src/ui/use-app-logic.js +0 -0
  445. package/dist/src/ui/utils/format.d.ts +14 -0
  446. package/dist/src/ui/utils/format.js +23 -3
  447. package/dist/src/usage/downgrade.js +2 -2
  448. package/dist/src/usage/product-ledger.js +2 -2
  449. package/dist/src/utils/clipboard-image.js +23 -23
  450. package/dist/src/utils/install-manager.js +14 -11
  451. package/dist/src/utils/logger.js +2 -2
  452. package/dist/src/utils/permission-mode.js +5 -3
  453. package/dist/src/utils/redactor.js +1 -1
  454. package/dist/src/utils/settings.d.ts +153 -5
  455. package/dist/src/utils/settings.js +233 -29
  456. package/dist/src/utils/side-question.js +2 -2
  457. package/dist/src/utils/skills.js +3 -3
  458. package/dist/src/utils/visible-retry.d.ts +11 -0
  459. package/dist/src/utils/visible-retry.js +10 -1
  460. package/dist/src/verify/entrypoint.d.ts +1 -1
  461. package/dist/src/verify/entrypoint.js +1 -1
  462. package/dist/src/verify/recipes.d.ts +13 -0
  463. package/dist/src/verify/recipes.js +15 -0
  464. package/package.json +135 -132
  465. package/dist/src/providers/auth/gcloud.d.ts +0 -28
  466. package/dist/src/providers/auth/gcloud.js +0 -102
  467. package/dist/src/providers/auth/gemini-oauth.d.ts +0 -82
  468. package/dist/src/providers/auth/gemini-oauth.js +0 -472
  469. package/dist/src/providers/gemini.d.ts +0 -11
  470. package/dist/src/providers/gemini.js +0 -45
  471. package/dist/src/providers/siliconflow-sse-repair.d.ts +0 -58
  472. package/dist/src/providers/siliconflow-sse-repair.js +0 -177
  473. package/dist/src/providers/strategies/google.strategy.d.ts +0 -22
  474. package/dist/src/providers/strategies/google.strategy.js +0 -174
  475. package/dist/src/providers/strategies/siliconflow.strategy.js +0 -29
  476. package/dist/src/ui/containers/chat-feed.d.ts +0 -40
  477. package/dist/src/ui/containers/chat-feed.js +0 -66
@@ -5,6 +5,7 @@
5
5
  * Designed for testability: callers inject detectVerifyRecipe so unit tests
6
6
  * never hit the real orchestrator.
7
7
  */
8
+ import type { VerifyRecipe } from "../types/index.js";
8
9
  import { detectBBFramework } from "./init-new.js";
9
10
  export interface PointToExistingOptions {
10
11
  /** Raw path string entered by the user. May be relative or absolute. */
@@ -26,6 +27,26 @@ export interface PointToExistingResult {
26
27
  targetFramework?: "muonroi-building-block" | string;
27
28
  }
28
29
  export { detectBBFramework };
30
+ /**
31
+ * Deterministic, filesystem-only verify-recipe detection for an existing project
32
+ * the user pointed to via the CB-3 recovery card.
33
+ *
34
+ * WHY NOT the orchestrator's detectVerifyRecipe: that path runs an LLM
35
+ * verify-detect sub-agent against the orchestrator's OWN (session) cwd via
36
+ * `this.bash.getCwd()` — it cannot inspect an arbitrary pointed-to directory, so
37
+ * wiring it here was deferred and the handler stubbed to `null` (point-to-existing
38
+ * therefore ALWAYS reported "no recipe", making the recovery option inert).
39
+ * `inferVerifyProjectProfile` reads the target dir's manifest/build files
40
+ * directly (package.json test/check/lint, Makefile, pyproject, go.mod, cargo,
41
+ * maven/gradle, *.csproj) — the correct detector for adopting an existing repo.
42
+ *
43
+ * Returns the recipe only when it is actually RUNNABLE (has a test/build/start
44
+ * command). The bare "unknown" fallback that `inferVerifyProjectProfile` emits
45
+ * for a directory with no recognizable project files carries empty commands →
46
+ * we return null so point-to-existing correctly reports `no_recipe` instead of
47
+ * falsely adopting an empty directory.
48
+ */
49
+ export declare function detectExistingProjectRecipe(cwd: string): VerifyRecipe | null;
29
50
  /**
30
51
  * Resolve and validate a user-provided path for sprint re-entry.
31
52
  *
@@ -7,8 +7,33 @@
7
7
  */
8
8
  import { realpathSync, statSync } from "node:fs";
9
9
  import * as path from "node:path";
10
+ import { inferVerifyProjectProfile } from "../verify/recipes.js";
10
11
  import { detectBBFramework } from "./init-new.js";
11
12
  export { detectBBFramework };
13
+ /**
14
+ * Deterministic, filesystem-only verify-recipe detection for an existing project
15
+ * the user pointed to via the CB-3 recovery card.
16
+ *
17
+ * WHY NOT the orchestrator's detectVerifyRecipe: that path runs an LLM
18
+ * verify-detect sub-agent against the orchestrator's OWN (session) cwd via
19
+ * `this.bash.getCwd()` — it cannot inspect an arbitrary pointed-to directory, so
20
+ * wiring it here was deferred and the handler stubbed to `null` (point-to-existing
21
+ * therefore ALWAYS reported "no recipe", making the recovery option inert).
22
+ * `inferVerifyProjectProfile` reads the target dir's manifest/build files
23
+ * directly (package.json test/check/lint, Makefile, pyproject, go.mod, cargo,
24
+ * maven/gradle, *.csproj) — the correct detector for adopting an existing repo.
25
+ *
26
+ * Returns the recipe only when it is actually RUNNABLE (has a test/build/start
27
+ * command). The bare "unknown" fallback that `inferVerifyProjectProfile` emits
28
+ * for a directory with no recognizable project files carries empty commands →
29
+ * we return null so point-to-existing correctly reports `no_recipe` instead of
30
+ * falsely adopting an empty directory.
31
+ */
32
+ export function detectExistingProjectRecipe(cwd) {
33
+ const { recipe } = inferVerifyProjectProfile(cwd);
34
+ const runnable = recipe.testCommands.length > 0 || recipe.buildCommands.length > 0 || Boolean(recipe.startCommand);
35
+ return runnable ? recipe : null;
36
+ }
12
37
  // ---------------------------------------------------------------------------
13
38
  // Implementation
14
39
  // ---------------------------------------------------------------------------
@@ -65,25 +65,25 @@ export function createMockBrain(script) {
65
65
  // ---------------------------------------------------------------------------
66
66
  // LLM brain — uses the configured provider stack
67
67
  // ---------------------------------------------------------------------------
68
- const DEFAULT_SYSTEM_PROMPT = `You are a QA agent driving a TUI via an agent-harness.
69
- Your job: given a free-form goal and the current TUI state (semantic tree + recent events),
70
- decide the SINGLE next action.
71
-
72
- Reply with a strict JSON object — no prose, no markdown fences:
73
-
74
- {"action":"type","text":"...","reason":"short"}
75
- {"action":"press","key":"Enter|Escape|Down|Up|Tab","reason":"short"}
76
- {"action":"wait_for","idle":true,"timeoutMs":5000,"reason":"..."}
77
- {"action":"wait_for","selector":"id=askcard","timeoutMs":5000,"reason":"..."}
78
- {"action":"wait_for","event":"askcard-open","timeoutMs":5000,"reason":"..."}
79
- {"action":"done","verdict":"pass","reason":"goal achieved"}
80
- {"action":"done","verdict":"fail","reason":"goal cannot be achieved"}
81
-
82
- Rules:
83
- - One action per turn. Do not batch.
84
- - Prefer wait_for after type/press to let the TUI settle.
85
- - If the goal looks satisfied, return done(pass).
86
- - If an error toast appears or the TUI is stuck, return done(fail).
68
+ const DEFAULT_SYSTEM_PROMPT = `You are a QA agent driving a TUI via an agent-harness.
69
+ Your job: given a free-form goal and the current TUI state (semantic tree + recent events),
70
+ decide the SINGLE next action.
71
+
72
+ Reply with a strict JSON object — no prose, no markdown fences:
73
+
74
+ {"action":"type","text":"...","reason":"short"}
75
+ {"action":"press","key":"Enter|Escape|Down|Up|Tab","reason":"short"}
76
+ {"action":"wait_for","idle":true,"timeoutMs":5000,"reason":"..."}
77
+ {"action":"wait_for","selector":"id=askcard","timeoutMs":5000,"reason":"..."}
78
+ {"action":"wait_for","event":"askcard-open","timeoutMs":5000,"reason":"..."}
79
+ {"action":"done","verdict":"pass","reason":"goal achieved"}
80
+ {"action":"done","verdict":"fail","reason":"goal cannot be achieved"}
81
+
82
+ Rules:
83
+ - One action per turn. Do not batch.
84
+ - Prefer wait_for after type/press to let the TUI settle.
85
+ - If the goal looks satisfied, return done(pass).
86
+ - If an error toast appears or the TUI is stuck, return done(fail).
87
87
  - Stay within ${"${maxTurns}"} turns. Be concise.`;
88
88
  /**
89
89
  * Pull a usable text body out of an AI SDK generateText result.
@@ -148,8 +148,8 @@ export async function createLLMBrain(opts) {
148
148
  const retryOnEmpty = opts.retryOnEmpty !== false;
149
149
  // @ai-sdk/openai-compatible's chat schema exposes `strictJsonSchema: false`
150
150
  // for providers that don't honour OpenAI's strict JSON schema mode.
151
- // DeepSeek (and DeepSeek-compatible providers like SiliconFlow) only
152
- // support `response_format: {type: "json_object"}` — they reject the full
151
+ // DeepSeek only supports `response_format: {type: "json_object"}` — it
152
+ // rejects the full
153
153
  // schema response_format. Setting strictJsonSchema=false makes AI SDK fall
154
154
  // back to lenient json_object mode silently (no "responseFormat not
155
155
  // supported" warning) while still steering the model toward JSON output.
@@ -161,7 +161,7 @@ export async function createLLMBrain(opts) {
161
161
  const mergedProviderOptions = {
162
162
  ...(runtime.providerOptions ?? {}),
163
163
  };
164
- if (provider === "deepseek" || provider === "siliconflow") {
164
+ if (provider === "deepseek") {
165
165
  mergedProviderOptions[provider] = {
166
166
  ...(mergedProviderOptions[provider] ?? {}),
167
167
  strictJsonSchema: false,
@@ -21,6 +21,25 @@ export declare const activeRunStore: {
21
21
  clearActiveRun: () => void;
22
22
  subscribe: (fn: Listener) => (() => void);
23
23
  };
24
+ /**
25
+ * Single canonical writer for "which run is the workspace focused on".
26
+ * Writes the durable pointer (`state.md` `Active Run`) AND the in-memory cache
27
+ * atomically, so disk and StatusBar/reporter never drift (F8 follow-up).
28
+ *
29
+ * The disk write is idempotent with `ensureRunScoped`'s earlier write for the
30
+ * same runId — routing the focus moment through here just guarantees they agree.
31
+ */
32
+ export declare function setWorkspaceFocus(flowDir: string, focus: {
33
+ runId: string;
34
+ productSlug: string;
35
+ reason?: string;
36
+ }): Promise<void>;
37
+ /**
38
+ * Clear the workspace focus cache when a run ends (shipped / halted).
39
+ * Cache-only by design: the durable `Active Run` pointer is left intact as a
40
+ * historical marker so `/ideal phases` still resolves the last run post-ship.
41
+ */
42
+ export declare function clearWorkspaceFocus(): void;
24
43
  /** Test helper: reset to initial state. */
25
44
  export declare function __resetActiveRunStoreForTests(): void;
26
45
  export {};
@@ -37,6 +37,27 @@ function makeActiveRunStore() {
37
37
  };
38
38
  }
39
39
  export const activeRunStore = makeActiveRunStore();
40
+ /**
41
+ * Single canonical writer for "which run is the workspace focused on".
42
+ * Writes the durable pointer (`state.md` `Active Run`) AND the in-memory cache
43
+ * atomically, so disk and StatusBar/reporter never drift (F8 follow-up).
44
+ *
45
+ * The disk write is idempotent with `ensureRunScoped`'s earlier write for the
46
+ * same runId — routing the focus moment through here just guarantees they agree.
47
+ */
48
+ export async function setWorkspaceFocus(flowDir, focus) {
49
+ const { setActiveRunId } = await import("../flow/run-manager.js");
50
+ await setActiveRunId(flowDir, focus.runId);
51
+ activeRunStore.setActiveRun(focus.runId, flowDir, focus.productSlug);
52
+ }
53
+ /**
54
+ * Clear the workspace focus cache when a run ends (shipped / halted).
55
+ * Cache-only by design: the durable `Active Run` pointer is left intact as a
56
+ * historical marker so `/ideal phases` still resolves the last run post-ship.
57
+ */
58
+ export function clearWorkspaceFocus() {
59
+ activeRunStore.clearActiveRun();
60
+ }
40
61
  /** Test helper: reset to initial state. */
41
62
  export function __resetActiveRunStoreForTests() {
42
63
  activeRunStore.clearActiveRun();
@@ -1,9 +1,12 @@
1
1
  /**
2
- * src/ui/status-bar/store.ts
2
+ * src/state/status-bar-store.ts
3
3
  *
4
4
  * Status bar store: subscribable atom holding model/provider/tier/tokens/USD/degraded.
5
5
  * wireStatusBar() connects to routerStore (Plan 03), subscribeThresholds (Plan 04),
6
6
  * and subscribeDowngrade (Plan 05).
7
+ *
8
+ * Presentation-agnostic state — lives outside src/ui so the headless core
9
+ * (orchestrator/tool-engine/stream-runner) can read it without importing ui/.
7
10
  */
8
11
  export interface SprintProgressSegment {
9
12
  /** Active sprint index (1-based). */
@@ -1,15 +1,18 @@
1
1
  /**
2
- * src/ui/status-bar/store.ts
2
+ * src/state/status-bar-store.ts
3
3
  *
4
4
  * Status bar store: subscribable atom holding model/provider/tier/tokens/USD/degraded.
5
5
  * wireStatusBar() connects to routerStore (Plan 03), subscribeThresholds (Plan 04),
6
6
  * and subscribeDowngrade (Plan 05).
7
+ *
8
+ * Presentation-agnostic state — lives outside src/ui so the headless core
9
+ * (orchestrator/tool-engine/stream-runner) can read it without importing ui/.
7
10
  */
8
- import { getCircuitState } from "../../ee/client.js";
9
- import { routerStore } from "../../router/store.js";
10
- import { subscribeDowngrade } from "../../usage/downgrade.js";
11
- import { subscribeThresholds } from "../../usage/thresholds.js";
12
- import { activeRunStore } from "../state/active-run.js";
11
+ import { getCircuitState } from "../ee/client.js";
12
+ import { routerStore } from "../router/store.js";
13
+ import { subscribeDowngrade } from "../usage/downgrade.js";
14
+ import { subscribeThresholds } from "../usage/thresholds.js";
15
+ import { activeRunStore } from "./active-run.js";
13
16
  function makeStore() {
14
17
  let state = {
15
18
  provider: "",
@@ -141,8 +144,8 @@ export function wireStatusBar() {
141
144
  }
142
145
  try {
143
146
  // Lazy import to avoid circular dependency at module load time.
144
- const { readBacklog } = await import("../../product-loop/backlog-store.js");
145
- const { readSprintPlan } = await import("../../product-loop/sprint-store.js");
147
+ const { readBacklog } = await import("../product-loop/backlog-store.js");
148
+ const { readSprintPlan } = await import("../product-loop/sprint-store.js");
146
149
  const [backlog, sprintPlan] = await Promise.all([
147
150
  readBacklog(run.flowDir, run.runId).catch(() => null),
148
151
  readSprintPlan(run.flowDir, run.runId).catch(() => null),
@@ -276,4 +279,4 @@ export function __resetStatusBarStoreForTests() {
276
279
  });
277
280
  wired = false;
278
281
  }
279
- //# sourceMappingURL=store.js.map
282
+ //# sourceMappingURL=status-bar-store.js.map
@@ -0,0 +1,43 @@
1
+ /**
2
+ * src/state/turn-trace.ts
3
+ *
4
+ * Pipeline debug-trace state — the toggle flag + recorded per-turn traces.
5
+ *
6
+ * Presentation-agnostic: the headless core (tool-engine, message-processor)
7
+ * records traces here without importing src/ui. The /debug slash command
8
+ * (src/ui/slash/debug.ts) owns the human formatting and toggling on top of
9
+ * this state.
10
+ */
11
+ export interface PipelineStep {
12
+ name: string;
13
+ duration_ms: number;
14
+ input_summary: string;
15
+ output_summary: string;
16
+ tokens_saved?: number;
17
+ }
18
+ export interface TurnTrace {
19
+ turn_id: number;
20
+ timestamp: number;
21
+ raw_prompt: string;
22
+ steps: PipelineStep[];
23
+ model_requested: string;
24
+ model_used: string;
25
+ routed: boolean;
26
+ input_tokens: number;
27
+ output_tokens: number;
28
+ cache_read_tokens: number;
29
+ cost_usd: number;
30
+ estimated_savings: SavingsEstimate;
31
+ }
32
+ export interface SavingsEstimate {
33
+ pil_tokens_saved: number;
34
+ cache_tokens_saved: number;
35
+ router_cost_saved_usd: number;
36
+ total_tokens_saved: number;
37
+ total_cost_saved_usd: number;
38
+ }
39
+ export declare function isDebugEnabled(): boolean;
40
+ export declare function setDebugEnabled(value: boolean): void;
41
+ export declare function recordTurnTrace(trace: TurnTrace): void;
42
+ export declare function getLastTrace(): TurnTrace | null;
43
+ export declare function getAllTraces(): readonly TurnTrace[];
@@ -0,0 +1,32 @@
1
+ /**
2
+ * src/state/turn-trace.ts
3
+ *
4
+ * Pipeline debug-trace state — the toggle flag + recorded per-turn traces.
5
+ *
6
+ * Presentation-agnostic: the headless core (tool-engine, message-processor)
7
+ * records traces here without importing src/ui. The /debug slash command
8
+ * (src/ui/slash/debug.ts) owns the human formatting and toggling on top of
9
+ * this state.
10
+ */
11
+ let debugEnabled = false;
12
+ const turnTraces = [];
13
+ export function isDebugEnabled() {
14
+ return debugEnabled;
15
+ }
16
+ export function setDebugEnabled(value) {
17
+ debugEnabled = value;
18
+ }
19
+ export function recordTurnTrace(trace) {
20
+ if (!debugEnabled)
21
+ return;
22
+ turnTraces.push(trace);
23
+ if (turnTraces.length > 50)
24
+ turnTraces.shift();
25
+ }
26
+ export function getLastTrace() {
27
+ return turnTraces[turnTraces.length - 1] ?? null;
28
+ }
29
+ export function getAllTraces() {
30
+ return turnTraces;
31
+ }
32
+ //# sourceMappingURL=turn-trace.js.map
@@ -9,7 +9,8 @@ let db = null;
9
9
  // async would be a much larger refactor.
10
10
  const requireSync = createRequire(import.meta.url);
11
11
  export function getDatabasePath() {
12
- const dir = path.join(os.homedir(), ".muonroi-cli");
12
+ const home = process.env.HOME ?? process.env.USERPROFILE ?? os.homedir();
13
+ const dir = path.join(home, ".muonroi-cli");
13
14
  fs.mkdirSync(dir, { recursive: true, mode: 0o700 });
14
15
  return path.join(dir, "muonroi.db");
15
16
  }
@@ -3,7 +3,7 @@ export { loadConfig, type MuonroiConfig } from "./config.js";
3
3
  export { getDatabasePath } from "./db.js";
4
4
  export { type InteractionEventType, logInteraction } from "./interaction-log.js";
5
5
  export { SessionStore } from "./sessions.js";
6
- export { appendCompaction, appendMessages, appendSystemMessage, buildChatEntries, getLastTodoWriteArgs, getNextMessageSequence, getSessionChain, loadLatestCompaction, loadRawTranscript, loadTranscript, loadTranscriptState, markMessageCompleted, markMessageErrored, markToolCallErrored, persistMessageWriteAhead, persistToolCallWriteAhead, revertLatestCompaction, } from "./transcript.js";
6
+ export { appendCompaction, appendMessages, appendSystemMessage, buildChatEntries, getLastApprovedPlan, getLastTodoWriteArgs, getNextMessageSequence, getSessionChain, getSessionChainInfos, loadLatestCompaction, loadRawTranscript, loadSessionChainTranscriptState, loadTranscript, loadTranscriptState, markMessageCompleted, markMessageErrored, markToolCallErrored, persistApprovedPlan, persistMessageWriteAhead, persistToolCallWriteAhead, revertLatestCompaction, type SessionChainNode, } from "./transcript.js";
7
7
  export { buildEffectiveTranscript, type LoadedTranscriptState, type PersistedCompaction } from "./transcript-view.js";
8
8
  export { logUIInteraction, type UIInteractionSubtype } from "./ui-interaction-log.js";
9
9
  export { getSessionTotalTokens, listSessionUsage, recordUsageEvent, type TokenUsageLike } from "./usage.js";
@@ -4,7 +4,7 @@ export { loadConfig } from "./config.js";
4
4
  export { getDatabasePath } from "./db.js";
5
5
  export { logInteraction } from "./interaction-log.js";
6
6
  export { SessionStore } from "./sessions.js";
7
- export { appendCompaction, appendMessages, appendSystemMessage, buildChatEntries, getLastTodoWriteArgs, getNextMessageSequence, getSessionChain, loadLatestCompaction, loadRawTranscript, loadTranscript, loadTranscriptState, markMessageCompleted, markMessageErrored, markToolCallErrored, persistMessageWriteAhead, persistToolCallWriteAhead, revertLatestCompaction, } from "./transcript.js";
7
+ export { appendCompaction, appendMessages, appendSystemMessage, buildChatEntries, getLastApprovedPlan, getLastTodoWriteArgs, getNextMessageSequence, getSessionChain, getSessionChainInfos, loadLatestCompaction, loadRawTranscript, loadSessionChainTranscriptState, loadTranscript, loadTranscriptState, markMessageCompleted, markMessageErrored, markToolCallErrored, persistApprovedPlan, persistMessageWriteAhead, persistToolCallWriteAhead, revertLatestCompaction, } from "./transcript.js";
8
8
  export { buildEffectiveTranscript } from "./transcript-view.js";
9
9
  export { logUIInteraction } from "./ui-interaction-log.js";
10
10
  export { getSessionTotalTokens, listSessionUsage, recordUsageEvent } from "./usage.js";
@@ -4,7 +4,7 @@
4
4
  * Fire-and-forget interaction logging for detailed user-agent event tracking.
5
5
  * All calls are fail-open — logging never breaks the main flow.
6
6
  */
7
- export type InteractionEventType = "user_message" | "agent_response" | "tool_call" | "tool_result" | "compaction" | "routing" | "pil" | "error" | "model_switch" | "council" | "ee_intercept" | "ee_judge" | "ee_injection" | "ui_interaction" | "stream_retry" | "f6_synthesis" | "grounding_flag" | "stall_rescue" | "stream_start" | "text_tool_resteer" | "session_experience";
7
+ export type InteractionEventType = "user_message" | "agent_response" | "tool_call" | "tool_result" | "compaction" | "routing" | "pil" | "error" | "model_switch" | "council" | "ee_intercept" | "ee_judge" | "ee_injection" | "ui_interaction" | "stream_retry" | "f6_synthesis" | "grounding_flag" | "stall_rescue" | "stream_start" | "text_tool_resteer" | "turn_tool_load" | "session_experience";
8
8
  export interface EEInjectionRow {
9
9
  session_id: string;
10
10
  event_subtype: string | null;
@@ -55,10 +55,10 @@ export function selectEEInjectionsForRun(runId, limit = 20) {
55
55
  try {
56
56
  const db = getDatabase();
57
57
  return db
58
- .prepare(`SELECT session_id, event_subtype, duration_ms, metadata_json, created_at
59
- FROM interaction_logs
60
- WHERE session_id = ? AND event_type = 'ee_injection'
61
- ORDER BY created_at DESC
58
+ .prepare(`SELECT session_id, event_subtype, duration_ms, metadata_json, created_at
59
+ FROM interaction_logs
60
+ WHERE session_id = ? AND event_type = 'ee_injection'
61
+ ORDER BY created_at DESC
62
62
  LIMIT ?`)
63
63
  .all(runId, limit);
64
64
  }
@@ -74,7 +74,7 @@ export function logInteraction(sessionId, eventType, metadata) {
74
74
  try {
75
75
  const db = getDatabase();
76
76
  const metadataJson = metadata?.data ? JSON.stringify(metadata.data) : null;
77
- db.prepare(`INSERT INTO interaction_logs (session_id, event_type, event_subtype, model, duration_ms, input_tokens, output_tokens, metadata_json, created_at)
77
+ db.prepare(`INSERT INTO interaction_logs (session_id, event_type, event_subtype, model, duration_ms, input_tokens, output_tokens, metadata_json, created_at)
78
78
  VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)`).run(sessionId, eventType, metadata?.eventSubtype ?? null, metadata?.model ?? null, metadata?.durationMs ?? null, metadata?.inputTokens ?? null, metadata?.outputTokens ?? null, metadataJson, new Date().toISOString());
79
79
  maybePruneOld();
80
80
  }