dsh-sidebar-shelf:把 DSH 側欄面板收成一行可搜索收納架

前言

在 DeepSeek Harness(DSH)裏用 Web 或桌面客戶端時,左側欄會依次堆疊品牌行、New Session、各個全局面板入口、工作區列表和 Settings。每裝一個會註冊面板的插件,側欄就多一行——插件管理、插件市場、定時任務、MCP Studio、上下文、Skills、系統監控等,十行左右大約佔掉 400px 高度,留給會話列表的空間往往只剩幾條。若你習慣同時開多個插件面板,又不想改 DSH 本體,就需要一種只動客戶端、把「面板入口」收攏的辦法。下面介紹社區插件 dsh-sidebar-shelf(側欄收納架)的做法。

這是什麼

dsh-sidebar-shelf 由維護者 wumouren114 發佈,分類爲客戶端插件,MIT 許可證,當前包版本爲 0.2.1(以倉庫 package.json 爲準)。它把側欄裏所有面板註冊行摺疊成原位置的一行 Panels / 面板,緊挨在 New Session 與工作區列表之上;需要某個面板時再點開收納架選擇,用完後側欄仍保持緊湊。

插件目錄頁:skillhub.cn/plugins/wumouren114/dsh-sidebar-shelf。DSH 生態強調「一切皆插件」;SkillHub 等社區目錄與 DeepSeek / 幻方無官方從屬關係,安裝前請自行查看源碼與許可證。

核心功能

以下能力均來自倉庫 README 與實現說明,未在資料中出現的配置項不寫。

一行替代整列面板入口

收納架佔用的仍是原生面板行的位置、寬度和間距; sibling 面板行被隱藏後,工作區列表直接上移。收納架本身通過 sidebar.panellist 註冊一行(order: -1000,標籤爲「面板 / Panels」),複用 Shell 的 panelRow 按鈕、懸停、36px 軌道形態和 tooltip,而不是另畫一條假側欄。

收納架內的面板列表

  • 從 ctx.slots.entriesOfSlot("sidebar.panellist") 讀取其餘面板,按 order 與註冊順序排序,兩列展示,每項使用面板自己註冊的圖標組件。
  • 打開面板走官方 API:ctx.layout.selectPanel(id);當前選中狀態來自 ctx.layout.panelInfo,在收納架內顯示 active 標記。
  • 面板數量超過七個時出現搜索;支持鍵盤:↑/↓ 移動、Enter 打開、Esc 關閉,直接輸入可過濾。

兼容「直插側欄」的插件行

部分插件不走路由 slot,而是用 data-dsh-*-entry 約定把一行插進側欄(如 dsh-webchat、taskboard、ssh)。收納架會在原位隱藏這些行,並在收納架頂部列出其圖標、標籤與 active 狀態;選中時調用該行自己的 click(),原有開關邏輯不變。

窄軌與主題

56px 側欄軌道模式下,仍顯示 Shell 的 36px 圖標,收納架在軌道側面展開而非蓋住軌道。樣式僅使用 --dsw-alias-*、--dsw-radius-*、--dsw-shadow-* 等 token,隨淺色 / 深色主題切換。

安裝與啓用

需要帶 web profile 的 DSH 客戶端(桌面應用共用同一套客戶端)。CLI 安裝 Node.js ≥ 20;客戶端要求 DSH 0.2.x。倉庫說明該包自帶手寫 lib/client.js,無 prepare / postinstall,從 GitHub 安裝時不會卡在 pnpm 的 ERR_PNPM_GIT_DEP_PREPARE_NOT_ALLOWED 或 ERR_PNPM_IGNORED_BUILDS。

README 中的安裝示例使用 desktop profile;若你實際跑的是 web、tui 等,把 --profile 換成對應名稱即可:

dsh plugin --profile desktop add github:wumouren114/dsh-sidebar-shelf

安裝後請在 Settings → Plugins 中啓用(會寫入 dsh.profile.bundles),並重新加載頁面。

驗證: 整列面板入口應變成 New Session 與工作區之間的單行 Panels。點擊後能看到所有已註冊面板(含 Plugins);選中一項會打開該面板並關閉收納架。

典型用法

  1. 完成安裝與啓用並重載頁面後,側欄只保留一行 Panels(或「面板」)。
  2. 點擊該行,在展開的收納架裏點選目標面板(例如插件管理、MCP Studio)。
  3. 面板較多時用搜索或鍵盤快速定位;用 Esc 關閉收納架而不切換面板。
  4. 若同時使用帶 data-dsh-*-entry 的插件,其入口會出現在收納架列表頂部,行爲與側欄原按鈕一致。

卸載或禁用插件後,標記、事件與樣式表會移除,原生多行面板入口恢復顯示。

實現要點(供排查問題)

插件不修改工作區行、品牌行、Settings 或宿主機行爲。核心在 lib/client.js:註冊收納架行 → 在 capture 階段攔截點擊以打開收納架並避免 Shell 對無效 id 調用 selectPanel → 用 scoped CSS 隱藏同列表內其他行(列表節點仍掛載以保持佈局)→ 彙總 slot 與注入行並渲染收納架 UI。

資料中記錄的驗證環境包括 DSH 0.2.1-rc.3、Windows、Chromium 1440×900 下的 23 項端到端檢查,以及 node test/smoke.mjs 的 10 項 manifest / 接線檢查(無瀏覽器依賴)。

適用場景與注意

適合: 已安裝多個側欄面板插件、希望把垂直空間還給工作區列表,且接受「面板入口默認收進收納架」的 DSH 用戶。

務必瞭解:

  • 插件在當前 DSH 進程權限下運行;安裝前請閱讀 GitHub 源碼 與 MIT 許可證。
  • 所有其他面板行都會被隱藏,包括 Shell 自帶的 “More”(Browse other plugins / Create your plugin);Plugins 面板仍可從收納架一次點擊打開。
  • 僅當注入行遵循 data-dsh-*-entry 時纔會被收納;無該標記的自定義注入行仍會留在側欄。
  • 暫無「固定某幾個面板在側欄」的策略;需要可在倉庫 issue 反饋。
  • 不要與同樣隱藏面板列表的插件疊用(如 dsh-toomuch-plugins、dsh-sidebar-organizer),只選其一。
  • 若未來 DSH 更改側欄 DOM 結構,最壞情況是列表未被隱藏,而非側欄損壞。

結尾

dsh-sidebar-shelf 用一行原生樣式的 Panels 入口,把 DSH 左側所有面板(含符合約定的注入行)收進可搜索、可鍵盤操作的收納架,把側欄高度還給工作區。需要安裝命令、截圖與限制說明時,以倉庫 README 爲準。

  • 目錄頁:https://www.skillhub.cn/plugins/wumouren114/dsh-sidebar-shelf
  • GitHub:https://github.com/wumouren114/dsh-sidebar-shelf
羽毛球分组比赛记分
小程序二维码

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

小夜