dynamic-api-workflow 1.0.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/README.md +287 -0
- package/dist/engine/cli.d.ts +3 -0
- package/dist/engine/cli.d.ts.map +1 -0
- package/dist/engine/cli.js +4 -0
- package/dist/engine/cli.js.map +1 -0
- package/dist/engine/config/llm-costs.d.ts +16 -0
- package/dist/engine/config/llm-costs.d.ts.map +1 -0
- package/dist/engine/config/llm-costs.js +38 -0
- package/dist/engine/config/llm-costs.js.map +1 -0
- package/dist/engine/core/node-executor.d.ts +8 -0
- package/dist/engine/core/node-executor.d.ts.map +1 -0
- package/dist/engine/core/node-executor.js +144 -0
- package/dist/engine/core/node-executor.js.map +1 -0
- package/dist/engine/core/validator.d.ts +6 -0
- package/dist/engine/core/validator.d.ts.map +1 -0
- package/dist/engine/core/validator.js +473 -0
- package/dist/engine/core/validator.js.map +1 -0
- package/dist/engine/core/workflow-executor.d.ts +6 -0
- package/dist/engine/core/workflow-executor.d.ts.map +1 -0
- package/dist/engine/core/workflow-executor.js +186 -0
- package/dist/engine/core/workflow-executor.js.map +1 -0
- package/dist/engine/core/workflow-loader.d.ts +26 -0
- package/dist/engine/core/workflow-loader.d.ts.map +1 -0
- package/dist/engine/core/workflow-loader.js +257 -0
- package/dist/engine/core/workflow-loader.js.map +1 -0
- package/dist/engine/index.d.ts +5 -0
- package/dist/engine/index.d.ts.map +1 -0
- package/dist/engine/index.js +70 -0
- package/dist/engine/index.js.map +1 -0
- package/dist/engine/nodes/code-node.d.ts +6 -0
- package/dist/engine/nodes/code-node.d.ts.map +1 -0
- package/dist/engine/nodes/code-node.js +70 -0
- package/dist/engine/nodes/code-node.js.map +1 -0
- package/dist/engine/nodes/llm-node.d.ts +6 -0
- package/dist/engine/nodes/llm-node.d.ts.map +1 -0
- package/dist/engine/nodes/llm-node.js +164 -0
- package/dist/engine/nodes/llm-node.js.map +1 -0
- package/dist/engine/nodes/passthrough-node.d.ts +6 -0
- package/dist/engine/nodes/passthrough-node.d.ts.map +1 -0
- package/dist/engine/nodes/passthrough-node.js +13 -0
- package/dist/engine/nodes/passthrough-node.js.map +1 -0
- package/dist/engine/nodes/reduce-node.d.ts +6 -0
- package/dist/engine/nodes/reduce-node.d.ts.map +1 -0
- package/dist/engine/nodes/reduce-node.js +44 -0
- package/dist/engine/nodes/reduce-node.js.map +1 -0
- package/dist/engine/nodes/split-node.d.ts +10 -0
- package/dist/engine/nodes/split-node.d.ts.map +1 -0
- package/dist/engine/nodes/split-node.js +51 -0
- package/dist/engine/nodes/split-node.js.map +1 -0
- package/dist/engine/providers/gemini.d.ts +27 -0
- package/dist/engine/providers/gemini.d.ts.map +1 -0
- package/dist/engine/providers/gemini.js +163 -0
- package/dist/engine/providers/gemini.js.map +1 -0
- package/dist/engine/providers/grok.d.ts +28 -0
- package/dist/engine/providers/grok.d.ts.map +1 -0
- package/dist/engine/providers/grok.js +164 -0
- package/dist/engine/providers/grok.js.map +1 -0
- package/dist/engine/providers/registry.d.ts +33 -0
- package/dist/engine/providers/registry.d.ts.map +1 -0
- package/dist/engine/providers/registry.js +51 -0
- package/dist/engine/providers/registry.js.map +1 -0
- package/dist/engine/router.d.ts +8 -0
- package/dist/engine/router.d.ts.map +1 -0
- package/dist/engine/router.js +79 -0
- package/dist/engine/router.js.map +1 -0
- package/dist/engine/scripts/cleanup-port.d.ts +2 -0
- package/dist/engine/scripts/cleanup-port.d.ts.map +1 -0
- package/dist/engine/scripts/cleanup-port.js +54 -0
- package/dist/engine/scripts/cleanup-port.js.map +1 -0
- package/dist/engine/scripts/create-endpoint.d.ts +2 -0
- package/dist/engine/scripts/create-endpoint.d.ts.map +1 -0
- package/dist/engine/scripts/create-endpoint.js +83 -0
- package/dist/engine/scripts/create-endpoint.js.map +1 -0
- package/dist/engine/scripts/scan-deps.d.ts +2 -0
- package/dist/engine/scripts/scan-deps.d.ts.map +1 -0
- package/dist/engine/scripts/scan-deps.js +112 -0
- package/dist/engine/scripts/scan-deps.js.map +1 -0
- package/dist/engine/scripts/validate-workflows.d.ts +3 -0
- package/dist/engine/scripts/validate-workflows.d.ts.map +1 -0
- package/dist/engine/scripts/validate-workflows.js +75 -0
- package/dist/engine/scripts/validate-workflows.js.map +1 -0
- package/dist/engine/server.d.ts +10 -0
- package/dist/engine/server.d.ts.map +1 -0
- package/dist/engine/server.js +92 -0
- package/dist/engine/server.js.map +1 -0
- package/dist/engine/types/index.d.ts +304 -0
- package/dist/engine/types/index.d.ts.map +1 -0
- package/dist/engine/types/index.js +24 -0
- package/dist/engine/types/index.js.map +1 -0
- package/dist/engine/utils/file-cache.d.ts +31 -0
- package/dist/engine/utils/file-cache.d.ts.map +1 -0
- package/dist/engine/utils/file-cache.js +68 -0
- package/dist/engine/utils/file-cache.js.map +1 -0
- package/dist/engine/utils/file-resolver.d.ts +21 -0
- package/dist/engine/utils/file-resolver.d.ts.map +1 -0
- package/dist/engine/utils/file-resolver.js +33 -0
- package/dist/engine/utils/file-resolver.js.map +1 -0
- package/dist/engine/utils/jsonpath.d.ts +13 -0
- package/dist/engine/utils/jsonpath.d.ts.map +1 -0
- package/dist/engine/utils/jsonpath.js +38 -0
- package/dist/engine/utils/jsonpath.js.map +1 -0
- package/dist/engine/utils/logger.d.ts +11 -0
- package/dist/engine/utils/logger.d.ts.map +1 -0
- package/dist/engine/utils/logger.js +24 -0
- package/dist/engine/utils/logger.js.map +1 -0
- package/dist/engine/utils/metrics.d.ts +6 -0
- package/dist/engine/utils/metrics.d.ts.map +1 -0
- package/dist/engine/utils/metrics.js +82 -0
- package/dist/engine/utils/metrics.js.map +1 -0
- package/dist/engine/utils/schema-validator.d.ts +10 -0
- package/dist/engine/utils/schema-validator.d.ts.map +1 -0
- package/dist/engine/utils/schema-validator.js +61 -0
- package/dist/engine/utils/schema-validator.js.map +1 -0
- package/package.json +53 -0
|
@@ -0,0 +1,473 @@
|
|
|
1
|
+
import fs from 'fs/promises';
|
|
2
|
+
import path from 'path';
|
|
3
|
+
import { providerRegistry } from '../providers/registry.js';
|
|
4
|
+
import { ErrorCode } from '../types/index.js';
|
|
5
|
+
import { resolveFilePath } from '../utils/file-resolver.js';
|
|
6
|
+
const schemasDir = process.env.SCHEMAS_DIR || './src/source/schemas';
|
|
7
|
+
/**
|
|
8
|
+
* Validate a workflow definition
|
|
9
|
+
*/
|
|
10
|
+
export async function validateWorkflow(workflow) {
|
|
11
|
+
const errors = [];
|
|
12
|
+
const warnings = [];
|
|
13
|
+
// Validate nodes
|
|
14
|
+
const nodeValidation = validateNodes(workflow);
|
|
15
|
+
errors.push(...nodeValidation.errors);
|
|
16
|
+
warnings.push(...nodeValidation.warnings);
|
|
17
|
+
// Validate stages
|
|
18
|
+
const stageValidation = validateStages(workflow);
|
|
19
|
+
errors.push(...stageValidation.errors);
|
|
20
|
+
warnings.push(...stageValidation.warnings);
|
|
21
|
+
// Validate entry/exit stages
|
|
22
|
+
const entryExitValidation = validateEntryExitStages(workflow);
|
|
23
|
+
errors.push(...entryExitValidation.errors);
|
|
24
|
+
// Validate input references
|
|
25
|
+
const inputValidation = validateInputReferences(workflow);
|
|
26
|
+
errors.push(...inputValidation.errors);
|
|
27
|
+
// Check for cycles
|
|
28
|
+
const cycleValidation = detectCycles(workflow);
|
|
29
|
+
errors.push(...cycleValidation.errors);
|
|
30
|
+
// Validate file existence
|
|
31
|
+
const fileValidation = await validateFileExistence(workflow);
|
|
32
|
+
errors.push(...fileValidation.errors);
|
|
33
|
+
// Validate LLM references
|
|
34
|
+
const llmValidation = validateLLMReferences(workflow);
|
|
35
|
+
errors.push(...llmValidation.errors);
|
|
36
|
+
warnings.push(...llmValidation.warnings);
|
|
37
|
+
if (errors.length > 0) {
|
|
38
|
+
return { valid: false, errors, warnings };
|
|
39
|
+
}
|
|
40
|
+
return { valid: true, warnings };
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* Validate node definitions
|
|
44
|
+
*/
|
|
45
|
+
function validateNodes(workflow) {
|
|
46
|
+
const errors = [];
|
|
47
|
+
const warnings = [];
|
|
48
|
+
const nodeIds = new Set();
|
|
49
|
+
for (const node of workflow.nodes) {
|
|
50
|
+
// Check node ID uniqueness
|
|
51
|
+
if (nodeIds.has(node.id)) {
|
|
52
|
+
errors.push({
|
|
53
|
+
code: ErrorCode.INVALID_WORKFLOW,
|
|
54
|
+
message: `Duplicate node ID: ${node.id}`,
|
|
55
|
+
path: `nodes[${node.id}]`,
|
|
56
|
+
});
|
|
57
|
+
}
|
|
58
|
+
nodeIds.add(node.id);
|
|
59
|
+
// Validate node type specific requirements
|
|
60
|
+
if (node.type === 'llm') {
|
|
61
|
+
if (!node.llmRef && !node.provider) {
|
|
62
|
+
errors.push({
|
|
63
|
+
code: ErrorCode.INVALID_WORKFLOW,
|
|
64
|
+
message: `LLM node '${node.id}' must have either 'llmRef' or 'provider' specified`,
|
|
65
|
+
path: `nodes[${node.id}]`,
|
|
66
|
+
});
|
|
67
|
+
}
|
|
68
|
+
if (node.provider && !node.config) {
|
|
69
|
+
errors.push({
|
|
70
|
+
code: ErrorCode.INVALID_WORKFLOW,
|
|
71
|
+
message: `LLM node '${node.id}' with inline provider must have 'config'`,
|
|
72
|
+
path: `nodes[${node.id}]`,
|
|
73
|
+
});
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
if (node.type === 'code') {
|
|
77
|
+
if (!node.file) {
|
|
78
|
+
errors.push({
|
|
79
|
+
code: ErrorCode.INVALID_WORKFLOW,
|
|
80
|
+
message: `Code node '${node.id}' must have 'file' specified`,
|
|
81
|
+
path: `nodes[${node.id}]`,
|
|
82
|
+
});
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
if (node.type === 'reduce') {
|
|
86
|
+
if (!node.inputs || node.inputs.length === 0) {
|
|
87
|
+
errors.push({
|
|
88
|
+
code: ErrorCode.INVALID_WORKFLOW,
|
|
89
|
+
message: `Reduce node '${node.id}' must have at least one input`,
|
|
90
|
+
path: `nodes[${node.id}]`,
|
|
91
|
+
});
|
|
92
|
+
}
|
|
93
|
+
if (!node.mapping || Object.keys(node.mapping).length === 0) {
|
|
94
|
+
errors.push({
|
|
95
|
+
code: ErrorCode.INVALID_WORKFLOW,
|
|
96
|
+
message: `Reduce node '${node.id}' must have mapping defined`,
|
|
97
|
+
path: `nodes[${node.id}]`,
|
|
98
|
+
});
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
if (node.type === 'split') {
|
|
102
|
+
if (!node.mapping || Object.keys(node.mapping).length === 0) {
|
|
103
|
+
errors.push({
|
|
104
|
+
code: ErrorCode.INVALID_WORKFLOW,
|
|
105
|
+
message: `Split node '${node.id}' must have mapping defined`,
|
|
106
|
+
path: `nodes[${node.id}]`,
|
|
107
|
+
});
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
return { errors, warnings };
|
|
112
|
+
}
|
|
113
|
+
/**
|
|
114
|
+
* Validate stage definitions
|
|
115
|
+
* All stages now use nodes: { nodeId: InlineNodeDefinition }
|
|
116
|
+
*/
|
|
117
|
+
function validateStages(workflow) {
|
|
118
|
+
const errors = [];
|
|
119
|
+
const warnings = [];
|
|
120
|
+
const nodeIds = new Set(workflow.nodes.map((n) => n.id));
|
|
121
|
+
const referencedNodes = new Set();
|
|
122
|
+
const isSingleStage = workflow.stages.length === 1;
|
|
123
|
+
for (const stage of workflow.stages) {
|
|
124
|
+
// Validate nodes object exists
|
|
125
|
+
if (!stage.nodes || typeof stage.nodes !== 'object') {
|
|
126
|
+
errors.push({
|
|
127
|
+
code: ErrorCode.INVALID_WORKFLOW,
|
|
128
|
+
message: `Stage '${stage.name}' must have 'nodes' object defined`,
|
|
129
|
+
path: `stages[${stage.name}]`,
|
|
130
|
+
});
|
|
131
|
+
continue;
|
|
132
|
+
}
|
|
133
|
+
const nodeEntries = Object.entries(stage.nodes);
|
|
134
|
+
if (nodeEntries.length === 0) {
|
|
135
|
+
errors.push({
|
|
136
|
+
code: ErrorCode.INVALID_WORKFLOW,
|
|
137
|
+
message: `Stage '${stage.name}' must have at least one node`,
|
|
138
|
+
path: `stages[${stage.name}]`,
|
|
139
|
+
});
|
|
140
|
+
continue;
|
|
141
|
+
}
|
|
142
|
+
// Determine if this is a boundary stage (entry, exit, or single 'main' stage)
|
|
143
|
+
const isBoundaryStage = stage.name === 'entry' ||
|
|
144
|
+
stage.name === 'exit' ||
|
|
145
|
+
(isSingleStage && stage.name === 'main');
|
|
146
|
+
// Boundary stages must have exactly 1 node
|
|
147
|
+
if (isBoundaryStage && nodeEntries.length !== 1) {
|
|
148
|
+
errors.push({
|
|
149
|
+
code: ErrorCode.INVALID_WORKFLOW,
|
|
150
|
+
message: `Stage '${stage.name}' must have exactly 1 node, got ${nodeEntries.length}`,
|
|
151
|
+
path: `stages[${stage.name}]`,
|
|
152
|
+
});
|
|
153
|
+
}
|
|
154
|
+
// Validate each node reference
|
|
155
|
+
for (const [nodeId, inlineNode] of nodeEntries) {
|
|
156
|
+
if (!nodeIds.has(nodeId)) {
|
|
157
|
+
errors.push({
|
|
158
|
+
code: ErrorCode.NODE_NOT_FOUND,
|
|
159
|
+
message: `Stage '${stage.name}' references non-existent node: ${nodeId}`,
|
|
160
|
+
path: `stages[${stage.name}].nodes`,
|
|
161
|
+
});
|
|
162
|
+
}
|
|
163
|
+
else {
|
|
164
|
+
referencedNodes.add(nodeId);
|
|
165
|
+
}
|
|
166
|
+
// Validate input is a string (property of InlineNodeDefinition)
|
|
167
|
+
const input = 'input' in inlineNode ? inlineNode.input : undefined;
|
|
168
|
+
if (!input || typeof input !== 'string') {
|
|
169
|
+
// Reduce nodes might have inputs array instead of single input string
|
|
170
|
+
if (inlineNode.type !== 'reduce') {
|
|
171
|
+
errors.push({
|
|
172
|
+
code: ErrorCode.INVALID_WORKFLOW,
|
|
173
|
+
message: `Stage '${stage.name}' node '${nodeId}' input must be a string`,
|
|
174
|
+
path: `stages[${stage.name}].nodes.${nodeId}`,
|
|
175
|
+
});
|
|
176
|
+
}
|
|
177
|
+
}
|
|
178
|
+
}
|
|
179
|
+
}
|
|
180
|
+
// Check if all nodes are referenced
|
|
181
|
+
for (const nodeId of nodeIds) {
|
|
182
|
+
if (!referencedNodes.has(nodeId)) {
|
|
183
|
+
warnings.push({
|
|
184
|
+
code: 'UNREACHABLE_NODE',
|
|
185
|
+
message: `Node '${nodeId}' is not referenced by any stage`,
|
|
186
|
+
path: `nodes[${nodeId}]`,
|
|
187
|
+
});
|
|
188
|
+
}
|
|
189
|
+
}
|
|
190
|
+
return { errors, warnings };
|
|
191
|
+
}
|
|
192
|
+
/**
|
|
193
|
+
* Validate entry and exit stages exist and are in correct positions
|
|
194
|
+
*/
|
|
195
|
+
function validateEntryExitStages(workflow) {
|
|
196
|
+
const errors = [];
|
|
197
|
+
if (workflow.stages.length === 0) {
|
|
198
|
+
errors.push({
|
|
199
|
+
code: ErrorCode.INVALID_WORKFLOW,
|
|
200
|
+
message: 'Workflow must have at least one stage',
|
|
201
|
+
});
|
|
202
|
+
return { errors };
|
|
203
|
+
}
|
|
204
|
+
// Single-stage workflow (must be named 'main')
|
|
205
|
+
if (workflow.stages.length === 1) {
|
|
206
|
+
const stage = workflow.stages[0];
|
|
207
|
+
if (stage.name !== 'main') {
|
|
208
|
+
errors.push({
|
|
209
|
+
code: ErrorCode.INVALID_WORKFLOW,
|
|
210
|
+
message: `Single-stage workflow must have stage named 'main', got '${stage.name}'`,
|
|
211
|
+
path: 'stages[0]',
|
|
212
|
+
});
|
|
213
|
+
}
|
|
214
|
+
// Validate entry node uses $input
|
|
215
|
+
if (stage.nodes) {
|
|
216
|
+
const nodeId = Object.keys(stage.nodes)[0];
|
|
217
|
+
const inlineNode = stage.nodes[nodeId];
|
|
218
|
+
const input = 'input' in inlineNode ? inlineNode.input : undefined;
|
|
219
|
+
if (input !== '$input' && !input?.startsWith('$input.')) {
|
|
220
|
+
errors.push({
|
|
221
|
+
code: ErrorCode.INVALID_WORKFLOW,
|
|
222
|
+
message: `Entry node '${nodeId}' must use '$input' or '$input.*', got '${input}'`,
|
|
223
|
+
path: `stages[main].nodes.${nodeId}`,
|
|
224
|
+
});
|
|
225
|
+
}
|
|
226
|
+
}
|
|
227
|
+
return { errors };
|
|
228
|
+
}
|
|
229
|
+
// Multi-stage workflow (must have entry and exit)
|
|
230
|
+
if (workflow.stages[0].name !== 'entry') {
|
|
231
|
+
errors.push({
|
|
232
|
+
code: ErrorCode.INVALID_WORKFLOW,
|
|
233
|
+
message: `First stage must be named 'entry', got '${workflow.stages[0].name}'`,
|
|
234
|
+
path: 'stages[0]',
|
|
235
|
+
});
|
|
236
|
+
}
|
|
237
|
+
const lastStage = workflow.stages[workflow.stages.length - 1];
|
|
238
|
+
if (lastStage.name !== 'exit') {
|
|
239
|
+
errors.push({
|
|
240
|
+
code: ErrorCode.INVALID_WORKFLOW,
|
|
241
|
+
message: `Last stage must be named 'exit', got '${lastStage.name}'`,
|
|
242
|
+
path: `stages[${workflow.stages.length - 1}]`,
|
|
243
|
+
});
|
|
244
|
+
}
|
|
245
|
+
// Validate entry node uses $input
|
|
246
|
+
const entryStage = workflow.stages[0];
|
|
247
|
+
if (entryStage.nodes) {
|
|
248
|
+
const nodeId = Object.keys(entryStage.nodes)[0];
|
|
249
|
+
const inlineNode = entryStage.nodes[nodeId];
|
|
250
|
+
const input = 'input' in inlineNode ? inlineNode.input : undefined;
|
|
251
|
+
if (input !== '$input' && !input?.startsWith('$input.')) {
|
|
252
|
+
errors.push({
|
|
253
|
+
code: ErrorCode.INVALID_WORKFLOW,
|
|
254
|
+
message: `Entry node '${nodeId}' must use '$input' or '$input.*', got '${input}'`,
|
|
255
|
+
path: `stages[entry].nodes.${nodeId}`,
|
|
256
|
+
});
|
|
257
|
+
}
|
|
258
|
+
}
|
|
259
|
+
return { errors };
|
|
260
|
+
}
|
|
261
|
+
/**
|
|
262
|
+
* Validate input references
|
|
263
|
+
*/
|
|
264
|
+
function validateInputReferences(workflow) {
|
|
265
|
+
const errors = [];
|
|
266
|
+
const nodeIds = new Set(workflow.nodes.map((n) => n.id));
|
|
267
|
+
const splitNodeIds = new Set(workflow.nodes.filter((n) => n.type === 'split').map((n) => n.id));
|
|
268
|
+
for (const node of workflow.nodes) {
|
|
269
|
+
if ('input' in node && typeof node.input === 'string') {
|
|
270
|
+
const input = node.input;
|
|
271
|
+
// Skip $input (valid special reference)
|
|
272
|
+
if (input === '$input' || input.startsWith('$input.')) {
|
|
273
|
+
continue;
|
|
274
|
+
}
|
|
275
|
+
// Check for split output reference (nodeId.outputName)
|
|
276
|
+
if (input.includes('.')) {
|
|
277
|
+
const [nodeId] = input.split('.');
|
|
278
|
+
// Check if it's a split node OR if it's just a node reference from a stage/namespace
|
|
279
|
+
// NOTE: Currently we only support dots for split outputs.
|
|
280
|
+
// Using stage.node syntax is NOT supported by the engine yet.
|
|
281
|
+
if (!splitNodeIds.has(nodeId)) {
|
|
282
|
+
// Try to verify if it's "namespace.nodeId" but current engine flattens nodes to global scope
|
|
283
|
+
// So any dot implies split-node output access.
|
|
284
|
+
// We will allow it IF the validator is fixed to support namespaces, but for now we error.
|
|
285
|
+
errors.push({
|
|
286
|
+
code: ErrorCode.NODE_NOT_FOUND,
|
|
287
|
+
message: `Node '${node.id}' references '${input}' but '${nodeId}' is not a split node`,
|
|
288
|
+
path: `nodes[${node.id}].input`,
|
|
289
|
+
});
|
|
290
|
+
}
|
|
291
|
+
}
|
|
292
|
+
else {
|
|
293
|
+
// Regular node reference
|
|
294
|
+
if (!nodeIds.has(input)) {
|
|
295
|
+
errors.push({
|
|
296
|
+
code: ErrorCode.NODE_NOT_FOUND,
|
|
297
|
+
message: `Node '${node.id}' references non-existent node: ${input}`,
|
|
298
|
+
path: `nodes[${node.id}].input`,
|
|
299
|
+
});
|
|
300
|
+
}
|
|
301
|
+
}
|
|
302
|
+
}
|
|
303
|
+
// Check reduce node inputs
|
|
304
|
+
if (node.type === 'reduce') {
|
|
305
|
+
for (const input of node.inputs) {
|
|
306
|
+
if (!nodeIds.has(input)) {
|
|
307
|
+
errors.push({
|
|
308
|
+
code: ErrorCode.NODE_NOT_FOUND,
|
|
309
|
+
message: `Reduce node '${node.id}' references non-existent input node: ${input}`,
|
|
310
|
+
path: `nodes[${node.id}].inputs`,
|
|
311
|
+
});
|
|
312
|
+
}
|
|
313
|
+
}
|
|
314
|
+
}
|
|
315
|
+
}
|
|
316
|
+
return { errors };
|
|
317
|
+
}
|
|
318
|
+
/**
|
|
319
|
+
* Detect cycles in node dependencies
|
|
320
|
+
*/
|
|
321
|
+
function detectCycles(workflow) {
|
|
322
|
+
const errors = [];
|
|
323
|
+
const graph = buildDependencyGraph(workflow);
|
|
324
|
+
const visited = new Set();
|
|
325
|
+
const recursionStack = new Set();
|
|
326
|
+
function hasCycle(nodeId, path) {
|
|
327
|
+
visited.add(nodeId);
|
|
328
|
+
recursionStack.add(nodeId);
|
|
329
|
+
const dependencies = graph.get(nodeId) || [];
|
|
330
|
+
for (const dep of dependencies) {
|
|
331
|
+
if (!visited.has(dep)) {
|
|
332
|
+
if (hasCycle(dep, [...path, dep])) {
|
|
333
|
+
return true;
|
|
334
|
+
}
|
|
335
|
+
}
|
|
336
|
+
else if (recursionStack.has(dep)) {
|
|
337
|
+
errors.push({
|
|
338
|
+
code: ErrorCode.CYCLE_DETECTED,
|
|
339
|
+
message: `Cycle detected: ${[...path, dep].join(' -> ')}`,
|
|
340
|
+
});
|
|
341
|
+
return true;
|
|
342
|
+
}
|
|
343
|
+
}
|
|
344
|
+
recursionStack.delete(nodeId);
|
|
345
|
+
return false;
|
|
346
|
+
}
|
|
347
|
+
for (const nodeId of graph.keys()) {
|
|
348
|
+
if (!visited.has(nodeId)) {
|
|
349
|
+
hasCycle(nodeId, [nodeId]);
|
|
350
|
+
}
|
|
351
|
+
}
|
|
352
|
+
return { errors };
|
|
353
|
+
}
|
|
354
|
+
/**
|
|
355
|
+
* Build dependency graph from workflow nodes
|
|
356
|
+
*/
|
|
357
|
+
function buildDependencyGraph(workflow) {
|
|
358
|
+
const graph = new Map();
|
|
359
|
+
for (const node of workflow.nodes) {
|
|
360
|
+
const dependencies = [];
|
|
361
|
+
if ('input' in node && typeof node.input === 'string' && node.input !== '$input') {
|
|
362
|
+
const inputNodeId = node.input.split('.')[0];
|
|
363
|
+
dependencies.push(inputNodeId);
|
|
364
|
+
}
|
|
365
|
+
if (node.type === 'reduce') {
|
|
366
|
+
dependencies.push(...node.inputs);
|
|
367
|
+
}
|
|
368
|
+
graph.set(node.id, dependencies);
|
|
369
|
+
}
|
|
370
|
+
return graph;
|
|
371
|
+
}
|
|
372
|
+
/**
|
|
373
|
+
* Validate file existence for code nodes, prompts, and schemas
|
|
374
|
+
*/
|
|
375
|
+
async function validateFileExistence(workflow) {
|
|
376
|
+
const errors = [];
|
|
377
|
+
const endpointPath = workflow.endpoint?.endpointPath || '';
|
|
378
|
+
// Validate code node files
|
|
379
|
+
for (const node of workflow.nodes) {
|
|
380
|
+
if (node.type === 'code') {
|
|
381
|
+
const filePath = resolveFilePath(node.file, endpointPath, 'codes');
|
|
382
|
+
try {
|
|
383
|
+
await fs.access(filePath);
|
|
384
|
+
}
|
|
385
|
+
catch {
|
|
386
|
+
errors.push({
|
|
387
|
+
code: ErrorCode.FILE_NOT_FOUND,
|
|
388
|
+
message: `Code file not found: ${node.file}`,
|
|
389
|
+
path: `nodes[${node.id}].file`,
|
|
390
|
+
});
|
|
391
|
+
}
|
|
392
|
+
}
|
|
393
|
+
// Validate prompt files for LLM nodes
|
|
394
|
+
if (node.type === 'llm' && node.systemMessages) {
|
|
395
|
+
for (const msg of node.systemMessages) {
|
|
396
|
+
if (msg.file) {
|
|
397
|
+
const filePath = resolveFilePath(msg.file, endpointPath, 'prompts');
|
|
398
|
+
try {
|
|
399
|
+
await fs.access(filePath);
|
|
400
|
+
}
|
|
401
|
+
catch {
|
|
402
|
+
errors.push({
|
|
403
|
+
code: ErrorCode.FILE_NOT_FOUND,
|
|
404
|
+
message: `Prompt file not found: ${msg.file}`,
|
|
405
|
+
path: `nodes[${node.id}].systemMessages`,
|
|
406
|
+
});
|
|
407
|
+
}
|
|
408
|
+
}
|
|
409
|
+
}
|
|
410
|
+
}
|
|
411
|
+
}
|
|
412
|
+
// Validate schema file if referenced
|
|
413
|
+
if (workflow.input?.schema?.file) {
|
|
414
|
+
const filePath = path.join(process.cwd(), schemasDir, workflow.input.schema.file);
|
|
415
|
+
try {
|
|
416
|
+
await fs.access(filePath);
|
|
417
|
+
}
|
|
418
|
+
catch {
|
|
419
|
+
errors.push({
|
|
420
|
+
code: ErrorCode.FILE_NOT_FOUND,
|
|
421
|
+
message: `Schema file not found: ${workflow.input.schema.file}`,
|
|
422
|
+
path: 'input.schema.file',
|
|
423
|
+
});
|
|
424
|
+
}
|
|
425
|
+
}
|
|
426
|
+
return { errors };
|
|
427
|
+
}
|
|
428
|
+
/**
|
|
429
|
+
* Validate LLM references and provider availability
|
|
430
|
+
*/
|
|
431
|
+
function validateLLMReferences(workflow) {
|
|
432
|
+
const errors = [];
|
|
433
|
+
const warnings = [];
|
|
434
|
+
for (const node of workflow.nodes) {
|
|
435
|
+
if (node.type === 'llm') {
|
|
436
|
+
// Check llmRef exists
|
|
437
|
+
if (node.llmRef) {
|
|
438
|
+
if (!workflow.llm || !workflow.llm[node.llmRef]) {
|
|
439
|
+
errors.push({
|
|
440
|
+
code: ErrorCode.INVALID_WORKFLOW,
|
|
441
|
+
message: `LLM node '${node.id}' references non-existent llmRef: ${node.llmRef}`,
|
|
442
|
+
path: `nodes[${node.id}].llmRef`,
|
|
443
|
+
});
|
|
444
|
+
}
|
|
445
|
+
else {
|
|
446
|
+
// Check provider is registered
|
|
447
|
+
const llmConfig = workflow.llm[node.llmRef];
|
|
448
|
+
const validation = providerRegistry.validate(llmConfig.provider);
|
|
449
|
+
if (!validation.valid) {
|
|
450
|
+
errors.push({
|
|
451
|
+
code: ErrorCode.PROVIDER_NOT_FOUND,
|
|
452
|
+
message: validation.error || 'Provider not found',
|
|
453
|
+
path: `llm[${node.llmRef}].provider`,
|
|
454
|
+
});
|
|
455
|
+
}
|
|
456
|
+
}
|
|
457
|
+
}
|
|
458
|
+
else if (node.provider) {
|
|
459
|
+
// Inline provider - check it's registered
|
|
460
|
+
const validation = providerRegistry.validate(node.provider);
|
|
461
|
+
if (!validation.valid) {
|
|
462
|
+
errors.push({
|
|
463
|
+
code: ErrorCode.PROVIDER_NOT_FOUND,
|
|
464
|
+
message: validation.error || 'Provider not found',
|
|
465
|
+
path: `nodes[${node.id}].provider`,
|
|
466
|
+
});
|
|
467
|
+
}
|
|
468
|
+
}
|
|
469
|
+
}
|
|
470
|
+
}
|
|
471
|
+
return { errors, warnings };
|
|
472
|
+
}
|
|
473
|
+
//# sourceMappingURL=validator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"validator.js","sourceRoot":"","sources":["../../../engine/core/validator.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import type { WorkflowDefinition, WorkflowResponse } from '../types/index.js';
|
|
2
|
+
/**
|
|
3
|
+
* Execute a workflow with the given input
|
|
4
|
+
*/
|
|
5
|
+
export declare function executeWorkflow(workflow: WorkflowDefinition, input: unknown, params?: Record<string, string>): Promise<WorkflowResponse>;
|
|
6
|
+
//# sourceMappingURL=workflow-executor.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"workflow-executor.d.ts","sourceRoot":"","sources":["../../../engine/core/workflow-executor.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACR,kBAAkB,EAClB,gBAAgB,EAInB,MAAM,mBAAmB,CAAC;AAO3B;;GAEG;AACH,wBAAsB,eAAe,CACjC,QAAQ,EAAE,kBAAkB,EAC5B,KAAK,EAAE,OAAO,EACd,MAAM,GAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAM,GACpC,OAAO,CAAC,gBAAgB,CAAC,CAsG3B"}
|