Repository navigation
Releases: h-D-ACE/dsh-qq
Release list
v1.1.0
qq-bridge-enhanced v1.1.0
在 v1.0.3 基础上的新功能版本:
- 定时任务:按时区到点发消息,或者到点叫 AI 来说。
- 定时静默:按时间段让 AI 停下来省 token。
- 切换 / 修改人格在二代仿真里真正生效:以前要等会话重建,现在下一次唤醒或立即生效。
- 切到 agent 时可以带上私聊长期记忆。
支持系统不变:Windows、macOS、Linux。逐条改动见 CHANGELOG.md。
新功能:定时任务
在桥接控制台「聊天行为 → 定时任务」里设置。说明见 docs/guides/SCHEDULER.md。
时间计算
- 时间由桥接的程序计算和执行,不靠 AI 记着。
- 按任务自己的时区算,出厂默认北京时间,与这台电脑的时区无关。
- 有夏令时的地区按当地墙上时间算。
- 时区下拉列出全部时区,每项带当前的 UTC 偏移,如「Asia/Shanghai(UTC+8,北京时间)」。
重复方式
- 一次性、每天、每周、工作日、每月几号、每月第几个周几、每年、特殊日期。
- 每隔 N 天、每隔 N 分钟。
- 每天随机几次、每月随机几次。
- 高级:cron 表达式。只能在控制台设置,AI 不能用。
- 都可以加开始 / 结束日期、排除日期、跳过法定节假日、共执行几次后停止。
- 表单实时预览接下来 5 次的具体时间。
内容
- 固定文字:桥接直接发。
- 叫 AI 来说:唤醒那个会话自己的 AI,各群的规则和上下文各自生效。
对象与入口
- 发送对象:管理员私聊、白名单好友、白名单群,可多选。
- 管理员也可以在私聊里用
/remind(桥接直接处理,不进模型),或者在二代仿真里直接跟 AI 说,让它用qq_schedule_*登记。
安全
- 总开关和限制只能由你在控制台或管理员命令里改,AI 改不了。
- AI 只能在管理员私聊里登记。默认只能发给管理员私聊;发往群的任务要先打开开关,并且登记后先暂停,等你确认。
- 有任务数、每天条数、每群条数、最小间隔这些上限。
- 「定时任务免打扰」时段:只拦定时任务发往群的消息,不影响 AI 平时被 @ 时回复。
- 新建、修改、删除都写进审计日志。
新功能:定时静默
在「运行总览 → 静默开关」里设置。说明见 docs/guides/SILENCE.md。
时间段
- 可以设多个时间段,每个带开关。
- 哪些天:每天 / 工作日 / 周末 / 自选,可以跳过法定节假日。
- 跨午夜的时间段以开始那天为准。
- 可以选时区。
- 「一键填入 DeepSeek 高峰时段」:北京时间工作日 09:00–12:00、14:00–18:00。
静默期间(默认)
- 停止一切唤醒:以前的手动静默只拦发送,AI 仍被定时唤醒去思考,照样花钱。
- 群消息照样记进未读。
- 静默结束时,给被直接找过的会话补一次唤醒。
- 定时任务里「叫 AI 来说」的暂停(单个任务可以设成照常执行),固定文字照发。
- 管理员私聊默认不受影响,也可以勾选一起静默。
和手动开关的关系
- 手动开关优先。
- 定时静默期间点「恢复正常」,只临时恢复当前这一段,下一段照常。
修复:二代仿真里切换 / 修改人格不生效
原因
- 二代仿真的会话只在建立时读一次完整角色卡。之后每次唤醒只看到一行「当前角色:名字」。
- 所以在控制台切换人格、清除人格、改当前人格的内容之后,正在跑的群和私聊会话一直按旧卡说话,直到会话重建。看起来就像「切换失败」。
现在的做法
- 桥接按「会话 + 角色卡指纹」记下每个会话读到的是哪一版卡(只存指纹,不存内容)。
- 发现某个会话还没读到当前这一版时,下一次唤醒把新卡全文放在提示最前面,并说明旧卡作废。
- 记忆、群规则和会话本身都不动。
控制台选项
「切换当前启用的人格」和「编辑人格提示词 → 保存修改」下方都有生效方式:
- 下次唤醒时重新读卡(默认)。
- 立即:马上给还没读到新卡的会话各唤醒一次。
- 这次唤醒 AI 不会专门发言,也不提换卡。
- 已经读到新卡的会话自动跳过,两处都点也只读一次。
- 定时静默中的会话,等静默结束后再读。
聊天模式 / 一代仿真每条消息都带角色卡,本来就立即生效,不受影响。
改进:切到 agent 时带上私聊长期记忆
- 切到 agent 时,除了最近的私聊往来,还可以把二代仿真里 AI 在管理员私聊记下的话题、想说的话、印象一起交接给 agent。
- 最多 1500 字,逐行脱敏,只取管理员私聊,不含任何群。
- 开关:「二代仿真 → 工具开关 → 切到 agent 时带上私聊长期记忆」,默认开。
下载
| 文件 | 说明 |
|---|---|
qq-bridge-enhanced-v1.1.0.zip |
完整源码(含接口平台)+ 文档 + 测试 + 配置模板。不含 node_modules、SnowLuma、NapCat、QQ、DSH、真实配置或数据 |
qq-bridge-enhanced-v1.1.0.zip.sha256 |
SHA-256 校验值 |
部署见 README.md「部署(无窗口版)」与 docs/DSH_DEPLOYMENT.md。
从 v1.0.3 升级
- 退出控制中心;备份
config.json、state/、interface-platform/state/。 - 解压到新目录,把上面三样复制过去(如果有
audio/、自定义的roles/*.md,也一起复制)。 - 执行
npm ci,再跑npm run test:audit。- macOS:删掉旧的「QQ Bridge 控制中心.app」,然后双击一次
control-center.command。 - Linux:运行
npm run linux-service -- --enable。
- macOS:删掉旧的「QQ Bridge 控制中心.app」,然后双击一次
- 重启一次 DSH:新的
qq_schedule_*工具由 DSH 启动的 MCP 服务注册。preset 没有变化,不需要重跑setup-dsh.mjs。 - 启动控制中心,再启动接口平台和桥接。
- 新的状态文件
state/scheduler.json、state/silence-schedule.json、state/role-seen.json会自动创建。 - 没有旧数据格式变化。
- 新的状态文件
- 升级后第一次唤醒,已有的二代会话会各收到一次当前角色卡,这是正常的。
测试
离线回归
npm run test:audit:63 个离线回归脚本。发布包解压后从零npm ci验证:macOS 与 Linux(Dockernode:22-bookworm)上都是 62/63。没过的test-console-encoding.mjs只在 Windows 上能通过。- 接口平台:macOS 26 项全部通过;Linux 容器里 25 项通过、1 项跳过(「目录读不了」的用例在 root 下无法构造)。
- 新增:
test-scheduler.mjs:时区与夏令时、各种重复方式、cron、限额、免打扰、错过补发、AI 登记的权限。test-silence-schedule.mjs:时间段、跨午夜、节假日、高峰预设、手动优先、静默期间不唤醒、结束补唤醒。test-role-refresh.mjs:指纹与读卡记录、下次唤醒带新卡、立即唤醒只叫没读到的会话、保存与切换接口。
test-mode-handover.mjs新增 ⑥:带上私聊长期记忆。
真实环境(macOS + NapCat + DSH 桌面版 0.2.1-rc.2)
- 定时任务:「每天随机 1 次,09:00~11:00(北京时间)」的任务在北京时间 10:48 触发,同时发往管理员私聊和一个群。
- 群里 AI 发出 1 条。
- 私聊当时正忙,排队到回合结束后补发,也发出 1 条。
- 人格生效:切到新角色卡后,一个群在下一次被提问时读到新卡;另一个群和私聊在点「立即切换」约 8 秒后读到新卡,AI 没有为换卡发言。三个会话记下的是同一版卡。
v1.0.3
qq-bridge-enhanced v1.0.3
在 v1.0.2 的基础上的修复版本:切换 agent 等级不再失忆;引用一条合并转发时,AI 能看到并打开里面的内容,这条消息也不再卡 30 秒;普通图片不再被误当成表情。
支持系统不变:Windows、macOS、Linux。逐条改动见 CHANGELOG.md。
修复:切换 agent 等级 / 自动回落后 AI「失忆」
以前切到 agent L1~L3、或者从 agent 回落,桥接会把所有 QQ 会话归档再新建:私聊里刚聊的事、每个群里的上下文全都没了。现在:
- 群和私聊原来的聊天会话会「休眠」而不是归档,回落后原样接着用,AI 记得之前在聊什么;群会话恢复后会被告知「刚才休眠了多久、这段时间的群消息没收到」。
- agent 会话能接上私聊的话题:切到 agent 时,新会话第一条消息带上你们最近在私聊里的往来;回落后,私聊会话会收到 agent 期间的往来。
交接只含 owner 私聊(路径和凭据打码),不含任何群聊内容;确认码、TOTP、管理命令不会被记下。 - 恢复的会话按正常原因唤醒,不会再收到一遍「首次接入」的引导。
- 安全不变:agent 会话回落、
/panic、L1→L2 时照常停掉并归档。 - 休眠超过 24 小时(
admin.dormantMaxMs)、回到的模式不同、手动重置会话时,旧会话归档、不复用。 - 想要旧行为:
admin.hibernateChatSessions: false、admin.handover: false。觉得回落太勤可以调大admin.idleTimeoutMs/admin.maxElevatedMs。
修复:引用合并转发
- 引用一条合并转发时,AI 只看到「[引用消息]」,整条消息还卡住 30 秒:实测 macOS 上的 NapCat 读一条较早的合并转发要七十多秒,而桥接和接口平台都只等 30 秒。现在:
- 收消息时解析引用最多等 4 秒,等不到先放「[引用消息 id=…(原消息加载较慢…)]」占位,消息照常进未读;原消息在后台继续取(最长 2 分钟),取到后缓存;
- AI 用
qq_get_message_detail查这个 id:还在取时明确说「稍后再查」,取到后返回内容和里面的合并转发 id; - 引用里的合并转发 id 登记为本会话可见(只在确认被引用消息属于本群 / 本私聊之后),AI 能直接用
qq_get_forward_msg打开,哪怕原转发早已滚出最近消息; - 读合并转发改为长超时并缓存 30 分钟,同一个转发只取一次;嵌套转发的预览改为并行读取;
- 接口平台只给
get_msg/get_forward_msg两个只读动作放宽到 120 秒(limits.slowReadTimeoutMs),发送类动作仍按 30 秒。
- 合并转发本身(包括转发里的转发)原来就能看:二代仿真模式下 AI 用
qq_get_forward_msg打开,嵌套的会附前几条预览,也能用嵌套 id 继续打开。
修复:普通图片被误当成表情
- 普通 QQ 图片的文件名本身就是 32 位哈希,以前会被误认成表情:先去拼一个必然 404 的表情地址,日志里也写成「表情获取失败」。现在只有 mface 市场表情、带
emoji_id、sub_type=1或「两位前缀-32 位 hex」文件名的才按表情处理。 - 说明:这只修正了分类和多余的一次请求。这次实测里那张图之所以没取到,是 QQ 那边的问题——转发里的图片链接已经失效(HTTP 400),NapCat 自己下载也失败(
downloadRichMedia超时),桥接这边无法补救。
下载
| 文件 | 说明 |
|---|---|
qq-bridge-enhanced-v1.0.3.zip |
完整源码(含接口平台)+ 文档 + 测试 + 配置模板(不含 node_modules、SnowLuma、NapCat、QQ、DSH、真实配置或数据) |
qq-bridge-enhanced-v1.0.3.zip.sha256 |
SHA-256 校验值 |
部署见 README.md「部署(无窗口版)」与 docs/DSH_DEPLOYMENT.md。
从 v1.0.2 升级
- 退出控制中心;备份
config.json、state/、interface-platform/state/。 - 解压到新目录,把上面三样复制过去(以及
audio/、自定义roles/*.md,如有)。 npm ci→npm run test:audit;macOS 删掉旧的「QQ Bridge 控制中心.app」后双击一次control-center.command;Linux 运行npm run linux-service -- --enable。- 启动控制中心,再启动接口平台和桥接。没有数据格式变化,不需要重跑
setup-dsh.mjs。 - 如果换了程序目录,按部署文档第 13 节「换了程序目录之后」的清单检查一遍(先在控制台重置会话,再删旧目录)。
测试
npm run test:audit:60 个离线回归脚本,macOS 与 Linux 上都是 59/60(test-console-encoding.mjs只在 Windows 上通过);接口平台 26 项全部通过。test-media-search.mjs新增:哈希文件名的普通图片按图片处理、不拼表情 CDN;真表情仍先走 CDN。- 新增
test-mode-handover.mjs:二代 → agent L2 → 回落的端到端(聊天会话休眠复用、交接注入、高权限会话归档)、各种作废情况、确认码不进交接记录。 - 新增
test-quote-forward.mjs:引用合并转发的短等待、后台补齐、转发 id 登记与跨群隔离、读合并转发的缓存与长超时、接口平台的分动作超时、发送引用时「加载中」不算确认归属。 - 真实环境(切换不失忆):macOS + NapCat 4.18.38 + DSH 桌面版上实测:二代仿真 → agent L1 时私聊会话休眠未归档;agent 能答出切换前私聊聊过的内容;
/panic回落后复用原会话(未新建),并知道 agent 期间的请求;交接记录里没有确认码,文件权限 600。群会话:切到 agent 时休眠、回落后被 @ 时原样恢复(未新建、唤醒原因不是首次引导),AI 记得切换前群里交代的事。 - 真实环境(引用合并转发):在 macOS + NapCat 4.18.38 上复现过原问题(读那条被引用的合并转发
get_msg约 76 秒、get_forward_msg约 76 秒);修复后的代码尚未在真实 QQ 群里验证(需要重启桥接和接口平台,并等有人引用合并转发)。
v1.0.2
qq-bridge-enhanced v1.0.2
在 v1.0.1 的基础上的小版本:换 SnowLuma 目录(例如升级到 SnowLuma 2.x)时,新目录缺数据会先提醒迁移,并补充 SnowLuma WebUI 登录相关的常见问题;同时修复 Windows 实机部署 v1.0.1 时发现的问题;控制台可以选择 DSH 的提供方 / 模型 / 思考强度,保存即生效。
支持系统不变:Windows、macOS、Linux。逐条改动见 CHANGELOG.md。
新功能与改进
- 控制台选择 DSH 模型(GitHub issue #1):运行总览「DSH 模型与思考强度」改成提供方、模型、思考强度三个联动下拉,外加「看图能力」。
选项全部来自 DSH 的模型目录,在 DSH 里配好的其它提供方桥接也能用;保存后对已有会话的下一条消息生效,不用重启桥接。默认仍是deepseek-flash+max。- 服务端按目录硬校验:不在目录里的提供方 / 模型、该模型不支持的档位都会拒绝;目录读不到时不保存,页面标注「目录不可用」;
- 档位以模型自己公布的为准,
off(关闭思考)也能选,选它时提示工具调用和回复质量可能变差;没有思考档位的模型强度下拉置灰; - 不能看图的模型自动把图片改成文字:DSH 目录不说明模型能不能看图,所以默认只有核实过的
deepseek-flash收图,其它模型的 QQ 图片、表情改成「[图片1:当前模型 … 不能看图,已省略]」,避免整条消息被拒;确认能看图可以手动设为「能看图」; - 换到第三方提供方时提示隐私:QQ 聊天内容会发给它处理,第一次保存前再确认一次;
- 价格表只覆盖 DeepSeek 自家价目,其它模型标「价格未覆盖」,花费按 Flash 估算并标「估算」;
- 只有控制台能改:QQ 里的 AI 和私聊管理通道都改不了模型。和以前的思考强度一样,切换会同时写入 DSH 的全局默认。
- 换 SnowLuma 目录前提醒迁移数据:在控制中心换到新的 SnowLuma 目录时,如果新目录里既没有账号配置(
config/onebot_<QQ号>.json)也没有 WebUI 密码(config/webui.json),而旧目录有,先不切换,弹出提醒——
直接换过去 SnowLuma 会当成全新安装:生成新的随机 WebUI 密码(浏览器里保存的旧密码失效)、要重新扫码登录、重新开启 OneBot WebSocket,接口平台也找不到原来的账号。- 点「去迁移(推荐)」:打开更新助手并填好新目录;停止 SnowLuma 后点「迁移数据并切换」,旧目录的
config/(含 WebUI 密码)、data/会先备份再复制过去,旧目录原样保留; - 不迁移的话要再确认一次「仍然切换」才会切换;
- 第一次选目录、新旧目录相同、旧目录本来就没有数据、新目录已经迁移过时不提醒。
- 点「去迁移(推荐)」:打开更新助手并填好新目录;停止 SnowLuma 后点「迁移数据并切换」,旧目录的
- 常见问题(部署文档「常见错误」):
- 升级后旧密码登录不了:多半是新目录没带上旧的
config/,或旧版从没改过初始密码(每次启动都会重新生成)——用更新助手迁移,临时密码登录后改成正式密码; - 输对密码也登不进、提示「登录尝试过多」:SnowLuma 同一地址 5 次输错锁 15 分钟,锁定期间正确密码也会被拒;重启 SnowLuma 或等 15 分钟即解除,
localhost与127.0.0.1分开计数; - 改密码提示「新密码不得与旧密码相同」:说明填的「当前密码」就是现在存着的密码,直接用它登录即可。
- 升级后旧密码登录不了:多半是新目录没带上旧的
(核对结论:SnowLuma 1.14.22 与 2.0.3 的 WebUI 密码存储格式、密码规则、读取逻辑完全相同,升级本身不会让密码失效。)
- 黑话研究:未确认的 AI 推测显示在控制台:DSH 研究后没能确认的词,以前只在日志里留一句推测,现在存进词条,
「候选词-待研究」的卡片上显示一行灰色斜体「AI 推测(未确认,时间):……」,重启也不丢。- 点「采用为含义」:把推测填进编辑框里空着的栏位,核对修改后点「保存修改」——词条移到「候选词-已研究」,仍是候选,确认还要你再点;
- 推测不是含义:不算「已研究」、不能凭它确认、不会注入给 AI,也不会出现在 AI 能读到的任何数据里;
- 研究确认、或你填了含义 / 确认之后,推测自动清空;再研究仍未确认时更新为最新一次的推测。
修复(来自 Windows 实机部署 v1.0.1 的反馈)
- Release ZIP 的中文文件名在 Windows 上乱码、解压失败(
roles/小鲸鱼.md、assets/deepseek娘.png等):v1.0.0、v1.0.1 的包是用 macOS 自带的 zip 打的,没有「文件名是 UTF-8」标志。
现在发布脚本自己生成 ZIP,每个文件都带这个标志,.command/.sh保留可执行位;Windows「全部解压」、macOS 双击、Linuxunzip都正常。 - 重置会话后提示「该会话已有一个等待中的 qq_wait_for_messages」:控制台 / 控制中心的「重置会话」、QQ 里的
/reset、二代仿真全量重置都没清等待租约,新会话最长要等 15 分钟。现在重置时一并清掉。 - 黑话研究日志:以前「已更新 N 条」把未确认(实际没写库)的也算进去。现在分别显示「写入 / 解析 / 未确认」条数,未确认的附上 AI 的推测(仍然不写库)。
- 接口平台里默认的 SnowLuma 实例标红(从 v0.4.x 升级后第一次启动平台):控制中心知道 SnowLuma 目录时自动给它补上;用户自己配过令牌的实例不动。
- 两个测试在 Windows 上失败:路径写法改为
fileURLToPath/path.posix,并加回归测试防止再出现。 - 两个测试在 macOS 上失败(
test-audit-bridge、test-voice):macOS 默认临时目录是软链接,语音库路径断言前缀对不上;测试夹具改为先取 realpath(只改测试)。 - 部署文档:第 13 节新增「换了程序目录之后」必做清单;常见错误补充:工作目录不存在、等待租约残留、双击 .vbs 没反应、解压中文文件名乱码。
下载
| 文件 | 说明 |
|---|---|
qq-bridge-enhanced-v1.0.2.zip |
完整源码(含接口平台)+ 文档 + 测试 + 配置模板(不含 node_modules、SnowLuma、NapCat、QQ、DSH、真实配置或数据) |
qq-bridge-enhanced-v1.0.2.zip.sha256 |
SHA-256 校验值 |
部署见 README.md「部署(无窗口版)」与 docs/DSH_DEPLOYMENT.md。
从 v1.0.1 升级
- 退出控制中心;备份
config.json、state/、interface-platform/state/。 - 解压到新目录,把上面三样复制过去(以及
audio/、自定义roles/*.md,如有)。 npm ci→npm run test:audit;macOS 删掉旧的「QQ Bridge 控制中心.app」后双击一次control-center.command;Linux 运行npm run linux-service -- --enable。- 启动控制中心。没有数据格式变化,不需要重跑
setup-dsh.mjs。 - 如果换了程序目录,按部署文档第 13 节「换了程序目录之后」的清单检查一遍(先在控制台重置会话,再删旧目录)。
测试
npm run test:audit:58 个离线回归脚本,macOS 与 Linux 上都是 57/58(test-console-encoding.mjs只在 Windows 上通过);接口平台 26 项全部通过。- 新增
test-dsh-model.mjs:模型目录校验、selectModel 参数、目录缓存、看图判断与图片降级、提示文案,以及桥接接口端到端(写 config.json 并热生效、目录不可用拒绝保存、AI 令牌拒绝)。 - 新增
test-slang-guess.mjs:未确认推测的存储与清空、不进提示词和给 AI 的数据、页面只在「待研究」显示并转义。 - 新增
test-deploy-fixes.mjs:ZIP 的 UTF-8 标志与可执行位、黑话研究日志计数、三个重置入口清等待租约、Linux 服务文件用 POSIX 路径、禁止用URL.pathname当路径;test-platform.mjs新增 ⑧(自动补 SnowLuma 目录)。 test-control-center.mjs新增:迁移提醒的各种情况(提醒 / 不提醒)、接口完整流程(提醒时不切换 → 迁移后 WebUI 密码文件随之带过去 →force仍可直接切换)、页面流程。- 未在真实环境验证:Windows / Linux 上 SnowLuma 2.x 的实际收发;Linux 上的 QQ 登录与收发、systemd 服务实际运行。
v1.0.1
qq-bridge-enhanced v1.0.1
在 v1.0.0 的基础上增加 Linux 支持——现在支持 Windows、macOS、Linux 三个系统;Windows、macOS 原有的行为不变。
同时适配 SnowLuma 2.x、让 DSH 探活更稳,并让 macOS 第一次运行时自动生成无窗口启动 App。逐条改动见 CHANGELOG.md。
新功能与改进
- Linux 支持(x64 / arm64,桌面或无图形界面的服务器):
- QQ 后端:SnowLuma 2.x(
launcher.sh,完整版自带./node)或 NapCat(启动文件可选.sh脚本或可执行文件); - 无窗口启动:
npm run linux-service -- --enable生成 systemd 用户服务(后台常驻、登录自动启动、崩溃自动重启),有桌面时另有启动项; - 「浏览…」在有 zenity / kdialog 时弹出系统选择窗口,服务器上手动填路径;服务器上用
ssh -L 3099:127.0.0.1:3099访问控制中心。
- QQ 后端:SnowLuma 2.x(
- SnowLuma 2.x 适配(Windows 与 Linux):识别两种发行包布局;读
engines.node与release.json,Lite 版本机 Node 不够(2.x 需要 24+)、或发行包与本机平台 / 架构不符时不启动并写明原因;
检查更新按本机系统与架构推荐完整版(win-x64.zip/linux-x64.tar.gz/linux-arm64.tar.gz)。账号配置格式与 1.14 相同,账号发现与令牌自愈不需要改。 - DSH 探活更稳:连续 2 次(约 10 秒)失败才判定「DSH 不可用」,偶发失败只在恢复时记一笔;日志写明失败原因(超时 / 连接被拒 / 连接被中断 / 鉴权失败等)。端口重新识别仍在第一次失败时开始。
- macOS:第一次双击
control-center.command会自动生成「QQ Bridge 控制中心.app」并在访达里选中它,以后双击 App 即可(不再需要手动npm run mac-app)。 - 接口平台、控制中心、README 等处的系统说明统一为 Windows / macOS / Linux。
下载
| 文件 | 说明 |
|---|---|
qq-bridge-enhanced-v1.0.1.zip |
完整源码(含接口平台)+ 文档 + 测试 + 配置模板(不含 node_modules、SnowLuma、NapCat、QQ、DSH、真实配置或数据) |
qq-bridge-enhanced-v1.0.1.zip.sha256 |
SHA-256 校验值 |
部署见 README.md「部署(无窗口版)」与 docs/DSH_DEPLOYMENT.md(含 Linux 的 4.1b、4.3b、10.1 节)。
从 v1.0.0 升级
- 退出控制中心;备份
config.json、state/、interface-platform/state/。 - 解压到新目录,把上面三样复制过去(以及
audio/、自定义roles/*.md,如有)。 npm ci→npm run test:audit;macOS 删掉旧的「QQ Bridge 控制中心.app」后双击一次control-center.command(或npm run mac-app);Linux 运行npm run linux-service -- --enable。- 启动控制中心 → 开启后端 → 启动桥接。preset 没有变化,不需要重跑
setup-dsh.mjs。
测试
npm run test:audit:55 个离线回归脚本,macOS 与 Linux 上都是 54/55(test-console-encoding.mjs检查的是 Windows 控制台的chcp,只在 Windows 上通过)。
接口平台自身 26 项全部通过。新增test-linux-support.mjs(同时断言 Windows / macOS 原有行为不变)、test-dsh-health.mjs。- Linux 验证:在 Linux arm64 容器(Node 22)里从零
npm ci、跑完整离线测试,并实际启动控制中心与接口平台、检查后端声明与「浏览…」在无图形界面时的行为。 - SnowLuma 2.0.3 的 Windows / Linux 发行包:核对了目录布局、启动脚本、Node 要求与账号配置格式(未运行)。
- 未在真实环境验证:Linux 上的 QQ(Linux 版 QQ + SnowLuma / NapCat)扫码登录与收发、systemd 服务实际运行、桌面选择窗口;SnowLuma 2.x 的实际收发(Windows 与 Linux)。
v1.0.0
qq-bridge-enhanced v1.0.0
第一个正式版本。在 v0.4.2 的基础上:支持 Windows 与 macOS,新增接口平台,控制中心统一管理桥接、接口平台与 QQ 后端,
兼容 DSH 0.2.1,并增量合入上游 Derpyu520/qq-bridge v0.2.0-r4 的修复(本仓库的增强功能全部保留)。
逐条改动见 CHANGELOG.md。
主要新功能
- macOS 支持:QQ 经 NapCat 接入(用 NapCat Mac 安装器装进 Mac 版 QQ)。
npm run mac-app在本机生成
「QQ Bridge 控制中心.app」:双击无窗口启动,没有 Dock 图标;再次双击重新打开页面;页面上退出后 App 随之退出。 - 接口平台(仓库内
interface-platform/):桥接和 QQ 后端之间的统一接入层。按后端目录自动发现账号;SnowLuma(Windows)与
NapCat(macOS / Windows)可以同时接入、互不干扰;账号目录读不了(例如 macOS 隐私保护)时保留现有连接,不当成账号消失。
为以后接入微信 / Discord / KOOK 预留了统一接口。 - 控制中心:
- 顶部「桥接」「接口平台」两个大标签;接口平台页有概览(后端开启卡)、接入实例、账号、日志、设置;
- 「接入桥接」一键让桥接经接口平台收发(原配置自动备份,可「恢复直连」);
- NapCat 管理:版本显示(NapCat 自报)、检查更新(只提示不下载)、QQ.app / 启动文件 / NapCat 目录设置、系统原生「浏览…」窗口(macOS / Windows);
- NapCat 扫码登录:需要扫码时开启卡直接提示,程序区显示二维码,NapCat 日志里也插入可扫的小图(旧码标「已过期」);
- 「打开桥接控制台」自动带令牌;状态栏的 DSH 以桥接的就绪状态为准,「接入后端」按真实连接显示。
- DSH 0.2.1:preset 去掉
{{cwd}}(同时兼容 0.2.0-rc.2);桌面版 0.2.1 的随机端口自动识别(Windows / macOS),DSH 重启后桥接自动跟上。 - 管理员私聊跨群查看与群长期规则(默认关闭,
socialV2.tools.ownerGroupAccess):管理员私聊的 AI 可只读查看白名单群,并给群设长期说话规则。 - 表情:单张大小上限可配(
socialV2.sticker.maxBytes,默认 10MB);NapCat 下 AI 收藏表情可用。 - 上游 r4:联网搜索(
src/web-search.js)、长轮询与超时稳定性、多处体检修复,以及对应的回归测试。 - 桥接控制台黑话库:候选词拆成「待研究」「已研究」两栏。
- 版本号统一:接口平台的版本号与项目一致(1.0.0)。英文 README(README.en.md)同步更新为本版内容。
- 日志:经接口平台时写「QQ 后端(经接口平台 · NapCat <版本>)已连接」,不再一律写 SnowLuma。
下载
| 文件 | 说明 |
|---|---|
qq-bridge-enhanced-v1.0.0.zip |
完整源码(含接口平台)+ 文档 + 测试 + 配置模板(不含 node_modules、SnowLuma、NapCat、QQ、DSH、真实配置或数据) |
qq-bridge-enhanced-v1.0.0.zip.sha256 |
SHA-256 校验值 |
部署(Windows / macOS,无窗口启动):见 README.md「部署(无窗口版)」;给 DSH agent 的逐步说明:docs/DSH_DEPLOYMENT.md。
从 v0.4.2 升级
- 退出控制中心;备份
config.json与state/。 - 解压到新目录,把旧目录的
config.json、state/(以及audio/、自定义roles/*.md,如有)复制过去。 npm ci→npm run test:audit→node scripts/setup-dsh.mjs并重启 DSH(preset 有变化)。macOS 再npm run mac-app。- 启动控制中心。想经接口平台收发:接口平台 → 开启后端 →「设置 → 接入桥接」→ 启动桥接。不接入时桥接照旧直连 SnowLuma,行为与 v0.4.2 一致。
以后更新 / 备份时,把 interface-platform/state/(接口平台的实例配置与令牌)一起带上。
测试
npm run test:audit:53 个离线回归脚本;macOS 上 52/53(test-console-encoding.mjs只适用于 Windows 控制台,Mac 上是已知失败)。
接口平台自身 26 项测试全部通过。本版新增的离线测试包括:接口平台(test-platform)、NapCat 管理与扫码(test-napcat-manage)、
macOS 启动 App(test-mac-app,Mac 上实际生成并校验签名)、日志用词(test-qq-backend-label)、黑话分栏(test-slang-tabs)、
群长期规则、表情上限、NapCat 收藏表情、DSH 端口识别等,以及移植的上游 r4 回归。- macOS 实机验证:NapCat 4.18.38 + Mac 版 QQ 7.0.2 → 接口平台 → 桥接 → DSH 0.2.1 桌面版:群聊 / 私聊收发、记忆导入、
表情收藏、DSH 重启后自动重连、NapCat 自动登录、无窗口 App 启动与「访问其他 App 的数据」授权。 - 未在真实环境验证:
- Windows 上的新链路(SnowLuma / NapCat 经接口平台、DSH 0.2.1 随机端口识别、无窗口入口下的新页面功能)——离线测试覆盖了逻辑,但没有 Windows 实机回归;
- NapCat 登录二维码在页面上的实际显示(验证时 NapCat 一直自动登录成功,没有出现需要扫码的情况);
- 浏览器 UI 自动化测试(
test-console-ui,需要 Playwright)。
v0.4.2
v0.4.1
qq-bridge-enhanced v0.4.0
在 v0.3.0 的基础上新增控制中心:一个本地网页把「桥接终端」和「SnowLuma」合在一起,屏幕上只需要 QQ、DSH 和这个页面。
- 控制中心(
control-center.bat,或无窗口的control-center-hidden.vbs):左侧桥接日志 + 固定命令(status / mode / panic / audit …), 右侧 SnowLuma,底部整体状态栏(含当前登录的机器人账号、模式与权限级别、各组件版本)。打开它不会自动启动任何东西。 - SnowLuma 面板:选择你自己解压的目录(不放进项目)、显示版本与完整版/Lite 版、由你点击启动/停止、打开它的 WebUI、 检查更新、更新助手(备份并迁移账号与数据到新版本目录,旧目录保留)。
- 部署指南补充桌面版 DSH 的说明。