它替你接上的六件事
一个通道插件要做的不是「转发文本」,而是让微信这一端在 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 plugin add 后面那一段。方式二:命令行
适合脚本化或没有 GUI 的 profile。先装进你的 profile:
dsh plugin --profile <你的 profile> add dsh-channel-wechat
add 会自动构建,并把包同时写进 profile 的 dependencies
和 dsh.profile.bundles——后者才决定它加载什么。
-
完全退出 DSH,再重新打开
这一步不能省。插件是后装上来的话,只关窗口不够,要从进程退出重开。 否则插件页里不显示配置区,而且不会有任何报错。
-
在插件页扫码
侧边栏 Plugins → 点开 dsh-channel-wechat → 登录微信,页内出二维码,手机微信扫码确认。 扫码后无需再重启:凭证即刻写入,长轮询当场开始。
-
把工作目录改掉
同一页的工作目录决定所有微信会话在哪儿干活。它 在会话创建时写入,之后不可变,所以改它只影响之后新建的会话。 默认值通常是错的:不设的话取启动器的当前目录,桌面端那是
~/.dsh/profiles/desktop。
想立刻装到刚发布的版本,要显式关掉 pnpm 的供应链观察期(默认 24 小时):
dsh plugin --profile <你的 profile> add dsh-channel-wechat@latest --config.minimumReleaseAge=0
注意只加 @latest 不管用,观察期在版本解析之后才生效。代价是该版本未经观察期。
它是怎么接进去的
单包,同时是插件和 bundle,跑在 Harness 进程内。没有独立守护进程,没有本地端口转发。
| 方向 | 用什么 |
|---|---|
| 微信 → 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 那一代。
-
修好 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 上真实发布过的版本。 标题、图标与关键词通常也取自已发布的那个版本,所以改动要等下一次发版才会跟着走。


