mirror of
https://gitcode.com/JianFeeeee/homeagent-sdk.git
synced 2026-09-19 16:40:42 +00:00
现场(用户线上,驻留子联调回执原文):
被**子的中断**唤醒的一轮里,父 agent 调用 output_send__qq(meta 带齐 user_id)被拒:
「QQ 权限策略拒绝工具 output_send__qq:可信 QQ 会话身份不完整;请不要改用其他会话 ID 重试」
根因:`sessionToolArgsAllowed` 对**所有**工具都先要求"本轮能精确匹配可信 OneBot 事件"。
`onInputAuthContext` 在来源是 QQ 但匹配不到可信事件时会降权成
`auth = qqAuthContext{active: true}`(无 peer、非 owner)⇒ `currentPeer == 0`
⇒ 连**输出**也一并被拒 ✗。
但输出是 agent 的**主动调用**:发到哪个会话由它自己给的 meta(group_id / user_id)决定,
`handleChannelOutput` 已经强制要求该字段存在(缺了给明确报错)。再要求"当前会话身份"
是多余的门,而且会把合法发送一起挡掉 —— 设计上收到输入后可以往任意(已授权)通道
发任意多次。
改法:`output_send__qq` 在身份判据**之前**直接放行;「只能访问当前会话」这类限制
保留给**读取类**工具(get_history / mark_read / get_message)—— 那才真的不能跨会话读。
判据 `TestDowngradedAuthStillAllowsQQOutput`:
降权态下输出放行、读取类仍被当前会话限制挡住。
扰动验证:去掉放行分支 ⇒ 该判据报出与现场**一字不差**的那句拒绝。
线上实测:CLI 发起的轮次里 output_send__qq 返回 ok,插件日志 handleChannelOutput 确认送达。
18 lines
353 B
JSON
18 lines
353 B
JSON
{
|
|
"name": "qq",
|
|
"name_zh": "QQ消息",
|
|
"name_en": "qq",
|
|
"version": "1.4.1",
|
|
"description": "QQ 消息收发插件,通过 NapCat 协议桥接",
|
|
"author": "HomeAgent",
|
|
"entry": "plugin.so",
|
|
"tags": [
|
|
"qq",
|
|
"messaging"
|
|
],
|
|
"targets": "linux/amd64",
|
|
"outdir": "dist",
|
|
"bundle": false,
|
|
"replaces": {},
|
|
"source_dirs": []
|
|
} |