dsh-ai-worker:DSH Web 界面右下角的會話狀態像素掛件

前言

在 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 推送,是會話進行中變化的主要狀態源。

交互

  1. 拖動:按住標題欄拖動;聚焦標題欄後可用方向鍵(Shift 加大步長)。
  2. 撒花:任務完成自動播放;點擊掛件本體或聚焦後按 Enter / 空格可再放一次(純動畫,不計入「今日完成」)。
  3. 摺疊:標題欄 — 或 Esc → 右下角小頭像(角標爲今日完成數);點小頭像展開。
  4. 關閉:點 ✕,下次打開 DSH 默認不再出現。
  5. 重新打開:清除 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    # 離線自檢(無需瀏覽器)

典型用法

  1. 按上一節在目標 profile 執行 bash install.sh,重啓或刷新 DSH Web 界面。
  2. 打開或選中一個主會話,觀察右下角掛件隨 running / pendingInteraction 等在「思考中」「敲代碼中」「等待確認」等之間切換。
  3. 等會話從運行中結束,應看到完成任務動畫與「今日完成 N 件」遞增;跨天計數自動歸零。
  4. 需要收納界面時摺疊爲小頭像;長期不用可關閉,並按上文清除 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。目錄與源碼:

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

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

小夜