@n8n/ai-utilities 0.23.3 → 0.24.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 (282) hide show
  1. package/dist/cjs/adapters/langchain-chat-model.js +174 -184
  2. package/dist/cjs/adapters/langchain-chat-model.js.map +1 -1
  3. package/dist/cjs/adapters/langchain-history.js +23 -33
  4. package/dist/cjs/adapters/langchain-history.js.map +1 -1
  5. package/dist/cjs/adapters/langchain-memory.js +32 -42
  6. package/dist/cjs/adapters/langchain-memory.js.map +1 -1
  7. package/dist/cjs/agent-config/config-normalization.d.ts +11 -0
  8. package/dist/cjs/agent-config/config-normalization.js +134 -0
  9. package/dist/cjs/agent-config/config-normalization.js.map +1 -0
  10. package/dist/cjs/agent-config/from-ai-node-parameters.d.ts +7 -0
  11. package/dist/cjs/agent-config/from-ai-node-parameters.js +43 -0
  12. package/dist/cjs/agent-config/from-ai-node-parameters.js.map +1 -0
  13. package/dist/cjs/agent-config/index.d.ts +3 -0
  14. package/dist/cjs/agent-config/index.js +17 -0
  15. package/dist/cjs/agent-config/index.js.map +1 -0
  16. package/dist/cjs/agent-config/model-id.d.ts +5 -0
  17. package/dist/cjs/agent-config/model-id.js +16 -0
  18. package/dist/cjs/agent-config/model-id.js.map +1 -0
  19. package/dist/cjs/agent-config/native-web-search-provider-tools.d.ts +7 -0
  20. package/dist/cjs/agent-config/native-web-search-provider-tools.js +55 -0
  21. package/dist/cjs/agent-config/native-web-search-provider-tools.js.map +1 -0
  22. package/dist/cjs/ai-node-sdk-version.js +4 -14
  23. package/dist/cjs/ai-node-sdk-version.js.map +1 -1
  24. package/dist/cjs/chat-model/base.js +21 -31
  25. package/dist/cjs/chat-model/base.js.map +1 -1
  26. package/dist/cjs/converters/message.js +308 -318
  27. package/dist/cjs/converters/message.js.map +1 -1
  28. package/dist/cjs/converters/tool.js +50 -60
  29. package/dist/cjs/converters/tool.js.map +1 -1
  30. package/dist/cjs/guards.js +26 -36
  31. package/dist/cjs/guards.js.map +1 -1
  32. package/dist/cjs/index.js +99 -108
  33. package/dist/cjs/index.js.map +1 -1
  34. package/dist/cjs/memory/base-chat-history.js +9 -19
  35. package/dist/cjs/memory/base-chat-history.js.map +1 -1
  36. package/dist/cjs/memory/base-chat-memory.js +6 -16
  37. package/dist/cjs/memory/base-chat-memory.js.map +1 -1
  38. package/dist/cjs/memory/windowed-chat-memory.js +33 -43
  39. package/dist/cjs/memory/windowed-chat-memory.js.map +1 -1
  40. package/dist/cjs/model-discovery/index.js +61 -71
  41. package/dist/cjs/model-discovery/index.js.map +1 -1
  42. package/dist/cjs/model-discovery/providers/anthropic.js +12 -22
  43. package/dist/cjs/model-discovery/providers/anthropic.js.map +1 -1
  44. package/dist/cjs/model-discovery/providers/cohere.js +12 -22
  45. package/dist/cjs/model-discovery/providers/cohere.js.map +1 -1
  46. package/dist/cjs/model-discovery/providers/deepseek.js +5 -15
  47. package/dist/cjs/model-discovery/providers/deepseek.js.map +1 -1
  48. package/dist/cjs/model-discovery/providers/google.js +15 -25
  49. package/dist/cjs/model-discovery/providers/google.js.map +1 -1
  50. package/dist/cjs/model-discovery/providers/groq.js +9 -19
  51. package/dist/cjs/model-discovery/providers/groq.js.map +1 -1
  52. package/dist/cjs/model-discovery/providers/mistral.js +11 -21
  53. package/dist/cjs/model-discovery/providers/mistral.js.map +1 -1
  54. package/dist/cjs/model-discovery/providers/nvidia.js +21 -31
  55. package/dist/cjs/model-discovery/providers/nvidia.js.map +1 -1
  56. package/dist/cjs/model-discovery/providers/openai.js +31 -41
  57. package/dist/cjs/model-discovery/providers/openai.js.map +1 -1
  58. package/dist/cjs/model-discovery/providers/openrouter.js +5 -15
  59. package/dist/cjs/model-discovery/providers/openrouter.js.map +1 -1
  60. package/dist/cjs/model-discovery/providers/vercel.js +5 -15
  61. package/dist/cjs/model-discovery/providers/vercel.js.map +1 -1
  62. package/dist/cjs/model-discovery/providers/xai.js +5 -15
  63. package/dist/cjs/model-discovery/providers/xai.js.map +1 -1
  64. package/dist/cjs/model-discovery/request.js +40 -50
  65. package/dist/cjs/model-discovery/request.js.map +1 -1
  66. package/dist/cjs/model-discovery/types.js +2 -12
  67. package/dist/cjs/node-catalog/discriminator-utils.js +75 -85
  68. package/dist/cjs/node-catalog/discriminator-utils.js.map +1 -1
  69. package/dist/cjs/node-catalog/dynamic-node-parameters.js +169 -179
  70. package/dist/cjs/node-catalog/dynamic-node-parameters.js.map +1 -1
  71. package/dist/cjs/node-catalog/get.js +349 -359
  72. package/dist/cjs/node-catalog/get.js.map +1 -1
  73. package/dist/cjs/node-catalog/index.js +42 -52
  74. package/dist/cjs/node-catalog/index.js.map +1 -1
  75. package/dist/cjs/node-catalog/lean-node-type.js +46 -56
  76. package/dist/cjs/node-catalog/lean-node-type.js.map +1 -1
  77. package/dist/cjs/node-catalog/node-type-parser.js +61 -71
  78. package/dist/cjs/node-catalog/node-type-parser.js.map +1 -1
  79. package/dist/cjs/node-catalog/resource-operation-extractor.js +133 -143
  80. package/dist/cjs/node-catalog/resource-operation-extractor.js.map +1 -1
  81. package/dist/cjs/node-catalog/search-engine.js +285 -295
  82. package/dist/cjs/node-catalog/search-engine.js.map +1 -1
  83. package/dist/cjs/node-catalog/search.js +280 -290
  84. package/dist/cjs/node-catalog/search.js.map +1 -1
  85. package/dist/cjs/node-catalog/suggested-nodes-data.js +235 -245
  86. package/dist/cjs/node-catalog/suggested-nodes-data.js.map +1 -1
  87. package/dist/cjs/node-catalog/suggested.js +63 -73
  88. package/dist/cjs/node-catalog/suggested.js.map +1 -1
  89. package/dist/cjs/node-catalog/types.js +2 -12
  90. package/dist/cjs/suppliers/supplyMemory.js +13 -23
  91. package/dist/cjs/suppliers/supplyMemory.js.map +1 -1
  92. package/dist/cjs/suppliers/supplyModel.js +72 -82
  93. package/dist/cjs/suppliers/supplyModel.js.map +1 -1
  94. package/dist/cjs/typecheck.tsbuildinfo +1 -1
  95. package/dist/cjs/types/chat-model.js +2 -12
  96. package/dist/cjs/types/json.js +2 -12
  97. package/dist/cjs/types/memory.js +2 -12
  98. package/dist/cjs/types/message.js +2 -12
  99. package/dist/cjs/types/openai.js +2 -12
  100. package/dist/cjs/types/output.js +2 -12
  101. package/dist/cjs/types/tool.js +2 -12
  102. package/dist/cjs/utils/embeddings-input-validation.js +24 -34
  103. package/dist/cjs/utils/embeddings-input-validation.js.map +1 -1
  104. package/dist/cjs/utils/failed-attempt-handler/n8nDefaultFailedAttemptHandler.js +27 -37
  105. package/dist/cjs/utils/failed-attempt-handler/n8nDefaultFailedAttemptHandler.js.map +1 -1
  106. package/dist/cjs/utils/failed-attempt-handler/n8nLlmFailedAttemptHandler.d.ts +1 -1
  107. package/dist/cjs/utils/failed-attempt-handler/n8nLlmFailedAttemptHandler.js +23 -33
  108. package/dist/cjs/utils/failed-attempt-handler/n8nLlmFailedAttemptHandler.js.map +1 -1
  109. package/dist/cjs/utils/follow-redirects.js +38 -48
  110. package/dist/cjs/utils/follow-redirects.js.map +1 -1
  111. package/dist/cjs/utils/fromai-helpers.js +21 -31
  112. package/dist/cjs/utils/fromai-helpers.js.map +1 -1
  113. package/dist/cjs/utils/fromai-tool-factory.js +18 -28
  114. package/dist/cjs/utils/fromai-tool-factory.js.map +1 -1
  115. package/dist/cjs/utils/helpers.js +44 -54
  116. package/dist/cjs/utils/helpers.js.map +1 -1
  117. package/dist/cjs/utils/http-proxy-agent.js +38 -48
  118. package/dist/cjs/utils/http-proxy-agent.js.map +1 -1
  119. package/dist/cjs/utils/lazy-import.d.ts +1 -0
  120. package/dist/cjs/utils/lazy-import.js +7 -0
  121. package/dist/cjs/utils/lazy-import.js.map +1 -0
  122. package/dist/cjs/utils/loaders/n8n-pdf-loader.js +50 -94
  123. package/dist/cjs/utils/loaders/n8n-pdf-loader.js.map +1 -1
  124. package/dist/cjs/utils/log-ai-event.js +10 -20
  125. package/dist/cjs/utils/log-ai-event.js.map +1 -1
  126. package/dist/cjs/utils/log-wrapper.d.ts +1 -1
  127. package/dist/cjs/utils/log-wrapper.js +313 -323
  128. package/dist/cjs/utils/log-wrapper.js.map +1 -1
  129. package/dist/cjs/utils/n8n-binary-loader.js +143 -153
  130. package/dist/cjs/utils/n8n-binary-loader.js.map +1 -1
  131. package/dist/cjs/utils/n8n-json-loader.js +57 -67
  132. package/dist/cjs/utils/n8n-json-loader.js.map +1 -1
  133. package/dist/cjs/utils/n8n-llm-tracing.js +164 -174
  134. package/dist/cjs/utils/n8n-llm-tracing.js.map +1 -1
  135. package/dist/cjs/utils/redact-headers.js +42 -52
  136. package/dist/cjs/utils/redact-headers.js.map +1 -1
  137. package/dist/cjs/utils/shared-fields.js +137 -147
  138. package/dist/cjs/utils/shared-fields.js.map +1 -1
  139. package/dist/cjs/utils/sse.js +83 -93
  140. package/dist/cjs/utils/sse.js.map +1 -1
  141. package/dist/cjs/utils/text-editor.js +274 -284
  142. package/dist/cjs/utils/text-editor.js.map +1 -1
  143. package/dist/cjs/utils/tokenizer/tiktoken.js +38 -48
  144. package/dist/cjs/utils/tokenizer/tiktoken.js.map +1 -1
  145. package/dist/cjs/utils/tokenizer/token-estimator.js +86 -96
  146. package/dist/cjs/utils/tokenizer/token-estimator.js.map +1 -1
  147. package/dist/cjs/utils/vector-store/MemoryManager/MemoryCalculator.js +43 -53
  148. package/dist/cjs/utils/vector-store/MemoryManager/MemoryCalculator.js.map +1 -1
  149. package/dist/cjs/utils/vector-store/MemoryManager/MemoryVectorStoreManager.js +154 -164
  150. package/dist/cjs/utils/vector-store/MemoryManager/MemoryVectorStoreManager.js.map +1 -1
  151. package/dist/cjs/utils/vector-store/MemoryManager/StoreCleanupService.js +82 -92
  152. package/dist/cjs/utils/vector-store/MemoryManager/StoreCleanupService.js.map +1 -1
  153. package/dist/cjs/utils/vector-store/MemoryManager/config.js +34 -44
  154. package/dist/cjs/utils/vector-store/MemoryManager/config.js.map +1 -1
  155. package/dist/cjs/utils/vector-store/MemoryManager/types.js +2 -12
  156. package/dist/cjs/utils/vector-store/createVectorStoreNode/constants.js +44 -54
  157. package/dist/cjs/utils/vector-store/createVectorStoreNode/constants.js.map +1 -1
  158. package/dist/cjs/utils/vector-store/createVectorStoreNode/createVectorStoreNode.js +229 -229
  159. package/dist/cjs/utils/vector-store/createVectorStoreNode/createVectorStoreNode.js.map +1 -1
  160. package/dist/cjs/utils/vector-store/createVectorStoreNode/operations/index.js +8 -18
  161. package/dist/cjs/utils/vector-store/createVectorStoreNode/operations/index.js.map +1 -1
  162. package/dist/cjs/utils/vector-store/createVectorStoreNode/operations/insertOperation.js +33 -43
  163. package/dist/cjs/utils/vector-store/createVectorStoreNode/operations/insertOperation.js.map +1 -1
  164. package/dist/cjs/utils/vector-store/createVectorStoreNode/operations/loadOperation.js +41 -51
  165. package/dist/cjs/utils/vector-store/createVectorStoreNode/operations/loadOperation.js.map +1 -1
  166. package/dist/cjs/utils/vector-store/createVectorStoreNode/operations/retrieveAsToolExecuteOperation.js +59 -69
  167. package/dist/cjs/utils/vector-store/createVectorStoreNode/operations/retrieveAsToolExecuteOperation.js.map +1 -1
  168. package/dist/cjs/utils/vector-store/createVectorStoreNode/operations/retrieveAsToolOperation.js +58 -68
  169. package/dist/cjs/utils/vector-store/createVectorStoreNode/operations/retrieveAsToolOperation.js.map +1 -1
  170. package/dist/cjs/utils/vector-store/createVectorStoreNode/operations/retrieveOperation.js +26 -36
  171. package/dist/cjs/utils/vector-store/createVectorStoreNode/operations/retrieveOperation.js.map +1 -1
  172. package/dist/cjs/utils/vector-store/createVectorStoreNode/operations/updateOperation.js +34 -44
  173. package/dist/cjs/utils/vector-store/createVectorStoreNode/operations/updateOperation.js.map +1 -1
  174. package/dist/cjs/utils/vector-store/createVectorStoreNode/types.js +2 -12
  175. package/dist/cjs/utils/vector-store/createVectorStoreNode/utils.d.ts +2 -1
  176. package/dist/cjs/utils/vector-store/createVectorStoreNode/utils.js +34 -29
  177. package/dist/cjs/utils/vector-store/createVectorStoreNode/utils.js.map +1 -1
  178. package/dist/cjs/utils/vector-store/processDocuments.js +37 -47
  179. package/dist/cjs/utils/vector-store/processDocuments.js.map +1 -1
  180. package/dist/cjs/utils/workflow-text-editor.js +50 -60
  181. package/dist/cjs/utils/workflow-text-editor.js.map +1 -1
  182. package/dist/cjs/web-search/brave-search.js +38 -48
  183. package/dist/cjs/web-search/brave-search.js.map +1 -1
  184. package/dist/cjs/web-search/index.js +7 -17
  185. package/dist/cjs/web-search/index.js.map +1 -1
  186. package/dist/cjs/web-search/searxng-search.js +35 -45
  187. package/dist/cjs/web-search/searxng-search.js.map +1 -1
  188. package/dist/cjs/web-search/types.js +2 -12
  189. package/dist/esm/adapters/langchain-chat-model.js.map +1 -1
  190. package/dist/esm/adapters/langchain-history.js.map +1 -1
  191. package/dist/esm/adapters/langchain-memory.js.map +1 -1
  192. package/dist/esm/agent-config/config-normalization.d.ts +11 -0
  193. package/dist/esm/agent-config/config-normalization.js +134 -0
  194. package/dist/esm/agent-config/config-normalization.js.map +1 -0
  195. package/dist/esm/agent-config/from-ai-node-parameters.d.ts +7 -0
  196. package/dist/esm/agent-config/from-ai-node-parameters.js +43 -0
  197. package/dist/esm/agent-config/from-ai-node-parameters.js.map +1 -0
  198. package/dist/esm/agent-config/index.d.ts +3 -0
  199. package/dist/esm/agent-config/index.js +17 -0
  200. package/dist/esm/agent-config/index.js.map +1 -0
  201. package/dist/esm/agent-config/model-id.d.ts +5 -0
  202. package/dist/esm/agent-config/model-id.js +16 -0
  203. package/dist/esm/agent-config/model-id.js.map +1 -0
  204. package/dist/esm/agent-config/native-web-search-provider-tools.d.ts +7 -0
  205. package/dist/esm/agent-config/native-web-search-provider-tools.js +55 -0
  206. package/dist/esm/agent-config/native-web-search-provider-tools.js.map +1 -0
  207. package/dist/esm/chat-model/base.js.map +1 -1
  208. package/dist/esm/converters/message.js.map +1 -1
  209. package/dist/esm/converters/tool.js.map +1 -1
  210. package/dist/esm/guards.js.map +1 -1
  211. package/dist/esm/index.js.map +1 -1
  212. package/dist/esm/memory/base-chat-history.js.map +1 -1
  213. package/dist/esm/memory/base-chat-memory.js.map +1 -1
  214. package/dist/esm/memory/windowed-chat-memory.js.map +1 -1
  215. package/dist/esm/model-discovery/index.js.map +1 -1
  216. package/dist/esm/model-discovery/providers/anthropic.js.map +1 -1
  217. package/dist/esm/model-discovery/providers/cohere.js.map +1 -1
  218. package/dist/esm/model-discovery/providers/google.js.map +1 -1
  219. package/dist/esm/model-discovery/providers/groq.js.map +1 -1
  220. package/dist/esm/model-discovery/providers/mistral.js.map +1 -1
  221. package/dist/esm/model-discovery/providers/nvidia.js.map +1 -1
  222. package/dist/esm/model-discovery/providers/openai.js.map +1 -1
  223. package/dist/esm/model-discovery/request.js.map +1 -1
  224. package/dist/esm/node-catalog/discriminator-utils.js.map +1 -1
  225. package/dist/esm/node-catalog/dynamic-node-parameters.js.map +1 -1
  226. package/dist/esm/node-catalog/get.js.map +1 -1
  227. package/dist/esm/node-catalog/lean-node-type.js.map +1 -1
  228. package/dist/esm/node-catalog/node-type-parser.js.map +1 -1
  229. package/dist/esm/node-catalog/resource-operation-extractor.js.map +1 -1
  230. package/dist/esm/node-catalog/search-engine.js.map +1 -1
  231. package/dist/esm/node-catalog/search.js.map +1 -1
  232. package/dist/esm/node-catalog/suggested-nodes-data.js.map +1 -1
  233. package/dist/esm/node-catalog/suggested.js.map +1 -1
  234. package/dist/esm/suppliers/supplyMemory.js.map +1 -1
  235. package/dist/esm/suppliers/supplyModel.js.map +1 -1
  236. package/dist/esm/typecheck.tsbuildinfo +1 -1
  237. package/dist/esm/utils/embeddings-input-validation.js.map +1 -1
  238. package/dist/esm/utils/failed-attempt-handler/n8nDefaultFailedAttemptHandler.js.map +1 -1
  239. package/dist/esm/utils/failed-attempt-handler/n8nLlmFailedAttemptHandler.d.ts +1 -1
  240. package/dist/esm/utils/failed-attempt-handler/n8nLlmFailedAttemptHandler.js.map +1 -1
  241. package/dist/esm/utils/follow-redirects.js.map +1 -1
  242. package/dist/esm/utils/fromai-helpers.js.map +1 -1
  243. package/dist/esm/utils/fromai-tool-factory.js.map +1 -1
  244. package/dist/esm/utils/helpers.js.map +1 -1
  245. package/dist/esm/utils/http-proxy-agent.js.map +1 -1
  246. package/dist/esm/utils/lazy-import.d.ts +1 -0
  247. package/dist/esm/utils/lazy-import.js +7 -0
  248. package/dist/esm/utils/lazy-import.js.map +1 -0
  249. package/dist/esm/utils/loaders/n8n-pdf-loader.js +2 -35
  250. package/dist/esm/utils/loaders/n8n-pdf-loader.js.map +1 -1
  251. package/dist/esm/utils/log-ai-event.js.map +1 -1
  252. package/dist/esm/utils/log-wrapper.d.ts +1 -1
  253. package/dist/esm/utils/log-wrapper.js.map +1 -1
  254. package/dist/esm/utils/n8n-binary-loader.js.map +1 -1
  255. package/dist/esm/utils/n8n-json-loader.js.map +1 -1
  256. package/dist/esm/utils/n8n-llm-tracing.js.map +1 -1
  257. package/dist/esm/utils/redact-headers.js.map +1 -1
  258. package/dist/esm/utils/shared-fields.js.map +1 -1
  259. package/dist/esm/utils/sse.js.map +1 -1
  260. package/dist/esm/utils/text-editor.js.map +1 -1
  261. package/dist/esm/utils/tokenizer/tiktoken.js.map +1 -1
  262. package/dist/esm/utils/tokenizer/token-estimator.js.map +1 -1
  263. package/dist/esm/utils/vector-store/MemoryManager/MemoryCalculator.js.map +1 -1
  264. package/dist/esm/utils/vector-store/MemoryManager/MemoryVectorStoreManager.js.map +1 -1
  265. package/dist/esm/utils/vector-store/MemoryManager/StoreCleanupService.js.map +1 -1
  266. package/dist/esm/utils/vector-store/MemoryManager/config.js.map +1 -1
  267. package/dist/esm/utils/vector-store/createVectorStoreNode/createVectorStoreNode.js +43 -33
  268. package/dist/esm/utils/vector-store/createVectorStoreNode/createVectorStoreNode.js.map +1 -1
  269. package/dist/esm/utils/vector-store/createVectorStoreNode/operations/insertOperation.js.map +1 -1
  270. package/dist/esm/utils/vector-store/createVectorStoreNode/operations/loadOperation.js.map +1 -1
  271. package/dist/esm/utils/vector-store/createVectorStoreNode/operations/retrieveAsToolExecuteOperation.js.map +1 -1
  272. package/dist/esm/utils/vector-store/createVectorStoreNode/operations/retrieveAsToolOperation.js.map +1 -1
  273. package/dist/esm/utils/vector-store/createVectorStoreNode/operations/retrieveOperation.js.map +1 -1
  274. package/dist/esm/utils/vector-store/createVectorStoreNode/operations/updateOperation.js.map +1 -1
  275. package/dist/esm/utils/vector-store/createVectorStoreNode/utils.d.ts +2 -1
  276. package/dist/esm/utils/vector-store/createVectorStoreNode/utils.js +15 -0
  277. package/dist/esm/utils/vector-store/createVectorStoreNode/utils.js.map +1 -1
  278. package/dist/esm/utils/vector-store/processDocuments.js.map +1 -1
  279. package/dist/esm/utils/workflow-text-editor.js.map +1 -1
  280. package/dist/esm/web-search/brave-search.js.map +1 -1
  281. package/dist/esm/web-search/searxng-search.js.map +1 -1
  282. package/package.json +24 -9
@@ -1,241 +1,262 @@
1
- (function (factory) {
2
- if (typeof module === "object" && typeof module.exports === "object") {
3
- var v = factory(require, exports);
4
- if (v !== undefined) module.exports = v;
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.formatNodeResult = formatNodeResult;
4
+ exports.searchCodeBuilderNodes = searchCodeBuilderNodes;
5
+ const n8n_workflow_1 = require("n8n-workflow");
6
+ function formatBuilderHint(nodeTypeParser, nodeId, version) {
7
+ const nodeType = nodeTypeParser.getLeanNodeType(nodeId, version);
8
+ const hint = nodeType?.builderHint?.searchHint;
9
+ if (!hint)
10
+ return '';
11
+ return ` @builderHint ${hint}`;
12
+ }
13
+ function getDirectRelatedNodeIds(nodeTypeParser, nodeId, version) {
14
+ const nodeType = nodeTypeParser.getLeanNodeType(nodeId, version);
15
+ const relatedNodes = nodeType?.builderHint?.relatedNodes;
16
+ if (!relatedNodes)
17
+ return [];
18
+ return relatedNodes.map((r) => r.nodeType);
19
+ }
20
+ function getRelatedNodesWithHints(nodeTypeParser, nodeId, version, nodeFilter) {
21
+ const nodeType = nodeTypeParser.getLeanNodeType(nodeId, version);
22
+ return nodeType?.builderHint?.relatedNodes?.filter((r) => nodeFilter?.(r.nodeType) ?? true);
23
+ }
24
+ function formatRelatedNodesWithHints(relatedNodes) {
25
+ if (relatedNodes.length === 0)
26
+ return '';
27
+ const lines = [' @relatedNodes'];
28
+ for (const related of relatedNodes) {
29
+ lines.push(` - ${related.nodeType}: "${related.relationHint}"`);
5
30
  }
6
- else if (typeof define === "function" && define.amd) {
7
- define(["require", "exports", "n8n-workflow"], factory);
31
+ return lines.join('\n');
32
+ }
33
+ function collectAllRelatedNodeIds(nodeTypeParser, initialNodeIds, excludeNodeIds) {
34
+ const allRelated = new Set();
35
+ const visited = new Set();
36
+ for (const node of initialNodeIds) {
37
+ visited.add(node.id);
8
38
  }
9
- })(function (require, exports) {
10
- "use strict";
11
- Object.defineProperty(exports, "__esModule", { value: true });
12
- exports.formatNodeResult = formatNodeResult;
13
- exports.searchCodeBuilderNodes = searchCodeBuilderNodes;
14
- const n8n_workflow_1 = require("n8n-workflow");
15
- function formatBuilderHint(nodeTypeParser, nodeId, version) {
16
- const nodeType = nodeTypeParser.getLeanNodeType(nodeId, version);
17
- const hint = nodeType?.builderHint?.searchHint;
18
- if (!hint)
19
- return '';
20
- return ` @builderHint ${hint}`;
39
+ for (const id of excludeNodeIds) {
40
+ visited.add(id);
21
41
  }
22
- function getDirectRelatedNodeIds(nodeTypeParser, nodeId, version) {
23
- const nodeType = nodeTypeParser.getLeanNodeType(nodeId, version);
24
- const relatedNodes = nodeType?.builderHint?.relatedNodes;
25
- if (!relatedNodes)
26
- return [];
27
- return relatedNodes.map((r) => r.nodeType);
28
- }
29
- function getRelatedNodesWithHints(nodeTypeParser, nodeId, version, nodeFilter) {
30
- const nodeType = nodeTypeParser.getLeanNodeType(nodeId, version);
31
- return nodeType?.builderHint?.relatedNodes?.filter((r) => nodeFilter?.(r.nodeType) ?? true);
32
- }
33
- function formatRelatedNodesWithHints(relatedNodes) {
34
- if (relatedNodes.length === 0)
35
- return '';
36
- const lines = [' @relatedNodes'];
37
- for (const related of relatedNodes) {
38
- lines.push(` - ${related.nodeType}: "${related.relationHint}"`);
39
- }
40
- return lines.join('\n');
41
- }
42
- function collectAllRelatedNodeIds(nodeTypeParser, initialNodeIds, excludeNodeIds) {
43
- const allRelated = new Set();
44
- const visited = new Set();
45
- for (const node of initialNodeIds) {
46
- visited.add(node.id);
47
- }
48
- for (const id of excludeNodeIds) {
49
- visited.add(id);
50
- }
51
- const queue = [...initialNodeIds];
52
- while (queue.length > 0) {
53
- const current = queue.shift();
54
- const relatedIds = getDirectRelatedNodeIds(nodeTypeParser, current.id, current.version);
55
- for (const relatedId of relatedIds) {
56
- if (visited.has(relatedId)) {
57
- continue;
58
- }
59
- visited.add(relatedId);
60
- allRelated.add(relatedId);
61
- const relatedNodeType = nodeTypeParser.getLeanNodeType(relatedId);
62
- if (relatedNodeType) {
63
- const relatedVersion = Array.isArray(relatedNodeType.version)
64
- ? relatedNodeType.version[relatedNodeType.version.length - 1]
65
- : relatedNodeType.version;
66
- queue.push({ id: relatedId, version: relatedVersion });
67
- }
68
- }
69
- }
70
- return allRelated;
71
- }
72
- const CONNECTION_TYPE_TO_SDK = {
73
- ai_tool: { fn: 'tool()', subnodeField: 'subnodes.tools' },
74
- ai_vectorStore: { fn: 'vectorStore()', subnodeField: 'subnodes.vectorStore' },
75
- ai_retriever: { fn: 'retriever()', subnodeField: 'subnodes.retriever' },
76
- ai_languageModel: { fn: 'languageModel()', subnodeField: 'subnodes.model' },
77
- ai_memory: { fn: 'memory()', subnodeField: 'subnodes.memory' },
78
- ai_outputParser: { fn: 'outputParser()', subnodeField: 'subnodes.outputParser' },
79
- ai_embedding: { fn: 'embeddings()', subnodeField: 'subnodes.embeddings' },
80
- ai_document: { fn: 'documentLoader()', subnodeField: 'subnodes.documentLoader' },
81
- ai_textSplitter: { fn: 'textSplitter()', subnodeField: 'subnodes.textSplitter' },
82
- };
83
- const MODE_DISPLAY_NAME_OVERRIDES = {
84
- retrieve: {
85
- 'Retrieve Documents (As Vector Store for Chain/Tool)': 'Retrieve Documents (As Vector Store for Chain)',
86
- },
87
- };
88
- function formatModeForDisplay(mode, showSdkMapping) {
89
- const lines = [];
90
- const displayName = MODE_DISPLAY_NAME_OVERRIDES[mode.value]?.[mode.displayName] ?? mode.displayName;
91
- let firstLine = ` - ${mode.value}: "${displayName}"`;
92
- if (showSdkMapping) {
93
- const sdkMapping = mode.outputConnectionType
94
- ? CONNECTION_TYPE_TO_SDK[mode.outputConnectionType]
95
- : undefined;
96
- if (sdkMapping) {
97
- const fnWithMode = sdkMapping.fn.replace('()', `({ mode: '${mode.value}' })`);
98
- firstLine += ` → use ${fnWithMode} for ${sdkMapping.subnodeField}`;
42
+ const queue = [...initialNodeIds];
43
+ while (queue.length > 0) {
44
+ const current = queue.shift();
45
+ const relatedIds = getDirectRelatedNodeIds(nodeTypeParser, current.id, current.version);
46
+ for (const relatedId of relatedIds) {
47
+ if (visited.has(relatedId)) {
48
+ continue;
99
49
  }
100
- else {
101
- firstLine += ' → use node()';
50
+ visited.add(relatedId);
51
+ allRelated.add(relatedId);
52
+ const relatedNodeType = nodeTypeParser.getLeanNodeType(relatedId);
53
+ if (relatedNodeType) {
54
+ const relatedVersion = Array.isArray(relatedNodeType.version)
55
+ ? relatedNodeType.version[relatedNodeType.version.length - 1]
56
+ : relatedNodeType.version;
57
+ queue.push({ id: relatedId, version: relatedVersion });
102
58
  }
103
59
  }
104
- lines.push(firstLine);
105
- if (mode.description) {
106
- lines.push(` ${mode.description}`);
107
- }
108
- if (mode.builderHint) {
109
- lines.push(` @builderHint ${mode.builderHint.propertyHint}`);
110
- }
111
- return lines.join('\n');
112
60
  }
113
- function getDiscriminatorInfo(nodeTypeParser, nodeId, version) {
114
- const precomputed = nodeTypeParser.getVersionDiscriminators(nodeId, version);
115
- if (!precomputed) {
116
- return { type: 'none' };
61
+ return allRelated;
62
+ }
63
+ const CONNECTION_TYPE_TO_SDK = {
64
+ ai_tool: { fn: 'tool()', subnodeField: 'subnodes.tools' },
65
+ ai_vectorStore: { fn: 'vectorStore()', subnodeField: 'subnodes.vectorStore' },
66
+ ai_retriever: { fn: 'retriever()', subnodeField: 'subnodes.retriever' },
67
+ ai_languageModel: { fn: 'languageModel()', subnodeField: 'subnodes.model' },
68
+ ai_memory: { fn: 'memory()', subnodeField: 'subnodes.memory' },
69
+ ai_outputParser: { fn: 'outputParser()', subnodeField: 'subnodes.outputParser' },
70
+ ai_embedding: { fn: 'embeddings()', subnodeField: 'subnodes.embeddings' },
71
+ ai_document: { fn: 'documentLoader()', subnodeField: 'subnodes.documentLoader' },
72
+ ai_textSplitter: { fn: 'textSplitter()', subnodeField: 'subnodes.textSplitter' },
73
+ };
74
+ const MODE_DISPLAY_NAME_OVERRIDES = {
75
+ retrieve: {
76
+ 'Retrieve Documents (As Vector Store for Chain/Tool)': 'Retrieve Documents (As Vector Store for Chain)',
77
+ },
78
+ };
79
+ function formatModeForDisplay(mode, showSdkMapping) {
80
+ const lines = [];
81
+ const displayName = MODE_DISPLAY_NAME_OVERRIDES[mode.value]?.[mode.displayName] ?? mode.displayName;
82
+ let firstLine = ` - ${mode.value}: "${displayName}"`;
83
+ if (showSdkMapping) {
84
+ const sdkMapping = mode.outputConnectionType
85
+ ? CONNECTION_TYPE_TO_SDK[mode.outputConnectionType]
86
+ : undefined;
87
+ if (sdkMapping) {
88
+ const fnWithMode = sdkMapping.fn.replace('()', `({ mode: '${mode.value}' })`);
89
+ firstLine += ` → use ${fnWithMode} for ${sdkMapping.subnodeField}`;
117
90
  }
118
- const { resourceOperations, operationDiscriminator, modeDiscriminator } = precomputed;
119
- if (resourceOperations && resourceOperations.resources.length > 0) {
120
- const resources = resourceOperations.resources
121
- .filter((r) => r.value !== '__CUSTOM_API_CALL__')
122
- .map((r) => ({
123
- value: r.value,
124
- description: r.description,
125
- builderHint: r.builderHint,
126
- operations: r.operations
127
- .filter((op) => op.value !== '__CUSTOM_API_CALL__')
128
- .map((op) => ({
129
- value: op.value,
130
- description: op.description,
131
- builderHint: op.builderHint,
132
- })),
133
- }));
134
- if (resources.length > 0) {
135
- return { type: 'resource_operation', resources };
136
- }
91
+ else {
92
+ firstLine += ' use node()';
137
93
  }
138
- if (operationDiscriminator && operationDiscriminator.operations.length > 0) {
139
- const operations = operationDiscriminator.operations
94
+ }
95
+ lines.push(firstLine);
96
+ if (mode.description) {
97
+ lines.push(` ${mode.description}`);
98
+ }
99
+ if (mode.builderHint) {
100
+ lines.push(` @builderHint ${mode.builderHint.propertyHint}`);
101
+ }
102
+ return lines.join('\n');
103
+ }
104
+ function getDiscriminatorInfo(nodeTypeParser, nodeId, version) {
105
+ const precomputed = nodeTypeParser.getVersionDiscriminators(nodeId, version);
106
+ if (!precomputed) {
107
+ return { type: 'none' };
108
+ }
109
+ const { resourceOperations, operationDiscriminator, modeDiscriminator } = precomputed;
110
+ if (resourceOperations && resourceOperations.resources.length > 0) {
111
+ const resources = resourceOperations.resources
112
+ .filter((r) => r.value !== '__CUSTOM_API_CALL__')
113
+ .map((r) => ({
114
+ value: r.value,
115
+ description: r.description,
116
+ builderHint: r.builderHint,
117
+ operations: r.operations
140
118
  .filter((op) => op.value !== '__CUSTOM_API_CALL__')
141
119
  .map((op) => ({
142
120
  value: op.value,
143
121
  description: op.description,
144
122
  builderHint: op.builderHint,
145
- }));
146
- if (operations.length > 0) {
147
- return { type: 'operation', operations };
148
- }
149
- }
150
- if (modeDiscriminator && modeDiscriminator.modes.length > 0) {
151
- return { type: 'mode', modes: modeDiscriminator.modes };
123
+ })),
124
+ }));
125
+ if (resources.length > 0) {
126
+ return { type: 'resource_operation', resources };
152
127
  }
153
- return { type: 'none' };
154
128
  }
155
- function formatResourceOperationLines(resources, nodeId) {
156
- const lines = [' resource:'];
157
- for (const resource of resources) {
158
- lines.push(` - ${resource.value}:`);
159
- if (resource.description) {
160
- lines.push(` ${resource.description}`);
161
- }
162
- if (resource.builderHint) {
163
- lines.push(` @builderHint ${resource.builderHint.propertyHint}`);
164
- }
165
- lines.push(' operations:');
166
- for (const op of resource.operations) {
167
- lines.push(` - ${op.value}`);
168
- if (op.description) {
169
- lines.push(` ${op.description}`);
170
- }
171
- if (op.builderHint) {
172
- lines.push(` @builderHint ${op.builderHint.propertyHint}`);
173
- }
174
- }
129
+ if (operationDiscriminator && operationDiscriminator.operations.length > 0) {
130
+ const operations = operationDiscriminator.operations
131
+ .filter((op) => op.value !== '__CUSTOM_API_CALL__')
132
+ .map((op) => ({
133
+ value: op.value,
134
+ description: op.description,
135
+ builderHint: op.builderHint,
136
+ }));
137
+ if (operations.length > 0) {
138
+ return { type: 'operation', operations };
175
139
  }
176
- const firstResource = resources[0];
177
- const firstOp = firstResource?.operations[0]?.value || 'get';
178
- lines.push('');
179
- lines.push(' Use get_node_types with discriminators:');
180
- lines.push(` get_node_types({ nodeIds: [{ nodeId: "${nodeId}", resource: "${firstResource?.value}", operation: "${firstOp}" }] })`);
181
- return lines;
182
140
  }
183
- function formatOperationLines(operations, nodeId) {
184
- const lines = [' operation:'];
185
- for (const op of operations) {
186
- lines.push(` - ${op.value}`);
141
+ if (modeDiscriminator && modeDiscriminator.modes.length > 0) {
142
+ return { type: 'mode', modes: modeDiscriminator.modes };
143
+ }
144
+ return { type: 'none' };
145
+ }
146
+ function formatResourceOperationLines(resources, nodeId) {
147
+ const lines = [' resource:'];
148
+ for (const resource of resources) {
149
+ lines.push(` - ${resource.value}:`);
150
+ if (resource.description) {
151
+ lines.push(` ${resource.description}`);
152
+ }
153
+ if (resource.builderHint) {
154
+ lines.push(` @builderHint ${resource.builderHint.propertyHint}`);
155
+ }
156
+ lines.push(' operations:');
157
+ for (const op of resource.operations) {
158
+ lines.push(` - ${op.value}`);
187
159
  if (op.description) {
188
- lines.push(` ${op.description}`);
160
+ lines.push(` ${op.description}`);
189
161
  }
190
162
  if (op.builderHint) {
191
- lines.push(` @builderHint ${op.builderHint.propertyHint}`);
163
+ lines.push(` @builderHint ${op.builderHint.propertyHint}`);
192
164
  }
193
165
  }
194
- const firstOp = operations[0]?.value ?? 'default';
195
- lines.push('');
196
- lines.push(' Use get_node_types with discriminators:');
197
- lines.push(` get_node_types({ nodeIds: [{ nodeId: "${nodeId}", operation: "${firstOp}" }] })`);
198
- return lines;
199
- }
200
- function formatModeLines(modes, nodeId) {
201
- const lines = [' mode:'];
202
- const hasSubnodeModes = modes.some((m) => m.outputConnectionType);
203
- for (const mode of modes) {
204
- lines.push(formatModeForDisplay(mode, hasSubnodeModes));
205
- }
206
- const firstMode = modes[0];
207
- lines.push('');
208
- lines.push(' Use get_node_types with discriminators:');
209
- lines.push(` get_node_types({ nodeIds: [{ nodeId: "${nodeId}", mode: "${firstMode.value}" }] })`);
210
- return lines;
211
166
  }
212
- function formatDiscriminatorInfo(info, nodeId) {
213
- if (info.type === 'none') {
214
- return ' Discriminators: none (use node directly without resource/operation/mode)';
215
- }
216
- const lines = [' Discriminators:'];
217
- if (info.type === 'resource_operation' && info.resources) {
218
- lines.push(...formatResourceOperationLines(info.resources, nodeId));
219
- }
220
- else if (info.type === 'operation' && info.operations) {
221
- lines.push(...formatOperationLines(info.operations, nodeId));
167
+ const firstResource = resources[0];
168
+ const firstOp = firstResource?.operations[0]?.value || 'get';
169
+ lines.push('');
170
+ lines.push(' Use get_node_types with discriminators:');
171
+ lines.push(` get_node_types({ nodeIds: [{ nodeId: "${nodeId}", resource: "${firstResource?.value}", operation: "${firstOp}" }] })`);
172
+ return lines;
173
+ }
174
+ function formatOperationLines(operations, nodeId) {
175
+ const lines = [' operation:'];
176
+ for (const op of operations) {
177
+ lines.push(` - ${op.value}`);
178
+ if (op.description) {
179
+ lines.push(` ${op.description}`);
222
180
  }
223
- else if (info.type === 'mode' && info.modes) {
224
- lines.push(...formatModeLines(info.modes, nodeId));
181
+ if (op.builderHint) {
182
+ lines.push(` @builderHint ${op.builderHint.propertyHint}`);
225
183
  }
226
- return lines.join('\n');
227
184
  }
228
- function formatNodeResult(nodeTypeParser, nodeId, version) {
229
- const nodeType = nodeTypeParser.getLeanNodeType(nodeId, version);
230
- if (!nodeType)
231
- return undefined;
232
- const resolvedVersion = version ?? (Array.isArray(nodeType.version) ? Math.max(...nodeType.version) : nodeType.version);
233
- const triggerTag = (0, n8n_workflow_1.isTriggerNodeType)(nodeId) ? ' [TRIGGER]' : '';
234
- const basicInfo = `- ${nodeId}${triggerTag}\n Display Name: ${nodeType.displayName}\n Version: ${resolvedVersion}\n Description: ${nodeType.description}`;
235
- const builderHint = formatBuilderHint(nodeTypeParser, nodeId, resolvedVersion);
236
- const relatedNodesWithHints = getRelatedNodesWithHints(nodeTypeParser, nodeId, resolvedVersion);
237
- const discInfo = getDiscriminatorInfo(nodeTypeParser, nodeId, resolvedVersion);
238
- const discStr = formatDiscriminatorInfo(discInfo, nodeId);
185
+ const firstOp = operations[0]?.value ?? 'default';
186
+ lines.push('');
187
+ lines.push(' Use get_node_types with discriminators:');
188
+ lines.push(` get_node_types({ nodeIds: [{ nodeId: "${nodeId}", operation: "${firstOp}" }] })`);
189
+ return lines;
190
+ }
191
+ function formatModeLines(modes, nodeId) {
192
+ const lines = [' mode:'];
193
+ const hasSubnodeModes = modes.some((m) => m.outputConnectionType);
194
+ for (const mode of modes) {
195
+ lines.push(formatModeForDisplay(mode, hasSubnodeModes));
196
+ }
197
+ const firstMode = modes[0];
198
+ lines.push('');
199
+ lines.push(' Use get_node_types with discriminators:');
200
+ lines.push(` get_node_types({ nodeIds: [{ nodeId: "${nodeId}", mode: "${firstMode.value}" }] })`);
201
+ return lines;
202
+ }
203
+ function formatDiscriminatorInfo(info, nodeId) {
204
+ if (info.type === 'none') {
205
+ return ' Discriminators: none (use node directly without resource/operation/mode)';
206
+ }
207
+ const lines = [' Discriminators:'];
208
+ if (info.type === 'resource_operation' && info.resources) {
209
+ lines.push(...formatResourceOperationLines(info.resources, nodeId));
210
+ }
211
+ else if (info.type === 'operation' && info.operations) {
212
+ lines.push(...formatOperationLines(info.operations, nodeId));
213
+ }
214
+ else if (info.type === 'mode' && info.modes) {
215
+ lines.push(...formatModeLines(info.modes, nodeId));
216
+ }
217
+ return lines.join('\n');
218
+ }
219
+ function formatNodeResult(nodeTypeParser, nodeId, version) {
220
+ const nodeType = nodeTypeParser.getLeanNodeType(nodeId, version);
221
+ if (!nodeType)
222
+ return undefined;
223
+ const resolvedVersion = version ?? (Array.isArray(nodeType.version) ? Math.max(...nodeType.version) : nodeType.version);
224
+ const triggerTag = (0, n8n_workflow_1.isTriggerNodeType)(nodeId) ? ' [TRIGGER]' : '';
225
+ const basicInfo = `- ${nodeId}${triggerTag}\n Display Name: ${nodeType.displayName}\n Version: ${resolvedVersion}\n Description: ${nodeType.description}`;
226
+ const builderHint = formatBuilderHint(nodeTypeParser, nodeId, resolvedVersion);
227
+ const relatedNodesWithHints = getRelatedNodesWithHints(nodeTypeParser, nodeId, resolvedVersion);
228
+ const discInfo = getDiscriminatorInfo(nodeTypeParser, nodeId, resolvedVersion);
229
+ const discStr = formatDiscriminatorInfo(discInfo, nodeId);
230
+ const parts = [basicInfo];
231
+ if (builderHint)
232
+ parts.push(builderHint);
233
+ if (relatedNodesWithHints && relatedNodesWithHints.length > 0) {
234
+ const relatedNodesStr = formatRelatedNodesWithHints(relatedNodesWithHints);
235
+ if (relatedNodesStr)
236
+ parts.push(relatedNodesStr);
237
+ }
238
+ if (discStr)
239
+ parts.push(discStr);
240
+ return parts.join('\n');
241
+ }
242
+ function searchForQuery(nodeTypeParser, query, nodeFilter) {
243
+ const results = nodeTypeParser.searchNodeTypes(query, 5, nodeFilter);
244
+ if (results.length === 0) {
245
+ return {
246
+ result: `## "${query}"\nNo nodes found. Try a different search term.`,
247
+ hasResults: false,
248
+ };
249
+ }
250
+ const shownNodeIds = new Set(results.map((node) => node.id));
251
+ const allNodeLines = [];
252
+ let totalRelatedCount = 0;
253
+ for (const node of results) {
254
+ const triggerTag = node.isTrigger ? ' [TRIGGER]' : '';
255
+ const basicInfo = `- ${node.id}${triggerTag}\n Display Name: ${node.displayName}\n Version: ${node.version}\n Description: ${node.description}`;
256
+ const builderHint = formatBuilderHint(nodeTypeParser, node.id, node.version);
257
+ const relatedNodesWithHints = getRelatedNodesWithHints(nodeTypeParser, node.id, node.version, nodeFilter);
258
+ const discInfo = getDiscriminatorInfo(nodeTypeParser, node.id, node.version);
259
+ const discStr = formatDiscriminatorInfo(discInfo, node.id);
239
260
  const parts = [basicInfo];
240
261
  if (builderHint)
241
262
  parts.push(builderHint);
@@ -244,88 +265,57 @@
244
265
  if (relatedNodesStr)
245
266
  parts.push(relatedNodesStr);
246
267
  }
247
- if (discStr)
248
- parts.push(discStr);
249
- return parts.join('\n');
250
- }
251
- function searchForQuery(nodeTypeParser, query, nodeFilter) {
252
- const results = nodeTypeParser.searchNodeTypes(query, 5, nodeFilter);
253
- if (results.length === 0) {
254
- return {
255
- result: `## "${query}"\nNo nodes found. Try a different search term.`,
256
- hasResults: false,
257
- };
258
- }
259
- const shownNodeIds = new Set(results.map((node) => node.id));
260
- const allNodeLines = [];
261
- let totalRelatedCount = 0;
262
- for (const node of results) {
263
- const triggerTag = node.isTrigger ? ' [TRIGGER]' : '';
264
- const basicInfo = `- ${node.id}${triggerTag}\n Display Name: ${node.displayName}\n Version: ${node.version}\n Description: ${node.description}`;
265
- const builderHint = formatBuilderHint(nodeTypeParser, node.id, node.version);
266
- const relatedNodesWithHints = getRelatedNodesWithHints(nodeTypeParser, node.id, node.version, nodeFilter);
267
- const discInfo = getDiscriminatorInfo(nodeTypeParser, node.id, node.version);
268
- const discStr = formatDiscriminatorInfo(discInfo, node.id);
269
- const parts = [basicInfo];
270
- if (builderHint)
271
- parts.push(builderHint);
272
- if (relatedNodesWithHints && relatedNodesWithHints.length > 0) {
273
- const relatedNodesStr = formatRelatedNodesWithHints(relatedNodesWithHints);
274
- if (relatedNodesStr)
275
- parts.push(relatedNodesStr);
276
- }
277
- else {
278
- const relatedNodeIds = collectAllRelatedNodeIds(nodeTypeParser, [{ id: node.id, version: node.version }], shownNodeIds);
279
- if (discStr)
280
- parts.push(discStr);
281
- allNodeLines.push(parts.join('\n'));
282
- for (const relatedId of relatedNodeIds) {
283
- if (nodeFilter && !nodeFilter(relatedId))
284
- continue;
285
- const nodeType = nodeTypeParser.getLeanNodeType(relatedId);
286
- if (nodeType) {
287
- const version = Array.isArray(nodeType.version)
288
- ? nodeType.version[nodeType.version.length - 1]
289
- : nodeType.version;
290
- const relatedTriggerTag = (0, n8n_workflow_1.isTriggerNodeType)(relatedId) ? ' [TRIGGER]' : '';
291
- const relatedBasicInfo = `- ${relatedId}${relatedTriggerTag} [RELATED]\n Display Name: ${nodeType.displayName}\n Version: ${version}\n Description: ${nodeType.description}`;
292
- const relatedBuilderHint = formatBuilderHint(nodeTypeParser, relatedId, version);
293
- const relatedDiscInfo = getDiscriminatorInfo(nodeTypeParser, relatedId, version);
294
- const relatedDiscStr = formatDiscriminatorInfo(relatedDiscInfo, relatedId);
295
- const relatedParts = [relatedBasicInfo];
296
- if (relatedBuilderHint)
297
- relatedParts.push(relatedBuilderHint);
298
- if (relatedDiscStr)
299
- relatedParts.push(relatedDiscStr);
300
- allNodeLines.push(relatedParts.join('\n'));
301
- shownNodeIds.add(relatedId);
302
- totalRelatedCount++;
303
- }
304
- }
305
- continue;
306
- }
268
+ else {
269
+ const relatedNodeIds = collectAllRelatedNodeIds(nodeTypeParser, [{ id: node.id, version: node.version }], shownNodeIds);
307
270
  if (discStr)
308
271
  parts.push(discStr);
309
272
  allNodeLines.push(parts.join('\n'));
273
+ for (const relatedId of relatedNodeIds) {
274
+ if (nodeFilter && !nodeFilter(relatedId))
275
+ continue;
276
+ const nodeType = nodeTypeParser.getLeanNodeType(relatedId);
277
+ if (nodeType) {
278
+ const version = Array.isArray(nodeType.version)
279
+ ? nodeType.version[nodeType.version.length - 1]
280
+ : nodeType.version;
281
+ const relatedTriggerTag = (0, n8n_workflow_1.isTriggerNodeType)(relatedId) ? ' [TRIGGER]' : '';
282
+ const relatedBasicInfo = `- ${relatedId}${relatedTriggerTag} [RELATED]\n Display Name: ${nodeType.displayName}\n Version: ${version}\n Description: ${nodeType.description}`;
283
+ const relatedBuilderHint = formatBuilderHint(nodeTypeParser, relatedId, version);
284
+ const relatedDiscInfo = getDiscriminatorInfo(nodeTypeParser, relatedId, version);
285
+ const relatedDiscStr = formatDiscriminatorInfo(relatedDiscInfo, relatedId);
286
+ const relatedParts = [relatedBasicInfo];
287
+ if (relatedBuilderHint)
288
+ relatedParts.push(relatedBuilderHint);
289
+ if (relatedDiscStr)
290
+ relatedParts.push(relatedDiscStr);
291
+ allNodeLines.push(relatedParts.join('\n'));
292
+ shownNodeIds.add(relatedId);
293
+ totalRelatedCount++;
294
+ }
295
+ }
296
+ continue;
310
297
  }
311
- const countSuffix = totalRelatedCount > 0 ? ` (+ ${totalRelatedCount} related)` : '';
312
- return {
313
- result: `## "${query}"\nFound ${results.length} nodes${countSuffix}:\n\n${allNodeLines.join('\n\n')}`,
314
- hasResults: true,
315
- };
316
- }
317
- function searchCodeBuilderNodes(nodeTypeParser, queries, options) {
318
- const { nodeFilter } = options ?? {};
319
- const searchResults = queries.map((query) => ({
320
- query,
321
- ...searchForQuery(nodeTypeParser, query, nodeFilter),
322
- }));
323
- return {
324
- results: searchResults.map(({ result }) => result).join('\n\n---\n\n'),
325
- queriesWithNoResults: searchResults
326
- .filter(({ hasResults }) => !hasResults)
327
- .map(({ query }) => query),
328
- };
298
+ if (discStr)
299
+ parts.push(discStr);
300
+ allNodeLines.push(parts.join('\n'));
329
301
  }
330
- });
302
+ const countSuffix = totalRelatedCount > 0 ? ` (+ ${totalRelatedCount} related)` : '';
303
+ return {
304
+ result: `## "${query}"\nFound ${results.length} nodes${countSuffix}:\n\n${allNodeLines.join('\n\n')}`,
305
+ hasResults: true,
306
+ };
307
+ }
308
+ function searchCodeBuilderNodes(nodeTypeParser, queries, options) {
309
+ const { nodeFilter } = options ?? {};
310
+ const searchResults = queries.map((query) => ({
311
+ query,
312
+ ...searchForQuery(nodeTypeParser, query, nodeFilter),
313
+ }));
314
+ return {
315
+ results: searchResults.map(({ result }) => result).join('\n\n---\n\n'),
316
+ queriesWithNoResults: searchResults
317
+ .filter(({ hasResults }) => !hasResults)
318
+ .map(({ query }) => query),
319
+ };
320
+ }
331
321
  //# sourceMappingURL=search.js.map