feat(channel): owner 车道结构化参与闸与可调旋钮(乙 = C)
主人 2026-10-13 裁决「乙 C」= 默认按甲(群里不对她说就不开口)+ 可调旋钮。 - inbound.go: owner 不再无条件短路参与闸(去掉 `!actor.IsOwner()` 门), 主人群消息改走 shouldRespond 的 owner 车道分支;主人私聊恒回。 - ownerlane.go(新): owner 车道结构化闸 + 判据 `msg.AddressedToMe || (msg.SelfID == "" && len(msg.Mentions) > 0)` (未接线渠道退回旧判据,保护 kook/webhook 的群 @);指向她本人必回(硬保留); 非指向消息按每群旋钮——默认只进上下文不回(registerSilenced 落隔离会话)。 「少说点」类关键词落成结构化降频配置,带 source 日志。 - channelbridge.go: Options.OwnerLaneFor/OwnerLaneSet 读写接缝 + Bridge 状态。 - engage.go: 冷避词表并入「少说点」(与既有「少说两句」同义)。 - runtimeconfig/channels_ownerlane.go(新): owner_lane.json 落盘面 (默认档 + 每群覆盖,可读可改,面板可写)。 - wire_channels.go: 注入 owner_lane.json 存储($DATA_DIR/config/)。 - 测试:不对她说就不回(进上下文零回复)/ @她必回(即使降频)/ 未接线退回 旧判据 / 降频生效且可恢复 + 频率闸 / 旋钮读写接缝 / 归属不变量闭合 / 陌生人私聊与主人私聊回归。变异自证:恢复 owner 短路 ⇒ 5 条用例红。
This commit is contained in:
1 parent
3f266c26b2
commit
537a8b7988
11 files changed
+917
-21
No files matched your search
@@ -192,22 +192,23 @@ func (b *Bridge) processFrom(ctx context.Context, msg adapter.UnifiedMessage, a
|
||||
"session", sess.SessionID, "actor_role", sess.ActorRole,
|
||||
"env", sess.Env(), "mem_writable", sess.MemWritable)
|
||||
|
||||
// design/12 §6 策略一/二:面向非主人消息的最小打扰闸门。
|
||||
// 被廉价轻量判定认为不值得回复的非主人**群聊**消息,只登记到
|
||||
// 其隔离会话日志并静默——绝不驱动完整 agent 循环;**陌生人私聊**则
|
||||
// 一律走完整回合(裁决①,见 shouldRespond),只受流控约束。
|
||||
// 主人消息绝不在此被拦,因此主人私聊与主人在群里的
|
||||
// @/高价值回复不受影响。
|
||||
// design/12 §6 策略一/二 + design/18 §11「乙 = C」(主人 2026-10-13 裁决):
|
||||
// owner 车道不再**无条件短路**这道闸 —— 主人群消息也按结构化判据决定说不说。
|
||||
// - 主人**私聊/非群**:恒回,不受影响;
|
||||
// - 主人**群聊**:只有指向她本人的(@她 / @全体 / 未接线渠道旧判据)才必回,
|
||||
// 其余**仍进上下文但不触发回复**(落进该群隔离会话,见 ownerlane.go);
|
||||
// - 非主人:走既有的最小打扰分级(shouldRespond)。
|
||||
// 被拦下的消息只登记到其隔离会话日志并静默——绝不驱动完整 agent 循环。
|
||||
//
|
||||
// 由「传入前审查」放行的系统通知(notice.Applicable)不在此列:它们已由策略一
|
||||
// 的归一化/分类**终局判定**(高价值升级真会话、其余限定注入),若再走这道面向
|
||||
// 聊天消息的闸门,actor=system 会在 isLowValueEvent 处被第二次静默掉。
|
||||
if !actor.IsOwner() && !notice.Applicable {
|
||||
if !notice.Applicable {
|
||||
if ok, reason := b.shouldRespond(ctx, msg, actor, sess, a); !ok {
|
||||
b.registerSilenced(ctx, msg, actor, sess, a)
|
||||
b.log.Debug("non-owner message silenced (minimal disturbance)",
|
||||
b.log.Debug("inbound message silenced (minimal disturbance)",
|
||||
"platform", msg.Platform, "channel", msg.ChannelID,
|
||||
"session", sess.SessionID, "reason", reason)
|
||||
"session", sess.SessionID, "actor_role", actor.Role, "reason", reason)
|
||||
return
|
||||
}
|
||||
}
|
||||
|
||||
Reference in new issue
Block a user