mirror of
https://github.com/openai/codex.git
synced 2026-10-30 19:18:49 +00:00
## What changed - Keep `ClientResponsePayload` typed through the app-server outgoing queue and serialize it at the transport boundary, avoiding an intermediate `serde_json::Value` while preserving the JSON-RPC wire shape. - Return a JSON-RPC internal error when a response cannot be serialized, including over remote control, and skip unserializable analytics responses. - Scan reverse JSONL input a chunk at a time with a larger buffer instead of processing each byte individually. ## Testing - Cover typed response serialization and serialization failures for direct and remote-control transports. - Cover filtering unserializable responses from analytics. GitOrigin-RevId: cc4fd7a43461a273315bb95261bd1ae3ff65fbf7
40 lines
1.1 KiB
Rust
40 lines
1.1 KiB
Rust
use super::*;
|
|
use anyhow::Result;
|
|
use codex_protocol::protocol::TurnAbortReason;
|
|
use pretty_assertions::assert_eq;
|
|
use serde_json::json;
|
|
|
|
#[test]
|
|
fn client_response_payload_serializes_without_an_intermediate_json_value() -> Result<()> {
|
|
let payload = ClientResponsePayload::ThreadArchive(v2::ThreadArchiveResponse {});
|
|
assert_eq!(serde_json::to_string(&payload)?, "{}");
|
|
let Some(ClientResponse::ThreadArchive {
|
|
request_id,
|
|
response: _,
|
|
}) = payload.into_client_response(RequestId::Integer(7))
|
|
else {
|
|
panic!("expected thread/archive client response");
|
|
};
|
|
assert_eq!(request_id, RequestId::Integer(7));
|
|
Ok(())
|
|
}
|
|
|
|
#[test]
|
|
fn interrupt_conversation_payload_stays_jsonrpc_only() -> Result<()> {
|
|
let payload = ClientResponsePayload::InterruptConversation(v1::InterruptConversationResponse {
|
|
abort_reason: TurnAbortReason::Interrupted,
|
|
});
|
|
assert_eq!(
|
|
serde_json::to_value(&payload)?,
|
|
json!({
|
|
"abortReason": "interrupted",
|
|
})
|
|
);
|
|
assert!(
|
|
payload
|
|
.into_client_response(RequestId::Integer(8))
|
|
.is_none()
|
|
);
|
|
Ok(())
|
|
}
|