diff --git a/codex-rs/core/src/analytics_client.rs b/codex-rs/core/src/analytics_client.rs index 3226b96169..43f25eefe8 100644 --- a/codex-rs/core/src/analytics_client.rs +++ b/codex-rs/core/src/analytics_client.rs @@ -10,7 +10,6 @@ use codex_protocol::config_types::ServiceTier; use codex_protocol::openai_models::ReasoningEffort; use codex_protocol::protocol::SandboxPolicy; use codex_protocol::protocol::SkillScope; -use codex_protocol::protocol::UserMessageType; use serde::Serialize; use sha1::Digest; use sha1::Sha1; @@ -31,7 +30,7 @@ pub(crate) struct TrackEventsContext { #[derive(Clone)] pub(crate) struct CodexTurnEvent { - pub(crate) submission_origin: Option, + pub(crate) submission_type: Option, pub(crate) sandbox_policy: SandboxPolicy, pub(crate) reasoning_effort: Option, pub(crate) reasoning_summary: ReasoningSummary, @@ -41,7 +40,7 @@ pub(crate) struct CodexTurnEvent { #[derive(Clone, Copy, Debug, Serialize)] #[serde(rename_all = "snake_case")] -pub(crate) enum SubmissionOrigin { +pub(crate) enum SubmissionType { Prompt, PromptQueued, } @@ -54,9 +53,7 @@ pub(crate) enum TurnEventType { } #[derive(Clone, Copy)] -pub(crate) struct CodexTurnSteerEvent { - pub(crate) user_message_type: UserMessageType, -} +pub(crate) struct CodexTurnSteerEvent; pub(crate) fn build_track_events_context( model_slug: String, @@ -434,8 +431,7 @@ struct CodexTurnEventParams { product_client_id: Option, model_slug: Option, turn_event_type: TurnEventType, - submission_origin: Option, - user_message_type: Option, + submission_type: Option, sandbox_policy: Option<&'static str>, reasoning_effort: Option, reasoning_summary: Option, @@ -817,8 +813,7 @@ fn codex_turn_event_params( product_client_id: Some(crate::default_client::originator().value), model_slug: Some(tracking.model_slug.clone()), turn_event_type: TurnEventType::Start, - submission_origin: turn_event.submission_origin, - user_message_type: None, + submission_type: turn_event.submission_type, sandbox_policy: Some(sandbox_policy_mode(&turn_event.sandbox_policy)), reasoning_effort: turn_event.reasoning_effort.map(|value| value.to_string()), reasoning_summary: Some(turn_event.reasoning_summary.to_string()), @@ -829,7 +824,7 @@ fn codex_turn_event_params( fn codex_turn_steer_event_params( tracking: &TrackEventsContext, - turn_steer: CodexTurnSteerEvent, + _turn_steer: CodexTurnSteerEvent, ) -> CodexTurnEventParams { CodexTurnEventParams { thread_id: Some(tracking.thread_id.clone()), @@ -837,8 +832,7 @@ fn codex_turn_steer_event_params( product_client_id: Some(crate::default_client::originator().value), model_slug: Some(tracking.model_slug.clone()), turn_event_type: TurnEventType::Steer, - submission_origin: None, - user_message_type: Some(turn_steer.user_message_type), + submission_type: None, sandbox_policy: None, reasoning_effort: None, reasoning_summary: None, diff --git a/codex-rs/core/src/analytics_client_tests.rs b/codex-rs/core/src/analytics_client_tests.rs index 941078936e..e4f4ed5627 100644 --- a/codex-rs/core/src/analytics_client_tests.rs +++ b/codex-rs/core/src/analytics_client_tests.rs @@ -8,11 +8,10 @@ use super::CodexTurnEvent; use super::CodexTurnEventRequest; use super::CodexTurnSteerEvent; use super::InvocationType; -use super::SubmissionOrigin; +use super::SubmissionType; use super::TrackEventRequest; use super::TrackEventsContext; use super::TurnEventType; -use super::UserMessageType; use super::codex_app_metadata; use super::codex_plugin_metadata; use super::codex_plugin_used_metadata; @@ -210,7 +209,7 @@ fn turn_event_serializes_expected_shape() { event_params: codex_turn_event_params( &tracking, CodexTurnEvent { - submission_origin: Some(SubmissionOrigin::Prompt), + submission_type: Some(SubmissionType::Prompt), sandbox_policy: SandboxPolicy::new_read_only_policy(), reasoning_effort: Some(ReasoningEffort::High), reasoning_summary: ReasoningSummary::Detailed, @@ -232,8 +231,7 @@ fn turn_event_serializes_expected_shape() { "product_client_id": crate::default_client::originator().value, "model_slug": "gpt-5", "turn_event_type": "start", - "submission_origin": "prompt", - "user_message_type": null, + "submission_type": "prompt", "sandbox_policy": "read_only", "reasoning_effort": "high", "reasoning_summary": "detailed", @@ -253,12 +251,7 @@ fn turn_steer_event_serializes_expected_shape() { }; let event = TrackEventRequest::TurnEvent(CodexTurnEventRequest { event_type: "codex_turn_event", - event_params: codex_turn_steer_event_params( - &tracking, - CodexTurnSteerEvent { - user_message_type: UserMessageType::PromptSteering, - }, - ), + event_params: codex_turn_steer_event_params(&tracking, CodexTurnSteerEvent), }); let payload = serde_json::to_value(&event).expect("serialize codex turn steer event"); @@ -273,8 +266,7 @@ fn turn_steer_event_serializes_expected_shape() { "product_client_id": crate::default_client::originator().value, "model_slug": "gpt-5", "turn_event_type": "steer", - "submission_origin": null, - "user_message_type": "prompt_steering", + "submission_type": null, "sandbox_policy": null, "reasoning_effort": null, "reasoning_summary": null, diff --git a/codex-rs/core/src/codex.rs b/codex-rs/core/src/codex.rs index 660b1474f7..35385b6e88 100644 --- a/codex-rs/core/src/codex.rs +++ b/codex-rs/core/src/codex.rs @@ -17,7 +17,7 @@ use crate::analytics_client::AppInvocation; use crate::analytics_client::CodexTurnEvent; use crate::analytics_client::CodexTurnSteerEvent; use crate::analytics_client::InvocationType; -use crate::analytics_client::SubmissionOrigin; +use crate::analytics_client::SubmissionType; use crate::analytics_client::build_track_events_context; use crate::apps::render_apps_section; use crate::auth_env_telemetry::collect_auth_env_telemetry; @@ -3938,12 +3938,9 @@ impl Session { drop(turn_state); drop(active); if let Some(tracking) = self.active_turn_tracking().await { - self.services.analytics_events_client.track_turn_steer( - tracking, - CodexTurnSteerEvent { - user_message_type: SubmittedUserMessageType::PromptSteering, - }, - ); + self.services + .analytics_events_client + .track_turn_steer(tracking, CodexTurnSteerEvent); } Ok(active_turn_id) } @@ -6029,9 +6026,9 @@ pub(crate) async fn run_turn( sess.services.analytics_events_client.track_turn_event( tracking, CodexTurnEvent { - submission_origin: match user_message_type { - SubmittedUserMessageType::Prompt => Some(SubmissionOrigin::Prompt), - SubmittedUserMessageType::PromptQueued => Some(SubmissionOrigin::PromptQueued), + submission_type: match user_message_type { + SubmittedUserMessageType::Prompt => Some(SubmissionType::Prompt), + SubmittedUserMessageType::PromptQueued => Some(SubmissionType::PromptQueued), SubmittedUserMessageType::PromptSteering => None, }, sandbox_policy: turn_context.sandbox_policy.get().clone(), diff --git a/codex-rs/core/tests/suite/items.rs b/codex-rs/core/tests/suite/items.rs index 7bd7c325ee..4da783caa1 100644 --- a/codex-rs/core/tests/suite/items.rs +++ b/codex-rs/core/tests/suite/items.rs @@ -244,7 +244,7 @@ async fn user_turn_tracks_turn_event_analytics() -> anyhow::Result<()> { let event_params = &event["event_params"]; - assert_eq!(event_params["submission_origin"], "prompt"); + assert_eq!(event_params["submission_type"], "prompt"); assert_eq!(event_params["sandbox_policy"], "read_only"); assert_eq!( event_params["product_client_id"], @@ -317,12 +317,12 @@ async fn user_turn_tracks_turn_event_prompt_type_analytics() -> anyhow::Result<( let event = wait_for_analytics_event(&server, "codex_turn_event", |event| { event["event_params"]["turn_event_type"] == "start" - && event["event_params"]["submission_origin"] == "prompt" + && event["event_params"]["submission_type"] == "prompt" }) .await; let event_params = &event["event_params"]; - assert_eq!(event_params["submission_origin"], "prompt"); + assert_eq!(event_params["submission_type"], "prompt"); assert_eq!( event_params["product_client_id"], serde_json::json!(codex_core::default_client::originator().value) @@ -433,12 +433,11 @@ async fn user_turn_tracks_turn_steer_analytics() -> anyhow::Result<()> { let event = wait_for_analytics_event(&server, "codex_turn_event", |event| { event["event_params"]["turn_event_type"] == "steer" - && event["event_params"]["user_message_type"] == "prompt_steering" }) .await; let event_params = &event["event_params"]; - assert_eq!(event_params["user_message_type"], "prompt_steering"); + assert!(event_params["submission_type"].is_null()); assert_eq!( event_params["product_client_id"], serde_json::json!(codex_core::default_client::originator().value)