@@ -27,6 +27,7 @@ import {
2727 findPendingPermissions ,
2828 type PermissionRequest ,
2929} from "../utils/parseSessionLogs" ;
30+ import { getPersistedTaskMode , setPersistedTaskMode } from "./sessionModeStore" ;
3031
3132const log = logger . scope ( "session-store" ) ;
3233const CLOUD_POLLING_INTERVAL_MS = 500 ;
@@ -149,6 +150,7 @@ function subscribeToChannel(taskRunId: string) {
149150 newMode === "acceptEdits"
150151 ) {
151152 session . currentMode = newMode ;
153+ setPersistedTaskMode ( session . taskId , newMode ) ;
152154 log . info ( "Session mode updated" , { taskRunId, newMode } ) ;
153155 }
154156 }
@@ -595,10 +597,14 @@ const useStore = create<SessionStore>()(
595597 } ) ;
596598 }
597599
600+ const persistedMode = getPersistedTaskMode ( taskId ) ;
598601 const session = createBaseSession ( taskRunId , taskId , false ) ;
599602 session . events = events ;
600603 session . logUrl = logUrl ;
601604 session . pendingPermissions = pendingPermissions ;
605+ if ( persistedMode ) {
606+ session . currentMode = persistedMode ;
607+ }
602608
603609 addSession ( session ) ;
604610 subscribeToChannel ( taskRunId ) ;
@@ -616,6 +622,24 @@ const useStore = create<SessionStore>()(
616622
617623 if ( result ) {
618624 updateSession ( taskRunId , { status : "connected" } ) ;
625+ if ( persistedMode ) {
626+ try {
627+ await trpcVanilla . agent . setMode . mutate ( {
628+ sessionId : taskRunId ,
629+ modeId : persistedMode ,
630+ } ) ;
631+ log . info ( "Restored persisted mode after reconnect" , {
632+ taskId,
633+ taskRunId,
634+ mode : persistedMode ,
635+ } ) ;
636+ } catch ( error ) {
637+ log . warn ( "Failed to restore persisted mode after reconnect" , {
638+ taskId,
639+ error,
640+ } ) ;
641+ }
642+ }
619643 } else {
620644 unsubscribeFromChannel ( taskRunId ) ;
621645 removeSession ( taskRunId ) ;
@@ -640,6 +664,9 @@ const useStore = create<SessionStore>()(
640664 return ;
641665 }
642666
667+ const persistedMode = getPersistedTaskMode ( taskId ) ;
668+ const effectiveMode = executionMode ?? persistedMode ;
669+
643670 const { defaultModel, defaultFramework } = useSettingsStore . getState ( ) ;
644671 const result = await trpcVanilla . agent . start . mutate ( {
645672 taskId,
@@ -650,19 +677,22 @@ const useStore = create<SessionStore>()(
650677 projectId : auth . projectId ,
651678 model : defaultModel ,
652679 framework : defaultFramework ,
653- executionMode,
680+ executionMode : effectiveMode ,
654681 } ) ;
655682
656683 const session = createBaseSession (
657684 taskRun . id ,
658685 taskId ,
659686 false ,
660687 defaultFramework ,
661- executionMode ,
688+ effectiveMode === "default" ? undefined : effectiveMode ,
662689 ) ;
663690 session . channel = result . channel ;
664691 session . status = "connected" ;
665692 session . model = defaultModel ;
693+ if ( persistedMode && ! executionMode ) {
694+ session . currentMode = persistedMode ;
695+ }
666696
667697 addSession ( session ) ;
668698 subscribeToChannel ( taskRun . id ) ;
@@ -903,6 +933,7 @@ const useStore = create<SessionStore>()(
903933 modeId,
904934 } ) ;
905935 updateSession ( session . taskRunId , { currentMode : modeId } ) ;
936+ setPersistedTaskMode ( taskId , modeId ) ;
906937 } catch ( error ) {
907938 log . error ( "Failed to change session mode" , {
908939 taskId,
0 commit comments