@n8n/instance-ai 1.14.6 → 1.15.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 +3 -3
- package/dist/agent/apply-agent-thinking.js.map +1 -1
- package/dist/agent/computer-use-prompt.js +12 -10
- package/dist/agent/computer-use-prompt.js.map +1 -1
- package/dist/agent/instance-agent.js +5 -2
- package/dist/agent/instance-agent.js.map +1 -1
- package/dist/agent/sanitize-mcp-schemas.js +3 -3
- package/dist/agent/sanitize-mcp-schemas.js.map +1 -1
- package/dist/agent/shared-prompts.js +3 -5
- package/dist/agent/shared-prompts.js.map +1 -1
- package/dist/agent/sub-agent-debriefing.d.ts +4 -4
- package/dist/agent/system-prompt.d.ts +1 -0
- package/dist/agent/system-prompt.js +10 -5
- package/dist/agent/system-prompt.js.map +1 -1
- package/dist/build.tsbuildinfo +1 -1
- package/dist/debug/run-debug-buffer.js +4 -4
- package/dist/debug/run-debug-buffer.js.map +1 -1
- package/dist/debug/sanitize-debug-snapshot.js +6 -5
- package/dist/debug/sanitize-debug-snapshot.js.map +1 -1
- package/dist/domain-access/domain-access-tracker.d.ts +8 -4
- package/dist/domain-access/domain-access-tracker.js +12 -7
- package/dist/domain-access/domain-access-tracker.js.map +1 -1
- package/dist/domain-access/domain-gating.d.ts +4 -4
- package/dist/domain-access/domain-gating.js +5 -5
- package/dist/domain-access/domain-gating.js.map +1 -1
- package/dist/error-formatting.js +3 -3
- package/dist/error-formatting.js.map +1 -1
- package/dist/index.d.ts +3 -20
- package/dist/index.js +4 -22
- package/dist/index.js.map +1 -1
- package/dist/mcp/mcp-client-manager.d.ts +11 -2
- package/dist/mcp/mcp-client-manager.js +17 -9
- package/dist/mcp/mcp-client-manager.js.map +1 -1
- package/dist/runtime/resumable-stream-executor.js +8 -8
- package/dist/runtime/resumable-stream-executor.js.map +1 -1
- package/dist/runtime/run-state-registry.d.ts +4 -0
- package/dist/runtime/run-state-registry.js +22 -8
- package/dist/runtime/run-state-registry.js.map +1 -1
- package/dist/runtime/terminal-response-guard.js +6 -1
- package/dist/runtime/terminal-response-guard.js.map +1 -1
- package/dist/storage/terminal-outcome-storage.d.ts +4 -4
- package/dist/storage/workflow-loop-storage.d.ts +94 -94
- package/dist/stream/map-chunk.js +17 -17
- package/dist/stream/map-chunk.js.map +1 -1
- package/dist/stream/output-redaction.js +8 -6
- package/dist/stream/output-redaction.js.map +1 -1
- package/dist/stream/usage-accumulator.d.ts +18 -18
- package/dist/stream/work-summary-accumulator.d.ts +6 -6
- package/dist/tools/attachments/parse-file.tool.d.ts +18 -18
- package/dist/tools/credentials.tool.d.ts +2 -2
- package/dist/tools/data-tables.tool.js +2 -2
- package/dist/tools/data-tables.tool.js.map +1 -1
- package/dist/tools/evals/column-ref-utils.js +4 -4
- package/dist/tools/evals/column-ref-utils.js.map +1 -1
- package/dist/tools/evals/describe-metric-for-workflow.service.js +3 -3
- package/dist/tools/evals/describe-metric-for-workflow.service.js.map +1 -1
- package/dist/tools/evals/detect-tool-refs.service.js +2 -2
- package/dist/tools/evals/detect-tool-refs.service.js.map +1 -1
- package/dist/tools/evals/eval-data-requirements.service.js +10 -10
- package/dist/tools/evals/eval-data-requirements.service.js.map +1 -1
- package/dist/tools/evals/evals.tool.js +7 -8
- package/dist/tools/evals/evals.tool.js.map +1 -1
- package/dist/tools/evals/extract-rows-from-history.service.js +7 -7
- package/dist/tools/evals/extract-rows-from-history.service.js.map +1 -1
- package/dist/tools/evals/generate-sample-rows.service.js +5 -5
- package/dist/tools/evals/generate-sample-rows.service.js.map +1 -1
- package/dist/tools/evals/metric-catalog.js +3 -3
- package/dist/tools/evals/metric-catalog.js.map +1 -1
- package/dist/tools/executions.tool.js +4 -6
- package/dist/tools/executions.tool.js.map +1 -1
- package/dist/tools/filesystem/create-tools-from-mcp-server.js +6 -6
- package/dist/tools/filesystem/create-tools-from-mcp-server.js.map +1 -1
- package/dist/tools/n8n-docs/schemas.d.ts +4 -4
- package/dist/tools/nodes/node-search-engine.js +3 -3
- package/dist/tools/nodes/node-search-engine.js.map +1 -1
- package/dist/tools/nodes.tool.js +13 -30
- package/dist/tools/nodes.tool.js.map +1 -1
- package/dist/tools/orchestration/complete-checkpoint.tool.js +2 -2
- package/dist/tools/orchestration/complete-checkpoint.tool.js.map +1 -1
- package/dist/tools/orchestration/delegate.schemas.d.ts +1 -1
- package/dist/tools/orchestration/report-verification-verdict.tool.d.ts +8 -8
- package/dist/tools/orchestration/verification/analyze-result.js +4 -3
- package/dist/tools/orchestration/verification/analyze-result.js.map +1 -1
- package/dist/tools/orchestration/verify-built-workflow.tool.d.ts +2 -2
- package/dist/tools/orchestration/verify-built-workflow.tool.js +4 -7
- package/dist/tools/orchestration/verify-built-workflow.tool.js.map +1 -1
- package/dist/tools/research.tool.js +2 -2
- package/dist/tools/research.tool.js.map +1 -1
- package/dist/tools/shared/ask-user.tool.d.ts +4 -4
- package/dist/tools/shared/ask-user.tool.js +11 -21
- package/dist/tools/shared/ask-user.tool.js.map +1 -1
- package/dist/tools/tool-ids.d.ts +1 -0
- package/dist/tools/tool-ids.js +2 -1
- package/dist/tools/tool-ids.js.map +1 -1
- package/dist/tools/workflows/apply-workflow-credentials.tool.js +6 -11
- package/dist/tools/workflows/apply-workflow-credentials.tool.js.map +1 -1
- package/dist/tools/workflows/build-workflow.tool.d.ts +9 -2
- package/dist/tools/workflows/build-workflow.tool.js +171 -5
- package/dist/tools/workflows/build-workflow.tool.js.map +1 -1
- package/dist/tools/workflows/classify-node-destructiveness.service.js +4 -4
- package/dist/tools/workflows/classify-node-destructiveness.service.js.map +1 -1
- package/dist/tools/workflows/credential-url-resolver.d.ts +21 -0
- package/dist/tools/workflows/credential-url-resolver.js +79 -0
- package/dist/tools/workflows/credential-url-resolver.js.map +1 -0
- package/dist/tools/workflows/credential-utils.d.ts +28 -0
- package/dist/tools/workflows/credential-utils.js +61 -0
- package/dist/tools/workflows/credential-utils.js.map +1 -0
- package/dist/tools/workflows/detect-array-input-collapse.js +4 -4
- package/dist/tools/workflows/detect-array-input-collapse.js.map +1 -1
- package/dist/tools/workflows/detect-wrong-kind-locator.d.ts +10 -0
- package/dist/tools/workflows/detect-wrong-kind-locator.js +105 -0
- package/dist/tools/workflows/detect-wrong-kind-locator.js.map +1 -0
- package/dist/tools/workflows/generate-simulation-fixtures.service.js +3 -3
- package/dist/tools/workflows/generate-simulation-fixtures.service.js.map +1 -1
- package/dist/tools/workflows/materialize-node-type.tool.d.ts +4 -4
- package/dist/tools/workflows/setup-workflow.schema.d.ts +63 -27
- package/dist/tools/workflows/setup-workflow.service.js +26 -43
- package/dist/tools/workflows/setup-workflow.service.js.map +1 -1
- package/dist/tools/workflows/summarize-workflow.d.ts +5 -0
- package/dist/tools/workflows/summarize-workflow.js +114 -0
- package/dist/tools/workflows/summarize-workflow.js.map +1 -0
- package/dist/tools/workflows/workflow-json-utils.js +6 -5
- package/dist/tools/workflows/workflow-json-utils.js.map +1 -1
- package/dist/tools/workflows/workflow-source-compiler.js +48 -9
- package/dist/tools/workflows/workflow-source-compiler.js.map +1 -1
- package/dist/tools/workflows/workflow-validation-warnings.js +5 -1
- package/dist/tools/workflows/workflow-validation-warnings.js.map +1 -1
- package/dist/tools/workflows.tool.d.ts +1 -1
- package/dist/tools/workflows.tool.js +47 -22
- package/dist/tools/workflows.tool.js.map +1 -1
- package/dist/tracing/langsmith-tracing.d.ts +5 -1
- package/dist/tracing/langsmith-tracing.js +66 -13
- package/dist/tracing/langsmith-tracing.js.map +1 -1
- package/dist/tracing/trace-payloads.d.ts +1 -0
- package/dist/tracing/trace-payloads.js +46 -29
- package/dist/tracing/trace-payloads.js.map +1 -1
- package/dist/types.d.ts +16 -1
- package/dist/types.js.map +1 -1
- package/dist/utils/stream-helpers.js +5 -5
- package/dist/utils/stream-helpers.js.map +1 -1
- package/dist/workflow-builder/index.d.ts +0 -1
- package/dist/workflow-builder/index.js +1 -6
- package/dist/workflow-builder/index.js.map +1 -1
- package/dist/workflow-loop/index.d.ts +0 -1
- package/dist/workflow-loop/index.js +1 -3
- package/dist/workflow-loop/index.js.map +1 -1
- package/dist/workflow-loop/workflow-loop-state.d.ts +112 -112
- package/dist/workspace/snapshot-image-context.js +24 -11
- package/dist/workspace/snapshot-image-context.js.map +1 -1
- package/dist/workspace/snapshot-manager.d.ts +0 -1
- package/dist/workspace/snapshot-manager.js +0 -7
- package/dist/workspace/snapshot-manager.js.map +1 -1
- package/dist/workspace/template-telemetry.js +5 -4
- package/dist/workspace/template-telemetry.js.map +1 -1
- package/dist/workspace/workspace-manifest.js +2 -2
- package/dist/workspace/workspace-manifest.js.map +1 -1
- package/knowledge-base/reference/workflow-builder-guardrails.md +33 -0
- package/package.json +15 -13
- package/skills/post-build-flow/SKILL.md +106 -10
- package/skills/workflow-builder/SKILL.md +185 -228
- package/skills/workflow-builder/references/compositional-workflows.md +66 -0
- package/skills/workflow-builder/references/error-workflows.md +35 -0
- package/dist/tools/nodes/suggested-nodes-data.d.ts +0 -11
- package/dist/tools/nodes/suggested-nodes-data.js +0 -333
- package/dist/tools/nodes/suggested-nodes-data.js.map +0 -1
- package/dist/workflow-builder/sdk-prompt-sections.d.ts +0 -1
- package/dist/workflow-builder/sdk-prompt-sections.js +0 -9
- package/dist/workflow-builder/sdk-prompt-sections.js.map +0 -1
- package/dist/workflow-loop/terminal-remediation-guard.d.ts +0 -6
- package/dist/workflow-loop/terminal-remediation-guard.js +0 -18
- package/dist/workflow-loop/terminal-remediation-guard.js.map +0 -1
|
@@ -0,0 +1,114 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
+
exports.PARAMETERS_INLINE_LIMIT_BYTES = exports.STRUCTURE_ONLY_NOTE = void 0;
|
|
37
|
+
exports.isSmallPayload = isSmallPayload;
|
|
38
|
+
exports.summarizeWorkflowStructure = summarizeWorkflowStructure;
|
|
39
|
+
const is_record_1 = require("@n8n/utils/is-record");
|
|
40
|
+
const n8n_workflow_1 = require("n8n-workflow");
|
|
41
|
+
exports.STRUCTURE_ONLY_NOTE = 'Node parameters omitted to keep context small. Pass full: true to include them in one call, or use get-json / get-as-code (optionally with versionId) for parameter-level detail.';
|
|
42
|
+
exports.PARAMETERS_INLINE_LIMIT_BYTES = 4096;
|
|
43
|
+
function isSmallPayload(detail) {
|
|
44
|
+
return JSON.stringify(detail).length <= exports.PARAMETERS_INLINE_LIMIT_BYTES;
|
|
45
|
+
}
|
|
46
|
+
const CONNECTION_TYPES = new Set(Object.values(n8n_workflow_1.NodeConnectionTypes));
|
|
47
|
+
function isConnection(value) {
|
|
48
|
+
return ((0, is_record_1.isRecord)(value) &&
|
|
49
|
+
typeof value.node === 'string' &&
|
|
50
|
+
typeof value.type === 'string' &&
|
|
51
|
+
CONNECTION_TYPES.has(value.type) &&
|
|
52
|
+
typeof value.index === 'number');
|
|
53
|
+
}
|
|
54
|
+
function toConnections(connections) {
|
|
55
|
+
const result = {};
|
|
56
|
+
for (const [from, byType] of Object.entries(connections)) {
|
|
57
|
+
if (!(0, is_record_1.isRecord)(byType))
|
|
58
|
+
continue;
|
|
59
|
+
for (const [connectionType, outputs] of Object.entries(byType)) {
|
|
60
|
+
if (!Array.isArray(outputs))
|
|
61
|
+
continue;
|
|
62
|
+
(result[from] ??= {})[connectionType] = outputs.map((targets) => Array.isArray(targets) ? targets.filter(isConnection) : null);
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
return result;
|
|
66
|
+
}
|
|
67
|
+
function summarizeConnections(connections) {
|
|
68
|
+
const edges = [];
|
|
69
|
+
for (const [from, byType] of Object.entries(connections)) {
|
|
70
|
+
if (!(0, is_record_1.isRecord)(byType))
|
|
71
|
+
continue;
|
|
72
|
+
for (const [connectionType, outputs] of Object.entries(byType)) {
|
|
73
|
+
if (!Array.isArray(outputs))
|
|
74
|
+
continue;
|
|
75
|
+
outputs.forEach((targets, outputIndex) => {
|
|
76
|
+
if (!Array.isArray(targets))
|
|
77
|
+
return;
|
|
78
|
+
for (const target of targets) {
|
|
79
|
+
if (!(0, is_record_1.isRecord)(target) || typeof target.node !== 'string')
|
|
80
|
+
continue;
|
|
81
|
+
const typeLabel = connectionType === 'main' ? '' : `-(${connectionType})`;
|
|
82
|
+
const branchLabel = outputIndex > 0 ? `[${outputIndex}]` : '';
|
|
83
|
+
edges.push(`${from} ${typeLabel}${branchLabel}→ ${target.node}`);
|
|
84
|
+
}
|
|
85
|
+
});
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
return edges;
|
|
89
|
+
}
|
|
90
|
+
async function summarizeWorkflowStructure(name, nodes, connections) {
|
|
91
|
+
try {
|
|
92
|
+
const { generateWorkflowCode } = await Promise.resolve().then(() => __importStar(require('@n8n/workflow-sdk')));
|
|
93
|
+
return generateWorkflowCode({
|
|
94
|
+
name,
|
|
95
|
+
nodes: nodes.map((node) => ({
|
|
96
|
+
id: node.name,
|
|
97
|
+
name: node.name,
|
|
98
|
+
type: node.type,
|
|
99
|
+
typeVersion: node.typeVersion ?? 1,
|
|
100
|
+
position: [node.position[0] ?? 0, node.position[1] ?? 0],
|
|
101
|
+
})),
|
|
102
|
+
connections: toConnections(connections),
|
|
103
|
+
});
|
|
104
|
+
}
|
|
105
|
+
catch {
|
|
106
|
+
return [
|
|
107
|
+
'Nodes:',
|
|
108
|
+
...nodes.map((node) => `- ${node.name} (${node.type})`),
|
|
109
|
+
'Connections:',
|
|
110
|
+
...summarizeConnections(connections).map((edge) => `- ${edge}`),
|
|
111
|
+
].join('\n');
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
//# sourceMappingURL=summarize-workflow.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"summarize-workflow.js","sourceRoot":"","sources":["../../../src/tools/workflows/summarize-workflow.ts"],"names":[],"mappings":"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"}
|
|
@@ -6,7 +6,8 @@ exports.getReferencedWorkflowIds = getReferencedWorkflowIds;
|
|
|
6
6
|
exports.ensureWebhookIds = ensureWebhookIds;
|
|
7
7
|
exports.preserveExistingNodeGroupIds = preserveExistingNodeGroupIds;
|
|
8
8
|
exports.preserveExistingSetupValues = preserveExistingSetupValues;
|
|
9
|
-
const
|
|
9
|
+
const is_record_1 = require("@n8n/utils/is-record");
|
|
10
|
+
const placeholder_1 = require("@n8n/utils/placeholder");
|
|
10
11
|
const node_crypto_1 = require("node:crypto");
|
|
11
12
|
const KNOWN_MOCKABLE_TRIGGER_TYPES = new Set([
|
|
12
13
|
'n8n-nodes-base.manualTrigger',
|
|
@@ -32,7 +33,7 @@ function isTriggerNodeType(nodeType) {
|
|
|
32
33
|
return nodeType.endsWith('Trigger') || nodeType.endsWith('trigger');
|
|
33
34
|
}
|
|
34
35
|
function extractWorkflowIdParameter(value) {
|
|
35
|
-
const rawValue = (0,
|
|
36
|
+
const rawValue = (0, is_record_1.isRecord)(value) ? value.value : value;
|
|
36
37
|
if (typeof rawValue !== 'string')
|
|
37
38
|
return undefined;
|
|
38
39
|
const workflowId = rawValue.trim();
|
|
@@ -49,7 +50,7 @@ function getReferencedWorkflowIds(json) {
|
|
|
49
50
|
for (const node of json.nodes ?? []) {
|
|
50
51
|
if (node.disabled || node.type !== 'n8n-nodes-base.executeWorkflow')
|
|
51
52
|
continue;
|
|
52
|
-
const parameters = (0,
|
|
53
|
+
const parameters = (0, is_record_1.isRecord)(node.parameters) ? node.parameters : {};
|
|
53
54
|
if (shouldSkipReferencedWorkflow(parameters.source))
|
|
54
55
|
continue;
|
|
55
56
|
const workflowId = extractWorkflowIdParameter(parameters.workflowId);
|
|
@@ -128,7 +129,7 @@ function isEmptyResourceLocator(value) {
|
|
|
128
129
|
return (locatorValue === undefined || (typeof locatorValue === 'string' && locatorValue.trim() === ''));
|
|
129
130
|
}
|
|
130
131
|
function hasUnresolvedSetupValue(value) {
|
|
131
|
-
if ((0,
|
|
132
|
+
if ((0, placeholder_1.findPlaceholderDetails)(value).length > 0)
|
|
132
133
|
return true;
|
|
133
134
|
if (isEmptyResourceLocator(value))
|
|
134
135
|
return true;
|
|
@@ -144,7 +145,7 @@ function preserveSetupValue(nextValue, existingValue) {
|
|
|
144
145
|
if (existingValue === undefined || hasUnresolvedSetupValue(existingValue))
|
|
145
146
|
return nextValue;
|
|
146
147
|
if (typeof nextValue === 'string') {
|
|
147
|
-
return (0,
|
|
148
|
+
return (0, placeholder_1.isPlaceholderString)(nextValue) ? cloneWorkflowValue(existingValue) : nextValue;
|
|
148
149
|
}
|
|
149
150
|
if (isResourceLocator(nextValue)) {
|
|
150
151
|
return isResourceLocator(existingValue) ? cloneWorkflowValue(existingValue) : nextValue;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"workflow-json-utils.js","sourceRoot":"","sources":["../../../src/tools/workflows/workflow-json-utils.ts"],"names":[],"mappings":";;
|
|
1
|
+
{"version":3,"file":"workflow-json-utils.js","sourceRoot":"","sources":["../../../src/tools/workflows/workflow-json-utils.ts"],"names":[],"mappings":";;AAsBA,8DAEC;AAED,8CAIC;AAgBD,4DAiBC;AAMD,4CA4BC;AAQD,oEA2BC;AA+FD,kEAgCC;AAnQD,oDAAgD;AAChD,wDAAqF;AAErF,6CAAyC;AAIzC,MAAM,4BAA4B,GAAG,IAAI,GAAG,CAAC;IAC5C,8BAA8B;IAC9B,wBAAwB;IACxB,4BAA4B;IAC5B,gCAAgC;IAChC,sCAAsC;CACtC,CAAC,CAAC;AAEH,MAAM,kBAAkB,GAAG,IAAI,GAAG,CAAC;IAClC,wBAAwB;IACxB,4BAA4B;IAC5B,qCAAqC;IACrC,sCAAsC;CACtC,CAAC,CAAC;AAEH,SAAgB,yBAAyB,CAAC,QAA4B;IACrE,OAAO,QAAQ,KAAK,SAAS,IAAI,4BAA4B,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;AAC7E,CAAC;AAED,SAAgB,iBAAiB,CAAC,QAA4B;IAC7D,IAAI,CAAC,QAAQ;QAAE,OAAO,KAAK,CAAC;IAC5B,IAAI,yBAAyB,CAAC,QAAQ,CAAC;QAAE,OAAO,IAAI,CAAC;IACrD,OAAO,QAAQ,CAAC,QAAQ,CAAC,SAAS,CAAC,IAAI,QAAQ,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;AACrE,CAAC;AAED,SAAS,0BAA0B,CAAC,KAAc;IACjD,MAAM,QAAQ,GAAG,IAAA,oBAAQ,EAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC;IACvD,IAAI,OAAO,QAAQ,KAAK,QAAQ;QAAE,OAAO,SAAS,CAAC;IAEnD,MAAM,UAAU,GAAG,QAAQ,CAAC,IAAI,EAAE,CAAC;IACnC,IAAI,UAAU,KAAK,EAAE,IAAI,UAAU,CAAC,UAAU,CAAC,GAAG,CAAC;QAAE,OAAO,SAAS,CAAC;IAEtE,OAAO,UAAU,CAAC;AACnB,CAAC;AAED,SAAS,4BAA4B,CAAC,MAAe;IACpD,OAAO,OAAO,MAAM,KAAK,QAAQ,IAAI,MAAM,KAAK,UAAU,CAAC;AAC5D,CAAC;AAED,SAAgB,wBAAwB,CAAC,IAAkB;IAC1D,MAAM,qBAAqB,GAAa,EAAE,CAAC;IAC3C,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAC;IAE/B,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,KAAK,IAAI,EAAE,EAAE,CAAC;QACrC,IAAI,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,IAAI,KAAK,gCAAgC;YAAE,SAAS;QAC9E,MAAM,UAAU,GAAG,IAAA,oBAAQ,EAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,CAAC;QACpE,IAAI,4BAA4B,CAAC,UAAU,CAAC,MAAM,CAAC;YAAE,SAAS;QAE9D,MAAM,UAAU,GAAG,0BAA0B,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC;QACrE,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC;YAAE,SAAS;QAElD,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;QACrB,qBAAqB,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;IACxC,CAAC;IAED,OAAO,qBAAqB,CAAC;AAC9B,CAAC;AAMM,KAAK,UAAU,gBAAgB,CACrC,IAAkB,EAClB,UAA8B,EAC9B,GAAsB;IAEtB,MAAM,kBAAkB,GAAG,IAAI,GAAG,EAAkB,CAAC;IACrD,IAAI,UAAU,EAAE,CAAC;QAChB,IAAI,CAAC;YACJ,MAAM,QAAQ,GAAG,MAAM,GAAG,CAAC,eAAe,CAAC,iBAAiB,CAAC,UAAU,CAAC,CAAC;YACzE,KAAK,MAAM,IAAI,IAAI,QAAQ,CAAC,KAAK,IAAI,EAAE,EAAE,CAAC;gBACzC,IAAI,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;oBACjC,kBAAkB,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC;gBACnD,CAAC;YACF,CAAC;QACF,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YAChB,MAAM,OAAO,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;YACvE,MAAM,IAAI,KAAK,CACd,oCAAoC,UAAU,6BAA6B,OAAO,EAAE,EACpF,EAAE,KAAK,EAAE,KAAK,EAAE,CAChB,CAAC;QACH,CAAC;IACF,CAAC;IAED,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,KAAK,IAAI,EAAE,EAAE,CAAC;QACrC,IAAI,kBAAkB,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC;YAC1D,IAAI,CAAC,SAAS,GAAG,CAAC,IAAI,CAAC,IAAI,IAAI,kBAAkB,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,IAAA,wBAAU,GAAE,CAAC;QACnF,CAAC;IACF,CAAC;AACF,CAAC;AAQM,KAAK,UAAU,4BAA4B,CACjD,IAAkB,EAClB,UAA8B,EAC9B,GAAsB;IAEtB,IAAI,CAAC,UAAU,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,MAAM;QAAE,OAAO;IAEpD,IAAI,sBAA2C,CAAC;IAChD,IAAI,CAAC;QACJ,MAAM,QAAQ,GAAG,MAAM,GAAG,CAAC,eAAe,CAAC,iBAAiB,CAAC,UAAU,CAAC,CAAC;QACzE,sBAAsB,GAAG,IAAI,GAAG,CAC/B,CAAC,QAAQ,CAAC,UAAU,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,EAAoB,EAAE,CAAC,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,EAAE,CAAC,CAAC,CACpF,CAAC;IACH,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QAChB,MAAM,OAAO,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QACvE,MAAM,IAAI,KAAK,CACd,oCAAoC,UAAU,gCAAgC,OAAO,EAAE,EACvF,EAAE,KAAK,EAAE,KAAK,EAAE,CAChB,CAAC;IACH,CAAC;IAED,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;QACrC,MAAM,UAAU,GAAG,sBAAsB,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAC1D,IAAI,UAAU,EAAE,CAAC;YAChB,KAAK,CAAC,EAAE,GAAG,UAAU,CAAC;QACvB,CAAC;IACF,CAAC;AACF,CAAC;AAID,SAAS,YAAY,CAAC,KAA6B;IAClD,OAAO,KAAK,KAAK,IAAI,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;AAC7E,CAAC;AAED,SAAS,wBAAwB,CAChC,KAA6B;IAE7B,OAAO,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;AAC7B,CAAC;AAED,SAAS,kBAAkB,CAAC,KAA6B;IACxD,IAAI,wBAAwB,CAAC,KAAK,CAAC;QAAE,OAAO,KAAK,CAAC,GAAG,CAAC,kBAAkB,CAAC,CAAC;IAC1E,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC;QAAE,OAAO,KAAK,CAAC;IAEvC,MAAM,MAAM,GAAgB,EAAE,CAAC;IAC/B,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;QACtC,MAAM,CAAC,GAAG,CAAC,GAAG,kBAAkB,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC;IAC9C,CAAC;IACD,OAAO,MAAM,CAAC;AACf,CAAC;AAED,SAAS,iBAAiB,CAAC,KAA6B;IACvD,OAAO,YAAY,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,IAAI,CAAC;AACnD,CAAC;AAED,SAAS,sBAAsB,CAAC,KAA6B;IAC5D,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC;QAAE,OAAO,KAAK,CAAC;IAC5C,MAAM,YAAY,GAAG,KAAK,CAAC,KAAK,CAAC;IACjC,OAAO,CACN,YAAY,KAAK,SAAS,IAAI,CAAC,OAAO,YAAY,KAAK,QAAQ,IAAI,YAAY,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC,CAC9F,CAAC;AACH,CAAC;AAED,SAAS,uBAAuB,CAAC,KAA6B;IAC7D,IAAI,IAAA,oCAAsB,EAAC,KAAK,CAAC,CAAC,MAAM,GAAG,CAAC;QAAE,OAAO,IAAI,CAAC;IAC1D,IAAI,sBAAsB,CAAC,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IAC/C,IAAI,wBAAwB,CAAC,KAAK,CAAC;QAAE,OAAO,KAAK,CAAC,IAAI,CAAC,uBAAuB,CAAC,CAAC;IAChF,IAAI,YAAY,CAAC,KAAK,CAAC;QAAE,OAAO,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,uBAAuB,CAAC,CAAC;IACnF,OAAO,KAAK,CAAC;AACd,CAAC;AAED,SAAS,kBAAkB,CAC1B,SAAiC,EACjC,aAAqC;IAErC,IAAI,CAAC,uBAAuB,CAAC,SAAS,CAAC;QAAE,OAAO,SAAS,CAAC;IAC1D,IAAI,aAAa,KAAK,SAAS,IAAI,uBAAuB,CAAC,aAAa,CAAC;QAAE,OAAO,SAAS,CAAC;IAE5F,IAAI,OAAO,SAAS,KAAK,QAAQ,EAAE,CAAC;QACnC,OAAO,IAAA,iCAAmB,EAAC,SAAS,CAAC,CAAC,CAAC,CAAC,kBAAkB,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IACvF,CAAC;IAED,IAAI,iBAAiB,CAAC,SAAS,CAAC,EAAE,CAAC;QAClC,OAAO,iBAAiB,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,kBAAkB,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IACzF,CAAC;IAED,IAAI,wBAAwB,CAAC,SAAS,CAAC,EAAE,CAAC;QACzC,IAAI,CAAC,wBAAwB,CAAC,aAAa,CAAC;YAAE,OAAO,SAAS,CAAC;QAE/D,OAAO,SAAS,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC,kBAAkB,CAAC,IAAI,EAAE,aAAa,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IACvF,CAAC;IAED,IAAI,YAAY,CAAC,SAAS,CAAC,EAAE,CAAC;QAC7B,IAAI,CAAC,YAAY,CAAC,aAAa,CAAC;YAAE,OAAO,SAAS,CAAC;QAEnD,MAAM,SAAS,GAAgB,EAAE,CAAC;QAClC,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC;YAC1C,SAAS,CAAC,GAAG,CAAC,GAAG,kBAAkB,CAAC,SAAS,CAAC,GAAG,CAAC,EAAE,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC;QACzE,CAAC;QACD,OAAO,SAAS,CAAC;IAClB,CAAC;IAED,OAAO,SAAS,CAAC;AAClB,CAAC;AAED,SAAS,uBAAuB,CAC/B,cAA2B,EAC3B,kBAA+B;IAE/B,MAAM,SAAS,GAAgB,EAAE,CAAC;IAClC,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,cAAc,CAAC,EAAE,CAAC;QAC/C,SAAS,CAAC,GAAG,CAAC,GAAG,kBAAkB,CAAC,cAAc,CAAC,GAAG,CAAC,EAAE,kBAAkB,CAAC,GAAG,CAAC,CAAC,CAAC;IACnF,CAAC;IACD,OAAO,SAAS,CAAC;AAClB,CAAC;AAOM,KAAK,UAAU,2BAA2B,CAChD,IAAkB,EAClB,UAA8B,EAC9B,GAAsB;IAEtB,IAAI,CAAC,UAAU;QAAE,OAAO;IAExB,IAAI,QAAsB,CAAC;IAC3B,IAAI,CAAC;QACJ,QAAQ,GAAG,MAAM,GAAG,CAAC,eAAe,CAAC,iBAAiB,CAAC,UAAU,CAAC,CAAC;IACpE,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QAChB,MAAM,OAAO,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QACvE,MAAM,IAAI,KAAK,CACd,oCAAoC,UAAU,8BAA8B,OAAO,EAAE,EACrF,EAAE,KAAK,EAAE,KAAK,EAAE,CAChB,CAAC;IACH,CAAC;IAED,MAAM,0BAA0B,GAAG,IAAI,GAAG,CACzC,CAAC,QAAQ,CAAC,KAAK,IAAI,EAAE,CAAC;SACpB,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,CAAC;SACxC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,EAAE,EAAE,IAAI,CAAC,CAAC,CACpD,CAAC;IAEF,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,KAAK,IAAI,EAAE,EAAE,CAAC;QACrC,IAAI,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,UAAU;YAAE,SAAS;QAE3D,MAAM,YAAY,GAAG,0BAA0B,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;QACjF,IAAI,CAAC,YAAY,EAAE,UAAU;YAAE,SAAS;QAExC,IAAI,CAAC,UAAU,GAAG,uBAAuB,CAAC,IAAI,CAAC,UAAU,EAAE,YAAY,CAAC,UAAU,CAAC,CAAC;IACrF,CAAC;AACF,CAAC"}
|
|
@@ -3,17 +3,19 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.isWorkflowJsonSourceFile = isWorkflowJsonSourceFile;
|
|
4
4
|
exports.compileWorkflowSource = compileWorkflowSource;
|
|
5
5
|
const sandbox_1 = require("@n8n/agents/sandbox");
|
|
6
|
-
const
|
|
6
|
+
const is_record_1 = require("@n8n/utils/is-record");
|
|
7
7
|
const workflow_sdk_1 = require("@n8n/workflow-sdk");
|
|
8
|
+
const credential_url_resolver_1 = require("./credential-url-resolver");
|
|
8
9
|
const detect_array_input_collapse_1 = require("./detect-array-input-collapse");
|
|
10
|
+
const detect_wrong_kind_locator_1 = require("./detect-wrong-kind-locator");
|
|
9
11
|
const workflow_validation_warnings_1 = require("./workflow-validation-warnings");
|
|
10
12
|
const sandbox_fs_1 = require("../../workspace/sandbox-fs");
|
|
11
13
|
const workspace_paths_1 = require("../../workspace/workspace-paths");
|
|
12
14
|
function isWorkflowJson(value) {
|
|
13
|
-
return ((0,
|
|
15
|
+
return ((0, is_record_1.isRecord)(value) &&
|
|
14
16
|
typeof value.name === 'string' &&
|
|
15
17
|
Array.isArray(value.nodes) &&
|
|
16
|
-
(0,
|
|
18
|
+
(0, is_record_1.isRecord)(value.connections));
|
|
17
19
|
}
|
|
18
20
|
function isTypeScriptWorkflowSource(filePath) {
|
|
19
21
|
const normalized = filePath.toLowerCase();
|
|
@@ -24,7 +26,7 @@ function isWorkflowJsonSourceFile(filePath) {
|
|
|
24
26
|
}
|
|
25
27
|
function normalizeWorkflowNodeParameters(json) {
|
|
26
28
|
for (const node of json.nodes ?? []) {
|
|
27
|
-
if (!(0,
|
|
29
|
+
if (!(0, is_record_1.isRecord)(node.parameters)) {
|
|
28
30
|
node.parameters = {};
|
|
29
31
|
}
|
|
30
32
|
}
|
|
@@ -39,6 +41,7 @@ function validateCompiledWorkflow(json, context, compilerWarnings = []) {
|
|
|
39
41
|
(0, workflow_validation_warnings_1.collectValidationIssues)(schemaValidation.errors, warnings);
|
|
40
42
|
(0, workflow_validation_warnings_1.collectValidationIssues)(schemaValidation.warnings, warnings);
|
|
41
43
|
warnings.push(...(0, detect_array_input_collapse_1.detectArrayInputCollapse)(json));
|
|
44
|
+
warnings.push(...(0, detect_wrong_kind_locator_1.detectWrongKindLocatorValues)(json, context.nodeTypesProvider));
|
|
42
45
|
return warnings;
|
|
43
46
|
}
|
|
44
47
|
function parseWorkflowJsonSource(source) {
|
|
@@ -73,7 +76,7 @@ function parseSandboxWarnings(value) {
|
|
|
73
76
|
return [];
|
|
74
77
|
const warnings = [];
|
|
75
78
|
for (const warning of value) {
|
|
76
|
-
if (!(0,
|
|
79
|
+
if (!(0, is_record_1.isRecord)(warning))
|
|
77
80
|
continue;
|
|
78
81
|
if (typeof warning.code !== 'string' || typeof warning.message !== 'string')
|
|
79
82
|
continue;
|
|
@@ -91,13 +94,13 @@ function parseSandboxErrors(value) {
|
|
|
91
94
|
return value.filter((error) => typeof error === 'string');
|
|
92
95
|
}
|
|
93
96
|
function isPinDataItem(value) {
|
|
94
|
-
return (0,
|
|
97
|
+
return (0, is_record_1.isRecord)(value);
|
|
95
98
|
}
|
|
96
99
|
function isPinDataItems(value) {
|
|
97
100
|
return Array.isArray(value) && value.every(isPinDataItem);
|
|
98
101
|
}
|
|
99
102
|
function parseSandboxDeclaredOutputFixtures(value) {
|
|
100
|
-
if (!(0,
|
|
103
|
+
if (!(0, is_record_1.isRecord)(value))
|
|
101
104
|
return undefined;
|
|
102
105
|
const fixtures = {};
|
|
103
106
|
for (const [nodeName, items] of Object.entries(value)) {
|
|
@@ -123,7 +126,7 @@ function parseSandboxBuildOutput(stdout) {
|
|
|
123
126
|
catch {
|
|
124
127
|
return undefined;
|
|
125
128
|
}
|
|
126
|
-
if (!(0,
|
|
129
|
+
if (!(0, is_record_1.isRecord)(parsed) || typeof parsed.success !== 'boolean')
|
|
127
130
|
return undefined;
|
|
128
131
|
return {
|
|
129
132
|
success: parsed.success,
|
|
@@ -209,6 +212,40 @@ async function compileTypeScriptWorkflowSource(context, filePath) {
|
|
|
209
212
|
compiler: 'sandbox-tsx',
|
|
210
213
|
};
|
|
211
214
|
}
|
|
215
|
+
const HTTP_REQUEST_NODE_TYPE = 'n8n-nodes-base.httpRequest';
|
|
216
|
+
async function collectCredentialResolutionWarnings(json, context) {
|
|
217
|
+
const hosts = await context.credentialService.listHttpCredentialHosts?.();
|
|
218
|
+
if (!hosts?.length)
|
|
219
|
+
return [];
|
|
220
|
+
const index = (0, credential_url_resolver_1.buildCredentialHostIndex)(hosts);
|
|
221
|
+
const warnings = [];
|
|
222
|
+
for (const node of json.nodes ?? []) {
|
|
223
|
+
if (node.type !== HTTP_REQUEST_NODE_TYPE)
|
|
224
|
+
continue;
|
|
225
|
+
const params = node.parameters;
|
|
226
|
+
if (!(0, is_record_1.isRecord)(params) || params.authentication !== 'genericCredentialType')
|
|
227
|
+
continue;
|
|
228
|
+
const url = typeof params.url === 'string' ? params.url : '';
|
|
229
|
+
if (!url)
|
|
230
|
+
continue;
|
|
231
|
+
const resolution = (0, credential_url_resolver_1.resolveCredentialByUrl)(url, index);
|
|
232
|
+
if (resolution.status === 'match') {
|
|
233
|
+
warnings.push({
|
|
234
|
+
code: 'PREFER_PREDEFINED_CREDENTIAL',
|
|
235
|
+
nodeName: node.name,
|
|
236
|
+
message: `This request targets a service with a dedicated n8n credential ("${resolution.credentialType}"). Use authentication: "predefinedCredentialType" with nodeCredentialType: "${resolution.credentialType}" instead of a generic credential.`,
|
|
237
|
+
});
|
|
238
|
+
}
|
|
239
|
+
else if (resolution.status === 'ambiguous') {
|
|
240
|
+
warnings.push({
|
|
241
|
+
code: 'PREFER_PREDEFINED_CREDENTIAL',
|
|
242
|
+
nodeName: node.name,
|
|
243
|
+
message: `This request targets a service with dedicated n8n credentials (${resolution.candidates.join(', ')}). Prefer authentication: "predefinedCredentialType" with the matching nodeCredentialType.`,
|
|
244
|
+
});
|
|
245
|
+
}
|
|
246
|
+
}
|
|
247
|
+
return warnings;
|
|
248
|
+
}
|
|
212
249
|
async function compileWorkflowSource(context, filePath, source) {
|
|
213
250
|
let result;
|
|
214
251
|
if (isWorkflowJsonSourceFile(filePath)) {
|
|
@@ -230,9 +267,11 @@ async function compileWorkflowSource(context, filePath, source) {
|
|
|
230
267
|
}
|
|
231
268
|
if (!result.success)
|
|
232
269
|
return result;
|
|
270
|
+
const warnings = validateCompiledWorkflow(result.workflow, context, result.warnings);
|
|
271
|
+
const credentialWarnings = await collectCredentialResolutionWarnings(result.workflow, context);
|
|
233
272
|
return {
|
|
234
273
|
...result,
|
|
235
|
-
warnings:
|
|
274
|
+
warnings: [...warnings, ...credentialWarnings],
|
|
236
275
|
};
|
|
237
276
|
}
|
|
238
277
|
//# sourceMappingURL=workflow-source-compiler.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"workflow-source-compiler.js","sourceRoot":"","sources":["../../../src/tools/workflows/workflow-source-compiler.ts"],"names":[],"mappings":";;
|
|
1
|
+
{"version":3,"file":"workflow-source-compiler.js","sourceRoot":"","sources":["../../../src/tools/workflows/workflow-source-compiler.ts"],"names":[],"mappings":"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"}
|
|
@@ -12,7 +12,11 @@ function collectValidationIssues(issues, allWarnings) {
|
|
|
12
12
|
}
|
|
13
13
|
}
|
|
14
14
|
function partitionWarnings(warnings) {
|
|
15
|
-
const informationalCodes = new Set([
|
|
15
|
+
const informationalCodes = new Set([
|
|
16
|
+
'MISSING_TRIGGER',
|
|
17
|
+
'DISCONNECTED_NODE',
|
|
18
|
+
'auto_imported_sdk_symbols',
|
|
19
|
+
]);
|
|
16
20
|
const errors = [];
|
|
17
21
|
const informational = [];
|
|
18
22
|
for (const warning of warnings) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"workflow-validation-warnings.js","sourceRoot":"","sources":["../../../src/tools/workflows/workflow-validation-warnings.ts"],"names":[],"mappings":";;AAMA,0DAWC;AAED,
|
|
1
|
+
{"version":3,"file":"workflow-validation-warnings.js","sourceRoot":"","sources":["../../../src/tools/workflows/workflow-validation-warnings.ts"],"names":[],"mappings":";;AAMA,0DAWC;AAED,8CAuBC;AApCD,SAAgB,uBAAuB,CACtC,MAAmE,EACnE,WAAgC;IAEhC,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;QAC5B,WAAW,CAAC,IAAI,CAAC;YAChB,IAAI,EAAE,KAAK,CAAC,IAAI;YAChB,OAAO,EAAE,KAAK,CAAC,OAAO;YACtB,QAAQ,EAAE,KAAK,CAAC,QAAQ;SACxB,CAAC,CAAC;IACJ,CAAC;AACF,CAAC;AAED,SAAgB,iBAAiB,CAAC,QAA6B;IAK9D,MAAM,kBAAkB,GAAG,IAAI,GAAG,CAAC;QAClC,iBAAiB;QACjB,mBAAmB;QACnB,2BAA2B;KAC3B,CAAC,CAAC;IAEH,MAAM,MAAM,GAAwB,EAAE,CAAC;IACvC,MAAM,aAAa,GAAwB,EAAE,CAAC;IAE9C,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;QAChC,IAAI,kBAAkB,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;YAC1C,aAAa,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAC7B,CAAC;aAAM,CAAC;YACP,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACtB,CAAC;IACF,CAAC;IAED,OAAO,EAAE,MAAM,EAAE,aAAa,EAAE,CAAC;AAClC,CAAC"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import type { InstanceAiContext } from '../types';
|
|
2
|
-
export type WorkflowAction = 'list' | 'get' | 'get-json' | 'get-as-code' | 'delete' | 'unarchive' | 'setup' | 'validate' | 'update' | 'publish' | 'unpublish' | 'list-versions' | '
|
|
2
|
+
export type WorkflowAction = 'list' | 'get' | 'get-json' | 'get-as-code' | 'delete' | 'unarchive' | 'setup' | 'validate' | 'update' | 'publish' | 'unpublish' | 'list-versions' | 'restore-version' | 'update-version';
|
|
3
3
|
export interface WorkflowsToolOptions {
|
|
4
4
|
allowedActions?: readonly WorkflowAction[];
|
|
5
5
|
descriptionPrefix?: string;
|
|
@@ -35,13 +35,14 @@ var __importStar = (this && this.__importStar) || (function () {
|
|
|
35
35
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
36
|
exports.createWorkflowsTool = createWorkflowsTool;
|
|
37
37
|
const agents_1 = require("@n8n/agents");
|
|
38
|
-
const
|
|
38
|
+
const is_record_1 = require("@n8n/utils/is-record");
|
|
39
39
|
const nanoid_1 = require("nanoid");
|
|
40
40
|
const zod_1 = require("zod");
|
|
41
41
|
const sanitize_mcp_schemas_1 = require("../agent/sanitize-mcp-schemas");
|
|
42
42
|
const format_timestamp_1 = require("../utils/format-timestamp");
|
|
43
43
|
const setup_workflow_schema_1 = require("./workflows/setup-workflow.schema");
|
|
44
44
|
const setup_workflow_service_1 = require("./workflows/setup-workflow.service");
|
|
45
|
+
const summarize_workflow_1 = require("./workflows/summarize-workflow");
|
|
45
46
|
const validate_workflow_service_1 = require("./workflows/validate-workflow.service");
|
|
46
47
|
const workflow_json_utils_1 = require("./workflows/workflow-json-utils");
|
|
47
48
|
const listAction = zod_1.z.object({
|
|
@@ -62,20 +63,27 @@ const listAction = zod_1.z.object({
|
|
|
62
63
|
const getAction = zod_1.z.object({
|
|
63
64
|
action: zod_1.z
|
|
64
65
|
.literal('get')
|
|
65
|
-
.describe('
|
|
66
|
+
.describe('Inspect a workflow: metadata plus its structure as SDK code. Large workflows omit node parameters unless full is set; small ones include them. Pass versionId to inspect a past version instead of the current draft.'),
|
|
66
67
|
workflowId: zod_1.z.string().describe('ID of the workflow'),
|
|
68
|
+
versionId: zod_1.z.string().optional().describe('Version ID'),
|
|
69
|
+
full: zod_1.z
|
|
70
|
+
.boolean()
|
|
71
|
+
.optional()
|
|
72
|
+
.describe('Return complete node data including parameters (large). Default false.'),
|
|
67
73
|
});
|
|
68
74
|
const getJsonAction = zod_1.z.object({
|
|
69
75
|
action: zod_1.z
|
|
70
76
|
.literal('get-json')
|
|
71
|
-
.describe('Get full WorkflowJSON for workspace-file workflow edits. Write it to a .workflow.json file, edit the file, then save with build-workflow.'),
|
|
77
|
+
.describe('Get full WorkflowJSON for workspace-file workflow edits. Write it to a .workflow.json file, edit the file, then save with build-workflow. Pass versionId for a past version instead of the current draft.'),
|
|
72
78
|
workflowId: zod_1.z.string().describe('ID of the workflow'),
|
|
79
|
+
versionId: zod_1.z.string().optional().describe('Version ID'),
|
|
73
80
|
});
|
|
74
81
|
const getAsCodeAction = zod_1.z.object({
|
|
75
82
|
action: zod_1.z
|
|
76
83
|
.literal('get-as-code')
|
|
77
|
-
.describe('Convert an existing workflow to TypeScript SDK code. Call before precise patches when you need the current code.'),
|
|
84
|
+
.describe('Convert an existing workflow to TypeScript SDK code. Call before precise patches when you need the current code. Pass versionId for a past version instead of the current draft.'),
|
|
78
85
|
workflowId: zod_1.z.string().describe('ID of the workflow'),
|
|
86
|
+
versionId: zod_1.z.string().optional().describe('Version ID'),
|
|
79
87
|
});
|
|
80
88
|
const deleteAction = zod_1.z.object({
|
|
81
89
|
action: zod_1.z
|
|
@@ -136,11 +144,6 @@ const listVersionsAction = zod_1.z.object({
|
|
|
136
144
|
limit: zod_1.z.number().int().positive().max(100).optional().describe('Max results to return'),
|
|
137
145
|
skip: zod_1.z.number().int().min(0).optional().describe('Number of results to skip (default 0)'),
|
|
138
146
|
});
|
|
139
|
-
const getVersionAction = zod_1.z.object({
|
|
140
|
-
action: zod_1.z.literal('get-version').describe('Get full details of a specific workflow version'),
|
|
141
|
-
workflowId: zod_1.z.string().describe('ID of the workflow'),
|
|
142
|
-
versionId: zod_1.z.string().describe('Version ID'),
|
|
143
|
-
});
|
|
144
147
|
const restoreVersionAction = zod_1.z.object({
|
|
145
148
|
action: zod_1.z.literal('restore-version').describe('Restore a workflow to a previous version'),
|
|
146
149
|
workflowId: zod_1.z.string().describe('ID of the workflow'),
|
|
@@ -175,7 +178,6 @@ const WORKFLOW_ACTION_ORDER = [
|
|
|
175
178
|
'publish',
|
|
176
179
|
'unpublish',
|
|
177
180
|
'list-versions',
|
|
178
|
-
'get-version',
|
|
179
181
|
'restore-version',
|
|
180
182
|
'update-version',
|
|
181
183
|
];
|
|
@@ -192,7 +194,6 @@ const WORKFLOW_ACTION_LABELS = {
|
|
|
192
194
|
publish: 'publish',
|
|
193
195
|
unpublish: 'unpublish',
|
|
194
196
|
'list-versions': 'list versions',
|
|
195
|
-
'get-version': 'inspect versions',
|
|
196
197
|
'restore-version': 'restore versions',
|
|
197
198
|
'update-version': 'update version metadata',
|
|
198
199
|
};
|
|
@@ -217,7 +218,6 @@ function getSupportedWorkflowActionSchemas(context, surface = 'full') {
|
|
|
217
218
|
...(hasVersions
|
|
218
219
|
? {
|
|
219
220
|
'list-versions': listVersionsAction,
|
|
220
|
-
'get-version': getVersionAction,
|
|
221
221
|
'restore-version': restoreVersionAction,
|
|
222
222
|
}
|
|
223
223
|
: {}),
|
|
@@ -261,7 +261,37 @@ async function handleList(context, input) {
|
|
|
261
261
|
}
|
|
262
262
|
async function handleGet(context, input) {
|
|
263
263
|
try {
|
|
264
|
-
|
|
264
|
+
if (input.versionId) {
|
|
265
|
+
if (!context.workflowService.getVersion) {
|
|
266
|
+
return {
|
|
267
|
+
workflowId: input.workflowId,
|
|
268
|
+
versionId: input.versionId,
|
|
269
|
+
error: 'Workflow version history is not available on this instance',
|
|
270
|
+
};
|
|
271
|
+
}
|
|
272
|
+
const version = await context.workflowService.getVersion(input.workflowId, input.versionId);
|
|
273
|
+
if (input.full || (0, summarize_workflow_1.isSmallPayload)(version)) {
|
|
274
|
+
return { workflowId: input.workflowId, ...version };
|
|
275
|
+
}
|
|
276
|
+
const { nodes, connections, ...meta } = version;
|
|
277
|
+
return {
|
|
278
|
+
workflowId: input.workflowId,
|
|
279
|
+
...meta,
|
|
280
|
+
nodeCount: nodes.length,
|
|
281
|
+
structure: await (0, summarize_workflow_1.summarizeWorkflowStructure)(meta.name ?? '', nodes, connections),
|
|
282
|
+
note: summarize_workflow_1.STRUCTURE_ONLY_NOTE,
|
|
283
|
+
};
|
|
284
|
+
}
|
|
285
|
+
const detail = await context.workflowService.get(input.workflowId);
|
|
286
|
+
if (input.full || (0, summarize_workflow_1.isSmallPayload)(detail))
|
|
287
|
+
return detail;
|
|
288
|
+
const { nodes, connections, ...meta } = detail;
|
|
289
|
+
return {
|
|
290
|
+
...meta,
|
|
291
|
+
nodeCount: nodes.length,
|
|
292
|
+
structure: await (0, summarize_workflow_1.summarizeWorkflowStructure)(meta.name, nodes, connections),
|
|
293
|
+
note: summarize_workflow_1.STRUCTURE_ONLY_NOTE,
|
|
294
|
+
};
|
|
265
295
|
}
|
|
266
296
|
catch (error) {
|
|
267
297
|
const message = error instanceof Error ? error.message : 'Failed to fetch workflow';
|
|
@@ -281,7 +311,7 @@ async function handleGet(context, input) {
|
|
|
281
311
|
}
|
|
282
312
|
async function handleGetJson(context, input) {
|
|
283
313
|
try {
|
|
284
|
-
return await context.workflowService.getAsWorkflowJSON(input.workflowId);
|
|
314
|
+
return await context.workflowService.getAsWorkflowJSON(input.workflowId, input.versionId);
|
|
285
315
|
}
|
|
286
316
|
catch (error) {
|
|
287
317
|
return {
|
|
@@ -294,7 +324,7 @@ async function handleGetJson(context, input) {
|
|
|
294
324
|
async function handleGetAsCode(context, input) {
|
|
295
325
|
const { generateWorkflowCode } = await Promise.resolve().then(() => __importStar(require('@n8n/workflow-sdk')));
|
|
296
326
|
try {
|
|
297
|
-
const json = await context.workflowService.getAsWorkflowJSON(input.workflowId);
|
|
327
|
+
const json = await context.workflowService.getAsWorkflowJSON(input.workflowId, input.versionId);
|
|
298
328
|
const code = generateWorkflowCode(json);
|
|
299
329
|
return { workflowId: input.workflowId, name: json.name, code };
|
|
300
330
|
}
|
|
@@ -516,10 +546,10 @@ async function handleValidate(context, input) {
|
|
|
516
546
|
}
|
|
517
547
|
}
|
|
518
548
|
function isWorkflowJson(value) {
|
|
519
|
-
return ((0,
|
|
549
|
+
return ((0, is_record_1.isRecord)(value) &&
|
|
520
550
|
typeof value.name === 'string' &&
|
|
521
551
|
Array.isArray(value.nodes) &&
|
|
522
|
-
(0,
|
|
552
|
+
(0, is_record_1.isRecord)(value.connections));
|
|
523
553
|
}
|
|
524
554
|
async function handleUpdate(context, input, ctx) {
|
|
525
555
|
const resumeData = ctx.resumeData;
|
|
@@ -710,9 +740,6 @@ async function handleListVersions(context, input) {
|
|
|
710
740
|
});
|
|
711
741
|
return { versions };
|
|
712
742
|
}
|
|
713
|
-
async function handleGetVersion(context, input) {
|
|
714
|
-
return await context.workflowService.getVersion(input.workflowId, input.versionId);
|
|
715
|
-
}
|
|
716
743
|
async function handleRestoreVersion(context, input, ctx) {
|
|
717
744
|
const resumeData = ctx.resumeData;
|
|
718
745
|
if (context.permissions?.restoreWorkflowVersion === 'blocked') {
|
|
@@ -843,8 +870,6 @@ function createWorkflowsTool(context, optionsInput = {}) {
|
|
|
843
870
|
return await handleUnpublish(context, workflowInput, ctx);
|
|
844
871
|
case 'list-versions':
|
|
845
872
|
return await handleListVersions(context, workflowInput);
|
|
846
|
-
case 'get-version':
|
|
847
|
-
return await handleGetVersion(context, workflowInput);
|
|
848
873
|
case 'restore-version':
|
|
849
874
|
return await handleRestoreVersion(context, workflowInput, ctx);
|
|
850
875
|
case 'update-version':
|