## 新功能
- 新增 `codex marketplace add` 命令及应用服务器支持,可通过 GitHub、git URL、本地目录及直接的 `marketplace.json` URL 安装插件市场 (#17087, #17717, #17756)。
- 改进 TUI 提示历史记录,包括 `Ctrl+R` 反向搜索以及对已接受的斜杠命令的本地回忆 (#17550, #17336)。
- 新增 TUI 和应用服务器对记忆模式、记忆重置/删除以及记忆扩展清理的控制 (#17632, #17626, #17913, #17937, #17844)。
- 扩展 MCP/插件支持,新增 MCP 应用工具调用、带命名空间的 MCP 注册、并行调用选择加入以及 MCP 服务器的沙盒状态元数据 (#17364, #17404, #17667, #17763)。
- 为输出模态、转录完成事件、原始回合项注入以及符号链接感知的文件系统元数据添加实时和应用服务器 API (#17701, #17703, #17719)。
- 新增安全的 devcontainer 配置文件,支持 bubblewrap,并为 macOS 沙盒添加 Unix 套接字允许列表 (#10431, #17547, #17654)。
## Bug 修复
- 修复 macOS 沙盒/代理对私有 DNS 的处理,并移除了 `danger-full-access` 仅拒绝列表的网络模式 (#17370, #17732)。
- 修复 Windows 当前工作目录/会话匹配,使 `resume --last` 和 `thread/list` 在路径使用 verbatim 前缀时能够正常工作 (#17414)。
- 修复 `prolite` 计划的速率限制/账户处理,并使未知的 WHAM 计划值可解码 (#17419)。
- 将 Guardian 超时与策略拒绝区分开,提供超时特定指引并显示在 TUI 历史记录条目中 (#17381, #17486, #17521, #17557)。
- 通过避免过早的线程卸载、容忍启动时信任持久化失败以及跳过 `fs/readDirectory` 中的损坏符号链接,稳定应用服务器行为 (#17398, #17595, #17907)。
- 修复 MCP/工具调用的边缘情况,包括扁平化的延迟工具名称、提示超时核算以及空的命名空间描述 (#17556, #17566, #17946)。
## 文档
- 记录了安全的 devcontainer 配置文件及其 bubblewrap 要求 (#10431, #17547)。
- 为 TUI 编辑器添加了历史搜索行为的文档 (#17550)。
- 更新了应用服务器文档,涵盖新的 MCP、市场、回合注入、记忆重置、文件系统元数据、外部代理迁移以及 WebSocket 令牌哈希 API (#17364, #17717, #17703, #17913, #17719, #17855, #17871)。
- 记录了 WSL1 上 bubblewrap 的限制及 WSL2 的行为 (#17559)。
- 为扩展清理添加了记忆管道文档 (#17844)。
## 杂项
- 通过固定 GitHub Actions、cargo 安装、git 依赖、V8 校验和以及 cargo-deny 源允许列表,加强了供应链和 CI 输入的安全性 (#17471)。
- 添加 Bazel 发布构建验证,确保发布专用的 Rust 代码在 PR CI 中被编译 (#17704, #17705)。
- 引入了 `codex-thread-store` crate/接口,并将本地线程列表功能移至其下 (#17659, #17824)。
- 要求工作区安装需使用经过审查的 pnpm 依赖构建脚本 (#17558)。
- 通过更广泛的绝对路径类型和移除未使用的辅助 API,减少了 Rust 维护面 (#17407, #17792, #17146)。
## 更新日志
完整更新日志:https://github.com/openai/codex/compare/rust-v0.120.0...rust-v0.121.0
- #17087 添加市场命令 @xli-oai
- #17409 修复 Windows exec-server 输出测试的随机失败 @etraut-openai
- #17381 在协议类型中表示 Guardian 审查超时 @won-openai
- #17399 TUI:强制核心边界 @etraut-openai
- #17370 修复:在 macOS 沙盒中解除私有 DNS 的阻塞 @viyatb-oai
- #17396 更新云要求解析失败消息 @alexsong-oai
- #17364 [mcp] 支持 MCP 应用第 3 部分 - 添加 mcp 工具调用支持。 @mzeng-openai
- #17424 稳定市场添加本地源测试 @ningyi-oai
- #17414 修复 Windows verbatim 路径的 thread/list 当前工作目录过滤 @etraut-openai
- #10431 feat(devcontainer):添加独立的secure客户配置文件 @viyatb-oai
- #17314 随反馈上传传递回合 ID @ningyi-oai
- #17336 fix(tui):本地回忆已接受的斜杠命令 @fcoury-oai
- #17430 将关闭的 TUI 输入流处理为关闭 @etraut-openai
- #17385 添加 use_agent_identity 功能标志 @adrian-openai
- #17483 更新问题标记器代理标签 @etraut-openai
- #17493 修复 @aibrahim-oai
- #17419 支持 prolite 计划类型 @etraut-openai
- #17416 在 /stop 后清除 /ps @etraut-openai
- #17415 在退出时恢复 codex-tui 恢复提示 @etraut-openai
- #17402 chore:重构名称和命名空间为单一类型 @sayan-oai
- #17486 Guardian 超时后更改决策语义 @won-openai
- #17521 澄清 Guardian 超时指引 @won-openai
- #17547 [codex] 在安全 Docker devcontainer 中支持 bubblewrap @viyatb-oai
- #17519 预算实时当前回合上下文 @aibrahim-oai
- #17556 [codex] 支持扁平化的延迟 MCP 工具调用 @fc-oai
- #17558 build(pnpm):要求审查依赖构建脚本 @mcgrew-oai
- #17559 fix(sandboxing):拒绝 WSL1 bubblewrap 沙盒 @viyatb-oai
- #17520 将用户文本镜像到实时 @aibrahim-oai
- #17550 feat(tui):向编辑器添加反向历史搜索 @fcoury-oai
- #17420 移除上下文状态行计量器 @etraut-openai
- #17506 通过应用服务器公开指令来源 (AGENTS.md) @etraut-openai
- #17566 fix(mcp) 暂停提示计时器 @dylan-hurd-oai
- #17406 将 MCP 工具挂钟时间添加到模型输出 @pakrym-oai
- #17294 通过沙盒辅助运行 exec-server 文件系统操作 @starr-openai
- #17605 稳定 exec-server 进程测试 @etraut-openai
- #17221 feat:在 0.0.0 上忽略密钥环 @jif-oai
- #17216 从 exec-server 策略构建远程执行环境 @jif-oai
- #17633 nit:更改合并模型 @jif-oai
- #17640 fix:稳定性 exec 服务器 @jif-oai
- #17643 fix:去重压缩 @jif-oai
- #17247 使分叉的代理生成保持父模型配置 @friel-openai
- #17470 修复流失败时自定义工具输出清理 @etraut-openai
- #17417 为问卷发出计划模式提示通知 @etraut-openai
- #17481 在狭窄布局中包装状态重置时间戳 @etraut-openai
- #17601 抑制重复压缩和终端等待事件 @etraut-openai
- #17657 修复 TUI 压缩项重放 @etraut-openai
- #17595 信任持久化失败时不要失败线程启动 @etraut-openai
- #17407 在技能加载和 codex_home 中使用 AbsolutePathBuf @pakrym-oai
- #17626 feat:禁用记忆端点 @jif-oai
- #17365 在提升的 Windows 沙盒设置中包含传统拒绝路径 @iceweasel-oai
- #17638 feat:为避免重新加载策划的市场以进行工具建议发现… @jif-oai
- #17398 app-server:仅卸载一段时间未使用的线程 @euroelessar
- #17669 仅在规则需要时指定远程端口 @iceweasel-oai
- #17691 修复 TUI 编译 @davidhao3300
- #17384 将第 2 阶段记忆模型更新为 gpt-5.4 @kliu128
- #17395 移除不必要的测试 @kliu128
- #17685 限制实时镜像的用户回合 @aibrahim-oai
- #17699 更改实时工具描述 @aibrahim-oai
- #17667 向包含的 mcps 添加 `supports_parallel_tool_calls` 标志 @josiah-openai
- #17703 添加回合项注入 API @pakrym-oai
- #17671 在 CI 中稳定 exec-server 文件系统测试 @starr-openai
- #17557 guardian 超时修复 PR 3 - 超时的 UX 触摸 @won-openai
- #17719 [codex] 为 fs 元数据添加符号链接标志 @pakrym-oai
- #17146 [codex] 移除未使用的 Rust 辅助工具 @pakrym-oai
- #17471 fix:固定输入 @viyatb-oai
- #17717 [codex] 将市场添加重构为共享核心流程 @xli-oai
- #17747 将插件加载重构为异步 @pakrym-oai
- #17709 [codex] 为代码模式 V8 初始化 ICU 数据 @pakrym-oai
- #17749 [codex] 仅在请求边界处 draining mailbox @tibo-openai
- #16640 [codex-analytics] 功能管道和发射 @rhan-oai
- #17761 收紧实时交接最终化 @aibrahim-oai
- #17701 添加实时输出模态和转录事件 @aibrahim-oai
- #17777 nit:功能标志 @jif-oai
- #17637 feat:将上下文百分比添加到状态行 @jif-oai
- #17665 在支持的模型上始终启用原始图像细节 @fjord-oai
- #17374 [codex-analytics] 将会话来源添加到客户端元数据 @marksteinbrick-oai
- #17489 将 updated-at 时间戳移动到唯一的毫秒时间 @ddr-oai
- #17784 feat:codex 采样器 @jif-oai
- #17732 fix:恢复 danger-full-access 仅拒绝列表模式 @viyatb-oai
- #17234 将调试客户端输出重定向到文件 @rasmusrygaard
- #17803 将 image_detail_original 保留为已移除的功能标志 @fjord-oai
- #17372 app-server:准备并发运行初始化的 RPC @euroelessar
- #17704 重构 Bazel CI 作业设置 @bolinfest
- #17674 通过环境文件系统路由 apply_patch @starr-openai
- #17702 修复远程技能弹出窗口加载 @starr-openai
- #17830 [codex] 修复应用服务器初始化请求分析构建 @etraut-openai
- #17389 [codex-analytics] 默认启用通用分析 @rhan-oai
- #17659 线程存储接口 @wiltzius-openai
- #17792 传播 AbsolutePathBuf @pakrym-oai
- #17808 fix:应用补丁 bin 刷新 @jif-oai
- #17838 添加实时线路跟踪日志 @aibrahim-oai
- #17684 调整默认工具搜索结果上限 @malone-oai
- #17705 添加 Bazel 验证发布构建作业 @bolinfest
- #17720 使技能加载具有文件系统感知能力 @pakrym-oai
- #17756 [codex] 支持本地市场来源 @xli-oai
- #17846 修复 Guardian CI 测试栈溢出,应用 Box 以减少栈压力 @won-openai
- #17855 在外部代理配置迁移中支持插件 @alexsong-oai
- #17872 在 Guardian 审查会话中禁用钩子 @abhinav-oai
- #17868 包装委托的输入文本 @guinness-oai
- #17884 修复外部代理配置迁移中的 clippy 警告 @canvrno-oai
- #17837 在核心测试中重用远程 exec-server @starr-openai
- #17859 沙盒:移除死亡的 seatbelt 辅助工具并更新测试 @bolinfest
- #17870 fix:清理通用 exec() 函数的契约 @bolinfest
- #17871 fix:添加 WebSocket 能力令牌哈希支持 @viyatb-oai
- #17763 通过 MCP 工具元数据发送沙盒状态 @aaronl-openai
- #17654 在 macOS 沙盒中支持 Unix 套接字允许列表 @aaronl-openai
- #17915 fix:cargo deny @jif-oai
- #17913 feat:添加删除记忆的端点 @jif-oai
- #17844 feat:清理记忆扩展 @jif-oai
- #17921 chore:exp 标志 @jif-oai
- #17917 [codex] 修复当前主 CI 阻塞问题 @sayan-oai
- #17919 chore:重置时不关闭过去推出的记忆 @jif-oai
- #17924 nit:稳定测试 @jif-oai
- #17632 feat:记忆菜单 @jif-oai
- #17404 使用命名空间注册所有 mcp 工具 @sayan-oai
- #17941 nit:文档 @jif-oai
- #17938 feat:在阶段 1 之前清理推出 @jif-oai
- #17937 feat:重置记忆按钮 @jif-oai
- #17883 移除 exec-server 文件系统沙盒请求预检 @pakrym-oai
- #17386 在 use_agent_identity 后注册代理身份 @adrian-openai
- #17907 修复 fs/readDirectory 以跳过损坏的符号链接 @willwang-openai
- #17960 chore(features) codex 依赖 feat @dylan-hurd-oai
- #17965 fix:将 is_azure_responses_wire_base_url 重命名为 is_azure_responses_provider @bolinfest
- #17946 修复空工具描述 @shijie-oai
- #17824 [codex] 添加本地线程存储列表 @wiltzius-openai
- #17942 添加 CLI 更新公告 @shijie-oai
- #17866 重构身份验证提供商以变更请求标头 @pakrym-oai
- #17902 app-server:跟踪每个流的远程控制序列 ID @euroelessar
- #17957 mcp:移除 codex/sandbox-state 自定义请求支持 @bolinfest
- #17953 fix:传播日志数据库 @jif-oai
- #17920 chore(tui) 清理 @dylan-hurd-oai
- #17981 chore:临时禁用 @jif-oai
## New Features
- Added `codex marketplace add` and app-server support for installing plugin marketplaces from GitHub, git URLs, local directories, and direct `marketplace.json` URLs (#17087, #17717, #17756).
- Added TUI prompt history improvements, including `Ctrl+R` reverse search and local recall for accepted slash commands (#17550, #17336).
- Added TUI and app-server controls for memory mode, memory reset/deletion, and memory-extension cleanup (#17632, #17626, #17913, #17937, #17844).
- Expanded MCP/plugin support with MCP Apps tool calls, namespaced MCP registration, parallel-call opt-in, and sandbox-state metadata for MCP servers (#17364, #17404, #17667, #17763).
- Added realtime and app-server APIs for output modality, transcript completion events, raw turn item injection, and symlink-aware filesystem metadata (#17701, #17703, #17719).
- Added a secure devcontainer profile with bubblewrap support, plus macOS sandbox allowlists for Unix sockets (#10431, #17547, #17654).
## Bug Fixes
- Fixed macOS sandbox/proxy handling for private DNS and removed the `danger-full-access` denylist-only network mode (#17370, #17732).
- Fixed Windows cwd/session matching so `resume --last` and `thread/list` work when paths use verbatim prefixes (#17414).
- Fixed rate-limit/account handling for `prolite` plans and made unknown WHAM plan values decodable (#17419).
- Made Guardian timeouts distinct from policy denials, with timeout-specific guidance and visible TUI history entries (#17381, #17486, #17521, #17557).
- Stabilized app-server behavior by avoiding premature thread unloads, tolerating failed trust persistence on startup, and skipping broken symlinks in `fs/readDirectory` (#17398, #17595, #17907).
- Fixed MCP/tool-call edge cases including flattened deferred tool names, elicitation timeout accounting, and empty namespace descriptions (#17556, #17566, #17946).
## Documentation
- Documented the secure devcontainer profile and its bubblewrap requirements (#10431, #17547).
- Added TUI composer documentation for history search behavior (#17550).
- Updated app-server docs for new MCP, marketplace, turn injection, memory reset, filesystem metadata, external-agent migration, and websocket token-hash APIs (#17364, #17717, #17703, #17913, #17719, #17855, #17871).
- Documented WSL1 bubblewrap limitations and WSL2 behavior (#17559).
- Added memory pipeline documentation for extension cleanup (#17844).
## Chores
- Hardened supply-chain and CI inputs by pinning GitHub Actions, cargo installs, git dependencies, V8 checksums, and cargo-deny source allowlists (#17471).
- Added Bazel release-build verification so release-only Rust code is compiled in PR CI (#17704, #17705).
- Introduced the `codex-thread-store` crate/interface and moved local thread listing behind it (#17659, #17824).
- Required reviewed pnpm dependency build scripts for workspace installs (#17558).
- Reduced Rust maintenance surface with broader absolute-path types and removal of unused helper APIs (#17407, #17792, #17146).
## Changelog
Full Changelog: https://github.com/openai/codex/compare/rust-v0.120.0...rust-v0.121.0
- #17087 Add marketplace command @xli-oai
- #17409 Fix Windows exec-server output test flake @etraut-openai
- #17381 representing guardian review timeouts in protocol types @won-openai
- #17399 TUI: enforce core boundary @etraut-openai
- #17370 fix: unblock private DNS in macOS sandbox @viyatb-oai
- #17396 update cloud requirements parse failure msg @alexsong-oai
- #17364 [mcp] Support MCP Apps part 3 - Add mcp tool call support. @mzeng-openai
- #17424 Stabilize marketplace add local source test @ningyi-oai
- #17414 Fix thread/list cwd filtering for Windows verbatim paths @etraut-openai
- #10431 feat(devcontainer): add separate secure customer profile @viyatb-oai
- #17314 Pass turn id with feedback uploads @ningyi-oai
- #17336 fix(tui): recall accepted slash commands locally @fcoury-oai
- #17430 Handle closed TUI input stream as shutdown @etraut-openai
- #17385 Add use_agent_identity feature flag @adrian-openai
- #17483 Update issue labeler agent labels @etraut-openai
- #17493 fix @aibrahim-oai
- #17419 Support prolite plan type @etraut-openai
- #17416 Clear /ps after /stop @etraut-openai
- #17415 Restore codex-tui resume hint on exit @etraut-openai
- #17402 chore: refactor name and namespace to single type @sayan-oai
- #17486 changing decision semantics after guardian timeout @won-openai
- #17521 Clarify guardian timeout guidance @won-openai
- #17547 [codex] Support bubblewrap in secure Docker devcontainer @viyatb-oai
- #17519 Budget realtime current thread context @aibrahim-oai
- #17556 [codex] Support flattened deferred MCP tool calls @fc-oai
- #17558 build(pnpm): require reviewed dependency build scripts @mcgrew-oai
- #17559 fix(sandboxing): reject WSL1 bubblewrap sandboxing @viyatb-oai
- #17520 Mirror user text into realtime @aibrahim-oai
- #17550 feat(tui): add reverse history search to composer @fcoury-oai
- #17420 Remove context status-line meter @etraut-openai
- #17506 Expose instruction sources (AGENTS.md) via app server @etraut-openai
- #17566 fix(mcp) pause timer for elicitations @dylan-hurd-oai
- #17406 Add MCP tool wall time to model output @pakrym-oai
- #17294 Run exec-server fs operations through sandbox helper @starr-openai
- #17605 Stabilize exec-server process tests @etraut-openai
- #17221 feat: ignore keyring on 0.0.0 @jif-oai
- #17216 Build remote exec env from exec-server policy @jif-oai
- #17633 nit: change consolidation model @jif-oai
- #17640 fix: stability exec server @jif-oai
- #17643 fix: dedup compact @jif-oai
- #17247 Make forked agent spawns keep parent model config @friel-openai
- #17470 Fix custom tool output cleanup on stream failure @etraut-openai
- #17417 Emit plan-mode prompt notifications for questionnaires @etraut-openai
- #17481 Wrap status reset timestamps in narrow layouts @etraut-openai
- #17601 Suppress duplicate compaction and terminal wait events @etraut-openai
- #17657 Fix TUI compaction item replay @etraut-openai
- #17595 Do not fail thread start when trust persistence fails @etraut-openai
- #17407 Use AbsolutePathBuf in skill loading and codex_home @pakrym-oai
- #17626 feat: disable memory endpoint @jif-oai
- #17365 Include legacy deny paths in elevated Windows sandbox setup @iceweasel-oai
- #17638 feat: Avoid reloading curated marketplaces for tool-suggest discovera… @jif-oai
- #17398 app-server: Only unload threads which were unused for some time @euroelessar
- #17669 only specify remote ports when the rule needs them @iceweasel-oai
- #17691 Fix tui compilation @davidhao3300
- #17384 Update phase 2 memory model to gpt-5.4 @kliu128
- #17395 Remove unnecessary tests @kliu128
- #17685 Cap realtime mirrored user turns @aibrahim-oai
- #17699 change realtime tool description @aibrahim-oai
- #17667 Add `supports_parallel_tool_calls` flag to included mcps @josiah-openai
- #17703 Add turn item injection API @pakrym-oai
- #17671 Stabilize exec-server filesystem tests in CI @starr-openai
- #17557 guardian timeout fix pr 3 - ux touch for timeouts @won-openai
- #17719 [codex] Add symlink flag to fs metadata @pakrym-oai
- #17146 [codex] Remove unused Rust helpers @pakrym-oai
- #17471 fix: pin inputs @viyatb-oai
- #17717 [codex] Refactor marketplace add into shared core flow @xli-oai
- #17747 Refactor plugin loading to async @pakrym-oai
- #17709 [codex] Initialize ICU data for code mode V8 @pakrym-oai
- #17749 [codex] drain mailbox only at request boundaries @tibo-openai
- #16640 [codex-analytics] feature plumbing and emittance @rhan-oai
- #17761 Tighten realtime handoff finalization @aibrahim-oai
- #17701 Add realtime output modality and transcript events @aibrahim-oai
- #17777 nit: feature flag @jif-oai
- #17637 feat: add context percent to status line @jif-oai
- #17665 Always enable original image detail on supported models @fjord-oai
- #17374 [codex-analytics] add session source to client metadata @marksteinbrick-oai
- #17489 Moving updated-at timestamps to unique millisecond times @ddr-oai
- #17784 feat: codex sampler @jif-oai
- #17732 fix: Revert danger-full-access denylist-only mode @viyatb-oai
- #17234 Redirect debug client output to a file @rasmusrygaard
- #17803 Keep image_detail_original as a removed feature flag @fjord-oai
- #17372 app-server: prepare to run initialized rpcs concurrently @euroelessar
- #17704 Refactor Bazel CI job setup @bolinfest
- #17674 Route apply_patch through the environment filesystem @starr-openai
- #17702 Fix remote skill popup loading @starr-openai
- #17830 [codex] Fix app-server initialized request analytics build @etraut-openai
- #17389 [codex-analytics] enable general analytics by default @rhan-oai
- #17659 thread store interface @wiltzius-openai
- #17792 Spread AbsolutePathBuf @pakrym-oai
- #17808 fix: apply patch bin refresh @jif-oai
- #17838 Add realtime wire trace logs @aibrahim-oai
- #17684 Adjust default tool search result caps @malone-oai
- #17705 Add Bazel verify-release-build job @bolinfest
- #17720 Make skill loading filesystem-aware @pakrym-oai
- #17756 [codex] Support local marketplace sources @xli-oai
- #17846 Fix for Guardian CI Tests stack overflow, applying Box to reduce stack pressure @won-openai
- #17855 support plugins in external agent config migration @alexsong-oai
- #17872 Disable hooks in guardian review sessions @abhinav-oai
- #17868 Wrap delegated input text @guinness-oai
- #17884 Fix clippy warnings in external agent config migration @canvrno-oai
- #17837 Reuse remote exec-server in core tests @starr-openai
- #17859 sandbox: remove dead seatbelt helper and update tests @bolinfest
- #17870 fix: cleanup the contract of the general-purpose exec() function @bolinfest
- #17871 fix: add websocket capability token hash support @viyatb-oai
- #17763 Send sandbox state through MCP tool metadata @aaronl-openai
- #17654 Support Unix socket allowlists in macOS sandbox @aaronl-openai
- #17915 fix: cargo deny @jif-oai
- #17913 feat: add endpoint to delete memories @jif-oai
- #17844 feat: cleaning of memories extension @jif-oai
- #17921 chore: exp flag @jif-oai
- #17917 [codex] Fix current main CI blockers @sayan-oai
- #17919 chore: do not disable memories for past rollouts on reset @jif-oai
- #17924 nit: stable test @jif-oai
- #17632 feat: memories menu @jif-oai
- #17404 register all mcp tools with namespace @sayan-oai
- #17941 nit: doc @jif-oai
- #17938 feat: sanitize rollouts before phase 1 @jif-oai
- #17937 feat: reset memories button @jif-oai
- #17883 Remove exec-server fs sandbox request preflight @pakrym-oai
- #17386 Register agent identities behind use_agent_identity @adrian-openai
- #17907 Fix fs/readDirectory to skip broken symlinks @willwang-openai
- #17960 chore(features) codex dependencies feat @dylan-hurd-oai
- #17965 fix: rename is_azure_responses_wire_base_url to is_azure_responses_provider @bolinfest
- #17946 Fix empty tool descriptions @shijie-oai
- #17824 [codex] Add local thread store listing @wiltzius-openai
- #17942 Add CLI update announcement @shijie-oai
- #17866 Refactor auth providers to mutate request headers @pakrym-oai
- #17902 app-server: track remote-control seq IDs per stream @euroelessar
- #17957 mcp: remove codex/sandbox-state custom request support @bolinfest
- #17953 fix: propagate log db @jif-oai
- #17920 chore(tui) cleanup @dylan-hurd-oai
- #17981 chore: tmp disable @jif-oai