@cogitator-ai/workflows 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +97 -0
- package/dist/builder.d.ts +39 -0
- package/dist/builder.d.ts.map +1 -0
- package/dist/builder.js +224 -0
- package/dist/builder.js.map +1 -0
- package/dist/checkpoint.d.ts +33 -0
- package/dist/checkpoint.d.ts.map +1 -0
- package/dist/checkpoint.js +108 -0
- package/dist/checkpoint.js.map +1 -0
- package/dist/executor.d.ts +24 -0
- package/dist/executor.d.ts.map +1 -0
- package/dist/executor.js +207 -0
- package/dist/executor.js.map +1 -0
- package/dist/human/approval-store.d.ts +95 -0
- package/dist/human/approval-store.d.ts.map +1 -0
- package/dist/human/approval-store.js +377 -0
- package/dist/human/approval-store.js.map +1 -0
- package/dist/human/human-node.d.ts +104 -0
- package/dist/human/human-node.d.ts.map +1 -0
- package/dist/human/human-node.js +342 -0
- package/dist/human/human-node.js.map +1 -0
- package/dist/human/index.d.ts +17 -0
- package/dist/human/index.d.ts.map +1 -0
- package/dist/human/index.js +17 -0
- package/dist/human/index.js.map +1 -0
- package/dist/human/notifiers.d.ts +85 -0
- package/dist/human/notifiers.d.ts.map +1 -0
- package/dist/human/notifiers.js +289 -0
- package/dist/human/notifiers.js.map +1 -0
- package/dist/index.d.ts +32 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +19 -0
- package/dist/index.js.map +1 -0
- package/dist/manager/index.d.ts +19 -0
- package/dist/manager/index.d.ts.map +1 -0
- package/dist/manager/index.js +17 -0
- package/dist/manager/index.js.map +1 -0
- package/dist/manager/run-store.d.ts +78 -0
- package/dist/manager/run-store.d.ts.map +1 -0
- package/dist/manager/run-store.js +390 -0
- package/dist/manager/run-store.js.map +1 -0
- package/dist/manager/scheduler.d.ts +159 -0
- package/dist/manager/scheduler.d.ts.map +1 -0
- package/dist/manager/scheduler.js +355 -0
- package/dist/manager/scheduler.js.map +1 -0
- package/dist/manager/workflow-manager.d.ts +114 -0
- package/dist/manager/workflow-manager.d.ts.map +1 -0
- package/dist/manager/workflow-manager.js +460 -0
- package/dist/manager/workflow-manager.js.map +1 -0
- package/dist/nodes/agent.d.ts +24 -0
- package/dist/nodes/agent.d.ts.map +1 -0
- package/dist/nodes/agent.js +37 -0
- package/dist/nodes/agent.js.map +1 -0
- package/dist/nodes/base.d.ts +12 -0
- package/dist/nodes/base.d.ts.map +1 -0
- package/dist/nodes/base.js +5 -0
- package/dist/nodes/base.js.map +1 -0
- package/dist/nodes/function.d.ts +27 -0
- package/dist/nodes/function.d.ts.map +1 -0
- package/dist/nodes/function.js +29 -0
- package/dist/nodes/function.js.map +1 -0
- package/dist/nodes/index.d.ts +8 -0
- package/dist/nodes/index.d.ts.map +1 -0
- package/dist/nodes/index.js +8 -0
- package/dist/nodes/index.js.map +1 -0
- package/dist/nodes/tool.d.ts +19 -0
- package/dist/nodes/tool.d.ts.map +1 -0
- package/dist/nodes/tool.js +26 -0
- package/dist/nodes/tool.js.map +1 -0
- package/dist/observability/exporters.d.ts +93 -0
- package/dist/observability/exporters.d.ts.map +1 -0
- package/dist/observability/exporters.js +330 -0
- package/dist/observability/exporters.js.map +1 -0
- package/dist/observability/index.d.ts +17 -0
- package/dist/observability/index.d.ts.map +1 -0
- package/dist/observability/index.js +17 -0
- package/dist/observability/index.js.map +1 -0
- package/dist/observability/metrics.d.ts +114 -0
- package/dist/observability/metrics.d.ts.map +1 -0
- package/dist/observability/metrics.js +435 -0
- package/dist/observability/metrics.js.map +1 -0
- package/dist/observability/span-attributes.d.ts +95 -0
- package/dist/observability/span-attributes.d.ts.map +1 -0
- package/dist/observability/span-attributes.js +142 -0
- package/dist/observability/span-attributes.js.map +1 -0
- package/dist/observability/tracer.d.ts +110 -0
- package/dist/observability/tracer.d.ts.map +1 -0
- package/dist/observability/tracer.js +409 -0
- package/dist/observability/tracer.js.map +1 -0
- package/dist/patterns/index.d.ts +15 -0
- package/dist/patterns/index.d.ts.map +1 -0
- package/dist/patterns/index.js +15 -0
- package/dist/patterns/index.js.map +1 -0
- package/dist/patterns/map-reduce.d.ts +223 -0
- package/dist/patterns/map-reduce.d.ts.map +1 -0
- package/dist/patterns/map-reduce.js +378 -0
- package/dist/patterns/map-reduce.js.map +1 -0
- package/dist/saga/circuit-breaker.d.ts +153 -0
- package/dist/saga/circuit-breaker.d.ts.map +1 -0
- package/dist/saga/circuit-breaker.js +306 -0
- package/dist/saga/circuit-breaker.js.map +1 -0
- package/dist/saga/compensation.d.ts +134 -0
- package/dist/saga/compensation.d.ts.map +1 -0
- package/dist/saga/compensation.js +240 -0
- package/dist/saga/compensation.js.map +1 -0
- package/dist/saga/dead-letter.d.ts +113 -0
- package/dist/saga/dead-letter.d.ts.map +1 -0
- package/dist/saga/dead-letter.js +307 -0
- package/dist/saga/dead-letter.js.map +1 -0
- package/dist/saga/idempotency.d.ts +95 -0
- package/dist/saga/idempotency.d.ts.map +1 -0
- package/dist/saga/idempotency.js +266 -0
- package/dist/saga/idempotency.js.map +1 -0
- package/dist/saga/index.d.ts +16 -0
- package/dist/saga/index.d.ts.map +1 -0
- package/dist/saga/index.js +16 -0
- package/dist/saga/index.js.map +1 -0
- package/dist/saga/retry.d.ts +59 -0
- package/dist/saga/retry.d.ts.map +1 -0
- package/dist/saga/retry.js +222 -0
- package/dist/saga/retry.js.map +1 -0
- package/dist/scheduler.d.ts +37 -0
- package/dist/scheduler.d.ts.map +1 -0
- package/dist/scheduler.js +151 -0
- package/dist/scheduler.js.map +1 -0
- package/dist/subworkflows/index.d.ts +16 -0
- package/dist/subworkflows/index.d.ts.map +1 -0
- package/dist/subworkflows/index.js +16 -0
- package/dist/subworkflows/index.js.map +1 -0
- package/dist/subworkflows/parallel-subworkflows.d.ts +139 -0
- package/dist/subworkflows/parallel-subworkflows.d.ts.map +1 -0
- package/dist/subworkflows/parallel-subworkflows.js +270 -0
- package/dist/subworkflows/parallel-subworkflows.js.map +1 -0
- package/dist/subworkflows/subworkflow-node.d.ts +136 -0
- package/dist/subworkflows/subworkflow-node.d.ts.map +1 -0
- package/dist/subworkflows/subworkflow-node.js +164 -0
- package/dist/subworkflows/subworkflow-node.js.map +1 -0
- package/dist/timers/cron-parser.d.ts +110 -0
- package/dist/timers/cron-parser.d.ts.map +1 -0
- package/dist/timers/cron-parser.js +412 -0
- package/dist/timers/cron-parser.js.map +1 -0
- package/dist/timers/index.d.ts +18 -0
- package/dist/timers/index.d.ts.map +1 -0
- package/dist/timers/index.js +18 -0
- package/dist/timers/index.js.map +1 -0
- package/dist/timers/timer-manager.d.ts +219 -0
- package/dist/timers/timer-manager.d.ts.map +1 -0
- package/dist/timers/timer-manager.js +351 -0
- package/dist/timers/timer-manager.js.map +1 -0
- package/dist/timers/timer-node.d.ts +144 -0
- package/dist/timers/timer-node.d.ts.map +1 -0
- package/dist/timers/timer-node.js +246 -0
- package/dist/timers/timer-node.js.map +1 -0
- package/dist/timers/timer-store.d.ts +90 -0
- package/dist/timers/timer-store.d.ts.map +1 -0
- package/dist/timers/timer-store.js +357 -0
- package/dist/timers/timer-store.js.map +1 -0
- package/dist/triggers/cron-trigger.d.ts +102 -0
- package/dist/triggers/cron-trigger.d.ts.map +1 -0
- package/dist/triggers/cron-trigger.js +309 -0
- package/dist/triggers/cron-trigger.js.map +1 -0
- package/dist/triggers/index.d.ts +14 -0
- package/dist/triggers/index.d.ts.map +1 -0
- package/dist/triggers/index.js +10 -0
- package/dist/triggers/index.js.map +1 -0
- package/dist/triggers/rate-limiter.d.ts +130 -0
- package/dist/triggers/rate-limiter.d.ts.map +1 -0
- package/dist/triggers/rate-limiter.js +294 -0
- package/dist/triggers/rate-limiter.js.map +1 -0
- package/dist/triggers/trigger-manager.d.ts +166 -0
- package/dist/triggers/trigger-manager.d.ts.map +1 -0
- package/dist/triggers/trigger-manager.js +436 -0
- package/dist/triggers/trigger-manager.js.map +1 -0
- package/dist/triggers/webhook-trigger.d.ts +150 -0
- package/dist/triggers/webhook-trigger.d.ts.map +1 -0
- package/dist/triggers/webhook-trigger.js +452 -0
- package/dist/triggers/webhook-trigger.js.map +1 -0
- package/package.json +44 -0
|
@@ -0,0 +1,222 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Retry module with exponential backoff and jitter
|
|
3
|
+
*
|
|
4
|
+
* Features:
|
|
5
|
+
* - Configurable backoff strategies (constant, linear, exponential)
|
|
6
|
+
* - Jitter to prevent thundering herd
|
|
7
|
+
* - Retryable error detection
|
|
8
|
+
* - Per-attempt hooks for logging/metrics
|
|
9
|
+
*/
|
|
10
|
+
const DEFAULT_MAX_RETRIES = 3;
|
|
11
|
+
const DEFAULT_INITIAL_DELAY = 1000;
|
|
12
|
+
const DEFAULT_MAX_DELAY = 30000;
|
|
13
|
+
const DEFAULT_BACKOFF = 'exponential';
|
|
14
|
+
const DEFAULT_MULTIPLIER = 2;
|
|
15
|
+
const DEFAULT_JITTER = 0.1;
|
|
16
|
+
/**
|
|
17
|
+
* Default retryable error checker - retries on network/timeout errors
|
|
18
|
+
*/
|
|
19
|
+
function defaultIsRetryable(error) {
|
|
20
|
+
const retryableErrors = [
|
|
21
|
+
'ECONNRESET',
|
|
22
|
+
'ECONNREFUSED',
|
|
23
|
+
'ETIMEDOUT',
|
|
24
|
+
'ENOTFOUND',
|
|
25
|
+
'ENETUNREACH',
|
|
26
|
+
'EAI_AGAIN',
|
|
27
|
+
'EPIPE',
|
|
28
|
+
];
|
|
29
|
+
const retryableMessages = [
|
|
30
|
+
'timeout',
|
|
31
|
+
'network',
|
|
32
|
+
'connection',
|
|
33
|
+
'socket',
|
|
34
|
+
'ETIMEDOUT',
|
|
35
|
+
'rate limit',
|
|
36
|
+
'429',
|
|
37
|
+
'500',
|
|
38
|
+
'502',
|
|
39
|
+
'503',
|
|
40
|
+
'504',
|
|
41
|
+
];
|
|
42
|
+
const errorCode = error.code;
|
|
43
|
+
if (errorCode && retryableErrors.includes(errorCode)) {
|
|
44
|
+
return true;
|
|
45
|
+
}
|
|
46
|
+
const message = error.message.toLowerCase();
|
|
47
|
+
return retryableMessages.some((m) => message.includes(m.toLowerCase()));
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* Calculate delay with jitter
|
|
51
|
+
*/
|
|
52
|
+
function calculateDelay(attempt, config) {
|
|
53
|
+
let baseDelay;
|
|
54
|
+
switch (config.backoff) {
|
|
55
|
+
case 'constant':
|
|
56
|
+
baseDelay = config.initialDelay;
|
|
57
|
+
break;
|
|
58
|
+
case 'linear':
|
|
59
|
+
baseDelay = config.initialDelay * attempt;
|
|
60
|
+
break;
|
|
61
|
+
case 'exponential':
|
|
62
|
+
default:
|
|
63
|
+
baseDelay = config.initialDelay * Math.pow(config.multiplier, attempt - 1);
|
|
64
|
+
break;
|
|
65
|
+
}
|
|
66
|
+
baseDelay = Math.min(baseDelay, config.maxDelay);
|
|
67
|
+
const jitterRange = baseDelay * config.jitter;
|
|
68
|
+
const jitter = (Math.random() * 2 - 1) * jitterRange;
|
|
69
|
+
return Math.max(0, Math.round(baseDelay + jitter));
|
|
70
|
+
}
|
|
71
|
+
/**
|
|
72
|
+
* Sleep for specified milliseconds
|
|
73
|
+
*/
|
|
74
|
+
function sleep(ms) {
|
|
75
|
+
return new Promise((resolve) => setTimeout(resolve, ms));
|
|
76
|
+
}
|
|
77
|
+
/**
|
|
78
|
+
* Execute function with retry logic
|
|
79
|
+
*/
|
|
80
|
+
export async function executeWithRetry(fn, options = {}) {
|
|
81
|
+
const maxRetries = options.maxRetries ?? DEFAULT_MAX_RETRIES;
|
|
82
|
+
const backoff = options.backoff ?? DEFAULT_BACKOFF;
|
|
83
|
+
const initialDelay = options.initialDelay ?? DEFAULT_INITIAL_DELAY;
|
|
84
|
+
const maxDelay = options.maxDelay ?? DEFAULT_MAX_DELAY;
|
|
85
|
+
const multiplier = options.multiplier ?? DEFAULT_MULTIPLIER;
|
|
86
|
+
const jitter = options.jitter ?? DEFAULT_JITTER;
|
|
87
|
+
const isRetryable = options.isRetryable ?? defaultIsRetryable;
|
|
88
|
+
const delays = [];
|
|
89
|
+
const startTime = Date.now();
|
|
90
|
+
let lastError;
|
|
91
|
+
for (let attempt = 1; attempt <= maxRetries + 1; attempt++) {
|
|
92
|
+
if (options.abortSignal?.aborted) {
|
|
93
|
+
return {
|
|
94
|
+
success: false,
|
|
95
|
+
error: new Error('Retry aborted'),
|
|
96
|
+
attempts: attempt - 1,
|
|
97
|
+
totalDuration: Date.now() - startTime,
|
|
98
|
+
delays,
|
|
99
|
+
};
|
|
100
|
+
}
|
|
101
|
+
const attemptStart = Date.now();
|
|
102
|
+
try {
|
|
103
|
+
const attemptInfo = {
|
|
104
|
+
attempt,
|
|
105
|
+
maxAttempts: maxRetries + 1,
|
|
106
|
+
delay: 0,
|
|
107
|
+
startTime: attemptStart,
|
|
108
|
+
duration: 0,
|
|
109
|
+
};
|
|
110
|
+
options.onAttempt?.(attemptInfo);
|
|
111
|
+
const result = await fn(attempt);
|
|
112
|
+
const duration = Date.now() - attemptStart;
|
|
113
|
+
options.onSuccess?.(result, { ...attemptInfo, duration });
|
|
114
|
+
return {
|
|
115
|
+
success: true,
|
|
116
|
+
result,
|
|
117
|
+
attempts: attempt,
|
|
118
|
+
totalDuration: Date.now() - startTime,
|
|
119
|
+
delays,
|
|
120
|
+
};
|
|
121
|
+
}
|
|
122
|
+
catch (error) {
|
|
123
|
+
lastError = error instanceof Error ? error : new Error(String(error));
|
|
124
|
+
const duration = Date.now() - attemptStart;
|
|
125
|
+
const canRetry = attempt <= maxRetries && isRetryable(lastError);
|
|
126
|
+
if (!canRetry) {
|
|
127
|
+
const attemptInfo = {
|
|
128
|
+
attempt,
|
|
129
|
+
maxAttempts: maxRetries + 1,
|
|
130
|
+
delay: 0,
|
|
131
|
+
error: lastError,
|
|
132
|
+
startTime: attemptStart,
|
|
133
|
+
duration,
|
|
134
|
+
};
|
|
135
|
+
options.onFailure?.(lastError, attemptInfo);
|
|
136
|
+
break;
|
|
137
|
+
}
|
|
138
|
+
const delay = calculateDelay(attempt, {
|
|
139
|
+
backoff,
|
|
140
|
+
initialDelay,
|
|
141
|
+
maxDelay,
|
|
142
|
+
multiplier,
|
|
143
|
+
jitter,
|
|
144
|
+
});
|
|
145
|
+
delays.push(delay);
|
|
146
|
+
const attemptInfo = {
|
|
147
|
+
attempt,
|
|
148
|
+
maxAttempts: maxRetries + 1,
|
|
149
|
+
delay,
|
|
150
|
+
error: lastError,
|
|
151
|
+
startTime: attemptStart,
|
|
152
|
+
duration,
|
|
153
|
+
};
|
|
154
|
+
options.onRetry?.(attemptInfo);
|
|
155
|
+
await sleep(delay);
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
return {
|
|
159
|
+
success: false,
|
|
160
|
+
error: lastError,
|
|
161
|
+
attempts: delays.length + 1,
|
|
162
|
+
totalDuration: Date.now() - startTime,
|
|
163
|
+
delays,
|
|
164
|
+
};
|
|
165
|
+
}
|
|
166
|
+
/**
|
|
167
|
+
* Create a retryable version of a function
|
|
168
|
+
*/
|
|
169
|
+
export function withRetry(fn, options = {}) {
|
|
170
|
+
return async (...args) => {
|
|
171
|
+
const result = await executeWithRetry(() => fn(...args), options);
|
|
172
|
+
if (!result.success) {
|
|
173
|
+
throw result.error ?? new Error('Retry failed');
|
|
174
|
+
}
|
|
175
|
+
return result.result;
|
|
176
|
+
};
|
|
177
|
+
}
|
|
178
|
+
/**
|
|
179
|
+
* Decorator for retryable class methods
|
|
180
|
+
*/
|
|
181
|
+
export function Retryable(options = {}) {
|
|
182
|
+
return function (_target, _propertyKey, descriptor) {
|
|
183
|
+
const originalMethod = descriptor.value;
|
|
184
|
+
descriptor.value = async function (...args) {
|
|
185
|
+
const result = await executeWithRetry(() => originalMethod.apply(this, args), options);
|
|
186
|
+
if (!result.success) {
|
|
187
|
+
throw result.error ?? new Error('Retry failed');
|
|
188
|
+
}
|
|
189
|
+
return result.result;
|
|
190
|
+
};
|
|
191
|
+
return descriptor;
|
|
192
|
+
};
|
|
193
|
+
}
|
|
194
|
+
/**
|
|
195
|
+
* Calculate total expected retry time (for timeout estimation)
|
|
196
|
+
*/
|
|
197
|
+
export function estimateRetryDuration(config = {}) {
|
|
198
|
+
const maxRetries = config.maxRetries ?? DEFAULT_MAX_RETRIES;
|
|
199
|
+
const backoff = config.backoff ?? DEFAULT_BACKOFF;
|
|
200
|
+
const initialDelay = config.initialDelay ?? DEFAULT_INITIAL_DELAY;
|
|
201
|
+
const maxDelay = config.maxDelay ?? DEFAULT_MAX_DELAY;
|
|
202
|
+
const multiplier = config.multiplier ?? DEFAULT_MULTIPLIER;
|
|
203
|
+
let total = 0;
|
|
204
|
+
for (let attempt = 1; attempt <= maxRetries; attempt++) {
|
|
205
|
+
let delay;
|
|
206
|
+
switch (backoff) {
|
|
207
|
+
case 'constant':
|
|
208
|
+
delay = initialDelay;
|
|
209
|
+
break;
|
|
210
|
+
case 'linear':
|
|
211
|
+
delay = initialDelay * attempt;
|
|
212
|
+
break;
|
|
213
|
+
case 'exponential':
|
|
214
|
+
default:
|
|
215
|
+
delay = initialDelay * Math.pow(multiplier, attempt - 1);
|
|
216
|
+
break;
|
|
217
|
+
}
|
|
218
|
+
total += Math.min(delay, maxDelay);
|
|
219
|
+
}
|
|
220
|
+
return total;
|
|
221
|
+
}
|
|
222
|
+
//# sourceMappingURL=retry.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"retry.js","sourceRoot":"","sources":["../../src/saga/retry.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* WorkflowScheduler - Manages DAG execution order and parallel scheduling
|
|
3
|
+
*/
|
|
4
|
+
import type { Workflow, WorkflowState } from '@cogitator-ai/types';
|
|
5
|
+
interface DependencyGraph {
|
|
6
|
+
dependencies: Map<string, Set<string>>;
|
|
7
|
+
dependents: Map<string, Set<string>>;
|
|
8
|
+
}
|
|
9
|
+
export declare class WorkflowScheduler {
|
|
10
|
+
/**
|
|
11
|
+
* Build dependency graph from workflow edges
|
|
12
|
+
*/
|
|
13
|
+
buildDependencyGraph<S extends WorkflowState>(workflow: Workflow<S>): DependencyGraph;
|
|
14
|
+
/**
|
|
15
|
+
* Get nodes ready to execute (all dependencies completed)
|
|
16
|
+
*/
|
|
17
|
+
getReadyNodes(graph: DependencyGraph, completed: Set<string>, pending: Set<string>): string[];
|
|
18
|
+
/**
|
|
19
|
+
* Get topological order of nodes (grouped by execution level)
|
|
20
|
+
* Returns array of arrays, where each inner array can be executed in parallel
|
|
21
|
+
*/
|
|
22
|
+
getExecutionLevels<S extends WorkflowState>(workflow: Workflow<S>): string[][];
|
|
23
|
+
/**
|
|
24
|
+
* Find the next node(s) to execute based on current state and edge conditions
|
|
25
|
+
*/
|
|
26
|
+
getNextNodes<S extends WorkflowState>(workflow: Workflow<S>, currentNode: string, state: S): string[];
|
|
27
|
+
/**
|
|
28
|
+
* Run multiple async tasks with concurrency limit
|
|
29
|
+
*/
|
|
30
|
+
runWithConcurrency<T>(tasks: (() => Promise<T>)[], maxConcurrency: number): Promise<T[]>;
|
|
31
|
+
/**
|
|
32
|
+
* Simpler parallel execution with Promise.all and concurrency via chunking
|
|
33
|
+
*/
|
|
34
|
+
runParallel<T>(tasks: (() => Promise<T>)[], maxConcurrency: number): Promise<T[]>;
|
|
35
|
+
}
|
|
36
|
+
export {};
|
|
37
|
+
//# sourceMappingURL=scheduler.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scheduler.d.ts","sourceRoot":"","sources":["../src/scheduler.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EACV,QAAQ,EACR,aAAa,EACd,MAAM,qBAAqB,CAAC;AAE7B,UAAU,eAAe;IACvB,YAAY,EAAE,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC;IACvC,UAAU,EAAE,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC;CACtC;AAED,qBAAa,iBAAiB;IAC5B;;OAEG;IACH,oBAAoB,CAAC,CAAC,SAAS,aAAa,EAC1C,QAAQ,EAAE,QAAQ,CAAC,CAAC,CAAC,GACpB,eAAe;IAwBlB;;OAEG;IACH,aAAa,CACX,KAAK,EAAE,eAAe,EACtB,SAAS,EAAE,GAAG,CAAC,MAAM,CAAC,EACtB,OAAO,EAAE,GAAG,CAAC,MAAM,CAAC,GACnB,MAAM,EAAE;IAuBX;;;OAGG;IACH,kBAAkB,CAAC,CAAC,SAAS,aAAa,EACxC,QAAQ,EAAE,QAAQ,CAAC,CAAC,CAAC,GACpB,MAAM,EAAE,EAAE;IA0Bb;;OAEG;IACH,YAAY,CAAC,CAAC,SAAS,aAAa,EAClC,QAAQ,EAAE,QAAQ,CAAC,CAAC,CAAC,EACrB,WAAW,EAAE,MAAM,EACnB,KAAK,EAAE,CAAC,GACP,MAAM,EAAE;IAgCX;;OAEG;IACG,kBAAkB,CAAC,CAAC,EACxB,KAAK,EAAE,CAAC,MAAM,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,EAC3B,cAAc,EAAE,MAAM,GACrB,OAAO,CAAC,CAAC,EAAE,CAAC;IAgCf;;OAEG;IACG,WAAW,CAAC,CAAC,EACjB,KAAK,EAAE,CAAC,MAAM,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,EAC3B,cAAc,EAAE,MAAM,GACrB,OAAO,CAAC,CAAC,EAAE,CAAC;CAWhB"}
|
|
@@ -0,0 +1,151 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* WorkflowScheduler - Manages DAG execution order and parallel scheduling
|
|
3
|
+
*/
|
|
4
|
+
export class WorkflowScheduler {
|
|
5
|
+
/**
|
|
6
|
+
* Build dependency graph from workflow edges
|
|
7
|
+
*/
|
|
8
|
+
buildDependencyGraph(workflow) {
|
|
9
|
+
const dependencies = new Map();
|
|
10
|
+
const dependents = new Map();
|
|
11
|
+
for (const nodeName of workflow.nodes.keys()) {
|
|
12
|
+
dependencies.set(nodeName, new Set());
|
|
13
|
+
dependents.set(nodeName, new Set());
|
|
14
|
+
}
|
|
15
|
+
for (const edge of workflow.edges) {
|
|
16
|
+
if (edge.type === 'sequential') {
|
|
17
|
+
dependencies.get(edge.to)?.add(edge.from);
|
|
18
|
+
dependents.get(edge.from)?.add(edge.to);
|
|
19
|
+
}
|
|
20
|
+
else if (edge.type === 'parallel') {
|
|
21
|
+
for (const to of edge.to) {
|
|
22
|
+
dependencies.get(to)?.add(edge.from);
|
|
23
|
+
dependents.get(edge.from)?.add(to);
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
return { dependencies, dependents };
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* Get nodes ready to execute (all dependencies completed)
|
|
31
|
+
*/
|
|
32
|
+
getReadyNodes(graph, completed, pending) {
|
|
33
|
+
const ready = [];
|
|
34
|
+
for (const nodeName of pending) {
|
|
35
|
+
const deps = graph.dependencies.get(nodeName);
|
|
36
|
+
if (!deps)
|
|
37
|
+
continue;
|
|
38
|
+
let allDepsCompleted = true;
|
|
39
|
+
for (const dep of deps) {
|
|
40
|
+
if (!completed.has(dep)) {
|
|
41
|
+
allDepsCompleted = false;
|
|
42
|
+
break;
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
if (allDepsCompleted) {
|
|
46
|
+
ready.push(nodeName);
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
return ready;
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* Get topological order of nodes (grouped by execution level)
|
|
53
|
+
* Returns array of arrays, where each inner array can be executed in parallel
|
|
54
|
+
*/
|
|
55
|
+
getExecutionLevels(workflow) {
|
|
56
|
+
const graph = this.buildDependencyGraph(workflow);
|
|
57
|
+
const levels = [];
|
|
58
|
+
const completed = new Set();
|
|
59
|
+
const pending = new Set(workflow.nodes.keys());
|
|
60
|
+
while (pending.size > 0) {
|
|
61
|
+
const ready = this.getReadyNodes(graph, completed, pending);
|
|
62
|
+
if (ready.length === 0 && pending.size > 0) {
|
|
63
|
+
throw new Error(`Workflow has cycles or unreachable nodes: ${Array.from(pending).join(', ')}`);
|
|
64
|
+
}
|
|
65
|
+
levels.push(ready);
|
|
66
|
+
for (const node of ready) {
|
|
67
|
+
completed.add(node);
|
|
68
|
+
pending.delete(node);
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
return levels;
|
|
72
|
+
}
|
|
73
|
+
/**
|
|
74
|
+
* Find the next node(s) to execute based on current state and edge conditions
|
|
75
|
+
*/
|
|
76
|
+
getNextNodes(workflow, currentNode, state) {
|
|
77
|
+
const nextNodes = [];
|
|
78
|
+
for (const edge of workflow.edges) {
|
|
79
|
+
if (edge.from !== currentNode)
|
|
80
|
+
continue;
|
|
81
|
+
if (edge.type === 'sequential') {
|
|
82
|
+
nextNodes.push(edge.to);
|
|
83
|
+
}
|
|
84
|
+
else if (edge.type === 'parallel') {
|
|
85
|
+
nextNodes.push(...edge.to);
|
|
86
|
+
}
|
|
87
|
+
else if (edge.type === 'conditional') {
|
|
88
|
+
const result = edge.condition(state);
|
|
89
|
+
const targets = Array.isArray(result) ? result : [result];
|
|
90
|
+
for (const target of targets) {
|
|
91
|
+
if (edge.targets.includes(target)) {
|
|
92
|
+
nextNodes.push(target);
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
else if (edge.type === 'loop') {
|
|
97
|
+
const shouldLoop = edge.condition(state);
|
|
98
|
+
if (shouldLoop) {
|
|
99
|
+
nextNodes.push(edge.back);
|
|
100
|
+
}
|
|
101
|
+
else {
|
|
102
|
+
nextNodes.push(edge.exit);
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
return [...new Set(nextNodes)];
|
|
107
|
+
}
|
|
108
|
+
/**
|
|
109
|
+
* Run multiple async tasks with concurrency limit
|
|
110
|
+
*/
|
|
111
|
+
async runWithConcurrency(tasks, maxConcurrency) {
|
|
112
|
+
const results = [];
|
|
113
|
+
const executing = [];
|
|
114
|
+
for (const task of tasks) {
|
|
115
|
+
const promise = task().then((result) => {
|
|
116
|
+
results.push(result);
|
|
117
|
+
});
|
|
118
|
+
executing.push(promise);
|
|
119
|
+
if (executing.length >= maxConcurrency) {
|
|
120
|
+
await Promise.race(executing);
|
|
121
|
+
const newExecuting = [];
|
|
122
|
+
for (const p of executing) {
|
|
123
|
+
const pending = await Promise.race([
|
|
124
|
+
p.then(() => false),
|
|
125
|
+
Promise.resolve(true),
|
|
126
|
+
]);
|
|
127
|
+
if (pending) {
|
|
128
|
+
newExecuting.push(p);
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
executing.length = 0;
|
|
132
|
+
executing.push(...newExecuting);
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
await Promise.all(executing);
|
|
136
|
+
return results;
|
|
137
|
+
}
|
|
138
|
+
/**
|
|
139
|
+
* Simpler parallel execution with Promise.all and concurrency via chunking
|
|
140
|
+
*/
|
|
141
|
+
async runParallel(tasks, maxConcurrency) {
|
|
142
|
+
const results = [];
|
|
143
|
+
for (let i = 0; i < tasks.length; i += maxConcurrency) {
|
|
144
|
+
const chunk = tasks.slice(i, i + maxConcurrency);
|
|
145
|
+
const chunkResults = await Promise.all(chunk.map((t) => t()));
|
|
146
|
+
results.push(...chunkResults);
|
|
147
|
+
}
|
|
148
|
+
return results;
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
//# sourceMappingURL=scheduler.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scheduler.js","sourceRoot":"","sources":["../src/scheduler.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @cogitator-ai/workflows - Subworkflows module
|
|
3
|
+
*
|
|
4
|
+
* Enables nested and parallel workflow execution.
|
|
5
|
+
*
|
|
6
|
+
* Features:
|
|
7
|
+
* - Single subworkflow execution
|
|
8
|
+
* - Parallel subworkflows with concurrency control
|
|
9
|
+
* - State mapping between parent and child
|
|
10
|
+
* - Error handling strategies
|
|
11
|
+
* - Depth limits to prevent infinite recursion
|
|
12
|
+
* - Race and fallback patterns
|
|
13
|
+
*/
|
|
14
|
+
export { type SubworkflowErrorStrategy, type SubworkflowRetryConfig, type SubworkflowConfig, type SubworkflowContext, type SubworkflowResult, MaxDepthExceededError, executeSubworkflow, subworkflowNode, simpleSubworkflow, nestedSubworkflow, conditionalSubworkflow, } from './subworkflow-node';
|
|
15
|
+
export { type ParallelSubworkflowDef, type ParallelSubworkflowsConfig, type ParallelProgress, type ParallelSubworkflowsResult, executeParallelSubworkflows, parallelSubworkflows, fanOutFanIn, scatterGather, raceSubworkflows, fallbackSubworkflows, } from './parallel-subworkflows';
|
|
16
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/subworkflows/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,EACL,KAAK,wBAAwB,EAC7B,KAAK,sBAAsB,EAC3B,KAAK,iBAAiB,EACtB,KAAK,kBAAkB,EACvB,KAAK,iBAAiB,EACtB,qBAAqB,EACrB,kBAAkB,EAClB,eAAe,EACf,iBAAiB,EACjB,iBAAiB,EACjB,sBAAsB,GACvB,MAAM,oBAAoB,CAAC;AAE5B,OAAO,EACL,KAAK,sBAAsB,EAC3B,KAAK,0BAA0B,EAC/B,KAAK,gBAAgB,EACrB,KAAK,0BAA0B,EAC/B,2BAA2B,EAC3B,oBAAoB,EACpB,WAAW,EACX,aAAa,EACb,gBAAgB,EAChB,oBAAoB,GACrB,MAAM,yBAAyB,CAAC"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @cogitator-ai/workflows - Subworkflows module
|
|
3
|
+
*
|
|
4
|
+
* Enables nested and parallel workflow execution.
|
|
5
|
+
*
|
|
6
|
+
* Features:
|
|
7
|
+
* - Single subworkflow execution
|
|
8
|
+
* - Parallel subworkflows with concurrency control
|
|
9
|
+
* - State mapping between parent and child
|
|
10
|
+
* - Error handling strategies
|
|
11
|
+
* - Depth limits to prevent infinite recursion
|
|
12
|
+
* - Race and fallback patterns
|
|
13
|
+
*/
|
|
14
|
+
export { MaxDepthExceededError, executeSubworkflow, subworkflowNode, simpleSubworkflow, nestedSubworkflow, conditionalSubworkflow, } from './subworkflow-node';
|
|
15
|
+
export { executeParallelSubworkflows, parallelSubworkflows, fanOutFanIn, scatterGather, raceSubworkflows, fallbackSubworkflows, } from './parallel-subworkflows';
|
|
16
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/subworkflows/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,EAML,qBAAqB,EACrB,kBAAkB,EAClB,eAAe,EACf,iBAAiB,EACjB,iBAAiB,EACjB,sBAAsB,GACvB,MAAM,oBAAoB,CAAC;AAE5B,OAAO,EAKL,2BAA2B,EAC3B,oBAAoB,EACpB,WAAW,EACX,aAAa,EACb,gBAAgB,EAChB,oBAAoB,GACrB,MAAM,yBAAyB,CAAC"}
|
|
@@ -0,0 +1,139 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Parallel subworkflow execution
|
|
3
|
+
*
|
|
4
|
+
* Features:
|
|
5
|
+
* - Execute multiple subworkflows in parallel
|
|
6
|
+
* - Configurable concurrency
|
|
7
|
+
* - Aggregate results
|
|
8
|
+
* - Partial failure handling
|
|
9
|
+
*/
|
|
10
|
+
import type { Workflow, WorkflowState, WorkflowResult } from '@cogitator-ai/types';
|
|
11
|
+
import { type SubworkflowContext, type SubworkflowConfig, type SubworkflowResult, type SubworkflowErrorStrategy } from './subworkflow-node';
|
|
12
|
+
/**
|
|
13
|
+
* Parallel subworkflow definition
|
|
14
|
+
*/
|
|
15
|
+
export interface ParallelSubworkflowDef<PS extends WorkflowState, CS extends WorkflowState> {
|
|
16
|
+
id: string;
|
|
17
|
+
config: SubworkflowConfig<PS, CS>;
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* Parallel subworkflows configuration
|
|
21
|
+
*/
|
|
22
|
+
export interface ParallelSubworkflowsConfig<S extends WorkflowState> {
|
|
23
|
+
name: string;
|
|
24
|
+
/**
|
|
25
|
+
* Get subworkflow definitions to execute
|
|
26
|
+
*/
|
|
27
|
+
subworkflows: ParallelSubworkflowDef<S, WorkflowState>[] | ((state: S) => ParallelSubworkflowDef<S, WorkflowState>[]);
|
|
28
|
+
/**
|
|
29
|
+
* Maximum concurrent subworkflows
|
|
30
|
+
* @default Infinity
|
|
31
|
+
*/
|
|
32
|
+
concurrency?: number;
|
|
33
|
+
/**
|
|
34
|
+
* Continue if some subworkflows fail
|
|
35
|
+
* @default false
|
|
36
|
+
*/
|
|
37
|
+
continueOnError?: boolean;
|
|
38
|
+
/**
|
|
39
|
+
* Error handling strategy for all subworkflows
|
|
40
|
+
*/
|
|
41
|
+
onError?: SubworkflowErrorStrategy;
|
|
42
|
+
/**
|
|
43
|
+
* Aggregate results into parent state
|
|
44
|
+
*/
|
|
45
|
+
aggregator: (results: Map<string, SubworkflowResult<S, WorkflowState>>, parentState: S) => S;
|
|
46
|
+
/**
|
|
47
|
+
* Maximum nesting depth for all subworkflows
|
|
48
|
+
* @default 10
|
|
49
|
+
*/
|
|
50
|
+
maxDepth?: number;
|
|
51
|
+
/**
|
|
52
|
+
* Share checkpoint store with parent
|
|
53
|
+
* @default true
|
|
54
|
+
*/
|
|
55
|
+
shareCheckpoints?: boolean;
|
|
56
|
+
/**
|
|
57
|
+
* Called when a subworkflow starts
|
|
58
|
+
*/
|
|
59
|
+
onSubworkflowStart?: (id: string, config: SubworkflowConfig<S, WorkflowState>) => void;
|
|
60
|
+
/**
|
|
61
|
+
* Called when a subworkflow completes
|
|
62
|
+
*/
|
|
63
|
+
onSubworkflowComplete?: (id: string, result: SubworkflowResult<S, WorkflowState>) => void;
|
|
64
|
+
/**
|
|
65
|
+
* Called on progress
|
|
66
|
+
*/
|
|
67
|
+
onProgress?: (progress: ParallelProgress) => void;
|
|
68
|
+
}
|
|
69
|
+
/**
|
|
70
|
+
* Progress event for parallel execution
|
|
71
|
+
*/
|
|
72
|
+
export interface ParallelProgress {
|
|
73
|
+
total: number;
|
|
74
|
+
completed: number;
|
|
75
|
+
successful: number;
|
|
76
|
+
failed: number;
|
|
77
|
+
pending: number;
|
|
78
|
+
running: number;
|
|
79
|
+
}
|
|
80
|
+
/**
|
|
81
|
+
* Parallel subworkflows result
|
|
82
|
+
*/
|
|
83
|
+
export interface ParallelSubworkflowsResult<S extends WorkflowState> {
|
|
84
|
+
success: boolean;
|
|
85
|
+
parentState: S;
|
|
86
|
+
results: Map<string, SubworkflowResult<S, WorkflowState>>;
|
|
87
|
+
errors: Map<string, Error>;
|
|
88
|
+
duration: number;
|
|
89
|
+
stats: {
|
|
90
|
+
total: number;
|
|
91
|
+
successful: number;
|
|
92
|
+
failed: number;
|
|
93
|
+
skipped: number;
|
|
94
|
+
};
|
|
95
|
+
}
|
|
96
|
+
/**
|
|
97
|
+
* Execute multiple subworkflows in parallel
|
|
98
|
+
*/
|
|
99
|
+
export declare function executeParallelSubworkflows<S extends WorkflowState>(parentState: S, config: ParallelSubworkflowsConfig<S>, context: SubworkflowContext): Promise<ParallelSubworkflowsResult<S>>;
|
|
100
|
+
/**
|
|
101
|
+
* Create a parallel subworkflows node factory
|
|
102
|
+
*/
|
|
103
|
+
export declare function parallelSubworkflows<S extends WorkflowState>(name: string, config: Omit<ParallelSubworkflowsConfig<S>, 'name'>): ParallelSubworkflowsConfig<S>;
|
|
104
|
+
/**
|
|
105
|
+
* Create a fan-out/fan-in pattern
|
|
106
|
+
* Fans out to multiple identical subworkflows with different inputs
|
|
107
|
+
*/
|
|
108
|
+
export declare function fanOutFanIn<S extends WorkflowState, CS extends WorkflowState>(name: string, config: {
|
|
109
|
+
workflow: Workflow<CS>;
|
|
110
|
+
getInputs: (state: S) => {
|
|
111
|
+
id: string;
|
|
112
|
+
input: Partial<CS>;
|
|
113
|
+
}[];
|
|
114
|
+
aggregator: (results: Map<string, WorkflowResult<CS>>, state: S) => S;
|
|
115
|
+
concurrency?: number;
|
|
116
|
+
continueOnError?: boolean;
|
|
117
|
+
}): ParallelSubworkflowsConfig<S>;
|
|
118
|
+
/**
|
|
119
|
+
* Create a scatter-gather pattern
|
|
120
|
+
* Scatters work across multiple workflows and gathers results
|
|
121
|
+
*/
|
|
122
|
+
export declare function scatterGather<S extends WorkflowState, CS extends WorkflowState>(name: string, config: {
|
|
123
|
+
workflows: Map<string, Workflow<CS>>;
|
|
124
|
+
inputMapper: (state: S, workflowId: string) => Partial<CS>;
|
|
125
|
+
outputMapper: (results: Map<string, WorkflowResult<CS>>, state: S) => S;
|
|
126
|
+
concurrency?: number;
|
|
127
|
+
timeout?: number;
|
|
128
|
+
}): ParallelSubworkflowsConfig<S>;
|
|
129
|
+
/**
|
|
130
|
+
* Create a race pattern
|
|
131
|
+
* Executes multiple subworkflows and returns the first successful result
|
|
132
|
+
*/
|
|
133
|
+
export declare function raceSubworkflows<PS extends WorkflowState, CS extends WorkflowState>(parentState: PS, subworkflows: SubworkflowConfig<PS, CS>[], context: SubworkflowContext): Promise<SubworkflowResult<PS, CS> | null>;
|
|
134
|
+
/**
|
|
135
|
+
* Create a fallback pattern
|
|
136
|
+
* Tries subworkflows in order until one succeeds
|
|
137
|
+
*/
|
|
138
|
+
export declare function fallbackSubworkflows<PS extends WorkflowState, CS extends WorkflowState>(parentState: PS, subworkflows: SubworkflowConfig<PS, CS>[], context: SubworkflowContext): Promise<SubworkflowResult<PS, CS>>;
|
|
139
|
+
//# sourceMappingURL=parallel-subworkflows.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"parallel-subworkflows.d.ts","sourceRoot":"","sources":["../../src/subworkflows/parallel-subworkflows.ts"],"names":[],"mappings":"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"}
|