Appearance
非交互模式 — 代码走读
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::TurnItemStarted | TurnStartedEvent | Turn 开始 |
Event::TurnItemUpdated (text) | AgentMessageItem | 代理文本消息 |
Event::TurnItemUpdated (exec) | CommandExecutionItem | 命令执行结果 |
Event::TurnItemUpdated (patch) | FileChangeItem | 文件修改 |
Event::TurnItemUpdated (mcp) | McpToolCallItem | MCP 工具调用 |
Event::TurnItemUpdated (reasoning) | ReasoningItem | 推理过程 |
Event::TurnCompleted | TurnCompletedEvent | Turn 完成统计 |
Event::TurnFailed | TurnFailedEvent | Turn 失败信息 |
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.rs | Exec 模式入口,~1975 行 |
ExecRunArgs | exec/src/lib.rs | 执行参数定义 |
InitialOperation | exec/src/lib.rs | 初始操作枚举(UserTurn/Review) |
CodexStatus | exec/src/lib.rs | 执行状态(Success/Failed) |
EventProcessorWithJsonOutput | exec/src/event_processor.rs | 事件处理和格式化 |
ThreadEvent | exec/src/exec_events.rs | JSON 输出事件类型 |
TurnStartedEvent | exec/src/exec_events.rs | Turn 开始事件 |
TurnCompletedEvent | exec/src/exec_events.rs | Turn 完成事件 |
CommandExecutionItem | exec/src/exec_events.rs | 命令执行结果 |
FileChangeItem | exec/src/exec_events.rs | 文件修改结果 |
Usage | exec/src/exec_events.rs | Token 用量统计 |