多客户端审批策略
配置 first-responder、designated、consensus 或 local-only,并理解默认等待。
MultiClientPermissionMediator 为同一 bridge 的审批请求收集投票。多个客户端可以看到同一请求,但如何接受选择由请求创建时捕获的策略决定。
四种策略
| 策略 | 普通选择的规则 |
|---|---|
| first-responder | 首个有效投票决定,默认策略 |
| designated | 只有当前 prompt 的 originatorClientId 可决定 |
| consensus | 请求发出时的 client ID 快照中,足够票数选择同一选项 |
| local-only | 只接受从 loopback 到达的普通选择 |
settings.json 使用 policy.permissionStrategy 和可选 policy.consensusQuorum:
{
"policy": {
"permissionStrategy": "consensus",
"consensusQuorum": 2
}
}capabilities 中 permission_mediation.modes 表示构建支持的策略集合;policy.permission 表示当前正在运行的策略。不能将支持列表当作本次请求的实际策略。
Consensus 的人数与时点
未显式指定 quorum 时,N=max(1,floor(M/2)+1),M 来自请求发出时已登记 client IDs 的快照。两名客户端需要两票一致;三名需要两票,四名需要三票。
新客户端在请求发出后加入,若其 ID 不在快照中,普通投票会以 designated_mismatch 拒绝。先连接与登记参与者,再发起需要共同审查的 prompt。
两人各选不同选项时没有选项达到 quorum。需要投票取消、session cancel 或显式配置的交互超时来结束;默认 permissionResponseTimeoutMs=0,不会自动到期。将 quorum 设为 1 会改变为一票可决定,应明确按需要选择。
请求状态与计时
request 创建时固定 policy、允许选项、originator 和 consensus voter snapshot。后续修改全局策略不会重解释已经发出的请求。
启用正超时后,计时器必须在 request 内同步建立,不把设置延后到可能被会话清理打断的步骤。forgetSession 会清除计时器并把待审批结算为 cancelled/session_closed。
已解决请求保留最近 512 条 FIFO 记录,用于给迟到或重复投票返回 already_resolved;记录被淘汰后返回 unknown_request。这个窗口不是永久审计库。
UI 事件
consensus 的中间票产生 permission_partial_vote;designated、consensus 和 local-only 的拒绝可产生 permission_forbidden。不要在 first-responder 下等待部分票事件。
designated 与 consensus 共同使用 designated_mismatch;local-only 使用 remote_not_allowed。界面应按实际返回展示,不由同名 reason 推断唯一策略。
身份与取消的限制
v1 X-Qwen-Client-Id 是格式受限的自报标识,没有 proof-of-possession。designated 或 consensus 不能单独证明不同 ID 对应不同真实操作者,更不能单独提供租户隔离。
显式 cancelled 走跨策略取消路径:即使 local-only 或 consensus 也不能用该策略禁止取消。它仍需经过路由、session 和 client 检查;不是任意未认证网络请求都可取消。
强身份要求必须由实际部署认证边界承担,具体传输检查见审批路由。