DSH 理念是「一切皆插件」。在构建 DSH 智能体与微信交互时,传统的单向链路(WeChat → Hermes skill → dsh --profile headless)存在冷启动耗 Token、丢失会话上下文以及长时间任务无法通知的问题。dsh-hermes-bridge 插件通过复用常驻会话和 hermes send 零 LLM 消耗,解决了这些问题。
插件定位¶
由 dsh-pulse 维护的 DSH 插件,提供 DSH 与微信的双向通信能力:入站调度(微信消息 → DSH agent 执行)和出站推送(任务进度/结果 → 微信)。它以 Hermes gateway 作为微信传输层,支持按工作目录复用 DSH agent 会话,比一次性 headless 调用省 15–20× token。
核心功能¶
- 会话复用:按工作目录(cwd)持久化常驻会话池,后续消息继续同一对话,避免冷启动。
- 自动回推:任务状态(接单、开跑、完成/失败)以结构化数据推送到微信。
- 零 LLM 出站:通知通过
hermes send发送,不消耗模型 Token。 - Web UI 可见:任务注册至
ctx.jobs,可在 Web 界面查看。 - 持久化与崩溃恢复:任务队列落盘(JSONL 格式),重启后自动恢复
queued任务或重入running任务。 - 中断重入:支持将中断的任务重新入队,保持会话状态。
安装与启用¶
插件需要安装在 web profile 下,以保持 HTTP 循环监听常驻。
- 安装插件
dsh plugin --profile web add @dsh-pulse/dsh-hermes-bridge
- 配置注册
插件依赖@deepseek-ai/cordispeer dependency。在~/.dsh/profiles/web/cordis.patch.yml中添加以下内容:
- insert:
- id: hermes-bridge
name: 'file:/absolute/path/to/dsh-hermes-bridge/lib/index.js'
config:
port: 8643
authToken: '${env.DSH_BRIDGE_TOKEN}' # 必填,拒绝无 Token 启动
pushTarget: 'weixin:<chat_id>' # 必填,目标聊天 ID
hermesBin: '/path/to/hermes' # 可选,默认 'hermes'
workspaceRoots: ['/path/to/workspace'] # 可选,工作目录白名单
环境假设¶
插件基于特定开发环境编写,无法开箱即用于所有环境,请核对以下假设:
- DSH 版本:开发基于
0.1.0-rc.7(Node ≥ 22)。ctx.agents/ctx.agentPresets等为 rc 阶段快照,升级可能导致 API 漂移。 - DSH Profile:必须使用 web profile(
dsh web),保证插件进程常驻。 - Hermes 安装:需自行部署 Hermes Agent gateway(如
hermes-gateway.service)。出站依赖hermes send命令。 - 微信通道:默认使用 iLink 个人机器人通道(
ilinkai.weixin.qq.com)。出站目标需通过hermes send --list验证。 - 会话路径:默认使用
~/.dsh/sessions,若DSH_HOME不同需调整。
配置项¶
| key | type | default | description |
|---|---|---|---|
port |
number | 8643 |
本地监听端口(host 硬编码为 127.0.0.1) |
authToken |
string | — | 必填,每次请求验证的 Bearer Token |
pushTarget |
string | — | 必填,如 weixin:<chat_id>,由 hermes send 解析 |
hermesBin |
string | hermes |
hermes CLI 可执行文件路径 |
retries |
number | 1 |
出站推送重试次数 |
maxTextLen |
number | 1500 |
推送文本截断长度 |
preset |
string | standard |
session setup 时挂载的 agent 预设 |
适用场景与注意事项¶
- 适用场景:需要在微信中接收任务并执行,且希望复用会话上下文、节省 token 的 DSH 用户。
- 注意事项:
- 无认证层:插件本身无认证机制,host 仅监听
127.0.0.1,请勿对外暴露。 - 微信限流:iLink 通道存在
sendmessage限流(ret=-2),突发推送可能被丢弃。 - API 漂移:任何 DSH 升级后需回归验证。