@defai.digital/workflow-engine 13.0.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/LICENSE +214 -0
- package/dist/executor.d.ts +18 -0
- package/dist/executor.d.ts.map +1 -0
- package/dist/executor.js +351 -0
- package/dist/executor.js.map +1 -0
- package/dist/index.d.ts +12 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +15 -0
- package/dist/index.js.map +1 -0
- package/dist/loader.d.ts +125 -0
- package/dist/loader.d.ts.map +1 -0
- package/dist/loader.js +213 -0
- package/dist/loader.js.map +1 -0
- package/dist/retry.d.ts +21 -0
- package/dist/retry.d.ts.map +1 -0
- package/dist/retry.js +82 -0
- package/dist/retry.js.map +1 -0
- package/dist/runner.d.ts +38 -0
- package/dist/runner.d.ts.map +1 -0
- package/dist/runner.js +205 -0
- package/dist/runner.js.map +1 -0
- package/dist/step-executor-factory.d.ts +179 -0
- package/dist/step-executor-factory.d.ts.map +1 -0
- package/dist/step-executor-factory.js +469 -0
- package/dist/step-executor-factory.js.map +1 -0
- package/dist/step-guard.d.ts +184 -0
- package/dist/step-guard.d.ts.map +1 -0
- package/dist/step-guard.js +496 -0
- package/dist/step-guard.js.map +1 -0
- package/dist/types.d.ts +95 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +12 -0
- package/dist/types.js.map +1 -0
- package/dist/validation.d.ts +29 -0
- package/dist/validation.d.ts.map +1 -0
- package/dist/validation.js +77 -0
- package/dist/validation.js.map +1 -0
- package/package.json +42 -0
|
@@ -0,0 +1,469 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Step Executor Factory
|
|
3
|
+
*
|
|
4
|
+
* Creates real step executors for workflow execution using injected dependencies.
|
|
5
|
+
* Eliminates placeholder implementations by bridging to actual LLM providers and tools.
|
|
6
|
+
*
|
|
7
|
+
* Invariants:
|
|
8
|
+
* - INV-WF-001: Steps execute in defined order
|
|
9
|
+
* - INV-TOOL-001: Tool execution validates inputs
|
|
10
|
+
* - INV-TOOL-002: Tool results are immutable
|
|
11
|
+
*/
|
|
12
|
+
/**
|
|
13
|
+
* Creates a real step executor with actual prompt and tool execution
|
|
14
|
+
*
|
|
15
|
+
* @param config - Configuration with prompt and tool executors
|
|
16
|
+
* @returns A step executor function
|
|
17
|
+
*/
|
|
18
|
+
export function createRealStepExecutor(config) {
|
|
19
|
+
const { promptExecutor, toolExecutor, discussionExecutor, defaultProvider, defaultModel } = config;
|
|
20
|
+
return async (step, context) => {
|
|
21
|
+
const startTime = Date.now();
|
|
22
|
+
try {
|
|
23
|
+
switch (step.type) {
|
|
24
|
+
case 'prompt':
|
|
25
|
+
return executePromptStep(step, context, promptExecutor, defaultProvider, defaultModel, startTime);
|
|
26
|
+
case 'tool':
|
|
27
|
+
return executeToolStep(step, context, toolExecutor, startTime);
|
|
28
|
+
case 'conditional':
|
|
29
|
+
return executeConditionalStep(step, context, startTime);
|
|
30
|
+
case 'loop':
|
|
31
|
+
return executeLoopStep(step, context, startTime);
|
|
32
|
+
case 'parallel':
|
|
33
|
+
return executeParallelStep(step, context, startTime);
|
|
34
|
+
case 'discuss':
|
|
35
|
+
return executeDiscussStep(step, context, discussionExecutor, startTime);
|
|
36
|
+
case 'delegate':
|
|
37
|
+
// Delegate steps require agent-domain executor
|
|
38
|
+
return {
|
|
39
|
+
stepId: step.stepId,
|
|
40
|
+
success: false,
|
|
41
|
+
error: {
|
|
42
|
+
code: 'DELEGATE_NOT_IMPLEMENTED',
|
|
43
|
+
message: 'Delegate steps require an agent-domain executor (not yet implemented)',
|
|
44
|
+
retryable: false,
|
|
45
|
+
},
|
|
46
|
+
durationMs: Date.now() - startTime,
|
|
47
|
+
retryCount: 0,
|
|
48
|
+
};
|
|
49
|
+
default:
|
|
50
|
+
return {
|
|
51
|
+
stepId: step.stepId,
|
|
52
|
+
success: false,
|
|
53
|
+
error: {
|
|
54
|
+
code: 'UNKNOWN_STEP_TYPE',
|
|
55
|
+
message: `Unknown step type: ${step.type}`,
|
|
56
|
+
retryable: false,
|
|
57
|
+
},
|
|
58
|
+
durationMs: Date.now() - startTime,
|
|
59
|
+
retryCount: 0,
|
|
60
|
+
};
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
catch (error) {
|
|
64
|
+
return {
|
|
65
|
+
stepId: step.stepId,
|
|
66
|
+
success: false,
|
|
67
|
+
error: {
|
|
68
|
+
code: 'STEP_EXECUTION_ERROR',
|
|
69
|
+
message: error instanceof Error ? error.message : 'Unknown error',
|
|
70
|
+
retryable: true,
|
|
71
|
+
},
|
|
72
|
+
durationMs: Date.now() - startTime,
|
|
73
|
+
retryCount: 0,
|
|
74
|
+
};
|
|
75
|
+
}
|
|
76
|
+
};
|
|
77
|
+
}
|
|
78
|
+
/**
|
|
79
|
+
* Execute a prompt step using the prompt executor
|
|
80
|
+
*/
|
|
81
|
+
async function executePromptStep(step, context, promptExecutor, defaultProvider, defaultModel, startTime) {
|
|
82
|
+
const config = (step.config ?? {});
|
|
83
|
+
// Build prompt from config or input
|
|
84
|
+
const prompt = config.prompt ?? String(context.input ?? '');
|
|
85
|
+
if (!prompt || prompt.trim() === '') {
|
|
86
|
+
return {
|
|
87
|
+
stepId: step.stepId,
|
|
88
|
+
success: false,
|
|
89
|
+
error: {
|
|
90
|
+
code: 'PROMPT_CONFIG_ERROR',
|
|
91
|
+
message: `Prompt step "${step.stepId}" requires a prompt`,
|
|
92
|
+
retryable: false,
|
|
93
|
+
},
|
|
94
|
+
durationMs: Date.now() - startTime,
|
|
95
|
+
retryCount: 0,
|
|
96
|
+
};
|
|
97
|
+
}
|
|
98
|
+
// Build execute request, filtering out undefined values
|
|
99
|
+
const executeRequest = {
|
|
100
|
+
prompt,
|
|
101
|
+
};
|
|
102
|
+
if (config.systemPrompt !== undefined) {
|
|
103
|
+
executeRequest.systemPrompt = config.systemPrompt;
|
|
104
|
+
}
|
|
105
|
+
const provider = config.provider ?? defaultProvider;
|
|
106
|
+
if (provider !== undefined) {
|
|
107
|
+
executeRequest.provider = provider;
|
|
108
|
+
}
|
|
109
|
+
const model = config.model ?? defaultModel;
|
|
110
|
+
if (model !== undefined) {
|
|
111
|
+
executeRequest.model = model;
|
|
112
|
+
}
|
|
113
|
+
if (config.maxTokens !== undefined) {
|
|
114
|
+
executeRequest.maxTokens = config.maxTokens;
|
|
115
|
+
}
|
|
116
|
+
if (config.temperature !== undefined) {
|
|
117
|
+
executeRequest.temperature = config.temperature;
|
|
118
|
+
}
|
|
119
|
+
const timeout = config.timeout ?? step.timeout;
|
|
120
|
+
if (timeout !== undefined) {
|
|
121
|
+
executeRequest.timeout = timeout;
|
|
122
|
+
}
|
|
123
|
+
const response = await promptExecutor.execute(executeRequest);
|
|
124
|
+
if (response.success) {
|
|
125
|
+
return {
|
|
126
|
+
stepId: step.stepId,
|
|
127
|
+
success: true,
|
|
128
|
+
output: {
|
|
129
|
+
content: response.content,
|
|
130
|
+
provider: response.provider,
|
|
131
|
+
model: response.model,
|
|
132
|
+
usage: response.usage,
|
|
133
|
+
},
|
|
134
|
+
durationMs: Date.now() - startTime,
|
|
135
|
+
retryCount: 0,
|
|
136
|
+
};
|
|
137
|
+
}
|
|
138
|
+
else {
|
|
139
|
+
return {
|
|
140
|
+
stepId: step.stepId,
|
|
141
|
+
success: false,
|
|
142
|
+
error: {
|
|
143
|
+
code: response.errorCode ?? 'PROMPT_EXECUTION_FAILED',
|
|
144
|
+
message: response.error ?? 'Prompt execution failed',
|
|
145
|
+
retryable: true,
|
|
146
|
+
},
|
|
147
|
+
durationMs: Date.now() - startTime,
|
|
148
|
+
retryCount: 0,
|
|
149
|
+
};
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
/**
|
|
153
|
+
* Execute a tool step using the tool executor
|
|
154
|
+
*/
|
|
155
|
+
async function executeToolStep(step, context, toolExecutor, startTime) {
|
|
156
|
+
const config = (step.config ?? {});
|
|
157
|
+
const toolName = config.toolName;
|
|
158
|
+
const toolInput = (config.toolInput ?? context.input ?? {});
|
|
159
|
+
// If no tool executor is configured
|
|
160
|
+
if (toolExecutor === undefined) {
|
|
161
|
+
return {
|
|
162
|
+
stepId: step.stepId,
|
|
163
|
+
success: true,
|
|
164
|
+
output: {
|
|
165
|
+
type: 'tool',
|
|
166
|
+
toolName: toolName ?? 'unknown',
|
|
167
|
+
status: 'no_executor',
|
|
168
|
+
message: 'Tool execution requires a ToolExecutor.',
|
|
169
|
+
},
|
|
170
|
+
durationMs: Date.now() - startTime,
|
|
171
|
+
retryCount: 0,
|
|
172
|
+
};
|
|
173
|
+
}
|
|
174
|
+
// Validate tool name
|
|
175
|
+
if (toolName === undefined || toolName.trim() === '') {
|
|
176
|
+
return {
|
|
177
|
+
stepId: step.stepId,
|
|
178
|
+
success: false,
|
|
179
|
+
error: {
|
|
180
|
+
code: 'TOOL_CONFIG_ERROR',
|
|
181
|
+
message: `Tool step "${step.stepId}" requires toolName in config`,
|
|
182
|
+
retryable: false,
|
|
183
|
+
},
|
|
184
|
+
durationMs: Date.now() - startTime,
|
|
185
|
+
retryCount: 0,
|
|
186
|
+
};
|
|
187
|
+
}
|
|
188
|
+
// Check tool availability
|
|
189
|
+
if (!toolExecutor.isToolAvailable(toolName)) {
|
|
190
|
+
return {
|
|
191
|
+
stepId: step.stepId,
|
|
192
|
+
success: false,
|
|
193
|
+
error: {
|
|
194
|
+
code: 'TOOL_NOT_FOUND',
|
|
195
|
+
message: `Tool "${toolName}" is not available`,
|
|
196
|
+
retryable: false,
|
|
197
|
+
},
|
|
198
|
+
durationMs: Date.now() - startTime,
|
|
199
|
+
retryCount: 0,
|
|
200
|
+
};
|
|
201
|
+
}
|
|
202
|
+
// Execute the tool
|
|
203
|
+
const result = await toolExecutor.execute(toolName, toolInput);
|
|
204
|
+
return {
|
|
205
|
+
stepId: step.stepId,
|
|
206
|
+
success: result.success,
|
|
207
|
+
output: {
|
|
208
|
+
type: 'tool',
|
|
209
|
+
toolName,
|
|
210
|
+
toolOutput: result.output,
|
|
211
|
+
},
|
|
212
|
+
error: result.success ? undefined : {
|
|
213
|
+
code: result.errorCode ?? 'TOOL_EXECUTION_ERROR',
|
|
214
|
+
message: result.error ?? 'Tool execution failed',
|
|
215
|
+
retryable: result.retryable ?? true,
|
|
216
|
+
},
|
|
217
|
+
durationMs: Date.now() - startTime,
|
|
218
|
+
retryCount: 0,
|
|
219
|
+
};
|
|
220
|
+
}
|
|
221
|
+
/**
|
|
222
|
+
* Execute a conditional step
|
|
223
|
+
*/
|
|
224
|
+
function executeConditionalStep(step, context, startTime) {
|
|
225
|
+
const config = (step.config ?? {});
|
|
226
|
+
// Evaluate condition (simple truthy check for now)
|
|
227
|
+
const conditionResult = config.condition
|
|
228
|
+
? evaluateCondition(config.condition, context)
|
|
229
|
+
: true;
|
|
230
|
+
return Promise.resolve({
|
|
231
|
+
stepId: step.stepId,
|
|
232
|
+
success: true,
|
|
233
|
+
output: {
|
|
234
|
+
type: 'conditional',
|
|
235
|
+
conditionMet: conditionResult,
|
|
236
|
+
branch: conditionResult ? 'then' : 'else',
|
|
237
|
+
nextSteps: conditionResult ? config.thenSteps : config.elseSteps,
|
|
238
|
+
},
|
|
239
|
+
durationMs: Date.now() - startTime,
|
|
240
|
+
retryCount: 0,
|
|
241
|
+
});
|
|
242
|
+
}
|
|
243
|
+
/**
|
|
244
|
+
* Execute a loop step
|
|
245
|
+
*/
|
|
246
|
+
function executeLoopStep(step, context, startTime) {
|
|
247
|
+
const config = (step.config ?? {});
|
|
248
|
+
// Get items to iterate
|
|
249
|
+
let items = config.items ?? [];
|
|
250
|
+
if (config.itemsPath) {
|
|
251
|
+
items = getNestedValue(context, config.itemsPath) ?? [];
|
|
252
|
+
}
|
|
253
|
+
// Apply max iterations
|
|
254
|
+
if (config.maxIterations !== undefined && items.length > config.maxIterations) {
|
|
255
|
+
items = items.slice(0, config.maxIterations);
|
|
256
|
+
}
|
|
257
|
+
return Promise.resolve({
|
|
258
|
+
stepId: step.stepId,
|
|
259
|
+
success: true,
|
|
260
|
+
output: {
|
|
261
|
+
type: 'loop',
|
|
262
|
+
itemCount: items.length,
|
|
263
|
+
items,
|
|
264
|
+
bodySteps: config.bodySteps,
|
|
265
|
+
},
|
|
266
|
+
durationMs: Date.now() - startTime,
|
|
267
|
+
retryCount: 0,
|
|
268
|
+
});
|
|
269
|
+
}
|
|
270
|
+
/**
|
|
271
|
+
* Execute a parallel step
|
|
272
|
+
*/
|
|
273
|
+
function executeParallelStep(step, _context, startTime) {
|
|
274
|
+
const config = step.config;
|
|
275
|
+
return Promise.resolve({
|
|
276
|
+
stepId: step.stepId,
|
|
277
|
+
success: true,
|
|
278
|
+
output: {
|
|
279
|
+
type: 'parallel',
|
|
280
|
+
parallelSteps: config?.steps ?? [],
|
|
281
|
+
},
|
|
282
|
+
durationMs: Date.now() - startTime,
|
|
283
|
+
retryCount: 0,
|
|
284
|
+
});
|
|
285
|
+
}
|
|
286
|
+
/**
|
|
287
|
+
* Simple condition evaluator
|
|
288
|
+
* Supports: "true", "false", "${variable}" checks
|
|
289
|
+
*/
|
|
290
|
+
function evaluateCondition(condition, context) {
|
|
291
|
+
if (condition === 'true')
|
|
292
|
+
return true;
|
|
293
|
+
if (condition === 'false')
|
|
294
|
+
return false;
|
|
295
|
+
// Check for variable reference ${...}
|
|
296
|
+
const varMatch = /^\$\{(.+)\}$/.exec(condition);
|
|
297
|
+
if (varMatch) {
|
|
298
|
+
const path = varMatch[1];
|
|
299
|
+
const value = getNestedValue(context, path ?? '');
|
|
300
|
+
return Boolean(value);
|
|
301
|
+
}
|
|
302
|
+
// Default to truthy
|
|
303
|
+
return Boolean(condition);
|
|
304
|
+
}
|
|
305
|
+
/**
|
|
306
|
+
* Get nested value from context
|
|
307
|
+
*/
|
|
308
|
+
function getNestedValue(context, path) {
|
|
309
|
+
const parts = path.split('.');
|
|
310
|
+
let current = context;
|
|
311
|
+
for (const part of parts) {
|
|
312
|
+
if (current === null || current === undefined)
|
|
313
|
+
return undefined;
|
|
314
|
+
if (typeof current !== 'object')
|
|
315
|
+
return undefined;
|
|
316
|
+
current = current[part];
|
|
317
|
+
}
|
|
318
|
+
return current;
|
|
319
|
+
}
|
|
320
|
+
/**
|
|
321
|
+
* Execute a discuss step using the discussion executor
|
|
322
|
+
*
|
|
323
|
+
* Supports multi-model discussions with various patterns (synthesis, debate, critique, voting)
|
|
324
|
+
* and consensus mechanisms.
|
|
325
|
+
*/
|
|
326
|
+
async function executeDiscussStep(step, context, discussionExecutor, startTime) {
|
|
327
|
+
// Check if discussion executor is available
|
|
328
|
+
if (discussionExecutor === undefined) {
|
|
329
|
+
return {
|
|
330
|
+
stepId: step.stepId,
|
|
331
|
+
success: false,
|
|
332
|
+
error: {
|
|
333
|
+
code: 'DISCUSSION_EXECUTOR_NOT_CONFIGURED',
|
|
334
|
+
message: 'Discussion steps require a DiscussionExecutor. Configure it in RealStepExecutorConfig.',
|
|
335
|
+
retryable: false,
|
|
336
|
+
},
|
|
337
|
+
durationMs: Date.now() - startTime,
|
|
338
|
+
retryCount: 0,
|
|
339
|
+
};
|
|
340
|
+
}
|
|
341
|
+
// Extract and validate config
|
|
342
|
+
const rawConfig = step.config;
|
|
343
|
+
if (!rawConfig) {
|
|
344
|
+
return {
|
|
345
|
+
stepId: step.stepId,
|
|
346
|
+
success: false,
|
|
347
|
+
error: {
|
|
348
|
+
code: 'DISCUSS_CONFIG_MISSING',
|
|
349
|
+
message: `Discuss step "${step.stepId}" requires configuration`,
|
|
350
|
+
retryable: false,
|
|
351
|
+
},
|
|
352
|
+
durationMs: Date.now() - startTime,
|
|
353
|
+
retryCount: 0,
|
|
354
|
+
};
|
|
355
|
+
}
|
|
356
|
+
// Check required fields
|
|
357
|
+
if (!rawConfig.prompt || typeof rawConfig.prompt !== 'string') {
|
|
358
|
+
return {
|
|
359
|
+
stepId: step.stepId,
|
|
360
|
+
success: false,
|
|
361
|
+
error: {
|
|
362
|
+
code: 'DISCUSS_PROMPT_MISSING',
|
|
363
|
+
message: `Discuss step "${step.stepId}" requires a prompt`,
|
|
364
|
+
retryable: false,
|
|
365
|
+
},
|
|
366
|
+
durationMs: Date.now() - startTime,
|
|
367
|
+
retryCount: 0,
|
|
368
|
+
};
|
|
369
|
+
}
|
|
370
|
+
if (!rawConfig.providers || !Array.isArray(rawConfig.providers) || rawConfig.providers.length < 2) {
|
|
371
|
+
return {
|
|
372
|
+
stepId: step.stepId,
|
|
373
|
+
success: false,
|
|
374
|
+
error: {
|
|
375
|
+
code: 'DISCUSS_PROVIDERS_INVALID',
|
|
376
|
+
message: `Discuss step "${step.stepId}" requires at least 2 providers`,
|
|
377
|
+
retryable: false,
|
|
378
|
+
},
|
|
379
|
+
durationMs: Date.now() - startTime,
|
|
380
|
+
retryCount: 0,
|
|
381
|
+
};
|
|
382
|
+
}
|
|
383
|
+
// Build the discussion config with defaults
|
|
384
|
+
const discussConfig = {
|
|
385
|
+
pattern: rawConfig.pattern ?? 'synthesis',
|
|
386
|
+
rounds: rawConfig.rounds ?? 2,
|
|
387
|
+
providers: rawConfig.providers,
|
|
388
|
+
prompt: rawConfig.prompt,
|
|
389
|
+
providerPrompts: rawConfig.providerPrompts,
|
|
390
|
+
roles: rawConfig.roles,
|
|
391
|
+
consensus: rawConfig.consensus ?? {
|
|
392
|
+
method: 'synthesis',
|
|
393
|
+
synthesizer: 'claude',
|
|
394
|
+
},
|
|
395
|
+
providerTimeout: rawConfig.providerTimeout ?? 120000,
|
|
396
|
+
continueOnProviderFailure: rawConfig.continueOnProviderFailure ?? true,
|
|
397
|
+
minProviders: rawConfig.minProviders ?? 2,
|
|
398
|
+
temperature: rawConfig.temperature ?? 0.7,
|
|
399
|
+
context: rawConfig.context,
|
|
400
|
+
verbose: rawConfig.verbose ?? false,
|
|
401
|
+
};
|
|
402
|
+
// Interpolate context from previous step output if needed
|
|
403
|
+
if (context.input && typeof context.input === 'object') {
|
|
404
|
+
const inputObj = context.input;
|
|
405
|
+
if (inputObj.content && typeof inputObj.content === 'string') {
|
|
406
|
+
// Append previous step content as context
|
|
407
|
+
discussConfig.context = discussConfig.context
|
|
408
|
+
? `${discussConfig.context}\n\nPrevious step output:\n${inputObj.content}`
|
|
409
|
+
: `Previous step output:\n${inputObj.content}`;
|
|
410
|
+
}
|
|
411
|
+
}
|
|
412
|
+
try {
|
|
413
|
+
// Execute the discussion
|
|
414
|
+
const result = await discussionExecutor.execute(discussConfig);
|
|
415
|
+
if (result.success) {
|
|
416
|
+
return {
|
|
417
|
+
stepId: step.stepId,
|
|
418
|
+
success: true,
|
|
419
|
+
output: {
|
|
420
|
+
type: 'discuss',
|
|
421
|
+
pattern: result.pattern,
|
|
422
|
+
synthesis: result.synthesis,
|
|
423
|
+
participatingProviders: result.participatingProviders,
|
|
424
|
+
failedProviders: result.failedProviders,
|
|
425
|
+
rounds: result.rounds,
|
|
426
|
+
consensus: result.consensus,
|
|
427
|
+
totalDurationMs: result.totalDurationMs,
|
|
428
|
+
metadata: result.metadata,
|
|
429
|
+
},
|
|
430
|
+
durationMs: Date.now() - startTime,
|
|
431
|
+
retryCount: 0,
|
|
432
|
+
};
|
|
433
|
+
}
|
|
434
|
+
else {
|
|
435
|
+
return {
|
|
436
|
+
stepId: step.stepId,
|
|
437
|
+
success: false,
|
|
438
|
+
output: {
|
|
439
|
+
type: 'discuss',
|
|
440
|
+
pattern: result.pattern,
|
|
441
|
+
participatingProviders: result.participatingProviders,
|
|
442
|
+
failedProviders: result.failedProviders,
|
|
443
|
+
rounds: result.rounds,
|
|
444
|
+
},
|
|
445
|
+
error: {
|
|
446
|
+
code: result.error?.code ?? 'DISCUSSION_FAILED',
|
|
447
|
+
message: result.error?.message ?? 'Discussion execution failed',
|
|
448
|
+
retryable: true,
|
|
449
|
+
},
|
|
450
|
+
durationMs: Date.now() - startTime,
|
|
451
|
+
retryCount: 0,
|
|
452
|
+
};
|
|
453
|
+
}
|
|
454
|
+
}
|
|
455
|
+
catch (error) {
|
|
456
|
+
return {
|
|
457
|
+
stepId: step.stepId,
|
|
458
|
+
success: false,
|
|
459
|
+
error: {
|
|
460
|
+
code: 'DISCUSSION_EXECUTION_ERROR',
|
|
461
|
+
message: error instanceof Error ? error.message : 'Unknown discussion error',
|
|
462
|
+
retryable: true,
|
|
463
|
+
},
|
|
464
|
+
durationMs: Date.now() - startTime,
|
|
465
|
+
retryCount: 0,
|
|
466
|
+
};
|
|
467
|
+
}
|
|
468
|
+
}
|
|
469
|
+
//# sourceMappingURL=step-executor-factory.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"step-executor-factory.js","sourceRoot":"","sources":["../src/step-executor-factory.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,184 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Workflow Step Guard Implementation
|
|
3
|
+
*
|
|
4
|
+
* Enforces governance checks at workflow step boundaries.
|
|
5
|
+
*
|
|
6
|
+
* Invariants:
|
|
7
|
+
* - INV-WF-GUARD-001: Before guards run before step execution starts
|
|
8
|
+
* - INV-WF-GUARD-002: After guards run after step completes
|
|
9
|
+
* - INV-WF-GUARD-003: Block failures prevent step execution/continuation
|
|
10
|
+
* - INV-WF-GUARD-004: Guard results included in trace events
|
|
11
|
+
*/
|
|
12
|
+
import type { StepGuardResult, StepGuardContext, StepGuardPolicy, StepGateResult, StageProgressEvent, StageProgressStatus } from '@defai.digital/contracts';
|
|
13
|
+
/**
|
|
14
|
+
* Gate check function
|
|
15
|
+
*/
|
|
16
|
+
export type GateCheckFn = (context: StepGuardContext) => Promise<StepGateResult>;
|
|
17
|
+
/**
|
|
18
|
+
* Gate registry
|
|
19
|
+
*/
|
|
20
|
+
export interface GateRegistry {
|
|
21
|
+
/** Register a gate */
|
|
22
|
+
register(gateId: string, check: GateCheckFn): void;
|
|
23
|
+
/** Get a gate */
|
|
24
|
+
get(gateId: string): GateCheckFn | undefined;
|
|
25
|
+
/** Check if gate exists */
|
|
26
|
+
has(gateId: string): boolean;
|
|
27
|
+
/** List all gate IDs */
|
|
28
|
+
list(): string[];
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Configuration for step guard engine
|
|
32
|
+
*/
|
|
33
|
+
export interface StepGuardEngineConfig {
|
|
34
|
+
/** Enable guard checking */
|
|
35
|
+
enabled: boolean;
|
|
36
|
+
/** Default action on failure */
|
|
37
|
+
defaultOnFail: 'block' | 'warn' | 'continue';
|
|
38
|
+
/** Gate registry */
|
|
39
|
+
gateRegistry?: GateRegistry;
|
|
40
|
+
/** Event emitter for progress events */
|
|
41
|
+
onProgressEvent?: (event: StageProgressEvent) => void;
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* Default step guard engine configuration
|
|
45
|
+
*/
|
|
46
|
+
export declare const DEFAULT_STEP_GUARD_ENGINE_CONFIG: StepGuardEngineConfig;
|
|
47
|
+
/**
|
|
48
|
+
* Step Guard Engine
|
|
49
|
+
*
|
|
50
|
+
* Manages step guards and executes them at appropriate times.
|
|
51
|
+
*/
|
|
52
|
+
export declare class StepGuardEngine {
|
|
53
|
+
private readonly config;
|
|
54
|
+
private readonly gateRegistry;
|
|
55
|
+
private readonly policies;
|
|
56
|
+
private readonly onProgressEvent;
|
|
57
|
+
constructor(config?: Partial<StepGuardEngineConfig>);
|
|
58
|
+
/**
|
|
59
|
+
* Register a guard policy
|
|
60
|
+
*/
|
|
61
|
+
registerPolicy(policy: StepGuardPolicy): void;
|
|
62
|
+
/**
|
|
63
|
+
* Remove a guard policy
|
|
64
|
+
*/
|
|
65
|
+
removePolicy(policyId: string): boolean;
|
|
66
|
+
/**
|
|
67
|
+
* Get all registered policies
|
|
68
|
+
*/
|
|
69
|
+
getPolicies(): StepGuardPolicy[];
|
|
70
|
+
/**
|
|
71
|
+
* Register a custom gate
|
|
72
|
+
*/
|
|
73
|
+
registerGate(gateId: string, check: GateCheckFn): void;
|
|
74
|
+
/**
|
|
75
|
+
* Run before guards for a step
|
|
76
|
+
* INV-WF-GUARD-001: Runs before step execution
|
|
77
|
+
*/
|
|
78
|
+
runBeforeGuards(context: StepGuardContext): Promise<StepGuardResult[]>;
|
|
79
|
+
/**
|
|
80
|
+
* Run after guards for a step
|
|
81
|
+
* INV-WF-GUARD-002: Runs after step completes
|
|
82
|
+
*/
|
|
83
|
+
runAfterGuards(context: StepGuardContext): Promise<StepGuardResult[]>;
|
|
84
|
+
/**
|
|
85
|
+
* Check if step should be blocked
|
|
86
|
+
* INV-WF-GUARD-003: Block failures prevent execution
|
|
87
|
+
*/
|
|
88
|
+
shouldBlock(results: StepGuardResult[]): boolean;
|
|
89
|
+
/**
|
|
90
|
+
* Emit progress event
|
|
91
|
+
* INV-PROG-001, INV-PROG-002: Progress events emitted
|
|
92
|
+
*/
|
|
93
|
+
emitProgress(executionId: string, agentId: string, stageIndex: number, stageTotal: number, stageName: string, stageType: string, status: StageProgressStatus, options?: {
|
|
94
|
+
sessionId?: string;
|
|
95
|
+
durationMs?: number;
|
|
96
|
+
error?: string;
|
|
97
|
+
guardResult?: StepGuardResult;
|
|
98
|
+
metadata?: Record<string, unknown>;
|
|
99
|
+
}): void;
|
|
100
|
+
/**
|
|
101
|
+
* Run guards at a position
|
|
102
|
+
*/
|
|
103
|
+
private runGuards;
|
|
104
|
+
/**
|
|
105
|
+
* Run a single guard
|
|
106
|
+
*/
|
|
107
|
+
private runGuard;
|
|
108
|
+
/**
|
|
109
|
+
* Get policies applicable to context
|
|
110
|
+
*/
|
|
111
|
+
private getApplicablePolicies;
|
|
112
|
+
/**
|
|
113
|
+
* Check if step ID matches pattern
|
|
114
|
+
*/
|
|
115
|
+
private matchesStep;
|
|
116
|
+
/**
|
|
117
|
+
* Check if any pattern matches value
|
|
118
|
+
*/
|
|
119
|
+
private matchesPatterns;
|
|
120
|
+
/**
|
|
121
|
+
* Simple glob matching (* only)
|
|
122
|
+
*/
|
|
123
|
+
private globMatch;
|
|
124
|
+
/**
|
|
125
|
+
* Escape regex special characters
|
|
126
|
+
*/
|
|
127
|
+
private escapeRegex;
|
|
128
|
+
/**
|
|
129
|
+
* Register default gates
|
|
130
|
+
*/
|
|
131
|
+
private registerDefaultGates;
|
|
132
|
+
}
|
|
133
|
+
/**
|
|
134
|
+
* Create a gate registry
|
|
135
|
+
*/
|
|
136
|
+
export declare function createGateRegistry(): GateRegistry;
|
|
137
|
+
/**
|
|
138
|
+
* Create a step guard engine
|
|
139
|
+
*/
|
|
140
|
+
export declare function createStepGuardEngine(config?: Partial<StepGuardEngineConfig>): StepGuardEngine;
|
|
141
|
+
/**
|
|
142
|
+
* Progress tracker for workflow execution
|
|
143
|
+
*
|
|
144
|
+
* Tracks stage progress and emits events.
|
|
145
|
+
*/
|
|
146
|
+
export declare class ProgressTracker {
|
|
147
|
+
private readonly executionId;
|
|
148
|
+
private readonly agentId;
|
|
149
|
+
private readonly sessionId;
|
|
150
|
+
private readonly totalSteps;
|
|
151
|
+
private readonly onEvent;
|
|
152
|
+
constructor(executionId: string, agentId: string, totalSteps: number, onEvent: (event: StageProgressEvent) => void, sessionId?: string);
|
|
153
|
+
/**
|
|
154
|
+
* Emit starting event
|
|
155
|
+
* INV-PROG-001: Every stage emits starting event
|
|
156
|
+
*/
|
|
157
|
+
starting(stepIndex: number, stepId: string, stepType: string): void;
|
|
158
|
+
/**
|
|
159
|
+
* Emit completed event
|
|
160
|
+
* INV-PROG-002: Every stage emits terminal event
|
|
161
|
+
*/
|
|
162
|
+
completed(stepIndex: number, stepId: string, stepType: string, durationMs: number): void;
|
|
163
|
+
/**
|
|
164
|
+
* Emit failed event
|
|
165
|
+
*/
|
|
166
|
+
failed(stepIndex: number, stepId: string, stepType: string, error: string, durationMs: number): void;
|
|
167
|
+
/**
|
|
168
|
+
* Emit skipped event
|
|
169
|
+
*/
|
|
170
|
+
skipped(stepIndex: number, stepId: string, stepType: string): void;
|
|
171
|
+
/**
|
|
172
|
+
* Emit blocked event
|
|
173
|
+
*/
|
|
174
|
+
blocked(stepIndex: number, stepId: string, stepType: string, guardResult: StepGuardResult): void;
|
|
175
|
+
/**
|
|
176
|
+
* Emit event
|
|
177
|
+
*/
|
|
178
|
+
private emit;
|
|
179
|
+
}
|
|
180
|
+
/**
|
|
181
|
+
* Create a progress tracker
|
|
182
|
+
*/
|
|
183
|
+
export declare function createProgressTracker(executionId: string, agentId: string, totalSteps: number, onEvent: (event: StageProgressEvent) => void, sessionId?: string): ProgressTracker;
|
|
184
|
+
//# sourceMappingURL=step-guard.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"step-guard.d.ts","sourceRoot":"","sources":["../src/step-guard.ts"],"names":[],"mappings":"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"}
|