mcpgraph 0.1.15 → 0.1.17

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.
Files changed (64) hide show
  1. package/README.md +61 -1
  2. package/dist/api.d.ts +13 -1
  3. package/dist/api.d.ts.map +1 -1
  4. package/dist/api.js +40 -0
  5. package/dist/api.js.map +1 -1
  6. package/dist/config/expression-validator.d.ts +12 -0
  7. package/dist/config/expression-validator.d.ts.map +1 -0
  8. package/dist/config/expression-validator.js +77 -0
  9. package/dist/config/expression-validator.js.map +1 -0
  10. package/dist/config/parser.d.ts.map +1 -1
  11. package/dist/config/parser.js +9 -0
  12. package/dist/config/parser.js.map +1 -1
  13. package/dist/config/schema.d.ts +18 -0
  14. package/dist/config/schema.d.ts.map +1 -1
  15. package/dist/config/schema.js +5 -0
  16. package/dist/config/schema.js.map +1 -1
  17. package/dist/execution/context.d.ts +27 -3
  18. package/dist/execution/context.d.ts.map +1 -1
  19. package/dist/execution/context.js +52 -9
  20. package/dist/execution/context.js.map +1 -1
  21. package/dist/execution/executor.d.ts.map +1 -1
  22. package/dist/execution/executor.js +34 -12
  23. package/dist/execution/executor.js.map +1 -1
  24. package/dist/execution/nodes/entry-executor.d.ts.map +1 -1
  25. package/dist/execution/nodes/entry-executor.js +1 -2
  26. package/dist/execution/nodes/entry-executor.js.map +1 -1
  27. package/dist/execution/nodes/exit-executor.d.ts +1 -1
  28. package/dist/execution/nodes/exit-executor.d.ts.map +1 -1
  29. package/dist/execution/nodes/exit-executor.js +9 -7
  30. package/dist/execution/nodes/exit-executor.js.map +1 -1
  31. package/dist/execution/nodes/mcp-tool-executor.d.ts +1 -1
  32. package/dist/execution/nodes/mcp-tool-executor.d.ts.map +1 -1
  33. package/dist/execution/nodes/mcp-tool-executor.js +5 -4
  34. package/dist/execution/nodes/mcp-tool-executor.js.map +1 -1
  35. package/dist/execution/nodes/switch-executor.d.ts +1 -1
  36. package/dist/execution/nodes/switch-executor.d.ts.map +1 -1
  37. package/dist/execution/nodes/switch-executor.js +13 -8
  38. package/dist/execution/nodes/switch-executor.js.map +1 -1
  39. package/dist/execution/nodes/transform-executor.d.ts +1 -1
  40. package/dist/execution/nodes/transform-executor.d.ts.map +1 -1
  41. package/dist/execution/nodes/transform-executor.js +5 -4
  42. package/dist/execution/nodes/transform-executor.js.map +1 -1
  43. package/dist/expressions/json-logic.d.ts +11 -2
  44. package/dist/expressions/json-logic.d.ts.map +1 -1
  45. package/dist/expressions/json-logic.js +98 -16
  46. package/dist/expressions/json-logic.js.map +1 -1
  47. package/dist/expressions/jsonata-extensions.d.ts +10 -0
  48. package/dist/expressions/jsonata-extensions.d.ts.map +1 -0
  49. package/dist/expressions/jsonata-extensions.js +69 -0
  50. package/dist/expressions/jsonata-extensions.js.map +1 -0
  51. package/dist/expressions/jsonata.d.ts +8 -1
  52. package/dist/expressions/jsonata.d.ts.map +1 -1
  53. package/dist/expressions/jsonata.js +72 -12
  54. package/dist/expressions/jsonata.js.map +1 -1
  55. package/dist/types/config.d.ts +5 -0
  56. package/dist/types/config.d.ts.map +1 -1
  57. package/dist/types/execution.d.ts +1 -1
  58. package/dist/types/execution.d.ts.map +1 -1
  59. package/docs/design.md +21 -2
  60. package/docs/implementation.md +15 -6
  61. package/docs/introspection-debugging.md +28 -1
  62. package/examples/api-usage.ts +54 -1
  63. package/examples/loop_example.yaml +84 -0
  64. package/package.json +1 -1
package/README.md CHANGED
@@ -26,6 +26,11 @@ server:
26
26
  version: "1.0.0"
27
27
  description: "File utilities"
28
28
 
29
+ # Optional: Execution limits to prevent infinite loops
30
+ executionLimits:
31
+ maxNodeExecutions: 1000 # Maximum total node executions (default: 1000)
32
+ maxExecutionTimeMs: 300000 # Maximum execution time in milliseconds (default: 300000 = 5 minutes)
33
+
29
34
  # Tool Definitions
30
35
  tools:
31
36
  - name: "count_files"
@@ -94,14 +99,40 @@ This graph:
94
99
  ## Node Types
95
100
 
96
101
  - **`entry`**: Entry point for a tool's graph execution. Receives tool arguments.
102
+ - **Output**: The tool input arguments (passed through as-is)
97
103
  - **`mcp`**: Calls an MCP tool on an internal or external MCP server.
104
+ - **Output**: The MCP tool's response (parsed from the tool's content)
98
105
  - **`transform`**: Applies [JSONata](https://jsonata.org/) expressions to transform data between nodes.
106
+ - **Output**: The result of evaluating the JSONata expression
99
107
  - **`switch`**: Uses [JSON Logic](https://jsonlogic.com/) to conditionally route to different nodes. Note: `var` operations in JSON Logic rules are evaluated using JSONata, allowing full JSONata expression support.
108
+ - **Output**: The node ID of the target node that was routed to (string)
100
109
  - **`exit`**: Exit point that returns the final result to the MCP tool caller.
110
+ - **Output**: The output from the previous node in the execution history
111
+
112
+ ## Execution History & Debugging
113
+
114
+ mcpGraph maintains a complete execution history for each tool execution, enabling powerful debugging and introspection capabilities:
115
+
116
+ - **Execution History**: Every node execution is recorded with timing, outputs, and a unique `executionIndex` (sequential: 0, 1, 2, ...)
117
+ - **Context Structure**: Context for expressions is built from history - a flat structure where each node ID maps to its latest output
118
+ - Simple notation: `$.node_id` accesses the latest output of a node
119
+ - When nodes execute multiple times (loops), context shows the most recent execution
120
+ - History functions provide access to all executions, not just the latest
121
+ - **Time-Travel Debugging**: Get the context that was available to any specific execution using `getContextForExecution(executionIndex)`
122
+ - **History Functions**: Use JSONata functions to access execution history:
123
+ - `$previousNode()` - Get the previous node's output
124
+ - `$previousNode(index)` - Get the node that executed N steps before current
125
+ - `$executionCount(nodeName)` - Count how many times a node executed
126
+ - `$nodeExecution(nodeName, index)` - Get a specific execution of a node (0 = first, -1 = last)
127
+ - `$nodeExecutions(nodeName)` - Get all executions of a node as an array
128
+ - **Loop Support**: Nodes can execute multiple times in loops, with each execution tracked separately in history
129
+
130
+ See [docs/introspection-debugging.md](docs/introspection-debugging.md) for detailed documentation on debugging features.
101
131
 
102
132
  **Context Access:**
103
133
  - All node outputs are accessible by node ID (e.g., `$.entry_count_files.directory`, `$.list_directory_node`)
104
- - The `$previousNode()` function is available in all JSONata expressions to access the output of the node that executed immediately before the current node
134
+ - Latest execution wins: `$.increment_node` returns the most recent output when a node executes multiple times
135
+ - History functions are available in all JSONata expressions (including those used in JSON Logic `var` operations)
105
136
 
106
137
  ## For Developers
107
138
 
@@ -123,6 +154,35 @@ npm install mcpgraph
123
154
 
124
155
  ## Configuration
125
156
 
157
+ ### Execution Limits
158
+
159
+ mcpGraph supports cyclical graphs, which requires guardrails to prevent infinite loops. Execution limits can be configured at the graph level:
160
+
161
+ ```yaml
162
+ version: "1.0"
163
+
164
+ server:
165
+ name: "myServer"
166
+ version: "1.0.0"
167
+ description: "My MCP server"
168
+
169
+ # Optional: Execution limits to prevent infinite loops
170
+ executionLimits:
171
+ maxNodeExecutions: 1000 # Maximum total node executions (default: 1000)
172
+ maxExecutionTimeMs: 300000 # Maximum execution time in milliseconds (default: 300000 = 5 minutes)
173
+
174
+ tools:
175
+ # ... tool definitions ...
176
+ ```
177
+
178
+ **Execution Limits:**
179
+ - **`maxNodeExecutions`** (optional): Maximum number of node executions across the entire graph. Default: `1000`. If execution reaches this limit, an error is thrown.
180
+ - **`maxExecutionTimeMs`** (optional): Maximum wall-clock time for graph execution in milliseconds. Default: `300000` (5 minutes). If execution exceeds this time, an error is thrown.
181
+
182
+ Both limits are checked before each node execution. If either limit is exceeded, execution stops immediately with a clear error message indicating which limit was hit.
183
+
184
+ **Note:** These limits are optional. If not specified, the defaults apply. They can be set to higher values for long-running batch jobs or lower values for quick operations.
185
+
126
186
  ### As an MCP Server
127
187
 
128
188
  To use `mcpgraph` as an MCP server in an MCP client (such as Claude Desktop), add it to your MCP client's configuration file.
package/dist/api.d.ts CHANGED
@@ -8,7 +8,7 @@
8
8
  */
9
9
  import type { McpGraphConfig } from './types/config.js';
10
10
  import { type ValidationError } from './graph/validator.js';
11
- import type { ExecutionOptions, ExecutionResult as CoreExecutionResult, ExecutionController, ExecutionState } from './types/execution.js';
11
+ import type { ExecutionOptions, ExecutionResult as CoreExecutionResult, ExecutionController, ExecutionState, NodeExecutionRecord } from './types/execution.js';
12
12
  export type { NodeDefinition, McpGraphConfig } from './types/config.js';
13
13
  export type { ExecutionOptions, ExecutionHooks, ExecutionController, ExecutionState, ExecutionStatus, NodeExecutionRecord, ExecutionTelemetry, } from './types/execution.js';
14
14
  export interface ToolInfo {
@@ -70,6 +70,18 @@ export declare class McpGraphApi {
70
70
  * Get the current execution state (if execution is in progress)
71
71
  */
72
72
  getExecutionState(): ExecutionState | null;
73
+ /**
74
+ * Get the context that was available to a specific execution (for debugging)
75
+ * @param executionIndex - The execution index to get context for
76
+ * @returns Context object that was available to that execution, or null if execution not found
77
+ */
78
+ getContextForExecution(executionIndex: number): Record<string, unknown> | null;
79
+ /**
80
+ * Get a specific execution record by index
81
+ * @param executionIndex - The execution index
82
+ * @returns Execution record or null if not found
83
+ */
84
+ getExecutionByIndex(executionIndex: number): NodeExecutionRecord | null;
73
85
  /**
74
86
  * Get the full configuration
75
87
  */
package/dist/api.d.ts.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"api.d.ts","sourceRoot":"","sources":["../src/api.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAIH,OAAO,KAAK,EAAE,cAAc,EAAkB,MAAM,mBAAmB,CAAC;AACxE,OAAO,EAAiB,KAAK,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAG3E,OAAO,KAAK,EACV,gBAAgB,EAChB,eAAe,IAAI,mBAAmB,EACtC,mBAAmB,EACnB,cAAc,EAEf,MAAM,sBAAsB,CAAC;AAG9B,YAAY,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACxE,YAAY,EACV,gBAAgB,EAChB,cAAc,EACd,mBAAmB,EACnB,cAAc,EACd,eAAe,EACf,mBAAmB,EACnB,kBAAkB,GACnB,MAAM,sBAAsB,CAAC;AAE9B,MAAM,WAAW,QAAQ;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACrC,YAAY,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACxC;AAED,MAAM,WAAW,eAAe;IAC9B,MAAM,EAAE,OAAO,CAAC;IAChB,iBAAiB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC5C,gBAAgB,CAAC,EAAE,mBAAmB,CAAC,kBAAkB,CAAC,CAAC;IAC3D,SAAS,CAAC,EAAE,mBAAmB,CAAC,WAAW,CAAC,CAAC;CAC9C;AAED,qBAAa,WAAW;IACtB,OAAO,CAAC,MAAM,CAAiB;IAC/B,OAAO,CAAC,QAAQ,CAAgB;IAChC,OAAO,CAAC,aAAa,CAAmB;IAExC;;;;OAIG;gBACS,UAAU,EAAE,MAAM;IAmB9B;;OAEG;IACH,aAAa,IAAI;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,MAAM,CAAA;KAAE;IAQvE;;OAEG;IACH,SAAS,IAAI,QAAQ,EAAE;IASvB;;OAEG;IACH,OAAO,CAAC,QAAQ,EAAE,MAAM,GAAG,QAAQ,GAAG,SAAS;IAc/C;;;OAGG;IACH,WAAW,CACT,QAAQ,EAAE,MAAM,EAChB,aAAa,GAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAM,EAC3C,OAAO,CAAC,EAAE,gBAAgB,GACzB;QAAE,OAAO,EAAE,OAAO,CAAC,eAAe,CAAC,CAAC;QAAC,UAAU,EAAE,mBAAmB,GAAG,IAAI,CAAA;KAAE;IAmBhF;;;OAGG;IACH,aAAa,IAAI,mBAAmB,GAAG,IAAI;IAI3C;;OAEG;IACH,QAAQ;IAIR;;OAEG;IACH,iBAAiB,IAAI,cAAc,GAAG,IAAI;IAY1C;;OAEG;IACH,SAAS,IAAI,cAAc;IAI3B;;OAEG;IACH,MAAM,CAAC,cAAc,CAAC,UAAU,EAAE,MAAM,GAAG,eAAe,EAAE;IAK5D;;OAEG;IACH,MAAM,CAAC,qBAAqB,CAAC,UAAU,EAAE,MAAM,GAAG;QAChD,MAAM,EAAE,cAAc,CAAC;QACvB,MAAM,EAAE,eAAe,EAAE,CAAC;KAC3B;IAMD;;OAEG;IACG,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;CAG7B"}
1
+ {"version":3,"file":"api.d.ts","sourceRoot":"","sources":["../src/api.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAIH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACxD,OAAO,EAAiB,KAAK,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAG3E,OAAO,KAAK,EACV,gBAAgB,EAChB,eAAe,IAAI,mBAAmB,EACtC,mBAAmB,EACnB,cAAc,EACd,mBAAmB,EACpB,MAAM,sBAAsB,CAAC;AAG9B,YAAY,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACxE,YAAY,EACV,gBAAgB,EAChB,cAAc,EACd,mBAAmB,EACnB,cAAc,EACd,eAAe,EACf,mBAAmB,EACnB,kBAAkB,GACnB,MAAM,sBAAsB,CAAC;AAE9B,MAAM,WAAW,QAAQ;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACrC,YAAY,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACxC;AAED,MAAM,WAAW,eAAe;IAC9B,MAAM,EAAE,OAAO,CAAC;IAChB,iBAAiB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC5C,gBAAgB,CAAC,EAAE,mBAAmB,CAAC,kBAAkB,CAAC,CAAC;IAC3D,SAAS,CAAC,EAAE,mBAAmB,CAAC,WAAW,CAAC,CAAC;CAC9C;AAED,qBAAa,WAAW;IACtB,OAAO,CAAC,MAAM,CAAiB;IAC/B,OAAO,CAAC,QAAQ,CAAgB;IAChC,OAAO,CAAC,aAAa,CAAmB;IAExC;;;;OAIG;gBACS,UAAU,EAAE,MAAM;IAmB9B;;OAEG;IACH,aAAa,IAAI;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,MAAM,CAAA;KAAE;IAQvE;;OAEG;IACH,SAAS,IAAI,QAAQ,EAAE;IASvB;;OAEG;IACH,OAAO,CAAC,QAAQ,EAAE,MAAM,GAAG,QAAQ,GAAG,SAAS;IAc/C;;;OAGG;IACH,WAAW,CACT,QAAQ,EAAE,MAAM,EAChB,aAAa,GAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAM,EAC3C,OAAO,CAAC,EAAE,gBAAgB,GACzB;QAAE,OAAO,EAAE,OAAO,CAAC,eAAe,CAAC,CAAC;QAAC,UAAU,EAAE,mBAAmB,GAAG,IAAI,CAAA;KAAE;IAmBhF;;;OAGG;IACH,aAAa,IAAI,mBAAmB,GAAG,IAAI;IAI3C;;OAEG;IACH,QAAQ;IAIR;;OAEG;IACH,iBAAiB,IAAI,cAAc,GAAG,IAAI;IAY1C;;;;OAIG;IACH,sBAAsB,CAAC,cAAc,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI;IAe9E;;;;OAIG;IACH,mBAAmB,CAAC,cAAc,EAAE,MAAM,GAAG,mBAAmB,GAAG,IAAI;IAevE;;OAEG;IACH,SAAS,IAAI,cAAc;IAI3B;;OAEG;IACH,MAAM,CAAC,cAAc,CAAC,UAAU,EAAE,MAAM,GAAG,eAAe,EAAE;IAK5D;;OAEG;IACH,MAAM,CAAC,qBAAqB,CAAC,UAAU,EAAE,MAAM,GAAG;QAChD,MAAM,EAAE,cAAc,CAAC;QACvB,MAAM,EAAE,eAAe,EAAE,CAAC;KAC3B;IAMD;;OAEG;IACG,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;CAG7B"}
package/dist/api.js CHANGED
@@ -118,6 +118,46 @@ export class McpGraphApi {
118
118
  return null;
119
119
  }
120
120
  }
121
+ /**
122
+ * Get the context that was available to a specific execution (for debugging)
123
+ * @param executionIndex - The execution index to get context for
124
+ * @returns Context object that was available to that execution, or null if execution not found
125
+ */
126
+ getContextForExecution(executionIndex) {
127
+ const controller = this.executor.getController();
128
+ if (!controller) {
129
+ return null;
130
+ }
131
+ try {
132
+ const state = controller.getState();
133
+ const context = state.context;
134
+ return context.getContextForExecution(executionIndex);
135
+ }
136
+ catch (error) {
137
+ logger.error(`Error getting context for execution ${executionIndex}: ${error instanceof Error ? error.message : String(error)}`);
138
+ return null;
139
+ }
140
+ }
141
+ /**
142
+ * Get a specific execution record by index
143
+ * @param executionIndex - The execution index
144
+ * @returns Execution record or null if not found
145
+ */
146
+ getExecutionByIndex(executionIndex) {
147
+ const controller = this.executor.getController();
148
+ if (!controller) {
149
+ return null;
150
+ }
151
+ try {
152
+ const state = controller.getState();
153
+ const context = state.context;
154
+ return context.getExecutionByIndex(executionIndex) || null;
155
+ }
156
+ catch (error) {
157
+ logger.error(`Error getting execution ${executionIndex}: ${error instanceof Error ? error.message : String(error)}`);
158
+ return null;
159
+ }
160
+ }
121
161
  /**
122
162
  * Get the full configuration
123
163
  */
package/dist/api.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"api.js","sourceRoot":"","sources":["../src/api.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"api.js","sourceRoot":"","sources":["../src/api.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ /**
2
+ * Expression syntax validation for mcpGraph configuration
3
+ */
4
+ import type { McpGraphConfig } from "../types/config.js";
5
+ import type { ValidationError } from "../graph/validator.js";
6
+ /**
7
+ * Validate all expressions in the configuration (JSONata and JSON Logic)
8
+ * @param config - The configuration to validate
9
+ * @returns Array of validation errors (empty if all valid)
10
+ */
11
+ export declare function validateConfigExpressions(config: McpGraphConfig): ValidationError[];
12
+ //# sourceMappingURL=expression-validator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"expression-validator.d.ts","sourceRoot":"","sources":["../../src/config/expression-validator.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAkB,MAAM,oBAAoB,CAAC;AAGzE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAE7D;;;;GAIG;AACH,wBAAgB,yBAAyB,CAAC,MAAM,EAAE,cAAc,GAAG,eAAe,EAAE,CAgBnF"}
@@ -0,0 +1,77 @@
1
+ /**
2
+ * Expression syntax validation for mcpGraph configuration
3
+ */
4
+ import { validateJsonataSyntax } from "../expressions/jsonata.js";
5
+ import { validateJsonLogicSyntax } from "../expressions/json-logic.js";
6
+ /**
7
+ * Validate all expressions in the configuration (JSONata and JSON Logic)
8
+ * @param config - The configuration to validate
9
+ * @returns Array of validation errors (empty if all valid)
10
+ */
11
+ export function validateConfigExpressions(config) {
12
+ const errors = [];
13
+ for (const node of config.nodes) {
14
+ try {
15
+ validateNodeExpressions(node, config);
16
+ }
17
+ catch (error) {
18
+ const errorMessage = error instanceof Error ? error.message : String(error);
19
+ errors.push({
20
+ message: errorMessage,
21
+ nodeId: node.id,
22
+ });
23
+ }
24
+ }
25
+ return errors;
26
+ }
27
+ /**
28
+ * Validate expressions in a single node
29
+ */
30
+ function validateNodeExpressions(node, config) {
31
+ switch (node.type) {
32
+ case "transform":
33
+ // Validate transform expression
34
+ try {
35
+ validateJsonataSyntax(node.transform.expr);
36
+ }
37
+ catch (error) {
38
+ const errorMessage = error instanceof Error ? error.message : String(error);
39
+ throw new Error(`Invalid JSONata syntax in transform expression: ${errorMessage}`);
40
+ }
41
+ break;
42
+ case "mcp":
43
+ // Validate any JSONata expressions in args
44
+ for (const [key, value] of Object.entries(node.args)) {
45
+ if (typeof value === "string" && value.startsWith("$")) {
46
+ try {
47
+ validateJsonataSyntax(value);
48
+ }
49
+ catch (error) {
50
+ const errorMessage = error instanceof Error ? error.message : String(error);
51
+ throw new Error(`Invalid JSONata syntax in args.${key}: ${errorMessage}`);
52
+ }
53
+ }
54
+ }
55
+ break;
56
+ case "switch":
57
+ // Validate JSON Logic rules in conditions
58
+ for (let i = 0; i < node.conditions.length; i++) {
59
+ const condition = node.conditions[i];
60
+ if (condition.rule !== undefined && condition.rule !== null) {
61
+ try {
62
+ validateJsonLogicSyntax(condition.rule);
63
+ }
64
+ catch (error) {
65
+ const errorMessage = error instanceof Error ? error.message : String(error);
66
+ throw new Error(`Invalid JSON Logic syntax in condition ${i + 1}: ${errorMessage}`);
67
+ }
68
+ }
69
+ }
70
+ break;
71
+ case "entry":
72
+ case "exit":
73
+ // No expressions to validate
74
+ break;
75
+ }
76
+ }
77
+ //# sourceMappingURL=expression-validator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"expression-validator.js","sourceRoot":"","sources":["../../src/config/expression-validator.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"parser.d.ts","sourceRoot":"","sources":["../../src/config/parser.ts"],"names":[],"mappings":"AAAA;;GAEG;AAKH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAGzD,wBAAgB,eAAe,CAAC,QAAQ,EAAE,MAAM,GAAG,cAAc,CAgBhE"}
1
+ {"version":3,"file":"parser.d.ts","sourceRoot":"","sources":["../../src/config/parser.ts"],"names":[],"mappings":"AAAA;;GAEG;AAKH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAIzD,wBAAgB,eAAe,CAAC,QAAQ,EAAE,MAAM,GAAG,cAAc,CA6BhE"}
@@ -5,12 +5,21 @@ import { load } from "js-yaml";
5
5
  import { readFileSync } from "node:fs";
6
6
  import { mcpGraphConfigSchema } from "./schema.js";
7
7
  import { logger } from "../logger.js";
8
+ import { validateConfigExpressions } from "./expression-validator.js";
8
9
  export function parseYamlConfig(filePath) {
9
10
  try {
10
11
  const fileContents = readFileSync(filePath, "utf-8");
11
12
  const parsed = load(fileContents);
12
13
  // Validate against schema
13
14
  const validated = mcpGraphConfigSchema.parse(parsed);
15
+ // Validate expression syntax (JSONata and JSON Logic)
16
+ const expressionErrors = validateConfigExpressions(validated);
17
+ if (expressionErrors.length > 0) {
18
+ const errorMessages = expressionErrors.map((e) => ` - Node "${e.nodeId}": ${e.message}`).join("\n");
19
+ const error = new Error(`Configuration validation failed - expression syntax errors:\n${errorMessages}`);
20
+ logger.error(error.message);
21
+ throw error;
22
+ }
14
23
  return validated;
15
24
  }
16
25
  catch (error) {
@@ -1 +1 @@
1
- {"version":3,"file":"parser.js","sourceRoot":"","sources":["../../src/config/parser.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,IAAI,EAAE,MAAM,SAAS,CAAC;AAC/B,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC;AAEnD,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAEtC,MAAM,UAAU,eAAe,CAAC,QAAgB;IAC9C,IAAI,CAAC;QACH,MAAM,YAAY,GAAG,YAAY,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;QACrD,MAAM,MAAM,GAAG,IAAI,CAAC,YAAY,CAAY,CAAC;QAE7C,0BAA0B;QAC1B,MAAM,SAAS,GAAG,oBAAoB,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;QAErD,OAAO,SAA2B,CAAC;IACrC,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAI,KAAK,YAAY,KAAK,EAAE,CAAC;YAC3B,MAAM,CAAC,KAAK,CAAC,gCAAgC,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;YAC9D,MAAM,KAAK,CAAC;QACd,CAAC;QACD,MAAM,IAAI,KAAK,CAAC,mCAAmC,CAAC,CAAC;IACvD,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"parser.js","sourceRoot":"","sources":["../../src/config/parser.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,IAAI,EAAE,MAAM,SAAS,CAAC;AAC/B,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC;AAEnD,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AACtC,OAAO,EAAE,yBAAyB,EAAE,MAAM,2BAA2B,CAAC;AAEtE,MAAM,UAAU,eAAe,CAAC,QAAgB;IAC9C,IAAI,CAAC;QACH,MAAM,YAAY,GAAG,YAAY,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;QACrD,MAAM,MAAM,GAAG,IAAI,CAAC,YAAY,CAAY,CAAC;QAE7C,0BAA0B;QAC1B,MAAM,SAAS,GAAG,oBAAoB,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;QAErD,sDAAsD;QACtD,MAAM,gBAAgB,GAAG,yBAAyB,CAAC,SAA2B,CAAC,CAAC;QAChF,IAAI,gBAAgB,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAChC,MAAM,aAAa,GAAG,gBAAgB,CAAC,GAAG,CACxC,CAAC,CAAC,EAAE,EAAE,CAAC,aAAa,CAAC,CAAC,MAAM,MAAM,CAAC,CAAC,OAAO,EAAE,CAC9C,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACb,MAAM,KAAK,GAAG,IAAI,KAAK,CACrB,gEAAgE,aAAa,EAAE,CAChF,CAAC;YACF,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;YAC5B,MAAM,KAAK,CAAC;QACd,CAAC;QAED,OAAO,SAA2B,CAAC;IACrC,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAI,KAAK,YAAY,KAAK,EAAE,CAAC;YAC3B,MAAM,CAAC,KAAK,CAAC,gCAAgC,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;YAC9D,MAAM,KAAK,CAAC;QACd,CAAC;QACD,MAAM,IAAI,KAAK,CAAC,mCAAmC,CAAC,CAAC;IACvD,CAAC;AACH,CAAC"}
@@ -66,6 +66,16 @@ export declare const mcpGraphConfigSchema: z.ZodObject<{
66
66
  headers?: Record<string, string> | undefined;
67
67
  requestInit?: Record<string, unknown> | undefined;
68
68
  }>]>>>;
69
+ executionLimits: z.ZodOptional<z.ZodObject<{
70
+ maxNodeExecutions: z.ZodOptional<z.ZodNumber>;
71
+ maxExecutionTimeMs: z.ZodOptional<z.ZodNumber>;
72
+ }, "strip", z.ZodTypeAny, {
73
+ maxNodeExecutions?: number | undefined;
74
+ maxExecutionTimeMs?: number | undefined;
75
+ }, {
76
+ maxNodeExecutions?: number | undefined;
77
+ maxExecutionTimeMs?: number | undefined;
78
+ }>>;
69
79
  tools: z.ZodArray<z.ZodObject<{
70
80
  name: z.ZodString;
71
81
  description: z.ZodString;
@@ -365,6 +375,10 @@ export declare const mcpGraphConfigSchema: z.ZodObject<{
365
375
  headers?: Record<string, string> | undefined;
366
376
  requestInit?: Record<string, unknown> | undefined;
367
377
  }> | undefined;
378
+ executionLimits?: {
379
+ maxNodeExecutions?: number | undefined;
380
+ maxExecutionTimeMs?: number | undefined;
381
+ } | undefined;
368
382
  }, {
369
383
  version: string;
370
384
  server: {
@@ -444,6 +458,10 @@ export declare const mcpGraphConfigSchema: z.ZodObject<{
444
458
  headers?: Record<string, string> | undefined;
445
459
  requestInit?: Record<string, unknown> | undefined;
446
460
  }> | undefined;
461
+ executionLimits?: {
462
+ maxNodeExecutions?: number | undefined;
463
+ maxExecutionTimeMs?: number | undefined;
464
+ } | undefined;
447
465
  }>;
448
466
  export type McpGraphConfigSchema = z.infer<typeof mcpGraphConfigSchema>;
449
467
  //# sourceMappingURL=schema.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../src/config/schema.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AA8GxB,eAAO,MAAM,oBAAoB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAM/B,CAAC;AAEH,MAAM,MAAM,oBAAoB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,oBAAoB,CAAC,CAAC"}
1
+ {"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../src/config/schema.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAmHxB,eAAO,MAAM,oBAAoB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAO/B,CAAC;AAEH,MAAM,MAAM,oBAAoB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,oBAAoB,CAAC,CAAC"}
@@ -94,10 +94,15 @@ const toolDefinitionSchema = z.object({
94
94
  inputSchema: jsonSchemaSchema,
95
95
  outputSchema: jsonSchemaSchema,
96
96
  });
97
+ const executionLimitsSchema = z.object({
98
+ maxNodeExecutions: z.number().int().positive().optional(),
99
+ maxExecutionTimeMs: z.number().int().positive().optional(),
100
+ });
97
101
  export const mcpGraphConfigSchema = z.object({
98
102
  version: z.string(),
99
103
  server: serverMetadataSchema,
100
104
  servers: z.record(serverConfigSchema).optional(),
105
+ executionLimits: executionLimitsSchema.optional(),
101
106
  tools: z.array(toolDefinitionSchema),
102
107
  nodes: z.array(nodeSchema),
103
108
  });
@@ -1 +1 @@
1
- {"version":3,"file":"schema.js","sourceRoot":"","sources":["../../src/config/schema.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"schema.js","sourceRoot":"","sources":["../../src/config/schema.ts"],"names":[],"mappings":"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"}
@@ -4,12 +4,36 @@
4
4
  import type { ExecutionContext as ExprContext } from "../expressions/context.js";
5
5
  import type { NodeExecutionRecord } from "../types/execution.js";
6
6
  export declare class ExecutionContext {
7
- private data;
8
7
  private history;
9
8
  constructor(toolInput: Record<string, unknown>);
9
+ /**
10
+ * Build context from history up to a specific index (for debugging) or entire history (for current execution)
11
+ * @param upToIndex - If provided, build context from history up to this index (exclusive). If not provided, use entire history.
12
+ * @returns Context object with node outputs (latest execution wins for each node)
13
+ */
14
+ private buildContextFromHistory;
15
+ /**
16
+ * Get the current execution context (built from entire history)
17
+ * Called once per node execution when the node starts
18
+ */
10
19
  getData(): ExprContext;
11
- setNodeOutput(nodeId: string, output: unknown): void;
12
- addHistory(nodeId: string, nodeType: string, input: unknown, output: unknown, startTime: number, endTime: number, error?: Error): void;
20
+ /**
21
+ * Get the context that was available to a specific execution (for debugging)
22
+ * @param executionIndex - The execution index to build context for
23
+ * @returns Context object that was available to that execution
24
+ */
25
+ getContextForExecution(executionIndex: number): ExprContext;
26
+ /**
27
+ * Get a specific execution record by index
28
+ */
29
+ getExecutionByIndex(executionIndex: number): NodeExecutionRecord | undefined;
30
+ /**
31
+ * Get the previous node execution record
32
+ * @param currentIndex - Current execution index
33
+ * @returns Previous execution record or null if this is the first execution
34
+ */
35
+ getPreviousNode(currentIndex: number): NodeExecutionRecord | null;
36
+ addHistory(nodeId: string, nodeType: string, output: unknown, startTime: number, endTime: number, error?: Error): void;
13
37
  getHistory(): NodeExecutionRecord[];
14
38
  }
15
39
  //# sourceMappingURL=context.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../../src/execution/context.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,gBAAgB,IAAI,WAAW,EAAE,MAAM,2BAA2B,CAAC;AACjF,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAEjE,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,IAAI,CAAc;IAC1B,OAAO,CAAC,OAAO,CAAwB;gBAE3B,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IAM9C,OAAO,IAAI,WAAW;IAItB,aAAa,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,GAAG,IAAI;IAKpD,UAAU,CACR,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,MAAM,EAChB,KAAK,EAAE,OAAO,EACd,MAAM,EAAE,OAAO,EACf,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,MAAM,EACf,KAAK,CAAC,EAAE,KAAK,GACZ,IAAI;IAaP,UAAU,IAAI,mBAAmB,EAAE;CAGpC"}
1
+ {"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../../src/execution/context.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,gBAAgB,IAAI,WAAW,EAAE,MAAM,2BAA2B,CAAC;AACjF,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAEjE,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,OAAO,CAAwB;gBAE3B,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IAK9C;;;;OAIG;IACH,OAAO,CAAC,uBAAuB;IAe/B;;;OAGG;IACH,OAAO,IAAI,WAAW;IAItB;;;;OAIG;IACH,sBAAsB,CAAC,cAAc,EAAE,MAAM,GAAG,WAAW;IAS3D;;OAEG;IACH,mBAAmB,CAAC,cAAc,EAAE,MAAM,GAAG,mBAAmB,GAAG,SAAS;IAI5E;;;;OAIG;IACH,eAAe,CAAC,YAAY,EAAE,MAAM,GAAG,mBAAmB,GAAG,IAAI;IAIjE,UAAU,CACR,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,OAAO,EACf,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,MAAM,EACf,KAAK,CAAC,EAAE,KAAK,GACZ,IAAI;IAcP,UAAU,IAAI,mBAAmB,EAAE;CAGpC"}
@@ -2,25 +2,68 @@
2
2
  * Execution context for graph execution
3
3
  */
4
4
  export class ExecutionContext {
5
- data;
6
5
  history;
7
6
  constructor(toolInput) {
8
- // Initialize empty context - tool input will be stored by entry node
9
- this.data = {};
7
+ // Initialize empty history - tool input will be stored by entry node
10
8
  this.history = [];
11
9
  }
10
+ /**
11
+ * Build context from history up to a specific index (for debugging) or entire history (for current execution)
12
+ * @param upToIndex - If provided, build context from history up to this index (exclusive). If not provided, use entire history.
13
+ * @returns Context object with node outputs (latest execution wins for each node)
14
+ */
15
+ buildContextFromHistory(upToIndex) {
16
+ const context = {};
17
+ const endIndex = upToIndex !== undefined ? upToIndex : this.history.length;
18
+ // Walk backwards through history up to endIndex, most recent execution of each node wins
19
+ for (let i = endIndex - 1; i >= 0; i--) {
20
+ const record = this.history[i];
21
+ if (!(record.nodeId in context)) {
22
+ context[record.nodeId] = record.output;
23
+ }
24
+ }
25
+ return context;
26
+ }
27
+ /**
28
+ * Get the current execution context (built from entire history)
29
+ * Called once per node execution when the node starts
30
+ */
12
31
  getData() {
13
- return this.data;
32
+ return this.buildContextFromHistory();
33
+ }
34
+ /**
35
+ * Get the context that was available to a specific execution (for debugging)
36
+ * @param executionIndex - The execution index to build context for
37
+ * @returns Context object that was available to that execution
38
+ */
39
+ getContextForExecution(executionIndex) {
40
+ if (executionIndex < 0 || executionIndex >= this.history.length) {
41
+ throw new Error(`Invalid execution index: ${executionIndex}`);
42
+ }
43
+ // Build context from history up to (but not including) this execution
44
+ // The context for execution N is built from executions 0 to N-1
45
+ return this.buildContextFromHistory(executionIndex);
46
+ }
47
+ /**
48
+ * Get a specific execution record by index
49
+ */
50
+ getExecutionByIndex(executionIndex) {
51
+ return this.history[executionIndex];
14
52
  }
15
- setNodeOutput(nodeId, output) {
16
- // Store output with node ID as key for reference
17
- this.data[nodeId] = output;
53
+ /**
54
+ * Get the previous node execution record
55
+ * @param currentIndex - Current execution index
56
+ * @returns Previous execution record or null if this is the first execution
57
+ */
58
+ getPreviousNode(currentIndex) {
59
+ return currentIndex > 0 ? this.history[currentIndex - 1] : null;
18
60
  }
19
- addHistory(nodeId, nodeType, input, output, startTime, endTime, error) {
61
+ addHistory(nodeId, nodeType, output, startTime, endTime, error) {
62
+ const executionIndex = this.history.length;
20
63
  this.history.push({
64
+ executionIndex,
21
65
  nodeId,
22
66
  nodeType,
23
- input,
24
67
  output,
25
68
  startTime,
26
69
  endTime,
@@ -1 +1 @@
1
- {"version":3,"file":"context.js","sourceRoot":"","sources":["../../src/execution/context.ts"],"names":[],"mappings":"AAAA;;GAEG;AAKH,MAAM,OAAO,gBAAgB;IACnB,IAAI,CAAc;IAClB,OAAO,CAAwB;IAEvC,YAAY,SAAkC;QAC5C,qEAAqE;QACrE,IAAI,CAAC,IAAI,GAAG,EAAE,CAAC;QACf,IAAI,CAAC,OAAO,GAAG,EAAE,CAAC;IACpB,CAAC;IAED,OAAO;QACL,OAAO,IAAI,CAAC,IAAI,CAAC;IACnB,CAAC;IAED,aAAa,CAAC,MAAc,EAAE,MAAe;QAC3C,iDAAiD;QACjD,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,MAAM,CAAC;IAC7B,CAAC;IAED,UAAU,CACR,MAAc,EACd,QAAgB,EAChB,KAAc,EACd,MAAe,EACf,SAAiB,EACjB,OAAe,EACf,KAAa;QAEb,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC;YAChB,MAAM;YACN,QAAQ;YACR,KAAK;YACL,MAAM;YACN,SAAS;YACT,OAAO;YACP,QAAQ,EAAE,OAAO,GAAG,SAAS;YAC7B,KAAK;SACN,CAAC,CAAC;IACL,CAAC;IAED,UAAU;QACR,OAAO,IAAI,CAAC,OAAO,CAAC;IACtB,CAAC;CACF"}
1
+ {"version":3,"file":"context.js","sourceRoot":"","sources":["../../src/execution/context.ts"],"names":[],"mappings":"AAAA;;GAEG;AAKH,MAAM,OAAO,gBAAgB;IACnB,OAAO,CAAwB;IAEvC,YAAY,SAAkC;QAC5C,qEAAqE;QACrE,IAAI,CAAC,OAAO,GAAG,EAAE,CAAC;IACpB,CAAC;IAED;;;;OAIG;IACK,uBAAuB,CAAC,SAAkB;QAChD,MAAM,OAAO,GAAgB,EAAE,CAAC;QAChC,MAAM,QAAQ,GAAG,SAAS,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC;QAE3E,yFAAyF;QACzF,KAAK,IAAI,CAAC,GAAG,QAAQ,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;YACvC,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;YAC/B,IAAI,CAAC,CAAC,MAAM,CAAC,MAAM,IAAI,OAAO,CAAC,EAAE,CAAC;gBAChC,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC;YACzC,CAAC;QACH,CAAC;QAED,OAAO,OAAO,CAAC;IACjB,CAAC;IAED;;;OAGG;IACH,OAAO;QACL,OAAO,IAAI,CAAC,uBAAuB,EAAE,CAAC;IACxC,CAAC;IAED;;;;OAIG;IACH,sBAAsB,CAAC,cAAsB;QAC3C,IAAI,cAAc,GAAG,CAAC,IAAI,cAAc,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC;YAChE,MAAM,IAAI,KAAK,CAAC,4BAA4B,cAAc,EAAE,CAAC,CAAC;QAChE,CAAC;QACD,sEAAsE;QACtE,gEAAgE;QAChE,OAAO,IAAI,CAAC,uBAAuB,CAAC,cAAc,CAAC,CAAC;IACtD,CAAC;IAED;;OAEG;IACH,mBAAmB,CAAC,cAAsB;QACxC,OAAO,IAAI,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC;IACtC,CAAC;IAED;;;;OAIG;IACH,eAAe,CAAC,YAAoB;QAClC,OAAO,YAAY,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,YAAY,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IAClE,CAAC;IAED,UAAU,CACR,MAAc,EACd,QAAgB,EAChB,MAAe,EACf,SAAiB,EACjB,OAAe,EACf,KAAa;QAEb,MAAM,cAAc,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC;QAC3C,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC;YAChB,cAAc;YACd,MAAM;YACN,QAAQ;YACR,MAAM;YACN,SAAS;YACT,OAAO;YACP,QAAQ,EAAE,OAAO,GAAG,SAAS;YAC7B,KAAK;SACN,CAAC,CAAC;IACL,CAAC;IAED,UAAU;QACR,OAAO,IAAI,CAAC,OAAO,CAAC;IACtB,CAAC;CACF"}
@@ -1 +1 @@
1
- {"version":3,"file":"executor.d.ts","sourceRoot":"","sources":["../../src/execution/executor.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAgD,MAAM,oBAAoB,CAAC;AACvG,OAAO,KAAK,EACV,gBAAgB,EAChB,eAAe,EAGf,mBAAmB,IAAI,oBAAoB,EAC5C,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAC;AAQ1C,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAGjE,qBAAa,aAAa;IACxB,OAAO,CAAC,MAAM,CAAiB;IAC/B,OAAO,CAAC,KAAK,CAAQ;IACrB,OAAO,CAAC,aAAa,CAAmB;IACxC,OAAO,CAAC,UAAU,CAAoC;gBAE1C,MAAM,EAAE,cAAc,EAAE,aAAa,EAAE,gBAAgB;IAMnE,aAAa,IAAI,oBAAoB,GAAG,IAAI;IAI5C,QAAQ,IAAI,KAAK;IAIjB,SAAS,IAAI,cAAc;IAI3B,OAAO,CAAC,eAAe;IAOjB,WAAW,CACf,QAAQ,EAAE,MAAM,EAChB,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAClC,OAAO,CAAC,EAAE,gBAAgB,GACzB,OAAO,CAAC,eAAe,CAAC;IAiT3B,OAAO,CAAC,cAAc;CAgCvB"}
1
+ {"version":3,"file":"executor.d.ts","sourceRoot":"","sources":["../../src/execution/executor.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAgD,MAAM,oBAAoB,CAAC;AACvG,OAAO,KAAK,EACV,gBAAgB,EAChB,eAAe,EAGf,mBAAmB,IAAI,oBAAoB,EAC5C,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAC;AAQ1C,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAGjE,qBAAa,aAAa;IACxB,OAAO,CAAC,MAAM,CAAiB;IAC/B,OAAO,CAAC,KAAK,CAAQ;IACrB,OAAO,CAAC,aAAa,CAAmB;IACxC,OAAO,CAAC,UAAU,CAAoC;gBAE1C,MAAM,EAAE,cAAc,EAAE,aAAa,EAAE,gBAAgB;IAMnE,aAAa,IAAI,oBAAoB,GAAG,IAAI;IAI5C,QAAQ,IAAI,KAAK;IAIjB,SAAS,IAAI,cAAc;IAI3B,OAAO,CAAC,eAAe;IAOjB,WAAW,CACf,QAAQ,EAAE,MAAM,EAChB,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAClC,OAAO,CAAC,EAAE,gBAAgB,GACzB,OAAO,CAAC,eAAe,CAAC;IA6U3B,OAAO,CAAC,cAAc;CAgCvB"}