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
|
@@ -12,16 +12,18 @@ import * as sessionStore from '../services/session-store.js';
|
|
|
12
12
|
import * as messageQueue from '../services/message-queue.js';
|
|
13
13
|
import { downloadMessageResource, listChatBotMembers, UserTokenMissingError } from '../im/lark/client.js';
|
|
14
14
|
import { logger } from '../utils/logger.js';
|
|
15
|
-
import { forkWorker, sendWorkerInput, promoteQueuedActivationTail, forkAdoptWorker, adoptSandboxBlocked, killStalePids, sweepDeadPidMarkers, getCurrentCliVersion, restoreUsageLimitRuntimeState, setActiveSessionSafe, setActiveSessionIfActive, isDisposableCommandScratch, isRelayableRealSession, closeSession, getActiveSessionsRegistry, suspendWorker, withActiveSessionKeyLock, isSessionTransferring, deferUntilSessionTransferSettled } from './worker-pool.js';
|
|
15
|
+
import { forkWorker, sendWorkerInput, promoteQueuedActivationTail, forkAdoptWorker, adoptSandboxBlocked, killStalePids, sweepDeadPidMarkers, getCurrentCliVersion, restoreUsageLimitRuntimeState, setActiveSessionSafe, setActiveSessionIfActive, isDisposableCommandScratch, isRelayableRealSession, closeSession, getActiveSessionsRegistry, suspendWorker, withActiveSessionKeyLock, isSessionTransferring, deferUntilSessionTransferSettled, ensureOrdinaryTurnRecoveryAttached } from './worker-pool.js';
|
|
16
16
|
import { createCliAdapterSync } from '../adapters/cli/registry.js';
|
|
17
17
|
import { botHomePath } from '../adapters/cli/read-isolation.js';
|
|
18
18
|
import { buildBotmuxShellHints } from '../adapters/cli/shared-hints.js';
|
|
19
19
|
import { resolveSkillInjectionModeForApp, builtinSkillEntries, buildBuiltinSkillCatalogBlock, builtinSkillHelpPointer, } from '../skills/injection-mode.js';
|
|
20
20
|
import { getSessionPersistentBackendType, persistentBackendTargetForSession, probePersistentBackendTarget, probePersistentSessions, killPersistentBackendTarget, } from './persistent-backend.js';
|
|
21
21
|
import { adoptTargetLabel, validateAdoptTargetState } from './session-discovery.js';
|
|
22
|
+
import { freezeMojoIdentityForSession } from './mojo-session-identity.js';
|
|
22
23
|
import { getBot, getAllBots, getOwnerOpenId, findOncallChat, effectiveDefaultWorkingDir } from '../bot-registry.js';
|
|
23
24
|
import { sameRuntimeIdentity } from '../adapters/cli/runtime.js';
|
|
24
25
|
import { dashboardEventBus } from './dashboard-events.js';
|
|
26
|
+
import { clearSessionPreviewTarget } from './session-preview-registry.js';
|
|
25
27
|
import { composeRowFromActive, composeRowFromPersistedActive } from './dashboard-rows.js';
|
|
26
28
|
import { composeSpawnCodexAppContext, composeSpawnUserContent, deriveSessionTitleFromContent, } from './session-create.js';
|
|
27
29
|
import { validateZellijAdoptTarget } from './zellij-adopt-discovery.js';
|
|
@@ -139,6 +141,36 @@ async function resumeRestoredPendingRepoSetup(ds, activeSessions) {
|
|
|
139
141
|
}
|
|
140
142
|
logger.info(`[${ds.session.sessionId.substring(0, 8)}] Resumed durable pending repo opening without selectable projects`);
|
|
141
143
|
}
|
|
144
|
+
/**
|
|
145
|
+
* Drop a persisted `previewTarget` that belonged to the previous worker
|
|
146
|
+
* generation, before this restore pass rebuilds a DaemonSession from the row.
|
|
147
|
+
*
|
|
148
|
+
* `previewTarget` is the literal loopback (host, port) an agent registered with
|
|
149
|
+
* `botmux preview <port>`; it is routing state for the worker that was live at
|
|
150
|
+
* registration time, not a durable property of the conversation. Restore always
|
|
151
|
+
* opens a NEW generation — every row here is rebuilt with `worker: null`, and
|
|
152
|
+
* killStalePids has just reaped the previous run's CLI processes — so whatever
|
|
153
|
+
* served that port is gone and the OS may hand the number to any unrelated
|
|
154
|
+
* local service. The preview proxy dials a registered target by host/port
|
|
155
|
+
* alone, so carrying one across the restart can proxy a user's preview into
|
|
156
|
+
* someone else's local server. Applies to adopt rows too: a surviving adopted
|
|
157
|
+
* CLI is no proof that its dev server survived, and re-registering costs one
|
|
158
|
+
* command inside the session.
|
|
159
|
+
*
|
|
160
|
+
* Cleanup only — registration (`POST /api/sessions/:id/preview`, which probes
|
|
161
|
+
* reachability first) and the proxy are untouched; the session simply
|
|
162
|
+
* re-registers. A failed save is logged and swallowed: the in-memory row this
|
|
163
|
+
* pass registers is already clear (so nothing dials the stale target), and the
|
|
164
|
+
* next successful save converges the file.
|
|
165
|
+
*/
|
|
166
|
+
function clearRestoredPreviewTarget(session) {
|
|
167
|
+
// P1-13:与 worker 换代 / suspend / exit / close 走同一个收口(清字段 + 落盘 +
|
|
168
|
+
// 广播 `preview: null`),restore 只是「代次边界」的又一种形态,不该有第二份实现。
|
|
169
|
+
if (!clearSessionPreviewTarget(session, 'restore opens a new worker generation'))
|
|
170
|
+
return;
|
|
171
|
+
logger.debug(`[${session.sessionId.substring(0, 8)}] Dropped preview target registered by the previous worker `
|
|
172
|
+
+ `generation; the session must re-register with \`botmux preview <port>\``);
|
|
173
|
+
}
|
|
142
174
|
function quarantineUnregisteredRestoreSession(session, reason) {
|
|
143
175
|
session.restoreQuarantinedAt ??= new Date().toISOString();
|
|
144
176
|
try {
|
|
@@ -286,7 +318,28 @@ async function closeActiveSessionIfCliMismatch(ds) {
|
|
|
286
318
|
else {
|
|
287
319
|
logger.warn(`[${tag}] CLI mismatch (session=${mismatch.sessionCli}, bot=${mismatch.botCli}), closing active session`);
|
|
288
320
|
}
|
|
289
|
-
await closeSession(ds.session.sessionId);
|
|
321
|
+
const result = await closeSession(ds.session.sessionId);
|
|
322
|
+
if (!result.ok) {
|
|
323
|
+
// closeSession models a refused close as a RETURNED {ok:false}, not a throw.
|
|
324
|
+
// Falling through to 'closed' here counted a still-active row (whose remote
|
|
325
|
+
// session may still be running) as torn down, and the caller then reported a
|
|
326
|
+
// green "closed N". The row and its registry owner are deliberately left
|
|
327
|
+
// intact by closeSession, so the sweep just reports the failure.
|
|
328
|
+
logger.error(`[${tag}] CLI mismatch close REFUSED (${result.error}); row stays active`);
|
|
329
|
+
return 'close_failed';
|
|
330
|
+
}
|
|
331
|
+
if (result.outcome === 'closed_with_residual') {
|
|
332
|
+
// A hot CLI/backend switch can hit an old mojo row carrying either a parked
|
|
333
|
+
// remote lineage OR a local host subtree that could not be proven terminated.
|
|
334
|
+
// This path has no interactive surface, so the warning has to be loud in the
|
|
335
|
+
// log AND counted separately for whatever is showing the sweep total. Kind-
|
|
336
|
+
// aware so a LOCAL residual is not logged as a phantom `(undefined)` remote id.
|
|
337
|
+
const r = result.residual;
|
|
338
|
+
logger.warn(r.taskId
|
|
339
|
+
? `[${tag}] CLI mismatch close left an UNCANCELLED remote session (${r.taskId}); manual cleanup required`
|
|
340
|
+
: `[${tag}] CLI mismatch close left a local host subtree unproven (${r.reason}); manual cleanup required`);
|
|
341
|
+
return 'closed_with_residual';
|
|
342
|
+
}
|
|
290
343
|
return 'closed';
|
|
291
344
|
}
|
|
292
345
|
/**
|
|
@@ -299,11 +352,22 @@ async function closeActiveSessionIfCliMismatch(ds) {
|
|
|
299
352
|
* 豁免口径与 restoreActiveSessions 一致:queued(待办池)会话从没起过 CLI;
|
|
300
353
|
* adopt 会话接管的是用户自己的外部 CLI,其 cliId 与 bot 配置不同是合法状态。
|
|
301
354
|
*/
|
|
355
|
+
/**
|
|
356
|
+
* 返回值区分三种结果,而不是一个 closed 计数:远端 CLI(mojo / riff)的会话活在
|
|
357
|
+
* 本机之外,本地行关掉了而远端仍存活是真实可能的结果。
|
|
358
|
+
*
|
|
359
|
+
* - `closed`:本地行已关闭,且没有需要人工处理的残留。
|
|
360
|
+
* - `residual`:本地行已关闭(因此不会再被路由到),但远端会话还在,其 taskId 需要
|
|
361
|
+
* 上报给运维,否则调用方只看到「closed N」而拿不到清理线索。
|
|
362
|
+
* - `failed`:关闭被拒绝(例如远端取消无法证明),该行仍然 active。
|
|
363
|
+
*/
|
|
302
364
|
export async function closeCliMismatchedSessionsForBot(larkAppId) {
|
|
303
365
|
const registry = getActiveSessionsRegistry();
|
|
304
366
|
if (!registry)
|
|
305
|
-
return 0;
|
|
367
|
+
return { closed: 0, residual: 0, failed: 0 };
|
|
306
368
|
let closed = 0;
|
|
369
|
+
let residual = 0;
|
|
370
|
+
let failed = 0;
|
|
307
371
|
// 先快照再遍历:closeSession 会在迭代途中从 registry 删项。
|
|
308
372
|
for (const ds of [...registry.values()]) {
|
|
309
373
|
if (ds.larkAppId !== larkAppId)
|
|
@@ -325,15 +389,24 @@ export async function closeCliMismatchedSessionsForBot(larkAppId) {
|
|
|
325
389
|
const result = await closeActiveSessionIfCliMismatch(ds);
|
|
326
390
|
if (result === 'closed')
|
|
327
391
|
closed++;
|
|
392
|
+
else if (result === 'closed_with_residual') {
|
|
393
|
+
closed++;
|
|
394
|
+
residual++;
|
|
395
|
+
}
|
|
396
|
+
else if (result === 'close_failed' || result === 'teardown_failed')
|
|
397
|
+
failed++;
|
|
328
398
|
else if (result === 'transfer_deferred')
|
|
329
399
|
armCliMismatchResweep(ds);
|
|
330
400
|
}
|
|
331
401
|
catch (err) {
|
|
402
|
+
// A thrown close is a failure too — count it, or the caller reports a clean
|
|
403
|
+
// sweep while this row is still active.
|
|
404
|
+
failed++;
|
|
332
405
|
logger.error(`[${ds.session.sessionId.substring(0, 8)}] CLI mismatch close failed; continuing sweep: `
|
|
333
406
|
+ `${err instanceof Error ? err.message : String(err)}`);
|
|
334
407
|
}
|
|
335
408
|
}
|
|
336
|
-
return closed;
|
|
409
|
+
return { closed, residual, failed };
|
|
337
410
|
}
|
|
338
411
|
/**
|
|
339
412
|
* Suspend (kill the CLI/pane, keep the session active) every non-queued,
|
|
@@ -565,7 +638,7 @@ function renderChatContextBlock(chatContext) {
|
|
|
565
638
|
}
|
|
566
639
|
/**
|
|
567
640
|
* Render a `<sender>` tag for prompt injection. Caller resolves the sender
|
|
568
|
-
* (open_id + type + optional name) via `resolveSender(...)` in identity-cache.
|
|
641
|
+
* (open_id + type + optional name/email) via `resolveSender(...)` in identity-cache.
|
|
569
642
|
* Returns empty string when no sender data is available so the prompt stays
|
|
570
643
|
* clean for synthetic flows (scheduled tasks, no-op spawns).
|
|
571
644
|
*/
|
|
@@ -575,6 +648,8 @@ export function renderSenderTag(sender) {
|
|
|
575
648
|
const attrs = [`type="${xmlEscape(sender.type)}"`, `open_id="${xmlEscape(sender.openId)}"`];
|
|
576
649
|
if (sender.name)
|
|
577
650
|
attrs.push(`name="${xmlEscape(sender.name)}"`);
|
|
651
|
+
if (sender.email)
|
|
652
|
+
attrs.push(`email="${xmlEscape(sender.email)}"`);
|
|
578
653
|
return `<sender ${attrs.join(' ')} />`;
|
|
579
654
|
}
|
|
580
655
|
/**
|
|
@@ -1346,6 +1421,7 @@ export function persistStreamCardState(ds) {
|
|
|
1346
1421
|
// Skip write if nothing actually changed — avoids disk churn on every screen_update.
|
|
1347
1422
|
if (s.streamCardId === cardId &&
|
|
1348
1423
|
s.streamCardNonce === ds.streamCardNonce &&
|
|
1424
|
+
s.streamCardReplyTargetKey === ds.streamCardReplyTargetKey &&
|
|
1349
1425
|
s.displayMode === ds.displayMode &&
|
|
1350
1426
|
s.currentImageKey === ds.currentImageKey &&
|
|
1351
1427
|
s.currentTurnTitle === ds.currentTurnTitle &&
|
|
@@ -1358,6 +1434,7 @@ export function persistStreamCardState(ds) {
|
|
|
1358
1434
|
return;
|
|
1359
1435
|
s.streamCardId = cardId;
|
|
1360
1436
|
s.streamCardNonce = ds.streamCardNonce;
|
|
1437
|
+
s.streamCardReplyTargetKey = ds.streamCardReplyTargetKey;
|
|
1361
1438
|
s.displayMode = ds.displayMode;
|
|
1362
1439
|
s.currentImageKey = ds.currentImageKey;
|
|
1363
1440
|
s.currentTurnTitle = ds.currentTurnTitle;
|
|
@@ -1514,6 +1591,157 @@ export async function restoreActiveSessions(activeSessions, quarantinedSessionId
|
|
|
1514
1591
|
logger.debug(`[${session.sessionId.substring(0, 8)}] Already registered by live runtime during restore; skipping snapshot row`);
|
|
1515
1592
|
continue;
|
|
1516
1593
|
}
|
|
1594
|
+
// New worker generation ⇒ no registered preview port. Runs before every
|
|
1595
|
+
// branch below (adopt / queued / ordinary / close / quarantine — including
|
|
1596
|
+
// the mojo journal reconciliation right after, which has its own `continue`
|
|
1597
|
+
// paths) so no rebuilt DaemonSession or announced row, and no row persisted
|
|
1598
|
+
// by a quarantine/recovered close, can carry the old target.
|
|
1599
|
+
clearRestoredPreviewTarget(session);
|
|
1600
|
+
// Freeze the mojo control plane BEFORE this row becomes visible in the active
|
|
1601
|
+
// map. The dispatcher is already live during restore, so a row registered
|
|
1602
|
+
// first could be woken — or `/close`d — while still reading live bot config,
|
|
1603
|
+
// pairing a lineage created on one tenant with another. Idempotent and cheap
|
|
1604
|
+
// for non-mojo rows.
|
|
1605
|
+
//
|
|
1606
|
+
// Attribution must never be guessed. Legacy rows can genuinely lack
|
|
1607
|
+
// larkAppId (session-store keeps them for compatibility), and falling back
|
|
1608
|
+
// to getAllBots()[0] classified such rows against an ARBITRARY bot: if
|
|
1609
|
+
// bot[0] happened to be mojo, an unrelated old riff/remote row was frozen
|
|
1610
|
+
// with bot[0]'s tenant identity and its lineage parked into
|
|
1611
|
+
// mojoQuarantinedLineage — the exact cross-tenant misbinding the freeze
|
|
1612
|
+
// exists to prevent, inverted, and idempotently locked in (an existing
|
|
1613
|
+
// mojoIdentity short-circuits every later boot). A single registered bot is
|
|
1614
|
+
// the one unambiguous fallback; with several, leave the row unfrozen so
|
|
1615
|
+
// `mojoIdentity === undefined` keeps meaning "predates this field".
|
|
1616
|
+
{
|
|
1617
|
+
const allBots = getAllBots();
|
|
1618
|
+
const freezeAppId = session.larkAppId
|
|
1619
|
+
?? (allBots.length === 1 ? allBots[0]?.config.larkAppId : undefined);
|
|
1620
|
+
if (freezeAppId !== undefined) {
|
|
1621
|
+
freezeMojoIdentityForSession(session, freezeAppId);
|
|
1622
|
+
}
|
|
1623
|
+
else if (session.backendType === 'mojo' || session.cliId === 'mojo') {
|
|
1624
|
+
logger.warn(`[${session.sessionId.substring(0, 8)}] mojo row has no larkAppId and `
|
|
1625
|
+
+ `${allBots.length} bots are registered; refusing to guess its tenant — `
|
|
1626
|
+
+ 'identity stays unfrozen (no automatic resume or cancel)');
|
|
1627
|
+
}
|
|
1628
|
+
}
|
|
1629
|
+
if (session.mojoCloseJournal
|
|
1630
|
+
&& !sessionStore.isValidMojoCloseJournal(session.mojoCloseJournal)) {
|
|
1631
|
+
// Session JSON is a runtime boundary. A forged/truncated `prepared` object
|
|
1632
|
+
// must not become proof that cancellation happened merely because the TS
|
|
1633
|
+
// interface says its fields exist.
|
|
1634
|
+
quarantineUnregisteredRestoreSession(session, 'mojo_close_journal_malformed');
|
|
1635
|
+
continue;
|
|
1636
|
+
}
|
|
1637
|
+
if (session.mojoCloseJournal && session.backendType !== 'mojo') {
|
|
1638
|
+
// A Mojo close proof on another backend is corrupt metadata, not authority
|
|
1639
|
+
// to close that backend's row. Fence it for operator inspection; never let
|
|
1640
|
+
// an untyped JSON field become a cross-backend teardown primitive.
|
|
1641
|
+
session.mojoCloseJournal = {
|
|
1642
|
+
phase: 'uncertain',
|
|
1643
|
+
requestId: session.mojoCloseJournal.requestId,
|
|
1644
|
+
...(session.mojoCloseJournal.taskId
|
|
1645
|
+
? { taskId: session.mojoCloseJournal.taskId }
|
|
1646
|
+
: {}),
|
|
1647
|
+
// State the verdict rather than leaving a reader to infer it from the
|
|
1648
|
+
// phase, and rebuild the row from scratch so a stale commit-only marker
|
|
1649
|
+
// cannot survive as false proof of an irreversible teardown.
|
|
1650
|
+
recovery: 'uncertain',
|
|
1651
|
+
admission: 'fenced',
|
|
1652
|
+
updatedAt: new Date().toISOString(),
|
|
1653
|
+
};
|
|
1654
|
+
quarantineUnregisteredRestoreSession(session, 'mojo_close_journal_backend_mismatch');
|
|
1655
|
+
continue;
|
|
1656
|
+
}
|
|
1657
|
+
// ORDER IS LOAD-BEARING: this branch must stay ABOVE the catch-all below,
|
|
1658
|
+
// which rebuilds any remaining journal as `uncertain` + fenced. A commit-only
|
|
1659
|
+
// `prepared` row means the remote teardown already happened and only the local
|
|
1660
|
+
// commit is outstanding; downgrading it to `uncertain` would demand manual
|
|
1661
|
+
// reconciliation for something no retry can resolve, wedging the session open
|
|
1662
|
+
// forever with its device-isolation blocker held. Pinned by
|
|
1663
|
+
// "does NOT downgrade a COMMIT-ONLY prepared close" in
|
|
1664
|
+
// test/restore-zombie-close.test.ts, which goes red if these are reordered.
|
|
1665
|
+
if (session.mojoCloseJournal?.phase === 'prepared') {
|
|
1666
|
+
if (session.mojoQuarantinedLineage) {
|
|
1667
|
+
// The active lineage is proven gone, but an older PARKED lineage still
|
|
1668
|
+
// needs a user-visible manual-cleanup warning. Auto-closing during boot
|
|
1669
|
+
// has no reply surface and would strand the pending notice on a row that
|
|
1670
|
+
// can never accept another turn. Keep the prepared row quarantined until
|
|
1671
|
+
// an explicit close can return closed_with_residual to its caller.
|
|
1672
|
+
quarantineUnregisteredRestoreSession(session, 'mojo_prepared_close_has_residual');
|
|
1673
|
+
continue;
|
|
1674
|
+
}
|
|
1675
|
+
// The previous daemon durably recorded irreversible cancellation before it
|
|
1676
|
+
// crashed. Complete only the local close; closeSession recognizes the
|
|
1677
|
+
// prepared journal and never calls Mojo cancellation again.
|
|
1678
|
+
try {
|
|
1679
|
+
const recoveredClose = await closeSession(session.sessionId);
|
|
1680
|
+
if (recoveredClose.ok) {
|
|
1681
|
+
// The device-isolation blocker is held by the durable containment
|
|
1682
|
+
// handle regardless, but the recovered close may carry a LOCAL residual
|
|
1683
|
+
// (the crashed daemon proved the remote gone but not the host subtree).
|
|
1684
|
+
// Surface it distinctly at boot rather than swallowing it into a plain
|
|
1685
|
+
// "recovered" line, so the residual the row still carries is visible.
|
|
1686
|
+
if (recoveredClose.outcome === 'closed_with_residual') {
|
|
1687
|
+
logger.warn(`[${session.sessionId.substring(0, 8)}] Recovered prepared Mojo close WITH residual `
|
|
1688
|
+
+ `(${recoveredClose.residual.reason}); the device-isolation blocker is retained`);
|
|
1689
|
+
}
|
|
1690
|
+
else {
|
|
1691
|
+
logger.info(`[${session.sessionId.substring(0, 8)}] Recovered prepared Mojo close without re-cancelling`);
|
|
1692
|
+
}
|
|
1693
|
+
continue;
|
|
1694
|
+
}
|
|
1695
|
+
logger.error(`[${session.sessionId.substring(0, 8)}] Prepared Mojo close recovery was refused: `
|
|
1696
|
+
+ `${recoveredClose.error}`);
|
|
1697
|
+
}
|
|
1698
|
+
catch (err) {
|
|
1699
|
+
logger.error(`[${session.sessionId.substring(0, 8)}] Prepared Mojo close recovery failed: `
|
|
1700
|
+
+ `${err instanceof Error ? err.message : String(err)}`);
|
|
1701
|
+
}
|
|
1702
|
+
quarantineUnregisteredRestoreSession(session, 'mojo_prepared_close_commit_failed');
|
|
1703
|
+
continue;
|
|
1704
|
+
}
|
|
1705
|
+
if (session.mojoCloseJournal
|
|
1706
|
+
&& session.mojoCloseJournal.phase === 'preparing'
|
|
1707
|
+
&& session.mojoCloseJournal.recovery === 'retryable'
|
|
1708
|
+
&& session.mojoCloseJournal.admission === 'restorable') {
|
|
1709
|
+
// P1-2: a prepare that FAILED CLEANLY — nothing irreversible happened, the
|
|
1710
|
+
// worker restored write admission, and the verdict was durably recorded as
|
|
1711
|
+
// retryable/restorable. Downgrading this to `uncertain` made the persisted
|
|
1712
|
+
// `retryable` dead-code and the user-facing "retryable" promise a lie: the
|
|
1713
|
+
// row was quarantined unregistered and every later /close refused. Keep
|
|
1714
|
+
// the journal exactly as persisted and register the row normally — writes
|
|
1715
|
+
// were already legal (admission restorable), and an explicit /close can
|
|
1716
|
+
// re-run the cancel (beginMojoCloseJournal accepts the fresh requestId).
|
|
1717
|
+
logger.info(`[${session.sessionId.substring(0, 8)}] restoring row with retryable Mojo close `
|
|
1718
|
+
+ `journal (${session.mojoCloseJournal.requestId}); close may be retried`);
|
|
1719
|
+
// fall through to normal registration below
|
|
1720
|
+
}
|
|
1721
|
+
else if (session.mojoCloseJournal) {
|
|
1722
|
+
// A crash while the worker cancel was in flight cannot be classified as
|
|
1723
|
+
// cancelled or safely resumable without a real remote status oracle. Turn
|
|
1724
|
+
// the durable intent into an explicit uncertainty fence and reserve the
|
|
1725
|
+
// routing anchor; never auto-cancel or launch a replacement generation.
|
|
1726
|
+
// The fence is not a dead end: an explicit /close DRAINS it — the row
|
|
1727
|
+
// closes with its lineage parked as a residual for manual cleanup (see
|
|
1728
|
+
// prepareMojoExplicitClose).
|
|
1729
|
+
session.mojoCloseJournal = {
|
|
1730
|
+
phase: 'uncertain',
|
|
1731
|
+
requestId: session.mojoCloseJournal.requestId,
|
|
1732
|
+
...(session.mojoCloseJournal.taskId
|
|
1733
|
+
? { taskId: session.mojoCloseJournal.taskId }
|
|
1734
|
+
: {}),
|
|
1735
|
+
// State the verdict rather than leaving a reader to infer it from the
|
|
1736
|
+
// phase, and rebuild the row from scratch so a stale commit-only marker
|
|
1737
|
+
// cannot survive as false proof of an irreversible teardown.
|
|
1738
|
+
recovery: 'uncertain',
|
|
1739
|
+
admission: 'fenced',
|
|
1740
|
+
updatedAt: new Date().toISOString(),
|
|
1741
|
+
};
|
|
1742
|
+
quarantineUnregisteredRestoreSession(session, 'mojo_close_reconciliation_required');
|
|
1743
|
+
continue;
|
|
1744
|
+
}
|
|
1517
1745
|
// Restored sessions persisted before the scope field was added default to
|
|
1518
1746
|
// 'thread' — that matches the legacy thread-only behaviour.
|
|
1519
1747
|
const scope = session.scope === 'chat' ? 'chat' : 'thread';
|
|
@@ -1586,6 +1814,7 @@ export async function restoreActiveSessions(activeSessions, quarantinedSessionId
|
|
|
1586
1814
|
adoptedFrom: adopted,
|
|
1587
1815
|
streamCardId: session.streamCardId,
|
|
1588
1816
|
streamCardNonce: session.streamCardNonce,
|
|
1817
|
+
streamCardReplyTargetKey: session.streamCardReplyTargetKey,
|
|
1589
1818
|
displayMode: session.displayMode === 'screenshot' || session.displayMode === 'hidden'
|
|
1590
1819
|
? session.displayMode
|
|
1591
1820
|
: (session.streamExpanded ? 'screenshot' : 'hidden'),
|
|
@@ -1782,6 +2011,7 @@ export async function restoreActiveSessions(activeSessions, quarantinedSessionId
|
|
|
1782
2011
|
// letting the next update create a new card.
|
|
1783
2012
|
streamCardId: session.streamCardId,
|
|
1784
2013
|
streamCardNonce: session.streamCardNonce,
|
|
2014
|
+
streamCardReplyTargetKey: session.streamCardReplyTargetKey,
|
|
1785
2015
|
displayMode: session.displayMode ?? (session.streamExpanded ? 'screenshot' : 'hidden'),
|
|
1786
2016
|
currentImageKey: session.currentImageKey,
|
|
1787
2017
|
currentTurnTitle: session.currentTurnTitle,
|
|
@@ -1843,9 +2073,19 @@ export async function restoreActiveSessions(activeSessions, quarantinedSessionId
|
|
|
1843
2073
|
try {
|
|
1844
2074
|
const mismatchClose = await closeActiveSessionIfCliMismatch(ds);
|
|
1845
2075
|
if (mismatchClose !== 'not_mismatched') {
|
|
2076
|
+
// Both failure kinds must quarantine, and neither can rely on the catch
|
|
2077
|
+
// below: a REFUSED close (remote cancellation unproven) is a returned
|
|
2078
|
+
// {ok:false}, not an exception. Without this the row stays active on disk
|
|
2079
|
+
// while never being registered — the exact "active on disk, invisible at
|
|
2080
|
+
// runtime" owner quarantineUnregisteredRestoreSession exists to prevent,
|
|
2081
|
+
// after which a later inbound on the same anchor mints a second session
|
|
2082
|
+
// while the old remote one is still running.
|
|
1846
2083
|
if (mismatchClose === 'teardown_failed') {
|
|
1847
2084
|
quarantineUnregisteredRestoreSession(session, 'cli_mismatch_teardown_unverified');
|
|
1848
2085
|
}
|
|
2086
|
+
else if (mismatchClose === 'close_failed') {
|
|
2087
|
+
quarantineUnregisteredRestoreSession(session, 'cli_mismatch_close_failed');
|
|
2088
|
+
}
|
|
1849
2089
|
continue;
|
|
1850
2090
|
}
|
|
1851
2091
|
}
|
|
@@ -1966,6 +2206,13 @@ export async function restoreActiveSessions(activeSessions, quarantinedSessionId
|
|
|
1966
2206
|
continue;
|
|
1967
2207
|
}
|
|
1968
2208
|
}
|
|
2209
|
+
// Re-arm persisted semantic-recovery timers only after the whole restore
|
|
2210
|
+
// pass has registered collision winners. A zero-delay overdue backoff must
|
|
2211
|
+
// not wake while a later row is still competing for the same route.
|
|
2212
|
+
for (const ds of restoredByThisInvocation) {
|
|
2213
|
+
if (stillOwnsRestoreRegistration(ds))
|
|
2214
|
+
ensureOrdinaryTurnRecoveryAttached(ds);
|
|
2215
|
+
}
|
|
1969
2216
|
// Persistent backends: auto-fork workers for sessions whose backing session
|
|
1970
2217
|
// survived daemon restart. Probe + zombie-close runs synchronously here; the
|
|
1971
2218
|
// actual re-fork is deferred into `toReattach` and staggered below so a box
|
|
@@ -2384,6 +2631,12 @@ export async function resumeSession(sessionId, activeSessions) {
|
|
|
2384
2631
|
if (!reactivated.ok)
|
|
2385
2632
|
return reactivated;
|
|
2386
2633
|
session = reactivated.session;
|
|
2634
|
+
// Same reason as in restoreActiveSessions: freeze the mojo control plane BEFORE
|
|
2635
|
+
// this row is registered, so it can never be woken or cancelled while still
|
|
2636
|
+
// resolving against live bot config. This is the second path that re-registers
|
|
2637
|
+
// a legacy row, and startup migration does not cover it (the row may have been
|
|
2638
|
+
// closed then, or created after boot).
|
|
2639
|
+
freezeMojoIdentityForSession(session, larkAppId);
|
|
2387
2640
|
const now = Date.now();
|
|
2388
2641
|
const ds = {
|
|
2389
2642
|
session,
|
|
@@ -2402,6 +2655,7 @@ export async function resumeSession(sessionId, activeSessions) {
|
|
|
2402
2655
|
ownerOpenId: session.ownerOpenId,
|
|
2403
2656
|
streamCardId: session.streamCardId,
|
|
2404
2657
|
streamCardNonce: session.streamCardNonce,
|
|
2658
|
+
streamCardReplyTargetKey: session.streamCardReplyTargetKey,
|
|
2405
2659
|
displayMode: session.displayMode ?? (session.streamExpanded ? 'screenshot' : 'hidden'),
|
|
2406
2660
|
currentImageKey: session.currentImageKey,
|
|
2407
2661
|
currentTurnTitle: session.currentTurnTitle,
|