ai-workflows 2.1.1 → 2.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (211) hide show
  1. package/.turbo/turbo-build.log +1 -1
  2. package/CHANGELOG.md +17 -1
  3. package/README.md +305 -184
  4. package/dist/barrier.d.ts +159 -0
  5. package/dist/barrier.d.ts.map +1 -0
  6. package/dist/barrier.js +377 -0
  7. package/dist/barrier.js.map +1 -0
  8. package/dist/cascade-context.d.ts +149 -0
  9. package/dist/cascade-context.d.ts.map +1 -0
  10. package/dist/cascade-context.js +324 -0
  11. package/dist/cascade-context.js.map +1 -0
  12. package/dist/cascade-executor.d.ts +196 -0
  13. package/dist/cascade-executor.d.ts.map +1 -0
  14. package/dist/cascade-executor.js +384 -0
  15. package/dist/cascade-executor.js.map +1 -0
  16. package/dist/context.d.ts.map +1 -1
  17. package/dist/context.js +27 -8
  18. package/dist/context.js.map +1 -1
  19. package/dist/cron-parser.d.ts +65 -0
  20. package/dist/cron-parser.d.ts.map +1 -0
  21. package/dist/cron-parser.js +294 -0
  22. package/dist/cron-parser.js.map +1 -0
  23. package/dist/cron-scheduler.d.ts +117 -0
  24. package/dist/cron-scheduler.d.ts.map +1 -0
  25. package/dist/cron-scheduler.js +176 -0
  26. package/dist/cron-scheduler.js.map +1 -0
  27. package/dist/database-context.d.ts +184 -0
  28. package/dist/database-context.d.ts.map +1 -0
  29. package/dist/database-context.js +428 -0
  30. package/dist/database-context.js.map +1 -0
  31. package/dist/dependency-graph.d.ts +157 -0
  32. package/dist/dependency-graph.d.ts.map +1 -0
  33. package/dist/dependency-graph.js +382 -0
  34. package/dist/dependency-graph.js.map +1 -0
  35. package/dist/digital-objects-adapter.d.ts +159 -0
  36. package/dist/digital-objects-adapter.d.ts.map +1 -0
  37. package/dist/digital-objects-adapter.js +229 -0
  38. package/dist/digital-objects-adapter.js.map +1 -0
  39. package/dist/durable-execution-cloudflare.d.ts +427 -0
  40. package/dist/durable-execution-cloudflare.d.ts.map +1 -0
  41. package/dist/durable-execution-cloudflare.js +510 -0
  42. package/dist/durable-execution-cloudflare.js.map +1 -0
  43. package/dist/durable-execution.d.ts +482 -0
  44. package/dist/durable-execution.d.ts.map +1 -0
  45. package/dist/durable-execution.js +594 -0
  46. package/dist/durable-execution.js.map +1 -0
  47. package/dist/durable-workflow.d.ts +176 -0
  48. package/dist/durable-workflow.d.ts.map +1 -0
  49. package/dist/durable-workflow.js +552 -0
  50. package/dist/durable-workflow.js.map +1 -0
  51. package/dist/every.d.ts +31 -2
  52. package/dist/every.d.ts.map +1 -1
  53. package/dist/every.js +63 -32
  54. package/dist/every.js.map +1 -1
  55. package/dist/graph/index.d.ts +8 -0
  56. package/dist/graph/index.d.ts.map +1 -0
  57. package/dist/graph/index.js +8 -0
  58. package/dist/graph/index.js.map +1 -0
  59. package/dist/graph/topological-sort.d.ts +121 -0
  60. package/dist/graph/topological-sort.d.ts.map +1 -0
  61. package/dist/graph/topological-sort.js +292 -0
  62. package/dist/graph/topological-sort.js.map +1 -0
  63. package/dist/index.d.ts +10 -1
  64. package/dist/index.d.ts.map +1 -1
  65. package/dist/index.js +25 -0
  66. package/dist/index.js.map +1 -1
  67. package/dist/logger.d.ts +101 -0
  68. package/dist/logger.d.ts.map +1 -0
  69. package/dist/logger.js +115 -0
  70. package/dist/logger.js.map +1 -0
  71. package/dist/on.d.ts +35 -10
  72. package/dist/on.d.ts.map +1 -1
  73. package/dist/on.js +53 -19
  74. package/dist/on.js.map +1 -1
  75. package/dist/runtime.d.ts +169 -0
  76. package/dist/runtime.d.ts.map +1 -0
  77. package/dist/runtime.js +275 -0
  78. package/dist/runtime.js.map +1 -0
  79. package/dist/send.d.ts.map +1 -1
  80. package/dist/send.js +4 -3
  81. package/dist/send.js.map +1 -1
  82. package/dist/telemetry.d.ts +150 -0
  83. package/dist/telemetry.d.ts.map +1 -0
  84. package/dist/telemetry.js +388 -0
  85. package/dist/telemetry.js.map +1 -0
  86. package/dist/timer-registry.d.ts +77 -0
  87. package/dist/timer-registry.d.ts.map +1 -0
  88. package/dist/timer-registry.js +154 -0
  89. package/dist/timer-registry.js.map +1 -0
  90. package/dist/types.d.ts +105 -6
  91. package/dist/types.d.ts.map +1 -1
  92. package/dist/types.js +17 -1
  93. package/dist/types.js.map +1 -1
  94. package/dist/worker/durable-step.d.ts +481 -0
  95. package/dist/worker/durable-step.d.ts.map +1 -0
  96. package/dist/worker/durable-step.js +606 -0
  97. package/dist/worker/durable-step.js.map +1 -0
  98. package/dist/worker/index.d.ts +106 -0
  99. package/dist/worker/index.d.ts.map +1 -0
  100. package/dist/worker/index.js +124 -0
  101. package/dist/worker/index.js.map +1 -0
  102. package/dist/worker/state-adapter.d.ts +230 -0
  103. package/dist/worker/state-adapter.d.ts.map +1 -0
  104. package/dist/worker/state-adapter.js +409 -0
  105. package/dist/worker/state-adapter.js.map +1 -0
  106. package/dist/worker/topological-executor.d.ts +282 -0
  107. package/dist/worker/topological-executor.d.ts.map +1 -0
  108. package/dist/worker/topological-executor.js +396 -0
  109. package/dist/worker/topological-executor.js.map +1 -0
  110. package/dist/worker/workflow-builder.d.ts +286 -0
  111. package/dist/worker/workflow-builder.d.ts.map +1 -0
  112. package/dist/worker/workflow-builder.js +565 -0
  113. package/dist/worker/workflow-builder.js.map +1 -0
  114. package/dist/worker.d.ts +800 -0
  115. package/dist/worker.d.ts.map +1 -0
  116. package/dist/worker.js +2428 -0
  117. package/dist/worker.js.map +1 -0
  118. package/dist/workflow-builder.d.ts +287 -0
  119. package/dist/workflow-builder.d.ts.map +1 -0
  120. package/dist/workflow-builder.js +762 -0
  121. package/dist/workflow-builder.js.map +1 -0
  122. package/dist/workflow.d.ts +14 -30
  123. package/dist/workflow.d.ts.map +1 -1
  124. package/dist/workflow.js +136 -292
  125. package/dist/workflow.js.map +1 -1
  126. package/examples/01-ecommerce-order-pipeline.ts +358 -0
  127. package/examples/02-content-moderation-cascade.ts +454 -0
  128. package/examples/03-scheduled-reporting-dependencies.ts +479 -0
  129. package/examples/04-database-persistence.ts +518 -0
  130. package/examples/README.md +173 -0
  131. package/package.json +21 -4
  132. package/src/__tests__/digital-objects-adapter.test.ts +274 -0
  133. package/src/__tests__/durable-workflow.test.ts +297 -0
  134. package/src/barrier.ts +507 -0
  135. package/src/cascade-context.ts +495 -0
  136. package/src/cascade-executor.ts +588 -0
  137. package/src/context.ts +51 -17
  138. package/src/cron-parser.ts +347 -0
  139. package/src/cron-scheduler.ts +239 -0
  140. package/src/database-context.ts +658 -0
  141. package/src/dependency-graph.ts +518 -0
  142. package/src/digital-objects-adapter.ts +351 -0
  143. package/src/durable-execution-cloudflare.ts +855 -0
  144. package/src/durable-execution.ts +1042 -0
  145. package/src/durable-workflow.ts +717 -0
  146. package/src/every.ts +104 -35
  147. package/src/graph/index.ts +19 -0
  148. package/src/graph/topological-sort.ts +412 -0
  149. package/src/index.ts +147 -0
  150. package/src/logger.ts +148 -0
  151. package/src/on.ts +81 -26
  152. package/src/runtime.ts +436 -0
  153. package/src/send.ts +4 -5
  154. package/src/telemetry.ts +577 -0
  155. package/src/timer-registry.ts +179 -0
  156. package/src/types.ts +146 -10
  157. package/src/worker/durable-step.ts +976 -0
  158. package/src/worker/index.ts +216 -0
  159. package/src/worker/state-adapter.ts +589 -0
  160. package/src/worker/topological-executor.ts +625 -0
  161. package/src/worker/workflow-builder.ts +871 -0
  162. package/src/worker.ts +2906 -0
  163. package/src/workflow-builder.ts +1068 -0
  164. package/src/workflow.ts +199 -355
  165. package/test/barrier-join.test.ts +442 -0
  166. package/test/barrier-unhandled-rejections.test.ts +359 -0
  167. package/test/cascade-context.test.ts +390 -0
  168. package/test/cascade-executor.test.ts +852 -0
  169. package/test/cron-parser.test.ts +314 -0
  170. package/test/cron-scheduler.test.ts +291 -0
  171. package/test/database-context.test.ts +770 -0
  172. package/test/db-provider-adapter.test.ts +862 -0
  173. package/test/dependency-graph.test.ts +512 -0
  174. package/test/durable-execution-cloudflare.test.ts +606 -0
  175. package/test/durable-execution-in-process.test.ts +286 -0
  176. package/test/durable-execution.test.ts +247 -0
  177. package/test/e2e/workflow-scenarios.e2e.test.ts +1039 -0
  178. package/test/graph/topological-sort.test.ts +586 -0
  179. package/test/integration.test.ts +442 -0
  180. package/test/rpc-surface.test.ts +946 -0
  181. package/test/runtime.test.ts +262 -0
  182. package/test/schedule-timer-cleanup.test.ts +353 -0
  183. package/test/send-race-conditions.test.ts +400 -0
  184. package/test/type-safety-every.test.ts +303 -0
  185. package/test/worker/durable-cascade.test.ts +1117 -0
  186. package/test/worker/durable-step.test.ts +723 -0
  187. package/test/worker/topological-executor.test.ts +1240 -0
  188. package/test/worker/workflow-builder.test.ts +1067 -0
  189. package/test/worker.test.ts +608 -0
  190. package/test/workflow-builder.test.ts +1670 -0
  191. package/test/workflow-cron.test.ts +256 -0
  192. package/test/workflow-state-adapter.test.ts +923 -0
  193. package/test/workflow.test.ts +25 -22
  194. package/tsconfig.json +3 -1
  195. package/vitest.config.ts +38 -1
  196. package/vitest.workers.config.ts +44 -0
  197. package/wrangler.jsonc +22 -0
  198. package/.turbo/turbo-test.log +0 -7
  199. package/src/context.js +0 -83
  200. package/src/every.js +0 -267
  201. package/src/index.js +0 -71
  202. package/src/on.js +0 -79
  203. package/src/send.js +0 -111
  204. package/src/types.js +0 -4
  205. package/src/workflow.js +0 -455
  206. package/test/context.test.js +0 -116
  207. package/test/every.test.js +0 -282
  208. package/test/on.test.js +0 -80
  209. package/test/send.test.js +0 -89
  210. package/test/workflow.test.js +0 -224
  211. package/vitest.config.js +0 -7
@@ -0,0 +1,176 @@
1
+ /**
2
+ * DurableWorkflow - Persistent workflow implementation using digital-objects
3
+ *
4
+ * Provides durable, recoverable workflows with:
5
+ * - Workflow state stored as Things
6
+ * - History and events stored as Actions
7
+ * - Automatic state recovery on restart
8
+ * - Graph-based dependency tracking
9
+ *
10
+ * @example
11
+ * ```typescript
12
+ * import { createMemoryProvider } from 'digital-objects'
13
+ * import { DurableWorkflow } from 'ai-workflows'
14
+ *
15
+ * const provider = createMemoryProvider()
16
+ * const workflow = new DurableWorkflow(provider)
17
+ *
18
+ * await workflow.initialize('my-workflow', $ => {
19
+ * $.on.Order.created(async (order, $) => {
20
+ * await $.send('Invoice.generate', { orderId: order.id })
21
+ * })
22
+ * })
23
+ *
24
+ * await workflow.start()
25
+ * await workflow.send('Order.created', { id: 'order-1', total: 100 })
26
+ * ```
27
+ *
28
+ * @packageDocumentation
29
+ */
30
+ import type { DigitalObjectsProvider } from 'digital-objects';
31
+ import type { WorkflowContext, WorkflowState } from './types.js';
32
+ import { type WorkflowThingData } from './digital-objects-adapter.js';
33
+ /**
34
+ * Durable workflow state stored in digital-objects
35
+ */
36
+ export interface DurableWorkflowState extends WorkflowThingData {
37
+ version: number;
38
+ createdAt: number;
39
+ updatedAt: number;
40
+ }
41
+ /**
42
+ * History entry stored as an Action
43
+ */
44
+ export interface DurableHistoryEntry {
45
+ type: 'event' | 'schedule' | 'transition' | 'action';
46
+ name: string;
47
+ data?: unknown;
48
+ }
49
+ /**
50
+ * Options for DurableWorkflow
51
+ */
52
+ export interface DurableWorkflowOptions {
53
+ /**
54
+ * Existing workflow instance ID to restore
55
+ */
56
+ instanceId?: string;
57
+ /**
58
+ * Auto-persist state changes immediately
59
+ * @default true
60
+ */
61
+ autoPersist?: boolean;
62
+ /**
63
+ * Initial context data
64
+ */
65
+ context?: Record<string, unknown>;
66
+ }
67
+ /**
68
+ * DurableWorkflow - A workflow implementation with persistent state
69
+ *
70
+ * Uses digital-objects as the backing store:
71
+ * - Workflow instance stored as a Thing
72
+ * - Events and history stored as Actions
73
+ * - State changes create audit trail
74
+ */
75
+ export declare class DurableWorkflow {
76
+ private provider;
77
+ private db;
78
+ private instanceId;
79
+ private autoPersist;
80
+ private initialized;
81
+ private eventRegistry;
82
+ private scheduleRegistry;
83
+ private state;
84
+ private scheduleTimers;
85
+ private $;
86
+ /**
87
+ * Create a new DurableWorkflow
88
+ *
89
+ * @param provider - The digital-objects provider (MemoryProvider, NS, etc.)
90
+ * @param options - Configuration options
91
+ */
92
+ constructor(provider: DigitalObjectsProvider, options?: DurableWorkflowOptions);
93
+ /**
94
+ * Get the workflow instance ID
95
+ */
96
+ get id(): string;
97
+ /**
98
+ * Get the current workflow state
99
+ */
100
+ getState(): WorkflowState;
101
+ /**
102
+ * Initialize the workflow
103
+ *
104
+ * Creates or restores the workflow instance and runs the setup function
105
+ * to register event and schedule handlers.
106
+ *
107
+ * @param name - Workflow name for identification
108
+ * @param setup - Setup function that registers handlers using $
109
+ */
110
+ initialize(name: string, setup: ($: WorkflowContext) => void): Promise<void>;
111
+ /**
112
+ * Start the workflow (begin processing schedules)
113
+ */
114
+ start(): Promise<void>;
115
+ /**
116
+ * Stop the workflow
117
+ */
118
+ stop(): Promise<void>;
119
+ /**
120
+ * Send an event to the workflow
121
+ */
122
+ send<T = unknown>(event: string, data: T): Promise<string>;
123
+ /**
124
+ * Destroy the workflow and clean up all resources
125
+ */
126
+ destroy(): Promise<void>;
127
+ /**
128
+ * Get the number of active timers
129
+ */
130
+ get timerCount(): number;
131
+ /**
132
+ * Get timer IDs for this workflow
133
+ */
134
+ getTimerIds(): string[];
135
+ /**
136
+ * Create the $ context
137
+ */
138
+ private createContext;
139
+ /**
140
+ * Create the $.on proxy
141
+ */
142
+ private createOnProxy;
143
+ /**
144
+ * Create the $.every proxy
145
+ */
146
+ private createEveryProxy;
147
+ /**
148
+ * Add history entry (persisted as Action)
149
+ */
150
+ private addHistory;
151
+ /**
152
+ * Persist current state to digital-objects
153
+ */
154
+ private persistState;
155
+ /**
156
+ * Deliver an event to matching handlers
157
+ */
158
+ private deliverEvent;
159
+ /**
160
+ * Execute an event and wait for result
161
+ */
162
+ private executeEvent;
163
+ /**
164
+ * Clean up timers
165
+ */
166
+ private cleanup;
167
+ }
168
+ /**
169
+ * Factory function to create a DurableWorkflow
170
+ *
171
+ * @param provider - The digital-objects provider
172
+ * @param options - Configuration options
173
+ * @returns A new DurableWorkflow instance
174
+ */
175
+ export declare function createDurableWorkflow(provider: DigitalObjectsProvider, options?: DurableWorkflowOptions): DurableWorkflow;
176
+ //# sourceMappingURL=durable-workflow.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"durable-workflow.d.ts","sourceRoot":"","sources":["../src/durable-workflow.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AAEH,OAAO,KAAK,EAAE,sBAAsB,EAAiB,MAAM,iBAAiB,CAAA;AAC5E,OAAO,KAAK,EACV,eAAe,EACf,aAAa,EAWd,MAAM,YAAY,CAAA;AAEnB,OAAO,EAEL,KAAK,iBAAiB,EAEvB,MAAM,8BAA8B,CAAA;AAoErC;;GAEG;AACH,MAAM,WAAW,oBAAqB,SAAQ,iBAAiB;IAC7D,OAAO,EAAE,MAAM,CAAA;IACf,SAAS,EAAE,MAAM,CAAA;IACjB,SAAS,EAAE,MAAM,CAAA;CAClB;AAED;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC,IAAI,EAAE,OAAO,GAAG,UAAU,GAAG,YAAY,GAAG,QAAQ,CAAA;IACpD,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,CAAC,EAAE,OAAO,CAAA;CACf;AAED;;GAEG;AACH,MAAM,WAAW,sBAAsB;IACrC;;OAEG;IACH,UAAU,CAAC,EAAE,MAAM,CAAA;IAEnB;;;OAGG;IACH,WAAW,CAAC,EAAE,OAAO,CAAA;IAErB;;OAEG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;CAClC;AAED;;;;;;;GAOG;AACH,qBAAa,eAAe;IAC1B,OAAO,CAAC,QAAQ,CAAwB;IACxC,OAAO,CAAC,EAAE,CAAgC;IAC1C,OAAO,CAAC,UAAU,CAAQ;IAC1B,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,WAAW,CAAQ;IAG3B,OAAO,CAAC,aAAa,CAA0B;IAC/C,OAAO,CAAC,gBAAgB,CAA6B;IACrD,OAAO,CAAC,KAAK,CAA8C;IAC3D,OAAO,CAAC,cAAc,CAAuB;IAG7C,OAAO,CAAC,CAAC,CAAkB;IAE3B;;;;;OAKG;gBACS,QAAQ,EAAE,sBAAsB,EAAE,OAAO,GAAE,sBAA2B;IAWlF;;OAEG;IACH,IAAI,EAAE,IAAI,MAAM,CAEf;IAED;;OAEG;IACH,QAAQ,IAAI,aAAa;IAQzB;;;;;;;;OAQG;IACG,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,CAAC,EAAE,eAAe,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;IAqElF;;OAEG;IACG,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IA4D5B;;OAEG;IACG,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAY3B;;OAEG;IACG,IAAI,CAAC,CAAC,GAAG,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC;IAahE;;OAEG;IACG,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAS9B;;OAEG;IACH,IAAI,UAAU,IAAI,MAAM,CAEvB;IAED;;OAEG;IACH,WAAW,IAAI,MAAM,EAAE;IAQvB;;OAEG;IACH,OAAO,CAAC,aAAa;IAqErB;;OAEG;IACH,OAAO,CAAC,aAAa;IAuBrB;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAsExB;;OAEG;YACW,UAAU;IAqBxB;;OAEG;YACW,YAAY;IAO1B;;OAEG;YACW,YAAY;IA0B1B;;OAEG;YACW,YAAY;IAwC1B;;OAEG;IACH,OAAO,CAAC,OAAO;CAIhB;AAED;;;;;;GAMG;AACH,wBAAgB,qBAAqB,CACnC,QAAQ,EAAE,sBAAsB,EAChC,OAAO,CAAC,EAAE,sBAAsB,GAC/B,eAAe,CAEjB"}