前言¶
在 DeepSeek Harness(dsh)裏,goal 任務常常需要運行一段時間。對開發者來說,比較實際的訴求是:goal 完成或阻塞時能收到提示,每輪 agent 回覆結束後能看到摘要,而不需要一直盯終端,也不希望完全依賴模型“記得調用工具”。
已有 dsh-wechat-notify 嘗試過用第三方通道推送。本文介紹 GuZhengSVT 的 dsh-WeCom-notify:它改走企業微信官方羣機器人 webhook,在 dsh 的關鍵節點自動推送通知,並提供 wechat_notify 工具。
這是什麼¶
dsh-WeCom-notify 是 DeepSeek Harness(dsh)插件。它通過企業微信官方羣機器人 webhook(qyapi.weixin.qq.com),在 goal 完成/阻塞和每輪對話完成時自動推送通知,並暴露 wechat_notify 工具,供 agent 主動發送進度。
插件由 GuZhengSVT 維護,許可證爲 MIT。通知邏輯基於事件驅動,訂閱 session/event 與 goal/changed,不依賴 LLM 主動調用;未配置 webhook key 時插件正常加載,並降級爲日誌提示。
核心能力¶
goal任務完成/阻塞時自動推送。- 每輪對話完成時自動推送該輪 agent 回覆總結。
- 提供
wechat_notify工具,供 agent 主動發進度。 - 支持多個 webhook key,一條通知同時發送到所有已配置羣。
- 支持
mentionUserid,在通知中 @ 指定成員。 - 提供
dsh 設置 → 企業微信通知面板,粘貼 key、保存後熱生效。 - 異步
fetch發送,不阻塞事件循環。 - 內置串行隊列、節流、內容去重、指數退避重試、超時控制。
- UTF-8 按碼點截斷,避免截斷 emoji 代理對;同時做 markdown 轉義。
- 單條消息上限 4096 字節,默認 3800;節流默認 10000ms,去重默認 30000ms。
安裝與啓用¶
前置條件¶
- DeepSeek Harness(dsh)運行環境。插件的
peerDependencies包括:@deepseek-ai/cordis、@deepseek-ai/dsh-tools、@deepseek-ai/schemastery、@deepseek-ai/dsh-client-runtime、@deepseek-ai/dsh-client-ui-slots。 - 一個企業微信羣,以及羣機器人 webhook。添加羣機器人後,複製 webhook 地址中的
key。
構建插件¶
先構建插件:
npm install && npm run build
構建會產出 host 入口 lib/index.js 和設置面板 lib/client.js。
方式 A:bundle 裝配¶
如果需要使用設置面板,推薦用 bundle 裝配。將插件鏈接到 profile 的 node_modules:
ln -s /絕對/路徑/dsh-WeCom-notify ~/.dsh/profiles/web/node_modules/dsh-wecom-notify
再在 package.json 中聲明 dependencies 與 dsh.profile.bundles,加入 dsh-wecom-notify。
完成裝配後,重啓 dsh web。啓動日誌中出現 [wechat-notify] plugin loaded 表示插件已加載。
方式 B:patch 掛載¶
如果只需要 host 側通知功能,也可以在 ~/.dsh/profiles/web/cordis.patch.yml 中掛載:
- insert:
- id: wechat-notify
name: 'file:///絕對/路徑/dsh-WeCom-notify/lib/index.js'
config: {}
注意:方式 B 的 file:// 入口不帶設置面板;設置面板需要通過方式 A 的 bundle 裝配加載。
一鍵寫入 patch¶
也可以使用倉庫提供的安裝腳本:
npm run install-dsh
該命令會構建並寫入 patch 配置,默認寫入 ~/.dsh/profiles/web/,屬於方式 B。
典型用法¶
通過設置面板配置¶
打開 dsh 設置 → 企業微信通知:
- 粘貼 webhook key,可填多個,多個羣同時通知。
- 點擊「發送測試消息」驗證。
- 點擊「保存配置」,保存後立即生效。
設置面板保存後,配置會持久化到:
<DSH_HOME>/wecom-notify/config.json
文件權限爲 0600。當該文件存在時,以文件中的配置爲準;刪除該文件可回到靜態配置或環境變量配置。
配置優先級¶
配置讀取優先級如下:
設置面板文件 > cordis.yml config > 環境變量 > 默認值
cordis.yml 靜態配置¶
也可以在 cordis.patch.yml 的 config 中寫入:
- insert:
- id: wechat-notify
name: 'file:///絕對/路徑/dsh-WeCom-notify/lib/index.js'
config:
webhookKeys:
- '第一個羣機器人 webhook key'
- '第二個羣機器人 webhook key'
可選字段包括 webhookUrl、mentionUserid、minIntervalMs、dedupeWindowMs、triggerOnAgentIdle、turnSummaryEnabled、maxBytes。
環境變量¶
未使用設置面板或靜態配置時,也可以使用環境變量:
WECHAT_WEBHOOK_KEY=<你的key> node scripts/smoke.ts
WECHAT_WEBHOOK_KEYS='key1,key2' node scripts/smoke.ts
相關環境變量包括 WECHAT_WEBHOOK_KEYS、WECHAT_WEBHOOK_KEY、WECHAT_WEBHOOK_URL、WECHAT_MENTION_USERID、NOTIFY_MIN_INTERVAL_MS、NOTIFY_DEDUPE_WINDOW_MS、NOTIFY_TRIGGER_AGENT_IDLE、NOTIFY_TURN_SUMMARY、NOTIFY_MAX_BYTES。
驗證¶
運行測試與類型檢查:
npm test
npm run typecheck
如果已經完成配置,也可以給 dsh 一個帶 goal 的任務,在 goal 完成或阻塞時查看企業微信羣是否收到通知。
適用場景與注意¶
適合以下情況:
- dsh 長時間運行
goal,希望完成/阻塞時被動接收通知。 - 希望每輪對話完成後收到 agent 回覆摘要。
- 需要把同一份通知發到多個企業微信羣。
- 希望使用企業微信官方羣機器人 webhook,而不是第三方中轉通道。
需要注意:
- 插件運行在 dsh 進程內,擁有當前 dsh 進程可見的權限。安裝前應檢查源碼與許可證;本插件許可證爲
MIT。 - 倉庫本身不包含本機路徑與密鑰;key 僅保存在用戶數據目錄。
- 未配置 webhook key 時,插件會正常加載,但通知會降級爲日誌提示,不會向企業微信發送。
- 方式 B 的
file://掛載不包含設置面板;需要面板時使用方式 A bundle 裝配。 - 設置面板生成的
config.json優先級最高。若修改了cordis.yml或環境變量但未生效,可檢查<DSH_HOME>/wecom-notify/config.json是否仍存在。 - 企業微信 webhook 消息有字節限制。本插件單條上限 4096 字節,默認 3800。
npm install可能因@deepseek-ai/dsh-compact報 404;構建腳本可回退到 DSH checkout 的 tsdown。
結尾¶
dsh-WeCom-notify 把 dsh 的 goal 狀態和每輪對話結果接入企業微信羣機器人 webhook。它的核心價值在於:事件驅動、自動觸發、多羣通知,並提供設置面板降低配置成本。
倉庫地址:
https://github.com/GuZhengSVT/dsh-WeCom-notify
目錄頁:可在 DeepSeek Harness 社區目錄中按插件名 dsh-WeCom-notify 查找;已覈實資料未提供獨立目錄 URL。