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
|
@@ -1,594 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Durable thread task store (issue #1996, PR 1). Storage only: nothing calls
|
|
3
|
-
* this yet, and current scheduling is unchanged.
|
|
4
|
-
*
|
|
5
|
-
* The tables live in the thread's existing `queue.db`, next to the message
|
|
6
|
-
* queue, so a later PR can hand a message's responsibility over in the same
|
|
7
|
-
* SQLite file. The default thread keeps the profile-root layout; other
|
|
8
|
-
* threads use their thread directory (see {@link taskStorePathForThread}).
|
|
9
|
-
*
|
|
10
|
-
* Responsibility boundary with {@link MessageQueue}: a claimed message may be
|
|
11
|
-
* marked handled only after its `user_message` event is durable here
|
|
12
|
-
* ({@link ThreadTaskStore.appendMessageEvent}). From then on the consume
|
|
13
|
-
* position, not the queue, owns the follow-up. `handled` never means a task
|
|
14
|
-
* is completed.
|
|
15
|
-
*
|
|
16
|
-
* Writer fencing mirrors the queue's claim owner: the process that owns the
|
|
17
|
-
* thread claims the writer slot at startup (worker instance id for workers),
|
|
18
|
-
* and every commit checks it inside the transaction. A replaced worker can
|
|
19
|
-
* still append events (they are facts and idempotent) but cannot commit task
|
|
20
|
-
* changes, move the consume position or record recovery deliveries.
|
|
21
|
-
*/
|
|
22
|
-
import { DatabaseSync } from "node:sqlite";
|
|
23
|
-
import { createHash, randomUUID } from "node:crypto";
|
|
24
|
-
import fs from "node:fs";
|
|
25
|
-
import path from "node:path";
|
|
26
|
-
import { getSharedProfileDir, getThreadDir } from "../config/index.js";
|
|
27
|
-
import { DEFAULT_THREAD_ID } from "../channels/interface.js";
|
|
28
|
-
import { getMessageDedupKey } from "../channels/message-dedup.js";
|
|
29
|
-
import { sanitizeJsonValue } from "../utils/json-sanitize.js";
|
|
30
|
-
import { OPEN_TASK_STATUSES, TASK_STATUSES, canTransition, isTaskEventKind, isTaskStatus, validateTaskState, } from "./task-contracts.js";
|
|
31
|
-
/**
|
|
32
|
-
* Whether a thread has work for a worker (PR 5), read without opening a
|
|
33
|
-
* store or claiming its writer: the supervisor asks this about threads whose
|
|
34
|
-
* worker is not running. Work is a task that may start now, or any event
|
|
35
|
-
* the sidecar has not folded yet: the queue claim was released at wake end,
|
|
36
|
-
* so if the process stopped before the fold, the event log is the only
|
|
37
|
-
* trace of a new request or of progress on a delivered task.
|
|
38
|
-
* False when the file or the table does not exist yet.
|
|
39
|
-
*/
|
|
40
|
-
export function threadHasRunnableTasks(dbPath, threadId, now = Date.now()) {
|
|
41
|
-
if (!fs.existsSync(dbPath))
|
|
42
|
-
return false;
|
|
43
|
-
let db;
|
|
44
|
-
try {
|
|
45
|
-
db = new DatabaseSync(dbPath, { readOnly: true });
|
|
46
|
-
db.exec("PRAGMA busy_timeout = 2000");
|
|
47
|
-
// A task whose resume at this version was already delivered is not new
|
|
48
|
-
// work: its worker ran it (or dropped it as stale). Counting it would
|
|
49
|
-
// respawn an idle worker for nothing after every idle exit.
|
|
50
|
-
const row = db.prepare(`SELECT 1 AS found FROM thread_tasks t
|
|
51
|
-
WHERE t.thread_id = ? AND t.status IN ('in_progress', 'pending') AND (t.run_after IS NULL OR t.run_after <= ?)
|
|
52
|
-
AND NOT EXISTS (SELECT 1 FROM task_recovery_deliveries d
|
|
53
|
-
WHERE d.thread_id = t.thread_id AND d.task_id = t.id AND d.task_version = t.version AND d.status = 'delivered')
|
|
54
|
-
LIMIT 1`).get(threadId, now);
|
|
55
|
-
if (row !== undefined)
|
|
56
|
-
return true;
|
|
57
|
-
// Any unconsumed event but a recovery marker: an execution event can be
|
|
58
|
-
// the only durable trace of progress on a delivered task. A fold consumes
|
|
59
|
-
// every kind in its batch (the position advances to its last seq), so
|
|
60
|
-
// once a worker runs and folds, this stops being true and no worker
|
|
61
|
-
// respawns. Recovery markers are left out: delivering a resume writes one,
|
|
62
|
-
// it is not progress, and the resume's queue row already carries the work.
|
|
63
|
-
// TODO: while the sidecar keeps failing, events stay unconsumed and the
|
|
64
|
-
// supervisor restarts the worker after each idle exit.
|
|
65
|
-
const unfolded = db.prepare(`SELECT 1 AS found FROM task_events e
|
|
66
|
-
WHERE e.thread_id = ? AND e.kind <> 'recovery'
|
|
67
|
-
AND e.seq > COALESCE((SELECT position FROM task_consume_position p WHERE p.thread_id = e.thread_id), 0)
|
|
68
|
-
LIMIT 1`).get(threadId);
|
|
69
|
-
return unfolded !== undefined;
|
|
70
|
-
}
|
|
71
|
-
catch {
|
|
72
|
-
return false;
|
|
73
|
-
}
|
|
74
|
-
finally {
|
|
75
|
-
db?.close();
|
|
76
|
-
}
|
|
77
|
-
}
|
|
78
|
-
/** `queue.db` of a logical thread, independent of which process asks. */
|
|
79
|
-
export function taskStorePathForThread(threadId) {
|
|
80
|
-
return threadId === DEFAULT_THREAD_ID
|
|
81
|
-
? path.join(getSharedProfileDir(), "queue.db")
|
|
82
|
-
: path.join(getThreadDir(threadId), "queue.db");
|
|
83
|
-
}
|
|
84
|
-
/** Event idempotency key for an owner message: its queue dedup key. */
|
|
85
|
-
export function messageEventKey(dedupKey) {
|
|
86
|
-
return `message:${dedupKey}`;
|
|
87
|
-
}
|
|
88
|
-
/** Identity of one scheduled resume of a task at a given version (PR 5). */
|
|
89
|
-
export function recoveryDeliveryKey(taskId, taskVersion) {
|
|
90
|
-
return `recovery:${taskId}:v${taskVersion}`;
|
|
91
|
-
}
|
|
92
|
-
class CommitRejected extends Error {
|
|
93
|
-
reason;
|
|
94
|
-
detail;
|
|
95
|
-
constructor(reason, detail) {
|
|
96
|
-
super(`${reason}: ${detail}`);
|
|
97
|
-
this.reason = reason;
|
|
98
|
-
this.detail = detail;
|
|
99
|
-
}
|
|
100
|
-
}
|
|
101
|
-
const STATUS_CHECK = TASK_STATUSES.map((status) => `'${status}'`).join(", ");
|
|
102
|
-
function json(value) {
|
|
103
|
-
return JSON.stringify(sanitizeJsonValue(value));
|
|
104
|
-
}
|
|
105
|
-
function jsonOrNull(value) {
|
|
106
|
-
return value === undefined || value === null ? null : json(value);
|
|
107
|
-
}
|
|
108
|
-
function parseOptional(raw) {
|
|
109
|
-
return raw === null ? undefined : JSON.parse(raw);
|
|
110
|
-
}
|
|
111
|
-
/** Directory name, next to queue.db, holding attachment bytes that arrived inline. */
|
|
112
|
-
export const TASK_ATTACHMENTS_DIR = "task-attachments";
|
|
113
|
-
/**
|
|
114
|
-
* Last path segment with separators and dot-only names removed, so a
|
|
115
|
-
* provider-supplied filename can never leave the attachments directory.
|
|
116
|
-
*/
|
|
117
|
-
function safeFilename(name, fallback) {
|
|
118
|
-
const base = (name ?? "").split(/[\\/]/).pop() ?? "";
|
|
119
|
-
// eslint-disable-next-line no-control-regex
|
|
120
|
-
const cleaned = base.replace(/[\x00-\x1f]/g, "").replace(/^\.+/, "").slice(0, 120);
|
|
121
|
-
return cleaned.length > 0 ? cleaned : fallback;
|
|
122
|
-
}
|
|
123
|
-
export class ThreadTaskStore {
|
|
124
|
-
threadId;
|
|
125
|
-
writerId;
|
|
126
|
-
db;
|
|
127
|
-
attachmentsDir;
|
|
128
|
-
closed = false;
|
|
129
|
-
constructor(options) {
|
|
130
|
-
this.threadId = options.threadId;
|
|
131
|
-
this.writerId = options.writerId;
|
|
132
|
-
const dbPath = options.dbPath ?? taskStorePathForThread(options.threadId);
|
|
133
|
-
this.attachmentsDir = path.join(path.dirname(dbPath), TASK_ATTACHMENTS_DIR);
|
|
134
|
-
this.db = new DatabaseSync(dbPath);
|
|
135
|
-
this.db.exec("PRAGMA journal_mode = WAL");
|
|
136
|
-
this.db.exec("PRAGMA busy_timeout = 5000");
|
|
137
|
-
this.migrate();
|
|
138
|
-
if (options.claimWriter)
|
|
139
|
-
this.claimWriter();
|
|
140
|
-
}
|
|
141
|
-
/** Additive, idempotent schema. Safe on a queue.db written by any earlier release. */
|
|
142
|
-
migrate() {
|
|
143
|
-
this.db.exec(`
|
|
144
|
-
CREATE TABLE IF NOT EXISTS task_events (
|
|
145
|
-
seq INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
146
|
-
id TEXT NOT NULL UNIQUE,
|
|
147
|
-
thread_id TEXT NOT NULL,
|
|
148
|
-
idempotency_key TEXT NOT NULL,
|
|
149
|
-
kind TEXT NOT NULL,
|
|
150
|
-
source TEXT,
|
|
151
|
-
reply_target TEXT,
|
|
152
|
-
payload TEXT NOT NULL,
|
|
153
|
-
writer_id TEXT NOT NULL,
|
|
154
|
-
created_at INTEGER NOT NULL,
|
|
155
|
-
UNIQUE (thread_id, idempotency_key)
|
|
156
|
-
);
|
|
157
|
-
CREATE TABLE IF NOT EXISTS thread_tasks (
|
|
158
|
-
id TEXT PRIMARY KEY,
|
|
159
|
-
thread_id TEXT NOT NULL,
|
|
160
|
-
origin_key TEXT NOT NULL,
|
|
161
|
-
status TEXT NOT NULL CHECK (status IN (${STATUS_CHECK})),
|
|
162
|
-
version INTEGER NOT NULL,
|
|
163
|
-
title TEXT NOT NULL,
|
|
164
|
-
description TEXT NOT NULL DEFAULT '',
|
|
165
|
-
requirements TEXT NOT NULL DEFAULT '[]',
|
|
166
|
-
source_event_ids TEXT NOT NULL DEFAULT '[]',
|
|
167
|
-
reply_target TEXT,
|
|
168
|
-
notify_when TEXT,
|
|
169
|
-
run_after INTEGER,
|
|
170
|
-
resume_condition TEXT,
|
|
171
|
-
result TEXT,
|
|
172
|
-
checkpoint TEXT,
|
|
173
|
-
created_at INTEGER NOT NULL,
|
|
174
|
-
updated_at INTEGER NOT NULL,
|
|
175
|
-
last_event_seq INTEGER NOT NULL DEFAULT 0,
|
|
176
|
-
UNIQUE (thread_id, origin_key)
|
|
177
|
-
);
|
|
178
|
-
CREATE INDEX IF NOT EXISTS thread_tasks_status ON thread_tasks (thread_id, status);
|
|
179
|
-
CREATE TABLE IF NOT EXISTS task_consume_position (
|
|
180
|
-
thread_id TEXT PRIMARY KEY,
|
|
181
|
-
position INTEGER NOT NULL,
|
|
182
|
-
updated_at INTEGER NOT NULL
|
|
183
|
-
);
|
|
184
|
-
CREATE TABLE IF NOT EXISTS task_writer (
|
|
185
|
-
thread_id TEXT PRIMARY KEY,
|
|
186
|
-
writer_id TEXT NOT NULL,
|
|
187
|
-
generation INTEGER NOT NULL,
|
|
188
|
-
claimed_at INTEGER NOT NULL
|
|
189
|
-
);
|
|
190
|
-
CREATE TABLE IF NOT EXISTS task_recovery_deliveries (
|
|
191
|
-
idempotency_key TEXT PRIMARY KEY,
|
|
192
|
-
thread_id TEXT NOT NULL,
|
|
193
|
-
task_id TEXT NOT NULL,
|
|
194
|
-
task_version INTEGER NOT NULL,
|
|
195
|
-
status TEXT NOT NULL CHECK (status IN ('reserved', 'delivered')),
|
|
196
|
-
reserved_at INTEGER NOT NULL,
|
|
197
|
-
delivered_at INTEGER,
|
|
198
|
-
writer_id TEXT NOT NULL
|
|
199
|
-
);
|
|
200
|
-
`);
|
|
201
|
-
}
|
|
202
|
-
// --- writer fencing -------------------------------------------------------
|
|
203
|
-
/** Take the writer slot. Returns the new generation. Last claimer wins. */
|
|
204
|
-
claimWriter() {
|
|
205
|
-
return this.transaction(() => {
|
|
206
|
-
const row = this.db.prepare("SELECT generation FROM task_writer WHERE thread_id = ?")
|
|
207
|
-
.get(this.threadId);
|
|
208
|
-
const generation = (row?.generation ?? 0) + 1;
|
|
209
|
-
this.db.prepare(`INSERT INTO task_writer (thread_id, writer_id, generation, claimed_at) VALUES (?, ?, ?, ?)
|
|
210
|
-
ON CONFLICT(thread_id) DO UPDATE SET writer_id = excluded.writer_id,
|
|
211
|
-
generation = excluded.generation, claimed_at = excluded.claimed_at`).run(this.threadId, this.writerId, generation, Date.now());
|
|
212
|
-
return generation;
|
|
213
|
-
});
|
|
214
|
-
}
|
|
215
|
-
isCurrentWriter() {
|
|
216
|
-
return this.currentWriter() === this.writerId;
|
|
217
|
-
}
|
|
218
|
-
currentWriter() {
|
|
219
|
-
const row = this.db.prepare("SELECT writer_id FROM task_writer WHERE thread_id = ?")
|
|
220
|
-
.get(this.threadId);
|
|
221
|
-
return row?.writer_id;
|
|
222
|
-
}
|
|
223
|
-
/** Must run inside a transaction so the check and the write are atomic. */
|
|
224
|
-
assertWriter() {
|
|
225
|
-
const current = this.currentWriter();
|
|
226
|
-
if (current !== this.writerId) {
|
|
227
|
-
throw new CommitRejected("stale_writer", current ? `thread is owned by ${current}` : "no writer has claimed this thread");
|
|
228
|
-
}
|
|
229
|
-
}
|
|
230
|
-
// --- events ---------------------------------------------------------------
|
|
231
|
-
/**
|
|
232
|
-
* Append an event. Re-appending an idempotency key returns the stored event
|
|
233
|
-
* with `appended: false` and changes nothing, so redelivery is harmless.
|
|
234
|
-
*/
|
|
235
|
-
appendEvent(input) {
|
|
236
|
-
if (!isTaskEventKind(input.kind))
|
|
237
|
-
throw new Error(`Unknown task event kind: ${String(input.kind)}`);
|
|
238
|
-
const result = this.db.prepare(`INSERT OR IGNORE INTO task_events
|
|
239
|
-
(id, thread_id, idempotency_key, kind, source, reply_target, payload, writer_id, created_at)
|
|
240
|
-
VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)`).run(randomUUID(), this.threadId, input.idempotencyKey, input.kind, jsonOrNull(input.source), jsonOrNull(input.replyTarget), json(input.payload), this.writerId, Date.now());
|
|
241
|
-
const event = this.getEventByKey(input.idempotencyKey);
|
|
242
|
-
if (!event)
|
|
243
|
-
throw new Error(`Task event ${input.idempotencyKey} vanished after insert`);
|
|
244
|
-
return { event, appended: result.changes > 0 };
|
|
245
|
-
}
|
|
246
|
-
/**
|
|
247
|
-
* Persist an owner message as a `user_message` event, keyed by its queue
|
|
248
|
-
* dedup key. This is the handoff point: once it returns, the queue may mark
|
|
249
|
-
* the message handled, and the queue row (with any inline bytes) is gone.
|
|
250
|
-
*
|
|
251
|
-
* Mail channels keep attachments up to 10 MB only as base64, so those bytes
|
|
252
|
-
* are written to `task-attachments/` next to queue.db first and the event
|
|
253
|
-
* stores a `localPath`. The file is written before the event row: a crash in
|
|
254
|
-
* between leaves an orphan file, never an event pointing at nothing.
|
|
255
|
-
*/
|
|
256
|
-
appendMessageEvent(msg) {
|
|
257
|
-
const dedupKey = getMessageDedupKey(msg);
|
|
258
|
-
const source = {
|
|
259
|
-
channel: msg.channel,
|
|
260
|
-
sender: msg.sender,
|
|
261
|
-
messageId: msg.id,
|
|
262
|
-
dedupKey,
|
|
263
|
-
...(msg.app ? { app: msg.app } : {}),
|
|
264
|
-
};
|
|
265
|
-
const idempotencyKey = messageEventKey(dedupKey);
|
|
266
|
-
// A message is recorded at several points (interrupt, registration, wake
|
|
267
|
-
// end); decode and write its attachments only the first time.
|
|
268
|
-
const existing = this.getEventByKey(idempotencyKey);
|
|
269
|
-
if (existing)
|
|
270
|
-
return { event: existing, appended: false };
|
|
271
|
-
const attachments = msg.attachments.map((attachment, index) => this.persistAttachment(idempotencyKey, index, attachment));
|
|
272
|
-
return this.appendEvent({
|
|
273
|
-
idempotencyKey,
|
|
274
|
-
kind: "user_message",
|
|
275
|
-
source,
|
|
276
|
-
...(msg.deliveryTarget ? { replyTarget: msg.deliveryTarget } : {}),
|
|
277
|
-
payload: { text: msg.text, ...(attachments.length > 0 ? { attachments } : {}), data: { timestamp: msg.timestamp } },
|
|
278
|
-
});
|
|
279
|
-
}
|
|
280
|
-
/**
|
|
281
|
-
* Turn an attachment into a stable reference. One that already has a
|
|
282
|
-
* `localPath` or `url` is kept as is; inline-only bytes are written to a
|
|
283
|
-
* path derived from (event key, index), once: a redelivered message finds
|
|
284
|
-
* its event and writes nothing.
|
|
285
|
-
*/
|
|
286
|
-
persistAttachment(eventKey, index, attachment) {
|
|
287
|
-
const { base64, ...ref } = attachment;
|
|
288
|
-
if (ref.localPath || ref.url || !base64)
|
|
289
|
-
return ref;
|
|
290
|
-
const eventDir = createHash("sha256").update(`${this.threadId}\0${eventKey}`).digest("hex").slice(0, 32);
|
|
291
|
-
const dir = path.join(this.attachmentsDir, eventDir);
|
|
292
|
-
const localPath = path.join(dir, `${index}-${safeFilename(ref.filename, "attachment")}`);
|
|
293
|
-
fs.mkdirSync(dir, { recursive: true });
|
|
294
|
-
// TODO: retention. These files live as long as the thread directory;
|
|
295
|
-
// prune them with completed/cancelled tasks once that lifecycle exists.
|
|
296
|
-
fs.writeFileSync(localPath, Buffer.from(base64, "base64"));
|
|
297
|
-
return { ...ref, localPath };
|
|
298
|
-
}
|
|
299
|
-
hasEvent(idempotencyKey) {
|
|
300
|
-
return this.getEventByKey(idempotencyKey) !== undefined;
|
|
301
|
-
}
|
|
302
|
-
getEventByKey(idempotencyKey) {
|
|
303
|
-
const row = this.db.prepare("SELECT * FROM task_events WHERE thread_id = ? AND idempotency_key = ?")
|
|
304
|
-
.get(this.threadId, idempotencyKey);
|
|
305
|
-
return row ? this.rowToEvent(row) : undefined;
|
|
306
|
-
}
|
|
307
|
-
/** Events with `seq > afterSeq`, oldest first. */
|
|
308
|
-
readEventsAfter(afterSeq, limit = 100) {
|
|
309
|
-
const rows = this.db.prepare("SELECT * FROM task_events WHERE thread_id = ? AND seq > ? ORDER BY seq ASC LIMIT ?").all(this.threadId, afterSeq, limit);
|
|
310
|
-
return rows.map((row) => this.rowToEvent(row));
|
|
311
|
-
}
|
|
312
|
-
/** The newest `limit` events with `seq > afterSeq`, oldest first. */
|
|
313
|
-
readLatestEventsAfter(afterSeq, limit) {
|
|
314
|
-
const rows = this.db.prepare("SELECT * FROM task_events WHERE thread_id = ? AND seq > ? ORDER BY seq DESC LIMIT ?").all(this.threadId, afterSeq, limit);
|
|
315
|
-
return rows.reverse().map((row) => this.rowToEvent(row));
|
|
316
|
-
}
|
|
317
|
-
/** Events the sidecar has not committed against yet. */
|
|
318
|
-
readUnconsumedEvents(limit = 100) {
|
|
319
|
-
return this.readEventsAfter(this.getPosition(), limit);
|
|
320
|
-
}
|
|
321
|
-
latestSeq() {
|
|
322
|
-
const row = this.db.prepare("SELECT MAX(seq) AS seq FROM task_events WHERE thread_id = ?")
|
|
323
|
-
.get(this.threadId);
|
|
324
|
-
return row.seq ?? 0;
|
|
325
|
-
}
|
|
326
|
-
getPosition() {
|
|
327
|
-
const row = this.db.prepare("SELECT position FROM task_consume_position WHERE thread_id = ?")
|
|
328
|
-
.get(this.threadId);
|
|
329
|
-
return row?.position ?? 0;
|
|
330
|
-
}
|
|
331
|
-
// --- tasks ----------------------------------------------------------------
|
|
332
|
-
getTask(taskId) {
|
|
333
|
-
const row = this.db.prepare("SELECT * FROM thread_tasks WHERE thread_id = ? AND id = ?")
|
|
334
|
-
.get(this.threadId, taskId);
|
|
335
|
-
return row ? this.rowToTask(row) : undefined;
|
|
336
|
-
}
|
|
337
|
-
getTaskByOrigin(originKey) {
|
|
338
|
-
const row = this.db.prepare("SELECT * FROM thread_tasks WHERE thread_id = ? AND origin_key = ?")
|
|
339
|
-
.get(this.threadId, originKey);
|
|
340
|
-
return row ? this.rowToTask(row) : undefined;
|
|
341
|
-
}
|
|
342
|
-
/** Tasks in creation order, optionally filtered by status. */
|
|
343
|
-
listTasks(statuses = TASK_STATUSES) {
|
|
344
|
-
if (statuses.length === 0)
|
|
345
|
-
return [];
|
|
346
|
-
const placeholders = statuses.map(() => "?").join(", ");
|
|
347
|
-
const rows = this.db.prepare(`SELECT * FROM thread_tasks WHERE thread_id = ? AND status IN (${placeholders}) ORDER BY created_at ASC, rowid ASC`).all(this.threadId, ...statuses);
|
|
348
|
-
return rows.map((row) => this.rowToTask(row));
|
|
349
|
-
}
|
|
350
|
-
listOpenTasks() {
|
|
351
|
-
return this.listTasks(OPEN_TASK_STATUSES);
|
|
352
|
-
}
|
|
353
|
-
/**
|
|
354
|
-
* Tasks that may continue or start without the owner (PR 5): unfinished
|
|
355
|
-
* `in_progress` ones first (a wake ended without finishing them; `finish`
|
|
356
|
-
* never completes a task), then `pending` and due. A resume pass runs only
|
|
357
|
-
* when no wake is running, so an `in_progress` task here is not being
|
|
358
|
-
* worked on. Waiting, blocked and terminal tasks never start on their own.
|
|
359
|
-
*/
|
|
360
|
-
listRunnableTasks(now) {
|
|
361
|
-
const rows = this.db.prepare(`SELECT * FROM thread_tasks
|
|
362
|
-
WHERE thread_id = ? AND status IN ('in_progress', 'pending') AND (run_after IS NULL OR run_after <= ?)
|
|
363
|
-
ORDER BY CASE status WHEN 'in_progress' THEN 0 ELSE 1 END, created_at ASC, rowid ASC`).all(this.threadId, now);
|
|
364
|
-
return rows.map((row) => this.rowToTask(row));
|
|
365
|
-
}
|
|
366
|
-
/**
|
|
367
|
-
* Apply one sidecar result atomically: every change plus the new consume
|
|
368
|
-
* position, or nothing. Rejections leave the database untouched; the
|
|
369
|
-
* caller re-reads and retries. Replaying an already-applied create is a
|
|
370
|
-
* no-op reported as `existed: true`.
|
|
371
|
-
*/
|
|
372
|
-
commit(commit) {
|
|
373
|
-
try {
|
|
374
|
-
return this.transaction(() => {
|
|
375
|
-
this.assertWriter();
|
|
376
|
-
const position = this.getPosition();
|
|
377
|
-
if (position !== commit.expectedPosition) {
|
|
378
|
-
throw new CommitRejected("position_conflict", `expected position ${commit.expectedPosition}, found ${position}`);
|
|
379
|
-
}
|
|
380
|
-
const latest = this.latestSeq();
|
|
381
|
-
if (!Number.isInteger(commit.throughSeq) || commit.throughSeq < position || commit.throughSeq > latest) {
|
|
382
|
-
throw new CommitRejected("invalid_change", `throughSeq ${commit.throughSeq} outside [${position}, ${latest}]`);
|
|
383
|
-
}
|
|
384
|
-
const now = Date.now();
|
|
385
|
-
const created = [];
|
|
386
|
-
const updated = [];
|
|
387
|
-
for (const change of commit.changes) {
|
|
388
|
-
if (change.op === "create") {
|
|
389
|
-
created.push(this.applyCreate(change, commit.throughSeq, now));
|
|
390
|
-
}
|
|
391
|
-
else {
|
|
392
|
-
updated.push(this.applyUpdate(change, commit.throughSeq, now));
|
|
393
|
-
}
|
|
394
|
-
}
|
|
395
|
-
this.db.prepare(`INSERT INTO task_consume_position (thread_id, position, updated_at) VALUES (?, ?, ?)
|
|
396
|
-
ON CONFLICT(thread_id) DO UPDATE SET position = excluded.position, updated_at = excluded.updated_at`).run(this.threadId, commit.throughSeq, now);
|
|
397
|
-
return { ok: true, position: commit.throughSeq, created, updated };
|
|
398
|
-
});
|
|
399
|
-
}
|
|
400
|
-
catch (error) {
|
|
401
|
-
if (error instanceof CommitRejected)
|
|
402
|
-
return { ok: false, reason: error.reason, detail: error.detail };
|
|
403
|
-
throw error;
|
|
404
|
-
}
|
|
405
|
-
}
|
|
406
|
-
applyCreate(change, throughSeq, now) {
|
|
407
|
-
const existing = this.getTaskByOrigin(change.originKey);
|
|
408
|
-
if (existing)
|
|
409
|
-
return { originKey: change.originKey, taskId: existing.id, existed: true };
|
|
410
|
-
const task = change.task;
|
|
411
|
-
const status = task.status ?? "pending";
|
|
412
|
-
const invalid = validateTaskState({ status, title: task.title, result: task.result, resumeCondition: task.resumeCondition });
|
|
413
|
-
if (invalid)
|
|
414
|
-
throw new CommitRejected("invalid_change", `create ${change.originKey}: ${invalid}`);
|
|
415
|
-
const id = randomUUID();
|
|
416
|
-
this.db.prepare(`INSERT INTO thread_tasks
|
|
417
|
-
(id, thread_id, origin_key, status, version, title, description, requirements, source_event_ids,
|
|
418
|
-
reply_target, notify_when, run_after, resume_condition, result, checkpoint, created_at, updated_at, last_event_seq)
|
|
419
|
-
VALUES (?, ?, ?, ?, 1, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)`).run(id, this.threadId, change.originKey, status, task.title, task.description ?? "", json(task.requirements ?? []), json(task.sourceEventIds ?? []), jsonOrNull(task.replyTarget), task.notifyWhen ?? null, task.runAfter ?? null, task.resumeCondition ?? null, jsonOrNull(task.result), jsonOrNull(task.checkpoint), now, now, throughSeq);
|
|
420
|
-
return { originKey: change.originKey, taskId: id, existed: false };
|
|
421
|
-
}
|
|
422
|
-
applyUpdate(change, throughSeq, now) {
|
|
423
|
-
const current = this.getTask(change.taskId);
|
|
424
|
-
if (!current)
|
|
425
|
-
throw new CommitRejected("unknown_task", change.taskId);
|
|
426
|
-
if (current.version !== change.expectedVersion) {
|
|
427
|
-
throw new CommitRejected("version_conflict", `task ${change.taskId} is at version ${current.version}, change expected ${change.expectedVersion}`);
|
|
428
|
-
}
|
|
429
|
-
const next = applyPatch(current, change.patch);
|
|
430
|
-
if (!canTransition(current.status, next.status)) {
|
|
431
|
-
throw new CommitRejected("invalid_change", `task ${change.taskId}: ${current.status} -> ${next.status} is not allowed`);
|
|
432
|
-
}
|
|
433
|
-
const invalid = validateTaskState(next);
|
|
434
|
-
if (invalid)
|
|
435
|
-
throw new CommitRejected("invalid_change", `task ${change.taskId}: ${invalid}`);
|
|
436
|
-
const version = current.version + 1;
|
|
437
|
-
this.db.prepare(`UPDATE thread_tasks SET status = ?, version = ?, title = ?, description = ?, requirements = ?,
|
|
438
|
-
source_event_ids = ?, reply_target = ?, notify_when = ?, run_after = ?, resume_condition = ?,
|
|
439
|
-
result = ?, checkpoint = ?, updated_at = ?, last_event_seq = ?
|
|
440
|
-
WHERE thread_id = ? AND id = ? AND version = ?`).run(next.status, version, next.title, next.description, json(next.requirements), json(next.sourceEventIds), jsonOrNull(next.replyTarget), next.notifyWhen ?? null, next.runAfter ?? null, next.resumeCondition ?? null, jsonOrNull(next.result), jsonOrNull(next.checkpoint), now, throughSeq, this.threadId, change.taskId, current.version);
|
|
441
|
-
return { taskId: change.taskId, version };
|
|
442
|
-
}
|
|
443
|
-
// --- recovery delivery records (consumed by PR 5) -------------------------
|
|
444
|
-
/**
|
|
445
|
-
* Reserve a resume of a task before handing it to the queue. Returns
|
|
446
|
-
* `reserved: false` with the existing record when the key was already
|
|
447
|
-
* used, so a retried or duplicated scheduling pass delivers at most once.
|
|
448
|
-
*/
|
|
449
|
-
reserveRecoveryDelivery(input) {
|
|
450
|
-
const key = recoveryDeliveryKey(input.taskId, input.taskVersion);
|
|
451
|
-
return this.fenced(() => {
|
|
452
|
-
const result = this.db.prepare(`INSERT OR IGNORE INTO task_recovery_deliveries
|
|
453
|
-
(idempotency_key, thread_id, task_id, task_version, status, reserved_at, writer_id)
|
|
454
|
-
VALUES (?, ?, ?, ?, 'reserved', ?, ?)`).run(key, this.threadId, input.taskId, input.taskVersion, Date.now(), this.writerId);
|
|
455
|
-
const record = this.getRecoveryDelivery(key);
|
|
456
|
-
if (!record)
|
|
457
|
-
throw new Error(`Recovery delivery ${key} vanished after insert`);
|
|
458
|
-
return { reserved: result.changes > 0, record };
|
|
459
|
-
});
|
|
460
|
-
}
|
|
461
|
-
/** Record that the reserved resume reached the queue. Idempotent. */
|
|
462
|
-
markRecoveryDelivered(idempotencyKey) {
|
|
463
|
-
return this.fenced(() => this.db.prepare(`UPDATE task_recovery_deliveries SET status = 'delivered', delivered_at = ?
|
|
464
|
-
WHERE thread_id = ? AND idempotency_key = ? AND status = 'reserved'`).run(Date.now(), this.threadId, idempotencyKey).changes > 0);
|
|
465
|
-
}
|
|
466
|
-
getRecoveryDelivery(idempotencyKey) {
|
|
467
|
-
const row = this.db.prepare("SELECT * FROM task_recovery_deliveries WHERE thread_id = ? AND idempotency_key = ?")
|
|
468
|
-
.get(this.threadId, idempotencyKey);
|
|
469
|
-
return row ? rowToDelivery(row) : undefined;
|
|
470
|
-
}
|
|
471
|
-
/** Reservations that never reached the queue, e.g. after a crash in between. */
|
|
472
|
-
listUndeliveredRecoveries() {
|
|
473
|
-
const rows = this.db.prepare("SELECT * FROM task_recovery_deliveries WHERE thread_id = ? AND status = 'reserved' ORDER BY reserved_at ASC").all(this.threadId);
|
|
474
|
-
return rows.map(rowToDelivery);
|
|
475
|
-
}
|
|
476
|
-
// --- plumbing -------------------------------------------------------------
|
|
477
|
-
fenced(fn) {
|
|
478
|
-
try {
|
|
479
|
-
return { ok: true, value: this.transaction(() => {
|
|
480
|
-
this.assertWriter();
|
|
481
|
-
return fn();
|
|
482
|
-
}) };
|
|
483
|
-
}
|
|
484
|
-
catch (error) {
|
|
485
|
-
if (error instanceof CommitRejected)
|
|
486
|
-
return { ok: false, reason: "stale_writer", detail: error.detail };
|
|
487
|
-
throw error;
|
|
488
|
-
}
|
|
489
|
-
}
|
|
490
|
-
transaction(fn) {
|
|
491
|
-
this.db.exec("BEGIN IMMEDIATE");
|
|
492
|
-
try {
|
|
493
|
-
const value = fn();
|
|
494
|
-
this.db.exec("COMMIT");
|
|
495
|
-
return value;
|
|
496
|
-
}
|
|
497
|
-
catch (error) {
|
|
498
|
-
this.db.exec("ROLLBACK");
|
|
499
|
-
throw error;
|
|
500
|
-
}
|
|
501
|
-
}
|
|
502
|
-
rowToEvent(row) {
|
|
503
|
-
if (!isTaskEventKind(row.kind))
|
|
504
|
-
throw new Error(`Stored task event ${row.id} has unknown kind ${row.kind}`);
|
|
505
|
-
const source = parseOptional(row.source);
|
|
506
|
-
const replyTarget = parseOptional(row.reply_target);
|
|
507
|
-
return {
|
|
508
|
-
seq: row.seq,
|
|
509
|
-
id: row.id,
|
|
510
|
-
threadId: row.thread_id,
|
|
511
|
-
idempotencyKey: row.idempotency_key,
|
|
512
|
-
kind: row.kind,
|
|
513
|
-
...(source ? { source } : {}),
|
|
514
|
-
...(replyTarget ? { replyTarget } : {}),
|
|
515
|
-
payload: JSON.parse(row.payload),
|
|
516
|
-
writerId: row.writer_id,
|
|
517
|
-
createdAt: row.created_at,
|
|
518
|
-
};
|
|
519
|
-
}
|
|
520
|
-
rowToTask(row) {
|
|
521
|
-
if (!isTaskStatus(row.status))
|
|
522
|
-
throw new Error(`Stored task ${row.id} has unknown status ${row.status}`);
|
|
523
|
-
const replyTarget = parseOptional(row.reply_target);
|
|
524
|
-
const result = parseOptional(row.result);
|
|
525
|
-
const checkpoint = parseOptional(row.checkpoint);
|
|
526
|
-
return {
|
|
527
|
-
id: row.id,
|
|
528
|
-
threadId: row.thread_id,
|
|
529
|
-
originKey: row.origin_key,
|
|
530
|
-
status: row.status,
|
|
531
|
-
version: row.version,
|
|
532
|
-
title: row.title,
|
|
533
|
-
description: row.description,
|
|
534
|
-
requirements: JSON.parse(row.requirements),
|
|
535
|
-
sourceEventIds: JSON.parse(row.source_event_ids),
|
|
536
|
-
...(replyTarget ? { replyTarget } : {}),
|
|
537
|
-
...(row.notify_when !== null ? { notifyWhen: row.notify_when } : {}),
|
|
538
|
-
...(row.run_after !== null ? { runAfter: row.run_after } : {}),
|
|
539
|
-
...(row.resume_condition !== null ? { resumeCondition: row.resume_condition } : {}),
|
|
540
|
-
...(result ? { result } : {}),
|
|
541
|
-
...(checkpoint ? { checkpoint } : {}),
|
|
542
|
-
createdAt: row.created_at,
|
|
543
|
-
updatedAt: row.updated_at,
|
|
544
|
-
lastEventSeq: row.last_event_seq,
|
|
545
|
-
};
|
|
546
|
-
}
|
|
547
|
-
close() {
|
|
548
|
-
if (this.closed)
|
|
549
|
-
return;
|
|
550
|
-
this.closed = true;
|
|
551
|
-
this.db.close();
|
|
552
|
-
}
|
|
553
|
-
}
|
|
554
|
-
function rowToDelivery(row) {
|
|
555
|
-
return {
|
|
556
|
-
idempotencyKey: row.idempotency_key,
|
|
557
|
-
threadId: row.thread_id,
|
|
558
|
-
taskId: row.task_id,
|
|
559
|
-
taskVersion: row.task_version,
|
|
560
|
-
status: row.status,
|
|
561
|
-
reservedAt: row.reserved_at,
|
|
562
|
-
...(row.delivered_at !== null ? { deliveredAt: row.delivered_at } : {}),
|
|
563
|
-
writerId: row.writer_id,
|
|
564
|
-
};
|
|
565
|
-
}
|
|
566
|
-
/** Merge a patch onto a task. `null` clears; `undefined` keeps. */
|
|
567
|
-
function applyPatch(task, patch) {
|
|
568
|
-
const next = { ...task };
|
|
569
|
-
if (patch.title !== undefined)
|
|
570
|
-
next.title = patch.title;
|
|
571
|
-
if (patch.description !== undefined)
|
|
572
|
-
next.description = patch.description;
|
|
573
|
-
if (patch.requirements !== undefined)
|
|
574
|
-
next.requirements = patch.requirements;
|
|
575
|
-
if (patch.status !== undefined)
|
|
576
|
-
next.status = patch.status;
|
|
577
|
-
if (patch.addSourceEventIds !== undefined) {
|
|
578
|
-
next.sourceEventIds = [...new Set([...task.sourceEventIds, ...patch.addSourceEventIds])];
|
|
579
|
-
}
|
|
580
|
-
if (patch.replyTarget !== undefined)
|
|
581
|
-
next.replyTarget = patch.replyTarget ?? undefined;
|
|
582
|
-
if (patch.notifyWhen !== undefined)
|
|
583
|
-
next.notifyWhen = patch.notifyWhen ?? undefined;
|
|
584
|
-
if (patch.runAfter !== undefined)
|
|
585
|
-
next.runAfter = patch.runAfter ?? undefined;
|
|
586
|
-
if (patch.resumeCondition !== undefined)
|
|
587
|
-
next.resumeCondition = patch.resumeCondition ?? undefined;
|
|
588
|
-
if (patch.result !== undefined)
|
|
589
|
-
next.result = patch.result ?? undefined;
|
|
590
|
-
if (patch.checkpoint !== undefined)
|
|
591
|
-
next.checkpoint = patch.checkpoint ?? undefined;
|
|
592
|
-
return next;
|
|
593
|
-
}
|
|
594
|
-
//# sourceMappingURL=task-store.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"task-store.js","sourceRoot":"","sources":["../../src/threads/task-store.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC3C,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACrD,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAE7B,OAAO,EAAE,mBAAmB,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AACvE,OAAO,EAAE,iBAAiB,EAAoE,MAAM,0BAA0B,CAAC;AAC/H,OAAO,EAAE,kBAAkB,EAAE,MAAM,8BAA8B,CAAC;AAClE,OAAO,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AAC9D,OAAO,EACL,kBAAkB,EAClB,aAAa,EACb,aAAa,EACb,eAAe,EACf,YAAY,EACZ,iBAAiB,GAalB,MAAM,qBAAqB,CAAC;AAE7B;;;;;;;;GAQG;AACH,MAAM,UAAU,sBAAsB,CAAC,MAAc,EAAE,QAAgB,EAAE,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE;IACvF,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,MAAM,CAAC;QAAE,OAAO,KAAK,CAAC;IACzC,IAAI,EAA4B,CAAC;IACjC,IAAI,CAAC;QACH,EAAE,GAAG,IAAI,YAAY,CAAC,MAAM,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC;QAClD,EAAE,CAAC,IAAI,CAAC,4BAA4B,CAAC,CAAC;QACtC,uEAAuE;QACvE,sEAAsE;QACtE,4DAA4D;QAC5D,MAAM,GAAG,GAAG,EAAE,CAAC,OAAO,CACpB;;;;eAIS,CACV,CAAC,GAAG,CAAC,QAAQ,EAAE,GAAG,CAAkC,CAAC;QACtD,IAAI,GAAG,KAAK,SAAS;YAAE,OAAO,IAAI,CAAC;QACnC,wEAAwE;QACxE,0EAA0E;QAC1E,sEAAsE;QACtE,oEAAoE;QACpE,2EAA2E;QAC3E,2EAA2E;QAC3E,wEAAwE;QACxE,uDAAuD;QACvD,MAAM,QAAQ,GAAG,EAAE,CAAC,OAAO,CACzB;;;eAGS,CACV,CAAC,GAAG,CAAC,QAAQ,CAAkC,CAAC;QACjD,OAAO,QAAQ,KAAK,SAAS,CAAC;IAChC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;YAAS,CAAC;QACT,EAAE,EAAE,KAAK,EAAE,CAAC;IACd,CAAC;AACH,CAAC;AAED,yEAAyE;AACzE,MAAM,UAAU,sBAAsB,CAAC,QAAgB;IACrD,OAAO,QAAQ,KAAK,iBAAiB;QACnC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,mBAAmB,EAAE,EAAE,UAAU,CAAC;QAC9C,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,EAAE,UAAU,CAAC,CAAC;AACpD,CAAC;AAED,uEAAuE;AACvE,MAAM,UAAU,eAAe,CAAC,QAAgB;IAC9C,OAAO,WAAW,QAAQ,EAAE,CAAC;AAC/B,CAAC;AAED,4EAA4E;AAC5E,MAAM,UAAU,mBAAmB,CAAC,MAAc,EAAE,WAAmB;IACrE,OAAO,YAAY,MAAM,KAAK,WAAW,EAAE,CAAC;AAC9C,CAAC;AA0ED,MAAM,cAAe,SAAQ,KAAK;IACX;IAAsC;IAA3D,YAAqB,MAA2B,EAAW,MAAc;QACvE,KAAK,CAAC,GAAG,MAAM,KAAK,MAAM,EAAE,CAAC,CAAC;QADX,WAAM,GAAN,MAAM,CAAqB;QAAW,WAAM,GAAN,MAAM,CAAQ;IAEzE,CAAC;CACF;AAED,MAAM,YAAY,GAAG,aAAa,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,IAAI,MAAM,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAE7E,SAAS,IAAI,CAAC,KAAc;IAC1B,OAAO,IAAI,CAAC,SAAS,CAAC,iBAAiB,CAAC,KAAK,CAAC,CAAC,CAAC;AAClD,CAAC;AAED,SAAS,UAAU,CAAC,KAAc;IAChC,OAAO,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AACpE,CAAC;AAED,SAAS,aAAa,CAAC,GAAkB;IACvC,OAAO,GAAG,KAAK,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;AACpD,CAAC;AAED,sFAAsF;AACtF,MAAM,CAAC,MAAM,oBAAoB,GAAG,kBAAkB,CAAC;AAEvD;;;GAGG;AACH,SAAS,YAAY,CAAC,IAAwB,EAAE,QAAgB;IAC9D,MAAM,IAAI,GAAG,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC;IACrD,4CAA4C;IAC5C,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,cAAc,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;IACnF,OAAO,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,QAAQ,CAAC;AACjD,CAAC;AAED,MAAM,OAAO,eAAe;IACjB,QAAQ,CAAS;IACjB,QAAQ,CAAS;IACT,EAAE,CAAe;IACjB,cAAc,CAAS;IAChC,MAAM,GAAG,KAAK,CAAC;IAEvB,YAAY,OAA+B;QACzC,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC;QACjC,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC;QACjC,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,IAAI,sBAAsB,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;QAC1E,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,oBAAoB,CAAC,CAAC;QAC5E,IAAI,CAAC,EAAE,GAAG,IAAI,YAAY,CAAC,MAAM,CAAC,CAAC;QACnC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,2BAA2B,CAAC,CAAC;QAC1C,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,4BAA4B,CAAC,CAAC;QAC3C,IAAI,CAAC,OAAO,EAAE,CAAC;QACf,IAAI,OAAO,CAAC,WAAW;YAAE,IAAI,CAAC,WAAW,EAAE,CAAC;IAC9C,CAAC;IAED,sFAAsF;IAC9E,OAAO;QACb,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC;;;;;;;;;;;;;;;;;;iDAkBgC,YAAY;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;KAuCxD,CAAC,CAAC;IACL,CAAC;IAED,6EAA6E;IAE7E,2EAA2E;IAC3E,WAAW;QACT,OAAO,IAAI,CAAC,WAAW,CAAC,GAAG,EAAE;YAC3B,MAAM,GAAG,GAAG,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,wDAAwD,CAAC;iBAClF,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAuC,CAAC;YAC5D,MAAM,UAAU,GAAG,CAAC,GAAG,EAAE,UAAU,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;YAC9C,IAAI,CAAC,EAAE,CAAC,OAAO,CACb;;8EAEsE,CACvE,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE,UAAU,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;YAC5D,OAAO,UAAU,CAAC;QACpB,CAAC,CAAC,CAAC;IACL,CAAC;IAED,eAAe;QACb,OAAO,IAAI,CAAC,aAAa,EAAE,KAAK,IAAI,CAAC,QAAQ,CAAC;IAChD,CAAC;IAEO,aAAa;QACnB,MAAM,GAAG,GAAG,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,uDAAuD,CAAC;aACjF,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAsC,CAAC;QAC3D,OAAO,GAAG,EAAE,SAAS,CAAC;IACxB,CAAC;IAED,2EAA2E;IACnE,YAAY;QAClB,MAAM,OAAO,GAAG,IAAI,CAAC,aAAa,EAAE,CAAC;QACrC,IAAI,OAAO,KAAK,IAAI,CAAC,QAAQ,EAAE,CAAC;YAC9B,MAAM,IAAI,cAAc,CAAC,cAAc,EAAE,OAAO,CAAC,CAAC,CAAC,sBAAsB,OAAO,EAAE,CAAC,CAAC,CAAC,mCAAmC,CAAC,CAAC;QAC5H,CAAC;IACH,CAAC;IAED,6EAA6E;IAE7E;;;OAGG;IACH,WAAW,CAAC,KAAqB;QAC/B,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,IAAI,CAAC;YAAE,MAAM,IAAI,KAAK,CAAC,4BAA4B,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACpG,MAAM,MAAM,GAAG,IAAI,CAAC,EAAE,CAAC,OAAO,CAC5B;;0CAEoC,CACrC,CAAC,GAAG,CACH,UAAU,EAAE,EACZ,IAAI,CAAC,QAAQ,EACb,KAAK,CAAC,cAAc,EACpB,KAAK,CAAC,IAAI,EACV,UAAU,CAAC,KAAK,CAAC,MAAM,CAAC,EACxB,UAAU,CAAC,KAAK,CAAC,WAAW,CAAC,EAC7B,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,EACnB,IAAI,CAAC,QAAQ,EACb,IAAI,CAAC,GAAG,EAAE,CACX,CAAC;QACF,MAAM,KAAK,GAAG,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC;QACvD,IAAI,CAAC,KAAK;YAAE,MAAM,IAAI,KAAK,CAAC,cAAc,KAAK,CAAC,cAAc,wBAAwB,CAAC,CAAC;QACxF,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,CAAC,OAAO,GAAG,CAAC,EAAE,CAAC;IACjD,CAAC;IAED;;;;;;;;;OASG;IACH,kBAAkB,CAAC,GAAmB;QACpC,MAAM,QAAQ,GAAG,kBAAkB,CAAC,GAAG,CAAC,CAAC;QACzC,MAAM,MAAM,GAAoB;YAC9B,OAAO,EAAE,GAAG,CAAC,OAAO;YACpB,MAAM,EAAE,GAAG,CAAC,MAAM;YAClB,SAAS,EAAE,GAAG,CAAC,EAAE;YACjB,QAAQ;YACR,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,GAAG,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SACrC,CAAC;QACF,MAAM,cAAc,GAAG,eAAe,CAAC,QAAQ,CAAC,CAAC;QACjD,yEAAyE;QACzE,8DAA8D;QAC9D,MAAM,QAAQ,GAAG,IAAI,CAAC,aAAa,CAAC,cAAc,CAAC,CAAC;QACpD,IAAI,QAAQ;YAAE,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC;QAC1D,MAAM,WAAW,GAAwB,GAAG,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,UAAU,EAAE,KAAK,EAAE,EAAE,CACjF,IAAI,CAAC,iBAAiB,CAAC,cAAc,EAAE,KAAK,EAAE,UAAU,CAAC,CAAC,CAAC;QAC7D,OAAO,IAAI,CAAC,WAAW,CAAC;YACtB,cAAc;YACd,IAAI,EAAE,cAAc;YACpB,MAAM;YACN,GAAG,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,GAAG,CAAC,cAAc,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YAClE,OAAO,EAAE,EAAE,IAAI,EAAE,GAAG,CAAC,IAAI,EAAE,GAAG,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,EAAE,EAAE,SAAS,EAAE,GAAG,CAAC,SAAS,EAAE,EAAE;SACpH,CAAC,CAAC;IACL,CAAC;IAED;;;;;OAKG;IACK,iBAAiB,CAAC,QAAgB,EAAE,KAAa,EAAE,UAA6B;QACtF,MAAM,EAAE,MAAM,EAAE,GAAG,GAAG,EAAE,GAAG,UAAU,CAAC;QACtC,IAAI,GAAG,CAAC,SAAS,IAAI,GAAG,CAAC,GAAG,IAAI,CAAC,MAAM;YAAE,OAAO,GAAG,CAAC;QAEpD,MAAM,QAAQ,GAAG,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,GAAG,IAAI,CAAC,QAAQ,KAAK,QAAQ,EAAE,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QACzG,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE,QAAQ,CAAC,CAAC;QACrD,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,KAAK,IAAI,YAAY,CAAC,GAAG,CAAC,QAAQ,EAAE,YAAY,CAAC,EAAE,CAAC,CAAC;QACzF,EAAE,CAAC,SAAS,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QACvC,qEAAqE;QACrE,wEAAwE;QACxE,EAAE,CAAC,aAAa,CAAC,SAAS,EAAE,MAAM,CAAC,IAAI,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC,CAAC;QAC3D,OAAO,EAAE,GAAG,GAAG,EAAE,SAAS,EAAE,CAAC;IAC/B,CAAC;IAED,QAAQ,CAAC,cAAsB;QAC7B,OAAO,IAAI,CAAC,aAAa,CAAC,cAAc,CAAC,KAAK,SAAS,CAAC;IAC1D,CAAC;IAED,aAAa,CAAC,cAAsB;QAClC,MAAM,GAAG,GAAG,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,uEAAuE,CAAC;aACjG,GAAG,CAAC,IAAI,CAAC,QAAQ,EAAE,cAAc,CAAyB,CAAC;QAC9D,OAAO,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IAChD,CAAC;IAED,kDAAkD;IAClD,eAAe,CAAC,QAAgB,EAAE,KAAK,GAAG,GAAG;QAC3C,MAAM,IAAI,GAAG,IAAI,CAAC,EAAE,CAAC,OAAO,CAC1B,oFAAoF,CACrF,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,EAAE,QAAQ,EAAE,KAAK,CAA0B,CAAC;QAC/D,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC;IACjD,CAAC;IAED,qEAAqE;IACrE,qBAAqB,CAAC,QAAgB,EAAE,KAAa;QACnD,MAAM,IAAI,GAAG,IAAI,CAAC,EAAE,CAAC,OAAO,CAC1B,qFAAqF,CACtF,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,EAAE,QAAQ,EAAE,KAAK,CAA0B,CAAC;QAC/D,OAAO,IAAI,CAAC,OAAO,EAAE,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC;IAC3D,CAAC;IAED,wDAAwD;IACxD,oBAAoB,CAAC,KAAK,GAAG,GAAG;QAC9B,OAAO,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,WAAW,EAAE,EAAE,KAAK,CAAC,CAAC;IACzD,CAAC;IAED,SAAS;QACP,MAAM,GAAG,GAAG,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,6DAA6D,CAAC;aACvF,GAAG,CAAC,IAAI,CAAC,QAAQ,CAA2B,CAAC;QAChD,OAAO,GAAG,CAAC,GAAG,IAAI,CAAC,CAAC;IACtB,CAAC;IAED,WAAW;QACT,MAAM,GAAG,GAAG,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,gEAAgE,CAAC;aAC1F,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAqC,CAAC;QAC1D,OAAO,GAAG,EAAE,QAAQ,IAAI,CAAC,CAAC;IAC5B,CAAC;IAED,6EAA6E;IAE7E,OAAO,CAAC,MAAc;QACpB,MAAM,GAAG,GAAG,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,2DAA2D,CAAC;aACrF,GAAG,CAAC,IAAI,CAAC,QAAQ,EAAE,MAAM,CAAwB,CAAC;QACrD,OAAO,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IAC/C,CAAC;IAED,eAAe,CAAC,SAAiB;QAC/B,MAAM,GAAG,GAAG,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,mEAAmE,CAAC;aAC7F,GAAG,CAAC,IAAI,CAAC,QAAQ,EAAE,SAAS,CAAwB,CAAC;QACxD,OAAO,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IAC/C,CAAC;IAED,8DAA8D;IAC9D,SAAS,CAAC,WAAkC,aAAa;QACvD,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,EAAE,CAAC;QACrC,MAAM,YAAY,GAAG,QAAQ,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACxD,MAAM,IAAI,GAAG,IAAI,CAAC,EAAE,CAAC,OAAO,CAC1B,iEAAiE,YAAY,sCAAsC,CACpH,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,EAAE,GAAG,QAAQ,CAAyB,CAAC;QAC1D,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC;IAChD,CAAC;IAED,aAAa;QACX,OAAO,IAAI,CAAC,SAAS,CAAC,kBAAkB,CAAC,CAAC;IAC5C,CAAC;IAED;;;;;;OAMG;IACH,iBAAiB,CAAC,GAAW;QAC3B,MAAM,IAAI,GAAG,IAAI,CAAC,EAAE,CAAC,OAAO,CAC1B;;4FAEsF,CACvF,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,EAAE,GAAG,CAAyB,CAAC;QAClD,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC;IAChD,CAAC;IAED;;;;;OAKG;IACH,MAAM,CAAC,MAAkB;QACvB,IAAI,CAAC;YACH,OAAO,IAAI,CAAC,WAAW,CAAC,GAAG,EAAE;gBAC3B,IAAI,CAAC,YAAY,EAAE,CAAC;gBACpB,MAAM,QAAQ,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC;gBACpC,IAAI,QAAQ,KAAK,MAAM,CAAC,gBAAgB,EAAE,CAAC;oBACzC,MAAM,IAAI,cAAc,CAAC,mBAAmB,EAAE,qBAAqB,MAAM,CAAC,gBAAgB,WAAW,QAAQ,EAAE,CAAC,CAAC;gBACnH,CAAC;gBACD,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC;gBAChC,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,UAAU,CAAC,IAAI,MAAM,CAAC,UAAU,GAAG,QAAQ,IAAI,MAAM,CAAC,UAAU,GAAG,MAAM,EAAE,CAAC;oBACvG,MAAM,IAAI,cAAc,CAAC,gBAAgB,EAAE,cAAc,MAAM,CAAC,UAAU,aAAa,QAAQ,KAAK,MAAM,GAAG,CAAC,CAAC;gBACjH,CAAC;gBAED,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;gBACvB,MAAM,OAAO,GAA8D,EAAE,CAAC;gBAC9E,MAAM,OAAO,GAA0C,EAAE,CAAC;gBAC1D,KAAK,MAAM,MAAM,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;oBACpC,IAAI,MAAM,CAAC,EAAE,KAAK,QAAQ,EAAE,CAAC;wBAC3B,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC,UAAU,EAAE,GAAG,CAAC,CAAC,CAAC;oBACjE,CAAC;yBAAM,CAAC;wBACN,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC,UAAU,EAAE,GAAG,CAAC,CAAC,CAAC;oBACjE,CAAC;gBACH,CAAC;gBAED,IAAI,CAAC,EAAE,CAAC,OAAO,CACb;+GACqG,CACtG,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,EAAE,MAAM,CAAC,UAAU,EAAE,GAAG,CAAC,CAAC;gBAC7C,OAAO,EAAE,EAAE,EAAE,IAAa,EAAE,QAAQ,EAAE,MAAM,CAAC,UAAU,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC;YAC9E,CAAC,CAAC,CAAC;QACL,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,KAAK,YAAY,cAAc;gBAAE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,CAAC,MAAM,EAAE,CAAC;YACtG,MAAM,KAAK,CAAC;QACd,CAAC;IACH,CAAC;IAEO,WAAW,CACjB,MAA6C,EAC7C,UAAkB,EAClB,GAAW;QAEX,MAAM,QAAQ,GAAG,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;QACxD,IAAI,QAAQ;YAAE,OAAO,EAAE,SAAS,EAAE,MAAM,CAAC,SAAS,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;QAEzF,MAAM,IAAI,GAAY,MAAM,CAAC,IAAI,CAAC;QAClC,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,IAAI,SAAS,CAAC;QACxC,MAAM,OAAO,GAAG,iBAAiB,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,eAAe,EAAE,IAAI,CAAC,eAAe,EAAE,CAAC,CAAC;QAC7H,IAAI,OAAO;YAAE,MAAM,IAAI,cAAc,CAAC,gBAAgB,EAAE,UAAU,MAAM,CAAC,SAAS,KAAK,OAAO,EAAE,CAAC,CAAC;QAElG,MAAM,EAAE,GAAG,UAAU,EAAE,CAAC;QACxB,IAAI,CAAC,EAAE,CAAC,OAAO,CACb;;;qEAG+D,CAChE,CAAC,GAAG,CACH,EAAE,EACF,IAAI,CAAC,QAAQ,EACb,MAAM,CAAC,SAAS,EAChB,MAAM,EACN,IAAI,CAAC,KAAK,EACV,IAAI,CAAC,WAAW,IAAI,EAAE,EACtB,IAAI,CAAC,IAAI,CAAC,YAAY,IAAI,EAAE,CAAC,EAC7B,IAAI,CAAC,IAAI,CAAC,cAAc,IAAI,EAAE,CAAC,EAC/B,UAAU,CAAC,IAAI,CAAC,WAAW,CAAC,EAC5B,IAAI,CAAC,UAAU,IAAI,IAAI,EACvB,IAAI,CAAC,QAAQ,IAAI,IAAI,EACrB,IAAI,CAAC,eAAe,IAAI,IAAI,EAC5B,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,EACvB,UAAU,CAAC,IAAI,CAAC,UAAU,CAAC,EAC3B,GAAG,EACH,GAAG,EACH,UAAU,CACX,CAAC;QACF,OAAO,EAAE,SAAS,EAAE,MAAM,CAAC,SAAS,EAAE,MAAM,EAAE,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;IACrE,CAAC;IAEO,WAAW,CACjB,MAA6C,EAC7C,UAAkB,EAClB,GAAW;QAEX,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QAC5C,IAAI,CAAC,OAAO;YAAE,MAAM,IAAI,cAAc,CAAC,cAAc,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC;QACtE,IAAI,OAAO,CAAC,OAAO,KAAK,MAAM,CAAC,eAAe,EAAE,CAAC;YAC/C,MAAM,IAAI,cAAc,CACtB,kBAAkB,EAClB,QAAQ,MAAM,CAAC,MAAM,kBAAkB,OAAO,CAAC,OAAO,qBAAqB,MAAM,CAAC,eAAe,EAAE,CACpG,CAAC;QACJ,CAAC;QAED,MAAM,IAAI,GAAG,UAAU,CAAC,OAAO,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC;QAC/C,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC;YAChD,MAAM,IAAI,cAAc,CAAC,gBAAgB,EAAE,QAAQ,MAAM,CAAC,MAAM,KAAK,OAAO,CAAC,MAAM,OAAO,IAAI,CAAC,MAAM,iBAAiB,CAAC,CAAC;QAC1H,CAAC;QACD,MAAM,OAAO,GAAG,iBAAiB,CAAC,IAAI,CAAC,CAAC;QACxC,IAAI,OAAO;YAAE,MAAM,IAAI,cAAc,CAAC,gBAAgB,EAAE,QAAQ,MAAM,CAAC,MAAM,KAAK,OAAO,EAAE,CAAC,CAAC;QAE7F,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,GAAG,CAAC,CAAC;QACpC,IAAI,CAAC,EAAE,CAAC,OAAO,CACb;;;sDAGgD,CACjD,CAAC,GAAG,CACH,IAAI,CAAC,MAAM,EACX,OAAO,EACP,IAAI,CAAC,KAAK,EACV,IAAI,CAAC,WAAW,EAChB,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,EACvB,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,EACzB,UAAU,CAAC,IAAI,CAAC,WAAW,CAAC,EAC5B,IAAI,CAAC,UAAU,IAAI,IAAI,EACvB,IAAI,CAAC,QAAQ,IAAI,IAAI,EACrB,IAAI,CAAC,eAAe,IAAI,IAAI,EAC5B,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,EACvB,UAAU,CAAC,IAAI,CAAC,UAAU,CAAC,EAC3B,GAAG,EACH,UAAU,EACV,IAAI,CAAC,QAAQ,EACb,MAAM,CAAC,MAAM,EACb,OAAO,CAAC,OAAO,CAChB,CAAC;QACF,OAAO,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,EAAE,CAAC;IAC5C,CAAC;IAED,6EAA6E;IAE7E;;;;OAIG;IACH,uBAAuB,CAAC,KAA8C;QACpE,MAAM,GAAG,GAAG,mBAAmB,CAAC,KAAK,CAAC,MAAM,EAAE,KAAK,CAAC,WAAW,CAAC,CAAC;QACjE,OAAO,IAAI,CAAC,MAAM,CAAC,GAAG,EAAE;YACtB,MAAM,MAAM,GAAG,IAAI,CAAC,EAAE,CAAC,OAAO,CAC5B;;+CAEuC,CACxC,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,QAAQ,EAAE,KAAK,CAAC,MAAM,EAAE,KAAK,CAAC,WAAW,EAAE,IAAI,CAAC,GAAG,EAAE,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;YACtF,MAAM,MAAM,GAAG,IAAI,CAAC,mBAAmB,CAAC,GAAG,CAAC,CAAC;YAC7C,IAAI,CAAC,MAAM;gBAAE,MAAM,IAAI,KAAK,CAAC,qBAAqB,GAAG,wBAAwB,CAAC,CAAC;YAC/E,OAAO,EAAE,QAAQ,EAAE,MAAM,CAAC,OAAO,GAAG,CAAC,EAAE,MAAM,EAAE,CAAC;QAClD,CAAC,CAAC,CAAC;IACL,CAAC;IAED,qEAAqE;IACrE,qBAAqB,CAAC,cAAsB;QAC1C,OAAO,IAAI,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,CACtC;2EACqE,CACtE,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,EAAE,EAAE,IAAI,CAAC,QAAQ,EAAE,cAAc,CAAC,CAAC,OAAO,GAAG,CAAC,CAAC,CAAC;IAChE,CAAC;IAED,mBAAmB,CAAC,cAAsB;QACxC,MAAM,GAAG,GAAG,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,oFAAoF,CAAC;aAC9G,GAAG,CAAC,IAAI,CAAC,QAAQ,EAAE,cAAc,CAA4B,CAAC;QACjE,OAAO,GAAG,CAAC,CAAC,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IAC9C,CAAC;IAED,gFAAgF;IAChF,yBAAyB;QACvB,MAAM,IAAI,GAAG,IAAI,CAAC,EAAE,CAAC,OAAO,CAC1B,6GAA6G,CAC9G,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,CAA6B,CAAC;QACjD,OAAO,IAAI,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC;IACjC,CAAC;IAED,6EAA6E;IAErE,MAAM,CAAI,EAAW;QAC3B,IAAI,CAAC;YACH,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,CAAC,WAAW,CAAC,GAAG,EAAE;oBAC9C,IAAI,CAAC,YAAY,EAAE,CAAC;oBACpB,OAAO,EAAE,EAAE,CAAC;gBACd,CAAC,CAAC,EAAE,CAAC;QACP,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,KAAK,YAAY,cAAc;gBAAE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,EAAE,KAAK,CAAC,MAAM,EAAE,CAAC;YACxG,MAAM,KAAK,CAAC;QACd,CAAC;IACH,CAAC;IAEO,WAAW,CAAI,EAAW;QAChC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;QAChC,IAAI,CAAC;YACH,MAAM,KAAK,GAAG,EAAE,EAAE,CAAC;YACnB,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YACvB,OAAO,KAAK,CAAC;QACf,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;YACzB,MAAM,KAAK,CAAC;QACd,CAAC;IACH,CAAC;IAEO,UAAU,CAAC,GAAa;QAC9B,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,IAAI,CAAC;YAAE,MAAM,IAAI,KAAK,CAAC,qBAAqB,GAAG,CAAC,EAAE,qBAAqB,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC;QAC5G,MAAM,MAAM,GAAG,aAAa,CAAC,GAAG,CAAC,MAAM,CAAgC,CAAC;QACxE,MAAM,WAAW,GAAG,aAAa,CAAC,GAAG,CAAC,YAAY,CAA+B,CAAC;QAClF,OAAO;YACL,GAAG,EAAE,GAAG,CAAC,GAAG;YACZ,EAAE,EAAE,GAAG,CAAC,EAAE;YACV,QAAQ,EAAE,GAAG,CAAC,SAAS;YACvB,cAAc,EAAE,GAAG,CAAC,eAAe;YACnC,IAAI,EAAE,GAAG,CAAC,IAAI;YACd,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YAC7B,GAAG,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YACvC,OAAO,EAAE,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,CAAyB;YACxD,QAAQ,EAAE,GAAG,CAAC,SAAS;YACvB,SAAS,EAAE,GAAG,CAAC,UAAU;SAC1B,CAAC;IACJ,CAAC;IAEO,SAAS,CAAC,GAAY;QAC5B,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,MAAM,CAAC;YAAE,MAAM,IAAI,KAAK,CAAC,eAAe,GAAG,CAAC,EAAE,uBAAuB,GAAG,CAAC,MAAM,EAAE,CAAC,CAAC;QACzG,MAAM,WAAW,GAAG,aAAa,CAAC,GAAG,CAAC,YAAY,CAA8B,CAAC;QACjF,MAAM,MAAM,GAAG,aAAa,CAAC,GAAG,CAAC,MAAM,CAAyB,CAAC;QACjE,MAAM,UAAU,GAAG,aAAa,CAAC,GAAG,CAAC,UAAU,CAA6B,CAAC;QAC7E,OAAO;YACL,EAAE,EAAE,GAAG,CAAC,EAAE;YACV,QAAQ,EAAE,GAAG,CAAC,SAAS;YACvB,SAAS,EAAE,GAAG,CAAC,UAAU;YACzB,MAAM,EAAE,GAAG,CAAC,MAAM;YAClB,OAAO,EAAE,GAAG,CAAC,OAAO;YACpB,KAAK,EAAE,GAAG,CAAC,KAAK;YAChB,WAAW,EAAE,GAAG,CAAC,WAAW;YAC5B,YAAY,EAAE,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,YAAY,CAAa;YACtD,cAAc,EAAE,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,gBAAgB,CAAa;YAC5D,GAAG,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YACvC,GAAG,CAAC,GAAG,CAAC,WAAW,KAAK,IAAI,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,GAAG,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YACpE,GAAG,CAAC,GAAG,CAAC,SAAS,KAAK,IAAI,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,GAAG,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YAC9D,GAAG,CAAC,GAAG,CAAC,gBAAgB,KAAK,IAAI,CAAC,CAAC,CAAC,EAAE,eAAe,EAAE,GAAG,CAAC,gBAAgB,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YACnF,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YAC7B,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YACrC,SAAS,EAAE,GAAG,CAAC,UAAU;YACzB,SAAS,EAAE,GAAG,CAAC,UAAU;YACzB,YAAY,EAAE,GAAG,CAAC,cAAc;SACjC,CAAC;IACJ,CAAC;IAED,KAAK;QACH,IAAI,IAAI,CAAC,MAAM;YAAE,OAAO;QACxB,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC;QACnB,IAAI,CAAC,EAAE,CAAC,KAAK,EAAE,CAAC;IAClB,CAAC;CACF;AAED,SAAS,aAAa,CAAC,GAAgB;IACrC,OAAO;QACL,cAAc,EAAE,GAAG,CAAC,eAAe;QACnC,QAAQ,EAAE,GAAG,CAAC,SAAS;QACvB,MAAM,EAAE,GAAG,CAAC,OAAO;QACnB,WAAW,EAAE,GAAG,CAAC,YAAY;QAC7B,MAAM,EAAE,GAAG,CAAC,MAAM;QAClB,UAAU,EAAE,GAAG,CAAC,WAAW;QAC3B,GAAG,CAAC,GAAG,CAAC,YAAY,KAAK,IAAI,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,GAAG,CAAC,YAAY,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACvE,QAAQ,EAAE,GAAG,CAAC,SAAS;KACxB,CAAC;AACJ,CAAC;AAED,mEAAmE;AACnE,SAAS,UAAU,CAAC,IAAgB,EAAE,KAAgB;IACpD,MAAM,IAAI,GAAe,EAAE,GAAG,IAAI,EAAE,CAAC;IACrC,IAAI,KAAK,CAAC,KAAK,KAAK,SAAS;QAAE,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC;IACxD,IAAI,KAAK,CAAC,WAAW,KAAK,SAAS;QAAE,IAAI,CAAC,WAAW,GAAG,KAAK,CAAC,WAAW,CAAC;IAC1E,IAAI,KAAK,CAAC,YAAY,KAAK,SAAS;QAAE,IAAI,CAAC,YAAY,GAAG,KAAK,CAAC,YAAY,CAAC;IAC7E,IAAI,KAAK,CAAC,MAAM,KAAK,SAAS;QAAE,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC;IAC3D,IAAI,KAAK,CAAC,iBAAiB,KAAK,SAAS,EAAE,CAAC;QAC1C,IAAI,CAAC,cAAc,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,cAAc,EAAE,GAAG,KAAK,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC;IAC3F,CAAC;IACD,IAAI,KAAK,CAAC,WAAW,KAAK,SAAS;QAAE,IAAI,CAAC,WAAW,GAAG,KAAK,CAAC,WAAW,IAAI,SAAS,CAAC;IACvF,IAAI,KAAK,CAAC,UAAU,KAAK,SAAS;QAAE,IAAI,CAAC,UAAU,GAAG,KAAK,CAAC,UAAU,IAAI,SAAS,CAAC;IACpF,IAAI,KAAK,CAAC,QAAQ,KAAK,SAAS;QAAE,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAC,QAAQ,IAAI,SAAS,CAAC;IAC9E,IAAI,KAAK,CAAC,eAAe,KAAK,SAAS;QAAE,IAAI,CAAC,eAAe,GAAG,KAAK,CAAC,eAAe,IAAI,SAAS,CAAC;IACnG,IAAI,KAAK,CAAC,MAAM,KAAK,SAAS;QAAE,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC,MAAM,IAAI,SAAS,CAAC;IACxE,IAAI,KAAK,CAAC,UAAU,KAAK,SAAS;QAAE,IAAI,CAAC,UAAU,GAAG,KAAK,CAAC,UAAU,IAAI,SAAS,CAAC;IACpF,OAAO,IAAI,CAAC;AACd,CAAC"}
|