Repository navigation
Releases: lecheng2018/dsh-qq-hub
Release list
Release v1.3.0
本版是底层重构版:记忆从「到处补过滤」改成「结构上不可能越权」,并补齐抖音视频回发与内容解析的健壮性。升级前请先看第一条。
-
重要:插件命名空间从
aurabot迁移到qq-hub:面板 id、模块 id、路由前缀全部改为qq-hub,可与原版dsh-aurabot-qq同时安装、互不覆盖。代价是旧的security-lock密钥与 TOTP 绑定会失效,需要在面板重新绑定一次动态口令。 -
重构:记忆隔离从「逐处补过滤」改为「结构上不可能越权」:
- 删除全量索引
index(),改为indexFor(chat)/indexAll(),索引按作用域构建;scopeVisible、topicScore、relatedTo、buildProfile、memoryScore全链路透传作用域,越权默认拒绝;BM25 的 IDF 加 0.6 下限,避免小样本把无关记忆顶上来。 - 修掉残留的泄漏通道:
addEvent()忘带 scope、recentEvents不过滤、String(scope || 'global')静默降级、topicScore用全量索引抬升群聊插话相关度、relatedTo用全量load().items、buildProfile混入 global、memory-privacy的isVisible/scopeOf兜底成private:unknown。 - 作用域默认值反转:
addEvent()默认落private:<主人QQ>,只有显式scope: 'global'才公开;scopeFromChatId不再默默返回global。 - 群聊上下文不再注入任何「经历」类内容;
buildProfile不再把 global 档案混进来。 - 老数据迁移脚本
scripts/fix-memory-scope.mjs改为「兜底落主人私聊」(原先保持 global):先体检,确认无误再加--write。
- 删除全量索引
-
修:迁移脚本找错了数据目录,命名空间迁移后会「找不到记忆文件」:
scripts/fix-memory-scope.mjs之前把数据目录硬编码成plugins-data/aurabot,而运行时store.js在命名空间迁移后优先读plugins-data/dsh-qq-hub——照着文档跑迁移会直接报「找不到记忆文件」,等于迁移没跑,群聊照样能搜到老记忆。现在脚本的解析顺序与store.js完全一致(DSH_QQ_HUB_DATA_DIR/AURABOT_DATA_DIR→ 新目录 → 老目录兜底),并补了 5 条回归测试守住这条一致性。 -
新增:
/new清掉当前聊天的记忆,与/reset(只重开对话)分工。 -
新增:分享抖音视频时把视频本身发过来,不再只丢一条链接。
normalizeAweme提取videoUrls/images;新增src/douyin/media.js(带 referer 与 UA 下载、先查content-length、.part改名落位、多域名重试);发送失败才回落到文字 + 链接。 -
内容解析(
multi-parser)一批修复:- 视频先下载再发,不再把直链丢给网关;下载上限对齐发文件上限(
maxVideoMB),超限立刻说明原因,不装作能发。 - 新增
looksBlocked()与vetResult():反爬验证页(如贴吧「百度安全验证」)与空壳结果一律丢弃,不再当内容发出去;并统一补齐字段,下游不必到处判undefined。 - 抖音用
workId拼干净短链https://www.iesdouyin.com/share/video/<id>/;formatCardText加长链清洗与withLink开关——媒体真正发出去后卡片不再挂链接。 shouldShowSummary():标题和摘要一致时不再重复打一遍。- 视频类结果一律不注入 AI 上下文(修掉
type由images.length决定导致图集绕过的问题)——她看不到画面,喂标题只会让她瞎猜。 - 新增
muteAi「纯解析:解析后不让她接话」开关(默认关)。 - 文件名过滤
#、%。
- 视频先下载再发,不再把直链丢给网关;下载上限对齐发文件上限(
-
修:面板导出引用旧名导致整个插件加载失败:
client/client.js的exports.QQHubPage误写成AurabotPage,已改正;package.json、src/host.js、client.js三处 id 对齐为qq-hub。 -
测试:新增记忆作用域、老数据迁移、内容解析与抖音媒体等回归用例;另有
test/scope-migration-script.test.js专项守住迁移脚本与运行时数据目录的一致性。 -
迁移脚本不在安装包内:
scripts/fix-memory-scope.mjs是一次性运维工具,不进 npm 包;需要迁移老数据时请在仓库里执行(见下方说明)。 -
偷表情新增三种模式 +
qq_collect_sticker工具:面板「表情包 → 怎么偷」可选「全都偷」(默认,保持原行为)、「她挑」(先把表情记下来并给她一句轻提示,她喜欢才凭编号收)、「只听主人的」(只有主人私聊 / 这一轮只有主人说话时才提示并允许她收;有别人在场就要主人发话)。后两种模式下表情按会话暂存、30 分钟内有效、重启不丢;她可以用新工具qq_collect_sticker按编号收(也能收自己刚画的图),并顺手收藏到 QQ。新增 11 条回归测试。 -
桌宠行为系统(#115,感谢 @RookieApe-tao):给她加一层「小动作」——AI 定时从 9 个固定动作里挑一个交给客户端确定性执行(追鼠标、溜达、打盹、拖拽/收起桌面图标等;关窗口默认关且是物理闸),动作表硬编码、AI 只能挑不能发明;图标动作默认开、收起的图标会在面板一键归还/超期自动归还(默认 7 天)。「行为大脑」默认关(主人在审查时要求先保守),面板「桌宠」页打开后才会自己动。新增 4 个测试文件。
-
桌宠默认素材包自动下载(#116,感谢 @RookieApe-tao):「大肥鱼」形象包(50MB+,106 个 .webm,CC BY-NC-SA 4.0)不进插件仓库,缺失时从素材仓库
dsh-aurabot-qq-mods的pet-pack/自动下载落位(先校验后落位,失败只记日志、不污染已有素材,面板可换镜像/手动重下)。素材仓库已经建好并放好 default 包。 -
能看到引用的消息了(私聊 + 群聊):以前只记了「引用的是哪条」,从没取正文,所以别人引用一条消息时她只看到当前这句话、经常答非所问。现在收到带引用的消息会用
get_msg取回被引用的内容——谁说的、正文(截 300 字)、几张图/表情/语音,私聊拼进正文、群聊接在那条消息后面;引用的是她自己以前的话会标成「你」。引用里的图片和表情包也会作为附件交给她看(最多 2 张,总数不超过 4);get_msg只回了空地址时(她发出的表情常见)会再用消息历史把图片地址补回来。取不到时她会明确知道「这条引用没读到」,可以如实说没看到,不会装看见。查询结果按消息 ID 缓存,不会重复请求网关;新增 6 条 e2e 回归。 -
主人私聊里的「群聊摘要」(默认关):主人在私聊里问起群里的事时,把最近 24 小时的群聊流水当成她自己的见闻补进这一轮上下文——只取白名单群(不选 = 全部白名单群)、每个群可调条数(最多 30 条),不常驻上下文、不写进记忆。只在「主人私聊 + 这句话提到群相关」时触发;群聊和非主人私聊不补。面板「聊天 → 主人私聊:群聊摘要」可开关、调条数、限定群;默认关,开启前先把群加进白名单。新增 3 条测试。
-
修(桌宠):Electron 无 npm 环境也能装(#106,感谢 @RookieApe-tao):DSH 自带运行时只带 pnpm、不带
npm-cli.js,面板「安装 Electron」原来会直接报错。现在没有 npm 时自动改走 npmmirror 直下 Electron 官方 zip + Node 自带 zlib 纯 JS 解压(零 npm/零 shell/零外部依赖,带 zip-slip 防护与符号链接跳过);有 npm 的机器行为完全不变。另补了 USER-MANUAL「桌宠:把大肥鱼请到桌面上(小白跟做版)」章节。新增 6 条测试。 -
语音条可以用翻唱里的音色模型了:面板「语音」页新增「语音条变声(用翻唱音色)」卡片——先 TTS 念,再用「翻唱」页导入的 RVC
.pth音色变声,让说话和唱歌是同一个声音;带 index 的音色会标出来,可选变调(男声模型转女声一般 +12);翻唱环境没装好 / 没导入音色 / 变声失败都会自动回退 TTS 原声,不影响语音条发送。翻唱环境需要先在面板「翻唱」页一键安装。新增 5 条组合测试。 -
默认人格:去掉带框的写法(有人反馈她说话带框):默认人格
personas/dafeiyu.md不再用中文角括号「」把词句框起来,改成顿号、逗号等普通标点(比如 嗯、哦、?、在,或者 emmm、哈哈哈、啊啊啊 这类直接写),示例句照常可读;没有额外加约束语句。注意:人格是首次启动时从插件拷贝到数据目录的,已有用户自己改过的人格不会被覆盖——这份默认改动只影响新安装或重置人格后的用户。 -
修(小黑盒,#99,感谢 @Chsw-CC 跟进):
_rnd签名盐值补上结尾的H(原来所有写接口签名都算错)、每个请求自动带heybox_id(缺了会被误判成未登录)、定时刷改用独立后台会话(带人格与记忆,结果不发 QQ)、包files补上extensions。 -
实验性:桌宠(#97,感谢 @RookieApe-tao 从 #65 拆分):内置
pet模块——面板可生成 Electron 悬浮窗桌面宠物(置顶/透明/拖拽/甩抛物理/托盘/单实例,动画池轮播 + 右键点播),碎碎念只发桌面气泡、永不发 QQ(需桌宠在线才触发,不会白跑模型);DSH 干活状态联动动画/完工气泡/系统通知;与主动搭话「载体互斥」(选桌宠时不双发、离线可回落 QQ);面板新增「桌宠」页。默认不生成/不启动客户端、不自动下载 Electron:需在面板点「生成客户端」并按文档自装 Electron 后手动启动;MIT 归属见THIRD-PARTY-NOTICES.md。新增 49 条测试。 -
实验性:目的引擎(独立内置模块,默认关)(来自 #94,感谢 @RookieApe-tao 的拆分与移植):把 surfcore 的 purpose-engine(MIT,署名见
THIRD-PARTY-NOTICES.md)移植成purpose模块——攒素材 → 记观察 → 立目标假设(带归属/置信度/风险)→ 挑候选 → 到点才主动私聊主人;节奏保守(默认 2.55 小时一次、每天最多 4 次、23:3008:30 不打扰),重启不补发,投递走原有私聊链路(受总开关/试运行/静默约束)。默认关;开启前建议先关掉「主动搭话」总开关,两套别同时开。面板「主动搭话」页新增目的引擎卡(状态/预览/立即触发/节奏与安静时段)。 -
实验性:刷小黑盒(新模块):用主人的小黑盒账号逛游戏社区——读信息流、帖子正文与热评、热榜、搜帖;点赞、评论;发帖(文章模式,图片走小黑盒图床、行内插在文字中间);删自己发的帖。面板新增「小黑盒」页(填 Cookie / 检查登录 / 逛法 / 额度 / 热榜预览 / 发帖自检提醒 / 逛过什么),权限页新增四项(浏览、点赞、评论、发帖),默认仅主人。
- 签名与请求在
src/heybox/api.js,业务在src/heybox/site.js,模块壳在src/modules/heybox/index.js。 - 踩过并修掉的坑:
link_tag=28(动态)塞 HTML 会把标签原样显示出来,发帖必须用11(文章);分区 id 乱填(比如网上抄的 58144 并不存在)会一直报「错误的帖子类型」,真实可用的是 7214 / 18745 / 806933。 - 限速:帖详情 900ms 起,搜索单独 8 秒;搜索被验证码挡时返回降级提示而不是抛错,主流程不受影响。
- 三种发帖风格(
src/heybox/styles.js):diary大肥鱼日记(第一人称随手记,跟空间日记一个味,120-300 字)、news热搜文(报道新闻体,摆具体数字,200-800 字)、mix肥鱼热搜(日记口吻写热搜,150-500 字,默认)。面板「小黑盒」页可以选默认,单次换风格时给heybox_post传style;认不出来的风格会回落到默认,不会报错。
- 签名与请求在
Full Changelog: v1.2.0...v1.3.0
Release v1.2.0
-
新增:交互式提问卡片与多选作答系统 (
ask_user_question):- 原生接入 DSH
ctx.userQuestions抽象(自适应宿主提供方与无头常驻模式); - 遇到模型调用提问时,格式化为带
A. / B. / C.选项的 QQ 消息卡片发出,保留题目、补充说明与单选/多选标注; - 宽容作答解析引擎:支持单字母(A/b)、字母连写(A,C / ac)、数字编号、选项文本与模糊匹配,未命中项作为 custom 自由作答回填;
- 5 分钟超时兜底与即时确认回执,彻底解决问答弹不出与任务挂死痛点。新增 6 条单元测试。
- 原生接入 DSH
-
新增:通用工具审批流与审批卡 (
approval/request):- 接入 DSH 官方
approval/requestwaterfall 瀑布流,敏感工具调用自动挂起等待主人审批; - 推送带独立编号(#1, #2...)的审批卡至主人私聊,展示工具名、脱敏命令及调用原因;
- 支持回复「通过 #1」「拒绝 2」「放行」等指令批复;
- 深度联动
security-lock权限锁,锁定时强制拦截通过操作并提示主人先发/unlock验 TOTP 动态口令;60 秒超时自动拦截。新增 5 条单元测试。
- 接入 DSH 官方
-
新增:断线消息自动补收与命令防重放 (
backfill):- 维护
upstream-seen.json持久化时间戳,基于心跳与事件间隔(默认 > 2 分钟)自动判定离线断档(合盖睡眠/网关重启); - 连接恢复稳定后,自动通过 OneBot
get_group_msg_history/get_friend_msg_history捞回断线期间错过的消息; - 安全隔离:补收到的斜杠命令、动态码、审批回复一律拦截不执行并私聊提示主人;向模型注入自然补收提示词,防止错把迟到消息当实时消息。新增 5 条单元测试。
- 维护
-
新增:全功能通用定时任务与调度引擎 (
scheduler):- 移植自 dsh-qq 完整调度引擎:支持
once(指定日期时间)、in 30m(相对延时)、daily(每日时刻)、workdays(工作日避开周末)、weekly(每周几几点)、interval及标准 5 段Cron调度; - 主人私聊原生管理指令:
/remind in 30m 喝水、/remind once 2026-11-05 09:30 检查周报、/remind list、/remind del 1、/remind on/off 1; - 面向大模型暴露原生
schedule_reminder工具,AI 可以在对话中主动帮主人定提醒,到点系统自动通过 QQ 发送卡片提醒。新增 5 条单元测试。
- 移植自 dsh-qq 完整调度引擎:支持
-
新增:多平台内容解析器 (
multi-parser,移植自 astrbot_plugin_multi_parser):- 自动识别聊天消息中的多平台链接(B站、微博、小红书、知乎、微信公众号、百度贴吧、番茄小说、GitHub、抖音、小黑盒);
- 提取无水印视频直链、高清原图图集与正文摘要,支持视频直接发送与大视频上传群文件兜底;多图支持按阈值打包为 QQ 合并转发卡片,防止刷屏;
- 大模型上下文注入与专属开关 (
feedToAi):开启后自动将解析内容喂给当前会话,让 AI 能够理解外部链接并自然参与讨论,关闭时作为纯媒体提取工具; - 控制面板「平台」分组新增「内容解析」选项卡,支持可视化策略配置、各平台独立开关与在线链接测试工具。新增 4 条单元测试。
-
新增:DSH 增强五件套内置模块:
security-lock:纯node:crypto实现 RFC 6238 TOTP 手机动态口令,支持/unlock认证与 30 分钟提权存活;token-guardian:基于会话 Token 估算,达阈值自动在空闲期调用 DSH compaction 压缩历史;complete-guard:检测 Agent 回复是否悬挂在连接词或未闭合括号上,识别截断并告警;memory-privacy:private/group/global三作用域隔离,防止群聊套出私聊记忆;slang-learner:自动提取群聊候选词,主人审核后按群注入上下文。
-
全量安全审计与系统稳定性加固:
- 修复
heybox模块hasLogin缺失引发的定时器崩溃 BUG; - 修复
douyin受控浏览器导航与net.js302 重定向跟随引发的内网 SSRF 风险; - 修复
studio.js中ffmpeg提取信息无超时死锁问题(加 15s 超时强杀); - 修复
memory记忆库recall命中统计高频覆写导致的并发数据丢失,解耦为内存防抖回写; - 修复 Windows 下
writeJson原子改名renameSync缺少重试导致的EPERM偶发崩溃; - 补齐 OAuth 报错分支端口释放与翻唱报错临时目录清理;
- 为 OneBot 客户端引入 90s 心跳保活看门狗,防 TCP 半开假死。
- 修复
-
新增:CI/CD 自动打包与 GitHub Release 工作流 (
.github/workflows/release.yml):- main 分支有 push 时自动触发全量测试,验证 0 fail 后自动构建
.tgzDSH 插件包; - 自动从
CHANGELOG.md提取当版更新日志并发布 GitHub Release,附带 tarball 安装包。
- main 分支有 push 时自动触发全量测试,验证 0 fail 后自动构建
Full Changelog: https://github.com/lecheng2018/dsh-qq-hub/commits/v1.2.0