前言¶
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。