dsh-sidebar-layout:把 DSH 側欄插件入口收成可滾動窗口

前言

DeepSeek Harness(DSH)左側欄裏,每個帶側欄入口的插件都會佔固定一行:行高 36px,行間距 2px。入口一多,這一列會無條件變長,擠佔下方工作區會話列表的可視高度。宿主「更多」菜單裏的取消固定既不持久,也無法隱藏 Plugins 入口,排序也改不了。

下面介紹社區插件 dsh-sidebar-layout(維護者 Yu-jianhai,分類:客戶端)。它不改宿主側欄單例槽,在入口列表上疊一層佈局控制:限高滾動、拖動排序與調高、逐個顯隱,把省下來的縱向空間還給會話列表。

這是什麼

dsh-sidebar-layout 是 DSH 插件包:通過 dsh.client 與 cordis.patch.yml 注入客戶端 bundle(lib/client.js,無需單獨構建)。目標很明確——把左側欄插件入口從「無限長高的一整列」變成「有上限、可滾動、順序與顯隱可持久化」的窗口。

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。

典型用法

  1. 安裝並重啓(必要時)後,側欄入口列會受插件管理的 max-height 與滾動約束。
  2. 需要常看的入口拖到靠前位置;不常用的在 設置 → 側欄佈局 或底欄三條線浮層裏關閉顯示。
  3. 入口變多時,在列表底邊熱區拖動調高可見行數,或保持較小上限並在窗口內滾動。
  4. 調試時在瀏覽器控制台使用 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 倉庫。

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

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

小夜