From 3405165f4634d92b62068203d6ffaff91344bd85 Mon Sep 17 00:00:00 2001 From: Roy Han Date: Tue, 28 Apr 2026 09:15:05 -0700 Subject: [PATCH] [app-server] filter analytics before cloning payloads --- codex-rs/analytics/src/client.rs | 15 ++++++++++----- .../app-server-protocol/src/protocol/common.rs | 4 ++-- codex-rs/app-server/src/message_processor.rs | 2 +- 3 files changed, 13 insertions(+), 8 deletions(-) diff --git a/codex-rs/analytics/src/client.rs b/codex-rs/analytics/src/client.rs index 4baf936f45..71a9a6a69f 100644 --- a/codex-rs/analytics/src/client.rs +++ b/codex-rs/analytics/src/client.rs @@ -223,7 +223,12 @@ impl AnalyticsEventsClient { ))); } - pub fn track_request(&self, connection_id: u64, request_id: RequestId, request: ClientRequest) { + pub fn track_request( + &self, + connection_id: u64, + request_id: RequestId, + request: &ClientRequest, + ) { if !matches!( request, ClientRequest::TurnStart { .. } | ClientRequest::TurnSteer { .. } @@ -233,7 +238,7 @@ impl AnalyticsEventsClient { self.record_fact(AnalyticsFact::ClientRequest { connection_id, request_id, - request: Box::new(request), + request: Box::new(request.clone()), }); } @@ -331,10 +336,10 @@ impl AnalyticsEventsClient { &self, connection_id: u64, request_id: RequestId, - response: Box, + response: ClientResponsePayload, ) { if !matches!( - response.as_ref(), + response, ClientResponsePayload::ThreadStart(_) | ClientResponsePayload::ThreadResume(_) | ClientResponsePayload::ThreadFork(_) @@ -346,7 +351,7 @@ impl AnalyticsEventsClient { self.record_fact(AnalyticsFact::ClientResponse { connection_id, request_id, - response, + response: Box::new(response), }); } diff --git a/codex-rs/app-server-protocol/src/protocol/common.rs b/codex-rs/app-server-protocol/src/protocol/common.rs index d67f05eafa..069c66a75b 100644 --- a/codex-rs/app-server-protocol/src/protocol/common.rs +++ b/codex-rs/app-server-protocol/src/protocol/common.rs @@ -184,14 +184,14 @@ macro_rules! client_request_definitions { self, request_id: RequestId, ) -> std::result::Result< - (RequestId, crate::Result, Option>), + (RequestId, crate::Result, Option), serde_json::Error, > { match self { $( Self::$variant(response) => { let result = serde_json::to_value(&response)?; - Ok((request_id, result, Some(Box::new(Self::$variant(response))))) + Ok((request_id, result, Some(Self::$variant(response)))) } )* Self::InterruptConversation(response) => { diff --git a/codex-rs/app-server/src/message_processor.rs b/codex-rs/app-server/src/message_processor.rs index 49f88f1824..4036f78148 100644 --- a/codex-rs/app-server/src/message_processor.rs +++ b/codex-rs/app-server/src/message_processor.rs @@ -724,7 +724,7 @@ impl MessageProcessor { self.analytics_events_client.track_request( connection_id.0, connection_request_id.request_id.clone(), - codex_request.clone(), + &codex_request, ); let app_server_client_name = session.app_server_client_name().map(str::to_string);