@n8n/instance-ai 1.12.3 → 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.
Files changed (250) hide show
  1. package/dist/agent/apply-agent-thinking.d.ts +2 -0
  2. package/dist/agent/apply-agent-thinking.js +41 -0
  3. package/dist/agent/apply-agent-thinking.js.map +1 -0
  4. package/dist/agent/instance-agent.js +10 -2
  5. package/dist/agent/instance-agent.js.map +1 -1
  6. package/dist/agent/sanitize-mcp-schemas.js +133 -125
  7. package/dist/agent/sanitize-mcp-schemas.js.map +1 -1
  8. package/dist/agent/shared-prompts.d.ts +0 -1
  9. package/dist/agent/shared-prompts.js +4 -11
  10. package/dist/agent/shared-prompts.js.map +1 -1
  11. package/dist/agent/sub-agent-debriefing.d.ts +4 -4
  12. package/dist/agent/system-prompt.js +3 -10
  13. package/dist/agent/system-prompt.js.map +1 -1
  14. package/dist/build.tsbuildinfo +1 -1
  15. package/dist/debug/run-debug-buffer.d.ts +63 -0
  16. package/dist/debug/run-debug-buffer.js +177 -0
  17. package/dist/debug/run-debug-buffer.js.map +1 -0
  18. package/dist/debug/sanitize-debug-snapshot.d.ts +2 -0
  19. package/dist/debug/sanitize-debug-snapshot.js +88 -0
  20. package/dist/debug/sanitize-debug-snapshot.js.map +1 -0
  21. package/dist/error-formatting.js +3 -5
  22. package/dist/error-formatting.js.map +1 -1
  23. package/dist/index.d.ts +5 -2
  24. package/dist/index.js +8 -3
  25. package/dist/index.js.map +1 -1
  26. package/dist/knowledge-base/build-templates-index.d.ts +1 -0
  27. package/dist/knowledge-base/build-templates-index.js +18 -2
  28. package/dist/knowledge-base/build-templates-index.js.map +1 -1
  29. package/dist/knowledge-base/materialize-knowledge-base.d.ts +2 -3
  30. package/dist/knowledge-base/materialize-knowledge-base.js +10 -7
  31. package/dist/knowledge-base/materialize-knowledge-base.js.map +1 -1
  32. package/dist/mcp/mcp-client-manager.d.ts +1 -1
  33. package/dist/mcp/mcp-client-manager.js +13 -9
  34. package/dist/mcp/mcp-client-manager.js.map +1 -1
  35. package/dist/runtime/memory-task-registry.d.ts +8 -0
  36. package/dist/runtime/memory-task-registry.js +42 -0
  37. package/dist/runtime/memory-task-registry.js.map +1 -0
  38. package/dist/runtime/resumable-stream-executor.d.ts +3 -0
  39. package/dist/runtime/resumable-stream-executor.js +171 -90
  40. package/dist/runtime/resumable-stream-executor.js.map +1 -1
  41. package/dist/runtime/run-state-registry.d.ts +2 -0
  42. package/dist/runtime/run-state-registry.js +3 -0
  43. package/dist/runtime/run-state-registry.js.map +1 -1
  44. package/dist/runtime/stream-runner.d.ts +3 -0
  45. package/dist/runtime/stream-runner.js +3 -0
  46. package/dist/runtime/stream-runner.js.map +1 -1
  47. package/dist/skills/materialize-runtime-skills.d.ts +3 -3
  48. package/dist/skills/materialize-runtime-skills.js +1 -1
  49. package/dist/skills/materialize-runtime-skills.js.map +1 -1
  50. package/dist/source-map-filter.js +0 -1
  51. package/dist/source-map-filter.js.map +1 -1
  52. package/dist/storage/terminal-outcome-storage.d.ts +2 -2
  53. package/dist/storage/workflow-loop-storage.d.ts +75 -4
  54. package/dist/stream/map-chunk.js +198 -237
  55. package/dist/stream/map-chunk.js.map +1 -1
  56. package/dist/stream/output-redaction.js +2 -2
  57. package/dist/stream/output-redaction.js.map +1 -1
  58. package/dist/stream/usage-accumulator.d.ts +90 -0
  59. package/dist/stream/usage-accumulator.js +89 -0
  60. package/dist/stream/usage-accumulator.js.map +1 -0
  61. package/dist/stream/work-summary-accumulator.d.ts +6 -6
  62. package/dist/tools/attachments/parse-file.tool.js +1 -1
  63. package/dist/tools/attachments/parse-file.tool.js.map +1 -1
  64. package/dist/tools/credentials.tool.js +4 -1
  65. package/dist/tools/credentials.tool.js.map +1 -1
  66. package/dist/tools/data-tables.tool.js +5 -2
  67. package/dist/tools/data-tables.tool.js.map +1 -1
  68. package/dist/tools/evals/column-ref-utils.d.ts +1 -2
  69. package/dist/tools/evals/column-ref-utils.js +19 -18
  70. package/dist/tools/evals/column-ref-utils.js.map +1 -1
  71. package/dist/tools/evals/describe-metric-for-workflow.service.js +7 -25
  72. package/dist/tools/evals/describe-metric-for-workflow.service.js.map +1 -1
  73. package/dist/tools/evals/detect-tool-refs.service.js +2 -1
  74. package/dist/tools/evals/detect-tool-refs.service.js.map +1 -1
  75. package/dist/tools/evals/eval-data-requirements.service.js +10 -9
  76. package/dist/tools/evals/eval-data-requirements.service.js.map +1 -1
  77. package/dist/tools/evals/evals.tool.js +2 -2
  78. package/dist/tools/evals/evals.tool.js.map +1 -1
  79. package/dist/tools/evals/extract-rows-from-history.service.js +8 -8
  80. package/dist/tools/evals/extract-rows-from-history.service.js.map +1 -1
  81. package/dist/tools/evals/generate-sample-rows.service.d.ts +2 -2
  82. package/dist/tools/evals/generate-sample-rows.service.js +30 -49
  83. package/dist/tools/evals/generate-sample-rows.service.js.map +1 -1
  84. package/dist/tools/evals/generate-tool-ref-pin-data.service.js +10 -23
  85. package/dist/tools/evals/generate-tool-ref-pin-data.service.js.map +1 -1
  86. package/dist/tools/evals/metric-catalog.js +3 -3
  87. package/dist/tools/evals/metric-catalog.js.map +1 -1
  88. package/dist/tools/executions.tool.js +10 -2
  89. package/dist/tools/executions.tool.js.map +1 -1
  90. package/dist/tools/filesystem/create-tools-from-mcp-server.d.ts +1 -1
  91. package/dist/tools/filesystem/create-tools-from-mcp-server.js +8 -10
  92. package/dist/tools/filesystem/create-tools-from-mcp-server.js.map +1 -1
  93. package/dist/tools/index.js +1 -1
  94. package/dist/tools/index.js.map +1 -1
  95. package/dist/tools/nodes/node-search-engine.js +21 -42
  96. package/dist/tools/nodes/node-search-engine.js.map +1 -1
  97. package/dist/tools/nodes/node-search-engine.types.d.ts +2 -0
  98. package/dist/tools/nodes/preferred-chat-model.d.ts +1 -0
  99. package/dist/tools/nodes/preferred-chat-model.js +19 -0
  100. package/dist/tools/nodes/preferred-chat-model.js.map +1 -0
  101. package/dist/tools/nodes/suggested-nodes-data.js +13 -3
  102. package/dist/tools/nodes/suggested-nodes-data.js.map +1 -1
  103. package/dist/tools/nodes.tool.js +32 -7
  104. package/dist/tools/nodes.tool.js.map +1 -1
  105. package/dist/tools/orchestration/complete-checkpoint.tool.js +3 -5
  106. package/dist/tools/orchestration/complete-checkpoint.tool.js.map +1 -1
  107. package/dist/tools/orchestration/eval-data-agent.tool.js +2 -1
  108. package/dist/tools/orchestration/eval-data-agent.tool.js.map +1 -1
  109. package/dist/tools/orchestration/eval-setup-agent.prompt.d.ts +1 -1
  110. package/dist/tools/orchestration/eval-setup-agent.prompt.js +3 -3
  111. package/dist/tools/orchestration/report-verification-verdict.tool.d.ts +2 -2
  112. package/dist/tools/orchestration/report-verification-verdict.tool.js +1 -1
  113. package/dist/tools/orchestration/report-verification-verdict.tool.js.map +1 -1
  114. package/dist/tools/orchestration/verify-built-workflow.tool.js +320 -307
  115. package/dist/tools/orchestration/verify-built-workflow.tool.js.map +1 -1
  116. package/dist/tools/research.tool.js +1 -1
  117. package/dist/tools/research.tool.js.map +1 -1
  118. package/dist/tools/shared/ask-user.tool.d.ts +4 -4
  119. package/dist/tools/shared/ask-user.tool.js +6 -1
  120. package/dist/tools/shared/ask-user.tool.js.map +1 -1
  121. package/dist/tools/tool-ids.d.ts +0 -1
  122. package/dist/tools/tool-ids.js +0 -1
  123. package/dist/tools/tool-ids.js.map +1 -1
  124. package/dist/tools/workflows/build-workflow.tool.d.ts +4 -22
  125. package/dist/tools/workflows/build-workflow.tool.js +373 -317
  126. package/dist/tools/workflows/build-workflow.tool.js.map +1 -1
  127. package/dist/tools/workflows/classify-node-destructiveness.service.d.ts +7 -0
  128. package/dist/tools/workflows/classify-node-destructiveness.service.js +307 -0
  129. package/dist/tools/workflows/classify-node-destructiveness.service.js.map +1 -0
  130. package/dist/tools/workflows/generate-simulation-fixtures.service.d.ts +8 -0
  131. package/dist/tools/workflows/generate-simulation-fixtures.service.js +95 -0
  132. package/dist/tools/workflows/generate-simulation-fixtures.service.js.map +1 -0
  133. package/dist/tools/workflows/plan-verification-simulation.d.ts +15 -0
  134. package/dist/tools/workflows/plan-verification-simulation.js +32 -0
  135. package/dist/tools/workflows/plan-verification-simulation.js.map +1 -0
  136. package/dist/tools/workflows/resolve-credentials.d.ts +0 -2
  137. package/dist/tools/workflows/resolve-credentials.js +0 -13
  138. package/dist/tools/workflows/resolve-credentials.js.map +1 -1
  139. package/dist/tools/workflows/setup-workflow.service.js +259 -215
  140. package/dist/tools/workflows/setup-workflow.service.js.map +1 -1
  141. package/dist/tools/workflows/validate-workflow.service.js +81 -66
  142. package/dist/tools/workflows/validate-workflow.service.js.map +1 -1
  143. package/dist/tools/workflows/workflow-build-context.d.ts +33 -0
  144. package/dist/tools/workflows/workflow-build-context.js +80 -0
  145. package/dist/tools/workflows/workflow-build-context.js.map +1 -0
  146. package/dist/tools/workflows/workflow-build-remediation.d.ts +11 -0
  147. package/dist/tools/workflows/workflow-build-remediation.js +89 -0
  148. package/dist/tools/workflows/workflow-build-remediation.js.map +1 -0
  149. package/dist/tools/workflows/workflow-build-reporting.d.ts +19 -0
  150. package/dist/tools/workflows/workflow-build-reporting.js +78 -0
  151. package/dist/tools/workflows/workflow-build-reporting.js.map +1 -0
  152. package/dist/tools/workflows/workflow-build-routing.d.ts +2 -0
  153. package/dist/tools/workflows/workflow-build-routing.js +83 -0
  154. package/dist/tools/workflows/workflow-build-routing.js.map +1 -0
  155. package/dist/tools/workflows/workflow-build-telemetry.d.ts +18 -0
  156. package/dist/tools/workflows/workflow-build-telemetry.js +33 -0
  157. package/dist/tools/workflows/workflow-build-telemetry.js.map +1 -0
  158. package/dist/tools/workflows/workflow-file-bindings.d.ts +28 -0
  159. package/dist/tools/workflows/workflow-file-bindings.js +104 -0
  160. package/dist/tools/workflows/workflow-file-bindings.js.map +1 -0
  161. package/dist/tools/workflows/workflow-json-utils.d.ts +3 -0
  162. package/dist/tools/workflows/workflow-json-utils.js +54 -5
  163. package/dist/tools/workflows/workflow-json-utils.js.map +1 -1
  164. package/dist/tools/workflows/workflow-source-compiler.d.ts +19 -0
  165. package/dist/tools/workflows/workflow-source-compiler.js +217 -0
  166. package/dist/tools/workflows/workflow-source-compiler.js.map +1 -0
  167. package/dist/tools/workflows/workflow-validation-warnings.d.ts +14 -0
  168. package/dist/tools/workflows/workflow-validation-warnings.js +28 -0
  169. package/dist/tools/workflows/workflow-validation-warnings.js.map +1 -0
  170. package/dist/tools/workflows.tool.js +107 -99
  171. package/dist/tools/workflows.tool.js.map +1 -1
  172. package/dist/tracing/langsmith-tracing.js +7 -7
  173. package/dist/tracing/langsmith-tracing.js.map +1 -1
  174. package/dist/tracing/trace-payloads.d.ts +2 -1
  175. package/dist/tracing/trace-payloads.js +152 -114
  176. package/dist/tracing/trace-payloads.js.map +1 -1
  177. package/dist/types.d.ts +24 -4
  178. package/dist/types.js.map +1 -1
  179. package/dist/utils/eval-agents.d.ts +0 -3
  180. package/dist/utils/eval-agents.js +3 -11
  181. package/dist/utils/eval-agents.js.map +1 -1
  182. package/dist/utils/generate-validated-json.d.ts +16 -0
  183. package/dist/utils/generate-validated-json.js +38 -0
  184. package/dist/utils/generate-validated-json.js.map +1 -0
  185. package/dist/utils/stream-helpers.d.ts +0 -1
  186. package/dist/utils/stream-helpers.js +5 -8
  187. package/dist/utils/stream-helpers.js.map +1 -1
  188. package/dist/workflow-builder/build-failure-tracker.js +25 -1
  189. package/dist/workflow-builder/build-failure-tracker.js.map +1 -1
  190. package/dist/workflow-builder/index.d.ts +0 -4
  191. package/dist/workflow-builder/index.js +1 -11
  192. package/dist/workflow-builder/index.js.map +1 -1
  193. package/dist/workflow-loop/guidance.js +14 -15
  194. package/dist/workflow-loop/guidance.js.map +1 -1
  195. package/dist/workflow-loop/runtime.js +1 -0
  196. package/dist/workflow-loop/runtime.js.map +1 -1
  197. package/dist/workflow-loop/verification-obligation.js +8 -1
  198. package/dist/workflow-loop/verification-obligation.js.map +1 -1
  199. package/dist/workflow-loop/workflow-loop-controller.js +17 -1
  200. package/dist/workflow-loop/workflow-loop-controller.js.map +1 -1
  201. package/dist/workflow-loop/workflow-loop-state.d.ts +90 -6
  202. package/dist/workflow-loop/workflow-loop-state.js +13 -1
  203. package/dist/workflow-loop/workflow-loop-state.js.map +1 -1
  204. package/dist/workspace/builder-templates-service.d.ts +5 -5
  205. package/dist/workspace/builder-templates-service.js +17 -14
  206. package/dist/workspace/builder-templates-service.js.map +1 -1
  207. package/dist/workspace/create-workspace.js +8 -1
  208. package/dist/workspace/create-workspace.js.map +1 -1
  209. package/dist/workspace/prebaked-workspace-bundle.d.ts +2 -2
  210. package/dist/workspace/prebaked-workspace-bundle.js +5 -5
  211. package/dist/workspace/prebaked-workspace-bundle.js.map +1 -1
  212. package/dist/workspace/sandbox-setup.d.ts +1 -1
  213. package/dist/workspace/sandbox-setup.js +10 -37
  214. package/dist/workspace/sandbox-setup.js.map +1 -1
  215. package/dist/workspace/snapshot-manager.d.ts +1 -1
  216. package/dist/workspace/template-telemetry.js +2 -5
  217. package/dist/workspace/template-telemetry.js.map +1 -1
  218. package/dist/workspace/workspace-files.d.ts +1 -1
  219. package/dist/workspace/workspace-files.js +3 -3
  220. package/dist/workspace/workspace-files.js.map +1 -1
  221. package/dist/workspace/workspace-manifest.js +2 -2
  222. package/dist/workspace/workspace-manifest.js.map +1 -1
  223. package/dist/workspace/workspace-paths.d.ts +4 -0
  224. package/dist/workspace/workspace-paths.js +25 -0
  225. package/dist/workspace/workspace-paths.js.map +1 -0
  226. package/knowledge-base/reference/open-ai-output-shape.md +79 -0
  227. package/knowledge-base/reference/workflow-builder-guardrails.md +15 -0
  228. package/package.json +13 -12
  229. package/skills/planned-task-runtime/SKILL.md +3 -2
  230. package/skills/planning/SKILL.md +5 -0
  231. package/skills/post-build-flow/SKILL.md +25 -9
  232. package/skills/workflow-builder/SKILL.md +89 -134
  233. package/dist/tools/workflows/submit-workflow-identity.d.ts +0 -39
  234. package/dist/tools/workflows/submit-workflow-identity.js +0 -181
  235. package/dist/tools/workflows/submit-workflow-identity.js.map +0 -1
  236. package/dist/tools/workflows/submit-workflow.tool.d.ts +0 -223
  237. package/dist/tools/workflows/submit-workflow.tool.js +0 -491
  238. package/dist/tools/workflows/submit-workflow.tool.js.map +0 -1
  239. package/dist/workflow-builder/extract-code.d.ts +0 -5
  240. package/dist/workflow-builder/extract-code.js +0 -105
  241. package/dist/workflow-builder/extract-code.js.map +0 -1
  242. package/dist/workflow-builder/parse-validate.d.ts +0 -10
  243. package/dist/workflow-builder/parse-validate.js +0 -50
  244. package/dist/workflow-builder/parse-validate.js.map +0 -1
  245. package/dist/workflow-builder/patch-code.d.ts +0 -14
  246. package/dist/workflow-builder/patch-code.js +0 -117
  247. package/dist/workflow-builder/patch-code.js.map +0 -1
  248. package/dist/workflow-builder/types.d.ts +0 -11
  249. package/dist/workflow-builder/types.js +0 -3
  250. 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,2 @@
1
+ import type { WorkflowBuildOutcome } from '../../workflow-loop/workflow-loop-state';
2
+ export declare function withDeterministicRouting(outcome: Omit<WorkflowBuildOutcome, 'verificationReadiness' | 'setupRequirement'>): WorkflowBuildOutcome;
@@ -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
- function isRecord(value) {
13
- return typeof value === 'object' && value !== null;
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":";;AAaA,8DAEC;AAED,8CAIC;AAgBD,4DAiBC;AApDD,MAAM,4BAA4B,GAAG,IAAI,GAAG,CAAC;IAC5C,wBAAwB;IACxB,4BAA4B;IAC5B,gCAAgC;IAChC,sCAAsC;CACtC,CAAC,CAAC;AAEH,SAAS,QAAQ,CAAC,KAAc;IAC/B,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,CAAC;AACpD,CAAC;AAED,SAAgB,yBAAyB,CAAC,QAA4B;IACrE,OAAO,QAAQ,KAAK,SAAS,IAAI,4BAA4B,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;AAC7E,CAAC;AAED,SAAgB,iBAAiB,CAAC,QAA4B;IAC7D,IAAI,CAAC,QAAQ;QAAE,OAAO,KAAK,CAAC;IAC5B,IAAI,yBAAyB,CAAC,QAAQ,CAAC;QAAE,OAAO,IAAI,CAAC;IACrD,OAAO,QAAQ,CAAC,QAAQ,CAAC,SAAS,CAAC,IAAI,QAAQ,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;AACrE,CAAC;AAED,SAAS,0BAA0B,CAAC,KAAc;IACjD,MAAM,QAAQ,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC;IACvD,IAAI,OAAO,QAAQ,KAAK,QAAQ;QAAE,OAAO,SAAS,CAAC;IAEnD,MAAM,UAAU,GAAG,QAAQ,CAAC,IAAI,EAAE,CAAC;IACnC,IAAI,UAAU,KAAK,EAAE,IAAI,UAAU,CAAC,UAAU,CAAC,GAAG,CAAC;QAAE,OAAO,SAAS,CAAC;IAEtE,OAAO,UAAU,CAAC;AACnB,CAAC;AAED,SAAS,4BAA4B,CAAC,MAAe;IACpD,OAAO,OAAO,MAAM,KAAK,QAAQ,IAAI,MAAM,KAAK,UAAU,CAAC;AAC5D,CAAC;AAED,SAAgB,wBAAwB,CAAC,IAAkB;IAC1D,MAAM,qBAAqB,GAAa,EAAE,CAAC;IAC3C,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAC;IAE/B,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,KAAK,IAAI,EAAE,EAAE,CAAC;QACrC,IAAI,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,IAAI,KAAK,gCAAgC;YAAE,SAAS;QAC9E,MAAM,UAAU,GAAG,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,CAAC;QACpE,IAAI,4BAA4B,CAAC,UAAU,CAAC,MAAM,CAAC;YAAE,SAAS;QAE9D,MAAM,UAAU,GAAG,0BAA0B,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC;QACrE,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC;YAAE,SAAS;QAElD,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;QACrB,qBAAqB,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;IACxC,CAAC;IAED,OAAO,qBAAqB,CAAC;AAC9B,CAAC"}
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>;