From fa0a879444a13b1ed1445cc21b78a4a740ac37f0 Mon Sep 17 00:00:00 2001 From: aibrahim-oai Date: Mon, 11 Aug 2025 10:41:23 -0700 Subject: [PATCH] show feedback message after /Compact command (#2162) This PR updates ChatWidget to ensure that when AgentMessage, AgentReasoning, or AgentReasoningRawContent events arrive without any streamed deltas, the final text from the event is rendered before the stream is finalized. Previously, these handlers ignored the event text in such cases, relying solely on prior deltas. image --- codex-rs/tui/src/chatwidget.rs | 26 ++++++++++++++++++-------- 1 file changed, 18 insertions(+), 8 deletions(-) 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(); }