diff --git a/src/components/WorkflowCanvas.tsx b/src/components/WorkflowCanvas.tsx index 67bbc547..b0ceae08 100644 --- a/src/components/WorkflowCanvas.tsx +++ b/src/components/WorkflowCanvas.tsx @@ -580,7 +580,7 @@ export function WorkflowCanvas() { if (data.success && data.workflow) { captureSnapshot(); // Capture BEFORE loading new workflow - await loadWorkflow(data.workflow); + await loadWorkflow(data.workflow, undefined, { preserveSnapshot: true }); setIsChatOpen(false); showToast("Workflow generated successfully", "success"); } else { diff --git a/src/store/workflowStore.ts b/src/store/workflowStore.ts index ba460d5d..08e0c4b6 100644 --- a/src/store/workflowStore.ts +++ b/src/store/workflowStore.ts @@ -127,7 +127,7 @@ interface WorkflowStore { // Save/Load saveWorkflow: (name?: string) => void; - loadWorkflow: (workflow: WorkflowFile, workflowPath?: string) => Promise; + loadWorkflow: (workflow: WorkflowFile, workflowPath?: string, options?: { preserveSnapshot?: boolean }) => Promise; clearWorkflow: () => void; // Helpers @@ -2442,7 +2442,7 @@ export const useWorkflowStore = create((set, get) => ({ URL.revokeObjectURL(url); }, - loadWorkflow: async (workflow: WorkflowFile, workflowPath?: string) => { + loadWorkflow: async (workflow: WorkflowFile, workflowPath?: string, options?: { preserveSnapshot?: boolean }) => { // Update nodeIdCounter to avoid ID collisions const maxNodeId = workflow.nodes.reduce((max, node) => { const match = node.id.match(/-(\d+)$/); @@ -2539,8 +2539,10 @@ export const useWorkflowStore = create((set, get) => ({ viewedCommentNodeIds: new Set(), }); - // Clear any snapshot when user manually loads a workflow - get().clearSnapshot(); + // Clear snapshot unless explicitly preserving (e.g., AI workflow generation) + if (!options?.preserveSnapshot) { + get().clearSnapshot(); + } }, clearWorkflow: () => {