@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,409 @@
1
+ import {
2
+ getHistoryEntry,
3
+ listHistory,
4
+ restoreFromHistory,
5
+ restoreLast
6
+ } from "./chunk-YWUPHRGB.js";
7
+ import {
8
+ activeProfileConfigPath
9
+ } from "./chunk-DPJZQCVP.js";
10
+ import "./chunk-7OCVIDC7.js";
11
+
12
+ // src/subcommands/handlers/sessions-config.ts
13
+ import { color as color2, expectDefined } from "@wrongstack/core/utils";
14
+
15
+ // src/subcommands/handlers/helpers.ts
16
+ import { isSecretField } from "@wrongstack/core/security";
17
+ function redactKeys(obj) {
18
+ if (!obj || typeof obj !== "object") return obj;
19
+ if (Array.isArray(obj)) return obj.map(redactKeys);
20
+ const out = {};
21
+ for (const [k, v] of Object.entries(obj)) {
22
+ if (isSecretField(k) && typeof v === "string" && v.length > 0) out[k] = "[REDACTED]";
23
+ else out[k] = redactKeys(v);
24
+ }
25
+ return out;
26
+ }
27
+
28
+ // src/subcommands/handlers/sessions-fleet.ts
29
+ import * as fsp from "node:fs/promises";
30
+ import * as path from "node:path";
31
+ import { color } from "@wrongstack/core/utils";
32
+ var sessionsFleetCmd = async (args, deps) => {
33
+ const runId = args.find((a) => !a.startsWith("-"));
34
+ if (runId) {
35
+ return showFleetRun(runId, deps);
36
+ }
37
+ return listFleetRuns(deps);
38
+ };
39
+ async function listFleetRuns(deps) {
40
+ let entries = [];
41
+ try {
42
+ entries = await fsp.readdir(deps.paths.projectSessions);
43
+ } catch {
44
+ deps.renderer.writeError(`Cannot read projectSessions: ${deps.paths.projectSessions}
45
+ `);
46
+ return 1;
47
+ }
48
+ const runs = [];
49
+ const perEntry = await Promise.all(
50
+ entries.map(async (id) => {
51
+ const runDir = path.join(deps.paths.projectSessions, id);
52
+ try {
53
+ const stat2 = await fsp.stat(runDir);
54
+ if (!stat2.isDirectory()) return null;
55
+ } catch {
56
+ return null;
57
+ }
58
+ const [manifestResult, checkpointResult, subagentFilesResult] = await Promise.all([
59
+ fsp.access(path.join(runDir, "fleet.json")).then(
60
+ () => true,
61
+ () => false
62
+ ),
63
+ fsp.access(path.join(runDir, "checkpoint.json")).then(
64
+ () => true,
65
+ () => false
66
+ ),
67
+ fsp.readdir(path.join(runDir, "subagents")).then(
68
+ (files) => files.filter((f) => f.endsWith(".jsonl")).length,
69
+ () => 0
70
+ )
71
+ ]);
72
+ return {
73
+ id,
74
+ manifest: manifestResult,
75
+ checkpoint: checkpointResult,
76
+ subagents: subagentFilesResult
77
+ };
78
+ })
79
+ );
80
+ for (const r of perEntry) if (r) runs.push(r);
81
+ if (runs.length === 0) {
82
+ deps.renderer.write("No fleet runs found.\n");
83
+ return 0;
84
+ }
85
+ deps.renderer.write(color.bold("\nFleet Runs\n") + "\n");
86
+ for (const r of runs.sort((a, b) => b.id.localeCompare(a.id))) {
87
+ const checkpointFlag = r.checkpoint ? color.green("\u2713") : color.dim("\u25CB");
88
+ const manifestFlag = r.manifest ? color.green("\u2713") : color.dim("\u25CB");
89
+ const subagentInfo = r.subagents > 0 ? color.dim(` ${r.subagents} subagent jsonl`) : "";
90
+ deps.renderer.write(
91
+ ` ${color.bold(r.id)} ${checkpointFlag} checkpoint ${manifestFlag} manifest${subagentInfo}
92
+ `
93
+ );
94
+ }
95
+ deps.renderer.write(`
96
+ ${color.dim("Run `wrongstack sessions fleet <runId>` for details.")}
97
+ `);
98
+ return 0;
99
+ }
100
+ async function showFleetRun(runId, deps) {
101
+ const runDir = path.join(deps.paths.projectSessions, runId);
102
+ let stat2;
103
+ try {
104
+ stat2 = await fsp.stat(runDir);
105
+ } catch {
106
+ deps.renderer.writeError(`Fleet run not found: ${runId}
107
+ `);
108
+ return 1;
109
+ }
110
+ if (!stat2.isDirectory()) {
111
+ deps.renderer.writeError(`Not a directory: ${runId}
112
+ `);
113
+ return 1;
114
+ }
115
+ deps.renderer.write(color.bold(`
116
+ Fleet Run: ${runId}
117
+ `) + "\n");
118
+ const manifestPath = path.join(runDir, "fleet.json");
119
+ let manifestData = null;
120
+ try {
121
+ manifestData = await fsp.readFile(manifestPath, "utf8");
122
+ const manifest = JSON.parse(manifestData);
123
+ const subagents = manifest.subagents ?? [];
124
+ const tasks = manifest.tasks ?? [];
125
+ const completed = tasks.filter(
126
+ (t) => t.status === "completed" || t.status === "failed" || t.status === "timeout" || t.status === "stopped"
127
+ );
128
+ deps.renderer.write(
129
+ ` ${color.green("\u2713")} fleet.json \u2014 ${subagents.length} subagent(s), ${completed.length}/${tasks.length} tasks done
130
+ `
131
+ );
132
+ } catch {
133
+ deps.renderer.write(` ${color.dim("\u25CB")} fleet.json \u2014 not found
134
+ `);
135
+ }
136
+ const checkpointPath = path.join(runDir, "checkpoint.json");
137
+ let checkpointData = null;
138
+ try {
139
+ checkpointData = await fsp.readFile(checkpointPath, "utf8");
140
+ const snap = JSON.parse(checkpointData);
141
+ const lockPath = `${checkpointPath}.lock`;
142
+ let lockStatus = color.dim("\u25CB no lock");
143
+ try {
144
+ const lockRaw = await fsp.readFile(lockPath, "utf8");
145
+ const lock = JSON.parse(lockRaw);
146
+ lockStatus = `${color.yellow("\u25B8")} lock held by pid ${lock.pid} on ${lock.hostname} (started ${lock.startedAt})`;
147
+ } catch {
148
+ lockStatus = color.green("\u2713 no lock (safe to resume)");
149
+ }
150
+ deps.renderer.write(
151
+ ` ${color.green("\u2713")} checkpoint.json \u2014 updated ${snap.updatedAt}, ${snap.spawnCount} spawns, ${snap.tasks?.length ?? 0} tasks tracked
152
+ ${lockStatus}
153
+ `
154
+ );
155
+ } catch {
156
+ deps.renderer.write(` ${color.dim("\u25CB")} checkpoint.json \u2014 not found
157
+ `);
158
+ }
159
+ if (checkpointData) {
160
+ try {
161
+ const snap = JSON.parse(checkpointData);
162
+ if (snap.subagents?.length) {
163
+ deps.renderer.write("\n Subagents:\n");
164
+ for (const s of snap.subagents) {
165
+ deps.renderer.write(
166
+ ` ${color.cyan(s.id)} ${s.name ? `${s.name} ` : ""}${s.provider ? `(${s.provider}/${s.model})` : ""} spawned ${s.spawnedAt}
167
+ `
168
+ );
169
+ }
170
+ }
171
+ if (snap.tasks?.length) {
172
+ deps.renderer.write("\n Tasks:\n");
173
+ for (const t of snap.tasks) {
174
+ deps.renderer.write(
175
+ ` ${color.dim(t.taskId)} ${t.status} ${t.description ? t.description.slice(0, 50) : "(no description)"}
176
+ `
177
+ );
178
+ }
179
+ }
180
+ } catch {
181
+ }
182
+ }
183
+ const subagentsDir = path.join(runDir, "subagents");
184
+ let subagentFiles = [];
185
+ try {
186
+ subagentFiles = await fsp.readdir(subagentsDir);
187
+ subagentFiles = subagentFiles.filter((f) => f.endsWith(".jsonl"));
188
+ } catch {
189
+ }
190
+ if (subagentFiles.length > 0) {
191
+ deps.renderer.write(`
192
+ Subagent transcripts (${subagentFiles.length}):
193
+ `);
194
+ const sortedFiles = subagentFiles.sort();
195
+ const sizes = await Promise.all(
196
+ sortedFiles.map(async (f) => {
197
+ const filePath = path.join(subagentsDir, f);
198
+ try {
199
+ const s = await fsp.stat(filePath);
200
+ return s.size;
201
+ } catch {
202
+ return 0;
203
+ }
204
+ })
205
+ );
206
+ for (let i = 0; i < sortedFiles.length; i++) {
207
+ const size = sizes[i] ?? 0;
208
+ const sizeStr = size > 1024 * 1024 ? `${(size / 1024 / 1024).toFixed(1)}MB` : `${(size / 1024).toFixed(0)}KB`;
209
+ deps.renderer.write(` ${color.dim(sortedFiles[i] ?? "")} ${color.dim(sizeStr)}
210
+ `);
211
+ }
212
+ } else {
213
+ deps.renderer.write(`
214
+ ${color.dim("\u25CB")} No subagent transcripts
215
+ `);
216
+ }
217
+ const sharedDir = path.join(runDir, "shared");
218
+ try {
219
+ const files = await fsp.readdir(sharedDir);
220
+ deps.renderer.write(`
221
+ Shared scratchpad: ${files.length} file(s)
222
+ `);
223
+ } catch {
224
+ deps.renderer.write(`
225
+ ${color.dim("\u25CB")} No shared scratchpad
226
+ `);
227
+ }
228
+ deps.renderer.write(`
229
+ ${color.dim("Resume: wrongstack --resume " + runId)}
230
+ `);
231
+ return 0;
232
+ }
233
+
234
+ // src/subcommands/handlers/sessions-config.ts
235
+ var sessionsCmd = async (args, deps) => {
236
+ const sub = args[0];
237
+ if (sub === "fleet") {
238
+ return sessionsFleetCmd(args.slice(1), deps);
239
+ }
240
+ if (!deps.sessionStore) {
241
+ deps.renderer.writeError("No session store available.");
242
+ return 1;
243
+ }
244
+ if (sub === "fork") {
245
+ if (!deps.sessionStore.fork) {
246
+ deps.renderer.writeError("This session store does not support forking.\n");
247
+ return 1;
248
+ }
249
+ const forkArgs = args.slice(1);
250
+ const explicitId = forkArgs[0] && !forkArgs[0].startsWith("-") ? forkArgs[0] : void 0;
251
+ const sourceId = explicitId ?? (await deps.sessionStore.list(1))[0]?.id;
252
+ if (!sourceId) {
253
+ deps.renderer.writeError("No source session found to fork.\n");
254
+ return 1;
255
+ }
256
+ const checkpointRaw = extractArg(forkArgs, "--to");
257
+ if (forkArgs.includes("--to") && checkpointRaw === null) {
258
+ deps.renderer.writeError("--to requires a checkpoint index.\n");
259
+ return 1;
260
+ }
261
+ let checkpointPromptIndex;
262
+ if (checkpointRaw !== null) {
263
+ checkpointPromptIndex = Number(checkpointRaw);
264
+ if (!Number.isInteger(checkpointPromptIndex) || checkpointPromptIndex < 0) {
265
+ deps.renderer.writeError("--to must be a non-negative checkpoint index.\n");
266
+ return 1;
267
+ }
268
+ }
269
+ try {
270
+ const forked = await deps.sessionStore.fork(sourceId, { checkpointPromptIndex });
271
+ deps.renderer.write(
272
+ [
273
+ `Forked ${sourceId}${checkpointPromptIndex !== void 0 ? ` at checkpoint ${checkpointPromptIndex}` : " at latest persisted boundary"}.`,
274
+ ` Child: ${forked.id}`,
275
+ ` Checkpoint hash: ${forked.checkpointHash}`,
276
+ " Workspace: shared-current (journal history is isolated; files are not copied)",
277
+ ...forked.workspaceCheckpoint ? [
278
+ ` Workspace checkpoint: ${forked.workspaceCheckpoint.manifestHash}`,
279
+ ` Base HEAD: ${forked.workspaceCheckpoint.baseHead}; paths: ${forked.workspaceCheckpoint.entryCount}; unresolved: ${forked.workspaceCheckpoint.unresolvedCount}`
280
+ ] : [" Workspace checkpoint: unavailable for this boundary"],
281
+ `Resume with: wstack resume ${forked.id}`,
282
+ ""
283
+ ].join("\n")
284
+ );
285
+ return 0;
286
+ } catch (err) {
287
+ deps.renderer.writeError(`Fork failed: ${err instanceof Error ? err.message : String(err)}
288
+ `);
289
+ return 1;
290
+ }
291
+ }
292
+ const list = await deps.sessionStore.list(20);
293
+ if (list.length === 0) {
294
+ deps.renderer.write("No sessions found.\n");
295
+ return 0;
296
+ }
297
+ for (const s of list)
298
+ deps.renderer.write(
299
+ ` ${s.id} ${color2.dim(s.startedAt)} ${color2.dim(`${s.tokenTotal} tok`)} ${s.title}
300
+ `
301
+ );
302
+ return 0;
303
+ };
304
+ var configCmd = async (args, deps) => {
305
+ const sub = args[0];
306
+ if (!sub || sub === "show") {
307
+ deps.renderer.write(JSON.stringify(redactKeys(deps.config), null, 2) + "\n");
308
+ return 0;
309
+ }
310
+ if (sub === "edit") {
311
+ const editor = process.env["EDITOR"] ?? "vi";
312
+ deps.renderer.write(`Run: ${editor} ${activeProfileConfigPath(deps.paths, deps.config)}
313
+ `);
314
+ return 0;
315
+ }
316
+ if (sub === "history") {
317
+ return runHistory(args.slice(1), deps);
318
+ }
319
+ if (sub === "restore") {
320
+ return runRestore(args.slice(1), deps);
321
+ }
322
+ deps.renderer.writeError(`Unknown config subcommand: ${sub}
323
+ `);
324
+ return 1;
325
+ };
326
+ function extractArg(args, key) {
327
+ const idx = args.indexOf(key);
328
+ if (idx !== -1 && args[idx + 1] !== void 0) return expectDefined(args[idx + 1]);
329
+ const eq = key.startsWith("--") ? args.find((a) => a.startsWith(`${key}=`)) : null;
330
+ if (eq) return eq.slice(eq.indexOf("=") + 1);
331
+ return null;
332
+ }
333
+ async function runHistory(args, deps) {
334
+ const idFlag = extractArg(args, "--id");
335
+ if (idFlag) {
336
+ const entry = await getHistoryEntry(idFlag);
337
+ if (!entry) {
338
+ deps.renderer.writeError(`History entry '${idFlag}' not found.
339
+ `);
340
+ return 1;
341
+ }
342
+ deps.renderer.write(
343
+ [
344
+ `ID: ${entry.id}`,
345
+ `Time: ${new Date(entry.timestamp).toLocaleString()}`,
346
+ `Change: ${entry.description}`,
347
+ `Diff: ${entry.diffSummary}`,
348
+ "",
349
+ "Snapshot (secrets masked):",
350
+ JSON.stringify(entry.snapshotMasked, null, 2)
351
+ ].join("\n") + "\n"
352
+ );
353
+ return 0;
354
+ }
355
+ const entries = await listHistory();
356
+ if (entries.length === 0) {
357
+ deps.renderer.write("No config history yet.\n");
358
+ return 0;
359
+ }
360
+ deps.renderer.write(
361
+ [
362
+ color2.bold("Config History"),
363
+ "",
364
+ ...entries.map((e, i) => {
365
+ const ts = new Date(e.timestamp).toLocaleString();
366
+ const desc = e.description.length > 60 ? e.description.slice(0, 60) + "\u2026" : e.description;
367
+ return ` [${i + 1}] ${e.id} ${color2.dim(ts)}
368
+ ${desc}`;
369
+ }),
370
+ "",
371
+ " Run `wrongstack config history --id <id>` for details.",
372
+ " Run `wrongstack config restore <id>` to restore."
373
+ ].join("\n") + "\n"
374
+ );
375
+ return 0;
376
+ }
377
+ async function runRestore(args, deps) {
378
+ const profileConfigPath = activeProfileConfigPath(deps.paths, deps.config);
379
+ const latest = args.includes("--latest") || args.includes("-l");
380
+ const id = extractArg(args, "--id") ?? (args[0] && !args[0]?.startsWith("-") ? args[0] : null);
381
+ if (latest) {
382
+ const result2 = await restoreLast(void 0, profileConfigPath);
383
+ if (!result2.ok) {
384
+ deps.renderer.writeError(`Restore failed: ${result2.error}
385
+ `);
386
+ return 1;
387
+ }
388
+ deps.renderer.write("Restored from config.json.last.\n");
389
+ return 0;
390
+ }
391
+ if (!id) {
392
+ deps.renderer.write("Usage: wrongstack config restore <id> | --latest\n");
393
+ return 1;
394
+ }
395
+ const result = await restoreFromHistory(id, void 0, profileConfigPath);
396
+ if (!result.ok) {
397
+ deps.renderer.writeError(`Restore failed: ${result.error}
398
+ `);
399
+ return 1;
400
+ }
401
+ deps.renderer.write(`Restored to history entry '${id}'. Backup created.
402
+ `);
403
+ return 0;
404
+ }
405
+ export {
406
+ configCmd,
407
+ sessionsCmd
408
+ };
409
+ //# sourceMappingURL=sessions-config-NLCMK3BY.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../src/subcommands/handlers/sessions-config.ts", "../src/subcommands/handlers/helpers.ts", "../src/subcommands/handlers/sessions-fleet.ts"],
4
+ "sourcesContent": ["import { color, expectDefined } from '@wrongstack/core/utils';\nimport {\n getHistoryEntry,\n listHistory,\n restoreFromHistory,\n restoreLast,\n} from '../../config-history.js';\nimport type { SubcommandDeps, SubcommandHandler } from '../index.js';\nimport { redactKeys } from './helpers.js';\nimport { sessionsFleetCmd } from './sessions-fleet.js';\nimport { activeProfileConfigPath } from '../../profile-config-path.js';\nexport const sessionsCmd: SubcommandHandler = async (args, deps) => {\n const sub = args[0];\n // `wrongstack sessions fleet [runId]` \u2014 fleet run inspection\n if (sub === 'fleet') {\n return sessionsFleetCmd(args.slice(1), deps);\n }\n if (!deps.sessionStore) {\n deps.renderer.writeError('No session store available.');\n return 1;\n }\n if (sub === 'fork') {\n if (!deps.sessionStore.fork) {\n deps.renderer.writeError('This session store does not support forking.\\n');\n return 1;\n }\n const forkArgs = args.slice(1);\n const explicitId = forkArgs[0] && !forkArgs[0].startsWith('-') ? forkArgs[0] : undefined;\n const sourceId = explicitId ?? (await deps.sessionStore.list(1))[0]?.id;\n if (!sourceId) {\n deps.renderer.writeError('No source session found to fork.\\n');\n return 1;\n }\n const checkpointRaw = extractArg(forkArgs, '--to');\n if (forkArgs.includes('--to') && checkpointRaw === null) {\n deps.renderer.writeError('--to requires a checkpoint index.\\n');\n return 1;\n }\n let checkpointPromptIndex: number | undefined;\n if (checkpointRaw !== null) {\n checkpointPromptIndex = Number(checkpointRaw);\n if (!Number.isInteger(checkpointPromptIndex) || checkpointPromptIndex < 0) {\n deps.renderer.writeError('--to must be a non-negative checkpoint index.\\n');\n return 1;\n }\n }\n try {\n const forked = await deps.sessionStore.fork(sourceId, { checkpointPromptIndex });\n deps.renderer.write(\n [\n `Forked ${sourceId}${checkpointPromptIndex !== undefined ? ` at checkpoint ${checkpointPromptIndex}` : ' at latest persisted boundary'}.`,\n ` Child: ${forked.id}`,\n ` Checkpoint hash: ${forked.checkpointHash}`,\n ' Workspace: shared-current (journal history is isolated; files are not copied)',\n ...(forked.workspaceCheckpoint\n ? [\n ` Workspace checkpoint: ${forked.workspaceCheckpoint.manifestHash}`,\n ` Base HEAD: ${forked.workspaceCheckpoint.baseHead}; paths: ${forked.workspaceCheckpoint.entryCount}; unresolved: ${forked.workspaceCheckpoint.unresolvedCount}`,\n ]\n : [' Workspace checkpoint: unavailable for this boundary']),\n `Resume with: wstack resume ${forked.id}`,\n '',\n ].join('\\n'),\n );\n return 0;\n } catch (err) {\n deps.renderer.writeError(`Fork failed: ${err instanceof Error ? err.message : String(err)}\\n`);\n return 1;\n }\n }\n const list = await deps.sessionStore.list(20);\n if (list.length === 0) {\n deps.renderer.write('No sessions found.\\n');\n return 0;\n }\n for (const s of list)\n deps.renderer.write(\n ` ${s.id} ${color.dim(s.startedAt)} ${color.dim(`${s.tokenTotal} tok`)} ${s.title}\\n`,\n );\n return 0;\n};\n\nexport const configCmd: SubcommandHandler = async (args, deps) => {\n const sub = args[0];\n if (!sub || sub === 'show') {\n deps.renderer.write(JSON.stringify(redactKeys(deps.config), null, 2) + '\\n');\n return 0;\n }\n if (sub === 'edit') {\n const editor = process.env['EDITOR'] ?? 'vi';\n deps.renderer.write(`Run: ${editor} ${activeProfileConfigPath(deps.paths, deps.config)}\\n`);\n return 0;\n }\n if (sub === 'history') {\n return runHistory(args.slice(1), deps);\n }\n if (sub === 'restore') {\n return runRestore(args.slice(1), deps);\n }\n deps.renderer.writeError(`Unknown config subcommand: ${sub}\\n`);\n return 1;\n};\n\nfunction extractArg(args: string[], key: string): string | null {\n const idx = args.indexOf(key);\n if (idx !== -1 && args[idx + 1] !== undefined) return expectDefined(args[idx + 1]);\n const eq = key.startsWith('--') ? args.find((a) => a.startsWith(`${key}=`)) : null;\n if (eq) return eq.slice(eq.indexOf('=') + 1);\n return null;\n}\n\nasync function runHistory(args: string[], deps: SubcommandDeps): Promise<number> {\n const idFlag = extractArg(args, '--id');\n if (idFlag) {\n const entry = await getHistoryEntry(idFlag);\n if (!entry) {\n deps.renderer.writeError(`History entry '${idFlag}' not found.\\n`);\n return 1;\n }\n deps.renderer.write(\n [\n `ID: ${entry.id}`,\n `Time: ${new Date(entry.timestamp).toLocaleString()}`,\n `Change: ${entry.description}`,\n `Diff: ${entry.diffSummary}`,\n '',\n 'Snapshot (secrets masked):',\n JSON.stringify(entry.snapshotMasked, null, 2),\n ].join('\\n') + '\\n',\n );\n return 0;\n }\n\n const entries = await listHistory();\n if (entries.length === 0) {\n deps.renderer.write('No config history yet.\\n');\n return 0;\n }\n\n deps.renderer.write(\n [\n color.bold('Config History'),\n '',\n ...entries.map((e, i) => {\n const ts = new Date(e.timestamp).toLocaleString();\n const desc = e.description.length > 60 ? e.description.slice(0, 60) + '\u2026' : e.description;\n return ` [${i + 1}] ${e.id} ${color.dim(ts)}\\n ${desc}`;\n }),\n '',\n ' Run `wrongstack config history --id <id>` for details.',\n ' Run `wrongstack config restore <id>` to restore.',\n ].join('\\n') + '\\n',\n );\n return 0;\n}\n\nasync function runRestore(args: string[], deps: SubcommandDeps): Promise<number> {\n const profileConfigPath = activeProfileConfigPath(deps.paths, deps.config);\n const latest = args.includes('--latest') || args.includes('-l');\n const id = extractArg(args, '--id') ?? (args[0] && !args[0]?.startsWith('-') ? args[0] : null);\n\n if (latest) {\n const result = await restoreLast(undefined, profileConfigPath);\n if (!result.ok) {\n deps.renderer.writeError(`Restore failed: ${result.error}\\n`);\n return 1;\n }\n deps.renderer.write('Restored from config.json.last.\\n');\n return 0;\n }\n\n if (!id) {\n deps.renderer.write('Usage: wrongstack config restore <id> | --latest\\n');\n return 1;\n }\n\n const result = await restoreFromHistory(id, undefined, profileConfigPath);\n if (!result.ok) {\n deps.renderer.writeError(`Restore failed: ${result.error}\\n`);\n return 1;\n }\n\n deps.renderer.write(`Restored to history entry '${id}'. Backup created.\\n`);\n return 0;\n}\n", "import { isSecretField } from '@wrongstack/core/security';\n\nexport function redactKeys(obj: unknown): unknown {\n if (!obj || typeof obj !== 'object') return obj;\n if (Array.isArray(obj)) return obj.map(redactKeys);\n const out: Record<string, unknown> = {};\n for (const [k, v] of Object.entries(obj as Record<string, unknown>)) {\n if (isSecretField(k) && typeof v === 'string' && v.length > 0) out[k] = '[REDACTED]';\n else out[k] = redactKeys(v);\n }\n return out;\n}\n", "import * as fsp from 'node:fs/promises';\nimport * as path from 'node:path';\nimport { color } from '@wrongstack/core/utils';\nimport type { SubcommandDeps, SubcommandHandler } from '../index.js';\n\n/**\n * `wrongstack sessions fleet [runId]`\n *\n * Lists fleet run artifacts under `projectSessions/<runId>/`.\n * When runId is omitted, lists all fleet runs discovered under projectSessions.\n *\n * Artifacts shown:\n * - fleet.json (manifest)\n * - checkpoint.json (state snapshot, if present)\n * - shared/ (scratchpad directory)\n * - subagents/ (per-subagent JSONL transcripts)\n */\nexport const sessionsFleetCmd: SubcommandHandler = async (args, deps) => {\n const runId = args.find((a) => !a.startsWith('-'));\n\n if (runId) {\n return showFleetRun(runId, deps);\n }\n return listFleetRuns(deps);\n};\n\nasync function listFleetRuns(deps: SubcommandDeps): Promise<number> {\n let entries: string[] = [];\n try {\n entries = await fsp.readdir(deps.paths.projectSessions);\n } catch {\n deps.renderer.writeError(`Cannot read projectSessions: ${deps.paths.projectSessions}\\n`);\n return 1;\n }\n\n const runs: Array<{ id: string; manifest: boolean; checkpoint: boolean; subagents: number }> = [];\n\n // Per-entry inspection can run in parallel \u2014 each entry's stat +\n // access(manifest) + access(checkpoint) + readdir(subagents) are all\n // independent files. The Promise.all below runs all four concurrently\n // per entry, then derives the boolean fields from the resolved\n // outcomes. Outer parallelism (Promise.all over entries) is bounded\n // by the number of entries, which is the number of session runs on\n // disk \u2014 small enough that unbounded fan-out is safe.\n const perEntry = await Promise.all(\n entries.map(async (id): Promise<{ id: string; manifest: boolean; checkpoint: boolean; subagents: number } | null> => {\n const runDir = path.join(deps.paths.projectSessions, id);\n try {\n const stat = await fsp.stat(runDir);\n if (!stat.isDirectory()) return null;\n } catch {\n return null; // skip inaccessible entries\n }\n const [manifestResult, checkpointResult, subagentFilesResult] = await Promise.all([\n fsp.access(path.join(runDir, 'fleet.json')).then(\n () => true,\n () => false,\n ),\n fsp.access(path.join(runDir, 'checkpoint.json')).then(\n () => true,\n () => false,\n ),\n fsp.readdir(path.join(runDir, 'subagents')).then(\n (files) => files.filter((f) => f.endsWith('.jsonl')).length,\n () => 0,\n ),\n ]);\n return {\n id,\n manifest: manifestResult,\n checkpoint: checkpointResult,\n subagents: subagentFilesResult,\n };\n }),\n );\n for (const r of perEntry) if (r) runs.push(r);\n\n if (runs.length === 0) {\n deps.renderer.write('No fleet runs found.\\n');\n return 0;\n }\n\n deps.renderer.write(color.bold('\\nFleet Runs\\n') + '\\n');\n for (const r of runs.sort((a, b) => b.id.localeCompare(a.id))) {\n const checkpointFlag = r.checkpoint ? color.green('\u2713') : color.dim('\u25CB');\n const manifestFlag = r.manifest ? color.green('\u2713') : color.dim('\u25CB');\n const subagentInfo = r.subagents > 0 ? color.dim(` ${r.subagents} subagent jsonl`) : '';\n deps.renderer.write(\n ` ${color.bold(r.id)} ${checkpointFlag} checkpoint ${manifestFlag} manifest${subagentInfo}\\n`,\n );\n }\n deps.renderer.write(`\\n ${color.dim('Run `wrongstack sessions fleet <runId>` for details.')}\\n`);\n return 0;\n}\n\nasync function showFleetRun(runId: string, deps: SubcommandDeps): Promise<number> {\n const runDir = path.join(deps.paths.projectSessions, runId);\n\n let stat;\n try {\n stat = await fsp.stat(runDir);\n } catch {\n deps.renderer.writeError(`Fleet run not found: ${runId}\\n`);\n return 1;\n }\n\n if (!stat.isDirectory()) {\n deps.renderer.writeError(`Not a directory: ${runId}\\n`);\n return 1;\n }\n\n deps.renderer.write(color.bold(`\\nFleet Run: ${runId}\\n`) + '\\n');\n\n // Manifest\n const manifestPath = path.join(runDir, 'fleet.json');\n let manifestData: string | null = null;\n try {\n manifestData = await fsp.readFile(manifestPath, 'utf8');\n const manifest = JSON.parse(manifestData);\n const subagents = manifest.subagents ?? [];\n const tasks = manifest.tasks ?? [];\n const completed = tasks.filter(\n (t: { status?: string | undefined }) =>\n t.status === 'completed' ||\n t.status === 'failed' ||\n t.status === 'timeout' ||\n t.status === 'stopped',\n );\n deps.renderer.write(\n ` ${color.green('\u2713')} fleet.json \u2014 ${subagents.length} subagent(s), ${completed.length}/${tasks.length} tasks done\\n`,\n );\n } catch {\n deps.renderer.write(` ${color.dim('\u25CB')} fleet.json \u2014 not found\\n`);\n }\n\n // Checkpoint\n const checkpointPath = path.join(runDir, 'checkpoint.json');\n let checkpointData: string | null = null;\n try {\n checkpointData = await fsp.readFile(checkpointPath, 'utf8');\n const snap = JSON.parse(checkpointData);\n const lockPath = `${checkpointPath}.lock`;\n let lockStatus = color.dim('\u25CB no lock');\n try {\n const lockRaw = await fsp.readFile(lockPath, 'utf8');\n const lock = JSON.parse(lockRaw);\n lockStatus = `${color.yellow('\u25B8')} lock held by pid ${lock.pid} on ${lock.hostname} (started ${lock.startedAt})`;\n } catch {\n lockStatus = color.green('\u2713 no lock (safe to resume)');\n }\n deps.renderer.write(\n ` ${color.green('\u2713')} checkpoint.json \u2014 updated ${snap.updatedAt}, ${snap.spawnCount} spawns, ${snap.tasks?.length ?? 0} tasks tracked\\n ${lockStatus}\\n`,\n );\n } catch {\n deps.renderer.write(` ${color.dim('\u25CB')} checkpoint.json \u2014 not found\\n`);\n }\n\n // State snapshot\n if (checkpointData) {\n try {\n const snap = JSON.parse(checkpointData);\n if (snap.subagents?.length) {\n deps.renderer.write('\\n Subagents:\\n');\n for (const s of snap.subagents) {\n deps.renderer.write(\n ` ${color.cyan(s.id)} ${s.name ? `${s.name} ` : ''}${s.provider ? `(${s.provider}/${s.model})` : ''} spawned ${s.spawnedAt}\\n`,\n );\n }\n }\n if (snap.tasks?.length) {\n deps.renderer.write('\\n Tasks:\\n');\n for (const t of snap.tasks) {\n deps.renderer.write(\n ` ${color.dim(t.taskId)} ${t.status} ${t.description ? t.description.slice(0, 50) : '(no description)'}\\n`,\n );\n }\n }\n } catch {\n // skip parse errors\n }\n }\n\n // Subagents directory\n const subagentsDir = path.join(runDir, 'subagents');\n let subagentFiles: string[] = [];\n try {\n subagentFiles = await fsp.readdir(subagentsDir);\n subagentFiles = subagentFiles.filter((f) => f.endsWith('.jsonl'));\n } catch {\n // no subagents dir\n }\n\n if (subagentFiles.length > 0) {\n deps.renderer.write(`\\n Subagent transcripts (${subagentFiles.length}):\\n`);\n // Stat all transcript files in parallel \u2014 each is an independent read,\n // bounded by the number of subagents in this run (typically <100).\n const sortedFiles = subagentFiles.sort();\n const sizes = await Promise.all(\n sortedFiles.map(async (f) => {\n const filePath = path.join(subagentsDir, f);\n try {\n const s = await fsp.stat(filePath);\n return s.size;\n } catch {\n return 0;\n }\n }),\n );\n for (let i = 0; i < sortedFiles.length; i++) {\n const size = sizes[i] ?? 0;\n const sizeStr =\n size > 1024 * 1024\n ? `${(size / 1024 / 1024).toFixed(1)}MB`\n : `${(size / 1024).toFixed(0)}KB`;\n deps.renderer.write(` ${color.dim(sortedFiles[i] ?? '')} ${color.dim(sizeStr)}\\n`);\n }\n } else {\n deps.renderer.write(`\\n ${color.dim('\u25CB')} No subagent transcripts\\n`);\n }\n\n // Shared directory\n const sharedDir = path.join(runDir, 'shared');\n try {\n const files = await fsp.readdir(sharedDir);\n deps.renderer.write(`\\n Shared scratchpad: ${files.length} file(s)\\n`);\n } catch {\n deps.renderer.write(`\\n ${color.dim('\u25CB')} No shared scratchpad\\n`);\n }\n\n deps.renderer.write(`\\n ${color.dim('Resume: wrongstack --resume ' + runId)}\\n`);\n return 0;\n}\n"],
5
+ "mappings": "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",
6
+ "names": ["color", "stat", "color", "result"]
7
+ }
@@ -1,23 +1,8 @@
1
1
  import { type SecretVault } from '@wrongstack/core/types';
2
2
  import type { ConfigStore } from '@wrongstack/core/types';
3
- import type { ReadlineInputReader } from './input-reader.js';
4
- import type { TerminalRenderer } from './renderer.js';
5
- export interface SettingsMenuDeps {
6
- renderer: TerminalRenderer;
7
- reader: ReadlineInputReader;
8
- configStore: ConfigStore;
9
- profileConfigPath: string;
10
- vault: SecretVault;
11
- }
12
- /**
13
- * Interactive settings manager. Shows current configuration values,
14
- * lets the user edit them, and persists changes back to the config file.
15
- * Loops until the user exits.
16
- */
17
- export declare function runSettingsMenu(deps: SettingsMenuDeps): Promise<number>;
18
- /** The subset of {@link SettingsMenuDeps} needed to persist a setting —
19
- * no renderer/reader, so this is safe to call from non-interactive surfaces
20
- * (the TUI, headless runs, the arg-driven `/settings` slash command). */
3
+ /** Configuration and storage dependencies needed to persist a setting.
4
+ * This is safe to call from non-interactive surfaces such as the TUI,
5
+ * headless runs, and the arg-driven `/settings` slash command. */
21
6
  export interface PersistSettingDeps {
22
7
  configStore: ConfigStore;
23
8
  /** Path to the active profile config (~/.wrongstack/profiles/<name>/config.json). */
@@ -1 +1 @@
1
- {"version":3,"file":"settings-menu.d.ts","sourceRoot":"","sources":["../src/settings-menu.ts"],"names":[],"mappings":"AAGA,OAAO,EAAqC,KAAK,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAC7F,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAE1D,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AAC7D,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AAGtD,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,EAAE,gBAAgB,CAAC;IAC3B,MAAM,EAAE,mBAAmB,CAAC;IAC5B,WAAW,EAAE,WAAW,CAAC;IACzB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,KAAK,EAAE,WAAW,CAAC;CACpB;AAED;;;;GAIG;AACH,wBAAsB,eAAe,CAAC,IAAI,EAAE,gBAAgB,GAAG,OAAO,CAAC,MAAM,CAAC,CA+B7E;AAqID;;0EAE0E;AAC1E,MAAM,WAAW,kBAAkB;IACjC,WAAW,EAAE,WAAW,CAAC;IACzB,qFAAqF;IACrF,iBAAiB,EAAE,MAAM,CAAC;IAC1B;;uDAEmD;IACnD,mBAAmB,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACzC,KAAK,EAAE,WAAW,CAAC;IACnB,kFAAkF;IAClF,WAAW,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;IAClC;;;;;;OAMG;IACH,kBAAkB,CAAC,EAAE,CAAC,CAAC,WAAW,EAAE,MAAM,KAAK,MAAM,CAAC,GAAG,SAAS,CAAC;CACpE;AAED,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,kBAAkB,GAAG,MAAM,CAQnE;AAED;;;GAGG;AACH,wBAAgB,mBAAmB,CACjC,IAAI,EAAE,kBAAkB,EACxB,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAClC,YAAY,EAAE,MAAM,GACnB,MAAM,CAgBR;AAgED;;;;GAIG;AACH,wBAAgB,oBAAoB,CAAC,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAQ1F;AAED;;;;;GAKG;AACH,wBAAsB,sBAAsB,CAC1C,IAAI,EAAE,kBAAkB,EACxB,OAAO,EAAE,CAAC,QAAQ,EAAE;IAClB,kBAAkB,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACxC,WAAW,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACjC,OAAO,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;IAC9B,cAAc,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACpC,eAAe,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CACtC,KAAK,IAAI,GACT,OAAO,CAAC,IAAI,CAAC,CA6Df;AAED;;;;GAIG;AACH,wBAAsB,oBAAoB,CACxC,IAAI,EAAE,kBAAkB,EACxB,OAAO,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,IAAI,GACjD,OAAO,CAAC,IAAI,CAAC,CAyDf;AAED;;;;GAIG;AACH,wBAAsB,qBAAqB,CACzC,IAAI,EAAE,kBAAkB,EACxB,OAAO,EAAE,CAAC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,IAAI,GACnD,OAAO,CAAC,IAAI,CAAC,CAmDf;AAiBD;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,kBAAkB,CAAC,KAAK,EAAE;IACxC,uBAAuB,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;IAC9C,gBAAgB,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;CACxC,GAAG;IAAE,uBAAuB,EAAE,OAAO,CAAC;IAAC,qBAAqB,EAAE,OAAO,CAAA;CAAE,GAAG,SAAS,CAUnF"}
1
+ {"version":3,"file":"settings-menu.d.ts","sourceRoot":"","sources":["../src/settings-menu.ts"],"names":[],"mappings":"AAGA,OAAO,EAAqC,KAAK,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAC7F,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAG1D;;mEAEmE;AACnE,MAAM,WAAW,kBAAkB;IACjC,WAAW,EAAE,WAAW,CAAC;IACzB,qFAAqF;IACrF,iBAAiB,EAAE,MAAM,CAAC;IAC1B;;uDAEmD;IACnD,mBAAmB,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACzC,KAAK,EAAE,WAAW,CAAC;IACnB,kFAAkF;IAClF,WAAW,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;IAClC;;;;;;OAMG;IACH,kBAAkB,CAAC,EAAE,CAAC,CAAC,WAAW,EAAE,MAAM,KAAK,MAAM,CAAC,GAAG,SAAS,CAAC;CACpE;AAED,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,kBAAkB,GAAG,MAAM,CAQnE;AAED;;;GAGG;AACH,wBAAgB,mBAAmB,CACjC,IAAI,EAAE,kBAAkB,EACxB,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAClC,YAAY,EAAE,MAAM,GACnB,MAAM,CAgBR;AA4GD;;;;GAIG;AACH,wBAAgB,oBAAoB,CAAC,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAQ1F;AAED;;;;;GAKG;AACH,wBAAsB,sBAAsB,CAC1C,IAAI,EAAE,kBAAkB,EACxB,OAAO,EAAE,CAAC,QAAQ,EAAE;IAClB,kBAAkB,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACxC,WAAW,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACjC,OAAO,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;IAC9B,cAAc,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACpC,eAAe,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CACtC,KAAK,IAAI,GACT,OAAO,CAAC,IAAI,CAAC,CAoEf;AAED;;;;GAIG;AACH,wBAAsB,oBAAoB,CACxC,IAAI,EAAE,kBAAkB,EACxB,OAAO,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,IAAI,GACjD,OAAO,CAAC,IAAI,CAAC,CAgEf;AAED;;;;GAIG;AACH,wBAAsB,qBAAqB,CACzC,IAAI,EAAE,kBAAkB,EACxB,OAAO,EAAE,CAAC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,IAAI,GACnD,OAAO,CAAC,IAAI,CAAC,CAmDf;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,kBAAkB,CAAC,KAAK,EAAE;IACxC,uBAAuB,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;IAC9C,gBAAgB,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;CACxC,GAAG;IAAE,uBAAuB,EAAE,OAAO,CAAC;IAAC,qBAAqB,EAAE,OAAO,CAAA;CAAE,GAAG,SAAS,CAUnF"}
@@ -0,0 +1,93 @@
1
+ import "./chunk-7OCVIDC7.js";
2
+
3
+ // src/simpleui-dist.ts
4
+ import { spawn } from "node:child_process";
5
+ import { existsSync } from "node:fs";
6
+ import { createRequire } from "node:module";
7
+ import * as path from "node:path";
8
+ function resolveSimpleUiDistDir(deps = {}) {
9
+ const requireFromHere = createRequire(import.meta.url);
10
+ const resolvePackageJson = deps.resolvePackageJson ?? ((id) => requireFromHere.resolve(id));
11
+ const exists = deps.exists ?? existsSync;
12
+ let packageJson;
13
+ try {
14
+ packageJson = resolvePackageJson("@wrongstack/simpleui/package.json");
15
+ } catch {
16
+ throw new Error(
17
+ "SimpleUI package could not be resolved. Install workspace dependencies and rebuild the CLI."
18
+ );
19
+ }
20
+ const distDir = path.join(path.dirname(packageJson), "dist");
21
+ if (!exists(path.join(distDir, "index.html"))) {
22
+ throw new Error(
23
+ "SimpleUI frontend is not built. Run `pnpm --filter @wrongstack/simpleui build`."
24
+ );
25
+ }
26
+ return distDir;
27
+ }
28
+ async function ensureSimpleUiDistDir(deps = {}) {
29
+ try {
30
+ return resolveSimpleUiDistDir(deps);
31
+ } catch {
32
+ }
33
+ const requireFromHere = createRequire(import.meta.url);
34
+ const resolvePackageJson = deps.resolvePackageJson ?? ((id) => requireFromHere.resolve(id));
35
+ let packageDir;
36
+ try {
37
+ packageDir = path.dirname(resolvePackageJson("@wrongstack/simpleui/package.json"));
38
+ } catch {
39
+ throw new Error(
40
+ "SimpleUI package could not be resolved. Install workspace dependencies and rebuild the CLI."
41
+ );
42
+ }
43
+ const findRoot = deps.findWorkspaceRoot ?? ((pkgDir) => {
44
+ let dir = pkgDir;
45
+ for (let i = 0; i < 10; i++) {
46
+ if (existsSync(path.join(dir, "pnpm-workspace.yaml"))) return dir;
47
+ const parent = path.dirname(dir);
48
+ if (parent === dir) break;
49
+ dir = parent;
50
+ }
51
+ return path.resolve(pkgDir, "..", "..");
52
+ });
53
+ const workspaceRoot = findRoot(packageDir);
54
+ console.warn(JSON.stringify({ level: "warn", event: "simpleui.auto_build", message: "Frontend not built \u2014 building now", timestamp: (/* @__PURE__ */ new Date()).toISOString() }));
55
+ const runBuild = deps.runBuild ?? ((cwd) => runPnpmBuild(cwd, "@wrongstack/simpleui", 12e4));
56
+ try {
57
+ await runBuild(workspaceRoot);
58
+ } catch (err) {
59
+ throw new Error(
60
+ `SimpleUI auto-build failed: ${err instanceof Error ? err.message : String(err)}. Run \`pnpm --filter @wrongstack/simpleui build\` manually.`
61
+ );
62
+ }
63
+ return resolveSimpleUiDistDir(deps);
64
+ }
65
+ function runPnpmBuild(cwd, workspace, timeoutMs) {
66
+ return new Promise((resolve2, reject) => {
67
+ const child = spawn("pnpm", ["--filter", workspace, "build"], {
68
+ cwd,
69
+ shell: process.platform === "win32",
70
+ stdio: "inherit",
71
+ windowsHide: true
72
+ });
73
+ const timer = setTimeout(() => {
74
+ child.kill("SIGKILL");
75
+ reject(new Error(`build timed out after ${timeoutMs}ms`));
76
+ }, timeoutMs);
77
+ timer.unref?.();
78
+ child.once("error", (error) => {
79
+ clearTimeout(timer);
80
+ reject(error);
81
+ });
82
+ child.once("close", (code) => {
83
+ clearTimeout(timer);
84
+ if (code === 0) resolve2();
85
+ else reject(new Error(`pnpm build exited with code ${String(code)}`));
86
+ });
87
+ });
88
+ }
89
+ export {
90
+ ensureSimpleUiDistDir,
91
+ resolveSimpleUiDistDir
92
+ };
93
+ //# sourceMappingURL=simpleui-dist-JIFGUJO7.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../src/simpleui-dist.ts"],
4
+ "sourcesContent": ["import { spawn } from 'node:child_process';\nimport { existsSync } from 'node:fs';\nimport { createRequire } from 'node:module';\nimport * as path from 'node:path';\n\nexport interface SimpleUiDistDeps {\n resolvePackageJson?: (id: string) => string;\n exists?: (file: string) => boolean;\n}\n\n/** Resolve the independent SimpleUI frontend and fail closed if it is unbuilt. */\nexport function resolveSimpleUiDistDir(deps: SimpleUiDistDeps = {}): string {\n const requireFromHere = createRequire(import.meta.url);\n const resolvePackageJson =\n deps.resolvePackageJson ?? ((id: string) => requireFromHere.resolve(id));\n const exists = deps.exists ?? existsSync;\n\n let packageJson: string;\n try {\n packageJson = resolvePackageJson('@wrongstack/simpleui/package.json');\n } catch {\n throw new Error(\n 'SimpleUI package could not be resolved. Install workspace dependencies and rebuild the CLI.',\n );\n }\n\n const distDir = path.join(path.dirname(packageJson), 'dist');\n if (!exists(path.join(distDir, 'index.html'))) {\n throw new Error(\n 'SimpleUI frontend is not built. Run `pnpm --filter @wrongstack/simpleui build`.',\n );\n }\n return distDir;\n}\n\nexport interface EnsureSimpleUiDistDeps extends SimpleUiDistDeps {\n /** Override the build command runner (tests). Receives the workspace root cwd. */\n runBuild?: (cwd: string) => void | Promise<void>;\n /** Override the workspace-root finder (tests). Receives the simpleui package dir. */\n findWorkspaceRoot?: (packageDir: string) => string;\n}\n\n/**\n * Resolve the SimpleUI dist, auto-building it when missing.\n *\n * Cold-start recovery: after a fresh clone, `git clean`, or dependency\n * update the `dist/` directory (gitignored) may not exist. Instead of\n * failing with an opaque error, this function runs the Vite build\n * automatically (~600 ms) and retries resolution. The build output is\n * printed to stderr so the user sees what happened.\n */\nexport async function ensureSimpleUiDistDir(\n deps: EnsureSimpleUiDistDeps = {},\n): Promise<string> {\n try {\n return resolveSimpleUiDistDir(deps);\n } catch {\n // dist missing \u2014 attempt an auto-build before giving up.\n }\n\n const requireFromHere = createRequire(import.meta.url);\n const resolvePackageJson =\n deps.resolvePackageJson ?? ((id: string) => requireFromHere.resolve(id));\n\n let packageDir: string;\n try {\n packageDir = path.dirname(resolvePackageJson('@wrongstack/simpleui/package.json'));\n } catch {\n throw new Error(\n 'SimpleUI package could not be resolved. Install workspace dependencies and rebuild the CLI.',\n );\n }\n\n const findRoot =\n deps.findWorkspaceRoot ??\n ((pkgDir: string): string => {\n let dir = pkgDir;\n for (let i = 0; i < 10; i++) {\n if (existsSync(path.join(dir, 'pnpm-workspace.yaml'))) return dir;\n const parent = path.dirname(dir);\n if (parent === dir) break;\n dir = parent;\n }\n // Fallback: assume the standard monorepo layout (packages/simpleui \u2192 root).\n return path.resolve(pkgDir, '..', '..');\n });\n\n const workspaceRoot = findRoot(packageDir);\n console.warn(JSON.stringify({ level: 'warn', event: 'simpleui.auto_build', message: 'Frontend not built \u2014 building now', timestamp: new Date().toISOString() }));\n\n const runBuild =\n deps.runBuild ??\n ((cwd: string) => runPnpmBuild(cwd, '@wrongstack/simpleui', 120_000));\n\n try {\n await runBuild(workspaceRoot);\n } catch (err) {\n throw new Error(\n `SimpleUI auto-build failed: ${err instanceof Error ? err.message : String(err)}. ` +\n 'Run `pnpm --filter @wrongstack/simpleui build` manually.',\n );\n }\n\n // Retry resolution \u2014 throws the original descriptive error if still missing.\n return resolveSimpleUiDistDir(deps);\n}\n\nfunction runPnpmBuild(cwd: string, workspace: string, timeoutMs: number): Promise<void> {\n return new Promise((resolve, reject) => {\n const child = spawn('pnpm', ['--filter', workspace, 'build'], {\n cwd,\n shell: process.platform === 'win32',\n stdio: 'inherit',\n windowsHide: true,\n });\n const timer = setTimeout(() => {\n child.kill('SIGKILL');\n reject(new Error(`build timed out after ${timeoutMs}ms`));\n }, timeoutMs);\n timer.unref?.();\n child.once('error', (error) => {\n clearTimeout(timer);\n reject(error);\n });\n child.once('close', (code) => {\n clearTimeout(timer);\n if (code === 0) resolve();\n else reject(new Error(`pnpm build exited with code ${String(code)}`));\n });\n });\n}\n"],
5
+ "mappings": ";;;;AAAA,SAAS,aAAa;AACtB,SAAS,kBAAkB;AAC3B,SAAS,qBAAqB;AAC9B,YAAY,UAAU;AAQf,SAAS,uBAAuB,OAAyB,CAAC,GAAW;AAC1E,QAAM,kBAAkB,cAAc,YAAY,GAAG;AACrD,QAAM,qBACJ,KAAK,uBAAuB,CAAC,OAAe,gBAAgB,QAAQ,EAAE;AACxE,QAAM,SAAS,KAAK,UAAU;AAE9B,MAAI;AACJ,MAAI;AACF,kBAAc,mBAAmB,mCAAmC;AAAA,EACtE,QAAQ;AACN,UAAM,IAAI;AAAA,MACR;AAAA,IACF;AAAA,EACF;AAEA,QAAM,UAAe,UAAU,aAAQ,WAAW,GAAG,MAAM;AAC3D,MAAI,CAAC,OAAY,UAAK,SAAS,YAAY,CAAC,GAAG;AAC7C,UAAM,IAAI;AAAA,MACR;AAAA,IACF;AAAA,EACF;AACA,SAAO;AACT;AAkBA,eAAsB,sBACpB,OAA+B,CAAC,GACf;AACjB,MAAI;AACF,WAAO,uBAAuB,IAAI;AAAA,EACpC,QAAQ;AAAA,EAER;AAEA,QAAM,kBAAkB,cAAc,YAAY,GAAG;AACrD,QAAM,qBACJ,KAAK,uBAAuB,CAAC,OAAe,gBAAgB,QAAQ,EAAE;AAExE,MAAI;AACJ,MAAI;AACF,iBAAkB,aAAQ,mBAAmB,mCAAmC,CAAC;AAAA,EACnF,QAAQ;AACN,UAAM,IAAI;AAAA,MACR;AAAA,IACF;AAAA,EACF;AAEA,QAAM,WACJ,KAAK,sBACJ,CAAC,WAA2B;AAC3B,QAAI,MAAM;AACV,aAAS,IAAI,GAAG,IAAI,IAAI,KAAK;AAC3B,UAAI,WAAgB,UAAK,KAAK,qBAAqB,CAAC,EAAG,QAAO;AAC9D,YAAM,SAAc,aAAQ,GAAG;AAC/B,UAAI,WAAW,IAAK;AACpB,YAAM;AAAA,IACR;AAEA,WAAY,aAAQ,QAAQ,MAAM,IAAI;AAAA,EACxC;AAEF,QAAM,gBAAgB,SAAS,UAAU;AACzC,UAAQ,KAAK,KAAK,UAAU,EAAE,OAAO,QAAQ,OAAO,uBAAuB,SAAS,0CAAqC,YAAW,oBAAI,KAAK,GAAE,YAAY,EAAE,CAAC,CAAC;AAE/J,QAAM,WACJ,KAAK,aACJ,CAAC,QAAgB,aAAa,KAAK,wBAAwB,IAAO;AAErE,MAAI;AACF,UAAM,SAAS,aAAa;AAAA,EAC9B,SAAS,KAAK;AACZ,UAAM,IAAI;AAAA,MACR,+BAA+B,eAAe,QAAQ,IAAI,UAAU,OAAO,GAAG,CAAC;AAAA,IAEjF;AAAA,EACF;AAGA,SAAO,uBAAuB,IAAI;AACpC;AAEA,SAAS,aAAa,KAAa,WAAmB,WAAkC;AACtF,SAAO,IAAI,QAAQ,CAACA,UAAS,WAAW;AACtC,UAAM,QAAQ,MAAM,QAAQ,CAAC,YAAY,WAAW,OAAO,GAAG;AAAA,MAC5D;AAAA,MACA,OAAO,QAAQ,aAAa;AAAA,MAC5B,OAAO;AAAA,MACP,aAAa;AAAA,IACf,CAAC;AACD,UAAM,QAAQ,WAAW,MAAM;AAC7B,YAAM,KAAK,SAAS;AACpB,aAAO,IAAI,MAAM,yBAAyB,SAAS,IAAI,CAAC;AAAA,IAC1D,GAAG,SAAS;AACZ,UAAM,QAAQ;AACd,UAAM,KAAK,SAAS,CAAC,UAAU;AAC7B,mBAAa,KAAK;AAClB,aAAO,KAAK;AAAA,IACd,CAAC;AACD,UAAM,KAAK,SAAS,CAAC,SAAS;AAC5B,mBAAa,KAAK;AAClB,UAAI,SAAS,EAAG,CAAAA,SAAQ;AAAA,UACnB,QAAO,IAAI,MAAM,+BAA+B,OAAO,IAAI,CAAC,EAAE,CAAC;AAAA,IACtE,CAAC;AAAA,EACH,CAAC;AACH;",
6
+ "names": ["resolve"]
7
+ }
@@ -1 +1 @@
1
- {"version":3,"file":"brain.d.ts","sourceRoot":"","sources":["../../src/slash-commands/brain.ts"],"names":[],"mappings":"AA6BA,OAAO,KAAK,EAA2B,YAAY,EAAE,MAAM,wBAAwB,CAAC;AAIpF,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AA8FhE,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,mBAAmB,GAAG,YAAY,CA6yBzE"}
1
+ {"version":3,"file":"brain.d.ts","sourceRoot":"","sources":["../../src/slash-commands/brain.ts"],"names":[],"mappings":"AA6BA,OAAO,KAAK,EAA2B,YAAY,EAAE,MAAM,wBAAwB,CAAC;AAIpF,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AA4FhE,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,mBAAmB,GAAG,YAAY,CA8zBzE"}
@@ -1 +1 @@
1
- {"version":3,"file":"clear.d.ts","sourceRoot":"","sources":["../../src/slash-commands/clear.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AAC3D,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AAGhE,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,mBAAmB,GAAG,YAAY,CAyFzE"}
1
+ {"version":3,"file":"clear.d.ts","sourceRoot":"","sources":["../../src/slash-commands/clear.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AAC3D,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AAGhE,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,mBAAmB,GAAG,YAAY,CAiGzE"}
@@ -1 +1 @@
1
- {"version":3,"file":"fallback.d.ts","sourceRoot":"","sources":["../../src/slash-commands/fallback.ts"],"names":[],"mappings":"AAGA,OAAO,EAAe,KAAK,YAAY,EAAE,MAAM,wBAAwB,CAAC;AAIxE,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AA2DhE;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,mBAAmB,GAAG,YAAY,CAyT5E"}
1
+ {"version":3,"file":"fallback.d.ts","sourceRoot":"","sources":["../../src/slash-commands/fallback.ts"],"names":[],"mappings":"AAOA,OAAO,EAAe,KAAK,YAAY,EAAE,MAAM,wBAAwB,CAAC;AAGxE,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AAoHhE;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,mBAAmB,GAAG,YAAY,CAuX5E"}
@@ -0,0 +1,18 @@
1
+ import { type KanbanBoard, type KanbanTask } from '@wrongstack/kanban';
2
+ export interface KanbanAgentFlags {
3
+ provider?: string | undefined;
4
+ model?: string | undefined;
5
+ name?: string | undefined;
6
+ role?: string | undefined;
7
+ fallbackProfile?: string | undefined;
8
+ fallbackModels?: string[] | undefined;
9
+ tools?: string[] | undefined;
10
+ allowedCapabilities?: string[] | undefined;
11
+ }
12
+ export declare function parseKanbanAgentFlags(args: string[]): {
13
+ target?: string | undefined;
14
+ flags: KanbanAgentFlags;
15
+ };
16
+ export declare function buildKanbanAgentPrompt(board: KanbanBoard, task: KanbanTask, assignment: KanbanTask['assignment']): string;
17
+ export declare function splitCsv(value: string): string[];
18
+ //# sourceMappingURL=kanban-agent-helpers.d.ts.map