前言¶
在 DeepSeek Harness(DSH)裏同時開多個會話時,常見做法是在側欄或列表裏點選切換。會話一多,當前在看哪一條、哪條在跑、哪條在等你回覆,都要靠記憶和反覆滾動側欄。瀏覽器裏用標籤頁管多個頁面是成熟習慣;DSH 官方界面默認並沒有把「主視圖裏的會話」做成一排可切換的標籤。
下面介紹社區客戶端插件 dsh-tab(npm 包名 dsh-tab,維護者 imchangchang):在 DSH 會話列頂部加一排書頁式標籤,一個會話一個標籤,切換走官方接口、不整頁刷新,並支持工作區角標、固定、關閉、歸檔與拖拽排序。插件基於官方 DSH slots、services 與主題 token 實現,分類屬於 客戶端。
這是什麼¶
dsh-tab 給 DeepSeek Harness 的主會話區增加瀏覽器風格的會話標籤欄:打開、恢復或新建會話時自動入籤;點擊標籤通過官方 uiWorkspace.openSession 切換,當前標籤與會話頁在視覺上連成「一張紙」的書頁效果。
宿主側 index.js 僅負責讓 DSH 識別包;標籤欄、菜單、拖拽與佈局樣式在瀏覽器半 client.js 中實現,由 DSH 直接加載,沒有單獨構建步驟。許可證爲 MIT;當前 npm 版本爲 0.2.0(以 package.json 爲準)。開發與驗證環境標註爲 DSH 0.2.1-rc.5 附近的桌面版與 Web GUI。
核心功能¶
以下能力均來自項目 README 說明。
標籤與會話¶
- 一個會話對應一個標籤;切換不刷新整頁。
- 最後一個標籤右側有
+新建會話;標籤過多時標籤條橫向滾動,+始終可見。 - 標籤左上角顯示所屬工作區(顏色由工作區 ID 哈希,文字爲工作區名,懸停可看全名);固定爲僅圖標模式時使用更小字號。
固定、排序與關閉¶
- 固定:固定標籤排在最左,寬約 40px、只顯示圖標並帶狀態點,與普通標籤之間有分隔線;右鍵可固定或取消固定。
- 拖拽排序:按住標籤左右拖動換位,落點有強調色豎線;固定組與普通組各自組內排序,順序寫入
localStorage,刷新後保持。Esc或窗口失焦可取消本次拖拽。 - 關閉:標籤上的
×、鼠標中鍵,或右鍵菜單(關閉 / 關閉右側 / 關閉其他 / 關閉全部)。關閉標籤不等於刪除會話。 - 歸檔:右鍵「歸檔會話」,走官方
uiWorkspace.archiveSession;會話正在運行或等待回覆時會先確認是否「停止並歸檔」。
狀態與交互¶
- 狀態點:藍色呼吸 = 正在運行;黃色 = 等你回覆;綠色 = 有新的完成內容。
- 鍵盤:標籤獲得焦點時
←/→切換相鄰標籤並激活;右鍵菜單中Esc關閉菜單。 - 主題:顏色使用
--dsw-alias-*token,隨 DSH 淺色 / 深色主題變化。
切換時序¶
切換標籤時會先跑約 140ms 的寬度過渡,動畫結束後再切換會話內容(避免與官方切會話時的同步重渲染搶在同一幀)。因此內容切換比點擊晚約 150ms;可在 client.js 頂部調整或關閉 SELECT_COMMIT_DELAY。
安裝與啓用¶
環境要求:DSH 桌面版或 Web GUI,版本在 0.2.1-rc.5 附近(詳見倉庫「兼容性」一節)。
從 npm 安裝(推薦):在 DSH 中讓 Agent 執行:
plugin_manager install_bundle target=dsh-tab
也可先下載包再安裝:
npm pack dsh-tab
(或在 npmjs.com/package/dsh-tab 下載 tgz,再按 DSH 本地包安裝方式處理。)
安裝後刷新窗口(macOS 上爲 Cmd+R)生效。安裝或升級後,建議在設置裏確認依賴版本爲剛安裝的發佈版本。
從源碼安裝:將克隆得到的 dsh-tab 目錄作爲本地插件——設置 → 插件 → 添加插件,選擇該目錄;或執行:
plugin_manager install_bundle target=<dsh-tab 的絕對路徑>
插件以當前 DSH 進程權限在客戶端運行;安裝前請自行查看 GitHub 源碼 與 MIT 許可證,確認符合你的安全與合規要求。
典型用法¶
| 操作 | 方式 |
|---|---|
| 切換會話 | 左鍵點擊標籤 |
| 關閉標籤頁 | 標籤 × / 中鍵 / 右鍵菜單 |
| 新建會話 | 最後一個標籤右側 + |
| 調整順序 | 同組內按住標籤拖拽 |
| 固定 / 取消固定 | 右鍵 → 固定標籤頁 / 取消固定標籤頁 |
| 批量關閉 | 右鍵 → 關閉右側 / 關閉其他 / 關閉全部 |
| 歸檔 | 右鍵 → 歸檔會話 |
| 鍵盤 | 標籤聚焦時 ← / → |
標籤順序與固定狀態保存在瀏覽器 localStorage 鍵 dsh.tab.view.v2(結構爲 { tabs, pinned });舊鍵會自動遷移。這些數據不上傳、不髮網絡請求;工作區角標僅讀取官方工作區標題。
適用場景與注意¶
適合:經常在 DSH 主視圖並行維護多個會話、希望用標籤快速切換且保留工作區歸屬信息的開發者或日常用戶。
兼容性邊界(README「已知邊界」與「兼容性」):
- 幀佈局與官方 DOM 標記(如
data-shell-bottom、data-shell-overlay)耦合;若官方調整三行 frame 結構,標籤欄可能回退到三欄下方,需更新插件中的FRAME_CSS。 - 拖拽不能跨固定組與普通組;拖到邊緣時標籤條不會自動滾動。
- 未實現全局快捷鍵(如
⌘T/⌘W等);主要在 macOS 桌面版與 Chrome 系 Web GUI 上驗證,其他平臺未測試。
DeepSeek Harness 生態強調「一切皆插件」;SkillHub 目錄頁 爲社區收錄,與 DeepSeek / 幻方無官方從屬關係。
結尾¶
dsh-tab 把 DSH 主視圖裏的會話收成一排可固定、可排序、帶工作區角標的書頁式標籤,切換與會話生命週期仍走官方 workspace 接口,本地只持久化標籤順序與固定狀態。