DeepSeek Harness 的核心設計是插件化,但插件本身通常運行在本地或特定網絡環境。當需要在移動端或遠離電腦的環境下操作 Harness 時,直接交互變得困難。dsh-wechat-channel 解決了這個問題,它允許通過微信公衆號發送指令操控 Harness,並將執行結果通過客服消息接口推回微信。
核心功能¶
該插件主要提供以下能力:
- 微信指令控制:在微信內發送消息即可控制 Harness。
- 結果推送:執行結果經客服消息接口推回微信。
- 安全校驗:包含回調簽名校驗以及
openid白名單機制。 - 零運行時依賴:不依賴額外的運行環境。
- 獨立路由:使用獨立前綴
/wechat-mp,避免與同名第三方插件衝突。
安裝與啓用¶
推薦從 npm 安裝。安裝完成後需要重啓 dsh web 進程才能加載新插件。
從 npm 安裝(推薦)
dsh plugin --profile web add dsh-wechat-channel
從本地目錄安裝(開發用)
dsh plugin --profile web add link:<本目錄絕對路徑>
安裝後,DSH Desktop 會自動將插件註冊到 dsh.profile.bundles 中。
配置¶
在 profile 的用戶補丁層 <DSH_HOME>/profiles/web/cordis.patch.yml 中添加配置。以下是標準配置示例:
- id: wechat
config:
# Token 是你自己編的,不是微信給你的。需與公衆號後臺「服務器配置」一致
token: 你的自定義Token
# 測試號頁面的 appID / appsecret(異步回覆必需)
appId: wx********
appSecret: ********
# 回調路徑,默認 /wechat-mp。此路徑需與公網 URL 後綴一致
path: /wechat-mp
# 允許下指令的 openid 白名單(首次使用需留空獲取 openid 後填寫)
allowFrom: []
# 是否開啓白名單驗證
requireWhitelist: true
# Agent 預設配置
agentPreset: standard
# 會話超時時間
turnTimeoutMs: 600000
# 開啓診斷日誌
diagnostics: true
注意:本插件命名 dsh-wechat-channel 是爲了避免與 npm 上另一個同名插件 dsh-wechat(走 iLink 協議)衝突。該同名插件註冊了 /wechat/status 路由,與 DSH 的 webserver 路由衝突會導致本插件靜默失敗。因此本插件使用 /wechat-mp 前綴。
網絡與公網要求¶
微信的消息回調是騰訊服務器主動發起的,因此必須滿足以下條件:
- 回調地址必須公網可達。
- 必須是 HTTPS 協議且擁有有效證書。
- 局域網內手機和電腦處於同一 WiFi 無法滿足要求,騰訊服務器無法訪問內網地址。
局域網替代方案:如果需要在局域網內使用手機操作 DSH,請使用 @linxin666/dsh-remote-web-ui 插件(手機瀏覽器掃碼配對方案),本插件不覆蓋該場景。
隧道配置¶
爲了實現公網訪問,通常需要使用隧道工具。本項目自帶 cloudflared 二進制。
國內網絡注意事項:國內網絡下 QUIC (UDP) 協議常被阻斷,會導致隧道註冊成功但立刻返回 502/530 錯誤。建議使用 http2 協議:
bin/cloudflared.exe tunnel --url http://127.0.0.1:<dsh web 端口> --no-autoupdate --protocol http2
公衆號後臺配置:
1. 將獲取到的臨時地址(如 https://xxxx.trycloudflare.com)作爲 URL。
2. 路徑後綴必須加上插件的 path 配置,即 /wechat-mp。
3. 填入與配置文件中 token 一致的值。
注意:trycloudflare.com 地址是臨時的,重啓會變化。正式環境請使用固定域名。
首次使用與白名單¶
1. 配置白名單:
allowFrom 默認爲空,此時所有人都會被拒絕。首次使用時:
- 在公衆號後臺提交服務器配置(URL 和 Token),確保顯示「配置成功」。
- 關注測試號,發送任意消息。
- 插件會通過客服消息返回你的 openid。
- 將返回的
openid填入配置文件的allowFrom列表中。
2. 重啓服務:
修改配置後,必須重啓 dsh web 進程。
安全模型¶
- 配對即控制:一旦 openid 加入白名單,該設備即擁有完全控制 Harness 的憑據(可執行命令、讀寫文件)。
- 簽名校驗:回調入口包含 SHA1 簽名校驗,錯誤簽名直接 403。
- 狀態端點:
GET <path>/status?key=<token>可用於排查,但絕不回顯 token。
源碼與目錄¶
該插件採用分層結構設計(lib/protocol.js, lib/server.js, lib/wechat-api.js, lib/bridge.js, lib/index.js),各層相互獨立,便於測試與維護。