dsh-session-grove:給 DSH 側邊欄加一層跨工作區的會話分組

前言

原型跑多了以後,側邊欄裏會同時掛着不同 workspace 下的會話:有還在跑的,有等輸入的,有剛歸檔的。DSH Desktop 自帶的 Workspace 視圖按 workspace 劃分,很難表達「這幾個來自不同 workspace 的會話其實屬於同一個實驗」這類橫向關係。解決辦法通常是來回搬會話,但搬動會牽動官方的 workspace 歸屬和會話日誌。

dsh-session-grove 走的是另一條路:在官方側邊欄之上加一層隻影響顯示位置的分組,分組只改插件自己的記錄,不碰 workspace 歸屬、workspace registry、會話日誌,也不寫 workspace.json。由 momijijin 維護,當前版本 0.4.0-beta.58。

它改了什麼,不動什麼

凡是分配會話到分組的操作,只改兩件事:插件自己的 group 記錄,以及該會話在 Free Groups 視圖裏的位置。以下是 README 列出的邊界:

  • 官方 workspace 成員關係、workspace registry 和會話日誌從不被修改;
  • 會話標題與歸檔狀態只在顯式用戶操作,或啓用 opt-in 的 controlSessions API 時變化;
  • workspace.json 從不被寫入。

因此同一個分組裏可以同時放着不同 workspace 的會話,代價是需要維護插件自己的數據文件。

安裝與兼容範圍

安裝走 dshmarket,在市場中搜索:

dsh-session-grove

README 註明市場條目仍在準備中;條目上線後,安裝和更新都應完全通過 dshmarket / 插件管理器完成。插件不自行更新,也不知道下一版託管在哪裏。本地 tarball 與命令行安裝屬於維護者排障路徑,只在 docs/RELEASE.md 說明,普通用戶應走市場入口。上一項本地 tarball 安裝過的話,需要重新從市場裝一次,以便安裝來源綁定到目錄。

兼容範圍由插件捆綁的 DSH core/API 決定,而不是桌面殼名稱。以下事實來自 README 和 package.json:

  • engines.dsh:>=0.2.0-rc.2 <0.3.0;主要適配 @deepseek-ai/dsh 0.2.1-rc.2 與 0.2.1-rc.5;
  • engines.node:>=22.19.0;
  • 官方桌面驗證:community DSH Desktop Stable 2.0.18(rc.2),official DeepSeek Harness desktop 0.2.1.0(rc.5);
  • 明確不支持 community DSH Desktop Beta 和 community DSH NEXT,這兩個可能碰巧加載,但不構成兼容性承諾。

平臺側,CI 在 Ubuntu、Windows、macOS 上跑 Node 級與打包驗證,coverage gate 只在 Ubuntu 上跑。真實 DSH UI 只在 Windows 上做過驗證,Linux、macOS 的 UI 支持仍屬實驗性,直到有真實的 host/UI 驗證通過。運行時本身是平臺中立的 JavaScript:src/ 中沒有 process.platform 或 child_process 分支,也不調 PowerShell;scripts/qa/ 下的 PowerShell 只是維護者測試裝置,不進 npm 包。

有用的地方在於,官方與社區桌面各自捆綁了不同的 DSH 版本和插件組合,兩者需要分別迴歸。這一點 README 也明確寫了。

分組與視圖操作

以下是 README 裏列出的可用能力。

分組:

  • 創建根分組,支持最多 8 層嵌套;
  • 重命名、換圖標、選調色板顏色或自定義 #RRGGBB;
  • 拖拽重排、改父級,並帶上子樹;
  • 菜單裏的上移 / 下移作爲拖拽的替代;
  • 摺疊 / 展開;
  • 空葉子分組可直接刪除;刪除非空分組前,需要先爲子會話和子分組選好去處;
  • 在分組內新建會話時使用推斷出的 workspace;workspace 切換或新建要走宿主 UI。

視圖:

  • Free Groups 與原生 Workspace 視圖之間切換;
  • 側邊欄寬度 264px 到視口 80%,默認 420px;
  • 雙擊分隔條恢復默認寬度;
  • 視圖模式、寬度、摺疊狀態、歸檔過濾、對話框幾何都會持久化。

會話、歸檔與搜索

會話側支持把不同 workspace 的會話放進同一分組,也可以把會話拖回 Ungrouped;支持打開、重命名、歸檔 / 取消歸檔、分配分組;歸檔動作放在 hover 出的操作裏;會話菜單裏有 fork 和 Copy Session ID。fork 使用最後一條已完成的 turn,並把子會話放在源分組的首位(源屬於 Ungrouped 時放在 Ungrouped 頂部)。歸檔中的搜索結果會變暗且無法打開。

搜索覆蓋會話標題、workspace 和分組路徑;點擊結果會自動展開祖先、滾動到對應行並高亮。

頭部只有三個統計按鈕:Running、Waiting for input、Unread,各自是互斥的主狀態,後臺 job 計數不計入。每個氣泡按分組列出會話,點擊即打開。

對話框支持拖拽標題欄與八方向拉伸,點擊遮罩不會關閉,Cancel/Escape 才關閉。

第一次運行時,有一張一次性提示說明分組只改變顯示位置,以及如何建組、拖會話;該提示可關閉且狀態存 localStorage。沒有分組也沒有會話時,空態提供創建第一個分組的入口。右上角視圖選項含歸檔三態、Reset layout(只恢復佈局,不動分組數據)和版本 / 範圍信息。

數據與升級

group 記錄的存放位置:

<dshHome>/storages/dsh-session-grove.json

寫入時使用修訂號比較和串行隊列,避免併發寫覆蓋。

本地化方面,包內帶 18 種以上語言字典(英文、中文、日語、韓語、德語、法語、西班牙語、巴西葡萄牙語、意大利語、荷蘭語、波蘭語、土耳其語、越南語、泰語、印尼語、俄語、印地語、繁體中文、阿拉伯語)。Locale id 按基礎語言解析(ja-JP → ja,zh-Hant/zh-TW → zh-Hant,pt-BR → pt),不支持的語言回退英文;阿拉伯語會把插件根切到 RTL。插件向宿主註冊這些字典,但不往宿主語言目錄里加語言。

從 dsh-session-groups 升級

0.4.0-beta.1 的 identity reset 意味着這個包不會自動讀取、複製或刪除舊 dsh-session-groups 的記錄和瀏覽器 key,以避免導入同名社區插件的數據。手工遷移清單寫在 docs/MIGRATION-0.4.md。

適用場景與注意

適合同時維護多個 workspace、已經或即將超出原生 Workspace 視圖組織能力的場景,尤其是需要把跨 workspace 的會話掛在一個主題下的情況。分組是顯示層抽象,不改變會話的 workspace 成員關係和日誌,所以搬移理由應以展示爲限,不能用它代替真正的 workspace 拆分。

插件運行在宿主 dsh 進程中,權限等同當前 dsh 進程。安裝前打開倉庫檢查源碼和 LICENSE;本分發頁面的星標、更新頻率和社區反饋也值得先看一遍再決定是否長期依賴。官方文檔見 GitHub 倉庫,社區目錄見 SkillHub 頁面。

結尾

dsh-session-grove 的價值在於把「跨 workspace 的會話歸屬」變成可拖拽的顯示層,同時刻意不碰官方的會話數據。它是 beta 版本,支持範圍綁定 engines.dsh 區間,實際能否用要對照自己手上的 DSH 版本判斷。

  • SkillHub 目錄頁:https://www.skillhub.cn/plugins/momijijin/dsh-session-grove
  • 源碼倉庫:https://github.com/momijijin/dsh-session-grove

(SkillHub 是獨立社區目錄站點,與 DeepSeek / 幻方無官方從屬關係。)

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

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

小夜