realtime: rename provider session ids (#20361)

## Summary

Codex is repurposing `session` to mean a thread group, so the realtime
provider session id should no longer use `session_id` / `sessionId` in
Codex-facing protocol payloads. This PR renames that provider-specific
field to `realtime_session_id` / `realtimeSessionId` and intentionally
breaks clients that still send the old field names.

## What Changed

- Renamed realtime provider session fields in `ConversationStartParams`,
`RealtimeConversationStartedEvent`, and `RealtimeEvent::SessionUpdated`.
- Renamed app-server v2 realtime request and notification fields to
`realtimeSessionId`.
- Removed legacy serde aliases for `session_id` / `sessionId`; clients
must send the new names.
- Propagated the rename through core realtime startup, app-server
adapters, codex-api websocket handling, and TUI realtime state.
- Regenerated app-server protocol schema/TypeScript outputs and updated
app-server README examples.
- Kept upstream Realtime API concepts unchanged: provider `session.id`
parsing and `x-session-id` headers still use the upstream wire names.

## Testing

- CI is running on the latest pushed commit.
- Earlier local verification on this PR:
  - `cargo test -p codex-protocol`
- `CODEX_SKIP_VENDORED_BWRAP=1 cargo test -p codex-core
realtime_conversation`
  - `cargo test -p codex-app-server-protocol`
- `CODEX_SKIP_VENDORED_BWRAP=1 cargo test -p codex-app-server
realtime_conversation`
- attempted `CODEX_SKIP_VENDORED_BWRAP=1 cargo test -p codex-tui` (local
linker bus error while linking the test binary)

---------

Co-authored-by: Codex <noreply@openai.com>
This commit is contained in:
Ahmed Ibrahim
2026-04-30 13:39:48 +03:00
committed by GitHub
parent c37f7434ba
commit 8a97f3cf03
23 changed files with 271 additions and 146 deletions

View File

@@ -166,7 +166,7 @@ async fn realtime_ws_e2e_session_create_and_event_flow() {
assert_eq!(
created,
RealtimeEvent::SessionUpdated {
session_id: "sess_mock".to_string(),
realtime_session_id: "sess_mock".to_string(),
instructions: Some("backend prompt".to_string()),
}
);
@@ -271,7 +271,7 @@ async fn realtime_ws_connect_webrtc_sideband_retries_join_until_server_is_availa
assert_eq!(
event,
RealtimeEvent::SessionUpdated {
session_id: "sess_joined".to_string(),
realtime_session_id: "sess_joined".to_string(),
instructions: Some("backend prompt".to_string()),
}
);
@@ -358,7 +358,7 @@ async fn realtime_ws_e2e_send_while_next_event_waits() {
assert_eq!(
next_event,
RealtimeEvent::SessionUpdated {
session_id: "sess_after_send".to_string(),
realtime_session_id: "sess_after_send".to_string(),
instructions: Some("backend prompt".to_string()),
}
);
@@ -474,7 +474,7 @@ async fn realtime_ws_e2e_ignores_unknown_text_events() {
assert_eq!(
event,
RealtimeEvent::SessionUpdated {
session_id: "sess_after_unknown".to_string(),
realtime_session_id: "sess_after_unknown".to_string(),
instructions: Some("backend prompt".to_string()),
}
);