dsh-notice:DSH 每輪任務結束時的系統通知

前言

DeepSeek Harness(DSH)裏,模型每跑完一輪會停手等你下一句。長任務切去寫文檔、或同時開幾個會話時,很容易不知道哪一輪已經結束;出錯或被中斷時,也可能誤以爲還在跑。DSH 桌面版自帶的通知主要是應用級提示(例如新版本、需要重啓),並不覆蓋「這一輪任務處理完成」這一格。下面介紹社區插件 dsh-notice(維護者 yimengsuper2432),在每輪結束時向本機發系統通知,並可在點擊通知時把 DSH 窗口拉回前臺。插件分類爲客戶端,當前在 GitHub 上星標爲 0;許可證 MIT,版本見倉庫 package.json(資料中爲 0.4.0)。

這是什麼

dsh-notice 監聽 DSH 每輪任務結束(模型停手、等待下一輪輸入),按結束原因決定是否彈系統通知:正常完成、出錯、被中斷可分別開關;默認只在窗口不在前臺時提醒,並可設最短耗時門檻,避免幾秒就結束的一輪反覆打斷。通知裏會帶上項目/會話信息、輪次、用時,以及助手最後一條回覆的摘要。Windows、macOS、Linux 通用,依賴 DSH ≥ 0.2.0(README 徽章)、Node ≥ 18、@deepseek-ai/cordis ^4.0.1。

DeepSeek Harness 生態主張「一切皆插件」;SkillHub 目錄頁 是社區站點,與 DeepSeek / 幻方無官方從屬關係。

通知內容與展示邏輯

通知大致爲三行結構:標題行帶會話標題與狀態詞(已完成 / 出錯 / 中斷);正文第一行爲「模型 · 第 N 輪 · 用時」,第二行起爲返回內容摘要。

  • 會話標題來自 DSH 的 session/title;尚無標題時用項目目錄名。
  • 模型來自每輪 request/header 裏的 config.model;拿不到則第二行只保留輪次與用時。
  • 返回內容爲這一輪助手最後一條文本,壓成一行後按 snippetChars 截斷(插件 patch 默認 90 字);出錯時改爲錯誤原因。

README 中四組開關與常見痛點一一對應:按結束原因分別開關、僅窗口不在前臺時提醒、最短耗時門檻、子任務默認靜默(includeSubagents 默認 false)。

兩條通道:頁面通道與本機原生命令

桌面版宿主可能是獨立 Node 進程(ELECTRON_RUN_AS_NODE),並非 Electron 主進程,直接拉子進程發通知可能被策略攔截。因此插件優先走頁面通道:

  1. 頁面加載時用 EventSource 連接 GET /api/dsh-notice-v1/events;
  2. 宿主判定「該提示了」後把標題/正文推給已連接的頁面;
  3. 頁面用 Web Notification 彈出,在桌面版中即本機系統通知。

preferClient 默認爲 true:只要有頁面連着就走這條路,設置頁會顯示「已連接的頁面:N」。關閉該選項,或僅 dsh web / 終端跑、窗口未開時,回退到本機原生命令(Windows PowerShell、macOS osascript、Linux notify-send 等)。backend 默認 auto,按平臺串聯 electron 與對應原生後端。

點擊通知回到 DSH:渲染進程裏的 window.focus() 在窗口最小化或被遮擋時可能不夠,頁面點擊時會再調 POST /api/dsh-notice-v1/focus,由宿主執行恢復與搶前臺。原生回退路徑(如部分 WinRT toast、notify-send)往往沒有點擊回調;若要「點一下回到 DSH」,需保持窗口開着、讓頁面通道生效。

配置

兩層配置:cordis.patch.yml 裏的 config 爲默認值,<DSH_HOME>/dsh-notice.json(設置頁保存)覆蓋前者。改設置頁任意一項會立刻落盤,無需重啓。

鍵 默認 說明
enabled true 總開關
onCompleted true 正常完成時提示
onError true 出錯時提示
onAborted false 被中斷時提示
includeSubagents false 子任務也提示
minSeconds 0 短於該秒數的一輪不提示
onlyWhenUnfocused true 僅窗口不在前臺時提示
silent false 靜音
snippetChars 90 正文摘要字數,0 表示不帶
backend auto auto / electron / powershell / osascript / notify-send / none
preferClient true 有頁面連接時由頁面彈通知

設置頁還提供「發送診斷」:宿主身份、PowerShell 是否可用、最近一次子進程錯誤等,並支持「診斷一次」與 POST /api/dsh-notice-v1/test 發測試通知。

本機 HTTP 接口

接口僅接受本機迴環地址請求:

  • GET /api/dsh-notice-v1/state — 配置、平臺、後端就緒狀態、最近發送與計數
  • GET /api/dsh-notice-v1/events — SSE,頁面收通知
  • POST /api/dsh-notice-v1/config — 修改部分配置並落盤
  • POST /api/dsh-notice-v1/focus — 將 DSH 窗口拉回前臺
  • POST /api/dsh-notice-v1/test — 立即發測試通知
  • POST /api/dsh-notice-v1/probe — 僅走本機原生命令診斷(約 2.6 秒返回子進程結果)

例如在本機驗證搶前臺(端口以實際 DSH 爲準):

curl -X POST http://127.0.0.1:<端口>/api/dsh-notice-v1/focus

安裝與啓用

README 未提供 dsh plugin add 一類一鍵命令,安裝方式爲手動接入 profile:

  1. 將插件目錄放到 <DSH_HOME>/plugins/dsh-notice;
  2. 在 profile 的 package.json 增加 "dsh-notice": "link:<絕對路徑>" 與 dsh.profile.bundles 條目;
  3. 使用 DSH 運行時自帶的 node + pnpm,在 profile 目錄執行 install;
  4. 重啓 DSH 生效。

Linux 若需原生回退,需安裝 libnotify:Debian/Ubuntu 使用 apt install libnotify-bin,Fedora 使用 dnf install libnotify,Arch 使用 pacman -S libnotify。macOS 自帶 osascript,無需額外安裝。

插件以當前 DSH 進程權限運行,安裝前請自行查看倉庫源碼與 MIT 許可證,確認符合你的環境與安全策略。

典型用法與自檢

日常使用:安裝並啓用後,保持桌面版窗口打開(推薦,以便頁面通道與點擊回前臺);切到其他應用讓 DSH 在後臺跑長任務,輪次結束後應收到系統通知。可在設置頁調整「僅後臺提醒」「最短秒數」「完成/出錯/中斷」等開關;短輪次可用 minSeconds 過濾。

倉庫提供的自檢命令:

node --check lib/index.js
node --check lib/client.js
node test.mjs

適用場景與已知邊界

適合:長時間單輪或多會話並行、需要離開屏幕又想知道「停手了沒」的 DSH 用戶;三平臺桌面或混合 dsh web 場景,可按 backend / preferClient 調試。

邊界(來自 README):

  • 只覆蓋「一輪結束」,權限確認、工具報錯等中途事件不會單獨通知。
  • 窗口全關時只能靠原生命令;Linux 未裝 libnotify 時可能退到 none,設置頁顯示「未就緒」。
  • 長回答僅截 snippetChars 字,摘要不換行。
  • 發送失敗不重試、不打斷任務,僅記錄原因供診斷查看。

結尾

dsh-notice 補的是 DSH 默認通知裏缺失的「每輪任務結束」提醒,並通過頁面通道與本機回退兼顧三平臺;配合前臺判斷與按原因開關,減少無效打擾。更多信息見 SkillHub 目錄頁 與 GitHub 倉庫。

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

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

小夜