前言¶
DeepSeek Harness(DSH)的 Web 界面裏,很多入口來自各插件往「槽位」裏註冊的條目:設置對話框左側的分區、左側欄的面板圖標、欄底動作按鈕等。插件一多,順序、顯隱、文案往往各管各的,改一處可能要動上游或改多個插件配置。
下面介紹社區插件 dsh-slots-manager(維護者 Yiklek,分類:工作流)。它在客戶端槽位註冊表上統一做顯示/隱藏、排序、改名,不需要修改 deepseek-harness 或其它插件源碼。
這是什麼¶
dsh-slots-manager 是 DSH Web 插件:編排其它插件貢獻到界面上的槽位條目——顯示/隱藏、排序、改名——而不動上游。
實現上分兩塊:
- 槽位無關引擎:在
ctx.slots對應的原型上打三個補丁,對每個納管槽位套用一份策略; - 槽位表(
src/slots.ts):唯一寫明具體槽位的地方;加一個槽位 = 加一行。
當前版本(package.json 爲 0.1.0)納管三類槽位:
| 槽位 | 位置 | 隱藏 | 排序 | 改名 |
|---|---|---|---|---|
settings.section |
「設置」對話框左側導航分區 | ✅ | ✅ | ✅ |
sidebar.panellist |
左側欄面板圖標按鈕 | ✅ | ✅ | ✅ |
sidebar.footer.action |
左側欄底部、Settings 旁的動作 | ✅ | ✅ | ❌ |
sidebar.footer.action 不提供改名:該槽位註冊項不聲明 label,按鈕文案由組件通過 locale 渲染,改 label 無可見效果,因此 UI 不提供改名按鈕。
核心功能¶
管理面板與入口¶
兩個入口打開同一套編排面板:
- 設置對話框左側導航裏的 「設置編排」 分區(排在頂部附近,不可隱藏);
- 左側欄「插件」頁 → 本插件詳情頁(與
dsh-mnemon、dsh-context等配置區相同位置:plugins.bundle.config,按包名 keyed)。
面板按組展示「設置頁」「左側邊欄」等,每組可 重置本槽位。
策略如何生效¶
引擎在 SlotRegistry.prototype 上打三個補丁,覆蓋註冊與讀取路徑(cordis 服務代理動態取方法,對所有插件立即生效):
| 補丁 | 攔截點 | 作用 |
|---|---|---|
register |
註冊入口 | 記錄原值(order / label / registrant),不改寫,便於 reset 還原 |
entries |
列表讀取方(如設置外殼導航) | 過濾隱藏 + 讀時改寫 order/label(返回克隆) |
entriesOfSlot |
渲染器與側邊欄面板列表 | 過濾隱藏 + 原地替換 entry.options(保留對象身份,避免 StaleAuthorizationError) |
策略經 DSH 標準 settings 命名空間 slots-manager 持久化;宿主半區把策略聲明爲本插件的 Config,客戶端經 remote.settings 讀寫,由 SettingsProvider 落盤。持久化文檔按槽位分組,例如:
{ "version": 1, "slots": { "settings.section": { "hidden": {}, "order": {}, "labels": {} } } }
分組不是裝飾:條目 id 只在單個槽位內唯一;扁平結構會導致隱藏一處誤傷另一槽位同名 id。
安裝與啓用¶
官方 CLI:
dsh plugin --profile web add dsh-slots-manager
或在 profile 倉庫裏用 file: 依賴,並在 package.json 的 dsh.profile.bundles 中加入 dsh-slots-manager,然後執行 pnpm install。用 file: 前需在本插件目錄執行 pnpm build(main/exports 指向 lib/ 構建產物)。
重啓 dsh web 後生效。
與 dsh-settings-manager 互斥:本插件是其替代品(同一套補丁機制,範圍更大)。兩者同時啓用會疊加兩套補丁;啓用前請先移除 dsh-settings-manager。本插件不讀取舊插件留下的配置,命名空間與文檔結構均爲新建,無自動遷移。
插件在當前 DSH 進程權限下運行;安裝前請自行查看 GitHub 倉庫 源碼與 MIT 許可證。
典型用法¶
- 安裝並重啓
dsh web後,打開 設置 → 設置編排,或從左側欄 插件 頁進入 dsh-slots-manager 詳情配置區。 - 在對應槽位組內:對條目開關顯隱、拖拽或調整順序、在支持改名的槽位修改顯示名稱。
- 若改亂,對該組點 重置本槽位;策略會寫回
slots-manager命名空間,刷新後仍保留(由 SettingsProvider 持久化)。
非納管槽位(如 conversation.*、plugins.*、shell.* 等)不會被本插件修改。
適用場景與注意¶
適合誰
- 裝了多個 DSH Web 插件,想統一整理設置分區順序、隱藏不用的面板圖標、改設置裏分區標題;
- 希望欄底動作(如部分插件的 insights 入口)與其它槽位在同一處管理顯隱,而不逐個改各插件開關(與插件自帶顯示開關不衝突,本插件價值在於統一位置)。
限制與說明(摘自上游 README)
- 隱藏
sidebar.panellist條目只隱藏入口;對應主面板仍可能通過其它路徑到達(側邊欄點擊走selectPanel(id))。 - 本插件分區
slots-manager不可隱藏;Settings 入口在sidebar.settings,即使隱藏所有面板圖標仍可進設置恢復。 - 基礎設置分區先於第三方插件註冊,引擎在首次讀取時補記原值,不依賴插件加載順序。
開發構建(供貢獻者或 file: 依賴):pnpm install、pnpm typecheck、pnpm build;測試含單元、e2e 冒煙與 Playwright(見倉庫 README)。
結尾¶
dsh-slots-manager 用三個 SlotRegistry 補丁和一張可擴展槽位表,在不動上游的前提下集中管理設置分區、側欄面板與欄底動作的顯隱、順序與改名。社區目錄頁:skillhub.cn/plugins/Yiklek/dsh-slots-manager;源碼與詳細設計:github.com/Yiklek/dsh-slots-manager。