dsh-system-notify:在 agent 運行時用 Windows 系統通知提醒授權與任務狀態

前言

DeepSeek Harness(DSH)桌面端在跑 agent 時,界面若不在前臺,很多關鍵狀態不會主動打斷你:會話在等待授權、要操控本機、一輪任務結束或失敗、會話被終止——往往需要一直盯着窗口。社區插件 dsh-system-notify(維護者 linanbuan)在 agent 運行時監聽已有 cordis / 會話事件,通過 Windows App SDK 彈出系統通知;不註冊工具、不進 function calling、不改 system prompt,觸發與模型輸出無關。

這是什麼

  • 包名:@local/dsh-system-notify(版本 1.0.0,MIT)
  • 類型:宿主插件(bundle 經 cordis.patch.yml 掛入 profile),無客戶端半邊
  • 環境:Windows 10 1809+ / Windows 11,DSH 桌面端;Node >=20;@deepseek-ai/cordis ^4.0.1
  • 依賴:宿主側零 npm 依賴;通知發送依賴 native/ 下基於 Windows App SDK 與 .NET 的小助手

目錄頁:skillhub.cn/plugins/linanbuan/dsh-system-notify
源碼與說明:github.com/linanbuan/dsh-system-notify

核心功能

下面按「你在等什麼」和「檢測點從哪裏來」說明。

通知覆蓋的場景

你在等的事 裝上之後(示意)
agent 要求授權(提權、寫文件、跑命令) 「會話請求授權」,帶工具名與原因
agent 要操控電腦(OpenCU 等) 「電腦操控請求」等單獨規則
一輪任務跑完 「任務完成」,帶會話名與輪次
一輪失敗 / 被阻塞 / 上下文超限 「任務未完成」,帶錯誤碼與消息
會話被終止 「會話已終止」(僅在終止時仍有輪次在跑時默認彈)

緊急程度會映射到 Windows 通知場景與提示音:授權、失敗類多爲 urgent,完成類爲 default。應用欄標題默認可配爲 DeepSeek Harness。

檢測點(不新增「讓模型做決定」的環節)

檢測點 來源 默認
approval/asked / approval/decided session/event(審批服務) 開
turn/end session/event(agent-loop 收尾) 開
session/disposed cordis 事件 開
agent/error cordis 事件 關
tool/call session/event(工具調用前) 開

電腦操控除審批鏈外,還會在 tool/call 上匹配 computer_use / opencu 等(OpenCU 不經過 DSH 審批服務時的掛點);該規則默認 5 分鐘冷卻,避免同會話連續調用刷屏。

兩條默認行爲:

  1. 授權延遲:scope.approvalGraceMs 默認 1500 ms,避免「剛彈出審批你已在界面點完」的誤擾。
  2. 子會話:scope.includeChildSessions 默認 false,主 agent 拉起 subagent 時默認不逐項轟炸。

監聽器只讀,不改審批、不 append 事件;合約測試禁止插件訪問 ctx.tool / ctx.systemPrompt。

安裝與啓用

插件是標準 DSH bundle:package.json 裏 dsh.bundle.patch 指向 cordis.patch.yml。

方式一:桌面端插件管理器(推薦)

在 DSH 桌面端用插件管理器安裝本包目錄,寫入當前 profile 的 dsh.profile.bundles,無需命令行。

方式二:手工寫入 profile

在 profile 的 package.json 中增加依賴與 bundle(路徑換成本機插件目錄):

{
  "dependencies": {
    "@local/dsh-system-notify": "link:<本插件目錄的絕對路徑>"
  },
  "dsh": {
    "profile": {
      "bundles": ["...", "@local/dsh-system-notify"]
    }
  }
}

在 profile 目錄安裝依賴後重啓 DSH。

首次使用:編譯原生通知助手

Node 無法直接發 Windows 系統通知;發送端在 native/。

  • 自動(默認 sink.autoBuild: true):首次發送時執行 native/build.ps1,若無則 dotnet build native/*.csproj -c Release。
  • 手動(需要 .NET SDK 10,目標 net10.0-windows10.0.19041.0):
pwsh -NoProfile -File native/build.ps1

產物在 native/bin/Release/。可運行:

native/bin/Release/DshNotificationSink.exe --selftest

最小配置

在 profile 的 cordis.patch.yml 中按 id 覆蓋:

- id: system-notify
  config:
    enabled: true

其餘字段均有默認值;sink.provider 可選 windows | log | none,Windows 失敗時可 fallbackProvider: log。

典型用法

規則與開關

內置多條有序規則(授權、電腦操控、turn 結束、會話結束等)。match 命中但 enabled: false 會吞掉該條通知,不會落到更寬規則上。自定義 rules 會整體替換內置表,保留內置行爲需一併抄寫。

佔位符示例:{session} {tool} {reasonText} {turn} 等,用於 title / body 模板。

節流與靜音

全局閘門包括去重窗口、最小間隔、每分鐘上限、可選 quietHours。例如夜間只放行高優先級授權:

throttle:
  quietHours:
    start: '23:00'
    end: '07:00'
    allowHighSeverity: true

診斷(桌面端已掛 connection 服務時)

curl -X POST http://127.0.0.1:<端口>/api/system-notify/status
curl -X POST http://127.0.0.1:<端口>/api/system-notify/test -d "{}"
curl -X POST http://127.0.0.1:<端口>/api/system-notify/throttle/reset

排障時先看 /status 裏 sink.detail.helper.located 與 counters.skipped(未構建助手、子會話被過濾、被節流等)。

適用場景與注意

適合:在 Windows 上用 DSH 桌面端跑 agent,希望離開主窗口時仍能通過系統通知感知授權、電腦操控、輪次結束與會話終止。

限制與注意:

  • 僅 Windows;Linux / macOS 不適用。
  • 插件隨當前 DSH 進程權限運行;安裝前請閱讀倉庫源碼與 MIT 許可證,自行評估信任邊界。
  • 社區目錄 skillhub.cn 與 DeepSeek / 幻方無官方從屬關係;DSH 生態奉行「一切皆插件」,本介紹事實以倉庫 README 爲準。

結尾

dsh-system-notify 把通知掛在已有運行時事件上,與 LLM 輸出解耦,適合需要「少盯窗口、關鍵狀態仍能被系統打斷」的 Windows DSH 用戶。進一步細節見 GitHub README 與 插件目錄頁。

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

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

小夜