use serde::Serialize;
#[derive(Debug, Clone, Serialize)]
#[serde(tag = "kind", rename_all = "snake_case")]
pub enum RestartReason {
ConfigChanged {
#[serde(default, skip_serializing_if = "Vec::is_empty")]
sections: Vec<String>,
},
}
#[derive(Debug, Clone, Copy, Serialize, PartialEq, Eq)]
#[serde(rename_all = "snake_case")]
pub enum RestartUrgency {
Recommended,
Required,
}
#[derive(Debug, Clone, Serialize)]
pub struct RestartRequest {
pub at_ms: u64,
pub reason: RestartReason,
pub urgency: RestartUrgency,
pub message: String,
#[serde(default)]
pub inflight: u64,
}
impl RestartRequest {
pub fn new(reason: RestartReason, urgency: RestartUrgency, message: String) -> Self {
let at_ms = std::time::SystemTime::now()
.duration_since(std::time::UNIX_EPOCH)
.map(|d| d.as_millis() as u64)
.unwrap_or(0);
Self {
at_ms,
reason,
urgency,
message,
inflight: 0,
}
}
}
#[derive(Debug, Clone, Serialize)]
pub struct AgentEvent {
pub session_id: String,
pub agent_id: String,
pub delta: String,
pub done: bool,
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub files: Vec<(String, String, String)>,
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub images: Vec<String>,
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub tool_log: Vec<(String, String, String)>,
}