现象
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 规避——上游实测该项可能让多行输入丢换行。
现象
Codex 会话经常报
submit_unconfirmed(「消息提交自动确认失败 / 输入提交」),且用户确认消息确实没有执行(不是落盘延迟误报)。复现环境:
3.18.14(当时 npm 最新稳定版)0.153.4疑似根因
传统提交链路是「bracketed paste 正文 + 延迟 ~200ms 补一个 Enter」。当 Codex TUI 此刻正弹着任意模态框时,那次 Enter 会被弹窗消费掉,正文留在 composer 未提交 → 表现为
submit_unconfirmed且未执行。已知会抢 Enter 的弹窗至少包括:
Press t to trust关键佐证
用户把该 tmux Codex 会话切到 Dashboard → 设置 → 实验性配置 → Codex 家族 RPC 输入模式(走 app-server JSON-RPC、绕开终端粘贴 + TUI 层)后,问题不再复现。这反向坐实了问题出在传统粘贴链路遇到 TUI 弹窗时 Enter 被吞,而非记录落盘延迟。
相关上游:openai/codex#28167(长输入下粘贴后的 Enter 被当成粘贴内容)。
建议方向(待评估)
备注
暂不要用
tui.disable_paste_burst=true规避——上游实测该项可能让多行输入丢换行。