dsh-WeCom-notify:在 DeepSeek Harness 中用企業微信接收任務通知

前言

在 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 設置 → 企業微信通知:

  1. 粘貼 webhook key,可填多個,多個羣同時通知。
  2. 點擊「發送測試消息」驗證。
  3. 點擊「保存配置」,保存後立即生效。

設置面板保存後,配置會持久化到:

<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。

羽毛球分组比赛记分
小程序二维码

欢迎使用《羽毛球分组比赛记分》微信小程序

小夜