n8n 2.27.4 → 2.28.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (638) hide show
  1. package/dist/active-workflow-manager.js +4 -1
  2. package/dist/active-workflow-manager.js.map +1 -1
  3. package/dist/agent-library-bundle.js +7 -3
  4. package/dist/build.tsbuildinfo +1 -1
  5. package/dist/commands/audit.js +6 -0
  6. package/dist/commands/audit.js.map +1 -1
  7. package/dist/commands/base-command.d.ts +1 -0
  8. package/dist/commands/base-command.js +36 -2
  9. package/dist/commands/base-command.js.map +1 -1
  10. package/dist/commands/start.js +18 -9
  11. package/dist/commands/start.js.map +1 -1
  12. package/dist/commands/worker.js +2 -0
  13. package/dist/commands/worker.js.map +1 -1
  14. package/dist/constants.d.ts +1 -0
  15. package/dist/constants.js +5 -1
  16. package/dist/constants.js.map +1 -1
  17. package/dist/controllers/api-keys.controller.d.ts +17 -0
  18. package/dist/controllers/api-keys.controller.js +19 -0
  19. package/dist/controllers/api-keys.controller.js.map +1 -1
  20. package/dist/controllers/e2e.controller.js +1 -0
  21. package/dist/controllers/e2e.controller.js.map +1 -1
  22. package/dist/controllers/telemetry.controller.d.ts +3 -1
  23. package/dist/controllers/telemetry.controller.js +17 -7
  24. package/dist/controllers/telemetry.controller.js.map +1 -1
  25. package/dist/controllers/users.controller.d.ts +1 -1
  26. package/dist/credentials/credentials.service.d.ts +5 -0
  27. package/dist/credentials/credentials.service.js +17 -3
  28. package/dist/credentials/credentials.service.js.map +1 -1
  29. package/dist/evaluation.ee/evaluation-config.controller.d.ts +7 -1
  30. package/dist/evaluation.ee/evaluation-config.controller.js +30 -1
  31. package/dist/evaluation.ee/evaluation-config.controller.js.map +1 -1
  32. package/dist/evaluation.ee/evaluation-dataset.service.d.ts +24 -0
  33. package/dist/evaluation.ee/evaluation-dataset.service.js +185 -0
  34. package/dist/evaluation.ee/evaluation-dataset.service.js.map +1 -0
  35. package/dist/evaluation.ee/test-runner/test-runner.service.ee.js +6 -6
  36. package/dist/evaluation.ee/test-runner/test-runner.service.ee.js.map +1 -1
  37. package/dist/evaluation.ee/test-runner/workflow-compiler.service.d.ts +2 -0
  38. package/dist/evaluation.ee/test-runner/workflow-compiler.service.js +27 -0
  39. package/dist/evaluation.ee/test-runner/workflow-compiler.service.js.map +1 -1
  40. package/dist/eventbus/event-message-classes/index.d.ts +2 -2
  41. package/dist/eventbus/event-message-classes/index.js +2 -0
  42. package/dist/eventbus/event-message-classes/index.js.map +1 -1
  43. package/dist/events/event.service.d.ts +2 -1
  44. package/dist/events/event.service.js.map +1 -1
  45. package/dist/events/maps/instance-ai.event-map.d.ts +15 -0
  46. package/dist/events/maps/instance-ai.event-map.js +3 -0
  47. package/dist/events/maps/instance-ai.event-map.js.map +1 -0
  48. package/dist/events/maps/relay.event-map.d.ts +8 -1
  49. package/dist/events/relays/log-streaming.event-relay.d.ts +2 -0
  50. package/dist/events/relays/log-streaming.event-relay.js +26 -0
  51. package/dist/events/relays/log-streaming.event-relay.js.map +1 -1
  52. package/dist/events/relays/telemetry.event-relay.d.ts +1 -0
  53. package/dist/events/relays/telemetry.event-relay.js +11 -0
  54. package/dist/events/relays/telemetry.event-relay.js.map +1 -1
  55. package/dist/execution-lifecycle/execution-lifecycle-hooks.js +1 -0
  56. package/dist/execution-lifecycle/execution-lifecycle-hooks.js.map +1 -1
  57. package/dist/execution-lifecycle/shared/shared-hook-functions.d.ts +2 -1
  58. package/dist/execution-lifecycle/shared/shared-hook-functions.js +8 -3
  59. package/dist/execution-lifecycle/shared/shared-hook-functions.js.map +1 -1
  60. package/dist/executions/execution-data/azure-store.ee.d.ts +15 -0
  61. package/dist/executions/execution-data/azure-store.ee.js +116 -0
  62. package/dist/executions/execution-data/azure-store.ee.js.map +1 -0
  63. package/dist/executions/execution-data/db-store.d.ts +7 -0
  64. package/dist/executions/execution-data/db-store.js +21 -0
  65. package/dist/executions/execution-data/db-store.js.map +1 -1
  66. package/dist/executions/execution-data/types.d.ts +3 -0
  67. package/dist/executions/execution-persistence.d.ts +17 -3
  68. package/dist/executions/execution-persistence.js +121 -18
  69. package/dist/executions/execution-persistence.js.map +1 -1
  70. package/dist/executions/execution.service.d.ts +3 -1
  71. package/dist/executions/execution.service.js +10 -4
  72. package/dist/executions/execution.service.js.map +1 -1
  73. package/dist/executions/sum-binary-data-bytes.d.ts +2 -0
  74. package/dist/executions/sum-binary-data-bytes.js +46 -0
  75. package/dist/executions/sum-binary-data-bytes.js.map +1 -0
  76. package/dist/interfaces.d.ts +22 -0
  77. package/dist/license/license.service.d.ts +3 -1
  78. package/dist/license/license.service.js +36 -51
  79. package/dist/license/license.service.js.map +1 -1
  80. package/dist/metrics/prometheus/execution-data-metrics.service.js +2 -1
  81. package/dist/metrics/prometheus/execution-data-metrics.service.js.map +1 -1
  82. package/dist/metrics/prometheus/instance-ai-metrics.service.d.ts +12 -0
  83. package/dist/metrics/prometheus/instance-ai-metrics.service.js +101 -0
  84. package/dist/metrics/prometheus/instance-ai-metrics.service.js.map +1 -0
  85. package/dist/metrics/prometheus/instance-role-metrics.service.js +2 -2
  86. package/dist/metrics/prometheus/instance-role-metrics.service.js.map +1 -1
  87. package/dist/metrics/prometheus/prometheus.service.d.ts +4 -1
  88. package/dist/metrics/prometheus/prometheus.service.js +11 -2
  89. package/dist/metrics/prometheus/prometheus.service.js.map +1 -1
  90. package/dist/metrics/prometheus/webhook-and-form-metrics.service.d.ts +23 -0
  91. package/dist/metrics/prometheus/webhook-and-form-metrics.service.js +72 -0
  92. package/dist/metrics/prometheus/webhook-and-form-metrics.service.js.map +1 -0
  93. package/dist/metrics/prometheus/workflow-info-metrics.service.d.ts +12 -0
  94. package/dist/metrics/prometheus/workflow-info-metrics.service.js +66 -0
  95. package/dist/metrics/prometheus/workflow-info-metrics.service.js.map +1 -0
  96. package/dist/middlewares/list-query/dtos/workflow.filter.dto.d.ts +2 -0
  97. package/dist/middlewares/list-query/dtos/workflow.filter.dto.js +12 -0
  98. package/dist/middlewares/list-query/dtos/workflow.filter.dto.js.map +1 -1
  99. package/dist/modules/agents/agent-execution.service.d.ts +8 -1
  100. package/dist/modules/agents/agent-execution.service.js +26 -2
  101. package/dist/modules/agents/agent-execution.service.js.map +1 -1
  102. package/dist/modules/agents/agent-knowledge-commands.d.ts +27 -0
  103. package/dist/modules/agents/agent-knowledge-commands.js +415 -0
  104. package/dist/modules/agents/agent-knowledge-commands.js.map +1 -0
  105. package/dist/modules/agents/agent-knowledge-gate.d.ts +2 -0
  106. package/dist/modules/agents/agent-knowledge-gate.js +9 -0
  107. package/dist/modules/agents/agent-knowledge-gate.js.map +1 -0
  108. package/dist/modules/agents/agent-knowledge-retrieval.d.ts +184 -0
  109. package/dist/modules/agents/agent-knowledge-retrieval.js +172 -0
  110. package/dist/modules/agents/agent-knowledge-retrieval.js.map +1 -0
  111. package/dist/modules/agents/agent-knowledge-sandbox.service.d.ts +40 -0
  112. package/dist/modules/agents/agent-knowledge-sandbox.service.js +591 -0
  113. package/dist/modules/agents/agent-knowledge-sandbox.service.js.map +1 -0
  114. package/dist/modules/agents/agent-knowledge-storage.d.ts +21 -0
  115. package/dist/modules/agents/agent-knowledge-storage.js +89 -0
  116. package/dist/modules/agents/agent-knowledge-storage.js.map +1 -0
  117. package/dist/modules/agents/agent-knowledge.service.d.ts +25 -5
  118. package/dist/modules/agents/agent-knowledge.service.js +230 -7
  119. package/dist/modules/agents/agent-knowledge.service.js.map +1 -1
  120. package/dist/modules/agents/agent-runtime-reconstruction.service.d.ts +6 -2
  121. package/dist/modules/agents/agent-runtime-reconstruction.service.js +43 -10
  122. package/dist/modules/agents/agent-runtime-reconstruction.service.js.map +1 -1
  123. package/dist/modules/agents/agent-sandbox.controller.d.ts +18 -0
  124. package/dist/modules/agents/agent-sandbox.controller.js +71 -0
  125. package/dist/modules/agents/agent-sandbox.controller.js.map +1 -0
  126. package/dist/modules/agents/agent-telemetry.d.ts +5 -0
  127. package/dist/modules/agents/agent-telemetry.js +60 -0
  128. package/dist/modules/agents/agent-telemetry.js.map +1 -0
  129. package/dist/modules/agents/agents.controller.d.ts +4 -4
  130. package/dist/modules/agents/agents.controller.js +24 -23
  131. package/dist/modules/agents/agents.controller.js.map +1 -1
  132. package/dist/modules/agents/agents.module.d.ts +1 -1
  133. package/dist/modules/agents/agents.module.js +7 -1
  134. package/dist/modules/agents/agents.module.js.map +1 -1
  135. package/dist/modules/agents/agents.service.d.ts +5 -2
  136. package/dist/modules/agents/agents.service.js +68 -15
  137. package/dist/modules/agents/agents.service.js.map +1 -1
  138. package/dist/modules/agents/builder/agents-builder-prompts.d.ts +1 -1
  139. package/dist/modules/agents/builder/agents-builder-prompts.js +7 -0
  140. package/dist/modules/agents/builder/agents-builder-prompts.js.map +1 -1
  141. package/dist/modules/agents/builder/agents-builder-settings.service.d.ts +12 -6
  142. package/dist/modules/agents/builder/agents-builder-settings.service.js +29 -12
  143. package/dist/modules/agents/builder/agents-builder-settings.service.js.map +1 -1
  144. package/dist/modules/agents/builder/agents-builder-tools.service.d.ts +7 -1
  145. package/dist/modules/agents/builder/agents-builder-tools.service.js +105 -6
  146. package/dist/modules/agents/builder/agents-builder-tools.service.js.map +1 -1
  147. package/dist/modules/agents/builder/agents-builder.service.d.ts +7 -0
  148. package/dist/modules/agents/builder/agents-builder.service.js +24 -6
  149. package/dist/modules/agents/builder/agents-builder.service.js.map +1 -1
  150. package/dist/modules/agents/builder/builder-tool-names.d.ts +1 -0
  151. package/dist/modules/agents/builder/builder-tool-names.js +1 -0
  152. package/dist/modules/agents/builder/builder-tool-names.js.map +1 -1
  153. package/dist/modules/agents/builder/from-ai-node-parameters.d.ts +7 -0
  154. package/dist/modules/agents/builder/from-ai-node-parameters.js +43 -0
  155. package/dist/modules/agents/builder/from-ai-node-parameters.js.map +1 -0
  156. package/dist/modules/agents/builder/get-resource-locator-options.tool.d.ts +10 -0
  157. package/dist/modules/agents/builder/get-resource-locator-options.tool.js +148 -0
  158. package/dist/modules/agents/builder/get-resource-locator-options.tool.js.map +1 -0
  159. package/dist/modules/agents/builder/prompts/tools.prompt.d.ts +1 -1
  160. package/dist/modules/agents/builder/prompts/tools.prompt.js +11 -0
  161. package/dist/modules/agents/builder/prompts/tools.prompt.js.map +1 -1
  162. package/dist/modules/agents/builder/skills/index.js +2 -0
  163. package/dist/modules/agents/builder/skills/index.js.map +1 -1
  164. package/dist/modules/agents/builder/skills/resource-locators.skill.d.ts +2 -0
  165. package/dist/modules/agents/builder/skills/resource-locators.skill.js +107 -0
  166. package/dist/modules/agents/builder/skills/resource-locators.skill.js.map +1 -0
  167. package/dist/modules/agents/entities/agent-file.entity.d.ts +11 -0
  168. package/dist/modules/agents/entities/agent-file.entity.js +50 -0
  169. package/dist/modules/agents/entities/agent-file.entity.js.map +1 -0
  170. package/dist/modules/agents/execution-recorder.js +4 -7
  171. package/dist/modules/agents/execution-recorder.js.map +1 -1
  172. package/dist/modules/agents/integrations/agent-chat-bridge.d.ts +1 -1
  173. package/dist/modules/agents/integrations/agent-chat-bridge.js +7 -9
  174. package/dist/modules/agents/integrations/agent-chat-bridge.js.map +1 -1
  175. package/dist/modules/agents/integrations/agent-chat-integration.d.ts +7 -3
  176. package/dist/modules/agents/integrations/agent-chat-integration.js +5 -0
  177. package/dist/modules/agents/integrations/agent-chat-integration.js.map +1 -1
  178. package/dist/modules/agents/integrations/integration-action-executor.d.ts +704 -0
  179. package/dist/modules/agents/integrations/integration-action-executor.js +36 -22
  180. package/dist/modules/agents/integrations/integration-action-executor.js.map +1 -1
  181. package/dist/modules/agents/integrations/integration-context-query-executor.js +23 -4
  182. package/dist/modules/agents/integrations/integration-context-query-executor.js.map +1 -1
  183. package/dist/modules/agents/integrations/integration-helpers.d.ts +12 -1
  184. package/dist/modules/agents/integrations/integration-helpers.js +17 -8
  185. package/dist/modules/agents/integrations/integration-helpers.js.map +1 -1
  186. package/dist/modules/agents/integrations/integration-message-context.service.js +2 -4
  187. package/dist/modules/agents/integrations/integration-message-context.service.js.map +1 -1
  188. package/dist/modules/agents/integrations/integration-tools.d.ts +11 -3
  189. package/dist/modules/agents/integrations/integration-tools.js +19 -118
  190. package/dist/modules/agents/integrations/integration-tools.js.map +1 -1
  191. package/dist/modules/agents/integrations/platforms/linear-integration.d.ts +3 -1
  192. package/dist/modules/agents/integrations/platforms/linear-integration.js +22 -6
  193. package/dist/modules/agents/integrations/platforms/linear-integration.js.map +1 -1
  194. package/dist/modules/agents/integrations/platforms/linear-operations.js +19 -29
  195. package/dist/modules/agents/integrations/platforms/linear-operations.js.map +1 -1
  196. package/dist/modules/agents/integrations/platforms/n8n-chat-integration.d.ts +20 -0
  197. package/dist/modules/agents/integrations/platforms/n8n-chat-integration.js +99 -0
  198. package/dist/modules/agents/integrations/platforms/n8n-chat-integration.js.map +1 -0
  199. package/dist/modules/agents/integrations/platforms/slack-integration.d.ts +2 -1
  200. package/dist/modules/agents/integrations/platforms/slack-integration.js +5 -0
  201. package/dist/modules/agents/integrations/platforms/slack-integration.js.map +1 -1
  202. package/dist/modules/agents/integrations/platforms/slack-operations.js +3 -2
  203. package/dist/modules/agents/integrations/platforms/slack-operations.js.map +1 -1
  204. package/dist/modules/agents/integrations/platforms/telegram-integration.d.ts +11 -2
  205. package/dist/modules/agents/integrations/platforms/telegram-integration.js +43 -14
  206. package/dist/modules/agents/integrations/platforms/telegram-integration.js.map +1 -1
  207. package/dist/modules/agents/integrations/slack-app-setup.service.d.ts +3 -1
  208. package/dist/modules/agents/integrations/slack-app-setup.service.js +19 -11
  209. package/dist/modules/agents/integrations/slack-app-setup.service.js.map +1 -1
  210. package/dist/modules/agents/json-config/from-json-config.d.ts +2 -1
  211. package/dist/modules/agents/json-config/from-json-config.js +11 -1
  212. package/dist/modules/agents/json-config/from-json-config.js.map +1 -1
  213. package/dist/modules/agents/repositories/agent-file.repository.d.ts +8 -0
  214. package/dist/modules/agents/repositories/agent-file.repository.js +38 -0
  215. package/dist/modules/agents/repositories/agent-file.repository.js.map +1 -0
  216. package/dist/modules/agents/sub-agents/sub-agent-foreground-runner.js +5 -0
  217. package/dist/modules/agents/sub-agents/sub-agent-foreground-runner.js.map +1 -1
  218. package/dist/modules/agents/tools/knowledge/search-knowledge.tool.d.ts +90 -0
  219. package/dist/modules/agents/tools/knowledge/search-knowledge.tool.js +209 -0
  220. package/dist/modules/agents/tools/knowledge/search-knowledge.tool.js.map +1 -0
  221. package/dist/modules/agents/tools/workflow-tool-factory.js +6 -8
  222. package/dist/modules/agents/tools/workflow-tool-factory.js.map +1 -1
  223. package/dist/modules/agents/tracing/builder-telemetry.d.ts +6 -1
  224. package/dist/modules/agents/tracing/builder-telemetry.js +26 -5
  225. package/dist/modules/agents/tracing/builder-telemetry.js.map +1 -1
  226. package/dist/modules/agents/utils/agent-memory-scope.d.ts +1 -0
  227. package/dist/modules/agents/utils/agent-memory-scope.js +6 -1
  228. package/dist/modules/agents/utils/agent-memory-scope.js.map +1 -1
  229. package/dist/modules/agents/utils/execution-to-message-mapper.js +54 -5
  230. package/dist/modules/agents/utils/execution-to-message-mapper.js.map +1 -1
  231. package/dist/modules/agents/utils/messages-envelope.d.ts +7 -0
  232. package/dist/modules/agents/utils/messages-envelope.js +97 -0
  233. package/dist/modules/agents/utils/messages-envelope.js.map +1 -0
  234. package/dist/modules/community-packages/community-packages.service.d.ts +3 -1
  235. package/dist/modules/community-packages/community-packages.service.js +17 -9
  236. package/dist/modules/community-packages/community-packages.service.js.map +1 -1
  237. package/dist/modules/community-packages/npm-utils.js +13 -6
  238. package/dist/modules/community-packages/npm-utils.js.map +1 -1
  239. package/dist/modules/data-table/multer-upload-middleware.d.ts +8 -1
  240. package/dist/modules/data-table/multer-upload-middleware.js +79 -30
  241. package/dist/modules/data-table/multer-upload-middleware.js.map +1 -1
  242. package/dist/modules/dynamic-credentials.ee/context-establishment-hooks/n8n-oauth/index.d.ts +2 -0
  243. package/dist/modules/dynamic-credentials.ee/context-establishment-hooks/n8n-oauth/index.js +19 -0
  244. package/dist/modules/dynamic-credentials.ee/context-establishment-hooks/n8n-oauth/index.js.map +1 -0
  245. package/dist/modules/dynamic-credentials.ee/context-establishment-hooks/n8n-oauth/metadata.d.ts +20 -0
  246. package/dist/modules/dynamic-credentials.ee/context-establishment-hooks/n8n-oauth/metadata.js +12 -0
  247. package/dist/modules/dynamic-credentials.ee/context-establishment-hooks/n8n-oauth/metadata.js.map +1 -0
  248. package/dist/modules/dynamic-credentials.ee/context-establishment-hooks/n8n-oauth/n8n-oauth-extractor.d.ts +12 -0
  249. package/dist/modules/dynamic-credentials.ee/context-establishment-hooks/n8n-oauth/n8n-oauth-extractor.js +85 -0
  250. package/dist/modules/dynamic-credentials.ee/context-establishment-hooks/n8n-oauth/n8n-oauth-extractor.js.map +1 -0
  251. package/dist/modules/dynamic-credentials.ee/context-establishment-hooks/n8n-oauth/n8n-oauth-seeder.d.ts +10 -0
  252. package/dist/modules/dynamic-credentials.ee/context-establishment-hooks/n8n-oauth/n8n-oauth-seeder.js +78 -0
  253. package/dist/modules/dynamic-credentials.ee/context-establishment-hooks/n8n-oauth/n8n-oauth-seeder.js.map +1 -0
  254. package/dist/modules/dynamic-credentials.ee/credential-resolvers/identifiers/n8n-identifier.d.ts +3 -1
  255. package/dist/modules/dynamic-credentials.ee/credential-resolvers/identifiers/n8n-identifier.js +17 -2
  256. package/dist/modules/dynamic-credentials.ee/credential-resolvers/identifiers/n8n-identifier.js.map +1 -1
  257. package/dist/modules/dynamic-credentials.ee/credential-resolvers/identifiers/oauth2-introspection-identifier.d.ts +4 -2
  258. package/dist/modules/dynamic-credentials.ee/credential-resolvers/identifiers/oauth2-introspection-identifier.js +20 -40
  259. package/dist/modules/dynamic-credentials.ee/credential-resolvers/identifiers/oauth2-introspection-identifier.js.map +1 -1
  260. package/dist/modules/dynamic-credentials.ee/credential-resolvers/identifiers/oauth2-metadata-http-client.d.ts +21 -0
  261. package/dist/modules/dynamic-credentials.ee/credential-resolvers/identifiers/oauth2-metadata-http-client.js +77 -0
  262. package/dist/modules/dynamic-credentials.ee/credential-resolvers/identifiers/oauth2-metadata-http-client.js.map +1 -0
  263. package/dist/modules/dynamic-credentials.ee/credential-resolvers/identifiers/oauth2-userinfo-identifier.d.ts +3 -1
  264. package/dist/modules/dynamic-credentials.ee/credential-resolvers/identifiers/oauth2-userinfo-identifier.js +18 -39
  265. package/dist/modules/dynamic-credentials.ee/credential-resolvers/identifiers/oauth2-userinfo-identifier.js.map +1 -1
  266. package/dist/modules/dynamic-credentials.ee/dynamic-credentials.controller.d.ts +4 -2
  267. package/dist/modules/dynamic-credentials.ee/dynamic-credentials.controller.js +46 -2
  268. package/dist/modules/dynamic-credentials.ee/dynamic-credentials.controller.js.map +1 -1
  269. package/dist/modules/dynamic-credentials.ee/dynamic-credentials.module.js +3 -0
  270. package/dist/modules/dynamic-credentials.ee/dynamic-credentials.module.js.map +1 -1
  271. package/dist/modules/dynamic-credentials.ee/services/authorize-intent.service.d.ts +14 -0
  272. package/dist/modules/dynamic-credentials.ee/services/authorize-intent.service.js +39 -0
  273. package/dist/modules/dynamic-credentials.ee/services/authorize-intent.service.js.map +1 -0
  274. package/dist/modules/dynamic-credentials.ee/services/credential-check-proxy.service.d.ts +7 -3
  275. package/dist/modules/dynamic-credentials.ee/services/credential-check-proxy.service.js +23 -21
  276. package/dist/modules/dynamic-credentials.ee/services/credential-check-proxy.service.js.map +1 -1
  277. package/dist/modules/dynamic-credentials.ee/services/credential-resolver-workflow.service.d.ts +4 -0
  278. package/dist/modules/dynamic-credentials.ee/services/credential-resolver-workflow.service.js +111 -63
  279. package/dist/modules/dynamic-credentials.ee/services/credential-resolver-workflow.service.js.map +1 -1
  280. package/dist/modules/dynamic-credentials.ee/services/dynamic-credential-storage.service.js +0 -1
  281. package/dist/modules/dynamic-credentials.ee/services/dynamic-credential-storage.service.js.map +1 -1
  282. package/dist/modules/dynamic-credentials.ee/services/index.d.ts +1 -0
  283. package/dist/modules/dynamic-credentials.ee/services/index.js +1 -0
  284. package/dist/modules/dynamic-credentials.ee/services/index.js.map +1 -1
  285. package/dist/modules/external-secrets.ee/providers/aws-secrets-manager.d.ts +3 -1
  286. package/dist/modules/external-secrets.ee/providers/aws-secrets-manager.js +4 -1
  287. package/dist/modules/external-secrets.ee/providers/aws-secrets-manager.js.map +1 -1
  288. package/dist/modules/external-secrets.ee/providers/azure-key-vault/azure-key-vault.js.map +1 -1
  289. package/dist/modules/external-secrets.ee/providers/gcp-secrets-manager/gcp-secrets-manager.js.map +1 -1
  290. package/dist/modules/external-secrets.ee/providers/infisical.d.ts +4 -1
  291. package/dist/modules/external-secrets.ee/providers/infisical.js +45 -30
  292. package/dist/modules/external-secrets.ee/providers/infisical.js.map +1 -1
  293. package/dist/modules/external-secrets.ee/providers/one-password.js.map +1 -1
  294. package/dist/modules/external-secrets.ee/providers/vault.d.ts +5 -1
  295. package/dist/modules/external-secrets.ee/providers/vault.js +66 -61
  296. package/dist/modules/external-secrets.ee/providers/vault.js.map +1 -1
  297. package/dist/modules/insights/database/repositories/insights-by-period.repository.d.ts +2 -2
  298. package/dist/modules/insights/insights.service.d.ts +2 -2
  299. package/dist/modules/instance-ai/entities/index.d.ts +1 -0
  300. package/dist/modules/instance-ai/entities/index.js +3 -1
  301. package/dist/modules/instance-ai/entities/index.js.map +1 -1
  302. package/dist/modules/instance-ai/entities/instance-ai-thread-grant.entity.d.ts +9 -0
  303. package/dist/modules/instance-ai/entities/instance-ai-thread-grant.entity.js +45 -0
  304. package/dist/modules/instance-ai/entities/instance-ai-thread-grant.entity.js.map +1 -0
  305. package/dist/modules/instance-ai/eval/eval-mocked-credentials-helper.d.ts +3 -3
  306. package/dist/modules/instance-ai/eval/eval-mocked-credentials-helper.js +2 -2
  307. package/dist/modules/instance-ai/eval/eval-mocked-credentials-helper.js.map +1 -1
  308. package/dist/modules/instance-ai/eval/llm-wire-server.d.ts +2 -2
  309. package/dist/modules/instance-ai/eval/llm-wire-server.js +5 -5
  310. package/dist/modules/instance-ai/eval/llm-wire-server.js.map +1 -1
  311. package/dist/modules/instance-ai/eval/thread-credential-allowlist.service.d.ts +6 -0
  312. package/dist/modules/instance-ai/eval/thread-credential-allowlist.service.js +29 -0
  313. package/dist/modules/instance-ai/eval/thread-credential-allowlist.service.js.map +1 -0
  314. package/dist/modules/instance-ai/instance-ai-credit.service.d.ts +26 -0
  315. package/dist/modules/instance-ai/instance-ai-credit.service.js +210 -0
  316. package/dist/modules/instance-ai/instance-ai-credit.service.js.map +1 -0
  317. package/dist/modules/instance-ai/instance-ai-model.service.d.ts +20 -0
  318. package/dist/modules/instance-ai/instance-ai-model.service.js +135 -0
  319. package/dist/modules/instance-ai/instance-ai-model.service.js.map +1 -0
  320. package/dist/modules/instance-ai/instance-ai-run-probe.d.ts +5 -0
  321. package/dist/modules/instance-ai/instance-ai-run-probe.js +26 -0
  322. package/dist/modules/instance-ai/instance-ai-run-probe.js.map +1 -0
  323. package/dist/modules/instance-ai/instance-ai-settings.service.d.ts +2 -0
  324. package/dist/modules/instance-ai/instance-ai-settings.service.js +12 -1
  325. package/dist/modules/instance-ai/instance-ai-settings.service.js.map +1 -1
  326. package/dist/modules/instance-ai/instance-ai-temporary-workflow.service.d.ts +15 -0
  327. package/dist/modules/instance-ai/instance-ai-temporary-workflow.service.js +140 -0
  328. package/dist/modules/instance-ai/instance-ai-temporary-workflow.service.js.map +1 -0
  329. package/dist/modules/instance-ai/instance-ai.adapter.service.d.ts +4 -2
  330. package/dist/modules/instance-ai/instance-ai.adapter.service.js +70 -28
  331. package/dist/modules/instance-ai/instance-ai.adapter.service.js.map +1 -1
  332. package/dist/modules/instance-ai/instance-ai.controller.d.ts +20 -2
  333. package/dist/modules/instance-ai/instance-ai.controller.js +62 -4
  334. package/dist/modules/instance-ai/instance-ai.controller.js.map +1 -1
  335. package/dist/modules/instance-ai/instance-ai.module.d.ts +2 -1
  336. package/dist/modules/instance-ai/instance-ai.module.js +3 -0
  337. package/dist/modules/instance-ai/instance-ai.module.js.map +1 -1
  338. package/dist/modules/instance-ai/instance-ai.service.d.ts +42 -22
  339. package/dist/modules/instance-ai/instance-ai.service.js +411 -380
  340. package/dist/modules/instance-ai/instance-ai.service.js.map +1 -1
  341. package/dist/modules/instance-ai/internal-messages.d.ts +4 -0
  342. package/dist/modules/instance-ai/internal-messages.js +24 -3
  343. package/dist/modules/instance-ai/internal-messages.js.map +1 -1
  344. package/dist/modules/instance-ai/mcp/instance-ai-mcp-connection.controller.d.ts +1 -1
  345. package/dist/modules/instance-ai/mcp/instance-ai-mcp-connection.controller.js +2 -6
  346. package/dist/modules/instance-ai/mcp/instance-ai-mcp-connection.controller.js.map +1 -1
  347. package/dist/modules/instance-ai/mcp/instance-ai-mcp-registry.service.d.ts +3 -0
  348. package/dist/modules/instance-ai/mcp/instance-ai-mcp-registry.service.js +44 -0
  349. package/dist/modules/instance-ai/mcp/instance-ai-mcp-registry.service.js.map +1 -1
  350. package/dist/modules/instance-ai/message-parser.js +2 -0
  351. package/dist/modules/instance-ai/message-parser.js.map +1 -1
  352. package/dist/modules/instance-ai/observability.d.ts +13 -0
  353. package/dist/modules/instance-ai/observability.js +23 -0
  354. package/dist/modules/instance-ai/observability.js.map +1 -0
  355. package/dist/modules/instance-ai/repositories/index.d.ts +1 -0
  356. package/dist/modules/instance-ai/repositories/index.js +3 -1
  357. package/dist/modules/instance-ai/repositories/index.js.map +1 -1
  358. package/dist/modules/instance-ai/repositories/instance-ai-thread-grant.repository.d.ts +7 -0
  359. package/dist/modules/instance-ai/repositories/instance-ai-thread-grant.repository.js +40 -0
  360. package/dist/modules/instance-ai/repositories/instance-ai-thread-grant.repository.js.map +1 -0
  361. package/dist/modules/instance-ai/sandbox/instance-ai-sandbox.service.js +2 -1
  362. package/dist/modules/instance-ai/sandbox/instance-ai-sandbox.service.js.map +1 -1
  363. package/dist/modules/instance-ai/storage/typeorm-agent-memory.js +4 -6
  364. package/dist/modules/instance-ai/storage/typeorm-agent-memory.js.map +1 -1
  365. package/dist/modules/instance-ai/trigger-run-data.d.ts +8 -0
  366. package/dist/modules/instance-ai/trigger-run-data.js +28 -0
  367. package/dist/modules/instance-ai/trigger-run-data.js.map +1 -0
  368. package/dist/modules/instance-ai/web-research/fetch-and-extract.d.ts +2 -3
  369. package/dist/modules/instance-ai/web-research/fetch-and-extract.js +34 -44
  370. package/dist/modules/instance-ai/web-research/fetch-and-extract.js.map +1 -1
  371. package/dist/modules/log-streaming.ee/destinations/message-event-bus-destination-from-db.d.ts +2 -1
  372. package/dist/modules/log-streaming.ee/destinations/message-event-bus-destination-from-db.js +2 -2
  373. package/dist/modules/log-streaming.ee/destinations/message-event-bus-destination-from-db.js.map +1 -1
  374. package/dist/modules/log-streaming.ee/destinations/message-event-bus-destination-webhook.ee.d.ts +8 -8
  375. package/dist/modules/log-streaming.ee/destinations/message-event-bus-destination-webhook.ee.js +43 -60
  376. package/dist/modules/log-streaming.ee/destinations/message-event-bus-destination-webhook.ee.js.map +1 -1
  377. package/dist/modules/log-streaming.ee/log-streaming-destination.service.d.ts +3 -1
  378. package/dist/modules/log-streaming.ee/log-streaming-destination.service.js +6 -3
  379. package/dist/modules/log-streaming.ee/log-streaming-destination.service.js.map +1 -1
  380. package/dist/modules/log-streaming.ee/log-streaming.controller.d.ts +3 -1
  381. package/dist/modules/log-streaming.ee/log-streaming.controller.js +6 -3
  382. package/dist/modules/log-streaming.ee/log-streaming.controller.js.map +1 -1
  383. package/dist/modules/mcp/dto/update-allowed-redirect-uris.dto.d.ts +9 -0
  384. package/dist/modules/mcp/dto/update-allowed-redirect-uris.dto.js +35 -0
  385. package/dist/modules/mcp/dto/update-allowed-redirect-uris.dto.js.map +1 -0
  386. package/dist/modules/mcp/mcp-protected-resource.d.ts +4 -1
  387. package/dist/modules/mcp/mcp-protected-resource.js +9 -3
  388. package/dist/modules/mcp/mcp-protected-resource.js.map +1 -1
  389. package/dist/modules/mcp/mcp.service.d.ts +5 -2
  390. package/dist/modules/mcp/mcp.service.js +8 -3
  391. package/dist/modules/mcp/mcp.service.js.map +1 -1
  392. package/dist/modules/mcp/mcp.settings.controller.d.ts +7 -0
  393. package/dist/modules/mcp/mcp.settings.controller.js +24 -0
  394. package/dist/modules/mcp/mcp.settings.controller.js.map +1 -1
  395. package/dist/modules/mcp/mcp.settings.service.d.ts +2 -0
  396. package/dist/modules/mcp/mcp.settings.service.js +15 -0
  397. package/dist/modules/mcp/mcp.settings.service.js.map +1 -1
  398. package/dist/modules/mcp/mcp.typeguards.d.ts +0 -1
  399. package/dist/modules/mcp/mcp.typeguards.js +9 -12
  400. package/dist/modules/mcp/mcp.typeguards.js.map +1 -1
  401. package/dist/modules/mcp/mcp.utils.js +2 -1
  402. package/dist/modules/mcp/mcp.utils.js.map +1 -1
  403. package/dist/modules/mcp/tools/execute-workflow.tool.d.ts +10 -8
  404. package/dist/modules/mcp/tools/execute-workflow.tool.js +25 -13
  405. package/dist/modules/mcp/tools/execute-workflow.tool.js.map +1 -1
  406. package/dist/modules/mcp/tools/get-workflow-details.tool.js +2 -0
  407. package/dist/modules/mcp/tools/get-workflow-details.tool.js.map +1 -1
  408. package/dist/modules/mcp/tools/schemas.d.ts +128 -0
  409. package/dist/modules/mcp/tools/schemas.js +9 -0
  410. package/dist/modules/mcp/tools/schemas.js.map +1 -1
  411. package/dist/modules/mcp/tools/workflow-builder/create-workflow-from-code.tool.js +15 -4
  412. package/dist/modules/mcp/tools/workflow-builder/create-workflow-from-code.tool.js.map +1 -1
  413. package/dist/modules/mcp/tools/workflow-builder/credential-validation.d.ts +13 -2
  414. package/dist/modules/mcp/tools/workflow-builder/credential-validation.js +144 -23
  415. package/dist/modules/mcp/tools/workflow-builder/credential-validation.js.map +1 -1
  416. package/dist/modules/mcp/tools/workflow-builder/update-workflow.tool.js +23 -6
  417. package/dist/modules/mcp/tools/workflow-builder/update-workflow.tool.js.map +1 -1
  418. package/dist/modules/mcp/tools/workflow-builder/workflow-operations.d.ts +31 -1
  419. package/dist/modules/mcp/tools/workflow-builder/workflow-operations.js +22 -0
  420. package/dist/modules/mcp/tools/workflow-builder/workflow-operations.js.map +1 -1
  421. package/dist/modules/n8n-packages/engine/import-pipeline.js +40 -19
  422. package/dist/modules/n8n-packages/engine/import-pipeline.js.map +1 -1
  423. package/dist/modules/n8n-packages/entities/credential/credential-importer.d.ts +8 -4
  424. package/dist/modules/n8n-packages/entities/credential/credential-importer.js +40 -6
  425. package/dist/modules/n8n-packages/entities/credential/credential-importer.js.map +1 -1
  426. package/dist/modules/n8n-packages/entities/credential/credential-matcher.d.ts +7 -3
  427. package/dist/modules/n8n-packages/entities/credential/credential-matcher.js +30 -5
  428. package/dist/modules/n8n-packages/entities/credential/credential-matcher.js.map +1 -1
  429. package/dist/modules/n8n-packages/entities/credential/credential-missing-mode.d.ts +3 -0
  430. package/dist/modules/n8n-packages/entities/credential/credential-missing-mode.js +17 -0
  431. package/dist/modules/n8n-packages/entities/credential/credential-missing-mode.js.map +1 -1
  432. package/dist/modules/n8n-packages/entities/credential/credential.types.d.ts +10 -4
  433. package/dist/modules/n8n-packages/entities/credential/credential.types.js +2 -0
  434. package/dist/modules/n8n-packages/entities/credential/credential.types.js.map +1 -1
  435. package/dist/modules/n8n-packages/entities/credential/id-based-credential-matcher.d.ts +3 -4
  436. package/dist/modules/n8n-packages/entities/credential/id-based-credential-matcher.js +10 -11
  437. package/dist/modules/n8n-packages/entities/credential/id-based-credential-matcher.js.map +1 -1
  438. package/dist/modules/n8n-packages/entities/workflow/workflow-import.types.d.ts +6 -6
  439. package/dist/modules/n8n-packages/entities/workflow/workflow-importer.d.ts +3 -3
  440. package/dist/modules/n8n-packages/entities/workflow/workflow-importer.js +12 -10
  441. package/dist/modules/n8n-packages/entities/workflow/workflow-importer.js.map +1 -1
  442. package/dist/modules/n8n-packages/entities/workflow/workflow-publisher.d.ts +6 -2
  443. package/dist/modules/n8n-packages/entities/workflow/workflow-publisher.js +33 -11
  444. package/dist/modules/n8n-packages/entities/workflow/workflow-publisher.js.map +1 -1
  445. package/dist/modules/n8n-packages/entities/workflow/workflow-publishing-policy.types.d.ts +8 -0
  446. package/dist/modules/n8n-packages/n8n-packages.types.d.ts +23 -3
  447. package/dist/modules/n8n-packages/n8n-packages.types.js.map +1 -1
  448. package/dist/modules/oauth-jwe/oauth-jwe.schemas.d.ts +12 -12
  449. package/dist/modules/oauth-server/oauth-consent.controller.js +1 -0
  450. package/dist/modules/oauth-server/oauth-consent.controller.js.map +1 -1
  451. package/dist/modules/oauth-server/oauth-consent.service.d.ts +1 -0
  452. package/dist/modules/oauth-server/oauth-consent.service.js +2 -0
  453. package/dist/modules/oauth-server/oauth-consent.service.js.map +1 -1
  454. package/dist/modules/oauth-server/oauth-server.module.js +1 -1
  455. package/dist/modules/oauth-server/oauth-server.module.js.map +1 -1
  456. package/dist/modules/oauth-server/oauth-server.service.d.ts +2 -0
  457. package/dist/modules/oauth-server/oauth-server.service.js +48 -1
  458. package/dist/modules/oauth-server/oauth-server.service.js.map +1 -1
  459. package/dist/modules/oauth-server/oauth.controller.js +4 -1
  460. package/dist/modules/oauth-server/oauth.controller.js.map +1 -1
  461. package/dist/modules/otel/otel.service.d.ts +3 -1
  462. package/dist/modules/otel/otel.service.js +6 -3
  463. package/dist/modules/otel/otel.service.js.map +1 -1
  464. package/dist/modules/quick-connect/handlers/firecrawl.handler.d.ts +3 -0
  465. package/dist/modules/quick-connect/handlers/firecrawl.handler.js +20 -7
  466. package/dist/modules/quick-connect/handlers/firecrawl.handler.js.map +1 -1
  467. package/dist/modules/quick-connect/quick-connect.config.d.ts +17 -17
  468. package/dist/modules/quick-connect/quick-connect.module.d.ts +3 -3
  469. package/dist/modules/source-control.ee/source-control-import.service.ee.js +1 -1
  470. package/dist/modules/source-control.ee/source-control-import.service.ee.js.map +1 -1
  471. package/dist/modules/source-control.ee/source-control.controller.ee.d.ts +4 -4
  472. package/dist/modules/source-control.ee/source-control.service.ee.d.ts +2 -2
  473. package/dist/modules/sso-oidc/oidc.service.ee.d.ts +3 -1
  474. package/dist/modules/sso-oidc/oidc.service.ee.js +15 -25
  475. package/dist/modules/sso-oidc/oidc.service.ee.js.map +1 -1
  476. package/dist/modules/sso-saml/saml.service.ee.d.ts +3 -1
  477. package/dist/modules/sso-saml/saml.service.ee.js +15 -15
  478. package/dist/modules/sso-saml/saml.service.ee.js.map +1 -1
  479. package/dist/modules/token-exchange/services/jwks-resolver.d.ts +3 -1
  480. package/dist/modules/token-exchange/services/jwks-resolver.js +11 -3
  481. package/dist/modules/token-exchange/services/jwks-resolver.js.map +1 -1
  482. package/dist/oauth/oauth.service.d.ts +8 -3
  483. package/dist/oauth/oauth.service.js +106 -47
  484. package/dist/oauth/oauth.service.js.map +1 -1
  485. package/dist/oauth/types.d.ts +1 -1
  486. package/dist/oauth/types.js.map +1 -1
  487. package/dist/posthog/index.js +4 -3
  488. package/dist/posthog/index.js.map +1 -1
  489. package/dist/public-api/index.js +46 -3
  490. package/dist/public-api/index.js.map +1 -1
  491. package/dist/public-api/swagger-theme.css +14 -0
  492. package/dist/public-api/types.d.ts +2 -0
  493. package/dist/public-api/v1/handlers/credentials/credentials.handler.js +1 -1
  494. package/dist/public-api/v1/handlers/credentials/credentials.handler.js.map +1 -1
  495. package/dist/public-api/v1/handlers/data-tables/data-tables.handler.js +4 -3
  496. package/dist/public-api/v1/handlers/data-tables/data-tables.handler.js.map +1 -1
  497. package/dist/public-api/v1/handlers/discover/discover.service.js +9 -11
  498. package/dist/public-api/v1/handlers/discover/discover.service.js.map +1 -1
  499. package/dist/public-api/v1/handlers/executions/executions.handler.js +8 -4
  500. package/dist/public-api/v1/handlers/executions/executions.handler.js.map +1 -1
  501. package/dist/public-api/v1/handlers/workflows/workflows.handler.js +3 -1
  502. package/dist/public-api/v1/handlers/workflows/workflows.handler.js.map +1 -1
  503. package/dist/public-api/v1/handlers/workflows/workflows.service.d.ts +1 -2
  504. package/dist/public-api/v1/handlers/workflows/workflows.service.js +3 -2
  505. package/dist/public-api/v1/handlers/workflows/workflows.service.js.map +1 -1
  506. package/dist/public-api/v1/openapi.yml +124 -2
  507. package/dist/response-helper.d.ts +2 -1
  508. package/dist/response-helper.js +2 -17
  509. package/dist/response-helper.js.map +1 -1
  510. package/dist/scaling/constants.d.ts +2 -2
  511. package/dist/scaling/constants.js +3 -0
  512. package/dist/scaling/constants.js.map +1 -1
  513. package/dist/scaling/execution-stop.service.d.ts +15 -0
  514. package/dist/scaling/execution-stop.service.js +59 -0
  515. package/dist/scaling/execution-stop.service.js.map +1 -0
  516. package/dist/scaling/job-processor.js +8 -2
  517. package/dist/scaling/job-processor.js.map +1 -1
  518. package/dist/scaling/multi-main-setup.ee.d.ts +1 -0
  519. package/dist/scaling/multi-main-setup.ee.js +6 -6
  520. package/dist/scaling/multi-main-setup.ee.js.map +1 -1
  521. package/dist/scaling/pubsub/pubsub.event-map.d.ts +4 -0
  522. package/dist/scaling/pubsub/pubsub.types.d.ts +3 -1
  523. package/dist/security-audit/risk-reporters/instance-risk-reporter.d.ts +3 -1
  524. package/dist/security-audit/risk-reporters/instance-risk-reporter.js +27 -20
  525. package/dist/security-audit/risk-reporters/instance-risk-reporter.js.map +1 -1
  526. package/dist/services/ai-gateway.service.d.ts +5 -1
  527. package/dist/services/ai-gateway.service.js +53 -32
  528. package/dist/services/ai-gateway.service.js.map +1 -1
  529. package/dist/services/ai-workflow-builder.service.d.ts +4 -3
  530. package/dist/services/ai-workflow-builder.service.js +9 -5
  531. package/dist/services/ai-workflow-builder.service.js.map +1 -1
  532. package/dist/services/credentials-tester.service.js +16 -15
  533. package/dist/services/credentials-tester.service.js.map +1 -1
  534. package/dist/services/dynamic-templates.service.d.ts +3 -1
  535. package/dist/services/dynamic-templates.service.js +13 -9
  536. package/dist/services/dynamic-templates.service.js.map +1 -1
  537. package/dist/services/frontend.service.d.ts +6 -1
  538. package/dist/services/frontend.service.js +39 -2
  539. package/dist/services/frontend.service.js.map +1 -1
  540. package/dist/services/node-resource-explorer.service.js +4 -22
  541. package/dist/services/node-resource-explorer.service.js.map +1 -1
  542. package/dist/services/project.service.ee.d.ts +3 -2
  543. package/dist/services/project.service.ee.js +14 -3
  544. package/dist/services/project.service.ee.js.map +1 -1
  545. package/dist/services/protected-resource.registry.d.ts +1 -0
  546. package/dist/services/protected-resource.registry.js.map +1 -1
  547. package/dist/services/public-api-key.service.d.ts +6 -2
  548. package/dist/services/public-api-key.service.js +56 -10
  549. package/dist/services/public-api-key.service.js.map +1 -1
  550. package/dist/services/role.service.d.ts +2 -2
  551. package/dist/services/role.service.js.map +1 -1
  552. package/dist/services/trigger-auth-identity-seeder-proxy.service.d.ts +10 -0
  553. package/dist/services/trigger-auth-identity-seeder-proxy.service.js +33 -0
  554. package/dist/services/trigger-auth-identity-seeder-proxy.service.js.map +1 -0
  555. package/dist/services/workflow-statistics.service.d.ts +3 -13
  556. package/dist/services/workflow-statistics.service.js +77 -64
  557. package/dist/services/workflow-statistics.service.js.map +1 -1
  558. package/dist/task-runners/task-broker/task-broker-server.js +2 -1
  559. package/dist/task-runners/task-broker/task-broker-server.js.map +1 -1
  560. package/dist/task-runners/task-runner-module.js +2 -0
  561. package/dist/task-runners/task-runner-module.js.map +1 -1
  562. package/dist/telemetry/index.d.ts +25 -2
  563. package/dist/telemetry/index.js +80 -12
  564. package/dist/telemetry/index.js.map +1 -1
  565. package/dist/utils/strapi-utils.d.ts +8 -4
  566. package/dist/utils/strapi-utils.js +25 -9
  567. package/dist/utils/strapi-utils.js.map +1 -1
  568. package/dist/webhooks/live-webhooks.js +1 -0
  569. package/dist/webhooks/live-webhooks.js.map +1 -1
  570. package/dist/webhooks/webhook-form-data.js +9 -1
  571. package/dist/webhooks/webhook-form-data.js.map +1 -1
  572. package/dist/webhooks/webhook-helpers.js +16 -0
  573. package/dist/webhooks/webhook-helpers.js.map +1 -1
  574. package/dist/webhooks/webhook-request-handler.js +35 -0
  575. package/dist/webhooks/webhook-request-handler.js.map +1 -1
  576. package/dist/workflow-execute-additional-data.js +15 -0
  577. package/dist/workflow-execute-additional-data.js.map +1 -1
  578. package/dist/workflow-helpers.d.ts +7 -2
  579. package/dist/workflow-helpers.js +50 -1
  580. package/dist/workflow-helpers.js.map +1 -1
  581. package/dist/workflows/publication/publication-result.d.ts +2 -0
  582. package/dist/workflows/publication/publication-status-reporter.d.ts +1 -0
  583. package/dist/workflows/publication/publication-status-reporter.js +22 -1
  584. package/dist/workflows/publication/publication-status-reporter.js.map +1 -1
  585. package/dist/workflows/publication/published-workflow-enqueuer.d.ts +13 -0
  586. package/dist/workflows/publication/published-workflow-enqueuer.js +53 -0
  587. package/dist/workflows/publication/published-workflow-enqueuer.js.map +1 -0
  588. package/dist/workflows/publication/published-workflow-trigger-deactivator.d.ts +16 -0
  589. package/dist/workflows/publication/published-workflow-trigger-deactivator.js +79 -0
  590. package/dist/workflows/publication/published-workflow-trigger-deactivator.js.map +1 -0
  591. package/dist/workflows/publication/workflow-publication-applier.d.ts +6 -1
  592. package/dist/workflows/publication/workflow-publication-applier.js +39 -3
  593. package/dist/workflows/publication/workflow-publication-applier.js.map +1 -1
  594. package/dist/workflows/publication/workflow-publication-lifecycle-lock.d.ts +13 -0
  595. package/dist/workflows/publication/workflow-publication-lifecycle-lock.js +104 -0
  596. package/dist/workflows/publication/workflow-publication-lifecycle-lock.js.map +1 -0
  597. package/dist/workflows/publication/workflow-publication-outbox-cleanup.service.d.ts +19 -0
  598. package/dist/workflows/publication/workflow-publication-outbox-cleanup.service.js +109 -0
  599. package/dist/workflows/publication/workflow-publication-outbox-cleanup.service.js.map +1 -0
  600. package/dist/workflows/publication/workflow-publication-outbox-consumer.d.ts +11 -4
  601. package/dist/workflows/publication/workflow-publication-outbox-consumer.js +105 -45
  602. package/dist/workflows/publication/workflow-publication-outbox-consumer.js.map +1 -1
  603. package/dist/workflows/triggers/non-webhook-trigger-registrar.d.ts +4 -5
  604. package/dist/workflows/triggers/non-webhook-trigger-registrar.js +30 -9
  605. package/dist/workflows/triggers/non-webhook-trigger-registrar.js.map +1 -1
  606. package/dist/workflows/triggers/trigger-activation-retry.d.ts +2 -0
  607. package/dist/workflows/triggers/trigger-activation-retry.js +23 -0
  608. package/dist/workflows/triggers/trigger-activation-retry.js.map +1 -0
  609. package/dist/workflows/triggers/webhook-trigger-registrar.d.ts +3 -2
  610. package/dist/workflows/triggers/webhook-trigger-registrar.js +60 -32
  611. package/dist/workflows/triggers/webhook-trigger-registrar.js.map +1 -1
  612. package/dist/workflows/triggers/workflow-trigger-activator.d.ts +6 -3
  613. package/dist/workflows/triggers/workflow-trigger-activator.js +126 -60
  614. package/dist/workflows/triggers/workflow-trigger-activator.js.map +1 -1
  615. package/dist/workflows/workflow-creation.service.d.ts +1 -0
  616. package/dist/workflows/workflow-creation.service.js +17 -8
  617. package/dist/workflows/workflow-creation.service.js.map +1 -1
  618. package/dist/workflows/workflow-entity-mapper.d.ts +5 -0
  619. package/dist/workflows/workflow-entity-mapper.js +22 -0
  620. package/dist/workflows/workflow-entity-mapper.js.map +1 -0
  621. package/dist/workflows/workflow-execution.service.d.ts +6 -2
  622. package/dist/workflows/workflow-execution.service.js +36 -13
  623. package/dist/workflows/workflow-execution.service.js.map +1 -1
  624. package/dist/workflows/workflow-history/workflow-history.service.js +1 -0
  625. package/dist/workflows/workflow-history/workflow-history.service.js.map +1 -1
  626. package/dist/workflows/workflow-published-data.service.d.ts +1 -3
  627. package/dist/workflows/workflow-published-data.service.js +2 -9
  628. package/dist/workflows/workflow-published-data.service.js.map +1 -1
  629. package/dist/workflows/workflow-validation.service.js +2 -1
  630. package/dist/workflows/workflow-validation.service.js.map +1 -1
  631. package/dist/workflows/workflow.service.d.ts +4 -3
  632. package/dist/workflows/workflow.service.js +72 -33
  633. package/dist/workflows/workflow.service.js.map +1 -1
  634. package/dist/workflows/workflows.controller.d.ts +3 -2
  635. package/dist/workflows/workflows.controller.js +12 -23
  636. package/dist/workflows/workflows.controller.js.map +1 -1
  637. package/package.json +55 -37
  638. package/templates/form-trigger.handlebars +8 -1
@@ -45,6 +45,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
45
45
  exports.InstanceAiService = void 0;
46
46
  const api_types_1 = require("@n8n/api-types");
47
47
  const backend_common_1 = require("@n8n/backend-common");
48
+ const backend_network_1 = require("@n8n/backend-network");
48
49
  const config_1 = require("@n8n/config");
49
50
  const db_1 = require("@n8n/db");
50
51
  const decorators_1 = require("@n8n/decorators");
@@ -55,41 +56,62 @@ const n8n_core_1 = require("n8n-core");
55
56
  const n8n_workflow_1 = require("n8n-workflow");
56
57
  const nanoid_1 = require("nanoid");
57
58
  const uuid_1 = require("uuid");
59
+ const constants_1 = require("../../constants");
60
+ const event_service_1 = require("../../events/event.service");
61
+ const source_control_preferences_service_ee_1 = require("../../modules/source-control.ee/source-control-preferences.service.ee");
62
+ const ai_service_1 = require("../../services/ai.service");
63
+ const proxy_token_manager_1 = require("../../services/proxy-token-manager");
64
+ const url_service_1 = require("../../services/url.service");
65
+ const telemetry_1 = require("../../telemetry");
66
+ const thread_credential_allowlist_service_1 = require("./eval/thread-credential-allowlist.service");
58
67
  const in_process_event_bus_1 = require("./event-bus/in-process-event-bus");
68
+ const instance_ai_credit_service_1 = require("./instance-ai-credit.service");
59
69
  const instance_ai_gateway_service_1 = require("./instance-ai-gateway.service");
60
70
  const instance_ai_memory_service_1 = require("./instance-ai-memory.service");
71
+ const instance_ai_model_service_1 = require("./instance-ai-model.service");
72
+ const instance_ai_run_probe_1 = require("./instance-ai-run-probe");
61
73
  const instance_ai_settings_service_1 = require("./instance-ai-settings.service");
74
+ const instance_ai_temporary_workflow_service_1 = require("./instance-ai-temporary-workflow.service");
62
75
  const instance_ai_adapter_service_1 = require("./instance-ai.adapter.service");
63
- const output_redaction_config_1 = require("./output-redaction-config");
64
76
  const internal_messages_1 = require("./internal-messages");
65
77
  const liveness_1 = require("./liveness");
66
78
  const mcp_1 = require("./mcp");
79
+ const observability_1 = require("./observability");
80
+ const output_redaction_config_1 = require("./output-redaction-config");
81
+ const planned_task_action_runner_1 = require("./planned-task-action-runner");
67
82
  const instance_ai_pending_confirmation_repository_1 = require("./repositories/instance-ai-pending-confirmation.repository");
68
- const instance_ai_thread_repository_1 = require("./repositories/instance-ai-thread.repository");
69
- const sandbox_1 = require("./sandbox");
70
- const suspended_run_restorer_service_1 = require("./suspended-run-restorer.service");
71
- const suspended_thread_persistence_service_1 = require("./suspended-thread-persistence.service");
83
+ const instance_ai_thread_grant_repository_1 = require("./repositories/instance-ai-thread-grant.repository");
72
84
  const run_trace_metadata_1 = require("./run-trace-metadata");
85
+ const sandbox_1 = require("./sandbox");
73
86
  const db_iteration_log_storage_1 = require("./storage/db-iteration-log-storage");
74
87
  const db_snapshot_storage_1 = require("./storage/db-snapshot-storage");
75
88
  const typeorm_agent_checkpoint_store_1 = require("./storage/typeorm-agent-checkpoint-store");
76
89
  const typeorm_agent_memory_1 = require("./storage/typeorm-agent-memory");
90
+ const suspended_run_restorer_service_1 = require("./suspended-run-restorer.service");
91
+ const suspended_thread_persistence_service_1 = require("./suspended-thread-persistence.service");
77
92
  const trace_replay_state_1 = require("./trace-replay-state");
78
93
  const workflow_verification_obligation_service_1 = require("./workflow-verification-obligation-service");
79
- const planned_task_action_runner_1 = require("./planned-task-action-runner");
80
94
  const workflow_verification_task_projector_1 = require("./workflow-verification-task-projector");
81
- const constants_1 = require("../../constants");
82
- const event_service_1 = require("../../events/event.service");
83
- const source_control_preferences_service_ee_1 = require("../../modules/source-control.ee/source-control-preferences.service.ee");
84
- const push_1 = require("../../push");
85
- const ai_service_1 = require("../../services/ai.service");
86
- const proxy_token_manager_1 = require("../../services/proxy-token-manager");
87
- const url_service_1 = require("../../services/url.service");
88
- const telemetry_1 = require("../../telemetry");
89
- const backend_network_1 = require("@n8n/backend-network");
90
95
  function getErrorMessage(error) {
91
96
  return error instanceof Error ? error.message : String(error);
92
97
  }
98
+ function buildContextResourcesBlock(workflowAttachments) {
99
+ if (workflowAttachments.length === 0)
100
+ return '';
101
+ const lines = workflowAttachments.map((attachment) => {
102
+ const name = attachment.name ? ` "${attachment.name}"` : '';
103
+ const execution = attachment.executionId
104
+ ? `, currently viewing its execution \`${attachment.executionId}\``
105
+ : '';
106
+ return `- Workflow${name} (id: \`${attachment.id}\`)${execution}.`;
107
+ });
108
+ const prose = [
109
+ 'The user opened this conversation from the workflow editor, where they are looking at:',
110
+ ...lines,
111
+ "Treat this purely as context. Until the user tells you what they need, don't read, inspect, run, or otherwise call tools on these resources, and don't make claims about their contents — just briefly acknowledge what they're working on and ask how you can help.",
112
+ ].join('\n');
113
+ return `${internal_messages_1.EDITOR_CONTEXT_OPEN_TAG}\n${JSON.stringify(workflowAttachments)}\n\n${prose}\n${internal_messages_1.EDITOR_CONTEXT_CLOSE_TAG}`;
114
+ }
93
115
  function isTelemetryConfigurableAgent(agent) {
94
116
  return (typeof agent === 'object' &&
95
117
  agent !== null &&
@@ -224,21 +246,10 @@ function buildPlannedTaskConversationContext(task, graph) {
224
246
  }
225
247
  return parts.join('\n');
226
248
  }
227
- function getProxyFetch() {
228
- const proxyUrl = process.env.HTTPS_PROXY || process.env.HTTP_PROXY;
229
- if (!proxyUrl)
230
- return undefined;
231
- const { ProxyAgent } = require('undici');
232
- const dispatcher = new ProxyAgent(proxyUrl);
233
- return (async (url, init) => await globalThis.fetch(url, {
234
- ...init,
235
- dispatcher,
236
- }));
237
- }
238
249
  function toConfirmationData(request) {
239
250
  switch (request.kind) {
240
251
  case 'approval':
241
- return { approved: request.approved, userInput: request.userInput };
252
+ return { approved: request.approved, userInput: request.userInput, scope: request.scope };
242
253
  case 'domainAccessApprove':
243
254
  return { approved: true, domainAccessAction: request.domainAccessAction };
244
255
  case 'domainAccessDeny':
@@ -275,7 +286,7 @@ let InstanceAiService = class InstanceAiService {
275
286
  }
276
287
  return this._mcpClientManager;
277
288
  }
278
- constructor(logger, globalConfig, instanceSettings, adapterService, eventBus, settingsService, gatewayService, memoryService, agentMemory, checkpointStore, aiService, push, threadRepo, pendingConfirmationRepo, urlService, dbSnapshotStorage, dbIterationLogStorage, sourceControlPreferencesService, telemetry, mcpRegistryService, userRepository, aiBuilderTemporaryWorkflowRepository, errorReporter, ssrfProtectionConfig, ssrfProtectionService, eventService) {
289
+ constructor(logger, globalConfig, instanceSettings, adapterService, eventBus, settingsService, gatewayService, memoryService, agentMemory, checkpointStore, aiService, threadGrantRepo, pendingConfirmationRepo, urlService, dbSnapshotStorage, dbIterationLogStorage, sourceControlPreferencesService, telemetry, mcpRegistryService, userRepository, temporaryWorkflowService, errorReporter, ssrfProtectionConfig, ssrfProtectionService, eventService, evalCredentialAllowlists, runProbe, modelService, creditService) {
279
290
  this.instanceSettings = instanceSettings;
280
291
  this.adapterService = adapterService;
281
292
  this.eventBus = eventBus;
@@ -285,8 +296,7 @@ let InstanceAiService = class InstanceAiService {
285
296
  this.agentMemory = agentMemory;
286
297
  this.checkpointStore = checkpointStore;
287
298
  this.aiService = aiService;
288
- this.push = push;
289
- this.threadRepo = threadRepo;
299
+ this.threadGrantRepo = threadGrantRepo;
290
300
  this.pendingConfirmationRepo = pendingConfirmationRepo;
291
301
  this.urlService = urlService;
292
302
  this.dbSnapshotStorage = dbSnapshotStorage;
@@ -295,25 +305,31 @@ let InstanceAiService = class InstanceAiService {
295
305
  this.telemetry = telemetry;
296
306
  this.mcpRegistryService = mcpRegistryService;
297
307
  this.userRepository = userRepository;
298
- this.aiBuilderTemporaryWorkflowRepository = aiBuilderTemporaryWorkflowRepository;
308
+ this.temporaryWorkflowService = temporaryWorkflowService;
299
309
  this.errorReporter = errorReporter;
300
310
  this.eventService = eventService;
311
+ this.evalCredentialAllowlists = evalCredentialAllowlists;
312
+ this.modelService = modelService;
313
+ this.creditService = creditService;
301
314
  this.runState = new instance_ai_1.RunStateRegistry();
302
315
  this.backgroundTasks = new instance_ai_1.BackgroundTaskManager(MAX_CONCURRENT_BACKGROUND_TASKS_PER_THREAD);
316
+ this.memoryTaskRegistry = new instance_ai_1.MemoryTaskRegistry();
303
317
  this.traceContextsByRunId = new Map();
318
+ this.reportedErrors = new WeakSet();
304
319
  this.domainAccessTrackersByThread = new Map();
305
320
  this.threadPushRef = new Map();
306
321
  this.planRequestsByThread = new Map();
307
322
  this.schedulerLocks = new Map();
308
323
  this.pendingCheckpointReentries = new Map();
309
324
  this.pendingTerminalOutcomes = new Map();
310
- this.creditedThreads = new Set();
311
325
  this.traceReplay = new trace_replay_state_1.TraceReplayState();
326
+ this.runDebugBuffer = new instance_ai_1.RunDebugBuffer();
312
327
  this.checkpointPruningStopped = true;
313
328
  this.inFlightExecutions = new Set();
314
329
  this.preserveHitlOnShutdown = new Set();
315
330
  this.userMessagePersistenceByRun = new Map();
316
331
  this.logger = logger.scoped('instance-ai');
332
+ runProbe.registerActiveRunCountProvider(() => this.runState.activeRunCount());
317
333
  this.workflowObligations = new workflow_verification_obligation_service_1.WorkflowVerificationObligationService(this.agentMemory);
318
334
  this.taskProjector = new workflow_verification_task_projector_1.WorkflowVerificationTaskProjector(this.agentMemory, this.eventBus, this.logger, this.workflowObligations);
319
335
  this.instanceAiConfig = globalConfig.instanceAi;
@@ -382,123 +398,69 @@ let InstanceAiService = class InstanceAiService {
382
398
  if (this.instanceSettings.isLeader)
383
399
  this.startCheckpointPruning();
384
400
  }
385
- async getProxyAuth(user) {
401
+ async createProxyRunConfig(user) {
402
+ if (!this.aiService.isProxyEnabled())
403
+ return {};
386
404
  const client = await this.aiService.getClient();
387
- const token = await client.getBuilderApiProxyToken({ id: user.id }, { userMessageId: (0, nanoid_1.nanoid)() });
405
+ const proxyBaseUrl = client.getApiProxyBaseUrl();
406
+ const tokenManager = new proxy_token_manager_1.ProxyTokenManager(async () => {
407
+ return await client.getBuilderApiProxyToken({ id: user.id }, { userMessageId: (0, nanoid_1.nanoid)() });
408
+ });
409
+ const featureHeaders = (0, api_types_1.buildProxyHeaders)({
410
+ feature: 'instance-ai',
411
+ n8nVersion: constants_1.N8N_VERSION,
412
+ });
388
413
  return {
389
- client,
390
- headers: { Authorization: `${token.tokenType} ${token.accessToken}` },
414
+ proxyBaseUrl,
415
+ tokenManager,
416
+ searchProxyConfig: {
417
+ apiUrl: proxyBaseUrl + '/brave-search',
418
+ getAuthHeaders: async () => ({
419
+ ...(await tokenManager.getAuthHeaders()),
420
+ ...featureHeaders,
421
+ }),
422
+ },
423
+ tracingProxyConfig: {
424
+ apiUrl: proxyBaseUrl + '/langsmith',
425
+ getAuthHeaders: async () => ({
426
+ ...(await tokenManager.getAuthHeaders()),
427
+ ...featureHeaders,
428
+ }),
429
+ },
391
430
  };
392
431
  }
393
432
  async resolveAgentModelConfig(user) {
394
- if (this.aiService.isProxyEnabled()) {
395
- const client = await this.aiService.getClient();
396
- const proxyBaseUrl = client.getApiProxyBaseUrl();
397
- const tokenManager = new proxy_token_manager_1.ProxyTokenManager(async () => {
398
- return await client.getBuilderApiProxyToken({ id: user.id }, { userMessageId: (0, nanoid_1.nanoid)() });
399
- });
400
- return await this.resolveProxyModel(user, proxyBaseUrl, tokenManager);
401
- }
402
- const httpProxyModel = await this.resolveHttpProxyModel(user);
403
- if (httpProxyModel)
404
- return httpProxyModel;
405
- return await this.settingsService.resolveModelConfig(user);
406
- }
407
- async resolveProxyModel(user, proxyBaseUrl, tokenManager) {
408
- const modelName = this.settingsService.resolveModelName(user);
409
- const { createAnthropic } = await Promise.resolve().then(() => __importStar(require('@ai-sdk/anthropic')));
410
- const provider = createAnthropic({
411
- baseURL: proxyBaseUrl + '/anthropic/v1',
412
- apiKey: 'proxy-managed',
413
- fetch: async (input, init) => {
414
- const headers = new Headers(init?.headers);
415
- const auth = await tokenManager.getAuthHeaders();
416
- for (const [k, v] of Object.entries(auth)) {
417
- headers.set(k, v);
418
- }
419
- for (const [k, v] of Object.entries((0, api_types_1.buildProxyHeaders)({ feature: 'instance-ai', n8nVersion: constants_1.N8N_VERSION }))) {
420
- headers.set(k, v);
421
- }
422
- return await globalThis.fetch(input, { ...init, headers });
423
- },
424
- });
425
- return provider(modelName);
433
+ return await this.modelService.resolveAgentModelConfig(user);
426
434
  }
427
- async resolveHttpProxyModel(user) {
428
- const proxyFetch = getProxyFetch();
429
- if (!proxyFetch)
430
- return undefined;
431
- const config = await this.settingsService.resolveModelConfig(user);
432
- const modelId = typeof config === 'string' ? config : 'id' in config ? config.id : null;
433
- if (!modelId)
434
- return undefined;
435
- const [provider, ...rest] = modelId.split('/');
436
- const modelName = rest.join('/');
437
- const apiKey = typeof config === 'object' && 'apiKey' in config ? config.apiKey : undefined;
438
- const baseURL = typeof config === 'object' && 'url' in config ? config.url : undefined;
439
- if (provider !== 'anthropic')
440
- return undefined;
441
- const { createAnthropic } = await Promise.resolve().then(() => __importStar(require('@ai-sdk/anthropic')));
442
- return createAnthropic({
443
- apiKey,
444
- baseURL: baseURL || undefined,
445
- fetch: proxyFetch,
446
- })(modelName);
447
- }
448
- async countCreditsIfFirst(user, threadId, runId) {
449
- if (!this.aiService.isProxyEnabled())
450
- return;
451
- if (this.creditedThreads.has(threadId))
452
- return;
453
- let thread;
435
+ async loadThreadSessionGrants(threadId, userId) {
454
436
  try {
455
- thread = await this.threadRepo.findOneBy({ id: threadId });
437
+ return await this.threadGrantRepo.findKeys(threadId, userId);
456
438
  }
457
439
  catch (error) {
458
- this.logger.warn('Failed to check Instance AI credit status', {
440
+ this.logger.warn('Failed to load Instance AI session grants', {
459
441
  threadId,
460
- runId,
461
442
  error: getErrorMessage(error),
462
443
  });
463
- return;
464
- }
465
- if (!thread)
466
- return;
467
- if (thread.metadata?.creditCounted) {
468
- this.creditedThreads.add(threadId);
469
- return;
444
+ return new Set();
470
445
  }
446
+ }
447
+ async persistThreadSessionGrant(threadId, userId, key) {
471
448
  try {
472
- this.creditedThreads.add(threadId);
473
- const { client, headers: authHeaders } = await this.getProxyAuth(user);
474
- const info = await client.markBuilderSuccess({ id: user.id }, authHeaders);
475
- if (info) {
476
- thread.metadata = { ...thread.metadata, creditCounted: true };
477
- await this.threadRepo.save(thread);
478
- this.push.sendToUsers({
479
- type: 'updateInstanceAiCredits',
480
- data: { creditsQuota: info.creditsQuota, creditsClaimed: info.creditsClaimed },
481
- }, [user.id]);
482
- }
449
+ await this.threadGrantRepo.grant(threadId, userId, key);
483
450
  }
484
451
  catch (error) {
485
- this.creditedThreads.delete(threadId);
486
- this.logger.warn('Failed to count Instance AI credits', {
487
- error: getErrorMessage(error),
452
+ this.logger.warn('Failed to persist Instance AI session grant', {
488
453
  threadId,
489
- runId,
454
+ key,
455
+ error: getErrorMessage(error),
490
456
  });
491
457
  }
492
458
  }
493
459
  isProxyEnabled() {
494
- return this.aiService.isProxyEnabled();
460
+ return this.modelService.isProxyEnabled();
495
461
  }
496
462
  async getCredits(user) {
497
- if (!this.aiService.isProxyEnabled()) {
498
- return { creditsQuota: api_types_1.UNLIMITED_CREDITS, creditsClaimed: 0 };
499
- }
500
- const client = await this.aiService.getClient();
501
- return await client.getBuilderInstanceCredits({ id: user.id });
463
+ return await this.modelService.getCredits(user);
502
464
  }
503
465
  isEnabled() {
504
466
  return this.settingsService.isAgentEnabled() && !!this.instanceAiConfig.model;
@@ -507,7 +469,31 @@ let InstanceAiService = class InstanceAiService {
507
469
  return this.runState.hasLiveRun(threadId);
508
470
  }
509
471
  getThreadStatus(threadId) {
510
- return this.runState.getThreadStatus(threadId, this.backgroundTasks.getTaskSnapshots(threadId));
472
+ const status = this.runState.getThreadStatus(threadId, this.backgroundTasks.getTaskSnapshots(threadId));
473
+ const memoryTasks = this.memoryTaskRegistry.getTasks(threadId);
474
+ return { ...status, memoryTasks };
475
+ }
476
+ memoryTaskObserverFor(threadId) {
477
+ return (event) => {
478
+ this.memoryTaskRegistry.handleEvent(threadId, event);
479
+ const pendingTasks = this.memoryTaskRegistry.getTasks(threadId);
480
+ const logContext = {
481
+ threadId,
482
+ taskId: event.task.id,
483
+ taskKind: event.task.taskKind,
484
+ pendingCount: pendingTasks.length,
485
+ ...(event.type === 'skipped' ? { reason: event.reason } : {}),
486
+ ...(event.type === 'failed' ? { error: getErrorMessage(event.error) } : {}),
487
+ ...(event.type === 'completed' &&
488
+ event.value &&
489
+ typeof event.value === 'object' &&
490
+ 'status' in event.value &&
491
+ typeof event.value.status === 'string'
492
+ ? { outcome: event.value.status }
493
+ : {}),
494
+ };
495
+ this.logger.info(`Observational memory task ${event.type}`, logContext);
496
+ };
511
497
  }
512
498
  storeTraceContext(runId, threadId, tracing, messageGroupId) {
513
499
  const existing = this.traceContextsByRunId.get(runId);
@@ -526,6 +512,82 @@ let InstanceAiService = class InstanceAiService {
526
512
  getTraceContext(runId) {
527
513
  return this.traceContextsByRunId.get(runId)?.tracing;
528
514
  }
515
+ reportInstanceAiError(error, context) {
516
+ if (typeof error === 'object' && error !== null) {
517
+ if (this.reportedErrors.has(error))
518
+ return;
519
+ this.reportedErrors.add(error);
520
+ }
521
+ const observability = (0, observability_1.buildInstanceAiObservabilityContext)(context);
522
+ this.logger.error(`Instance AI error in ${context.component}`, {
523
+ error,
524
+ component: context.component,
525
+ ...observability,
526
+ });
527
+ this.errorReporter.error(error, {
528
+ tags: { component: context.component, ...observability },
529
+ extra: observability,
530
+ });
531
+ }
532
+ async withSetupBoundary(component, context, fn) {
533
+ try {
534
+ return await fn();
535
+ }
536
+ catch (error) {
537
+ this.reportInstanceAiError(error, { component, ...context });
538
+ throw error;
539
+ }
540
+ }
541
+ isRunDebugEnabled() {
542
+ return this.instanceAiConfig.runDebugEnabled;
543
+ }
544
+ buildOrchestratorAgentStreamOptions(user, threadId, runId, signal) {
545
+ if (this.isRunDebugEnabled()) {
546
+ this.runDebugBuffer.ensure(runId, threadId);
547
+ }
548
+ return {
549
+ maxIterations: instance_ai_1.MAX_STEPS.ORCHESTRATOR,
550
+ abortSignal: signal,
551
+ recoverUsageOnAbort: true,
552
+ persistence: {
553
+ resourceId: user.id,
554
+ threadId,
555
+ },
556
+ providerOptions: {
557
+ anthropic: { cacheControl: { type: 'ephemeral' } },
558
+ },
559
+ ...(this.isRunDebugEnabled()
560
+ ? (0, instance_ai_1.createRunDebugStepHooks)(this.runDebugBuffer, { runId, threadId })
561
+ : {}),
562
+ };
563
+ }
564
+ buildOrchestratorResumeAgentOptions(user, threadId, runId, agentRunId, toolCallId) {
565
+ if (this.isRunDebugEnabled()) {
566
+ this.runDebugBuffer.ensure(runId, threadId);
567
+ }
568
+ return {
569
+ runId: agentRunId,
570
+ toolCallId,
571
+ recoverUsageOnAbort: true,
572
+ persistence: { resourceId: user.id, threadId },
573
+ ...(this.isRunDebugEnabled()
574
+ ? (0, instance_ai_1.createRunDebugStepHooks)(this.runDebugBuffer, { runId, threadId })
575
+ : {}),
576
+ };
577
+ }
578
+ getRunDebug(runId) {
579
+ return this.runDebugBuffer.get(runId);
580
+ }
581
+ listThreadDebugRuns(threadId) {
582
+ return this.runDebugBuffer.listByThread(threadId).map((record) => ({
583
+ runId: record.runId,
584
+ threadId: record.threadId,
585
+ startedAt: record.startedAt,
586
+ stepCount: record.steps.length,
587
+ workflowCodeCount: record.workflowCode.length,
588
+ label: record.label,
589
+ }));
590
+ }
529
591
  getTraceContextForContinuation(threadId, messageGroupId) {
530
592
  const entries = [...this.traceContextsByRunId.values()].reverse();
531
593
  const sameGroup = messageGroupId === undefined
@@ -818,7 +880,7 @@ let InstanceAiService = class InstanceAiService {
818
880
  userId: user.id,
819
881
  message: { id: userMessageId, text: message },
820
882
  });
821
- this.startExecuteRun(user, threadId, runId, message, abortController, attachments, messageGroupId, timeZone, false, undefined, undefined);
883
+ this.startExecuteRun(user, threadId, runId, message, abortController, attachments, messageGroupId, timeZone);
822
884
  return runId;
823
885
  }
824
886
  getMessageGroupId(threadId) {
@@ -1051,14 +1113,15 @@ let InstanceAiService = class InstanceAiService {
1051
1113
  reason: 'thread_cleared',
1052
1114
  metadata: { completion_source: 'service_cleanup' },
1053
1115
  });
1054
- this.creditedThreads.delete(threadId);
1055
1116
  this.schedulerLocks.delete(threadId);
1056
1117
  this.domainAccessTrackersByThread.delete(threadId);
1118
+ this.evalCredentialAllowlists.clearThread(threadId);
1057
1119
  this.threadPushRef.delete(threadId);
1058
1120
  this.planRequestsByThread.delete(threadId);
1121
+ this.memoryTaskRegistry.clearThread(threadId);
1059
1122
  this.deleteTraceContextsForThread(threadId);
1060
1123
  await this.sandboxService.destroySandbox(threadId);
1061
- await this.reapAiTemporaryForThreadCleanup(threadId);
1124
+ await this.temporaryWorkflowService.reapForThreadCleanup(threadId);
1062
1125
  await this.suspendedThreads.dropPendingConfirmationsForThread(threadId);
1063
1126
  this.eventBus.clearThread(threadId);
1064
1127
  }
@@ -1659,7 +1722,7 @@ let InstanceAiService = class InstanceAiService {
1659
1722
  });
1660
1723
  }
1661
1724
  }
1662
- async createExecutionEnvironment(user, threadId, runId, abortSignal, messageGroupId, pushRef) {
1725
+ async createExecutionEnvironment(user, threadId, runId, abortSignal, messageGroupId, pushRef, proxyRunConfig) {
1663
1726
  const memory = this.agentMemory;
1664
1727
  const boundProjectId = await memory.getThreadProjectId(threadId);
1665
1728
  if (!boundProjectId) {
@@ -1669,41 +1732,13 @@ let InstanceAiService = class InstanceAiService {
1669
1732
  const localGatewayDisabledGlobally = adminSettings.localGatewayDisabled;
1670
1733
  const localGatewayDisabledForUser = await this.settingsService.isLocalGatewayDisabledForUser(user.id);
1671
1734
  const userGateway = this.gatewayService.findGateway(user.id);
1672
- let searchProxyConfig;
1673
- let tracingProxyConfig;
1674
- let tokenManager;
1675
- let proxyBaseUrl;
1676
- if (this.aiService.isProxyEnabled()) {
1677
- const client = await this.aiService.getClient();
1678
- proxyBaseUrl = client.getApiProxyBaseUrl();
1679
- const manager = new proxy_token_manager_1.ProxyTokenManager(async () => {
1680
- return await client.getBuilderApiProxyToken({ id: user.id }, { userMessageId: (0, nanoid_1.nanoid)() });
1681
- });
1682
- tokenManager = manager;
1683
- const featureHeaders = (0, api_types_1.buildProxyHeaders)({
1684
- feature: 'instance-ai',
1685
- n8nVersion: constants_1.N8N_VERSION,
1686
- });
1687
- searchProxyConfig = {
1688
- apiUrl: proxyBaseUrl + '/brave-search',
1689
- getAuthHeaders: async () => ({
1690
- ...(await manager.getAuthHeaders()),
1691
- ...featureHeaders,
1692
- }),
1693
- };
1694
- tracingProxyConfig = {
1695
- apiUrl: proxyBaseUrl + '/langsmith',
1696
- getAuthHeaders: async () => ({
1697
- ...(await manager.getAuthHeaders()),
1698
- ...featureHeaders,
1699
- }),
1700
- };
1701
- }
1735
+ const { searchProxyConfig, tracingProxyConfig, tokenManager, proxyBaseUrl } = proxyRunConfig ?? (await this.createProxyRunConfig(user));
1702
1736
  const context = this.adapterService.createContext(user, {
1703
1737
  searchProxyConfig,
1704
1738
  pushRef,
1705
1739
  threadId,
1706
1740
  projectId: boundProjectId,
1741
+ credentialIdAllowlist: this.evalCredentialAllowlists.get(threadId),
1707
1742
  });
1708
1743
  if (!localGatewayDisabledForUser && userGateway?.isConnected) {
1709
1744
  context.localMcpServer = userGateway;
@@ -1720,6 +1755,18 @@ let InstanceAiService = class InstanceAiService {
1720
1755
  }
1721
1756
  context.domainAccessTracker = domainTracker;
1722
1757
  context.runId = runId;
1758
+ const sessionGrants = await this.loadThreadSessionGrants(threadId, user.id);
1759
+ context.sessionApprovedToolKeys = sessionGrants;
1760
+ context.grantSessionToolApproval = async (key) => {
1761
+ await this.persistThreadSessionGrant(threadId, user.id, key);
1762
+ sessionGrants.add(key);
1763
+ };
1764
+ if (this.isRunDebugEnabled()) {
1765
+ context.recordWorkflowCodeSnapshot = (snapshot) => {
1766
+ this.runDebugBuffer.ensure(runId, threadId);
1767
+ this.runDebugBuffer.recordWorkflowCode(runId, snapshot);
1768
+ };
1769
+ }
1723
1770
  if (localGatewayDisabledGlobally) {
1724
1771
  context.localGatewayStatus = { status: 'disabledGlobally' };
1725
1772
  }
@@ -1738,8 +1785,8 @@ let InstanceAiService = class InstanceAiService {
1738
1785
  };
1739
1786
  }
1740
1787
  const modelId = proxyBaseUrl && tokenManager
1741
- ? await this.resolveProxyModel(user, proxyBaseUrl, tokenManager)
1742
- : await this.resolveAgentModelConfig(user);
1788
+ ? await this.modelService.resolveProxyModel(user, proxyBaseUrl, tokenManager)
1789
+ : await this.modelService.resolveAgentModelConfig(user);
1743
1790
  const taskStorage = new instance_ai_1.ThreadTaskStorage(memory);
1744
1791
  const iterationLog = this.dbIterationLogStorage;
1745
1792
  const snapshotStorage = this.dbSnapshotStorage;
@@ -1751,14 +1798,13 @@ let InstanceAiService = class InstanceAiService {
1751
1798
  if (nodeDefDirs.length > 0) {
1752
1799
  (0, workflow_sdk_1.setSchemaBaseDirs)(nodeDefDirs);
1753
1800
  }
1754
- const domainTools = (0, instance_ai_1.createAllTools)(context);
1755
1801
  const baseRuntimeSkills = (0, instance_ai_1.loadInstanceAiRuntimeSkillSource)();
1756
1802
  let runtimeSkills = baseRuntimeSkills;
1757
1803
  let runtimeWorkspace;
1758
1804
  let workspaceRoot;
1759
1805
  const sandboxStatus = this.settingsService.getSandboxStatus();
1760
1806
  if (sandboxStatus.workflowBuilderAvailable) {
1761
- const sandboxConfig = await this.sandboxService.resolveSandboxConfig(user);
1807
+ const sandboxConfig = await this.withSetupBoundary('instance-ai-sandbox-setup', { threadId, runId, userId: user.id, messageGroupId }, async () => await this.sandboxService.resolveSandboxConfig(user));
1762
1808
  if (sandboxConfig.enabled) {
1763
1809
  workspaceRoot = (0, instance_ai_1.getPromptWorkspaceRoot)(sandboxConfig.provider);
1764
1810
  let sandboxEntryPromise;
@@ -1795,6 +1841,13 @@ let InstanceAiService = class InstanceAiService {
1795
1841
  });
1796
1842
  }
1797
1843
  }
1844
+ context.workspace = runtimeWorkspace;
1845
+ context.threadId = threadId;
1846
+ context.threadMemory = memory;
1847
+ context.trackTelemetry = (eventName, properties) => {
1848
+ this.telemetry.track(eventName, properties);
1849
+ };
1850
+ const domainTools = (0, instance_ai_1.createAllTools)(context);
1798
1851
  const orchestrationContext = {
1799
1852
  threadId,
1800
1853
  runId,
@@ -2081,7 +2134,9 @@ let InstanceAiService = class InstanceAiService {
2081
2134
  const obligation = this.workflowObligations.obligationFromRecord(threadId, record, {
2082
2135
  source: 'direct',
2083
2136
  });
2084
- const verificationConcluded = obligation.status === 'verified' || obligation.status === 'needs_setup';
2137
+ const verificationConcluded = obligation.status === 'verified' ||
2138
+ obligation.status === 'needs_setup' ||
2139
+ obligation.status === 'not_verifiable';
2085
2140
  if (!verificationConcluded)
2086
2141
  continue;
2087
2142
  if (obligation.setupRequirement?.status !== 'required' || !obligation.workflowId)
@@ -2273,6 +2328,8 @@ let InstanceAiService = class InstanceAiService {
2273
2328
  }
2274
2329
  async executeRun(user, threadId, runId, message, abortController, attachments, messageGroupId, timeZone, isReplanFollowUp = false, checkpoint, resumeReason, plannedBuild) {
2275
2330
  const userMessagePersistence = this.userMessagePersistenceByRun.get(runId)?.message;
2331
+ const fileAttachments = (attachments ?? []).filter((attachment) => attachment.type === 'file');
2332
+ const workflowAttachments = (attachments ?? []).filter((attachment) => attachment.type === 'workflow');
2276
2333
  const signal = abortController.signal;
2277
2334
  let tracing;
2278
2335
  let messageTraceFinalization;
@@ -2281,12 +2338,61 @@ let InstanceAiService = class InstanceAiService {
2281
2338
  let messageId = '';
2282
2339
  try {
2283
2340
  messageId = (0, nanoid_1.nanoid)();
2341
+ const traceInput = {
2342
+ message,
2343
+ ...(fileAttachments.length
2344
+ ? {
2345
+ attachments: fileAttachments.map((attachment) => ({
2346
+ mimeType: attachment.mimeType,
2347
+ size: attachment.data.length,
2348
+ })),
2349
+ }
2350
+ : {}),
2351
+ ...(messageGroupId ? { messageGroupId } : {}),
2352
+ };
2353
+ const proxyRunConfig = await this.createProxyRunConfig(user);
2354
+ if (resumeReason) {
2355
+ tracing = await this.createOrchestratorResumeTraceContext({
2356
+ threadId,
2357
+ messageId,
2358
+ messageGroupId,
2359
+ runId,
2360
+ userId: user.id,
2361
+ input: traceInput,
2362
+ resumeReason,
2363
+ metadata: {
2364
+ ...(checkpoint?.isCheckpointFollowUp
2365
+ ? { checkpoint_task_id: checkpoint.checkpointTaskId }
2366
+ : {}),
2367
+ ...(plannedBuild?.isPlannedBuildFollowUp
2368
+ ? { build_task_id: plannedBuild.buildTaskId }
2369
+ : {}),
2370
+ },
2371
+ });
2372
+ }
2373
+ else {
2374
+ tracing = await (0, instance_ai_1.createInstanceAiTraceContext)({
2375
+ threadId,
2376
+ messageId,
2377
+ messageGroupId,
2378
+ runId,
2379
+ userId: user.id,
2380
+ input: traceInput,
2381
+ proxyConfig: proxyRunConfig.tracingProxyConfig,
2382
+ n8nVersion: constants_1.N8N_VERSION,
2383
+ workflowSdkVersion: constants_1.WORKFLOW_SDK_VERSION,
2384
+ });
2385
+ }
2386
+ if (this.isRunDebugEnabled()) {
2387
+ this.runDebugBuffer.ensure(runId, threadId, (0, instance_ai_1.buildRunDebugLabel)({ message, resumeReason }));
2388
+ }
2389
+ const traceId = tracing?.rootRun.otelTraceId;
2284
2390
  this.eventBus.publish(threadId, {
2285
2391
  type: 'run-start',
2286
2392
  runId,
2287
2393
  agentId: ORCHESTRATOR_AGENT_ID,
2288
2394
  userId: user.id,
2289
- payload: { messageId, messageGroupId },
2395
+ payload: { messageId, messageGroupId, ...(traceId ? { traceId } : {}) },
2290
2396
  });
2291
2397
  if (signal.aborted) {
2292
2398
  this.evaluateTerminalResponse(threadId, runId, 'cancelled', {
@@ -2302,10 +2408,20 @@ let InstanceAiService = class InstanceAiService {
2302
2408
  return;
2303
2409
  }
2304
2410
  const staticMcpServers = this.parseMcpServers(this.instanceAiConfig.mcpServers);
2305
- const registryMcpServers = await this.mcpRegistryService.getRegistryMcpServers(user);
2411
+ const registryMcpServers = this.settingsService.isMcpAccessEnabled()
2412
+ ? await this.withSetupBoundary('instance-ai-mcp-setup', {
2413
+ threadId,
2414
+ runId,
2415
+ tracing,
2416
+ agentId: ORCHESTRATOR_AGENT_ID,
2417
+ userId: user.id,
2418
+ messageGroupId,
2419
+ messageId,
2420
+ }, async () => await this.mcpRegistryService.getRegistryMcpServers(user))
2421
+ : [];
2306
2422
  const mcpServers = [...staticMcpServers, ...registryMcpServers];
2307
2423
  const executionPushRef = this.threadPushRef.get(threadId);
2308
- const environment = await this.createExecutionEnvironment(user, threadId, runId, signal, messageGroupId, executionPushRef);
2424
+ const environment = await this.createExecutionEnvironment(user, threadId, runId, signal, messageGroupId, executionPushRef, proxyRunConfig);
2309
2425
  activeSnapshotStorage = environment.snapshotStorage;
2310
2426
  const { context, memory, taskStorage, snapshotStorage, workflowTasks, plannedTaskService, modelId, orchestrationContext, } = environment;
2311
2427
  aiCreatedWorkflowIds = context.aiCreatedWorkflowIds ??= new Set();
@@ -2354,54 +2470,10 @@ let InstanceAiService = class InstanceAiService {
2354
2470
  workflowTaskService: workflowTasks,
2355
2471
  };
2356
2472
  }
2357
- if (attachments && attachments.length > 0) {
2358
- context.currentUserAttachments = attachments;
2473
+ if (fileAttachments.length > 0) {
2474
+ context.currentUserAttachments = fileAttachments;
2359
2475
  }
2360
2476
  const memoryConfig = this.createAgentMemoryOptions();
2361
- const traceInput = {
2362
- message,
2363
- ...(attachments?.length
2364
- ? {
2365
- attachments: attachments.map((attachment) => ({
2366
- mimeType: attachment.mimeType,
2367
- size: attachment.data.length,
2368
- })),
2369
- }
2370
- : {}),
2371
- ...(messageGroupId ? { messageGroupId } : {}),
2372
- };
2373
- tracing = resumeReason
2374
- ? await this.createOrchestratorResumeTraceContext({
2375
- threadId,
2376
- messageId,
2377
- messageGroupId,
2378
- runId,
2379
- userId: user.id,
2380
- modelId,
2381
- input: traceInput,
2382
- proxyConfig: orchestrationContext.tracingProxyConfig,
2383
- resumeReason,
2384
- metadata: {
2385
- ...(checkpoint?.isCheckpointFollowUp
2386
- ? { checkpoint_task_id: checkpoint.checkpointTaskId }
2387
- : {}),
2388
- ...(plannedBuild?.isPlannedBuildFollowUp
2389
- ? { build_task_id: plannedBuild.buildTaskId }
2390
- : {}),
2391
- },
2392
- })
2393
- : await (0, instance_ai_1.createInstanceAiTraceContext)({
2394
- threadId,
2395
- messageId,
2396
- messageGroupId,
2397
- runId,
2398
- userId: user.id,
2399
- modelId,
2400
- input: traceInput,
2401
- proxyConfig: orchestrationContext.tracingProxyConfig,
2402
- n8nVersion: constants_1.N8N_VERSION,
2403
- workflowSdkVersion: constants_1.WORKFLOW_SDK_VERSION,
2404
- });
2405
2477
  if (!tracing && process.env.E2E_TESTS === 'true') {
2406
2478
  const { createTraceReplayOnlyContext } = await Promise.resolve().then(() => __importStar(require('@n8n/instance-ai')));
2407
2479
  tracing = createTraceReplayOnlyContext();
@@ -2416,9 +2488,15 @@ let InstanceAiService = class InstanceAiService {
2416
2488
  }
2417
2489
  const thread = await memory.getThread(threadId);
2418
2490
  if (thread && !thread.title) {
2491
+ const handoffTitle = workflowAttachments.find((attachment) => attachment.name)?.name;
2419
2492
  await (0, instance_ai_1.patchThread)(memory, {
2420
2493
  threadId,
2421
- update: () => ({ title: (0, instance_ai_1.truncateToTitle)(message) }),
2494
+ update: ({ metadata }) => handoffTitle
2495
+ ? {
2496
+ title: (0, instance_ai_1.truncateToTitle)(handoffTitle),
2497
+ metadata: { ...metadata, titleRefined: true },
2498
+ }
2499
+ : { title: (0, instance_ai_1.truncateToTitle)(message) },
2422
2500
  });
2423
2501
  }
2424
2502
  const existingTasks = await taskStorage.get(threadId);
@@ -2431,12 +2509,13 @@ let InstanceAiService = class InstanceAiService {
2431
2509
  });
2432
2510
  }
2433
2511
  const enrichedMessage = await this.buildMessageWithRunningTasks(threadId, message);
2512
+ const contextResourcesBlock = buildContextResourcesBlock(workflowAttachments);
2434
2513
  let nonStructuredAttachments = [];
2435
2514
  let attachmentManifest = '';
2436
2515
  let hasParseableAttachment = false;
2437
- if (attachments && attachments.length > 0) {
2438
- const classifiedAttachments = (0, instance_ai_1.classifyAttachments)(attachments);
2439
- nonStructuredAttachments = attachments.filter((attachment) => !(0, instance_ai_1.isParseableAttachment)(attachment));
2516
+ if (fileAttachments.length > 0) {
2517
+ const classifiedAttachments = (0, instance_ai_1.classifyAttachments)(fileAttachments);
2518
+ nonStructuredAttachments = fileAttachments.filter((attachment) => !(0, instance_ai_1.isParseableAttachment)(attachment));
2440
2519
  hasParseableAttachment = classifiedAttachments.some((attachment) => attachment.parseable);
2441
2520
  attachmentManifest = (0, instance_ai_1.buildAttachmentManifest)(classifiedAttachments);
2442
2521
  }
@@ -2445,7 +2524,8 @@ let InstanceAiService = class InstanceAiService {
2445
2524
  : attachmentManifest
2446
2525
  ? `${enrichedMessage}\n\n${attachmentManifest}`
2447
2526
  : enrichedMessage;
2448
- const fullMessage = (0, internal_messages_1.withCurrentDateTime)(messageBody, (0, instance_ai_1.getDateTimeSection)(timeZone ?? this.defaultTimeZone));
2527
+ const messageWithContext = [contextResourcesBlock, messageBody].filter(Boolean).join('\n\n');
2528
+ const fullMessage = (0, internal_messages_1.withCurrentDateTime)(messageWithContext, (0, instance_ai_1.getDateTimeSection)(timeZone ?? this.defaultTimeZone));
2449
2529
  const promptBuildRun = tracing
2450
2530
  ? await tracing.startChildRun(tracing.messageRun, {
2451
2531
  name: 'prepare: prompt',
@@ -2527,20 +2607,13 @@ let InstanceAiService = class InstanceAiService {
2527
2607
  memoryConfig,
2528
2608
  memory,
2529
2609
  checkpointStore: this.checkpointStore,
2610
+ onMemoryTaskEvent: this.memoryTaskObserverFor(threadId),
2611
+ thinkingEnabled: this.instanceAiConfig.thinkingEnabled,
2530
2612
  });
2613
+ const streamOptions = this.buildOrchestratorAgentStreamOptions(user, threadId, runId, signal);
2531
2614
  const result = tracing
2532
2615
  ? await tracing.withActiveSpan(tracing.actorRun, async () => {
2533
- return await (0, instance_ai_1.streamAgentRun)(agent, streamInput, {
2534
- maxIterations: instance_ai_1.MAX_STEPS.ORCHESTRATOR,
2535
- abortSignal: signal,
2536
- persistence: {
2537
- resourceId: user.id,
2538
- threadId,
2539
- },
2540
- providerOptions: {
2541
- anthropic: { cacheControl: { type: 'ephemeral' } },
2542
- },
2543
- }, {
2616
+ return await (0, instance_ai_1.streamAgentRun)(agent, streamInput, streamOptions, {
2544
2617
  threadId,
2545
2618
  runId,
2546
2619
  agentId: ORCHESTRATOR_AGENT_ID,
@@ -2551,17 +2624,7 @@ let InstanceAiService = class InstanceAiService {
2551
2624
  outputRedaction: (0, output_redaction_config_1.resolveOutputRedaction)(this.instanceAiConfig),
2552
2625
  });
2553
2626
  })
2554
- : await (0, instance_ai_1.streamAgentRun)(agent, streamInput, {
2555
- maxIterations: instance_ai_1.MAX_STEPS.ORCHESTRATOR,
2556
- abortSignal: signal,
2557
- persistence: {
2558
- resourceId: user.id,
2559
- threadId,
2560
- },
2561
- providerOptions: {
2562
- anthropic: { cacheControl: { type: 'ephemeral' } },
2563
- },
2564
- }, {
2627
+ : await (0, instance_ai_1.streamAgentRun)(agent, streamInput, streamOptions, {
2565
2628
  threadId,
2566
2629
  runId,
2567
2630
  agentId: ORCHESTRATOR_AGENT_ID,
@@ -2671,6 +2734,18 @@ let InstanceAiService = class InstanceAiService {
2671
2734
  return;
2672
2735
  }
2673
2736
  const outputText = await (result.text ?? Promise.resolve(''));
2737
+ if (result.status === 'errored') {
2738
+ this.reportInstanceAiError(result.error ?? new Error('Instance AI stream errored'), {
2739
+ component: 'instance-ai-stream',
2740
+ threadId,
2741
+ runId,
2742
+ tracing,
2743
+ agentId: ORCHESTRATOR_AGENT_ID,
2744
+ userId: user.id,
2745
+ messageGroupId,
2746
+ messageId,
2747
+ });
2748
+ }
2674
2749
  this.evaluateTerminalResponse(threadId, runId, result.status, {
2675
2750
  messageGroupId,
2676
2751
  correlationId: messageId,
@@ -2690,14 +2765,16 @@ let InstanceAiService = class InstanceAiService {
2690
2765
  modelId,
2691
2766
  metadata: this.buildMessageTraceMetadata(threadId, runId, { status: finalStatus }),
2692
2767
  };
2693
- const archivedWorkflowIds = await this.reapAiTemporaryFromRun(threadId, user, aiCreatedWorkflowIds);
2768
+ const archivedWorkflowIds = await this.temporaryWorkflowService.reapForRun(threadId, user, aiCreatedWorkflowIds, this.backgroundTasks.getRunningTasks(threadId).length);
2694
2769
  await this.finalizeRun(threadId, runId, result.status, snapshotStorage, {
2695
2770
  userId: user.id,
2696
2771
  modelId,
2697
2772
  archivedWorkflowIds,
2773
+ workSummary: result.workSummary,
2774
+ usage: result.usage,
2698
2775
  });
2776
+ await this.creditService.claimRunUsage(user, threadId, result.agentRunId || runId, result.usage?.usage ?? [], result.status);
2699
2777
  if (result.status === 'completed') {
2700
- await this.countCreditsIfFirst(user, threadId, runId);
2701
2778
  this.telemetry.track('Builder sent message', {
2702
2779
  thread_id: threadId,
2703
2780
  message: outputText,
@@ -2736,7 +2813,7 @@ let InstanceAiService = class InstanceAiService {
2736
2813
  runTimeout,
2737
2814
  }),
2738
2815
  };
2739
- const archivedWorkflowIds = await this.reapAiTemporaryFromRun(threadId, user, aiCreatedWorkflowIds);
2816
+ const archivedWorkflowIds = await this.temporaryWorkflowService.reapForRun(threadId, user, aiCreatedWorkflowIds, this.backgroundTasks.getRunningTasks(threadId).length);
2740
2817
  this.publishRunFinish(threadId, runId, 'cancelled', cancellationReason, archivedWorkflowIds);
2741
2818
  if (activeSnapshotStorage) {
2742
2819
  await this.saveAgentTreeSnapshot(threadId, runId, activeSnapshotStorage);
@@ -2745,15 +2822,20 @@ let InstanceAiService = class InstanceAiService {
2745
2822
  }
2746
2823
  const errorMessage = getErrorMessage(error);
2747
2824
  const userFacingErrorMessage = getUserFacingErrorMessage(error);
2748
- this.logger.error(`Instance AI run error: ${errorMessage}`, {
2749
- error: errorMessage,
2825
+ const errCtx = {
2750
2826
  threadId,
2751
2827
  runId,
2828
+ tracing,
2829
+ agentId: ORCHESTRATOR_AGENT_ID,
2830
+ userId: user.id,
2831
+ messageGroupId,
2832
+ messageId,
2833
+ };
2834
+ this.logger.error(`Instance AI run error: ${errorMessage}`, {
2835
+ error: errorMessage,
2836
+ ...(0, observability_1.buildInstanceAiObservabilityContext)(errCtx),
2752
2837
  });
2753
- this.errorReporter.error(error, {
2754
- tags: { component: 'instance-ai-run' },
2755
- extra: { threadId, runId },
2756
- });
2838
+ this.reportInstanceAiError(error, { component: 'instance-ai-run', ...errCtx });
2757
2839
  this.evaluateTerminalResponse(threadId, runId, 'errored', {
2758
2840
  messageGroupId,
2759
2841
  correlationId: messageId,
@@ -2768,7 +2850,7 @@ let InstanceAiService = class InstanceAiService {
2768
2850
  reason: errorMessage,
2769
2851
  metadata: this.buildMessageTraceMetadata(threadId, runId, { status: 'error' }),
2770
2852
  };
2771
- const archivedWorkflowIds = await this.reapAiTemporaryFromRun(threadId, user, aiCreatedWorkflowIds);
2853
+ const archivedWorkflowIds = await this.temporaryWorkflowService.reapForRun(threadId, user, aiCreatedWorkflowIds, this.backgroundTasks.getRunningTasks(threadId).length);
2772
2854
  this.eventBus.publish(threadId, {
2773
2855
  type: 'run-finish',
2774
2856
  runId,
@@ -3015,6 +3097,8 @@ let InstanceAiService = class InstanceAiService {
3015
3097
  memoryConfig: this.createAgentMemoryOptions(),
3016
3098
  memory: environment.memory,
3017
3099
  checkpointStore: this.checkpointStore,
3100
+ onMemoryTaskEvent: this.memoryTaskObserverFor(orphan.threadId),
3101
+ thinkingEnabled: this.instanceAiConfig.thinkingEnabled,
3018
3102
  });
3019
3103
  }
3020
3104
  catch (error) {
@@ -3095,6 +3179,7 @@ let InstanceAiService = class InstanceAiService {
3095
3179
  ...(data.testTriggerNode ? { testTriggerNode: data.testTriggerNode } : {}),
3096
3180
  ...(data.answers ? { answers: data.answers } : {}),
3097
3181
  ...(data.resourceDecision ? { resourceDecision: data.resourceDecision } : {}),
3182
+ ...(data.scope ? { scope: data.scope } : {}),
3098
3183
  };
3099
3184
  const resumeTracing = await this.createOrchestratorResumeTraceContext({
3100
3185
  baseTracing: tracing,
@@ -3158,13 +3243,10 @@ let InstanceAiService = class InstanceAiService {
3158
3243
  });
3159
3244
  }
3160
3245
  }
3246
+ const resumeOptions = this.buildOrchestratorResumeAgentOptions(opts.user, opts.threadId, opts.runId, opts.agentRunId, opts.toolCallId);
3161
3247
  const result = opts.tracing
3162
3248
  ? await opts.tracing.withActiveSpan(opts.tracing.actorRun, async () => {
3163
- return await (0, instance_ai_1.resumeAgentRun)(agent, resumeData, {
3164
- runId: opts.agentRunId,
3165
- toolCallId: opts.toolCallId,
3166
- persistence: { resourceId: opts.user.id, threadId: opts.threadId },
3167
- }, {
3249
+ return await (0, instance_ai_1.resumeAgentRun)(agent, resumeData, resumeOptions, {
3168
3250
  threadId: opts.threadId,
3169
3251
  runId: opts.runId,
3170
3252
  agentId: ORCHESTRATOR_AGENT_ID,
@@ -3176,11 +3258,7 @@ let InstanceAiService = class InstanceAiService {
3176
3258
  outputRedaction: (0, output_redaction_config_1.resolveOutputRedaction)(this.instanceAiConfig),
3177
3259
  });
3178
3260
  })
3179
- : await (0, instance_ai_1.resumeAgentRun)(agent, resumeData, {
3180
- runId: opts.agentRunId,
3181
- toolCallId: opts.toolCallId,
3182
- persistence: { resourceId: opts.user.id, threadId: opts.threadId },
3183
- }, {
3261
+ : await (0, instance_ai_1.resumeAgentRun)(agent, resumeData, resumeOptions, {
3184
3262
  threadId: opts.threadId,
3185
3263
  runId: opts.runId,
3186
3264
  agentId: ORCHESTRATOR_AGENT_ID,
@@ -3291,6 +3369,17 @@ let InstanceAiService = class InstanceAiService {
3291
3369
  }
3292
3370
  const outputText = await (result.text ?? Promise.resolve(''));
3293
3371
  const messageGroupId = this.traceContextsByRunId.get(opts.runId)?.messageGroupId;
3372
+ if (result.status === 'errored') {
3373
+ this.reportInstanceAiError(result.error ?? new Error('Instance AI resumed stream errored'), {
3374
+ component: 'instance-ai-stream',
3375
+ threadId: opts.threadId,
3376
+ runId: opts.runId,
3377
+ tracing: opts.tracing,
3378
+ agentId: ORCHESTRATOR_AGENT_ID,
3379
+ userId: opts.user.id,
3380
+ messageGroupId,
3381
+ });
3382
+ }
3294
3383
  this.evaluateTerminalResponse(opts.threadId, opts.runId, result.status, {
3295
3384
  messageGroupId,
3296
3385
  workSummary: result.workSummary,
@@ -3309,12 +3398,14 @@ let InstanceAiService = class InstanceAiService {
3309
3398
  status: finalStatus,
3310
3399
  }),
3311
3400
  };
3312
- const archivedWorkflowIds = await this.reapAiTemporaryFromRun(opts.threadId, opts.user, undefined);
3401
+ const archivedWorkflowIds = await this.temporaryWorkflowService.reapForRun(opts.threadId, opts.user, undefined, this.backgroundTasks.getRunningTasks(opts.threadId).length);
3313
3402
  await this.finalizeRun(opts.threadId, opts.runId, result.status, opts.snapshotStorage, {
3314
3403
  archivedWorkflowIds,
3404
+ workSummary: result.workSummary,
3405
+ usage: result.usage,
3315
3406
  });
3407
+ await this.creditService.claimRunUsage(opts.user, opts.threadId, result.agentRunId || opts.runId, result.usage?.usage ?? [], result.status);
3316
3408
  if (result.status === 'completed') {
3317
- await this.countCreditsIfFirst(opts.user, opts.threadId, opts.runId);
3318
3409
  this.telemetry.track('Builder sent message', {
3319
3410
  thread_id: opts.threadId,
3320
3411
  message: outputText,
@@ -3353,23 +3444,27 @@ let InstanceAiService = class InstanceAiService {
3353
3444
  runTimeout,
3354
3445
  }),
3355
3446
  };
3356
- const archivedWorkflowIds = await this.reapAiTemporaryFromRun(opts.threadId, opts.user, undefined);
3447
+ const archivedWorkflowIds = await this.temporaryWorkflowService.reapForRun(opts.threadId, opts.user, undefined, this.backgroundTasks.getRunningTasks(opts.threadId).length);
3357
3448
  this.publishRunFinish(opts.threadId, opts.runId, 'cancelled', cancellationReason, archivedWorkflowIds);
3358
3449
  await this.saveAgentTreeSnapshot(opts.threadId, opts.runId, opts.snapshotStorage);
3359
3450
  return;
3360
3451
  }
3361
3452
  const errorMessage = getErrorMessage(error);
3362
3453
  const userFacingErrorMessage = getUserFacingErrorMessage(error);
3363
- this.logger.error(`Instance AI resumed run error: ${errorMessage}`, {
3364
- error: errorMessage,
3454
+ const messageGroupId = this.traceContextsByRunId.get(opts.runId)?.messageGroupId;
3455
+ const errCtx = {
3365
3456
  threadId: opts.threadId,
3366
3457
  runId: opts.runId,
3458
+ tracing: opts.tracing,
3459
+ agentId: ORCHESTRATOR_AGENT_ID,
3460
+ userId: opts.user.id,
3461
+ messageGroupId,
3462
+ };
3463
+ this.logger.error(`Instance AI resumed run error: ${errorMessage}`, {
3464
+ error: errorMessage,
3465
+ ...(0, observability_1.buildInstanceAiObservabilityContext)(errCtx),
3367
3466
  });
3368
- this.errorReporter.error(error, {
3369
- tags: { component: 'instance-ai-run' },
3370
- extra: { threadId: opts.threadId, runId: opts.runId },
3371
- });
3372
- const messageGroupId = this.traceContextsByRunId.get(opts.runId)?.messageGroupId;
3467
+ this.reportInstanceAiError(error, { component: 'instance-ai-run', ...errCtx });
3373
3468
  this.evaluateTerminalResponse(opts.threadId, opts.runId, 'errored', {
3374
3469
  messageGroupId,
3375
3470
  errorMessage: userFacingErrorMessage,
@@ -3385,7 +3480,7 @@ let InstanceAiService = class InstanceAiService {
3385
3480
  status: 'error',
3386
3481
  }),
3387
3482
  };
3388
- const archivedWorkflowIds = await this.reapAiTemporaryFromRun(opts.threadId, opts.user, undefined);
3483
+ const archivedWorkflowIds = await this.temporaryWorkflowService.reapForRun(opts.threadId, opts.user, undefined, this.backgroundTasks.getRunningTasks(opts.threadId).length);
3389
3484
  this.eventBus.publish(opts.threadId, {
3390
3485
  type: 'run-finish',
3391
3486
  runId: opts.runId,
@@ -3477,6 +3572,16 @@ let InstanceAiService = class InstanceAiService {
3477
3572
  },
3478
3573
  onFailed: async (task) => {
3479
3574
  await this.finalizeBackgroundTaskTracing(task, 'failed');
3575
+ this.reportInstanceAiError(new Error(task.error ?? 'Instance AI background task failed'), {
3576
+ component: 'instance-ai-background-task',
3577
+ threadId: opts.threadId,
3578
+ runId,
3579
+ tracing: task.traceContext,
3580
+ agentId: opts.agentId,
3581
+ messageGroupId: task.messageGroupId,
3582
+ taskId: task.taskId,
3583
+ role: task.role,
3584
+ });
3480
3585
  this.eventBus.publish(opts.threadId, {
3481
3586
  type: 'agent-completed',
3482
3587
  runId,
@@ -3518,6 +3623,14 @@ let InstanceAiService = class InstanceAiService {
3518
3623
  });
3519
3624
  return;
3520
3625
  }
3626
+ if (task.timeoutReason) {
3627
+ this.logger.debug('Skipping background auto-follow-up after task timeout', {
3628
+ threadId: opts.threadId,
3629
+ taskId: task.taskId,
3630
+ timeoutReason: task.timeoutReason,
3631
+ });
3632
+ return;
3633
+ }
3521
3634
  const user = this.runState.getThreadUser(opts.threadId);
3522
3635
  if (user) {
3523
3636
  const verificationFollowUpStarted = await this.maybeStartWorkflowVerificationFollowUp(user, task);
@@ -3637,52 +3750,6 @@ let InstanceAiService = class InstanceAiService {
3637
3750
  num_steps: numSteps,
3638
3751
  });
3639
3752
  }
3640
- async reapAiTemporaryFromRun(threadId, user, createdWorkflowIds) {
3641
- const runningTaskCount = this.backgroundTasks.getRunningTasks(threadId).length;
3642
- if (runningTaskCount > 0) {
3643
- this.logger.debug('Deferring AI-builder temporary workflow cleanup until tasks settle', {
3644
- threadId,
3645
- runningTaskCount,
3646
- });
3647
- return [];
3648
- }
3649
- let markedWorkflows = [];
3650
- try {
3651
- markedWorkflows = await this.aiBuilderTemporaryWorkflowRepository.findByThread(threadId);
3652
- }
3653
- catch (error) {
3654
- this.logger.warn('Failed to inspect AI-builder temporary workflows during run finish', {
3655
- threadId,
3656
- error: getErrorMessage(error),
3657
- });
3658
- }
3659
- const workflowIds = new Set([
3660
- ...markedWorkflows.map(({ workflowId }) => workflowId),
3661
- ...(createdWorkflowIds ?? []),
3662
- ]);
3663
- if (workflowIds.size === 0)
3664
- return [];
3665
- return await this.archiveAiTemporaryWorkflows(threadId, user, workflowIds);
3666
- }
3667
- async archiveAiTemporaryWorkflows(threadId, user, workflowIds) {
3668
- const adapter = this.adapterService.createContext(user, { threadId });
3669
- const archived = [];
3670
- for (const workflowId of workflowIds) {
3671
- try {
3672
- const didArchive = await adapter.workflowService.archiveIfAiTemporary(workflowId);
3673
- if (didArchive)
3674
- archived.push(workflowId);
3675
- }
3676
- catch (error) {
3677
- this.logger.warn('Failed to reap AI-builder temporary workflow', {
3678
- threadId,
3679
- workflowId,
3680
- error: getErrorMessage(error),
3681
- });
3682
- }
3683
- }
3684
- return archived;
3685
- }
3686
3753
  async finalizeCancelledSuspendedRun(suspended, reason = 'user_cancelled') {
3687
3754
  const runTimeout = reason === liveness_1.INSTANCE_AI_RUN_TIMEOUT_REASON
3688
3755
  ? this.liveness.consumeRunTimeout(suspended.runId)
@@ -3694,7 +3761,7 @@ let InstanceAiService = class InstanceAiService {
3694
3761
  status: 'cancelled',
3695
3762
  reason,
3696
3763
  });
3697
- const archivedWorkflowIds = await this.reapAiTemporaryFromRun(suspended.threadId, suspended.user, undefined);
3764
+ const archivedWorkflowIds = await this.temporaryWorkflowService.reapForRun(suspended.threadId, suspended.user, undefined, this.backgroundTasks.getRunningTasks(suspended.threadId).length);
3698
3765
  this.publishRunFinish(suspended.threadId, suspended.runId, 'cancelled', reason, archivedWorkflowIds);
3699
3766
  await this.saveAgentTreeSnapshot(suspended.threadId, suspended.runId, this.dbSnapshotStorage, true);
3700
3767
  await this.maybeFinalizeRunTraceRoot(suspended.runId, {
@@ -3708,62 +3775,6 @@ let InstanceAiService = class InstanceAiService {
3708
3775
  });
3709
3776
  void this.suspendedThreads.dropPendingConfirmation(suspended.requestId);
3710
3777
  }
3711
- async reapAiTemporaryForThreadCleanup(threadId) {
3712
- let markedWorkflows;
3713
- try {
3714
- markedWorkflows = await this.aiBuilderTemporaryWorkflowRepository.findByThread(threadId);
3715
- }
3716
- catch (error) {
3717
- this.logger.warn('Failed to inspect AI-builder temporary workflows during thread cleanup', {
3718
- threadId,
3719
- error: getErrorMessage(error),
3720
- });
3721
- return;
3722
- }
3723
- if (markedWorkflows.length === 0)
3724
- return;
3725
- let thread;
3726
- try {
3727
- thread = await this.threadRepo.findOneBy({ id: threadId });
3728
- }
3729
- catch (error) {
3730
- this.logger.warn('Failed to load thread owner for AI-builder temporary workflow cleanup', {
3731
- threadId,
3732
- markedWorkflowCount: markedWorkflows.length,
3733
- error: getErrorMessage(error),
3734
- });
3735
- return;
3736
- }
3737
- if (!thread?.resourceId) {
3738
- this.logger.warn('Skipping AI-builder temporary workflow cleanup for thread without owner', {
3739
- threadId,
3740
- markedWorkflowCount: markedWorkflows.length,
3741
- });
3742
- return;
3743
- }
3744
- let user;
3745
- try {
3746
- user = await this.userRepository.findOneBy({ id: thread.resourceId });
3747
- }
3748
- catch (error) {
3749
- this.logger.warn('Failed to load user for AI-builder temporary workflow cleanup', {
3750
- threadId,
3751
- userId: thread.resourceId,
3752
- markedWorkflowCount: markedWorkflows.length,
3753
- error: getErrorMessage(error),
3754
- });
3755
- return;
3756
- }
3757
- if (!user) {
3758
- this.logger.warn('Skipping AI-builder temporary workflow cleanup for missing thread owner', {
3759
- threadId,
3760
- userId: thread.resourceId,
3761
- markedWorkflowCount: markedWorkflows.length,
3762
- });
3763
- return;
3764
- }
3765
- await this.archiveAiTemporaryWorkflows(threadId, user, new Set(markedWorkflows.map(({ workflowId }) => workflowId)));
3766
- }
3767
3778
  publishRunFinish(threadId, runId, status, reason, archivedWorkflowIds) {
3768
3779
  const effectiveStatus = status === 'errored' ? 'error' : status;
3769
3780
  const hasArchived = archivedWorkflowIds && archivedWorkflowIds.length > 0;
@@ -3777,14 +3788,31 @@ let InstanceAiService = class InstanceAiService {
3777
3788
  ...(hasArchived ? { archivedWorkflowIds } : {}),
3778
3789
  },
3779
3790
  });
3791
+ this.telemetry.track('instance_ai_run_finished', {
3792
+ thread_id: threadId,
3793
+ run_id: runId,
3794
+ status: effectiveStatus,
3795
+ });
3780
3796
  }
3781
3797
  async finalizeRun(threadId, runId, status, snapshotStorage, options) {
3782
3798
  this.publishRunFinish(threadId, runId, status, undefined, options?.archivedWorkflowIds);
3799
+ this.emitRunMetrics(threadId, status, options);
3783
3800
  await this.saveAgentTreeSnapshot(threadId, runId, snapshotStorage);
3784
3801
  if (status === 'completed' && options?.userId && options?.modelId) {
3785
3802
  void this.refineTitleIfNeeded(threadId, options.userId, options.modelId);
3786
3803
  }
3787
3804
  }
3805
+ emitRunMetrics(threadId, status, options) {
3806
+ const startedAt = this.runState.getActiveRun(threadId)?.startedAt;
3807
+ this.eventService.emit('instance-ai-run-finished', {
3808
+ status: status === 'errored' ? 'error' : status,
3809
+ durationMs: startedAt !== undefined ? Date.now() - startedAt : undefined,
3810
+ model: typeof options?.modelId === 'string' ? options.modelId : 'custom',
3811
+ toolCalls: options?.workSummary?.totalToolCalls ?? 0,
3812
+ toolErrors: options?.workSummary?.totalToolErrors ?? 0,
3813
+ ...(options?.usage ? { usage: options.usage } : {}),
3814
+ });
3815
+ }
3788
3816
  async refineTitleIfNeeded(threadId, userId, modelId) {
3789
3817
  try {
3790
3818
  const memory = this.agentMemory;
@@ -3975,8 +4003,7 @@ exports.InstanceAiService = InstanceAiService = __decorate([
3975
4003
  typeorm_agent_memory_1.TypeORMAgentMemory,
3976
4004
  typeorm_agent_checkpoint_store_1.TypeORMAgentCheckpointStore,
3977
4005
  ai_service_1.AiService,
3978
- push_1.Push,
3979
- instance_ai_thread_repository_1.InstanceAiThreadRepository,
4006
+ instance_ai_thread_grant_repository_1.InstanceAiThreadGrantRepository,
3980
4007
  instance_ai_pending_confirmation_repository_1.InstanceAiPendingConfirmationRepository,
3981
4008
  url_service_1.UrlService,
3982
4009
  db_snapshot_storage_1.DbSnapshotStorage,
@@ -3985,10 +4012,14 @@ exports.InstanceAiService = InstanceAiService = __decorate([
3985
4012
  telemetry_1.Telemetry,
3986
4013
  mcp_1.InstanceAiMcpRegistryService,
3987
4014
  db_1.UserRepository,
3988
- db_1.AiBuilderTemporaryWorkflowRepository,
4015
+ instance_ai_temporary_workflow_service_1.InstanceAiTemporaryWorkflowService,
3989
4016
  n8n_core_1.ErrorReporter,
3990
4017
  config_1.SsrfProtectionConfig,
3991
4018
  backend_network_1.SsrfProtectionService,
3992
- event_service_1.EventService])
4019
+ event_service_1.EventService,
4020
+ thread_credential_allowlist_service_1.EvalThreadCredentialAllowlistService,
4021
+ instance_ai_run_probe_1.InstanceAiRunProbe,
4022
+ instance_ai_model_service_1.InstanceAiModelService,
4023
+ instance_ai_credit_service_1.InstanceAiCreditService])
3993
4024
  ], InstanceAiService);
3994
4025
  //# sourceMappingURL=instance-ai.service.js.map