feat(oncall): 支持群角色优先私聊回复与失败回群 - #1353
MarcWebber wants to merge 5 commits into
Conversation
|
@MarcWebber 你好,这是自动评审的初步意见(最终以维护者审阅为准)。整体设计很扎实:收件人严格取 🔴 F1(建议修改):私聊模式下 CoT 思考气泡仍然公开发到群话题,与功能目的直接冲突。
🟡 非阻断建议:
验证情况:基线已是最新 origin/master(43f228a0), |
复审意见:建议修改(1 阻断 + 5 非阻断),暂不合并独立复核了本 PR 的改动与现有评审评论所列问题,结论一致:F1 阻断成立,需作者修复后复验。 🔴 F1(阻断):私聊模式下 CoT 思考气泡仍公开发群话题 — 确认成立
我写了独立探针(不依赖现有评论):构造群话题会话 + 🟡 非阻断
验证
影响面
球作者修 F1 → 复验,目前未合码。 |
d62db4d to
a0f42ac
Compare
a0f42ac to
2459c07
Compare
2459c07 to
481a0bc
Compare
481a0bc to
2803425
Compare
|
已 rebase 到最新 master 角色元数据冲突已合并:保留主干显式 本地验证:8 个相关测试文件 152 项通过,涵盖私聊投递、CLI send、CoT、角色配置、公开卡片及 i18n; 新一轮 CI 已启动。请基于当前提交继续复审,CI 通过后烦请维护者确认是否可合入。谢谢! |
|
自动评审初步意见(以维护者最终审阅为准):发现 1 个需要修复的时序回归,其余无问题。 现象(稳定复现,非 flake) CI 选择「任务结束后请发起人确认」后,提议人本应收到文本通知「建议已暂存,将在当前任务结束后由原任务发起人确认。」,实际该通知没有发出( 根因
const privateMessageId = await sendPrivateReply(ds.session,
turnId, content, msgType, opts?.uuid);
if (privateMessageId !== undefined) return privateMessageId;这行对每一条回复都会 建议修法(一行判断,功能等价) if (ds && privateReplyEnabled(ds.session)) {
const privateMessageId = await sendPrivateReply(ds.session,
turnId, content, msgType, opts?.uuid);
if (privateMessageId !== undefined) return privateMessageId;
}私聊关闭时与原 master 路径完全一致、零额外跳转;开启时行为不变。本地验证:改为该写法后上述测试 51/51 通过,本 PR 的 5 个测试文件 125/125 全部通过。 其余复核结果(均通过)
修复推送后我们会增量复验,谢谢! |
话题群用于 oncall 时,优先将答案私聊发送给本轮提问人,减少群内打扰;私聊无法投递时,答案自动回到原群话题。配置位于“群 × 机器人角色”,默认关闭,同一机器人在不同群独立生效。
行为与边界
/card show、/cot show均不能绕过。失败降级沿用原回复路径,不恢复公开过程气泡。实现与影响
复用角色 metadata、角色 API、逐轮发送人与机器人身份记录,以及已有 Lark 发送接口。覆盖
botmux send正文、附件、语音和 daemon 回复;不增加私聊续接映射或用户白名单。发送失败后继续走原发送链路及其校验,共用 Lark 传输限制保留。动态卡模式在 daemon 选路及 CLI 发送两处复用私聊开关判断,已有动态卡记录也不能将答案 PATCH 到公开卡片。改动位于公共 CLI/daemon 层,未修改 CLI 适配器或 PTY/Tmux 后端。不同 CLI 共用此投递逻辑;自动化验证覆盖群话题降级、普通私聊/chat-scope 不受影响和既有桥接路径。第三方 CLI/API 自行发送消息不受此开关控制。
已 rebase 到 master
8f0f3e7。总计 20 个文件,+520 / −11,含测试和 1 张约 43 KB 的真实配置截图。验证
bun run build通过;以下 19 个测试文件、964 个用例通过:bun run test test/private-reply.test.ts test/session-reply-thread-anchor.test.ts test/role-resolver.test.ts test/cli-send-dispatch.test.ts test/cli-send-hook-context.test.ts test/cli-send-slash.test.ts test/reply-target-fallback.test.ts test/event-dispatcher.test.ts test/session-group-birth-anchor.test.ts test/bridge-fallback-gate.test.ts test/bridge-final-output-retry.test.ts test/cot-message.test.ts test/cli-send-private-reply.test.ts test/scheduler-silent-execute.test.ts test/turn-reply-card-runtime.test.ts test/cli-send-reply-card.test.ts test/turn-reply-ask.test.ts test/turn-reply-card.test.ts test/daemon-turn-reply-sender-wiring.test.ts新增真实 CLI 入口集成测试,拦截底层 HTTP,覆盖私聊成功、失败回原话题、旧轮次收件人缺失,以及拒绝
--into/--chat-id改写目的地。daemon 回归覆盖无轮次/命令回执、发送失败降级;思考气泡回归覆盖强制显示也不公开输出,同时通过 master 新增的静默定时任务气泡及既有静默任务回归。本轮针对最新 master 的动态卡兼容新增 4 个回归用例:修复前均失败,修复后均通过,覆盖已缓存/已持久化的动态卡,以及私聊成功与失败回群时均不 PATCH 旧公开卡。完整构建与上述 964 个用例通过。当前本地常驻服务使用正式二进制,本轮没有替换运行版本或重新进行真人飞书验收;此前真人验收已覆盖私聊成功、原话题追问、权限控制及默认关闭,失败回群仍由自动化模拟验证。
配置界面
入口:角色管理 → 按群组 → 选择机器人 → 优先私聊回复提问人。下图为手动开启后的实际页面,默认关闭。