use serde::Deserialize;
use serde::Serialize;
use crate::raw_event::RawEventSeq;
use super::AgentPath;
use super::AgentThreadId;
use super::CodexTurnId;
use super::ConversationItemId;
use super::EdgeId;
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
#[serde(rename_all = "snake_case")]
pub enum RolloutStatus {
Running,
Completed,
Failed,
Aborted,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct AgentThread {
pub thread_id: AgentThreadId,
pub agent_path: AgentPath,
pub nickname: Option<String>,
pub origin: AgentOrigin,
pub execution: ExecutionWindow,
pub default_model: Option<String>,
pub conversation_item_ids: Vec<ConversationItemId>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[serde(rename_all = "snake_case", tag = "type")]
pub enum AgentOrigin {
Root,
Spawned {
parent_thread_id: AgentThreadId,
spawn_edge_id: EdgeId,
task_name: String,
agent_role: String,
},
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub struct ExecutionWindow {
pub started_at_unix_ms: i64,
pub started_seq: RawEventSeq,
pub ended_at_unix_ms: Option<i64>,
pub ended_seq: Option<RawEventSeq>,
pub status: ExecutionStatus,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
#[serde(rename_all = "snake_case")]
pub enum ExecutionStatus {
Running,
Completed,
Failed,
Cancelled,
Aborted,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct CodexTurn {
pub codex_turn_id: CodexTurnId,
pub thread_id: AgentThreadId,
pub execution: ExecutionWindow,
pub input_item_ids: Vec<ConversationItemId>,
}