@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.
@@ -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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"}