n8n 2.18.3 → 2.19.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (377) hide show
  1. package/dist/abstract-server.d.ts +0 -1
  2. package/dist/abstract-server.js +11 -10
  3. package/dist/abstract-server.js.map +1 -1
  4. package/dist/active-executions.js +1 -0
  5. package/dist/active-executions.js.map +1 -1
  6. package/dist/build.tsbuildinfo +1 -1
  7. package/dist/collaboration/collaboration.service.d.ts +3 -1
  8. package/dist/collaboration/collaboration.service.js +19 -0
  9. package/dist/collaboration/collaboration.service.js.map +1 -1
  10. package/dist/commands/base-command.js +7 -1
  11. package/dist/commands/base-command.js.map +1 -1
  12. package/dist/commands/export/credentials.d.ts +5 -0
  13. package/dist/commands/export/credentials.js +21 -5
  14. package/dist/commands/export/credentials.js.map +1 -1
  15. package/dist/commands/export/workflow.d.ts +4 -0
  16. package/dist/commands/export/workflow.js +17 -5
  17. package/dist/commands/export/workflow.js.map +1 -1
  18. package/dist/controller.registry.js +3 -0
  19. package/dist/controller.registry.js.map +1 -1
  20. package/dist/controllers/e2e.controller.d.ts +35 -2
  21. package/dist/controllers/e2e.controller.js +129 -2
  22. package/dist/controllers/e2e.controller.js.map +1 -1
  23. package/dist/controllers/folder.controller.js +1 -1
  24. package/dist/controllers/folder.controller.js.map +1 -1
  25. package/dist/controllers/me.controller.js +3 -2
  26. package/dist/controllers/me.controller.js.map +1 -1
  27. package/dist/controllers/mfa.controller.js +1 -1
  28. package/dist/controllers/mfa.controller.js.map +1 -1
  29. package/dist/controllers/security-settings.controller.js +1 -1
  30. package/dist/controllers/security-settings.controller.js.map +1 -1
  31. package/dist/controllers/users.controller.d.ts +1 -3
  32. package/dist/controllers/users.controller.js +2 -16
  33. package/dist/controllers/users.controller.js.map +1 -1
  34. package/dist/credentials/credentials.service.js +4 -1
  35. package/dist/credentials/credentials.service.js.map +1 -1
  36. package/dist/credentials/external-secrets.utils.js +3 -3
  37. package/dist/credentials/external-secrets.utils.js.map +1 -1
  38. package/dist/credentials-helper.js +2 -1
  39. package/dist/credentials-helper.js.map +1 -1
  40. package/dist/deprecation/deprecation.service.js.map +1 -1
  41. package/dist/eventbus/event-message-classes/index.d.ts +2 -2
  42. package/dist/eventbus/event-message-classes/index.js +3 -0
  43. package/dist/eventbus/event-message-classes/index.js.map +1 -1
  44. package/dist/eventbus/message-event-bus-writer/message-event-bus-log-writer.d.ts +1 -0
  45. package/dist/eventbus/message-event-bus-writer/message-event-bus-log-writer.js +78 -38
  46. package/dist/eventbus/message-event-bus-writer/message-event-bus-log-writer.js.map +1 -1
  47. package/dist/events/maps/ai.event-map.d.ts +1 -0
  48. package/dist/events/maps/relay.event-map.d.ts +15 -0
  49. package/dist/events/relays/log-streaming.event-relay.d.ts +3 -0
  50. package/dist/events/relays/log-streaming.event-relay.js +35 -0
  51. package/dist/events/relays/log-streaming.event-relay.js.map +1 -1
  52. package/dist/execution-lifecycle/execution-lifecycle-hooks.js +18 -2
  53. package/dist/execution-lifecycle/execution-lifecycle-hooks.js.map +1 -1
  54. package/dist/execution-lifecycle/restore-binary-data-id.js +39 -21
  55. package/dist/execution-lifecycle/restore-binary-data-id.js.map +1 -1
  56. package/dist/executions/parse-range-query.middleware.js +6 -4
  57. package/dist/executions/parse-range-query.middleware.js.map +1 -1
  58. package/dist/expression-observability/expression-observability.constants.d.ts +8 -0
  59. package/dist/expression-observability/expression-observability.constants.js +14 -0
  60. package/dist/expression-observability/expression-observability.constants.js.map +1 -0
  61. package/dist/expression-observability/expression-observability.formatters.d.ts +4 -0
  62. package/dist/expression-observability/expression-observability.formatters.js +36 -0
  63. package/dist/expression-observability/expression-observability.formatters.js.map +1 -0
  64. package/dist/expression-observability/expression-observability.provider.d.ts +22 -0
  65. package/dist/expression-observability/expression-observability.provider.js +193 -0
  66. package/dist/expression-observability/expression-observability.provider.js.map +1 -0
  67. package/dist/external-hooks.js.map +1 -1
  68. package/dist/instance-settings-loader/instance-settings-loader.service.d.ts +5 -3
  69. package/dist/instance-settings-loader/instance-settings-loader.service.js +10 -6
  70. package/dist/instance-settings-loader/instance-settings-loader.service.js.map +1 -1
  71. package/dist/instance-settings-loader/loaders/log-streaming.instance-settings-loader.d.ts +12 -0
  72. package/dist/instance-settings-loader/loaders/log-streaming.instance-settings-loader.js +136 -0
  73. package/dist/instance-settings-loader/loaders/log-streaming.instance-settings-loader.js.map +1 -0
  74. package/dist/instance-settings-loader/loaders/sso.instance-settings-loader.d.ts +20 -0
  75. package/dist/instance-settings-loader/loaders/sso.instance-settings-loader.js +198 -0
  76. package/dist/instance-settings-loader/loaders/sso.instance-settings-loader.js.map +1 -0
  77. package/dist/middlewares/list-query/filter.d.ts +2 -3
  78. package/dist/middlewares/list-query/filter.js +3 -2
  79. package/dist/middlewares/list-query/filter.js.map +1 -1
  80. package/dist/middlewares/list-query/index.d.ts +2 -2
  81. package/dist/middlewares/list-query/index.js.map +1 -1
  82. package/dist/middlewares/list-query/pagination.js +8 -3
  83. package/dist/middlewares/list-query/pagination.js.map +1 -1
  84. package/dist/middlewares/list-query/select.js +3 -2
  85. package/dist/middlewares/list-query/select.js.map +1 -1
  86. package/dist/middlewares/list-query/sort-by.js +3 -2
  87. package/dist/middlewares/list-query/sort-by.js.map +1 -1
  88. package/dist/modules/chat-hub/chat-hub-workflow.service.js.map +1 -1
  89. package/dist/modules/chat-hub/chat-hub.types.d.ts +1 -1
  90. package/dist/modules/chat-hub/stream-capturer.js.map +1 -1
  91. package/dist/modules/community-packages/npm-utils.js +79 -3
  92. package/dist/modules/community-packages/npm-utils.js.map +1 -1
  93. package/dist/modules/data-table/data-table-column.repository.d.ts +2 -0
  94. package/dist/modules/data-table/data-table-column.repository.js +21 -5
  95. package/dist/modules/data-table/data-table-column.repository.js.map +1 -1
  96. package/dist/modules/data-table/data-table.service.d.ts +8 -2
  97. package/dist/modules/data-table/data-table.service.js +16 -2
  98. package/dist/modules/data-table/data-table.service.js.map +1 -1
  99. package/dist/modules/dynamic-credentials.ee/services/dynamic-credential.service.d.ts +2 -2
  100. package/dist/modules/dynamic-credentials.ee/services/dynamic-credential.service.js.map +1 -1
  101. package/dist/modules/dynamic-credentials.ee/utils.d.ts +2 -1
  102. package/dist/modules/dynamic-credentials.ee/utils.js.map +1 -1
  103. package/dist/modules/encryption-key-manager/encryption-bootstrap.service.d.ts +6 -0
  104. package/dist/modules/encryption-key-manager/encryption-bootstrap.service.js +28 -0
  105. package/dist/modules/encryption-key-manager/encryption-bootstrap.service.js.map +1 -0
  106. package/dist/modules/encryption-key-manager/encryption-key-manager.module.js +10 -1
  107. package/dist/modules/encryption-key-manager/encryption-key-manager.module.js.map +1 -1
  108. package/dist/modules/encryption-key-manager/encryption-key.controller.d.ts +8 -0
  109. package/dist/modules/encryption-key-manager/encryption-key.controller.js +62 -0
  110. package/dist/modules/encryption-key-manager/encryption-key.controller.js.map +1 -0
  111. package/dist/modules/encryption-key-manager/key-manager.service.d.ts +8 -5
  112. package/dist/modules/encryption-key-manager/key-manager.service.js +37 -10
  113. package/dist/modules/encryption-key-manager/key-manager.service.js.map +1 -1
  114. package/dist/modules/insights/database/entities/insights-by-period.js +8 -6
  115. package/dist/modules/insights/database/entities/insights-by-period.js.map +1 -1
  116. package/dist/modules/insights/database/entities/insights-raw.js +4 -3
  117. package/dist/modules/insights/database/entities/insights-raw.js.map +1 -1
  118. package/dist/modules/insights/database/entities/insights-shared.d.ts +6 -6
  119. package/dist/modules/insights/database/entities/insights-shared.js +3 -8
  120. package/dist/modules/insights/database/entities/insights-shared.js.map +1 -1
  121. package/dist/modules/instance-ai/entities/instance-ai-run-snapshot.entity.d.ts +2 -0
  122. package/dist/modules/instance-ai/entities/instance-ai-run-snapshot.entity.js +8 -0
  123. package/dist/modules/instance-ai/entities/instance-ai-run-snapshot.entity.js.map +1 -1
  124. package/dist/modules/instance-ai/eval/execution.service.js +4 -5
  125. package/dist/modules/instance-ai/eval/execution.service.js.map +1 -1
  126. package/dist/modules/instance-ai/eval/sub-agent-eval.service.d.ts +13 -0
  127. package/dist/modules/instance-ai/eval/sub-agent-eval.service.js +132 -0
  128. package/dist/modules/instance-ai/eval/sub-agent-eval.service.js.map +1 -0
  129. package/dist/modules/instance-ai/eval/sub-agent-roles.d.ts +7 -0
  130. package/dist/modules/instance-ai/eval/sub-agent-roles.js +21 -0
  131. package/dist/modules/instance-ai/eval/sub-agent-roles.js.map +1 -0
  132. package/dist/modules/instance-ai/eval/workflow-analysis.js +59 -51
  133. package/dist/modules/instance-ai/eval/workflow-analysis.js.map +1 -1
  134. package/dist/modules/instance-ai/filesystem/local-gateway.d.ts +7 -2
  135. package/dist/modules/instance-ai/filesystem/local-gateway.js +7 -0
  136. package/dist/modules/instance-ai/filesystem/local-gateway.js.map +1 -1
  137. package/dist/modules/instance-ai/instance-ai.adapter.service.d.ts +3 -2
  138. package/dist/modules/instance-ai/instance-ai.adapter.service.js +92 -9
  139. package/dist/modules/instance-ai/instance-ai.adapter.service.js.map +1 -1
  140. package/dist/modules/instance-ai/instance-ai.controller.d.ts +11 -2
  141. package/dist/modules/instance-ai/instance-ai.controller.js +66 -3
  142. package/dist/modules/instance-ai/instance-ai.controller.js.map +1 -1
  143. package/dist/modules/instance-ai/instance-ai.module.js +1 -1
  144. package/dist/modules/instance-ai/instance-ai.module.js.map +1 -1
  145. package/dist/modules/instance-ai/instance-ai.service.d.ts +14 -3
  146. package/dist/modules/instance-ai/instance-ai.service.js +266 -42
  147. package/dist/modules/instance-ai/instance-ai.service.js.map +1 -1
  148. package/dist/modules/instance-ai/storage/db-snapshot-storage.d.ts +12 -2
  149. package/dist/modules/instance-ai/storage/db-snapshot-storage.js +25 -3
  150. package/dist/modules/instance-ai/storage/db-snapshot-storage.js.map +1 -1
  151. package/dist/modules/instance-ai/web-research/cache.js.map +1 -1
  152. package/dist/modules/instance-registry/instance-registry.module.js +4 -1
  153. package/dist/modules/instance-registry/instance-registry.module.js.map +1 -1
  154. package/dist/modules/ldap.ee/helpers.ee.js +13 -0
  155. package/dist/modules/ldap.ee/helpers.ee.js.map +1 -1
  156. package/dist/modules/ldap.ee/ldap.service.ee.d.ts +1 -0
  157. package/dist/modules/ldap.ee/ldap.service.ee.js +33 -8
  158. package/dist/modules/ldap.ee/ldap.service.ee.js.map +1 -1
  159. package/dist/modules/log-streaming.ee/destinations/message-event-bus-destination-webhook.ee.js.map +1 -1
  160. package/dist/modules/log-streaming.ee/log-streaming.controller.d.ts +4 -1
  161. package/dist/modules/log-streaming.ee/log-streaming.controller.js +13 -2
  162. package/dist/modules/log-streaming.ee/log-streaming.controller.js.map +1 -1
  163. package/dist/modules/mcp/mcp-api-key.service.d.ts +4 -3
  164. package/dist/modules/mcp/mcp-api-key.service.js +17 -24
  165. package/dist/modules/mcp/mcp-api-key.service.js.map +1 -1
  166. package/dist/modules/mcp/mcp-oauth-consent.service.js +2 -2
  167. package/dist/modules/mcp/mcp-oauth-consent.service.js.map +1 -1
  168. package/dist/modules/mcp/mcp-server-middleware.service.d.ts +2 -2
  169. package/dist/modules/mcp/mcp-server-middleware.service.js +3 -3
  170. package/dist/modules/mcp/mcp-server-middleware.service.js.map +1 -1
  171. package/dist/modules/mcp/mcp.service.d.ts +3 -1
  172. package/dist/modules/mcp/mcp.service.js +9 -6
  173. package/dist/modules/mcp/mcp.service.js.map +1 -1
  174. package/dist/modules/mcp/mcp.settings.controller.d.ts +3 -1
  175. package/dist/modules/mcp/mcp.settings.controller.js +15 -2
  176. package/dist/modules/mcp/mcp.settings.controller.js.map +1 -1
  177. package/dist/modules/mcp/mcp.types.d.ts +1 -0
  178. package/dist/modules/mcp/tools/execute-workflow.tool.d.ts +6 -6
  179. package/dist/modules/mcp/tools/publish-workflow.tool.d.ts +2 -1
  180. package/dist/modules/mcp/tools/publish-workflow.tool.js +3 -1
  181. package/dist/modules/mcp/tools/publish-workflow.tool.js.map +1 -1
  182. package/dist/modules/mcp/tools/unpublish-workflow.tool.d.ts +2 -1
  183. package/dist/modules/mcp/tools/unpublish-workflow.tool.js +3 -1
  184. package/dist/modules/mcp/tools/unpublish-workflow.tool.js.map +1 -1
  185. package/dist/modules/mcp/tools/workflow-builder/create-workflow-from-code.tool.js +1 -0
  186. package/dist/modules/mcp/tools/workflow-builder/create-workflow-from-code.tool.js.map +1 -1
  187. package/dist/modules/mcp/tools/workflow-builder/delete-workflow.tool.d.ts +3 -1
  188. package/dist/modules/mcp/tools/workflow-builder/delete-workflow.tool.js +5 -1
  189. package/dist/modules/mcp/tools/workflow-builder/delete-workflow.tool.js.map +1 -1
  190. package/dist/modules/mcp/tools/workflow-builder/update-workflow.tool.d.ts +2 -1
  191. package/dist/modules/mcp/tools/workflow-builder/update-workflow.tool.js +4 -1
  192. package/dist/modules/mcp/tools/workflow-builder/update-workflow.tool.js.map +1 -1
  193. package/dist/modules/otel/execution-level-tracer.d.ts +22 -0
  194. package/dist/modules/otel/execution-level-tracer.js +241 -0
  195. package/dist/modules/otel/execution-level-tracer.js.map +1 -0
  196. package/dist/modules/otel/execution-level-tracer.types.d.ts +41 -0
  197. package/dist/modules/otel/execution-level-tracer.types.js +3 -0
  198. package/dist/modules/otel/execution-level-tracer.types.js.map +1 -0
  199. package/dist/modules/otel/otel-lifecycle-handler.d.ts +17 -0
  200. package/dist/modules/otel/otel-lifecycle-handler.js +157 -0
  201. package/dist/modules/otel/otel-lifecycle-handler.js.map +1 -0
  202. package/dist/modules/otel/otel.config.d.ts +1 -0
  203. package/dist/modules/otel/otel.config.js +5 -0
  204. package/dist/modules/otel/otel.config.js.map +1 -1
  205. package/dist/modules/otel/otel.constants.d.ts +1 -0
  206. package/dist/modules/otel/otel.constants.js +1 -0
  207. package/dist/modules/otel/otel.constants.js.map +1 -1
  208. package/dist/modules/otel/otel.module.d.ts +2 -1
  209. package/dist/modules/otel/otel.module.js +12 -1
  210. package/dist/modules/otel/otel.module.js.map +1 -1
  211. package/dist/modules/otel/tracing-context.d.ts +13 -0
  212. package/dist/modules/otel/tracing-context.js +55 -0
  213. package/dist/modules/otel/tracing-context.js.map +1 -0
  214. package/dist/modules/provisioning.ee/provisioning.controller.ee.d.ts +5 -5
  215. package/dist/modules/provisioning.ee/provisioning.controller.ee.js +8 -8
  216. package/dist/modules/provisioning.ee/provisioning.controller.ee.js.map +1 -1
  217. package/dist/modules/provisioning.ee/provisioning.service.ee.d.ts +3 -2
  218. package/dist/modules/provisioning.ee/provisioning.service.ee.js +30 -15
  219. package/dist/modules/provisioning.ee/provisioning.service.ee.js.map +1 -1
  220. package/dist/modules/provisioning.ee/role-mapping-rule.service.ee.d.ts +2 -0
  221. package/dist/modules/provisioning.ee/role-mapping-rule.service.ee.js +18 -3
  222. package/dist/modules/provisioning.ee/role-mapping-rule.service.ee.js.map +1 -1
  223. package/dist/modules/quick-connect/quick-connect.config.js.map +1 -1
  224. package/dist/modules/sso-oidc/oidc.controller.ee.d.ts +3 -4
  225. package/dist/modules/sso-oidc/oidc.controller.ee.js +6 -6
  226. package/dist/modules/sso-oidc/oidc.controller.ee.js.map +1 -1
  227. package/dist/modules/sso-saml/saml-helpers.d.ts +1 -0
  228. package/dist/modules/sso-saml/saml-helpers.js +15 -1
  229. package/dist/modules/sso-saml/saml-helpers.js.map +1 -1
  230. package/dist/modules/sso-saml/saml.controller.ee.d.ts +3 -1
  231. package/dist/modules/sso-saml/saml.controller.ee.js +45 -14
  232. package/dist/modules/sso-saml/saml.controller.ee.js.map +1 -1
  233. package/dist/modules/sso-saml/saml.service.ee.d.ts +8 -3
  234. package/dist/modules/sso-saml/saml.service.ee.js +43 -18
  235. package/dist/modules/sso-saml/saml.service.ee.js.map +1 -1
  236. package/dist/modules/token-exchange/services/scoped-jwt.strategy.d.ts +3 -2
  237. package/dist/modules/token-exchange/services/scoped-jwt.strategy.js +17 -6
  238. package/dist/modules/token-exchange/services/scoped-jwt.strategy.js.map +1 -1
  239. package/dist/modules/token-exchange/services/trusted-key.service.d.ts +0 -1
  240. package/dist/modules/token-exchange/services/trusted-key.service.js +8 -9
  241. package/dist/modules/token-exchange/services/trusted-key.service.js.map +1 -1
  242. package/dist/oauth/oauth.service.d.ts +1 -0
  243. package/dist/oauth/oauth.service.js +12 -1
  244. package/dist/oauth/oauth.service.js.map +1 -1
  245. package/dist/public-api/index.js +0 -3
  246. package/dist/public-api/index.js.map +1 -1
  247. package/dist/public-api/types.d.ts +15 -1
  248. package/dist/public-api/v1/handlers/credentials/credentials.service.js +10 -2
  249. package/dist/public-api/v1/handlers/credentials/credentials.service.js.map +1 -1
  250. package/dist/public-api/v1/handlers/data-tables/data-tables.columns.handler.d.ts +21 -0
  251. package/dist/public-api/v1/handlers/data-tables/data-tables.columns.handler.js +85 -0
  252. package/dist/public-api/v1/handlers/data-tables/data-tables.columns.handler.js.map +1 -0
  253. package/dist/public-api/v1/handlers/data-tables/data-tables.handler.js +10 -10
  254. package/dist/public-api/v1/handlers/data-tables/data-tables.handler.js.map +1 -1
  255. package/dist/public-api/v1/handlers/data-tables/data-tables.rows.handler.js +7 -18
  256. package/dist/public-api/v1/handlers/data-tables/data-tables.rows.handler.js.map +1 -1
  257. package/dist/public-api/v1/handlers/data-tables/data-tables.service.d.ts +0 -1
  258. package/dist/public-api/v1/handlers/data-tables/data-tables.service.js +0 -13
  259. package/dist/public-api/v1/handlers/data-tables/data-tables.service.js.map +1 -1
  260. package/dist/public-api/v1/handlers/folders/folders.handler.d.ts +29 -0
  261. package/dist/public-api/v1/handlers/folders/folders.handler.js +112 -0
  262. package/dist/public-api/v1/handlers/folders/folders.handler.js.map +1 -0
  263. package/dist/public-api/v1/handlers/users/users.handler.ee.js +2 -12
  264. package/dist/public-api/v1/handlers/users/users.handler.ee.js.map +1 -1
  265. package/dist/public-api/v1/openapi.yml +494 -0
  266. package/dist/public-api/v1/shared/handler.types.d.ts +3 -0
  267. package/dist/{modules/otel/handlers/interfaces.js → public-api/v1/shared/handler.types.js} +1 -1
  268. package/dist/public-api/v1/shared/handler.types.js.map +1 -0
  269. package/dist/public-api/v1/shared/middlewares/global.middleware.d.ts +3 -1
  270. package/dist/public-api/v1/shared/middlewares/global.middleware.js.map +1 -1
  271. package/dist/public-api/v1/shared/services/utils.service.d.ts +3 -0
  272. package/dist/public-api/v1/shared/services/utils.service.js +18 -0
  273. package/dist/public-api/v1/shared/services/utils.service.js.map +1 -0
  274. package/dist/push/index.d.ts +1 -1
  275. package/dist/push/index.js +11 -1
  276. package/dist/push/index.js.map +1 -1
  277. package/dist/push/push-helpers.d.ts +6 -0
  278. package/dist/push/push-helpers.js +20 -0
  279. package/dist/push/push-helpers.js.map +1 -0
  280. package/dist/requests.d.ts +2 -0
  281. package/dist/requests.js +5 -0
  282. package/dist/requests.js.map +1 -1
  283. package/dist/scaling/job-processor.js +7 -2
  284. package/dist/scaling/job-processor.js.map +1 -1
  285. package/dist/scaling/multi-main-setup.ee.js +1 -1
  286. package/dist/scaling/multi-main-setup.ee.js.map +1 -1
  287. package/dist/server.js +4 -0
  288. package/dist/server.js.map +1 -1
  289. package/dist/services/ai-gateway.service.d.ts +4 -1
  290. package/dist/services/ai-gateway.service.js +17 -2
  291. package/dist/services/ai-gateway.service.js.map +1 -1
  292. package/dist/services/api-key-auth.strategy.d.ts +3 -2
  293. package/dist/services/api-key-auth.strategy.js +24 -13
  294. package/dist/services/api-key-auth.strategy.js.map +1 -1
  295. package/dist/services/auth-strategy.registry.d.ts +3 -2
  296. package/dist/services/auth-strategy.registry.js +12 -0
  297. package/dist/services/auth-strategy.registry.js.map +1 -1
  298. package/dist/services/auth-strategy.types.d.ts +7 -1
  299. package/dist/services/dynamic-node-parameters.service.js +23 -8
  300. package/dist/services/dynamic-node-parameters.service.js.map +1 -1
  301. package/dist/services/folder.service.d.ts +3 -2
  302. package/dist/services/folder.service.js +4 -2
  303. package/dist/services/folder.service.js.map +1 -1
  304. package/dist/services/frontend.service.d.ts +1 -0
  305. package/dist/services/frontend.service.js +9 -1
  306. package/dist/services/frontend.service.js.map +1 -1
  307. package/dist/services/instance-registry-proxy.service.d.ts +11 -0
  308. package/dist/services/instance-registry-proxy.service.js +33 -0
  309. package/dist/services/instance-registry-proxy.service.js.map +1 -0
  310. package/dist/services/last-active-at.service.d.ts +1 -2
  311. package/dist/services/last-active-at.service.js.map +1 -1
  312. package/dist/services/rate-limit.service.js.map +1 -1
  313. package/dist/services/redis-client.service.js +1 -1
  314. package/dist/services/redis-client.service.js.map +1 -1
  315. package/dist/services/user.service.d.ts +4 -1
  316. package/dist/services/user.service.js +26 -2
  317. package/dist/services/user.service.js.map +1 -1
  318. package/dist/task-runners/task-managers/task-requester.js +1 -1
  319. package/dist/task-runners/task-managers/task-requester.js.map +1 -1
  320. package/dist/task-runners/task-runner-module.js.map +1 -1
  321. package/dist/utils/inverter.d.ts +1 -0
  322. package/dist/utils/inverter.js +11 -0
  323. package/dist/utils/inverter.js.map +1 -0
  324. package/dist/webhooks/live-webhooks.d.ts +3 -2
  325. package/dist/webhooks/live-webhooks.js +8 -3
  326. package/dist/webhooks/live-webhooks.js.map +1 -1
  327. package/dist/webhooks/node-type-matcher.d.ts +3 -0
  328. package/dist/webhooks/node-type-matcher.js +7 -0
  329. package/dist/webhooks/node-type-matcher.js.map +1 -0
  330. package/dist/webhooks/test-webhooks.d.ts +5 -3
  331. package/dist/webhooks/test-webhooks.js +14 -5
  332. package/dist/webhooks/test-webhooks.js.map +1 -1
  333. package/dist/webhooks/waiting-webhooks.d.ts +4 -1
  334. package/dist/webhooks/waiting-webhooks.js +17 -2
  335. package/dist/webhooks/waiting-webhooks.js.map +1 -1
  336. package/dist/webhooks/webhook-helpers.js +10 -0
  337. package/dist/webhooks/webhook-helpers.js.map +1 -1
  338. package/dist/webhooks/webhook-request-handler.d.ts +3 -2
  339. package/dist/webhooks/webhook-request-handler.js +8 -6
  340. package/dist/webhooks/webhook-request-handler.js.map +1 -1
  341. package/dist/webhooks/webhook.service.js +2 -2
  342. package/dist/webhooks/webhook.service.js.map +1 -1
  343. package/dist/webhooks/webhook.types.d.ts +3 -1
  344. package/dist/workflow-execute-additional-data.d.ts +6 -2
  345. package/dist/workflow-execute-additional-data.js +3 -1
  346. package/dist/workflow-execute-additional-data.js.map +1 -1
  347. package/dist/workflow-runner.js.map +1 -1
  348. package/dist/workflows/workflow-validation.service.js +3 -0
  349. package/dist/workflows/workflow-validation.service.js.map +1 -1
  350. package/dist/workflows/workflow.service.d.ts +1 -0
  351. package/dist/workflows/workflow.service.js +6 -1
  352. package/dist/workflows/workflow.service.js.map +1 -1
  353. package/dist/workflows/workflows.controller.d.ts +2 -2
  354. package/package.json +34 -33
  355. package/dist/instance-settings-loader/loaders/oidc.instance-settings-loader.d.ts +0 -13
  356. package/dist/instance-settings-loader/loaders/oidc.instance-settings-loader.js +0 -116
  357. package/dist/instance-settings-loader/loaders/oidc.instance-settings-loader.js.map +0 -1
  358. package/dist/modules/otel/handlers/interfaces.d.ts +0 -5
  359. package/dist/modules/otel/handlers/interfaces.js.map +0 -1
  360. package/dist/modules/otel/handlers/node-end.handler.d.ts +0 -8
  361. package/dist/modules/otel/handlers/node-end.handler.js +0 -71
  362. package/dist/modules/otel/handlers/node-end.handler.js.map +0 -1
  363. package/dist/modules/otel/handlers/node-start.handler.d.ts +0 -7
  364. package/dist/modules/otel/handlers/node-start.handler.js +0 -37
  365. package/dist/modules/otel/handlers/node-start.handler.js.map +0 -1
  366. package/dist/modules/otel/handlers/workflow-end.handler.d.ts +0 -8
  367. package/dist/modules/otel/handlers/workflow-end.handler.js +0 -73
  368. package/dist/modules/otel/handlers/workflow-end.handler.js.map +0 -1
  369. package/dist/modules/otel/handlers/workflow-start.handler.d.ts +0 -7
  370. package/dist/modules/otel/handlers/workflow-start.handler.js +0 -30
  371. package/dist/modules/otel/handlers/workflow-start.handler.js.map +0 -1
  372. package/dist/modules/otel/n8n-instrumentation.d.ts +0 -21
  373. package/dist/modules/otel/n8n-instrumentation.js +0 -103
  374. package/dist/modules/otel/n8n-instrumentation.js.map +0 -1
  375. package/dist/modules/otel/span-registry.d.ts +0 -14
  376. package/dist/modules/otel/span-registry.js +0 -58
  377. package/dist/modules/otel/span-registry.js.map +0 -1
@@ -47,11 +47,14 @@ const api_types_1 = require("@n8n/api-types");
47
47
  const backend_common_1 = require("@n8n/backend-common");
48
48
  const config_1 = require("@n8n/config");
49
49
  const constants_1 = require("@n8n/constants");
50
+ const db_1 = require("@n8n/db");
50
51
  const di_1 = require("@n8n/di");
51
52
  const url_service_1 = require("../../services/url.service");
52
53
  const instance_ai_1 = require("@n8n/instance-ai");
53
54
  const workflow_sdk_1 = require("@n8n/workflow-sdk");
54
55
  const nanoid_1 = require("nanoid");
56
+ const uuid_1 = require("uuid");
57
+ const constants_2 = require("../../constants");
55
58
  const source_control_preferences_service_ee_1 = require("../../modules/source-control.ee/source-control-preferences.service.ee");
56
59
  const ai_service_1 = require("../../services/ai.service");
57
60
  const push_1 = require("../../push");
@@ -75,6 +78,7 @@ function createInertAbortSignal() {
75
78
  return new AbortController().signal;
76
79
  }
77
80
  const ORCHESTRATOR_AGENT_ID = 'agent-001';
81
+ const INSTANCE_AI_FEEDBACK_NAMESPACE = 'c5be4c87-5b6e-49ed-afe1-9c5c1f99a5c0';
78
82
  const MAX_CONCURRENT_BACKGROUND_TASKS_PER_THREAD = 5;
79
83
  function getProxyFetch() {
80
84
  const proxyUrl = process.env.HTTPS_PROXY || process.env.HTTP_PROXY;
@@ -88,7 +92,7 @@ function getProxyFetch() {
88
92
  }));
89
93
  }
90
94
  let InstanceAiService = class InstanceAiService {
91
- constructor(logger, globalConfig, adapterService, eventBus, settingsService, compositeStore, compactionService, aiService, push, threadRepo, urlService, dbSnapshotStorage, dbIterationLogStorage, sourceControlPreferencesService, telemetry) {
95
+ constructor(logger, globalConfig, adapterService, eventBus, settingsService, compositeStore, compactionService, aiService, push, threadRepo, urlService, dbSnapshotStorage, dbIterationLogStorage, sourceControlPreferencesService, telemetry, userRepository, aiBuilderTemporaryWorkflowRepository) {
92
96
  this.adapterService = adapterService;
93
97
  this.eventBus = eventBus;
94
98
  this.settingsService = settingsService;
@@ -102,6 +106,8 @@ let InstanceAiService = class InstanceAiService {
102
106
  this.dbIterationLogStorage = dbIterationLogStorage;
103
107
  this.sourceControlPreferencesService = sourceControlPreferencesService;
104
108
  this.telemetry = telemetry;
109
+ this.userRepository = userRepository;
110
+ this.aiBuilderTemporaryWorkflowRepository = aiBuilderTemporaryWorkflowRepository;
105
111
  this.mcpClientManager = new instance_ai_1.McpClientManager();
106
112
  this.runState = new instance_ai_1.RunStateRegistry();
107
113
  this.backgroundTasks = new instance_ai_1.BackgroundTaskManager(MAX_CONCURRENT_BACKGROUND_TASKS_PER_THREAD);
@@ -218,9 +224,9 @@ let InstanceAiService = class InstanceAiService {
218
224
  if (!config.enabled)
219
225
  return undefined;
220
226
  if (config.provider === 'daytona') {
221
- return new instance_ai_1.BuilderSandboxFactory(config, new instance_ai_1.SnapshotManager(config.image, this.logger));
227
+ return new instance_ai_1.BuilderSandboxFactory(config, new instance_ai_1.SnapshotManager(config.image, this.logger), this.logger);
222
228
  }
223
- return new instance_ai_1.BuilderSandboxFactory(config);
229
+ return new instance_ai_1.BuilderSandboxFactory(config, undefined, this.logger);
224
230
  }
225
231
  async getOrCreateWorkspace(threadId, user) {
226
232
  const existing = this.sandboxes.get(threadId);
@@ -262,6 +268,20 @@ let InstanceAiService = class InstanceAiService {
262
268
  headers: { Authorization: `${token.tokenType} ${token.accessToken}` },
263
269
  };
264
270
  }
271
+ async resolveAgentModelConfig(user) {
272
+ if (this.aiService.isProxyEnabled()) {
273
+ const client = await this.aiService.getClient();
274
+ const proxyBaseUrl = client.getApiProxyBaseUrl();
275
+ const tokenManager = new proxy_token_manager_1.ProxyTokenManager(async () => {
276
+ return await client.getBuilderApiProxyToken({ id: user.id }, { userMessageId: (0, nanoid_1.nanoid)() });
277
+ });
278
+ return await this.resolveProxyModel(user, proxyBaseUrl, tokenManager);
279
+ }
280
+ const httpProxyModel = await this.resolveHttpProxyModel(user);
281
+ if (httpProxyModel)
282
+ return httpProxyModel;
283
+ return await this.settingsService.resolveModelConfig(user);
284
+ }
265
285
  async resolveProxyModel(user, proxyBaseUrl, tokenManager) {
266
286
  const modelName = await this.settingsService.resolveModelName(user);
267
287
  const { createAnthropic } = await Promise.resolve().then(() => __importStar(require('@ai-sdk/anthropic')));
@@ -274,6 +294,9 @@ let InstanceAiService = class InstanceAiService {
274
294
  for (const [k, v] of Object.entries(auth)) {
275
295
  headers.set(k, v);
276
296
  }
297
+ for (const [k, v] of Object.entries((0, api_types_1.buildProxyHeaders)({ feature: 'instance-ai', n8nVersion: constants_2.N8N_VERSION }))) {
298
+ headers.set(k, v);
299
+ }
277
300
  return await globalThis.fetch(input, { ...init, headers });
278
301
  },
279
302
  });
@@ -305,7 +328,18 @@ let InstanceAiService = class InstanceAiService {
305
328
  return;
306
329
  if (this.creditedThreads.has(threadId))
307
330
  return;
308
- const thread = await this.threadRepo.findOneBy({ id: threadId });
331
+ let thread;
332
+ try {
333
+ thread = await this.threadRepo.findOneBy({ id: threadId });
334
+ }
335
+ catch (error) {
336
+ this.logger.warn('Failed to check Instance AI credit status', {
337
+ threadId,
338
+ runId,
339
+ error: getErrorMessage(error),
340
+ });
341
+ return;
342
+ }
309
343
  if (!thread)
310
344
  return;
311
345
  if (thread.metadata?.creditCounted) {
@@ -502,6 +536,63 @@ let InstanceAiService = class InstanceAiService {
502
536
  },
503
537
  });
504
538
  }
539
+ async submitLangsmithFeedback(user, threadId, responseId, payload) {
540
+ const anchor = await this.dbSnapshotStorage.findLangsmithAnchor(threadId, responseId);
541
+ if (!anchor) {
542
+ this.logger.debug('No LangSmith anchor for feedback; skipping annotation', {
543
+ threadId,
544
+ responseId,
545
+ });
546
+ return;
547
+ }
548
+ let tracingProxyConfig;
549
+ if (this.aiService.isProxyEnabled()) {
550
+ try {
551
+ const client = await this.aiService.getClient();
552
+ const baseUrl = client.getApiProxyBaseUrl();
553
+ const manager = new proxy_token_manager_1.ProxyTokenManager(async () => await client.getBuilderApiProxyToken({ id: user.id }, { userMessageId: (0, nanoid_1.nanoid)() }));
554
+ tracingProxyConfig = {
555
+ apiUrl: baseUrl + '/langsmith',
556
+ getAuthHeaders: async () => await manager.getAuthHeaders(),
557
+ };
558
+ }
559
+ catch (error) {
560
+ this.logger.warn('Failed to build LangSmith proxy config for feedback', {
561
+ threadId,
562
+ responseId,
563
+ error: getErrorMessage(error),
564
+ });
565
+ return;
566
+ }
567
+ }
568
+ const key = 'user_score';
569
+ const feedbackId = (0, uuid_1.v5)(`${key}:${responseId}`, INSTANCE_AI_FEEDBACK_NAMESPACE);
570
+ try {
571
+ await (0, instance_ai_1.submitLangsmithUserFeedback)({
572
+ langsmithRunId: anchor.langsmithRunId,
573
+ langsmithTraceId: anchor.langsmithTraceId,
574
+ key,
575
+ score: payload.rating === 'up' ? 1 : 0,
576
+ value: payload.rating,
577
+ comment: payload.comment,
578
+ feedbackId,
579
+ sourceInfo: {
580
+ thread_id: threadId,
581
+ response_id: responseId,
582
+ user_id: user.id,
583
+ rating: payload.rating,
584
+ },
585
+ proxyConfig: tracingProxyConfig,
586
+ });
587
+ }
588
+ catch (error) {
589
+ this.logger.warn('Failed to submit LangSmith feedback', {
590
+ threadId,
591
+ responseId,
592
+ error: getErrorMessage(error),
593
+ });
594
+ }
595
+ }
505
596
  startRun(user, threadId, message, researchMode, attachments, timeZone, pushRef) {
506
597
  const { runId, abortController, messageGroupId } = this.runState.startRun({
507
598
  threadId,
@@ -549,25 +640,7 @@ let InstanceAiService = class InstanceAiService {
549
640
  }
550
641
  if (suspended) {
551
642
  suspended.abortController.abort();
552
- void this.finalizeRunTracing(suspended.runId, suspended.tracing, {
553
- status: 'cancelled',
554
- reason: 'user_cancelled',
555
- });
556
- this.eventBus.publish(threadId, {
557
- type: 'run-finish',
558
- runId: suspended.runId,
559
- agentId: ORCHESTRATOR_AGENT_ID,
560
- payload: { status: 'cancelled', reason: 'user_cancelled' },
561
- });
562
- void this.saveAgentTreeSnapshot(threadId, suspended.runId, this.dbSnapshotStorage, true);
563
- if (suspended.mastraRunId) {
564
- void this.cleanupMastraSnapshots(suspended.mastraRunId);
565
- }
566
- void this.maybeFinalizeRunTraceRoot(suspended.runId, {
567
- status: 'cancelled',
568
- reason: 'user_cancelled',
569
- metadata: { completion_source: 'orchestrator' },
570
- });
643
+ void this.finalizeCancelledSuspendedRun(suspended);
571
644
  }
572
645
  }
573
646
  sendCorrectionToTask(threadId, taskId, correction) {
@@ -632,6 +705,10 @@ let InstanceAiService = class InstanceAiService {
632
705
  }
633
706
  initGateway(userId, data) {
634
707
  this.gatewayRegistry.initGateway(userId, data);
708
+ this.telemetry.track('User connected to Computer Use', {
709
+ user_id: userId,
710
+ tool_groups: data.toolCategories.filter((c) => c.enabled).map((c) => c.name),
711
+ });
635
712
  }
636
713
  resolveGatewayRequest(userId, requestId, result, error) {
637
714
  return this.gatewayRegistry.resolveGatewayRequest(userId, requestId, result, error);
@@ -687,6 +764,7 @@ let InstanceAiService = class InstanceAiService {
687
764
  this.threadPushRef.delete(threadId);
688
765
  this.deleteTraceContextsForThread(threadId);
689
766
  await this.destroySandbox(threadId);
767
+ await this.reapAiTemporaryForThreadCleanup(threadId);
690
768
  this.eventBus.clearThread(threadId);
691
769
  }
692
770
  async shutdown() {
@@ -823,13 +901,23 @@ let InstanceAiService = class InstanceAiService {
823
901
  return await client.getBuilderApiProxyToken({ id: user.id }, { userMessageId: (0, nanoid_1.nanoid)() });
824
902
  });
825
903
  tokenManager = manager;
904
+ const featureHeaders = (0, api_types_1.buildProxyHeaders)({
905
+ feature: 'instance-ai',
906
+ n8nVersion: constants_2.N8N_VERSION,
907
+ });
826
908
  searchProxyConfig = {
827
909
  apiUrl: proxyBaseUrl + '/brave-search',
828
- getAuthHeaders: async () => await manager.getAuthHeaders(),
910
+ getAuthHeaders: async () => ({
911
+ ...(await manager.getAuthHeaders()),
912
+ ...featureHeaders,
913
+ }),
829
914
  };
830
915
  tracingProxyConfig = {
831
916
  apiUrl: proxyBaseUrl + '/langsmith',
832
- getAuthHeaders: async () => await manager.getAuthHeaders(),
917
+ getAuthHeaders: async () => ({
918
+ ...(await manager.getAuthHeaders()),
919
+ ...featureHeaders,
920
+ }),
833
921
  };
834
922
  }
835
923
  const context = this.adapterService.createContext(user, {
@@ -866,8 +954,7 @@ let InstanceAiService = class InstanceAiService {
866
954
  }
867
955
  const modelId = proxyBaseUrl && tokenManager
868
956
  ? await this.resolveProxyModel(user, proxyBaseUrl, tokenManager)
869
- : ((await this.resolveHttpProxyModel(user)) ??
870
- (await this.settingsService.resolveModelConfig(user)));
957
+ : await this.resolveAgentModelConfig(user);
871
958
  const memory = (0, instance_ai_1.createMemory)(this.createMemoryConfig());
872
959
  await this.ensureThreadExists(memory, threadId, user.id);
873
960
  const taskStorage = new instance_ai_1.MastraTaskStorage(memory);
@@ -1031,7 +1118,7 @@ let InstanceAiService = class InstanceAiService {
1031
1118
  }
1032
1119
  await this.schedulePlannedTasks(user, task.threadId);
1033
1120
  }
1034
- async startInternalFollowUpRun(user, threadId, message, researchMode, messageGroupId) {
1121
+ async startInternalFollowUpRun(user, threadId, message, researchMode, messageGroupId, isReplanFollowUp = false) {
1035
1122
  if (this.runState.hasLiveRun(threadId)) {
1036
1123
  this.logger.warn('Skipping internal follow-up: active run exists', { threadId });
1037
1124
  return '';
@@ -1042,7 +1129,7 @@ let InstanceAiService = class InstanceAiService {
1042
1129
  researchMode,
1043
1130
  messageGroupId,
1044
1131
  });
1045
- void this.executeRun(user, threadId, runId, message, abortController, researchMode, undefined, messageGroupId);
1132
+ void this.executeRun(user, threadId, runId, message, abortController, researchMode, undefined, messageGroupId, undefined, isReplanFollowUp);
1046
1133
  return runId;
1047
1134
  }
1048
1135
  async schedulePlannedTasks(user, threadId) {
@@ -1064,7 +1151,7 @@ let InstanceAiService = class InstanceAiService {
1064
1151
  return;
1065
1152
  if (action.type === 'replan') {
1066
1153
  await this.syncPlannedTasksToUi(threadId, action.graph);
1067
- await this.startInternalFollowUpRun(user, threadId, this.buildPlannedTaskFollowUpMessage('replan', action.graph, action.failedTask), this.runState.getThreadResearchMode(threadId), action.graph.messageGroupId);
1154
+ await this.startInternalFollowUpRun(user, threadId, this.buildPlannedTaskFollowUpMessage('replan', action.graph, action.failedTask), this.runState.getThreadResearchMode(threadId), action.graph.messageGroupId, true);
1068
1155
  return;
1069
1156
  }
1070
1157
  if (action.type === 'synthesize') {
@@ -1079,11 +1166,12 @@ let InstanceAiService = class InstanceAiService {
1079
1166
  }
1080
1167
  await this.doSchedulePlannedTasks(user, threadId);
1081
1168
  }
1082
- async executeRun(user, threadId, runId, message, abortController, researchMode, attachments, messageGroupId, timeZone) {
1169
+ async executeRun(user, threadId, runId, message, abortController, researchMode, attachments, messageGroupId, timeZone, isReplanFollowUp = false) {
1083
1170
  const signal = abortController.signal;
1084
1171
  let mastraRunId = '';
1085
1172
  let tracing;
1086
1173
  let messageTraceFinalization;
1174
+ let aiCreatedWorkflowIds;
1087
1175
  try {
1088
1176
  const messageId = (0, nanoid_1.nanoid)();
1089
1177
  this.eventBus.publish(threadId, {
@@ -1105,7 +1193,9 @@ let InstanceAiService = class InstanceAiService {
1105
1193
  const mcpServers = this.parseMcpServers(this.instanceAiConfig.mcpServers);
1106
1194
  const executionPushRef = this.threadPushRef.get(threadId);
1107
1195
  const { context, memory, taskStorage, snapshotStorage, modelId, orchestrationContext } = await this.createExecutionEnvironment(user, threadId, runId, signal, researchMode, messageGroupId, executionPushRef);
1196
+ aiCreatedWorkflowIds = context.aiCreatedWorkflowIds ??= new Set();
1108
1197
  orchestrationContext.currentUserMessage = message;
1198
+ orchestrationContext.isReplanFollowUp = isReplanFollowUp;
1109
1199
  orchestrationContext.timeZone = timeZone ?? this.defaultTimeZone;
1110
1200
  if (attachments && attachments.length > 0) {
1111
1201
  context.currentUserAttachments = attachments;
@@ -1374,9 +1464,11 @@ let InstanceAiService = class InstanceAiService {
1374
1464
  modelId,
1375
1465
  metadata: { completion_source: 'orchestrator' },
1376
1466
  };
1467
+ const archivedWorkflowIds = await this.reapAiTemporaryFromRun(threadId, user, aiCreatedWorkflowIds);
1377
1468
  await this.finalizeRun(threadId, runId, result.status, snapshotStorage, {
1378
1469
  userId: user.id,
1379
1470
  modelId,
1471
+ archivedWorkflowIds,
1380
1472
  });
1381
1473
  if (result.status === 'completed') {
1382
1474
  await this.countCreditsIfFirst(user, threadId, runId);
@@ -1400,7 +1492,8 @@ let InstanceAiService = class InstanceAiService {
1400
1492
  reason: 'user_cancelled',
1401
1493
  metadata: { completion_source: 'orchestrator' },
1402
1494
  };
1403
- this.publishRunFinish(threadId, runId, 'cancelled', 'user_cancelled');
1495
+ const archivedWorkflowIds = await this.reapAiTemporaryFromRun(threadId, user, aiCreatedWorkflowIds);
1496
+ this.publishRunFinish(threadId, runId, 'cancelled', 'user_cancelled', archivedWorkflowIds);
1404
1497
  return;
1405
1498
  }
1406
1499
  const errorMessage = getErrorMessage(error);
@@ -1418,6 +1511,7 @@ let InstanceAiService = class InstanceAiService {
1418
1511
  reason: errorMessage,
1419
1512
  metadata: { completion_source: 'orchestrator' },
1420
1513
  };
1514
+ const archivedWorkflowIds = await this.reapAiTemporaryFromRun(threadId, user, aiCreatedWorkflowIds);
1421
1515
  this.eventBus.publish(threadId, {
1422
1516
  type: 'run-finish',
1423
1517
  runId,
@@ -1425,6 +1519,7 @@ let InstanceAiService = class InstanceAiService {
1425
1519
  payload: {
1426
1520
  status: 'error',
1427
1521
  reason: errorMessage,
1522
+ ...(archivedWorkflowIds.length > 0 ? { archivedWorkflowIds } : {}),
1428
1523
  },
1429
1524
  });
1430
1525
  }
@@ -1568,7 +1663,10 @@ let InstanceAiService = class InstanceAiService {
1568
1663
  outputText,
1569
1664
  metadata: { completion_source: 'orchestrator' },
1570
1665
  };
1571
- await this.finalizeRun(opts.threadId, opts.runId, result.status, opts.snapshotStorage);
1666
+ const archivedWorkflowIds = await this.reapAiTemporaryFromRun(opts.threadId, opts.user, undefined);
1667
+ await this.finalizeRun(opts.threadId, opts.runId, result.status, opts.snapshotStorage, {
1668
+ archivedWorkflowIds,
1669
+ });
1572
1670
  if (result.status === 'completed') {
1573
1671
  this.telemetry.track('Builder sent message', {
1574
1672
  thread_id: opts.threadId,
@@ -1590,7 +1688,8 @@ let InstanceAiService = class InstanceAiService {
1590
1688
  reason: 'user_cancelled',
1591
1689
  metadata: { completion_source: 'orchestrator' },
1592
1690
  };
1593
- this.publishRunFinish(opts.threadId, opts.runId, 'cancelled', 'user_cancelled');
1691
+ const archivedWorkflowIds = await this.reapAiTemporaryFromRun(opts.threadId, opts.user, undefined);
1692
+ this.publishRunFinish(opts.threadId, opts.runId, 'cancelled', 'user_cancelled', archivedWorkflowIds);
1594
1693
  return;
1595
1694
  }
1596
1695
  const errorMessage = getErrorMessage(error);
@@ -1608,6 +1707,7 @@ let InstanceAiService = class InstanceAiService {
1608
1707
  reason: errorMessage,
1609
1708
  metadata: { completion_source: 'orchestrator' },
1610
1709
  };
1710
+ const archivedWorkflowIds = await this.reapAiTemporaryFromRun(opts.threadId, opts.user, undefined);
1611
1711
  this.eventBus.publish(opts.threadId, {
1612
1712
  type: 'run-finish',
1613
1713
  runId: opts.runId,
@@ -1615,6 +1715,7 @@ let InstanceAiService = class InstanceAiService {
1615
1715
  payload: {
1616
1716
  status: 'error',
1617
1717
  reason: errorMessage,
1718
+ ...(archivedWorkflowIds.length > 0 ? { archivedWorkflowIds } : {}),
1618
1719
  },
1619
1720
  });
1620
1721
  }
@@ -1751,19 +1852,133 @@ let InstanceAiService = class InstanceAiService {
1751
1852
  num_steps: numSteps,
1752
1853
  });
1753
1854
  }
1754
- publishRunFinish(threadId, runId, status, reason) {
1855
+ async reapAiTemporaryFromRun(threadId, user, createdWorkflowIds) {
1856
+ let markedWorkflows = [];
1857
+ try {
1858
+ markedWorkflows = await this.aiBuilderTemporaryWorkflowRepository.findByThread(threadId);
1859
+ }
1860
+ catch (error) {
1861
+ this.logger.warn('Failed to inspect AI-builder temporary workflows during run finish', {
1862
+ threadId,
1863
+ error: getErrorMessage(error),
1864
+ });
1865
+ }
1866
+ const workflowIds = new Set([
1867
+ ...markedWorkflows.map(({ workflowId }) => workflowId),
1868
+ ...(createdWorkflowIds ?? []),
1869
+ ]);
1870
+ if (workflowIds.size === 0)
1871
+ return [];
1872
+ return await this.archiveAiTemporaryWorkflows(threadId, user, workflowIds);
1873
+ }
1874
+ async archiveAiTemporaryWorkflows(threadId, user, workflowIds) {
1875
+ const adapter = this.adapterService.createContext(user, { threadId });
1876
+ const archived = [];
1877
+ for (const workflowId of workflowIds) {
1878
+ try {
1879
+ const didArchive = await adapter.workflowService.archiveIfAiTemporary(workflowId);
1880
+ if (didArchive)
1881
+ archived.push(workflowId);
1882
+ }
1883
+ catch (error) {
1884
+ this.logger.warn('Failed to reap AI-builder temporary workflow', {
1885
+ threadId,
1886
+ workflowId,
1887
+ error: getErrorMessage(error),
1888
+ });
1889
+ }
1890
+ }
1891
+ return archived;
1892
+ }
1893
+ async finalizeCancelledSuspendedRun(suspended) {
1894
+ await this.finalizeRunTracing(suspended.runId, suspended.tracing, {
1895
+ status: 'cancelled',
1896
+ reason: 'user_cancelled',
1897
+ });
1898
+ const archivedWorkflowIds = await this.reapAiTemporaryFromRun(suspended.threadId, suspended.user, undefined);
1899
+ this.publishRunFinish(suspended.threadId, suspended.runId, 'cancelled', 'user_cancelled', archivedWorkflowIds);
1900
+ await this.saveAgentTreeSnapshot(suspended.threadId, suspended.runId, this.dbSnapshotStorage, true);
1901
+ if (suspended.mastraRunId) {
1902
+ void this.cleanupMastraSnapshots(suspended.mastraRunId);
1903
+ }
1904
+ await this.maybeFinalizeRunTraceRoot(suspended.runId, {
1905
+ status: 'cancelled',
1906
+ reason: 'user_cancelled',
1907
+ metadata: { completion_source: 'orchestrator' },
1908
+ });
1909
+ }
1910
+ async reapAiTemporaryForThreadCleanup(threadId) {
1911
+ let markedWorkflows;
1912
+ try {
1913
+ markedWorkflows = await this.aiBuilderTemporaryWorkflowRepository.findByThread(threadId);
1914
+ }
1915
+ catch (error) {
1916
+ this.logger.warn('Failed to inspect AI-builder temporary workflows during thread cleanup', {
1917
+ threadId,
1918
+ error: getErrorMessage(error),
1919
+ });
1920
+ return;
1921
+ }
1922
+ if (markedWorkflows.length === 0)
1923
+ return;
1924
+ let thread;
1925
+ try {
1926
+ thread = await this.threadRepo.findOneBy({ id: threadId });
1927
+ }
1928
+ catch (error) {
1929
+ this.logger.warn('Failed to load thread owner for AI-builder temporary workflow cleanup', {
1930
+ threadId,
1931
+ markedWorkflowCount: markedWorkflows.length,
1932
+ error: getErrorMessage(error),
1933
+ });
1934
+ return;
1935
+ }
1936
+ if (!thread?.resourceId) {
1937
+ this.logger.warn('Skipping AI-builder temporary workflow cleanup for thread without owner', {
1938
+ threadId,
1939
+ markedWorkflowCount: markedWorkflows.length,
1940
+ });
1941
+ return;
1942
+ }
1943
+ let user;
1944
+ try {
1945
+ user = await this.userRepository.findOneBy({ id: thread.resourceId });
1946
+ }
1947
+ catch (error) {
1948
+ this.logger.warn('Failed to load user for AI-builder temporary workflow cleanup', {
1949
+ threadId,
1950
+ userId: thread.resourceId,
1951
+ markedWorkflowCount: markedWorkflows.length,
1952
+ error: getErrorMessage(error),
1953
+ });
1954
+ return;
1955
+ }
1956
+ if (!user) {
1957
+ this.logger.warn('Skipping AI-builder temporary workflow cleanup for missing thread owner', {
1958
+ threadId,
1959
+ userId: thread.resourceId,
1960
+ markedWorkflowCount: markedWorkflows.length,
1961
+ });
1962
+ return;
1963
+ }
1964
+ await this.archiveAiTemporaryWorkflows(threadId, user, new Set(markedWorkflows.map(({ workflowId }) => workflowId)));
1965
+ }
1966
+ publishRunFinish(threadId, runId, status, reason, archivedWorkflowIds) {
1755
1967
  const effectiveStatus = status === 'errored' ? 'error' : status;
1968
+ const hasArchived = archivedWorkflowIds && archivedWorkflowIds.length > 0;
1756
1969
  this.eventBus.publish(threadId, {
1757
1970
  type: 'run-finish',
1758
1971
  runId,
1759
1972
  agentId: ORCHESTRATOR_AGENT_ID,
1760
- payload: status === 'cancelled'
1761
- ? { status: effectiveStatus, reason: reason ?? 'user_cancelled' }
1762
- : { status: effectiveStatus },
1973
+ payload: {
1974
+ status: effectiveStatus,
1975
+ ...(status === 'cancelled' ? { reason: reason ?? 'user_cancelled' } : {}),
1976
+ ...(hasArchived ? { archivedWorkflowIds } : {}),
1977
+ },
1763
1978
  });
1764
1979
  }
1765
1980
  async finalizeRun(threadId, runId, status, snapshotStorage, options) {
1766
- this.publishRunFinish(threadId, runId, status);
1981
+ this.publishRunFinish(threadId, runId, status, undefined, options?.archivedWorkflowIds);
1767
1982
  if (status === 'completed') {
1768
1983
  await this.saveAgentTreeSnapshot(threadId, runId, snapshotStorage);
1769
1984
  if (options?.userId && options?.modelId) {
@@ -1835,11 +2050,18 @@ let InstanceAiService = class InstanceAiService {
1835
2050
  events = this.eventBus.getEventsForRun(threadId, runId);
1836
2051
  }
1837
2052
  const agentTree = (0, instance_ai_1.buildAgentTreeFromEvents)(events);
2053
+ const tracing = this.traceContextsByRunId.get(runId)?.tracing;
2054
+ const saveOptions = {
2055
+ messageGroupId,
2056
+ runIds: groupRunIds,
2057
+ langsmithRunId: tracing?.rootRun.id,
2058
+ langsmithTraceId: tracing?.rootRun.traceId,
2059
+ };
1838
2060
  if (isUpdate) {
1839
- await snapshotStorage.updateLast(threadId, agentTree, runId, messageGroupId, groupRunIds);
2061
+ await snapshotStorage.updateLast(threadId, agentTree, runId, saveOptions);
1840
2062
  }
1841
2063
  else {
1842
- await snapshotStorage.save(threadId, agentTree, runId, messageGroupId, groupRunIds);
2064
+ await snapshotStorage.save(threadId, agentTree, runId, saveOptions);
1843
2065
  }
1844
2066
  }
1845
2067
  catch (error) {
@@ -1876,6 +2098,8 @@ exports.InstanceAiService = InstanceAiService = __decorate([
1876
2098
  db_snapshot_storage_1.DbSnapshotStorage,
1877
2099
  db_iteration_log_storage_1.DbIterationLogStorage,
1878
2100
  source_control_preferences_service_ee_1.SourceControlPreferencesService,
1879
- telemetry_1.Telemetry])
2101
+ telemetry_1.Telemetry,
2102
+ db_1.UserRepository,
2103
+ db_1.AiBuilderTemporaryWorkflowRepository])
1880
2104
  ], InstanceAiService);
1881
2105
  //# sourceMappingURL=instance-ai.service.js.map