Codex Source Notes
Codex 源码阅读系列
这个系列从 openai/codex 的公开源码进入,不先贴功能清单,而是跟一条普通请求走: 它怎样从一句话变成有类型的任务,怎样进入 session 和 turn,怎样整理上下文、暴露工具、 检查权限,并把运行事件交给客户端展示、写入 rollout 供后续恢复,再从旧 thread 中提取可复用的经验。
源码证据固定到同一个 openai/codex 公开快照;产品契约来自 OpenAI 官方文档。每篇只描述公开客户端代码和协议可见的机制。
跟随一次请求进入 session 与 turn,区分每步上下文、可选工具循环、客户端通知和用于恢复的持久记录。
源码阅读 · 第二篇 会话记录怎样变成下一次模型请求看历史记录与 StepContext 怎样分别准备,再由 for_prompt、WorldState 更新和 compaction 组成下一次模型输入。
源码阅读 · 第三篇 protocol 与事件流,客户端怎样共享同一套事实区分 turn/start 的新建与补充输入、接受回执与完成事件,以及实时通知和筛选后的持久记录。
源码阅读 · 第四篇 模型的工具请求怎样变成本地执行从工具注册表和调用路由走到 UnifiedExec,区分调用结果、仍在运行的进程和回到模型的工具输出。
源码阅读 · 第五篇 权限与 sandbox 怎样约束一次执行看审批策略、统一审查与 SandboxAttempt 怎样决定运行、拒绝或沙箱受阻后的受控重试。
源码阅读 · 第六篇 运行时事件怎样变成客户端界面沿 core、app-server 与客户端跟踪事件,区分流式显示、审批请求和从 rollout 重建的 turn/item。
源码阅读 · 第七篇 Skills、plugins、MCP 与 subagents 怎样进入一次 turn分清技能指令、插件资源、MCP 工具暴露与子任务的职责,以及它们怎样进入当前步骤。
源码阅读 · 第八篇 Hooks 在 turn 的哪些时刻运行,能改变什么按各自触发条件理解 prompt、tool、permission、compact、stop、interrupt 与 session end,判断 hook 能改变什么。
源码阅读 · 第九篇 Codex 怎样构造可复用的请求前缀区分请求前缀、缓存计量与 WebSocket 增量续传,核对不同模型的缓存契约和普通 Responses / Lite 请求形状。
源码阅读 · 第十篇 从 Rollout 记录重建会话与分叉跟随 JSONL 写入、反向扫描和尾部重放,理解会话恢复、分叉快照以及旧 rollback 记录的兼容处理。
源码阅读 · 第十一篇 SDK 与 app-server 怎样把外部调用转成 thread 和 turn看初始化、thread 与 turn 请求怎样接入 app-server,并区分事件订阅、输入接受和任务完成。
源码阅读 · 第十二篇 Codex 怎样从旧 thread 提取并复用经验看两阶段后台任务怎样提炼经验,隔离 v1/v2 记忆、处理污染来源,并在未来请求中按需复用。
源码阅读 · 第十三篇 Windows sandbox 怎样限制文件写入与网络访问看受限账户、令牌、ACL、网络规则与服务所有权检查怎样共同约束 Windows 命令执行。