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
package/dist/codex-app-runner.js
CHANGED
|
@@ -5,12 +5,45 @@ import { createConnection } from 'node:net';
|
|
|
5
5
|
import { buildCodexAppTurnStartParams, isCleanInputCapabilityError, isCodexAppTurnInput, parseCodexVersion, supportsClientUserMessageId, } from './adapters/cli/codex-app-turn.js';
|
|
6
6
|
import { RunnerControlWriter } from './adapters/cli/runner-control-channel.js';
|
|
7
7
|
import { CODEX_APP_CONTROL_BOOTSTRAP_ENV, CODEX_APP_CONTROL_FINAL_CHUNK_BYTES, CODEX_APP_CONTROL_FINAL_MAX_BYTES, CodexAppControlEndpointTracker, CodexAppControlLineDecoder, CodexAppControlRunnerHandshake, armCodexAppControlHandshakeTimeout, armCodexAppControlStartupTimeout, consumeCodexAppControlBootstrap, encodeCodexAppControlAuth, encodeCodexAppSignedControlMarker, parseCodexAppControlWireRecord, takeCodexAppControlLocatorEndpoint, } from './utils/codex-app-control.js';
|
|
8
|
+
import { CODEX_APP_NO_PROGRESS_TIMEOUT_MS } from './utils/codex-app-turn-liveness.js';
|
|
8
9
|
import { TurnTokenUsageAccumulator, parseTokenUsagePair, } from './services/codex-app-token-usage.js';
|
|
9
10
|
const output = new RunnerControlWriter();
|
|
10
11
|
const DEFAULT_REQUEST_TIMEOUT_MS = 30_000;
|
|
11
12
|
const RECONCILIATION_TIMEOUT_MS = 5_000;
|
|
12
13
|
const RECONCILIATION_PAGE_LIMIT = 3;
|
|
13
14
|
const RECONCILIATION_PAGE_SIZE = 50;
|
|
15
|
+
/** Delay between bounded-history re-scans while a keep-pending reconcile waits
|
|
16
|
+
* for the accepted native turn's own completion. The regular notification
|
|
17
|
+
* handler settles the turn the moment its real completion arrives, so this only
|
|
18
|
+
* paces the fallback scan (a thin completion whose full record is history-only). */
|
|
19
|
+
const RECONCILIATION_KEEP_PENDING_RETRY_MS = 200;
|
|
20
|
+
/** Fail-closed window for a keep-pending reconcile's re-scan loop, structurally
|
|
21
|
+
* aligned with the worker's Codex App no-progress liveness window by reusing
|
|
22
|
+
* its constant: the loop must never fail-closed while the watchdog still
|
|
23
|
+
* considers the turn alive. The deadline is RESET on every forward-progress
|
|
24
|
+
* notification for the accepted turn (see handleNotification), so a legitimate
|
|
25
|
+
* long tool/model turn that keeps emitting activity is not killed by a stale
|
|
26
|
+
* fixed ceiling. The accepted native turn's own lifecycle normally bounds the
|
|
27
|
+
* wait (its completion settles the turn through the regular notification
|
|
28
|
+
* handler); this window is the fail-closed safety net for a turn that goes
|
|
29
|
+
* silent — without it the loop would poll thread/turns/list (~5Hz) forever.
|
|
30
|
+
* The no-progress watchdog only projects a stalled UI state and never cancels
|
|
31
|
+
* the runner, so it is NOT a safety net for this loop. */
|
|
32
|
+
const RECONCILIATION_KEEP_PENDING_TIMEOUT_MS = CODEX_APP_NO_PROGRESS_TIMEOUT_MS;
|
|
33
|
+
/** Test-only shrink for the keep-pending ceiling (same convention as the
|
|
34
|
+
* startup timeout override); production always uses the constant above. */
|
|
35
|
+
function keepPendingTimeoutMs() {
|
|
36
|
+
if (process.env.NODE_ENV === 'test') {
|
|
37
|
+
const override = Number(process.env.BOTMUX_TEST_CODEX_APP_KEEP_PENDING_TIMEOUT_MS);
|
|
38
|
+
if (Number.isFinite(override) && override > 0)
|
|
39
|
+
return override;
|
|
40
|
+
}
|
|
41
|
+
return RECONCILIATION_KEEP_PENDING_TIMEOUT_MS;
|
|
42
|
+
}
|
|
43
|
+
/** Consecutive app-server lifecycle notifications may arrive in separate stdout
|
|
44
|
+
* reads. Briefly debounce an idle edge so turn/completed followed immediately
|
|
45
|
+
* by an autonomous turn/started never exposes a false ready boundary. */
|
|
46
|
+
const RUNNER_IDLE_SETTLE_MS = 20;
|
|
14
47
|
class AppServerRpcError extends Error {
|
|
15
48
|
method;
|
|
16
49
|
code;
|
|
@@ -426,7 +459,7 @@ function connectControlSocket() {
|
|
|
426
459
|
// not a ready boundary. Re-authentication can publish the live state
|
|
427
460
|
// only after initialization has completed.
|
|
428
461
|
if (controlAcceptanceCount > 1 && runnerReady)
|
|
429
|
-
|
|
462
|
+
settleRunnerState();
|
|
430
463
|
flushControlQueue();
|
|
431
464
|
}
|
|
432
465
|
else if (action.type === 'ack' && controlAccepted) {
|
|
@@ -555,6 +588,7 @@ let cleanInputUnsupported = false;
|
|
|
555
588
|
let codexVersionChecked = false;
|
|
556
589
|
let codexVersion;
|
|
557
590
|
let cleanVersionWarningShown = false;
|
|
591
|
+
let runnerIdleSettleTimer;
|
|
558
592
|
/** Per-turn token accumulators keyed by codex native turn id. Fed by
|
|
559
593
|
* thread/tokenUsage/updated notifications; drained (and deleted) when the
|
|
560
594
|
* matching turn's final marker is emitted. Bounded by turn lifetime — a turn
|
|
@@ -594,6 +628,36 @@ function emitRunnerState(busy = processing || queue.length > 0 || nativeActiveTu
|
|
|
594
628
|
...(busy && !tracksTurn ? { tracksTurn: false } : {}),
|
|
595
629
|
});
|
|
596
630
|
}
|
|
631
|
+
function cancelRunnerIdleSettle() {
|
|
632
|
+
if (!runnerIdleSettleTimer)
|
|
633
|
+
return;
|
|
634
|
+
clearTimeout(runnerIdleSettleTimer);
|
|
635
|
+
runnerIdleSettleTimer = undefined;
|
|
636
|
+
}
|
|
637
|
+
/** Publish native-busy immediately, but debounce idle across adjacent app-server
|
|
638
|
+
* lifecycle records. The timer re-reads live state, so queued input or a newly
|
|
639
|
+
* started native turn cannot be overwritten by a stale busy:false callback. */
|
|
640
|
+
function settleRunnerState() {
|
|
641
|
+
if (generationFenced)
|
|
642
|
+
return;
|
|
643
|
+
if (nativeActiveTurnId !== undefined) {
|
|
644
|
+
cancelRunnerIdleSettle();
|
|
645
|
+
emitRunnerState(true, activeTurn !== null);
|
|
646
|
+
return;
|
|
647
|
+
}
|
|
648
|
+
if (runnerIdleSettleTimer)
|
|
649
|
+
return;
|
|
650
|
+
runnerIdleSettleTimer = setTimeout(() => {
|
|
651
|
+
runnerIdleSettleTimer = undefined;
|
|
652
|
+
if (generationFenced)
|
|
653
|
+
return;
|
|
654
|
+
const busy = processing || queue.length > 0 || nativeActiveTurnId !== undefined;
|
|
655
|
+
emitRunnerState(busy, activeTurn !== null);
|
|
656
|
+
if (!busy)
|
|
657
|
+
prompt();
|
|
658
|
+
}, RUNNER_IDLE_SETTLE_MS);
|
|
659
|
+
runnerIdleSettleTimer.unref?.();
|
|
660
|
+
}
|
|
597
661
|
function detectedCodexVersion() {
|
|
598
662
|
if (codexVersionChecked)
|
|
599
663
|
return codexVersion;
|
|
@@ -760,7 +824,7 @@ function reportIdentityConflict(turn, observedNativeTurnId, reason = 'no exact c
|
|
|
760
824
|
emitTurnActivity(turn, 'completed', true);
|
|
761
825
|
turn.resolveDone();
|
|
762
826
|
}
|
|
763
|
-
async function reconcileCompletedTurn(turn, observedNativeTurnId) {
|
|
827
|
+
async function reconcileCompletedTurn(turn, observedNativeTurnId, options = {}) {
|
|
764
828
|
if (turn.reconciliation || turn.completed)
|
|
765
829
|
return turn.reconciliation;
|
|
766
830
|
const clientUserMessageId = turn.clientUserMessageId;
|
|
@@ -769,43 +833,112 @@ async function reconcileCompletedTurn(turn, observedNativeTurnId) {
|
|
|
769
833
|
return;
|
|
770
834
|
}
|
|
771
835
|
const epoch = turn.epoch;
|
|
772
|
-
const
|
|
836
|
+
const sleep = (ms) => new Promise(resolvePromise => setTimeout(resolvePromise, ms));
|
|
837
|
+
// keepPendingWhileActive: wall-clock ceiling for the re-scan loop below.
|
|
838
|
+
// Stored on the turn (not a closure local) so handleNotification can RESET
|
|
839
|
+
// it on every forward-progress notification — a fixed deadline would kill a
|
|
840
|
+
// legitimate long-running turn before the 90s liveness window fires.
|
|
841
|
+
//
|
|
842
|
+
// Gate arming on a bound native id. The progress-reset guard in
|
|
843
|
+
// handleNotification is `notificationTurnId !== turn.nativeTurnId` — when
|
|
844
|
+
// nativeTurnId is unset (a protocol-anomaly start response that returned no
|
|
845
|
+
// id and had no prior exact turn/started proof) that guard falls fully open,
|
|
846
|
+
// so ANY foreign/autonomous turn's progress would keep resetting this
|
|
847
|
+
// deadline while `acceptedTurnWentTerminal` can never fire (it needs the id).
|
|
848
|
+
// The loop would then never terminate. Without a native id we cannot track
|
|
849
|
+
// this turn's own liveness at all, so fail closed immediately (leave the
|
|
850
|
+
// deadline unset → the `?? 0` check below trips on the first scan) rather
|
|
851
|
+
// than hang on unrelated activity.
|
|
852
|
+
if (options.keepPendingWhileActive && turn.nativeTurnId) {
|
|
853
|
+
turn.keepPendingDeadlineAtMs = Date.now() + keepPendingTimeoutMs();
|
|
854
|
+
}
|
|
855
|
+
let conflictReason = 'bounded history lookup found no match';
|
|
773
856
|
turn.reconciliation = (async () => {
|
|
774
|
-
|
|
775
|
-
|
|
776
|
-
|
|
777
|
-
const
|
|
778
|
-
|
|
779
|
-
|
|
780
|
-
|
|
781
|
-
|
|
782
|
-
|
|
783
|
-
|
|
784
|
-
|
|
785
|
-
|
|
786
|
-
|
|
787
|
-
|
|
788
|
-
if (
|
|
789
|
-
|
|
790
|
-
const
|
|
791
|
-
|
|
792
|
-
|
|
793
|
-
|
|
794
|
-
|
|
795
|
-
|
|
857
|
+
for (;;) {
|
|
858
|
+
// Each scan gets a fresh RPC budget.
|
|
859
|
+
const scanDeadlineAtMs = Date.now() + RECONCILIATION_TIMEOUT_MS;
|
|
860
|
+
const matches = [];
|
|
861
|
+
// Whether THIS turn's own native turn has a terminal record in the
|
|
862
|
+
// scanned history. The GLOBAL nativeActiveTurnId slot flipping to a
|
|
863
|
+
// different id is NOT proof this turn terminated — an autonomous Goal
|
|
864
|
+
// turn/started (or a late edge from another turn) flips it while the
|
|
865
|
+
// accepted turn is still running. Only the accepted turn's own terminal
|
|
866
|
+
// record is, so it is tracked per scan instead of comparing global slots.
|
|
867
|
+
let acceptedTurnWentTerminal = false;
|
|
868
|
+
let cursor;
|
|
869
|
+
for (let page = 0; page < RECONCILIATION_PAGE_LIMIT; page++) {
|
|
870
|
+
const remaining = scanDeadlineAtMs - Date.now();
|
|
871
|
+
if (remaining <= 0)
|
|
872
|
+
break;
|
|
873
|
+
const result = await client.request('thread/turns/list', {
|
|
874
|
+
threadId,
|
|
875
|
+
...(cursor ? { cursor } : {}),
|
|
876
|
+
limit: RECONCILIATION_PAGE_SIZE,
|
|
877
|
+
sortDirection: 'desc',
|
|
878
|
+
itemsView: 'full',
|
|
879
|
+
}, { timeoutMs: remaining });
|
|
880
|
+
for (const candidate of Array.isArray(result?.data) ? result.data : []) {
|
|
881
|
+
if (!isTerminalNativeTurn(candidate))
|
|
882
|
+
continue;
|
|
883
|
+
if (turn.nativeTurnId && candidate?.id === turn.nativeTurnId) {
|
|
884
|
+
acceptedTurnWentTerminal = true;
|
|
885
|
+
}
|
|
886
|
+
const indexes = exactClientItemIndexes(candidate, clientUserMessageId);
|
|
887
|
+
if (indexes.length === 1)
|
|
888
|
+
matches.push({ turn: candidate, itemIndex: indexes[0] });
|
|
889
|
+
else if (indexes.length > 1) {
|
|
890
|
+
reportIdentityConflict(turn, observedNativeTurnId, 'client id appears more than once in one turn');
|
|
891
|
+
return;
|
|
892
|
+
}
|
|
796
893
|
}
|
|
894
|
+
cursor = typeof result?.nextCursor === 'string' ? result.nextCursor : null;
|
|
895
|
+
if (!cursor)
|
|
896
|
+
break;
|
|
797
897
|
}
|
|
798
|
-
|
|
799
|
-
|
|
898
|
+
if (activeTurn !== turn || turn.epoch !== epoch || turn.completed)
|
|
899
|
+
return;
|
|
900
|
+
if (matches.length === 1) {
|
|
901
|
+
completeActiveTurnFromNative(turn, matches[0].turn, matches[0].itemIndex);
|
|
902
|
+
return;
|
|
903
|
+
}
|
|
904
|
+
if (matches.length > 1) {
|
|
905
|
+
reportIdentityConflict(turn, observedNativeTurnId, 'bounded history lookup found multiple matches');
|
|
906
|
+
return;
|
|
907
|
+
}
|
|
908
|
+
// No terminal turn with an exact client-id match in bounded history.
|
|
909
|
+
//
|
|
910
|
+
// A single foreign-id completion buffered before the start/steer response
|
|
911
|
+
// is not causal proof that the ACCEPTED turn terminated: it can be a late
|
|
912
|
+
// arrival from a previous / autonomous turn while the accepted turn is
|
|
913
|
+
// still running, whose terminal record cannot be in history yet. Failing
|
|
914
|
+
// closed immediately would kill the running turn and discard its real
|
|
915
|
+
// completion when it arrives moments later.
|
|
916
|
+
//
|
|
917
|
+
// keepPendingWhileActive: keep the turn pending and re-scan while the
|
|
918
|
+
// accepted native turn has NOT itself gone terminal in history. The
|
|
919
|
+
// turn's own completion settles it through the regular notification
|
|
920
|
+
// handler (tripping the turn.completed guard above); a thin completion
|
|
921
|
+
// whose full record exists only in history is picked up by a re-scan.
|
|
922
|
+
// Fail closed only when (a) the accepted turn's OWN terminal record is
|
|
923
|
+
// in history with still no exact match — a genuine identity conflict,
|
|
924
|
+
// distinct from another turn merely starting — or (b) the wall-clock
|
|
925
|
+
// ceiling is reached (the turn never completes), so the loop cannot
|
|
926
|
+
// poll thread/turns/list forever.
|
|
927
|
+
if (!options.keepPendingWhileActive)
|
|
800
928
|
break;
|
|
929
|
+
if (acceptedTurnWentTerminal) {
|
|
930
|
+
conflictReason = 'accepted native turn terminated without an exact client id match';
|
|
931
|
+
break;
|
|
932
|
+
}
|
|
933
|
+
if (Date.now() >= (turn.keepPendingDeadlineAtMs ?? 0)) {
|
|
934
|
+
conflictReason = 'bounded history lookup found no match within the keep-pending deadline';
|
|
935
|
+
break;
|
|
936
|
+
}
|
|
937
|
+
await sleep(RECONCILIATION_KEEP_PENDING_RETRY_MS);
|
|
938
|
+
if (activeTurn !== turn || turn.epoch !== epoch || turn.completed)
|
|
939
|
+
return;
|
|
801
940
|
}
|
|
802
|
-
|
|
803
|
-
return;
|
|
804
|
-
if (matches.length === 1) {
|
|
805
|
-
completeActiveTurnFromNative(turn, matches[0].turn, matches[0].itemIndex);
|
|
806
|
-
return;
|
|
807
|
-
}
|
|
808
|
-
reportIdentityConflict(turn, observedNativeTurnId, matches.length === 0 ? 'bounded history lookup found no match' : 'bounded history lookup found multiple matches');
|
|
941
|
+
reportIdentityConflict(turn, observedNativeTurnId, conflictReason);
|
|
809
942
|
})().catch(err => {
|
|
810
943
|
if (activeTurn === turn && !turn.completed) {
|
|
811
944
|
reportIdentityConflict(turn, observedNativeTurnId, `bounded history lookup failed: ${asError(err).message}`);
|
|
@@ -896,8 +1029,10 @@ function handleNotification(msg, replayedAfterResponse = false) {
|
|
|
896
1029
|
// A Goal continuation is native work, not a Botmux turn. Keep the worker
|
|
897
1030
|
// busy while explicitly advertising that the initialized runner can accept
|
|
898
1031
|
// a Lark follow-up through turn/steer.
|
|
899
|
-
if (runnerReady)
|
|
1032
|
+
if (runnerReady) {
|
|
1033
|
+
cancelRunnerIdleSettle();
|
|
900
1034
|
emitRunnerState(true, false);
|
|
1035
|
+
}
|
|
901
1036
|
return;
|
|
902
1037
|
}
|
|
903
1038
|
if (msg.method === 'turn/completed') {
|
|
@@ -912,7 +1047,7 @@ function handleNotification(msg, replayedAfterResponse = false) {
|
|
|
912
1047
|
// now cleared (line above) so re-kick the drain to start it as its own
|
|
913
1048
|
// turn — otherwise it would sleep forever. drainQueue no-ops when idle.
|
|
914
1049
|
if (runnerReady)
|
|
915
|
-
|
|
1050
|
+
settleRunnerState();
|
|
916
1051
|
if (queue.length > 0 && nativeActiveTurnId === undefined)
|
|
917
1052
|
void drainQueue();
|
|
918
1053
|
return;
|
|
@@ -925,13 +1060,23 @@ function handleNotification(msg, replayedAfterResponse = false) {
|
|
|
925
1060
|
if (inGroupMode(turn)) {
|
|
926
1061
|
turn.completionSeen = true;
|
|
927
1062
|
turn.steeringClosed = true;
|
|
1063
|
+
// Preserve every completion across an outstanding RPC response. Prefer a
|
|
1064
|
+
// canonical candidate if several terminal notifications cross the same
|
|
1065
|
+
// barrier; a later foreign completion must not overwrite proven content.
|
|
1066
|
+
const bufferedId = typeof turn.terminalCompletion?.id === 'string'
|
|
1067
|
+
? turn.terminalCompletion.id
|
|
1068
|
+
: undefined;
|
|
1069
|
+
if (!turn.terminalCompletion
|
|
1070
|
+
|| completedId === turn.canonicalNativeTurnId
|
|
1071
|
+
|| bufferedId !== turn.canonicalNativeTurnId) {
|
|
1072
|
+
turn.terminalCompletion = nativeTurn;
|
|
1073
|
+
}
|
|
928
1074
|
// A steer RPC racing this completion, or a still-pending root start
|
|
929
1075
|
// response, is a barrier: buffer and let that continuation settle the group
|
|
930
1076
|
// once it appends its member / binds canonical. (canonical-only barrier.)
|
|
931
1077
|
const isCanonical = turn.canonicalNativeTurnId !== undefined
|
|
932
1078
|
&& completedId === turn.canonicalNativeTurnId;
|
|
933
1079
|
if (isCanonical) {
|
|
934
|
-
turn.terminalCompletion = nativeTurn;
|
|
935
1080
|
if (turn.steerInFlight || turn.startResponsePending) {
|
|
936
1081
|
emitLifecycle({ kind: 'completion_race', appTurnId: completedId, category: 'steer_in_flight' });
|
|
937
1082
|
return;
|
|
@@ -1046,6 +1191,12 @@ function handleNotification(msg, replayedAfterResponse = false) {
|
|
|
1046
1191
|
// Every notification for the active app-server turn is evidence of forward
|
|
1047
1192
|
// progress, including reasoning/status events that do not render text.
|
|
1048
1193
|
emitTurnActivity(turn, 'progress');
|
|
1194
|
+
// Reset the keep-pending reconcile ceiling on progress: a turn that is still
|
|
1195
|
+
// emitting activity must not be killed by a stale fixed deadline while the
|
|
1196
|
+
// 90s liveness window is being refreshed by the same progress markers.
|
|
1197
|
+
if (turn.keepPendingDeadlineAtMs !== undefined) {
|
|
1198
|
+
turn.keepPendingDeadlineAtMs = Date.now() + keepPendingTimeoutMs();
|
|
1199
|
+
}
|
|
1049
1200
|
if (msg.method === 'item/started') {
|
|
1050
1201
|
const item = params.item;
|
|
1051
1202
|
if (item?.type === 'commandExecution') {
|
|
@@ -1434,6 +1585,30 @@ async function reconcileSteeredGroupFromHistory(turn, observedNativeTurnId) {
|
|
|
1434
1585
|
});
|
|
1435
1586
|
await turn.reconciliation;
|
|
1436
1587
|
}
|
|
1588
|
+
/** Resume group settlement after an outstanding start/steer RPC has cleared.
|
|
1589
|
+
* app-server responses and notifications can share one stdout read, so the
|
|
1590
|
+
* notification handler may run before the awaiting RPC continuation. Preserve
|
|
1591
|
+
* both canonical and non-canonical completions across that boundary. */
|
|
1592
|
+
function resumeBufferedGroupCompletion(turn) {
|
|
1593
|
+
if (activeTurn !== turn
|
|
1594
|
+
|| turn.completed
|
|
1595
|
+
|| !inGroupMode(turn)
|
|
1596
|
+
|| !turn.completionSeen
|
|
1597
|
+
|| !turn.terminalCompletion
|
|
1598
|
+
|| turn.steerInFlight
|
|
1599
|
+
|| turn.startResponsePending)
|
|
1600
|
+
return false;
|
|
1601
|
+
const completedId = typeof turn.terminalCompletion.id === 'string'
|
|
1602
|
+
? turn.terminalCompletion.id
|
|
1603
|
+
: undefined;
|
|
1604
|
+
if (completedId !== undefined && completedId === turn.canonicalNativeTurnId) {
|
|
1605
|
+
settleSteeredCompletion(turn, turn.terminalCompletion);
|
|
1606
|
+
}
|
|
1607
|
+
else {
|
|
1608
|
+
void reconcileSteeredGroupFromHistory(turn, completedId);
|
|
1609
|
+
}
|
|
1610
|
+
return true;
|
|
1611
|
+
}
|
|
1437
1612
|
/**
|
|
1438
1613
|
* Opportunistically admit the queue head as a pre-final `turn/steer` into the
|
|
1439
1614
|
* active steerable group (Blocking 1). Kicked from enqueueLine, from runTurn
|
|
@@ -1505,8 +1680,25 @@ async function tryAdmitSteer() {
|
|
|
1505
1680
|
// once this native turn completes the head starts its own turn.
|
|
1506
1681
|
turn.steeringClosed = true;
|
|
1507
1682
|
emitLifecycle({ kind: 'steer_rejected_fallback', appTurnId: expectedTurnId, category: 'definite_rejection' });
|
|
1508
|
-
|
|
1509
|
-
|
|
1683
|
+
// A completion buffered while this steer was in flight must settle now.
|
|
1684
|
+
// terminalCompletion may be non-canonical (PR broadened it), so route by
|
|
1685
|
+
// identity exactly like resumeBufferedGroupCompletion — but WITHOUT its
|
|
1686
|
+
// inGroupMode guard: this rejected steer never appended, so accepted.length
|
|
1687
|
+
// is still 1 and inGroupMode is false here. Blindly calling
|
|
1688
|
+
// settleSteeredCompletion would trust a foreign turn's items (wrong
|
|
1689
|
+
// attribution); the helper would instead no-op and strand the completion
|
|
1690
|
+
// (hang). Canonical → settle directly; non-canonical → bounded reconcile.
|
|
1691
|
+
if (turn.completionSeen && turn.terminalCompletion) {
|
|
1692
|
+
const bufferedId = typeof turn.terminalCompletion.id === 'string'
|
|
1693
|
+
? turn.terminalCompletion.id
|
|
1694
|
+
: undefined;
|
|
1695
|
+
if (bufferedId !== undefined && bufferedId === turn.canonicalNativeTurnId) {
|
|
1696
|
+
settleSteeredCompletion(turn, turn.terminalCompletion);
|
|
1697
|
+
}
|
|
1698
|
+
else {
|
|
1699
|
+
void reconcileSteeredGroupFromHistory(turn, bufferedId);
|
|
1700
|
+
}
|
|
1701
|
+
}
|
|
1510
1702
|
return;
|
|
1511
1703
|
}
|
|
1512
1704
|
// Unknown outcome (transport/timeout/generic rpc/protocol): fence — never
|
|
@@ -1555,10 +1747,8 @@ async function tryAdmitSteer() {
|
|
|
1555
1747
|
});
|
|
1556
1748
|
// A completion may have arrived while this steer was in flight (barrier): settle
|
|
1557
1749
|
// now that the group is final. Otherwise chain the next queued follow-up.
|
|
1558
|
-
if (turn
|
|
1559
|
-
settleSteeredCompletion(turn, turn.terminalCompletion);
|
|
1750
|
+
if (resumeBufferedGroupCompletion(turn))
|
|
1560
1751
|
return;
|
|
1561
|
-
}
|
|
1562
1752
|
void tryAdmitSteer();
|
|
1563
1753
|
}
|
|
1564
1754
|
/**
|
|
@@ -1833,9 +2023,12 @@ async function runTurn(message) {
|
|
|
1833
2023
|
// R4-B2 defense-in-depth: the buffered terminal's id MUST equal the proven
|
|
1834
2024
|
// canonical id before we settle from it — a first-proof-wins violation upstream
|
|
1835
2025
|
// would otherwise let terminal A's content ship under a different native id.
|
|
2026
|
+
// A MISSING id must NOT settle directly: it routes through bounded-history
|
|
2027
|
+
// reconcile (the same rule resumeBufferedGroupCompletion applies), so a
|
|
2028
|
+
// malformed payload can never bypass attribution by omitting its id.
|
|
1836
2029
|
const bufferedTerminalMatchesCanonical = turn.terminalCompletion !== undefined
|
|
1837
|
-
&&
|
|
1838
|
-
|
|
2030
|
+
&& typeof turn.terminalCompletion.id === 'string'
|
|
2031
|
+
&& turn.terminalCompletion.id === turn.canonicalNativeTurnId;
|
|
1839
2032
|
const settleBufferedCanonical = !turn.completed
|
|
1840
2033
|
&& turn.completionSeen
|
|
1841
2034
|
&& turn.terminalCompletion
|
|
@@ -1845,6 +2038,10 @@ async function runTurn(message) {
|
|
|
1845
2038
|
&& ((turn.accepted?.length ?? 0) > 1
|
|
1846
2039
|
|| turn.identityProof === 'exact_started'
|
|
1847
2040
|
|| turn.identityProof === 'exact_completed');
|
|
2041
|
+
// A group may have received a non-canonical completion in the same stdout
|
|
2042
|
+
// read as its start/steer response. With both RPC barriers clear, reconcile
|
|
2043
|
+
// it before the single-root compatibility path below.
|
|
2044
|
+
resumeBufferedGroupCompletion(turn);
|
|
1848
2045
|
if (settleBufferedCanonical) {
|
|
1849
2046
|
settleSteeredCompletion(turn, turn.terminalCompletion);
|
|
1850
2047
|
}
|
|
@@ -1876,12 +2073,28 @@ async function runTurn(message) {
|
|
|
1876
2073
|
else if (turn.requestKind === 'start' && nativeMatches.length === 1) {
|
|
1877
2074
|
completeActiveTurnFromNative(turn, nativeMatches[0]);
|
|
1878
2075
|
}
|
|
2076
|
+
else if (pendingCompletions.length > 0) {
|
|
2077
|
+
// A mismatched completion can share one stdout read with turn/start's
|
|
2078
|
+
// response. It was buffered while requestAccepted was false; replay the
|
|
2079
|
+
// regular reconciliation path instead of silently dropping it.
|
|
2080
|
+
//
|
|
2081
|
+
// keepPendingWhileActive: this single foreign-id completion is not proof
|
|
2082
|
+
// the accepted turn terminated — it may be a late arrival from a previous
|
|
2083
|
+
// / autonomous turn while the accepted turn is still running (its terminal
|
|
2084
|
+
// record cannot be in history yet). Keep the turn pending until its own
|
|
2085
|
+
// completion settles it; fail closed only if the native turn is no longer
|
|
2086
|
+
// active with no exact match in bounded history.
|
|
2087
|
+
const observedId = pendingCompletions.slice().reverse().find((completion) => typeof completion?.id === 'string')?.id;
|
|
2088
|
+
void reconcileCompletedTurn(turn, observedId, { keepPendingWhileActive: true });
|
|
2089
|
+
}
|
|
1879
2090
|
}
|
|
1880
2091
|
// B4: only NOW, after buffered completions were replayed, admit a follow-up.
|
|
1881
2092
|
// A follow-up that arrived during the RPC (before canonical was proven) steers
|
|
1882
2093
|
// here; if the group already closed (completion-before-response), canSteer
|
|
1883
2094
|
// refuses and it stays serial. Never kick before the replay above.
|
|
1884
|
-
|
|
2095
|
+
// Reconciliation owns settlement once started. Do not admit a follow-up into
|
|
2096
|
+
// a turn whose non-canonical terminal identity is still being resolved.
|
|
2097
|
+
if (!turn.completed && !turn.reconciliation)
|
|
1885
2098
|
void tryAdmitSteer();
|
|
1886
2099
|
await turn.done;
|
|
1887
2100
|
// Expand the ordered accepted group into N signed finals (N===1 for every
|
|
@@ -1957,10 +2170,7 @@ async function drainQueue() {
|
|
|
1957
2170
|
&& nativeActiveTurnId !== undefined
|
|
1958
2171
|
&& queue[0].codexAppSteerable !== true;
|
|
1959
2172
|
if (queue.length === 0 || parkedBehindGoal) {
|
|
1960
|
-
|
|
1961
|
-
emitRunnerState(nativeBusy, !nativeBusy);
|
|
1962
|
-
if (!nativeBusy)
|
|
1963
|
-
prompt();
|
|
2173
|
+
settleRunnerState();
|
|
1964
2174
|
}
|
|
1965
2175
|
}
|
|
1966
2176
|
}
|
|
@@ -2069,6 +2279,7 @@ async function main() {
|
|
|
2069
2279
|
prompt();
|
|
2070
2280
|
}
|
|
2071
2281
|
process.on('SIGTERM', () => {
|
|
2282
|
+
cancelRunnerIdleSettle();
|
|
2072
2283
|
if (controlReconnectTimer)
|
|
2073
2284
|
clearTimeout(controlReconnectTimer);
|
|
2074
2285
|
controlSocket?.destroy();
|
|
@@ -2076,6 +2287,7 @@ process.on('SIGTERM', () => {
|
|
|
2076
2287
|
process.exit(0);
|
|
2077
2288
|
});
|
|
2078
2289
|
process.on('SIGINT', () => {
|
|
2290
|
+
cancelRunnerIdleSettle();
|
|
2079
2291
|
if (controlReconnectTimer)
|
|
2080
2292
|
clearTimeout(controlReconnectTimer);
|
|
2081
2293
|
controlSocket?.destroy();
|