dsh-wechat-bridge:把个人微信接进 DeepSeek Harness

前言

DeepSeek Harness(DSH)适合在本机跑 agent:读改文件、执行命令、把结果回传。若希望「手机微信发一句、本机 DSH 干一轮、结果直接回到微信」,常见做法是依赖第三方协议客户端或云端中转,权限与数据路径往往不在自己手里。

dsh-wechat-bridge(维护者 doyokol,社区目录分类为工作流)走的是另一条路:收消息用自建 reader.py 离线解密微信本地数据库,发消息用自编译 version.dll hook 监听本机端口,不依赖第三方微信客户端。下面介绍它的定位、架构、安装配置与使用边界。

这是什么

一句话:把个人微信接进 DSH——微信里发一条消息,相当于给本机 DSH 派一个任务;agent 可跑命令、读改文件、截图,并把结果(含截图、原图)发回微信。

DSH 侧默认使用 standard 预设,工具不做白名单限制(群聊场景另有工具限制,见后文)。插件以 profile bundle 形式挂载,版本在 package.json 中为 0.2.0,许可证 MIT。

核心功能

收发通道

  • 收:reader.py 读本地库,服务监听 127.0.0.1:17891。
  • 发:自编译 version.dll 注入微信进程,hook 监听 127.0.0.1:30002。
  • 桥接:server.mjs 在 127.0.0.1:17890 统一收发、SSE 与设置面板 API;健康检查为 http://127.0.0.1:17890/health。

数据不经过插件作者或第三方云端中转;runtime/、vendor/、workspace/、config.json(含密钥)在 .gitignore 中,仓库只放代码。

对话与群聊

  • 断句分条发送、句末不加句号、自然收尾发表情包;群聊默认潜水,命中唤醒词或被 @ 才开口。
  • 群聊按群写入 memory/group-<hash>.md,模型可记录群友画像。
  • 模型的思考段落写入 workspace/thinking.jsonl,仅在 DSH 面板查看,不发微信。

图片

微信本地同一张图存三份(_h 原图 / 中图 / _t 缩略图);reader.py 优先解 _h。解密后的文件落在 workspace/media/in/,以 [图片] <路径> 进入 prompt,由模型通过 read_image 查看。

DSH 设置面板

DSH 设置 →「微信桥接」:改白名单(可搜名字)、对话节奏、唤醒词、人格卡,并可直接编辑规则文件。

架构概览

微信(本机 4.1.10.27 副本)
   ├─ 发:version.dll(自编译 hook,127.0.0.1:30002)
   └─ 收:reader.py(离线读库,127.0.0.1:17891)
              ↕
        server.mjs(桥接服务 127.0.0.1:17890:收发 + SSE + 面板 API)
              ↕  本地 SSE / HTTP
        native-context.mjs(DSH 插件宿主半边:消息 → DSH 轮次)
              ↕
        DSH agent(standard 预设;回复/图片经 server.mjs 发回微信)

前置条件

需要 说明
微信 4.1.10.27 hook 按该版本偏移编写,换版本需重新适配
自编译的 version.dll 放在微信副本目录,随进程加载;源码见 vendor/(不随仓库分发)
Python 3 + pycryptodome 供 reader.py 解密本地库
DeepSeek Harness 桌面版 插件以 profile bundle 形式挂载

安装与启用

先做配置,再把目录链进 DSH,最后启动微信副本与桥接服务。

1、从 config.example.json 复制为 config.json,按「配置」一节填写 dbPath、selfWxid、decryptKey、hookToken、pythonPath 等字段。

cp config.example.json config.json

2、挂进 DSH(推荐 profile bundle,会在插件管理页出现)。将 link: 后的路径改为你本机上的插件目录:

dsh plugin --profile desktop add link:D:/AI/DSH-WeChat-Bridge

也可按 README 说明,在 node_modules 建 junction,并在 profile 的 package.json 的 dsh.profile.bundles 中加入 dsh-wechat-bridge。

3、启动微信副本:运行 start-wechat.bat(首次扫码登录,之后自动恢复)。

4、启动收发服务:运行 start-bridge-silent.vbs(无控制台窗口)。

5、重启 DSH,在设置 →「微信桥接」中点击「连接微信」,自检 hook、reader 与白名单。

配置(config.json)

关键字段如下(完整说明见仓库 README):

键 说明
dbPath / selfWxid 微信数据目录(xwechat_files/<你的 wxid>)与自己的 wxid
decryptKey 本地库解密密钥(本机 DPAPI 解出后落盘,勿外传)
hookToken hook 鉴权 token,读 runtime/wechat-4.1.10.27/wechatagent-hook.token
mediaKey {code, aes}:微信重启后 kvcomm 派生不出 key 时的兜底,用于解图
pythonPath 已安装 pycryptodome 的 python.exe
allow 允许接管的会话(私聊 wxid_xxx、群 xxx@chatroom);空则谁都不理
provider / model DSH 侧渠道与模型
mergeSeconds / privateMergeSeconds 群聊 / 私聊消息合并窗口(秒)
groupGapSeconds 群里两次开口的最小间隔
wakeWords / wakeHoldSeconds 群聊唤醒词(或 @)与保持响应的秒数
turnTimeoutMs 单轮超时,0 为不限时
personaFile 群聊人设文件,仅群会话注入
maxChars 注入 prompt 的最大字符数
paused 暂停处理(不删白名单)

典型用法

经过上面的步骤后,在白名单内的私聊或已唤醒的群聊中发送文字或图片即可触发 DSH 轮次。私聊默认全权限;群聊仅开放只读工具、微信工具与记忆工具,bash / write / edit 等由 tools.guard() 拒绝,群会话沙箱为 workspace-write(只能改 workspace/)。

群聊行为要点:

  • 默认潜水;唤醒词或 @ 后,在 wakeHoldSeconds 内可连续接话。
  • 距上次开口不足 groupGapSeconds 且未被点名时跳过。
  • 模型判断不应接话时只输出 [SKIP],插件整条丢弃。

仓库提供 smoke.mjs、test-send.mjs 用于自检;人格示例见 persona/本鲸.md,可替换为自有文件并在 personaFile 中指向。

适用场景与注意

适合谁:需要在不依赖第三方微信客户端的前提下,用个人微信远程驱动本机 DSH 的开发者;能接受固定微信版本、自编译 hook 与本地解密维护成本的用户。

权限与安全:插件与 DSH 以当前 dsh 进程权限运行,私聊场景下 agent 能力接近本机全权限。安装前应阅读源码与 MIT 许可证,自行评估账号与合规风险;README 免责声明写明仅供个人学习与自用,账号异常、消息丢失等后果由使用者自负。

已知边界(来自 README):

  • 仅适配微信 4.1.10.27;自动更新可能顶掉 hook(仓库外看门狗脚本负责还原)。
  • hook 只监听 127.0.0.1,不对外暴露。
  • 原图直发更消耗 vision token。
  • 群里单轮消息过多可能被微信截断(经验值:单轮 ≤5 条)。

DeepSeek Harness 的生态理念是「一切皆插件」;SkillHub 插件目录为社区站点,与 DeepSeek / 幻方无官方从属关系。

结尾

dsh-wechat-bridge 把微信收发收拢到本机 reader 与 hook,经 server.mjs 与 native-context.mjs 对接 DSH,适合「微信下指令、本机 agent 执行、结果回微信」的自建工作流。详情与源码见 GitHub 仓库,目录页见 SkillHub:doyokol/dsh-wechat-bridge。

羽毛球分组比赛记分
小程序二维码

欢迎使用《羽毛球分组比赛记分》微信小程序

小夜