@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
@@ -4,6 +4,7 @@
4
4
  * @module hq-server/auth
5
5
  */
6
6
  import type * as http from 'node:http';
7
+ import type { HqSessionEntry } from './types.js';
7
8
  export declare const HQ_SESSION_COOKIE = "hq.session";
8
9
  export declare const HQ_SESSION_MAX_AGE_MS: number;
9
10
  export interface HqBrowserAuthContext {
@@ -12,7 +13,18 @@ export interface HqBrowserAuthContext {
12
13
  id: string;
13
14
  capabilities?: string[];
14
15
  }
15
- export type HqBrowserAuthResult = HqBrowserAuthContext | 'cookie' | undefined;
16
+ /**
17
+ * Cookie-session auth context — returned when a valid `hq.session` cookie
18
+ * is presented. Password-origin cookies have `kind: 'cookie'` (full
19
+ * access). Token-origin cookies carry the source token's capabilities
20
+ * so capability checks (e.g. `control.enqueue`) still apply.
21
+ */
22
+ export interface HqCookieAuthContext {
23
+ kind: 'cookie';
24
+ tokenId?: string;
25
+ capabilities?: string[];
26
+ }
27
+ export type HqBrowserAuthResult = HqBrowserAuthContext | HqCookieAuthContext | undefined;
16
28
  /**
17
29
  * The only featureful frontend is the packaged, same-origin React SPA.
18
30
  * The missing-assets recovery document contains inline CSS but no script.
@@ -25,6 +37,7 @@ export declare function parseCookieHeader(cookieHeader: string | undefined): Rec
25
37
  export declare function setHqSessionCookie(res: http.ServerResponse, value: string, secure?: boolean): void;
26
38
  export declare function clearHqSessionCookie(res: http.ServerResponse, secure?: boolean): void;
27
39
  export declare function isTokenAuth(auth: HqBrowserAuthResult): auth is HqBrowserAuthContext;
40
+ export declare function isCookieAuth(auth: HqBrowserAuthResult): auth is HqCookieAuthContext;
28
41
  /**
29
42
  * Constant-time membership test for a token set. Returns the matching stored
30
43
  * token (so callers can look up its metadata) or undefined. Iterates and
@@ -41,7 +54,5 @@ export declare function authenticateBrowserRequest(req: http.IncomingMessage, ur
41
54
  }>;
42
55
  passwordHash?: string | undefined;
43
56
  cookieSecret?: string | undefined;
44
- }, sessions: Map<string, {
45
- createdAt: number;
46
- }>): HqBrowserAuthResult;
57
+ }, sessions: Map<string, HqSessionEntry>): HqBrowserAuthResult;
47
58
  //# sourceMappingURL=auth.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"auth.d.ts","sourceRoot":"","sources":["../../src/hq-server/auth.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,KAAK,KAAK,IAAI,MAAM,WAAW,CAAC;AAKvC,eAAO,MAAM,iBAAiB,eAAe,CAAC;AAC9C,eAAO,MAAM,qBAAqB,QAA0B,CAAC;AAI7D,MAAM,WAAW,oBAAoB;IACnC,IAAI,EAAE,OAAO,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,EAAE,EAAE,MAAM,CAAC;IACX,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;CACzB;AAED,MAAM,MAAM,mBAAmB,GAAG,oBAAoB,GAAG,QAAQ,GAAG,SAAS,CAAC;AAI9E;;;GAGG;AACH,wBAAgB,oBAAoB,CAAC,GAAG,EAAE,IAAI,CAAC,cAAc,GAAG,IAAI,CAoBnE;AA+DD,wBAAgB,uBAAuB,CACrC,GAAG,EAAE,IAAI,CAAC,eAAe,EACzB,SAAS,CAAC,EAAE,MAAM,EAClB,SAAS,CAAC,EAAE,MAAM,EAClB,oBAAoB,GAAE,WAAW,CAAC,MAAM,CAAa,GACpD,OAAO,CAgCT;AAQD,wBAAgB,wBAAwB,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,CAElF;AAED,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAatF;AAED,wBAAgB,iBAAiB,CAAC,YAAY,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAmB1F;AAED,wBAAgB,kBAAkB,CAChC,GAAG,EAAE,IAAI,CAAC,cAAc,EACxB,KAAK,EAAE,MAAM,EACb,MAAM,CAAC,EAAE,OAAO,GACf,IAAI,CAUN;AAED,wBAAgB,oBAAoB,CAAC,GAAG,EAAE,IAAI,CAAC,cAAc,EAAE,MAAM,CAAC,EAAE,OAAO,GAAG,IAAI,CAIrF;AAID,wBAAgB,WAAW,CAAC,IAAI,EAAE,mBAAmB,GAAG,IAAI,IAAI,oBAAoB,CAEnF;AAgCD;;;;;;GAMG;AACH,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,GAAG,CAAC,MAAM,CAAC,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAQ9F;AAED,wBAAgB,0BAA0B,CACxC,GAAG,EAAE,IAAI,CAAC,eAAe,EACzB,GAAG,EAAE,GAAG,EACR,WAAW,EAAE;IACX,aAAa,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IAC3B,gBAAgB,EAAE,GAAG,CAAC,MAAM,EAAE;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,YAAY,CAAC,EAAE,MAAM,EAAE,CAAA;KAAE,CAAC,CAAC;IACvE,YAAY,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAClC,YAAY,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CACnC,EACD,QAAQ,EAAE,GAAG,CAAC,MAAM,EAAE;IAAE,SAAS,EAAE,MAAM,CAAA;CAAE,CAAC,GAC3C,mBAAmB,CAiCrB"}
1
+ {"version":3,"file":"auth.d.ts","sourceRoot":"","sources":["../../src/hq-server/auth.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,KAAK,KAAK,IAAI,MAAM,WAAW,CAAC;AAEvC,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAIjD,eAAO,MAAM,iBAAiB,eAAe,CAAC;AAC9C,eAAO,MAAM,qBAAqB,QAA0B,CAAC;AAI7D,MAAM,WAAW,oBAAoB;IACnC,IAAI,EAAE,OAAO,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,EAAE,EAAE,MAAM,CAAC;IACX,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;CACzB;AAED;;;;;GAKG;AACH,MAAM,WAAW,mBAAmB;IAClC,IAAI,EAAE,QAAQ,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;CACzB;AAED,MAAM,MAAM,mBAAmB,GAAG,oBAAoB,GAAG,mBAAmB,GAAG,SAAS,CAAC;AAIzF;;;GAGG;AACH,wBAAgB,oBAAoB,CAAC,GAAG,EAAE,IAAI,CAAC,cAAc,GAAG,IAAI,CAoBnE;AA+DD,wBAAgB,uBAAuB,CACrC,GAAG,EAAE,IAAI,CAAC,eAAe,EACzB,SAAS,CAAC,EAAE,MAAM,EAClB,SAAS,CAAC,EAAE,MAAM,EAClB,oBAAoB,GAAE,WAAW,CAAC,MAAM,CAAa,GACpD,OAAO,CAgCT;AAQD,wBAAgB,wBAAwB,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,CAElF;AAED,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAatF;AAED,wBAAgB,iBAAiB,CAAC,YAAY,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAmB1F;AAED,wBAAgB,kBAAkB,CAChC,GAAG,EAAE,IAAI,CAAC,cAAc,EACxB,KAAK,EAAE,MAAM,EACb,MAAM,CAAC,EAAE,OAAO,GACf,IAAI,CAUN;AAED,wBAAgB,oBAAoB,CAAC,GAAG,EAAE,IAAI,CAAC,cAAc,EAAE,MAAM,CAAC,EAAE,OAAO,GAAG,IAAI,CAIrF;AAID,wBAAgB,WAAW,CAAC,IAAI,EAAE,mBAAmB,GAAG,IAAI,IAAI,oBAAoB,CAEnF;AAED,wBAAgB,YAAY,CAAC,IAAI,EAAE,mBAAmB,GAAG,IAAI,IAAI,mBAAmB,CAEnF;AAgCD;;;;;;GAMG;AACH,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,GAAG,CAAC,MAAM,CAAC,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAQ9F;AAED,wBAAgB,0BAA0B,CACxC,GAAG,EAAE,IAAI,CAAC,eAAe,EACzB,GAAG,EAAE,GAAG,EACR,WAAW,EAAE;IACX,aAAa,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IAC3B,gBAAgB,EAAE,GAAG,CAAC,MAAM,EAAE;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,YAAY,CAAC,EAAE,MAAM,EAAE,CAAA;KAAE,CAAC,CAAC;IACvE,YAAY,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAClC,YAAY,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CACnC,EACD,QAAQ,EAAE,GAAG,CAAC,MAAM,EAAE,cAAc,CAAC,GACpC,mBAAmB,CAkDrB"}
@@ -0,0 +1,5 @@
1
+ export declare function resolveHqProjectRoot(globalRoot: string, ids: {
2
+ sessionId?: string | undefined;
3
+ projectId?: string | undefined;
4
+ }): Promise<string | undefined>;
5
+ //# sourceMappingURL=project-root.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"project-root.d.ts","sourceRoot":"","sources":["../../src/hq-server/project-root.ts"],"names":[],"mappings":"AAEA,wBAAgB,oBAAoB,CAClC,UAAU,EAAE,MAAM,EAClB,GAAG,EAAE;IAAE,SAAS,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAAC,SAAS,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;CAAE,GACtE,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAmC7B"}
@@ -0,0 +1,25 @@
1
+ import type * as http from 'node:http';
2
+ import { type HqAlertRuleConfig, type HqRedactionPolicy, type HqToken } from '@wrongstack/core/hq';
3
+ import type { HqRouterMutableAuth, HqSessionEntry } from '../types.js';
4
+ export declare function handleApiAuthStatus(req: http.IncomingMessage, res: http.ServerResponse, url: URL, mutableAuth: HqRouterMutableAuth, sessions: Map<string, HqSessionEntry>, requireBrowserAuth: boolean | undefined, trustedPublicOrigins: Set<string>, secureCookies: boolean | undefined): Promise<void>;
5
+ export declare function handleApiLogin(req: http.IncomingMessage, res: http.ServerResponse, mutableAuth: HqRouterMutableAuth, sessions: Map<string, HqSessionEntry>, loginAttempts: Map<string, {
6
+ count: number;
7
+ blockedUntil: number;
8
+ lastAttempt: number;
9
+ }>, secureCookies: boolean | undefined): Promise<void>;
10
+ export declare function handleApiLogout(req: http.IncomingMessage, res: http.ServerResponse, mutableAuth: HqRouterMutableAuth, sessions: Map<string, HqSessionEntry>, secureCookies: boolean | undefined): Promise<void>;
11
+ export declare function handleApiPassword(req: http.IncomingMessage, res: http.ServerResponse, mutableAuth: HqRouterMutableAuth, sessions: Map<string, HqSessionEntry>, dataDir: string, secureCookies: boolean | undefined, requireBrowserAuth: boolean | undefined): Promise<void>;
12
+ export declare function applyAuthFile(mutableAuth: HqRouterMutableAuth, next: {
13
+ browserTokens?: Array<{
14
+ token: string;
15
+ id: string;
16
+ capabilities?: string[];
17
+ }>;
18
+ clientTokens?: Array<HqToken>;
19
+ redactionPolicy?: Partial<HqRedactionPolicy>;
20
+ passwordHash?: string;
21
+ cookieSecret?: string;
22
+ alertRules?: HqAlertRuleConfig;
23
+ }): void;
24
+ export declare function handleApiBootstrap(req: http.IncomingMessage, res: http.ServerResponse, mutableAuth: HqRouterMutableAuth, sessions: Map<string, HqSessionEntry>, secureCookies: boolean | undefined, bootstrapStore: import('@wrongstack/core/hq').HqBootstrapCodeStore): Promise<void>;
25
+ //# sourceMappingURL=auth-handlers.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"auth-handlers.d.ts","sourceRoot":"","sources":["../../../src/hq-server/routes/auth-handlers.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,KAAK,IAAI,MAAM,WAAW,CAAC;AACvC,OAAO,EAOL,KAAK,iBAAiB,EACtB,KAAK,iBAAiB,EACtB,KAAK,OAAO,EACb,MAAM,qBAAqB,CAAC;AAY7B,OAAO,KAAK,EAAE,mBAAmB,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAQvE,wBAAsB,mBAAmB,CACvC,GAAG,EAAE,IAAI,CAAC,eAAe,EACzB,GAAG,EAAE,IAAI,CAAC,cAAc,EACxB,GAAG,EAAE,GAAG,EACR,WAAW,EAAE,mBAAmB,EAChC,QAAQ,EAAE,GAAG,CAAC,MAAM,EAAE,cAAc,CAAC,EACrC,kBAAkB,EAAE,OAAO,GAAG,SAAS,EACvC,oBAAoB,EAAE,GAAG,CAAC,MAAM,CAAC,EACjC,aAAa,EAAE,OAAO,GAAG,SAAS,GACjC,OAAO,CAAC,IAAI,CAAC,CAyBf;AAED,wBAAsB,cAAc,CAClC,GAAG,EAAE,IAAI,CAAC,eAAe,EACzB,GAAG,EAAE,IAAI,CAAC,cAAc,EACxB,WAAW,EAAE,mBAAmB,EAChC,QAAQ,EAAE,GAAG,CAAC,MAAM,EAAE,cAAc,CAAC,EACrC,aAAa,EAAE,GAAG,CAAC,MAAM,EAAE;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,YAAY,EAAE,MAAM,CAAC;IAAC,WAAW,EAAE,MAAM,CAAA;CAAE,CAAC,EACxF,aAAa,EAAE,OAAO,GAAG,SAAS,GACjC,OAAO,CAAC,IAAI,CAAC,CA4Ef;AAED,wBAAsB,eAAe,CACnC,GAAG,EAAE,IAAI,CAAC,eAAe,EACzB,GAAG,EAAE,IAAI,CAAC,cAAc,EACxB,WAAW,EAAE,mBAAmB,EAChC,QAAQ,EAAE,GAAG,CAAC,MAAM,EAAE,cAAc,CAAC,EACrC,aAAa,EAAE,OAAO,GAAG,SAAS,GACjC,OAAO,CAAC,IAAI,CAAC,CAkBf;AAED,wBAAsB,iBAAiB,CACrC,GAAG,EAAE,IAAI,CAAC,eAAe,EACzB,GAAG,EAAE,IAAI,CAAC,cAAc,EACxB,WAAW,EAAE,mBAAmB,EAChC,QAAQ,EAAE,GAAG,CAAC,MAAM,EAAE,cAAc,CAAC,EACrC,OAAO,EAAE,MAAM,EACf,aAAa,EAAE,OAAO,GAAG,SAAS,EAClC,kBAAkB,EAAE,OAAO,GAAG,SAAS,GACtC,OAAO,CAAC,IAAI,CAAC,CA6Hf;AAED,wBAAgB,aAAa,CAC3B,WAAW,EAAE,mBAAmB,EAChC,IAAI,EAAE;IACJ,aAAa,CAAC,EAAE,KAAK,CAAC;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,EAAE,EAAE,MAAM,CAAC;QAAC,YAAY,CAAC,EAAE,MAAM,EAAE,CAAA;KAAE,CAAC,CAAC;IAC9E,YAAY,CAAC,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC;IAC9B,eAAe,CAAC,EAAE,OAAO,CAAC,iBAAiB,CAAC,CAAC;IAC7C,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,UAAU,CAAC,EAAE,iBAAiB,CAAC;CAChC,GACA,IAAI,CAoBN;AAID,wBAAsB,kBAAkB,CACtC,GAAG,EAAE,IAAI,CAAC,eAAe,EACzB,GAAG,EAAE,IAAI,CAAC,cAAc,EACxB,WAAW,EAAE,mBAAmB,EAChC,QAAQ,EAAE,GAAG,CAAC,MAAM,EAAE,cAAc,CAAC,EACrC,aAAa,EAAE,OAAO,GAAG,SAAS,EAClC,cAAc,EAAE,OAAO,qBAAqB,EAAE,oBAAoB,GACjE,OAAO,CAAC,IAAI,CAAC,CA2Ef"}
@@ -0,0 +1,8 @@
1
+ import type * as http from 'node:http';
2
+ import { type HqTranscriptEntry } from '@wrongstack/core/hq';
3
+ import type { TranscriptRing } from '../types.js';
4
+ export declare function handleApiSessions(res: http.ServerResponse): Promise<void>;
5
+ export declare function handleApiSessionEvents(req: http.IncomingMessage, res: http.ServerResponse, match: RegExpMatchArray, transcripts: Map<string, TranscriptRing>): Promise<void>;
6
+ export declare function handleApiSessionAgentMessages(req: http.IncomingMessage, res: http.ServerResponse, match: RegExpMatchArray, agentMessages: Map<string, HqTranscriptEntry[]>): Promise<void>;
7
+ export declare function handleApiAgentMessages(req: http.IncomingMessage, res: http.ServerResponse, match: RegExpMatchArray, agentMessages: Map<string, HqTranscriptEntry[]>): Promise<void>;
8
+ //# sourceMappingURL=session-handlers.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"session-handlers.d.ts","sourceRoot":"","sources":["../../../src/hq-server/routes/session-handlers.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,KAAK,IAAI,MAAM,WAAW,CAAC;AACvC,OAAO,EAGL,KAAK,iBAAiB,EACvB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAQlD,wBAAsB,iBAAiB,CAAC,GAAG,EAAE,IAAI,CAAC,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC,CAmC/E;AAED,wBAAsB,sBAAsB,CAC1C,GAAG,EAAE,IAAI,CAAC,eAAe,EACzB,GAAG,EAAE,IAAI,CAAC,cAAc,EACxB,KAAK,EAAE,gBAAgB,EACvB,WAAW,EAAE,GAAG,CAAC,MAAM,EAAE,cAAc,CAAC,GACvC,OAAO,CAAC,IAAI,CAAC,CA8Ef;AAED,wBAAsB,6BAA6B,CACjD,GAAG,EAAE,IAAI,CAAC,eAAe,EACzB,GAAG,EAAE,IAAI,CAAC,cAAc,EACxB,KAAK,EAAE,gBAAgB,EACvB,aAAa,EAAE,GAAG,CAAC,MAAM,EAAE,iBAAiB,EAAE,CAAC,GAC9C,OAAO,CAAC,IAAI,CAAC,CAiBf;AAED,wBAAsB,sBAAsB,CAC1C,GAAG,EAAE,IAAI,CAAC,eAAe,EACzB,GAAG,EAAE,IAAI,CAAC,cAAc,EACxB,KAAK,EAAE,gBAAgB,EACvB,aAAa,EAAE,GAAG,CAAC,MAAM,EAAE,iBAAiB,EAAE,CAAC,GAC9C,OAAO,CAAC,IAAI,CAAC,CAiBf"}
@@ -13,13 +13,14 @@ import type { TrustBoundary } from '@wrongstack/core/security';
13
13
  import { type createHqPersistence } from '@wrongstack/core/hq';
14
14
  import type { HqSnapshot, HqAlertEngine, HqCommandAuditLog, HqEventEnvelope, HqTranscriptEntry } from '@wrongstack/core/hq';
15
15
  import type { createMailboxHttpRouter } from '@wrongstack/core/coordination';
16
- import { type GlobalMailbox, type MailboxHttpAccessDecision, type MailboxHttpRateLimiter } from '@wrongstack/core/coordination';
16
+ import { type Mailbox, type MailboxHttpAccessDecision, type MailboxHttpRateLimiter } from '@wrongstack/core/coordination';
17
17
  import * as HqServerAuth from './auth.js';
18
18
  import * as HqServerUtils from './utils.js';
19
19
  export declare const setHqSecurityHeaders: typeof HqServerAuth.setHqSecurityHeaders;
20
20
  export declare const hasTrustedBrowserOrigin: typeof HqServerAuth.hasTrustedBrowserOrigin;
21
21
  export declare const authenticateBrowserRequest: typeof HqServerAuth.authenticateBrowserRequest;
22
22
  export declare const isTokenAuth: typeof HqServerAuth.isTokenAuth;
23
+ export declare const isCookieAuth: typeof HqServerAuth.isCookieAuth;
23
24
  export declare const setHqSessionCookie: typeof HqServerAuth.setHqSessionCookie;
24
25
  export declare const clearHqSessionCookie: typeof HqServerAuth.clearHqSessionCookie;
25
26
  export declare const serializeHqSessionCookie: typeof HqServerAuth.serializeHqSessionCookie;
@@ -31,16 +32,17 @@ export declare const readRequestBody: typeof HqServerUtils.readRequestBody;
31
32
  export declare const writeInvalidBody: typeof HqServerUtils.writeInvalidBody;
32
33
  export declare const sanitizeApiError: typeof HqServerUtils.sanitizeApiError;
33
34
  export declare const buildHttpUrl: typeof HqServerUtils.buildHttpUrl;
35
+ export declare const buildBootstrapHttpUrl: typeof HqServerUtils.buildBootstrapHttpUrl;
34
36
  export declare const buildClientWsUrl: typeof HqServerUtils.buildClientWsUrl;
35
37
  export declare const agentRingKey: typeof HqServerUtils.agentRingKey;
36
38
  export declare const agentMessageToEntry: typeof HqServerUtils.agentMessageToEntry;
37
39
  export declare const readLocalSubagentTranscript: typeof HqServerUtils.readLocalSubagentTranscript;
38
40
  export declare const lanIPv4Addresses: typeof HqServerUtils.lanIPv4Addresses;
39
41
  export declare const hqRuntimeMarkerPath: typeof HqServerUtils.hqRuntimeMarkerPath;
40
- import type { ConnectedClient, HqRouterMutableAuth, HqSnapshotBroadcaster, ProjectDetail, TranscriptRing } from './types.js';
42
+ import type { ConnectedClient, HqRouterMutableAuth, HqSessionEntry, HqSnapshotBroadcaster, ProjectDetail, TranscriptRing } from './types.js';
41
43
  export type { ConnectedClient, HqSnapshotBroadcaster, ProjectDetail, TranscriptRing, };
42
44
  export interface HqRouterMailboxGateway {
43
- mailbox: GlobalMailbox;
45
+ mailbox: Mailbox;
44
46
  router: ReturnType<typeof createMailboxHttpRouter>;
45
47
  }
46
48
  export interface HqRouterDeps {
@@ -49,9 +51,7 @@ export interface HqRouterDeps {
49
51
  listeningPort: number;
50
52
  trustedPublicOrigins: Set<string>;
51
53
  mutableAuth: HqRouterMutableAuth;
52
- sessions: Map<string, {
53
- createdAt: number;
54
- }>;
54
+ sessions: Map<string, HqSessionEntry>;
55
55
  loginAttempts: Map<string, {
56
56
  count: number;
57
57
  blockedUntil: number;
@@ -75,6 +75,8 @@ export interface HqRouterDeps {
75
75
  getMailboxGateway: (projectDir: string) => HqRouterMailboxGateway;
76
76
  /** Aggregate token-expiry stats for snapshot totals + alert engine. */
77
77
  getTokenStats?: (() => HqSnapshot['totals']['tokenStats'] | undefined) | undefined;
78
+ /** One-time bootstrap code store for token-to-cookie exchange. */
79
+ bootstrapStore?: import('@wrongstack/core/hq').HqBootstrapCodeStore | undefined;
78
80
  }
79
81
  /**
80
82
  * Create the HTTP request listener that handles all `/api/*` routes as well
@@ -1 +1 @@
1
- {"version":3,"file":"routes.d.ts","sourceRoot":"","sources":["../../src/hq-server/routes.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAIH,OAAO,KAAK,KAAK,IAAI,MAAM,WAAW,CAAC;AACvC,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,IAAI,CAAC;AACpC,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAC;AAC/D,OAAO,EAA6B,KAAK,mBAAmB,EAAmM,MAAM,qBAAqB,CAAC;AAC3R,OAAO,KAAK,EAAE,UAAU,EAAE,aAAa,EAAqD,iBAAiB,EAAE,eAAe,EAAmE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAChP,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,+BAA+B,CAAC;AAC7E,OAAO,EAAE,KAAK,aAAa,EAAE,KAAK,yBAAyB,EAAE,KAAK,sBAAsB,EAAqB,MAAM,+BAA+B,CAAC;AAGnJ,OAAO,KAAK,YAAY,MAAM,WAAW,CAAC;AAE1C,OAAO,KAAK,aAAa,MAAM,YAAY,CAAC;AAW5C,eAAO,MAAM,oBAAoB,0CAAoC,CAAC;AACtE,eAAO,MAAM,uBAAuB,6CAAuC,CAAC;AAC5E,eAAO,MAAM,0BAA0B,gDAA0C,CAAC;AAClF,eAAO,MAAM,WAAW,iCAA2B,CAAC;AACpD,eAAO,MAAM,kBAAkB,wCAAkC,CAAC;AAClE,eAAO,MAAM,oBAAoB,0CAAoC,CAAC;AACtE,eAAO,MAAM,wBAAwB,8CAAwC,CAAC;AAC9E,eAAO,MAAM,oBAAoB,0CAAoC,CAAC;AACtE,eAAO,MAAM,iBAAiB,uCAAiC,CAAC;AAChE,eAAO,MAAM,iBAAiB,eAAiC,CAAC;AAEhE,eAAO,MAAM,iBAAiB,wCAAkC,CAAC;AACjE,eAAO,MAAM,eAAe,sCAAgC,CAAC;AAC7D,eAAO,MAAM,gBAAgB,uCAAiC,CAAC;AAC/D,eAAO,MAAM,gBAAgB,uCAAiC,CAAC;AAC/D,eAAO,MAAM,YAAY,mCAA6B,CAAC;AACvD,eAAO,MAAM,gBAAgB,uCAAiC,CAAC;AAC/D,eAAO,MAAM,YAAY,mCAA6B,CAAC;AACvD,eAAO,MAAM,mBAAmB,0CAAoC,CAAC;AACrE,eAAO,MAAM,2BAA2B,kDAA4C,CAAC;AACrF,eAAO,MAAM,gBAAgB,uCAAiC,CAAC;AAC/D,eAAO,MAAM,mBAAmB,0CAAoC,CAAC;AAIrE,OAAO,KAAK,EACV,eAAe,EACf,mBAAmB,EACnB,qBAAqB,EACrB,aAAa,EACb,cAAc,EACf,MAAM,YAAY,CAAC;AAEpB,YAAY,EACV,eAAe,EACf,qBAAqB,EACrB,aAAa,EACb,cAAc,GACf,CAAC;AASF,MAAM,WAAW,sBAAsB;IACrC,OAAO,EAAE,aAAa,CAAC;IACvB,MAAM,EAAE,UAAU,CAAC,OAAO,uBAAuB,CAAC,CAAC;CACpD;AAED,MAAM,WAAW,YAAY;IAC3B,aAAa,EAAE,aAAa,CAAC;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,aAAa,EAAE,MAAM,CAAC;IACtB,oBAAoB,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IAClC,WAAW,EAAE,mBAAmB,CAAC;IACjC,QAAQ,EAAE,GAAG,CAAC,MAAM,EAAE;QAAE,SAAS,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAC7C,aAAa,EAAE,GAAG,CAAC,MAAM,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,YAAY,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACzF,OAAO,EAAE,GAAG,CAAC,SAAS,EAAE,eAAe,CAAC,CAAC;IACzC,QAAQ,EAAE,GAAG,CAAC,SAAS,CAAC,CAAC;IACzB,QAAQ,EAAE,eAAe,EAAE,CAAC;IAC5B,WAAW,EAAE,GAAG,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC;IACzC,aAAa,EAAE,GAAG,CAAC,MAAM,EAAE,iBAAiB,EAAE,CAAC,CAAC;IAChD,eAAe,EAAE,GAAG,CAAC,MAAM,EAAE,sBAAsB,CAAC,CAAC;IACrD,yBAAyB,EAAE,sBAAsB,CAAC;IAClD,WAAW,EAAE,aAAa,CAAC;IAC3B,QAAQ,EAAE,iBAAiB,CAAC;IAC5B,WAAW,EAAE,UAAU,CAAC,OAAO,mBAAmB,CAAC,CAAC;IACpD,OAAO,EAAE,MAAM,CAAC;IAChB,YAAY,EAAE,MAAM,CAAC;IACrB,kBAAkB,EAAE,OAAO,GAAG,SAAS,CAAC;IACxC,aAAa,EAAE,OAAO,GAAG,SAAS,CAAC;IACnC,uBAAuB,EAAE,CACvB,GAAG,EAAE,IAAI,CAAC,eAAe,EACzB,UAAU,EAAE,MAAM,KACf,yBAAyB,CAAC;IAC/B,iBAAiB,EAAE,CAAC,UAAU,EAAE,MAAM,KAAK,sBAAsB,CAAC;IAClE,uEAAuE;IACvE,aAAa,CAAC,EAAE,CAAC,MAAM,UAAU,CAAC,QAAQ,CAAC,CAAC,YAAY,CAAC,GAAG,SAAS,CAAC,GAAG,SAAS,CAAC;CACpF;AAID;;;;;;GAMG;AACH,wBAAgB,cAAc,CAAC,IAAI,EAAE,YAAY,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,eAAe,EAAE,GAAG,EAAE,IAAI,CAAC,cAAc,KAAK,OAAO,CAAC,IAAI,CAAC,CA6PzH"}
1
+ {"version":3,"file":"routes.d.ts","sourceRoot":"","sources":["../../src/hq-server/routes.ts"],"names":[],"mappings":"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"}
@@ -15,6 +15,50 @@ export declare const HQ_SNAPSHOT_BROADCAST_DEBOUNCE_MS = 100;
15
15
  * the dashboard — from doing a full rebuild + atomic disk write at up to 10 Hz.
16
16
  */
17
17
  export declare const HQ_SNAPSHOT_PERSIST_MIN_INTERVAL_MS = 3000;
18
+ /** Unsent bytes retained for one dashboard socket before it is disconnected. */
19
+ export declare const HQ_BROWSER_MAX_BUFFERED_BYTES: number;
20
+ /**
21
+ * Send an already-serialized frame to a WebSocket peer, enforcing
22
+ * per-client backpressure.
23
+ *
24
+ * A `readyState === OPEN` check alone says the socket is connected, not that
25
+ * anyone is reading it. `ws` buffers whatever it cannot flush, so a tab that
26
+ * stalled — backgrounded, throttled, paused in devtools — makes this process
27
+ * retain every subsequent broadcast for it. These are full fleet snapshots,
28
+ * historically as large as 9 MB each, which is the difference between a
29
+ * bounded cost and an unbounded one.
30
+ *
31
+ * Mirrors `sendSerialized` in `@wrongstack/webui-server`, deliberately
32
+ * duplicated rather than imported: HQ's snapshot path is in the CLI's
33
+ * always-loaded graph, and a static import would drag that whole package into
34
+ * boot, which the CLI keeps behind a lazy import on purpose.
35
+ */
36
+ export declare function sendGuarded(ws: WebSocket, data: string): boolean;
37
+ /**
38
+ * How long a session/fleet snapshot may go unrefreshed before it is treated
39
+ * as gone.
40
+ *
41
+ * `session.ended` is the only thing that used to remove these entries, so any
42
+ * session that died without sending one — crash, SIGKILL, dropped network,
43
+ * closed laptop — stayed in its client's map for as long as the socket lived.
44
+ * That is both retained memory and, worse, permanent weight in every
45
+ * `buildSnapshot()` broadcast to every browser.
46
+ *
47
+ * A live session republishes unconditionally every 2.5s (`session-bridge.ts`
48
+ * forces the snapshot on a timer, bypassing its own dedupe hash), so
49
+ * `receivedAt` is a true liveness signal rather than a change signal. Five
50
+ * minutes is 120 consecutive missed publishes — far past any GC pause,
51
+ * scheduler stall, or transient hiccup, so this never evicts a live session.
52
+ */
53
+ export declare const HQ_STALE_SNAPSHOT_MS: number;
54
+ /**
55
+ * Drop session/fleet/MCP entries whose publisher has stopped refreshing them.
56
+ *
57
+ * Runs from `buildSnapshot` because that is exactly the moment stale entries
58
+ * would otherwise be serialized into a broadcast — no separate timer to own,
59
+ * and no window where a reaped entry is still visible to a reader.
60
+ */
61
+ export declare function reapStaleClientState(clients: Map<WebSocket, ConnectedClient>, nowMs?: number): void;
18
62
  export declare function buildSnapshot(clients: Map<WebSocket, ConnectedClient>, options?: {
19
63
  tokenStats?: HqSnapshot['totals']['tokenStats'];
20
64
  }): HqSnapshot;
@@ -1 +1 @@
1
- {"version":3,"file":"snapshot.d.ts","sourceRoot":"","sources":["../../src/hq-server/snapshot.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAwD,mBAAmB,EAAE,eAAe,EAA0H,aAAa,EAA+D,UAAU,EAAE,MAAM,qBAAqB,CAAC;AACtV,OAAO,EAAE,SAAS,EAAE,MAAM,IAAI,CAAC;AAC/B,OAAO,KAAK,EAAE,eAAe,EAAE,qBAAqB,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAKxF,eAAO,MAAM,iCAAiC,MAAM,CAAC;AACrD;;;;;;GAMG;AACH,eAAO,MAAM,mCAAmC,OAAQ,CAAC;AAIzD,wBAAgB,aAAa,CAC3B,OAAO,EAAE,GAAG,CAAC,SAAS,EAAE,eAAe,CAAC,EACxC,OAAO,CAAC,EAAE;IAAE,UAAU,CAAC,EAAE,UAAU,CAAC,QAAQ,CAAC,CAAC,YAAY,CAAC,CAAA;CAAE,GAC5D,UAAU,CAySZ;AAID,wBAAgB,yBAAyB,CACvC,OAAO,EAAE,GAAG,CAAC,SAAS,EAAE,eAAe,CAAC,EACxC,QAAQ,EAAE,GAAG,CAAC,SAAS,CAAC,EACxB,WAAW,CAAC,EAAE,aAAa,GAC1B,qBAAqB,CA+DvB;AAID,wBAAgB,kBAAkB,CAChC,OAAO,EAAE,GAAG,CAAC,SAAS,EAAE,eAAe,CAAC,EACxC,SAAS,EAAE,MAAM,GAChB,aAAa,GAAG,IAAI,CAqDtB;AAID,wBAAgB,cAAc,CAAC,KAAK,EAAE,eAAe,EAAE,QAAQ,EAAE,GAAG,CAAC,SAAS,CAAC,GAAG,IAAI,CAMrF;AAED,8EAA8E;AAC9E,wBAAgB,sBAAsB,CACpC,OAAO,EAAE,mBAAmB,EAC5B,QAAQ,EAAE,GAAG,CAAC,SAAS,CAAC,GACvB,IAAI,CAKN"}
1
+ {"version":3,"file":"snapshot.d.ts","sourceRoot":"","sources":["../../src/hq-server/snapshot.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAIV,mBAAmB,EACnB,eAAe,EAOf,aAAa,EAIb,UAAU,EACX,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,SAAS,EAAE,MAAM,IAAI,CAAC;AAC/B,OAAO,KAAK,EAAE,eAAe,EAAE,qBAAqB,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAKxF,eAAO,MAAM,iCAAiC,MAAM,CAAC;AACrD;;;;;;GAMG;AACH,eAAO,MAAM,mCAAmC,OAAQ,CAAC;AAEzD,gFAAgF;AAChF,eAAO,MAAM,6BAA6B,QAAmB,CAAC;AAE9D;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,WAAW,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAqBhE;AAED;;;;;;;;;;;;;;;GAeG;AACH,eAAO,MAAM,oBAAoB,QAAa,CAAC;AAE/C;;;;;;GAMG;AACH,wBAAgB,oBAAoB,CAClC,OAAO,EAAE,GAAG,CAAC,SAAS,EAAE,eAAe,CAAC,EACxC,KAAK,GAAE,MAAmB,GACzB,IAAI,CAgBN;AAID,wBAAgB,aAAa,CAC3B,OAAO,EAAE,GAAG,CAAC,SAAS,EAAE,eAAe,CAAC,EACxC,OAAO,CAAC,EAAE;IAAE,UAAU,CAAC,EAAE,UAAU,CAAC,QAAQ,CAAC,CAAC,YAAY,CAAC,CAAA;CAAE,GAC5D,UAAU,CA0SZ;AAID,wBAAgB,yBAAyB,CACvC,OAAO,EAAE,GAAG,CAAC,SAAS,EAAE,eAAe,CAAC,EACxC,QAAQ,EAAE,GAAG,CAAC,SAAS,CAAC,EACxB,WAAW,CAAC,EAAE,aAAa,GAC1B,qBAAqB,CAgEvB;AAID,wBAAgB,kBAAkB,CAChC,OAAO,EAAE,GAAG,CAAC,SAAS,EAAE,eAAe,CAAC,EACxC,SAAS,EAAE,MAAM,GAChB,aAAa,GAAG,IAAI,CAqDtB;AAID,wBAAgB,cAAc,CAAC,KAAK,EAAE,eAAe,EAAE,QAAQ,EAAE,GAAG,CAAC,SAAS,CAAC,GAAG,IAAI,CAIrF;AAED,8EAA8E;AAC9E,wBAAgB,sBAAsB,CACpC,OAAO,EAAE,mBAAmB,EAC5B,QAAQ,EAAE,GAAG,CAAC,SAAS,CAAC,GACvB,IAAI,CAGN"}
@@ -3,10 +3,9 @@
3
3
  *
4
4
  * @module hq-server/types
5
5
  */
6
+ import type { HqAlertRuleConfig, HqBrowserMessage, HqClientCapability, HqClientRecord, HqEventEnvelope, HqFleetSnapshotPayload, HqMailboxSnapshotPayload, HqMcpServerHealth, HqPersistence, HqProjectIdentity, HqProjectRecord, HqQueuedCommand, HqRedactionPolicy, HqSessionSnapshotPayload, HqToken, HqTranscriptEntry } from '@wrongstack/core/hq';
6
7
  import type { WebSocket } from 'ws';
7
- import type { HqClientCapability, HqAlertRuleConfig, HqClientRecord, HqEventEnvelope, HqFleetSnapshotPayload, HqMailboxSnapshotPayload, HqMcpServerHealth, HqPersistence, HqProjectIdentity, HqProjectRecord, HqQueuedCommand, HqRedactionPolicy, HqSessionSnapshotPayload, HqToken, HqTranscriptEntry } from '@wrongstack/core/hq';
8
- import type { HqBrowserMessage } from '@wrongstack/core/hq';
9
- export type { HqClientCapability, HqClientRecord, HqEventEnvelope, HqFleetSnapshotPayload, HqMailboxSnapshotPayload, HqMcpServerHealth, HqPersistence, HqProjectIdentity, HqProjectRecord, HqQueuedCommand, HqRedactionPolicy, HqSessionSnapshotPayload, HqToken, HqTranscriptEntry, HqBrowserMessage, };
8
+ export type { HqBrowserMessage, HqClientCapability, HqClientRecord, HqEventEnvelope, HqFleetSnapshotPayload, HqMailboxSnapshotPayload, HqMcpServerHealth, HqPersistence, HqProjectIdentity, HqProjectRecord, HqQueuedCommand, HqRedactionPolicy, HqSessionSnapshotPayload, HqToken, HqTranscriptEntry, };
10
9
  export interface TrackedSessionSnapshot {
11
10
  payload: HqSessionSnapshotPayload;
12
11
  /** Epoch ms of the last `session.snapshot` refresh — freshness authority for the cleanup timer. */
@@ -45,7 +44,10 @@ export interface ConnectedClient {
45
44
  /** Per-client coordinator fleet snapshots, keyed by runId and owned by a session when known. */
46
45
  fleets: Map<string, TrackedFleetSnapshot>;
47
46
  /** Per-session MCP health snapshots, keyed by sessionId. */
48
- mcpSnapshots: Map<string, HqMcpServerHealth[]>;
47
+ mcpSnapshots: Map<string, {
48
+ servers: HqMcpServerHealth[];
49
+ receivedAt: number;
50
+ }>;
49
51
  /** Pending outbound commands (Phase 3 — control plane). */
50
52
  commandQueue: HqQueuedCommand[];
51
53
  }
@@ -63,6 +65,22 @@ export interface HqRouterMutableAuth {
63
65
  cookieSecret?: string | undefined;
64
66
  alertRules: HqAlertRuleConfig | undefined;
65
67
  }
68
+ /**
69
+ * Session record stored in the server-side `sessions` Map.
70
+ *
71
+ * - `kind: 'password'` — created by `/api/login`; full browser access.
72
+ * - `kind: 'token'` — created by `/api/auth/bootstrap`; scoped to the
73
+ * originating browser token's ID and capabilities so revocation/expiry
74
+ * of that token invalidates the session too.
75
+ */
76
+ export interface HqSessionEntry {
77
+ readonly createdAt: number;
78
+ readonly kind: 'password' | 'token';
79
+ /** For token sessions: the browser-token ID this session was minted from. */
80
+ readonly tokenId?: string | undefined;
81
+ /** For token sessions: capabilities inherited from the source token. */
82
+ readonly capabilities?: string[] | undefined;
83
+ }
66
84
  export interface TranscriptRing {
67
85
  entries: HqTranscriptEntry[];
68
86
  machineId?: string;
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/hq-server/types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/hq-server/types.ts"],"names":[],"mappings":"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"}
@@ -43,6 +43,14 @@ export declare function displayHost(host: string): string;
43
43
  export declare function readRequestBody(req: http.IncomingMessage, maxBytes?: number): Promise<string>;
44
44
  export declare function writeInvalidBody(res: http.ServerResponse, error: unknown): void;
45
45
  export declare function buildHttpUrl(host: string, port: number, token?: string): string;
46
+ /**
47
+ * Build the browser startup URL with a one-time bootstrap code in the
48
+ * fragment (`#bootstrap=…`). Fragments never reach HTTP access logs,
49
+ * Referer headers, or proxy caches — unlike query-string tokens. The
50
+ * SPA extracts the fragment, POSTs it to `/api/auth/bootstrap`, and
51
+ * receives only an HttpOnly session cookie.
52
+ */
53
+ export declare function buildBootstrapHttpUrl(host: string, port: number, bootstrapCode: string): string;
46
54
  export declare function buildClientWsUrl(host: string, port: number, token?: string): string;
47
55
  export declare function hqRuntimeMarkerPath(dataDir: string): string;
48
56
  /** Non-internal IPv4 addresses, so we can print URLs reachable from other machines. */
@@ -1 +1 @@
1
- {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../src/hq-server/utils.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,KAAK,KAAK,IAAI,MAAM,WAAW,CAAC;AAGvC,OAAO,KAAK,EAAE,eAAe,EAAE,aAAa,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAK7F,eAAO,MAAM,mBAAmB,OAAO,CAAC;AACxC,eAAO,MAAM,uBAAuB,MAAM,CAAC;AAC3C,eAAO,MAAM,eAAe,MAAM,CAAC;AAInC;;;GAGG;AACH,wBAAgB,WAAW,CAAC,GAAG,EAAE,GAAG,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,GAAG,EAAE,MAAM,GAAG,IAAI,CAMxE;AAID;;;;GAIG;AACH,wBAAgB,YAAY,CAAC,SAAS,EAAE,MAAM,GAAG,SAAS,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAEjF;AAED;;;;;GAKG;AACH,wBAAgB,mBAAmB,CAAC,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,iBAAiB,CAmBjF;AAED;;;;;;;GAOG;AACH,wBAAsB,2BAA2B,CAC/C,SAAS,EAAE,MAAM,EACjB,UAAU,EAAE,MAAM,GACjB,OAAO,CAAC,iBAAiB,EAAE,GAAG,IAAI,CAAC,CA2BrC;AAID,2DAA2D;AAC3D,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAM9D;AAED,qFAAqF;AACrF,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAEhD;AAMD,gFAAgF;AAChF,wBAAgB,eAAe,CAAC,GAAG,EAAE,IAAI,CAAC,eAAe,EAAE,QAAQ,SAAY,GAAG,OAAO,CAAC,MAAM,CAAC,CAuBhG;AAED,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,IAAI,CAAC,cAAc,EAAE,KAAK,EAAE,OAAO,GAAG,IAAI,CAI/E;AAID,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,CAI/E;AAED,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,CAInF;AAID,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAE3D;AAID,uFAAuF;AACvF,wBAAgB,gBAAgB,IAAI,MAAM,EAAE,CAa3C;AAID,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAIvF;AAID;;;;GAIG;AACH,wBAAgB,YAAY,CAAC,QAAQ,EAAE,MAAM,GAAG,SAAS,EAAE,SAAS,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,CAGhG;AAID;;;;GAIG;AACH,wBAAgB,sBAAsB,CAAC,WAAW,EAAE,aAAa,EAAE,KAAK,EAAE,eAAe,GAAG,IAAI,CA+B/F;AAID;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,OAAO,GAAG,MAAM,CAerD"}
1
+ {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../src/hq-server/utils.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,KAAK,KAAK,IAAI,MAAM,WAAW,CAAC;AAGvC,OAAO,KAAK,EAAE,eAAe,EAAE,aAAa,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAK7F,eAAO,MAAM,mBAAmB,OAAO,CAAC;AACxC,eAAO,MAAM,uBAAuB,MAAM,CAAC;AAC3C,eAAO,MAAM,eAAe,MAAM,CAAC;AAInC;;;GAGG;AACH,wBAAgB,WAAW,CAAC,GAAG,EAAE,GAAG,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,GAAG,EAAE,MAAM,GAAG,IAAI,CAMxE;AAID;;;;GAIG;AACH,wBAAgB,YAAY,CAAC,SAAS,EAAE,MAAM,GAAG,SAAS,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAEjF;AAED;;;;;GAKG;AACH,wBAAgB,mBAAmB,CAAC,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,iBAAiB,CAmBjF;AAED;;;;;;;GAOG;AACH,wBAAsB,2BAA2B,CAC/C,SAAS,EAAE,MAAM,EACjB,UAAU,EAAE,MAAM,GACjB,OAAO,CAAC,iBAAiB,EAAE,GAAG,IAAI,CAAC,CA2BrC;AAID,2DAA2D;AAC3D,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAM9D;AAED,qFAAqF;AACrF,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAEhD;AAMD,gFAAgF;AAChF,wBAAgB,eAAe,CAAC,GAAG,EAAE,IAAI,CAAC,eAAe,EAAE,QAAQ,SAAY,GAAG,OAAO,CAAC,MAAM,CAAC,CAuBhG;AAED,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,IAAI,CAAC,cAAc,EAAE,KAAK,EAAE,OAAO,GAAG,IAAI,CAI/E;AAID,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,CAI/E;AAED;;;;;;GAMG;AACH,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,GAAG,MAAM,CAI/F;AAED,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,CAInF;AAID,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAE3D;AAID,uFAAuF;AACvF,wBAAgB,gBAAgB,IAAI,MAAM,EAAE,CAa3C;AAID,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAIvF;AAID;;;;GAIG;AACH,wBAAgB,YAAY,CAAC,QAAQ,EAAE,MAAM,GAAG,SAAS,EAAE,SAAS,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,CAGhG;AAID;;;;GAIG;AACH,wBAAgB,sBAAsB,CAAC,WAAW,EAAE,aAAa,EAAE,KAAK,EAAE,eAAe,GAAG,IAAI,CA+B/F;AAID;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,OAAO,GAAG,MAAM,CAerD"}
@@ -3,8 +3,8 @@
3
3
  *
4
4
  * @module hq-server/ws
5
5
  */
6
- import { WebSocket } from 'ws';
7
6
  import type { HqCommandAuditLog, HqEventEnvelope, HqPersistence, HqRedactionPolicy, HqToken, HqTranscriptEntry } from '@wrongstack/core/hq';
7
+ import { WebSocket } from 'ws';
8
8
  import type { ConnectedClient, HqSnapshotBroadcaster, TranscriptRing } from './types.js';
9
9
  export declare function handleBrowser(ws: WebSocket, snapshotBroadcaster: HqSnapshotBroadcaster, browsers: Set<WebSocket>): void;
10
10
  export declare function handleClient(ws: WebSocket, clients: Map<WebSocket, ConnectedClient>, browsers: Set<WebSocket>, eventLog: HqEventEnvelope[], auth: {
@@ -1 +1 @@
1
- {"version":3,"file":"ws.d.ts","sourceRoot":"","sources":["../../src/hq-server/ws.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,EAAE,SAAS,EAAE,MAAM,IAAI,CAAC;AAE/B,OAAO,KAAK,EAAE,iBAAiB,EAAE,eAAe,EAAgI,aAAa,EAAmB,iBAAiB,EAAmD,OAAO,EAA6B,iBAAiB,EAAoB,MAAM,qBAAqB,CAAC;AACzX,OAAO,KAAK,EAAE,eAAe,EAAE,qBAAqB,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAmBzF,wBAAgB,aAAa,CAC3B,EAAE,EAAE,SAAS,EACb,mBAAmB,EAAE,qBAAqB,EAC1C,QAAQ,EAAE,GAAG,CAAC,SAAS,CAAC,GACvB,IAAI,CAsBN;AAID,wBAAgB,YAAY,CAC1B,EAAE,EAAE,SAAS,EACb,OAAO,EAAE,GAAG,CAAC,SAAS,EAAE,eAAe,CAAC,EACxC,QAAQ,EAAE,GAAG,CAAC,SAAS,CAAC,EACxB,QAAQ,EAAE,eAAe,EAAE,EAC3B,IAAI,EAAE;IACJ,KAAK,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;IAC5B,iBAAiB,EAAE,MAAM,OAAO,CAAC,iBAAiB,CAAC,GAAG,SAAS,CAAC;CACjE,EACD,mBAAmB,EAAE,qBAAqB,EAC1C,WAAW,EAAE,GAAG,CAAC,MAAM,EAAE,cAAc,CAAC,EACxC,aAAa,EAAE,GAAG,CAAC,MAAM,EAAE,iBAAiB,EAAE,CAAC,EAC/C,WAAW,CAAC,EAAE,aAAa,EAC3B,QAAQ,CAAC,EAAE,iBAAiB,GAC3B,IAAI,CA0dN"}
1
+ {"version":3,"file":"ws.d.ts","sourceRoot":"","sources":["../../src/hq-server/ws.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,KAAK,EACV,iBAAiB,EACjB,eAAe,EAMf,aAAa,EAEb,iBAAiB,EAGjB,OAAO,EAEP,iBAAiB,EAElB,MAAM,qBAAqB,CAAC;AAW7B,OAAO,EAAE,SAAS,EAAE,MAAM,IAAI,CAAC;AAE/B,OAAO,KAAK,EAAE,eAAe,EAAE,qBAAqB,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAkBzF,wBAAgB,aAAa,CAC3B,EAAE,EAAE,SAAS,EACb,mBAAmB,EAAE,qBAAqB,EAC1C,QAAQ,EAAE,GAAG,CAAC,SAAS,CAAC,GACvB,IAAI,CAsBN;AAID,wBAAgB,YAAY,CAC1B,EAAE,EAAE,SAAS,EACb,OAAO,EAAE,GAAG,CAAC,SAAS,EAAE,eAAe,CAAC,EACxC,QAAQ,EAAE,GAAG,CAAC,SAAS,CAAC,EACxB,QAAQ,EAAE,eAAe,EAAE,EAC3B,IAAI,EAAE;IACJ,KAAK,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;IAC5B,iBAAiB,EAAE,MAAM,OAAO,CAAC,iBAAiB,CAAC,GAAG,SAAS,CAAC;CACjE,EACD,mBAAmB,EAAE,qBAAqB,EAC1C,WAAW,EAAE,GAAG,CAAC,MAAM,EAAE,cAAc,CAAC,EACxC,aAAa,EAAE,GAAG,CAAC,MAAM,EAAE,iBAAiB,EAAE,CAAC,EAC/C,WAAW,CAAC,EAAE,aAAa,EAC3B,QAAQ,CAAC,EAAE,iBAAiB,GAC3B,IAAI,CA0dN"}
@@ -0,0 +1,39 @@
1
+ import {
2
+ BROWSER_HEARTBEAT_INTERVAL_MS,
3
+ CLIENT_CLEANUP_INTERVAL_MS,
4
+ CLIENT_TTL_MS,
5
+ DEFAULT_HOST,
6
+ DEFAULT_PORT,
7
+ HQ_HTML,
8
+ HqInsecureExposureError,
9
+ MAX_EVENT_LOG,
10
+ MAX_NON_STRICT_PORT_SCAN,
11
+ SESSION_SNAPSHOT_TTL_MS,
12
+ agentMessageToEntry,
13
+ agentRingKey,
14
+ decodePathSegment,
15
+ readLocalSubagentTranscript,
16
+ sanitizeApiError,
17
+ startHqServer
18
+ } from "./chunk-OI7GWJDS.js";
19
+ import "./chunk-Q5GTM25S.js";
20
+ import "./chunk-7OCVIDC7.js";
21
+ export {
22
+ BROWSER_HEARTBEAT_INTERVAL_MS,
23
+ CLIENT_CLEANUP_INTERVAL_MS,
24
+ CLIENT_TTL_MS,
25
+ DEFAULT_HOST,
26
+ DEFAULT_PORT,
27
+ HQ_HTML,
28
+ HqInsecureExposureError,
29
+ MAX_EVENT_LOG,
30
+ MAX_NON_STRICT_PORT_SCAN,
31
+ SESSION_SNAPSHOT_TTL_MS,
32
+ agentMessageToEntry,
33
+ agentRingKey,
34
+ decodePathSegment,
35
+ readLocalSubagentTranscript,
36
+ sanitizeApiError,
37
+ startHqServer
38
+ };
39
+ //# sourceMappingURL=hq-server-6AQ3BXZA.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": [],
4
+ "sourcesContent": [],
5
+ "mappings": "",
6
+ "names": []
7
+ }
@@ -9,10 +9,10 @@
9
9
  */
10
10
  import { type TrustBoundary } from '@wrongstack/core/security';
11
11
  import { HQ_HTML } from './hq-recovery-html.js';
12
- import { readLocalSubagentTranscript, agentRingKey, agentMessageToEntry, decodePathSegment, sanitizeApiError } from './hq-server/routes.js';
12
+ import { agentMessageToEntry, agentRingKey, decodePathSegment, readLocalSubagentTranscript, sanitizeApiError } from './hq-server/routes.js';
13
13
  import type { ConnectedClient, TranscriptRing } from './hq-server/types.js';
14
- export type { ConnectedClient, TranscriptRing };
15
14
  export { HqInsecureExposureError } from '@wrongstack/core/hq';
15
+ export type { ConnectedClient, TranscriptRing };
16
16
  export { HQ_HTML };
17
17
  export declare const DEFAULT_HOST = "127.0.0.1";
18
18
  export declare const DEFAULT_PORT = 3499;
@@ -22,7 +22,7 @@ export declare const CLIENT_TTL_MS = 60000;
22
22
  export declare const CLIENT_CLEANUP_INTERVAL_MS = 30000;
23
23
  export declare const BROWSER_HEARTBEAT_INTERVAL_MS = 15000;
24
24
  export declare const SESSION_SNAPSHOT_TTL_MS = 30000;
25
- export { readLocalSubagentTranscript, decodePathSegment, sanitizeApiError, agentRingKey, agentMessageToEntry, };
25
+ export { agentMessageToEntry, agentRingKey, decodePathSegment, readLocalSubagentTranscript, sanitizeApiError, };
26
26
  export interface HqServerOptions {
27
27
  /** Policy authority for control-plane command enqueue decisions. */
28
28
  trustBoundary?: TrustBoundary | undefined;
@@ -1 +1 @@
1
- {"version":3,"file":"hq-server.d.ts","sourceRoot":"","sources":["../src/hq-server.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAQH,OAAO,EAAoC,KAAK,aAAa,EAAE,MAAM,2BAA2B,CAAC;AAKjG,OAAO,EAAE,OAAO,EAAE,MAAM,uBAAuB,CAAC;AAIhD,OAAO,EAYL,2BAA2B,EAC3B,YAAY,EACZ,mBAAmB,EACnB,iBAAiB,EACjB,gBAAgB,EACjB,MAAM,uBAAuB,CAAC;AAS/B,OAAO,KAAK,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAC5E,YAAY,EAAE,eAAe,EAAE,cAAc,EAAE,CAAC;AAEhD,OAAO,EAAE,uBAAuB,EAAE,MAAM,qBAAqB,CAAC;AAI9D,OAAO,EAAE,OAAO,EAAE,CAAC;AACnB,eAAO,MAAM,YAAY,cAAc,CAAC;AACxC,eAAO,MAAM,YAAY,OAAO,CAAC;AACjC,eAAO,MAAM,aAAa,OAAO,CAAC;AAClC,eAAO,MAAM,wBAAwB,KAAK,CAAC;AAC3C,eAAO,MAAM,aAAa,QAAS,CAAC;AACpC,eAAO,MAAM,0BAA0B,QAAS,CAAC;AACjD,eAAO,MAAM,6BAA6B,QAAS,CAAC;AACpD,eAAO,MAAM,uBAAuB,QAAS,CAAC;AAE9C,OAAO,EACL,2BAA2B,EAC3B,iBAAiB,EACjB,gBAAgB,EAChB,YAAY,EACZ,mBAAmB,GACpB,CAAC;AAIF,MAAM,WAAW,eAAe;IAC9B,oEAAoE;IACpE,aAAa,CAAC,EAAE,aAAa,GAAG,SAAS,CAAC;IAC1C,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,0BAA0B,CAAC,EAAE,MAAM,CAAC;IACpC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,uBAAuB,CAAC,EAAE,MAAM,CAAC;IACjC,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAC7B;;;;;;;;;OASG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,uBAAuB;IACtC,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE;QACT,iBAAiB,EAAE,MAAM,CAAC;QAC1B,mBAAmB,CAAC,EAAE,MAAM,CAAC;KAC9B,CAAC;IACF,WAAW,EAAE,OAAO,CAAC;IACrB,gBAAgB,EAAE,OAAO,CAAC;IAC1B,YAAY,EAAE,OAAO,CAAC;CACvB;AAED,MAAM,MAAM,eAAe,GAAG,uBAAuB,CAAC;AAEtD,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,aAAa,CAAC,EAAE,eAAe,CAAC;IAChC,iBAAiB,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACxC,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CACxB;AAID,wBAAsB,aAAa,CAAC,OAAO,GAAE,eAAoB,GAAG,OAAO,CAAC,cAAc,CAAC,CAM1F"}
1
+ {"version":3,"file":"hq-server.d.ts","sourceRoot":"","sources":["../src/hq-server.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAgCH,OAAO,EAAoC,KAAK,aAAa,EAAE,MAAM,2BAA2B,CAAC;AAEjG,OAAO,EAAE,OAAO,EAAE,MAAM,uBAAuB,CAAC;AAIhD,OAAO,EACL,mBAAmB,EACnB,YAAY,EAMZ,iBAAiB,EASjB,2BAA2B,EAC3B,gBAAgB,EACjB,MAAM,uBAAuB,CAAC;AAO/B,OAAO,KAAK,EAAE,eAAe,EAAkB,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAG5F,OAAO,EAAE,uBAAuB,EAAE,MAAM,qBAAqB,CAAC;AAC9D,YAAY,EAAE,eAAe,EAAE,cAAc,EAAE,CAAC;AAIhD,OAAO,EAAE,OAAO,EAAE,CAAC;AACnB,eAAO,MAAM,YAAY,cAAc,CAAC;AACxC,eAAO,MAAM,YAAY,OAAO,CAAC;AACjC,eAAO,MAAM,aAAa,OAAO,CAAC;AAClC,eAAO,MAAM,wBAAwB,KAAK,CAAC;AAC3C,eAAO,MAAM,aAAa,QAAS,CAAC;AACpC,eAAO,MAAM,0BAA0B,QAAS,CAAC;AACjD,eAAO,MAAM,6BAA6B,QAAS,CAAC;AACpD,eAAO,MAAM,uBAAuB,QAAS,CAAC;AAE9C,OAAO,EACL,mBAAmB,EACnB,YAAY,EACZ,iBAAiB,EACjB,2BAA2B,EAC3B,gBAAgB,GACjB,CAAC;AAIF,MAAM,WAAW,eAAe;IAC9B,oEAAoE;IACpE,aAAa,CAAC,EAAE,aAAa,GAAG,SAAS,CAAC;IAC1C,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,0BAA0B,CAAC,EAAE,MAAM,CAAC;IACpC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,uBAAuB,CAAC,EAAE,MAAM,CAAC;IACjC,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAC7B;;;;;;;;;OASG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,uBAAuB;IACtC,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE;QACT,iBAAiB,EAAE,MAAM,CAAC;QAC1B,mBAAmB,CAAC,EAAE,MAAM,CAAC;KAC9B,CAAC;IACF,WAAW,EAAE,OAAO,CAAC;IACrB,gBAAgB,EAAE,OAAO,CAAC;IAC1B,YAAY,EAAE,OAAO,CAAC;CACvB;AAED,MAAM,MAAM,eAAe,GAAG,uBAAuB,CAAC;AAEtD,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,aAAa,CAAC,EAAE,eAAe,CAAC;IAChC,iBAAiB,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACxC,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CACxB;AAID,wBAAsB,aAAa,CAAC,OAAO,GAAE,eAAoB,GAAG,OAAO,CAAC,cAAc,CAAC,CAM1F"}
@@ -0,0 +1,8 @@
1
+ import {
2
+ parseTokenTtlValue
3
+ } from "./chunk-BGFM3PD7.js";
4
+ import "./chunk-7OCVIDC7.js";
5
+ export {
6
+ parseTokenTtlValue
7
+ };
8
+ //# sourceMappingURL=hq-ttl-U2FAYFAT.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": [],
4
+ "sourcesContent": [],
5
+ "mappings": "",
6
+ "names": []
7
+ }
@@ -0,0 +1,114 @@
1
+ import "./chunk-7OCVIDC7.js";
2
+
3
+ // src/hq-tunnel.ts
4
+ import { spawn } from "node:child_process";
5
+ var QUICK_TUNNEL_URL = /https:\/\/[a-z0-9-]+\.trycloudflare\.com\b/i;
6
+ var QUICK_TUNNEL_REGISTERED = /\bRegistered tunnel connection\b/i;
7
+ var START_TIMEOUT_MS = 3e4;
8
+ var MAX_LOG_CHARS = 16384;
9
+ function extractQuickTunnelUrl(output) {
10
+ return output.match(QUICK_TUNNEL_URL)?.[0];
11
+ }
12
+ function hasRegisteredQuickTunnelConnection(output) {
13
+ return QUICK_TUNNEL_REGISTERED.test(output);
14
+ }
15
+ function tail(current, chunk) {
16
+ return `${current}${String(chunk)}`.slice(-MAX_LOG_CHARS);
17
+ }
18
+ function startHqQuickTunnel(originUrl, options = {}) {
19
+ return new Promise((resolve, reject) => {
20
+ const executable = options.executable ?? "cloudflared";
21
+ let child;
22
+ try {
23
+ child = spawn(executable, ["tunnel", "--url", originUrl], {
24
+ stdio: ["ignore", "pipe", "pipe"],
25
+ windowsHide: true
26
+ });
27
+ } catch (error) {
28
+ reject(error);
29
+ return;
30
+ }
31
+ let output = "";
32
+ let settled = false;
33
+ let closing = false;
34
+ let publicUrl;
35
+ const fail = (message) => {
36
+ if (settled) return;
37
+ settled = true;
38
+ clearTimeout(timer);
39
+ if (!child.killed) child.kill();
40
+ reject(new Error(message));
41
+ };
42
+ const inspect = (chunk) => {
43
+ output = tail(output, chunk);
44
+ if (settled) return;
45
+ const found = extractQuickTunnelUrl(output);
46
+ if (found) publicUrl = found;
47
+ if (!publicUrl || !hasRegisteredQuickTunnelConnection(output)) return;
48
+ const readyUrl = publicUrl;
49
+ settled = true;
50
+ clearTimeout(timer);
51
+ resolve({
52
+ url: readyUrl,
53
+ close: () => new Promise((done) => {
54
+ if (child.exitCode !== null || child.signalCode !== null) {
55
+ done();
56
+ return;
57
+ }
58
+ closing = true;
59
+ const forceTimer = setTimeout(() => {
60
+ if (child.exitCode === null && child.signalCode === null) child.kill("SIGKILL");
61
+ }, 3e3);
62
+ child.once("exit", () => {
63
+ clearTimeout(forceTimer);
64
+ done();
65
+ });
66
+ child.kill();
67
+ })
68
+ });
69
+ };
70
+ child.stdout.on("data", inspect);
71
+ child.stderr.on("data", inspect);
72
+ child.once("error", (error) => {
73
+ const detail = error.code === "ENOENT" ? "`cloudflared` was not found in PATH. Install Cloudflare Tunnel, then retry." : `cloudflared failed to start: ${error.message}`;
74
+ fail(detail);
75
+ });
76
+ child.once("exit", (code, signal) => {
77
+ const suffix = output.trim() ? `
78
+ ${output.trim()}` : "";
79
+ if (!settled) {
80
+ fail(
81
+ `cloudflared exited before publishing a tunnel URL (code ${code ?? signal ?? "unknown"}).${suffix}`
82
+ );
83
+ } else if (!closing) {
84
+ options.onUnexpectedExit?.(
85
+ `Cloudflare Quick Tunnel ${publicUrl ?? ""} stopped (code ${code ?? signal ?? "unknown"}).${suffix}`
86
+ );
87
+ }
88
+ });
89
+ const timer = setTimeout(() => {
90
+ fail(
91
+ `${publicUrl ? "Timed out waiting for cloudflared to register the Quick Tunnel connection." : "Timed out waiting for a trycloudflare.com URL from cloudflared."}${output.trim() ? `
92
+ ${output.trim()}` : ""}`
93
+ );
94
+ }, options.timeoutMs ?? START_TIMEOUT_MS);
95
+ });
96
+ }
97
+ function buildPublicHqUrl(tunnelUrl, localBrowserUrl, includeBootstrap) {
98
+ const publicUrl = new URL(tunnelUrl);
99
+ if (includeBootstrap && localBrowserUrl) {
100
+ try {
101
+ const localHash = new URL(localBrowserUrl).hash;
102
+ if (localHash.startsWith("#bootstrap=")) publicUrl.hash = localHash.slice(1);
103
+ } catch {
104
+ }
105
+ }
106
+ return publicUrl.toString();
107
+ }
108
+ export {
109
+ buildPublicHqUrl,
110
+ extractQuickTunnelUrl,
111
+ hasRegisteredQuickTunnelConnection,
112
+ startHqQuickTunnel
113
+ };
114
+ //# sourceMappingURL=hq-tunnel-RFKGC4HI.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../src/hq-tunnel.ts"],
4
+ "sourcesContent": ["import { type ChildProcessByStdio, spawn } from 'node:child_process';\nimport type { Readable } from 'node:stream';\n\nconst QUICK_TUNNEL_URL = /https:\\/\\/[a-z0-9-]+\\.trycloudflare\\.com\\b/i;\nconst QUICK_TUNNEL_REGISTERED = /\\bRegistered tunnel connection\\b/i;\nconst START_TIMEOUT_MS = 30_000;\nconst MAX_LOG_CHARS = 16_384;\n\nexport interface HqQuickTunnelHandle {\n url: string;\n close(): Promise<void>;\n}\n\nexport interface HqQuickTunnelOptions {\n executable?: string | undefined;\n timeoutMs?: number | undefined;\n onUnexpectedExit?: ((message: string) => void) | undefined;\n}\n\nexport function extractQuickTunnelUrl(output: string): string | undefined {\n return output.match(QUICK_TUNNEL_URL)?.[0];\n}\n\n/** cloudflared prints the public URL before its edge connection is usable. */\nexport function hasRegisteredQuickTunnelConnection(output: string): boolean {\n return QUICK_TUNNEL_REGISTERED.test(output);\n}\n\nfunction tail(current: string, chunk: unknown): string {\n return `${current}${String(chunk)}`.slice(-MAX_LOG_CHARS);\n}\n\n/** Start an anonymous TryCloudflare tunnel and tie it to the HQ process lifecycle. */\nexport function startHqQuickTunnel(\n originUrl: string,\n options: HqQuickTunnelOptions = {},\n): Promise<HqQuickTunnelHandle> {\n return new Promise((resolve, reject) => {\n const executable = options.executable ?? 'cloudflared';\n let child: ChildProcessByStdio<null, Readable, Readable>;\n try {\n child = spawn(executable, ['tunnel', '--url', originUrl], {\n stdio: ['ignore', 'pipe', 'pipe'],\n windowsHide: true,\n });\n } catch (error) {\n reject(error);\n return;\n }\n\n let output = '';\n let settled = false;\n let closing = false;\n let publicUrl: string | undefined;\n\n const fail = (message: string): void => {\n if (settled) return;\n settled = true;\n clearTimeout(timer);\n if (!child.killed) child.kill();\n reject(new Error(message));\n };\n\n const inspect = (chunk: unknown): void => {\n output = tail(output, chunk);\n if (settled) return;\n const found = extractQuickTunnelUrl(output);\n if (found) publicUrl = found;\n if (!publicUrl || !hasRegisteredQuickTunnelConnection(output)) return;\n const readyUrl = publicUrl;\n settled = true;\n clearTimeout(timer);\n resolve({\n url: readyUrl,\n close: () =>\n new Promise<void>((done) => {\n if (child.exitCode !== null || child.signalCode !== null) {\n done();\n return;\n }\n closing = true;\n const forceTimer = setTimeout(() => {\n if (child.exitCode === null && child.signalCode === null) child.kill('SIGKILL');\n }, 3_000);\n child.once('exit', () => {\n clearTimeout(forceTimer);\n done();\n });\n child.kill();\n }),\n });\n };\n\n child.stdout.on('data', inspect);\n child.stderr.on('data', inspect);\n child.once('error', (error: NodeJS.ErrnoException) => {\n const detail =\n error.code === 'ENOENT'\n ? '`cloudflared` was not found in PATH. Install Cloudflare Tunnel, then retry.'\n : `cloudflared failed to start: ${error.message}`;\n fail(detail);\n });\n child.once('exit', (code, signal) => {\n const suffix = output.trim() ? `\\n${output.trim()}` : '';\n if (!settled) {\n fail(\n `cloudflared exited before publishing a tunnel URL (code ${code ?? signal ?? 'unknown'}).${suffix}`,\n );\n } else if (!closing) {\n options.onUnexpectedExit?.(\n `Cloudflare Quick Tunnel ${publicUrl ?? ''} stopped (code ${code ?? signal ?? 'unknown'}).${suffix}`,\n );\n }\n });\n\n const timer = setTimeout(() => {\n fail(\n `${\n publicUrl\n ? 'Timed out waiting for cloudflared to register the Quick Tunnel connection.'\n : 'Timed out waiting for a trycloudflare.com URL from cloudflared.'\n }${output.trim() ? `\\n${output.trim()}` : ''}`,\n );\n }, options.timeoutMs ?? START_TIMEOUT_MS);\n });\n}\n\nexport function buildPublicHqUrl(\n tunnelUrl: string,\n localBrowserUrl: string | undefined,\n includeBootstrap: boolean,\n): string {\n const publicUrl = new URL(tunnelUrl);\n if (includeBootstrap && localBrowserUrl) {\n // Preserve the bootstrap fragment (#bootstrap=\u2026) from the local URL so\n // the tunnel user gets the same one-time code exchange path. Never copy\n // query-string tokens \u2014 those are the reusable credential we are\n // eliminating.\n try {\n const localHash = new URL(localBrowserUrl).hash;\n if (localHash.startsWith('#bootstrap=')) publicUrl.hash = localHash.slice(1);\n } catch {\n // Malformed local URL \u2014 skip.\n }\n }\n return publicUrl.toString();\n}\n"],
5
+ "mappings": "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",
6
+ "names": []
7
+ }
@@ -12,5 +12,5 @@ export declare function extractQuickTunnelUrl(output: string): string | undefine
12
12
  export declare function hasRegisteredQuickTunnelConnection(output: string): boolean;
13
13
  /** Start an anonymous TryCloudflare tunnel and tie it to the HQ process lifecycle. */
14
14
  export declare function startHqQuickTunnel(originUrl: string, options?: HqQuickTunnelOptions): Promise<HqQuickTunnelHandle>;
15
- export declare function buildPublicHqUrl(tunnelUrl: string, localBrowserUrl: string | undefined, includeToken: boolean): string;
15
+ export declare function buildPublicHqUrl(tunnelUrl: string, localBrowserUrl: string | undefined, includeBootstrap: boolean): string;
16
16
  //# sourceMappingURL=hq-tunnel.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"hq-tunnel.d.ts","sourceRoot":"","sources":["../src/hq-tunnel.ts"],"names":[],"mappings":"AAQA,MAAM,WAAW,mBAAmB;IAClC,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CACxB;AAED,MAAM,WAAW,oBAAoB;IACnC,UAAU,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAChC,SAAS,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC/B,gBAAgB,CAAC,EAAE,CAAC,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC,GAAG,SAAS,CAAC;CAC5D;AAED,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAExE;AAED,8EAA8E;AAC9E,wBAAgB,kCAAkC,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAE1E;AAMD,sFAAsF;AACtF,wBAAgB,kBAAkB,CAChC,SAAS,EAAE,MAAM,EACjB,OAAO,GAAE,oBAAyB,GACjC,OAAO,CAAC,mBAAmB,CAAC,CAyF9B;AAED,wBAAgB,gBAAgB,CAC9B,SAAS,EAAE,MAAM,EACjB,eAAe,EAAE,MAAM,GAAG,SAAS,EACnC,YAAY,EAAE,OAAO,GACpB,MAAM,CAOR"}
1
+ {"version":3,"file":"hq-tunnel.d.ts","sourceRoot":"","sources":["../src/hq-tunnel.ts"],"names":[],"mappings":"AAQA,MAAM,WAAW,mBAAmB;IAClC,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CACxB;AAED,MAAM,WAAW,oBAAoB;IACnC,UAAU,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAChC,SAAS,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC/B,gBAAgB,CAAC,EAAE,CAAC,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC,GAAG,SAAS,CAAC;CAC5D;AAED,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAExE;AAED,8EAA8E;AAC9E,wBAAgB,kCAAkC,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAE1E;AAMD,sFAAsF;AACtF,wBAAgB,kBAAkB,CAChC,SAAS,EAAE,MAAM,EACjB,OAAO,GAAE,oBAAyB,GACjC,OAAO,CAAC,mBAAmB,CAAC,CAyF9B;AAED,wBAAgB,gBAAgB,CAC9B,SAAS,EAAE,MAAM,EACjB,eAAe,EAAE,MAAM,GAAG,SAAS,EACnC,gBAAgB,EAAE,OAAO,GACxB,MAAM,CAeR"}