@lostgradient/weft 0.2.1 → 0.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +123 -43
- package/dist/cli/conformance.js +7 -1
- package/dist/cli/generated/operation-client.generated.d.ts +55 -13
- package/dist/cli/generated/operation-client.generated.js +3 -0
- package/dist/cli/help-text.d.ts +1 -1
- package/dist/cli/help-text.js +1 -0
- package/dist/cli/operation-catalog-snapshot.d.ts +8 -0
- package/dist/cli/operation-catalog-snapshot.js +11 -0
- package/dist/cli/parse-schedule-arguments.js +3 -1
- package/dist/cli/schedule.js +2 -1
- package/dist/cli/types.d.ts +1 -0
- package/dist/cli-main.js +80 -79
- package/dist/client/handle-delegation.d.ts +7 -2
- package/dist/client/handle-delegation.js +9 -1
- package/dist/client/http-client-requests.d.ts +4 -1
- package/dist/client/http-client-requests.js +10 -0
- package/dist/client/http-client.d.ts +10 -4
- package/dist/client/http-client.js +18 -1
- package/dist/client/http-request.d.ts +11 -1
- package/dist/client/http-request.js +17 -7
- package/dist/client/index.d.ts +1 -1
- package/dist/client/interface.d.ts +100 -4
- package/dist/client/local.d.ts +7 -1
- package/dist/client/local.js +17 -2
- package/dist/client/start-body.d.ts +9 -2
- package/dist/client/start-body.js +13 -4
- package/dist/core/byte-arrays.d.ts +5 -0
- package/dist/core/byte-arrays.js +5 -0
- package/dist/core/checkpoint/lifecycle.d.ts +3 -0
- package/dist/core/checkpoint/lifecycle.js +9 -4
- package/dist/core/checkpoint/serialization.js +12 -5
- package/dist/core/codec/extension-codec.d.ts +16 -0
- package/dist/core/codec/extension-codec.js +104 -8
- package/dist/core/codec/index.d.ts +1 -0
- package/dist/core/codec/index.js +1 -0
- package/dist/core/codec/serializer-registry.d.ts +122 -0
- package/dist/core/codec/serializer-registry.js +51 -0
- package/dist/core/context/activity-retry-state.d.ts +38 -0
- package/dist/core/context/activity-retry-state.js +89 -0
- package/dist/core/context/activity-schedule-to-close.d.ts +159 -0
- package/dist/core/context/activity-schedule-to-close.js +69 -0
- package/dist/core/context/child-workflow-pipe.d.ts +5 -5
- package/dist/core/context/child-workflow-pipe.js +15 -2
- package/dist/core/context/context-presence.d.ts +19 -0
- package/dist/core/context/context-presence.js +13 -0
- package/dist/core/context/durable-operations.d.ts +25 -0
- package/dist/core/context/durable-operations.js +64 -0
- package/dist/core/context/index.d.ts +18 -5
- package/dist/core/context/index.js +17 -12
- package/dist/core/context/internals.d.ts +29 -0
- package/dist/core/context/internals.js +6 -1
- package/dist/core/context/operation-request.d.ts +35 -0
- package/dist/core/context/parallel-cache-entry.d.ts +14 -5
- package/dist/core/context/run-operation.d.ts +21 -3
- package/dist/core/context/run-operation.js +56 -93
- package/dist/core/context/session-state.js +7 -8
- package/dist/core/context/speculative-child.js +2 -0
- package/dist/core/context/types.d.ts +15 -0
- package/dist/core/context/version-patching.d.ts +8 -0
- package/dist/core/context/version-patching.js +40 -0
- package/dist/core/context/workflow-logger.d.ts +98 -0
- package/dist/core/context/workflow-logger.js +68 -0
- package/dist/core/engine/activity-heartbeat-tracking.d.ts +64 -0
- package/dist/core/engine/activity-heartbeat-tracking.js +42 -0
- package/dist/core/engine/activity-per-attempt-timeout.d.ts +41 -0
- package/dist/core/engine/activity-per-attempt-timeout.js +36 -0
- package/dist/core/engine/activity-reconciliation.d.ts +1 -0
- package/dist/core/engine/activity-reconciliation.js +12 -1
- package/dist/core/engine/activity-resolution.d.ts +23 -0
- package/dist/core/engine/activity-resolution.js +37 -0
- package/dist/core/engine/aggregate.js +66 -30
- package/dist/core/engine/async-activity-completion.d.ts +23 -6
- package/dist/core/engine/async-activity-completion.js +53 -12
- package/dist/core/engine/attributes-tags.js +9 -4
- package/dist/core/engine/bulk-operations-purge.d.ts +26 -0
- package/dist/core/engine/bulk-operations-purge.js +38 -3
- package/dist/core/engine/bulk-operations-shared.d.ts +2 -0
- package/dist/core/engine/bulk-operations-shared.js +8 -2
- package/dist/core/engine/bulk-operations.d.ts +4 -1
- package/dist/core/engine/bulk-operations.js +235 -24
- package/dist/core/engine/callback-creators-bundles.d.ts +9 -0
- package/dist/core/engine/callback-creators-bundles.js +30 -2
- package/dist/core/engine/callback-creators-core.js +6 -4
- package/dist/core/engine/callback-creators-router.js +10 -0
- package/dist/core/engine/callback-creators-schedule.d.ts +2 -2
- package/dist/core/engine/callback-creators-schedule.js +12 -8
- package/dist/core/engine/candidate-read-batching.d.ts +6 -0
- package/dist/core/engine/candidate-read-batching.js +1 -0
- package/dist/core/engine/checkpoint-io.js +61 -25
- package/dist/core/engine/checkpoint-reads.js +3 -2
- package/dist/core/engine/checkpoint-replay.d.ts +20 -0
- package/dist/core/engine/checkpoint-replay.js +242 -0
- package/dist/core/engine/checkpoint-side-effects.d.ts +23 -0
- package/dist/core/engine/checkpoint-side-effects.js +35 -0
- package/dist/core/engine/child-workflow-cancellation.d.ts +10 -0
- package/dist/core/engine/child-workflow-cancellation.js +40 -0
- package/dist/core/engine/child-workflow.js +27 -4
- package/dist/core/engine/condition-waiters.d.ts +14 -0
- package/dist/core/engine/condition-waiters.js +5 -0
- package/dist/core/engine/construction.d.ts +3 -1
- package/dist/core/engine/construction.js +30 -8
- package/dist/core/engine/coordination-branch-executors.d.ts +70 -0
- package/dist/core/engine/coordination-branch-executors.js +107 -0
- package/dist/core/engine/deferred-consume-envelope.d.ts +59 -0
- package/dist/core/engine/deferred-consume-envelope.js +14 -0
- package/dist/core/engine/disposal.js +25 -0
- package/dist/core/engine/engine-create-types.d.ts +14 -18
- package/dist/core/engine/engine-internal-types.d.ts +38 -3
- package/dist/core/engine/engine-leak-warnings.d.ts +6 -0
- package/dist/core/engine/engine-leak-warnings.js +4 -0
- package/dist/core/engine/engine-runtime-helpers.d.ts +17 -0
- package/dist/core/engine/engine-runtime-helpers.js +26 -5
- package/dist/core/engine/errors.d.ts +121 -0
- package/dist/core/engine/errors.js +45 -1
- package/dist/core/engine/event-log-compaction.d.ts +8 -0
- package/dist/core/engine/event-log-compaction.js +20 -2
- package/dist/core/engine/fenced-write.d.ts +65 -0
- package/dist/core/engine/fenced-write.js +71 -0
- package/dist/core/engine/finalizer-state.d.ts +28 -0
- package/dist/core/engine/finalizer-state.js +16 -0
- package/dist/core/engine/handle-result.js +1 -1
- package/dist/core/engine/handles.d.ts +97 -40
- package/dist/core/engine/handles.js +25 -27
- package/dist/core/engine/index.d.ts +125 -15
- package/dist/core/engine/index.js +207 -11
- package/dist/core/engine/inline-launch-queue.d.ts +14 -0
- package/dist/core/engine/inline-launch-queue.js +32 -7
- package/dist/core/engine/inline-parking.js +3 -2
- package/dist/core/engine/internals.d.ts +125 -13
- package/dist/core/engine/lease-codec.d.ts +35 -0
- package/dist/core/engine/lease-codec.js +32 -0
- package/dist/core/engine/lease-deposition.d.ts +66 -0
- package/dist/core/engine/lease-deposition.js +10 -0
- package/dist/core/engine/lease-errors.d.ts +99 -0
- package/dist/core/engine/lease-errors.js +30 -0
- package/dist/core/engine/lease-manager.d.ts +114 -0
- package/dist/core/engine/lease-manager.js +135 -0
- package/dist/core/engine/lifecycle/fork-helpers.js +1 -7
- package/dist/core/engine/lifecycle/persist.js +15 -52
- package/dist/core/engine/lifecycle/recovered-services.d.ts +8 -6
- package/dist/core/engine/lifecycle/recovered-services.js +18 -3
- package/dist/core/engine/lifecycle/resume.js +39 -11
- package/dist/core/engine/lifecycle/shared.d.ts +8 -1
- package/dist/core/engine/lifecycle/start-batch.d.ts +1 -1
- package/dist/core/engine/lifecycle/start-batch.js +2 -1
- package/dist/core/engine/lifecycle/start-commit.d.ts +56 -0
- package/dist/core/engine/lifecycle/start-commit.js +69 -0
- package/dist/core/engine/lifecycle/start-exec.d.ts +30 -2
- package/dist/core/engine/lifecycle/start-exec.js +38 -0
- package/dist/core/engine/lifecycle/start-or-signal-create.d.ts +58 -0
- package/dist/core/engine/lifecycle/start-or-signal-create.js +95 -0
- package/dist/core/engine/lifecycle/start-or-signal-resolution.d.ts +79 -0
- package/dist/core/engine/lifecycle/start-or-signal-resolution.js +60 -0
- package/dist/core/engine/lifecycle/start-or-signal.d.ts +46 -0
- package/dist/core/engine/lifecycle/start-or-signal.js +71 -0
- package/dist/core/engine/lifecycle/start-terminal-conflict-purge.d.ts +39 -0
- package/dist/core/engine/lifecycle/start-terminal-conflict-purge.js +28 -0
- package/dist/core/engine/lifecycle/start.d.ts +6 -6
- package/dist/core/engine/lifecycle/start.js +47 -45
- package/dist/core/engine/lifecycle/transition.js +17 -5
- package/dist/core/engine/lifecycle.d.ts +3 -2
- package/dist/core/engine/lifecycle.js +9 -2
- package/dist/core/engine/list-candidate-resolution.js +2 -2
- package/dist/core/engine/listing.js +10 -6
- package/dist/core/engine/operations-activity.d.ts +4 -11
- package/dist/core/engine/operations-activity.js +22 -49
- package/dist/core/engine/operations-coordination.d.ts +10 -0
- package/dist/core/engine/operations-coordination.js +43 -8
- package/dist/core/engine/operations-router.d.ts +6 -0
- package/dist/core/engine/operations-router.js +2 -0
- package/dist/core/engine/operations-speculate.js +6 -2
- package/dist/core/engine/operations-stream.js +12 -2
- package/dist/core/engine/operations-time.d.ts +4 -2
- package/dist/core/engine/operations-time.js +14 -2
- package/dist/core/engine/operations-wait-condition.d.ts +23 -0
- package/dist/core/engine/operations-wait-condition.js +62 -0
- package/dist/core/engine/ownership-options.d.ts +23 -0
- package/dist/core/engine/ownership-options.js +26 -0
- package/dist/core/engine/payload-size-policy.d.ts +3 -0
- package/dist/core/engine/payload-size-policy.js +4 -0
- package/dist/core/engine/pending-updates.d.ts +17 -0
- package/dist/core/engine/pending-updates.js +33 -11
- package/dist/core/engine/persisted-data-version.d.ts +5 -9
- package/dist/core/engine/persisted-data-version.js +4 -5
- package/dist/core/engine/queries.js +1 -1
- package/dist/core/engine/registration.d.ts +1 -0
- package/dist/core/engine/registration.js +18 -3
- package/dist/core/engine/schedule-handle.d.ts +45 -0
- package/dist/core/engine/schedule-handle.js +26 -0
- package/dist/core/engine/schedule-jitter.d.ts +5 -0
- package/dist/core/engine/schedule-jitter.js +10 -0
- package/dist/core/engine/schedule-run.d.ts +17 -0
- package/dist/core/engine/schedule-run.js +38 -0
- package/dist/core/engine/schedule-timer.js +81 -17
- package/dist/core/engine/schedules.d.ts +8 -5
- package/dist/core/engine/schedules.js +44 -19
- package/dist/core/engine/search-attribute-records.d.ts +4 -0
- package/dist/core/engine/search-attribute-records.js +17 -0
- package/dist/core/engine/second-instance-detector.d.ts +96 -0
- package/dist/core/engine/second-instance-detector.js +108 -0
- package/dist/core/engine/signals.d.ts +38 -0
- package/dist/core/engine/signals.js +55 -19
- package/dist/core/engine/state-utilities.d.ts +49 -2
- package/dist/core/engine/state-utilities.js +114 -3
- package/dist/core/engine/storage-io.d.ts +16 -2
- package/dist/core/engine/storage-io.js +26 -5
- package/dist/core/engine/stream-chunk-loading.d.ts +2 -0
- package/dist/core/engine/stream-chunk-loading.js +24 -1
- package/dist/core/engine/sub-operation.js +22 -3
- package/dist/core/engine/termination/cleanup.d.ts +28 -1
- package/dist/core/engine/termination/cleanup.js +44 -2
- package/dist/core/engine/termination/complete.js +48 -9
- package/dist/core/engine/termination/finalizer-activity.d.ts +53 -0
- package/dist/core/engine/termination/finalizer-activity.js +30 -0
- package/dist/core/engine/termination/finalizer-claim.d.ts +110 -0
- package/dist/core/engine/termination/finalizer-claim.js +80 -0
- package/dist/core/engine/termination/finalizer.d.ts +48 -0
- package/dist/core/engine/termination/finalizer.js +159 -0
- package/dist/core/engine/termination/suspend.d.ts +70 -0
- package/dist/core/engine/termination/suspend.js +41 -0
- package/dist/core/engine/termination.d.ts +5 -2
- package/dist/core/engine/termination.js +6 -0
- package/dist/core/engine/updates.js +5 -25
- package/dist/core/engine/validation/schedule.d.ts +2 -1
- package/dist/core/engine/validation/schedule.js +51 -2
- package/dist/core/engine/validation.js +54 -3
- package/dist/core/engine/waiting-update-response.d.ts +8 -0
- package/dist/core/engine/waiting-update-response.js +22 -0
- package/dist/core/engine/workflow-concurrency.d.ts +10 -0
- package/dist/core/engine/workflow-concurrency.js +136 -0
- package/dist/core/engine/workflow-feed.d.ts +9 -8
- package/dist/core/engine/workflow-feed.js +4 -1
- package/dist/core/engine/workflow-indexes.d.ts +9 -0
- package/dist/core/engine/workflow-indexes.js +10 -0
- package/dist/core/engine/workflow-state-stream.js +33 -13
- package/dist/core/engine/workflow-visibility-queries.d.ts +2 -2
- package/dist/core/engine-helpers.js +1 -0
- package/dist/core/events/activity-events.d.ts +43 -12
- package/dist/core/events/activity-events.js +28 -0
- package/dist/core/events/attribute-events.d.ts +2 -3
- package/dist/core/events/event-map.d.ts +19 -12
- package/dist/core/events/index.d.ts +1 -0
- package/dist/core/events/index.js +1 -0
- package/dist/core/events/schedule-events.d.ts +71 -0
- package/dist/core/events/schedule-events.js +29 -0
- package/dist/core/events/signal-events.d.ts +4 -6
- package/dist/core/events/system-events.d.ts +29 -19
- package/dist/core/events/system-events.js +26 -0
- package/dist/core/events/update-events.d.ts +6 -8
- package/dist/core/events/workflow-events.d.ts +108 -20
- package/dist/core/events/workflow-events.js +35 -0
- package/dist/core/failure-categories.js +5 -17
- package/dist/core/fault-code.d.ts +9 -3
- package/dist/core/fault-code.js +1 -0
- package/dist/core/inline-execution-strategy.context-options.d.ts +69 -0
- package/dist/core/inline-execution-strategy.context-options.js +56 -0
- package/dist/core/inline-execution-strategy.d.ts +31 -36
- package/dist/core/inline-execution-strategy.js +16 -27
- package/dist/core/list-filter-validation.d.ts +1 -1
- package/dist/core/list-filter-validation.js +2 -1
- package/dist/core/payload-size.d.ts +1 -1
- package/dist/core/persisted-data-incompatible-error.d.ts +9 -7
- package/dist/core/review/events.d.ts +6 -8
- package/dist/core/scheduler/scheduler-class.d.ts +10 -1
- package/dist/core/scheduler/scheduler-class.js +38 -11
- package/dist/core/scheduler/timer-batch.js +9 -1
- package/dist/core/scheduler/timer-sources.d.ts +1 -0
- package/dist/core/scheduler/timer-sources.js +11 -5
- package/dist/core/session-state.d.ts +0 -1
- package/dist/core/session-state.js +2 -2
- package/dist/core/start-workflow-validation.d.ts +56 -0
- package/dist/core/start-workflow-validation.js +30 -1
- package/dist/core/step-context.d.ts +10 -6
- package/dist/core/step-context.js +7 -15
- package/dist/core/types/activity-verification.d.ts +67 -0
- package/dist/core/types/activity-verification.js +0 -0
- package/dist/core/types/activity.d.ts +86 -64
- package/dist/core/types/bulk.d.ts +50 -9
- package/dist/core/types/checkpoint.d.ts +44 -8
- package/dist/core/types/identity.d.ts +8 -1
- package/dist/core/types/launch-metadata.d.ts +33 -0
- package/dist/core/types/launch-metadata.js +0 -0
- package/dist/core/types/list-options.d.ts +146 -0
- package/dist/core/types/list-options.js +0 -0
- package/dist/core/types/message-handles.d.ts +25 -0
- package/dist/core/types/options.d.ts +165 -215
- package/dist/core/types/reviews.d.ts +2 -1
- package/dist/core/types/schedules.d.ts +39 -3
- package/dist/core/types/services-resolution.d.ts +47 -0
- package/dist/core/types/services-resolution.js +0 -0
- package/dist/core/types/state.d.ts +11 -11
- package/dist/core/types/workflow-builder-runtime.d.ts +12 -3
- package/dist/core/types/workflow-builder-runtime.js +11 -2
- package/dist/core/types/workflow-builder.d.ts +47 -15
- package/dist/core/types/workflow-concurrency.d.ts +39 -0
- package/dist/core/types/workflow-concurrency.js +0 -0
- package/dist/core/types/workflow-context.d.ts +157 -14
- package/dist/core/types/workflow-definition.d.ts +53 -10
- package/dist/core/types/workflow-function.d.ts +101 -9
- package/dist/core/types/workflow-log.d.ts +98 -0
- package/dist/core/types/workflow-log.js +0 -0
- package/dist/core/types/workflow-registries.d.ts +14 -3
- package/dist/core/types/workflow-registry.d.ts +3 -0
- package/dist/core/types/workflow-snapshot.d.ts +29 -0
- package/dist/core/types/workflow-snapshot.js +0 -0
- package/dist/core/types.d.ts +7 -0
- package/dist/core/types.js +7 -0
- package/dist/core/versioning.d.ts +9 -39
- package/dist/core/versioning.js +2 -12
- package/dist/core/weft-error.d.ts +44 -1
- package/dist/core/weft-error.js +19 -1
- package/dist/core/worker-execution-strategy-options.d.ts +26 -0
- package/dist/core/worker-execution-strategy.js +40 -36
- package/dist/core/worker-inbound-message.d.ts +38 -0
- package/dist/core/worker-inbound-message.js +37 -0
- package/dist/core/worker-log-abuse-counter.d.ts +175 -0
- package/dist/core/worker-log-abuse-counter.js +107 -0
- package/dist/core/worker-message-helpers.d.ts +47 -0
- package/dist/core/worker-message-helpers.js +26 -0
- package/dist/core/worker-protocol-guard.js +1 -1
- package/dist/core/worker-protocol-log.d.ts +56 -0
- package/dist/core/worker-protocol-log.js +18 -0
- package/dist/core/worker-protocol.d.ts +23 -0
- package/dist/core/worker-protocol.js +12 -2
- package/dist/core/workflow-version-tuple.d.ts +3 -9
- package/dist/core/workflow-version-tuple.js +2 -3
- package/dist/diagnostics/doctor.js +6 -3
- package/dist/diagnostics/format.js +3 -8
- package/dist/diagnostics/types.d.ts +5 -5
- package/dist/diagnostics/validate.d.ts +0 -1
- package/dist/diagnostics/version-check.d.ts +1 -1
- package/dist/diagnostics/version-check.js +10 -13
- package/dist/index.d.ts +13 -11
- package/dist/index.js +39 -4
- package/dist/json-schema.js +3 -3
- package/dist/mcp/cli.js +35 -35
- package/dist/mcp/dispatcher.js +1 -1
- package/dist/mcp/http.js +16 -6
- package/dist/mcp/list-filter.js +2 -1
- package/dist/mcp/protocol.d.ts +2 -0
- package/dist/mcp/protocol.js +1 -1
- package/dist/mcp/session.d.ts +16 -0
- package/dist/mcp/session.js +60 -6
- package/dist/mcp/tools.js +73 -6
- package/dist/observability/index.js +2 -2
- package/dist/server/asyncapi-channels.js +5 -2
- package/dist/server/attribute-filters.d.ts +8 -3
- package/dist/server/attribute-filters.js +6 -1
- package/dist/server/authentication/api-key.d.ts +2 -1
- package/dist/server/authentication/api-key.js +5 -2
- package/dist/server/authentication/constant-time-api-key.d.ts +15 -0
- package/dist/server/authentication/constant-time-api-key.js +24 -0
- package/dist/server/authentication/index.d.ts +1 -1
- package/dist/server/authentication/index.js +7 -4
- package/dist/server/authentication/rotating-api-key-store.d.ts +5 -3
- package/dist/server/authentication/rotating-api-key-store.js +19 -11
- package/dist/server/engine-event-feed-backend.d.ts +4 -5
- package/dist/server/fault-to-http.js +8 -1
- package/dist/server/fault-to-json-rpc.js +1 -0
- package/dist/server/fleet-event-feed.d.ts +31 -0
- package/dist/server/fleet-event-feed.js +157 -0
- package/dist/server/handler/index.js +1 -1
- package/dist/server/handler/response-helpers.js +2 -1
- package/dist/server/handler/route-dispatch.d.ts +6 -3
- package/dist/server/handler/route-dispatch.js +2 -2
- package/dist/server/handler.js +31 -31
- package/dist/server/index.d.ts +32 -2
- package/dist/server/index.js +35 -35
- package/dist/server/interactive-operations.js +1 -0
- package/dist/server/json-rpc-transport-helpers.d.ts +1 -0
- package/dist/server/json-rpc-transport-helpers.js +2 -1
- package/dist/server/json-rpc-websocket-runtime.d.ts +11 -2
- package/dist/server/json-rpc-websocket-runtime.js +1 -0
- package/dist/server/json-rpc-websocket-subscriptions.d.ts +10 -0
- package/dist/server/json-rpc-websocket-subscriptions.js +29 -0
- package/dist/server/json-rpc-websocket-types.d.ts +22 -0
- package/dist/server/json-rpc-websocket-types.js +0 -0
- package/dist/server/json-rpc-websocket-validation.js +20 -4
- package/dist/server/json-rpc-websocket.d.ts +2 -43
- package/dist/server/json-rpc-websocket.js +57 -74
- package/dist/server/openapi.d.ts +2 -1
- package/dist/server/openapi.js +1 -3
- package/dist/server/openrpc-document-schema.d.ts +78 -0
- package/dist/server/openrpc-document-schema.js +27 -1
- package/dist/server/openrpc-errors.d.ts +3 -0
- package/dist/server/openrpc-errors.js +2 -1
- package/dist/server/openrpc.js +32 -0
- package/dist/server/operation-catalog/index.d.ts +1 -1
- package/dist/server/operation-catalog/pipeline-helpers.js +1 -0
- package/dist/server/operation-catalog/pipeline-stages.js +26 -12
- package/dist/server/operation-catalog/pipeline.js +8 -1
- package/dist/server/operation-catalog/registry.js +13 -0
- package/dist/server/operation-catalog/types.d.ts +20 -9
- package/dist/server/operation-fault.d.ts +10 -0
- package/dist/server/operation-fault.js +2 -0
- package/dist/server/operation-registry.d.ts +12 -11
- package/dist/server/operation-registry.js +12 -3
- package/dist/server/operations/aggregate-workflows.d.ts +15 -15
- package/dist/server/operations/async-activity.d.ts +2 -2
- package/dist/server/operations/async-activity.js +12 -7
- package/dist/server/operations/bulk-cancel-workflows.d.ts +1 -1
- package/dist/server/operations/bulk-cancel-workflows.js +2 -2
- package/dist/server/operations/bulk-delete-workflows.d.ts +1 -1
- package/dist/server/operations/bulk-delete-workflows.js +2 -2
- package/dist/server/operations/bulk-filter-helpers.d.ts +8 -6
- package/dist/server/operations/bulk-filter-helpers.js +54 -24
- package/dist/server/operations/bulk-mutate-workflow-tags.d.ts +11 -9
- package/dist/server/operations/bulk-mutate-workflow-tags.js +2 -2
- package/dist/server/operations/bulk-operation-helpers.d.ts +2 -2
- package/dist/server/operations/bulk-retry-failed-workflows.d.ts +7 -0
- package/dist/server/operations/bulk-retry-failed-workflows.js +64 -0
- package/dist/server/operations/bulk-signal-workflows.d.ts +11 -9
- package/dist/server/operations/bulk-signal-workflows.js +2 -2
- package/dist/server/operations/cancel-schedule.d.ts +1 -1
- package/dist/server/operations/create-schedule.d.ts +3 -1
- package/dist/server/operations/create-schedule.js +29 -11
- package/dist/server/operations/fleet-events-subscription.d.ts +54 -0
- package/dist/server/operations/fleet-events-subscription.js +99 -0
- package/dist/server/operations/fork-workflow.d.ts +1 -1
- package/dist/server/operations/fork-workflow.js +3 -2
- package/dist/server/operations/get-checkpoint-at.d.ts +1 -1
- package/dist/server/operations/get-registry.d.ts +1 -1
- package/dist/server/operations/get-retention-overview.d.ts +1 -1
- package/dist/server/operations/get-review.d.ts +1 -1
- package/dist/server/operations/get-schedule.d.ts +1 -1
- package/dist/server/operations/get-stream-chunks.d.ts +1 -1
- package/dist/server/operations/get-system-metrics.d.ts +2 -2
- package/dist/server/operations/get-task-diagnostics.d.ts +45 -6
- package/dist/server/operations/get-task-diagnostics.js +101 -7
- package/dist/server/operations/get-update-result.d.ts +1 -1
- package/dist/server/operations/get-workflow-attributes.d.ts +1 -1
- package/dist/server/operations/get-workflow-events.d.ts +1 -1
- package/dist/server/operations/get-workflow-result.d.ts +1 -1
- package/dist/server/operations/get-workflow-timeline.d.ts +1 -1
- package/dist/server/operations/get-workflow.d.ts +1 -1
- package/dist/server/operations/list-checkpoints.d.ts +1 -1
- package/dist/server/operations/list-reviews.d.ts +1 -1
- package/dist/server/operations/list-schedules.d.ts +1 -1
- package/dist/server/operations/list-task-queues.d.ts +2 -2
- package/dist/server/operations/list-workers.d.ts +2 -2
- package/dist/server/operations/list-workflows.d.ts +1 -1
- package/dist/server/operations/operation-helpers.d.ts +16 -1
- package/dist/server/operations/operation-helpers.js +15 -3
- package/dist/server/operations/pause-schedule.d.ts +1 -1
- package/dist/server/operations/purge-workflows.d.ts +5 -5
- package/dist/server/operations/purge-workflows.js +2 -2
- package/dist/server/operations/query-workflow.d.ts +1 -1
- package/dist/server/operations/query-workflow.js +3 -2
- package/dist/server/operations/recover-all.d.ts +1 -1
- package/dist/server/operations/replay-workflow.d.ts +1 -1
- package/dist/server/operations/resume-schedule.d.ts +1 -1
- package/dist/server/operations/resume-workflow.js +2 -2
- package/dist/server/operations/set-workflow-attributes.d.ts +1 -1
- package/dist/server/operations/set-workflow-attributes.js +6 -3
- package/dist/server/operations/signal-workflow.js +8 -3
- package/dist/server/operations/single-workflow-tag-mutation.js +13 -3
- package/dist/server/operations/start-or-signal-workflow.d.ts +44 -0
- package/dist/server/operations/start-or-signal-workflow.js +130 -0
- package/dist/server/operations/start-workflow-options.d.ts +38 -0
- package/dist/server/operations/start-workflow-options.js +63 -0
- package/dist/server/operations/start-workflow-rest-input.d.ts +14 -0
- package/dist/server/operations/start-workflow-rest-input.js +31 -0
- package/dist/server/operations/start-workflow.d.ts +1 -1
- package/dist/server/operations/start-workflow.js +15 -92
- package/dist/server/operations/storage.d.ts +6 -6
- package/dist/server/operations/storage.js +24 -14
- package/dist/server/operations/stream-workflow-sse.d.ts +1 -1
- package/dist/server/operations/submit-review-decision.d.ts +1 -1
- package/dist/server/operations/submit-review-decision.js +6 -3
- package/dist/server/operations/suspend-workflow.d.ts +13 -0
- package/dist/server/operations/suspend-workflow.js +36 -0
- package/dist/server/operations/update-schedule.d.ts +1 -1
- package/dist/server/operations/update-schedule.js +7 -4
- package/dist/server/operations/update-workflow.d.ts +1 -1
- package/dist/server/operations/update-workflow.js +7 -3
- package/dist/server/operations/worker-drain.d.ts +8 -8
- package/dist/server/operations/worker-drain.js +11 -8
- package/dist/server/operations/workflow-events-subscription.d.ts +7 -8
- package/dist/server/operations/workflow-events-subscription.js +43 -8
- package/dist/server/rest-binding.d.ts +21 -8
- package/dist/server/rest-bindings.js +24 -0
- package/dist/server/rest-body.d.ts +10 -0
- package/dist/server/rest-body.js +80 -0
- package/dist/server/runtime/authentication-bridge.d.ts +1 -0
- package/dist/server/runtime/authentication-bridge.js +33 -6
- package/dist/server/runtime/client-visible-events.d.ts +3 -0
- package/dist/server/runtime/client-visible-events.js +65 -0
- package/dist/server/runtime/context.d.ts +7 -0
- package/dist/server/runtime/event-broadcasting.d.ts +6 -0
- package/dist/server/runtime/event-broadcasting.js +72 -38
- package/dist/server/runtime/retry.d.ts +1 -0
- package/dist/server/runtime/retry.js +14 -0
- package/dist/server/runtime/shutdown.d.ts +7 -6
- package/dist/server/runtime/shutdown.js +6 -1
- package/dist/server/runtime/task-dispatch.js +5 -3
- package/dist/server/runtime/task-polling.d.ts +16 -2
- package/dist/server/runtime/task-polling.js +80 -24
- package/dist/server/runtime/task-reconciliation.js +9 -1
- package/dist/server/runtime/task-result-resolution.d.ts +15 -0
- package/dist/server/runtime/task-result-resolution.js +81 -0
- package/dist/server/runtime/websocket-stream.d.ts +20 -1
- package/dist/server/runtime/websocket-stream.js +173 -7
- package/dist/server/runtime/websocket-upgrade.js +22 -3
- package/dist/server/runtime/websocket-worker.d.ts +1 -1
- package/dist/server/runtime/websocket-worker.js +46 -30
- package/dist/server/serve-internals.d.ts +11 -1
- package/dist/server/serve-internals.js +20 -2
- package/dist/server/task-state.d.ts +38 -0
- package/dist/server/task-state.js +28 -0
- package/dist/server/workflow-event-feed.d.ts +36 -115
- package/dist/server/workflow-event-feed.js +92 -27
- package/dist/service-worker/index.js +31 -31
- package/dist/storage/auto.js +1 -1
- package/dist/storage/bun-sql.js +24 -0
- package/dist/storage/capabilities.d.ts +10 -2
- package/dist/storage/capabilities.js +2 -2
- package/dist/storage/compressed-storage.js +1 -1
- package/dist/storage/default-scope.d.ts +7 -4
- package/dist/storage/http.js +2 -2
- package/dist/storage/index.d.ts +81 -4
- package/dist/storage/indexeddb.js +1 -1
- package/dist/storage/interface.d.ts +189 -0
- package/dist/storage/interface.js +1 -1
- package/dist/storage/key-prefixes.d.ts +1 -1
- package/dist/storage/key-prefixes.js +12 -0
- package/dist/storage/lmdb.d.ts +4 -3
- package/dist/storage/lmdb.js +1 -1
- package/dist/storage/memory.js +1 -1
- package/dist/storage/neon-batch.d.ts +30 -0
- package/dist/storage/neon-batch.js +30 -0
- package/dist/storage/neon-value-mapping.d.ts +74 -0
- package/dist/storage/neon-value-mapping.js +23 -0
- package/dist/storage/neon.d.ts +124 -0
- package/dist/storage/neon.js +15 -0
- package/dist/storage/node-sqlite-loader.d.ts +71 -0
- package/dist/storage/node-sqlite-loader.js +41 -0
- package/dist/storage/node-sqlite.d.ts +1 -19
- package/dist/storage/node-sqlite.js +61 -32
- package/dist/storage/postgres-key-value-queries.d.ts +104 -0
- package/dist/storage/postgres-key-value-queries.js +101 -0
- package/dist/storage/resolve.d.ts +2 -165
- package/dist/storage/resolve.js +1 -1
- package/dist/storage/scoped-storage.js +1 -1
- package/dist/storage/storage-configuration.d.ts +209 -0
- package/dist/storage/storage-configuration.js +0 -0
- package/dist/storage/testing.d.ts +168 -0
- package/dist/storage/testing.js +2 -0
- package/dist/storage/text-value-store.d.ts +9 -9
- package/dist/storage/turso.d.ts +8 -0
- package/dist/storage/turso.js +2 -2
- package/dist/storage/typed-storage.js +1 -1
- package/dist/storage/web-extension.js +1 -1
- package/dist/testing/index.js +35 -35
- package/dist/version.d.ts +1 -1
- package/dist/version.js +1 -1
- package/dist/worker/index.js +9 -5
- package/dist/worker/long-poll.js +4 -0
- package/dist/worker/protocol-messages.d.ts +20 -0
- package/dist/worker/protocol-schemas.d.ts +32 -0
- package/dist/worker/protocol-schemas.js +8 -4
- package/dist/worker/protocol-task-result.d.ts +28 -0
- package/dist/worker/protocol-task-result.js +76 -0
- package/dist/worker/protocol.d.ts +4 -15
- package/dist/worker/protocol.js +1 -1
- package/dist/worker/registry/fair-share.d.ts +29 -0
- package/dist/worker/registry/fair-share.js +30 -0
- package/dist/worker/registry/routing.d.ts +18 -0
- package/dist/worker/registry/routing.js +14 -0
- package/dist/worker/registry/types.d.ts +7 -0
- package/dist/worker/registry.d.ts +16 -1
- package/dist/worker/registry.js +24 -36
- package/dist/workers/worker-replay-state.d.ts +32 -0
- package/dist/workers/worker-replay-state.js +35 -0
- package/dist/workers/worker-state-namespace.d.ts +21 -0
- package/dist/workers/worker-state-namespace.js +13 -0
- package/dist/workers/workflow-runner.d.ts +19 -15
- package/dist/workers/workflow-runner.js +72 -60
- package/dist/workers/workflow-worker-entry.js +5 -2
- package/package.json +21 -4
package/dist/worker/registry.js
CHANGED
|
@@ -1,5 +1,10 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
1
|
+
import { FairShareCounters } from "./registry/fair-share.js";
|
|
2
|
+
import {
|
|
3
|
+
matchesWorkerCapabilities,
|
|
4
|
+
pickFairShare,
|
|
5
|
+
pickLeastLoaded,
|
|
6
|
+
pickRoundRobin
|
|
7
|
+
} from "./registry/routing.js";
|
|
3
8
|
import {
|
|
4
9
|
deploymentHealth,
|
|
5
10
|
projectDeploymentSummaries,
|
|
@@ -19,7 +24,7 @@ export class WorkerRegistry {
|
|
|
19
24
|
this.#deploymentDrainStates = new Map;
|
|
20
25
|
this.#policy = options?.policy ?? "least-loaded";
|
|
21
26
|
this.#roundRobinCursor = new Map;
|
|
22
|
-
this.#fairShareCounts = new
|
|
27
|
+
this.#fairShareCounts = new FairShareCounters;
|
|
23
28
|
}
|
|
24
29
|
get policy() {
|
|
25
30
|
return this.#policy;
|
|
@@ -51,7 +56,7 @@ export class WorkerRegistry {
|
|
|
51
56
|
if (info === void 0)
|
|
52
57
|
return;
|
|
53
58
|
this.#workers.delete(workerId);
|
|
54
|
-
this.#fairShareCounts.
|
|
59
|
+
this.#fairShareCounts.purge(workerId);
|
|
55
60
|
for (const [operationId, task] of this.#inFlightTasks)
|
|
56
61
|
if (task.workerId === workerId)
|
|
57
62
|
this.#inFlightTasks.delete(operationId);
|
|
@@ -99,39 +104,23 @@ export class WorkerRegistry {
|
|
|
99
104
|
}
|
|
100
105
|
#selectByPolicy(eligible, queue, activityName, fairShareKey) {
|
|
101
106
|
if (this.#policy === "round-robin")
|
|
102
|
-
return
|
|
107
|
+
return pickRoundRobin(eligible, this.#roundRobinCursor, queue, activityName);
|
|
103
108
|
if (this.#policy === "fair-share" && fairShareKey !== void 0)
|
|
104
|
-
return
|
|
109
|
+
return pickFairShare(eligible, this.#fairShareCounts, fairShareKey);
|
|
105
110
|
return pickLeastLoaded(eligible);
|
|
106
111
|
}
|
|
107
|
-
|
|
108
|
-
const key = `${queue ?? "__default__"}::${activityName}`, cursor = this.#roundRobinCursor.get(key) ?? 0, pick = eligible[cursor % eligible.length];
|
|
109
|
-
this.#roundRobinCursor.set(key, cursor + 1);
|
|
110
|
-
return pick;
|
|
111
|
-
}
|
|
112
|
-
#pickFairShare(eligible, fairShareKey) {
|
|
113
|
-
const winner = eligible.map((worker) => scoreWorker({
|
|
114
|
-
id: worker.id,
|
|
115
|
-
inFlight: worker.inFlight,
|
|
116
|
-
keyLoad: this.#fairShareCounts.get(worker.id)?.get(fairShareKey) ?? 0
|
|
117
|
-
})).reduce((best, candidate) => compareScores(candidate, best) < 0 ? candidate : best);
|
|
118
|
-
return this.#workers.get(winner.id);
|
|
119
|
-
}
|
|
120
|
-
assignTask(workerId, operationId, visibilityTimeout, fairShareKey) {
|
|
112
|
+
assignTask(workerId, operationId, visibilityTimeout, fairShareKey, attemptToken) {
|
|
121
113
|
const deadline = Date.now() + visibilityTimeout, task = {
|
|
122
114
|
operationId,
|
|
123
115
|
workerId,
|
|
124
116
|
deadline,
|
|
125
117
|
visibilityTimeout
|
|
126
118
|
};
|
|
119
|
+
if (attemptToken !== void 0)
|
|
120
|
+
task.attemptToken = attemptToken;
|
|
127
121
|
if (fairShareKey !== void 0) {
|
|
128
122
|
task.fairShareKey = fairShareKey;
|
|
129
|
-
|
|
130
|
-
if (workerCounts === void 0) {
|
|
131
|
-
workerCounts = new Map;
|
|
132
|
-
this.#fairShareCounts.set(workerId, workerCounts);
|
|
133
|
-
}
|
|
134
|
-
workerCounts.set(fairShareKey, (workerCounts.get(fairShareKey) ?? 0) + 1);
|
|
123
|
+
this.#fairShareCounts.increment(workerId, fairShareKey);
|
|
135
124
|
}
|
|
136
125
|
this.#inFlightTasks.set(operationId, task);
|
|
137
126
|
this.taskAssigned(workerId);
|
|
@@ -164,6 +153,14 @@ export class WorkerRegistry {
|
|
|
164
153
|
isAssignedToWorker(operationId, workerId) {
|
|
165
154
|
return this.#inFlightTasks.get(operationId)?.workerId === workerId;
|
|
166
155
|
}
|
|
156
|
+
isAssignedToAttempt(operationId, workerId, attemptToken) {
|
|
157
|
+
const task = this.#inFlightTasks.get(operationId);
|
|
158
|
+
if (task === void 0 || task.workerId !== workerId)
|
|
159
|
+
return !1;
|
|
160
|
+
if (task.attemptToken === void 0 || attemptToken === void 0)
|
|
161
|
+
return !0;
|
|
162
|
+
return task.attemptToken === attemptToken;
|
|
163
|
+
}
|
|
167
164
|
isAssigned(operationId) {
|
|
168
165
|
return this.#inFlightTasks.has(operationId);
|
|
169
166
|
}
|
|
@@ -285,16 +282,7 @@ export class WorkerRegistry {
|
|
|
285
282
|
#releaseFairShare(task) {
|
|
286
283
|
if (task.fairShareKey === void 0)
|
|
287
284
|
return;
|
|
288
|
-
|
|
289
|
-
if (workerCounts === void 0)
|
|
290
|
-
return;
|
|
291
|
-
const current = workerCounts.get(task.fairShareKey) ?? 0, next = Math.max(0, current - 1);
|
|
292
|
-
if (next === 0) {
|
|
293
|
-
workerCounts.delete(task.fairShareKey);
|
|
294
|
-
if (workerCounts.size === 0)
|
|
295
|
-
this.#fairShareCounts.delete(task.workerId);
|
|
296
|
-
} else
|
|
297
|
-
workerCounts.set(task.fairShareKey, next);
|
|
285
|
+
this.#fairShareCounts.release(task.workerId, task.fairShareKey);
|
|
298
286
|
}
|
|
299
287
|
}
|
|
300
288
|
function createDrainRecord(options) {
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The worker-side replay state: the per-run record of cached step outcomes the worker
|
|
3
|
+
* runner rebuilds from a checkpoint, plus the helpers that create it and fold a resumed
|
|
4
|
+
* operation outcome back into it. Extracted from `workflow-runner.ts` so that module
|
|
5
|
+
* stays under the line cap; the runner imports these back and owns the generator-driving
|
|
6
|
+
* flow that consumes them.
|
|
7
|
+
*
|
|
8
|
+
* @module workers/worker-replay-state
|
|
9
|
+
*/
|
|
10
|
+
import type { Checkpoint, OperationOutcome, WorkerReplayOperationFailure } from '../core/types.ts';
|
|
11
|
+
import type { WorkerReplayOperationSignature } from '../core/worker-protocol.ts';
|
|
12
|
+
/** Per-run worker replay state, rebuilt from a checkpoint on every run/recovery. */
|
|
13
|
+
export interface WorkerReplayState {
|
|
14
|
+
checkpoint: Checkpoint;
|
|
15
|
+
accumulatedResults: Map<number, unknown>;
|
|
16
|
+
signatures: Map<number, WorkerReplayOperationSignature>;
|
|
17
|
+
failedOutcomes: Map<number, WorkerReplayOperationFailure>;
|
|
18
|
+
nextStepIndex: number;
|
|
19
|
+
pendingStepIndex: number | null;
|
|
20
|
+
maxProtocolMessageBytes: number | undefined;
|
|
21
|
+
}
|
|
22
|
+
export declare function createReplayState(message: {
|
|
23
|
+
workflowId: string;
|
|
24
|
+
checkpoint?: ArrayBuffer;
|
|
25
|
+
maxProtocolMessageBytes?: number;
|
|
26
|
+
}): WorkerReplayState;
|
|
27
|
+
/**
|
|
28
|
+
* Fold a resumed operation outcome into the replay state at the pending step: cache a
|
|
29
|
+
* success in `accumulatedResults`, a failure in `failedOutcomes` (mutually exclusive),
|
|
30
|
+
* and advance `nextStepIndex` past it. A no-op when there is no pending step or outcome.
|
|
31
|
+
*/
|
|
32
|
+
export declare function recordOperationOutcome(replayState: WorkerReplayState, outcome: OperationOutcome | undefined): void;
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import { createCheckpoint, deserializeCheckpoint } from "../core/checkpoint.js";
|
|
2
|
+
import {
|
|
3
|
+
hydrateCheckpointReplayStateFromPayload,
|
|
4
|
+
readCheckpointReplayPayload
|
|
5
|
+
} from "../core/engine/checkpoint-replay.js";
|
|
6
|
+
function deserializeWorkerCheckpoint(checkpointBytes) {
|
|
7
|
+
const checkpoint = deserializeCheckpoint(new Uint8Array(checkpointBytes));
|
|
8
|
+
return hydrateCheckpointReplayStateFromPayload(checkpoint, readCheckpointReplayPayload(checkpoint));
|
|
9
|
+
}
|
|
10
|
+
export function createReplayState(message) {
|
|
11
|
+
const checkpoint = message.checkpoint && message.checkpoint.byteLength > 0 ? deserializeWorkerCheckpoint(message.checkpoint) : createCheckpoint(message.workflowId, "worker");
|
|
12
|
+
return {
|
|
13
|
+
checkpoint,
|
|
14
|
+
accumulatedResults: new Map(checkpoint.accumulatedResults),
|
|
15
|
+
signatures: new Map(checkpoint.workerReplaySignatures ?? []),
|
|
16
|
+
failedOutcomes: new Map(checkpoint.workerReplayFailures ?? []),
|
|
17
|
+
nextStepIndex: 0,
|
|
18
|
+
pendingStepIndex: null,
|
|
19
|
+
maxProtocolMessageBytes: message.maxProtocolMessageBytes
|
|
20
|
+
};
|
|
21
|
+
}
|
|
22
|
+
export function recordOperationOutcome(replayState, outcome) {
|
|
23
|
+
const pendingStepIndex = replayState.pendingStepIndex;
|
|
24
|
+
if (pendingStepIndex === null || !outcome)
|
|
25
|
+
return;
|
|
26
|
+
if (outcome.status === "failed") {
|
|
27
|
+
replayState.failedOutcomes.set(pendingStepIndex, outcome);
|
|
28
|
+
replayState.accumulatedResults.delete(pendingStepIndex);
|
|
29
|
+
} else {
|
|
30
|
+
replayState.accumulatedResults.set(pendingStepIndex, outcome.value);
|
|
31
|
+
replayState.failedOutcomes.delete(pendingStepIndex);
|
|
32
|
+
}
|
|
33
|
+
replayState.nextStepIndex = pendingStepIndex + 1;
|
|
34
|
+
replayState.pendingStepIndex = null;
|
|
35
|
+
}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The worker-side `ctx.state` namespace. Built locally from a `run` message — worker
|
|
3
|
+
* mode supports `execution`/`workflow` atomic state but rejects `session` state, which
|
|
4
|
+
* needs the engine host. Extracted from `workflow-runner.ts` so that module stays under
|
|
5
|
+
* the line cap.
|
|
6
|
+
*
|
|
7
|
+
* @module workers/worker-state-namespace
|
|
8
|
+
*/
|
|
9
|
+
import type { WorkflowStateNamespace } from '../core/types.ts';
|
|
10
|
+
/** The `run`-message fields the state namespace needs to scope atomic state. */
|
|
11
|
+
export interface WorkerStateNamespaceScope {
|
|
12
|
+
workflowId: string;
|
|
13
|
+
workflowType: string;
|
|
14
|
+
executionStateOwnerId?: string;
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* Build the worker-side {@link WorkflowStateNamespace}. `execution` and `workflow`
|
|
18
|
+
* scopes are supported; `session` throws because session state is an engine-host
|
|
19
|
+
* capability the worker process cannot reach.
|
|
20
|
+
*/
|
|
21
|
+
export declare function createWorkerStateNamespace(message: WorkerStateNamespaceScope): WorkflowStateNamespace;
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { WorkflowAtomicStateHandle } from "../core/context/state-namespace.js";
|
|
2
|
+
export function createWorkerStateNamespace(message) {
|
|
3
|
+
return {
|
|
4
|
+
session: (_key) => {
|
|
5
|
+
throw Error(`Workflow type "${message.workflowType}" called ctx.state.session(), which is not supported in worker execution mode. Use workflowExecutionMode: 'inline' for checkpoint-local session state, or use ctx.state.workflow() or ctx.state.execution() instead.`);
|
|
6
|
+
},
|
|
7
|
+
execution: (key, options) => new WorkflowAtomicStateHandle({
|
|
8
|
+
type: "execution",
|
|
9
|
+
ownerWorkflowId: message.executionStateOwnerId ?? message.workflowId
|
|
10
|
+
}, key, options),
|
|
11
|
+
workflow: (key, options) => new WorkflowAtomicStateHandle({ type: "workflow", workflowType: message.workflowType }, key, options)
|
|
12
|
+
};
|
|
13
|
+
}
|
|
@@ -1,13 +1,17 @@
|
|
|
1
|
-
import type {
|
|
2
|
-
import { type
|
|
1
|
+
import type { ContextOperationRequest } from '../core/context.ts';
|
|
2
|
+
import { type WorkerLoggerReplayState } from '../core/context/workflow-logger.ts';
|
|
3
|
+
import type { OperationOutcome, WorkerOutboundMessage, WorkflowContext, WorkflowLogger, WorkflowLogRecord, WorkflowStateNamespace } from '../core/types.ts';
|
|
4
|
+
import { type WorkerReplayState } from './worker-replay-state.ts';
|
|
3
5
|
/**
|
|
4
6
|
* Subset of {@link WorkflowContext} that the worker-side runner can build
|
|
5
7
|
* locally from the `run` message. Engine-side fields (`executionTimeRemaining`
|
|
6
8
|
* in particular) are stub values because the worker has no clock authority —
|
|
7
9
|
* any user code reading them will see static numbers, not live deadlines.
|
|
8
10
|
*/
|
|
9
|
-
export type WorkerWorkflowContext = Pick<WorkflowContext, 'workflowId' | 'signal' | 'startedAt'> & {
|
|
11
|
+
export type WorkerWorkflowContext = Pick<WorkflowContext, 'workflowId' | 'workflowType' | 'signal' | 'startedAt'> & {
|
|
10
12
|
readonly state: WorkflowStateNamespace;
|
|
13
|
+
readonly log: WorkflowLogger;
|
|
14
|
+
getVersion(changeId: string, minSupported: number, maxSupported: number): Generator<ContextOperationRequest, number, unknown>;
|
|
11
15
|
};
|
|
12
16
|
interface RunMessageShape {
|
|
13
17
|
workflowId: string;
|
|
@@ -21,23 +25,23 @@ interface RunMessageShape {
|
|
|
21
25
|
* Construct the worker-side `ctx` argument that gets passed as the first
|
|
22
26
|
* positional parameter to a registered workflow handler. Engine-side fields
|
|
23
27
|
* not represented in the `run` message are intentionally omitted — only the
|
|
24
|
-
* `Pick`-ed subset above is populated.
|
|
28
|
+
* `Pick`-ed subset above is populated. `forwardLog`, when provided by the worker
|
|
29
|
+
* entry (host has an `onLog` sink), routes `ctx.log` records to the host (#529).
|
|
25
30
|
*/
|
|
26
|
-
export declare function createWorkerWorkflowContext(message: RunMessageShape, controller: AbortController): WorkerWorkflowContext;
|
|
31
|
+
export declare function createWorkerWorkflowContext(message: RunMessageShape, controller: AbortController, getReplayState: () => WorkerLoggerReplayState | undefined, forwardLog?: (record: WorkflowLogRecord) => void, getVersionReplayState?: () => WorkerReplayState | undefined): WorkerWorkflowContext;
|
|
32
|
+
/**
|
|
33
|
+
* Posts a forwarded `ctx.log` message to the host, size-checking against the current
|
|
34
|
+
* `maxProtocolMessageBytes`. Throwing on oversize is intentional — the shared logger
|
|
35
|
+
* factory catches it and falls the record back to the worker console (#529).
|
|
36
|
+
*/
|
|
37
|
+
export type WorkerLogPoster = (message: Extract<WorkerOutboundMessage, {
|
|
38
|
+
type: 'log';
|
|
39
|
+
}>, maxProtocolMessageBytes: number | undefined) => void;
|
|
27
40
|
export interface WorkflowRunnerContext {
|
|
28
41
|
generators: Map<string, AsyncGenerator>;
|
|
29
42
|
abortControllers: Map<string, AbortController>;
|
|
30
43
|
replayStates: Map<string, WorkerReplayState>;
|
|
31
44
|
}
|
|
32
|
-
interface WorkerReplayState {
|
|
33
|
-
checkpoint: Checkpoint;
|
|
34
|
-
accumulatedResults: Map<number, unknown>;
|
|
35
|
-
signatures: Map<number, WorkerReplayOperationSignature>;
|
|
36
|
-
failedOutcomes: Map<number, WorkerReplayOperationFailure>;
|
|
37
|
-
nextStepIndex: number;
|
|
38
|
-
pendingStepIndex: number | null;
|
|
39
|
-
maxProtocolMessageBytes: number | undefined;
|
|
40
|
-
}
|
|
41
45
|
export declare function createWorkflowRunnerContext(): WorkflowRunnerContext;
|
|
42
46
|
export declare function handleRunMessage(context: WorkflowRunnerContext, message: {
|
|
43
47
|
workflowId: string;
|
|
@@ -48,7 +52,7 @@ export declare function handleRunMessage(context: WorkflowRunnerContext, message
|
|
|
48
52
|
executionStateOwnerId?: string;
|
|
49
53
|
deadline?: number;
|
|
50
54
|
headers?: [string, string][];
|
|
51
|
-
}, getWorkflowHandler: (type: string) => ((ctx: WorkerWorkflowContext, input: unknown) => AsyncGenerator) | undefined): Promise<WorkerOutboundMessage>;
|
|
55
|
+
}, getWorkflowHandler: (type: string) => ((ctx: WorkerWorkflowContext, input: unknown) => AsyncGenerator) | undefined, postLog?: WorkerLogPoster): Promise<WorkerOutboundMessage>;
|
|
52
56
|
export declare function handleResumeMessage(context: WorkflowRunnerContext, message: {
|
|
53
57
|
workflowId: string;
|
|
54
58
|
result: unknown;
|
|
@@ -1,36 +1,75 @@
|
|
|
1
|
+
import { copyBytesToArrayBuffer } from "../core/byte-arrays.js";
|
|
2
|
+
import { advanceCheckpoint, serializeCheckpoint } from "../core/checkpoint.js";
|
|
3
|
+
import { resolveWorkflowVersionPatch } from "../core/context/version-patching.js";
|
|
1
4
|
import {
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
5
|
+
createWorkerWorkflowLogger
|
|
6
|
+
} from "../core/context/workflow-logger.js";
|
|
7
|
+
import {
|
|
8
|
+
attachTransientCheckpointReplayPayload,
|
|
9
|
+
pruneCheckpointReplayState
|
|
10
|
+
} from "../core/engine/checkpoint-replay.js";
|
|
8
11
|
import {
|
|
9
12
|
classifyErrorAsFailureCategory,
|
|
10
13
|
errorFromFailedOperationOutcome
|
|
11
14
|
} from "../core/failure-categories.js";
|
|
12
15
|
import {
|
|
13
16
|
createWorkerReplayOperationSignature,
|
|
17
|
+
WORKER_PROTOCOL_VERSION,
|
|
14
18
|
workerReplayOperationSignaturesEqual
|
|
15
19
|
} from "../core/worker-protocol.js";
|
|
16
|
-
|
|
20
|
+
import {
|
|
21
|
+
createReplayState,
|
|
22
|
+
recordOperationOutcome
|
|
23
|
+
} from "./worker-replay-state.js";
|
|
24
|
+
import { createWorkerStateNamespace } from "./worker-state-namespace.js";
|
|
25
|
+
export function createWorkerWorkflowContext(message, controller, getReplayState, forwardLog, getVersionReplayState = () => {
|
|
26
|
+
return;
|
|
27
|
+
}) {
|
|
17
28
|
return {
|
|
18
29
|
workflowId: message.workflowId,
|
|
30
|
+
workflowType: message.workflowType,
|
|
19
31
|
signal: controller.signal,
|
|
20
32
|
startedAt: Date.now(),
|
|
21
|
-
state: createWorkerStateNamespace(message)
|
|
33
|
+
state: createWorkerStateNamespace(message),
|
|
34
|
+
log: createWorkerWorkflowLogger(message.workflowId, message.workflowType, getReplayState, forwardLog),
|
|
35
|
+
getVersion: (changeId, minSupported, maxSupported) => workerGetVersion(message.workflowId, getVersionReplayState, changeId, minSupported, maxSupported)
|
|
22
36
|
};
|
|
23
37
|
}
|
|
24
|
-
function
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
38
|
+
function* workerGetVersion(workflowId, getReplayState, changeId, minSupported, maxSupported) {
|
|
39
|
+
const replayState = getReplayState();
|
|
40
|
+
if (!replayState)
|
|
41
|
+
throw Error(`No active replay state for workflow: ${workflowId}`);
|
|
42
|
+
const stepIndex = replayState.nextStepIndex, resolution = resolveWorkflowVersionPatch(replayState.checkpoint.locals, changeId, minSupported, maxSupported);
|
|
43
|
+
replayState.checkpoint = {
|
|
44
|
+
...replayState.checkpoint,
|
|
45
|
+
locals: resolution.checkpointLocals
|
|
46
|
+
};
|
|
47
|
+
const operation = {
|
|
48
|
+
type: "get-version",
|
|
49
|
+
operationId: crypto.randomUUID(),
|
|
50
|
+
changeId,
|
|
51
|
+
minSupported,
|
|
52
|
+
maxSupported,
|
|
53
|
+
version: resolution.version
|
|
54
|
+
};
|
|
55
|
+
if (!resolution.newlyPinned && !replayState.signatures.has(stepIndex)) {
|
|
56
|
+
replayState.nextStepIndex = stepIndex + 1;
|
|
57
|
+
return resolution.version;
|
|
58
|
+
}
|
|
59
|
+
const result = yield operation;
|
|
60
|
+
replayState.accumulatedResults.delete(stepIndex);
|
|
61
|
+
return result;
|
|
62
|
+
}
|
|
63
|
+
function buildLogForwarder(workflowId, maxProtocolMessageBytes, postLog) {
|
|
64
|
+
if (postLog === void 0)
|
|
65
|
+
return;
|
|
66
|
+
return (record) => {
|
|
67
|
+
postLog({
|
|
68
|
+
type: "log",
|
|
69
|
+
protocolVersion: WORKER_PROTOCOL_VERSION,
|
|
70
|
+
workflowId,
|
|
71
|
+
record
|
|
72
|
+
}, maxProtocolMessageBytes);
|
|
34
73
|
};
|
|
35
74
|
}
|
|
36
75
|
export function createWorkflowRunnerContext() {
|
|
@@ -40,7 +79,7 @@ export function createWorkflowRunnerContext() {
|
|
|
40
79
|
replayStates: new Map
|
|
41
80
|
};
|
|
42
81
|
}
|
|
43
|
-
export async function handleRunMessage(context, message, getWorkflowHandler) {
|
|
82
|
+
export async function handleRunMessage(context, message, getWorkflowHandler, postLog) {
|
|
44
83
|
const handler = getWorkflowHandler(message.workflowType);
|
|
45
84
|
if (!handler)
|
|
46
85
|
return {
|
|
@@ -52,9 +91,8 @@ export async function handleRunMessage(context, message, getWorkflowHandler) {
|
|
|
52
91
|
const controller = new AbortController;
|
|
53
92
|
context.abortControllers.set(message.workflowId, controller);
|
|
54
93
|
try {
|
|
55
|
-
const workerContext = createWorkerWorkflowContext(message, controller), generator = handler(workerContext, message.input);
|
|
56
94
|
context.replayStates.set(message.workflowId, createReplayState(message));
|
|
57
|
-
const step = await generator.next();
|
|
95
|
+
const workerContext = createWorkerWorkflowContext(message, controller, () => context.replayStates.get(message.workflowId), buildLogForwarder(message.workflowId, message.maxProtocolMessageBytes, postLog), () => context.replayStates.get(message.workflowId)), generator = handler(workerContext, message.input), step = await generator.next();
|
|
58
96
|
return await processGeneratorStep(context, message.workflowId, generator, step);
|
|
59
97
|
} catch (error) {
|
|
60
98
|
cleanupWorkflowRunnerState(context, message.workflowId);
|
|
@@ -168,46 +206,21 @@ async function processGeneratorStep(context, workflowId, generator, step) {
|
|
|
168
206
|
failureCategory: "system"
|
|
169
207
|
};
|
|
170
208
|
}
|
|
209
|
+
replayState.checkpoint = pruneWorkerCheckpoint(replayState, replayState.checkpoint, stepIndex);
|
|
171
210
|
} else {
|
|
172
211
|
replayState.signatures.set(stepIndex, signature);
|
|
173
|
-
replayState.checkpoint = advanceWorkerCheckpoint(replayState);
|
|
212
|
+
replayState.checkpoint = advanceWorkerCheckpoint(replayState, stepIndex);
|
|
174
213
|
}
|
|
175
214
|
replayState.pendingStepIndex = stepIndex;
|
|
176
215
|
context.generators.set(workflowId, generator);
|
|
177
216
|
return {
|
|
178
217
|
type: "checkpoint",
|
|
179
218
|
workflowId,
|
|
180
|
-
checkpoint:
|
|
219
|
+
checkpoint: copyBytesToArrayBuffer(serializeCheckpoint(replayState.checkpoint)),
|
|
181
220
|
operationRequest
|
|
182
221
|
};
|
|
183
222
|
}
|
|
184
223
|
}
|
|
185
|
-
function createReplayState(message) {
|
|
186
|
-
const checkpoint = message.checkpoint && message.checkpoint.byteLength > 0 ? deserializeCheckpoint(new Uint8Array(message.checkpoint)) : createCheckpoint(message.workflowId, "worker");
|
|
187
|
-
return {
|
|
188
|
-
checkpoint,
|
|
189
|
-
accumulatedResults: new Map(checkpoint.accumulatedResults),
|
|
190
|
-
signatures: new Map(checkpoint.workerReplaySignatures ?? []),
|
|
191
|
-
failedOutcomes: new Map(checkpoint.workerReplayFailures ?? []),
|
|
192
|
-
nextStepIndex: 0,
|
|
193
|
-
pendingStepIndex: null,
|
|
194
|
-
maxProtocolMessageBytes: message.maxProtocolMessageBytes
|
|
195
|
-
};
|
|
196
|
-
}
|
|
197
|
-
function recordOperationOutcome(replayState, outcome) {
|
|
198
|
-
const pendingStepIndex = replayState.pendingStepIndex;
|
|
199
|
-
if (pendingStepIndex === null || !outcome)
|
|
200
|
-
return;
|
|
201
|
-
if (outcome.status === "failed") {
|
|
202
|
-
replayState.failedOutcomes.set(pendingStepIndex, outcome);
|
|
203
|
-
replayState.accumulatedResults.delete(pendingStepIndex);
|
|
204
|
-
} else {
|
|
205
|
-
replayState.accumulatedResults.set(pendingStepIndex, outcome.value);
|
|
206
|
-
replayState.failedOutcomes.delete(pendingStepIndex);
|
|
207
|
-
}
|
|
208
|
-
replayState.nextStepIndex = pendingStepIndex + 1;
|
|
209
|
-
replayState.pendingStepIndex = null;
|
|
210
|
-
}
|
|
211
224
|
function hasCachedWorkerOutcome(replayState, stepIndex) {
|
|
212
225
|
return replayState.accumulatedResults.has(stepIndex) || replayState.failedOutcomes.has(stepIndex);
|
|
213
226
|
}
|
|
@@ -217,21 +230,20 @@ async function replayGeneratorStep(generator, replayState, stepIndex) {
|
|
|
217
230
|
return await generator.throw(errorFromFailedOperationOutcome(failedOutcome));
|
|
218
231
|
return await generator.next(replayState.accumulatedResults.get(stepIndex));
|
|
219
232
|
}
|
|
220
|
-
function advanceWorkerCheckpoint(replayState) {
|
|
233
|
+
function advanceWorkerCheckpoint(replayState, pendingOperationStep) {
|
|
221
234
|
const advanced = advanceCheckpoint(replayState.checkpoint, replayState.checkpoint.locals, {
|
|
222
235
|
accumulatedResults: [...replayState.accumulatedResults]
|
|
223
|
-
})
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
236
|
+
});
|
|
237
|
+
return pruneWorkerCheckpoint(replayState, advanced, pendingOperationStep);
|
|
238
|
+
}
|
|
239
|
+
function pruneWorkerCheckpoint(replayState, checkpoint, pendingOperationStep) {
|
|
240
|
+
const workerReplayFailures = [...replayState.failedOutcomes], { workerReplayFailures: _oldWorkerReplayFailures, ...checkpointWithoutFailures } = checkpoint, workerCheckpoint = {
|
|
241
|
+
...checkpointWithoutFailures,
|
|
242
|
+
accumulatedResults: [...replayState.accumulatedResults],
|
|
227
243
|
workerReplaySignatures: [...replayState.signatures],
|
|
228
244
|
...workerReplayFailures.length === 0 ? {} : { workerReplayFailures }
|
|
229
|
-
};
|
|
230
|
-
|
|
231
|
-
function toArrayBuffer(bytes) {
|
|
232
|
-
const copy = new Uint8Array(bytes.byteLength);
|
|
233
|
-
copy.set(bytes);
|
|
234
|
-
return copy.buffer;
|
|
245
|
+
}, pruned = pruneCheckpointReplayState(workerCheckpoint, pendingOperationStep);
|
|
246
|
+
return attachTransientCheckpointReplayPayload(pruned.checkpoint, pruned.replayPayload);
|
|
235
247
|
}
|
|
236
248
|
export function cleanupWorkflowRunnerState(context, workflowId) {
|
|
237
249
|
context.generators.delete(workflowId);
|
|
@@ -10,14 +10,17 @@ import {
|
|
|
10
10
|
handleResumeMessage,
|
|
11
11
|
handleRunMessage
|
|
12
12
|
} from "./workflow-runner.js";
|
|
13
|
-
const workerPostMessage = self.postMessage.bind(self), workerClose = "close" in self && typeof self.close === "function" ? self.close.bind(self) : void 0
|
|
13
|
+
const workerPostMessage = self.postMessage.bind(self), workerClose = "close" in self && typeof self.close === "function" ? self.close.bind(self) : void 0, postLogMessage = (message, maxProtocolMessageBytes) => {
|
|
14
|
+
assertWorkerProtocolMessageWithinLimit(message, maxProtocolMessageBytes);
|
|
15
|
+
workerPostMessage(message);
|
|
16
|
+
};
|
|
14
17
|
export function initializeWorkerMessageLoop(getWorkflowHandler) {
|
|
15
18
|
const runnerContext = createWorkflowRunnerContext();
|
|
16
19
|
self.addEventListener("message", async (event) => {
|
|
17
20
|
const message = event.data;
|
|
18
21
|
switch (message.type) {
|
|
19
22
|
case "run": {
|
|
20
|
-
const response = await handleRunMessage(runnerContext, message, getWorkflowHandler);
|
|
23
|
+
const response = await handleRunMessage(runnerContext, message, getWorkflowHandler, message.hostHasLogSink ? postLogMessage : void 0);
|
|
21
24
|
postOutboundMessage(runnerContext, response, message);
|
|
22
25
|
break;
|
|
23
26
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@lostgradient/weft",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.4.0",
|
|
4
4
|
"description": "A Bun-native durable execution engine with pluggable key-value storage.",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"bun",
|
|
@@ -80,6 +80,10 @@
|
|
|
80
80
|
"import": "./dist/storage/text-value-import.js",
|
|
81
81
|
"default": "./dist/storage/text-value-import.js"
|
|
82
82
|
},
|
|
83
|
+
"./storage/testing": {
|
|
84
|
+
"types": "./dist/storage/testing.d.ts",
|
|
85
|
+
"bun": "./dist/storage/testing.js"
|
|
86
|
+
},
|
|
83
87
|
"./storage/sqlite": {
|
|
84
88
|
"types": "./dist/storage/sqlite.d.ts",
|
|
85
89
|
"bun": "./dist/storage/bun-sql.js",
|
|
@@ -107,6 +111,12 @@
|
|
|
107
111
|
"import": "./dist/storage/turso.js",
|
|
108
112
|
"default": "./dist/storage/turso.js"
|
|
109
113
|
},
|
|
114
|
+
"./storage/neon": {
|
|
115
|
+
"types": "./dist/storage/neon.d.ts",
|
|
116
|
+
"bun": "./dist/storage/neon.js",
|
|
117
|
+
"import": "./dist/storage/neon.js",
|
|
118
|
+
"default": "./dist/storage/neon.js"
|
|
119
|
+
},
|
|
110
120
|
"./storage/indexeddb": {
|
|
111
121
|
"types": "./dist/storage/indexeddb.d.ts",
|
|
112
122
|
"import": "./dist/storage/indexeddb.js",
|
|
@@ -202,18 +212,19 @@
|
|
|
202
212
|
"lint": "oxlint --type-aware --tsconfig ./tsconfig.json --report-unused-disable-directives-severity=error && bun run scripts/check-lint-disables.ts && bun run scripts/check-import-cycles.ts && bun run scripts/check-internal-imports.ts && bun run scripts/check-engine-internals-field-access.ts && bun run scripts/check-definition-vocabulary.ts && bun run scripts/check-catalog-completeness.ts && bun run scripts/check-catalog-drift.ts && bun run scripts/check-type-ergonomics.ts",
|
|
203
213
|
"lint:fix": "oxlint --fix --type-aware --tsconfig ./tsconfig.json",
|
|
204
214
|
"markdown-doctests:inventory": "bun run scripts/extract-markdown-doctests.ts inventory",
|
|
205
|
-
"prepack": "bun run
|
|
215
|
+
"prepack": "bun run scripts/run-gates.ts prepack",
|
|
206
216
|
"pr:title": "bun run scripts/pr-title.ts",
|
|
207
217
|
"prepare": "husky",
|
|
208
218
|
"prepublishOnly": "bun run validate",
|
|
209
219
|
"start": "bun run src/index.ts",
|
|
210
|
-
"test": "bun test --timeout 15000 --path-ignore-patterns='src/benchmarks/**' --path-ignore-patterns='examples/checkout/**' --path-ignore-patterns='src/service-worker/service-worker-browser.test.ts' --path-ignore-patterns='src/storage/indexeddb-browser.test.ts' --path-ignore-patterns='src/storage/web-extension-browser.test.ts'
|
|
220
|
+
"test": "bun test --timeout 15000 --path-ignore-patterns='src/benchmarks/**' --path-ignore-patterns='examples/checkout/**' --path-ignore-patterns='src/service-worker/service-worker-browser.test.ts' --path-ignore-patterns='src/storage/indexeddb-browser.test.ts' --path-ignore-patterns='src/storage/web-extension-browser.test.ts'",
|
|
221
|
+
"test:benchmarks": "bun test src/benchmarks --timeout 15000 --parallel=1",
|
|
211
222
|
"test:browser-smoke": "WEFT_BROWSER_SMOKE=1 bun test --timeout 20000 src/service-worker/service-worker-browser.test.ts src/storage/indexeddb-browser.test.ts src/storage/web-extension-browser.test.ts",
|
|
212
223
|
"test:coverage": "bun run scripts/check-coverage.ts",
|
|
213
224
|
"typecheck": "tsc --noEmit",
|
|
214
225
|
"typecheck:package-root": "bun run build && tsc --noEmit -p tsconfig.package-test-d.json",
|
|
215
226
|
"typecheck:tests": "tsc --noEmit -p tsconfig.test-d.json && bun run typecheck:package-root",
|
|
216
|
-
"validate": "bun run
|
|
227
|
+
"validate": "bun run scripts/run-gates.ts validate",
|
|
217
228
|
"validate:package-consumers": "bun run scripts/validate-package-consumers.ts",
|
|
218
229
|
"verify:documentation": "bun run scripts/verify-documentation.ts",
|
|
219
230
|
"verify:exports": "bun run scripts/verify-tree-shaking.ts",
|
|
@@ -248,7 +259,9 @@
|
|
|
248
259
|
"zod": "^4.3.6"
|
|
249
260
|
},
|
|
250
261
|
"devDependencies": {
|
|
262
|
+
"@electric-sql/pglite": "^0.5.1",
|
|
251
263
|
"@libsql/client": "^0.17.2",
|
|
264
|
+
"@neondatabase/serverless": "^1.1.0",
|
|
252
265
|
"@types/bun": "^1.3.13",
|
|
253
266
|
"better-sqlite3": "^12.8.0",
|
|
254
267
|
"chalk": "^5.6.2",
|
|
@@ -267,6 +280,7 @@
|
|
|
267
280
|
},
|
|
268
281
|
"peerDependencies": {
|
|
269
282
|
"@libsql/client": "^0.17.2",
|
|
283
|
+
"@neondatabase/serverless": "^1.1.0",
|
|
270
284
|
"@opentelemetry/api": "^1.0.0",
|
|
271
285
|
"better-sqlite3": "^12.8.0",
|
|
272
286
|
"lmdb": "^3.5.2"
|
|
@@ -275,6 +289,9 @@
|
|
|
275
289
|
"@libsql/client": {
|
|
276
290
|
"optional": true
|
|
277
291
|
},
|
|
292
|
+
"@neondatabase/serverless": {
|
|
293
|
+
"optional": true
|
|
294
|
+
},
|
|
278
295
|
"@opentelemetry/api": {
|
|
279
296
|
"optional": true
|
|
280
297
|
},
|