Appearance
应用服务器协议 — 概念
App Server 协议设计
App Server Protocol 是 Codex 的核心通信协议,基于 JSON-RPC 2.0,定义了外部客户端与代理运行时之间的所有交互:
App Server 的模块组织(app-server/src/lib.rs):
| 模块 | 职责 |
|---|---|
transport | 传输层(stdio/socket/TCP) |
message_processor | JSON-RPC 消息处理和路由 |
request_processors | 各类请求的处理器 |
thread_state | 线程(会话)状态管理 |
config_manager | 配置的动态管理 |
in_process | 嵌入式模式(同进程通信) |
outgoing_message | 服务器推送的通知 |
command_exec | 命令执行管理 |
fuzzy_file_search | 模糊文件搜索 |
fs_watch | 文件系统监控 |
mcp_refresh | MCP 配置热更新 |
dynamic_tools | 动态工具管理 |
extensions | 扩展管理 |
models | 模型信息管理 |
skills_watcher | 技能文件监控 |
Backend Client 后端客户端
Backend Client(core/src/client.rs,2254 行)管理 Codex 与 LLM 后端的连接:
Backend Client 的两层设计:
| 层次 | 类型 | 生命周期 | 核心方法 |
|---|---|---|---|
| 会话级 | ModelClient | 整个会话 | new_session(), compact_conversation_history() |
| Turn 级 | ModelClientSession | 单个 turn | stream(), prewarm_websocket() |
rust
pub struct ModelClient {
state: Arc<ModelClientState>,
prompt_cache_key_override: Option<String>,
}
pub struct ModelClientSession {
client: ModelClient,
websocket_session: Option<...>,
turn_state: Arc<OnceLock<String>>,
}ModelClientState 内部字段:
| 字段 | 说明 |
|---|---|
session_id | 会话唯一标识 |
thread_id | 线程标识 |
provider: SharedModelProvider | 模型提供商抽象 |
session_source | 会话来源(CLI/TUI/SDK) |
cached_websocket_session | WebSocket 连接缓存 |
disable_websockets | 禁用 WebSocket(降级到 HTTP) |
enable_request_compression | 请求压缩 |
include_timing_metrics | 包含性能指标 |
传输优先级:优先 WebSocket(支持增量 delta,减少重复数据传输),降级到 HTTP SSE。
消息格式与传输
App Server Protocol 基于 JSON-RPC 2.0,通过宏生成 60+ 个 ClientRequest 变体:
ClientRequestSerializationScope 定义了请求的序列化作用域,控制并发和资源访问:
| 作用域 | 说明 |
|---|---|
Global(&str) | 全局操作(配置、认证) |
GlobalSharedRead(&str) | 全局共享读操作 |
Thread { thread_id } | 线程级操作(提交、事件) |
ThreadPath { path } | 线程路径操作 |
CommandExecProcess | 命令执行进程 |
Process | 进程级操作 |
FuzzyFileSearchSession | 文件搜索会话 |
FsWatch | 文件系统监控 |
McpOauth | MCP OAuth 认证 |
认证模式 AuthMode:
| 模式 | 说明 |
|---|---|
ApiKey | API Key 认证 |
Chatgpt | ChatGPT 登录 |
ChatgptAuthTokens | ChatGPT 认证令牌 |
AgentIdentity | 代理身份认证 |
会话管理
App Server 管理多个并发会话(线程)的生命周期:
会话管理涉及:
thread_state— 线程的状态存储和生命周期config_manager— 线程级配置的动态管理in_process— 嵌入式模式下直接调用(无序列化开销)outgoing_message— 通过OutgoingMessageSender推送事件通知
相关概念
- App Server Protocol — JSON-RPC 协议定义
- Backend Client — LLM 后端连接管理
- Agent Loop — 代理循环由 App Server 驱动
- Context Management — 上下文构建由 Backend Client 执行