@n8n/instance-ai 1.17.3 → 1.19.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/agent/apply-agent-thinking.js +1 -1
- package/dist/agent/apply-agent-thinking.js.map +1 -1
- package/dist/agent/computer-use-prompt.js +2 -2
- package/dist/agent/instance-agent.d.ts +7 -1
- package/dist/agent/instance-agent.js +9 -2
- package/dist/agent/instance-agent.js.map +1 -1
- package/dist/agent/shared-prompts.d.ts +1 -1
- package/dist/agent/shared-prompts.js +7 -21
- package/dist/agent/shared-prompts.js.map +1 -1
- package/dist/agent/sub-agent-factory.d.ts +1 -1
- package/dist/agent/system-prompt.js +43 -105
- package/dist/agent/system-prompt.js.map +1 -1
- package/dist/build.tsbuildinfo +1 -1
- package/dist/debug/run-debug-buffer.d.ts +8 -7
- package/dist/debug/run-debug-buffer.js +7 -6
- package/dist/debug/run-debug-buffer.js.map +1 -1
- package/dist/index.d.ts +1 -3
- package/dist/index.js +1 -3
- package/dist/index.js.map +1 -1
- package/dist/mcp/mcp-client-manager.d.ts +13 -1
- package/dist/mcp/mcp-client-manager.js +17 -2
- package/dist/mcp/mcp-client-manager.js.map +1 -1
- package/dist/runtime/run-state-registry.d.ts +5 -3
- package/dist/runtime/run-state-registry.js +5 -2
- package/dist/runtime/run-state-registry.js.map +1 -1
- package/dist/storage/workflow-loop-storage.d.ts +94 -0
- package/dist/stream/map-chunk.d.ts +1 -2
- package/dist/stream/map-chunk.js +38 -21
- package/dist/stream/map-chunk.js.map +1 -1
- package/dist/tools/attachments/parse-file.tool.js +2 -0
- package/dist/tools/attachments/parse-file.tool.js.map +1 -1
- package/dist/tools/credentials.tool.js +3 -2
- package/dist/tools/credentials.tool.js.map +1 -1
- package/dist/tools/data-tables.tool.js +5 -1
- package/dist/tools/data-tables.tool.js.map +1 -1
- package/dist/tools/evals/eval-config.tool.js +42 -7
- package/dist/tools/evals/eval-config.tool.js.map +1 -1
- package/dist/tools/index.js +0 -3
- package/dist/tools/index.js.map +1 -1
- package/dist/tools/nodes/node-search-engine.js +7 -0
- package/dist/tools/nodes/node-search-engine.js.map +1 -1
- package/dist/tools/nodes/node-search-engine.types.d.ts +3 -0
- package/dist/tools/nodes/node-search-engine.types.js.map +1 -1
- package/dist/tools/orchestration/agent-target-binding.d.ts +18 -2
- package/dist/tools/orchestration/agent-target-binding.js +56 -25
- package/dist/tools/orchestration/agent-target-binding.js.map +1 -1
- package/dist/tools/orchestration/build-agent.tool.js +227 -70
- package/dist/tools/orchestration/build-agent.tool.js.map +1 -1
- package/dist/tools/orchestration/verification/analyze-result.d.ts +5 -0
- package/dist/tools/orchestration/verification/analyze-result.js +14 -3
- package/dist/tools/orchestration/verification/analyze-result.js.map +1 -1
- package/dist/tools/orchestration/verification/prepare-run.d.ts +3 -1
- package/dist/tools/orchestration/verification/prepare-run.js +34 -0
- package/dist/tools/orchestration/verification/prepare-run.js.map +1 -1
- package/dist/tools/orchestration/verification/scripted-gate-run.d.ts +23 -0
- package/dist/tools/orchestration/verification/scripted-gate-run.js +91 -0
- package/dist/tools/orchestration/verification/scripted-gate-run.js.map +1 -0
- package/dist/tools/orchestration/verify-built-workflow.tool.js +33 -12
- package/dist/tools/orchestration/verify-built-workflow.tool.js.map +1 -1
- package/dist/tools/research.tool.js +6 -1
- package/dist/tools/research.tool.js.map +1 -1
- package/dist/tools/task-control.tool.js +2 -2
- package/dist/tools/task-control.tool.js.map +1 -1
- package/dist/tools/tool-ids.d.ts +0 -1
- package/dist/tools/tool-ids.js +2 -2
- package/dist/tools/tool-ids.js.map +1 -1
- package/dist/tools/workflows/build-workflow.tool.js +22 -7
- package/dist/tools/workflows/build-workflow.tool.js.map +1 -1
- package/dist/tools/workflows/plan-verification-simulation.d.ts +4 -1
- package/dist/tools/workflows/plan-verification-simulation.js +27 -3
- package/dist/tools/workflows/plan-verification-simulation.js.map +1 -1
- package/dist/tools/workflows/preserve-node-positions.d.ts +3 -0
- package/dist/tools/workflows/preserve-node-positions.js +148 -0
- package/dist/tools/workflows/preserve-node-positions.js.map +1 -0
- package/dist/tools/workflows/reconcile-simulation-plan.js +2 -1
- package/dist/tools/workflows/reconcile-simulation-plan.js.map +1 -1
- package/dist/tools/workflows/resolve-credentials.js +52 -18
- package/dist/tools/workflows/resolve-credentials.js.map +1 -1
- package/dist/tools/workflows/setup-workflow.service.d.ts +10 -2
- package/dist/tools/workflows/setup-workflow.service.js +57 -5
- package/dist/tools/workflows/setup-workflow.service.js.map +1 -1
- package/dist/tools/workflows/wait-gate-script.d.ts +9 -0
- package/dist/tools/workflows/wait-gate-script.js +223 -0
- package/dist/tools/workflows/wait-gate-script.js.map +1 -0
- package/dist/tools/workflows/workflow-build-telemetry.d.ts +5 -0
- package/dist/tools/workflows/workflow-build-telemetry.js +15 -0
- package/dist/tools/workflows/workflow-build-telemetry.js.map +1 -1
- package/dist/tools/workflows/workflow-json-utils.d.ts +2 -0
- package/dist/tools/workflows/workflow-json-utils.js +46 -0
- package/dist/tools/workflows/workflow-json-utils.js.map +1 -1
- package/dist/tools/workflows/workflow-source-compiler.js +11 -7
- package/dist/tools/workflows/workflow-source-compiler.js.map +1 -1
- package/dist/tools/workflows/workflow-validation-warnings.d.ts +4 -1
- package/dist/tools/workflows/workflow-validation-warnings.js +3 -16
- package/dist/tools/workflows/workflow-validation-warnings.js.map +1 -1
- package/dist/tools/workflows.tool.js +3 -1
- package/dist/tools/workflows.tool.js.map +1 -1
- package/dist/types.d.ts +14 -2
- package/dist/types.js.map +1 -1
- package/dist/utils/quota-error.d.ts +2 -0
- package/dist/utils/quota-error.js +44 -0
- package/dist/utils/quota-error.js.map +1 -0
- package/dist/workflow-loop/workflow-loop-state.d.ts +117 -0
- package/dist/workflow-loop/workflow-loop-state.js +11 -1
- package/dist/workflow-loop/workflow-loop-state.js.map +1 -1
- package/dist/workspace/builder-templates-service.js +2 -4
- package/dist/workspace/builder-templates-service.js.map +1 -1
- package/dist/workspace/lazy-runtime-workspace.js +2 -2
- package/dist/workspace/lazy-runtime-workspace.js.map +1 -1
- package/dist/workspace/pack-workspace-sdk.d.ts +9 -2
- package/dist/workspace/pack-workspace-sdk.js +36 -13
- package/dist/workspace/pack-workspace-sdk.js.map +1 -1
- package/dist/workspace/sandbox-fs.js +2 -2
- package/dist/workspace/sandbox-fs.js.map +1 -1
- package/dist/workspace/sandbox-setup.js +29 -19
- package/dist/workspace/sandbox-setup.js.map +1 -1
- package/dist/workspace/snapshot-manager.js +2 -4
- package/dist/workspace/snapshot-manager.js.map +1 -1
- package/dist/workspace/workspace-files.js +19 -4
- package/dist/workspace/workspace-files.js.map +1 -1
- package/knowledge-base/reference/workflow-builder-guardrails.md +9 -20
- package/package.json +16 -16
- package/skills/config-evals/SKILL.md +29 -5
- package/skills/config-evals/references/config-eval-playbook.md +20 -9
- package/skills/data-table-manager/SKILL.md +12 -5
- package/skills/intent-recognition/SKILL.md +10 -0
- package/skills/n8n-docs-assistant/SKILL.md +2 -1
- package/skills/planning/SKILL.md +14 -3
- package/skills/post-build-flow/SKILL.md +3 -0
- package/skills/workflow-builder/SKILL.md +174 -92
- package/dist/tools/templates.tool.d.ts +0 -2
- package/dist/tools/templates.tool.js +0 -20
- package/dist/tools/templates.tool.js.map +0 -1
|
@@ -68,37 +68,47 @@ function buildPackageJson(sdkSpecifier) {
|
|
|
68
68
|
}, null, 2);
|
|
69
69
|
}
|
|
70
70
|
exports.PACKAGE_JSON = buildPackageJson((0, pack_workspace_sdk_1.isLinkWorkspaceSdkEnabled)() ? null : SANDBOX_SDK_VERSION);
|
|
71
|
-
let
|
|
71
|
+
let linkedPackagesPromise = null;
|
|
72
72
|
async function linkWorkspaceSdkIfEnabled(workspace, root, logger) {
|
|
73
73
|
if (!(0, pack_workspace_sdk_1.isLinkWorkspaceSdkEnabled)())
|
|
74
74
|
return;
|
|
75
|
-
|
|
76
|
-
|
|
75
|
+
linkedPackagesPromise ??= (0, pack_workspace_sdk_1.packSandboxLinkedWorkspacePackages)(logger).catch((error) => {
|
|
76
|
+
linkedPackagesPromise = null;
|
|
77
77
|
throw error;
|
|
78
78
|
});
|
|
79
|
-
const
|
|
80
|
-
if (!
|
|
81
|
-
|
|
82
|
-
throw new Error('N8N_INSTANCE_AI_SANDBOX_LINK_SDK is enabled, but
|
|
79
|
+
const packedPackages = await linkedPackagesPromise;
|
|
80
|
+
if (!packedPackages?.length) {
|
|
81
|
+
linkedPackagesPromise = null;
|
|
82
|
+
throw new Error('N8N_INSTANCE_AI_SANDBOX_LINK_SDK is enabled, but workspace packages could not be packed. Run `pnpm build` in packages/workflow and packages/@n8n/workflow-sdk, or unset N8N_INSTANCE_AI_SANDBOX_LINK_SDK.');
|
|
83
83
|
}
|
|
84
|
-
const
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
84
|
+
const remotePaths = [];
|
|
85
|
+
for (const packed of packedPackages) {
|
|
86
|
+
const remotePath = (0, workspace_paths_1.joinWorkspacePath)(root, packed.filename);
|
|
87
|
+
remotePaths.push(remotePath);
|
|
88
|
+
if (workspace.filesystem) {
|
|
89
|
+
await writeWorkspaceFile(workspace, workspace.filesystem, remotePath, packed.tarball);
|
|
90
|
+
}
|
|
91
|
+
else {
|
|
92
|
+
await (0, sandbox_fs_1.writeFileViaSandbox)(workspace, remotePath, packed.tarball);
|
|
93
|
+
}
|
|
90
94
|
}
|
|
91
|
-
const
|
|
95
|
+
const tarballArgs = remotePaths
|
|
96
|
+
.map((remotePath) => `'${(0, sandbox_fs_1.escapeSingleQuotes)(remotePath)}'`)
|
|
97
|
+
.join(' ');
|
|
98
|
+
const install = await (0, sandbox_fs_1.runInSandbox)(workspace, `npm install ${tarballArgs} --no-save --ignore-scripts --force`, root);
|
|
92
99
|
if (install.exitCode !== 0) {
|
|
93
|
-
logger.error('Failed to link workspace
|
|
100
|
+
logger.error('Failed to link workspace packages into sandbox', {
|
|
94
101
|
exitCode: install.exitCode,
|
|
95
102
|
stderr: install.stderr,
|
|
96
103
|
});
|
|
97
|
-
throw new Error(`Failed to install workspace
|
|
104
|
+
throw new Error(`Failed to install workspace package tarballs: ${install.stderr}`);
|
|
98
105
|
}
|
|
99
|
-
logger.info('Linked workspace
|
|
100
|
-
|
|
101
|
-
|
|
106
|
+
logger.info('Linked workspace packages into sandbox', {
|
|
107
|
+
packages: packedPackages.map((packed) => ({
|
|
108
|
+
name: packed.packageName,
|
|
109
|
+
version: packed.version,
|
|
110
|
+
path: packed.packagePath,
|
|
111
|
+
})),
|
|
102
112
|
});
|
|
103
113
|
}
|
|
104
114
|
exports.BUILD_MJS = `const filePath = process.argv[2] || './src/workflow.ts';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sandbox-setup.js","sourceRoot":"","sources":["../../src/workspace/sandbox-setup.ts"],"names":[],"mappings":";;;;;;AA+BA,iDAAuD;AACvD,6CAA4C;AAI5C,6DAI8B;AAC9B,6CAMsB;AACtB,uDAAsD;AACtD,6FAAqG;AAErG,MAAM,WAAW,GAAG,IAAA,2BAAa,EAAC,UAAU,CAAC,CAAC;AAY9C,SAAS,eAAe,CAAC,KAAc;IACtC,OAAO,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AAC/D,CAAC;AAED,gCAAwC,SAAQ,KAAK;IAE1C,IAAI;IACJ,aAAa;IAFvB,YACU,IAA+B,EAC/B,aAAsB;QAE/B,KAAK,CAAC,yCAAyC,IAAI,KAAK,eAAe,CAAC,aAAa,CAAC,EAAE,CAAC,CAAC;oBAHjF,IAAI;6BACJ,aAAa;QAGtB,IAAI,CAAC,IAAI,GAAG,4BAA4B,CAAC;IAC1C,CAAC;CACD;;AAED,KAAK,UAAU,SAAS,CAAI,IAA+B,EAAE,MAAwB;IACpF,IAAI,CAAC;QACJ,OAAO,MAAM,MAAM,EAAE,CAAC;IACvB,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QAChB,MAAM,IAAI,0BAA0B,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;IACnD,CAAC;AACF,CAAC;AAOD,SAAS,qBAAqB,CAAC,IAAY;IAC1C,IAAI,CAAC;QACJ,MAAM,GAAG,GAAG,WAAW,CAAC,GAAG,IAAI,eAAe,CAAyB,CAAC;QACxE,OAAO,GAAG,CAAC,OAAO,IAAI,GAAG,CAAC;IAC3B,CAAC;IAAC,MAAM,CAAC;QACR,OAAO,GAAG,CAAC;IACZ,CAAC;AACF,CAAC;AAwBD,MAAM,mBAAmB,GAAG,wBAAwB,EAAE,CAAC;AAEvD,SAAS,wBAAwB;IAChC,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,gCAAgC,CAAC;IAC9D,IAAI,QAAQ,KAAK,GAAG,IAAI,QAAQ,KAAK,MAAM;QAAE,OAAO,QAAQ,CAAC;IAC7D,OAAO,qBAAqB,CAAC,mBAAmB,CAAC,CAAC;AACnD,CAAC;AACD,MAAM,mBAAmB,GAAG,qBAAqB,CAAC,KAAK,CAAC,CAAC;AASzD,MAAM,0BAA0B,GAAG,SAAS,CAAC;AAE7C,SAAS,gBAAgB,CAAC,YAA2B;IACpD,MAAM,YAAY,GAA2B;QAC5C,GAAG,EAAE,mBAAmB;KACxB,CAAC;IACF,IAAI,YAAY,EAAE,CAAC;QAClB,YAAY,CAAC,mBAAmB,CAAC,GAAG,YAAY,CAAC;IAClD,CAAC;IAED,OAAO,IAAI,CAAC,SAAS,CACpB;QACC,IAAI,EAAE,mBAAmB;QACzB,OAAO,EAAE,IAAI;QACb,YAAY;QACZ,eAAe,EAAE;YAChB,aAAa,EAAE,0BAA0B;SACzC;KACD,EACD,IAAI,EACJ,CAAC,CACD,CAAC;AACH,CAAC;AAYY,QAAA,YAAY,GAAG,gBAAgB,CAC3C,IAAA,8CAAyB,GAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,mBAAmB,CACxD,CAAC;AAEF,IAAI,
|
|
1
|
+
{"version":3,"file":"sandbox-setup.js","sourceRoot":"","sources":["../../src/workspace/sandbox-setup.ts"],"names":[],"mappings":";;;;;;AA+BA,iDAAuD;AACvD,6CAA4C;AAI5C,6DAI8B;AAC9B,6CAMsB;AACtB,uDAAsD;AACtD,6FAAqG;AAErG,MAAM,WAAW,GAAG,IAAA,2BAAa,EAAC,UAAU,CAAC,CAAC;AAY9C,SAAS,eAAe,CAAC,KAAc;IACtC,OAAO,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AAC/D,CAAC;AAED,gCAAwC,SAAQ,KAAK;IAE1C,IAAI;IACJ,aAAa;IAFvB,YACU,IAA+B,EAC/B,aAAsB;QAE/B,KAAK,CAAC,yCAAyC,IAAI,KAAK,eAAe,CAAC,aAAa,CAAC,EAAE,CAAC,CAAC;oBAHjF,IAAI;6BACJ,aAAa;QAGtB,IAAI,CAAC,IAAI,GAAG,4BAA4B,CAAC;IAC1C,CAAC;CACD;;AAED,KAAK,UAAU,SAAS,CAAI,IAA+B,EAAE,MAAwB;IACpF,IAAI,CAAC;QACJ,OAAO,MAAM,MAAM,EAAE,CAAC;IACvB,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QAChB,MAAM,IAAI,0BAA0B,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;IACnD,CAAC;AACF,CAAC;AAOD,SAAS,qBAAqB,CAAC,IAAY;IAC1C,IAAI,CAAC;QACJ,MAAM,GAAG,GAAG,WAAW,CAAC,GAAG,IAAI,eAAe,CAAyB,CAAC;QACxE,OAAO,GAAG,CAAC,OAAO,IAAI,GAAG,CAAC;IAC3B,CAAC;IAAC,MAAM,CAAC;QACR,OAAO,GAAG,CAAC;IACZ,CAAC;AACF,CAAC;AAwBD,MAAM,mBAAmB,GAAG,wBAAwB,EAAE,CAAC;AAEvD,SAAS,wBAAwB;IAChC,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,gCAAgC,CAAC;IAC9D,IAAI,QAAQ,KAAK,GAAG,IAAI,QAAQ,KAAK,MAAM;QAAE,OAAO,QAAQ,CAAC;IAC7D,OAAO,qBAAqB,CAAC,mBAAmB,CAAC,CAAC;AACnD,CAAC;AACD,MAAM,mBAAmB,GAAG,qBAAqB,CAAC,KAAK,CAAC,CAAC;AASzD,MAAM,0BAA0B,GAAG,SAAS,CAAC;AAE7C,SAAS,gBAAgB,CAAC,YAA2B;IACpD,MAAM,YAAY,GAA2B;QAC5C,GAAG,EAAE,mBAAmB;KACxB,CAAC;IACF,IAAI,YAAY,EAAE,CAAC;QAClB,YAAY,CAAC,mBAAmB,CAAC,GAAG,YAAY,CAAC;IAClD,CAAC;IAED,OAAO,IAAI,CAAC,SAAS,CACpB;QACC,IAAI,EAAE,mBAAmB;QACzB,OAAO,EAAE,IAAI;QACb,YAAY;QACZ,eAAe,EAAE;YAChB,aAAa,EAAE,0BAA0B;SACzC;KACD,EACD,IAAI,EACJ,CAAC,CACD,CAAC;AACH,CAAC;AAYY,QAAA,YAAY,GAAG,gBAAgB,CAC3C,IAAA,8CAAyB,GAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,mBAAmB,CACxD,CAAC;AAEF,IAAI,qBAAqB,GAAqD,IAAI,CAAC;AAE5E,KAAK,oCACX,SAA2B,EAC3B,IAAY,EACZ,MAAc;IAEd,IAAI,CAAC,IAAA,8CAAyB,GAAE;QAAE,OAAO;IAEzC,qBAAqB,KAAK,IAAA,uDAAkC,EAAC,MAAM,CAAC,CAAC,KAAK,CAAC,CAAC,KAAc,EAAE,EAAE;QAC7F,qBAAqB,GAAG,IAAI,CAAC;QAC7B,MAAM,KAAK,CAAC;IACb,CAAC,CAAC,CAAC;IACH,MAAM,cAAc,GAAG,MAAM,qBAAqB,CAAC;IACnD,IAAI,CAAC,cAAc,EAAE,MAAM,EAAE,CAAC;QAC7B,qBAAqB,GAAG,IAAI,CAAC;QAC7B,MAAM,IAAI,KAAK,CACd,2MAA2M,CAC3M,CAAC;IACH,CAAC;IAED,MAAM,WAAW,GAAa,EAAE,CAAC;IACjC,KAAK,MAAM,MAAM,IAAI,cAAc,EAAE,CAAC;QACrC,MAAM,UAAU,GAAG,IAAA,mCAAiB,EAAC,IAAI,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAC;QAC5D,WAAW,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QAC7B,IAAI,SAAS,CAAC,UAAU,EAAE,CAAC;YAC1B,MAAM,kBAAkB,CAAC,SAAS,EAAE,SAAS,CAAC,UAAU,EAAE,UAAU,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC;QACvF,CAAC;aAAM,CAAC;YACP,MAAM,IAAA,gCAAmB,EAAC,SAAS,EAAE,UAAU,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC;QAClE,CAAC;IACF,CAAC;IAED,MAAM,WAAW,GAAG,WAAW;SAC7B,GAAG,CAAC,CAAC,UAAU,EAAE,EAAE,CAAC,IAAI,IAAA,+BAAkB,EAAC,UAAU,CAAC,GAAG,CAAC;SAC1D,IAAI,CAAC,GAAG,CAAC,CAAC;IACZ,MAAM,OAAO,GAAG,MAAM,IAAA,yBAAY,EACjC,SAAS,EACT,eAAe,WAAW,qCAAqC,EAC/D,IAAI,CACJ,CAAC;IACF,IAAI,OAAO,CAAC,QAAQ,KAAK,CAAC,EAAE,CAAC;QAC5B,MAAM,CAAC,KAAK,CAAC,gDAAgD,EAAE;YAC9D,QAAQ,EAAE,OAAO,CAAC,QAAQ;YAC1B,MAAM,EAAE,OAAO,CAAC,MAAM;SACtB,CAAC,CAAC;QACH,MAAM,IAAI,KAAK,CAAC,iDAAiD,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;IACpF,CAAC;IAED,MAAM,CAAC,IAAI,CAAC,wCAAwC,EAAE;QACrD,QAAQ,EAAE,cAAc,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;YACzC,IAAI,EAAE,MAAM,CAAC,WAAW;YACxB,OAAO,EAAE,MAAM,CAAC,OAAO;YACvB,IAAI,EAAE,MAAM,CAAC,WAAW;SACxB,CAAC,CAAC;KACH,CAAC,CAAC;AACJ,CAAC;AAMY,QAAA,SAAS,GAAG;;;;;;;;;;;;;;;;;;;;;;;;CAwBxB,CAAC;AAEW,QAAA,aAAa,GAAG,IAAI,CAAC,SAAS,CAC1C;IACC,eAAe,EAAE;QAChB,MAAM,EAAE,IAAI;QAIZ,gBAAgB,EAAE,KAAK;QACvB,MAAM,EAAE,IAAI;QACZ,MAAM,EAAE,QAAQ;QAChB,MAAM,EAAE,QAAQ;QAChB,gBAAgB,EAAE,SAAS;QAC3B,eAAe,EAAE,IAAI;QACrB,YAAY,EAAE,IAAI;KAClB;IACD,OAAO,EAAE,CAAC,aAAa,EAAE,gBAAgB,CAAC;CAC1C,EACD,IAAI,EACJ,CAAC,CACD,CAAC;AAMF,+BAAsC,IAA+B;IACpE,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC;QAC1C,CAAC,CAAC,IAAI,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,EAAE;QAC7C,CAAC,CAAC,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;IAEtB,MAAM,KAAK,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC;IAEvE,IAAI,IAAI,CAAC,KAAK,EAAE,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACtD,KAAK,CAAC,IAAI,CAAC,YAAY,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACvD,CAAC;IAED,OAAO,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AAC1B,CAAC;AAGD,MAAM,mBAAmB,GAAsB,CAAC,KAAK,EAAE,QAAQ,EAAE,WAAW,CAAC,CAAC;AAE9E,KAAK,UAAU,mBAAmB,CACjC,SAA2B,EAC3B,IAAY,EACZ,KAA0B;IAE1B,MAAM,UAAU,GAAG,SAAS,CAAC,UAAU,CAAC;IACxC,IAAI,UAAU,EAAE,CAAC;QAEhB,MAAM,OAAO,CAAC,GAAG,CAChB,mBAAmB,CAAC,GAAG,CACtB,KAAK,EAAE,GAAG,EAAE,EAAE,CACb,MAAM,wBAAwB,CAAC,SAAS,EAAE,UAAU,EAAE,IAAA,mCAAiB,EAAC,IAAI,EAAE,GAAG,CAAC,CAAC,CACpF,CACD,CAAC;QACF,MAAM,OAAO,CAAC,GAAG,CAChB,CAAC,GAAG,KAAK,CAAC,CAAC,GAAG,CACb,KAAK,EAAE,CAAC,IAAI,EAAE,OAAO,CAAC,EAAE,EAAE,CACzB,MAAM,kBAAkB,CAAC,SAAS,EAAE,UAAU,EAAE,IAAA,mCAAiB,EAAC,IAAI,EAAE,IAAI,CAAC,EAAE,OAAO,CAAC,CACxF,CACD,CAAC;QACF,OAAO;IACR,CAAC;IAED,MAAM,OAAO,GAAG,mBAAmB,CAAC,GAAG,CACtC,CAAC,GAAG,EAAE,EAAE,CAAC,IAAI,IAAA,+BAAkB,EAAC,IAAA,mCAAiB,EAAC,IAAI,EAAE,GAAG,CAAC,CAAC,GAAG,CAChE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACZ,MAAM,MAAM,GAAG,MAAM,IAAA,yBAAY,EAAC,SAAS,EAAE,YAAY,OAAO,EAAE,CAAC,CAAC;IACpE,IAAI,MAAM,CAAC,QAAQ,KAAK,CAAC,EAAE,CAAC;QAC3B,MAAM,IAAI,KAAK,CAAC,yBAAyB,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC;IAC3D,CAAC;IAED,KAAK,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,IAAI,KAAK,EAAE,CAAC;QACrC,MAAM,IAAA,gCAAmB,EAAC,SAAS,EAAE,IAAA,mCAAiB,EAAC,IAAI,EAAE,IAAI,CAAC,EAAE,OAAO,CAAC,CAAC;IAC9E,CAAC;AACF,CAAC;AAID,KAAK,UAAU,wBAAwB,CACtC,SAA2B,EAC3B,UAA+B,EAC/B,IAAY;IAEZ,IAAI,CAAC;QACJ,MAAM,UAAU,CAAC,KAAK,CAAC,IAAI,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IACnD,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QAChB,IAAI,CAAC;YACJ,MAAM,MAAM,GAAG,MAAM,IAAA,yBAAY,EAAC,SAAS,EAAE,aAAa,IAAA,+BAAkB,EAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YACvF,IAAI,MAAM,CAAC,QAAQ,KAAK,CAAC;gBAAE,OAAO;YAElC,MAAM,IAAI,KAAK,CAAC,MAAM,CAAC,MAAM,IAAI,0BAA0B,MAAM,CAAC,QAAQ,EAAE,CAAC,CAAC;QAC/E,CAAC;QAAC,OAAO,aAAa,EAAE,CAAC;YACxB,MAAM,IAAI,KAAK,CACd,iDAAiD,IAAI,MAAM,eAAe,CAAC,KAAK,CAAC,8BAA8B,eAAe,CAAC,aAAa,CAAC,EAAE,CAC/I,CAAC;QACH,CAAC;IACF,CAAC;AACF,CAAC;AAED,KAAK,UAAU,kBAAkB,CAChC,SAA2B,EAC3B,UAA+B,EAC/B,IAAY,EACZ,OAAwB;IAExB,IAAI,CAAC;QACJ,MAAM,UAAU,CAAC,SAAS,CAAC,IAAI,EAAE,OAAO,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAChE,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QAChB,IAAI,CAAC;YACJ,MAAM,IAAA,gCAAmB,EAAC,SAAS,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;QACrD,CAAC;QAAC,OAAO,aAAa,EAAE,CAAC;YACxB,MAAM,IAAI,KAAK,CACd,2CAA2C,IAAI,MAAM,eAAe,CAAC,KAAK,CAAC,8BAA8B,eAAe,CAAC,aAAa,CAAC,EAAE,CACzI,CAAC;QACH,CAAC;IACF,CAAC;AACF,CAAC;AAED,KAAK,UAAU,iBAAiB,CAC/B,SAA2B,EAC3B,IAAY;IAEZ,MAAM,UAAU,GAAG,SAAS,CAAC,UAAU,CAAC;IACxC,IAAI,UAAU,EAAE,QAAQ,EAAE,CAAC;QAC1B,IAAI,CAAC;YACJ,MAAM,OAAO,GAAG,MAAM,UAAU,CAAC,QAAQ,CAAC,IAAI,EAAE,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC,CAAC;YACvE,OAAO,OAAO,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;QAC1E,CAAC;QAAC,MAAM,CAAC;YACR,IAAI,CAAC,SAAS,CAAC,OAAO;gBAAE,OAAO,IAAI,CAAC;QACrC,CAAC;IACF,CAAC;IAED,OAAO,MAAM,IAAA,+BAAkB,EAAC,SAAS,EAAE,IAAI,CAAC,CAAC;AAClD,CAAC;AAED,KAAK,UAAU,4BAA4B,CAC1C,SAA2B,EAC3B,IAAY,EACZ,OAA0B;IAE1B,MAAM,SAAS,CAAC,4BAA4B,EAAE,KAAK,IAAI,EAAE;QACxD,MAAM,eAAe,GAAG,CAAC,MAAM,OAAO,CAAC,gBAAgB,EAAE,SAAS,EAAE,CAAC,IAAI,IAAI,CAAC;QAC9E,MAAM,IAAA,kEAAqC,EAAC;YAC3C,SAAS;YACT,IAAI;YACJ,MAAM,EAAE,OAAO,CAAC,MAAM;YACtB,gBAAgB,EAAE,eAAe,EAAE,OAAO,IAAI,IAAI;SAClD,CAAC,CAAC;IACJ,CAAC,CAAC,CAAC;AACJ,CAAC;AAUM,KAAK,gCACX,SAA2B,EAC3B,OAA0B;IAE1B,MAAM,IAAI,GAAG,MAAM,SAAS,CAC3B,wBAAwB,EACxB,KAAK,IAAI,EAAE,CAAC,MAAM,IAAA,0BAAgB,EAAC,SAAS,CAAC,CAC7C,CAAC;IACF,MAAM,UAAU,GAAG,IAAA,mCAAiB,EAAC,IAAI,EAAE,sBAAsB,CAAC,CAAC;IAGnE,MAAM,MAAM,GAAG,MAAM,SAAS,CAC7B,4BAA4B,EAC5B,KAAK,IAAI,EAAE,CAAC,MAAM,iBAAiB,CAAC,SAAS,EAAE,UAAU,CAAC,CAC1D,CAAC;IACF,IAAI,MAAM,KAAK,IAAI,EAAE,CAAC;QACrB,MAAM,4BAA4B,CAAC,SAAS,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;QAC7D,OAAO,KAAK,CAAC;IACd,CAAC;IAID,MAAM,KAAK,GAAG,IAAI,GAAG,EAAkB,CAAC;IAExC,KAAK,CAAC,GAAG,CAAC,cAAc,EAAE,QAAA,YAAY,CAAC,CAAC;IACxC,KAAK,CAAC,GAAG,CAAC,eAAe,EAAE,QAAA,aAAa,CAAC,CAAC;IAC1C,KAAK,CAAC,GAAG,CAAC,WAAW,EAAE,QAAA,SAAS,CAAC,CAAC;IAGlC,MAAM,SAAS,GAAG,MAAM,SAAS,CAChC,iBAAiB,EACjB,KAAK,IAAI,EAAE,CAAC,MAAM,OAAO,CAAC,WAAW,CAAC,cAAc,EAAE,CACtD,CAAC;IACF,MAAM,YAAY,GAAG,SAAS,CAAC,GAAG,CAAC,qBAAqB,CAAC,CAAC;IAC1D,KAAK,CAAC,GAAG,CAAC,sBAAsB,EAAE,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;IAG3D,IAAI,CAAC;QACJ,MAAM,SAAS,GAAG,MAAM,OAAO,CAAC,eAAe,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC,CAAC;QACrE,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,UAAU,CACvC,SAAS,CAAC,GAAG,CAAC,KAAK,EAAE,OAAO,EAAE,EAAE;YAC/B,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,eAAe,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;YAC7D,OAAO,EAAE,EAAE,EAAE,OAAO,CAAC,EAAE,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC;QAClE,CAAC,CAAC,CACF,CAAC;QACF,KAAK,MAAM,CAAC,IAAI,OAAO,EAAE,CAAC;YACzB,IAAI,CAAC,CAAC,MAAM,KAAK,WAAW,EAAE,CAAC;gBAC9B,KAAK,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC,KAAK,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YACzD,CAAC;QACF,CAAC;IACF,CAAC;IAAC,MAAM,CAAC;IAET,CAAC;IAID,MAAM,SAAS,CACd,uBAAuB,EACvB,KAAK,IAAI,EAAE,CAAC,MAAM,mBAAmB,CAAC,SAAS,EAAE,IAAI,EAAE,KAAK,CAAC,CAC7D,CAAC;IACF,MAAM,4BAA4B,CAAC,SAAS,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;IAG7D,MAAM,SAAS,CAAC,sBAAsB,EAAE,KAAK,IAAI,EAAE;QAClD,MAAM,SAAS,GAAG,MAAM,IAAA,yBAAY,EAAC,SAAS,EAAE,8BAA8B,EAAE,IAAI,CAAC,CAAC;QACtF,IAAI,SAAS,CAAC,QAAQ,KAAK,CAAC,EAAE,CAAC;YAC9B,MAAM,IAAI,KAAK,CAAC,+BAA+B,SAAS,CAAC,MAAM,EAAE,CAAC,CAAC;QACpE,CAAC;IACF,CAAC,CAAC,CAAC;IAEH,MAAM,SAAS,CACd,oBAAoB,EACpB,KAAK,IAAI,EAAE,CAAC,MAAM,yBAAyB,CAAC,SAAS,EAAE,IAAI,EAAE,OAAO,CAAC,MAAM,CAAC,CAC5E,CAAC;IAEF,MAAM,SAAS,CACd,6BAA6B,EAC7B,KAAK,IAAI,EAAE,CACV,MAAM,mBAAmB,CACxB,SAAS,EACT,IAAI,EACJ,IAAI,GAAG,CAAC,CAAC,CAAC,sBAAsB,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,CAC7D,CACF,CAAC;IAEF,OAAO,IAAI,CAAC;AACb,CAAC"}
|
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.SnapshotManager = void 0;
|
|
4
4
|
const sandbox_1 = require("@n8n/agents/sandbox");
|
|
5
|
+
const sleep_1 = require("@n8n/utils/sleep");
|
|
5
6
|
const materialize_knowledge_base_1 = require("../knowledge-base/materialize-knowledge-base");
|
|
6
7
|
const builder_templates_service_1 = require("./builder-templates-service");
|
|
7
8
|
const sandbox_setup_1 = require("./sandbox-setup");
|
|
@@ -13,9 +14,6 @@ const SNAPSHOT_WORKSPACE_LAYOUT_DIRS = ['src', 'chunks', 'node-types'];
|
|
|
13
14
|
const SNAPSHOT_BUILDING_STATES = new Set(['building', 'pending', 'pulling']);
|
|
14
15
|
const SNAPSHOT_VERIFY_POLL_MS = 5_000;
|
|
15
16
|
const DEFAULT_SNAPSHOT_VERIFY_TIMEOUT_S = 1_800;
|
|
16
|
-
async function sleep(ms) {
|
|
17
|
-
await new Promise((resolve) => setTimeout(resolve, ms));
|
|
18
|
-
}
|
|
19
17
|
function isAlreadyExistsError(error) {
|
|
20
18
|
const { DaytonaError } = (0, sandbox_1.loadDaytona)();
|
|
21
19
|
if (!(error instanceof DaytonaError))
|
|
@@ -114,7 +112,7 @@ class SnapshotManager {
|
|
|
114
112
|
name,
|
|
115
113
|
state: snapshot.state,
|
|
116
114
|
});
|
|
117
|
-
await sleep(SNAPSHOT_VERIFY_POLL_MS);
|
|
115
|
+
await (0, sleep_1.sleep)(SNAPSHOT_VERIFY_POLL_MS);
|
|
118
116
|
}
|
|
119
117
|
}
|
|
120
118
|
snapshotName() {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"snapshot-manager.js","sourceRoot":"","sources":["../../src/workspace/snapshot-manager.ts"],"names":[],"mappings":";;;AAgBA,iDAA0E;
|
|
1
|
+
{"version":3,"file":"snapshot-manager.js","sourceRoot":"","sources":["../../src/workspace/snapshot-manager.ts"],"names":[],"mappings":"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"}
|
|
@@ -3,14 +3,23 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.readWorkspaceFile = readWorkspaceFile;
|
|
4
4
|
exports.writeWorkspaceFile = writeWorkspaceFile;
|
|
5
5
|
exports.writeWorkspaceFileMap = writeWorkspaceFileMap;
|
|
6
|
+
const agents_1 = require("@n8n/agents");
|
|
6
7
|
const error_formatting_1 = require("../error-formatting");
|
|
7
8
|
const sandbox_fs_1 = require("./sandbox-fs");
|
|
9
|
+
const quota_error_1 = require("../utils/quota-error");
|
|
8
10
|
function resourceLabel(options) {
|
|
9
11
|
return options?.resourceLabel ?? 'Workspace file';
|
|
10
12
|
}
|
|
11
13
|
function decodeWorkspaceFileContent(content) {
|
|
12
14
|
return Buffer.isBuffer(content) ? content.toString('utf-8') : content;
|
|
13
15
|
}
|
|
16
|
+
function selectWriteFailureCause(writeError, fallbackError) {
|
|
17
|
+
if ((0, quota_error_1.isQuotaExhaustedError)(writeError))
|
|
18
|
+
return writeError;
|
|
19
|
+
if ((0, quota_error_1.isQuotaExhaustedError)(fallbackError))
|
|
20
|
+
return fallbackError;
|
|
21
|
+
return writeError;
|
|
22
|
+
}
|
|
14
23
|
async function readWorkspaceFile(workspace, filePath, options) {
|
|
15
24
|
const filesystem = workspace.filesystem;
|
|
16
25
|
const readFile = filesystem?.readFile;
|
|
@@ -23,7 +32,7 @@ async function readWorkspaceFile(workspace, filePath, options) {
|
|
|
23
32
|
}
|
|
24
33
|
catch (error) {
|
|
25
34
|
if ((0, sandbox_fs_1.isTransientSandboxIoError)(error)) {
|
|
26
|
-
throw new Error(`Failed to read ${resourceLabel(options).toLowerCase()} "${filePath}": ${(0, error_formatting_1.formatErrorForLog)(error)}
|
|
35
|
+
throw new Error(`Failed to read ${resourceLabel(options).toLowerCase()} "${filePath}": ${(0, error_formatting_1.formatErrorForLog)(error)}`, { cause: error });
|
|
27
36
|
}
|
|
28
37
|
options?.logger.debug(`${resourceLabel(options)} filesystem read missed`, {
|
|
29
38
|
path: filePath,
|
|
@@ -39,7 +48,7 @@ async function readWorkspaceFile(workspace, filePath, options) {
|
|
|
39
48
|
}
|
|
40
49
|
catch (error) {
|
|
41
50
|
if ((0, sandbox_fs_1.isTransientSandboxIoError)(error)) {
|
|
42
|
-
throw new Error(`Failed to read ${resourceLabel(options).toLowerCase()} "${filePath}": ${(0, error_formatting_1.formatErrorForLog)(error)}
|
|
51
|
+
throw new Error(`Failed to read ${resourceLabel(options).toLowerCase()} "${filePath}": ${(0, error_formatting_1.formatErrorForLog)(error)}`, { cause: error });
|
|
43
52
|
}
|
|
44
53
|
options?.logger.debug(`${resourceLabel(options)} command read missed`, {
|
|
45
54
|
path: filePath,
|
|
@@ -60,6 +69,8 @@ async function writeWorkspaceFile(workspace, filePath, content, options) {
|
|
|
60
69
|
return;
|
|
61
70
|
}
|
|
62
71
|
catch (error) {
|
|
72
|
+
if ((0, agents_1.isAbortError)(error))
|
|
73
|
+
throw error;
|
|
63
74
|
try {
|
|
64
75
|
await (0, sandbox_fs_1.writeFileViaSandbox)(workspace, filePath, content, options);
|
|
65
76
|
options?.logger.warn(`${label} filesystem write failed; used command fallback`, {
|
|
@@ -69,7 +80,9 @@ async function writeWorkspaceFile(workspace, filePath, content, options) {
|
|
|
69
80
|
return;
|
|
70
81
|
}
|
|
71
82
|
catch (fallbackError) {
|
|
72
|
-
|
|
83
|
+
if ((0, agents_1.isAbortError)(fallbackError))
|
|
84
|
+
throw fallbackError;
|
|
85
|
+
throw new Error(`Failed to write ${label.toLowerCase()} "${filePath}": ${(0, error_formatting_1.formatErrorForLog)(error)}; command fallback failed: ${(0, error_formatting_1.formatErrorForLog)(fallbackError)}`, { cause: selectWriteFailureCause(error, fallbackError) });
|
|
73
86
|
}
|
|
74
87
|
}
|
|
75
88
|
}
|
|
@@ -77,7 +90,9 @@ async function writeWorkspaceFile(workspace, filePath, content, options) {
|
|
|
77
90
|
await (0, sandbox_fs_1.writeFileViaSandbox)(workspace, filePath, content, options);
|
|
78
91
|
}
|
|
79
92
|
catch (error) {
|
|
80
|
-
|
|
93
|
+
if ((0, agents_1.isAbortError)(error))
|
|
94
|
+
throw error;
|
|
95
|
+
throw new Error(`Failed to write ${label.toLowerCase()} "${filePath}": ${(0, error_formatting_1.formatErrorForLog)(error)}`, { cause: error });
|
|
81
96
|
}
|
|
82
97
|
}
|
|
83
98
|
async function writeWorkspaceFileMap(workspace, files, options) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"workspace-files.js","sourceRoot":"","sources":["../../src/workspace/workspace-files.ts"],"names":[],"mappings":";;;;;AAAA,0DAAwD;AAExD,6CAMsB;
|
|
1
|
+
{"version":3,"file":"workspace-files.js","sourceRoot":"","sources":["../../src/workspace/workspace-files.ts"],"names":[],"mappings":"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"}
|
|
@@ -4,8 +4,10 @@ Use these guardrails for workflow builds with multiple external systems,
|
|
|
4
4
|
multiple requested effects, digests or reports, non-trivial branching, or Code
|
|
5
5
|
nodes. They are a runtime checklist, not extra user-facing output.
|
|
6
6
|
|
|
7
|
-
|
|
8
|
-
|
|
7
|
+
Code-node runtime limits (no network, forbidden imports, nested template
|
|
8
|
+
literals) and unsolicited stickies are enforced by `workflow-sdk validate` —
|
|
9
|
+
fix those findings before `build-workflow`. Prefer built-in nodes for simple
|
|
10
|
+
split, map, filter, merge, and aggregate work.
|
|
9
11
|
|
|
10
12
|
## Preserve Source Data
|
|
11
13
|
|
|
@@ -116,22 +118,9 @@ node after a side-effect needs the original data, reference it by node name
|
|
|
116
118
|
(`$('Compute Change').item.json.status`) or wire it in parallel from the
|
|
117
119
|
data-producing node instead of chaining through the send.
|
|
118
120
|
|
|
119
|
-
##
|
|
121
|
+
## Code Nodes
|
|
120
122
|
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
Code nodes run in a restricted runtime. Do not `require()` or `import`
|
|
126
|
-
unavailable modules such as `luxon` or `openai`; use JavaScript `Date`, `Intl`,
|
|
127
|
-
`$now`, `$today`, existing workflow data, or dedicated AI nodes.
|
|
128
|
-
|
|
129
|
-
Code nodes have no network access. `fetch()`, `axios`, `XMLHttpRequest`, and
|
|
130
|
-
`require` of http modules all fail at runtime, in JavaScript and Python alike.
|
|
131
|
-
Make every HTTP/API call with the HTTP Request node and transform its output in
|
|
132
|
-
the Code node, even when the user asks to fetch inside a Code node.
|
|
133
|
-
|
|
134
|
-
Keep embedded Code node source parseable after saving. Avoid nested template
|
|
135
|
-
literals, raw newlines inside quoted strings, and escape-heavy regex literals.
|
|
136
|
-
Prefer arrays joined with a runtime separator such as
|
|
137
|
-
`const LF = String.fromCharCode(10);`.
|
|
123
|
+
When a Code node is necessary, use real n8n item APIs such as `$input.all()` /
|
|
124
|
+
`$input.item` and return explicit `json` objects. Prefer arrays joined with a
|
|
125
|
+
runtime separator (e.g. `const LF = String.fromCharCode(10);`) over escape-heavy
|
|
126
|
+
multi-line string construction.
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@n8n/instance-ai",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.19.0",
|
|
4
4
|
"main": "dist/index.js",
|
|
5
5
|
"module": "src/index.ts",
|
|
6
6
|
"types": "dist/index.d.ts",
|
|
@@ -36,9 +36,9 @@
|
|
|
36
36
|
"@joplin/turndown-plugin-gfm": "1.0.64",
|
|
37
37
|
"@langchain/anthropic": "1.3.27",
|
|
38
38
|
"@mozilla/readability": "^0.6.0",
|
|
39
|
-
"@opentelemetry/api": "
|
|
39
|
+
"@opentelemetry/api": "1.9.1",
|
|
40
40
|
"@thednp/dommatrix": "^2.0.12",
|
|
41
|
-
"ai": "^
|
|
41
|
+
"ai": "^7.0.37",
|
|
42
42
|
"csv-parse": "6.2.1",
|
|
43
43
|
"fast-glob": "3.3.3",
|
|
44
44
|
"flatted": "3.4.2",
|
|
@@ -54,18 +54,18 @@
|
|
|
54
54
|
"turndown": "^7.2.2",
|
|
55
55
|
"undici": "^7.28.0",
|
|
56
56
|
"@e965/xlsx": "0.20.3",
|
|
57
|
-
"zod": "3.25.
|
|
57
|
+
"zod": "3.25.76",
|
|
58
58
|
"zod-from-json-schema-v3": "npm:zod-from-json-schema@^0.0.5",
|
|
59
|
-
"@n8n/
|
|
60
|
-
"@n8n/
|
|
61
|
-
"@n8n/
|
|
62
|
-
"@n8n/
|
|
63
|
-
"@n8n/
|
|
64
|
-
"
|
|
65
|
-
"n8n-
|
|
59
|
+
"@n8n/agents": "0.19.0",
|
|
60
|
+
"@n8n/ai-utilities": "0.27.0",
|
|
61
|
+
"@n8n/api-types": "1.34.0",
|
|
62
|
+
"@n8n/utils": "1.42.0",
|
|
63
|
+
"@n8n/mcp-browser": "0.16.0",
|
|
64
|
+
"n8n-workflow": "2.34.0",
|
|
65
|
+
"@n8n/workflow-sdk": "0.27.0"
|
|
66
66
|
},
|
|
67
67
|
"devDependencies": {
|
|
68
|
-
"@ai-sdk/anthropic": "^
|
|
68
|
+
"@ai-sdk/anthropic": "^4.0.20",
|
|
69
69
|
"@langchain/core": "1.2.0",
|
|
70
70
|
"@types/luxon": "3.2.0",
|
|
71
71
|
"@types/psl": "1.1.3",
|
|
@@ -76,8 +76,8 @@
|
|
|
76
76
|
"vite": "^8.0.2",
|
|
77
77
|
"vitest": "^4.1.9",
|
|
78
78
|
"vitest-mock-extended": "^3.1.0",
|
|
79
|
-
"@n8n/
|
|
80
|
-
"@n8n/
|
|
79
|
+
"@n8n/typescript-config": "1.9.0",
|
|
80
|
+
"@n8n/vitest-config": "1.19.0"
|
|
81
81
|
},
|
|
82
82
|
"license": "SEE LICENSE IN LICENSE.md",
|
|
83
83
|
"homepage": "https://n8n.io",
|
|
@@ -91,7 +91,7 @@
|
|
|
91
91
|
},
|
|
92
92
|
"scripts": {
|
|
93
93
|
"clean": "rimraf dist .turbo",
|
|
94
|
-
"typecheck": "tsc --noEmit",
|
|
94
|
+
"typecheck": "tsc --noEmit && tsc -p evaluations/tsconfig.json",
|
|
95
95
|
"build": "tsc -p ./tsconfig.build.json && tsc-alias -p tsconfig.build.json",
|
|
96
96
|
"build:unchecked": "tsc -p ./tsconfig.build.json --noCheck && tsc-alias -p tsconfig.build.json",
|
|
97
97
|
"format": "biome format --write src",
|
|
@@ -102,7 +102,7 @@
|
|
|
102
102
|
"lint": "eslint . --quiet",
|
|
103
103
|
"lint:fix": "eslint . --fix",
|
|
104
104
|
"eval:instance-ai": "tsx evaluations/cli/index.ts",
|
|
105
|
-
"eval:agents": "tsx evaluations/cli/index.ts --tier agents",
|
|
105
|
+
"eval:agents": "tsx evaluations/cli/index.ts --source langtracer --suite agents --tier agents",
|
|
106
106
|
"eval:build-mcp-manifest": "tsx evaluations/cli/build-mcp-manifest.ts",
|
|
107
107
|
"eval:langtracer-push": "tsx evaluations/cli/langtracer-push.ts",
|
|
108
108
|
"eval:pairwise": "tsx evaluations/cli/pairwise.ts",
|
|
@@ -29,6 +29,7 @@ build a config eval instead and briefly say that is how you set up evaluations.
|
|
|
29
29
|
|
|
30
30
|
- `name` — a human-readable evaluation name.
|
|
31
31
|
- `startNodeName` — the node where a run begins; it is fed one test-input row.
|
|
32
|
+
Must be a node with an incoming connection — **never a trigger** (see step 2).
|
|
32
33
|
- `endNodeName` — the node whose output is judged.
|
|
33
34
|
- `dataTableId` — a Data Table holding the test dataset. Create and populate it
|
|
34
35
|
with the `data-tables` tool first, then link it here by id.
|
|
@@ -39,8 +40,11 @@ build a config eval instead and briefly say that is how you set up evaluations.
|
|
|
39
40
|
1. Identify the target workflow and read it. Trace the main path from trigger to
|
|
40
41
|
the node that produces the answer.
|
|
41
42
|
2. Pick the nodes:
|
|
42
|
-
- `startNodeName` is
|
|
43
|
-
|
|
43
|
+
- `startNodeName` is the first node **after** the trigger — the node that
|
|
44
|
+
receives the input the dataset varies. Never use the trigger itself: an
|
|
45
|
+
eval run swaps the trigger for a dataset-driven one, so the start node must
|
|
46
|
+
have an incoming connection or the run fails to compile. For a chat/agent
|
|
47
|
+
workflow this is usually the agent node (often the same as `endNodeName`).
|
|
44
48
|
- `endNodeName` is the node whose output you want scored (usually the AI agent
|
|
45
49
|
or the final response node).
|
|
46
50
|
3. Resolve the dataset. Call `data-tables(action="list")` to find an existing
|
|
@@ -68,13 +72,33 @@ Two presets are available:
|
|
|
68
72
|
|
|
69
73
|
- **`correctness`** — compares the produced answer to a ground-truth answer.
|
|
70
74
|
Requires `expectedAnswer` (an n8n expression resolving to the ground-truth
|
|
71
|
-
value, typically a dataset column, e.g.
|
|
75
|
+
value, typically a dataset column, e.g. `={{ $json.expected_output }}`).
|
|
72
76
|
- **`helpfulness`** — judges the produced answer against the user's query.
|
|
73
77
|
Requires `userQuery` (an n8n expression for the input the user asked, e.g.
|
|
74
|
-
|
|
78
|
+
`={{ $json.input }}`).
|
|
75
79
|
|
|
76
80
|
Every metric also needs `actualAnswer`: an n8n expression resolving to the
|
|
77
|
-
workflow's produced answer at the end node, e.g.
|
|
81
|
+
workflow's produced answer at the end node, e.g. `={{ $json.output }}`.
|
|
82
|
+
|
|
83
|
+
`userQuery` and `expectedAnswer` name **dataset columns** (the input the user
|
|
84
|
+
asked; the ground-truth answer). `actualAnswer` names a field of the workflow's
|
|
85
|
+
**produced output**. Write all of them as `={{ $json.<name> }}` — the evaluation
|
|
86
|
+
reads dataset columns from the dataset row and `actualAnswer` from the end node
|
|
87
|
+
automatically. Do not reference the trigger or any node by name.
|
|
88
|
+
|
|
89
|
+
### Expression fields must begin with `=`
|
|
90
|
+
|
|
91
|
+
`actualAnswer`, `userQuery`, and `expectedAnswer` are n8n **expressions** — they
|
|
92
|
+
read a value out of each test row at runtime. The leading `=` is what tells n8n
|
|
93
|
+
to evaluate the `{{ … }}` template. **Without it the string is stored as literal
|
|
94
|
+
text**: the field shows `{{ $json.output }}` verbatim and the judge scores that
|
|
95
|
+
raw string instead of the resolved value.
|
|
96
|
+
|
|
97
|
+
- Correct: `={{ $json.output }}`, `={{ $json.expected_output }}`
|
|
98
|
+
- Wrong: `{{ $json.output }}` (no `=` → treated as fixed text)
|
|
99
|
+
|
|
100
|
+
Only add `=` when the value references workflow data via `{{ … }}`. A genuinely
|
|
101
|
+
fixed constant (rare for these fields) is written as plain text without `=`.
|
|
78
102
|
|
|
79
103
|
Pick `correctness` when the dataset has a known right answer to compare against;
|
|
80
104
|
pick `helpfulness` when there is no single ground truth and quality is judged
|
|
@@ -16,6 +16,12 @@ discriminated by `action` and always take a `workflowId`.
|
|
|
16
16
|
Config fields (create/update): `name`, `startNodeName`, `endNodeName`,
|
|
17
17
|
`dataTableId`, `metrics`.
|
|
18
18
|
|
|
19
|
+
`startNodeName` must be a node **with an incoming connection** — the first node
|
|
20
|
+
the trigger feeds into, never the trigger itself. An eval run replaces the
|
|
21
|
+
trigger with a dataset-driven one, so naming the trigger as the start node fails
|
|
22
|
+
to compile. For a single-agent workflow, `startNodeName` and `endNodeName` are
|
|
23
|
+
usually the same agent node.
|
|
24
|
+
|
|
19
25
|
`create`, `update`, and `delete` show an approval card automatically. Call the
|
|
20
26
|
tool and act on the result; do not ask for chat approval beforehand.
|
|
21
27
|
|
|
@@ -28,12 +34,17 @@ tool and act on the result; do not ask for chat approval beforehand.
|
|
|
28
34
|
| `credentialId` | always | credential id for the judge model; also determines the provider |
|
|
29
35
|
| `model` | always | e.g. `gpt-4o` |
|
|
30
36
|
| `outputType` | defaults to `numeric` | `numeric` or `boolean` |
|
|
31
|
-
| `actualAnswer` | always | expression for the produced answer, e.g.
|
|
32
|
-
| `expectedAnswer` | `correctness` preset | expression for ground truth, e.g.
|
|
33
|
-
| `userQuery` | `helpfulness` preset | expression for the user's query, e.g.
|
|
37
|
+
| `actualAnswer` | always | expression for the produced answer, e.g. `={{ $json.output }}` |
|
|
38
|
+
| `expectedAnswer` | `correctness` preset | expression for ground truth, e.g. `={{ $json.expected_output }}` |
|
|
39
|
+
| `userQuery` | `helpfulness` preset | expression for the user's query, e.g. `={{ $json.input }}` |
|
|
34
40
|
| `prompt` | optional | overrides the default judge prompt |
|
|
35
41
|
| `provider` | omit | chat-model node type; leave unset — derived from `credentialId`. Set only if you know it (e.g. `@n8n/n8n-nodes-langchain.lmChatOpenAi`) |
|
|
36
42
|
|
|
43
|
+
`actualAnswer`, `expectedAnswer`, and `userQuery` are expressions and **must
|
|
44
|
+
begin with `=`** (e.g. `={{ $json.output }}`). Without the `=` the value is stored
|
|
45
|
+
as literal text and the judge scores `{{ $json.output }}` verbatim instead of the
|
|
46
|
+
resolved output. Only omit `=` for a genuinely fixed constant string.
|
|
47
|
+
|
|
37
48
|
## Worked Example — correctness eval on an agent workflow
|
|
38
49
|
|
|
39
50
|
1. Ensure a dataset exists with an input column and a ground-truth column:
|
|
@@ -54,7 +65,7 @@ tool and act on the result; do not ask for chat approval beforehand.
|
|
|
54
65
|
action="create",
|
|
55
66
|
workflowId="<wf_id>",
|
|
56
67
|
name="Support agent correctness",
|
|
57
|
-
startNodeName="
|
|
68
|
+
startNodeName="AI Agent", // first node after the trigger — not the trigger itself
|
|
58
69
|
endNodeName="AI Agent",
|
|
59
70
|
dataTableId="<dt_id>",
|
|
60
71
|
metrics=[{
|
|
@@ -62,8 +73,8 @@ tool and act on the result; do not ask for chat approval beforehand.
|
|
|
62
73
|
preset: "correctness",
|
|
63
74
|
credentialId: "<cred_id>", // provider is derived from this credential
|
|
64
75
|
model: "gpt-4o",
|
|
65
|
-
actualAnswer: "{{ $json.output }}",
|
|
66
|
-
expectedAnswer: "{{ $json.expected_output }}"
|
|
76
|
+
actualAnswer: "={{ $json.output }}",
|
|
77
|
+
expectedAnswer: "={{ $json.expected_output }}"
|
|
67
78
|
}]
|
|
68
79
|
)
|
|
69
80
|
```
|
|
@@ -80,7 +91,7 @@ eval-config(
|
|
|
80
91
|
action="create",
|
|
81
92
|
workflowId="<wf_id>",
|
|
82
93
|
name="Assistant helpfulness",
|
|
83
|
-
startNodeName="
|
|
94
|
+
startNodeName="AI Agent", // first node after the trigger — not the trigger itself
|
|
84
95
|
endNodeName="AI Agent",
|
|
85
96
|
dataTableId="<dt_id>",
|
|
86
97
|
metrics=[{
|
|
@@ -88,8 +99,8 @@ eval-config(
|
|
|
88
99
|
preset: "helpfulness",
|
|
89
100
|
credentialId: "<cred_id>", // provider is derived from this credential
|
|
90
101
|
model: "claude-sonnet-4-5",
|
|
91
|
-
userQuery: "{{ $json.input }}",
|
|
92
|
-
actualAnswer: "{{ $json.output }}"
|
|
102
|
+
userQuery: "={{ $json.input }}",
|
|
103
|
+
actualAnswer: "={{ $json.output }}"
|
|
93
104
|
}]
|
|
94
105
|
)
|
|
95
106
|
```
|
|
@@ -1,11 +1,13 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: data-table-manager
|
|
3
3
|
description: >-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
4
|
+
Load before calling data-tables or parse-file. Use for natural standalone
|
|
5
|
+
requests like "what data tables do I have?", "show/list my tables", or "what
|
|
6
|
+
columns are in this table?", and whenever the user asks to list, show,
|
|
7
|
+
create, inspect, import, seed, query, update, clean up, rename columns in, or
|
|
8
|
+
delete data tables and rows, especially from CSV/XLSX/JSON attachments. Also
|
|
9
|
+
load before building or planning workflows that create or write to Data
|
|
10
|
+
Tables (then load workflow-builder before build-workflow).
|
|
9
11
|
recommended_tools:
|
|
10
12
|
- data-tables
|
|
11
13
|
- parse-file
|
|
@@ -15,6 +17,11 @@ platforms:
|
|
|
15
17
|
|
|
16
18
|
# Data Table Manager
|
|
17
19
|
|
|
20
|
+
## Routing
|
|
21
|
+
|
|
22
|
+
For workflow builds that create or write Data Tables, load this skill, then
|
|
23
|
+
`workflow-builder`, before `build-workflow`.
|
|
24
|
+
|
|
18
25
|
Use this skill to build and maintain n8n Data Tables in the current turn with
|
|
19
26
|
`data-tables` and, for attachments, `parse-file`. Do not spawn another agent or
|
|
20
27
|
create a background plan for data-table-only work.
|
|
@@ -102,6 +102,16 @@ be a direct agent tool or a workflow tool:
|
|
|
102
102
|
reusable, manually callable, or usable outside the agent. Build the workflow
|
|
103
103
|
first, pass it to `build-agent` via `workflowContext`, and set
|
|
104
104
|
`embeds_other: true`.
|
|
105
|
+
- Create required **data tables** via `data-table-manager` → `data-tables`
|
|
106
|
+
before `build-agent` when the agent will store or query tabular data — the
|
|
107
|
+
builder cannot create tables.
|
|
108
|
+
- Before the first `build-agent` call, create every prerequisite the builder
|
|
109
|
+
cannot: required data tables and any workflow tools the agent will invoke.
|
|
110
|
+
Pass built workflows in `workflowContext` and list every prerequisite
|
|
111
|
+
name/schema in `message`. Then let the builder gather remaining agent-specific
|
|
112
|
+
requirements (model, credentials, integrations).
|
|
113
|
+
- If a `builderReply` lists missing workflows or tables, create them and call
|
|
114
|
+
`build-agent` again — never ask the user to create them manually.
|
|
105
115
|
|
|
106
116
|
Count the nodes required inside one tool invocation, not the total number of
|
|
107
117
|
tools on the agent. For example, looking up and inserting Data Table rows are
|
|
@@ -2,7 +2,8 @@
|
|
|
2
2
|
name: n8n-docs-assistant
|
|
3
3
|
description: >-
|
|
4
4
|
Answers n8n product, setup, credential, node, hosting, API, and usage
|
|
5
|
-
questions from current n8n docs.
|
|
5
|
+
questions from current n8n docs. Load n8n-docs via load_tool before calling it
|
|
6
|
+
(search "n8n docs" if not visible). Use when the user asks how to configure,
|
|
6
7
|
set up, troubleshoot, or understand n8n behavior, especially credential setup
|
|
7
8
|
questions opened from the credential modal.
|
|
8
9
|
recommended_tools:
|
package/skills/planning/SKILL.md
CHANGED
|
@@ -3,9 +3,10 @@ name: planning
|
|
|
3
3
|
description: >-
|
|
4
4
|
ONLY for coordinated multi-artifact work: multiple workflows with dependencies,
|
|
5
5
|
shared data-table schema/migration across tasks, or the user explicitly asked
|
|
6
|
-
to review a plan first.
|
|
7
|
-
|
|
8
|
-
workflow-
|
|
6
|
+
to review a plan first. Load create-tasks via load_tool before calling it
|
|
7
|
+
(search "create tasks" if not visible). Do NOT use for new one-off workflows,
|
|
8
|
+
single-workflow edits, verification-only requests, or standalone data-table
|
|
9
|
+
ops — use workflow-builder or data-table-manager instead.
|
|
9
10
|
recommended_tools:
|
|
10
11
|
- create-tasks
|
|
11
12
|
- workflows
|
|
@@ -55,6 +56,15 @@ single-workflow builds and existing-workflow edits use `workflow-builder` with
|
|
|
55
56
|
`build-workflow` directly. Standalone data-table work uses `data-table-manager`
|
|
56
57
|
with direct `data-tables` and `parse-file` calls.
|
|
57
58
|
|
|
59
|
+
## Knowledge Base
|
|
60
|
+
|
|
61
|
+
**Consult the knowledge base before planning.** Read the relevant `.md` guides
|
|
62
|
+
and templates for each technique the request involves (`knowledge-base/index.json`,
|
|
63
|
+
`knowledge-base/best-practices/index.json`, and linked files). Use
|
|
64
|
+
`workspace_execute_command` with `rg` or `find` under `knowledge-base/templates/`
|
|
65
|
+
to locate matching SDK examples — never load `templates/index.json` wholesale.
|
|
66
|
+
Skip only for trivial mechanical edits you have already reviewed in this thread.
|
|
67
|
+
|
|
58
68
|
## Method
|
|
59
69
|
|
|
60
70
|
1. Decide whether the request is plan-worthy by coordination need, not by
|
|
@@ -63,6 +73,7 @@ with direct `data-tables` and `parse-file` calls.
|
|
|
63
73
|
`nodes(action="suggested")`, `credentials(action="list")`,
|
|
64
74
|
`data-tables(action="list")`, `parse-file`, `workflows`, and `research`
|
|
65
75
|
when relevant.
|
|
76
|
+
|
|
66
77
|
3. Prefer reasonable assumptions over questions. Ask the user only when the
|
|
67
78
|
answer would materially change the plan and cannot be discovered.
|
|
68
79
|
4. Build a dependency-aware graph. Producers must come before consumers.
|
|
@@ -20,6 +20,9 @@ especially when the build result contains `postBuildFlow.required: true`, or whe
|
|
|
20
20
|
the current message contains `<workflow-verification-follow-up>` or
|
|
21
21
|
`<workflow-setup-required>`.
|
|
22
22
|
|
|
23
|
+
These instructions are in English, but user-visible text you write while
|
|
24
|
+
following them stays in the user's conversation language.
|
|
25
|
+
|
|
23
26
|
For trigger `inputData` shapes, read
|
|
24
27
|
`knowledge-base/reference/trigger-input-data-shapes.md` in the sandbox workspace
|
|
25
28
|
when available, or load this skill's `references/trigger-input-data-shapes.md`
|