tui: avoid duplicate user prompt rendering

This commit is contained in:
Charles Cunningham
2026-03-02 16:14:31 -08:00
parent 659768831d
commit 0f5a58be65
2 changed files with 25 additions and 2 deletions
+7 -2
View File
@@ -4547,11 +4547,16 @@ impl ChatWidget {
&& let EventMsg::UserMessage(user_message) = item.as_legacy_event()
{
let rendered = Self::rendered_user_message_event_from_event(&user_message);
if self.pending_nudges.front() == Some(&rendered) {
let should_render = if self.pending_nudges.front() == Some(&rendered) {
self.pending_nudges.pop_front();
self.refresh_pending_input_preview();
true
} else {
self.last_rendered_user_message_event.as_ref() != Some(&rendered)
};
if should_render {
self.on_user_message_event(user_message);
}
self.on_user_message_event(user_message);
}
}
EventMsg::EnteredReviewMode(review_request) => {
+18
View File
@@ -3626,6 +3626,24 @@ async fn raw_response_item_with_canonicalized_user_payload_clears_pending_nudge(
assert!(lines_to_single_string(&inserted[0]).contains("hello world"));
}
#[tokio::test]
async fn raw_response_item_does_not_duplicate_locally_rendered_user_message() {
let (mut chat, mut rx, _op_rx) = make_chatwidget_manual(None).await;
chat.thread_id = Some(ThreadId::new());
chat.bottom_pane
.set_composer_text("hello".to_string(), Vec::new(), Vec::new());
chat.handle_key_event(KeyEvent::new(KeyCode::Enter, KeyModifiers::NONE));
let inserted = drain_insert_history(&mut rx);
assert_eq!(inserted.len(), 1);
assert!(lines_to_single_string(&inserted[0]).contains("hello"));
chat.handle_codex_event(raw_user_message_event("hello"));
assert!(drain_insert_history(&mut rx).is_empty());
}
#[tokio::test]
async fn raw_response_item_only_pops_front_pending_nudge() {
let (mut chat, mut rx, _op_rx) = make_chatwidget_manual(None).await;