baa-conductor


baa-conductor / bugs / archive
codex@macbookpro  ·  2026-03-31

FIX-BUG-028.md

 1# FIX-BUG-028: Gemini shell final-message 不再回传协议碎片
 2
 3## 执行状态
 4
 5- 已完成(2026-03-31,代码 + 自动化验证已落地)
 6
 7## 关联 Bug
 8
 9BUG-028-gemini-shell-final-message-raw-protocol.md
10
11## 实际修改文件
12
13- `plugins/baa-firefox/final-message.js`
14- `plugins/baa-firefox/final-message.test.cjs`
15- `tests/browser/browser-control-e2e-smoke.test.mjs`
16
17## 实际修改
18
19- Gemini final-message 解析现在会先递归读取嵌套 JSON,但不再把序列化的数组 / 对象容器本身直接当成最终 assistant 文本;这避免了 `"[["conductor-ok-731"]]"`、`"[[[[2,15,2]...]]"` 这类包装或协议碎片被原样上报。
20- 新增更严格的 Gemini 文本过滤:纯协议片段、明显的 opaque ID / hash token、`wrb.fr` / `generic` 一类元数据帧会被排除,不再误判成 `browser.final_message.raw_text`21- 原先“短回复如果出现在 prompt 里就直接判无效”的规则已收紧,只继续拦截长段 prompt echo;因此 `Reply with exactly: conductor-ok-731...` 这类精确回复场景现在会稳定提取出 `conductor-ok-731`22- 新增两层回归测试:
23  - 插件单测覆盖“短 exact-reply token 不再退化成序列化 wrapper”和“嵌套协议碎片不会被当成 final text”
24  - browser smoke 覆盖“同一 Gemini stream 里既有 assistant 文本又有 shell 协议碎片时,最终优先返回可读 assistant 文本”
25
26## 验收标准
27
281. Gemini shell 页通过 conductor API 发送后,`browser.final_message.raw_text` / `/v1/browser/gemini/current.messages[].text` 能返回可读 assistant 文本,而不是协议碎片。
292. 纯数组、时间戳、ID / hash 结构不会再被误判成 Gemini 最终消息。
303. Claude / ChatGPT 既有 final-message 行为不回退。
314. 自动化验证通过:
32   - `node --test /Users/george/code/baa-conductor-bug-028-gemini-final-message/plugins/baa-firefox/final-message.test.cjs`
33   - `node --check /Users/george/code/baa-conductor-bug-028-gemini-final-message/plugins/baa-firefox/final-message.js`
34   - `pnpm -C /Users/george/code/baa-conductor-bug-028-gemini-final-message/apps/conductor-daemon test -- --test-name-pattern "browser.*gemini|Gemini|final_message"`