Skip to content

fix(lark): 修复话题群多机器人让路#383

Merged
deepcoldy merged 2 commits into
masterfrom
fix/lark-topic-bot-yield
Jul 7, 2026
Merged

fix(lark): 修复话题群多机器人让路#383
deepcoldy merged 2 commits into
masterfrom
fix/lark-topic-bot-yield

Conversation

@DeepColds

Copy link
Copy Markdown
Collaborator

改了什么

  • 修复话题群多机器人协作时,用户在已有 topic 中明确 @ 其中一个机器人,其他机器人仍因 regularGroupMentionMode: topic + owned session 放行而一起响应的问题。
  • mentionsAnotherMember() 补齐 app_id 形态的 bot mention 识别,和 isBotMentioned() 的 app_id 支持保持一致。
  • shared-topic alias fold-back 在 topic / ambient 模式下遇到“@ 其他成员/机器人”时让路,不再折回当前 bot 的 chat session。
  • topic 模式的 owned-thread 免 @ 续话增加“@ 其他成员/机器人则让路”的限制。

为什么

用户通过 npm 安装运行自己的 botmux daemon,在一个话题群中由主机器人分派任务给子机器人后,后续明确 @ 任意一个机器人时,多个机器人都会响应。根因是多个 bot 都可能拥有同一个 thread/alias 的 session,topic 模式把它们都放行了;同时飞书 bot mention 可能以 app_id 形态出现,旧 redirect 判断漏识别。

影响面

  • 影响 Lark im.message.receive_v1 人类消息路径下的群聊/话题群路由。
  • 主要涉及 regularGroupMentionMode: topic 和 shared-topic alias;never 保持无条件响应语义不变。
  • ambient 保持原本“@ 别人让路”的语义,并补齐 app_id mention 形态。
  • 不改 CLI 适配器、PTY/Tmux backend、dashboard UI。

验证

  • pnpm vitest run test/event-dispatcher.test.ts:181 tests passed
  • pnpm build:passed

补充:当前环境跑完整 pnpm test 有 12 个与本次改动无关的既有/环境失败:

  • test/dashboard-create-session.test.ts 的 role-resolver mock 缺 resolveRoleInjection
  • test/recall-frozen-cards.test.ts / test/terminal-url.test.ts 受当前 dashboard tunnel URL 环境影响
  • test/session-discovery.smoke.test.ts 在本机 /proc comm 读到 MainThread 而非 node

@DeepColds DeepColds requested a review from deepcoldy as a code owner July 6, 2026 11:47
该用例(shared follow-up + topic 模式 + @另一个bot 应让路)此前未设 mockGetChatInfo,
默认桩返回 {userCount:1,botCount:1},而 beforeEach 不 reset 它;整套跑时靠继承前序用例
遗留的多bot群状态才通过,单独跑会落回 1对1 免@放行 → bot 反而响应、断言失败。
显式 mock {userCount:3,botCount:2}(即真实的多bot群场景)使其确定性通过,
且在修复前代码上仍会 fail,保持有效回归。
@deepcoldy deepcoldy merged commit 665b2f0 into master Jul 7, 2026
1 check passed
@deepcoldy deepcoldy deleted the fix/lark-topic-bot-yield branch July 7, 2026 16:56
tanjiancheng pushed a commit to tanjiancheng/botmux that referenced this pull request Jul 8, 2026
* fix(lark): 修复话题群多机器人让路

* test(lark): 话题让路用例显式 mock 多bot群,消除测试顺序依赖

该用例(shared follow-up + topic 模式 + @另一个bot 应让路)此前未设 mockGetChatInfo,
默认桩返回 {userCount:1,botCount:1},而 beforeEach 不 reset 它;整套跑时靠继承前序用例
遗留的多bot群状态才通过,单独跑会落回 1对1 免@放行 → bot 反而响应、断言失败。
显式 mock {userCount:3,botCount:2}(即真实的多bot群场景)使其确定性通过,
且在修复前代码上仍会 fail,保持有效回归。

---------

Co-authored-by: 申晗 <shenhan.sh@bytedance.com>
(cherry picked from commit 665b2f0)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants