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,388 @@
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 { getTracer, getMeter, getLogger, setTelemetryProvider, getTelemetryProvider, createHandlerMetrics, SemanticAttributes, MetricNames, createTraceparent, parseTraceparent, generateTraceId, generateSpanId, } from '@org.ai/types';
26
+ // Package info
27
+ const PACKAGE_NAME = 'ai-workflows';
28
+ const PACKAGE_VERSION = '2.1.4';
29
+ // ============================================================================
30
+ // Package-level Telemetry
31
+ // ============================================================================
32
+ let packageTracer;
33
+ let packageMeter;
34
+ let packageLogger;
35
+ let workflowMetrics;
36
+ /**
37
+ * Get the tracer for ai-workflows
38
+ */
39
+ export function getWorkflowTracer() {
40
+ if (!packageTracer) {
41
+ packageTracer = getTracer(PACKAGE_NAME, PACKAGE_VERSION);
42
+ }
43
+ return packageTracer;
44
+ }
45
+ /**
46
+ * Get the meter for ai-workflows
47
+ */
48
+ export function getWorkflowMeter() {
49
+ if (!packageMeter) {
50
+ packageMeter = getMeter(PACKAGE_NAME, PACKAGE_VERSION);
51
+ }
52
+ return packageMeter;
53
+ }
54
+ /**
55
+ * Get the logger for ai-workflows
56
+ */
57
+ export function getWorkflowLogger() {
58
+ if (!packageLogger) {
59
+ packageLogger = getLogger(PACKAGE_NAME);
60
+ }
61
+ return packageLogger;
62
+ }
63
+ /**
64
+ * Create workflow-specific metrics
65
+ */
66
+ export function createWorkflowMetrics(meter) {
67
+ return {
68
+ stepDuration: meter.createHistogram(MetricNames.WORKFLOW_STEP_DURATION, 'Duration of workflow steps', 'ms'),
69
+ stepTotal: meter.createCounter(MetricNames.WORKFLOW_STEP_TOTAL, 'Total number of workflow steps executed'),
70
+ stepErrors: meter.createCounter(MetricNames.WORKFLOW_STEP_ERRORS, 'Number of failed workflow steps'),
71
+ eventHandlers: meter.createCounter('workflow.event.handlers', 'Event handler invocations'),
72
+ scheduleHandlers: meter.createCounter('workflow.schedule.handlers', 'Schedule handler invocations'),
73
+ cascadeDepth: meter.createHistogram('workflow.cascade.depth', 'Cascade context depth'),
74
+ cascadeDuration: meter.createHistogram('workflow.cascade.duration', 'Total cascade execution duration', 'ms'),
75
+ };
76
+ }
77
+ /**
78
+ * Get workflow metrics for the package
79
+ */
80
+ export function getWorkflowMetrics() {
81
+ if (!workflowMetrics) {
82
+ workflowMetrics = createWorkflowMetrics(getWorkflowMeter());
83
+ }
84
+ return workflowMetrics;
85
+ }
86
+ /**
87
+ * Reset cached telemetry instances
88
+ */
89
+ export function resetTelemetry() {
90
+ packageTracer = undefined;
91
+ packageMeter = undefined;
92
+ packageLogger = undefined;
93
+ workflowMetrics = undefined;
94
+ }
95
+ /**
96
+ * Execute a function with workflow telemetry enabled
97
+ */
98
+ export async function withWorkflowTelemetry(options, fn) {
99
+ const previousProvider = getTelemetryProvider();
100
+ if (options.provider) {
101
+ setTelemetryProvider(options.provider);
102
+ resetTelemetry();
103
+ }
104
+ try {
105
+ return await fn();
106
+ }
107
+ finally {
108
+ if (options.provider) {
109
+ setTelemetryProvider(previousProvider);
110
+ resetTelemetry();
111
+ }
112
+ }
113
+ }
114
+ // ============================================================================
115
+ // Cascade Context Integration
116
+ // ============================================================================
117
+ /**
118
+ * Create a span from a CascadeContext
119
+ *
120
+ * This bridges the cascade-context W3C Trace Context support with OpenTelemetry.
121
+ */
122
+ export function spanFromCascadeContext(ctx, name) {
123
+ const tracer = getWorkflowTracer();
124
+ const traceContext = ctx.toTraceContext();
125
+ return tracer.startSpan(name || ctx.name || 'cascade', {
126
+ kind: 'internal',
127
+ parent: traceContext,
128
+ attributes: {
129
+ [SemanticAttributes.WORKFLOW_NAME]: ctx.name || 'cascade',
130
+ 'cascade.correlationId': ctx.correlationId,
131
+ 'cascade.spanId': ctx.spanId,
132
+ 'cascade.depth': ctx.depth,
133
+ ...(ctx.parentId && { 'cascade.parentId': ctx.parentId }),
134
+ },
135
+ });
136
+ }
137
+ /**
138
+ * Create a TraceContext from a span
139
+ *
140
+ * Allows propagating span context to cascade-context.
141
+ */
142
+ export function traceContextFromSpan(span) {
143
+ return span.getTraceContext();
144
+ }
145
+ /**
146
+ * Record a CascadeStep as a span event
147
+ */
148
+ export function recordStepAsSpanEvent(span, step) {
149
+ const attrs = {
150
+ 'step.status': step.status,
151
+ ...(step.duration !== undefined && { 'step.duration': step.duration }),
152
+ ...(step.metadata &&
153
+ Object.keys(step.metadata).length > 0 && { 'step.metadata': JSON.stringify(step.metadata) }),
154
+ };
155
+ span.addEvent(step.name, attrs);
156
+ }
157
+ /**
158
+ * Convert CascadeContext steps to span events
159
+ */
160
+ export function cascadeStepsToSpanEvents(span, ctx) {
161
+ for (const step of ctx.steps) {
162
+ recordStepAsSpanEvent(span, step);
163
+ }
164
+ }
165
+ // ============================================================================
166
+ // Event Handler Instrumentation
167
+ // ============================================================================
168
+ /**
169
+ * Record an event handler invocation
170
+ */
171
+ export function recordEventHandler(params) {
172
+ const metrics = getWorkflowMetrics();
173
+ const labels = {
174
+ event: params.event,
175
+ status: params.success ? 'success' : 'error',
176
+ };
177
+ metrics.eventHandlers.add(1, labels);
178
+ metrics.stepDuration.record(params.durationMs, { ...labels, type: 'event' });
179
+ metrics.stepTotal.add(1, { ...labels, type: 'event' });
180
+ if (!params.success) {
181
+ metrics.stepErrors.add(1, { ...labels, type: 'event' });
182
+ }
183
+ }
184
+ /**
185
+ * Record a schedule handler invocation
186
+ */
187
+ export function recordScheduleHandler(params) {
188
+ const metrics = getWorkflowMetrics();
189
+ const labels = {
190
+ schedule: params.schedule,
191
+ status: params.success ? 'success' : 'error',
192
+ };
193
+ metrics.scheduleHandlers.add(1, labels);
194
+ metrics.stepDuration.record(params.durationMs, { ...labels, type: 'schedule' });
195
+ metrics.stepTotal.add(1, { ...labels, type: 'schedule' });
196
+ if (!params.success) {
197
+ metrics.stepErrors.add(1, { ...labels, type: 'schedule' });
198
+ }
199
+ }
200
+ /**
201
+ * Create a traced event handler
202
+ */
203
+ export function tracedEventHandler(event, handler) {
204
+ return async (data, ctx) => {
205
+ const tracer = getWorkflowTracer();
206
+ const logger = getWorkflowLogger();
207
+ const startTime = Date.now();
208
+ return tracer.withSpan(`workflow.event.${event}`, {
209
+ kind: 'consumer',
210
+ attributes: {
211
+ [SemanticAttributes.WORKFLOW_NAME]: event,
212
+ 'workflow.event': event,
213
+ },
214
+ }, async (span) => {
215
+ logger.info(`Event handler ${event} started`);
216
+ try {
217
+ const result = await handler(data, ctx);
218
+ const durationMs = Date.now() - startTime;
219
+ recordEventHandler({
220
+ event,
221
+ durationMs,
222
+ success: true,
223
+ });
224
+ span.setStatus('ok');
225
+ logger.info(`Event handler ${event} completed`, { durationMs });
226
+ return result;
227
+ }
228
+ catch (error) {
229
+ const durationMs = Date.now() - startTime;
230
+ const message = error instanceof Error ? error.message : String(error);
231
+ recordEventHandler({
232
+ event,
233
+ durationMs,
234
+ success: false,
235
+ });
236
+ span.setStatus('error', message);
237
+ logger.error(`Event handler ${event} failed`, error instanceof Error ? error : undefined, { durationMs });
238
+ throw error;
239
+ }
240
+ });
241
+ };
242
+ }
243
+ /**
244
+ * Create a traced schedule handler
245
+ */
246
+ export function tracedScheduleHandler(schedule, handler) {
247
+ return async (ctx) => {
248
+ const tracer = getWorkflowTracer();
249
+ const logger = getWorkflowLogger();
250
+ const startTime = Date.now();
251
+ return tracer.withSpan(`workflow.schedule.${schedule}`, {
252
+ kind: 'internal',
253
+ attributes: {
254
+ [SemanticAttributes.WORKFLOW_NAME]: schedule,
255
+ 'workflow.schedule': schedule,
256
+ },
257
+ }, async (span) => {
258
+ logger.info(`Schedule handler ${schedule} started`);
259
+ try {
260
+ const result = await handler(ctx);
261
+ const durationMs = Date.now() - startTime;
262
+ recordScheduleHandler({
263
+ schedule,
264
+ durationMs,
265
+ success: true,
266
+ });
267
+ span.setStatus('ok');
268
+ logger.info(`Schedule handler ${schedule} completed`, { durationMs });
269
+ return result;
270
+ }
271
+ catch (error) {
272
+ const durationMs = Date.now() - startTime;
273
+ const message = error instanceof Error ? error.message : String(error);
274
+ recordScheduleHandler({
275
+ schedule,
276
+ durationMs,
277
+ success: false,
278
+ });
279
+ span.setStatus('error', message);
280
+ logger.error(`Schedule handler ${schedule} failed`, error instanceof Error ? error : undefined, { durationMs });
281
+ throw error;
282
+ }
283
+ });
284
+ };
285
+ }
286
+ // ============================================================================
287
+ // Workflow Step Instrumentation
288
+ // ============================================================================
289
+ /**
290
+ * Record a workflow step
291
+ */
292
+ export function recordWorkflowStep(params) {
293
+ const metrics = getWorkflowMetrics();
294
+ const labels = {
295
+ step: params.step,
296
+ workflow: params.workflow || 'default',
297
+ status: params.success ? 'success' : 'error',
298
+ ...(params.tier && { tier: params.tier }),
299
+ };
300
+ metrics.stepTotal.add(1, labels);
301
+ metrics.stepDuration.record(params.durationMs, labels);
302
+ if (!params.success) {
303
+ metrics.stepErrors.add(1, labels);
304
+ }
305
+ }
306
+ /**
307
+ * Create a traced workflow step
308
+ */
309
+ export function tracedStep(stepName, fn, options = {}) {
310
+ return async (...args) => {
311
+ const tracer = getWorkflowTracer();
312
+ const logger = getWorkflowLogger();
313
+ const startTime = Date.now();
314
+ const attributes = {
315
+ [SemanticAttributes.WORKFLOW_STEP]: stepName,
316
+ ...(options.workflowName && { [SemanticAttributes.WORKFLOW_NAME]: options.workflowName }),
317
+ ...(options.tier && { [SemanticAttributes.AI_TIER]: options.tier }),
318
+ };
319
+ return tracer.withSpan(`workflow.step.${stepName}`, { kind: 'internal', attributes }, async (span) => {
320
+ logger.debug(`Step ${stepName} started`, {
321
+ workflow: options.workflowName,
322
+ tier: options.tier,
323
+ });
324
+ try {
325
+ const result = await fn(...args);
326
+ const durationMs = Date.now() - startTime;
327
+ recordWorkflowStep({
328
+ step: stepName,
329
+ workflow: options.workflowName,
330
+ durationMs,
331
+ success: true,
332
+ tier: options.tier,
333
+ });
334
+ span.setStatus('ok');
335
+ return result;
336
+ }
337
+ catch (error) {
338
+ const durationMs = Date.now() - startTime;
339
+ const message = error instanceof Error ? error.message : String(error);
340
+ recordWorkflowStep({
341
+ step: stepName,
342
+ workflow: options.workflowName,
343
+ durationMs,
344
+ success: false,
345
+ tier: options.tier,
346
+ });
347
+ span.setStatus('error', message);
348
+ throw error;
349
+ }
350
+ });
351
+ };
352
+ }
353
+ // ============================================================================
354
+ // Span Helpers
355
+ // ============================================================================
356
+ /**
357
+ * Start a span for a workflow operation
358
+ */
359
+ export function startWorkflowSpan(name, attributes) {
360
+ const tracer = getWorkflowTracer();
361
+ return tracer.startSpan(name, {
362
+ kind: 'internal',
363
+ attributes: {
364
+ [SemanticAttributes.SERVICE_NAME]: PACKAGE_NAME,
365
+ ...attributes,
366
+ },
367
+ });
368
+ }
369
+ /**
370
+ * Execute code within a workflow span
371
+ */
372
+ export async function withWorkflowSpan(name, fn, attributes) {
373
+ const tracer = getWorkflowTracer();
374
+ return tracer.withSpan(name, { kind: 'internal', attributes }, fn);
375
+ }
376
+ // ============================================================================
377
+ // Re-exports from @org.ai/types
378
+ // ============================================================================
379
+ export {
380
+ // Global functions
381
+ getTracer, getMeter, getLogger, setTelemetryProvider, getTelemetryProvider,
382
+ // W3C Trace Context
383
+ createTraceparent, parseTraceparent, generateTraceId, generateSpanId,
384
+ // Constants
385
+ SemanticAttributes, MetricNames,
386
+ // Utilities
387
+ createHandlerMetrics, } from '@org.ai/types';
388
+ //# sourceMappingURL=telemetry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"telemetry.js","sourceRoot":"","sources":["../src/telemetry.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,77 @@
1
+ /**
2
+ * Global timer registry for workflow timers
3
+ *
4
+ * This module tracks all active timers across workflows to enable:
5
+ * - Timer cleanup when workflows are destroyed
6
+ * - Global timer count for debugging
7
+ * - Process exit cleanup
8
+ */
9
+ interface TimerEntry {
10
+ timerId: NodeJS.Timeout;
11
+ workflowId: string;
12
+ registeredAt: number;
13
+ }
14
+ /**
15
+ * Register a timer in the global registry
16
+ */
17
+ export declare function registerTimer(workflowId: string, timerId: NodeJS.Timeout): string;
18
+ /**
19
+ * Unregister a timer from the global registry
20
+ */
21
+ export declare function unregisterTimer(id: string): boolean;
22
+ /**
23
+ * Get all timer IDs for a specific workflow
24
+ */
25
+ export declare function getTimerIdsForWorkflow(workflowId: string): string[];
26
+ /**
27
+ * Clear all timers for a specific workflow
28
+ */
29
+ export declare function clearTimersForWorkflow(workflowId: string): number;
30
+ /**
31
+ * Get the count of all active timers
32
+ */
33
+ export declare function getActiveTimerCount(): number;
34
+ /**
35
+ * Clear all timers from all workflows
36
+ */
37
+ export declare function clearAllTimers(): void;
38
+ /**
39
+ * Timer registry object for external access
40
+ */
41
+ export declare const timerRegistry: {
42
+ register: typeof registerTimer;
43
+ unregister: typeof unregisterTimer;
44
+ getTimerIdsForWorkflow: typeof getTimerIdsForWorkflow;
45
+ clearForWorkflow: typeof clearTimersForWorkflow;
46
+ getActiveCount: typeof getActiveTimerCount;
47
+ clearAll: typeof clearAllTimers;
48
+ getAll: () => [string, TimerEntry][];
49
+ };
50
+ /**
51
+ * Enable global timer registry functions.
52
+ *
53
+ * This opt-in function registers `getActiveWorkflowTimerCount` and `clearAllWorkflowTimers`
54
+ * on the global scope for debugging and cleanup purposes.
55
+ *
56
+ * Call this function explicitly if you need global access to timer management:
57
+ *
58
+ * @example
59
+ * ```ts
60
+ * import { enableGlobalTimerRegistry } from 'ai-workflows'
61
+ *
62
+ * // Enable global registration
63
+ * enableGlobalTimerRegistry()
64
+ *
65
+ * // Now these are available globally:
66
+ * // globalThis.getActiveWorkflowTimerCount()
67
+ * // globalThis.clearAllWorkflowTimers()
68
+ * ```
69
+ */
70
+ export declare function enableGlobalTimerRegistry(): void;
71
+ /**
72
+ * Check if global timer registry is enabled
73
+ */
74
+ export declare function isGlobalTimerRegistryEnabled(): boolean;
75
+ export declare function registerProcessCleanup(): void;
76
+ export {};
77
+ //# sourceMappingURL=timer-registry.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"timer-registry.d.ts","sourceRoot":"","sources":["../src/timer-registry.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,UAAU,UAAU;IAClB,OAAO,EAAE,MAAM,CAAC,OAAO,CAAA;IACvB,UAAU,EAAE,MAAM,CAAA;IAClB,YAAY,EAAE,MAAM,CAAA;CACrB;AAmBD;;GAEG;AACH,wBAAgB,aAAa,CAAC,UAAU,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,CAAC,OAAO,GAAG,MAAM,CAQjF;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAQnD;AAED;;GAEG;AACH,wBAAgB,sBAAsB,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,EAAE,CAQnE;AAED;;GAEG;AACH,wBAAgB,sBAAsB,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,CAMjE;AAED;;GAEG;AACH,wBAAgB,mBAAmB,IAAI,MAAM,CAE5C;AAED;;GAEG;AACH,wBAAgB,cAAc,IAAI,IAAI,CAKrC;AAED;;GAEG;AACH,eAAO,MAAM,aAAa;;;;;;;;CAQzB,CAAA;AAaD;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAgB,yBAAyB,IAAI,IAAI,CAahD;AAED;;GAEG;AACH,wBAAgB,4BAA4B,IAAI,OAAO,CAEtD;AAKD,wBAAgB,sBAAsB,IAAI,IAAI,CAU7C"}
@@ -0,0 +1,154 @@
1
+ /**
2
+ * Global timer registry for workflow timers
3
+ *
4
+ * This module tracks all active timers across workflows to enable:
5
+ * - Timer cleanup when workflows are destroyed
6
+ * - Global timer count for debugging
7
+ * - Process exit cleanup
8
+ */
9
+ /**
10
+ * Global registry of active timers
11
+ */
12
+ const activeTimers = new Map();
13
+ /**
14
+ * Counter for generating unique timer IDs
15
+ */
16
+ let timerCounter = 0;
17
+ /**
18
+ * Generate a unique timer ID
19
+ */
20
+ function generateTimerId(workflowId) {
21
+ return `${workflowId}-timer-${++timerCounter}`;
22
+ }
23
+ /**
24
+ * Register a timer in the global registry
25
+ */
26
+ export function registerTimer(workflowId, timerId) {
27
+ const id = generateTimerId(workflowId);
28
+ activeTimers.set(id, {
29
+ timerId,
30
+ workflowId,
31
+ registeredAt: Date.now(),
32
+ });
33
+ return id;
34
+ }
35
+ /**
36
+ * Unregister a timer from the global registry
37
+ */
38
+ export function unregisterTimer(id) {
39
+ const entry = activeTimers.get(id);
40
+ if (entry) {
41
+ clearInterval(entry.timerId);
42
+ activeTimers.delete(id);
43
+ return true;
44
+ }
45
+ return false;
46
+ }
47
+ /**
48
+ * Get all timer IDs for a specific workflow
49
+ */
50
+ export function getTimerIdsForWorkflow(workflowId) {
51
+ const ids = [];
52
+ for (const [id, entry] of activeTimers) {
53
+ if (entry.workflowId === workflowId) {
54
+ ids.push(id);
55
+ }
56
+ }
57
+ return ids;
58
+ }
59
+ /**
60
+ * Clear all timers for a specific workflow
61
+ */
62
+ export function clearTimersForWorkflow(workflowId) {
63
+ const ids = getTimerIdsForWorkflow(workflowId);
64
+ for (const id of ids) {
65
+ unregisterTimer(id);
66
+ }
67
+ return ids.length;
68
+ }
69
+ /**
70
+ * Get the count of all active timers
71
+ */
72
+ export function getActiveTimerCount() {
73
+ return activeTimers.size;
74
+ }
75
+ /**
76
+ * Clear all timers from all workflows
77
+ */
78
+ export function clearAllTimers() {
79
+ for (const [id, entry] of activeTimers) {
80
+ clearInterval(entry.timerId);
81
+ activeTimers.delete(id);
82
+ }
83
+ }
84
+ /**
85
+ * Timer registry object for external access
86
+ */
87
+ export const timerRegistry = {
88
+ register: registerTimer,
89
+ unregister: unregisterTimer,
90
+ getTimerIdsForWorkflow,
91
+ clearForWorkflow: clearTimersForWorkflow,
92
+ getActiveCount: getActiveTimerCount,
93
+ clearAll: clearAllTimers,
94
+ getAll: () => Array.from(activeTimers.entries()),
95
+ };
96
+ let globalRegistrationEnabled = false;
97
+ function registerGlobalFunctions(target) {
98
+ ;
99
+ target['getActiveWorkflowTimerCount'] =
100
+ getActiveTimerCount;
101
+ target['clearAllWorkflowTimers'] = clearAllTimers;
102
+ }
103
+ /**
104
+ * Enable global timer registry functions.
105
+ *
106
+ * This opt-in function registers `getActiveWorkflowTimerCount` and `clearAllWorkflowTimers`
107
+ * on the global scope for debugging and cleanup purposes.
108
+ *
109
+ * Call this function explicitly if you need global access to timer management:
110
+ *
111
+ * @example
112
+ * ```ts
113
+ * import { enableGlobalTimerRegistry } from 'ai-workflows'
114
+ *
115
+ * // Enable global registration
116
+ * enableGlobalTimerRegistry()
117
+ *
118
+ * // Now these are available globally:
119
+ * // globalThis.getActiveWorkflowTimerCount()
120
+ * // globalThis.clearAllWorkflowTimers()
121
+ * ```
122
+ */
123
+ export function enableGlobalTimerRegistry() {
124
+ if (globalRegistrationEnabled)
125
+ return;
126
+ globalRegistrationEnabled = true;
127
+ // Register on globalThis (standard)
128
+ if (typeof globalThis !== 'undefined') {
129
+ registerGlobalFunctions(globalThis);
130
+ }
131
+ // Also register on global (Node.js specific, used in some test environments)
132
+ if (typeof global !== 'undefined' && global !== globalThis) {
133
+ registerGlobalFunctions(global);
134
+ }
135
+ }
136
+ /**
137
+ * Check if global timer registry is enabled
138
+ */
139
+ export function isGlobalTimerRegistryEnabled() {
140
+ return globalRegistrationEnabled;
141
+ }
142
+ // Register process exit handlers for cleanup
143
+ let cleanupRegistered = false;
144
+ export function registerProcessCleanup() {
145
+ if (cleanupRegistered)
146
+ return;
147
+ cleanupRegistered = true;
148
+ const cleanup = () => {
149
+ clearAllTimers();
150
+ };
151
+ process.on('exit', cleanup);
152
+ process.on('beforeExit', cleanup);
153
+ }
154
+ //# sourceMappingURL=timer-registry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"timer-registry.js","sourceRoot":"","sources":["../src/timer-registry.ts"],"names":[],"mappings":"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"}