前言¶
用 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 信息;使用前請以倉庫最新文檔爲準。