botmux 3.14.0 → 3.16.0
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/README.en.md +2 -2
- package/README.md +2 -2
- package/dist/.runtime-build-id +1 -1
- package/dist/adapters/backend/destroy-result.d.ts +159 -0
- package/dist/adapters/backend/destroy-result.d.ts.map +1 -0
- package/dist/adapters/backend/destroy-result.js +223 -0
- package/dist/adapters/backend/destroy-result.js.map +1 -0
- package/dist/adapters/backend/herdr-backend.d.ts +4 -0
- package/dist/adapters/backend/herdr-backend.d.ts.map +1 -1
- package/dist/adapters/backend/herdr-backend.js +23 -1
- package/dist/adapters/backend/herdr-backend.js.map +1 -1
- package/dist/adapters/backend/mojo-backend.d.ts +577 -0
- package/dist/adapters/backend/mojo-backend.d.ts.map +1 -0
- package/dist/adapters/backend/mojo-backend.js +2471 -0
- package/dist/adapters/backend/mojo-backend.js.map +1 -0
- package/dist/adapters/backend/mojo-budgets.d.ts +21 -0
- package/dist/adapters/backend/mojo-budgets.d.ts.map +1 -0
- package/dist/adapters/backend/mojo-budgets.js +22 -0
- package/dist/adapters/backend/mojo-budgets.js.map +1 -0
- package/dist/adapters/backend/mojo-isolated-workspace.d.ts +69 -0
- package/dist/adapters/backend/mojo-isolated-workspace.d.ts.map +1 -0
- package/dist/adapters/backend/mojo-isolated-workspace.js +213 -0
- package/dist/adapters/backend/mojo-isolated-workspace.js.map +1 -0
- package/dist/adapters/backend/mojo-process-tree.d.ts +292 -0
- package/dist/adapters/backend/mojo-process-tree.d.ts.map +1 -0
- package/dist/adapters/backend/mojo-process-tree.js +486 -0
- package/dist/adapters/backend/mojo-process-tree.js.map +1 -0
- package/dist/adapters/backend/mojo-types.d.ts +542 -0
- package/dist/adapters/backend/mojo-types.d.ts.map +1 -0
- package/dist/adapters/backend/mojo-types.js +682 -0
- package/dist/adapters/backend/mojo-types.js.map +1 -0
- package/dist/adapters/backend/reproduce-command.js +3 -3
- package/dist/adapters/backend/reproduce-command.js.map +1 -1
- package/dist/adapters/backend/riff-backend.js +1 -1
- package/dist/adapters/backend/riff-backend.js.map +1 -1
- package/dist/adapters/backend/sandbox.d.ts +44 -7
- package/dist/adapters/backend/sandbox.d.ts.map +1 -1
- package/dist/adapters/backend/sandbox.js +30 -7
- package/dist/adapters/backend/sandbox.js.map +1 -1
- package/dist/adapters/backend/session-backend-selector.d.ts +14 -1
- package/dist/adapters/backend/session-backend-selector.d.ts.map +1 -1
- package/dist/adapters/backend/session-backend-selector.js +82 -10
- package/dist/adapters/backend/session-backend-selector.js.map +1 -1
- package/dist/adapters/backend/tmux-pipe-backend.d.ts +30 -0
- package/dist/adapters/backend/tmux-pipe-backend.d.ts.map +1 -1
- package/dist/adapters/backend/tmux-pipe-backend.js +60 -0
- package/dist/adapters/backend/tmux-pipe-backend.js.map +1 -1
- package/dist/adapters/backend/types.d.ts +108 -6
- package/dist/adapters/backend/types.d.ts.map +1 -1
- package/dist/adapters/backend/types.js.map +1 -1
- package/dist/adapters/backend/zmx-backend.d.ts +11 -0
- package/dist/adapters/backend/zmx-backend.d.ts.map +1 -1
- package/dist/adapters/backend/zmx-backend.js +16 -1
- package/dist/adapters/backend/zmx-backend.js.map +1 -1
- package/dist/adapters/cli/codex-app.d.ts.map +1 -1
- package/dist/adapters/cli/codex-app.js +2 -2
- package/dist/adapters/cli/codex-app.js.map +1 -1
- package/dist/adapters/cli/codex.d.ts.map +1 -1
- package/dist/adapters/cli/codex.js +7 -0
- package/dist/adapters/cli/codex.js.map +1 -1
- package/dist/adapters/cli/copilot.d.ts +3 -1
- package/dist/adapters/cli/copilot.d.ts.map +1 -1
- package/dist/adapters/cli/copilot.js +23 -5
- package/dist/adapters/cli/copilot.js.map +1 -1
- package/dist/adapters/cli/cursor.d.ts.map +1 -1
- package/dist/adapters/cli/cursor.js +26 -4
- package/dist/adapters/cli/cursor.js.map +1 -1
- package/dist/adapters/cli/dsh.d.ts.map +1 -1
- package/dist/adapters/cli/dsh.js +5 -1
- package/dist/adapters/cli/dsh.js.map +1 -1
- package/dist/adapters/cli/grok.d.ts.map +1 -1
- package/dist/adapters/cli/grok.js +24 -5
- package/dist/adapters/cli/grok.js.map +1 -1
- package/dist/adapters/cli/kimi.d.ts.map +1 -1
- package/dist/adapters/cli/kimi.js +19 -1
- package/dist/adapters/cli/kimi.js.map +1 -1
- package/dist/adapters/cli/mojo.d.ts +28 -0
- package/dist/adapters/cli/mojo.d.ts.map +1 -0
- package/dist/adapters/cli/mojo.js +58 -0
- package/dist/adapters/cli/mojo.js.map +1 -0
- package/dist/adapters/cli/pi.d.ts +20 -5
- package/dist/adapters/cli/pi.d.ts.map +1 -1
- package/dist/adapters/cli/pi.js +27 -5
- package/dist/adapters/cli/pi.js.map +1 -1
- package/dist/adapters/cli/read-isolation.d.ts +251 -1
- package/dist/adapters/cli/read-isolation.d.ts.map +1 -1
- package/dist/adapters/cli/read-isolation.js +254 -1
- package/dist/adapters/cli/read-isolation.js.map +1 -1
- package/dist/adapters/cli/registry.d.ts +13 -1
- package/dist/adapters/cli/registry.d.ts.map +1 -1
- package/dist/adapters/cli/registry.js +19 -1
- package/dist/adapters/cli/registry.js.map +1 -1
- package/dist/adapters/cli/runner-input.d.ts +3 -3
- package/dist/adapters/cli/runner-input.d.ts.map +1 -1
- package/dist/adapters/cli/runner-input.js +4 -3
- package/dist/adapters/cli/runner-input.js.map +1 -1
- package/dist/adapters/cli/shared-hints.d.ts +3 -1
- package/dist/adapters/cli/shared-hints.d.ts.map +1 -1
- package/dist/adapters/cli/shared-hints.js +51 -30
- package/dist/adapters/cli/shared-hints.js.map +1 -1
- package/dist/adapters/cli/types.d.ts +33 -4
- package/dist/adapters/cli/types.d.ts.map +1 -1
- package/dist/bot-registry.d.ts +42 -0
- package/dist/bot-registry.d.ts.map +1 -1
- package/dist/bot-registry.js +54 -4
- package/dist/bot-registry.js.map +1 -1
- package/dist/cli/arg-utils.d.ts +5 -0
- package/dist/cli/arg-utils.d.ts.map +1 -1
- package/dist/cli/arg-utils.js +7 -0
- package/dist/cli/arg-utils.js.map +1 -1
- package/dist/cli/bots-list-output.d.ts +130 -2
- package/dist/cli/bots-list-output.d.ts.map +1 -1
- package/dist/cli/bots-list-output.js +173 -27
- package/dist/cli/bots-list-output.js.map +1 -1
- package/dist/cli/daemon-lifecycle-env.d.ts +10 -3
- package/dist/cli/daemon-lifecycle-env.d.ts.map +1 -1
- package/dist/cli/daemon-lifecycle-env.js +38 -11
- package/dist/cli/daemon-lifecycle-env.js.map +1 -1
- package/dist/cli/dashboard-command.d.ts +15 -0
- package/dist/cli/dashboard-command.d.ts.map +1 -1
- package/dist/cli/dashboard-command.js +22 -0
- package/dist/cli/dashboard-command.js.map +1 -1
- package/dist/cli/log-tail.d.ts +54 -0
- package/dist/cli/log-tail.d.ts.map +1 -0
- package/dist/cli/log-tail.js +167 -0
- package/dist/cli/log-tail.js.map +1 -0
- package/dist/cli/pm2-env.d.ts +16 -0
- package/dist/cli/pm2-env.d.ts.map +1 -0
- package/dist/cli/pm2-env.js +63 -0
- package/dist/cli/pm2-env.js.map +1 -0
- package/dist/cli/pm2-fleet-lock.d.ts +26 -0
- package/dist/cli/pm2-fleet-lock.d.ts.map +1 -0
- package/dist/cli/pm2-fleet-lock.js +50 -0
- package/dist/cli/pm2-fleet-lock.js.map +1 -0
- package/dist/cli/pm2-god-retirement.d.ts +59 -0
- package/dist/cli/pm2-god-retirement.d.ts.map +1 -0
- package/dist/cli/pm2-god-retirement.js +95 -0
- package/dist/cli/pm2-god-retirement.js.map +1 -0
- package/dist/cli/session-list-wake.d.ts +41 -0
- package/dist/cli/session-list-wake.d.ts.map +1 -0
- package/dist/cli/session-list-wake.js +102 -0
- package/dist/cli/session-list-wake.js.map +1 -0
- package/dist/cli/workflow.d.ts.map +1 -1
- package/dist/cli/workflow.js +26 -0
- package/dist/cli/workflow.js.map +1 -1
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +941 -118
- package/dist/cli.js.map +1 -1
- package/dist/codex-app-runner.js +261 -49
- package/dist/codex-app-runner.js.map +1 -1
- package/dist/core/cli-runtime-update.d.ts +8 -0
- package/dist/core/cli-runtime-update.d.ts.map +1 -1
- package/dist/core/cli-runtime-update.js +127 -8
- package/dist/core/cli-runtime-update.js.map +1 -1
- package/dist/core/close-residual.d.ts +64 -0
- package/dist/core/close-residual.d.ts.map +1 -0
- package/dist/core/close-residual.js +93 -0
- package/dist/core/close-residual.js.map +1 -0
- package/dist/core/closed-session-card.d.ts.map +1 -1
- package/dist/core/closed-session-card.js +11 -3
- package/dist/core/closed-session-card.js.map +1 -1
- package/dist/core/command-discovery.d.ts.map +1 -1
- package/dist/core/command-discovery.js +4 -1
- package/dist/core/command-discovery.js.map +1 -1
- package/dist/core/command-handler.d.ts.map +1 -1
- package/dist/core/command-handler.js +129 -27
- package/dist/core/command-handler.js.map +1 -1
- package/dist/core/cost-calculator.d.ts +3 -1
- package/dist/core/cost-calculator.d.ts.map +1 -1
- package/dist/core/cost-calculator.js +230 -1
- package/dist/core/cost-calculator.js.map +1 -1
- package/dist/core/daemon-background-close.d.ts +19 -0
- package/dist/core/daemon-background-close.d.ts.map +1 -0
- package/dist/core/daemon-background-close.js +39 -0
- package/dist/core/daemon-background-close.js.map +1 -0
- package/dist/core/dashboard-command/overview.d.ts +4 -0
- package/dist/core/dashboard-command/overview.d.ts.map +1 -1
- package/dist/core/dashboard-command/overview.js +8 -1
- package/dist/core/dashboard-command/overview.js.map +1 -1
- package/dist/core/dashboard-ipc-server.d.ts.map +1 -1
- package/dist/core/dashboard-ipc-server.js +415 -42
- package/dist/core/dashboard-ipc-server.js.map +1 -1
- package/dist/core/dashboard-rows.d.ts +4 -0
- package/dist/core/dashboard-rows.d.ts.map +1 -1
- package/dist/core/dashboard-rows.js +3 -0
- package/dist/core/dashboard-rows.js.map +1 -1
- package/dist/core/dashboard-url.d.ts +37 -0
- package/dist/core/dashboard-url.d.ts.map +1 -1
- package/dist/core/dashboard-url.js +71 -0
- package/dist/core/dashboard-url.js.map +1 -1
- package/dist/core/deferred-schedule-settlement.d.ts +15 -1
- package/dist/core/deferred-schedule-settlement.d.ts.map +1 -1
- package/dist/core/deferred-schedule-settlement.js +4 -1
- package/dist/core/deferred-schedule-settlement.js.map +1 -1
- package/dist/core/device-isolation-daemon.d.ts +91 -1
- package/dist/core/device-isolation-daemon.d.ts.map +1 -1
- package/dist/core/device-isolation-daemon.js +346 -2
- package/dist/core/device-isolation-daemon.js.map +1 -1
- package/dist/core/local-terminal-opener.d.ts.map +1 -1
- package/dist/core/local-terminal-opener.js +5 -1
- package/dist/core/local-terminal-opener.js.map +1 -1
- package/dist/core/loopback-target.d.ts +14 -0
- package/dist/core/loopback-target.d.ts.map +1 -0
- package/dist/core/loopback-target.js +20 -0
- package/dist/core/loopback-target.js.map +1 -0
- package/dist/core/maintenance.d.ts.map +1 -1
- package/dist/core/maintenance.js +16 -2
- package/dist/core/maintenance.js.map +1 -1
- package/dist/core/mojo-containment-command.d.ts +20 -0
- package/dist/core/mojo-containment-command.d.ts.map +1 -0
- package/dist/core/mojo-containment-command.js +266 -0
- package/dist/core/mojo-containment-command.js.map +1 -0
- package/dist/core/mojo-containment.d.ts +575 -0
- package/dist/core/mojo-containment.d.ts.map +1 -0
- package/dist/core/mojo-containment.js +1158 -0
- package/dist/core/mojo-containment.js.map +1 -0
- package/dist/core/mojo-launcher-env-quarantine.d.ts +30 -0
- package/dist/core/mojo-launcher-env-quarantine.d.ts.map +1 -0
- package/dist/core/mojo-launcher-env-quarantine.js +175 -0
- package/dist/core/mojo-launcher-env-quarantine.js.map +1 -0
- package/dist/core/mojo-session-identity.d.ts +3 -0
- package/dist/core/mojo-session-identity.d.ts.map +1 -0
- package/dist/core/mojo-session-identity.js +126 -0
- package/dist/core/mojo-session-identity.js.map +1 -0
- package/dist/core/persistent-backend.d.ts +32 -8
- package/dist/core/persistent-backend.d.ts.map +1 -1
- package/dist/core/persistent-backend.js +55 -17
- package/dist/core/persistent-backend.js.map +1 -1
- package/dist/core/plugins/mcp/gateway.d.ts +14 -1
- package/dist/core/plugins/mcp/gateway.d.ts.map +1 -1
- package/dist/core/plugins/mcp/gateway.js +70 -3
- package/dist/core/plugins/mcp/gateway.js.map +1 -1
- package/dist/core/plugins/mcp/host.d.ts +2 -0
- package/dist/core/plugins/mcp/host.d.ts.map +1 -1
- package/dist/core/plugins/mcp/host.js +2 -0
- package/dist/core/plugins/mcp/host.js.map +1 -1
- package/dist/core/plugins/pm2.d.ts.map +1 -1
- package/dist/core/plugins/pm2.js +16 -3
- package/dist/core/plugins/pm2.js.map +1 -1
- package/dist/core/plugins/service-manager.d.ts +9 -0
- package/dist/core/plugins/service-manager.d.ts.map +1 -1
- package/dist/core/plugins/service-manager.js +33 -16
- package/dist/core/plugins/service-manager.js.map +1 -1
- package/dist/core/preview-port-owner.d.ts +109 -0
- package/dist/core/preview-port-owner.d.ts.map +1 -0
- package/dist/core/preview-port-owner.js +320 -0
- package/dist/core/preview-port-owner.js.map +1 -0
- package/dist/core/remote-cli-ids.d.ts +5 -0
- package/dist/core/remote-cli-ids.d.ts.map +1 -0
- package/dist/core/remote-cli-ids.js +24 -0
- package/dist/core/remote-cli-ids.js.map +1 -0
- package/dist/core/{riff-shutdown-detach.d.ts → remote-shutdown-detach.d.ts} +40 -39
- package/dist/core/remote-shutdown-detach.d.ts.map +1 -0
- package/dist/core/{riff-shutdown-detach.js → remote-shutdown-detach.js} +85 -83
- package/dist/core/remote-shutdown-detach.js.map +1 -0
- package/dist/core/{riff-worker-shutdown-readiness.d.ts → remote-worker-shutdown-readiness.d.ts} +5 -4
- package/dist/core/remote-worker-shutdown-readiness.d.ts.map +1 -0
- package/dist/core/{riff-worker-shutdown-readiness.js → remote-worker-shutdown-readiness.js} +4 -3
- package/dist/core/remote-worker-shutdown-readiness.js.map +1 -0
- package/dist/core/reply-target.d.ts +16 -1
- package/dist/core/reply-target.d.ts.map +1 -1
- package/dist/core/reply-target.js +61 -0
- package/dist/core/reply-target.js.map +1 -1
- package/dist/core/session-group-birth.d.ts +26 -0
- package/dist/core/session-group-birth.d.ts.map +1 -1
- package/dist/core/session-group-birth.js +81 -4
- package/dist/core/session-group-birth.js.map +1 -1
- package/dist/core/session-manager.d.ts +15 -2
- package/dist/core/session-manager.d.ts.map +1 -1
- package/dist/core/session-manager.js +259 -5
- package/dist/core/session-manager.js.map +1 -1
- package/dist/core/session-model.d.ts +46 -0
- package/dist/core/session-model.d.ts.map +1 -0
- package/dist/core/session-model.js +42 -0
- package/dist/core/session-model.js.map +1 -0
- package/dist/core/session-owner-reminder.d.ts +63 -0
- package/dist/core/session-owner-reminder.d.ts.map +1 -0
- package/dist/core/session-owner-reminder.js +196 -0
- package/dist/core/session-owner-reminder.js.map +1 -0
- package/dist/core/session-preview-registry.d.ts +53 -0
- package/dist/core/session-preview-registry.d.ts.map +1 -0
- package/dist/core/session-preview-registry.js +82 -0
- package/dist/core/session-preview-registry.js.map +1 -0
- package/dist/core/session-preview.d.ts +114 -0
- package/dist/core/session-preview.d.ts.map +1 -0
- package/dist/core/session-preview.js +184 -0
- package/dist/core/session-preview.js.map +1 -0
- package/dist/core/session-rename.d.ts.map +1 -1
- package/dist/core/session-rename.js +5 -3
- package/dist/core/session-rename.js.map +1 -1
- package/dist/core/session-wake-deadline.d.ts +5 -0
- package/dist/core/session-wake-deadline.d.ts.map +1 -0
- package/dist/core/session-wake-deadline.js +13 -0
- package/dist/core/session-wake-deadline.js.map +1 -0
- package/dist/core/shutdown-budgets.d.ts +7 -6
- package/dist/core/shutdown-budgets.d.ts.map +1 -1
- package/dist/core/shutdown-budgets.js +11 -10
- package/dist/core/shutdown-budgets.js.map +1 -1
- package/dist/core/skills/frontmatter.d.ts.map +1 -1
- package/dist/core/skills/frontmatter.js +6 -1
- package/dist/core/skills/frontmatter.js.map +1 -1
- package/dist/core/terminal-control-grant.d.ts +74 -0
- package/dist/core/terminal-control-grant.d.ts.map +1 -0
- package/dist/core/terminal-control-grant.js +183 -0
- package/dist/core/terminal-control-grant.js.map +1 -0
- package/dist/core/terminal-proxy.d.ts.map +1 -1
- package/dist/core/terminal-proxy.js +4 -5
- package/dist/core/terminal-proxy.js.map +1 -1
- package/dist/core/terminal-write-auth.d.ts +4 -11
- package/dist/core/terminal-write-auth.d.ts.map +1 -1
- package/dist/core/terminal-write-auth.js +19 -16
- package/dist/core/terminal-write-auth.js.map +1 -1
- package/dist/core/trigger-session.d.ts.map +1 -1
- package/dist/core/trigger-session.js +36 -29
- package/dist/core/trigger-session.js.map +1 -1
- package/dist/core/types.d.ts +88 -10
- package/dist/core/types.d.ts.map +1 -1
- package/dist/core/types.js +9 -7
- package/dist/core/types.js.map +1 -1
- package/dist/core/workbench-link.d.ts +81 -0
- package/dist/core/workbench-link.d.ts.map +1 -0
- package/dist/core/workbench-link.js +109 -0
- package/dist/core/workbench-link.js.map +1 -0
- package/dist/core/worker-pool.d.ts +312 -11
- package/dist/core/worker-pool.d.ts.map +1 -1
- package/dist/core/worker-pool.js +2515 -217
- package/dist/core/worker-pool.js.map +1 -1
- package/dist/daemon.d.ts +6 -0
- package/dist/daemon.d.ts.map +1 -1
- package/dist/daemon.js +447 -116
- package/dist/daemon.js.map +1 -1
- package/dist/dashboard/aggregator.d.ts +33 -3
- package/dist/dashboard/aggregator.d.ts.map +1 -1
- package/dist/dashboard/aggregator.js +93 -17
- package/dist/dashboard/aggregator.js.map +1 -1
- package/dist/dashboard/auth-session-connections.d.ts +59 -0
- package/dist/dashboard/auth-session-connections.d.ts.map +1 -0
- package/dist/dashboard/auth-session-connections.js +109 -0
- package/dist/dashboard/auth-session-connections.js.map +1 -0
- package/dist/dashboard/auth.d.ts +99 -1
- package/dist/dashboard/auth.d.ts.map +1 -1
- package/dist/dashboard/auth.js +176 -64
- package/dist/dashboard/auth.js.map +1 -1
- package/dist/dashboard/bot-payload.d.ts +5 -0
- package/dist/dashboard/bot-payload.d.ts.map +1 -1
- package/dist/dashboard/bot-payload.js +4 -0
- package/dist/dashboard/bot-payload.js.map +1 -1
- package/dist/dashboard/control-audit.d.ts +112 -0
- package/dist/dashboard/control-audit.d.ts.map +1 -0
- package/dist/dashboard/control-audit.js +195 -0
- package/dist/dashboard/control-audit.js.map +1 -0
- package/dist/dashboard/control-csrf.d.ts +123 -0
- package/dist/dashboard/control-csrf.d.ts.map +1 -0
- package/dist/dashboard/control-csrf.js +392 -0
- package/dist/dashboard/control-csrf.js.map +1 -0
- package/dist/dashboard/daemon-reconcile.d.ts +26 -0
- package/dist/dashboard/daemon-reconcile.d.ts.map +1 -0
- package/dist/dashboard/daemon-reconcile.js +46 -0
- package/dist/dashboard/daemon-reconcile.js.map +1 -0
- package/dist/dashboard/debug-terminal.d.ts.map +1 -1
- package/dist/dashboard/debug-terminal.js +18 -4
- package/dist/dashboard/debug-terminal.js.map +1 -1
- package/dist/dashboard/events-sse.d.ts +60 -0
- package/dist/dashboard/events-sse.d.ts.map +1 -0
- package/dist/dashboard/events-sse.js +63 -0
- package/dist/dashboard/events-sse.js.map +1 -0
- package/dist/dashboard/h5-auth.d.ts +256 -0
- package/dist/dashboard/h5-auth.d.ts.map +1 -0
- package/dist/dashboard/h5-auth.js +825 -0
- package/dist/dashboard/h5-auth.js.map +1 -0
- package/dist/dashboard/managed-spawn.d.ts +36 -0
- package/dist/dashboard/managed-spawn.d.ts.map +1 -0
- package/dist/dashboard/managed-spawn.js +169 -0
- package/dist/dashboard/managed-spawn.js.map +1 -0
- package/dist/dashboard/preview-content-capability.d.ts +41 -0
- package/dist/dashboard/preview-content-capability.d.ts.map +1 -0
- package/dist/dashboard/preview-content-capability.js +127 -0
- package/dist/dashboard/preview-content-capability.js.map +1 -0
- package/dist/dashboard/preview-contract.d.ts +85 -0
- package/dist/dashboard/preview-contract.d.ts.map +1 -0
- package/dist/dashboard/preview-contract.js +198 -0
- package/dist/dashboard/preview-contract.js.map +1 -0
- package/dist/dashboard/preview-guard-page.d.ts +52 -0
- package/dist/dashboard/preview-guard-page.d.ts.map +1 -0
- package/dist/dashboard/preview-guard-page.js +162 -0
- package/dist/dashboard/preview-guard-page.js.map +1 -0
- package/dist/dashboard/preview-interaction.d.ts +57 -0
- package/dist/dashboard/preview-interaction.d.ts.map +1 -0
- package/dist/dashboard/preview-interaction.js +198 -0
- package/dist/dashboard/preview-interaction.js.map +1 -0
- package/dist/dashboard/preview-proxy.d.ts +113 -0
- package/dist/dashboard/preview-proxy.d.ts.map +1 -0
- package/dist/dashboard/preview-proxy.js +543 -0
- package/dist/dashboard/preview-proxy.js.map +1 -0
- package/dist/dashboard/public-redact.d.ts +23 -0
- package/dist/dashboard/public-redact.d.ts.map +1 -1
- package/dist/dashboard/public-redact.js +90 -21
- package/dist/dashboard/public-redact.js.map +1 -1
- package/dist/dashboard/request-identity.d.ts +77 -0
- package/dist/dashboard/request-identity.d.ts.map +1 -0
- package/dist/dashboard/request-identity.js +72 -0
- package/dist/dashboard/request-identity.js.map +1 -0
- package/dist/dashboard/session-cleanup.d.ts +5 -0
- package/dist/dashboard/session-cleanup.d.ts.map +1 -1
- package/dist/dashboard/session-cleanup.js +4 -0
- package/dist/dashboard/session-cleanup.js.map +1 -1
- package/dist/dashboard/settings-write-applier.d.ts +5 -1
- package/dist/dashboard/settings-write-applier.d.ts.map +1 -1
- package/dist/dashboard/settings-write-applier.js +14 -0
- package/dist/dashboard/settings-write-applier.js.map +1 -1
- package/dist/dashboard/standing-link.d.ts +76 -0
- package/dist/dashboard/standing-link.d.ts.map +1 -0
- package/dist/dashboard/standing-link.js +111 -0
- package/dist/dashboard/standing-link.js.map +1 -0
- package/dist/dashboard/terminal-control.d.ts +105 -0
- package/dist/dashboard/terminal-control.d.ts.map +1 -0
- package/dist/dashboard/terminal-control.js +296 -0
- package/dist/dashboard/terminal-control.js.map +1 -0
- package/dist/dashboard/terminal-front-proxy.d.ts +55 -0
- package/dist/dashboard/terminal-front-proxy.d.ts.map +1 -0
- package/dist/dashboard/terminal-front-proxy.js +397 -0
- package/dist/dashboard/terminal-front-proxy.js.map +1 -0
- package/dist/dashboard/terminal-view-capability.d.ts +97 -0
- package/dist/dashboard/terminal-view-capability.d.ts.map +1 -0
- package/dist/dashboard/terminal-view-capability.js +145 -0
- package/dist/dashboard/terminal-view-capability.js.map +1 -0
- package/dist/dashboard/web/agent-workbench-api.d.ts +59 -0
- package/dist/dashboard/web/agent-workbench-api.d.ts.map +1 -0
- package/dist/dashboard/web/agent-workbench-api.js +227 -0
- package/dist/dashboard/web/agent-workbench-api.js.map +1 -0
- package/dist/dashboard/web/agent-workbench-appearance-menu.d.ts +59 -0
- package/dist/dashboard/web/agent-workbench-appearance-menu.d.ts.map +1 -0
- package/dist/dashboard/web/agent-workbench-appearance-menu.js +195 -0
- package/dist/dashboard/web/agent-workbench-appearance-menu.js.map +1 -0
- package/dist/dashboard/web/agent-workbench-appearance.d.ts +222 -0
- package/dist/dashboard/web/agent-workbench-appearance.d.ts.map +1 -0
- package/dist/dashboard/web/agent-workbench-appearance.js +499 -0
- package/dist/dashboard/web/agent-workbench-appearance.js.map +1 -0
- package/dist/dashboard/web/agent-workbench-capabilities.d.ts +13 -0
- package/dist/dashboard/web/agent-workbench-capabilities.d.ts.map +1 -0
- package/dist/dashboard/web/agent-workbench-capabilities.js +24 -0
- package/dist/dashboard/web/agent-workbench-capabilities.js.map +1 -0
- package/dist/dashboard/web/agent-workbench-chat.d.ts +90 -0
- package/dist/dashboard/web/agent-workbench-chat.d.ts.map +1 -0
- package/dist/dashboard/web/agent-workbench-chat.js +168 -0
- package/dist/dashboard/web/agent-workbench-chat.js.map +1 -0
- package/dist/dashboard/web/agent-workbench-dock-page.d.ts +3 -0
- package/dist/dashboard/web/agent-workbench-dock-page.d.ts.map +1 -0
- package/dist/dashboard/web/agent-workbench-dock-page.js +23 -0
- package/dist/dashboard/web/agent-workbench-dock-page.js.map +1 -0
- package/dist/dashboard/web/agent-workbench-dock-view.d.ts +22 -0
- package/dist/dashboard/web/agent-workbench-dock-view.d.ts.map +1 -0
- package/dist/dashboard/web/agent-workbench-dock-view.js +76 -0
- package/dist/dashboard/web/agent-workbench-dock-view.js.map +1 -0
- package/dist/dashboard/web/agent-workbench-model.d.ts +196 -0
- package/dist/dashboard/web/agent-workbench-model.d.ts.map +1 -0
- package/dist/dashboard/web/agent-workbench-model.js +529 -0
- package/dist/dashboard/web/agent-workbench-model.js.map +1 -0
- package/dist/dashboard/web/agent-workbench-page.d.ts +3 -0
- package/dist/dashboard/web/agent-workbench-page.d.ts.map +1 -0
- package/dist/dashboard/web/agent-workbench-page.js +27 -0
- package/dist/dashboard/web/agent-workbench-page.js.map +1 -0
- package/dist/dashboard/web/agent-workbench-panes.d.ts +49 -0
- package/dist/dashboard/web/agent-workbench-panes.d.ts.map +1 -0
- package/dist/dashboard/web/agent-workbench-panes.js +468 -0
- package/dist/dashboard/web/agent-workbench-panes.js.map +1 -0
- package/dist/dashboard/web/agent-workbench-session-list.d.ts +42 -0
- package/dist/dashboard/web/agent-workbench-session-list.d.ts.map +1 -0
- package/dist/dashboard/web/agent-workbench-session-list.js +353 -0
- package/dist/dashboard/web/agent-workbench-session-list.js.map +1 -0
- package/dist/dashboard/web/agent-workbench-storage.d.ts +49 -0
- package/dist/dashboard/web/agent-workbench-storage.d.ts.map +1 -0
- package/dist/dashboard/web/agent-workbench-storage.js +197 -0
- package/dist/dashboard/web/agent-workbench-storage.js.map +1 -0
- package/dist/dashboard/web/agent-workbench-touch.d.ts +46 -0
- package/dist/dashboard/web/agent-workbench-touch.d.ts.map +1 -0
- package/dist/dashboard/web/agent-workbench-touch.js +96 -0
- package/dist/dashboard/web/agent-workbench-touch.js.map +1 -0
- package/dist/dashboard/web/agent-workbench-view.d.ts +34 -0
- package/dist/dashboard/web/agent-workbench-view.d.ts.map +1 -0
- package/dist/dashboard/web/agent-workbench-view.js +439 -0
- package/dist/dashboard/web/agent-workbench-view.js.map +1 -0
- package/dist/dashboard/web/app.d.ts.map +1 -1
- package/dist/dashboard/web/app.js +63 -2
- package/dist/dashboard/web/app.js.map +1 -1
- package/dist/dashboard/web/bot-defaults-page.d.ts +18 -0
- package/dist/dashboard/web/bot-defaults-page.d.ts.map +1 -1
- package/dist/dashboard/web/bot-defaults-page.js +362 -36
- package/dist/dashboard/web/bot-defaults-page.js.map +1 -1
- package/dist/dashboard/web/bot-defaults.d.ts +8 -0
- package/dist/dashboard/web/bot-defaults.d.ts.map +1 -1
- package/dist/dashboard/web/bot-defaults.js.map +1 -1
- package/dist/dashboard/web/control-csrf.d.ts +4 -0
- package/dist/dashboard/web/control-csrf.d.ts.map +1 -0
- package/dist/dashboard/web/control-csrf.js +26 -0
- package/dist/dashboard/web/control-csrf.js.map +1 -0
- package/dist/dashboard/web/dashboard-routes.d.ts.map +1 -1
- package/dist/dashboard/web/dashboard-routes.js +2 -0
- package/dist/dashboard/web/dashboard-routes.js.map +1 -1
- package/dist/dashboard/web/groups-page.d.ts.map +1 -1
- package/dist/dashboard/web/groups-page.js +11 -2
- package/dist/dashboard/web/groups-page.js.map +1 -1
- package/dist/dashboard/web/i18n.d.ts.map +1 -1
- package/dist/dashboard/web/i18n.js +140 -6
- package/dist/dashboard/web/i18n.js.map +1 -1
- package/dist/dashboard/web/overview-page.d.ts.map +1 -1
- package/dist/dashboard/web/overview-page.js +3 -2
- package/dist/dashboard/web/overview-page.js.map +1 -1
- package/dist/dashboard/web/sessions-page.d.ts.map +1 -1
- package/dist/dashboard/web/sessions-page.js +41 -1
- package/dist/dashboard/web/sessions-page.js.map +1 -1
- package/dist/dashboard/web/sessions.d.ts.map +1 -1
- package/dist/dashboard/web/sessions.js +5 -1
- package/dist/dashboard/web/sessions.js.map +1 -1
- package/dist/dashboard/web/settings-page.d.ts +3 -0
- package/dist/dashboard/web/settings-page.d.ts.map +1 -1
- package/dist/dashboard/web/settings-page.js +56 -10
- package/dist/dashboard/web/settings-page.js.map +1 -1
- package/dist/dashboard/web/skills-page.d.ts.map +1 -1
- package/dist/dashboard/web/skills-page.js +4 -2
- package/dist/dashboard/web/skills-page.js.map +1 -1
- package/dist/dashboard/web/store.d.ts +27 -2
- package/dist/dashboard/web/store.d.ts.map +1 -1
- package/dist/dashboard/web/store.js +43 -4
- package/dist/dashboard/web/store.js.map +1 -1
- package/dist/dashboard/web/ui.d.ts +3 -0
- package/dist/dashboard/web/ui.d.ts.map +1 -1
- package/dist/dashboard/web/ui.js +11 -0
- package/dist/dashboard/web/ui.js.map +1 -1
- package/dist/dashboard/web/update-action.d.ts +12 -0
- package/dist/dashboard/web/update-action.d.ts.map +1 -1
- package/dist/dashboard/web/update-action.js +11 -0
- package/dist/dashboard/web/update-action.js.map +1 -1
- package/dist/dashboard/workbench-doctor.d.ts +114 -0
- package/dist/dashboard/workbench-doctor.d.ts.map +1 -0
- package/dist/dashboard/workbench-doctor.js +620 -0
- package/dist/dashboard/workbench-doctor.js.map +1 -0
- package/dist/dashboard/workbench-ticket.d.ts +165 -0
- package/dist/dashboard/workbench-ticket.d.ts.map +1 -0
- package/dist/dashboard/workbench-ticket.js +495 -0
- package/dist/dashboard/workbench-ticket.js.map +1 -0
- package/dist/dashboard-web/app.js +1 -1
- package/dist/dashboard-web/chunks/agent-workbench-dock-page-IKAC5CFL.js +1 -0
- package/dist/dashboard-web/chunks/agent-workbench-page-M53UN5EB.js +1 -0
- package/dist/dashboard-web/chunks/bot-defaults-page-YKE5SDZF.js +10 -0
- package/dist/dashboard-web/chunks/chunk-22WIADUT.js +2 -0
- package/dist/dashboard-web/chunks/chunk-24ONYQMR.js +1 -0
- package/dist/dashboard-web/chunks/{chunk-6O7KXFD2.js → chunk-2W6SCN3M.js} +1 -1
- package/dist/dashboard-web/chunks/chunk-4XNJX6B3.js +1 -0
- package/dist/dashboard-web/chunks/{chunk-Q2MT4VWH.js → chunk-F6KNPF4R.js} +11 -9
- package/dist/dashboard-web/chunks/chunk-FXW3V4JR.js +1 -0
- package/dist/dashboard-web/chunks/chunk-G5ZS2YUS.js +1 -0
- package/dist/dashboard-web/chunks/chunk-KTQ7B6ZR.js +1 -0
- package/dist/dashboard-web/chunks/{chunk-U3ZFSO7E.js → chunk-NACP7BMR.js} +1 -1
- package/dist/dashboard-web/chunks/{connectors-page-2KZO5KSJ.js → connectors-page-VOISXXII.js} +1 -1
- package/dist/dashboard-web/chunks/{feedback-page-CLVTOLLO.js → feedback-page-RN6HRZMS.js} +1 -1
- package/dist/dashboard-web/chunks/groups-page-UQT6DCB7.js +8 -0
- package/dist/dashboard-web/chunks/{insights-page-4RPU2CRU.js → insights-page-HJFDYR5N.js} +3 -3
- package/dist/dashboard-web/chunks/{monitor-room-OTKQ2CXK.js → monitor-room-V7PCP47V.js} +1 -1
- package/dist/dashboard-web/chunks/{monitoring-page-IJPUB6JT.js → monitoring-page-NKEKVQAP.js} +1 -1
- package/dist/dashboard-web/chunks/{office-page-QSR3J44Y.js → office-page-GVJF73XW.js} +1 -1
- package/dist/dashboard-web/chunks/overview-page-KHLV6VTI.js +1 -0
- package/dist/dashboard-web/chunks/{plugin-page-VEGTCEAS.js → plugin-page-J3OF5IY4.js} +1 -1
- package/dist/dashboard-web/chunks/{roles-page-6NWJMOB5.js → roles-page-WQIRSOLZ.js} +1 -1
- package/dist/dashboard-web/chunks/{schedules-page-6I3LNXD4.js → schedules-page-J2DEY2X6.js} +1 -1
- package/dist/dashboard-web/chunks/sessions-page-7BQFEA5P.js +8 -0
- package/dist/dashboard-web/chunks/settings-page-BJEIOFJH.js +2 -0
- package/dist/dashboard-web/chunks/{skills-page-M2Q6L5CB.js → skills-page-HGIFR3IU.js} +2 -2
- package/dist/dashboard-web/chunks/{team-federation-page-7I7FDE3B.js → team-federation-page-MR5ZPL4B.js} +1 -1
- package/dist/dashboard-web/chunks/{v3-page-HQXRL65L.js → v3-page-GBR5JWPE.js} +2 -2
- package/dist/dashboard-web/chunks/{whiteboards-page-LQKC4TAZ.js → whiteboards-page-QAZM4BN3.js} +1 -1
- package/dist/dashboard-web/index.html +8 -1
- package/dist/dashboard-web/style.css +2006 -10
- package/dist/dashboard.js +1017 -264
- package/dist/dashboard.js.map +1 -1
- package/dist/dsh-runner.js +8 -1
- package/dist/dsh-runner.js.map +1 -1
- package/dist/global-config.d.ts +30 -0
- package/dist/global-config.d.ts.map +1 -1
- package/dist/global-config.js +33 -0
- package/dist/global-config.js.map +1 -1
- package/dist/i18n/en.d.ts.map +1 -1
- package/dist/i18n/en.js +46 -27
- package/dist/i18n/en.js.map +1 -1
- package/dist/i18n/zh.d.ts.map +1 -1
- package/dist/i18n/zh.js +43 -27
- package/dist/i18n/zh.js.map +1 -1
- package/dist/im/lark/card-builder.d.ts +1 -1
- package/dist/im/lark/card-builder.d.ts.map +1 -1
- package/dist/im/lark/card-builder.js +22 -6
- package/dist/im/lark/card-builder.js.map +1 -1
- package/dist/im/lark/card-handler.d.ts.map +1 -1
- package/dist/im/lark/card-handler.js +118 -24
- package/dist/im/lark/card-handler.js.map +1 -1
- package/dist/im/lark/client.d.ts +15 -0
- package/dist/im/lark/client.d.ts.map +1 -1
- package/dist/im/lark/client.js +30 -0
- package/dist/im/lark/client.js.map +1 -1
- package/dist/im/lark/event-dispatcher.d.ts +48 -0
- package/dist/im/lark/event-dispatcher.d.ts.map +1 -1
- package/dist/im/lark/event-dispatcher.js +138 -41
- package/dist/im/lark/event-dispatcher.js.map +1 -1
- package/dist/im/lark/identity-cache.d.ts +14 -6
- package/dist/im/lark/identity-cache.d.ts.map +1 -1
- package/dist/im/lark/identity-cache.js +69 -26
- package/dist/im/lark/identity-cache.js.map +1 -1
- package/dist/im/lark/lark-hosts.d.ts +13 -0
- package/dist/im/lark/lark-hosts.d.ts.map +1 -1
- package/dist/im/lark/lark-hosts.js +16 -0
- package/dist/im/lark/lark-hosts.js.map +1 -1
- package/dist/im/lark/overview-card.d.ts +22 -0
- package/dist/im/lark/overview-card.d.ts.map +1 -1
- package/dist/im/lark/overview-card.js +53 -3
- package/dist/im/lark/overview-card.js.map +1 -1
- package/dist/im/lark/sessions-card.d.ts.map +1 -1
- package/dist/im/lark/sessions-card.js +26 -3
- package/dist/im/lark/sessions-card.js.map +1 -1
- package/dist/im/lark/workflow-slash-command.d.ts +6 -0
- package/dist/im/lark/workflow-slash-command.d.ts.map +1 -1
- package/dist/im/lark/workflow-slash-command.js +7 -0
- package/dist/im/lark/workflow-slash-command.js.map +1 -1
- package/dist/index-daemon.js +27 -4
- package/dist/index-daemon.js.map +1 -1
- package/dist/index-dashboard.d.ts +3 -0
- package/dist/index-dashboard.d.ts.map +1 -0
- package/dist/index-dashboard.js +94 -0
- package/dist/index-dashboard.js.map +1 -0
- package/dist/platform/team-agents-client.d.ts +199 -0
- package/dist/platform/team-agents-client.d.ts.map +1 -0
- package/dist/platform/team-agents-client.js +263 -0
- package/dist/platform/team-agents-client.js.map +1 -0
- package/dist/platform/tunnel-client.d.ts +6 -0
- package/dist/platform/tunnel-client.d.ts.map +1 -1
- package/dist/platform/tunnel-client.js.map +1 -1
- package/dist/services/async-trigger-state.d.ts +7 -3
- package/dist/services/async-trigger-state.d.ts.map +1 -1
- package/dist/services/async-trigger-state.js +28 -0
- package/dist/services/async-trigger-state.js.map +1 -1
- package/dist/services/async-trigger-store.d.ts +13 -4
- package/dist/services/async-trigger-store.d.ts.map +1 -1
- package/dist/services/async-trigger-store.js +55 -8
- package/dist/services/async-trigger-store.js.map +1 -1
- package/dist/services/bot-config-store.d.ts +1 -11
- package/dist/services/bot-config-store.d.ts.map +1 -1
- package/dist/services/bot-config-store.js +27 -3
- package/dist/services/bot-config-store.js.map +1 -1
- package/dist/services/bot-profile-store.d.ts +17 -2
- package/dist/services/bot-profile-store.d.ts.map +1 -1
- package/dist/services/bot-profile-store.js +93 -12
- package/dist/services/bot-profile-store.js.map +1 -1
- package/dist/services/bridge-fallback-gate.d.ts +15 -7
- package/dist/services/bridge-fallback-gate.d.ts.map +1 -1
- package/dist/services/bridge-fallback-gate.js +43 -16
- package/dist/services/bridge-fallback-gate.js.map +1 -1
- package/dist/services/bridge-turn-queue.d.ts +10 -1
- package/dist/services/bridge-turn-queue.d.ts.map +1 -1
- package/dist/services/bridge-turn-queue.js +29 -9
- package/dist/services/bridge-turn-queue.js.map +1 -1
- package/dist/services/claude-transcript.d.ts +19 -0
- package/dist/services/claude-transcript.d.ts.map +1 -1
- package/dist/services/claude-transcript.js +57 -5
- package/dist/services/claude-transcript.js.map +1 -1
- package/dist/services/codex-app-threads.d.ts +2 -0
- package/dist/services/codex-app-threads.d.ts.map +1 -1
- package/dist/services/codex-app-threads.js +1 -1
- package/dist/services/codex-app-threads.js.map +1 -1
- package/dist/services/codex-reasoning-effort.d.ts +8 -0
- package/dist/services/codex-reasoning-effort.d.ts.map +1 -1
- package/dist/services/codex-reasoning-effort.js +24 -0
- package/dist/services/codex-reasoning-effort.js.map +1 -1
- package/dist/services/cursor-resume-policy.d.ts.map +1 -1
- package/dist/services/cursor-resume-policy.js +15 -3
- package/dist/services/cursor-resume-policy.js.map +1 -1
- package/dist/services/open-platform-rename.d.ts.map +1 -1
- package/dist/services/open-platform-rename.js +3 -2
- package/dist/services/open-platform-rename.js.map +1 -1
- package/dist/services/ordinary-turn-recovery.d.ts +76 -0
- package/dist/services/ordinary-turn-recovery.d.ts.map +1 -0
- package/dist/services/ordinary-turn-recovery.js +349 -0
- package/dist/services/ordinary-turn-recovery.js.map +1 -0
- package/dist/services/peer-cross-ref-store.d.ts +8 -0
- package/dist/services/peer-cross-ref-store.d.ts.map +1 -0
- package/dist/services/peer-cross-ref-store.js +95 -0
- package/dist/services/peer-cross-ref-store.js.map +1 -0
- package/dist/services/pi-transcript.d.ts.map +1 -1
- package/dist/services/pi-transcript.js +10 -6
- package/dist/services/pi-transcript.js.map +1 -1
- package/dist/services/resume-fresh-policy.d.ts +17 -0
- package/dist/services/resume-fresh-policy.d.ts.map +1 -0
- package/dist/services/resume-fresh-policy.js +24 -0
- package/dist/services/resume-fresh-policy.js.map +1 -0
- package/dist/services/session-group-title.d.ts +1 -0
- package/dist/services/session-group-title.d.ts.map +1 -1
- package/dist/services/session-group-title.js +16 -1
- package/dist/services/session-group-title.js.map +1 -1
- package/dist/services/session-groups-store.d.ts +30 -0
- package/dist/services/session-groups-store.d.ts.map +1 -1
- package/dist/services/session-groups-store.js +26 -4
- package/dist/services/session-groups-store.js.map +1 -1
- package/dist/services/session-owner-notification.d.ts +9 -0
- package/dist/services/session-owner-notification.d.ts.map +1 -0
- package/dist/services/session-owner-notification.js +10 -0
- package/dist/services/session-owner-notification.js.map +1 -0
- package/dist/services/session-owner-reminder-config-store.d.ts +9 -0
- package/dist/services/session-owner-reminder-config-store.d.ts.map +1 -0
- package/dist/services/session-owner-reminder-config-store.js +24 -0
- package/dist/services/session-owner-reminder-config-store.js.map +1 -0
- package/dist/services/session-owner-reminder-store.d.ts +5 -0
- package/dist/services/session-owner-reminder-store.d.ts.map +1 -0
- package/dist/services/session-owner-reminder-store.js +54 -0
- package/dist/services/session-owner-reminder-store.js.map +1 -0
- package/dist/services/session-store.d.ts +98 -21
- package/dist/services/session-store.d.ts.map +1 -1
- package/dist/services/session-store.js +406 -48
- package/dist/services/session-store.js.map +1 -1
- package/dist/services/structured-bridge-clis.d.ts +15 -2
- package/dist/services/structured-bridge-clis.d.ts.map +1 -1
- package/dist/services/structured-bridge-clis.js +16 -1
- package/dist/services/structured-bridge-clis.js.map +1 -1
- package/dist/services/transcript-resolver.d.ts +1 -1
- package/dist/services/transcript-resolver.d.ts.map +1 -1
- package/dist/services/transcript-resolver.js +6 -1
- package/dist/services/transcript-resolver.js.map +1 -1
- package/dist/setup/bot-config-editor.d.ts.map +1 -1
- package/dist/setup/bot-config-editor.js +7 -2
- package/dist/setup/bot-config-editor.js.map +1 -1
- package/dist/setup/ensure-herdr-integrations.d.ts +13 -0
- package/dist/setup/ensure-herdr-integrations.d.ts.map +1 -1
- package/dist/setup/ensure-herdr-integrations.js +21 -3
- package/dist/setup/ensure-herdr-integrations.js.map +1 -1
- package/dist/setup/open-platform-automation.d.ts +1 -0
- package/dist/setup/open-platform-automation.d.ts.map +1 -1
- package/dist/setup/open-platform-automation.js +107 -7
- package/dist/setup/open-platform-automation.js.map +1 -1
- package/dist/skills/definitions.d.ts +17 -0
- package/dist/skills/definitions.d.ts.map +1 -1
- package/dist/skills/definitions.js +78 -8
- package/dist/skills/definitions.js.map +1 -1
- package/dist/skills/injection-mode.d.ts +24 -3
- package/dist/skills/injection-mode.d.ts.map +1 -1
- package/dist/skills/injection-mode.js +64 -15
- package/dist/skills/injection-mode.js.map +1 -1
- package/dist/skills/installer.d.ts +18 -0
- package/dist/skills/installer.d.ts.map +1 -1
- package/dist/skills/installer.js +45 -1
- package/dist/skills/installer.js.map +1 -1
- package/dist/types.d.ts +222 -10
- package/dist/types.d.ts.map +1 -1
- package/dist/utils/bot-routing.d.ts +1 -1
- package/dist/utils/bot-routing.d.ts.map +1 -1
- package/dist/utils/bot-routing.js.map +1 -1
- package/dist/utils/child-env.d.ts +92 -2
- package/dist/utils/child-env.d.ts.map +1 -1
- package/dist/utils/child-env.js +195 -1
- package/dist/utils/child-env.js.map +1 -1
- package/dist/utils/cli-usage-limit.d.ts +25 -14
- package/dist/utils/cli-usage-limit.d.ts.map +1 -1
- package/dist/utils/cli-usage-limit.js +25 -15
- package/dist/utils/cli-usage-limit.js.map +1 -1
- package/dist/utils/daemon-rejection-guard.d.ts +35 -0
- package/dist/utils/daemon-rejection-guard.d.ts.map +1 -0
- package/dist/utils/daemon-rejection-guard.js +101 -0
- package/dist/utils/daemon-rejection-guard.js.map +1 -0
- package/dist/utils/dashboard-env.d.ts +53 -0
- package/dist/utils/dashboard-env.d.ts.map +1 -0
- package/dist/utils/dashboard-env.js +116 -0
- package/dist/utils/dashboard-env.js.map +1 -0
- package/dist/utils/global-install.d.ts.map +1 -1
- package/dist/utils/global-install.js +61 -5
- package/dist/utils/global-install.js.map +1 -1
- package/dist/utils/install-diagnostics.d.ts +14 -7
- package/dist/utils/install-diagnostics.d.ts.map +1 -1
- package/dist/utils/install-diagnostics.js +20 -11
- package/dist/utils/install-diagnostics.js.map +1 -1
- package/dist/utils/local-dev-update.d.ts +132 -0
- package/dist/utils/local-dev-update.d.ts.map +1 -0
- package/dist/utils/local-dev-update.js +176 -0
- package/dist/utils/local-dev-update.js.map +1 -0
- package/dist/utils/pending-input-queue.d.ts +12 -1
- package/dist/utils/pending-input-queue.d.ts.map +1 -1
- package/dist/utils/pending-input-queue.js.map +1 -1
- package/dist/worker.js +1517 -236
- package/dist/worker.js.map +1 -1
- package/dist/workflows/definition.d.ts +68 -68
- package/dist/workflows/events/payloads.d.ts +14 -14
- package/dist/workflows/events/schema.d.ts +312 -312
- package/dist/workflows/migration/v2-run-archive-schema.d.ts +40 -40
- package/dist/workflows/v3/cli-run.d.ts.map +1 -1
- package/dist/workflows/v3/cli-run.js +7 -0
- package/dist/workflows/v3/cli-run.js.map +1 -1
- package/dist/workflows/v3/goal-cli.d.ts +3 -0
- package/dist/workflows/v3/goal-cli.d.ts.map +1 -1
- package/dist/workflows/v3/goal-cli.js +11 -0
- package/dist/workflows/v3/goal-cli.js.map +1 -1
- package/dist/workflows/v3/run-envelope.d.ts +144 -144
- package/package.json +7 -2
- package/dist/cli/pm2-god-admission.d.ts +0 -8
- package/dist/cli/pm2-god-admission.d.ts.map +0 -1
- package/dist/cli/pm2-god-admission.js +0 -25
- package/dist/cli/pm2-god-admission.js.map +0 -1
- package/dist/core/riff-shutdown-detach.d.ts.map +0 -1
- package/dist/core/riff-shutdown-detach.js.map +0 -1
- package/dist/core/riff-worker-shutdown-readiness.d.ts.map +0 -1
- package/dist/core/riff-worker-shutdown-readiness.js.map +0 -1
- package/dist/dashboard-web/chunks/bot-defaults-page-4RENHE7J.js +0 -10
- package/dist/dashboard-web/chunks/chunk-2WQDS65D.js +0 -1
- package/dist/dashboard-web/chunks/chunk-G5XGBCM6.js +0 -1
- package/dist/dashboard-web/chunks/chunk-WLIVBPJC.js +0 -1
- package/dist/dashboard-web/chunks/groups-page-HLASRTSY.js +0 -8
- package/dist/dashboard-web/chunks/overview-page-6OK63V4V.js +0 -1
- package/dist/dashboard-web/chunks/sessions-page-B2TXGJDO.js +0 -8
- package/dist/dashboard-web/chunks/settings-page-6KJADSC6.js +0 -2
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
import { type IncomingHttpHeaders, type IncomingMessage, type OutgoingHttpHeaders, type ServerResponse } from 'node:http';
|
|
2
|
+
import type { Duplex } from 'node:stream';
|
|
3
|
+
import { TERMINAL_VIEW_FORWARD_HEADER } from '../core/terminal-control-grant.js';
|
|
4
|
+
import type { TerminalControlManager, TerminalDashboardActor } from './terminal-control.js';
|
|
5
|
+
export declare const TERMINAL_CONTROL_HEADER = "x-botmux-terminal-control";
|
|
6
|
+
export { TERMINAL_VIEW_FORWARD_HEADER };
|
|
7
|
+
/** Covers daemon wake-up (up to 10s) plus a bounded worker handshake. Cleared
|
|
8
|
+
* as soon as response/upgrade headers arrive, so live streams stay unbounded. */
|
|
9
|
+
export declare const TERMINAL_UPSTREAM_RESPONSE_TIMEOUT_MS = 30000;
|
|
10
|
+
/**
|
|
11
|
+
* P1-2:upgrade 请求收到非 101 回应 = 一次拒绝,不是长连接。清掉唯一那道计时器
|
|
12
|
+
* 之后,一个不结束 body 的上游能把上游 socket 与浏览器 socket 一起挂死,没有任
|
|
13
|
+
* 何东西会回收它们。所以这条路保留总时限 + idle 时限(只有 idle 时限时,每 N 秒
|
|
14
|
+
* 滴一个字节就能永久续命),并给拒绝体加一个上限——预览那一跳早就有了。
|
|
15
|
+
*/
|
|
16
|
+
export declare const TERMINAL_UPGRADE_REJECTION_TIMEOUT_MS = 15000;
|
|
17
|
+
export declare const TERMINAL_UPGRADE_REJECTION_IDLE_TIMEOUT_MS = 10000;
|
|
18
|
+
export declare const MAX_TERMINAL_UPGRADE_REJECTION_BYTES: number;
|
|
19
|
+
export interface TerminalFrontProxyOptions {
|
|
20
|
+
resolvePort(sessionId: string): number | undefined;
|
|
21
|
+
resolveActor(req: IncomingMessage): TerminalDashboardActor | null;
|
|
22
|
+
control: TerminalControlManager;
|
|
23
|
+
/** P1-5: resolve which auth session a bound `?viewToken=` read capability
|
|
24
|
+
* belongs to (null for anything that is not a valid bound capability for
|
|
25
|
+
* this session). Lets the proxy refuse revoked capabilities and index the
|
|
26
|
+
* bridged socket for logout-time closing. */
|
|
27
|
+
viewCapabilityAuthSession?(sessionId: string, viewToken: string): string | null;
|
|
28
|
+
/** P1-5: liveness of the auth session behind a bound capability. `false`
|
|
29
|
+
* means logout/expiry already revoked it — the request is refused even
|
|
30
|
+
* though the worker's stateless check would still accept the signature. */
|
|
31
|
+
isAuthSessionLive?(authSessionId: string): boolean;
|
|
32
|
+
/** P1-5: countersign an accepted view capability for the loopback hop. Only
|
|
33
|
+
* emitted after liveness passed, so the header IS the statement "the
|
|
34
|
+
* component holding the revocation state let this one through". Without it
|
|
35
|
+
* the worker refuses the capability, which is what makes a raw view URL
|
|
36
|
+
* aimed at the worker port or the daemon's own `/s/` proxy fail closed. */
|
|
37
|
+
viewCapabilityForwardProof?(viewToken: string): string | undefined;
|
|
38
|
+
}
|
|
39
|
+
export declare function parseTerminalFrontPath(pathname: string): {
|
|
40
|
+
sessionId: string;
|
|
41
|
+
} | null;
|
|
42
|
+
/**
|
|
43
|
+
* Authenticated Dashboard requests are converted to one signed loopback grant.
|
|
44
|
+
* Client-supplied cookies/role/grant headers are removed first. Token/viewToken
|
|
45
|
+
* query capabilities remain supported for legacy direct links and are handled
|
|
46
|
+
* independently by the worker.
|
|
47
|
+
*/
|
|
48
|
+
export declare function terminalForwardHeaders(headers: IncomingHttpHeaders, grant: string | undefined, options?: {
|
|
49
|
+
stripBrowserCredentials?: boolean;
|
|
50
|
+
}): OutgoingHttpHeaders;
|
|
51
|
+
export declare function createTerminalFrontProxy(options: TerminalFrontProxyOptions): {
|
|
52
|
+
handleHttp(req: IncomingMessage, res: ServerResponse, url: URL): boolean;
|
|
53
|
+
handleUpgrade(req: IncomingMessage, socket: Duplex, head: Buffer): boolean;
|
|
54
|
+
};
|
|
55
|
+
//# sourceMappingURL=terminal-front-proxy.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"terminal-front-proxy.d.ts","sourceRoot":"","sources":["../../src/dashboard/terminal-front-proxy.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,mBAAmB,EACxB,KAAK,eAAe,EACpB,KAAK,mBAAmB,EACxB,KAAK,cAAc,EACpB,MAAM,WAAW,CAAC;AACnB,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAE1C,OAAO,EAAE,4BAA4B,EAAE,MAAM,mCAAmC,CAAC;AACjF,OAAO,KAAK,EACV,sBAAsB,EACtB,sBAAsB,EAEvB,MAAM,uBAAuB,CAAC;AAE/B,eAAO,MAAM,uBAAuB,8BAA8B,CAAC;AACnE,OAAO,EAAE,4BAA4B,EAAE,CAAC;AACxC;iFACiF;AACjF,eAAO,MAAM,qCAAqC,QAAS,CAAC;AAC5D;;;;;GAKG;AACH,eAAO,MAAM,qCAAqC,QAAS,CAAC;AAC5D,eAAO,MAAM,0CAA0C,QAAS,CAAC;AACjE,eAAO,MAAM,oCAAoC,QAAY,CAAC;AAE9D,MAAM,WAAW,yBAAyB;IACxC,WAAW,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAAC;IACnD,YAAY,CAAC,GAAG,EAAE,eAAe,GAAG,sBAAsB,GAAG,IAAI,CAAC;IAClE,OAAO,EAAE,sBAAsB,CAAC;IAChC;;;iDAG6C;IAC7C,yBAAyB,CAAC,CAAC,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAAC;IAChF;;+EAE2E;IAC3E,iBAAiB,CAAC,CAAC,aAAa,EAAE,MAAM,GAAG,OAAO,CAAC;IACnD;;;;+EAI2E;IAC3E,0BAA0B,CAAC,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAAC;CACpE;AAQD,wBAAgB,sBAAsB,CAAC,QAAQ,EAAE,MAAM,GAAG;IAAE,SAAS,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAKrF;AAaD;;;;;GAKG;AACH,wBAAgB,sBAAsB,CACpC,OAAO,EAAE,mBAAmB,EAC5B,KAAK,EAAE,MAAM,GAAG,SAAS,EACzB,OAAO,GAAE;IAAE,uBAAuB,CAAC,EAAE,OAAO,CAAA;CAAO,GAClD,mBAAmB,CAgBrB;AA6DD,wBAAgB,wBAAwB,CAAC,OAAO,EAAE,yBAAyB,GAAG;IAC5E,UAAU,CAAC,GAAG,EAAE,eAAe,EAAE,GAAG,EAAE,cAAc,EAAE,GAAG,EAAE,GAAG,GAAG,OAAO,CAAC;IACzE,aAAa,CAAC,GAAG,EAAE,eAAe,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC;CAC5E,CAwRA"}
|
|
@@ -0,0 +1,397 @@
|
|
|
1
|
+
import { requestLiteralLoopback } from '../core/loopback-target.js';
|
|
2
|
+
import { TERMINAL_VIEW_FORWARD_HEADER } from '../core/terminal-control-grant.js';
|
|
3
|
+
export const TERMINAL_CONTROL_HEADER = 'x-botmux-terminal-control';
|
|
4
|
+
export { TERMINAL_VIEW_FORWARD_HEADER };
|
|
5
|
+
/** Covers daemon wake-up (up to 10s) plus a bounded worker handshake. Cleared
|
|
6
|
+
* as soon as response/upgrade headers arrive, so live streams stay unbounded. */
|
|
7
|
+
export const TERMINAL_UPSTREAM_RESPONSE_TIMEOUT_MS = 30_000;
|
|
8
|
+
/**
|
|
9
|
+
* P1-2:upgrade 请求收到非 101 回应 = 一次拒绝,不是长连接。清掉唯一那道计时器
|
|
10
|
+
* 之后,一个不结束 body 的上游能把上游 socket 与浏览器 socket 一起挂死,没有任
|
|
11
|
+
* 何东西会回收它们。所以这条路保留总时限 + idle 时限(只有 idle 时限时,每 N 秒
|
|
12
|
+
* 滴一个字节就能永久续命),并给拒绝体加一个上限——预览那一跳早就有了。
|
|
13
|
+
*/
|
|
14
|
+
export const TERMINAL_UPGRADE_REJECTION_TIMEOUT_MS = 15_000;
|
|
15
|
+
export const TERMINAL_UPGRADE_REJECTION_IDLE_TIMEOUT_MS = 10_000;
|
|
16
|
+
export const MAX_TERMINAL_UPGRADE_REJECTION_BYTES = 64 * 1024;
|
|
17
|
+
function safeDecodeSessionId(raw) {
|
|
18
|
+
let decoded;
|
|
19
|
+
try {
|
|
20
|
+
decoded = decodeURIComponent(raw);
|
|
21
|
+
}
|
|
22
|
+
catch {
|
|
23
|
+
return undefined;
|
|
24
|
+
}
|
|
25
|
+
return decoded && decoded.length <= 512 && !/[\\/\0]/.test(decoded) ? decoded : undefined;
|
|
26
|
+
}
|
|
27
|
+
export function parseTerminalFrontPath(pathname) {
|
|
28
|
+
if (!pathname.startsWith('/s/'))
|
|
29
|
+
return null;
|
|
30
|
+
const raw = pathname.slice(3).split('/')[0];
|
|
31
|
+
const sessionId = safeDecodeSessionId(raw);
|
|
32
|
+
return sessionId ? { sessionId } : null;
|
|
33
|
+
}
|
|
34
|
+
function sensitiveBrowserHeader(name) {
|
|
35
|
+
const lower = name.toLowerCase();
|
|
36
|
+
return lower === 'cookie'
|
|
37
|
+
|| lower === 'authorization'
|
|
38
|
+
|| lower === 'proxy-authorization'
|
|
39
|
+
|| lower === 'referer'
|
|
40
|
+
|| lower === 'forwarded'
|
|
41
|
+
|| lower.startsWith('x-forwarded-')
|
|
42
|
+
|| lower.startsWith('x-botmux-');
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Authenticated Dashboard requests are converted to one signed loopback grant.
|
|
46
|
+
* Client-supplied cookies/role/grant headers are removed first. Token/viewToken
|
|
47
|
+
* query capabilities remain supported for legacy direct links and are handled
|
|
48
|
+
* independently by the worker.
|
|
49
|
+
*/
|
|
50
|
+
export function terminalForwardHeaders(headers, grant, options = {}) {
|
|
51
|
+
if (!grant && !options.stripBrowserCredentials) {
|
|
52
|
+
// Legacy query capabilities and platform headers retain their historical
|
|
53
|
+
// behavior, but an unauthenticated browser may never supply/replay the new
|
|
54
|
+
// internal grant header itself.
|
|
55
|
+
const forwarded = { ...headers };
|
|
56
|
+
delete forwarded[TERMINAL_CONTROL_HEADER];
|
|
57
|
+
return forwarded;
|
|
58
|
+
}
|
|
59
|
+
const forwarded = {};
|
|
60
|
+
for (const [name, value] of Object.entries(headers)) {
|
|
61
|
+
if (value === undefined || sensitiveBrowserHeader(name))
|
|
62
|
+
continue;
|
|
63
|
+
forwarded[name] = value;
|
|
64
|
+
}
|
|
65
|
+
if (grant)
|
|
66
|
+
forwarded[TERMINAL_CONTROL_HEADER] = grant;
|
|
67
|
+
return forwarded;
|
|
68
|
+
}
|
|
69
|
+
function plainError(res, status, message) {
|
|
70
|
+
res.writeHead(status, {
|
|
71
|
+
'content-type': 'text/plain; charset=utf-8',
|
|
72
|
+
'cache-control': 'no-store',
|
|
73
|
+
'referrer-policy': 'no-referrer',
|
|
74
|
+
});
|
|
75
|
+
res.end(message);
|
|
76
|
+
}
|
|
77
|
+
function socketError(socket, status, message) {
|
|
78
|
+
if (socket.destroyed)
|
|
79
|
+
return;
|
|
80
|
+
const body = message;
|
|
81
|
+
const reason = status === 403 ? 'Forbidden'
|
|
82
|
+
: status === 404 ? 'Not Found'
|
|
83
|
+
: status === 409 ? 'Conflict'
|
|
84
|
+
: 'Bad Gateway';
|
|
85
|
+
socket.end([
|
|
86
|
+
`HTTP/1.1 ${status} ${reason}`,
|
|
87
|
+
'content-type: text/plain; charset=utf-8',
|
|
88
|
+
'cache-control: no-store',
|
|
89
|
+
'connection: close',
|
|
90
|
+
`content-length: ${Buffer.byteLength(body)}`,
|
|
91
|
+
'',
|
|
92
|
+
body,
|
|
93
|
+
].join('\r\n'));
|
|
94
|
+
}
|
|
95
|
+
/**
|
|
96
|
+
* P1-4: the auth session this bridge belongs to, or `undefined` when the
|
|
97
|
+
* request is authorized by something other than a dashboard authentication.
|
|
98
|
+
*
|
|
99
|
+
* An explicit `?token=` / `?viewToken=` query capability that did NOT resolve
|
|
100
|
+
* to a bound view capability is deliberately excluded: P1-6 made that token the
|
|
101
|
+
* SOLE authorization basis, so the opener's ambient authentication must not
|
|
102
|
+
* decide its fate in either direction. Everything else — a bound view
|
|
103
|
+
* capability, an injected read grant, an injected write grant (leased or the
|
|
104
|
+
* platform owner's fixed one) — lives and dies with its auth session.
|
|
105
|
+
*/
|
|
106
|
+
function bridgeAuthSession(prepared) {
|
|
107
|
+
return prepared.readAuthSessionId
|
|
108
|
+
?? (prepared.proxyGrant ? prepared.actor?.authSessionId : undefined);
|
|
109
|
+
}
|
|
110
|
+
export function createTerminalFrontProxy(options) {
|
|
111
|
+
const prepare = (req, url) => {
|
|
112
|
+
const parsed = parseTerminalFrontPath(url.pathname);
|
|
113
|
+
if (!parsed)
|
|
114
|
+
return null;
|
|
115
|
+
const port = options.resolvePort(parsed.sessionId);
|
|
116
|
+
const actor = options.resolveActor(req);
|
|
117
|
+
// An explicit `?token=` / `?viewToken=` query capability — no matter who
|
|
118
|
+
// carries it, platform/H5 actors included — is the SOLE authorization basis
|
|
119
|
+
// for the request (P1-6). No internal grant is injected next to it: a
|
|
120
|
+
// platform teammate/guest opening a correct write link used to receive a
|
|
121
|
+
// read grant that silently outranked the token at the worker, turning the
|
|
122
|
+
// explicitly issued 「操作链接」 read-only. Ambient Cookie / X-Botmux-Role
|
|
123
|
+
// headers are stripped for the same reason in the other direction: a wrong
|
|
124
|
+
// token must not become writable by borrowing the opener's owner ambient.
|
|
125
|
+
const hasExplicitQueryCapability = url.searchParams.has('token')
|
|
126
|
+
|| url.searchParams.has('viewToken');
|
|
127
|
+
// P1-5: a bound view capability names the auth session it was minted for.
|
|
128
|
+
// Refuse it once that authentication ended (logout/expiry) — the worker's
|
|
129
|
+
// stateless signature/expiry check alone would still accept it.
|
|
130
|
+
let readAuthSessionId;
|
|
131
|
+
let viewForwardProof;
|
|
132
|
+
if (hasExplicitQueryCapability) {
|
|
133
|
+
const viewToken = url.searchParams.get('viewToken');
|
|
134
|
+
const boundAuthSession = viewToken
|
|
135
|
+
? options.viewCapabilityAuthSession?.(parsed.sessionId, viewToken) ?? null
|
|
136
|
+
: null;
|
|
137
|
+
if (boundAuthSession && viewToken) {
|
|
138
|
+
if (options.isAuthSessionLive?.(boundAuthSession) === false) {
|
|
139
|
+
return { ...parsed, port, revoked: true };
|
|
140
|
+
}
|
|
141
|
+
readAuthSessionId = boundAuthSession;
|
|
142
|
+
// Countersign only what this proxy just validated as live. The proof is
|
|
143
|
+
// bound to the exact capability string, so it can neither be moved onto
|
|
144
|
+
// a different grant nor be replayed by a browser that never sees it.
|
|
145
|
+
viewForwardProof = options.viewCapabilityForwardProof?.(viewToken);
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
const proxyGrant = actor && !hasExplicitQueryCapability
|
|
149
|
+
? options.control.grantForProxy(actor, parsed.sessionId)
|
|
150
|
+
: undefined;
|
|
151
|
+
if (actor && proxyGrant?.scope === 'read')
|
|
152
|
+
readAuthSessionId = actor.authSessionId;
|
|
153
|
+
const headers = terminalForwardHeaders(req.headers, proxyGrant?.token, {
|
|
154
|
+
// Validate the explicit capability at the worker, but do not also send
|
|
155
|
+
// the legacy management cookie: a garbage `?token=` must not become a
|
|
156
|
+
// writable request merely because its opener is the owner Dashboard.
|
|
157
|
+
stripBrowserCredentials: hasExplicitQueryCapability,
|
|
158
|
+
});
|
|
159
|
+
// Set AFTER the header build, which drops every client-supplied `x-botmux-*`
|
|
160
|
+
// on this path: a browser can never smuggle its own forward proof through.
|
|
161
|
+
if (viewForwardProof)
|
|
162
|
+
headers[TERMINAL_VIEW_FORWARD_HEADER] = viewForwardProof;
|
|
163
|
+
return { ...parsed, port, revoked: false, actor, proxyGrant, readAuthSessionId, headers };
|
|
164
|
+
};
|
|
165
|
+
const handleHttp = (req, res, url) => {
|
|
166
|
+
if (!(url.pathname === '/s' || url.pathname.startsWith('/s/')))
|
|
167
|
+
return false;
|
|
168
|
+
const prepared = prepare(req, url);
|
|
169
|
+
if (!prepared?.port) {
|
|
170
|
+
plainError(res, 404, 'session terminal not available');
|
|
171
|
+
return true;
|
|
172
|
+
}
|
|
173
|
+
if (prepared.revoked) {
|
|
174
|
+
plainError(res, 403, 'view capability revoked');
|
|
175
|
+
return true;
|
|
176
|
+
}
|
|
177
|
+
const upstream = requestLiteralLoopback({ host: '127.0.0.1', port: prepared.port }, {
|
|
178
|
+
method: req.method,
|
|
179
|
+
path: req.url,
|
|
180
|
+
headers: prepared.headers,
|
|
181
|
+
}, up => {
|
|
182
|
+
upstream.setTimeout(0);
|
|
183
|
+
res.writeHead(up.statusCode ?? 502, up.headers);
|
|
184
|
+
// P1-2:浏览器提前断开时把上游一起收掉。`up.pipe(res)` 在 dest 关闭时只做
|
|
185
|
+
// unpipe,不会 destroy source;headers 一到又把 30s 的前置超时拆掉了,于是
|
|
186
|
+
// 这条上游没有任何东西会回收——终端这一跳同样有长响应(日志/流式输出)。
|
|
187
|
+
// `ClientRequest.destroy()` 可重入;响应已自然写完的情况不必多此一举。
|
|
188
|
+
res.on('close', () => { if (!res.writableEnded)
|
|
189
|
+
upstream.destroy(); });
|
|
190
|
+
up.pipe(res);
|
|
191
|
+
});
|
|
192
|
+
upstream.setTimeout(TERMINAL_UPSTREAM_RESPONSE_TIMEOUT_MS, () => upstream.destroy());
|
|
193
|
+
upstream.on('error', () => {
|
|
194
|
+
if (!res.headersSent)
|
|
195
|
+
plainError(res, 502, 'terminal proxy error');
|
|
196
|
+
else
|
|
197
|
+
res.end();
|
|
198
|
+
});
|
|
199
|
+
req.on('aborted', () => upstream.destroy());
|
|
200
|
+
req.pipe(upstream);
|
|
201
|
+
return true;
|
|
202
|
+
};
|
|
203
|
+
const handleUpgrade = (req, clientSocket, head) => {
|
|
204
|
+
let url;
|
|
205
|
+
try {
|
|
206
|
+
url = new URL(req.url ?? '/', 'http://localhost');
|
|
207
|
+
}
|
|
208
|
+
catch {
|
|
209
|
+
return false;
|
|
210
|
+
}
|
|
211
|
+
if (!(url.pathname === '/s' || url.pathname.startsWith('/s/')))
|
|
212
|
+
return false;
|
|
213
|
+
// Install this synchronously for every claimed upgrade path. Browser
|
|
214
|
+
// disconnects can race DNS/connect/401/404/502 handling; an EventEmitter
|
|
215
|
+
// `error` without a listener would otherwise terminate the Dashboard.
|
|
216
|
+
let upstreamRequest;
|
|
217
|
+
let bridgedSocket;
|
|
218
|
+
clientSocket.on('error', () => {
|
|
219
|
+
upstreamRequest?.destroy();
|
|
220
|
+
bridgedSocket?.destroy();
|
|
221
|
+
if (!clientSocket.destroyed)
|
|
222
|
+
clientSocket.destroy();
|
|
223
|
+
});
|
|
224
|
+
const prepared = prepare(req, url);
|
|
225
|
+
if (!prepared?.port) {
|
|
226
|
+
socketError(clientSocket, 404, 'session terminal not available');
|
|
227
|
+
return true;
|
|
228
|
+
}
|
|
229
|
+
if (prepared.revoked) {
|
|
230
|
+
socketError(clientSocket, 403, 'view capability revoked');
|
|
231
|
+
return true;
|
|
232
|
+
}
|
|
233
|
+
let responded = false;
|
|
234
|
+
const upstream = requestLiteralLoopback({ host: '127.0.0.1', port: prepared.port }, {
|
|
235
|
+
method: req.method,
|
|
236
|
+
path: req.url,
|
|
237
|
+
headers: prepared.headers,
|
|
238
|
+
});
|
|
239
|
+
upstreamRequest = upstream;
|
|
240
|
+
upstream.setTimeout(TERMINAL_UPSTREAM_RESPONSE_TIMEOUT_MS, () => upstream.destroy());
|
|
241
|
+
upstream.on('upgrade', (upRes, upstreamSocket, upstreamHead) => {
|
|
242
|
+
responded = true;
|
|
243
|
+
bridgedSocket = upstreamSocket;
|
|
244
|
+
upstream.setTimeout(0);
|
|
245
|
+
upstreamSocket.setTimeout(0);
|
|
246
|
+
// P1-4: the liveness check in `prepare` is a snapshot taken BEFORE the
|
|
247
|
+
// dial. Between it and this upstream 101 sits a real worker handshake
|
|
248
|
+
// (the response timeout alone allows 30s of daemon wake-up), and a
|
|
249
|
+
// logout / expiry / rotation / unbind landing inside that window revokes
|
|
250
|
+
// nothing here: the socket exists only as a local variable, so the
|
|
251
|
+
// revocation sweep walks the authSession→socket index and finds it
|
|
252
|
+
// absent. Registering it afterwards would file a live bridge under an
|
|
253
|
+
// already-dead auth session, where no future revocation reaches it
|
|
254
|
+
// either — it would survive until the worker's own read-capability
|
|
255
|
+
// expiry, up to ten more minutes.
|
|
256
|
+
//
|
|
257
|
+
// Re-check here, in the same synchronous tick that registers the socket.
|
|
258
|
+
// Revocation always deletes the session from the liveness authority
|
|
259
|
+
// BEFORE it sweeps the index (see DashboardSessionStore.endHash and
|
|
260
|
+
// dashboard.ts's endDashboardAuthSession), so the two possible orders are
|
|
261
|
+
// now: we register first and the sweep closes us, or the sweep already
|
|
262
|
+
// ran and this check refuses. There is no third order that leaks.
|
|
263
|
+
const authSessionId = bridgeAuthSession(prepared);
|
|
264
|
+
if (authSessionId !== undefined && options.isAuthSessionLive?.(authSessionId) === false) {
|
|
265
|
+
// Nothing is relayed: no 101, no registration, and the upstream socket
|
|
266
|
+
// dies so the worker does not keep a half-open bridge either.
|
|
267
|
+
upstreamSocket.destroy();
|
|
268
|
+
socketError(clientSocket, 403, 'authentication ended');
|
|
269
|
+
return;
|
|
270
|
+
}
|
|
271
|
+
let leaseMarker;
|
|
272
|
+
if (prepared.actor && prepared.proxyGrant?.scope === 'write' && prepared.proxyGrant.leaseMarker) {
|
|
273
|
+
const registered = options.control.registerWritableSocket(prepared.actor, prepared.sessionId, clientSocket, prepared.proxyGrant.leaseMarker);
|
|
274
|
+
leaseMarker = registered.leaseMarker;
|
|
275
|
+
if (!registered.registered) {
|
|
276
|
+
// The worker may have accepted a grant that was valid when the dial
|
|
277
|
+
// began but was released/expired/replaced during its async handshake.
|
|
278
|
+
// Never relay that 101: revoke the matching old lease (if any) and
|
|
279
|
+
// make the browser reconnect through the now-read-only path.
|
|
280
|
+
options.control.disconnect(prepared.actor, prepared.sessionId, prepared.proxyGrant.leaseMarker);
|
|
281
|
+
upstreamSocket.destroy();
|
|
282
|
+
socketError(clientSocket, 409, 'terminal control expired');
|
|
283
|
+
return;
|
|
284
|
+
}
|
|
285
|
+
}
|
|
286
|
+
// P1-5: index the stream under its auth session so logout/expiry closes
|
|
287
|
+
// it now rather than at the worker's grant-expiry timer. A leased write
|
|
288
|
+
// bridge is already carried by its lease's own socket set; everything
|
|
289
|
+
// else (bound view capability, injected read grant, and the platform
|
|
290
|
+
// owner's fixed write grant, which has no lease behind it) is indexed
|
|
291
|
+
// here — otherwise the liveness re-check above would only have moved the
|
|
292
|
+
// leak one tick later instead of closing it.
|
|
293
|
+
const deregisterBridgeSocket = authSessionId !== undefined && !leaseMarker
|
|
294
|
+
? options.control.registerReadSocket(authSessionId, clientSocket)
|
|
295
|
+
: undefined;
|
|
296
|
+
const lines = [`HTTP/1.1 ${upRes.statusCode ?? 101} ${upRes.statusMessage ?? 'Switching Protocols'}`];
|
|
297
|
+
const raw = upRes.rawHeaders;
|
|
298
|
+
for (let i = 0; i + 1 < raw.length; i += 2)
|
|
299
|
+
lines.push(`${raw[i]}: ${raw[i + 1]}`);
|
|
300
|
+
lines.push('', '');
|
|
301
|
+
clientSocket.write(lines.join('\r\n'));
|
|
302
|
+
if (upstreamHead.length)
|
|
303
|
+
clientSocket.write(upstreamHead);
|
|
304
|
+
if (head.length)
|
|
305
|
+
upstreamSocket.write(head);
|
|
306
|
+
let disconnected = false;
|
|
307
|
+
const releaseOnDisconnect = () => {
|
|
308
|
+
if (disconnected)
|
|
309
|
+
return;
|
|
310
|
+
disconnected = true;
|
|
311
|
+
deregisterBridgeSocket?.();
|
|
312
|
+
if (prepared.actor && leaseMarker) {
|
|
313
|
+
options.control.disconnect(prepared.actor, prepared.sessionId, leaseMarker);
|
|
314
|
+
}
|
|
315
|
+
};
|
|
316
|
+
upstreamSocket.pipe(clientSocket);
|
|
317
|
+
clientSocket.pipe(upstreamSocket);
|
|
318
|
+
const cleanup = () => {
|
|
319
|
+
releaseOnDisconnect();
|
|
320
|
+
upstreamSocket.destroy();
|
|
321
|
+
clientSocket.destroy();
|
|
322
|
+
};
|
|
323
|
+
upstreamSocket.on('error', cleanup);
|
|
324
|
+
upstreamSocket.on('close', () => { releaseOnDisconnect(); clientSocket.destroy(); });
|
|
325
|
+
clientSocket.on('close', () => { releaseOnDisconnect(); upstreamSocket.destroy(); });
|
|
326
|
+
});
|
|
327
|
+
upstream.on('response', upRes => {
|
|
328
|
+
responded = true;
|
|
329
|
+
// P1-2:拒绝体必须在限期内读完,且有上限(见常量注释)。
|
|
330
|
+
let settled = false;
|
|
331
|
+
let totalTimer;
|
|
332
|
+
const disarm = () => {
|
|
333
|
+
settled = true;
|
|
334
|
+
if (totalTimer)
|
|
335
|
+
clearTimeout(totalTimer);
|
|
336
|
+
totalTimer = undefined;
|
|
337
|
+
};
|
|
338
|
+
const abandon = () => {
|
|
339
|
+
if (settled)
|
|
340
|
+
return;
|
|
341
|
+
disarm();
|
|
342
|
+
upRes.destroy();
|
|
343
|
+
upstream.destroy();
|
|
344
|
+
clientSocket.destroy();
|
|
345
|
+
};
|
|
346
|
+
upstream.setTimeout(TERMINAL_UPGRADE_REJECTION_IDLE_TIMEOUT_MS, abandon);
|
|
347
|
+
totalTimer = setTimeout(abandon, TERMINAL_UPGRADE_REJECTION_TIMEOUT_MS);
|
|
348
|
+
totalTimer.unref?.();
|
|
349
|
+
// 客户端先走时也要回收上游。升级请求的 socket 被 http server 摘掉 data 监听
|
|
350
|
+
// 后是暂停态,且 http server 建的 socket 是 allowHalfOpen——不 `resume()` 就
|
|
351
|
+
// 收不到 FIN,收到了也不会自动关。升级已被拒,客户端 FIN 即视为它走了。
|
|
352
|
+
clientSocket.on('close', abandon);
|
|
353
|
+
clientSocket.on('end', abandon);
|
|
354
|
+
clientSocket.resume();
|
|
355
|
+
const lines = [`HTTP/1.1 ${upRes.statusCode ?? 502} ${upRes.statusMessage ?? 'Bad Gateway'}`, 'connection: close'];
|
|
356
|
+
const raw = upRes.rawHeaders;
|
|
357
|
+
for (let i = 0; i + 1 < raw.length; i += 2) {
|
|
358
|
+
const name = raw[i].toLowerCase();
|
|
359
|
+
if (name === 'transfer-encoding' || name === 'content-length' || name === 'connection')
|
|
360
|
+
continue;
|
|
361
|
+
lines.push(`${raw[i]}: ${raw[i + 1]}`);
|
|
362
|
+
}
|
|
363
|
+
lines.push('', '');
|
|
364
|
+
clientSocket.write(lines.join('\r\n'));
|
|
365
|
+
let bodyBytes = 0;
|
|
366
|
+
upRes.on('data', chunk => {
|
|
367
|
+
if (settled)
|
|
368
|
+
return;
|
|
369
|
+
const buffer = Buffer.isBuffer(chunk) ? chunk : Buffer.from(chunk);
|
|
370
|
+
bodyBytes += buffer.byteLength;
|
|
371
|
+
if (bodyBytes > MAX_TERMINAL_UPGRADE_REJECTION_BYTES) {
|
|
372
|
+
abandon();
|
|
373
|
+
return;
|
|
374
|
+
}
|
|
375
|
+
clientSocket.write(buffer);
|
|
376
|
+
});
|
|
377
|
+
upRes.on('end', () => {
|
|
378
|
+
if (settled)
|
|
379
|
+
return;
|
|
380
|
+
disarm();
|
|
381
|
+
upstream.setTimeout(0);
|
|
382
|
+
clientSocket.end();
|
|
383
|
+
});
|
|
384
|
+
upRes.on('error', () => { disarm(); clientSocket.destroy(); });
|
|
385
|
+
});
|
|
386
|
+
upstream.on('error', () => {
|
|
387
|
+
if (!responded)
|
|
388
|
+
socketError(clientSocket, 502, 'terminal proxy error');
|
|
389
|
+
else
|
|
390
|
+
clientSocket.destroy();
|
|
391
|
+
});
|
|
392
|
+
upstream.end();
|
|
393
|
+
return true;
|
|
394
|
+
};
|
|
395
|
+
return { handleHttp, handleUpgrade };
|
|
396
|
+
}
|
|
397
|
+
//# sourceMappingURL=terminal-front-proxy.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"terminal-front-proxy.js","sourceRoot":"","sources":["../../src/dashboard/terminal-front-proxy.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Short-lived read capability for the `/api/sessions/:id/view-link` URL.
|
|
3
|
+
*
|
|
4
|
+
* The link used to embed the worker's STABLE view token — an irrevocable
|
|
5
|
+
* bearer capability: an H5 viewer who fetched it once could keep reading the
|
|
6
|
+
* terminal long after logout/expiry, and a worker restart re-derived the same
|
|
7
|
+
* value. The view-link URL now carries a signed read grant instead, bound to
|
|
8
|
+
* sessionId + authSessionId + expiresAt.
|
|
9
|
+
*
|
|
10
|
+
* That alone was still bypassable (P1-5, second round): the returned URL kept
|
|
11
|
+
* the DAEMON/WORKER origin, so a copied raw URL — or a direct dial to the
|
|
12
|
+
* worker port / the daemon's own network-bound `/s/` reverse proxy — reached a
|
|
13
|
+
* stateless verifier that knew nothing about logout. Central revocation was
|
|
14
|
+
* decoration on a road nobody had to drive. Two changes close it, and the
|
|
15
|
+
* capability now names both of them in its own claims:
|
|
16
|
+
*
|
|
17
|
+
* • CENTRAL-ONLY CONSUMPTION. `centralViewLinkPath` returns a same-origin
|
|
18
|
+
* path on the central dashboard (`/s/<id>/?viewToken=…`) — the daemon /
|
|
19
|
+
* worker origin never leaves this process. The capability is minted with
|
|
20
|
+
* `audience: 'central'`, and the front proxy countersigns each accepted
|
|
21
|
+
* capability with a forward proof the browser cannot compute. The worker
|
|
22
|
+
* demands both, so a raw URL pointed at any other entry point fails closed
|
|
23
|
+
* even though its signature and expiry are perfectly valid.
|
|
24
|
+
* • WORKER GENERATION PINNING. The capability carries the worker's per-boot
|
|
25
|
+
* generation (derived one-way from the boot view token the daemon already
|
|
26
|
+
* reports). A worker restart re-randomizes it, so grants issued to a dead
|
|
27
|
+
* boot die with it instead of surviving on the shared `.dashboard-secret`.
|
|
28
|
+
*
|
|
29
|
+
* Revocation therefore has two independent fences: the front proxy refuses a
|
|
30
|
+
* capability whose auth session ended (and closes its bridged sockets), and the
|
|
31
|
+
* worker refuses one that did not come through that proxy or that outlived the
|
|
32
|
+
* boot it was minted for.
|
|
33
|
+
*
|
|
34
|
+
* The TTL doubles as the periodic reconnect boundary for read sockets, so it
|
|
35
|
+
* is deliberately longer than the old 60s per-request read grants (which now
|
|
36
|
+
* share this constant) but still short enough that a copied URL dies quickly.
|
|
37
|
+
*/
|
|
38
|
+
export declare const TERMINAL_VIEW_CAPABILITY_TTL_MS: number;
|
|
39
|
+
export interface TerminalViewCapabilityIdentity {
|
|
40
|
+
userId: string;
|
|
41
|
+
authSessionId: string;
|
|
42
|
+
/** Authentication expiry of the requesting identity; the minted capability
|
|
43
|
+
* never outlives it. */
|
|
44
|
+
expiresAt: number;
|
|
45
|
+
}
|
|
46
|
+
/** Mint the short-lived, identity-bound read capability for one session.
|
|
47
|
+
* `workerGeneration` pins the capability to the worker boot it was minted
|
|
48
|
+
* against — see `upstreamWorkerViewGeneration`. */
|
|
49
|
+
export declare function mintTerminalViewCapability(secret: string, sessionId: string, identity: TerminalViewCapabilityIdentity, workerGeneration: string, now?: number): {
|
|
50
|
+
token: string;
|
|
51
|
+
expiresAt: number;
|
|
52
|
+
} | null;
|
|
53
|
+
/**
|
|
54
|
+
* Read the worker boot generation out of the daemon-built view-link URL.
|
|
55
|
+
*
|
|
56
|
+
* That upstream URL still carries the worker's per-boot card token in
|
|
57
|
+
* `?viewToken=` — the one value that identifies the live worker generation and
|
|
58
|
+
* that this process must never pass through to a browser. We convert it to a
|
|
59
|
+
* one-way generation id here and drop the token itself.
|
|
60
|
+
*
|
|
61
|
+
* Fails closed (null) on a malformed URL, a non-http(s) scheme, a missing
|
|
62
|
+
* token, or an upstream that already handed us a signed grant: without a
|
|
63
|
+
* generation the caller must return an error rather than mint an unpinned
|
|
64
|
+
* capability.
|
|
65
|
+
*/
|
|
66
|
+
export declare function upstreamWorkerViewGeneration(secret: string, upstreamUrl: unknown): string | null;
|
|
67
|
+
/**
|
|
68
|
+
* Build the browser-facing view link: a CENTRAL-ORIGIN RELATIVE path, never an
|
|
69
|
+
* absolute URL. The daemon's terminal-proxy port and the worker port are both
|
|
70
|
+
* reachable on the network and neither knows anything about auth-session
|
|
71
|
+
* liveness, so publishing either origin is the whole bypass — a relative path
|
|
72
|
+
* cannot name them, and cannot be repointed by a poisoned `Host` header the way
|
|
73
|
+
* a server-rebuilt absolute URL could.
|
|
74
|
+
*
|
|
75
|
+
* The path shape matches the front proxy's `/s/<sessionId>` route, which is
|
|
76
|
+
* also what the daemon's proxy and the worker accept after the loopback hops.
|
|
77
|
+
*/
|
|
78
|
+
export declare function centralViewLinkPath(sessionId: string, token: string): string | null;
|
|
79
|
+
/**
|
|
80
|
+
* Resolve which auth session a bound `?viewToken=` capability belongs to, or
|
|
81
|
+
* null when the value is not a valid bound read capability for this session.
|
|
82
|
+
* Used by the front proxy to (a) refuse capabilities whose auth session was
|
|
83
|
+
* already revoked and (b) index the bridged socket for logout-time closing.
|
|
84
|
+
*
|
|
85
|
+
* A grant without `audience: 'central'` is an internal loopback credential that
|
|
86
|
+
* was never meant to travel in a URL; it resolves to null so the proxy neither
|
|
87
|
+
* blesses it nor countersigns it.
|
|
88
|
+
*/
|
|
89
|
+
export declare function terminalViewCapabilityAuthSession(secret: string, sessionId: string, viewToken: string | null | undefined, now?: number): string | null;
|
|
90
|
+
/**
|
|
91
|
+
* Countersign one accepted view capability for the loopback hop. Only the front
|
|
92
|
+
* proxy calls this, and only after the capability's auth session was confirmed
|
|
93
|
+
* live — the proof is what tells the worker "this request came through the
|
|
94
|
+
* component that holds the revocation state".
|
|
95
|
+
*/
|
|
96
|
+
export declare function terminalViewForwardProof(secret: string, viewToken: string): string | undefined;
|
|
97
|
+
//# sourceMappingURL=terminal-view-capability.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"terminal-view-capability.d.ts","sourceRoot":"","sources":["../../src/dashboard/terminal-view-capability.ts"],"names":[],"mappings":"AAQA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAoCG;AACH,eAAO,MAAM,+BAA+B,QAAc,CAAC;AAE3D,MAAM,WAAW,8BAA8B;IAC7C,MAAM,EAAE,MAAM,CAAC;IACf,aAAa,EAAE,MAAM,CAAC;IACtB;6BACyB;IACzB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED;;oDAEoD;AACpD,wBAAgB,0BAA0B,CACxC,MAAM,EAAE,MAAM,EACd,SAAS,EAAE,MAAM,EACjB,QAAQ,EAAE,8BAA8B,EACxC,gBAAgB,EAAE,MAAM,EACxB,GAAG,SAAa,GACf;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAuB7C;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,4BAA4B,CAAC,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,OAAO,GAAG,MAAM,GAAG,IAAI,CAMhG;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,mBAAmB,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAKnF;AAED;;;;;;;;;GASG;AACH,wBAAgB,iCAAiC,CAC/C,MAAM,EAAE,MAAM,EACd,SAAS,EAAE,MAAM,EACjB,SAAS,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,EACpC,GAAG,SAAa,GACf,MAAM,GAAG,IAAI,CAMf;AAED;;;;;GAKG;AACH,wBAAgB,wBAAwB,CAAC,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAE9F"}
|