前言¶
DSH 的插件體系裏,很多交互發生在 agent 執行過程中:權限審批、任務運行、任務結束。這些狀態默認只在 Harness 窗口裏能看到,如果你切到別的應用,只能靠窗口標題或事後看日誌。DSH Status Notifier 就是爲這個問題做一個外顯層:它把智能體的狀態渲染到 macOS 菜單欄,並在窗口不可見時發系統通知。
這是什麼¶
DSH Status Notifier 是一個 DSH bundle,由 Carlos5986515 維護,倉庫在 https://github.com/Carlos5986515/dsh-status-notifier,分類爲客戶端插件,GitHub 1 星。它的定位很清楚:把 agent 的實時狀態放進菜單欄(依賴 SwiftBar),而不是做一個新面板。
主成分是兩個半:Host 半(index.js)在 DSH Host 進程裏跑,負責觀察持久化事件並渲染 SwiftBar 腳本;Client 半(client.js)在 Web GUI 裏跑,負責在頁面離開時發通知。
核心功能¶
菜單欄圖標按狀態着色,含義如下:
| 菜單欄顯示 | 含義 |
|---|---|
⚠ 1(橙色) |
有一個權限請求等待你批准 |
● 1(藍色) |
有一個任務在運行 |
✓ 1(綠色) |
有一個任務在 30 分鐘內結束 |
○ 空閒(灰色) |
空閒 |
點擊菜單欄項會彈出下拉列表,列出各狀態下的 session;點擊任意一行,或點擊「打開 DeepSeek Harness」行,都會把 Harness 窗口喚回前臺。菜單欄狀態每 5 秒刷新一次。
通知有兩條路徑,且不會重複觸發:
- 頁面在但窗口隱藏或失焦時,由 Client 半觸發瀏覽器通知(基於框架自身的
uiSession.sessionStatus,取值running/pendingInteraction/completionUnread)。 - 窗口已關閉但 Host 仍在運行時,由 Host 半通過
osascript觸發 macOS 系統通知。Host 只在沒有頁面連接時才發通知,所以兩條路徑不會雙通知。
Host 半觀察的是持久化、與順序無關的事件信號:session/event 裏的 approval/asked 與 approval/decided(Approval 服務追加的審批審計對),以及 agent/status 的 running↔idle 轉換。它渲染出 dsh-status.5s.sh 及其輸出到插件目錄;渲染出來的狀態文件放在插件目錄之外,避免 SwiftBar 把它們誤認成插件。
安裝與啓用¶
前提條件:macOS,且已安裝 SwiftBar;DSH 支持 plugin bundle。先裝 SwiftBar:
brew install --cask swiftbar
然後按下面步驟安裝 bundle。
1、把倉庫 clone 到任意位置,或把目錄複製到你的 workspace。
2、在 DSH 裏安裝這個 bundle。兩種方式任選:在 Plugin Manager 中選 install local bundle;或讓 agent 執行 plugin_manager 的 install_bundle,並把這個目錄作爲目標。
3、讓 SwiftBar 盯住插件目錄。二選一:
- 創建
~/.swiftbar,並把 SwiftBar 的 Preferences → General → Plugin Folder 指到它; - 或者保留 SwiftBar 自己的目錄,把它的路徑寫進
~/.dsh/swiftbar-dir.txt的第一行。
4、重啓 DeepSeek Harness,讓 Host 半加載。幾秒內菜單欄項就會出現。
注意:官方給出的是 clone 後本地安裝,不要憑插件名去拼 dsh plugin add github:owner/repo 之類的命令。
配置¶
改變體行爲靠這兩個變量或文件:
| 變量 / 文件 | 作用 |
|---|---|
DSH_SWIFTBAR_DIR |
SwiftBar 插件目錄(優先級最高) |
~/.dsh/swiftbar-dir.txt |
第一行爲插件目錄路徑 |
DSH_SWIFTBAR_STATE_DIR |
渲染後狀態文件的存放位置,默認 ~/.dsh/swiftbar-state |
解析順序:DSH_SWIFTBAR_DIR → ~/.dsh/swiftbar-dir.txt → ~/.swiftbar。狀態目錄在插件加載時解析,改完需要重啓 DSH 才生效。
本地測試渲染邏輯¶
倉庫裏的 test-render.mjs 會用樁化的 Cordis context 跑一遍 Host 半,模擬 approval / running / idle 事件,並檢查渲染出的 SwiftBar 輸出與舊文件清理:
node test-render.mjs
改動渲染邏輯時可以先跑它。
適用場景與注意¶
適合 macOS 上用 DSH、希望長任務跑起來能看到狀態、又不想頻繁切回 Harness 窗口的人。
幾個實際限制要提前知道:
- 菜單欄項本質上是一個 SwiftBar 腳本,SwiftBar 沒在跑,菜單欄項就不會出現。
- 點擊某行只是把 Harness 窗口喚回前臺,還不能直接深鏈進某個具體 session。
- 插件以當前 DSH 進程的權限運行,並在你的本地環境讀取和寫入上述目錄。安裝前先讀一遍源碼和
LICENSE(MIT 許可)。
結尾¶
DSH Status Notifier 的價值不復雜:給 agent 狀態一個不需要切窗口就能看到的出口,補上 DSH 窗口在後臺時的狀態盲區。社區目錄頁在 https://www.skillhub.cn/plugins/Carlos5986515/dsh-status-notifier,源碼與 README 在 https://github.com/Carlos5986515/dsh-status-notifier。