@n8n/instance-ai 1.16.2 → 1.17.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/agent/instance-agent.js +7 -1
- package/dist/agent/instance-agent.js.map +1 -1
- package/dist/agent/system-prompt.js +3 -3
- package/dist/agent/system-prompt.js.map +1 -1
- package/dist/build.tsbuildinfo +1 -1
- package/dist/event-bus/event-bus.interface.d.ts +1 -1
- package/dist/index.d.ts +10 -1
- package/dist/index.js +17 -2
- package/dist/index.js.map +1 -1
- package/dist/parsers/xlsx-parser.js +1 -1
- package/dist/parsers/xlsx-parser.js.map +1 -1
- package/dist/runtime/terminal-response-guard.js +2 -1
- package/dist/runtime/terminal-response-guard.js.map +1 -1
- package/dist/skills/skill-gates.d.ts +5 -0
- package/dist/skills/skill-gates.js +12 -0
- package/dist/skills/skill-gates.js.map +1 -0
- package/dist/storage/workflow-loop-storage.d.ts +7 -7
- package/dist/stream/consume-with-hitl.d.ts +3 -0
- package/dist/stream/consume-with-hitl.js +2 -0
- package/dist/stream/consume-with-hitl.js.map +1 -1
- package/dist/stream/map-chunk.js +7 -0
- package/dist/stream/map-chunk.js.map +1 -1
- package/dist/stream/usage-accumulator.d.ts +2 -0
- package/dist/stream/usage-accumulator.js +13 -3
- package/dist/stream/usage-accumulator.js.map +1 -1
- package/dist/tool-registry.js +5 -1
- package/dist/tool-registry.js.map +1 -1
- package/dist/tools/agents.tool.d.ts +2 -0
- package/dist/tools/agents.tool.js +40 -0
- package/dist/tools/agents.tool.js.map +1 -0
- package/dist/tools/credentials.tool.js +8 -3
- package/dist/tools/credentials.tool.js.map +1 -1
- package/dist/tools/evals/eval-config.tool.js +10 -2
- package/dist/tools/evals/eval-config.tool.js.map +1 -1
- package/dist/tools/executions.tool.js +3 -2
- package/dist/tools/executions.tool.js.map +1 -1
- package/dist/tools/filesystem/create-tools-from-mcp-server.js +2 -2
- package/dist/tools/filesystem/create-tools-from-mcp-server.js.map +1 -1
- package/dist/tools/index.js +15 -2
- package/dist/tools/index.js.map +1 -1
- package/dist/tools/n8n-docs/registry.d.ts +2 -2
- package/dist/tools/n8n-docs/registry.js +20 -8
- package/dist/tools/n8n-docs/registry.js.map +1 -1
- package/dist/tools/n8n-docs.tool.js +18 -12
- package/dist/tools/n8n-docs.tool.js.map +1 -1
- package/dist/tools/nodes.tool.js +1 -1
- package/dist/tools/orchestration/agent-preview-session-binding.d.ts +20 -0
- package/dist/tools/orchestration/agent-preview-session-binding.js +47 -0
- package/dist/tools/orchestration/agent-preview-session-binding.js.map +1 -0
- package/dist/tools/orchestration/agent-target-binding.d.ts +6 -1
- package/dist/tools/orchestration/agent-target-binding.js +43 -4
- package/dist/tools/orchestration/agent-target-binding.js.map +1 -1
- package/dist/tools/orchestration/build-agent.tool.js +365 -71
- package/dist/tools/orchestration/build-agent.tool.js.map +1 -1
- package/dist/tools/orchestration/builder-thread-id.d.ts +1 -0
- package/dist/tools/orchestration/builder-thread-id.js +7 -0
- package/dist/tools/orchestration/builder-thread-id.js.map +1 -0
- package/dist/tools/orchestration/get-session.tool.d.ts +2 -0
- package/dist/tools/orchestration/get-session.tool.js +49 -0
- package/dist/tools/orchestration/get-session.tool.js.map +1 -0
- package/dist/tools/orchestration/verification/reconcile-plan.js +4 -1
- package/dist/tools/orchestration/verification/reconcile-plan.js.map +1 -1
- package/dist/tools/orchestration/verify-built-workflow.tool.js +1 -0
- package/dist/tools/orchestration/verify-built-workflow.tool.js.map +1 -1
- package/dist/tools/research.tool.js +2 -0
- package/dist/tools/research.tool.js.map +1 -1
- package/dist/tools/tool-ids.d.ts +2 -0
- package/dist/tools/tool-ids.js +3 -0
- package/dist/tools/tool-ids.js.map +1 -1
- package/dist/tools/workflows/build-workflow.tool.js +12 -4
- package/dist/tools/workflows/build-workflow.tool.js.map +1 -1
- package/dist/tools/workflows/classify-node-destructiveness.service.d.ts +1 -1
- package/dist/tools/workflows/classify-node-destructiveness.service.js +5 -7
- package/dist/tools/workflows/classify-node-destructiveness.service.js.map +1 -1
- package/dist/tools/workflows/credential-utils.d.ts +1 -1
- package/dist/tools/workflows/credential-utils.js +2 -2
- package/dist/tools/workflows/credential-utils.js.map +1 -1
- package/dist/tools/workflows/detect-unparseable-openai-schema.d.ts +3 -0
- package/dist/tools/workflows/detect-unparseable-openai-schema.js +85 -0
- package/dist/tools/workflows/detect-unparseable-openai-schema.js.map +1 -0
- package/dist/tools/workflows/generate-simulation-fixtures.service.d.ts +2 -1
- package/dist/tools/workflows/generate-simulation-fixtures.service.js +27 -5
- package/dist/tools/workflows/generate-simulation-fixtures.service.js.map +1 -1
- package/dist/tools/workflows/materialize-node-type.tool.js +4 -2
- package/dist/tools/workflows/materialize-node-type.tool.js.map +1 -1
- package/dist/tools/workflows/plan-verification-simulation.d.ts +5 -2
- package/dist/tools/workflows/plan-verification-simulation.js +117 -2
- package/dist/tools/workflows/plan-verification-simulation.js.map +1 -1
- package/dist/tools/workflows/reconcile-simulation-plan.js +48 -17
- package/dist/tools/workflows/reconcile-simulation-plan.js.map +1 -1
- package/dist/tools/workflows/resolve-credentials.js +35 -1
- package/dist/tools/workflows/resolve-credentials.js.map +1 -1
- package/dist/tools/workflows/setup-workflow.schema.d.ts +66 -66
- package/dist/tools/workflows/validate-workflow.service.js +4 -4
- package/dist/tools/workflows/workflow-build-routing.js +3 -3
- package/dist/tools/workflows/workflow-build-routing.js.map +1 -1
- package/dist/tools/workflows/workflow-file-bindings.d.ts +1 -1
- package/dist/tools/workflows/workflow-file-bindings.js +2 -1
- package/dist/tools/workflows/workflow-file-bindings.js.map +1 -1
- package/dist/tools/workflows/workflow-json-utils.js +11 -12
- package/dist/tools/workflows/workflow-json-utils.js.map +1 -1
- package/dist/tools/workflows/workflow-source-compiler.d.ts +1 -1
- package/dist/tools/workflows/workflow-source-compiler.js +11 -4
- package/dist/tools/workflows/workflow-source-compiler.js.map +1 -1
- package/dist/tools/workflows/write-sandbox-file.tool.js +4 -2
- package/dist/tools/workflows/write-sandbox-file.tool.js.map +1 -1
- package/dist/tracing/langsmith-tracing.d.ts +1 -0
- package/dist/tracing/langsmith-tracing.js +69 -9
- package/dist/tracing/langsmith-tracing.js.map +1 -1
- package/dist/tracing/trace-payloads.js +8 -0
- package/dist/tracing/trace-payloads.js.map +1 -1
- package/dist/types.d.ts +52 -5
- package/dist/types.js.map +1 -1
- package/dist/utils/stream-helpers.d.ts +1 -0
- package/dist/utils/stream-helpers.js +2 -1
- package/dist/utils/stream-helpers.js.map +1 -1
- package/dist/workflow-loop/workflow-loop-state.d.ts +13 -13
- package/dist/workflow-loop/workflow-loop-state.js +6 -1
- package/dist/workflow-loop/workflow-loop-state.js.map +1 -1
- package/dist/workspace/create-workspace.js +24 -1
- package/dist/workspace/create-workspace.js.map +1 -1
- package/dist/workspace/lazy-runtime-workspace.js +19 -19
- package/dist/workspace/lazy-runtime-workspace.js.map +1 -1
- package/dist/workspace/sandbox-fs.d.ts +16 -4
- package/dist/workspace/sandbox-fs.js +80 -25
- package/dist/workspace/sandbox-fs.js.map +1 -1
- package/dist/workspace/scoped-workspace.js +6 -6
- package/dist/workspace/scoped-workspace.js.map +1 -1
- package/dist/workspace/snapshot-manager.d.ts +1 -0
- package/dist/workspace/snapshot-manager.js +37 -5
- package/dist/workspace/snapshot-manager.js.map +1 -1
- package/dist/workspace/workspace-files.d.ts +4 -0
- package/dist/workspace/workspace-files.js +21 -7
- package/dist/workspace/workspace-files.js.map +1 -1
- package/knowledge-base/reference/workflow-builder-guardrails.md +3 -0
- package/package.json +12 -12
- package/skills/config-evals/SKILL.md +96 -0
- package/skills/config-evals/references/config-eval-playbook.md +109 -0
- package/skills/intent-recognition/SKILL.md +145 -34
- package/skills/workflow-builder/SKILL.md +25 -17
|
@@ -2,16 +2,23 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.generateSimulationFixtures = generateSimulationFixtures;
|
|
4
4
|
const is_record_1 = require("@n8n/utils/is-record");
|
|
5
|
+
const workflow_sdk_1 = require("@n8n/workflow-sdk");
|
|
5
6
|
const n8n_workflow_1 = require("n8n-workflow");
|
|
6
7
|
const zod_1 = require("zod");
|
|
8
|
+
const workflow_json_utils_1 = require("./workflow-json-utils");
|
|
7
9
|
const eval_agents_1 = require("../../utils/eval-agents");
|
|
8
10
|
const generate_validated_json_1 = require("../../utils/generate-validated-json");
|
|
9
|
-
const FixturesResponseSchema = zod_1.z.record(zod_1.z.string(), zod_1.z.array(zod_1.z.
|
|
10
|
-
const SYSTEM_INSTRUCTIONS = `You generate realistic mock output for n8n workflow nodes whose real execution is being simulated (their operation would create, update, send, or delete data in an external system, or pause the workflow for user action).
|
|
11
|
+
const FixturesResponseSchema = zod_1.z.record(zod_1.z.string(), zod_1.z.array(zod_1.z.unknown()));
|
|
12
|
+
const SYSTEM_INSTRUCTIONS = `You generate realistic mock output for n8n workflow nodes whose real execution is being simulated (their operation would create, update, send, or delete data in an external system, would wait for an outside event, or would pause the workflow for user action).
|
|
11
13
|
|
|
12
14
|
For each node, return the output items the node would naturally emit after a SUCCESSFUL run of its operation — matching the response shape of the underlying service (e.g. a Slack message post returns "ok", "ts" and "channel"; a row insert returns the row including its new "id"). Base the field values on the node's parameters so the data is plausible in context, and keep values consistent across nodes (same fictional users, ids, timestamps).
|
|
13
15
|
|
|
16
|
+
When a node block includes an "Output JSON Schema", it is the node's real recorded output shape — follow its structure exactly (field names and types); only invent fields the schema doesn't cover when the node's parameters clearly require them.
|
|
17
|
+
|
|
18
|
+
Dates and timestamps MUST be derived from the "## Date anchors" block at the end of the prompt — never from training data. Fixtures feed a real verification run that compares values against the execution clock ($now, Date.now()); stale dates get silently filtered out downstream.
|
|
19
|
+
|
|
14
20
|
Special node types:
|
|
21
|
+
- Trigger nodes (marked as the workflow's simulated event source): emit the EVENT PAYLOAD the trigger delivers into the workflow — the received email/message/record object itself — never an API response envelope, acknowledgement, or request metadata.
|
|
15
22
|
- Form nodes (a mid-workflow form page): emit the submitted field values — one key per field defined in the node's formFields, with plausible values, plus "submittedAt".
|
|
16
23
|
- Wait nodes: their real output is their INPUT passed through unchanged. Emit data matching what the listed upstream nodes would produce, so downstream expressions keep resolving.
|
|
17
24
|
|
|
@@ -19,7 +26,7 @@ Output: a single JSON object whose keys are node names and whose values are arra
|
|
|
19
26
|
|
|
20
27
|
Return only the JSON object. No prose, no markdown fences.`;
|
|
21
28
|
const USER_ACTION_NODE_TYPES = new Set(['n8n-nodes-base.form', 'n8n-nodes-base.wait']);
|
|
22
|
-
function formatNodeBlock(node, reason, upstreamContext) {
|
|
29
|
+
function formatNodeBlock(node, reason, schemaContext, upstreamContext) {
|
|
23
30
|
const params = (0, is_record_1.isRecord)(node.parameters)
|
|
24
31
|
? JSON.stringify(node.parameters).slice(0, 600)
|
|
25
32
|
: '(none)';
|
|
@@ -27,7 +34,11 @@ function formatNodeBlock(node, reason, upstreamContext) {
|
|
|
27
34
|
`Node name: ${node.name}`,
|
|
28
35
|
`Node type: ${node.type}`,
|
|
29
36
|
`Simulated because: ${reason}`,
|
|
37
|
+
...((0, workflow_json_utils_1.isTriggerNodeType)(node.type)
|
|
38
|
+
? ["This node is the workflow's simulated event source — emit the event payload it delivers."]
|
|
39
|
+
: []),
|
|
30
40
|
`Parameters: ${params}`,
|
|
41
|
+
...(schemaContext ? (0, workflow_sdk_1.buildNodeSchemaSection)(schemaContext) : []),
|
|
31
42
|
...(upstreamContext ? [upstreamContext] : []),
|
|
32
43
|
].join('\n');
|
|
33
44
|
}
|
|
@@ -64,19 +75,25 @@ async function generateSimulationFixtures(input) {
|
|
|
64
75
|
const nodeNames = nodes.map((n) => n.name);
|
|
65
76
|
if (nodeNames.length === 0)
|
|
66
77
|
return {};
|
|
78
|
+
const outputParserTargets = (0, workflow_sdk_1.findOutputParserTargets)(input.workflow);
|
|
79
|
+
const schemaContexts = (0, workflow_sdk_1.buildSchemaContexts)(nodes, input.outputSchemaLookup, outputParserTargets);
|
|
80
|
+
const schemaContextByName = new Map(schemaContexts.map((ctx) => [ctx.nodeName, ctx]));
|
|
67
81
|
const connectionsByDestination = (0, n8n_workflow_1.mapConnectionsByDestination)((input.workflow.connections ?? {}));
|
|
68
82
|
const userText = [
|
|
69
83
|
'Generate realistic mock output (pin-data items) for the following simulated n8n nodes.',
|
|
70
84
|
input.workflow.name ? `\nWorkflow: ${input.workflow.name}` : '',
|
|
71
85
|
'',
|
|
72
86
|
nodes
|
|
73
|
-
.map((n) => formatNodeBlock(n, reasonByName.get(n.name) ?? '', USER_ACTION_NODE_TYPES.has(n.type)
|
|
87
|
+
.map((n) => formatNodeBlock(n, reasonByName.get(n.name) ?? '', schemaContextByName.get(n.name), USER_ACTION_NODE_TYPES.has(n.type)
|
|
74
88
|
? buildUpstreamContext(input.workflow, n.name, connectionsByDestination)
|
|
75
89
|
: undefined))
|
|
76
90
|
.join('\n\n'),
|
|
77
91
|
'',
|
|
78
92
|
`Output a single JSON object with exactly these keys: ${nodeNames.map((n) => `"${n}"`).join(', ')}.`,
|
|
79
93
|
'Each value: an array with one item shaped like { "json": { ...fields } }.',
|
|
94
|
+
'',
|
|
95
|
+
'## Date anchors',
|
|
96
|
+
(0, workflow_sdk_1.buildDateAnchors)(new Date()),
|
|
80
97
|
].join('\n');
|
|
81
98
|
const result = await (0, generate_validated_json_1.generateValidatedJson)('verification-simulation-fixtures', {
|
|
82
99
|
model: eval_agents_1.SONNET_MODEL,
|
|
@@ -86,9 +103,14 @@ async function generateSimulationFixtures(input) {
|
|
|
86
103
|
});
|
|
87
104
|
if (!result.ok)
|
|
88
105
|
return emptyFixtures(nodeNames);
|
|
106
|
+
let pinData = (0, workflow_sdk_1.parsePinDataResponse)(JSON.stringify(result.data), nodeNames);
|
|
107
|
+
pinData = (0, workflow_sdk_1.repairStructuredOutput)(pinData, input.workflow, schemaContexts);
|
|
89
108
|
const fixtures = {};
|
|
90
109
|
for (const name of nodeNames) {
|
|
91
|
-
|
|
110
|
+
const items = pinData[name];
|
|
111
|
+
fixtures[name] = items?.length
|
|
112
|
+
? items.map((item) => ((0, is_record_1.isRecord)(item.json) ? item.json : {}))
|
|
113
|
+
: [{}];
|
|
92
114
|
}
|
|
93
115
|
return fixtures;
|
|
94
116
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"generate-simulation-fixtures.service.js","sourceRoot":"","sources":["../../../src/tools/workflows/generate-simulation-fixtures.service.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"generate-simulation-fixtures.service.js","sourceRoot":"","sources":["../../../src/tools/workflows/generate-simulation-fixtures.service.ts"],"names":[],"mappings":";;;AAoBA,oDAAgD;AAEhD,oDAO2B;AAC3B,+CAA8F;AAC9F,6BAAwB;AAExB,+DAA0D;AAC1D,yDAAuD;AACvD,iFAA4E;AA2B5E,MAAM,sBAAsB,GAAG,OAAC,CAAC,MAAM,CAAC,OAAC,CAAC,MAAM,EAAE,EAAE,OAAC,CAAC,KAAK,CAAC,OAAC,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;AAE1E,MAAM,mBAAmB,GAAG;;;;;;;;;;;;;;;2DAe+B,CAAC;AAE5D,MAAM,sBAAsB,GAAG,IAAI,GAAG,CAAC,CAAC,qBAAqB,EAAE,qBAAqB,CAAC,CAAC,CAAC;AAEvF,SAAS,eAAe,CACvB,IAAsD,EACtD,MAAc,EACd,aAA4C,EAC5C,eAAwB;IAExB,MAAM,MAAM,GAAG,IAAA,oBAAQ,EAAC,IAAI,CAAC,UAAU,CAAC;QACvC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC;QAC/C,CAAC,CAAC,QAAQ,CAAC;IACZ,OAAO;QACN,cAAc,IAAI,CAAC,IAAI,EAAE;QACzB,cAAc,IAAI,CAAC,IAAI,EAAE;QACzB,sBAAsB,MAAM,EAAE;QAC9B,GAAG,CAAC,IAAA,uCAAiB,EAAC,IAAI,CAAC,IAAI,CAAC;YAC/B,CAAC,CAAC,CAAC,0FAA0F,CAAC;YAC9F,CAAC,CAAC,EAAE,CAAC;QACN,eAAe,MAAM,EAAE;QACvB,GAAG,CAAC,aAAa,CAAC,CAAC,CAAC,IAAA,qCAAsB,EAAC,aAAa,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QAC/D,GAAG,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;KAC7C,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACd,CAAC;AAOD,SAAS,oBAAoB,CAC5B,QAAsB,EACtB,QAAgB,EAChB,wBAAsC;IAEtC,MAAM,WAAW,GAAG,IAAA,6BAAc,EAAC,wBAAwB,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC;IAClF,IAAI,WAAW,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,SAAS,CAAC;IAC/C,MAAM,WAAW,GAAG,IAAI,GAAG,CAC1B,CAAC,QAAQ,CAAC,KAAK,IAAI,EAAE,CAAC;SACpB,MAAM,CAAC,CAAC,CAAC,EAAyD,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;SACrF,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAU,CAAC,CAClC,CAAC;IACF,MAAM,KAAK,GAAG,WAAW;SACvB,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE;QACb,MAAM,MAAM,GAAG,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QACrC,IAAI,CAAC,MAAM;YAAE,OAAO,SAAS,CAAC;QAC9B,MAAM,MAAM,GAAG,IAAA,oBAAQ,EAAC,MAAM,CAAC,UAAU,CAAC;YACzC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC;YACjD,CAAC,CAAC,QAAQ,CAAC;QACZ,OAAO,MAAM,IAAI,MAAM,MAAM,CAAC,IAAI,kBAAkB,MAAM,EAAE,CAAC;IAC9D,CAAC,CAAC;SACD,MAAM,CAAC,CAAC,IAAI,EAAkB,EAAE,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC;IACvD,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,SAAS,CAAC;IACzC,OAAO,CAAC,iEAAiE,EAAE,GAAG,KAAK,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACjG,CAAC;AAED,SAAS,aAAa,CAAC,SAAmB;IACzC,OAAO,MAAM,CAAC,WAAW,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;AAClE,CAAC;AAOM,KAAK,qCACX,KAAsC;IAEtC,MAAM,YAAY,GAAG,IAAI,GAAG,CAC3B,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,KAAK,UAAU,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC,MAAM,CAAU,CAAC,CAC9F,CAAC;IACF,IAAI,YAAY,CAAC,IAAI,KAAK,CAAC;QAAE,OAAO,EAAE,CAAC;IAEvC,MAAM,KAAK,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,MAAM,CAChD,CAAC,IAAI,EAA4D,EAAE,CAClE,OAAO,IAAI,CAAC,IAAI,KAAK,QAAQ,IAAI,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAC7D,CAAC;IACF,MAAM,SAAS,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;IAC3C,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,CAAC;IAItC,MAAM,mBAAmB,GAAG,IAAA,sCAAuB,EAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;IACpE,MAAM,cAAc,GAAG,IAAA,kCAAmB,EAAC,KAAK,EAAE,KAAK,CAAC,kBAAkB,EAAE,mBAAmB,CAAC,CAAC;IACjG,MAAM,mBAAmB,GAAG,IAAI,GAAG,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,QAAQ,EAAE,GAAG,CAAU,CAAC,CAAC,CAAC;IAE/F,MAAM,wBAAwB,GAAG,IAAA,0CAA2B,EAC3D,CAAC,KAAK,CAAC,QAAQ,CAAC,WAAW,IAAI,EAAE,CAAiB,CAClD,CAAC;IACF,MAAM,QAAQ,GAAG;QAChB,wFAAwF;QACxF,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,eAAe,KAAK,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE;QAC/D,EAAE;QACF,KAAK;aACH,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CACV,eAAe,CACd,CAAC,EACD,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,EAAE,EAC9B,mBAAmB,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,EAC/B,sBAAsB,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC;YACjC,CAAC,CAAC,oBAAoB,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC,CAAC,IAAI,EAAE,wBAAwB,CAAC;YACxE,CAAC,CAAC,SAAS,CACZ,CACD;aACA,IAAI,CAAC,MAAM,CAAC;QACd,EAAE;QACF,wDAAwD,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG;QACpG,2EAA2E;QAC3E,EAAE;QACF,iBAAiB;QACjB,IAAA,+BAAgB,EAAC,IAAI,IAAI,EAAE,CAAC;KAC5B,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAEb,MAAM,MAAM,GAAG,MAAM,IAAA,+CAAqB,EAAC,kCAAkC,EAAE;QAC9E,KAAK,EAAE,0BAAY;QACnB,YAAY,EAAE,mBAAmB;QACjC,QAAQ;QACR,MAAM,EAAE,sBAAsB;KAC9B,CAAC,CAAC;IACH,IAAI,CAAC,MAAM,CAAC,EAAE;QAAE,OAAO,aAAa,CAAC,SAAS,CAAC,CAAC;IAOhD,IAAI,OAAO,GAAG,IAAA,mCAAoB,EAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,SAAS,CAAC,CAAC;IAC3E,OAAO,GAAG,IAAA,qCAAsB,EAAC,OAAO,EAAE,KAAK,CAAC,QAAQ,EAAE,cAAc,CAAC,CAAC;IAE1E,MAAM,QAAQ,GAAuB,EAAE,CAAC;IACxC,KAAK,MAAM,IAAI,IAAI,SAAS,EAAE,CAAC;QAC9B,MAAM,KAAK,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;QAC5B,QAAQ,CAAC,IAAI,CAAC,GAAG,KAAK,EAAE,MAAM;YAC7B,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,IAAA,oBAAQ,EAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;YAC7D,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;IACT,CAAC;IACD,OAAO,QAAQ,CAAC;AACjB,CAAC"}
|
|
@@ -47,7 +47,7 @@ function createMaterializeNodeTypeTool(context, workspace) {
|
|
|
47
47
|
error: zod_1.z.string().optional(),
|
|
48
48
|
})),
|
|
49
49
|
}))
|
|
50
|
-
.handler(async ({ nodeIds }) => {
|
|
50
|
+
.handler(async ({ nodeIds }, ctx) => {
|
|
51
51
|
if (!context.nodeService.getNodeTypeDefinition) {
|
|
52
52
|
return {
|
|
53
53
|
definitions: nodeIds.map((req) => ({
|
|
@@ -91,7 +91,9 @@ function createMaterializeNodeTypeTool(context, workspace) {
|
|
|
91
91
|
}
|
|
92
92
|
const script = lines.join('\n');
|
|
93
93
|
const scriptB64 = Buffer.from(script, 'utf-8').toString('base64');
|
|
94
|
-
const result = await (0, sandbox_fs_1.runInSandbox)(workspace, `echo '${scriptB64}' | base64 -d | bash
|
|
94
|
+
const result = await (0, sandbox_fs_1.runInSandbox)(workspace, `echo '${scriptB64}' | base64 -d | bash`, {
|
|
95
|
+
abortSignal: ctx.abortSignal,
|
|
96
|
+
});
|
|
95
97
|
if (result.exitCode !== 0) {
|
|
96
98
|
for (const f of toWrite) {
|
|
97
99
|
f.error =
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"materialize-node-type.tool.js","sourceRoot":"","sources":["../../../src/tools/workflows/materialize-node-type.tool.ts"],"names":[],"mappings":";;;;AAWA,wCAAmC;AACnC,iDAAuD;AACvD,6BAAwB;AAGxB,2DAAiF;AAEjF,MAAM,iBAAiB,GAAG,OAAC,CAAC,KAAK,CAAC;IACjC,OAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,mDAAmD,CAAC;IACxE,OAAC,CAAC,MAAM,CAAC;QACR,MAAM,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,cAAc,CAAC;QAC3C,OAAO,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,8BAA8B,CAAC;QACvE,QAAQ,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,wCAAwC,CAAC;QAClF,SAAS,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,yCAAyC,CAAC;QACpF,IAAI,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,oCAAoC,CAAC;KAC1E,CAAC;CACF,CAAC,CAAC;AAMH,SAAS,YAAY,CAAC,MAAc;IACnC,MAAM,QAAQ,GAAG,MAAM,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;IACzC,IAAI,QAAQ,KAAK,CAAC,CAAC;QAAE,OAAO,MAAM,CAAC;IACnC,OAAO,GAAG,MAAM,CAAC,SAAS,CAAC,CAAC,EAAE,QAAQ,CAAC,IAAI,MAAM,CAAC,SAAS,CAAC,QAAQ,GAAG,CAAC,CAAC,EAAE,CAAC;AAC7E,CAAC;AAGD,SAAS,GAAG,CAAC,CAAS;IACrB,OAAO,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;AACjC,CAAC;AAEY,QAAA,8BAA8B,GAAG,OAAC,CAAC,MAAM,CAAC;IACtD,OAAO,EAAE,OAAC;SACR,KAAK,CAAC,iBAAiB,CAAC;SACxB,GAAG,CAAC,CAAC,CAAC;SACN,GAAG,CAAC,CAAC,CAAC;SACN,QAAQ,CAAC,iDAAiD,CAAC;CAC7D,CAAC,CAAC;AAEH,uCACC,OAA0B,EAC1B,SAA2B;IAE3B,OAAO,IAAI,aAAI,CAAC,uBAAuB,CAAC;SACtC,WAAW,CACX,iFAAiF;QAChF,iEAAiE;QACjE,4EAA4E;QAC5E,oEAAoE,CACrE;SACA,KAAK,CAAC,QAAA,8BAA8B,CAAC;SACrC,MAAM,CACN,OAAC,CAAC,MAAM,CAAC;QACR,WAAW,EAAE,OAAC,CAAC,KAAK,CACnB,OAAC,CAAC,MAAM,CAAC;YACR,MAAM,EAAE,OAAC,CAAC,MAAM,EAAE;YAClB,IAAI,EAAE,OAAC,CAAC,MAAM,EAAE;YAChB,OAAO,EAAE,OAAC,CAAC,MAAM,EAAE;YACnB,KAAK,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;SAC5B,CAAC,CACF;KACD,CAAC,CACF;SACA,OAAO,CAAC,KAAK,EAAE,EAAE,OAAO,EAAkD,EAAE,EAAE;
|
|
1
|
+
{"version":3,"file":"materialize-node-type.tool.js","sourceRoot":"","sources":["../../../src/tools/workflows/materialize-node-type.tool.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { WorkflowJSON } from '@n8n/workflow-sdk';
|
|
1
|
+
import type { OutputSchemaLookup, WorkflowJSON } from '@n8n/workflow-sdk';
|
|
2
2
|
import { type SimulationFixtures } from './generate-simulation-fixtures.service';
|
|
3
3
|
import type { Logger } from '../../logger';
|
|
4
4
|
import type { NodeSimulationVerdict } from '../../workflow-loop/workflow-loop-state';
|
|
@@ -7,10 +7,13 @@ export interface PlanVerificationSimulationInput {
|
|
|
7
7
|
mockedNodeNames?: string[];
|
|
8
8
|
declaredOutputFixtures?: SimulationFixtures;
|
|
9
9
|
workflowId: string;
|
|
10
|
+
outputSchemaLookup?: OutputSchemaLookup;
|
|
10
11
|
logger?: Logger;
|
|
11
12
|
}
|
|
12
13
|
export interface VerificationSimulationPlan {
|
|
13
14
|
nodeSimulationPlan?: NodeSimulationVerdict[];
|
|
14
15
|
simulationFixtures?: SimulationFixtures;
|
|
15
16
|
}
|
|
16
|
-
export declare
|
|
17
|
+
export declare const CREDENTIALLESS_AI_ROOT_SIMULATION_REASON = "Language model sub-node has no configured credentials \u2014 output is simulated during verification";
|
|
18
|
+
export declare function findCredentiallessAiRoots(workflow: WorkflowJSON, mockedNodeNames: Set<string>): Set<string>;
|
|
19
|
+
export declare function planVerificationSimulation({ workflow, mockedNodeNames, declaredOutputFixtures, workflowId, outputSchemaLookup, logger, }: PlanVerificationSimulationInput): Promise<VerificationSimulationPlan>;
|
|
@@ -1,9 +1,116 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.CREDENTIALLESS_AI_ROOT_SIMULATION_REASON = void 0;
|
|
4
|
+
exports.findCredentiallessAiRoots = findCredentiallessAiRoots;
|
|
3
5
|
exports.planVerificationSimulation = planVerificationSimulation;
|
|
4
6
|
const classify_node_destructiveness_service_1 = require("./classify-node-destructiveness.service");
|
|
5
7
|
const generate_simulation_fixtures_service_1 = require("./generate-simulation-fixtures.service");
|
|
8
|
+
const workflow_json_utils_1 = require("./workflow-json-utils");
|
|
6
9
|
const DECLARED_OUTPUT_SIMULATION_REASON = 'Source declares verification output for this node';
|
|
10
|
+
const TRIGGER_SIMULATION_REASON = 'Trigger event is simulated during verification';
|
|
11
|
+
function withSimulatedTriggerVerdicts(plan, workflow) {
|
|
12
|
+
const plannedNodeNames = new Set(plan.map((verdict) => verdict.nodeName));
|
|
13
|
+
const verdicts = [...plan];
|
|
14
|
+
for (const node of workflow.nodes ?? []) {
|
|
15
|
+
if (!node.name || node.disabled || plannedNodeNames.has(node.name))
|
|
16
|
+
continue;
|
|
17
|
+
if (!(0, workflow_json_utils_1.isTriggerNodeType)(node.type) || (0, workflow_json_utils_1.isMockableTriggerNodeType)(node.type))
|
|
18
|
+
continue;
|
|
19
|
+
verdicts.push({
|
|
20
|
+
nodeName: node.name,
|
|
21
|
+
verdict: 'simulate',
|
|
22
|
+
reason: TRIGGER_SIMULATION_REASON,
|
|
23
|
+
confidence: 'high',
|
|
24
|
+
source: 'deterministic',
|
|
25
|
+
});
|
|
26
|
+
}
|
|
27
|
+
return verdicts;
|
|
28
|
+
}
|
|
29
|
+
exports.CREDENTIALLESS_AI_ROOT_SIMULATION_REASON = 'Language model sub-node has no configured credentials — output is simulated during verification';
|
|
30
|
+
const MODEL_SELECTOR_NODE_TYPE = '@n8n/n8n-nodes-langchain.modelSelector';
|
|
31
|
+
function findCredentiallessAiRoots(workflow, mockedNodeNames) {
|
|
32
|
+
const nodesByName = new Map((workflow.nodes ?? [])
|
|
33
|
+
.filter((node) => Boolean(node.name))
|
|
34
|
+
.map((node) => [node.name, node]));
|
|
35
|
+
const modelSourcesByTarget = new Map();
|
|
36
|
+
for (const [sourceName, nodeConns] of Object.entries(workflow.connections ?? {})) {
|
|
37
|
+
const modelConns = nodeConns.ai_languageModel;
|
|
38
|
+
if (!Array.isArray(modelConns))
|
|
39
|
+
continue;
|
|
40
|
+
const subNode = nodesByName.get(sourceName);
|
|
41
|
+
if (!subNode || subNode.disabled)
|
|
42
|
+
continue;
|
|
43
|
+
for (const group of modelConns) {
|
|
44
|
+
if (!Array.isArray(group))
|
|
45
|
+
continue;
|
|
46
|
+
for (const conn of group) {
|
|
47
|
+
if (typeof conn !== 'object' || conn === null || !('node' in conn))
|
|
48
|
+
continue;
|
|
49
|
+
const target = conn.node;
|
|
50
|
+
const sources = modelSourcesByTarget.get(target);
|
|
51
|
+
if (sources)
|
|
52
|
+
sources.push(sourceName);
|
|
53
|
+
else
|
|
54
|
+
modelSourcesByTarget.set(target, [sourceName]);
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
const hasUsableCredentials = (name, visited) => {
|
|
59
|
+
if (visited.has(name))
|
|
60
|
+
return false;
|
|
61
|
+
visited.add(name);
|
|
62
|
+
const node = nodesByName.get(name);
|
|
63
|
+
if (!node || node.disabled)
|
|
64
|
+
return false;
|
|
65
|
+
if (node.type === MODEL_SELECTOR_NODE_TYPE) {
|
|
66
|
+
const models = modelSourcesByTarget.get(name) ?? [];
|
|
67
|
+
return models.some((model) => hasUsableCredentials(model, visited));
|
|
68
|
+
}
|
|
69
|
+
if (mockedNodeNames.has(name))
|
|
70
|
+
return false;
|
|
71
|
+
return Boolean(node.credentials && Object.keys(node.credentials).length > 0);
|
|
72
|
+
};
|
|
73
|
+
const roots = new Set();
|
|
74
|
+
for (const [target, sources] of modelSourcesByTarget) {
|
|
75
|
+
if (nodesByName.get(target)?.type === MODEL_SELECTOR_NODE_TYPE)
|
|
76
|
+
continue;
|
|
77
|
+
if (!sources.some((source) => hasUsableCredentials(source, new Set()))) {
|
|
78
|
+
roots.add(target);
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
return roots;
|
|
82
|
+
}
|
|
83
|
+
function withSimulatedCredentiallessAiRootVerdicts(plan, workflow, mockedNodeNames) {
|
|
84
|
+
const nodesByName = new Map((workflow.nodes ?? [])
|
|
85
|
+
.filter((node) => Boolean(node.name))
|
|
86
|
+
.map((node) => [node.name, node]));
|
|
87
|
+
const rootsWithCredentiallessModel = findCredentiallessAiRoots(workflow, mockedNodeNames);
|
|
88
|
+
if (rootsWithCredentiallessModel.size === 0)
|
|
89
|
+
return plan;
|
|
90
|
+
const verdicts = plan.map((verdict) => rootsWithCredentiallessModel.has(verdict.nodeName) && verdict.verdict !== 'simulate'
|
|
91
|
+
? {
|
|
92
|
+
...verdict,
|
|
93
|
+
verdict: 'simulate',
|
|
94
|
+
reason: exports.CREDENTIALLESS_AI_ROOT_SIMULATION_REASON,
|
|
95
|
+
confidence: 'high',
|
|
96
|
+
source: 'deterministic',
|
|
97
|
+
}
|
|
98
|
+
: verdict);
|
|
99
|
+
const plannedNodeNames = new Set(verdicts.map((verdict) => verdict.nodeName));
|
|
100
|
+
for (const rootName of rootsWithCredentiallessModel) {
|
|
101
|
+
const rootNode = nodesByName.get(rootName);
|
|
102
|
+
if (!rootNode || rootNode.disabled || plannedNodeNames.has(rootName))
|
|
103
|
+
continue;
|
|
104
|
+
verdicts.push({
|
|
105
|
+
nodeName: rootName,
|
|
106
|
+
verdict: 'simulate',
|
|
107
|
+
reason: exports.CREDENTIALLESS_AI_ROOT_SIMULATION_REASON,
|
|
108
|
+
confidence: 'high',
|
|
109
|
+
source: 'deterministic',
|
|
110
|
+
});
|
|
111
|
+
}
|
|
112
|
+
return verdicts;
|
|
113
|
+
}
|
|
7
114
|
function nonEmptyDeclaredFixtures(fixtures) {
|
|
8
115
|
if (!fixtures)
|
|
9
116
|
return undefined;
|
|
@@ -37,17 +144,23 @@ function withDeclaredOutputVerdicts(plan, declaredFixtures) {
|
|
|
37
144
|
}
|
|
38
145
|
return overriddenPlan;
|
|
39
146
|
}
|
|
40
|
-
async function planVerificationSimulation({ workflow, mockedNodeNames, declaredOutputFixtures, workflowId, logger, }) {
|
|
147
|
+
async function planVerificationSimulation({ workflow, mockedNodeNames, declaredOutputFixtures, workflowId, outputSchemaLookup, logger, }) {
|
|
41
148
|
let nodeSimulationPlan;
|
|
42
149
|
let simulationFixtures;
|
|
43
150
|
const declaredFixtures = nonEmptyDeclaredFixtures(declaredOutputFixtures);
|
|
44
151
|
try {
|
|
45
152
|
nodeSimulationPlan = await (0, classify_node_destructiveness_service_1.classifyNodesForSimulation)({ workflow, mockedNodeNames });
|
|
46
153
|
nodeSimulationPlan = withDeclaredOutputVerdicts(nodeSimulationPlan, declaredFixtures);
|
|
154
|
+
nodeSimulationPlan = withSimulatedTriggerVerdicts(nodeSimulationPlan, workflow);
|
|
155
|
+
nodeSimulationPlan = withSimulatedCredentiallessAiRootVerdicts(nodeSimulationPlan, workflow, new Set(mockedNodeNames ?? []));
|
|
47
156
|
if (nodeSimulationPlan.length > 0) {
|
|
48
157
|
const planNeedingGeneratedFixtures = nodeSimulationPlan.filter((verdict) => verdict.verdict === 'simulate' && !declaredFixtures?.[verdict.nodeName]?.length);
|
|
49
158
|
const generatedFixtures = planNeedingGeneratedFixtures.length > 0
|
|
50
|
-
? await (0, generate_simulation_fixtures_service_1.generateSimulationFixtures)({
|
|
159
|
+
? await (0, generate_simulation_fixtures_service_1.generateSimulationFixtures)({
|
|
160
|
+
workflow,
|
|
161
|
+
plan: planNeedingGeneratedFixtures,
|
|
162
|
+
outputSchemaLookup,
|
|
163
|
+
})
|
|
51
164
|
: {};
|
|
52
165
|
const fixtures = { ...generatedFixtures, ...declaredFixtures };
|
|
53
166
|
simulationFixtures = Object.keys(fixtures).length > 0 ? fixtures : undefined;
|
|
@@ -68,6 +181,8 @@ async function planVerificationSimulation({ workflow, mockedNodeNames, declaredO
|
|
|
68
181
|
});
|
|
69
182
|
if (declaredFixtures) {
|
|
70
183
|
nodeSimulationPlan = withDeclaredOutputVerdicts(nodeSimulationPlan ?? [], declaredFixtures);
|
|
184
|
+
nodeSimulationPlan = withSimulatedTriggerVerdicts(nodeSimulationPlan, workflow);
|
|
185
|
+
nodeSimulationPlan = withSimulatedCredentiallessAiRootVerdicts(nodeSimulationPlan, workflow, new Set(mockedNodeNames ?? []));
|
|
71
186
|
simulationFixtures = declaredFixtures;
|
|
72
187
|
}
|
|
73
188
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"plan-verification-simulation.js","sourceRoot":"","sources":["../../../src/tools/workflows/plan-verification-simulation.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"plan-verification-simulation.js","sourceRoot":"","sources":["../../../src/tools/workflows/plan-verification-simulation.ts"],"names":[],"mappings":"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"}
|
|
@@ -3,6 +3,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.reconcileSimulationPlan = reconcileSimulationPlan;
|
|
4
4
|
const classify_node_destructiveness_service_1 = require("./classify-node-destructiveness.service");
|
|
5
5
|
const credential_utils_1 = require("./credential-utils");
|
|
6
|
+
const plan_verification_simulation_1 = require("./plan-verification-simulation");
|
|
6
7
|
function isConfiguredCredential(value, credentialType, availableCredentials) {
|
|
7
8
|
if ((0, credential_utils_1.isAiGatewayManagedCredential)(value))
|
|
8
9
|
return true;
|
|
@@ -17,11 +18,10 @@ function nodeCredentials(workflow, nodeName) {
|
|
|
17
18
|
const node = (workflow.nodes ?? []).find((candidate) => candidate.name === nodeName);
|
|
18
19
|
return node?.credentials ? node.credentials : undefined;
|
|
19
20
|
}
|
|
21
|
+
const AI_ROOT_CREDENTIALS_RESTORED_REASON = 'Language model sub-node now has configured credentials — node executes during verification';
|
|
20
22
|
async function reconcileSimulationPlan(args) {
|
|
21
23
|
const { buildOutcome, workflow, availableCredentials } = args;
|
|
22
24
|
const mockedEntries = Object.entries(buildOutcome.mockedCredentialsByNode ?? {});
|
|
23
|
-
if (mockedEntries.length === 0)
|
|
24
|
-
return undefined;
|
|
25
25
|
const satisfiedNames = new Set(mockedEntries
|
|
26
26
|
.filter(([nodeName, mockedTypes]) => {
|
|
27
27
|
const credentials = nodeCredentials(workflow, nodeName);
|
|
@@ -32,23 +32,54 @@ async function reconcileSimulationPlan(args) {
|
|
|
32
32
|
types.every((type) => isConfiguredCredential(credentials[type], type, availableCredentials)));
|
|
33
33
|
})
|
|
34
34
|
.map(([nodeName]) => nodeName));
|
|
35
|
-
if (satisfiedNames.size === 0)
|
|
36
|
-
return undefined;
|
|
37
35
|
const remainingEntries = mockedEntries.filter(([nodeName]) => !satisfiedNames.has(nodeName));
|
|
38
36
|
const remainingMockedNames = (buildOutcome.mockedNodeNames ?? mockedEntries.map(([nodeName]) => nodeName)).filter((nodeName) => !satisfiedNames.has(nodeName));
|
|
39
|
-
const
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
37
|
+
const credentiallessRoots = (0, plan_verification_simulation_1.findCredentiallessAiRoots)(workflow, new Set(remainingMockedNames));
|
|
38
|
+
const restoredAiRoots = new Set((buildOutcome.nodeSimulationPlan ?? [])
|
|
39
|
+
.filter((verdict) => verdict.verdict === 'simulate' &&
|
|
40
|
+
verdict.reason === plan_verification_simulation_1.CREDENTIALLESS_AI_ROOT_SIMULATION_REASON &&
|
|
41
|
+
!credentiallessRoots.has(verdict.nodeName))
|
|
42
|
+
.map((verdict) => verdict.nodeName));
|
|
43
|
+
if (satisfiedNames.size === 0 && restoredAiRoots.size === 0)
|
|
44
|
+
return undefined;
|
|
45
|
+
let freshVerdictByName = new Map();
|
|
46
|
+
if (satisfiedNames.size > 0) {
|
|
47
|
+
const scopedWorkflow = {
|
|
48
|
+
...workflow,
|
|
49
|
+
nodes: (workflow.nodes ?? []).filter((node) => typeof node.name === 'string' && satisfiedNames.has(node.name)),
|
|
50
|
+
};
|
|
51
|
+
const freshVerdicts = await (0, classify_node_destructiveness_service_1.classifyNodesForSimulation)({
|
|
52
|
+
workflow: scopedWorkflow,
|
|
53
|
+
mockedNodeNames: remainingMockedNames,
|
|
54
|
+
});
|
|
55
|
+
freshVerdictByName = new Map(freshVerdicts.map((verdict) => [verdict.nodeName, verdict]));
|
|
56
|
+
}
|
|
57
|
+
const nodeSimulationPlan = buildOutcome.nodeSimulationPlan?.map((verdict) => {
|
|
58
|
+
if (satisfiedNames.has(verdict.nodeName)) {
|
|
59
|
+
return freshVerdictByName.get(verdict.nodeName) ?? verdict;
|
|
60
|
+
}
|
|
61
|
+
if (restoredAiRoots.has(verdict.nodeName)) {
|
|
62
|
+
return {
|
|
63
|
+
...verdict,
|
|
64
|
+
verdict: 'execute',
|
|
65
|
+
reason: AI_ROOT_CREDENTIALS_RESTORED_REASON,
|
|
66
|
+
confidence: 'high',
|
|
67
|
+
source: 'deterministic',
|
|
68
|
+
};
|
|
69
|
+
}
|
|
70
|
+
return verdict;
|
|
46
71
|
});
|
|
47
|
-
const
|
|
48
|
-
const
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
72
|
+
const retainedFixtureEntries = Object.entries(buildOutcome.simulationFixtures ?? {}).filter(([nodeName]) => freshVerdictByName.get(nodeName)?.verdict !== 'execute' && !restoredAiRoots.has(nodeName));
|
|
73
|
+
const simulationFixtures = retainedFixtureEntries.length > 0 ? Object.fromEntries(retainedFixtureEntries) : undefined;
|
|
74
|
+
if (satisfiedNames.size === 0) {
|
|
75
|
+
return {
|
|
76
|
+
mockedNodeNames: buildOutcome.mockedNodeNames,
|
|
77
|
+
mockedCredentialTypes: buildOutcome.mockedCredentialTypes,
|
|
78
|
+
mockedCredentialsByNode: buildOutcome.mockedCredentialsByNode,
|
|
79
|
+
nodeSimulationPlan,
|
|
80
|
+
simulationFixtures,
|
|
81
|
+
};
|
|
82
|
+
}
|
|
52
83
|
const hasRemainingMocks = remainingEntries.length > 0;
|
|
53
84
|
const patch = {
|
|
54
85
|
mockedNodeNames: hasRemainingMocks ? remainingMockedNames : undefined,
|
|
@@ -57,7 +88,7 @@ async function reconcileSimulationPlan(args) {
|
|
|
57
88
|
: undefined,
|
|
58
89
|
mockedCredentialsByNode: hasRemainingMocks ? Object.fromEntries(remainingEntries) : undefined,
|
|
59
90
|
nodeSimulationPlan,
|
|
60
|
-
simulationFixtures
|
|
91
|
+
simulationFixtures,
|
|
61
92
|
};
|
|
62
93
|
if (!hasRemainingMocks &&
|
|
63
94
|
!buildOutcome.hasUnresolvedPlaceholders &&
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"reconcile-simulation-plan.js","sourceRoot":"","sources":["../../../src/tools/workflows/reconcile-simulation-plan.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"reconcile-simulation-plan.js","sourceRoot":"","sources":["../../../src/tools/workflows/reconcile-simulation-plan.ts"],"names":[],"mappings":"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"}
|
|
@@ -4,6 +4,7 @@ exports.buildCredentialMap = buildCredentialMap;
|
|
|
4
4
|
exports.buildCredentialResolutionNote = buildCredentialResolutionNote;
|
|
5
5
|
exports.resolveCredentials = resolveCredentials;
|
|
6
6
|
const credential_utils_1 = require("./credential-utils");
|
|
7
|
+
const setup_workflow_service_1 = require("./setup-workflow.service");
|
|
7
8
|
async function buildCredentialMap(credentialService) {
|
|
8
9
|
const map = new Map();
|
|
9
10
|
try {
|
|
@@ -37,9 +38,12 @@ function buildCredentialResolutionNote(resolvedCredentialsByNode) {
|
|
|
37
38
|
sentences.push(`Connected existing credential(s) automatically: ${storedParts.join('; ')}.`);
|
|
38
39
|
}
|
|
39
40
|
if (gatewayParts.length > 0) {
|
|
40
|
-
sentences.push(`
|
|
41
|
+
sentences.push(`Set up automatically with n8n credits (no API key required) for: ${gatewayParts.join('; ')}.`);
|
|
41
42
|
}
|
|
42
43
|
sentences.push('These are already set up — do not ask the user to connect or create them, and do not route them to credential setup.');
|
|
44
|
+
if (gatewayParts.length > 0) {
|
|
45
|
+
sentences.push('Briefly let the user know these run on n8n credits and work out of the box, and that they can switch to their own key anytime by editing the credential on the node.');
|
|
46
|
+
}
|
|
43
47
|
return sentences.join(' ');
|
|
44
48
|
}
|
|
45
49
|
async function resolveCredentials(json, workflowId, ctx, availableCredentials) {
|
|
@@ -157,6 +161,36 @@ async function resolveCredentials(json, workflowId, ctx, availableCredentials) {
|
|
|
157
161
|
mockedNodeNames.push(node.name);
|
|
158
162
|
}
|
|
159
163
|
}
|
|
164
|
+
for (const node of json.nodes ?? []) {
|
|
165
|
+
if (!node.name)
|
|
166
|
+
continue;
|
|
167
|
+
const requiredTypes = await (0, setup_workflow_service_1.getValidCredentialTypes)(ctx, node);
|
|
168
|
+
for (const credType of requiredTypes) {
|
|
169
|
+
const creds = (node.credentials ?? {});
|
|
170
|
+
const existing = creds[credType];
|
|
171
|
+
if (existing !== undefined && existing !== null)
|
|
172
|
+
continue;
|
|
173
|
+
const hasStored = (availableCredentials?.get(credType)?.length ?? 0) > 0;
|
|
174
|
+
if (hasStored)
|
|
175
|
+
continue;
|
|
176
|
+
if (!(await isGatewayCredentialType(credType)))
|
|
177
|
+
continue;
|
|
178
|
+
node.credentials ??= {};
|
|
179
|
+
node.credentials[credType] = {
|
|
180
|
+
...credential_utils_1.AI_GATEWAY_CREDENTIAL,
|
|
181
|
+
name: credential_utils_1.N8N_CONNECT_DISPLAY_NAME,
|
|
182
|
+
};
|
|
183
|
+
resolvedCredentialsByNode[node.name] ??= [];
|
|
184
|
+
resolvedCredentialsByNode[node.name].push({
|
|
185
|
+
type: credType,
|
|
186
|
+
id: null,
|
|
187
|
+
name: credential_utils_1.N8N_CONNECT_DISPLAY_NAME,
|
|
188
|
+
__aiGatewayManaged: true,
|
|
189
|
+
});
|
|
190
|
+
if (!mockedNodeNames.includes(node.name))
|
|
191
|
+
mockedNodeNames.push(node.name);
|
|
192
|
+
}
|
|
193
|
+
}
|
|
160
194
|
return {
|
|
161
195
|
mockedNodeNames,
|
|
162
196
|
mockedCredentialTypes: [...mockedCredentialTypesSet],
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"resolve-credentials.js","sourceRoot":"","sources":["../../../src/tools/workflows/resolve-credentials.ts"],"names":[],"mappings":";;;;;AAWA,yDAAqF;
|
|
1
|
+
{"version":3,"file":"resolve-credentials.js","sourceRoot":"","sources":["../../../src/tools/workflows/resolve-credentials.ts"],"names":[],"mappings":"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"}
|