consolidate thread context

This commit is contained in:
Roy Han
2026-03-25 15:28:52 -07:00
parent b41bc22e45
commit f0bc8dec3e
3 changed files with 48 additions and 23 deletions
+34 -13
View File
@@ -38,6 +38,23 @@ pub struct CodexThreadInitializedEvent {
pub created_at: u64,
}
#[derive(Clone)]
pub struct CodexThreadInitializedInput {
pub thread_id: String,
pub model: String,
pub created_at: u64,
pub thread_context: CodexThreadContext,
}
#[derive(Clone)]
pub struct CodexThreadContext {
pub ephemeral: bool,
pub session_source: SessionSource,
pub initialization_mode: InitializationMode,
pub subagent_source: Option<SubAgentSource>,
pub parent_thread_id: Option<String>,
}
#[derive(Clone, Copy, Debug, Serialize)]
#[serde(rename_all = "snake_case")]
pub enum InitializationMode {
@@ -80,7 +97,7 @@ pub struct AppInvocation {
}
pub enum AnalyticsInput {
ThreadInitialized(ThreadInitializedInput),
ThreadInitialized(CodexThreadInitializedInput),
SkillInvoked(SkillInvokedInput),
AppMentioned(AppMentionedInput),
AppUsed(AppUsedInput),
@@ -88,10 +105,6 @@ pub enum AnalyticsInput {
PluginStateChanged(PluginStateChangedInput),
}
pub struct ThreadInitializedInput {
pub thread_event: CodexThreadInitializedEvent,
}
pub struct SkillInvokedInput {
pub tracking: TrackEventsContext,
pub invocations: Vec<SkillInvocation>,
@@ -228,10 +241,8 @@ impl AnalyticsEventsClient {
}));
}
pub fn track_thread_initialized(&self, thread_event: CodexThreadInitializedEvent) {
self.record(AnalyticsInput::ThreadInitialized(ThreadInitializedInput {
thread_event,
}));
pub fn track_thread_initialized(&self, input: CodexThreadInitializedInput) {
self.record(AnalyticsInput::ThreadInitialized(input));
}
pub fn track_app_mentioned(&self, tracking: TrackEventsContext, mentions: Vec<AppInvocation>) {
@@ -446,19 +457,29 @@ impl AnalyticsReducer {
fn ingest_thread_initialized(
&mut self,
input: ThreadInitializedInput,
input: CodexThreadInitializedInput,
out: &mut Vec<TrackEventRequest>,
) {
let event = CodexThreadInitializedEvent {
thread_id: input.thread_id,
model: input.model,
ephemeral: input.thread_context.ephemeral,
session_source: input.thread_context.session_source,
initialization_mode: input.thread_context.initialization_mode,
subagent_source: input.thread_context.subagent_source,
parent_thread_id: input.thread_context.parent_thread_id,
created_at: input.created_at,
};
self.threads.insert(
input.thread_event.thread_id.clone(),
event.thread_id.clone(),
ThreadState {
_initialized_event: input.thread_event.clone(),
_initialized_event: event.clone(),
},
);
out.push(TrackEventRequest::ThreadInitialized(
CodexThreadInitializedEventRequest {
event_type: "codex_thread_initialized",
event_params: codex_thread_initialized_event_params(input.thread_event),
event_params: codex_thread_initialized_event_params(event),
},
));
}
+2 -1
View File
@@ -6,7 +6,9 @@ pub use analytics_client::AnalyticsReducer;
pub use analytics_client::AppInvocation;
pub use analytics_client::AppMentionedInput;
pub use analytics_client::AppUsedInput;
pub use analytics_client::CodexThreadContext;
pub use analytics_client::CodexThreadInitializedEvent;
pub use analytics_client::CodexThreadInitializedInput;
pub use analytics_client::InitializationMode;
pub use analytics_client::InvocationType;
pub use analytics_client::PluginState;
@@ -14,6 +16,5 @@ pub use analytics_client::PluginStateChangedInput;
pub use analytics_client::PluginUsedInput;
pub use analytics_client::SkillInvocation;
pub use analytics_client::SkillInvokedInput;
pub use analytics_client::ThreadInitializedInput;
pub use analytics_client::TrackEventsContext;
pub use analytics_client::build_track_events_context;
+12 -9
View File
@@ -350,7 +350,8 @@ use crate::util::backoff;
use crate::windows_sandbox::WindowsSandboxLevelExt;
use codex_analytics::AnalyticsEventsClient;
use codex_analytics::AppInvocation;
use codex_analytics::CodexThreadInitializedEvent;
use codex_analytics::CodexThreadContext;
use codex_analytics::CodexThreadInitializedInput;
use codex_analytics::InitializationMode;
use codex_analytics::InvocationType;
use codex_analytics::build_track_events_context;
@@ -670,23 +671,25 @@ impl Codex {
session
.services
.analytics_events_client
.track_thread_initialized(CodexThreadInitializedEvent {
.track_thread_initialized(CodexThreadInitializedInput {
thread_id: thread_id.to_string(),
model: thread_initialized_configuration
.collaboration_mode
.model()
.to_string(),
ephemeral: thread_initialized_configuration
.original_config_do_not_use
.ephemeral,
initialization_mode,
subagent_source: session_source_subagent_source(&thread_session_source),
parent_thread_id: session_source_parent_thread_id(&thread_session_source),
session_source: thread_session_source,
created_at: SystemTime::now()
.duration_since(UNIX_EPOCH)
.unwrap_or_default()
.as_secs(),
thread_context: CodexThreadContext {
ephemeral: thread_initialized_configuration
.original_config_do_not_use
.ephemeral,
session_source: thread_session_source,
initialization_mode,
subagent_source: session_source_subagent_source(&thread_session_source),
parent_thread_id: session_source_parent_thread_id(&thread_session_source),
},
});
// This task will run until Op::Shutdown is received.