From 9371cd720904ff2446d1c77daafcf8e953026c20 Mon Sep 17 00:00:00 2001 From: celia-oai Date: Tue, 28 Jul 2026 17:14:25 -0700 Subject: [PATCH] Migrate codex-protocol to shared HTTP types --- codex-rs/Cargo.lock | 2 +- codex-rs/deny.toml | 1 - codex-rs/protocol/Cargo.toml | 4 ++-- codex-rs/protocol/src/error.rs | 7 ++++--- codex-rs/protocol/src/error_tests.rs | 18 +++++++++--------- 5 files changed, 16 insertions(+), 16 deletions(-) diff --git a/codex-rs/Cargo.lock b/codex-rs/Cargo.lock index 25875f5492..be2db20937 100644 --- a/codex-rs/Cargo.lock +++ b/codex-rs/Cargo.lock @@ -3780,6 +3780,7 @@ dependencies = [ "codex-async-utils", "codex-execpolicy", "codex-extension-items", + "codex-http-client", "codex-network-proxy", "codex-utils-absolute-path", "codex-utils-image", @@ -3794,7 +3795,6 @@ dependencies = [ "landlock", "pretty_assertions", "quick-xml 0.41.0", - "reqwest 0.12.28", "schemars 0.8.22", "seccompiler", "serde", diff --git a/codex-rs/deny.toml b/codex-rs/deny.toml index 39899a35bd..5ad2bcf19d 100644 --- a/codex-rs/deny.toml +++ b/codex-rs/deny.toml @@ -243,7 +243,6 @@ deny = [ "codex-core", "codex-ollama", "codex-otel", - "codex-protocol", "codex-responses-api-proxy", "codex-tui", # Third-party crates that own their reqwest integration. These are not part of the diff --git a/codex-rs/protocol/Cargo.toml b/codex-rs/protocol/Cargo.toml index 23d065d25d..d80a80f7f2 100644 --- a/codex-rs/protocol/Cargo.toml +++ b/codex-rs/protocol/Cargo.toml @@ -18,6 +18,7 @@ chrono = { workspace = true, features = ["serde"] } codex-async-utils = { workspace = true } codex-execpolicy = { workspace = true } codex-extension-items = { workspace = true } +codex-http-client = { workspace = true } codex-network-proxy = { workspace = true } codex-utils-absolute-path = { workspace = true } codex-utils-image = { workspace = true } @@ -25,11 +26,11 @@ codex-utils-path-uri = { workspace = true } codex-utils-string = { workspace = true } encoding_rs = { workspace = true } globset = { workspace = true } +http = { workspace = true } icu_decimal = { workspace = true } icu_locale_core = { workspace = true } icu_provider = { workspace = true, features = ["sync"] } quick-xml = { workspace = true, features = ["serialize"] } -reqwest = { workspace = true } schemars = { workspace = true } serde = { workspace = true, features = ["derive"] } serde_json = { workspace = true } @@ -54,7 +55,6 @@ seccompiler = { workspace = true } [dev-dependencies] anyhow = { workspace = true } -http = { workspace = true } pretty_assertions = { workspace = true } tempfile = { workspace = true } diff --git a/codex-rs/protocol/src/error.rs b/codex-rs/protocol/src/error.rs index eb29127aa6..d9e5922a02 100644 --- a/codex-rs/protocol/src/error.rs +++ b/codex-rs/protocol/src/error.rs @@ -15,9 +15,10 @@ use chrono::Datelike; use chrono::Local; use chrono::Utc; use codex_async_utils::CancelErr; +use codex_http_client::HttpError; use codex_utils_string::truncate_middle_chars; use codex_utils_string::truncate_middle_with_token_budget; -use reqwest::StatusCode; +use http::StatusCode; use serde_json; use std::fmt; use std::io; @@ -470,7 +471,7 @@ impl CodexErr { #[derive(Debug)] pub struct ConnectionFailedError { - pub source: reqwest::Error, + pub source: HttpError, } impl std::fmt::Display for ConnectionFailedError { @@ -481,7 +482,7 @@ impl std::fmt::Display for ConnectionFailedError { #[derive(Debug)] pub struct ResponseStreamFailed { - pub source: reqwest::Error, + pub source: HttpError, pub request_id: Option, } diff --git a/codex-rs/protocol/src/error_tests.rs b/codex-rs/protocol/src/error_tests.rs index 4ed8780544..c73bb7d9ac 100644 --- a/codex-rs/protocol/src/error_tests.rs +++ b/codex-rs/protocol/src/error_tests.rs @@ -5,12 +5,10 @@ use chrono::DateTime; use chrono::Duration as ChronoDuration; use chrono::TimeZone; use chrono::Utc; -use http::Response as HttpResponse; +use codex_http_client::HttpResponse; +use http::Response as RawHttpResponse; +use http::StatusCode; use pretty_assertions::assert_eq; -use reqwest::Response; -use reqwest::ResponseBuilderExt; -use reqwest::StatusCode; -use reqwest::Url; use std::time::Duration; #[test] @@ -224,12 +222,14 @@ fn sandbox_denied_reports_stdout_when_no_stderr() { #[test] fn to_error_event_handles_response_stream_failed() { - let response = HttpResponse::builder() + let response = RawHttpResponse::builder() .status(StatusCode::TOO_MANY_REQUESTS) - .url(Url::parse("http://example.com").unwrap()) .body("") .unwrap(); - let source = Response::from(response).error_for_status_ref().unwrap_err(); + let source = HttpResponse::from(response) + .error_for_status_ref() + .unwrap_err() + .without_url(); let err = CodexErr::ResponseStreamFailed(ResponseStreamFailed { source, request_id: Some("req-123".to_string()), @@ -239,7 +239,7 @@ fn to_error_event_handles_response_stream_failed() { assert_eq!( event.message, - "prefix: Error while reading the server response: HTTP status client error (429 Too Many Requests) for url (http://example.com/), request id: req-123" + "prefix: Error while reading the server response: HTTP status client error (429 Too Many Requests), request id: req-123" ); assert_eq!( event.codex_error_info,