codex: address injected message review feedback

This commit is contained in:
Eric Traut
2026-04-12 13:27:53 -07:00
parent df296d0f9d
commit cd1f0fd41b
2 changed files with 8 additions and 46 deletions

View File

@@ -74,7 +74,6 @@ use codex_protocol::protocol::ConversationAudioParams;
use codex_protocol::protocol::CreditsSnapshot;
use codex_protocol::protocol::GranularApprovalConfig;
use codex_protocol::protocol::InitialHistory;
use codex_protocol::protocol::InjectedMessageEvent;
use codex_protocol::protocol::InterAgentCommunication;
use codex_protocol::protocol::NetworkApprovalProtocol;
use codex_protocol::protocol::RateLimitSnapshot;
@@ -5060,50 +5059,6 @@ async fn queued_response_items_for_next_turn_move_into_next_active_turn() {
assert_eq!(sess.get_pending_input().await, vec![queued_item]);
}
#[tokio::test]
async fn generated_message_records_raw_item_and_emits_injected_event() {
let (sess, tc, rx) = make_session_and_context_with_rx().await;
let response_item = ResponseItem::Message {
id: None,
role: "user".to_string(),
content: vec![ContentItem::InputText {
text: "<external_message><content>hidden wrapper</content></external_message>"
.to_string(),
}],
end_turn: None,
phase: None,
};
let injected_event = InjectedMessageEvent {
content: "Visible message".to_string(),
source: "external".to_string(),
};
sess.record_generated_message_and_emit_display(tc.as_ref(), response_item, injected_event)
.await;
let raw = rx.recv().await.expect("raw response item event");
assert!(matches!(raw.msg, EventMsg::RawResponseItem(_)));
let injected = rx.recv().await.expect("injected message event");
let EventMsg::InjectedMessage(injected) = injected.msg else {
panic!("expected InjectedMessage event");
};
assert_eq!(
injected,
InjectedMessageEvent {
content: "Visible message".to_string(),
source: "external".to_string(),
}
);
let no_legacy_user_message =
tokio::time::timeout(std::time::Duration::from_millis(10), rx.recv()).await;
assert!(
no_legacy_user_message.is_err(),
"generated messages should not emit a legacy UserMessageEvent"
);
}
#[tokio::test]
async fn queue_only_mailbox_mail_waits_for_next_turn_after_answer_boundary() {
let (sess, tc, _rx) = make_session_and_context_with_rx().await;

View File

@@ -1,4 +1,11 @@
//! Queued thread messages and model-visible message envelopes.
//! Generated user-message payloads and model-visible XML envelopes.
//!
//! This module owns the shared representation for messages that are delivered
//! into a thread by the harness rather than typed directly by the user. Today
//! that includes external queued messages and timer-generated messages. The
//! state database keeps the richer persisted payload, while this module renders
//! the smaller XML envelope that is recorded in model history and builds the
//! structured display event that clients can render without parsing that XML.
use crate::timers::TimerDelivery;
use codex_protocol::models::ContentItem;