@@ -2059,6 +2059,37 @@ test('attachAcpSession does not double-kill a child that exits cleanly on stdin.
20592059 }
20602060} ) ;
20612061
2062+ test ( 'attachAcpSession accepts an opted-in ACP turn_end update as prompt completion' , ( ) => {
2063+ const child = new FakeAcpChild ( ) ;
2064+ const events : Array < { event : string ; payload : unknown } > = [ ] ;
2065+
2066+ const session = attachAcpSession ( {
2067+ child : child as never ,
2068+ prompt : 'hello' ,
2069+ cwd : '/tmp/od-project' ,
2070+ model : null ,
2071+ mcpServers : [ ] ,
2072+ completePromptOnTurnEnd : true ,
2073+ send : ( event , payload ) => events . push ( { event, payload } ) ,
2074+ } ) ;
2075+
2076+ writeAcpResult ( child , 1 , { } ) ;
2077+ writeAcpResult ( child , 2 , { sessionId : 'session-1' } ) ;
2078+ writeAcpUpdate ( child , {
2079+ sessionUpdate : 'agent_message_chunk' ,
2080+ content : { type : 'text' , text : 'done' } ,
2081+ } ) ;
2082+ writeAcpUpdate ( child , {
2083+ sessionUpdate : 'turn_end' ,
2084+ usage : { inputTokens : 1 , outputTokens : 1 } ,
2085+ } ) ;
2086+ child . emit ( 'close' , 0 , null ) ;
2087+
2088+ assert . equal ( session . completedSuccessfully ( ) , true ) ;
2089+ assert . equal ( session . hasFatalError ( ) , false ) ;
2090+ assert . equal ( events . some ( ( entry ) => entry . event === 'error' ) , false ) ;
2091+ } ) ;
2092+
20622093test ( 'attachAcpSession.completedSuccessfully reflects abort and fatal-error states' , ( ) => {
20632094 const child = new FakeAcpChild ( ) ;
20642095
0 commit comments