@temelj/workflow 0.0.0-alpha.2 → 0.0.0-alpha.4
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 +394 -2
- package/dist/attributes.d.mts +11 -9
- package/dist/attributes.mjs +23 -5
- package/dist/bundle.d.mts +5 -23
- package/dist/bundle.mjs +2 -18
- package/dist/client/create.d.mts +26 -23
- package/dist/client/create.mjs +26 -32
- package/dist/client/facades.d.mts +12 -18
- package/dist/client/facades.mjs +102 -93
- package/dist/client/mod.mjs +1 -2
- package/dist/client/run-handle.d.mts +17 -54
- package/dist/client/run-handle.mjs +35 -105
- package/dist/client/worker-options.d.mts +8 -8
- package/dist/client/worker-options.mjs +11 -11
- package/dist/cloudflare/cloudflare.d.mts +4 -5
- package/dist/cloudflare/codec.d.mts +28 -13
- package/dist/cloudflare/codec.mjs +40 -17
- package/dist/cloudflare/entrypoint.d.mts +3 -4
- package/dist/cloudflare/entrypoint.mjs +4 -3
- package/dist/cloudflare/execution.d.mts +3 -4
- package/dist/cloudflare/execution.mjs +20 -13
- package/dist/cloudflare/host.d.mts +6 -7
- package/dist/cloudflare/host.mjs +7 -6
- package/dist/cloudflare/mod.d.mts +4 -4
- package/dist/cloudflare/mod.mjs +2 -2
- package/dist/cloudflare/name.d.mts +3 -4
- package/dist/cloudflare/name.mjs +3 -3
- package/dist/cloudflare/registry.d.mts +3 -23
- package/dist/cloudflare/registry.mjs +2 -20
- package/dist/cloudflare/runtime.d.mts +11 -18
- package/dist/cloudflare/runtime.mjs +52 -73
- package/dist/cloudflare/step.d.mts +6 -6
- package/dist/cloudflare/step.mjs +69 -57
- package/dist/cloudflare/types.d.mts +17 -36
- package/dist/collection.d.mts +8 -11
- package/dist/collection.mjs +10 -14
- package/dist/compiled-function.d.mts +14 -19
- package/dist/compiled-function.mjs +12 -24
- package/dist/compiled.d.mts +4 -0
- package/dist/compiled.mjs +4 -0
- package/dist/compiler/ast.d.mts +26 -0
- package/dist/{vite → compiler}/ast.mjs +24 -16
- package/dist/{vite → compiler}/error.d.mts +4 -6
- package/dist/{vite → compiler}/error.mjs +14 -16
- package/dist/compiler/manifest.d.mts +6 -0
- package/dist/{vite → compiler}/manifest.mjs +9 -7
- package/dist/compiler/plugin.d.mts +7 -0
- package/dist/{vite → compiler}/plugin.mjs +45 -46
- package/dist/compiler/safety.d.mts +12 -0
- package/dist/{vite → compiler}/safety.mjs +5 -11
- package/dist/{vite → compiler}/source-edit.d.mts +3 -4
- package/dist/{vite → compiler}/source-edit.mjs +1 -1
- package/dist/{vite → compiler}/source-map.d.mts +4 -3
- package/dist/{vite → compiler}/source-map.mjs +3 -3
- package/dist/compiler/source.d.mts +7 -0
- package/dist/{vite → compiler}/source.mjs +1 -1
- package/dist/compiler/transform.d.mts +12 -0
- package/dist/{vite → compiler}/transform.mjs +37 -38
- package/dist/definition.d.mts +17 -25
- package/dist/definition.mjs +19 -35
- package/dist/engine/child-workflow.d.mts +5 -9
- package/dist/engine/child-workflow.mjs +46 -67
- package/dist/engine/command-identity.d.mts +5 -6
- package/dist/engine/command-identity.mjs +9 -5
- package/dist/engine/context.d.mts +17 -0
- package/dist/engine/create.d.mts +36 -94
- package/dist/engine/create.mjs +55 -260
- package/dist/engine/deterministic.d.mts +6 -11
- package/dist/engine/deterministic.mjs +47 -68
- package/dist/engine/durable-command.d.mts +5 -5
- package/dist/engine/durable-command.mjs +2 -2
- package/dist/engine/execution-service.d.mts +20 -24
- package/dist/engine/execution-service.mjs +54 -52
- package/dist/engine/hooks.d.mts +17 -39
- package/dist/engine/hooks.mjs +73 -94
- package/dist/engine/inspection.d.mts +23 -15
- package/dist/engine/inspection.mjs +55 -29
- package/dist/engine/lifecycle.d.mts +6 -12
- package/dist/engine/lifecycle.mjs +5 -5
- package/dist/engine/lock-replay.d.mts +8 -15
- package/dist/engine/lock-replay.mjs +12 -25
- package/dist/engine/lock.d.mts +10 -15
- package/dist/engine/lock.mjs +65 -51
- package/dist/engine/message.d.mts +14 -34
- package/dist/engine/message.mjs +94 -127
- package/dist/engine/observation.d.mts +9 -11
- package/dist/engine/observation.mjs +18 -27
- package/dist/engine/replay.d.mts +18 -19
- package/dist/engine/replay.mjs +32 -56
- package/dist/engine/resume.d.mts +16 -0
- package/dist/engine/resume.mjs +24 -0
- package/dist/engine/retry.d.mts +15 -19
- package/dist/engine/retry.mjs +17 -17
- package/dist/engine/run-data.d.mts +4 -8
- package/dist/engine/run-data.mjs +24 -22
- package/dist/engine/run-service.d.mts +24 -33
- package/dist/engine/run-service.mjs +125 -93
- package/dist/engine/run-utils.d.mts +11 -13
- package/dist/engine/run-utils.mjs +23 -46
- package/dist/engine/schedule.d.mts +8 -22
- package/dist/engine/schedule.mjs +37 -34
- package/dist/engine/serialization.d.mts +9 -6
- package/dist/engine/serialization.mjs +30 -21
- package/dist/engine/signals.d.mts +23 -0
- package/dist/engine/signals.mjs +41 -0
- package/dist/engine/start.d.mts +18 -0
- package/dist/engine/start.mjs +88 -0
- package/dist/engine/state.d.mts +37 -67
- package/dist/engine/state.mjs +127 -282
- package/dist/engine/step-api.d.mts +5 -8
- package/dist/engine/step-api.mjs +16 -16
- package/dist/engine/stream-reader.d.mts +12 -0
- package/dist/engine/stream-reader.mjs +154 -0
- package/dist/engine/stream.d.mts +9 -54
- package/dist/engine/stream.mjs +54 -196
- package/dist/engine/summary/recovery.d.mts +35 -0
- package/dist/engine/summary/recovery.mjs +363 -0
- package/dist/engine/summary/runs.d.mts +43 -0
- package/dist/engine/summary/runs.mjs +294 -0
- package/dist/engine/summary/step-attempts.d.mts +5 -10
- package/dist/engine/summary/step-attempts.mjs +157 -36
- package/dist/engine/summary/tally.d.mts +44 -0
- package/dist/engine/summary/tally.mjs +142 -0
- package/dist/engine/task.d.mts +4 -5
- package/dist/engine/task.mjs +40 -48
- package/dist/errors/base.d.mts +17 -77
- package/dist/errors/base.mjs +26 -327
- package/dist/errors/capability.d.mts +3 -6
- package/dist/errors/capability.mjs +4 -8
- package/dist/errors/codes.d.mts +116 -0
- package/dist/{types/error-code.mjs → errors/codes.mjs} +2 -17
- package/dist/errors/definition.d.mts +3 -17
- package/dist/errors/definition.mjs +5 -42
- package/dist/errors/failures.d.mts +17 -51
- package/dist/errors/failures.mjs +35 -102
- package/dist/errors/hook.d.mts +5 -9
- package/dist/errors/hook.mjs +4 -16
- package/dist/errors/implementation.d.mts +3 -6
- package/dist/errors/implementation.mjs +7 -12
- package/dist/errors/lock.d.mts +7 -20
- package/dist/errors/lock.mjs +8 -44
- package/dist/errors/message.d.mts +14 -59
- package/dist/errors/message.mjs +13 -39
- package/dist/errors/mod.d.mts +4 -5
- package/dist/errors/mod.mjs +5 -7
- package/dist/errors/records.d.mts +10 -4
- package/dist/errors/records.mjs +256 -256
- package/dist/errors/run.d.mts +27 -68
- package/dist/errors/run.mjs +31 -85
- package/dist/errors/schedule.d.mts +7 -18
- package/dist/errors/schedule.mjs +7 -39
- package/dist/errors/step.d.mts +12 -45
- package/dist/errors/step.mjs +13 -34
- package/dist/errors/stream.d.mts +8 -16
- package/dist/errors/stream.mjs +7 -41
- package/dist/esbuild.d.mts +6 -4
- package/dist/esbuild.mjs +2 -1
- package/dist/events/descriptors.d.mts +12 -241
- package/dist/events/descriptors.mjs +12 -5
- package/dist/history/projection.d.mts +4 -6
- package/dist/history/projection.mjs +22 -26
- package/dist/history/replay-projection.d.mts +44 -48
- package/dist/history/replay-projection.mjs +41 -50
- package/dist/history/{mod.d.mts → replay.d.mts} +16 -21
- package/dist/history/{mod.mjs → replay.mjs} +21 -25
- package/dist/history/sequencer.d.mts +10 -11
- package/dist/history/sequencer.mjs +11 -7
- package/dist/history/step-attempts.d.mts +4 -7
- package/dist/history/step-attempts.mjs +8 -9
- package/dist/history/timeline.d.mts +4 -13
- package/dist/history/timeline.mjs +46 -265
- package/dist/history/validator.d.mts +5 -7
- package/dist/history/validator.mjs +9 -24
- package/dist/hook-token.d.mts +7 -0
- package/dist/hook-token.mjs +32 -0
- package/dist/ids.d.mts +8 -0
- package/dist/ids.mjs +21 -0
- package/dist/message-options.d.mts +11 -5
- package/dist/message-options.mjs +9 -7
- package/dist/mod.d.mts +32 -36
- package/dist/mod.mjs +9 -13
- package/dist/otel/metrics.d.mts +31 -0
- package/dist/otel/metrics.mjs +60 -0
- package/dist/otel/mod.d.mts +3 -0
- package/dist/otel/mod.mjs +3 -0
- package/dist/otel/spans.d.mts +24 -0
- package/dist/otel/spans.mjs +218 -0
- package/dist/otel/support.d.mts +15 -8
- package/dist/otel/support.mjs +18 -40
- package/dist/{otel.d.mts → otel/telemetry.d.mts} +5 -6
- package/dist/otel/telemetry.mjs +305 -0
- package/dist/pagination.d.mts +6 -12
- package/dist/pagination.mjs +10 -14
- package/dist/registry.d.mts +8 -5
- package/dist/registry.mjs +19 -10
- package/dist/rolldown.d.mts +6 -4
- package/dist/rolldown.mjs +2 -1
- package/dist/rollup.d.mts +6 -4
- package/dist/rollup.mjs +2 -1
- package/dist/rspack.d.mts +6 -4
- package/dist/rspack.mjs +2 -1
- package/dist/run-status.d.mts +29 -0
- package/dist/run-status.mjs +42 -0
- package/dist/schema/common.d.mts +22 -0
- package/dist/schema/common.mjs +54 -0
- package/dist/schema/error.d.mts +17 -0
- package/dist/schema/error.mjs +39 -0
- package/dist/schema/events.d.mts +446 -0
- package/dist/schema/events.mjs +235 -0
- package/dist/schema/pagination.d.mts +5 -0
- package/dist/schema/pagination.mjs +11 -0
- package/dist/schema/persisted-value.d.mts +8 -0
- package/dist/schema/persisted-value.mjs +94 -0
- package/dist/schema/run.d.mts +51 -0
- package/dist/schema/run.mjs +88 -0
- package/dist/schema/store.d.mts +94 -0
- package/dist/schema/store.mjs +116 -0
- package/dist/step-definition.d.mts +4 -9
- package/dist/step-definition.mjs +2 -2
- package/dist/store/capabilities.d.mts +8 -9
- package/dist/store/capabilities.mjs +7 -7
- package/dist/store/cleanup.d.mts +9 -14
- package/dist/store/cleanup.mjs +86 -85
- package/dist/store/create.d.mts +28 -29
- package/dist/store/create.mjs +10 -11
- package/dist/store/events.d.mts +48 -0
- package/dist/store/events.mjs +263 -0
- package/dist/store/indexes.d.mts +25 -0
- package/dist/store/indexes.mjs +282 -0
- package/dist/store/instrumentation.d.mts +2 -3
- package/dist/store/instrumentation.mjs +30 -30
- package/dist/store/lock.d.mts +4 -5
- package/dist/store/lock.mjs +5 -7
- package/dist/store/materialization.d.mts +10 -17
- package/dist/store/materialization.mjs +39 -33
- package/dist/store/mod.d.mts +3 -3
- package/dist/store/mod.mjs +2 -2
- package/dist/store/query.d.mts +13 -17
- package/dist/store/query.mjs +13 -13
- package/dist/store/run.d.mts +25 -34
- package/dist/store/run.mjs +67 -108
- package/dist/store/schedule.d.mts +6 -8
- package/dist/store/schedule.mjs +11 -11
- package/dist/store/step-attempt.d.mts +9 -12
- package/dist/store/step-attempt.mjs +9 -9
- package/dist/store/storage-value.d.mts +3 -3
- package/dist/store/storage-value.mjs +17 -1
- package/dist/store/validation.d.mts +17 -20
- package/dist/store/validation.mjs +30 -33
- package/dist/store-keys.d.mts +35 -47
- package/dist/store-keys.mjs +9 -17
- package/dist/telemetry.d.mts +16 -16
- package/dist/telemetry.mjs +3 -3
- package/dist/temporal.d.mts +11 -16
- package/dist/temporal.mjs +8 -9
- package/dist/timer.d.mts +12 -10
- package/dist/timer.mjs +11 -3
- package/dist/types/cleanup.d.mts +13 -50
- package/dist/types/cleanup.mjs +1 -22
- package/dist/types/client.d.mts +101 -162
- package/dist/types/{vite.d.mts → compiler.d.mts} +17 -24
- package/dist/types/compiler.mjs +1 -0
- package/dist/types/definition.d.mts +22 -34
- package/dist/types/engine-options.d.mts +10 -17
- package/dist/types/engine.d.mts +15 -274
- package/dist/types/error.d.mts +15 -217
- package/dist/types/error.mjs +1 -48
- package/dist/types/events.d.mts +59 -2730
- package/dist/types/events.mjs +1 -283
- package/dist/types/hook.d.mts +27 -85
- package/dist/types/hook.mjs +1 -66
- package/dist/types/ids.d.mts +9 -0
- package/dist/types/ids.mjs +1 -0
- package/dist/types/lock.d.mts +8 -26
- package/dist/types/lock.mjs +1 -18
- package/dist/types/message.d.mts +29 -43
- package/dist/types/observation.d.mts +43 -58
- package/dist/types/pagination.d.mts +6 -22
- package/dist/types/pagination.mjs +1 -13
- package/dist/types/result.d.mts +11 -43
- package/dist/types/retry.d.mts +7 -14
- package/dist/types/run-list.d.mts +9 -11
- package/dist/types/run-options.d.mts +25 -32
- package/dist/types/run.d.mts +35 -315
- package/dist/types/run.mjs +1 -207
- package/dist/types/runtime.d.mts +33 -145
- package/dist/types/runtime.mjs +1 -21
- package/dist/types/schedule.d.mts +13 -72
- package/dist/types/schedule.mjs +1 -48
- package/dist/types/step-attempts.d.mts +65 -261
- package/dist/types/step-attempts.mjs +1 -43
- package/dist/types/step.d.mts +66 -77
- package/dist/types/step.mjs +1 -5
- package/dist/types/store.d.mts +50 -182
- package/dist/types/stream.d.mts +19 -40
- package/dist/types/summary.d.mts +174 -278
- package/dist/types/telemetry.d.mts +23 -28
- package/dist/types/telemetry.mjs +1 -9
- package/dist/types/timeline.d.mts +46 -233
- package/dist/types/worker.d.mts +22 -29
- package/dist/values.d.mts +15 -0
- package/dist/values.mjs +57 -0
- package/dist/vite.d.mts +5 -6
- package/dist/vite.mjs +3 -4
- package/dist/webpack.d.mts +6 -4
- package/dist/webpack.mjs +2 -1
- package/dist/worker/error.d.mts +2 -9
- package/dist/worker/error.mjs +20 -32
- package/dist/worker/missing-implementation.d.mts +19 -0
- package/dist/worker/missing-implementation.mjs +62 -0
- package/dist/worker/worker.d.mts +18 -0
- package/dist/{worker.mjs → worker/worker.mjs} +64 -118
- package/package.json +28 -47
- package/dist/engine/execution-api.d.mts +0 -29
- package/dist/engine/execution-api.mjs +0 -33
- package/dist/engine/inspection-api.d.mts +0 -34
- package/dist/engine/inspection-api.mjs +0 -78
- package/dist/engine/mod.d.mts +0 -4
- package/dist/engine/mod.mjs +0 -2
- package/dist/engine/recovery.d.mts +0 -26
- package/dist/engine/recovery.mjs +0 -92
- package/dist/engine/retry-policy.d.mts +0 -4
- package/dist/engine/retry-policy.mjs +0 -4
- package/dist/engine/start-api.d.mts +0 -30
- package/dist/engine/start-api.mjs +0 -99
- package/dist/engine/summary/active-events.d.mts +0 -34
- package/dist/engine/summary/active-events.mjs +0 -69
- package/dist/engine/summary/child-workflow-runs.d.mts +0 -24
- package/dist/engine/summary/child-workflow-runs.mjs +0 -138
- package/dist/engine/summary/child-workflow-waits.d.mts +0 -21
- package/dist/engine/summary/child-workflow-waits.mjs +0 -67
- package/dist/engine/summary/recovery-child-workflow-waits.d.mts +0 -11
- package/dist/engine/summary/recovery-child-workflow-waits.mjs +0 -89
- package/dist/engine/summary/recovery-due-runs.d.mts +0 -16
- package/dist/engine/summary/recovery-due-runs.mjs +0 -52
- package/dist/engine/summary/recovery-failed-runs.d.mts +0 -14
- package/dist/engine/summary/recovery-failed-runs.mjs +0 -33
- package/dist/engine/summary/recovery-lease-runs.d.mts +0 -16
- package/dist/engine/summary/recovery-lease-runs.mjs +0 -69
- package/dist/engine/summary/recovery-locks.d.mts +0 -18
- package/dist/engine/summary/recovery-locks.mjs +0 -100
- package/dist/engine/summary/recovery-message-waits.d.mts +0 -11
- package/dist/engine/summary/recovery-message-waits.mjs +0 -74
- package/dist/engine/summary/recovery-retry-runs.d.mts +0 -17
- package/dist/engine/summary/recovery-retry-runs.mjs +0 -65
- package/dist/engine/summary/recovery-run-timestamps.d.mts +0 -13
- package/dist/engine/summary/recovery-run-timestamps.mjs +0 -18
- package/dist/engine/summary/recovery-runs.d.mts +0 -23
- package/dist/engine/summary/recovery-runs.mjs +0 -54
- package/dist/engine/summary/recovery-schedules.d.mts +0 -10
- package/dist/engine/summary/recovery-schedules.mjs +0 -46
- package/dist/engine/summary/recovery-sleep-waits.d.mts +0 -10
- package/dist/engine/summary/recovery-sleep-waits.mjs +0 -53
- package/dist/engine/summary/recovery-waits.d.mts +0 -21
- package/dist/engine/summary/recovery-waits.mjs +0 -29
- package/dist/engine/summary/run-availability.d.mts +0 -13
- package/dist/engine/summary/run-availability.mjs +0 -37
- package/dist/engine/summary/run-cleanup.d.mts +0 -14
- package/dist/engine/summary/run-cleanup.mjs +0 -44
- package/dist/engine/summary/run-failure.d.mts +0 -14
- package/dist/engine/summary/run-failure.mjs +0 -62
- package/dist/engine/summary/run-hooks.d.mts +0 -14
- package/dist/engine/summary/run-hooks.mjs +0 -63
- package/dist/engine/summary/run-lease.d.mts +0 -11
- package/dist/engine/summary/run-lease.mjs +0 -64
- package/dist/engine/summary/run-message-waits.d.mts +0 -15
- package/dist/engine/summary/run-message-waits.mjs +0 -62
- package/dist/engine/summary/run-metrics.d.mts +0 -31
- package/dist/engine/summary/run-metrics.mjs +0 -93
- package/dist/engine/summary/run-retry.d.mts +0 -9
- package/dist/engine/summary/run-retry.mjs +0 -69
- package/dist/engine/summary/run-sleeps.d.mts +0 -15
- package/dist/engine/summary/run-sleeps.mjs +0 -61
- package/dist/engine/summary/run-state.d.mts +0 -26
- package/dist/engine/summary/run-state.mjs +0 -48
- package/dist/engine/summary/run-status.d.mts +0 -16
- package/dist/engine/summary/run-status.mjs +0 -35
- package/dist/engine/summary/run-streams.d.mts +0 -14
- package/dist/engine/summary/run-streams.mjs +0 -46
- package/dist/engine/summary/run-transition.d.mts +0 -9
- package/dist/engine/summary/run-transition.mjs +0 -39
- package/dist/engine/summary/run-workflow.d.mts +0 -9
- package/dist/engine/summary/run-workflow.mjs +0 -47
- package/dist/engine/summary/step-attempt-active-child-workflows.d.mts +0 -13
- package/dist/engine/summary/step-attempt-active-child-workflows.mjs +0 -55
- package/dist/engine/summary/step-attempt-active-fields.d.mts +0 -23
- package/dist/engine/summary/step-attempt-active-fields.mjs +0 -14
- package/dist/engine/summary/step-attempt-active-message-waits.d.mts +0 -12
- package/dist/engine/summary/step-attempt-active-message-waits.mjs +0 -47
- package/dist/engine/summary/step-attempt-active-sleeps.d.mts +0 -19
- package/dist/engine/summary/step-attempt-active-sleeps.mjs +0 -44
- package/dist/engine/summary/step-attempt-buckets.d.mts +0 -22
- package/dist/engine/summary/step-attempt-buckets.mjs +0 -152
- package/dist/engine/summary/step-attempt-failure.d.mts +0 -12
- package/dist/engine/summary/step-attempt-failure.mjs +0 -61
- package/dist/engine/summary/step-attempt-lifecycle.d.mts +0 -13
- package/dist/engine/summary/step-attempt-lifecycle.mjs +0 -19
- package/dist/engine/summary.d.mts +0 -32
- package/dist/engine/summary.mjs +0 -37
- package/dist/errors/details.d.mts +0 -13
- package/dist/errors/details.mjs +0 -66
- package/dist/errors/record-view.d.mts +0 -11
- package/dist/errors/record-view.mjs +0 -24
- package/dist/errors/runtime.d.mts +0 -12
- package/dist/errors/runtime.mjs +0 -24
- package/dist/events/mod.d.mts +0 -3
- package/dist/events/mod.mjs +0 -2
- package/dist/history/attempt-key.d.mts +0 -6
- package/dist/history/attempt-key.mjs +0 -7
- package/dist/inspection/mod.d.mts +0 -5
- package/dist/inspection/mod.mjs +0 -3
- package/dist/otel.mjs +0 -590
- package/dist/runtime.d.mts +0 -35
- package/dist/runtime.mjs +0 -198
- package/dist/store/append-projection.d.mts +0 -15
- package/dist/store/append-projection.mjs +0 -26
- package/dist/store/compaction.d.mts +0 -5
- package/dist/store/compaction.mjs +0 -8
- package/dist/store/event-append-project.d.mts +0 -15
- package/dist/store/event-append-project.mjs +0 -77
- package/dist/store/event-append.d.mts +0 -37
- package/dist/store/event-append.mjs +0 -80
- package/dist/store/event-history.d.mts +0 -22
- package/dist/store/event-history.mjs +0 -75
- package/dist/store/event.d.mts +0 -10
- package/dist/store/event.mjs +0 -28
- package/dist/store/idempotency.d.mts +0 -10
- package/dist/store/idempotency.mjs +0 -167
- package/dist/store/message-index.d.mts +0 -21
- package/dist/store/message-index.mjs +0 -122
- package/dist/store/revision.d.mts +0 -4
- package/dist/store/revision.mjs +0 -7
- package/dist/store/schema.d.mts +0 -14
- package/dist/store/schema.mjs +0 -17
- package/dist/types/common.d.mts +0 -20
- package/dist/types/common.mjs +0 -16
- package/dist/types/error-code.d.mts +0 -256
- package/dist/types/message-id.d.mts +0 -7
- package/dist/types/message-id.mjs +0 -5
- package/dist/types/run-id.d.mts +0 -7
- package/dist/types/run-id.mjs +0 -5
- package/dist/types/step-id.d.mts +0 -7
- package/dist/types/step-id.mjs +0 -5
- package/dist/types/stream-id.d.mts +0 -7
- package/dist/types/stream-id.mjs +0 -5
- package/dist/types/worker-id.d.mts +0 -7
- package/dist/types/worker-id.mjs +0 -5
- package/dist/utility.d.mts +0 -49
- package/dist/utility.mjs +0 -122
- package/dist/vite/ast.d.mts +0 -23
- package/dist/vite/generated-name.d.mts +0 -7
- package/dist/vite/generated-name.mjs +0 -9
- package/dist/vite/manifest.d.mts +0 -7
- package/dist/vite/plugin.d.mts +0 -7
- package/dist/vite/safety.d.mts +0 -12
- package/dist/vite/source.d.mts +0 -7
- package/dist/vite/transform.d.mts +0 -7
- package/dist/webhook.d.mts +0 -16
- package/dist/webhook.mjs +0 -17
- package/dist/worker.d.mts +0 -19
- /package/dist/{types/vite.mjs → engine/context.mjs} +0 -0
|
@@ -1,11 +1,6 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
1
|
+
import { StepAttemptRecord, StepAttemptSummary } from "../../types/step-attempts.mjs";
|
|
2
|
+
import { RunRecord } from "../../types/run.mjs";
|
|
3
3
|
//#region src/engine/summary/step-attempts.d.ts
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
}
|
|
8
|
-
/** Creates a reducer for materialized step attempts and active child workflow records. */
|
|
9
|
-
declare function createWorkflowStepAttemptSummaryReducer(childRuns?: readonly WorkflowRunRecord[]): WorkflowStepAttemptSummaryReducer;
|
|
10
|
-
//#endregion
|
|
11
|
-
export { WorkflowStepAttemptSummaryReducer, createWorkflowStepAttemptSummaryReducer };
|
|
4
|
+
/** Summarizes one run's step attempts, with the child runs its workflow steps started. */
|
|
5
|
+
export declare function summarizeStepAttempts(attempts: readonly StepAttemptRecord[], childRuns?: readonly RunRecord[]): StepAttemptSummary;
|
|
6
|
+
//#endregion
|
|
@@ -1,43 +1,164 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
5
|
-
import { createWorkflowStepAttemptBucketSummaryReducer } from "./step-attempt-buckets.mjs";
|
|
6
|
-
import { createWorkflowStepAttemptFailureSummaryReducer } from "./step-attempt-failure.mjs";
|
|
7
|
-
import { createWorkflowStepAttemptLifecycleSummaryReducer } from "./step-attempt-lifecycle.mjs";
|
|
1
|
+
import { earliestOptionalTimestamp, latestOptionalTimestamp } from "../../temporal.mjs";
|
|
2
|
+
import { stepAttemptKey } from "../../store-keys.mjs";
|
|
3
|
+
import { Earliest, WaitTally, sorted } from "./tally.mjs";
|
|
4
|
+
import { summarizeChildRuns } from "./runs.mjs";
|
|
8
5
|
//#region src/engine/summary/step-attempts.ts
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
6
|
+
const STEP_ATTEMPT_STATUSES = [
|
|
7
|
+
"running",
|
|
8
|
+
"completed",
|
|
9
|
+
"failed",
|
|
10
|
+
"abandoned"
|
|
11
|
+
];
|
|
12
|
+
const STEP_TYPES = [
|
|
13
|
+
"run",
|
|
14
|
+
"sleep",
|
|
15
|
+
"workflow",
|
|
16
|
+
"message-send",
|
|
17
|
+
"message-wait",
|
|
18
|
+
"stream",
|
|
19
|
+
"deterministic"
|
|
20
|
+
];
|
|
21
|
+
/** Summarizes one run's step attempts, with the child runs its workflow steps started. */
|
|
22
|
+
function summarizeStepAttempts(attempts, childRuns = []) {
|
|
23
|
+
const byStatus = new Buckets(STEP_ATTEMPT_STATUSES);
|
|
24
|
+
const byKind = new Buckets(STEP_TYPES);
|
|
25
|
+
const failure = new StepFailureTally();
|
|
26
|
+
const sleeps = {
|
|
27
|
+
stepIds: /* @__PURE__ */ new Set(),
|
|
28
|
+
attemptKeys: /* @__PURE__ */ new Set()
|
|
29
|
+
};
|
|
30
|
+
const nextSleep = new Earliest();
|
|
31
|
+
const messageWaits = new WaitTally();
|
|
32
|
+
const messages = /* @__PURE__ */ new Set();
|
|
33
|
+
const childWaits = new WaitTally();
|
|
34
|
+
const childRunIds = /* @__PURE__ */ new Set();
|
|
35
|
+
const workflows = /* @__PURE__ */ new Set();
|
|
36
|
+
let oldestRunningAt;
|
|
37
|
+
let latestFinishedAt;
|
|
38
|
+
for (const attempt of attempts) {
|
|
39
|
+
const attemptKey = stepAttemptKey(attempt.stepId, attempt.attempt);
|
|
40
|
+
byStatus.add(attempt.status, attempt.stepId, attemptKey);
|
|
41
|
+
byKind.add(attempt.kind, attempt.stepId, attemptKey);
|
|
42
|
+
failure.add(attempt, attemptKey);
|
|
43
|
+
latestFinishedAt = latestOptionalTimestamp(latestFinishedAt, attempt.finishedAt);
|
|
44
|
+
if (attempt.status !== "running") continue;
|
|
45
|
+
oldestRunningAt = earliestOptionalTimestamp(oldestRunningAt, attempt.startedAt);
|
|
46
|
+
const next = {
|
|
47
|
+
stepId: attempt.stepId,
|
|
48
|
+
attemptKey
|
|
49
|
+
};
|
|
50
|
+
if (attempt.kind === "sleep") {
|
|
51
|
+
sleeps.stepIds.add(attempt.stepId);
|
|
52
|
+
sleeps.attemptKeys.add(attemptKey);
|
|
53
|
+
nextSleep.offer(attempt.until, {
|
|
54
|
+
...next,
|
|
55
|
+
duration: attempt.duration instanceof Temporal.Duration ? attempt.duration : void 0
|
|
56
|
+
});
|
|
57
|
+
} else if (attempt.kind === "message-wait") {
|
|
58
|
+
messageWaits.add(attempt.stepId, attemptKey, attempt.startedAt);
|
|
59
|
+
messageWaits.next.offer(attempt.timeoutAt, next);
|
|
60
|
+
if (attempt.messageId !== void 0) messages.add(attempt.messageId);
|
|
61
|
+
} else if (attempt.kind === "workflow") {
|
|
62
|
+
childWaits.add(attempt.stepId, attemptKey, attempt.startedAt);
|
|
63
|
+
childWaits.next.offer(attempt.timeoutAt, next);
|
|
64
|
+
if (attempt.childRunId !== void 0) childRunIds.add(attempt.childRunId);
|
|
65
|
+
if (attempt.workflowName !== void 0) workflows.add(attempt.workflowVersion === void 0 ? attempt.workflowName : `${attempt.workflowName}@${attempt.workflowVersion}`);
|
|
66
|
+
}
|
|
67
|
+
}
|
|
18
68
|
return {
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
69
|
+
total: attempts.length,
|
|
70
|
+
statusStepIds: byStatus.stepIds(),
|
|
71
|
+
statusAttemptKeys: byStatus.attemptKeys(),
|
|
72
|
+
kindStepIds: byKind.stepIds(),
|
|
73
|
+
kindAttemptKeys: byKind.attemptKeys(),
|
|
74
|
+
failure: failure.finish(),
|
|
75
|
+
oldestRunningAt,
|
|
76
|
+
latestFinishedAt,
|
|
77
|
+
sleep: sleeps.stepIds.size === 0 ? void 0 : {
|
|
78
|
+
stepIds: sorted(sleeps.stepIds),
|
|
79
|
+
attemptKeys: sorted(sleeps.attemptKeys),
|
|
80
|
+
next: nextSleep.next
|
|
28
81
|
},
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
82
|
+
childWorkflow: childWaits.total === 0 ? void 0 : {
|
|
83
|
+
stepIds: sorted(childWaits.stepIds),
|
|
84
|
+
attemptKeys: sorted(childWaits.attemptKeys),
|
|
85
|
+
childRunIds: sorted(childRunIds),
|
|
86
|
+
workflows: sorted(workflows),
|
|
87
|
+
...summarizeChildRuns(childRuns.filter((run) => childRunIds.has(run.id))),
|
|
88
|
+
oldestStartedAt: childWaits.oldestStartedAt,
|
|
89
|
+
next: childWaits.next.next
|
|
90
|
+
},
|
|
91
|
+
message: messageWaits.total === 0 ? void 0 : {
|
|
92
|
+
stepIds: sorted(messageWaits.stepIds),
|
|
93
|
+
attemptKeys: sorted(messageWaits.attemptKeys),
|
|
94
|
+
messages: sorted(messages),
|
|
95
|
+
oldestStartedAt: messageWaits.oldestStartedAt,
|
|
96
|
+
next: messageWaits.next.next
|
|
39
97
|
}
|
|
40
98
|
};
|
|
41
99
|
}
|
|
100
|
+
/** Step IDs and attempt keys grouped by status or by kind. */
|
|
101
|
+
var Buckets = class {
|
|
102
|
+
#keys;
|
|
103
|
+
#stepIds = /* @__PURE__ */ new Map();
|
|
104
|
+
#attemptKeys = /* @__PURE__ */ new Map();
|
|
105
|
+
constructor(keys) {
|
|
106
|
+
this.#keys = keys;
|
|
107
|
+
}
|
|
108
|
+
add(key, stepId, attemptKey) {
|
|
109
|
+
push(this.#stepIds, key, stepId);
|
|
110
|
+
push(this.#attemptKeys, key, attemptKey);
|
|
111
|
+
}
|
|
112
|
+
stepIds() {
|
|
113
|
+
return this.#sorted(this.#stepIds);
|
|
114
|
+
}
|
|
115
|
+
attemptKeys() {
|
|
116
|
+
return this.#sorted(this.#attemptKeys);
|
|
117
|
+
}
|
|
118
|
+
#sorted(lists) {
|
|
119
|
+
return Object.fromEntries(this.#keys.map((key) => [key, sorted(lists.get(key) ?? [])]));
|
|
120
|
+
}
|
|
121
|
+
};
|
|
122
|
+
function push(lists, key, value) {
|
|
123
|
+
const list = lists.get(key);
|
|
124
|
+
if (list === void 0) lists.set(key, [value]);
|
|
125
|
+
else list.push(value);
|
|
126
|
+
}
|
|
127
|
+
/** Failed step attempts grouped by error name. */
|
|
128
|
+
var StepFailureTally = class {
|
|
129
|
+
#latestFailedAt;
|
|
130
|
+
#failedStepIds = /* @__PURE__ */ new Set();
|
|
131
|
+
#failedAttemptKeys = /* @__PURE__ */ new Set();
|
|
132
|
+
#errors = /* @__PURE__ */ new Map();
|
|
133
|
+
add(attempt, attemptKey) {
|
|
134
|
+
if (attempt.status !== "failed") return;
|
|
135
|
+
this.#failedStepIds.add(attempt.stepId);
|
|
136
|
+
this.#failedAttemptKeys.add(attemptKey);
|
|
137
|
+
this.#latestFailedAt = latestOptionalTimestamp(this.#latestFailedAt, attempt.finishedAt);
|
|
138
|
+
const name = attempt.error?.name ?? "Error";
|
|
139
|
+
const error = this.#errors.get(name) ?? {
|
|
140
|
+
failedStepIds: /* @__PURE__ */ new Set(),
|
|
141
|
+
failedAttemptKeys: /* @__PURE__ */ new Set()
|
|
142
|
+
};
|
|
143
|
+
error.failedStepIds.add(attempt.stepId);
|
|
144
|
+
error.failedAttemptKeys.add(attemptKey);
|
|
145
|
+
error.latestFailedAt = latestOptionalTimestamp(error.latestFailedAt, attempt.finishedAt);
|
|
146
|
+
this.#errors.set(name, error);
|
|
147
|
+
}
|
|
148
|
+
finish() {
|
|
149
|
+
if (this.#failedAttemptKeys.size === 0) return;
|
|
150
|
+
return {
|
|
151
|
+
stepIds: sorted(this.#failedStepIds),
|
|
152
|
+
attemptKeys: sorted(this.#failedAttemptKeys),
|
|
153
|
+
errors: [...this.#errors.entries()].sort(([left], [right]) => left.localeCompare(right)).map(([name, error]) => ({
|
|
154
|
+
name,
|
|
155
|
+
stepIds: sorted(error.failedStepIds),
|
|
156
|
+
attemptKeys: sorted(error.failedAttemptKeys),
|
|
157
|
+
latestFailedAt: error.latestFailedAt
|
|
158
|
+
})),
|
|
159
|
+
latestFailedAt: this.#latestFailedAt
|
|
160
|
+
};
|
|
161
|
+
}
|
|
162
|
+
};
|
|
42
163
|
//#endregion
|
|
43
|
-
export {
|
|
164
|
+
export { summarizeStepAttempts };
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import { RunFailureSummary, RunRetrySummary } from "../../types/summary.mjs";
|
|
2
|
+
import { RunRecord } from "../../types/run.mjs";
|
|
3
|
+
//#region src/engine/summary/tally.d.ts
|
|
4
|
+
export declare const RUN_STATUSES: readonly ["pending", "running", "waiting", "completed", "failed", "canceled"];
|
|
5
|
+
export declare const TERMINAL_RUN_STATUSES: readonly ["completed", "failed", "canceled"];
|
|
6
|
+
export declare const RUN_TRANSITION_REASONS: readonly ["created", "claimed", "reclaimed", "started", "waiting", "rescheduled", "lease_released", "manual_retry", "permanent_failure", "retry", "missing_implementation", "completed", "failed", "deadline", "canceled"];
|
|
7
|
+
/** Keeps the entry with the earliest instant. Ties keep the first entry. */
|
|
8
|
+
export declare class Earliest<T extends object> {
|
|
9
|
+
#private;
|
|
10
|
+
get at(): Temporal.Instant | undefined;
|
|
11
|
+
get next(): (T & {
|
|
12
|
+
readonly at: Temporal.Instant;
|
|
13
|
+
}) | undefined;
|
|
14
|
+
offer(at: Temporal.Instant | undefined, value: T): void;
|
|
15
|
+
}
|
|
16
|
+
export declare function sorted(values: Iterable<string>): readonly string[];
|
|
17
|
+
/** Sorted values, or `undefined` when there are none. */
|
|
18
|
+
export declare function sortedOrUndefined(values: ReadonlySet<string>): readonly string[] | undefined;
|
|
19
|
+
export declare function counts<const TKey extends string>(keys: readonly TKey[]): Record<TKey, number>;
|
|
20
|
+
/** Runs scheduled for a retry: why, which steps, and which retry comes next. */
|
|
21
|
+
export declare class RetryTally {
|
|
22
|
+
#private;
|
|
23
|
+
get total(): number;
|
|
24
|
+
add(run: RunRecord): void;
|
|
25
|
+
runIds(): readonly string[] | undefined;
|
|
26
|
+
finish(): RunRetrySummary;
|
|
27
|
+
}
|
|
28
|
+
/** Failed runs grouped by error name. */
|
|
29
|
+
export declare class FailureTally {
|
|
30
|
+
#private;
|
|
31
|
+
get total(): number;
|
|
32
|
+
add(run: RunRecord): void;
|
|
33
|
+
finish(): RunFailureSummary;
|
|
34
|
+
}
|
|
35
|
+
/** Waits of one kind across runs: who waits, since when, and which wait ends first. */
|
|
36
|
+
export declare class WaitTally<TNext extends object> {
|
|
37
|
+
total: number;
|
|
38
|
+
oldestStartedAt: Temporal.Instant | undefined;
|
|
39
|
+
readonly next: Earliest<TNext>;
|
|
40
|
+
readonly stepIds: Set<string>;
|
|
41
|
+
readonly attemptKeys: Set<string>;
|
|
42
|
+
add(stepId: string, attemptKey: string | undefined, startedAt: Temporal.Instant | undefined): void;
|
|
43
|
+
}
|
|
44
|
+
//#endregion
|
|
@@ -0,0 +1,142 @@
|
|
|
1
|
+
import { earliestOptionalTimestamp, latestOptionalTimestamp } from "../../temporal.mjs";
|
|
2
|
+
import { greatestOptionalNumber } from "../../values.mjs";
|
|
3
|
+
import { isScheduledRunStatus } from "../../run-status.mjs";
|
|
4
|
+
//#region src/engine/summary/tally.ts
|
|
5
|
+
const RUN_STATUSES = [
|
|
6
|
+
"pending",
|
|
7
|
+
"running",
|
|
8
|
+
"waiting",
|
|
9
|
+
"completed",
|
|
10
|
+
"failed",
|
|
11
|
+
"canceled"
|
|
12
|
+
];
|
|
13
|
+
const TERMINAL_RUN_STATUSES = [
|
|
14
|
+
"completed",
|
|
15
|
+
"failed",
|
|
16
|
+
"canceled"
|
|
17
|
+
];
|
|
18
|
+
const RUN_TRANSITION_REASONS = [
|
|
19
|
+
"created",
|
|
20
|
+
"claimed",
|
|
21
|
+
"reclaimed",
|
|
22
|
+
"started",
|
|
23
|
+
"waiting",
|
|
24
|
+
"rescheduled",
|
|
25
|
+
"lease_released",
|
|
26
|
+
"manual_retry",
|
|
27
|
+
"permanent_failure",
|
|
28
|
+
"retry",
|
|
29
|
+
"missing_implementation",
|
|
30
|
+
"completed",
|
|
31
|
+
"failed",
|
|
32
|
+
"deadline",
|
|
33
|
+
"canceled"
|
|
34
|
+
];
|
|
35
|
+
const RUN_RETRY_REASONS = [
|
|
36
|
+
"workflow",
|
|
37
|
+
"step",
|
|
38
|
+
"missing_implementation"
|
|
39
|
+
];
|
|
40
|
+
/** Keeps the entry with the earliest instant. Ties keep the first entry. */
|
|
41
|
+
var Earliest = class {
|
|
42
|
+
#next;
|
|
43
|
+
get at() {
|
|
44
|
+
return this.#next?.at;
|
|
45
|
+
}
|
|
46
|
+
get next() {
|
|
47
|
+
return this.#next;
|
|
48
|
+
}
|
|
49
|
+
offer(at, value) {
|
|
50
|
+
if (at !== void 0 && (this.#next === void 0 || Temporal.Instant.compare(at, this.#next.at) < 0)) this.#next = {
|
|
51
|
+
...value,
|
|
52
|
+
at
|
|
53
|
+
};
|
|
54
|
+
}
|
|
55
|
+
};
|
|
56
|
+
function sorted(values) {
|
|
57
|
+
return [...values].sort();
|
|
58
|
+
}
|
|
59
|
+
/** Sorted values, or `undefined` when there are none. */
|
|
60
|
+
function sortedOrUndefined(values) {
|
|
61
|
+
return values.size === 0 ? void 0 : sorted(values);
|
|
62
|
+
}
|
|
63
|
+
function counts(keys) {
|
|
64
|
+
return Object.fromEntries(keys.map((key) => [key, 0]));
|
|
65
|
+
}
|
|
66
|
+
/** Runs scheduled for a retry: why, which steps, and which retry comes next. */
|
|
67
|
+
var RetryTally = class {
|
|
68
|
+
#highestAttempt;
|
|
69
|
+
#next = new Earliest();
|
|
70
|
+
#reason = counts(RUN_RETRY_REASONS);
|
|
71
|
+
#runIds = /* @__PURE__ */ new Set();
|
|
72
|
+
#stepNames = /* @__PURE__ */ new Set();
|
|
73
|
+
get total() {
|
|
74
|
+
return this.#runIds.size;
|
|
75
|
+
}
|
|
76
|
+
add(run) {
|
|
77
|
+
if (!isScheduledRunStatus(run.status) || run.retryReason === void 0) return;
|
|
78
|
+
this.#runIds.add(run.id);
|
|
79
|
+
this.#reason[run.retryReason]++;
|
|
80
|
+
if (run.retryStepName !== void 0) this.#stepNames.add(run.retryStepName);
|
|
81
|
+
this.#highestAttempt = greatestOptionalNumber(this.#highestAttempt, run.retryAttempt);
|
|
82
|
+
this.#next.offer(run.retryAt, { runId: run.id });
|
|
83
|
+
}
|
|
84
|
+
runIds() {
|
|
85
|
+
return sortedOrUndefined(this.#runIds);
|
|
86
|
+
}
|
|
87
|
+
finish() {
|
|
88
|
+
return {
|
|
89
|
+
count: this.#runIds.size,
|
|
90
|
+
stepNames: sorted(this.#stepNames),
|
|
91
|
+
reason: this.#reason,
|
|
92
|
+
highestAttempt: this.#highestAttempt,
|
|
93
|
+
next: this.#next.next
|
|
94
|
+
};
|
|
95
|
+
}
|
|
96
|
+
};
|
|
97
|
+
/** Failed runs grouped by error name. */
|
|
98
|
+
var FailureTally = class {
|
|
99
|
+
#latestFailedAt;
|
|
100
|
+
#failedRunIds = /* @__PURE__ */ new Set();
|
|
101
|
+
#errors = /* @__PURE__ */ new Map();
|
|
102
|
+
get total() {
|
|
103
|
+
return this.#failedRunIds.size;
|
|
104
|
+
}
|
|
105
|
+
add(run) {
|
|
106
|
+
if (run.status !== "failed") return;
|
|
107
|
+
this.#failedRunIds.add(run.id);
|
|
108
|
+
this.#latestFailedAt = latestOptionalTimestamp(this.#latestFailedAt, run.finishedAt);
|
|
109
|
+
const name = run.error?.name ?? "Error";
|
|
110
|
+
const error = this.#errors.get(name) ?? { failedRunIds: /* @__PURE__ */ new Set() };
|
|
111
|
+
error.failedRunIds.add(run.id);
|
|
112
|
+
error.latestFailedAt = latestOptionalTimestamp(error.latestFailedAt, run.finishedAt);
|
|
113
|
+
this.#errors.set(name, error);
|
|
114
|
+
}
|
|
115
|
+
finish() {
|
|
116
|
+
return {
|
|
117
|
+
count: this.#failedRunIds.size,
|
|
118
|
+
errors: [...this.#errors.entries()].sort(([left], [right]) => left.localeCompare(right)).map(([name, error]) => ({
|
|
119
|
+
name,
|
|
120
|
+
count: error.failedRunIds.size,
|
|
121
|
+
latestFailedAt: error.latestFailedAt
|
|
122
|
+
})),
|
|
123
|
+
latestFailedAt: this.#latestFailedAt
|
|
124
|
+
};
|
|
125
|
+
}
|
|
126
|
+
};
|
|
127
|
+
/** Waits of one kind across runs: who waits, since when, and which wait ends first. */
|
|
128
|
+
var WaitTally = class {
|
|
129
|
+
total = 0;
|
|
130
|
+
oldestStartedAt;
|
|
131
|
+
next = new Earliest();
|
|
132
|
+
stepIds = /* @__PURE__ */ new Set();
|
|
133
|
+
attemptKeys = /* @__PURE__ */ new Set();
|
|
134
|
+
add(stepId, attemptKey, startedAt) {
|
|
135
|
+
this.total++;
|
|
136
|
+
this.stepIds.add(stepId);
|
|
137
|
+
if (attemptKey !== void 0) this.attemptKeys.add(attemptKey);
|
|
138
|
+
this.oldestStartedAt = earliestOptionalTimestamp(this.oldestStartedAt, startedAt);
|
|
139
|
+
}
|
|
140
|
+
};
|
|
141
|
+
//#endregion
|
|
142
|
+
export { Earliest, FailureTally, RUN_STATUSES, RUN_TRANSITION_REASONS, RetryTally, TERMINAL_RUN_STATUSES, WaitTally, counts, sorted, sortedOrUndefined };
|
package/dist/engine/task.d.mts
CHANGED
|
@@ -1,6 +1,5 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
1
|
+
import { StepTaskApi } from "../types/step.mjs";
|
|
2
|
+
import { ExecutionEnvironment } from "../types/engine.mjs";
|
|
3
3
|
//#region src/engine/task.d.ts
|
|
4
|
-
declare function
|
|
5
|
-
//#endregion
|
|
6
|
-
export { createWorkflowStepTaskApi };
|
|
4
|
+
export declare function createStepTaskApi(environment: ExecutionEnvironment, executionSignal: AbortSignal): StepTaskApi;
|
|
5
|
+
//#endregion
|
package/dist/engine/task.mjs
CHANGED
|
@@ -1,22 +1,22 @@
|
|
|
1
1
|
import { WorkflowDurationError, WorkflowNonRetryableError } from "../errors/failures.mjs";
|
|
2
|
-
import { isAbortError, safeDuration } from "../utility.mjs";
|
|
3
2
|
import { WorkflowStepExecutionError, WorkflowStepRetryLimitError, WorkflowStepTimeoutError } from "../errors/step.mjs";
|
|
4
3
|
import "../errors/mod.mjs";
|
|
5
|
-
import {
|
|
4
|
+
import { isAbortError, safeDuration } from "../values.mjs";
|
|
6
5
|
import { serializeError, toOptionalPersistedValue } from "./serialization.mjs";
|
|
7
|
-
import { nextRetryAt,
|
|
8
|
-
import {
|
|
9
|
-
import {
|
|
10
|
-
import {
|
|
11
|
-
import {
|
|
6
|
+
import { nextRetryAt, resolveRetryConfig, retryClassificationRetryAt } from "./retry.mjs";
|
|
7
|
+
import { Suspended } from "./signals.mjs";
|
|
8
|
+
import { resolveCommandIdentityFromCandidates } from "./command-identity.mjs";
|
|
9
|
+
import { appendDurableEvent, appendDurableStepStartedEvent } from "./durable-command.mjs";
|
|
10
|
+
import { WORKFLOW_ATTRIBUTES, withStepTelemetry } from "../telemetry.mjs";
|
|
11
|
+
import { isRunStepTerminalForStartedAttempt, recordedInstant, requireRecordedDurableStepStarted, requireRunStepReplayTimeoutMatches, sleepUntil } from "./replay.mjs";
|
|
12
12
|
//#region src/engine/task.ts
|
|
13
|
-
function
|
|
13
|
+
function createStepTaskApi(environment, executionSignal) {
|
|
14
14
|
const { runId, history, now, limits, executionOwner, telemetry } = environment;
|
|
15
15
|
const run = async (config, callback) => {
|
|
16
|
-
const identity =
|
|
16
|
+
const identity = resolveCommandIdentityFromCandidates(history, "run", [config.commandId, config.name], "Workflow step name or commandId");
|
|
17
17
|
const timeout = config.timeout === void 0 ? void 0 : (() => {
|
|
18
18
|
const value = safeDuration(config.timeout.total({ unit: "millisecond" }), "Workflow step timeout");
|
|
19
|
-
if (value <= 0) WorkflowDurationError
|
|
19
|
+
if (value <= 0) throw new WorkflowDurationError("Workflow step timeout must be greater than zero");
|
|
20
20
|
return value;
|
|
21
21
|
})();
|
|
22
22
|
const started = history.startedStep(identity.id);
|
|
@@ -24,41 +24,41 @@ function createWorkflowStepTaskApi(environment, executionSignal) {
|
|
|
24
24
|
if (completed !== void 0 && (started === void 0 || isRunStepTerminalForStartedAttempt(completed, started))) {
|
|
25
25
|
requireRecordedDurableStepStarted(identity, history.hasStartedEventBeforeTerminalEvent(completed));
|
|
26
26
|
requireRunStepReplayTimeoutMatches(identity, started, config);
|
|
27
|
-
|
|
27
|
+
recordedInstant("run", identity, "completion", completed.timestamp);
|
|
28
28
|
return completed.result;
|
|
29
29
|
}
|
|
30
30
|
if (history.unstartedFailedStep(identity.id) !== void 0) requireRecordedDurableStepStarted(identity, false);
|
|
31
|
-
const retry =
|
|
31
|
+
const retry = resolveRetryConfig(config.retry, {
|
|
32
32
|
maximumAttempts: 10,
|
|
33
33
|
backoffCoefficient: 2
|
|
34
34
|
}, "Workflow step retry");
|
|
35
35
|
let attempt = history.nextStepAttempt(identity.id);
|
|
36
36
|
while (retry.maximumAttempts === 0 || attempt <= retry.maximumAttempts) {
|
|
37
37
|
const startedAt = now();
|
|
38
|
-
const timestamp = startedAt;
|
|
39
38
|
const timeoutAt = timeout === void 0 ? void 0 : startedAt.add(Temporal.Duration.from({ milliseconds: timeout }));
|
|
40
|
-
|
|
39
|
+
const startedEvent = {
|
|
41
40
|
kind: "step_started",
|
|
42
|
-
timestamp,
|
|
41
|
+
timestamp: startedAt,
|
|
43
42
|
stepId: identity.id,
|
|
44
43
|
stepName: identity.name,
|
|
45
44
|
count: identity.count,
|
|
46
45
|
attempt,
|
|
47
|
-
|
|
48
|
-
}
|
|
46
|
+
timeoutAt
|
|
47
|
+
};
|
|
48
|
+
await appendDurableStepStartedEvent(environment, startedEvent);
|
|
49
|
+
const telemetryContext = {
|
|
50
|
+
run: executionOwner,
|
|
51
|
+
step: {
|
|
52
|
+
id: identity.id,
|
|
53
|
+
name: identity.name,
|
|
54
|
+
count: identity.count,
|
|
55
|
+
kind: "run"
|
|
56
|
+
},
|
|
57
|
+
attempt,
|
|
58
|
+
retry,
|
|
59
|
+
timeoutAt
|
|
60
|
+
};
|
|
49
61
|
try {
|
|
50
|
-
const telemetryContext = {
|
|
51
|
-
run: executionOwner,
|
|
52
|
-
step: {
|
|
53
|
-
id: identity.id,
|
|
54
|
-
name: identity.name,
|
|
55
|
-
count: identity.count,
|
|
56
|
-
kind: "run"
|
|
57
|
-
},
|
|
58
|
-
attempt,
|
|
59
|
-
retry,
|
|
60
|
-
...timeoutAt === void 0 ? {} : { timeoutAt }
|
|
61
|
-
};
|
|
62
62
|
const result = await withStepTelemetry(telemetry, telemetryContext, async () => {
|
|
63
63
|
return await runStepCallbackWithTimeout(callback, createStepContext(identity, attempt, retry, executionSignal, environment.logger.child({
|
|
64
64
|
[WORKFLOW_ATTRIBUTES.stepId]: identity.id,
|
|
@@ -79,34 +79,26 @@ function createWorkflowStepTaskApi(environment, executionSignal) {
|
|
|
79
79
|
telemetry?.recordStepExecution?.(telemetryContext);
|
|
80
80
|
} catch {}
|
|
81
81
|
const persistedResult = toOptionalPersistedValue(result, "step result", limits);
|
|
82
|
-
|
|
82
|
+
const completedEvent = {
|
|
83
83
|
kind: "step_completed",
|
|
84
84
|
timestamp: now(),
|
|
85
85
|
stepId: identity.id,
|
|
86
86
|
stepName: identity.name,
|
|
87
87
|
attempt,
|
|
88
|
-
|
|
89
|
-
}
|
|
88
|
+
result: persistedResult
|
|
89
|
+
};
|
|
90
|
+
await appendDurableEvent(environment, completedEvent);
|
|
90
91
|
return result;
|
|
91
92
|
} catch (error) {
|
|
92
93
|
if (executionSignal.aborted && isAbortError(error)) throw error;
|
|
93
94
|
try {
|
|
94
95
|
telemetry?.recordStepExecution?.({
|
|
95
|
-
|
|
96
|
-
step: {
|
|
97
|
-
id: identity.id,
|
|
98
|
-
name: identity.name,
|
|
99
|
-
count: identity.count,
|
|
100
|
-
kind: "run"
|
|
101
|
-
},
|
|
102
|
-
attempt,
|
|
103
|
-
retry,
|
|
104
|
-
...timeoutAt === void 0 ? {} : { timeoutAt },
|
|
96
|
+
...telemetryContext,
|
|
105
97
|
error
|
|
106
98
|
});
|
|
107
99
|
} catch {}
|
|
108
100
|
const failedAt = now();
|
|
109
|
-
await
|
|
101
|
+
await appendDurableEvent(environment, {
|
|
110
102
|
kind: "step_failed",
|
|
111
103
|
timestamp: failedAt,
|
|
112
104
|
stepId: identity.id,
|
|
@@ -121,7 +113,7 @@ function createWorkflowStepTaskApi(environment, executionSignal) {
|
|
|
121
113
|
cause: error
|
|
122
114
|
});
|
|
123
115
|
const retryAt = retryClassificationRetryAt(failedAt, error, "Workflow step retry classification") ?? nextRetryAt(failedAt, retry, attempt, "Workflow step retry delay");
|
|
124
|
-
if (retryAt !== void 0)
|
|
116
|
+
if (retryAt !== void 0) Suspended.forStepRetry(retryAt, identity, attempt + 1);
|
|
125
117
|
attempt++;
|
|
126
118
|
}
|
|
127
119
|
}
|
|
@@ -129,7 +121,7 @@ function createWorkflowStepTaskApi(environment, executionSignal) {
|
|
|
129
121
|
stepId: identity.id,
|
|
130
122
|
stepName: identity.name,
|
|
131
123
|
attempt,
|
|
132
|
-
cause: WorkflowStepRetryLimitError
|
|
124
|
+
cause: new WorkflowStepRetryLimitError({
|
|
133
125
|
stepId: identity.id,
|
|
134
126
|
stepName: identity.name,
|
|
135
127
|
attempt
|
|
@@ -140,7 +132,7 @@ function createWorkflowStepTaskApi(environment, executionSignal) {
|
|
|
140
132
|
run,
|
|
141
133
|
async call(definition, ...args) {
|
|
142
134
|
return await run(definition.config, async (context) => {
|
|
143
|
-
return await definition.handler(...args
|
|
135
|
+
return await definition.handler(context, ...args);
|
|
144
136
|
});
|
|
145
137
|
},
|
|
146
138
|
async sleep(commandId, duration) {
|
|
@@ -183,7 +175,7 @@ async function runStepCallbackWithTimeout(callback, context, timeout) {
|
|
|
183
175
|
let timeoutHandle;
|
|
184
176
|
const timeoutPromise = new Promise((_resolve, reject) => {
|
|
185
177
|
timeoutHandle = setTimeout(() => {
|
|
186
|
-
const error = WorkflowStepTimeoutError
|
|
178
|
+
const error = new WorkflowStepTimeoutError({
|
|
187
179
|
runId: timeout.runId,
|
|
188
180
|
stepId: timeout.stepId,
|
|
189
181
|
stepName: timeout.stepName,
|
|
@@ -205,4 +197,4 @@ async function runStepCallbackWithTimeout(callback, context, timeout) {
|
|
|
205
197
|
}
|
|
206
198
|
}
|
|
207
199
|
//#endregion
|
|
208
|
-
export {
|
|
200
|
+
export { createStepTaskApi };
|