@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.
- package/data/providers.json +0 -24
- package/dist/acp-A5OSIU2P.js +824 -0
- package/dist/acp-A5OSIU2P.js.map +7 -0
- package/dist/acp-server-agent.d.ts.map +1 -1
- package/dist/arg-parser.d.ts.map +1 -1
- package/dist/audit-2ZSFGNIF.js +102 -0
- package/dist/audit-2ZSFGNIF.js.map +7 -0
- package/dist/auth-CJWQJVRH.js +504 -0
- package/dist/auth-CJWQJVRH.js.map +7 -0
- package/dist/auth-menu/auth-menu-audit.d.ts +0 -4
- package/dist/auth-menu/auth-menu-audit.d.ts.map +1 -1
- package/dist/bench-7ZDWSNEF.js +278 -0
- package/dist/bench-7ZDWSNEF.js.map +7 -0
- package/dist/boot/brain-decision-log.d.ts +7 -5
- package/dist/boot/brain-decision-log.d.ts.map +1 -1
- package/dist/boot/dispatch-webui.d.ts +5 -8
- package/dist/boot/dispatch-webui.d.ts.map +1 -1
- package/dist/boot/system-prompt-builder.d.ts +3 -0
- package/dist/boot/system-prompt-builder.d.ts.map +1 -1
- package/dist/boot/tui-coordinator-callbacks.d.ts +45 -0
- package/dist/boot/tui-coordinator-callbacks.d.ts.map +1 -0
- package/dist/boot/tui-project-switch.d.ts +2 -3
- package/dist/boot/tui-project-switch.d.ts.map +1 -1
- package/dist/boot/tui-runtime-state.d.ts +5 -6
- package/dist/boot/tui-runtime-state.d.ts.map +1 -1
- package/dist/boot/tui-session-resume.d.ts.map +1 -1
- package/dist/boot/tui-settings-adapter.d.ts +2 -3
- package/dist/boot/tui-settings-adapter.d.ts.map +1 -1
- package/dist/boot.d.ts.map +1 -1
- package/dist/brain-menu/panel-service.d.ts.map +1 -1
- package/dist/chimera-review-task.d.ts +6 -0
- package/dist/chimera-review-task.d.ts.map +1 -0
- package/dist/chimera-reviewer-policy.d.ts +34 -0
- package/dist/chimera-reviewer-policy.d.ts.map +1 -0
- package/dist/chronicle-QQEQFSSE.js +256 -0
- package/dist/chronicle-QQEQFSSE.js.map +7 -0
- package/dist/chunk-5N34EWJR.js +418 -0
- package/dist/chunk-5N34EWJR.js.map +7 -0
- package/dist/chunk-66T43Q4Y.js +90 -0
- package/dist/chunk-66T43Q4Y.js.map +7 -0
- package/dist/chunk-7OCVIDC7.js +11 -0
- package/dist/chunk-7OCVIDC7.js.map +7 -0
- package/dist/chunk-ABXK4VVY.js +84 -0
- package/dist/chunk-ABXK4VVY.js.map +7 -0
- package/dist/chunk-AXVZMEWG.js +306 -0
- package/dist/chunk-AXVZMEWG.js.map +7 -0
- package/dist/chunk-AZESNNIC.js +216 -0
- package/dist/chunk-AZESNNIC.js.map +7 -0
- package/dist/chunk-BGFM3PD7.js +41 -0
- package/dist/chunk-BGFM3PD7.js.map +7 -0
- package/dist/chunk-BQCAJ7FI.js +425 -0
- package/dist/chunk-BQCAJ7FI.js.map +7 -0
- package/dist/chunk-DPJZQCVP.js +13 -0
- package/dist/chunk-DPJZQCVP.js.map +7 -0
- package/dist/chunk-F4PEGAJZ.js +176 -0
- package/dist/chunk-F4PEGAJZ.js.map +7 -0
- package/dist/chunk-IHBYBYGA.js +443 -0
- package/dist/chunk-IHBYBYGA.js.map +7 -0
- package/dist/chunk-JBSQ7ONN.js +1023 -0
- package/dist/chunk-JBSQ7ONN.js.map +7 -0
- package/dist/chunk-JBTFWWKV.js +1325 -0
- package/dist/chunk-JBTFWWKV.js.map +7 -0
- package/dist/chunk-JUHRI6OV.js +100 -0
- package/dist/chunk-JUHRI6OV.js.map +7 -0
- package/dist/chunk-OI7GWJDS.js +3303 -0
- package/dist/chunk-OI7GWJDS.js.map +7 -0
- package/dist/chunk-OP47B3IX.js +142 -0
- package/dist/chunk-OP47B3IX.js.map +7 -0
- package/dist/chunk-PJHET45A.js +158 -0
- package/dist/chunk-PJHET45A.js.map +7 -0
- package/dist/chunk-Q5GTM25S.js +17 -0
- package/dist/chunk-Q5GTM25S.js.map +7 -0
- package/dist/chunk-QD544J2B.js +19 -0
- package/dist/chunk-QD544J2B.js.map +7 -0
- package/dist/chunk-QUNHS6O3.js +258 -0
- package/dist/chunk-QUNHS6O3.js.map +7 -0
- package/dist/chunk-TADVX644.js +480 -0
- package/dist/chunk-TADVX644.js.map +7 -0
- package/dist/chunk-TGDHN4LM.js +81 -0
- package/dist/chunk-TGDHN4LM.js.map +7 -0
- package/dist/chunk-TYO2OVAD.js +50 -0
- package/dist/chunk-TYO2OVAD.js.map +7 -0
- package/dist/chunk-VCYZ3WZV.js +14 -0
- package/dist/chunk-VCYZ3WZV.js.map +7 -0
- package/dist/chunk-VJUEZZYB.js +29 -0
- package/dist/chunk-VJUEZZYB.js.map +7 -0
- package/dist/chunk-WHOIR577.js +1 -0
- package/dist/chunk-WHOIR577.js.map +7 -0
- package/dist/chunk-WY7KKOUK.js +460 -0
- package/dist/chunk-WY7KKOUK.js.map +7 -0
- package/dist/chunk-XJXDOF63.js +28 -0
- package/dist/chunk-XJXDOF63.js.map +7 -0
- package/dist/chunk-XWEGWYDU.js +560 -0
- package/dist/chunk-XWEGWYDU.js.map +7 -0
- package/dist/chunk-YWUPHRGB.js +346 -0
- package/dist/chunk-YWUPHRGB.js.map +7 -0
- package/dist/chunk-Z7YGASQP.js +313 -0
- package/dist/chunk-Z7YGASQP.js.map +7 -0
- package/dist/cli-entry-main.d.ts +2 -0
- package/dist/cli-entry-main.d.ts.map +1 -0
- package/dist/cli-entry-point.d.ts +3 -3
- package/dist/cli-entry-point.d.ts.map +1 -1
- package/dist/cli-main-RTY35OPD.js +29268 -0
- package/dist/cli-main-RTY35OPD.js.map +7 -0
- package/dist/cli-main-helpers.d.ts +21 -0
- package/dist/cli-main-helpers.d.ts.map +1 -0
- package/dist/cli-main.d.ts +25 -1
- package/dist/cli-main.d.ts.map +1 -1
- package/dist/context-limit.d.ts +48 -0
- package/dist/context-limit.d.ts.map +1 -1
- package/dist/diag-doctor-OQ3AA63O.js +170 -0
- package/dist/diag-doctor-OQ3AA63O.js.map +7 -0
- package/dist/execute-deps.d.ts +11 -12
- package/dist/execute-deps.d.ts.map +1 -1
- package/dist/execution-O7I5DYE6.js +4682 -0
- package/dist/execution-O7I5DYE6.js.map +7 -0
- package/dist/execution-chimera-ask.d.ts +10 -0
- package/dist/execution-chimera-ask.d.ts.map +1 -0
- package/dist/execution-chimera-cascade.d.ts +15 -0
- package/dist/execution-chimera-cascade.d.ts.map +1 -0
- package/dist/execution-cleanup.d.ts +23 -0
- package/dist/execution-cleanup.d.ts.map +1 -0
- package/dist/execution-kanban-dispatch.d.ts +10 -0
- package/dist/execution-kanban-dispatch.d.ts.map +1 -0
- package/dist/execution-repl-fleet-callbacks.d.ts +11 -0
- package/dist/execution-repl-fleet-callbacks.d.ts.map +1 -0
- package/dist/execution-storage-observability.d.ts +3 -0
- package/dist/execution-storage-observability.d.ts.map +1 -0
- package/dist/execution-tui-next-step-callbacks.d.ts +20 -0
- package/dist/execution-tui-next-step-callbacks.d.ts.map +1 -0
- package/dist/execution.d.ts +2 -139
- package/dist/execution.d.ts.map +1 -1
- package/dist/export-TPORYVRZ.js +64 -0
- package/dist/export-TPORYVRZ.js.map +7 -0
- package/dist/fleet/host-acp-runner-cache.d.ts +9 -0
- package/dist/fleet/host-acp-runner-cache.d.ts.map +1 -0
- package/dist/fleet/host-acp.d.ts +3 -0
- package/dist/fleet/host-acp.d.ts.map +1 -0
- package/dist/fleet/host-concurrency.d.ts +2 -0
- package/dist/fleet/host-concurrency.d.ts.map +1 -0
- package/dist/fleet/host-context.d.ts +5 -0
- package/dist/fleet/host-context.d.ts.map +1 -0
- package/dist/fleet/host-director-builder.d.ts +24 -0
- package/dist/fleet/host-director-builder.d.ts.map +1 -0
- package/dist/fleet/host-director-event-bridges.d.ts +37 -0
- package/dist/fleet/host-director-event-bridges.d.ts.map +1 -0
- package/dist/fleet/host-director-services.d.ts +20 -0
- package/dist/fleet/host-director-services.d.ts.map +1 -0
- package/dist/fleet/host-event-bridge.d.ts +17 -0
- package/dist/fleet/host-event-bridge.d.ts.map +1 -0
- package/dist/fleet/host-helpers.d.ts +22 -0
- package/dist/fleet/host-helpers.d.ts.map +1 -0
- package/dist/fleet/host-learning-tracker.d.ts +11 -0
- package/dist/fleet/host-learning-tracker.d.ts.map +1 -0
- package/dist/fleet/host-learning.d.ts +4 -0
- package/dist/fleet/host-learning.d.ts.map +1 -0
- package/dist/fleet/host-lifecycle-events.d.ts +4 -0
- package/dist/fleet/host-lifecycle-events.d.ts.map +1 -0
- package/dist/fleet/host-paths.d.ts +3 -0
- package/dist/fleet/host-paths.d.ts.map +1 -0
- package/dist/fleet/host-provider.d.ts +22 -0
- package/dist/fleet/host-provider.d.ts.map +1 -0
- package/dist/fleet/host-session-writer.d.ts +3 -0
- package/dist/fleet/host-session-writer.d.ts.map +1 -0
- package/dist/fleet/host-shadow-pass.d.ts +21 -0
- package/dist/fleet/host-shadow-pass.d.ts.map +1 -0
- package/dist/fleet/host-spawn-types.d.ts +25 -0
- package/dist/fleet/host-spawn-types.d.ts.map +1 -0
- package/dist/fleet/host-status.d.ts +48 -0
- package/dist/fleet/host-status.d.ts.map +1 -0
- package/dist/fleet/host-subagent-factory.d.ts +16 -0
- package/dist/fleet/host-subagent-factory.d.ts.map +1 -0
- package/dist/fleet/host-supervisor.d.ts +16 -0
- package/dist/fleet/host-supervisor.d.ts.map +1 -0
- package/dist/fleet/host-task-result-report.d.ts +11 -0
- package/dist/fleet/host-task-result-report.d.ts.map +1 -0
- package/dist/fleet/host-types.d.ts +89 -0
- package/dist/fleet/host-types.d.ts.map +1 -0
- package/dist/fleet/host.d.ts +10 -357
- package/dist/fleet/host.d.ts.map +1 -1
- package/dist/hq-JUYKUNJX.js +547 -0
- package/dist/hq-JUYKUNJX.js.map +7 -0
- package/dist/hq-command-controller.d.ts +2 -2
- package/dist/hq-command-controller.d.ts.map +1 -1
- package/dist/hq-server/auth.d.ts +15 -4
- package/dist/hq-server/auth.d.ts.map +1 -1
- package/dist/hq-server/project-root.d.ts +5 -0
- package/dist/hq-server/project-root.d.ts.map +1 -0
- package/dist/hq-server/routes/auth-handlers.d.ts +25 -0
- package/dist/hq-server/routes/auth-handlers.d.ts.map +1 -0
- package/dist/hq-server/routes/session-handlers.d.ts +8 -0
- package/dist/hq-server/routes/session-handlers.d.ts.map +1 -0
- package/dist/hq-server/routes.d.ts +8 -6
- package/dist/hq-server/routes.d.ts.map +1 -1
- package/dist/hq-server/snapshot.d.ts +44 -0
- package/dist/hq-server/snapshot.d.ts.map +1 -1
- package/dist/hq-server/types.d.ts +22 -4
- package/dist/hq-server/types.d.ts.map +1 -1
- package/dist/hq-server/utils.d.ts +8 -0
- package/dist/hq-server/utils.d.ts.map +1 -1
- package/dist/hq-server/ws.d.ts +1 -1
- package/dist/hq-server/ws.d.ts.map +1 -1
- package/dist/hq-server-6AQ3BXZA.js +39 -0
- package/dist/hq-server-6AQ3BXZA.js.map +7 -0
- package/dist/hq-server.d.ts +3 -3
- package/dist/hq-server.d.ts.map +1 -1
- package/dist/hq-ttl-U2FAYFAT.js +8 -0
- package/dist/hq-ttl-U2FAYFAT.js.map +7 -0
- package/dist/hq-tunnel-RFKGC4HI.js +114 -0
- package/dist/hq-tunnel-RFKGC4HI.js.map +7 -0
- package/dist/hq-tunnel.d.ts +1 -1
- package/dist/hq-tunnel.d.ts.map +1 -1
- package/dist/index.d.ts +2 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2503 -53026
- package/dist/index.js.map +4 -4
- package/dist/init-E2NDDOHI.js +27 -0
- package/dist/init-E2NDDOHI.js.map +7 -0
- package/dist/kanban-dispatch-route.d.ts +14 -0
- package/dist/kanban-dispatch-route.d.ts.map +1 -0
- package/dist/kanban-hq-sync.d.ts +2 -0
- package/dist/kanban-hq-sync.d.ts.map +1 -1
- package/dist/kanban-run-mirror-EKVNGXWW.js +12 -0
- package/dist/kanban-run-mirror-EKVNGXWW.js.map +7 -0
- package/dist/live-settings-input.d.ts +69 -0
- package/dist/live-settings-input.d.ts.map +1 -0
- package/dist/mailbox-serve-2UWHEN3M.js +302 -0
- package/dist/mailbox-serve-2UWHEN3M.js.map +7 -0
- package/dist/mcp-CYLPUEHC.js +413 -0
- package/dist/mcp-CYLPUEHC.js.map +7 -0
- package/dist/modeldiag-HENYJ4N7.js +1290 -0
- package/dist/modeldiag-HENYJ4N7.js.map +7 -0
- package/dist/permissions-FNYLZIL4.js +115 -0
- package/dist/permissions-FNYLZIL4.js.map +7 -0
- package/dist/picker-key-state.d.ts +7 -0
- package/dist/picker-key-state.d.ts.map +1 -0
- package/dist/picker-model-picker.d.ts +6 -0
- package/dist/picker-model-picker.d.ts.map +1 -0
- package/dist/picker-ui.d.ts +17 -0
- package/dist/picker-ui.d.ts.map +1 -0
- package/dist/picker.d.ts +4 -37
- package/dist/picker.d.ts.map +1 -1
- package/dist/plugin-usage-OU6X6LM3.js +40 -0
- package/dist/plugin-usage-OU6X6LM3.js.map +7 -0
- package/dist/plugins-4LJ5IUBI.js +24 -0
- package/dist/plugins-4LJ5IUBI.js.map +7 -0
- package/dist/pre-launch.d.ts +0 -1
- package/dist/pre-launch.d.ts.map +1 -1
- package/dist/project-BLQ3ALVL.js +76 -0
- package/dist/project-BLQ3ALVL.js.map +7 -0
- package/dist/project-manifest-GE25PW4S.js +18 -0
- package/dist/project-manifest-GE25PW4S.js.map +7 -0
- package/dist/project-picker-BOCWHBXP.js +17 -0
- package/dist/project-picker-BOCWHBXP.js.map +7 -0
- package/dist/projects-XE76NFNZ.js +38 -0
- package/dist/projects-XE76NFNZ.js.map +7 -0
- package/dist/provider-helpers.d.ts +22 -6
- package/dist/provider-helpers.d.ts.map +1 -1
- package/dist/providers-models-GDELBHZK.js +589 -0
- package/dist/providers-models-GDELBHZK.js.map +7 -0
- package/dist/quick-VIO2BEHS.js +10 -0
- package/dist/quick-VIO2BEHS.js.map +7 -0
- package/dist/repl-auto-proceed.d.ts +19 -0
- package/dist/repl-auto-proceed.d.ts.map +1 -0
- package/dist/repl-client-registration.d.ts +7 -0
- package/dist/repl-client-registration.d.ts.map +1 -0
- package/dist/repl-input.d.ts +11 -0
- package/dist/repl-input.d.ts.map +1 -0
- package/dist/repl-options.d.ts +54 -0
- package/dist/repl-options.d.ts.map +1 -0
- package/dist/repl-rendering.d.ts +4 -0
- package/dist/repl-rendering.d.ts.map +1 -0
- package/dist/repl-suggestions.d.ts +21 -0
- package/dist/repl-suggestions.d.ts.map +1 -0
- package/dist/repl.d.ts +3 -162
- package/dist/repl.d.ts.map +1 -1
- package/dist/replay-KCTXNMZQ.js +75 -0
- package/dist/replay-KCTXNMZQ.js.map +7 -0
- package/dist/rewind-EJMVFVLS.js +185 -0
- package/dist/rewind-EJMVFVLS.js.map +7 -0
- package/dist/sdd-runtime-JG4EEKL6.js +54 -0
- package/dist/sdd-runtime-JG4EEKL6.js.map +7 -0
- package/dist/services/sdd/project-context.d.ts +1 -1
- package/dist/services/sdd/project-context.d.ts.map +1 -1
- package/dist/services/sdd/task-manager.d.ts.map +1 -1
- package/dist/services/statusline-config.d.ts +1 -1
- package/dist/services/statusline-config.d.ts.map +1 -1
- package/dist/session-event-wiring.d.ts +2 -2
- package/dist/session-event-wiring.d.ts.map +1 -1
- package/dist/sessions-config-NLCMK3BY.js +409 -0
- package/dist/sessions-config-NLCMK3BY.js.map +7 -0
- package/dist/settings-menu.d.ts +3 -18
- package/dist/settings-menu.d.ts.map +1 -1
- package/dist/simpleui-dist-JIFGUJO7.js +93 -0
- package/dist/simpleui-dist-JIFGUJO7.js.map +7 -0
- package/dist/slash-commands/brain.d.ts.map +1 -1
- package/dist/slash-commands/clear.d.ts.map +1 -1
- package/dist/slash-commands/fallback.d.ts.map +1 -1
- package/dist/slash-commands/kanban-agent-helpers.d.ts +18 -0
- package/dist/slash-commands/kanban-agent-helpers.d.ts.map +1 -0
- package/dist/slash-commands/kanban-format.d.ts +16 -0
- package/dist/slash-commands/kanban-format.d.ts.map +1 -0
- package/dist/slash-commands/kanban-help.d.ts +2 -0
- package/dist/slash-commands/kanban-help.d.ts.map +1 -0
- package/dist/slash-commands/kanban.d.ts.map +1 -1
- package/dist/slash-commands/mailbox-demo.d.ts.map +1 -1
- package/dist/slash-commands/mailbox.d.ts +2 -1
- package/dist/slash-commands/mailbox.d.ts.map +1 -1
- package/dist/slash-commands/memory-compact.d.ts +5 -0
- package/dist/slash-commands/memory-compact.d.ts.map +1 -0
- package/dist/slash-commands/memory-flags.d.ts +36 -0
- package/dist/slash-commands/memory-flags.d.ts.map +1 -0
- package/dist/slash-commands/memory-formatters.d.ts +16 -0
- package/dist/slash-commands/memory-formatters.d.ts.map +1 -0
- package/dist/slash-commands/memory.d.ts.map +1 -1
- package/dist/slash-commands/mouse.d.ts +2 -2
- package/dist/slash-commands/review.d.ts.map +1 -1
- package/dist/slash-commands/sdd-command-helpers.d.ts +23 -0
- package/dist/slash-commands/sdd-command-helpers.d.ts.map +1 -0
- package/dist/slash-commands/sdd-format.d.ts +32 -0
- package/dist/slash-commands/sdd-format.d.ts.map +1 -0
- package/dist/slash-commands/sdd.d.ts.map +1 -1
- package/dist/slash-commands/settings.d.ts.map +1 -1
- package/dist/subcommands/handlers/chronicle.d.ts.map +1 -1
- package/dist/subcommands/handlers/mailbox-serve.d.ts.map +1 -1
- package/dist/subcommands/handlers/model-smoke-test.d.ts +51 -0
- package/dist/subcommands/handlers/model-smoke-test.d.ts.map +1 -0
- package/dist/subcommands/handlers/modeldiag-profiles.d.ts +64 -0
- package/dist/subcommands/handlers/modeldiag-profiles.d.ts.map +1 -0
- package/dist/subcommands/handlers/modeldiag.d.ts.map +1 -1
- package/dist/subcommands/handlers/per-subcommand-deep-help-table.d.ts +3 -0
- package/dist/subcommands/handlers/per-subcommand-deep-help-table.d.ts.map +1 -0
- package/dist/subcommands/handlers/per-subcommand-help-data.d.ts +3 -0
- package/dist/subcommands/handlers/per-subcommand-help-data.d.ts.map +1 -0
- package/dist/subcommands/handlers/per-subcommand-help-table.d.ts +36 -0
- package/dist/subcommands/handlers/per-subcommand-help-table.d.ts.map +1 -0
- package/dist/subcommands/handlers/per-subcommand-help-types.d.ts +18 -0
- package/dist/subcommands/handlers/per-subcommand-help-types.d.ts.map +1 -0
- package/dist/subcommands/handlers/per-subcommand-help.d.ts +2 -80
- package/dist/subcommands/handlers/per-subcommand-help.d.ts.map +1 -1
- package/dist/subcommands/handlers/rewind.d.ts.map +1 -1
- package/dist/subcommands/index.d.ts +7 -0
- package/dist/subcommands/index.d.ts.map +1 -1
- package/dist/tools-skills-UNKLOB7M.js +29 -0
- package/dist/tools-skills-UNKLOB7M.js.map +7 -0
- package/dist/update-YC4TYW2Y.js +16 -0
- package/dist/update-YC4TYW2Y.js.map +7 -0
- package/dist/update-check-UMYTOH7Z.js +18 -0
- package/dist/update-check-UMYTOH7Z.js.map +7 -0
- package/dist/version-help-DROHZRW6.js +11 -0
- package/dist/version-help-DROHZRW6.js.map +7 -0
- package/dist/webui-server/connection-handler.d.ts.map +1 -1
- package/dist/webui-server/kanban-host-adapter.d.ts +5 -1
- package/dist/webui-server/kanban-host-adapter.d.ts.map +1 -1
- package/dist/webui-server/listen-helpers.d.ts +18 -0
- package/dist/webui-server/listen-helpers.d.ts.map +1 -0
- package/dist/webui-server/node-pty-loader.d.ts +6 -0
- package/dist/webui-server/node-pty-loader.d.ts.map +1 -0
- package/dist/webui-server-ZF5KVGC5.js +1460 -0
- package/dist/webui-server-ZF5KVGC5.js.map +7 -0
- package/dist/webui-server-options.d.ts +191 -0
- package/dist/webui-server-options.d.ts.map +1 -0
- package/dist/webui-server.d.ts +2 -178
- package/dist/webui-server.d.ts.map +1 -1
- package/dist/wiring/brain-and-orchestration.d.ts.map +1 -1
- package/dist/wiring/codebase-index.d.ts.map +1 -1
- package/dist/wiring/command-host-state.d.ts +4 -4
- package/dist/wiring/dep-watcher-bridge.d.ts +23 -0
- package/dist/wiring/dep-watcher-bridge.d.ts.map +1 -0
- package/dist/wiring/dep-watcher.d.ts.map +1 -1
- package/dist/wiring/hq-telemetry.d.ts +2 -2
- package/dist/wiring/lifecycle-plugins.d.ts +4 -3
- package/dist/wiring/lifecycle-plugins.d.ts.map +1 -1
- package/dist/wiring/mailbox-bridge-bootstrap.d.ts +1 -1
- package/dist/wiring/management-tools.d.ts +15 -0
- package/dist/wiring/management-tools.d.ts.map +1 -0
- package/dist/wiring/pipeline.d.ts +2 -1
- package/dist/wiring/pipeline.d.ts.map +1 -1
- package/dist/wiring/plugins.d.ts +1 -1
- package/dist/wiring/plugins.d.ts.map +1 -1
- package/dist/wiring/provider-runtime-setup.d.ts +14 -1
- package/dist/wiring/provider-runtime-setup.d.ts.map +1 -1
- package/dist/wiring/provider.d.ts.map +1 -1
- package/dist/wiring/runtime-controller-deps.d.ts +1 -1
- package/dist/wiring/runtime-controller-deps.d.ts.map +1 -1
- package/dist/wiring/sage.d.ts.map +1 -1
- package/dist/wiring/session-registry.d.ts +38 -0
- package/dist/wiring/session-registry.d.ts.map +1 -0
- package/dist/wiring/session.d.ts +10 -6
- package/dist/wiring/session.d.ts.map +1 -1
- package/dist/wiring/tools.d.ts.map +1 -1
- package/package.json +22 -22
- package/dist/cli-recovery-prompt.d.ts +0 -19
- package/dist/cli-recovery-prompt.d.ts.map +0 -1
- package/dist/first-run-auth-gate.d.ts +0 -20
- package/dist/first-run-auth-gate.d.ts.map +0 -1
- package/dist/pre-launch/indexing-question.d.ts +0 -28
- package/dist/pre-launch/indexing-question.d.ts.map +0 -1
package/dist/hq-server/auth.d.ts
CHANGED
|
@@ -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
|
-
|
|
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;
|
|
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 @@
|
|
|
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
|
|
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:
|
|
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,
|
|
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,
|
|
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
|
-
|
|
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,
|
|
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":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,
|
|
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"}
|
package/dist/hq-server/ws.d.ts
CHANGED
|
@@ -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,
|
|
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
|
package/dist/hq-server.d.ts
CHANGED
|
@@ -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 {
|
|
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 {
|
|
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;
|
package/dist/hq-server.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"hq-server.d.ts","sourceRoot":"","sources":["../src/hq-server.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;
|
|
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,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
|
+
}
|
package/dist/hq-tunnel.d.ts
CHANGED
|
@@ -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,
|
|
15
|
+
export declare function buildPublicHqUrl(tunnelUrl: string, localBrowserUrl: string | undefined, includeBootstrap: boolean): string;
|
|
16
16
|
//# sourceMappingURL=hq-tunnel.d.ts.map
|
package/dist/hq-tunnel.d.ts.map
CHANGED
|
@@ -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,
|
|
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"}
|