use codex_protocol::ToolName; use serde::Deserialize; use serde::Serialize; use serde_json::Value as JsonValue; use crate::CellId; use crate::CodeModeToolKind; use crate::FunctionCallOutputContentItem; use crate::ToolDefinition; pub const DEFAULT_EXEC_YIELD_TIME_MS: u64 = 10_000; pub const DEFAULT_WAIT_YIELD_TIME_MS: u64 = 10_000; pub const DEFAULT_MAX_OUTPUT_TOKENS_PER_EXEC_CALL: usize = 10_000; #[derive(Clone, Debug, Deserialize, PartialEq, Serialize)] pub struct ExecuteRequest { pub tool_call_id: String, pub enabled_tools: Vec, pub source: String, pub yield_time_ms: Option, pub max_output_tokens: Option, } #[derive(Clone, Debug, Deserialize, PartialEq, Serialize)] pub struct WaitRequest { pub cell_id: CellId, pub yield_time_ms: u64, } #[derive(Clone, Debug, Deserialize, PartialEq, Serialize)] pub struct WaitToPendingRequest { pub cell_id: CellId, } #[derive(Debug, Deserialize, PartialEq, Serialize)] pub enum WaitOutcome { LiveCell(RuntimeResponse), MissingCell(RuntimeResponse), } #[derive(Debug, Deserialize, PartialEq, Serialize)] pub enum ExecuteToPendingOutcome { Pending { cell_id: CellId, content_items: Vec, pending_tool_call_ids: Vec, }, Completed(RuntimeResponse), } #[derive(Debug, Deserialize, PartialEq, Serialize)] pub enum WaitToPendingOutcome { LiveCell(ExecuteToPendingOutcome), MissingCell(RuntimeResponse), } impl From for RuntimeResponse { fn from(outcome: WaitOutcome) -> Self { match outcome { WaitOutcome::LiveCell(response) | WaitOutcome::MissingCell(response) => response, } } } #[derive(Clone, Debug, Deserialize, PartialEq, Serialize)] pub enum RuntimeResponse { Yielded { cell_id: CellId, content_items: Vec, }, Terminated { cell_id: CellId, content_items: Vec, }, Result { cell_id: CellId, content_items: Vec, error_text: Option, }, } #[derive(Clone, Debug, Deserialize, PartialEq, Serialize)] pub struct CodeModeNestedToolCall { pub cell_id: CellId, pub runtime_tool_call_id: String, pub tool_name: ToolName, pub tool_kind: CodeModeToolKind, pub input: Option, }