use serde::{Deserialize, Serialize}; use std::path::PathBuf; use chrono::{DateTime, Utc}; #[derive(Debug, Clone, Serialize, Deserialize)] pub struct Instance { pub id: String, pub pid: u32, pub workspace: PathBuf, pub start_time: DateTime, pub status: InstanceStatus, pub instance_type: InstanceType, pub provider: Option, pub model: Option, pub execution_method: ExecutionMethod, pub command_line: String, // Store original launch parameters for restart pub launch_params: Option, } #[derive(Debug, Clone, Serialize, Deserialize)] pub struct LaunchParams { pub workspace: PathBuf, pub provider: String, pub model: String, pub prompt: String, pub autonomous: bool, pub g3_binary_path: Option, } #[derive(Debug, Clone, Serialize, Deserialize, PartialEq)] #[serde(rename_all = "lowercase")] pub enum InstanceStatus { Running, Completed, Failed, Idle, Terminated, } #[derive(Debug, Clone, Serialize, Deserialize, PartialEq)] #[serde(rename_all = "lowercase")] pub enum InstanceType { Single, Ensemble, } #[derive(Debug, Clone, Serialize, Deserialize, PartialEq)] #[serde(rename_all = "lowercase")] pub enum ExecutionMethod { Binary, CargoRun, } #[derive(Debug, Clone, Serialize, Deserialize)] pub struct InstanceStats { pub total_tokens: u64, pub tool_calls: u64, pub errors: u64, pub duration_secs: u64, pub turns: Option>, } #[derive(Debug, Clone, Serialize, Deserialize)] pub struct InstanceDetail { #[serde(flatten)] pub instance: Instance, pub stats: InstanceStats, pub latest_message: Option, pub git_status: Option, pub project_files: ProjectFiles, } #[derive(Debug, Clone, Serialize, Deserialize)] pub struct GitStatus { pub branch: String, pub uncommitted_changes: usize, pub modified_files: Vec, pub added_files: Vec, pub deleted_files: Vec, } #[derive(Debug, Clone, Serialize, Deserialize, Default)] pub struct ProjectFiles { pub requirements: Option, pub readme: Option, pub agents: Option, } #[derive(Debug, Clone, Serialize, Deserialize)] pub struct LaunchRequest { pub prompt: String, pub workspace: PathBuf, pub provider: String, pub model: String, pub mode: LaunchMode, pub g3_binary_path: Option, } #[derive(Debug, Clone, Serialize, Deserialize, PartialEq)] #[serde(rename_all = "lowercase")] pub enum LaunchMode { Single, Ensemble, } #[derive(Debug, Clone, Serialize, Deserialize)] pub struct LaunchResponse { pub id: String, pub status: String, } #[derive(Debug, Clone, Serialize, Deserialize)] pub struct TurnInfo { pub agent: String, pub duration_secs: u64, pub status: String, pub color: String, } #[derive(Debug, Clone, Serialize, Deserialize)] pub struct ProgressInfo { pub mode: InstanceType, pub duration_secs: u64, pub estimated_finish_secs: Option, pub turns: Vec, }