@n8n/instance-ai 1.4.0 → 1.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (149) hide show
  1. package/dist/agent/instance-agent.js +0 -1
  2. package/dist/agent/instance-agent.js.map +1 -1
  3. package/dist/agent/sub-agent-debriefing.d.ts +2 -2
  4. package/dist/agent/system-prompt.js +36 -14
  5. package/dist/agent/system-prompt.js.map +1 -1
  6. package/dist/build.tsbuildinfo +1 -1
  7. package/dist/constants/model-settings.d.ts +3 -0
  8. package/dist/constants/model-settings.js +7 -0
  9. package/dist/constants/model-settings.js.map +1 -0
  10. package/dist/index.d.ts +4 -2
  11. package/dist/index.js +4 -1
  12. package/dist/index.js.map +1 -1
  13. package/dist/logger.d.ts +6 -0
  14. package/dist/planned-tasks/planned-task-permissions.d.ts +2 -0
  15. package/dist/planned-tasks/planned-task-permissions.js +8 -2
  16. package/dist/planned-tasks/planned-task-permissions.js.map +1 -1
  17. package/dist/planned-tasks/planned-task-service.d.ts +14 -1
  18. package/dist/planned-tasks/planned-task-service.js +138 -2
  19. package/dist/planned-tasks/planned-task-service.js.map +1 -1
  20. package/dist/runtime/background-task-manager.d.ts +25 -1
  21. package/dist/runtime/background-task-manager.js +66 -2
  22. package/dist/runtime/background-task-manager.js.map +1 -1
  23. package/dist/runtime/builder-sandbox-session-registry.d.ts +45 -0
  24. package/dist/runtime/builder-sandbox-session-registry.js +159 -0
  25. package/dist/runtime/builder-sandbox-session-registry.js.map +1 -0
  26. package/dist/runtime/run-state-registry.d.ts +7 -4
  27. package/dist/runtime/run-state-registry.js +9 -0
  28. package/dist/runtime/run-state-registry.js.map +1 -1
  29. package/dist/storage/planned-task-storage.js +2 -1
  30. package/dist/storage/planned-task-storage.js.map +1 -1
  31. package/dist/storage/workflow-loop-storage.d.ts +292 -12
  32. package/dist/stream/consume-with-hitl.d.ts +1 -0
  33. package/dist/stream/consume-with-hitl.js +1 -0
  34. package/dist/stream/consume-with-hitl.js.map +1 -1
  35. package/dist/tools/data-tables.tool.js +60 -22
  36. package/dist/tools/data-tables.tool.js.map +1 -1
  37. package/dist/tools/executions.tool.js +4 -1
  38. package/dist/tools/executions.tool.js.map +1 -1
  39. package/dist/tools/index.d.ts +1 -2
  40. package/dist/tools/index.js +2 -3
  41. package/dist/tools/index.js.map +1 -1
  42. package/dist/tools/orchestration/add-plan-item.tool.js +3 -1
  43. package/dist/tools/orchestration/add-plan-item.tool.js.map +1 -1
  44. package/dist/tools/orchestration/blueprint-accumulator.d.ts +4 -1
  45. package/dist/tools/orchestration/blueprint-accumulator.js +28 -0
  46. package/dist/tools/orchestration/blueprint-accumulator.js.map +1 -1
  47. package/dist/tools/orchestration/blueprint.schema.d.ts +60 -15
  48. package/dist/tools/orchestration/blueprint.schema.js +15 -1
  49. package/dist/tools/orchestration/blueprint.schema.js.map +1 -1
  50. package/dist/tools/orchestration/build-workflow-agent.prompt.js +41 -12
  51. package/dist/tools/orchestration/build-workflow-agent.prompt.js.map +1 -1
  52. package/dist/tools/orchestration/build-workflow-agent.tool.d.ts +51 -3
  53. package/dist/tools/orchestration/build-workflow-agent.tool.js +837 -272
  54. package/dist/tools/orchestration/build-workflow-agent.tool.js.map +1 -1
  55. package/dist/tools/orchestration/builder-memory-compaction.d.ts +38 -0
  56. package/dist/tools/orchestration/builder-memory-compaction.js +146 -0
  57. package/dist/tools/orchestration/builder-memory-compaction.js.map +1 -0
  58. package/dist/tools/orchestration/complete-checkpoint.tool.d.ts +2 -0
  59. package/dist/tools/orchestration/complete-checkpoint.tool.js +76 -0
  60. package/dist/tools/orchestration/complete-checkpoint.tool.js.map +1 -0
  61. package/dist/tools/orchestration/data-table-agent.tool.js +33 -17
  62. package/dist/tools/orchestration/data-table-agent.tool.js.map +1 -1
  63. package/dist/tools/orchestration/delegate.tool.js +32 -16
  64. package/dist/tools/orchestration/delegate.tool.js.map +1 -1
  65. package/dist/tools/orchestration/plan-agent-prompt.d.ts +1 -1
  66. package/dist/tools/orchestration/plan-agent-prompt.js +6 -0
  67. package/dist/tools/orchestration/plan-agent-prompt.js.map +1 -1
  68. package/dist/tools/orchestration/plan-with-agent.tool.d.ts +8 -0
  69. package/dist/tools/orchestration/plan-with-agent.tool.js +43 -12
  70. package/dist/tools/orchestration/plan-with-agent.tool.js.map +1 -1
  71. package/dist/tools/orchestration/plan.tool.js +17 -1
  72. package/dist/tools/orchestration/plan.tool.js.map +1 -1
  73. package/dist/tools/orchestration/report-verification-verdict.tool.d.ts +40 -2
  74. package/dist/tools/orchestration/report-verification-verdict.tool.js +85 -6
  75. package/dist/tools/orchestration/report-verification-verdict.tool.js.map +1 -1
  76. package/dist/tools/orchestration/research-with-agent.tool.js +32 -16
  77. package/dist/tools/orchestration/research-with-agent.tool.js.map +1 -1
  78. package/dist/tools/orchestration/verify-built-workflow.tool.d.ts +8 -2
  79. package/dist/tools/orchestration/verify-built-workflow.tool.js +476 -6
  80. package/dist/tools/orchestration/verify-built-workflow.tool.js.map +1 -1
  81. package/dist/tools/research.tool.js +2 -2
  82. package/dist/tools/research.tool.js.map +1 -1
  83. package/dist/tools/templates.tool.js +5 -90
  84. package/dist/tools/templates.tool.js.map +1 -1
  85. package/dist/tools/web-research/sanitize-web-content.d.ts +0 -1
  86. package/dist/tools/web-research/sanitize-web-content.js +0 -9
  87. package/dist/tools/web-research/sanitize-web-content.js.map +1 -1
  88. package/dist/tools/workflows/apply-workflow-credentials.tool.d.ts +2 -2
  89. package/dist/tools/workflows/build-workflow.tool.d.ts +2 -2
  90. package/dist/tools/workflows/build-workflow.tool.js +3 -1
  91. package/dist/tools/workflows/build-workflow.tool.js.map +1 -1
  92. package/dist/tools/workflows/materialize-node-type.tool.d.ts +8 -8
  93. package/dist/tools/workflows/submit-workflow-identity.d.ts +23 -1
  94. package/dist/tools/workflows/submit-workflow-identity.js +92 -5
  95. package/dist/tools/workflows/submit-workflow-identity.js.map +1 -1
  96. package/dist/tools/workflows/submit-workflow.tool.d.ts +48 -3
  97. package/dist/tools/workflows/submit-workflow.tool.js +81 -11
  98. package/dist/tools/workflows/submit-workflow.tool.js.map +1 -1
  99. package/dist/tracing/langsmith-tracing.js +8 -3
  100. package/dist/tracing/langsmith-tracing.js.map +1 -1
  101. package/dist/tracing/trace-replay.d.ts +3 -0
  102. package/dist/tracing/trace-replay.js +65 -0
  103. package/dist/tracing/trace-replay.js.map +1 -1
  104. package/dist/types.d.ts +79 -12
  105. package/dist/workflow-builder/parse-validate.d.ts +5 -1
  106. package/dist/workflow-builder/parse-validate.js +4 -3
  107. package/dist/workflow-builder/parse-validate.js.map +1 -1
  108. package/dist/workflow-loop/guidance.js +8 -2
  109. package/dist/workflow-loop/guidance.js.map +1 -1
  110. package/dist/workflow-loop/index.d.ts +3 -2
  111. package/dist/workflow-loop/index.js +9 -1
  112. package/dist/workflow-loop/index.js.map +1 -1
  113. package/dist/workflow-loop/remediation.d.ts +13 -0
  114. package/dist/workflow-loop/remediation.js +36 -0
  115. package/dist/workflow-loop/remediation.js.map +1 -0
  116. package/dist/workflow-loop/runtime.js +7 -0
  117. package/dist/workflow-loop/runtime.js.map +1 -1
  118. package/dist/workflow-loop/workflow-loop-controller.d.ts +1 -1
  119. package/dist/workflow-loop/workflow-loop-controller.js +196 -29
  120. package/dist/workflow-loop/workflow-loop-controller.js.map +1 -1
  121. package/dist/workflow-loop/workflow-loop-state.d.ts +338 -8
  122. package/dist/workflow-loop/workflow-loop-state.js +44 -1
  123. package/dist/workflow-loop/workflow-loop-state.js.map +1 -1
  124. package/dist/workflow-loop/workflow-task-service.d.ts +2 -1
  125. package/dist/workflow-loop/workflow-task-service.js +4 -0
  126. package/dist/workflow-loop/workflow-task-service.js.map +1 -1
  127. package/dist/workspace/builder-sandbox-factory.d.ts +3 -2
  128. package/dist/workspace/builder-sandbox-factory.js +74 -27
  129. package/dist/workspace/builder-sandbox-factory.js.map +1 -1
  130. package/dist/workspace/create-workspace.d.ts +2 -0
  131. package/dist/workspace/create-workspace.js.map +1 -1
  132. package/dist/workspace/sandbox-setup.js +36 -8
  133. package/dist/workspace/sandbox-setup.js.map +1 -1
  134. package/dist/workspace/snapshot-manager.d.ts +14 -2
  135. package/dist/workspace/snapshot-manager.js +57 -1
  136. package/dist/workspace/snapshot-manager.js.map +1 -1
  137. package/package.json +11 -5
  138. package/dist/tools/templates/template-api.d.ts +0 -21
  139. package/dist/tools/templates/template-api.js +0 -104
  140. package/dist/tools/templates/template-api.js.map +0 -1
  141. package/dist/tools/templates/types.d.ts +0 -52
  142. package/dist/tools/templates/types.js +0 -37
  143. package/dist/tools/templates/types.js.map +0 -1
  144. package/dist/tools/utils/mermaid.utils.d.ts +0 -15
  145. package/dist/tools/utils/mermaid.utils.js +0 -622
  146. package/dist/tools/utils/mermaid.utils.js.map +0 -1
  147. package/dist/tools/utils/node-configuration.utils.d.ts +0 -6
  148. package/dist/tools/utils/node-configuration.utils.js +0 -77
  149. package/dist/tools/utils/node-configuration.utils.js.map +0 -1
@@ -1,622 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.mermaidStringify = mermaidStringify;
4
- const DEFAULT_MERMAID_OPTIONS = {
5
- includeNodeType: true,
6
- includeNodeParameters: true,
7
- includeNodeName: true,
8
- includeNodeId: true,
9
- };
10
- const CONDITIONAL_NODE_TYPES = new Set([
11
- 'n8n-nodes-base.if',
12
- 'n8n-nodes-base.switch',
13
- 'n8n-nodes-base.filter',
14
- ]);
15
- const AGENT_NODE_TYPE = '@n8n/n8n-nodes-langchain.agent';
16
- const STICKY_NOTE_TYPE = 'n8n-nodes-base.stickyNote';
17
- const DEFAULT_NODE_WIDTH = 100;
18
- const DEFAULT_NODE_HEIGHT = 100;
19
- const DEFAULT_STICKY_WIDTH = 150;
20
- const DEFAULT_STICKY_HEIGHT = 80;
21
- class MermaidBuilder {
22
- nodes;
23
- connections;
24
- options;
25
- nodeIdMap;
26
- nodeByName;
27
- stickyOverlaps;
28
- agentSubgraphs;
29
- nodesInSubgraphs;
30
- definedNodes = new Set();
31
- lines = [];
32
- subgraphCounter = 0;
33
- constructor(nodes, connections, options) {
34
- const regularNodes = nodes.filter((n) => n.type !== STICKY_NOTE_TYPE);
35
- const stickyNotes = nodes.filter((n) => n.type === STICKY_NOTE_TYPE);
36
- this.nodes = regularNodes;
37
- this.connections = connections;
38
- this.options = options;
39
- this.nodeIdMap = this.createNodeIdMap();
40
- this.nodeByName = new Map(regularNodes.map((n) => [n.name, n]));
41
- this.stickyOverlaps = this.categorizeStickyOverlaps(stickyNotes);
42
- const nodesInStickySubgraphs = new Set();
43
- for (const { nodeNames } of this.stickyOverlaps.multiNodeOverlap) {
44
- for (const name of nodeNames) {
45
- nodesInStickySubgraphs.add(name);
46
- }
47
- }
48
- this.agentSubgraphs = this.findAgentSubgraphs(nodesInStickySubgraphs);
49
- this.nodesInSubgraphs = new Set(nodesInStickySubgraphs);
50
- for (const { agentNode, aiConnectedNodeNames } of this.agentSubgraphs) {
51
- this.nodesInSubgraphs.add(agentNode.name);
52
- for (const name of aiConnectedNodeNames) {
53
- this.nodesInSubgraphs.add(name);
54
- }
55
- }
56
- }
57
- build() {
58
- for (const sticky of this.stickyOverlaps.noOverlap) {
59
- this.lines.push(this.formatStickyComment(sticky.content));
60
- }
61
- this.buildMainFlow();
62
- this.buildStickySubgraphs();
63
- this.buildAgentSubgraphs();
64
- this.buildConnectionsToSubgraphs();
65
- this.buildConnectionsFromSubgraphs();
66
- this.buildInterSubgraphConnections();
67
- return ['```mermaid', 'flowchart TD', ...this.lines, '```'];
68
- }
69
- createNodeIdMap() {
70
- const map = new Map();
71
- this.nodes.forEach((node, idx) => {
72
- map.set(node.name, `n${idx + 1}`);
73
- });
74
- return map;
75
- }
76
- categorizeStickyOverlaps(stickyNotes) {
77
- const result = {
78
- noOverlap: [],
79
- singleNodeOverlap: new Map(),
80
- multiNodeOverlap: [],
81
- };
82
- for (const sticky of stickyNotes) {
83
- const bounds = this.extractStickyBounds(sticky);
84
- if (!bounds.content)
85
- continue;
86
- const overlappingNodes = this.nodes.filter((node) => this.isNodeWithinStickyBounds(node.position[0], node.position[1], bounds));
87
- if (overlappingNodes.length === 0) {
88
- result.noOverlap.push(bounds);
89
- }
90
- else if (overlappingNodes.length === 1) {
91
- result.singleNodeOverlap.set(overlappingNodes[0].name, bounds);
92
- }
93
- else {
94
- result.multiNodeOverlap.push({
95
- sticky: bounds,
96
- nodeNames: overlappingNodes.map((n) => n.name),
97
- });
98
- }
99
- }
100
- return result;
101
- }
102
- extractStickyBounds(node) {
103
- return {
104
- node,
105
- x: node.position[0],
106
- y: node.position[1],
107
- width: typeof node.parameters.width === 'number' ? node.parameters.width : DEFAULT_STICKY_WIDTH,
108
- height: typeof node.parameters.height === 'number' ? node.parameters.height : DEFAULT_STICKY_HEIGHT,
109
- content: typeof node.parameters.content === 'string' ? node.parameters.content.trim() : '',
110
- };
111
- }
112
- isNodeWithinStickyBounds(nodeX, nodeY, sticky) {
113
- const nodeCenterX = nodeX + DEFAULT_NODE_WIDTH / 2;
114
- const nodeCenterY = nodeY + DEFAULT_NODE_HEIGHT / 2;
115
- return (nodeCenterX >= sticky.x &&
116
- nodeCenterX <= sticky.x + sticky.width &&
117
- nodeCenterY >= sticky.y &&
118
- nodeCenterY <= sticky.y + sticky.height);
119
- }
120
- findAgentSubgraphs(nodesInStickySubgraphs) {
121
- const agentSubgraphs = [];
122
- const agentNodes = this.nodes.filter((n) => n.type === AGENT_NODE_TYPE && !nodesInStickySubgraphs.has(n.name));
123
- const reverseConnections = this.buildReverseConnectionMap();
124
- for (const agentNode of agentNodes) {
125
- const incomingConns = reverseConnections.get(agentNode.name) ?? [];
126
- const aiConnectedNodeNames = incomingConns
127
- .filter(({ connType, sourceName }) => connType !== 'main' && !nodesInStickySubgraphs.has(sourceName))
128
- .map(({ sourceName }) => sourceName);
129
- const nestedStickySubgraphs = this.findNestedStickySubgraphs(incomingConns);
130
- if (aiConnectedNodeNames.length > 0 || nestedStickySubgraphs.length > 0) {
131
- agentSubgraphs.push({ agentNode, aiConnectedNodeNames, nestedStickySubgraphs });
132
- }
133
- }
134
- return agentSubgraphs;
135
- }
136
- findNestedStickySubgraphs(incomingConns) {
137
- const nested = [];
138
- for (const stickySubgraph of this.stickyOverlaps.multiNodeOverlap) {
139
- const allNodesConnectToAgent = stickySubgraph.nodeNames.every((nodeName) => incomingConns.some(({ sourceName, connType }) => sourceName === nodeName && connType !== 'main'));
140
- if (allNodesConnectToAgent) {
141
- nested.push(stickySubgraph);
142
- }
143
- }
144
- return nested;
145
- }
146
- buildReverseConnectionMap() {
147
- const reverseConnections = new Map();
148
- for (const [sourceName, sourceConns] of Object.entries(this.connections)) {
149
- for (const { nodeName: targetName, connType } of this.getConnectionTargets(sourceConns)) {
150
- if (!reverseConnections.has(targetName)) {
151
- reverseConnections.set(targetName, []);
152
- }
153
- reverseConnections.get(targetName).push({ sourceName, connType });
154
- }
155
- }
156
- return reverseConnections;
157
- }
158
- getConnectionTargets(nodeConns) {
159
- const targets = [];
160
- for (const [connType, connList] of Object.entries(nodeConns)) {
161
- for (const connArray of connList) {
162
- if (!connArray)
163
- continue;
164
- for (const conn of connArray) {
165
- targets.push({ nodeName: conn.node, connType });
166
- }
167
- }
168
- }
169
- return targets;
170
- }
171
- getMainConnectionTargets(nodeConns) {
172
- if (!nodeConns.main)
173
- return [];
174
- return nodeConns.main
175
- .filter((connArray) => connArray !== null)
176
- .flatMap((connArray) => connArray.map((conn) => conn.node));
177
- }
178
- findStartNodes() {
179
- const nodesWithIncoming = new Set();
180
- Object.values(this.connections)
181
- .filter((conn) => conn.main)
182
- .forEach((sourceConnections) => {
183
- for (const connArray of sourceConnections.main) {
184
- if (!connArray)
185
- continue;
186
- for (const conn of connArray) {
187
- nodesWithIncoming.add(conn.node);
188
- }
189
- }
190
- });
191
- return this.nodes.filter((n) => !nodesWithIncoming.has(n.name));
192
- }
193
- formatStickyComment(content) {
194
- return `%% ${content.replace(/\n/g, ' ').replace(/\s+/g, ' ').trim()}`;
195
- }
196
- getNextSubgraphId() {
197
- this.subgraphCounter++;
198
- return `sg${this.subgraphCounter}`;
199
- }
200
- buildNodeDefinition(node, id) {
201
- const isConditional = CONDITIONAL_NODE_TYPES.has(node.type);
202
- if (this.options.includeNodeName) {
203
- const escapedName = node.name.replace(/"/g, "'");
204
- return isConditional ? `${id}{"${escapedName}"}` : `${id}["${escapedName}"]`;
205
- }
206
- return id;
207
- }
208
- buildNodeCommentLines(node) {
209
- const lines = [];
210
- if (this.options.includeNodeType ||
211
- this.options.includeNodeParameters ||
212
- this.options.includeNodeId) {
213
- const idPart = this.options.includeNodeId && node.id ? `[${node.id}] ` : '';
214
- const typePart = this.options.includeNodeType ? this.buildNodeTypePart(node) : '';
215
- const paramsPart = this.options.includeNodeParameters && Object.keys(node.parameters).length > 0
216
- ? ` | ${JSON.stringify(node.parameters)}`
217
- : '';
218
- if (idPart || typePart || paramsPart) {
219
- lines.push(`%% ${idPart}${typePart}${paramsPart}`);
220
- }
221
- }
222
- return lines;
223
- }
224
- buildNodeTypePart(node) {
225
- const parts = [node.type];
226
- if (typeof node.parameters.resource === 'string' && node.parameters.resource) {
227
- parts.push(node.parameters.resource);
228
- }
229
- if (typeof node.parameters.operation === 'string' && node.parameters.operation) {
230
- parts.push(node.parameters.operation);
231
- }
232
- return parts.join(':');
233
- }
234
- buildSingleNodeLines(node, id) {
235
- const lines = this.buildNodeCommentLines(node);
236
- lines.push(this.buildNodeDefinition(node, id));
237
- return lines;
238
- }
239
- defineNodeIfNeeded(nodeName) {
240
- const node = this.nodeByName.get(nodeName);
241
- const id = this.nodeIdMap.get(nodeName);
242
- if (!node || !id)
243
- return id ?? '';
244
- if (!this.definedNodes.has(nodeName)) {
245
- this.definedNodes.add(nodeName);
246
- const stickyForNode = this.stickyOverlaps.singleNodeOverlap.get(nodeName);
247
- if (stickyForNode) {
248
- this.lines.push(this.formatStickyComment(stickyForNode.content));
249
- }
250
- this.lines.push(...this.buildNodeCommentLines(node));
251
- return this.buildNodeDefinition(node, id);
252
- }
253
- return id;
254
- }
255
- defineTargetAndConnect(sourceId, targetName, connType) {
256
- const targetId = this.nodeIdMap.get(targetName);
257
- if (!targetId)
258
- return false;
259
- if (!this.definedNodes.has(targetName)) {
260
- const targetNode = this.nodeByName.get(targetName);
261
- if (targetNode) {
262
- const stickyForNode = this.stickyOverlaps.singleNodeOverlap.get(targetName);
263
- if (stickyForNode) {
264
- this.lines.push(this.formatStickyComment(stickyForNode.content));
265
- }
266
- this.lines.push(...this.buildNodeCommentLines(targetNode));
267
- this.addConnection(sourceId, this.buildNodeDefinition(targetNode, targetId), connType);
268
- this.definedNodes.add(targetName);
269
- return connType === 'main';
270
- }
271
- }
272
- else {
273
- this.addConnection(sourceId, targetId, connType);
274
- }
275
- return false;
276
- }
277
- addConnection(sourceId, targetDef, connType) {
278
- const arrow = connType === 'main' ? '-->' : `-.${connType}.->`;
279
- this.lines.push(`${sourceId} ${arrow} ${targetDef}`);
280
- }
281
- buildMainFlow() {
282
- const visited = new Set();
283
- const startNodes = this.findStartNodes();
284
- const traverse = (nodeName) => {
285
- if (visited.has(nodeName))
286
- return;
287
- visited.add(nodeName);
288
- const nodeConns = this.connections[nodeName];
289
- const targets = nodeConns ? this.getConnectionTargets(nodeConns) : [];
290
- for (const { nodeName: targetName, connType } of targets) {
291
- if (this.nodesInSubgraphs.has(targetName) || this.nodesInSubgraphs.has(nodeName))
292
- continue;
293
- const sourceId = this.nodeIdMap.get(nodeName);
294
- const targetDef = this.defineNodeIfNeeded(targetName);
295
- if (sourceId) {
296
- this.addConnection(sourceId, targetDef, connType);
297
- }
298
- }
299
- if (nodeConns) {
300
- this.getMainConnectionTargets(nodeConns)
301
- .filter((target) => !this.nodesInSubgraphs.has(target))
302
- .forEach((target) => traverse(target));
303
- }
304
- };
305
- for (const startNode of startNodes) {
306
- if (this.nodesInSubgraphs.has(startNode.name))
307
- continue;
308
- const id = this.nodeIdMap.get(startNode.name);
309
- if (id && !this.definedNodes.has(startNode.name)) {
310
- const stickyForNode = this.stickyOverlaps.singleNodeOverlap.get(startNode.name);
311
- if (stickyForNode) {
312
- this.lines.push(this.formatStickyComment(stickyForNode.content));
313
- }
314
- this.lines.push(...this.buildSingleNodeLines(startNode, id));
315
- this.definedNodes.add(startNode.name);
316
- }
317
- traverse(startNode.name);
318
- }
319
- }
320
- buildStickySubgraphs() {
321
- const nestedStickyIds = this.getNestedStickyIds();
322
- for (const { sticky, nodeNames } of this.stickyOverlaps.multiNodeOverlap) {
323
- if (nestedStickyIds.has(sticky.node.id ?? ''))
324
- continue;
325
- this.buildSingleStickySubgraph(sticky, nodeNames);
326
- }
327
- }
328
- getNestedStickyIds() {
329
- const ids = new Set();
330
- for (const { nestedStickySubgraphs } of this.agentSubgraphs) {
331
- for (const { sticky } of nestedStickySubgraphs) {
332
- ids.add(sticky.node.id ?? '');
333
- }
334
- }
335
- return ids;
336
- }
337
- buildSingleStickySubgraph(sticky, nodeNames) {
338
- const subgraphId = this.getNextSubgraphId();
339
- const subgraphLabel = sticky.content.replace(/\n/g, ' ').replace(/\s+/g, ' ').trim();
340
- this.lines.push(this.formatStickyComment(sticky.content));
341
- this.lines.push(`subgraph ${subgraphId}["${subgraphLabel.replace(/"/g, "'")}"]`);
342
- const subgraphNodeSet = new Set(nodeNames);
343
- const subgraphDefinedNodes = new Set();
344
- const startNodes = this.findSubgraphStartNodes(nodeNames, subgraphNodeSet);
345
- for (const startNode of startNodes) {
346
- const id = this.nodeIdMap.get(startNode.name);
347
- if (id && !subgraphDefinedNodes.has(startNode.name)) {
348
- this.lines.push(...this.buildSingleNodeLines(startNode, id));
349
- subgraphDefinedNodes.add(startNode.name);
350
- }
351
- }
352
- this.buildSubgraphInternalConnections(startNodes, subgraphNodeSet, subgraphDefinedNodes);
353
- for (const name of nodeNames) {
354
- this.definedNodes.add(name);
355
- }
356
- this.lines.push('end');
357
- }
358
- findSubgraphStartNodes(nodeNames, subgraphNodeSet) {
359
- const nodesWithInternalIncoming = new Set();
360
- for (const nodeName of nodeNames) {
361
- const nodeConns = this.connections[nodeName];
362
- if (!nodeConns)
363
- continue;
364
- for (const { nodeName: targetName } of this.getConnectionTargets(nodeConns)) {
365
- if (subgraphNodeSet.has(targetName)) {
366
- nodesWithInternalIncoming.add(targetName);
367
- }
368
- }
369
- }
370
- return nodeNames
371
- .filter((name) => !nodesWithInternalIncoming.has(name))
372
- .map((name) => this.nodeByName.get(name))
373
- .filter((node) => node !== undefined);
374
- }
375
- buildSubgraphInternalConnections(startNodes, subgraphNodeSet, subgraphDefinedNodes) {
376
- const visited = new Set();
377
- const traverse = (nodeName) => {
378
- if (visited.has(nodeName))
379
- return;
380
- visited.add(nodeName);
381
- const nodeConns = this.connections[nodeName];
382
- if (!nodeConns)
383
- return;
384
- const sourceId = this.nodeIdMap.get(nodeName);
385
- if (!sourceId)
386
- return;
387
- for (const { nodeName: targetName, connType } of this.getConnectionTargets(nodeConns)) {
388
- if (!subgraphNodeSet.has(targetName))
389
- continue;
390
- const targetId = this.nodeIdMap.get(targetName);
391
- const targetNode = this.nodeByName.get(targetName);
392
- if (!targetId || !targetNode)
393
- continue;
394
- const arrow = connType === 'main' ? '-->' : `-.${connType}.->`;
395
- if (!subgraphDefinedNodes.has(targetName)) {
396
- this.lines.push(...this.buildNodeCommentLines(targetNode));
397
- this.lines.push(`${sourceId} ${arrow} ${this.buildNodeDefinition(targetNode, targetId)}`);
398
- subgraphDefinedNodes.add(targetName);
399
- }
400
- else {
401
- this.lines.push(`${sourceId} ${arrow} ${targetId}`);
402
- }
403
- }
404
- this.getMainConnectionTargets(nodeConns)
405
- .filter((t) => subgraphNodeSet.has(t))
406
- .forEach((t) => traverse(t));
407
- };
408
- startNodes.forEach((n) => traverse(n.name));
409
- }
410
- buildAgentSubgraphs() {
411
- for (const agentSubgraph of this.agentSubgraphs) {
412
- this.buildSingleAgentSubgraph(agentSubgraph);
413
- }
414
- }
415
- buildSingleAgentSubgraph(agentSubgraph) {
416
- const { agentNode, aiConnectedNodeNames, nestedStickySubgraphs } = agentSubgraph;
417
- const agentId = this.nodeIdMap.get(agentNode.name);
418
- if (!agentId)
419
- return;
420
- const subgraphId = this.getNextSubgraphId();
421
- this.lines.push(`subgraph ${subgraphId}["${agentNode.name.replace(/"/g, "'")}"]`);
422
- for (const nodeName of aiConnectedNodeNames) {
423
- this.defineAgentConnectedNode(nodeName);
424
- }
425
- for (const { sticky, nodeNames } of nestedStickySubgraphs) {
426
- this.buildNestedStickySubgraph(sticky, nodeNames);
427
- }
428
- this.buildAgentNodeConnections(agentNode, agentId, aiConnectedNodeNames, nestedStickySubgraphs);
429
- this.markAgentSubgraphNodesDefined(agentNode, aiConnectedNodeNames, nestedStickySubgraphs);
430
- this.lines.push('end');
431
- }
432
- defineAgentConnectedNode(nodeName) {
433
- const node = this.nodeByName.get(nodeName);
434
- const id = this.nodeIdMap.get(nodeName);
435
- if (!node || !id)
436
- return;
437
- const stickyForNode = this.stickyOverlaps.singleNodeOverlap.get(nodeName);
438
- if (stickyForNode) {
439
- this.lines.push(this.formatStickyComment(stickyForNode.content));
440
- }
441
- this.lines.push(...this.buildSingleNodeLines(node, id));
442
- }
443
- buildNestedStickySubgraph(sticky, nodeNames) {
444
- const nestedSubgraphId = this.getNextSubgraphId();
445
- const label = sticky.content.replace(/\n/g, ' ').replace(/\s+/g, ' ').trim();
446
- this.lines.push(this.formatStickyComment(sticky.content));
447
- this.lines.push(`subgraph ${nestedSubgraphId}["${label.replace(/"/g, "'")}"]`);
448
- for (const nodeName of nodeNames) {
449
- const node = this.nodeByName.get(nodeName);
450
- const id = this.nodeIdMap.get(nodeName);
451
- if (node && id) {
452
- this.lines.push(...this.buildSingleNodeLines(node, id));
453
- }
454
- }
455
- this.lines.push('end');
456
- }
457
- buildAgentNodeConnections(agentNode, agentId, aiConnectedNodeNames, nestedStickySubgraphs) {
458
- const stickyForAgent = this.stickyOverlaps.singleNodeOverlap.get(agentNode.name);
459
- if (stickyForAgent) {
460
- this.lines.push(this.formatStickyComment(stickyForAgent.content));
461
- }
462
- this.lines.push(...this.buildNodeCommentLines(agentNode));
463
- const allAiNodeNames = [
464
- ...aiConnectedNodeNames,
465
- ...nestedStickySubgraphs.flatMap(({ nodeNames }) => nodeNames),
466
- ];
467
- let agentDefined = false;
468
- for (const nodeName of allAiNodeNames) {
469
- const sourceId = this.nodeIdMap.get(nodeName);
470
- const nodeConns = this.connections[nodeName];
471
- if (!sourceId || !nodeConns)
472
- continue;
473
- for (const { nodeName: targetName, connType } of this.getConnectionTargets(nodeConns)) {
474
- if (targetName !== agentNode.name || connType === 'main')
475
- continue;
476
- const arrow = `-.${connType}.->`;
477
- if (!agentDefined) {
478
- this.lines.push(`${sourceId} ${arrow} ${this.buildNodeDefinition(agentNode, agentId)}`);
479
- agentDefined = true;
480
- }
481
- else {
482
- this.lines.push(`${sourceId} ${arrow} ${agentId}`);
483
- }
484
- }
485
- }
486
- if (!agentDefined) {
487
- this.lines.push(this.buildNodeDefinition(agentNode, agentId));
488
- }
489
- }
490
- markAgentSubgraphNodesDefined(agentNode, aiConnectedNodeNames, nestedStickySubgraphs) {
491
- for (const name of aiConnectedNodeNames) {
492
- this.definedNodes.add(name);
493
- }
494
- for (const { nodeNames } of nestedStickySubgraphs) {
495
- for (const name of nodeNames) {
496
- this.definedNodes.add(name);
497
- }
498
- }
499
- this.definedNodes.add(agentNode.name);
500
- }
501
- buildConnectionsToSubgraphs() {
502
- for (const nodeName of this.definedNodes) {
503
- if (this.nodesInSubgraphs.has(nodeName))
504
- continue;
505
- const nodeConns = this.connections[nodeName];
506
- if (!nodeConns)
507
- continue;
508
- for (const { nodeName: targetName, connType } of this.getConnectionTargets(nodeConns)) {
509
- if (this.nodesInSubgraphs.has(targetName)) {
510
- const sourceId = this.nodeIdMap.get(nodeName);
511
- const targetId = this.nodeIdMap.get(targetName);
512
- if (sourceId && targetId) {
513
- this.addConnection(sourceId, targetId, connType);
514
- }
515
- }
516
- }
517
- }
518
- }
519
- buildConnectionsFromSubgraphs() {
520
- const nodesToProcess = [];
521
- for (const nodeName of this.nodesInSubgraphs) {
522
- const nodeConns = this.connections[nodeName];
523
- if (!nodeConns)
524
- continue;
525
- const sourceId = this.nodeIdMap.get(nodeName);
526
- if (!sourceId)
527
- continue;
528
- for (const { nodeName: targetName, connType } of this.getConnectionTargets(nodeConns)) {
529
- if (this.nodesInSubgraphs.has(targetName))
530
- continue;
531
- const wasNewMainConnection = this.defineTargetAndConnect(sourceId, targetName, connType);
532
- if (wasNewMainConnection) {
533
- nodesToProcess.push(targetName);
534
- }
535
- }
536
- }
537
- this.continueTraversalFromNodes(nodesToProcess);
538
- }
539
- continueTraversalFromNodes(nodesToProcess) {
540
- const visited = new Set();
541
- const traverse = (nodeName) => {
542
- if (visited.has(nodeName) || this.nodesInSubgraphs.has(nodeName))
543
- return;
544
- visited.add(nodeName);
545
- const nodeConns = this.connections[nodeName];
546
- if (!nodeConns)
547
- return;
548
- const sourceId = this.nodeIdMap.get(nodeName);
549
- if (!sourceId)
550
- return;
551
- for (const { nodeName: targetName, connType } of this.getConnectionTargets(nodeConns)) {
552
- if (this.nodesInSubgraphs.has(targetName)) {
553
- const targetId = this.nodeIdMap.get(targetName);
554
- if (targetId) {
555
- this.addConnection(sourceId, targetId, connType);
556
- }
557
- continue;
558
- }
559
- this.defineTargetAndConnect(sourceId, targetName, connType);
560
- }
561
- this.getMainConnectionTargets(nodeConns)
562
- .filter((t) => !this.nodesInSubgraphs.has(t))
563
- .forEach((t) => traverse(t));
564
- };
565
- nodesToProcess.forEach((n) => traverse(n));
566
- }
567
- buildInterSubgraphConnections() {
568
- const nestedStickyIds = this.getNestedStickyIds();
569
- const outputConnections = new Set();
570
- for (const nodeName of this.nodesInSubgraphs) {
571
- const nodeConns = this.connections[nodeName];
572
- if (!nodeConns)
573
- continue;
574
- for (const { nodeName: targetName, connType } of this.getConnectionTargets(nodeConns)) {
575
- if (!this.nodesInSubgraphs.has(targetName))
576
- continue;
577
- if (this.isInNestedSticky(nodeName, nestedStickyIds))
578
- continue;
579
- if (this.isInNestedSticky(targetName, nestedStickyIds))
580
- continue;
581
- const sourceSubgraphId = this.getSubgraphId(nodeName, nestedStickyIds);
582
- const targetSubgraphId = this.getSubgraphId(targetName, nestedStickyIds);
583
- if (sourceSubgraphId === targetSubgraphId)
584
- continue;
585
- const sourceId = this.nodeIdMap.get(nodeName);
586
- const targetId = this.nodeIdMap.get(targetName);
587
- if (!sourceId || !targetId)
588
- continue;
589
- const connKey = `${sourceId}-${connType}-${targetId}`;
590
- if (outputConnections.has(connKey))
591
- continue;
592
- outputConnections.add(connKey);
593
- this.addConnection(sourceId, targetId, connType);
594
- }
595
- }
596
- }
597
- isInNestedSticky(nodeName, nestedStickyIds) {
598
- return this.stickyOverlaps.multiNodeOverlap.some(({ sticky, nodeNames }) => nodeNames.includes(nodeName) && nestedStickyIds.has(sticky.node.id ?? ''));
599
- }
600
- getSubgraphId(nodeName, nestedStickyIds) {
601
- const stickySubgraph = this.stickyOverlaps.multiNodeOverlap.find(({ sticky, nodeNames }) => nodeNames.includes(nodeName) && !nestedStickyIds.has(sticky.node.id ?? ''));
602
- if (stickySubgraph) {
603
- return `sticky:${stickySubgraph.sticky.node.id}`;
604
- }
605
- const agentSubgraph = this.agentSubgraphs.find(({ agentNode, aiConnectedNodeNames }) => agentNode.name === nodeName || aiConnectedNodeNames.includes(nodeName));
606
- if (agentSubgraph) {
607
- return `agent:${agentSubgraph.agentNode.id}`;
608
- }
609
- return 'none';
610
- }
611
- }
612
- function mermaidStringify(input, options) {
613
- const { workflow: wf } = input;
614
- const mergedOptions = {
615
- ...DEFAULT_MERMAID_OPTIONS,
616
- ...options,
617
- };
618
- const builder = new MermaidBuilder(wf.nodes, wf.connections, mergedOptions);
619
- const lines = builder.build();
620
- return lines.join('\n');
621
- }
622
- //# sourceMappingURL=mermaid.utils.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"mermaid.utils.js","sourceRoot":"","sources":["../../../src/tools/utils/mermaid.utils.ts"],"names":[],"mappings":"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"}