前言¶
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 主進程,直接拉子進程發通知可能被策略攔截。因此插件優先走頁面通道:
- 頁面加載時用
EventSource連接GET /api/dsh-notice-v1/events; - 宿主判定「該提示了」後把標題/正文推給已連接的頁面;
- 頁面用 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:
- 將插件目錄放到
<DSH_HOME>/plugins/dsh-notice; - 在 profile 的
package.json增加"dsh-notice": "link:<絕對路徑>"與dsh.profile.bundles條目; - 使用 DSH 運行時自帶的 node + pnpm,在 profile 目錄執行
install; - 重啓 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 倉庫。