workflow 5.0.0-beta.5 → 5.0.0-beta.50

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 (256) hide show
  1. package/README.md +68 -23
  2. package/dist/api-workflow.d.ts +1 -1
  3. package/dist/api-workflow.d.ts.map +1 -1
  4. package/dist/api-workflow.js +1 -1
  5. package/dist/api.d.ts +3 -3
  6. package/dist/api.d.ts.map +1 -1
  7. package/dist/api.js +5 -7
  8. package/dist/index.d.ts +1 -0
  9. package/dist/index.d.ts.map +1 -1
  10. package/dist/index.js +6 -1
  11. package/dist/internal/builtins.d.ts +20 -3
  12. package/dist/internal/builtins.d.ts.map +1 -1
  13. package/dist/internal/builtins.js +68 -4
  14. package/dist/internal/errors.d.ts +1 -1
  15. package/dist/internal/errors.d.ts.map +1 -1
  16. package/dist/internal/errors.js +2 -2
  17. package/dist/nest-builder.d.ts +2 -0
  18. package/dist/nest-builder.d.ts.map +1 -0
  19. package/dist/nest-builder.js +2 -0
  20. package/dist/nest-vercel-builder.d.ts +2 -0
  21. package/dist/nest-vercel-builder.d.ts.map +1 -0
  22. package/dist/nest-vercel-builder.js +2 -0
  23. package/dist/observability.d.ts +1 -1
  24. package/dist/observability.js +2 -2
  25. package/dist/runtime.d.ts +2 -1
  26. package/dist/runtime.d.ts.map +1 -1
  27. package/dist/runtime.js +4 -1
  28. package/docs/ai/chat-session-modeling.mdx +29 -26
  29. package/docs/ai/defining-tools.mdx +6 -7
  30. package/docs/ai/human-in-the-loop.mdx +11 -11
  31. package/docs/ai/index.mdx +50 -45
  32. package/docs/ai/message-queueing.mdx +16 -16
  33. package/docs/ai/meta.json +1 -0
  34. package/docs/ai/resumable-streams.mdx +40 -28
  35. package/docs/ai/sleep-and-delays.mdx +10 -10
  36. package/docs/ai/streaming-updates-from-tools.mdx +6 -6
  37. package/docs/api-reference/index.mdx +24 -0
  38. package/docs/api-reference/meta.json +8 -0
  39. package/docs/api-reference/vitest/index.mdx +9 -15
  40. package/docs/api-reference/workflow/create-hook.mdx +89 -10
  41. package/docs/api-reference/workflow/create-webhook.mdx +16 -15
  42. package/docs/api-reference/workflow/define-hook.mdx +35 -33
  43. package/docs/api-reference/workflow/fatal-error.mdx +30 -8
  44. package/docs/api-reference/workflow/fetch.mdx +14 -10
  45. package/docs/api-reference/workflow/get-step-metadata.mdx +2 -2
  46. package/docs/api-reference/workflow/get-workflow-metadata.mdx +3 -3
  47. package/docs/api-reference/workflow/get-writable.mdx +7 -7
  48. package/docs/api-reference/workflow/index.mdx +4 -1
  49. package/docs/api-reference/workflow/retryable-error.mdx +1 -1
  50. package/docs/api-reference/workflow/set-attributes.mdx +61 -0
  51. package/docs/api-reference/workflow/sleep.mdx +4 -4
  52. package/docs/api-reference/workflow-ai/durable-agent.mdx +48 -86
  53. package/docs/api-reference/workflow-ai/index.mdx +3 -3
  54. package/docs/api-reference/workflow-ai/workflow-chat-transport.mdx +67 -24
  55. package/docs/api-reference/workflow-api/get-hook-by-token.mdx +26 -12
  56. package/docs/api-reference/workflow-api/get-run.mdx +43 -8
  57. package/docs/api-reference/workflow-api/index.mdx +6 -10
  58. package/docs/api-reference/workflow-api/resume-hook.mdx +73 -12
  59. package/docs/api-reference/workflow-api/resume-webhook.mdx +11 -9
  60. package/docs/api-reference/workflow-api/start.mdx +60 -13
  61. package/docs/api-reference/workflow-astro/index.mdx +18 -0
  62. package/docs/api-reference/workflow-astro/meta.json +4 -0
  63. package/docs/api-reference/workflow-astro/workflow.mdx +45 -0
  64. package/docs/api-reference/workflow-errors/entity-conflict-error.mdx +4 -4
  65. package/docs/api-reference/workflow-errors/hook-conflict-error.mdx +60 -0
  66. package/docs/api-reference/workflow-errors/hook-not-found-error.mdx +8 -8
  67. package/docs/api-reference/workflow-errors/index.mdx +88 -0
  68. package/docs/api-reference/workflow-errors/meta.json +6 -0
  69. package/docs/api-reference/workflow-errors/precondition-failed-error.mdx +68 -0
  70. package/docs/api-reference/workflow-errors/run-expired-error.mdx +2 -2
  71. package/docs/api-reference/workflow-errors/run-not-supported-error.mdx +58 -0
  72. package/docs/api-reference/workflow-errors/step-not-registered-error.mdx +5 -5
  73. package/docs/api-reference/workflow-errors/throttle-error.mdx +2 -2
  74. package/docs/api-reference/workflow-errors/too-early-error.mdx +2 -2
  75. package/docs/api-reference/workflow-errors/workflow-error.mdx +52 -0
  76. package/docs/api-reference/workflow-errors/workflow-not-registered-error.mdx +5 -6
  77. package/docs/api-reference/workflow-errors/workflow-run-cancelled-error.mdx +6 -6
  78. package/docs/api-reference/workflow-errors/workflow-run-failed-error.mdx +5 -5
  79. package/docs/api-reference/workflow-errors/workflow-run-not-completed-error.mdx +58 -0
  80. package/docs/api-reference/workflow-errors/workflow-run-not-found-error.mdx +4 -4
  81. package/docs/api-reference/workflow-errors/workflow-runtime-error.mdx +58 -0
  82. package/docs/api-reference/workflow-errors/workflow-world-error.mdx +8 -8
  83. package/docs/api-reference/workflow-globals.mdx +14 -10
  84. package/docs/api-reference/workflow-nest/configure-workflow-controller.mdx +33 -0
  85. package/docs/api-reference/workflow-nest/index.mdx +31 -0
  86. package/docs/api-reference/workflow-nest/meta.json +9 -0
  87. package/docs/api-reference/workflow-nest/nest-local-builder.mdx +64 -0
  88. package/docs/api-reference/workflow-nest/workflow-controller.mdx +40 -0
  89. package/docs/api-reference/workflow-nest/workflow-module.mdx +74 -0
  90. package/docs/api-reference/workflow-next/with-workflow.mdx +39 -17
  91. package/docs/api-reference/workflow-nitro/index.mdx +60 -0
  92. package/docs/api-reference/workflow-nuxt/index.mdx +48 -0
  93. package/docs/api-reference/workflow-observability/hydrate-data.mdx +35 -0
  94. package/docs/api-reference/workflow-observability/hydrate-resource-io.mdx +62 -0
  95. package/docs/api-reference/workflow-observability/index.mdx +62 -0
  96. package/docs/api-reference/workflow-observability/meta.json +11 -0
  97. package/docs/api-reference/workflow-observability/observability-revivers.mdx +50 -0
  98. package/docs/api-reference/workflow-observability/parse-class-name.mdx +41 -0
  99. package/docs/api-reference/workflow-observability/parse-step-name.mdx +40 -0
  100. package/docs/api-reference/workflow-observability/parse-workflow-name.mdx +55 -0
  101. package/docs/api-reference/workflow-runtime/create-world.mdx +39 -0
  102. package/docs/api-reference/workflow-runtime/get-world-handlers.mdx +44 -0
  103. package/docs/api-reference/{workflow-api → workflow-runtime}/get-world.mdx +11 -14
  104. package/docs/api-reference/workflow-runtime/health-check.mdx +50 -0
  105. package/docs/api-reference/workflow-runtime/index.mdx +41 -0
  106. package/docs/api-reference/workflow-runtime/meta.json +12 -0
  107. package/docs/api-reference/workflow-runtime/set-world.mdx +51 -0
  108. package/docs/api-reference/workflow-runtime/workflow-entrypoint.mdx +43 -0
  109. package/docs/api-reference/workflow-runtime/world/analytics.mdx +315 -0
  110. package/docs/api-reference/workflow-runtime/world/index.mdx +60 -0
  111. package/docs/api-reference/workflow-runtime/world/meta.json +4 -0
  112. package/docs/api-reference/workflow-runtime/world/queue.mdx +88 -0
  113. package/docs/api-reference/{workflow-api → workflow-runtime}/world/storage.mdx +98 -34
  114. package/docs/api-reference/{workflow-api → workflow-runtime}/world/streams.mdx +8 -8
  115. package/docs/api-reference/workflow-serde/index.mdx +1 -2
  116. package/docs/api-reference/workflow-serde/workflow-deserialize.mdx +3 -4
  117. package/docs/api-reference/workflow-serde/workflow-serialize.mdx +8 -8
  118. package/docs/api-reference/workflow-sveltekit/index.mdx +18 -0
  119. package/docs/api-reference/workflow-sveltekit/meta.json +4 -0
  120. package/docs/api-reference/workflow-sveltekit/workflow-plugin.mdx +42 -0
  121. package/docs/api-reference/workflow-vite/index.mdx +18 -0
  122. package/docs/api-reference/workflow-vite/meta.json +4 -0
  123. package/docs/api-reference/workflow-vite/workflow.mdx +48 -0
  124. package/docs/changelog/attributes-mvp.mdx +380 -0
  125. package/docs/changelog/batched-event-writes.mdx +79 -0
  126. package/docs/changelog/eager-processing.mdx +110 -436
  127. package/docs/changelog/index.mdx +4 -2
  128. package/docs/changelog/lazy-event-creation.md +127 -0
  129. package/docs/changelog/lazy-hook-resume.mdx +78 -0
  130. package/docs/changelog/meta.json +11 -1
  131. package/docs/changelog/resilient-resume.mdx +32 -0
  132. package/docs/changelog/resilient-start.mdx +33 -285
  133. package/docs/changelog/step-message-ownership.mdx +360 -0
  134. package/docs/changelog/turbo-mode.md +87 -0
  135. package/docs/comparisons/index.mdx +66 -0
  136. package/docs/comparisons/meta.json +11 -0
  137. package/docs/comparisons/workflow-sdk-vs-aws-agentcore.mdx +55 -0
  138. package/docs/comparisons/workflow-sdk-vs-aws-step-functions.mdx +111 -0
  139. package/docs/comparisons/workflow-sdk-vs-cloudflare-workflows.mdx +71 -0
  140. package/docs/comparisons/workflow-sdk-vs-inngest.mdx +102 -0
  141. package/docs/comparisons/workflow-sdk-vs-temporal.mdx +123 -0
  142. package/docs/comparisons/workflow-sdk-vs-trigger-dev.mdx +104 -0
  143. package/docs/configuration/build-and-diagnostics.mdx +70 -0
  144. package/docs/configuration/cli-and-web-ui.mdx +241 -0
  145. package/docs/configuration/framework-options.mdx +165 -0
  146. package/docs/configuration/index.mdx +32 -0
  147. package/docs/configuration/meta.json +12 -0
  148. package/docs/configuration/runtime-tuning.mdx +376 -0
  149. package/docs/configuration/worlds.mdx +313 -0
  150. package/docs/cookbook/advanced/child-workflows.mdx +211 -264
  151. package/docs/cookbook/advanced/meta.json +6 -1
  152. package/docs/cookbook/advanced/publishing-libraries.mdx +65 -56
  153. package/docs/cookbook/advanced/serializable-steps.mdx +28 -20
  154. package/docs/cookbook/advanced/upgrading-workflows.mdx +199 -0
  155. package/docs/cookbook/agent-patterns/agent-cancellation.mdx +27 -19
  156. package/docs/cookbook/agent-patterns/durable-agent.mdx +14 -142
  157. package/docs/cookbook/agent-patterns/human-in-the-loop.mdx +30 -22
  158. package/docs/cookbook/common-patterns/batching.mdx +18 -14
  159. package/docs/cookbook/common-patterns/idempotency.mdx +41 -53
  160. package/docs/cookbook/common-patterns/rate-limiting.mdx +8 -4
  161. package/docs/cookbook/common-patterns/saga.mdx +23 -19
  162. package/docs/cookbook/common-patterns/scheduling.mdx +34 -22
  163. package/docs/cookbook/common-patterns/sequential-and-parallel.mdx +29 -25
  164. package/docs/cookbook/common-patterns/timeouts.mdx +26 -21
  165. package/docs/cookbook/common-patterns/webhooks.mdx +10 -6
  166. package/docs/cookbook/common-patterns/workflow-composition.mdx +30 -27
  167. package/docs/cookbook/index.mdx +22 -21
  168. package/docs/cookbook/integrations/ai-sdk.mdx +85 -47
  169. package/docs/cookbook/integrations/chat-sdk.mdx +50 -33
  170. package/docs/cookbook/integrations/sandbox.mdx +62 -45
  171. package/docs/deploying.mdx +95 -0
  172. package/docs/errors/abort-signal-timeout-in-workflow.mdx +16 -12
  173. package/docs/errors/corrupted-event-log.mdx +29 -18
  174. package/docs/errors/deployment-mismatch.mdx +71 -0
  175. package/docs/errors/fetch-in-workflow.mdx +11 -7
  176. package/docs/errors/hook-conflict.mdx +69 -13
  177. package/docs/errors/index.mdx +2 -36
  178. package/docs/errors/node-js-module-in-workflow.mdx +9 -5
  179. package/docs/errors/replay-divergence.mdx +27 -0
  180. package/docs/errors/run-expired.mdx +85 -0
  181. package/docs/errors/runtime-decryption-failed.mdx +77 -0
  182. package/docs/errors/serialization-failed.mdx +44 -12
  183. package/docs/errors/start-invalid-workflow-function.mdx +9 -5
  184. package/docs/errors/step-executed-multiple-times.mdx +23 -0
  185. package/docs/errors/step-not-registered.mdx +6 -6
  186. package/docs/errors/timeout-in-workflow.mdx +12 -8
  187. package/docs/errors/webhook-invalid-respond-with-value.mdx +18 -18
  188. package/docs/errors/webhook-response-not-sent.mdx +20 -16
  189. package/docs/errors/workflow-not-registered.mdx +5 -5
  190. package/docs/foundations/cancellation.mdx +31 -32
  191. package/docs/foundations/errors-and-retries.mdx +42 -11
  192. package/docs/foundations/hooks.mdx +64 -35
  193. package/docs/foundations/idempotency.mdx +244 -12
  194. package/docs/foundations/index.mdx +1 -23
  195. package/docs/foundations/meta.json +2 -1
  196. package/docs/foundations/serialization.mdx +21 -22
  197. package/docs/foundations/starting-workflows.mdx +106 -30
  198. package/docs/foundations/streaming.mdx +107 -59
  199. package/docs/foundations/versioning.mdx +263 -0
  200. package/docs/foundations/workflows-and-steps.mdx +9 -9
  201. package/docs/getting-started/astro.mdx +22 -18
  202. package/docs/getting-started/express.mdx +15 -11
  203. package/docs/getting-started/fastify.mdx +15 -11
  204. package/docs/getting-started/hono.mdx +15 -11
  205. package/docs/getting-started/index.mdx +10 -3
  206. package/docs/getting-started/meta.json +3 -1
  207. package/docs/getting-started/nestjs.mdx +87 -20
  208. package/docs/getting-started/next.mdx +22 -16
  209. package/docs/getting-started/nitro.mdx +22 -18
  210. package/docs/getting-started/nuxt.mdx +15 -11
  211. package/docs/getting-started/python.mdx +135 -40
  212. package/docs/getting-started/react-router/index.mdx +33 -0
  213. package/docs/getting-started/react-router/meta.json +5 -0
  214. package/docs/getting-started/react-router/v7.mdx +237 -0
  215. package/docs/getting-started/react-router/v8.mdx +232 -0
  216. package/docs/getting-started/sveltekit.mdx +20 -16
  217. package/docs/getting-started/tanstack-start.mdx +17 -13
  218. package/docs/getting-started/vite.mdx +15 -11
  219. package/docs/how-it-works/cancellation.mdx +63 -63
  220. package/docs/how-it-works/code-transform.mdx +83 -67
  221. package/docs/how-it-works/encryption.mdx +30 -26
  222. package/docs/how-it-works/event-sourcing.mdx +98 -34
  223. package/docs/how-it-works/framework-integrations.mdx +96 -337
  224. package/docs/how-it-works/understanding-directives.mdx +22 -22
  225. package/docs/internal/index.mdx +6 -4
  226. package/docs/internal/meta.json +6 -1
  227. package/docs/internal/nitro-native-build.mdx +38 -0
  228. package/docs/internal/nitro-web-ui.mdx +24 -0
  229. package/docs/internal/serializable-abort-controller.mdx +7 -7
  230. package/docs/meta.json +3 -2
  231. package/docs/observability/attributes.mdx +134 -0
  232. package/docs/observability/index.mdx +32 -10
  233. package/docs/observability/meta.json +1 -1
  234. package/docs/observability/retention.mdx +93 -0
  235. package/docs/observability/tracing.mdx +124 -0
  236. package/docs/testing/index.mdx +36 -36
  237. package/docs/testing/server-based.mdx +10 -10
  238. package/docs/whats-new.mdx +186 -0
  239. package/package.json +17 -14
  240. package/docs/api-reference/workflow-api/world/index.mdx +0 -58
  241. package/docs/api-reference/workflow-api/world/meta.json +0 -4
  242. package/docs/api-reference/workflow-api/world/observability.mdx +0 -164
  243. package/docs/api-reference/workflow-api/world/queue.mdx +0 -86
  244. package/docs/deploying/building-a-world.mdx +0 -251
  245. package/docs/deploying/index.mdx +0 -95
  246. package/docs/deploying/meta.json +0 -4
  247. package/docs/deploying/world/local-world.mdx +0 -84
  248. package/docs/deploying/world/meta.json +0 -4
  249. package/docs/deploying/world/postgres-world.mdx +0 -224
  250. package/docs/deploying/world/vercel-world.mdx +0 -179
  251. package/docs/migration-guides/index.mdx +0 -34
  252. package/docs/migration-guides/meta.json +0 -9
  253. package/docs/migration-guides/migrating-from-aws-step-functions.mdx +0 -363
  254. package/docs/migration-guides/migrating-from-inngest.mdx +0 -314
  255. package/docs/migration-guides/migrating-from-temporal.mdx +0 -318
  256. package/docs/migration-guides/migrating-from-trigger-dev.mdx +0 -337
@@ -4,11 +4,11 @@ description: Query workflow runs, steps, hooks, and the underlying event log via
4
4
  type: reference
5
5
  summary: "Interfaces: world.events, world.runs, world.steps, world.hooks. Events are the source of truth; runs, steps, and hooks are materialized views."
6
6
  prerequisites:
7
- - /docs/api-reference/workflow-api/get-world
7
+ - /docs/api-reference/workflow-runtime/get-world
8
8
  related:
9
9
  - /docs/api-reference/workflow-api/get-run
10
10
  - /docs/how-it-works/event-sourcing
11
- - /docs/api-reference/workflow-api/world/observability
11
+ - /docs/api-reference/workflow-observability
12
12
  keywords:
13
13
  - world.events
14
14
  - world.runs
@@ -31,8 +31,8 @@ keywords:
31
31
 
32
32
  The World storage interface exposes four sub-interfaces for querying workflow data:
33
33
 
34
- - **`world.events`** — The append-only event log. This is the source of truth for all workflow state. See [Event Sourcing](/docs/how-it-works/event-sourcing) for background.
35
- - **`world.runs`**, **`world.steps`**, **`world.hooks`** — Materialized views derived from the event log, provided as convenience accessors for the most common query patterns.
34
+ - **`world.events`**: The append-only event log. This is the source of truth for all workflow state. See [Event Sourcing](/docs/how-it-works/event-sourcing) for background.
35
+ - **`world.runs`**, **`world.steps`**, **`world.hooks`**: Materialized views derived from the event log, provided as convenience accessors for the most common query patterns.
36
36
 
37
37
  ```typescript lineNumbers
38
38
  import { getWorld } from "workflow/runtime";
@@ -62,7 +62,7 @@ await world.events.create(runId, { // [!code highlight]
62
62
  | `data` | `CreateEventRequest` | Event data including `eventType` |
63
63
  | `params` | `object` | Optional parameters |
64
64
 
65
- **Returns:** `EventResult` — The created event and the affected entity (run/step/hook)
65
+ **Returns:** `EventResult`, the created event and the affected entity (run/step/hook)
66
66
 
67
67
  ### events.get()
68
68
 
@@ -81,7 +81,8 @@ const event = await world.events.get(runId, eventId); // [!code highlight]
81
81
 
82
82
  ### events.list()
83
83
 
84
- List events for a run with cursor pagination.
84
+ List events for a run. Omit `pagination.limit` to return every remaining event,
85
+ or set it to return one bounded page.
85
86
 
86
87
  ```typescript lineNumbers
87
88
  const result = await world.events.list({ runId, pagination: { cursor } }); // [!code highlight]
@@ -91,31 +92,39 @@ const result = await world.events.list({ runId, pagination: { cursor } }); // [!
91
92
  |-----------|------|-------------|
92
93
  | `params.runId` | `string` | Filter events by run ID |
93
94
  | `params.pagination.cursor` | `string` | Cursor for the next page |
95
+ | `params.pagination.limit` | `number` | Maximum events to return. When omitted, returns every remaining event up to the World's event ceiling. |
96
+ | `params.pagination.sortOrder` | `"asc" \| "desc"` | Event order |
97
+ | `params.resolveData` | `"all" \| "none"` | Include or omit event payload data |
94
98
 
95
- **Returns:** `{ data: Event[], cursor?: string }`
99
+ **Returns:** `{ data: Event[], cursor: string | null, hasMore: boolean }`
96
100
 
97
101
  ### events.listByCorrelationId()
98
102
 
99
- List events that share a correlation ID, useful for tracing related events across runs.
103
+ List one run's events that share a correlation ID, useful for tracing a single step, hook or wait through its lifecycle.
104
+
105
+ A correlation ID is unique within its run, not across runs: two runs can each hold a `step_…`, `hook_…` or `wait_…` ID that reads the same. `runId` is therefore required, and it is also what makes the pagination cursor unambiguous.
100
106
 
101
107
  ```typescript lineNumbers
102
108
  const result = await world.events.listByCorrelationId({ // [!code highlight]
109
+ runId,
103
110
  correlationId: "order-123",
104
111
  }); // [!code highlight]
105
112
  ```
106
113
 
107
114
  | Parameter | Type | Description |
108
115
  |-----------|------|-------------|
116
+ | `params.runId` | `string` | The run the correlation ID belongs to |
109
117
  | `params.correlationId` | `string` | The correlation ID to filter by |
110
118
  | `params.pagination.cursor` | `string` | Cursor for the next page |
111
119
 
112
120
  **Returns:** `{ data: Event[], cursor?: string }`
113
121
 
114
- ### Event Types
122
+ ### Event types
115
123
 
116
124
  | Category | Types |
117
125
  |----------|-------|
118
126
  | Run | `run_created`, `run_started`, `run_completed`, `run_failed`, `run_cancelled` |
127
+ | Attribute | `attr_set` |
119
128
  | Step | `step_created`, `step_started`, `step_completed`, `step_failed`, `step_retrying` |
120
129
  | Hook | `hook_created`, `hook_received`, `hook_disposed`, `hook_conflict` |
121
130
  | Wait | `wait_created`, `wait_completed` |
@@ -124,7 +133,10 @@ const result = await world.events.listByCorrelationId({ // [!code highlight]
124
133
 
125
134
  ## world.runs
126
135
 
127
- Materialized from run events. Use it to list and inspect workflow runs.
136
+ Materialized from run events. Use it for canonical operational reads, including
137
+ reads that require workflow input or output data. For observability dashboards,
138
+ inspection tools, and historical listings, use
139
+ [`world.analytics.runs.list()`](/docs/api-reference/workflow-runtime/world/analytics#runslist).
128
140
 
129
141
  ### runs.get()
130
142
 
@@ -139,6 +151,40 @@ const run = await world.runs.get(runId); // [!code highlight]
139
151
 
140
152
  **Returns:** `WorkflowRun` (or `WorkflowRunWithoutData` when `resolveData: 'none'`)
141
153
 
154
+ ### runs.waitForTerminalStatus()
155
+
156
+ Optional. Long poll for a run to reach a terminal status (`completed`,
157
+ `failed`, or `cancelled`) instead of re-reading it on an interval. This is what
158
+ `await run.returnValue` uses, so a run's result reaches the awaiting side as
159
+ soon as it finishes rather than at the next poll tick.
160
+
161
+ ```typescript lineNumbers
162
+ const run = await world.runs.waitForTerminalStatus?.(runId, { // [!code highlight]
163
+ timeoutMs: 25_000, // [!code highlight]
164
+ }); // [!code highlight]
165
+ ```
166
+
167
+ | Parameter | Type | Description |
168
+ |-----------|------|-------------|
169
+ | `runId` | `string` | The workflow run ID |
170
+ | `params.timeoutMs` | `number` | Upper bound on the wait. The call returns earlier, the moment the run is terminal |
171
+ | `params.signal` | `AbortSignal` | Abandons the wait |
172
+ | `params.resolveData` | `'all' \| 'none'` | Whether to include input/output data. Default: `'all'` |
173
+
174
+ **Returns:** the same `WorkflowRun` as `runs.get()`: terminal if the run
175
+ finished within the budget, otherwise the latest snapshot. An expired budget is
176
+ a normal return, not an error, and a missing run throws
177
+ `WorkflowRunNotFoundError` exactly as `runs.get()` does.
178
+
179
+ <Callout>
180
+ Not every backend can hold a read open, so this method is optional and may
181
+ also return a non-terminal snapshot before `timeoutMs` is up. Callers pace
182
+ their own retries (`await run.returnValue` keeps consecutive non-terminal
183
+ observations at least one `WORKFLOW_RETURN_VALUE_POLL_INTERVAL_MS` apart), and
184
+ worlds that omit the method are polled on that interval instead. Set
185
+ `WORKFLOW_RETURN_VALUE_LONG_POLL=0` to force interval polling everywhere.
186
+ </Callout>
187
+
142
188
  ### runs.list()
143
189
 
144
190
  ```typescript lineNumbers
@@ -154,11 +200,21 @@ const result = await world.runs.list({ // [!code highlight]
154
200
 
155
201
  **Returns:** `{ data: WorkflowRun[], cursor?: string }`
156
202
 
157
- ### Cancelling Runs
203
+ <Callout type="warn">
204
+ Observability and inspection usage of `world.runs.list()` is deprecated. Use
205
+ [`world.analytics.runs.list()`](/docs/api-reference/workflow-runtime/world/analytics#runslist)
206
+ for metadata-only, plan-aware queries backed by the observability pipeline.
207
+ `world.runs.list()` remains supported for operational and payload-bearing
208
+ reads.
209
+ </Callout>
210
+
211
+ ### Cancelling runs
158
212
 
159
- To cancel a run, create a `run_cancelled` event via `world.events.create()` (see [world.events](#worldevents) above), or use the CLI or Web UI helpers.
213
+ To cancel a run, create a `run_cancelled` event through `world.events.create()` (see [world.events](#worldevents) above), or use the Workflow CLI or web interface helpers.
160
214
 
161
- ### WorkflowRun Type
215
+ To cancel a batch in one call, a world may implement the optional `runs.cancelMany({ runIds })`. It returns a summary plus a per-run outcome (`cancelled`, `already_cancelled`, `not_cancellable`, `not_found`, or `failed`). Backends that omit it fall back to per-run cancellation automatically.
216
+
217
+ ### WorkflowRun type
162
218
 
163
219
  | Field | Type | Description |
164
220
  |-------|------|-------------|
@@ -189,7 +245,7 @@ const step = await world.steps.get(runId, stepId); // [!code highlight]
189
245
 
190
246
  | Parameter | Type | Description |
191
247
  |-----------|------|-------------|
192
- | `runId` | `string \| undefined` | The workflow run ID |
248
+ | `runId` | `string` | The workflow run ID that owns the step |
193
249
  | `stepId` | `string` | The step ID |
194
250
  | `params.resolveData` | `'all' \| 'none'` | Whether to include input/output data. Default: `'all'` |
195
251
 
@@ -212,7 +268,7 @@ const result = await world.steps.list({ // [!code highlight]
212
268
 
213
269
  **Returns:** `{ data: Step[], cursor?: string }`
214
270
 
215
- ### Step Type
271
+ ### Step type
216
272
 
217
273
  | Field | Type | Description |
218
274
  |-------|------|-------------|
@@ -229,11 +285,11 @@ const result = await world.steps.list({ // [!code highlight]
229
285
  | `retryAfter` | `string \| null` | ISO timestamp for next retry attempt |
230
286
 
231
287
  <Callout type="info">
232
- Step I/O is serialized using the [devalue](https://github.com/Rich-Harris/devalue) format. Use `hydrateResourceIO()` from `workflow/observability` to deserialize it for display. See [Observability Utilities](/docs/api-reference/workflow-api/world/observability).
288
+ Step input/output (I/O) is serialized using the [devalue](https://github.com/Rich-Harris/devalue) format. Use `hydrateResourceIO()` from `workflow/observability` to deserialize it for display. See [`hydrateResourceIO()`](/docs/api-reference/workflow-observability/hydrate-resource-io).
233
289
  </Callout>
234
290
 
235
291
  <Callout type="warn">
236
- `stepName` is a machine-readable identifier like `step//./src/workflows/order//processPayment`. Use `parseStepName()` from `workflow/observability` to extract the `shortName` for UI display.
292
+ `stepName` is a machine-readable identifier like `step//./src/workflows/order//processPayment`. Use `parseStepName()` from `workflow/observability` to extract the `shortName` for display in a user interface.
237
293
  </Callout>
238
294
 
239
295
  ---
@@ -258,6 +314,12 @@ const hook = await world.hooks.get(hookId); // [!code highlight]
258
314
 
259
315
  Look up a hook by its token. Useful in webhook resume flows where you receive a token in the callback URL.
260
316
 
317
+ <Callout type="info">
318
+ For runtime application code, prefer [`getHookByToken()`](/docs/api-reference/workflow-api/get-hook-by-token). Use `world.hooks.getByToken()` when you are working directly with the World storage interface for custom tooling, admin views, or low-level integrations.
319
+
320
+ Hook-token lookup is the low-level form of the recommended idempotency flow: if a hook is already registered for your business key, reuse the hook's `runId` or resume that hook instead of starting another run. If no hook exists yet, start a workflow that creates the deterministic hook near the beginning and checks `await hook.getConflict()` to detect whether another run claimed the token first. On a conflict it resolves with the run that owns the token. See [Run idempotency](/docs/foundations/idempotency#run-idempotency).
321
+ </Callout>
322
+
261
323
  ```typescript lineNumbers
262
324
  const hook = await world.hooks.getByToken(token); // [!code highlight]
263
325
  ```
@@ -282,7 +344,7 @@ const result = await world.hooks.list({ // [!code highlight]
282
344
 
283
345
  **Returns:** `{ data: Hook[], cursor?: string }`
284
346
 
285
- ### Hook Type
347
+ ### Hook type
286
348
 
287
349
  | Field | Type | Description |
288
350
  |-------|------|-------------|
@@ -299,7 +361,7 @@ const result = await world.hooks.list({ // [!code highlight]
299
361
 
300
362
  ## Examples
301
363
 
302
- ### List Runs with Pagination
364
+ ### List runs with pagination
303
365
 
304
366
  ```typescript lineNumbers
305
367
  import { getWorld } from "workflow/runtime";
@@ -314,23 +376,23 @@ const runs = await world.runs.list({ // [!code highlight]
314
376
  cursor = runs.cursor; // pass to next call for pagination
315
377
  ```
316
378
 
317
- ### Get a Run — Full Data vs. Metadata Only
379
+ ### Get a run: full data vs. metadata only
318
380
 
319
381
  ```typescript lineNumbers
320
382
  import { getWorld } from "workflow/runtime";
321
383
 
322
384
  const world = await getWorld();
323
385
 
324
- // Full data (default) — includes serialized input/output
386
+ // Full data (default): includes serialized input/output
325
387
  const run = await world.runs.get(runId); // [!code highlight]
326
388
 
327
- // Metadata only — lighter, no I/O loaded
389
+ // Metadata only: lighter, no I/O loaded
328
390
  const lightweight = await world.runs.get(runId, { // [!code highlight]
329
391
  resolveData: "none", // [!code highlight]
330
392
  }); // [!code highlight]
331
393
  ```
332
394
 
333
- ### List Steps for a Progress Dashboard
395
+ ### List steps for a progress dashboard
334
396
 
335
397
  ```typescript lineNumbers
336
398
  import { getWorld } from "workflow/runtime";
@@ -352,7 +414,7 @@ const progress = steps.data.map((step) => {
352
414
  });
353
415
  ```
354
416
 
355
- ### Hydrate Step I/O
417
+ ### Hydrate step I/O
356
418
 
357
419
  ```typescript lineNumbers
358
420
  import { getWorld } from "workflow/runtime";
@@ -364,7 +426,7 @@ const hydrated = hydrateResourceIO(step, observabilityRevivers); // [!code highl
364
426
  console.log(hydrated.input, hydrated.output);
365
427
  ```
366
428
 
367
- ### Cancel a Run
429
+ ### Cancel a run
368
430
 
369
431
  ```typescript lineNumbers
370
432
  import { getWorld } from "workflow/runtime";
@@ -375,17 +437,19 @@ await world.events.create(runId, { // [!code highlight]
375
437
  }); // [!code highlight]
376
438
  ```
377
439
 
378
- ### Look Up Hook by Token
440
+ ### Look up hook by token
379
441
 
380
442
  ```typescript lineNumbers
381
443
  import { getWorld } from "workflow/runtime";
382
444
 
383
445
  const world = await getWorld();
384
446
  const hook = await world.hooks.getByToken(token); // [!code highlight]
385
- console.log(hook.runId, hook.metadata); // [!code highlight]
447
+ console.log(hook.runId); // [!code highlight]
386
448
  ```
387
449
 
388
- ### List Events for Audit Trail
450
+ The World-level `Hook` carries `metadata` as the raw serialized (and, on encrypting Worlds, encrypted) value, not the object the workflow passed to `createHook()`. To read the decoded value, use [`getHookByToken()`](/docs/api-reference/workflow-api/get-hook-by-token), whose `hook.metadata` is a Promise that hydrates it on first access.
451
+
452
+ ### List events for audit trail
389
453
 
390
454
  ```typescript lineNumbers
391
455
  import { getWorld } from "workflow/runtime";
@@ -400,9 +464,9 @@ for (const event of events.data) {
400
464
 
401
465
  ## Related
402
466
 
403
- - [Event Sourcing](/docs/how-it-works/event-sourcing) — How the event log powers workflow replay and state
404
- - [getRun()](/docs/api-reference/workflow-api/get-run) — Higher-level API for working with individual runs
405
- - [Observability Utilities](/docs/api-reference/workflow-api/world/observability) — Hydrate step I/O, parse display names, decrypt data
406
- - [resumeHook()](/docs/api-reference/workflow-api/resume-hook) — Resume a workflow by sending a payload to a hook
407
- - [Hooks](/docs/foundations/hooks) — Core concepts for hooks and pause points
408
- - [Workflows and Steps](/docs/foundations/workflows-and-steps) — Core concepts for steps
467
+ - [Event sourcing](/docs/how-it-works/event-sourcing): How the event log powers workflow replay and state
468
+ - [`getRun()`](/docs/api-reference/workflow-api/get-run): Higher-level API for working with individual runs
469
+ - [`workflow/observability`](/docs/api-reference/workflow-observability): Hydrate step I/O and parse display names
470
+ - [`resumeHook()`](/docs/api-reference/workflow-api/resume-hook): Resume a workflow by sending a payload to a hook
471
+ - [Hooks](/docs/foundations/hooks): Core concepts for hooks and pause points
472
+ - [Workflows and steps](/docs/foundations/workflows-and-steps): Core concepts for steps
@@ -4,7 +4,7 @@ description: Read, write, and manage real-time data streams for workflow runs.
4
4
  type: reference
5
5
  summary: "Methods: streams.write(), streams.writeMulti(), streams.get(), streams.close(), streams.list(), streams.getChunks(), streams.getInfo(). Stream methods live on world.streams."
6
6
  prerequisites:
7
- - /docs/api-reference/workflow-api/get-world
7
+ - /docs/api-reference/workflow-runtime/get-world
8
8
  related:
9
9
  - /docs/foundations/streaming
10
10
  - /docs/api-reference/workflow/get-writable
@@ -33,7 +33,7 @@ Stream methods live on `world.streams` (the `streams` sub-object of the `World`
33
33
  import { getWorld } from "workflow/runtime";
34
34
 
35
35
  const world = await getWorld(); // [!code highlight]
36
- // Stream methods are called on world.streams — e.g. world.streams.write()
36
+ // Stream methods are called on world.streams, e.g. world.streams.write()
37
37
  ```
38
38
 
39
39
  ## Methods
@@ -56,7 +56,7 @@ await world.streams.write(runId, "default", chunk); // [!code highlight]
56
56
 
57
57
  ### writeMulti()
58
58
 
59
- Write multiple chunks in a single operation. Optional optimization — not all World implementations support it. Falls back to sequential `write()` calls if unavailable.
59
+ Write multiple chunks in a single operation. Optional optimization: not all World implementations support it. Falls back to sequential `write()` calls if unavailable.
60
60
 
61
61
  ```typescript lineNumbers
62
62
  await world.streams.writeMulti?.(runId, "default", [chunk1, chunk2]); // [!code highlight]
@@ -173,7 +173,7 @@ const info = await world.streams.getInfo(runId, "default"); // [!code highlight]
173
173
 
174
174
  ## Examples
175
175
 
176
- ### Read a Stream as a Response
176
+ ### Read a stream as a response
177
177
 
178
178
  ```typescript lineNumbers
179
179
  // app/api/workflow-streams/read/route.ts
@@ -192,7 +192,7 @@ export async function GET(req: Request) {
192
192
  }
193
193
  ```
194
194
 
195
- ### Paginate Through Stream Chunks
195
+ ### Paginate through stream chunks
196
196
 
197
197
  ```typescript lineNumbers
198
198
  import { getWorld } from "workflow/runtime";
@@ -211,6 +211,6 @@ do {
211
211
 
212
212
  ## Related
213
213
 
214
- - [Streaming](/docs/foundations/streaming) — Core concepts for streaming data from workflows
215
- - [getWritable()](/docs/api-reference/workflow/get-writable) — The standard way to write to streams from within steps
216
- - [Storage](/docs/api-reference/workflow-api/world/storage) — Query runs, steps, hooks, and events
214
+ - [Streaming](/docs/foundations/streaming): Core concepts for streaming data from workflows
215
+ - [`getWritable()`](/docs/api-reference/workflow/get-writable): The standard way to write to streams from within steps
216
+ - [Storage](/docs/api-reference/workflow-runtime/world/storage): Query runs, steps, hooks, and events
@@ -27,9 +27,8 @@ The `@workflow/serde` package provides two symbols that allow you to define cust
27
27
  </Card>
28
28
  </Cards>
29
29
 
30
- ## Quick Example
30
+ ## Quick example
31
31
 
32
- {/* @expect-error:2351 */}
33
32
 
34
33
  ```typescript lineNumbers
35
34
  import { WORKFLOW_SERIALIZE, WORKFLOW_DESERIALIZE } from "@workflow/serde";
@@ -6,7 +6,6 @@ A symbol used to define custom deserialization for user-defined class instances.
6
6
 
7
7
  ## Usage
8
8
 
9
- {/* @expect-error:2351 */}
10
9
 
11
10
  ```typescript lineNumbers
12
11
  import { WORKFLOW_SERIALIZE, WORKFLOW_DESERIALIZE } from "@workflow/serde";
@@ -24,9 +23,9 @@ class Point {
24
23
  }
25
24
  ```
26
25
 
27
- ## API Signature
26
+ ## API signature
28
27
 
29
- {/* @skip-typecheck */}
28
+ {/* @skip-typecheck: type-only signature snippet, not compilable code */}
30
29
 
31
30
  ```typescript
32
31
  static [WORKFLOW_DESERIALIZE](data: SerializableData): T
@@ -66,5 +65,5 @@ This method runs inside the workflow context and is subject to the same constrai
66
65
  - No non-deterministic operations (like `Math.random()` or `Date.now()`)
67
66
  - No external network calls
68
67
 
69
- Keep this method simple and focused on reconstructing the instance from the provided data.
68
+ Keep this method focused on reconstructing the instance from the provided data.
70
69
  </Callout>
@@ -2,11 +2,10 @@
2
2
  title: WORKFLOW_SERIALIZE
3
3
  ---
4
4
 
5
- A symbol used to define custom serialization for user-defined class instances. The static method should accept an instance and return serializable data.
5
+ `WORKFLOW_SERIALIZE` defines custom serialization for user-defined class instances. The static method accepts an instance and returns serializable data.
6
6
 
7
7
  ## Usage
8
8
 
9
- {/* @expect-error:2351 */}
10
9
 
11
10
  ```typescript lineNumbers
12
11
  import { WORKFLOW_SERIALIZE, WORKFLOW_DESERIALIZE } from "@workflow/serde";
@@ -24,9 +23,9 @@ class Point {
24
23
  }
25
24
  ```
26
25
 
27
- ## API Signature
26
+ ## API signature
28
27
 
29
- {/* @skip-typecheck */}
28
+ {/* @skip-typecheck: type-only signature snippet, not compilable code */}
30
29
 
31
30
  ```typescript
32
31
  static [WORKFLOW_SERIALIZE](instance: T): SerializableData
@@ -61,15 +60,16 @@ The method should return serializable data. This can be:
61
60
  The method must be implemented as a **static** method on the class. Instance methods are not supported.
62
61
  </Callout>
63
62
 
64
- - Both `WORKFLOW_SERIALIZE` and `WORKFLOW_DESERIALIZE` must be implemented together
65
- - The returned data must itself be serializable
66
- - The SWC compiler plugin automatically detects and registers classes that implement these symbols
63
+ - Both `WORKFLOW_SERIALIZE` and `WORKFLOW_DESERIALIZE` must be implemented together.
64
+ - The returned data must itself be serializable.
65
+ - The SWC compiler plugin automatically detects and registers classes that implement these symbols.
67
66
 
68
67
  <Callout type="warn">
69
68
  This method runs inside the workflow context and is subject to the same constraints as `"use workflow"` functions:
70
69
  - No Node.js-specific APIs (like `fs`, `path`, `crypto`, etc.)
71
70
  - No non-deterministic operations (like `Math.random()` or `Date.now()`)
72
71
  - No external network calls
72
+ - No side effects on workflow state: the method may run outside deterministic replay, so mutations would not be reconstructed
73
73
 
74
- Keep this method simple and focused on extracting data from the instance.
74
+ Keep this method focused on extracting data from the instance.
75
75
  </Callout>
@@ -0,0 +1,18 @@
1
+ ---
2
+ title: "workflow/sveltekit"
3
+ description: SvelteKit integration for automatic workflow bundling via Vite.
4
+ type: overview
5
+ summary: Explore the SvelteKit integration for automatic workflow bundling and runtime support.
6
+ related:
7
+ - /docs/getting-started/sveltekit
8
+ ---
9
+
10
+ SvelteKit integration for Workflow SDK that configures Vite to transform workflow code and build the workflow bundles.
11
+
12
+ ## Functions
13
+
14
+ <Cards>
15
+ <Card title="workflowPlugin()" href="/docs/api-reference/workflow-sveltekit/workflow-plugin">
16
+ Vite plugin that transforms workflow code (`"use step"`/`"use workflow"` directives) in SvelteKit apps
17
+ </Card>
18
+ </Cards>
@@ -0,0 +1,4 @@
1
+ {
2
+ "title": "workflow/sveltekit",
3
+ "pages": ["workflow-plugin"]
4
+ }
@@ -0,0 +1,42 @@
1
+ ---
2
+ title: workflowPlugin
3
+ description: Configure Vite to transform workflow directives in SvelteKit.
4
+ type: reference
5
+ summary: Add workflowPlugin to your Vite config to enable workflow directive transformation in SvelteKit apps.
6
+ prerequisites:
7
+ - /docs/getting-started/sveltekit
8
+ ---
9
+
10
+ Returns the Vite plugins that transform workflow code (`"use step"`/`"use workflow"` directives) and build the workflow bundles in a SvelteKit app.
11
+
12
+ ## Usage
13
+
14
+ To enable `"use step"` and `"use workflow"` directives while developing locally or deploying to production, add `workflowPlugin()` to the `plugins` array of your Vite config.
15
+
16
+ ```typescript title="vite.config.ts" lineNumbers
17
+ import { sveltekit } from "@sveltejs/kit/vite";
18
+ import { defineConfig } from "vite";
19
+ import { workflowPlugin } from "workflow/sveltekit"; // [!code highlight]
20
+
21
+ export default defineConfig({
22
+ plugins: [sveltekit(), workflowPlugin()], // [!code highlight]
23
+ });
24
+ ```
25
+
26
+ ## API signature
27
+
28
+ ### Parameters
29
+
30
+ | Parameter | Type | Description |
31
+ | --- | --- | --- |
32
+ | `options` | `WorkflowPluginOptions` | Optional. Configures the workflow build. |
33
+
34
+ #### WorkflowPluginOptions
35
+
36
+ | Option | Type | Default | Description |
37
+ | --- | --- | --- | --- |
38
+ | `sourcemap` | `boolean \| 'inline' \| 'linked' \| 'external' \| 'both'` | `'inline'` (dev) / `false` (prod) | Controls source maps on generated workflow bundles. Accepts the same values as esbuild's `sourcemap` option. Defaults to `'inline'` in development and `false` in production (smaller function bundles, which helps stay under the Vercel 250 MB function size limit). Set it explicitly, or use the `WORKFLOW_SOURCEMAP` environment variable, to override in either environment. |
39
+
40
+ ### Returns
41
+
42
+ Returns an array of Vite `Plugin` objects. Spread or pass the array directly to the `plugins` option of your Vite config. Vite flattens nested plugin arrays automatically.
@@ -0,0 +1,18 @@
1
+ ---
2
+ title: "workflow/vite"
3
+ description: Vite plugin for automatic workflow bundling in Vite + Nitro apps.
4
+ type: overview
5
+ summary: Explore the Vite plugin for automatic workflow bundling and runtime support.
6
+ related:
7
+ - /docs/getting-started/vite
8
+ ---
9
+
10
+ Vite integration for Workflow SDK. It wraps the [`workflow/nitro`](/docs/api-reference/workflow-nitro) module as a Vite plugin, for apps using Nitro's Vite plugin (`nitro/vite`).
11
+
12
+ ## Functions
13
+
14
+ <Cards>
15
+ <Card title="workflow()" href="/docs/api-reference/workflow-vite/workflow">
16
+ Vite plugin that transforms workflow code (`"use step"`/`"use workflow"` directives) and configures the Nitro server
17
+ </Card>
18
+ </Cards>
@@ -0,0 +1,4 @@
1
+ {
2
+ "title": "workflow/vite",
3
+ "pages": ["workflow"]
4
+ }
@@ -0,0 +1,48 @@
1
+ ---
2
+ title: workflow
3
+ description: Configure Vite and Nitro to transform workflow directives.
4
+ type: reference
5
+ summary: Add the workflow plugin to your Vite config to enable workflow directive transformation in Vite + Nitro apps.
6
+ prerequisites:
7
+ - /docs/getting-started/vite
8
+ ---
9
+
10
+ Returns the Vite plugins that transform workflow code (`"use step"`/`"use workflow"` directives) and configure the [`workflow/nitro`](/docs/api-reference/workflow-nitro) module on the Nitro server. It is designed to be used alongside `nitro()` from `nitro/vite`, which provides the server framework for API routes and deployment.
11
+
12
+ ## Usage
13
+
14
+ To enable `"use step"` and `"use workflow"` directives while developing locally or deploying to production, add `workflow()` to the `plugins` array of your Vite config, together with `nitro()`.
15
+
16
+ ```typescript title="vite.config.ts" lineNumbers
17
+ import { nitro } from "nitro/vite";
18
+ import { defineConfig } from "vite";
19
+ import { workflow } from "workflow/vite"; // [!code highlight]
20
+
21
+ export default defineConfig({
22
+ plugins: [nitro(), workflow()], // [!code highlight]
23
+ nitro: {
24
+ serverDir: "./",
25
+ },
26
+ });
27
+ ```
28
+
29
+ ## API signature
30
+
31
+ ### Parameters
32
+
33
+ | Parameter | Type | Description |
34
+ | --- | --- | --- |
35
+ | `options` | `ModuleOptions` | Optional. Forwarded to the `workflow/nitro` module as its module options. |
36
+
37
+ #### ModuleOptions
38
+
39
+ | Option | Type | Default | Description |
40
+ | --- | --- | --- | --- |
41
+ | `dirs` | `string[]` | — | Directories to scan for workflows and steps. By default, the `workflows/` directory is scanned from the project root and all layer source directories. |
42
+ | `typescriptPlugin` | `boolean` | `false` | Adds the `workflow` TypeScript plugin to the generated `tsconfig.json` for integrated development environment (IDE) IntelliSense. |
43
+ | `runtime` | `string` | — | Node.js runtime version for Vercel Functions (for example, `'nodejs22.x'` or `'nodejs24.x'`). Only applies when deploying to Vercel. |
44
+ | `sourcemap` | `boolean \| 'inline' \| 'linked' \| 'external' \| 'both'` | `'inline'` (dev) / `false` (prod) | Controls source maps on generated workflow bundles. Accepts the same values as esbuild's `sourcemap` option. Defaults to `'inline'` in development and `false` in production (smaller function bundles, which helps stay under the Vercel 250 MB function size limit). Set it explicitly, or use the `WORKFLOW_SOURCEMAP` environment variable, to override in either environment. |
45
+
46
+ ### Returns
47
+
48
+ Returns an array of Vite `Plugin` objects. Spread or pass the array directly to the `plugins` option of your Vite config. Vite flattens nested plugin arrays automatically.