diff --git a/codex-rs/exec-server/src/client_transport.rs b/codex-rs/exec-server/src/client_transport.rs index 20fba49738..b4a75bb6b3 100644 --- a/codex-rs/exec-server/src/client_transport.rs +++ b/codex-rs/exec-server/src/client_transport.rs @@ -34,7 +34,7 @@ use crate::noise_relay::NoiseHarnessConnectionArgs; use crate::noise_relay::noise_harness_connection_from_websocket; use crate::noise_relay::noise_relay_websocket_config; use crate::relay::harness_connection_from_websocket; -use crate::trace_context::current_trace_context_headers; +use crate::trace_context::current_rendezvous_headers; const ENVIRONMENT_CLIENT_NAME: &str = "codex-environment"; @@ -342,9 +342,7 @@ impl ExecServerClient { url: diagnostic_url.clone(), source, })?; - request - .headers_mut() - .extend(current_trace_context_headers()); + request.headers_mut().extend(current_rendezvous_headers()); let (stream, _) = timeout( connect_timeout, WebSocketConnector::new_with_tls_mode( diff --git a/codex-rs/exec-server/src/remote.rs b/codex-rs/exec-server/src/remote.rs index 16deaa092c..9d372b104c 100644 --- a/codex-rs/exec-server/src/remote.rs +++ b/codex-rs/exec-server/src/remote.rs @@ -44,6 +44,7 @@ use crate::relay::HarnessKeyValidator; use crate::relay::run_multiplexed_environment; use crate::server::ConnectionProcessor; use crate::server::RequestDispatchMode; +use crate::trace_context::current_rendezvous_headers; use crate::trace_context::current_trace_context_headers; const ERROR_BODY_PREVIEW_BYTES: usize = 4096; @@ -673,9 +674,7 @@ async fn connect_rendezvous( let started_at = Instant::now(); let result = async { let mut request = url.into_client_request()?; - request - .headers_mut() - .extend(current_trace_context_headers()); + request.headers_mut().extend(current_rendezvous_headers()); let connector = WebSocketConnector::new_with_tls_mode( http_client_factory, WebSocketTlsMode::TungsteniteDefault, diff --git a/codex-rs/exec-server/src/trace_context.rs b/codex-rs/exec-server/src/trace_context.rs index 0d61ae1ea9..f6fd898c05 100644 --- a/codex-rs/exec-server/src/trace_context.rs +++ b/codex-rs/exec-server/src/trace_context.rs @@ -1,6 +1,22 @@ use http::HeaderMap; use http::HeaderValue; +pub(crate) fn current_rendezvous_headers() -> HeaderMap { + let mut headers = current_trace_context_headers(); + for (header, variable) in [ + ("x-cluster-name", "OPENAI_CLUSTER"), + ("x-openai-internal-caller", "DD_SERVICE"), + ] { + if let Ok(value) = std::env::var(variable) + && !value.is_empty() + && let Ok(value) = HeaderValue::try_from(value) + { + headers.insert(header, value); + } + } + headers +} + pub(crate) fn current_trace_context_headers() -> HeaderMap { let mut headers = HeaderMap::new(); let Some(trace) = codex_otel::current_span_w3c_trace_context() else {