This commit is contained in:
Roy Han
2026-03-26 00:00:51 -07:00
4 changed files with 180 additions and 60 deletions
+57 -51
View File
@@ -840,7 +840,7 @@ fn session_source_parent_thread_id(session_source: &SessionSource) -> Option<Str
fn turn_submission_type(submission_type: SubmissionType) -> TurnSubmissionType {
match submission_type {
SubmissionType::Prompt => TurnSubmissionType::Default,
SubmissionType::QueuedPrompt => TurnSubmissionType::Queued,
SubmissionType::PromptQueued => TurnSubmissionType::Queued,
}
}
@@ -5892,6 +5892,59 @@ pub(crate) async fn run_turn(
.await;
}
if !input.is_empty() {
let is_first_turn = {
let mut state = sess.state.lock().await;
state.take_next_turn_is_first()
};
let submission_type = turn_context
.submission_type
.map(turn_submission_type)
.unwrap_or(TurnSubmissionType::Default);
sess.services.analytics_events_client.track_turn_started(
tracking.clone(),
CodexTurnEvent {
submission_type: Some(submission_type),
model_provider: turn_context.config.model_provider_id.clone(),
sandbox_policy: turn_context.sandbox_policy.get().clone(),
reasoning_effort: turn_context.reasoning_effort,
reasoning_summary: Some(turn_context.reasoning_summary),
service_tier: turn_context.config.service_tier,
approval_policy: turn_context.approval_policy.value(),
approvals_reviewer: turn_context.config.approvals_reviewer,
sandbox_network_access: turn_context.network_sandbox_policy.is_enabled(),
collaboration_mode: turn_context.collaboration_mode.mode,
personality: turn_context.personality,
num_input_images: input
.iter()
.filter(|item| {
matches!(item, UserInput::Image { .. } | UserInput::LocalImage { .. })
})
.count(),
is_first_turn,
status: None,
turn_error: None,
steer_count: None,
total_tool_call_count: None,
shell_command_count: None,
file_change_count: None,
mcp_tool_call_count: None,
dynamic_tool_call_count: None,
subagent_tool_call_count: None,
web_search_count: None,
image_generation_count: None,
input_tokens: None,
cached_input_tokens: None,
output_tokens: None,
reasoning_output_tokens: None,
total_tokens: None,
duration_ms: None,
started_at: None,
completed_at: None,
},
);
}
let skills_outcome = Some(turn_context.turn_skills.outcome.as_ref());
sess.maybe_start_ghost_snapshot(Arc::clone(&turn_context), cancellation_token.child_token())
.await;
@@ -6175,56 +6228,9 @@ pub(crate) async fn run_turn(
}
if !input.is_empty() {
let submission_type = turn_context
.submission_type
.map(turn_submission_type)
.unwrap_or(TurnSubmissionType::Default);
let is_first_turn = {
let mut state = sess.state.lock().await;
state.take_next_turn_is_first()
};
sess.services.analytics_events_client.track_turn_event(
tracking,
CodexTurnEvent {
submission_type: Some(submission_type),
model_provider: turn_context.config.model_provider_id.clone(),
sandbox_policy: turn_context.sandbox_policy.get().clone(),
reasoning_effort: turn_context.reasoning_effort,
reasoning_summary: Some(turn_context.reasoning_summary),
service_tier: turn_context.config.service_tier,
approval_policy: turn_context.approval_policy.value(),
approvals_reviewer: turn_context.config.approvals_reviewer,
sandbox_network_access: turn_context.network_sandbox_policy.is_enabled(),
collaboration_mode: turn_context.collaboration_mode.mode,
personality: turn_context.personality,
num_input_images: input
.iter()
.filter(|item| {
matches!(item, UserInput::Image { .. } | UserInput::LocalImage { .. })
})
.count(),
is_first_turn,
status: None,
turn_error: None,
steer_count: None,
total_tool_call_count: None,
shell_command_count: None,
file_change_count: None,
mcp_tool_call_count: None,
dynamic_tool_call_count: None,
subagent_tool_call_count: None,
web_search_count: None,
image_generation_count: None,
input_tokens: None,
cached_input_tokens: None,
output_tokens: None,
reasoning_output_tokens: None,
total_tokens: None,
duration_ms: None,
started_at: None,
completed_at: None,
},
);
sess.services
.analytics_events_client
.track_turn_completed(tracking.turn_id.clone());
}
last_agent_message