前言¶
DeepSeek Harness(DSH)的左上角側欄通過 sidebar.panellist 插槽向各插件開放:誰要放圖標入口,就註冊一條記錄並用 order 決定排序。外殼只按數字從小到大畫一列,不關心這些按鈕分別代表什麼。
插件裝多了之後,這一列容易變成互不相干的長列表,很難一眼分清用途。社區裏也有按插件各自加側欄按鈕的做法,但沒有統一的分組層。下面介紹的 插件側欄管理(包名 dsh-plugins-sidebar-manager,維護者 HighToward)只在視覺上接管這一列:自建一級/二級分類、調整順序、隱藏不需要的入口,不改其他插件代碼,也不要求對方配合。
這是什麼¶
這是一個面向 DSH Web 外殼的客戶端插件(DSH Desktop 與 dsh web 同屬 Web 外殼)。當前版本 0.1.0,許可 MIT。在 設置 → 插件側欄管理 裏完成所有調整,保存後立刻生效,無需重啓(link: 本地開發時改宿主半源碼需重啓 DSH)。
核心功能¶
分類¶
- 一級分類:側欄頂層的分組標題。
- 二級分類:掛在一級下面,帶縮進,可再拆細。
- 分類可重命名、上移、下移、刪除;可摺疊,摺疊狀態會記住。
- 刪除分類不會丟入口,成員退回「未分類」。
入口¶
- 每個側欄入口可放入任意分類,分類內可調順序。
- 每個入口可單獨隱藏或顯示;隱藏後從側欄消失,插件仍照常運行。
- 未歸類入口排在所有分類之後,順序與插件註冊時一致。
整體控制¶
- 接管側欄:總開關。關閉後側欄立刻恢復各插件註冊時的原樣,配置保留;再打開即恢復你的佈局。
- 重新掃描:重新讀取當前已註冊的側欄入口。
- 恢復默認:清空全部分類與隱藏設置,需 3 秒內點兩次確認。
側欄收折成約 36 像素寬的圖標條時,分類標題會自動隱藏,避免撐破布局;外殼自帶的「更多」等入口不受本插件管理。
安裝與啓用¶
從 GitHub 安裝¶
在 DSH 插件管理頁(側欄「插件」)點安裝,填入:
github:HighToward/dsh-plugins-sidebar-manager
命令行(以 desktop profile 爲例):
dsh plugin --profile desktop add github:HighToward/dsh-plugins-sidebar-manager
或使用 pnpm:
cd ~/.dsh/profiles/desktop
pnpm add github:HighToward/dsh-plugins-sidebar-manager
裝完之後¶
打開 設置,左側會多出一項 插件側欄管理(在「插件」之後)。插件列表中顯示中文名「插件側欄管理」,說明來自包內 locale/zh.json。
依賴:DSH >= 0.2.1-rc.2;React 18 及以上(設置頁使用 useSyncExternalStore)。插件無額外運行時依賴,由外殼注入模塊。
典型用法¶
第一步:建分類¶
進入 設置 → 插件側欄管理,點 新建一級分類。名稱可留空,但側欄會顯示空標題,建議命名。
在一級分類卡片內點 新建二級分類 可掛二級;也可用 上級分類 下拉改掛父級,或選「未指定」升爲一級。
第二步:歸類入口¶
每個分類卡片底部有下拉(僅未歸類入口)和 加入 按鈕。成員列表中:
- ↑ ↓:分類內順序。
- 眼睛圖標:隱藏或顯示(隱藏後行變淡並標「已隱藏」)。
- ×:移出分類,回到未分類。
第三步:側欄呈現¶
卡片頭部的 ▾ / ▸ 控制摺疊;摺疊後該分類下成員在側欄一併隱藏。一級分類之間的順序用卡片頭部 ↑ ↓ 調整;二級跟隨父級。
排查問題時,可先關閉 接管側欄,確認是否爲本插件導致的顯示差異。
配置與數據¶
配置存兩份,互爲備份:
| 位置 | 作用 |
|---|---|
瀏覽器 localStorage,鍵 dsh.plugins-sidebar-manager.v1 |
首屏即可按分類渲染 |
$DSH_HOME/plugins-sidebar-manager.json(默認 ~/.dsh) |
跨瀏覽器緩存、長期保存 |
改動先寫 localStorage,再防抖 400ms POST 到宿主;宿主用臨時文件加原子 rename 寫盤。清瀏覽器緩存可從宿主讀回;宿主無文件時按「未配置」處理,側欄保持原生順序。
文檔結構示例(version 當前爲 1):
{
"version": 1,
"enabled": true,
"groups": [
{ "id": "g1", "name": "創作", "level": 1, "parent": "", "collapsed": false }
],
"items": {
"skill-manager": { "group": "g1", "order": 0, "hidden": false }
}
}
入口 id 即各插件註冊 sidebar.panellist 時的 options.id(如 skill-manager)。讀入後會做規整,非法字段丟棄或回退默認值,避免半截配置拖垮界面。
宿主提供本機-only 的讀寫接口(GET/POST /api/dsh-plugins-sidebar-manager/config 等),非迴環地址返回 403。遠程端口轉發訪問時,POST 可能被拒,但已保存在 localStorage 的佈局仍可用。
實現要點(選讀)¶
官方插槽是扁平列表,沒有「分組標題」的註冊位。本插件在頁面加載後對側欄列做後置增強:通過 aria-label 與註冊表匹配定位 nav,不改 React 節點結構,用 flex 的 CSS order 調視覺順序,用 display: none 隱藏;分組標題以兄弟節點插入 DOM。外殼重渲染時 React 會復位 DOM 順序,但會保留各按鈕上的 style,因此 order 方案能持續生效。MutationObserver 與定時兜底負責與外殼同步;增強邏輯包在 try/catch 內,失敗只打日誌,不中斷 DSH 啓動。
適用場景與注意¶
適合:經常安裝多個 DSH 插件、希望按「創作 / 工具 / 調試」等習慣整理左上角入口,或暫時隱藏不常用面板又不想卸載插件的用戶。
注意:
- 插件在當前 DSH 進程權限下運行,安裝前宜閱讀 GitHub 倉庫 源碼與 MIT 許可。
- 側欄識別依賴外殼當前 DOM 習慣(如
nav、入口aria-label);外殼大改側欄結構時,可能表現爲「不接管、保持原樣」,一般不報錯。 - 卸載插件不會自動刪除
plugins-sidebar-manager.json與對應localStorage;徹底清理需手動刪除。 - 本插件歸類屬於社區目錄中的客戶端類工具;SkillHub 目錄頁 與 GitHub 爲公開來源,與 DeepSeek / 幻方無官方從屬關係。
結尾¶
插件側欄管理補的是 DSH 開放側欄在「入口變多」時的排版層:分類、順序、顯隱均可本地配置,並可一鍵交回原生順序。需要安裝說明與配置字段細節時,以倉庫 README 爲準。