@n8n/instance-ai 1.7.2 → 1.8.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (363) hide show
  1. package/dist/agent/instance-agent.d.ts +1 -1
  2. package/dist/agent/instance-agent.js +88 -75
  3. package/dist/agent/instance-agent.js.map +1 -1
  4. package/dist/agent/mcp-tool-name-validation.d.ts +4 -2
  5. package/dist/agent/mcp-tool-name-validation.js +2 -2
  6. package/dist/agent/mcp-tool-name-validation.js.map +1 -1
  7. package/dist/agent/runtime-workspace.d.ts +6 -0
  8. package/dist/agent/runtime-workspace.js +14 -0
  9. package/dist/agent/runtime-workspace.js.map +1 -0
  10. package/dist/agent/sanitize-mcp-schemas.d.ts +4 -3
  11. package/dist/agent/sanitize-mcp-schemas.js +53 -24
  12. package/dist/agent/sanitize-mcp-schemas.js.map +1 -1
  13. package/dist/agent/sub-agent-debriefing.d.ts +2 -2
  14. package/dist/agent/sub-agent-factory.d.ts +7 -4
  15. package/dist/agent/sub-agent-factory.js +24 -13
  16. package/dist/agent/sub-agent-factory.js.map +1 -1
  17. package/dist/agent/system-prompt.js +18 -15
  18. package/dist/agent/system-prompt.js.map +1 -1
  19. package/dist/build.tsbuildinfo +1 -1
  20. package/dist/constants/max-steps.d.ts +1 -1
  21. package/dist/constants/max-steps.js +1 -1
  22. package/dist/constants/max-steps.js.map +1 -1
  23. package/dist/domain-access/domain-gating.d.ts +2 -2
  24. package/dist/error-formatting.d.ts +1 -0
  25. package/dist/error-formatting.js +159 -0
  26. package/dist/error-formatting.js.map +1 -0
  27. package/dist/index.d.ts +65 -24
  28. package/dist/index.js +96 -52
  29. package/dist/index.js.map +1 -1
  30. package/dist/mcp/mcp-client-manager.d.ts +5 -4
  31. package/dist/mcp/mcp-client-manager.js +42 -17
  32. package/dist/mcp/mcp-client-manager.js.map +1 -1
  33. package/dist/memory/title-utils.d.ts +4 -1
  34. package/dist/memory/title-utils.js +10 -2
  35. package/dist/memory/title-utils.js.map +1 -1
  36. package/dist/parsers/structured-file-parser.d.ts +5 -2
  37. package/dist/parsers/structured-file-parser.js +9 -2
  38. package/dist/parsers/structured-file-parser.js.map +1 -1
  39. package/dist/planned-tasks/planned-task-permissions.js +3 -5
  40. package/dist/planned-tasks/planned-task-permissions.js.map +1 -1
  41. package/dist/planned-tasks/planned-task-service.d.ts +1 -0
  42. package/dist/planned-tasks/planned-task-service.js +8 -0
  43. package/dist/planned-tasks/planned-task-service.js.map +1 -1
  44. package/dist/runtime/background-task-manager.d.ts +9 -2
  45. package/dist/runtime/background-task-manager.js +7 -2
  46. package/dist/runtime/background-task-manager.js.map +1 -1
  47. package/dist/runtime/liveness-policy.js +4 -3
  48. package/dist/runtime/liveness-policy.js.map +1 -1
  49. package/dist/runtime/resumable-stream-executor.d.ts +4 -24
  50. package/dist/runtime/resumable-stream-executor.js +103 -1318
  51. package/dist/runtime/resumable-stream-executor.js.map +1 -1
  52. package/dist/runtime/run-state-registry.d.ts +8 -2
  53. package/dist/runtime/run-state-registry.js +19 -1
  54. package/dist/runtime/run-state-registry.js.map +1 -1
  55. package/dist/runtime/stream-runner.d.ts +4 -4
  56. package/dist/runtime/stream-runner.js +11 -25
  57. package/dist/runtime/stream-runner.js.map +1 -1
  58. package/dist/skills/materialize-runtime-skills.d.ts +62 -0
  59. package/dist/skills/materialize-runtime-skills.js +467 -0
  60. package/dist/skills/materialize-runtime-skills.js.map +1 -0
  61. package/dist/skills/runtime-skills.d.ts +4 -0
  62. package/dist/skills/runtime-skills.js +17 -0
  63. package/dist/skills/runtime-skills.js.map +1 -0
  64. package/dist/source-map-filter.d.ts +17 -0
  65. package/dist/source-map-filter.js +39 -0
  66. package/dist/source-map-filter.js.map +1 -0
  67. package/dist/storage/agent-tree-snapshot.d.ts +2 -0
  68. package/dist/storage/index.d.ts +3 -3
  69. package/dist/storage/index.js +8 -7
  70. package/dist/storage/index.js.map +1 -1
  71. package/dist/storage/planned-task-storage.d.ts +3 -3
  72. package/dist/storage/planned-task-storage.js +3 -8
  73. package/dist/storage/planned-task-storage.js.map +1 -1
  74. package/dist/storage/terminal-outcome-storage.d.ts +4 -4
  75. package/dist/storage/terminal-outcome-storage.js +1 -1
  76. package/dist/storage/terminal-outcome-storage.js.map +1 -1
  77. package/dist/storage/{mastra-iteration-log-storage.d.ts → thread-iteration-log-storage.d.ts} +3 -3
  78. package/dist/storage/{mastra-iteration-log-storage.js → thread-iteration-log-storage.js} +5 -5
  79. package/dist/storage/thread-iteration-log-storage.js.map +1 -0
  80. package/dist/storage/thread-patch.d.ts +16 -10
  81. package/dist/storage/thread-patch.js +37 -36
  82. package/dist/storage/thread-patch.js.map +1 -1
  83. package/dist/storage/{mastra-task-storage.d.ts → thread-task-storage.d.ts} +3 -3
  84. package/dist/storage/{mastra-task-storage.js → thread-task-storage.js} +5 -5
  85. package/dist/storage/thread-task-storage.js.map +1 -0
  86. package/dist/storage/workflow-loop-storage.d.ts +28 -28
  87. package/dist/storage/workflow-loop-storage.js +1 -1
  88. package/dist/storage/workflow-loop-storage.js.map +1 -1
  89. package/dist/stream/consume-with-hitl.d.ts +11 -11
  90. package/dist/stream/consume-with-hitl.js +27 -15
  91. package/dist/stream/consume-with-hitl.js.map +1 -1
  92. package/dist/stream/map-chunk.d.ts +1 -1
  93. package/dist/stream/map-chunk.js +153 -36
  94. package/dist/stream/map-chunk.js.map +1 -1
  95. package/dist/tool-registry.d.ts +8 -0
  96. package/dist/tool-registry.js +45 -0
  97. package/dist/tool-registry.js.map +1 -0
  98. package/dist/tools/attachments/parse-file.tool.d.ts +42 -45
  99. package/dist/tools/attachments/parse-file.tool.js +140 -97
  100. package/dist/tools/attachments/parse-file.tool.js.map +1 -1
  101. package/dist/tools/credentials.tool.d.ts +5 -5
  102. package/dist/tools/credentials.tool.js +31 -34
  103. package/dist/tools/credentials.tool.js.map +1 -1
  104. package/dist/tools/data-tables.tool.d.ts +3 -2
  105. package/dist/tools/data-tables.tool.js +99 -100
  106. package/dist/tools/data-tables.tool.js.map +1 -1
  107. package/dist/tools/evals/apply-pin-data.service.d.ts +3 -0
  108. package/dist/tools/evals/apply-pin-data.service.js +19 -0
  109. package/dist/tools/evals/apply-pin-data.service.js.map +1 -0
  110. package/dist/tools/evals/column-ref-utils.d.ts +3 -0
  111. package/dist/tools/evals/column-ref-utils.js +205 -48
  112. package/dist/tools/evals/column-ref-utils.js.map +1 -1
  113. package/dist/tools/evals/detect-agent-named-refs.service.js +20 -4
  114. package/dist/tools/evals/detect-agent-named-refs.service.js.map +1 -1
  115. package/dist/tools/evals/ensure-eval-data-table.service.d.ts +15 -0
  116. package/dist/tools/evals/ensure-eval-data-table.service.js +83 -0
  117. package/dist/tools/evals/ensure-eval-data-table.service.js.map +1 -0
  118. package/dist/tools/evals/eval-data-requirements.service.d.ts +1 -0
  119. package/dist/tools/evals/eval-data-requirements.service.js +23 -4
  120. package/dist/tools/evals/eval-data-requirements.service.js.map +1 -1
  121. package/dist/tools/evals/evals.tool.d.ts +2 -0
  122. package/dist/tools/evals/evals.tool.js +452 -0
  123. package/dist/tools/evals/evals.tool.js.map +1 -0
  124. package/dist/tools/evals/extract-rows-from-history.service.d.ts +17 -0
  125. package/dist/tools/evals/extract-rows-from-history.service.js +103 -0
  126. package/dist/tools/evals/extract-rows-from-history.service.js.map +1 -0
  127. package/dist/tools/evals/format-eval-setup-task.d.ts +16 -0
  128. package/dist/tools/evals/format-eval-setup-task.js +167 -0
  129. package/dist/tools/evals/format-eval-setup-task.js.map +1 -0
  130. package/dist/tools/evals/generate-sample-rows.service.d.ts +35 -0
  131. package/dist/tools/evals/generate-sample-rows.service.js +278 -0
  132. package/dist/tools/evals/generate-sample-rows.service.js.map +1 -0
  133. package/dist/tools/evals/generate-tool-ref-pin-data.service.d.ts +11 -0
  134. package/dist/tools/evals/generate-tool-ref-pin-data.service.js +125 -0
  135. package/dist/tools/evals/generate-tool-ref-pin-data.service.js.map +1 -0
  136. package/dist/tools/evals/metric-catalog.d.ts +10 -4
  137. package/dist/tools/evals/metric-catalog.js.map +1 -1
  138. package/dist/tools/executions.tool.d.ts +1 -1
  139. package/dist/tools/executions.tool.js +25 -34
  140. package/dist/tools/executions.tool.js.map +1 -1
  141. package/dist/tools/filesystem/create-tools-from-mcp-server.d.ts +2 -3
  142. package/dist/tools/filesystem/create-tools-from-mcp-server.js +129 -67
  143. package/dist/tools/filesystem/create-tools-from-mcp-server.js.map +1 -1
  144. package/dist/tools/index.d.ts +4 -16
  145. package/dist/tools/index.js +102 -92
  146. package/dist/tools/index.js.map +1 -1
  147. package/dist/tools/nodes.tool.d.ts +1 -1
  148. package/dist/tools/nodes.tool.js +31 -33
  149. package/dist/tools/nodes.tool.js.map +1 -1
  150. package/dist/tools/orchestration/add-plan-item.tool.d.ts +2 -2
  151. package/dist/tools/orchestration/add-plan-item.tool.js +45 -49
  152. package/dist/tools/orchestration/add-plan-item.tool.js.map +1 -1
  153. package/dist/tools/orchestration/agent-persistence.d.ts +14 -0
  154. package/dist/tools/orchestration/agent-persistence.js +43 -0
  155. package/dist/tools/orchestration/agent-persistence.js.map +1 -0
  156. package/dist/tools/orchestration/blueprint-accumulator.d.ts +4 -8
  157. package/dist/tools/orchestration/blueprint-accumulator.js +11 -78
  158. package/dist/tools/orchestration/blueprint-accumulator.js.map +1 -1
  159. package/dist/tools/orchestration/blueprint.schema.d.ts +13 -147
  160. package/dist/tools/orchestration/blueprint.schema.js +4 -23
  161. package/dist/tools/orchestration/blueprint.schema.js.map +1 -1
  162. package/dist/tools/orchestration/browser-credential-setup.nudge.d.ts +2 -4
  163. package/dist/tools/orchestration/browser-credential-setup.nudge.js +1 -1
  164. package/dist/tools/orchestration/browser-credential-setup.nudge.js.map +1 -1
  165. package/dist/tools/orchestration/browser-credential-setup.tool.d.ts +10 -2
  166. package/dist/tools/orchestration/browser-credential-setup.tool.js +299 -270
  167. package/dist/tools/orchestration/browser-credential-setup.tool.js.map +1 -1
  168. package/dist/tools/orchestration/build-workflow-agent.prompt.d.ts +7 -1
  169. package/dist/tools/orchestration/build-workflow-agent.prompt.js +46 -20
  170. package/dist/tools/orchestration/build-workflow-agent.prompt.js.map +1 -1
  171. package/dist/tools/orchestration/build-workflow-agent.tool.d.ts +50 -5
  172. package/dist/tools/orchestration/build-workflow-agent.tool.js +748 -605
  173. package/dist/tools/orchestration/build-workflow-agent.tool.js.map +1 -1
  174. package/dist/tools/orchestration/builder-memory-compaction.d.ts +6 -2
  175. package/dist/tools/orchestration/builder-memory-compaction.js +32 -46
  176. package/dist/tools/orchestration/builder-memory-compaction.js.map +1 -1
  177. package/dist/tools/orchestration/complete-checkpoint.tool.d.ts +1 -1
  178. package/dist/tools/orchestration/complete-checkpoint.tool.js +46 -47
  179. package/dist/tools/orchestration/complete-checkpoint.tool.js.map +1 -1
  180. package/dist/tools/orchestration/delegate.tool.d.ts +1 -1
  181. package/dist/tools/orchestration/delegate.tool.js +170 -166
  182. package/dist/tools/orchestration/delegate.tool.js.map +1 -1
  183. package/dist/tools/orchestration/eval-data-agent.tool.d.ts +2 -0
  184. package/dist/tools/orchestration/eval-data-agent.tool.js +183 -0
  185. package/dist/tools/orchestration/eval-data-agent.tool.js.map +1 -0
  186. package/dist/tools/orchestration/eval-setup-agent.prompt.d.ts +1 -0
  187. package/dist/tools/orchestration/eval-setup-agent.prompt.js +238 -0
  188. package/dist/tools/orchestration/eval-setup-agent.prompt.js.map +1 -0
  189. package/dist/tools/orchestration/eval-setup-agent.tool.d.ts +31 -0
  190. package/dist/tools/orchestration/eval-setup-agent.tool.js +204 -0
  191. package/dist/tools/orchestration/eval-setup-agent.tool.js.map +1 -0
  192. package/dist/tools/orchestration/plan-agent-prompt.d.ts +1 -1
  193. package/dist/tools/orchestration/plan-agent-prompt.js +9 -9
  194. package/dist/tools/orchestration/plan-with-agent.tool.d.ts +1 -1
  195. package/dist/tools/orchestration/plan-with-agent.tool.js +210 -179
  196. package/dist/tools/orchestration/plan-with-agent.tool.js.map +1 -1
  197. package/dist/tools/orchestration/plan.tool.d.ts +5 -2
  198. package/dist/tools/orchestration/plan.tool.js +125 -105
  199. package/dist/tools/orchestration/plan.tool.js.map +1 -1
  200. package/dist/tools/orchestration/report-verification-verdict.tool.d.ts +3 -3
  201. package/dist/tools/orchestration/report-verification-verdict.tool.js +65 -66
  202. package/dist/tools/orchestration/report-verification-verdict.tool.js.map +1 -1
  203. package/dist/tools/orchestration/submit-plan.tool.d.ts +1 -1
  204. package/dist/tools/orchestration/submit-plan.tool.js +83 -66
  205. package/dist/tools/orchestration/submit-plan.tool.js.map +1 -1
  206. package/dist/tools/orchestration/tracing-utils.d.ts +3 -2
  207. package/dist/tools/orchestration/tracing-utils.js +58 -39
  208. package/dist/tools/orchestration/tracing-utils.js.map +1 -1
  209. package/dist/tools/orchestration/verify-built-workflow.tool.d.ts +5 -5
  210. package/dist/tools/orchestration/verify-built-workflow.tool.js +166 -166
  211. package/dist/tools/orchestration/verify-built-workflow.tool.js.map +1 -1
  212. package/dist/tools/research.tool.d.ts +1 -1
  213. package/dist/tools/research.tool.js +59 -27
  214. package/dist/tools/research.tool.js.map +1 -1
  215. package/dist/tools/shared/ask-user.tool.d.ts +3 -2
  216. package/dist/tools/shared/ask-user.tool.js +61 -63
  217. package/dist/tools/shared/ask-user.tool.js.map +1 -1
  218. package/dist/tools/task-control.tool.d.ts +1 -1
  219. package/dist/tools/task-control.tool.js +15 -16
  220. package/dist/tools/task-control.tool.js.map +1 -1
  221. package/dist/tools/templates.tool.d.ts +1 -1
  222. package/dist/tools/templates.tool.js +6 -7
  223. package/dist/tools/templates.tool.js.map +1 -1
  224. package/dist/tools/tool-ids.d.ts +40 -0
  225. package/dist/tools/tool-ids.js +62 -0
  226. package/dist/tools/tool-ids.js.map +1 -0
  227. package/dist/tools/workflows/apply-workflow-credentials.tool.d.ts +3 -3
  228. package/dist/tools/workflows/apply-workflow-credentials.tool.js +72 -73
  229. package/dist/tools/workflows/apply-workflow-credentials.tool.js.map +1 -1
  230. package/dist/tools/workflows/build-workflow.tool.d.ts +3 -3
  231. package/dist/tools/workflows/build-workflow.tool.js +113 -114
  232. package/dist/tools/workflows/build-workflow.tool.js.map +1 -1
  233. package/dist/tools/workflows/materialize-node-type.tool.d.ts +6 -6
  234. package/dist/tools/workflows/materialize-node-type.tool.js +64 -65
  235. package/dist/tools/workflows/materialize-node-type.tool.js.map +1 -1
  236. package/dist/tools/workflows/resolve-credentials.d.ts +3 -5
  237. package/dist/tools/workflows/resolve-credentials.js +15 -6
  238. package/dist/tools/workflows/resolve-credentials.js.map +1 -1
  239. package/dist/tools/workflows/setup-workflow.schema.d.ts +2 -2
  240. package/dist/tools/workflows/submit-workflow-identity.d.ts +8 -9
  241. package/dist/tools/workflows/submit-workflow-identity.js +41 -27
  242. package/dist/tools/workflows/submit-workflow-identity.js.map +1 -1
  243. package/dist/tools/workflows/submit-workflow.tool.d.ts +10 -7
  244. package/dist/tools/workflows/submit-workflow.tool.js +224 -191
  245. package/dist/tools/workflows/submit-workflow.tool.js.map +1 -1
  246. package/dist/tools/workflows/validate-workflow.service.d.ts +15 -0
  247. package/dist/tools/workflows/validate-workflow.service.js +289 -0
  248. package/dist/tools/workflows/validate-workflow.service.js.map +1 -0
  249. package/dist/tools/workflows/write-sandbox-file.tool.d.ts +2 -2
  250. package/dist/tools/workflows/write-sandbox-file.tool.js +29 -30
  251. package/dist/tools/workflows/write-sandbox-file.tool.js.map +1 -1
  252. package/dist/tools/workflows.tool.d.ts +5 -2
  253. package/dist/tools/workflows.tool.js +184 -85
  254. package/dist/tools/workflows.tool.js.map +1 -1
  255. package/dist/tools/workspace.tool.d.ts +1 -1
  256. package/dist/tools/workspace.tool.js +49 -65
  257. package/dist/tools/workspace.tool.js.map +1 -1
  258. package/dist/tracing/langsmith-tracing.d.ts +17 -18
  259. package/dist/tracing/langsmith-tracing.js +941 -677
  260. package/dist/tracing/langsmith-tracing.js.map +1 -1
  261. package/dist/tracing/trace-labels.d.ts +5 -0
  262. package/dist/tracing/trace-labels.js +36 -0
  263. package/dist/tracing/trace-labels.js.map +1 -0
  264. package/dist/tracing/trace-payloads.d.ts +23 -0
  265. package/dist/tracing/trace-payloads.js +1008 -0
  266. package/dist/tracing/trace-payloads.js.map +1 -0
  267. package/dist/types.d.ts +57 -25
  268. package/dist/types.js +3 -0
  269. package/dist/types.js.map +1 -1
  270. package/dist/utils/eval-agents.js +1 -1
  271. package/dist/utils/eval-agents.js.map +1 -1
  272. package/dist/utils/scrub-secrets.js +1 -1
  273. package/dist/utils/scrub-secrets.js.map +1 -1
  274. package/dist/utils/stream-helpers.d.ts +2 -5
  275. package/dist/utils/stream-helpers.js +12 -1
  276. package/dist/utils/stream-helpers.js.map +1 -1
  277. package/dist/workflow-loop/workflow-loop-state.d.ts +18 -18
  278. package/dist/workspace/builder-templates-service.d.ts +54 -0
  279. package/dist/workspace/builder-templates-service.js +442 -0
  280. package/dist/workspace/builder-templates-service.js.map +1 -0
  281. package/dist/workspace/create-workspace.d.ts +16 -3
  282. package/dist/workspace/create-workspace.js +45 -21
  283. package/dist/workspace/create-workspace.js.map +1 -1
  284. package/dist/workspace/daytona-auth-manager.d.ts +26 -0
  285. package/dist/workspace/daytona-auth-manager.js +90 -0
  286. package/dist/workspace/daytona-auth-manager.js.map +1 -0
  287. package/dist/workspace/daytona-filesystem.d.ts +5 -4
  288. package/dist/workspace/daytona-filesystem.js +25 -15
  289. package/dist/workspace/daytona-filesystem.js.map +1 -1
  290. package/dist/workspace/daytona-sandbox.d.ts +65 -0
  291. package/dist/workspace/daytona-sandbox.js +314 -0
  292. package/dist/workspace/daytona-sandbox.js.map +1 -0
  293. package/dist/workspace/lazy-daytona.d.ts +2 -0
  294. package/dist/workspace/lazy-daytona.js +12 -0
  295. package/dist/workspace/lazy-daytona.js.map +1 -0
  296. package/dist/workspace/lazy-runtime-workspace.d.ts +8 -0
  297. package/dist/workspace/lazy-runtime-workspace.js +246 -0
  298. package/dist/workspace/lazy-runtime-workspace.js.map +1 -0
  299. package/dist/workspace/local-filesystem.d.ts +48 -0
  300. package/dist/workspace/local-filesystem.js +250 -0
  301. package/dist/workspace/local-filesystem.js.map +1 -0
  302. package/dist/workspace/local-sandbox.d.ts +28 -0
  303. package/dist/workspace/local-sandbox.js +121 -0
  304. package/dist/workspace/local-sandbox.js.map +1 -0
  305. package/dist/workspace/n8n-sandbox-filesystem.d.ts +3 -3
  306. package/dist/workspace/n8n-sandbox-filesystem.js +3 -3
  307. package/dist/workspace/n8n-sandbox-filesystem.js.map +1 -1
  308. package/dist/workspace/n8n-sandbox-sandbox.d.ts +12 -3
  309. package/dist/workspace/n8n-sandbox-sandbox.js +54 -10
  310. package/dist/workspace/n8n-sandbox-sandbox.js.map +1 -1
  311. package/dist/workspace/sandbox-fs.d.ts +35 -4
  312. package/dist/workspace/sandbox-fs.js +1 -1
  313. package/dist/workspace/sandbox-fs.js.map +1 -1
  314. package/dist/workspace/sandbox-setup.d.ts +13 -4
  315. package/dist/workspace/sandbox-setup.js +250 -36
  316. package/dist/workspace/sandbox-setup.js.map +1 -1
  317. package/dist/workspace/scoped-workspace.d.ts +2 -0
  318. package/dist/workspace/scoped-workspace.js +141 -0
  319. package/dist/workspace/scoped-workspace.js.map +1 -0
  320. package/dist/workspace/snapshot-manager.d.ts +11 -5
  321. package/dist/workspace/snapshot-manager.js +64 -17
  322. package/dist/workspace/snapshot-manager.js.map +1 -1
  323. package/dist/workspace/template-telemetry.d.ts +4 -4
  324. package/dist/workspace/template-telemetry.js +18 -6
  325. package/dist/workspace/template-telemetry.js.map +1 -1
  326. package/package.json +12 -15
  327. package/skills/data-table-manager/SKILL.md +119 -0
  328. package/skills/data-table-manager/references/data-table-playbook.md +212 -0
  329. package/dist/agent/register-with-mastra.d.ts +0 -3
  330. package/dist/agent/register-with-mastra.js +0 -15
  331. package/dist/agent/register-with-mastra.js.map +0 -1
  332. package/dist/compaction/compaction-helper.d.ts +0 -9
  333. package/dist/compaction/compaction-helper.js +0 -58
  334. package/dist/compaction/compaction-helper.js.map +0 -1
  335. package/dist/compaction/index.d.ts +0 -2
  336. package/dist/compaction/index.js +0 -6
  337. package/dist/compaction/index.js.map +0 -1
  338. package/dist/memory/memory-config.d.ts +0 -3
  339. package/dist/memory/memory-config.js +0 -27
  340. package/dist/memory/memory-config.js.map +0 -1
  341. package/dist/runtime/builder-sandbox-session-registry.d.ts +0 -47
  342. package/dist/runtime/builder-sandbox-session-registry.js +0 -166
  343. package/dist/runtime/builder-sandbox-session-registry.js.map +0 -1
  344. package/dist/storage/mastra-iteration-log-storage.js.map +0 -1
  345. package/dist/storage/mastra-task-storage.js.map +0 -1
  346. package/dist/tools/orchestration/data-table-agent.prompt.d.ts +0 -1
  347. package/dist/tools/orchestration/data-table-agent.prompt.js +0 -47
  348. package/dist/tools/orchestration/data-table-agent.prompt.js.map +0 -1
  349. package/dist/tools/orchestration/data-table-agent.tool.d.ts +0 -26
  350. package/dist/tools/orchestration/data-table-agent.tool.js +0 -174
  351. package/dist/tools/orchestration/data-table-agent.tool.js.map +0 -1
  352. package/dist/tools/orchestration/research-agent-prompt.d.ts +0 -1
  353. package/dist/tools/orchestration/research-agent-prompt.js +0 -26
  354. package/dist/tools/orchestration/research-agent-prompt.js.map +0 -1
  355. package/dist/tools/orchestration/research-with-agent.tool.d.ts +0 -30
  356. package/dist/tools/orchestration/research-with-agent.tool.js +0 -179
  357. package/dist/tools/orchestration/research-with-agent.tool.js.map +0 -1
  358. package/dist/workspace/builder-sandbox-factory.d.ts +0 -30
  359. package/dist/workspace/builder-sandbox-factory.js +0 -289
  360. package/dist/workspace/builder-sandbox-factory.js.map +0 -1
  361. package/dist/workspace/guarded-filesystem.d.ts +0 -10
  362. package/dist/workspace/guarded-filesystem.js +0 -136
  363. package/dist/workspace/guarded-filesystem.js.map +0 -1
@@ -1,29 +1,31 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.browserCredentialSetupResumeSchema = exports.browserCredentialSetupInputSchema = exports.buildBrowserAgentPrompt = void 0;
3
+ exports.browserCredentialSetupResumeSchema = exports.browserCredentialSetupInputSchema = exports.__testWrapBrowserToolsForDenialDetection = exports.__testHasPermanentBrowserDenial = exports.__testIsPermanentDenialResult = exports.buildBrowserAgentPrompt = void 0;
4
4
  exports.createBrowserCredentialSetupTool = createBrowserCredentialSetupTool;
5
- const agent_1 = require("@mastra/core/agent");
6
- const tools_1 = require("@mastra/core/tools");
5
+ const agents_1 = require("@n8n/agents");
7
6
  const api_types_1 = require("@n8n/api-types");
8
7
  const nanoid_1 = require("nanoid");
9
8
  const zod_1 = require("zod");
9
+ const agent_persistence_1 = require("./agent-persistence");
10
10
  const browser_credential_setup_nudge_1 = require("./browser-credential-setup.nudge");
11
11
  const browser_credential_setup_prompt_1 = require("./browser-credential-setup.prompt");
12
12
  const tracing_utils_1 = require("./tracing-utils");
13
- const register_with_mastra_1 = require("../../agent/register-with-mastra");
13
+ const runtime_workspace_1 = require("../../agent/runtime-workspace");
14
14
  const max_steps_1 = require("../../constants/max-steps");
15
15
  const resumable_stream_executor_1 = require("../../runtime/resumable-stream-executor");
16
+ const tool_registry_1 = require("../../tool-registry");
16
17
  const langsmith_tracing_1 = require("../../tracing/langsmith-tracing");
17
18
  const create_tools_from_mcp_server_1 = require("../filesystem/create-tools-from-mcp-server");
18
19
  const research_tool_1 = require("../research.tool");
19
20
  const ask_user_tool_1 = require("../shared/ask-user.tool");
20
21
  var browser_credential_setup_prompt_2 = require("./browser-credential-setup.prompt");
21
22
  Object.defineProperty(exports, "buildBrowserAgentPrompt", { enumerable: true, get: function () { return browser_credential_setup_prompt_2.buildBrowserAgentPrompt; } });
23
+ const BROWSER_CREDENTIAL_AGENT_ROLE = 'credential-setup-browser-agent';
22
24
  const PERMANENT_DENIAL_MARKER = 'User permanently denied access to';
23
25
  const BROWSER_DENIED_RESULT = 'Browser access was denied by the user. Provide manual setup guidance in chat — do not try the browser flow again in this turn.';
24
26
  const browserToolErrorResultSchema = zod_1.z.object({
25
27
  isError: zod_1.z.literal(true),
26
- structuredContent: zod_1.z.object({ error: zod_1.z.string().optional() }).optional(),
28
+ structuredContent: zod_1.z.object({ error: zod_1.z.string().optional() }).passthrough().optional(),
27
29
  content: zod_1.z.array(zod_1.z.object({ text: zod_1.z.string() }).passthrough()).optional(),
28
30
  });
29
31
  function isPermanentDenialResult(result) {
@@ -34,58 +36,74 @@ function isPermanentDenialResult(result) {
34
36
  parsed.data.structuredContent?.error ?? '',
35
37
  ...(parsed.data.content?.map((c) => c.text) ?? []),
36
38
  ];
37
- return messages.some((m) => m.includes(PERMANENT_DENIAL_MARKER));
39
+ return messages.some((message) => message.includes(PERMANENT_DENIAL_MARKER));
40
+ }
41
+ function isPermanentDenialError(error) {
42
+ return error instanceof Error && error.message.includes(PERMANENT_DENIAL_MARKER);
43
+ }
44
+ function hasPermanentBrowserDenial(workSummary) {
45
+ return workSummary.toolCalls.some((toolCall) => toolCall.toolName.startsWith('browser_') &&
46
+ toolCall.errorSummary?.includes(PERMANENT_DENIAL_MARKER) === true);
38
47
  }
39
48
  function wrapToolForDenialDetection(tool, onDenied) {
40
- const originalExecute = tool.execute;
41
- if (!originalExecute)
49
+ const originalHandler = tool.handler;
50
+ if (!originalHandler)
42
51
  return tool;
43
- const observingExecute = async (input, ctx) => {
44
- const result = await originalExecute(input, ctx);
45
- if (isPermanentDenialResult(result))
46
- onDenied();
47
- return result;
52
+ return {
53
+ ...tool,
54
+ handler: async (input, ctx) => {
55
+ try {
56
+ const result = await originalHandler(input, ctx);
57
+ if (isPermanentDenialResult(result))
58
+ onDenied();
59
+ return result;
60
+ }
61
+ catch (error) {
62
+ if (isPermanentDenialError(error))
63
+ onDenied();
64
+ throw error;
65
+ }
66
+ },
48
67
  };
49
- return { ...tool, execute: observingExecute };
50
68
  }
51
69
  function wrapBrowserToolsForDenialDetection(tools, onDenied) {
52
- const wrapped = {};
53
- for (const [name, tool] of Object.entries(tools)) {
54
- wrapped[name] = name.startsWith('browser_') ? wrapToolForDenialDetection(tool, onDenied) : tool;
70
+ const wrapped = (0, tool_registry_1.createToolRegistry)();
71
+ for (const [name, tool] of tools) {
72
+ wrapped.set(name, name.startsWith('browser_') ? wrapToolForDenialDetection(tool, onDenied) : tool);
55
73
  }
56
74
  return wrapped;
57
75
  }
76
+ exports.__testIsPermanentDenialResult = isPermanentDenialResult;
77
+ exports.__testHasPermanentBrowserDenial = hasPermanentBrowserDenial;
78
+ exports.__testWrapBrowserToolsForDenialDetection = wrapBrowserToolsForDenialDetection;
58
79
  function createPauseForUserTool() {
59
- return (0, tools_1.createTool)({
60
- id: 'pause-for-user',
61
- description: 'Pause and wait for the user to complete an action in the browser (e.g., sign in, ' +
62
- 'complete 2FA, click a button, enter values privately into n8n, download files). The user sees a message and confirms when done.',
63
- inputSchema: exports.browserCredentialSetupInputSchema,
64
- outputSchema: zod_1.z.object({
65
- continued: zod_1.z.boolean(),
66
- }),
67
- suspendSchema: zod_1.z.object({
68
- requestId: zod_1.z.string(),
69
- message: zod_1.z.string(),
70
- severity: api_types_1.instanceAiConfirmationSeveritySchema,
71
- inputType: zod_1.z.literal('continue'),
72
- }),
73
- resumeSchema: exports.browserCredentialSetupResumeSchema,
74
- execute: async (input, ctx) => {
75
- const resumeData = ctx?.agent?.resumeData;
76
- const suspend = ctx?.agent?.suspend;
77
- if (resumeData === undefined || resumeData === null) {
78
- await suspend?.({
79
- requestId: (0, nanoid_1.nanoid)(),
80
- message: input.message,
81
- severity: 'info',
82
- inputType: 'continue',
83
- });
84
- return { continued: false };
85
- }
86
- return { continued: resumeData.approved };
87
- },
88
- });
80
+ return new agents_1.Tool('pause-for-user')
81
+ .description('Pause and wait for the user to complete an action in the browser (e.g., sign in, ' +
82
+ 'complete 2FA, click a button, enter values privately into n8n, download files). The user sees a message and confirms when done.')
83
+ .input(exports.browserCredentialSetupInputSchema)
84
+ .output(zod_1.z.object({
85
+ continued: zod_1.z.boolean(),
86
+ }))
87
+ .suspend(zod_1.z.object({
88
+ requestId: zod_1.z.string(),
89
+ message: zod_1.z.string(),
90
+ severity: api_types_1.instanceAiConfirmationSeveritySchema,
91
+ inputType: zod_1.z.literal('continue'),
92
+ }))
93
+ .resume(exports.browserCredentialSetupResumeSchema)
94
+ .handler(async (input, ctx) => {
95
+ const resumeData = ctx.resumeData;
96
+ if (resumeData === undefined || resumeData === null) {
97
+ return await ctx.suspend({
98
+ requestId: (0, nanoid_1.nanoid)(),
99
+ message: input.message,
100
+ severity: 'info',
101
+ inputType: 'continue',
102
+ });
103
+ }
104
+ return { continued: resumeData.approved };
105
+ })
106
+ .build();
89
107
  }
90
108
  exports.browserCredentialSetupInputSchema = zod_1.z.object({
91
109
  message: zod_1.z.string().describe('What the user needs to do (shown in the chat UI)'),
@@ -107,242 +125,253 @@ const browserCredentialSetupToolInputSchema = zod_1.z.object({
107
125
  .optional()
108
126
  .describe('Credential fields the user needs to obtain from the service'),
109
127
  });
128
+ function buildCredentialSetupBriefing(input, context) {
129
+ const docsLine = input.docsUrl
130
+ ? `**Documentation:** ${input.docsUrl}`
131
+ : '**Documentation:** No URL available — use `research` (action: web-search) to find setup instructions.';
132
+ let fieldsSection = '';
133
+ if (input.requiredFields && input.requiredFields.length > 0) {
134
+ const fieldLines = input.requiredFields.map((field) => `- ${field.displayName} (${field.name})${field.required ? ' [REQUIRED]' : ''}${field.description ? ': ' + field.description : ''}`);
135
+ fieldsSection = `\n### Required Fields\n${fieldLines.join('\n')}`;
136
+ }
137
+ const isOAuth = input.credentialType.toLowerCase().includes('oauth');
138
+ const oauthSection = isOAuth && context.oauth2CallbackUrl
139
+ ? `\n### OAuth Redirect URL\n${context.oauth2CallbackUrl}\n` +
140
+ 'Paste this into the "Authorized redirect URIs" field. ' +
141
+ 'Do NOT navigate to the n8n instance to find it — use this URL directly.'
142
+ : '';
143
+ return [
144
+ `## Credential Setup: ${input.credentialType}`,
145
+ '',
146
+ docsLine,
147
+ fieldsSection,
148
+ oauthSection,
149
+ '',
150
+ '### Completion Criteria',
151
+ 'Done ONLY when all required values are visible on screen or downloaded, and you have called `pause-for-user` telling the user where to find them and to enter them privately in n8n.',
152
+ ]
153
+ .filter(Boolean)
154
+ .join('\n');
155
+ }
110
156
  function createBrowserCredentialSetupTool(context) {
111
- return (0, tools_1.createTool)({
112
- id: 'browser-credential-setup',
113
- description: 'Run a browser agent that navigates to credential documentation and helps the user ' +
114
- 'set up a credential on the external service. The browser is visible to the user. ' +
115
- 'The agent can pause for user interaction (sign-in, 2FA, etc.).',
116
- inputSchema: browserCredentialSetupToolInputSchema,
117
- outputSchema: zod_1.z.object({
118
- result: zod_1.z.string(),
119
- }),
120
- execute: async (input) => {
121
- const browserTools = {};
122
- let toolSource;
123
- const gatewayBrowserTools = context.localMcpServer?.getToolsByCategory('browser') ?? [];
124
- if (gatewayBrowserTools.length > 0 && context.localMcpServer) {
125
- const gatewayBrowserNames = new Set(gatewayBrowserTools.map((t) => t.name));
126
- const allGatewayTools = (0, create_tools_from_mcp_server_1.createToolsFromLocalMcpServer)(context.localMcpServer, context.logger);
127
- for (const [name, tool] of Object.entries(allGatewayTools)) {
128
- if (gatewayBrowserNames.has(name)) {
129
- browserTools[name] = tool;
130
- }
131
- }
132
- toolSource = 'gateway';
133
- }
134
- else if (context.browserMcpConfig) {
135
- const mcpTools = context.mcpTools ?? {};
136
- for (const [name, tool] of Object.entries(mcpTools)) {
137
- browserTools[name] = tool;
157
+ return new agents_1.Tool('browser-credential-setup')
158
+ .description('Run a browser agent that navigates to credential documentation and helps the user ' +
159
+ 'set up a credential on the external service. The browser is visible to the user. ' +
160
+ 'The agent can pause for user interaction (sign-in, 2FA, etc.).')
161
+ .input(browserCredentialSetupToolInputSchema)
162
+ .output(zod_1.z.object({
163
+ result: zod_1.z.string(),
164
+ }))
165
+ .handler(async (input) => {
166
+ await Promise.resolve();
167
+ const browserTools = (0, tool_registry_1.createToolRegistry)();
168
+ let toolSource;
169
+ const gatewayBrowserTools = context.localMcpServer?.getToolsByCategory('browser') ?? [];
170
+ if (gatewayBrowserTools.length > 0 && context.localMcpServer) {
171
+ const gatewayBrowserNames = new Set(gatewayBrowserTools.map((t) => t.name));
172
+ const allGatewayTools = (0, create_tools_from_mcp_server_1.createToolsFromLocalMcpServer)(context.localMcpServer, context.logger);
173
+ for (const [name, tool] of allGatewayTools) {
174
+ if (gatewayBrowserNames.has(name)) {
175
+ browserTools.set(name, tool);
138
176
  }
139
- toolSource = 'chrome-devtools-mcp';
140
177
  }
141
- else {
142
- return {
143
- result: 'Browser automation is not available. Either connect a local gateway with browser tools or set N8N_INSTANCE_AI_BROWSER_MCP=true.',
144
- };
178
+ toolSource = 'gateway';
179
+ }
180
+ else if (context.browserMcpConfig) {
181
+ const mcpTools = context.mcpTools ?? (0, tool_registry_1.createToolRegistry)();
182
+ for (const [name, tool] of mcpTools) {
183
+ browserTools.set(name, tool);
145
184
  }
146
- if (Object.keys(browserTools).length === 0) {
147
- return {
148
- result: toolSource === 'gateway'
149
- ? 'Local gateway is connected but no browser_* tools are available. Ensure the browser module is enabled in the gateway.'
150
- : 'No browser MCP tools available. Chrome DevTools MCP may not be connected.',
151
- };
152
- }
153
- let browserPermanentlyDenied = false;
154
- const browserToolsWithDenialDetection = wrapBrowserToolsForDenialDetection(browserTools, () => {
155
- browserPermanentlyDenied = true;
156
- });
157
- browserToolsWithDenialDetection['pause-for-user'] = createPauseForUserTool();
158
- browserToolsWithDenialDetection['ask-user'] = (0, ask_user_tool_1.createAskUserTool)();
159
- if (context.domainContext) {
160
- browserToolsWithDenialDetection.research = (0, research_tool_1.createResearchTool)(context.domainContext);
161
- }
162
- const subAgentId = `agent-browser-${(0, nanoid_1.nanoid)(6)}`;
163
- context.eventBus.publish(context.threadId, {
164
- type: 'agent-spawned',
165
- runId: context.runId,
166
- agentId: subAgentId,
167
- payload: {
168
- parentId: context.orchestratorAgentId,
169
- role: 'credential-setup-browser-agent',
170
- tools: Object.keys(browserToolsWithDenialDetection),
171
- },
172
- });
173
- let traceRun;
174
- try {
175
- traceRun = await (0, tracing_utils_1.startSubAgentTrace)(context, {
176
- agentId: subAgentId,
177
- role: 'credential-setup-browser-agent',
178
- kind: 'browser-credential-setup',
179
- inputs: {
180
- credentialType: input.credentialType,
181
- docsUrl: input.docsUrl,
182
- requiredFields: input.requiredFields?.map((field) => ({
183
- name: field.name,
184
- type: field.type,
185
- required: field.required,
186
- })),
185
+ toolSource = 'chrome-devtools-mcp';
186
+ }
187
+ else {
188
+ return {
189
+ result: 'Browser automation is not available. Either connect a local gateway with browser tools or set N8N_INSTANCE_AI_BROWSER_MCP=true.',
190
+ };
191
+ }
192
+ if (browserTools.size === 0) {
193
+ return {
194
+ result: toolSource === 'gateway'
195
+ ? 'Local gateway is connected but no browser_* tools are available. Ensure the browser module is enabled in the gateway.'
196
+ : 'No browser MCP tools available. Chrome DevTools MCP may not be connected.',
197
+ };
198
+ }
199
+ let browserPermanentlyDenied = false;
200
+ const browserToolsWithDenialDetection = wrapBrowserToolsForDenialDetection(browserTools, () => {
201
+ browserPermanentlyDenied = true;
202
+ });
203
+ browserToolsWithDenialDetection.set('pause-for-user', createPauseForUserTool());
204
+ browserToolsWithDenialDetection.set('ask-user', (0, ask_user_tool_1.createAskUserTool)());
205
+ if (context.domainContext) {
206
+ browserToolsWithDenialDetection.set('research', (0, research_tool_1.createResearchTool)(context.domainContext));
207
+ }
208
+ if (!context.spawnBackgroundTask) {
209
+ return { result: 'Browser credential setup requires background task support.' };
210
+ }
211
+ const subAgentId = `agent-browser-${(0, nanoid_1.nanoid)(6)}`;
212
+ const taskId = `browser-credential-${(0, nanoid_1.nanoid)(8)}`;
213
+ const browserPrompt = (0, browser_credential_setup_prompt_1.buildBrowserAgentPrompt)(toolSource);
214
+ const tracedBrowserTools = (0, tracing_utils_1.traceSubAgentTools)(context, browserToolsWithDenialDetection, BROWSER_CREDENTIAL_AGENT_ROLE);
215
+ const createTraceContext = (0, tracing_utils_1.createDetachedSubAgentTraceFactory)(context, {
216
+ agentId: subAgentId,
217
+ role: BROWSER_CREDENTIAL_AGENT_ROLE,
218
+ kind: 'browser-credential-setup',
219
+ taskId,
220
+ inputs: {
221
+ credentialType: input.credentialType,
222
+ docsUrl: input.docsUrl,
223
+ requiredFields: input.requiredFields?.map((field) => ({
224
+ name: field.name,
225
+ type: field.type,
226
+ required: field.required,
227
+ })),
228
+ },
229
+ });
230
+ const spawnOutcome = context.spawnBackgroundTask({
231
+ taskId,
232
+ threadId: context.threadId,
233
+ agentId: subAgentId,
234
+ role: BROWSER_CREDENTIAL_AGENT_ROLE,
235
+ createTraceContext,
236
+ dedupeKey: { role: BROWSER_CREDENTIAL_AGENT_ROLE },
237
+ parentCheckpointId: context.isCheckpointFollowUp === true ? context.checkpointTaskId : undefined,
238
+ run: async (signal, _drainCorrections, _waitForCorrection, { traceContext }) => await (0, tracing_utils_1.withTraceContextActor)(traceContext, async () => {
239
+ const subAgent = new agents_1.Agent('Browser Credential Setup Agent')
240
+ .model(context.modelId)
241
+ .instructions(browserPrompt, {
242
+ providerOptions: {
243
+ anthropic: { cacheControl: { type: 'ephemeral' } },
187
244
  },
245
+ })
246
+ .tool((0, tool_registry_1.toolRegistryValues)(tracedBrowserTools))
247
+ .checkpoint(context.checkpointStore ?? 'memory');
248
+ (0, runtime_workspace_1.attachRuntimeWorkspaceCapabilities)(subAgent, {
249
+ runtimeSkills: context.runtimeSkills,
188
250
  });
189
- const tracedBrowserTools = (0, tracing_utils_1.traceSubAgentTools)(context, browserToolsWithDenialDetection, 'credential-setup-browser-agent');
190
- const browserPrompt = (0, browser_credential_setup_prompt_1.buildBrowserAgentPrompt)(toolSource);
191
- const resultText = await (0, tracing_utils_1.withTraceRun)(context, traceRun, async () => {
192
- const subAgent = new agent_1.Agent({
193
- id: subAgentId,
194
- name: 'Browser Credential Setup Agent',
195
- instructions: {
196
- role: 'system',
197
- content: browserPrompt,
198
- providerOptions: {
199
- anthropic: { cacheControl: { type: 'ephemeral' } },
251
+ const telemetry = traceContext?.getTelemetry?.({
252
+ agentRole: BROWSER_CREDENTIAL_AGENT_ROLE,
253
+ functionId: `instance-ai.subagent.${BROWSER_CREDENTIAL_AGENT_ROLE}`,
254
+ executionMode: 'background_subagent',
255
+ metadata: { agent_id: subAgentId, task_id: taskId },
256
+ });
257
+ if (telemetry) {
258
+ subAgent.telemetry(telemetry);
259
+ }
260
+ (0, langsmith_tracing_1.mergeTraceRunInputs)(traceContext?.actorRun, (0, langsmith_tracing_1.buildAgentTraceInputs)({
261
+ systemPrompt: browserPrompt,
262
+ tools: tracedBrowserTools,
263
+ modelId: context.modelId,
264
+ }));
265
+ const briefing = buildCredentialSetupBriefing(input, context);
266
+ const persistence = await (0, agent_persistence_1.createSubAgentPersistence)(context, {
267
+ agentKind: 'credential-setup-browser',
268
+ });
269
+ const stream = await subAgent.stream(briefing, {
270
+ maxIterations: max_steps_1.MAX_STEPS.BROWSER,
271
+ abortSignal: signal,
272
+ persistence,
273
+ providerOptions: {
274
+ anthropic: { cacheControl: { type: 'ephemeral' } },
275
+ },
276
+ });
277
+ let activeStream = (0, resumable_stream_executor_1.normalizeStreamSource)(stream);
278
+ let activeAgentRunId = typeof activeStream.runId === 'string' ? activeStream.runId : '';
279
+ let lastSuspendedToolName = '';
280
+ const MAX_NUDGES = 3;
281
+ let nudgeCount = 0;
282
+ while (true) {
283
+ const result = await (0, resumable_stream_executor_1.executeResumableStream)({
284
+ agent: subAgent,
285
+ stream: activeStream,
286
+ initialAgentRunId: activeAgentRunId,
287
+ context: {
288
+ threadId: context.threadId,
289
+ runId: context.runId,
290
+ agentId: subAgentId,
291
+ eventBus: context.eventBus,
292
+ signal,
293
+ logger: context.logger,
294
+ },
295
+ control: {
296
+ mode: 'auto',
297
+ buildResumeOptions: ({ agentRunId, suspension }) => ({
298
+ runId: agentRunId,
299
+ toolCallId: suspension.toolCallId,
300
+ maxIterations: max_steps_1.MAX_STEPS.BROWSER,
301
+ persistence,
302
+ }),
303
+ waitForConfirmation: async (requestId) => {
304
+ if (!context.waitForConfirmation) {
305
+ throw new Error('Browser agent requires user interaction but no HITL handler is available');
306
+ }
307
+ return await context.waitForConfirmation(requestId);
308
+ },
309
+ onSuspension: (suspension) => {
310
+ lastSuspendedToolName = suspension.toolName ?? '';
200
311
  },
201
312
  },
202
- model: context.modelId,
203
- tools: tracedBrowserTools,
204
313
  });
205
- (0, langsmith_tracing_1.mergeTraceRunInputs)(traceRun, (0, langsmith_tracing_1.buildAgentTraceInputs)({
206
- systemPrompt: browserPrompt,
207
- tools: tracedBrowserTools,
208
- modelId: context.modelId,
209
- }));
210
- (0, register_with_mastra_1.registerWithMastra)(subAgentId, subAgent, context.storage);
211
- const docsLine = input.docsUrl
212
- ? `**Documentation:** ${input.docsUrl}`
213
- : '**Documentation:** No URL available — use `research` (action: web-search) to find setup instructions.';
214
- let fieldsSection = '';
215
- if (input.requiredFields && input.requiredFields.length > 0) {
216
- const fieldLines = input.requiredFields.map((f) => `- ${f.displayName} (${f.name})${f.required ? ' [REQUIRED]' : ''}${f.description ? ': ' + f.description : ''}`);
217
- fieldsSection = `\n### Required Fields\n${fieldLines.join('\n')}`;
314
+ if (result.status !== 'completed') {
315
+ throw new Error(result.status === 'cancelled'
316
+ ? 'Browser credential setup sub-agent was cancelled'
317
+ : 'Browser credential setup sub-agent failed while streaming');
318
+ }
319
+ if (browserPermanentlyDenied || hasPermanentBrowserDenial(result.workSummary)) {
320
+ return BROWSER_DENIED_RESULT;
218
321
  }
219
- const isOAuth = input.credentialType.toLowerCase().includes('oauth');
220
- const oauthSection = isOAuth && context.oauth2CallbackUrl
221
- ? `\n### OAuth Redirect URL\n${context.oauth2CallbackUrl}\n` +
222
- 'Paste this into the "Authorized redirect URIs" field. ' +
223
- 'Do NOT navigate to the n8n instance to find it — use this URL directly.'
224
- : '';
225
- const briefing = [
226
- `## Credential Setup: ${input.credentialType}`,
227
- '',
228
- docsLine,
229
- fieldsSection,
230
- oauthSection,
231
- '',
232
- '### Completion Criteria',
233
- 'Done ONLY when all required values are visible on screen or downloaded, and you have called `pause-for-user` telling the user where to find them and to enter them privately in n8n.',
234
- ]
235
- .filter(Boolean)
236
- .join('\n');
237
- const traceParent = (0, langsmith_tracing_1.getTraceParentRun)();
238
- return await (0, langsmith_tracing_1.withTraceParentContext)(traceParent, async () => {
239
- const llmStepTraceHooks = (0, resumable_stream_executor_1.createLlmStepTraceHooks)(traceParent);
240
- const stream = await subAgent.stream(briefing, {
241
- maxSteps: max_steps_1.MAX_STEPS.BROWSER,
242
- abortSignal: context.abortSignal,
322
+ if (lastSuspendedToolName !== 'pause-for-user' && nudgeCount < MAX_NUDGES) {
323
+ nudgeCount++;
324
+ const priorMessages = subAgent.getState().messageList.messages;
325
+ const nudgeInput = (0, browser_credential_setup_nudge_1.buildNudgeStreamInput)(priorMessages);
326
+ const nudge = await subAgent.stream(nudgeInput, {
327
+ maxIterations: max_steps_1.MAX_STEPS.BROWSER,
328
+ abortSignal: signal,
329
+ persistence,
243
330
  providerOptions: {
244
331
  anthropic: { cacheControl: { type: 'ephemeral' } },
245
332
  },
246
- ...(llmStepTraceHooks?.executionOptions ?? {}),
247
333
  });
248
- let activeStream = stream;
249
- let activeMastraRunId = typeof stream.runId === 'string' ? stream.runId : '';
250
- let lastSuspendedToolName = '';
251
- const MAX_NUDGES = 3;
252
- let nudgeCount = 0;
253
- while (true) {
254
- const result = await (0, resumable_stream_executor_1.executeResumableStream)({
255
- agent: subAgent,
256
- stream: activeStream,
257
- initialMastraRunId: activeMastraRunId,
258
- context: {
259
- threadId: context.threadId,
260
- runId: context.runId,
261
- agentId: subAgentId,
262
- eventBus: context.eventBus,
263
- signal: context.abortSignal,
264
- logger: context.logger,
265
- },
266
- control: {
267
- mode: 'auto',
268
- waitForConfirmation: async (requestId) => {
269
- if (!context.waitForConfirmation) {
270
- throw new Error('Browser agent requires user interaction but no HITL handler is available');
271
- }
272
- return await context.waitForConfirmation(requestId);
273
- },
274
- onSuspension: (suspension) => {
275
- lastSuspendedToolName = suspension.toolName ?? '';
276
- },
277
- },
278
- llmStepTraceHooks,
279
- });
280
- if (result.status === 'cancelled') {
281
- throw new Error('Run cancelled while waiting for confirmation');
282
- }
283
- if (browserPermanentlyDenied) {
284
- return BROWSER_DENIED_RESULT;
285
- }
286
- if (lastSuspendedToolName !== 'pause-for-user' && nudgeCount < MAX_NUDGES) {
287
- nudgeCount++;
288
- const priorMessages = activeStream.messageList.get.all.aiV5.model();
289
- const nudgeInput = (0, browser_credential_setup_nudge_1.buildNudgeStreamInput)(priorMessages);
290
- const nudge = await subAgent.stream(nudgeInput, {
291
- maxSteps: max_steps_1.MAX_STEPS.BROWSER,
292
- abortSignal: context.abortSignal,
293
- providerOptions: {
294
- anthropic: { cacheControl: { type: 'ephemeral' } },
295
- },
296
- ...(llmStepTraceHooks?.executionOptions ?? {}),
297
- });
298
- activeStream = nudge;
299
- activeMastraRunId =
300
- (typeof nudge.runId === 'string' && nudge.runId) ||
301
- result.mastraRunId ||
302
- activeMastraRunId;
303
- continue;
304
- }
305
- return await (result.text ?? activeStream.text ?? Promise.resolve(''));
306
- }
307
- });
308
- });
309
- await (0, tracing_utils_1.finishTraceRun)(context, traceRun, {
310
- outputs: {
311
- result: resultText,
312
- agentId: subAgentId,
313
- role: 'credential-setup-browser-agent',
314
- },
315
- });
316
- context.eventBus.publish(context.threadId, {
317
- type: 'agent-completed',
318
- runId: context.runId,
319
- agentId: subAgentId,
320
- payload: {
321
- role: 'credential-setup-browser-agent',
322
- result: resultText,
323
- },
324
- });
325
- return { result: resultText };
326
- }
327
- catch (error) {
328
- const errorMessage = error instanceof Error ? error.message : String(error);
329
- await (0, tracing_utils_1.failTraceRun)(context, traceRun, error, {
330
- agent_id: subAgentId,
331
- agent_role: 'credential-setup-browser-agent',
332
- });
333
- context.eventBus.publish(context.threadId, {
334
- type: 'agent-completed',
335
- runId: context.runId,
336
- agentId: subAgentId,
337
- payload: {
338
- role: 'credential-setup-browser-agent',
339
- result: '',
340
- error: errorMessage,
341
- },
342
- });
343
- return { result: `Browser agent error: ${errorMessage}` };
344
- }
345
- },
346
- });
334
+ activeStream = (0, resumable_stream_executor_1.normalizeStreamSource)(nudge);
335
+ activeAgentRunId =
336
+ (typeof activeStream.runId === 'string' && activeStream.runId) ||
337
+ result.agentRunId ||
338
+ activeAgentRunId;
339
+ continue;
340
+ }
341
+ return await (result.text ?? activeStream.text ?? Promise.resolve(''));
342
+ }
343
+ }),
344
+ });
345
+ if (spawnOutcome.status === 'duplicate') {
346
+ return {
347
+ result: `Browser credential setup is already running (task: ${spawnOutcome.existing.taskId}). Wait for the background-task follow-up before dispatching another one.`,
348
+ };
349
+ }
350
+ if (spawnOutcome.status === 'limit-reached') {
351
+ return {
352
+ result: 'Could not start browser credential setup: concurrent background-task limit reached. Wait for an existing task to finish and try again.',
353
+ };
354
+ }
355
+ context.eventBus.publish(context.threadId, {
356
+ type: 'agent-spawned',
357
+ runId: context.runId,
358
+ agentId: subAgentId,
359
+ payload: {
360
+ parentId: context.orchestratorAgentId,
361
+ role: BROWSER_CREDENTIAL_AGENT_ROLE,
362
+ tools: (0, tool_registry_1.toolRegistryKeys)(browserToolsWithDenialDetection),
363
+ taskId,
364
+ kind: 'browser-setup',
365
+ title: 'Setting up credential',
366
+ subtitle: input.credentialType,
367
+ goal: `Set up ${input.credentialType}`,
368
+ targetResource: { type: 'credential' },
369
+ },
370
+ });
371
+ return {
372
+ result: `Browser credential setup started (task: ${taskId}). Wait for the background-task follow-up before summarizing the result.`,
373
+ };
374
+ })
375
+ .build();
347
376
  }
348
377
  //# sourceMappingURL=browser-credential-setup.tool.js.map