Skip to content

非交互模式 — 代码走读

codex-rs/exec/src/lib.rs — Exec 主入口(~1975 行)

run_main() 是 Exec 模式的主入口,公共 API 导出:

rust
// 核心入口
pub fn run_main(cli: Cli, paths: Arg0DispatchPaths) -> Result<CodexStatus>

// 执行参数
pub struct ExecRunArgs {
    pub in_process_start_args: InProcessStartArgs,
    pub state_db: StateDbHandle,
    pub command: Option<Command>,
    pub config: Config,
    pub json_mode: bool,
    pub prompt: String,
    pub output_schema_path: Option<PathBuf>,
    pub model_provider: Option<String>,
    pub oss: bool,
    pub images: Vec<String>,
}

// 初始操作
pub enum InitialOperation {
    UserTurn {
        items: Vec<InputItem>,
        output_schema: Option<serde_json::Value>,
    },
    Review {
        review_request: ReviewRequest,
    },
}

// 执行状态
pub enum CodexStatus {
    Success,
    Failed,
    // ...
}

codex-rs/exec/src/event_processor.rs — 事件处理器

EventProcessorWithJsonOutput 处理代理事件并格式化输出:

rust
pub struct EventProcessorWithJsonOutput {
    json_mode: bool,
    // ...
}

impl EventProcessorWithJsonOutput {
    pub fn process_event(&mut self, event: Event) -> Option<ThreadEvent>
    pub fn format_output(&self, event: ThreadEvent) -> String
}

事件到输出类型的映射:

输入 Event输出类型说明
Event::TurnItemStartedTurnStartedEventTurn 开始
Event::TurnItemUpdated (text)AgentMessageItem代理文本消息
Event::TurnItemUpdated (exec)CommandExecutionItem命令执行结果
Event::TurnItemUpdated (patch)FileChangeItem文件修改
Event::TurnItemUpdated (mcp)McpToolCallItemMCP 工具调用
Event::TurnItemUpdated (reasoning)ReasoningItem推理过程
Event::TurnCompletedTurnCompletedEventTurn 完成统计
Event::TurnFailedTurnFailedEventTurn 失败信息

codex-rs/exec/src/exec_events.rs — 输出事件类型

定义 JSON 输出的结构化类型:

rust
pub struct ThreadEvent {
    pub event: ThreadEventType,
}

pub struct TurnStartedEvent { pub thread_id: ThreadId }
pub struct TurnCompletedEvent { pub usage: Usage }
pub struct TurnFailedEvent { pub error: String }

pub struct AgentMessageItem { pub content: String }
pub struct CommandExecutionItem {
    pub command: String,
    pub stdout: String,
    pub stderr: String,
    pub exit_code: i32,
}
pub struct FileChangeItem {
    pub path: String,
    pub change: String,
}
pub struct McpToolCallItem {
    pub tool: String,
    pub arguments: serde_json::Value,
    pub result: serde_json::Value,
}
pub struct ReasoningItem { pub content: String }
pub struct Usage {
    pub input_tokens: u64,
    pub output_tokens: u64,
}

关键函数索引

函数/模块文件路径说明
run_main()exec/src/lib.rsExec 模式入口,~1975 行
ExecRunArgsexec/src/lib.rs执行参数定义
InitialOperationexec/src/lib.rs初始操作枚举(UserTurn/Review)
CodexStatusexec/src/lib.rs执行状态(Success/Failed)
EventProcessorWithJsonOutputexec/src/event_processor.rs事件处理和格式化
ThreadEventexec/src/exec_events.rsJSON 输出事件类型
TurnStartedEventexec/src/exec_events.rsTurn 开始事件
TurnCompletedEventexec/src/exec_events.rsTurn 完成事件
CommandExecutionItemexec/src/exec_events.rs命令执行结果
FileChangeItemexec/src/exec_events.rs文件修改结果
Usageexec/src/exec_events.rsToken 用量统计