0.105.0
新增功能
- TUI 现可对围栏代码块和 diff 进行语法高亮,新增带实时预览的
/theme选择器,并为浅色和深色终端使用更完善的主题自适应 diff 颜色。(#11447, #12581) - 现在,你可以按住空格键来口述提示词,直接在 TUI 中录制并转写语音输入。此功能仍在开发中;要启用它,请在配置中设置 features.voice_transcription = true。(#3381)
- 多智能体工作流更易运行和跟踪:
spawn_agents_on_csv可从 CSV 分发工作,并内置进度/ETA;子智能体通过昵称、更清晰的选择器和可见的子线程审批提示,更容易跟进。(#10935, #12320, #12327, #12332, #12570, #12767) - TUI 新增了一些便捷命令:
/copy复制最新的完整助手回复,而/clear和Ctrl-L可在不丢失线程上下文的情况下清屏,其中/clear还可用于开始全新聊天。(#12444, #12520, #12613, #12628) - 审批控制更灵活:Codex 现在可以针对某条命令请求额外的沙盒权限,并且你可以自动拒绝特定类型的审批提示,而无需完全关闭审批。(#11871, #12087)
- App-server 客户端可在线程方面执行更多操作:
thread/list可按标题搜索,线程状态会在读取/列表响应和通知中暴露,thread/resume会以内联方式返回最新轮次,因此重连时丢失更少。(#11776, #11786, #12578)
问题修复
- TUI 中的长链接在换行后仍可点击,这也修复了多个视图中相关的裁剪和布局问题。(#12067)
- 修复了多个 TUI 交互边缘情况:排队消息编辑现在可在更多终端中工作,如果在最终答案仍在流式输出时按 Enter,后续提示不再卡住,审批对话框现在会以正确的请求 ID 响应。(#12240, #12569, #12746)
- 聊天输入框中的
@解析更可靠,因此像npx -y @scope/pkg@latest这样的命令不再意外打开文件选择器或阻止提交。(#12643) - App-server 的 websocket 处理更稳健:线程监听器在断开连接后仍能存活,Ctrl-C 会在重启前等待进行中的轮次,发送
permessage-deflate的 websocket 客户端可以成功连接。(#12373, #12517, #12629) - Linux 沙箱命令现在会获得一个最小化的
/dev,修复了需要熵或其他标准设备节点的工具中的故障。(#12081) js_repl现在会更清晰地报告未捕获的内核故障,之后能干净地恢复,并正确附加来自嵌套工具调用的view_image结果。(#12636, #12725)
- 新增公共安全政策,附 Bugcrowd 报告指南。(#12193)
- 更新安装和本地工作流文档,使用
cargo install --locked cargo-nextest,并避免例行的--all-features构建,除非你明确需要完整功能覆盖。(#12377, #12429)
完整变更日志:https://github.com/openai/codex/compare/rust-v0.104.0...rust-v0.105.0
- #12071 在启用功能时使用 V2 websockets @pakrym-oai
- #12052 feat(core): zsh exec bridge @owenlin0
- #12072 为 agent 消息线程项添加 message phase @mousseau-oai
- #12077 移除 configtoml 的 experimental_mode @won-openai
- #12036 codex-api: realtime websocket session.create + 类型化入站事件 @aibrahim-oai
- #12073 添加模型可见上下文布局快照测试 @charley-oai
- #12096 更新 issue 标签脚本,以包含 safety-check 标签 @etraut-openai
- #11944 [js_repl] 可为 js_repl 指定 node 模块解析路径 @aaronl-openai
- #11798 fix: Restricted Read: /System 对 macOS 平台过于宽松 de… @leoshimo-oai
- #12015 在 TUI 配置中启用默认状态行指示器 @jif-oai
- #12124 feat: phase 1 和 phase 2 e2e 延迟 @jif-oai
- #12121 feat: phase 2 用量 @jif-oai
- #12120 feat: 内存用量指标 @jif-oai
- #12133 feat: 验证 agent 配置文件路径 @jif-oai
- #12137 nit: 更改 phase 1 的模型 @jif-oai
- #12069 停止在 js_repl_tools_only 模式下过滤模型工具 @fjord-oai
- #12135 feat: 为 rollout 摘要提供更好的 slug @jif-oai
- #12157 在评审委派期间禁用 collab 工具 @jif-oai
- #11802 修复 app server 令牌刷新逻辑中的漏洞 @etraut-openai
- #12105 fix: 文件监视器 @jif-oai
- #12167 memories: 将 rollout 摘要 slug 上限提高到 60 @zuxin-oai
- #12177 js_repl: 为 node_modules 边界检查规范化路径 @fjord-oai
- #12025 app-server 支持 Windows 沙箱设置。@iceweasel-oai
- #12187 fix: 移除 citation @zuxin-oai
- #12180 [apps] 临时 app 区块。@mzeng-openai
- #11786 app-server: 通过 read/list 和通知暴露已加载线程状态 @euroelessar
- #12038 state: 对 thread 和 threadless 进程日志强制执行 10 MiB 日志上限 @charley-oai
- #12203 稳定 app-server detached review 和 running-resume 测试 @charley-oai
- #12211 [apps] 更新 apps 允许列表。@mzeng-openai
- #12081 fix(linux-sandbox): 在 bwrap 沙箱中挂载 /dev @viyatb-oai
- #12164 更新功能标志通知的文档链接 @etraut-openai
- #12231 调整 memories rollout 默认值 @jif-oai
- #12152 feat: sub-agent 注入 @jif-oai
- #12233 feat: 添加 shell 快照失败原因 @jif-oai
- #12193 docs: 添加 codex 安全政策 @viyatb-oai
- #12228 feat: 添加可配置的 write_stdin 超时 @jif-oai
- #11787 调整自定义服务器的 MCP 工具审批处理 @colby-oai
- #12179 将上一轮上下文跟踪移入 ContextManager 历史 @charley-oai
- #12244 从历史加载时恢复 phase @mousseau-oai
- #12101 客户端 modelinfo 覆盖 @sayan-oai
- #12251 添加可配置的 agent 生成深度 @jif-oai
- #12254 chore: 为所有人增加栈大小 @jif-oai
- #12250 feat: 在 ue 上启用无超时模式 @jif-oai
- #12255 chore: 合并 McpConnectionManager 的 new() 和 initialize() @bolinfest
- #12256 回滚 "feat: no timeout mode on ue" @jif-oai
- #12258 撤销栈大小 Bazel 测试 hack @charley-oai
- #12264 修复不稳定测试 @jif-oai
- #12087 feat: 添加 Reject 审批策略,支持细粒度提示拒绝控制 @bolinfest
- #12253 在指标上报期间跳过已移除的功能 @jif-oai
- #12265 阐明 Plan 模式下累积 proposed_plan 的行为 @charley-oai
- #12266 app-server 测试: 通过优雅关闭子进程减少间歇性 nextest LEAK @bolinfest
- #11953 通过 client_metadata 传递 ws 回合元数据 @pash-openai
- #11778 fix(bazel): 在 memories 中用 include_str! 替换 askama 模板 @rupurt
- #11382 为 MCP 登录添加可配置的 MCP OAuth 回调 URL @dkumar-oai
- #12274 [bazel] 修复 proc_macro_dep 库 @zbarsky-openai
- #12054 feat(config): 添加 permissions.network 代理配置接线 @viyatb-oai
- #12269 tests(thread_resume): 在 resume 错误路径测试中中断正在运行的回合 @bolinfest
- #12009 更新 pnpm 版本以修复 cve-2026-24842 @mjr-openai
- #12080 skill-creator: 在 frontmatter 解析中延迟加载 PyYAML @xl-openai
- #12271 tests: 集中管理进行中回合的清理辅助函数 @bolinfest
- #12286 app-server: 修复不稳定的 list_apps_returns_connectors_with_accessible_flags 测试 @bolinfest
- #11776 app-server: 改进线程 resume 重新加入流程 @maxj-oai
- #11822 [apps] 将 apps 工具缓存存储到磁盘以减少启动时间。@mzeng-openai
- #12221 memories: 向原始 memories 添加 rollout_summary_file 头,并调整提示 @zuxin-oai
- #12309 设置 memories phase 推理努力常量 @jif-oai
- #12315 chore: nit explorer @jif-oai
- #12320 feat: 为 sub-agents 添加昵称 @jif-oai
- #12328 chore: 更好的 agent 名称 @jif-oai
- #12326 为 phase 2 禁用 collab @jif-oai
- #12267 将 MCP 服务器上下文添加到 otel tool_result 日志 @colby-oai
- #12327 feat: 为 sub-agents 提供更清晰的 TUI @jif-oai
- #12332 feat: 改进 TUI 中的 agent 选择器 @jif-oai
- #12344 feat: 如非必要,不要将 phase 2 入队 @jif-oai
- #12340 fix: 简化 macOS 睡眠抑制器 FFI @yvolovich-cyber
- #12347 fix: thread/read 中的昵称 @jif-oai
- #12294 在回合之间复用连接 @pakrym-oai
- #12287 app-server: 添加 JSON 跟踪日志 @maxj-oai
- #12140 将网络审批重构为 host/protocol/port 作用域 @viyatb-oai
- #12300 js_repl: 在语法中阻止包装负载前缀 @fjord-oai
- #11368 fix(network-proxy): 添加 unix socket allow-all 并更新 seatbelt 规则 @viyatb-oai
- #12275 js_repl: 移除 codex.state 辅助函数引用 @fjord-oai
- #12289 CODEX-4927: 在浏览器中呈现本地登录权限拒绝 @daniel-oai
- #12205 ci(bazel): 在远程镜像中从 node-version.txt 安装 Node @fjord-oai
- #12312 feat: 添加配置
allow_login_shell@jif-oai - #12086 [apps] 实现 apps 配置。@mzeng-openai
- #12353 fix(core): 要求对破坏性 MCP 工具调用进行审批 @colby-oai
- #12218 app-server: 加固断开连接清理路径 @maxj-oai
- #12291 core 测试: 在 review 套件中使用 hermetic mock 服务器 @viyatb-oai
- #12374 [apps] 强制使用简单 logo url 格式。@mzeng-openai
- #12377 docs: 安装 cargo-nextest 时使用 --locked @derekf-oai
- #12370 添加向反馈附加额外文件的能力 @pakrym-oai
- #12306 将 sanitizer 移入 codex-secrets @viyatb-oai
- #12379 阐明 model_catalog_json 仅在启动时应用 @sayan-oai
- #12307 在切换模式时显示模型/推理提示 @charley-oai
- #12403 [apps] 修复 gateway url。@mzeng-openai
- #12240 fix(tui): 在某些终端中无法访问排队消息编辑快捷键 @fcoury
- #12405 [apps] 提高 MCP 工具调用超时。@mzeng-openai
- #12406 fix: 在 JSON schema 生成中显式列出名称冲突 @bolinfest
- #12301 向 Thread 对象添加字段,用于给定线程的最新重命名集合 @natea-oai
- #12268 将 realtime api 接入 core @aibrahim-oai
- #12415 fix(nix): 在 linux 构建中包含 libcap 依赖 @rgodha24
- #12416 添加实验性 realtime websocket URL 覆盖 @aibrahim-oai
- #12303 改进 Plan 模式推理选择流程 @charley-oai
- #12418 添加实验性 realtime websocket 覆盖和文本镜像 @aibrahim-oai
- #12381 fix: 解决 thread_resume_rejoins_running_thread_even_with_override_mismatch 的不稳定性 @bolinfest
- #12422 feat: 在 App Server v2 中直接使用 OAI Responses API MessagePhase 类型 @bolinfest
- #12376 test(app-server): 在 turn_start 测试中等待 turn/completed @yvolovich-cyber
- #12408 在 JSON schema 代码生成中忽略 v1 @bolinfest
- #12314 fix(core) 过滤不匹配的前缀规则 @dylan-hurd-oai
- #12429 feat: 劝阻使用 --all-features 标志 @bolinfest
- #12252 修复压缩上下文重新注入和模型基线 @charley-oai
- #12427 chore: 将配置诊断移出 codex-core @bolinfest
- #12430 折叠已等待消息 @pakrym-oai
- #12432 chore: 移除 codex-core 公共 protocol/shell 重导出 @bolinfest
- #12434 fix: codex-arg0 不再依赖 codex-core @bolinfest
- #12435 refactor(core): 将嵌入式系统 skills 移入 codex-skills crate @bolinfest
- #12440 chore: 删除空的 codex-rs/code 文件 @bolinfest
- #12441 删除 AggregatedStream @pakrym-oai
- #11293 feat(linux-sandbox): 通过 TCP-UDS-TCP 桥接实现仅代理出口 @viyatb-oai
- #12410 profile 级 model_catalog_json 覆盖 @sayan-oai
- #12420 防止重放的 runtime 事件强制激活状态 @etraut-openai
- #12428 如果可用,优先使用 v2 websockets @pakrym-oai
- #12419 改进图像 token 用量估算 @etraut-openai
- #12474 fix: 使 skills loader 测试在 ~/.agents skills 下保持 hermetic @bolinfest
- #12473 core: 在 TurnContext 中保留受限审批/沙箱策略 @bolinfest
- #12067 fix(tui): 在所有 TUI 视图中保持 URL 可点击性 @fcoury
- #12469 将入站 realtime 文本路由到 turn start 或 steer @aibrahim-oai
- #12479 回滚 "Route inbound realtime text into turn start or steer" @aibrahim-oai
- #12475 fix: 使 realtime 对话 flake 测试对顺序不敏感 @bolinfest
- #12476 使 shell 检测测试 对 Nix shell 路径具有鲁棒性 @rupurt
- #11447 feat(tui): 通过 syntect 实现语法高亮,并提供主题选择器 @fcoury
- #12373 app-server: 在断开连接期间保留线程监听器 @maxj-oai
- #12444 feat(tui) /clear @won-openai
- #12485 fix(core) exec policy 解析 3 @dylan-hurd-oai
- #12423 向 realtime api 发送事件 @aibrahim-oai
- #12364 feat: monitor 角色 @jif-oai
- #12313 处理孤立的 exec 结束,而不覆盖活动的 exploring cell @jif-oai
- #12455 feat(tui): 支持 Alt-d delete-forward-word @dougEfresh
- #12480 回滚 "回滚 "Route inbound realtime text into turn start or steer"" @aibrahim-oai
- #12509 在选择器中以不区分大小写的方式排序主题 @etraut-openai
- #12511 添加 C# 语法选项以高亮选择 @etraut-openai
- #12513 为此仓库添加 PR babysitting 技能 @etraut-openai
- #12518 test: 通过 DotSlash 引入 zsh fork,并稳定 zsh-fork 测试 @bolinfest
- #12553 从 view_image 返回图像内容 @pakrym-oai
- #12555 refactor: 将 MCP 策略构建与 escalate server 解耦 @bolinfest
- #12559 chore: nit name @jif-oai
- #12562 chore: awaiter @jif-oai
- #12565 chore: 向 memories 添加文档 @jif-oai
- #12568 chore: phase 2 名称 @jif-oai
- #12571 fix: TUI 约束 @jif-oai
- #12570 feat: 在 agent 选择器中保留已死亡的 agents @jif-oai
- #12575 feat: 将 agent 昵称传给模型 @jif-oai
- #12500 feat: 添加 uuid 辅助函数 @jif-oai
- #12580 chore: 重命名 memory 功能标志 @jif-oai
- #12541 允许 exec resume 在命令后解析 output-last-message 标志 @etraut-openai
- #12579 feat: 多 agent 角色指标 @jif-oai
- #12141 feat: 落地 sqlite @jif-oai
- #12576 chore: 改进 bazel 测试日志 @jif-oai
- #12028 移除功能标志 collaboration modes @aibrahim-oai
- #12520 调整 /clear 以支持清除 + 新聊天,并修复 macOS 终端的次要 bug @won-openai
- #12556 refactor: 为 exec-server 和 shell-escalation 规范化 unix 模块布局 @bolinfest
- #12421 app-server: 将请求分发 future 装箱以减少栈压力 @charley-oai
- #12528 chore(deps): 在 /codex-rs 中将 libc 从 0.2.180 升级到 0.2.182 @dependabot
- #12529 chore(deps): 在 /codex-rs 中将 syn 从 2.0.114 升级到 2.0.117 @dependabot
- #12583 在 tool runtimes 中使用基于 Arc 的 ToolCtx @bolinfest
- #12540 fix: 为截断的状态指示器添加省略号 @sayan-oai
- #12609 fix(tui): 在拥有的 wrap 映射不匹配时恢复 @fcoury
- #12569 fix(tui): 在最终答案仍在流式传输时排队 steer Enter,以防止死状态 @guidedways
- #12530 chore(deps): 在 /codex-rs 中将 owo-colors 从 4.2.3 升级到 4.3.0 @dependabot
- #12549 fix: 在状态指示器下方的详情中显示后台终端中运行的命令 @sayan-oai
- #3381 语音转写 @nornagon-openai
- #12619 处理 realtime spawn_transcript 委派 @aibrahim-oai
- #11408 更新 models.json @github-actions
- #12629 app-server: 修复使用
Sec-WebSocket-Extensions: permessage-deflate通过 websockets 连接的问题 @JaviSoto - #12632 refactor: 删除 exec-server 并将 execve 包装器移入 shell-escalation @bolinfest
- #12638 refactor: 将 shell-escalation 与 codex-core 解耦 @bolinfest
- #12357 feat(core): 在 execpolicy 中持久化网络审批 @viyatb-oai
- #12648 fix(exec) 修补 resume 测试竞态条件 @dylan-hurd-oai
- #12049 支持隐式 skill 调用分析事件 @alexsong-oai
- #12647 通过跳过重新绝对化,避免
EMFILE下AbsolutePathBuf::parent()panic @etraut-openai - #12633 添加 skill 审批事件/响应 @pakrym-oai
- #12650 chore: 移除硬编码的 PRESETS 列表 @sayan-oai
- #12652 简化 skill 跟踪 @pakrym-oai
- #12653 memories: 收紧整合提示 schema 和索引指南 @zuxin-oai
- #12667 feat: 多 agents 持久化配置覆盖 @jif-oai
- #12635 memories: 收紧 memory 查找指南和引用要求 @zuxin-oai
- #12663 fix: 在
/agent后重放 @jif-oai - #11258 发送预热请求 @pakrym-oai
- #12688 feat: 使用进程组杀死 PTY @jif-oai
- #11871 feat(core) 引入 Feature::RequestPermissions @dylan-hurd-oai
- #12628 ctrl-L(清除终端但不启动新聊天) @won-openai
- #9859 feat(network-proxy): 添加 MITM 支持并限制 limited-mode CONNECT @viyatb-oai
- #12649 feat: 通过 shell-escalation 运行 zsh fork shell 工具 @bolinfest
- #12643 修复聊天编辑器中的 @mention token 解析 @etraut-openai
- #12658 fix: 还尝试匹配 modelinfo 候选的命名空间前缀 @sayan-oai
- #11766 feat(sleep-inhibitor): 添加 Linux 和 Windows 空闲睡眠预防 @yvolovich-cyber
- #12581 feat(tui): 添加具有能力分级调色板的主题感知 diff 背景 @fcoury
- #12697 确保 shell 命令 skills 触发审批 @pakrym-oai
- #12707 refactor: 移除未使用的 seatbelt unix socket 参数 @bolinfest
- #12687 添加 TUI realtime 对话模式 @aibrahim-oai
- #12639 在发现
AGENTS.md时遵循project_root_markers@etraut-openai - #10935 Agent jobs(spawn_agents_on_csv)+ 进度 UI @daveaitel-openai
- #12700 回滚 audio scope @nornagon-openai
- #12711 fix: 临时移除 citation @zuxin-oai
- #12613 feat(tui) - /copy @won-openai
- #12695 添加 app-server 事件跟踪 @pakrym-oai
- #12717 提高压缩 token 核算中的图像字节估算 @etraut-openai
- #12724 fix: 将 EscalateServer 设为 public,并移除 shell escalation 包装器 @bolinfest
- #12517 codex-rs/app-server: 在 Ctrl-C 时优雅重启 websocket @maxj-oai
- #12636 fix(js_repl): 呈现未捕获的 kernel 错误并干净重置 @fjord-oai
- #12729 fix: 阐明 SkillMetadata.path 的值 @bolinfest
- #12719 feat: 通过 Arg0DispatchPaths 传递辅助可执行文件路径 @bolinfest
- #12720 在 release musl 构建步骤中添加 AWS_LC_SYS_NO_JITTER_ENTROPY=1 以解除发布阻塞 @sayan-oai
- #12725 修复嵌套工具调用中的 js_repl view_image 附件 @fjord-oai
- #12656 chore: 将 catalog mode 改为 enum @sayan-oai
- #12731 chore: 将 additional permissions 迁移到 PermissionProfile @celia-oai
- #12407 tests(js_repl): 稳定 CI 运行时测试执行 @fjord-oai
- #12737 feat: 向 v2 命令执行审批请求添加实验性 additionalPermissions @celia-oai
- #12372 feat: 更新 Docker 镜像摘要以反映 #12205 @fjord-oai
- #12746 fix: chatwidget 未遵循 ExecApprovalRequestEvent 的 approval_id @bolinfest
- #12185 tests(js_repl): 从 js_repl 测试中移除与 node 相关的跳过路径 @fjord-oai
- #12358 feat(ui): 添加网络审批持久化管道 @viyatb-oai
- #12730 feat: zsh-fork 强制 scripts/**/* 用于 skills 触发提示 @bolinfest
- #12750 fix: 保持 shell escalation exec 路径为绝对路径 @bolinfest
- #12753 在 zsh-fork exec 审批中呈现 skill 权限配置 @celia-oai
- #12319 feat: 为 app-server 添加服务名称 @jif-oai
- #12692 fix: 因线程排序的秒级分辨率导致的不稳定测试 @jif-oai
- #12578 feat: 向线程列表添加搜索词 @jif-oai
- #12660 支持外部 agent 配置检测和导入 @alexsong-oai
- #12756 feat: 记录 skill 脚本是否已为会话批准 @bolinfest
- #12767 在 TUI 中显示待处理的子线程审批 @jif-oai
- #12768 feat: 添加大栈测试宏 @jif-oai
- #12666 feat: 添加 stream parser @jif-oai
- #12761 feat: 记录内存用量 @jif-oai
- #12772 nit: 迁移 @jif-oai
- #12352 otel: 通过 gethostname 向 logs/traces 添加 host.name 资源属性 @mcgrew-oai
- #12770 chore: 统一 max depth 参数 @jif-oai
- #12787 feat: 修复 sqlite home @jif-oai