@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
|
@@ -51,8 +51,8 @@ export type ScheduleSpec = {
|
|
|
51
51
|
/**
|
|
52
52
|
* Options accepted by {@link Engine.schedule}. `id` assigns a deterministic
|
|
53
53
|
* schedule identifier; `overlap` controls what happens when a tick fires while a
|
|
54
|
-
* previous run is still active; `backfill`
|
|
55
|
-
*
|
|
54
|
+
* previous run is still active; `backfill` controls missed ticks after downtime;
|
|
55
|
+
* `jitter` deterministically spreads each occurrence's effective dispatch time.
|
|
56
56
|
*
|
|
57
57
|
* @example
|
|
58
58
|
* ```ts
|
|
@@ -60,7 +60,12 @@ export type ScheduleSpec = {
|
|
|
60
60
|
*
|
|
61
61
|
* const engine = new Engine();
|
|
62
62
|
* engine.register(workflow({ name: 'report' }).execute(async function* () { return 'ok'; }));
|
|
63
|
-
* const options: ScheduleOptions = {
|
|
63
|
+
* const options: ScheduleOptions = {
|
|
64
|
+
* id: 'daily-report',
|
|
65
|
+
* overlap: 'skip',
|
|
66
|
+
* backfill: false,
|
|
67
|
+
* jitter: '30s',
|
|
68
|
+
* };
|
|
64
69
|
* const handle = await engine.schedule('report', null, '0 9 * * *', options);
|
|
65
70
|
* void handle;
|
|
66
71
|
* ```
|
|
@@ -68,7 +73,23 @@ export type ScheduleSpec = {
|
|
|
68
73
|
export interface ScheduleOptions {
|
|
69
74
|
id?: string;
|
|
70
75
|
overlap?: ScheduleOverlapPolicy;
|
|
76
|
+
/**
|
|
77
|
+
* When `false` (the default), a tick that is more than one second late is
|
|
78
|
+
* skipped instead of backfilled. Skipped ticks increment
|
|
79
|
+
* {@link ScheduleState.missedFireCount}, update
|
|
80
|
+
* {@link ScheduleState.lastMissedFireAt}, and emit a
|
|
81
|
+
* `ScheduleMissedFireEvent`.
|
|
82
|
+
*
|
|
83
|
+
* When `true`, missed ticks are processed immediately, up to the engine's
|
|
84
|
+
* per-tick backfill cap.
|
|
85
|
+
*/
|
|
71
86
|
backfill?: boolean;
|
|
87
|
+
/**
|
|
88
|
+
* Deterministic per-occurrence delay applied to the effective dispatch timer.
|
|
89
|
+
* The persisted {@link ScheduleState.nextFireAt} remains the nominal
|
|
90
|
+
* pre-jitter occurrence timestamp.
|
|
91
|
+
*/
|
|
92
|
+
jitter?: Duration;
|
|
72
93
|
}
|
|
73
94
|
/**
|
|
74
95
|
* Declarative recurring schedule definition returned by {@link schedule}. Supply
|
|
@@ -99,6 +120,7 @@ export type ScheduleDefinition<TInput = unknown> = ScheduleSpec & {
|
|
|
99
120
|
id?: string;
|
|
100
121
|
overlapPolicy?: ScheduleOverlapPolicy;
|
|
101
122
|
backfill?: boolean;
|
|
123
|
+
jitter?: Duration;
|
|
102
124
|
};
|
|
103
125
|
/**
|
|
104
126
|
* Create a recurring schedule definition for `engine.schedule(definition)`.
|
|
@@ -134,9 +156,16 @@ export interface ScheduleState {
|
|
|
134
156
|
status: ScheduleStatus;
|
|
135
157
|
overlap: ScheduleOverlapPolicy;
|
|
136
158
|
backfill: boolean;
|
|
159
|
+
/** Normalized deterministic jitter window in milliseconds. */
|
|
160
|
+
jitterMs?: number;
|
|
137
161
|
createdAt: number;
|
|
138
162
|
updatedAt: number;
|
|
163
|
+
/** Most recent occurrence that started a scheduled workflow. */
|
|
139
164
|
lastFireAt?: number;
|
|
165
|
+
/** Most recent occurrence skipped because a non-backfill timer was late. */
|
|
166
|
+
lastMissedFireAt?: number;
|
|
167
|
+
/** Lifetime count of occurrences skipped because a non-backfill timer was late. */
|
|
168
|
+
missedFireCount: number;
|
|
140
169
|
nextFireAt: number | null;
|
|
141
170
|
currentWorkflowId?: string;
|
|
142
171
|
queuedRuns: number;
|
|
@@ -157,9 +186,16 @@ export interface ScheduleSummary {
|
|
|
157
186
|
status: ScheduleStatus;
|
|
158
187
|
overlap: ScheduleOverlapPolicy;
|
|
159
188
|
backfill: boolean;
|
|
189
|
+
/** Normalized deterministic jitter window in milliseconds. */
|
|
190
|
+
jitterMs?: number;
|
|
160
191
|
createdAt: number;
|
|
161
192
|
updatedAt: number;
|
|
193
|
+
/** Most recent occurrence that started a scheduled workflow. */
|
|
162
194
|
lastFireAt?: number;
|
|
195
|
+
/** Most recent occurrence skipped because a non-backfill timer was late. */
|
|
196
|
+
lastMissedFireAt?: number;
|
|
197
|
+
/** Lifetime count of occurrences skipped because a non-backfill timer was late. */
|
|
198
|
+
missedFireCount: number;
|
|
163
199
|
nextFireAt: number | null;
|
|
164
200
|
currentWorkflowId?: string;
|
|
165
201
|
queuedRuns: number;
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Result of {@link EngineOptions.resolveWorkflowServices}. An explicit union
|
|
3
|
+
* rather than a nullable return: `'unavailable'` is a deliberate, named outcome
|
|
4
|
+
* (the run's dependencies cannot be rebuilt in this process) that fails just
|
|
5
|
+
* that recovered run — it does not overload the resolved value with a lifecycle
|
|
6
|
+
* signal.
|
|
7
|
+
*
|
|
8
|
+
* @example
|
|
9
|
+
* ```ts
|
|
10
|
+
* import { type WorkflowServicesResolution } from '@lostgradient/weft';
|
|
11
|
+
*
|
|
12
|
+
* const ok: WorkflowServicesResolution = {
|
|
13
|
+
* status: 'available',
|
|
14
|
+
* services: { db: { query: () => [] } },
|
|
15
|
+
* };
|
|
16
|
+
* const no: WorkflowServicesResolution = { status: 'unavailable', reason: 'no config' };
|
|
17
|
+
* void ok;
|
|
18
|
+
* void no;
|
|
19
|
+
* ```
|
|
20
|
+
*/
|
|
21
|
+
export type WorkflowServicesResolution<TServices = unknown> = {
|
|
22
|
+
status: 'available';
|
|
23
|
+
services: TServices;
|
|
24
|
+
} | {
|
|
25
|
+
status: 'unavailable';
|
|
26
|
+
reason: string;
|
|
27
|
+
};
|
|
28
|
+
/**
|
|
29
|
+
* Information passed to {@link EngineOptions.resolveWorkflowServices} for each
|
|
30
|
+
* recovered workflow. `input` is the original durable launch input, available
|
|
31
|
+
* at resume time — typically enough to rebuild the run's dependencies (tenant,
|
|
32
|
+
* model, tool registry) without a side table.
|
|
33
|
+
*
|
|
34
|
+
* @example
|
|
35
|
+
* ```ts
|
|
36
|
+
* import { type WorkflowServicesResolverInfo } from '@lostgradient/weft';
|
|
37
|
+
*
|
|
38
|
+
* function describe(info: WorkflowServicesResolverInfo): string {
|
|
39
|
+
* return `${info.workflowType}/${info.workflowId}`;
|
|
40
|
+
* }
|
|
41
|
+
* ```
|
|
42
|
+
*/
|
|
43
|
+
export interface WorkflowServicesResolverInfo {
|
|
44
|
+
workflowId: string;
|
|
45
|
+
workflowType: string;
|
|
46
|
+
input: unknown;
|
|
47
|
+
}
|
|
File without changes
|
|
@@ -42,7 +42,17 @@ export interface WorkflowState {
|
|
|
42
42
|
* leaves this `undefined`).
|
|
43
43
|
*/
|
|
44
44
|
terminationReason?: TerminationReason;
|
|
45
|
-
|
|
45
|
+
/**
|
|
46
|
+
* The `(workflowVersion, agentVersion?, toolVersions?)` tuple captured for
|
|
47
|
+
* this workflow. This is the single canonical representation of version
|
|
48
|
+
* metadata on the state: it shares the {@link WorkflowVersionTuple} shape the
|
|
49
|
+
* event log records, so the two cannot drift, and it is rewritten on every
|
|
50
|
+
* versioned persist. `workflowVersion` is always present;
|
|
51
|
+
* `agentVersion`/`toolVersions` are present only when the workflow declares
|
|
52
|
+
* them. Resuming compares this against the currently registered definition to
|
|
53
|
+
* detect version drift.
|
|
54
|
+
*/
|
|
55
|
+
versionTuple: WorkflowVersionTuple;
|
|
46
56
|
/**
|
|
47
57
|
* Owner identifier for execution-scoped durable state. Top-level workflows
|
|
48
58
|
* own their own execution state; durable child workflows inherit the
|
|
@@ -50,16 +60,6 @@ export interface WorkflowState {
|
|
|
50
60
|
* tree.
|
|
51
61
|
*/
|
|
52
62
|
executionStateOwnerId?: string;
|
|
53
|
-
/**
|
|
54
|
-
* Legacy version tuple metadata retained so existing persisted workflow
|
|
55
|
-
* states can still be decoded and compared during recovery.
|
|
56
|
-
*/
|
|
57
|
-
agentVersion?: string;
|
|
58
|
-
/**
|
|
59
|
-
* Legacy version tuple metadata retained so existing persisted workflow
|
|
60
|
-
* states can still be decoded and compared during recovery.
|
|
61
|
-
*/
|
|
62
|
-
toolVersions?: string[];
|
|
63
63
|
createdAt: number;
|
|
64
64
|
startedAt?: number;
|
|
65
65
|
updatedAt: number;
|
|
@@ -11,7 +11,9 @@ import type { RetentionPolicy } from './retry-retention.ts';
|
|
|
11
11
|
import type { SearchAttributeSchema } from './search-attributes.ts';
|
|
12
12
|
import type { ActivityMap, ActivityMapInput, QueryMap, SignalMap, UpdateMap } from './workflow-builder-helpers.ts';
|
|
13
13
|
import type { BuiltWorkflowDefinition } from './workflow-builder.ts';
|
|
14
|
+
import type { WorkflowConcurrencyOptions } from './workflow-concurrency.ts';
|
|
14
15
|
import type { WorkflowFunction } from './workflow-function.ts';
|
|
16
|
+
import type { AnyActivityDefinition } from './workflow-registries.ts';
|
|
15
17
|
/**
|
|
16
18
|
* Thrown by the chained workflow builder for runtime invariants that the type
|
|
17
19
|
* system cannot reliably catch — duplicate chain calls, key/name collisions
|
|
@@ -44,7 +46,7 @@ export declare class WorkflowBuilderError extends WeftError<'WorkflowBuilderErro
|
|
|
44
46
|
/**
|
|
45
47
|
* Initial options accepted by the builder-form `workflow({ name, ... })` call.
|
|
46
48
|
* Extra metadata fields (`version`, `description`, `tags`, `retention`,
|
|
47
|
-
* `
|
|
49
|
+
* `concurrency`, `inputSchema`, `outputSchema`, `constraints`) are passed through
|
|
48
50
|
* onto the returned {@link BuiltWorkflowDefinition} when `.execute(fn)` runs.
|
|
49
51
|
* Only `name` is required.
|
|
50
52
|
*
|
|
@@ -60,14 +62,20 @@ export declare class WorkflowBuilderError extends WeftError<'WorkflowBuilderErro
|
|
|
60
62
|
* void welcome;
|
|
61
63
|
* ```
|
|
62
64
|
*/
|
|
63
|
-
export interface WorkflowBuilderOptions<TName extends string = string> {
|
|
65
|
+
export interface WorkflowBuilderOptions<TName extends string = string, TConcurrencyInput = unknown> {
|
|
64
66
|
name: TName;
|
|
65
67
|
version?: string;
|
|
66
68
|
description?: string;
|
|
67
69
|
tags?: ReadonlyArray<string>;
|
|
68
70
|
retention?: RetentionPolicy;
|
|
71
|
+
concurrency?: WorkflowConcurrencyOptions<TConcurrencyInput>;
|
|
69
72
|
constraints?: ConstraintDefinition[];
|
|
70
|
-
|
|
73
|
+
/**
|
|
74
|
+
* Definition-level teardown activity driven by the engine after a
|
|
75
|
+
* `cancelled`/`timed-out` terminal (issue #446). See
|
|
76
|
+
* {@link WorkflowDefinition.finalizer}.
|
|
77
|
+
*/
|
|
78
|
+
finalizer?: AnyActivityDefinition;
|
|
71
79
|
inputSchema?: DefinitionSchema<unknown, unknown>;
|
|
72
80
|
outputSchema?: DefinitionSchema<unknown, unknown>;
|
|
73
81
|
/**
|
|
@@ -93,5 +101,6 @@ export declare class WorkflowBuilderImpl<TName extends string> {
|
|
|
93
101
|
updates: (map: UpdateMap) => this;
|
|
94
102
|
queries: (map: QueryMap) => this;
|
|
95
103
|
searchAttributes: (schema: SearchAttributeSchema) => this;
|
|
104
|
+
services: () => this;
|
|
96
105
|
execute: (fn: WorkflowFunction) => BuiltWorkflowDefinition<unknown, unknown, TName, ActivityMap, SignalMap, UpdateMap, QueryMap, SearchAttributeSchema>;
|
|
97
106
|
}
|
|
@@ -16,7 +16,8 @@ export class WorkflowBuilderImpl {
|
|
|
16
16
|
signals: !1,
|
|
17
17
|
updates: !1,
|
|
18
18
|
queries: !1,
|
|
19
|
-
searchAttributes: !1
|
|
19
|
+
searchAttributes: !1,
|
|
20
|
+
services: !1
|
|
20
21
|
};
|
|
21
22
|
#executed = !1;
|
|
22
23
|
#activities = {};
|
|
@@ -66,6 +67,11 @@ export class WorkflowBuilderImpl {
|
|
|
66
67
|
this.#searchAttributes = { ...schema };
|
|
67
68
|
return this;
|
|
68
69
|
};
|
|
70
|
+
services = () => {
|
|
71
|
+
this.#assertOpen("services");
|
|
72
|
+
this.#markCalled("services");
|
|
73
|
+
return this;
|
|
74
|
+
};
|
|
69
75
|
execute = (fn) => {
|
|
70
76
|
this.#assertOpen("execute");
|
|
71
77
|
this.#executed = !0;
|
|
@@ -81,8 +87,11 @@ export class WorkflowBuilderImpl {
|
|
|
81
87
|
...this.#options.description !== void 0 ? { description: this.#options.description } : {},
|
|
82
88
|
...this.#options.tags !== void 0 ? { tags: this.#options.tags } : {},
|
|
83
89
|
...this.#options.retention !== void 0 ? { retention: this.#options.retention } : {},
|
|
90
|
+
...this.#options.concurrency !== void 0 ? {
|
|
91
|
+
concurrency: deepFreeze(clonePlain(this.#options.concurrency))
|
|
92
|
+
} : {},
|
|
84
93
|
...this.#options.constraints !== void 0 ? { constraints: this.#options.constraints } : {},
|
|
85
|
-
...this.#options.
|
|
94
|
+
...this.#options.finalizer !== void 0 ? { finalizer: this.#options.finalizer } : {},
|
|
86
95
|
...this.#options.inputSchema !== void 0 ? { inputSchema: this.#options.inputSchema } : {},
|
|
87
96
|
...this.#options.outputSchema !== void 0 ? { outputSchema: this.#options.outputSchema } : {}
|
|
88
97
|
};
|
|
@@ -39,7 +39,7 @@ import type { WorkflowDefinition, WorkflowOperation } from './workflow-function.
|
|
|
39
39
|
* void job;
|
|
40
40
|
* ```
|
|
41
41
|
*/
|
|
42
|
-
export type WorkflowGenerator<TInput, TOutput, TActivities extends ActivityMap, TSignals extends SignalMap, TUpdates extends UpdateMap, TQueries extends QueryMap, TSearchAttributes extends SearchAttributeSchema> = (context: WorkflowContextOf<TActivities, TSignals, TUpdates, TQueries, TSearchAttributes>, input: TInput) => AsyncGenerator<unknown, TOutput, unknown>;
|
|
42
|
+
export type WorkflowGenerator<TInput, TOutput, TActivities extends ActivityMap, TSignals extends SignalMap, TUpdates extends UpdateMap, TQueries extends QueryMap, TSearchAttributes extends SearchAttributeSchema, TServices = unknown> = (context: WorkflowContextOf<TActivities, TSignals, TUpdates, TQueries, TSearchAttributes, TServices>, input: TInput) => AsyncGenerator<unknown, TOutput, unknown>;
|
|
43
43
|
/**
|
|
44
44
|
* Convenience alias for the workflow-scoped `WorkflowContext` projection. The
|
|
45
45
|
* underlying `WorkflowContext` interface accepts the same five generic
|
|
@@ -47,12 +47,13 @@ export type WorkflowGenerator<TInput, TOutput, TActivities extends ActivityMap,
|
|
|
47
47
|
* `TSearchAttributes`), and the builder threads its normalised maps through
|
|
48
48
|
* this alias so `.execute(fn)` sees the right `ctx` shape inside `fn`.
|
|
49
49
|
*
|
|
50
|
-
*
|
|
51
|
-
* interface's generics all default to
|
|
52
|
-
* overloads de-prioritise to `never` and
|
|
53
|
-
* overloads
|
|
50
|
+
* Bare-`WorkflowContext` callers (no declared activity/signal/etc. maps)
|
|
51
|
+
* typecheck because the interface's generics all default to permissive shapes:
|
|
52
|
+
* the typed overloads de-prioritise to `never` and the dynamic string-name /
|
|
53
|
+
* callable overloads match instead. This permissive path is current API — it is
|
|
54
|
+
* how untyped, ad-hoc-name authoring is supported, not a compatibility shim.
|
|
54
55
|
*/
|
|
55
|
-
export type WorkflowContextOf<TActivities extends ActivityMap = ActivityMap, TSignals extends SignalMap = SignalMap, TUpdates extends UpdateMap = UpdateMap, TQueries extends QueryMap = QueryMap, TSearchAttributes extends SearchAttributeSchema = SearchAttributeSchema> = WorkflowContext<TActivities, TSignals, TUpdates, TQueries, TSearchAttributes>;
|
|
56
|
+
export type WorkflowContextOf<TActivities extends ActivityMap = ActivityMap, TSignals extends SignalMap = SignalMap, TUpdates extends UpdateMap = UpdateMap, TQueries extends QueryMap = QueryMap, TSearchAttributes extends SearchAttributeSchema = SearchAttributeSchema, TServices = unknown> = WorkflowContext<TActivities, TSignals, TUpdates, TQueries, TSearchAttributes, TServices>;
|
|
56
57
|
/**
|
|
57
58
|
* Tracks which `WorkflowBuilder` chain methods have already been called. Each
|
|
58
59
|
* call flips its flag from `false` to `true`; the method's type becomes `never`
|
|
@@ -81,6 +82,7 @@ export interface BuilderState {
|
|
|
81
82
|
readonly updates: boolean;
|
|
82
83
|
readonly queries: boolean;
|
|
83
84
|
readonly searchAttributes: boolean;
|
|
85
|
+
readonly services?: boolean | undefined;
|
|
84
86
|
}
|
|
85
87
|
/**
|
|
86
88
|
* Initial builder state — every chain method is still available. A fresh
|
|
@@ -101,6 +103,7 @@ export interface InitialBuilderState {
|
|
|
101
103
|
readonly updates: false;
|
|
102
104
|
readonly queries: false;
|
|
103
105
|
readonly searchAttributes: false;
|
|
106
|
+
readonly services?: false | undefined;
|
|
104
107
|
}
|
|
105
108
|
/**
|
|
106
109
|
* Flip one builder-state flag from `false` to `true`. Each chain method on
|
|
@@ -117,7 +120,9 @@ export interface InitialBuilderState {
|
|
|
117
120
|
* void _check;
|
|
118
121
|
* ```
|
|
119
122
|
*/
|
|
120
|
-
export type MarkBuilderState<S extends BuilderState, K extends keyof BuilderState> = {
|
|
123
|
+
export type MarkBuilderState<S extends BuilderState, K extends keyof BuilderState> = K extends 'services' ? Omit<S, 'services'> & {
|
|
124
|
+
readonly services: true;
|
|
125
|
+
} : {
|
|
121
126
|
readonly [P in keyof S]: P extends K ? true : S[P];
|
|
122
127
|
};
|
|
123
128
|
declare const workflowAlreadyRegisteredBrand: unique symbol;
|
|
@@ -175,7 +180,7 @@ export interface WorkflowAlreadyRegistered<TName extends string> {
|
|
|
175
180
|
* void welcome;
|
|
176
181
|
* ```
|
|
177
182
|
*/
|
|
178
|
-
export interface WorkflowBuilder<TName extends string, TActivities extends ActivityMap, TSignals extends SignalMap, TUpdates extends UpdateMap, TQueries extends QueryMap, TSearchAttributes extends SearchAttributeSchema, TState extends BuilderState> {
|
|
183
|
+
export interface WorkflowBuilder<TName extends string, TActivities extends ActivityMap, TSignals extends SignalMap, TUpdates extends UpdateMap, TQueries extends QueryMap, TSearchAttributes extends SearchAttributeSchema, TState extends BuilderState, TServices = unknown> {
|
|
179
184
|
/**
|
|
180
185
|
* Declare the activity table this workflow can dispatch with
|
|
181
186
|
* `ctx.run('name', input)`. The outer object key is the canonical activity
|
|
@@ -195,7 +200,7 @@ export interface WorkflowBuilder<TName extends string, TActivities extends Activ
|
|
|
195
200
|
* void welcome;
|
|
196
201
|
* ```
|
|
197
202
|
*/
|
|
198
|
-
activities: TState['activities'] extends true ? never : <TInput extends ActivityMapInput>(map: TInput) => WorkflowBuilder<TName, NormalizeActivities<TInput>, TSignals, TUpdates, TQueries, TSearchAttributes, MarkBuilderState<TState, 'activities'
|
|
203
|
+
activities: TState['activities'] extends true ? never : <TInput extends ActivityMapInput>(map: TInput) => WorkflowBuilder<TName, NormalizeActivities<TInput>, TSignals, TUpdates, TQueries, TSearchAttributes, MarkBuilderState<TState, 'activities'>, TServices>;
|
|
199
204
|
/**
|
|
200
205
|
* Declare the signals this workflow accepts so `ctx.waitForSignal('name')`
|
|
201
206
|
* autocompletes and types the payload. Type-safety and introspection
|
|
@@ -214,7 +219,7 @@ export interface WorkflowBuilder<TName extends string, TActivities extends Activ
|
|
|
214
219
|
* void approval;
|
|
215
220
|
* ```
|
|
216
221
|
*/
|
|
217
|
-
signals: TState['signals'] extends true ? never : <TInput extends SignalMap>(map: TInput) => WorkflowBuilder<TName, TActivities, TInput, TUpdates, TQueries, TSearchAttributes, MarkBuilderState<TState, 'signals'
|
|
222
|
+
signals: TState['signals'] extends true ? never : <TInput extends SignalMap>(map: TInput) => WorkflowBuilder<TName, TActivities, TInput, TUpdates, TQueries, TSearchAttributes, MarkBuilderState<TState, 'signals'>, TServices>;
|
|
218
223
|
/**
|
|
219
224
|
* Declare the request-response update handlers this workflow accepts.
|
|
220
225
|
* Type-safety and introspection metadata only — the update-dispatch path
|
|
@@ -230,7 +235,7 @@ export interface WorkflowBuilder<TName extends string, TActivities extends Activ
|
|
|
230
235
|
* void order;
|
|
231
236
|
* ```
|
|
232
237
|
*/
|
|
233
|
-
updates: TState['updates'] extends true ? never : <TInput extends UpdateMap>(map: TInput) => WorkflowBuilder<TName, TActivities, TSignals, TInput, TQueries, TSearchAttributes, MarkBuilderState<TState, 'updates'
|
|
238
|
+
updates: TState['updates'] extends true ? never : <TInput extends UpdateMap>(map: TInput) => WorkflowBuilder<TName, TActivities, TSignals, TInput, TQueries, TSearchAttributes, MarkBuilderState<TState, 'updates'>, TServices>;
|
|
234
239
|
/**
|
|
235
240
|
* Declare the read-only query handlers this workflow accepts. Type-safety
|
|
236
241
|
* and introspection metadata only — `.queries` does not introduce new
|
|
@@ -246,7 +251,7 @@ export interface WorkflowBuilder<TName extends string, TActivities extends Activ
|
|
|
246
251
|
* void job;
|
|
247
252
|
* ```
|
|
248
253
|
*/
|
|
249
|
-
queries: TState['queries'] extends true ? never : <TInput extends QueryMap>(map: TInput) => WorkflowBuilder<TName, TActivities, TSignals, TUpdates, TInput, TSearchAttributes, MarkBuilderState<TState, 'queries'
|
|
254
|
+
queries: TState['queries'] extends true ? never : <TInput extends QueryMap>(map: TInput) => WorkflowBuilder<TName, TActivities, TSignals, TUpdates, TInput, TSearchAttributes, MarkBuilderState<TState, 'queries'>, TServices>;
|
|
250
255
|
/**
|
|
251
256
|
* Declare the search-attribute schema this workflow populates via
|
|
252
257
|
* `ctx.setAttribute('key', value)`. Each entry pins the attribute's value
|
|
@@ -266,7 +271,32 @@ export interface WorkflowBuilder<TName extends string, TActivities extends Activ
|
|
|
266
271
|
* void order;
|
|
267
272
|
* ```
|
|
268
273
|
*/
|
|
269
|
-
searchAttributes: TState['searchAttributes'] extends true ? never : <TInput extends SearchAttributeSchema>(schema: TInput) => WorkflowBuilder<TName, TActivities, TSignals, TUpdates, TQueries, TInput, MarkBuilderState<TState, 'searchAttributes'
|
|
274
|
+
searchAttributes: TState['searchAttributes'] extends true ? never : <TInput extends SearchAttributeSchema>(schema: TInput) => WorkflowBuilder<TName, TActivities, TSignals, TUpdates, TQueries, TInput, MarkBuilderState<TState, 'searchAttributes'>, TServices>;
|
|
275
|
+
/**
|
|
276
|
+
* Declare the per-run services type exposed at `ctx.services`. This is a
|
|
277
|
+
* type-only marker: services remain supplied at launch through
|
|
278
|
+
* `engine.start(type, input, { services })` and re-provided on recovery by
|
|
279
|
+
* `EngineOptions.resolveWorkflowServices`. Calling `.services` twice before
|
|
280
|
+
* `.execute()` is a type error and throws `WorkflowBuilderError` at runtime.
|
|
281
|
+
*
|
|
282
|
+
* @example
|
|
283
|
+
* ```ts
|
|
284
|
+
* import { workflow } from '@lostgradient/weft';
|
|
285
|
+
*
|
|
286
|
+
* interface Services {
|
|
287
|
+
* repository: { load(id: string): Promise<string> };
|
|
288
|
+
* }
|
|
289
|
+
*
|
|
290
|
+
* const job = workflow({ name: 'job' })
|
|
291
|
+
* .services<Services>()
|
|
292
|
+
* .execute(async function* (ctx, id: string) {
|
|
293
|
+
* const services = ctx.services;
|
|
294
|
+
* return services === undefined ? id : yield* ctx.run(() => services.repository.load(id));
|
|
295
|
+
* });
|
|
296
|
+
* void job;
|
|
297
|
+
* ```
|
|
298
|
+
*/
|
|
299
|
+
services: TState['services'] extends true ? never : <TInput>() => WorkflowBuilder<TName, TActivities, TSignals, TUpdates, TQueries, TSearchAttributes, MarkBuilderState<TState, 'services'>, TInput>;
|
|
270
300
|
/**
|
|
271
301
|
* Seal the builder and produce a `BuiltWorkflowDefinition`. The generator's
|
|
272
302
|
* `input` and `output` types are re-inferred from `fn`'s signature, so the
|
|
@@ -287,7 +317,7 @@ export interface WorkflowBuilder<TName extends string, TActivities extends Activ
|
|
|
287
317
|
* void welcome;
|
|
288
318
|
* ```
|
|
289
319
|
*/
|
|
290
|
-
execute<TInput, TOutput>(fn: WorkflowGenerator<TInput, TOutput, TActivities, TSignals, TUpdates, TQueries, TSearchAttributes>): BuiltWorkflowDefinition<TInput, Awaited<TOutput>, TName, TActivities, TSignals, TUpdates, TQueries, TSearchAttributes>;
|
|
320
|
+
execute<TInput, TOutput>(fn: WorkflowGenerator<TInput, TOutput, TActivities, TSignals, TUpdates, TQueries, TSearchAttributes, TServices>): BuiltWorkflowDefinition<TInput, Awaited<TOutput>, TName, TActivities, TSignals, TUpdates, TQueries, TSearchAttributes, TServices>;
|
|
291
321
|
}
|
|
292
322
|
/**
|
|
293
323
|
* The `WorkflowDefinition` returned by `.execute(fn)`. Carries the normalised
|
|
@@ -318,7 +348,7 @@ export interface WorkflowBuilder<TName extends string, TActivities extends Activ
|
|
|
318
348
|
* void built;
|
|
319
349
|
* ```
|
|
320
350
|
*/
|
|
321
|
-
export interface BuiltWorkflowDefinition<TInput, TOutput, TName extends string, TActivities extends ActivityMap, TSignals extends SignalMap, TUpdates extends UpdateMap, TQueries extends QueryMap, TSearchAttributes extends SearchAttributeSchema> extends WorkflowDefinition<TInput, TOutput, TName> {
|
|
351
|
+
export interface BuiltWorkflowDefinition<TInput, TOutput, TName extends string, TActivities extends ActivityMap, TSignals extends SignalMap, TUpdates extends UpdateMap, TQueries extends QueryMap, TSearchAttributes extends SearchAttributeSchema, TServices = unknown> extends WorkflowDefinition<TInput, TOutput, TName, TServices> {
|
|
322
352
|
readonly activities: Readonly<Record<string, Readonly<ActivityDefinition>>>;
|
|
323
353
|
readonly signals: Readonly<Record<string, Readonly<SignalDefinition<unknown>>>>;
|
|
324
354
|
readonly updates: Readonly<Record<string, Readonly<UpdateDefinition>>>;
|
|
@@ -334,6 +364,8 @@ export interface BuiltWorkflowDefinition<TInput, TOutput, TName extends string,
|
|
|
334
364
|
readonly _queries?: TQueries;
|
|
335
365
|
/** Phantom marker for the search-attribute schema. Not present at runtime. */
|
|
336
366
|
readonly _searchAttributes?: TSearchAttributes;
|
|
367
|
+
/** Phantom marker for the per-run services type. Not present at runtime. */
|
|
368
|
+
readonly _services?: TServices;
|
|
337
369
|
}
|
|
338
370
|
/**
|
|
339
371
|
* Re-exported so Phase 2 (`workflow()` runtime rewrite) and Phase 3 (engine
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
type WorkflowConcurrencyKeyResolver<TInput> = {
|
|
2
|
+
resolve(input: TInput): string;
|
|
3
|
+
}['resolve'];
|
|
4
|
+
/**
|
|
5
|
+
* Workflow-level start admission policy. When present on a workflow definition,
|
|
6
|
+
* the engine admits at most `max` non-terminal runs for the same partition.
|
|
7
|
+
*
|
|
8
|
+
* @example
|
|
9
|
+
* ```ts
|
|
10
|
+
* import { workflow, type WorkflowConcurrencyOptions } from '@lostgradient/weft';
|
|
11
|
+
*
|
|
12
|
+
* type OrderInput = { customerId: string };
|
|
13
|
+
*
|
|
14
|
+
* const concurrency: WorkflowConcurrencyOptions<OrderInput> = {
|
|
15
|
+
* max: 3,
|
|
16
|
+
* key: (input) => input.customerId,
|
|
17
|
+
* };
|
|
18
|
+
*
|
|
19
|
+
* const processOrder = workflow({ name: 'process-order', concurrency }).execute(
|
|
20
|
+
* async function* () {
|
|
21
|
+
* return 'done';
|
|
22
|
+
* },
|
|
23
|
+
* );
|
|
24
|
+
* void processOrder;
|
|
25
|
+
* ```
|
|
26
|
+
*/
|
|
27
|
+
export interface WorkflowConcurrencyOptions<TInput = unknown> {
|
|
28
|
+
/**
|
|
29
|
+
* Maximum number of non-terminal runs admitted for the workflow type or
|
|
30
|
+
* partition key. Excess starts are rejected immediately.
|
|
31
|
+
*/
|
|
32
|
+
max: number;
|
|
33
|
+
/**
|
|
34
|
+
* Optional partition key resolver. When omitted, the limit applies to the
|
|
35
|
+
* workflow type as a whole.
|
|
36
|
+
*/
|
|
37
|
+
key?: WorkflowConcurrencyKeyResolver<TInput>;
|
|
38
|
+
}
|
|
39
|
+
export {};
|
|
File without changes
|