前言¶
DeepSeek Harness(DSH)左側欄裏,每個帶側欄入口的插件都會佔固定一行:行高 36px,行間距 2px。入口一多,這一列會無條件變長,擠佔下方工作區會話列表的可視高度。宿主「更多」菜單裏的取消固定既不持久,也無法隱藏 Plugins 入口,排序也改不了。
下面介紹社區插件 dsh-sidebar-layout(維護者 Yu-jianhai,分類:客戶端)。它不改宿主側欄單例槽,在入口列表上疊一層佈局控制:限高滾動、拖動排序與調高、逐個顯隱,把省下來的縱向空間還給會話列表。
這是什麼¶
dsh-sidebar-layout 是 DSH 插件包:通過 dsh.client 與 cordis.patch.yml 注入客戶端 bundle(lib/client.js,無需單獨構建)。目標很明確——把左側欄插件入口從「無限長高的一整列」變成「有上限、可滾動、順序與顯隱可持久化」的窗口。
- 倉庫:Yu-jianhai/dsh-sidebar-layout
- 目錄頁:SkillHub 插件頁
- 許可證:MIT(© 2026 Ne_Rn)
- 平臺要求:
dsh引擎>=0.2.0-rc.1 <0.3.0-0(README 標註 DSH 0.2.x);Node>=20
README 中舉例:約八個側欄入口時,入口列固定佔用約 348px,會話列表因此被壓縮。本插件通過 nav 的 max-height(按可見行數 3 行起,最多到「一行一個入口」)把多出的入口收進窗口內滾動,而不是繼續向側欄要高度。
核心功能¶
限高與滾動¶
鼠標移到入口列表底部會出現橫向熱區,上下拖動可改變窗口顯示行數;雙擊可恢復「不限高」。行數下限爲 3,上限隨當前入口數量變化:最多拖到「全部 N 行」,不會出現空白行;若你主動設了較小的上限,新裝的側欄插件仍追加在列表末尾,留在滾動區外,小上限會被尊重。
拖動排序¶
行內懸浮時右側出現抓手,按住上下拖即可改順序,結果寫入 localStorage。設置頁提供 ↑ / ↓ 作爲鍵盤可達兜底。拖動時:被拖行變爲跟手浮卡([data-dsl-drag-card]),原位置用佔位([data-dsl-drag-ph])標出落點,其餘行以 180ms FLIP 讓位,鬆手先吸附再 persist();按 Esc 取消且不提交。佔位形態可在設置中選擇實心灰塊、虛線框或幽靈行,也可關閉吸附回彈——僅影響觀感,不改排序語義。
逐個顯隱¶
在 設置 → 側欄佈局 中勾選,或使用側欄底部三條橫線圖標打開的浮層,可對每個入口單獨開關。隱藏的行使用 display: none。這與宿主「更多」菜單裏的 pin 狀態不同步(宿主未暴露該 API)。
實驗性緊湊密度¶
設置裏可開啓「實驗性」緊湊模式,行高由 36px 變爲 28px,對應 nav[data-dsl-density="compact"]。
其它設計要點¶
- 不改宿主寬度與滾動條樣式,繼承
--dsh-scrollbar-width(5px),僅做橫向對齊補償,使列表滾動條與會話列表對齊。 - 與 dsh-apple-hig 分工:會話樹拖拽歸 apple-hig,一級導航入口歸本插件。
- 找不到側欄時靜默降級,最壞情況等同未安裝。
- 設置頁若在某 DSH 版本渲染失敗,會顯示錯誤文本與
__dsl排查提示,側欄本身不受影響。
偏好存儲鍵:localStorage['dsh-sidebar-layout:v1'],結構爲 { v, order: string[], hidden: string[], maxRows: number|null, density: 'comfortable'|'compact' }。
安裝與啓用¶
這是本地 profile 依賴方式安裝,與其它 DSH 本地插件一致:寫入 dependencies 並在 dsh.profile.bundles 中登記 bundle 名,再讓 node_modules/dsh-sidebar-layout 指向插件目錄(聯合或聯接均可)。若 DSH 的 HMR 關閉,安裝或修改後需重啓 DSH。
// ~/.dsh/profiles/desktop/package.json
{
"dependencies": { "dsh-sidebar-layout": "link:/path/to/dsh-sidebar-layout" },
"dsh": { "profile": { "bundles": [ /* … */ "dsh-sidebar-layout" ] } }
}
無構建步驟:lib/client.js 已是 window.__ModuleLoader__.load({…}) 形態的客戶端 bundle。
典型用法¶
- 安裝並重啓(必要時)後,側欄入口列會受插件管理的
max-height與滾動約束。 - 需要常看的入口拖到靠前位置;不常用的在 設置 → 側欄佈局 或底欄三條線浮層裏關閉顯示。
- 入口變多時,在列表底邊熱區拖動調高可見行數,或保持較小上限並在窗口內滾動。
- 調試時在瀏覽器控制台使用
window.__dsl:
-__dsl.state()— 當前偏好
-__dsl.mapping()— 入口 id 與渲染行對應
-__dsl.nav()— 定位到的nav
-__dsl.align()— 滾動條對齊實測值
-__dsl.caps()— 行數上限派生值
-__dsl.refresh()/__dsl.reset()— 刷新或清空偏好
維護者提供的自檢命令(在插件目錄內):
node --check lib/client.js
node test/boot-smoke.mjs
卸載時從 bundles 與 dependencies 移除名稱、刪除目錄聯接並重啓;插件會清理注入的 <style>、行內樣式與浮層節點。
適用場景與注意¶
適合側欄插件入口較多、會話列表經常被擠短的 DSH 0.2.x 桌面 profile 用戶。插件以當前 DSH 客戶端進程權限運行,安裝前應閱讀倉庫源碼並確認 MIT 許可證與 cordis.patch.yml 行爲是否符合你的環境。
注意:不要指望與宿主「更多」菜單的隱藏狀態一致;Plugins 入口仍受宿主規則約束。社區目錄 SkillHub 爲獨立站點,與 DeepSeek / 幻方無官方從屬關係。
結尾¶
dsh-sidebar-layout 用疊加層方式整理側欄插件入口:限高滾動、可排序、可調高、可顯隱,把縱向空間還給工作區會話列表。進一步瞭解可訪問 SkillHub 目錄頁 與 GitHub 倉庫。