前言¶
在 DeepSeek Harness Desktop 裏跑 Agent 時,turn 可能跑很久,也可能停在工具覈准或 ask_user_question 上等你點選。窗口被其他應用蓋住時,很難判斷是還在執行、在等你,還是上一輪已經失敗。常見做法是頻繁把 DSH 拉到前臺看界面,或盯着會話列表猜狀態。
下面介紹社區插件 dsh-taskbar-status(維護者 Joker2377,分類:客戶端)。它在 Windows 10/11 上把 DSH 桌面應用的工作列按鈕變成進度條指示:執行中爲灰色不定進度條,等待人工爲琥珀色滿條並閃爍,失敗後爲全紅並保持,直到你按規則清除。插件是純 host 端外掛,不修改 main.js,也不改 app.asar。
這是什麼¶
dsh-taskbar-status 訂閱 @deepseek-ai/dsh-session 在事件總線上發佈的 session/event,把 turn、覈准、提問與結束原因換算成四種工作列狀態,再通過 koffi 調用 Win32 的 ITaskbarList3(SetProgressState / SetProgressValue,必要時 FlashWindowEx)畫到 DSH 窗口對應的工作列按鈕上。
非 Windows 平臺會直接停用,不會加載原生 FFI。DeepSeek Harness Desktop 版本需滿足 >=0.1.1-rc.2 <0.3.0(與 package.json 中 engines.dsh 一致)。當前插件版本爲 0.6.0,許可證 MIT。
核心功能¶
四種狀態¶
| 狀態 | 工作列效果 | 進入條件 | 離開條件 |
|---|---|---|---|
| 執行中 | 灰色不定進度條(TBPF_INDETERMINATE) |
turn/start |
該 session 的 turn 全部結束 |
| 等待人工 | 琥珀色滿條(TBPF_PAUSED)+工作列閃爍 |
approval/asked,或 ask_user_question 的 tool/call |
覈准有結果、提問有回答,或 turn 結束 |
| 出錯 | 全紅(TBPF_ERROR) |
turn/end 且 reason.kind === 'error' |
下一輪開始、或窗口離開前景後再回來 |
| 閒置 | 清除(TBPF_NOPROGRESS) |
沒有 turn、沒有等待、沒有未讀錯誤 | — |
工具覈准與 ask_user_question 提問都算「等你」,都會亮琥珀色;每出現一個新的阻塞,工作列按鈕各閃一次。
多 session 與失敗語義¶
同時跑多個 session 時,所有 session 共用同一個工作列按鈕,顯示優先級爲:等待人工 > 執行中 > 出錯 > 閒置。計數以 session id + turn 以及各自的 approval / question id 爲 key,重複事件不會重複計數。
紅燈是「閂鎖」式的未讀通知,不會自己消失;只有 reason.kind === 'error' 會變紅,aborted、interrupted、blocked 按正常結束處理。所有 Win32 調用爲 best-effort,失敗只寫 warn 日誌,不影響 Agent 本身。
安裝與啓用¶
安裝方式在 README 中寫爲:在 DSH 側邊欄打開 Plugins,粘貼倉庫首頁 URL 後按 Install。DSH 會用該鏈接執行 pnpm add,把 repo 拉進 profile,無需 git clone,也無需手改 profile。
- 複製倉庫地址(須爲 git 倉庫首頁,不要帶
/tree/main這類路徑):
https://github.com/Joker2377/dsh-taskbar-status
- 在 Plugins 安裝欄粘貼並按 Install。
- 若安裝時列出待覈準的構建腳本
koffi,覈准後重試一次;原生文件也可隨@koromix/koffi-win32-x64附帶,不跑腳本也可能能加載。 - 重新加載 App(重開窗口或重啓),工作列開始反映狀態。
若要鎖定某一版,可在 URL 後接 commit:https://github.com/Joker2377/dsh-taskbar-status#<commit>。
解除安裝:在 Plugins 頁移除該 bundle 後重新加載;停用瞬間插件會清掉進度條並釋放 COM 對象。
裝前建議自行查看 GitHub 倉庫 源碼與 MIT 許可證。插件在 DSH host 進程權限下運行,會加載 koffi 與 Win32 FFI。
典型用法與行爲說明¶
如何消掉紅燈¶
- 開始下一輪 — 最直接的確認。
- 離開 DSH 窗口再回來 — 插件每秒比對前景窗口的擁有者 pid;出錯時若你一直盯着 DSH 窗口,不會立刻清掉。
- 重載插件。
若你平時用瀏覽器看 Web GUI,DSH 桌面窗口可能永遠拿不到前景,則只有第 1、3 條有效。可用 node scripts/probe.mjs --focus 查看當前前景窗屬於哪個進程(需 Node.js >=22.19,僅跑腳本時需要)。
安裝前試效果¶
取得源碼後可在不走 DSH 插件系統的情況下驗證 FFI:
node scripts/probe.mjs
腳本會找到窗口並依序演示灰 → 黃+閃爍 → 紅 → 清除。另有 --detect、--compare、--focus 等參數,見 README「開發」一節。
執行中爲什麼是灰色¶
Windows 11 上 TBPF_INDETERMINATE 即爲灰色跑動條,顏色不可由插件指定;帶固定語義顏色的主要是 TBPF_PAUSED(黃)與 TBPF_ERROR(紅)。這是系統設計,不是配置項遺漏。
適用場景與注意¶
適合:在 Windows 上長期使用 DSH Desktop,多任務時希望從工作列判斷 Agent 是否在跑、是否在等你、是否上一輪失敗,而不必一直把窗口置頂。
注意:
- 只處理一個 DSH 窗口;多開桌面實例時,作用在優先找到的那一個。
- 僅追蹤直接的
ask_user_question的tool/call;經tool/ptc-dispatch間接調用不會亮琥珀色(該路徑本身不阻塞)。 explorer.exe重啓或遠程桌面重連後,工作列可能被重建;下一次狀態變更時會比對Shell_TrayWndhandle 並重畫,中間沒有心跳,燈不會主動恢復。- 窗口縮到系統匣且工作列按鈕不可見時,需還原窗口後下一次更新纔會重新套用。
疑難排解表(找不到窗口、一閃就消失、紅燈不消等)見倉庫 README。
結尾¶
dsh-taskbar-status 把 DSH session 事件映射到 Windows 工作列進度條,用灰、琥珀、紅三種可見信號覆蓋「執行中 / 等你 / 失敗未讀」三種常見痛點,適合把 DSH 放在後臺的 Windows 用戶。
- 社區目錄頁:https://www.skillhub.cn/plugins/Joker2377/dsh-taskbar-status
- 源碼與完整說明:https://github.com/Joker2377/dsh-taskbar-status
SkillHub 爲社區插件目錄,與 DeepSeek / 幻方無官方從屬關係;安裝與使用以倉庫 README 爲準。