use std::collections::HashMap;
use chrono::{DateTime, Utc};
use serde::{Deserialize, Serialize};
#[derive(Debug, Clone, Copy, Default, Serialize, Deserialize)]
pub enum SessionState {
#[default]
UnStarted,
Preparing,
Running,
Completed,
Failed,
Cancelled,
Stalled,
}
impl SessionState {
pub fn is_terminated(self) -> bool {
matches!(
self,
SessionState::Completed | SessionState::Failed | SessionState::Cancelled | SessionState::Stalled
)
}
}
#[derive(Debug, Clone, Copy, Default, Serialize, Deserialize)]
pub struct TokenUsage {
pub input: u64,
pub output: u64,
pub cache_read: u64,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct RateLimitObservation {
pub remaining: u64,
pub reset_at: DateTime<Utc>,
pub observed_at: DateTime<Utc>,
}
#[derive(Debug, Clone, Serialize, Deserialize, Default)]
pub struct SessionSnapshot {
pub agent_session_id: Option<String>,
pub state: SessionState,
pub started_at: DateTime<Utc>,
pub last_event_at: Option<DateTime<Utc>>,
pub last_message: Option<String>,
pub tokens: TokenUsage,
pub rate_limits: HashMap<String, RateLimitObservation>,
}