@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
|
@@ -1,9 +1,14 @@
|
|
|
1
1
|
import { z } from "zod";
|
|
2
2
|
import { defineOperation } from "../operation-registry.js";
|
|
3
|
-
|
|
3
|
+
import { isAuthenticated } from "../principal.js";
|
|
4
|
+
import {
|
|
5
|
+
decodeCursor
|
|
6
|
+
} from "../workflow-event-feed.js";
|
|
7
|
+
import { invalidParamsFault } from "./operation-helpers.js";
|
|
8
|
+
const INITIAL_SUBSCRIPTION_CURSOR = "-1", MAX_WORKFLOW_SUBSCRIPTION_REPLAY_EVENTS = 1000, workflowEventsSubscriptionInput = z.object({
|
|
4
9
|
workflowId: z.string().min(1),
|
|
5
10
|
selector: z.enum(["events", "tokens"]).optional().default("events"),
|
|
6
|
-
fromCursor: z.string().optional()
|
|
11
|
+
fromCursor: z.string().refine((cursor) => decodeCursor(cursor) !== null, { message: "Invalid cursor" }).optional()
|
|
7
12
|
}), workflowEventsSubscriptionEnvelope = z.object({
|
|
8
13
|
subscriptionId: z.string(),
|
|
9
14
|
cursor: z.string()
|
|
@@ -13,10 +18,12 @@ export const workflowEventsSubscriptionOperation = defineOperation({
|
|
|
13
18
|
mcpExposable: !1,
|
|
14
19
|
kind: "subscription",
|
|
15
20
|
summary: "Subscribe to workflow events with replay-from-cursor",
|
|
21
|
+
description: '`selector: "events"` requires `events:read`; `selector: "tokens"` requires `streams:read`. The grant is checked when the WebSocket subscription starts and remains active until unsubscribe, socket close, or feed termination.',
|
|
16
22
|
destructive: !1,
|
|
17
23
|
tags: ["Events"],
|
|
18
24
|
inputSchema: workflowEventsSubscriptionInput,
|
|
19
25
|
outputSchema: workflowEventsSubscriptionEnvelope,
|
|
26
|
+
producibleFaults: ["InvalidParams"],
|
|
20
27
|
eventSchema: z.object({
|
|
21
28
|
kind: z.string(),
|
|
22
29
|
workflowId: z.string(),
|
|
@@ -26,20 +33,45 @@ export const workflowEventsSubscriptionOperation = defineOperation({
|
|
|
26
33
|
emittedAtMs: z.number(),
|
|
27
34
|
payload: z.unknown()
|
|
28
35
|
}),
|
|
29
|
-
access: {
|
|
30
|
-
|
|
31
|
-
|
|
36
|
+
access: { kind: "authenticated" },
|
|
37
|
+
parameterizedAccess: {
|
|
38
|
+
discriminator: "selector",
|
|
39
|
+
defaultValue: "events",
|
|
40
|
+
variants: [
|
|
41
|
+
{
|
|
42
|
+
value: "events",
|
|
43
|
+
access: { kind: "scoped", scopes: { kind: "anyOf", scopes: ["events:read"] } }
|
|
44
|
+
},
|
|
45
|
+
{
|
|
46
|
+
value: "tokens",
|
|
47
|
+
access: { kind: "scoped", scopes: { kind: "anyOf", scopes: ["streams:read"] } }
|
|
48
|
+
}
|
|
49
|
+
]
|
|
50
|
+
},
|
|
51
|
+
authorize: async ({ input, principal }) => {
|
|
52
|
+
const requiredScope = workflowSubscriptionScope(input.selector);
|
|
53
|
+
if (!isAuthenticated(principal))
|
|
54
|
+
return { allowed: !1, classification: "unauthorized", reason: "authentication required" };
|
|
55
|
+
if (principal.hasScope(requiredScope))
|
|
56
|
+
return { allowed: !0 };
|
|
57
|
+
return {
|
|
58
|
+
allowed: !1,
|
|
59
|
+
classification: "forbidden",
|
|
60
|
+
reason: `requires scope: ${requiredScope}`
|
|
61
|
+
};
|
|
32
62
|
},
|
|
33
63
|
discoverable: !0,
|
|
34
64
|
transports: { http: !1, jsonRpcHttp: !1, jsonRpcWebSocket: !0, jsonRpcStdio: !1 },
|
|
35
65
|
unknownKeyPolicy: { http: "strip", jsonRpc: "reject" },
|
|
36
66
|
invoke: async ({ input, engine }) => {
|
|
37
|
-
const feed = engine.feed, controller = new AbortController, startingCursor = input.fromCursor ?? INITIAL_SUBSCRIPTION_CURSOR,
|
|
67
|
+
const feed = engine.feed, controller = new AbortController, startingCursor = input.fromCursor ?? INITIAL_SUBSCRIPTION_CURSOR, subscribeOptions = {
|
|
38
68
|
workflowId: input.workflowId,
|
|
39
69
|
selector: input.selector,
|
|
40
70
|
...input.fromCursor === void 0 ? {} : { fromCursor: input.fromCursor },
|
|
41
|
-
signal: controller.signal
|
|
42
|
-
|
|
71
|
+
signal: controller.signal,
|
|
72
|
+
replayLimit: MAX_WORKFLOW_SUBSCRIPTION_REPLAY_EVENTS,
|
|
73
|
+
createReplayLimitError: (count, limit) => invalidParamsFault(`Workflow event replay window is ${count} events; maximum is ${limit}. Supply a more recent fromCursor.`)
|
|
74
|
+
}, iterable = feed.subscribe(subscribeOptions);
|
|
43
75
|
return {
|
|
44
76
|
envelope: { subscriptionId: `sub_${crypto.randomUUID()}`, cursor: startingCursor },
|
|
45
77
|
iterable,
|
|
@@ -49,3 +81,6 @@ export const workflowEventsSubscriptionOperation = defineOperation({
|
|
|
49
81
|
};
|
|
50
82
|
}
|
|
51
83
|
});
|
|
84
|
+
function workflowSubscriptionScope(selector) {
|
|
85
|
+
return selector === "tokens" ? "streams:read" : "events:read";
|
|
86
|
+
}
|
|
@@ -12,6 +12,7 @@
|
|
|
12
12
|
*/
|
|
13
13
|
import { WeftError } from '../core/weft-error.ts';
|
|
14
14
|
import type { OperationFault } from './operation-fault.ts';
|
|
15
|
+
import type { RestBodyReadOptions } from './rest-body.ts';
|
|
15
16
|
import type { HttpMethod } from './route-model.ts';
|
|
16
17
|
/**
|
|
17
18
|
* Thrown by `bindingPathMatches` when a URL path parameter contains malformed
|
|
@@ -59,6 +60,7 @@ export type ResponseShape = {
|
|
|
59
60
|
readonly kind: 'streaming';
|
|
60
61
|
readonly mediaType: 'text/event-stream' | 'application/octet-stream' | 'application/x-ndjson';
|
|
61
62
|
};
|
|
63
|
+
export type RestInputContext = RestBodyReadOptions;
|
|
62
64
|
/**
|
|
63
65
|
* Binds a REST mount point to an `OperationDefinition`. Generic over
|
|
64
66
|
* `Input` / `Output` so `extractInput` returns a value the operation's
|
|
@@ -91,7 +93,7 @@ export type RestBinding<Input, Output> = {
|
|
|
91
93
|
* Called before `executeOperation`; the returned value is what the
|
|
92
94
|
* pipeline's schema parse step sees.
|
|
93
95
|
*/
|
|
94
|
-
readonly extractInput: (request: Request, pathParams: Record<string, string
|
|
96
|
+
readonly extractInput: (request: Request, pathParams: Record<string, string>, context: RestInputContext) => Promise<Input>;
|
|
95
97
|
/** Canonical response shape — OpenAPI reads this, handler may override via `shapeSuccess`. */
|
|
96
98
|
readonly success: ResponseShape;
|
|
97
99
|
/**
|
|
@@ -111,14 +113,25 @@ export type RestBinding<Input, Output> = {
|
|
|
111
113
|
readonly shapeSuccess?: (output: Output, request: Request) => Response;
|
|
112
114
|
/**
|
|
113
115
|
* Optional override for fault → HTTP response mapping. When absent,
|
|
114
|
-
* the transport adapter falls back to `faultToHttpResponse
|
|
115
|
-
*
|
|
116
|
+
* the transport adapter falls back to `faultToHttpResponse`, which emits
|
|
117
|
+
* the REST fault body `{ error: { code, message, data? } }`. This is
|
|
118
|
+
* distinct from the JSON-RPC fault object (`faultToJsonRpcError`): JSON-RPC
|
|
119
|
+
* uses a flat `{ code, message, data }` with a numeric `code` and the
|
|
120
|
+
* symbolic name relocated to `data.weftCode`. REST and JSON-RPC deliberately
|
|
121
|
+
* differ in fault shape, so each transport owns its own projection.
|
|
116
122
|
*
|
|
117
|
-
*
|
|
118
|
-
*
|
|
119
|
-
*
|
|
120
|
-
*
|
|
121
|
-
*
|
|
123
|
+
* REST operations provide this to shape faults the way a REST client
|
|
124
|
+
* expects: most use `shapeRestFault`, which masks an `EngineFailure` to a
|
|
125
|
+
* flat `{ error: "Internal server error" }` with status `500` (never
|
|
126
|
+
* leaking internal detail over REST) and maps the remaining fault codes to
|
|
127
|
+
* their HTTP statuses. A few operations supply a bespoke shaper to special-case
|
|
128
|
+
* a particular fault — typically to override its message or to handle one code
|
|
129
|
+
* explicitly — while delegating the rest. The status often matches what the
|
|
130
|
+
* shared map would already produce; the shaper exists for the operation-specific
|
|
131
|
+
* detail (for example, `get-workflow-result` returns the custom message
|
|
132
|
+
* `"Timeout waiting for workflow result"` on a `Timeout`, and `get-stream-chunks`
|
|
133
|
+
* handles `InvalidParams` inline). This per-operation hook is the current
|
|
134
|
+
* contract, not a transitional shim.
|
|
122
135
|
*/
|
|
123
136
|
readonly shapeFault?: (fault: OperationFault) => Response;
|
|
124
137
|
};
|
|
@@ -25,6 +25,10 @@ import {
|
|
|
25
25
|
bulkMutateWorkflowTagsOperation,
|
|
26
26
|
bulkMutateWorkflowTagsRestBinding
|
|
27
27
|
} from "./operations/bulk-mutate-workflow-tags.js";
|
|
28
|
+
import {
|
|
29
|
+
bulkRetryFailedWorkflowsOperation,
|
|
30
|
+
bulkRetryFailedWorkflowsRestBinding
|
|
31
|
+
} from "./operations/bulk-retry-failed-workflows.js";
|
|
28
32
|
import {
|
|
29
33
|
bulkSignalWorkflowsOperation,
|
|
30
34
|
bulkSignalWorkflowsRestBinding
|
|
@@ -41,6 +45,7 @@ import {
|
|
|
41
45
|
createScheduleOperation,
|
|
42
46
|
createScheduleRestBinding
|
|
43
47
|
} from "./operations/create-schedule.js";
|
|
48
|
+
import { fleetEventsSubscriptionOperation } from "./operations/fleet-events-subscription.js";
|
|
44
49
|
import { forkWorkflowOperation, forkWorkflowRestBinding } from "./operations/fork-workflow.js";
|
|
45
50
|
import {
|
|
46
51
|
getCheckpointAtOperation,
|
|
@@ -62,6 +67,8 @@ import {
|
|
|
62
67
|
createGetSystemMetricsRestBinding
|
|
63
68
|
} from "./operations/get-system-metrics.js";
|
|
64
69
|
import {
|
|
70
|
+
clearTaskDeadLetterOperation,
|
|
71
|
+
clearTaskDeadLetterRestBinding,
|
|
65
72
|
createGetTaskDiagnosticsOperation,
|
|
66
73
|
getTaskDiagnosticsOperation,
|
|
67
74
|
getTaskDiagnosticsRestBinding
|
|
@@ -139,6 +146,10 @@ import {
|
|
|
139
146
|
signalWorkflowOperation,
|
|
140
147
|
signalWorkflowRestBinding
|
|
141
148
|
} from "./operations/signal-workflow.js";
|
|
149
|
+
import {
|
|
150
|
+
startOrSignalWorkflowOperation,
|
|
151
|
+
startOrSignalWorkflowRestBinding
|
|
152
|
+
} from "./operations/start-or-signal-workflow.js";
|
|
142
153
|
import { startWorkflowOperation, startWorkflowRestBinding } from "./operations/start-workflow.js";
|
|
143
154
|
import {
|
|
144
155
|
storageBatchOperation,
|
|
@@ -162,6 +173,10 @@ import {
|
|
|
162
173
|
submitReviewDecisionOperation,
|
|
163
174
|
submitReviewDecisionRestBinding
|
|
164
175
|
} from "./operations/submit-review-decision.js";
|
|
176
|
+
import {
|
|
177
|
+
suspendWorkflowOperation,
|
|
178
|
+
suspendWorkflowRestBinding
|
|
179
|
+
} from "./operations/suspend-workflow.js";
|
|
165
180
|
import {
|
|
166
181
|
timeoutWorkflowOperation,
|
|
167
182
|
timeoutWorkflowRestBinding
|
|
@@ -191,12 +206,14 @@ import {
|
|
|
191
206
|
import { workflowEventsSubscriptionOperation } from "./operations/workflow-events-subscription.js";
|
|
192
207
|
export const REST_BINDINGS = [
|
|
193
208
|
startWorkflowRestBinding,
|
|
209
|
+
startOrSignalWorkflowRestBinding,
|
|
194
210
|
recoverAllRestBinding,
|
|
195
211
|
listWorkflowsRestBinding,
|
|
196
212
|
aggregateWorkflowsRestBinding,
|
|
197
213
|
purgeWorkflowsRestBinding,
|
|
198
214
|
bulkCancelWorkflowsRestBinding,
|
|
199
215
|
bulkSignalWorkflowsRestBinding,
|
|
216
|
+
bulkRetryFailedWorkflowsRestBinding,
|
|
200
217
|
bulkDeleteWorkflowsRestBinding,
|
|
201
218
|
bulkMutateWorkflowTagsRestBinding,
|
|
202
219
|
getWorkflowRestBinding,
|
|
@@ -211,6 +228,7 @@ export const REST_BINDINGS = [
|
|
|
211
228
|
queryWorkflowRestBinding,
|
|
212
229
|
queryWorkflowWithInputRestBinding,
|
|
213
230
|
resumeWorkflowRestBinding,
|
|
231
|
+
suspendWorkflowRestBinding,
|
|
214
232
|
forkWorkflowRestBinding,
|
|
215
233
|
timeoutWorkflowRestBinding,
|
|
216
234
|
updateWorkflowRestBinding,
|
|
@@ -233,6 +251,7 @@ export const REST_BINDINGS = [
|
|
|
233
251
|
getStreamChunksRestBinding,
|
|
234
252
|
streamWorkflowSseRestBinding,
|
|
235
253
|
getTaskDiagnosticsRestBinding,
|
|
254
|
+
clearTaskDeadLetterRestBinding,
|
|
236
255
|
listSchedulesRestBinding,
|
|
237
256
|
getScheduleRestBinding,
|
|
238
257
|
replayWorkflowRestBinding,
|
|
@@ -314,12 +333,14 @@ export function createLiveOperationRegistry(options) {
|
|
|
314
333
|
const resolved = options ?? {};
|
|
315
334
|
return createOperationRegistry([
|
|
316
335
|
startWorkflowOperation,
|
|
336
|
+
startOrSignalWorkflowOperation,
|
|
317
337
|
recoverAllOperation,
|
|
318
338
|
listWorkflowsOperation,
|
|
319
339
|
aggregateWorkflowsOperation,
|
|
320
340
|
purgeWorkflowsOperation,
|
|
321
341
|
bulkCancelWorkflowsOperation,
|
|
322
342
|
bulkSignalWorkflowsOperation,
|
|
343
|
+
bulkRetryFailedWorkflowsOperation,
|
|
323
344
|
bulkDeleteWorkflowsOperation,
|
|
324
345
|
bulkMutateWorkflowTagsOperation,
|
|
325
346
|
getWorkflowOperation,
|
|
@@ -333,6 +354,7 @@ export function createLiveOperationRegistry(options) {
|
|
|
333
354
|
failAsyncActivityOperation,
|
|
334
355
|
queryWorkflowOperation,
|
|
335
356
|
resumeWorkflowOperation,
|
|
357
|
+
suspendWorkflowOperation,
|
|
336
358
|
forkWorkflowOperation,
|
|
337
359
|
timeoutWorkflowOperation,
|
|
338
360
|
updateWorkflowOperation,
|
|
@@ -355,7 +377,9 @@ export function createLiveOperationRegistry(options) {
|
|
|
355
377
|
getStreamChunksOperation,
|
|
356
378
|
streamWorkflowSseOperation,
|
|
357
379
|
workflowEventsSubscriptionOperation,
|
|
380
|
+
fleetEventsSubscriptionOperation,
|
|
358
381
|
buildTaskDiagnosticsOperationForRegistry(resolved),
|
|
382
|
+
clearTaskDeadLetterOperation,
|
|
359
383
|
listSchedulesOperation,
|
|
360
384
|
getScheduleOperation,
|
|
361
385
|
replayWorkflowOperation,
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type { OperationFault } from './operation-fault.ts';
|
|
2
|
+
export declare const DEFAULT_REST_MAX_BODY_BYTES: number;
|
|
3
|
+
export type RestBodyReadOptions = {
|
|
4
|
+
readonly maxBodyBytes?: number;
|
|
5
|
+
};
|
|
6
|
+
export declare function payloadTooLargeFault(maxBytes: number): OperationFault;
|
|
7
|
+
export declare function readRestBodyBounded(request: Request, options?: RestBodyReadOptions): Promise<Uint8Array>;
|
|
8
|
+
export declare function readRestTextBody(request: Request, options?: RestBodyReadOptions): Promise<string>;
|
|
9
|
+
export declare function readRestJsonBody(request: Request, options?: RestBodyReadOptions): Promise<unknown>;
|
|
10
|
+
export declare function readOptionalRestJsonBody(request: Request, options?: RestBodyReadOptions): Promise<unknown>;
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
export const DEFAULT_REST_MAX_BODY_BYTES = 1048576;
|
|
2
|
+
const CONTENT_LENGTH_PATTERN = /^(0|[1-9]\d*)$/;
|
|
3
|
+
export function payloadTooLargeFault(maxBytes) {
|
|
4
|
+
return {
|
|
5
|
+
code: "PayloadTooLarge",
|
|
6
|
+
message: "Payload Too Large",
|
|
7
|
+
data: { maxBytes }
|
|
8
|
+
};
|
|
9
|
+
}
|
|
10
|
+
function invalidContentLengthFault() {
|
|
11
|
+
return {
|
|
12
|
+
code: "InvalidParams",
|
|
13
|
+
message: "Invalid Content-Length header",
|
|
14
|
+
data: { issues: [] }
|
|
15
|
+
};
|
|
16
|
+
}
|
|
17
|
+
function resolveMaxBodyBytes(options) {
|
|
18
|
+
const maxBytes = options?.maxBodyBytes ?? DEFAULT_REST_MAX_BODY_BYTES;
|
|
19
|
+
if (!Number.isSafeInteger(maxBytes) || maxBytes < 0)
|
|
20
|
+
throw Error("REST body size limit must be a non-negative safe integer");
|
|
21
|
+
return maxBytes;
|
|
22
|
+
}
|
|
23
|
+
function assertDeclaredContentLengthWithinLimit(request, maxBytes) {
|
|
24
|
+
const header = request.headers.get("content-length");
|
|
25
|
+
if (header === null)
|
|
26
|
+
return;
|
|
27
|
+
if (!CONTENT_LENGTH_PATTERN.test(header))
|
|
28
|
+
throw invalidContentLengthFault();
|
|
29
|
+
const declared = Number(header);
|
|
30
|
+
if (!Number.isSafeInteger(declared) || declared < 0)
|
|
31
|
+
throw invalidContentLengthFault();
|
|
32
|
+
if (declared > maxBytes)
|
|
33
|
+
throw payloadTooLargeFault(maxBytes);
|
|
34
|
+
}
|
|
35
|
+
async function cancelReaderAfterPayloadOverflow(reader) {
|
|
36
|
+
try {
|
|
37
|
+
await reader.cancel();
|
|
38
|
+
} catch {}
|
|
39
|
+
}
|
|
40
|
+
export async function readRestBodyBounded(request, options) {
|
|
41
|
+
const maxBytes = resolveMaxBodyBytes(options);
|
|
42
|
+
assertDeclaredContentLengthWithinLimit(request, maxBytes);
|
|
43
|
+
const body = request.body;
|
|
44
|
+
if (body === null)
|
|
45
|
+
return new Uint8Array;
|
|
46
|
+
const reader = body.getReader(), chunks = [];
|
|
47
|
+
let total = 0;
|
|
48
|
+
try {
|
|
49
|
+
while (!0) {
|
|
50
|
+
const { done, value } = await reader.read();
|
|
51
|
+
if (done)
|
|
52
|
+
break;
|
|
53
|
+
total += value.byteLength;
|
|
54
|
+
if (total > maxBytes) {
|
|
55
|
+
await cancelReaderAfterPayloadOverflow(reader);
|
|
56
|
+
throw payloadTooLargeFault(maxBytes);
|
|
57
|
+
}
|
|
58
|
+
chunks.push(value);
|
|
59
|
+
}
|
|
60
|
+
} finally {
|
|
61
|
+
reader.releaseLock();
|
|
62
|
+
}
|
|
63
|
+
const bytes = new Uint8Array(total);
|
|
64
|
+
let offset = 0;
|
|
65
|
+
for (const chunk of chunks) {
|
|
66
|
+
bytes.set(chunk, offset);
|
|
67
|
+
offset += chunk.byteLength;
|
|
68
|
+
}
|
|
69
|
+
return bytes;
|
|
70
|
+
}
|
|
71
|
+
export async function readRestTextBody(request, options) {
|
|
72
|
+
return new TextDecoder("utf-8").decode(await readRestBodyBounded(request, options));
|
|
73
|
+
}
|
|
74
|
+
export async function readRestJsonBody(request, options) {
|
|
75
|
+
return JSON.parse(await readRestTextBody(request, options));
|
|
76
|
+
}
|
|
77
|
+
export async function readOptionalRestJsonBody(request, options) {
|
|
78
|
+
const text = await readRestTextBody(request, options);
|
|
79
|
+
return text.trim() === "" ? void 0 : JSON.parse(text);
|
|
80
|
+
}
|
|
@@ -11,6 +11,7 @@ type ServerFetchOptions = {
|
|
|
11
11
|
discoveryInfo?: import('../discovery-info.ts').DiscoveryInfo;
|
|
12
12
|
publicOrigin?: string;
|
|
13
13
|
trustedHosts?: ReadonlyArray<string>;
|
|
14
|
+
maxRequestBodyBytes?: number;
|
|
14
15
|
};
|
|
15
16
|
export declare function deriveSupportedOpenApiSecuritySchemes(auth: AuthConfig | undefined): ReadonlySet<OpenApiSecuritySchemeName>;
|
|
16
17
|
export declare function handleServerFetchRequest(server: ReturnType<typeof Bun.serve>, context: ServerContext, options: ServerFetchOptions, originalRequest: Request): Promise<Response | undefined>;
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { decode } from "../../core/codec.js";
|
|
2
|
+
import { WorkerDisconnectedEvent } from "../../core/events.js";
|
|
2
3
|
import { handleMcpHttpRequest } from "../../mcp/http.js";
|
|
3
4
|
import { KEYS } from "../../storage/interface.js";
|
|
4
5
|
import { authContextToPrincipal, handleRequest } from "../handler.js";
|
|
@@ -13,7 +14,15 @@ import { buildPreflightResponse, decorateResponseWithCors, isPreflightRequest }
|
|
|
13
14
|
import { gateRequest } from "./request-gate.js";
|
|
14
15
|
import { handleTaskPollRequest, handleTaskResultRequest } from "./task-polling.js";
|
|
15
16
|
import { reassignOrExpireTask } from "./task-reconciliation.js";
|
|
16
|
-
import {
|
|
17
|
+
import {
|
|
18
|
+
addStreamSocket,
|
|
19
|
+
addWatchSocket,
|
|
20
|
+
removeStreamSocket,
|
|
21
|
+
removeWatchSocket,
|
|
22
|
+
removeWorkflowStreamConnection,
|
|
23
|
+
replayTokenStream,
|
|
24
|
+
replayWatchEvents
|
|
25
|
+
} from "./websocket-stream.js";
|
|
17
26
|
import { handleWebSocketUpgrade } from "./websocket-upgrade.js";
|
|
18
27
|
import { handleWorkerWebSocketMessage, isInflightRecord } from "./websocket-worker.js";
|
|
19
28
|
export function deriveSupportedOpenApiSecuritySchemes(auth) {
|
|
@@ -72,7 +81,8 @@ async function dispatchServerFetchRequest(server, context, options, originalRequ
|
|
|
72
81
|
request,
|
|
73
82
|
registry: context.liveOperationRegistry,
|
|
74
83
|
engine: options.engine,
|
|
75
|
-
authContext: authentication.authContext
|
|
84
|
+
authContext: authentication.authContext,
|
|
85
|
+
...options.maxRequestBodyBytes !== void 0 ? { maxBodyBytes: options.maxRequestBodyBytes } : {}
|
|
76
86
|
});
|
|
77
87
|
return handleRequest(request, options.engine, buildHandlerOptions(context, options, authentication));
|
|
78
88
|
}
|
|
@@ -83,6 +93,7 @@ function buildHandlerOptions(context, options, authentication) {
|
|
|
83
93
|
...options.discoveryInfo !== void 0 ? { discoveryInfo: options.discoveryInfo } : {},
|
|
84
94
|
...options.publicOrigin !== void 0 ? { publicOrigin: options.publicOrigin } : {},
|
|
85
95
|
...options.trustedHosts !== void 0 ? { trustedHosts: options.trustedHosts } : {},
|
|
96
|
+
...options.maxRequestBodyBytes !== void 0 ? { maxRequestBodyBytes: options.maxRequestBodyBytes } : {},
|
|
86
97
|
operationRegistry: context.liveOperationRegistry,
|
|
87
98
|
restBindings: context.liveRestBindings,
|
|
88
99
|
supportedAuthenticationSchemes: context.supportedAuthenticationSchemes
|
|
@@ -92,12 +103,20 @@ export function createServerWebSocketHandlers(context, options, cleanupWorkflowI
|
|
|
92
103
|
return {
|
|
93
104
|
open(ws) {
|
|
94
105
|
const { pathname, connectionType, workflowId } = ws.data;
|
|
95
|
-
if (
|
|
106
|
+
if (connectionType === "watch" && workflowId && !addWatchSocket(context, workflowId, ws))
|
|
107
|
+
return;
|
|
108
|
+
if (connectionType === "watch" && workflowId) {
|
|
109
|
+
ws.data.watchReplayInProgress = !0;
|
|
110
|
+
ws.data.pendingWatchMessages = [];
|
|
111
|
+
replayWatchEvents(context, options.engine, ws, workflowId);
|
|
112
|
+
}
|
|
113
|
+
if (pathname && connectionType !== "stream" && connectionType !== "watch" && connectionType !== "jsonrpc")
|
|
96
114
|
ws.subscribe(pathname);
|
|
97
115
|
if (connectionType === "stream" && workflowId) {
|
|
98
|
-
ws.data.
|
|
116
|
+
ws.data.streamReplayInProgress = !0;
|
|
99
117
|
ws.data.pendingStreamMessages = [];
|
|
100
|
-
addStreamSocket(context, workflowId, ws)
|
|
118
|
+
if (!addStreamSocket(context, workflowId, ws))
|
|
119
|
+
return;
|
|
101
120
|
replayTokenStream(context, options.engine, ws, workflowId);
|
|
102
121
|
}
|
|
103
122
|
if (connectionType === "jsonrpc") {
|
|
@@ -106,6 +125,7 @@ export function createServerWebSocketHandlers(context, options, cleanupWorkflowI
|
|
|
106
125
|
registry: context.liveOperationRegistry,
|
|
107
126
|
engine: options.engine,
|
|
108
127
|
feed: context.workflowEventFeed,
|
|
128
|
+
fleetFeed: context.fleetEventFeed,
|
|
109
129
|
activeSessions: context.activeJsonRpcSessions
|
|
110
130
|
});
|
|
111
131
|
return;
|
|
@@ -133,8 +153,14 @@ export function createServerWebSocketHandlers(context, options, cleanupWorkflowI
|
|
|
133
153
|
});
|
|
134
154
|
return;
|
|
135
155
|
}
|
|
136
|
-
if (ws.data.connectionType === "stream")
|
|
156
|
+
if (ws.data.connectionType === "stream") {
|
|
137
157
|
removeStreamSocket(context, ws);
|
|
158
|
+
removeWorkflowStreamConnection(context, ws);
|
|
159
|
+
}
|
|
160
|
+
if (ws.data.connectionType === "watch") {
|
|
161
|
+
removeWatchSocket(context, ws);
|
|
162
|
+
removeWorkflowStreamConnection(context, ws);
|
|
163
|
+
}
|
|
138
164
|
const workerId = ws.data.workerId;
|
|
139
165
|
if (workerId) {
|
|
140
166
|
if (context.workerSockets.get(workerId) !== ws) {
|
|
@@ -167,6 +193,7 @@ function runWorkerDisconnectRequeue(context, options, workerId, _ws, cleanupWork
|
|
|
167
193
|
}
|
|
168
194
|
context.registry.unregister(workerId);
|
|
169
195
|
context.workerSockets.delete(workerId);
|
|
196
|
+
options.engine.dispatchEvent(new WorkerDisconnectedEvent(workerId, inFlightTasks.length));
|
|
170
197
|
for (const [workflowId, affinityWorkerId] of context.workerAffinity)
|
|
171
198
|
if (affinityWorkerId === workerId)
|
|
172
199
|
context.workerAffinity.delete(workflowId);
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
export declare const TOKEN_EVENT_TYPE = "stream:token";
|
|
2
|
+
export declare const EVENTS_READ_EVENT_TYPES: readonly ["workflow:started", "workflow:completed", "workflow:failed", "workflow:cancelled", "workflow:timed-out", "workflow:resumed", "workflow:suspended", "workflow:teardown", "activity:started", "activity:completed", "activity:failed", "activity:async-pending", "task:dead-lettered", "signal:received", "signal:delivered", "attributes:changed", "update:received", "update:completed", "schedule:fired", "schedule:missed-fire", "checkpoint:size-warning", "development:warning", "cleanup:warning", "storage:size-reported", "human-review:requested", "human-review:completed", "alert:fired", "alert:resolved", "constraint:violated", "worker:connected", "worker:disconnected"];
|
|
3
|
+
export declare const CLIENT_VISIBLE_EVENT_TYPES: readonly ["workflow:started", "workflow:completed", "workflow:failed", "workflow:cancelled", "workflow:timed-out", "workflow:resumed", "workflow:suspended", "workflow:teardown", "activity:started", "activity:completed", "activity:failed", "activity:async-pending", "task:dead-lettered", "signal:received", "signal:delivered", "attributes:changed", "update:received", "update:completed", "schedule:fired", "schedule:missed-fire", "checkpoint:size-warning", "development:warning", "cleanup:warning", "storage:size-reported", "human-review:requested", "human-review:completed", "alert:fired", "alert:resolved", "constraint:violated", "worker:connected", "worker:disconnected", "stream:token"];
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
import {
|
|
2
|
+
ActivityAsyncPendingEvent,
|
|
3
|
+
ActivityCompletedEvent,
|
|
4
|
+
ActivityFailedEvent,
|
|
5
|
+
ActivityStartedEvent,
|
|
6
|
+
AlertFiredEvent,
|
|
7
|
+
AlertResolvedEvent,
|
|
8
|
+
AttributesChangedEvent,
|
|
9
|
+
CheckpointSizeWarningEvent,
|
|
10
|
+
CleanupWarningEvent,
|
|
11
|
+
ConstraintViolatedEvent,
|
|
12
|
+
DevelopmentWarningEvent,
|
|
13
|
+
ScheduleFiredEvent,
|
|
14
|
+
ScheduleMissedFireEvent,
|
|
15
|
+
SignalDeliveredEvent,
|
|
16
|
+
SignalReceivedEvent,
|
|
17
|
+
StorageSizeReportedEvent,
|
|
18
|
+
TaskResultDeadLetteredEvent,
|
|
19
|
+
UpdateCompletedEvent,
|
|
20
|
+
UpdateReceivedEvent,
|
|
21
|
+
WorkerConnectedEvent,
|
|
22
|
+
WorkerDisconnectedEvent,
|
|
23
|
+
WorkflowCancelledEvent,
|
|
24
|
+
WorkflowCompletedEvent,
|
|
25
|
+
WorkflowFailedEvent,
|
|
26
|
+
WorkflowResumedEvent,
|
|
27
|
+
WorkflowStartedEvent,
|
|
28
|
+
WorkflowSuspendedEvent,
|
|
29
|
+
WorkflowTeardownEvent,
|
|
30
|
+
WorkflowTimedOutEvent
|
|
31
|
+
} from "../../core/events.js";
|
|
32
|
+
import { ReviewCompletedEvent, ReviewRequestedEvent } from "../../core/review/events.js";
|
|
33
|
+
export const TOKEN_EVENT_TYPE = "stream:token", EVENTS_READ_EVENT_TYPES = [
|
|
34
|
+
WorkflowStartedEvent.type,
|
|
35
|
+
WorkflowCompletedEvent.type,
|
|
36
|
+
WorkflowFailedEvent.type,
|
|
37
|
+
WorkflowCancelledEvent.type,
|
|
38
|
+
WorkflowTimedOutEvent.type,
|
|
39
|
+
WorkflowResumedEvent.type,
|
|
40
|
+
WorkflowSuspendedEvent.type,
|
|
41
|
+
WorkflowTeardownEvent.type,
|
|
42
|
+
ActivityStartedEvent.type,
|
|
43
|
+
ActivityCompletedEvent.type,
|
|
44
|
+
ActivityFailedEvent.type,
|
|
45
|
+
ActivityAsyncPendingEvent.type,
|
|
46
|
+
TaskResultDeadLetteredEvent.type,
|
|
47
|
+
SignalReceivedEvent.type,
|
|
48
|
+
SignalDeliveredEvent.type,
|
|
49
|
+
AttributesChangedEvent.type,
|
|
50
|
+
UpdateReceivedEvent.type,
|
|
51
|
+
UpdateCompletedEvent.type,
|
|
52
|
+
ScheduleFiredEvent.type,
|
|
53
|
+
ScheduleMissedFireEvent.type,
|
|
54
|
+
CheckpointSizeWarningEvent.type,
|
|
55
|
+
DevelopmentWarningEvent.type,
|
|
56
|
+
CleanupWarningEvent.type,
|
|
57
|
+
StorageSizeReportedEvent.type,
|
|
58
|
+
ReviewRequestedEvent.type,
|
|
59
|
+
ReviewCompletedEvent.type,
|
|
60
|
+
AlertFiredEvent.type,
|
|
61
|
+
AlertResolvedEvent.type,
|
|
62
|
+
ConstraintViolatedEvent.type,
|
|
63
|
+
WorkerConnectedEvent.type,
|
|
64
|
+
WorkerDisconnectedEvent.type
|
|
65
|
+
], CLIENT_VISIBLE_EVENT_TYPES = [...EVENTS_READ_EVENT_TYPES, TOKEN_EVENT_TYPE];
|
|
@@ -5,6 +5,7 @@ import type { WorkerRegistry } from '../../worker/registry.ts';
|
|
|
5
5
|
import type { Authenticator, RateLimiter } from '../authentication.ts';
|
|
6
6
|
import type { DeadlineTracker } from '../deadline-tracker.ts';
|
|
7
7
|
import type { createEngineEventFeedBackend } from '../engine-event-feed-backend.ts';
|
|
8
|
+
import type { FleetEventFeed } from '../fleet-event-feed.ts';
|
|
8
9
|
import type { WebSocketData } from '../json-rpc-websocket-runtime.ts';
|
|
9
10
|
import type { JsonRpcWebSocketSession } from '../json-rpc-websocket.ts';
|
|
10
11
|
import type { OpenApiSecuritySchemeName } from '../openapi.ts';
|
|
@@ -23,6 +24,9 @@ export interface ServerContext {
|
|
|
23
24
|
readonly taskQueue: TaskQueue;
|
|
24
25
|
readonly workerSockets: Map<string, ServerWebSocket<WebSocketData>>;
|
|
25
26
|
readonly streamSockets: Map<string, Set<ServerWebSocket<WebSocketData>>>;
|
|
27
|
+
readonly watchSockets: Map<string, Set<ServerWebSocket<WebSocketData>>>;
|
|
28
|
+
readonly workflowStreamConnectionCounts: Map<string, number>;
|
|
29
|
+
readonly maxStreamConnectionsPerWorkflow: number;
|
|
26
30
|
/** Tracks per-workflow worker affinity for sticky routing. Maps workflowId to workerId. */
|
|
27
31
|
readonly workerAffinity: Map<string, string>;
|
|
28
32
|
/** Reverse index: workflowId to set of operationIds currently in-flight for that workflow. */
|
|
@@ -42,6 +46,7 @@ export interface ServerContext {
|
|
|
42
46
|
readonly metricsCollector: MetricsCollector;
|
|
43
47
|
readonly eventFeedBackend: ReturnType<typeof createEngineEventFeedBackend>;
|
|
44
48
|
readonly workflowEventFeed: WorkflowEventFeed;
|
|
49
|
+
readonly fleetEventFeed: FleetEventFeed;
|
|
45
50
|
readonly activeJsonRpcSessions: Set<JsonRpcWebSocketSession>;
|
|
46
51
|
readonly mcpSessionManager: McpSessionManager;
|
|
47
52
|
readonly authenticatorPromise: Promise<Authenticator> | null;
|
|
@@ -59,6 +64,8 @@ export interface ServerContext {
|
|
|
59
64
|
* this window cancels the pending requeue. `0` means inline requeue.
|
|
60
65
|
*/
|
|
61
66
|
readonly workerReconnectGracePeriodMs: number;
|
|
67
|
+
/** Engine-level cap for activity results delivered by remote workers. */
|
|
68
|
+
readonly payloadSizeMaxBytes: number | null;
|
|
62
69
|
/**
|
|
63
70
|
* Pending requeue timers keyed by `workerId`. A successful re-register clears
|
|
64
71
|
* the timer for that worker, suppressing the deferred requeue.
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import type { Engine } from '../../core/engine.ts';
|
|
2
|
+
import type { FleetEventFeed } from '../fleet-event-feed.ts';
|
|
2
3
|
import type { ServerContext } from './context.ts';
|
|
3
4
|
/**
|
|
4
5
|
* Result of wiring up engine-to-WebSocket event broadcasting.
|
|
@@ -46,6 +47,9 @@ export declare function registerWorkflowEventLifecycle(engine: Engine, context:
|
|
|
46
47
|
* token messages, enabling per-workflow stream sockets to be used in
|
|
47
48
|
* place of the default pub/sub channel. Leave unset unless you manage stream
|
|
48
49
|
* sockets separately (as `serve()` does internally).
|
|
50
|
+
* @param options.publishWatchMessage - Optional override for watch-event delivery.
|
|
51
|
+
* When provided, this callback is called instead of `server.publish()` for
|
|
52
|
+
* watch messages, enabling per-socket replay buffering during catch-up.
|
|
49
53
|
*
|
|
50
54
|
* @example
|
|
51
55
|
* ```ts
|
|
@@ -68,4 +72,6 @@ export declare function registerWorkflowEventLifecycle(engine: Engine, context:
|
|
|
68
72
|
*/
|
|
69
73
|
export declare function wireEventBroadcasting(engine: Engine, server: ReturnType<typeof Bun.serve>, options?: {
|
|
70
74
|
publishTokenMessage?: (workflowId: string, sequence: number, message: string) => void;
|
|
75
|
+
publishWatchMessage?: (workflowId: string, sequence: number, message: string) => void;
|
|
76
|
+
fleetEventFeed?: FleetEventFeed;
|
|
71
77
|
}): EventBroadcastingHandle;
|