Codex 系统手册

通用传输、网络与客户端基础设施

stage-1955 个文件

通用传输、网络与客户端基础设施 stage-19(横切基础设施)

这一阶段是系统的“通信底座”,不直接干业务,却让各部分能安全说话。HTTP客户端管出网、重试、证书、Cookie和流式消息。app-server、exec-server和relay把本地管道、WebSocket、大文件和远程消息打包、加密、转发。代理和本地IPC像门卫和内线电话,管住外网访问,也连起进程、沙箱和IDE。MCP适配器统一各种通信方式,几个门面和错误文件则把入口、返回和失败原因整理好。

子阶段

本阶段涉及的状态16
  • reg-installation-environment程序知道自己装在哪里、家目录在哪里、运行在哪台机器和什么终端里的那组环境信息。
  • reg-auth-account用户当前是谁、有没有登录、用的是哪种账号或套餐、令牌是否还能用的身份状态。
  • reg-secret-store本机保存的 API Key、ChatGPT 令牌、个人访问令牌、Bedrock Key 等秘密凭据。
  • reg-mcp-registryMCP 服务器、连接、工具和资源的登记表,模型和前端都靠它知道能调用哪些外部能力。
  • reg-sandbox-execution-policy命令和工具运行时要遵守的沙箱、读写、联网、身份和执行策略。
  • reg-exec-environment-processesexec-server 和统一执行层里正在运行或已经结束的进程、退出码、输入输出和失败原因。
  • reg-transport-rpc-connectionsstdio、本机 socket、WebSocket、JSON-RPC、relay 等通道上的连接、请求编号和收发队列。
  • reg-server-daemon-stateapp-server、daemon、exec-server 等常驻服务当前是否启动、有哪些客户端连着、处理器是否还接单的运行状态。
  • reg-network-client-proxyHTTP 客户端、证书、Cookie、重试、流式连接和网络代理放行/拒绝规则的共享联网状态。
  • reg-code-mode-sessions代码模式运行器里的会话、正在执行的脚本、等待结果、定时器和宿主回调状态。
  • reg-remote-control-state远程控制功能的开启状态、配对码、已授权设备、撤销记录和远端会话可用性状态。
  • reg-filesystem-watch-state文件系统监听订阅、被监控路径、最近快照、变更去抖和待通知事件的共享状态。
  • reg-realtime-session-state线程级实时对话的会话参数、音频/文本输入缓冲、实时 WebSocket 状态和流式通知进度。
  • reg-attestation-state宿主或客户端提供的证明材料、证明请求结果以及附加到上游请求的 attestation 头状态。
  • reg-global-tls-provider全局 HTTPS/TLS 加密提供者的选择和初始化状态,供后续所有联网客户端复用。
  • reg-async-runtime-shutdown全局异步运行时、任务执行句柄、取消信号和关机协调状态,供服务器、后台任务、工具执行和清理流程共用。

本阶段的文件4

客户端 crate 接口

这些文件定义可复用客户端 crate 的公共模块边界和导出 API,供系统其他部分使用。

backend-client/src/lib.rs源码 ↗
othercross-cutting

可以把这个文件想成一家店的前台。真正干活的代码在 clienttypes 两个内部模块里:client 里是和后端服务打交道的客户端,types 里是各种请求、响应、配置、账号、任务、额度等数据的形状。这个文件本身不处理网络,也不计算业务逻辑,它主要做两件事:先声明这些内部模块存在,然后用 pub use 把常用的类型重新导出。这样外部使用者只要写类似“从 backend-client 拿 Client”就行,不需要写很长的内部路径。这样做的好处是稳定、清爽:以后内部文件怎么拆、怎么改,外部代码不一定要跟着改。

chatgpt/src/lib.rs源码 ↗
orchestrationcompile-time / cross-cutting

可以把这个文件想成一本书的目录页。真正干活的内容分散在别的文件里,比如执行命令、连接 ChatGPT、读取任务、工作区设置等;而这里负责把这些章节挂到整个库下面。带 pub mod 的模块是公开的,意思是库外面的代码也能直接使用;没有 pubchatgpt_client 是内部模块,像后台工具间,只给库里面的人用。没有这个文件,Rust 编译器就不知道这些模块属于同一个库,外部代码也找不到应该调用的入口。因此它虽然很短,但决定了整个 chatgpt 库的对外结构和边界。

cloud-tasks-client/src/lib.rs源码 ↗
othercross-cutting

可以把这个文件想成一家店的前台。真正的东西放在后面的 api 和 http 两个房间里,但外面的人不用知道每个东西具体在哪个房间,只要到前台就能拿到。它先声明项目里有 api 模块和 http 模块,然后把这些模块里重要的类型重新公开出去,比如 CloudBackend 表示云端任务后端,TaskStatus 表示任务状态,CloudTaskError 表示出错信息,HttpClient 表示通过 HTTP 跟服务端通信的客户端。没有这个文件,使用者就得深入到内部模块路径里找东西,代码会更绕,也更容易被内部结构变化影响。它本身不做计算,也不发网络请求,主要作用是整理并固定这个库的公开入口。

共享客户端错误

此文件提供客户端基础设施使用的类型化传输和流式错误模型。

codex-client/src/error.rs源码 ↗
data_modelcross-cutting

这个文件像一本“故障登记表”,专门记录 codex-client 跟服务器打交道时会出哪些问题。它定义了两个错误大类:TransportError 用来表示一次普通网络请求的失败,比如服务器返回 HTTP 错误码、重试次数用完、超时、网络异常,或者请求本身没组装好;StreamError 用来表示持续接收数据的流式连接出问题,比如流中断或等待太久。这里还保留了一些有用的现场信息,例如 HTTP 状态码、请求地址、响应头和响应内容。这样上层代码报错时,不只是说“失败了”,而是能说清楚失败在哪里、服务器回了什么。它使用 thiserror 这个工具来自动生成好读的错误文字,方便日志、调试和给用户展示。