use serde::Deserialize;
use serde::Serialize;
use crate::payload::RawPayloadId;
use crate::raw_event::RawEventSeq;
use super::AgentPath;
use super::AgentThreadId;
use super::CodeCellId;
use super::CodeModeRuntimeToolId;
use super::CodexTurnId;
use super::CompactionId;
use super::CompactionRequestId;
use super::ConversationItemId;
use super::EdgeId;
use super::McpCallId;
use super::ModelVisibleCallId;
use super::TerminalId;
use super::TerminalOperationId;
use super::ToolCallId;
use super::session::ExecutionWindow;
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct CodeCell {
pub code_cell_id: CodeCellId,
pub model_visible_call_id: ModelVisibleCallId,
pub thread_id: AgentThreadId,
pub codex_turn_id: CodexTurnId,
pub source_item_id: ConversationItemId,
pub output_item_ids: Vec<ConversationItemId>,
pub runtime_cell_id: Option<String>,
pub execution: ExecutionWindow,
pub runtime_status: CodeCellRuntimeStatus,
pub initial_response_at_unix_ms: Option<i64>,
pub initial_response_seq: Option<RawEventSeq>,
pub yielded_at_unix_ms: Option<i64>,
pub yielded_seq: Option<RawEventSeq>,
pub source_js: String,
pub nested_tool_call_ids: Vec<ToolCallId>,
pub wait_tool_call_ids: Vec<ToolCallId>,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
#[serde(rename_all = "snake_case")]
pub enum CodeCellRuntimeStatus {
Starting,
Running,
Yielded,
Completed,
Failed,
Terminated,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct Compaction {
pub compaction_id: CompactionId,
pub thread_id: AgentThreadId,
pub codex_turn_id: CodexTurnId,
pub installed_at_unix_ms: i64,
pub marker_item_id: ConversationItemId,
pub request_ids: Vec<CompactionRequestId>,
pub input_item_ids: Vec<ConversationItemId>,
pub replacement_item_ids: Vec<ConversationItemId>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct CompactionRequest {
pub compaction_request_id: CompactionRequestId,
pub compaction_id: CompactionId,
pub thread_id: AgentThreadId,
pub codex_turn_id: CodexTurnId,
pub execution: ExecutionWindow,
pub model: String,
pub provider_name: String,
pub raw_request_payload_id: RawPayloadId,
pub raw_response_payload_id: Option<RawPayloadId>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct ToolCall {
pub tool_call_id: ToolCallId,
pub mcp_call_id: Option<McpCallId>,
pub model_visible_call_id: Option<ModelVisibleCallId>,
pub code_mode_runtime_tool_id: Option<CodeModeRuntimeToolId>,
pub thread_id: AgentThreadId,
pub started_by_codex_turn_id: Option<CodexTurnId>,
pub execution: ExecutionWindow,
pub requester: ToolCallRequester,
pub kind: ToolCallKind,
pub model_visible_call_item_ids: Vec<ConversationItemId>,
pub model_visible_output_item_ids: Vec<ConversationItemId>,
pub terminal_operation_id: Option<TerminalOperationId>,
pub summary: ToolCallSummary,
pub raw_invocation_payload_id: Option<RawPayloadId>,
pub raw_result_payload_id: Option<RawPayloadId>,
pub raw_runtime_payload_ids: Vec<RawPayloadId>,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
#[serde(rename_all = "snake_case", tag = "type")]
pub enum ToolCallRequester {
Model,
CodeCell {
code_cell_id: CodeCellId,
},
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
#[serde(rename_all = "snake_case", tag = "type")]
pub enum ToolCallKind {
ExecCommand,
WriteStdin,
ApplyPatch,
Mcp {
server: String,
tool: String,
},
Web,
ImageGeneration,
SpawnAgent,
AssignAgentTask,
SendMessage,
WaitAgent,
CloseAgent,
Other {
name: String,
},
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
#[serde(rename_all = "snake_case", tag = "type")]
pub enum ToolCallSummary {
Terminal { operation_id: TerminalOperationId },
Agent {
target_agent_path: AgentPath,
task_name: Option<String>,
message_preview: String,
},
WaitAgent {
target_agent_path: Option<AgentPath>,
timeout_ms: Option<u64>,
},
Generic {
label: String,
input_preview: Option<String>,
output_preview: Option<String>,
},
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct TerminalSession {
pub terminal_id: TerminalId,
pub thread_id: AgentThreadId,
pub created_by_operation_id: TerminalOperationId,
pub operation_ids: Vec<TerminalOperationId>,
pub execution: ExecutionWindow,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct TerminalOperation {
pub operation_id: TerminalOperationId,
pub terminal_id: Option<TerminalId>,
pub tool_call_id: ToolCallId,
pub kind: TerminalOperationKind,
pub execution: ExecutionWindow,
pub request: TerminalRequest,
pub result: Option<TerminalResult>,
pub model_observations: Vec<TerminalModelObservation>,
pub raw_payload_ids: Vec<RawPayloadId>,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
#[serde(rename_all = "snake_case")]
pub enum TerminalOperationKind {
ExecCommand,
WriteStdin,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
#[serde(rename_all = "snake_case", tag = "type")]
pub enum TerminalRequest {
ExecCommand {
command: Vec<String>,
display_command: String,
cwd: String,
yield_time_ms: Option<u64>,
max_output_tokens: Option<usize>,
},
WriteStdin {
stdin: String,
yield_time_ms: Option<u64>,
max_output_tokens: Option<usize>,
},
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub struct TerminalResult {
pub exit_code: Option<i32>,
pub stdout: String,
pub stderr: String,
pub formatted_output: Option<String>,
pub original_token_count: Option<usize>,
pub chunk_id: Option<String>,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub struct TerminalModelObservation {
pub call_item_ids: Vec<ConversationItemId>,
pub output_item_ids: Vec<ConversationItemId>,
pub source: TerminalObservationSource,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
#[serde(rename_all = "snake_case")]
pub enum TerminalObservationSource {
DirectToolCall,
CodeCellOutput,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct InteractionEdge {
pub edge_id: EdgeId,
pub kind: InteractionEdgeKind,
pub source: TraceAnchor,
pub target: TraceAnchor,
pub started_at_unix_ms: i64,
pub ended_at_unix_ms: Option<i64>,
pub carried_item_ids: Vec<ConversationItemId>,
pub carried_raw_payload_ids: Vec<RawPayloadId>,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
#[serde(rename_all = "snake_case")]
pub enum InteractionEdgeKind {
SpawnAgent,
AssignAgentTask,
SendMessage,
AgentResult,
CloseAgent,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
#[serde(rename_all = "snake_case", tag = "type")]
pub enum TraceAnchor {
ConversationItem { item_id: ConversationItemId },
ToolCall { tool_call_id: ToolCallId },
Thread { thread_id: AgentThreadId },
}