n8n-nodes-simple 2.0.1 → 2.2.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 (196) hide show
  1. package/dist/credentials/SimpleOpenAiApi.credentials.js +1 -1
  2. package/dist/credentials/SimpleOpenAiApi.credentials.js.map +1 -1
  3. package/dist/nodes/CoreAgent/CoreAgent.node.d.ts +3 -2
  4. package/dist/nodes/CoreAgent/CoreAgent.node.js +3 -3
  5. package/dist/nodes/CoreAgent/CoreAgent.node.js.map +1 -1
  6. package/dist/nodes/CoreAgent/description.js +15 -3
  7. package/dist/nodes/CoreAgent/description.js.map +1 -1
  8. package/dist/nodes/Subagent/Subagent.node.d.ts +3 -2
  9. package/dist/nodes/Subagent/Subagent.node.js +5 -5
  10. package/dist/nodes/Subagent/Subagent.node.js.map +1 -1
  11. package/dist/nodes/Subagent/description.js +16 -3
  12. package/dist/nodes/Subagent/description.js.map +1 -1
  13. package/dist/nodes/shared/actions/executor.js +1 -1
  14. package/dist/nodes/shared/actions/executor.js.map +1 -1
  15. package/dist/nodes/shared/actions/memory.d.ts +1 -1
  16. package/dist/nodes/shared/actions/memory.js +71 -19
  17. package/dist/nodes/shared/actions/memory.js.map +1 -1
  18. package/dist/nodes/shared/actions/message.operation.js +1 -1
  19. package/dist/nodes/shared/actions/message.operation.js.map +1 -1
  20. package/dist/nodes/shared/actions/messageProcessor.d.ts +1 -1
  21. package/dist/nodes/shared/actions/messageProcessor.js +9 -7
  22. package/dist/nodes/shared/actions/messageProcessor.js.map +1 -1
  23. package/dist/nodes/shared/actions/outputProcessor.js +29 -21
  24. package/dist/nodes/shared/actions/outputProcessor.js.map +1 -1
  25. package/dist/nodes/shared/actions/parameters.d.ts +2 -0
  26. package/dist/nodes/shared/actions/parameters.js +8 -1
  27. package/dist/nodes/shared/actions/parameters.js.map +1 -1
  28. package/dist/nodes/shared/actions/requestBuilder.js +2 -2
  29. package/dist/nodes/shared/actions/requestBuilder.js.map +1 -1
  30. package/dist/nodes/shared/actions/responseConfig.js +2 -2
  31. package/dist/nodes/shared/actions/responseConfig.js.map +1 -1
  32. package/dist/nodes/shared/actions/router.js +2 -2
  33. package/dist/nodes/shared/actions/router.js.map +1 -1
  34. package/dist/nodes/shared/actions/tool.js.map +1 -1
  35. package/dist/nodes/shared/actions/toolExecutor.js +78 -21
  36. package/dist/nodes/shared/actions/toolExecutor.js.map +1 -1
  37. package/dist/nodes/shared/actions/toolSetup.js +6 -5
  38. package/dist/nodes/shared/actions/toolSetup.js.map +1 -1
  39. package/dist/nodes/shared/api/openAiApiRequest.js.map +1 -1
  40. package/dist/nodes/shared/api/types.d.ts +2 -0
  41. package/dist/nodes/shared/api/utils.js.map +1 -1
  42. package/dist/nodes/shared/assets/gradientRobot.svg +11 -0
  43. package/dist/nodes/shared/assets/gradientRobotRed.svg +11 -0
  44. package/dist/nodes/shared/config/descriptionGenerator.d.ts +2 -0
  45. package/dist/nodes/shared/config/descriptionGenerator.js +36 -0
  46. package/dist/nodes/shared/config/descriptionGenerator.js.map +1 -0
  47. package/dist/nodes/shared/config/parameters.d.ts +26 -0
  48. package/dist/nodes/shared/config/parameters.js +35 -0
  49. package/dist/nodes/shared/config/parameters.js.map +1 -0
  50. package/dist/nodes/shared/config/properties/index.d.ts +2 -0
  51. package/dist/nodes/shared/config/properties/index.js +16 -0
  52. package/dist/nodes/shared/config/properties/index.js.map +1 -0
  53. package/dist/nodes/shared/config/properties/memory.d.ts +2 -0
  54. package/dist/nodes/shared/config/properties/memory.js +5 -0
  55. package/dist/nodes/shared/config/properties/memory.js.map +1 -0
  56. package/dist/nodes/shared/config/properties/messages.d.ts +2 -0
  57. package/dist/nodes/shared/config/properties/messages.js +109 -0
  58. package/dist/nodes/shared/config/properties/messages.js.map +1 -0
  59. package/dist/nodes/shared/config/properties/model.d.ts +2 -0
  60. package/dist/nodes/shared/config/properties/model.js +30 -0
  61. package/dist/nodes/shared/config/properties/model.js.map +1 -0
  62. package/dist/nodes/shared/config/properties/options.d.ts +2 -0
  63. package/dist/nodes/shared/config/properties/options.js +105 -0
  64. package/dist/nodes/shared/config/properties/options.js.map +1 -0
  65. package/dist/nodes/shared/config/properties/output.d.ts +2 -0
  66. package/dist/nodes/shared/config/properties/output.js +322 -0
  67. package/dist/nodes/shared/config/properties/output.js.map +1 -0
  68. package/dist/nodes/shared/config/properties/tools.d.ts +2 -0
  69. package/dist/nodes/shared/config/properties/tools.js +5 -0
  70. package/dist/nodes/shared/config/properties/tools.js.map +1 -0
  71. package/dist/nodes/shared/config/responseConfig.d.ts +3 -0
  72. package/dist/nodes/shared/config/responseConfig.js +26 -0
  73. package/dist/nodes/shared/config/responseConfig.js.map +1 -0
  74. package/dist/nodes/shared/core/execution/executor.d.ts +7 -0
  75. package/dist/nodes/shared/core/execution/executor.js +61 -0
  76. package/dist/nodes/shared/core/execution/executor.js.map +1 -0
  77. package/dist/nodes/shared/core/execution/messageOperation.d.ts +2 -0
  78. package/dist/nodes/shared/core/execution/messageOperation.js +14 -0
  79. package/dist/nodes/shared/core/execution/messageOperation.js.map +1 -0
  80. package/dist/nodes/shared/core/execution/router.d.ts +2 -0
  81. package/dist/nodes/shared/core/execution/router.js +117 -0
  82. package/dist/nodes/shared/core/execution/router.js.map +1 -0
  83. package/dist/nodes/shared/core/memory/index.d.ts +2 -0
  84. package/dist/nodes/shared/core/memory/index.js +19 -0
  85. package/dist/nodes/shared/core/memory/index.js.map +1 -0
  86. package/dist/nodes/shared/core/memory/io.d.ts +5 -0
  87. package/dist/nodes/shared/core/memory/io.js +93 -0
  88. package/dist/nodes/shared/core/memory/io.js.map +1 -0
  89. package/dist/nodes/shared/core/memory/optimizer.d.ts +3 -0
  90. package/dist/nodes/shared/core/memory/optimizer.js +30 -0
  91. package/dist/nodes/shared/core/memory/optimizer.js.map +1 -0
  92. package/dist/nodes/shared/core/memory/properties.d.ts +2 -0
  93. package/dist/nodes/shared/core/memory/properties.js +5 -0
  94. package/dist/nodes/shared/core/memory/properties.js.map +1 -0
  95. package/dist/nodes/shared/core/messages/chatHistory.d.ts +2 -0
  96. package/dist/nodes/shared/core/messages/chatHistory.js +63 -0
  97. package/dist/nodes/shared/core/messages/chatHistory.js.map +1 -0
  98. package/dist/nodes/shared/core/messages/converter.d.ts +4 -0
  99. package/dist/nodes/shared/core/messages/converter.js +76 -0
  100. package/dist/nodes/shared/core/messages/converter.js.map +1 -0
  101. package/dist/nodes/shared/core/messages/memoryOptimizer.d.ts +3 -0
  102. package/dist/nodes/shared/core/messages/memoryOptimizer.js +30 -0
  103. package/dist/nodes/shared/core/messages/memoryOptimizer.js.map +1 -0
  104. package/dist/nodes/shared/core/messages/processor.d.ts +4 -0
  105. package/dist/nodes/shared/core/messages/processor.js +23 -0
  106. package/dist/nodes/shared/core/messages/processor.js.map +1 -0
  107. package/dist/nodes/shared/core/messages/toolExtractor.d.ts +6 -0
  108. package/dist/nodes/shared/core/messages/toolExtractor.js +28 -0
  109. package/dist/nodes/shared/core/messages/toolExtractor.js.map +1 -0
  110. package/dist/nodes/shared/core/messages/types.d.ts +48 -0
  111. package/dist/nodes/shared/core/messages/types.js +12 -0
  112. package/dist/nodes/shared/core/messages/types.js.map +1 -0
  113. package/dist/nodes/shared/core/tools/connector.d.ts +3 -0
  114. package/dist/nodes/shared/core/tools/connector.js +37 -0
  115. package/dist/nodes/shared/core/tools/connector.js.map +1 -0
  116. package/dist/nodes/shared/core/tools/executor.d.ts +6 -0
  117. package/dist/nodes/shared/core/tools/executor.js +124 -0
  118. package/dist/nodes/shared/core/tools/executor.js.map +1 -0
  119. package/dist/nodes/shared/core/tools/manager.d.ts +2 -0
  120. package/dist/nodes/shared/core/tools/manager.js +51 -0
  121. package/dist/nodes/shared/core/tools/manager.js.map +1 -0
  122. package/dist/nodes/shared/core/tools/messageExtractor.d.ts +6 -0
  123. package/dist/nodes/shared/core/tools/messageExtractor.js +28 -0
  124. package/dist/nodes/shared/core/tools/messageExtractor.js.map +1 -0
  125. package/dist/nodes/shared/core/tools/n8nTool.d.ts +9 -0
  126. package/dist/nodes/shared/core/tools/n8nTool.js +91 -0
  127. package/dist/nodes/shared/core/tools/n8nTool.js.map +1 -0
  128. package/dist/nodes/shared/core/tools/schemaGenerator.d.ts +6 -0
  129. package/dist/nodes/shared/core/tools/schemaGenerator.js +23 -0
  130. package/dist/nodes/shared/core/tools/schemaGenerator.js.map +1 -0
  131. package/dist/nodes/shared/core/tools/setup.d.ts +8 -0
  132. package/dist/nodes/shared/core/tools/setup.js +59 -0
  133. package/dist/nodes/shared/core/tools/setup.js.map +1 -0
  134. package/dist/nodes/shared/core/tools/subagentTool.d.ts +11 -0
  135. package/dist/nodes/shared/core/tools/subagentTool.js +60 -0
  136. package/dist/nodes/shared/core/tools/subagentTool.js.map +1 -0
  137. package/dist/nodes/shared/descriptionGenerator.js +3 -7
  138. package/dist/nodes/shared/descriptionGenerator.js.map +1 -1
  139. package/dist/nodes/shared/message/chatHistoryProcessor.d.ts +2 -0
  140. package/dist/nodes/shared/message/chatHistoryProcessor.js +63 -0
  141. package/dist/nodes/shared/message/chatHistoryProcessor.js.map +1 -0
  142. package/dist/nodes/shared/message/memoryOptimizer.d.ts +3 -0
  143. package/dist/nodes/shared/message/memoryOptimizer.js +30 -0
  144. package/dist/nodes/shared/message/memoryOptimizer.js.map +1 -0
  145. package/dist/nodes/shared/message/messageConverter.d.ts +4 -0
  146. package/dist/nodes/shared/message/messageConverter.js +76 -0
  147. package/dist/nodes/shared/message/messageConverter.js.map +1 -0
  148. package/dist/nodes/shared/message/processor.d.ts +3 -7
  149. package/dist/nodes/shared/message/processor.js +8 -83
  150. package/dist/nodes/shared/message/processor.js.map +1 -1
  151. package/dist/nodes/shared/message/toolMessageExtractor.d.ts +6 -0
  152. package/dist/nodes/shared/message/toolMessageExtractor.js +28 -0
  153. package/dist/nodes/shared/message/toolMessageExtractor.js.map +1 -0
  154. package/dist/nodes/shared/message/types.d.ts +2 -0
  155. package/dist/nodes/shared/message/types.js +5 -5
  156. package/dist/nodes/shared/message/types.js.map +1 -1
  157. package/dist/nodes/shared/methods/index.d.ts +1 -1
  158. package/dist/nodes/shared/methods/index.js +1 -1
  159. package/dist/nodes/shared/methods/index.js.map +1 -1
  160. package/dist/nodes/shared/methods/listSearch.d.ts +3 -0
  161. package/dist/nodes/shared/methods/listSearch.js +4 -0
  162. package/dist/nodes/shared/methods/listSearch.js.map +1 -1
  163. package/dist/nodes/shared/processing/memory.d.ts +5 -0
  164. package/dist/nodes/shared/processing/memory.js +93 -0
  165. package/dist/nodes/shared/processing/memory.js.map +1 -0
  166. package/dist/nodes/shared/processing/outputProcessor.d.ts +5 -0
  167. package/dist/nodes/shared/processing/outputProcessor.js +112 -0
  168. package/dist/nodes/shared/processing/outputProcessor.js.map +1 -0
  169. package/dist/nodes/shared/processing/requestBuilder.d.ts +2 -0
  170. package/dist/nodes/shared/processing/requestBuilder.js +38 -0
  171. package/dist/nodes/shared/processing/requestBuilder.js.map +1 -0
  172. package/dist/nodes/shared/processing/visualEditor.d.ts +32 -0
  173. package/dist/nodes/shared/processing/visualEditor.js +70 -0
  174. package/dist/nodes/shared/processing/visualEditor.js.map +1 -0
  175. package/dist/nodes/shared/properties.js +75 -41
  176. package/dist/nodes/shared/properties.js.map +1 -1
  177. package/dist/nodes/shared/tool/subagentTool.d.ts +1 -1
  178. package/dist/nodes/shared/tool/subagentTool.js +4 -4
  179. package/dist/nodes/shared/tool/subagentTool.js.map +1 -1
  180. package/dist/nodes/shared/tool/visualEditor.d.ts +1 -1
  181. package/dist/nodes/shared/tool/visualEditor.js +20 -16
  182. package/dist/nodes/shared/tool/visualEditor.js.map +1 -1
  183. package/dist/nodes/shared/toolManager/getConnectedTools.js.map +1 -1
  184. package/dist/nodes/shared/toolManager/n8nTool.js.map +1 -1
  185. package/dist/nodes/shared/utils/descriptionGenerator.d.ts +2 -0
  186. package/dist/nodes/shared/utils/descriptionGenerator.js +36 -0
  187. package/dist/nodes/shared/utils/descriptionGenerator.js.map +1 -0
  188. package/dist/nodes/shared/utils/index.d.ts +1 -0
  189. package/dist/nodes/shared/utils/index.js +18 -0
  190. package/dist/nodes/shared/utils/index.js.map +1 -0
  191. package/dist/nodes/shared/utils/listSearch.d.ts +2 -0
  192. package/dist/nodes/shared/utils/listSearch.js +34 -0
  193. package/dist/nodes/shared/utils/listSearch.js.map +1 -0
  194. package/dist/package.json +1 -1
  195. package/dist/tsconfig.tsbuildinfo +1 -1
  196. package/package.json +1 -1
@@ -0,0 +1,4 @@
1
+ import type { IDataObject } from 'n8n-workflow';
2
+ import type { BaseChatMemory } from 'langchain/memory';
3
+ import { Message } from './types';
4
+ export declare function processMessages(rawMessagesToSend: Message[], memory: BaseChatMemory | undefined, parentMessageContentStr: string, parentMessageContentObj: object, loadToolCallsFromChatMemory?: boolean): Promise<IDataObject[]>;
@@ -0,0 +1,23 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.processMessages = processMessages;
4
+ const chatHistory_1 = require("./chatHistory");
5
+ async function processMessages(rawMessagesToSend, memory, parentMessageContentStr, parentMessageContentObj, loadToolCallsFromChatMemory = true) {
6
+ let messages = (await (0, chatHistory_1.unpackChatHistoryAndMemory)(rawMessagesToSend, memory, loadToolCallsFromChatMemory));
7
+ messages = messages
8
+ .map((item) => ({
9
+ ...item,
10
+ content: typeof item.content === 'string' ? item.content.trim() : item.content,
11
+ }))
12
+ .filter((item) => item.content !== '' ||
13
+ (item.role === 'assistant' && item.tool_calls) ||
14
+ item.role === 'tool');
15
+ if (parentMessageContentStr !== '') {
16
+ messages.push({ role: 'user', content: parentMessageContentStr });
17
+ }
18
+ else if (Object.keys(parentMessageContentObj).length !== 0) {
19
+ messages.push({ role: 'user', content: JSON.stringify(parentMessageContentObj) });
20
+ }
21
+ return messages;
22
+ }
23
+ //# sourceMappingURL=processor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"processor.js","sourceRoot":"","sources":["../../../../../nodes/shared/core/messages/processor.ts"],"names":[],"mappings":";;AAQA,0CAsCC;AA3CD,+CAA2D;AAKpD,KAAK,UAAU,eAAe,CACpC,iBAA4B,EAC5B,MAAkC,EAClC,uBAA+B,EAC/B,uBAA+B,EAC/B,8BAAuC,IAAI;IAG3C,IAAI,QAAQ,GAAG,CAAC,MAAM,IAAA,wCAA0B,EAC/C,iBAAiB,EACjB,MAAM,EACN,2BAA2B,CAC3B,CAAkB,CAAC;IAGpB,QAAQ,GAAG,QAAQ;SACjB,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;QACf,GAAG,IAAI;QACP,OAAO,EAAE,OAAO,IAAI,CAAC,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO;KAC9E,CAAC,CAAC;SACF,MAAM,CACN,CAAC,IAAI,EAAE,EAAE,CACR,IAAI,CAAC,OAAO,KAAK,EAAE;QACnB,CAAE,IAAY,CAAC,IAAI,KAAK,WAAW,IAAK,IAAY,CAAC,UAAU,CAAC;QAC/D,IAAY,CAAC,IAAI,KAAK,MAAM,CAC9B,CAAC;IAGH,IAAI,uBAAuB,KAAK,EAAE,EAAE,CAAC;QAEpC,QAAQ,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,uBAAuB,EAAE,CAAC,CAAC;IACnE,CAAC;SAAM,IAAI,MAAM,CAAC,IAAI,CAAC,uBAAuB,CAAC,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAG9D,QAAQ,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,CAAC,SAAS,CAAC,uBAAuB,CAAC,EAAE,CAAC,CAAC;IACnF,CAAC;IAED,OAAO,QAAQ,CAAC;AACjB,CAAC"}
@@ -0,0 +1,6 @@
1
+ import { Message } from './types';
2
+ export declare function extractToolMessages(messagesFromRequestBody: Message[]): {
3
+ tool: string;
4
+ input: string;
5
+ output: string;
6
+ }[];
@@ -0,0 +1,28 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.extractToolMessages = extractToolMessages;
4
+ function extractToolMessages(messagesFromRequestBody) {
5
+ const toolMessagesFromRequestBody = messagesFromRequestBody.filter((msg) => msg.role === 'tool');
6
+ const processedToolMessages = [];
7
+ for (const message of messagesFromRequestBody) {
8
+ if (message.role === 'assistant' && message.tool_calls && message.tool_calls.length > 0) {
9
+ for (const toolCall of message.tool_calls) {
10
+ const toolName = toolCall.function.name;
11
+ let toolInput = JSON.parse(toolCall.function.arguments);
12
+ if (toolInput.input && Object.entries(toolInput).length === 1) {
13
+ toolInput = toolInput.input;
14
+ }
15
+ const toolMessage = toolMessagesFromRequestBody.find((toolMsg) => toolMsg.tool_call_id === toolCall.id);
16
+ if (toolMessage) {
17
+ processedToolMessages.push({
18
+ tool: toolName,
19
+ input: toolInput,
20
+ output: toolMessage.content,
21
+ });
22
+ }
23
+ }
24
+ }
25
+ }
26
+ return processedToolMessages;
27
+ }
28
+ //# sourceMappingURL=toolExtractor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"toolExtractor.js","sourceRoot":"","sources":["../../../../../nodes/shared/core/messages/toolExtractor.ts"],"names":[],"mappings":";;AAOA,kDAiCC;AAjCD,SAAgB,mBAAmB,CAClC,uBAAkC;IAElC,MAAM,2BAA2B,GAAG,uBAAuB,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,IAAI,KAAK,MAAM,CAAC,CAAC;IACjG,MAAM,qBAAqB,GAAsD,EAAE,CAAC;IAEpF,KAAK,MAAM,OAAO,IAAI,uBAAuB,EAAE,CAAC;QAC/C,IAAI,OAAO,CAAC,IAAI,KAAK,WAAW,IAAI,OAAO,CAAC,UAAU,IAAI,OAAO,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACzF,KAAK,MAAM,QAAQ,IAAI,OAAO,CAAC,UAAU,EAAE,CAAC;gBAC3C,MAAM,QAAQ,GAAG,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC;gBACxC,IAAI,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;gBAGxD,IAAI,SAAS,CAAC,KAAK,IAAI,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;oBAC/D,SAAS,GAAG,SAAS,CAAC,KAAK,CAAC;gBAC7B,CAAC;gBAED,MAAM,WAAW,GAAG,2BAA2B,CAAC,IAAI,CACnD,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,YAAY,KAAK,QAAQ,CAAC,EAAE,CACjD,CAAC;gBAEF,IAAI,WAAW,EAAE,CAAC;oBACjB,qBAAqB,CAAC,IAAI,CAAC;wBAC1B,IAAI,EAAE,QAAQ;wBACd,KAAK,EAAE,SAAS;wBAChB,MAAM,EAAE,WAAW,CAAC,OAAQ;qBAC5B,CAAC,CAAC;gBACJ,CAAC;YACF,CAAC;QACF,CAAC;IACF,CAAC;IAED,OAAO,qBAAqB,CAAC;AAC9B,CAAC"}
@@ -0,0 +1,48 @@
1
+ type ToolCall = {
2
+ id: string;
3
+ type: string;
4
+ function: {
5
+ name: string;
6
+ arguments: string;
7
+ };
8
+ };
9
+ export type Message = {
10
+ role: string;
11
+ content: string | null;
12
+ tool_calls?: ToolCall[];
13
+ tool_call_id?: string;
14
+ refusal?: string | null;
15
+ saveToolCallsInChatMemory?: boolean;
16
+ loadToolCallsFromChatMemory?: boolean;
17
+ };
18
+ export type RawMessage = Message & {
19
+ chatHistoryJson?: string | object[] | null;
20
+ };
21
+ type Choice = {
22
+ index: number;
23
+ message: Message;
24
+ logprobs: boolean | null;
25
+ finish_reason: string;
26
+ };
27
+ type CompletionTokenDetails = {
28
+ reasoning_tokens: number;
29
+ accepted_prediction_tokens: number;
30
+ rejected_prediction_tokens: number;
31
+ };
32
+ type Usage = {
33
+ prompt_tokens: number;
34
+ completion_tokens: number;
35
+ total_tokens: number;
36
+ completion_tokens_details: CompletionTokenDetails;
37
+ };
38
+ export type Response = {
39
+ id: string;
40
+ object: string;
41
+ created: number;
42
+ model: string;
43
+ system_fingerprint: string;
44
+ choices: Choice[];
45
+ usage: Usage;
46
+ };
47
+ export declare function isValidMessage(item: any): item is Message;
48
+ export {};
@@ -0,0 +1,12 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.isValidMessage = isValidMessage;
4
+ function isValidMessage(item) {
5
+ return (typeof item === 'object' &&
6
+ item !== null &&
7
+ 'role' in item &&
8
+ 'content' in item &&
9
+ typeof item.role === 'string' &&
10
+ (typeof item.content === 'string' || item.content === null));
11
+ }
12
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../../../nodes/shared/core/messages/types.ts"],"names":[],"mappings":";;AA0DA,wCASC;AATD,SAAgB,cAAc,CAAC,IAAS;IACvC,OAAO,CACN,OAAO,IAAI,KAAK,QAAQ;QACxB,IAAI,KAAK,IAAI;QACb,MAAM,IAAI,IAAI;QACd,SAAS,IAAI,IAAI;QACjB,OAAO,IAAI,CAAC,IAAI,KAAK,QAAQ;QAC7B,CAAC,OAAO,IAAI,CAAC,OAAO,KAAK,QAAQ,IAAI,IAAI,CAAC,OAAO,KAAK,IAAI,CAAC,CAC3D,CAAC;AACH,CAAC"}
@@ -0,0 +1,3 @@
1
+ import { type IExecuteFunctions } from 'n8n-workflow';
2
+ import type { Tool } from '@langchain/core/tools';
3
+ export declare const getConnectedTools: (ctx: IExecuteFunctions, enforceUniqueNames: boolean, convertStructuredTool?: boolean) => Promise<Tool[]>;
@@ -0,0 +1,37 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.getConnectedTools = void 0;
4
+ const n8n_workflow_1 = require("n8n-workflow");
5
+ const n8nTool_1 = require("./n8nTool");
6
+ const getConnectedTools = async (ctx, enforceUniqueNames, convertStructuredTool = true) => {
7
+ try {
8
+ const connectedTools = (await ctx.getInputConnectionData(n8n_workflow_1.NodeConnectionTypes.AiTool, 0)) || [];
9
+ if (!enforceUniqueNames)
10
+ return connectedTools;
11
+ const seenNames = new Set();
12
+ const finalTools = [];
13
+ for (const tool of connectedTools) {
14
+ const { name } = tool;
15
+ if (seenNames.has(name)) {
16
+ throw new n8n_workflow_1.NodeOperationError(ctx.getNode(), `You have multiple tools with the same name: '${name}', please rename them to avoid conflicts`);
17
+ }
18
+ seenNames.add(name);
19
+ if (convertStructuredTool && tool instanceof n8nTool_1.N8nTool) {
20
+ finalTools.push(tool.asDynamicTool());
21
+ }
22
+ else {
23
+ finalTools.push(tool);
24
+ }
25
+ }
26
+ return finalTools;
27
+ }
28
+ catch (error) {
29
+ if (error.message && error.message.includes('Tool must be connected to a root node')) {
30
+ console.warn('Warning: Tool connection issue detected. Make sure your tool nodes are properly connected to root nodes in the workflow.');
31
+ return [];
32
+ }
33
+ throw error;
34
+ }
35
+ };
36
+ exports.getConnectedTools = getConnectedTools;
37
+ //# sourceMappingURL=connector.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"connector.js","sourceRoot":"","sources":["../../../../../nodes/shared/core/tools/connector.ts"],"names":[],"mappings":";;;AAEA,+CAA+F;AAG/F,uCAAoC;AAE7B,MAAM,iBAAiB,GAAG,KAAK,EACrC,GAAsB,EACtB,kBAA2B,EAC3B,wBAAiC,IAAI,EACpC,EAAE;IACH,IAAI,CAAC;QACJ,MAAM,cAAc,GAClB,CAAC,MAAM,GAAG,CAAC,sBAAsB,CAAC,kCAAmB,CAAC,MAAM,EAAE,CAAC,CAAC,CAAY,IAAI,EAAE,CAAC;QAErF,IAAI,CAAC,kBAAkB;YAAE,OAAO,cAAc,CAAC;QAE/C,MAAM,SAAS,GAAG,IAAI,GAAG,EAAU,CAAC;QAEpC,MAAM,UAAU,GAAG,EAAE,CAAC;QAEtB,KAAK,MAAM,IAAI,IAAI,cAAc,EAAE,CAAC;YACnC,MAAM,EAAE,IAAI,EAAE,GAAG,IAAI,CAAC;YACtB,IAAI,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;gBACzB,MAAM,IAAI,iCAAkB,CAC3B,GAAG,CAAC,OAAO,EAAE,EACb,gDAAgD,IAAI,0CAA0C,CAC9F,CAAC;YACH,CAAC;YACD,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;YAEpB,IAAI,qBAAqB,IAAI,IAAI,YAAY,iBAAO,EAAE,CAAC;gBACtD,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,CAAC,CAAC;YACvC,CAAC;iBAAM,CAAC;gBACP,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACvB,CAAC;QACF,CAAC;QAED,OAAO,UAAU,CAAC;IACnB,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QAEhB,IAAI,KAAK,CAAC,OAAO,IAAI,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,uCAAuC,CAAC,EAAE,CAAC;YACtF,OAAO,CAAC,IAAI,CACX,0HAA0H,CAC1H,CAAC;YACF,OAAO,EAAE,CAAC;QACX,CAAC;QAED,MAAM,KAAK,CAAC;IACb,CAAC;AACF,CAAC,CAAC;AA5CW,QAAA,iBAAiB,qBA4C5B"}
@@ -0,0 +1,6 @@
1
+ import type { IExecuteFunctions, IDataObject } from 'n8n-workflow';
2
+ import type { ChatCompletion } from '../../api/types';
3
+ export declare function processToolCalls(executeFunctions: IExecuteFunctions, body: IDataObject, messages: IDataObject[], invokableTools: any[], structuredOutputTool: IDataObject | undefined, maxToolsIterations: number, abortSignal: AbortSignal | undefined): Promise<{
4
+ response: ChatCompletion;
5
+ output: any;
6
+ }>;
@@ -0,0 +1,124 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.processToolCalls = processToolCalls;
4
+ const n8n_workflow_1 = require("n8n-workflow");
5
+ const openAiApiRequest_1 = require("../../api/openAiApiRequest");
6
+ async function processToolCalls(executeFunctions, body, messages, invokableTools, structuredOutputTool, maxToolsIterations, abortSignal) {
7
+ var _a, _b, _c, _d, _e, _f;
8
+ const processedToolCallIds = new Set();
9
+ let response = (await openAiApiRequest_1.openAiApiRequest.call(executeFunctions, 'POST', `/chat/completions`, {
10
+ body,
11
+ }));
12
+ if (response === null || response === void 0 ? void 0 : response.error) {
13
+ throw new Error(String(response.error));
14
+ }
15
+ if (!response) {
16
+ throw new Error('No response received from OpenAI API');
17
+ }
18
+ let toolCalls = (_b = (_a = response === null || response === void 0 ? void 0 : response.choices[0]) === null || _a === void 0 ? void 0 : _a.message) === null || _b === void 0 ? void 0 : _b.tool_calls;
19
+ let currentIteration = 1;
20
+ var output = null;
21
+ while (toolCalls === null || toolCalls === void 0 ? void 0 : toolCalls.length) {
22
+ const shouldMakeFinalCall = maxToolsIterations >= 0 && currentIteration > maxToolsIterations;
23
+ if (abortSignal === null || abortSignal === void 0 ? void 0 : abortSignal.aborted) {
24
+ break;
25
+ }
26
+ if (shouldMakeFinalCall) {
27
+ let finalBody;
28
+ if (structuredOutputTool && !output) {
29
+ finalBody = {
30
+ ...body,
31
+ messages: messages,
32
+ tools: [structuredOutputTool],
33
+ tool_choice: 'required',
34
+ };
35
+ }
36
+ else {
37
+ finalBody = {
38
+ ...body,
39
+ messages: messages,
40
+ tools: [],
41
+ tool_choice: undefined,
42
+ };
43
+ }
44
+ response = (await openAiApiRequest_1.openAiApiRequest.call(executeFunctions, 'POST', `/chat/completions`, {
45
+ body: finalBody,
46
+ }));
47
+ if (structuredOutputTool && !output && ((_e = (_d = (_c = response === null || response === void 0 ? void 0 : response.choices) === null || _c === void 0 ? void 0 : _c[0]) === null || _d === void 0 ? void 0 : _d.message) === null || _e === void 0 ? void 0 : _e.tool_calls)) {
48
+ const finalToolCalls = response.choices[0].message.tool_calls;
49
+ for (const toolCall of finalToolCalls) {
50
+ if (structuredOutputTool.function.name ===
51
+ toolCall.function.name) {
52
+ output = (0, n8n_workflow_1.jsonParse)(toolCall.function.arguments);
53
+ break;
54
+ }
55
+ }
56
+ }
57
+ break;
58
+ }
59
+ for (const toolCall of toolCalls) {
60
+ const calledFunctionName = toolCall.function.name;
61
+ const calledFunctionArgs = toolCall.function.arguments;
62
+ const toolCallId = toolCall.id;
63
+ if (processedToolCallIds.has(toolCallId)) {
64
+ console.log(`Skipping duplicate tool call ID: ${toolCallId}`);
65
+ continue;
66
+ }
67
+ processedToolCallIds.add(toolCallId);
68
+ let content = null;
69
+ let toolFound = false;
70
+ try {
71
+ for (const invokableTool of invokableTools !== null && invokableTools !== void 0 ? invokableTools : []) {
72
+ if (structuredOutputTool &&
73
+ structuredOutputTool.function.name === calledFunctionName) {
74
+ output = (0, n8n_workflow_1.jsonParse)(calledFunctionArgs);
75
+ toolFound = true;
76
+ break;
77
+ }
78
+ if (invokableTool.name === calledFunctionName) {
79
+ const parsedArgs = (0, n8n_workflow_1.jsonParse)(calledFunctionArgs);
80
+ content = await invokableTool.invoke(parsedArgs);
81
+ content =
82
+ Array.isArray(content) && typeof ((_f = content[0]) === null || _f === void 0 ? void 0 : _f.text) === 'string'
83
+ ? content[0].text
84
+ : content;
85
+ toolFound = true;
86
+ break;
87
+ }
88
+ }
89
+ if (!toolFound) {
90
+ content = `Error: Tool '${calledFunctionName}' not found in available tools`;
91
+ console.error(`Tool not found: ${calledFunctionName}`);
92
+ }
93
+ }
94
+ catch (error) {
95
+ content = `Error executing tool '${calledFunctionName}': ${error instanceof Error ? error.message : String(error)}`;
96
+ }
97
+ if (output) {
98
+ break;
99
+ }
100
+ if (toolCalls.indexOf(toolCall) === 0) {
101
+ messages.push(response.choices[0].message);
102
+ }
103
+ messages.push({
104
+ tool_call_id: toolCallId,
105
+ role: 'tool',
106
+ content: typeof content === 'string' ? content : JSON.stringify(content),
107
+ });
108
+ }
109
+ if (output) {
110
+ break;
111
+ }
112
+ const nextIterationBody = {
113
+ ...body,
114
+ messages: messages,
115
+ };
116
+ response = (await openAiApiRequest_1.openAiApiRequest.call(executeFunctions, 'POST', `/chat/completions`, {
117
+ body: nextIterationBody,
118
+ }));
119
+ toolCalls = response.choices[0].message.tool_calls;
120
+ currentIteration += 1;
121
+ }
122
+ return { response, output };
123
+ }
124
+ //# sourceMappingURL=executor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"executor.js","sourceRoot":"","sources":["../../../../../nodes/shared/core/tools/executor.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ import { type ISupplyDataFunctions, type SupplyData } from 'n8n-workflow';
2
+ export declare function executeAsTool(this: ISupplyDataFunctions, itemIndex: number): Promise<SupplyData>;
@@ -0,0 +1,51 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.executeAsTool = executeAsTool;
4
+ const n8n_workflow_1 = require("n8n-workflow");
5
+ const tools_1 = require("@langchain/core/tools");
6
+ const subagentTool_1 = require("./subagentTool");
7
+ async function executeAsTool(itemIndex) {
8
+ const name = this.getNodeParameter('name', itemIndex, 'subagent');
9
+ const description = this.getNodeParameter('description', itemIndex, 'Message an AI subagent.');
10
+ const toolHandler = async (input) => {
11
+ const formattedInput = typeof input === 'string' ? { input } : input;
12
+ const { index } = this.addInputData(n8n_workflow_1.NodeConnectionTypes.AiTool, [[{ json: formattedInput }]]);
13
+ let response = '';
14
+ let executionError;
15
+ try {
16
+ const subagentTool = new subagentTool_1.SubagentTool(this);
17
+ response = await subagentTool._call(input);
18
+ }
19
+ catch (error) {
20
+ executionError = new n8n_workflow_1.NodeOperationError(this.getNode(), error);
21
+ response = `There was an error: "${executionError.message}"`;
22
+ }
23
+ if (typeof response === 'number') {
24
+ response = response.toString();
25
+ }
26
+ if (typeof response !== 'string') {
27
+ executionError = new n8n_workflow_1.NodeOperationError(this.getNode(), 'Wrong output type returned', {
28
+ description: `The response property should be a string, but it is an ${typeof response}`,
29
+ });
30
+ response = `There was an error: "${executionError.message}"`;
31
+ }
32
+ if (executionError) {
33
+ void this.addOutputData(n8n_workflow_1.NodeConnectionTypes.AiTool, index, executionError);
34
+ }
35
+ else {
36
+ void this.addOutputData(n8n_workflow_1.NodeConnectionTypes.AiTool, index, [[{ json: { response } }]]);
37
+ }
38
+ return response;
39
+ };
40
+ const commonToolOptions = {
41
+ name: name,
42
+ description: description,
43
+ func: toolHandler,
44
+ };
45
+ let tool = undefined;
46
+ tool = new tools_1.DynamicTool(commonToolOptions);
47
+ return {
48
+ response: tool,
49
+ };
50
+ }
51
+ //# sourceMappingURL=manager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"manager.js","sourceRoot":"","sources":["../../../../../nodes/shared/core/tools/manager.ts"],"names":[],"mappings":";;AAaA,sCAmEC;AAhFD,+CAQsB;AACtB,iDAAoD;AAEpD,iDAA8C;AAEvC,KAAK,UAAU,aAAa,CAElC,SAAiB;IAGjB,MAAM,IAAI,GAAG,IAAI,CAAC,gBAAgB,CAAC,MAAM,EAAE,SAAS,EAAE,UAAU,CAAW,CAAC;IAC5E,MAAM,WAAW,GAAG,IAAI,CAAC,gBAAgB,CACxC,aAAa,EACb,SAAS,EACT,yBAAyB,CACf,CAAC;IAEZ,MAAM,WAAW,GAAG,KAAK,EAAE,KAA2B,EAAmB,EAAE;QAC1E,MAAM,cAAc,GAAgB,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC;QAGlF,MAAM,EAAE,KAAK,EAAE,GAAG,IAAI,CAAC,YAAY,CAAC,kCAAmB,CAAC,MAAM,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,cAAc,EAAE,CAAC,CAAC,CAAC,CAAC;QAE9F,IAAI,QAAQ,GAAW,EAAE,CAAC;QAC1B,IAAI,cAA0C,CAAC;QAG/C,IAAI,CAAC;YACJ,MAAM,YAAY,GAAG,IAAI,2BAAY,CAAC,IAAoC,CAAC,CAAC;YAC5E,QAAQ,GAAG,MAAM,YAAY,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QAC5C,CAAC;QAAC,OAAO,KAAc,EAAE,CAAC;YACzB,cAAc,GAAG,IAAI,iCAAkB,CAAC,IAAI,CAAC,OAAO,EAAE,EAAE,KAAuB,CAAC,CAAC;YACjF,QAAQ,GAAG,wBAAwB,cAAc,CAAC,OAAO,GAAG,CAAC;QAC9D,CAAC;QAED,IAAI,OAAO,QAAQ,KAAK,QAAQ,EAAE,CAAC;YAClC,QAAQ,GAAI,QAAmB,CAAC,QAAQ,EAAE,CAAC;QAC5C,CAAC;QAED,IAAI,OAAO,QAAQ,KAAK,QAAQ,EAAE,CAAC;YAElC,cAAc,GAAG,IAAI,iCAAkB,CAAC,IAAI,CAAC,OAAO,EAAE,EAAE,4BAA4B,EAAE;gBACrF,WAAW,EAAE,0DAA0D,OAAO,QAAQ,EAAE;aACxF,CAAC,CAAC;YACH,QAAQ,GAAG,wBAAwB,cAAc,CAAC,OAAO,GAAG,CAAC;QAC9D,CAAC;QAED,IAAI,cAAc,EAAE,CAAC;YACpB,KAAK,IAAI,CAAC,aAAa,CAAC,kCAAmB,CAAC,MAAM,EAAE,KAAK,EAAE,cAAc,CAAC,CAAC;QAC5E,CAAC;aAAM,CAAC;YACP,KAAK,IAAI,CAAC,aAAa,CAAC,kCAAmB,CAAC,MAAM,EAAE,KAAK,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,EAAE,QAAQ,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC;QACxF,CAAC;QAED,OAAO,QAAQ,CAAC;IACjB,CAAC,CAAC;IAGF,MAAM,iBAAiB,GAAG;QACzB,IAAI,EAAE,IAAI;QACV,WAAW,EAAE,WAAW;QACxB,IAAI,EAAE,WAAW;KACjB,CAAC;IAEF,IAAI,IAAI,GAA4B,SAAS,CAAC;IAI9C,IAAI,GAAG,IAAI,mBAAW,CAAC,iBAAiB,CAAC,CAAC;IAE1C,OAAO;QACN,QAAQ,EAAE,IAAI;KACd,CAAC;AACH,CAAC"}
@@ -0,0 +1,6 @@
1
+ import { Message } from '../messages/types';
2
+ export declare function extractToolMessages(messagesFromRequestBody: Message[]): {
3
+ tool: string;
4
+ input: string;
5
+ output: string;
6
+ }[];
@@ -0,0 +1,28 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.extractToolMessages = extractToolMessages;
4
+ function extractToolMessages(messagesFromRequestBody) {
5
+ const toolMessagesFromRequestBody = messagesFromRequestBody.filter((msg) => msg.role === 'tool');
6
+ const processedToolMessages = [];
7
+ for (const message of messagesFromRequestBody) {
8
+ if (message.role === 'assistant' && message.tool_calls && message.tool_calls.length > 0) {
9
+ for (const toolCall of message.tool_calls) {
10
+ const toolName = toolCall.function.name;
11
+ let toolInput = JSON.parse(toolCall.function.arguments);
12
+ if (toolInput.input && Object.entries(toolInput).length === 1) {
13
+ toolInput = toolInput.input;
14
+ }
15
+ const toolMessage = toolMessagesFromRequestBody.find((toolMsg) => toolMsg.tool_call_id === toolCall.id);
16
+ if (toolMessage) {
17
+ processedToolMessages.push({
18
+ tool: toolName,
19
+ input: toolInput,
20
+ output: toolMessage.content,
21
+ });
22
+ }
23
+ }
24
+ }
25
+ }
26
+ return processedToolMessages;
27
+ }
28
+ //# sourceMappingURL=messageExtractor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"messageExtractor.js","sourceRoot":"","sources":["../../../../../nodes/shared/core/tools/messageExtractor.ts"],"names":[],"mappings":";;AAOA,kDAiCC;AAjCD,SAAgB,mBAAmB,CAClC,uBAAkC;IAElC,MAAM,2BAA2B,GAAG,uBAAuB,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,IAAI,KAAK,MAAM,CAAC,CAAC;IACjG,MAAM,qBAAqB,GAAsD,EAAE,CAAC;IAEpF,KAAK,MAAM,OAAO,IAAI,uBAAuB,EAAE,CAAC;QAC/C,IAAI,OAAO,CAAC,IAAI,KAAK,WAAW,IAAI,OAAO,CAAC,UAAU,IAAI,OAAO,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACzF,KAAK,MAAM,QAAQ,IAAI,OAAO,CAAC,UAAU,EAAE,CAAC;gBAC3C,MAAM,QAAQ,GAAG,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC;gBACxC,IAAI,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;gBAGxD,IAAI,SAAS,CAAC,KAAK,IAAI,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;oBAC/D,SAAS,GAAG,SAAS,CAAC,KAAK,CAAC;gBAC7B,CAAC;gBAED,MAAM,WAAW,GAAG,2BAA2B,CAAC,IAAI,CACnD,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,YAAY,KAAK,QAAQ,CAAC,EAAE,CACjD,CAAC;gBAEF,IAAI,WAAW,EAAE,CAAC;oBACjB,qBAAqB,CAAC,IAAI,CAAC;wBAC1B,IAAI,EAAE,QAAQ;wBACd,KAAK,EAAE,SAAS;wBAChB,MAAM,EAAE,WAAW,CAAC,OAAQ;qBAC5B,CAAC,CAAC;gBACJ,CAAC;YACF,CAAC;QACF,CAAC;IACF,CAAC;IAED,OAAO,qBAAqB,CAAC;AAC9B,CAAC"}
@@ -0,0 +1,9 @@
1
+ import { type ISupplyDataFunctions } from 'n8n-workflow';
2
+ import { DynamicTool, DynamicStructuredTool, DynamicStructuredToolInput } from '@langchain/core/tools';
3
+ import { ZodObject } from 'zod';
4
+ export declare const prepareFallbackToolDescription: (toolDescription: string, schema: ZodObject<any>) => string;
5
+ export declare class N8nTool extends DynamicStructuredTool {
6
+ private context;
7
+ constructor(context: ISupplyDataFunctions, fields: DynamicStructuredToolInput);
8
+ asDynamicTool(): DynamicTool;
9
+ }
@@ -0,0 +1,91 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.N8nTool = exports.prepareFallbackToolDescription = void 0;
4
+ const n8n_workflow_1 = require("n8n-workflow");
5
+ const tools_1 = require("@langchain/core/tools");
6
+ const output_parsers_1 = require("@langchain/core/output_parsers");
7
+ const zod_1 = require("zod");
8
+ const getSimplifiedType = (schema) => {
9
+ if (schema instanceof zod_1.ZodObject) {
10
+ return 'object';
11
+ }
12
+ else if (schema instanceof zod_1.ZodNumber) {
13
+ return 'number';
14
+ }
15
+ else if (schema instanceof zod_1.ZodBoolean) {
16
+ return 'boolean';
17
+ }
18
+ else if (schema instanceof zod_1.ZodNullable || schema instanceof zod_1.ZodOptional) {
19
+ return getSimplifiedType(schema.unwrap());
20
+ }
21
+ return 'string';
22
+ };
23
+ const getParametersDescription = (parameters) => parameters
24
+ .map(([name, schema]) => { var _a; return `${name}: (description: ${(_a = schema.description) !== null && _a !== void 0 ? _a : ''}, type: ${getSimplifiedType(schema)}, required: ${!schema.isOptional()})`; })
25
+ .join(',\n ');
26
+ const prepareFallbackToolDescription = (toolDescription, schema) => {
27
+ let description = `${toolDescription}`;
28
+ const toolParameters = Object.entries(schema.shape);
29
+ if (toolParameters.length) {
30
+ description += `
31
+ Tool expects valid stringified JSON object with ${toolParameters.length} properties.
32
+ Property names with description, type and required status:
33
+ ${getParametersDescription(toolParameters)}
34
+ ALL parameters marked as required must be provided`;
35
+ }
36
+ return description;
37
+ };
38
+ exports.prepareFallbackToolDescription = prepareFallbackToolDescription;
39
+ class N8nTool extends tools_1.DynamicStructuredTool {
40
+ constructor(context, fields) {
41
+ super(fields);
42
+ this.context = context;
43
+ }
44
+ asDynamicTool() {
45
+ const { name, func, schema, context, description } = this;
46
+ const parser = new output_parsers_1.StructuredOutputParser(schema);
47
+ const wrappedFunc = async function (query) {
48
+ let parsedQuery;
49
+ try {
50
+ parsedQuery = await parser.parse(query);
51
+ }
52
+ catch (e) {
53
+ let dataFromModel;
54
+ try {
55
+ dataFromModel = (0, n8n_workflow_1.jsonParse)(query);
56
+ }
57
+ catch (error) {
58
+ try {
59
+ dataFromModel = JSON.parse(query);
60
+ }
61
+ catch {
62
+ if (Object.keys(schema.shape).length === 1) {
63
+ const parameterName = Object.keys(schema.shape)[0];
64
+ dataFromModel = { [parameterName]: query };
65
+ }
66
+ else {
67
+ throw new n8n_workflow_1.NodeOperationError(context.getNode(), `Input is not a valid JSON: ${error.message}`);
68
+ }
69
+ }
70
+ }
71
+ parsedQuery = schema.parse(dataFromModel);
72
+ }
73
+ try {
74
+ const result = await func(parsedQuery);
75
+ return result;
76
+ }
77
+ catch (e) {
78
+ const { index } = context.addInputData(n8n_workflow_1.NodeConnectionTypes.AiTool, [[{ json: { query } }]]);
79
+ void context.addOutputData(n8n_workflow_1.NodeConnectionTypes.AiTool, index, e);
80
+ return e.toString();
81
+ }
82
+ };
83
+ return new tools_1.DynamicTool({
84
+ name,
85
+ description: (0, exports.prepareFallbackToolDescription)(description, schema),
86
+ func: wrappedFunc,
87
+ });
88
+ }
89
+ }
90
+ exports.N8nTool = N8nTool;
91
+ //# sourceMappingURL=n8nTool.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"n8nTool.js","sourceRoot":"","sources":["../../../../../nodes/shared/core/tools/n8nTool.ts"],"names":[],"mappings":";;;AAEA,+CAMsB;AACtB,iDAI+B;AAC/B,mEAAwE;AACxE,6BAAkG;AAElG,MAAM,iBAAiB,GAAG,CAAC,MAAkB,EAAE,EAAE;IAChD,IAAI,MAAM,YAAY,eAAS,EAAE,CAAC;QACjC,OAAO,QAAQ,CAAC;IACjB,CAAC;SAAM,IAAI,MAAM,YAAY,eAAS,EAAE,CAAC;QACxC,OAAO,QAAQ,CAAC;IACjB,CAAC;SAAM,IAAI,MAAM,YAAY,gBAAU,EAAE,CAAC;QACzC,OAAO,SAAS,CAAC;IAClB,CAAC;SAAM,IAAI,MAAM,YAAY,iBAAW,IAAI,MAAM,YAAY,iBAAW,EAAE,CAAC;QAC3E,OAAO,iBAAiB,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC;IAC3C,CAAC;IAED,OAAO,QAAQ,CAAC;AACjB,CAAC,CAAC;AAEF,MAAM,wBAAwB,GAAG,CAAC,UAAuC,EAAE,EAAE,CAC5E,UAAU;KACR,GAAG,CACH,CAAC,CAAC,IAAI,EAAE,MAAM,CAAC,EAAE,EAAE,WAClB,OAAA,GAAG,IAAI,mBAAmB,MAAA,MAAM,CAAC,WAAW,mCAAI,EAAE,WAAW,iBAAiB,CAAC,MAAM,CAAC,eAAe,CAAC,MAAM,CAAC,UAAU,EAAE,GAAG,CAAA,EAAA,CAC7H;KACA,IAAI,CAAC,MAAM,CAAC,CAAC;AAET,MAAM,8BAA8B,GAAG,CAAC,eAAuB,EAAE,MAAsB,EAAE,EAAE;IACjG,IAAI,WAAW,GAAG,GAAG,eAAe,EAAE,CAAC;IAEvC,MAAM,cAAc,GAAG,MAAM,CAAC,OAAO,CAAa,MAAM,CAAC,KAAK,CAAC,CAAC;IAEhE,IAAI,cAAc,CAAC,MAAM,EAAE,CAAC;QAC3B,WAAW,IAAI;kDACiC,cAAc,CAAC,MAAM;;EAErE,wBAAwB,CAAC,cAAc,CAAC;mDACS,CAAC;IACnD,CAAC;IAED,OAAO,WAAW,CAAC;AACpB,CAAC,CAAC;AAdW,QAAA,8BAA8B,kCAczC;AAGF,MAAa,OAAQ,SAAQ,6BAAqB;IACjD,YACS,OAA6B,EACrC,MAAkC;QAElC,KAAK,CAAC,MAAM,CAAC,CAAC;QAHN,YAAO,GAAP,OAAO,CAAsB;IAItC,CAAC;IAED,aAAa;QACZ,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,WAAW,EAAE,GAAG,IAAI,CAAC;QAE1D,MAAM,MAAM,GAAG,IAAI,uCAAsB,CAAC,MAAM,CAAC,CAAC;QAElD,MAAM,WAAW,GAAG,KAAK,WAAW,KAAa;YAChD,IAAI,WAAmB,CAAC;YAGxB,IAAI,CAAC;gBACJ,WAAW,GAAG,MAAM,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;YACzC,CAAC;YAAC,OAAO,CAAC,EAAE,CAAC;gBAEZ,IAAI,aAAa,CAAC;gBAElB,IAAI,CAAC;oBAEJ,aAAa,GAAG,IAAA,wBAAS,EAAc,KAAK,CAAC,CAAC;gBAC/C,CAAC;gBAAC,OAAO,KAAK,EAAE,CAAC;oBAEhB,IAAI,CAAC;wBACJ,aAAa,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;oBACnC,CAAC;oBAAC,MAAM,CAAC;wBAGR,IAAI,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;4BAC5C,MAAM,aAAa,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;4BACnD,aAAa,GAAG,EAAE,CAAC,aAAa,CAAC,EAAE,KAAK,EAAE,CAAC;wBAC5C,CAAC;6BAAM,CAAC;4BAEP,MAAM,IAAI,iCAAkB,CAC3B,OAAO,CAAC,OAAO,EAAE,EACjB,8BAA8B,KAAK,CAAC,OAAO,EAAE,CAC7C,CAAC;wBACH,CAAC;oBACF,CAAC;gBACF,CAAC;gBAID,WAAW,GAAG,MAAM,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC;YAC3C,CAAC;YAED,IAAI,CAAC;gBAEJ,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,CAAC;gBAEvC,OAAO,MAAM,CAAC;YACf,CAAC;YAAC,OAAO,CAAC,EAAE,CAAC;gBACZ,MAAM,EAAE,KAAK,EAAE,GAAG,OAAO,CAAC,YAAY,CAAC,kCAAmB,CAAC,MAAM,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC;gBAC5F,KAAK,OAAO,CAAC,aAAa,CAAC,kCAAmB,CAAC,MAAM,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC;gBAEjE,OAAO,CAAC,CAAC,QAAQ,EAAE,CAAC;YACrB,CAAC;QACF,CAAC,CAAC;QAEF,OAAO,IAAI,mBAAW,CAAC;YACtB,IAAI;YACJ,WAAW,EAAE,IAAA,sCAA8B,EAAC,WAAW,EAAE,MAAM,CAAC;YAChE,IAAI,EAAE,WAAW;SACjB,CAAC,CAAC;IACJ,CAAC;CACD;AAtED,0BAsEC"}
@@ -0,0 +1,6 @@
1
+ import type { JSONSchema7 } from 'json-schema';
2
+ import type { IExecuteFunctions } from 'n8n-workflow';
3
+ import type { z } from 'zod';
4
+ export declare function generateSchema(schemaString: string): JSONSchema7;
5
+ export declare function convertJsonSchemaToZod<T extends z.ZodTypeAny = z.ZodTypeAny>(schema: JSONSchema7): T;
6
+ export declare function throwIfToolSchema(ctx: IExecuteFunctions, error: Error): void;
@@ -0,0 +1,23 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.generateSchema = generateSchema;
4
+ exports.convertJsonSchemaToZod = convertJsonSchemaToZod;
5
+ exports.throwIfToolSchema = throwIfToolSchema;
6
+ const json_schema_to_zod_1 = require("@n8n/json-schema-to-zod");
7
+ const n8n_workflow_1 = require("n8n-workflow");
8
+ const generate_schema_1 = require("generate-schema");
9
+ function generateSchema(schemaString) {
10
+ const parsedSchema = (0, n8n_workflow_1.jsonParse)(schemaString);
11
+ return (0, generate_schema_1.json)(parsedSchema);
12
+ }
13
+ function convertJsonSchemaToZod(schema) {
14
+ return (0, json_schema_to_zod_1.jsonSchemaToZod)(schema);
15
+ }
16
+ function throwIfToolSchema(ctx, error) {
17
+ var _a;
18
+ if ((_a = error === null || error === void 0 ? void 0 : error.message) === null || _a === void 0 ? void 0 : _a.includes('tool input did not match expected schema')) {
19
+ throw new n8n_workflow_1.NodeOperationError(ctx.getNode(), `${error.message}.
20
+ This is most likely because some of your tools are configured to require a specific schema. This is not supported by Conversational Agent. Remove the schema from the tool configuration or use Tools agent instead.`);
21
+ }
22
+ }
23
+ //# sourceMappingURL=schemaGenerator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schemaGenerator.js","sourceRoot":"","sources":["../../../../../nodes/shared/core/tools/schemaGenerator.ts"],"names":[],"mappings":";;AAWA,wCAIC;AAED,wDAEC;AAED,8CAQC;AA3BD,gEAA0D;AAG1D,+CAA6D;AAG7D,qDAA6D;AAG7D,SAAgB,cAAc,CAAC,YAAoB;IAClD,MAAM,YAAY,GAAG,IAAA,wBAAS,EAAe,YAAY,CAAC,CAAC;IAE3D,OAAO,IAAA,sBAAkB,EAAC,YAAY,CAAgB,CAAC;AACxD,CAAC;AAED,SAAgB,sBAAsB,CAAwC,MAAmB;IAChG,OAAO,IAAA,oCAAe,EAAI,MAAM,CAAC,CAAC;AACnC,CAAC;AAED,SAAgB,iBAAiB,CAAC,GAAsB,EAAE,KAAY;;IACrE,IAAI,MAAA,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,OAAO,0CAAE,QAAQ,CAAC,0CAA0C,CAAC,EAAE,CAAC;QAC1E,MAAM,IAAI,iCAAkB,CAC3B,GAAG,CAAC,OAAO,EAAE,EACb,GAAG,KAAK,CAAC,OAAO;wNACqM,CACrN,CAAC;IACH,CAAC;AACF,CAAC"}
@@ -0,0 +1,8 @@
1
+ import type { IExecuteFunctions, IDataObject } from 'n8n-workflow';
2
+ export declare function setupTools(executeFunctions: IExecuteFunctions, structuredOutputToolsMode: boolean, responseFormat: IDataObject | undefined): Promise<{
3
+ tools: any[];
4
+ invokableTools: any[];
5
+ tool_choice: string | undefined;
6
+ structuredOutputTool: IDataObject | undefined;
7
+ updatedResponseFormat: IDataObject | undefined;
8
+ }>;