@@ -2473,6 +2473,57 @@ describe("ClaudeAdapterLive", () => {
24732473 ) ;
24742474 } ) ;
24752475
2476+ it . effect (
2477+ "restores default permission mode on sendTurn when interactionMode is chat for approval-required sessions" ,
2478+ ( ) => {
2479+ const harness = makeHarness ( ) ;
2480+ return Effect . gen ( function * ( ) {
2481+ const adapter = yield * ClaudeAdapter ;
2482+
2483+ const session = yield * adapter . startSession ( {
2484+ threadId : THREAD_ID ,
2485+ provider : "claudeAgent" ,
2486+ runtimeMode : "approval-required" ,
2487+ } ) ;
2488+
2489+ yield * adapter . sendTurn ( {
2490+ threadId : session . threadId ,
2491+ input : "plan this" ,
2492+ interactionMode : "plan" ,
2493+ attachments : [ ] ,
2494+ } ) ;
2495+
2496+ const turnCompletedFiber = yield * Stream . filter (
2497+ adapter . streamEvents ,
2498+ ( event ) => event . type === "turn.completed" ,
2499+ ) . pipe ( Stream . runHead , Effect . forkChild ) ;
2500+
2501+ harness . query . emit ( {
2502+ type : "result" ,
2503+ subtype : "success" ,
2504+ is_error : false ,
2505+ errors : [ ] ,
2506+ session_id : "sdk-session-approval-plan-restore" ,
2507+ uuid : "result-approval-plan" ,
2508+ } as unknown as SDKMessage ) ;
2509+
2510+ yield * Fiber . join ( turnCompletedFiber ) ;
2511+
2512+ yield * adapter . sendTurn ( {
2513+ threadId : session . threadId ,
2514+ input : "now answer directly" ,
2515+ interactionMode : "chat" ,
2516+ attachments : [ ] ,
2517+ } ) ;
2518+
2519+ assert . deepEqual ( harness . query . setPermissionModeCalls , [ "plan" , "default" ] ) ;
2520+ } ) . pipe (
2521+ Effect . provideService ( Random . Random , makeDeterministicRandomService ( ) ) ,
2522+ Effect . provide ( harness . layer ) ,
2523+ ) ;
2524+ } ,
2525+ ) ;
2526+
24762527 it . effect ( "does not call setPermissionMode when interactionMode is absent" , ( ) => {
24772528 const harness = makeHarness ( ) ;
24782529 return Effect . gen ( function * ( ) {
0 commit comments