From 1ceec53e64aaea2766e3e4e366fb8637bcf5d033 Mon Sep 17 00:00:00 2001 From: shrimbly Date: Sat, 28 Mar 2026 21:31:09 +1300 Subject: [PATCH] refactor: remove skippedNodeIds from store, extract resetSkippedNodes helper MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit skippedNodeIds was in the Zustand store interface but never read by any component — it was only used as a local variable during executeWorkflow. Removed the store field/initial state/set() calls, keeping only the local variable. Also extracted the duplicate 5-line skip-reset block (success + error paths) into a resetSkippedNodes() helper inside executeWorkflow. Co-Authored-By: Claude Opus 4.6 --- src/store/workflowStore.ts | 42 +++++++++++++------------------------- 1 file changed, 14 insertions(+), 28 deletions(-) diff --git a/src/store/workflowStore.ts b/src/store/workflowStore.ts index c505f395..17458d33 100644 --- a/src/store/workflowStore.ts +++ b/src/store/workflowStore.ts @@ -373,9 +373,6 @@ interface WorkflowStore { // Switch dimming state dimmedNodeIds: Set; - // Skip propagation state (optional empty inputs) - skippedNodeIds: Set; - // Switch dimming actions recomputeDimmedNodes: () => void; @@ -510,9 +507,6 @@ const workflowStoreImpl: StateCreator = (set, get) => ({ // Switch dimming initial state dimmedNodeIds: new Set(), - // Skip propagation initial state - skippedNodeIds: new Set(), - setEdgeStyle: (style: EdgeStyle) => { set({ edgeStyle: style }); }, @@ -1005,7 +999,15 @@ const workflowStoreImpl: StateCreator = (set, get) => ({ const abortController = new AbortController(); const isResuming = startFromNodeId === get().pausedAtNodeId; const skippedNodeIds = new Set(); - set({ isRunning: true, pausedAtNodeId: null, currentNodeIds: [], skippedNodeIds: new Set(), _abortController: abortController }); + const resetSkippedNodes = () => { + for (const skippedId of skippedNodeIds) { + const skippedNode = get().nodes.find((n) => n.id === skippedId); + if (skippedNode && (skippedNode.data as Record).status !== undefined) { + get().updateNodeData(skippedId, { status: "idle" } as Partial); + } + } + }; + set({ isRunning: true, pausedAtNodeId: null, currentNodeIds: [], _abortController: abortController }); // Start logging session await logger.startSession(); @@ -1087,7 +1089,6 @@ const workflowStoreImpl: StateCreator = (set, get) => ({ (node.type === "prompt" && !(nodeData.prompt as string)?.trim()); if (isEmpty) { skippedNodeIds.add(node.id); - set({ skippedNodeIds: new Set(skippedNodeIds) }); logger.info('node.execution', 'Node skipped (optional input empty)', { nodeId: node.id, nodeType: node.type, @@ -1101,7 +1102,6 @@ const workflowStoreImpl: StateCreator = (set, get) => ({ const hasSkippedSource = incomingEdgesForSkip.some((e) => skippedNodeIds.has(e.source)); if (hasSkippedSource) { skippedNodeIds.add(node.id); - set({ skippedNodeIds: new Set(skippedNodeIds) }); if (nodeData.status !== undefined) { get().updateNodeData(node.id, { status: "skipped" } as Partial); } @@ -1255,15 +1255,9 @@ const workflowStoreImpl: StateCreator = (set, get) => ({ logger.info('workflow.end', 'Workflow execution completed successfully'); } - // Reset skipped nodes' status back to idle - for (const skippedId of skippedNodeIds) { - const skippedNode = get().nodes.find((n) => n.id === skippedId); - if (skippedNode && (skippedNode.data as Record).status !== undefined) { - get().updateNodeData(skippedId, { status: "idle" } as Partial); - } - } + resetSkippedNodes(); - set({ isRunning: false, currentNodeIds: [], skippedNodeIds: new Set(), _abortController: null }); + set({ isRunning: false, currentNodeIds: [], _abortController: null }); saveLogSession(); await logger.endSession(); @@ -1279,14 +1273,8 @@ const workflowStoreImpl: StateCreator = (set, get) => ({ "error" ); } - // Reset skipped nodes' status back to idle - for (const skippedId of skippedNodeIds) { - const skippedNode = get().nodes.find((n) => n.id === skippedId); - if (skippedNode && (skippedNode.data as Record).status !== undefined) { - get().updateNodeData(skippedId, { status: "idle" } as Partial); - } - } - set({ isRunning: false, currentNodeIds: [], skippedNodeIds: new Set(), _abortController: null }); + resetSkippedNodes(); + set({ isRunning: false, currentNodeIds: [], _abortController: null }); saveLogSession(); await logger.endSession(); @@ -1299,7 +1287,7 @@ const workflowStoreImpl: StateCreator = (set, get) => ({ if (controller) { controller.abort("user-cancelled"); } - set({ isRunning: false, currentNodeIds: [], skippedNodeIds: new Set(), _abortController: null }); + set({ isRunning: false, currentNodeIds: [], _abortController: null }); }, setMaxConcurrentCalls: (value: number) => { @@ -1834,8 +1822,6 @@ const workflowStoreImpl: StateCreator = (set, get) => ({ viewedCommentNodeIds: new Set(), // Reset dimmed nodes dimmedNodeIds: new Set(), - // Reset skipped nodes - skippedNodeIds: new Set(), }); get().clearSnapshot(); },