前言¶
用 DSH 跑 agent 會話,入口通常是 dsh web 的網頁 GUI。人坐在電腦前沒問題,一旦離開工位,既不方便給會話發消息,也看不到任務跑到哪一步。微信私聊是手機上常開的窗口——如果微信消息能直接驅動 agent、回覆再發回來,就等於多了一個隨身入口。
dsh-plugin-wechat-bridge 做的就是這件事:把微信(ilink bot)私聊消息橋接進 DSH agent 會話,回覆以純文本分片流式發回。下面按功能、安裝、配置、使用的順序介紹。
這是什麼¶
dsh-plugin-wechat-bridge 是 NattoCB 維護的 DSH bundle 插件,許可證爲 MIT。裝進 web profile 後,掃碼綁定一個具備 ilink bot 權限(bot_type=3)的微信賬號,之後在微信裏發私聊消息就能驅動 agent,回答以純文本發回。
雖然入口換到了微信,上下文與 GUI 是等價的:每日會話注入 ~/.dsh/AGENTS.md 全文、可用 skill 目錄,並掛載與 GUI 相同的 agent preset。
核心功能¶
消息橋接與每日會話¶
- 支持多賬號輪詢微信 ilink bot API(
getupdates),私聊消息驅動 DSH agent 會話。 - 回覆以純文本分片發回:每片至多 4096 字符、至多 5 段,超出截斷。
- 每人每天一個會話:按本機時區在本地零點輪換,當天首條入站消息惰性創建。
運行時熱插拔¶
啓停有三種獨立方式,改動即時生效,無需重啓 dsh web:
- Settings UI 的「微信橋接」頁籤
/wechat斜槓命令settings.yaml的wechat-bridge:段
單向會話通知¶
notifyEnabled 默認開啓:DSH 內任何頂層會話的每個 turn 結束,都會向白名單微信推送一條固定模板簡訊。三點行爲值得知道:
- 支持按工作區靜音。
- token 失效期間的通知自動暫存(至多 20 條、24 小時),下次入站消息後自動合併補發。
- 只推送給至少發過一次消息的白名單聯繫人(協議需要
context_token),且不依賴當日微信會話是否存在。
崩潰安全與持久化¶
- 跨進程輪詢鎖:
~/.dsh/wechat-bridge/poll.lock。 - 消息按聊天串行處理,入站按
message_id去重(至多處理一次)。 - 損壞的會話日誌被隔離爲
.corrupt-<ts>並自愈重建。 - 賬號、
context_token、輪詢偏移持久化在單個原子 JSON(~/.dsh/wechat-bridge/state.json),無需數據庫。
白名單與媒體¶
- 入站白名單 fail-closed:
allowedPeers留空即拒絕所有人。 - 出站媒體:agent 調用
wechat_send_file工具,把圖片/視頻/文件上傳微信 CDN 發給當前對話人。 - 入站媒體:圖片/文件/視頻/語音自動從 CDN 下載並 AES 解密,存入
WeChatSpace/inbox/<日期>/;模型聲明圖像輸入時,圖片以原生 image 內容附帶。 ask_user_question等交互式選項工具在微信會話中被 deny(防掛起),問題與選項改爲純文本,用戶以普通微信消息回覆。
安裝與啓用¶
前置條件¶
- 已安裝 DeepSeek Harness,
dsh web可運行。 - 一個具備 ilink bot 權限(
bot_type=3)的微信賬號。
安裝¶
一條命令裝入 web profile:
dsh plugin --profile web add github:NattoCB/dsh-plugin-wechat-bridge
也可以手動安裝:把插件複製到 ~/.dsh/profiles/web/node_modules/dsh-plugin-wechat-bridge,在 profile manifest 的 dependencies 裏添加 file:<SRC>,並在 dsh.profile.bundles 註冊。
注意:不要把 profile 樹外的包符號鏈接進 ~/.dsh/profiles/node_modules(ESM 限制),應複製到 profile 下;file: 依賴加 dsh.profile.bundles 條目是正式註冊方式。
掃碼綁定¶
網頁方式:Settings →「微信橋接」頁籤 →「掃碼綁定賬號」→ 頁面渲染二維碼 → 每 2 秒輪詢掃碼狀態 → 微信確認後自動保存賬號並啓用。
命令行方式,先在任意 DSH 會話執行:
/wechat qrlogin
發起登錄後返回 sessionId,再用 /wechat qrstatus <sessionId> 輪詢狀態,confirmed 時保存賬號並啓用。
驗證¶
經過上面的步驟,給機器人發一條私聊消息(如「今天有什麼安排」),agent 會像在 GUI 裏一樣回答,回覆以純文本發回。
配置¶
運行開關集中在 ~/.dsh/settings.yaml 的 wechat-bridge: 段,編輯保存即熱生效:
wechat-bridge:
enabled: true
mediaEnabled: true
defaultProvider: ''
defaultModel: ''
allowedPeers: ''
notifyEnabled: true
enabled:橋接總開關。mediaEnabled:是否接收入站媒體。defaultProvider、defaultModel:橋接會話使用的 provider 與 model。allowedPeers:入站白名單,填機器人內部聯繫人 ID,留空即拒絕所有人。notifyEnabled:單向會話通知開關。
allowedPeers 填的不是微信號,也不是暱稱,而是微信機器人協議的內部聯繫人 ID(一串奇怪字符)。獲取方式:讓對方給機器人發一條消息,機器人會自動回覆該 ID,該 ID 也會出現在 Settings 頁籤的 chip 列表裏。
常用命令¶
斜槓命令在任意 DSH 會話可用:
/wechat status # 查看狀態
/wechat enable # 啓用
/wechat disable # 停用
/wechat accounts # 列出已配置賬號
/wechat qrlogin # 掃碼登錄
故障排查:errcode -14¶
getupdates 返回 errcode -14(session timeout)表示 bot 會話在服務端過期:輪詢暫停 60 分鐘,Settings 顯示紅字警告,恢復方式是重新掃碼綁定。
context_token 過期時,通知發送失敗會進入暫存隊列(至多 20 條、24 小時),下次入站消息後自動合併補發。
適用場景與注意¶
適合已經把 DSH 當日常工作臺的人:任務在 dsh web 裏跑,人在外面時用微信發消息、收回復和會話簡訊。
幾點注意:
- 插件以當前 dsh 進程權限運行,安裝前建議閱讀插件源碼並確認許可證(本項目爲 MIT)。
allowedPeers是默認拒絕的閘門:留空 = 拒絕所有人,而不是放行所有人。- 回覆分片至多 4096 字符 × 5 段,超出部分會被截斷。
ask_user_question等交互式選項工具在微信會話中不可用,交互改爲純文本一問一答。- 如果之前用過舊的 weixin-bridge,數據目錄與設置段會一次性自動更名爲
wechat-*。
小結¶
這個插件把微信私聊變成 DSH agent 的輸入輸出通道:白名單控制誰能驅動會話,每日會話保持隔離,輪詢結構上崩潰安全,通知機制補齊了會話進展的觸達。裝好插件、掃碼綁定、發一條消息,三步就能跑通。
- GitHub:https://github.com/NattoCB/dsh-plugin-wechat-bridge
- 社區目錄頁:https://www.skillhub.cn/plugins/NattoCB/dsh-plugin-wechat-bridge