ai-workflows 2.1.1 → 2.1.3
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/.turbo/turbo-test.log +165 -3
- package/CHANGELOG.md +10 -1
- package/LICENSE +21 -0
- package/README.md +303 -184
- package/dist/barrier.d.ts +153 -0
- package/dist/barrier.d.ts.map +1 -0
- package/dist/barrier.js +339 -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 +4 -1
- package/dist/context.js.map +1 -1
- 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/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 +6 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +10 -0
- package/dist/index.js.map +1 -1
- package/dist/on.d.ts +35 -10
- package/dist/on.d.ts.map +1 -1
- package/dist/on.js +52 -18
- package/dist/on.js.map +1 -1
- package/dist/timer-registry.d.ts +52 -0
- package/dist/timer-registry.d.ts.map +1 -0
- package/dist/timer-registry.js +120 -0
- package/dist/timer-registry.js.map +1 -0
- package/dist/types.d.ts +88 -0
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js +17 -1
- package/dist/types.js.map +1 -1
- package/dist/workflow.d.ts.map +1 -1
- package/dist/workflow.js +15 -11
- package/dist/workflow.js.map +1 -1
- package/package.json +11 -11
- package/src/barrier.ts +466 -0
- package/src/cascade-context.ts +488 -0
- package/src/cascade-executor.ts +587 -0
- package/src/context.ts +12 -7
- package/src/dependency-graph.ts +518 -0
- package/src/every.ts +104 -35
- package/src/graph/index.ts +19 -0
- package/src/graph/topological-sort.ts +414 -0
- package/src/index.ts +78 -0
- package/src/on.ts +81 -25
- package/src/timer-registry.ts +145 -0
- package/src/types.ts +121 -0
- package/src/workflow.ts +23 -16
- package/test/barrier-join.test.ts +434 -0
- package/test/barrier-unhandled-rejections.test.ts +359 -0
- package/test/cascade-context.test.ts +390 -0
- package/test/cascade-executor.test.ts +859 -0
- package/test/dependency-graph.test.ts +512 -0
- package/test/graph/topological-sort.test.ts +586 -0
- package/test/schedule-timer-cleanup.test.ts +344 -0
- package/test/send-race-conditions.test.ts +410 -0
- package/test/type-safety-every.test.ts +303 -0
|
@@ -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
|
+
parentId: fromSerialized.parentId,
|
|
77
|
+
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,
|
|
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,
|
|
139
|
+
name,
|
|
140
|
+
depth,
|
|
141
|
+
steps,
|
|
142
|
+
path,
|
|
143
|
+
createdAt,
|
|
144
|
+
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
|
+
completedAt: serialized.completedAt,
|
|
166
|
+
duration: serialized.duration,
|
|
167
|
+
status: serialized.status,
|
|
168
|
+
metadata: serialized.metadata ? { ...serialized.metadata } : undefined,
|
|
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
|
+
why: step.metadata?.reason,
|
|
189
|
+
how: {
|
|
190
|
+
duration: step.duration,
|
|
191
|
+
status: step.status,
|
|
192
|
+
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: metadata ? { ...metadata } : undefined,
|
|
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
|
+
why: step.metadata?.reason,
|
|
229
|
+
how: {
|
|
230
|
+
duration: step.duration,
|
|
231
|
+
status: step.status,
|
|
232
|
+
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
|
+
parentId: ctx.parentId,
|
|
254
|
+
name: ctx.name,
|
|
255
|
+
depth: ctx.depth,
|
|
256
|
+
steps: ctx.steps.map((step) => ({
|
|
257
|
+
name: step.name,
|
|
258
|
+
startedAt: step.startedAt,
|
|
259
|
+
completedAt: step.completedAt,
|
|
260
|
+
duration: step.duration,
|
|
261
|
+
status: step.status,
|
|
262
|
+
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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"}
|
|
@@ -0,0 +1,196 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* CascadeExecutor - Code -> Generative -> Agentic -> Human escalation pattern
|
|
3
|
+
*
|
|
4
|
+
* Implements a tiered execution strategy that tries deterministic code first,
|
|
5
|
+
* then escalates to AI-powered solutions, and finally to human-in-the-loop
|
|
6
|
+
* if all automated approaches fail.
|
|
7
|
+
*
|
|
8
|
+
* Features:
|
|
9
|
+
* - Tier escalation on failure
|
|
10
|
+
* - Per-tier and total cascade timeouts
|
|
11
|
+
* - 5W+H event emission for audit trails
|
|
12
|
+
* - Context propagation through tiers
|
|
13
|
+
* - Retry support per tier
|
|
14
|
+
* - Custom skip conditions
|
|
15
|
+
*
|
|
16
|
+
* @packageDocumentation
|
|
17
|
+
*/
|
|
18
|
+
import { type CascadeContext, type FiveWHEvent } from './cascade-context.js';
|
|
19
|
+
/**
|
|
20
|
+
* Ordered list of capability tiers
|
|
21
|
+
*/
|
|
22
|
+
export declare const TIER_ORDER: readonly ["code", "generative", "agentic", "human"];
|
|
23
|
+
/**
|
|
24
|
+
* Default timeouts per tier (from capability-tiers)
|
|
25
|
+
*/
|
|
26
|
+
export declare const DEFAULT_TIER_TIMEOUTS: Record<CapabilityTier, number>;
|
|
27
|
+
/**
|
|
28
|
+
* Capability tier levels
|
|
29
|
+
*/
|
|
30
|
+
export type CapabilityTier = 'code' | 'generative' | 'agentic' | 'human';
|
|
31
|
+
/**
|
|
32
|
+
* Context passed to tier handlers
|
|
33
|
+
*/
|
|
34
|
+
export interface TierContext {
|
|
35
|
+
/** Correlation ID for tracing */
|
|
36
|
+
correlationId: string;
|
|
37
|
+
/** Current tier being executed */
|
|
38
|
+
tier: CapabilityTier;
|
|
39
|
+
/** Input data */
|
|
40
|
+
input: unknown;
|
|
41
|
+
/** Cascade context */
|
|
42
|
+
cascadeContext: CascadeContext;
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Handler for a specific tier
|
|
46
|
+
*/
|
|
47
|
+
export interface TierHandler<T = unknown> {
|
|
48
|
+
/** Handler name for debugging */
|
|
49
|
+
name: string;
|
|
50
|
+
/** Execute the tier logic */
|
|
51
|
+
execute: (input: unknown, context: TierContext) => Promise<T>;
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* Retry configuration per tier
|
|
55
|
+
*/
|
|
56
|
+
export interface TierRetryConfig {
|
|
57
|
+
/** Maximum number of retries */
|
|
58
|
+
maxRetries: number;
|
|
59
|
+
/** Base delay in milliseconds */
|
|
60
|
+
baseDelay: number;
|
|
61
|
+
/** Multiplier for exponential backoff */
|
|
62
|
+
multiplier?: number;
|
|
63
|
+
}
|
|
64
|
+
/**
|
|
65
|
+
* Result from a single tier execution
|
|
66
|
+
*/
|
|
67
|
+
export interface TierResult {
|
|
68
|
+
/** Tier that was executed */
|
|
69
|
+
tier: CapabilityTier;
|
|
70
|
+
/** Whether the tier succeeded */
|
|
71
|
+
success: boolean;
|
|
72
|
+
/** Result value (if success) */
|
|
73
|
+
value?: unknown;
|
|
74
|
+
/** Error (if failure) */
|
|
75
|
+
error?: Error;
|
|
76
|
+
/** Whether the tier timed out */
|
|
77
|
+
timedOut?: boolean;
|
|
78
|
+
/** Duration in milliseconds */
|
|
79
|
+
duration: number;
|
|
80
|
+
}
|
|
81
|
+
/**
|
|
82
|
+
* Metrics from cascade execution
|
|
83
|
+
*/
|
|
84
|
+
export interface CascadeMetrics {
|
|
85
|
+
/** Total execution duration */
|
|
86
|
+
totalDuration: number;
|
|
87
|
+
/** Duration per tier */
|
|
88
|
+
tierDurations: Partial<Record<CapabilityTier, number>>;
|
|
89
|
+
/** Number of retries per tier */
|
|
90
|
+
tierRetries?: Partial<Record<CapabilityTier, number>>;
|
|
91
|
+
}
|
|
92
|
+
/**
|
|
93
|
+
* Result from cascade execution
|
|
94
|
+
*/
|
|
95
|
+
export interface CascadeResult<T = unknown> {
|
|
96
|
+
/** Final result value */
|
|
97
|
+
value: T;
|
|
98
|
+
/** Tier that produced the result */
|
|
99
|
+
tier: CapabilityTier;
|
|
100
|
+
/** History of all tier executions */
|
|
101
|
+
history: TierResult[];
|
|
102
|
+
/** Tiers that were skipped */
|
|
103
|
+
skippedTiers: CapabilityTier[];
|
|
104
|
+
/** Cascade context with tracing info */
|
|
105
|
+
context: CascadeContext;
|
|
106
|
+
/** Execution metrics */
|
|
107
|
+
metrics: CascadeMetrics;
|
|
108
|
+
}
|
|
109
|
+
/**
|
|
110
|
+
* Skip condition function
|
|
111
|
+
*/
|
|
112
|
+
export type SkipCondition = (input: unknown) => boolean;
|
|
113
|
+
/**
|
|
114
|
+
* Configuration for CascadeExecutor
|
|
115
|
+
*/
|
|
116
|
+
export interface CascadeConfig<T = unknown> {
|
|
117
|
+
/** Tier handlers */
|
|
118
|
+
tiers: Partial<Record<CapabilityTier, TierHandler<T>>>;
|
|
119
|
+
/** Per-tier timeouts in milliseconds */
|
|
120
|
+
timeouts?: Partial<Record<CapabilityTier, number>>;
|
|
121
|
+
/** Total cascade timeout in milliseconds */
|
|
122
|
+
totalTimeout?: number;
|
|
123
|
+
/** Use default timeouts from capability-tiers */
|
|
124
|
+
useDefaultTimeouts?: boolean;
|
|
125
|
+
/** Actor identifier for 5W+H events */
|
|
126
|
+
actor?: string;
|
|
127
|
+
/** Cascade name for 5W+H events */
|
|
128
|
+
cascadeName?: string;
|
|
129
|
+
/** Event callback for 5W+H events */
|
|
130
|
+
onEvent?: (event: FiveWHEvent) => void;
|
|
131
|
+
/** Skip conditions per tier */
|
|
132
|
+
skipConditions?: Partial<Record<CapabilityTier, SkipCondition>>;
|
|
133
|
+
/** Retry configuration per tier */
|
|
134
|
+
retryConfig?: Partial<Record<CapabilityTier, TierRetryConfig>>;
|
|
135
|
+
}
|
|
136
|
+
/**
|
|
137
|
+
* Error thrown when cascade times out
|
|
138
|
+
*/
|
|
139
|
+
export declare class CascadeTimeoutError extends Error {
|
|
140
|
+
readonly timeout: number;
|
|
141
|
+
readonly elapsed: number;
|
|
142
|
+
constructor(timeout: number, elapsed: number);
|
|
143
|
+
}
|
|
144
|
+
/**
|
|
145
|
+
* Error thrown when a tier is skipped
|
|
146
|
+
*/
|
|
147
|
+
export declare class TierSkippedError extends Error {
|
|
148
|
+
readonly tier: CapabilityTier;
|
|
149
|
+
readonly reason: string;
|
|
150
|
+
constructor(tier: CapabilityTier, reason: string);
|
|
151
|
+
}
|
|
152
|
+
/**
|
|
153
|
+
* Error thrown when all tiers fail
|
|
154
|
+
*/
|
|
155
|
+
export declare class AllTiersFailedError extends Error {
|
|
156
|
+
readonly history: TierResult[];
|
|
157
|
+
constructor(history: TierResult[]);
|
|
158
|
+
}
|
|
159
|
+
/**
|
|
160
|
+
* CascadeExecutor implements the code -> generative -> agentic -> human pattern
|
|
161
|
+
*/
|
|
162
|
+
export declare class CascadeExecutor<T = unknown> {
|
|
163
|
+
private readonly config;
|
|
164
|
+
private readonly actor;
|
|
165
|
+
private readonly cascadeName;
|
|
166
|
+
constructor(config: CascadeConfig<T>);
|
|
167
|
+
/**
|
|
168
|
+
* Execute the cascade
|
|
169
|
+
*/
|
|
170
|
+
execute(input: unknown): Promise<CascadeResult<T>>;
|
|
171
|
+
/**
|
|
172
|
+
* Execute a single tier with timeout and retry support
|
|
173
|
+
*/
|
|
174
|
+
private executeTier;
|
|
175
|
+
/**
|
|
176
|
+
* Execute a function with a timeout
|
|
177
|
+
*/
|
|
178
|
+
private executeWithTimeout;
|
|
179
|
+
/**
|
|
180
|
+
* Get timeout for a tier
|
|
181
|
+
*/
|
|
182
|
+
private getTierTimeout;
|
|
183
|
+
/**
|
|
184
|
+
* Get the next configured tier after the given tier
|
|
185
|
+
*/
|
|
186
|
+
private getNextConfiguredTier;
|
|
187
|
+
/**
|
|
188
|
+
* Emit a 5W+H event
|
|
189
|
+
*/
|
|
190
|
+
private emitEvent;
|
|
191
|
+
/**
|
|
192
|
+
* Sleep for a given duration
|
|
193
|
+
*/
|
|
194
|
+
private sleep;
|
|
195
|
+
}
|
|
196
|
+
//# sourceMappingURL=cascade-executor.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cascade-executor.d.ts","sourceRoot":"","sources":["../src/cascade-executor.ts"],"names":[],"mappings":"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"}
|