dsh-channel-wechat

把微信接入 DeepSeek Harness。在微信里给 bot 发消息,DSH 在同一会话里回答; 需要你拍板的审批卡和提问卡,也是在聊天里点。

MIT · 插件 + bundle 单包 · 在 Harness 进程内运行,没有独立的桥接进程

怎么装 GitHub

它长什么样

装完之后,你的微信和 DSH 插件页就是这几处。

微信对话截图
微信里发一句话,DSH 的回答回到微信
插件页截图
插件页里扫码登录,下面是全部设置
审批卡截图
审批卡直接出现在聊天里,点了才继续

它替你接上的六件事

一个通道插件要做的不是「转发文本」,而是让微信这一端在 DSH 里成为一个真正的输入来源。

消息进得来

腾讯 iLink 长轮询收消息,用 agent.followup() 原生注入会话—— 不是伪造一段提示词,走的是和你在 GUI 里发消息同一条路。

回复回得去

订阅 durable 的 assistant/message 事件再回发。所以一轮跑完就一定会回, 不取决于模型怎么流式输出。

卡片能在微信里回答

审批卡和提问卡转发到聊天里,批准、拒绝、回答都在微信里完成。 默认 cards: wechat 时 GUI 不会重复弹一张。

长任务不堵收消息

长轮询和会话处理是两条独立循环。跑长任务期间照样收新消息, /stop 能打断。

登录和配置都在 GUI 里

二维码、退出登录、工作目录、审批卡位置、默认模型、会话权限, 全在插件卡片里,不用手改 YAML。

装完只占一行

profile 里只有一个 bundle 条目。早期版本要两行,现在命令行能力合进了主行。

怎么装

需要 DSH 0.2.0-rc.1 或更高。没有上界——DSH 发新版本时你不会被挡在门外。 两种方式效果一样,选顺手的那个。

方式一:在 DSH 插件页里输入包名

侧边栏 插件 → 添加插件,在包名输入框里填 dsh-channel-wechat,回车或点安装。 不用记参数,也不用切到终端。

DSH 插件页的添加插件对话框
对话框的输入框就是 dsh plugin add 后面那一段。

方式二:命令行

适合脚本化或没有 GUI 的 profile。先装进你的 profile:

dsh plugin --profile <你的 profile> add dsh-channel-wechat

add 会自动构建,并把包同时写进 profile 的 dependencies 和 dsh.profile.bundles——后者才决定它加载什么。

  1. 完全退出 DSH,再重新打开

    这一步不能省。插件是后装上来的话,只关窗口不够,要从进程退出重开。 否则插件页里不显示配置区,而且不会有任何报错。

  2. 在插件页扫码

    侧边栏 Plugins → 点开 dsh-channel-wechat → 登录微信,页内出二维码,手机微信扫码确认。 扫码后无需再重启:凭证即刻写入,长轮询当场开始。

  3. 把工作目录改掉

    同一页的工作目录决定所有微信会话在哪儿干活。它 在会话创建时写入,之后不可变,所以改它只影响之后新建的会话。 默认值通常是错的:不设的话取启动器的当前目录,桌面端那是 ~/.dsh/profiles/desktop。

想立刻装到刚发布的版本,要显式关掉 pnpm 的供应链观察期(默认 24 小时):

dsh plugin --profile <你的 profile> add dsh-channel-wechat@latest --config.minimumReleaseAge=0

注意只加 @latest 不管用,观察期在版本解析之后才生效。代价是该版本未经观察期。

它是怎么接进去的

单包,同时是插件和 bundle,跑在 Harness 进程内。没有独立守护进程,没有本地端口转发。

微信用户 手机 / 桌面微信 腾讯 iLink getUpdates 长轮询 本插件 · DSH 进程内 协议层 · 收消息 / 发消息 / 媒体 通道层 · 长轮询 · 会话代次 · 面板 桥接层 · 消息路由 · 卡片 · 出站文件 插件页(GUI)· 登录 / 设置 / 检查更新 DSH agent · session · 工具
方向 用什么
微信 → DSH agent.followup() 原生注入会话,与你在 GUI 里发消息同一条路径
DSH → 微信 订阅 durable assistant/message 事件,跑完一轮就回发
卡片 审批卡与提问卡加监听时带 prepend: true,否则 GUI 会先拿走且不报错
会话 id channel-wechat-<peerId>,peer 的纯函数;/new 是代次 +1,不是删会话

在微信里能用的命令

本地自管 6 个,其余原生命令原样透传给 harness——所以 /permission、 /model 这些你在 GUI 里认识的命令,在微信里同样有效。

命令 作用
/stop打断当前这一轮。绕过队列,所以不会和进行中的一轮死锁。
/status看当前会话与通道状态。
/new换一个新会话(代次 +1)。旧会话不会被删除,DSH 没有删除 API。
/help列出可用命令。
/cwd已注册,尚未实现——会明确回复,而不是静默失败。
/reconnect同上,已注册未实现。

边界:它不做什么

写在这里是因为它们都是刻意的取舍,不是还没做完。

  • 不做群聊。协议层没有群聊的依据,硬做只能靠猜。
  • 不做多账号。一个 profile 一条通道。
  • 不做消息去重 / 节流。对齐官方实现,不自作聪明加一层。
  • 不做主动推送。只回你发起的对话。
  • 它是一个单方通道。微信消息继承与本地输入同等的权限,操作者本人就是用户。 也正因如此,你在微信里发 /permission danger-full-access 是真的会关掉审批卡—— 这条命令走原生透传。将来若要服务群聊或不可信来源,这个假设必须推翻。

已知的坑:装完不重启就没有配置区,而且没有任何报错。这不是 bug 报告里才有的边缘情况, 从插件页安装时它就是常态——Host 先启动,包后落盘。

更新日志

点版本号跳到对应的 GitHub Release,完整的变更说明在那里。 版本号的规则见 README: 0.2.x 配 DSH 0.2 那一代。

  • v0.2.3 最新 2026-10-17

    修好 0.2.2 里没生效的退出修复

  • v0.2.2 2026-10-17

    检查更新、Windows 路径修复

  • v0.2.1 2026-10-17

    版本号跟随 DSH,修长轮询 teardown

  • v0.1.3 2026-10-16

    插件页内配置默认模型与会话权限

  • v0.1.2 2026-10-16

    GUI 内登录与配置,插件只占一行

  • v0.1.1 2026-10-16
  • v0.1.0 2026-10-15

还没发版的改动不在这个列表里,见 提交历史。

装好之前可以先看的东西

完整文档在仓库里。这里只放最常被点开的几个。

实践文章

一个通道插件是怎么写出来的:会话 id、durable 回复、交互卡的两个静默坑。

README

安装、用法、数据落在哪里、已知问题、与同类插件的差异。

不变量

那些「违反了不会报错、只是行为悄悄变错」的规则,以及为什么。

插件市场索引

把这份 URL 加进 DSH 的发现标签页,就能按名字搜到并安装。 版本列表取自 npm 注册表。

Issue

装了没跑通、或者发现哪里写错了,开一个 issue。

索引里的版本列表始终反映 npm 上真实发布过的版本。 标题、图标与关键词通常也取自已发布的那个版本,所以改动要等下一次发版才会跟着走。