Skip to content

Commit 39e09c2

Browse files
Add a wrapper around raw response items (#5923)
We currently have nested enums when sending raw response items in the app-server protocol. This makes downstream schemas confusing because we need to embed `type`-discriminated enums within each other. This PR adds a small wrapper around the response item so we can keep the schemas separate
1 parent 069a38a commit 39e09c2

File tree

3 files changed

+16
-4
lines changed

3 files changed

+16
-4
lines changed

codex-rs/app-server/tests/suite/send_message.rs

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ use codex_app_server_protocol::SendUserMessageResponse;
1616
use codex_protocol::ConversationId;
1717
use codex_protocol::models::ContentItem;
1818
use codex_protocol::models::ResponseItem;
19+
use codex_protocol::protocol::RawResponseItemEvent;
1920
use pretty_assertions::assert_eq;
2021
use std::path::Path;
2122
use tempfile::TempDir;
@@ -294,7 +295,9 @@ async fn read_raw_response_item(
294295
.cloned()
295296
.expect("raw response item should include msg payload");
296297

297-
serde_json::from_value(msg_value).expect("deserialize raw response item")
298+
let event: RawResponseItemEvent =
299+
serde_json::from_value(msg_value).expect("deserialize raw response item");
300+
event.item
298301
}
299302

300303
fn assert_instructions_message(item: &ResponseItem) {

codex-rs/core/src/codex.rs

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ use codex_protocol::items::TurnItem;
2323
use codex_protocol::protocol::ExitedReviewModeEvent;
2424
use codex_protocol::protocol::ItemCompletedEvent;
2525
use codex_protocol::protocol::ItemStartedEvent;
26+
use codex_protocol::protocol::RawResponseItemEvent;
2627
use codex_protocol::protocol::ReviewRequest;
2728
use codex_protocol::protocol::RolloutItem;
2829
use codex_protocol::protocol::SessionSource;
@@ -987,8 +988,11 @@ impl Session {
987988

988989
async fn send_raw_response_items(&self, turn_context: &TurnContext, items: &[ResponseItem]) {
989990
for item in items {
990-
self.send_event(turn_context, EventMsg::RawResponseItem(item.clone()))
991-
.await;
991+
self.send_event(
992+
turn_context,
993+
EventMsg::RawResponseItem(RawResponseItemEvent { item: item.clone() }),
994+
)
995+
.await;
992996
}
993997
}
994998

codex-rs/protocol/src/protocol.rs

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -542,12 +542,17 @@ pub enum EventMsg {
542542
/// Exited review mode with an optional final result to apply.
543543
ExitedReviewMode(ExitedReviewModeEvent),
544544

545-
RawResponseItem(ResponseItem),
545+
RawResponseItem(RawResponseItemEvent),
546546

547547
ItemStarted(ItemStartedEvent),
548548
ItemCompleted(ItemCompletedEvent),
549549
}
550550

551+
#[derive(Debug, Clone, Deserialize, Serialize, TS, JsonSchema)]
552+
pub struct RawResponseItemEvent {
553+
pub item: ResponseItem,
554+
}
555+
551556
#[derive(Debug, Clone, Deserialize, Serialize, TS, JsonSchema)]
552557
pub struct ItemStartedEvent {
553558
pub thread_id: ConversationId,

0 commit comments

Comments
 (0)