@wrongstack/cli 0.295.1 → 0.296.3

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 (398) hide show
  1. package/data/providers.json +0 -24
  2. package/dist/acp-A5OSIU2P.js +824 -0
  3. package/dist/acp-A5OSIU2P.js.map +7 -0
  4. package/dist/acp-server-agent.d.ts.map +1 -1
  5. package/dist/arg-parser.d.ts.map +1 -1
  6. package/dist/audit-2ZSFGNIF.js +102 -0
  7. package/dist/audit-2ZSFGNIF.js.map +7 -0
  8. package/dist/auth-CJWQJVRH.js +504 -0
  9. package/dist/auth-CJWQJVRH.js.map +7 -0
  10. package/dist/auth-menu/auth-menu-audit.d.ts +0 -4
  11. package/dist/auth-menu/auth-menu-audit.d.ts.map +1 -1
  12. package/dist/bench-7ZDWSNEF.js +278 -0
  13. package/dist/bench-7ZDWSNEF.js.map +7 -0
  14. package/dist/boot/brain-decision-log.d.ts +7 -5
  15. package/dist/boot/brain-decision-log.d.ts.map +1 -1
  16. package/dist/boot/dispatch-webui.d.ts +5 -8
  17. package/dist/boot/dispatch-webui.d.ts.map +1 -1
  18. package/dist/boot/system-prompt-builder.d.ts +3 -0
  19. package/dist/boot/system-prompt-builder.d.ts.map +1 -1
  20. package/dist/boot/tui-coordinator-callbacks.d.ts +45 -0
  21. package/dist/boot/tui-coordinator-callbacks.d.ts.map +1 -0
  22. package/dist/boot/tui-project-switch.d.ts +2 -3
  23. package/dist/boot/tui-project-switch.d.ts.map +1 -1
  24. package/dist/boot/tui-runtime-state.d.ts +5 -6
  25. package/dist/boot/tui-runtime-state.d.ts.map +1 -1
  26. package/dist/boot/tui-session-resume.d.ts.map +1 -1
  27. package/dist/boot/tui-settings-adapter.d.ts +2 -3
  28. package/dist/boot/tui-settings-adapter.d.ts.map +1 -1
  29. package/dist/boot.d.ts.map +1 -1
  30. package/dist/brain-menu/panel-service.d.ts.map +1 -1
  31. package/dist/chimera-review-task.d.ts +6 -0
  32. package/dist/chimera-review-task.d.ts.map +1 -0
  33. package/dist/chimera-reviewer-policy.d.ts +34 -0
  34. package/dist/chimera-reviewer-policy.d.ts.map +1 -0
  35. package/dist/chronicle-QQEQFSSE.js +256 -0
  36. package/dist/chronicle-QQEQFSSE.js.map +7 -0
  37. package/dist/chunk-5N34EWJR.js +418 -0
  38. package/dist/chunk-5N34EWJR.js.map +7 -0
  39. package/dist/chunk-66T43Q4Y.js +90 -0
  40. package/dist/chunk-66T43Q4Y.js.map +7 -0
  41. package/dist/chunk-7OCVIDC7.js +11 -0
  42. package/dist/chunk-7OCVIDC7.js.map +7 -0
  43. package/dist/chunk-ABXK4VVY.js +84 -0
  44. package/dist/chunk-ABXK4VVY.js.map +7 -0
  45. package/dist/chunk-AXVZMEWG.js +306 -0
  46. package/dist/chunk-AXVZMEWG.js.map +7 -0
  47. package/dist/chunk-AZESNNIC.js +216 -0
  48. package/dist/chunk-AZESNNIC.js.map +7 -0
  49. package/dist/chunk-BGFM3PD7.js +41 -0
  50. package/dist/chunk-BGFM3PD7.js.map +7 -0
  51. package/dist/chunk-BQCAJ7FI.js +425 -0
  52. package/dist/chunk-BQCAJ7FI.js.map +7 -0
  53. package/dist/chunk-DPJZQCVP.js +13 -0
  54. package/dist/chunk-DPJZQCVP.js.map +7 -0
  55. package/dist/chunk-F4PEGAJZ.js +176 -0
  56. package/dist/chunk-F4PEGAJZ.js.map +7 -0
  57. package/dist/chunk-IHBYBYGA.js +443 -0
  58. package/dist/chunk-IHBYBYGA.js.map +7 -0
  59. package/dist/chunk-JBSQ7ONN.js +1023 -0
  60. package/dist/chunk-JBSQ7ONN.js.map +7 -0
  61. package/dist/chunk-JBTFWWKV.js +1325 -0
  62. package/dist/chunk-JBTFWWKV.js.map +7 -0
  63. package/dist/chunk-JUHRI6OV.js +100 -0
  64. package/dist/chunk-JUHRI6OV.js.map +7 -0
  65. package/dist/chunk-OI7GWJDS.js +3303 -0
  66. package/dist/chunk-OI7GWJDS.js.map +7 -0
  67. package/dist/chunk-OP47B3IX.js +142 -0
  68. package/dist/chunk-OP47B3IX.js.map +7 -0
  69. package/dist/chunk-PJHET45A.js +158 -0
  70. package/dist/chunk-PJHET45A.js.map +7 -0
  71. package/dist/chunk-Q5GTM25S.js +17 -0
  72. package/dist/chunk-Q5GTM25S.js.map +7 -0
  73. package/dist/chunk-QD544J2B.js +19 -0
  74. package/dist/chunk-QD544J2B.js.map +7 -0
  75. package/dist/chunk-QUNHS6O3.js +258 -0
  76. package/dist/chunk-QUNHS6O3.js.map +7 -0
  77. package/dist/chunk-TADVX644.js +480 -0
  78. package/dist/chunk-TADVX644.js.map +7 -0
  79. package/dist/chunk-TGDHN4LM.js +81 -0
  80. package/dist/chunk-TGDHN4LM.js.map +7 -0
  81. package/dist/chunk-TYO2OVAD.js +50 -0
  82. package/dist/chunk-TYO2OVAD.js.map +7 -0
  83. package/dist/chunk-VCYZ3WZV.js +14 -0
  84. package/dist/chunk-VCYZ3WZV.js.map +7 -0
  85. package/dist/chunk-VJUEZZYB.js +29 -0
  86. package/dist/chunk-VJUEZZYB.js.map +7 -0
  87. package/dist/chunk-WHOIR577.js +1 -0
  88. package/dist/chunk-WHOIR577.js.map +7 -0
  89. package/dist/chunk-WY7KKOUK.js +460 -0
  90. package/dist/chunk-WY7KKOUK.js.map +7 -0
  91. package/dist/chunk-XJXDOF63.js +28 -0
  92. package/dist/chunk-XJXDOF63.js.map +7 -0
  93. package/dist/chunk-XWEGWYDU.js +560 -0
  94. package/dist/chunk-XWEGWYDU.js.map +7 -0
  95. package/dist/chunk-YWUPHRGB.js +346 -0
  96. package/dist/chunk-YWUPHRGB.js.map +7 -0
  97. package/dist/chunk-Z7YGASQP.js +313 -0
  98. package/dist/chunk-Z7YGASQP.js.map +7 -0
  99. package/dist/cli-entry-main.d.ts +2 -0
  100. package/dist/cli-entry-main.d.ts.map +1 -0
  101. package/dist/cli-entry-point.d.ts +3 -3
  102. package/dist/cli-entry-point.d.ts.map +1 -1
  103. package/dist/cli-main-RTY35OPD.js +29268 -0
  104. package/dist/cli-main-RTY35OPD.js.map +7 -0
  105. package/dist/cli-main-helpers.d.ts +21 -0
  106. package/dist/cli-main-helpers.d.ts.map +1 -0
  107. package/dist/cli-main.d.ts +25 -1
  108. package/dist/cli-main.d.ts.map +1 -1
  109. package/dist/context-limit.d.ts +48 -0
  110. package/dist/context-limit.d.ts.map +1 -1
  111. package/dist/diag-doctor-OQ3AA63O.js +170 -0
  112. package/dist/diag-doctor-OQ3AA63O.js.map +7 -0
  113. package/dist/execute-deps.d.ts +11 -12
  114. package/dist/execute-deps.d.ts.map +1 -1
  115. package/dist/execution-O7I5DYE6.js +4682 -0
  116. package/dist/execution-O7I5DYE6.js.map +7 -0
  117. package/dist/execution-chimera-ask.d.ts +10 -0
  118. package/dist/execution-chimera-ask.d.ts.map +1 -0
  119. package/dist/execution-chimera-cascade.d.ts +15 -0
  120. package/dist/execution-chimera-cascade.d.ts.map +1 -0
  121. package/dist/execution-cleanup.d.ts +23 -0
  122. package/dist/execution-cleanup.d.ts.map +1 -0
  123. package/dist/execution-kanban-dispatch.d.ts +10 -0
  124. package/dist/execution-kanban-dispatch.d.ts.map +1 -0
  125. package/dist/execution-repl-fleet-callbacks.d.ts +11 -0
  126. package/dist/execution-repl-fleet-callbacks.d.ts.map +1 -0
  127. package/dist/execution-storage-observability.d.ts +3 -0
  128. package/dist/execution-storage-observability.d.ts.map +1 -0
  129. package/dist/execution-tui-next-step-callbacks.d.ts +20 -0
  130. package/dist/execution-tui-next-step-callbacks.d.ts.map +1 -0
  131. package/dist/execution.d.ts +2 -139
  132. package/dist/execution.d.ts.map +1 -1
  133. package/dist/export-TPORYVRZ.js +64 -0
  134. package/dist/export-TPORYVRZ.js.map +7 -0
  135. package/dist/fleet/host-acp-runner-cache.d.ts +9 -0
  136. package/dist/fleet/host-acp-runner-cache.d.ts.map +1 -0
  137. package/dist/fleet/host-acp.d.ts +3 -0
  138. package/dist/fleet/host-acp.d.ts.map +1 -0
  139. package/dist/fleet/host-concurrency.d.ts +2 -0
  140. package/dist/fleet/host-concurrency.d.ts.map +1 -0
  141. package/dist/fleet/host-context.d.ts +5 -0
  142. package/dist/fleet/host-context.d.ts.map +1 -0
  143. package/dist/fleet/host-director-builder.d.ts +24 -0
  144. package/dist/fleet/host-director-builder.d.ts.map +1 -0
  145. package/dist/fleet/host-director-event-bridges.d.ts +37 -0
  146. package/dist/fleet/host-director-event-bridges.d.ts.map +1 -0
  147. package/dist/fleet/host-director-services.d.ts +20 -0
  148. package/dist/fleet/host-director-services.d.ts.map +1 -0
  149. package/dist/fleet/host-event-bridge.d.ts +17 -0
  150. package/dist/fleet/host-event-bridge.d.ts.map +1 -0
  151. package/dist/fleet/host-helpers.d.ts +22 -0
  152. package/dist/fleet/host-helpers.d.ts.map +1 -0
  153. package/dist/fleet/host-learning-tracker.d.ts +11 -0
  154. package/dist/fleet/host-learning-tracker.d.ts.map +1 -0
  155. package/dist/fleet/host-learning.d.ts +4 -0
  156. package/dist/fleet/host-learning.d.ts.map +1 -0
  157. package/dist/fleet/host-lifecycle-events.d.ts +4 -0
  158. package/dist/fleet/host-lifecycle-events.d.ts.map +1 -0
  159. package/dist/fleet/host-paths.d.ts +3 -0
  160. package/dist/fleet/host-paths.d.ts.map +1 -0
  161. package/dist/fleet/host-provider.d.ts +22 -0
  162. package/dist/fleet/host-provider.d.ts.map +1 -0
  163. package/dist/fleet/host-session-writer.d.ts +3 -0
  164. package/dist/fleet/host-session-writer.d.ts.map +1 -0
  165. package/dist/fleet/host-shadow-pass.d.ts +21 -0
  166. package/dist/fleet/host-shadow-pass.d.ts.map +1 -0
  167. package/dist/fleet/host-spawn-types.d.ts +25 -0
  168. package/dist/fleet/host-spawn-types.d.ts.map +1 -0
  169. package/dist/fleet/host-status.d.ts +48 -0
  170. package/dist/fleet/host-status.d.ts.map +1 -0
  171. package/dist/fleet/host-subagent-factory.d.ts +16 -0
  172. package/dist/fleet/host-subagent-factory.d.ts.map +1 -0
  173. package/dist/fleet/host-supervisor.d.ts +16 -0
  174. package/dist/fleet/host-supervisor.d.ts.map +1 -0
  175. package/dist/fleet/host-task-result-report.d.ts +11 -0
  176. package/dist/fleet/host-task-result-report.d.ts.map +1 -0
  177. package/dist/fleet/host-types.d.ts +89 -0
  178. package/dist/fleet/host-types.d.ts.map +1 -0
  179. package/dist/fleet/host.d.ts +10 -357
  180. package/dist/fleet/host.d.ts.map +1 -1
  181. package/dist/hq-JUYKUNJX.js +547 -0
  182. package/dist/hq-JUYKUNJX.js.map +7 -0
  183. package/dist/hq-command-controller.d.ts +2 -2
  184. package/dist/hq-command-controller.d.ts.map +1 -1
  185. package/dist/hq-server/auth.d.ts +15 -4
  186. package/dist/hq-server/auth.d.ts.map +1 -1
  187. package/dist/hq-server/project-root.d.ts +5 -0
  188. package/dist/hq-server/project-root.d.ts.map +1 -0
  189. package/dist/hq-server/routes/auth-handlers.d.ts +25 -0
  190. package/dist/hq-server/routes/auth-handlers.d.ts.map +1 -0
  191. package/dist/hq-server/routes/session-handlers.d.ts +8 -0
  192. package/dist/hq-server/routes/session-handlers.d.ts.map +1 -0
  193. package/dist/hq-server/routes.d.ts +8 -6
  194. package/dist/hq-server/routes.d.ts.map +1 -1
  195. package/dist/hq-server/snapshot.d.ts +44 -0
  196. package/dist/hq-server/snapshot.d.ts.map +1 -1
  197. package/dist/hq-server/types.d.ts +22 -4
  198. package/dist/hq-server/types.d.ts.map +1 -1
  199. package/dist/hq-server/utils.d.ts +8 -0
  200. package/dist/hq-server/utils.d.ts.map +1 -1
  201. package/dist/hq-server/ws.d.ts +1 -1
  202. package/dist/hq-server/ws.d.ts.map +1 -1
  203. package/dist/hq-server-6AQ3BXZA.js +39 -0
  204. package/dist/hq-server-6AQ3BXZA.js.map +7 -0
  205. package/dist/hq-server.d.ts +3 -3
  206. package/dist/hq-server.d.ts.map +1 -1
  207. package/dist/hq-ttl-U2FAYFAT.js +8 -0
  208. package/dist/hq-ttl-U2FAYFAT.js.map +7 -0
  209. package/dist/hq-tunnel-RFKGC4HI.js +114 -0
  210. package/dist/hq-tunnel-RFKGC4HI.js.map +7 -0
  211. package/dist/hq-tunnel.d.ts +1 -1
  212. package/dist/hq-tunnel.d.ts.map +1 -1
  213. package/dist/index.d.ts +2 -1
  214. package/dist/index.d.ts.map +1 -1
  215. package/dist/index.js +2503 -53026
  216. package/dist/index.js.map +4 -4
  217. package/dist/init-E2NDDOHI.js +27 -0
  218. package/dist/init-E2NDDOHI.js.map +7 -0
  219. package/dist/kanban-dispatch-route.d.ts +14 -0
  220. package/dist/kanban-dispatch-route.d.ts.map +1 -0
  221. package/dist/kanban-hq-sync.d.ts +2 -0
  222. package/dist/kanban-hq-sync.d.ts.map +1 -1
  223. package/dist/kanban-run-mirror-EKVNGXWW.js +12 -0
  224. package/dist/kanban-run-mirror-EKVNGXWW.js.map +7 -0
  225. package/dist/live-settings-input.d.ts +69 -0
  226. package/dist/live-settings-input.d.ts.map +1 -0
  227. package/dist/mailbox-serve-2UWHEN3M.js +302 -0
  228. package/dist/mailbox-serve-2UWHEN3M.js.map +7 -0
  229. package/dist/mcp-CYLPUEHC.js +413 -0
  230. package/dist/mcp-CYLPUEHC.js.map +7 -0
  231. package/dist/modeldiag-HENYJ4N7.js +1290 -0
  232. package/dist/modeldiag-HENYJ4N7.js.map +7 -0
  233. package/dist/permissions-FNYLZIL4.js +115 -0
  234. package/dist/permissions-FNYLZIL4.js.map +7 -0
  235. package/dist/picker-key-state.d.ts +7 -0
  236. package/dist/picker-key-state.d.ts.map +1 -0
  237. package/dist/picker-model-picker.d.ts +6 -0
  238. package/dist/picker-model-picker.d.ts.map +1 -0
  239. package/dist/picker-ui.d.ts +17 -0
  240. package/dist/picker-ui.d.ts.map +1 -0
  241. package/dist/picker.d.ts +4 -37
  242. package/dist/picker.d.ts.map +1 -1
  243. package/dist/plugin-usage-OU6X6LM3.js +40 -0
  244. package/dist/plugin-usage-OU6X6LM3.js.map +7 -0
  245. package/dist/plugins-4LJ5IUBI.js +24 -0
  246. package/dist/plugins-4LJ5IUBI.js.map +7 -0
  247. package/dist/pre-launch.d.ts +0 -1
  248. package/dist/pre-launch.d.ts.map +1 -1
  249. package/dist/project-BLQ3ALVL.js +76 -0
  250. package/dist/project-BLQ3ALVL.js.map +7 -0
  251. package/dist/project-manifest-GE25PW4S.js +18 -0
  252. package/dist/project-manifest-GE25PW4S.js.map +7 -0
  253. package/dist/project-picker-BOCWHBXP.js +17 -0
  254. package/dist/project-picker-BOCWHBXP.js.map +7 -0
  255. package/dist/projects-XE76NFNZ.js +38 -0
  256. package/dist/projects-XE76NFNZ.js.map +7 -0
  257. package/dist/provider-helpers.d.ts +22 -6
  258. package/dist/provider-helpers.d.ts.map +1 -1
  259. package/dist/providers-models-GDELBHZK.js +589 -0
  260. package/dist/providers-models-GDELBHZK.js.map +7 -0
  261. package/dist/quick-VIO2BEHS.js +10 -0
  262. package/dist/quick-VIO2BEHS.js.map +7 -0
  263. package/dist/repl-auto-proceed.d.ts +19 -0
  264. package/dist/repl-auto-proceed.d.ts.map +1 -0
  265. package/dist/repl-client-registration.d.ts +7 -0
  266. package/dist/repl-client-registration.d.ts.map +1 -0
  267. package/dist/repl-input.d.ts +11 -0
  268. package/dist/repl-input.d.ts.map +1 -0
  269. package/dist/repl-options.d.ts +54 -0
  270. package/dist/repl-options.d.ts.map +1 -0
  271. package/dist/repl-rendering.d.ts +4 -0
  272. package/dist/repl-rendering.d.ts.map +1 -0
  273. package/dist/repl-suggestions.d.ts +21 -0
  274. package/dist/repl-suggestions.d.ts.map +1 -0
  275. package/dist/repl.d.ts +3 -162
  276. package/dist/repl.d.ts.map +1 -1
  277. package/dist/replay-KCTXNMZQ.js +75 -0
  278. package/dist/replay-KCTXNMZQ.js.map +7 -0
  279. package/dist/rewind-EJMVFVLS.js +185 -0
  280. package/dist/rewind-EJMVFVLS.js.map +7 -0
  281. package/dist/sdd-runtime-JG4EEKL6.js +54 -0
  282. package/dist/sdd-runtime-JG4EEKL6.js.map +7 -0
  283. package/dist/services/sdd/project-context.d.ts +1 -1
  284. package/dist/services/sdd/project-context.d.ts.map +1 -1
  285. package/dist/services/sdd/task-manager.d.ts.map +1 -1
  286. package/dist/services/statusline-config.d.ts +1 -1
  287. package/dist/services/statusline-config.d.ts.map +1 -1
  288. package/dist/session-event-wiring.d.ts +2 -2
  289. package/dist/session-event-wiring.d.ts.map +1 -1
  290. package/dist/sessions-config-NLCMK3BY.js +409 -0
  291. package/dist/sessions-config-NLCMK3BY.js.map +7 -0
  292. package/dist/settings-menu.d.ts +3 -18
  293. package/dist/settings-menu.d.ts.map +1 -1
  294. package/dist/simpleui-dist-JIFGUJO7.js +93 -0
  295. package/dist/simpleui-dist-JIFGUJO7.js.map +7 -0
  296. package/dist/slash-commands/brain.d.ts.map +1 -1
  297. package/dist/slash-commands/clear.d.ts.map +1 -1
  298. package/dist/slash-commands/fallback.d.ts.map +1 -1
  299. package/dist/slash-commands/kanban-agent-helpers.d.ts +18 -0
  300. package/dist/slash-commands/kanban-agent-helpers.d.ts.map +1 -0
  301. package/dist/slash-commands/kanban-format.d.ts +16 -0
  302. package/dist/slash-commands/kanban-format.d.ts.map +1 -0
  303. package/dist/slash-commands/kanban-help.d.ts +2 -0
  304. package/dist/slash-commands/kanban-help.d.ts.map +1 -0
  305. package/dist/slash-commands/kanban.d.ts.map +1 -1
  306. package/dist/slash-commands/mailbox-demo.d.ts.map +1 -1
  307. package/dist/slash-commands/mailbox.d.ts +2 -1
  308. package/dist/slash-commands/mailbox.d.ts.map +1 -1
  309. package/dist/slash-commands/memory-compact.d.ts +5 -0
  310. package/dist/slash-commands/memory-compact.d.ts.map +1 -0
  311. package/dist/slash-commands/memory-flags.d.ts +36 -0
  312. package/dist/slash-commands/memory-flags.d.ts.map +1 -0
  313. package/dist/slash-commands/memory-formatters.d.ts +16 -0
  314. package/dist/slash-commands/memory-formatters.d.ts.map +1 -0
  315. package/dist/slash-commands/memory.d.ts.map +1 -1
  316. package/dist/slash-commands/mouse.d.ts +2 -2
  317. package/dist/slash-commands/review.d.ts.map +1 -1
  318. package/dist/slash-commands/sdd-command-helpers.d.ts +23 -0
  319. package/dist/slash-commands/sdd-command-helpers.d.ts.map +1 -0
  320. package/dist/slash-commands/sdd-format.d.ts +32 -0
  321. package/dist/slash-commands/sdd-format.d.ts.map +1 -0
  322. package/dist/slash-commands/sdd.d.ts.map +1 -1
  323. package/dist/slash-commands/settings.d.ts.map +1 -1
  324. package/dist/subcommands/handlers/chronicle.d.ts.map +1 -1
  325. package/dist/subcommands/handlers/mailbox-serve.d.ts.map +1 -1
  326. package/dist/subcommands/handlers/model-smoke-test.d.ts +51 -0
  327. package/dist/subcommands/handlers/model-smoke-test.d.ts.map +1 -0
  328. package/dist/subcommands/handlers/modeldiag-profiles.d.ts +64 -0
  329. package/dist/subcommands/handlers/modeldiag-profiles.d.ts.map +1 -0
  330. package/dist/subcommands/handlers/modeldiag.d.ts.map +1 -1
  331. package/dist/subcommands/handlers/per-subcommand-deep-help-table.d.ts +3 -0
  332. package/dist/subcommands/handlers/per-subcommand-deep-help-table.d.ts.map +1 -0
  333. package/dist/subcommands/handlers/per-subcommand-help-data.d.ts +3 -0
  334. package/dist/subcommands/handlers/per-subcommand-help-data.d.ts.map +1 -0
  335. package/dist/subcommands/handlers/per-subcommand-help-table.d.ts +36 -0
  336. package/dist/subcommands/handlers/per-subcommand-help-table.d.ts.map +1 -0
  337. package/dist/subcommands/handlers/per-subcommand-help-types.d.ts +18 -0
  338. package/dist/subcommands/handlers/per-subcommand-help-types.d.ts.map +1 -0
  339. package/dist/subcommands/handlers/per-subcommand-help.d.ts +2 -80
  340. package/dist/subcommands/handlers/per-subcommand-help.d.ts.map +1 -1
  341. package/dist/subcommands/handlers/rewind.d.ts.map +1 -1
  342. package/dist/subcommands/index.d.ts +7 -0
  343. package/dist/subcommands/index.d.ts.map +1 -1
  344. package/dist/tools-skills-UNKLOB7M.js +29 -0
  345. package/dist/tools-skills-UNKLOB7M.js.map +7 -0
  346. package/dist/update-YC4TYW2Y.js +16 -0
  347. package/dist/update-YC4TYW2Y.js.map +7 -0
  348. package/dist/update-check-UMYTOH7Z.js +18 -0
  349. package/dist/update-check-UMYTOH7Z.js.map +7 -0
  350. package/dist/version-help-DROHZRW6.js +11 -0
  351. package/dist/version-help-DROHZRW6.js.map +7 -0
  352. package/dist/webui-server/connection-handler.d.ts.map +1 -1
  353. package/dist/webui-server/kanban-host-adapter.d.ts +5 -1
  354. package/dist/webui-server/kanban-host-adapter.d.ts.map +1 -1
  355. package/dist/webui-server/listen-helpers.d.ts +18 -0
  356. package/dist/webui-server/listen-helpers.d.ts.map +1 -0
  357. package/dist/webui-server/node-pty-loader.d.ts +6 -0
  358. package/dist/webui-server/node-pty-loader.d.ts.map +1 -0
  359. package/dist/webui-server-ZF5KVGC5.js +1460 -0
  360. package/dist/webui-server-ZF5KVGC5.js.map +7 -0
  361. package/dist/webui-server-options.d.ts +191 -0
  362. package/dist/webui-server-options.d.ts.map +1 -0
  363. package/dist/webui-server.d.ts +2 -178
  364. package/dist/webui-server.d.ts.map +1 -1
  365. package/dist/wiring/brain-and-orchestration.d.ts.map +1 -1
  366. package/dist/wiring/codebase-index.d.ts.map +1 -1
  367. package/dist/wiring/command-host-state.d.ts +4 -4
  368. package/dist/wiring/dep-watcher-bridge.d.ts +23 -0
  369. package/dist/wiring/dep-watcher-bridge.d.ts.map +1 -0
  370. package/dist/wiring/dep-watcher.d.ts.map +1 -1
  371. package/dist/wiring/hq-telemetry.d.ts +2 -2
  372. package/dist/wiring/lifecycle-plugins.d.ts +4 -3
  373. package/dist/wiring/lifecycle-plugins.d.ts.map +1 -1
  374. package/dist/wiring/mailbox-bridge-bootstrap.d.ts +1 -1
  375. package/dist/wiring/management-tools.d.ts +15 -0
  376. package/dist/wiring/management-tools.d.ts.map +1 -0
  377. package/dist/wiring/pipeline.d.ts +2 -1
  378. package/dist/wiring/pipeline.d.ts.map +1 -1
  379. package/dist/wiring/plugins.d.ts +1 -1
  380. package/dist/wiring/plugins.d.ts.map +1 -1
  381. package/dist/wiring/provider-runtime-setup.d.ts +14 -1
  382. package/dist/wiring/provider-runtime-setup.d.ts.map +1 -1
  383. package/dist/wiring/provider.d.ts.map +1 -1
  384. package/dist/wiring/runtime-controller-deps.d.ts +1 -1
  385. package/dist/wiring/runtime-controller-deps.d.ts.map +1 -1
  386. package/dist/wiring/sage.d.ts.map +1 -1
  387. package/dist/wiring/session-registry.d.ts +38 -0
  388. package/dist/wiring/session-registry.d.ts.map +1 -0
  389. package/dist/wiring/session.d.ts +10 -6
  390. package/dist/wiring/session.d.ts.map +1 -1
  391. package/dist/wiring/tools.d.ts.map +1 -1
  392. package/package.json +22 -22
  393. package/dist/cli-recovery-prompt.d.ts +0 -19
  394. package/dist/cli-recovery-prompt.d.ts.map +0 -1
  395. package/dist/first-run-auth-gate.d.ts +0 -20
  396. package/dist/first-run-auth-gate.d.ts.map +0 -1
  397. package/dist/pre-launch/indexing-question.d.ts +0 -28
  398. package/dist/pre-launch/indexing-question.d.ts.map +0 -1
@@ -0,0 +1,313 @@
1
+
2
+ // src/tui-thinking-word.ts
3
+ var DEFAULT_TUI_THINKING_WORD = "thinking";
4
+ var MAX_TUI_THINKING_WORD_LENGTH = 16;
5
+ function normalizeTuiThinkingWord(value) {
6
+ if (typeof value !== "string") return DEFAULT_TUI_THINKING_WORD;
7
+ const word = value.trim();
8
+ if (word.length === 0 || word.length > MAX_TUI_THINKING_WORD_LENGTH) {
9
+ return DEFAULT_TUI_THINKING_WORD;
10
+ }
11
+ if (!/^[\p{L}\p{N}_-]+$/u.test(word)) return DEFAULT_TUI_THINKING_WORD;
12
+ return word;
13
+ }
14
+
15
+ // src/settings-menu.ts
16
+ import * as fs from "node:fs/promises";
17
+ import * as path from "node:path";
18
+ import { atomicWrite, deepMerge } from "@wrongstack/core/utils";
19
+ import { ConfigError, ERROR_CODES, FsError } from "@wrongstack/core/types";
20
+ import { decryptConfigSecrets, encryptConfigSecrets } from "@wrongstack/core/security";
21
+ function resolvePersistPath(deps) {
22
+ if (deps.forceGlobal) return deps.profileConfigPath;
23
+ const scope = deps.configStore.get().configScope;
24
+ if (scope === "project" && deps.inProjectConfigPath) {
25
+ return deps.inProjectConfigPath;
26
+ }
27
+ return deps.profileConfigPath;
28
+ }
29
+ function resolveActualTarget(deps, decrypted, fallbackPath) {
30
+ if (deps.forceGlobal) return deps.profileConfigPath;
31
+ const newScope = decrypted.configScope;
32
+ const newProfileName = decrypted.activeProfile;
33
+ const effectiveProfilePath = newProfileName && deps.resolveProfilePath ? deps.resolveProfilePath(newProfileName) : deps.profileConfigPath;
34
+ if (newScope === "project" && deps.inProjectConfigPath) {
35
+ return deps.inProjectConfigPath;
36
+ }
37
+ if (newScope === "global") {
38
+ return effectiveProfilePath;
39
+ }
40
+ return fallbackPath;
41
+ }
42
+ function isProfileOrGlobalTarget(actualTarget, deps) {
43
+ return actualTarget === deps.profileConfigPath;
44
+ }
45
+ async function ensureProjectDir(filePath) {
46
+ const dir = path.dirname(filePath);
47
+ try {
48
+ await fs.mkdir(dir, { recursive: true });
49
+ } catch {
50
+ }
51
+ }
52
+ async function mergeWithDestinationIfExists(destPath, source, vault) {
53
+ let destRaw;
54
+ try {
55
+ destRaw = await fs.readFile(destPath, "utf8");
56
+ } catch (err) {
57
+ if (err.code === "ENOENT") {
58
+ return source;
59
+ }
60
+ throw err;
61
+ }
62
+ let destParsed;
63
+ try {
64
+ destParsed = JSON.parse(destRaw);
65
+ } catch (err) {
66
+ process.stderr.write(JSON.stringify({
67
+ level: "warn",
68
+ event: "settings_menu_merge_skipped",
69
+ message: `Skipping merge into corrupt destination file: ${destPath}`,
70
+ timestamp: (/* @__PURE__ */ new Date()).toISOString()
71
+ }) + "\n");
72
+ void err;
73
+ return source;
74
+ }
75
+ const destDecrypted = decryptConfigSecrets(destParsed, vault);
76
+ return deepMerge(destDecrypted, source);
77
+ }
78
+ var PROJECT_SAFE_FIELDS = /* @__PURE__ */ new Set([
79
+ "provider",
80
+ "model",
81
+ "fallbackModels",
82
+ // Kept in sync with core's IN_PROJECT_ALLOWED_KEYS (config-loader.ts): these
83
+ // model-routing prefs are explicitly safe to READ from a per-project config,
84
+ // so the writer must not strip them — otherwise a scope=project /fallback
85
+ // profile/fav write (or a TUI full-config write under project scope) would be
86
+ // silently dropped while the loader would happily accept them on next boot.
87
+ "fallbackProfiles",
88
+ "favoriteModels",
89
+ "favoriteModelsOnly",
90
+ "modelAvailabilitySchedule",
91
+ "fallbackAuto",
92
+ "models",
93
+ "modelMatrix",
94
+ "maxConcurrent",
95
+ "autonomy",
96
+ "hints",
97
+ "nextPrediction",
98
+ "debugStream",
99
+ "configScope",
100
+ "yolo",
101
+ "features",
102
+ "context",
103
+ "log",
104
+ "session",
105
+ "indexing",
106
+ "tools",
107
+ "launch",
108
+ "circuitBreaker",
109
+ "adaptiveConcurrency",
110
+ "modelRuntime"
111
+ ]);
112
+ function filterSafeForProject(cfg) {
113
+ const out = {};
114
+ for (const [key, value] of Object.entries(cfg)) {
115
+ if (PROJECT_SAFE_FIELDS.has(key)) {
116
+ out[key] = value;
117
+ }
118
+ }
119
+ return out;
120
+ }
121
+ async function persistAutonomySetting(deps, mutator) {
122
+ const targetPath = resolvePersistPath(deps);
123
+ await ensureProjectDir(targetPath);
124
+ let raw;
125
+ let fileExists = true;
126
+ try {
127
+ raw = await fs.readFile(targetPath, "utf8");
128
+ } catch (err) {
129
+ if (err.code !== "ENOENT") {
130
+ throw new FsError({
131
+ message: `Could not read ${targetPath}`,
132
+ code: ERROR_CODES.FS_READ_FAILED,
133
+ path: targetPath,
134
+ cause: err
135
+ });
136
+ }
137
+ fileExists = false;
138
+ raw = "{}";
139
+ }
140
+ let parsed;
141
+ try {
142
+ parsed = JSON.parse(raw);
143
+ } catch (err) {
144
+ if (fileExists) {
145
+ throw new ConfigError({
146
+ message: `Config at ${targetPath} is not valid JSON`,
147
+ code: ERROR_CODES.CONFIG_PARSE_FAILED,
148
+ context: { path: targetPath },
149
+ cause: err
150
+ });
151
+ }
152
+ parsed = {};
153
+ }
154
+ const decrypted = decryptConfigSecrets(parsed, deps.vault);
155
+ const autonomy = decrypted.autonomy ?? {};
156
+ mutator(
157
+ autonomy
158
+ );
159
+ decrypted.autonomy = autonomy;
160
+ const actualTarget = resolveActualTarget(deps, decrypted, targetPath);
161
+ if (actualTarget !== targetPath) {
162
+ await ensureProjectDir(actualTarget);
163
+ }
164
+ const effectiveConfig = actualTarget !== targetPath ? await mergeWithDestinationIfExists(actualTarget, decrypted, deps.vault) : decrypted;
165
+ const toWrite = isProfileOrGlobalTarget(actualTarget, deps) ? effectiveConfig : filterSafeForProject(effectiveConfig);
166
+ const encrypted = encryptConfigSecrets(toWrite, deps.vault);
167
+ await atomicWrite(actualTarget, JSON.stringify(encrypted, null, 2), { mode: 384 });
168
+ deps.configStore.update({
169
+ autonomy: decrypted.autonomy
170
+ });
171
+ }
172
+ async function persistConfigSetting(deps, mutator) {
173
+ const targetPath = resolvePersistPath(deps);
174
+ await ensureProjectDir(targetPath);
175
+ let raw;
176
+ let fileExists = true;
177
+ try {
178
+ raw = await fs.readFile(targetPath, "utf8");
179
+ } catch (err) {
180
+ if (err.code !== "ENOENT") {
181
+ throw new FsError({
182
+ message: `Could not read ${targetPath}`,
183
+ code: ERROR_CODES.FS_READ_FAILED,
184
+ path: targetPath,
185
+ cause: err
186
+ });
187
+ }
188
+ fileExists = false;
189
+ raw = "{}";
190
+ }
191
+ let parsed;
192
+ try {
193
+ parsed = JSON.parse(raw);
194
+ } catch (err) {
195
+ if (fileExists) {
196
+ throw new ConfigError({
197
+ message: `Config at ${targetPath} is not valid JSON`,
198
+ code: ERROR_CODES.CONFIG_PARSE_FAILED,
199
+ context: { path: targetPath },
200
+ cause: err
201
+ });
202
+ }
203
+ parsed = {};
204
+ }
205
+ const decrypted = decryptConfigSecrets(parsed, deps.vault);
206
+ mutator(decrypted);
207
+ const actualTarget = resolveActualTarget(deps, decrypted, targetPath);
208
+ if (actualTarget !== targetPath) {
209
+ await ensureProjectDir(actualTarget);
210
+ }
211
+ const effectiveConfig = actualTarget !== targetPath ? await mergeWithDestinationIfExists(actualTarget, decrypted, deps.vault) : decrypted;
212
+ const toWrite = isProfileOrGlobalTarget(actualTarget, deps) ? effectiveConfig : filterSafeForProject(effectiveConfig);
213
+ const encrypted = encryptConfigSecrets(toWrite, deps.vault);
214
+ await atomicWrite(actualTarget, JSON.stringify(encrypted, null, 2), { mode: 384 });
215
+ deps.configStore.update(decrypted);
216
+ }
217
+ async function persistTelegramConfig(deps, mutator) {
218
+ const targetPath = deps.profileConfigPath;
219
+ let raw;
220
+ let fileExists = true;
221
+ try {
222
+ raw = await fs.readFile(targetPath, "utf8");
223
+ } catch (err) {
224
+ if (err.code !== "ENOENT") {
225
+ throw new FsError({
226
+ message: `Could not read ${targetPath}: ${err.message}`,
227
+ code: "FS_READ_FAILED",
228
+ path: targetPath,
229
+ context: { operation: "readGlobalConfig", phase: "read" },
230
+ cause: err
231
+ });
232
+ }
233
+ fileExists = false;
234
+ raw = "{}";
235
+ }
236
+ let parsed;
237
+ try {
238
+ parsed = JSON.parse(raw);
239
+ } catch (err) {
240
+ if (fileExists) {
241
+ throw new ConfigError({
242
+ message: `Config at ${targetPath} is not valid JSON: ${err.message}`,
243
+ code: "CONFIG_PARSE_FAILED",
244
+ context: { filePath: targetPath, operation: "readProfileConfig" },
245
+ cause: err
246
+ });
247
+ }
248
+ parsed = {};
249
+ }
250
+ const decrypted = decryptConfigSecrets(parsed, deps.vault);
251
+ const extensions = decrypted.extensions ?? {};
252
+ const telegram = extensions.telegram ?? {};
253
+ mutator(telegram);
254
+ extensions.telegram = telegram;
255
+ decrypted.extensions = extensions;
256
+ const encrypted = encryptConfigSecrets(decrypted, deps.vault);
257
+ await atomicWrite(targetPath, JSON.stringify(encrypted, null, 2), { mode: 384 });
258
+ deps.configStore.update({
259
+ extensions
260
+ });
261
+ }
262
+ function deriveFsAccessPair(input) {
263
+ if (input.allowOutsideProjectRoot !== void 0) {
264
+ const allow = input.allowOutsideProjectRoot;
265
+ return { allowOutsideProjectRoot: allow, restrictToProjectRoot: !allow };
266
+ }
267
+ if (input.restrictFsToRoot !== void 0) {
268
+ const restrict = input.restrictFsToRoot;
269
+ return { allowOutsideProjectRoot: !restrict, restrictToProjectRoot: restrict };
270
+ }
271
+ return void 0;
272
+ }
273
+
274
+ // src/services/suggestion-store.ts
275
+ var sharedSuggestions = [];
276
+ var sharedAutoSuggestions = [];
277
+ function setSuggestions(suggestions) {
278
+ sharedSuggestions = suggestions;
279
+ }
280
+ function setAutoSuggestions(suggestions) {
281
+ sharedAutoSuggestions = suggestions;
282
+ }
283
+ function getSuggestions() {
284
+ return sharedSuggestions;
285
+ }
286
+ function removeSuggestions(indices) {
287
+ if (indices.length === 0) return;
288
+ const set = new Set(indices);
289
+ sharedSuggestions = sharedSuggestions.filter((_, i) => !set.has(i));
290
+ sharedAutoSuggestions = [];
291
+ }
292
+ function clearSuggestions() {
293
+ sharedSuggestions = [];
294
+ sharedAutoSuggestions = [];
295
+ }
296
+
297
+ export {
298
+ MAX_TUI_THINKING_WORD_LENGTH,
299
+ normalizeTuiThinkingWord,
300
+ resolvePersistPath,
301
+ resolveActualTarget,
302
+ filterSafeForProject,
303
+ persistAutonomySetting,
304
+ persistConfigSetting,
305
+ persistTelegramConfig,
306
+ deriveFsAccessPair,
307
+ setSuggestions,
308
+ setAutoSuggestions,
309
+ getSuggestions,
310
+ removeSuggestions,
311
+ clearSuggestions
312
+ };
313
+ //# sourceMappingURL=chunk-Z7YGASQP.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../src/tui-thinking-word.ts", "../src/settings-menu.ts", "../src/services/suggestion-store.ts"],
4
+ "sourcesContent": ["export const DEFAULT_TUI_THINKING_WORD = 'thinking';\nexport const MAX_TUI_THINKING_WORD_LENGTH = 16;\n\n/** Normalize autonomy.thinkingWord to a single short word for the TUI statusline. */\nexport function normalizeTuiThinkingWord(value: unknown): string {\n if (typeof value !== 'string') return DEFAULT_TUI_THINKING_WORD;\n const word = value.trim();\n if (word.length === 0 || word.length > MAX_TUI_THINKING_WORD_LENGTH) {\n return DEFAULT_TUI_THINKING_WORD;\n }\n if (!/^[\\p{L}\\p{N}_-]+$/u.test(word)) return DEFAULT_TUI_THINKING_WORD;\n return word;\n}\n", "import * as fs from 'node:fs/promises';\nimport * as path from 'node:path';\nimport { atomicWrite, deepMerge } from '@wrongstack/core/utils';\nimport { ConfigError, ERROR_CODES, FsError, type SecretVault } from '@wrongstack/core/types';\nimport type { ConfigStore } from '@wrongstack/core/types';\nimport { decryptConfigSecrets, encryptConfigSecrets } from '@wrongstack/core/security';\n\n/** Configuration and storage dependencies needed to persist a setting.\n * This is safe to call from non-interactive surfaces such as the TUI,\n * headless runs, and the arg-driven `/settings` slash command. */\nexport interface PersistSettingDeps {\n configStore: ConfigStore;\n /** Path to the active profile config (~/.wrongstack/profiles/<name>/config.json). */\n profileConfigPath: string;\n /** Per-project config path (<project>/.wrongstack/config.json).\n * Used when configScope === 'project'. Lives inside the project\n * root so it can be gitignored or team-shared. */\n inProjectConfigPath?: string | undefined;\n vault: SecretVault;\n /** Force writes to the active profile config even when configScope is project. */\n forceGlobal?: boolean | undefined;\n /**\n * Optional resolver that recomputes the profile config path for a given\n * profile name. When set, {@link resolveActualTarget} uses this to\n * re-resolve the target path when `decrypted.activeProfile` differs from\n * the one used to compute `profileConfigPath`. This prevents the write\n * from landing in the wrong profile when the mutator changes activeProfile.\n */\n resolveProfilePath?: ((profileName: string) => string) | undefined;\n}\n\nexport function resolvePersistPath(deps: PersistSettingDeps): string {\n if (deps.forceGlobal) return deps.profileConfigPath;\n const scope = (deps.configStore.get() as { configScope?: string | undefined }).configScope;\n if (scope === 'project' && deps.inProjectConfigPath) {\n return deps.inProjectConfigPath;\n }\n // Default user scope always means the active profile, never the root bootstrap.\n return deps.profileConfigPath;\n}\n\n/**\n * Re-resolve the target path after a mutator may have changed configScope.\n * Handles the two settings targets: project config or active profile config.\n */\nexport function resolveActualTarget(\n deps: PersistSettingDeps,\n decrypted: Record<string, unknown>,\n fallbackPath: string,\n): string {\n if (deps.forceGlobal) return deps.profileConfigPath;\n const newScope = decrypted.configScope as string | undefined;\n // Recompute profile path when activeProfile changed in the mutation block.\n const newProfileName = decrypted.activeProfile as string | undefined;\n const effectiveProfilePath =\n newProfileName && deps.resolveProfilePath\n ? deps.resolveProfilePath(newProfileName)\n : deps.profileConfigPath;\n if (newScope === 'project' && deps.inProjectConfigPath) {\n return deps.inProjectConfigPath;\n }\n if (newScope === 'global') {\n return effectiveProfilePath;\n }\n return fallbackPath;\n}\n\n/**\n * Returns true when the target path is the trusted active-profile config, so\n * secrets are NOT stripped before writing.\n * Returns false for project-scoped paths where credentials must be filtered.\n */\nfunction isProfileOrGlobalTarget(actualTarget: string, deps: PersistSettingDeps): boolean {\n return actualTarget === deps.profileConfigPath;\n}\n\nasync function ensureProjectDir(filePath: string): Promise<void> {\n const dir = path.dirname(filePath);\n try {\n await fs.mkdir(dir, { recursive: true });\n } catch {\n // Directory already exists or is inaccessible \u2014 the write will surface the real error.\n }\n}\n\n/**\n * When configScope changed mid-save, the write target differs from the file\n * that was read. Read the *destination* file, decrypt it, and deep-merge the\n * mutated `source` on top (prefer-patch so the user's explicit changes win).\n * This prevents a sparse source (e.g. project config without credentials)\n * from clobbering credential-bearing fields in the destination (e.g. profile\n * config with apiKey / providers / mcpServers).\n *\n * Returns `source` unchanged when destination does not exist yet.\n */\nasync function mergeWithDestinationIfExists(\n destPath: string,\n source: Record<string, unknown>,\n vault: SecretVault,\n): Promise<Record<string, unknown>> {\n let destRaw: string;\n try {\n destRaw = await fs.readFile(destPath, 'utf8');\n } catch (err) {\n // Only swallow ENOENT (destination doesn't exist yet).\n // All other errors (EACCES, EIO, etc.) propagate as-is.\n if ((err as NodeJS.ErrnoException).code === 'ENOENT') {\n return source;\n }\n throw err;\n }\n let destParsed: Record<string, unknown>;\n try {\n destParsed = JSON.parse(destRaw) as Record<string, unknown>;\n } catch (err) {\n // Corrupt destination \u2014 don't merge, just write our content.\n process.stderr.write(JSON.stringify({\n level: 'warn',\n event: 'settings_menu_merge_skipped',\n message: `Skipping merge into corrupt destination file: ${destPath}`,\n timestamp: new Date().toISOString(),\n }) + '\\n');\n void err;\n return source;\n }\n const destDecrypted = decryptConfigSecrets(destParsed, vault) as Record<string, unknown>;\n return deepMerge(destDecrypted, source) as Record<string, unknown>;\n}\n\n/**\n * Fields that are safe to persist in a per-project `.wrongstack/config.json`.\n * Credential-bearing fields (apiKey, providers, sync) MUST NOT appear here \u2014\n * they stay in the active profile config only. The active profile always gets the\n * full unfiltered object.\n *\n * When adding a field here, ask: \"Would I commit this to a shared repo?\"\n * If the answer is no, it doesn't belong on this list.\n */\nconst PROJECT_SAFE_FIELDS = new Set([\n 'provider',\n 'model',\n 'fallbackModels',\n // Kept in sync with core's IN_PROJECT_ALLOWED_KEYS (config-loader.ts): these\n // model-routing prefs are explicitly safe to READ from a per-project config,\n // so the writer must not strip them \u2014 otherwise a scope=project /fallback\n // profile/fav write (or a TUI full-config write under project scope) would be\n // silently dropped while the loader would happily accept them on next boot.\n 'fallbackProfiles',\n 'favoriteModels',\n 'favoriteModelsOnly',\n 'modelAvailabilitySchedule',\n 'fallbackAuto',\n 'models',\n 'modelMatrix',\n 'maxConcurrent',\n 'autonomy',\n 'hints',\n 'nextPrediction',\n 'debugStream',\n 'configScope',\n 'yolo',\n 'features',\n 'context',\n 'log',\n 'session',\n 'indexing',\n 'tools',\n 'launch',\n 'circuitBreaker',\n 'adaptiveConcurrency',\n 'modelRuntime',\n]);\n\n/**\n * Strip credential-bearing and machine-specific fields from a config object\n * so it is safe to write into a per-project `.wrongstack/config.json` file.\n * Returns a new object \u2014 the original is not mutated.\n */\nexport function filterSafeForProject(cfg: Record<string, unknown>): Record<string, unknown> {\n const out: Record<string, unknown> = {};\n for (const [key, value] of Object.entries(cfg)) {\n if (PROJECT_SAFE_FIELDS.has(key)) {\n out[key] = value;\n }\n }\n return out;\n}\n\n/**\n * Read the config file, apply `mutator` to its `autonomy` block, and write it\n * back atomically (then mirror into the in-memory config store). Pure I/O \u2014 no\n * terminal interaction \u2014 so it works identically under the plain REPL and the\n * Ink TUI.\n */\nexport async function persistAutonomySetting(\n deps: PersistSettingDeps,\n mutator: (autonomy: {\n autoProceedDelayMs?: number | undefined;\n defaultMode?: string | undefined;\n enhance?: boolean | undefined;\n enhanceDelayMs?: number | undefined;\n enhanceLanguage?: string | undefined;\n }) => void,\n): Promise<void> {\n const targetPath = resolvePersistPath(deps);\n await ensureProjectDir(targetPath);\n\n let raw: string;\n let fileExists = true;\n try {\n raw = await fs.readFile(targetPath, 'utf8');\n } catch (err) {\n if ((err as NodeJS.ErrnoException).code !== 'ENOENT') {\n throw new FsError({\n message: `Could not read ${targetPath}`,\n code: ERROR_CODES.FS_READ_FAILED,\n path: targetPath,\n cause: err,\n });\n }\n fileExists = false;\n raw = '{}';\n }\n\n let parsed: Record<string, unknown>;\n try {\n parsed = JSON.parse(raw) as Record<string, unknown>;\n } catch (err) {\n if (fileExists) {\n throw new ConfigError({\n message: `Config at ${targetPath} is not valid JSON`,\n code: ERROR_CODES.CONFIG_PARSE_FAILED,\n context: { path: targetPath },\n cause: err,\n });\n }\n parsed = {};\n }\n\n const decrypted = decryptConfigSecrets(parsed, deps.vault) as Record<string, unknown>;\n const autonomy = (decrypted.autonomy as Record<string, unknown>) ?? {};\n mutator(\n autonomy as { autoProceedDelayMs?: number | undefined; defaultMode?: string | undefined },\n );\n decrypted.autonomy = autonomy;\n\n // Re-resolve path \u2014 the mutator might have changed configScope.\n const actualTarget = resolveActualTarget(deps, decrypted as Record<string, unknown>, targetPath);\n if (actualTarget !== targetPath) {\n await ensureProjectDir(actualTarget);\n }\n\n // When configScope changed mid-save, merge into the destination file's\n // existing content so credential-bearing fields are preserved.\n const effectiveConfig =\n actualTarget !== targetPath\n ? await mergeWithDestinationIfExists(actualTarget, decrypted, deps.vault)\n : decrypted;\n\n // When writing to the project-local config, strip credentials so\n // apiKey / providers / sync never leak into a per-project file.\n const toWrite =\n isProfileOrGlobalTarget(actualTarget, deps) ? effectiveConfig : filterSafeForProject(effectiveConfig);\n\n const encrypted = encryptConfigSecrets(toWrite, deps.vault);\n await atomicWrite(actualTarget, JSON.stringify(encrypted, null, 2), { mode: 0o600 });\n\n // Also update the in-memory config store so changes are immediately visible\n deps.configStore.update({\n autonomy: decrypted.autonomy as Parameters<typeof deps.configStore.update>[0]['autonomy'],\n });\n}\n\n/**\n * Read the config file, apply `mutator` to the full decrypted object, and\n * write it back atomically. This is used for small top-level settings that do\n * not warrant a dedicated helper.\n */\nexport async function persistConfigSetting(\n deps: PersistSettingDeps,\n mutator: (config: Record<string, unknown>) => void,\n): Promise<void> {\n const targetPath = resolvePersistPath(deps);\n await ensureProjectDir(targetPath);\n\n let raw: string;\n let fileExists = true;\n try {\n raw = await fs.readFile(targetPath, 'utf8');\n } catch (err) {\n if ((err as NodeJS.ErrnoException).code !== 'ENOENT') {\n throw new FsError({\n message: `Could not read ${targetPath}`,\n code: ERROR_CODES.FS_READ_FAILED,\n path: targetPath,\n cause: err,\n });\n }\n fileExists = false;\n raw = '{}';\n }\n\n let parsed: Record<string, unknown>;\n try {\n parsed = JSON.parse(raw) as Record<string, unknown>;\n } catch (err) {\n if (fileExists) {\n throw new ConfigError({\n message: `Config at ${targetPath} is not valid JSON`,\n code: ERROR_CODES.CONFIG_PARSE_FAILED,\n context: { path: targetPath },\n cause: err,\n });\n }\n parsed = {};\n }\n\n const decrypted = decryptConfigSecrets(parsed, deps.vault) as Record<string, unknown>;\n mutator(decrypted);\n\n // If the mutator changed configScope, re-resolve the target path.\n // Without this, a scope change from 'project' \u2192 'global' would write\n // to the old project path instead of the new global one.\n const actualTarget = resolveActualTarget(deps, decrypted, targetPath);\n\n // Ensure the directory exists if we're writing to a new path\n if (actualTarget !== targetPath) {\n await ensureProjectDir(actualTarget);\n }\n\n // When configScope changed mid-save, merge into the destination file's\n // existing content so credential-bearing fields are preserved.\n const effectiveConfig =\n actualTarget !== targetPath\n ? await mergeWithDestinationIfExists(actualTarget, decrypted, deps.vault)\n : decrypted;\n\n // When writing to the project-local config, strip credentials so\n // apiKey / providers / sync never leak into a per-project file.\n const toWrite =\n isProfileOrGlobalTarget(actualTarget, deps) ? effectiveConfig : filterSafeForProject(effectiveConfig);\n\n const encrypted = encryptConfigSecrets(toWrite, deps.vault);\n await atomicWrite(actualTarget, JSON.stringify(encrypted, null, 2), { mode: 0o600 });\n deps.configStore.update(decrypted as Parameters<typeof deps.configStore.update>[0]);\n}\n\n/**\n * Persist Telegram plugin config to `extensions.telegram` in the active profile config\n * file. Mirrors `persistAutonomySetting` \u2014 reads the config, applies the\n * mutator, encrypts secrets, writes atomically, then updates ConfigStore.\n */\nexport async function persistTelegramConfig(\n deps: PersistSettingDeps,\n mutator: (telegram: Record<string, unknown>) => void,\n): Promise<void> {\n const targetPath = deps.profileConfigPath;\n let raw: string;\n let fileExists = true;\n try {\n raw = await fs.readFile(targetPath, 'utf8');\n } catch (err) {\n if ((err as NodeJS.ErrnoException).code !== 'ENOENT') {\n throw new FsError({\n message: `Could not read ${targetPath}: ${(err as Error).message}`,\n code: 'FS_READ_FAILED',\n path: targetPath,\n context: { operation: 'readGlobalConfig', phase: 'read' },\n cause: err,\n });\n }\n fileExists = false;\n raw = '{}';\n }\n\n let parsed: Record<string, unknown>;\n try {\n parsed = JSON.parse(raw) as Record<string, unknown>;\n } catch (err) {\n if (fileExists) {\n throw new ConfigError({\n message: `Config at ${targetPath} is not valid JSON: ${(err as Error).message}`,\n code: 'CONFIG_PARSE_FAILED',\n context: { filePath: targetPath, operation: 'readProfileConfig' },\n cause: err,\n });\n }\n parsed = {};\n }\n\n const decrypted = decryptConfigSecrets(parsed, deps.vault) as Record<string, unknown>;\n const extensions = (decrypted.extensions as Record<string, Record<string, unknown>>) ?? {};\n const telegram = extensions.telegram ?? {};\n mutator(telegram);\n extensions.telegram = telegram;\n decrypted.extensions = extensions;\n\n const encrypted = encryptConfigSecrets(decrypted, deps.vault);\n await atomicWrite(targetPath, JSON.stringify(encrypted, null, 2), { mode: 0o600 });\n\n // Also update the in-memory config store so changes are immediately visible\n deps.configStore.update({\n extensions: extensions as NonNullable<\n Parameters<typeof deps.configStore.update>[0]['extensions']\n >,\n });\n}\n\n/**\n * Derive the filesystem-access pair (`features.allowOutsideProjectRoot` and\n * `tools.restrictToProjectRoot`) from a save input. The two are inverses\n * of each other and the codebase intentionally keeps both in sync for\n * backward compatibility with older readers that only know about\n * `tools.restrictToProjectRoot`.\n *\n * Single source of truth: `allowOutsideProjectRoot`. If the caller only\n * sets `restrictFsToRoot`, it is converted to its inverse. If both are\n * set (which the picker should not do, but defensive code paths may),\n * `allowOutsideProjectRoot` wins. Returns `undefined` if neither is set,\n * so the caller can skip the write.\n *\n * The input is duck-typed (only the two relevant fields are read) so any\n * caller can pass a partial shape: the TUI's full `LiveSettingsInput`,\n * a slash-command's `{ restrictFsToRoot: boolean }`, or any future\n * save-handler that only carries these two knobs.\n */\nexport function deriveFsAccessPair(input: {\n allowOutsideProjectRoot?: boolean | undefined;\n restrictFsToRoot?: boolean | undefined;\n}): { allowOutsideProjectRoot: boolean; restrictToProjectRoot: boolean } | undefined {\n if (input.allowOutsideProjectRoot !== undefined) {\n const allow = input.allowOutsideProjectRoot;\n return { allowOutsideProjectRoot: allow, restrictToProjectRoot: !allow };\n }\n if (input.restrictFsToRoot !== undefined) {\n const restrict = input.restrictFsToRoot;\n return { allowOutsideProjectRoot: !restrict, restrictToProjectRoot: restrict };\n }\n return undefined;\n}\n", "/**\n * Shared suggestion state used by command and runtime surfaces.\n *\n * Previously, suggestions were stored in a closure variable (`currentSuggestions`)\n * inside cli-main.ts, accessed via the `onSuggestions` callback on\n * `SlashCommandContext`. This closure-based approach works correctly in the REPL\n * but can fail in the TUI when the callback goes through multiple indirections\n * (SlashCommandRegistry \u2192 SlashCommand.run \u2192 closed-over opts).\n *\n * By using a module-level store, both /suggest (writer) and /next (reader)\n * access the same array directly, bypassing the callback indirection entirely.\n * The CLI's `onSuggestions` callback now reads/writes this shared store to\n * maintain backward compatibility with the REPL autonomy loop's\n * `getSuggestions`/`onSuggestionsParsed` flow.\n *\n * Auto suggestions (items with auto=\"true\" attribute) are stored separately\n * for YOLO+auto autonomy mode.\n */\n\nlet sharedSuggestions: string[] = [];\nlet sharedAutoSuggestions: string[] = [];\n\n/** Store suggestions (called by /suggest and onSuggestionsParsed). */\nexport function setSuggestions(suggestions: string[]): void {\n sharedSuggestions = suggestions;\n}\n\n/** Store auto suggestions (items with auto=\"true\" attribute). Called by onAutoSuggestionsParsed. */\nexport function setAutoSuggestions(suggestions: string[]): void {\n sharedAutoSuggestions = suggestions;\n}\n\n/** Retrieve current suggestions (called by /next selection and getSuggestions). */\nexport function getSuggestions(): string[] {\n return sharedSuggestions;\n}\n\n/** Retrieve current auto suggestions (called by YOLO+auto autonomy). */\nexport function getAutoSuggestions(): string[] {\n return sharedAutoSuggestions;\n}\n\n/**\n * Remove suggestions at the given 0-based indices.\n * Called by /next selection so selected prompts cannot be re-selected.\n * Also clears auto-suggestions since an explicit user selection should\n * override any auto-submit queue.\n */\nexport function removeSuggestions(indices: number[]): void {\n if (indices.length === 0) return;\n const set = new Set(indices);\n sharedSuggestions = sharedSuggestions.filter((_, i) => !set.has(i));\n sharedAutoSuggestions = [];\n}\n\n/** Clear suggestions (called by /next clear). */\nexport function clearSuggestions(): void {\n sharedSuggestions = [];\n sharedAutoSuggestions = [];\n}\n"],
5
+ "mappings": "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",
6
+ "names": []
7
+ }
@@ -0,0 +1,2 @@
1
+ export declare function main(argv: string[]): Promise<number>;
2
+ //# sourceMappingURL=cli-entry-main.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli-entry-main.d.ts","sourceRoot":"","sources":["../src/cli-entry-main.ts"],"names":[],"mappings":"AA0BA,wBAAsB,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC,CAQ1D"}
@@ -31,9 +31,9 @@ interface BrokenPipeHandlerOptions {
31
31
  *
32
32
  * A failed `write()` is reported asynchronously through the destination
33
33
  * stream's `error` event, so wrapping individual writes in `try/catch` cannot
34
- * prevent Node's unhandled-event crash. Keep this guard at the process entry
35
- * boundary and rethrow every non-EPIPE error so genuine stream failures remain
36
- * visible.
34
+ * prevent Node's unhandled-event crash. Windows can report the same closed
35
+ * consumer as ECONNRESET rather than EPIPE, so handle both at the process entry
36
+ * boundary and rethrow other stream failures so genuine faults remain visible.
37
37
  */
38
38
  export declare function installBrokenPipeHandlers(options?: BrokenPipeHandlerOptions): () => void;
39
39
  export declare function runAsMain(mainFn: (argv: string[]) => Promise<number>): void;
@@ -1 +1 @@
1
- {"version":3,"file":"cli-entry-point.d.ts","sourceRoot":"","sources":["../src/cli-entry-point.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAwDH,UAAU,gBAAgB;IACxB,EAAE,CAAC,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,IAAI,GAAG,OAAO,CAAC;IAChE,GAAG,CAAC,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,IAAI,GAAG,OAAO,CAAC;CAClE;AAED,UAAU,wBAAwB;IAChC,OAAO,CAAC,EAAE,SAAS,gBAAgB,EAAE,GAAG,SAAS,CAAC;IAClD,IAAI,CAAC,EAAE,CAAC,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC,GAAG,SAAS,CAAC;CAC7C;AAMD;;;;;;;;GAQG;AACH,wBAAgB,yBAAyB,CACvC,OAAO,GAAE,wBAA6B,GACrC,MAAM,IAAI,CAgBZ;AAED,wBAAgB,SAAS,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,OAAO,CAAC,MAAM,CAAC,GAAG,IAAI,CAqB3E"}
1
+ {"version":3,"file":"cli-entry-point.d.ts","sourceRoot":"","sources":["../src/cli-entry-point.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAmDH,UAAU,gBAAgB;IACxB,EAAE,CAAC,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,IAAI,GAAG,OAAO,CAAC;IAChE,GAAG,CAAC,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,IAAI,GAAG,OAAO,CAAC;CAClE;AAED,UAAU,wBAAwB;IAChC,OAAO,CAAC,EAAE,SAAS,gBAAgB,EAAE,GAAG,SAAS,CAAC;IAClD,IAAI,CAAC,EAAE,CAAC,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC,GAAG,SAAS,CAAC;CAC7C;AAOD;;;;;;;;GAQG;AACH,wBAAgB,yBAAyB,CAAC,OAAO,GAAE,wBAA6B,GAAG,MAAM,IAAI,CAgB5F;AAED,wBAAgB,SAAS,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,OAAO,CAAC,MAAM,CAAC,GAAG,IAAI,CAqB3E"}