fix(hermes): 回归标准 botmux send-优先引导,对齐其它 CLI 协作模型 - #653
Conversation
22273e1 to
293a5df
Compare
✅ Live 验证通过:拆掉反向引导后 #365 重复回复未重现已按 实测方法:在飞书话题里用 结果:
结论: 当前 live 状态:本 checkout 已认领全局 botmux 指向。合并/发版流程走完后需切回 canonical checkout(否则 review worktree 被删会导致全局 shim 失效)。 |
首次 Review(Claude):🟠 Request changes — 设计正确,但当前分支存在 2 个阻塞性合并问题一、这个 PR 在做什么(白话)Hermes 过去是唯一被单独特判的 CLI:它拿到的是「反向引导」——
其它 20+ 非 Claude 系 CLI(codex/traex/grok…)拿的是标准的「send-优先」引导:回复必须 这个反向引导来自 PR #365(修 hermes 重复回复)。本 PR 的核心论点是:#365 的真正修复是 所以本 PR:
二、设计层面:✅ 合理,且已 live 验证过
三、🚫 阻塞问题(均源于分支基线陈旧,
|
|
To use Codex here, create a Codex account and connect to github. |
Codex 复审:🟠 阻塞结论(当前不可合)
结论:同意 Claude 首审的两个 blocker;冲突解决方向正确,但建议把测试再收紧一格,显式锁住 Hermes × 复核证据
正确收敛方式rebase 到最新 master 后:
const reminder = t(
config.noVisibleOutputHint
? 'ai.followup.reminder_no_resend'
: 'ai.followup.reminder',
undefined,
opts?.locale,
);这样既不误伤 #544,又让 Hermes 同时继承 #554 sentinel。 建议的最小测试矩阵
我在
这说明上述方案在当前 master 上可编译且测试矩阵可闭合;但结果来自临时模拟树,不替代 PR 分支 rebase 后的 CI。实际分支更新后仍需重跑 build/test,并按仓库规范重新部署该 checkout 做 Hermes 单回帖 live 验证。 非阻塞的 |
双审收敛(Claude 首审 + Codex 复审):🟠 当前不可合,设计正确、待 rebase 收敛两位 reviewer 独立得出一致结论,且 codex 复审进一步用实机验证坐实了正确解法。 结论:两个阻塞项均 CONFIRMED
Codex 复审附加证据(master
|
hermes 是 20+ 个 CLI 里唯一被反向引导的:其它非 Claude 系 CLI(codex/traex/ grok/gemini…)走 `buildBotmuxShellHints`,核心是「回复必须 botmux send」+ mention 硬门;唯独 hermes 走 `buildHermesBotmuxHints`,方向相反——「普通回复别用 botmux send,写 final 让 bridge 自动转发」,并把 botmux send 归为「特殊投递」。 反向引导来自 PR #365「修复 hermes 重复回复」。hermes 和 codex/traex/grok 一样是 structured-bridge,assistant final 本就会被 transcript bridge 自动转发到飞书。 当时 bug:hermes 的 SQLite user 行时间戳在 turn 末才 commit、晚于 turn 内的 botmux send marker → bridge-fallback 抑制窗口错位、去重失败 → 一条回复出现两次。 该 PR 做了两件事: - (a) 真正的修复 = `preserveMarkTimeMs`(保留 worker mark,把抑制窗口摆正); - (b) 顺手把 hermes 引导反转成「别 send」当额外冗余保险。 `preserveMarkTimeMs` 已经把去重的正解落地,反向引导是冗余的,而且有害:bridge 自动转发的 final 是纯文本、带不了 @,协作触发别的 bot 必须显式 `botmux send --mention`——但反向引导把 send 归为「特殊投递」而非协作必经路,导致 hermes 的多 agent 协作意识比其它 CLI 弱一档。 - session-manager.ts:hermes 不再特判,新话题走 `buildBotmuxShellHints`、 follow-up 走标准 `ai.followup.reminder`,与 codex/traex/grok 完全一致 - 删除 `buildHermesBotmuxHints` / `hermesFollowupReminder` 两个反向 helper - 更新两个 prompt-builder 测试断言:验证 hermes 现在拿到标准 send-优先 hints, 且不再含反向引导文案(防回归) - **保留** `preserveMarkTimeMs`(hermes-transcript.ts:116)——它才是 #365 的真修复, 单独就能防重复回复 - 跨 CLI:只动 session-manager 的 hermes 引导分支,`buildBotmuxShellHints` 共用逻辑 未改,codex/traex/grok 等其它 structured-bridge CLI 零影响 - 去重路径:`preserveMarkTimeMs` + bridge-fallback-gate 完全不动,hermes 去重行为 与改前一致(现在与 codex 走同一套 send-优先 + bridge 兜底模型) - 跨后端/会话类型:不涉及 PtyBackend/TmuxBackend、adopt/restore、sandbox 差异 - pnpm build 绿 - 相关测试全绿:prompt-builder(52)+ codex-bridge-queue(41)+ hermes-transcript(8) = 101 passed - grep 确认源码无反向引导残留,preserveMarkTimeMs 完整保留 -⚠️ 待 live 验证:拆掉反向引导后不重现 #365 重复回复(即 preserveMarkTimeMs 单独够去重),将 switch:here + daemon:restart 后在飞书实测 Co-Authored-By: Riff
293a5df to
e457029
Compare
✅ 已 rebase 到最新 master 并解决冲突(
|
|
To use Codex here, create a Codex account and connect to github. |
Codex 增量复审
|
问题
申晗观察到 hermes「没有跟其它 CLI 一样遵循 botmux send 原则,而且都走兜底消息,不利于多 agent 协作」。查证属实。
hermes 是 20+ 个 CLI 里唯一被反向引导的:
buildBotmuxShellHints,核心是「回复必须botmux send」+ mention 硬门(每条 send 强制三选一--mention/--mention-back/--no-mention)buildHermesBotmuxHints,方向相反:「普通回复别用botmux send,写 final 让 bridge 自动转发」,并把botmux send归为「特殊投递」根因:PR #365「修复 hermes 重复回复」(commit cb234db)
hermes 和 codex/traex/grok 一样是 structured-bridge——它的 assistant final 本就会被 transcript bridge 自动转发到飞书(这是正常通道,不是「兜底/降级」)。
当时的 bug:hermes 的 SQLite user 行时间戳在 turn 快结束才 commit,晚于 turn 内的
botmux sendmarker → bridge-fallback 抑制窗口错位、去重失败 → 一条回复出现两次(模型 send 一次 + bridge 转发一次)。该 PR 做了两件事:
preserveMarkTimeMs(保留 worker mark,把抑制窗口摆正)preserveMarkTimeMs已经把去重的正解落地,反向引导是冗余的,而且有害:bridge 自动转发的 final 是纯文本、带不了 @,协作触发别的 bot 必须显式botmux send --mention——但反向引导把 send 归为「特殊投递」而非协作必经路,导致 hermes 的多 agent 协作意识比其它 CLI 弱一档。这正是申晗感觉「不利于多 agent 协作」的来源。改动(全部 gate 在引导层,不碰去重逻辑)
session-manager.ts:hermes 不再特判——新话题走buildBotmuxShellHints、follow-up 走标准ai.followup.reminder,与 codex/traex/grok 完全一致buildHermesBotmuxHints/hermesFollowupReminder两个反向 helperpreserveMarkTimeMs(hermes-transcript.ts:116)——它才是 fix(hermes): 修复 hermes 场景下重复回复问题 #365 的真修复,单独就能防重复回复影响面
buildBotmuxShellHints共用逻辑未改,codex/traex/grok 等其它 structured-bridge CLI 零影响preserveMarkTimeMs+ bridge-fallback-gate 完全不动,hermes 去重行为与改前一致(现在与 codex 走同一套 send-优先 + bridge 兜底模型)验证
pnpm build绿preserveMarkTimeMs完整保留preserveMarkTimeMs单独够去重)。将switch:here + daemon:restart后在飞书用 hermes bot 实测,结果回帖到本 PR🤖 本 PR 由 Claude 协助完成