n8n 2.35.2 → 2.36.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 (733) hide show
  1. package/dist/build.tsbuildinfo +1 -1
  2. package/dist/commands/start.js +4 -2
  3. package/dist/commands/start.js.map +1 -1
  4. package/dist/config/index.js +0 -1
  5. package/dist/config/index.js.map +1 -1
  6. package/dist/constants/oauth2-triggers.d.ts +0 -1
  7. package/dist/constants/oauth2-triggers.js +0 -4
  8. package/dist/constants/oauth2-triggers.js.map +1 -1
  9. package/dist/constants.js +1 -0
  10. package/dist/constants.js.map +1 -1
  11. package/dist/controllers/ai.controller.d.ts +2 -5
  12. package/dist/controllers/ai.controller.js.map +1 -1
  13. package/dist/controllers/api-keys.controller.d.ts +1 -1
  14. package/dist/controllers/api-keys.controller.js +10 -10
  15. package/dist/controllers/api-keys.controller.js.map +1 -1
  16. package/dist/controllers/e2e.controller.d.ts +21 -2
  17. package/dist/controllers/e2e.controller.js +40 -2
  18. package/dist/controllers/e2e.controller.js.map +1 -1
  19. package/dist/controllers/role.controller.js +3 -5
  20. package/dist/controllers/role.controller.js.map +1 -1
  21. package/dist/credentials/credential-connection-status-provider.interface.d.ts +4 -1
  22. package/dist/credentials/credential-connection-status-proxy.d.ts +2 -2
  23. package/dist/credentials/credential-connection-status-proxy.js +3 -3
  24. package/dist/credentials/credential-connection-status-proxy.js.map +1 -1
  25. package/dist/credentials/credentials-finder.service.d.ts +2 -1
  26. package/dist/credentials/credentials-finder.service.js +2 -1
  27. package/dist/credentials/credentials-finder.service.js.map +1 -1
  28. package/dist/credentials/credentials.controller.d.ts +8 -6
  29. package/dist/credentials/credentials.controller.js +3 -12
  30. package/dist/credentials/credentials.controller.js.map +1 -1
  31. package/dist/credentials/credentials.service.d.ts +38 -30
  32. package/dist/credentials/credentials.service.ee.d.ts +6 -4
  33. package/dist/credentials/credentials.service.ee.js +2 -1
  34. package/dist/credentials/credentials.service.ee.js.map +1 -1
  35. package/dist/credentials/credentials.service.js +93 -45
  36. package/dist/credentials/credentials.service.js.map +1 -1
  37. package/dist/credentials-overwrites.d.ts +1 -0
  38. package/dist/credentials-overwrites.js +17 -0
  39. package/dist/credentials-overwrites.js.map +1 -1
  40. package/dist/deprecation/deprecation.service.js +5 -0
  41. package/dist/deprecation/deprecation.service.js.map +1 -1
  42. package/dist/errors/http-error-classifier.d.ts +4 -1
  43. package/dist/errors/http-error-classifier.js +4 -1
  44. package/dist/errors/http-error-classifier.js.map +1 -1
  45. package/dist/evaluation.ee/evaluation-dataset.service.d.ts +3 -3
  46. package/dist/evaluation.ee/evaluation-dataset.service.js +5 -6
  47. package/dist/evaluation.ee/evaluation-dataset.service.js.map +1 -1
  48. package/dist/events/event.service.d.ts +2 -1
  49. package/dist/events/event.service.js.map +1 -1
  50. package/dist/events/maps/poll-trigger-metrics.event-map.d.ts +9 -0
  51. package/dist/events/maps/poll-trigger-metrics.event-map.js +3 -0
  52. package/dist/events/maps/poll-trigger-metrics.event-map.js.map +1 -0
  53. package/dist/events/maps/relay.event-map.d.ts +10 -0
  54. package/dist/events/relays/telemetry.event-relay.js +3 -0
  55. package/dist/events/relays/telemetry.event-relay.js.map +1 -1
  56. package/dist/executions/enqueued-execution-recovery.service.js +7 -1
  57. package/dist/executions/enqueued-execution-recovery.service.js.map +1 -1
  58. package/dist/executions/execution-persistence.d.ts +7 -2
  59. package/dist/executions/execution-persistence.js +27 -6
  60. package/dist/executions/execution-persistence.js.map +1 -1
  61. package/dist/executions/execution.service.d.ts +4 -1
  62. package/dist/executions/execution.service.js +2 -2
  63. package/dist/executions/execution.service.js.map +1 -1
  64. package/dist/load-nodes-and-credentials.d.ts +1 -0
  65. package/dist/load-nodes-and-credentials.js +31 -16
  66. package/dist/load-nodes-and-credentials.js.map +1 -1
  67. package/dist/metrics/prometheus/poll-trigger-metrics.service.d.ts +13 -0
  68. package/dist/metrics/prometheus/poll-trigger-metrics.service.js +81 -0
  69. package/dist/metrics/prometheus/poll-trigger-metrics.service.js.map +1 -0
  70. package/dist/metrics/prometheus/prometheus.service.d.ts +2 -1
  71. package/dist/metrics/prometheus/prometheus.service.js +4 -2
  72. package/dist/metrics/prometheus/prometheus.service.js.map +1 -1
  73. package/dist/metrics/prometheus/scheduler-metrics.service.d.ts +2 -0
  74. package/dist/metrics/prometheus/scheduler-metrics.service.js +10 -0
  75. package/dist/metrics/prometheus/scheduler-metrics.service.js.map +1 -1
  76. package/dist/modules/agent-evals/agent-eval-case-generation.service.d.ts +3 -3
  77. package/dist/modules/agent-evals/agent-eval-case-generation.service.js +5 -5
  78. package/dist/modules/agent-evals/agent-eval-case-generation.service.js.map +1 -1
  79. package/dist/modules/agent-evals/agent-eval-rating.service.js +5 -6
  80. package/dist/modules/agent-evals/agent-eval-rating.service.js.map +1 -1
  81. package/dist/modules/agents/adapters/agents-credential-provider.d.ts +1 -0
  82. package/dist/modules/agents/adapters/agents-credential-provider.js +11 -2
  83. package/dist/modules/agents/adapters/agents-credential-provider.js.map +1 -1
  84. package/dist/modules/agents/agent-config.service.js +9 -0
  85. package/dist/modules/agents/agent-config.service.js.map +1 -1
  86. package/dist/modules/agents/agent-default-model-resolver.service.d.ts +19 -0
  87. package/dist/modules/agents/agent-default-model-resolver.service.js +106 -0
  88. package/dist/modules/agents/agent-default-model-resolver.service.js.map +1 -0
  89. package/dist/modules/agents/agent-execution-orchestrator.service.d.ts +7 -1
  90. package/dist/modules/agents/agent-execution-orchestrator.service.js +200 -108
  91. package/dist/modules/agents/agent-execution-orchestrator.service.js.map +1 -1
  92. package/dist/modules/agents/agent-integration-management.service.d.ts +24 -6
  93. package/dist/modules/agents/agent-integration-management.service.js +175 -34
  94. package/dist/modules/agents/agent-integration-management.service.js.map +1 -1
  95. package/dist/modules/agents/agent-integration-persistence.service.d.ts +21 -6
  96. package/dist/modules/agents/agent-integration-persistence.service.js +61 -50
  97. package/dist/modules/agents/agent-integration-persistence.service.js.map +1 -1
  98. package/dist/modules/agents/agent-integrations.controller.d.ts +3 -5
  99. package/dist/modules/agents/agent-integrations.controller.js +11 -6
  100. package/dist/modules/agents/agent-integrations.controller.js.map +1 -1
  101. package/dist/modules/agents/agent-knowledge-commands.d.ts +3 -3
  102. package/dist/modules/agents/agent-knowledge-commands.js +16 -22
  103. package/dist/modules/agents/agent-knowledge-commands.js.map +1 -1
  104. package/dist/modules/agents/{agent-knowledge-sandbox.service.d.ts → agent-knowledge-mirror.service.d.ts} +6 -22
  105. package/dist/modules/agents/agent-knowledge-mirror.service.js +429 -0
  106. package/dist/modules/agents/agent-knowledge-mirror.service.js.map +1 -0
  107. package/dist/modules/agents/agent-knowledge-storage.d.ts +7 -3
  108. package/dist/modules/agents/agent-knowledge-storage.js +11 -4
  109. package/dist/modules/agents/agent-knowledge-storage.js.map +1 -1
  110. package/dist/modules/agents/agent-knowledge.controller.d.ts +3 -5
  111. package/dist/modules/agents/agent-knowledge.controller.js +5 -8
  112. package/dist/modules/agents/agent-knowledge.controller.js.map +1 -1
  113. package/dist/modules/agents/agent-knowledge.service.d.ts +8 -6
  114. package/dist/modules/agents/agent-knowledge.service.js +20 -14
  115. package/dist/modules/agents/agent-knowledge.service.js.map +1 -1
  116. package/dist/modules/agents/agent-model-catalog.service.d.ts +4 -1
  117. package/dist/modules/agents/agent-model-catalog.service.js +24 -13
  118. package/dist/modules/agents/agent-model-catalog.service.js.map +1 -1
  119. package/dist/modules/agents/agent-runtime-cache.service.d.ts +9 -1
  120. package/dist/modules/agents/agent-runtime-cache.service.js +50 -17
  121. package/dist/modules/agents/agent-runtime-cache.service.js.map +1 -1
  122. package/dist/modules/agents/agent-runtime-reconstruction.service.d.ts +11 -6
  123. package/dist/modules/agents/agent-runtime-reconstruction.service.js +35 -18
  124. package/dist/modules/agents/agent-runtime-reconstruction.service.js.map +1 -1
  125. package/dist/modules/agents/agent-sandbox-principal.d.ts +34 -0
  126. package/dist/modules/agents/agent-sandbox-principal.js +64 -0
  127. package/dist/modules/agents/agent-sandbox-principal.js.map +1 -0
  128. package/dist/modules/agents/agent-sandbox-runtime.service.d.ts +42 -0
  129. package/dist/modules/agents/agent-sandbox-runtime.service.js +290 -0
  130. package/dist/modules/agents/agent-sandbox-runtime.service.js.map +1 -0
  131. package/dist/modules/agents/agent-sandbox.controller.d.ts +3 -6
  132. package/dist/modules/agents/agent-sandbox.controller.js +6 -14
  133. package/dist/modules/agents/agent-sandbox.controller.js.map +1 -1
  134. package/dist/modules/agents/agent-session-langsmith-export.service.d.ts +27 -0
  135. package/dist/modules/agents/agent-session-langsmith-export.service.js +390 -0
  136. package/dist/modules/agents/agent-session-langsmith-export.service.js.map +1 -0
  137. package/dist/modules/agents/agent-skills.service.js +4 -0
  138. package/dist/modules/agents/agent-skills.service.js.map +1 -1
  139. package/dist/modules/agents/agent-slack-integrations.controller.d.ts +22 -2
  140. package/dist/modules/agents/agent-slack-integrations.controller.js +108 -9
  141. package/dist/modules/agents/agent-slack-integrations.controller.js.map +1 -1
  142. package/dist/modules/agents/agent-sse-stream.js +10 -3
  143. package/dist/modules/agents/agent-sse-stream.js.map +1 -1
  144. package/dist/modules/agents/agent-threads.controller.d.ts +8 -1
  145. package/dist/modules/agents/agent-threads.controller.js +20 -2
  146. package/dist/modules/agents/agent-threads.controller.js.map +1 -1
  147. package/dist/modules/agents/agent-validation.service.js +9 -0
  148. package/dist/modules/agents/agent-validation.service.js.map +1 -1
  149. package/dist/modules/agents/agent-workflow-execution.service.d.ts +8 -2
  150. package/dist/modules/agents/agent-workflow-execution.service.js +43 -7
  151. package/dist/modules/agents/agent-workflow-execution.service.js.map +1 -1
  152. package/dist/modules/agents/agent-workspace.service.d.ts +16 -0
  153. package/dist/modules/agents/agent-workspace.service.js +65 -0
  154. package/dist/modules/agents/agent-workspace.service.js.map +1 -0
  155. package/dist/modules/agents/agents.controller.d.ts +3 -1
  156. package/dist/modules/agents/agents.controller.js +6 -2
  157. package/dist/modules/agents/agents.controller.js.map +1 -1
  158. package/dist/modules/agents/agents.module.d.ts +1 -1
  159. package/dist/modules/agents/agents.module.js +6 -2
  160. package/dist/modules/agents/agents.module.js.map +1 -1
  161. package/dist/modules/agents/agents.service.d.ts +5 -1
  162. package/dist/modules/agents/agents.service.js +3 -2
  163. package/dist/modules/agents/agents.service.js.map +1 -1
  164. package/dist/modules/agents/builder/agents-builder-prompts.d.ts +3 -3
  165. package/dist/modules/agents/builder/agents-builder-prompts.js +23 -11
  166. package/dist/modules/agents/builder/agents-builder-prompts.js.map +1 -1
  167. package/dist/modules/agents/builder/agents-builder-settings.service.d.ts +3 -1
  168. package/dist/modules/agents/builder/agents-builder-settings.service.js +38 -29
  169. package/dist/modules/agents/builder/agents-builder-settings.service.js.map +1 -1
  170. package/dist/modules/agents/builder/agents-builder-tools.service.js +209 -2
  171. package/dist/modules/agents/builder/agents-builder-tools.service.js.map +1 -1
  172. package/dist/modules/agents/builder/agents-builder.service.js +5 -2
  173. package/dist/modules/agents/builder/agents-builder.service.js.map +1 -1
  174. package/dist/modules/agents/builder/builder-model-live-lookup.service.js +1 -1
  175. package/dist/modules/agents/builder/builder-model-live-lookup.service.js.map +1 -1
  176. package/dist/modules/agents/builder/builder-tool-names.d.ts +5 -0
  177. package/dist/modules/agents/builder/builder-tool-names.js +5 -0
  178. package/dist/modules/agents/builder/builder-tool-names.js.map +1 -1
  179. package/dist/modules/agents/builder/format-preview-context.js +3 -0
  180. package/dist/modules/agents/builder/format-preview-context.js.map +1 -1
  181. package/dist/modules/agents/builder/interactive/ask-credential.tool.d.ts +1 -0
  182. package/dist/modules/agents/builder/interactive/ask-credential.tool.js +5 -2
  183. package/dist/modules/agents/builder/interactive/ask-credential.tool.js.map +1 -1
  184. package/dist/modules/agents/builder/interactive/finish-setup.tool.js +1 -0
  185. package/dist/modules/agents/builder/interactive/finish-setup.tool.js.map +1 -1
  186. package/dist/modules/agents/builder/interactive/resolve-llm.tool.js +7 -3
  187. package/dist/modules/agents/builder/interactive/resolve-llm.tool.js.map +1 -1
  188. package/dist/modules/agents/builder/prompts/llm-selection.prompt.js +1 -1
  189. package/dist/modules/agents/builder/prompts/tools.prompt.d.ts +1 -1
  190. package/dist/modules/agents/builder/prompts/tools.prompt.js +11 -7
  191. package/dist/modules/agents/builder/prompts/tools.prompt.js.map +1 -1
  192. package/dist/modules/agents/builder/resolve-integration.tool.js +1 -1
  193. package/dist/modules/agents/builder/resolve-integration.tool.js.map +1 -1
  194. package/dist/modules/agents/builder/skills/external-services.skill.js +13 -94
  195. package/dist/modules/agents/builder/skills/external-services.skill.js.map +1 -1
  196. package/dist/modules/agents/builder/skills/index.js +2 -0
  197. package/dist/modules/agents/builder/skills/index.js.map +1 -1
  198. package/dist/modules/agents/builder/skills/node-tools.skill.d.ts +2 -0
  199. package/dist/modules/agents/builder/skills/node-tools.skill.js +132 -0
  200. package/dist/modules/agents/builder/skills/node-tools.skill.js.map +1 -0
  201. package/dist/modules/agents/builder/skills/target-skills.skill.js +62 -21
  202. package/dist/modules/agents/builder/skills/target-skills.skill.js.map +1 -1
  203. package/dist/modules/agents/builder/skills/target-tasks.skill.js +34 -17
  204. package/dist/modules/agents/builder/skills/target-tasks.skill.js.map +1 -1
  205. package/dist/modules/agents/builder/task-objective-template.d.ts +2 -2
  206. package/dist/modules/agents/builder/task-objective-template.js +11 -9
  207. package/dist/modules/agents/builder/task-objective-template.js.map +1 -1
  208. package/dist/modules/agents/execution-recorder.d.ts +25 -0
  209. package/dist/modules/agents/execution-recorder.js +47 -0
  210. package/dist/modules/agents/execution-recorder.js.map +1 -1
  211. package/dist/modules/agents/integrations/agent-chat-bridge.d.ts +3 -1
  212. package/dist/modules/agents/integrations/agent-chat-bridge.js +10 -2
  213. package/dist/modules/agents/integrations/agent-chat-bridge.js.map +1 -1
  214. package/dist/modules/agents/integrations/agent-chat-integration.d.ts +10 -1
  215. package/dist/modules/agents/integrations/agent-chat-integration.js.map +1 -1
  216. package/dist/modules/agents/integrations/agent-chat-suspension-cards.d.ts +0 -1
  217. package/dist/modules/agents/integrations/agent-chat-suspension-cards.js +0 -24
  218. package/dist/modules/agents/integrations/agent-chat-suspension-cards.js.map +1 -1
  219. package/dist/modules/agents/integrations/chat-integration.service.d.ts +0 -1
  220. package/dist/modules/agents/integrations/chat-integration.service.js +1 -4
  221. package/dist/modules/agents/integrations/chat-integration.service.js.map +1 -1
  222. package/dist/modules/agents/integrations/integration-tool-descriptions.js +1 -0
  223. package/dist/modules/agents/integrations/integration-tool-descriptions.js.map +1 -1
  224. package/dist/modules/agents/integrations/n8n-checkpoint-storage.d.ts +3 -0
  225. package/dist/modules/agents/integrations/n8n-checkpoint-storage.js +26 -1
  226. package/dist/modules/agents/integrations/n8n-checkpoint-storage.js.map +1 -1
  227. package/dist/modules/agents/integrations/platforms/slack/assets/n8n-bot-icon.png +0 -0
  228. package/dist/modules/agents/integrations/platforms/slack/slack-integration.d.ts +5 -4
  229. package/dist/modules/agents/integrations/platforms/slack/slack-integration.js +5 -3
  230. package/dist/modules/agents/integrations/platforms/slack/slack-integration.js.map +1 -1
  231. package/dist/modules/agents/integrations/platforms/slack/slack-managed-setup.service.d.ts +78 -0
  232. package/dist/modules/agents/integrations/platforms/slack/slack-managed-setup.service.js +620 -0
  233. package/dist/modules/agents/integrations/platforms/slack/slack-managed-setup.service.js.map +1 -0
  234. package/dist/modules/agents/integrations/platforms/slack/slack-manual-setup.service.d.ts +6 -6
  235. package/dist/modules/agents/integrations/platforms/slack/slack-manual-setup.service.js +31 -24
  236. package/dist/modules/agents/integrations/platforms/slack/slack-manual-setup.service.js.map +1 -1
  237. package/dist/modules/agents/integrations/platforms/slack/slack-methods.service.d.ts +19 -10
  238. package/dist/modules/agents/integrations/platforms/slack/slack-methods.service.js +85 -54
  239. package/dist/modules/agents/integrations/platforms/slack/slack-methods.service.js.map +1 -1
  240. package/dist/modules/agents/integrations/platforms/slack/slack-setup.types.d.ts +16 -0
  241. package/dist/modules/agents/integrations/platforms/slack/slack-setup.types.js +36 -0
  242. package/dist/modules/agents/integrations/platforms/slack/slack-setup.types.js.map +1 -0
  243. package/dist/modules/agents/json-config/from-json-config.d.ts +2 -2
  244. package/dist/modules/agents/json-config/from-json-config.js +5 -0
  245. package/dist/modules/agents/json-config/from-json-config.js.map +1 -1
  246. package/dist/modules/agents/json-config/mcp-client-factory.js +17 -12
  247. package/dist/modules/agents/json-config/mcp-client-factory.js.map +1 -1
  248. package/dist/modules/agents/llm-provider-defaults.js +8 -8
  249. package/dist/modules/agents/llm-provider-defaults.js.map +1 -1
  250. package/dist/modules/agents/register-favorite-resolver.d.ts +1 -0
  251. package/dist/modules/agents/register-favorite-resolver.js +18 -0
  252. package/dist/modules/agents/register-favorite-resolver.js.map +1 -0
  253. package/dist/modules/agents/repositories/agent-checkpoint.repository.d.ts +1 -0
  254. package/dist/modules/agents/repositories/agent-checkpoint.repository.js +7 -0
  255. package/dist/modules/agents/repositories/agent-checkpoint.repository.js.map +1 -1
  256. package/dist/modules/agents/repositories/agent-credential-dependency.repository.js +1 -1
  257. package/dist/modules/agents/repositories/agent-credential-dependency.repository.js.map +1 -1
  258. package/dist/modules/agents/repositories/agent-execution-thread.repository.d.ts +1 -0
  259. package/dist/modules/agents/repositories/agent-execution-thread.repository.js +6 -0
  260. package/dist/modules/agents/repositories/agent-execution-thread.repository.js.map +1 -1
  261. package/dist/modules/agents/repositories/agent.repository.d.ts +4 -1
  262. package/dist/modules/agents/repositories/agent.repository.js +14 -0
  263. package/dist/modules/agents/repositories/agent.repository.js.map +1 -1
  264. package/dist/modules/agents/runtime/agent-secure-runtime.d.ts +2 -0
  265. package/dist/modules/agents/runtime/agent-secure-runtime.js +72 -30
  266. package/dist/modules/agents/runtime/agent-secure-runtime.js.map +1 -1
  267. package/dist/modules/agents/sub-agents/delegate-sub-agent-tool.js +5 -0
  268. package/dist/modules/agents/sub-agents/delegate-sub-agent-tool.js.map +1 -1
  269. package/dist/modules/agents/sub-agents/sub-agent-foreground-runner.d.ts +1 -0
  270. package/dist/modules/agents/sub-agents/sub-agent-foreground-runner.js +33 -0
  271. package/dist/modules/agents/sub-agents/sub-agent-foreground-runner.js.map +1 -1
  272. package/dist/modules/agents/tools/input-data-tool.js +2 -1
  273. package/dist/modules/agents/tools/input-data-tool.js.map +1 -1
  274. package/dist/modules/agents/tools/knowledge/search-knowledge.tool.d.ts +3 -3
  275. package/dist/modules/agents/tools/knowledge/search-knowledge.tool.js +4 -4
  276. package/dist/modules/agents/tools/knowledge/search-knowledge.tool.js.map +1 -1
  277. package/dist/modules/agents/tools/workflow-tool-factory.js +11 -70
  278. package/dist/modules/agents/tools/workflow-tool-factory.js.map +1 -1
  279. package/dist/modules/agents/tools/workflow-tool-workflow-loader.service.d.ts +2 -6
  280. package/dist/modules/agents/tools/workflow-tool-workflow-loader.service.js +6 -25
  281. package/dist/modules/agents/tools/workflow-tool-workflow-loader.service.js.map +1 -1
  282. package/dist/modules/agents/utils/execution-to-message-mapper.js +9 -0
  283. package/dist/modules/agents/utils/execution-to-message-mapper.js.map +1 -1
  284. package/dist/modules/agents/utils/model-snapshot-alias.d.ts +2 -0
  285. package/dist/modules/agents/utils/model-snapshot-alias.js +9 -0
  286. package/dist/modules/agents/utils/model-snapshot-alias.js.map +1 -0
  287. package/dist/modules/agents/utils/node-tool-validation.d.ts +6 -0
  288. package/dist/modules/agents/utils/node-tool-validation.js +28 -0
  289. package/dist/modules/agents/utils/node-tool-validation.js.map +1 -1
  290. package/dist/modules/data-table/data-table-proxy.service.d.ts +3 -3
  291. package/dist/modules/data-table/data-table-proxy.service.js +5 -6
  292. package/dist/modules/data-table/data-table-proxy.service.js.map +1 -1
  293. package/dist/modules/data-table/data-table.controller.d.ts +3 -3
  294. package/dist/modules/data-table/data-table.controller.js +5 -6
  295. package/dist/modules/data-table/data-table.controller.js.map +1 -1
  296. package/dist/modules/data-table/data-table.module.js +2 -0
  297. package/dist/modules/data-table/data-table.module.js.map +1 -1
  298. package/dist/modules/data-table/data-table.repository.d.ts +1 -1
  299. package/dist/modules/data-table/data-table.repository.js +10 -6
  300. package/dist/modules/data-table/data-table.repository.js.map +1 -1
  301. package/dist/modules/data-table/middleware/branch-write-access-middleware.js +2 -3
  302. package/dist/modules/data-table/middleware/branch-write-access-middleware.js.map +1 -1
  303. package/dist/modules/data-table/register-favorite-resolver.d.ts +1 -0
  304. package/dist/modules/data-table/register-favorite-resolver.js +18 -0
  305. package/dist/modules/data-table/register-favorite-resolver.js.map +1 -0
  306. package/dist/modules/dynamic-credentials.ee/credential-resolvers/identifiers/n8n-identifier.js +6 -1
  307. package/dist/modules/dynamic-credentials.ee/credential-resolvers/identifiers/n8n-identifier.js.map +1 -1
  308. package/dist/modules/dynamic-credentials.ee/dynamic-credentials.controller.js +1 -1
  309. package/dist/modules/dynamic-credentials.ee/dynamic-credentials.controller.js.map +1 -1
  310. package/dist/modules/dynamic-credentials.ee/services/credential-check-proxy.service.d.ts +8 -1
  311. package/dist/modules/dynamic-credentials.ee/services/credential-check-proxy.service.js +49 -2
  312. package/dist/modules/dynamic-credentials.ee/services/credential-check-proxy.service.js.map +1 -1
  313. package/dist/modules/dynamic-credentials.ee/services/credential-connection-status.service.d.ts +8 -3
  314. package/dist/modules/dynamic-credentials.ee/services/credential-connection-status.service.js +29 -6
  315. package/dist/modules/dynamic-credentials.ee/services/credential-connection-status.service.js.map +1 -1
  316. package/dist/modules/dynamic-credentials.ee/services/credential-resolver-workflow.service.js +3 -0
  317. package/dist/modules/dynamic-credentials.ee/services/credential-resolver-workflow.service.js.map +1 -1
  318. package/dist/modules/favorites/favorite-resource-resolver.registry.d.ts +17 -0
  319. package/dist/modules/favorites/favorite-resource-resolver.registry.js +26 -0
  320. package/dist/modules/favorites/favorite-resource-resolver.registry.js.map +1 -0
  321. package/dist/modules/favorites/favorites.service.d.ts +4 -7
  322. package/dist/modules/favorites/favorites.service.js +18 -34
  323. package/dist/modules/favorites/favorites.service.js.map +1 -1
  324. package/dist/modules/insights/database/repositories/insights-by-period.repository.d.ts +0 -1
  325. package/dist/modules/insights/database/repositories/insights-by-period.repository.js +1 -5
  326. package/dist/modules/insights/database/repositories/insights-by-period.repository.js.map +1 -1
  327. package/dist/modules/instance-ai/canvas-node-context-flag-gate.d.ts +7 -0
  328. package/dist/modules/instance-ai/canvas-node-context-flag-gate.js +35 -0
  329. package/dist/modules/instance-ai/canvas-node-context-flag-gate.js.map +1 -0
  330. package/dist/modules/instance-ai/drop-rejected-attachments.d.ts +18 -0
  331. package/dist/modules/instance-ai/drop-rejected-attachments.js +49 -0
  332. package/dist/modules/instance-ai/drop-rejected-attachments.js.map +1 -0
  333. package/dist/modules/instance-ai/eval/agent-execution.service.js +2 -1
  334. package/dist/modules/instance-ai/eval/agent-execution.service.js.map +1 -1
  335. package/dist/modules/instance-ai/instance-ai-error-reporter.service.d.ts +1 -0
  336. package/dist/modules/instance-ai/instance-ai-error-reporter.service.js +9 -0
  337. package/dist/modules/instance-ai/instance-ai-error-reporter.service.js.map +1 -1
  338. package/dist/modules/instance-ai/instance-ai-model.service.d.ts +3 -3
  339. package/dist/modules/instance-ai/instance-ai-model.service.js +15 -21
  340. package/dist/modules/instance-ai/instance-ai-model.service.js.map +1 -1
  341. package/dist/modules/instance-ai/instance-ai-settings.service.d.ts +20 -4
  342. package/dist/modules/instance-ai/instance-ai-settings.service.js +144 -110
  343. package/dist/modules/instance-ai/instance-ai-settings.service.js.map +1 -1
  344. package/dist/modules/instance-ai/instance-ai-setup-telemetry.service.d.ts +38 -0
  345. package/dist/modules/instance-ai/instance-ai-setup-telemetry.service.js +212 -0
  346. package/dist/modules/instance-ai/instance-ai-setup-telemetry.service.js.map +1 -0
  347. package/dist/modules/instance-ai/instance-ai-terminal-outcome.service.d.ts +4 -0
  348. package/dist/modules/instance-ai/instance-ai-terminal-outcome.service.js +11 -0
  349. package/dist/modules/instance-ai/instance-ai-terminal-outcome.service.js.map +1 -1
  350. package/dist/modules/instance-ai/instance-ai-verification.service.d.ts +3 -1
  351. package/dist/modules/instance-ai/instance-ai-verification.service.js +42 -6
  352. package/dist/modules/instance-ai/instance-ai-verification.service.js.map +1 -1
  353. package/dist/modules/instance-ai/instance-ai.adapter.service.d.ts +16 -14
  354. package/dist/modules/instance-ai/instance-ai.adapter.service.js +143 -79
  355. package/dist/modules/instance-ai/instance-ai.adapter.service.js.map +1 -1
  356. package/dist/modules/instance-ai/instance-ai.controller.js +9 -0
  357. package/dist/modules/instance-ai/instance-ai.controller.js.map +1 -1
  358. package/dist/modules/instance-ai/instance-ai.module.js +5 -3
  359. package/dist/modules/instance-ai/instance-ai.module.js.map +1 -1
  360. package/dist/modules/instance-ai/instance-ai.service.d.ts +19 -6
  361. package/dist/modules/instance-ai/instance-ai.service.js +288 -27
  362. package/dist/modules/instance-ai/instance-ai.service.js.map +1 -1
  363. package/dist/modules/instance-ai/internal-messages.js +1 -1
  364. package/dist/modules/instance-ai/internal-messages.js.map +1 -1
  365. package/dist/modules/instance-ai/repositories/instance-ai-thread-grant.repository.d.ts +1 -0
  366. package/dist/modules/instance-ai/repositories/instance-ai-thread-grant.repository.js +3 -0
  367. package/dist/modules/instance-ai/repositories/instance-ai-thread-grant.repository.js.map +1 -1
  368. package/dist/modules/instance-ai/stream-transport-error.d.ts +1 -0
  369. package/dist/modules/instance-ai/stream-transport-error.js +9 -0
  370. package/dist/modules/instance-ai/stream-transport-error.js.map +1 -0
  371. package/dist/modules/instance-ai/workflow-verification-task-projector.js +4 -1
  372. package/dist/modules/instance-ai/workflow-verification-task-projector.js.map +1 -1
  373. package/dist/modules/mcp/dto/update-mcp-settings.dto.d.ts +32 -2
  374. package/dist/modules/mcp/dto/update-mcp-settings.dto.js +17 -3
  375. package/dist/modules/mcp/dto/update-mcp-settings.dto.js.map +1 -1
  376. package/dist/modules/mcp/mcp-protected-resource.d.ts +3 -2
  377. package/dist/modules/mcp/mcp-protected-resource.js +6 -3
  378. package/dist/modules/mcp/mcp-protected-resource.js.map +1 -1
  379. package/dist/modules/mcp/mcp-scopes.d.ts +1 -0
  380. package/dist/modules/mcp/mcp-scopes.js +12 -2
  381. package/dist/modules/mcp/mcp-scopes.js.map +1 -1
  382. package/dist/modules/mcp/mcp.controller.js +1 -1
  383. package/dist/modules/mcp/mcp.controller.js.map +1 -1
  384. package/dist/modules/mcp/mcp.module.d.ts +1 -0
  385. package/dist/modules/mcp/mcp.module.js +4 -2
  386. package/dist/modules/mcp/mcp.module.js.map +1 -1
  387. package/dist/modules/mcp/mcp.service.d.ts +6 -3
  388. package/dist/modules/mcp/mcp.service.js +24 -5
  389. package/dist/modules/mcp/mcp.service.js.map +1 -1
  390. package/dist/modules/mcp/mcp.settings.controller.d.ts +2 -0
  391. package/dist/modules/mcp/mcp.settings.controller.js +24 -10
  392. package/dist/modules/mcp/mcp.settings.controller.js.map +1 -1
  393. package/dist/modules/mcp/mcp.settings.service.d.ts +4 -3
  394. package/dist/modules/mcp/mcp.settings.service.js +20 -2
  395. package/dist/modules/mcp/mcp.settings.service.js.map +1 -1
  396. package/dist/modules/mcp/mcp.types.d.ts +4 -3
  397. package/dist/modules/mcp/mcp.utils.d.ts +4 -1
  398. package/dist/modules/mcp/mcp.utils.js +14 -4
  399. package/dist/modules/mcp/mcp.utils.js.map +1 -1
  400. package/dist/modules/mcp/tools/agents/agent-tools.service.js +10 -1
  401. package/dist/modules/mcp/tools/agents/agent-tools.service.js.map +1 -1
  402. package/dist/modules/mcp/tools/create-folder.tool.d.ts +13 -0
  403. package/dist/modules/mcp/tools/create-folder.tool.js +68 -0
  404. package/dist/modules/mcp/tools/create-folder.tool.js.map +1 -0
  405. package/dist/modules/mcp/tools/data-table/add-data-table-rows.tool.js +1 -1
  406. package/dist/modules/mcp/tools/data-table/add-data-table-rows.tool.js.map +1 -1
  407. package/dist/modules/mcp/tools/data-table/get-data-table-rows.tool.d.ts +44 -0
  408. package/dist/modules/mcp/tools/data-table/get-data-table-rows.tool.js +134 -0
  409. package/dist/modules/mcp/tools/data-table/get-data-table-rows.tool.js.map +1 -0
  410. package/dist/modules/mcp/tools/data-table/index.d.ts +1 -0
  411. package/dist/modules/mcp/tools/data-table/index.js +3 -1
  412. package/dist/modules/mcp/tools/data-table/index.js.map +1 -1
  413. package/dist/modules/mcp/tools/execute-workflow.tool.d.ts +11 -21
  414. package/dist/modules/mcp/tools/execute-workflow.tool.js +113 -76
  415. package/dist/modules/mcp/tools/execute-workflow.tool.js.map +1 -1
  416. package/dist/modules/mcp/tools/folder-error.utils.d.ts +13 -0
  417. package/dist/modules/mcp/tools/folder-error.utils.js +25 -0
  418. package/dist/modules/mcp/tools/folder-error.utils.js.map +1 -0
  419. package/dist/modules/mcp/tools/get-workflow-details.tool.js +1 -1
  420. package/dist/modules/mcp/tools/get-workflow-details.tool.js.map +1 -1
  421. package/dist/modules/mcp/tools/get-workflow-versions-diff.tool.d.ts +81 -0
  422. package/dist/modules/mcp/tools/get-workflow-versions-diff.tool.js +218 -0
  423. package/dist/modules/mcp/tools/get-workflow-versions-diff.tool.js.map +1 -0
  424. package/dist/modules/mcp/tools/move-workflows-to-folder.tool.d.ts +13 -0
  425. package/dist/modules/mcp/tools/move-workflows-to-folder.tool.js +122 -0
  426. package/dist/modules/mcp/tools/move-workflows-to-folder.tool.js.map +1 -0
  427. package/dist/modules/mcp/tools/schemas.d.ts +7 -0
  428. package/dist/modules/mcp/tools/schemas.js +15 -1
  429. package/dist/modules/mcp/tools/schemas.js.map +1 -1
  430. package/dist/modules/mcp/tools/search-folders.tool.d.ts +3 -2
  431. package/dist/modules/mcp/tools/search-folders.tool.js +14 -8
  432. package/dist/modules/mcp/tools/search-folders.tool.js.map +1 -1
  433. package/dist/modules/mcp/tools/test-workflow.tool.js +10 -18
  434. package/dist/modules/mcp/tools/test-workflow.tool.js.map +1 -1
  435. package/dist/modules/mcp/tools/update-folder.tool.d.ts +14 -0
  436. package/dist/modules/mcp/tools/update-folder.tool.js +74 -0
  437. package/dist/modules/mcp/tools/update-folder.tool.js.map +1 -0
  438. package/dist/modules/mcp/tools/webhook-utils.js +6 -4
  439. package/dist/modules/mcp/tools/webhook-utils.js.map +1 -1
  440. package/dist/modules/mcp/tools/workflow-builder/create-workflow-from-code.tool.js +18 -5
  441. package/dist/modules/mcp/tools/workflow-builder/create-workflow-from-code.tool.js.map +1 -1
  442. package/dist/modules/mcp/tools/workflow-builder/update-workflow.tool.d.ts +4 -4
  443. package/dist/modules/mcp/tools/workflow-builder/update-workflow.tool.js +467 -397
  444. package/dist/modules/mcp/tools/workflow-builder/update-workflow.tool.js.map +1 -1
  445. package/dist/modules/mcp/tools/workflow-inputs.d.ts +111 -0
  446. package/dist/modules/mcp/tools/workflow-inputs.js +81 -0
  447. package/dist/modules/mcp/tools/workflow-inputs.js.map +1 -0
  448. package/dist/modules/mcp/tools/workflow-validation.utils.d.ts +2 -0
  449. package/dist/modules/mcp/tools/workflow-validation.utils.js +7 -6
  450. package/dist/modules/mcp/tools/workflow-validation.utils.js.map +1 -1
  451. package/dist/modules/mcp-registry/registry/mcp-registry.service.d.ts +1 -0
  452. package/dist/modules/mcp-registry/registry/mcp-registry.service.js +4 -0
  453. package/dist/modules/mcp-registry/registry/mcp-registry.service.js.map +1 -1
  454. package/dist/modules/n8n-packages/entities/credential/credential.serializer.js +4 -2
  455. package/dist/modules/n8n-packages/entities/credential/credential.serializer.js.map +1 -1
  456. package/dist/modules/n8n-packages/entities/data-table/data-table.serializer.js +13 -9
  457. package/dist/modules/n8n-packages/entities/data-table/data-table.serializer.js.map +1 -1
  458. package/dist/modules/n8n-packages/entities/folder/folder.exporter.d.ts +2 -0
  459. package/dist/modules/n8n-packages/entities/folder/folder.exporter.js +1 -0
  460. package/dist/modules/n8n-packages/entities/folder/folder.exporter.js.map +1 -1
  461. package/dist/modules/n8n-packages/entities/folder/folder.serializer.js +4 -2
  462. package/dist/modules/n8n-packages/entities/folder/folder.serializer.js.map +1 -1
  463. package/dist/modules/n8n-packages/entities/package-serialization.types.d.ts +17 -0
  464. package/dist/modules/n8n-packages/entities/package-serialization.types.js +7 -0
  465. package/dist/modules/n8n-packages/entities/package-serialization.types.js.map +1 -0
  466. package/dist/modules/n8n-packages/entities/project/project.exporter.d.ts +2 -0
  467. package/dist/modules/n8n-packages/entities/project/project.exporter.js +2 -0
  468. package/dist/modules/n8n-packages/entities/project/project.exporter.js.map +1 -1
  469. package/dist/modules/n8n-packages/entities/project/project.serializer.js +4 -2
  470. package/dist/modules/n8n-packages/entities/project/project.serializer.js.map +1 -1
  471. package/dist/modules/n8n-packages/entities/tag/tag.exporter.js +3 -1
  472. package/dist/modules/n8n-packages/entities/tag/tag.exporter.js.map +1 -1
  473. package/dist/modules/n8n-packages/entities/variable/variable.serializer.js +6 -3
  474. package/dist/modules/n8n-packages/entities/variable/variable.serializer.js.map +1 -1
  475. package/dist/modules/n8n-packages/entities/workflow/auto-included-workflow-resolver.d.ts +2 -0
  476. package/dist/modules/n8n-packages/entities/workflow/auto-included-workflow-resolver.js +21 -4
  477. package/dist/modules/n8n-packages/entities/workflow/auto-included-workflow-resolver.js.map +1 -1
  478. package/dist/modules/n8n-packages/entities/workflow/workflow-dependency-resolver.d.ts +2 -0
  479. package/dist/modules/n8n-packages/entities/workflow/workflow-dependency-resolver.js +4 -1
  480. package/dist/modules/n8n-packages/entities/workflow/workflow-dependency-resolver.js.map +1 -1
  481. package/dist/modules/n8n-packages/entities/workflow/workflow-version-policy.d.ts +4 -0
  482. package/dist/modules/n8n-packages/entities/workflow/workflow-version-policy.js +48 -0
  483. package/dist/modules/n8n-packages/entities/workflow/workflow-version-policy.js.map +1 -0
  484. package/dist/modules/n8n-packages/entities/workflow/workflow.exporter.d.ts +2 -0
  485. package/dist/modules/n8n-packages/entities/workflow/workflow.exporter.js +7 -2
  486. package/dist/modules/n8n-packages/entities/workflow/workflow.exporter.js.map +1 -1
  487. package/dist/modules/n8n-packages/entities/workflow/workflow.serializer.js +5 -3
  488. package/dist/modules/n8n-packages/entities/workflow/workflow.serializer.js.map +1 -1
  489. package/dist/modules/n8n-packages/n8n-packages.service.js +6 -0
  490. package/dist/modules/n8n-packages/n8n-packages.service.js.map +1 -1
  491. package/dist/modules/n8n-packages/n8n-packages.types.d.ts +8 -0
  492. package/dist/modules/n8n-packages/n8n-packages.types.js +7 -1
  493. package/dist/modules/n8n-packages/n8n-packages.types.js.map +1 -1
  494. package/dist/modules/oauth-server/database/repositories/oauth-access-token.repository.d.ts +2 -2
  495. package/dist/modules/oauth-server/database/repositories/oauth-access-token.repository.js +3 -3
  496. package/dist/modules/oauth-server/database/repositories/oauth-access-token.repository.js.map +1 -1
  497. package/dist/modules/oauth-server/database/repositories/oauth-refresh-token.repository.d.ts +2 -2
  498. package/dist/modules/oauth-server/database/repositories/oauth-refresh-token.repository.js +3 -3
  499. package/dist/modules/oauth-server/database/repositories/oauth-refresh-token.repository.js.map +1 -1
  500. package/dist/modules/oauth-server/oauth-consent.controller.js +2 -0
  501. package/dist/modules/oauth-server/oauth-consent.controller.js.map +1 -1
  502. package/dist/modules/oauth-server/oauth-consent.service.d.ts +8 -1
  503. package/dist/modules/oauth-server/oauth-consent.service.js +33 -0
  504. package/dist/modules/oauth-server/oauth-consent.service.js.map +1 -1
  505. package/dist/modules/oauth-server/oauth-server.service.d.ts +6 -1
  506. package/dist/modules/oauth-server/oauth-server.service.js +36 -4
  507. package/dist/modules/oauth-server/oauth-server.service.js.map +1 -1
  508. package/dist/modules/oauth-server/oauth-token.service.d.ts +6 -2
  509. package/dist/modules/oauth-server/oauth-token.service.js +19 -7
  510. package/dist/modules/oauth-server/oauth-token.service.js.map +1 -1
  511. package/dist/modules/oauth-server/protected-resource-resolvers/form-trigger-resource.resolver.d.ts +7 -3
  512. package/dist/modules/oauth-server/protected-resource-resolvers/form-trigger-resource.resolver.js +8 -7
  513. package/dist/modules/oauth-server/protected-resource-resolvers/form-trigger-resource.resolver.js.map +1 -1
  514. package/dist/modules/oauth-server/protected-resource-resolvers/form-trigger-test-resource.resolver.d.ts +6 -3
  515. package/dist/modules/oauth-server/protected-resource-resolvers/form-trigger-test-resource.resolver.js +8 -7
  516. package/dist/modules/oauth-server/protected-resource-resolvers/form-trigger-test-resource.resolver.js.map +1 -1
  517. package/dist/modules/oauth-server/protected-resource-resolvers/utils.d.ts +2 -0
  518. package/dist/modules/oauth-server/protected-resource-resolvers/utils.js +5 -1
  519. package/dist/modules/oauth-server/protected-resource-resolvers/utils.js.map +1 -1
  520. package/dist/modules/oauth-server/protected-resource-resolvers/workflow-mcp-test-trigger-resource.resolver.d.ts +4 -3
  521. package/dist/modules/oauth-server/protected-resource-resolvers/workflow-mcp-test-trigger-resource.resolver.js +7 -7
  522. package/dist/modules/oauth-server/protected-resource-resolvers/workflow-mcp-test-trigger-resource.resolver.js.map +1 -1
  523. package/dist/modules/oauth-server/protected-resource-resolvers/workflow-mcp-trigger-resource.resolver.d.ts +5 -3
  524. package/dist/modules/oauth-server/protected-resource-resolvers/workflow-mcp-trigger-resource.resolver.js +7 -7
  525. package/dist/modules/oauth-server/protected-resource-resolvers/workflow-mcp-trigger-resource.resolver.js.map +1 -1
  526. package/dist/modules/oauth-server/protected-resource-resolvers/workflow-webhook-test-trigger-resource.resolver.js +7 -11
  527. package/dist/modules/oauth-server/protected-resource-resolvers/workflow-webhook-test-trigger-resource.resolver.js.map +1 -1
  528. package/dist/modules/oauth-server/protected-resource-resolvers/workflow-webhook-trigger-resource.resolver.js +7 -11
  529. package/dist/modules/oauth-server/protected-resource-resolvers/workflow-webhook-trigger-resource.resolver.js.map +1 -1
  530. package/dist/modules/oauth-server/resource-gate.d.ts +6 -0
  531. package/dist/modules/oauth-server/resource-gate.js +17 -0
  532. package/dist/modules/oauth-server/resource-gate.js.map +1 -0
  533. package/dist/modules/provisioning.ee/role-mapping-rule.controller.ee.js +1 -9
  534. package/dist/modules/provisioning.ee/role-mapping-rule.controller.ee.js.map +1 -1
  535. package/dist/modules/provisioning.ee/role-mapping-rule.service.ee.d.ts +5 -2
  536. package/dist/modules/provisioning.ee/role-mapping-rule.service.ee.js +14 -4
  537. package/dist/modules/provisioning.ee/role-mapping-rule.service.ee.js.map +1 -1
  538. package/dist/modules/source-control.ee/source-control-preferences.service.ee.d.ts +3 -1
  539. package/dist/modules/source-control.ee/source-control-preferences.service.ee.js +5 -2
  540. package/dist/modules/source-control.ee/source-control-preferences.service.ee.js.map +1 -1
  541. package/dist/modules/workflow-reviews.ee/workflow-review-access.service.d.ts +27 -0
  542. package/dist/modules/workflow-reviews.ee/workflow-review-access.service.js +108 -0
  543. package/dist/modules/workflow-reviews.ee/workflow-review-access.service.js.map +1 -0
  544. package/dist/modules/workflow-reviews.ee/workflow-review-activity.service.d.ts +23 -0
  545. package/dist/modules/workflow-reviews.ee/workflow-review-activity.service.js +99 -0
  546. package/dist/modules/workflow-reviews.ee/workflow-review-activity.service.js.map +1 -0
  547. package/dist/modules/workflow-reviews.ee/workflow-review-auto-close.service.d.ts +4 -2
  548. package/dist/modules/workflow-reviews.ee/workflow-review-auto-close.service.js +30 -11
  549. package/dist/modules/workflow-reviews.ee/workflow-review-auto-close.service.js.map +1 -1
  550. package/dist/modules/workflow-reviews.ee/workflow-review-eligibility.service.d.ts +18 -0
  551. package/dist/modules/workflow-reviews.ee/workflow-review-eligibility.service.js +77 -0
  552. package/dist/modules/workflow-reviews.ee/workflow-review-eligibility.service.js.map +1 -0
  553. package/dist/modules/workflow-reviews.ee/workflow-review-inbox.service.d.ts +8 -11
  554. package/dist/modules/workflow-reviews.ee/workflow-review-inbox.service.js +52 -71
  555. package/dist/modules/workflow-reviews.ee/workflow-review-inbox.service.js.map +1 -1
  556. package/dist/modules/workflow-reviews.ee/workflow-review-request.service.d.ts +6 -4
  557. package/dist/modules/workflow-reviews.ee/workflow-review-request.service.js +157 -40
  558. package/dist/modules/workflow-reviews.ee/workflow-review-request.service.js.map +1 -1
  559. package/dist/modules/workflow-reviews.ee/workflow-review-requests.controller.d.ts +6 -2
  560. package/dist/modules/workflow-reviews.ee/workflow-review-requests.controller.js +30 -2
  561. package/dist/modules/workflow-reviews.ee/workflow-review-requests.controller.js.map +1 -1
  562. package/dist/modules/workflow-reviews.ee/workflow-review.mapper.d.ts +4 -2
  563. package/dist/modules/workflow-reviews.ee/workflow-review.mapper.js +69 -0
  564. package/dist/modules/workflow-reviews.ee/workflow-review.mapper.js.map +1 -1
  565. package/dist/oauth/account-identifier.d.ts +2 -0
  566. package/dist/oauth/account-identifier.js +38 -0
  567. package/dist/oauth/account-identifier.js.map +1 -0
  568. package/dist/oauth/oauth.service.d.ts +0 -1
  569. package/dist/oauth/oauth.service.js +7 -39
  570. package/dist/oauth/oauth.service.js.map +1 -1
  571. package/dist/posthog/index.js +3 -0
  572. package/dist/posthog/index.js.map +1 -1
  573. package/dist/public-api/index.d.ts +1 -1
  574. package/dist/public-api/index.js +8 -4
  575. package/dist/public-api/index.js.map +1 -1
  576. package/dist/public-api/types.d.ts +0 -16
  577. package/dist/public-api/v1/controllers/index.d.ts +1 -0
  578. package/dist/public-api/v1/controllers/index.js +1 -0
  579. package/dist/public-api/v1/controllers/index.js.map +1 -1
  580. package/dist/public-api/v1/controllers/role-mapping-rules.public.controller.d.ts +11 -0
  581. package/dist/public-api/v1/controllers/role-mapping-rules.public.controller.js +61 -0
  582. package/dist/public-api/v1/controllers/role-mapping-rules.public.controller.js.map +1 -0
  583. package/dist/public-api/v1/controllers/roles.public.controller.d.ts +4 -1
  584. package/dist/public-api/v1/controllers/roles.public.controller.js +95 -10
  585. package/dist/public-api/v1/controllers/roles.public.controller.js.map +1 -1
  586. package/dist/public-api/v1/controllers/workflows.public.controller.d.ts +11 -2
  587. package/dist/public-api/v1/controllers/workflows.public.controller.js +159 -3
  588. package/dist/public-api/v1/controllers/workflows.public.controller.js.map +1 -1
  589. package/dist/public-api/v1/handlers/credentials/credentials.handler.js +111 -43
  590. package/dist/public-api/v1/handlers/credentials/credentials.handler.js.map +1 -1
  591. package/dist/public-api/v1/handlers/credentials/credentials.middleware.js +13 -6
  592. package/dist/public-api/v1/handlers/credentials/credentials.middleware.js.map +1 -1
  593. package/dist/public-api/v1/handlers/credentials/credentials.utils.d.ts +12 -0
  594. package/dist/public-api/v1/handlers/credentials/credentials.utils.js +182 -0
  595. package/dist/public-api/v1/handlers/credentials/credentials.utils.js.map +1 -0
  596. package/dist/public-api/v1/handlers/n8n-packages/n8n-packages.handler.d.ts +1 -0
  597. package/dist/public-api/v1/handlers/n8n-packages/n8n-packages.handler.js +1 -0
  598. package/dist/public-api/v1/handlers/n8n-packages/n8n-packages.handler.js.map +1 -1
  599. package/dist/public-api/v1/handlers/workflows/workflows.handler.d.ts +0 -3
  600. package/dist/public-api/v1/handlers/workflows/workflows.handler.js +0 -76
  601. package/dist/public-api/v1/handlers/workflows/workflows.handler.js.map +1 -1
  602. package/dist/public-api/v1/openapi.yml +678 -126
  603. package/dist/public-api/v1/public-api-error-response.d.ts +2 -1
  604. package/dist/public-api/v1/public-api-error-response.js +2 -2
  605. package/dist/public-api/v1/public-api-error-response.js.map +1 -1
  606. package/dist/scaling/constants.js +1 -0
  607. package/dist/scaling/constants.js.map +1 -1
  608. package/dist/scaling/job-processor.js +15 -11
  609. package/dist/scaling/job-processor.js.map +1 -1
  610. package/dist/scaling/scaling.types.d.ts +2 -1
  611. package/dist/scheduling/durable-job-provisioner.d.ts +3 -2
  612. package/dist/scheduling/durable-job-provisioner.js +42 -8
  613. package/dist/scheduling/durable-job-provisioner.js.map +1 -1
  614. package/dist/scheduling/durable-scheduler.js +5 -1
  615. package/dist/scheduling/durable-scheduler.js.map +1 -1
  616. package/dist/scheduling/owner-key.d.ts +14 -0
  617. package/dist/scheduling/owner-key.js +17 -0
  618. package/dist/scheduling/owner-key.js.map +1 -0
  619. package/dist/scheduling/poll-trigger-node/poll-job-provider.d.ts +3 -1
  620. package/dist/scheduling/poll-trigger-node/poll-job-provider.js +7 -3
  621. package/dist/scheduling/poll-trigger-node/poll-job-provider.js.map +1 -1
  622. package/dist/scheduling/poll-trigger-node/poll-trigger-task-handler.d.ts +5 -2
  623. package/dist/scheduling/poll-trigger-node/poll-trigger-task-handler.js +60 -33
  624. package/dist/scheduling/poll-trigger-node/poll-trigger-task-handler.js.map +1 -1
  625. package/dist/scheduling/schedule-trigger-node/schedule-trigger-job-registrar.js +35 -6
  626. package/dist/scheduling/schedule-trigger-node/schedule-trigger-job-registrar.js.map +1 -1
  627. package/dist/security-audit/risk-reporters/instance-risk-reporter.js +1 -1
  628. package/dist/security-audit/risk-reporters/instance-risk-reporter.js.map +1 -1
  629. package/dist/server.js +8 -9
  630. package/dist/server.js.map +1 -1
  631. package/dist/services/ai-gateway.service.d.ts +3 -7
  632. package/dist/services/ai-gateway.service.js +31 -8
  633. package/dist/services/ai-gateway.service.js.map +1 -1
  634. package/dist/services/api-key-auth.strategy.js +3 -0
  635. package/dist/services/api-key-auth.strategy.js.map +1 -1
  636. package/dist/services/folder.service.d.ts +1 -1
  637. package/dist/services/folder.service.js.map +1 -1
  638. package/dist/services/frontend.service.js +7 -2
  639. package/dist/services/frontend.service.js.map +1 -1
  640. package/dist/services/instance-write-access.service.d.ts +5 -0
  641. package/dist/services/instance-write-access.service.js +26 -0
  642. package/dist/services/instance-write-access.service.js.map +1 -0
  643. package/dist/services/oauth-token-verifier-proxy.service.d.ts +4 -2
  644. package/dist/services/oauth-token-verifier-proxy.service.js +2 -2
  645. package/dist/services/oauth-token-verifier-proxy.service.js.map +1 -1
  646. package/dist/services/ownership-transfer/ownership-transfer.manifest.json +1 -1
  647. package/dist/services/project.service.ee.js +12 -5
  648. package/dist/services/project.service.ee.js.map +1 -1
  649. package/dist/services/protected-resource.registry.d.ts +4 -0
  650. package/dist/services/protected-resource.registry.js.map +1 -1
  651. package/dist/services/pruning/workflow-history-compaction.service.js +9 -6
  652. package/dist/services/pruning/workflow-history-compaction.service.js.map +1 -1
  653. package/dist/services/role.service.d.ts +13 -3
  654. package/dist/services/role.service.js +13 -5
  655. package/dist/services/role.service.js.map +1 -1
  656. package/dist/services/sandbox-settings.service.d.ts +29 -0
  657. package/dist/services/sandbox-settings.service.js +144 -0
  658. package/dist/services/sandbox-settings.service.js.map +1 -0
  659. package/dist/services/session-cookie-auth.strategy.d.ts +11 -0
  660. package/dist/services/session-cookie-auth.strategy.js +61 -0
  661. package/dist/services/session-cookie-auth.strategy.js.map +1 -0
  662. package/dist/utils/ai-proxy-language-model.d.ts +13 -0
  663. package/dist/utils/ai-proxy-language-model.js +48 -0
  664. package/dist/utils/ai-proxy-language-model.js.map +1 -0
  665. package/dist/utils/ttl-map.d.ts +3 -1
  666. package/dist/utils/ttl-map.js +13 -17
  667. package/dist/utils/ttl-map.js.map +1 -1
  668. package/dist/webhooks/webhook-helpers.js +12 -2
  669. package/dist/webhooks/webhook-helpers.js.map +1 -1
  670. package/dist/workflow-execute-additional-data.js +17 -1
  671. package/dist/workflow-execute-additional-data.js.map +1 -1
  672. package/dist/workflow-runner.d.ts +4 -1
  673. package/dist/workflow-runner.js +6 -1
  674. package/dist/workflow-runner.js.map +1 -1
  675. package/dist/workflows/publication/trigger-diff.js +10 -1
  676. package/dist/workflows/publication/trigger-diff.js.map +1 -1
  677. package/dist/workflows/publication/workflow-publication-applier.d.ts +2 -2
  678. package/dist/workflows/publication/workflow-publication-applier.js +11 -8
  679. package/dist/workflows/publication/workflow-publication-applier.js.map +1 -1
  680. package/dist/workflows/publication/workflow-publication-outbox-consumer.d.ts +6 -5
  681. package/dist/workflows/publication/workflow-publication-outbox-consumer.js +100 -52
  682. package/dist/workflows/publication/workflow-publication-outbox-consumer.js.map +1 -1
  683. package/dist/workflows/publication/workflow-publication-outbox-worker-pool.d.ts +16 -0
  684. package/dist/workflows/publication/workflow-publication-outbox-worker-pool.js +50 -0
  685. package/dist/workflows/publication/workflow-publication-outbox-worker-pool.js.map +1 -0
  686. package/dist/workflows/triggers/durable-poller-gate.service.d.ts +19 -0
  687. package/dist/workflows/triggers/durable-poller-gate.service.js +78 -0
  688. package/dist/workflows/triggers/durable-poller-gate.service.js.map +1 -0
  689. package/dist/workflows/triggers/enabled-trigger-nodes.d.ts +6 -0
  690. package/dist/workflows/triggers/enabled-trigger-nodes.js +18 -0
  691. package/dist/workflows/triggers/enabled-trigger-nodes.js.map +1 -0
  692. package/dist/workflows/triggers/poll-cursor.service.d.ts +39 -0
  693. package/dist/workflows/triggers/poll-cursor.service.js +100 -0
  694. package/dist/workflows/triggers/poll-cursor.service.js.map +1 -0
  695. package/dist/workflows/triggers/trigger-activation-retry.d.ts +1 -1
  696. package/dist/workflows/triggers/trigger-activation-retry.js +4 -3
  697. package/dist/workflows/triggers/trigger-activation-retry.js.map +1 -1
  698. package/dist/workflows/triggers/trigger-execution-context.factory.d.ts +6 -4
  699. package/dist/workflows/triggers/trigger-execution-context.factory.js +56 -7
  700. package/dist/workflows/triggers/trigger-execution-context.factory.js.map +1 -1
  701. package/dist/workflows/triggers/workflow-trigger-activator.d.ts +9 -7
  702. package/dist/workflows/triggers/workflow-trigger-activator.js +65 -37
  703. package/dist/workflows/triggers/workflow-trigger-activator.js.map +1 -1
  704. package/dist/workflows/workflow-creation.service.d.ts +4 -1
  705. package/dist/workflows/workflow-creation.service.js +20 -2
  706. package/dist/workflows/workflow-creation.service.js.map +1 -1
  707. package/dist/workflows/workflow-entity-mapper.js.map +1 -1
  708. package/dist/workflows/workflow-execution.service.d.ts +9 -4
  709. package/dist/workflows/workflow-execution.service.js +93 -2
  710. package/dist/workflows/workflow-execution.service.js.map +1 -1
  711. package/dist/workflows/workflow-finder.service.d.ts +1 -0
  712. package/dist/workflows/workflow-finder.service.js +5 -1
  713. package/dist/workflows/workflow-finder.service.js.map +1 -1
  714. package/dist/workflows/workflow-validation.service.d.ts +1 -0
  715. package/dist/workflows/workflow-validation.service.js +32 -11
  716. package/dist/workflows/workflow-validation.service.js.map +1 -1
  717. package/dist/workflows/workflow.service.d.ts +1 -0
  718. package/dist/workflows/workflow.service.js +18 -4
  719. package/dist/workflows/workflow.service.js.map +1 -1
  720. package/package.json +45 -44
  721. package/templates/form-shell.handlebars +155 -86
  722. package/templates/form-trigger.handlebars +97 -2
  723. package/dist/modules/agents/agent-knowledge-gate.d.ts +0 -2
  724. package/dist/modules/agents/agent-knowledge-gate.js +0 -7
  725. package/dist/modules/agents/agent-knowledge-gate.js.map +0 -1
  726. package/dist/modules/agents/agent-knowledge-sandbox.service.js +0 -693
  727. package/dist/modules/agents/agent-knowledge-sandbox.service.js.map +0 -1
  728. package/dist/modules/workflow-reviews.ee/workflow-review-decision-eligibility.service.d.ts +0 -15
  729. package/dist/modules/workflow-reviews.ee/workflow-review-decision-eligibility.service.js +0 -52
  730. package/dist/modules/workflow-reviews.ee/workflow-review-decision-eligibility.service.js.map +0 -1
  731. package/dist/public-api/v1/handlers/credentials/credentials.service.d.ts +0 -36
  732. package/dist/public-api/v1/handlers/credentials/credentials.service.js +0 -330
  733. package/dist/public-api/v1/handlers/credentials/credentials.service.js.map +0 -1
@@ -1,14 +1,12 @@
1
1
  "use strict";
2
- var __importDefault = (this && this.__importDefault) || function (mod) {
3
- return (mod && mod.__esModule) ? mod : { "default": mod };
4
- };
5
2
  Object.defineProperty(exports, "__esModule", { value: true });
6
3
  exports.createUpdateWorkflowTool = void 0;
7
4
  const db_1 = require("@n8n/db");
8
5
  const permissions_1 = require("@n8n/permissions");
9
6
  const n8n_workflow_1 = require("n8n-workflow");
10
- const zod_1 = __importDefault(require("zod"));
11
- const mcp_constants_1 = require("../../mcp.constants");
7
+ const zod_1 = require("zod");
8
+ const subworkflow_policy_denial_error_1 = require("../../../../errors/subworkflow-policy-denial.error");
9
+ const workflow_helpers_1 = require("../../../../workflow-helpers");
12
10
  const connection_structure_check_1 = require("./connection-structure-check");
13
11
  const constants_1 = require("./constants");
14
12
  const credential_validation_1 = require("./credential-validation");
@@ -17,8 +15,7 @@ const data_table_validation_1 = require("./data-table-validation");
17
15
  const skills_used_1 = require("./skills-used");
18
16
  const version_metadata_1 = require("./version-metadata");
19
17
  const workflow_operations_1 = require("./workflow-operations");
20
- const subworkflow_policy_denial_error_1 = require("../../../../errors/subworkflow-policy-denial.error");
21
- const workflow_helpers_1 = require("../../../../workflow-helpers");
18
+ const mcp_constants_1 = require("../../mcp.constants");
22
19
  const workflow_validation_utils_1 = require("../workflow-validation.utils");
23
20
  const MAX_OPERATIONS_PER_CALL = 100;
24
21
  const baseOperationTypes = [
@@ -39,137 +36,127 @@ const baseOperationTypes = [
39
36
  'removeTags',
40
37
  'setNodeGroups',
41
38
  ];
42
- const gatedGroupOperationTypes = ['addNodeGroup', 'removeNodeGroup', 'updateNodeGroup'];
39
+ const gatedGroupOperationTypes = [
40
+ 'addNodeGroup',
41
+ 'removeNodeGroup',
42
+ 'updateNodeGroup',
43
+ ];
43
44
  const GATED_GROUP_OP_TYPES = new Set(gatedGroupOperationTypes);
44
45
  const buildOperationTypeSchema = (canvasGroupsEnabled) => canvasGroupsEnabled
45
- ? zod_1.default.enum([...baseOperationTypes, ...gatedGroupOperationTypes])
46
- : zod_1.default.enum(baseOperationTypes);
47
- const positionInputSchema = zod_1.default.array(zod_1.default.number()).length(2).describe('Canvas [x, y].');
48
- const credentialsInputSchema = zod_1.default.record(zod_1.default.string(), zod_1.default.object({ id: zod_1.default.string().optional(), name: zod_1.default.string() }));
49
- const nodeInputSchema = zod_1.default.object({
50
- name: zod_1.default.string().describe('Unique node name.'),
51
- type: zod_1.default.string().describe('Node type, e.g. "n8n-nodes-base.set".'),
52
- typeVersion: zod_1.default.number(),
53
- parameters: zod_1.default.record(zod_1.default.string(), zod_1.default.unknown()).optional(),
46
+ ? zod_1.z.enum([...baseOperationTypes, ...gatedGroupOperationTypes])
47
+ : zod_1.z.enum(baseOperationTypes);
48
+ const positionInputSchema = zod_1.z.array(zod_1.z.number()).length(2).describe('Canvas [x, y].');
49
+ const credentialsInputSchema = zod_1.z.record(zod_1.z.string(), zod_1.z.object({ id: zod_1.z.string().optional(), name: zod_1.z.string() }));
50
+ const nodeInputSchema = zod_1.z.object({
51
+ name: zod_1.z.string().describe('Unique node name.'),
52
+ type: zod_1.z.string().describe('Node type, e.g. "n8n-nodes-base.set".'),
53
+ typeVersion: zod_1.z.number(),
54
+ parameters: zod_1.z.record(zod_1.z.string(), zod_1.z.unknown()).optional(),
54
55
  position: positionInputSchema.optional(),
55
56
  credentials: credentialsInputSchema.optional(),
56
- disabled: zod_1.default.boolean().optional(),
57
- notes: zod_1.default.string().optional(),
58
- id: zod_1.default.string().optional(),
57
+ disabled: zod_1.z.boolean().optional(),
58
+ notes: zod_1.z.string().optional(),
59
+ id: zod_1.z.string().optional(),
59
60
  });
60
- const nodeSettingsInputSchema = zod_1.default.object({
61
- onError: zod_1.default
61
+ const nodeSettingsInputSchema = zod_1.z.object({
62
+ onError: zod_1.z
62
63
  .enum(['stopWorkflow', 'continueRegularOutput', 'continueErrorOutput'])
63
64
  .optional()
64
65
  .describe('Error behavior.'),
65
- retryOnFail: zod_1.default.boolean().optional(),
66
- maxTries: zod_1.default.number().int().min(2).max(5).optional(),
67
- waitBetweenTries: zod_1.default.number().int().min(0).max(5000).optional(),
68
- alwaysOutputData: zod_1.default.boolean().optional(),
69
- executeOnce: zod_1.default.boolean().optional(),
66
+ retryOnFail: zod_1.z.boolean().optional(),
67
+ maxTries: zod_1.z.number().int().min(2).max(5).optional(),
68
+ waitBetweenTries: zod_1.z.number().int().min(0).max(5000).optional(),
69
+ alwaysOutputData: zod_1.z.boolean().optional(),
70
+ executeOnce: zod_1.z.boolean().optional(),
70
71
  });
71
- const combinedSettingsInputSchema = zod_1.default
72
+ const combinedSettingsInputSchema = zod_1.z
72
73
  .object({
73
74
  ...nodeSettingsInputSchema.shape,
74
75
  ...workflow_operations_1.workflowSettingsObjectSchema.shape,
75
76
  })
76
77
  .describe('Settings to write. For setNodeSettings use the node-level keys (onError, retryOnFail, maxTries, waitBetweenTries, alwaysOutputData, executeOnce). For setWorkflowSettings use the workflow-level keys (errorWorkflow, timezone, executionOrder, saveExecutionProgress, saveManualExecutions, saveDataErrorExecution, saveDataSuccessExecution, executionTimeout, timeSavedPerExecution, callerPolicy, callerIds). Provide only the keys for the operation you are running.');
77
- const buildOperationInputSchema = (canvasGroupsEnabled) => zod_1.default
78
+ const buildOperationInputSchema = (canvasGroupsEnabled) => zod_1.z
78
79
  .object({
79
80
  type: buildOperationTypeSchema(canvasGroupsEnabled).describe('Operation type.'),
80
- nodeName: zod_1.default.string().optional().describe('For node-targeted ops.'),
81
+ nodeName: zod_1.z.string().optional().describe('For node-targeted ops.'),
81
82
  node: nodeInputSchema.optional().describe('For addNode.'),
82
- parameters: zod_1.default
83
- .record(zod_1.default.string(), zod_1.default.unknown())
83
+ parameters: zod_1.z
84
+ .record(zod_1.z.string(), zod_1.z.unknown())
84
85
  .optional()
85
86
  .describe('For updateNodeParameters.'),
86
- replace: zod_1.default.boolean().optional().describe('For updateNodeParameters; default false.'),
87
- path: zod_1.default.string().min(2).optional().describe('For setNodeParameter; JSON Pointer path.'),
88
- value: zod_1.default.unknown().optional().describe('For setNodeParameter.'),
89
- oldName: zod_1.default.string().optional().describe('For renameNode.'),
90
- newName: zod_1.default
87
+ replace: zod_1.z.boolean().optional().describe('For updateNodeParameters; default false.'),
88
+ path: zod_1.z.string().min(2).optional().describe('For setNodeParameter; JSON Pointer path.'),
89
+ value: zod_1.z.unknown().optional().describe('For setNodeParameter.'),
90
+ oldName: zod_1.z.string().optional().describe('For renameNode.'),
91
+ newName: zod_1.z
91
92
  .string()
92
93
  .optional()
93
94
  .describe(canvasGroupsEnabled ? 'For renameNode or updateNodeGroup.' : 'For renameNode.'),
94
- source: zod_1.default.string().optional().describe('For connection ops.'),
95
- target: zod_1.default.string().optional().describe('For connection ops.'),
96
- sourceIndex: zod_1.default
95
+ source: zod_1.z.string().optional().describe('For connection ops.'),
96
+ target: zod_1.z.string().optional().describe('For connection ops.'),
97
+ sourceIndex: zod_1.z
97
98
  .number()
98
99
  .int()
99
100
  .nonnegative()
100
101
  .optional()
101
102
  .describe('For connection ops; default 0.'),
102
- targetIndex: zod_1.default
103
+ targetIndex: zod_1.z
103
104
  .number()
104
105
  .int()
105
106
  .nonnegative()
106
107
  .optional()
107
108
  .describe('For connection ops; default 0.'),
108
- connectionType: zod_1.default.string().optional().describe('For connection ops; default "main".'),
109
- credentialKey: zod_1.default.string().optional().describe('For setNodeCredential.'),
110
- credentialId: zod_1.default.string().optional().describe('For setNodeCredential.'),
111
- credentialName: zod_1.default.string().optional().describe('For setNodeCredential.'),
109
+ connectionType: zod_1.z.string().optional().describe('For connection ops; default "main".'),
110
+ credentialKey: zod_1.z.string().optional().describe('For setNodeCredential.'),
111
+ credentialId: zod_1.z.string().optional().describe('For setNodeCredential.'),
112
+ credentialName: zod_1.z.string().optional().describe('For setNodeCredential.'),
112
113
  position: positionInputSchema.optional().describe('For setNodePosition.'),
113
- disabled: zod_1.default.boolean().optional().describe('For setNodeDisabled.'),
114
+ disabled: zod_1.z.boolean().optional().describe('For setNodeDisabled.'),
114
115
  settings: combinedSettingsInputSchema
115
116
  .optional()
116
117
  .describe('For setNodeSettings or setWorkflowSettings.'),
117
- name: zod_1.default
118
+ name: zod_1.z
118
119
  .string()
119
120
  .max(128)
120
121
  .optional()
121
122
  .describe(canvasGroupsEnabled
122
123
  ? 'For setWorkflowMetadata (workflow name) or addNodeGroup (group name).'
123
124
  : 'Only used for setWorkflowMetadata.'),
124
- description: zod_1.default
125
+ description: zod_1.z
125
126
  .string()
126
127
  .max(255)
127
128
  .optional()
128
129
  .describe(canvasGroupsEnabled
129
130
  ? 'For setWorkflowMetadata, addNodeGroup, or updateNodeGroup.'
130
131
  : 'Only used for setWorkflowMetadata.'),
131
- names: zod_1.default.array(zod_1.default.string()).optional().describe('For addTags / removeTags.'),
132
- nodeGroups: zod_1.default
133
- .array(zod_1.default.object({
134
- id: zod_1.default.string().optional(),
135
- name: zod_1.default.string(),
136
- nodeNames: zod_1.default.array(zod_1.default.string()),
137
- description: zod_1.default.string().optional(),
132
+ names: zod_1.z.array(zod_1.z.string()).optional().describe('For addTags / removeTags.'),
133
+ nodeGroups: zod_1.z
134
+ .array(zod_1.z.object({
135
+ id: zod_1.z.string().optional(),
136
+ name: zod_1.z.string(),
137
+ nodeNames: zod_1.z.array(zod_1.z.string()),
138
+ description: zod_1.z.string().optional(),
138
139
  }))
139
140
  .optional()
140
141
  .describe('For setNodeGroups. Replaces all node groups; pass [] to clear. Group members are node names, not ids.'),
141
142
  ...(canvasGroupsEnabled
142
143
  ? {
143
- groupName: zod_1.default.string().optional().describe('For removeNodeGroup / updateNodeGroup.'),
144
- nodeNames: zod_1.default
145
- .array(zod_1.default.string())
144
+ groupName: zod_1.z.string().optional().describe('For removeNodeGroup / updateNodeGroup.'),
145
+ nodeNames: zod_1.z
146
+ .array(zod_1.z.string())
146
147
  .optional()
147
148
  .describe('For addNodeGroup / updateNodeGroup; group member node names.'),
148
- id: zod_1.default.string().optional().describe('For addNodeGroup; group id, generated if omitted.'),
149
+ id: zod_1.z.string().optional().describe('For addNodeGroup; group id, generated if omitted.'),
149
150
  }
150
151
  : {}),
151
152
  })
152
153
  .describe('Workflow update operation. Provide fields matching type.');
153
- const strictOperationsSchema = zod_1.default.array(workflow_operations_1.partialUpdateOperationSchema);
154
- function dedupeNamesPreservingCase(names) {
155
- const seen = new Set();
156
- const result = [];
157
- for (const raw of names) {
158
- const trimmed = raw.trim();
159
- if (trimmed.length === 0)
160
- continue;
161
- const key = trimmed.toLowerCase();
162
- if (seen.has(key))
163
- continue;
164
- seen.add(key);
165
- result.push(trimmed);
166
- }
167
- return result;
168
- }
154
+ const strictOperationsSchema = zod_1.z.array(workflow_operations_1.partialUpdateOperationSchema);
169
155
  function parseStrictOperations(operations) {
170
156
  const parsed = strictOperationsSchema.safeParse(operations);
171
- if (parsed.success)
157
+ if (parsed.success) {
172
158
  return parsed.data;
159
+ }
173
160
  const details = parsed.error.issues
174
161
  .map(({ path, message }) => {
175
162
  const [index, ...rest] = path;
@@ -181,50 +168,6 @@ function parseStrictOperations(operations) {
181
168
  .join('; ');
182
169
  throw new Error(`Invalid operations: ${details}`);
183
170
  }
184
- function collectTouchedNodes(operations) {
185
- const touched = new Map();
186
- const recordTouch = (name, opIndex) => {
187
- if (!touched.has(name))
188
- touched.set(name, opIndex);
189
- };
190
- for (let i = 0; i < operations.length; i++) {
191
- const op = operations[i];
192
- if (op.type === 'addNode') {
193
- recordTouch(op.node.name, i);
194
- }
195
- else if (op.type === 'updateNodeParameters' || op.type === 'setNodeParameter') {
196
- recordTouch(op.nodeName, i);
197
- }
198
- else if (op.type === 'renameNode') {
199
- const idx = touched.get(op.oldName);
200
- if (idx !== undefined) {
201
- touched.delete(op.oldName);
202
- touched.set(op.newName, idx);
203
- }
204
- }
205
- else if (op.type === 'removeNode') {
206
- touched.delete(op.nodeName);
207
- }
208
- }
209
- return touched;
210
- }
211
- const countOperationsWithNoEffect = (skippedOperations, groupOperations) => {
212
- const producedPerOp = new Map();
213
- for (const { opIndex } of Object.values(groupOperations)) {
214
- producedPerOp.set(opIndex, (producedPerOp.get(opIndex) ?? 0) + 1);
215
- }
216
- const skippedPerOp = new Map();
217
- for (const { opIndex } of skippedOperations) {
218
- skippedPerOp.set(opIndex, (skippedPerOp.get(opIndex) ?? 0) + 1);
219
- }
220
- let count = 0;
221
- for (const [opIndex, skipped] of skippedPerOp) {
222
- if (skipped >= (producedPerOp.get(opIndex) ?? 0)) {
223
- count++;
224
- }
225
- }
226
- return count;
227
- };
228
171
  const NON_FATAL_OPERATION_TYPES_LIST = [...workflow_operations_1.NON_FATAL_OPERATION_TYPES].join(', ');
229
172
  const buildToolDescription = (canvasGroupsEnabled) => {
230
173
  const base = 'Atomically update an existing workflow with operation objects. Edits nodes/connections and also workflow-level settings via setWorkflowSettings — including the error workflow that runs automatically on failure to send alerts (e.g. when a user asks to "add error handling" or "notify me if this breaks"). Pass skillsUsed if n8n skills were used.';
@@ -233,9 +176,9 @@ const buildToolDescription = (canvasGroupsEnabled) => {
233
176
  : base;
234
177
  };
235
178
  const buildInputSchema = (canvasGroupsEnabled) => ({
236
- workflowId: zod_1.default.string().describe('The ID of the workflow to update.'),
237
- skillsUsed: zod_1.default.array(zod_1.default.string()).optional().describe(skills_used_1.SKILLS_USED_PARAM_DESCRIPTION),
238
- operations: zod_1.default
179
+ workflowId: zod_1.z.string().describe('The ID of the workflow to update.'),
180
+ skillsUsed: zod_1.z.array(zod_1.z.string()).optional().describe(skills_used_1.SKILLS_USED_PARAM_DESCRIPTION),
181
+ operations: zod_1.z
239
182
  .array(buildOperationInputSchema(canvasGroupsEnabled))
240
183
  .min(1)
241
184
  .max(MAX_OPERATIONS_PER_CALL)
@@ -246,62 +189,63 @@ const buildInputSchema = (canvasGroupsEnabled) => ({
246
189
  versionDescription: version_metadata_1.versionDescriptionInputSchema.describe('Longer description of what changed and why, shown in the version history alongside the version name.'),
247
190
  });
248
191
  const outputSchema = {
249
- workflowId: zod_1.default.string().optional(),
250
- name: zod_1.default.string().optional(),
251
- nodeCount: zod_1.default.number().optional(),
252
- url: zod_1.default.string().optional(),
253
- appliedOperations: zod_1.default
192
+ workflowId: zod_1.z.string().optional(),
193
+ name: zod_1.z.string().optional(),
194
+ nodeCount: zod_1.z.number().optional(),
195
+ url: zod_1.z.string().optional(),
196
+ appliedOperations: zod_1.z
254
197
  .number()
255
198
  .optional()
256
199
  .describe('Number of submitted operations that were applied. See skippedOperations for any that were not.'),
257
- autoAssignedCredentials: zod_1.default
258
- .array(zod_1.default.object({
259
- nodeName: zod_1.default.string(),
260
- credentialName: zod_1.default.string(),
261
- credentialType: zod_1.default.string(),
262
- source: zod_1.default.enum(['user', 'aiGateway']).optional(),
200
+ autoAssignedCredentials: zod_1.z
201
+ .array(zod_1.z.object({
202
+ nodeName: zod_1.z.string(),
203
+ credentialName: zod_1.z.string(),
204
+ credentialType: zod_1.z.string(),
205
+ source: zod_1.z.enum(['user', 'aiGateway']).optional(),
263
206
  }))
264
207
  .optional()
265
208
  .describe('Credentials auto-assigned to nodes that were added in this update.'),
266
- validationWarnings: zod_1.default
267
- .array(zod_1.default.object({
268
- code: zod_1.default.string(),
269
- message: zod_1.default.string(),
270
- nodeName: zod_1.default.string().optional(),
271
- preExisting: zod_1.default
209
+ validationWarnings: zod_1.z
210
+ .array(zod_1.z.object({
211
+ code: zod_1.z.string(),
212
+ message: zod_1.z.string(),
213
+ nodeName: zod_1.z.string().optional(),
214
+ preExisting: zod_1.z
272
215
  .boolean()
273
216
  .optional()
274
217
  .describe('True when the same warning already existed before this update — it was not caused by these operations.'),
275
218
  }))
276
219
  .optional()
277
220
  .describe('Graph and JSON validation warnings on the resulting workflow. Warnings marked preExisting (also tagged [pre-existing] in the message) were already present before this update; only self-correct the rest on the next call.'),
278
- note: zod_1.default.string().optional(),
279
- skippedOperations: zod_1.default
280
- .array(zod_1.default.object({
281
- opIndex: zod_1.default.number(),
282
- type: zod_1.default.string(),
283
- reason: zod_1.default.string(),
221
+ note: zod_1.z.string().optional(),
222
+ skippedOperations: zod_1.z
223
+ .array(zod_1.z.object({
224
+ opIndex: zod_1.z.number(),
225
+ type: zod_1.z.string(),
226
+ reason: zod_1.z.string(),
284
227
  }))
285
228
  .optional()
286
229
  .describe('Submitted group operations that did not take effect: either invalid, or their group broke the group rules.'),
287
- removedGroups: zod_1.default
288
- .array(zod_1.default.object({
289
- groupName: zod_1.default.string(),
290
- reason: zod_1.default.string(),
230
+ removedGroups: zod_1.z
231
+ .array(zod_1.z.object({
232
+ groupName: zod_1.z.string(),
233
+ reason: zod_1.z.string(),
291
234
  }))
292
235
  .optional(),
293
- settings: zod_1.default
294
- .record(zod_1.default.string(), zod_1.default.unknown())
236
+ settings: zod_1.z
237
+ .record(zod_1.z.string(), zod_1.z.unknown())
295
238
  .optional()
296
239
  .describe('Resulting workflow-level settings after the update. Present only when a setWorkflowSettings operation ran. Reflects server-side cleanup (e.g. "DEFAULT" values are removed).'),
297
- error: zod_1.default
240
+ error: zod_1.z
298
241
  .string()
299
242
  .optional()
300
243
  .describe('Error message explaining why the update failed. Present only on failure.'),
301
244
  };
302
245
  async function assertErrorWorkflowIsUsable({ errorWorkflowId, parentWorkflowId, user, workflowFinderService, workflowPublishedDataService, useWorkflowPublicationService, nodeTypes, subworkflowPolicyChecker, errorTriggerType, }) {
303
- if (!errorWorkflowId || errorWorkflowId === 'DEFAULT')
246
+ if (!errorWorkflowId || errorWorkflowId === 'DEFAULT') {
304
247
  return;
248
+ }
305
249
  const errorWorkflow = await workflowFinderService.findWorkflowForUser(errorWorkflowId, user, ['workflow:read'], { includeActiveVersion: !useWorkflowPublicationService });
306
250
  if (!errorWorkflow) {
307
251
  throw new Error(`Error workflow '${errorWorkflowId}' was not found or you do not have access to it. Find a valid workflow ID with search_workflows, or create an error-handler workflow first.`);
@@ -341,8 +285,9 @@ async function assertErrorWorkflowIsUsable({ errorWorkflowId, parentWorkflowId,
341
285
  }
342
286
  }
343
287
  function assertCallerPolicyConsistent(settings) {
344
- if (settings?.callerPolicy !== 'workflowsFromAList')
288
+ if (settings?.callerPolicy !== 'workflowsFromAList') {
345
289
  return;
290
+ }
346
291
  const callerIds = (settings.callerIds ?? '')
347
292
  .split(',')
348
293
  .map((id) => id.trim())
@@ -352,262 +297,387 @@ function assertCallerPolicyConsistent(settings) {
352
297
  }
353
298
  }
354
299
  function assertExecutionTimeoutWithinMax(executionTimeout, maxTimeout) {
355
- if (executionTimeout === undefined || executionTimeout <= 0 || maxTimeout <= 0)
300
+ if (executionTimeout === undefined || executionTimeout <= 0 || maxTimeout <= 0) {
356
301
  return;
302
+ }
357
303
  if (executionTimeout > maxTimeout) {
358
304
  throw new Error(`executionTimeout (${executionTimeout}s) exceeds this instance's maximum of ${maxTimeout}s. Set executionTimeout to ${maxTimeout} or less.`);
359
305
  }
360
306
  }
361
- const createUpdateWorkflowTool = (user, workflowFinderService, workflowService, urlService, telemetry, nodeTypes, credentialsService, sharedWorkflowRepository, collaborationService, dataTableOps, tagService, globalConfig, subworkflowPolicyChecker, workflowPublishedDataService, aiGatewayService, options = {}) => ({
362
- name: constants_1.MCP_UPDATE_WORKFLOW_TOOL.toolName,
363
- config: {
364
- description: buildToolDescription(options.canvasGroupsEnabled === true),
365
- inputSchema: buildInputSchema(options.canvasGroupsEnabled === true),
366
- outputSchema,
367
- annotations: {
368
- title: constants_1.MCP_UPDATE_WORKFLOW_TOOL.displayTitle,
369
- readOnlyHint: false,
370
- destructiveHint: true,
371
- idempotentHint: false,
372
- openWorldHint: false,
373
- },
374
- },
375
- handler: async ({ workflowId, skillsUsed, operations, versionName, versionDescription, }) => {
376
- const sanitizedSkillsUsed = (0, skills_used_1.sanitizeSkillsUsed)(skillsUsed);
377
- const telemetryPayload = {
378
- user_id: user.id,
379
- tool_name: constants_1.MCP_UPDATE_WORKFLOW_TOOL.toolName,
380
- parameters: {
381
- workflowId,
382
- ...(sanitizedSkillsUsed !== undefined ? { skillsUsed: sanitizedSkillsUsed } : {}),
383
- opCount: operations.length,
384
- opTypes: operations.map((op) => op.type),
385
- hasVersionName: !!versionName,
386
- hasVersionDescription: !!versionDescription,
387
- },
388
- };
389
- try {
390
- const strictOperations = parseStrictOperations(operations);
391
- const hasGatedGroupOperations = strictOperations.some((op) => GATED_GROUP_OP_TYPES.has(op.type));
392
- if (hasGatedGroupOperations && options.canvasGroupsEnabled !== true) {
393
- throw new Error('Node group operations (addNodeGroup, removeNodeGroup, updateNodeGroup) are not available on this instance.');
394
- }
395
- const hasTagOperations = strictOperations.some((op) => op.type === 'addTags' || op.type === 'removeTags');
396
- if (hasTagOperations && globalConfig.tags.disabled) {
397
- throw new Error('Tag operations are not supported on this instance because tags are disabled.');
398
- }
399
- const existingWorkflow = await (0, workflow_validation_utils_1.getMcpWorkflow)(workflowId, user, ['workflow:update'], workflowFinderService, { includeTags: hasTagOperations });
400
- await collaborationService.ensureWorkflowEditable(existingWorkflow.id);
401
- const result = (0, workflow_operations_1.applyOperations)((0, workflow_operations_1.toWorkflowSlice)(existingWorkflow, { includeTags: hasTagOperations }), strictOperations, { canvasGroupsEnabled: options.canvasGroupsEnabled });
402
- if (!result.success) {
403
- throw new Error(result.error);
404
- }
405
- const skippedOperations = [...result.skippedOperations];
406
- const removedGroups = [];
407
- let nodeGroupsNeedPersisting = result.nodeGroupsChanged;
408
- if (options.canvasGroupsEnabled) {
409
- const getNodeType = (0, workflow_helpers_1.makeGetNodeTypeForGrouping)(nodeTypes);
410
- const ownGroups = (0, workflow_helpers_1.dropInvalidNodeGroups)(result.workflow, getNodeType, (violation) => result.groupOperations[violation.groupId] !== undefined);
411
- const violations = [...ownGroups, ...(0, workflow_helpers_1.dropInvalidNodeGroups)(result.workflow, getNodeType)];
412
- if (violations.length > 0) {
413
- nodeGroupsNeedPersisting = true;
414
- for (const violation of violations) {
415
- const requestedBy = result.groupOperations[violation.groupId];
416
- if (requestedBy) {
417
- skippedOperations.push({ ...requestedBy, reason: violation.message });
418
- }
419
- else {
420
- removedGroups.push({
421
- groupName: violation.groupName,
422
- reason: violation.message,
423
- });
424
- }
425
- }
426
- }
427
- }
428
- const credentialCheck = await (0, credential_validation_1.validateCredentialReferences)(strictOperations, existingWorkflow, user, credentialsService, nodeTypes, { workflowId: existingWorkflow.id });
429
- if (!credentialCheck.ok) {
430
- throw new Error(credentialCheck.error);
431
- }
432
- const invalidToolSourceResponse = (0, connection_structure_check_1.buildInvalidAiToolSourceErrorResponse)({ nodes: result.workflow.nodes, connections: result.workflow.connections }, nodeTypes, (errorMessage) => ({ error: errorMessage }), telemetryPayload, telemetry);
433
- if (invalidToolSourceResponse) {
434
- return invalidToolSourceResponse;
307
+ async function assertWorkflowSettingsValid({ strictOperations, settings, workflowId, }, { user, nodeTypes, globalConfig, workflowFinderService, workflowPublishedDataService, subworkflowPolicyChecker, }) {
308
+ const setsErrorWorkflow = strictOperations.some((op) => op.type === 'setWorkflowSettings' && op.settings.errorWorkflow !== undefined);
309
+ if (setsErrorWorkflow) {
310
+ await assertErrorWorkflowIsUsable({
311
+ errorWorkflowId: settings?.errorWorkflow,
312
+ parentWorkflowId: workflowId,
313
+ user,
314
+ workflowFinderService,
315
+ workflowPublishedDataService,
316
+ useWorkflowPublicationService: globalConfig.workflows.useWorkflowPublicationService,
317
+ nodeTypes,
318
+ subworkflowPolicyChecker,
319
+ errorTriggerType: globalConfig.nodes.errorTriggerType,
320
+ });
321
+ }
322
+ const setsCallerConfig = strictOperations.some((op) => op.type === 'setWorkflowSettings' &&
323
+ (op.settings.callerPolicy !== undefined || op.settings.callerIds !== undefined));
324
+ if (setsCallerConfig) {
325
+ assertCallerPolicyConsistent(settings);
326
+ }
327
+ const setsExecutionTimeout = strictOperations.some((op) => op.type === 'setWorkflowSettings' && op.settings.executionTimeout !== undefined);
328
+ if (setsExecutionTimeout) {
329
+ assertExecutionTimeoutWithinMax(settings?.executionTimeout, globalConfig.executions.maxTimeout);
330
+ }
331
+ }
332
+ async function assertPublishAllowedForSettingsChange({ hasSettingsOperations, activeVersionId, workflowId, }, { user, workflowFinderService, }) {
333
+ if (!hasSettingsOperations) {
334
+ return;
335
+ }
336
+ if (!activeVersionId) {
337
+ return;
338
+ }
339
+ if ((0, permissions_1.hasGlobalScope)(user, 'workflow:publish')) {
340
+ return;
341
+ }
342
+ const canPublish = await workflowFinderService.findWorkflowHeadForUser(workflowId, user, [
343
+ 'workflow:publish',
344
+ ]);
345
+ if (!canPublish) {
346
+ throw new Error('Changing settings on a published workflow reactivates it, which requires publish permission. Your account can edit but not publish this workflow. Ask the owner for publish access, or unpublish the workflow first.');
347
+ }
348
+ }
349
+ function dedupeNamesPreservingCase(names) {
350
+ const seen = new Set();
351
+ const result = [];
352
+ for (const raw of names) {
353
+ const trimmed = raw.trim();
354
+ if (trimmed.length === 0) {
355
+ continue;
356
+ }
357
+ const key = trimmed.toLowerCase();
358
+ if (seen.has(key)) {
359
+ continue;
360
+ }
361
+ seen.add(key);
362
+ result.push(trimmed);
363
+ }
364
+ return result;
365
+ }
366
+ function collectTouchedNodes(operations) {
367
+ const touched = new Map();
368
+ const recordTouch = (name, opIndex) => {
369
+ if (!touched.has(name)) {
370
+ touched.set(name, opIndex);
371
+ }
372
+ };
373
+ for (let i = 0; i < operations.length; i++) {
374
+ const op = operations[i];
375
+ if (op.type === 'addNode') {
376
+ recordTouch(op.node.name, i);
377
+ }
378
+ else if (op.type === 'updateNodeParameters' || op.type === 'setNodeParameter') {
379
+ recordTouch(op.nodeName, i);
380
+ }
381
+ else if (op.type === 'renameNode') {
382
+ const idx = touched.get(op.oldName);
383
+ if (idx !== undefined) {
384
+ touched.delete(op.oldName);
385
+ touched.set(op.newName, idx);
435
386
  }
436
- const { projectId: workflowProjectId } = await sharedWorkflowRepository.findOneOrFail({
437
- where: { workflowId, role: 'workflow:owner' },
438
- select: ['projectId'],
387
+ }
388
+ else if (op.type === 'removeNode') {
389
+ touched.delete(op.nodeName);
390
+ }
391
+ }
392
+ return touched;
393
+ }
394
+ const countOperationsWithNoEffect = (skippedOperations, groupOperations) => {
395
+ const producedPerOp = new Map();
396
+ for (const { opIndex } of Object.values(groupOperations)) {
397
+ producedPerOp.set(opIndex, (producedPerOp.get(opIndex) ?? 0) + 1);
398
+ }
399
+ const skippedPerOp = new Map();
400
+ for (const { opIndex } of skippedOperations) {
401
+ skippedPerOp.set(opIndex, (skippedPerOp.get(opIndex) ?? 0) + 1);
402
+ }
403
+ let count = 0;
404
+ for (const [opIndex, skipped] of skippedPerOp) {
405
+ if (skipped >= (producedPerOp.get(opIndex) ?? 0)) {
406
+ count++;
407
+ }
408
+ }
409
+ return count;
410
+ };
411
+ const isTagOperation = (op) => op.type === 'addTags' || op.type === 'removeTags';
412
+ const isSettingsOperation = (op) => op.type === 'setWorkflowSettings';
413
+ function assertOperationsSupported(strictOperations, { canvasGroupsEnabled, tagsDisabled }) {
414
+ if (!canvasGroupsEnabled && strictOperations.some((op) => GATED_GROUP_OP_TYPES.has(op.type))) {
415
+ throw new Error('Node group operations (addNodeGroup, removeNodeGroup, updateNodeGroup) are not available on this instance.');
416
+ }
417
+ if (tagsDisabled && strictOperations.some(isTagOperation)) {
418
+ throw new Error('Tag operations are not supported on this instance because tags are disabled.');
419
+ }
420
+ }
421
+ function resolveNodeGroupViolations(result, canvasGroupsEnabled, nodeTypes) {
422
+ const skippedOperations = [...result.skippedOperations];
423
+ const removedGroups = [];
424
+ const getNodeType = (0, workflow_helpers_1.makeGetNodeTypeForGrouping)(nodeTypes);
425
+ const violations = canvasGroupsEnabled
426
+ ? [
427
+ ...(0, workflow_helpers_1.dropInvalidNodeGroups)(result.workflow, getNodeType, (violation) => result.groupOperations[violation.groupId] !== undefined),
428
+ ...(0, workflow_helpers_1.dropInvalidNodeGroups)(result.workflow, getNodeType),
429
+ ]
430
+ : [];
431
+ for (const violation of violations) {
432
+ const requestedBy = result.groupOperations[violation.groupId];
433
+ if (requestedBy) {
434
+ skippedOperations.push({ ...requestedBy, reason: violation.message });
435
+ }
436
+ else {
437
+ removedGroups.push({
438
+ groupName: violation.groupName,
439
+ reason: violation.message,
439
440
  });
440
- const dataTableCheck = await (0, data_table_validation_1.validateDataTableReferencesForUpdate)(result.workflow.nodes, collectTouchedNodes(strictOperations), workflowProjectId, dataTableOps);
441
- if (!dataTableCheck.ok) {
442
- throw new Error(dataTableCheck.error);
441
+ }
442
+ }
443
+ return {
444
+ skippedOperations,
445
+ removedGroups,
446
+ nodeGroupsNeedPersisting: violations.length > 0 || result.nodeGroupsChanged,
447
+ };
448
+ }
449
+ function buildWorkflowUpdateEntity({ workflow, existingMeta, hasSettingsOperations, hasNonTagOperations, nodeGroupsNeedPersisting, }) {
450
+ const workflowUpdateData = new db_1.WorkflowEntity();
451
+ Object.assign(workflowUpdateData, {
452
+ name: workflow.name,
453
+ ...(workflow.description !== undefined ? { description: workflow.description } : {}),
454
+ nodes: workflow.nodes,
455
+ connections: workflow.connections,
456
+ ...(hasSettingsOperations ? { settings: workflow.settings } : {}),
457
+ ...(nodeGroupsNeedPersisting ? { nodeGroups: workflow.nodeGroups } : {}),
458
+ meta: hasNonTagOperations
459
+ ? {
460
+ ...(existingMeta ?? {}),
461
+ aiBuilderAssisted: true,
462
+ builderVariant: 'mcp',
443
463
  }
444
- const setsErrorWorkflow = strictOperations.some((op) => op.type === 'setWorkflowSettings' && op.settings.errorWorkflow !== undefined);
445
- if (setsErrorWorkflow) {
446
- await assertErrorWorkflowIsUsable({
447
- errorWorkflowId: result.workflow.settings?.errorWorkflow,
448
- parentWorkflowId: workflowId,
449
- user,
450
- workflowFinderService,
451
- workflowPublishedDataService,
452
- useWorkflowPublicationService: globalConfig.workflows.useWorkflowPublicationService,
453
- nodeTypes,
454
- subworkflowPolicyChecker,
455
- errorTriggerType: globalConfig.nodes.errorTriggerType,
464
+ : (existingMeta ?? {}),
465
+ });
466
+ return workflowUpdateData;
467
+ }
468
+ function buildUpdateTelemetryPayload({ userId, workflowId, operations, sanitizedSkillsUsed, versionName, versionDescription, }) {
469
+ return {
470
+ user_id: userId,
471
+ tool_name: constants_1.MCP_UPDATE_WORKFLOW_TOOL.toolName,
472
+ parameters: {
473
+ workflowId,
474
+ ...(sanitizedSkillsUsed !== undefined ? { skillsUsed: sanitizedSkillsUsed } : {}),
475
+ opCount: operations.length,
476
+ opTypes: operations.map((op) => op.type),
477
+ hasVersionName: !!versionName,
478
+ hasVersionDescription: !!versionDescription,
479
+ },
480
+ };
481
+ }
482
+ async function autoAssignCredentialsForAddedNodes({ workflowUpdateData, addedNodeNames, projectId, }, { user, nodeTypes, credentialsService, aiGatewayService, }) {
483
+ if (addedNodeNames.length === 0) {
484
+ return { assignments: [], skippedHttpNodes: [], outcomes: [] };
485
+ }
486
+ const addedNodeSet = new Set(addedNodeNames);
487
+ const addedNodes = workflowUpdateData.nodes.filter((n) => addedNodeSet.has(n.name));
488
+ return await (0, credentials_auto_assign_1.autoPopulateNodeCredentials)({ ...workflowUpdateData, nodes: addedNodes }, user, nodeTypes, credentialsService, projectId, aiGatewayService);
489
+ }
490
+ async function collectValidationWarnings(updated, existing, nodeTypes) {
491
+ const { ParseValidateHandler, getWarningKey } = await import('@n8n/ai-workflow-builder');
492
+ const validator = new ParseValidateHandler({
493
+ generatePinData: false,
494
+ nodeTypesProvider: nodeTypes,
495
+ });
496
+ const validate = (workflow) => validator.validateJSON({
497
+ name: workflow.name,
498
+ nodes: workflow.nodes,
499
+ connections: workflow.connections,
500
+ });
501
+ const postUpdateWarnings = validate(updated);
502
+ if (postUpdateWarnings.length === 0) {
503
+ return postUpdateWarnings;
504
+ }
505
+ let preUpdateWarnings = [];
506
+ try {
507
+ preUpdateWarnings = validate(existing);
508
+ }
509
+ catch {
510
+ }
511
+ const preUpdateKeys = new Set(preUpdateWarnings.map(getWarningKey));
512
+ return postUpdateWarnings.map((warning) => preUpdateKeys.has(getWarningKey(warning))
513
+ ? { ...warning, message: `[pre-existing] ${warning.message}`, preExisting: true }
514
+ : warning);
515
+ }
516
+ async function resolveTagIds(tagNames, user, tagService) {
517
+ if (tagNames === undefined) {
518
+ return undefined;
519
+ }
520
+ const uniqueTagNames = dedupeNamesPreservingCase(tagNames);
521
+ if ((0, permissions_1.hasGlobalScope)(user, 'tag:create')) {
522
+ const resolvedTags = await tagService.findOrCreateByNames(uniqueTagNames);
523
+ return resolvedTags.map((t) => t.id);
524
+ }
525
+ const resolvedTags = await tagService.getByNames(uniqueTagNames);
526
+ const resolvedNames = new Set(resolvedTags.map((t) => t.name));
527
+ const missing = uniqueTagNames.filter((name) => !resolvedNames.has(name));
528
+ if (missing.length > 0) {
529
+ throw new Error(`Cannot apply the following tags because they don't exist and your account does not have permission to create them: ${missing.join(', ')}`);
530
+ }
531
+ return resolvedTags.map((t) => t.id);
532
+ }
533
+ const createUpdateWorkflowTool = (user, workflowFinderService, workflowService, urlService, telemetry, nodeTypes, credentialsService, sharedWorkflowRepository, collaborationService, dataTableOps, tagService, globalConfig, subworkflowPolicyChecker, workflowPublishedDataService, aiGatewayService, options = {}) => {
534
+ const canvasGroupsEnabled = options.canvasGroupsEnabled === true;
535
+ const settingsGuardDependencies = {
536
+ user,
537
+ nodeTypes,
538
+ globalConfig,
539
+ workflowFinderService,
540
+ workflowPublishedDataService,
541
+ subworkflowPolicyChecker,
542
+ };
543
+ return {
544
+ name: constants_1.MCP_UPDATE_WORKFLOW_TOOL.toolName,
545
+ config: {
546
+ description: buildToolDescription(canvasGroupsEnabled),
547
+ inputSchema: buildInputSchema(canvasGroupsEnabled),
548
+ outputSchema,
549
+ annotations: {
550
+ title: constants_1.MCP_UPDATE_WORKFLOW_TOOL.displayTitle,
551
+ readOnlyHint: false,
552
+ destructiveHint: true,
553
+ idempotentHint: false,
554
+ openWorldHint: false,
555
+ },
556
+ },
557
+ handler: async ({ workflowId, skillsUsed, operations, versionName, versionDescription, }) => {
558
+ const telemetryPayload = buildUpdateTelemetryPayload({
559
+ userId: user.id,
560
+ workflowId,
561
+ operations,
562
+ sanitizedSkillsUsed: (0, skills_used_1.sanitizeSkillsUsed)(skillsUsed),
563
+ versionName,
564
+ versionDescription,
565
+ });
566
+ try {
567
+ const strictOperations = parseStrictOperations(operations);
568
+ const hasTagOperations = strictOperations.some(isTagOperation);
569
+ const hasNonTagOperations = strictOperations.some((op) => !isTagOperation(op));
570
+ const hasSettingsOperations = strictOperations.some(isSettingsOperation);
571
+ assertOperationsSupported(strictOperations, {
572
+ canvasGroupsEnabled,
573
+ tagsDisabled: globalConfig.tags.disabled,
456
574
  });
457
- }
458
- const setsCallerConfig = strictOperations.some((op) => op.type === 'setWorkflowSettings' &&
459
- (op.settings.callerPolicy !== undefined || op.settings.callerIds !== undefined));
460
- if (setsCallerConfig) {
461
- assertCallerPolicyConsistent(result.workflow.settings);
462
- }
463
- const setsExecutionTimeout = strictOperations.some((op) => op.type === 'setWorkflowSettings' && op.settings.executionTimeout !== undefined);
464
- if (setsExecutionTimeout) {
465
- assertExecutionTimeoutWithinMax(result.workflow.settings?.executionTimeout, globalConfig.executions.maxTimeout);
466
- }
467
- const hasNonTagOperations = strictOperations.some((op) => op.type !== 'addTags' && op.type !== 'removeTags');
468
- const hasSettingsOperations = strictOperations.some((op) => op.type === 'setWorkflowSettings');
469
- if (hasSettingsOperations &&
470
- existingWorkflow.activeVersionId &&
471
- !(0, permissions_1.hasGlobalScope)(user, 'workflow:publish')) {
472
- const canPublish = await workflowFinderService.findWorkflowHeadForUser(workflowId, user, [
473
- 'workflow:publish',
474
- ]);
475
- if (!canPublish) {
476
- throw new Error('Changing settings on a published workflow reactivates it, which requires publish permission. Your account can edit but not publish this workflow. Ask the owner for publish access, or unpublish the workflow first.');
575
+ const existingWorkflow = await (0, workflow_validation_utils_1.getMcpWorkflow)(workflowId, user, ['workflow:update'], workflowFinderService, { includeTags: hasTagOperations });
576
+ await collaborationService.ensureWorkflowEditable(existingWorkflow.id);
577
+ const result = (0, workflow_operations_1.applyOperations)((0, workflow_operations_1.toWorkflowSlice)(existingWorkflow, { includeTags: hasTagOperations }), strictOperations, { canvasGroupsEnabled });
578
+ if (!result.success) {
579
+ throw new Error(result.error);
477
580
  }
478
- }
479
- const workflowUpdateData = new db_1.WorkflowEntity();
480
- Object.assign(workflowUpdateData, {
481
- name: result.workflow.name,
482
- ...(result.workflow.description !== undefined
483
- ? { description: result.workflow.description }
484
- : {}),
485
- nodes: result.workflow.nodes,
486
- connections: result.workflow.connections,
487
- ...(hasSettingsOperations ? { settings: result.workflow.settings } : {}),
488
- ...(nodeGroupsNeedPersisting ? { nodeGroups: result.workflow.nodeGroups } : {}),
489
- meta: hasNonTagOperations
490
- ? {
491
- ...(existingWorkflow.meta ?? {}),
492
- aiBuilderAssisted: true,
493
- builderVariant: 'mcp',
494
- }
495
- : (existingWorkflow.meta ?? {}),
496
- });
497
- (0, workflow_helpers_1.resolveNodeWebhookIds)(workflowUpdateData, nodeTypes);
498
- let credentialAssignments = [];
499
- let skippedHttpNodes = [];
500
- let autoAssignOutcomes = [];
501
- if (result.addedNodeNames.length > 0) {
502
- const addedNodeSet = new Set(result.addedNodeNames);
503
- const addedNodes = workflowUpdateData.nodes.filter((n) => addedNodeSet.has(n.name));
504
- const autoAssign = await (0, credentials_auto_assign_1.autoPopulateNodeCredentials)({ ...workflowUpdateData, nodes: addedNodes }, user, nodeTypes, credentialsService, workflowProjectId, aiGatewayService);
505
- credentialAssignments = autoAssign.assignments;
506
- skippedHttpNodes = autoAssign.skippedHttpNodes;
507
- autoAssignOutcomes = autoAssign.outcomes;
508
- }
509
- const { ParseValidateHandler, getWarningKey } = await import('@n8n/ai-workflow-builder');
510
- const validator = new ParseValidateHandler({
511
- generatePinData: false,
512
- nodeTypesProvider: nodeTypes,
513
- });
514
- const postUpdateWarnings = validator.validateJSON({
515
- name: workflowUpdateData.name,
516
- nodes: workflowUpdateData.nodes,
517
- connections: workflowUpdateData.connections,
518
- });
519
- let validationWarnings = postUpdateWarnings;
520
- if (postUpdateWarnings.length > 0) {
521
- let preUpdateWarnings = [];
522
- try {
523
- preUpdateWarnings = validator.validateJSON({
524
- name: existingWorkflow.name,
525
- nodes: existingWorkflow.nodes,
526
- connections: existingWorkflow.connections,
527
- });
581
+ const { skippedOperations, removedGroups, nodeGroupsNeedPersisting } = resolveNodeGroupViolations(result, canvasGroupsEnabled, nodeTypes);
582
+ const credentialCheck = await (0, credential_validation_1.validateCredentialReferences)(strictOperations, existingWorkflow, user, credentialsService, nodeTypes, { workflowId: existingWorkflow.id });
583
+ if (!credentialCheck.ok) {
584
+ throw new Error(credentialCheck.error);
528
585
  }
529
- catch { }
530
- const preUpdateKeys = new Set(preUpdateWarnings.map(getWarningKey));
531
- validationWarnings = postUpdateWarnings.map((warning) => preUpdateKeys.has(getWarningKey(warning))
532
- ? { ...warning, message: `[pre-existing] ${warning.message}`, preExisting: true }
533
- : warning);
534
- }
535
- let tagIds;
536
- if (result.tagNames !== undefined) {
537
- const uniqueTagNames = dedupeNamesPreservingCase(result.tagNames);
538
- if ((0, permissions_1.hasGlobalScope)(user, 'tag:create')) {
539
- const resolvedTags = await tagService.findOrCreateByNames(uniqueTagNames);
540
- tagIds = resolvedTags.map((t) => t.id);
586
+ const invalidToolSourceResponse = (0, connection_structure_check_1.buildInvalidAiToolSourceErrorResponse)({ nodes: result.workflow.nodes, connections: result.workflow.connections }, nodeTypes, (errorMessage) => ({ error: errorMessage }), telemetryPayload, telemetry);
587
+ if (invalidToolSourceResponse) {
588
+ return invalidToolSourceResponse;
541
589
  }
542
- else {
543
- const resolvedTags = await tagService.getByNames(uniqueTagNames);
544
- const resolvedNames = new Set(resolvedTags.map((t) => t.name));
545
- const missing = uniqueTagNames.filter((name) => !resolvedNames.has(name));
546
- if (missing.length > 0) {
547
- throw new Error(`Cannot apply the following tags because they don't exist and your account does not have permission to create them: ${missing.join(', ')}`);
548
- }
549
- tagIds = resolvedTags.map((t) => t.id);
590
+ const { projectId: workflowProjectId } = await sharedWorkflowRepository.findOneOrFail({
591
+ where: { workflowId, role: 'workflow:owner' },
592
+ select: ['projectId'],
593
+ });
594
+ const dataTableCheck = await (0, data_table_validation_1.validateDataTableReferencesForUpdate)(result.workflow.nodes, collectTouchedNodes(strictOperations), workflowProjectId, dataTableOps);
595
+ if (!dataTableCheck.ok) {
596
+ throw new Error(dataTableCheck.error);
550
597
  }
551
- }
552
- const versionMetadata = (0, version_metadata_1.resolveVersionMetadata)({ versionName, versionDescription }, (0, version_metadata_1.buildUpdateVersionMetadata)({ nodes: existingWorkflow.nodes, connections: existingWorkflow.connections }, { nodes: workflowUpdateData.nodes, connections: workflowUpdateData.connections }));
553
- const updatedWorkflow = await workflowService.update(user, workflowUpdateData, workflowId, {
554
- aiBuilderAssisted: hasNonTagOperations,
555
- source: 'n8n-mcp',
556
- versionName: versionMetadata.name,
557
- versionDescription: versionMetadata.description,
558
- ...(tagIds !== undefined ? { tagIds } : {}),
559
- });
560
- if (autoAssignOutcomes.length > 0) {
561
- const nodeTypesByName = new Map(updatedWorkflow.nodes.map((n) => [n.name, n.type]));
562
- (0, credentials_auto_assign_1.trackAutoassignOutcomes)(telemetry, user.id, 'update_workflow', autoAssignOutcomes, nodeTypesByName, workflowId);
563
- }
564
- void collaborationService.broadcastWorkflowUpdate(workflowId, user.id).catch(() => { });
565
- const baseUrl = urlService.getInstanceBaseUrl();
566
- const workflowUrl = `${baseUrl}/workflow/${updatedWorkflow.id}`;
567
- telemetryPayload.results = {
568
- success: true,
569
- data: {
598
+ await assertWorkflowSettingsValid({ strictOperations, settings: result.workflow.settings, workflowId }, settingsGuardDependencies);
599
+ await assertPublishAllowedForSettingsChange({
600
+ hasSettingsOperations,
601
+ activeVersionId: existingWorkflow.activeVersionId,
602
+ workflowId,
603
+ }, settingsGuardDependencies);
604
+ const workflowUpdateData = buildWorkflowUpdateEntity({
605
+ workflow: result.workflow,
606
+ existingMeta: existingWorkflow.meta,
607
+ hasSettingsOperations,
608
+ hasNonTagOperations,
609
+ nodeGroupsNeedPersisting,
610
+ });
611
+ (0, workflow_helpers_1.resolveNodeWebhookIds)(workflowUpdateData, nodeTypes);
612
+ const { assignments: credentialAssignments, skippedHttpNodes, outcomes: autoAssignOutcomes, } = await autoAssignCredentialsForAddedNodes({
613
+ workflowUpdateData,
614
+ addedNodeNames: result.addedNodeNames,
615
+ projectId: workflowProjectId,
616
+ }, { user, nodeTypes, credentialsService, aiGatewayService });
617
+ const validationWarnings = await collectValidationWarnings(workflowUpdateData, existingWorkflow, nodeTypes);
618
+ const tagIds = await resolveTagIds(result.tagNames, user, tagService);
619
+ const versionMetadata = (0, version_metadata_1.resolveVersionMetadata)({ versionName, versionDescription }, (0, version_metadata_1.buildUpdateVersionMetadata)({ nodes: existingWorkflow.nodes, connections: existingWorkflow.connections }, { nodes: workflowUpdateData.nodes, connections: workflowUpdateData.connections }));
620
+ const updatedWorkflow = await workflowService.update(user, workflowUpdateData, workflowId, {
621
+ aiBuilderAssisted: hasNonTagOperations,
622
+ source: 'n8n-mcp',
623
+ versionName: versionMetadata.name,
624
+ versionDescription: versionMetadata.description,
625
+ ...(tagIds !== undefined ? { tagIds } : {}),
626
+ });
627
+ if (autoAssignOutcomes.length > 0) {
628
+ const nodeTypesByName = new Map(updatedWorkflow.nodes.map((n) => [n.name, n.type]));
629
+ (0, credentials_auto_assign_1.trackAutoassignOutcomes)(telemetry, user.id, 'update_workflow', autoAssignOutcomes, nodeTypesByName, workflowId);
630
+ }
631
+ void collaborationService.broadcastWorkflowUpdate(workflowId, user.id).catch(() => { });
632
+ const baseUrl = urlService.getInstanceBaseUrl();
633
+ const workflowUrl = `${baseUrl}/workflow/${updatedWorkflow.id}`;
634
+ telemetryPayload.results = {
635
+ success: true,
636
+ data: {
637
+ workflowId: updatedWorkflow.id,
638
+ nodeCount: updatedWorkflow.nodes.length,
639
+ },
640
+ };
641
+ telemetry.track(mcp_constants_1.USER_CALLED_MCP_TOOL_EVENT, telemetryPayload);
642
+ const notAppliedCount = countOperationsWithNoEffect(skippedOperations, result.groupOperations);
643
+ const output = {
570
644
  workflowId: updatedWorkflow.id,
645
+ name: updatedWorkflow.name,
571
646
  nodeCount: updatedWorkflow.nodes.length,
572
- },
573
- };
574
- telemetry.track(mcp_constants_1.USER_CALLED_MCP_TOOL_EVENT, telemetryPayload);
575
- const notAppliedCount = countOperationsWithNoEffect(skippedOperations, result.groupOperations);
576
- const output = {
577
- workflowId: updatedWorkflow.id,
578
- name: updatedWorkflow.name,
579
- nodeCount: updatedWorkflow.nodes.length,
580
- url: workflowUrl,
581
- appliedOperations: strictOperations.length - notAppliedCount,
582
- autoAssignedCredentials: credentialAssignments,
583
- validationWarnings,
584
- note: skippedHttpNodes.length
585
- ? `HTTP Request nodes (${skippedHttpNodes.join(', ')}) were skipped during credential auto-assignment. Their credentials must be configured manually.`
586
- : undefined,
587
- skippedOperations: skippedOperations.length > 0 ? skippedOperations : undefined,
588
- removedGroups: removedGroups.length > 0 ? removedGroups : undefined,
589
- settings: hasSettingsOperations ? (updatedWorkflow.settings ?? {}) : undefined,
590
- };
591
- return {
592
- content: [{ type: 'text', text: JSON.stringify(output, null, 2) }],
593
- structuredContent: output,
594
- };
595
- }
596
- catch (error) {
597
- const errorMessage = error instanceof Error ? error.message : String(error);
598
- telemetryPayload.results = {
599
- success: false,
600
- error: errorMessage,
601
- };
602
- telemetry.track(mcp_constants_1.USER_CALLED_MCP_TOOL_EVENT, telemetryPayload);
603
- const output = { error: errorMessage };
604
- return {
605
- content: [{ type: 'text', text: JSON.stringify(output, null, 2) }],
606
- structuredContent: output,
607
- isError: true,
608
- };
609
- }
610
- },
611
- });
647
+ url: workflowUrl,
648
+ appliedOperations: strictOperations.length - notAppliedCount,
649
+ autoAssignedCredentials: credentialAssignments,
650
+ validationWarnings,
651
+ note: skippedHttpNodes.length
652
+ ? `HTTP Request nodes (${skippedHttpNodes.join(', ')}) were skipped during credential auto-assignment. Their credentials must be configured manually.`
653
+ : undefined,
654
+ skippedOperations: skippedOperations.length > 0 ? skippedOperations : undefined,
655
+ removedGroups: removedGroups.length > 0 ? removedGroups : undefined,
656
+ settings: hasSettingsOperations
657
+ ? (updatedWorkflow.settings ?? {})
658
+ : undefined,
659
+ };
660
+ return {
661
+ content: [{ type: 'text', text: JSON.stringify(output, null, 2) }],
662
+ structuredContent: output,
663
+ };
664
+ }
665
+ catch (error) {
666
+ const errorMessage = error instanceof Error ? error.message : String(error);
667
+ telemetryPayload.results = {
668
+ success: false,
669
+ error: errorMessage,
670
+ };
671
+ telemetry.track(mcp_constants_1.USER_CALLED_MCP_TOOL_EVENT, telemetryPayload);
672
+ const output = { error: errorMessage };
673
+ return {
674
+ content: [{ type: 'text', text: JSON.stringify(output, null, 2) }],
675
+ structuredContent: output,
676
+ isError: true,
677
+ };
678
+ }
679
+ },
680
+ };
681
+ };
612
682
  exports.createUpdateWorkflowTool = createUpdateWorkflowTool;
613
683
  //# sourceMappingURL=update-workflow.tool.js.map