@@ -433,6 +433,7 @@ export const useWorkflowDiffStore = create<WorkflowDiffState & WorkflowDiffActio
433433 )
434434 }
435435
436+ // Background operations (fire-and-forget) - don't block
436437 if ( triggerMessageId ) {
437438 fetch ( '/api/copilot/stats' , {
438439 method : 'POST' ,
@@ -445,14 +446,13 @@ export const useWorkflowDiffStore = create<WorkflowDiffState & WorkflowDiffActio
445446 } ) . catch ( ( ) => { } )
446447 }
447448
448- const toolCallId = await findLatestEditWorkflowToolCallId ( )
449- if ( toolCallId ) {
450- try {
451- await getClientTool ( toolCallId ) ?. handleAccept ?.( )
452- } catch ( error ) {
453- logger . warn ( 'Failed to notify tool accept state' , { error } )
449+ findLatestEditWorkflowToolCallId ( ) . then ( ( toolCallId ) => {
450+ if ( toolCallId ) {
451+ getClientTool ( toolCallId ) ?. handleAccept ?.( ) ?. catch ?.( ( error : Error ) => {
452+ logger . warn ( 'Failed to notify tool accept state' , { error } )
453+ } )
454454 }
455- }
455+ } )
456456 } ,
457457
458458 rejectChanges : async ( ) => {
@@ -487,27 +487,26 @@ export const useWorkflowDiffStore = create<WorkflowDiffState & WorkflowDiffActio
487487 } )
488488 const afterReject = cloneWorkflowState ( baselineWorkflow )
489489
490- // Apply baseline state locally
491- applyWorkflowStateToStores ( baselineWorkflowId , baselineWorkflow )
492-
493- // Broadcast to other users
494- logger . info ( 'Broadcasting reject to other users' , {
495- workflowId : activeWorkflowId ,
496- blockCount : Object . keys ( baselineWorkflow . blocks ) . length ,
490+ // Clear diff state FIRST for instant UI feedback
491+ set ( {
492+ hasActiveDiff : false ,
493+ isShowingDiff : false ,
494+ isDiffReady : false ,
495+ baselineWorkflow : null ,
496+ baselineWorkflowId : null ,
497+ diffAnalysis : null ,
498+ diffMetadata : null ,
499+ diffError : null ,
500+ _triggerMessageId : null ,
497501 } )
498502
499- await enqueueReplaceWorkflowState ( {
500- workflowId : activeWorkflowId ,
501- state : baselineWorkflow ,
502- } )
503+ // Clear the diff engine
504+ diffEngine . clearDiff ( )
503505
504- // Persist to database
505- const persisted = await persistWorkflowStateToServer ( baselineWorkflowId , baselineWorkflow )
506- if ( ! persisted ) {
507- throw new Error ( 'Failed to restore baseline workflow state' )
508- }
506+ // Apply baseline state locally
507+ applyWorkflowStateToStores ( baselineWorkflowId , baselineWorkflow )
509508
510- // Emit event for undo/redo recording
509+ // Emit event for undo/redo recording synchronously
511510 if ( ! ( window as any ) . __skipDiffRecording ) {
512511 window . dispatchEvent (
513512 new CustomEvent ( 'record-diff-operation' , {
@@ -522,6 +521,25 @@ export const useWorkflowDiffStore = create<WorkflowDiffState & WorkflowDiffActio
522521 )
523522 }
524523
524+ // Background operations (fire-and-forget) - don't block UI
525+ // Broadcast to other users
526+ logger . info ( 'Broadcasting reject to other users' , {
527+ workflowId : activeWorkflowId ,
528+ blockCount : Object . keys ( baselineWorkflow . blocks ) . length ,
529+ } )
530+
531+ enqueueReplaceWorkflowState ( {
532+ workflowId : activeWorkflowId ,
533+ state : baselineWorkflow ,
534+ } ) . catch ( ( error ) => {
535+ logger . error ( 'Failed to broadcast reject to other users:' , error )
536+ } )
537+
538+ // Persist to database in background
539+ persistWorkflowStateToServer ( baselineWorkflowId , baselineWorkflow ) . catch ( ( error ) => {
540+ logger . error ( 'Failed to persist baseline workflow state:' , error )
541+ } )
542+
525543 if ( _triggerMessageId ) {
526544 fetch ( '/api/copilot/stats' , {
527545 method : 'POST' ,
@@ -534,16 +552,13 @@ export const useWorkflowDiffStore = create<WorkflowDiffState & WorkflowDiffActio
534552 } ) . catch ( ( ) => { } )
535553 }
536554
537- const toolCallId = await findLatestEditWorkflowToolCallId ( )
538- if ( toolCallId ) {
539- try {
540- await getClientTool ( toolCallId ) ?. handleReject ?.( )
541- } catch ( error ) {
542- logger . warn ( 'Failed to notify tool reject state' , { error } )
555+ findLatestEditWorkflowToolCallId ( ) . then ( ( toolCallId ) => {
556+ if ( toolCallId ) {
557+ getClientTool ( toolCallId ) ?. handleReject ?.( ) ?. catch ?.( ( error : Error ) => {
558+ logger . warn ( 'Failed to notify tool reject state' , { error } )
559+ } )
543560 }
544- }
545-
546- get ( ) . clearDiff ( { restoreBaseline : false } )
561+ } )
547562 } ,
548563
549564 reapplyDiffMarkers : ( ) => {
0 commit comments