@lanbaolu/dsh-wechat-bridge:把微信接进本地 DSH Agent

前言

DSH(DeepSeek Harness)的理念是「一切皆插件」,Agent 跑在本机上处理代码、文件和各种自动化任务。麻烦在于,这些任务往往不是几秒钟能结束的:跑一轮测试、批处理一批文件,期间你得守在终端前才能看到进展;如果 Agent 中途发起权限确认,人也必须在场。

用 SSH 或远程桌面连回机器能解决「能操作」,但体验割裂——在小屏幕上敲命令、翻会话,都不如日常聊天来得自然。

下面介绍的 @lanbaolu/dsh-wechat-bridge 走的是另一条路:它把微信接进 DSH。扫码绑定个人微信后,在微信里就能和本机 Agent 对话、收发文件、接收任务通知、完成权限审批。

插件概况

这个插件由 lanbaolu 维护,当前版本 0.9.0,MIT 许可证。微信协议层移植自 wechat-claude-code(iLink Bot 协议);DSH 侧以 Host 插件实现,同时提供模型工具(CLI/Headless 可用)与 Web 管理面板(Web/桌面可用)两个管理入口。

三端通用:Windows / macOS / Linux 的守护进程都用纯 Node.js 进程管理,不依赖 launchd / systemd / Windows Service。

整体链路是:桥接守护进程处理微信协议,通过只监听 127.0.0.1、带随机 token 鉴权的 HTTP + SSE 与 DSH Host Plugin 通信,再由后者创建或恢复 DSH Agent。

微信 App ←→ iLink Bot API ←→ bridge daemon (Node.js)
                                  │  HTTP + SSE (127.0.0.1, token 鉴权)
                                  ▼
                          DSH Host Plugin
                                  │  ctx.agents.create/resume + followup
                                  ▼
                          DSH Agent (本机 LLM + 工具)

仓库代码分三部分:src/bridge/ 是微信协议层与桥接守护进程,src/index.ts 是 DSH Host 插件(内部 API、Agent 生命周期、守护进程管理、模型工具),src/client/index.ts 是 Web 管理面板(经 settings.section 槽位注册)。

下面分节展开功能。

对话与会话延续

微信扫码绑定个人微信后,在微信里直接与 DSH 本机 Agent 对话。每个微信账号对应一个 DSH 会话,DSH Host 重启后会自动 resume 原持久化会话,上下文不断档;/clear/new/stop/cwd/model/prompt 等斜杠命令可在微信内使用,完整列表见下文。

流式回复、超时安抚与防卡死

DSH Agent 的 assistant/chunk 输出通过本地 SSE 推送到微信,攒批聚合发送,长回复不会刷屏。

当 DSH 超过 5 分钟没有输出时,桥接会自动发一条「还在处理」的消息,避免你误以为它卡住了。这个行为可以配置,见后文「超时安抚」。

防卡死方面,桥接会向微信会话自动注入通道约束提示词,禁用浏览器端的交互式选项工具(手机上看不到,会永久阻塞),改用纯文本编号选项。

主动通知与微信内审批

Agent 可以通过 wechat_notify 工具,在任务完成、失败或需要确认时主动推送微信。通知内置节流:每小时最多 6 条、每日最多 50 条,超限排队延迟发送,以规避个人号风控。

Agent 请求权限时,桥接会把审批消息推到微信:回复 /yes 批准、/no 拒绝,超时自动拒绝(fail-closed)。只有绑定账号本人可以裁决,且不影响桌面 GUI 会话。

文件与媒体双向

媒体收发能力(截至 0.9.0 版本):

方向 文本 图片 语音 文件 视频
微信 → DSH 支持 支持,CDN 下载 + 解密落盘 支持,转写为文本 支持,下载落盘交给 agent 支持,CDN 下载落盘交给 agent
DSH → 微信 支持,攒批聚合发送 支持,按扩展名路由直发 不支持 支持,回复提及自动推送 支持,按扩展名路由直发(mp4/mov/webm/mkv/avi)

两点补充:

  • 视频收发于 2026-08-29 补齐,2026-08-30 完成真机收发抽验。
  • 语音出站(DSH → 微信)暂不支持,协议尚无公开实现参考。

另外,DSH 回复中提到的本地文件会自动推回微信;微信里也可以直接发图片、文件给 DSH。

消息队列与多用户

处理中收到的普通消息会排队,等当前任务结束后继续处理。多用户场景下按用户独立排队,A 的长任务不会阻塞 B。

多用户支持基于信任集加 per-user 会话:每个受信用户拥有独立的 DSH 会话、上下文、消息队列和审批归属,互不可见;信任集可控、可吊销。细节见「安全模型」一节。

安装与启用

安装

三种安装方式,任选其一。

方式一,npm 一键安装(推荐):

npm install @lanbaolu/dsh-wechat-bridge
dsh plugin --profile web add @lanbaolu/dsh-wechat-bridge
dsh web

第一条命令安装包,第二条把插件注册进 DSH 的 web profile,第三条启动 Web 界面。

方式二,本地路径安装(开发/个人使用):

git clone https://github.com/lanbaolu/dsh-wechat-bridge.git
dsh plugin --profile web add /path/to/dsh-wechat-bridge
dsh web

开发模式下还可以用超级注入器:

dev_inject_plugin /path/to/dsh-wechat-bridge

方式三,从源码运行:

npm install
npm run build
npm run build:client
npm run typecheck

运行时要求 Node.js >= 18;注意 build:client 脚本使用 tsdown,需要 Node.js 22.18+ 或 24.11+(CI 用 22/24 验证)。

扫码绑定与启动

推荐在 DSH Web 设置页完成:

  1. 打开 Settings,进入「微信桥接」区块。
  2. 填写 DSH 工作目录。
  3. 点击「扫码绑定」,用微信扫描页面上的二维码。
  4. 绑定成功后点击「启动」。

也可以在 DSH 所在机器的终端执行:

node lib/bridge/main.js setup

按提示用微信扫码,完成后选择 DSH 工作目录。

守护进程管理

守护进程的启动 / 停止 / 重启 / 状态 / 日志全部由 DSH 插件管理,两条路径:

  • 模型工具:在 DSH 对话中让模型执行 wechat_bridge_startwechat_bridge_statuswechat_bridge_logswechat_bridge_stop
  • Web 面板:在设置页「微信桥接」区块点击启动 / 停止 / 重启。

经过上面的步骤,微信端和 DSH 端的通道就通了,日常操作都可以在微信里完成。

微信端常用命令

命令 说明
/help 显示帮助
/clear 清除当前 DSH 会话
/new 开启全新会话(等价 /clear
/stop 停止当前任务并清空排队消息
/status 查看会话状态
/cwd [路径] 查看 / 切换工作目录
/model [名称] 查看 / 切换模型
/prompt [内容] 查看 / 设置系统提示词
/history [数量] 查看最近对话
/send <路径> 发送本地文件到微信
/trust <userId> [备注] 添加信任用户(manual 模式;仅 owner)
/distrust <userId> 吊销信任用户(仅 owner)
/trustlist 查看信任集(仅 owner)
/trustmode [模式] 查看/切换信任模式(owner-only / bootstrap / manual)

可选配置

插件数据目录默认在 ~/.dsh/wechat-bridge/,可通过 DSH_HOME 环境变量调整。下面两项配置都在该目录下的 config.json 中编辑。

超时安抚

DSH 长时间没有产出时,桥接会主动发「还在处理」的消息(默认静默 5 分钟后触发)。如果嫌频繁或想自定义文案,编辑 config.jsoncalm 节:

{
  "calm": {
    "enabled": true,        // 是否启用安抚,默认 true
    "silenceMs": 600000,    // 首次静默多久后安抚(毫秒),默认 300000(5 分钟)
    "intervalMs": 900000,   // 两次安抚最小间隔(毫秒),默认同 silenceMs
    "maxCount": 3,          // 每轮任务最多安抚次数,0/省略 = 不限制
    "messages": [           // 自定义文案(随机取一条),留空用内置默认
      "还在处理中,这个问题有点复杂,请再稍等一下",
      "马上就好,正在收尾"
    ]
  }
}

保存后即时生效(最长延迟数秒),无需重启守护进程。也可以在 Web 面板的「超时安抚」区块调整。

防休眠

默认关闭。开启后,守护进程运行期间会抑制系统休眠——锁屏 / 合盖不挂起,微信消息持续响应,适合挂机跑长任务。编辑 config.json

{
  "preventSleep": true
}

也可以用 Web 面板的「防休眠」开关。切换后需重启守护进程生效,在面板点「重启」即可。平台实现:macOS 用 caffeinate,Linux 用 systemd-inhibit,Windows 用 SetThreadExecutionState,均为尽力而为。

安全模型

先明确一个前提:iLink 协议的扫码绑定是 bot 自身登录(不是与用户配对),所以「多用户」的边界是在协议层之上划定的——把可信微信用户的 from_user_id 加进信任集,据此放行或拒绝入站消息。

信任有三种模式,默认 fail-closed:

模式 行为 适用
owner-only(默认) 只认绑定账号 owner 本人,陌生人一律拒绝 单用户
bootstrap 首个联系的陌生人自动入信任集(一次性),之后不再自动 快速开号试用
manual 仅 owner 用 /trust 或 Web 面板显式添加的人可对话 正式多人使用

几条补充规则:

  • 陌生人消息只记日志、不回复,不泄露内部信息;可选设置 notifyRejected: true,让 owner 收到「陌生人尝试联系」的提醒。
  • 信任集持久化在 trust.json(权限 0600),mode 是唯一真相源。
  • 通过 /distrust 或面板吊销后,该用户新消息立刻被拒绝;其历史会话文件保留只读,不丢历史。

隔离方面,每个受信用户(含 owner)有一套独立的东西:DSH 会话(以 ${botAccountId}::${userId} 为 key)、会话文件、消息队列、上下文 token,以及 /history/status/cwd/model 的作用范围。A 的 /yes/no 只裁决 A 自己 agent 的待审批事项,B 无权替 A 裁决。

验证状态需要如实说明:多用户路径(bootstrap 入集、双用户隔离并发)的真机验证尚未完成,需要第二个微信账号走查;在此之前,请仅在受控环境开启 bootstrap / manual 模式。

凭证安全方面:守护进程与 DSH 插件之间的内部 API 只监听 127.0.0.1,使用随机 token 鉴权;微信账号凭证仅保存在本机 ~/.dsh/wechat-bridge/accounts/,权限为 0600;日志中的 token / secret / password 会自动脱敏。

适用场景与注意

适合这些场景:

  • 需要挂着长任务、人离开电脑,还想随时收到进展并处理审批;
  • 想把个人微信作为轻量控制入口,与 CLI、Web 面板配合管理 DSH 会话;
  • 多人共用一个 bot,需要每人独立的会话与审批边界(注意上文的多用户验证状态)。

使用前有几点注意:

  1. 项目免责声明写明:仅用于个人学习与自动化,使用非官方微信协议存在账号风险,需自行评估并承担后果。
  2. 语音出站尚不支持;多用户路径真机验证待补,bootstrap / manual 模式请先在受控环境使用。
  3. 插件以当前 dsh 进程的权限运行,安装前应检查源码与许可证(本项目采用 MIT)。

结尾

总体来看,这个插件把微信接入了 DSH 的对话、通知与审批流程,安装、绑定、启动、配置都有明确的命令与面板入口,守护进程统一由 DSH 插件管理,三端可用。如果你也需要在外出时够到本机的 Agent,可以按上文「安装与启用」一节试一试。

  • 社区目录页:https://www.skillhub.cn/plugins/lanbaolu/dsh-wechat-bridge
  • GitHub 仓库:https://github.com/lanbaolu/dsh-wechat-bridge
羽毛球分组比赛记分
小程序二维码

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

小夜