visionclaw 0.1.218 → 0.1.219-dev.codex-issue-2805-worker-runtime.1
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/dist/agent/api-proxy.d.ts +0 -16
- package/dist/agent/api-proxy.d.ts.map +1 -1
- package/dist/agent/api-proxy.js +9 -8
- package/dist/agent/api-proxy.js.map +1 -1
- package/dist/agent/browser-launcher.d.ts +3 -0
- package/dist/agent/browser-launcher.d.ts.map +1 -1
- package/dist/agent/browser-launcher.js +101 -43
- package/dist/agent/browser-launcher.js.map +1 -1
- package/dist/agent/coding-conventions.d.ts +8 -0
- package/dist/agent/coding-conventions.d.ts.map +1 -0
- package/dist/agent/coding-conventions.js +19 -0
- package/dist/agent/coding-conventions.js.map +1 -0
- package/dist/agent/command-handlers.d.ts.map +1 -1
- package/dist/agent/command-handlers.js +4 -16
- package/dist/agent/command-handlers.js.map +1 -1
- package/dist/agent/context-action-restart-fallback.d.ts.map +1 -1
- package/dist/agent/context-action-restart-fallback.js +9 -3
- package/dist/agent/context-action-restart-fallback.js.map +1 -1
- package/dist/agent/context-refresh.d.ts.map +1 -1
- package/dist/agent/context-refresh.js +0 -7
- package/dist/agent/context-refresh.js.map +1 -1
- package/dist/agent/context.d.ts +2 -4
- package/dist/agent/context.d.ts.map +1 -1
- package/dist/agent/context.js +12 -21
- package/dist/agent/context.js.map +1 -1
- package/dist/agent/engine-fallback.d.ts +0 -35
- package/dist/agent/engine-fallback.d.ts.map +1 -1
- package/dist/agent/engine-fallback.js +4 -3
- package/dist/agent/engine-fallback.js.map +1 -1
- package/dist/agent/engine-switch.d.ts +19 -38
- package/dist/agent/engine-switch.d.ts.map +1 -1
- package/dist/agent/engine-switch.js +46 -111
- package/dist/agent/engine-switch.js.map +1 -1
- package/dist/agent/engines/browser-tool-policy.d.ts +12 -1
- package/dist/agent/engines/browser-tool-policy.d.ts.map +1 -1
- package/dist/agent/engines/browser-tool-policy.js +17 -2
- package/dist/agent/engines/browser-tool-policy.js.map +1 -1
- package/dist/agent/engines/claude/executor-shell-groups.d.ts +11 -0
- package/dist/agent/engines/claude/executor-shell-groups.d.ts.map +1 -0
- package/dist/agent/engines/claude/executor-shell-groups.js +22 -0
- package/dist/agent/engines/claude/executor-shell-groups.js.map +1 -0
- package/dist/agent/engines/claude/session.d.ts +13 -4
- package/dist/agent/engines/claude/session.d.ts.map +1 -1
- package/dist/agent/engines/claude/session.js +165 -84
- package/dist/agent/engines/claude/session.js.map +1 -1
- package/dist/agent/engines/pi/shared/usage.d.ts +5 -0
- package/dist/agent/engines/pi/shared/usage.d.ts.map +1 -1
- package/dist/agent/engines/pi/shared/usage.js +22 -3
- package/dist/agent/engines/pi/shared/usage.js.map +1 -1
- package/dist/agent/engines/pi/tools.d.ts +3 -10
- package/dist/agent/engines/pi/tools.d.ts.map +1 -1
- package/dist/agent/engines/pi/tools.js +6 -17
- package/dist/agent/engines/pi/tools.js.map +1 -1
- package/dist/agent/engines/pi-coding/executor-shell.d.ts +4 -0
- package/dist/agent/engines/pi-coding/executor-shell.d.ts.map +1 -0
- package/dist/agent/engines/pi-coding/executor-shell.js +175 -0
- package/dist/agent/engines/pi-coding/executor-shell.js.map +1 -0
- package/dist/agent/engines/pi-coding/session.d.ts +4 -4
- package/dist/agent/engines/pi-coding/session.d.ts.map +1 -1
- package/dist/agent/engines/pi-coding/session.js +118 -66
- package/dist/agent/engines/pi-coding/session.js.map +1 -1
- package/dist/agent/engines/pi-coding/tools.d.ts +2 -5
- package/dist/agent/engines/pi-coding/tools.d.ts.map +1 -1
- package/dist/agent/engines/pi-coding/tools.js +7 -5
- package/dist/agent/engines/pi-coding/tools.js.map +1 -1
- package/dist/agent/engines/session-types.d.ts +8 -8
- package/dist/agent/engines/session-types.d.ts.map +1 -1
- package/dist/agent/external-context/interrupt.d.ts +0 -2
- package/dist/agent/external-context/interrupt.d.ts.map +1 -1
- package/dist/agent/external-context/interrupt.js +0 -1
- package/dist/agent/external-context/interrupt.js.map +1 -1
- package/dist/agent/external-context/registry.d.ts +0 -2
- package/dist/agent/external-context/registry.d.ts.map +1 -1
- package/dist/agent/external-context/registry.js +2 -4
- package/dist/agent/external-context/registry.js.map +1 -1
- package/dist/agent/external-context/runtime.d.ts.map +1 -1
- package/dist/agent/external-context/runtime.js +15 -14
- package/dist/agent/external-context/runtime.js.map +1 -1
- package/dist/agent/external-context/types.d.ts +0 -2
- package/dist/agent/external-context/types.d.ts.map +1 -1
- package/dist/agent/fast-responder.d.ts +4 -20
- package/dist/agent/fast-responder.d.ts.map +1 -1
- package/dist/agent/fast-responder.js +28 -42
- package/dist/agent/fast-responder.js.map +1 -1
- package/dist/agent/interrupt-handler.d.ts +0 -6
- package/dist/agent/interrupt-handler.d.ts.map +1 -1
- package/dist/agent/interrupt-handler.js +5 -47
- package/dist/agent/interrupt-handler.js.map +1 -1
- package/dist/agent/lab-run-system-prompt.d.ts.map +1 -1
- package/dist/agent/lab-run-system-prompt.js +4 -1
- package/dist/agent/lab-run-system-prompt.js.map +1 -1
- package/dist/agent/lifecycle-trace.d.ts.map +1 -1
- package/dist/agent/lifecycle-trace.js +6 -5
- package/dist/agent/lifecycle-trace.js.map +1 -1
- package/dist/agent/loop.d.ts +8 -2
- package/dist/agent/loop.d.ts.map +1 -1
- package/dist/agent/loop.js +291 -156
- package/dist/agent/loop.js.map +1 -1
- package/dist/agent/memory-protocol.d.ts +2 -2
- package/dist/agent/memory-protocol.d.ts.map +1 -1
- package/dist/agent/memory-protocol.js +3 -15
- package/dist/agent/memory-protocol.js.map +1 -1
- package/dist/agent/memory-store.d.ts +58 -0
- package/dist/agent/memory-store.d.ts.map +1 -0
- package/dist/agent/memory-store.js +152 -0
- package/dist/agent/memory-store.js.map +1 -0
- package/dist/agent/model-provider.d.ts +18 -5
- package/dist/agent/model-provider.d.ts.map +1 -1
- package/dist/agent/model-provider.js +58 -18
- package/dist/agent/model-provider.js.map +1 -1
- package/dist/agent/nightly-maintenance/dreaming-batch.d.ts +184 -0
- package/dist/agent/nightly-maintenance/dreaming-batch.d.ts.map +1 -0
- package/dist/agent/nightly-maintenance/dreaming-batch.js +192 -0
- package/dist/agent/nightly-maintenance/dreaming-batch.js.map +1 -0
- package/dist/agent/nightly-maintenance/dreaming-files.d.ts +48 -0
- package/dist/agent/nightly-maintenance/dreaming-files.d.ts.map +1 -0
- package/dist/agent/nightly-maintenance/dreaming-files.js +109 -0
- package/dist/agent/nightly-maintenance/dreaming-files.js.map +1 -0
- package/dist/agent/nightly-maintenance/dreaming-ledger.d.ts +62 -0
- package/dist/agent/nightly-maintenance/dreaming-ledger.d.ts.map +1 -0
- package/dist/agent/nightly-maintenance/dreaming-ledger.js +146 -0
- package/dist/agent/nightly-maintenance/dreaming-ledger.js.map +1 -0
- package/dist/agent/nightly-maintenance/dreaming-planner.d.ts +86 -0
- package/dist/agent/nightly-maintenance/dreaming-planner.d.ts.map +1 -0
- package/dist/agent/nightly-maintenance/dreaming-planner.js +304 -0
- package/dist/agent/nightly-maintenance/dreaming-planner.js.map +1 -0
- package/dist/agent/nightly-maintenance/dreaming-runner.d.ts +93 -0
- package/dist/agent/nightly-maintenance/dreaming-runner.d.ts.map +1 -0
- package/dist/agent/nightly-maintenance/dreaming-runner.js +156 -0
- package/dist/agent/nightly-maintenance/dreaming-runner.js.map +1 -0
- package/dist/agent/nightly-maintenance/dreaming-sources.d.ts +115 -0
- package/dist/agent/nightly-maintenance/dreaming-sources.d.ts.map +1 -0
- package/dist/agent/nightly-maintenance/dreaming-sources.js +270 -0
- package/dist/agent/nightly-maintenance/dreaming-sources.js.map +1 -0
- package/dist/agent/nightly-maintenance/index.d.ts +28 -8
- package/dist/agent/nightly-maintenance/index.d.ts.map +1 -1
- package/dist/agent/nightly-maintenance/index.js +42 -15
- package/dist/agent/nightly-maintenance/index.js.map +1 -1
- package/dist/agent/nightly-maintenance/skill-learning-gate.js +1 -1
- package/dist/agent/nightly-maintenance/skill-learning-gate.js.map +1 -1
- package/dist/agent/nightly-maintenance/vocabulary-processor.d.ts +1 -1
- package/dist/agent/nightly-maintenance/vocabulary-processor.d.ts.map +1 -1
- package/dist/agent/owner-channel-resolver.d.ts +2 -0
- package/dist/agent/owner-channel-resolver.d.ts.map +1 -1
- package/dist/agent/owner-channel-resolver.js +4 -0
- package/dist/agent/owner-channel-resolver.js.map +1 -1
- package/dist/agent/product-identity.d.ts +5 -4
- package/dist/agent/product-identity.d.ts.map +1 -1
- package/dist/agent/product-identity.js +7 -6
- package/dist/agent/product-identity.js.map +1 -1
- package/dist/agent/public-activity.js +1 -1
- package/dist/agent/public-activity.js.map +1 -1
- package/dist/agent/runtime-context.d.ts +27 -0
- package/dist/agent/runtime-context.d.ts.map +1 -0
- package/dist/agent/runtime-context.js +60 -0
- package/dist/agent/runtime-context.js.map +1 -0
- package/dist/agent/runtime-disclosure-policy.d.ts +6 -0
- package/dist/agent/runtime-disclosure-policy.d.ts.map +1 -0
- package/dist/agent/runtime-disclosure-policy.js +16 -0
- package/dist/agent/runtime-disclosure-policy.js.map +1 -0
- package/dist/agent/runtime-surface.d.ts +15 -4
- package/dist/agent/runtime-surface.d.ts.map +1 -1
- package/dist/agent/runtime-surface.js +0 -1
- package/dist/agent/runtime-surface.js.map +1 -1
- package/dist/agent/session-manager.d.ts +30 -126
- package/dist/agent/session-manager.d.ts.map +1 -1
- package/dist/agent/session-manager.js +60 -484
- package/dist/agent/session-manager.js.map +1 -1
- package/dist/agent/state.d.ts +42 -2
- package/dist/agent/state.d.ts.map +1 -1
- package/dist/agent/state.js +21 -11
- package/dist/agent/state.js.map +1 -1
- package/dist/agent/stream-handler.d.ts +6 -13
- package/dist/agent/stream-handler.d.ts.map +1 -1
- package/dist/agent/stream-handler.js +8 -62
- package/dist/agent/stream-handler.js.map +1 -1
- package/dist/agent/system-prompt.d.ts +2 -0
- package/dist/agent/system-prompt.d.ts.map +1 -1
- package/dist/agent/system-prompt.js +21 -20
- package/dist/agent/system-prompt.js.map +1 -1
- package/dist/agent/tool-usage.d.ts.map +1 -1
- package/dist/agent/tool-usage.js +0 -1
- package/dist/agent/tool-usage.js.map +1 -1
- package/dist/agent/transcript/transcript-backfill.js +3 -3
- package/dist/agent/transcript/transcript-backfill.js.map +1 -1
- package/dist/agent/transcript/transcript-indexer.d.ts +3 -31
- package/dist/agent/transcript/transcript-indexer.d.ts.map +1 -1
- package/dist/agent/transcript/transcript-indexer.js +58 -57
- package/dist/agent/transcript/transcript-indexer.js.map +1 -1
- package/dist/agent/transcript-parsers/trivial-tools.d.ts.map +1 -1
- package/dist/agent/transcript-parsers/trivial-tools.js +0 -2
- package/dist/agent/transcript-parsers/trivial-tools.js.map +1 -1
- package/dist/agent/transcript-parsers/types.d.ts +1 -1
- package/dist/agent/transcript-summarizer.d.ts +14 -0
- package/dist/agent/transcript-summarizer.d.ts.map +1 -1
- package/dist/agent/transcript-summarizer.js +69 -45
- package/dist/agent/transcript-summarizer.js.map +1 -1
- package/dist/agent/usage/usage-report-queue.d.ts.map +1 -1
- package/dist/agent/usage/usage-report-queue.js +53 -52
- package/dist/agent/usage/usage-report-queue.js.map +1 -1
- package/dist/agent/usage/usage-report-types.d.ts +1 -1
- package/dist/agent/usage/usage-report-types.d.ts.map +1 -1
- package/dist/agent/vocabulary-glossary.d.ts +3 -3
- package/dist/agent/wake-cycle-runner.d.ts +22 -17
- package/dist/agent/wake-cycle-runner.d.ts.map +1 -1
- package/dist/agent/wake-cycle-runner.js +190 -320
- package/dist/agent/wake-cycle-runner.js.map +1 -1
- package/dist/builtin-skills/owner-manual/SKILL.md +2 -2
- package/dist/calendar/occurrence-ownership.d.ts.map +1 -1
- package/dist/calendar/occurrence-ownership.js +6 -5
- package/dist/calendar/occurrence-ownership.js.map +1 -1
- package/dist/calendar/scheduler.d.ts.map +1 -1
- package/dist/calendar/scheduler.js +4 -3
- package/dist/calendar/scheduler.js.map +1 -1
- package/dist/channels/interface.d.ts +8 -2
- package/dist/channels/interface.d.ts.map +1 -1
- package/dist/channels/interface.js +8 -1
- package/dist/channels/interface.js.map +1 -1
- package/dist/channels/manager.d.ts +12 -0
- package/dist/channels/manager.d.ts.map +1 -1
- package/dist/channels/manager.js +97 -8
- package/dist/channels/manager.js.map +1 -1
- package/dist/channels/queue.d.ts.map +1 -1
- package/dist/channels/queue.js +8 -0
- package/dist/channels/queue.js.map +1 -1
- package/dist/channels/telegram.d.ts.map +1 -1
- package/dist/channels/telegram.js +28 -2
- package/dist/channels/telegram.js.map +1 -1
- package/dist/channels/tui.d.ts +14 -1
- package/dist/channels/tui.d.ts.map +1 -1
- package/dist/channels/tui.js +64 -2
- package/dist/channels/tui.js.map +1 -1
- package/dist/channels/unavailable-target.d.ts +20 -0
- package/dist/channels/unavailable-target.d.ts.map +1 -0
- package/dist/channels/unavailable-target.js +82 -0
- package/dist/channels/unavailable-target.js.map +1 -0
- package/dist/cli/index.d.ts +2 -2
- package/dist/cli/index.d.ts.map +1 -1
- package/dist/cli/index.js +22 -53
- package/dist/cli/index.js.map +1 -1
- package/dist/config/index.d.ts +13 -7
- package/dist/config/index.d.ts.map +1 -1
- package/dist/config/index.js +51 -64
- package/dist/config/index.js.map +1 -1
- package/dist/config/types.d.ts +28 -7
- package/dist/config/types.d.ts.map +1 -1
- package/dist/config/types.js +22 -20
- package/dist/config/types.js.map +1 -1
- package/dist/conversations/lazy-runtime.d.ts +5 -0
- package/dist/conversations/lazy-runtime.d.ts.map +1 -0
- package/dist/conversations/lazy-runtime.js +12 -0
- package/dist/conversations/lazy-runtime.js.map +1 -0
- package/dist/conversations/runtime.d.ts +17 -0
- package/dist/conversations/runtime.d.ts.map +1 -0
- package/dist/conversations/runtime.js +92 -0
- package/dist/conversations/runtime.js.map +1 -0
- package/dist/conversations/scheduler.d.ts +57 -0
- package/dist/conversations/scheduler.d.ts.map +1 -0
- package/dist/conversations/scheduler.js +175 -0
- package/dist/conversations/scheduler.js.map +1 -0
- package/dist/data-processing/pipeline.d.ts +0 -2
- package/dist/data-processing/pipeline.d.ts.map +1 -1
- package/dist/data-processing/pipeline.js +19 -24
- package/dist/data-processing/pipeline.js.map +1 -1
- package/dist/data-processing/restructure.d.ts +0 -2
- package/dist/data-processing/restructure.d.ts.map +1 -1
- package/dist/data-processing/restructure.js +6 -9
- package/dist/data-processing/restructure.js.map +1 -1
- package/dist/data-processing/types.d.ts +2 -9
- package/dist/data-processing/types.d.ts.map +1 -1
- package/dist/data-processing/types.js +2 -13
- package/dist/data-processing/types.js.map +1 -1
- package/dist/email/email-route-store.d.ts.map +1 -1
- package/dist/email/email-route-store.js +6 -5
- package/dist/email/email-route-store.js.map +1 -1
- package/dist/i18n/messages.d.ts +26 -2
- package/dist/i18n/messages.d.ts.map +1 -1
- package/dist/i18n/messages.js +30 -5
- package/dist/i18n/messages.js.map +1 -1
- package/dist/index.js.map +1 -1
- package/dist/logger.d.ts +11 -0
- package/dist/logger.d.ts.map +1 -1
- package/dist/logger.js +49 -1
- package/dist/logger.js.map +1 -1
- package/dist/obs/mini-app/status.d.ts.map +1 -1
- package/dist/obs/mini-app/status.js +0 -1
- package/dist/obs/mini-app/status.js.map +1 -1
- package/dist/onboarding/onboarding-service-client.d.ts +1 -0
- package/dist/onboarding/onboarding-service-client.d.ts.map +1 -1
- package/dist/onboarding/onboarding-service-client.js.map +1 -1
- package/dist/onboarding/remote-set-owner.d.ts.map +1 -1
- package/dist/onboarding/remote-set-owner.js +0 -1
- package/dist/onboarding/remote-set-owner.js.map +1 -1
- package/dist/onboarding/set-owner.d.ts +1 -1
- package/dist/onboarding/set-owner.d.ts.map +1 -1
- package/dist/onboarding/set-owner.js +3 -6
- package/dist/onboarding/set-owner.js.map +1 -1
- package/dist/reconfigure.d.ts.map +1 -1
- package/dist/reconfigure.js +1 -32
- package/dist/reconfigure.js.map +1 -1
- package/dist/reset.d.ts.map +1 -1
- package/dist/reset.js +3 -1
- package/dist/reset.js.map +1 -1
- package/dist/threads/active-threads-store.d.ts.map +1 -1
- package/dist/threads/active-threads-store.js +8 -27
- package/dist/threads/active-threads-store.js.map +1 -1
- package/dist/threads/dreaming-execution.d.ts +10 -0
- package/dist/threads/dreaming-execution.d.ts.map +1 -0
- package/dist/threads/dreaming-execution.js +78 -0
- package/dist/threads/dreaming-execution.js.map +1 -0
- package/dist/threads/execution-authority.d.ts +43 -0
- package/dist/threads/execution-authority.d.ts.map +1 -0
- package/dist/threads/execution-authority.js +75 -0
- package/dist/threads/execution-authority.js.map +1 -0
- package/dist/threads/execution-budget.d.ts +107 -0
- package/dist/threads/execution-budget.d.ts.map +1 -0
- package/dist/threads/execution-budget.js +257 -0
- package/dist/threads/execution-budget.js.map +1 -0
- package/dist/threads/execution-host.d.ts +17 -0
- package/dist/threads/execution-host.d.ts.map +1 -0
- package/dist/threads/execution-host.js +66 -0
- package/dist/threads/execution-host.js.map +1 -0
- package/dist/threads/execution-scheduler.d.ts +162 -0
- package/dist/threads/execution-scheduler.d.ts.map +1 -0
- package/dist/threads/execution-scheduler.js +413 -0
- package/dist/threads/execution-scheduler.js.map +1 -0
- package/dist/threads/execution-snapshot.d.ts +91 -0
- package/dist/threads/execution-snapshot.d.ts.map +1 -0
- package/dist/threads/execution-snapshot.js +146 -0
- package/dist/threads/execution-snapshot.js.map +1 -0
- package/dist/threads/execution-store.d.ts +374 -0
- package/dist/threads/execution-store.d.ts.map +1 -0
- package/dist/threads/execution-store.js +910 -0
- package/dist/threads/execution-store.js.map +1 -0
- package/dist/threads/execution-thread-error.d.ts +9 -0
- package/dist/threads/execution-thread-error.d.ts.map +1 -0
- package/dist/threads/execution-thread-error.js +12 -0
- package/dist/threads/execution-thread-error.js.map +1 -0
- package/dist/threads/executor-exit.d.ts +18 -0
- package/dist/threads/executor-exit.d.ts.map +1 -0
- package/dist/threads/executor-exit.js +21 -0
- package/dist/threads/executor-exit.js.map +1 -0
- package/dist/threads/foreground-task.d.ts +91 -0
- package/dist/threads/foreground-task.d.ts.map +1 -0
- package/dist/threads/foreground-task.js +191 -0
- package/dist/threads/foreground-task.js.map +1 -0
- package/dist/threads/foreman-business.d.ts +9 -0
- package/dist/threads/foreman-business.d.ts.map +1 -0
- package/dist/threads/foreman-business.js +117 -0
- package/dist/threads/foreman-business.js.map +1 -0
- package/dist/threads/foreman-client.d.ts +18 -0
- package/dist/threads/foreman-client.d.ts.map +1 -0
- package/dist/threads/foreman-client.js +51 -0
- package/dist/threads/foreman-client.js.map +1 -0
- package/dist/threads/foreman-delivery.d.ts +5 -0
- package/dist/threads/foreman-delivery.d.ts.map +1 -0
- package/dist/threads/foreman-delivery.js +21 -0
- package/dist/threads/foreman-delivery.js.map +1 -0
- package/dist/threads/foreman-execution.d.ts +32 -0
- package/dist/threads/foreman-execution.d.ts.map +1 -0
- package/dist/threads/foreman-execution.js +90 -0
- package/dist/threads/foreman-execution.js.map +1 -0
- package/dist/threads/foreman-host.d.ts +77 -0
- package/dist/threads/foreman-host.d.ts.map +1 -0
- package/dist/threads/foreman-host.js +891 -0
- package/dist/threads/foreman-host.js.map +1 -0
- package/dist/threads/foreman-protocol.d.ts +242 -0
- package/dist/threads/foreman-protocol.d.ts.map +1 -0
- package/dist/threads/foreman-protocol.js +116 -0
- package/dist/threads/foreman-protocol.js.map +1 -0
- package/dist/threads/foreman-store.d.ts +151 -0
- package/dist/threads/foreman-store.d.ts.map +1 -0
- package/dist/threads/foreman-store.js +299 -0
- package/dist/threads/foreman-store.js.map +1 -0
- package/dist/threads/generic-execution.d.ts +25 -0
- package/dist/threads/generic-execution.d.ts.map +1 -0
- package/dist/threads/generic-execution.js +86 -0
- package/dist/threads/generic-execution.js.map +1 -0
- package/dist/threads/init-thread-dir.d.ts +2 -2
- package/dist/threads/init-thread-dir.d.ts.map +1 -1
- package/dist/threads/init-thread-dir.js +6 -6
- package/dist/threads/init-thread-dir.js.map +1 -1
- package/dist/threads/ipc.d.ts +108 -2
- package/dist/threads/ipc.d.ts.map +1 -1
- package/dist/threads/ipc.js +14 -2
- package/dist/threads/ipc.js.map +1 -1
- package/dist/threads/lab-run-thread.d.ts +3 -5
- package/dist/threads/lab-run-thread.d.ts.map +1 -1
- package/dist/threads/lab-run-thread.js +3 -5
- package/dist/threads/lab-run-thread.js.map +1 -1
- package/dist/threads/lab-runtime-policy.d.ts +26 -21
- package/dist/threads/lab-runtime-policy.d.ts.map +1 -1
- package/dist/threads/lab-runtime-policy.js +31 -126
- package/dist/threads/lab-runtime-policy.js.map +1 -1
- package/dist/threads/process-group.d.ts +41 -0
- package/dist/threads/process-group.d.ts.map +1 -0
- package/dist/threads/process-group.js +161 -0
- package/dist/threads/process-group.js.map +1 -0
- package/dist/threads/relay-adapter.d.ts +8 -0
- package/dist/threads/relay-adapter.d.ts.map +1 -1
- package/dist/threads/relay-adapter.js +26 -1
- package/dist/threads/relay-adapter.js.map +1 -1
- package/dist/threads/supervisor.d.ts +191 -57
- package/dist/threads/supervisor.d.ts.map +1 -1
- package/dist/threads/supervisor.js +766 -427
- package/dist/threads/supervisor.js.map +1 -1
- package/dist/threads/task-workspace.d.ts +8 -0
- package/dist/threads/task-workspace.d.ts.map +1 -0
- package/dist/threads/task-workspace.js +52 -0
- package/dist/threads/task-workspace.js.map +1 -0
- package/dist/threads/worker-entry.d.ts.map +1 -1
- package/dist/threads/worker-entry.js +314 -34
- package/dist/threads/worker-entry.js.map +1 -1
- package/dist/threads/worker-execution-runtime.d.ts +75 -0
- package/dist/threads/worker-execution-runtime.d.ts.map +1 -0
- package/dist/threads/worker-execution-runtime.js +142 -0
- package/dist/threads/worker-execution-runtime.js.map +1 -0
- package/dist/threads/worker-execution.d.ts +35 -0
- package/dist/threads/worker-execution.d.ts.map +1 -0
- package/dist/threads/worker-execution.js +2 -0
- package/dist/threads/worker-execution.js.map +1 -0
- package/dist/threads/worker-runtime-policy.d.ts +42 -0
- package/dist/threads/worker-runtime-policy.d.ts.map +1 -0
- package/dist/threads/worker-runtime-policy.js +98 -0
- package/dist/threads/worker-runtime-policy.js.map +1 -0
- package/dist/tools/adapter-tool.d.ts +12 -0
- package/dist/tools/adapter-tool.d.ts.map +1 -0
- package/dist/tools/adapter-tool.js +2 -0
- package/dist/tools/adapter-tool.js.map +1 -0
- package/dist/tools/data-service.d.ts +2 -2
- package/dist/tools/delegation.d.ts +121 -0
- package/dist/tools/delegation.d.ts.map +1 -0
- package/dist/tools/delegation.js +106 -0
- package/dist/tools/delegation.js.map +1 -0
- package/dist/tools/dream-memory.d.ts +122 -0
- package/dist/tools/dream-memory.d.ts.map +1 -0
- package/dist/tools/dream-memory.js +513 -0
- package/dist/tools/dream-memory.js.map +1 -0
- package/dist/tools/email.d.ts +1 -1
- package/dist/tools/execution-control.d.ts +31 -0
- package/dist/tools/execution-control.d.ts.map +1 -0
- package/dist/tools/execution-control.js +71 -0
- package/dist/tools/execution-control.js.map +1 -0
- package/dist/tools/index.d.ts +5 -7
- package/dist/tools/index.d.ts.map +1 -1
- package/dist/tools/index.js +7 -13
- package/dist/tools/index.js.map +1 -1
- package/dist/tools/mcp-manager.d.ts +1 -1
- package/dist/tools/memory.d.ts +1 -1
- package/dist/tools/memory.d.ts.map +1 -1
- package/dist/tools/memory.js +69 -45
- package/dist/tools/memory.js.map +1 -1
- package/dist/tools/notify.d.ts +5 -0
- package/dist/tools/notify.d.ts.map +1 -1
- package/dist/tools/notify.js +45 -10
- package/dist/tools/notify.js.map +1 -1
- package/dist/tools/skill.d.ts +1 -1
- package/dist/tools/totp.d.ts +1 -1
- package/dist/tui/client.d.ts +1 -16
- package/dist/tui/client.d.ts.map +1 -1
- package/dist/tui/client.js +0 -4
- package/dist/tui/client.js.map +1 -1
- package/dist/tui/index.d.ts.map +1 -1
- package/dist/tui/index.js +0 -41
- package/dist/tui/index.js.map +1 -1
- package/dist/tui/protocol.d.ts +2 -1
- package/dist/tui/protocol.d.ts.map +1 -1
- package/dist/tui/protocol.js +2 -1
- package/dist/tui/protocol.js.map +1 -1
- package/dist/tui/renderer.d.ts.map +1 -1
- package/dist/tui/renderer.js +0 -5
- package/dist/tui/renderer.js.map +1 -1
- package/dist/tui/request-store.d.ts +1 -1
- package/dist/tui/request-store.d.ts.map +1 -1
- package/dist/tui/request-store.js +2 -2
- package/dist/tui/request-store.js.map +1 -1
- package/dist/tui/server.d.ts.map +1 -1
- package/dist/tui/server.js +137 -25
- package/dist/tui/server.js.map +1 -1
- package/dist/utils/claude-transcripts.d.ts +6 -0
- package/dist/utils/claude-transcripts.d.ts.map +1 -1
- package/dist/utils/claude-transcripts.js +8 -2
- package/dist/utils/claude-transcripts.js.map +1 -1
- package/dist/utils/restart.d.ts.map +1 -1
- package/dist/utils/restart.js +6 -0
- package/dist/utils/restart.js.map +1 -1
- package/dist-agent/bundle.cjs +2 -2
- package/package.json +1 -1
- package/dist/agent/mailbox.d.ts +0 -50
- package/dist/agent/mailbox.d.ts.map +0 -1
- package/dist/agent/mailbox.js +0 -124
- package/dist/agent/mailbox.js.map +0 -1
- package/dist/agent/nightly-maintenance/memory-dreaming-sweep.d.ts +0 -77
- package/dist/agent/nightly-maintenance/memory-dreaming-sweep.d.ts.map +0 -1
- package/dist/agent/nightly-maintenance/memory-dreaming-sweep.js +0 -158
- package/dist/agent/nightly-maintenance/memory-dreaming-sweep.js.map +0 -1
- package/dist/agent/nightly-maintenance/memory-dreaming.d.ts +0 -116
- package/dist/agent/nightly-maintenance/memory-dreaming.d.ts.map +0 -1
- package/dist/agent/nightly-maintenance/memory-dreaming.js +0 -458
- package/dist/agent/nightly-maintenance/memory-dreaming.js.map +0 -1
- package/dist/builtin-skills/catalog/phone-adb-automation/SKILL.md +0 -412
- package/dist/builtin-skills/catalog/phone-adb-automation/phone_input.sh +0 -132
- package/dist/builtin-skills/catalog/phone-adb-automation/phone_launch.sh +0 -166
- package/dist/builtin-skills/catalog/phone-adb-automation/phone_screenshot.sh +0 -87
- package/dist/builtin-skills/catalog/phone-adb-automation/phone_security_kbd.py +0 -174
- package/dist/builtin-skills/catalog/phone-adb-automation/phone_setup.sh +0 -274
- package/dist/builtin-skills/catalog/phone-adb-automation/phone_swipe.sh +0 -111
- package/dist/builtin-skills/catalog/phone-adb-automation/phone_tap.sh +0 -87
- package/dist/builtin-skills/catalog/phone-adb-automation/phone_ui_parse.py +0 -176
- package/dist/builtin-skills/catalog/phone-adb-automation/phone_wake_unlock.sh +0 -67
- package/dist/builtin-skills/macos-automation/SKILL.md +0 -132
- package/dist/builtin-skills/transcribe-audio/SKILL.md +0 -122
- package/dist/builtin-skills/visionclaw-manual/SKILL.md +0 -337
- package/dist/obs/rdp/icons/icons/app_windows.svg +0 -4
- package/dist/obs/rdp/icons/icons/clip_get.svg +0 -4
- package/dist/obs/rdp/icons/icons/clip_send.svg +0 -4
- package/dist/obs/rdp/icons/icons/clip_shared.svg +0 -4
- package/dist/obs/rdp/icons/icons/clipboard.svg +0 -4
- package/dist/obs/rdp/icons/icons/clipboard_shared.svg +0 -4
- package/dist/obs/rdp/icons/icons/control.svg +0 -4
- package/dist/obs/rdp/icons/icons/desktop.svg +0 -4
- package/dist/obs/rdp/icons/icons/display.svg +0 -4
- package/dist/obs/rdp/icons/icons/launchpad.svg +0 -4
- package/dist/obs/rdp/icons/icons/mission_control.svg +0 -4
- package/dist/obs/rdp/icons/icons/screenshot.svg +0 -4
- package/dist/obs/rdp/icons/icons/zoom_actual.svg +0 -4
- package/dist/obs/rdp/icons/icons/zoom_fit.svg +0 -4
- package/dist/obs/rdp/icons/icons/zoom_in.svg +0 -4
- package/dist/obs/rdp/icons/icons/zoom_out.svg +0 -4
- package/dist/realtime/assets/index.html +0 -1058
- package/dist/realtime/assets/samples/alloy.mp3 +0 -0
- package/dist/realtime/assets/samples/ash.mp3 +0 -0
- package/dist/realtime/assets/samples/ballad.mp3 +0 -0
- package/dist/realtime/assets/samples/cedar.mp3 +0 -0
- package/dist/realtime/assets/samples/coral.mp3 +0 -0
- package/dist/realtime/assets/samples/echo.mp3 +0 -0
- package/dist/realtime/assets/samples/marin.mp3 +0 -0
- package/dist/realtime/assets/samples/sage.mp3 +0 -0
- package/dist/realtime/assets/samples/shimmer.mp3 +0 -0
- package/dist/realtime/assets/samples/verse.mp3 +0 -0
- package/dist/threads/task-contracts.d.ts +0 -194
- package/dist/threads/task-contracts.d.ts.map +0 -1
- package/dist/threads/task-contracts.js +0 -82
- package/dist/threads/task-contracts.js.map +0 -1
- package/dist/threads/task-sidecar.d.ts +0 -143
- package/dist/threads/task-sidecar.d.ts.map +0 -1
- package/dist/threads/task-sidecar.js +0 -309
- package/dist/threads/task-sidecar.js.map +0 -1
- package/dist/threads/task-store.d.ts +0 -172
- package/dist/threads/task-store.d.ts.map +0 -1
- package/dist/threads/task-store.js +0 -594
- package/dist/threads/task-store.js.map +0 -1
- package/dist/threads/thread-task-context.d.ts +0 -40
- package/dist/threads/thread-task-context.d.ts.map +0 -1
- package/dist/threads/thread-task-context.js +0 -159
- package/dist/threads/thread-task-context.js.map +0 -1
- package/dist/threads/thread-task-controller.d.ts +0 -122
- package/dist/threads/thread-task-controller.d.ts.map +0 -1
- package/dist/threads/thread-task-controller.js +0 -276
- package/dist/threads/thread-task-controller.js.map +0 -1
- package/dist/threads/thread-task-runtime.d.ts +0 -320
- package/dist/threads/thread-task-runtime.d.ts.map +0 -1
- package/dist/threads/thread-task-runtime.js +0 -843
- package/dist/threads/thread-task-runtime.js.map +0 -1
- package/dist/tools/switch-session.d.ts +0 -15
- package/dist/tools/switch-session.d.ts.map +0 -1
- package/dist/tools/switch-session.js +0 -88
- package/dist/tools/switch-session.js.map +0 -1
- package/dist/tools/thread-tasks.d.ts +0 -10
- package/dist/tools/thread-tasks.d.ts.map +0 -1
- package/dist/tools/thread-tasks.js +0 -88
- package/dist/tools/thread-tasks.js.map +0 -1
- package/dist-agent/assets/index.html +0 -1058
- package/dist-agent/assets/samples/alloy.mp3 +0 -0
- package/dist-agent/assets/samples/ash.mp3 +0 -0
- package/dist-agent/assets/samples/ballad.mp3 +0 -0
- package/dist-agent/assets/samples/cedar.mp3 +0 -0
- package/dist-agent/assets/samples/coral.mp3 +0 -0
- package/dist-agent/assets/samples/echo.mp3 +0 -0
- package/dist-agent/assets/samples/marin.mp3 +0 -0
- package/dist-agent/assets/samples/sage.mp3 +0 -0
- package/dist-agent/assets/samples/shimmer.mp3 +0 -0
- package/dist-agent/assets/samples/verse.mp3 +0 -0
- package/dist-agent/playwriter-relay.cjs +0 -95
- package/dist-agent/realtime/assets/index.html +0 -1058
- package/dist-agent/realtime/assets/samples/alloy.mp3 +0 -0
- package/dist-agent/realtime/assets/samples/ash.mp3 +0 -0
- package/dist-agent/realtime/assets/samples/ballad.mp3 +0 -0
- package/dist-agent/realtime/assets/samples/cedar.mp3 +0 -0
- package/dist-agent/realtime/assets/samples/coral.mp3 +0 -0
- package/dist-agent/realtime/assets/samples/echo.mp3 +0 -0
- package/dist-agent/realtime/assets/samples/marin.mp3 +0 -0
- package/dist-agent/realtime/assets/samples/sage.mp3 +0 -0
- package/dist-agent/realtime/assets/samples/shimmer.mp3 +0 -0
- package/dist-agent/realtime/assets/samples/verse.mp3 +0 -0
|
@@ -0,0 +1,413 @@
|
|
|
1
|
+
import { logger } from "../logger.js";
|
|
2
|
+
import { executorGroupStatus, killExecutorGroupAndWait } from "./process-group.js";
|
|
3
|
+
import { EXECUTOR_REFUSED_EXIT_CODE, ExecutorRefusedError } from "./executor-exit.js";
|
|
4
|
+
/** Same cap as the supervisor's crash budget for thread workers. */
|
|
5
|
+
export const MAX_AUTO_RESUMES = 3;
|
|
6
|
+
const OUTBOX_POLL_INTERVAL_MS = 2_000;
|
|
7
|
+
const OUTBOX_RETRY_DELAY_MS = 30_000;
|
|
8
|
+
/** How long one attempt waits for a previous host's executor group to empty. */
|
|
9
|
+
const STALE_KILL_WAIT_MS = 5_000;
|
|
10
|
+
/** Backoff between attempts to prove a previous host's executor stopped. */
|
|
11
|
+
const STALE_RECHECK_DELAYS_MS = [1_000, 5_000, 30_000, 120_000];
|
|
12
|
+
/** Grace on top of an execution's own time budget before the host stops it. */
|
|
13
|
+
const HOST_DEADLINE_GRACE_MS = 60_000;
|
|
14
|
+
/**
|
|
15
|
+
* Whether an interrupted running execution is resumed under the same
|
|
16
|
+
* executionId. Lab creates a new run instead; Nightly continues from its own
|
|
17
|
+
* watermark. Owner-delegated work (General/TUI) resumes.
|
|
18
|
+
*/
|
|
19
|
+
export function resumesAfterInterruption(caller) {
|
|
20
|
+
return caller.kind === "general" || caller.kind === "tui";
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* Host-side scheduler for internal executions (#2805 steps 1c/1d).
|
|
24
|
+
*
|
|
25
|
+
* It owns no processes itself: the supervisor forks and stops workers. The
|
|
26
|
+
* scheduler decides what to admit, records the writer generation, and
|
|
27
|
+
* resolves every worker exit through `confirmStopped`, so a terminal state is
|
|
28
|
+
* published, and the next writer admitted, only after the previous executor
|
|
29
|
+
* is known to be stopped.
|
|
30
|
+
*/
|
|
31
|
+
export class ExecutionScheduler {
|
|
32
|
+
lastAdmittedGroup = null;
|
|
33
|
+
store;
|
|
34
|
+
host;
|
|
35
|
+
delivery;
|
|
36
|
+
groupStatus;
|
|
37
|
+
killGroupAndWait;
|
|
38
|
+
stopRegisteredGroups;
|
|
39
|
+
staleRecheckDelaysMs;
|
|
40
|
+
hostDeadlineGraceMs;
|
|
41
|
+
/** executionId → generation of the executor this host started. */
|
|
42
|
+
running = new Map();
|
|
43
|
+
/** Executions whose stop this host requested; their exit is not a crash. */
|
|
44
|
+
stopRequested = new Set();
|
|
45
|
+
/** Host-side deadlines: a hung worker cannot outlive its time budget. */
|
|
46
|
+
deadlines = new Map();
|
|
47
|
+
/** Executions whose previous executor is not yet proven stopped → attempts so far. */
|
|
48
|
+
unverified = new Map();
|
|
49
|
+
recheckTimers = new Map();
|
|
50
|
+
admissionTimer = null;
|
|
51
|
+
outboxTimer = null;
|
|
52
|
+
delivering = false;
|
|
53
|
+
started = false;
|
|
54
|
+
stopped = false;
|
|
55
|
+
constructor(options) {
|
|
56
|
+
this.store = options.store;
|
|
57
|
+
this.host = options.host;
|
|
58
|
+
this.delivery = options.delivery;
|
|
59
|
+
this.groupStatus = options.groupStatus ?? executorGroupStatus;
|
|
60
|
+
this.killGroupAndWait = options.killGroupAndWait ?? killExecutorGroupAndWait;
|
|
61
|
+
this.stopRegisteredGroups = options.stopRegisteredGroups ?? (() => Promise.resolve(true));
|
|
62
|
+
this.staleRecheckDelaysMs = options.staleRecheckDelaysMs ?? STALE_RECHECK_DELAYS_MS;
|
|
63
|
+
this.hostDeadlineGraceMs = options.hostDeadlineGraceMs ?? HOST_DEADLINE_GRACE_MS;
|
|
64
|
+
}
|
|
65
|
+
/** Recover executions left by a previous host, then start admission and delivery. */
|
|
66
|
+
start() {
|
|
67
|
+
this.started = true;
|
|
68
|
+
this.store.rescheduleOwedDeliveries();
|
|
69
|
+
this.recoverAfterRestart();
|
|
70
|
+
this.requestAdmission();
|
|
71
|
+
this.outboxTimer = setInterval(() => { void this.deliverOutbox(); }, OUTBOX_POLL_INTERVAL_MS);
|
|
72
|
+
this.outboxTimer.unref();
|
|
73
|
+
void this.deliverOutbox();
|
|
74
|
+
}
|
|
75
|
+
/**
|
|
76
|
+
* Stop scheduling. Running executors are stopped by the host's shutdown;
|
|
77
|
+
* their exits still resolve here (`hostStopping`), so an interrupted
|
|
78
|
+
* execution is queued for the next host to resume. An executor whose group
|
|
79
|
+
* cannot be emptied stays recorded, and the next host proves it stopped
|
|
80
|
+
* first.
|
|
81
|
+
*/
|
|
82
|
+
stop() {
|
|
83
|
+
this.stopped = true;
|
|
84
|
+
if (this.admissionTimer)
|
|
85
|
+
clearTimeout(this.admissionTimer);
|
|
86
|
+
if (this.outboxTimer)
|
|
87
|
+
clearInterval(this.outboxTimer);
|
|
88
|
+
for (const timer of [...this.deadlines.values(), ...this.recheckTimers.values()])
|
|
89
|
+
clearTimeout(timer);
|
|
90
|
+
this.deadlines.clear();
|
|
91
|
+
this.recheckTimers.clear();
|
|
92
|
+
this.admissionTimer = null;
|
|
93
|
+
this.outboxTimer = null;
|
|
94
|
+
}
|
|
95
|
+
isStopped() {
|
|
96
|
+
return this.stopped;
|
|
97
|
+
}
|
|
98
|
+
get activeCount() {
|
|
99
|
+
return this.running.size;
|
|
100
|
+
}
|
|
101
|
+
isRunning(executionId) {
|
|
102
|
+
return this.running.has(executionId);
|
|
103
|
+
}
|
|
104
|
+
/**
|
|
105
|
+
* Work that maintenance must not start alongside: a running executor of
|
|
106
|
+
* any caller, an executor whose stop is not yet proven, or queued work of
|
|
107
|
+
* a caller other than maintenance itself.
|
|
108
|
+
*/
|
|
109
|
+
hasOutstandingWork() {
|
|
110
|
+
if (this.running.size > 0 || this.unverified.size > 0)
|
|
111
|
+
return true;
|
|
112
|
+
return this.store.listByState("queued").some((record) => record.caller.kind !== "nightly");
|
|
113
|
+
}
|
|
114
|
+
/** Whether this execution's previous executor is still unproven stopped. */
|
|
115
|
+
isUnverified(executionId) {
|
|
116
|
+
return this.unverified.has(executionId);
|
|
117
|
+
}
|
|
118
|
+
/**
|
|
119
|
+
* Keep an execution blocked until its recorded executor group is proven
|
|
120
|
+
* gone, retrying with backoff and telling the caller. Used for survivors of
|
|
121
|
+
* a stop and for executors left by a previous host.
|
|
122
|
+
*/
|
|
123
|
+
blockUntilStopped(executionId) {
|
|
124
|
+
if (this.unverified.has(executionId))
|
|
125
|
+
return;
|
|
126
|
+
this.unverified.set(executionId, 0);
|
|
127
|
+
void this.proveStaleExecutorStopped(executionId);
|
|
128
|
+
}
|
|
129
|
+
/** Called after a submit, an answer, or a freed slot. Admission is coalesced. */
|
|
130
|
+
requestAdmission() {
|
|
131
|
+
// Not started yet, or already stopped: nothing is admitted.
|
|
132
|
+
if (this.stopped || !this.started || this.admissionTimer)
|
|
133
|
+
return;
|
|
134
|
+
this.admissionTimer = setTimeout(() => {
|
|
135
|
+
this.admissionTimer = null;
|
|
136
|
+
this.admitQueued();
|
|
137
|
+
}, 0);
|
|
138
|
+
this.admissionTimer.unref();
|
|
139
|
+
}
|
|
140
|
+
/** Stop the executor if this host runs one; its exit is then expected, not a crash. */
|
|
141
|
+
requestStop(executionId, reason) {
|
|
142
|
+
if (!this.running.has(executionId))
|
|
143
|
+
return;
|
|
144
|
+
this.stopRequested.add(executionId);
|
|
145
|
+
this.host.stop(executionId, reason);
|
|
146
|
+
}
|
|
147
|
+
/**
|
|
148
|
+
* Called with the exit of every execution worker the host forked, after
|
|
149
|
+
* the host tried to empty its process group. `hostStopping` marks an exit
|
|
150
|
+
* caused by this host shutting down: an interrupted execution is queued
|
|
151
|
+
* for the next host to resume. `groupStopped: false` means members of the
|
|
152
|
+
* group survived the kill; the execution stays blocked until they are
|
|
153
|
+
* proven gone (by the next host, when this one is shutting down).
|
|
154
|
+
*/
|
|
155
|
+
handleWorkerExit(executionId, code, signal, options = {}) {
|
|
156
|
+
const generation = this.running.get(executionId);
|
|
157
|
+
if (generation === undefined)
|
|
158
|
+
return;
|
|
159
|
+
this.running.delete(executionId);
|
|
160
|
+
const deadline = this.deadlines.get(executionId);
|
|
161
|
+
if (deadline)
|
|
162
|
+
clearTimeout(deadline);
|
|
163
|
+
this.deadlines.delete(executionId);
|
|
164
|
+
const requested = this.stopRequested.delete(executionId);
|
|
165
|
+
logger.system(`[execution] Executor exited: execution=${executionId} generation=${generation} code=${code} signal=${signal}`);
|
|
166
|
+
if (options.groupStopped === false) {
|
|
167
|
+
// The leader is gone but part of its group is not: no new writer yet.
|
|
168
|
+
// A shutting-down host leaves it to the next host to prove.
|
|
169
|
+
logger.err(`[execution] Executor group survived its stop: execution=${executionId}; blocking until it is gone`);
|
|
170
|
+
if (!options.hostStopping)
|
|
171
|
+
this.blockUntilStopped(executionId);
|
|
172
|
+
return;
|
|
173
|
+
}
|
|
174
|
+
const how = code === EXECUTOR_REFUSED_EXIT_CODE
|
|
175
|
+
? "refused"
|
|
176
|
+
: options.hostStopping ? "host_shutdown" : requested ? "host_stop" : code === 0 ? "exited" : "crashed";
|
|
177
|
+
this.resolveStoppedExecutor(executionId, generation, how, signal ? `signal ${signal}` : `exit code ${String(code)}`);
|
|
178
|
+
this.requestAdmission();
|
|
179
|
+
void this.deliverOutbox();
|
|
180
|
+
}
|
|
181
|
+
/**
|
|
182
|
+
* The executor for `generation` is stopped. Publish its reported result,
|
|
183
|
+
* keep a waiting question open, confirm a cancel, or decide between an
|
|
184
|
+
* automatic resume and a failure for an interrupted run.
|
|
185
|
+
*/
|
|
186
|
+
resolveStoppedExecutor(executionId, generation, how, detail = "") {
|
|
187
|
+
const record = this.store.get(executionId);
|
|
188
|
+
// A stale resolution (e.g. two observers of one exit) must not touch a
|
|
189
|
+
// record that has moved on to its next executor.
|
|
190
|
+
if (record?.workerInstanceId !== generation || record.state === "queued")
|
|
191
|
+
return;
|
|
192
|
+
if (how === "refused") {
|
|
193
|
+
this.store.failPermanently(executionId, generation, {
|
|
194
|
+
code: "executor_refused",
|
|
195
|
+
message: "The executor refused to start this execution (snapshot or record could not be verified)",
|
|
196
|
+
});
|
|
197
|
+
return;
|
|
198
|
+
}
|
|
199
|
+
const interrupted = record.state === "running" && record.result === null;
|
|
200
|
+
// Input the host accepted but the executor never applied: the task is
|
|
201
|
+
// not finished, whatever the executor reported on its way out.
|
|
202
|
+
const owesInput = record.inputSeq > record.processedInputSeq;
|
|
203
|
+
const stopReason = typeof record.usage?.stopReason === "string" ? record.usage.stopReason : null;
|
|
204
|
+
if (interrupted && stopReason) {
|
|
205
|
+
// The worker stopped because its task budget ran out; resuming would
|
|
206
|
+
// only hit the same limit.
|
|
207
|
+
this.store.confirmStopped(executionId, generation, {
|
|
208
|
+
status: "failed", error: { code: "budget_exhausted", message: stopReason },
|
|
209
|
+
});
|
|
210
|
+
return;
|
|
211
|
+
}
|
|
212
|
+
if (interrupted && (how !== "exited" || owesInput) && resumesAfterInterruption(record.caller)) {
|
|
213
|
+
const next = this.store.requeueForResume(executionId, generation, MAX_AUTO_RESUMES, `${how} (${detail || "no detail"})`);
|
|
214
|
+
logger.system(`[execution] Interrupted execution=${executionId} → ${next?.state ?? "unknown"}`);
|
|
215
|
+
return;
|
|
216
|
+
}
|
|
217
|
+
this.store.confirmStopped(executionId, generation, how === "exited"
|
|
218
|
+
? { status: "failed", error: { code: "no_result", message: "The executor ended without reporting a result" } }
|
|
219
|
+
: { status: "failed", error: { code: "interrupted", message: `The executor stopped before reporting a result (${how}${detail ? `, ${detail}` : ""})` } });
|
|
220
|
+
}
|
|
221
|
+
admitQueued() {
|
|
222
|
+
if (this.isStopped())
|
|
223
|
+
return;
|
|
224
|
+
// Readers may share a directory, but a waiting writer must eventually
|
|
225
|
+
// obtain exclusive access instead of being starved by newly arriving reads.
|
|
226
|
+
const waitingWriters = new Set(this.store.listByState("queued")
|
|
227
|
+
.filter((record) => record.payload.workspaceMode !== "read_only")
|
|
228
|
+
.map((record) => record.payload.workspaceRef).filter((value) => value !== undefined));
|
|
229
|
+
for (const record of this.fairQueued()) {
|
|
230
|
+
if (this.running.has(record.executionId) || this.unverified.has(record.executionId))
|
|
231
|
+
continue;
|
|
232
|
+
// One writer per shared workspace: wait until the previous one stopped.
|
|
233
|
+
const workspace = record.payload.workspaceRef;
|
|
234
|
+
if (workspace && record.payload.workspaceMode === "read_only" && waitingWriters.has(workspace))
|
|
235
|
+
continue;
|
|
236
|
+
if (workspace && this.store.hasLiveWriter(workspace, record.executionId, record.payload.workspaceMode === "read_only"))
|
|
237
|
+
continue;
|
|
238
|
+
// While maintenance holds admission only its own execution gets a slot.
|
|
239
|
+
if (this.host.availableSlots(record) <= 0)
|
|
240
|
+
continue;
|
|
241
|
+
let identity;
|
|
242
|
+
try {
|
|
243
|
+
identity = this.host.spawn(record);
|
|
244
|
+
}
|
|
245
|
+
catch (error) {
|
|
246
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
247
|
+
logger.err(`[execution] Could not start execution=${record.executionId}: ${message}`);
|
|
248
|
+
if (error instanceof ExecutorRefusedError) {
|
|
249
|
+
// It can never start; failing it beats retrying it forever.
|
|
250
|
+
this.store.failPermanently(record.executionId, record.workerInstanceId, { code: "executor_refused", message: message.slice(0, 500) });
|
|
251
|
+
continue;
|
|
252
|
+
}
|
|
253
|
+
return;
|
|
254
|
+
}
|
|
255
|
+
const started = this.store.markStarted(record.executionId, identity);
|
|
256
|
+
if (!started) {
|
|
257
|
+
// Cancelled between listing and admission: release the fresh executor.
|
|
258
|
+
this.host.stop(record.executionId, "admission_raced");
|
|
259
|
+
continue;
|
|
260
|
+
}
|
|
261
|
+
this.running.set(record.executionId, started.workerInstanceId);
|
|
262
|
+
this.lastAdmittedGroup = this.groupOf(record);
|
|
263
|
+
this.armHostDeadline(started);
|
|
264
|
+
logger.system(`[execution] Started execution=${record.executionId} generation=${started.workerInstanceId} pid=${identity.pid}`);
|
|
265
|
+
}
|
|
266
|
+
}
|
|
267
|
+
groupOf(record) {
|
|
268
|
+
return JSON.stringify([record.scope, record.caller.kind, record.caller.ref, record.payload.parentTaskId ?? record.taskId]);
|
|
269
|
+
}
|
|
270
|
+
/** Round-robin across root Tasks, preserving FIFO order within each Task. */
|
|
271
|
+
*fairQueued() {
|
|
272
|
+
const groups = new Map();
|
|
273
|
+
for (const record of this.store.listByState("queued")) {
|
|
274
|
+
const key = this.groupOf(record);
|
|
275
|
+
const queue = groups.get(key) ?? [];
|
|
276
|
+
queue.push(record);
|
|
277
|
+
groups.set(key, queue);
|
|
278
|
+
}
|
|
279
|
+
const keys = [...groups.keys()];
|
|
280
|
+
const previous = this.lastAdmittedGroup === null ? -1 : keys.indexOf(this.lastAdmittedGroup);
|
|
281
|
+
const ordered = previous < 0 ? keys : [...keys.slice(previous + 1), ...keys.slice(0, previous + 1)];
|
|
282
|
+
let remaining = true;
|
|
283
|
+
while (remaining) {
|
|
284
|
+
remaining = false;
|
|
285
|
+
for (const key of ordered) {
|
|
286
|
+
const record = groups.get(key)?.shift();
|
|
287
|
+
if (record) {
|
|
288
|
+
remaining = true;
|
|
289
|
+
yield record;
|
|
290
|
+
}
|
|
291
|
+
}
|
|
292
|
+
}
|
|
293
|
+
}
|
|
294
|
+
/**
|
|
295
|
+
* The worker enforces its own time budget; this is the host's backstop for
|
|
296
|
+
* a worker that hangs and never reaches that check.
|
|
297
|
+
*/
|
|
298
|
+
armHostDeadline(record) {
|
|
299
|
+
const limitMs = this.host.timeBudgetMs?.(record) ?? null;
|
|
300
|
+
if (limitMs === null)
|
|
301
|
+
return;
|
|
302
|
+
const used = typeof record.usage?.elapsedMs === "number" ? record.usage.elapsedMs : 0;
|
|
303
|
+
const remaining = Math.max(0, limitMs - used) + this.hostDeadlineGraceMs;
|
|
304
|
+
const timer = setTimeout(() => {
|
|
305
|
+
this.deadlines.delete(record.executionId);
|
|
306
|
+
if (!this.running.has(record.executionId))
|
|
307
|
+
return;
|
|
308
|
+
logger.warn(`[execution] Host deadline reached: execution=${record.executionId}; stopping its executor`);
|
|
309
|
+
this.store.recordHostNotice(record.executionId, { deadlineExceeded: true, limitMs });
|
|
310
|
+
this.store.recordUsage(record.executionId, record.workerInstanceId, {
|
|
311
|
+
stopReason: `Execution time budget exhausted (${limitMs} ms); stopped by the host`,
|
|
312
|
+
});
|
|
313
|
+
this.requestStop(record.executionId, "host_deadline");
|
|
314
|
+
}, remaining);
|
|
315
|
+
timer.unref();
|
|
316
|
+
this.deadlines.set(record.executionId, timer);
|
|
317
|
+
}
|
|
318
|
+
/**
|
|
319
|
+
* A previous host may have died with executors still recorded. Prove each
|
|
320
|
+
* one stopped (or stop it) before anything else may write for it; while
|
|
321
|
+
* that cannot be proven, keep the execution blocked, tell the caller, and
|
|
322
|
+
* keep trying with backoff.
|
|
323
|
+
*/
|
|
324
|
+
recoverAfterRestart() {
|
|
325
|
+
for (const state of ["running", "cancel_requested", "waiting_input"]) {
|
|
326
|
+
for (const record of this.store.listByState(state)) {
|
|
327
|
+
if (!this.store.processOf(record.executionId))
|
|
328
|
+
continue;
|
|
329
|
+
this.blockUntilStopped(record.executionId);
|
|
330
|
+
}
|
|
331
|
+
}
|
|
332
|
+
}
|
|
333
|
+
async proveStaleExecutorStopped(executionId) {
|
|
334
|
+
this.recheckTimers.delete(executionId);
|
|
335
|
+
if (this.stopped)
|
|
336
|
+
return;
|
|
337
|
+
const executor = this.store.processOf(executionId);
|
|
338
|
+
if (!executor) {
|
|
339
|
+
// Resolved meanwhile (e.g. by the exit of this host's own executor).
|
|
340
|
+
this.unverified.delete(executionId);
|
|
341
|
+
this.requestAdmission();
|
|
342
|
+
return;
|
|
343
|
+
}
|
|
344
|
+
let stopped = false;
|
|
345
|
+
try {
|
|
346
|
+
const leaderGroup = this.groupStatus(executor.pid, executor.processStart) === "dead"
|
|
347
|
+
|| await this.killGroupAndWait(executor.pid, executor.processStart, STALE_KILL_WAIT_MS);
|
|
348
|
+
const shellGroups = await this.stopRegisteredGroups(executionId, STALE_KILL_WAIT_MS);
|
|
349
|
+
stopped = leaderGroup && shellGroups;
|
|
350
|
+
}
|
|
351
|
+
catch (error) {
|
|
352
|
+
// An unusable record (e.g. pid 0) can never be proven stopped; keep it blocked.
|
|
353
|
+
logger.warn(`[execution] Could not check executor pid=${executor.pid}: ${error instanceof Error ? error.message : String(error)}`);
|
|
354
|
+
}
|
|
355
|
+
// The scheduler may have been stopped while the kill was awaited.
|
|
356
|
+
if (this.isStopped())
|
|
357
|
+
return;
|
|
358
|
+
if (stopped) {
|
|
359
|
+
this.unverified.delete(executionId);
|
|
360
|
+
logger.system(`[execution] Previous executor confirmed stopped: execution=${executionId} pid=${executor.pid}`);
|
|
361
|
+
this.resolveStoppedExecutor(executionId, executor.workerInstanceId, "host_restart");
|
|
362
|
+
this.requestAdmission();
|
|
363
|
+
void this.deliverOutbox();
|
|
364
|
+
return;
|
|
365
|
+
}
|
|
366
|
+
const attempt = (this.unverified.get(executionId) ?? 0) + 1;
|
|
367
|
+
this.unverified.set(executionId, attempt);
|
|
368
|
+
if (attempt === 1) {
|
|
369
|
+
// Visible to the caller: the execution is blocked, not lost.
|
|
370
|
+
this.store.recordHostNotice(executionId, {
|
|
371
|
+
executorUnverified: true,
|
|
372
|
+
message: "The previous executor could not be confirmed stopped yet; retrying",
|
|
373
|
+
});
|
|
374
|
+
void this.deliverOutbox();
|
|
375
|
+
}
|
|
376
|
+
const delays = this.staleRecheckDelaysMs;
|
|
377
|
+
const delay = delays[Math.min(attempt - 1, delays.length - 1)] ?? 120_000;
|
|
378
|
+
logger.err(`[execution] Cannot confirm the previous executor stopped: execution=${executionId} pid=${executor.pid}; retrying in ${delay} ms`);
|
|
379
|
+
const timer = setTimeout(() => { void this.proveStaleExecutorStopped(executionId); }, delay);
|
|
380
|
+
timer.unref();
|
|
381
|
+
this.recheckTimers.set(executionId, timer);
|
|
382
|
+
}
|
|
383
|
+
async deliverOutbox() {
|
|
384
|
+
if (this.stopped || !this.started || this.delivering)
|
|
385
|
+
return;
|
|
386
|
+
this.delivering = true;
|
|
387
|
+
try {
|
|
388
|
+
for (const { event, caller, attempts } of this.store.dueDeliveries(50)) {
|
|
389
|
+
let delivered = false;
|
|
390
|
+
try {
|
|
391
|
+
delivered = await this.delivery.deliverExecutionEvent(event, caller);
|
|
392
|
+
}
|
|
393
|
+
catch (error) {
|
|
394
|
+
logger.warn(`[execution] Delivery of ${event.type} ${event.eventId} failed: ${error instanceof Error ? error.message : String(error)}`);
|
|
395
|
+
}
|
|
396
|
+
// The host may have stopped (and closed the ledger) while delivering.
|
|
397
|
+
if (this.isStopped())
|
|
398
|
+
return;
|
|
399
|
+
if (delivered) {
|
|
400
|
+
this.store.acknowledgeDelivery(event.eventId);
|
|
401
|
+
}
|
|
402
|
+
else {
|
|
403
|
+
const backoff = Math.min(OUTBOX_RETRY_DELAY_MS * 2 ** attempts, 10 * 60_000);
|
|
404
|
+
this.store.deferDelivery(event.eventId, new Date(Date.now() + backoff));
|
|
405
|
+
}
|
|
406
|
+
}
|
|
407
|
+
}
|
|
408
|
+
finally {
|
|
409
|
+
this.delivering = false;
|
|
410
|
+
}
|
|
411
|
+
}
|
|
412
|
+
}
|
|
413
|
+
//# sourceMappingURL=execution-scheduler.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"execution-scheduler.js","sourceRoot":"","sources":["../../src/threads/execution-scheduler.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
import { type SigningDomain } from "./execution-authority.js";
|
|
3
|
+
import { type Engine } from "../config/types.js";
|
|
4
|
+
import type { LlmRouting } from "../agent/model-provider.js";
|
|
5
|
+
/**
|
|
6
|
+
* Version 1 of the effective snapshot a trusted host freezes when it admits an
|
|
7
|
+
* internal execution (#2805 step 1b). It records only resolved decisions:
|
|
8
|
+
* the model selection and the task budget. Capabilities live in
|
|
9
|
+
* `WorkerRuntimePolicy`; credentials, the profile and conversation history
|
|
10
|
+
* never enter it.
|
|
11
|
+
*
|
|
12
|
+
* A worker starts and recovers from this snapshot instead of the editable
|
|
13
|
+
* `thread.json` or profile defaults, and a host refresh or runtime failover
|
|
14
|
+
* cannot change the engine it selected. Switching models requires a new
|
|
15
|
+
* execution attempt with a new snapshot.
|
|
16
|
+
*/
|
|
17
|
+
export declare const EXECUTION_SNAPSHOT_VERSION = 1;
|
|
18
|
+
export declare const ExecutionBudgetLimitsSchema: z.ZodObject<{
|
|
19
|
+
maxModelAttempts: z.ZodNumber;
|
|
20
|
+
maxToolCalls: z.ZodNumber;
|
|
21
|
+
maxDurationMs: z.ZodNumber;
|
|
22
|
+
}, z.core.$strict>;
|
|
23
|
+
export type ExecutionBudgetLimits = z.infer<typeof ExecutionBudgetLimitsSchema>;
|
|
24
|
+
export declare const ExecutionSnapshotV1Schema: z.ZodObject<{
|
|
25
|
+
version: z.ZodLiteral<1>;
|
|
26
|
+
executionId: z.ZodString;
|
|
27
|
+
model: z.ZodObject<{
|
|
28
|
+
engine: z.ZodEnum<{
|
|
29
|
+
claude: "claude";
|
|
30
|
+
gpt: "gpt";
|
|
31
|
+
grok: "grok";
|
|
32
|
+
deepseek: "deepseek";
|
|
33
|
+
}>;
|
|
34
|
+
runtime: z.ZodEnum<{
|
|
35
|
+
claude: "claude";
|
|
36
|
+
"pi-coding": "pi-coding";
|
|
37
|
+
}>;
|
|
38
|
+
apiProtocol: z.ZodString;
|
|
39
|
+
models: z.ZodObject<{
|
|
40
|
+
heavy: z.ZodString;
|
|
41
|
+
balanced: z.ZodString;
|
|
42
|
+
fast: z.ZodString;
|
|
43
|
+
}, z.core.$strict>;
|
|
44
|
+
pinnedModel: z.ZodOptional<z.ZodString>;
|
|
45
|
+
}, z.core.$strict>;
|
|
46
|
+
budget: z.ZodObject<{
|
|
47
|
+
maxModelAttempts: z.ZodNumber;
|
|
48
|
+
maxToolCalls: z.ZodNumber;
|
|
49
|
+
maxDurationMs: z.ZodNumber;
|
|
50
|
+
}, z.core.$strict>;
|
|
51
|
+
}, z.core.$strict>;
|
|
52
|
+
export type ExecutionSnapshot = z.infer<typeof ExecutionSnapshotV1Schema>;
|
|
53
|
+
/**
|
|
54
|
+
* Defaults pending calibration from measured runs (issue #2805 asks for
|
|
55
|
+
* per-batch and full-run measurements first). The attempt cap preserves the
|
|
56
|
+
* existing Pi per-send guard of 100 turns, now applied to the whole task;
|
|
57
|
+
* the tool and time caps are generous upper bounds on a single LabRun.
|
|
58
|
+
*/
|
|
59
|
+
export declare const DEFAULT_LAB_RUN_BUDGET: ExecutionBudgetLimits;
|
|
60
|
+
/** Parse a snapshot; an unsupported version fails explicitly instead of guessing. */
|
|
61
|
+
export declare function parseExecutionSnapshot(raw: unknown): ExecutionSnapshot;
|
|
62
|
+
/**
|
|
63
|
+
* Resolve the route a new execution is admitted on: the thread's own
|
|
64
|
+
* override, else the profile's, else the routing default. Runtime failover is
|
|
65
|
+
* deliberately ignored; it is transient health state, not an authorization.
|
|
66
|
+
*/
|
|
67
|
+
export declare function freezeExecutionModel(selection: {
|
|
68
|
+
engineOverride?: Engine;
|
|
69
|
+
pinnedModel?: string;
|
|
70
|
+
}, routing: LlmRouting | null, provider: string): ExecutionSnapshot["model"];
|
|
71
|
+
export declare const EXECUTION_SNAPSHOT_ENV = "VISIONCLAW_EXECUTION_SNAPSHOT";
|
|
72
|
+
export interface SignedExecutionSnapshot {
|
|
73
|
+
payload: string;
|
|
74
|
+
signature: string;
|
|
75
|
+
}
|
|
76
|
+
/**
|
|
77
|
+
* Sign with the admitting host's snapshot key so a worker cannot be handed an
|
|
78
|
+
* edited snapshot. The key persists with the profile, so a restarted host
|
|
79
|
+
* still verifies the snapshots it froze before the restart.
|
|
80
|
+
*/
|
|
81
|
+
export declare function signExecutionSnapshot(snapshot: ExecutionSnapshot, domain: SigningDomain): SignedExecutionSnapshot;
|
|
82
|
+
/**
|
|
83
|
+
* Read a snapshot back from the host's own ledger. The ledger is the record
|
|
84
|
+
* of what was admitted; the signature stored with it may come from an earlier
|
|
85
|
+
* host process, so it is not checked here. The host re-signs the snapshot
|
|
86
|
+
* with its current key before it hands the execution to a worker.
|
|
87
|
+
*/
|
|
88
|
+
export declare function readStoredExecutionSnapshot(raw: string, executionId: string): ExecutionSnapshot;
|
|
89
|
+
/** Verify the host signature and bind the snapshot to the expected execution. */
|
|
90
|
+
export declare function verifyExecutionSnapshot(raw: unknown, publicKey: string, executionId: string): ExecutionSnapshot;
|
|
91
|
+
//# sourceMappingURL=execution-snapshot.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"execution-snapshot.d.ts","sourceRoot":"","sources":["../../src/threads/execution-snapshot.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAA6B,KAAK,aAAa,EAAE,MAAM,0BAA0B,CAAC;AACzF,OAAO,EAAgB,KAAK,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAC/D,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,4BAA4B,CAAC;AAE7D;;;;;;;;;;;GAWG;AACH,eAAO,MAAM,0BAA0B,IAAI,CAAC;AAE5C,eAAO,MAAM,2BAA2B;;;;kBAO7B,CAAC;AAEZ,MAAM,MAAM,qBAAqB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,2BAA2B,CAAC,CAAC;AAEhF,eAAO,MAAM,yBAAyB;;;;;;;;;;;;;;;;;;;;;;;;;;;kBAiB3B,CAAC;AAEZ,MAAM,MAAM,iBAAiB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,yBAAyB,CAAC,CAAC;AAE1E;;;;;GAKG;AACH,eAAO,MAAM,sBAAsB,EAAE,qBAIpC,CAAC;AAEF,qFAAqF;AACrF,wBAAgB,sBAAsB,CAAC,GAAG,EAAE,OAAO,GAAG,iBAAiB,CAKtE;AAED;;;;GAIG;AACH,wBAAgB,oBAAoB,CAClC,SAAS,EAAE;IAAE,cAAc,CAAC,EAAE,MAAM,CAAC;IAAC,WAAW,CAAC,EAAE,MAAM,CAAA;CAAE,EAC5D,OAAO,EAAE,UAAU,GAAG,IAAI,EAC1B,QAAQ,EAAE,MAAM,GACf,iBAAiB,CAAC,OAAO,CAAC,CAmB5B;AAED,eAAO,MAAM,sBAAsB,kCAAkC,CAAC;AAEtE,MAAM,WAAW,uBAAuB;IACtC,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED;;;;GAIG;AACH,wBAAgB,qBAAqB,CAAC,QAAQ,EAAE,iBAAiB,EAAE,MAAM,EAAE,aAAa,GAAG,uBAAuB,CAGjH;AAED;;;;;GAKG;AACH,wBAAgB,2BAA2B,CAAC,GAAG,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,iBAAiB,CAgB/F;AAED,iFAAiF;AACjF,wBAAgB,uBAAuB,CAAC,GAAG,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,iBAAiB,CAkB/G"}
|