n8n 2.16.0 → 2.17.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 (323) hide show
  1. package/README.md +1 -1
  2. package/dist/active-workflow-manager.d.ts +3 -1
  3. package/dist/active-workflow-manager.js +37 -4
  4. package/dist/active-workflow-manager.js.map +1 -1
  5. package/dist/auth/auth.service.d.ts +5 -2
  6. package/dist/auth/auth.service.js +10 -6
  7. package/dist/auth/auth.service.js.map +1 -1
  8. package/dist/build.tsbuildinfo +1 -1
  9. package/dist/commands/base-command.js +8 -2
  10. package/dist/commands/base-command.js.map +1 -1
  11. package/dist/commands/start.d.ts +1 -0
  12. package/dist/commands/start.js +7 -0
  13. package/dist/commands/start.js.map +1 -1
  14. package/dist/constants.d.ts +2 -0
  15. package/dist/constants.js +5 -1
  16. package/dist/constants.js.map +1 -1
  17. package/dist/controllers/ai.controller.d.ts +11 -2
  18. package/dist/controllers/ai.controller.js +54 -2
  19. package/dist/controllers/ai.controller.js.map +1 -1
  20. package/dist/controllers/auth.controller.js +1 -1
  21. package/dist/controllers/auth.controller.js.map +1 -1
  22. package/dist/controllers/e2e.controller.js +3 -0
  23. package/dist/controllers/e2e.controller.js.map +1 -1
  24. package/dist/controllers/me.controller.d.ts +1 -0
  25. package/dist/controllers/me.controller.js +12 -0
  26. package/dist/controllers/me.controller.js.map +1 -1
  27. package/dist/controllers/project.controller.d.ts +3 -1
  28. package/dist/controllers/project.controller.js +9 -2
  29. package/dist/controllers/project.controller.js.map +1 -1
  30. package/dist/controllers/role.controller.d.ts +6 -4
  31. package/dist/controllers/role.controller.js +28 -8
  32. package/dist/controllers/role.controller.js.map +1 -1
  33. package/dist/controllers/users.controller.d.ts +4 -1
  34. package/dist/controllers/users.controller.js +8 -2
  35. package/dist/controllers/users.controller.js.map +1 -1
  36. package/dist/credentials/credentials.controller.js +3 -0
  37. package/dist/credentials/credentials.controller.js.map +1 -1
  38. package/dist/credentials/credentials.service.d.ts +3 -2
  39. package/dist/credentials/credentials.service.js +21 -10
  40. package/dist/credentials/credentials.service.js.map +1 -1
  41. package/dist/credentials/validation.js +2 -2
  42. package/dist/credentials/validation.js.map +1 -1
  43. package/dist/credentials-helper.d.ts +3 -1
  44. package/dist/credentials-helper.js +14 -2
  45. package/dist/credentials-helper.js.map +1 -1
  46. package/dist/eventbus/event-message-classes/index.d.ts +2 -2
  47. package/dist/eventbus/event-message-classes/index.js +7 -0
  48. package/dist/eventbus/event-message-classes/index.js.map +1 -1
  49. package/dist/events/maps/relay.event-map.d.ts +92 -0
  50. package/dist/events/relays/log-streaming.event-relay.d.ts +7 -0
  51. package/dist/events/relays/log-streaming.event-relay.js +87 -2
  52. package/dist/events/relays/log-streaming.event-relay.js.map +1 -1
  53. package/dist/events/relays/telemetry.event-relay.d.ts +5 -0
  54. package/dist/events/relays/telemetry.event-relay.js +58 -5
  55. package/dist/events/relays/telemetry.event-relay.js.map +1 -1
  56. package/dist/execution-lifecycle/execution-lifecycle-hooks.d.ts +1 -1
  57. package/dist/execution-lifecycle/execution-lifecycle-hooks.js +22 -9
  58. package/dist/execution-lifecycle/execution-lifecycle-hooks.js.map +1 -1
  59. package/dist/instance-settings-loader/instance-settings-loader.service.d.ts +9 -0
  60. package/dist/instance-settings-loader/instance-settings-loader.service.js +36 -0
  61. package/dist/instance-settings-loader/instance-settings-loader.service.js.map +1 -0
  62. package/dist/instance-settings-loader/loaders/owner.instance-settings-loader.d.ts +10 -0
  63. package/dist/instance-settings-loader/loaders/owner.instance-settings-loader.js +72 -0
  64. package/dist/instance-settings-loader/loaders/owner.instance-settings-loader.js.map +1 -0
  65. package/dist/modules/chat-hub/stream-capturer.js +3 -0
  66. package/dist/modules/chat-hub/stream-capturer.js.map +1 -1
  67. package/dist/modules/dynamic-credentials.ee/credential-resolvers/identifiers/oauth2-introspection-identifier.d.ts +2 -2
  68. package/dist/modules/external-secrets.ee/external-secrets-settings.controller.ee.d.ts +5 -2
  69. package/dist/modules/external-secrets.ee/external-secrets-settings.controller.ee.js +10 -3
  70. package/dist/modules/external-secrets.ee/external-secrets-settings.controller.ee.js.map +1 -1
  71. package/dist/modules/external-secrets.ee/secrets-providers-connections.controller.ee.js +5 -5
  72. package/dist/modules/external-secrets.ee/secrets-providers-connections.controller.ee.js.map +1 -1
  73. package/dist/modules/external-secrets.ee/secrets-providers-connections.service.ee.d.ts +6 -6
  74. package/dist/modules/external-secrets.ee/secrets-providers-connections.service.ee.js +14 -9
  75. package/dist/modules/external-secrets.ee/secrets-providers-connections.service.ee.js.map +1 -1
  76. package/dist/modules/external-secrets.ee/secrets-providers-project.controller.ee.js +3 -3
  77. package/dist/modules/external-secrets.ee/secrets-providers-project.controller.ee.js.map +1 -1
  78. package/dist/modules/instance-ai/eval/api-docs.d.ts +1 -0
  79. package/dist/modules/instance-ai/eval/api-docs.js +78 -0
  80. package/dist/modules/instance-ai/eval/api-docs.js.map +1 -0
  81. package/dist/modules/instance-ai/eval/execution.service.d.ts +25 -0
  82. package/dist/modules/instance-ai/eval/execution.service.js +291 -0
  83. package/dist/modules/instance-ai/eval/execution.service.js.map +1 -0
  84. package/dist/modules/instance-ai/eval/mock-handler.d.ts +9 -0
  85. package/dist/modules/instance-ai/eval/mock-handler.js +264 -0
  86. package/dist/modules/instance-ai/eval/mock-handler.js.map +1 -0
  87. package/dist/modules/instance-ai/eval/node-config.d.ts +2 -0
  88. package/dist/modules/instance-ai/eval/node-config.js +15 -0
  89. package/dist/modules/instance-ai/eval/node-config.js.map +1 -0
  90. package/dist/modules/instance-ai/eval/pin-data-generator.d.ts +12 -0
  91. package/dist/modules/instance-ai/eval/pin-data-generator.js +301 -0
  92. package/dist/modules/instance-ai/eval/pin-data-generator.js.map +1 -0
  93. package/dist/modules/instance-ai/eval/request-sanitizer.d.ts +3 -0
  94. package/dist/modules/instance-ai/eval/request-sanitizer.js +50 -0
  95. package/dist/modules/instance-ai/eval/request-sanitizer.js.map +1 -0
  96. package/dist/modules/instance-ai/eval/workflow-analysis.d.ts +16 -0
  97. package/dist/modules/instance-ai/eval/workflow-analysis.js +217 -0
  98. package/dist/modules/instance-ai/eval/workflow-analysis.js.map +1 -0
  99. package/dist/modules/instance-ai/filesystem/index.d.ts +0 -1
  100. package/dist/modules/instance-ai/filesystem/index.js +1 -3
  101. package/dist/modules/instance-ai/filesystem/index.js.map +1 -1
  102. package/dist/modules/instance-ai/filesystem/local-gateway.js +1 -1
  103. package/dist/modules/instance-ai/instance-ai-memory.service.d.ts +11 -7
  104. package/dist/modules/instance-ai/instance-ai-memory.service.js +21 -41
  105. package/dist/modules/instance-ai/instance-ai-memory.service.js.map +1 -1
  106. package/dist/modules/instance-ai/instance-ai-settings.service.d.ts +4 -0
  107. package/dist/modules/instance-ai/instance-ai-settings.service.js +26 -6
  108. package/dist/modules/instance-ai/instance-ai-settings.service.js.map +1 -1
  109. package/dist/modules/instance-ai/instance-ai.adapter.service.d.ts +8 -3
  110. package/dist/modules/instance-ai/instance-ai.adapter.service.js +189 -35
  111. package/dist/modules/instance-ai/instance-ai.adapter.service.js.map +1 -1
  112. package/dist/modules/instance-ai/instance-ai.controller.d.ts +10 -11
  113. package/dist/modules/instance-ai/instance-ai.controller.js +101 -44
  114. package/dist/modules/instance-ai/instance-ai.controller.js.map +1 -1
  115. package/dist/modules/instance-ai/instance-ai.module.d.ts +1 -2
  116. package/dist/modules/instance-ai/instance-ai.module.js +4 -5
  117. package/dist/modules/instance-ai/instance-ai.module.js.map +1 -1
  118. package/dist/modules/instance-ai/instance-ai.service.d.ts +9 -8
  119. package/dist/modules/instance-ai/instance-ai.service.js +189 -61
  120. package/dist/modules/instance-ai/instance-ai.service.js.map +1 -1
  121. package/dist/modules/instance-ai/internal-messages.js +1 -1
  122. package/dist/modules/instance-ai/internal-messages.js.map +1 -1
  123. package/dist/modules/instance-ai/proxy-token-manager.d.ts +15 -0
  124. package/dist/modules/instance-ai/proxy-token-manager.js +64 -0
  125. package/dist/modules/instance-ai/proxy-token-manager.js.map +1 -0
  126. package/dist/modules/instance-ai/snapshot-pruning.service.d.ts +4 -1
  127. package/dist/modules/instance-ai/snapshot-pruning.service.js +18 -6
  128. package/dist/modules/instance-ai/snapshot-pruning.service.js.map +1 -1
  129. package/dist/modules/instance-ai/storage/db-snapshot-storage.d.ts +4 -0
  130. package/dist/modules/instance-ai/storage/db-snapshot-storage.js +25 -0
  131. package/dist/modules/instance-ai/storage/db-snapshot-storage.js.map +1 -1
  132. package/dist/modules/instance-ai/storage/typeorm-memory-storage.js +1 -1
  133. package/dist/modules/instance-ai/storage/typeorm-memory-storage.js.map +1 -1
  134. package/dist/modules/instance-ai/web-research/brave-search.d.ts +1 -1
  135. package/dist/modules/instance-ai/web-research/brave-search.js +2 -1
  136. package/dist/modules/instance-ai/web-research/brave-search.js.map +1 -1
  137. package/dist/modules/instance-version-history/database/entities/instance-version-history.entity.d.ts +7 -0
  138. package/dist/modules/instance-version-history/database/entities/instance-version-history.entity.js +37 -0
  139. package/dist/modules/instance-version-history/database/entities/instance-version-history.entity.js.map +1 -0
  140. package/dist/modules/instance-version-history/database/repositories/instance-version-history.repository.d.ts +5 -0
  141. package/dist/modules/instance-version-history/database/repositories/instance-version-history.repository.js +26 -0
  142. package/dist/modules/instance-version-history/database/repositories/instance-version-history.repository.js.map +1 -0
  143. package/dist/modules/instance-version-history/instance-version-history.controller.d.ts +26 -0
  144. package/dist/modules/instance-version-history/instance-version-history.controller.js +85 -0
  145. package/dist/modules/instance-version-history/instance-version-history.controller.js.map +1 -0
  146. package/dist/modules/instance-version-history/instance-version-history.module.d.ts +5 -0
  147. package/dist/modules/instance-version-history/instance-version-history.module.js +60 -0
  148. package/dist/modules/instance-version-history/instance-version-history.module.js.map +1 -0
  149. package/dist/modules/instance-version-history/instance-version-history.service.d.ts +18 -0
  150. package/dist/modules/instance-version-history/instance-version-history.service.js +120 -0
  151. package/dist/modules/instance-version-history/instance-version-history.service.js.map +1 -0
  152. package/dist/modules/instance-version-history/instance-version-history.types.d.ts +12 -0
  153. package/dist/modules/instance-version-history/instance-version-history.types.js +27 -0
  154. package/dist/modules/instance-version-history/instance-version-history.types.js.map +1 -0
  155. package/dist/modules/provisioning.ee/provisioning.service.ee.d.ts +5 -2
  156. package/dist/modules/provisioning.ee/provisioning.service.ee.js +55 -11
  157. package/dist/modules/provisioning.ee/provisioning.service.ee.js.map +1 -1
  158. package/dist/modules/provisioning.ee/role-mapping-rule.controller.ee.d.ts +7 -5
  159. package/dist/modules/provisioning.ee/role-mapping-rule.controller.ee.js +40 -10
  160. package/dist/modules/provisioning.ee/role-mapping-rule.controller.ee.js.map +1 -1
  161. package/dist/modules/provisioning.ee/role-mapping-rule.service.ee.d.ts +3 -1
  162. package/dist/modules/provisioning.ee/role-mapping-rule.service.ee.js +1 -0
  163. package/dist/modules/provisioning.ee/role-mapping-rule.service.ee.js.map +1 -1
  164. package/dist/modules/provisioning.ee/role-resolver-types.d.ts +14 -2
  165. package/dist/modules/provisioning.ee/role-resolver.service.ee.js +16 -6
  166. package/dist/modules/provisioning.ee/role-resolver.service.ee.js.map +1 -1
  167. package/dist/modules/source-control.ee/source-control-context.factory.d.ts +12 -0
  168. package/dist/modules/source-control.ee/source-control-context.factory.js +112 -0
  169. package/dist/modules/source-control.ee/source-control-context.factory.js.map +1 -0
  170. package/dist/modules/source-control.ee/source-control-export.service.ee.d.ts +2 -2
  171. package/dist/modules/source-control.ee/source-control-export.service.ee.js +9 -11
  172. package/dist/modules/source-control.ee/source-control-export.service.ee.js.map +1 -1
  173. package/dist/modules/source-control.ee/source-control-git.service.ee.js +3 -3
  174. package/dist/modules/source-control.ee/source-control-git.service.ee.js.map +1 -1
  175. package/dist/modules/source-control.ee/source-control-import.service.ee.d.ts +6 -4
  176. package/dist/modules/source-control.ee/source-control-import.service.ee.js +29 -85
  177. package/dist/modules/source-control.ee/source-control-import.service.ee.js.map +1 -1
  178. package/dist/modules/source-control.ee/source-control-scoped.service.d.ts +4 -4
  179. package/dist/modules/source-control.ee/source-control-scoped.service.js +9 -40
  180. package/dist/modules/source-control.ee/source-control-scoped.service.js.map +1 -1
  181. package/dist/modules/source-control.ee/source-control-status.service.ee.d.ts +3 -1
  182. package/dist/modules/source-control.ee/source-control-status.service.ee.js +99 -59
  183. package/dist/modules/source-control.ee/source-control-status.service.ee.js.map +1 -1
  184. package/dist/modules/source-control.ee/source-control.service.ee.d.ts +3 -1
  185. package/dist/modules/source-control.ee/source-control.service.ee.js +6 -4
  186. package/dist/modules/source-control.ee/source-control.service.ee.js.map +1 -1
  187. package/dist/modules/source-control.ee/types/source-control-context.d.ts +12 -4
  188. package/dist/modules/source-control.ee/types/source-control-context.js +32 -6
  189. package/dist/modules/source-control.ee/types/source-control-context.js.map +1 -1
  190. package/dist/modules/sso-saml/saml.controller.ee.d.ts +2 -3
  191. package/dist/modules/sso-saml/saml.controller.ee.js +3 -15
  192. package/dist/modules/sso-saml/saml.controller.ee.js.map +1 -1
  193. package/dist/modules/token-exchange/controllers/embed-auth.controller.d.ts +5 -1
  194. package/dist/modules/token-exchange/controllers/embed-auth.controller.js +50 -11
  195. package/dist/modules/token-exchange/controllers/embed-auth.controller.js.map +1 -1
  196. package/dist/modules/token-exchange/{token-exchange.controller.d.ts → controllers/token-exchange.controller.d.ts} +1 -1
  197. package/dist/modules/token-exchange/{token-exchange.controller.js → controllers/token-exchange.controller.js} +50 -5
  198. package/dist/modules/token-exchange/controllers/token-exchange.controller.js.map +1 -0
  199. package/dist/modules/token-exchange/database/entities/trusted-key-source.entity.d.ts +10 -0
  200. package/dist/modules/token-exchange/database/entities/trusted-key-source.entity.js +45 -0
  201. package/dist/modules/token-exchange/database/entities/trusted-key-source.entity.js.map +1 -0
  202. package/dist/modules/token-exchange/database/entities/trusted-key.entity.d.ts +9 -0
  203. package/dist/modules/token-exchange/database/entities/trusted-key.entity.js +43 -0
  204. package/dist/modules/token-exchange/database/entities/trusted-key.entity.js.map +1 -0
  205. package/dist/modules/token-exchange/database/repositories/trusted-key-source.repository.d.ts +5 -0
  206. package/dist/modules/token-exchange/database/repositories/trusted-key-source.repository.js +26 -0
  207. package/dist/modules/token-exchange/database/repositories/trusted-key-source.repository.js.map +1 -0
  208. package/dist/modules/token-exchange/database/repositories/trusted-key.repository.d.ts +7 -0
  209. package/dist/modules/token-exchange/database/repositories/trusted-key.repository.js +32 -0
  210. package/dist/modules/token-exchange/database/repositories/trusted-key.repository.js.map +1 -0
  211. package/dist/modules/token-exchange/services/identity-resolution.service.d.ts +20 -2
  212. package/dist/modules/token-exchange/services/identity-resolution.service.js +178 -4
  213. package/dist/modules/token-exchange/services/identity-resolution.service.js.map +1 -1
  214. package/dist/modules/token-exchange/services/jti-cleanup.service.js +1 -1
  215. package/dist/modules/token-exchange/services/jti-cleanup.service.js.map +1 -1
  216. package/dist/modules/token-exchange/services/jwks-resolver.d.ts +30 -0
  217. package/dist/modules/token-exchange/services/jwks-resolver.js +190 -0
  218. package/dist/modules/token-exchange/services/jwks-resolver.js.map +1 -0
  219. package/dist/modules/token-exchange/services/scoped-jwt.strategy.d.ts +12 -0
  220. package/dist/modules/token-exchange/services/scoped-jwt.strategy.js +92 -0
  221. package/dist/modules/token-exchange/services/scoped-jwt.strategy.js.map +1 -0
  222. package/dist/modules/token-exchange/services/token-exchange.service.d.ts +18 -4
  223. package/dist/modules/token-exchange/services/token-exchange.service.js +65 -6
  224. package/dist/modules/token-exchange/services/token-exchange.service.js.map +1 -1
  225. package/dist/modules/token-exchange/services/trusted-key.service.d.ts +40 -6
  226. package/dist/modules/token-exchange/services/trusted-key.service.js +374 -32
  227. package/dist/modules/token-exchange/services/trusted-key.service.js.map +1 -1
  228. package/dist/modules/token-exchange/token-exchange.config.d.ts +4 -0
  229. package/dist/modules/token-exchange/token-exchange.config.js +20 -0
  230. package/dist/modules/token-exchange/token-exchange.config.js.map +1 -1
  231. package/dist/modules/token-exchange/token-exchange.module.js +7 -2
  232. package/dist/modules/token-exchange/token-exchange.module.js.map +1 -1
  233. package/dist/modules/token-exchange/token-exchange.schemas.d.ts +35 -5
  234. package/dist/modules/token-exchange/token-exchange.schemas.js +16 -7
  235. package/dist/modules/token-exchange/token-exchange.schemas.js.map +1 -1
  236. package/dist/modules/token-exchange/token-exchange.types.d.ts +5 -2
  237. package/dist/modules/token-exchange/token-exchange.types.js +2 -0
  238. package/dist/modules/token-exchange/token-exchange.types.js.map +1 -1
  239. package/dist/oauth/oauth.service.d.ts +1 -0
  240. package/dist/oauth/oauth.service.js +39 -2
  241. package/dist/oauth/oauth.service.js.map +1 -1
  242. package/dist/public-api/index.js +32 -4
  243. package/dist/public-api/index.js.map +1 -1
  244. package/dist/public-api/types.d.ts +11 -1
  245. package/dist/public-api/v1/handlers/community-packages/community-packages.handler.d.ts +1 -0
  246. package/dist/public-api/v1/handlers/community-packages/community-packages.handler.js +5 -5
  247. package/dist/public-api/v1/handlers/community-packages/community-packages.handler.js.map +1 -1
  248. package/dist/public-api/v1/handlers/credentials/credentials.handler.js +7 -12
  249. package/dist/public-api/v1/handlers/credentials/credentials.handler.js.map +1 -1
  250. package/dist/public-api/v1/handlers/credentials/credentials.service.d.ts +3 -4
  251. package/dist/public-api/v1/handlers/credentials/credentials.service.js +21 -33
  252. package/dist/public-api/v1/handlers/credentials/credentials.service.js.map +1 -1
  253. package/dist/public-api/v1/handlers/data-tables/data-tables.handler.js +5 -5
  254. package/dist/public-api/v1/handlers/data-tables/data-tables.rows.handler.js +5 -5
  255. package/dist/public-api/v1/handlers/executions/executions.handler.js +8 -8
  256. package/dist/public-api/v1/handlers/insights/insights.handler.d.ts +6 -0
  257. package/dist/public-api/v1/handlers/insights/insights.handler.js +57 -0
  258. package/dist/public-api/v1/handlers/insights/insights.handler.js.map +1 -0
  259. package/dist/public-api/v1/handlers/workflows/workflows.handler.js +14 -35
  260. package/dist/public-api/v1/handlers/workflows/workflows.handler.js.map +1 -1
  261. package/dist/public-api/v1/handlers/workflows/workflows.service.d.ts +6 -4
  262. package/dist/public-api/v1/handlers/workflows/workflows.service.js +7 -15
  263. package/dist/public-api/v1/handlers/workflows/workflows.service.js.map +1 -1
  264. package/dist/public-api/v1/openapi.yml +322 -7
  265. package/dist/public-api/v1/shared/middlewares/global.middleware.d.ts +1 -1
  266. package/dist/public-api/v1/shared/middlewares/global.middleware.js +19 -8
  267. package/dist/public-api/v1/shared/middlewares/global.middleware.js.map +1 -1
  268. package/dist/security-audit/risk-reporters/credentials-risk-reporter.d.ts +2 -3
  269. package/dist/security-audit/risk-reporters/credentials-risk-reporter.js +2 -5
  270. package/dist/security-audit/risk-reporters/credentials-risk-reporter.js.map +1 -1
  271. package/dist/services/ai-gateway.service.d.ts +44 -0
  272. package/dist/services/ai-gateway.service.js +228 -0
  273. package/dist/services/ai-gateway.service.js.map +1 -0
  274. package/dist/services/api-key-auth.strategy.d.ts +10 -0
  275. package/dist/services/api-key-auth.strategy.js +71 -0
  276. package/dist/services/api-key-auth.strategy.js.map +1 -0
  277. package/dist/services/frontend.service.js +7 -0
  278. package/dist/services/frontend.service.js.map +1 -1
  279. package/dist/services/import.service.d.ts +1 -0
  280. package/dist/services/import.service.js +25 -2
  281. package/dist/services/import.service.js.map +1 -1
  282. package/dist/services/ownership.service.d.ts +4 -1
  283. package/dist/services/ownership.service.js +11 -5
  284. package/dist/services/ownership.service.js.map +1 -1
  285. package/dist/services/project.service.ee.js +1 -1
  286. package/dist/services/project.service.ee.js.map +1 -1
  287. package/dist/services/pruning/workflow-history-compaction.service.js +4 -4
  288. package/dist/services/pruning/workflow-history-compaction.service.js.map +1 -1
  289. package/dist/services/public-api-key.service.d.ts +6 -13
  290. package/dist/services/public-api-key.service.js +12 -80
  291. package/dist/services/public-api-key.service.js.map +1 -1
  292. package/dist/services/user.service.js +6 -0
  293. package/dist/services/user.service.js.map +1 -1
  294. package/dist/utils/validate-redirect-url.d.ts +1 -0
  295. package/dist/utils/validate-redirect-url.js +17 -0
  296. package/dist/utils/validate-redirect-url.js.map +1 -0
  297. package/dist/webhooks/webhook-form-data.js +6 -2
  298. package/dist/webhooks/webhook-form-data.js.map +1 -1
  299. package/dist/webhooks/webhook.service.js +19 -4
  300. package/dist/webhooks/webhook.service.js.map +1 -1
  301. package/dist/workflow-execute-additional-data.js +2 -0
  302. package/dist/workflow-execute-additional-data.js.map +1 -1
  303. package/dist/workflow-helpers.d.ts +1 -0
  304. package/dist/workflow-helpers.js +21 -0
  305. package/dist/workflow-helpers.js.map +1 -1
  306. package/dist/workflow-runner.js +25 -1
  307. package/dist/workflow-runner.js.map +1 -1
  308. package/dist/workflows/workflow-creation.service.d.ts +8 -5
  309. package/dist/workflows/workflow-creation.service.js +36 -17
  310. package/dist/workflows/workflow-creation.service.js.map +1 -1
  311. package/dist/workflows/workflow.service.ee.js +4 -1
  312. package/dist/workflows/workflow.service.ee.js.map +1 -1
  313. package/dist/workflows/workflow.service.js +4 -1
  314. package/dist/workflows/workflow.service.js.map +1 -1
  315. package/dist/workflows/workflows.controller.d.ts +2 -2
  316. package/package.json +25 -26
  317. package/dist/modules/instance-ai/filesystem/local-fs-provider.d.ts +0 -26
  318. package/dist/modules/instance-ai/filesystem/local-fs-provider.js +0 -321
  319. package/dist/modules/instance-ai/filesystem/local-fs-provider.js.map +0 -1
  320. package/dist/modules/token-exchange/token-exchange.controller.js.map +0 -1
  321. package/dist/modules/token-exchange/token-exchange.service.d.ts +0 -9
  322. package/dist/modules/token-exchange/token-exchange.service.js +0 -66
  323. package/dist/modules/token-exchange/token-exchange.service.js.map +0 -1
@@ -52,8 +52,10 @@ const url_service_1 = require("../../services/url.service");
52
52
  const instance_ai_1 = require("@n8n/instance-ai");
53
53
  const workflow_sdk_1 = require("@n8n/workflow-sdk");
54
54
  const nanoid_1 = require("nanoid");
55
+ const source_control_preferences_service_ee_1 = require("../../modules/source-control.ee/source-control-preferences.service.ee");
55
56
  const ai_service_1 = require("../../services/ai.service");
56
57
  const push_1 = require("../../push");
58
+ const telemetry_1 = require("../../telemetry");
57
59
  const in_process_event_bus_1 = require("./event-bus/in-process-event-bus");
58
60
  const filesystem_1 = require("./filesystem");
59
61
  const instance_ai_settings_service_1 = require("./instance-ai-settings.service");
@@ -63,6 +65,7 @@ const typeorm_composite_store_1 = require("./storage/typeorm-composite-store");
63
65
  const db_snapshot_storage_1 = require("./storage/db-snapshot-storage");
64
66
  const db_iteration_log_storage_1 = require("./storage/db-iteration-log-storage");
65
67
  const compaction_service_1 = require("./compaction.service");
68
+ const proxy_token_manager_1 = require("./proxy-token-manager");
66
69
  const instance_ai_thread_repository_1 = require("./repositories/instance-ai-thread.repository");
67
70
  function getErrorMessage(error) {
68
71
  return error instanceof Error ? error.message : String(error);
@@ -73,7 +76,7 @@ function createInertAbortSignal() {
73
76
  const ORCHESTRATOR_AGENT_ID = 'agent-001';
74
77
  const MAX_CONCURRENT_BACKGROUND_TASKS_PER_THREAD = 5;
75
78
  let InstanceAiService = class InstanceAiService {
76
- constructor(logger, globalConfig, adapterService, eventBus, settingsService, compositeStore, compactionService, aiService, push, threadRepo, urlService, dbSnapshotStorage, dbIterationLogStorage) {
79
+ constructor(logger, globalConfig, adapterService, eventBus, settingsService, compositeStore, compactionService, aiService, push, threadRepo, urlService, dbSnapshotStorage, dbIterationLogStorage, sourceControlPreferencesService, telemetry) {
77
80
  this.adapterService = adapterService;
78
81
  this.eventBus = eventBus;
79
82
  this.settingsService = settingsService;
@@ -85,6 +88,8 @@ let InstanceAiService = class InstanceAiService {
85
88
  this.urlService = urlService;
86
89
  this.dbSnapshotStorage = dbSnapshotStorage;
87
90
  this.dbIterationLogStorage = dbIterationLogStorage;
91
+ this.sourceControlPreferencesService = sourceControlPreferencesService;
92
+ this.telemetry = telemetry;
88
93
  this.mcpClientManager = new instance_ai_1.McpClientManager();
89
94
  this.runState = new instance_ai_1.RunStateRegistry();
90
95
  this.backgroundTasks = new instance_ai_1.BackgroundTaskManager(MAX_CONCURRENT_BACKGROUND_TASKS_PER_THREAD);
@@ -93,6 +98,7 @@ let InstanceAiService = class InstanceAiService {
93
98
  this.gatewayRegistry = new filesystem_1.LocalGatewayRegistry();
94
99
  this.domainAccessTrackersByThread = new Map();
95
100
  this.threadPushRef = new Map();
101
+ this.schedulerLocks = new Map();
96
102
  this.creditedThreads = new Set();
97
103
  this.logger = logger.scoped('instance-ai');
98
104
  this.instanceAiConfig = globalConfig.instanceAi;
@@ -203,13 +209,6 @@ let InstanceAiService = class InstanceAiService {
203
209
  }
204
210
  return new instance_ai_1.BuilderSandboxFactory(config);
205
211
  }
206
- getLocalFsProvider() {
207
- if (!this.localFsProvider) {
208
- const basePath = this.instanceAiConfig.filesystemPath || undefined;
209
- this.localFsProvider = new filesystem_1.LocalFilesystemProvider(basePath);
210
- }
211
- return this.localFsProvider;
212
- }
213
212
  async getOrCreateWorkspace(threadId, user) {
214
213
  const existing = this.sandboxes.get(threadId);
215
214
  if (existing)
@@ -250,31 +249,22 @@ let InstanceAiService = class InstanceAiService {
250
249
  headers: { Authorization: `${token.tokenType} ${token.accessToken}` },
251
250
  };
252
251
  }
253
- async resolveModel(user) {
254
- if (this.aiService.isProxyEnabled()) {
255
- const { client, headers } = await this.getProxyAuth(user);
256
- const modelName = await this.settingsService.resolveModelName(user);
257
- const { createAnthropic } = await Promise.resolve().then(() => __importStar(require('@ai-sdk/anthropic')));
258
- const provider = createAnthropic({
259
- baseURL: client.getApiProxyBaseUrl() + '/anthropic/v1',
260
- apiKey: 'proxy-managed',
261
- headers,
262
- });
263
- return provider(modelName);
264
- }
265
- return await this.settingsService.resolveModelConfig(user);
266
- }
267
- async resolveSearchProxyConfig(user) {
268
- if (!this.aiService.isProxyEnabled())
269
- return undefined;
270
- const { client, headers } = await this.getProxyAuth(user);
271
- return { apiUrl: client.getApiProxyBaseUrl() + '/brave-search', headers };
272
- }
273
- async resolveTracingProxyConfig(user) {
274
- if (!this.aiService.isProxyEnabled())
275
- return undefined;
276
- const { client, headers } = await this.getProxyAuth(user);
277
- return { apiUrl: client.getApiProxyBaseUrl() + '/langsmith', headers };
252
+ async resolveProxyModel(user, proxyBaseUrl, tokenManager) {
253
+ const modelName = await this.settingsService.resolveModelName(user);
254
+ const { createAnthropic } = await Promise.resolve().then(() => __importStar(require('@ai-sdk/anthropic')));
255
+ const provider = createAnthropic({
256
+ baseURL: proxyBaseUrl + '/anthropic/v1',
257
+ apiKey: 'proxy-managed',
258
+ fetch: async (input, init) => {
259
+ const headers = new Headers(init?.headers);
260
+ const auth = await tokenManager.getAuthHeaders();
261
+ for (const [k, v] of Object.entries(auth)) {
262
+ headers.set(k, v);
263
+ }
264
+ return await globalThis.fetch(input, { ...init, headers });
265
+ },
266
+ });
267
+ return provider(modelName);
278
268
  }
279
269
  async countCreditsIfFirst(user, threadId, runId) {
280
270
  if (!this.aiService.isProxyEnabled())
@@ -321,14 +311,7 @@ let InstanceAiService = class InstanceAiService {
321
311
  return await client.getBuilderInstanceCredits({ id: user.id });
322
312
  }
323
313
  isEnabled() {
324
- return !!this.instanceAiConfig.model;
325
- }
326
- isLocalFilesystemAvailable() {
327
- return !!this.instanceAiConfig.filesystemPath?.trim();
328
- }
329
- getLocalFilesystemDirectory() {
330
- const basePath = this.instanceAiConfig.filesystemPath?.trim();
331
- return basePath || null;
314
+ return this.settingsService.isAgentEnabled() && !!this.instanceAiConfig.model;
332
315
  }
333
316
  hasActiveRun(threadId) {
334
317
  return this.runState.hasLiveRun(threadId);
@@ -374,6 +357,9 @@ let InstanceAiService = class InstanceAiService {
374
357
  error: getErrorMessage(error),
375
358
  });
376
359
  }
360
+ finally {
361
+ (0, instance_ai_1.releaseTraceClient)(tracing.rootRun.traceId);
362
+ }
377
363
  }
378
364
  async maybeFinalizeRunTraceRoot(runId, options) {
379
365
  const tracing = this.getTraceContext(runId);
@@ -395,6 +381,7 @@ let InstanceAiService = class InstanceAiService {
395
381
  deleteTraceContextsForThread(threadId) {
396
382
  for (const [runId, entry] of this.traceContextsByRunId) {
397
383
  if (entry.threadId === threadId) {
384
+ (0, instance_ai_1.releaseTraceClient)(entry.tracing.rootRun.traceId);
398
385
  this.traceContextsByRunId.delete(runId);
399
386
  }
400
387
  }
@@ -422,6 +409,9 @@ let InstanceAiService = class InstanceAiService {
422
409
  error: getErrorMessage(error),
423
410
  });
424
411
  }
412
+ finally {
413
+ (0, instance_ai_1.releaseTraceClient)(traceContext.rootRun.traceId);
414
+ }
425
415
  }
426
416
  async finalizeRunTracing(runId, tracing, options) {
427
417
  if (!tracing)
@@ -502,6 +492,7 @@ let InstanceAiService = class InstanceAiService {
502
492
  agentId: task.agentId,
503
493
  payload: { role: task.role, result: '', error: 'Cancelled by user' },
504
494
  });
495
+ void this.saveAgentTreeSnapshot(threadId, task.runId, this.dbSnapshotStorage, true, task.messageGroupId);
505
496
  if (user) {
506
497
  void this.handlePlannedTaskSettlement(user, task, 'cancelled');
507
498
  }
@@ -523,6 +514,7 @@ let InstanceAiService = class InstanceAiService {
523
514
  agentId: ORCHESTRATOR_AGENT_ID,
524
515
  payload: { status: 'cancelled', reason: 'user_cancelled' },
525
516
  });
517
+ void this.saveAgentTreeSnapshot(threadId, suspended.runId, this.dbSnapshotStorage, true);
526
518
  if (suspended.mastraRunId) {
527
519
  void this.cleanupMastraSnapshots(suspended.mastraRunId);
528
520
  }
@@ -547,6 +539,7 @@ let InstanceAiService = class InstanceAiService {
547
539
  agentId: task.agentId,
548
540
  payload: { role: task.role, result: '', error: 'Cancelled by user' },
549
541
  });
542
+ void this.saveAgentTreeSnapshot(threadId, task.runId, this.dbSnapshotStorage, true, task.messageGroupId);
550
543
  const user = this.runState.getThreadUser(threadId);
551
544
  if (user) {
552
545
  void this.handlePlannedTaskSettlement(user, task, 'cancelled');
@@ -620,6 +613,7 @@ let InstanceAiService = class InstanceAiService {
620
613
  metadata: { completion_source: 'service_cleanup' },
621
614
  });
622
615
  this.creditedThreads.delete(threadId);
616
+ this.schedulerLocks.delete(threadId);
623
617
  this.domainAccessTrackersByThread.delete(threadId);
624
618
  this.threadPushRef.delete(threadId);
625
619
  this.deleteTraceContextsForThread(threadId);
@@ -749,20 +743,39 @@ let InstanceAiService = class InstanceAiService {
749
743
  async createExecutionEnvironment(user, threadId, runId, abortSignal, researchMode, messageGroupId, pushRef) {
750
744
  const localGatewayDisabled = this.settingsService.isLocalGatewayDisabled();
751
745
  const userGateway = this.gatewayRegistry.findGateway(user.id);
752
- const localFilesystemService = !localGatewayDisabled && !userGateway?.isConnected && this.isLocalFilesystemAvailable()
753
- ? this.getLocalFsProvider()
754
- : undefined;
755
- const searchProxyConfig = await this.resolveSearchProxyConfig(user);
756
- const tracingProxyConfig = await this.resolveTracingProxyConfig(user);
746
+ let searchProxyConfig;
747
+ let tracingProxyConfig;
748
+ let tokenManager;
749
+ let proxyBaseUrl;
750
+ if (this.aiService.isProxyEnabled()) {
751
+ const client = await this.aiService.getClient();
752
+ proxyBaseUrl = client.getApiProxyBaseUrl();
753
+ const manager = new proxy_token_manager_1.ProxyTokenManager(async () => {
754
+ return await client.getBuilderApiProxyToken({ id: user.id }, { userMessageId: (0, nanoid_1.nanoid)() });
755
+ });
756
+ tokenManager = manager;
757
+ searchProxyConfig = {
758
+ apiUrl: proxyBaseUrl + '/brave-search',
759
+ getAuthHeaders: async () => await manager.getAuthHeaders(),
760
+ };
761
+ tracingProxyConfig = {
762
+ apiUrl: proxyBaseUrl + '/langsmith',
763
+ getAuthHeaders: async () => await manager.getAuthHeaders(),
764
+ };
765
+ }
757
766
  const context = this.adapterService.createContext(user, {
758
- filesystemService: localFilesystemService,
759
767
  searchProxyConfig,
760
768
  pushRef,
769
+ threadId,
761
770
  });
762
771
  if (!localGatewayDisabled && userGateway?.isConnected) {
763
772
  context.localMcpServer = userGateway;
764
773
  }
765
774
  context.permissions = this.settingsService.getPermissions();
775
+ if (this.sourceControlPreferencesService.getPreferences().branchReadOnly) {
776
+ context.permissions = (0, api_types_1.applyBranchReadOnlyOverrides)(context.permissions);
777
+ context.branchReadOnly = true;
778
+ }
766
779
  let domainTracker = this.domainAccessTrackersByThread.get(threadId);
767
780
  if (!domainTracker) {
768
781
  domainTracker = (0, instance_ai_1.createDomainAccessTracker)();
@@ -782,7 +795,9 @@ let InstanceAiService = class InstanceAiService {
782
795
  capabilities: ['filesystem', 'browser'],
783
796
  };
784
797
  }
785
- const modelId = await this.resolveModel(user);
798
+ const modelId = proxyBaseUrl && tokenManager
799
+ ? await this.resolveProxyModel(user, proxyBaseUrl, tokenManager)
800
+ : await this.settingsService.resolveModelConfig(user);
786
801
  const memory = (0, instance_ai_1.createMemory)(this.createMemoryConfig());
787
802
  await this.ensureThreadExists(memory, threadId, user.id);
788
803
  const taskStorage = new instance_ai_1.MastraTaskStorage(memory);
@@ -827,6 +842,9 @@ let InstanceAiService = class InstanceAiService {
827
842
  userId: user.id,
828
843
  createdAt: Date.now(),
829
844
  });
845
+ queueMicrotask(() => {
846
+ void this.saveAgentTreeSnapshot(threadId, runId, snapshotStorage);
847
+ });
830
848
  });
831
849
  },
832
850
  cancelBackgroundTask: async (taskId) => this.cancelBackgroundTask(threadId, taskId),
@@ -841,6 +859,7 @@ let InstanceAiService = class InstanceAiService {
841
859
  nodeDefinitionDirs: nodeDefDirs.length > 0 ? nodeDefDirs : undefined,
842
860
  domainContext: context,
843
861
  tracingProxyConfig,
862
+ memory,
844
863
  };
845
864
  return {
846
865
  context,
@@ -942,6 +961,10 @@ let InstanceAiService = class InstanceAiService {
942
961
  await this.schedulePlannedTasks(user, task.threadId);
943
962
  }
944
963
  async startInternalFollowUpRun(user, threadId, message, researchMode, messageGroupId) {
964
+ if (this.runState.hasLiveRun(threadId)) {
965
+ this.logger.warn('Skipping internal follow-up: active run exists', { threadId });
966
+ return '';
967
+ }
945
968
  const { runId, abortController } = this.runState.startRun({
946
969
  threadId,
947
970
  user,
@@ -952,6 +975,12 @@ let InstanceAiService = class InstanceAiService {
952
975
  return runId;
953
976
  }
954
977
  async schedulePlannedTasks(user, threadId) {
978
+ const prev = this.schedulerLocks.get(threadId) ?? Promise.resolve();
979
+ const current = prev.then(() => this.doSchedulePlannedTasks(user, threadId)).catch(() => { });
980
+ this.schedulerLocks.set(threadId, current);
981
+ await current;
982
+ }
983
+ async doSchedulePlannedTasks(user, threadId) {
955
984
  const { plannedTaskService } = await this.createPlannedTaskState();
956
985
  const graph = await plannedTaskService.getGraph(threadId);
957
986
  if (!graph)
@@ -977,7 +1006,7 @@ let InstanceAiService = class InstanceAiService {
977
1006
  for (const task of action.tasks) {
978
1007
  await this.dispatchPlannedTask(task, environment.orchestrationContext);
979
1008
  }
980
- await this.schedulePlannedTasks(user, threadId);
1009
+ await this.doSchedulePlannedTasks(user, threadId);
981
1010
  }
982
1011
  async executeRun(user, threadId, runId, message, abortController, researchMode, attachments, messageGroupId, timeZone) {
983
1012
  const signal = abortController.signal;
@@ -1005,6 +1034,10 @@ let InstanceAiService = class InstanceAiService {
1005
1034
  const mcpServers = this.parseMcpServers(this.instanceAiConfig.mcpServers);
1006
1035
  const executionPushRef = this.threadPushRef.get(threadId);
1007
1036
  const { context, memory, taskStorage, snapshotStorage, modelId, orchestrationContext } = await this.createExecutionEnvironment(user, threadId, runId, signal, researchMode, messageGroupId, executionPushRef);
1037
+ orchestrationContext.currentUserMessage = message;
1038
+ if (attachments && attachments.length > 0) {
1039
+ context.currentUserAttachments = attachments;
1040
+ }
1008
1041
  const memoryConfig = this.createMemoryConfig();
1009
1042
  const traceInput = {
1010
1043
  message,
@@ -1120,31 +1153,54 @@ let InstanceAiService = class InstanceAiService {
1120
1153
  let streamInput;
1121
1154
  try {
1122
1155
  const enrichedMessage = await this.buildMessageWithRunningTasks(threadId, message);
1123
- const fullMessage = conversationSummary
1156
+ let fullMessage = conversationSummary
1124
1157
  ? `${conversationSummary}\n\n${enrichedMessage}`
1125
1158
  : enrichedMessage;
1126
- streamInput =
1127
- attachments && attachments.length > 0
1128
- ? [
1159
+ if (attachments && attachments.length > 0) {
1160
+ const classified = (0, instance_ai_1.classifyAttachments)(attachments);
1161
+ const nonStructured = attachments.filter((a) => !(0, instance_ai_1.isStructuredAttachment)(a));
1162
+ const hasParseable = classified.some((c) => c.parseable);
1163
+ const manifest = (0, instance_ai_1.buildAttachmentManifest)(classified);
1164
+ if (!message && hasParseable) {
1165
+ fullMessage = conversationSummary
1166
+ ? `${conversationSummary}\n\nThe user attached file(s) without a message. Inspect the first parseable attachment with parse-file and provide a concise summary.\n\n${manifest}`
1167
+ : `The user attached file(s) without a message. Inspect the first parseable attachment with parse-file and provide a concise summary.\n\n${manifest}`;
1168
+ }
1169
+ else {
1170
+ fullMessage = `${fullMessage}\n\n${manifest}`;
1171
+ }
1172
+ if (nonStructured.length > 0) {
1173
+ streamInput = [
1129
1174
  {
1130
1175
  role: 'user',
1131
1176
  content: [
1132
1177
  { type: 'text', text: fullMessage },
1133
- ...attachments.map((a) => ({
1178
+ ...nonStructured.map((a) => ({
1134
1179
  type: 'file',
1135
1180
  data: a.data,
1136
1181
  mimeType: a.mimeType,
1137
1182
  })),
1138
1183
  ],
1139
1184
  },
1140
- ]
1141
- : fullMessage;
1185
+ ];
1186
+ }
1187
+ else {
1188
+ streamInput = fullMessage;
1189
+ }
1190
+ }
1191
+ else {
1192
+ streamInput = fullMessage;
1193
+ }
1142
1194
  if (promptBuildRun && tracing) {
1143
- await tracing.finishRun(promptBuildRun, {
1144
- outputs: {
1195
+ const traceOutput = typeof streamInput === 'string'
1196
+ ? { fullMessage: streamInput }
1197
+ : {
1145
1198
  fullMessage,
1146
- streamInput,
1147
- },
1199
+ attachmentCount: attachments?.length ?? 0,
1200
+ nonStructuredAttachmentCount: attachments?.filter((a) => !(0, instance_ai_1.isStructuredAttachment)(a)).length ?? 0,
1201
+ };
1202
+ await tracing.finishRun(promptBuildRun, {
1203
+ outputs: traceOutput,
1148
1204
  metadata: { final_status: 'completed' },
1149
1205
  });
1150
1206
  }
@@ -1211,7 +1267,16 @@ let InstanceAiService = class InstanceAiService {
1211
1267
  tracing,
1212
1268
  });
1213
1269
  }
1270
+ const intermediateText = await (result.text ?? Promise.resolve(''));
1271
+ if (intermediateText) {
1272
+ this.telemetry.track('Builder sent message', {
1273
+ thread_id: threadId,
1274
+ message: intermediateText,
1275
+ is_intermediate: true,
1276
+ });
1277
+ }
1214
1278
  if (result.confirmationEvent) {
1279
+ this.trackConfirmationRequest(threadId, result.confirmationEvent);
1215
1280
  this.eventBus.publish(threadId, result.confirmationEvent);
1216
1281
  }
1217
1282
  await this.saveAgentTreeSnapshot(threadId, runId, snapshotStorage);
@@ -1236,6 +1301,13 @@ let InstanceAiService = class InstanceAiService {
1236
1301
  });
1237
1302
  if (result.status === 'completed') {
1238
1303
  await this.countCreditsIfFirst(user, threadId, runId);
1304
+ this.telemetry.track('Builder sent message', {
1305
+ thread_id: threadId,
1306
+ message: outputText,
1307
+ });
1308
+ this.telemetry.track('Builder satisfied user intent', {
1309
+ thread_id: threadId,
1310
+ });
1239
1311
  }
1240
1312
  }
1241
1313
  catch (error) {
@@ -1391,9 +1463,19 @@ let InstanceAiService = class InstanceAiService {
1391
1463
  tracing: opts.tracing,
1392
1464
  });
1393
1465
  }
1466
+ const intermediateText = await (result.text ?? Promise.resolve(''));
1467
+ if (intermediateText) {
1468
+ this.telemetry.track('Builder sent message', {
1469
+ thread_id: opts.threadId,
1470
+ message: intermediateText,
1471
+ is_intermediate: true,
1472
+ });
1473
+ }
1394
1474
  if (result.confirmationEvent) {
1475
+ this.trackConfirmationRequest(opts.threadId, result.confirmationEvent);
1395
1476
  this.eventBus.publish(opts.threadId, result.confirmationEvent);
1396
1477
  }
1478
+ await this.saveAgentTreeSnapshot(opts.threadId, opts.runId, opts.snapshotStorage);
1397
1479
  return;
1398
1480
  }
1399
1481
  const outputText = await (result.text ?? Promise.resolve(''));
@@ -1408,6 +1490,15 @@ let InstanceAiService = class InstanceAiService {
1408
1490
  metadata: { completion_source: 'orchestrator' },
1409
1491
  };
1410
1492
  await this.finalizeRun(opts.threadId, opts.runId, result.status, opts.snapshotStorage);
1493
+ if (result.status === 'completed') {
1494
+ this.telemetry.track('Builder sent message', {
1495
+ thread_id: opts.threadId,
1496
+ message: outputText,
1497
+ });
1498
+ this.telemetry.track('Builder satisfied user intent', {
1499
+ thread_id: opts.threadId,
1500
+ });
1501
+ }
1411
1502
  }
1412
1503
  catch (error) {
1413
1504
  if (opts.signal.aborted) {
@@ -1546,6 +1637,41 @@ let InstanceAiService = class InstanceAiService {
1546
1637
  formatTask: async (task) => `[Running task — ${task.role}]: taskId=${task.taskId}`,
1547
1638
  });
1548
1639
  }
1640
+ trackConfirmationRequest(threadId, confirmationEvent) {
1641
+ const payload = confirmationEvent.payload;
1642
+ const inputThreadId = (0, nanoid_1.nanoid)();
1643
+ payload.inputThreadId = inputThreadId;
1644
+ const inputType = payload.inputType;
1645
+ let type;
1646
+ if (inputType) {
1647
+ type = inputType;
1648
+ }
1649
+ else if (Array.isArray(payload.setupRequests) && payload.setupRequests.length > 0) {
1650
+ type = 'setup';
1651
+ }
1652
+ else if (Array.isArray(payload.credentialRequests) && payload.credentialRequests.length > 0) {
1653
+ type = 'credential-setup';
1654
+ }
1655
+ else {
1656
+ type = 'approval';
1657
+ }
1658
+ let numSteps = 1;
1659
+ if (Array.isArray(payload.questions)) {
1660
+ numSteps = payload.questions.length;
1661
+ }
1662
+ else if (Array.isArray(payload.setupRequests)) {
1663
+ numSteps = payload.setupRequests.length;
1664
+ }
1665
+ else if (Array.isArray(payload.credentialRequests)) {
1666
+ numSteps = payload.credentialRequests.length;
1667
+ }
1668
+ this.telemetry.track('Builder asked for input', {
1669
+ thread_id: threadId,
1670
+ input_thread_id: inputThreadId,
1671
+ type,
1672
+ num_steps: numSteps,
1673
+ });
1674
+ }
1549
1675
  publishRunFinish(threadId, runId, status, reason) {
1550
1676
  const effectiveStatus = status === 'errored' ? 'error' : status;
1551
1677
  this.eventBus.publish(threadId, {
@@ -1669,6 +1795,8 @@ exports.InstanceAiService = InstanceAiService = __decorate([
1669
1795
  instance_ai_thread_repository_1.InstanceAiThreadRepository,
1670
1796
  url_service_1.UrlService,
1671
1797
  db_snapshot_storage_1.DbSnapshotStorage,
1672
- db_iteration_log_storage_1.DbIterationLogStorage])
1798
+ db_iteration_log_storage_1.DbIterationLogStorage,
1799
+ source_control_preferences_service_ee_1.SourceControlPreferencesService,
1800
+ telemetry_1.Telemetry])
1673
1801
  ], InstanceAiService);
1674
1802
  //# sourceMappingURL=instance-ai.service.js.map