Skip to content

fix(codex): TUI 模态弹窗(额度<10% 切 luna 确认等)吞掉提交 Enter,导致 submit_unconfirmed 且消息未执行 #1281

Closed

Description

@DeepColds

现象

Codex 会话经常报 submit_unconfirmed(「消息提交自动确认失败 / 输入提交」),且用户确认消息确实没有执行(不是落盘延迟误报)。

复现环境:

  • botmux 3.18.14(当时 npm 最新稳定版)
  • codex-cli 0.153.4
  • backend: tmux(传统粘贴提交链路)

疑似根因

传统提交链路是「bracketed paste 正文 + 延迟 ~200ms 补一个 Enter」。当 Codex TUI 此刻正弹着任意模态框时,那次 Enter 会被弹窗消费掉,正文留在 composer 未提交 → 表现为 submit_unconfirmed 且未执行。

已知会抢 Enter 的弹窗至少包括:

  • 目录信任 Press t to trust
  • 版本更新选择框
  • approval / 审批确认
  • 额度 < 10% 时 Codex CLI 弹出的「是否切换到 luna 模型」确认框 ← 本次用户新发现的触发源

关键佐证

用户把该 tmux Codex 会话切到 Dashboard → 设置 → 实验性配置 → Codex 家族 RPC 输入模式(走 app-server JSON-RPC、绕开终端粘贴 + TUI 层)后,问题不再复现。这反向坐实了问题出在传统粘贴链路遇到 TUI 弹窗时 Enter 被吞,而非记录落盘延迟。

相关上游:openai/codex#28167(长输入下粘贴后的 Enter 被当成粘贴内容)。

建议方向(待评估)

  • 传统粘贴链路在补 Enter 前,先探测 composer 是否处于「有待确认模态框」状态;若是则不要盲发 Enter(避免把弹窗当默认项确认掉),改为上报 / 提示人工处理。
  • 或对已知弹窗(trust/update/approval/切模型)做识别与安全回收后再提交。
  • RPC 输入模式目前只对满足条件的 tmux Codex 会话生效;命中沙箱 / readIsolation / 审批门控 / wrapper / startup commands 会自动退回传统粘贴链路,此时问题仍会复现,因此不能只靠 RPC 规避。

备注

暂不要用 tui.disable_paste_burst=true 规避——上游实测该项可能让多行输入丢换行。

Activity

  1. DeepColds commented on Sep 11, 2026

    @DeepColds
    CollaboratorAuthor

    补充「额度 <10% 切 luna 确认框」的上游机制定位与一个进程级规避键:

    机制(codex 0.151.0 二进制 + openai/codex main 源码核实)

    • 触发:codex-rs/tui/src/chatwidget/rate_limits.rs 中 RATE_LIMIT_SWITCH_PROMPT_THRESHOLD = 90.0,主额度用量 ≥90%(剩余 <10%)时把 rate_limit_switch_prompt 置为 Pending 并弹出 selection view,标题 "Approaching rate limits",副标题 "Switch to gpt-5.6-luna for lower credit usage?"。
    • 弹窗三个选项:Switch to gpt-5.6-luna / Keep current model / Keep current model (never show again);构造时未设 initial_selected_idx,首项默认选中,裸 Enter 即触发 UpdateModel + reasoning effort 覆盖为 luna 预设。因此传统粘贴链路补的提交 Enter 不只是「被吞」(submit_unconfirmed),也可能直接确认切换(模型与 effort 静默降级)。

    规避键(上游官方配置,codex-rs/core/config.schema.json 顶层 notice 表;TUI 选 "never show again" 时 core/src/config/edit.rs 持久化的也是它):

    [notice]
    hide_rate_limit_model_nudge = true

    进程级等价形式:-c notice.hide_rate_limit_model_nudge=true。

    修复 PR:#1367(botmux 在普通 TUI 与 --remote viewer 两条 TUI 启动形态上无条件注入该进程级覆盖,并同步 aiden/cjadk wrapper 的参数白名单)。

  2. deepcoldy commented on Oct 25, 2026

    @deepcoldy
    Owner

    已由维护者核对:标题点名的「额度<10% 切 luna」弹窗已由 #1367 进程级关闭(notice.hide_rate_limit_model_nudge),通用模态框识别没做;把握中等

    先关闭这个 issue。如果在最新版本上仍能复现,欢迎随时 reopen 或补充复现步骤。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't working

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions