@ai.ntellect/core 0.7.6 → 0.7.7
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/dist/graph/controller.d.ts +2 -3
- package/dist/graph/controller.d.ts.map +1 -1
- package/dist/graph/controller.js +5 -6
- package/dist/graph/controller.js.map +1 -1
- package/dist/graph/index.js +2 -2
- package/dist/graph/index.js.map +1 -1
- package/dist/graph/node.d.ts +9 -39
- package/dist/graph/node.d.ts.map +1 -1
- package/dist/graph/node.js +27 -60
- package/dist/graph/node.js.map +1 -1
- package/dist/types/index.d.ts +3 -3
- package/dist/types/index.d.ts.map +1 -1
- package/dist/utils/generate-action-schema.js +2 -2
- package/graph/controller.ts +5 -10
- package/graph/index.ts +3 -3
- package/graph/node.ts +25 -89
- package/package.json +1 -1
- package/test/graph/index.test.ts +119 -89
- package/test/graph/node.test.ts +178 -0
- package/types/index.ts +3 -3
- package/utils/generate-action-schema.ts +2 -2
@@ -11,7 +11,6 @@ export declare class GraphController {
|
|
11
11
|
* Executes multiple graphs sequentially
|
12
12
|
* @param graphs - Array of GraphFlow instances to execute
|
13
13
|
* @param startNodes - Array of starting node identifiers for each graph
|
14
|
-
* @param inputs - Optional array of additional inputs for each graph
|
15
14
|
* @param params - Optional array of node parameters for each graph
|
16
15
|
* @returns Map containing results of each graph execution, keyed by graph name and index
|
17
16
|
* @template T - Zod schema type for graph context validation
|
@@ -23,10 +22,10 @@ export declare class GraphController {
|
|
23
22
|
* @param graphs - Array of GraphFlow instances to execute
|
24
23
|
* @param startNodes - Array of starting node identifiers for each graph
|
25
24
|
* @param concurrency - Optional limit on number of concurrent graph executions
|
26
|
-
* @param
|
25
|
+
* @param params - Optional array of node parameters for each graph
|
27
26
|
* @returns Map containing results of each graph execution, keyed by graph name
|
28
27
|
* @template T - Zod schema type for graph context validation
|
29
28
|
*/
|
30
|
-
static executeParallel<T extends ZodSchema>(graphs: GraphFlow<T>[], startNodes: string[], concurrency: number,
|
29
|
+
static executeParallel<T extends ZodSchema>(graphs: GraphFlow<T>[], startNodes: string[], concurrency: number, params?: NodeParams[]): Promise<GraphContext<T>[]>;
|
31
30
|
}
|
32
31
|
//# sourceMappingURL=controller.d.ts.map
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"controller.d.ts","sourceRoot":"","sources":["../../graph/controller.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,KAAK,CAAC;AAChC,OAAO,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AACxC,OAAO,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AACpC,OAAO,EAAE,UAAU,EAAE,MAAM,QAAQ,CAAC;AAEpC;;;GAGG;AACH,qBAAa,eAAe;IAC1B
|
1
|
+
{"version":3,"file":"controller.d.ts","sourceRoot":"","sources":["../../graph/controller.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,KAAK,CAAC;AAChC,OAAO,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AACxC,OAAO,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AACpC,OAAO,EAAE,UAAU,EAAE,MAAM,QAAQ,CAAC;AAEpC;;;GAGG;AACH,qBAAa,eAAe;IAC1B;;;;;;;OAOG;WACU,iBAAiB,CAAC,CAAC,SAAS,SAAS,EAChD,MAAM,EAAE,SAAS,CAAC,CAAC,CAAC,EAAE,EACtB,UAAU,EAAE,MAAM,EAAE,EACpB,MAAM,CAAC,EAAE,UAAU,EAAE,GACpB,OAAO,CAAC,GAAG,EAAE,CAAC;mBASI,YAAY;IAYjC;;;;;;;;OAQG;WACU,eAAe,CAAC,CAAC,SAAS,SAAS,EAC9C,MAAM,EAAE,SAAS,CAAC,CAAC,CAAC,EAAE,EACtB,UAAU,EAAE,MAAM,EAAE,EACpB,WAAW,EAAE,MAAM,EACnB,MAAM,CAAC,EAAE,UAAU,EAAE,GACpB,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE,CAAC;CAgB9B"}
|
package/dist/graph/controller.js
CHANGED
@@ -19,7 +19,6 @@ class GraphController {
|
|
19
19
|
* Executes multiple graphs sequentially
|
20
20
|
* @param graphs - Array of GraphFlow instances to execute
|
21
21
|
* @param startNodes - Array of starting node identifiers for each graph
|
22
|
-
* @param inputs - Optional array of additional inputs for each graph
|
23
22
|
* @param params - Optional array of node parameters for each graph
|
24
23
|
* @returns Map containing results of each graph execution, keyed by graph name and index
|
25
24
|
* @template T - Zod schema type for graph context validation
|
@@ -28,7 +27,7 @@ class GraphController {
|
|
28
27
|
return __awaiter(this, void 0, void 0, function* () {
|
29
28
|
const results = new Map();
|
30
29
|
for (let i = 0; i < graphs.length; i++) {
|
31
|
-
const result = yield graphs[i].execute(startNodes[i], params === null || params === void 0 ? void 0 : params[i]
|
30
|
+
const result = yield graphs[i].execute(startNodes[i], params === null || params === void 0 ? void 0 : params[i]);
|
32
31
|
results.set(`${graphs[i].name}-${i}`, result);
|
33
32
|
}
|
34
33
|
return Array.from(results.values());
|
@@ -49,18 +48,18 @@ class GraphController {
|
|
49
48
|
* @param graphs - Array of GraphFlow instances to execute
|
50
49
|
* @param startNodes - Array of starting node identifiers for each graph
|
51
50
|
* @param concurrency - Optional limit on number of concurrent graph executions
|
52
|
-
* @param
|
51
|
+
* @param params - Optional array of node parameters for each graph
|
53
52
|
* @returns Map containing results of each graph execution, keyed by graph name
|
54
53
|
* @template T - Zod schema type for graph context validation
|
55
54
|
*/
|
56
|
-
static executeParallel(graphs, startNodes, concurrency,
|
55
|
+
static executeParallel(graphs, startNodes, concurrency, params) {
|
57
56
|
return __awaiter(this, void 0, void 0, function* () {
|
58
57
|
const results = [];
|
59
58
|
for (let i = 0; i < graphs.length; i += concurrency) {
|
60
59
|
const batch = graphs.slice(i, i + concurrency);
|
61
60
|
const batchResults = yield Promise.all(batch.map((graph, idx) => {
|
62
|
-
const
|
63
|
-
return this.executeGraph(graph, startNodes[i + idx],
|
61
|
+
const param = params === null || params === void 0 ? void 0 : params[i + idx];
|
62
|
+
return this.executeGraph(graph, startNodes[i + idx], param);
|
64
63
|
}));
|
65
64
|
results.push(...batchResults);
|
66
65
|
}
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"controller.js","sourceRoot":"","sources":["../../graph/controller.ts"],"names":[],"mappings":";;;;;;;;;;;;AAKA;;;GAGG;AACH,MAAa,eAAe;IAC1B
|
1
|
+
{"version":3,"file":"controller.js","sourceRoot":"","sources":["../../graph/controller.ts"],"names":[],"mappings":";;;;;;;;;;;;AAKA;;;GAGG;AACH,MAAa,eAAe;IAC1B;;;;;;;OAOG;IACH,MAAM,CAAO,iBAAiB,CAC5B,MAAsB,EACtB,UAAoB,EACpB,MAAqB;;YAErB,MAAM,OAAO,GAAG,IAAI,GAAG,EAA2B,CAAC;YACnD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;gBACvC,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAG,CAAC,CAAC,CAAC,CAAC;gBACnE,OAAO,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC;YAChD,CAAC;YACD,OAAO,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;QACtC,CAAC;KAAA;IAEO,MAAM,CAAO,YAAY,CAC/B,KAAmB,EACnB,SAAiB,EACjB,MAAmB;;YAEnB,IAAI,CAAC;gBACH,OAAO,MAAM,KAAK,CAAC,OAAO,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;YAChD,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,MAAM,KAAK,CAAC;YACd,CAAC;QACH,CAAC;KAAA;IAED;;;;;;;;OAQG;IACH,MAAM,CAAO,eAAe,CAC1B,MAAsB,EACtB,UAAoB,EACpB,WAAmB,EACnB,MAAqB;;YAErB,MAAM,OAAO,GAAsB,EAAE,CAAC;YAEtC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,IAAI,WAAW,EAAE,CAAC;gBACpD,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,GAAG,WAAW,CAAC,CAAC;gBAC/C,MAAM,YAAY,GAAG,MAAM,OAAO,CAAC,GAAG,CACpC,KAAK,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,GAAG,EAAE,EAAE;oBACvB,MAAM,KAAK,GAAG,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAG,CAAC,GAAG,GAAG,CAAC,CAAC;oBAChC,OAAO,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE,UAAU,CAAC,CAAC,GAAG,GAAG,CAAC,EAAE,KAAK,CAAC,CAAC;gBAC9D,CAAC,CAAC,CACH,CAAC;gBACF,OAAO,CAAC,IAAI,CAAC,GAAG,YAAY,CAAC,CAAC;YAChC,CAAC;YAED,OAAO,OAAO,CAAC;QACjB,CAAC;KAAA;CACF;AAhED,0CAgEC"}
|
package/dist/graph/index.js
CHANGED
@@ -166,8 +166,8 @@ class GraphFlow {
|
|
166
166
|
const node = this.nodes.get(startNode);
|
167
167
|
if (!node)
|
168
168
|
throw new Error(`Node "${startNode}" not found`);
|
169
|
-
if (node.
|
170
|
-
throw new Error(`
|
169
|
+
if (node.params && !params) {
|
170
|
+
throw new Error(`Params required for node "${startNode}"`);
|
171
171
|
}
|
172
172
|
yield this.nodeExecutor.executeNode(startNode, this.context, params, false);
|
173
173
|
this.eventEmitter.emit("graphCompleted", {
|
package/dist/graph/index.js.map
CHANGED
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../graph/index.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,mCAAsC;AACtC,+BAAgD;AAIhD,mDAAoD;AACpD,qCAAuC;AACvC,iCAA+C;AAC/C,yCAA2C;AAE3C;;;;;;;;;;;;GAYG;AACH,MAAa,SAAS;IAmBpB;;;;;OAKG;IACH,YACS,IAAY,EACnB,MAA0B,EAC1B,UAAiC,EAAE;;QAF5B,SAAI,GAAJ,IAAI,CAAQ;QAnBb,YAAO,GAAY,KAAK,CAAC;QAGzB,iBAAY,GAA2B,IAAI,cAAO,EAAE,CAAC;QAErD,mBAAc,GAAkB,IAAI,cAAO,EAAE,CAAC;QAkBpD,IAAI,CAAC,KAAK,GAAG,IAAI,GAAG,CAClB,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAkB,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,CAC5D,CAAC;QACF,IAAI,CAAC,SAAS,GAAG,MAAM,CAAC,MAAM,CAAC;QAC/B,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,OAAO,CAAoB,CAAC;QACtE,IAAI,CAAC,kBAAkB,GAAG,MAAM,CAAC,OAAO,CAAC;QACzC,IAAI,CAAC,YAAY;YACf,MAAM,CAAC,YAAY,IAAK,IAAI,qBAAY,EAAoB,CAAC;QAC/D,IAAI,CAAC,WAAW,GAAG,MAAM,CAAC,MAAM,CAAC;QACjC,IAAI,CAAC,OAAO,GAAG,MAAA,OAAO,CAAC,OAAO,mCAAI,KAAK,CAAC;QAExC,IAAI,CAAC,YAAY,GAAG,IAAI,sBAAe,CAAkB,IAAI,CAAC,OAAO,CAAC,CAAC;QAEvE,IAAI,CAAC,MAAM,GAAG,IAAI,oBAAW,CAAC,IAAI,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC;QACrD,IAAI,CAAC,YAAY,GAAG,IAAI,iCAAiB,CACvC,IAAI,CAAC,YAAY,EACjB,IAAI,CAAC,KAAK,EACV,IAAI,EACJ,IAAI,CAAC,OAAO,EACZ,MAAM,CAAC,MAAM,EACb,MAAM,CAAC,SAAS,EAChB,MAAM,CAAC,OAAO,CACf,CAAC;QACF,IAAI,CAAC,YAAY,GAAG,IAAI,gBAAS,CAC/B,IAAI,CAAC,
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../graph/index.ts"],"names":[],"mappings":"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"}
|
package/dist/graph/node.d.ts
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
import { BehaviorSubject, Subject } from "rxjs";
|
2
2
|
import { ZodSchema } from "zod";
|
3
|
-
import { GraphContext, GraphEvent } from "../types";
|
3
|
+
import { GraphContext, GraphEvent, Node } from "../types";
|
4
4
|
import { GraphEventManager } from "./event-manager";
|
5
5
|
/**
|
6
6
|
* Represents a node in the graph that can execute operations and manage state
|
@@ -9,28 +9,6 @@ import { GraphEventManager } from "./event-manager";
|
|
9
9
|
export interface NodeParams<T = any> {
|
10
10
|
[key: string]: T;
|
11
11
|
}
|
12
|
-
export interface Node<T extends ZodSchema, I = any> {
|
13
|
-
condition?: (context: GraphContext<T>, params?: NodeParams) => boolean;
|
14
|
-
execute: (context: GraphContext<T>, inputs: I, params?: NodeParams) => Promise<void>;
|
15
|
-
next?: string[] | ((context: GraphContext<T>) => string[]);
|
16
|
-
inputs?: ZodSchema;
|
17
|
-
outputs?: ZodSchema;
|
18
|
-
retry?: {
|
19
|
-
maxAttempts: number;
|
20
|
-
delay?: number;
|
21
|
-
onRetryFailed?: (error: Error, context: GraphContext<T>) => Promise<void>;
|
22
|
-
continueOnFailed?: boolean;
|
23
|
-
};
|
24
|
-
correlateEvents?: {
|
25
|
-
events: string[];
|
26
|
-
timeout?: number;
|
27
|
-
correlation: (events: GraphEvent<T>[]) => boolean;
|
28
|
-
};
|
29
|
-
waitForEvents?: {
|
30
|
-
events: string[];
|
31
|
-
timeout: number;
|
32
|
-
};
|
33
|
-
}
|
34
12
|
export interface GraphLogger {
|
35
13
|
addLog: (message: string, data?: any) => void;
|
36
14
|
}
|
@@ -61,29 +39,20 @@ export declare class GraphNode<T extends ZodSchema> {
|
|
61
39
|
* Executes a node with the given name and context
|
62
40
|
* @param nodeName - The name of the node to execute
|
63
41
|
* @param context - The current graph context
|
64
|
-
* @param
|
42
|
+
* @param params - Input data for the node
|
65
43
|
* @param triggeredByEvent - Whether the execution was triggered by an event
|
66
44
|
* @throws Error if the node is not found or execution fails
|
67
45
|
*/
|
68
|
-
executeNode(nodeName: string, context: GraphContext<T>,
|
46
|
+
executeNode(nodeName: string, context: GraphContext<T>, params: any, triggeredByEvent?: boolean): Promise<void>;
|
69
47
|
/**
|
70
|
-
* Validates the
|
71
|
-
* @param node - The node whose
|
72
|
-
* @param
|
73
|
-
* @param nodeName - The name of the node (for error messages)
|
74
|
-
* @throws Error if validation fails
|
75
|
-
* @private
|
76
|
-
*/
|
77
|
-
private validateInputs;
|
78
|
-
/**
|
79
|
-
* Validates the outputs of a node against its schema
|
80
|
-
* @param node - The node whose outputs need validation
|
81
|
-
* @param context - The current graph context
|
48
|
+
* Validates the params for a node using its schema
|
49
|
+
* @param node - The node whose params need validation
|
50
|
+
* @param params - The input data to validate
|
82
51
|
* @param nodeName - The name of the node (for error messages)
|
83
52
|
* @throws Error if validation fails
|
84
53
|
* @private
|
85
54
|
*/
|
86
|
-
private
|
55
|
+
private validateParams;
|
87
56
|
/**
|
88
57
|
* Handles event-related operations for a node
|
89
58
|
* @param node - The node whose events need handling
|
@@ -96,8 +65,9 @@ export declare class GraphNode<T extends ZodSchema> {
|
|
96
65
|
* Executes a node with retry logic
|
97
66
|
* @param node - The node to execute
|
98
67
|
* @param contextProxy - The proxied graph context
|
99
|
-
* @param
|
68
|
+
* @param params - Input data for the node
|
100
69
|
* @param nodeName - The name of the node
|
70
|
+
* @param params - Parameters for the node
|
101
71
|
* @throws Error if all retry attempts fail
|
102
72
|
* @private
|
103
73
|
*/
|
package/dist/graph/node.d.ts.map
CHANGED
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"node.d.ts","sourceRoot":"","sources":["../../graph/node.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;AAChD,OAAO,EAAE,SAAS,EAAE,MAAM,KAAK,CAAC;AAChC,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;
|
1
|
+
{"version":3,"file":"node.d.ts","sourceRoot":"","sources":["../../graph/node.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;AAChD,OAAO,EAAE,SAAS,EAAE,MAAM,KAAK,CAAC;AAChC,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,IAAI,EAAE,MAAM,UAAU,CAAC;AAC1D,OAAO,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AAEpD;;;GAGG;AACH,MAAM,WAAW,UAAU,CAAC,CAAC,GAAG,GAAG;IACjC,CAAC,GAAG,EAAE,MAAM,GAAG,CAAC,CAAC;CAClB;AAED,MAAM,WAAW,WAAW;IAC1B,MAAM,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,GAAG,KAAK,IAAI,CAAC;CAC/C;AAED,qBAAa,SAAS,CAAC,CAAC,SAAS,SAAS;IAYtC,OAAO,CAAC,KAAK;IACb,OAAO,CAAC,MAAM;IACd,OAAO,CAAC,YAAY;IACpB,OAAO,CAAC,YAAY;IACpB,OAAO,CAAC,YAAY;IAftB,OAAO,CAAC,cAAc,CAA8B;IAEpD;;;;;;;OAOG;gBAEO,KAAK,EAAE,GAAG,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,EAChC,MAAM,EAAE,WAAW,EACnB,YAAY,EAAE,iBAAiB,CAAC,CAAC,CAAC,EAClC,YAAY,EAAE,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,EACpC,YAAY,EAAE,eAAe,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;IAGxD;;;;;OAKG;IACH,OAAO,CAAC,SAAS;IA+BjB;;;;;;;OAOG;IACU,WAAW,CACtB,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,YAAY,CAAC,CAAC,CAAC,EACxB,MAAM,EAAE,GAAG,EACX,gBAAgB,GAAE,OAAe,GAChC,OAAO,CAAC,IAAI,CAAC;IAqDhB;;;;;;;OAOG;YACW,cAAc;IAoB5B;;;;;;OAMG;YACW,YAAY;IAc1B;;;;;;;;;OASG;YACW,gBAAgB;IAwC9B;;;;;;OAMG;YACW,sBAAsB;IAuCpC;;;;;;OAMG;YACW,mBAAmB;CAalC"}
|
package/dist/graph/node.js
CHANGED
@@ -59,12 +59,12 @@ class GraphNode {
|
|
59
59
|
* Executes a node with the given name and context
|
60
60
|
* @param nodeName - The name of the node to execute
|
61
61
|
* @param context - The current graph context
|
62
|
-
* @param
|
62
|
+
* @param params - Input data for the node
|
63
63
|
* @param triggeredByEvent - Whether the execution was triggered by an event
|
64
64
|
* @throws Error if the node is not found or execution fails
|
65
65
|
*/
|
66
|
-
executeNode(nodeName_1, context_1,
|
67
|
-
return __awaiter(this, arguments, void 0, function* (nodeName, context,
|
66
|
+
executeNode(nodeName_1, context_1, params_1) {
|
67
|
+
return __awaiter(this, arguments, void 0, function* (nodeName, context, params, triggeredByEvent = false) {
|
68
68
|
const node = this.nodes.get(nodeName);
|
69
69
|
if (!node)
|
70
70
|
throw new Error(`Node "${nodeName}" not found.`);
|
@@ -90,10 +90,10 @@ class GraphNode {
|
|
90
90
|
return true;
|
91
91
|
},
|
92
92
|
});
|
93
|
-
if (node.condition && !node.condition(contextProxy,
|
93
|
+
if (node.condition && !node.condition(contextProxy, params)) {
|
94
94
|
return;
|
95
95
|
}
|
96
|
-
yield this.executeWithRetry(node, contextProxy,
|
96
|
+
yield this.executeWithRetry(node, contextProxy, nodeName, params);
|
97
97
|
this.emitEvent("nodeCompleted", { name: nodeName, context: nodeContext });
|
98
98
|
if (!triggeredByEvent && node.next) {
|
99
99
|
const nextNodes = typeof node.next === "function" ? node.next(contextProxy) : node.next;
|
@@ -113,45 +113,28 @@ class GraphNode {
|
|
113
113
|
});
|
114
114
|
}
|
115
115
|
/**
|
116
|
-
* Validates the
|
117
|
-
* @param node - The node whose
|
118
|
-
* @param
|
116
|
+
* Validates the params for a node using its schema
|
117
|
+
* @param node - The node whose params need validation
|
118
|
+
* @param params - The input data to validate
|
119
119
|
* @param nodeName - The name of the node (for error messages)
|
120
120
|
* @throws Error if validation fails
|
121
121
|
* @private
|
122
122
|
*/
|
123
|
-
|
123
|
+
validateParams(node, params, nodeName) {
|
124
124
|
return __awaiter(this, void 0, void 0, function* () {
|
125
125
|
var _a, _b;
|
126
|
-
|
127
|
-
|
126
|
+
// Si pas de schéma de validation ou si le schéma est optionnel, accepter n'importe quels params
|
127
|
+
if (!node.params || ((_b = (_a = node.params).isOptional) === null || _b === void 0 ? void 0 : _b.call(_a)))
|
128
|
+
return;
|
129
|
+
// Vérifier les params uniquement si un schéma est défini et non optionnel
|
130
|
+
if (!params) {
|
131
|
+
throw new Error(`Params required for node "${nodeName}"`);
|
128
132
|
}
|
129
133
|
try {
|
130
|
-
return node.
|
134
|
+
return node.params.parse(params);
|
131
135
|
}
|
132
136
|
catch (error) {
|
133
|
-
throw
|
134
|
-
}
|
135
|
-
});
|
136
|
-
}
|
137
|
-
/**
|
138
|
-
* Validates the outputs of a node against its schema
|
139
|
-
* @param node - The node whose outputs need validation
|
140
|
-
* @param context - The current graph context
|
141
|
-
* @param nodeName - The name of the node (for error messages)
|
142
|
-
* @throws Error if validation fails
|
143
|
-
* @private
|
144
|
-
*/
|
145
|
-
validateOutputs(node, context, nodeName) {
|
146
|
-
return __awaiter(this, void 0, void 0, function* () {
|
147
|
-
var _a, _b;
|
148
|
-
try {
|
149
|
-
node.outputs.parse(context);
|
150
|
-
}
|
151
|
-
catch (error) {
|
152
|
-
throw new Error(((_b = (_a = error.errors) === null || _a === void 0 ? void 0 : _a[0]) === null || _b === void 0 ? void 0 : _b.message) ||
|
153
|
-
error.message ||
|
154
|
-
"Output validation failed");
|
137
|
+
throw error;
|
155
138
|
}
|
156
139
|
});
|
157
140
|
}
|
@@ -176,40 +159,24 @@ class GraphNode {
|
|
176
159
|
* Executes a node with retry logic
|
177
160
|
* @param node - The node to execute
|
178
161
|
* @param contextProxy - The proxied graph context
|
179
|
-
* @param
|
162
|
+
* @param params - Input data for the node
|
180
163
|
* @param nodeName - The name of the node
|
164
|
+
* @param params - Parameters for the node
|
181
165
|
* @throws Error if all retry attempts fail
|
182
166
|
* @private
|
183
167
|
*/
|
184
|
-
executeWithRetry(node, contextProxy,
|
168
|
+
executeWithRetry(node, contextProxy, nodeName, params) {
|
185
169
|
return __awaiter(this, void 0, void 0, function* () {
|
186
|
-
var _a, _b, _c
|
170
|
+
var _a, _b, _c;
|
187
171
|
let attempts = 0;
|
188
172
|
let lastError = new Error("Unknown error");
|
189
173
|
while (attempts < (((_a = node.retry) === null || _a === void 0 ? void 0 : _a.maxAttempts) || 1)) {
|
190
174
|
try {
|
191
|
-
//
|
192
|
-
if (node.
|
193
|
-
|
194
|
-
node.inputs.parse(inputs);
|
195
|
-
}
|
196
|
-
catch (error) {
|
197
|
-
const message = ((_c = (_b = error.errors) === null || _b === void 0 ? void 0 : _b[0]) === null || _c === void 0 ? void 0 : _c.message) || error.message;
|
198
|
-
throw new Error(`Input validation failed: ${message}`);
|
199
|
-
}
|
200
|
-
}
|
201
|
-
// Exécution du node
|
202
|
-
yield node.execute(contextProxy, inputs);
|
203
|
-
// Validation des outputs
|
204
|
-
if (node.outputs) {
|
205
|
-
try {
|
206
|
-
node.outputs.parse(contextProxy);
|
207
|
-
}
|
208
|
-
catch (error) {
|
209
|
-
const message = ((_e = (_d = error.errors) === null || _d === void 0 ? void 0 : _d[0]) === null || _e === void 0 ? void 0 : _e.message) || error.message;
|
210
|
-
throw new Error(`Output validation failed: ${message}`);
|
211
|
-
}
|
175
|
+
// Valider les params uniquement si un schéma est défini
|
176
|
+
if (node.params) {
|
177
|
+
yield this.validateParams(node, params, nodeName);
|
212
178
|
}
|
179
|
+
yield node.execute(contextProxy, params);
|
213
180
|
return;
|
214
181
|
}
|
215
182
|
catch (error) {
|
@@ -218,8 +185,8 @@ class GraphNode {
|
|
218
185
|
? error
|
219
186
|
: new Error((error === null || error === void 0 ? void 0 : error.message) || "Unknown error");
|
220
187
|
attempts++;
|
221
|
-
if (attempts === (((
|
222
|
-
if ((
|
188
|
+
if (attempts === (((_b = node.retry) === null || _b === void 0 ? void 0 : _b.maxAttempts) || 1)) {
|
189
|
+
if ((_c = node.retry) === null || _c === void 0 ? void 0 : _c.onRetryFailed) {
|
223
190
|
yield node.retry.onRetryFailed(lastError, contextProxy);
|
224
191
|
if (node.retry.continueOnFailed)
|
225
192
|
return;
|
package/dist/graph/node.js.map
CHANGED
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"node.js","sourceRoot":"","sources":["../../graph/node.ts"],"names":[],"mappings":";;;;;;;;;;;;
|
1
|
+
{"version":3,"file":"node.js","sourceRoot":"","sources":["../../graph/node.ts"],"names":[],"mappings":"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"}
|
package/dist/types/index.d.ts
CHANGED
@@ -69,10 +69,10 @@ export type GraphContext<T> = SchemaType<T>;
|
|
69
69
|
export interface Node<T extends ZodSchema, I = any> {
|
70
70
|
/** Name of the node */
|
71
71
|
name: string;
|
72
|
+
/** Description of the node */
|
73
|
+
description?: string;
|
72
74
|
/** Schema for node inputs */
|
73
|
-
|
74
|
-
/** Schema for node outputs */
|
75
|
-
outputs?: ZodSchema;
|
75
|
+
params?: I extends void ? never : ZodSchema<I>;
|
76
76
|
/** Execute function for the node */
|
77
77
|
execute: (context: GraphContext<T>, params?: I) => Promise<void>;
|
78
78
|
/** Optional condition for node execution */
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../types/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;AACtC,OAAO,EAAE,SAAS,EAAE,MAAM,KAAK,CAAC;AAChC,OAAO,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAI9C;;;;;;;GAOG;AACH,MAAM,WAAW,iBAAiB;IAChC,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;IACrB,MAAM,EAAE,MAAM,CAAC;IACf,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AAED;;;;;;;;;GASG;AACH,MAAM,WAAW,cAAc;IAC7B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;IACrB,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,IAAI,CAAC;CACjB;AAID;;;GAGG;AACH,MAAM,MAAM,gBAAgB,GAAG;IAC7B,kDAAkD;IAClD,EAAE,EAAE,MAAM,CAAC;IACX,kCAAkC;IAClC,eAAe,EAAE,MAAM,CAAC;IACxB,yCAAyC;IACzC,cAAc,EAAE,MAAM,CAAC;IACvB,uCAAuC;IACvC,WAAW,EAAE,OAAO,CAAC;IACrB,wBAAwB;IACxB,SAAS,EAAE,IAAI,CAAC;CACjB,CAAC;AAIF;;;GAGG;AACH,MAAM,MAAM,UAAU,CAAC,CAAC,IAAI,CAAC,SAAS,SAAS,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;AAErE;;;GAGG;AACH,MAAM,MAAM,YAAY,CAAC,CAAC,IAAI,UAAU,CAAC,CAAC,CAAC,CAAC;AAE5C;;;;;;GAMG;AACH,MAAM,WAAW,IAAI,CAAC,CAAC,SAAS,SAAS,EAAE,CAAC,GAAG,GAAG;IAChD,uBAAuB;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,6BAA6B;IAC7B,MAAM,CAAC,EAAE,CAAC,SAAS,IAAI,GAAG,KAAK,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC;IAC/C,
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../types/index.ts"],"names":[],"mappings":"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"}
|
@@ -6,8 +6,8 @@ const generateActionSchema = (graphs) => {
|
|
6
6
|
return graphs
|
7
7
|
.map((graph) => {
|
8
8
|
const rootNode = Array.from(graph.nodes.values())[0];
|
9
|
-
const schemaStr = rootNode.
|
10
|
-
? (0, exports.getSchemaString)(rootNode.
|
9
|
+
const schemaStr = rootNode.params
|
10
|
+
? (0, exports.getSchemaString)(rootNode.params)
|
11
11
|
: "No parameters";
|
12
12
|
return `Workflow: ${graph.name}\nParameters: ${schemaStr}`;
|
13
13
|
})
|
package/graph/controller.ts
CHANGED
@@ -12,7 +12,6 @@ export class GraphController {
|
|
12
12
|
* Executes multiple graphs sequentially
|
13
13
|
* @param graphs - Array of GraphFlow instances to execute
|
14
14
|
* @param startNodes - Array of starting node identifiers for each graph
|
15
|
-
* @param inputs - Optional array of additional inputs for each graph
|
16
15
|
* @param params - Optional array of node parameters for each graph
|
17
16
|
* @returns Map containing results of each graph execution, keyed by graph name and index
|
18
17
|
* @template T - Zod schema type for graph context validation
|
@@ -24,11 +23,7 @@ export class GraphController {
|
|
24
23
|
): Promise<any[]> {
|
25
24
|
const results = new Map<string, GraphContext<T>>();
|
26
25
|
for (let i = 0; i < graphs.length; i++) {
|
27
|
-
const result = await graphs[i].execute(
|
28
|
-
startNodes[i],
|
29
|
-
params?.[i],
|
30
|
-
undefined
|
31
|
-
);
|
26
|
+
const result = await graphs[i].execute(startNodes[i], params?.[i]);
|
32
27
|
results.set(`${graphs[i].name}-${i}`, result);
|
33
28
|
}
|
34
29
|
return Array.from(results.values());
|
@@ -51,7 +46,7 @@ export class GraphController {
|
|
51
46
|
* @param graphs - Array of GraphFlow instances to execute
|
52
47
|
* @param startNodes - Array of starting node identifiers for each graph
|
53
48
|
* @param concurrency - Optional limit on number of concurrent graph executions
|
54
|
-
* @param
|
49
|
+
* @param params - Optional array of node parameters for each graph
|
55
50
|
* @returns Map containing results of each graph execution, keyed by graph name
|
56
51
|
* @template T - Zod schema type for graph context validation
|
57
52
|
*/
|
@@ -59,7 +54,7 @@ export class GraphController {
|
|
59
54
|
graphs: GraphFlow<T>[],
|
60
55
|
startNodes: string[],
|
61
56
|
concurrency: number,
|
62
|
-
|
57
|
+
params?: NodeParams[]
|
63
58
|
): Promise<GraphContext<T>[]> {
|
64
59
|
const results: GraphContext<T>[] = [];
|
65
60
|
|
@@ -67,8 +62,8 @@ export class GraphController {
|
|
67
62
|
const batch = graphs.slice(i, i + concurrency);
|
68
63
|
const batchResults = await Promise.all(
|
69
64
|
batch.map((graph, idx) => {
|
70
|
-
const
|
71
|
-
return this.executeGraph(graph, startNodes[i + idx],
|
65
|
+
const param = params?.[i + idx];
|
66
|
+
return this.executeGraph(graph, startNodes[i + idx], param);
|
72
67
|
})
|
73
68
|
);
|
74
69
|
results.push(...batchResults);
|
package/graph/index.ts
CHANGED
@@ -75,7 +75,7 @@ export class GraphFlow<T extends ZodSchema> {
|
|
75
75
|
config.onError
|
76
76
|
);
|
77
77
|
this.nodeExecutor = new GraphNode(
|
78
|
-
this.nodes as Map<string,
|
78
|
+
this.nodes as Map<string, Node<T, any>>,
|
79
79
|
this.logger,
|
80
80
|
this.eventManager,
|
81
81
|
this.eventSubject,
|
@@ -236,8 +236,8 @@ export class GraphFlow<T extends ZodSchema> {
|
|
236
236
|
const node = this.nodes.get(startNode);
|
237
237
|
if (!node) throw new Error(`Node "${startNode}" not found`);
|
238
238
|
|
239
|
-
if (node.
|
240
|
-
throw new Error(`
|
239
|
+
if (node.params && !params) {
|
240
|
+
throw new Error(`Params required for node "${startNode}"`);
|
241
241
|
}
|
242
242
|
|
243
243
|
await this.nodeExecutor.executeNode(
|
package/graph/node.ts
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
import { BehaviorSubject, Subject } from "rxjs";
|
2
2
|
import { ZodSchema } from "zod";
|
3
|
-
import { GraphContext, GraphEvent } from "../types";
|
3
|
+
import { GraphContext, GraphEvent, Node } from "../types";
|
4
4
|
import { GraphEventManager } from "./event-manager";
|
5
5
|
|
6
6
|
/**
|
@@ -11,33 +11,6 @@ export interface NodeParams<T = any> {
|
|
11
11
|
[key: string]: T;
|
12
12
|
}
|
13
13
|
|
14
|
-
export interface Node<T extends ZodSchema, I = any> {
|
15
|
-
condition?: (context: GraphContext<T>, params?: NodeParams) => boolean;
|
16
|
-
execute: (
|
17
|
-
context: GraphContext<T>,
|
18
|
-
inputs: I,
|
19
|
-
params?: NodeParams
|
20
|
-
) => Promise<void>;
|
21
|
-
next?: string[] | ((context: GraphContext<T>) => string[]);
|
22
|
-
inputs?: ZodSchema;
|
23
|
-
outputs?: ZodSchema;
|
24
|
-
retry?: {
|
25
|
-
maxAttempts: number;
|
26
|
-
delay?: number;
|
27
|
-
onRetryFailed?: (error: Error, context: GraphContext<T>) => Promise<void>;
|
28
|
-
continueOnFailed?: boolean;
|
29
|
-
};
|
30
|
-
correlateEvents?: {
|
31
|
-
events: string[];
|
32
|
-
timeout?: number;
|
33
|
-
correlation: (events: GraphEvent<T>[]) => boolean;
|
34
|
-
};
|
35
|
-
waitForEvents?: {
|
36
|
-
events: string[];
|
37
|
-
timeout: number;
|
38
|
-
};
|
39
|
-
}
|
40
|
-
|
41
14
|
export interface GraphLogger {
|
42
15
|
addLog: (message: string, data?: any) => void;
|
43
16
|
}
|
@@ -102,14 +75,14 @@ export class GraphNode<T extends ZodSchema> {
|
|
102
75
|
* Executes a node with the given name and context
|
103
76
|
* @param nodeName - The name of the node to execute
|
104
77
|
* @param context - The current graph context
|
105
|
-
* @param
|
78
|
+
* @param params - Input data for the node
|
106
79
|
* @param triggeredByEvent - Whether the execution was triggered by an event
|
107
80
|
* @throws Error if the node is not found or execution fails
|
108
81
|
*/
|
109
82
|
public async executeNode(
|
110
83
|
nodeName: string,
|
111
84
|
context: GraphContext<T>,
|
112
|
-
|
85
|
+
params: any,
|
113
86
|
triggeredByEvent: boolean = false
|
114
87
|
): Promise<void> {
|
115
88
|
const node = this.nodes.get(nodeName);
|
@@ -140,11 +113,11 @@ export class GraphNode<T extends ZodSchema> {
|
|
140
113
|
},
|
141
114
|
});
|
142
115
|
|
143
|
-
if (node.condition && !node.condition(contextProxy,
|
116
|
+
if (node.condition && !node.condition(contextProxy, params)) {
|
144
117
|
return;
|
145
118
|
}
|
146
119
|
|
147
|
-
await this.executeWithRetry(node, contextProxy,
|
120
|
+
await this.executeWithRetry(node, contextProxy, nodeName, params);
|
148
121
|
this.emitEvent("nodeCompleted", { name: nodeName, context: nodeContext });
|
149
122
|
|
150
123
|
if (!triggeredByEvent && node.next) {
|
@@ -165,52 +138,30 @@ export class GraphNode<T extends ZodSchema> {
|
|
165
138
|
}
|
166
139
|
|
167
140
|
/**
|
168
|
-
* Validates the
|
169
|
-
* @param node - The node whose
|
170
|
-
* @param
|
141
|
+
* Validates the params for a node using its schema
|
142
|
+
* @param node - The node whose params need validation
|
143
|
+
* @param params - The input data to validate
|
171
144
|
* @param nodeName - The name of the node (for error messages)
|
172
145
|
* @throws Error if validation fails
|
173
146
|
* @private
|
174
147
|
*/
|
175
|
-
private async
|
148
|
+
private async validateParams(
|
176
149
|
node: Node<T, any>,
|
177
|
-
|
150
|
+
params: any,
|
178
151
|
nodeName: string
|
179
152
|
): Promise<void> {
|
180
|
-
|
181
|
-
|
182
|
-
}
|
153
|
+
// Si pas de schéma de validation ou si le schéma est optionnel, accepter n'importe quels params
|
154
|
+
if (!node.params || node.params.isOptional?.()) return;
|
183
155
|
|
184
|
-
|
185
|
-
|
186
|
-
|
187
|
-
throw new Error(
|
188
|
-
error.errors?.[0]?.message || error.message || "Input validation failed"
|
189
|
-
);
|
156
|
+
// Vérifier les params uniquement si un schéma est défini et non optionnel
|
157
|
+
if (!params) {
|
158
|
+
throw new Error(`Params required for node "${nodeName}"`);
|
190
159
|
}
|
191
|
-
}
|
192
160
|
|
193
|
-
/**
|
194
|
-
* Validates the outputs of a node against its schema
|
195
|
-
* @param node - The node whose outputs need validation
|
196
|
-
* @param context - The current graph context
|
197
|
-
* @param nodeName - The name of the node (for error messages)
|
198
|
-
* @throws Error if validation fails
|
199
|
-
* @private
|
200
|
-
*/
|
201
|
-
private async validateOutputs(
|
202
|
-
node: Node<T, any>,
|
203
|
-
context: GraphContext<T>,
|
204
|
-
nodeName: string
|
205
|
-
): Promise<void> {
|
206
161
|
try {
|
207
|
-
node.
|
162
|
+
return node.params.parse(params);
|
208
163
|
} catch (error: any) {
|
209
|
-
throw
|
210
|
-
error.errors?.[0]?.message ||
|
211
|
-
error.message ||
|
212
|
-
"Output validation failed"
|
213
|
-
);
|
164
|
+
throw error;
|
214
165
|
}
|
215
166
|
}
|
216
167
|
|
@@ -239,44 +190,29 @@ export class GraphNode<T extends ZodSchema> {
|
|
239
190
|
* Executes a node with retry logic
|
240
191
|
* @param node - The node to execute
|
241
192
|
* @param contextProxy - The proxied graph context
|
242
|
-
* @param
|
193
|
+
* @param params - Input data for the node
|
243
194
|
* @param nodeName - The name of the node
|
195
|
+
* @param params - Parameters for the node
|
244
196
|
* @throws Error if all retry attempts fail
|
245
197
|
* @private
|
246
198
|
*/
|
247
199
|
private async executeWithRetry(
|
248
200
|
node: Node<T, any>,
|
249
201
|
contextProxy: GraphContext<T>,
|
250
|
-
|
251
|
-
|
202
|
+
nodeName: string,
|
203
|
+
params?: NodeParams
|
252
204
|
): Promise<void> {
|
253
205
|
let attempts = 0;
|
254
206
|
let lastError: Error = new Error("Unknown error");
|
255
207
|
|
256
208
|
while (attempts < (node.retry?.maxAttempts || 1)) {
|
257
209
|
try {
|
258
|
-
//
|
259
|
-
if (node.
|
260
|
-
|
261
|
-
node.inputs.parse(inputs);
|
262
|
-
} catch (error: any) {
|
263
|
-
const message = error.errors?.[0]?.message || error.message;
|
264
|
-
throw new Error(`Input validation failed: ${message}`);
|
265
|
-
}
|
210
|
+
// Valider les params uniquement si un schéma est défini
|
211
|
+
if (node.params) {
|
212
|
+
await this.validateParams(node, params, nodeName);
|
266
213
|
}
|
267
214
|
|
268
|
-
|
269
|
-
await node.execute(contextProxy, inputs);
|
270
|
-
|
271
|
-
// Validation des outputs
|
272
|
-
if (node.outputs) {
|
273
|
-
try {
|
274
|
-
node.outputs.parse(contextProxy);
|
275
|
-
} catch (error: any) {
|
276
|
-
const message = error.errors?.[0]?.message || error.message;
|
277
|
-
throw new Error(`Output validation failed: ${message}`);
|
278
|
-
}
|
279
|
-
}
|
215
|
+
await node.execute(contextProxy, params);
|
280
216
|
return;
|
281
217
|
} catch (error: any) {
|
282
218
|
lastError =
|
package/package.json
CHANGED
package/test/graph/index.test.ts
CHANGED
@@ -1,19 +1,27 @@
|
|
1
|
-
import { expect } from "chai";
|
1
|
+
import { expect, use } from "chai";
|
2
|
+
import chaiAsPromised from "chai-as-promised";
|
2
3
|
import EventEmitter from "events";
|
3
4
|
import sinon from "sinon";
|
4
5
|
import { z } from "zod";
|
5
6
|
import { GraphController } from "../../graph/controller";
|
6
7
|
import { GraphFlow } from "../../graph/index";
|
8
|
+
import { NodeParams } from "../../graph/node";
|
7
9
|
import { GraphContext, GraphDefinition, Node } from "../../types";
|
8
10
|
|
11
|
+
use(chaiAsPromised);
|
12
|
+
|
9
13
|
/**
|
10
14
|
* Test schema definition using Zod for graph context validation
|
11
15
|
* Defines a schema with:
|
12
16
|
* - value: numeric value for tracking state changes
|
17
|
+
* - counter: numeric value for tracking state changes
|
18
|
+
* - message: string for tracking state changes
|
13
19
|
* - eventPayload: optional object containing transaction metadata
|
14
20
|
*/
|
15
21
|
const TestSchema = z.object({
|
16
22
|
value: z.number().default(0),
|
23
|
+
counter: z.number().default(0),
|
24
|
+
message: z.string().default(""),
|
17
25
|
eventPayload: z
|
18
26
|
.object({
|
19
27
|
transactionId: z.string().optional(),
|
@@ -172,18 +180,15 @@ describe("GraphFlow", function () {
|
|
172
180
|
* - Integration between node execution and validation
|
173
181
|
* Ensures type safety and data consistency in node interactions
|
174
182
|
*/
|
175
|
-
it("should execute a node with validated
|
183
|
+
it("should execute a node with validated params and outputs", async function () {
|
176
184
|
const paramNode: Node<TestSchema, { increment: number }> = {
|
177
185
|
name: "paramNode",
|
178
|
-
|
186
|
+
params: z.object({
|
179
187
|
increment: z.number(),
|
180
188
|
}),
|
181
|
-
|
182
|
-
|
183
|
-
|
184
|
-
execute: async (context, inputs?: { increment: number }) => {
|
185
|
-
if (!inputs) throw new Error("Inputs required");
|
186
|
-
context.value = (context.value ?? 0) + inputs.increment;
|
189
|
+
execute: async (context, params?: { increment: number }) => {
|
190
|
+
if (!params) throw new Error("params required");
|
191
|
+
context.value = (context.value ?? 0) + params.increment;
|
187
192
|
},
|
188
193
|
next: [],
|
189
194
|
};
|
@@ -304,12 +309,12 @@ describe("GraphFlow", function () {
|
|
304
309
|
it("should throw error when node input validation fails", async () => {
|
305
310
|
const node: Node<TestSchema> = {
|
306
311
|
name: "test",
|
307
|
-
|
312
|
+
params: z.object({
|
308
313
|
value: z.number().min(0),
|
309
314
|
}),
|
310
|
-
execute: async (context,
|
311
|
-
if (!
|
312
|
-
context.value =
|
315
|
+
execute: async (context, params) => {
|
316
|
+
if (!params) throw new Error("params required");
|
317
|
+
context.value = params.value;
|
313
318
|
},
|
314
319
|
};
|
315
320
|
|
@@ -327,98 +332,68 @@ describe("GraphFlow", function () {
|
|
327
332
|
expect(error.message).to.include("Number must be greater than or equal");
|
328
333
|
}
|
329
334
|
});
|
330
|
-
|
331
|
-
/**
|
332
|
-
* Tests output validation error handling
|
333
|
-
*/
|
334
|
-
it("should throw error when node output validation fails", async function () {
|
335
|
-
const nodeWithOutput: Node<TestSchema> = {
|
336
|
-
name: "outputNode",
|
337
|
-
outputs: z.object({
|
338
|
-
value: z.number().max(10),
|
339
|
-
}),
|
340
|
-
execute: async (context) => {
|
341
|
-
context.value = 20; // This will fail output validation
|
342
|
-
},
|
343
|
-
next: [],
|
344
|
-
};
|
345
|
-
|
346
|
-
graph.addNode(nodeWithOutput);
|
347
|
-
|
348
|
-
try {
|
349
|
-
await graph.execute("outputNode");
|
350
|
-
expect.fail("Should have thrown an error");
|
351
|
-
} catch (error) {
|
352
|
-
expect((error as Error).message).to.include(
|
353
|
-
"Number must be less than or equal to 10"
|
354
|
-
);
|
355
|
-
}
|
356
|
-
});
|
357
|
-
|
358
335
|
/**
|
359
336
|
* Tests successful input/output validation flow
|
360
337
|
*/
|
361
|
-
it("should successfully validate both
|
338
|
+
it("should successfully validate both params and outputs", async function () {
|
362
339
|
const graph = new GraphFlow("test", {
|
363
340
|
name: "test",
|
341
|
+
nodes: [
|
342
|
+
{
|
343
|
+
name: "validatedNode",
|
344
|
+
params: z.object({
|
345
|
+
increment: z.number().min(0).max(5),
|
346
|
+
}),
|
347
|
+
execute: async (
|
348
|
+
context: GraphContext<TestSchema>,
|
349
|
+
params?: NodeParams
|
350
|
+
) => {
|
351
|
+
if (!params) throw new Error("params required");
|
352
|
+
context.value = (context.value ?? 0) + params.increment;
|
353
|
+
},
|
354
|
+
},
|
355
|
+
],
|
364
356
|
schema: TestSchema,
|
365
|
-
context: { value: 0 },
|
366
|
-
nodes: [],
|
357
|
+
context: { value: 0, counter: 0, message: "" },
|
367
358
|
});
|
368
359
|
|
369
|
-
|
370
|
-
name: "validatedNode",
|
371
|
-
inputs: z.object({
|
372
|
-
increment: z.number().min(0).max(5),
|
373
|
-
}),
|
374
|
-
outputs: z.object({
|
375
|
-
value: z.number().min(0).max(10),
|
376
|
-
}),
|
377
|
-
execute: async (context, inputs?: { increment: number }) => {
|
378
|
-
if (!inputs) throw new Error("Inputs required");
|
379
|
-
context.value = (context.value ?? 0) + inputs.increment;
|
380
|
-
},
|
381
|
-
next: [],
|
382
|
-
};
|
383
|
-
|
384
|
-
graph.addNode(validatedNode);
|
385
|
-
|
386
|
-
// Test with valid input that produces valid output
|
360
|
+
// Test avec valeur valide
|
387
361
|
await graph.execute("validatedNode", { increment: 3 });
|
388
362
|
expect(graph.getContext().value).to.equal(3);
|
389
363
|
|
390
|
-
// Test
|
391
|
-
|
392
|
-
|
393
|
-
|
394
|
-
} catch (error) {
|
395
|
-
expect((error as Error).message).to.include(
|
396
|
-
"Number must be less than or equal to 10"
|
397
|
-
);
|
398
|
-
}
|
364
|
+
// Test avec valeur invalide
|
365
|
+
await expect(
|
366
|
+
graph.execute("validatedNode", { increment: 10 })
|
367
|
+
).to.be.rejectedWith("Number must be less than or equal to 5");
|
399
368
|
});
|
400
369
|
|
401
370
|
/**
|
402
|
-
* Tests handling of missing required
|
371
|
+
* Tests handling of missing required params
|
403
372
|
*/
|
404
|
-
it("should throw error when required
|
405
|
-
const
|
406
|
-
name: "
|
407
|
-
|
408
|
-
|
409
|
-
|
410
|
-
|
411
|
-
|
412
|
-
|
413
|
-
|
414
|
-
|
373
|
+
it("should throw error when required params are missing", async function () {
|
374
|
+
const graph = new GraphFlow("test", {
|
375
|
+
name: "test",
|
376
|
+
nodes: [
|
377
|
+
{
|
378
|
+
name: "requiredInputNode",
|
379
|
+
params: z.object({
|
380
|
+
value: z.number(),
|
381
|
+
}),
|
382
|
+
execute: async (
|
383
|
+
context: GraphContext<TestSchema>,
|
384
|
+
params?: NodeParams
|
385
|
+
) => {
|
386
|
+
context.counter = params?.value || 0;
|
387
|
+
},
|
388
|
+
},
|
389
|
+
],
|
390
|
+
schema: TestSchema,
|
391
|
+
context: { value: 0, counter: 0, message: "" },
|
392
|
+
});
|
415
393
|
|
416
|
-
|
417
|
-
|
418
|
-
|
419
|
-
} catch (error) {
|
420
|
-
expect((error as Error).message).to.include("Inputs required for node");
|
421
|
-
}
|
394
|
+
await expect(graph.execute("requiredInputNode")).to.be.rejectedWith(
|
395
|
+
"Params required for node"
|
396
|
+
);
|
422
397
|
});
|
423
398
|
|
424
399
|
/**
|
@@ -735,4 +710,59 @@ describe("GraphFlow", function () {
|
|
735
710
|
const result = await resultPromise;
|
736
711
|
expect(result.value).to.equal(6); // 1 (waitingNode) + 5 (finalNode)
|
737
712
|
});
|
713
|
+
|
714
|
+
// Test de validation des paramètres
|
715
|
+
it("should successfully validate params", async () => {
|
716
|
+
const graph = new GraphFlow("test", {
|
717
|
+
name: "test",
|
718
|
+
nodes: [
|
719
|
+
{
|
720
|
+
name: "validationNode",
|
721
|
+
params: z.object({
|
722
|
+
value: z.number().max(10),
|
723
|
+
}),
|
724
|
+
execute: async (
|
725
|
+
context: GraphContext<TestSchema>,
|
726
|
+
params?: NodeParams
|
727
|
+
) => {
|
728
|
+
context.counter = params?.value || 0;
|
729
|
+
},
|
730
|
+
},
|
731
|
+
],
|
732
|
+
schema: TestSchema,
|
733
|
+
context: { value: 0, counter: 0, message: "" },
|
734
|
+
});
|
735
|
+
|
736
|
+
// Test avec valeur invalide
|
737
|
+
await expect(
|
738
|
+
graph.execute("validationNode", { value: 20 })
|
739
|
+
).to.be.rejectedWith("Number must be less than or equal to 10");
|
740
|
+
});
|
741
|
+
|
742
|
+
// Test des paramètres requis
|
743
|
+
it("should throw error when required params are missing", async () => {
|
744
|
+
const graph = new GraphFlow("test", {
|
745
|
+
name: "test",
|
746
|
+
nodes: [
|
747
|
+
{
|
748
|
+
name: "requiredInputNode",
|
749
|
+
params: z.object({
|
750
|
+
value: z.number(),
|
751
|
+
}),
|
752
|
+
execute: async (
|
753
|
+
context: GraphContext<TestSchema>,
|
754
|
+
params?: NodeParams
|
755
|
+
) => {
|
756
|
+
context.counter = params?.value || 0;
|
757
|
+
},
|
758
|
+
},
|
759
|
+
],
|
760
|
+
schema: TestSchema,
|
761
|
+
context: { value: 0, counter: 0, message: "" },
|
762
|
+
});
|
763
|
+
|
764
|
+
await expect(graph.execute("requiredInputNode")).to.be.rejectedWith(
|
765
|
+
"Params required for node"
|
766
|
+
);
|
767
|
+
});
|
738
768
|
});
|
package/test/graph/node.test.ts
CHANGED
@@ -329,4 +329,182 @@ describe("GraphNode", () => {
|
|
329
329
|
expect(stateChanges.length).to.equal(uniqueChanges.size);
|
330
330
|
expect(stateChanges).to.have.lengthOf(2); // Un pour counter, un pour message
|
331
331
|
});
|
332
|
+
|
333
|
+
it("should validate node parameters with Zod schema", async () => {
|
334
|
+
const paramSchema = z.object({
|
335
|
+
increment: z.number().min(1),
|
336
|
+
message: z.string().min(1),
|
337
|
+
});
|
338
|
+
|
339
|
+
const nodes = new Map();
|
340
|
+
nodes.set("test", {
|
341
|
+
name: "test",
|
342
|
+
params: paramSchema,
|
343
|
+
execute: async (context: TestContext, params?: NodeParams) => {
|
344
|
+
context.counter += params?.increment || 0;
|
345
|
+
context.message = params?.message || "";
|
346
|
+
},
|
347
|
+
});
|
348
|
+
|
349
|
+
node = new GraphNode(
|
350
|
+
nodes,
|
351
|
+
logger,
|
352
|
+
eventManager,
|
353
|
+
eventSubject,
|
354
|
+
stateSubject
|
355
|
+
);
|
356
|
+
|
357
|
+
// Test avec des paramètres valides
|
358
|
+
await node.executeNode(
|
359
|
+
"test",
|
360
|
+
{ counter: 0, message: "Hello" },
|
361
|
+
{ increment: 5, message: "Valid" }
|
362
|
+
);
|
363
|
+
|
364
|
+
// Test avec des paramètres invalides
|
365
|
+
await expect(
|
366
|
+
node.executeNode(
|
367
|
+
"test",
|
368
|
+
{ counter: 0, message: "Hello" },
|
369
|
+
{ increment: 0, message: "" }
|
370
|
+
)
|
371
|
+
).to.be.rejected; // Enlever le .with() car le message d'erreur vient directement de Zod
|
372
|
+
});
|
373
|
+
|
374
|
+
it("should work without params schema", async () => {
|
375
|
+
const nodes = new Map();
|
376
|
+
nodes.set("test", {
|
377
|
+
name: "test",
|
378
|
+
execute: async (context: TestContext) => {
|
379
|
+
context.counter++;
|
380
|
+
},
|
381
|
+
});
|
382
|
+
|
383
|
+
node = new GraphNode(
|
384
|
+
nodes,
|
385
|
+
logger,
|
386
|
+
eventManager,
|
387
|
+
eventSubject,
|
388
|
+
stateSubject
|
389
|
+
);
|
390
|
+
|
391
|
+
// Devrait fonctionner sans erreur même sans schema de params
|
392
|
+
await node.executeNode("test", { counter: 0, message: "Hello" }, null);
|
393
|
+
});
|
394
|
+
|
395
|
+
it("should not require params when node has no params schema", async () => {
|
396
|
+
const nodes = new Map();
|
397
|
+
nodes.set("test", {
|
398
|
+
name: "test",
|
399
|
+
// Pas de schéma de params défini
|
400
|
+
execute: async (context: TestContext) => {
|
401
|
+
context.counter++;
|
402
|
+
},
|
403
|
+
});
|
404
|
+
|
405
|
+
node = new GraphNode(
|
406
|
+
nodes,
|
407
|
+
logger,
|
408
|
+
eventManager,
|
409
|
+
eventSubject,
|
410
|
+
stateSubject
|
411
|
+
);
|
412
|
+
|
413
|
+
await node.executeNode("test", { counter: 0, message: "Hello" }, null);
|
414
|
+
|
415
|
+
const stateChanges = events.filter((e) => e.type === "nodeStateChanged");
|
416
|
+
expect(stateChanges).to.have.lengthOf(1);
|
417
|
+
expect(stateChanges[0].payload.newValue).to.equal(1);
|
418
|
+
});
|
419
|
+
|
420
|
+
it("should require params only when node has params schema", async () => {
|
421
|
+
const nodes = new Map();
|
422
|
+
nodes.set("test", {
|
423
|
+
name: "test",
|
424
|
+
params: z.object({
|
425
|
+
// Avec un schéma de params
|
426
|
+
value: z.number(),
|
427
|
+
}),
|
428
|
+
execute: async (context: TestContext, params?: NodeParams) => {
|
429
|
+
context.counter = params?.value || 0;
|
430
|
+
},
|
431
|
+
});
|
432
|
+
|
433
|
+
node = new GraphNode(
|
434
|
+
nodes,
|
435
|
+
logger,
|
436
|
+
eventManager,
|
437
|
+
eventSubject,
|
438
|
+
stateSubject
|
439
|
+
);
|
440
|
+
|
441
|
+
// Devrait échouer sans params
|
442
|
+
await expect(
|
443
|
+
node.executeNode("test", { counter: 0, message: "Hello" }, null)
|
444
|
+
).to.be.rejectedWith("Params required for node");
|
445
|
+
});
|
446
|
+
|
447
|
+
it("should execute node without params when no schema is defined (real world scenario)", async () => {
|
448
|
+
const nodes = new Map();
|
449
|
+
nodes.set("incrementCounter", {
|
450
|
+
name: "incrementCounter",
|
451
|
+
execute: async (context: TestContext) => {
|
452
|
+
context.counter++;
|
453
|
+
},
|
454
|
+
});
|
455
|
+
|
456
|
+
node = new GraphNode(
|
457
|
+
nodes,
|
458
|
+
logger,
|
459
|
+
eventManager,
|
460
|
+
eventSubject,
|
461
|
+
stateSubject
|
462
|
+
);
|
463
|
+
|
464
|
+
// Simuler l'appel comme dans examples/t2.ts
|
465
|
+
await node.executeNode(
|
466
|
+
"incrementCounter",
|
467
|
+
{ message: "Hello", counter: 0 },
|
468
|
+
{ test: "test" } // Passer des params même si non requis
|
469
|
+
);
|
470
|
+
|
471
|
+
const stateChanges = events.filter((e) => e.type === "nodeStateChanged");
|
472
|
+
expect(stateChanges).to.have.lengthOf(1);
|
473
|
+
expect(stateChanges[0].payload.newValue).to.equal(1);
|
474
|
+
});
|
475
|
+
|
476
|
+
it("should handle optional params schema", async () => {
|
477
|
+
const nodes = new Map();
|
478
|
+
nodes.set("test", {
|
479
|
+
name: "test",
|
480
|
+
params: z
|
481
|
+
.object({
|
482
|
+
test: z.string(),
|
483
|
+
})
|
484
|
+
.optional(),
|
485
|
+
execute: async (context: TestContext, params?: NodeParams) => {
|
486
|
+
context.counter++;
|
487
|
+
},
|
488
|
+
});
|
489
|
+
|
490
|
+
node = new GraphNode(
|
491
|
+
nodes,
|
492
|
+
logger,
|
493
|
+
eventManager,
|
494
|
+
eventSubject,
|
495
|
+
stateSubject
|
496
|
+
);
|
497
|
+
|
498
|
+
// Devrait fonctionner avec ou sans params
|
499
|
+
await node.executeNode(
|
500
|
+
"test",
|
501
|
+
{ counter: 0, message: "Hello" },
|
502
|
+
{ test: "test" }
|
503
|
+
);
|
504
|
+
await node.executeNode("test", { counter: 1, message: "Hello" }, null);
|
505
|
+
|
506
|
+
const stateChanges = events.filter((e) => e.type === "nodeStateChanged");
|
507
|
+
expect(stateChanges).to.have.lengthOf(2);
|
508
|
+
expect(stateChanges[1].payload.newValue).to.equal(2);
|
509
|
+
});
|
332
510
|
});
|
package/types/index.ts
CHANGED
@@ -81,10 +81,10 @@ export type GraphContext<T> = SchemaType<T>;
|
|
81
81
|
export interface Node<T extends ZodSchema, I = any> {
|
82
82
|
/** Name of the node */
|
83
83
|
name: string;
|
84
|
+
/** Description of the node */
|
85
|
+
description?: string;
|
84
86
|
/** Schema for node inputs */
|
85
|
-
|
86
|
-
/** Schema for node outputs */
|
87
|
-
outputs?: ZodSchema;
|
87
|
+
params?: I extends void ? never : ZodSchema<I>;
|
88
88
|
/** Execute function for the node */
|
89
89
|
execute: (context: GraphContext<T>, params?: I) => Promise<void>;
|
90
90
|
/** Optional condition for node execution */
|
@@ -5,8 +5,8 @@ export const generateActionSchema = (graphs: GraphFlow<any>[]) => {
|
|
5
5
|
return graphs
|
6
6
|
.map((graph) => {
|
7
7
|
const rootNode = Array.from(graph.nodes.values())[0];
|
8
|
-
const schemaStr = rootNode.
|
9
|
-
? getSchemaString(rootNode.
|
8
|
+
const schemaStr = rootNode.params
|
9
|
+
? getSchemaString(rootNode.params)
|
10
10
|
: "No parameters";
|
11
11
|
return `Workflow: ${graph.name}\nParameters: ${schemaStr}`;
|
12
12
|
})
|