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
@@ -0,0 +1,50 @@
1
+ /**
2
+ * config-loader.ts — Native replacement for gsd-core/bin/lib/config-loader.cjs
3
+ *
4
+ * Simplified config loading for the muonroi-cli native GSD workflow.
5
+ * Reads .planning/config.json from the project directory and returns
6
+ * a normalized config object.
7
+ */
8
+ import { existsSync, readFileSync } from "node:fs";
9
+ import { join } from "node:path";
10
+ import { planningRoot } from "./paths.js";
11
+ /**
12
+ * Load the GSD planning config from .planning/config.json in the given cwd.
13
+ * Returns an empty object when no config is present.
14
+ */
15
+ export function loadConfig(cwd) {
16
+ // planningRoot resolves `.planning/` when present, else the folded location
17
+ // (`.muonroi-flow/planning/`) — see paths.ts. `.planning/` still wins today.
18
+ const configPath = join(planningRoot(cwd), "config.json");
19
+ if (!existsSync(configPath))
20
+ return {};
21
+ try {
22
+ const raw = readFileSync(configPath, "utf8");
23
+ return JSON.parse(raw);
24
+ }
25
+ catch {
26
+ return {};
27
+ }
28
+ }
29
+ /** Resolve a dotted config key against a config object (e.g. "workflow.research"). */
30
+ export function resolveConfigKey(dotKey, config) {
31
+ const parts = dotKey.split(".");
32
+ let current = config;
33
+ for (const part of parts) {
34
+ if (current === null || current === undefined)
35
+ return { found: false, value: undefined };
36
+ if (typeof current !== "object" || Array.isArray(current))
37
+ return { found: false, value: undefined };
38
+ current = current[part];
39
+ }
40
+ return { found: true, value: current };
41
+ }
42
+ /**
43
+ * Simple activation value resolver.
44
+ * If the when key is `true` → active. Absent/falsy → inactive.
45
+ */
46
+ export function resolveActivationValue(when, config) {
47
+ const { found, value } = resolveConfigKey(when, config);
48
+ return found && value === true;
49
+ }
50
+ //# sourceMappingURL=config-loader.js.map
@@ -0,0 +1,44 @@
1
+ import { type WorkflowState } from "./workflow-engine.js";
2
+ /**
3
+ * Council context bundle — the full prior GSD surface the plan-council must
4
+ * see to debate a plan WITHOUT relitigating settled points or losing the
5
+ * user's discuss/research context. This is what makes the council verdict
6
+ * trustworthy enough for the verify step to rely on.
7
+ *
8
+ * Reads are tolerant: missing artifacts degrade to empty strings, never throw.
9
+ * Each section is char-capped to keep the debate prompt bounded.
10
+ */
11
+ export interface CouncilContextBundle {
12
+ state: WorkflowState;
13
+ workflowKind: string;
14
+ depth: string;
15
+ contextMd: string;
16
+ researchMd: string;
17
+ /** Complexity assessor's rationale (ASSESSMENT.md) — the prior step's output. */
18
+ assessment: string;
19
+ priorConcerns: string[];
20
+ acceptanceCriteria: string[];
21
+ /** Total chars across all sections (telemetry). */
22
+ totalChars: number;
23
+ /** True when a prior PLAN-REVIEW.md seeded concerns (revision cycle). */
24
+ hadPriorConcerns: boolean;
25
+ /** Revision cycle index — 0 on first review, >0 on revisits. */
26
+ revisionCycle: number;
27
+ }
28
+ /** Extract `## Acceptance` / `## Criteria` bullet lines from PLAN.md. */
29
+ export declare function extractAcceptanceCriteria(planBody: string): string[];
30
+ /** Pull `- <concern>` lines from the Concerns section of a prior PLAN-REVIEW.md. */
31
+ export declare function extractPriorConcerns(reviewMd: string): string[];
32
+ /**
33
+ * Render the bundle as a markdown block suitable to prepend to a debate topic
34
+ * or perspective prompt. `revisionCycle > 0` emphasises the prior-concerns
35
+ * directive so the council addresses them instead of re-deriving from scratch.
36
+ */
37
+ export declare function renderCouncilContextBlock(bundle: CouncilContextBundle, opts?: {
38
+ forPerspective?: "research" | string;
39
+ }): string;
40
+ export interface BuildBundleOpts {
41
+ depth: string;
42
+ revisionCycle?: number;
43
+ }
44
+ export declare function buildCouncilContextBundle(cwd: string, opts: BuildBundleOpts): CouncilContextBundle;
@@ -0,0 +1,114 @@
1
+ import { existsSync, readFileSync } from "node:fs";
2
+ import { planningArtifact } from "./paths.js";
3
+ import { readState, readWorkflowKind } from "./workflow-engine.js";
4
+ function cap(text, max) {
5
+ const trimmed = text.trim();
6
+ if (trimmed.length <= max)
7
+ return trimmed;
8
+ return `${trimmed.slice(0, max)}…[truncated]`;
9
+ }
10
+ function readArtifact(cwd, name) {
11
+ const p = planningArtifact(cwd, name);
12
+ return existsSync(p) ? readFileSync(p, "utf8") : "";
13
+ }
14
+ /** Extract `## Acceptance` / `## Criteria` bullet lines from PLAN.md. */
15
+ export function extractAcceptanceCriteria(planBody) {
16
+ const lines = planBody.split("\n");
17
+ let inSection = false;
18
+ const out = [];
19
+ for (const line of lines) {
20
+ const heading = line.match(/^##\s+(.+?)\s*$/i);
21
+ if (heading) {
22
+ inSection = /accept|criteria|success/i.test(heading[1] ?? "");
23
+ continue;
24
+ }
25
+ if (inSection) {
26
+ const bullet = line.match(/^\s*[-*]\s+(.+)$/);
27
+ if (bullet?.[1]?.trim())
28
+ out.push(bullet[1].trim());
29
+ }
30
+ }
31
+ return out;
32
+ }
33
+ /** Pull `- <concern>` lines from the Concerns section of a prior PLAN-REVIEW.md. */
34
+ export function extractPriorConcerns(reviewMd) {
35
+ if (!reviewMd.trim())
36
+ return [];
37
+ const lines = reviewMd.split("\n");
38
+ let inSection = false;
39
+ const out = [];
40
+ for (const line of lines) {
41
+ const heading = line.match(/^##\s+(.+?)\s*$/i);
42
+ if (heading) {
43
+ inSection = /concern/i.test(heading[1] ?? "");
44
+ continue;
45
+ }
46
+ if (inSection) {
47
+ const bullet = line.match(/^\s*[-*]\s+(.+)$/);
48
+ if (bullet?.[1]?.trim() && !/^\(none\)$/i.test(bullet[1].trim())) {
49
+ out.push(bullet[1].trim());
50
+ }
51
+ }
52
+ }
53
+ return out;
54
+ }
55
+ /**
56
+ * Render the bundle as a markdown block suitable to prepend to a debate topic
57
+ * or perspective prompt. `revisionCycle > 0` emphasises the prior-concerns
58
+ * directive so the council addresses them instead of re-deriving from scratch.
59
+ */
60
+ export function renderCouncilContextBlock(bundle, opts = {}) {
61
+ const lines = ["## GSD Context (prior synthesized state)", ""];
62
+ lines.push(`- Phase: ${bundle.state.phase ?? "unknown"} | Depth: ${bundle.depth} | Workflow: ${bundle.workflowKind}`, `- Plan verified so far: ${bundle.state.planVerified ? "yes" : "no"}`);
63
+ if (bundle.contextMd) {
64
+ lines.push("", "### Discuss notes (CONTEXT.md)", "", cap(bundle.contextMd, 2000));
65
+ }
66
+ // Research perspective gets the full digest to avoid re-grounding; others
67
+ // get a short pointer so they know research exists but don't re-litigate it.
68
+ if (bundle.researchMd) {
69
+ const digest = opts.forPerspective === "research" ? cap(bundle.researchMd, 2000) : cap(bundle.researchMd, 400);
70
+ lines.push("", "### Research findings (RESEARCH.md)", "", digest);
71
+ }
72
+ if (bundle.assessment) {
73
+ lines.push("", "### Complexity assessment", "", cap(bundle.assessment, 600));
74
+ }
75
+ if (bundle.acceptanceCriteria.length) {
76
+ lines.push("", "### Acceptance criteria (verify contract)", "");
77
+ for (const c of bundle.acceptanceCriteria.slice(0, 12))
78
+ lines.push(`- ${c}`);
79
+ }
80
+ if (bundle.hadPriorConcerns && bundle.priorConcerns.length) {
81
+ lines.push("", `### Prior council concerns (revision ${bundle.revisionCycle})`, "");
82
+ for (const c of bundle.priorConcerns.slice(0, 20))
83
+ lines.push(`- ${c}`);
84
+ lines.push("", "Each perspective MUST address the prior concerns above in its verdict — do not relitigate settled points.");
85
+ }
86
+ return lines.join("\n");
87
+ }
88
+ export function buildCouncilContextBundle(cwd, opts) {
89
+ const state = readState(cwd);
90
+ const workflowKind = readWorkflowKind(cwd) ?? "task";
91
+ const contextMd = readArtifact(cwd, "CONTEXT.md");
92
+ const researchMd = readArtifact(cwd, "RESEARCH.md");
93
+ const planBody = readArtifact(cwd, "PLAN.md");
94
+ const reviewMd = readArtifact(cwd, "PLAN-REVIEW.md");
95
+ const assessment = readArtifact(cwd, "ASSESSMENT.md");
96
+ const acceptanceCriteria = extractAcceptanceCriteria(planBody);
97
+ const priorConcerns = extractPriorConcerns(reviewMd);
98
+ const hadPriorConcerns = (opts.revisionCycle ?? 0) > 0 && priorConcerns.length > 0;
99
+ const totalChars = state.raw.length + contextMd.length + researchMd.length + reviewMd.length + planBody.length + assessment.length;
100
+ return {
101
+ state,
102
+ workflowKind,
103
+ depth: opts.depth,
104
+ contextMd,
105
+ researchMd,
106
+ assessment,
107
+ priorConcerns,
108
+ acceptanceCriteria,
109
+ totalChars,
110
+ hadPriorConcerns,
111
+ revisionCycle: opts.revisionCycle ?? 0,
112
+ };
113
+ }
114
+ //# sourceMappingURL=council-context.js.map
@@ -0,0 +1,28 @@
1
+ export interface GsdNativeTelemetry {
2
+ phase: string | null;
3
+ depth: string | null;
4
+ workflowKind?: string;
5
+ loopPoint?: string;
6
+ planVerified?: boolean;
7
+ verifyVerdict?: string | null;
8
+ councilPerspectives?: number;
9
+ leaderModelId?: string;
10
+ councilContextChars?: number;
11
+ councilHadPriorConcerns?: boolean;
12
+ councilVerdictSource?: "structured" | "heuristic-fallback" | "parse-failed";
13
+ councilVerdictParseFailed?: boolean;
14
+ phaseNumber?: string;
15
+ shipNotes?: string[];
16
+ }
17
+ export declare const PLANNING_CHECKPOINT_QUERY = "Context checkpoint summary OR PLAN-VERIFY verdict OR gsd-native STATE.md .planning/ Progress DONE";
18
+ /** Forensics-visible gsd-native interaction event (Phase 3 telemetry / Phase 5 closure). */
19
+ export declare function logGsdNativeEvent(sessionId: string, data: GsdNativeTelemetry): void;
20
+ export interface VerifyOutcomeOpts {
21
+ sessionId?: string;
22
+ cwd: string;
23
+ depth: string;
24
+ passed: boolean;
25
+ evidence?: Record<string, unknown>;
26
+ }
27
+ /** Fire EE phase-outcome on gsd verify:post pass/fail (best-effort, B-4 compliant). */
28
+ export declare function fireGsdVerifyOutcome(opts: VerifyOutcomeOpts): void;
@@ -0,0 +1,49 @@
1
+ import { fireAndForgetPhaseOutcome } from "../ee/phase-outcome.js";
2
+ import { logInteraction } from "../storage/interaction-log.js";
3
+ import { readPlanVerifyVerdict, readState } from "./workflow-engine.js";
4
+ export const PLANNING_CHECKPOINT_QUERY = "Context checkpoint summary OR PLAN-VERIFY verdict OR gsd-native STATE.md .planning/ Progress DONE";
5
+ /** Forensics-visible gsd-native interaction event (Phase 3 telemetry / Phase 5 closure). */
6
+ export function logGsdNativeEvent(sessionId, data) {
7
+ if (!sessionId)
8
+ return;
9
+ try {
10
+ logInteraction(sessionId, "pil", {
11
+ eventSubtype: "gsd-native",
12
+ data: { ...data, ts: Date.now() },
13
+ });
14
+ }
15
+ catch (err) {
16
+ console.error(`[gsd-ee-closure] logGsdNativeEvent failed: ${err.message}`);
17
+ }
18
+ }
19
+ /** Fire EE phase-outcome on gsd verify:post pass/fail (best-effort, B-4 compliant). */
20
+ export function fireGsdVerifyOutcome(opts) {
21
+ const { sessionId, cwd, depth, passed, evidence } = opts;
22
+ const state = readState(cwd);
23
+ const verdict = readPlanVerifyVerdict(cwd);
24
+ const outcome = passed ? "pass" : "fail";
25
+ logGsdNativeEvent(sessionId ?? "gsd-native", {
26
+ phase: state.phase,
27
+ depth,
28
+ loopPoint: "verify:post",
29
+ planVerified: state.planVerified,
30
+ verifyVerdict: verdict,
31
+ workflowKind: typeof evidence?.workflowKind === "string" ? evidence.workflowKind : undefined,
32
+ });
33
+ if (!sessionId)
34
+ return;
35
+ fireAndForgetPhaseOutcome({
36
+ sessionId,
37
+ phaseName: `gsd:verify:${state.phase ?? "unknown"}`,
38
+ outcome,
39
+ evidence: {
40
+ cwd,
41
+ depth,
42
+ planVerified: state.planVerified,
43
+ planVerifyVerdict: verdict,
44
+ nativeHost: "muonroi-cli",
45
+ ...evidence,
46
+ },
47
+ });
48
+ }
49
+ //# sourceMappingURL=ee-closure.js.map
@@ -0,0 +1,55 @@
1
+ /**
2
+ * Native GSD workflow engine — default ON.
3
+ * Agent chooses when to call gsd_* tools; gates are soft except plan-review → execute.
4
+ * Opt out: MUONROI_GSD_NATIVE=0 (legacy playbook rubric, no gsd_* tools).
5
+ */
6
+ export declare function isGsdNativeEnabled(): boolean;
7
+ /**
8
+ * Leader-tier complexity assessor over the native depth slot — default ON
9
+ * when native GSD is on. Opt out: MUONROI_GSD_ASSESSOR=0.
10
+ */
11
+ export declare function isComplexityAssessorEnabled(): boolean;
12
+ /**
13
+ * Native mutation gate — default ON when native GSD is on. Delegates to the SDK's
14
+ * own `canExecute(cwd, depth)` at the write-mutex wrapper so mutation tools are
15
+ * blocked until plan-review passes at standard/heavy depth. Opt out: MUONROI_GSD_HARD_GATE=0.
16
+ */
17
+ export declare function isGsdHardGateEnabled(): boolean;
18
+ /**
19
+ * PIL prompt-gate full-context enrichment (conversation digest, EE recall,
20
+ * prior PLAN.md excerpt) — default ON when native GSD is on. Opt out:
21
+ * MUONROI_PIL_GATE_ENRICH=0.
22
+ */
23
+ export declare function isPilGateEnrichEnabled(): boolean;
24
+ /**
25
+ * Debate/council TUI two-pane redesign — scroll-lock. Default ON (baked). When
26
+ * ON, forced `scrollToBottom()` calls respect the user's manual scroll position
27
+ * (OpenTUI `_hasManualScroll`) so streaming renders don't yank the view back to
28
+ * the latest line while the user is reading history. A jump-to-latest pill
29
+ * re-pins on demand. Opt out: MUONROI_SCROLL_LOCK=0.
30
+ */
31
+ export declare function isScrollLockEnabled(): boolean;
32
+ /**
33
+ * Debate/council TUI two-pane redesign — right Context Rail for metadata-heavy
34
+ * modes (debate/council, ideal). Default ON (baked). When ON,
35
+ * session/leader/panel/budget metadata and info-cards move out of the scrolling
36
+ * transcript into a right-hand panel. Requires ≥100 terminal columns; below
37
+ * that the rail is hidden and metadata falls back inline. Opt out:
38
+ * MUONROI_CONTEXT_RAIL=0.
39
+ */
40
+ export declare function isContextRailEnabled(): boolean;
41
+ /**
42
+ * Debate/council TUI two-pane redesign — round-grouped transcript. Default ON
43
+ * (baked). When ON, debate turns are grouped by round; only the running round
44
+ * streams live while done rounds render an expanded summary (input, outcome,
45
+ * leader decision, metrics). Opt out: MUONROI_ROUND_GROUPS=0.
46
+ */
47
+ export declare function isRoundGroupsEnabled(): boolean;
48
+ /**
49
+ * U3 — task-aware debate panel. Default ON. When ON, the leader reads the task
50
+ * and selects which reachable models should debate it (via selectTaskAwarePanel)
51
+ * instead of the prompt-blind capability roster from resolveParticipants. Always
52
+ * fails open to the default roster on any provider/parse failure. Opt out:
53
+ * MUONROI_TASK_AWARE_PANEL=0.
54
+ */
55
+ export declare function isTaskAwarePanelEnabled(): boolean;
@@ -0,0 +1,83 @@
1
+ /**
2
+ * Native GSD workflow engine — default ON.
3
+ * Agent chooses when to call gsd_* tools; gates are soft except plan-review → execute.
4
+ * Opt out: MUONROI_GSD_NATIVE=0 (legacy playbook rubric, no gsd_* tools).
5
+ */
6
+ export function isGsdNativeEnabled() {
7
+ const raw = process.env.MUONROI_GSD_NATIVE;
8
+ if (raw === "0" || raw?.toLowerCase() === "false")
9
+ return false;
10
+ return true;
11
+ }
12
+ /**
13
+ * Leader-tier complexity assessor over the native depth slot — default ON
14
+ * when native GSD is on. Opt out: MUONROI_GSD_ASSESSOR=0.
15
+ */
16
+ export function isComplexityAssessorEnabled() {
17
+ if (!isGsdNativeEnabled())
18
+ return false;
19
+ return process.env.MUONROI_GSD_ASSESSOR !== "0";
20
+ }
21
+ /**
22
+ * Native mutation gate — default ON when native GSD is on. Delegates to the SDK's
23
+ * own `canExecute(cwd, depth)` at the write-mutex wrapper so mutation tools are
24
+ * blocked until plan-review passes at standard/heavy depth. Opt out: MUONROI_GSD_HARD_GATE=0.
25
+ */
26
+ export function isGsdHardGateEnabled() {
27
+ if (!isGsdNativeEnabled())
28
+ return false;
29
+ return process.env.MUONROI_GSD_HARD_GATE !== "0";
30
+ }
31
+ /**
32
+ * PIL prompt-gate full-context enrichment (conversation digest, EE recall,
33
+ * prior PLAN.md excerpt) — default ON when native GSD is on. Opt out:
34
+ * MUONROI_PIL_GATE_ENRICH=0.
35
+ */
36
+ export function isPilGateEnrichEnabled() {
37
+ return isGsdNativeEnabled() && process.env.MUONROI_PIL_GATE_ENRICH !== "0";
38
+ }
39
+ /**
40
+ * Debate/council TUI two-pane redesign — scroll-lock. Default ON (baked). When
41
+ * ON, forced `scrollToBottom()` calls respect the user's manual scroll position
42
+ * (OpenTUI `_hasManualScroll`) so streaming renders don't yank the view back to
43
+ * the latest line while the user is reading history. A jump-to-latest pill
44
+ * re-pins on demand. Opt out: MUONROI_SCROLL_LOCK=0.
45
+ */
46
+ export function isScrollLockEnabled() {
47
+ const raw = process.env.MUONROI_SCROLL_LOCK;
48
+ return raw !== "0" && raw?.toLowerCase() !== "false";
49
+ }
50
+ /**
51
+ * Debate/council TUI two-pane redesign — right Context Rail for metadata-heavy
52
+ * modes (debate/council, ideal). Default ON (baked). When ON,
53
+ * session/leader/panel/budget metadata and info-cards move out of the scrolling
54
+ * transcript into a right-hand panel. Requires ≥100 terminal columns; below
55
+ * that the rail is hidden and metadata falls back inline. Opt out:
56
+ * MUONROI_CONTEXT_RAIL=0.
57
+ */
58
+ export function isContextRailEnabled() {
59
+ const raw = process.env.MUONROI_CONTEXT_RAIL;
60
+ return raw !== "0" && raw?.toLowerCase() !== "false";
61
+ }
62
+ /**
63
+ * Debate/council TUI two-pane redesign — round-grouped transcript. Default ON
64
+ * (baked). When ON, debate turns are grouped by round; only the running round
65
+ * streams live while done rounds render an expanded summary (input, outcome,
66
+ * leader decision, metrics). Opt out: MUONROI_ROUND_GROUPS=0.
67
+ */
68
+ export function isRoundGroupsEnabled() {
69
+ const raw = process.env.MUONROI_ROUND_GROUPS;
70
+ return raw !== "0" && raw?.toLowerCase() !== "false";
71
+ }
72
+ /**
73
+ * U3 — task-aware debate panel. Default ON. When ON, the leader reads the task
74
+ * and selects which reachable models should debate it (via selectTaskAwarePanel)
75
+ * instead of the prompt-blind capability roster from resolveParticipants. Always
76
+ * fails open to the default roster on any provider/parse failure. Opt out:
77
+ * MUONROI_TASK_AWARE_PANEL=0.
78
+ */
79
+ export function isTaskAwarePanelEnabled() {
80
+ const raw = process.env.MUONROI_TASK_AWARE_PANEL;
81
+ return raw !== "0" && raw?.toLowerCase() !== "false";
82
+ }
83
+ //# sourceMappingURL=flags.js.map
@@ -0,0 +1,58 @@
1
+ export interface GsdDispatchResult<T = unknown> {
2
+ ok: boolean;
3
+ data?: T;
4
+ error?: string;
5
+ raw?: string;
6
+ }
7
+ export interface LoopHooksEnvelope {
8
+ point: string;
9
+ activeHooks: Array<Record<string, unknown>>;
10
+ rendered?: string;
11
+ warnings?: string[];
12
+ }
13
+ /** Resolve Capability Registry hooks at a loop point (native in-process). */
14
+ export declare function dispatchLoopRenderHooks(cwd: string, point: string): GsdDispatchResult<LoopHooksEnvelope>;
15
+ /** Milestone/phase progress JSON (native). */
16
+ export declare function dispatchInitProgress(cwd: string): GsdDispatchResult;
17
+ /** Bootstrap .planning/ (native — the paired ensurePlanningWorkspace writes the real config). */
18
+ export declare function dispatchConfigEnsure(cwd: string): GsdDispatchResult;
19
+ /** Drop cached dispatch results for a cwd. Call after ANY write to STATE.md. */
20
+ export declare function invalidateGsdCache(cwd: string): void;
21
+ /** state update <field> <value> — native STATE.md field replace. */
22
+ export declare function dispatchStateUpdate(cwd: string, field: string, value: string): GsdDispatchResult;
23
+ export interface RoadmapPhaseEntry {
24
+ number: string;
25
+ name?: string;
26
+ depends_on?: string | null;
27
+ disk_status?: string;
28
+ }
29
+ export interface RoadmapAnalyzeResult {
30
+ error?: string;
31
+ phases?: RoadmapPhaseEntry[];
32
+ phase_count?: number;
33
+ current_phase?: string | null;
34
+ }
35
+ export interface PhaseAddResult {
36
+ phaseNumber: string;
37
+ rawStdout: string;
38
+ }
39
+ /** phase add <description> — creates .planning/phases/<NN>-<slug>/ (native). */
40
+ export declare function dispatchPhaseAdd(cwd: string, description: string): GsdDispatchResult<PhaseAddResult>;
41
+ /** phase complete <N> — marks milestone phase done (native). */
42
+ export declare function dispatchPhaseComplete(cwd: string, phaseNum: string): GsdDispatchResult;
43
+ /** roadmap update-plan-progress <N> — sync ROADMAP checkboxes (native). */
44
+ export declare function dispatchRoadmapPlanProgress(cwd: string, phaseNum: string): GsdDispatchResult;
45
+ /** roadmap analyze — parse ROADMAP.md + disk status (native, read-only). */
46
+ export declare function dispatchRoadmapAnalyze(cwd: string): GsdDispatchResult<RoadmapAnalyzeResult>;
47
+ /** state json — frontmatter snapshot (native derivation). */
48
+ export declare function dispatchStateJson(cwd: string): GsdDispatchResult<Record<string, unknown>>;
49
+ /**
50
+ * In-process loop hook resolution — uses native modules instead of dynamic require().
51
+ * For tests and low-latency paths. Replaces the old loadGsdLib() approach.
52
+ */
53
+ export declare function resolveLoopHooksInProcess(cwd: string, point: string): {
54
+ point: string;
55
+ activeHooks: Array<Record<string, unknown>>;
56
+ } | null;
57
+ /** Map muonroi task phase → gsd STATE.md body field updates. */
58
+ export declare const PHASE_TO_GSD_STATUS: Record<string, string>;
@@ -0,0 +1,131 @@
1
+ import { existsSync, statSync } from "node:fs";
2
+ import { REGISTRY } from "./capability-registry.js";
3
+ import { loadConfig } from "./config-loader.js";
4
+ import { resolveLoopHooks } from "./loop-resolver.js";
5
+ import { nativePhaseAdd, nativePhaseComplete, nativeRoadmapAnalyze, nativeRoadmapPlanProgress, } from "./native-roadmap.js";
6
+ import { nativeConfigEnsure, nativeInitProgress, nativeStateJson, nativeStateUpdate } from "./native-state.js";
7
+ import { planningArtifact } from "./paths.js";
8
+ /** Resolve Capability Registry hooks at a loop point (native in-process). */
9
+ export function dispatchLoopRenderHooks(cwd, point) {
10
+ const native = resolveLoopHooksInProcess(cwd, point);
11
+ if (!native)
12
+ return { ok: false, error: `loop render-hooks(${point}) failed` };
13
+ return { ok: true, data: { point: native.point, activeHooks: native.activeHooks } };
14
+ }
15
+ /** Milestone/phase progress JSON (native). */
16
+ export function dispatchInitProgress(cwd) {
17
+ return readThroughCache(cwd, "init.progress", () => ({ ok: true, data: nativeInitProgress(cwd) }));
18
+ }
19
+ /** Bootstrap .planning/ (native — the paired ensurePlanningWorkspace writes the real config). */
20
+ export function dispatchConfigEnsure(cwd) {
21
+ return { ok: true, data: nativeConfigEnsure(cwd) };
22
+ }
23
+ const _dispatchCache = new Map();
24
+ function stateMtimeMs(cwd) {
25
+ try {
26
+ const p = planningArtifact(cwd, "STATE.md");
27
+ return existsSync(p) ? statSync(p).mtimeMs : 0;
28
+ }
29
+ catch {
30
+ return 0;
31
+ }
32
+ }
33
+ function readThroughCache(cwd, key, produce) {
34
+ const mtime = stateMtimeMs(cwd);
35
+ let bucket = _dispatchCache.get(cwd);
36
+ if (!bucket) {
37
+ bucket = new Map();
38
+ _dispatchCache.set(cwd, bucket);
39
+ }
40
+ const hit = bucket.get(key);
41
+ if (hit && hit.stateMtimeMs === mtime) {
42
+ return hit.value;
43
+ }
44
+ const value = produce();
45
+ // Only cache successful reads — failures usually mean .planning/ absent;
46
+ // caching them would mask a subsequent bootstrap.
47
+ if (value.ok) {
48
+ bucket.set(key, { stateMtimeMs: mtime, value });
49
+ }
50
+ else {
51
+ bucket.delete(key);
52
+ }
53
+ return value;
54
+ }
55
+ /** Drop cached dispatch results for a cwd. Call after ANY write to STATE.md. */
56
+ export function invalidateGsdCache(cwd) {
57
+ _dispatchCache.delete(cwd);
58
+ }
59
+ /** state update <field> <value> — native STATE.md field replace. */
60
+ export function dispatchStateUpdate(cwd, field, value) {
61
+ const result = { ok: true, data: nativeStateUpdate(cwd, field, value) };
62
+ // State writes mutate STATE.md → drop cached reads so the next dispatch
63
+ // sees fresh data.
64
+ invalidateGsdCache(cwd);
65
+ return result;
66
+ }
67
+ /** phase add <description> — creates .planning/phases/<NN>-<slug>/ (native). */
68
+ export function dispatchPhaseAdd(cwd, description) {
69
+ const sanitized = description.trim().slice(0, 120);
70
+ const native = nativePhaseAdd(cwd, sanitized);
71
+ if ("error" in native)
72
+ return { ok: false, error: native.error };
73
+ return { ok: true, data: { phaseNumber: native.padded, rawStdout: native.padded } };
74
+ }
75
+ /** phase complete <N> — marks milestone phase done (native). */
76
+ export function dispatchPhaseComplete(cwd, phaseNum) {
77
+ const num = phaseNum.replace(/^0+/, "") || phaseNum;
78
+ const r = nativePhaseComplete(cwd, num);
79
+ // STATE.md may have changed → drop cached reads.
80
+ invalidateGsdCache(cwd);
81
+ if (!r.ok)
82
+ return { ok: false, error: r.error };
83
+ return { ok: true, data: r };
84
+ }
85
+ /** roadmap update-plan-progress <N> — sync ROADMAP checkboxes (native). */
86
+ export function dispatchRoadmapPlanProgress(cwd, phaseNum) {
87
+ const num = phaseNum.replace(/^0+/, "") || phaseNum;
88
+ const r = nativeRoadmapPlanProgress(cwd, num);
89
+ // "no plans" / "ROADMAP missing" are soft (ok:true, updated:false); only
90
+ // phase-not-found is a hard error.
91
+ const hardFail = !r.updated && r.reason === `Phase ${num} not found`;
92
+ return { ok: !hardFail, data: r, raw: r.raw };
93
+ }
94
+ /** roadmap analyze — parse ROADMAP.md + disk status (native, read-only). */
95
+ export function dispatchRoadmapAnalyze(cwd) {
96
+ return { ok: true, data: nativeRoadmapAnalyze(cwd) };
97
+ }
98
+ /** state json — frontmatter snapshot (native derivation). */
99
+ export function dispatchStateJson(cwd) {
100
+ return readThroughCache(cwd, "state.json", () => ({
101
+ ok: true,
102
+ data: nativeStateJson(cwd),
103
+ }));
104
+ }
105
+ /**
106
+ * In-process loop hook resolution — uses native modules instead of dynamic require().
107
+ * For tests and low-latency paths. Replaces the old loadGsdLib() approach.
108
+ */
109
+ export function resolveLoopHooksInProcess(cwd, point) {
110
+ try {
111
+ const config = loadConfig(cwd);
112
+ const resolved = resolveLoopHooks({ point, registry: REGISTRY, config, cwd });
113
+ // Convert LoopHook[] to the broader array shape for backward compatibility
114
+ const activeHooks = resolved.activeHooks;
115
+ return { point: resolved.point, activeHooks };
116
+ }
117
+ catch (err) {
118
+ console.error(`[gsd-dispatch] resolveLoopHooksInProcess(${point}) failed: ${err.message}`);
119
+ return null;
120
+ }
121
+ }
122
+ /** Map muonroi task phase → gsd STATE.md body field updates. */
123
+ export const PHASE_TO_GSD_STATUS = {
124
+ discuss: "Planning",
125
+ plan: "Planning",
126
+ execute: "In progress",
127
+ verify: "In progress",
128
+ review: "Phase complete",
129
+ debug: "In progress",
130
+ };
131
+ //# sourceMappingURL=gsd-dispatch.js.map
@@ -0,0 +1,22 @@
1
+ /**
2
+ * gsd-runtime.ts — Native GSD runtime (replaces dynamic require() of .cjs blobs).
3
+ *
4
+ * Sprint 1: 5 in-process .cjs modules migrated to native TS.
5
+ * Sprint 2: the last gsd-tools subprocess calls were reimplemented natively and
6
+ * the `@opengsd/gsd-core` dependency was removed entirely (see gsd-dispatch.ts).
7
+ */
8
+ import { type LoopHostContractEntry } from "./loop-host-contract.js";
9
+ import { computeProgressPercent, isStateTemplateDefault, normalizeStateStatus, type StateDocumentModule, stateExtractField, stateReplaceField, stateReplaceFieldWithFallback } from "./state-document.js";
10
+ export type { LoopHostContractEntry, StateDocumentModule };
11
+ /**
12
+ * Load the loop host contract — returns the in-memory LOOP_HOST_CONTRACT.
13
+ */
14
+ export declare function loadLoopHostContract(): LoopHostContractEntry[];
15
+ /** All canonical loop points. */
16
+ export declare function allLoopHostPoints(): string[];
17
+ /**
18
+ * Load the state document module — returns native implementations wrapping
19
+ * the pure functions from state-document.ts.
20
+ */
21
+ export declare function loadStateDocument(): StateDocumentModule;
22
+ export { computeProgressPercent, isStateTemplateDefault, normalizeStateStatus, stateExtractField, stateReplaceField, stateReplaceFieldWithFallback, };