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,149 @@
1
+ /**
2
+ * Cascade Context - Correlation IDs and step metadata for workflow execution
3
+ *
4
+ * Provides distributed tracing support with:
5
+ * - Unique correlation IDs per cascade
6
+ * - Step timing metadata (started_at, completed_at, duration)
7
+ * - Cascade path recording
8
+ * - Context inheritance for nested operations
9
+ * - Serialization for distributed systems
10
+ * - W3C Trace Context compatibility
11
+ */
12
+ /**
13
+ * Step status in the cascade
14
+ */
15
+ export type StepStatus = 'running' | 'completed' | 'failed';
16
+ /**
17
+ * 5W+H Event structure
18
+ */
19
+ export interface FiveWHEvent {
20
+ who: string;
21
+ what: string;
22
+ when: number;
23
+ where: string;
24
+ why?: string;
25
+ how: {
26
+ duration?: number;
27
+ status: StepStatus;
28
+ metadata?: Record<string, unknown>;
29
+ };
30
+ }
31
+ /**
32
+ * Cascade step with timing and metadata
33
+ */
34
+ export interface CascadeStep {
35
+ /** Step name */
36
+ name: string;
37
+ /** When the step started (unix timestamp ms) */
38
+ startedAt: number;
39
+ /** When the step completed (unix timestamp ms) */
40
+ completedAt?: number;
41
+ /** Duration in milliseconds */
42
+ duration?: number;
43
+ /** Current status */
44
+ status: StepStatus;
45
+ /** Error if failed */
46
+ error?: Error;
47
+ /** Additional metadata */
48
+ metadata?: Record<string, unknown>;
49
+ /** Mark step as completed */
50
+ complete: () => void;
51
+ /** Mark step as failed */
52
+ fail: (error: Error) => void;
53
+ /** Add metadata to the step */
54
+ addMetadata: (data: Record<string, unknown>) => void;
55
+ /** Convert step to 5W+H event format */
56
+ to5WHEvent: () => FiveWHEvent;
57
+ }
58
+ /**
59
+ * Serialized cascade step (for transmission/storage)
60
+ */
61
+ export interface SerializedCascadeStep {
62
+ name: string;
63
+ startedAt: number;
64
+ completedAt?: number;
65
+ duration?: number;
66
+ status: StepStatus;
67
+ metadata?: Record<string, unknown>;
68
+ }
69
+ /**
70
+ * W3C Trace Context
71
+ */
72
+ export interface TraceContext {
73
+ traceparent: string;
74
+ tracestate?: string;
75
+ }
76
+ /**
77
+ * Serialized cascade context
78
+ */
79
+ export interface SerializedCascadeContext {
80
+ correlationId: string;
81
+ spanId: string;
82
+ parentId?: string;
83
+ name?: string;
84
+ depth: number;
85
+ steps: SerializedCascadeStep[];
86
+ path: string[];
87
+ createdAt: number;
88
+ }
89
+ /**
90
+ * Cascade context for tracking workflow execution
91
+ */
92
+ export interface CascadeContext {
93
+ /** Unique correlation ID for this cascade (propagates to children) */
94
+ correlationId: string;
95
+ /** Unique span ID for this context */
96
+ spanId: string;
97
+ /** Parent span ID (if this is a child context) */
98
+ parentId?: string;
99
+ /** Name of this cascade/context */
100
+ name?: string;
101
+ /** Depth in the context hierarchy (0 = root) */
102
+ depth: number;
103
+ /** Steps recorded in this context */
104
+ steps: CascadeStep[];
105
+ /** Path of step names in this context */
106
+ path: string[];
107
+ /** Full path including parent context steps */
108
+ fullPath: string[];
109
+ /** When the context was created */
110
+ createdAt: number;
111
+ /** Parent context reference */
112
+ parent?: CascadeContext;
113
+ /** Serialize context for transmission */
114
+ serialize: () => SerializedCascadeContext;
115
+ /** Format context as readable string */
116
+ format: () => string;
117
+ /** Format as tree including parent contexts */
118
+ formatTree: () => string;
119
+ /** Convert to W3C Trace Context format */
120
+ toTraceContext: () => TraceContext;
121
+ }
122
+ /**
123
+ * Options for creating a cascade context
124
+ */
125
+ export interface CascadeContextOptions {
126
+ /** Custom correlation ID (auto-generated if not provided) */
127
+ correlationId?: string;
128
+ /** Parent context (for nested operations) */
129
+ parent?: CascadeContext;
130
+ /** Name for this cascade */
131
+ name?: string;
132
+ /** Restore from serialized format */
133
+ fromSerialized?: SerializedCascadeContext;
134
+ /** Restore from W3C trace context */
135
+ fromTraceContext?: TraceContext;
136
+ }
137
+ /**
138
+ * Create a cascade context for tracking workflow execution
139
+ */
140
+ export declare function createCascadeContext(options?: CascadeContextOptions): CascadeContext;
141
+ /**
142
+ * Record a step in the cascade context
143
+ */
144
+ export declare function recordStep(ctx: CascadeContext, name: string, metadata?: Record<string, unknown>): CascadeStep;
145
+ /**
146
+ * Execute a callback with cascade context
147
+ */
148
+ export declare function withCascadeContext<T>(callback: (ctx: CascadeContext) => Promise<T>, options?: CascadeContextOptions): Promise<T>;
149
+ //# sourceMappingURL=cascade-context.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cascade-context.d.ts","sourceRoot":"","sources":["../src/cascade-context.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,324 @@
1
+ /**
2
+ * Cascade Context - Correlation IDs and step metadata for workflow execution
3
+ *
4
+ * Provides distributed tracing support with:
5
+ * - Unique correlation IDs per cascade
6
+ * - Step timing metadata (started_at, completed_at, duration)
7
+ * - Cascade path recording
8
+ * - Context inheritance for nested operations
9
+ * - Serialization for distributed systems
10
+ * - W3C Trace Context compatibility
11
+ */
12
+ /**
13
+ * Generate a UUID v4
14
+ */
15
+ function generateUUID() {
16
+ // Use crypto.randomUUID if available, otherwise fallback
17
+ if (typeof crypto !== 'undefined' && crypto.randomUUID) {
18
+ return crypto.randomUUID();
19
+ }
20
+ // Fallback UUID v4 generation
21
+ return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, (c) => {
22
+ const r = (Math.random() * 16) | 0;
23
+ const v = c === 'x' ? r : (r & 0x3) | 0x8;
24
+ return v.toString(16);
25
+ });
26
+ }
27
+ /**
28
+ * Generate a span ID (16 hex characters)
29
+ */
30
+ function generateSpanId() {
31
+ if (typeof crypto !== 'undefined' && crypto.randomUUID) {
32
+ return crypto.randomUUID().replace(/-/g, '').slice(0, 16);
33
+ }
34
+ return 'xxxxxxxxxxxxxxxx'.replace(/x/g, () => {
35
+ return ((Math.random() * 16) | 0).toString(16);
36
+ });
37
+ }
38
+ /**
39
+ * Parse W3C traceparent header
40
+ */
41
+ function parseTraceparent(traceparent) {
42
+ const parts = traceparent.split('-');
43
+ if (parts.length !== 4)
44
+ return null;
45
+ return {
46
+ traceId: parts[1], // 32 hex chars
47
+ parentId: parts[2], // 16 hex chars
48
+ };
49
+ }
50
+ /**
51
+ * Convert correlation ID to trace ID format (32 hex chars)
52
+ */
53
+ function correlationIdToTraceId(correlationId) {
54
+ // Remove dashes and pad/truncate to 32 chars
55
+ const hex = correlationId.replace(/-/g, '');
56
+ return hex.slice(0, 32).padEnd(32, '0');
57
+ }
58
+ /**
59
+ * Convert trace ID to correlation ID format (UUID)
60
+ */
61
+ function traceIdToCorrelationId(traceId) {
62
+ // Convert 32 hex chars to UUID format
63
+ return `${traceId.slice(0, 8)}-${traceId.slice(8, 12)}-${traceId.slice(12, 16)}-${traceId.slice(16, 20)}-${traceId.slice(20, 32)}`;
64
+ }
65
+ /**
66
+ * Create a cascade context for tracking workflow execution
67
+ */
68
+ export function createCascadeContext(options = {}) {
69
+ const { parent, name, fromSerialized, fromTraceContext } = options;
70
+ // Handle restoration from serialized format
71
+ if (fromSerialized) {
72
+ const restoredSteps = fromSerialized.steps.map((s) => createRestoredStep(s, name));
73
+ const ctx = {
74
+ correlationId: fromSerialized.correlationId,
75
+ spanId: fromSerialized.spanId,
76
+ ...(fromSerialized.parentId !== undefined && { parentId: fromSerialized.parentId }),
77
+ ...(fromSerialized.name !== undefined && { name: fromSerialized.name }),
78
+ depth: fromSerialized.depth,
79
+ steps: restoredSteps,
80
+ path: fromSerialized.path,
81
+ createdAt: fromSerialized.createdAt,
82
+ get fullPath() {
83
+ return this.path;
84
+ },
85
+ serialize: () => serializeContext(ctx),
86
+ format: () => formatContext(ctx),
87
+ formatTree: () => formatContextTree(ctx),
88
+ toTraceContext: () => toTraceContext(ctx),
89
+ };
90
+ return ctx;
91
+ }
92
+ // Handle restoration from W3C trace context
93
+ if (fromTraceContext) {
94
+ const parsed = parseTraceparent(fromTraceContext.traceparent);
95
+ if (parsed) {
96
+ const correlationId = traceIdToCorrelationId(parsed.traceId);
97
+ const newSpanId = generateSpanId();
98
+ const ctx = {
99
+ correlationId,
100
+ spanId: newSpanId,
101
+ parentId: parsed.parentId,
102
+ ...(name !== undefined && { name }),
103
+ depth: 0,
104
+ steps: [],
105
+ path: [],
106
+ createdAt: Date.now(),
107
+ get fullPath() {
108
+ return this.path;
109
+ },
110
+ serialize: () => serializeContext(ctx),
111
+ format: () => formatContext(ctx),
112
+ formatTree: () => formatContextTree(ctx),
113
+ toTraceContext: () => toTraceContext(ctx),
114
+ };
115
+ return ctx;
116
+ }
117
+ }
118
+ // Determine correlation ID
119
+ let correlationId;
120
+ if (parent) {
121
+ correlationId = parent.correlationId;
122
+ }
123
+ else if (options.correlationId) {
124
+ correlationId = options.correlationId;
125
+ }
126
+ else {
127
+ correlationId = generateUUID();
128
+ }
129
+ const spanId = generateSpanId();
130
+ const parentId = parent?.spanId;
131
+ const depth = parent ? parent.depth + 1 : 0;
132
+ const createdAt = Date.now();
133
+ const steps = [];
134
+ const path = [];
135
+ const ctx = {
136
+ correlationId,
137
+ spanId,
138
+ ...(parentId !== undefined && { parentId }),
139
+ ...(name !== undefined && { name }),
140
+ depth,
141
+ steps,
142
+ path,
143
+ createdAt,
144
+ ...(parent !== undefined && { parent }),
145
+ get fullPath() {
146
+ if (this.parent) {
147
+ return [...this.parent.fullPath, ...this.path];
148
+ }
149
+ return this.path;
150
+ },
151
+ serialize: () => serializeContext(ctx),
152
+ format: () => formatContext(ctx),
153
+ formatTree: () => formatContextTree(ctx),
154
+ toTraceContext: () => toTraceContext(ctx),
155
+ };
156
+ return ctx;
157
+ }
158
+ /**
159
+ * Create a restored step from serialized data
160
+ */
161
+ function createRestoredStep(serialized, contextName) {
162
+ const step = {
163
+ name: serialized.name,
164
+ startedAt: serialized.startedAt,
165
+ ...(serialized.completedAt !== undefined && { completedAt: serialized.completedAt }),
166
+ ...(serialized.duration !== undefined && { duration: serialized.duration }),
167
+ status: serialized.status,
168
+ ...(serialized.metadata !== undefined && { metadata: { ...serialized.metadata } }),
169
+ complete: () => {
170
+ step.status = 'completed';
171
+ step.completedAt = Date.now();
172
+ step.duration = step.completedAt - step.startedAt;
173
+ },
174
+ fail: (error) => {
175
+ step.status = 'failed';
176
+ step.error = error;
177
+ step.completedAt = Date.now();
178
+ step.duration = step.completedAt - step.startedAt;
179
+ },
180
+ addMetadata: (data) => {
181
+ step.metadata = { ...step.metadata, ...data };
182
+ },
183
+ to5WHEvent: () => ({
184
+ who: step.metadata?.['actor'] || 'system',
185
+ what: step.metadata?.['action'] || step.name,
186
+ when: step.startedAt,
187
+ where: contextName || 'unknown',
188
+ ...(step.metadata?.['reason'] !== undefined && { why: step.metadata['reason'] }),
189
+ how: {
190
+ ...(step.duration !== undefined && { duration: step.duration }),
191
+ status: step.status,
192
+ ...(step.metadata !== undefined && { metadata: step.metadata }),
193
+ },
194
+ }),
195
+ };
196
+ return step;
197
+ }
198
+ /**
199
+ * Record a step in the cascade context
200
+ */
201
+ export function recordStep(ctx, name, metadata) {
202
+ const startedAt = Date.now();
203
+ const step = {
204
+ name,
205
+ startedAt,
206
+ status: 'running',
207
+ ...(metadata !== undefined && { metadata: { ...metadata } }),
208
+ complete: () => {
209
+ step.status = 'completed';
210
+ step.completedAt = Date.now();
211
+ step.duration = step.completedAt - step.startedAt;
212
+ ctx.path.push(name);
213
+ },
214
+ fail: (error) => {
215
+ step.status = 'failed';
216
+ step.error = error;
217
+ step.completedAt = Date.now();
218
+ step.duration = step.completedAt - step.startedAt;
219
+ },
220
+ addMetadata: (data) => {
221
+ step.metadata = { ...step.metadata, ...data };
222
+ },
223
+ to5WHEvent: () => ({
224
+ who: step.metadata?.['actor'] || 'system',
225
+ what: step.metadata?.['action'] || name,
226
+ when: startedAt,
227
+ where: ctx.name || 'cascade',
228
+ ...(step.metadata?.['reason'] !== undefined && { why: step.metadata['reason'] }),
229
+ how: {
230
+ ...(step.duration !== undefined && { duration: step.duration }),
231
+ status: step.status,
232
+ ...(step.metadata !== undefined && { metadata: step.metadata }),
233
+ },
234
+ }),
235
+ };
236
+ ctx.steps.push(step);
237
+ return step;
238
+ }
239
+ /**
240
+ * Execute a callback with cascade context
241
+ */
242
+ export async function withCascadeContext(callback, options = {}) {
243
+ const ctx = createCascadeContext(options);
244
+ return callback(ctx);
245
+ }
246
+ /**
247
+ * Serialize context for transmission/storage
248
+ */
249
+ function serializeContext(ctx) {
250
+ return {
251
+ correlationId: ctx.correlationId,
252
+ spanId: ctx.spanId,
253
+ ...(ctx.parentId !== undefined && { parentId: ctx.parentId }),
254
+ ...(ctx.name !== undefined && { name: ctx.name }),
255
+ depth: ctx.depth,
256
+ steps: ctx.steps.map((step) => ({
257
+ name: step.name,
258
+ startedAt: step.startedAt,
259
+ ...(step.completedAt !== undefined && { completedAt: step.completedAt }),
260
+ ...(step.duration !== undefined && { duration: step.duration }),
261
+ status: step.status,
262
+ ...(step.metadata !== undefined && { metadata: step.metadata }),
263
+ })),
264
+ path: ctx.path,
265
+ createdAt: ctx.createdAt,
266
+ };
267
+ }
268
+ /**
269
+ * Format context as readable string
270
+ */
271
+ function formatContext(ctx) {
272
+ const lines = [];
273
+ lines.push(`Cascade: ${ctx.name || 'unnamed'}`);
274
+ lines.push(` Correlation ID: ${ctx.correlationId}`);
275
+ lines.push(` Span ID: ${ctx.spanId}`);
276
+ if (ctx.parentId) {
277
+ lines.push(` Parent ID: ${ctx.parentId}`);
278
+ }
279
+ lines.push(` Depth: ${ctx.depth}`);
280
+ lines.push(` Steps:`);
281
+ for (const step of ctx.steps) {
282
+ const status = step.status === 'completed' ? '[OK]' : step.status === 'failed' ? '[FAIL]' : '[...]';
283
+ const duration = step.duration ? ` (${step.duration}ms)` : '';
284
+ lines.push(` ${status} ${step.name}${duration}`);
285
+ }
286
+ return lines.join('\n');
287
+ }
288
+ /**
289
+ * Format context as tree including parent contexts
290
+ */
291
+ function formatContextTree(ctx) {
292
+ const lines = [];
293
+ // Build tree from root
294
+ const contexts = [];
295
+ let current = ctx;
296
+ while (current) {
297
+ contexts.unshift(current);
298
+ current = current.parent;
299
+ }
300
+ for (let i = 0; i < contexts.length; i++) {
301
+ const context = contexts[i];
302
+ const indent = ' '.repeat(i);
303
+ lines.push(`${indent}${context.name || 'cascade'} (depth: ${context.depth})`);
304
+ for (const step of context.steps) {
305
+ const status = step.status === 'completed' ? '[OK]' : step.status === 'failed' ? '[FAIL]' : '[...]';
306
+ const duration = step.duration ? ` (${step.duration}ms)` : '';
307
+ lines.push(`${indent} ${status} ${step.name}${duration}`);
308
+ }
309
+ }
310
+ return lines.join('\n');
311
+ }
312
+ /**
313
+ * Convert to W3C Trace Context format
314
+ */
315
+ function toTraceContext(ctx) {
316
+ const version = '00';
317
+ const traceId = correlationIdToTraceId(ctx.correlationId);
318
+ const spanId = ctx.spanId.padEnd(16, '0').slice(0, 16);
319
+ const flags = '01'; // sampled
320
+ return {
321
+ traceparent: `${version}-${traceId}-${spanId}-${flags}`,
322
+ };
323
+ }
324
+ //# sourceMappingURL=cascade-context.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cascade-context.js","sourceRoot":"","sources":["../src/cascade-context.ts"],"names":[],"mappings":"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"}