dsh-session-tabs:在 DSH Web GUI 頂部用瀏覽器式標籤切換會話

前言

在 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,界面一直轉圈。處理步驟:

  1. 在插件管理裏卸載 dsh-session-tabs;
  2. 刪除遺留目錄:C:\Users\<你>\.dsh\profiles\desktop\node_modules\dsh-session-tabs;
  3. 再用方式 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 爲準。

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

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

小夜