前言¶
在 DeepSeek Harness(DSH)裏跑 Agent 任務時,一個 turn 可能持續多步工具調用,進程在後臺跑完或失敗時,如果不盯着客戶端,很容易錯過結果。網絡抖動、模型請求超時或限流還會讓任務直接停在 error,需要手動再發一條「繼續」才能續跑。
下面介紹的 dsh-task-notifier(npm:@lizhijie429/dsh-task-notifier,維護者 lizhijie429,分類:工作流)只做兩件事:根據持久化會話事件判斷任務結束態並調用系統通知;在符合配置的可繼續失敗下,自動向當前會話發送「繼續」。它不猜測運行中狀態,只讀 turn/start、llm/retry、turn/end 等事件。
這是什麼¶
DSH Host 側 Cordis 插件,零運行時依賴,純 ESM 單目錄結構,可按絕對路徑掛載,無需構建。當前 package 版本爲 0.2.5,engines.dsh 要求 DSH >=0.2.1-0 <0.3.0,許可證 MIT。
通知通道按平臺選擇:Windows Toast(PowerShell 5.1 WinRT,註冊 DSH.TaskNotifier AUMID,使用 DSH 圖標與名稱,而非「Windows PowerShell」)、macOS osascript、Linux notify-send,也可設爲 log 或 none 降級。另可訂閱審批事件,在 DSH 審批面板需要你授權且未在寬限期內被自動處理時發系統提醒。
核心功能¶
任務狀態與通知¶
插件把一個任務等同於一個 turn:多步工具仍只在該 turn/end 時發一次完成/失敗類通知(除非單獨開啓逐步或開始通知)。
狀態來自 turn/end 的 reason.kind,例如:
completed/max-tokens:完成或觸達輸出上限(可配置是否通知)error/blocked/interrupted:失敗或阻塞(默認可通知錯誤)aborted:用戶取消(默認不通知)
默認開啓 notifyOnComplete、notifyOnError;notifyOnStart、notifyOnStep 默認關閉,避免刷屏。默認不通知子代理會話(notifySubagents: false);子代理也不會自動繼續。
可選 notifyOnApproval:持久化 approval/asked 後,若 approvalGraceMs(默認 1000ms)內沒有 approval/decided,則發「需要授權」類系統通知;授權仍須在 DSH 審批面板完成。
自動繼續¶
在 autoContinue.enabled 爲 true 時,任務以 error 結束且失敗碼落在 autoContinue.retryableCodes(網絡/模型請求類等)內,插件會在 Agent 進入 idle 時通過 agent.followup() 入隊一條用戶消息(默認文案「繼續」),而不是在 turn/end 監聽器裏直接 append,以避免 Session 重入限制。
默認 requireRetryExhausted: false:多數網絡與模型請求類失敗會直接嘗試繼續;設爲 true 時更嚴格,需結合 llm/retry 鏈判定重試預算是否耗盡。每個任務最多 maxAttempts 次(默認 3,硬上限 50),兩次繼續之間受 cooldownMs(默認 5000)約束。若 inbox 已有下一輪驅動條目,會跳過繼續並記錄,避免與 goal/schedule 等衝突。
自動消息的 source 爲 { kind: 'task-notifier', plugin: 'task-notifier' },符合 DSH 持久化 v4 對 producer kind 的要求。
調試與配置校驗¶
非法配置項不會拋錯:逐項回退默認值,寫 Host 日誌與 JSONL 調試日誌(默認 <插件目錄>/state/task-notifier.log,256KB 輪轉)。掛載成功時日誌中應出現 plugin.mounted。
安裝與啓用¶
DSH 桌面端 desktop profile 被 Electron 佔用,dsh plugin 等 CLI 無法直接改它,推薦編輯用戶補丁層並指向插件 index.mjs 的絕對路徑。普通 profile(web / headless / 自建)可用 dsh plugin add。
方式一:desktop profile(推薦桌面端)¶
編輯 $env:USERPROFILE\.dsh\profiles\desktop\cordis.patch.yml(Windows 示例,將 <user> 換成你的用戶名),追加:
- insert:
- id: task-notifier
name: 'C:\Users\<user>\.dsh\plugins\dsh-task-notifier\index.mjs'
config:
channel: auto
logFile: 'C:\Users\<user>\.dsh\plugins\dsh-task-notifier\state\task-notifier.log'
notifyOnStart: false
notifyOnComplete: true
notifyOnError: true
notifyOnAbort: false
notifyOnStep: false
notifySubagents: false
titlePrefix: DSH
maxBodyChars: 240
autoContinue:
enabled: true
message: 繼續
maxAttempts: 3
cooldownMs: 5000
requireRetryExhausted: false
保存後,desktop 的 patchReload 缺省爲 live 時通常熱加載;未生效則重啓 DeepSeek Harness。驗證:查看 state/task-notifier.log 是否出現 plugin.mounted。
方式二:bundle 安裝到 web / headless 等 profile¶
已發佈到 npm 時:
dsh plugin --profile web add "@lizhijie429/dsh-task-notifier"
從 GitHub 安裝(無構建步驟):
dsh plugin --profile web add "github:lizhijie429/dsh-task-notifier"
本地目錄安裝:
cd "$env:USERPROFILE\.dsh\plugins\dsh-task-notifier"
dsh plugin --profile web add "file:$PWD"
package.json 的 dsh.bundle.patch 會加載 cordis.patch.yml 中的默認配置(插件 id 爲 task-notifier)。
方式三:臨時驗證(不改 profile)¶
$pluginDir = "$env:USERPROFILE\.dsh\plugins\dsh-task-notifier"
$patch = @"
- insert:
- id: task-notifier
name: '$pluginDir\index.mjs'
config:
channel: log
logFile: '$pluginDir\state\e2e.log'
autoContinue: { enabled: true, message: 繼續, maxAttempts: 2, cooldownMs: 0 }
"@
Set-Content -Path "$env:TEMP\task-notifier.patch.yml" -Value $patch -Encoding UTF8
dsh headless --patch "$env:TEMP\task-notifier.patch.yml" "只回復 OK,不要調用工具。"
典型配置片段¶
僅想收通知、關閉自動繼續時,可在同一 id: task-notifier 的 config 中覆蓋:
autoContinue:
enabled: false
僅在網絡類失敗且重試耗盡後才自動繼續:
autoContinue:
enabled: true
requireRetryExhausted: true
鎖屏安全:includePreview 默認爲 false,不在通知正文附帶模型輸出預覽。
完整字段見倉庫 README 配置表(如 channel、approvalGraceMs、autoContinue.respectProviderRetryAfter 等)。
適用場景與注意¶
適合長時間 headless / 桌面後臺跑 Agent、需要系統級提醒任務完成或失敗,並希望在 TRANSPORT、TIMEOUT、RATE_LIMIT 等可恢復錯誤後少點一次「繼續」的場景。需要盯審批時,可配合 notifyOnApproval 減少漏看授權。
使用前請注意:
- 插件以當前 DSH 進程權限運行,會執行平臺通知命令(PowerShell、
osascript、notify-send等);安裝前請閱讀 GitHub 源碼 與 MIT 許可證,確認符合你的環境策略。 AUTH、UNKNOWN(且無網絡特徵)等失敗默認不會自動繼續;自動繼續有次數與冷卻上限,不能替代正確的 API 密鑰或模型配置。- 社區插件目錄 SkillHub 條目 爲獨立站點展示,與 DeepSeek / 幻方無官方從屬關係;DSH 生態主張「一切皆插件」,本插件是社區維護的工作流類擴展。
結尾¶
dsh-task-notifier 用持久化事件驅動通知與續跑,Windows 上 Toast 以 DSH 品牌展示,並覆蓋 Linux/macOS 與純日誌通道。按需掛載到 desktop 或通過 dsh plugin add 裝入 profile 即可。