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,337 @@
1
+ /**
2
+ * capability-registry.ts — Native vendored byLoopPoint data from gsd-core
3
+ *
4
+ * ADR-894 §5 — role-partitioned Capability Registry.
5
+ * Contains the byLoopPoint data used by the loop resolver.
6
+ * This is the frozen first-party registry used as the fallback default.
7
+ */
8
+ const byLoopPoint = {
9
+ "discuss:pre": {
10
+ steps: [],
11
+ contributions: [
12
+ {
13
+ capId: "mempalace",
14
+ kind: "contribution",
15
+ point: "discuss:pre",
16
+ into: "orchestrator",
17
+ fragment: {
18
+ path: "fragments/recall-discuss.md",
19
+ inline: `<!--\n MemPalace capability — contribution fragment.\n Rendered into the discuss:pre orchestrator prompt when \`mempalace.recall_on_discuss\` is true.\n Contributes DATA (recall instructions), not control flow. onError: skip — never blocks discussion.\n-->\n### Memory recall (MemPalace)\n\n...contribution content elided for brevity...`,
20
+ },
21
+ produces: [],
22
+ consumes: [],
23
+ when: "mempalace.enabled",
24
+ onError: "skip",
25
+ },
26
+ ],
27
+ gates: [],
28
+ },
29
+ "discuss:post": {
30
+ steps: [
31
+ {
32
+ capId: "mempalace",
33
+ kind: "step",
34
+ point: "discuss:post",
35
+ ref: { skill: "mempalace-capture" },
36
+ produces: [],
37
+ consumes: ["CONTEXT.md"],
38
+ when: "mempalace.enabled",
39
+ onError: "skip",
40
+ },
41
+ ],
42
+ contributions: [],
43
+ gates: [],
44
+ },
45
+ "plan:pre": {
46
+ steps: [
47
+ {
48
+ capId: "ai-integration",
49
+ kind: "step",
50
+ point: "plan:pre",
51
+ ref: { skill: "ai-integration-phase" },
52
+ produces: ["AI-SPEC.md"],
53
+ consumes: ["CONTEXT.md"],
54
+ when: "workflow.ai_integration_phase",
55
+ onError: "skip",
56
+ },
57
+ {
58
+ capId: "intel",
59
+ kind: "step",
60
+ point: "plan:pre",
61
+ ref: { command: "intel api-surface" },
62
+ produces: [".planning/intel/API-SURFACE.md"],
63
+ consumes: [],
64
+ when: "intel.enabled",
65
+ onError: "skip",
66
+ },
67
+ {
68
+ capId: "mempalace",
69
+ kind: "step",
70
+ point: "plan:pre",
71
+ ref: { skill: "mempalace-recall" },
72
+ produces: ["MEMORY-RECALL.md"],
73
+ consumes: ["CONTEXT.md"],
74
+ when: "mempalace.enabled",
75
+ onError: "skip",
76
+ },
77
+ {
78
+ capId: "research",
79
+ kind: "step",
80
+ point: "plan:pre",
81
+ ref: { agent: "gsd-phase-researcher" },
82
+ produces: ["RESEARCH.md"],
83
+ consumes: ["CONTEXT.md"],
84
+ when: "workflow.research",
85
+ onError: "skip",
86
+ },
87
+ {
88
+ capId: "ui",
89
+ kind: "step",
90
+ point: "plan:pre",
91
+ ref: { skill: "ui-phase" },
92
+ produces: ["UI-SPEC.md"],
93
+ consumes: ["CONTEXT.md"],
94
+ when: "workflow.ui_phase",
95
+ onError: "skip",
96
+ },
97
+ {
98
+ capId: "pattern-mapper",
99
+ kind: "step",
100
+ point: "plan:pre",
101
+ ref: { agent: "gsd-pattern-mapper" },
102
+ produces: ["PATTERNS.md"],
103
+ consumes: ["RESEARCH.md"],
104
+ when: "workflow.pattern_mapper",
105
+ onError: "skip",
106
+ },
107
+ {
108
+ capId: "schema-gate",
109
+ kind: "step",
110
+ point: "plan:pre",
111
+ ref: { skill: "schema-gate" },
112
+ produces: [],
113
+ consumes: ["CONTEXT.md"],
114
+ when: "workflow.schema_gate",
115
+ onError: "halt",
116
+ },
117
+ ],
118
+ contributions: [
119
+ {
120
+ capId: "assumption-delta",
121
+ kind: "contribution",
122
+ point: "plan:pre",
123
+ into: "planner",
124
+ fragment: { path: "fragments/plan-pre.md" },
125
+ produces: [],
126
+ consumes: ["CONTEXT.md"],
127
+ when: "workflow.assumption_delta",
128
+ onError: "skip",
129
+ },
130
+ ],
131
+ gates: [],
132
+ },
133
+ "plan:post": {
134
+ steps: [
135
+ {
136
+ capId: "nyquist",
137
+ kind: "step",
138
+ point: "plan:post",
139
+ ref: { skill: "validate-phase" },
140
+ produces: ["VALIDATION.md"],
141
+ consumes: ["PLAN.md"],
142
+ when: "workflow.nyquist_validation",
143
+ onError: "halt",
144
+ },
145
+ ],
146
+ contributions: [],
147
+ gates: [],
148
+ },
149
+ "execute:pre": {
150
+ steps: [],
151
+ contributions: [],
152
+ gates: [],
153
+ },
154
+ "execute:wave:pre": {
155
+ steps: [],
156
+ contributions: [],
157
+ gates: [],
158
+ },
159
+ "execute:wave:post": {
160
+ steps: [],
161
+ contributions: [
162
+ {
163
+ capId: "mempalace",
164
+ kind: "contribution",
165
+ point: "execute:wave:post",
166
+ into: "verifier",
167
+ fragment: { path: "fragments/capture-problems.md" },
168
+ produces: [],
169
+ consumes: [],
170
+ when: "mempalace.enabled",
171
+ onError: "skip",
172
+ },
173
+ ],
174
+ gates: [
175
+ {
176
+ capId: "drift",
177
+ kind: "gate",
178
+ point: "execute:wave:post",
179
+ check: { query: "verify.schema-drift" },
180
+ when: "workflow.schema_drift_gate",
181
+ blocking: true,
182
+ onError: "skip",
183
+ },
184
+ {
185
+ capId: "drift",
186
+ kind: "gate",
187
+ point: "execute:wave:post",
188
+ check: { query: "verify.codebase-drift" },
189
+ when: "workflow.schema_drift_gate",
190
+ blocking: false,
191
+ onError: "skip",
192
+ },
193
+ {
194
+ capId: "ui",
195
+ kind: "gate",
196
+ point: "execute:wave:post",
197
+ check: { query: "ui.safety-gate" },
198
+ when: "workflow.ui_safety_gate",
199
+ blocking: true,
200
+ onError: "halt",
201
+ },
202
+ ],
203
+ },
204
+ "execute:post": {
205
+ steps: [
206
+ {
207
+ capId: "code-review",
208
+ kind: "step",
209
+ point: "execute:post",
210
+ ref: { skill: "code-review" },
211
+ produces: ["REVIEW.md"],
212
+ consumes: ["SUMMARY.md"],
213
+ when: "workflow.code_review",
214
+ onError: "skip",
215
+ },
216
+ ],
217
+ contributions: [],
218
+ gates: [
219
+ {
220
+ capId: "tdd",
221
+ kind: "gate",
222
+ point: "execute:post",
223
+ check: { query: "tdd.review-checkpoint" },
224
+ when: "workflow.tdd_mode",
225
+ blocking: false,
226
+ onError: "skip",
227
+ },
228
+ ],
229
+ },
230
+ "verify:pre": {
231
+ steps: [],
232
+ contributions: [],
233
+ gates: [],
234
+ },
235
+ "verify:post": {
236
+ steps: [
237
+ {
238
+ capId: "mempalace",
239
+ kind: "step",
240
+ point: "verify:post",
241
+ ref: { skill: "mempalace-capture" },
242
+ produces: [],
243
+ consumes: ["SUMMARY.md"],
244
+ when: "mempalace.enabled",
245
+ onError: "skip",
246
+ },
247
+ {
248
+ capId: "nyquist",
249
+ kind: "step",
250
+ point: "verify:post",
251
+ ref: { skill: "validate-phase" },
252
+ produces: ["VALIDATION.md"],
253
+ consumes: ["SUMMARY.md"],
254
+ when: "workflow.nyquist_validation",
255
+ onError: "halt",
256
+ },
257
+ {
258
+ capId: "security",
259
+ kind: "step",
260
+ point: "verify:post",
261
+ ref: { skill: "secure-phase" },
262
+ produces: ["SECURITY.md"],
263
+ consumes: ["SUMMARY.md"],
264
+ when: "workflow.security_enforcement",
265
+ onError: "halt",
266
+ },
267
+ {
268
+ capId: "ui",
269
+ kind: "step",
270
+ point: "verify:post",
271
+ ref: { skill: "ui-review" },
272
+ produces: ["UI-REVIEW.md"],
273
+ consumes: ["UI-SPEC.md"],
274
+ when: "workflow.ui_review",
275
+ onError: "skip",
276
+ },
277
+ ],
278
+ contributions: [],
279
+ gates: [],
280
+ },
281
+ "ship:pre": {
282
+ steps: [],
283
+ contributions: [],
284
+ gates: [
285
+ {
286
+ capId: "security",
287
+ kind: "gate",
288
+ point: "ship:pre",
289
+ check: {
290
+ predicate: {
291
+ kind: "artifact-frontmatter-equals",
292
+ artifact: "SECURITY.md",
293
+ field: "threats_open",
294
+ equals: 0,
295
+ },
296
+ },
297
+ when: "workflow.security_enforcement",
298
+ blocking: true,
299
+ onError: "halt",
300
+ },
301
+ ],
302
+ },
303
+ "ship:post": {
304
+ steps: [
305
+ {
306
+ capId: "mempalace",
307
+ kind: "step",
308
+ point: "ship:post",
309
+ ref: { agent: "gsd-mempalace-curator" },
310
+ produces: [],
311
+ consumes: ["UAT.md"],
312
+ when: "mempalace.enabled",
313
+ onError: "skip",
314
+ },
315
+ ],
316
+ contributions: [],
317
+ gates: [],
318
+ },
319
+ };
320
+ export const REGISTRY = {
321
+ byLoopPoint,
322
+ };
323
+ /**
324
+ * debate:error — stubbed per Test-First Registry Specialist's strengthening.
325
+ * Handler is unwired in sprint 1. Drop recovery deferred to sprint 2.
326
+ * The fixture is assertable so the registry contract test catches both
327
+ * wrong-model dispatch AND missing error channel.
328
+ */
329
+ export const debateErrorStub = {
330
+ kind: "debate:error",
331
+ onError: "halt",
332
+ blocking: true,
333
+ };
334
+ Object.freeze(debateErrorStub);
335
+ Object.freeze(REGISTRY);
336
+ Object.freeze(REGISTRY.byLoopPoint);
337
+ //# sourceMappingURL=capability-registry.js.map
@@ -0,0 +1,39 @@
1
+ export interface AssessInput {
2
+ cwd: string;
3
+ raw: string;
4
+ priorDepth: "quick" | "standard" | "heavy";
5
+ confidence: number;
6
+ conversationDigest?: string;
7
+ eeContext?: string;
8
+ bundle?: import("./pil-gate-context.js").GateContextBundle;
9
+ sessionModelId: string;
10
+ runAssessor?: (prompt: string) => Promise<string>;
11
+ }
12
+ export interface AssessResult {
13
+ depth: "quick" | "standard" | "heavy";
14
+ autoCouncil: boolean;
15
+ rationale: string;
16
+ assessed: boolean;
17
+ source: "assessor" | "prefilter-skip" | "parse-failed-fallback";
18
+ assessmentPath?: string;
19
+ quality?: {
20
+ verdict: "adequate" | "enriched" | "needs-user";
21
+ missing: string[];
22
+ noiseRisk: "low" | "med" | "high";
23
+ };
24
+ enrichedPrompt: string;
25
+ }
26
+ /**
27
+ * Run the leader-tier assessor only when the fast layer1 call is uncertain or
28
+ * the task is non-trivial. `hasPriorContext` = there is a recent-conversation
29
+ * digest (a continuation turn); such turns raise the skip bar so a
30
+ * context-dependent follow-up mis-scored as `quick` still gets the
31
+ * context-aware leader check rather than silently skipping it.
32
+ */
33
+ export declare function shouldAssess(priorDepth: string, confidence: number, hasPriorContext?: boolean): boolean;
34
+ /**
35
+ * Enrich the native depth decision. Pre-filter short-circuits trivial turns (no LLM cost);
36
+ * otherwise a leader-tier call reasons over the task + context and returns a structured
37
+ * verdict that OVERRIDES pilCtx.modelDepthTier. Never throws — degrades to priorDepth.
38
+ */
39
+ export declare function assessComplexity(input: AssessInput): Promise<AssessResult>;
@@ -0,0 +1,152 @@
1
+ import { writeFileSync } from "node:fs";
2
+ import { resolvePlanCouncilLeader } from "../council/leader.js";
3
+ import { ASSESSMENT_OUTPUT_CONTRACT, extractComplexityVerdict } from "./assessment-schema.js";
4
+ import { ensurePlanningWorkspace } from "./config-bridge.js";
5
+ import { planningArtifact } from "./paths.js";
6
+ const CONFIDENCE_FLOOR = 0.7;
7
+ /**
8
+ * Continuation turns get a HIGHER confidence bar before a `quick` verdict is
9
+ * trusted enough to skip the leader check. A terse follow-up ("làm tiếp", "từ
10
+ * các phần đó ...") can point at heavy prior work yet read as trivially simple
11
+ * in isolation, so the fast classifier's `quick` is less reliable here even
12
+ * with the recent-conversation digest now fed to it (defense in depth). Default
13
+ * 0.85; env MUONROI_GSD_CONTINUATION_CONF_FLOOR overrides (clamped to
14
+ * [CONFIDENCE_FLOOR, 1]). Set it to CONFIDENCE_FLOOR to disable the extra bar.
15
+ */
16
+ function continuationConfidenceFloor() {
17
+ const raw = Number.parseFloat(process.env.MUONROI_GSD_CONTINUATION_CONF_FLOOR ?? "");
18
+ if (!Number.isFinite(raw))
19
+ return 0.85;
20
+ return Math.min(1, Math.max(CONFIDENCE_FLOOR, raw));
21
+ }
22
+ /**
23
+ * Run the leader-tier assessor only when the fast layer1 call is uncertain or
24
+ * the task is non-trivial. `hasPriorContext` = there is a recent-conversation
25
+ * digest (a continuation turn); such turns raise the skip bar so a
26
+ * context-dependent follow-up mis-scored as `quick` still gets the
27
+ * context-aware leader check rather than silently skipping it.
28
+ */
29
+ export function shouldAssess(priorDepth, confidence, hasPriorContext = false) {
30
+ if (priorDepth === "standard" || priorDepth === "heavy")
31
+ return true;
32
+ const floor = hasPriorContext ? continuationConfidenceFloor() : CONFIDENCE_FLOOR;
33
+ return confidence < floor; // low-confidence quick → double-check
34
+ }
35
+ function buildAssessorPrompt(input) {
36
+ const digest = input.bundle?.conversationDigest || input.conversationDigest || "";
37
+ const ee = input.bundle?.eeContext || input.eeContext || "";
38
+ const plan = input.bundle?.priorPlan || "";
39
+ return [
40
+ "You are the complexity assessor — the highest-tier router for an autonomous coding agent.",
41
+ "Judge how much rigor this task needs, whether it warrants multi-perspective debate, and enrich an under-specified prompt.",
42
+ "Be decisive: over-tiering wastes time, under-tiering ships unreviewed risk, over-enriching adds noise.",
43
+ "",
44
+ `Fast classifier's first-pass depth: ${input.priorDepth} (confidence ${input.confidence.toFixed(2)}).`,
45
+ digest ? `\nRecent conversation:\n${digest}` : "",
46
+ ee ? `\nPrior experience (EE recall):\n${ee}` : "",
47
+ plan ? `\nPrior plan (this task):\n${plan}` : "",
48
+ "",
49
+ "### Task",
50
+ input.raw,
51
+ ASSESSMENT_OUTPUT_CONTRACT,
52
+ ].join("\n");
53
+ }
54
+ function writeAssessment(cwd, r, leaderModelId) {
55
+ ensurePlanningWorkspace(cwd, leaderModelId);
56
+ const path = planningArtifact(cwd, "ASSESSMENT.md");
57
+ writeFileSync(path, [
58
+ "# ASSESSMENT",
59
+ "",
60
+ `depth: ${r.depth}`,
61
+ `autoCouncil: ${r.autoCouncil}`,
62
+ `leader: \`${leaderModelId}\``,
63
+ "",
64
+ "## Rationale",
65
+ "",
66
+ r.rationale || "(none)",
67
+ ].join("\n"), "utf8");
68
+ return path;
69
+ }
70
+ /**
71
+ * Enrich the native depth decision. Pre-filter short-circuits trivial turns (no LLM cost);
72
+ * otherwise a leader-tier call reasons over the task + context and returns a structured
73
+ * verdict that OVERRIDES pilCtx.modelDepthTier. Never throws — degrades to priorDepth.
74
+ */
75
+ export async function assessComplexity(input) {
76
+ const hasPriorContext = !!(input.bundle?.conversationDigest || input.conversationDigest || "").trim();
77
+ if (!shouldAssess(input.priorDepth, input.confidence, hasPriorContext)) {
78
+ return {
79
+ depth: input.priorDepth,
80
+ autoCouncil: false,
81
+ rationale: "",
82
+ assessed: false,
83
+ source: "prefilter-skip",
84
+ enrichedPrompt: "",
85
+ };
86
+ }
87
+ if (!input.runAssessor) {
88
+ // No runner (offline/test path without a fixture) — keep priorDepth, do not fabricate.
89
+ return {
90
+ depth: input.priorDepth,
91
+ autoCouncil: false,
92
+ rationale: "",
93
+ assessed: false,
94
+ source: "prefilter-skip",
95
+ enrichedPrompt: "",
96
+ };
97
+ }
98
+ let raw = "";
99
+ try {
100
+ raw = await input.runAssessor(buildAssessorPrompt(input));
101
+ }
102
+ catch (err) {
103
+ console.error(`[gsd] complexity assessor call failed, keeping priorDepth: ${err.message}`);
104
+ return {
105
+ depth: input.priorDepth,
106
+ autoCouncil: false,
107
+ rationale: "",
108
+ assessed: false,
109
+ source: "parse-failed-fallback",
110
+ enrichedPrompt: "",
111
+ };
112
+ }
113
+ const verdict = extractComplexityVerdict(raw);
114
+ if (!verdict) {
115
+ console.error("[gsd] complexity assessor emitted no structured verdict — keeping priorDepth");
116
+ return {
117
+ depth: input.priorDepth,
118
+ autoCouncil: false,
119
+ rationale: "",
120
+ assessed: false,
121
+ source: "parse-failed-fallback",
122
+ enrichedPrompt: "",
123
+ };
124
+ }
125
+ try {
126
+ const leader = await resolvePlanCouncilLeader(input.sessionModelId);
127
+ const path = writeAssessment(input.cwd, verdict, leader.modelId);
128
+ const brief = (verdict.enrichedPrompt ?? "").slice(0, 1500);
129
+ return {
130
+ depth: verdict.depth,
131
+ autoCouncil: verdict.autoCouncil,
132
+ rationale: verdict.rationale,
133
+ assessed: true,
134
+ source: "assessor",
135
+ assessmentPath: path,
136
+ quality: verdict.quality,
137
+ enrichedPrompt: brief,
138
+ };
139
+ }
140
+ catch (err) {
141
+ console.error(`[gsd] complexity assessor finalize failed, keeping priorDepth: ${err.message}`);
142
+ return {
143
+ depth: input.priorDepth,
144
+ autoCouncil: false,
145
+ rationale: "",
146
+ assessed: false,
147
+ source: "parse-failed-fallback",
148
+ enrichedPrompt: "",
149
+ };
150
+ }
151
+ }
152
+ //# sourceMappingURL=complexity-assessor.js.map
@@ -0,0 +1,7 @@
1
+ export interface PlanningConfig {
2
+ models: Record<string, string>;
3
+ commit_docs?: boolean;
4
+ }
5
+ export declare function buildPlanningConfig(sessionModelId: string): PlanningConfig;
6
+ export declare function ensurePlanningWorkspace(cwd: string, sessionModelId: string): string;
7
+ export declare function readPlanningConfig(cwd: string): PlanningConfig | null;
@@ -0,0 +1,114 @@
1
+ import { existsSync, mkdirSync, readFileSync, writeFileSync } from "node:fs";
2
+ import { getModelByTier, getModelInfo } from "../models/registry.js";
3
+ import { detectProviderForModel } from "../providers/runtime.js";
4
+ import { getRoleModels } from "../utils/settings.js";
5
+ import { resolveGsdPremiumModel } from "./model-tier.js";
6
+ import { planningArtifact, planningRoot } from "./paths.js";
7
+ const ROLE_TO_GSD_KEY = {
8
+ leader: "leader",
9
+ implement: "executor",
10
+ verify: "verifier",
11
+ research: "researcher",
12
+ };
13
+ function resolveModelIdForRole(role, sessionModelId) {
14
+ const configured = getRoleModels()[role];
15
+ if (configured) {
16
+ try {
17
+ detectProviderForModel(configured);
18
+ if (getModelInfo(configured))
19
+ return configured;
20
+ }
21
+ catch {
22
+ /* fall through */
23
+ }
24
+ }
25
+ let providerId;
26
+ try {
27
+ providerId = detectProviderForModel(sessionModelId);
28
+ }
29
+ catch {
30
+ if (role === "leader")
31
+ return sessionModelId;
32
+ return undefined;
33
+ }
34
+ if (role === "leader" || role === "verify" || role === "research") {
35
+ try {
36
+ return resolveGsdPremiumModel(sessionModelId);
37
+ }
38
+ catch {
39
+ if (role === "leader")
40
+ return sessionModelId;
41
+ return undefined;
42
+ }
43
+ }
44
+ if (role === "implement") {
45
+ return getModelByTier("balanced", providerId)?.id ?? resolveGsdPremiumModel(sessionModelId);
46
+ }
47
+ return undefined;
48
+ }
49
+ export function buildPlanningConfig(sessionModelId) {
50
+ const models = {};
51
+ for (const [role, gsdKey] of Object.entries(ROLE_TO_GSD_KEY)) {
52
+ const id = resolveModelIdForRole(role, sessionModelId);
53
+ if (id)
54
+ models[gsdKey] = id;
55
+ }
56
+ return {
57
+ models,
58
+ commit_docs: false,
59
+ };
60
+ }
61
+ /** gsd-core compatible STATE.md (templates/state.md) with muonroi task-level extensions. */
62
+ const DEFAULT_STATE_MD = `---
63
+ gsd_state_version: '1.0'
64
+ status: planning
65
+ progress:
66
+ total_phases: 0
67
+ completed_phases: 0
68
+ total_plans: 0
69
+ completed_plans: 0
70
+ percent: 0
71
+ ---
72
+
73
+ # Project State
74
+
75
+ ## Current Position
76
+
77
+ Phase: discuss of 0 (task)
78
+ Plan: 0 of 0
79
+ Status: Ready to plan
80
+ Last activity: — native host bootstrap
81
+
82
+ | Field | Value |
83
+ | --- | --- |
84
+ | Phase | discuss |
85
+ | Depth | standard |
86
+ | Plan Verified | no |
87
+ | Workflow Kind | task |
88
+ `;
89
+ export function ensurePlanningWorkspace(cwd, sessionModelId) {
90
+ const root = planningRoot(cwd);
91
+ mkdirSync(root, { recursive: true });
92
+ const configPath = planningArtifact(cwd, "config.json");
93
+ if (!existsSync(configPath)) {
94
+ writeFileSync(configPath, `${JSON.stringify(buildPlanningConfig(sessionModelId), null, 2)}\n`, "utf8");
95
+ }
96
+ const statePath = planningArtifact(cwd, "STATE.md");
97
+ if (!existsSync(statePath)) {
98
+ writeFileSync(statePath, DEFAULT_STATE_MD, "utf8");
99
+ }
100
+ return root;
101
+ }
102
+ export function readPlanningConfig(cwd) {
103
+ const configPath = planningArtifact(cwd, "config.json");
104
+ if (!existsSync(configPath))
105
+ return null;
106
+ try {
107
+ return JSON.parse(readFileSync(configPath, "utf8"));
108
+ }
109
+ catch (err) {
110
+ console.error(`[gsd] failed to parse ${configPath}: ${err.message}`);
111
+ return null;
112
+ }
113
+ }
114
+ //# sourceMappingURL=config-bridge.js.map
@@ -0,0 +1,27 @@
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
+ export interface PlanningConfig {
9
+ model_profile?: string;
10
+ planning?: Record<string, unknown>;
11
+ [key: string]: unknown;
12
+ }
13
+ /**
14
+ * Load the GSD planning config from .planning/config.json in the given cwd.
15
+ * Returns an empty object when no config is present.
16
+ */
17
+ export declare function loadConfig(cwd: string): PlanningConfig;
18
+ /** Resolve a dotted config key against a config object (e.g. "workflow.research"). */
19
+ export declare function resolveConfigKey(dotKey: string, config: Record<string, unknown>): {
20
+ found: boolean;
21
+ value: unknown;
22
+ };
23
+ /**
24
+ * Simple activation value resolver.
25
+ * If the when key is `true` → active. Absent/falsy → inactive.
26
+ */
27
+ export declare function resolveActivationValue(when: string, config: Record<string, unknown>): boolean;