前言¶
在 DeepSeek Harness(DSH)裏跑智能體會話時,界面側欄和消息流能反映進度,但缺少一個始終可見、且與「當前主會話」綁定的輕量反饋。若只靠掃日誌或等通知,很難一眼區分「在推理」「在跑工具」「在等你點確認」還是已經收工。
下面介紹的 dsh-ai-worker(倉庫 jiang-yang/dsh-ai-worker)是維護者 jiang-yang 發佈的純客戶端 DSH 插件:在 Web 界面右下角掛一個像素風「AI 打工人」懸浮掛件,動作隨當前會話狀態切換,並在任務完成時撒花、統計「今日完成」件數。它不替代 DSH 自帶 UI,也不發起額外網絡請求。
這是什麼¶
- 定位:掛在 DSH Web shell 的
shell.overlay插槽上的懸浮小部件,不是獨立網頁,也不是 iframe。 - 維護與許可:GitHub 倉庫 jiang-yang/dsh-ai-worker,
package.json標明版本 0.2.1、許可證 MIT。 - 運行環境:
engines.dsh爲>=0.1.0-rc.6 <0.2.0-0 || >=0.2.0-rc.0 <0.3.0-0,engines.node爲>=20。插件以當前 DSH 進程及其瀏覽器端加載方式運行;安裝前建議通讀源碼並確認許可證與權限邊界。
社區插件目錄頁:https://www.skillhub.cn/plugins/jiang-yang/dsh-ai-worker(SkillHub 爲社區目錄站點,與 DeepSeek / 幻方無官方從屬關係)。
核心功能¶
視覺與實現方式¶
- 圖形全部由 DOM + CSS 關鍵幀 繪製:無外部圖片、無 CDN、無網絡請求、無額外 npm 依賴(除 DSH 宿主提供的 UI peer)。
- 顏色讀取 DSH 主題變量
--dsw-*,隨淺色 / 深色主題自動適配。 - 可拖動、可摺疊成小頭像、可關閉;關閉 / 摺疊 / 位置 / 今日完成數寫入瀏覽器 localStorage,刷新或重啓 DSH 後仍保留(換瀏覽器或清緩存會重置)。
五種顯示狀態(由會話數據推導,非隨機動畫)¶
| 顯示 | 觸發條件 |
|---|---|
| 等待確認 | useSessionStatus 中當前會話的 pendingInteraction 非空 |
| 敲代碼中 | 當前會話 running,且行內 updatedAt(或本輪開始時間)在 2 秒內 |
| 思考中 | 當前會話 running,但已安靜超過 2 秒(常見於推理階段) |
| 完成任務 | 會話從 running 變爲非 running 的那次跳變(計數 +1,撒花約 7 秒) |
| 摸魚中 | 空閒且超過 45 秒無動靜 |
| 待命中 | 未選中任何會話 |
「當前會話」優先取 useSessions 快照裏 byId 中 retainedBy.mainView > 0 的行(與 DSH 側邊欄找主會話一致);無該字段時退回 current,再退回「列表裏只有一個會話」。
數據來源爲兩個 slot 標準屬性:
useSessions:會話列表快照{ ids, byId, phase, projectionsBySession };useSessionStatus:實時狀態表Map<sessionId, { running, pendingInteraction, completionUnread }>,由宿主經api-session/status推送,是會話進行中變化的主要狀態源。
交互¶
- 拖動:按住標題欄拖動;聚焦標題欄後可用方向鍵(Shift 加大步長)。
- 撒花:任務完成自動播放;點擊掛件本體或聚焦後按 Enter / 空格可再放一次(純動畫,不計入「今日完成」)。
- 摺疊:標題欄
—或Esc→ 右下角小頭像(角標爲今日完成數);點小頭像展開。 - 關閉:點
✕,下次打開 DSH 默認不再出現。 - 重新打開:清除
localStorage鍵dsh.aiWorker.closed.v1後刷新,或在瀏覽器控制台執行:
localStorage.removeItem('dsh.aiWorker.closed.v1')
安裝與啓用¶
插件按 DSH 規範打包:自帶 cordis.patch.yml,通過 package.json 的 dsh.bundle.patch 在安裝進 profile 時自動登記 id: ai-worker,無需手工改 profile 的 cordis.patch.yml。README 說明從 0.2.0 起不再使用「複製目錄 + 手工登記」的老辦法,以免重複 id 導致 DSH 拒絕加載。
在已克隆或解壓的插件目錄內執行(命令來自倉庫 README,勿憑插件名拼接 github:owner/repo):
cd plugins/dsh-ai-worker
bash install.sh # 默認裝進 web profile(認 DSH_PROFILE / DSH_BIN)
桌面版 DSH 可指定 profile:
DSH_PROFILE=desktop bash install.sh
卸載:
bash uninstall.sh
install.sh 本質是對官方 CLI 的包裝,例如:
dsh plugin --profile desktop add "$(pwd)"
裝包後 DSH 掃描 dsh.client 聲明,將 lib/client.js 下發瀏覽器;apply(ctx) 把掛件註冊進 shell.overlay。
若自行改源碼,需先構建再刷新頁面:
node build.mjs # 重新生成 lib/client.js
node verify.mjs # 離線自檢(無需瀏覽器)
典型用法¶
- 按上一節在目標 profile 執行
bash install.sh,重啓或刷新 DSH Web 界面。 - 打開或選中一個主會話,觀察右下角掛件隨
running/pendingInteraction等在「思考中」「敲代碼中」「等待確認」等之間切換。 - 等會話從運行中結束,應看到完成任務動畫與「今日完成 N 件」遞增;跨天計數自動歸零。
- 需要收納界面時摺疊爲小頭像;長期不用可關閉,並按上文清除
dsh.aiWorker.closed.v1恢復。
開發或驗收時可運行 node verify.mjs,在無瀏覽器環境下模擬加載並跑通各狀態(README 中截圖即同一份 lib/client.js 在無頭 Chrome 中的渲染結果)。
適用場景與注意¶
適合誰
- 經常在 DSH Web 里長時間盯會話、希望用固定角落反饋區分「在等確認」與「在安靜推理」的開發者。
- 希望零額外網絡與圖片依賴、僅增強 shell overlay 的用戶。
邊界與限制
- 僅 DSH Web 界面;終端 TUI 沒有
shell.overlay插槽,插件不會出現。 - 「思考中 / 敲代碼中」依賴會話行活躍度啓發式(2 秒閾值),不是模型內部狀態的精確映射。
- 0.2.1 起改用宿主提供的
useSessionStatus;更早版本若依賴不存在的 API,掛件可能一直停在「待命中」。 - 摺疊、關閉、位置、計數均在本機瀏覽器 localStorage,與 DSH 服務端配置無關。
安裝插件等同於讓 DSH 加載其聲明的客戶端 bundle;請在信任維護者與 MIT 許可的前提下自行審閱 源碼(核心邏輯在 src/client/ai-worker.js)。
結尾¶
dsh-ai-worker 把「當前主會話在幹什麼」收成右下角像素小人的幾種動作,並用 localStorage 記住你的佈局與今日完成數,適合作爲 DSH Web 上的輕量狀態 companion。目錄與源碼: