前言¶
在 DSH(DeepSeek Harness)裏做多會話、多項目開發時,默認要靠左側欄在會話之間跳轉:側欄一直佔寬度,切換時還要展開列表,在幾十行裏找目標會話。這和常見瀏覽器裏「頂部一排標籤、一眼點到」的習慣相反,正文區域也容易被側欄擠窄。
下面介紹的 dsh-session-tabs 是一條釘在窗口標題欄下方的整寬標籤欄:一個標籤對應一個會話,同一工作區(項目)下的會話收在可摺疊的框裏。裝好後可以收起側欄,用抬頭點標籤的方式切會話,正文更寬。
這是什麼¶
dsh-session-tabs 是 DSH 的純客戶端插件(分類:客戶端),給 Web GUI 增加瀏覽器式頂部 Session 標籤欄。維護與源碼見 GitHub 倉庫 P-PPJ/dsh-session-tabs(README 與安裝包發佈鏈路與 1834395550/dsh-session-tabs 一致);社區目錄頁:SkillHub · dsh-session-tabs。
插件不改動服務端對話數據:× 只關標籤不刪會話,卸載後界面可立即恢復。許可證爲 MIT(見倉庫 LICENSE);package.json 中當前版本爲 1.0.2,要求 DSH >=0.2.0-rc.1 <0.3.0-0,且僅支持 Web 平臺(dsh.client.platform = "web"),無 TUI 版本。
核心功能¶
標籤欄與佈局¶
- 整寬標籤欄固定在窗口標題欄正下方(約 38px 高),界面整體爲標籤欄讓出空間,不遮擋官方 UI。
- 一個標籤 = 一個會話:當前會話爲淺藍膠囊並加粗;該會話的 agent 正在輸出時,標籤前有呼吸式藍點。
- 標籤按需出現:只有真正打開過的會話纔會進標籤欄,按打開順序排列;對話持續輸出時標籤不會左右亂跳。
- 標籤過多時在標籤條上滾輪橫向滾動,兩側漸隱提示還有內容;單標籤寬度上限 200px(CSS 變量
--st-tab-max),超長標題截斷爲…。
按項目分組與摺疊¶
- 每個工作區一個帶邊框的圓角框,框頭爲
⌄ 項目名 + 標籤數;點擊框頭可摺疊,摺疊後顯示爲› 項目名 N,狀態寫入 localStorage,刷新或重啓後仍保持。 - 當前會話在別處被切換(側欄、快捷鍵、深鏈)時,其所在項目框會自動展開。
關閉、新建與側欄¶
- 懸停或當前標籤上的
×、或中鍵點擊標籤:只關閉該標籤,不刪除會話;關掉當前標籤會自動切到相鄰標籤;只剩一個標籤時不顯示×,避免把標籤欄關空。 - 標籤欄最右側
+:在當前項目新建會話(調用uiWorkspace.startSession())。 - 可見性規則與官方側欄一致:隱藏子代理會話、非當前的空會話、已歸檔會話。
實現要點(便於評估)¶
- Host 半邊爲空,無構建步驟:
index.js+client.js爲可運行 ESM;渲染座位爲shell.overlay,用固定定位與:has()規則爲框架頂出標籤欄高度。 - 數據來自客戶端服務:
sessions.list、workspaces.list、uiWorkspace.openSession(id)等;停用或卸載時會移除注入樣式與根屬性,界面立刻復原。
安裝與啓用¶
前提:已安裝 DSH,並能在 Web GUI 中管理插件。裝完一般不需要重啓,標籤欄會出現在標題欄下方。
README 說明:在 DSH 插件市場(dsh-market)搜 session tabs 可一鍵安裝(收錄申請在 awesome-dsh-plugin 隊列中);在市場正式收錄前,可用下列方式。
方式 A:從 Release 安裝(推薦,不需要 Git)¶
在 DSH 插件管理裏填寫安裝地址:
https://github.com/1834395550/dsh-session-tabs/releases/latest/download/dsh-session-tabs.tgz
該地址指向最新 Release;若需固定版本,可改爲例如:
https://github.com/1834395550/dsh-session-tabs/releases/download/v1.0.2/dsh-session-tabs-1.0.2.tgz
方式 A-2:github.com 連不上時(jsDelivr)¶
https://cdn.jsdelivr.net/gh/1834395550/dsh-session-tabs@main/dsh-session-tabs.tgz
@main 約有 12 小時緩存;也可把 @main 換成具體提交哈希,或改用方式 A。也可將 .tgz 下載到本地,在插件管理裏填寫文件的絕對路徑離線安裝。
方式 B:從 GitHub 倉庫安裝(需要本機 Git)¶
github:1834395550/dsh-session-tabs
若報 ERR_PNPM_GIT_RESOLVE_FAILED 且提示找不到 git,需安裝 Git 或改用方式 A / A-2。
方式 C:從本地目錄安裝¶
將倉庫放到本機任意目錄,在插件管理裏填寫該目錄的絕對路徑(README 註明需自行克隆倉庫;本文不展開 clone 步驟)。
Windows:從方式 C 改回網址安裝失敗時¶
若曾用本地目錄或 link: 安裝,再改用方式 A / A-2 可能在最後一步出現 [ERR_PNPM_EPERM] ... rename ... dsh-session-tabs,界面一直轉圈。處理步驟:
- 在插件管理裏卸載 dsh-session-tabs;
- 刪除遺留目錄:
C:\Users\<你>\.dsh\profiles\desktop\node_modules\dsh-session-tabs; - 再用方式 A 或 A-2 的地址安裝。
典型用法¶
| 操作 | 效果 |
|---|---|
| 點標籤 | 切換到該會話 |
懸停 / 當前標籤上的 × |
關閉標籤(不刪會話) |
| 中鍵點標籤 | 同上 |
點 ⌄ 項目名 |
摺疊 / 展開該項目下的標籤 |
點最右側 + |
在當前項目新建會話 |
| 在標籤條上滾輪 | 橫向滾動 |
習慣瀏覽器多標籤的用戶可以把側欄收起,用頂部標籤在多個會話間切換;項目很多時摺疊不關心的工作區,只保留當前項目的框展開。
適用場景與注意¶
適合:長期在 DSH Web GUI 裏並行多個會話、多個工作區,希望減少側欄佔用、用頂部標籤快速切換的開發者。
限制與環境(來自 README「已知限制」):
- 主要在 DSH 桌面端(Windows,頁面帶
data-windows-titlebar)驗證;純瀏覽器窗口無原生標題條時,標籤欄貼在窗口頂部,仍可用。 - 至少保留一個標籤;只支持 Web,沒有 TUI。
安全與權限:插件在當前 DSH 進程權限下以純客戶端腳本運行,會讀寫瀏覽器 localStorage 並調用 DSH 客戶端 UI 服務。安裝前應閱讀倉庫源碼與 MIT 許可證,確認來源可信;勿安裝未覈對過的第三方打包地址。
結尾¶
dsh-session-tabs 把「開着的會話」收成標題欄下的一排標籤,把「項目」收成可摺疊框,在不大改 DSH 官方佈局的前提下,用更接近瀏覽器的方式管理 Session。需要安裝包直鏈、jsDelivr 鏡像或 Windows 卸載殘留說明時,以倉庫 README 爲準。