0.117.0
新增功能
- 插件现在是一等公民工作流:Codex 可以在启动时同步产品范围的插件,在
/plugins中浏览它们,并通过更清晰的认证/设置处理来安装或移除它们。(#15041, #15042, #15195, #15215, #15217, #15264, #15275, #15342, #15580, #15606, #15802) - 子代理现在使用可读的基于路径的地址,例如
/root/agent_a,并支持结构化的代理间消息传递和代理列表,用于多代理 v2 工作流。(#15313, #15515, #15556, #15570, #15621, #15647) /title终端标题选择器现在可在经典 TUI 和 app-server TUI 中使用,使并行会话更容易区分。(#12334, #15860)- App-server 客户端现在可以发送
!shell 命令、监视文件系统变更,并使用 bearer-token 认证连接到远程 websocket 服务器。(#14988, #14533, #14847, #14853) - 图像工作流更加顺畅:
view_image现在为代码模式返回图像 URL,生成的图像可从 TUI 重新打开,并且图像生成历史在恢复后仍然保留。(#15072, #15154, #15223) - 提示历史召回现在可在 app-server TUI 中使用,包括跨会话。(#14945)
问题修复
tui_app_server不再重复输出实时推理摘要或/review输出,并且会保留转录文本,而不是在背压下丢弃它。(#15758, #15839, #15759)tui_app_server中的 ChatGPT 登录现在会重新打开本地浏览器,在Ctrl+C时干净取消,并且在你处于登出状态时不再导致启动失败。(#15672, #15673, #15670)- 提前退出现在会可靠地恢复终端状态,避免退出后 shell 状态损坏;tmux 用户还可以使用
Shift+Left的排队消息编辑快捷键。(#15671, #15480) - 在较旧发行版和较旧
bubblewrap上,Linux 沙箱化工具调用现在更可靠,Windows 受限令牌沙箱现在支持更多拆分策略豁免布局。(#15693, #14172) - 远程多代理会话现在显示代理名称而不是原始 ID,并且能更优雅地从过期的轮次引导竞态中恢复。(#15513, #15714, #15163)
- 插件支持的提及和产品门控现在表现得更可预测,修复了显式提及丢失上下文或插件被错误过滤的情况。(#15372, #15263, #15279)
其他变更
- 基于 app-server 的 TUI 现已默认启用,插件/应用的分阶段发布标志已在常规构建中开启。(#15661, #15713, #15719, #15820)
- 作为持续进行的工具面清理工作的一部分,移除了旧版 artifact 工具,并停用了旧的
read_file和grep_files处理器。(#15851, #15864, #15773, #15775)
- 扩展了 app-server 和 exec-server 的 docs/schema fixtures,以覆盖 exec-server 设置、filesystem watch RPC、realtime transcript 通知,以及新的 Python
thread.run(...)quickstart 流程。(#15089, #14533, #15344, #15088)
完整变更日志:https://github.com/openai/codex/compare/rust-v0.116.0...rust-v0.117.0
- #14945 feat(tui): 在 app-server tui 中恢复 composer history @fcoury
- #15092 fix: 尝试修复 ci.yml 中的 "Stage npm package" 步骤 @bolinfest
- #15075 将工具错误传播到 code mode @pakrym-oai
- #15072 从 view_image 工具返回 image URL @pakrym-oai
- #15076 为自定义 prompts 添加启动时的弃用警告 @etraut-openai
- #15102 回滚 "fix: 强化 plugin 功能门控" @xl-openai
- #15077 为 realtime handoff 输出添加最终消息前缀 @aibrahim-oai
- #13494 使 SQLite feedback 日志与 feedback formatter 对齐 @charley-oai
- #14888 Feat: 在线程恢复时复用持久化的 model 和 reasoning effort @shijie-oai
- #15111 不为 v2 realtime 添加 transcript @aibrahim-oai
- #15103 添加 update_plan code mode 结果 @pakrym-oai
- #15100 添加 apply_patch code mode 结果 @pakrym-oai
- #15104 fix: 强化 plugin 功能门控 @xl-openai
- #15089 添加 exec-server stub server 和 protocol 文档 @starr-openai
- #15042 支持 featured plugins @alexsong-oai
- #15088 为 Python SDK 添加 thread.run 便捷方法 @shaqayeq-oai
- #15119 从 exec server 移除 stdio transport @pakrym-oai
- #14632 feat(core, tracing): 通过 websockets 创建 turn spans @owenlin0
- #15011 将 session 和 turn headers 转发到 MCP HTTP 请求 @nicholasclark-openai
- #15118 [hooks] 为 Stop 和 UserPromptSubmit 添加 turn_id 扩展 @eternal-openai
- #14970 简单目录 mentions @canvrno-oai
- #14988 将 thread/shellCommand 添加到 app server API surface @etraut-openai
- #15041 feat: 支持 product-scoped plugins。 @xl-openai
- #15056 feat: 添加 agent network 的图表示 @jif-oai
- #15163 fix: agent 已关闭的情况 @jif-oai
- #15125 将 environment abstraction 移入 exec server @pakrym-oai
- #15180 chore: 为 profile 添加 metrics @jif-oai
- #15175 chore: morpheus 不生成 memories @jif-oai
- #15185 回滚 "将 session 和 turn headers 转发到 MCP HTTP 请求" @nicholasclark-openai
- #14867 [hooks] 在 prompt continuation 中使用 user message > developer message @eternal-openai
- #15196 添加实验性 exec server URL 处理 @pakrym-oai
- #15198 为 argument-comment lint 发布可运行的 DotSlash package @bolinfest
- #15090 添加 exec-server process 和 filesystem RPC @starr-openai
- #15201 分别记录 automated reviewer approval sources @gabec-openai
- #12334 feat(tui): 添加 /title 终端标题配置 @yvolovich-cyber
- #15206 feat(tracing): 使用 turn_id 标记 app-server turn spans @owenlin0
- #15216 将 terminal module 移到 terminal-detection crate @aibrahim-oai
- #15207 为 Windows destructive commands 添加特定 tool 指导 @iceweasel-oai
- #15154 向 tui 添加完整 imagepath @won-openai
- #15217 feat: 为 plugin/read 暴露 needs_auth。 @xl-openai
- #15190 通过 _meta 传递 MCP turn metadata @nicholasclark-openai
- #15220 feat(app-server): 添加 mcpServer/startupStatus/updated 通知 @owenlin0
- #15222 将保存目录改为 codex_home @won-openai
- #15232 重构 ExecServer filesystem 在 local 和 remote 之间的拆分 @pakrym-oai
- #15021 V8 Bazel 构建 @cconger
- #15150 将 auth 代码移入 login crate @aibrahim-oai
- #15195 [plugins] 调用 plugin/install 时安装 MCPs @mzeng-openai
- #15254 core: 添加 full-buffer exec capture policy @bolinfest
- #15263 fix: 区分缺失和空的 plugin products @xl-openai
- #15253 将 features 拆分到 codex-features crate @aibrahim-oai
- #15233 将 exec process 拆分为 local 和 remote 实现 @starr-openai
- #15199 使用已发布的 DotSlash package 进行 argument-comment lint @bolinfest
- #15215 初始 plugins TUI 菜单 - 仅列表和读取。tui + tui_app_server @canvrno-oai
- #15252 暂时在 windows 上禁用 hooks @eternal-openai
- #15264 feat: 添加一次性启动远程 plugin 同步 @xl-openai
- #15262 添加 guardian follow-up reminder @charley-oai
- #15223 Feat/恢复 image generation history @won-openai
- #15275 feat: curated plugin sync 优先使用 git @xl-openai
- #14869 添加 remote env CI matrix 和集成测试 @pakrym-oai
- #15218 为 codex-tui 添加临时 app-server originator fallback @etraut-openai
- #15328 尝试修复 bazel @jif-oai
- #15324 添加 remote test skill @pakrym-oai
- #15313 feat: 将 multi-agent 改为使用 path-like system 而不是 uuids @jif-oai
- #15244 在 Windows 上将 Python SDK app-server stdio 固定为 UTF-8 @shaqayeq-oai
- #15337 升级 aws-lc-rs @cconger
- #15203 添加新的已构建 v8 的 v8-poc consumer @cconger
- #15273 [apps] 在 yolo mode 中使用 ARC。 @mzeng-openai
- #15128 chore(core) 移除 Feature::PowershellUtf8 @dylan-hurd-oai
- #15344 在 v2 中添加 realtime transcript 通知 @aibrahim-oai
- #15285 将 tui /plugins 菜单置于 flag 之后 @canvrno-oai
- #15114 fix: 允许受限 filesystem profiles 读取 helper executables @celia-oai
- #15231 chore(core) 更新 prefix_rule guidance @dylan-hurd-oai
- #15036 fix(core) 在未沙箱化时禁用 command_might_be_dangerous @dylan-hurd-oai
- #15348 将 platform param 传给 featured plugins @alexsong-oai
- #15276 在 v8 上使用 Code mode @cconger
- #15372 [plugins] 修复 plugin 显式 mention 上下文管理。 @mzeng-openai
- #15366 chore(context) 包含 guardian approval context @dylan-hurd-oai
- #15390 从 tui_app_server 移除旧版 app-server 通知处理 @etraut-openai
- #15409 为 macosx 添加 JIT entitlement @cconger
- #15414 从 tui_app_server 移除旧版 auth 和通知处理 @etraut-openai
- #15376 [apps] 改进 TUI 的 app tools 加载。 @mzeng-openai
- #15415 chore(exec_policy) ExecPolicyRequirementScenario 测试 @dylan-hurd-oai
- #15464 移除 smart_approvals alias migration @charley-oai
- #15443 core: 快照 fork startup context injection @charley-oai
- #15480 在 tmux 中使用 Shift+Left 编辑排队消息 @charley-oai
- #15317 nit: guard -> registry @jif-oai
- #15338 fix: 当系统 bwrap 缺少 --argv0 时回退到 vendored bubblewrap @bolinfest
- #15520 fix: cargo deny @jif-oai
- #15279 将 plugins 标记为 plugins,并为给定 plugin 隐藏 skills/apps @canvrno-oai
- #15259 tui: 在手动 /compact 期间排队 follow-ups @charley-oai
- #15515 feat: 结构化 multi-agent 输出 @jif-oai
- #15357 Fix: proactive auth refresh 先重新加载 guarded disk state @celia-oai
- #15342 Plugins TUI 安装/卸载 @canvrno-oai
- #15540 chore: 拆分 sub-agent v2 实现 @jif-oai
- #15516 将 guardian Responses API 错误接入 denial rationale @charley-oai
- #15378 feat: 支持按名称禁用 skills。 @xl-openai
- #15529 统一 TUI 中的 realtime stop 处理 @aibrahim-oai
- #15557 fix: main tui @jif-oai
- #15556 feat: 用于 sub-agents communication 的新 op type @jif-oai
- #15211 [hooks] 添加非流式(非 stdin 风格)仅 shell 的 PreToolUse 支持 @eternal-openai
- #15560 feat: 使用 serde 区分 inter agent communication @jif-oai
- #15426 chore(core) 将 approvals reviewer 添加到 UserTurn @dylan-hurd-oai
- #15562 [codex] 添加 rollback context duplication snapshot @charley-oai
- #15570 feat: 用于 multi-agent v2 的自定义 watcher @jif-oai
- #15575 feat: 用于 multi-agent v2 的自定义 watcher @jif-oai
- #15576 feat: 用于 multi-agent v2 的自定义 watcher @jif-oai
- #15360 fix: 使用 OsString 而不是 String 构建 PATH env var @bolinfest
- #15239 添加 fork snapshot modes @charley-oai
- #15554 将 plugin-creator 添加为 system skill @alexsong-oai
- #15592 将 landlock helpers 提取到 codex-sandboxing @pakrym-oai
- #15593 将 macOS sandbox builders 移入 codex-sandboxing @pakrym-oai
- #15478 [codex-cli][app-server] 更新返回错误中的 self-serve business usage limit copy @dhruvgupta-oai
- #15600 将 imagegen skill 移入 system skills @dkundel-openai
- #15599 将 sandbox policy transforms 移入 codex-sandboxing @pakrym-oai
- #15580 从 plugins/list 结果中移除 filter @canvrno-oai
- #15581 稳定 macOS CI 测试超时 @dylan-hurd-oai
- #15613 nit: 拆分 v2 wait @jif-oai
- #15614 fix: flaky test @jif-oai
- #15621 feat: 为 sub-agent v2 列出 agents @jif-oai
- #15623 nit: 优化 list agents @jif-oai
- #15549 允许 global network allowlist wildcard @rreichel3-oai
- #15424 完成将 codex exec 移到 app-server @etraut-openai
- #15603 将 sandbox manager 和 transforms 提取到 codex-sandboxing @pakrym-oai
- #15484 chore(deps): 将 pnpm/action-setup 从 4 升级到 5 @dependabot
- #14777 升级 vedantmgoyal9/winget-releaser 从 19e706d4c9121098010096f9c495a70a7518b30f 到 7bd472be23763def6e16bd06cc8b1cdfab0e2fd5 @dependabot
- #15558 [Codex TUI] - 先按 installed status 排序 /plugins TUI 菜单,再按 alpha 排序 @canvrno-oai
- #15598 在 plugin 安装/卸载后刷新 mentions 列表 @canvrno-oai
- #15624 feat: 禁用 notifier v2,并在 agent interaction 时开始 turn @jif-oai
- #15605 [codex] 稳定 compact resume 和 fork snapshot flaky tests @charley-oai
- #15658 尝试修复 git glitch @jif-oai
- #15657 尝试修复 git glitch @jif-oai
- #15656 尝试修复 git glitch @jif-oai
- #15655 尝试修复 git glitch @jif-oai
- #15654 尝试修复 git glitch @jif-oai
- #15653 尝试修复 git glitch @jif-oai
- #15652 尝试修复 git glitch @jif-oai
- #15651 尝试修复 git glitch @jif-oai
- #15650 尝试修复 git glitch @jif-oai
- #15606 美化 plugin labels,在 MCP tool refresh 期间保留 plugin app provenance @canvrno-oai
- #15579 将 voice space hold timeout 增加到 1s @aibrahim-oai
- #15093 core: 使 FileWatcher 可复用 @euroelessar
- #15547 app-server: 为
command/exec添加 back pressure 和 batching @euroelessar - #15647 feat: communication pattern v2 @jif-oai
- #15438 feat: 在 plugin/list 中包含 marketplace loading error @xl-openai
- #15545 chore: 使用 access token expiration 进行 proactive auth refresh @celia-oai
- #15530 chore: 在永久 token failure 后停止 app-server auth refresh storms @celia-oai
- #15577 在 rollback 期间裁剪 pre-turn context updates @charley-oai
- #15660 在禁用的 TUI list rows 上隐藏 numeric prefixes @canvrno-oai
- #15644 fix: 移除 shell-tool-mcp 后保留 zsh-fork release assets @bolinfest
- #15670 tui_app_server: 在登出时容忍缺失的 rate limits @etraut-openai
- #15564 将 git utilities 移入专用 crate @aibrahim-oai
- #15669 清理 TUI /plugins row 对齐 @canvrno-oai
- #15671 tui: 提前退出时始终恢复 terminal @etraut-openai
- #15672 tui_app_server: 在本地浏览器中打开 ChatGPT login @etraut-openai
- #15673 tui_app_server: 在 Ctrl+C 退出前取消 active login @etraut-openai
- #15676 调整 /plugin 菜单措辞 @canvrno-oai
- #15666 抑制 plugin-install MCP OAuth URL 控制台刷屏 @canvrno-oai
- #15573 [plugins] 为 tool suggest 和 apps 添加额外门控。 @mzeng-openai
- #15665 从 sandbox exec requests 中移除 sandbox_permissions @pakrym-oai
- #15572 将 string truncation helpers 移入 codex-utils-string @aibrahim-oai
- #14533 app-server: 添加 filesystem watch 支持 @euroelessar
- #15674 在 tui 和 tui_app_server 中为 plugin loading headers 使用 delayed shimmer @canvrno-oai
- #15689 app-server: 在 initialize response 中返回 codex home @euroelessar
- #15363 fix: 将 rmcp-client env vars 保持为 OsString @bolinfest
- #15700 移除 plugins 中 apps 和 skills 的 $mentions provenance filtering @canvrno-oai
- #15692 为 TUI /plugin details 添加 legal link @canvrno-oai
- #15351 在 MDM workspace write roots 中展开 ~ @evawong-oai
- #15548 将 rollout 提取到其自己的 crate @aibrahim-oai
- #15699 [codex] 将 fork context injection 延迟到第一个 turn @charley-oai
- #15601 [app-server] 添加覆盖 feature flags 的方法。 @mzeng-openai
- #15708 TUI plugin 菜单清理 - 隐藏 app ID @canvrno-oai
- #15677 修复过时的 quickstart 集成断言 @shaqayeq-oai
- #15713 [plugins] 翻转 flags。 @mzeng-openai
- #15719 [plugins] 打开额外 flags。 @mzeng-openai
- #14172 fix: 在 windows restricted-token sandbox 中支持 split carveouts @viyatb-oai
- #15714 修复 tui_app_server 中过时的 turn steering fallback @etraut-openai
- #15722 [plugins] 为 tool search 添加 flag。 @mzeng-openai
- #15734 更新 plugin creator skill。 @xl-openai
- #15766 chore: tty metric @jif-oai
- #15519 fix(core): mcp missing annotations 的默认 approval 行为 @fouad-openai
- #15775 chore: 移除 grep_files handler @jif-oai
- #15710 对 cwd state 使用 AbsolutePathBuf @pakrym-oai
- #15778 feat: rendering library v1 @jif-oai
- #15758 fix(tui): 避免重复的 live reasoning summaries @fcoury
- #15773 chore: 移除 read_file handler @jif-oai
- #15776 feat: 添加 multi-thread log query @jif-oai
- #15744 提取 codex-instructions crate @aibrahim-oai
- #15339 添加 non-interactive resume filter 选项 @nornagon-openai
- #15746 提取 codex-utils-plugins crate @aibrahim-oai
- #15747 提取 codex-plugin crate @aibrahim-oai
- #15748 提取 codex-analytics crate @aibrahim-oai
- #15707 阐明用于 MDM path resolution 的 codex_home base @evawong-oai
- #15513 fix(tui_app_server): 修复 remote subagent switching 和 agent names @fcoury
- #14856 [apps][tool_suggest] 移除 tool_suggest 对 tool search 的依赖。 @mzeng-openai
- #14847 feat: 为 app-server 添加 websocket auth @viyatb-oai
- #15759 fix(tui_app_server): 在 backpressure 下保留 transcript events @fcoury
- #15749 提取 codex-core-skills crate @aibrahim-oai
- #15798 避免
getAuthStatus中重复的 auth refreshes @etraut-openai - #15659 添加 MCP tool call spans @nicholasclark-openai
- #15789 将 ChatGPT
hcplan 视为 Enterprise @arnavdugar-openai - #15802 TUI plugin 菜单打磨 @canvrno-oai
- #15785 为 exec server URL 添加 cached environment manager @pakrym-oai
- #15806 向 tui_app_server 添加 ReloadUserConfig @canvrno-oai
- #15810 app-server: 组织 app-server 以支持更多 transports @euroelessar
- #15800 [mcp] 改进 custom MCP elicitation @mzeng-openai
- #15531 [hooks] 添加非流式(非 stdin 风格)仅 shell 的 PostToolUse 支持 @eternal-openai
- #15820 [plugins] 打开 flags。 @mzeng-openai
- #15825 修复 tui_app_server 中 quoted command rendering @etraut-openai
- #14853 通过 client 接入 remote app-server auth @etraut-openai
- #15817 在 Windows 上展开 home-relative paths @tiffanycitra
- #15693 fix: 修复旧系统 bubblewrap 兼容性,且不回退到 vendored bwrap @viyatb-oai
- #15784 feat: 用 custom lib 替换 askama @jif-oai
- #15851 feat: 移除 artifact tool 和 feature @jif-oai
- #15861 feat: 清理 spawn v1 @jif-oai
- #15691 feat: 为 unified exec 准备 exec-server @jif-oai
- #15864 chore: 移除 artifacts lib @jif-oai
- #15812 core: 移除 skill scripts 的特殊 execve 处理 @bolinfest
- #15869 fix: flaky @jif-oai
- #15877 chore: 要求 agents md 不要摆弄 PIDs @jif-oai
- #15866 feat: 在
exec-server中使用ProcessId@jif-oai - #15829 [plugins] 更新 suggestable plugins 列表。 @mzeng-openai
- #15880 fix: max depth agent 仍具有 v2 tools @jif-oai
- #15839 修复 app-server TUI 中重复的 /review 消息 @etraut-openai
- #15805 添加 MCP connector metrics @nicholasclark-openai
- #15661 默认启用
tui_app_serverfeature @etraut-openai - #15835 fix: 装箱 apply_patch test harness futures @bolinfest
- #15796 [codex] 从 safe allowlist 中阻止不安全的 git global options @adrian-openai
- #15813 添加中间 wildcard 测试覆盖 @evawong-oai
- #15881 fix: 将 root 作为 std agent @jif-oai
- #15860 feat(tui): 为 tui app server 添加 terminal title 支持 @fcoury
- #15885 [mcp] 修复 legacy_tools @mzeng-openai