@n8n/instance-ai 1.12.2 → 1.13.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.d.ts +2 -0
- package/dist/agent/apply-agent-thinking.js +41 -0
- package/dist/agent/apply-agent-thinking.js.map +1 -0
- package/dist/agent/instance-agent.js +10 -2
- package/dist/agent/instance-agent.js.map +1 -1
- package/dist/agent/sanitize-mcp-schemas.js +133 -125
- package/dist/agent/sanitize-mcp-schemas.js.map +1 -1
- package/dist/agent/shared-prompts.d.ts +0 -1
- package/dist/agent/shared-prompts.js +4 -11
- package/dist/agent/shared-prompts.js.map +1 -1
- package/dist/agent/sub-agent-debriefing.d.ts +4 -4
- package/dist/agent/system-prompt.js +3 -10
- package/dist/agent/system-prompt.js.map +1 -1
- package/dist/build.tsbuildinfo +1 -1
- package/dist/debug/run-debug-buffer.d.ts +63 -0
- package/dist/debug/run-debug-buffer.js +177 -0
- package/dist/debug/run-debug-buffer.js.map +1 -0
- package/dist/debug/sanitize-debug-snapshot.d.ts +2 -0
- package/dist/debug/sanitize-debug-snapshot.js +88 -0
- package/dist/debug/sanitize-debug-snapshot.js.map +1 -0
- package/dist/error-formatting.js +3 -5
- package/dist/error-formatting.js.map +1 -1
- package/dist/index.d.ts +5 -2
- package/dist/index.js +8 -3
- package/dist/index.js.map +1 -1
- package/dist/knowledge-base/build-templates-index.d.ts +1 -0
- package/dist/knowledge-base/build-templates-index.js +18 -2
- package/dist/knowledge-base/build-templates-index.js.map +1 -1
- package/dist/knowledge-base/materialize-knowledge-base.d.ts +2 -3
- package/dist/knowledge-base/materialize-knowledge-base.js +10 -7
- package/dist/knowledge-base/materialize-knowledge-base.js.map +1 -1
- package/dist/mcp/mcp-client-manager.d.ts +1 -1
- package/dist/mcp/mcp-client-manager.js +13 -9
- package/dist/mcp/mcp-client-manager.js.map +1 -1
- package/dist/runtime/memory-task-registry.d.ts +8 -0
- package/dist/runtime/memory-task-registry.js +42 -0
- package/dist/runtime/memory-task-registry.js.map +1 -0
- package/dist/runtime/resumable-stream-executor.d.ts +3 -0
- package/dist/runtime/resumable-stream-executor.js +171 -90
- package/dist/runtime/resumable-stream-executor.js.map +1 -1
- package/dist/runtime/run-state-registry.d.ts +2 -0
- package/dist/runtime/run-state-registry.js +3 -0
- package/dist/runtime/run-state-registry.js.map +1 -1
- package/dist/runtime/stream-runner.d.ts +3 -0
- package/dist/runtime/stream-runner.js +3 -0
- package/dist/runtime/stream-runner.js.map +1 -1
- package/dist/skills/materialize-runtime-skills.d.ts +3 -3
- package/dist/skills/materialize-runtime-skills.js +1 -1
- package/dist/skills/materialize-runtime-skills.js.map +1 -1
- package/dist/source-map-filter.js +0 -1
- package/dist/source-map-filter.js.map +1 -1
- package/dist/storage/terminal-outcome-storage.d.ts +2 -2
- package/dist/storage/workflow-loop-storage.d.ts +75 -4
- package/dist/stream/map-chunk.js +198 -237
- package/dist/stream/map-chunk.js.map +1 -1
- package/dist/stream/output-redaction.js +2 -2
- package/dist/stream/output-redaction.js.map +1 -1
- package/dist/stream/usage-accumulator.d.ts +90 -0
- package/dist/stream/usage-accumulator.js +89 -0
- package/dist/stream/usage-accumulator.js.map +1 -0
- package/dist/stream/work-summary-accumulator.d.ts +6 -6
- package/dist/tools/attachments/parse-file.tool.js +1 -1
- package/dist/tools/attachments/parse-file.tool.js.map +1 -1
- package/dist/tools/credentials.tool.js +4 -1
- package/dist/tools/credentials.tool.js.map +1 -1
- package/dist/tools/data-tables.tool.js +5 -2
- package/dist/tools/data-tables.tool.js.map +1 -1
- package/dist/tools/evals/column-ref-utils.d.ts +1 -2
- package/dist/tools/evals/column-ref-utils.js +19 -18
- package/dist/tools/evals/column-ref-utils.js.map +1 -1
- package/dist/tools/evals/describe-metric-for-workflow.service.js +7 -25
- package/dist/tools/evals/describe-metric-for-workflow.service.js.map +1 -1
- package/dist/tools/evals/detect-tool-refs.service.js +2 -1
- package/dist/tools/evals/detect-tool-refs.service.js.map +1 -1
- package/dist/tools/evals/eval-data-requirements.service.js +10 -9
- package/dist/tools/evals/eval-data-requirements.service.js.map +1 -1
- package/dist/tools/evals/evals.tool.js +2 -2
- package/dist/tools/evals/evals.tool.js.map +1 -1
- package/dist/tools/evals/extract-rows-from-history.service.js +8 -8
- package/dist/tools/evals/extract-rows-from-history.service.js.map +1 -1
- package/dist/tools/evals/generate-sample-rows.service.d.ts +2 -2
- package/dist/tools/evals/generate-sample-rows.service.js +30 -49
- package/dist/tools/evals/generate-sample-rows.service.js.map +1 -1
- package/dist/tools/evals/generate-tool-ref-pin-data.service.js +10 -23
- package/dist/tools/evals/generate-tool-ref-pin-data.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 +10 -2
- package/dist/tools/executions.tool.js.map +1 -1
- package/dist/tools/filesystem/create-tools-from-mcp-server.d.ts +1 -1
- package/dist/tools/filesystem/create-tools-from-mcp-server.js +8 -10
- package/dist/tools/filesystem/create-tools-from-mcp-server.js.map +1 -1
- package/dist/tools/index.js +1 -1
- package/dist/tools/index.js.map +1 -1
- package/dist/tools/nodes/node-search-engine.js +21 -42
- package/dist/tools/nodes/node-search-engine.js.map +1 -1
- package/dist/tools/nodes/node-search-engine.types.d.ts +2 -0
- package/dist/tools/nodes/preferred-chat-model.d.ts +1 -0
- package/dist/tools/nodes/preferred-chat-model.js +19 -0
- package/dist/tools/nodes/preferred-chat-model.js.map +1 -0
- package/dist/tools/nodes/suggested-nodes-data.js +13 -3
- package/dist/tools/nodes/suggested-nodes-data.js.map +1 -1
- package/dist/tools/nodes.tool.js +32 -7
- package/dist/tools/nodes.tool.js.map +1 -1
- package/dist/tools/orchestration/complete-checkpoint.tool.js +3 -5
- package/dist/tools/orchestration/complete-checkpoint.tool.js.map +1 -1
- package/dist/tools/orchestration/eval-data-agent.tool.js +2 -1
- package/dist/tools/orchestration/eval-data-agent.tool.js.map +1 -1
- package/dist/tools/orchestration/eval-setup-agent.prompt.d.ts +1 -1
- package/dist/tools/orchestration/eval-setup-agent.prompt.js +3 -3
- package/dist/tools/orchestration/report-verification-verdict.tool.d.ts +2 -2
- package/dist/tools/orchestration/report-verification-verdict.tool.js +1 -1
- package/dist/tools/orchestration/report-verification-verdict.tool.js.map +1 -1
- package/dist/tools/orchestration/verify-built-workflow.tool.js +320 -307
- package/dist/tools/orchestration/verify-built-workflow.tool.js.map +1 -1
- package/dist/tools/research.tool.js +1 -1
- 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 +6 -1
- package/dist/tools/shared/ask-user.tool.js.map +1 -1
- package/dist/tools/tool-ids.d.ts +0 -1
- package/dist/tools/tool-ids.js +0 -1
- package/dist/tools/tool-ids.js.map +1 -1
- package/dist/tools/workflows/build-workflow.tool.d.ts +4 -22
- package/dist/tools/workflows/build-workflow.tool.js +373 -317
- package/dist/tools/workflows/build-workflow.tool.js.map +1 -1
- package/dist/tools/workflows/classify-node-destructiveness.service.d.ts +7 -0
- package/dist/tools/workflows/classify-node-destructiveness.service.js +307 -0
- package/dist/tools/workflows/classify-node-destructiveness.service.js.map +1 -0
- package/dist/tools/workflows/generate-simulation-fixtures.service.d.ts +8 -0
- package/dist/tools/workflows/generate-simulation-fixtures.service.js +95 -0
- package/dist/tools/workflows/generate-simulation-fixtures.service.js.map +1 -0
- package/dist/tools/workflows/plan-verification-simulation.d.ts +15 -0
- package/dist/tools/workflows/plan-verification-simulation.js +32 -0
- package/dist/tools/workflows/plan-verification-simulation.js.map +1 -0
- package/dist/tools/workflows/resolve-credentials.d.ts +0 -2
- package/dist/tools/workflows/resolve-credentials.js +0 -13
- package/dist/tools/workflows/resolve-credentials.js.map +1 -1
- package/dist/tools/workflows/setup-workflow.service.js +259 -215
- package/dist/tools/workflows/setup-workflow.service.js.map +1 -1
- package/dist/tools/workflows/validate-workflow.service.js +81 -66
- package/dist/tools/workflows/validate-workflow.service.js.map +1 -1
- package/dist/tools/workflows/workflow-build-context.d.ts +33 -0
- package/dist/tools/workflows/workflow-build-context.js +80 -0
- package/dist/tools/workflows/workflow-build-context.js.map +1 -0
- package/dist/tools/workflows/workflow-build-remediation.d.ts +11 -0
- package/dist/tools/workflows/workflow-build-remediation.js +89 -0
- package/dist/tools/workflows/workflow-build-remediation.js.map +1 -0
- package/dist/tools/workflows/workflow-build-reporting.d.ts +19 -0
- package/dist/tools/workflows/workflow-build-reporting.js +78 -0
- package/dist/tools/workflows/workflow-build-reporting.js.map +1 -0
- package/dist/tools/workflows/workflow-build-routing.d.ts +2 -0
- package/dist/tools/workflows/workflow-build-routing.js +83 -0
- package/dist/tools/workflows/workflow-build-routing.js.map +1 -0
- package/dist/tools/workflows/workflow-build-telemetry.d.ts +18 -0
- package/dist/tools/workflows/workflow-build-telemetry.js +33 -0
- package/dist/tools/workflows/workflow-build-telemetry.js.map +1 -0
- package/dist/tools/workflows/workflow-file-bindings.d.ts +28 -0
- package/dist/tools/workflows/workflow-file-bindings.js +104 -0
- package/dist/tools/workflows/workflow-file-bindings.js.map +1 -0
- package/dist/tools/workflows/workflow-json-utils.d.ts +3 -0
- package/dist/tools/workflows/workflow-json-utils.js +54 -5
- package/dist/tools/workflows/workflow-json-utils.js.map +1 -1
- package/dist/tools/workflows/workflow-source-compiler.d.ts +19 -0
- package/dist/tools/workflows/workflow-source-compiler.js +217 -0
- package/dist/tools/workflows/workflow-source-compiler.js.map +1 -0
- package/dist/tools/workflows/workflow-validation-warnings.d.ts +14 -0
- package/dist/tools/workflows/workflow-validation-warnings.js +28 -0
- package/dist/tools/workflows/workflow-validation-warnings.js.map +1 -0
- package/dist/tools/workflows.tool.js +107 -99
- package/dist/tools/workflows.tool.js.map +1 -1
- package/dist/tracing/langsmith-tracing.js +7 -7
- package/dist/tracing/langsmith-tracing.js.map +1 -1
- package/dist/tracing/trace-payloads.d.ts +2 -1
- package/dist/tracing/trace-payloads.js +152 -114
- package/dist/tracing/trace-payloads.js.map +1 -1
- package/dist/types.d.ts +24 -4
- package/dist/types.js.map +1 -1
- package/dist/utils/eval-agents.d.ts +0 -3
- package/dist/utils/eval-agents.js +3 -11
- package/dist/utils/eval-agents.js.map +1 -1
- package/dist/utils/generate-validated-json.d.ts +16 -0
- package/dist/utils/generate-validated-json.js +38 -0
- package/dist/utils/generate-validated-json.js.map +1 -0
- package/dist/utils/stream-helpers.d.ts +0 -1
- package/dist/utils/stream-helpers.js +5 -8
- package/dist/utils/stream-helpers.js.map +1 -1
- package/dist/workflow-builder/build-failure-tracker.js +25 -1
- package/dist/workflow-builder/build-failure-tracker.js.map +1 -1
- package/dist/workflow-builder/index.d.ts +0 -4
- package/dist/workflow-builder/index.js +1 -11
- package/dist/workflow-builder/index.js.map +1 -1
- package/dist/workflow-loop/guidance.js +14 -15
- package/dist/workflow-loop/guidance.js.map +1 -1
- package/dist/workflow-loop/runtime.js +1 -0
- package/dist/workflow-loop/runtime.js.map +1 -1
- package/dist/workflow-loop/verification-obligation.js +8 -1
- package/dist/workflow-loop/verification-obligation.js.map +1 -1
- package/dist/workflow-loop/workflow-loop-controller.js +17 -1
- package/dist/workflow-loop/workflow-loop-controller.js.map +1 -1
- package/dist/workflow-loop/workflow-loop-state.d.ts +90 -6
- package/dist/workflow-loop/workflow-loop-state.js +13 -1
- package/dist/workflow-loop/workflow-loop-state.js.map +1 -1
- package/dist/workspace/builder-templates-service.d.ts +5 -5
- package/dist/workspace/builder-templates-service.js +17 -14
- package/dist/workspace/builder-templates-service.js.map +1 -1
- package/dist/workspace/create-workspace.js +8 -1
- package/dist/workspace/create-workspace.js.map +1 -1
- package/dist/workspace/prebaked-workspace-bundle.d.ts +2 -2
- package/dist/workspace/prebaked-workspace-bundle.js +5 -5
- package/dist/workspace/prebaked-workspace-bundle.js.map +1 -1
- package/dist/workspace/sandbox-setup.d.ts +1 -1
- package/dist/workspace/sandbox-setup.js +10 -37
- package/dist/workspace/sandbox-setup.js.map +1 -1
- package/dist/workspace/snapshot-manager.d.ts +1 -1
- package/dist/workspace/template-telemetry.js +2 -5
- package/dist/workspace/template-telemetry.js.map +1 -1
- package/dist/workspace/workspace-files.d.ts +1 -1
- package/dist/workspace/workspace-files.js +3 -3
- package/dist/workspace/workspace-files.js.map +1 -1
- package/dist/workspace/workspace-manifest.js +2 -2
- package/dist/workspace/workspace-manifest.js.map +1 -1
- package/dist/workspace/workspace-paths.d.ts +4 -0
- package/dist/workspace/workspace-paths.js +25 -0
- package/dist/workspace/workspace-paths.js.map +1 -0
- package/knowledge-base/reference/open-ai-output-shape.md +79 -0
- package/knowledge-base/reference/workflow-builder-guardrails.md +15 -0
- package/package.json +13 -12
- package/skills/planned-task-runtime/SKILL.md +3 -2
- package/skills/planning/SKILL.md +5 -0
- package/skills/post-build-flow/SKILL.md +25 -9
- package/skills/workflow-builder/SKILL.md +89 -134
- package/dist/tools/workflows/submit-workflow-identity.d.ts +0 -39
- package/dist/tools/workflows/submit-workflow-identity.js +0 -181
- package/dist/tools/workflows/submit-workflow-identity.js.map +0 -1
- package/dist/tools/workflows/submit-workflow.tool.d.ts +0 -223
- package/dist/tools/workflows/submit-workflow.tool.js +0 -491
- package/dist/tools/workflows/submit-workflow.tool.js.map +0 -1
- package/dist/workflow-builder/extract-code.d.ts +0 -5
- package/dist/workflow-builder/extract-code.js +0 -105
- package/dist/workflow-builder/extract-code.js.map +0 -1
- package/dist/workflow-builder/parse-validate.d.ts +0 -10
- package/dist/workflow-builder/parse-validate.js +0 -50
- package/dist/workflow-builder/parse-validate.js.map +0 -1
- package/dist/workflow-builder/patch-code.d.ts +0 -14
- package/dist/workflow-builder/patch-code.js +0 -117
- package/dist/workflow-builder/patch-code.js.map +0 -1
- package/dist/workflow-builder/types.d.ts +0 -11
- package/dist/workflow-builder/types.js +0 -3
- package/dist/workflow-builder/types.js.map +0 -1
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.reportWorkflowBuildOutcome = reportWorkflowBuildOutcome;
|
|
4
|
+
exports.promoteMainWorkflow = promoteMainWorkflow;
|
|
5
|
+
exports.reportFailedWorkflowBuildOutcome = reportFailedWorkflowBuildOutcome;
|
|
6
|
+
const workflow_build_routing_1 = require("./workflow-build-routing");
|
|
7
|
+
async function reportWorkflowBuildOutcome(context, outcome, options = {}) {
|
|
8
|
+
const buildContext = context.workflowBuildContext;
|
|
9
|
+
if (!buildContext)
|
|
10
|
+
return;
|
|
11
|
+
if (options.storeOnRunContext !== false) {
|
|
12
|
+
try {
|
|
13
|
+
await buildContext.onBuildOutcome?.(outcome);
|
|
14
|
+
}
|
|
15
|
+
catch (error) {
|
|
16
|
+
context.logger.warn('Failed to store workflow build outcome on run context', {
|
|
17
|
+
error: error instanceof Error ? error.message : String(error),
|
|
18
|
+
});
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
try {
|
|
22
|
+
await buildContext.workflowTaskService?.reportBuildOutcome(outcome);
|
|
23
|
+
}
|
|
24
|
+
catch (error) {
|
|
25
|
+
context.logger.warn('Failed to report workflow build outcome to workflow loop', {
|
|
26
|
+
workItemId: outcome.workItemId,
|
|
27
|
+
error: error instanceof Error ? error.message : String(error),
|
|
28
|
+
});
|
|
29
|
+
}
|
|
30
|
+
if (options.markPlannedTaskSucceeded === false)
|
|
31
|
+
return;
|
|
32
|
+
try {
|
|
33
|
+
await buildContext.plannedTaskService?.markSucceeded(buildContext.threadId, buildContext.taskId, {
|
|
34
|
+
result: outcome.summary,
|
|
35
|
+
outcome,
|
|
36
|
+
});
|
|
37
|
+
}
|
|
38
|
+
catch (error) {
|
|
39
|
+
context.logger.warn('Failed to mark planned workflow build task succeeded', {
|
|
40
|
+
taskId: buildContext.taskId,
|
|
41
|
+
error: error instanceof Error ? error.message : String(error),
|
|
42
|
+
});
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
async function promoteMainWorkflow(context, workflowId) {
|
|
46
|
+
try {
|
|
47
|
+
await context.workflowService.clearAiTemporary(workflowId);
|
|
48
|
+
}
|
|
49
|
+
catch (error) {
|
|
50
|
+
context.logger.warn(`Failed to clear AI-builder temporary marker on main workflow ${workflowId}: ${error instanceof Error ? error.message : String(error)}`);
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
async function reportFailedWorkflowBuildOutcome(context, input) {
|
|
54
|
+
const buildContext = context.workflowBuildContext;
|
|
55
|
+
const outcome = (0, workflow_build_routing_1.withDeterministicRouting)({
|
|
56
|
+
workItemId: input.workItemId,
|
|
57
|
+
...((buildContext?.runId ?? context.runId)
|
|
58
|
+
? { runId: buildContext?.runId ?? context.runId }
|
|
59
|
+
: {}),
|
|
60
|
+
taskId: input.taskId,
|
|
61
|
+
owner: input.owner,
|
|
62
|
+
plannedTaskId: input.plannedTaskId,
|
|
63
|
+
workflowId: input.targetWorkflowId,
|
|
64
|
+
...(input.sourceFilePath ? { sourceFilePath: input.sourceFilePath } : {}),
|
|
65
|
+
submitted: false,
|
|
66
|
+
triggerType: 'manual_or_testable',
|
|
67
|
+
needsUserInput: false,
|
|
68
|
+
blockingReason: input.remediation.guidance,
|
|
69
|
+
failureSignature: input.errors.join('\n').slice(0, 500),
|
|
70
|
+
remediation: input.remediation,
|
|
71
|
+
summary: input.summary,
|
|
72
|
+
});
|
|
73
|
+
await reportWorkflowBuildOutcome(context, outcome, {
|
|
74
|
+
storeOnRunContext: input.storeOnRunContext,
|
|
75
|
+
markPlannedTaskSucceeded: false,
|
|
76
|
+
});
|
|
77
|
+
}
|
|
78
|
+
//# sourceMappingURL=workflow-build-reporting.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"workflow-build-reporting.js","sourceRoot":"","sources":["../../../src/tools/workflows/workflow-build-reporting.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.withDeterministicRouting = withDeterministicRouting;
|
|
4
|
+
const workflow_json_utils_1 = require("./workflow-json-utils");
|
|
5
|
+
function hasMockedCredentials(outcome) {
|
|
6
|
+
return ((outcome.mockedCredentialTypes?.length ?? 0) > 0 ||
|
|
7
|
+
Object.keys(outcome.mockedCredentialsByNode ?? {}).length > 0);
|
|
8
|
+
}
|
|
9
|
+
function hasCredentialVerificationData(outcome) {
|
|
10
|
+
const mocked = outcome.mockedNodeNames ?? [];
|
|
11
|
+
if (mocked.length === 0)
|
|
12
|
+
return false;
|
|
13
|
+
const simulated = new Set((outcome.nodeSimulationPlan ?? [])
|
|
14
|
+
.filter((verdict) => verdict.verdict === 'simulate')
|
|
15
|
+
.map((verdict) => verdict.nodeName));
|
|
16
|
+
return mocked.every((name) => simulated.has(name));
|
|
17
|
+
}
|
|
18
|
+
function determineVerificationReadiness(outcome) {
|
|
19
|
+
if (!outcome.submitted) {
|
|
20
|
+
return {
|
|
21
|
+
status: 'not_verifiable',
|
|
22
|
+
reason: 'not-submitted',
|
|
23
|
+
guidance: 'The build did not submit a workflow, so there is nothing to verify.',
|
|
24
|
+
};
|
|
25
|
+
}
|
|
26
|
+
if (!outcome.workflowId) {
|
|
27
|
+
return {
|
|
28
|
+
status: 'not_verifiable',
|
|
29
|
+
reason: 'missing-workflow-id',
|
|
30
|
+
guidance: 'The build outcome does not include a workflow ID.',
|
|
31
|
+
};
|
|
32
|
+
}
|
|
33
|
+
if (outcome.hasUnresolvedPlaceholders) {
|
|
34
|
+
return {
|
|
35
|
+
status: 'needs_setup',
|
|
36
|
+
reason: 'unresolved-placeholders',
|
|
37
|
+
guidance: 'Route the workflow through setup before verification.',
|
|
38
|
+
};
|
|
39
|
+
}
|
|
40
|
+
if (hasMockedCredentials(outcome) && !hasCredentialVerificationData(outcome)) {
|
|
41
|
+
return {
|
|
42
|
+
status: 'needs_setup',
|
|
43
|
+
reason: 'missing-mocked-credential-pin-data',
|
|
44
|
+
guidance: 'Route the workflow through setup because mocked credentials cannot be verified.',
|
|
45
|
+
};
|
|
46
|
+
}
|
|
47
|
+
if (!outcome.triggerNodes?.some((node) => (0, workflow_json_utils_1.isMockableTriggerNodeType)(node.nodeType))) {
|
|
48
|
+
return {
|
|
49
|
+
status: 'not_verifiable',
|
|
50
|
+
reason: 'non-mockable-trigger',
|
|
51
|
+
guidance: 'The workflow does not have a trigger the post-build verifier can exercise.',
|
|
52
|
+
};
|
|
53
|
+
}
|
|
54
|
+
return { status: 'ready' };
|
|
55
|
+
}
|
|
56
|
+
function determineSetupRequirement(outcome) {
|
|
57
|
+
if (!outcome.submitted || !outcome.workflowId) {
|
|
58
|
+
return { status: 'not_required' };
|
|
59
|
+
}
|
|
60
|
+
if (outcome.hasUnresolvedPlaceholders) {
|
|
61
|
+
return {
|
|
62
|
+
status: 'required',
|
|
63
|
+
reason: 'unresolved-placeholders',
|
|
64
|
+
guidance: 'Route the workflow through setup so the user can fill unresolved values.',
|
|
65
|
+
};
|
|
66
|
+
}
|
|
67
|
+
if (hasMockedCredentials(outcome)) {
|
|
68
|
+
return {
|
|
69
|
+
status: 'required',
|
|
70
|
+
reason: 'mocked-credentials',
|
|
71
|
+
guidance: 'Route the workflow through setup so the user can add real credentials.',
|
|
72
|
+
};
|
|
73
|
+
}
|
|
74
|
+
return { status: 'not_required' };
|
|
75
|
+
}
|
|
76
|
+
function withDeterministicRouting(outcome) {
|
|
77
|
+
return {
|
|
78
|
+
...outcome,
|
|
79
|
+
verificationReadiness: determineVerificationReadiness(outcome),
|
|
80
|
+
setupRequirement: determineSetupRequirement(outcome),
|
|
81
|
+
};
|
|
82
|
+
}
|
|
83
|
+
//# sourceMappingURL=workflow-build-routing.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"workflow-build-routing.js","sourceRoot":"","sources":["../../../src/tools/workflows/workflow-build-routing.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import type { WorkflowSourceFileBinding } from './workflow-file-bindings';
|
|
2
|
+
import type { InstanceAiContext } from '../../types';
|
|
3
|
+
import type { RemediationMetadata } from '../../workflow-loop/workflow-loop-state';
|
|
4
|
+
export type BuildTelemetryResult = 'success' | 'failure' | 'blocked' | 'denied' | 'suspended';
|
|
5
|
+
export type BuildTelemetryStage = 'source_read' | 'permission' | 'hitl' | 'parse' | 'validation' | 'name' | 'save';
|
|
6
|
+
export declare function trackWorkflowSourceBuild(context: InstanceAiContext, input: {
|
|
7
|
+
result: BuildTelemetryResult;
|
|
8
|
+
stage: BuildTelemetryStage;
|
|
9
|
+
binding: WorkflowSourceFileBinding;
|
|
10
|
+
targetWorkflowId?: string;
|
|
11
|
+
savedWorkflowId?: string;
|
|
12
|
+
saveOperation?: 'create' | 'update';
|
|
13
|
+
isSupportingWorkflow?: boolean;
|
|
14
|
+
isAuxiliarySupportingWorkflow?: boolean;
|
|
15
|
+
remediation?: RemediationMetadata;
|
|
16
|
+
errorCount?: number;
|
|
17
|
+
warningCount?: number;
|
|
18
|
+
}): void;
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.trackWorkflowSourceBuild = trackWorkflowSourceBuild;
|
|
4
|
+
function trackWorkflowSourceBuild(context, input) {
|
|
5
|
+
const buildContext = context.workflowBuildContext;
|
|
6
|
+
context.trackTelemetry?.('instance_ai_workflow_source_build', {
|
|
7
|
+
source_transport: 'workspace_file',
|
|
8
|
+
result: input.result,
|
|
9
|
+
stage: input.stage,
|
|
10
|
+
thread_id: context.threadId ?? buildContext?.threadId ?? 'unknown',
|
|
11
|
+
run_id: buildContext?.runId ?? context.runId ?? 'unknown',
|
|
12
|
+
work_item_id: buildContext?.workItemId ?? 'unknown',
|
|
13
|
+
task_id: buildContext?.taskId ?? 'unknown',
|
|
14
|
+
file_path: input.binding.filePath,
|
|
15
|
+
identity_bound: Boolean(input.binding.workflowId),
|
|
16
|
+
is_supporting_workflow: input.isSupportingWorkflow === true,
|
|
17
|
+
is_auxiliary_supporting_workflow: input.isAuxiliarySupportingWorkflow === true,
|
|
18
|
+
error_count: input.errorCount ?? 0,
|
|
19
|
+
warning_count: input.warningCount ?? 0,
|
|
20
|
+
...(input.targetWorkflowId ? { target_workflow_id: input.targetWorkflowId } : {}),
|
|
21
|
+
...(input.savedWorkflowId ? { workflow_id: input.savedWorkflowId } : {}),
|
|
22
|
+
...(input.binding.sourceHash ? { source_hash: input.binding.sourceHash } : {}),
|
|
23
|
+
...(input.saveOperation ? { save_operation: input.saveOperation } : {}),
|
|
24
|
+
...(input.remediation
|
|
25
|
+
? {
|
|
26
|
+
remediation_category: input.remediation.category,
|
|
27
|
+
remediation_should_edit: input.remediation.shouldEdit,
|
|
28
|
+
...(input.remediation.reason ? { remediation_reason: input.remediation.reason } : {}),
|
|
29
|
+
}
|
|
30
|
+
: {}),
|
|
31
|
+
});
|
|
32
|
+
}
|
|
33
|
+
//# sourceMappingURL=workflow-build-telemetry.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"workflow-build-telemetry.js","sourceRoot":"","sources":["../../../src/tools/workflows/workflow-build-telemetry.ts"],"names":[],"mappings":";;AAcA,4DA2CC;AA3CD,SAAgB,wBAAwB,CACvC,OAA0B,EAC1B,KAYC;IAED,MAAM,YAAY,GAAG,OAAO,CAAC,oBAAoB,CAAC;IAClD,OAAO,CAAC,cAAc,EAAE,CAAC,mCAAmC,EAAE;QAC7D,gBAAgB,EAAE,gBAAgB;QAClC,MAAM,EAAE,KAAK,CAAC,MAAM;QACpB,KAAK,EAAE,KAAK,CAAC,KAAK;QAClB,SAAS,EAAE,OAAO,CAAC,QAAQ,IAAI,YAAY,EAAE,QAAQ,IAAI,SAAS;QAClE,MAAM,EAAE,YAAY,EAAE,KAAK,IAAI,OAAO,CAAC,KAAK,IAAI,SAAS;QACzD,YAAY,EAAE,YAAY,EAAE,UAAU,IAAI,SAAS;QACnD,OAAO,EAAE,YAAY,EAAE,MAAM,IAAI,SAAS;QAC1C,SAAS,EAAE,KAAK,CAAC,OAAO,CAAC,QAAQ;QACjC,cAAc,EAAE,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC;QACjD,sBAAsB,EAAE,KAAK,CAAC,oBAAoB,KAAK,IAAI;QAC3D,gCAAgC,EAAE,KAAK,CAAC,6BAA6B,KAAK,IAAI;QAC9E,WAAW,EAAE,KAAK,CAAC,UAAU,IAAI,CAAC;QAClC,aAAa,EAAE,KAAK,CAAC,YAAY,IAAI,CAAC;QACtC,GAAG,CAAC,KAAK,CAAC,gBAAgB,CAAC,CAAC,CAAC,EAAE,kBAAkB,EAAE,KAAK,CAAC,gBAAgB,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACjF,GAAG,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,KAAK,CAAC,eAAe,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACxE,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,KAAK,CAAC,OAAO,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC9E,GAAG,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC,CAAC,EAAE,cAAc,EAAE,KAAK,CAAC,aAAa,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACvE,GAAG,CAAC,KAAK,CAAC,WAAW;YACpB,CAAC,CAAC;gBACA,oBAAoB,EAAE,KAAK,CAAC,WAAW,CAAC,QAAQ;gBAChD,uBAAuB,EAAE,KAAK,CAAC,WAAW,CAAC,UAAU;gBACrD,GAAG,CAAC,KAAK,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,kBAAkB,EAAE,KAAK,CAAC,WAAW,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;aACrF;YACF,CAAC,CAAC,EAAE,CAAC;KACN,CAAC,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
import type { InstanceAiContext } from '../../types';
|
|
3
|
+
declare const workflowSourceFileBindingSchema: z.ZodObject<{
|
|
4
|
+
filePath: z.ZodString;
|
|
5
|
+
workflowId: z.ZodOptional<z.ZodString>;
|
|
6
|
+
workflowVersionId: z.ZodOptional<z.ZodString>;
|
|
7
|
+
sourceHash: z.ZodOptional<z.ZodString>;
|
|
8
|
+
}, "strip", z.ZodTypeAny, {
|
|
9
|
+
filePath: string;
|
|
10
|
+
workflowId?: string | undefined;
|
|
11
|
+
workflowVersionId?: string | undefined;
|
|
12
|
+
sourceHash?: string | undefined;
|
|
13
|
+
}, {
|
|
14
|
+
filePath: string;
|
|
15
|
+
workflowId?: string | undefined;
|
|
16
|
+
workflowVersionId?: string | undefined;
|
|
17
|
+
sourceHash?: string | undefined;
|
|
18
|
+
}>;
|
|
19
|
+
export type WorkflowSourceFileBinding = z.infer<typeof workflowSourceFileBindingSchema>;
|
|
20
|
+
export declare function hashWorkflowSource(source: string): string;
|
|
21
|
+
export declare function normalizeWorkflowSourceFilePath(filePath: string): string;
|
|
22
|
+
export declare function getWorkflowSourceFileBinding(context: InstanceAiContext, filePath: string): Promise<WorkflowSourceFileBinding | undefined>;
|
|
23
|
+
export declare function saveWorkflowSourceFileBinding(context: InstanceAiContext, binding: WorkflowSourceFileBinding): Promise<WorkflowSourceFileBinding>;
|
|
24
|
+
export declare function readWorkflowSourceFile(context: InstanceAiContext, filePath: string): Promise<{
|
|
25
|
+
source: string;
|
|
26
|
+
sourceHash: string;
|
|
27
|
+
}>;
|
|
28
|
+
export {};
|
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.hashWorkflowSource = hashWorkflowSource;
|
|
4
|
+
exports.normalizeWorkflowSourceFilePath = normalizeWorkflowSourceFilePath;
|
|
5
|
+
exports.getWorkflowSourceFileBinding = getWorkflowSourceFileBinding;
|
|
6
|
+
exports.saveWorkflowSourceFileBinding = saveWorkflowSourceFileBinding;
|
|
7
|
+
exports.readWorkflowSourceFile = readWorkflowSourceFile;
|
|
8
|
+
const node_crypto_1 = require("node:crypto");
|
|
9
|
+
const zod_1 = require("zod");
|
|
10
|
+
const thread_patch_1 = require("../../storage/thread-patch");
|
|
11
|
+
const workspace_files_1 = require("../../workspace/workspace-files");
|
|
12
|
+
const workspace_paths_1 = require("../../workspace/workspace-paths");
|
|
13
|
+
const METADATA_KEY = 'instanceAiWorkflowSourceFiles';
|
|
14
|
+
const workflowSourceFileBindingSchema = zod_1.z.object({
|
|
15
|
+
filePath: zod_1.z.string(),
|
|
16
|
+
workflowId: zod_1.z.string().optional(),
|
|
17
|
+
workflowVersionId: zod_1.z.string().optional(),
|
|
18
|
+
sourceHash: zod_1.z.string().optional(),
|
|
19
|
+
});
|
|
20
|
+
const workflowSourceFileBindingsSchema = zod_1.z.record(zod_1.z.string(), workflowSourceFileBindingSchema);
|
|
21
|
+
const fallbackBindings = new WeakMap();
|
|
22
|
+
function hashWorkflowSource(source) {
|
|
23
|
+
return (0, node_crypto_1.createHash)('sha256').update(source).digest('hex');
|
|
24
|
+
}
|
|
25
|
+
function normalizeWorkflowSourceFilePath(filePath) {
|
|
26
|
+
return (0, workspace_paths_1.normalizeWorkspaceRelativePath)(filePath, { resourceLabel: 'Workflow source file' });
|
|
27
|
+
}
|
|
28
|
+
function parseBindings(raw) {
|
|
29
|
+
const parsed = workflowSourceFileBindingsSchema.safeParse(raw);
|
|
30
|
+
return parsed.success ? parsed.data : {};
|
|
31
|
+
}
|
|
32
|
+
function getFallbackBindings(context) {
|
|
33
|
+
let bindings = fallbackBindings.get(context);
|
|
34
|
+
if (!bindings) {
|
|
35
|
+
bindings = new Map();
|
|
36
|
+
fallbackBindings.set(context, bindings);
|
|
37
|
+
}
|
|
38
|
+
return bindings;
|
|
39
|
+
}
|
|
40
|
+
async function readThreadBindings(context) {
|
|
41
|
+
if (!context.threadMemory || !context.threadId)
|
|
42
|
+
return undefined;
|
|
43
|
+
try {
|
|
44
|
+
const thread = await (0, thread_patch_1.getThread)(context.threadMemory, context.threadId);
|
|
45
|
+
return parseBindings(thread?.metadata?.[METADATA_KEY]);
|
|
46
|
+
}
|
|
47
|
+
catch (error) {
|
|
48
|
+
context.logger?.debug('Failed to read workflow source file bindings from thread metadata', {
|
|
49
|
+
error: error instanceof Error ? error.message : String(error),
|
|
50
|
+
});
|
|
51
|
+
return undefined;
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
async function getWorkflowSourceFileBinding(context, filePath) {
|
|
55
|
+
const normalizedFilePath = normalizeWorkflowSourceFilePath(filePath);
|
|
56
|
+
const threadBindings = await readThreadBindings(context);
|
|
57
|
+
if (threadBindings) {
|
|
58
|
+
return (threadBindings[normalizedFilePath] ?? getFallbackBindings(context).get(normalizedFilePath));
|
|
59
|
+
}
|
|
60
|
+
return getFallbackBindings(context).get(normalizedFilePath);
|
|
61
|
+
}
|
|
62
|
+
async function saveWorkflowSourceFileBinding(context, binding) {
|
|
63
|
+
const normalizedBinding = {
|
|
64
|
+
...binding,
|
|
65
|
+
filePath: normalizeWorkflowSourceFilePath(binding.filePath),
|
|
66
|
+
};
|
|
67
|
+
if (context.threadMemory && context.threadId) {
|
|
68
|
+
try {
|
|
69
|
+
const updatedThread = await (0, thread_patch_1.patchThread)(context.threadMemory, {
|
|
70
|
+
threadId: context.threadId,
|
|
71
|
+
update: ({ metadata = {} }) => {
|
|
72
|
+
const bindings = parseBindings(metadata[METADATA_KEY]);
|
|
73
|
+
bindings[normalizedBinding.filePath] = normalizedBinding;
|
|
74
|
+
return { metadata: { ...metadata, [METADATA_KEY]: bindings } };
|
|
75
|
+
},
|
|
76
|
+
});
|
|
77
|
+
if (updatedThread)
|
|
78
|
+
return normalizedBinding;
|
|
79
|
+
}
|
|
80
|
+
catch (error) {
|
|
81
|
+
context.logger?.warn('Failed to persist workflow source file binding to thread metadata', {
|
|
82
|
+
filePath: normalizedBinding.filePath,
|
|
83
|
+
error: error instanceof Error ? error.message : String(error),
|
|
84
|
+
});
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
getFallbackBindings(context).set(normalizedBinding.filePath, normalizedBinding);
|
|
88
|
+
return normalizedBinding;
|
|
89
|
+
}
|
|
90
|
+
async function readWorkflowSourceFile(context, filePath) {
|
|
91
|
+
if (!context.workspace) {
|
|
92
|
+
throw new Error('Runtime workspace is required for workflow source files.');
|
|
93
|
+
}
|
|
94
|
+
const normalizedFilePath = normalizeWorkflowSourceFilePath(filePath);
|
|
95
|
+
const source = await (0, workspace_files_1.readWorkspaceFile)(context.workspace, normalizedFilePath, {
|
|
96
|
+
logger: context.logger,
|
|
97
|
+
resourceLabel: 'Workflow source file',
|
|
98
|
+
});
|
|
99
|
+
if (source === null) {
|
|
100
|
+
throw new Error(`Workflow source file not found: ${normalizedFilePath}`);
|
|
101
|
+
}
|
|
102
|
+
return { source, sourceHash: hashWorkflowSource(source) };
|
|
103
|
+
}
|
|
104
|
+
//# sourceMappingURL=workflow-file-bindings.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"workflow-file-bindings.js","sourceRoot":"","sources":["../../../src/tools/workflows/workflow-file-bindings.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,7 @@
|
|
|
1
1
|
import type { WorkflowJSON } from '@n8n/workflow-sdk';
|
|
2
|
+
import type { InstanceAiContext } from '../../types';
|
|
2
3
|
export declare function isMockableTriggerNodeType(nodeType: string | undefined): boolean;
|
|
3
4
|
export declare function isTriggerNodeType(nodeType: string | undefined): boolean;
|
|
4
5
|
export declare function getReferencedWorkflowIds(json: WorkflowJSON): string[];
|
|
6
|
+
export declare function ensureWebhookIds(json: WorkflowJSON, workflowId: string | undefined, ctx: InstanceAiContext): Promise<void>;
|
|
7
|
+
export declare function preserveExistingNodeGroupIds(json: WorkflowJSON, workflowId: string | undefined, ctx: InstanceAiContext): Promise<void>;
|
|
@@ -3,15 +3,23 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.isMockableTriggerNodeType = isMockableTriggerNodeType;
|
|
4
4
|
exports.isTriggerNodeType = isTriggerNodeType;
|
|
5
5
|
exports.getReferencedWorkflowIds = getReferencedWorkflowIds;
|
|
6
|
+
exports.ensureWebhookIds = ensureWebhookIds;
|
|
7
|
+
exports.preserveExistingNodeGroupIds = preserveExistingNodeGroupIds;
|
|
8
|
+
const utils_1 = require("@n8n/utils");
|
|
9
|
+
const node_crypto_1 = require("node:crypto");
|
|
6
10
|
const KNOWN_MOCKABLE_TRIGGER_TYPES = new Set([
|
|
11
|
+
'n8n-nodes-base.manualTrigger',
|
|
7
12
|
'n8n-nodes-base.webhook',
|
|
8
13
|
'n8n-nodes-base.formTrigger',
|
|
9
14
|
'n8n-nodes-base.scheduleTrigger',
|
|
10
15
|
'@n8n/n8n-nodes-langchain.chatTrigger',
|
|
11
16
|
]);
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
17
|
+
const WEBHOOK_NODE_TYPES = new Set([
|
|
18
|
+
'n8n-nodes-base.webhook',
|
|
19
|
+
'n8n-nodes-base.formTrigger',
|
|
20
|
+
'@n8n/n8n-nodes-langchain.mcpTrigger',
|
|
21
|
+
'@n8n/n8n-nodes-langchain.chatTrigger',
|
|
22
|
+
]);
|
|
15
23
|
function isMockableTriggerNodeType(nodeType) {
|
|
16
24
|
return nodeType !== undefined && KNOWN_MOCKABLE_TRIGGER_TYPES.has(nodeType);
|
|
17
25
|
}
|
|
@@ -23,7 +31,7 @@ function isTriggerNodeType(nodeType) {
|
|
|
23
31
|
return nodeType.endsWith('Trigger') || nodeType.endsWith('trigger');
|
|
24
32
|
}
|
|
25
33
|
function extractWorkflowIdParameter(value) {
|
|
26
|
-
const rawValue = isRecord(value) ? value.value : value;
|
|
34
|
+
const rawValue = (0, utils_1.isRecord)(value) ? value.value : value;
|
|
27
35
|
if (typeof rawValue !== 'string')
|
|
28
36
|
return undefined;
|
|
29
37
|
const workflowId = rawValue.trim();
|
|
@@ -40,7 +48,7 @@ function getReferencedWorkflowIds(json) {
|
|
|
40
48
|
for (const node of json.nodes ?? []) {
|
|
41
49
|
if (node.disabled || node.type !== 'n8n-nodes-base.executeWorkflow')
|
|
42
50
|
continue;
|
|
43
|
-
const parameters = isRecord(node.parameters) ? node.parameters : {};
|
|
51
|
+
const parameters = (0, utils_1.isRecord)(node.parameters) ? node.parameters : {};
|
|
44
52
|
if (shouldSkipReferencedWorkflow(parameters.source))
|
|
45
53
|
continue;
|
|
46
54
|
const workflowId = extractWorkflowIdParameter(parameters.workflowId);
|
|
@@ -51,4 +59,45 @@ function getReferencedWorkflowIds(json) {
|
|
|
51
59
|
}
|
|
52
60
|
return referencedWorkflowIds;
|
|
53
61
|
}
|
|
62
|
+
async function ensureWebhookIds(json, workflowId, ctx) {
|
|
63
|
+
const existingWebhookIds = new Map();
|
|
64
|
+
if (workflowId) {
|
|
65
|
+
try {
|
|
66
|
+
const existing = await ctx.workflowService.getAsWorkflowJSON(workflowId);
|
|
67
|
+
for (const node of existing.nodes ?? []) {
|
|
68
|
+
if (node.webhookId && node.name) {
|
|
69
|
+
existingWebhookIds.set(node.name, node.webhookId);
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
catch (error) {
|
|
74
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
75
|
+
throw new Error(`Failed to load existing workflow ${workflowId} to preserve webhook IDs: ${message}`, { cause: error });
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
for (const node of json.nodes ?? []) {
|
|
79
|
+
if (WEBHOOK_NODE_TYPES.has(node.type) && !node.webhookId) {
|
|
80
|
+
node.webhookId = (node.name && existingWebhookIds.get(node.name)) ?? (0, node_crypto_1.randomUUID)();
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
async function preserveExistingNodeGroupIds(json, workflowId, ctx) {
|
|
85
|
+
if (!workflowId || !json.nodeGroups?.length)
|
|
86
|
+
return;
|
|
87
|
+
let existingGroupIdsByName;
|
|
88
|
+
try {
|
|
89
|
+
const existing = await ctx.workflowService.getAsWorkflowJSON(workflowId);
|
|
90
|
+
existingGroupIdsByName = new Map((existing.nodeGroups ?? []).map((group) => [group.name, group.id]));
|
|
91
|
+
}
|
|
92
|
+
catch (error) {
|
|
93
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
94
|
+
throw new Error(`Failed to load existing workflow ${workflowId} to preserve node-group IDs: ${message}`, { cause: error });
|
|
95
|
+
}
|
|
96
|
+
for (const group of json.nodeGroups) {
|
|
97
|
+
const existingId = existingGroupIdsByName.get(group.name);
|
|
98
|
+
if (existingId) {
|
|
99
|
+
group.id = existingId;
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
}
|
|
54
103
|
//# sourceMappingURL=workflow-json-utils.js.map
|
|
@@ -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":"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"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { type WorkflowJSON } from '@n8n/workflow-sdk';
|
|
2
|
+
import { type ValidationWarning } from './workflow-validation-warnings';
|
|
3
|
+
import type { InstanceAiContext } from '../../types';
|
|
4
|
+
export type WorkflowSourceCompiler = 'workflow-json' | 'sandbox-tsx';
|
|
5
|
+
export type WorkflowSourceCompileFailureReason = 'workflow_json_parse_failed' | 'workflow_json_invalid' | 'workflow_source_unsupported_extension' | 'workflow_source_sandbox_unavailable' | 'workflow_source_sandbox_failed' | 'workflow_source_build_failed';
|
|
6
|
+
export type WorkflowSourceCompileResult = {
|
|
7
|
+
success: true;
|
|
8
|
+
workflow: WorkflowJSON;
|
|
9
|
+
warnings: ValidationWarning[];
|
|
10
|
+
compiler: WorkflowSourceCompiler;
|
|
11
|
+
} | {
|
|
12
|
+
success: false;
|
|
13
|
+
errors: string[];
|
|
14
|
+
reason: WorkflowSourceCompileFailureReason;
|
|
15
|
+
editable: boolean;
|
|
16
|
+
summary: string;
|
|
17
|
+
};
|
|
18
|
+
export declare function isWorkflowJsonSourceFile(filePath: string): boolean;
|
|
19
|
+
export declare function compileWorkflowSource(context: InstanceAiContext, filePath: string, source: string): Promise<WorkflowSourceCompileResult>;
|