Skip to content

feat: 支持按群排除入群和新话题自动开工 - #1562

Open
MarcWebber wants to merge 2 commits into
deepcoldy:masterfrom
MarcWebber:feat/auto-start-excluded-chats
Open

MarcWebber wants to merge 2 commits into
deepcoldy:masterfrom
MarcWebber:feat/auto-start-excluded-chats

Conversation

@MarcWebber

@MarcWebber MarcWebber commented Sep 24, 2026 •

Copy link
Copy Markdown
Contributor

开启入群/话题群自动开工后,目前无法针对某个群关闭这两种自动触发。本 PR 增加每个 Bot 的 autoStartExcludedChats,在 Dashboard「主动开工」下点击「排除群」,每行填写一个 oc_ 群 ID,保存即生效;清空并保存可取消排除。

按群 chatId 精确匹配,跳过入群开工(包括本次开工的 seed 消息)和用户/其他机器人发起的新话题自动开工。手动 @ 和明确领取任务的 forcePrompt 路径仍保留。该配置只控制上述自动开工,不是群消息总静音;独立的消息监听、群聊 @ 策略、拉管理员和入群命令保持各自语义。

复用现有配置读写和前端样式,补充回归测试、可复现的本地组件集成页和浏览器截图。API 校验群 ID、去空白、去重,配置支持持久化、内存同步与页面回显。

验证:

  • 6 个相关测试文件 764 项通过,另新增的排除群内手动 @ 回归测试 1 项通过。
  • 覆盖入群不发 seed/不起 worker、人和 bot 新话题排除、其他群正常、配置持久化/清空、API 校验及编辑器交互。
  • tsc --noEmit、Dashboard bundle、git diff --check 通过。
  • 已补浏览器交互与截图验收:收起、保存、刷新回显、错误输入、清空、390px 窄屏,共 6 张截图;使用真实组件、CSS 和 IPC 配置接口,测试配置完全隔离。尚未部署远端。
  • 截图发现并修复保存按钮翻译键遗漏;错误提示中文化,并放在排除群保存按钮旁。本轮相关测试 316 项通过,新增提示断言后组件测试 7 项通过;类型检查和打包通过。

截图验收记录与复现步骤

这是本地组件集成页验收,不是远端完整 Dashboard 或像素差异自动回归测试。

桌面保存:

排除群保存截图

错误输入:

群 ID 校验提示

窄屏:

390px 窄屏

@deepcoldy

Copy link
Copy Markdown
Owner

你好 @MarcWebber,这是 PR #1562 的自动评审群(Claude + pi 双评审):https://applink.larkoffice.com/client/chat/chatter/add_by_link?link_token=025h0923-e56a-4479-83d1-82366e708184\n\n说明:已在名单但自动邀请失败(飞书提示对评审机器人应用不可见,错误 232024),暂时没法自动把你拉进群,请点上面的一年期链接自行入群;也欢迎在作者名单(https://bytedance.larkoffice.com/wiki/WJ1nwWbtxi89erkNGNbcgkt9nUe)里认领/补录你的 GitHub 账号与飞书账号,之后的 PR 就能自动拉你入群。\n\n评审进行中,初步意见是自动评审产出、最终以维护者审阅为准,谢谢!

@deepcoldy

Copy link
Copy Markdown
Owner

你好,感谢这个 PR!功能边界清晰、测试也比较扎实。以下是自动评审的初步意见,最终以维护者审阅为准:

合前需修(1 项)

新「排除群」保存按钮使用了 tr('common.save'),但 src/dashboard/web/i18n.ts 的 zh / en 两份词典里都没有 common.save 这个 key。test/dashboard-i18n.test.ts 有一条「Dashboard 用到的每个 tr() key 都必须有翻译」的守卫会因此失败(当前 CI 的 test、bun-test 腿同因报红);即便不看 CI,线上按钮文案也会直接显示字面量 common.save 而不是「保存」。

修法两行,分别加在 zh、en 表 'common.none' 旁边即可:

// zh 表
'common.save': '保存',
// en 表
'common.save': 'Save',

本地验证:补上后 test/dashboard-i18n.test.ts 5/5 通过。

可选优化(不阻断,供参考)

  1. 排除判定目前在 handleBotAdded(daemon.ts)和 event-dispatcher 的人 / bot 两个新话题分支共三处内联(!cfg.autoStartExcludedChats?.includes(chatId)),以后再增加自动开工入口容易漏挂。可以考虑在 src/core/auto-start.ts(与 shouldAutoStartOnNewTopic 同处)收一个 isAutoStartExcluded(cfg, chatId) 复用。
  2. Dashboard 写入路径有 trim / 去重 / 格式校验,但 parseBotConfigsFromText 读手改 bots.json 时只过滤非字符串,不做 trim / 去重;手填带空格或重复的 ID 会静默永不匹配。如需对齐,可在读入侧复用同一套归一化。
  3. 入群排除闸位于 addProjectWorkerIfNeeded(...) 之后——被排除的群仍会登记为项目协作 worker,只是不建会话、不发 seed。这与「手动 @ 仍响应」的取向一致,看起来是合理的;只是 PR 描述里「闸门最前面」的措辞与实际位置略有出入,方便的话在描述或代码注释里点明这一意图即可。

评审方验证情况(在 rebase 到最新 master 的树上)

  • tsc --noEmit / build 通过;PR 新增的 6 个用例做过变异验证(回退实现即变红),测试都有牙齿;
  • PR 触及的 5 个测试文件 733 通过 / 1 skip;dashboard 全量 114 个测试文件 2218 通过,唯一红灯就是上面的 i18n;
  • rebase 到最新主干仅 1 处测试文件的并列新增冲突(与近期合入的 CoT 开关用例并列),无源码语义冲突。

修掉 P1 后即可进入维护者确认流程。再次感谢贡献!

@deepcoldy

Copy link
Copy Markdown
Owner

你好 @MarcWebber ,这是 botmux 自动评审流程:PR #1562 的评审群已建好(你在作者名单里,但自动拉群受飞书应用可见性限制没能直接把你加进群),请点击下面的一年有效链接自行加入,复审的增量讨论都在群里同步:

https://applink.larkoffice.com/client/chat/chatter/add_by_link?link_token=d03ra31f-907b4242-af83-26423973e71e

也可以在作者名单文档里补全/更新你的飞书信息,后续评审会自动拉你进群:https://bytedance.larkoffice.com/wiki/WJ1nwWbtxi89erkNGNbcgkt9nUe

(本条为自动流程消息,最终结论以维护者审阅为准。)

@deepcoldy

Copy link
Copy Markdown
Owner

更正:上一条里的加群链接我贴错了一段,请以这条为准(一年有效):

https://applink.larkoffice.com/client/chat/chatter/add_by_link?link_token=d03ra31f-907b-4242-af83-26423973e71e

@MarcWebber
MarcWebber force-pushed the feat/auto-start-excluded-chats branch from 5bf00fa to d4367c6 Compare September 26, 2026 08:40
@MarcWebber

Copy link
Copy Markdown
Contributor Author

已 rebase 到最新 master 32a0e98e,当前提交 d4367c6f,GitHub 已确认无合并冲突。

保留主干 CoT 配置回归和本 PR 的群排除回归;此前评审指出的 common.save 已改为现有 botDefaults.save,并补有文案断言、6 张浏览器截图和复现入口。

本地验证:7 个相关测试文件 794 项通过(含 dashboard-i18n),tsc --noEmit、Dashboard bundle 和 diff 检查通过。

新一轮 CI 已启动。请基于当前提交继续复审,CI 通过后烦请维护者确认是否可合入。谢谢!

This branch has not been deployed

No deployments
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