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 升級後需迴歸驗證。