DSH Status Notifier:把智能體狀態放到 macOS 菜單欄

前言

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。

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

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

小夜