dsh-gateway-notify:長任務結束、失敗或待審批時推送到手機與羣聊

前言

用 DeepSeek Harness(DSH)跑智能體時,一輪對話可能跑幾分鐘,也可能在工具審批處停住等你點同意。人不在電腦前時,很難知道任務是已經跑完、報錯退出,還是卡在審批上。自己寫腳本輪詢日誌成本高,也不如「事件到了就推一條」來得直接。

下面介紹社區插件 dsh-gateway-notify(維護者 YanYunCY,分類:聯網工具)。它在 DSH 上報的會話事件上監聽,在合適時機向 ntfy、Bark、Gotify、Server醬、飛書、釘釘、企業微信、Telegram 或自定義 webhook 發一條通知。默認不把提示詞和回覆正文發出去,只帶項目目錄名、耗時、模型等摘要信息。

該插件由 @magpie-community/gateway-notify(MIT)移植而來,通道實現基本沿用原項目;與 magpie 網關版相比,它直接訂閱 DSH 的 session/event 流,並增加了審批等待推送與 env:NAME 引用密鑰的方式。

這是什麼

dsh-gateway-notify 是 DeepSeek Harness 的 Cordis 插件(npm 包名 dsh-gateway-notify,當前資料中版本爲 0.1.0)。源碼與說明見 GitHub,社區目錄頁:SkillHub 插件頁。

它解決的是:在 agent 一輪 turn 跑夠久後正常結束、任意時長內失敗、或審批超時未處理時,主動推送到你配置的通道,便於離開鍵盤後仍能跟進任務狀態。

什麼時候會推送

插件按 DSH 事件決定是否發送;同一 session 在 cooldownSeconds 窗口內最多推一次。子 agent 會話(有 parentSession)默認靜默,除非打開 subagents: true。

dsh 事件 是否推送
turn/end,原因 completed 或 max-tokens,且本輪運行時間 ≥ minMinutes 推送完成(含耗時與模型)
turn/end,原因 error 推送失敗(含錯誤信息;任意時長,需 errors 爲 true)
approval/asked 在 approvalDelaySeconds 內未決定 推送待審批(含工具名)
turn/end,原因 aborted 不推送(用戶主動停止)
blocked、interrupted、forked 不推送

安裝與依賴

安裝前需滿足 Node ≥ 24.9(與 dsh 要求一致)。資料中在 dsh 0.2.1-rc.5 下測試過。

在 web profile 下添加插件:

dsh plugin --profile web add dsh-gateway-notify

插件以當前 dsh 進程權限運行;安裝前建議自行查看倉庫源碼與 MIT 許可證(README 中註明含 magpie 與原作者版權行)。

配置

在 $DSH_HOME/profiles/web/cordis.patch.yml 中爲 gateway-notify 寫入 config。密鑰、webhook 等應放在環境變量裏,字段寫成 env:變量名,避免明文進 profile。

示例(節選多種通道):

# $DSH_HOME/profiles/web/cordis.patch.yml
- id: gateway-notify
  config:
    minMinutes: 3
    channels:
      - type: ntfy
        topic: env:NTFY_TOPIC          # 任意字符串字段都可用 env:NAME
        token: env:NTFY_TOKEN          # 可選,受保護 topic 時使用
      - type: bark
        key: env:BARK_KEY
      - type: feishu
        webhook: env:FEISHU_WEBHOOK
        secret: env:FEISHU_SECRET

常用選項(默認值以 README 爲準):

選項 默認 含義
channels [] 推送目標列表
minMinutes 3 僅當 turn 至少運行這麼久才推送「正常結束」
cooldownSeconds 30 同一 session 在此秒數內最多一條
errors true 失敗 turn 是否推送(可很短)
approvals true 是否推送長時間未處理的審批
approvalDelaySeconds 60 審批等待多久後推送
subagents false 是否爲子 agent 會話推送
includeText false 是否在通知中帶最終回覆開頭
maxTextLength 200 includeText 時截取長度
lang en 通知文案語言:en 或 zh

某條通道暫時不用時,可在該 channel 上設 off: true,保留配置但不發送。

支持的通道

type 必填 可選
ntfy topic server(默認 ntfy.sh)、token、priority、tags
bark key server(默認 api.day.app)、group、sound
gotify server、token priority
serverchan key(SCT… 或 sctp…)
feishu webhook secret
dingtalk webhook secret
wecom webhook
telegram token、chatId server
webhook url headers;請求體爲 { title, body, event }

每條通道對應一次到你配置的 HTTPS 服務的 POST;README 說明默認不會把數據發到其它地方。

隱私與適用注意

默認推送內容僅包含項目文件夾名、耗時、模型,失敗時加上錯誤信息;除非開啓 includeText,否則不包含提示詞與完整回覆。

適合:本地或遠程長時間跑 DSH agent、需要手機或 IM 提醒完成/失敗/待審批的開發者。不適合指望「所有 session 變化都通知」的場景——主動停止、blocked 等事件 deliberately 不推。

DSH 生態強調「一切皆插件」;SkillHub 等社區目錄爲獨立站點,與 DeepSeek / 幻方無官方從屬關係。本文事實均來自上述倉庫 README 與 package 信息;使用前請以倉庫最新文檔爲準。

鏈接

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

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

小夜