@@ -60,6 +60,8 @@ export type AgentLoopInput = {
6060 messages : CanonicalMessage [ ] ;
6161 maxTurns ?: number ;
6262 permissionMode ?: PermissionMode ;
63+ /** The user's actual permission preference before plan-mode override. */
64+ basePermissionMode ?: PermissionMode ;
6365 permissionRules ?: Partial < PermissionRuleSet > ;
6466 abortSignal ?: AbortSignal ;
6567 onDurableMessage ?: ( message : CanonicalMessage ) => void | Promise < void > ;
@@ -96,7 +98,7 @@ export class AgentLoop {
9698 }
9799
98100 async * run ( input : AgentLoopInput ) : AsyncGenerator < AgentEvent , AgentLoopRunResult , unknown > {
99- this . applyPermissionOverrides ( input . permissionMode , input . permissionRules ) ;
101+ this . applyPermissionOverrides ( input . permissionMode , input . permissionRules , input . basePermissionMode ) ;
100102 const startedAt = this . now ( ) . toISOString ( ) ;
101103 let messages = [ ...input . messages ] ;
102104 let turnCount = 1 ;
@@ -1351,10 +1353,11 @@ export class AgentLoop {
13511353 private applyPermissionOverrides (
13521354 permissionMode ?: PermissionMode ,
13531355 permissionRules ?: Partial < PermissionRuleSet > ,
1356+ basePermissionMode ?: PermissionMode ,
13541357 ) : void {
13551358 if ( permissionMode ) {
13561359 if ( permissionMode === "plan" && this . config . permissionMode !== "plan" ) {
1357- this . config . permissionModeBeforePlan = this . config . permissionMode ;
1360+ this . config . permissionModeBeforePlan = basePermissionMode ?? this . config . permissionMode ;
13581361 }
13591362 this . config . permissionMode = permissionMode ;
13601363 this . config . permissionContext . mode = permissionMode ;
0 commit comments