Day 06 / 共 20 天 · 第 2 周 · 核心引擎

启动链:从 npm 到 TUI

codex.js 选平台二进制 → cli/main.rs 分发 → tui 挂载 in-process app-server。

📍 你在整门课的位置 · 第 2 周 · 核心引擎
D06 启动链D07 Op 协议与 app-serverD08 Agent Turn 主循环D09 配置分层与 config.tomlD10 认证与模型 Provider
L01

codex.js:选对原生二进制(逐段)

codex-cli/bin/codex.js 可以按三段读:

  1. L16–L23PLATFORM_PACKAGE_BY_TARGET 把 Rust target triple 映射到可选依赖包名。
  2. L25–L77:用 process.platform/arch 算出 targetTriple;不支持就直接 throw。
  3. L79–L108findCodexExecutable()require.resolve(平台包/package.json) 找到 vendor/<triple>/bin/codex;缺失则提示重新 npm i -g
const codexExecutable = path.join(
  vendorRoot, targetTriple, "bin",
  process.platform === "win32" ? "codex.exe" : "codex",
);
为什么异步 spawn?文件后半注释写明:用异步 spawn 而不是 spawnSync,以便 Node 能收 SIGINT 并转发给子进程——Ctrl-C 才能干净退出。
🍼Node 只做「找对平台包 → 转交参数」。业务全在 Rust。
L02

cli/main.rs 分发

你敲: codex "fix flaky test"
  → MultitoolCli 解析
  → subcommand == None
  → 进入交互路径(TuiCli 参数 + prompt)
  → codex_tui::run_…

有子命令则 match 到 Exec / Login / Mcp…(同一文件后半部分巨大的 match 臂)。

L03

TUI 与 in-process app-server

现代架构TUI 不直接调 core 细节;它通过 in-process app-server client 发 JSON-RPC(和 IDE 同协议)。

关键文件:

  • codex-rs/tui/src/lib.rs — 启动客户端与 App
  • codex-rs/tui/src/chatwidget/input_submission.rs — 提交输入
  • codex-rs/app-server-client/ — 客户端实现
L04

今日小结

✅ 能画出 npm→Rust→TUI→app-server 四段;知道 TUI 与 IDE 同协议。
← Day 05 Day 07 · Op 协议与 app-server →