Skip to content

CLI 调度器 — 概念

参数解析

CLI 使用 clap crate(cli/src/main.rs,约 3773 行)解析命令行参数,MultitoolCli 是顶层 Parser:

MultitoolCli 的顶层字段:

字段类型说明
config_overridesCliConfigOverrides--model--sandbox 等配置覆盖
feature_togglesFeatureToggles--enable/--disable 特性开关
remoteInteractiveRemoteOptions远程连接参数
interactiveTuiCli交互模式专属参数
subcommandOption<Subcommand>子命令(None = 交互模式)

模式调度

CLI 是 Codex 的统一入口,根据子命令将执行分发到不同模式:

调度逻辑的核心代码结构:

rust
fn cli_main(cli: MultitoolCli, paths: Arg0DispatchPaths) -> Result<()> {
    let config_overrides = cli.fold_config_overrides();
    match cli.subcommand {
        Some(Subcommand::Exec(args)) => exec::run_main(args, paths),
        Some(Subcommand::AppServer(args)) => app_server::run_main(args, paths),
        Some(Subcommand::Login) => login_flow(),
        Some(Subcommand::Review(args)) => review_flow(args),
        // ... 25+ 子命令
        None => run_interactive_tui(cli),  // 默认:交互式 TUI
    }
}

子命令管理

Subcommand 枚举定义了 25+ 个子命令,按功能分组:

功能组子命令说明
执行Exec非交互执行(CI/CD)
审查Review代码审查模式
认证Login, Logout登录/登出
MCPMcp, McpServer, PluginMCP 和插件管理
服务器AppServer, ExecServer(隐藏)后台服务
会话Resume, Archive, Unarchive, Fork会话生命周期
诊断Doctor, Debug, Sandbox系统诊断
工具Apply, Execpolicy补丁应用、策略查看
平台App(隐藏, macOS/Windows), RemoteControl平台集成
配置Completion, Update, Features(隐藏), CloudShell 补全、更新、特性

特殊的 arg0_dispatch 机制:

rust
fn main() -> Result<()> {
    // 根据 argv[0] 分发:
    // - "codex" -> cli_main()
    // - "codex-tui" -> tui::run_main()
    // - "codex-exec" -> exec::run_main()
    // - "codex-linux-sandbox" -> linux_sandbox::run_main()
    arg0_dispatch_or_else(cli, cli_main)
}

这种设计允许通过符号链接创建不同的入口点,直接跳过子命令解析。

配置集成

CLI 参数与配置系统的集成方式:

配置优先级:CLI 覆盖 > Cloud 配置 > 项目 config.toml > 全局 config.toml > 默认值

CliConfigOverrides 通过 fold_config_overrides() 合并 --enable/--disable 开关到配置覆盖中,统一传递给配置加载器。

相关概念