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,275 @@
1
+ /**
2
+ * WorkflowRuntime - Owns the `$` runtime contract
3
+ *
4
+ * Purpose: Single module that owns end-to-end construction of the `$` context
5
+ * a workflow handler receives. Before this module existed the answer to
6
+ * "what does the handler see when it runs?" was stitched together from three
7
+ * separate modules:
8
+ *
9
+ * - cascade-context.ts (5W+H tracing)
10
+ * - database-context.ts (DB injection)
11
+ * - on.ts / send.ts / every.ts (event dispatch)
12
+ *
13
+ * Callers reading `$.on.Order.placed(...)` had no single place to discover
14
+ * what `$` contains. Tests had to assemble three contexts independently to
15
+ * exercise a handler.
16
+ *
17
+ * `WorkflowRuntime` collapses these into one port:
18
+ *
19
+ * - {@link createWorkflowRuntime} builds the runtime, owning the event/
20
+ * schedule registries, the optional `DatabaseContext` injection, and the
21
+ * optional cascade context.
22
+ * - The runtime exposes `$` (a {@link WorkflowContext}) and `dispatch()` —
23
+ * the latter is the test surface for exercising a handler against an
24
+ * event without spinning up a full {@link Workflow}.
25
+ *
26
+ * The cascade-context, database-context, and on/send/every modules continue
27
+ * to exist as **internal seams** — private adapters the runtime composes.
28
+ * `DatabaseContext` stays as an injected port so callers can wire either
29
+ * `ai-database`'s adapter or an in-memory adapter; this keeps `ai-workflows`
30
+ * Layer 0.
31
+ *
32
+ * @example Basic usage
33
+ * ```ts
34
+ * import { createWorkflowRuntime } from 'ai-workflows'
35
+ *
36
+ * const runtime = createWorkflowRuntime()
37
+ * runtime.register('Customer', 'created', async (customer, $) => {
38
+ * $.log('New customer:', customer)
39
+ * })
40
+ * await runtime.dispatch('Customer.created', { id: '123' })
41
+ * ```
42
+ *
43
+ * @example With injected DatabaseContext
44
+ * ```ts
45
+ * import { createWorkflowRuntime, createMemoryDatabaseContext } from 'ai-workflows'
46
+ *
47
+ * const runtime = createWorkflowRuntime({ db: createMemoryDatabaseContext() })
48
+ * ```
49
+ *
50
+ * @example Direct handler dispatch (test surface)
51
+ * ```ts
52
+ * const runtime = createWorkflowRuntime()
53
+ * const handler = vi.fn()
54
+ * runtime.register('Order', 'placed', handler)
55
+ * await runtime.dispatch('Order.placed', { id: 'o-1' })
56
+ * expect(handler).toHaveBeenCalled()
57
+ * ```
58
+ *
59
+ * @packageDocumentation
60
+ */
61
+ import { createTypedOnProxy } from './on.js';
62
+ import { createTypedEveryProxy } from './every.js';
63
+ import { createCascadeContext } from './cascade-context.js';
64
+ import { getLogger } from './logger.js';
65
+ /**
66
+ * Parse an event string in `Noun.event` form. Returns `null` for invalid
67
+ * input. Lives on the runtime because dispatch is the only thing that needs
68
+ * to crack event names; `workflow.ts` re-exports it for back-compat.
69
+ */
70
+ export function parseEvent(event) {
71
+ const parts = event.split('.');
72
+ if (parts.length !== 2) {
73
+ return null;
74
+ }
75
+ const [noun, eventName] = parts;
76
+ if (!noun || !eventName) {
77
+ return null;
78
+ }
79
+ return { noun, event: eventName };
80
+ }
81
+ /**
82
+ * Internal: append a history entry with the current timestamp.
83
+ */
84
+ function pushHistory(state, entry) {
85
+ state.history.push({ ...entry, timestamp: Date.now() });
86
+ }
87
+ /**
88
+ * Construct a {@link WorkflowRuntime}.
89
+ *
90
+ * The runtime is the single owner of the `$` contract — it composes:
91
+ *
92
+ * 1. Event/schedule registries (the dispatch half of on/send/every).
93
+ * 2. The optional injected `DatabaseContext` for durable record-keeping.
94
+ * 3. A cascade context for 5W+H tracing.
95
+ *
96
+ * The returned `runtime.$` is what handlers receive; `runtime.dispatch` is
97
+ * the canonical test surface.
98
+ */
99
+ export function createWorkflowRuntime(options = {}) {
100
+ // ---------------------------------------------------------------------------
101
+ // State + registries (the runtime is the sole owner)
102
+ // ---------------------------------------------------------------------------
103
+ const state = {
104
+ context: { ...(options.context ?? {}) },
105
+ history: [],
106
+ };
107
+ const eventRegistry = [];
108
+ const scheduleRegistry = [];
109
+ // Cascade context (auto-created if not supplied)
110
+ const cascade = options.cascade ??
111
+ createCascadeContext(options.name !== undefined ? { name: options.name } : {});
112
+ const db = options.db;
113
+ // ---------------------------------------------------------------------------
114
+ // Registration (these are the "right halves" of on / every — the registry
115
+ // halves. The proxy halves live in on.ts/every.ts as factories we reuse.)
116
+ // ---------------------------------------------------------------------------
117
+ const register = (noun, event, handler, dependencies) => {
118
+ eventRegistry.push({
119
+ noun,
120
+ event,
121
+ handler,
122
+ source: handler.toString(),
123
+ ...(dependencies !== undefined && { dependencies }),
124
+ });
125
+ };
126
+ const registerSchedule = (interval, handler) => {
127
+ scheduleRegistry.push({
128
+ interval,
129
+ handler,
130
+ source: handler.toString(),
131
+ });
132
+ };
133
+ // ---------------------------------------------------------------------------
134
+ // Dispatch (the runtime's core: take an event, find handlers, run them)
135
+ // ---------------------------------------------------------------------------
136
+ const findMatching = (event) => {
137
+ const parsed = parseEvent(event);
138
+ if (!parsed) {
139
+ getLogger().warn(`Invalid event format: ${event}. Expected Noun.event`);
140
+ return [];
141
+ }
142
+ return eventRegistry
143
+ .filter((h) => h.noun === parsed.noun && h.event === parsed.event)
144
+ .map((h) => h.handler);
145
+ };
146
+ const dispatch = async (event, data) => {
147
+ const matching = findMatching(event);
148
+ if (matching.length === 0)
149
+ return;
150
+ await Promise.all(matching.map(async (handler) => {
151
+ try {
152
+ await handler(data, $);
153
+ }
154
+ catch (error) {
155
+ getLogger().error(`Error in handler for ${event}:`, error);
156
+ }
157
+ }));
158
+ };
159
+ const execute = async (event, data, durable) => {
160
+ const parsed = parseEvent(event);
161
+ if (!parsed) {
162
+ throw new Error(`Invalid event format: ${event}. Expected Noun.event`);
163
+ }
164
+ const matching = eventRegistry.filter((h) => h.noun === parsed.noun && h.event === parsed.event);
165
+ if (matching.length === 0) {
166
+ throw new Error(`No handler registered for ${event}`);
167
+ }
168
+ const { handler } = matching[0];
169
+ if (durable && db) {
170
+ await db.createAction({
171
+ actor: 'workflow',
172
+ object: event,
173
+ action: 'execute',
174
+ metadata: { data },
175
+ });
176
+ }
177
+ try {
178
+ const result = await handler(data, $);
179
+ return result;
180
+ }
181
+ catch (error) {
182
+ if (durable) {
183
+ getLogger().error(`[runtime] Durable action failed for ${event}:`, error);
184
+ }
185
+ throw error;
186
+ }
187
+ };
188
+ // ---------------------------------------------------------------------------
189
+ // Build the `$` context. This is the WHOLE answer to "what does a handler
190
+ // see when it runs?" — every property below is a deliberate part of the
191
+ // handler-facing surface.
192
+ // ---------------------------------------------------------------------------
193
+ const onProxy = createTypedOnProxy((noun, event, handler, deps) => {
194
+ register(noun, event, handler, deps);
195
+ });
196
+ const everyProxy = createTypedEveryProxy((interval, handler) => {
197
+ registerSchedule(interval, handler);
198
+ });
199
+ const $ = {
200
+ track(event, data) {
201
+ try {
202
+ pushHistory(state, { type: 'event', name: `track:${event}`, data });
203
+ dispatch(event, data).catch(() => {
204
+ // track() swallows errors by design
205
+ });
206
+ }
207
+ catch {
208
+ // Silently swallow errors
209
+ }
210
+ },
211
+ send(event, data) {
212
+ const eventId = crypto.randomUUID();
213
+ pushHistory(state, { type: 'event', name: event, data });
214
+ const payload = { ...data, _eventId: eventId };
215
+ // Persist if a DatabaseContext is wired
216
+ if (db) {
217
+ db.recordEvent(event, payload).catch((err) => {
218
+ getLogger().error(`[runtime] Failed to record event ${event}:`, err);
219
+ });
220
+ }
221
+ // Deliver
222
+ dispatch(event, payload).catch((err) => {
223
+ getLogger().error(`[runtime] Failed to deliver event ${event}:`, err);
224
+ });
225
+ return eventId;
226
+ },
227
+ async do(event, data) {
228
+ pushHistory(state, { type: 'action', name: `do:${event}`, data });
229
+ if (db) {
230
+ await db.recordEvent(event, data);
231
+ }
232
+ return execute(event, data, true);
233
+ },
234
+ async try(event, data) {
235
+ pushHistory(state, { type: 'action', name: `try:${event}`, data });
236
+ return execute(event, data, false);
237
+ },
238
+ on: onProxy,
239
+ every: everyProxy,
240
+ state: state.context,
241
+ getState() {
242
+ return structuredClone({
243
+ ...(state.current !== undefined && { current: state.current }),
244
+ context: state.context,
245
+ history: state.history,
246
+ });
247
+ },
248
+ set(key, value) {
249
+ state.context[key] = value;
250
+ },
251
+ get(key) {
252
+ return state.context[key];
253
+ },
254
+ log(message, data) {
255
+ pushHistory(state, { type: 'action', name: 'log', data: { message, data } });
256
+ getLogger().log(`[workflow] ${message}`, data ?? '');
257
+ },
258
+ ...(db !== undefined && { db }),
259
+ };
260
+ // ---------------------------------------------------------------------------
261
+ // Public surface
262
+ // ---------------------------------------------------------------------------
263
+ return {
264
+ $,
265
+ cascade,
266
+ register,
267
+ registerSchedule,
268
+ dispatch,
269
+ execute,
270
+ getEventRegistry: () => eventRegistry,
271
+ getScheduleRegistry: () => scheduleRegistry,
272
+ state,
273
+ };
274
+ }
275
+ //# sourceMappingURL=runtime.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"runtime.js","sourceRoot":"","sources":["../src/runtime.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"send.d.ts","sourceRoot":"","sources":["../src/send.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAMH;;GAEG;AACH,cAAM,QAAQ;IACZ,OAAO,CAAC,OAAO,CAA8C;IAC7D,OAAO,CAAC,UAAU,CAAQ;IAE1B;;OAEG;IACG,IAAI,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC;IAQvD;;OAEG;YACW,OAAO;IAWrB;;OAEG;YACW,OAAO;CA+BtB;AAOD;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,wBAAsB,IAAI,CAAC,CAAC,GAAG,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAE7E;AAED;;GAEG;AACH,wBAAgB,WAAW,IAAI,QAAQ,CAEtC"}
1
+ {"version":3,"file":"send.d.ts","sourceRoot":"","sources":["../src/send.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAOH;;GAEG;AACH,cAAM,QAAQ;IACZ,OAAO,CAAC,OAAO,CAA8C;IAC7D,OAAO,CAAC,UAAU,CAAQ;IAE1B;;OAEG;IACG,IAAI,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC;IAQvD;;OAEG;YACW,OAAO;IAWrB;;OAEG;YACW,OAAO;CA6BtB;AAOD;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,wBAAsB,IAAI,CAAC,CAAC,GAAG,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAE7E;AAED;;GAEG;AACH,wBAAgB,WAAW,IAAI,QAAQ,CAEtC"}
package/dist/send.js CHANGED
@@ -8,6 +8,7 @@
8
8
  import { getEventHandlers } from './on.js';
9
9
  import { createWorkflowContext } from './context.js';
10
10
  import { parseEvent } from './workflow.js';
11
+ import { getLogger } from './logger.js';
11
12
  /**
12
13
  * Event bus for managing event delivery
13
14
  */
@@ -40,11 +41,11 @@ class EventBus {
40
41
  async deliver(event, data) {
41
42
  const parsed = parseEvent(event);
42
43
  if (!parsed) {
43
- console.warn(`Invalid event format: ${event}. Expected Noun.event`);
44
+ getLogger().warn(`Invalid event format: ${event}. Expected Noun.event`);
44
45
  return;
45
46
  }
46
47
  const handlers = getEventHandlers();
47
- const matching = handlers.filter(h => h.noun === parsed.noun && h.event === parsed.event);
48
+ const matching = handlers.filter((h) => h.noun === parsed.noun && h.event === parsed.event);
48
49
  if (matching.length === 0) {
49
50
  // No handlers registered - that's okay, event is just not handled
50
51
  return;
@@ -57,7 +58,7 @@ class EventBus {
57
58
  await handler(data, ctx);
58
59
  }
59
60
  catch (error) {
60
- console.error(`Error in handler for ${event}:`, error);
61
+ getLogger().error(`Error in handler for ${event}:`, error);
61
62
  }
62
63
  }));
63
64
  }
package/dist/send.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"send.js","sourceRoot":"","sources":["../src/send.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,gBAAgB,EAAE,MAAM,SAAS,CAAA;AAC1C,OAAO,EAAE,qBAAqB,EAAE,MAAM,cAAc,CAAA;AACpD,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAA;AAE1C;;GAEG;AACH,MAAM,QAAQ;IACJ,OAAO,GAA4C,EAAE,CAAA;IACrD,UAAU,GAAG,KAAK,CAAA;IAE1B;;OAEG;IACH,KAAK,CAAC,IAAI,CAAC,KAAa,EAAE,IAAa;QACrC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAA;QAElC,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC;YACrB,MAAM,IAAI,CAAC,OAAO,EAAE,CAAA;QACtB,CAAC;IACH,CAAC;IAED;;OAEG;IACK,KAAK,CAAC,OAAO;QACnB,IAAI,CAAC,UAAU,GAAG,IAAI,CAAA;QAEtB,OAAO,IAAI,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC/B,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,EAAG,CAAA;YAClC,MAAM,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,IAAI,CAAC,CAAA;QAC3C,CAAC;QAED,IAAI,CAAC,UAAU,GAAG,KAAK,CAAA;IACzB,CAAC;IAED;;OAEG;IACK,KAAK,CAAC,OAAO,CAAC,KAAa,EAAE,IAAa;QAChD,MAAM,MAAM,GAAG,UAAU,CAAC,KAAK,CAAC,CAAA;QAChC,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,OAAO,CAAC,IAAI,CAAC,yBAAyB,KAAK,uBAAuB,CAAC,CAAA;YACnE,OAAM;QACR,CAAC;QAED,MAAM,QAAQ,GAAG,gBAAgB,EAAE,CAAA;QACnC,MAAM,QAAQ,GAAG,QAAQ,CAAC,MAAM,CAC9B,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,MAAM,CAAC,IAAI,IAAI,CAAC,CAAC,KAAK,KAAK,MAAM,CAAC,KAAK,CACxD,CAAA;QAED,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC1B,kEAAkE;YAClE,OAAM;QACR,CAAC;QAED,uCAAuC;QACvC,MAAM,GAAG,GAAG,qBAAqB,CAAC,IAAI,CAAC,CAAA;QAEvC,gCAAgC;QAChC,MAAM,OAAO,CAAC,GAAG,CACf,QAAQ,CAAC,GAAG,CAAC,KAAK,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE;YACjC,IAAI,CAAC;gBACH,MAAM,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC,CAAA;YAC1B,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,OAAO,CAAC,KAAK,CAAC,wBAAwB,KAAK,GAAG,EAAE,KAAK,CAAC,CAAA;YACxD,CAAC;QACH,CAAC,CAAC,CACH,CAAA;IACH,CAAC;CACF;AAED;;GAEG;AACH,MAAM,cAAc,GAAG,IAAI,QAAQ,EAAE,CAAA;AAErC;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,MAAM,CAAC,KAAK,UAAU,IAAI,CAAc,KAAa,EAAE,IAAO;IAC5D,MAAM,cAAc,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,CAAA;AACxC,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,WAAW;IACzB,OAAO,cAAc,CAAA;AACvB,CAAC"}
1
+ {"version":3,"file":"send.js","sourceRoot":"","sources":["../src/send.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,gBAAgB,EAAE,MAAM,SAAS,CAAA;AAC1C,OAAO,EAAE,qBAAqB,EAAE,MAAM,cAAc,CAAA;AACpD,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAA;AAC1C,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAA;AAEvC;;GAEG;AACH,MAAM,QAAQ;IACJ,OAAO,GAA4C,EAAE,CAAA;IACrD,UAAU,GAAG,KAAK,CAAA;IAE1B;;OAEG;IACH,KAAK,CAAC,IAAI,CAAC,KAAa,EAAE,IAAa;QACrC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAA;QAElC,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC;YACrB,MAAM,IAAI,CAAC,OAAO,EAAE,CAAA;QACtB,CAAC;IACH,CAAC;IAED;;OAEG;IACK,KAAK,CAAC,OAAO;QACnB,IAAI,CAAC,UAAU,GAAG,IAAI,CAAA;QAEtB,OAAO,IAAI,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC/B,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,EAAG,CAAA;YAClC,MAAM,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,IAAI,CAAC,CAAA;QAC3C,CAAC;QAED,IAAI,CAAC,UAAU,GAAG,KAAK,CAAA;IACzB,CAAC;IAED;;OAEG;IACK,KAAK,CAAC,OAAO,CAAC,KAAa,EAAE,IAAa;QAChD,MAAM,MAAM,GAAG,UAAU,CAAC,KAAK,CAAC,CAAA;QAChC,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,SAAS,EAAE,CAAC,IAAI,CAAC,yBAAyB,KAAK,uBAAuB,CAAC,CAAA;YACvE,OAAM;QACR,CAAC;QAED,MAAM,QAAQ,GAAG,gBAAgB,EAAE,CAAA;QACnC,MAAM,QAAQ,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,MAAM,CAAC,IAAI,IAAI,CAAC,CAAC,KAAK,KAAK,MAAM,CAAC,KAAK,CAAC,CAAA;QAE3F,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC1B,kEAAkE;YAClE,OAAM;QACR,CAAC;QAED,uCAAuC;QACvC,MAAM,GAAG,GAAG,qBAAqB,CAAC,IAAI,CAAC,CAAA;QAEvC,gCAAgC;QAChC,MAAM,OAAO,CAAC,GAAG,CACf,QAAQ,CAAC,GAAG,CAAC,KAAK,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE;YACjC,IAAI,CAAC;gBACH,MAAM,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC,CAAA;YAC1B,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,SAAS,EAAE,CAAC,KAAK,CAAC,wBAAwB,KAAK,GAAG,EAAE,KAAK,CAAC,CAAA;YAC5D,CAAC;QACH,CAAC,CAAC,CACH,CAAA;IACH,CAAC;CACF;AAED;;GAEG;AACH,MAAM,cAAc,GAAG,IAAI,QAAQ,EAAE,CAAA;AAErC;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,MAAM,CAAC,KAAK,UAAU,IAAI,CAAc,KAAa,EAAE,IAAO;IAC5D,MAAM,cAAc,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,CAAA;AACxC,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,WAAW;IACzB,OAAO,cAAc,CAAA;AACvB,CAAC"}
@@ -0,0 +1,150 @@
1
+ /**
2
+ * OpenTelemetry Integration for ai-workflows
3
+ *
4
+ * Provides instrumented wrappers and telemetry utilities for workflow execution.
5
+ * Integrates with cascade-context for distributed tracing support.
6
+ *
7
+ * @example
8
+ * ```ts
9
+ * import { Workflow } from 'ai-workflows'
10
+ * import { withWorkflowTelemetry, instrumentWorkflow } from 'ai-workflows/telemetry'
11
+ *
12
+ * // Enable telemetry globally
13
+ * withWorkflowTelemetry({ provider: createConsoleTelemetryProvider() }, async () => {
14
+ * const workflow = Workflow($ => {
15
+ * $.on.Customer.created(async (customer) => {
16
+ * // Traced automatically
17
+ * })
18
+ * })
19
+ * await workflow.start()
20
+ * })
21
+ * ```
22
+ *
23
+ * @packageDocumentation
24
+ */
25
+ import { type Tracer, type Meter, type Logger, type Span, type SpanAttributes, type TelemetryProvider, type TraceContext, type Counter, type Histogram } from '@org.ai/types';
26
+ import type { CascadeContext, CascadeStep } from './cascade-context.js';
27
+ /**
28
+ * Get the tracer for ai-workflows
29
+ */
30
+ export declare function getWorkflowTracer(): Tracer;
31
+ /**
32
+ * Get the meter for ai-workflows
33
+ */
34
+ export declare function getWorkflowMeter(): Meter;
35
+ /**
36
+ * Get the logger for ai-workflows
37
+ */
38
+ export declare function getWorkflowLogger(): Logger;
39
+ /**
40
+ * Create workflow-specific metrics
41
+ */
42
+ export declare function createWorkflowMetrics(meter: Meter): {
43
+ stepDuration: Histogram;
44
+ stepTotal: Counter;
45
+ stepErrors: Counter;
46
+ eventHandlers: Counter;
47
+ scheduleHandlers: Counter;
48
+ cascadeDepth: Histogram;
49
+ cascadeDuration: Histogram;
50
+ };
51
+ /**
52
+ * Get workflow metrics for the package
53
+ */
54
+ export declare function getWorkflowMetrics(): {
55
+ stepDuration: Histogram;
56
+ stepTotal: Counter;
57
+ stepErrors: Counter;
58
+ eventHandlers: Counter;
59
+ scheduleHandlers: Counter;
60
+ cascadeDepth: Histogram;
61
+ cascadeDuration: Histogram;
62
+ };
63
+ /**
64
+ * Reset cached telemetry instances
65
+ */
66
+ export declare function resetTelemetry(): void;
67
+ /**
68
+ * Options for withWorkflowTelemetry
69
+ */
70
+ export interface WithWorkflowTelemetryOptions {
71
+ /** Telemetry provider to use */
72
+ provider?: TelemetryProvider;
73
+ /** Workflow name for labeling */
74
+ workflowName?: string;
75
+ }
76
+ /**
77
+ * Execute a function with workflow telemetry enabled
78
+ */
79
+ export declare function withWorkflowTelemetry<T>(options: WithWorkflowTelemetryOptions, fn: () => Promise<T>): Promise<T>;
80
+ /**
81
+ * Create a span from a CascadeContext
82
+ *
83
+ * This bridges the cascade-context W3C Trace Context support with OpenTelemetry.
84
+ */
85
+ export declare function spanFromCascadeContext(ctx: CascadeContext, name?: string): Span;
86
+ /**
87
+ * Create a TraceContext from a span
88
+ *
89
+ * Allows propagating span context to cascade-context.
90
+ */
91
+ export declare function traceContextFromSpan(span: Span): TraceContext;
92
+ /**
93
+ * Record a CascadeStep as a span event
94
+ */
95
+ export declare function recordStepAsSpanEvent(span: Span, step: CascadeStep): void;
96
+ /**
97
+ * Convert CascadeContext steps to span events
98
+ */
99
+ export declare function cascadeStepsToSpanEvents(span: Span, ctx: CascadeContext): void;
100
+ /**
101
+ * Record an event handler invocation
102
+ */
103
+ export declare function recordEventHandler(params: {
104
+ event: string;
105
+ durationMs: number;
106
+ success: boolean;
107
+ }): void;
108
+ /**
109
+ * Record a schedule handler invocation
110
+ */
111
+ export declare function recordScheduleHandler(params: {
112
+ schedule: string;
113
+ durationMs: number;
114
+ success: boolean;
115
+ }): void;
116
+ /**
117
+ * Create a traced event handler
118
+ */
119
+ export declare function tracedEventHandler<TData, TResult>(event: string, handler: (data: TData, ctx: any) => Promise<TResult>): (data: TData, ctx: any) => Promise<TResult>;
120
+ /**
121
+ * Create a traced schedule handler
122
+ */
123
+ export declare function tracedScheduleHandler<TResult>(schedule: string, handler: (ctx: any) => Promise<TResult>): (ctx: any) => Promise<TResult>;
124
+ /**
125
+ * Record a workflow step
126
+ */
127
+ export declare function recordWorkflowStep(params: {
128
+ step: string;
129
+ workflow?: string | undefined;
130
+ durationMs: number;
131
+ success: boolean;
132
+ tier?: string | undefined;
133
+ }): void;
134
+ /**
135
+ * Create a traced workflow step
136
+ */
137
+ export declare function tracedStep<TArgs extends unknown[], TResult>(stepName: string, fn: (...args: TArgs) => Promise<TResult>, options?: {
138
+ workflowName?: string;
139
+ tier?: string;
140
+ }): (...args: TArgs) => Promise<TResult>;
141
+ /**
142
+ * Start a span for a workflow operation
143
+ */
144
+ export declare function startWorkflowSpan(name: string, attributes?: SpanAttributes): Span;
145
+ /**
146
+ * Execute code within a workflow span
147
+ */
148
+ export declare function withWorkflowSpan<T>(name: string, fn: (span: Span) => Promise<T>, attributes?: SpanAttributes): Promise<T>;
149
+ export { type Tracer, type Meter, type Logger, type Span, type SpanAttributes, type TelemetryProvider, type TraceContext, type Counter, type Histogram, getTracer, getMeter, getLogger, setTelemetryProvider, getTelemetryProvider, createTraceparent, parseTraceparent, generateTraceId, generateSpanId, SemanticAttributes, MetricNames, createHandlerMetrics, } from '@org.ai/types';
150
+ //# sourceMappingURL=telemetry.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"telemetry.d.ts","sourceRoot":"","sources":["../src/telemetry.ts"],"names":[],"mappings":"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"}