@workflow/core 4.1.0-beta.52 → 4.1.0-beta.54

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.
Files changed (44) hide show
  1. package/dist/class-serialization.d.ts +5 -4
  2. package/dist/class-serialization.d.ts.map +1 -1
  3. package/dist/class-serialization.js +7 -16
  4. package/dist/events-consumer.d.ts.map +1 -1
  5. package/dist/events-consumer.js +1 -9
  6. package/dist/logger.d.ts.map +1 -1
  7. package/dist/logger.js +10 -1
  8. package/dist/observability.d.ts.map +1 -1
  9. package/dist/observability.js +6 -5
  10. package/dist/private.d.ts +3 -1
  11. package/dist/private.d.ts.map +1 -1
  12. package/dist/private.js +4 -2
  13. package/dist/runtime/helpers.d.ts +9 -1
  14. package/dist/runtime/helpers.d.ts.map +1 -1
  15. package/dist/runtime/helpers.js +64 -24
  16. package/dist/runtime/resume-hook.d.ts.map +1 -1
  17. package/dist/runtime/resume-hook.js +4 -3
  18. package/dist/runtime/runs.d.ts +49 -0
  19. package/dist/runtime/runs.d.ts.map +1 -0
  20. package/dist/runtime/runs.js +156 -0
  21. package/dist/runtime/start.d.ts.map +1 -1
  22. package/dist/runtime/start.js +18 -11
  23. package/dist/runtime/step-handler.d.ts.map +1 -1
  24. package/dist/runtime/step-handler.js +230 -119
  25. package/dist/runtime/suspension-handler.d.ts.map +1 -1
  26. package/dist/runtime/suspension-handler.js +39 -5
  27. package/dist/runtime.d.ts +2 -1
  28. package/dist/runtime.d.ts.map +1 -1
  29. package/dist/runtime.js +153 -129
  30. package/dist/serialization.d.ts +7 -11
  31. package/dist/serialization.d.ts.map +1 -1
  32. package/dist/serialization.js +150 -63
  33. package/dist/telemetry/semantic-conventions.d.ts +81 -5
  34. package/dist/telemetry/semantic-conventions.d.ts.map +1 -1
  35. package/dist/telemetry/semantic-conventions.js +56 -8
  36. package/dist/telemetry.d.ts +25 -0
  37. package/dist/telemetry.d.ts.map +1 -1
  38. package/dist/telemetry.js +48 -2
  39. package/dist/version.d.ts +1 -1
  40. package/dist/version.js +1 -1
  41. package/dist/workflow.js +3 -3
  42. package/package.json +39 -10
  43. package/runtime.d.ts +1 -0
  44. package/runtime.js +1 -0
@@ -3,14 +3,14 @@ import { FatalError, RetryableError, WorkflowAPIError, WorkflowRuntimeError, } f
3
3
  import { pluralize } from '@workflow/utils';
4
4
  import { getPort } from '@workflow/utils/get-port';
5
5
  import { SPEC_VERSION_CURRENT, StepInvokePayloadSchema } from '@workflow/world';
6
- import { runtimeLogger } from '../logger.js';
6
+ import { runtimeLogger, stepLogger } from '../logger.js';
7
7
  import { getStepFunction } from '../private.js';
8
8
  import { dehydrateStepReturnValue, hydrateStepArguments, } from '../serialization.js';
9
9
  import { contextStorage } from '../step/context-storage.js';
10
10
  import * as Attribute from '../telemetry/semantic-conventions.js';
11
11
  import { getSpanKind, linkToCurrentContext, serializeTraceCarrier, trace, withTraceContext, } from '../telemetry.js';
12
12
  import { getErrorName, getErrorStack } from '../types.js';
13
- import { getQueueOverhead, handleHealthCheckMessage, parseHealthCheckPayload, queueMessage, withHealthCheck, } from './helpers.js';
13
+ import { getQueueOverhead, getWorkflowQueueName, handleHealthCheckMessage, parseHealthCheckPayload, queueMessage, withHealthCheck, } from './helpers.js';
14
14
  import { getWorld, getWorldHandlers } from './world.js';
15
15
  const DEFAULT_STEP_MAX_RETRIES = 3;
16
16
  const stepHandler = getWorldHandlers().createQueueHandler('__wkf_step_', async (message_, metadata) => {
@@ -30,14 +30,20 @@ const stepHandler = getWorldHandlers().createQueueHandler('__wkf_step_', async (
30
30
  // Extract the step name from the topic name
31
31
  const stepName = metadata.queueName.slice('__wkf_step_'.length);
32
32
  const world = getWorld();
33
- // Get the port early to avoid async operations during step execution
34
- const port = await getPort();
35
- return trace(`STEP ${stepName}`, { kind: await getSpanKind('CONSUMER'), links: spanLinks }, async (span) => {
33
+ // Resolve local async values concurrently before entering the trace span
34
+ const [port, spanKind] = await Promise.all([
35
+ getPort(),
36
+ getSpanKind('CONSUMER'),
37
+ ]);
38
+ return trace(`STEP ${stepName}`, { kind: spanKind, links: spanLinks }, async (span) => {
36
39
  span?.setAttributes({
37
40
  ...Attribute.StepName(stepName),
38
41
  ...Attribute.StepAttempt(metadata.attempt),
39
- ...Attribute.QueueName(metadata.queueName),
40
- ...Attribute.QueueMessageId(metadata.messageId),
42
+ // Standard OTEL messaging conventions
43
+ ...Attribute.MessagingSystem('vercel-queue'),
44
+ ...Attribute.MessagingDestinationName(metadata.queueName),
45
+ ...Attribute.MessagingMessageId(metadata.messageId),
46
+ ...Attribute.MessagingOperationType('process'),
41
47
  ...getQueueOverhead({ requestedAt }),
42
48
  });
43
49
  const stepFn = getStepFunction(stepName);
@@ -55,7 +61,87 @@ const stepHandler = getWorldHandlers().createQueueHandler('__wkf_step_', async (
55
61
  ...Attribute.StepMaxRetries(maxRetries),
56
62
  ...Attribute.StepTracePropagated(!!traceContext),
57
63
  });
58
- let step = await world.steps.get(workflowRunId, stepId);
64
+ // step_started validates state and returns the step entity, so no separate
65
+ // world.steps.get() call is needed. The server checks:
66
+ // - Step not in terminal state (returns 409)
67
+ // - retryAfter timestamp reached (returns 425 with Retry-After header)
68
+ // - Workflow still active (returns 410 if completed)
69
+ let step;
70
+ try {
71
+ const startResult = await world.events.create(workflowRunId, {
72
+ eventType: 'step_started',
73
+ specVersion: SPEC_VERSION_CURRENT,
74
+ correlationId: stepId,
75
+ });
76
+ if (!startResult.step) {
77
+ throw new WorkflowRuntimeError(`step_started event for "${stepId}" did not return step entity`);
78
+ }
79
+ step = startResult.step;
80
+ }
81
+ catch (err) {
82
+ if (WorkflowAPIError.is(err)) {
83
+ // 410 Gone: Workflow has already completed
84
+ if (err.status === 410) {
85
+ console.warn(`Workflow run "${workflowRunId}" has already completed, skipping step "${stepId}": ${err.message}`);
86
+ return;
87
+ }
88
+ // 409 Conflict: Step in terminal state (completed/failed/cancelled)
89
+ // Re-enqueue the workflow to continue processing
90
+ if (err.status === 409) {
91
+ runtimeLogger.debug('Step in terminal state, re-enqueuing workflow', {
92
+ stepName,
93
+ stepId,
94
+ workflowRunId,
95
+ error: err.message,
96
+ });
97
+ span?.setAttributes({
98
+ ...Attribute.StepSkipped(true),
99
+ // Use 'completed' as a representative terminal state for the skip reason
100
+ ...Attribute.StepSkipReason('completed'),
101
+ });
102
+ // Add span event for step skip
103
+ span?.addEvent?.('step.skipped', {
104
+ 'skip.reason': 'terminal_state',
105
+ 'step.name': stepName,
106
+ 'step.id': stepId,
107
+ });
108
+ await queueMessage(world, `__wkf_workflow_${workflowName}`, {
109
+ runId: workflowRunId,
110
+ traceCarrier: await serializeTraceCarrier(),
111
+ requestedAt: new Date(),
112
+ });
113
+ return;
114
+ }
115
+ // 425 Too Early: retryAfter timestamp not reached yet
116
+ // Return timeout to queue so it retries later
117
+ if (err.status === 425) {
118
+ // Parse retryAfter from error response meta
119
+ const retryAfterStr = err.meta?.retryAfter;
120
+ const retryAfter = retryAfterStr
121
+ ? new Date(retryAfterStr)
122
+ : new Date(Date.now() + 1000);
123
+ const timeoutSeconds = Math.max(1, Math.ceil((retryAfter.getTime() - Date.now()) / 1000));
124
+ span?.setAttributes({
125
+ ...Attribute.StepRetryTimeoutSeconds(timeoutSeconds),
126
+ });
127
+ // Add span event for delayed retry
128
+ span?.addEvent?.('step.delayed', {
129
+ 'delay.reason': 'retry_after_not_reached',
130
+ 'delay.timeout_seconds': timeoutSeconds,
131
+ 'delay.retry_after': retryAfter.toISOString(),
132
+ });
133
+ runtimeLogger.debug('Step retryAfter timestamp not yet reached', {
134
+ stepName,
135
+ stepId,
136
+ retryAfter,
137
+ timeoutSeconds,
138
+ });
139
+ return { timeoutSeconds };
140
+ }
141
+ }
142
+ // Re-throw other errors
143
+ throw err;
144
+ }
59
145
  runtimeLogger.debug('Step execution details', {
60
146
  stepName,
61
147
  stepId: step.stepId,
@@ -65,35 +151,20 @@ const stepHandler = getWorldHandlers().createQueueHandler('__wkf_step_', async (
65
151
  span?.setAttributes({
66
152
  ...Attribute.StepStatus(step.status),
67
153
  });
68
- // Check if the step has a `retryAfter` timestamp that hasn't been reached yet
69
- const now = Date.now();
70
- if (step.retryAfter && step.retryAfter.getTime() > now) {
71
- const timeoutSeconds = Math.ceil((step.retryAfter.getTime() - now) / 1000);
72
- span?.setAttributes({
73
- ...Attribute.StepRetryTimeoutSeconds(timeoutSeconds),
74
- });
75
- runtimeLogger.debug('Step retryAfter timestamp not yet reached', {
76
- stepName,
77
- stepId: step.stepId,
78
- retryAfter: step.retryAfter,
79
- timeoutSeconds,
80
- });
81
- return { timeoutSeconds };
82
- }
83
154
  let result;
84
- // Check max retries FIRST before any state changes.
155
+ // Check max retries AFTER step_started (attempt was just incremented)
85
156
  // step.attempt tracks how many times step_started has been called.
86
- // If step.attempt >= maxRetries, we've already tried maxRetries times.
87
- // This handles edge cases where the step handler is invoked after max retries have been exceeded
88
- // (e.g., when the step repeatedly times out or fails before reaching the catch handler).
89
- // Without this check, the step would retry forever.
90
157
  // Note: maxRetries is the number of RETRIES after the first attempt, so total attempts = maxRetries + 1
91
158
  // Use > here (not >=) because this guards against re-invocation AFTER all attempts are used.
92
159
  // The post-failure check uses >= to decide whether to retry after a failure.
93
160
  if (step.attempt > maxRetries + 1) {
94
161
  const retryCount = step.attempt - 1;
95
162
  const errorMessage = `Step "${stepName}" exceeded max retries (${retryCount} ${pluralize('retry', 'retries', retryCount)})`;
96
- console.error(`[Workflows] "${workflowRunId}" - ${errorMessage}`);
163
+ stepLogger.error('Step exceeded max retries', {
164
+ workflowRunId,
165
+ stepName,
166
+ retryCount,
167
+ });
97
168
  // Fail the step via event (event-sourced architecture)
98
169
  await world.events.create(workflowRunId, {
99
170
  eventType: 'step_failed',
@@ -109,133 +180,150 @@ const stepHandler = getWorldHandlers().createQueueHandler('__wkf_step_', async (
109
180
  ...Attribute.StepRetryExhausted(true),
110
181
  });
111
182
  // Re-invoke the workflow to handle the failed step
112
- await queueMessage(world, `__wkf_workflow_${workflowName}`, {
183
+ await queueMessage(world, getWorkflowQueueName(workflowName), {
113
184
  runId: workflowRunId,
114
185
  traceCarrier: await serializeTraceCarrier(),
115
186
  requestedAt: new Date(),
187
+ }, {
188
+ headers: { 'x-workflow-run-id': workflowRunId },
116
189
  });
117
190
  return;
118
191
  }
119
192
  try {
120
- if (!['pending', 'running'].includes(step.status)) {
121
- // We should only be running the step if it's either
122
- // a) pending - initial state, or state set on re-try
123
- // b) running - if a step fails mid-execution, like a function timeout
124
- // otherwise, the step has been invoked erroneously
125
- console.error(`[Workflows] "${workflowRunId}" - Step invoked erroneously, expected status "pending" or "running", got "${step.status}" instead, skipping execution`);
126
- span?.setAttributes({
127
- ...Attribute.StepSkipped(true),
128
- ...Attribute.StepSkipReason(step.status),
129
- });
130
- // There's a chance that a step terminates correctly, but the underlying process
131
- // fails or gets killed before the stepEntrypoint has a chance to re-enqueue the run.
132
- // The queue lease expires and stepEntrypoint again, which leads us here, so
133
- // we optimistically re-enqueue the workflow if the step is in a terminal state,
134
- // under the assumption that this edge case happened.
135
- // Until we move to atomic entity/event updates (World V2), there _could_ be an edge case
136
- // where the we execute this code based on the `step` entity status, but the runtime
137
- // failed to create the `step_completed` event (due to failing between step and event update),
138
- // in which case, this might lead to an infinite loop.
139
- // https://vercel.slack.com/archives/C09125LC4AX/p1765313809066679
140
- const isTerminalStep = [
141
- 'completed',
142
- 'failed',
143
- 'cancelled',
144
- ].includes(step.status);
145
- if (isTerminalStep) {
146
- await queueMessage(world, `__wkf_workflow_${workflowName}`, {
147
- runId: workflowRunId,
148
- traceCarrier: await serializeTraceCarrier(),
149
- requestedAt: new Date(),
150
- });
151
- }
152
- return;
153
- }
154
- // Start the step via event (event-sourced architecture)
155
- // step_started increments the attempt counter in the World implementation
156
- const startResult = await world.events.create(workflowRunId, {
157
- eventType: 'step_started',
158
- specVersion: SPEC_VERSION_CURRENT,
159
- correlationId: stepId,
160
- });
161
- // Use the step entity from the event response (no extra get call needed)
162
- if (!startResult.step) {
163
- throw new WorkflowRuntimeError(`step_started event for "${stepId}" did not return step entity`);
164
- }
165
- step = startResult.step;
193
+ // step_started already validated the step is in valid state (pending/running)
194
+ // and returned the updated step entity with incremented attempt
166
195
  // step.attempt is now the current attempt number (after increment)
167
196
  const attempt = step.attempt;
168
197
  if (!step.startedAt) {
169
198
  throw new WorkflowRuntimeError(`Step "${stepId}" has no "startedAt" timestamp`);
170
199
  }
200
+ // Capture startedAt for use in async callback (TypeScript narrowing doesn't persist)
201
+ const stepStartedAt = step.startedAt;
171
202
  // Hydrate the step input arguments, closure variables, and thisVal
203
+ // NOTE: This captures only the synchronous portion of hydration. Any async
204
+ // operations (e.g., stream loading) are added to `ops` and executed later
205
+ // via Promise.all(ops) - their timing is not included in this measurement.
172
206
  const ops = [];
173
- const hydratedInput = hydrateStepArguments(step.input, ops, workflowRunId);
207
+ const hydratedInput = await trace('step.hydrate', {}, async (hydrateSpan) => {
208
+ const startTime = Date.now();
209
+ const result = hydrateStepArguments(step.input, ops, workflowRunId);
210
+ const durationMs = Date.now() - startTime;
211
+ hydrateSpan?.setAttributes({
212
+ ...Attribute.StepArgumentsCount(result.args.length),
213
+ ...Attribute.QueueDeserializeTimeMs(durationMs),
214
+ });
215
+ return result;
216
+ });
174
217
  const args = hydratedInput.args;
175
218
  const thisVal = hydratedInput.thisVal ?? null;
219
+ // Execute the step function with tracing
220
+ const executionStartTime = Date.now();
221
+ result = await trace('step.execute', {}, async () => {
222
+ return await contextStorage.run({
223
+ stepMetadata: {
224
+ stepId,
225
+ stepStartedAt: new Date(+stepStartedAt),
226
+ attempt,
227
+ },
228
+ workflowMetadata: {
229
+ workflowRunId,
230
+ workflowStartedAt: new Date(+workflowStartedAt),
231
+ // TODO: there should be a getUrl method on the world interface itself. This
232
+ // solution only works for vercel + local worlds.
233
+ url: process.env.VERCEL_URL
234
+ ? `https://${process.env.VERCEL_URL}`
235
+ : `http://localhost:${port ?? 3000}`,
236
+ },
237
+ ops,
238
+ closureVars: hydratedInput.closureVars,
239
+ }, () => stepFn.apply(thisVal, args));
240
+ });
241
+ const executionTimeMs = Date.now() - executionStartTime;
176
242
  span?.setAttributes({
177
- ...Attribute.StepArgumentsCount(args.length),
243
+ ...Attribute.QueueExecutionTimeMs(executionTimeMs),
178
244
  });
179
- result = await contextStorage.run({
180
- stepMetadata: {
181
- stepId,
182
- stepStartedAt: new Date(+step.startedAt),
183
- attempt,
184
- },
185
- workflowMetadata: {
186
- workflowRunId,
187
- workflowStartedAt: new Date(+workflowStartedAt),
188
- // TODO: there should be a getUrl method on the world interface itself. This
189
- // solution only works for vercel + local worlds.
190
- url: process.env.VERCEL_URL
191
- ? `https://${process.env.VERCEL_URL}`
192
- : `http://localhost:${port ?? 3000}`,
193
- },
194
- ops,
195
- closureVars: hydratedInput.closureVars,
196
- }, () => stepFn.apply(thisVal, args));
197
245
  // NOTE: None of the code from this point is guaranteed to run
198
246
  // Since the step might fail or cause a function timeout and the process might be SIGKILL'd
199
247
  // The workflow runtime must be resilient to the below code not executing on a failed step
200
- result = dehydrateStepReturnValue(result, ops, workflowRunId);
248
+ result = await trace('step.dehydrate', {}, async (dehydrateSpan) => {
249
+ const startTime = Date.now();
250
+ const dehydrated = dehydrateStepReturnValue(result, ops, workflowRunId);
251
+ const durationMs = Date.now() - startTime;
252
+ dehydrateSpan?.setAttributes({
253
+ ...Attribute.QueueSerializeTimeMs(durationMs),
254
+ ...Attribute.StepResultType(typeof dehydrated),
255
+ });
256
+ return dehydrated;
257
+ });
201
258
  waitUntil(Promise.all(ops).catch((err) => {
202
259
  // Ignore expected client disconnect errors (e.g., browser refresh during streaming)
203
260
  const isAbortError = err?.name === 'AbortError' || err?.name === 'ResponseAborted';
204
261
  if (!isAbortError)
205
262
  throw err;
206
263
  }));
207
- // Complete the step via event (event-sourced architecture)
208
- // The event creation atomically updates the step entity
209
- // result was dehydrated above by dehydrateStepReturnValue, which returns Uint8Array
210
- await world.events.create(workflowRunId, {
211
- eventType: 'step_completed',
212
- specVersion: SPEC_VERSION_CURRENT,
213
- correlationId: stepId,
214
- eventData: {
215
- result: result,
216
- },
217
- });
264
+ // Run step_completed and trace serialization concurrently;
265
+ // the trace carrier is used in the final queueMessage call below
266
+ const [, traceCarrier] = await Promise.all([
267
+ world.events.create(workflowRunId, {
268
+ eventType: 'step_completed',
269
+ specVersion: SPEC_VERSION_CURRENT,
270
+ correlationId: stepId,
271
+ eventData: {
272
+ result: result,
273
+ },
274
+ }),
275
+ serializeTraceCarrier(),
276
+ ]);
218
277
  span?.setAttributes({
219
278
  ...Attribute.StepStatus('completed'),
220
279
  ...Attribute.StepResultType(typeof result),
221
280
  });
281
+ // Queue the workflow continuation with the concurrently-resolved trace carrier
282
+ await queueMessage(world, `__wkf_workflow_${workflowName}`, {
283
+ runId: workflowRunId,
284
+ traceCarrier,
285
+ requestedAt: new Date(),
286
+ });
287
+ return;
222
288
  }
223
289
  catch (err) {
290
+ // Record exception for OTEL error tracking
291
+ if (err instanceof Error) {
292
+ span?.recordException?.(err);
293
+ }
294
+ // Determine error category and retryability
295
+ const isFatal = FatalError.is(err);
296
+ const isRetryable = RetryableError.is(err);
297
+ const errorCategory = isFatal
298
+ ? 'fatal'
299
+ : isRetryable
300
+ ? 'retryable'
301
+ : 'transient';
224
302
  span?.setAttributes({
225
303
  ...Attribute.StepErrorName(getErrorName(err)),
226
304
  ...Attribute.StepErrorMessage(String(err)),
305
+ ...Attribute.ErrorType(getErrorName(err)),
306
+ ...Attribute.ErrorCategory(errorCategory),
307
+ ...Attribute.ErrorRetryable(!isFatal),
227
308
  });
228
309
  if (WorkflowAPIError.is(err)) {
229
310
  if (err.status === 410) {
230
311
  // Workflow has already completed, so no-op
231
- console.warn(`Workflow run "${workflowRunId}" has already completed, skipping step "${stepId}": ${err.message}`);
312
+ stepLogger.info('Workflow run already completed, skipping step', {
313
+ workflowRunId,
314
+ stepId,
315
+ message: err.message,
316
+ });
232
317
  return;
233
318
  }
234
319
  }
235
- if (FatalError.is(err)) {
320
+ if (isFatal) {
236
321
  const errorStack = getErrorStack(err);
237
- const stackLines = errorStack.split('\n').slice(0, 4);
238
- console.error(`[Workflows] "${workflowRunId}" - Encountered \`FatalError\` while executing step "${stepName}":\n > ${stackLines.join('\n > ')}\n\nBubbling up error to parent workflow`);
322
+ stepLogger.error('Encountered FatalError while executing step, bubbling up to parent workflow', {
323
+ workflowRunId,
324
+ stepName,
325
+ errorStack,
326
+ });
239
327
  // Fail the step via event (event-sourced architecture)
240
328
  await world.events.create(workflowRunId, {
241
329
  eventType: 'step_failed',
@@ -263,9 +351,14 @@ const stepHandler = getWorldHandlers().createQueueHandler('__wkf_step_', async (
263
351
  if (currentAttempt >= maxRetries + 1) {
264
352
  // Max retries reached
265
353
  const errorStack = getErrorStack(err);
266
- const stackLines = errorStack.split('\n').slice(0, 4);
267
354
  const retryCount = step.attempt - 1;
268
- console.error(`[Workflows] "${workflowRunId}" - Encountered \`Error\` while executing step "${stepName}" (attempt ${step.attempt}, ${retryCount} ${pluralize('retry', 'retries', retryCount)}):\n > ${stackLines.join('\n > ')}\n\n Max retries reached\n Bubbling error to parent workflow`);
355
+ stepLogger.error('Max retries reached, bubbling error to parent workflow', {
356
+ workflowRunId,
357
+ stepName,
358
+ attempt: step.attempt,
359
+ retryCount,
360
+ errorStack,
361
+ });
269
362
  const errorMessage = `Step "${stepName}" failed after ${maxRetries} ${pluralize('retry', 'retries', maxRetries)}: ${String(err)}`;
270
363
  // Fail the step via event (event-sourced architecture)
271
364
  await world.events.create(workflowRunId, {
@@ -285,11 +378,21 @@ const stepHandler = getWorldHandlers().createQueueHandler('__wkf_step_', async (
285
378
  else {
286
379
  // Not at max retries yet - log as a retryable error
287
380
  if (RetryableError.is(err)) {
288
- console.warn(`[Workflows] "${workflowRunId}" - Encountered \`RetryableError\` while executing step "${stepName}" (attempt ${currentAttempt}):\n > ${String(err.message)}\n\n This step has failed but will be retried`);
381
+ stepLogger.warn('Encountered RetryableError, step will be retried', {
382
+ workflowRunId,
383
+ stepName,
384
+ attempt: currentAttempt,
385
+ message: err.message,
386
+ });
289
387
  }
290
388
  else {
291
- const stackLines = getErrorStack(err).split('\n').slice(0, 4);
292
- console.error(`[Workflows] "${workflowRunId}" - Encountered \`Error\` while executing step "${stepName}" (attempt ${currentAttempt}):\n > ${stackLines.join('\n > ')}\n\n This step has failed but will be retried`);
389
+ const errorStack = getErrorStack(err);
390
+ stepLogger.warn('Encountered Error, step will be retried', {
391
+ workflowRunId,
392
+ stepName,
393
+ attempt: currentAttempt,
394
+ errorStack,
395
+ });
293
396
  }
294
397
  // Set step to pending for retry via event (event-sourced architecture)
295
398
  // step_retrying records the error and sets status to pending
@@ -313,16 +416,24 @@ const stepHandler = getWorldHandlers().createQueueHandler('__wkf_step_', async (
313
416
  ...Attribute.StepRetryTimeoutSeconds(timeoutSeconds),
314
417
  ...Attribute.StepRetryWillRetry(true),
315
418
  });
419
+ // Add span event for retry scheduling
420
+ span?.addEvent?.('retry.scheduled', {
421
+ 'retry.timeout_seconds': timeoutSeconds,
422
+ 'retry.attempt': currentAttempt,
423
+ 'retry.max_retries': maxRetries,
424
+ });
316
425
  // It's a retryable error - so have the queue keep the message visible
317
426
  // so that it gets retried.
318
427
  return { timeoutSeconds };
319
428
  }
320
429
  }
321
430
  }
322
- await queueMessage(world, `__wkf_workflow_${workflowName}`, {
431
+ await queueMessage(world, getWorkflowQueueName(workflowName), {
323
432
  runId: workflowRunId,
324
433
  traceCarrier: await serializeTraceCarrier(),
325
434
  requestedAt: new Date(),
435
+ }, {
436
+ headers: { 'x-workflow-run-id': workflowRunId },
326
437
  });
327
438
  });
328
439
  });
@@ -334,4 +445,4 @@ const stepHandler = getWorldHandlers().createQueueHandler('__wkf_step_', async (
334
445
  */
335
446
  export const stepEntrypoint =
336
447
  /* @__PURE__ */ withHealthCheck(stepHandler);
337
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RlcC1oYW5kbGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3J1bnRpbWUvc3RlcC1oYW5kbGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUM5QyxPQUFPLEVBQ0wsVUFBVSxFQUNWLGNBQWMsRUFDZCxnQkFBZ0IsRUFDaEIsb0JBQW9CLEdBQ3JCLE1BQU0sa0JBQWtCLENBQUM7QUFDMUIsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQzVDLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUNuRCxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUNoRixPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sY0FBYyxDQUFDO0FBQzdDLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDaEQsT0FBTyxFQUNMLHdCQUF3QixFQUN4QixvQkFBb0IsR0FDckIsTUFBTSxxQkFBcUIsQ0FBQztBQUM3QixPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDNUQsT0FBTyxLQUFLLFNBQVMsTUFBTSxzQ0FBc0MsQ0FBQztBQUNsRSxPQUFPLEVBQ0wsV0FBVyxFQUNYLG9CQUFvQixFQUNwQixxQkFBcUIsRUFDckIsS0FBSyxFQUNMLGdCQUFnQixHQUNqQixNQUFNLGlCQUFpQixDQUFDO0FBQ3pCLE9BQU8sRUFBRSxZQUFZLEVBQUUsYUFBYSxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQzFELE9BQU8sRUFDTCxnQkFBZ0IsRUFDaEIsd0JBQXdCLEVBQ3hCLHVCQUF1QixFQUN2QixZQUFZLEVBQ1osZUFBZSxHQUNoQixNQUFNLGNBQWMsQ0FBQztBQUN0QixPQUFPLEVBQUUsUUFBUSxFQUFFLGdCQUFnQixFQUFFLE1BQU0sWUFBWSxDQUFDO0FB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
448
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RlcC1oYW5kbGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3J1bnRpbWUvc3RlcC1oYW5kbGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUM5QyxPQUFPLEVBQ0wsVUFBVSxFQUNWLGNBQWMsRUFDZCxnQkFBZ0IsRUFDaEIsb0JBQW9CLEdBQ3JCLE1BQU0sa0JBQWtCLENBQUM7QUFDMUIsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQzVDLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUNuRCxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUNoRixPQUFPLEVBQUUsYUFBYSxFQUFFLFVBQVUsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUN6RCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ2hELE9BQU8sRUFDTCx3QkFBd0IsRUFDeEIsb0JBQW9CLEdBQ3JCLE1BQU0scUJBQXFCLENBQUM7QUFDN0IsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQzVELE9BQU8sS0FBSyxTQUFTLE1BQU0sc0NBQXNDLENBQUM7QUFDbEUsT0FBTyxFQUNMLFdBQVcsRUFDWCxvQkFBb0IsRUFDcEIscUJBQXFCLEVBQ3JCLEtBQUssRUFDTCxnQkFBZ0IsR0FDakIsTUFBTSxpQkFBaUIsQ0FBQztBQUN6QixPQUFPLEVBQUUsWUFBWSxFQUFFLGFBQWEsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUMxRCxPQUFPLEVBQ0wsZ0JBQWdCLEVBQ2hCLG9CQUFvQixFQUNwQix3QkFBd0IsRUFDeEIsdUJBQXVCLEVBQ3ZCLFlBQVksRUFDWixlQUFlLEdBQ2hCLE1BQU0sY0FBYyxDQUFDO0FBQ3RCLE9BQU8sRUFBRSxRQUFRLEVBQUUsZ0JBQWdC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
@@ -1 +1 @@
1
- {"version":3,"file":"suspension-handler.d.ts","sourceRoot":"","sources":["../../src/runtime/suspension-handler.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,oBAAoB,CAAC;AAG/C,OAAO,EAIL,KAAK,KAAK,EACX,MAAM,iBAAiB,CAAC;AACzB,OAAO,KAAK,EAIV,kBAAkB,EACnB,MAAM,cAAc,CAAC;AAMtB,MAAM,WAAW,uBAAuB;IACtC,UAAU,EAAE,kBAAkB,CAAC;IAC/B,KAAK,EAAE,KAAK,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,YAAY,EAAE,MAAM,CAAC;IACrB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,IAAI,CAAC,EAAE,IAAI,CAAC;CACb;AAED,MAAM,WAAW,uBAAuB;IACtC,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAED;;;;;;;;GAQG;AACH,wBAAsB,gBAAgB,CAAC,EACrC,UAAU,EACV,KAAK,EACL,KAAK,EACL,YAAY,EACZ,iBAAiB,EACjB,IAAI,GACL,EAAE,uBAAuB,GAAG,OAAO,CAAC,uBAAuB,CAAC,CA2M5D"}
1
+ {"version":3,"file":"suspension-handler.d.ts","sourceRoot":"","sources":["../../src/runtime/suspension-handler.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,oBAAoB,CAAC;AAG/C,OAAO,EAIL,KAAK,KAAK,EACX,MAAM,iBAAiB,CAAC;AACzB,OAAO,KAAK,EAIV,kBAAkB,EACnB,MAAM,cAAc,CAAC;AAwBtB,MAAM,WAAW,uBAAuB;IACtC,UAAU,EAAE,kBAAkB,CAAC;IAC/B,KAAK,EAAE,KAAK,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,YAAY,EAAE,MAAM,CAAC;IACrB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,IAAI,CAAC,EAAE,IAAI,CAAC;CACb;AAED,MAAM,WAAW,uBAAuB;IACtC,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAED;;;;;;;;GAQG;AACH,wBAAsB,gBAAgB,CAAC,EACrC,UAAU,EACV,KAAK,EACL,KAAK,EACL,YAAY,EACZ,iBAAiB,EACjB,IAAI,GACL,EAAE,uBAAuB,GAAG,OAAO,CAAC,uBAAuB,CAAC,CA+N5D"}