@atom8n/ai-workflow-builder 1.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 (455) hide show
  1. package/dist/agents/responder.agent.d.ts +21 -0
  2. package/dist/agents/responder.agent.js +71 -0
  3. package/dist/agents/responder.agent.js.map +1 -0
  4. package/dist/agents/supervisor.agent.d.ts +31 -0
  5. package/dist/agents/supervisor.agent.js +68 -0
  6. package/dist/agents/supervisor.agent.js.map +1 -0
  7. package/dist/ai-workflow-builder-agent.service.d.ts +32 -0
  8. package/dist/ai-workflow-builder-agent.service.js +236 -0
  9. package/dist/ai-workflow-builder-agent.service.js.map +1 -0
  10. package/dist/build.tsbuildinfo +1 -0
  11. package/dist/chains/conversation-compact.d.ts +7 -0
  12. package/dist/chains/conversation-compact.js +56 -0
  13. package/dist/chains/conversation-compact.js.map +1 -0
  14. package/dist/chains/parameter-updater.d.ts +16 -0
  15. package/dist/chains/parameter-updater.js +112 -0
  16. package/dist/chains/parameter-updater.js.map +1 -0
  17. package/dist/chains/prompt-categorization.d.ts +3 -0
  18. package/dist/chains/prompt-categorization.js +31 -0
  19. package/dist/chains/prompt-categorization.js.map +1 -0
  20. package/dist/chains/test/integration/test-helpers.d.ts +3 -0
  21. package/dist/chains/test/integration/test-helpers.js +16 -0
  22. package/dist/chains/test/integration/test-helpers.js.map +1 -0
  23. package/dist/chains/workflow-name.d.ts +4 -0
  24. package/dist/chains/workflow-name.js +22 -0
  25. package/dist/chains/workflow-name.js.map +1 -0
  26. package/dist/constants.d.ts +14 -0
  27. package/dist/constants.js +18 -0
  28. package/dist/constants.js.map +1 -0
  29. package/dist/errors/index.d.ts +52 -0
  30. package/dist/errors/index.js +137 -0
  31. package/dist/errors/index.js.map +1 -0
  32. package/dist/index.d.ts +4 -0
  33. package/dist/index.js +22 -0
  34. package/dist/index.js.map +1 -0
  35. package/dist/llm-config.d.ts +11 -0
  36. package/dist/llm-config.js +126 -0
  37. package/dist/llm-config.js.map +1 -0
  38. package/dist/multi-agent-workflow-subgraphs.d.ts +122 -0
  39. package/dist/multi-agent-workflow-subgraphs.js +159 -0
  40. package/dist/multi-agent-workflow-subgraphs.js.map +1 -0
  41. package/dist/parent-graph-state.d.ts +27 -0
  42. package/dist/parent-graph-state.js +47 -0
  43. package/dist/parent-graph-state.js.map +1 -0
  44. package/dist/prompts/agents/builder.prompt.d.ts +1 -0
  45. package/dist/prompts/agents/builder.prompt.js +320 -0
  46. package/dist/prompts/agents/builder.prompt.js.map +1 -0
  47. package/dist/prompts/agents/configurator.prompt.d.ts +2 -0
  48. package/dist/prompts/agents/configurator.prompt.js +143 -0
  49. package/dist/prompts/agents/configurator.prompt.js.map +1 -0
  50. package/dist/prompts/agents/discovery.prompt.d.ts +11 -0
  51. package/dist/prompts/agents/discovery.prompt.js +260 -0
  52. package/dist/prompts/agents/discovery.prompt.js.map +1 -0
  53. package/dist/prompts/agents/responder.prompt.d.ts +1 -0
  54. package/dist/prompts/agents/responder.prompt.js +41 -0
  55. package/dist/prompts/agents/responder.prompt.js.map +1 -0
  56. package/dist/prompts/agents/supervisor.prompt.d.ts +1 -0
  57. package/dist/prompts/agents/supervisor.prompt.js +43 -0
  58. package/dist/prompts/agents/supervisor.prompt.js.map +1 -0
  59. package/dist/prompts/builder/index.d.ts +2 -0
  60. package/dist/prompts/builder/index.js +7 -0
  61. package/dist/prompts/builder/index.js.map +1 -0
  62. package/dist/prompts/builder/prompt-builder.d.ts +17 -0
  63. package/dist/prompts/builder/prompt-builder.js +147 -0
  64. package/dist/prompts/builder/prompt-builder.js.map +1 -0
  65. package/dist/prompts/builder/types.d.ts +22 -0
  66. package/dist/prompts/builder/types.js +3 -0
  67. package/dist/prompts/builder/types.js.map +1 -0
  68. package/dist/prompts/chains/categorization.prompt.d.ts +43 -0
  69. package/dist/prompts/chains/categorization.prompt.js +86 -0
  70. package/dist/prompts/chains/categorization.prompt.js.map +1 -0
  71. package/dist/prompts/chains/compact.prompt.d.ts +2 -0
  72. package/dist/prompts/chains/compact.prompt.js +16 -0
  73. package/dist/prompts/chains/compact.prompt.js.map +1 -0
  74. package/dist/prompts/chains/parameter-updater/examples/if-node.d.ts +2 -0
  75. package/dist/prompts/chains/parameter-updater/examples/if-node.js +141 -0
  76. package/dist/prompts/chains/parameter-updater/examples/if-node.js.map +1 -0
  77. package/dist/prompts/chains/parameter-updater/examples/index.d.ts +6 -0
  78. package/dist/prompts/chains/parameter-updater/examples/index.js +16 -0
  79. package/dist/prompts/chains/parameter-updater/examples/index.js.map +1 -0
  80. package/dist/prompts/chains/parameter-updater/examples/resource-locator.d.ts +2 -0
  81. package/dist/prompts/chains/parameter-updater/examples/resource-locator.js +83 -0
  82. package/dist/prompts/chains/parameter-updater/examples/resource-locator.js.map +1 -0
  83. package/dist/prompts/chains/parameter-updater/examples/set-node.d.ts +2 -0
  84. package/dist/prompts/chains/parameter-updater/examples/set-node.js +151 -0
  85. package/dist/prompts/chains/parameter-updater/examples/set-node.js.map +1 -0
  86. package/dist/prompts/chains/parameter-updater/examples/simple-updates.d.ts +2 -0
  87. package/dist/prompts/chains/parameter-updater/examples/simple-updates.js +54 -0
  88. package/dist/prompts/chains/parameter-updater/examples/simple-updates.js.map +1 -0
  89. package/dist/prompts/chains/parameter-updater/examples/switch-node.d.ts +2 -0
  90. package/dist/prompts/chains/parameter-updater/examples/switch-node.js +131 -0
  91. package/dist/prompts/chains/parameter-updater/examples/switch-node.js.map +1 -0
  92. package/dist/prompts/chains/parameter-updater/examples/tool-nodes.d.ts +2 -0
  93. package/dist/prompts/chains/parameter-updater/examples/tool-nodes.js +74 -0
  94. package/dist/prompts/chains/parameter-updater/examples/tool-nodes.js.map +1 -0
  95. package/dist/prompts/chains/parameter-updater/guides/embedding-nodes.d.ts +2 -0
  96. package/dist/prompts/chains/parameter-updater/guides/embedding-nodes.js +70 -0
  97. package/dist/prompts/chains/parameter-updater/guides/embedding-nodes.js.map +1 -0
  98. package/dist/prompts/chains/parameter-updater/guides/gmail.d.ts +2 -0
  99. package/dist/prompts/chains/parameter-updater/guides/gmail.js +28 -0
  100. package/dist/prompts/chains/parameter-updater/guides/gmail.js.map +1 -0
  101. package/dist/prompts/chains/parameter-updater/guides/http-request.d.ts +2 -0
  102. package/dist/prompts/chains/parameter-updater/guides/http-request.js +139 -0
  103. package/dist/prompts/chains/parameter-updater/guides/http-request.js.map +1 -0
  104. package/dist/prompts/chains/parameter-updater/guides/if-node.d.ts +2 -0
  105. package/dist/prompts/chains/parameter-updater/guides/if-node.js +159 -0
  106. package/dist/prompts/chains/parameter-updater/guides/if-node.js.map +1 -0
  107. package/dist/prompts/chains/parameter-updater/guides/index.d.ts +10 -0
  108. package/dist/prompts/chains/parameter-updater/guides/index.js +24 -0
  109. package/dist/prompts/chains/parameter-updater/guides/index.js.map +1 -0
  110. package/dist/prompts/chains/parameter-updater/guides/resource-locator.d.ts +2 -0
  111. package/dist/prompts/chains/parameter-updater/guides/resource-locator.js +99 -0
  112. package/dist/prompts/chains/parameter-updater/guides/resource-locator.js.map +1 -0
  113. package/dist/prompts/chains/parameter-updater/guides/set-node.d.ts +2 -0
  114. package/dist/prompts/chains/parameter-updater/guides/set-node.js +94 -0
  115. package/dist/prompts/chains/parameter-updater/guides/set-node.js.map +1 -0
  116. package/dist/prompts/chains/parameter-updater/guides/switch-node.d.ts +2 -0
  117. package/dist/prompts/chains/parameter-updater/guides/switch-node.js +75 -0
  118. package/dist/prompts/chains/parameter-updater/guides/switch-node.js.map +1 -0
  119. package/dist/prompts/chains/parameter-updater/guides/system-message.d.ts +2 -0
  120. package/dist/prompts/chains/parameter-updater/guides/system-message.js +96 -0
  121. package/dist/prompts/chains/parameter-updater/guides/system-message.js.map +1 -0
  122. package/dist/prompts/chains/parameter-updater/guides/text-fields.d.ts +2 -0
  123. package/dist/prompts/chains/parameter-updater/guides/text-fields.js +31 -0
  124. package/dist/prompts/chains/parameter-updater/guides/text-fields.js.map +1 -0
  125. package/dist/prompts/chains/parameter-updater/guides/tool-nodes.d.ts +2 -0
  126. package/dist/prompts/chains/parameter-updater/guides/tool-nodes.js +76 -0
  127. package/dist/prompts/chains/parameter-updater/guides/tool-nodes.js.map +1 -0
  128. package/dist/prompts/chains/parameter-updater/index.d.ts +8 -0
  129. package/dist/prompts/chains/parameter-updater/index.js +35 -0
  130. package/dist/prompts/chains/parameter-updater/index.js.map +1 -0
  131. package/dist/prompts/chains/parameter-updater/instance-url.d.ts +1 -0
  132. package/dist/prompts/chains/parameter-updater/instance-url.js +15 -0
  133. package/dist/prompts/chains/parameter-updater/instance-url.js.map +1 -0
  134. package/dist/prompts/chains/parameter-updater/parameter-updater.prompt.d.ts +4 -0
  135. package/dist/prompts/chains/parameter-updater/parameter-updater.prompt.js +52 -0
  136. package/dist/prompts/chains/parameter-updater/parameter-updater.prompt.js.map +1 -0
  137. package/dist/prompts/chains/parameter-updater/registry.d.ts +4 -0
  138. package/dist/prompts/chains/parameter-updater/registry.js +66 -0
  139. package/dist/prompts/chains/parameter-updater/registry.js.map +1 -0
  140. package/dist/prompts/chains/parameter-updater/types.d.ts +18 -0
  141. package/dist/prompts/chains/parameter-updater/types.js +3 -0
  142. package/dist/prompts/chains/parameter-updater/types.js.map +1 -0
  143. package/dist/prompts/chains/parameter-updater/utils.d.ts +2 -0
  144. package/dist/prompts/chains/parameter-updater/utils.js +16 -0
  145. package/dist/prompts/chains/parameter-updater/utils.js.map +1 -0
  146. package/dist/prompts/chains/workflow-name.prompt.d.ts +2 -0
  147. package/dist/prompts/chains/workflow-name.prompt.js +11 -0
  148. package/dist/prompts/chains/workflow-name.prompt.js.map +1 -0
  149. package/dist/prompts/index.d.ts +12 -0
  150. package/dist/prompts/index.js +50 -0
  151. package/dist/prompts/index.js.map +1 -0
  152. package/dist/prompts/legacy-agent.prompt.d.ts +6 -0
  153. package/dist/prompts/legacy-agent.prompt.js +594 -0
  154. package/dist/prompts/legacy-agent.prompt.js.map +1 -0
  155. package/dist/session-manager.service.d.ts +16 -0
  156. package/dist/session-manager.service.js +125 -0
  157. package/dist/session-manager.service.js.map +1 -0
  158. package/dist/subgraphs/builder.subgraph.d.ts +132 -0
  159. package/dist/subgraphs/builder.subgraph.js +173 -0
  160. package/dist/subgraphs/builder.subgraph.js.map +1 -0
  161. package/dist/subgraphs/configurator.subgraph.d.ts +142 -0
  162. package/dist/subgraphs/configurator.subgraph.js +173 -0
  163. package/dist/subgraphs/configurator.subgraph.js.map +1 -0
  164. package/dist/subgraphs/discovery.subgraph.d.ts +158 -0
  165. package/dist/subgraphs/discovery.subgraph.js +221 -0
  166. package/dist/subgraphs/discovery.subgraph.js.map +1 -0
  167. package/dist/subgraphs/subgraph-interface.d.ts +23 -0
  168. package/dist/subgraphs/subgraph-interface.js +7 -0
  169. package/dist/subgraphs/subgraph-interface.js.map +1 -0
  170. package/dist/tools/add-node.tool.d.ts +54 -0
  171. package/dist/tools/add-node.tool.js +176 -0
  172. package/dist/tools/add-node.tool.js.map +1 -0
  173. package/dist/tools/best-practices/chatbot.d.ts +7 -0
  174. package/dist/tools/best-practices/chatbot.js +118 -0
  175. package/dist/tools/best-practices/chatbot.js.map +1 -0
  176. package/dist/tools/best-practices/content-generation.d.ts +7 -0
  177. package/dist/tools/best-practices/content-generation.js +115 -0
  178. package/dist/tools/best-practices/content-generation.js.map +1 -0
  179. package/dist/tools/best-practices/data-analysis.d.ts +7 -0
  180. package/dist/tools/best-practices/data-analysis.js +367 -0
  181. package/dist/tools/best-practices/data-analysis.js.map +1 -0
  182. package/dist/tools/best-practices/data-extraction.d.ts +7 -0
  183. package/dist/tools/best-practices/data-extraction.js +122 -0
  184. package/dist/tools/best-practices/data-extraction.js.map +1 -0
  185. package/dist/tools/best-practices/data-transformation.d.ts +7 -0
  186. package/dist/tools/best-practices/data-transformation.js +162 -0
  187. package/dist/tools/best-practices/data-transformation.js.map +1 -0
  188. package/dist/tools/best-practices/document-processing.d.ts +7 -0
  189. package/dist/tools/best-practices/document-processing.js +335 -0
  190. package/dist/tools/best-practices/document-processing.js.map +1 -0
  191. package/dist/tools/best-practices/enrichment.d.ts +7 -0
  192. package/dist/tools/best-practices/enrichment.js +271 -0
  193. package/dist/tools/best-practices/enrichment.js.map +1 -0
  194. package/dist/tools/best-practices/form-input.d.ts +7 -0
  195. package/dist/tools/best-practices/form-input.js +173 -0
  196. package/dist/tools/best-practices/form-input.js.map +1 -0
  197. package/dist/tools/best-practices/human-in-the-loop.d.ts +7 -0
  198. package/dist/tools/best-practices/human-in-the-loop.js +268 -0
  199. package/dist/tools/best-practices/human-in-the-loop.js.map +1 -0
  200. package/dist/tools/best-practices/index.d.ts +3 -0
  201. package/dist/tools/best-practices/index.js +29 -0
  202. package/dist/tools/best-practices/index.js.map +1 -0
  203. package/dist/tools/best-practices/knowledge-base.d.ts +7 -0
  204. package/dist/tools/best-practices/knowledge-base.js +268 -0
  205. package/dist/tools/best-practices/knowledge-base.js.map +1 -0
  206. package/dist/tools/best-practices/monitoring.d.ts +7 -0
  207. package/dist/tools/best-practices/monitoring.js +178 -0
  208. package/dist/tools/best-practices/monitoring.js.map +1 -0
  209. package/dist/tools/best-practices/notification.d.ts +7 -0
  210. package/dist/tools/best-practices/notification.js +229 -0
  211. package/dist/tools/best-practices/notification.js.map +1 -0
  212. package/dist/tools/best-practices/scheduling.d.ts +7 -0
  213. package/dist/tools/best-practices/scheduling.js +281 -0
  214. package/dist/tools/best-practices/scheduling.js.map +1 -0
  215. package/dist/tools/best-practices/scraping-and-research.d.ts +7 -0
  216. package/dist/tools/best-practices/scraping-and-research.js +161 -0
  217. package/dist/tools/best-practices/scraping-and-research.js.map +1 -0
  218. package/dist/tools/best-practices/triage.d.ts +7 -0
  219. package/dist/tools/best-practices/triage.js +211 -0
  220. package/dist/tools/best-practices/triage.js.map +1 -0
  221. package/dist/tools/builder-tools.d.ts +16 -0
  222. package/dist/tools/builder-tools.js +36 -0
  223. package/dist/tools/builder-tools.js.map +1 -0
  224. package/dist/tools/categorize-prompt.tool.d.ts +5 -0
  225. package/dist/tools/categorize-prompt.tool.js +85 -0
  226. package/dist/tools/categorize-prompt.tool.js.map +1 -0
  227. package/dist/tools/connect-nodes.tool.d.ts +22 -0
  228. package/dist/tools/connect-nodes.tool.js +231 -0
  229. package/dist/tools/connect-nodes.tool.js.map +1 -0
  230. package/dist/tools/engines/node-search-engine.d.ts +16 -0
  231. package/dist/tools/engines/node-search-engine.js +123 -0
  232. package/dist/tools/engines/node-search-engine.js.map +1 -0
  233. package/dist/tools/get-best-practices.tool.d.ts +33 -0
  234. package/dist/tools/get-best-practices.tool.js +94 -0
  235. package/dist/tools/get-best-practices.tool.js.map +1 -0
  236. package/dist/tools/get-node-examples.tool.d.ts +119 -0
  237. package/dist/tools/get-node-examples.tool.js +189 -0
  238. package/dist/tools/get-node-examples.tool.js.map +1 -0
  239. package/dist/tools/get-node-parameter.tool.d.ts +4 -0
  240. package/dist/tools/get-node-parameter.tool.js +114 -0
  241. package/dist/tools/get-node-parameter.tool.js.map +1 -0
  242. package/dist/tools/get-workflow-examples.tool.d.ts +34 -0
  243. package/dist/tools/get-workflow-examples.tool.js +138 -0
  244. package/dist/tools/get-workflow-examples.tool.js.map +1 -0
  245. package/dist/tools/helpers/index.d.ts +4 -0
  246. package/dist/tools/helpers/index.js +21 -0
  247. package/dist/tools/helpers/index.js.map +1 -0
  248. package/dist/tools/helpers/progress.d.ts +9 -0
  249. package/dist/tools/helpers/progress.js +126 -0
  250. package/dist/tools/helpers/progress.js.map +1 -0
  251. package/dist/tools/helpers/response.d.ts +7 -0
  252. package/dist/tools/helpers/response.js +33 -0
  253. package/dist/tools/helpers/response.js.map +1 -0
  254. package/dist/tools/helpers/state.d.ts +14 -0
  255. package/dist/tools/helpers/state.js +85 -0
  256. package/dist/tools/helpers/state.js.map +1 -0
  257. package/dist/tools/helpers/validation.d.ts +13 -0
  258. package/dist/tools/helpers/validation.js +83 -0
  259. package/dist/tools/helpers/validation.js.map +1 -0
  260. package/dist/tools/node-details.tool.d.ts +31 -0
  261. package/dist/tools/node-details.tool.js +201 -0
  262. package/dist/tools/node-details.tool.js.map +1 -0
  263. package/dist/tools/node-search.tool.d.ts +62 -0
  264. package/dist/tools/node-search.tool.js +155 -0
  265. package/dist/tools/node-search.tool.js.map +1 -0
  266. package/dist/tools/remove-connection.tool.d.ts +24 -0
  267. package/dist/tools/remove-connection.tool.js +234 -0
  268. package/dist/tools/remove-connection.tool.js.map +1 -0
  269. package/dist/tools/remove-node.tool.d.ts +4 -0
  270. package/dist/tools/remove-node.tool.js +106 -0
  271. package/dist/tools/remove-node.tool.js.map +1 -0
  272. package/dist/tools/update-node-parameters.tool.d.ts +5 -0
  273. package/dist/tools/update-node-parameters.tool.js +156 -0
  274. package/dist/tools/update-node-parameters.tool.js.map +1 -0
  275. package/dist/tools/utils/connection-parameters.utils.d.ts +8 -0
  276. package/dist/tools/utils/connection-parameters.utils.js +47 -0
  277. package/dist/tools/utils/connection-parameters.utils.js.map +1 -0
  278. package/dist/tools/utils/connection.utils.d.ts +15 -0
  279. package/dist/tools/utils/connection.utils.js +321 -0
  280. package/dist/tools/utils/connection.utils.js.map +1 -0
  281. package/dist/tools/utils/mermaid.utils.d.ts +13 -0
  282. package/dist/tools/utils/mermaid.utils.js +647 -0
  283. package/dist/tools/utils/mermaid.utils.js.map +1 -0
  284. package/dist/tools/utils/node-configuration.utils.d.ts +13 -0
  285. package/dist/tools/utils/node-configuration.utils.js +75 -0
  286. package/dist/tools/utils/node-configuration.utils.js.map +1 -0
  287. package/dist/tools/utils/node-creation.utils.d.ts +8 -0
  288. package/dist/tools/utils/node-creation.utils.js +56 -0
  289. package/dist/tools/utils/node-creation.utils.js.map +1 -0
  290. package/dist/tools/utils/node-positioning.utils.d.ts +17 -0
  291. package/dist/tools/utils/node-positioning.utils.js +87 -0
  292. package/dist/tools/utils/node-positioning.utils.js.map +1 -0
  293. package/dist/tools/utils/parameter-update.utils.d.ts +6 -0
  294. package/dist/tools/utils/parameter-update.utils.js +75 -0
  295. package/dist/tools/utils/parameter-update.utils.js.map +1 -0
  296. package/dist/tools/utils/test/workflows/ai-assistant.workflow.d.ts +2 -0
  297. package/dist/tools/utils/test/workflows/ai-assistant.workflow.js +542 -0
  298. package/dist/tools/utils/test/workflows/ai-assistant.workflow.js.map +1 -0
  299. package/dist/tools/validate-configuration.tool.d.ts +4 -0
  300. package/dist/tools/validate-configuration.tool.js +70 -0
  301. package/dist/tools/validate-configuration.tool.js.map +1 -0
  302. package/dist/tools/validate-structure.tool.d.ts +4 -0
  303. package/dist/tools/validate-structure.tool.js +66 -0
  304. package/dist/tools/validate-structure.tool.js.map +1 -0
  305. package/dist/tools/validate-workflow.tool.d.ts +5 -0
  306. package/dist/tools/validate-workflow.tool.js +73 -0
  307. package/dist/tools/validate-workflow.tool.js.map +1 -0
  308. package/dist/tools/web/templates.d.ts +23 -0
  309. package/dist/tools/web/templates.js +106 -0
  310. package/dist/tools/web/templates.js.map +1 -0
  311. package/dist/types/best-practices.d.ts +6 -0
  312. package/dist/types/best-practices.js +3 -0
  313. package/dist/types/best-practices.js.map +1 -0
  314. package/dist/types/categorization.d.ts +23 -0
  315. package/dist/types/categorization.js +38 -0
  316. package/dist/types/categorization.js.map +1 -0
  317. package/dist/types/config.d.ts +55 -0
  318. package/dist/types/config.js +3 -0
  319. package/dist/types/config.js.map +1 -0
  320. package/dist/types/connections.d.ts +30 -0
  321. package/dist/types/connections.js +3 -0
  322. package/dist/types/connections.js.map +1 -0
  323. package/dist/types/coordination.d.ts +42 -0
  324. package/dist/types/coordination.js +23 -0
  325. package/dist/types/coordination.js.map +1 -0
  326. package/dist/types/discovery-types.d.ts +12 -0
  327. package/dist/types/discovery-types.js +3 -0
  328. package/dist/types/discovery-types.js.map +1 -0
  329. package/dist/types/index.d.ts +11 -0
  330. package/dist/types/index.js +18 -0
  331. package/dist/types/index.js.map +1 -0
  332. package/dist/types/langchain.d.ts +3 -0
  333. package/dist/types/langchain.js +15 -0
  334. package/dist/types/langchain.js.map +1 -0
  335. package/dist/types/messages.d.ts +32 -0
  336. package/dist/types/messages.js +3 -0
  337. package/dist/types/messages.js.map +1 -0
  338. package/dist/types/nodes.d.ts +27 -0
  339. package/dist/types/nodes.js +3 -0
  340. package/dist/types/nodes.js.map +1 -0
  341. package/dist/types/sessions.d.ts +8 -0
  342. package/dist/types/sessions.js +34 -0
  343. package/dist/types/sessions.js.map +1 -0
  344. package/dist/types/streaming.d.ts +33 -0
  345. package/dist/types/streaming.js +3 -0
  346. package/dist/types/streaming.js.map +1 -0
  347. package/dist/types/tools.d.ts +120 -0
  348. package/dist/types/tools.js +3 -0
  349. package/dist/types/tools.js.map +1 -0
  350. package/dist/types/utils.d.ts +2 -0
  351. package/dist/types/utils.js +3 -0
  352. package/dist/types/utils.js.map +1 -0
  353. package/dist/types/web/templates.d.ts +45 -0
  354. package/dist/types/web/templates.js +37 -0
  355. package/dist/types/web/templates.js.map +1 -0
  356. package/dist/types/workflow.d.ts +31 -0
  357. package/dist/types/workflow.js +3 -0
  358. package/dist/types/workflow.js.map +1 -0
  359. package/dist/utils/cache-control/helpers.d.ts +5 -0
  360. package/dist/utils/cache-control/helpers.js +126 -0
  361. package/dist/utils/cache-control/helpers.js.map +1 -0
  362. package/dist/utils/cache-control/index.d.ts +1 -0
  363. package/dist/utils/cache-control/index.js +9 -0
  364. package/dist/utils/cache-control/index.js.map +1 -0
  365. package/dist/utils/cleanup-dangling-tool-call-messages.d.ts +3 -0
  366. package/dist/utils/cleanup-dangling-tool-call-messages.js +10 -0
  367. package/dist/utils/cleanup-dangling-tool-call-messages.js.map +1 -0
  368. package/dist/utils/context-builders.d.ts +10 -0
  369. package/dist/utils/context-builders.js +71 -0
  370. package/dist/utils/context-builders.js.map +1 -0
  371. package/dist/utils/coordination-log.d.ts +15 -0
  372. package/dist/utils/coordination-log.js +75 -0
  373. package/dist/utils/coordination-log.js.map +1 -0
  374. package/dist/utils/http-proxy-agent.d.ts +2 -0
  375. package/dist/utils/http-proxy-agent.js +16 -0
  376. package/dist/utils/http-proxy-agent.js.map +1 -0
  377. package/dist/utils/node-helpers.d.ts +2 -0
  378. package/dist/utils/node-helpers.js +54 -0
  379. package/dist/utils/node-helpers.js.map +1 -0
  380. package/dist/utils/operations-processor.d.ts +14 -0
  381. package/dist/utils/operations-processor.js +196 -0
  382. package/dist/utils/operations-processor.js.map +1 -0
  383. package/dist/utils/state-modifier.d.ts +32 -0
  384. package/dist/utils/state-modifier.js +112 -0
  385. package/dist/utils/state-modifier.js.map +1 -0
  386. package/dist/utils/state-reducers.d.ts +3 -0
  387. package/dist/utils/state-reducers.js +20 -0
  388. package/dist/utils/state-reducers.js.map +1 -0
  389. package/dist/utils/stream-processor.d.ts +20 -0
  390. package/dist/utils/stream-processor.js +277 -0
  391. package/dist/utils/stream-processor.js.map +1 -0
  392. package/dist/utils/subgraph-helpers.d.ts +16 -0
  393. package/dist/utils/subgraph-helpers.js +117 -0
  394. package/dist/utils/subgraph-helpers.js.map +1 -0
  395. package/dist/utils/token-usage.d.ts +21 -0
  396. package/dist/utils/token-usage.js +45 -0
  397. package/dist/utils/token-usage.js.map +1 -0
  398. package/dist/utils/tool-executor.d.ts +3 -0
  399. package/dist/utils/tool-executor.js +108 -0
  400. package/dist/utils/tool-executor.js.map +1 -0
  401. package/dist/utils/trim-workflow-context.d.ts +2 -0
  402. package/dist/utils/trim-workflow-context.js +53 -0
  403. package/dist/utils/trim-workflow-context.js.map +1 -0
  404. package/dist/utils/workflow-validation.d.ts +2 -0
  405. package/dist/utils/workflow-validation.js +37 -0
  406. package/dist/utils/workflow-validation.js.map +1 -0
  407. package/dist/validation/checks/agent-prompt.d.ts +3 -0
  408. package/dist/validation/checks/agent-prompt.js +47 -0
  409. package/dist/validation/checks/agent-prompt.js.map +1 -0
  410. package/dist/validation/checks/connections.d.ts +4 -0
  411. package/dist/validation/checks/connections.js +163 -0
  412. package/dist/validation/checks/connections.js.map +1 -0
  413. package/dist/validation/checks/credentials.d.ts +3 -0
  414. package/dist/validation/checks/credentials.js +125 -0
  415. package/dist/validation/checks/credentials.js.map +1 -0
  416. package/dist/validation/checks/from-ai.d.ts +4 -0
  417. package/dist/validation/checks/from-ai.js +62 -0
  418. package/dist/validation/checks/from-ai.js.map +1 -0
  419. package/dist/validation/checks/index.d.ts +7 -0
  420. package/dist/validation/checks/index.js +18 -0
  421. package/dist/validation/checks/index.js.map +1 -0
  422. package/dist/validation/checks/nodes.d.ts +4 -0
  423. package/dist/validation/checks/nodes.js +44 -0
  424. package/dist/validation/checks/nodes.js.map +1 -0
  425. package/dist/validation/checks/tools.d.ts +4 -0
  426. package/dist/validation/checks/tools.js +38 -0
  427. package/dist/validation/checks/tools.js.map +1 -0
  428. package/dist/validation/checks/trigger.d.ts +8 -0
  429. package/dist/validation/checks/trigger.js +33 -0
  430. package/dist/validation/checks/trigger.js.map +1 -0
  431. package/dist/validation/programmatic.d.ts +3 -0
  432. package/dist/validation/programmatic.js +24 -0
  433. package/dist/validation/programmatic.js.map +1 -0
  434. package/dist/validation/types.d.ts +52 -0
  435. package/dist/validation/types.js +31 -0
  436. package/dist/validation/types.js.map +1 -0
  437. package/dist/validation/utils/expressions.d.ts +3 -0
  438. package/dist/validation/utils/expressions.js +37 -0
  439. package/dist/validation/utils/expressions.js.map +1 -0
  440. package/dist/validation/utils/is-tool.d.ts +2 -0
  441. package/dist/validation/utils/is-tool.js +7 -0
  442. package/dist/validation/utils/is-tool.js.map +1 -0
  443. package/dist/validation/utils/node-type-map.d.ts +8 -0
  444. package/dist/validation/utils/node-type-map.js +50 -0
  445. package/dist/validation/utils/node-type-map.js.map +1 -0
  446. package/dist/validation/utils/resolve-connections.d.ts +8 -0
  447. package/dist/validation/utils/resolve-connections.js +64 -0
  448. package/dist/validation/utils/resolve-connections.js.map +1 -0
  449. package/dist/workflow-builder-agent.d.ts +72 -0
  450. package/dist/workflow-builder-agent.js +401 -0
  451. package/dist/workflow-builder-agent.js.map +1 -0
  452. package/dist/workflow-state.d.ts +26 -0
  453. package/dist/workflow-state.js +79 -0
  454. package/dist/workflow-state.js.map +1 -0
  455. package/package.json +77 -0
@@ -0,0 +1,335 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.DocumentProcessingBestPractices = void 0;
4
+ const categorization_1 = require("../../types/categorization");
5
+ class DocumentProcessingBestPractices {
6
+ technique = categorization_1.WorkflowTechnique.DOCUMENT_PROCESSING;
7
+ version = '1.0.0';
8
+ documentation = `# Best Practices: Document Processing Workflows
9
+
10
+ ## Workflow Design
11
+
12
+ Document processing workflows extract and act on content from files like PDFs, images, Word documents, and spreadsheets. Design your workflow following these core patterns:
13
+
14
+ ### Core Architecture Pattern
15
+ Trigger → Capture Binary → Extract Text → Parse/Transform → Route to Destination → Notify
16
+
17
+ ### Common Flow Patterns
18
+
19
+ **Simple Document Processing:**
20
+ - Gmail Trigger → Check file type → Extract from File → DataTable → Slack notification
21
+ - Best for: Basic text-based PDFs with straightforward data extraction
22
+
23
+ **Complex Document Processing with AI:**
24
+ - Webhook → File Type Check → OCR (if image) → AI Extract → Validate → CRM Update → Multiple notifications
25
+ - Best for: Varied document formats requiring intelligent parsing
26
+
27
+ **Batch Document Processing:**
28
+ - Main workflow: Schedule Trigger → Fetch Files → Split In Batches → Sub-workflow → Merge Results → Bulk Update
29
+ - Sub-workflow When Executed by Another Workflow -> Process result
30
+ - Best for: High-volume processing with API rate limits
31
+
32
+ **Multi-Source Document Aggregation:**
33
+ - Multiple Triggers (Email + Drive + Webhook) → Set common fields → Standardize → Process → Store
34
+ - Best for: Documents from various channels needing unified processing
35
+
36
+ ### Branching Strategy
37
+
38
+ Always branch early based on document characteristics:
39
+ - **File Type Branching**: Use IF/Switch nodes immediately after ingestion to route PDFs vs images vs spreadsheets
40
+ - **Provider Branching**: Route documents to provider-specific processing (e.g., different invoice formats)
41
+ - **Quality Branching**: Separate high-confidence extractions from those needing manual review
42
+
43
+ ## Binary Data Management
44
+ Documents in n8n are handled as binary data that must be carefully preserved throughout the workflow.
45
+
46
+ ### Referencing Binary Data from Other Nodes
47
+ When you need to reference binary data from a previous node, use this syntax:
48
+ - Expression: '{{ $('Node Name').item.binary.property_name }}' or {{ $binary.property_name }} if previous item
49
+ - Example for Gmail attachments: '{{ $('Gmail Trigger').item.binary.attachment_0 }}' or {{ $binary.attachment_0 }} if previous item
50
+ - Example for webhook data: '{{ $('Webhook').item.binary.data }}' or {{ $binary.data }} if previous item
51
+ - Important: The property name depends on how the previous node names the binary data
52
+
53
+ ### Preserving Binary Data
54
+ - Many nodes (Code, Edit Fields, AI nodes) output JSON and drop binary data by default
55
+ - Use parallel branches: one for processing, one to preserve the original file
56
+ - Rejoin branches with Merge node in pass-through mode
57
+ - Alternative: Configure nodes to keep binary (e.g., Edit field node's "Include Other Input Fields" option ON)
58
+
59
+ ### Memory Optimization
60
+ For high-volume processing:
61
+ - Process files sequentially or in small batches
62
+ - Drop unnecessary binary data after extraction to free memory
63
+
64
+ ### File Metadata
65
+ Documents uploaded via a form trigger will have various bits of metadata available - filename, mimetype and size.
66
+ These are accessible using an expression like {{ $json.documents[0].mimetype }} to access each of the document's details.
67
+ Multiple files can be uploaded to a form which is the reason for the documents array.
68
+
69
+ ## Text Extraction Strategy
70
+
71
+ Choose extraction method based on document type and content:
72
+
73
+ ### Critical: File Type Detection
74
+ **ALWAYS check the file type before using Extract from File node** (unless the file type is already known):
75
+ - Use IF node to check file extension or MIME type first
76
+ - The Extract from File node has multiple operations, each for a specific file type:
77
+ - "Extract from PDF" for PDF files
78
+ - "Extract from MS Excel" for Excel files (.xlsx, .xls)
79
+ - "Extract from MS Word" for Word documents (.docx, .doc)
80
+ - "Extract from CSV" for CSV files
81
+ - "Extract from HTML" for HTML files
82
+ - "Extract from RTF" for Rich Text Format files
83
+ - "Extract from Text File" for plain text files
84
+ - Using the wrong operation will result in errors or empty output
85
+
86
+ ### Decision Tree for Extraction
87
+ 1. **Check file type** → Route to appropriate extraction method
88
+ 2. **Scanned image/PDF?** → Use OCR service (OCR.space, AWS Textract, Google Vision)
89
+ 3. **Structured invoice/receipt?** → Use specialized parser (Mindee) or AI extraction
90
+ 4. **Text-based document?** → Use Extract from File with the correct operation for that file type
91
+
92
+ ### Fallback Strategy
93
+ Always implement fallback for extraction failures:
94
+ - Check if text extraction returns empty
95
+ - If empty, automatically route to OCR
96
+ - If OCR fails, send to manual review queue
97
+
98
+ ## Data Parsing & Classification
99
+
100
+ ### AI-Powered Extraction Pattern
101
+ For varied or complex documents:
102
+
103
+ Option 1 - Using Document Loader (Recommended for binary files):
104
+ 1. Pass binary data directly to Document Loader node (set Data Source to "Binary")
105
+ 2. Connect to AI Agent or LLM Chain for processing
106
+ 3. Use Structured Output Parser to ensure consistent JSON
107
+ 4. Validate extracted fields before processing
108
+
109
+ Option 2 - Using text extraction:
110
+ 1. Extract raw text using Extract from File or OCR
111
+ 2. Pass to AI Agent or LLM Chain with structured prompt
112
+ 3. Use Structured Output Parser to ensure consistent JSON
113
+ 4. Validate extracted fields before processing
114
+
115
+ Example system prompt structure:
116
+ "Extract the following fields from the document: [field list]. Return as JSON with this schema: [schema example]"
117
+
118
+ ### Document Classification Flow
119
+ Classify before processing for better accuracy:
120
+ 1. Initial AI classification (Invoice vs Receipt vs Contract)
121
+ 2. Route to specialized sub-workflow based on type
122
+ 3. Use type-specific prompts and validation rules
123
+ 4. This reduces errors and improves extraction quality
124
+
125
+ ## Error Handling Strategy
126
+
127
+ Build resilience at every step:
128
+
129
+ ### Validation Checkpoints
130
+ - After extraction: Verify text not empty
131
+ - After AI parsing: Validate JSON schema
132
+ - Before database insert: Check required fields
133
+ - After API calls: Verify success response
134
+
135
+ ## Performance Optimization
136
+
137
+ ### Batch Processing Strategy
138
+ - Use Split In Batches node: process 5-10 files at a time
139
+ - Implement delays between batches for rate-limited APIs
140
+ - Monitor memory usage and adjust batch size accordingly
141
+
142
+ ## Recommended Nodes
143
+
144
+ ### Triggers & Input
145
+
146
+ **Gmail Trigger (n8n-nodes-base.gmailTrigger)**
147
+ Purpose: Monitor Gmail for emails with attachments (Recommended over IMAP)
148
+ Advantages: Real-time processing, simpler authentication, better integration with Google Workspace
149
+ Critical Configuration for Attachments:
150
+ - **MUST set "Simplify" to FALSE** - otherwise attachments won't be available
151
+ - **MUST set "Download Attachments" to TRUE** to retrieve files
152
+ - Set appropriate label filters
153
+ - Set "Property Prefix Name" (e.g., "attachment_") - attachments will be named with this prefix plus index
154
+ - Important: When referencing its binary data, it will be referenced "attachment_0", "attachment_1", etc., NOT "data"
155
+
156
+ **Email Read (IMAP) (n8n-nodes-base.emailReadImap)**
157
+ Purpose: Alternative email fetching if there's no specialized node for email provider
158
+ Configuration:
159
+ - Enable "Download Attachments" to retrieve files
160
+ - Set "Property Prefix Name" (e.g., "attachment_") - attachments will be named with this prefix plus index
161
+ - Important: When referencing binary data, it will be referenced "attachment_0", "attachment_1", etc., NOT "data"
162
+
163
+ **HTTP Webhook (n8n-nodes-base.webhook)**
164
+ Purpose: Receive file uploads from web forms
165
+ Configuration: Enable "Raw Body" for binary data
166
+
167
+ **Google Drive Trigger (n8n-nodes-base.googleDriveTrigger)**
168
+ Purpose: Monitor folders for new documents
169
+ Configuration: Set appropriate folder and file type filters
170
+
171
+ ### Text Extraction
172
+
173
+ **Extract from File (n8n-nodes-base.extractFromFile)**
174
+ Purpose: Extract text from various file formats using format-specific operations
175
+ Critical: ALWAYS check file type first with an IF or Switch before and select the correct operation (Extract from PDF, Extract from MS Excel, etc.)
176
+ Critical: If the user requests handling of multiple file types (PDF, CSV, JSON, etc) then a Switch (n8n-nodes-base.switch) node should be used
177
+ to check the file type before text extraction. Multiple text extraction nodes should be used to handle each of the different file types. For example,
178
+ if the workflow contains a form trigger node which receives a file, then a Switch node MUST be used to split the different options out to different extraction nodes.
179
+ Output: Extracted text is returned under the "text" key in JSON (e.g., access with {{ $json.text }})
180
+ Pitfalls:
181
+ - Returns empty for scanned documents - always check and fallback to OCR; Using wrong operation causes errors
182
+ - If connecting to a document upload form (n8n-nodes-base.formTrigger) use a File field type and then connect it to the extract from file node using the field name.
183
+ For example if creating a form trigger with field "Upload Document" then set the extract from file input binary field to "Upload_Document"
184
+
185
+ **AWS Textract (n8n-nodes-base.awsTextract)**
186
+ Purpose: Advanced OCR with table and form detection
187
+ Best for: Structured documents like invoices and forms
188
+
189
+ **Mindee (n8n-nodes-base.mindee)**
190
+ Purpose: Specialized invoice and receipt parsing
191
+ Returns: Structured JSON with line items, totals, dates
192
+
193
+ ### Data Processing
194
+
195
+ **AI Agent (@n8n/n8n-nodes-langchain.agent)**
196
+ Purpose: Intelligent document parsing and decision making
197
+ Configuration: Include structured output tools for consistent results
198
+
199
+ **LLM Chain (@n8n/n8n-nodes-langchain.chainLlm)**
200
+ Purpose: Document classification and data extraction
201
+ Use with: Structured Output Parser for JSON consistency
202
+
203
+ **Document Loader (@n8n/n8n-nodes-langchain.documentLoader)**
204
+ Purpose: Load and process documents directly from binary data for AI processing
205
+ Critical: Use the "Binary" data source option to handle binary files directly - no need to convert to JSON first
206
+ Configuration: Select "Binary" as Data Source, specify the binary property name (by default data unless renamed in a previous node)
207
+ Best for: Direct document processing in AI workflows without intermediate extraction steps
208
+
209
+ **Structured Output Parser (@n8n/n8n-nodes-langchain.outputParserStructured)**
210
+ Purpose: Ensure AI outputs match expected JSON schema
211
+ Critical for: Database inserts and API calls
212
+
213
+ ### Vector Storage (for RAG/Semantic Search)
214
+ **Simple Vector Store (@n8n/n8n-nodes-langchain.vectorStore) - RECOMMENDED**
215
+ Purpose: Easy-to-setup vector storage for document embeddings
216
+ Advantages:
217
+ - No external dependencies or API keys required
218
+ - Works out of the box with local storage
219
+ - Perfect for prototyping and small to medium datasets
220
+ Configuration: Just connect and use - no complex setup needed
221
+ Best for: Most document processing workflows that need semantic search
222
+
223
+ ### Flow Control
224
+
225
+ **Split In Batches (n8n-nodes-base.splitInBatches)**
226
+ Purpose: Process multiple documents in controlled batches
227
+ Configuration: Set batch size based on API limits and memory
228
+ Outputs (in order):
229
+ - Output 0 "done": Executes after all batches are processed - use for final aggregation or notifications
230
+ - Output 1 "loop": Connect processing nodes here - executes for each batch
231
+ Important: Connect processing logic to the second output (loop), completion logic to the first output (done)
232
+
233
+ **Merge (n8n-nodes-base.merge)**
234
+ Purpose: Combine data from multiple branches that need to execute together
235
+ Critical: Merge node waits for ALL input branches to complete - do NOT use for independent/optional branches
236
+ Modes: Use "Pass Through" to preserve binary from one branch
237
+
238
+ **Edit Fields (Set) (n8n-nodes-base.set)**
239
+ Purpose: Better choice for combining data from separate/independent branches
240
+ Use for: Adding fields from different sources, preserving binary while adding processed data
241
+ Configuration: Set common fields and use "Include Other Input Fields" OFF to preserve existing data including binary
242
+
243
+ **Execute Workflow Trigger (n8n-nodes-base.executeWorkflowTrigger)**
244
+ Purpose: Start point for sub-workflows that are called by other workflows
245
+ Configuration: Automatically receives data from the calling workflow including binary data
246
+ Best practice: Use for modular workflow design, heavy processing tasks, or reusable workflow components
247
+ Pairing: Must be used with Execute Workflow node in the parent workflow
248
+
249
+ **Execute Workflow (n8n-nodes-base.executeWorkflow)**
250
+ Purpose: Call and execute another workflow from within the current workflow
251
+ Critical configurations:
252
+ - Workflow ID: Use expression "{{ $workflow.id }}" to reference sub-workflows in the same workflow
253
+ - Choose execution mode: "Run Once for All Items" or "Run Once for Each Item"
254
+ - Binary data is automatically passed to the sub-workflow
255
+ Best practice: Use for delegating heavy processing, creating reusable modules, or managing memory in large batch operations
256
+
257
+ ### Data Destinations
258
+
259
+ **DataTable (n8n-nodes-base.dataTable)**
260
+ Purpose: Store extracted data in n8n's built-in data tables
261
+ Operations: Insert, Update, Select rows without external dependencies
262
+ Best for: Self-contained workflows that don't require external storage
263
+
264
+ **Google Sheets (n8n-nodes-base.googleSheets)**
265
+ Purpose: Log extracted data in external spreadsheet
266
+ Operations: Use "Append" for new rows, "Update" with key column for existing
267
+ Best for: Collaborative review and manual data validation
268
+
269
+ **Database Nodes**
270
+ - Postgres (n8n-nodes-base.postgres)
271
+ - MySQL (n8n-nodes-base.mySql)
272
+ - MongoDB (n8n-nodes-base.mongoDb)
273
+ Purpose: Store structured extraction results in production databases
274
+ Best Practice: Validate data schema before insert
275
+
276
+ ### Utilities
277
+
278
+ **IF/Switch (n8n-nodes-base.if, n8n-nodes-base.switch)**
279
+ Purpose: Route based on file type, extraction quality, or classification
280
+
281
+ **Function/Code (n8n-nodes-base.function, n8n-nodes-base.code)**
282
+ Purpose: Custom validation, data transformation, or regex extraction
283
+
284
+ **HTTP Request (n8n-nodes-base.httpRequest)**
285
+ Purpose: Call external OCR APIs (OCR.space, Google Vision, Mistral OCR)
286
+ Configuration: Set "Response Format: File" for downloads
287
+ Critical: NEVER set API keys directly in the request - user can set credentials from the UI for secure API key management
288
+
289
+ ## Common Pitfalls to Avoid
290
+
291
+ ### Binary Data Loss
292
+
293
+ **Problem**: Binary file "disappears" after processing nodes
294
+ **Solution**:
295
+ - Use Merge node to reattach binary after processing
296
+ - Or configure nodes to explicitly keep binary data
297
+ - In Code nodes: copy items[0].binary to output
298
+
299
+ ### Incorrect OCR Fallback
300
+
301
+ **Problem**: Not detecting when text extraction fails
302
+ **Solution**:
303
+ - Always check if extraction result is empty
304
+ - Implement automatic OCR fallback for scanned documents
305
+ - Don't assume all PDFs have extractable text
306
+
307
+ ### API Format Mismatches
308
+
309
+ **Problem**: Sending files in wrong format to APIs
310
+ **Solution**:
311
+ - Check if API needs multipart/form-data vs Base64
312
+ - Use "Extract from File" and "Convert to File" format conversion
313
+
314
+ ### Memory Overload
315
+
316
+ **Problem**: Workflow crashes with large or multiple files
317
+ **Solution**:
318
+ - Process files sequentially or in small batches
319
+ - Enable filesystem mode for binary data storage
320
+ - Drop unnecessary data after extraction
321
+ - Create a sub-workflow in the same workflow using "When Executed by Another Workflow" and "Execute Workflow". Delegate the heavy part of the workflow to the sub-workflow.
322
+
323
+ ### Duplicate Processing
324
+
325
+ **Problem**: Same documents processed repeatedly
326
+ **Solution**:
327
+ - Configure email triggers to mark as read
328
+ - Use "unseen" filters for email fetching
329
+ - Implement deduplication logic based on file hash or name`;
330
+ getDocumentation() {
331
+ return this.documentation;
332
+ }
333
+ }
334
+ exports.DocumentProcessingBestPractices = DocumentProcessingBestPractices;
335
+ //# sourceMappingURL=document-processing.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"document-processing.js","sourceRoot":"","sources":["../../../src/tools/best-practices/document-processing.ts"],"names":[],"mappings":";;;AACA,2DAA2D;AAE3D,MAAa,+BAA+B;IAClC,SAAS,GAAG,kCAAiB,CAAC,mBAAmB,CAAC;IAClD,OAAO,GAAG,OAAO,CAAC;IAEV,aAAa,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2DAiUyB,CAAC;IAE3D,gBAAgB;QACf,OAAO,IAAI,CAAC,aAAa,CAAC;IAC3B,CAAC;CACD;AA1UD,0EA0UC"}
@@ -0,0 +1,7 @@
1
+ import type { BestPracticesDocument } from '../../types/best-practices';
2
+ export declare class EnrichmentBestPractices implements BestPracticesDocument {
3
+ readonly technique: "enrichment";
4
+ readonly version = "1.0.0";
5
+ private readonly documentation;
6
+ getDocumentation(): string;
7
+ }
@@ -0,0 +1,271 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.EnrichmentBestPractices = void 0;
4
+ const categorization_1 = require("../../types/categorization");
5
+ class EnrichmentBestPractices {
6
+ technique = categorization_1.WorkflowTechnique.ENRICHMENT;
7
+ version = '1.0.0';
8
+ documentation = `# Best Practices: Data Enrichment Workflows
9
+
10
+ ## Workflow Design
11
+
12
+ ### Core Principles
13
+ - Start with data retrieval and validation before enrichment
14
+ - Process data incrementally to avoid overwhelming APIs
15
+ - Always include error handling for failed enrichments
16
+ - Design for reusability with sub-workflows where appropriate
17
+
18
+ ### Architecture Pattern
19
+ 1. **Input Stage**: Validate and prepare incoming data
20
+ 2. **Enrichment Stage**: Parallel or sequential API calls based on dependencies
21
+ 3. **Transformation Stage**: Normalize and merge enriched data
22
+ 4. **Output Stage**: Format and deliver enriched results
23
+
24
+ ## Data Enrichment Guidelines
25
+
26
+ ### 1. Input Validation
27
+ **Always validate incoming data before enrichment**
28
+ - Use IF node (n8n-nodes-base.if) to check for required fields
29
+ - Implement Set node (n8n-nodes-base.set) to standardize data format
30
+ - Add Code node (n8n-nodes-base.code) for complex validation logic
31
+
32
+ ### 2. API Rate Limiting
33
+ **Respect external service limits**
34
+ - Implement Wait node (n8n-nodes-base.wait) between batch requests
35
+ - Use SplitInBatches node (n8n-nodes-base.splitInBatches) for large datasets
36
+ - Set batch size: 10-50 items depending on API limits
37
+ - Add delay: 1-2 seconds between batches
38
+
39
+ ### 3. Error Handling
40
+ **Build resilient enrichment flows**
41
+ - Wrap API calls in Try/Catch pattern using Error Trigger node
42
+ - Use StopAndError node (n8n-nodes-base.stopAndError) for critical failures
43
+ - Implement fallback enrichment sources with Switch node (n8n-nodes-base.switch)
44
+ - Log failures to database or file for later retry
45
+
46
+ ### 4. Data Merging
47
+ **Combine enriched data effectively**
48
+ - Use Merge node (n8n-nodes-base.merge) with "Merge By Key" mode
49
+ - Specify unique identifiers for accurate matching
50
+ - Handle missing enrichment data with default values
51
+ - Preserve original data alongside enrichments
52
+
53
+ ### 5. Caching Strategy
54
+ **Minimize redundant API calls**
55
+ - Check cache before making external requests
56
+ - Use Redis node (n8n-nodes-base.redis) or database for caching
57
+ - Set appropriate TTL values:
58
+ - Static data: 7-30 days
59
+ - Dynamic data: 1-24 hours
60
+ - Real-time data: No caching
61
+
62
+ ### 6. Field Mapping
63
+ **Standardize enriched data structure**
64
+ - Use Set node to rename fields consistently
65
+ - Remove unnecessary fields with unset operations
66
+ - Apply data transformations in Code node for complex mappings
67
+ - Document field mappings in workflow description
68
+
69
+ ### 7. Quality Scoring
70
+ **Assess enrichment quality**
71
+ - Add confidence scores to enriched fields
72
+ - Track enrichment source for each field
73
+ - Implement validation rules for enriched data
74
+ - Flag incomplete or suspicious enrichments
75
+
76
+ ## Recommended Nodes
77
+
78
+ ### Essential Nodes
79
+
80
+ **HTTP Request** (n8n-nodes-base.httpRequest):
81
+ - Purpose: Primary enrichment API calls
82
+ - Use cases: Call external APIs for data enrichment
83
+ - Best practices: Configure proper authentication, handle timeouts
84
+
85
+ **Merge** (n8n-nodes-base.merge):
86
+ - Purpose: Combine original and enriched data
87
+ - Modes: Merge By Key, Merge By Index, Append
88
+ - Best practices: Use unique identifiers for matching, handle missing data
89
+
90
+ **Set** (n8n-nodes-base.set):
91
+ - Purpose: Transform and standardize data
92
+ - Use cases: Rename fields, remove unnecessary data, add metadata
93
+ - Best practices: Use "Keep Only Set" carefully, document transformations
94
+
95
+ **IF** (n8n-nodes-base.if):
96
+ - Purpose: Conditional enrichment logic
97
+ - Use cases: Validate required fields, route based on data quality
98
+ - Best practices: Check for null values, validate data types
99
+
100
+ **SplitInBatches** (n8n-nodes-base.splitInBatches):
101
+ - Purpose: Process large datasets in chunks
102
+ - Use cases: Handle datasets with 100+ items
103
+ - Best practices: Set appropriate batch size (10-50 items), add delays
104
+
105
+ ### Enrichment Sources
106
+
107
+ **Clearbit** (n8n-nodes-base.clearbit):
108
+ - Purpose: Company and person enrichment
109
+ - Use cases: Enrich email addresses with company data, get person details
110
+ - Best practices: Handle rate limits, cache results
111
+
112
+ **Hunter** (n8n-nodes-base.hunter):
113
+ - Purpose: Email finder and verification
114
+ - Use cases: Find email addresses, verify email validity
115
+ - Best practices: Respect API quotas, handle verification failures
116
+
117
+ **Brandfetch** (n8n-nodes-base.Brandfetch):
118
+ - Purpose: Company branding data
119
+ - Use cases: Get company logos, colors, brand assets
120
+ - Best practices: Cache brand data, handle missing brands
121
+
122
+ **OpenAI** (@n8n/n8n-nodes-langchain.openAi):
123
+ - Purpose: AI-powered data enrichment
124
+ - Use cases: Extract insights, classify data, generate descriptions
125
+ - Best practices: Minimize token usage, batch similar requests
126
+
127
+ **Google Sheets** (n8n-nodes-base.googleSheets):
128
+ - Purpose: Lookup table enrichment
129
+ - Use cases: Reference data enrichment, mapping tables
130
+ - Best practices: Use efficient lookup methods, cache sheet data
131
+
132
+ ### Utility Nodes
133
+
134
+ **Code** (n8n-nodes-base.code):
135
+ - Purpose: Custom enrichment logic
136
+ - Use cases: Complex transformations, custom algorithms
137
+ - Best practices: Keep code modular, handle errors gracefully
138
+
139
+ **Wait** (n8n-nodes-base.wait):
140
+ - Purpose: Rate limiting delays
141
+ - Use cases: Add delays between API calls, implement backoff
142
+ - Best practices: Use appropriate delay values (1-2 seconds)
143
+
144
+ **DateTime** (n8n-nodes-base.dateTime):
145
+ - Purpose: Timestamp handling
146
+ - Use cases: Add enrichment timestamps, calculate ages
147
+ - Best practices: Use consistent timezone handling
148
+
149
+ **Redis** (n8n-nodes-base.redis):
150
+ - Purpose: Caching layer
151
+ - Use cases: Cache enrichment results, track processed items
152
+ - Best practices: Set appropriate TTL, handle cache misses
153
+
154
+ **Error Trigger** (n8n-nodes-base.errorTrigger):
155
+ - Purpose: Error handling workflow
156
+ - Use cases: Global error handling, logging failures
157
+ - Best practices: Implement retry logic, alert on critical failures
158
+
159
+ **Switch** (n8n-nodes-base.switch):
160
+ - Purpose: Route based on enrichment results
161
+ - Use cases: Fallback enrichment sources, quality-based routing
162
+ - Best practices: Always define default case
163
+
164
+ **Stop and Error** (n8n-nodes-base.stopAndError):
165
+ - Purpose: Halt workflow on critical failures
166
+ - Use cases: Stop processing on invalid data, critical API failures
167
+ - Best practices: Use for unrecoverable errors only
168
+
169
+ ## Common Pitfalls to Avoid
170
+
171
+ ### Performance Issues
172
+
173
+ **Problem**: Enriching all fields for every record
174
+ - **Solution**: Only enrich fields that are actually needed
175
+ - Profile your workflow to identify bottlenecks
176
+ - Use conditional enrichment based on data needs
177
+
178
+ **Problem**: Sequential processing of independent enrichments
179
+ - **Solution**: Use parallel branches for non-dependent enrichments
180
+ - Split workflow into parallel paths
181
+ - Merge results after parallel processing
182
+
183
+ **Problem**: No batching for large datasets
184
+ - **Solution**: Always use SplitInBatches for >100 items
185
+ - Set appropriate batch sizes (10-50 items)
186
+ - Add delays between batches
187
+
188
+ ### Data Quality Problems
189
+
190
+ **Problem**: Overwriting original data with enrichments
191
+ - **Solution**: Preserve original data and add enriched fields separately
192
+ - Use Set node to add new fields without removing original ones
193
+ - Document which fields are enriched
194
+
195
+ **Problem**: Not handling null or missing enrichment results
196
+ - **Solution**: Implement fallback values and error flags
197
+ - Use IF nodes to check for empty results
198
+ - Add default values for missing enrichments
199
+
200
+ **Problem**: Mixing data types in enriched fields
201
+ - **Solution**: Enforce consistent data types through validation
202
+ - Convert types explicitly in Set or Code nodes
203
+ - Document expected data types
204
+
205
+ ### Resource Management
206
+
207
+ **Problem**: No rate limiting on external APIs
208
+ - **Solution**: Implement delays and respect API quotas
209
+ - Use Wait node between API calls
210
+ - Monitor API usage and adjust delays
211
+
212
+ **Problem**: Infinite retry loops on failures
213
+ - **Solution**: Set maximum retry attempts (typically 3)
214
+ - Use exponential backoff for retries
215
+ - Log failed attempts for manual review
216
+
217
+ **Problem**: No caching of expensive enrichments
218
+ - **Solution**: Cache results with appropriate expiration times
219
+ - Use Redis or database for caching
220
+ - Set TTL based on data freshness requirements
221
+
222
+ ### Workflow Design Flaws
223
+
224
+ **Problem**: Single point of failure for entire enrichment
225
+ - **Solution**: Use error boundaries and continue on failure options
226
+ - Enable "Continue on Fail" for non-critical enrichments
227
+ - Implement Error Trigger workflow
228
+
229
+ **Problem**: Hard-coded API keys in workflows
230
+ - **Solution**: Use credentials and environment variables
231
+ - Store sensitive data in n8n credentials system
232
+ - Never commit credentials in workflow JSON
233
+
234
+ **Problem**: No monitoring or logging of enrichment quality
235
+ - **Solution**: Add metrics collection and alerting
236
+ - Log enrichment success/failure rates
237
+ - Track enrichment coverage and quality
238
+
239
+ ### Common Error Scenarios
240
+
241
+ **API Rate Limits**:
242
+ - Implement exponential backoff
243
+ - Add Wait nodes with increasing delays
244
+ - Use SplitInBatches to control request rate
245
+
246
+ **Invalid API Responses**:
247
+ - Validate response structure before processing
248
+ - Use IF nodes to check response format
249
+ - Log unexpected responses for debugging
250
+
251
+ **Timeout Issues**:
252
+ - Set reasonable timeout values (10-30s)
253
+ - Use shorter timeouts for non-critical enrichments
254
+ - Implement retry logic for timeouts
255
+
256
+ **Data Mismatches**:
257
+ - Use fuzzy matching for lookups
258
+ - Normalize data before matching
259
+ - Handle missing keys gracefully
260
+
261
+ **Duplicate Enrichments**:
262
+ - Implement deduplication logic
263
+ - Check cache before enriching
264
+ - Use unique identifiers for tracking
265
+ `;
266
+ getDocumentation() {
267
+ return this.documentation;
268
+ }
269
+ }
270
+ exports.EnrichmentBestPractices = EnrichmentBestPractices;
271
+ //# sourceMappingURL=enrichment.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"enrichment.js","sourceRoot":"","sources":["../../../src/tools/best-practices/enrichment.ts"],"names":[],"mappings":";;;AACA,2DAA2D;AAE3D,MAAa,uBAAuB;IAC1B,SAAS,GAAG,kCAAiB,CAAC,UAAU,CAAC;IACzC,OAAO,GAAG,OAAO,CAAC;IAEV,aAAa,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAiQjC,CAAC;IAED,gBAAgB;QACf,OAAO,IAAI,CAAC,aAAa,CAAC;IAC3B,CAAC;CACD;AA1QD,0DA0QC"}
@@ -0,0 +1,7 @@
1
+ import type { BestPracticesDocument } from '../../types/best-practices';
2
+ export declare class FormInputBestPractices implements BestPracticesDocument {
3
+ readonly technique: "form_input";
4
+ readonly version = "1.0.0";
5
+ private readonly documentation;
6
+ getDocumentation(): string;
7
+ }