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.
- package/.turbo/turbo-build.log +1 -1
- package/CHANGELOG.md +17 -1
- package/README.md +305 -184
- package/dist/barrier.d.ts +159 -0
- package/dist/barrier.d.ts.map +1 -0
- package/dist/barrier.js +377 -0
- package/dist/barrier.js.map +1 -0
- package/dist/cascade-context.d.ts +149 -0
- package/dist/cascade-context.d.ts.map +1 -0
- package/dist/cascade-context.js +324 -0
- package/dist/cascade-context.js.map +1 -0
- package/dist/cascade-executor.d.ts +196 -0
- package/dist/cascade-executor.d.ts.map +1 -0
- package/dist/cascade-executor.js +384 -0
- package/dist/cascade-executor.js.map +1 -0
- package/dist/context.d.ts.map +1 -1
- package/dist/context.js +27 -8
- package/dist/context.js.map +1 -1
- package/dist/cron-parser.d.ts +65 -0
- package/dist/cron-parser.d.ts.map +1 -0
- package/dist/cron-parser.js +294 -0
- package/dist/cron-parser.js.map +1 -0
- package/dist/cron-scheduler.d.ts +117 -0
- package/dist/cron-scheduler.d.ts.map +1 -0
- package/dist/cron-scheduler.js +176 -0
- package/dist/cron-scheduler.js.map +1 -0
- package/dist/database-context.d.ts +184 -0
- package/dist/database-context.d.ts.map +1 -0
- package/dist/database-context.js +428 -0
- package/dist/database-context.js.map +1 -0
- package/dist/dependency-graph.d.ts +157 -0
- package/dist/dependency-graph.d.ts.map +1 -0
- package/dist/dependency-graph.js +382 -0
- package/dist/dependency-graph.js.map +1 -0
- package/dist/digital-objects-adapter.d.ts +159 -0
- package/dist/digital-objects-adapter.d.ts.map +1 -0
- package/dist/digital-objects-adapter.js +229 -0
- package/dist/digital-objects-adapter.js.map +1 -0
- package/dist/durable-execution-cloudflare.d.ts +427 -0
- package/dist/durable-execution-cloudflare.d.ts.map +1 -0
- package/dist/durable-execution-cloudflare.js +510 -0
- package/dist/durable-execution-cloudflare.js.map +1 -0
- package/dist/durable-execution.d.ts +482 -0
- package/dist/durable-execution.d.ts.map +1 -0
- package/dist/durable-execution.js +594 -0
- package/dist/durable-execution.js.map +1 -0
- package/dist/durable-workflow.d.ts +176 -0
- package/dist/durable-workflow.d.ts.map +1 -0
- package/dist/durable-workflow.js +552 -0
- package/dist/durable-workflow.js.map +1 -0
- package/dist/every.d.ts +31 -2
- package/dist/every.d.ts.map +1 -1
- package/dist/every.js +63 -32
- package/dist/every.js.map +1 -1
- package/dist/graph/index.d.ts +8 -0
- package/dist/graph/index.d.ts.map +1 -0
- package/dist/graph/index.js +8 -0
- package/dist/graph/index.js.map +1 -0
- package/dist/graph/topological-sort.d.ts +121 -0
- package/dist/graph/topological-sort.d.ts.map +1 -0
- package/dist/graph/topological-sort.js +292 -0
- package/dist/graph/topological-sort.js.map +1 -0
- package/dist/index.d.ts +10 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +25 -0
- package/dist/index.js.map +1 -1
- package/dist/logger.d.ts +101 -0
- package/dist/logger.d.ts.map +1 -0
- package/dist/logger.js +115 -0
- package/dist/logger.js.map +1 -0
- package/dist/on.d.ts +35 -10
- package/dist/on.d.ts.map +1 -1
- package/dist/on.js +53 -19
- package/dist/on.js.map +1 -1
- package/dist/runtime.d.ts +169 -0
- package/dist/runtime.d.ts.map +1 -0
- package/dist/runtime.js +275 -0
- package/dist/runtime.js.map +1 -0
- package/dist/send.d.ts.map +1 -1
- package/dist/send.js +4 -3
- package/dist/send.js.map +1 -1
- package/dist/telemetry.d.ts +150 -0
- package/dist/telemetry.d.ts.map +1 -0
- package/dist/telemetry.js +388 -0
- package/dist/telemetry.js.map +1 -0
- package/dist/timer-registry.d.ts +77 -0
- package/dist/timer-registry.d.ts.map +1 -0
- package/dist/timer-registry.js +154 -0
- package/dist/timer-registry.js.map +1 -0
- package/dist/types.d.ts +105 -6
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js +17 -1
- package/dist/types.js.map +1 -1
- package/dist/worker/durable-step.d.ts +481 -0
- package/dist/worker/durable-step.d.ts.map +1 -0
- package/dist/worker/durable-step.js +606 -0
- package/dist/worker/durable-step.js.map +1 -0
- package/dist/worker/index.d.ts +106 -0
- package/dist/worker/index.d.ts.map +1 -0
- package/dist/worker/index.js +124 -0
- package/dist/worker/index.js.map +1 -0
- package/dist/worker/state-adapter.d.ts +230 -0
- package/dist/worker/state-adapter.d.ts.map +1 -0
- package/dist/worker/state-adapter.js +409 -0
- package/dist/worker/state-adapter.js.map +1 -0
- package/dist/worker/topological-executor.d.ts +282 -0
- package/dist/worker/topological-executor.d.ts.map +1 -0
- package/dist/worker/topological-executor.js +396 -0
- package/dist/worker/topological-executor.js.map +1 -0
- package/dist/worker/workflow-builder.d.ts +286 -0
- package/dist/worker/workflow-builder.d.ts.map +1 -0
- package/dist/worker/workflow-builder.js +565 -0
- package/dist/worker/workflow-builder.js.map +1 -0
- package/dist/worker.d.ts +800 -0
- package/dist/worker.d.ts.map +1 -0
- package/dist/worker.js +2428 -0
- package/dist/worker.js.map +1 -0
- package/dist/workflow-builder.d.ts +287 -0
- package/dist/workflow-builder.d.ts.map +1 -0
- package/dist/workflow-builder.js +762 -0
- package/dist/workflow-builder.js.map +1 -0
- package/dist/workflow.d.ts +14 -30
- package/dist/workflow.d.ts.map +1 -1
- package/dist/workflow.js +136 -292
- package/dist/workflow.js.map +1 -1
- package/examples/01-ecommerce-order-pipeline.ts +358 -0
- package/examples/02-content-moderation-cascade.ts +454 -0
- package/examples/03-scheduled-reporting-dependencies.ts +479 -0
- package/examples/04-database-persistence.ts +518 -0
- package/examples/README.md +173 -0
- package/package.json +21 -4
- package/src/__tests__/digital-objects-adapter.test.ts +274 -0
- package/src/__tests__/durable-workflow.test.ts +297 -0
- package/src/barrier.ts +507 -0
- package/src/cascade-context.ts +495 -0
- package/src/cascade-executor.ts +588 -0
- package/src/context.ts +51 -17
- package/src/cron-parser.ts +347 -0
- package/src/cron-scheduler.ts +239 -0
- package/src/database-context.ts +658 -0
- package/src/dependency-graph.ts +518 -0
- package/src/digital-objects-adapter.ts +351 -0
- package/src/durable-execution-cloudflare.ts +855 -0
- package/src/durable-execution.ts +1042 -0
- package/src/durable-workflow.ts +717 -0
- package/src/every.ts +104 -35
- package/src/graph/index.ts +19 -0
- package/src/graph/topological-sort.ts +412 -0
- package/src/index.ts +147 -0
- package/src/logger.ts +148 -0
- package/src/on.ts +81 -26
- package/src/runtime.ts +436 -0
- package/src/send.ts +4 -5
- package/src/telemetry.ts +577 -0
- package/src/timer-registry.ts +179 -0
- package/src/types.ts +146 -10
- package/src/worker/durable-step.ts +976 -0
- package/src/worker/index.ts +216 -0
- package/src/worker/state-adapter.ts +589 -0
- package/src/worker/topological-executor.ts +625 -0
- package/src/worker/workflow-builder.ts +871 -0
- package/src/worker.ts +2906 -0
- package/src/workflow-builder.ts +1068 -0
- package/src/workflow.ts +199 -355
- package/test/barrier-join.test.ts +442 -0
- package/test/barrier-unhandled-rejections.test.ts +359 -0
- package/test/cascade-context.test.ts +390 -0
- package/test/cascade-executor.test.ts +852 -0
- package/test/cron-parser.test.ts +314 -0
- package/test/cron-scheduler.test.ts +291 -0
- package/test/database-context.test.ts +770 -0
- package/test/db-provider-adapter.test.ts +862 -0
- package/test/dependency-graph.test.ts +512 -0
- package/test/durable-execution-cloudflare.test.ts +606 -0
- package/test/durable-execution-in-process.test.ts +286 -0
- package/test/durable-execution.test.ts +247 -0
- package/test/e2e/workflow-scenarios.e2e.test.ts +1039 -0
- package/test/graph/topological-sort.test.ts +586 -0
- package/test/integration.test.ts +442 -0
- package/test/rpc-surface.test.ts +946 -0
- package/test/runtime.test.ts +262 -0
- package/test/schedule-timer-cleanup.test.ts +353 -0
- package/test/send-race-conditions.test.ts +400 -0
- package/test/type-safety-every.test.ts +303 -0
- package/test/worker/durable-cascade.test.ts +1117 -0
- package/test/worker/durable-step.test.ts +723 -0
- package/test/worker/topological-executor.test.ts +1240 -0
- package/test/worker/workflow-builder.test.ts +1067 -0
- package/test/worker.test.ts +608 -0
- package/test/workflow-builder.test.ts +1670 -0
- package/test/workflow-cron.test.ts +256 -0
- package/test/workflow-state-adapter.test.ts +923 -0
- package/test/workflow.test.ts +25 -22
- package/tsconfig.json +3 -1
- package/vitest.config.ts +38 -1
- package/vitest.workers.config.ts +44 -0
- package/wrangler.jsonc +22 -0
- package/.turbo/turbo-test.log +0 -7
- package/src/context.js +0 -83
- package/src/every.js +0 -267
- package/src/index.js +0 -71
- package/src/on.js +0 -79
- package/src/send.js +0 -111
- package/src/types.js +0 -4
- package/src/workflow.js +0 -455
- package/test/context.test.js +0 -116
- package/test/every.test.js +0 -282
- package/test/on.test.js +0 -80
- package/test/send.test.js +0 -89
- package/test/workflow.test.js +0 -224
- 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"}
|