前言¶
DeepSeek Harness(DSH)的桌面 Web UI 左側欄,導航項和工作區列表掛在同一列裏。條目一多,窗口高度不夠時,靠下的導航點不到,工作區也只能看到上半截。原生布局裏,各段往往各自滾動或固定高度裁切,沒法把「整列」當成一個可讀區域來用。
dsh-sidebar-groups 是社區客戶端插件,由 2797218091 維護,歸入 DSH 插件目錄的「客戶端」分類。它把導航與工作區合成一個可滾動區域,頂部 logo 與底部按鈕保持固定,併爲導航項、工作區分別提供可摺疊分組;佈局狀態在重啓後保留。下文按安裝、用法、配置與邊界說明,事實以 GitHub 倉庫 README 爲準。
這是什麼¶
插件全稱 dsh-sidebar-groups,當前版本 0.1.0,許可證 MIT。它只改造側欄 DOM 與客戶端 bundle,不修改 DSH 本體 app.asar,也不動 profile 裏第三方包的源碼。依賴 DSH >= 0.2.1-rc.1 的公開 slot、settings 與 Web 路由;不髮網絡請求、不注入遠程腳本、不使用 eval。
一句話:解決左側欄「內容被裁切」和「條目多時難以收納」兩類問題,用整列滾動 + 分組摺疊,並通過配置持久化保留你的佈局選擇。
核心功能¶
README 將能力歸納爲六點,此處只列已在文檔中核實的內容。
整列滾動(F1)
導航項與工作區落在同一滾動容器內;鼠標停在列內任意位置(含工作區條目)即可滾動。頂部區與底部按鈕不參與滾動;overscroll-behavior: contain,滾到頂或底不會把滾動傳給頁面。滾動條較細、懸停才更明顯,出現與消失儘量不引起橫向抖動;內容不足一屏時不顯示滾動條。
導航分組(F2)
每個導航項有穩定 id(來自 slot 註冊表),不按顯示文字匹配。項可放頂層或收進任意分組,分組可摺疊;組間與組內順序在面板裏用上移 / 下移調整。摺疊態、歸屬與順序在重啓後保留。
工作區分組(F3)
工作區段落同樣支持分組摺疊,配置與導航分組相互獨立。不足兩個分組時不繪製分組頭,避免空組頭佔位。
配置入口(F4)
側欄底部「分組」按鈕打開面板,改動立即生效,無需刷新瀏覽器。配置寫入 profile 相關機制(見下文「配置存哪兒」);舊的獨立文件 sidebar-groups.json 可一次性回遷,且不會覆蓋你已用面板寫過的值。
行爲不迴歸(F5)
原導航的點擊、跳轉、激活態、圖標與 tooltip 保持原樣;側欄收成圖標條、窄屏抽屜態下插件整體不接管(表現與原生一致)。不出現橫向滾動條、不會出現兩個側欄。
安全(F6)
除 host 側爲舊配置回遷而讀取 profile 目錄下 sidebar-groups.json(存在纔讀)外,無額外文件讀取與遠程行爲。
對比截圖見倉庫 docs/screenshots/before.png 與 after.png。
安裝與啓用¶
推薦從 GitHub 安裝;倉庫已提交構建產物 lib/,package.json 無 prepare / postinstall,因此安裝命令不會觸發本地編譯,也不會牽扯 pnpm 的 allowBuilds 構建授權。
dsh plugin add github:2797218091/dsh-sidebar-groups
README 還提到可選路徑:自行 npm publish 後可用包名安裝 dsh plugin add dsh-sidebar-groups,該形式在倉庫說明中標註爲沿用他插件寫法、本倉庫未實測。
裝完之後需要兩步,否則 bundle 不會掛載或瀏覽器仍用舊緩存:
- 重啓 DSH —— bundle 在啓動時裝配,不重啓不會加載新插件。
- 在瀏覽器中按 Ctrl+Shift+R 硬刷新 —— 客戶端 bundle 響應帶
immutable緩存頭,普通 F5 可能繼續用舊副本。
卸載順序(README 原文):
dsh plugin remove dsh-sidebar-groups
若本地 cordis.patch.yml 裏仍有手動添加的 link: 安裝行,應先刪掉;再執行 remove、重啓 DSH 並 Ctrl+Shift+R。teardown() 會還原被隱藏的節點並移除插件容器與樣式。
安裝插件會以當前 DSH 進程權限運行客戶端注入邏輯;安裝前宜自行查看 源碼與 LICENSE。
典型用法¶
- 點擊側欄底部 「分組」 按鈕(與設置同一行;側欄收成圖標條時僅顯示圖標,懸停有原生 title)。
- 在面板中自上而下操作:
- 整列滾動(頂部/底部固定) —— 取消勾選即恢復 DSH 原生側欄佈局;
- 導航項 —— 右上角「+ 分組」;每組一行,可摺疊、上移、下移、刪除(至少保留一個分組);組內每項可上移、下移,並通過「移到分組」下拉調整歸屬;
- 工作區 —— 同樣結構;
- 底部 恢復默認 與 完成。點遮罩或按 Esc 關閉。 - 出廠預設:導航頂層保留 插件、插件市場、任務看板 三項(頂層分組不顯示標題行),其餘收入默認摺疊的「更多」組;工作區出廠只有一個「工作區」分組,故不畫分組頭。首次安裝若只有單分組,視覺上可能接近「零變化」,這是「不留空組頭」的設計。
- 修改立即生效並寫回配置;重啓 DSH 後佈局仍保留。
若出廠把三項常用導航認錯(例如 boot 時 slot 註冊表尚未填滿),README 建議:打開「分組」面板 → 底部 恢復默認,會按當前完整註冊表重算並落盤。
配置結構簡述¶
配置掛在 settings 命名空間,對應 cordis.patch.yml 中的 insert id:
- insert:
- id: sidebar-groups
name: dsh-sidebar-groups
宿主側 Config 含 state(整份狀態文檔,默認未配置)與 legacyImported(舊獨立配置是否已回遷)。客戶端 SidebarGroupsState 形狀包括:
version:當前STATE_VERSION = 1scrolling:是否整列滾動,出廠爲truenav/workspaces:各自獨立的groups數組
每個 GroupSpec 含穩定 id、顯示 label、collapsed、showHeader、成員 items(導航側爲 slot id,工作區側爲段落標題文本處理後作 key)。出廠分組 id 含 top、more、ws-all。
客戶端通過 /sidebar-groups/api/state 讀、/sidebar-groups/api/update(POST,帶 expectedRevision 樂觀鎖)寫。瀏覽器另有 localStorage 鍵 dsh-sidebar-groups:state,僅在宿主路由不可用時兜底。README「已知限制」第 13 條說明:在部分環境下 settings 服務可能拒絕覆蓋 cordis 注入的 entry,此時狀態以本機 localStorage 鏡像爲主,關開 DSH 仍可保留;與 profile 掛載行的關係以實現爲準。
適用場景與注意¶
適合誰
長期在 DSH 桌面端使用、側欄導航和工作區條目較多、希望一列滾到底且按項目習慣摺疊分組的開發者。
兼容性
要求 DSH >= 0.2.1-rc.1,Node >= 20(構建側)。插件依賴 DSH 側欄 DOM 與 data-sidebar-* 等結構錨點;大版本升級後若側欄異常,宜先懷疑 DOM 適配層。無靜態 inject 時插件會靜默閒置,不會拖垮整個 GUI。
務必知曉的限制(節選)
- 工作區行不能重排順序,只能調整「屬於哪一組」與分組摺疊;原因是 React 18 根事件委託,克隆節點無法可靠點擊。
- 工作區分組 key 是段落標題文本;改名會導致丟失原分組歸屬。
- 圖標條態、窄屏抽屜態、寬度動畫進行中:插件跳過適配,表現同原生。
- 側欄底部內邊距相對原生略大(6 px → 16 px);
scrollbar-gutter: stable會常駐預留約 5 px,避免滾動條顯隱時橫向抖動。
完整列表見倉庫 README「已知限制」一節。
結尾¶
dsh-sidebar-groups 針對 DSH 左側欄「裁切」與「雜亂」兩類痛點,用整列滾動和雙軌分組摺疊給出可持久化的佈局方案,並在 README 中寫清 DOM 邊界與安全行爲。插件歸屬社區生態,目錄站 SkillHub 插件頁 與 GitHub 倉庫 爲查閱安裝命令、面板操作與配置的入口;與 DeepSeek / 幻方無官方從屬關係,安裝與使用請自行審閱源碼與許可證。