workflow 5.0.0-beta.0 → 5.0.0-beta.10

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 (125) hide show
  1. package/README.md +4 -4
  2. package/dist/api-workflow.d.ts +2 -4
  3. package/dist/api-workflow.d.ts.map +1 -1
  4. package/dist/api-workflow.js +3 -7
  5. package/dist/api.d.ts +5 -1
  6. package/dist/api.d.ts.map +1 -1
  7. package/dist/api.js +14 -2
  8. package/dist/astro.js +1 -1
  9. package/dist/index.js +1 -1
  10. package/dist/internal/builtins.d.ts +17 -0
  11. package/dist/internal/builtins.d.ts.map +1 -1
  12. package/dist/internal/builtins.js +65 -1
  13. package/dist/internal/class-serialization.js +1 -1
  14. package/dist/internal/errors.js +1 -1
  15. package/dist/nest.js +1 -1
  16. package/dist/next.cjs +4 -2
  17. package/dist/next.d.cts +1 -1
  18. package/dist/next.d.cts.map +1 -1
  19. package/dist/nitro.js +1 -1
  20. package/dist/nuxt.js +1 -1
  21. package/dist/observability.d.ts +2 -2
  22. package/dist/observability.js +3 -3
  23. package/dist/runtime.d.ts +1 -1
  24. package/dist/runtime.d.ts.map +1 -1
  25. package/dist/runtime.js +2 -2
  26. package/dist/stdlib.js +1 -1
  27. package/dist/sveltekit.js +1 -1
  28. package/dist/typescript-plugin.cjs +1 -1
  29. package/dist/vite.js +1 -1
  30. package/dist/workflow.js +1 -1
  31. package/docs/ai/index.mdx +6 -5
  32. package/docs/ai/resumable-streams.mdx +1 -1
  33. package/docs/api-reference/vitest/index.mdx +28 -1
  34. package/docs/api-reference/workflow/create-webhook.mdx +37 -18
  35. package/docs/api-reference/workflow/experimental-set-attributes.mdx +63 -0
  36. package/docs/api-reference/workflow/get-workflow-metadata.mdx +61 -0
  37. package/docs/api-reference/workflow/index.mdx +3 -0
  38. package/docs/api-reference/workflow-ai/durable-agent.mdx +0 -4
  39. package/docs/api-reference/workflow-ai/index.mdx +0 -5
  40. package/docs/api-reference/workflow-ai/workflow-chat-transport.mdx +0 -4
  41. package/docs/api-reference/workflow-api/get-world.mdx +6 -6
  42. package/docs/api-reference/workflow-api/index.mdx +1 -1
  43. package/docs/api-reference/workflow-api/start.mdx +5 -4
  44. package/docs/api-reference/workflow-api/world/index.mdx +2 -2
  45. package/docs/api-reference/workflow-api/world/observability.mdx +1 -1
  46. package/docs/api-reference/workflow-api/world/queue.mdx +1 -1
  47. package/docs/api-reference/workflow-api/world/storage.mdx +8 -8
  48. package/docs/api-reference/workflow-api/world/streams.mdx +38 -36
  49. package/docs/api-reference/workflow-errors/workflow-run-failed-error.mdx +16 -6
  50. package/docs/api-reference/workflow-next/with-workflow.mdx +34 -2
  51. package/docs/changelog/attributes-mvp.mdx +368 -0
  52. package/docs/changelog/eager-processing.mdx +595 -0
  53. package/docs/changelog/index.mdx +2 -1
  54. package/docs/cookbook/advanced/child-workflows.mdx +313 -0
  55. package/docs/cookbook/advanced/meta.json +9 -0
  56. package/docs/cookbook/advanced/publishing-libraries.mdx +336 -0
  57. package/docs/cookbook/advanced/serializable-steps.mdx +147 -0
  58. package/docs/cookbook/advanced/upgrading-workflows.mdx +195 -0
  59. package/docs/cookbook/agent-patterns/agent-cancellation.mdx +156 -0
  60. package/docs/cookbook/agent-patterns/durable-agent.mdx +154 -0
  61. package/docs/cookbook/agent-patterns/human-in-the-loop.mdx +255 -0
  62. package/docs/cookbook/agent-patterns/meta.json +4 -0
  63. package/docs/cookbook/common-patterns/batching.mdx +105 -0
  64. package/docs/cookbook/common-patterns/idempotency.mdx +107 -0
  65. package/docs/cookbook/common-patterns/meta.json +15 -0
  66. package/docs/cookbook/common-patterns/rate-limiting.mdx +228 -0
  67. package/docs/cookbook/common-patterns/saga.mdx +247 -0
  68. package/docs/cookbook/common-patterns/scheduling.mdx +129 -0
  69. package/docs/cookbook/common-patterns/sequential-and-parallel.mdx +155 -0
  70. package/docs/cookbook/common-patterns/timeouts.mdx +99 -0
  71. package/docs/cookbook/common-patterns/webhooks.mdx +185 -0
  72. package/docs/cookbook/common-patterns/workflow-composition.mdx +111 -0
  73. package/docs/cookbook/index.mdx +38 -0
  74. package/docs/cookbook/integrations/ai-sdk.mdx +383 -0
  75. package/docs/cookbook/integrations/chat-sdk.mdx +307 -0
  76. package/docs/cookbook/integrations/meta.json +4 -0
  77. package/docs/cookbook/integrations/sandbox.mdx +520 -0
  78. package/docs/cookbook/meta.json +5 -0
  79. package/docs/deploying/building-a-world.mdx +46 -44
  80. package/docs/deploying/world/local-world.mdx +1 -1
  81. package/docs/deploying/world/postgres-world.mdx +15 -8
  82. package/docs/deploying/world/vercel-world.mdx +3 -1
  83. package/docs/errors/abort-signal-timeout-in-workflow.mdx +80 -0
  84. package/docs/errors/hook-conflict.mdx +56 -4
  85. package/docs/errors/index.mdx +3 -0
  86. package/docs/errors/runtime-decryption-failed.mdx +77 -0
  87. package/docs/errors/start-invalid-workflow-function.mdx +1 -1
  88. package/docs/foundations/cancellation.mdx +460 -0
  89. package/docs/foundations/errors-and-retries.mdx +7 -3
  90. package/docs/foundations/index.mdx +3 -3
  91. package/docs/foundations/meta.json +3 -2
  92. package/docs/foundations/serialization.mdx +78 -42
  93. package/docs/foundations/starting-workflows.mdx +6 -2
  94. package/docs/foundations/versioning.mdx +263 -0
  95. package/docs/getting-started/astro.mdx +6 -0
  96. package/docs/getting-started/index.mdx +13 -7
  97. package/docs/getting-started/meta.json +3 -1
  98. package/docs/getting-started/nestjs.mdx +8 -0
  99. package/docs/getting-started/next.mdx +29 -3
  100. package/docs/getting-started/nitro.mdx +22 -0
  101. package/docs/getting-started/python.mdx +165 -0
  102. package/docs/getting-started/sveltekit.mdx +6 -0
  103. package/docs/getting-started/tanstack-start.mdx +241 -0
  104. package/docs/how-it-works/cancellation.mdx +287 -0
  105. package/docs/how-it-works/code-transform.mdx +8 -7
  106. package/docs/how-it-works/event-sourcing.mdx +2 -2
  107. package/docs/how-it-works/meta.json +2 -1
  108. package/docs/internal/index.mdx +19 -0
  109. package/docs/internal/meta.json +5 -0
  110. package/docs/internal/serializable-abort-controller.mdx +148 -0
  111. package/docs/meta.json +1 -0
  112. package/docs/migration-guides/index.mdx +34 -0
  113. package/docs/migration-guides/meta.json +9 -0
  114. package/docs/migration-guides/migrating-from-aws-step-functions.mdx +358 -0
  115. package/docs/migration-guides/migrating-from-inngest.mdx +304 -0
  116. package/docs/migration-guides/migrating-from-temporal.mdx +313 -0
  117. package/docs/migration-guides/migrating-from-trigger-dev.mdx +328 -0
  118. package/docs/observability/attributes.mdx +66 -0
  119. package/docs/observability/index.mdx +9 -1
  120. package/docs/observability/meta.json +1 -1
  121. package/package.json +14 -14
  122. package/dist/internal/private.d.ts +0 -6
  123. package/dist/internal/private.d.ts.map +0 -1
  124. package/dist/internal/private.js +0 -6
  125. package/docs/foundations/common-patterns.mdx +0 -265
package/README.md CHANGED
@@ -1,8 +1,8 @@
1
1
  <div align="center">
2
- <a href="https://useworkflow.dev">
2
+ <a href="https://workflow-sdk.dev">
3
3
  <picture>
4
- <source media="(prefers-color-scheme: dark)" srcset="https://useworkflow.dev/workflow-circle-symbol-dark.svg">
5
- <img alt="Workflow SDK logo" src="https://useworkflow.dev/workflow-circle-symbol-light.svg" height="128">
4
+ <source media="(prefers-color-scheme: dark)" srcset="https://workflow-sdk.dev/workflow-circle-symbol-dark.svg">
5
+ <img alt="Workflow SDK logo" src="https://workflow-sdk.dev/workflow-circle-symbol-light.svg" height="128">
6
6
  </picture>
7
7
  </a>
8
8
  <h1>Workflow SDK</h1>
@@ -18,7 +18,7 @@
18
18
 
19
19
  The **Workflow SDK** lets you easily add durability, reliability, and observability to async JavaScript. Build apps and AI agents that can suspend, resume, and maintain state with ease.
20
20
 
21
- Visit [https://useworkflow.dev](https://useworkflow.dev) to view the full documentation.
21
+ Visit [https://workflow-sdk.dev](https://workflow-sdk.dev) to view the full documentation.
22
22
 
23
23
  ## Community
24
24
 
@@ -1,11 +1,9 @@
1
1
  export type { Event, StartOptions, StopSleepOptions, StopSleepResult, WorkflowReadableStreamOptions, WorkflowRun, } from '@workflow/core/runtime';
2
- export declare class Run {
3
- constructor();
4
- }
2
+ export { Run } from '@workflow/core/runtime/run';
3
+ export { start } from '@workflow/core/runtime/start';
5
4
  export declare const getRun: () => never;
6
5
  export declare const getHookByToken: () => never;
7
6
  export declare const resumeHook: () => never;
8
7
  export declare const resumeWebhook: () => never;
9
8
  export declare const runStep: () => never;
10
- export declare const start: () => never;
11
9
  //# sourceMappingURL=api-workflow.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"api-workflow.d.ts","sourceRoot":"","sources":["../src/api-workflow.ts"],"names":[],"mappings":"AAAA,YAAY,EACV,KAAK,EACL,YAAY,EACZ,gBAAgB,EAChB,eAAe,EACf,6BAA6B,EAC7B,WAAW,GACZ,MAAM,wBAAwB,CAAC;AAQhC,qBAAa,GAAG;;CAIf;AACD,eAAO,MAAM,MAAM,aAA+B,CAAC;AACnD,eAAO,MAAM,cAAc,aAAuC,CAAC;AACnE,eAAO,MAAM,UAAU,aAAmC,CAAC;AAC3D,eAAO,MAAM,aAAa,aAAsC,CAAC;AACjE,eAAO,MAAM,OAAO,aAAgC,CAAC;AACrD,eAAO,MAAM,KAAK,aAA8B,CAAC"}
1
+ {"version":3,"file":"api-workflow.d.ts","sourceRoot":"","sources":["../src/api-workflow.ts"],"names":[],"mappings":"AAAA,YAAY,EACV,KAAK,EACL,YAAY,EACZ,gBAAgB,EAChB,eAAe,EACf,6BAA6B,EAC7B,WAAW,GACZ,MAAM,wBAAwB,CAAC;AAEhC,OAAO,EAAE,GAAG,EAAE,MAAM,4BAA4B,CAAC;AACjD,OAAO,EAAE,KAAK,EAAE,MAAM,8BAA8B,CAAC;AAQrD,eAAO,MAAM,MAAM,aAA+B,CAAC;AACnD,eAAO,MAAM,cAAc,aAAuC,CAAC;AACnE,eAAO,MAAM,UAAU,aAAmC,CAAC;AAC3D,eAAO,MAAM,aAAa,aAAsC,CAAC;AACjE,eAAO,MAAM,OAAO,aAAgC,CAAC"}
@@ -1,15 +1,11 @@
1
+ export { Run } from '@workflow/core/runtime/run';
2
+ export { start } from '@workflow/core/runtime/start';
1
3
  const workflowStub = (item) => {
2
4
  throw new Error(`The workflow environment doesn't allow this runtime usage of ${item}. Move this call to a step function ("use step") or call it outside the workflow context.`);
3
5
  };
4
- export class Run {
5
- constructor() {
6
- workflowStub('Run');
7
- }
8
- }
9
6
  export const getRun = () => workflowStub('getRun');
10
7
  export const getHookByToken = () => workflowStub('getHookByToken');
11
8
  export const resumeHook = () => workflowStub('resumeHook');
12
9
  export const resumeWebhook = () => workflowStub('resumeWebhook');
13
10
  export const runStep = () => workflowStub('runStep');
14
- export const start = () => workflowStub('start');
15
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBpLXdvcmtmbG93LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL2FwaS13b3JrZmxvdy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFTQSxNQUFNLFlBQVksR0FBRyxDQUFDLElBQVksRUFBRSxFQUFFO0lBQ3BDLE1BQU0sSUFBSSxLQUFLLENBQ2IsZ0VBQWdFLElBQUksMkZBQTJGLENBQ2hLLENBQUM7QUFDSixDQUFDLENBQUM7QUFFRixNQUFNLE9BQU8sR0FBRztJQUNkO1FBQ0UsWUFBWSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ3RCLENBQUM7Q0FDRjtBQUNELE1BQU0sQ0FBQyxNQUFNLE1BQU0sR0FBRyxHQUFHLEVBQUUsQ0FBQyxZQUFZLENBQUMsUUFBUSxDQUFDLENBQUM7QUFDbkQsTUFBTSxDQUFDLE1BQU0sY0FBYyxHQUFHLEdBQUcsRUFBRSxDQUFDLFlBQVksQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO0FBQ25FLE1BQU0sQ0FBQyxNQUFNLFVBQVUsR0FBRyxHQUFHLEVBQUUsQ0FBQyxZQUFZLENBQUMsWUFBWSxDQUFDLENBQUM7QUFDM0QsTUFBTSxDQUFDLE1BQU0sYUFBYSxHQUFHLEdBQUcsRUFBRSxDQUFDLFlBQVksQ0FBQyxlQUFlLENBQUMsQ0FBQztBQUNqRSxNQUFNLENBQUMsTUFBTSxPQUFPLEdBQUcsR0FBRyxFQUFFLENBQUMsWUFBWSxDQUFDLFNBQVMsQ0FBQyxDQUFDO0FBQ3JELE1BQU0sQ0FBQyxNQUFNLEtBQUssR0FBRyxHQUFHLEVBQUUsQ0FBQyxZQUFZLENBQUMsT0FBTyxDQUFDLENBQUMifQ==
11
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBpLXdvcmtmbG93LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL2FwaS13b3JrZmxvdy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFTQSxPQUFPLEVBQUUsR0FBRyxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDakQsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBRXJELE1BQU0sWUFBWSxHQUFHLENBQUMsSUFBWSxFQUFFLEVBQUU7SUFDcEMsTUFBTSxJQUFJLEtBQUssQ0FDYixnRUFBZ0UsSUFBSSwyRkFBMkYsQ0FDaEssQ0FBQztBQUNKLENBQUMsQ0FBQztBQUVGLE1BQU0sQ0FBQyxNQUFNLE1BQU0sR0FBRyxHQUFHLEVBQUUsQ0FBQyxZQUFZLENBQUMsUUFBUSxDQUFDLENBQUM7QUFDbkQsTUFBTSxDQUFDLE1BQU0sY0FBYyxHQUFHLEdBQUcsRUFBRSxDQUFDLFlBQVksQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO0FBQ25FLE1BQU0sQ0FBQyxNQUFNLFVBQVUsR0FBRyxHQUFHLEVBQUUsQ0FBQyxZQUFZLENBQUMsWUFBWSxDQUFDLENBQUM7QUFDM0QsTUFBTSxDQUFDLE1BQU0sYUFBYSxHQUFHLEdBQUcsRUFBRSxDQUFDLFlBQVksQ0FBQyxlQUFlLENBQUMsQ0FBQztBQUNqRSxNQUFNLENBQUMsTUFBTSxPQUFPLEdBQUcsR0FBRyxFQUFFLENBQUMsWUFBWSxDQUFDLFNBQVMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IHR5cGUge1xuICBFdmVudCxcbiAgU3RhcnRPcHRpb25zLFxuICBTdG9wU2xlZXBPcHRpb25zLFxuICBTdG9wU2xlZXBSZXN1bHQsXG4gIFdvcmtmbG93UmVhZGFibGVTdHJlYW1PcHRpb25zLFxuICBXb3JrZmxvd1J1bixcbn0gZnJvbSAnQHdvcmtmbG93L2NvcmUvcnVudGltZSc7XG5cbmV4cG9ydCB7IFJ1biB9IGZyb20gJ0B3b3JrZmxvdy9jb3JlL3J1bnRpbWUvcnVuJztcbmV4cG9ydCB7IHN0YXJ0IH0gZnJvbSAnQHdvcmtmbG93L2NvcmUvcnVudGltZS9zdGFydCc7XG5cbmNvbnN0IHdvcmtmbG93U3R1YiA9IChpdGVtOiBzdHJpbmcpID0+IHtcbiAgdGhyb3cgbmV3IEVycm9yKFxuICAgIGBUaGUgd29ya2Zsb3cgZW52aXJvbm1lbnQgZG9lc24ndCBhbGxvdyB0aGlzIHJ1bnRpbWUgdXNhZ2Ugb2YgJHtpdGVtfS4gTW92ZSB0aGlzIGNhbGwgdG8gYSBzdGVwIGZ1bmN0aW9uIChcInVzZSBzdGVwXCIpIG9yIGNhbGwgaXQgb3V0c2lkZSB0aGUgd29ya2Zsb3cgY29udGV4dC5gXG4gICk7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0UnVuID0gKCkgPT4gd29ya2Zsb3dTdHViKCdnZXRSdW4nKTtcbmV4cG9ydCBjb25zdCBnZXRIb29rQnlUb2tlbiA9ICgpID0+IHdvcmtmbG93U3R1YignZ2V0SG9va0J5VG9rZW4nKTtcbmV4cG9ydCBjb25zdCByZXN1bWVIb29rID0gKCkgPT4gd29ya2Zsb3dTdHViKCdyZXN1bWVIb29rJyk7XG5leHBvcnQgY29uc3QgcmVzdW1lV2ViaG9vayA9ICgpID0+IHdvcmtmbG93U3R1YigncmVzdW1lV2ViaG9vaycpO1xuZXhwb3J0IGNvbnN0IHJ1blN0ZXAgPSAoKSA9PiB3b3JrZmxvd1N0dWIoJ3J1blN0ZXAnKTtcbiJdfQ==
package/dist/api.d.ts CHANGED
@@ -1,2 +1,6 @@
1
- export { type Event, getHookByToken, getRun, Run, resumeHook, resumeWebhook, runStep, type StartOptions, start, type StopSleepOptions, type StopSleepResult, type WorkflowReadableStream, type WorkflowReadableStreamOptions, type WorkflowRun, } from '@workflow/core/runtime';
1
+ import '@workflow/core/runtime/world-init';
2
+ export type { Event, StopSleepOptions, StopSleepResult, WorkflowRun, } from '@workflow/core/runtime';
3
+ export { getHookByToken, resumeHook, resumeWebhook, } from '@workflow/core/runtime/resume-hook';
4
+ export { getRun, Run, type WorkflowReadableStream, type WorkflowReadableStreamOptions, } from '@workflow/core/runtime/run';
5
+ export { type StartOptions, start, } from '@workflow/core/runtime/start';
2
6
  //# sourceMappingURL=api.d.ts.map
package/dist/api.d.ts.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"api.d.ts","sourceRoot":"","sources":["../src/api.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,KAAK,EACV,cAAc,EACd,MAAM,EACN,GAAG,EACH,UAAU,EACV,aAAa,EACb,OAAO,EACP,KAAK,YAAY,EACjB,KAAK,EACL,KAAK,gBAAgB,EACrB,KAAK,eAAe,EACpB,KAAK,sBAAsB,EAC3B,KAAK,6BAA6B,EAClC,KAAK,WAAW,GACjB,MAAM,wBAAwB,CAAC"}
1
+ {"version":3,"file":"api.d.ts","sourceRoot":"","sources":["../src/api.ts"],"names":[],"mappings":"AASA,OAAO,mCAAmC,CAAC;AAE3C,YAAY,EACV,KAAK,EACL,gBAAgB,EAChB,eAAe,EACf,WAAW,GACZ,MAAM,wBAAwB,CAAC;AAChC,OAAO,EACL,cAAc,EACd,UAAU,EACV,aAAa,GACd,MAAM,oCAAoC,CAAC;AAC5C,OAAO,EACL,MAAM,EACN,GAAG,EACH,KAAK,sBAAsB,EAC3B,KAAK,6BAA6B,GACnC,MAAM,4BAA4B,CAAC;AACpC,OAAO,EACL,KAAK,YAAY,EACjB,KAAK,GACN,MAAM,8BAA8B,CAAC"}
package/dist/api.js CHANGED
@@ -1,2 +1,14 @@
1
- export { getHookByToken, getRun, Run, resumeHook, resumeWebhook, runStep, start, } from '@workflow/core/runtime';
2
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBpLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL2FwaS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBRUwsY0FBYyxFQUNkLE1BQU0sRUFDTixHQUFHLEVBQ0gsVUFBVSxFQUNWLGFBQWEsRUFDYixPQUFPLEVBRVAsS0FBSyxHQU1OLE1BQU0sd0JBQXdCLENBQUMifQ==
1
+ // Side-effect import: ensure `world.ts` is loaded so its module-load
2
+ // `globalThis[GetWorldFnKey] ??= getWorld` registration fires before any
3
+ // host route reaches `getWorldLazy()`. Without this, webpack/turbopack
4
+ // tree-shake `world.ts` out of routes that only use `start` (the most
5
+ // common host-side entry point) and `getWorldLazy()`'s dynamic-import
6
+ // fallback then fails because the bundler inlined `get-world-lazy.js`
7
+ // into the route bundle. Resolved to an empty stub via the `workflow`
8
+ // export condition in VM/step bundles, so this stays host-only.
9
+ // See `@workflow/core/src/runtime/world-init.ts` for the full rationale.
10
+ import '@workflow/core/runtime/world-init';
11
+ export { getHookByToken, resumeHook, resumeWebhook, } from '@workflow/core/runtime/resume-hook';
12
+ export { getRun, Run, } from '@workflow/core/runtime/run';
13
+ export { start, } from '@workflow/core/runtime/start';
14
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBpLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL2FwaS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxxRUFBcUU7QUFDckUseUVBQXlFO0FBQ3pFLHVFQUF1RTtBQUN2RSxzRUFBc0U7QUFDdEUsc0VBQXNFO0FBQ3RFLHNFQUFzRTtBQUN0RSxzRUFBc0U7QUFDdEUsZ0VBQWdFO0FBQ2hFLHlFQUF5RTtBQUN6RSxPQUFPLG1DQUFtQyxDQUFDO0FBUTNDLE9BQU8sRUFDTCxjQUFjLEVBQ2QsVUFBVSxFQUNWLGFBQWEsR0FDZCxNQUFNLG9DQUFvQyxDQUFDO0FBQzVDLE9BQU8sRUFDTCxNQUFNLEVBQ04sR0FBRyxHQUdKLE1BQU0sNEJBQTRCLENBQUM7QUFDcEMsT0FBTyxFQUVMLEtBQUssR0FDTixNQUFNLDhCQUE4QixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gU2lkZS1lZmZlY3QgaW1wb3J0OiBlbnN1cmUgYHdvcmxkLnRzYCBpcyBsb2FkZWQgc28gaXRzIG1vZHVsZS1sb2FkXG4vLyBgZ2xvYmFsVGhpc1tHZXRXb3JsZEZuS2V5XSA/Pz0gZ2V0V29ybGRgIHJlZ2lzdHJhdGlvbiBmaXJlcyBiZWZvcmUgYW55XG4vLyBob3N0IHJvdXRlIHJlYWNoZXMgYGdldFdvcmxkTGF6eSgpYC4gV2l0aG91dCB0aGlzLCB3ZWJwYWNrL3R1cmJvcGFja1xuLy8gdHJlZS1zaGFrZSBgd29ybGQudHNgIG91dCBvZiByb3V0ZXMgdGhhdCBvbmx5IHVzZSBgc3RhcnRgICh0aGUgbW9zdFxuLy8gY29tbW9uIGhvc3Qtc2lkZSBlbnRyeSBwb2ludCkgYW5kIGBnZXRXb3JsZExhenkoKWAncyBkeW5hbWljLWltcG9ydFxuLy8gZmFsbGJhY2sgdGhlbiBmYWlscyBiZWNhdXNlIHRoZSBidW5kbGVyIGlubGluZWQgYGdldC13b3JsZC1sYXp5LmpzYFxuLy8gaW50byB0aGUgcm91dGUgYnVuZGxlLiBSZXNvbHZlZCB0byBhbiBlbXB0eSBzdHViIHZpYSB0aGUgYHdvcmtmbG93YFxuLy8gZXhwb3J0IGNvbmRpdGlvbiBpbiBWTS9zdGVwIGJ1bmRsZXMsIHNvIHRoaXMgc3RheXMgaG9zdC1vbmx5LlxuLy8gU2VlIGBAd29ya2Zsb3cvY29yZS9zcmMvcnVudGltZS93b3JsZC1pbml0LnRzYCBmb3IgdGhlIGZ1bGwgcmF0aW9uYWxlLlxuaW1wb3J0ICdAd29ya2Zsb3cvY29yZS9ydW50aW1lL3dvcmxkLWluaXQnO1xuXG5leHBvcnQgdHlwZSB7XG4gIEV2ZW50LFxuICBTdG9wU2xlZXBPcHRpb25zLFxuICBTdG9wU2xlZXBSZXN1bHQsXG4gIFdvcmtmbG93UnVuLFxufSBmcm9tICdAd29ya2Zsb3cvY29yZS9ydW50aW1lJztcbmV4cG9ydCB7XG4gIGdldEhvb2tCeVRva2VuLFxuICByZXN1bWVIb29rLFxuICByZXN1bWVXZWJob29rLFxufSBmcm9tICdAd29ya2Zsb3cvY29yZS9ydW50aW1lL3Jlc3VtZS1ob29rJztcbmV4cG9ydCB7XG4gIGdldFJ1bixcbiAgUnVuLFxuICB0eXBlIFdvcmtmbG93UmVhZGFibGVTdHJlYW0sXG4gIHR5cGUgV29ya2Zsb3dSZWFkYWJsZVN0cmVhbU9wdGlvbnMsXG59IGZyb20gJ0B3b3JrZmxvdy9jb3JlL3J1bnRpbWUvcnVuJztcbmV4cG9ydCB7XG4gIHR5cGUgU3RhcnRPcHRpb25zLFxuICBzdGFydCxcbn0gZnJvbSAnQHdvcmtmbG93L2NvcmUvcnVudGltZS9zdGFydCc7XG4iXX0=
package/dist/astro.js CHANGED
@@ -1,2 +1,2 @@
1
1
  export * from '@workflow/astro';
2
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXN0cm8uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvYXN0cm8udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYyxpQkFBaUIsQ0FBQyJ9
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXN0cm8uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvYXN0cm8udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYyxpQkFBaUIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gJ0B3b3JrZmxvdy9hc3Rybyc7XG4iXX0=
package/dist/index.js CHANGED
@@ -1,3 +1,3 @@
1
1
  export * from '@workflow/core';
2
2
  export * from './stdlib.js';
3
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYyxnQkFBZ0IsQ0FBQztBQUMvQixjQUFjLGFBQWEsQ0FBQyJ9
3
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYyxnQkFBZ0IsQ0FBQztBQUMvQixjQUFjLGFBQWEsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gJ0B3b3JrZmxvdy9jb3JlJztcbmV4cG9ydCAqIGZyb20gJy4vc3RkbGliLmpzJztcbiJdfQ==
@@ -6,4 +6,21 @@
6
6
  export declare function __builtin_response_array_buffer(this: Request | Response): Promise<ArrayBuffer>;
7
7
  export declare function __builtin_response_json(this: Request | Response): Promise<unknown>;
8
8
  export declare function __builtin_response_text(this: Request | Response): Promise<string>;
9
+ /**
10
+ * Step bridge for workflow-body `setAttributes` calls. The VM-side
11
+ * helper validates input and dispatches here via `useStep`. This step
12
+ * runs in normal Node context with full world access.
13
+ *
14
+ * The dispatch reads the world and current run id directly from
15
+ * `globalThis` symbols populated by the workflow/step runtime — this
16
+ * intentionally avoids importing `@workflow/core` so the Next.js
17
+ * deferred-entries discoverer can't walk a chain into world adapters
18
+ * and `@vercel/queue` from this step file.
19
+ */
20
+ export declare function __builtin_set_attributes(changes: Array<{
21
+ key: string;
22
+ value: string | null;
23
+ }>, options?: {
24
+ allowReservedAttributes?: boolean;
25
+ }): Promise<void>;
9
26
  //# sourceMappingURL=builtins.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"builtins.d.ts","sourceRoot":"","sources":["../../src/internal/builtins.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,wBAAsB,+BAA+B,CACnD,IAAI,EAAE,OAAO,GAAG,QAAQ,wBAIzB;AAED,wBAAsB,uBAAuB,CAAC,IAAI,EAAE,OAAO,GAAG,QAAQ,oBAGrE;AAED,wBAAsB,uBAAuB,CAAC,IAAI,EAAE,OAAO,GAAG,QAAQ,mBAGrE"}
1
+ {"version":3,"file":"builtins.d.ts","sourceRoot":"","sources":["../../src/internal/builtins.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,wBAAsB,+BAA+B,CACnD,IAAI,EAAE,OAAO,GAAG,QAAQ,wBAIzB;AAED,wBAAsB,uBAAuB,CAAC,IAAI,EAAE,OAAO,GAAG,QAAQ,oBAGrE;AAED,wBAAsB,uBAAuB,CAAC,IAAI,EAAE,OAAO,GAAG,QAAQ,mBAGrE;AAmBD;;;;;;;;;;GAUG;AACH,wBAAsB,wBAAwB,CAC5C,OAAO,EAAE,KAAK,CAAC;IAAE,GAAG,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAAA;CAAE,CAAC,EACrD,OAAO,CAAC,EAAE;IAAE,uBAAuB,CAAC,EAAE,OAAO,CAAA;CAAE,iBAsEhD"}
@@ -15,4 +15,68 @@ export async function __builtin_response_text() {
15
15
  'use step';
16
16
  return this.text();
17
17
  }
18
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnVpbHRpbnMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvaW50ZXJuYWwvYnVpbHRpbnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7R0FJRztBQUVILE1BQU0sQ0FBQyxLQUFLLFVBQVUsK0JBQStCO0lBR25ELFVBQVUsQ0FBQztJQUNYLE9BQU8sSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO0FBQzVCLENBQUM7QUFFRCxNQUFNLENBQUMsS0FBSyxVQUFVLHVCQUF1QjtJQUMzQyxVQUFVLENBQUM7SUFDWCxPQUFPLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztBQUNyQixDQUFDO0FBRUQsTUFBTSxDQUFDLEtBQUssVUFBVSx1QkFBdUI7SUFDM0MsVUFBVSxDQUFDO0lBQ1gsT0FBTyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7QUFDckIsQ0FBQyJ9
18
+ /**
19
+ * Process-wide dedupe for the unsupported-world warning so high-volume
20
+ * callers don't flood logs.
21
+ */
22
+ const UNSUPPORTED_WORLD_WARNED = Symbol.for('@workflow/setAttributes//unsupportedWorldWarned');
23
+ const INTERNAL_ATTRIBUTES_MAX_ATTEMPTS = 3;
24
+ function formatUnknownError(error) {
25
+ if (error instanceof Error) {
26
+ return error.stack ?? `${error.name}: ${error.message}`;
27
+ }
28
+ return String(error);
29
+ }
30
+ /**
31
+ * Step bridge for workflow-body `setAttributes` calls. The VM-side
32
+ * helper validates input and dispatches here via `useStep`. This step
33
+ * runs in normal Node context with full world access.
34
+ *
35
+ * The dispatch reads the world and current run id directly from
36
+ * `globalThis` symbols populated by the workflow/step runtime — this
37
+ * intentionally avoids importing `@workflow/core` so the Next.js
38
+ * deferred-entries discoverer can't walk a chain into world adapters
39
+ * and `@vercel/queue` from this step file.
40
+ */
41
+ export async function __builtin_set_attributes(changes, options) {
42
+ 'use step';
43
+ if (changes.length === 0)
44
+ return;
45
+ const g = globalThis;
46
+ const contextStorage = g[Symbol.for('WORKFLOW_STEP_CONTEXT_STORAGE')];
47
+ const store = contextStorage?.getStore?.();
48
+ const attempt = typeof store?.stepMetadata?.attempt === 'number'
49
+ ? store.stepMetadata.attempt
50
+ : INTERNAL_ATTRIBUTES_MAX_ATTEMPTS;
51
+ const world = g[Symbol.for('@workflow/world//cache')];
52
+ if (typeof world?.runs?.experimentalSetAttributes !== 'function') {
53
+ // World adapter doesn't implement attributes yet — no-op the call,
54
+ // but emit one process-wide warning so users know their writes are
55
+ // being dropped. The VM-side validation already ran so the input
56
+ // is well-formed.
57
+ if (!g[UNSUPPORTED_WORLD_WARNED]) {
58
+ g[UNSUPPORTED_WORLD_WARNED] = true;
59
+ const worldName = world?.name ? ` (${world.name})` : '';
60
+ console.warn(`[workflow] setAttributes: the current world implementation${worldName} does not implement experimentalSetAttributes; this call (and any subsequent setAttributes calls in this process) is a no-op. Attributes will become available once the world adapter adds support.`);
61
+ }
62
+ return;
63
+ }
64
+ try {
65
+ const runId = store?.workflowMetadata?.workflowRunId;
66
+ if (!runId) {
67
+ throw new Error('__builtin_set_attributes: no workflow run id available in step context');
68
+ }
69
+ await world.runs.experimentalSetAttributes(runId, changes, options);
70
+ }
71
+ catch (error) {
72
+ if (attempt < INTERNAL_ATTRIBUTES_MAX_ATTEMPTS) {
73
+ throw error;
74
+ }
75
+ // Failing to post tags should not fail a run during the experimental phase.
76
+ // After three attempts, log and let the internal step complete so the
77
+ // runtime does not convert retry exhaustion into a FatalError.
78
+ console.error(`[workflow] setAttributes: failed to post tags after ${INTERNAL_ATTRIBUTES_MAX_ATTEMPTS} attempts; dropping the internal attribute write. ${formatUnknownError(error)}`);
79
+ }
80
+ }
81
+ __builtin_set_attributes.maxRetries = INTERNAL_ATTRIBUTES_MAX_ATTEMPTS - 1;
82
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnVpbHRpbnMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvaW50ZXJuYWwvYnVpbHRpbnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7R0FJRztBQUVILE1BQU0sQ0FBQyxLQUFLLFVBQVUsK0JBQStCO0lBR25ELFVBQVUsQ0FBQztJQUNYLE9BQU8sSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO0FBQzVCLENBQUM7QUFFRCxNQUFNLENBQUMsS0FBSyxVQUFVLHVCQUF1QjtJQUMzQyxVQUFVLENBQUM7SUFDWCxPQUFPLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztBQUNyQixDQUFDO0FBRUQsTUFBTSxDQUFDLEtBQUssVUFBVSx1QkFBdUI7SUFDM0MsVUFBVSxDQUFDO0lBQ1gsT0FBTyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7QUFDckIsQ0FBQztBQUVEOzs7R0FHRztBQUNILE1BQU0sd0JBQXdCLEdBQUcsTUFBTSxDQUFDLEdBQUcsQ0FDekMsaURBQWlELENBQ2xELENBQUM7QUFFRixNQUFNLGdDQUFnQyxHQUFHLENBQUMsQ0FBQztBQUUzQyxTQUFTLGtCQUFrQixDQUFDLEtBQWM7SUFDeEMsSUFBSSxLQUFLLFlBQVksS0FBSyxFQUFFLENBQUM7UUFDM0IsT0FBTyxLQUFLLENBQUMsS0FBSyxJQUFJLEdBQUcsS0FBSyxDQUFDLElBQUksS0FBSyxLQUFLLENBQUMsT0FBTyxFQUFFLENBQUM7SUFDMUQsQ0FBQztJQUNELE9BQU8sTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQ3ZCLENBQUM7QUFFRDs7Ozs7Ozs7OztHQVVHO0FBQ0gsTUFBTSxDQUFDLEtBQUssVUFBVSx3QkFBd0IsQ0FDNUMsT0FBcUQsRUFDckQsT0FBK0M7SUFFL0MsVUFBVSxDQUFDO0lBQ1gsSUFBSSxPQUFPLENBQUMsTUFBTSxLQUFLLENBQUM7UUFBRSxPQUFPO0lBQ2pDLE1BQU0sQ0FBQyxHQUFHLFVBQXFDLENBQUM7SUFFaEQsTUFBTSxjQUFjLEdBQUcsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsK0JBQStCLENBQUMsQ0FTdkQsQ0FBQztJQUNkLE1BQU0sS0FBSyxHQUFHLGNBQWMsRUFBRSxRQUFRLEVBQUUsRUFBRSxDQUFDO0lBQzNDLE1BQU0sT0FBTyxHQUNYLE9BQU8sS0FBSyxFQUFFLFlBQVksRUFBRSxPQUFPLEtBQUssUUFBUTtRQUM5QyxDQUFDLENBQUMsS0FBSyxDQUFDLFlBQVksQ0FBQyxPQUFPO1FBQzVCLENBQUMsQ0FBQyxnQ0FBZ0MsQ0FBQztJQUV2QyxNQUFNLEtBQUssR0FBRyxDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyx3QkFBd0IsQ0FBQyxDQVd2QyxDQUFDO0lBQ2QsSUFBSSxPQUFPLEtBQUssRUFBRSxJQUFJLEVBQUUseUJBQXlCLEtBQUssVUFBVSxFQUFFLENBQUM7UUFDakUsbUVBQW1FO1FBQ25FLG1FQUFtRTtRQUNuRSxpRUFBaUU7UUFDakUsa0JBQWtCO1FBQ2xCLElBQUksQ0FBQyxDQUFDLENBQUMsd0JBQXdCLENBQUMsRUFBRSxDQUFDO1lBQ2pDLENBQUMsQ0FBQyx3QkFBd0IsQ0FBQyxHQUFHLElBQUksQ0FBQztZQUNuQyxNQUFNLFNBQVMsR0FBRyxLQUFLLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxLQUFLLEtBQUssQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1lBQ3hELE9BQU8sQ0FBQyxJQUFJLENBQ1YsNkRBQTZELFNBQVMscU1BQXFNLENBQzVRLENBQUM7UUFDSixDQUFDO1FBQ0QsT0FBTztJQUNULENBQUM7SUFFRCxJQUFJLENBQUM7UUFDSCxNQUFNLEtBQUssR0FBRyxLQUFLLEVBQUUsZ0JBQWdCLEVBQUUsYUFBYSxDQUFDO1FBQ3JELElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUNYLE1BQU0sSUFBSSxLQUFLLENBQ2Isd0VBQXdFLENBQ3pFLENBQUM7UUFDSixDQUFDO1FBRUQsTUFBTSxLQUFLLENBQUMsSUFBSSxDQUFDLHlCQUF5QixDQUFDLEtBQUssRUFBRSxPQUFPLEVBQUUsT0FBTyxDQUFDLENBQUM7SUFDdEUsQ0FBQztJQUFDLE9BQU8sS0FBSyxFQUFFLENBQUM7UUFDZixJQUFJLE9BQU8sR0FBRyxnQ0FBZ0MsRUFBRSxDQUFDO1lBQy9DLE1BQU0sS0FBSyxDQUFDO1FBQ2QsQ0FBQztRQUVELDRFQUE0RTtRQUM1RSxzRUFBc0U7UUFDdEUsK0RBQStEO1FBQy9ELE9BQU8sQ0FBQyxLQUFLLENBQ1gsdURBQXVELGdDQUFnQyxxREFBcUQsa0JBQWtCLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FDeEssQ0FBQztJQUNKLENBQUM7QUFDSCxDQUFDO0FBR0Msd0JBR0QsQ0FBQyxVQUFVLEdBQUcsZ0NBQWdDLEdBQUcsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBUaGVzZSBhcmUgdGhlIGJ1aWx0LWluIHN0ZXBzIHRoYXQgYXJlIFwiYXV0b21hdGljYWxseSBhdmFpbGFibGVcIiBpbiB0aGUgd29ya2Zsb3cgc2NvcGUuIFRoZXkgYXJlXG4gKiBzaW1pbGFyIHRvIFwic3RkbGliXCIgZXhjZXB0IHRoYXQgYXJlIG5vdCBtZWFudCB0byBiZSBpbXBvcnRlZCBieSB1c2VycywgYnV0IGFyZSBpbnN0ZWFkIFwianVzdCBhdmFpbGFibGVcIlxuICogYWxvbmdzaWRlIHVzZXIgZGVmaW5lZCBzdGVwcy4gVGhleSBhcmUgdXNlZCBpbnRlcm5hbGx5IGJ5IHRoZSBydW50aW1lXG4gKi9cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIF9fYnVpbHRpbl9yZXNwb25zZV9hcnJheV9idWZmZXIoXG4gIHRoaXM6IFJlcXVlc3QgfCBSZXNwb25zZVxuKSB7XG4gICd1c2Ugc3RlcCc7XG4gIHJldHVybiB0aGlzLmFycmF5QnVmZmVyKCk7XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBfX2J1aWx0aW5fcmVzcG9uc2VfanNvbih0aGlzOiBSZXF1ZXN0IHwgUmVzcG9uc2UpIHtcbiAgJ3VzZSBzdGVwJztcbiAgcmV0dXJuIHRoaXMuanNvbigpO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gX19idWlsdGluX3Jlc3BvbnNlX3RleHQodGhpczogUmVxdWVzdCB8IFJlc3BvbnNlKSB7XG4gICd1c2Ugc3RlcCc7XG4gIHJldHVybiB0aGlzLnRleHQoKTtcbn1cblxuLyoqXG4gKiBQcm9jZXNzLXdpZGUgZGVkdXBlIGZvciB0aGUgdW5zdXBwb3J0ZWQtd29ybGQgd2FybmluZyBzbyBoaWdoLXZvbHVtZVxuICogY2FsbGVycyBkb24ndCBmbG9vZCBsb2dzLlxuICovXG5jb25zdCBVTlNVUFBPUlRFRF9XT1JMRF9XQVJORUQgPSBTeW1ib2wuZm9yKFxuICAnQHdvcmtmbG93L3NldEF0dHJpYnV0ZXMvL3Vuc3VwcG9ydGVkV29ybGRXYXJuZWQnXG4pO1xuXG5jb25zdCBJTlRFUk5BTF9BVFRSSUJVVEVTX01BWF9BVFRFTVBUUyA9IDM7XG5cbmZ1bmN0aW9uIGZvcm1hdFVua25vd25FcnJvcihlcnJvcjogdW5rbm93bikge1xuICBpZiAoZXJyb3IgaW5zdGFuY2VvZiBFcnJvcikge1xuICAgIHJldHVybiBlcnJvci5zdGFjayA/PyBgJHtlcnJvci5uYW1lfTogJHtlcnJvci5tZXNzYWdlfWA7XG4gIH1cbiAgcmV0dXJuIFN0cmluZyhlcnJvcik7XG59XG5cbi8qKlxuICogU3RlcCBicmlkZ2UgZm9yIHdvcmtmbG93LWJvZHkgYHNldEF0dHJpYnV0ZXNgIGNhbGxzLiBUaGUgVk0tc2lkZVxuICogaGVscGVyIHZhbGlkYXRlcyBpbnB1dCBhbmQgZGlzcGF0Y2hlcyBoZXJlIHZpYSBgdXNlU3RlcGAuIFRoaXMgc3RlcFxuICogcnVucyBpbiBub3JtYWwgTm9kZSBjb250ZXh0IHdpdGggZnVsbCB3b3JsZCBhY2Nlc3MuXG4gKlxuICogVGhlIGRpc3BhdGNoIHJlYWRzIHRoZSB3b3JsZCBhbmQgY3VycmVudCBydW4gaWQgZGlyZWN0bHkgZnJvbVxuICogYGdsb2JhbFRoaXNgIHN5bWJvbHMgcG9wdWxhdGVkIGJ5IHRoZSB3b3JrZmxvdy9zdGVwIHJ1bnRpbWUg4oCUIHRoaXNcbiAqIGludGVudGlvbmFsbHkgYXZvaWRzIGltcG9ydGluZyBgQHdvcmtmbG93L2NvcmVgIHNvIHRoZSBOZXh0LmpzXG4gKiBkZWZlcnJlZC1lbnRyaWVzIGRpc2NvdmVyZXIgY2FuJ3Qgd2FsayBhIGNoYWluIGludG8gd29ybGQgYWRhcHRlcnNcbiAqIGFuZCBgQHZlcmNlbC9xdWV1ZWAgZnJvbSB0aGlzIHN0ZXAgZmlsZS5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIF9fYnVpbHRpbl9zZXRfYXR0cmlidXRlcyhcbiAgY2hhbmdlczogQXJyYXk8eyBrZXk6IHN0cmluZzsgdmFsdWU6IHN0cmluZyB8IG51bGwgfT4sXG4gIG9wdGlvbnM/OiB7IGFsbG93UmVzZXJ2ZWRBdHRyaWJ1dGVzPzogYm9vbGVhbiB9XG4pIHtcbiAgJ3VzZSBzdGVwJztcbiAgaWYgKGNoYW5nZXMubGVuZ3RoID09PSAwKSByZXR1cm47XG4gIGNvbnN0IGcgPSBnbG9iYWxUaGlzIGFzIFJlY29yZDxzeW1ib2wsIHVua25vd24+O1xuXG4gIGNvbnN0IGNvbnRleHRTdG9yYWdlID0gZ1tTeW1ib2wuZm9yKCdXT1JLRkxPV19TVEVQX0NPTlRFWFRfU1RPUkFHRScpXSBhc1xuICAgIHwge1xuICAgICAgICBnZXRTdG9yZTogKCkgPT5cbiAgICAgICAgICB8IHtcbiAgICAgICAgICAgICAgc3RlcE1ldGFkYXRhPzogeyBhdHRlbXB0PzogbnVtYmVyIH07XG4gICAgICAgICAgICAgIHdvcmtmbG93TWV0YWRhdGE/OiB7IHdvcmtmbG93UnVuSWQ/OiBzdHJpbmcgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB8IHVuZGVmaW5lZDtcbiAgICAgIH1cbiAgICB8IHVuZGVmaW5lZDtcbiAgY29uc3Qgc3RvcmUgPSBjb250ZXh0U3RvcmFnZT8uZ2V0U3RvcmU/LigpO1xuICBjb25zdCBhdHRlbXB0ID1cbiAgICB0eXBlb2Ygc3RvcmU/LnN0ZXBNZXRhZGF0YT8uYXR0ZW1wdCA9PT0gJ251bWJlcidcbiAgICAgID8gc3RvcmUuc3RlcE1ldGFkYXRhLmF0dGVtcHRcbiAgICAgIDogSU5URVJOQUxfQVRUUklCVVRFU19NQVhfQVRURU1QVFM7XG5cbiAgY29uc3Qgd29ybGQgPSBnW1N5bWJvbC5mb3IoJ0B3b3JrZmxvdy93b3JsZC8vY2FjaGUnKV0gYXNcbiAgICB8IHtcbiAgICAgICAgbmFtZT86IHN0cmluZztcbiAgICAgICAgcnVucz86IHtcbiAgICAgICAgICBleHBlcmltZW50YWxTZXRBdHRyaWJ1dGVzPzogKFxuICAgICAgICAgICAgcnVuSWQ6IHN0cmluZyxcbiAgICAgICAgICAgIGNoYW5nZXM6IEFycmF5PHsga2V5OiBzdHJpbmc7IHZhbHVlOiBzdHJpbmcgfCBudWxsIH0+LFxuICAgICAgICAgICAgb3B0aW9ucz86IHsgYWxsb3dSZXNlcnZlZEF0dHJpYnV0ZXM/OiBib29sZWFuIH1cbiAgICAgICAgICApID0+IFByb21pc2U8dW5rbm93bj47XG4gICAgICAgIH07XG4gICAgICB9XG4gICAgfCB1bmRlZmluZWQ7XG4gIGlmICh0eXBlb2Ygd29ybGQ/LnJ1bnM/LmV4cGVyaW1lbnRhbFNldEF0dHJpYnV0ZXMgIT09ICdmdW5jdGlvbicpIHtcbiAgICAvLyBXb3JsZCBhZGFwdGVyIGRvZXNuJ3QgaW1wbGVtZW50IGF0dHJpYnV0ZXMgeWV0IOKAlCBuby1vcCB0aGUgY2FsbCxcbiAgICAvLyBidXQgZW1pdCBvbmUgcHJvY2Vzcy13aWRlIHdhcm5pbmcgc28gdXNlcnMga25vdyB0aGVpciB3cml0ZXMgYXJlXG4gICAgLy8gYmVpbmcgZHJvcHBlZC4gVGhlIFZNLXNpZGUgdmFsaWRhdGlvbiBhbHJlYWR5IHJhbiBzbyB0aGUgaW5wdXRcbiAgICAvLyBpcyB3ZWxsLWZvcm1lZC5cbiAgICBpZiAoIWdbVU5TVVBQT1JURURfV09STERfV0FSTkVEXSkge1xuICAgICAgZ1tVTlNVUFBPUlRFRF9XT1JMRF9XQVJORURdID0gdHJ1ZTtcbiAgICAgIGNvbnN0IHdvcmxkTmFtZSA9IHdvcmxkPy5uYW1lID8gYCAoJHt3b3JsZC5uYW1lfSlgIDogJyc7XG4gICAgICBjb25zb2xlLndhcm4oXG4gICAgICAgIGBbd29ya2Zsb3ddIHNldEF0dHJpYnV0ZXM6IHRoZSBjdXJyZW50IHdvcmxkIGltcGxlbWVudGF0aW9uJHt3b3JsZE5hbWV9IGRvZXMgbm90IGltcGxlbWVudCBleHBlcmltZW50YWxTZXRBdHRyaWJ1dGVzOyB0aGlzIGNhbGwgKGFuZCBhbnkgc3Vic2VxdWVudCBzZXRBdHRyaWJ1dGVzIGNhbGxzIGluIHRoaXMgcHJvY2VzcykgaXMgYSBuby1vcC4gQXR0cmlidXRlcyB3aWxsIGJlY29tZSBhdmFpbGFibGUgb25jZSB0aGUgd29ybGQgYWRhcHRlciBhZGRzIHN1cHBvcnQuYFxuICAgICAgKTtcbiAgICB9XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgdHJ5IHtcbiAgICBjb25zdCBydW5JZCA9IHN0b3JlPy53b3JrZmxvd01ldGFkYXRhPy53b3JrZmxvd1J1bklkO1xuICAgIGlmICghcnVuSWQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgJ19fYnVpbHRpbl9zZXRfYXR0cmlidXRlczogbm8gd29ya2Zsb3cgcnVuIGlkIGF2YWlsYWJsZSBpbiBzdGVwIGNvbnRleHQnXG4gICAgICApO1xuICAgIH1cblxuICAgIGF3YWl0IHdvcmxkLnJ1bnMuZXhwZXJpbWVudGFsU2V0QXR0cmlidXRlcyhydW5JZCwgY2hhbmdlcywgb3B0aW9ucyk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgaWYgKGF0dGVtcHQgPCBJTlRFUk5BTF9BVFRSSUJVVEVTX01BWF9BVFRFTVBUUykge1xuICAgICAgdGhyb3cgZXJyb3I7XG4gICAgfVxuXG4gICAgLy8gRmFpbGluZyB0byBwb3N0IHRhZ3Mgc2hvdWxkIG5vdCBmYWlsIGEgcnVuIGR1cmluZyB0aGUgZXhwZXJpbWVudGFsIHBoYXNlLlxuICAgIC8vIEFmdGVyIHRocmVlIGF0dGVtcHRzLCBsb2cgYW5kIGxldCB0aGUgaW50ZXJuYWwgc3RlcCBjb21wbGV0ZSBzbyB0aGVcbiAgICAvLyBydW50aW1lIGRvZXMgbm90IGNvbnZlcnQgcmV0cnkgZXhoYXVzdGlvbiBpbnRvIGEgRmF0YWxFcnJvci5cbiAgICBjb25zb2xlLmVycm9yKFxuICAgICAgYFt3b3JrZmxvd10gc2V0QXR0cmlidXRlczogZmFpbGVkIHRvIHBvc3QgdGFncyBhZnRlciAke0lOVEVSTkFMX0FUVFJJQlVURVNfTUFYX0FUVEVNUFRTfSBhdHRlbXB0czsgZHJvcHBpbmcgdGhlIGludGVybmFsIGF0dHJpYnV0ZSB3cml0ZS4gJHtmb3JtYXRVbmtub3duRXJyb3IoZXJyb3IpfWBcbiAgICApO1xuICB9XG59XG5cbihcbiAgX19idWlsdGluX3NldF9hdHRyaWJ1dGVzIGFzIHR5cGVvZiBfX2J1aWx0aW5fc2V0X2F0dHJpYnV0ZXMgJiB7XG4gICAgbWF4UmV0cmllczogbnVtYmVyO1xuICB9XG4pLm1heFJldHJpZXMgPSBJTlRFUk5BTF9BVFRSSUJVVEVTX01BWF9BVFRFTVBUUyAtIDE7XG4iXX0=
@@ -5,4 +5,4 @@
5
5
  * dependencies (like async_hooks) when used in workflow bundles.
6
6
  */
7
7
  export * from '@workflow/core/class-serialization';
8
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xhc3Mtc2VyaWFsaXphdGlvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9pbnRlcm5hbC9jbGFzcy1zZXJpYWxpemF0aW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7OztHQUtHO0FBRUgsY0FBYyxvQ0FBb0MsQ0FBQyJ9
8
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xhc3Mtc2VyaWFsaXphdGlvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9pbnRlcm5hbC9jbGFzcy1zZXJpYWxpemF0aW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7OztHQUtHO0FBRUgsY0FBYyxvQ0FBb0MsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQ2xhc3Mgc2VyaWFsaXphdGlvbiB1dGlsaXRpZXMgZm9yIHRoZSB3b3JrZmxvdyBjb21waWxlci5cbiAqXG4gKiBUaGlzIG1vZHVsZSBpcyBzZXBhcmF0ZSBmcm9tIHByaXZhdGUudHMgdG8gYXZvaWQgcHVsbGluZyBpbiBOb2RlLmpzLW9ubHlcbiAqIGRlcGVuZGVuY2llcyAobGlrZSBhc3luY19ob29rcykgd2hlbiB1c2VkIGluIHdvcmtmbG93IGJ1bmRsZXMuXG4gKi9cblxuZXhwb3J0ICogZnJvbSAnQHdvcmtmbG93L2NvcmUvY2xhc3Mtc2VyaWFsaXphdGlvbic7XG4iXX0=
@@ -1,2 +1,2 @@
1
1
  export { EntityConflictError, HookConflictError, HookNotFoundError, RunExpiredError, RunNotSupportedError, StepNotRegisteredError, ThrottleError, TooEarlyError, WorkflowError, WorkflowNotRegisteredError, WorkflowRunCancelledError, WorkflowRunFailedError, WorkflowRunNotCompletedError, WorkflowRunNotFoundError, WorkflowRuntimeError, WorkflowWorldError, } from '@workflow/errors';
2
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXJyb3JzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2ludGVybmFsL2Vycm9ycy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsbUJBQW1CLEVBQ25CLGlCQUFpQixFQUNqQixpQkFBaUIsRUFDakIsZUFBZSxFQUNmLG9CQUFvQixFQUNwQixzQkFBc0IsRUFDdEIsYUFBYSxFQUNiLGFBQWEsRUFDYixhQUFhLEVBQ2IsMEJBQTBCLEVBQzFCLHlCQUF5QixFQUN6QixzQkFBc0IsRUFDdEIsNEJBQTRCLEVBQzVCLHdCQUF3QixFQUN4QixvQkFBb0IsRUFDcEIsa0JBQWtCLEdBQ25CLE1BQU0sa0JBQWtCLENBQUMifQ==
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXJyb3JzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2ludGVybmFsL2Vycm9ycy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsbUJBQW1CLEVBQ25CLGlCQUFpQixFQUNqQixpQkFBaUIsRUFDakIsZUFBZSxFQUNmLG9CQUFvQixFQUNwQixzQkFBc0IsRUFDdEIsYUFBYSxFQUNiLGFBQWEsRUFDYixhQUFhLEVBQ2IsMEJBQTBCLEVBQzFCLHlCQUF5QixFQUN6QixzQkFBc0IsRUFDdEIsNEJBQTRCLEVBQzVCLHdCQUF3QixFQUN4QixvQkFBb0IsRUFDcEIsa0JBQWtCLEdBQ25CLE1BQU0sa0JBQWtCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQge1xuICBFbnRpdHlDb25mbGljdEVycm9yLFxuICBIb29rQ29uZmxpY3RFcnJvcixcbiAgSG9va05vdEZvdW5kRXJyb3IsXG4gIFJ1bkV4cGlyZWRFcnJvcixcbiAgUnVuTm90U3VwcG9ydGVkRXJyb3IsXG4gIFN0ZXBOb3RSZWdpc3RlcmVkRXJyb3IsXG4gIFRocm90dGxlRXJyb3IsXG4gIFRvb0Vhcmx5RXJyb3IsXG4gIFdvcmtmbG93RXJyb3IsXG4gIFdvcmtmbG93Tm90UmVnaXN0ZXJlZEVycm9yLFxuICBXb3JrZmxvd1J1bkNhbmNlbGxlZEVycm9yLFxuICBXb3JrZmxvd1J1bkZhaWxlZEVycm9yLFxuICBXb3JrZmxvd1J1bk5vdENvbXBsZXRlZEVycm9yLFxuICBXb3JrZmxvd1J1bk5vdEZvdW5kRXJyb3IsXG4gIFdvcmtmbG93UnVudGltZUVycm9yLFxuICBXb3JrZmxvd1dvcmxkRXJyb3IsXG59IGZyb20gJ0B3b3JrZmxvdy9lcnJvcnMnO1xuIl19
package/dist/nest.js CHANGED
@@ -1,2 +1,2 @@
1
1
  export * from '@workflow/nest';
2
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmVzdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9uZXN0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGNBQWMsZ0JBQWdCLENBQUMifQ==
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmVzdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9uZXN0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGNBQWMsZ0JBQWdCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgKiBmcm9tICdAd29ya2Zsb3cvbmVzdCc7XG4iXX0=
package/dist/next.cjs CHANGED
@@ -1,6 +1,8 @@
1
1
  "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.withWorkflow = void 0;
2
4
  // The Next.js plugin needs to support CommonJS usage since
3
5
  // `next.config.js` using CommonJS syntax is still common.
4
6
  const nextPlugin = require("@workflow/next");
5
- module.exports = nextPlugin;
6
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmV4dC5janMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvbmV4dC5jdHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLDJEQUEyRDtBQUMzRCwwREFBMEQ7QUFDMUQsNkNBQThDO0FBQzlDLGlCQUFTLFVBQVUsQ0FBQyJ9
7
+ exports.withWorkflow = nextPlugin.withWorkflow;
8
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmV4dC5janMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvbmV4dC5jdHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsMkRBQTJEO0FBQzNELDBEQUEwRDtBQUMxRCw2Q0FBOEM7QUFDakMsUUFBQSxZQUFZLEdBQUcsVUFBVSxDQUFDLFlBQVksQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIFRoZSBOZXh0LmpzIHBsdWdpbiBuZWVkcyB0byBzdXBwb3J0IENvbW1vbkpTIHVzYWdlIHNpbmNlXG4vLyBgbmV4dC5jb25maWcuanNgIHVzaW5nIENvbW1vbkpTIHN5bnRheCBpcyBzdGlsbCBjb21tb24uXG5pbXBvcnQgbmV4dFBsdWdpbiA9IHJlcXVpcmUoJ0B3b3JrZmxvdy9uZXh0Jyk7XG5leHBvcnQgY29uc3Qgd2l0aFdvcmtmbG93ID0gbmV4dFBsdWdpbi53aXRoV29ya2Zsb3c7XG4iXX0=
package/dist/next.d.cts CHANGED
@@ -1,3 +1,3 @@
1
1
  import nextPlugin = require('@workflow/next');
2
- export = nextPlugin;
2
+ export declare const withWorkflow: typeof nextPlugin.withWorkflow;
3
3
  //# sourceMappingURL=next.d.cts.map
@@ -1 +1 @@
1
- {"version":3,"file":"next.d.cts","sourceRoot":"","sources":["../src/next.cts"],"names":[],"mappings":"AAEA,OAAO,UAAU,GAAG,QAAQ,gBAAgB,CAAC,CAAC;AAC9C,SAAS,UAAU,CAAC"}
1
+ {"version":3,"file":"next.d.cts","sourceRoot":"","sources":["../src/next.cts"],"names":[],"mappings":"AAEA,OAAO,UAAU,GAAG,QAAQ,gBAAgB,CAAC,CAAC;AAC9C,eAAO,MAAM,YAAY,gCAA0B,CAAC"}
package/dist/nitro.js CHANGED
@@ -1,4 +1,4 @@
1
1
  import workflowNitro from '@workflow/nitro';
2
2
  export * from '@workflow/nitro';
3
3
  export default workflowNitro;
4
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibml0cm8uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvbml0cm8udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxhQUFhLE1BQU0saUJBQWlCLENBQUM7QUFFNUMsY0FBYyxpQkFBaUIsQ0FBQztBQUNoQyxlQUFlLGFBQWEsQ0FBQyJ9
4
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibml0cm8uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvbml0cm8udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxhQUFhLE1BQU0saUJBQWlCLENBQUM7QUFFNUMsY0FBYyxpQkFBaUIsQ0FBQztBQUNoQyxlQUFlLGFBQWEsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB3b3JrZmxvd05pdHJvIGZyb20gJ0B3b3JrZmxvdy9uaXRybyc7XG5cbmV4cG9ydCAqIGZyb20gJ0B3b3JrZmxvdy9uaXRybyc7XG5leHBvcnQgZGVmYXVsdCB3b3JrZmxvd05pdHJvO1xuIl19
package/dist/nuxt.js CHANGED
@@ -1,4 +1,4 @@
1
1
  import workflowNuxt from '@workflow/nuxt';
2
2
  export * from '@workflow/nuxt';
3
3
  export default workflowNuxt;
4
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibnV4dC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9udXh0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sWUFBWSxNQUFNLGdCQUFnQixDQUFDO0FBRTFDLGNBQWMsZ0JBQWdCLENBQUM7QUFDL0IsZUFBZSxZQUFZLENBQUMifQ==
4
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibnV4dC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9udXh0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sWUFBWSxNQUFNLGdCQUFnQixDQUFDO0FBRTFDLGNBQWMsZ0JBQWdCLENBQUM7QUFDL0IsZUFBZSxZQUFZLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgd29ya2Zsb3dOdXh0IGZyb20gJ0B3b3JrZmxvdy9udXh0JztcblxuZXhwb3J0ICogZnJvbSAnQHdvcmtmbG93L251eHQnO1xuZXhwb3J0IGRlZmF1bHQgd29ya2Zsb3dOdXh0O1xuIl19
@@ -6,10 +6,10 @@
6
6
  *
7
7
  * @example
8
8
  * ```ts
9
- * import { getWorld } from 'workflow/api';
9
+ * import { getWorld } from 'workflow/runtime';
10
10
  * import { hydrateResourceIO, observabilityRevivers } from 'workflow/observability';
11
11
  *
12
- * const world = getWorld();
12
+ * const world = await getWorld();
13
13
  * const step = await world.steps.get(runId, stepId, { resolveData: 'all' });
14
14
  * const hydrated = hydrateResourceIO(step, observabilityRevivers);
15
15
  * // hydrated.input and hydrated.output are now plain JS objects
@@ -6,10 +6,10 @@
6
6
  *
7
7
  * @example
8
8
  * ```ts
9
- * import { getWorld } from 'workflow/api';
9
+ * import { getWorld } from 'workflow/runtime';
10
10
  * import { hydrateResourceIO, observabilityRevivers } from 'workflow/observability';
11
11
  *
12
- * const world = getWorld();
12
+ * const world = await getWorld();
13
13
  * const step = await world.steps.get(runId, stepId, { resolveData: 'all' });
14
14
  * const hydrated = hydrateResourceIO(step, observabilityRevivers);
15
15
  * // hydrated.input and hydrated.output are now plain JS objects
@@ -17,4 +17,4 @@
17
17
  */
18
18
  export { hydrateData, hydrateResourceIO, observabilityRevivers, } from '@workflow/core/serialization-format';
19
19
  export { parseClassName, parseStepName, parseWorkflowName, } from '@workflow/utils';
20
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib2JzZXJ2YWJpbGl0eS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9vYnNlcnZhYmlsaXR5LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7O0dBZ0JHO0FBQ0gsT0FBTyxFQUNMLFdBQVcsRUFDWCxpQkFBaUIsRUFDakIscUJBQXFCLEdBRXRCLE1BQU0scUNBQXFDLENBQUM7QUFFN0MsT0FBTyxFQUNMLGNBQWMsRUFDZCxhQUFhLEVBQ2IsaUJBQWlCLEdBQ2xCLE1BQU0saUJBQWlCLENBQUMifQ==
20
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib2JzZXJ2YWJpbGl0eS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9vYnNlcnZhYmlsaXR5LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7O0dBZ0JHO0FBQ0gsT0FBTyxFQUNMLFdBQVcsRUFDWCxpQkFBaUIsRUFDakIscUJBQXFCLEdBRXRCLE1BQU0scUNBQXFDLENBQUM7QUFFN0MsT0FBTyxFQUNMLGNBQWMsRUFDZCxhQUFhLEVBQ2IsaUJBQWlCLEdBQ2xCLE1BQU0saUJBQWlCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIE9ic2VydmFiaWxpdHkgdXRpbGl0aWVzIGZvciBoeWRyYXRpbmcgc2VyaWFsaXplZCB3b3JrZmxvdyBkYXRhLlxuICpcbiAqIFVzZSB0aGVzZSB3aGVuIGluc3BlY3Rpbmcgd29ya2Zsb3cgc3RlcCBJL08sIHJ1biBpbnB1dHMvb3V0cHV0cyxcbiAqIG9yIGV2ZW50IGRhdGEgZnJvbSB0aGUgV29ya2Zsb3cgU0RLJ3Mgd29ybGQgQVBJcy5cbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHNcbiAqIGltcG9ydCB7IGdldFdvcmxkIH0gZnJvbSAnd29ya2Zsb3cvcnVudGltZSc7XG4gKiBpbXBvcnQgeyBoeWRyYXRlUmVzb3VyY2VJTywgb2JzZXJ2YWJpbGl0eVJldml2ZXJzIH0gZnJvbSAnd29ya2Zsb3cvb2JzZXJ2YWJpbGl0eSc7XG4gKlxuICogY29uc3Qgd29ybGQgPSBhd2FpdCBnZXRXb3JsZCgpO1xuICogY29uc3Qgc3RlcCA9IGF3YWl0IHdvcmxkLnN0ZXBzLmdldChydW5JZCwgc3RlcElkLCB7IHJlc29sdmVEYXRhOiAnYWxsJyB9KTtcbiAqIGNvbnN0IGh5ZHJhdGVkID0gaHlkcmF0ZVJlc291cmNlSU8oc3RlcCwgb2JzZXJ2YWJpbGl0eVJldml2ZXJzKTtcbiAqIC8vIGh5ZHJhdGVkLmlucHV0IGFuZCBoeWRyYXRlZC5vdXRwdXQgYXJlIG5vdyBwbGFpbiBKUyBvYmplY3RzXG4gKiBgYGBcbiAqL1xuZXhwb3J0IHtcbiAgaHlkcmF0ZURhdGEsXG4gIGh5ZHJhdGVSZXNvdXJjZUlPLFxuICBvYnNlcnZhYmlsaXR5UmV2aXZlcnMsXG4gIHR5cGUgUmV2aXZlcnMsXG59IGZyb20gJ0B3b3JrZmxvdy9jb3JlL3NlcmlhbGl6YXRpb24tZm9ybWF0JztcblxuZXhwb3J0IHtcbiAgcGFyc2VDbGFzc05hbWUsXG4gIHBhcnNlU3RlcE5hbWUsXG4gIHBhcnNlV29ya2Zsb3dOYW1lLFxufSBmcm9tICdAd29ya2Zsb3cvdXRpbHMnO1xuIl19
package/dist/runtime.d.ts CHANGED
@@ -1,2 +1,2 @@
1
- export { createWorld, getWorld, getWorldHandlers, healthCheck, type HealthCheckEndpoint, type HealthCheckOptions, type HealthCheckResult, setWorld, stepEntrypoint, workflowEntrypoint, } from '@workflow/core/runtime';
1
+ export { createWorld, getWorld, getWorldHandlers, healthCheck, type HealthCheckEndpoint, type HealthCheckOptions, type HealthCheckResult, setWorld, workflowEntrypoint, } from '@workflow/core/runtime';
2
2
  //# sourceMappingURL=runtime.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"runtime.d.ts","sourceRoot":"","sources":["../src/runtime.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,WAAW,EACX,QAAQ,EACR,gBAAgB,EAChB,WAAW,EACX,KAAK,mBAAmB,EACxB,KAAK,kBAAkB,EACvB,KAAK,iBAAiB,EACtB,QAAQ,EACR,cAAc,EACd,kBAAkB,GACnB,MAAM,wBAAwB,CAAC"}
1
+ {"version":3,"file":"runtime.d.ts","sourceRoot":"","sources":["../src/runtime.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,WAAW,EACX,QAAQ,EACR,gBAAgB,EAChB,WAAW,EACX,KAAK,mBAAmB,EACxB,KAAK,kBAAkB,EACvB,KAAK,iBAAiB,EACtB,QAAQ,EACR,kBAAkB,GACnB,MAAM,wBAAwB,CAAC"}
package/dist/runtime.js CHANGED
@@ -1,2 +1,2 @@
1
- export { createWorld, getWorld, getWorldHandlers, healthCheck, setWorld, stepEntrypoint, workflowEntrypoint, } from '@workflow/core/runtime';
2
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicnVudGltZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9ydW50aW1lLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCxXQUFXLEVBQ1gsUUFBUSxFQUNSLGdCQUFnQixFQUNoQixXQUFXLEVBSVgsUUFBUSxFQUNSLGNBQWMsRUFDZCxrQkFBa0IsR0FDbkIsTUFBTSx3QkFBd0IsQ0FBQyJ9
1
+ export { createWorld, getWorld, getWorldHandlers, healthCheck, setWorld, workflowEntrypoint, } from '@workflow/core/runtime';
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicnVudGltZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9ydW50aW1lLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCxXQUFXLEVBQ1gsUUFBUSxFQUNSLGdCQUFnQixFQUNoQixXQUFXLEVBSVgsUUFBUSxFQUNSLGtCQUFrQixHQUNuQixNQUFNLHdCQUF3QixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IHtcbiAgY3JlYXRlV29ybGQsXG4gIGdldFdvcmxkLFxuICBnZXRXb3JsZEhhbmRsZXJzLFxuICBoZWFsdGhDaGVjayxcbiAgdHlwZSBIZWFsdGhDaGVja0VuZHBvaW50LFxuICB0eXBlIEhlYWx0aENoZWNrT3B0aW9ucyxcbiAgdHlwZSBIZWFsdGhDaGVja1Jlc3VsdCxcbiAgc2V0V29ybGQsXG4gIHdvcmtmbG93RW50cnlwb2ludCxcbn0gZnJvbSAnQHdvcmtmbG93L2NvcmUvcnVudGltZSc7XG4iXX0=
package/dist/stdlib.js CHANGED
@@ -14,4 +14,4 @@ export async function fetch(...args) {
14
14
  'use step';
15
15
  return globalThis.fetch(...args);
16
16
  }
17
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RkbGliLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL3N0ZGxpYi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7R0FLRztBQUVIOzs7OztHQUtHO0FBQ0gsTUFBTSxDQUFDLEtBQUssVUFBVSxLQUFLLENBQUMsR0FBRyxJQUF5QztJQUN0RSxVQUFVLENBQUM7SUFDWCxPQUFPLFVBQVUsQ0FBQyxLQUFLLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQztBQUNuQyxDQUFDIn0=
17
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RkbGliLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL3N0ZGxpYi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7R0FLRztBQUVIOzs7OztHQUtHO0FBQ0gsTUFBTSxDQUFDLEtBQUssVUFBVSxLQUFLLENBQUMsR0FBRyxJQUF5QztJQUN0RSxVQUFVLENBQUM7SUFDWCxPQUFPLFVBQVUsQ0FBQyxLQUFLLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQztBQUNuQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBUaGlzIGlzIHRoZSBcInN0YW5kYXJkIGxpYnJhcnlcIiBvZiBzdGVwcyB0aGF0IHdlIG1ha2UgYXZhaWxhYmxlIHRvIGFsbCB3b3JrZmxvdyB1c2Vycy5cbiAqIFRoZSBjYW4gYmUgaW1wb3J0ZWQgbGlrZSBzbzogYGltcG9ydCB7IGZldGNoIH0gZnJvbSAnd29ya2Zsb3cnYC4gYW5kIHVzZWQgaW4gd29ya2Zsb3cuXG4gKiBUaGUgbmVlZCB0byBiZSBleHBvcnRlZCBkaXJlY3RseSBpbiB0aGlzIHBhY2thZ2UgYW5kIGNhbm5vdCBsaXZlIGluIGBjb3JlYCB0byBwcmV2ZW50XG4gKiBjaXJjdWxhciBkZXBlbmRlbmNpZXMgcG9zdC1jb21waWxhdGlvbi5cbiAqL1xuXG4vKipcbiAqIEEgaG9pc3RlZCBgZmV0Y2goKWAgZnVuY3Rpb24gdGhhdCBpcyBleGVjdXRlZCBhcyBhIFwic3RlcFwiIGZ1bmN0aW9uLFxuICogZm9yIHVzZSB3aXRoaW4gd29ya2Zsb3cgZnVuY3Rpb25zLlxuICpcbiAqIEBzZWUgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL0ZldGNoX0FQSVxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZmV0Y2goLi4uYXJnczogUGFyYW1ldGVyczx0eXBlb2YgZ2xvYmFsVGhpcy5mZXRjaD4pIHtcbiAgJ3VzZSBzdGVwJztcbiAgcmV0dXJuIGdsb2JhbFRoaXMuZmV0Y2goLi4uYXJncyk7XG59XG4iXX0=
package/dist/sveltekit.js CHANGED
@@ -1,2 +1,2 @@
1
1
  export * from '@workflow/sveltekit';
2
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3ZlbHRla2l0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL3N2ZWx0ZWtpdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxjQUFjLHFCQUFxQixDQUFDIn0=
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3ZlbHRla2l0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL3N2ZWx0ZWtpdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxjQUFjLHFCQUFxQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0ICogZnJvbSAnQHdvcmtmbG93L3N2ZWx0ZWtpdCc7XG4iXX0=
@@ -3,4 +3,4 @@
3
3
  // so we need to export the plugin as a CommonJS module
4
4
  const typescriptPlugin = require("@workflow/typescript-plugin");
5
5
  module.exports = typescriptPlugin;
6
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXNjcmlwdC1wbHVnaW4uY2pzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL3R5cGVzY3JpcHQtcGx1Z2luLmN0cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsZ0VBQWdFO0FBQ2hFLHVEQUF1RDtBQUN2RCxnRUFBaUU7QUFDakUsaUJBQVMsZ0JBQWdCLENBQUMifQ==
6
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXNjcmlwdC1wbHVnaW4uY2pzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL3R5cGVzY3JpcHQtcGx1Z2luLmN0cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsZ0VBQWdFO0FBQ2hFLHVEQUF1RDtBQUN2RCxnRUFBaUU7QUFDakUsaUJBQVMsZ0JBQWdCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBUeXBlU2NyaXB0IHNlcnZlciBkb2VzIGByZXF1aXJlKHBsdWdpbk5hbWUpYCB0byBsb2FkIHBsdWdpbnMsXG4vLyBzbyB3ZSBuZWVkIHRvIGV4cG9ydCB0aGUgcGx1Z2luIGFzIGEgQ29tbW9uSlMgbW9kdWxlXG5pbXBvcnQgdHlwZXNjcmlwdFBsdWdpbiA9IHJlcXVpcmUoJ0B3b3JrZmxvdy90eXBlc2NyaXB0LXBsdWdpbicpO1xuZXhwb3J0ID0gdHlwZXNjcmlwdFBsdWdpbjtcbiJdfQ==
package/dist/vite.js CHANGED
@@ -1,2 +1,2 @@
1
1
  export { workflow } from '@workflow/nitro/vite';
2
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidml0ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy92aXRlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQyJ9
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidml0ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy92aXRlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCB7IHdvcmtmbG93IH0gZnJvbSAnQHdvcmtmbG93L25pdHJvL3ZpdGUnO1xuIl19
package/dist/workflow.js CHANGED
@@ -1,3 +1,3 @@
1
1
  export * from '@workflow/core/_workflow';
2
2
  export * from './stdlib.js';
3
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid29ya2Zsb3cuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvd29ya2Zsb3cudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYywwQkFBMEIsQ0FBQztBQUN6QyxjQUFjLGFBQWEsQ0FBQyJ9
3
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid29ya2Zsb3cuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvd29ya2Zsb3cudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYywwQkFBMEIsQ0FBQztBQUN6QyxjQUFjLGFBQWEsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gJ0B3b3JrZmxvdy9jb3JlL193b3JrZmxvdyc7XG5leHBvcnQgKiBmcm9tICcuL3N0ZGxpYi5qcyc7XG4iXX0=
package/docs/ai/index.mdx CHANGED
@@ -120,16 +120,17 @@ The core code that makes all of this happen is quite simple. Here's a breakdown
120
120
 
121
121
  <Tab value="API Route">
122
122
 
123
- Our API route makes a simple call to [AI SDK's `Agent` class](https://ai-sdk.dev/docs/agents/overview), which is a simple wrapper around [AI SDK's `streamText` function](https://ai-sdk.dev/docs/reference/ai-sdk-core/stream-text#streamtext). This is also where we pass tools to the agent.
123
+ Our API route makes a simple call to [AI SDK's `ToolLoopAgent` class](https://ai-sdk.dev/docs/agents/overview), which encapsulates the LLM call, tool execution loop, and stopping conditions on top of [AI SDK's `streamText` function](https://ai-sdk.dev/docs/reference/ai-sdk-core/stream-text#streamtext). This is also where we pass tools to the agent.
124
124
 
125
125
  ```typescript title="app/api/chat/route.ts" lineNumbers
126
- import { Experimental_Agent as Agent } from "ai";
127
- import type { LanguageModel } from "ai";
126
+ import { ToolLoopAgent } from "ai";
127
+ import type { UIMessage } from "ai";
128
+ import { convertToModelMessages, createUIMessageStreamResponse } from "ai";
128
129
 
129
130
  export async function POST(req: Request) {
130
131
  const { messages }: { messages: UIMessage[] } = await req.json();
131
- const agent = new Agent({ // [!code highlight]
132
- model: gateway("bedrock/claude-4-5-haiku-20251001-v1"),
132
+ const agent = new ToolLoopAgent({ // [!code highlight]
133
+ model: "bedrock/claude-4-5-haiku-20251001-v1",
133
134
  instructions: FLIGHT_ASSISTANT_PROMPT,
134
135
  tools: flightBookingTools,
135
136
  });
@@ -43,7 +43,7 @@ export async function POST(req: Request) {
43
43
 
44
44
  return createUIMessageStreamResponse({
45
45
  stream: run.readable,
46
- headers: { // [!code highlight
46
+ headers: { // [!code highlight]
47
47
  "x-workflow-run-id": run.runId, // [!code highlight]
48
48
  }, // [!code highlight]
49
49
  });
@@ -22,6 +22,30 @@ export default defineConfig({
22
22
  });
23
23
  ```
24
24
 
25
+ Pass a [`WorkflowTestOptions`](#workflowtestoptions) object when your project uses a non-standard layout — for example, a monorepo where `workflows/` does not live at the Vitest config's directory, or when the default `.workflow-data` / `.workflow-vitest` output locations need to move. The plugin forwards these paths to `buildWorkflowTests()` and `setupWorkflowTests()` through Vitest's per-project provided context, so each Vitest workspace project stays isolated.
26
+
27
+ {/* @skip-typecheck - @workflow/vitest not available in docs-typecheck */}
28
+
29
+ ```typescript
30
+ import { defineConfig } from "vitest/config";
31
+ import { workflow } from "@workflow/vitest";
32
+
33
+ export default defineConfig({
34
+ plugins: [
35
+ workflow({
36
+ cwd: "./apps/api",
37
+ rootDir: "./apps/api/test-artifacts",
38
+ }),
39
+ ],
40
+ });
41
+ ```
42
+
43
+ **Parameters:**
44
+
45
+ | Parameter | Type | Description |
46
+ | --- | --- | --- |
47
+ | `options?` | `WorkflowTestOptions` | Optional configuration |
48
+
25
49
  **Returns:** `Plugin[]`
26
50
 
27
51
  ## Setup Functions
@@ -83,7 +107,10 @@ Tears down the workflow test world. Clears the global world and closes the Local
83
107
 
84
108
  | Option | Type | Default | Description |
85
109
  | --- | --- | --- | --- |
86
- | `cwd` | `string` | `process.cwd()` | The working directory of the project (where `workflows/` lives) |
110
+ | `cwd` | `string` | `process.cwd()` | The working directory of the project (where `workflows/` lives). Relative paths resolve against `process.cwd()`. |
111
+ | `rootDir` | `string` | same as `cwd` | Root directory used for default test artifacts. When set, `dataDir` and `outDir` default to `<rootDir>/.workflow-data` and `<rootDir>/.workflow-vitest`. Relative paths resolve against `cwd`. |
112
+ | `dataDir` | `string` | `<rootDir>/.workflow-data` | Directory for workflow runtime data written by the test world. Relative paths resolve against `cwd`. |
113
+ | `outDir` | `string` | `<rootDir>/.workflow-vitest` | Directory for generated workflow and step bundles. Relative paths resolve against `cwd`. |
87
114
 
88
115
  ## Test Helpers
89
116
 
@@ -55,9 +55,25 @@ The returned `Webhook` object has:
55
55
 
56
56
  - `url`: The HTTP endpoint URL that external systems can call
57
57
  - `token`: The unique token identifying this webhook
58
- - Implements `AsyncIterable<RequestWithResponse>` for handling multiple requests
58
+ - Implements `AsyncIterable<T>` for handling multiple requests, where `T` is `Request` (default) or `RequestWithResponse` (manual mode)
59
59
 
60
- The `RequestWithResponse` type extends the standard `Request` interface with a `respondWith(response: Response)` method for sending custom responses back to the caller.
60
+ When using `createWebhook({ respondWith: 'manual' })`, the resolved request type is `RequestWithResponse`, which extends the standard `Request` interface with a `respondWith(response: Response): Promise<void>` method for sending custom responses back to the caller.
61
+
62
+ <Callout type="info">
63
+ Use the simplest option that satisfies the prompt:
64
+
65
+ - `createWebhook()` — generated callback URL, and the default `202 Accepted` response is fine
66
+ - `createWebhook({ respondWith: 'manual' })` — generated callback URL, but you must send a custom body, status, or headers
67
+ - `createHook()` + `resumeHook()` — the app resumes from server-side code with a deterministic business token instead of a generated callback URL
68
+ </Callout>
69
+
70
+ <details>
71
+ <summary>Common wrong turns</summary>
72
+
73
+ - Do not use `respondWith: 'manual'` just because the flow has a callback URL.
74
+ - Do not use `RequestWithResponse` unless you chose manual mode.
75
+ - Do not invent a custom callback route when `webhook.url` is the intended callback surface.
76
+ </details>
61
77
 
62
78
  ## Examples
63
79
 
@@ -84,27 +100,29 @@ export async function basicWebhookWorkflow() {
84
100
  }
85
101
  ```
86
102
 
87
- ### Responding to Webhook Requests
103
+ ### Responding to Webhook Requests (Manual Mode)
104
+
105
+ Use this section only when the caller requires a non-default HTTP response. If `202 Accepted` is acceptable, use `createWebhook()` without `respondWith: "manual"`.
88
106
 
89
- Use the `respondWith()` method to send custom HTTP responses. Note that `respondWith()` must be called from within a step function:
107
+ Pass `{ respondWith: "manual" }` to get a `RequestWithResponse` object with a `respondWith()` method. Note that `respondWith()` must be called from within a step function:
90
108
 
91
109
  ```typescript lineNumbers
92
110
  import { createWebhook, type RequestWithResponse } from "workflow"
93
111
 
94
- async function sendResponse(request: RequestWithResponse) { // [!code highlight]
95
- "use step"; // [!code highlight]
96
- await request.respondWith( // [!code highlight]
97
- new Response(JSON.stringify({ success: true, message: "Received!" }), { // [!code highlight]
98
- status: 200, // [!code highlight]
99
- headers: { "Content-Type": "application/json" } // [!code highlight]
100
- }) // [!code highlight]
101
- ); // [!code highlight]
102
- } // [!code highlight]
112
+ async function sendResponse(request: RequestWithResponse): Promise<void> {
113
+ "use step";
114
+ await request.respondWith(
115
+ new Response(JSON.stringify({ success: true, message: "Received!" }), {
116
+ status: 200,
117
+ headers: { "Content-Type": "application/json" }
118
+ })
119
+ );
120
+ }
103
121
 
104
122
  export async function respondingWebhookWorkflow() {
105
123
  "use workflow";
106
124
 
107
- using webhook = createWebhook();
125
+ using webhook = createWebhook({ respondWith: "manual" });
108
126
  console.log("Webhook URL:", webhook.url);
109
127
 
110
128
  const request = await webhook;
@@ -117,7 +135,7 @@ export async function respondingWebhookWorkflow() {
117
135
  await processData(data);
118
136
  }
119
137
 
120
- async function processData(data: any) {
138
+ async function processData(data: any): Promise<void> {
121
139
  "use step";
122
140
  // Process the webhook data
123
141
  console.log("Processing:", data);
@@ -165,6 +183,7 @@ export async function eventCollectorWorkflow() {
165
183
 
166
184
  ## Related Functions
167
185
 
168
- - [`createHook()`](/docs/api-reference/workflow/create-hook) - Lower-level hook primitive for arbitrary payloads
169
- - [`defineHook()`](/docs/api-reference/workflow/define-hook) - Type-safe hook helper
170
- - [`resumeWebhook()`](/docs/api-reference/workflow-api/resume-webhook) - Resume a webhook from an API route
186
+ - [`createHook()`](/docs/api-reference/workflow/create-hook) Use when the app resumes from server-side code with a deterministic business token.
187
+ - [`resumeHook()`](/docs/api-reference/workflow-api/resume-hook) Pairs with `createHook()` for deterministic server-side resume.
188
+ - [`defineHook()`](/docs/api-reference/workflow/define-hook) — Type-safe hook helper.
189
+ - [`resumeWebhook()`](/docs/api-reference/workflow-api/resume-webhook) — Low-level runtime API. Most integrations should call `webhook.url` directly instead of adding a custom callback route.