fix(bridge): tighten final fallback suppression coverage#114
Conversation
|
我的观察是,模型的输出跟botmux send不严格一致的话,这时是不是就会命中兜底,多发一条消息? |
我本地测了一下,确实有这个问题。会导致一些重复的 复述/改写 被发出来。我尝试收紧一些判断,让有明显差异的final再发出来,感觉会好一些。我再改改让Codex跑我历史对话记录量化一下重复率 |
|
这个 follow-up 的目标是让 #103 之后仍被保守 suppress 的 final 多放出来一些(匹配逻辑太粗暴):如果同一轮里 这个pr首版改动的问题是又太宽松。它用 hash/prefix/suffix 判断 send 是否覆盖 final,只要 final 和显式 我测试了我实际使用botmux的历史记录:
新的实现改成更保守的长度阈值判断逻辑:marker 只记录
这个阈值是经验值,当前取舍是优先避免重复刷屏,同时补出一些高置信的有价值 final。后续如果真实使用里发现仍然太保守或太宽松,可以继续调 ratio/delta。用一个比较简单的工程实现让飞书可以接收更多信息提高体验。 Validation:
|
背景 / 现象
这是 #103 的 follow-up。#103 已经修复了“同一 turn 里只要出现过
botmux sendmarker,就可能吞掉 Codex transcript final fallback”的主问题,但第一版 marker 覆盖判断仍然偏宽。如果显式发送的进度消息或部分正文刚好是最终回答的前缀,单纯判断“片段出现在 finalText 中”仍可能把完整 final 误判成已送达。同时,多条无关进度消息的累计长度也不应该被当作 final 已覆盖。
修复
botmux sendmarker 不再保存明文正文片段,改为保存归一化正文的完整 hash、prefix hash、suffix hash 和长度shouldSuppressBridgeEmit()只在以下情况下抑制 transcript fallback:codex-app/ Mira 的 OSC final marker 路径也复用同一个内容感知 gate,不再只按时间窗口抑制回归覆盖
新增/更新测试覆盖:
验证
pnpm test -- test/bridge-fallback-gate.test.ts test/codex-bridge-queue.test.ts:52 tests 通过pnpm build:通过git diff --check:通过影响范围
只收紧 bridge fallback suppression 的覆盖判定:显式 final send 仍会抑制 fallback;仅当同一 turn 的显式 send 看起来只是进度消息、部分前缀或无关中间消息、没有覆盖 transcript final 时,Codex final fallback 会继续发出。旧 marker 仍按原保守逻辑处理。