dsh-task-notifier:任務結束系統通知與失敗自動繼續

前言

在 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 即可。

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

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

小夜