DeepSeek Harness 側邊欄面板摺疊插件

前言

在 DeepSeek Harness(DSH)的客戶端界面中,側邊欄頂部的「全局面板條目」會佔用固定高度。宿主 @deepseek-ai/dsh-client-ui-sidebar 的渲染結構裏,nav.panelList 使用 flex:none,條目越多它越高,下方的工作區 div.regionArea 就會被擠壓。手機端抽屜本身很矮,條目一多直接把工作區擠沒了;桌面端條目數一樣,只是相對沒那麼明顯。爲了在不改動核心、不覆蓋其他插件的前提下解決這個問題,出現了 dsh-sidebar-panels-fold 插件。

這是什麼

dsh-sidebar-panels-fold 是一個客戶端插件,把側邊欄左上角的全局面板條目摺疊成一行,並提供勾選「只顯示哪幾個」的能力。手機端與桌面端使用同一套規則。插件通過 slot 數據與 DOM 屬性工作,不註冊、不覆蓋任何 slot,只控制顯示狀態——被收起的條目仍然註冊、仍然可以按 id 選中,插件功能完全不變。

核心功能

  1. 摺疊顯示:把側邊欄的全局面板條目收起到一行,減少佔用高度。
  2. 篩選面板:通過勾選方式指定只顯示哪些面板,其餘隱藏。
  3. 自動模式:根據側邊欄寬度自動保留前 N 條,無需手動配置。
  4. 持久化存儲:選擇保存在 localStorage['dsh.sidebar-panels-fold.v1'],下次打開保持狀態。
  5. 多端統一:手機端與桌面端使用同一套規則和存儲。

工作機制

插件通過五層機制實現上述功能:

數據面:讀取權威清單 ctx.slots.entriesOfSlot('sidebar.panellist'),返回 [{ id, order, label }],其中 label 支持 thunk,跟隨語言。

定位面:通過三級策略定位目標 DOM 元素:
- L1:命中 nav[data-dsh-pf-nav] 標記
- L2:直接子 <button> 的 aria-label 與槽位 label 集合匹配
- L3:結構兜底,父級 flex 且 flex-direction:column、自身 ≥2 個直接 button 子節點、且存在 overflow:hidden 的兄弟

呈現面:給每個行 <button> 打上 data-dsh-pf-row、data-dsh-pf-id、data-dsh-pf-shown="0|1" 屬性,插件自身的 <style> 用 [data-dsh-pf-row][data-dsh-pf-shown="0"]{display:none!important} 收起。

交互面:在 nav 末尾掛一個自有觸發器(data-dsh-pf-trigger),點擊後彈出自建彈層,提供全部顯示/全部收起/恢復默認/逐項勾選選項,選擇存入 localStorage。

守護面:使用 MutationObserver(React 重渲染會抹掉屬性)、ResizeObserver、matchMedia 監聽變化。手機抽屜↔桌面常駐列、寬態↔56px 軌道、語言切換、面板動態註冊後都會重新收斂。

策略與默認值

自動模式下(未做顯式選擇),插件會根據形態保留前 N 條:

形態 判定 保留
軌道(rail) nav 寬度 ≤ 72px 3
窄屏 matchMedia('(max-width: 1023px)') 命中 2
寬屏 其餘 4

當前正在使用的面板(aria-current="page")永遠可見,避免「面板在用、行卻不見了」。

存儲

localStorage['dsh.sidebar-panels-fold.v1'] = { pinned: string[] \| null, showAll: boolean }

  • pinned: null → 自動模式
  • pinned: string[] → 只顯示這些 id
  • showAll: true → 全部顯示

讀失敗(隱私模式/髒數據)一律回落默認,不影響頁面。

降級策略

  • 4 秒內找不到 nav:不隱藏任何條目(頁面行爲 = 原樣),期間低頻重試。
  • 超過寬限期仍找不到:console.warn 一次,說明「摺疊能力暫不可用,其餘不受影響」。
  • localStorage 不可用:選擇只在本次會話生效。

卸載

移除觸發器/彈層/<style>,並摘掉所有 data-dsh-pf-* 屬性,側邊欄回到宿主原樣。

安裝與啓用

在命令行中執行:

dsh plugin add github:xintingcui/dsh-sidebar-panels-fold

或在插件市場的 UI / 界面增強分類裏直接安裝。倉庫是純 JS,無構建步驟、無運行時依賴。

適用場景與注意

適合需要精簡側邊欄、避免面板條目過多擠壓工作區的 DSH 用戶。插件以當前 dsh 進程權限運行,安裝前應檢查源碼與許可證。

短結尾

dsh-sidebar-panels-fold 通過數據面、定位面、呈現面、交互面、守護面五層機制,在不改動核心、不覆蓋其他插件的前提下實現側邊欄面板摺疊與篩選功能,幫助在手機和桌面端都獲得更充裕的工作區空間。目錄頁:https://www.skillhub.cn/plugins/xintingcui/dsh-sidebar-panels-fold
GitHub:https://github.com/xintingcui/dsh-sidebar-panels-fold

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

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

小夜