diff --git a/codex-rs/tui/src/chatwidget.rs b/codex-rs/tui/src/chatwidget.rs index 344f0258..0362a678 100644 --- a/codex-rs/tui/src/chatwidget.rs +++ b/codex-rs/tui/src/chatwidget.rs @@ -311,10 +311,12 @@ impl ChatWidget<'_> { self.request_redraw(); } - EventMsg::AgentMessage(AgentMessageEvent { message: _ }) => { - // Final assistant answer: commit all remaining rows and close with - // a blank line. Use the final text if provided, otherwise rely on - // streamed deltas already in the builder. + EventMsg::AgentMessage(AgentMessageEvent { message }) => { + // AgentMessage: if no deltas were streamed, render the final text. + if self.current_stream != Some(StreamKind::Answer) && !message.is_empty() { + self.begin_stream(StreamKind::Answer); + self.stream_push_and_maybe_commit(&message); + } self.finalize_stream(StreamKind::Answer); self.request_redraw(); } @@ -332,8 +334,12 @@ impl ChatWidget<'_> { self.stream_push_and_maybe_commit(&delta); self.request_redraw(); } - EventMsg::AgentReasoning(AgentReasoningEvent { text: _ }) => { - // Final reasoning: commit remaining rows and close with a blank. + EventMsg::AgentReasoning(AgentReasoningEvent { text }) => { + // Final reasoning: if no deltas were streamed, render the final text. + if self.current_stream != Some(StreamKind::Reasoning) && !text.is_empty() { + self.begin_stream(StreamKind::Reasoning); + self.stream_push_and_maybe_commit(&text); + } self.finalize_stream(StreamKind::Reasoning); self.request_redraw(); } @@ -346,8 +352,12 @@ impl ChatWidget<'_> { self.stream_push_and_maybe_commit(&delta); self.request_redraw(); } - EventMsg::AgentReasoningRawContent(AgentReasoningRawContentEvent { text: _ }) => { - // Finalize the raw reasoning stream just like the summarized reasoning event. + EventMsg::AgentReasoningRawContent(AgentReasoningRawContentEvent { text }) => { + // Final raw reasoning content: if no deltas were streamed, render the final text. + if self.current_stream != Some(StreamKind::Reasoning) && !text.is_empty() { + self.begin_stream(StreamKind::Reasoning); + self.stream_push_and_maybe_commit(&text); + } self.finalize_stream(StreamKind::Reasoning); self.request_redraw(); }