botmux 3.15.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/types.d.ts +101 -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 +13 -3
- package/dist/adapters/cli/cursor.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 +6 -4
- package/dist/adapters/cli/pi.d.ts.map +1 -1
- package/dist/adapters/cli/pi.js +6 -4
- 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 +22 -6
- package/dist/adapters/cli/shared-hints.js.map +1 -1
- package/dist/adapters/cli/types.d.ts +29 -4
- package/dist/adapters/cli/types.d.ts.map +1 -1
- package/dist/bot-registry.d.ts +20 -0
- package/dist/bot-registry.d.ts.map +1 -1
- package/dist/bot-registry.js +30 -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 +933 -115
- 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-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 +373 -41
- 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/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 +2494 -209
- 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 +443 -106
- 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 +1 -0
- package/dist/dashboard/bot-payload.d.ts.map +1 -1
- package/dist/dashboard/bot-payload.js +3 -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 +11 -0
- package/dist/dashboard/web/bot-defaults-page.d.ts.map +1 -1
- package/dist/dashboard/web/bot-defaults-page.js +267 -36
- package/dist/dashboard/web/bot-defaults-page.js.map +1 -1
- package/dist/dashboard/web/bot-defaults.d.ts +6 -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 +132 -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/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-Z7B3E3US.js → chunk-2W6SCN3M.js} +1 -1
- package/dist/dashboard-web/chunks/chunk-4XNJX6B3.js +1 -0
- package/dist/dashboard-web/chunks/{chunk-VMWNR3SV.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-Z7DO42GJ.js → chunk-NACP7BMR.js} +1 -1
- package/dist/dashboard-web/chunks/{connectors-page-CPH6VVFY.js → connectors-page-VOISXXII.js} +1 -1
- package/dist/dashboard-web/chunks/{feedback-page-J2FKQ3LK.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-A2LWTKJD.js → insights-page-HJFDYR5N.js} +3 -3
- package/dist/dashboard-web/chunks/{monitor-room-2YR752E3.js → monitor-room-V7PCP47V.js} +1 -1
- package/dist/dashboard-web/chunks/{monitoring-page-BGYSKZGM.js → monitoring-page-NKEKVQAP.js} +1 -1
- package/dist/dashboard-web/chunks/{office-page-ZZHTEAE4.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-YUC4YLJG.js → roles-page-WQIRSOLZ.js} +1 -1
- package/dist/dashboard-web/chunks/{schedules-page-2L2NKTDJ.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-DQPBBI3T.js → skills-page-HGIFR3IU.js} +1 -1
- package/dist/dashboard-web/chunks/{team-federation-page-LQKLDV4K.js → team-federation-page-MR5ZPL4B.js} +1 -1
- package/dist/dashboard-web/chunks/{v3-page-RVKQIMAP.js → v3-page-GBR5JWPE.js} +2 -2
- package/dist/dashboard-web/chunks/{whiteboards-page-S5K55HRZ.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 +1006 -263
- package/dist/dashboard.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 +31 -1
- package/dist/i18n/en.js.map +1 -1
- package/dist/i18n/zh.d.ts.map +1 -1
- package/dist/i18n/zh.js +28 -1
- 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 +133 -22
- 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-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/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 +9 -5
- package/dist/services/structured-bridge-clis.d.ts.map +1 -1
- package/dist/services/structured-bridge-clis.js +9 -4
- 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 +221 -10
- package/dist/types.d.ts.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 +1284 -225
- 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 +3 -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-65SMZ4QY.js +0 -10
- package/dist/dashboard-web/chunks/chunk-G5XGBCM6.js +0 -1
- package/dist/dashboard-web/chunks/chunk-IKN6WURK.js +0 -1
- package/dist/dashboard-web/chunks/chunk-WLIVBPJC.js +0 -1
- package/dist/dashboard-web/chunks/groups-page-VDOOLS4M.js +0 -8
- package/dist/dashboard-web/chunks/overview-page-7NYPKQSB.js +0 -1
- package/dist/dashboard-web/chunks/sessions-page-DYZZMKFL.js +0 -8
- package/dist/dashboard-web/chunks/settings-page-LIULUSMH.js +0 -2
|
@@ -0,0 +1,486 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Which processes still belong to a mojo turn, and are they gone yet?
|
|
3
|
+
*
|
|
4
|
+
* Why a PGID is not enough
|
|
5
|
+
* ------------------------
|
|
6
|
+
* Signalling `-pgid` looked sufficient, but a descendant can call `setsid()` (or
|
|
7
|
+
* be spawned with `detached: true`) and become the leader of a NEW group and
|
|
8
|
+
* session. It then survives every `kill(-pgid)` aimed at the original group while
|
|
9
|
+
* still holding the inherited `X_JWT_TOKEN`. Reparenting to init also destroys the
|
|
10
|
+
* PPID chain once the direct child exits, so neither PGID nor parentage alone can
|
|
11
|
+
* enumerate the subtree.
|
|
12
|
+
*
|
|
13
|
+
* The three signals below are therefore unioned, because each covers the others'
|
|
14
|
+
* blind spot:
|
|
15
|
+
* - PGID the common case, and the only one that works before /proc
|
|
16
|
+
* has been read
|
|
17
|
+
* - env nonce a unique value injected into the turn's environment. It is
|
|
18
|
+
* inherited by every descendant and survives setsid, a new
|
|
19
|
+
* session, and reparenting to init
|
|
20
|
+
* - PPID chain catches a descendant that scrubbed its own environ but is
|
|
21
|
+
* still parented inside the tree
|
|
22
|
+
*
|
|
23
|
+
* Trust domain: this is a DIAGNOSTIC SIGNAL, not a boundary
|
|
24
|
+
* --------------------------------------------------------
|
|
25
|
+
* A hijacked child runs as the same user, so a descendant that both setsids AND
|
|
26
|
+
* overwrites its own environ area can still evade enumeration. Reading a clean
|
|
27
|
+
* scan as "the credential is now unreachable" is therefore unsound, and the type
|
|
28
|
+
* system now says so: a successful scan is stamped `evidence: 'diagnostic'`, and
|
|
29
|
+
* `quiescenceFromScan()` maps even an EMPTY member list to
|
|
30
|
+
* `{ kind: 'diagnostic-clean', boundaryProof: false }`. Only a kernel-level
|
|
31
|
+
* container (per-session cgroup v2 / pid namespace, see mojo-containment) can
|
|
32
|
+
* produce `boundaryProof: true`. Callers must keep the session's
|
|
33
|
+
* device-isolation blocker whenever `boundaryProof` is false — including the
|
|
34
|
+
* clean-scan case.
|
|
35
|
+
*
|
|
36
|
+
* Fail-closed
|
|
37
|
+
* -----------
|
|
38
|
+
* Only ENOENT means "this pid exited between readdir and read", which is a
|
|
39
|
+
* genuine non-member and safe to skip. EVERY other read or parse error means the
|
|
40
|
+
* table we built is incomplete, and an incomplete table can hide a survivor, so
|
|
41
|
+
* it fails the WHOLE scan instead of silently shrinking the result. The one
|
|
42
|
+
* documented exception is EACCES/EPERM on `environ` (see readEnviron).
|
|
43
|
+
*/
|
|
44
|
+
import { readFileSync, readdirSync } from 'node:fs';
|
|
45
|
+
/**
|
|
46
|
+
* The invariants that make `boundaryProven` trustworthy, asserted at the single
|
|
47
|
+
* construction point rather than documented and hoped for.
|
|
48
|
+
*
|
|
49
|
+
* Throwing is deliberate: a violated invariant here means some future edit has
|
|
50
|
+
* re-created the exact fail-open this type exists to prevent (a clean scan
|
|
51
|
+
* laundered into a boundary proof, or an unproven boundary with nothing left
|
|
52
|
+
* behind to hold the blocker). Failing loudly at the source beats publishing a
|
|
53
|
+
* closed row for a session whose credential may still be reachable.
|
|
54
|
+
*/
|
|
55
|
+
function assertTerminationInvariants(outcome) {
|
|
56
|
+
if (outcome.evidence === 'diagnostic-clean' && outcome.boundaryProven) {
|
|
57
|
+
throw new Error('termination invariant: diagnostic-clean can never be a boundary proof');
|
|
58
|
+
}
|
|
59
|
+
if (outcome.evidence === 'diagnostic-clean' && outcome.residual === null) {
|
|
60
|
+
throw new Error('termination invariant: diagnostic-clean must leave a residual');
|
|
61
|
+
}
|
|
62
|
+
if (!outcome.boundaryProven && outcome.residual === null) {
|
|
63
|
+
throw new Error('termination invariant: an unproven boundary must leave a residual');
|
|
64
|
+
}
|
|
65
|
+
if (outcome.boundaryProven && outcome.residual !== null) {
|
|
66
|
+
throw new Error('termination invariant: a proven boundary must not leave a residual');
|
|
67
|
+
}
|
|
68
|
+
return outcome;
|
|
69
|
+
}
|
|
70
|
+
/**
|
|
71
|
+
* Project a scan/containment verdict onto the termination contract.
|
|
72
|
+
*
|
|
73
|
+
* This is the ONLY place a `TerminationOutcome` is constructed, so the
|
|
74
|
+
* invariants above cannot be bypassed by a caller assembling the object by
|
|
75
|
+
* hand.
|
|
76
|
+
*/
|
|
77
|
+
export function terminationOutcomeFromQuiescence(q) {
|
|
78
|
+
switch (q.kind) {
|
|
79
|
+
case 'contained-proven':
|
|
80
|
+
// A kernel-level container reported no members. This is the only branch
|
|
81
|
+
// that may authorise dropping the blocker.
|
|
82
|
+
return assertTerminationInvariants({
|
|
83
|
+
ok: true,
|
|
84
|
+
boundaryProven: true,
|
|
85
|
+
evidence: 'members-empty',
|
|
86
|
+
residual: null,
|
|
87
|
+
signalsStopped: true,
|
|
88
|
+
});
|
|
89
|
+
case 'diagnostic-clean':
|
|
90
|
+
// Enumeration found nothing, which is worth stopping the signalling for
|
|
91
|
+
// and worth NOTHING else: a descendant that setsid'd and scrubbed its own
|
|
92
|
+
// environ is invisible to exactly this scan. The residual is what keeps
|
|
93
|
+
// the device-isolation blocker alive while the session row closes.
|
|
94
|
+
return assertTerminationInvariants({
|
|
95
|
+
ok: true,
|
|
96
|
+
boundaryProven: false,
|
|
97
|
+
evidence: 'diagnostic-clean',
|
|
98
|
+
residual: {
|
|
99
|
+
deviceIsolation: true,
|
|
100
|
+
reason: 'clean scan is a diagnostic signal only; no unforgeable boundary proof was obtained',
|
|
101
|
+
},
|
|
102
|
+
signalsStopped: true,
|
|
103
|
+
});
|
|
104
|
+
case 'alive':
|
|
105
|
+
return assertTerminationInvariants({
|
|
106
|
+
ok: false,
|
|
107
|
+
boundaryProven: false,
|
|
108
|
+
evidence: 'timeout',
|
|
109
|
+
residual: { deviceIsolation: true, pids: [...q.pids], reason: 'members still executing after escalation' },
|
|
110
|
+
signalsStopped: false,
|
|
111
|
+
});
|
|
112
|
+
case 'unscannable':
|
|
113
|
+
// "Cannot enumerate" must never read as "nothing is running".
|
|
114
|
+
return assertTerminationInvariants({
|
|
115
|
+
ok: false,
|
|
116
|
+
boundaryProven: false,
|
|
117
|
+
evidence: 'unknown',
|
|
118
|
+
residual: { deviceIsolation: true, reason: q.reason },
|
|
119
|
+
signalsStopped: false,
|
|
120
|
+
});
|
|
121
|
+
case 'unsupported-platform':
|
|
122
|
+
return assertTerminationInvariants({
|
|
123
|
+
ok: false,
|
|
124
|
+
boundaryProven: false,
|
|
125
|
+
evidence: 'unknown',
|
|
126
|
+
residual: { deviceIsolation: true, reason: `cannot enumerate on ${q.platform}: /proc is Linux-only` },
|
|
127
|
+
signalsStopped: false,
|
|
128
|
+
});
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
/** Injected into every turn child; inherited by the whole subtree. */
|
|
132
|
+
export const MOJO_TREE_NONCE_ENV = 'BOTMUX_MOJO_TREE_NONCE';
|
|
133
|
+
function errnoOf(err) {
|
|
134
|
+
const code = err?.code;
|
|
135
|
+
return typeof code === 'string' ? code : undefined;
|
|
136
|
+
}
|
|
137
|
+
function messageOf(err) {
|
|
138
|
+
return err instanceof Error ? err.message : String(err);
|
|
139
|
+
}
|
|
140
|
+
/**
|
|
141
|
+
* `/proc/<pid>/stat`: field 2 (comm) is parenthesised and may itself contain
|
|
142
|
+
* spaces or ')', so the numeric tail must be cut at the LAST ')' rather than
|
|
143
|
+
* split naively. After that cut, rest[0] is field 3 (state), so field N is
|
|
144
|
+
* rest[N - 3]: ppid=4, pgid=5, starttime=22.
|
|
145
|
+
*/
|
|
146
|
+
function parseStat(text) {
|
|
147
|
+
const close = text.lastIndexOf(')');
|
|
148
|
+
if (close < 0)
|
|
149
|
+
return null;
|
|
150
|
+
const rest = text.slice(close + 1).trim().split(/\s+/);
|
|
151
|
+
const state = rest[0] ?? '';
|
|
152
|
+
const ppid = Number(rest[1]);
|
|
153
|
+
const pgid = Number(rest[2]);
|
|
154
|
+
if (!Number.isInteger(ppid) || !Number.isInteger(pgid))
|
|
155
|
+
return null;
|
|
156
|
+
// starttime is only needed for identity checks; a stat line truncated before
|
|
157
|
+
// field 22 still yields a usable tree member, so it degrades to NaN here and
|
|
158
|
+
// is rejected by readProcessIdentity instead of failing enumeration.
|
|
159
|
+
const starttime = Number(rest[19]);
|
|
160
|
+
return { ppid, pgid, starttime, state };
|
|
161
|
+
}
|
|
162
|
+
/** Boot id, so a persisted (pid, starttime) pair cannot survive a reboot. */
|
|
163
|
+
function readBootId(procRoot) {
|
|
164
|
+
try {
|
|
165
|
+
const raw = readFileSync(`${procRoot}/sys/kernel/random/boot_id`, 'utf-8').trim();
|
|
166
|
+
if (raw.length === 0)
|
|
167
|
+
return { ok: false, detail: 'boot_id is empty' };
|
|
168
|
+
return { ok: true, bootId: raw };
|
|
169
|
+
}
|
|
170
|
+
catch (err) {
|
|
171
|
+
return { ok: false, detail: `cannot read boot_id: ${messageOf(err)}` };
|
|
172
|
+
}
|
|
173
|
+
}
|
|
174
|
+
/** The real kernel interface. Anything else is, by definition, an override. */
|
|
175
|
+
export const DEFAULT_PROC_ROOT = '/proc';
|
|
176
|
+
/**
|
|
177
|
+
* Is this `procRoot` a SUBSTITUTE for the kernel's own /proc?
|
|
178
|
+
*
|
|
179
|
+
* The distinction is the whole gate. The previous test was
|
|
180
|
+
* `procRoot !== undefined`, and every production caller passes a procRoot -- the
|
|
181
|
+
* backend's getter returns the string '/proc' -- so the override branch was
|
|
182
|
+
* unconditionally taken and the non-Linux refusal below could never fire in
|
|
183
|
+
* production. Passing the real path is not an override; only pointing the scanner
|
|
184
|
+
* somewhere else is.
|
|
185
|
+
*/
|
|
186
|
+
export function isProcRootOverridden(procRoot) {
|
|
187
|
+
return procRoot !== undefined && procRoot !== DEFAULT_PROC_ROOT;
|
|
188
|
+
}
|
|
189
|
+
/**
|
|
190
|
+
* `/proc` is a Linux interface. On any other platform the layout either does not
|
|
191
|
+
* exist or does not mean the same thing, so enumeration is refused OUTRIGHT
|
|
192
|
+
* rather than allowed to fail its way into a misleading "nothing is running".
|
|
193
|
+
*
|
|
194
|
+
* Refusing OUTRIGHT is not pedantry, it is the difference between two very
|
|
195
|
+
* different closes. `unsupported-platform` routes to a residual close, which
|
|
196
|
+
* publishes the row, keeps the device-isolation blocker on the durable handle and
|
|
197
|
+
* lets the remote cancel proceed. Any other failure -- including `unscannable` --
|
|
198
|
+
* routes to a fence, which latches write admission and returns a failed close.
|
|
199
|
+
* A fence is right when a retry might yet produce proof; on a host that can NEVER
|
|
200
|
+
* enumerate, it is a permanent wedge, which is exactly the behaviour this module
|
|
201
|
+
* was fixed not to have.
|
|
202
|
+
*
|
|
203
|
+
* A synthetic `procRoot` opts back in: that is how a test points the scanner at a
|
|
204
|
+
* fake tree. The previous version of this comment claimed such an override "is
|
|
205
|
+
* never set in production", which was the reverse of the truth -- production
|
|
206
|
+
* always sets it, to the real /proc, which is why the gate was dead. See
|
|
207
|
+
* `isProcRootOverridden`.
|
|
208
|
+
*/
|
|
209
|
+
export function mojoTreeScanSupported(opts = {}) {
|
|
210
|
+
if (opts.procRootOverridden)
|
|
211
|
+
return true;
|
|
212
|
+
return (opts.platform ?? process.platform) === 'linux';
|
|
213
|
+
}
|
|
214
|
+
function unsupportedScan(platform) {
|
|
215
|
+
return {
|
|
216
|
+
ok: false,
|
|
217
|
+
failure: { kind: 'unsupported-platform', platform },
|
|
218
|
+
reason: `process-tree enumeration needs Linux /proc; platform is ${platform}. `
|
|
219
|
+
+ 'Quiescence cannot be established, so the caller must keep the blocker.',
|
|
220
|
+
};
|
|
221
|
+
}
|
|
222
|
+
/**
|
|
223
|
+
* `environ` is the one place a non-ENOENT error is tolerated.
|
|
224
|
+
*
|
|
225
|
+
* Scanning all of `/proc` necessarily touches OTHER users' processes, whose
|
|
226
|
+
* environ is 0400 root-or-owner; EACCES there is the normal case, not a fault,
|
|
227
|
+
* and failing the scan on it would make every multi-tenant host permanently
|
|
228
|
+
* unscannable. It is not a blind spot that matters either: our descendants
|
|
229
|
+
* inherit our uid, so a process we cannot read cannot be one of them. It is
|
|
230
|
+
* still reported via `envBlindSpots` instead of being silently dropped.
|
|
231
|
+
*/
|
|
232
|
+
function readEnviron(procRoot, name) {
|
|
233
|
+
try {
|
|
234
|
+
return { state: 'read', text: readFileSync(`${procRoot}/${name}/environ`, 'utf-8') };
|
|
235
|
+
}
|
|
236
|
+
catch (err) {
|
|
237
|
+
const code = errnoOf(err);
|
|
238
|
+
if (code === 'ENOENT')
|
|
239
|
+
return { state: 'gone' };
|
|
240
|
+
if (code === 'EACCES' || code === 'EPERM')
|
|
241
|
+
return { state: 'blind' };
|
|
242
|
+
return { state: 'error', detail: messageOf(err) };
|
|
243
|
+
}
|
|
244
|
+
}
|
|
245
|
+
function readProcTable(procRoot, nonce) {
|
|
246
|
+
let names;
|
|
247
|
+
try {
|
|
248
|
+
names = readdirSync(procRoot);
|
|
249
|
+
}
|
|
250
|
+
catch (err) {
|
|
251
|
+
// No /proc (or unreadable) means the tree cannot be enumerated at all. The
|
|
252
|
+
// caller must NOT read that as "nothing is running".
|
|
253
|
+
return {
|
|
254
|
+
ok: false,
|
|
255
|
+
failure: { kind: 'proc-unreadable', detail: messageOf(err) },
|
|
256
|
+
reason: `cannot read ${procRoot}: ${messageOf(err)}`,
|
|
257
|
+
};
|
|
258
|
+
}
|
|
259
|
+
const table = [];
|
|
260
|
+
const envBlindSpots = [];
|
|
261
|
+
for (const name of names) {
|
|
262
|
+
if (!/^\d+$/.test(name))
|
|
263
|
+
continue;
|
|
264
|
+
const pid = Number(name);
|
|
265
|
+
let parsed;
|
|
266
|
+
try {
|
|
267
|
+
parsed = parseStat(readFileSync(`${procRoot}/${name}/stat`, 'utf-8'));
|
|
268
|
+
}
|
|
269
|
+
catch (err) {
|
|
270
|
+
// ENOENT: exited between readdir and read. A vanished process is genuinely
|
|
271
|
+
// not a member, so skipping it is correct and is not a scan failure.
|
|
272
|
+
if (errnoOf(err) === 'ENOENT')
|
|
273
|
+
continue;
|
|
274
|
+
// Anything else (EACCES, EIO, ...) means we cannot account for this pid.
|
|
275
|
+
// An unaccounted pid could be the survivor we are looking for, so the whole
|
|
276
|
+
// scan fails rather than quietly omitting it.
|
|
277
|
+
return {
|
|
278
|
+
ok: false,
|
|
279
|
+
failure: { kind: 'proc-entry-unreadable', pid, detail: messageOf(err) },
|
|
280
|
+
reason: `cannot read ${procRoot}/${name}/stat: ${messageOf(err)}`,
|
|
281
|
+
};
|
|
282
|
+
}
|
|
283
|
+
if (parsed === null) {
|
|
284
|
+
// A stat line we cannot parse is NOT an absent process. Skipping it used to
|
|
285
|
+
// hide a live member behind a formatting surprise; fail instead.
|
|
286
|
+
return {
|
|
287
|
+
ok: false,
|
|
288
|
+
failure: { kind: 'proc-entry-unparsable', pid, detail: 'unparsable stat line' },
|
|
289
|
+
reason: `cannot parse ${procRoot}/${name}/stat`,
|
|
290
|
+
};
|
|
291
|
+
}
|
|
292
|
+
const environ = readEnviron(procRoot, name);
|
|
293
|
+
if (environ.state === 'gone')
|
|
294
|
+
continue; // raced us after stat; not a member
|
|
295
|
+
if (environ.state === 'error') {
|
|
296
|
+
return {
|
|
297
|
+
ok: false,
|
|
298
|
+
failure: { kind: 'proc-entry-unreadable', pid, detail: environ.detail },
|
|
299
|
+
reason: `cannot read ${procRoot}/${name}/environ: ${environ.detail}`,
|
|
300
|
+
};
|
|
301
|
+
}
|
|
302
|
+
if (environ.state === 'blind')
|
|
303
|
+
envBlindSpots.push(pid);
|
|
304
|
+
table.push({
|
|
305
|
+
pid,
|
|
306
|
+
ppid: parsed.ppid,
|
|
307
|
+
pgid: parsed.pgid,
|
|
308
|
+
// Only a definite 'Z' counts; an unreadable or surprising state must not
|
|
309
|
+
// become an excuse to discount a live process.
|
|
310
|
+
zombie: parsed.state === 'Z',
|
|
311
|
+
// Zero-separated; a substring test is enough for a unique nonce.
|
|
312
|
+
hasNonce: environ.state === 'read' && environ.text.includes(nonce),
|
|
313
|
+
});
|
|
314
|
+
}
|
|
315
|
+
return { ok: true, table, envBlindSpots };
|
|
316
|
+
}
|
|
317
|
+
/**
|
|
318
|
+
* Every live process still belonging to the turn rooted at `rootPid`.
|
|
319
|
+
*
|
|
320
|
+
* `excludePids` MUST contain the current process (and anything else that must
|
|
321
|
+
* never be signalled): the daemon shares neither the nonce nor the group, but an
|
|
322
|
+
* explicit guard is cheaper than trusting that invariant while sending SIGKILL.
|
|
323
|
+
*
|
|
324
|
+
* PGID membership (`p.pid === rootPid || p.pgid === rootPid`) is a bare numeric
|
|
325
|
+
* comparison against a remembered pid, and this module's own identity primitive
|
|
326
|
+
* exists because bare pids are not stable handles: once the root is reaped, a
|
|
327
|
+
* recycled pid that becomes a new group leader wears the same number, and the
|
|
328
|
+
* ppid closure would then claim that stranger's whole subtree — consumers
|
|
329
|
+
* SIGKILL every claimed member. PGID claiming therefore requires
|
|
330
|
+
* `opts.rootIdentity` (the identity recorded when the root was spawned) to
|
|
331
|
+
* still verify against the live process. Without it — not passed, root gone, or
|
|
332
|
+
* recycled — only the env nonce plus its ppid closure claim members, both of
|
|
333
|
+
* which are positive evidence of THIS turn's membership.
|
|
334
|
+
*
|
|
335
|
+
* A successful result is a diagnostic signal only; see `quiescenceFromScan`.
|
|
336
|
+
*/
|
|
337
|
+
export function scanMojoTree(rootPid, nonce, opts = {}) {
|
|
338
|
+
const platform = opts.platform ?? process.platform;
|
|
339
|
+
if (!mojoTreeScanSupported({ platform, procRootOverridden: isProcRootOverridden(opts.procRoot) })) {
|
|
340
|
+
return unsupportedScan(platform);
|
|
341
|
+
}
|
|
342
|
+
const procRoot = opts.procRoot ?? '/proc';
|
|
343
|
+
const read = readProcTable(procRoot, nonce);
|
|
344
|
+
if (!read.ok)
|
|
345
|
+
return read;
|
|
346
|
+
// Verified means: the caller recorded the root's identity at spawn, the pid it
|
|
347
|
+
// names is the pid being scanned, and the LIVE process still carries that
|
|
348
|
+
// identity. Anything less and group membership proves nothing.
|
|
349
|
+
const recorded = opts.rootIdentity;
|
|
350
|
+
let rootVerified = false;
|
|
351
|
+
if (recorded && recorded.pid === rootPid) {
|
|
352
|
+
const live = readProcessIdentity(rootPid, { procRoot, platform });
|
|
353
|
+
rootVerified = live.ok && sameProcessIdentity(recorded, live.identity);
|
|
354
|
+
}
|
|
355
|
+
const excluded = new Set(opts.excludePids ?? []);
|
|
356
|
+
const members = new Map();
|
|
357
|
+
const claim = (p, via) => {
|
|
358
|
+
if (excluded.has(p.pid) || members.has(p.pid))
|
|
359
|
+
return;
|
|
360
|
+
members.set(p.pid, { pid: p.pid, ppid: p.ppid, pgid: p.pgid, via, zombie: p.zombie });
|
|
361
|
+
};
|
|
362
|
+
for (const p of read.table) {
|
|
363
|
+
if (rootVerified && (p.pid === rootPid || p.pgid === rootPid))
|
|
364
|
+
claim(p, 'pgid');
|
|
365
|
+
else if (p.hasNonce)
|
|
366
|
+
claim(p, 'env');
|
|
367
|
+
}
|
|
368
|
+
// Transitive closure over parentage, so an env-scrubbed child of a known member
|
|
369
|
+
// is still claimed. Bounded by the table size, so it cannot loop on a cycle.
|
|
370
|
+
for (let changed = true; changed;) {
|
|
371
|
+
changed = false;
|
|
372
|
+
for (const p of read.table) {
|
|
373
|
+
if (members.has(p.pid) || excluded.has(p.pid))
|
|
374
|
+
continue;
|
|
375
|
+
if (!members.has(p.ppid))
|
|
376
|
+
continue;
|
|
377
|
+
// Never walk up into init/the daemon: only DOWN from a known member.
|
|
378
|
+
claim(p, 'ppid');
|
|
379
|
+
changed = true;
|
|
380
|
+
}
|
|
381
|
+
}
|
|
382
|
+
return {
|
|
383
|
+
ok: true,
|
|
384
|
+
evidence: 'diagnostic',
|
|
385
|
+
members: [...members.values()],
|
|
386
|
+
envBlindSpots: read.envBlindSpots,
|
|
387
|
+
};
|
|
388
|
+
}
|
|
389
|
+
/**
|
|
390
|
+
* Map a scan onto a quiescence verdict — WITHOUT ever minting boundary proof.
|
|
391
|
+
*
|
|
392
|
+
* An empty member list becomes `diagnostic-clean`, whose `boundaryProof` is
|
|
393
|
+
* false, because enumeration cannot see a descendant that setsid'd and scrubbed
|
|
394
|
+
* its environ. Callers keep the blocker unless `boundaryProof` is true.
|
|
395
|
+
*/
|
|
396
|
+
export function quiescenceFromScan(scan) {
|
|
397
|
+
if (!scan.ok) {
|
|
398
|
+
if (scan.failure.kind === 'unsupported-platform') {
|
|
399
|
+
return { kind: 'unsupported-platform', boundaryProof: false, platform: scan.failure.platform };
|
|
400
|
+
}
|
|
401
|
+
return { kind: 'unscannable', boundaryProof: false, reason: scan.reason };
|
|
402
|
+
}
|
|
403
|
+
// Zombies are discounted: already reaped, executing nothing, incapable of using
|
|
404
|
+
// the credential. Keeping them would block the close forever on a process that
|
|
405
|
+
// cannot act — safe in direction but impossible to recover from. Only a definite
|
|
406
|
+
// 'Z' is discounted (see MojoTreeMember.zombie), so an unreadable state still
|
|
407
|
+
// counts as executing.
|
|
408
|
+
const executing = scan.members.filter(m => !m.zombie);
|
|
409
|
+
if (executing.length > 0) {
|
|
410
|
+
return { kind: 'alive', boundaryProof: false, pids: executing.map(m => m.pid) };
|
|
411
|
+
}
|
|
412
|
+
return { kind: 'diagnostic-clean', boundaryProof: false };
|
|
413
|
+
}
|
|
414
|
+
/** Read the recycle-proof identity of a pid. */
|
|
415
|
+
export function readProcessIdentity(pid, opts = {}) {
|
|
416
|
+
const platform = opts.platform ?? process.platform;
|
|
417
|
+
if (!mojoTreeScanSupported({ platform, procRootOverridden: isProcRootOverridden(opts.procRoot) })) {
|
|
418
|
+
const failed = unsupportedScan(platform);
|
|
419
|
+
return { ok: false, failure: failed.failure, reason: failed.reason };
|
|
420
|
+
}
|
|
421
|
+
const procRoot = opts.procRoot ?? '/proc';
|
|
422
|
+
const boot = readBootId(procRoot);
|
|
423
|
+
if (!boot.ok) {
|
|
424
|
+
return { ok: false, failure: { kind: 'proc-unreadable', detail: boot.detail }, reason: boot.detail };
|
|
425
|
+
}
|
|
426
|
+
let text;
|
|
427
|
+
try {
|
|
428
|
+
text = readFileSync(`${procRoot}/${pid}/stat`, 'utf-8');
|
|
429
|
+
}
|
|
430
|
+
catch (err) {
|
|
431
|
+
return {
|
|
432
|
+
ok: false,
|
|
433
|
+
failure: { kind: 'proc-entry-unreadable', pid, detail: messageOf(err) },
|
|
434
|
+
reason: `cannot read ${procRoot}/${pid}/stat: ${errnoOf(err) ?? messageOf(err)}`,
|
|
435
|
+
};
|
|
436
|
+
}
|
|
437
|
+
const parsed = parseStat(text);
|
|
438
|
+
if (parsed === null || !Number.isInteger(parsed.starttime)) {
|
|
439
|
+
return {
|
|
440
|
+
ok: false,
|
|
441
|
+
failure: { kind: 'proc-entry-unparsable', pid, detail: 'no usable starttime in stat' },
|
|
442
|
+
reason: `cannot parse starttime from ${procRoot}/${pid}/stat`,
|
|
443
|
+
};
|
|
444
|
+
}
|
|
445
|
+
return { ok: true, identity: { pid, bootId: boot.bootId, starttime: parsed.starttime } };
|
|
446
|
+
}
|
|
447
|
+
/** Same process, or a recycled pid wearing its number? */
|
|
448
|
+
export function sameProcessIdentity(a, b) {
|
|
449
|
+
return a.pid === b.pid && a.bootId === b.bootId && a.starttime === b.starttime;
|
|
450
|
+
}
|
|
451
|
+
/**
|
|
452
|
+
* `kill(-rootPid, signal)` — but ONLY after proving the pid is still the process
|
|
453
|
+
* we spawned.
|
|
454
|
+
*
|
|
455
|
+
* A bare group kill on a remembered pid is a footgun: pids recycle, so after the
|
|
456
|
+
* turn root exits the number can name an unrelated process, and negating it
|
|
457
|
+
* signals THAT process's whole group. Everything except a verified match
|
|
458
|
+
* therefore signals nothing at all; refusing to kill is always recoverable,
|
|
459
|
+
* killing the wrong group is not.
|
|
460
|
+
*/
|
|
461
|
+
export function signalTurnTreeGroup(expected, signal, opts = {}) {
|
|
462
|
+
const read = readProcessIdentity(expected.pid, opts);
|
|
463
|
+
if (!read.ok) {
|
|
464
|
+
if (read.failure.kind === 'unsupported-platform') {
|
|
465
|
+
return { kind: 'unsupported-platform', platform: read.failure.platform };
|
|
466
|
+
}
|
|
467
|
+
// A vanished root is the expected happy path late in teardown.
|
|
468
|
+
if (read.failure.kind === 'proc-entry-unreadable' && /ENOENT|no such file/i.test(read.reason)) {
|
|
469
|
+
return { kind: 'gone' };
|
|
470
|
+
}
|
|
471
|
+
return { kind: 'unverifiable', reason: read.reason };
|
|
472
|
+
}
|
|
473
|
+
if (!sameProcessIdentity(expected, read.identity)) {
|
|
474
|
+
return { kind: 'identity-mismatch', expected, actual: read.identity };
|
|
475
|
+
}
|
|
476
|
+
const kill = opts.kill ?? ((target, sig) => { process.kill(target, sig); });
|
|
477
|
+
try {
|
|
478
|
+
kill(-expected.pid, signal);
|
|
479
|
+
}
|
|
480
|
+
catch {
|
|
481
|
+
// Raced us between the identity read and the signal: the group is gone.
|
|
482
|
+
return { kind: 'gone' };
|
|
483
|
+
}
|
|
484
|
+
return { kind: 'signalled' };
|
|
485
|
+
}
|
|
486
|
+
//# sourceMappingURL=mojo-process-tree.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mojo-process-tree.js","sourceRoot":"","sources":["../../../src/adapters/backend/mojo-process-tree.ts"],"names":[],"mappings":"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"}
|