@n8n/ai-workflow-builder 0.13.0 → 0.14.1

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 (189) 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 -1
  68. package/dist/index.js +1 -1
  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/types/config.js +3 -0
  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 +24 -5
  173. package/dist/ai-workflow-builder.service.d.ts +0 -21
  174. package/dist/ai-workflow-builder.service.js +0 -294
  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/types.d.ts +0 -87
  189. package/dist/types.js.map +0 -1
@@ -0,0 +1,121 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.NodeSearchEngine = exports.SCORE_WEIGHTS = void 0;
4
+ const n8n_workflow_1 = require("n8n-workflow");
5
+ exports.SCORE_WEIGHTS = {
6
+ NAME_CONTAINS: 10,
7
+ DISPLAY_NAME_CONTAINS: 8,
8
+ DESCRIPTION_CONTAINS: 5,
9
+ ALIAS_CONTAINS: 8,
10
+ NAME_EXACT: 20,
11
+ DISPLAY_NAME_EXACT: 15,
12
+ CONNECTION_EXACT: 100,
13
+ CONNECTION_IN_EXPRESSION: 50,
14
+ };
15
+ class NodeSearchEngine {
16
+ constructor(nodeTypes) {
17
+ this.nodeTypes = nodeTypes;
18
+ }
19
+ searchByName(query, limit = 20) {
20
+ const normalizedQuery = query.toLowerCase();
21
+ const results = [];
22
+ for (const nodeType of this.nodeTypes) {
23
+ try {
24
+ const score = this.calculateNameScore(nodeType, normalizedQuery);
25
+ if (score > 0) {
26
+ results.push(this.createSearchResult(nodeType, score));
27
+ }
28
+ }
29
+ catch (error) {
30
+ }
31
+ }
32
+ return this.sortAndLimit(results, limit);
33
+ }
34
+ searchByConnectionType(connectionType, limit = 20, nameFilter) {
35
+ const results = [];
36
+ const normalizedFilter = nameFilter?.toLowerCase();
37
+ for (const nodeType of this.nodeTypes) {
38
+ try {
39
+ const connectionScore = this.getConnectionScore(nodeType, connectionType);
40
+ if (connectionScore > 0) {
41
+ const nameScore = normalizedFilter
42
+ ? this.calculateNameScore(nodeType, normalizedFilter)
43
+ : 0;
44
+ if (!normalizedFilter || nameScore > 0) {
45
+ const totalScore = connectionScore + nameScore;
46
+ results.push(this.createSearchResult(nodeType, totalScore));
47
+ }
48
+ }
49
+ }
50
+ catch (error) {
51
+ }
52
+ }
53
+ return this.sortAndLimit(results, limit);
54
+ }
55
+ formatResult(result) {
56
+ return `
57
+ <node>
58
+ <node_name>${result.name}</node_name>
59
+ <node_description>${result.description}</node_description>
60
+ <node_inputs>${typeof result.inputs === 'object' ? JSON.stringify(result.inputs) : result.inputs}</node_inputs>
61
+ <node_outputs>${typeof result.outputs === 'object' ? JSON.stringify(result.outputs) : result.outputs}</node_outputs>
62
+ </node>`;
63
+ }
64
+ calculateNameScore(nodeType, normalizedQuery) {
65
+ let score = 0;
66
+ if (nodeType.name.toLowerCase().includes(normalizedQuery)) {
67
+ score += exports.SCORE_WEIGHTS.NAME_CONTAINS;
68
+ }
69
+ if (nodeType.displayName.toLowerCase().includes(normalizedQuery)) {
70
+ score += exports.SCORE_WEIGHTS.DISPLAY_NAME_CONTAINS;
71
+ }
72
+ if (nodeType.description?.toLowerCase().includes(normalizedQuery)) {
73
+ score += exports.SCORE_WEIGHTS.DESCRIPTION_CONTAINS;
74
+ }
75
+ if (nodeType.codex?.alias?.some((alias) => alias.toLowerCase().includes(normalizedQuery))) {
76
+ score += exports.SCORE_WEIGHTS.ALIAS_CONTAINS;
77
+ }
78
+ if (nodeType.name.toLowerCase() === normalizedQuery) {
79
+ score += exports.SCORE_WEIGHTS.NAME_EXACT;
80
+ }
81
+ if (nodeType.displayName.toLowerCase() === normalizedQuery) {
82
+ score += exports.SCORE_WEIGHTS.DISPLAY_NAME_EXACT;
83
+ }
84
+ return score;
85
+ }
86
+ getConnectionScore(nodeType, connectionType) {
87
+ const outputs = nodeType.outputs;
88
+ if (Array.isArray(outputs)) {
89
+ if (outputs.includes(connectionType)) {
90
+ return exports.SCORE_WEIGHTS.CONNECTION_EXACT;
91
+ }
92
+ }
93
+ else if (typeof outputs === 'string') {
94
+ if (outputs.includes(connectionType)) {
95
+ return exports.SCORE_WEIGHTS.CONNECTION_IN_EXPRESSION;
96
+ }
97
+ }
98
+ return 0;
99
+ }
100
+ createSearchResult(nodeType, score) {
101
+ return {
102
+ name: nodeType.name,
103
+ displayName: nodeType.displayName,
104
+ description: nodeType.description ?? 'No description available',
105
+ inputs: nodeType.inputs,
106
+ outputs: nodeType.outputs,
107
+ score,
108
+ };
109
+ }
110
+ sortAndLimit(results, limit) {
111
+ return results.sort((a, b) => b.score - a.score).slice(0, limit);
112
+ }
113
+ static isAiConnectionType(connectionType) {
114
+ return connectionType.startsWith('ai_');
115
+ }
116
+ static getAiConnectionTypes() {
117
+ return Object.values(n8n_workflow_1.NodeConnectionTypes).filter((type) => NodeSearchEngine.isAiConnectionType(type));
118
+ }
119
+ }
120
+ exports.NodeSearchEngine = NodeSearchEngine;
121
+ //# sourceMappingURL=node-search-engine.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"node-search-engine.js","sourceRoot":"","sources":["../../../src/tools/engines/node-search-engine.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ export * from './progress';
2
+ export * from './response';
3
+ export * from './validation';
4
+ export * from './state';
@@ -0,0 +1,21 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ __exportStar(require("./progress"), exports);
18
+ __exportStar(require("./response"), exports);
19
+ __exportStar(require("./validation"), exports);
20
+ __exportStar(require("./state"), exports);
21
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/tools/helpers/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AACA,6CAA2B;AAG3B,6CAA2B;AAG3B,+CAA6B;AAG7B,0CAAwB"}
@@ -0,0 +1,9 @@
1
+ import type { ToolRunnableConfig } from '@langchain/core/tools';
2
+ import type { LangGraphRunnableConfig } from '@langchain/langgraph';
3
+ import type { ToolError, ProgressReporter, BatchReporter } from '../../types/tools';
4
+ export declare function createProgressReporter<TToolName extends string = string>(config: ToolRunnableConfig & LangGraphRunnableConfig, toolName: TToolName): ProgressReporter;
5
+ export declare function reportStart<T>(reporter: ProgressReporter, input: T): void;
6
+ export declare function reportProgress(reporter: ProgressReporter, message: string, data?: Record<string, unknown>): void;
7
+ export declare function reportComplete<T>(reporter: ProgressReporter, output: T): void;
8
+ export declare function reportError(reporter: ProgressReporter, error: ToolError): void;
9
+ export declare function createBatchProgressReporter(reporter: ProgressReporter, scope: string): BatchReporter;
@@ -0,0 +1,114 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.createProgressReporter = createProgressReporter;
4
+ exports.reportStart = reportStart;
5
+ exports.reportProgress = reportProgress;
6
+ exports.reportComplete = reportComplete;
7
+ exports.reportError = reportError;
8
+ exports.createBatchProgressReporter = createBatchProgressReporter;
9
+ function createProgressReporter(config, toolName) {
10
+ const toolCallId = config.toolCall?.id;
11
+ const emit = (message) => {
12
+ config.writer?.(message);
13
+ };
14
+ const start = (input) => {
15
+ emit({
16
+ type: 'tool',
17
+ toolName,
18
+ toolCallId,
19
+ status: 'running',
20
+ updates: [
21
+ {
22
+ type: 'input',
23
+ data: input,
24
+ },
25
+ ],
26
+ });
27
+ };
28
+ const progress = (message, data) => {
29
+ emit({
30
+ type: 'tool',
31
+ toolName,
32
+ toolCallId,
33
+ status: 'running',
34
+ updates: [
35
+ {
36
+ type: 'progress',
37
+ data: data ?? { message },
38
+ },
39
+ ],
40
+ });
41
+ };
42
+ const complete = (output) => {
43
+ emit({
44
+ type: 'tool',
45
+ toolName,
46
+ toolCallId,
47
+ status: 'completed',
48
+ updates: [
49
+ {
50
+ type: 'output',
51
+ data: output,
52
+ },
53
+ ],
54
+ });
55
+ };
56
+ const error = (error) => {
57
+ emit({
58
+ type: 'tool',
59
+ toolName,
60
+ toolCallId,
61
+ status: 'error',
62
+ updates: [
63
+ {
64
+ type: 'error',
65
+ data: {
66
+ message: error.message,
67
+ code: error.code,
68
+ details: error.details,
69
+ },
70
+ },
71
+ ],
72
+ });
73
+ };
74
+ const createBatchReporter = (scope) => {
75
+ let currentIndex = 0;
76
+ let totalItems = 0;
77
+ return {
78
+ init: (total) => {
79
+ totalItems = total;
80
+ currentIndex = 0;
81
+ },
82
+ next: (itemDescription) => {
83
+ currentIndex++;
84
+ progress(`${scope}: Processing item ${currentIndex} of ${totalItems}: ${itemDescription}`);
85
+ },
86
+ complete: () => {
87
+ progress(`${scope}: Completed all ${totalItems} items`);
88
+ },
89
+ };
90
+ };
91
+ return {
92
+ start,
93
+ progress,
94
+ complete,
95
+ error,
96
+ createBatchReporter,
97
+ };
98
+ }
99
+ function reportStart(reporter, input) {
100
+ reporter.start(input);
101
+ }
102
+ function reportProgress(reporter, message, data) {
103
+ reporter.progress(message, data);
104
+ }
105
+ function reportComplete(reporter, output) {
106
+ reporter.complete(output);
107
+ }
108
+ function reportError(reporter, error) {
109
+ reporter.error(error);
110
+ }
111
+ function createBatchProgressReporter(reporter, scope) {
112
+ return reporter.createBatchReporter(scope);
113
+ }
114
+ //# sourceMappingURL=progress.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"progress.js","sourceRoot":"","sources":["../../../src/tools/helpers/progress.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ import type { ToolRunnableConfig } from '@langchain/core/tools';
2
+ import { Command } from '@langchain/langgraph';
3
+ import type { ToolError } from '../../types/tools';
4
+ import type { StateUpdater } from '../../types/utils';
5
+ import type { WorkflowState } from '../../workflow-state';
6
+ export declare function createSuccessResponse<TState = typeof WorkflowState.State>(config: ToolRunnableConfig, message: string, stateUpdates?: StateUpdater<TState>): Command;
7
+ export declare function createErrorResponse(config: ToolRunnableConfig, error: ToolError): Command;
@@ -0,0 +1,31 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.createSuccessResponse = createSuccessResponse;
4
+ exports.createErrorResponse = createErrorResponse;
5
+ const messages_1 = require("@langchain/core/messages");
6
+ const langgraph_1 = require("@langchain/langgraph");
7
+ function createSuccessResponse(config, message, stateUpdates) {
8
+ const toolCallId = config.toolCall?.id;
9
+ const messages = [
10
+ new messages_1.ToolMessage({
11
+ content: message,
12
+ tool_call_id: toolCallId,
13
+ }),
14
+ ];
15
+ const update = { messages };
16
+ if (stateUpdates) {
17
+ Object.assign(update, stateUpdates);
18
+ }
19
+ return new langgraph_1.Command({ update });
20
+ }
21
+ function createErrorResponse(config, error) {
22
+ const toolCallId = config.toolCall?.id;
23
+ const messages = [
24
+ new messages_1.ToolMessage({
25
+ content: `Error: ${error.message}`,
26
+ tool_call_id: toolCallId,
27
+ }),
28
+ ];
29
+ return new langgraph_1.Command({ update: { messages } });
30
+ }
31
+ //# sourceMappingURL=response.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"response.js","sourceRoot":"","sources":["../../../src/tools/helpers/response.ts"],"names":[],"mappings":";;AAWA,sDAqBC;AAKD,kDAWC;AAhDD,uDAAuD;AAEvD,oDAA+C;AAS/C,SAAgB,qBAAqB,CACpC,MAA0B,EAC1B,OAAe,EACf,YAAmC;IAEnC,MAAM,UAAU,GAAG,MAAM,CAAC,QAAQ,EAAE,EAAY,CAAC;IAEjD,MAAM,QAAQ,GAAG;QAChB,IAAI,sBAAW,CAAC;YACf,OAAO,EAAE,OAAO;YAChB,YAAY,EAAE,UAAU;SACxB,CAAC;KACF,CAAC;IAEF,MAAM,MAAM,GAAG,EAAE,QAAQ,EAAE,CAAC;IAE5B,IAAI,YAAY,EAAE,CAAC;QAClB,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;IACrC,CAAC;IAED,OAAO,IAAI,mBAAO,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC;AAChC,CAAC;AAKD,SAAgB,mBAAmB,CAAC,MAA0B,EAAE,KAAgB;IAC/E,MAAM,UAAU,GAAG,MAAM,CAAC,QAAQ,EAAE,EAAY,CAAC;IAEjD,MAAM,QAAQ,GAAG;QAChB,IAAI,sBAAW,CAAC;YACf,OAAO,EAAE,UAAU,KAAK,CAAC,OAAO,EAAE;YAClC,YAAY,EAAE,UAAU;SACxB,CAAC;KACF,CAAC;IAEF,OAAO,IAAI,mBAAO,CAAC,EAAE,MAAM,EAAE,EAAE,QAAQ,EAAE,EAAE,CAAC,CAAC;AAC9C,CAAC"}
@@ -0,0 +1,13 @@
1
+ import type { INode, IConnection } from 'n8n-workflow';
2
+ import type { SimpleWorkflow } from '../../types/workflow';
3
+ import type { WorkflowState } from '../../workflow-state';
4
+ export declare function getCurrentWorkflow(state: typeof WorkflowState.State): SimpleWorkflow;
5
+ export declare function getWorkflowState(): typeof WorkflowState.State;
6
+ export declare function getCurrentWorkflowFromTaskInput(): SimpleWorkflow;
7
+ export declare function updateWorkflowConnections(connections: SimpleWorkflow['connections']): Partial<typeof WorkflowState.State>;
8
+ export declare function addNodeToWorkflow(node: INode): Partial<typeof WorkflowState.State>;
9
+ export declare function addNodesToWorkflow(nodes: INode[]): Partial<typeof WorkflowState.State>;
10
+ export declare function removeNodeFromWorkflow(nodeId: string): Partial<typeof WorkflowState.State>;
11
+ export declare function removeNodesFromWorkflow(nodeIds: string[]): Partial<typeof WorkflowState.State>;
12
+ export declare function updateNodeInWorkflow(state: typeof WorkflowState.State, nodeId: string, updates: Partial<INode>): Partial<typeof WorkflowState.State>;
13
+ export declare function addConnectionToWorkflow(sourceNodeId: string, _targetNodeId: string, connection: IConnection): Partial<typeof WorkflowState.State>;
@@ -0,0 +1,70 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.getCurrentWorkflow = getCurrentWorkflow;
4
+ exports.getWorkflowState = getWorkflowState;
5
+ exports.getCurrentWorkflowFromTaskInput = getCurrentWorkflowFromTaskInput;
6
+ exports.updateWorkflowConnections = updateWorkflowConnections;
7
+ exports.addNodeToWorkflow = addNodeToWorkflow;
8
+ exports.addNodesToWorkflow = addNodesToWorkflow;
9
+ exports.removeNodeFromWorkflow = removeNodeFromWorkflow;
10
+ exports.removeNodesFromWorkflow = removeNodesFromWorkflow;
11
+ exports.updateNodeInWorkflow = updateNodeInWorkflow;
12
+ exports.addConnectionToWorkflow = addConnectionToWorkflow;
13
+ const langgraph_1 = require("@langchain/langgraph");
14
+ function getCurrentWorkflow(state) {
15
+ return state.workflowJSON;
16
+ }
17
+ function getWorkflowState() {
18
+ return (0, langgraph_1.getCurrentTaskInput)();
19
+ }
20
+ function getCurrentWorkflowFromTaskInput() {
21
+ const state = getWorkflowState();
22
+ return getCurrentWorkflow(state);
23
+ }
24
+ function updateWorkflowConnections(connections) {
25
+ return {
26
+ workflowOperations: [{ type: 'mergeConnections', connections }],
27
+ };
28
+ }
29
+ function addNodeToWorkflow(node) {
30
+ return addNodesToWorkflow([node]);
31
+ }
32
+ function addNodesToWorkflow(nodes) {
33
+ return {
34
+ workflowOperations: [{ type: 'addNodes', nodes }],
35
+ };
36
+ }
37
+ function removeNodeFromWorkflow(nodeId) {
38
+ return {
39
+ workflowOperations: [{ type: 'removeNode', nodeIds: [nodeId] }],
40
+ };
41
+ }
42
+ function removeNodesFromWorkflow(nodeIds) {
43
+ return {
44
+ workflowOperations: [{ type: 'removeNode', nodeIds }],
45
+ };
46
+ }
47
+ function updateNodeInWorkflow(state, nodeId, updates) {
48
+ const existingNode = state.workflowJSON.nodes.find((n) => n.id === nodeId);
49
+ if (!existingNode) {
50
+ return {};
51
+ }
52
+ return {
53
+ workflowOperations: [{ type: 'updateNode', nodeId, updates }],
54
+ };
55
+ }
56
+ function addConnectionToWorkflow(sourceNodeId, _targetNodeId, connection) {
57
+ return {
58
+ workflowOperations: [
59
+ {
60
+ type: 'mergeConnections',
61
+ connections: {
62
+ [sourceNodeId]: {
63
+ main: [[connection]],
64
+ },
65
+ },
66
+ },
67
+ ],
68
+ };
69
+ }
70
+ //# sourceMappingURL=state.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"state.js","sourceRoot":"","sources":["../../../src/tools/helpers/state.ts"],"names":[],"mappings":";;AASA,gDAEC;AAED,4CAEC;AAKD,0EAGC;AAKD,8DAOC;AAKD,8CAEC;AAKD,gDAKC;AAKD,wDAKC;AAKD,0DAKC;AAKD,oDAcC;AAKD,0DAiBC;AAjHD,oDAA2D;AAS3D,SAAgB,kBAAkB,CAAC,KAAiC;IACnE,OAAO,KAAK,CAAC,YAAY,CAAC;AAC3B,CAAC;AAED,SAAgB,gBAAgB;IAC/B,OAAO,IAAA,+BAAmB,GAAE,CAAC;AAC9B,CAAC;AAKD,SAAgB,+BAA+B;IAC9C,MAAM,KAAK,GAAG,gBAAgB,EAAE,CAAC;IACjC,OAAO,kBAAkB,CAAC,KAAK,CAAC,CAAC;AAClC,CAAC;AAKD,SAAgB,yBAAyB,CACxC,WAA0C;IAG1C,OAAO;QACN,kBAAkB,EAAE,CAAC,EAAE,IAAI,EAAE,kBAAkB,EAAE,WAAW,EAAE,CAAC;KAC/D,CAAC;AACH,CAAC;AAKD,SAAgB,iBAAiB,CAAC,IAAW;IAC5C,OAAO,kBAAkB,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;AACnC,CAAC;AAKD,SAAgB,kBAAkB,CAAC,KAAc;IAEhD,OAAO;QACN,kBAAkB,EAAE,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,CAAC;KACjD,CAAC;AACH,CAAC;AAKD,SAAgB,sBAAsB,CAAC,MAAc;IAEpD,OAAO;QACN,kBAAkB,EAAE,CAAC,EAAE,IAAI,EAAE,YAAY,EAAE,OAAO,EAAE,CAAC,MAAM,CAAC,EAAE,CAAC;KAC/D,CAAC;AACH,CAAC;AAKD,SAAgB,uBAAuB,CAAC,OAAiB;IAExD,OAAO;QACN,kBAAkB,EAAE,CAAC,EAAE,IAAI,EAAE,YAAY,EAAE,OAAO,EAAE,CAAC;KACrD,CAAC;AACH,CAAC;AAKD,SAAgB,oBAAoB,CACnC,KAAiC,EACjC,MAAc,EACd,OAAuB;IAEvB,MAAM,YAAY,GAAG,KAAK,CAAC,YAAY,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,MAAM,CAAC,CAAC;IAC3E,IAAI,CAAC,YAAY,EAAE,CAAC;QACnB,OAAO,EAAE,CAAC;IACX,CAAC;IAGD,OAAO;QACN,kBAAkB,EAAE,CAAC,EAAE,IAAI,EAAE,YAAY,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC;KAC7D,CAAC;AACH,CAAC;AAKD,SAAgB,uBAAuB,CACtC,YAAoB,EACpB,aAAqB,EACrB,UAAuB;IAEvB,OAAO;QACN,kBAAkB,EAAE;YACnB;gBACC,IAAI,EAAE,kBAAkB;gBACxB,WAAW,EAAE;oBACZ,CAAC,YAAY,CAAC,EAAE;wBACf,IAAI,EAAE,CAAC,CAAC,UAAU,CAAC,CAAC;qBACpB;iBACD;aACD;SACD;KACD,CAAC;AACH,CAAC"}
@@ -0,0 +1,12 @@
1
+ import type { INode, INodeTypeDescription } from 'n8n-workflow';
2
+ import type { ToolError } from '../../types/tools';
3
+ import type { SimpleWorkflow } from '../../types/workflow';
4
+ export declare function validateNodeExists(nodeId: string, nodes: INode[]): INode | null;
5
+ export declare function findNodeByName(nodeName: string, nodes: INode[]): INode | null;
6
+ export declare function findNodeByIdOrName(nodeIdentifier: string, nodes: INode[]): INode | null;
7
+ export declare function findNodeType(nodeTypeName: string, nodeTypes: INodeTypeDescription[]): INodeTypeDescription | null;
8
+ export declare function validateConnection(sourceNode: INode, targetNode: INode): ToolError | null;
9
+ export declare function createValidationError(message: string, code: string, details?: Record<string, string>): ToolError;
10
+ export declare function createNodeNotFoundError(nodeIdentifier: string): ToolError;
11
+ export declare function createNodeTypeNotFoundError(nodeTypeName: string): ToolError;
12
+ export declare function hasNodes(workflow: SimpleWorkflow): boolean;
@@ -0,0 +1,69 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.validateNodeExists = validateNodeExists;
4
+ exports.findNodeByName = findNodeByName;
5
+ exports.findNodeByIdOrName = findNodeByIdOrName;
6
+ exports.findNodeType = findNodeType;
7
+ exports.validateConnection = validateConnection;
8
+ exports.createValidationError = createValidationError;
9
+ exports.createNodeNotFoundError = createNodeNotFoundError;
10
+ exports.createNodeTypeNotFoundError = createNodeTypeNotFoundError;
11
+ exports.hasNodes = hasNodes;
12
+ const errors_1 = require("../../errors");
13
+ function validateNodeExists(nodeId, nodes) {
14
+ return nodes.find((n) => n.id === nodeId) ?? null;
15
+ }
16
+ function findNodeByName(nodeName, nodes) {
17
+ return nodes.find((n) => n.name.toLowerCase() === nodeName.toLowerCase()) ?? null;
18
+ }
19
+ function findNodeByIdOrName(nodeIdentifier, nodes) {
20
+ const byId = validateNodeExists(nodeIdentifier, nodes);
21
+ if (byId)
22
+ return byId;
23
+ return findNodeByName(nodeIdentifier, nodes);
24
+ }
25
+ function findNodeType(nodeTypeName, nodeTypes) {
26
+ return nodeTypes.find((nt) => nt.name === nodeTypeName) ?? null;
27
+ }
28
+ function validateConnection(sourceNode, targetNode) {
29
+ if (sourceNode.id === targetNode.id) {
30
+ const error = new errors_1.ConnectionError('Cannot connect a node to itself', {
31
+ fromNodeId: sourceNode.id,
32
+ toNodeId: targetNode.id,
33
+ });
34
+ return {
35
+ message: error.message,
36
+ code: 'SELF_CONNECTION',
37
+ details: { sourceId: sourceNode.id, targetId: targetNode.id },
38
+ };
39
+ }
40
+ return null;
41
+ }
42
+ function createValidationError(message, code, details) {
43
+ const error = new errors_1.ValidationError(message, { tags: { code, ...details } });
44
+ return {
45
+ message: error.message,
46
+ code,
47
+ details,
48
+ };
49
+ }
50
+ function createNodeNotFoundError(nodeIdentifier) {
51
+ const error = new errors_1.NodeNotFoundError(nodeIdentifier);
52
+ return {
53
+ message: error.message,
54
+ code: 'NODE_NOT_FOUND',
55
+ details: { nodeIdentifier },
56
+ };
57
+ }
58
+ function createNodeTypeNotFoundError(nodeTypeName) {
59
+ const error = new errors_1.NodeTypeNotFoundError(nodeTypeName);
60
+ return {
61
+ message: error.message,
62
+ code: 'NODE_TYPE_NOT_FOUND',
63
+ details: { nodeTypeName },
64
+ };
65
+ }
66
+ function hasNodes(workflow) {
67
+ return workflow.nodes.length > 0;
68
+ }
69
+ //# sourceMappingURL=validation.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validation.js","sourceRoot":"","sources":["../../../src/tools/helpers/validation.ts"],"names":[],"mappings":";;AAcA,gDAEC;AAKD,wCAEC;AAKD,gDAOC;AAKD,oCAKC;AAKD,gDAeC;AAKD,sDAYC;AAKD,0DAOC;AAKD,kEAOC;AAKD,4BAEC;AA/GD,yCAKsB;AAOtB,SAAgB,kBAAkB,CAAC,MAAc,EAAE,KAAc;IAChE,OAAO,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,MAAM,CAAC,IAAI,IAAI,CAAC;AACnD,CAAC;AAKD,SAAgB,cAAc,CAAC,QAAgB,EAAE,KAAc;IAC9D,OAAO,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,EAAE,KAAK,QAAQ,CAAC,WAAW,EAAE,CAAC,IAAI,IAAI,CAAC;AACnF,CAAC;AAKD,SAAgB,kBAAkB,CAAC,cAAsB,EAAE,KAAc;IAExE,MAAM,IAAI,GAAG,kBAAkB,CAAC,cAAc,EAAE,KAAK,CAAC,CAAC;IACvD,IAAI,IAAI;QAAE,OAAO,IAAI,CAAC;IAGtB,OAAO,cAAc,CAAC,cAAc,EAAE,KAAK,CAAC,CAAC;AAC9C,CAAC;AAKD,SAAgB,YAAY,CAC3B,YAAoB,EACpB,SAAiC;IAEjC,OAAO,SAAS,CAAC,IAAI,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,IAAI,KAAK,YAAY,CAAC,IAAI,IAAI,CAAC;AACjE,CAAC;AAKD,SAAgB,kBAAkB,CAAC,UAAiB,EAAE,UAAiB;IAEtE,IAAI,UAAU,CAAC,EAAE,KAAK,UAAU,CAAC,EAAE,EAAE,CAAC;QACrC,MAAM,KAAK,GAAG,IAAI,wBAAe,CAAC,iCAAiC,EAAE;YACpE,UAAU,EAAE,UAAU,CAAC,EAAE;YACzB,QAAQ,EAAE,UAAU,CAAC,EAAE;SACvB,CAAC,CAAC;QACH,OAAO;YACN,OAAO,EAAE,KAAK,CAAC,OAAO;YACtB,IAAI,EAAE,iBAAiB;YACvB,OAAO,EAAE,EAAE,QAAQ,EAAE,UAAU,CAAC,EAAE,EAAE,QAAQ,EAAE,UAAU,CAAC,EAAE,EAAE;SAC7D,CAAC;IACH,CAAC;IAED,OAAO,IAAI,CAAC;AACb,CAAC;AAKD,SAAgB,qBAAqB,CACpC,OAAe,EACf,IAAY,EACZ,OAAgC;IAGhC,MAAM,KAAK,GAAG,IAAI,wBAAe,CAAC,OAAO,EAAE,EAAE,IAAI,EAAE,EAAE,IAAI,EAAE,GAAG,OAAO,EAAE,EAAE,CAAC,CAAC;IAC3E,OAAO;QACN,OAAO,EAAE,KAAK,CAAC,OAAO;QACtB,IAAI;QACJ,OAAO;KACP,CAAC;AACH,CAAC;AAKD,SAAgB,uBAAuB,CAAC,cAAsB;IAC7D,MAAM,KAAK,GAAG,IAAI,0BAAiB,CAAC,cAAc,CAAC,CAAC;IACpD,OAAO;QACN,OAAO,EAAE,KAAK,CAAC,OAAO;QACtB,IAAI,EAAE,gBAAgB;QACtB,OAAO,EAAE,EAAE,cAAc,EAAE;KAC3B,CAAC;AACH,CAAC;AAKD,SAAgB,2BAA2B,CAAC,YAAoB;IAC/D,MAAM,KAAK,GAAG,IAAI,8BAAqB,CAAC,YAAY,CAAC,CAAC;IACtD,OAAO;QACN,OAAO,EAAE,KAAK,CAAC,OAAO;QACtB,IAAI,EAAE,qBAAqB;QAC3B,OAAO,EAAE,EAAE,YAAY,EAAE;KACzB,CAAC;AACH,CAAC;AAKD,SAAgB,QAAQ,CAAC,QAAwB;IAChD,OAAO,QAAQ,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC;AAClC,CAAC"}
@@ -0,0 +1,19 @@
1
+ import type { INodeTypeDescription } from 'n8n-workflow';
2
+ import { z } from 'zod';
3
+ export declare function createNodeDetailsTool(nodeTypes: INodeTypeDescription[]): import("@langchain/core/tools").DynamicStructuredTool<z.ZodObject<{
4
+ nodeName: z.ZodString;
5
+ withParameters: z.ZodDefault<z.ZodOptional<z.ZodBoolean>>;
6
+ withConnections: z.ZodDefault<z.ZodOptional<z.ZodBoolean>>;
7
+ }, "strip", z.ZodTypeAny, {
8
+ nodeName: string;
9
+ withParameters: boolean;
10
+ withConnections: boolean;
11
+ }, {
12
+ nodeName: string;
13
+ withParameters?: boolean | undefined;
14
+ withConnections?: boolean | undefined;
15
+ }>, unknown, {
16
+ nodeName: string;
17
+ withParameters?: boolean | undefined;
18
+ withConnections?: boolean | undefined;
19
+ }, import("@langchain/langgraph").Command<unknown>>;