@n8n/ai-workflow-builder 0.12.1 → 0.14.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 (191) hide show
  1. package/dist/ai-workflow-builder-agent.service.d.ts +28 -0
  2. package/dist/ai-workflow-builder-agent.service.js +160 -0
  3. package/dist/ai-workflow-builder-agent.service.js.map +1 -0
  4. package/dist/build.tsbuildinfo +1 -1
  5. package/dist/chains/conversation-compact.d.ts +8 -0
  6. package/dist/chains/conversation-compact.js +56 -0
  7. package/dist/chains/conversation-compact.js.map +1 -0
  8. package/dist/chains/parameter-updater.d.ts +16 -0
  9. package/dist/chains/parameter-updater.js +94 -0
  10. package/dist/chains/parameter-updater.js.map +1 -0
  11. package/dist/chains/planner.js +2 -2
  12. package/dist/chains/planner.js.map +1 -1
  13. package/dist/chains/prompts/base/common-patterns.d.ts +1 -0
  14. package/dist/chains/prompts/base/common-patterns.js +13 -0
  15. package/dist/chains/prompts/base/common-patterns.js.map +1 -0
  16. package/dist/chains/prompts/base/core-instructions.d.ts +1 -0
  17. package/dist/chains/prompts/base/core-instructions.js +28 -0
  18. package/dist/chains/prompts/base/core-instructions.js.map +1 -0
  19. package/dist/chains/prompts/base/expression-rules.d.ts +1 -0
  20. package/dist/chains/prompts/base/expression-rules.js +15 -0
  21. package/dist/chains/prompts/base/expression-rules.js.map +1 -0
  22. package/dist/chains/prompts/base/output-format.d.ts +1 -0
  23. package/dist/chains/prompts/base/output-format.js +7 -0
  24. package/dist/chains/prompts/base/output-format.js.map +1 -0
  25. package/dist/chains/prompts/examples/advanced/resource-locator-examples.d.ts +1 -0
  26. package/dist/chains/prompts/examples/advanced/resource-locator-examples.js +79 -0
  27. package/dist/chains/prompts/examples/advanced/resource-locator-examples.js.map +1 -0
  28. package/dist/chains/prompts/examples/advanced/tool-node-examples.d.ts +1 -0
  29. package/dist/chains/prompts/examples/advanced/tool-node-examples.js +71 -0
  30. package/dist/chains/prompts/examples/advanced/tool-node-examples.js.map +1 -0
  31. package/dist/chains/prompts/examples/basic/if-node-examples.d.ts +1 -0
  32. package/dist/chains/prompts/examples/basic/if-node-examples.js +138 -0
  33. package/dist/chains/prompts/examples/basic/if-node-examples.js.map +1 -0
  34. package/dist/chains/prompts/examples/basic/set-node-examples.d.ts +1 -0
  35. package/dist/chains/prompts/examples/basic/set-node-examples.js +148 -0
  36. package/dist/chains/prompts/examples/basic/set-node-examples.js.map +1 -0
  37. package/dist/chains/prompts/examples/basic/simple-updates.d.ts +1 -0
  38. package/dist/chains/prompts/examples/basic/simple-updates.js +51 -0
  39. package/dist/chains/prompts/examples/basic/simple-updates.js.map +1 -0
  40. package/dist/chains/prompts/node-types/http-request.d.ts +1 -0
  41. package/dist/chains/prompts/node-types/http-request.js +113 -0
  42. package/dist/chains/prompts/node-types/http-request.js.map +1 -0
  43. package/dist/chains/prompts/node-types/if-node.d.ts +1 -0
  44. package/dist/chains/prompts/node-types/if-node.js +158 -0
  45. package/dist/chains/prompts/node-types/if-node.js.map +1 -0
  46. package/dist/chains/prompts/node-types/set-node.d.ts +1 -0
  47. package/dist/chains/prompts/node-types/set-node.js +91 -0
  48. package/dist/chains/prompts/node-types/set-node.js.map +1 -0
  49. package/dist/chains/prompts/node-types/tool-nodes.d.ts +1 -0
  50. package/dist/chains/prompts/node-types/tool-nodes.js +73 -0
  51. package/dist/chains/prompts/node-types/tool-nodes.js.map +1 -0
  52. package/dist/chains/prompts/parameter-types/resource-locator.d.ts +1 -0
  53. package/dist/chains/prompts/parameter-types/resource-locator.js +95 -0
  54. package/dist/chains/prompts/parameter-types/resource-locator.js.map +1 -0
  55. package/dist/chains/prompts/parameter-types/text-fields.d.ts +1 -0
  56. package/dist/chains/prompts/parameter-types/text-fields.js +22 -0
  57. package/dist/chains/prompts/parameter-types/text-fields.js.map +1 -0
  58. package/dist/chains/prompts/prompt-builder.d.ts +14 -0
  59. package/dist/chains/prompts/prompt-builder.js +118 -0
  60. package/dist/chains/prompts/prompt-builder.js.map +1 -0
  61. package/dist/chains/prompts/prompt-config.d.ts +5 -0
  62. package/dist/chains/prompts/prompt-config.js +52 -0
  63. package/dist/chains/prompts/prompt-config.js.map +1 -0
  64. package/dist/errors/index.d.ts +45 -0
  65. package/dist/errors/index.js +122 -0
  66. package/dist/errors/index.js.map +1 -0
  67. package/dist/index.d.ts +1 -2
  68. package/dist/index.js +1 -2
  69. package/dist/index.js.map +1 -1
  70. package/dist/llm-config.d.ts +6 -5
  71. package/dist/llm-config.js +19 -4
  72. package/dist/llm-config.js.map +1 -1
  73. package/dist/tools/add-node.tool.d.ts +56 -0
  74. package/dist/tools/add-node.tool.js +136 -0
  75. package/dist/tools/add-node.tool.js.map +1 -0
  76. package/dist/tools/connect-nodes.tool.d.ts +45 -0
  77. package/dist/tools/connect-nodes.tool.js +223 -0
  78. package/dist/tools/connect-nodes.tool.js.map +1 -0
  79. package/dist/tools/engines/node-search-engine.d.ts +25 -0
  80. package/dist/tools/engines/node-search-engine.js +121 -0
  81. package/dist/tools/engines/node-search-engine.js.map +1 -0
  82. package/dist/tools/helpers/index.d.ts +4 -0
  83. package/dist/tools/helpers/index.js +21 -0
  84. package/dist/tools/helpers/index.js.map +1 -0
  85. package/dist/tools/helpers/progress.d.ts +9 -0
  86. package/dist/tools/helpers/progress.js +114 -0
  87. package/dist/tools/helpers/progress.js.map +1 -0
  88. package/dist/tools/helpers/response.d.ts +7 -0
  89. package/dist/tools/helpers/response.js +31 -0
  90. package/dist/tools/helpers/response.js.map +1 -0
  91. package/dist/tools/helpers/state.d.ts +13 -0
  92. package/dist/tools/helpers/state.js +70 -0
  93. package/dist/tools/helpers/state.js.map +1 -0
  94. package/dist/tools/helpers/validation.d.ts +12 -0
  95. package/dist/tools/helpers/validation.js +69 -0
  96. package/dist/tools/helpers/validation.js.map +1 -0
  97. package/dist/tools/node-details.tool.d.ts +19 -0
  98. package/dist/tools/node-details.tool.js +133 -0
  99. package/dist/tools/node-details.tool.js.map +1 -0
  100. package/dist/tools/node-search.tool.d.ts +49 -0
  101. package/dist/tools/node-search.tool.js +146 -0
  102. package/dist/tools/node-search.tool.js.map +1 -0
  103. package/dist/tools/prompts/main-agent.prompt.d.ts +2 -0
  104. package/dist/tools/prompts/main-agent.prompt.js +390 -0
  105. package/dist/tools/prompts/main-agent.prompt.js.map +1 -0
  106. package/dist/tools/remove-node.tool.d.ts +13 -0
  107. package/dist/tools/remove-node.tool.js +97 -0
  108. package/dist/tools/remove-node.tool.js.map +1 -0
  109. package/dist/tools/update-node-parameters.tool.d.ts +19 -0
  110. package/dist/tools/update-node-parameters.tool.js +131 -0
  111. package/dist/tools/update-node-parameters.tool.js.map +1 -0
  112. package/dist/tools/utils/connection-parameters.utils.d.ts +8 -0
  113. package/dist/tools/utils/connection-parameters.utils.js +47 -0
  114. package/dist/tools/utils/connection-parameters.utils.js.map +1 -0
  115. package/dist/tools/utils/connection.utils.d.ts +15 -0
  116. package/dist/tools/utils/connection.utils.js +321 -0
  117. package/dist/tools/utils/connection.utils.js.map +1 -0
  118. package/dist/tools/utils/node-creation.utils.d.ts +8 -0
  119. package/dist/tools/utils/node-creation.utils.js +52 -0
  120. package/dist/tools/utils/node-creation.utils.js.map +1 -0
  121. package/dist/tools/utils/node-positioning.utils.d.ts +17 -0
  122. package/dist/tools/utils/node-positioning.utils.js +87 -0
  123. package/dist/tools/utils/node-positioning.utils.js.map +1 -0
  124. package/dist/tools/utils/parameter-update.utils.d.ts +6 -0
  125. package/dist/tools/utils/parameter-update.utils.js +75 -0
  126. package/dist/tools/utils/parameter-update.utils.js.map +1 -0
  127. package/dist/types/config.d.ts +53 -0
  128. package/dist/{interfaces.js → types/config.js} +1 -1
  129. package/dist/types/config.js.map +1 -0
  130. package/dist/types/connections.d.ts +30 -0
  131. package/dist/types/connections.js +3 -0
  132. package/dist/types/connections.js.map +1 -0
  133. package/dist/types/index.d.ts +8 -0
  134. package/dist/types/index.js +25 -0
  135. package/dist/types/index.js.map +1 -0
  136. package/dist/types/messages.d.ts +38 -0
  137. package/dist/types/messages.js +3 -0
  138. package/dist/types/messages.js.map +1 -0
  139. package/dist/types/nodes.d.ts +26 -0
  140. package/dist/{types.js → types/nodes.js} +1 -1
  141. package/dist/types/nodes.js.map +1 -0
  142. package/dist/types/streaming.d.ts +33 -0
  143. package/dist/types/streaming.js +3 -0
  144. package/dist/types/streaming.js.map +1 -0
  145. package/dist/types/tools.d.ts +76 -0
  146. package/dist/types/tools.js +3 -0
  147. package/dist/types/tools.js.map +1 -0
  148. package/dist/types/utils.d.ts +2 -0
  149. package/dist/types/utils.js +3 -0
  150. package/dist/types/utils.js.map +1 -0
  151. package/dist/types/workflow.d.ts +21 -0
  152. package/dist/types/workflow.js +3 -0
  153. package/dist/types/workflow.js.map +1 -0
  154. package/dist/utils/node-helpers.d.ts +2 -0
  155. package/dist/utils/node-helpers.js +54 -0
  156. package/dist/utils/node-helpers.js.map +1 -0
  157. package/dist/utils/operations-processor.d.ts +10 -0
  158. package/dist/utils/operations-processor.js +114 -0
  159. package/dist/utils/operations-processor.js.map +1 -0
  160. package/dist/utils/stream-processor.d.ts +6 -0
  161. package/dist/utils/stream-processor.js +153 -0
  162. package/dist/utils/stream-processor.js.map +1 -0
  163. package/dist/utils/tool-executor.d.ts +3 -0
  164. package/dist/utils/tool-executor.js +86 -0
  165. package/dist/utils/tool-executor.js.map +1 -0
  166. package/dist/workflow-builder-agent.d.ts +41 -0
  167. package/dist/workflow-builder-agent.js +205 -0
  168. package/dist/workflow-builder-agent.js.map +1 -0
  169. package/dist/workflow-state.d.ts +12 -7
  170. package/dist/workflow-state.js +26 -7
  171. package/dist/workflow-state.js.map +1 -1
  172. package/package.json +26 -7
  173. package/dist/ai-workflow-builder.service.d.ts +0 -25
  174. package/dist/ai-workflow-builder.service.js +0 -308
  175. package/dist/ai-workflow-builder.service.js.map +0 -1
  176. package/dist/chains/connection-composer.d.ts +0 -10
  177. package/dist/chains/connection-composer.js +0 -135
  178. package/dist/chains/connection-composer.js.map +0 -1
  179. package/dist/chains/node-selector.d.ts +0 -8
  180. package/dist/chains/node-selector.js +0 -90
  181. package/dist/chains/node-selector.js.map +0 -1
  182. package/dist/chains/nodes-composer.d.ts +0 -8
  183. package/dist/chains/nodes-composer.js +0 -451
  184. package/dist/chains/nodes-composer.js.map +0 -1
  185. package/dist/chains/validator.d.ts +0 -2
  186. package/dist/chains/validator.js +0 -67
  187. package/dist/chains/validator.js.map +0 -1
  188. package/dist/interfaces.d.ts +0 -4
  189. package/dist/interfaces.js.map +0 -1
  190. package/dist/types.d.ts +0 -87
  191. package/dist/types.js.map +0 -1
@@ -0,0 +1,114 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.applyOperations = applyOperations;
4
+ exports.processOperations = processOperations;
5
+ function applyOperations(workflow, operations) {
6
+ let result = {
7
+ nodes: [...workflow.nodes],
8
+ connections: { ...workflow.connections },
9
+ };
10
+ for (const operation of operations) {
11
+ switch (operation.type) {
12
+ case 'clear':
13
+ result = { nodes: [], connections: {} };
14
+ break;
15
+ case 'removeNode': {
16
+ const nodesToRemove = new Set(operation.nodeIds);
17
+ result.nodes = result.nodes.filter((node) => !nodesToRemove.has(node.id));
18
+ const cleanedConnections = {};
19
+ for (const [sourceId, nodeConnections] of Object.entries(result.connections)) {
20
+ if (!nodesToRemove.has(sourceId)) {
21
+ cleanedConnections[sourceId] = {};
22
+ for (const [connectionType, outputs] of Object.entries(nodeConnections)) {
23
+ if (Array.isArray(outputs)) {
24
+ cleanedConnections[sourceId][connectionType] = outputs.map((outputConnections) => {
25
+ if (Array.isArray(outputConnections)) {
26
+ return outputConnections.filter((conn) => !nodesToRemove.has(conn.node));
27
+ }
28
+ return outputConnections;
29
+ });
30
+ }
31
+ }
32
+ }
33
+ }
34
+ result.connections = cleanedConnections;
35
+ break;
36
+ }
37
+ case 'addNodes': {
38
+ const nodeMap = new Map();
39
+ result.nodes.forEach((node) => nodeMap.set(node.id, node));
40
+ operation.nodes.forEach((node) => {
41
+ nodeMap.set(node.id, node);
42
+ });
43
+ result.nodes = Array.from(nodeMap.values());
44
+ break;
45
+ }
46
+ case 'updateNode': {
47
+ result.nodes = result.nodes.map((node) => {
48
+ if (node.id === operation.nodeId) {
49
+ return { ...node, ...operation.updates };
50
+ }
51
+ return node;
52
+ });
53
+ break;
54
+ }
55
+ case 'setConnections': {
56
+ result.connections = operation.connections;
57
+ break;
58
+ }
59
+ case 'mergeConnections': {
60
+ for (const [sourceId, nodeConnections] of Object.entries(operation.connections)) {
61
+ if (!result.connections[sourceId]) {
62
+ result.connections[sourceId] = nodeConnections;
63
+ }
64
+ else {
65
+ for (const [connectionType, newOutputs] of Object.entries(nodeConnections)) {
66
+ if (!result.connections[sourceId][connectionType]) {
67
+ result.connections[sourceId][connectionType] = newOutputs;
68
+ }
69
+ else {
70
+ const existingOutputs = result.connections[sourceId][connectionType];
71
+ if (Array.isArray(newOutputs) && Array.isArray(existingOutputs)) {
72
+ for (let i = 0; i < Math.max(newOutputs.length, existingOutputs.length); i++) {
73
+ if (!newOutputs[i])
74
+ continue;
75
+ if (!existingOutputs[i]) {
76
+ existingOutputs[i] = newOutputs[i];
77
+ }
78
+ else if (Array.isArray(newOutputs[i]) && Array.isArray(existingOutputs[i])) {
79
+ const existingSet = new Set(existingOutputs[i].map((conn) => JSON.stringify({ node: conn.node, type: conn.type, index: conn.index })));
80
+ newOutputs[i].forEach((conn) => {
81
+ const connStr = JSON.stringify({
82
+ node: conn.node,
83
+ type: conn.type,
84
+ index: conn.index,
85
+ });
86
+ if (!existingSet.has(connStr)) {
87
+ existingOutputs[i].push(conn);
88
+ }
89
+ });
90
+ }
91
+ }
92
+ }
93
+ }
94
+ }
95
+ }
96
+ }
97
+ break;
98
+ }
99
+ }
100
+ }
101
+ return result;
102
+ }
103
+ function processOperations(state) {
104
+ const { workflowJSON, workflowOperations } = state;
105
+ if (!workflowOperations || workflowOperations.length === 0) {
106
+ return {};
107
+ }
108
+ const newWorkflow = applyOperations(workflowJSON, workflowOperations);
109
+ return {
110
+ workflowJSON: newWorkflow,
111
+ workflowOperations: null,
112
+ };
113
+ }
114
+ //# sourceMappingURL=operations-processor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"operations-processor.js","sourceRoot":"","sources":["../../src/utils/operations-processor.ts"],"names":[],"mappings":";;AASA,0CAkIC;AAMD,8CAgBC;AAxJD,SAAgB,eAAe,CAC9B,QAAwB,EACxB,UAA+B;IAG/B,IAAI,MAAM,GAAmB;QAC5B,KAAK,EAAE,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC;QAC1B,WAAW,EAAE,EAAE,GAAG,QAAQ,CAAC,WAAW,EAAE;KACxC,CAAC;IAGF,KAAK,MAAM,SAAS,IAAI,UAAU,EAAE,CAAC;QACpC,QAAQ,SAAS,CAAC,IAAI,EAAE,CAAC;YACxB,KAAK,OAAO;gBACX,MAAM,GAAG,EAAE,KAAK,EAAE,EAAE,EAAE,WAAW,EAAE,EAAE,EAAE,CAAC;gBACxC,MAAM;YAEP,KAAK,YAAY,CAAC,CAAC,CAAC;gBACnB,MAAM,aAAa,GAAG,IAAI,GAAG,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;gBAGjD,MAAM,CAAC,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,aAAa,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;gBAG1E,MAAM,kBAAkB,GAAiB,EAAE,CAAC;gBAG5C,KAAK,MAAM,CAAC,QAAQ,EAAE,eAAe,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,WAAW,CAAC,EAAE,CAAC;oBAC9E,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC;wBAClC,kBAAkB,CAAC,QAAQ,CAAC,GAAG,EAAE,CAAC;wBAElC,KAAK,MAAM,CAAC,cAAc,EAAE,OAAO,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,eAAe,CAAC,EAAE,CAAC;4BACzE,IAAI,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;gCAC5B,kBAAkB,CAAC,QAAQ,CAAC,CAAC,cAAc,CAAC,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,iBAAiB,EAAE,EAAE;oCAChF,IAAI,KAAK,CAAC,OAAO,CAAC,iBAAiB,CAAC,EAAE,CAAC;wCACtC,OAAO,iBAAiB,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,aAAa,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;oCAC1E,CAAC;oCACD,OAAO,iBAAiB,CAAC;gCAC1B,CAAC,CAAC,CAAC;4BACJ,CAAC;wBACF,CAAC;oBACF,CAAC;gBACF,CAAC;gBAED,MAAM,CAAC,WAAW,GAAG,kBAAkB,CAAC;gBACxC,MAAM;YACP,CAAC;YAED,KAAK,UAAU,CAAC,CAAC,CAAC;gBAEjB,MAAM,OAAO,GAAG,IAAI,GAAG,EAAiB,CAAC;gBACzC,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC,CAAC;gBAG3D,SAAS,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE;oBAChC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC;gBAC5B,CAAC,CAAC,CAAC;gBAEH,MAAM,CAAC,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;gBAC5C,MAAM;YACP,CAAC;YAED,KAAK,YAAY,CAAC,CAAC,CAAC;gBACnB,MAAM,CAAC,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE;oBACxC,IAAI,IAAI,CAAC,EAAE,KAAK,SAAS,CAAC,MAAM,EAAE,CAAC;wBAClC,OAAO,EAAE,GAAG,IAAI,EAAE,GAAG,SAAS,CAAC,OAAO,EAAE,CAAC;oBAC1C,CAAC;oBACD,OAAO,IAAI,CAAC;gBACb,CAAC,CAAC,CAAC;gBACH,MAAM;YACP,CAAC;YAED,KAAK,gBAAgB,CAAC,CAAC,CAAC;gBAEvB,MAAM,CAAC,WAAW,GAAG,SAAS,CAAC,WAAW,CAAC;gBAC3C,MAAM;YACP,CAAC;YAED,KAAK,kBAAkB,CAAC,CAAC,CAAC;gBAEzB,KAAK,MAAM,CAAC,QAAQ,EAAE,eAAe,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,WAAW,CAAC,EAAE,CAAC;oBACjF,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,QAAQ,CAAC,EAAE,CAAC;wBACnC,MAAM,CAAC,WAAW,CAAC,QAAQ,CAAC,GAAG,eAAe,CAAC;oBAChD,CAAC;yBAAM,CAAC;wBAEP,KAAK,MAAM,CAAC,cAAc,EAAE,UAAU,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,eAAe,CAAC,EAAE,CAAC;4BAC5E,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC,cAAc,CAAC,EAAE,CAAC;gCACnD,MAAM,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC,cAAc,CAAC,GAAG,UAAU,CAAC;4BAC3D,CAAC;iCAAM,CAAC;gCAEP,MAAM,eAAe,GAAG,MAAM,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC,cAAc,CAAC,CAAC;gCAErE,IAAI,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC,IAAI,KAAK,CAAC,OAAO,CAAC,eAAe,CAAC,EAAE,CAAC;oCAEjE,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,MAAM,EAAE,eAAe,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;wCAC9E,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC;4CAAE,SAAS;wCAE7B,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC,EAAE,CAAC;4CACzB,eAAe,CAAC,CAAC,CAAC,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC;wCACpC,CAAC;6CAAM,IAAI,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,OAAO,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;4CAE9E,MAAM,WAAW,GAAG,IAAI,GAAG,CAC1B,eAAe,CAAC,CAAC,CAAE,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAChC,IAAI,CAAC,SAAS,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,CAAC,CACvE,CACD,CAAC;4CAEF,UAAU,CAAC,CAAC,CAAE,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE;gDAC/B,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC;oDAC9B,IAAI,EAAE,IAAI,CAAC,IAAI;oDACf,IAAI,EAAE,IAAI,CAAC,IAAI;oDACf,KAAK,EAAE,IAAI,CAAC,KAAK;iDACjB,CAAC,CAAC;gDACH,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC;oDAC/B,eAAe,CAAC,CAAC,CAAE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gDAChC,CAAC;4CACF,CAAC,CAAC,CAAC;wCACJ,CAAC;oCACF,CAAC;gCACF,CAAC;4BACF,CAAC;wBACF,CAAC;oBACF,CAAC;gBACF,CAAC;gBACD,MAAM;YACP,CAAC;QACF,CAAC;IACF,CAAC;IAED,OAAO,MAAM,CAAC;AACf,CAAC;AAMD,SAAgB,iBAAiB,CAAC,KAAiC;IAClE,MAAM,EAAE,YAAY,EAAE,kBAAkB,EAAE,GAAG,KAAK,CAAC;IAGnD,IAAI,CAAC,kBAAkB,IAAI,kBAAkB,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC5D,OAAO,EAAE,CAAC;IACX,CAAC;IAGD,MAAM,WAAW,GAAG,eAAe,CAAC,YAAY,EAAE,kBAAkB,CAAC,CAAC;IAGtE,OAAO;QACN,YAAY,EAAE,WAAW;QACzB,kBAAkB,EAAE,IAAI;KACxB,CAAC;AACH,CAAC"}
@@ -0,0 +1,6 @@
1
+ import { AIMessage, HumanMessage, ToolMessage } from '@langchain/core/messages';
2
+ import type { StreamOutput } from '../types/streaming';
3
+ export declare const DEFAULT_WORKFLOW_UPDATE_TOOLS: string[];
4
+ export declare function processStreamChunk(streamMode: string, chunk: unknown): StreamOutput | null;
5
+ export declare function createStreamProcessor(stream: AsyncGenerator<[string, unknown], void, unknown>): AsyncGenerator<StreamOutput>;
6
+ export declare function formatMessages(messages: Array<AIMessage | HumanMessage | ToolMessage>): Array<Record<string, unknown>>;
@@ -0,0 +1,153 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.DEFAULT_WORKFLOW_UPDATE_TOOLS = void 0;
4
+ exports.processStreamChunk = processStreamChunk;
5
+ exports.createStreamProcessor = createStreamProcessor;
6
+ exports.formatMessages = formatMessages;
7
+ const messages_1 = require("@langchain/core/messages");
8
+ exports.DEFAULT_WORKFLOW_UPDATE_TOOLS = [
9
+ 'add_nodes',
10
+ 'connect_nodes',
11
+ 'update_node_parameters',
12
+ 'remove_node',
13
+ ];
14
+ function processStreamChunk(streamMode, chunk) {
15
+ if (streamMode === 'updates') {
16
+ const agentChunk = chunk;
17
+ if ((agentChunk?.delete_messages?.messages ?? []).length > 0) {
18
+ const messageChunk = {
19
+ role: 'assistant',
20
+ type: 'message',
21
+ text: 'Deleted, refresh?',
22
+ };
23
+ return { messages: [messageChunk] };
24
+ }
25
+ if ((agentChunk?.compact_messages?.messages ?? []).length > 0) {
26
+ const lastMessage = agentChunk.compact_messages.messages[agentChunk.compact_messages.messages.length - 1];
27
+ const messageChunk = {
28
+ role: 'assistant',
29
+ type: 'message',
30
+ text: lastMessage.content,
31
+ };
32
+ return { messages: [messageChunk] };
33
+ }
34
+ if ((agentChunk?.agent?.messages ?? []).length > 0) {
35
+ const lastMessage = agentChunk.agent.messages[agentChunk.agent.messages.length - 1];
36
+ if (lastMessage.content) {
37
+ let content;
38
+ if (Array.isArray(lastMessage.content)) {
39
+ content = lastMessage.content
40
+ .filter((c) => c.type === 'text')
41
+ .map((b) => b.text)
42
+ .join('\n');
43
+ }
44
+ else {
45
+ content = lastMessage.content;
46
+ }
47
+ const messageChunk = {
48
+ role: 'assistant',
49
+ type: 'message',
50
+ text: content,
51
+ };
52
+ return { messages: [messageChunk] };
53
+ }
54
+ }
55
+ if (agentChunk?.process_operations) {
56
+ const update = agentChunk.process_operations;
57
+ if (update.workflowJSON && update.workflowOperations !== undefined) {
58
+ const workflowUpdateChunk = {
59
+ role: 'assistant',
60
+ type: 'workflow-updated',
61
+ codeSnippet: JSON.stringify(update.workflowJSON, null, 2),
62
+ };
63
+ return { messages: [workflowUpdateChunk] };
64
+ }
65
+ }
66
+ }
67
+ else if (streamMode === 'custom') {
68
+ const toolChunk = chunk;
69
+ if (toolChunk?.type === 'tool') {
70
+ const output = { messages: [toolChunk] };
71
+ return output;
72
+ }
73
+ }
74
+ return null;
75
+ }
76
+ async function* createStreamProcessor(stream) {
77
+ for await (const [streamMode, chunk] of stream) {
78
+ const output = processStreamChunk(streamMode, chunk);
79
+ if (output) {
80
+ yield output;
81
+ }
82
+ }
83
+ }
84
+ function formatMessages(messages) {
85
+ const formattedMessages = [];
86
+ for (const msg of messages) {
87
+ if (msg instanceof messages_1.HumanMessage) {
88
+ formattedMessages.push({
89
+ role: 'user',
90
+ type: 'message',
91
+ text: msg.content,
92
+ });
93
+ }
94
+ else if (msg instanceof messages_1.AIMessage) {
95
+ if (msg.content) {
96
+ if (Array.isArray(msg.content)) {
97
+ const textMessages = msg.content.filter((c) => c.type === 'text');
98
+ textMessages.forEach((textMessage) => {
99
+ if (textMessage.type !== 'text') {
100
+ return;
101
+ }
102
+ formattedMessages.push({
103
+ role: 'assistant',
104
+ type: 'message',
105
+ text: textMessage.text,
106
+ });
107
+ });
108
+ }
109
+ else {
110
+ formattedMessages.push({
111
+ role: 'assistant',
112
+ type: 'message',
113
+ text: msg.content,
114
+ });
115
+ }
116
+ }
117
+ if (msg.tool_calls && msg.tool_calls.length > 0) {
118
+ for (const toolCall of msg.tool_calls) {
119
+ formattedMessages.push({
120
+ id: toolCall.id,
121
+ toolCallId: toolCall.id,
122
+ role: 'assistant',
123
+ type: 'tool',
124
+ toolName: toolCall.name,
125
+ status: 'completed',
126
+ updates: [
127
+ {
128
+ type: 'input',
129
+ data: toolCall.args || {},
130
+ },
131
+ ],
132
+ });
133
+ }
134
+ }
135
+ }
136
+ else if (msg instanceof messages_1.ToolMessage) {
137
+ const toolCallId = msg.tool_call_id;
138
+ for (let i = formattedMessages.length - 1; i >= 0; i--) {
139
+ const m = formattedMessages[i];
140
+ if (m.type === 'tool' && m.id === toolCallId) {
141
+ m.updates ??= [];
142
+ m.updates.push({
143
+ type: 'output',
144
+ data: typeof msg.content === 'string' ? { result: msg.content } : msg.content,
145
+ });
146
+ break;
147
+ }
148
+ }
149
+ }
150
+ }
151
+ return formattedMessages;
152
+ }
153
+ //# sourceMappingURL=stream-processor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stream-processor.js","sourceRoot":"","sources":["../../src/utils/stream-processor.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import type { ToolExecutorOptions } from '../types/config';
2
+ import type { WorkflowState } from '../workflow-state';
3
+ export declare function executeToolsInParallel(options: ToolExecutorOptions): Promise<Partial<typeof WorkflowState.State>>;
@@ -0,0 +1,86 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.executeToolsInParallel = executeToolsInParallel;
4
+ const messages_1 = require("@langchain/core/messages");
5
+ const tools_1 = require("@langchain/core/tools");
6
+ const langgraph_1 = require("@langchain/langgraph");
7
+ const errors_1 = require("../errors");
8
+ async function executeToolsInParallel(options) {
9
+ const { state, toolMap } = options;
10
+ const lastMessage = state.messages.at(-1);
11
+ if (!lastMessage || !(0, messages_1.isAIMessage)(lastMessage)) {
12
+ const error = new errors_1.WorkflowStateError('Most recent message must be an AIMessage with tool calls');
13
+ throw error;
14
+ }
15
+ const aiMessage = lastMessage;
16
+ if (!aiMessage.tool_calls?.length) {
17
+ const error = new errors_1.WorkflowStateError('AIMessage must have tool calls');
18
+ throw error;
19
+ }
20
+ const toolResults = await Promise.all(aiMessage.tool_calls.map(async (toolCall) => {
21
+ try {
22
+ const tool = toolMap.get(toolCall.name);
23
+ if (!tool) {
24
+ throw new errors_1.ToolExecutionError(`Tool ${toolCall.name} not found`, {
25
+ toolName: toolCall.name,
26
+ });
27
+ }
28
+ const result = await tool.invoke(toolCall.args ?? {}, {
29
+ toolCall: {
30
+ id: toolCall.id,
31
+ name: toolCall.name,
32
+ args: toolCall.args ?? {},
33
+ },
34
+ });
35
+ return result;
36
+ }
37
+ catch (error) {
38
+ const errorMessage = error instanceof Error ? error.message : 'Unknown error occurred';
39
+ let errorContent;
40
+ if (error instanceof tools_1.ToolInputParsingException ||
41
+ errorMessage.includes('expected schema')) {
42
+ errorContent = `Invalid input for tool ${toolCall.name}: ${errorMessage}`;
43
+ }
44
+ else {
45
+ errorContent = `Tool ${toolCall.name} failed: ${errorMessage}`;
46
+ }
47
+ return new messages_1.ToolMessage({
48
+ content: errorContent,
49
+ tool_call_id: toolCall.id ?? '',
50
+ additional_kwargs: { error: true },
51
+ });
52
+ }
53
+ }));
54
+ const allMessages = [];
55
+ const stateUpdates = [];
56
+ toolResults.forEach((result) => {
57
+ if ((0, langgraph_1.isCommand)(result)) {
58
+ const update = result.update;
59
+ if (update) {
60
+ stateUpdates.push(update);
61
+ }
62
+ }
63
+ else {
64
+ allMessages.push(result);
65
+ }
66
+ });
67
+ stateUpdates.forEach((update) => {
68
+ if (update.messages && Array.isArray(update.messages)) {
69
+ allMessages.push(...update.messages);
70
+ }
71
+ });
72
+ const allOperations = [];
73
+ for (const update of stateUpdates) {
74
+ if (update.workflowOperations && Array.isArray(update.workflowOperations)) {
75
+ allOperations.push(...update.workflowOperations);
76
+ }
77
+ }
78
+ const finalUpdate = {
79
+ messages: allMessages,
80
+ };
81
+ if (allOperations.length > 0) {
82
+ finalUpdate.workflowOperations = allOperations;
83
+ }
84
+ return finalUpdate;
85
+ }
86
+ //# sourceMappingURL=tool-executor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tool-executor.js","sourceRoot":"","sources":["../../src/utils/tool-executor.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,41 @@
1
+ import type { BaseChatModel } from '@langchain/core/language_models/chat_models';
2
+ import type { LangChainTracer } from '@langchain/core/tracers/tracer_langchain';
3
+ import { MemorySaver } from '@langchain/langgraph';
4
+ import type { Logger } from '@n8n/backend-common';
5
+ import type { INodeTypeDescription, IRunExecutionData, IWorkflowBase, NodeExecutionSchema } from 'n8n-workflow';
6
+ export interface WorkflowBuilderAgentConfig {
7
+ parsedNodeTypes: INodeTypeDescription[];
8
+ llmSimpleTask: BaseChatModel;
9
+ llmComplexTask: BaseChatModel;
10
+ logger?: Logger;
11
+ checkpointer?: MemorySaver;
12
+ tracer?: LangChainTracer;
13
+ }
14
+ export interface ChatPayload {
15
+ message: string;
16
+ workflowContext?: {
17
+ executionSchema?: NodeExecutionSchema[];
18
+ currentWorkflow?: Partial<IWorkflowBase>;
19
+ executionData?: IRunExecutionData['resultData'];
20
+ };
21
+ }
22
+ export declare class WorkflowBuilderAgent {
23
+ private checkpointer;
24
+ private parsedNodeTypes;
25
+ private llmSimpleTask;
26
+ private llmComplexTask;
27
+ private logger?;
28
+ private tracer?;
29
+ constructor(config: WorkflowBuilderAgentConfig);
30
+ private createWorkflow;
31
+ getState(workflowId: string, userId?: string): Promise<import("@langchain/langgraph").StateSnapshot>;
32
+ static generateThreadId(workflowId?: string, userId?: string): string;
33
+ chat(payload: ChatPayload, userId?: string): AsyncGenerator<import("./types").StreamOutput, void, unknown>;
34
+ getSessions(workflowId: string | undefined, userId?: string): Promise<{
35
+ sessions: {
36
+ sessionId: string;
37
+ messages: Record<string, unknown>[];
38
+ lastUpdated: string;
39
+ }[];
40
+ }>;
41
+ }
@@ -0,0 +1,205 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.WorkflowBuilderAgent = void 0;
4
+ const messages_1 = require("@langchain/core/messages");
5
+ const langgraph_1 = require("@langchain/langgraph");
6
+ const conversation_compact_1 = require("./chains/conversation-compact");
7
+ const errors_1 = require("./errors");
8
+ const add_node_tool_1 = require("./tools/add-node.tool");
9
+ const connect_nodes_tool_1 = require("./tools/connect-nodes.tool");
10
+ const node_details_tool_1 = require("./tools/node-details.tool");
11
+ const node_search_tool_1 = require("./tools/node-search.tool");
12
+ const main_agent_prompt_1 = require("./tools/prompts/main-agent.prompt");
13
+ const remove_node_tool_1 = require("./tools/remove-node.tool");
14
+ const update_node_parameters_tool_1 = require("./tools/update-node-parameters.tool");
15
+ const operations_processor_1 = require("./utils/operations-processor");
16
+ const stream_processor_1 = require("./utils/stream-processor");
17
+ const tool_executor_1 = require("./utils/tool-executor");
18
+ const workflow_state_1 = require("./workflow-state");
19
+ class WorkflowBuilderAgent {
20
+ constructor(config) {
21
+ this.parsedNodeTypes = config.parsedNodeTypes;
22
+ this.llmSimpleTask = config.llmSimpleTask;
23
+ this.llmComplexTask = config.llmComplexTask;
24
+ this.logger = config.logger;
25
+ this.checkpointer = config.checkpointer ?? new langgraph_1.MemorySaver();
26
+ this.tracer = config.tracer;
27
+ }
28
+ createWorkflow() {
29
+ const tools = [
30
+ (0, node_search_tool_1.createNodeSearchTool)(this.parsedNodeTypes),
31
+ (0, node_details_tool_1.createNodeDetailsTool)(this.parsedNodeTypes),
32
+ (0, add_node_tool_1.createAddNodeTool)(this.parsedNodeTypes),
33
+ (0, connect_nodes_tool_1.createConnectNodesTool)(this.parsedNodeTypes, this.logger),
34
+ (0, remove_node_tool_1.createRemoveNodeTool)(this.logger),
35
+ (0, update_node_parameters_tool_1.createUpdateNodeParametersTool)(this.parsedNodeTypes, this.llmComplexTask, this.logger),
36
+ ];
37
+ const toolMap = new Map(tools.map((tool) => [tool.name, tool]));
38
+ const callModel = async (state) => {
39
+ if (!this.llmSimpleTask) {
40
+ throw new errors_1.LLMServiceError('LLM not setup');
41
+ }
42
+ if (typeof this.llmSimpleTask.bindTools !== 'function') {
43
+ throw new errors_1.LLMServiceError('LLM does not support tools', {
44
+ llmModel: this.llmSimpleTask._llmType(),
45
+ });
46
+ }
47
+ const prompt = await main_agent_prompt_1.mainAgentPrompt.invoke({
48
+ ...state,
49
+ executionData: state.workflowContext?.executionData ?? {},
50
+ executionSchema: state.workflowContext?.executionSchema ?? [],
51
+ });
52
+ const response = await this.llmSimpleTask.bindTools(tools).invoke(prompt);
53
+ return { messages: [response] };
54
+ };
55
+ const shouldModifyState = ({ messages }) => {
56
+ const lastMessage = messages[messages.length - 1];
57
+ if (lastMessage.content === '/compact') {
58
+ return 'compact_messages';
59
+ }
60
+ if (lastMessage.content === '/clear') {
61
+ return 'delete_messages';
62
+ }
63
+ return 'agent';
64
+ };
65
+ const shouldContinue = ({ messages }) => {
66
+ const lastMessage = messages[messages.length - 1];
67
+ if (lastMessage.tool_calls?.length) {
68
+ return 'tools';
69
+ }
70
+ return langgraph_1.END;
71
+ };
72
+ const customToolExecutor = async (state) => {
73
+ return await (0, tool_executor_1.executeToolsInParallel)({ state, toolMap });
74
+ };
75
+ function deleteMessages(state) {
76
+ const messages = state.messages;
77
+ const stateUpdate = {
78
+ workflowOperations: null,
79
+ workflowContext: {},
80
+ messages: messages.map((m) => new messages_1.RemoveMessage({ id: m.id })) ?? [],
81
+ workflowJSON: {
82
+ nodes: [],
83
+ connections: {},
84
+ },
85
+ };
86
+ return stateUpdate;
87
+ }
88
+ const compactSession = async (state) => {
89
+ if (!this.llmSimpleTask) {
90
+ throw new errors_1.LLMServiceError('LLM not setup');
91
+ }
92
+ const messages = state.messages;
93
+ const compactedMessages = await (0, conversation_compact_1.conversationCompactChain)(this.llmSimpleTask, messages);
94
+ return {
95
+ messages: [
96
+ ...messages.map((m) => new messages_1.RemoveMessage({ id: m.id })),
97
+ ...compactedMessages.newMessages,
98
+ ],
99
+ };
100
+ };
101
+ const workflow = new langgraph_1.StateGraph(workflow_state_1.WorkflowState)
102
+ .addNode('agent', callModel)
103
+ .addNode('tools', customToolExecutor)
104
+ .addNode('process_operations', operations_processor_1.processOperations)
105
+ .addNode('delete_messages', deleteMessages)
106
+ .addNode('compact_messages', compactSession)
107
+ .addConditionalEdges('__start__', shouldModifyState)
108
+ .addEdge('tools', 'process_operations')
109
+ .addEdge('process_operations', 'agent')
110
+ .addEdge('delete_messages', langgraph_1.END)
111
+ .addEdge('compact_messages', langgraph_1.END)
112
+ .addConditionalEdges('agent', shouldContinue);
113
+ return workflow;
114
+ }
115
+ async getState(workflowId, userId) {
116
+ const workflow = this.createWorkflow();
117
+ const agent = workflow.compile({ checkpointer: this.checkpointer });
118
+ return await agent.getState({
119
+ configurable: { thread_id: `workflow-${workflowId}-user-${userId ?? new Date().getTime()}` },
120
+ });
121
+ }
122
+ static generateThreadId(workflowId, userId) {
123
+ return workflowId
124
+ ? `workflow-${workflowId}-user-${userId ?? new Date().getTime()}`
125
+ : crypto.randomUUID();
126
+ }
127
+ async *chat(payload, userId) {
128
+ const agent = this.createWorkflow().compile({ checkpointer: this.checkpointer });
129
+ const workflowId = payload.workflowContext?.currentWorkflow?.id;
130
+ const threadId = WorkflowBuilderAgent.generateThreadId(workflowId, userId);
131
+ const threadConfig = {
132
+ configurable: {
133
+ thread_id: threadId,
134
+ },
135
+ };
136
+ const existingCheckpoint = await this.checkpointer.getTuple(threadConfig);
137
+ let stream;
138
+ if (!existingCheckpoint?.checkpoint) {
139
+ const initialState = {
140
+ messages: [new messages_1.HumanMessage({ content: payload.message })],
141
+ workflowJSON: payload.workflowContext?.currentWorkflow ?? {
142
+ nodes: [],
143
+ connections: {},
144
+ },
145
+ workflowOperations: [],
146
+ workflowContext: payload.workflowContext,
147
+ };
148
+ stream = await agent.stream(initialState, {
149
+ ...threadConfig,
150
+ streamMode: ['updates', 'custom'],
151
+ recursionLimit: 30,
152
+ callbacks: this.tracer ? [this.tracer] : undefined,
153
+ });
154
+ }
155
+ else {
156
+ const stateUpdate = {
157
+ messages: [new messages_1.HumanMessage({ content: payload.message })],
158
+ workflowOperations: [],
159
+ workflowContext: payload.workflowContext,
160
+ workflowJSON: { nodes: [], connections: {} },
161
+ };
162
+ if (payload.workflowContext?.currentWorkflow) {
163
+ stateUpdate.workflowJSON = payload.workflowContext?.currentWorkflow;
164
+ }
165
+ stream = await agent.stream(stateUpdate, {
166
+ ...threadConfig,
167
+ streamMode: ['updates', 'custom'],
168
+ recursionLimit: 80,
169
+ callbacks: this.tracer ? [this.tracer] : undefined,
170
+ });
171
+ }
172
+ const streamProcessor = (0, stream_processor_1.createStreamProcessor)(stream);
173
+ for await (const output of streamProcessor) {
174
+ yield output;
175
+ }
176
+ }
177
+ async getSessions(workflowId, userId) {
178
+ const sessions = [];
179
+ if (workflowId) {
180
+ const threadId = WorkflowBuilderAgent.generateThreadId(workflowId, userId);
181
+ const threadConfig = {
182
+ configurable: {
183
+ thread_id: threadId,
184
+ },
185
+ };
186
+ try {
187
+ const checkpoint = await this.checkpointer.getTuple(threadConfig);
188
+ if (checkpoint?.checkpoint) {
189
+ const messages = checkpoint.checkpoint.channel_values?.messages ?? [];
190
+ sessions.push({
191
+ sessionId: threadId,
192
+ messages: (0, stream_processor_1.formatMessages)(messages),
193
+ lastUpdated: checkpoint.checkpoint.ts,
194
+ });
195
+ }
196
+ }
197
+ catch (error) {
198
+ this.logger?.debug('No session found for workflow:', { workflowId, error });
199
+ }
200
+ }
201
+ return { sessions };
202
+ }
203
+ }
204
+ exports.WorkflowBuilderAgent = WorkflowBuilderAgent;
205
+ //# sourceMappingURL=workflow-builder-agent.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"workflow-builder-agent.js","sourceRoot":"","sources":["../src/workflow-builder-agent.ts"],"names":[],"mappings":"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"}