From 82f17fe5931c5ca09c8ccefb80c873d1e78a22b8 Mon Sep 17 00:00:00 2001 From: Charlie Kolb Date: Tue, 4 Feb 2025 13:02:50 +0100 Subject: [PATCH] fix: Increment runIndex in WorkflowToolV2 tool executions to avoid reusing out of date inputs (#13008) --- .../tools/ToolWorkflow/v2/ToolWorkflowV2.test.ts | 12 +++++++++--- .../ToolWorkflow/v2/utils/WorkflowToolService.ts | 3 +++ 2 files changed, 12 insertions(+), 3 deletions(-) diff --git a/packages/@n8n/nodes-langchain/nodes/tools/ToolWorkflow/v2/ToolWorkflowV2.test.ts b/packages/@n8n/nodes-langchain/nodes/tools/ToolWorkflow/v2/ToolWorkflowV2.test.ts index 73aa24c6b7fef..a5aa4e41bccc4 100644 --- a/packages/@n8n/nodes-langchain/nodes/tools/ToolWorkflow/v2/ToolWorkflowV2.test.ts +++ b/packages/@n8n/nodes-langchain/nodes/tools/ToolWorkflow/v2/ToolWorkflowV2.test.ts @@ -11,9 +11,14 @@ import type { import { WorkflowToolService } from './utils/WorkflowToolService'; +type ISupplyDataFunctionsWithRunIndex = ISupplyDataFunctions & { runIndex: number }; + // Mock ISupplyDataFunctions interface -function createMockContext(overrides?: Partial): ISupplyDataFunctions { +function createMockContext( + overrides?: Partial, +): ISupplyDataFunctionsWithRunIndex { return { + runIndex: 0, getNodeParameter: jest.fn(), getWorkflowDataProxy: jest.fn(), getNode: jest.fn(), @@ -35,11 +40,11 @@ function createMockContext(overrides?: Partial): ISupplyDa warn: jest.fn(), }, ...overrides, - } as ISupplyDataFunctions; + } as ISupplyDataFunctionsWithRunIndex; } describe('WorkflowTool::WorkflowToolService', () => { - let context: ISupplyDataFunctions; + let context: ISupplyDataFunctionsWithRunIndex; let service: WorkflowToolService; beforeEach(() => { @@ -93,6 +98,7 @@ describe('WorkflowTool::WorkflowToolService', () => { expect(result).toBe(JSON.stringify(TEST_RESPONSE, null, 2)); expect(context.addOutputData).toHaveBeenCalled(); + expect(context.runIndex).toBe(1); }); it('should handle errors during tool execution', async () => { diff --git a/packages/@n8n/nodes-langchain/nodes/tools/ToolWorkflow/v2/utils/WorkflowToolService.ts b/packages/@n8n/nodes-langchain/nodes/tools/ToolWorkflow/v2/utils/WorkflowToolService.ts index 2ce3c435562be..f54bd5e8cfa14 100644 --- a/packages/@n8n/nodes-langchain/nodes/tools/ToolWorkflow/v2/utils/WorkflowToolService.ts +++ b/packages/@n8n/nodes-langchain/nodes/tools/ToolWorkflow/v2/utils/WorkflowToolService.ts @@ -90,6 +90,9 @@ export class WorkflowToolService { const errorResponse = `There was an error: "${executionError.message}"`; void this.context.addOutputData(NodeConnectionType.AiTool, index, executionError); return errorResponse; + } finally { + // @ts-expect-error this accesses a private member on the actual implementation to fix https://linear.app/n8n/issue/ADO-3186/bug-workflowtool-v2-always-uses-first-row-of-input-data + this.context.runIndex++; } };