mirror of
https://github.com/openai/codex.git
synced 2026-05-16 09:12:54 +00:00
### Why The RMCP layer needs a Streamable HTTP client that can talk either directly over `reqwest` or through the executor HTTP runner without duplicating MCP session logic higher in the stack. This PR adds that client-side transport boundary so remote Streamable HTTP MCP can reuse the same RMCP flow as the local path. ### What - Add a shared `rmcp-client/src/streamable_http/` module with: - `transport_client.rs` for the local-or-remote transport enum - `local_client.rs` for the direct `reqwest` implementation - `remote_client.rs` for the executor-backed implementation - `common.rs` for the small shared Streamable HTTP helpers - Teach `RmcpClient` to build Streamable HTTP transports in either local or remote mode while keeping the existing OAuth ownership in RMCP. - Translate remote POST, GET, and DELETE session operations into executor `http/request` calls. - Preserve RMCP session expiry handling and reconnect behavior for the remote transport. - Add remote transport coverage in `rmcp-client/tests/streamable_http_remote.rs` and keep the shared test support in `rmcp-client/tests/streamable_http_test_support.rs`. ### Verification - `cargo check -p codex-rmcp-client` - online CI ### Stack 1. #18581 protocol 2. #18582 runner 3. #18583 RMCP client 4. #18584 manager wiring and local/remote coverage --------- Co-authored-by: Codex <noreply@openai.com>
27 lines
1.2 KiB
Rust
27 lines
1.2 KiB
Rust
//! HTTP client capability implementations shared by local and remote environments.
|
|
//!
|
|
//! This module is the facade for the environment-owned [`crate::HttpClient`]
|
|
//! capability:
|
|
//! - [`ReqwestHttpClient`] executes requests directly with `reqwest`
|
|
//! - [`ExecServerClient`] forwards requests over the JSON-RPC transport
|
|
//! - [`HttpResponseBodyStream`] presents buffered local bodies and streamed
|
|
//! remote `http/request/bodyDelta` notifications through one byte-stream API
|
|
//!
|
|
//! Runtime split:
|
|
//! - orchestrator process: holds an `Arc<dyn HttpClient>` and chooses local or
|
|
//! remote execution
|
|
//! - remote runtime: serves the `http/request` RPC and runs the concrete local
|
|
//! HTTP request there when the orchestrator uses [`ExecServerClient`]
|
|
|
|
#[path = "reqwest_http_client.rs"]
|
|
mod reqwest_http_client;
|
|
#[path = "http_response_body_stream.rs"]
|
|
pub(crate) mod response_body_stream;
|
|
#[path = "rpc_http_client.rs"]
|
|
mod rpc_http_client;
|
|
|
|
pub(crate) use reqwest_http_client::PendingReqwestHttpBodyStream;
|
|
pub use reqwest_http_client::ReqwestHttpClient;
|
|
pub(crate) use reqwest_http_client::ReqwestHttpRequestRunner;
|
|
pub use response_body_stream::HttpResponseBodyStream;
|