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
@@ -17,4 +17,15 @@ export interface VisibleRetryOpts {
17
17
  /** Hook called before each delay; default writes to stderr. */
18
18
  onRetry?: (attempt: number, totalAttempts: number, delayMs: number, error: Error) => void;
19
19
  }
20
+ /**
21
+ * Optional UI sink for retry progress. The TUI registers one via
22
+ * {@link setRetryReporter}; without it (headless/CLI, tests) retries fall back
23
+ * to stderr. This exists because a raw `process.stderr.write` under OpenTUI's
24
+ * raw-mode alt-screen paints over wherever the cursor sits — the retry line was
25
+ * bleeding into the composer input frame (user-reported). Routing through a
26
+ * toast keeps it in the proper surface.
27
+ */
28
+ type RetryReporter = (message: string, level: "warn" | "info") => void;
29
+ export declare function setRetryReporter(fn: RetryReporter | null): void;
20
30
  export declare function withVisibleRetry<T>(fn: () => Promise<T>, opts?: VisibleRetryOpts): Promise<T>;
31
+ export {};
@@ -6,9 +6,18 @@ function isRetryableError(err) {
6
6
  const msg = (e?.message ?? "").toLowerCase();
7
7
  return msg.includes("rate limit") || msg.includes("too many requests") || msg.includes("timeout");
8
8
  }
9
+ let retryReporter = null;
10
+ export function setRetryReporter(fn) {
11
+ retryReporter = fn;
12
+ }
9
13
  function defaultOnRetry(attempt, total, delayMs, error) {
10
14
  const reason = error.statusCode === 429 ? "rate-limited (429)" : error.message.slice(0, 80);
11
- process.stderr.write(`[retry] ${reason} — waiting ${Math.round(delayMs / 1000)}s before attempt ${attempt + 1}/${total}\n`);
15
+ const message = `[retry] ${reason} — waiting ${Math.round(delayMs / 1000)}s before attempt ${attempt + 1}/${total}`;
16
+ if (retryReporter) {
17
+ retryReporter(message, "warn");
18
+ return;
19
+ }
20
+ process.stderr.write(`${message}\n`);
12
21
  }
13
22
  export async function withVisibleRetry(fn, opts = {}) {
14
23
  const delays = opts.delaysMs ?? [2000, 4000, 8000, 16000, 32000];
@@ -27,4 +27,4 @@ export declare function getVerifyCliError(options: {
27
27
  hasPrompt?: boolean;
28
28
  hasMessageArgs?: boolean;
29
29
  }): string | null;
30
- export { defaultShellInit, inferVerifyProjectProfile, inferVerifySmokeUrl, normalizeVerifyRecipe, type VerifyProjectProfile, } from "./recipes.js";
30
+ export { defaultShellInit, inferVerifyProjectProfile, inferVerifySmokeUrl, normalizeVerifyRecipe, shouldTrustDeterministicRecipe, type VerifyProjectProfile, } from "./recipes.js";
@@ -382,5 +382,5 @@ export function getVerifyCliError(options) {
382
382
  }
383
383
  return null;
384
384
  }
385
- export { defaultShellInit, inferVerifyProjectProfile, inferVerifySmokeUrl, normalizeVerifyRecipe, } from "./recipes.js";
385
+ export { defaultShellInit, inferVerifyProjectProfile, inferVerifySmokeUrl, normalizeVerifyRecipe, shouldTrustDeterministicRecipe, } from "./recipes.js";
386
386
  //# sourceMappingURL=entrypoint.js.map
@@ -20,3 +20,16 @@ export declare function normalizeVerifyAppKind(value: string): VerifyAppKind;
20
20
  export declare function normalizeVerifyRecipe(value: unknown): VerifyRecipe | null;
21
21
  export declare function inferVerifySmokeUrl(settings?: SandboxSettings): string | null;
22
22
  export declare function inferVerifyProjectProfile(cwd: string, baseSettings?: SandboxSettings, recipeOverride?: VerifyRecipe | null): VerifyProjectProfile;
23
+ /**
24
+ * Decides whether a deterministically-inferred recipe is trustworthy enough to
25
+ * hand to the sprint-1 verify gate INSTEAD of a null (which trips CB-3's
26
+ * "Recovery options" halt). It is trusted ONLY when the profiler recognized the
27
+ * ecosystem (`appKind !== "unknown"`) AND found at least one real test command —
28
+ * i.e. there is something concrete to verify against.
29
+ *
30
+ * This is the exact boundary `Orchestrator.detectVerifyRecipe` applies to its
31
+ * `inferVerifyProjectProfile(cwd)` fallback. Exported so the gate seam is
32
+ * covered by one unit test over the REAL predicate rather than a copy that can
33
+ * silently drift from production.
34
+ */
35
+ export declare function shouldTrustDeterministicRecipe(recipe: Pick<VerifyRecipe, "appKind" | "testCommands">): boolean;
@@ -525,4 +525,19 @@ export function inferVerifyProjectProfile(cwd, baseSettings = {}, recipeOverride
525
525
  recipe: recipeWithRuntime,
526
526
  };
527
527
  }
528
+ /**
529
+ * Decides whether a deterministically-inferred recipe is trustworthy enough to
530
+ * hand to the sprint-1 verify gate INSTEAD of a null (which trips CB-3's
531
+ * "Recovery options" halt). It is trusted ONLY when the profiler recognized the
532
+ * ecosystem (`appKind !== "unknown"`) AND found at least one real test command —
533
+ * i.e. there is something concrete to verify against.
534
+ *
535
+ * This is the exact boundary `Orchestrator.detectVerifyRecipe` applies to its
536
+ * `inferVerifyProjectProfile(cwd)` fallback. Exported so the gate seam is
537
+ * covered by one unit test over the REAL predicate rather than a copy that can
538
+ * silently drift from production.
539
+ */
540
+ export function shouldTrustDeterministicRecipe(recipe) {
541
+ return recipe.appKind !== "unknown" && recipe.testCommands.length > 0;
542
+ }
528
543
  //# sourceMappingURL=recipes.js.map
package/package.json CHANGED
@@ -1,132 +1,135 @@
1
- {
2
- "name": "muonroi-cli",
3
- "workspaces": [
4
- "packages/*"
5
- ],
6
- "version": "1.8.3",
7
- "description": "BYOK AI coding agent with multi-model council debate, role-based routing, and auto-compact.",
8
- "repository": {
9
- "type": "git",
10
- "url": "git+https://github.com/muonroi/muonroi-cli.git"
11
- },
12
- "homepage": "https://github.com/muonroi/muonroi-cli#readme",
13
- "bugs": {
14
- "url": "https://github.com/muonroi/muonroi-cli/issues"
15
- },
16
- "type": "module",
17
- "main": "dist/src/index.js",
18
- "exports": {
19
- ".": {
20
- "import": "./dist/src/index.js",
21
- "types": "./dist/src/index.d.ts"
22
- }
23
- },
24
- "bin": {
25
- "muonroi-cli": "dist/src/index.js",
26
- "mu": "dist/src/index.js"
27
- },
28
- "scripts": {
29
- "dev": "node scripts/sync-version.cjs && bun run src/index.ts",
30
- "build": "node scripts/sync-version.cjs && tsc && node scripts/fix-extensions.cjs && node -e \"require('fs').cpSync('src/models/catalog.json', 'dist/src/models/catalog.json', { recursive: true })\"",
31
- "build:binary": "bun build --compile --outfile ./dist/muonroi-cli-standalone ./src/index.ts",
32
- "start": "bun run dist/index.js",
33
- "typecheck": "tsc --noEmit",
34
- "test": "bunx vitest run",
35
- "test:watch": "bunx vitest",
36
- "test:harness": "bunx vitest -c vitest.harness.config.ts run tests/harness/",
37
- "test:core": "bunx vitest run packages/agent-harness-core/__tests__/",
38
- "test:harness-react": "bunx vitest -c packages/agent-harness-react/vitest.config.ts run",
39
- "test:harness-angular": "bunx vitest -c vitest.harness-angular.config.ts run tests/harness-angular/",
40
- "test:angular": "bunx vitest -c packages/agent-harness-angular/vitest.config.ts run",
41
- "build:core": "cd packages/agent-harness-core && bun run build",
42
- "lint": "biome check src/",
43
- "format": "biome format src/",
44
- "format:fix": "biome format --write src/",
45
- "lint:fix": "biome check --fix src/",
46
- "lint:semantic": "bun scripts/check-semantic-wrap.ts",
47
- "lint:harness-skips": "bun run scripts/check-harness-skips.ts",
48
- "lint:harness-skips:strict": "bun run scripts/check-harness-skips.ts --strict",
49
- "pre-commit": "lint-staged",
50
- "prepare": "husky",
51
- "postinstall": "node scripts/postinstall.cjs || exit 0",
52
- "ee:ingest-bb": "bun run scripts/ingest-bb-to-ee.mts",
53
- "clean:meta": "git clean -fdX -- .scratch chat-export-*.txt .ee-ingest-state.json .brain-*.tmp 2>/dev/null || echo 'clean:meta: no matching untracked ignored files or git unavailable'"
54
- },
55
- "lint-staged": {
56
- "*.{ts,tsx,js,mjs,cjs,json}": "biome check --write --no-errors-on-unmatched --max-diagnostics=200"
57
- },
58
- "files": [
59
- "dist/",
60
- "!dist/**/*.exe",
61
- "!dist/**/*.map",
62
- "!dist/**/__tests__/**",
63
- "!dist/**/__test-helpers__/**",
64
- "!dist/**/__test-stubs__/**",
65
- "!dist/**/*.test.js",
66
- "!dist/**/*.test.d.ts",
67
- "!dist/**/*.spec.js",
68
- "!dist/**/*.spec.d.ts",
69
- "scripts/postinstall.cjs"
70
- ],
71
- "keywords": [
72
- "cli",
73
- "agent",
74
- "ai",
75
- "coding",
76
- "terminal",
77
- "opentui"
78
- ],
79
- "author": "muonroi",
80
- "license": "MIT",
81
- "dependencies": {
82
- "@ai-sdk/anthropic": "3.0.72",
83
- "@ai-sdk/google": "3.0.65",
84
- "@ai-sdk/mcp": "1.0.37",
85
- "@ai-sdk/openai": "3.0.54",
86
- "@ai-sdk/openai-compatible": "2.0.42",
87
- "@ai-sdk/provider": "3.0.9",
88
- "@ai-sdk/provider-utils": "4.0.24",
89
- "@modelcontextprotocol/sdk": "1.29.0",
90
- "@npmcli/arborist": "^9.4.3",
91
- "@opentui/core": "0.1.107",
92
- "@opentui/react": "0.1.107",
93
- "@qdrant/js-client-rest": "1.17.0",
94
- "ai": "6.0.169",
95
- "better-sqlite3": "^12.10.0",
96
- "commander": "^12.1.0",
97
- "diff": "^8.0.3",
98
- "fast-xml-parser": "^4.4.1",
99
- "gpt-tokenizer": "^3.4.0",
100
- "keytar": "7.9.0",
101
- "ollama-ai-provider-v2": "1.5.5",
102
- "proper-lockfile": "^4.1.2",
103
- "react": "19.2.5",
104
- "ripgrep": "^0.3.1",
105
- "semver": "^7.7.4",
106
- "tree-sitter-python": "^0.25.0",
107
- "tree-sitter-typescript": "^0.23.2",
108
- "vscode-jsonrpc": "8.2.1",
109
- "vscode-languageserver-types": "3.17.5",
110
- "web-tree-sitter": "0.26.8",
111
- "zod": "^4.3.6"
112
- },
113
- "devDependencies": {
114
- "@biomejs/biome": "2.4.13",
115
- "@types/better-sqlite3": "^7.6.13",
116
- "@types/diff": "^8.0.0",
117
- "@types/node": "^22.19.15",
118
- "@types/npmcli__arborist": "^6.3.3",
119
- "@types/proper-lockfile": "^4.1.4",
120
- "@types/react": "^19.2.14",
121
- "@types/semver": "^7.7.1",
122
- "ajv": "^8.20.0",
123
- "husky": "9.1.7",
124
- "lint-staged": "16.4.0",
125
- "typescript": "5.9.3",
126
- "vitest": "4.1.5"
127
- },
128
- "engines": {
129
- "node": ">=20.0.0"
130
- },
131
- "preferGlobal": true
132
- }
1
+ {
2
+ "name": "muonroi-cli",
3
+ "workspaces": [
4
+ "packages/*"
5
+ ],
6
+ "version": "1.8.5",
7
+ "description": "BYOK AI coding agent with multi-model council debate, role-based routing, and auto-compact.",
8
+ "repository": {
9
+ "type": "git",
10
+ "url": "git+https://github.com/muonroi/muonroi-cli.git"
11
+ },
12
+ "homepage": "https://github.com/muonroi/muonroi-cli#readme",
13
+ "bugs": {
14
+ "url": "https://github.com/muonroi/muonroi-cli/issues"
15
+ },
16
+ "type": "module",
17
+ "main": "dist/src/index.js",
18
+ "exports": {
19
+ ".": {
20
+ "import": "./dist/src/index.js",
21
+ "types": "./dist/src/index.d.ts"
22
+ }
23
+ },
24
+ "bin": {
25
+ "muonroi-cli": "dist/src/index.js",
26
+ "mu": "dist/src/index.js"
27
+ },
28
+ "scripts": {
29
+ "dev": "node scripts/sync-version.cjs && bun run src/index.ts",
30
+ "build": "node scripts/sync-version.cjs && tsc && node scripts/fix-extensions.cjs && node -e \"require('fs').cpSync('src/models/catalog.json', 'dist/src/models/catalog.json', { recursive: true })\"",
31
+ "build:binary": "bun build --compile --outfile ./dist/muonroi-cli-standalone ./src/index.ts",
32
+ "start": "bun run dist/index.js",
33
+ "typecheck": "tsc --noEmit",
34
+ "ci:local": "rm -rf /tmp/flow /tmp/gsd-* /tmp/muonroi-* /tmp/sprint-runner-* 2>/dev/null; bun install --frozen-lockfile && bun --filter @muonroi/agent-harness-core build && bunx tsc --noEmit && bunx vitest run && DBUS_SESSION_BUS_ADDRESS=unix:path=/dev/null GNOME_KEYRING_CONTROL= bunx vitest -c vitest.harness.config.ts run tests/harness/",
35
+ "test": "bunx vitest run",
36
+ "test:watch": "bunx vitest",
37
+ "test:harness": "bunx vitest -c vitest.harness.config.ts run tests/harness/",
38
+ "test:core": "bunx vitest run packages/agent-harness-core/__tests__/",
39
+ "test:harness-react": "bunx vitest -c packages/agent-harness-react/vitest.config.ts run",
40
+ "test:harness-angular": "bunx vitest -c vitest.harness-angular.config.ts run tests/harness-angular/",
41
+ "test:angular": "bunx vitest -c packages/agent-harness-angular/vitest.config.ts run",
42
+ "build:core": "cd packages/agent-harness-core && bun run build",
43
+ "lint": "biome check src/",
44
+ "format": "biome format src/",
45
+ "format:fix": "biome format --write src/",
46
+ "lint:fix": "biome check --fix src/",
47
+ "lint:semantic": "bun scripts/check-semantic-wrap.ts",
48
+ "lint:semantic:strict": "bun scripts/check-semantic-wrap.ts --strict",
49
+ "lint:harness-skips": "bun run scripts/check-harness-skips.ts",
50
+ "lint:harness-skips:strict": "bun run scripts/check-harness-skips.ts --strict",
51
+ "pre-commit": "lint-staged",
52
+ "prepare": "husky",
53
+ "postinstall": "node scripts/postinstall.cjs || exit 0",
54
+ "ee:ingest-bb": "bun run scripts/ingest-bb-to-ee.mts",
55
+ "clean:meta": "git clean -fdX -- .scratch chat-export-*.txt .ee-ingest-state.json .brain-*.tmp 2>/dev/null || echo 'clean:meta: no matching untracked ignored files or git unavailable'"
56
+ },
57
+ "lint-staged": {
58
+ "*.{ts,tsx,js,mjs,cjs,json}": "biome check --write --no-errors-on-unmatched --max-diagnostics=200"
59
+ },
60
+ "files": [
61
+ "dist/",
62
+ "!dist/**/*.exe",
63
+ "!dist/**/*.map",
64
+ "!dist/**/__tests__/**",
65
+ "!dist/**/__test-helpers__/**",
66
+ "!dist/**/__test-stubs__/**",
67
+ "!dist/**/*.test.js",
68
+ "!dist/**/*.test.d.ts",
69
+ "!dist/**/*.spec.js",
70
+ "!dist/**/*.spec.d.ts",
71
+ "scripts/postinstall.cjs"
72
+ ],
73
+ "keywords": [
74
+ "cli",
75
+ "agent",
76
+ "ai",
77
+ "coding",
78
+ "terminal",
79
+ "opentui"
80
+ ],
81
+ "author": "muonroi",
82
+ "license": "MIT",
83
+ "dependencies": {
84
+ "@ai-sdk/anthropic": "3.0.72",
85
+ "@ai-sdk/mcp": "1.0.37",
86
+ "@ai-sdk/openai": "3.0.54",
87
+ "@ai-sdk/openai-compatible": "2.0.42",
88
+ "@ai-sdk/provider": "3.0.9",
89
+ "@ai-sdk/provider-utils": "4.0.24",
90
+ "@modelcontextprotocol/sdk": "1.29.0",
91
+ "@npmcli/arborist": "^9.4.3",
92
+ "@opentui/core": "0.1.107",
93
+ "@opentui/react": "0.1.107",
94
+ "@qdrant/js-client-rest": "1.17.0",
95
+ "ai": "6.0.169",
96
+ "better-sqlite3": "^12.10.0",
97
+ "commander": "^12.1.0",
98
+ "diff": "^8.0.3",
99
+ "fast-xml-parser": "^4.4.1",
100
+ "gpt-tokenizer": "^3.4.0",
101
+ "keytar": "7.9.0",
102
+ "ollama-ai-provider-v2": "1.5.5",
103
+ "proper-lockfile": "^4.1.2",
104
+ "react": "19.2.5",
105
+ "ripgrep": "^0.3.1",
106
+ "semver": "^7.7.4",
107
+ "tree-sitter-python": "^0.25.0",
108
+ "tree-sitter-typescript": "^0.23.2",
109
+ "turndown": "^7.2.4",
110
+ "vscode-jsonrpc": "8.2.1",
111
+ "vscode-languageserver-types": "3.17.5",
112
+ "web-tree-sitter": "0.26.8",
113
+ "zod": "^4.3.6"
114
+ },
115
+ "devDependencies": {
116
+ "@biomejs/biome": "2.4.13",
117
+ "@types/better-sqlite3": "^7.6.13",
118
+ "@types/diff": "^8.0.0",
119
+ "@types/node": "^22.19.15",
120
+ "@types/npmcli__arborist": "^6.3.3",
121
+ "@types/proper-lockfile": "^4.1.4",
122
+ "@types/react": "^19.2.14",
123
+ "@types/semver": "^7.7.1",
124
+ "@types/turndown": "^5.0.6",
125
+ "ajv": "^8.20.0",
126
+ "husky": "9.1.7",
127
+ "lint-staged": "16.4.0",
128
+ "typescript": "5.9.3",
129
+ "vitest": "4.1.5"
130
+ },
131
+ "engines": {
132
+ "node": ">=20.0.0"
133
+ },
134
+ "preferGlobal": true
135
+ }
@@ -1,28 +0,0 @@
1
- /**
2
- * src/providers/auth/gcloud.ts
3
- *
4
- * Reads and refreshes tokens from Google Cloud SDK credentials
5
- * (~/.config/gcloud/application_default_credentials.json).
6
- *
7
- * The gcloud ADC token uses GCP's official OAuth client with cloud-platform
8
- * scopes, which IS accepted by generativelanguage.googleapis.com (unlike the
9
- * Agy OAuth token whose scope is restricted to cloudcode-pa).
10
- *
11
- * Usage:
12
- * 1. User runs `gcloud auth application-default login` once.
13
- * 2. This file reads the resulting credentials file, extracts the token,
14
- * and returns it as an OAuthTokens-compatible object.
15
- * 3. The token auto-refreshes when expired (using the refresh_token inside
16
- * the credentials file).
17
- */
18
- import type { OAuthTokens } from "./types.js";
19
- /**
20
- * Try to load a token from gcloud ADC.
21
- * Returns null if gcloud is not installed or no credentials exist.
22
- */
23
- export declare function loadGcloudToken(): Promise<OAuthTokens | null>;
24
- /**
25
- * Obtain auth headers from a gcloud-derived OAuthTokens.
26
- * Compatible with ProviderOAuth.authHeaders() signature.
27
- */
28
- export declare function gcloudAuthHeaders(tokens: OAuthTokens): Record<string, string>;
@@ -1,102 +0,0 @@
1
- /**
2
- * src/providers/auth/gcloud.ts
3
- *
4
- * Reads and refreshes tokens from Google Cloud SDK credentials
5
- * (~/.config/gcloud/application_default_credentials.json).
6
- *
7
- * The gcloud ADC token uses GCP's official OAuth client with cloud-platform
8
- * scopes, which IS accepted by generativelanguage.googleapis.com (unlike the
9
- * Agy OAuth token whose scope is restricted to cloudcode-pa).
10
- *
11
- * Usage:
12
- * 1. User runs `gcloud auth application-default login` once.
13
- * 2. This file reads the resulting credentials file, extracts the token,
14
- * and returns it as an OAuthTokens-compatible object.
15
- * 3. The token auto-refreshes when expired (using the refresh_token inside
16
- * the credentials file).
17
- */
18
- import { readFile } from "node:fs/promises";
19
- import { homedir } from "node:os";
20
- import { join } from "node:path";
21
- import { OAuthRefreshError } from "./types.js";
22
- // ---------------------------------------------------------------------------
23
- // Paths
24
- // ---------------------------------------------------------------------------
25
- const GCLOUD_ADC_PATH = join(homedir(), ".config", "gcloud", "application_default_credentials.json");
26
- // ---------------------------------------------------------------------------
27
- // Loader
28
- // ---------------------------------------------------------------------------
29
- /**
30
- * Load gcloud Application Default Credentials file.
31
- */
32
- async function loadADC() {
33
- try {
34
- const raw = await readFile(GCLOUD_ADC_PATH, "utf8");
35
- const creds = JSON.parse(raw);
36
- if (creds.type !== "authorized_user") {
37
- // service-account keys have a different shape; skip
38
- return null;
39
- }
40
- return creds;
41
- }
42
- catch {
43
- return null;
44
- }
45
- }
46
- // ---------------------------------------------------------------------------
47
- // Token exchange
48
- // ---------------------------------------------------------------------------
49
- /**
50
- * Exchange a gcloud refresh_token for a fresh access_token.
51
- * Google's OAuth token endpoint accepts gcloud ADC credentials.
52
- */
53
- async function exchangeRefreshToken(clientId, clientSecret, refreshToken) {
54
- const body = new URLSearchParams({
55
- client_id: clientId,
56
- client_secret: clientSecret,
57
- refresh_token: refreshToken,
58
- grant_type: "refresh_token",
59
- });
60
- let res;
61
- try {
62
- res = await fetch("https://oauth2.googleapis.com/token", {
63
- method: "POST",
64
- headers: { "Content-Type": "application/x-www-form-urlencoded" },
65
- body,
66
- });
67
- }
68
- catch (err) {
69
- throw new OAuthRefreshError("google", `gcloud ADC refresh network error: ${err.message}`);
70
- }
71
- if (!res.ok) {
72
- const text = await res.text().catch(() => "");
73
- throw new OAuthRefreshError("google", `gcloud ADC refresh failed (${res.status}): ${text}`);
74
- }
75
- const data = (await res.json());
76
- return {
77
- accessToken: data.access_token,
78
- refreshToken,
79
- expiresAt: Date.now() + data.expires_in * 1000,
80
- };
81
- }
82
- // ---------------------------------------------------------------------------
83
- // Public API
84
- // ---------------------------------------------------------------------------
85
- /**
86
- * Try to load a token from gcloud ADC.
87
- * Returns null if gcloud is not installed or no credentials exist.
88
- */
89
- export async function loadGcloudToken() {
90
- const creds = await loadADC();
91
- if (!creds)
92
- return null;
93
- return exchangeRefreshToken(creds.client_id, creds.client_secret, creds.refresh_token);
94
- }
95
- /**
96
- * Obtain auth headers from a gcloud-derived OAuthTokens.
97
- * Compatible with ProviderOAuth.authHeaders() signature.
98
- */
99
- export function gcloudAuthHeaders(tokens) {
100
- return { Authorization: `Bearer ${tokens.accessToken}` };
101
- }
102
- //# sourceMappingURL=gcloud.js.map
@@ -1,82 +0,0 @@
1
- /**
2
- * src/providers/auth/gemini-oauth.ts
3
- *
4
- * Agy (Antigravity) Google OAuth implementation.
5
- * Replaces the old abandoned public gemini-cli OAuth client.
6
- *
7
- * Uses client credentials extracted from the local agy.exe binary
8
- * (registered for agy's "oauth-personal" / Code Assist flow).
9
- *
10
- * Agy stores tokens in ~/.gemini/oauth_creds.json (legacy path).
11
- * We auto-import so existing agy logins continue to work.
12
- *
13
- * Override with MUONROI_GOOGLE_* env vars if needed.
14
- *
15
- * Note: Even though the provider ID is "google" (for model routing),
16
- * the OAuth registration and naming is now Agy.
17
- */
18
- import type { OAuthCallbackServer } from "../../mcp/oauth-callback.js";
19
- import type { FetchFn } from "./device-flow.js";
20
- import type { OAuthTokens, ProviderOAuth } from "./types.js";
21
- export type CallbackServerFn = (opts: {
22
- onCode: (code: string, state: string) => void;
23
- timeoutMs?: number;
24
- host?: string;
25
- }) => Promise<OAuthCallbackServer>;
26
- export type OpenBrowserFn = (url: string) => void;
27
- export declare class AgyOAuthProvider implements ProviderOAuth {
28
- readonly providerId: "google";
29
- private clientId;
30
- private clientSecret;
31
- private readonly fetchFn;
32
- private readonly callbackServerFn;
33
- private readonly openBrowserFn;
34
- private readonly mutex;
35
- constructor(opts?: {
36
- clientId?: string;
37
- clientSecret?: string;
38
- fetchFn?: FetchFn;
39
- callbackServerFn?: CallbackServerFn;
40
- openBrowserFn?: OpenBrowserFn;
41
- });
42
- login(opts?: {
43
- onUserCode?: (code: string, url: string) => void;
44
- }): Promise<OAuthTokens>;
45
- refresh(tokens: OAuthTokens): Promise<OAuthTokens>;
46
- revoke(tokens: OAuthTokens): Promise<void>;
47
- authHeaders(tokens: OAuthTokens): Record<string, string>;
48
- private _fetchUserEmail;
49
- }
50
- /** Back-compat for tests that still reference the old class name. */
51
- export { AgyOAuthProvider as GeminiOAuthProvider };
52
- /** Default Agy OAuth provider singleton (uses agy's Google client registration). */
53
- export declare const agyOAuth: AgyOAuthProvider;
54
- /** Back-compat alias (some code still references the old name). */
55
- export declare const geminiOAuth: AgyOAuthProvider;
56
- /**
57
- * Load stored OAuth tokens for the Google provider using Agy's registration.
58
- * - Auto-imports from ~/.gemini/oauth_creds.json (agy storage).
59
- * - Refreshes using the agy client/secret when near expiry.
60
- */
61
- export declare function loadAgyTokensWithRefresh(oauthProvider?: AgyOAuthProvider): Promise<OAuthTokens | null>;
62
- /** Back-compat alias for older call sites. */
63
- export declare const loadGeminiTokensWithRefresh: typeof loadAgyTokensWithRefresh;
64
- /**
65
- * Load a custom OAuth token using user-provided GCP OAuth client credentials.
66
- * Users register their own OAuth client in GCP Console → use these credentials
67
- * to obtain tokens with the `generativelanguage` scope (not restricted to
68
- * cloudcode-pa like the Agy client).
69
- *
70
- * Settings sources (in priority order):
71
- * 1. settings.json → providers → google → oauthClientId / oauthClientSecret
72
- * 2. MUONROI_GOOGLE_CLIENT_ID / MUONROI_GOOGLE_CLIENT_SECRET env vars
73
- *
74
- * Returns null when no custom client is configured.
75
- */
76
- export declare function loadCustomOAuthTokens(): Promise<OAuthTokens | null>;
77
- /**
78
- * Perform a full OAuth login with a custom client (Approach C).
79
- * Users run `keys login google` with their own GCP OAuth client configured
80
- * in settings → this opens the browser with the right scopes.
81
- */
82
- export declare function loginWithCustomClient(): Promise<OAuthTokens | null>;