@minded-ai/mindedjs 1.0.80-beta.3 → 1.0.80-beta.6
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/edges/createLogicalRouter.d.ts +1 -1
- package/dist/edges/createLogicalRouter.d.ts.map +1 -1
- package/dist/edges/createLogicalRouter.js +16 -4
- package/dist/edges/createLogicalRouter.js.map +1 -1
- package/dist/edges/edgeFactory.d.ts.map +1 -1
- package/dist/edges/edgeFactory.js +4 -2
- package/dist/edges/edgeFactory.js.map +1 -1
- package/package.json +1 -1
- package/src/edges/createLogicalRouter.ts +18 -4
- package/src/edges/edgeFactory.ts +4 -2
|
@@ -2,5 +2,5 @@ import { LogicalConditionEdge } from '../types/Flows.types';
|
|
|
2
2
|
import { stateAnnotation } from '../types/LangGraph.types';
|
|
3
3
|
export declare const createLogicalRouter: ({ edges }: {
|
|
4
4
|
edges: LogicalConditionEdge[];
|
|
5
|
-
}) => (state: typeof stateAnnotation.State) => Promise<string>;
|
|
5
|
+
}) => (state: typeof stateAnnotation.State) => Promise<string | null>;
|
|
6
6
|
//# sourceMappingURL=createLogicalRouter.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"createLogicalRouter.d.ts","sourceRoot":"","sources":["../../src/edges/createLogicalRouter.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AAC5D,OAAO,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAC;AAO3D,eAAO,MAAM,mBAAmB,GAAI,WAAW;IAAE,KAAK,EAAE,oBAAoB,EAAE,CAAA;CAAE,MAChE,OAAO,OAAO,eAAe,CAAC,KAAK,
|
|
1
|
+
{"version":3,"file":"createLogicalRouter.d.ts","sourceRoot":"","sources":["../../src/edges/createLogicalRouter.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AAC5D,OAAO,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAC;AAO3D,eAAO,MAAM,mBAAmB,GAAI,WAAW;IAAE,KAAK,EAAE,oBAAoB,EAAE,CAAA;CAAE,MAChE,OAAO,OAAO,eAAe,CAAC,KAAK,2BAyFlD,CAAC"}
|
|
@@ -41,7 +41,11 @@ const CONDITION_TIMEOUT = 5000; // 5 seconds
|
|
|
41
41
|
const createLogicalRouter = ({ edges }) => {
|
|
42
42
|
return async (state) => {
|
|
43
43
|
logger_1.logger.debug(`Evaluating logical conditions for ${edges.length} edges`);
|
|
44
|
-
|
|
44
|
+
// Separate regular conditions from "else" conditions
|
|
45
|
+
const regularEdges = edges.filter(edge => edge.condition.trim() !== 'else');
|
|
46
|
+
const elseEdges = edges.filter(edge => edge.condition.trim() === 'else');
|
|
47
|
+
// First, evaluate all regular conditions
|
|
48
|
+
for (const edge of regularEdges) {
|
|
45
49
|
try {
|
|
46
50
|
// Customer is responsible for providing valid JavaScript syntax
|
|
47
51
|
// We execute their condition in a sandboxed VM with timeout protection
|
|
@@ -79,7 +83,7 @@ const createLogicalRouter = ({ edges }) => {
|
|
|
79
83
|
Promise.resolve(conditionFn({ state })),
|
|
80
84
|
new Promise((_, reject) => setTimeout(() => reject(new Error('Condition execution timeout')), CONDITION_TIMEOUT)),
|
|
81
85
|
]);
|
|
82
|
-
if (result) {
|
|
86
|
+
if (result === true) {
|
|
83
87
|
logger_1.logger.info(`Condition matched for edge ${edge.source} → ${edge.target}`);
|
|
84
88
|
return edge.target;
|
|
85
89
|
}
|
|
@@ -101,9 +105,17 @@ const createLogicalRouter = ({ edges }) => {
|
|
|
101
105
|
continue;
|
|
102
106
|
}
|
|
103
107
|
}
|
|
108
|
+
// If no regular conditions matched, check for "else" conditions
|
|
109
|
+
if (elseEdges.length > 0) {
|
|
110
|
+
logger_1.logger.info(`No regular conditions matched, evaluating ${elseEdges.length} else condition(s)`);
|
|
111
|
+
// Return the first "else" condition's target
|
|
112
|
+
const elseEdge = elseEdges[0];
|
|
113
|
+
logger_1.logger.info(`Else condition matched for edge ${elseEdge.source} → ${elseEdge.target}`);
|
|
114
|
+
return elseEdge.target;
|
|
115
|
+
}
|
|
104
116
|
// If no conditions matched or all failed, return to the source node
|
|
105
|
-
logger_1.logger.info(
|
|
106
|
-
return
|
|
117
|
+
logger_1.logger.info('No conditions matched');
|
|
118
|
+
return null;
|
|
107
119
|
};
|
|
108
120
|
};
|
|
109
121
|
exports.createLogicalRouter = createLogicalRouter;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"createLogicalRouter.js","sourceRoot":"","sources":["../../src/edges/createLogicalRouter.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAEA,4CAAyC;AACzC,uCAAyB;AAEzB,6DAA6D;AAC7D,MAAM,iBAAiB,GAAG,IAAI,CAAC,CAAC,YAAY;AAErC,MAAM,mBAAmB,GAAG,CAAC,EAAE,KAAK,EAAqC,EAAE,EAAE;IAClF,OAAO,KAAK,EAAE,KAAmC,EAAE,EAAE;QACnD,eAAM,CAAC,KAAK,CAAC,qCAAqC,KAAK,CAAC,MAAM,QAAQ,CAAC,CAAC;QAExE,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;
|
|
1
|
+
{"version":3,"file":"createLogicalRouter.js","sourceRoot":"","sources":["../../src/edges/createLogicalRouter.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"edgeFactory.d.ts","sourceRoot":"","sources":["../../src/edges/edgeFactory.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAY,IAAI,EAAkF,MAAM,sBAAsB,CAAC;AAC5I,OAAO,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAC5D,OAAO,EAAE,iBAAiB,EAAE,MAAM,sCAAsC,CAAC;AAMzE,OAAO,EAAE,IAAI,EAAE,MAAM,sBAAsB,CAAC;AAC5C,OAAO,EAAE,KAAK,EAAE,MAAM,UAAU,CAAC;AASjC,eAAO,MAAM,WAAW,GAAI,6CAOzB;IACD,KAAK,EAAE,gBAAgB,CAAC;IACxB,KAAK,EAAE,IAAI,EAAE,CAAC;IACd,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;IAC5B,KAAK,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,EAAE,CAAC;IACxB,GAAG,EAAE,iBAAiB,CAAC;IACvB,KAAK,EAAE,KAAK,CAAC;CACd,
|
|
1
|
+
{"version":3,"file":"edgeFactory.d.ts","sourceRoot":"","sources":["../../src/edges/edgeFactory.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAY,IAAI,EAAkF,MAAM,sBAAsB,CAAC;AAC5I,OAAO,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAC5D,OAAO,EAAE,iBAAiB,EAAE,MAAM,sCAAsC,CAAC;AAMzE,OAAO,EAAE,IAAI,EAAE,MAAM,sBAAsB,CAAC;AAC5C,OAAO,EAAE,KAAK,EAAE,MAAM,UAAU,CAAC;AASjC,eAAO,MAAM,WAAW,GAAI,6CAOzB;IACD,KAAK,EAAE,gBAAgB,CAAC;IACxB,KAAK,EAAE,IAAI,EAAE,CAAC;IACd,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;IAC5B,KAAK,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,EAAE,CAAC;IACxB,GAAG,EAAE,iBAAiB,CAAC;IACvB,KAAK,EAAE,KAAK,CAAC;CACd,SA4FA,CAAC"}
|
|
@@ -23,7 +23,7 @@ const edgeFactory = ({ graph, edges, nodes, tools, llm, agent, }) => {
|
|
|
23
23
|
if (edgesBySource.logical.length > 0) {
|
|
24
24
|
const logicalRouter = (0, createLogicalRouter_1.createLogicalRouter)({ edges: edgesBySource.logical });
|
|
25
25
|
const result = await logicalRouter(state);
|
|
26
|
-
if (result
|
|
26
|
+
if (result) {
|
|
27
27
|
return result;
|
|
28
28
|
}
|
|
29
29
|
else {
|
|
@@ -43,7 +43,9 @@ const edgeFactory = ({ graph, edges, nodes, tools, llm, agent, }) => {
|
|
|
43
43
|
return await promptRouter(state);
|
|
44
44
|
}
|
|
45
45
|
// Fallback: stay at current source node
|
|
46
|
-
|
|
46
|
+
const source = (originalNode === null || originalNode === void 0 ? void 0 : originalNode.name) || sourceNode;
|
|
47
|
+
logger_1.logger.info(`No conditions matched, returning to source: ${source}`);
|
|
48
|
+
return source;
|
|
47
49
|
};
|
|
48
50
|
};
|
|
49
51
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"edgeFactory.js","sourceRoot":"","sources":["../../src/edges/edgeFactory.ts"],"names":[],"mappings":";;;AAAA,sDAA4I;AAG5I,6DAA0D;AAC1D,+DAA4D;AAC5D,yDAAsD;AACtD,0EAAoG;AACpG,4DAA+E;AAG/E,4CAAyC;AAQlC,MAAM,WAAW,GAAG,CAAC,EAC1B,KAAK,EACL,KAAK,EACL,KAAK,EACL,KAAK,EACL,GAAG,EACH,KAAK,GAQN,EAAE,EAAE;IACH;;OAEG;IACH,MAAM,oBAAoB,GAAG,CAAC,UAAkB,EAAE,aAA4B,EAAE,YAAkB,EAAE,EAAE;QACpG,OAAO,KAAK,EAAE,KAAU,EAAE,EAAE;YAC1B,wCAAwC;YACxC,IAAI,aAAa,CAAC,WAAW,EAAE,CAAC;gBAC9B,MAAM,YAAY,GAAG,IAAA,mCAAgB,EAAC,aAAa,CAAC,WAAW,CAAC,CAAC;gBACjE,OAAO,MAAM,YAAY,EAAE,CAAC;YAC9B,CAAC;YAED,sCAAsC;YACtC,IAAI,aAAa,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACrC,MAAM,aAAa,GAAG,IAAA,yCAAmB,EAAC,EAAE,KAAK,EAAE,aAAa,CAAC,OAAO,EAAE,CAAC,CAAC;gBAC5E,MAAM,MAAM,GAAG,MAAM,aAAa,CAAC,KAAK,CAAC,CAAC;gBAC1C,IAAI,MAAM,
|
|
1
|
+
{"version":3,"file":"edgeFactory.js","sourceRoot":"","sources":["../../src/edges/edgeFactory.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -10,7 +10,12 @@ export const createLogicalRouter = ({ edges }: { edges: LogicalConditionEdge[] }
|
|
|
10
10
|
return async (state: typeof stateAnnotation.State) => {
|
|
11
11
|
logger.debug(`Evaluating logical conditions for ${edges.length} edges`);
|
|
12
12
|
|
|
13
|
-
|
|
13
|
+
// Separate regular conditions from "else" conditions
|
|
14
|
+
const regularEdges = edges.filter(edge => edge.condition.trim() !== 'else');
|
|
15
|
+
const elseEdges = edges.filter(edge => edge.condition.trim() === 'else');
|
|
16
|
+
|
|
17
|
+
// First, evaluate all regular conditions
|
|
18
|
+
for (const edge of regularEdges) {
|
|
14
19
|
try {
|
|
15
20
|
// Customer is responsible for providing valid JavaScript syntax
|
|
16
21
|
// We execute their condition in a sandboxed VM with timeout protection
|
|
@@ -53,7 +58,7 @@ export const createLogicalRouter = ({ edges }: { edges: LogicalConditionEdge[] }
|
|
|
53
58
|
new Promise((_, reject) => setTimeout(() => reject(new Error('Condition execution timeout')), CONDITION_TIMEOUT)),
|
|
54
59
|
]);
|
|
55
60
|
|
|
56
|
-
if (result) {
|
|
61
|
+
if (result === true) {
|
|
57
62
|
logger.info(`Condition matched for edge ${edge.source} → ${edge.target}`);
|
|
58
63
|
return edge.target;
|
|
59
64
|
}
|
|
@@ -78,8 +83,17 @@ export const createLogicalRouter = ({ edges }: { edges: LogicalConditionEdge[] }
|
|
|
78
83
|
}
|
|
79
84
|
}
|
|
80
85
|
|
|
86
|
+
// If no regular conditions matched, check for "else" conditions
|
|
87
|
+
if (elseEdges.length > 0) {
|
|
88
|
+
logger.info(`No regular conditions matched, evaluating ${elseEdges.length} else condition(s)`);
|
|
89
|
+
// Return the first "else" condition's target
|
|
90
|
+
const elseEdge = elseEdges[0];
|
|
91
|
+
logger.info(`Else condition matched for edge ${elseEdge.source} → ${elseEdge.target}`);
|
|
92
|
+
return elseEdge.target;
|
|
93
|
+
}
|
|
94
|
+
|
|
81
95
|
// If no conditions matched or all failed, return to the source node
|
|
82
|
-
logger.info(
|
|
83
|
-
return
|
|
96
|
+
logger.info('No conditions matched');
|
|
97
|
+
return null;
|
|
84
98
|
};
|
|
85
99
|
};
|
package/src/edges/edgeFactory.ts
CHANGED
|
@@ -46,7 +46,7 @@ export const edgeFactory = ({
|
|
|
46
46
|
if (edgesBySource.logical.length > 0) {
|
|
47
47
|
const logicalRouter = createLogicalRouter({ edges: edgesBySource.logical });
|
|
48
48
|
const result = await logicalRouter(state);
|
|
49
|
-
if (result
|
|
49
|
+
if (result) {
|
|
50
50
|
return result;
|
|
51
51
|
} else {
|
|
52
52
|
logger.debug('No logical conditions matched, continuing to prompt conditions');
|
|
@@ -68,7 +68,9 @@ export const edgeFactory = ({
|
|
|
68
68
|
}
|
|
69
69
|
|
|
70
70
|
// Fallback: stay at current source node
|
|
71
|
-
|
|
71
|
+
const source = originalNode?.name || sourceNode;
|
|
72
|
+
logger.info(`No conditions matched, returning to source: ${source}`);
|
|
73
|
+
return source;
|
|
72
74
|
};
|
|
73
75
|
};
|
|
74
76
|
|