1use serde::Deserialize;
2use serde::Serialize;
3
4use crate::payload::RawPayloadId;
5use crate::raw_event::RawEventSeq;
6
7use super::AgentPath;
8use super::AgentThreadId;
9use super::CodeCellId;
10use super::CodeModeRuntimeToolId;
11use super::CodexTurnId;
12use super::CompactionId;
13use super::CompactionRequestId;
14use super::ConversationItemId;
15use super::EdgeId;
16use super::McpCallId;
17use super::ModelVisibleCallId;
18use super::TerminalId;
19use super::TerminalOperationId;
20use super::ToolCallId;
21use super::session::ExecutionWindow;
22
23#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
28pub struct CodeCell {
29 pub code_cell_id: CodeCellId,
33 pub model_visible_call_id: ModelVisibleCallId,
34 pub thread_id: AgentThreadId,
35 pub codex_turn_id: CodexTurnId,
36 pub source_item_id: ConversationItemId,
38 pub output_item_ids: Vec<ConversationItemId>,
39 pub runtime_cell_id: Option<String>,
41 pub execution: ExecutionWindow,
43 pub runtime_status: CodeCellRuntimeStatus,
44 pub initial_response_at_unix_ms: Option<i64>,
45 pub initial_response_seq: Option<RawEventSeq>,
46 pub yielded_at_unix_ms: Option<i64>,
47 pub yielded_seq: Option<RawEventSeq>,
48 pub source_js: String,
49 pub nested_tool_call_ids: Vec<ToolCallId>,
50 pub wait_tool_call_ids: Vec<ToolCallId>,
51}
52
53#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
55#[serde(rename_all = "snake_case")]
56pub enum CodeCellRuntimeStatus {
57 Starting,
59 Running,
61 Yielded,
63 Completed,
65 Failed,
67 Terminated,
69}
70
71#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
79pub struct Compaction {
80 pub compaction_id: CompactionId,
81 pub thread_id: AgentThreadId,
82 pub codex_turn_id: CodexTurnId,
83 pub installed_at_unix_ms: i64,
84 pub marker_item_id: ConversationItemId,
86 pub request_ids: Vec<CompactionRequestId>,
88 pub input_item_ids: Vec<ConversationItemId>,
90 pub replacement_item_ids: Vec<ConversationItemId>,
92}
93
94#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
96pub struct CompactionRequest {
97 pub compaction_request_id: CompactionRequestId,
98 pub compaction_id: CompactionId,
99 pub thread_id: AgentThreadId,
100 pub codex_turn_id: CodexTurnId,
101 pub execution: ExecutionWindow,
102 pub model: String,
103 pub provider_name: String,
104 pub raw_request_payload_id: RawPayloadId,
105 pub raw_response_payload_id: Option<RawPayloadId>,
107}
108
109#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
115pub struct ToolCall {
116 pub tool_call_id: ToolCallId,
117 pub mcp_call_id: Option<McpCallId>,
119 pub model_visible_call_id: Option<ModelVisibleCallId>,
121 pub code_mode_runtime_tool_id: Option<CodeModeRuntimeToolId>,
123 pub thread_id: AgentThreadId,
124 pub started_by_codex_turn_id: Option<CodexTurnId>,
126 pub execution: ExecutionWindow,
127 pub requester: ToolCallRequester,
128 pub kind: ToolCallKind,
129 pub model_visible_call_item_ids: Vec<ConversationItemId>,
130 pub model_visible_output_item_ids: Vec<ConversationItemId>,
131 pub terminal_operation_id: Option<TerminalOperationId>,
133 pub summary: ToolCallSummary,
134 pub raw_invocation_payload_id: Option<RawPayloadId>,
141 pub raw_result_payload_id: Option<RawPayloadId>,
146 pub raw_runtime_payload_ids: Vec<RawPayloadId>,
152}
153
154#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
156#[serde(rename_all = "snake_case", tag = "type")]
157pub enum ToolCallRequester {
158 Model,
159 CodeCell {
161 code_cell_id: CodeCellId,
162 },
163}
164
165#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
167#[serde(rename_all = "snake_case", tag = "type")]
168pub enum ToolCallKind {
169 ExecCommand,
170 WriteStdin,
171 ApplyPatch,
172 Mcp {
173 server: String,
174 tool: String,
175 },
176 Web,
177 ImageGeneration,
178 SpawnAgent,
179 AssignAgentTask,
180 SendMessage,
181 WaitAgent,
183 CloseAgent,
184 Other {
185 name: String,
186 },
187}
188
189#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
191#[serde(rename_all = "snake_case", tag = "type")]
192pub enum ToolCallSummary {
193 Terminal { operation_id: TerminalOperationId },
195 Agent {
196 target_agent_path: AgentPath,
197 task_name: Option<String>,
199 message_preview: String,
200 },
201 WaitAgent {
202 target_agent_path: Option<AgentPath>,
204 timeout_ms: Option<u64>,
205 },
206 Generic {
207 label: String,
208 input_preview: Option<String>,
209 output_preview: Option<String>,
210 },
211}
212
213#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
215pub struct TerminalSession {
216 pub terminal_id: TerminalId,
217 pub thread_id: AgentThreadId,
218 pub created_by_operation_id: TerminalOperationId,
219 pub operation_ids: Vec<TerminalOperationId>,
220 pub execution: ExecutionWindow,
222}
223
224#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
226pub struct TerminalOperation {
227 pub operation_id: TerminalOperationId,
228 pub terminal_id: Option<TerminalId>,
230 pub tool_call_id: ToolCallId,
231 pub kind: TerminalOperationKind,
232 pub execution: ExecutionWindow,
234 pub request: TerminalRequest,
235 pub result: Option<TerminalResult>,
237 pub model_observations: Vec<TerminalModelObservation>,
238 pub raw_payload_ids: Vec<RawPayloadId>,
239}
240
241#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
243#[serde(rename_all = "snake_case")]
244pub enum TerminalOperationKind {
245 ExecCommand,
246 WriteStdin,
247}
248
249#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
251#[serde(rename_all = "snake_case", tag = "type")]
252pub enum TerminalRequest {
253 ExecCommand {
254 command: Vec<String>,
255 display_command: String,
256 cwd: String,
257 yield_time_ms: Option<u64>,
258 max_output_tokens: Option<usize>,
259 },
260 WriteStdin {
262 stdin: String,
264 yield_time_ms: Option<u64>,
265 max_output_tokens: Option<usize>,
266 },
267}
268
269#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
274pub struct TerminalResult {
275 pub exit_code: Option<i32>,
277 pub stdout: String,
278 pub stderr: String,
279 pub formatted_output: Option<String>,
281 pub original_token_count: Option<usize>,
283 pub chunk_id: Option<String>,
285}
286
287#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
289pub struct TerminalModelObservation {
290 pub call_item_ids: Vec<ConversationItemId>,
291 pub output_item_ids: Vec<ConversationItemId>,
292 pub source: TerminalObservationSource,
293}
294
295#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
297#[serde(rename_all = "snake_case")]
298pub enum TerminalObservationSource {
299 DirectToolCall,
300 CodeCellOutput,
301}
302
303#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
305pub struct InteractionEdge {
306 pub edge_id: EdgeId,
307 pub kind: InteractionEdgeKind,
308 pub source: TraceAnchor,
309 pub target: TraceAnchor,
310 pub started_at_unix_ms: i64,
311 pub ended_at_unix_ms: Option<i64>,
312 pub carried_item_ids: Vec<ConversationItemId>,
313 pub carried_raw_payload_ids: Vec<RawPayloadId>,
314}
315
316#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
318#[serde(rename_all = "snake_case")]
319pub enum InteractionEdgeKind {
320 SpawnAgent,
321 AssignAgentTask,
322 SendMessage,
323 AgentResult,
324 CloseAgent,
325}
326
327#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
329#[serde(rename_all = "snake_case", tag = "type")]
330pub enum TraceAnchor {
331 ConversationItem { item_id: ConversationItemId },
332 ToolCall { tool_call_id: ToolCallId },
333 Thread { thread_id: AgentThreadId },
334}