前言¶
在 DSH(DeepSeek Harness)裏,側欄「工作區」負責瀏覽分組、切換工作區、在列表裏找會話。官方 @deepseek-ai/dsh-client-ui-workspace 提供分組樹、扁平列表、置頂與歸檔等能力;當會話通過 fork 產生父子關係時,列表仍是扁平排序,父子關係主要靠標題後綴或記憶來辨認。若你經常在同一工作區裏開多條分支會話,並希望批量歸檔、摺疊整棵分支,就需要一套把 fork 關係畫成樹、並在工作區標題上提供批量操作的界面實現。
下面介紹社區插件 dsh-workspace-sidebar:它整塊接管側欄工作區區域及相關插槽,在官方 ui-workspace 源碼基礎上改行爲,而不是在外層再包一層。
這是什麼¶
dsh-workspace-sidebar 是 DSH Web 客戶端的側欄「工作區」覆寫插件,維護者爲 longyi-0x0,分類爲客戶端插件。安裝後側欄工作區瀏覽、會話主視覺區的工作區選擇器、會話行菜單與懸停按鈕等位置由本插件實現;自帶的 ui-workspace 經 bundle patch 關閉,避免兩套實現同時註冊同一插槽。
宿主側 index.js 的 apply 爲空,僅滿足 Loader 對插件入口的形狀要求;業務與 UI 都在瀏覽器側的 client.js 裏。
接管哪些界面¶
| 位置 | 內容 |
|---|---|
| 側欄工作區區域 | 工作區分組 / 分組樹 / 扁平三種瀏覽,工作區與嵌套工作區的展開、拖拽重排、新建、重命名、刪除,會話列表與搜索 |
| 會話行 | 展開水位線、置頂與手動排序、運行 / 待處理 / 完成提醒、定時任務標記、歸檔過濾,以及行菜單與懸停按鈕 |
| 會話行插槽 | sidebar.workspaces.session.menu.item、sidebar.workspaces.session.row.action、sidebar.session.row.leading 等由本插件聲明並註冊內置動作;其他客戶端插件仍可往這些插槽追加項 |
| 會話主視覺區 | 新會話的 Workspace 選擇器(conversation.hero.workspace),含組合式目錄選擇器插槽 |
| 提示層 | 行內操作的 toast(workspace.toast)與確認對話框 |
相對上游的核心改動¶
插件基於 @deepseek-ai/dsh-client-ui-workspace 0.2.1-rc.5 的源碼副本(MIT)。在保留上游排序與水位線語義的前提下,主要增量如下。
分叉會話樹
子會話按 parentId 嵌套在父行下:父行在前,子行逐代縮進,祖先豎線在分支末尾漸隱。
分支摺疊
有子行的會話顯示摺疊箭頭,點擊可收起或展開整條分支。摺疊狀態存在瀏覽器本地視圖 store(dsh.workspace.view.v5),刷新後保留。
前導格
摺疊箭頭與運行圓點共用 16px 前導格:空閒分支顯示箭頭,運行中的行顯示圓點;懸停運行中的分支時圓點換回箭頭,仍可摺疊。
分叉標題
fork 時不再遞增標題的 (n) 後綴,分支關係由樹結構表達。
歸檔全部會話
工作區標題行在有會話時出現「歸檔全部會話」按鈕:跳過運行中和空白會話,完成後 toast 報出歸檔與跳過數量,並提供「顯示已歸檔」入口。
樣式熱替換
客戶端樣式注入會先移除上一代 style 標籤,rebuild 後不再沿用舊 CSS。
安裝與啓用¶
倉庫已提交構建產物 client.js,從 GitHub 或本地鏈接安裝均無需現場構建。
從 GitHub 安裝:
dsh plugin --profile desktop add "github:longyi-0x0/dsh-workspace-sidebar"
或鏈接本地檢出目錄:
dsh plugin --profile desktop add "link:/path/to/dsh-workspace-sidebar"
macOS 桌面版若未把 dsh 加入 PATH,可使用應用內 CLI 完整路徑:
"/Applications/DeepSeek Harness.app/Contents/Resources/runtime/cli/bin/dsh" \
plugin --profile desktop add "github:longyi-0x0/dsh-workspace-sidebar"
裝完後需要重啓 DSH。client.js 在啓動時裝配進瀏覽器 bundle,僅刷新瀏覽器頁面不夠。
典型用法¶
- 按樹瀏覽 fork 會話:在工作區會話列表中,子會話縮進在父行下;點摺疊箭頭收起或展開整支分支,狀態在本地保留。
- 批量歸檔:在工作區標題行點「歸檔全部會話」;運行中與空白會話會被跳過,完成後根據 toast 中的數量與「顯示已歸檔」入口覈對結果。
- 與官方能力並用:分組 / 分組樹 / 扁平瀏覽、拖拽重排工作區、置頂與會話行菜單等仍來自同一套 ui-workspace 衍生實現;本插件替換的是官方包在側欄上的註冊,不要在同一 profile 裏再啓用一份上游
ui-workspace。
其他客戶端插件若向 sidebar.workspaces.session.menu.item 等插槽註冊項,行爲與未覆寫時一致,仍由宿主加載順序與本插件的插槽聲明共同決定。
適用場景與注意¶
適合誰
經常在單個工作區內 fork 多路會話、需要樹形摺疊與「歸檔全部」的 Web 客戶端用戶;希望側欄工作區行爲與官方 0.2.1-rc.5 系 ui-workspace 一致、僅增強分叉與批量歸檔場景的人。
權限與信任
插件以當前 DSH 進程的權限運行,可訪問與會話、工作區相關的客戶端 API。安裝前應閱讀倉庫源碼與 MIT 許可證;src/ 等派生自官方 ui-workspace,上游說明見倉庫 NOTICE.md。
兼容性與限制
- 僅實現 Web 客戶端半側(
dsh.client.platform: 'web'),無宿主服務、路由或後臺任務。 - 依賴
package.json中dsh.client.inject列出的客戶端包與插槽契約,由當前 DSH 版本提供;DSH 升級若改動插槽、控制器 API 或模塊表,需同步上游源碼重新打 bundle。本倉庫對應上游 0.2.1-rc.5。 - 不發佈 npm 包,安裝來源只有 GitHub 或本地
link:。
自行構建(可選)
若需從源碼生成 client.js(Node >= 20):
pnpm install
pnpm run build
產物由 esbuild 從 src/client/index.ts 打出;倉庫內 client.js 爲提交物,手改會在 CI 比對中失敗。
結尾¶
dsh-workspace-sidebar 用覆寫方式替換側欄工作區實現,在官方 ui-workspace 能力之上增加分叉會話樹、分支摺疊、工作區級批量歸檔與樣式熱替換,適合 fork 密集的工作流。插件目錄與說明見 SkillHub 目錄頁,源碼與安裝說明見 GitHub 倉庫。