@n8n/instance-ai 1.23.2 → 1.24.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 +5 -2
- package/dist/agent/instance-agent.js.map +1 -1
- package/dist/agent/system-prompt.d.ts +1 -0
- package/dist/agent/system-prompt.js +15 -1
- package/dist/agent/system-prompt.js.map +1 -1
- package/dist/build.tsbuildinfo +1 -1
- package/dist/error-formatting.js +3 -7
- package/dist/error-formatting.js.map +1 -1
- package/dist/errors/folder-resolution.error.d.ts +6 -0
- package/dist/errors/folder-resolution.error.js +13 -0
- package/dist/errors/folder-resolution.error.js.map +1 -0
- package/dist/errors/workflow-snapshot-changed.error.d.ts +4 -0
- package/dist/errors/workflow-snapshot-changed.error.js +11 -0
- package/dist/errors/workflow-snapshot-changed.error.js.map +1 -0
- package/dist/index.d.ts +9 -2
- package/dist/index.js +19 -3
- package/dist/index.js.map +1 -1
- package/dist/knowledge-base/extract-builder-templates-archive.js +2 -4
- package/dist/knowledge-base/extract-builder-templates-archive.js.map +1 -1
- package/dist/runtime/background-task-manager.d.ts +3 -1
- package/dist/runtime/background-task-manager.js +15 -1
- package/dist/runtime/background-task-manager.js.map +1 -1
- package/dist/runtime/liveness-policy.js.map +1 -1
- package/dist/runtime/resumable-stream-executor.d.ts +1 -2
- package/dist/runtime/resumable-stream-executor.js +4 -17
- 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 +18 -0
- package/dist/runtime/run-state-registry.js.map +1 -1
- package/dist/runtime/stream-runner.d.ts +0 -2
- package/dist/runtime/stream-runner.js +0 -1
- package/dist/runtime/stream-runner.js.map +1 -1
- package/dist/storage/agent-tree-snapshot.d.ts +0 -4
- package/dist/stream/consume-with-hitl.d.ts +0 -3
- package/dist/stream/consume-with-hitl.js +0 -2
- package/dist/stream/consume-with-hitl.js.map +1 -1
- package/dist/tools/conversation-history.schema.d.ts +231 -0
- package/dist/tools/conversation-history.schema.js +36 -0
- package/dist/tools/conversation-history.schema.js.map +1 -0
- package/dist/tools/conversation-history.tool.d.ts +2 -0
- package/dist/tools/conversation-history.tool.js +135 -0
- package/dist/tools/conversation-history.tool.js.map +1 -0
- package/dist/tools/credentials.tool.d.ts +3 -0
- package/dist/tools/credentials.tool.js +65 -0
- package/dist/tools/credentials.tool.js.map +1 -1
- package/dist/tools/data-tables.tool.js +59 -14
- package/dist/tools/data-tables.tool.js.map +1 -1
- package/dist/tools/evals/eval-config.tool.js +3 -5
- package/dist/tools/evals/eval-config.tool.js.map +1 -1
- package/dist/tools/index.js +12 -0
- package/dist/tools/index.js.map +1 -1
- package/dist/tools/mcp-servers.tool.js +1 -1
- package/dist/tools/mcp-servers.tool.js.map +1 -1
- package/dist/tools/n8n-docs/registry.d.ts +0 -1
- package/dist/tools/n8n-docs/registry.js +2 -5
- package/dist/tools/n8n-docs/registry.js.map +1 -1
- package/dist/tools/n8n-docs.tool.js +2 -1
- package/dist/tools/n8n-docs.tool.js.map +1 -1
- package/dist/tools/nodes/credential-setupability.json +1792 -0
- package/dist/tools/nodes/setup-preference.d.ts +9 -0
- package/dist/tools/nodes/setup-preference.js +23 -0
- package/dist/tools/nodes/setup-preference.js.map +1 -0
- package/dist/tools/nodes.tool.js +22 -9
- package/dist/tools/nodes.tool.js.map +1 -1
- package/dist/tools/orchestration/agent-target-binding.d.ts +6 -0
- package/dist/tools/orchestration/agent-target-binding.js +56 -32
- package/dist/tools/orchestration/agent-target-binding.js.map +1 -1
- package/dist/tools/orchestration/build-agent.tool.js +20 -3
- package/dist/tools/orchestration/build-agent.tool.js.map +1 -1
- package/dist/tools/orchestration/eval-setup-agent.tool.js +0 -1
- package/dist/tools/orchestration/eval-setup-agent.tool.js.map +1 -1
- package/dist/tools/orchestration/list-agent-capabilities.tool.d.ts +2 -0
- package/dist/tools/orchestration/list-agent-capabilities.tool.js +45 -0
- package/dist/tools/orchestration/list-agent-capabilities.tool.js.map +1 -0
- package/dist/tools/orchestration/verification/prepare-run.d.ts +1 -1
- package/dist/tools/orchestration/verification/prepare-run.js +32 -37
- package/dist/tools/orchestration/verification/prepare-run.js.map +1 -1
- package/dist/tools/orchestration/verification/types.d.ts +1 -0
- package/dist/tools/orchestration/verify-built-workflow.tool.d.ts +3 -0
- package/dist/tools/orchestration/verify-built-workflow.tool.js +8 -2
- package/dist/tools/orchestration/verify-built-workflow.tool.js.map +1 -1
- package/dist/tools/tool-ids.d.ts +2 -0
- package/dist/tools/tool-ids.js +4 -0
- package/dist/tools/tool-ids.js.map +1 -1
- package/dist/tools/workflows/build-workflow.tool.d.ts +32 -0
- package/dist/tools/workflows/build-workflow.tool.js +140 -29
- package/dist/tools/workflows/build-workflow.tool.js.map +1 -1
- package/dist/tools/workflows/generate-simulation-fixtures.service.d.ts +6 -0
- package/dist/tools/workflows/generate-simulation-fixtures.service.js +119 -14
- package/dist/tools/workflows/generate-simulation-fixtures.service.js.map +1 -1
- package/dist/tools/workflows/plan-verification-simulation.js +21 -2
- package/dist/tools/workflows/plan-verification-simulation.js.map +1 -1
- package/dist/tools/workflows/preserve-node-positions.js +33 -9
- package/dist/tools/workflows/preserve-node-positions.js.map +1 -1
- package/dist/tools/workflows/setup-items.d.ts +23 -0
- package/dist/tools/workflows/setup-items.js +154 -0
- package/dist/tools/workflows/setup-items.js.map +1 -0
- package/dist/tools/workflows/summarize-workflow.d.ts +4 -1
- package/dist/tools/workflows/summarize-workflow.js +8 -2
- package/dist/tools/workflows/summarize-workflow.js.map +1 -1
- package/dist/tools/workflows/workflow-build-remediation.js +3 -2
- package/dist/tools/workflows/workflow-build-remediation.js.map +1 -1
- package/dist/tools/workflows/workflow-build-telemetry.d.ts +1 -1
- package/dist/tools/workflows/workflow-build-telemetry.js.map +1 -1
- package/dist/tools/workflows/workflow-file-bindings.d.ts +1 -0
- package/dist/tools/workflows/workflow-file-bindings.js +13 -1
- package/dist/tools/workflows/workflow-file-bindings.js.map +1 -1
- package/dist/tools/workflows/workflow-source-compiler.d.ts +1 -0
- package/dist/tools/workflows/workflow-source-compiler.js +1 -0
- package/dist/tools/workflows/workflow-source-compiler.js.map +1 -1
- package/dist/tools/workflows/workflow-source-materializer.d.ts +28 -0
- package/dist/tools/workflows/workflow-source-materializer.js +98 -0
- package/dist/tools/workflows/workflow-source-materializer.js.map +1 -0
- package/dist/tools/workflows.tool.d.ts +1 -1
- package/dist/tools/workflows.tool.js +195 -23
- package/dist/tools/workflows.tool.js.map +1 -1
- package/dist/tools/workspace.tool.js +8 -3
- package/dist/tools/workspace.tool.js.map +1 -1
- package/dist/tracing/langsmith-tracing.js +3 -5
- package/dist/tracing/langsmith-tracing.js.map +1 -1
- package/dist/tracing/trace-payloads.js +4 -5
- package/dist/tracing/trace-payloads.js.map +1 -1
- package/dist/types.d.ts +92 -7
- package/dist/types.js +3 -1
- package/dist/types.js.map +1 -1
- package/dist/utils/model-config-id.d.ts +1 -0
- package/dist/utils/model-config-id.js +24 -0
- package/dist/utils/model-config-id.js.map +1 -0
- package/dist/utils/node-keyed-items.d.ts +1 -0
- package/dist/utils/node-keyed-items.js +10 -0
- package/dist/utils/node-keyed-items.js.map +1 -0
- package/dist/workflow-loop/guidance.js +1 -1
- package/dist/workflow-loop/guidance.js.map +1 -1
- package/dist/workspace/sandbox-setup.js +4 -6
- package/dist/workspace/sandbox-setup.js.map +1 -1
- package/package.json +12 -12
- package/skills/agent-builder/SKILL.md +23 -0
- package/skills/data-table-manager/SKILL.md +34 -3
- package/skills/intent-recognition/SKILL.md +55 -0
- package/skills/workflow-builder/SKILL.md +111 -27
- package/dist/stream/output-redaction.d.ts +0 -31
- package/dist/stream/output-redaction.js +0 -191
- package/dist/stream/output-redaction.js.map +0 -1
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.prepareVerificationRun = prepareVerificationRun;
|
|
4
|
+
const node_keyed_items_1 = require("../../../utils/node-keyed-items");
|
|
4
5
|
const remediation_1 = require("../../../workflow-loop/remediation");
|
|
5
6
|
function getInvalidFixtureOverrideNodeNames(buildOutcome, fixtureOverrides) {
|
|
6
7
|
if (!fixtureOverrides)
|
|
@@ -11,7 +12,7 @@ function getInvalidFixtureOverrideNodeNames(buildOutcome, fixtureOverrides) {
|
|
|
11
12
|
return Object.keys(fixtureOverrides).filter((nodeName) => !simulatedNodeNames.has(nodeName));
|
|
12
13
|
}
|
|
13
14
|
function buildVerificationPinData(buildOutcome, fixtureOverrides) {
|
|
14
|
-
const merged =
|
|
15
|
+
const merged = new Map(Object.entries(buildOutcome.verificationPinData ?? {}));
|
|
15
16
|
const fixtures = buildOutcome.simulationFixtures ?? {};
|
|
16
17
|
const simulatedNodes = [];
|
|
17
18
|
const haltedGateNames = [];
|
|
@@ -21,28 +22,39 @@ function buildVerificationPinData(buildOutcome, fixtureOverrides) {
|
|
|
21
22
|
simulatedNodes.push({ nodeName: verdict.nodeName, reason: verdict.reason });
|
|
22
23
|
if (verdict.haltBranch) {
|
|
23
24
|
haltedGateNames.push(verdict.nodeName);
|
|
24
|
-
merged
|
|
25
|
+
merged.set(verdict.nodeName, []);
|
|
25
26
|
continue;
|
|
26
27
|
}
|
|
27
|
-
const items = fixtures
|
|
28
|
-
merged
|
|
28
|
+
const items = (0, node_keyed_items_1.itemsForNode)(fixtures, verdict.nodeName);
|
|
29
|
+
merged.set(verdict.nodeName, items?.length ? items : [{}]);
|
|
29
30
|
}
|
|
30
31
|
if (fixtureOverrides) {
|
|
31
32
|
for (const [nodeName, items] of Object.entries(fixtureOverrides)) {
|
|
32
33
|
if (haltedGateNames.includes(nodeName))
|
|
33
34
|
continue;
|
|
34
|
-
merged
|
|
35
|
+
merged.set(nodeName, items);
|
|
35
36
|
}
|
|
36
37
|
}
|
|
37
38
|
const gateScript = (buildOutcome.waitGateScripts ?? []).find((script) => haltedGateNames.includes(script.nodeName));
|
|
38
39
|
return {
|
|
39
|
-
verificationPinData:
|
|
40
|
+
verificationPinData: merged.size > 0 ? Object.fromEntries(merged) : undefined,
|
|
40
41
|
simulatedNodes,
|
|
41
42
|
haltedGateNames,
|
|
42
43
|
...(gateScript ? { gateScript } : {}),
|
|
43
44
|
};
|
|
44
45
|
}
|
|
45
|
-
function
|
|
46
|
+
function blocked(reason, guidance) {
|
|
47
|
+
const remediation = (0, remediation_1.createRemediation)({
|
|
48
|
+
category: 'blocked',
|
|
49
|
+
shouldEdit: false,
|
|
50
|
+
reason,
|
|
51
|
+
guidance,
|
|
52
|
+
});
|
|
53
|
+
return { kind: 'blocked', result: { success: false, error: guidance, remediation, guidance } };
|
|
54
|
+
}
|
|
55
|
+
function prepareVerificationRun(buildOutcome, input) {
|
|
56
|
+
const { fixtureOverrides } = input;
|
|
57
|
+
const allowedZeroItemNodes = new Set(input.allowZeroItemFixtures ?? []);
|
|
46
58
|
const haltedOverrideNodeNames = Object.keys(fixtureOverrides ?? {}).filter((nodeName) => (buildOutcome.nodeSimulationPlan ?? []).some((verdict) => verdict.nodeName === nodeName && verdict.verdict === 'simulate' && verdict.haltBranch));
|
|
47
59
|
if (haltedOverrideNodeNames.length > 0) {
|
|
48
60
|
const guidance = `Node(s) ${haltedOverrideNodeNames.join(', ')} pause the workflow for a human decision and sit on a loop — ` +
|
|
@@ -50,42 +62,25 @@ function prepareVerificationRun(buildOutcome, fixtureOverrides) {
|
|
|
50
62
|
'answer forever. Verification drives such gates with scripted decisions where possible, or halts at ' +
|
|
51
63
|
'them otherwise. Treat the scripted/halted result as authoritative and tell the user the approval ' +
|
|
52
64
|
'loop needs a manual end-to-end test for final confirmation.';
|
|
53
|
-
|
|
54
|
-
category: 'blocked',
|
|
55
|
-
shouldEdit: false,
|
|
56
|
-
reason: 'halted_wait_gate_override',
|
|
57
|
-
guidance,
|
|
58
|
-
});
|
|
59
|
-
return {
|
|
60
|
-
kind: 'blocked',
|
|
61
|
-
result: {
|
|
62
|
-
success: false,
|
|
63
|
-
error: guidance,
|
|
64
|
-
remediation,
|
|
65
|
-
guidance,
|
|
66
|
-
},
|
|
67
|
-
};
|
|
65
|
+
return blocked('halted_wait_gate_override', guidance);
|
|
68
66
|
}
|
|
69
67
|
const invalidFixtureOverrideNodeNames = getInvalidFixtureOverrideNodeNames(buildOutcome, fixtureOverrides);
|
|
70
68
|
if (invalidFixtureOverrideNodeNames.length > 0) {
|
|
71
69
|
const guidance = 'Fixture overrides can only target nodes already classified as simulated in the build outcome. ' +
|
|
72
70
|
`Invalid override node(s): ${invalidFixtureOverrideNodeNames.join(', ')}. ` +
|
|
73
71
|
'Do not run the workflow live; rebuild with declared output fixtures or override a simulated node.';
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
guidance,
|
|
87
|
-
},
|
|
88
|
-
};
|
|
72
|
+
return blocked('invalid_fixture_override', guidance);
|
|
73
|
+
}
|
|
74
|
+
const zeroItemOverrideNodeNames = Object.entries(fixtureOverrides ?? {})
|
|
75
|
+
.filter(([nodeName, items]) => items.length === 0 && !allowedZeroItemNodes.has(nodeName))
|
|
76
|
+
.map(([nodeName]) => nodeName);
|
|
77
|
+
if (zeroItemOverrideNodeNames.length > 0) {
|
|
78
|
+
const guidance = `Fixture override(s) for ${zeroItemOverrideNodeNames.join(', ')} pin zero items. ` +
|
|
79
|
+
'An empty item list stops every downstream node, so verification would pass without running ' +
|
|
80
|
+
'the branch you are checking. Give each node at least one plausible item instead. ' +
|
|
81
|
+
'If the empty result IS the case under test, repeat the call with the node listed in ' +
|
|
82
|
+
'`allowZeroItemFixtures` and report that the downstream branch stayed unverified.';
|
|
83
|
+
return blocked('zero_item_fixture_override', guidance);
|
|
89
84
|
}
|
|
90
85
|
return { kind: 'ready', prepared: buildVerificationPinData(buildOutcome, fixtureOverrides) };
|
|
91
86
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"prepare-run.js","sourceRoot":"","sources":["../../../../src/tools/orchestration/verification/prepare-run.ts"],"names":[],"mappings":";;;AACA,oEAAuE;AAevE,SAAS,kCAAkC,CAC1C,YAAkC,EAClC,gBAAqD;IAErD,IAAI,CAAC,gBAAgB;QAAE,OAAO,EAAE,CAAC;IAEjC,MAAM,kBAAkB,GAAG,IAAI,GAAG,CACjC,CAAC,YAAY,CAAC,kBAAkB,IAAI,EAAE,CAAC;SACrC,MAAM,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,OAAO,KAAK,UAAU,CAAC;SACnD,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,QAAQ,CAAC,CACpC,CAAC;IAEF,OAAO,MAAM,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC,MAAM,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC,kBAAkB,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC;AAC9F,CAAC;
|
|
1
|
+
{"version":3,"file":"prepare-run.js","sourceRoot":"","sources":["../../../../src/tools/orchestration/verification/prepare-run.ts"],"names":[],"mappings":"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"}
|
|
@@ -9,6 +9,7 @@ export interface VerifyToolInput {
|
|
|
9
9
|
includeData?: boolean;
|
|
10
10
|
maxDataChars?: number;
|
|
11
11
|
fixtureOverrides?: Record<string, Array<Record<string, unknown>>>;
|
|
12
|
+
allowZeroItemFixtures?: string[];
|
|
12
13
|
}
|
|
13
14
|
export interface ResolvedVerifyInput extends VerifyToolInput {
|
|
14
15
|
workItemId: string;
|
|
@@ -9,6 +9,7 @@ export declare const verifyBuiltWorkflowInputSchema: z.ZodObject<{
|
|
|
9
9
|
includeData: z.ZodOptional<z.ZodBoolean>;
|
|
10
10
|
maxDataChars: z.ZodOptional<z.ZodNumber>;
|
|
11
11
|
fixtureOverrides: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodArray<z.ZodRecord<z.ZodString, z.ZodUnknown>, "many">>>;
|
|
12
|
+
allowZeroItemFixtures: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
|
|
12
13
|
}, "strip", z.ZodTypeAny, {
|
|
13
14
|
workItemId?: string | undefined;
|
|
14
15
|
workflowId: string;
|
|
@@ -18,6 +19,7 @@ export declare const verifyBuiltWorkflowInputSchema: z.ZodObject<{
|
|
|
18
19
|
includeData?: boolean | undefined;
|
|
19
20
|
maxDataChars?: number | undefined;
|
|
20
21
|
fixtureOverrides?: Record<string, Record<string, unknown>[]> | undefined;
|
|
22
|
+
allowZeroItemFixtures?: string[] | undefined;
|
|
21
23
|
}, {
|
|
22
24
|
workItemId?: string | undefined;
|
|
23
25
|
workflowId: string;
|
|
@@ -27,5 +29,6 @@ export declare const verifyBuiltWorkflowInputSchema: z.ZodObject<{
|
|
|
27
29
|
includeData?: boolean | undefined;
|
|
28
30
|
maxDataChars?: number | undefined;
|
|
29
31
|
fixtureOverrides?: Record<string, Record<string, unknown>[]> | undefined;
|
|
32
|
+
allowZeroItemFixtures?: string[] | undefined;
|
|
30
33
|
}>;
|
|
31
34
|
export declare function createVerifyBuiltWorkflowTool(context: OrchestrationContext): import("@n8n/agents").BuiltTool;
|
|
@@ -60,7 +60,13 @@ exports.verifyBuiltWorkflowInputSchema = zod_1.z.object({
|
|
|
60
60
|
fixtureOverrides: zod_1.z
|
|
61
61
|
.record(zod_1.z.array(zod_1.z.record(zod_1.z.unknown())))
|
|
62
62
|
.optional()
|
|
63
|
-
.describe('Optional per-run output fixtures keyed by node name. Only nodes already classified as simulated in the build outcome may be overridden. Use this for alternate deterministic scenarios, not raw trigger input.'
|
|
63
|
+
.describe('Optional per-run output fixtures keyed by node name. Only nodes already classified as simulated in the build outcome may be overridden. Use this for alternate deterministic scenarios, not raw trigger input. ' +
|
|
64
|
+
'An empty array is rejected unless the node is also listed in `allowZeroItemFixtures`.'),
|
|
65
|
+
allowZeroItemFixtures: zod_1.z
|
|
66
|
+
.array(zod_1.z.string())
|
|
67
|
+
.optional()
|
|
68
|
+
.describe('Node names whose `fixtureOverrides` entry may be an empty array. Zero items stop every node below, so the run reports success while verifying nothing. ' +
|
|
69
|
+
'List a node here only when the empty branch is what you are verifying, and say so in your report.'),
|
|
64
70
|
});
|
|
65
71
|
const remediationOutputSchema = zod_1.z
|
|
66
72
|
.object({
|
|
@@ -130,7 +136,7 @@ function createVerifyBuiltWorkflowTool(context) {
|
|
|
130
136
|
workflowId,
|
|
131
137
|
});
|
|
132
138
|
}
|
|
133
|
-
const preparedResult = (0, prepare_run_1.prepareVerificationRun)(buildOutcome, resolvedInput
|
|
139
|
+
const preparedResult = (0, prepare_run_1.prepareVerificationRun)(buildOutcome, resolvedInput);
|
|
134
140
|
if (preparedResult.kind === 'blocked') {
|
|
135
141
|
return {
|
|
136
142
|
...preparedResult.result,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"verify-built-workflow.tool.js","sourceRoot":"","sources":["../../../src/tools/orchestration/verify-built-workflow.tool.ts"],"names":[],"mappings":";;;;AAQA,wCAAmC;AACnC,6BAAwB;AAGxB,kEAA6F;AAC7F,oEAGwC;AACxC,4DAAoE;AACpE,kEAA6E;AAC7E,kEAA0E;AAC1E,wEAA+E;AAC/E,iFAAmF;AACnF,8EAAqF;AAErF,MAAM,0BAA0B,GAAG,GAAG,CAAC;AAE1B,QAAA,8BAA8B,GAAG,OAAC,CAAC,MAAM,CAAC;IACtD,UAAU,EAAE,OAAC;SACX,MAAM,EAAE;SACR,QAAQ,EAAE;SACV,QAAQ,CACR,mKAAmK,CACnK;IACF,UAAU,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,2BAA2B,CAAC;IAC5D,SAAS,EAAE,OAAC;SACV,MAAM,CAAC,OAAC,CAAC,OAAO,EAAE,CAAC;SACnB,QAAQ,EAAE;SACV,QAAQ,CACR,yFAAyF;QACxF,mGAAmG;QACnG,mGAAmG;QACnG,+CAA+C;QAC/C,sCAAsC;QACtC,oGAAoG;QACpG,qFAAqF,CACtF;IACF,eAAe,EAAE,OAAC;SAChB,MAAM,EAAE;SACR,GAAG,CAAC,CAAC,CAAC;SACN,QAAQ,EAAE;SACV,QAAQ,CACR,sFAAsF;QACrF,oFAAoF;QACpF,qFAAqF;QACrF,sEAAsE;QACtE,2FAA2F;QAC3F,yEAAyE,CAC1E;IACF,OAAO,EAAE,OAAC;SACR,MAAM,EAAE;SACR,GAAG,EAAE;SACL,GAAG,CAAC,IAAI,CAAC;SACT,GAAG,CAAC,OAAO,CAAC;SACZ,QAAQ,EAAE;SACV,QAAQ,CAAC,gDAAgD,CAAC;IAC5D,WAAW,EAAE,OAAC;SACZ,OAAO,EAAE;SACT,QAAQ,EAAE;SACV,QAAQ,CAAC,6EAA6E,CAAC;IACzF,YAAY,EAAE,OAAC;SACb,MAAM,EAAE;SACR,GAAG,EAAE;SACL,GAAG,CAAC,CAAC,CAAC;SACN,GAAG,CAAC,MAAM,CAAC;SACX,QAAQ,EAAE;SACV,QAAQ,CAAC,wEAAwE,CAAC;IACpF,gBAAgB,EAAE,OAAC;SACjB,MAAM,CAAC,OAAC,CAAC,KAAK,CAAC,OAAC,CAAC,MAAM,CAAC,OAAC,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;SACtC,QAAQ,EAAE;SACV,QAAQ,CACR,
|
|
1
|
+
{"version":3,"file":"verify-built-workflow.tool.js","sourceRoot":"","sources":["../../../src/tools/orchestration/verify-built-workflow.tool.ts"],"names":[],"mappings":"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"}
|
package/dist/tools/tool-ids.d.ts
CHANGED
|
@@ -14,6 +14,7 @@ export declare const DOMAIN_TOOL_IDS: {
|
|
|
14
14
|
readonly PARSE_FILE: 'parse-file';
|
|
15
15
|
readonly AGENTS: 'agents';
|
|
16
16
|
readonly MCP_SERVERS: 'mcp-servers';
|
|
17
|
+
readonly CONVERSATION_HISTORY: 'conversation-history';
|
|
17
18
|
};
|
|
18
19
|
export declare const COMPILED_WORKFLOW_TRACE_RUN_NAME = "compiled-workflow";
|
|
19
20
|
export declare const AGENT_SNAPSHOT_TRACE_RUN_NAME = "agent-snapshot";
|
|
@@ -27,6 +28,7 @@ export declare const ORCHESTRATION_TOOL_IDS: {
|
|
|
27
28
|
readonly REPORT_VERIFICATION_VERDICT: 'report-verification-verdict';
|
|
28
29
|
readonly APPLY_WORKFLOW_CREDENTIALS: 'apply-workflow-credentials';
|
|
29
30
|
readonly BUILD_AGENT: 'build-agent';
|
|
31
|
+
readonly LIST_AGENT_CAPABILITIES: 'list-agent-capabilities';
|
|
30
32
|
readonly GET_SESSION: 'get-session';
|
|
31
33
|
};
|
|
32
34
|
export declare const WORKSPACE_TOOL_IDS: {
|
package/dist/tools/tool-ids.js
CHANGED
|
@@ -18,6 +18,7 @@ exports.DOMAIN_TOOL_IDS = {
|
|
|
18
18
|
PARSE_FILE: 'parse-file',
|
|
19
19
|
AGENTS: 'agents',
|
|
20
20
|
MCP_SERVERS: 'mcp-servers',
|
|
21
|
+
CONVERSATION_HISTORY: 'conversation-history',
|
|
21
22
|
};
|
|
22
23
|
exports.COMPILED_WORKFLOW_TRACE_RUN_NAME = 'compiled-workflow';
|
|
23
24
|
exports.AGENT_SNAPSHOT_TRACE_RUN_NAME = 'agent-snapshot';
|
|
@@ -31,6 +32,7 @@ exports.ORCHESTRATION_TOOL_IDS = {
|
|
|
31
32
|
REPORT_VERIFICATION_VERDICT: 'report-verification-verdict',
|
|
32
33
|
APPLY_WORKFLOW_CREDENTIALS: 'apply-workflow-credentials',
|
|
33
34
|
BUILD_AGENT: 'build-agent',
|
|
35
|
+
LIST_AGENT_CAPABILITIES: 'list-agent-capabilities',
|
|
34
36
|
GET_SESSION: 'get-session',
|
|
35
37
|
};
|
|
36
38
|
exports.WORKSPACE_TOOL_IDS = {
|
|
@@ -56,9 +58,11 @@ exports.ALWAYS_LOADED_TOOL_NAMES = new Set([
|
|
|
56
58
|
exports.DOMAIN_TOOL_IDS.N8N_DOCS,
|
|
57
59
|
exports.DOMAIN_TOOL_IDS.AGENTS,
|
|
58
60
|
exports.DOMAIN_TOOL_IDS.MCP_SERVERS,
|
|
61
|
+
exports.DOMAIN_TOOL_IDS.CONVERSATION_HISTORY,
|
|
59
62
|
'web-search',
|
|
60
63
|
'fetch-url',
|
|
61
64
|
...((0, agent_feature_enabled_1.isAgentFeatureEnabled)() ? [exports.ORCHESTRATION_TOOL_IDS.BUILD_AGENT] : []),
|
|
65
|
+
...((0, agent_feature_enabled_1.isAgentFeatureEnabled)() ? [exports.ORCHESTRATION_TOOL_IDS.LIST_AGENT_CAPABILITIES] : []),
|
|
62
66
|
]);
|
|
63
67
|
exports.CHECKPOINT_FOLLOW_UP_TOOL_NAMES = new Set([
|
|
64
68
|
exports.ORCHESTRATION_TOOL_IDS.COMPLETE_CHECKPOINT,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tool-ids.js","sourceRoot":"","sources":["../../src/tools/tool-ids.ts"],"names":[],"mappings":";;;AAAA,0EAAuE;AAE1D,QAAA,eAAe,GAAG;IAC9B,SAAS,EAAE,WAAW;IACtB,KAAK,EAAE,OAAO;IACd,WAAW,EAAE,aAAa;IAC1B,UAAU,EAAE,YAAY;IACxB,WAAW,EAAE,aAAa;IAC1B,WAAW,EAAE,aAAa;IAC1B,SAAS,EAAE,WAAW;IACtB,QAAQ,EAAE,UAAU;IACpB,QAAQ,EAAE,UAAU;IACpB,KAAK,EAAE,OAAO;IACd,QAAQ,EAAE,UAAU;IACpB,cAAc,EAAE,gBAAgB;IAChC,UAAU,EAAE,YAAY;IACxB,MAAM,EAAE,QAAQ;IAChB,WAAW,EAAE,aAAa;
|
|
1
|
+
{"version":3,"file":"tool-ids.js","sourceRoot":"","sources":["../../src/tools/tool-ids.ts"],"names":[],"mappings":";;;AAAA,0EAAuE;AAE1D,QAAA,eAAe,GAAG;IAC9B,SAAS,EAAE,WAAW;IACtB,KAAK,EAAE,OAAO;IACd,WAAW,EAAE,aAAa;IAC1B,UAAU,EAAE,YAAY;IACxB,WAAW,EAAE,aAAa;IAC1B,WAAW,EAAE,aAAa;IAC1B,SAAS,EAAE,WAAW;IACtB,QAAQ,EAAE,UAAU;IACpB,QAAQ,EAAE,UAAU;IACpB,KAAK,EAAE,OAAO;IACd,QAAQ,EAAE,UAAU;IACpB,cAAc,EAAE,gBAAgB;IAChC,UAAU,EAAE,YAAY;IACxB,MAAM,EAAE,QAAQ;IAChB,WAAW,EAAE,aAAa;IAC1B,oBAAoB,EAAE,sBAAsB;CACnC,CAAC;AAME,QAAA,gCAAgC,GAAG,mBAAmB,CAAC;AAIvD,QAAA,6BAA6B,GAAG,gBAAgB,CAAC;AAEjD,QAAA,sBAAsB,GAAG;IACrC,YAAY,EAAE,cAAc;IAC5B,YAAY,EAAE,cAAc;IAC5B,qBAAqB,EAAE,uBAAuB;IAC9C,SAAS,EAAE,WAAW;IACtB,mBAAmB,EAAE,qBAAqB;IAC1C,qBAAqB,EAAE,uBAAuB;IAC9C,2BAA2B,EAAE,6BAA6B;IAC1D,0BAA0B,EAAE,4BAA4B;IACxD,WAAW,EAAE,aAAa;IAC1B,uBAAuB,EAAE,yBAAyB;IAClD,WAAW,EAAE,aAAa;CACjB,CAAC;AAEE,QAAA,kBAAkB,GAAG;IACjC,UAAU,EAAE,YAAY;CACf,CAAC;AAEE,QAAA,mBAAmB,GAAG,QAAA,eAAe,CAAC,WAAW,CAAC;AAClD,QAAA,mBAAmB,GAAG,QAAA,eAAe,CAAC,WAAW,CAAC;AAClD,QAAA,mBAAmB,GAAG,QAAA,eAAe,CAAC,WAAW,CAAC;AAClD,QAAA,gBAAgB,GAAG,QAAA,eAAe,CAAC,QAAQ,CAAC;AAC5C,QAAA,gBAAgB,GAAG,QAAA,eAAe,CAAC,QAAQ,CAAC;AAE5C,QAAA,wBAAwB,GAAG,IAAI,GAAG,CAAS,MAAM,CAAC,MAAM,CAAC,QAAA,sBAAsB,CAAC,CAAC,CAAC;AAElF,QAAA,wBAAwB,GAAG,IAAI,GAAG,CAAS;IACvD,QAAA,eAAe,CAAC,QAAQ;IACxB,QAAA,eAAe,CAAC,WAAW;IAC3B,QAAA,eAAe,CAAC,SAAS;IACzB,QAAA,eAAe,CAAC,UAAU;IAC1B,QAAA,eAAe,CAAC,WAAW;IAC3B,QAAA,eAAe,CAAC,UAAU;IAC1B,QAAA,eAAe,CAAC,cAAc;IAC9B,QAAA,eAAe,CAAC,KAAK;IACrB,QAAA,sBAAsB,CAAC,qBAAqB;IAC5C,QAAA,eAAe,CAAC,QAAQ;IAKxB,QAAA,eAAe,CAAC,QAAQ;IACxB,QAAA,eAAe,CAAC,MAAM;IAItB,QAAA,eAAe,CAAC,WAAW;IAC3B,QAAA,eAAe,CAAC,oBAAoB;IACpC,YAAY;IACZ,WAAW;IAIX,GAAG,CAAC,IAAA,6CAAqB,GAAE,CAAC,CAAC,CAAC,CAAC,QAAA,sBAAsB,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IAMxE,GAAG,CAAC,IAAA,6CAAqB,GAAE,CAAC,CAAC,CAAC,CAAC,QAAA,sBAAsB,CAAC,uBAAuB,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;CACpF,CAAC,CAAC;AAEU,QAAA,+BAA+B,GAAG,IAAI,GAAG,CAAS;IAC9D,QAAA,sBAAsB,CAAC,mBAAmB;IAC1C,QAAA,eAAe,CAAC,UAAU;CAC1B,CAAC,CAAC"}
|
|
@@ -28,6 +28,38 @@ export declare const buildWorkflowInputSchema: z.ZodObject<{
|
|
|
28
28
|
preferNewCredentials?: string[] | undefined;
|
|
29
29
|
executionIntent?: "one-off" | "reusable" | undefined;
|
|
30
30
|
}>;
|
|
31
|
+
export declare const buildWorkflowInputSchemaWithFolderPlacement: z.ZodObject<{
|
|
32
|
+
filePath: z.ZodEffects<z.ZodString, string, string>;
|
|
33
|
+
sourceCode: z.ZodOptional<z.ZodString>;
|
|
34
|
+
workflowId: z.ZodOptional<z.ZodString>;
|
|
35
|
+
name: z.ZodOptional<z.ZodString>;
|
|
36
|
+
workItemId: z.ZodOptional<z.ZodString>;
|
|
37
|
+
isSupportingWorkflow: z.ZodOptional<z.ZodBoolean>;
|
|
38
|
+
preferNewCredentials: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
|
|
39
|
+
executionIntent: z.ZodOptional<z.ZodEnum<["one-off", "reusable"]>>;
|
|
40
|
+
} & {
|
|
41
|
+
folderPath: z.ZodOptional<z.ZodString>;
|
|
42
|
+
}, "strict", z.ZodTypeAny, {
|
|
43
|
+
filePath: string;
|
|
44
|
+
sourceCode?: string | undefined;
|
|
45
|
+
workflowId?: string | undefined;
|
|
46
|
+
name?: string | undefined;
|
|
47
|
+
workItemId?: string | undefined;
|
|
48
|
+
isSupportingWorkflow?: boolean | undefined;
|
|
49
|
+
preferNewCredentials?: string[] | undefined;
|
|
50
|
+
executionIntent?: "one-off" | "reusable" | undefined;
|
|
51
|
+
folderPath?: string | undefined;
|
|
52
|
+
}, {
|
|
53
|
+
filePath: string;
|
|
54
|
+
sourceCode?: string | undefined;
|
|
55
|
+
workflowId?: string | undefined;
|
|
56
|
+
name?: string | undefined;
|
|
57
|
+
workItemId?: string | undefined;
|
|
58
|
+
isSupportingWorkflow?: boolean | undefined;
|
|
59
|
+
preferNewCredentials?: string[] | undefined;
|
|
60
|
+
executionIntent?: "one-off" | "reusable" | undefined;
|
|
61
|
+
folderPath?: string | undefined;
|
|
62
|
+
}>;
|
|
31
63
|
export declare function autoImportMissingSdkSymbols(source: string, errors: string[]): {
|
|
32
64
|
source: string;
|
|
33
65
|
symbols: string[];
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.buildWorkflowInputSchema = void 0;
|
|
3
|
+
exports.buildWorkflowInputSchemaWithFolderPlacement = exports.buildWorkflowInputSchema = void 0;
|
|
4
4
|
exports.autoImportMissingSdkSymbols = autoImportMissingSdkSymbols;
|
|
5
5
|
exports.createBuildWorkflowTool = createBuildWorkflowTool;
|
|
6
6
|
const agents_1 = require("@n8n/agents");
|
|
@@ -17,6 +17,7 @@ const plan_verification_simulation_1 = require("./plan-verification-simulation")
|
|
|
17
17
|
const preserve_node_positions_1 = require("./preserve-node-positions");
|
|
18
18
|
const resolve_credentials_1 = require("./resolve-credentials");
|
|
19
19
|
const resolved_credential_schema_1 = require("./resolved-credential.schema");
|
|
20
|
+
const setup_items_1 = require("./setup-items");
|
|
20
21
|
const setup_skip_state_1 = require("./setup-skip-state");
|
|
21
22
|
const setup_workflow_service_1 = require("./setup-workflow.service");
|
|
22
23
|
const workflow_build_context_1 = require("./workflow-build-context");
|
|
@@ -29,6 +30,7 @@ const workflow_json_utils_1 = require("./workflow-json-utils");
|
|
|
29
30
|
const workflow_node_diff_1 = require("./workflow-node-diff");
|
|
30
31
|
const workflow_source_compiler_1 = require("./workflow-source-compiler");
|
|
31
32
|
const workflow_validation_warnings_1 = require("./workflow-validation-warnings");
|
|
33
|
+
const folder_resolution_error_1 = require("../../errors/folder-resolution.error");
|
|
32
34
|
const workflow_save_conflict_error_1 = require("../../errors/workflow-save-conflict.error");
|
|
33
35
|
const runtime_skills_1 = require("../../skills/runtime-skills");
|
|
34
36
|
const langsmith_tracing_1 = require("../../tracing/langsmith-tracing");
|
|
@@ -109,6 +111,34 @@ exports.buildWorkflowInputSchema = zod_1.z
|
|
|
109
111
|
'anything the user may run again.'),
|
|
110
112
|
})
|
|
111
113
|
.strict();
|
|
114
|
+
const FOLDER_PATH_PLACEMENT_DESCRIPTION = 'Folder to create the NEW workflow in, named the way the user named it — "Clients/Acme", "Acme". ' +
|
|
115
|
+
'Pass it whenever the workflow has a clear home: the user named a folder, or the related workflows you read live there. ' +
|
|
116
|
+
'Resolved strictly (exact path, then folder name, then path suffix), never fuzzy: an unresolved folder fails the build before anything is saved and lists the real folders, so retry with one of those or ask the user. ' +
|
|
117
|
+
'New workflows only — to move an existing workflow use `workspace(action="move-workflow-to-folder")`.';
|
|
118
|
+
exports.buildWorkflowInputSchemaWithFolderPlacement = exports.buildWorkflowInputSchema
|
|
119
|
+
.extend({
|
|
120
|
+
folderPath: zod_1.z.string().optional().describe(FOLDER_PATH_PLACEMENT_DESCRIPTION),
|
|
121
|
+
})
|
|
122
|
+
.strict();
|
|
123
|
+
function pickBuildWorkflowInputSchema(context) {
|
|
124
|
+
return context.folderExplorationEnabled === true
|
|
125
|
+
? exports.buildWorkflowInputSchemaWithFolderPlacement
|
|
126
|
+
: exports.buildWorkflowInputSchema;
|
|
127
|
+
}
|
|
128
|
+
function formatFolderPlacementFailure(failure) {
|
|
129
|
+
const candidates = failure.candidates.length > 0
|
|
130
|
+
? ` Folders in this project: ${failure.candidates.map((path) => `"${path}"`).join(', ')}.`
|
|
131
|
+
: '';
|
|
132
|
+
const retry = ' Re-run `build-workflow` with one of those paths as `folderPath`, or ask the user which folder they mean. Do NOT guess a folder from workflow names, and do NOT drop `folderPath` to save at the project root unless the user agrees.';
|
|
133
|
+
switch (failure.reason) {
|
|
134
|
+
case 'ambiguous':
|
|
135
|
+
return `Folder "${failure.requested}" matches more than one folder, so the workflow was NOT created.${candidates}${retry}`;
|
|
136
|
+
case 'unsupported':
|
|
137
|
+
return `Folders are not available on this instance, so the workflow was NOT created in "${failure.requested}". Tell the user, and re-run without \`folderPath\` only if they agree to a root-level workflow.`;
|
|
138
|
+
default:
|
|
139
|
+
return `No folder matches "${failure.requested}", so the workflow was NOT created.${candidates}${retry}`;
|
|
140
|
+
}
|
|
141
|
+
}
|
|
112
142
|
const triggerNodeOutputSchema = zod_1.z.object({
|
|
113
143
|
nodeName: zod_1.z.string(),
|
|
114
144
|
nodeType: zod_1.z.string(),
|
|
@@ -255,6 +285,39 @@ async function handleValidationFailure(args) {
|
|
|
255
285
|
warnings: (0, workflow_build_context_1.combineWarnings)(informational.map((w) => (0, workflow_build_context_1.formatWarning)(w.code, w.message))),
|
|
256
286
|
};
|
|
257
287
|
}
|
|
288
|
+
const buildWorkflowOutputSchema = zod_1.z.object({
|
|
289
|
+
success: zod_1.z.boolean(),
|
|
290
|
+
filePath: zod_1.z.string(),
|
|
291
|
+
sourceHash: zod_1.z.string().optional(),
|
|
292
|
+
workflowId: zod_1.z.string().optional(),
|
|
293
|
+
workflowName: zod_1.z.string().optional(),
|
|
294
|
+
workItemId: zod_1.z.string().optional(),
|
|
295
|
+
triggerNodes: zod_1.z.array(triggerNodeOutputSchema).optional(),
|
|
296
|
+
verificationReadiness: verificationReadinessOutputSchema.optional(),
|
|
297
|
+
executionIntent: zod_1.z.enum(['one-off', 'reusable']).optional(),
|
|
298
|
+
setupRequirement: setupRequirementOutputSchema.optional(),
|
|
299
|
+
postBuildFlow: postBuildFlowOutputSchema.optional(),
|
|
300
|
+
isSupportingWorkflow: zod_1.z.boolean().optional(),
|
|
301
|
+
mockedNodeNames: zod_1.z.array(zod_1.z.string()).optional(),
|
|
302
|
+
mockedCredentialTypes: zod_1.z.array(zod_1.z.string()).optional(),
|
|
303
|
+
mockedCredentialsByNode: zod_1.z.record(zod_1.z.array(zod_1.z.string())).optional(),
|
|
304
|
+
resolvedCredentialsByNode: zod_1.z.record(zod_1.z.array(resolved_credential_schema_1.resolvedCredentialSchema)).optional(),
|
|
305
|
+
credentialResolutionNote: zod_1.z.string().optional(),
|
|
306
|
+
referencedWorkflowIds: zod_1.z.array(zod_1.z.string()).optional(),
|
|
307
|
+
hasUnresolvedPlaceholders: zod_1.z.boolean().optional(),
|
|
308
|
+
denied: zod_1.z.boolean().optional(),
|
|
309
|
+
reason: zod_1.z.string().optional(),
|
|
310
|
+
remediation: workflow_loop_state_1.remediationMetadataSchema.optional(),
|
|
311
|
+
errors: zod_1.z.array(zod_1.z.string()).optional(),
|
|
312
|
+
warnings: zod_1.z.array(zod_1.z.string()).optional(),
|
|
313
|
+
});
|
|
314
|
+
function pickBuildWorkflowOutputSchema(context) {
|
|
315
|
+
return context.folderExplorationEnabled === true
|
|
316
|
+
? buildWorkflowOutputSchema.extend({
|
|
317
|
+
folder: zod_1.z.object({ id: zod_1.z.string(), name: zod_1.z.string(), path: zod_1.z.string() }).optional(),
|
|
318
|
+
})
|
|
319
|
+
: buildWorkflowOutputSchema;
|
|
320
|
+
}
|
|
258
321
|
function createBuildWorkflowTool(context) {
|
|
259
322
|
const failureTracker = new build_failure_tracker_1.BuildFailureTracker();
|
|
260
323
|
return new agents_1.Tool('build-workflow')
|
|
@@ -264,33 +327,8 @@ function createBuildWorkflowTool(context) {
|
|
|
264
327
|
'Use TypeScript SDK .workflow.ts source for new and existing workflows. ' +
|
|
265
328
|
'Prefer writing the file with `workspace_write_file` / `workspace_str_replace_file` so `workflow-sdk validate` can run on it, then call this tool with filePath. ' +
|
|
266
329
|
'For a one-shot create/rewrite you may pass `sourceCode` instead (the tool writes filePath and builds).')
|
|
267
|
-
.input(
|
|
268
|
-
.output(
|
|
269
|
-
success: zod_1.z.boolean(),
|
|
270
|
-
filePath: zod_1.z.string(),
|
|
271
|
-
sourceHash: zod_1.z.string().optional(),
|
|
272
|
-
workflowId: zod_1.z.string().optional(),
|
|
273
|
-
workflowName: zod_1.z.string().optional(),
|
|
274
|
-
workItemId: zod_1.z.string().optional(),
|
|
275
|
-
triggerNodes: zod_1.z.array(triggerNodeOutputSchema).optional(),
|
|
276
|
-
verificationReadiness: verificationReadinessOutputSchema.optional(),
|
|
277
|
-
executionIntent: zod_1.z.enum(['one-off', 'reusable']).optional(),
|
|
278
|
-
setupRequirement: setupRequirementOutputSchema.optional(),
|
|
279
|
-
postBuildFlow: postBuildFlowOutputSchema.optional(),
|
|
280
|
-
isSupportingWorkflow: zod_1.z.boolean().optional(),
|
|
281
|
-
mockedNodeNames: zod_1.z.array(zod_1.z.string()).optional(),
|
|
282
|
-
mockedCredentialTypes: zod_1.z.array(zod_1.z.string()).optional(),
|
|
283
|
-
mockedCredentialsByNode: zod_1.z.record(zod_1.z.array(zod_1.z.string())).optional(),
|
|
284
|
-
resolvedCredentialsByNode: zod_1.z.record(zod_1.z.array(resolved_credential_schema_1.resolvedCredentialSchema)).optional(),
|
|
285
|
-
credentialResolutionNote: zod_1.z.string().optional(),
|
|
286
|
-
referencedWorkflowIds: zod_1.z.array(zod_1.z.string()).optional(),
|
|
287
|
-
hasUnresolvedPlaceholders: zod_1.z.boolean().optional(),
|
|
288
|
-
denied: zod_1.z.boolean().optional(),
|
|
289
|
-
reason: zod_1.z.string().optional(),
|
|
290
|
-
remediation: workflow_loop_state_1.remediationMetadataSchema.optional(),
|
|
291
|
-
errors: zod_1.z.array(zod_1.z.string()).optional(),
|
|
292
|
-
warnings: zod_1.z.array(zod_1.z.string()).optional(),
|
|
293
|
-
}))
|
|
330
|
+
.input(pickBuildWorkflowInputSchema(context))
|
|
331
|
+
.output(pickBuildWorkflowOutputSchema(context))
|
|
294
332
|
.suspend(confirmationSuspendSchema)
|
|
295
333
|
.resume(confirmationResumeSchema)
|
|
296
334
|
.handler(async (input, ctx) => {
|
|
@@ -364,6 +402,33 @@ function createBuildWorkflowTool(context) {
|
|
|
364
402
|
}
|
|
365
403
|
}
|
|
366
404
|
const targetWorkflowId = binding.workflowId;
|
|
405
|
+
const folderPath = 'folderPath' in input && typeof input.folderPath === 'string'
|
|
406
|
+
? input.folderPath
|
|
407
|
+
: undefined;
|
|
408
|
+
if (folderPath !== undefined && targetWorkflowId) {
|
|
409
|
+
const remediation = (0, remediation_1.createRemediation)({
|
|
410
|
+
category: 'blocked',
|
|
411
|
+
shouldEdit: false,
|
|
412
|
+
reason: 'folder_placement_on_update',
|
|
413
|
+
guidance: '`folderPath` only applies when creating a new workflow. Nothing was saved. Re-run without `folderPath` to update the workflow, and move it with `workspace(action="move-workflow-to-folder")` if the user asked for that.',
|
|
414
|
+
});
|
|
415
|
+
(0, workflow_build_telemetry_1.trackWorkflowSourceBuild)(context, {
|
|
416
|
+
result: 'blocked',
|
|
417
|
+
stage: 'folder',
|
|
418
|
+
binding,
|
|
419
|
+
targetWorkflowId,
|
|
420
|
+
isSupportingWorkflow: input.isSupportingWorkflow,
|
|
421
|
+
remediation,
|
|
422
|
+
errorCount: 1,
|
|
423
|
+
});
|
|
424
|
+
return {
|
|
425
|
+
success: false,
|
|
426
|
+
...(0, workflow_build_context_1.sourceResponseBase)(binding),
|
|
427
|
+
workflowId: targetWorkflowId,
|
|
428
|
+
errors: [remediation.guidance],
|
|
429
|
+
remediation,
|
|
430
|
+
};
|
|
431
|
+
}
|
|
367
432
|
const permKey = targetWorkflowId ? 'updateWorkflow' : 'createWorkflow';
|
|
368
433
|
if (context.permissions?.[permKey] === 'blocked') {
|
|
369
434
|
const remediation = (0, remediation_1.createRemediation)({
|
|
@@ -798,11 +863,27 @@ function createBuildWorkflowTool(context) {
|
|
|
798
863
|
(nodeName !== undefined && changedNodeNames.includes(nodeName));
|
|
799
864
|
const hasPlaceholders = (json.nodes ?? []).some((n) => isInSetupScope(n.name) && (0, placeholder_1.hasPlaceholderDeep)(n.parameters));
|
|
800
865
|
const createSuccessResponse = async (saved, operation) => {
|
|
801
|
-
const
|
|
866
|
+
const setupItemsEmitter = (0, setup_items_1.isSetupPanelEnabled)(context)
|
|
867
|
+
? context.setupItemsEmitter
|
|
868
|
+
: undefined;
|
|
869
|
+
const analyzedRequests = await (0, setup_workflow_service_1.analyzeWorkflow)(context, saved.id, undefined, {
|
|
802
870
|
...(input.preferNewCredentials
|
|
803
871
|
? { preferNewCredentialTypes: input.preferNewCredentials }
|
|
804
872
|
: {}),
|
|
873
|
+
...(setupItemsEmitter ? { includeSettled: true } : {}),
|
|
805
874
|
});
|
|
875
|
+
const setupRequests = analyzedRequests.filter((request) => !!request.needsAction);
|
|
876
|
+
if (setupItemsEmitter) {
|
|
877
|
+
try {
|
|
878
|
+
setupItemsEmitter.emit(saved.id, (0, setup_items_1.buildSetupItemsFromSetupRequests)(saved.id, analyzedRequests));
|
|
879
|
+
}
|
|
880
|
+
catch (error) {
|
|
881
|
+
context.logger.warn('Failed to emit setup-items snapshot for built workflow', {
|
|
882
|
+
workflowId: saved.id,
|
|
883
|
+
error: error instanceof Error ? error.message : String(error),
|
|
884
|
+
});
|
|
885
|
+
}
|
|
886
|
+
}
|
|
806
887
|
const { pending: pendingSetupRequests, skippedByUser: skippedSetupRequests } = (0, setup_skip_state_1.partitionSkippedSetupRequests)(setupRequests, saved.id, (0, setup_skip_state_1.getSkippedSetupSubjects)(context));
|
|
807
888
|
const needsSetupInScope = (request) => request.needsAction === true && isInSetupScope(request.node.name);
|
|
808
889
|
const workflowNeedsSetup = pendingSetupRequests.some(needsSetupInScope);
|
|
@@ -907,6 +988,7 @@ function createBuildWorkflowTool(context) {
|
|
|
907
988
|
workflowId: saved.id,
|
|
908
989
|
workflowName: json.name || undefined,
|
|
909
990
|
workItemId: resolvedWorkItemId,
|
|
991
|
+
...(saved.folder ? { folder: saved.folder } : {}),
|
|
910
992
|
isSupportingWorkflow: isSupportingWorkflow || undefined,
|
|
911
993
|
triggerNodes,
|
|
912
994
|
verificationReadiness: outcome.verificationReadiness,
|
|
@@ -942,12 +1024,41 @@ function createBuildWorkflowTool(context) {
|
|
|
942
1024
|
}
|
|
943
1025
|
const created = await context.workflowService.createFromWorkflowJSON(json, {
|
|
944
1026
|
markAsAiTemporary: true,
|
|
1027
|
+
...(folderPath !== undefined ? { folderPath } : {}),
|
|
945
1028
|
});
|
|
946
1029
|
await (0, workflow_build_context_1.recordSessionOwnedWorkflow)(context, created.id);
|
|
947
1030
|
return await createSuccessResponse(created, 'create');
|
|
948
1031
|
}
|
|
949
1032
|
catch (error) {
|
|
950
1033
|
const message = error instanceof Error ? error.message : 'Unknown error';
|
|
1034
|
+
if (error instanceof folder_resolution_error_1.FolderResolutionError) {
|
|
1035
|
+
const failureText = formatFolderPlacementFailure(error.folderResolution);
|
|
1036
|
+
const remediation = (0, remediation_1.createRemediation)({
|
|
1037
|
+
category: 'blocked',
|
|
1038
|
+
shouldEdit: false,
|
|
1039
|
+
reason: `folder_${error.folderResolution.reason.replace(/-/g, '_')}`,
|
|
1040
|
+
guidance: failureText,
|
|
1041
|
+
});
|
|
1042
|
+
(0, workflow_build_telemetry_1.trackWorkflowSourceBuild)(context, {
|
|
1043
|
+
result: 'failure',
|
|
1044
|
+
stage: 'folder',
|
|
1045
|
+
binding,
|
|
1046
|
+
targetWorkflowId,
|
|
1047
|
+
saveOperation: 'create',
|
|
1048
|
+
isSupportingWorkflow,
|
|
1049
|
+
isAuxiliarySupportingWorkflow,
|
|
1050
|
+
remediation,
|
|
1051
|
+
errorCount: 1,
|
|
1052
|
+
});
|
|
1053
|
+
return {
|
|
1054
|
+
success: false,
|
|
1055
|
+
...(0, workflow_build_context_1.sourceResponseBase)(binding),
|
|
1056
|
+
workflowName: json.name || undefined,
|
|
1057
|
+
workItemId: resolvedWorkItemId,
|
|
1058
|
+
errors: [failureText],
|
|
1059
|
+
remediation,
|
|
1060
|
+
};
|
|
1061
|
+
}
|
|
951
1062
|
if (error instanceof workflow_save_conflict_error_1.WorkflowSaveConflictError) {
|
|
952
1063
|
const remediation = (0, workflow_build_remediation_1.createWorkflowModifiedExternallyRemediation)();
|
|
953
1064
|
binding = await (0, workflow_build_context_1.markSourceBuildFailed)(context, binding, sourceHash);
|