@@ -8,6 +8,7 @@ import type {
88import { applyPatch } from "diff" ;
99
1010interface AgentSession {
11+ seenReasoningDeltas : boolean ;
1112 pendingPrompt : AbortController | null ;
1213}
1314
@@ -69,6 +70,7 @@ export class CodexACPAgent implements acp.Agent {
6970
7071 const sessionId = newConversationResponse . conversationId ;
7172 this . sessions . set ( sessionId , {
73+ seenReasoningDeltas : false ,
7274 pendingPrompt : null ,
7375 } ) ;
7476
@@ -172,18 +174,65 @@ export class CodexACPAgent implements acp.Agent {
172174
173175 private async onAgentMessage ( sessionId : string , event : EventMsg ) {
174176 switch ( event . type ) {
175- case "agent_reasoning" :
177+ case "agent_reasoning" : {
178+ const session = this . sessions . get ( sessionId ) ;
179+ if ( ! session ) break ;
180+
181+ // Only send if we haven't seen delta events (non-streaming mode)
182+ if ( ! session . seenReasoningDeltas ) {
183+ await this . connection . sessionUpdate ( {
184+ sessionId : sessionId ,
185+ update : {
186+ sessionUpdate : "agent_thought_chunk" ,
187+ content : {
188+ type : "text" ,
189+ text : event . text
190+ }
191+ }
192+ } ) ;
193+ }
194+ // Reset the flag for next turn
195+ session . seenReasoningDeltas = false ;
196+ break ;
197+ }
198+
199+ case "reasoning_content_delta" :
200+ case "reasoning_raw_content_delta" : {
201+ const session = this . sessions . get ( sessionId ) ;
202+ if ( ! session ) break ;
203+
204+ session . seenReasoningDeltas = true ;
205+ await this . connection . sessionUpdate ( {
206+ sessionId : sessionId ,
207+ update : {
208+ sessionUpdate : "agent_thought_chunk" ,
209+ content : {
210+ type : "text" ,
211+ text : event . delta
212+ }
213+ }
214+ } ) ;
215+ break ;
216+ }
217+
218+ case "agent_reasoning_section_break" : {
219+ const session = this . sessions . get ( sessionId ) ;
220+ if ( ! session ) break ;
221+
222+ session . seenReasoningDeltas = true ;
223+ // Send spacing for section break
176224 await this . connection . sessionUpdate ( {
177225 sessionId : sessionId ,
178226 update : {
179227 sessionUpdate : "agent_thought_chunk" ,
180228 content : {
181229 type : "text" ,
182- text : event . text
230+ text : "\n\n"
183231 }
184232 }
185233 } ) ;
186234 break ;
235+ }
187236
188237 case "exec_command_begin" :
189238 if ( event . command [ 0 ] === "bash" || event . command [ 0 ] === "/bin/bash" ) {
@@ -276,8 +325,6 @@ export class CodexACPAgent implements acp.Agent {
276325 case "item_started" :
277326 case "item_completed" :
278327 case "agent_message_content_delta" :
279- case "reasoning_content_delta" :
280- case "reasoning_raw_content_delta" :
281328 case "shutdown_complete" :
282329 case "warning" :
283330 case "task_started" :
@@ -288,7 +335,6 @@ export class CodexACPAgent implements acp.Agent {
288335 case "agent_reasoning_delta" :
289336 case "agent_reasoning_raw_content" :
290337 case "agent_reasoning_raw_content_delta" :
291- case "agent_reasoning_section_break" :
292338 case "session_configured" :
293339 case "mcp_tool_call_begin" :
294340 case "mcp_tool_call_end" :
0 commit comments