Skip to main content

symphony_core/
session.rs

1//! Session and run attempt types (Spec Sections 4.1.5, 4.1.6, 4.1.7).
2
3use chrono::{DateTime, Utc};
4use serde::{Deserialize, Serialize};
5
6/// One execution attempt for one issue.
7#[derive(Debug, Clone, Serialize, Deserialize)]
8pub struct RunAttempt {
9    pub issue_id: String,
10    pub issue_identifier: String,
11    /// `None` for first run, `Some(n)` for retries/continuation.
12    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/// Run attempt lifecycle phases (Spec Section 7.2).
20#[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/// State tracked while a coding-agent subprocess is running (Spec Section 4.1.6).
37#[derive(Debug, Clone, Serialize, Deserialize)]
38pub struct LiveSession {
39    /// `<thread_id>-<turn_id>`
40    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/// Scheduled retry state for an issue (Spec Section 4.1.7).
57#[derive(Debug, Clone, Serialize, Deserialize)]
58pub struct RetryEntry {
59    pub issue_id: String,
60    /// Best-effort human ID for status surfaces/logs.
61    pub identifier: String,
62    /// 1-based for retry queue.
63    pub attempt: u32,
64    /// Monotonic clock timestamp in ms.
65    pub due_at_ms: u64,
66    pub error: Option<String>,
67}