前言¶
在 DeepSeek Harness(DSH)裏跑智能體時,審批、越權確認、ask_user_question 提問往往散落在不同工作區或會話裏。你一旦切到別的界面或盯着當前對話,很容易錯過需要本人拍板的節點。系統級桌面通知能用,但和 Harness 的會話上下文脫節,也不符合「只在客戶端內完成操作」的習慣。
「哨兵 / Sentinel」(包名 dsh-approval-notifier)是 Macicle77 維護的客戶端類 DSH 插件:當任意工作區、任意會話有待確認事件時,在 DSH 右下角逐條彈出緊湊提醒卡片,可配動畫與提示音;點「去處理」會跳到對應會話,並在左下角短暫反饋「正在處理」。它只負責提醒,不替你做任何決定。
這是什麼¶
- 名稱:
dsh-approval-notifier(展示名:哨兵 / Sentinel) - 維護者:Macicle77(npm 作者字段:macicle)
- 分類:客戶端(
dsh.client,注入 Web 端 UI) - 許可證:MIT(見倉庫
LICENSE) - 當前版本(package.json):2.0.1
- DSH 引擎要求:
dsh滿足>=0.2.1-rc.1 <0.2.2-0 || >=0.2.2-rc.1 <0.3.0-0,Node>=20
插件通過 Host 半觀察待確認流,由瀏覽器半繪製右下角卡片、提示音與窗口標題提示;不使用 Windows 或其它系統通知 API。
核心功能¶
提醒方式與佈局¶
- 提醒落在 Harness 窗口內:右下角卡片 + 提示音 + 可選窗口標題閃爍待確認數量。
- 卡片寬
min(390px, 100vw-36px),多條自下而上堆疊,新卡默認間隔 700ms(可配置);序號自上而下 1→2→3。 - 框架貼對話區測量:右貼滾動條左緣、底邊貼在輸入框(或審批面板)上沿之上,避免擋住底部輸入框和原生「允許一次 / 拒絕」等按鈕;若原生按鈕被卡片蓋住,會在卡片上方繪製青色高亮環,點擊可穿透點到原生按鈕。
去處理與左下反饋¶
點某條「去處理」:該卡約 0.18s 收起後移除,一定跳轉到對應會話(跳轉前保存視圖,其它提醒仍保留)。同時在左下角(工作區列表下方、頭像上方)顯示「✅ 提示有效,正在處理」,5 秒後約 300ms 淡出。
30 秒分級升級(按條獨立)¶
某條 30 秒未處理時,僅該條卡片與文字等比放大(每級約 +6%,封頂約 +30%),提示音換成更急促的升級音,音量逐級增加。升級與「二次提醒」邏輯獨立。
二次提醒¶
點「去處理」後若 10 秒內沒有任何 pointer/滾動/按鍵等操作,且請求仍 pending、頁面可見,會重新彈出該條:紅色警示卡片 +「⚠ 二次提醒」+ 雙響提示音;每條每次「去處理」最多觸發一次二次提醒。
條數多時的緊湊黃條¶
高度不夠時先壓縮單卡;仍放不下時,全部卡片切換爲緊湊黃條(深色底 + 亮黃描邊),只顯示「第幾次 · 項目 · 第幾級」。鼠標懸停某條時該條恢復全文與按鈕(類似 Mac Dock),其餘保持緊湊。升級等級在緊湊模式下仍逐級醒目(琥珀→橙→紅等),升級瞬間該條可抖動約 3 秒。
去重與測試¶
同一待確認事件只生成一張卡(Host 與本地兜底統一去重)。設置頁提供測試提醒:默認每 3 秒連續彈 3 條,可驗證彈出順序與二次提醒。
配置與熱更新¶
全部設置在 Plugins → Installed plugins → 哨兵 bundle 配置頁,經官方 Host Config(volatile 字段)寫入 profile 的 cordis.patch.yml,保存後 HMR 立即生效;無浮動設置面板。本地圖片/音頻上傳目錄爲 $DSH_HOME/approval-notifier/assets/($DSH_HOME 默認 ~/.dsh)。
主要配置項(摘自 README 表格):
| 字段 | 默認 | 說明 |
|---|---|---|
| 提醒品牌名 | 哨兵 | 通知/標題裏顯示的名字 |
| 彈出動畫 / 逐條間隔 | 向上彈出 / 700ms | 6 種預設 + 預覽 |
| 自定義動畫圖片 | 無 | 網圖 URL 或本地上傳(≤3MB) |
| 首次提示音 / 音量 | 叮咚 / 0.6 | 6 種預設;可自定義 URL/本地(≤5MB) |
| 30 秒升級 | 開 / 30s / 5 級 / 急促警報 | 僅放大該條 |
| 二次提醒 | 開 / 10s | 點去處理後無操作才觸發 |
| 標題提示 | 開 | 窗口標題閃爍待確認數量 |
還可配置:升級開關/間隔/級數/升級音、自定義提示音等(見 README「可配置」一節)。
安裝與啓用¶
推薦走 DSH 官方插件管理器,不要憑倉庫名手拼 CLI 安裝命令。
- 打開 DSH 側邊欄 → Plugins → Install / Add plugin。
- 若包已發佈到 npm:填入包名
dsh-approval-notifier,或在插件市場 Discover 一鍵安裝(若已收錄)。 - 本地/離線:填 tarball 絕對路徑(倉庫
node tools/package.mjs產出dist/dsh-approval-notifier-<version>.tgz),或開發目錄絕對路徑。 - 安裝後出現在 Installed plugins:可啓停、打開配置頁;卸載在該 bundle 頁點 Remove(管理器會清理 profile 依賴與選擇項)。
安裝、卸載、啓停與設置均由官方插件管理完成,無需手改 profile 以外的散落配置。
典型用法¶
日常無需額外 API:插件隨 Host 觀察 waterfall,有待確認即排隊彈卡。
- 安裝並啓用後,在 Plugins → 哨兵 按需改動畫、間隔、提示音與升級/二次提醒開關。
- 用設置頁的測試提醒確認右下角順序、音量和二次提醒是否符合預期。
- 真實待確認出現時,在右下角點「去處理」進入對應會話,在 Harness 內完成審批或回答問題;左下角短暫提示表示跳轉已生效。
- 若長時間未處理,留意該條的放大與升級音;若已點「去處理」但遲遲未操作界面,可能收到帶「二次提醒」的紅卡。
開發側自檢(維護者倉庫命令,普通用戶可跳過):
npm install
node selftest.mjs
適用場景與注意¶
適合誰:經常在 DSH 多工作區、多會話並行,且不願依賴系統通知、又希望待確認不淹沒在聊天記錄裏的開發者或操作者。
範圍與限制(README「限制」):
- 覆蓋當前 DSH Host 進程內所有工作區/會話(桌面 App 通常只有一個 Host)。
- App 完全退出時不提醒;窗口最小化時卡片仍在 Harness 內,恢復窗口即可見。
- 「閱讀」判定依賴滾動/指針/按鍵等;純靜止盯屏會被視爲「無操作」,從而可能觸發二次提醒——這是插件需求定義的行爲。
- HMR 或刷新會重置頁面內存裏的「已點開/二次提醒」狀態,審批請求本身不受影響。
安全習慣:插件以當前 DSH 進程權限運行,會讀寫 profile 配置與 $DSH_HOME/approval-notifier/assets/。安裝前應在 GitHub 查看源碼與 MIT 許可證,確認符合你的環境策略。
結尾¶
dsh-approval-notifier 把「待你確認」收斂成右下角可配置的哨兵提醒:不越權代批,只把跳轉與升級節奏說清楚。插件目錄頁見 SkillHub 條目;源碼與完整說明見 GitHub:Macicle77/dsh-approval-notifier。