[codex-analytics] add protocol-native turn timestamps

This commit is contained in:
rhan-oai
2026-04-06 10:20:07 -07:00
parent 4fd5c35c4f
commit 577abcf681
58 changed files with 1098 additions and 35 deletions
@@ -167,6 +167,9 @@ fn turn_completed_recovers_final_message_from_turn_items() {
}],
status: TurnStatus::Completed,
error: None,
created_at: None,
completed_at: Some(0),
duration_ms: None,
},
},
));
@@ -211,6 +214,9 @@ fn turn_completed_overwrites_stale_final_message_from_turn_items() {
}],
status: TurnStatus::Completed,
error: None,
created_at: None,
completed_at: Some(0),
duration_ms: None,
},
},
));
@@ -251,6 +257,9 @@ fn turn_completed_preserves_streamed_final_message_when_turn_items_are_empty() {
items: Vec::new(),
status: TurnStatus::Completed,
error: None,
created_at: None,
completed_at: Some(0),
duration_ms: None,
},
},
));
@@ -291,6 +300,9 @@ fn turn_failed_clears_stale_final_message() {
items: Vec::new(),
status: TurnStatus::Failed,
error: None,
created_at: None,
completed_at: Some(0),
duration_ms: None,
},
},
));
@@ -332,6 +344,9 @@ fn turn_interrupted_clears_stale_final_message() {
items: Vec::new(),
status: TurnStatus::Interrupted,
error: None,
created_at: None,
completed_at: Some(0),
duration_ms: None,
},
},
));
@@ -38,6 +38,9 @@ fn failed_turn_does_not_overwrite_output_last_message_file() {
additional_details: None,
codex_error_info: None,
}),
created_at: None,
completed_at: Some(0),
duration_ms: None,
},
},
));
+5 -1
View File
@@ -42,6 +42,7 @@ use codex_app_server_protocol::ThreadStartParams;
use codex_app_server_protocol::ThreadStartResponse;
use codex_app_server_protocol::ThreadUnsubscribeParams;
use codex_app_server_protocol::ThreadUnsubscribeResponse;
use codex_app_server_protocol::Turn;
use codex_app_server_protocol::TurnInterruptParams;
use codex_app_server_protocol::TurnInterruptResponse;
use codex_app_server_protocol::TurnStartParams;
@@ -719,7 +720,10 @@ async fn run_exec_session(args: ExecRunArgs) -> anyhow::Result<()> {
let _ = event_processor.process_server_notification(ServerNotification::TurnStarted(
TurnStartedNotification {
thread_id: response.review_thread_id.clone(),
turn: response.turn.clone(),
turn: Turn {
created_at: Some(0),
..response.turn.clone()
},
},
));
let task_id = response.turn.id;
+6
View File
@@ -268,6 +268,9 @@ fn turn_items_for_thread_returns_matching_turn_items() {
}],
status: codex_app_server_protocol::TurnStatus::Completed,
error: None,
created_at: None,
completed_at: None,
duration_ms: None,
},
codex_app_server_protocol::Turn {
id: "turn-2".to_string(),
@@ -277,6 +280,9 @@ fn turn_items_for_thread_returns_matching_turn_items() {
}],
status: codex_app_server_protocol::TurnStatus::Completed,
error: None,
created_at: None,
completed_at: None,
duration_ms: None,
},
],
};
@@ -144,6 +144,9 @@ fn turn_started_emits_turn_started_event() {
items: Vec::new(),
status: TurnStatus::InProgress,
error: None,
created_at: None,
completed_at: None,
duration_ms: None,
},
}));
@@ -1066,6 +1069,9 @@ fn plan_update_emits_started_then_updated_then_completed() {
items: Vec::new(),
status: TurnStatus::Completed,
error: None,
created_at: None,
completed_at: None,
duration_ms: None,
},
},
));
@@ -1122,6 +1128,9 @@ fn plan_update_after_completion_starts_new_todo_list_with_new_id() {
items: Vec::new(),
status: TurnStatus::Completed,
error: None,
created_at: None,
completed_at: None,
duration_ms: None,
},
},
));
@@ -1201,6 +1210,9 @@ fn token_usage_update_is_emitted_on_turn_completion() {
items: Vec::new(),
status: TurnStatus::Completed,
error: None,
created_at: None,
completed_at: None,
duration_ms: None,
},
},
));
@@ -1236,6 +1248,9 @@ fn turn_completion_recovers_final_message_from_turn_items() {
}],
status: TurnStatus::Completed,
error: None,
created_at: None,
completed_at: None,
duration_ms: None,
},
},
));
@@ -1310,6 +1325,9 @@ fn turn_completion_reconciles_started_items_from_turn_items() {
}],
status: TurnStatus::Completed,
error: None,
created_at: None,
completed_at: None,
duration_ms: None,
},
},
));
@@ -1367,6 +1385,9 @@ fn turn_completion_overwrites_stale_final_message_from_turn_items() {
}],
status: TurnStatus::Completed,
error: None,
created_at: None,
completed_at: None,
duration_ms: None,
},
},
));
@@ -1407,6 +1428,9 @@ fn turn_completion_preserves_streamed_final_message_when_turn_items_are_empty()
items: Vec::new(),
status: TurnStatus::Completed,
error: None,
created_at: None,
completed_at: None,
duration_ms: None,
},
},
));
@@ -1455,6 +1479,9 @@ fn failed_turn_clears_stale_final_message() {
additional_details: None,
codex_error_info: None,
}),
created_at: None,
completed_at: None,
duration_ms: None,
},
},
));
@@ -1478,6 +1505,9 @@ fn turn_completion_falls_back_to_final_plan_text() {
}],
status: TurnStatus::Completed,
error: None,
created_at: None,
completed_at: None,
duration_ms: None,
},
},
));
@@ -1526,6 +1556,9 @@ fn turn_failure_prefers_structured_error_message() {
items: Vec::new(),
status: TurnStatus::Failed,
error: None,
created_at: None,
completed_at: None,
duration_ms: None,
},
},
));