1use chrono::{DateTime, Utc};
4use serde::{Deserialize, Serialize};
5
6#[derive(Debug, Clone, Serialize, Deserialize)]
8pub struct RunAttempt {
9 pub issue_id: String,
10 pub issue_identifier: String,
11 pub attempt: Option<u32>,
13 pub workspace_path: String,
14 pub started_at: DateTime<Utc>,
15 pub status: RunAttemptStatus,
16 pub error: Option<String>,
17}
18
19#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
21#[serde(rename_all = "snake_case")]
22pub enum RunAttemptStatus {
23 PreparingWorkspace,
24 BuildingPrompt,
25 LaunchingAgentProcess,
26 InitializingSession,
27 StreamingTurn,
28 Finishing,
29 Succeeded,
30 Failed,
31 TimedOut,
32 Stalled,
33 CanceledByReconciliation,
34}
35
36#[derive(Debug, Clone, Serialize, Deserialize)]
38pub struct LiveSession {
39 pub session_id: String,
41 pub thread_id: String,
42 pub turn_id: String,
43 pub codex_app_server_pid: Option<String>,
44 pub last_codex_event: Option<String>,
45 pub last_codex_timestamp: Option<DateTime<Utc>>,
46 pub last_codex_message: Option<String>,
47 pub codex_input_tokens: u64,
48 pub codex_output_tokens: u64,
49 pub codex_total_tokens: u64,
50 pub last_reported_input_tokens: u64,
51 pub last_reported_output_tokens: u64,
52 pub last_reported_total_tokens: u64,
53 pub turn_count: u32,
54}
55
56#[derive(Debug, Clone, Serialize, Deserialize)]
58pub struct RetryEntry {
59 pub issue_id: String,
60 pub identifier: String,
62 pub attempt: u32,
64 pub due_at_ms: u64,
66 pub error: Option<String>,
67}