@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.
- package/dist/agent/instance-agent.d.ts +1 -1
- package/dist/agent/instance-agent.js +88 -75
- package/dist/agent/instance-agent.js.map +1 -1
- package/dist/agent/mcp-tool-name-validation.d.ts +4 -2
- package/dist/agent/mcp-tool-name-validation.js +2 -2
- package/dist/agent/mcp-tool-name-validation.js.map +1 -1
- package/dist/agent/runtime-workspace.d.ts +6 -0
- package/dist/agent/runtime-workspace.js +14 -0
- package/dist/agent/runtime-workspace.js.map +1 -0
- package/dist/agent/sanitize-mcp-schemas.d.ts +4 -3
- package/dist/agent/sanitize-mcp-schemas.js +53 -24
- package/dist/agent/sanitize-mcp-schemas.js.map +1 -1
- package/dist/agent/sub-agent-debriefing.d.ts +2 -2
- package/dist/agent/sub-agent-factory.d.ts +7 -4
- package/dist/agent/sub-agent-factory.js +24 -13
- package/dist/agent/sub-agent-factory.js.map +1 -1
- package/dist/agent/system-prompt.js +18 -15
- package/dist/agent/system-prompt.js.map +1 -1
- package/dist/build.tsbuildinfo +1 -1
- package/dist/constants/max-steps.d.ts +1 -1
- package/dist/constants/max-steps.js +1 -1
- package/dist/constants/max-steps.js.map +1 -1
- package/dist/domain-access/domain-gating.d.ts +2 -2
- package/dist/error-formatting.d.ts +1 -0
- package/dist/error-formatting.js +159 -0
- package/dist/error-formatting.js.map +1 -0
- package/dist/index.d.ts +65 -24
- package/dist/index.js +96 -52
- package/dist/index.js.map +1 -1
- package/dist/mcp/mcp-client-manager.d.ts +5 -4
- package/dist/mcp/mcp-client-manager.js +42 -17
- package/dist/mcp/mcp-client-manager.js.map +1 -1
- package/dist/memory/title-utils.d.ts +4 -1
- package/dist/memory/title-utils.js +10 -2
- package/dist/memory/title-utils.js.map +1 -1
- package/dist/parsers/structured-file-parser.d.ts +5 -2
- package/dist/parsers/structured-file-parser.js +9 -2
- package/dist/parsers/structured-file-parser.js.map +1 -1
- package/dist/planned-tasks/planned-task-permissions.js +3 -5
- package/dist/planned-tasks/planned-task-permissions.js.map +1 -1
- package/dist/planned-tasks/planned-task-service.d.ts +1 -0
- package/dist/planned-tasks/planned-task-service.js +8 -0
- package/dist/planned-tasks/planned-task-service.js.map +1 -1
- package/dist/runtime/background-task-manager.d.ts +9 -2
- package/dist/runtime/background-task-manager.js +7 -2
- package/dist/runtime/background-task-manager.js.map +1 -1
- package/dist/runtime/liveness-policy.js +4 -3
- package/dist/runtime/liveness-policy.js.map +1 -1
- package/dist/runtime/resumable-stream-executor.d.ts +4 -24
- package/dist/runtime/resumable-stream-executor.js +103 -1318
- package/dist/runtime/resumable-stream-executor.js.map +1 -1
- package/dist/runtime/run-state-registry.d.ts +8 -2
- package/dist/runtime/run-state-registry.js +19 -1
- package/dist/runtime/run-state-registry.js.map +1 -1
- package/dist/runtime/stream-runner.d.ts +4 -4
- package/dist/runtime/stream-runner.js +11 -25
- package/dist/runtime/stream-runner.js.map +1 -1
- package/dist/skills/materialize-runtime-skills.d.ts +62 -0
- package/dist/skills/materialize-runtime-skills.js +467 -0
- package/dist/skills/materialize-runtime-skills.js.map +1 -0
- package/dist/skills/runtime-skills.d.ts +4 -0
- package/dist/skills/runtime-skills.js +17 -0
- package/dist/skills/runtime-skills.js.map +1 -0
- package/dist/source-map-filter.d.ts +17 -0
- package/dist/source-map-filter.js +39 -0
- package/dist/source-map-filter.js.map +1 -0
- package/dist/storage/agent-tree-snapshot.d.ts +2 -0
- package/dist/storage/index.d.ts +3 -3
- package/dist/storage/index.js +8 -7
- package/dist/storage/index.js.map +1 -1
- package/dist/storage/planned-task-storage.d.ts +3 -3
- package/dist/storage/planned-task-storage.js +3 -8
- package/dist/storage/planned-task-storage.js.map +1 -1
- package/dist/storage/terminal-outcome-storage.d.ts +4 -4
- package/dist/storage/terminal-outcome-storage.js +1 -1
- package/dist/storage/terminal-outcome-storage.js.map +1 -1
- package/dist/storage/{mastra-iteration-log-storage.d.ts → thread-iteration-log-storage.d.ts} +3 -3
- package/dist/storage/{mastra-iteration-log-storage.js → thread-iteration-log-storage.js} +5 -5
- package/dist/storage/thread-iteration-log-storage.js.map +1 -0
- package/dist/storage/thread-patch.d.ts +16 -10
- package/dist/storage/thread-patch.js +37 -36
- package/dist/storage/thread-patch.js.map +1 -1
- package/dist/storage/{mastra-task-storage.d.ts → thread-task-storage.d.ts} +3 -3
- package/dist/storage/{mastra-task-storage.js → thread-task-storage.js} +5 -5
- package/dist/storage/thread-task-storage.js.map +1 -0
- package/dist/storage/workflow-loop-storage.d.ts +28 -28
- package/dist/storage/workflow-loop-storage.js +1 -1
- package/dist/storage/workflow-loop-storage.js.map +1 -1
- package/dist/stream/consume-with-hitl.d.ts +11 -11
- package/dist/stream/consume-with-hitl.js +27 -15
- package/dist/stream/consume-with-hitl.js.map +1 -1
- package/dist/stream/map-chunk.d.ts +1 -1
- package/dist/stream/map-chunk.js +153 -36
- package/dist/stream/map-chunk.js.map +1 -1
- package/dist/tool-registry.d.ts +8 -0
- package/dist/tool-registry.js +45 -0
- package/dist/tool-registry.js.map +1 -0
- package/dist/tools/attachments/parse-file.tool.d.ts +42 -45
- package/dist/tools/attachments/parse-file.tool.js +140 -97
- package/dist/tools/attachments/parse-file.tool.js.map +1 -1
- package/dist/tools/credentials.tool.d.ts +5 -5
- package/dist/tools/credentials.tool.js +31 -34
- package/dist/tools/credentials.tool.js.map +1 -1
- package/dist/tools/data-tables.tool.d.ts +3 -2
- package/dist/tools/data-tables.tool.js +99 -100
- package/dist/tools/data-tables.tool.js.map +1 -1
- package/dist/tools/evals/apply-pin-data.service.d.ts +3 -0
- package/dist/tools/evals/apply-pin-data.service.js +19 -0
- package/dist/tools/evals/apply-pin-data.service.js.map +1 -0
- package/dist/tools/evals/column-ref-utils.d.ts +3 -0
- package/dist/tools/evals/column-ref-utils.js +205 -48
- package/dist/tools/evals/column-ref-utils.js.map +1 -1
- package/dist/tools/evals/detect-agent-named-refs.service.js +20 -4
- package/dist/tools/evals/detect-agent-named-refs.service.js.map +1 -1
- package/dist/tools/evals/ensure-eval-data-table.service.d.ts +15 -0
- package/dist/tools/evals/ensure-eval-data-table.service.js +83 -0
- package/dist/tools/evals/ensure-eval-data-table.service.js.map +1 -0
- package/dist/tools/evals/eval-data-requirements.service.d.ts +1 -0
- package/dist/tools/evals/eval-data-requirements.service.js +23 -4
- package/dist/tools/evals/eval-data-requirements.service.js.map +1 -1
- package/dist/tools/evals/evals.tool.d.ts +2 -0
- package/dist/tools/evals/evals.tool.js +452 -0
- package/dist/tools/evals/evals.tool.js.map +1 -0
- package/dist/tools/evals/extract-rows-from-history.service.d.ts +17 -0
- package/dist/tools/evals/extract-rows-from-history.service.js +103 -0
- package/dist/tools/evals/extract-rows-from-history.service.js.map +1 -0
- package/dist/tools/evals/format-eval-setup-task.d.ts +16 -0
- package/dist/tools/evals/format-eval-setup-task.js +167 -0
- package/dist/tools/evals/format-eval-setup-task.js.map +1 -0
- package/dist/tools/evals/generate-sample-rows.service.d.ts +35 -0
- package/dist/tools/evals/generate-sample-rows.service.js +278 -0
- package/dist/tools/evals/generate-sample-rows.service.js.map +1 -0
- package/dist/tools/evals/generate-tool-ref-pin-data.service.d.ts +11 -0
- package/dist/tools/evals/generate-tool-ref-pin-data.service.js +125 -0
- package/dist/tools/evals/generate-tool-ref-pin-data.service.js.map +1 -0
- package/dist/tools/evals/metric-catalog.d.ts +10 -4
- package/dist/tools/evals/metric-catalog.js.map +1 -1
- package/dist/tools/executions.tool.d.ts +1 -1
- package/dist/tools/executions.tool.js +25 -34
- package/dist/tools/executions.tool.js.map +1 -1
- package/dist/tools/filesystem/create-tools-from-mcp-server.d.ts +2 -3
- package/dist/tools/filesystem/create-tools-from-mcp-server.js +129 -67
- package/dist/tools/filesystem/create-tools-from-mcp-server.js.map +1 -1
- package/dist/tools/index.d.ts +4 -16
- package/dist/tools/index.js +102 -92
- package/dist/tools/index.js.map +1 -1
- package/dist/tools/nodes.tool.d.ts +1 -1
- package/dist/tools/nodes.tool.js +31 -33
- package/dist/tools/nodes.tool.js.map +1 -1
- package/dist/tools/orchestration/add-plan-item.tool.d.ts +2 -2
- package/dist/tools/orchestration/add-plan-item.tool.js +45 -49
- package/dist/tools/orchestration/add-plan-item.tool.js.map +1 -1
- package/dist/tools/orchestration/agent-persistence.d.ts +14 -0
- package/dist/tools/orchestration/agent-persistence.js +43 -0
- package/dist/tools/orchestration/agent-persistence.js.map +1 -0
- package/dist/tools/orchestration/blueprint-accumulator.d.ts +4 -8
- package/dist/tools/orchestration/blueprint-accumulator.js +11 -78
- package/dist/tools/orchestration/blueprint-accumulator.js.map +1 -1
- package/dist/tools/orchestration/blueprint.schema.d.ts +13 -147
- package/dist/tools/orchestration/blueprint.schema.js +4 -23
- package/dist/tools/orchestration/blueprint.schema.js.map +1 -1
- package/dist/tools/orchestration/browser-credential-setup.nudge.d.ts +2 -4
- package/dist/tools/orchestration/browser-credential-setup.nudge.js +1 -1
- package/dist/tools/orchestration/browser-credential-setup.nudge.js.map +1 -1
- package/dist/tools/orchestration/browser-credential-setup.tool.d.ts +10 -2
- package/dist/tools/orchestration/browser-credential-setup.tool.js +299 -270
- package/dist/tools/orchestration/browser-credential-setup.tool.js.map +1 -1
- package/dist/tools/orchestration/build-workflow-agent.prompt.d.ts +7 -1
- package/dist/tools/orchestration/build-workflow-agent.prompt.js +46 -20
- package/dist/tools/orchestration/build-workflow-agent.prompt.js.map +1 -1
- package/dist/tools/orchestration/build-workflow-agent.tool.d.ts +50 -5
- package/dist/tools/orchestration/build-workflow-agent.tool.js +748 -605
- package/dist/tools/orchestration/build-workflow-agent.tool.js.map +1 -1
- package/dist/tools/orchestration/builder-memory-compaction.d.ts +6 -2
- package/dist/tools/orchestration/builder-memory-compaction.js +32 -46
- package/dist/tools/orchestration/builder-memory-compaction.js.map +1 -1
- package/dist/tools/orchestration/complete-checkpoint.tool.d.ts +1 -1
- package/dist/tools/orchestration/complete-checkpoint.tool.js +46 -47
- package/dist/tools/orchestration/complete-checkpoint.tool.js.map +1 -1
- package/dist/tools/orchestration/delegate.tool.d.ts +1 -1
- package/dist/tools/orchestration/delegate.tool.js +170 -166
- package/dist/tools/orchestration/delegate.tool.js.map +1 -1
- package/dist/tools/orchestration/eval-data-agent.tool.d.ts +2 -0
- package/dist/tools/orchestration/eval-data-agent.tool.js +183 -0
- package/dist/tools/orchestration/eval-data-agent.tool.js.map +1 -0
- package/dist/tools/orchestration/eval-setup-agent.prompt.d.ts +1 -0
- package/dist/tools/orchestration/eval-setup-agent.prompt.js +238 -0
- package/dist/tools/orchestration/eval-setup-agent.prompt.js.map +1 -0
- package/dist/tools/orchestration/eval-setup-agent.tool.d.ts +31 -0
- package/dist/tools/orchestration/eval-setup-agent.tool.js +204 -0
- package/dist/tools/orchestration/eval-setup-agent.tool.js.map +1 -0
- package/dist/tools/orchestration/plan-agent-prompt.d.ts +1 -1
- package/dist/tools/orchestration/plan-agent-prompt.js +9 -9
- package/dist/tools/orchestration/plan-with-agent.tool.d.ts +1 -1
- package/dist/tools/orchestration/plan-with-agent.tool.js +210 -179
- package/dist/tools/orchestration/plan-with-agent.tool.js.map +1 -1
- package/dist/tools/orchestration/plan.tool.d.ts +5 -2
- package/dist/tools/orchestration/plan.tool.js +125 -105
- package/dist/tools/orchestration/plan.tool.js.map +1 -1
- package/dist/tools/orchestration/report-verification-verdict.tool.d.ts +3 -3
- package/dist/tools/orchestration/report-verification-verdict.tool.js +65 -66
- package/dist/tools/orchestration/report-verification-verdict.tool.js.map +1 -1
- package/dist/tools/orchestration/submit-plan.tool.d.ts +1 -1
- package/dist/tools/orchestration/submit-plan.tool.js +83 -66
- package/dist/tools/orchestration/submit-plan.tool.js.map +1 -1
- package/dist/tools/orchestration/tracing-utils.d.ts +3 -2
- package/dist/tools/orchestration/tracing-utils.js +58 -39
- package/dist/tools/orchestration/tracing-utils.js.map +1 -1
- package/dist/tools/orchestration/verify-built-workflow.tool.d.ts +5 -5
- package/dist/tools/orchestration/verify-built-workflow.tool.js +166 -166
- package/dist/tools/orchestration/verify-built-workflow.tool.js.map +1 -1
- package/dist/tools/research.tool.d.ts +1 -1
- package/dist/tools/research.tool.js +59 -27
- package/dist/tools/research.tool.js.map +1 -1
- package/dist/tools/shared/ask-user.tool.d.ts +3 -2
- package/dist/tools/shared/ask-user.tool.js +61 -63
- package/dist/tools/shared/ask-user.tool.js.map +1 -1
- package/dist/tools/task-control.tool.d.ts +1 -1
- package/dist/tools/task-control.tool.js +15 -16
- package/dist/tools/task-control.tool.js.map +1 -1
- package/dist/tools/templates.tool.d.ts +1 -1
- package/dist/tools/templates.tool.js +6 -7
- package/dist/tools/templates.tool.js.map +1 -1
- package/dist/tools/tool-ids.d.ts +40 -0
- package/dist/tools/tool-ids.js +62 -0
- package/dist/tools/tool-ids.js.map +1 -0
- package/dist/tools/workflows/apply-workflow-credentials.tool.d.ts +3 -3
- package/dist/tools/workflows/apply-workflow-credentials.tool.js +72 -73
- package/dist/tools/workflows/apply-workflow-credentials.tool.js.map +1 -1
- package/dist/tools/workflows/build-workflow.tool.d.ts +3 -3
- package/dist/tools/workflows/build-workflow.tool.js +113 -114
- package/dist/tools/workflows/build-workflow.tool.js.map +1 -1
- package/dist/tools/workflows/materialize-node-type.tool.d.ts +6 -6
- package/dist/tools/workflows/materialize-node-type.tool.js +64 -65
- package/dist/tools/workflows/materialize-node-type.tool.js.map +1 -1
- package/dist/tools/workflows/resolve-credentials.d.ts +3 -5
- package/dist/tools/workflows/resolve-credentials.js +15 -6
- package/dist/tools/workflows/resolve-credentials.js.map +1 -1
- package/dist/tools/workflows/setup-workflow.schema.d.ts +2 -2
- package/dist/tools/workflows/submit-workflow-identity.d.ts +8 -9
- package/dist/tools/workflows/submit-workflow-identity.js +41 -27
- package/dist/tools/workflows/submit-workflow-identity.js.map +1 -1
- package/dist/tools/workflows/submit-workflow.tool.d.ts +10 -7
- package/dist/tools/workflows/submit-workflow.tool.js +224 -191
- package/dist/tools/workflows/submit-workflow.tool.js.map +1 -1
- package/dist/tools/workflows/validate-workflow.service.d.ts +15 -0
- package/dist/tools/workflows/validate-workflow.service.js +289 -0
- package/dist/tools/workflows/validate-workflow.service.js.map +1 -0
- package/dist/tools/workflows/write-sandbox-file.tool.d.ts +2 -2
- package/dist/tools/workflows/write-sandbox-file.tool.js +29 -30
- package/dist/tools/workflows/write-sandbox-file.tool.js.map +1 -1
- package/dist/tools/workflows.tool.d.ts +5 -2
- package/dist/tools/workflows.tool.js +184 -85
- package/dist/tools/workflows.tool.js.map +1 -1
- package/dist/tools/workspace.tool.d.ts +1 -1
- package/dist/tools/workspace.tool.js +49 -65
- package/dist/tools/workspace.tool.js.map +1 -1
- package/dist/tracing/langsmith-tracing.d.ts +17 -18
- package/dist/tracing/langsmith-tracing.js +941 -677
- package/dist/tracing/langsmith-tracing.js.map +1 -1
- package/dist/tracing/trace-labels.d.ts +5 -0
- package/dist/tracing/trace-labels.js +36 -0
- package/dist/tracing/trace-labels.js.map +1 -0
- package/dist/tracing/trace-payloads.d.ts +23 -0
- package/dist/tracing/trace-payloads.js +1008 -0
- package/dist/tracing/trace-payloads.js.map +1 -0
- package/dist/types.d.ts +57 -25
- package/dist/types.js +3 -0
- package/dist/types.js.map +1 -1
- package/dist/utils/eval-agents.js +1 -1
- package/dist/utils/eval-agents.js.map +1 -1
- package/dist/utils/scrub-secrets.js +1 -1
- package/dist/utils/scrub-secrets.js.map +1 -1
- package/dist/utils/stream-helpers.d.ts +2 -5
- package/dist/utils/stream-helpers.js +12 -1
- package/dist/utils/stream-helpers.js.map +1 -1
- package/dist/workflow-loop/workflow-loop-state.d.ts +18 -18
- package/dist/workspace/builder-templates-service.d.ts +54 -0
- package/dist/workspace/builder-templates-service.js +442 -0
- package/dist/workspace/builder-templates-service.js.map +1 -0
- package/dist/workspace/create-workspace.d.ts +16 -3
- package/dist/workspace/create-workspace.js +45 -21
- package/dist/workspace/create-workspace.js.map +1 -1
- package/dist/workspace/daytona-auth-manager.d.ts +26 -0
- package/dist/workspace/daytona-auth-manager.js +90 -0
- package/dist/workspace/daytona-auth-manager.js.map +1 -0
- package/dist/workspace/daytona-filesystem.d.ts +5 -4
- package/dist/workspace/daytona-filesystem.js +25 -15
- package/dist/workspace/daytona-filesystem.js.map +1 -1
- package/dist/workspace/daytona-sandbox.d.ts +65 -0
- package/dist/workspace/daytona-sandbox.js +314 -0
- package/dist/workspace/daytona-sandbox.js.map +1 -0
- package/dist/workspace/lazy-daytona.d.ts +2 -0
- package/dist/workspace/lazy-daytona.js +12 -0
- package/dist/workspace/lazy-daytona.js.map +1 -0
- package/dist/workspace/lazy-runtime-workspace.d.ts +8 -0
- package/dist/workspace/lazy-runtime-workspace.js +246 -0
- package/dist/workspace/lazy-runtime-workspace.js.map +1 -0
- package/dist/workspace/local-filesystem.d.ts +48 -0
- package/dist/workspace/local-filesystem.js +250 -0
- package/dist/workspace/local-filesystem.js.map +1 -0
- package/dist/workspace/local-sandbox.d.ts +28 -0
- package/dist/workspace/local-sandbox.js +121 -0
- package/dist/workspace/local-sandbox.js.map +1 -0
- package/dist/workspace/n8n-sandbox-filesystem.d.ts +3 -3
- package/dist/workspace/n8n-sandbox-filesystem.js +3 -3
- package/dist/workspace/n8n-sandbox-filesystem.js.map +1 -1
- package/dist/workspace/n8n-sandbox-sandbox.d.ts +12 -3
- package/dist/workspace/n8n-sandbox-sandbox.js +54 -10
- package/dist/workspace/n8n-sandbox-sandbox.js.map +1 -1
- package/dist/workspace/sandbox-fs.d.ts +35 -4
- package/dist/workspace/sandbox-fs.js +1 -1
- package/dist/workspace/sandbox-fs.js.map +1 -1
- package/dist/workspace/sandbox-setup.d.ts +13 -4
- package/dist/workspace/sandbox-setup.js +250 -36
- package/dist/workspace/sandbox-setup.js.map +1 -1
- package/dist/workspace/scoped-workspace.d.ts +2 -0
- package/dist/workspace/scoped-workspace.js +141 -0
- package/dist/workspace/scoped-workspace.js.map +1 -0
- package/dist/workspace/snapshot-manager.d.ts +11 -5
- package/dist/workspace/snapshot-manager.js +64 -17
- package/dist/workspace/snapshot-manager.js.map +1 -1
- package/dist/workspace/template-telemetry.d.ts +4 -4
- package/dist/workspace/template-telemetry.js +18 -6
- package/dist/workspace/template-telemetry.js.map +1 -1
- package/package.json +12 -15
- package/skills/data-table-manager/SKILL.md +119 -0
- package/skills/data-table-manager/references/data-table-playbook.md +212 -0
- package/dist/agent/register-with-mastra.d.ts +0 -3
- package/dist/agent/register-with-mastra.js +0 -15
- package/dist/agent/register-with-mastra.js.map +0 -1
- package/dist/compaction/compaction-helper.d.ts +0 -9
- package/dist/compaction/compaction-helper.js +0 -58
- package/dist/compaction/compaction-helper.js.map +0 -1
- package/dist/compaction/index.d.ts +0 -2
- package/dist/compaction/index.js +0 -6
- package/dist/compaction/index.js.map +0 -1
- package/dist/memory/memory-config.d.ts +0 -3
- package/dist/memory/memory-config.js +0 -27
- package/dist/memory/memory-config.js.map +0 -1
- package/dist/runtime/builder-sandbox-session-registry.d.ts +0 -47
- package/dist/runtime/builder-sandbox-session-registry.js +0 -166
- package/dist/runtime/builder-sandbox-session-registry.js.map +0 -1
- package/dist/storage/mastra-iteration-log-storage.js.map +0 -1
- package/dist/storage/mastra-task-storage.js.map +0 -1
- package/dist/tools/orchestration/data-table-agent.prompt.d.ts +0 -1
- package/dist/tools/orchestration/data-table-agent.prompt.js +0 -47
- package/dist/tools/orchestration/data-table-agent.prompt.js.map +0 -1
- package/dist/tools/orchestration/data-table-agent.tool.d.ts +0 -26
- package/dist/tools/orchestration/data-table-agent.tool.js +0 -174
- package/dist/tools/orchestration/data-table-agent.tool.js.map +0 -1
- package/dist/tools/orchestration/research-agent-prompt.d.ts +0 -1
- package/dist/tools/orchestration/research-agent-prompt.js +0 -26
- package/dist/tools/orchestration/research-agent-prompt.js.map +0 -1
- package/dist/tools/orchestration/research-with-agent.tool.d.ts +0 -30
- package/dist/tools/orchestration/research-with-agent.tool.js +0 -179
- package/dist/tools/orchestration/research-with-agent.tool.js.map +0 -1
- package/dist/workspace/builder-sandbox-factory.d.ts +0 -30
- package/dist/workspace/builder-sandbox-factory.js +0 -289
- package/dist/workspace/builder-sandbox-factory.js.map +0 -1
- package/dist/workspace/guarded-filesystem.d.ts +0 -10
- package/dist/workspace/guarded-filesystem.js +0 -136
- 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
|
|
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
|
|
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((
|
|
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
|
|
41
|
-
if (!
|
|
49
|
+
const originalHandler = tool.handler;
|
|
50
|
+
if (!originalHandler)
|
|
42
51
|
return tool;
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
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
|
|
54
|
-
wrapped
|
|
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
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
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
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
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
|
-
|
|
142
|
-
|
|
143
|
-
|
|
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
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
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
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
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
|
-
(
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
}
|
|
210
|
-
|
|
211
|
-
|
|
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
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
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
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
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
|