前言¶
DeepSeek Harness(DSH)把側欄面板、會話標題欄按鈕和設置頁行項都交給插槽註冊表:每個插件往對應插槽註冊一條入口,界面就按註冊結果渲染。裝了很多插件之後,常見情況是某個按鈕或設置行並不常用,卻佔着固定位置;以前若只想去掉這一條,往往只能卸載整個插件。下面介紹社區插件 dsh-plugin-layout,它不改其他插件的源碼,而是在客戶端讀取註冊表,對已有入口做隱藏、顯示和排序。
這是什麼¶
dsh-plugin-layout(GitHub:yukingm/dsh-plugin-layout)由維護者 yukingm 發佈,分類爲客戶端插件。README 明確說明:它管理其他插件註冊到 DeepSeek Harness 界面裏的條目,本身不是再註冊一套 UI 的「功能插件」。作用對象是插槽註冊表裏的 sidebar panels、session header buttons 和 settings rows。
核心功能¶
插件在運行時讀取插槽註冊表,把找到的入口逐條列出,並提供以下能力(均來自官方 README):
隱藏與顯示
對每一行可單獨隱藏或顯示。隱藏時整行不再註冊,不是隻藏圖標;在隱藏期間,該入口不會繼續出現在對應插槽的列表裏。
排序
通過上下按鈕調整順序。順序以數字形式寫回入口的 order 選項,重新渲染或插件重載後仍有效。
恢復
可恢復單個插槽或全部策略。隱藏與排序保存在瀏覽器 localStorage,鍵名爲 dsh-plugin-layout:v1,可在同一管理頁清空。
未接管條目
由不受本插件管理、或在本插件激活之後纔出現的插件註冊的條目,會以只讀方式標爲「未接管 / unmanaged」,頁面反映的是當前真正掛載的內容。
管理的插槽
README 列出的插槽包括:
sidebar.panellistsidebar.footer.actionconversation.session.header.actionsconversation.session.header.utilitiessettings.general.itemsettings.sectionconversation.composer.dock
實現要點(便於理解邊界)
插件在註冊表的讀路徑上 patch entriesOfSlot、entries、getVersion、subscribe(公開服務與 host 兩側),對讀出的條目過濾並重排;不重建組件,也不對非自有條目調用 unregister。策略變更後,通過在同一 tick 內註冊並 dispose 一條臨時條目觸發真實註冊表變更,讓既有訂閱方(例如側欄面板列表)重新讀取過濾後的列表;該臨時條目不會出現在 UI 中。對 single 與 keyed 插槽會跳過這類通知,避免臨時條目在一幀內遮住真實佔用者。
安裝與啓用¶
包尚未發佈到 npm,需從 GitHub 安裝到 desktop profile。package.json 要求 DSH 引擎 >=0.2.0-rc.1。
安裝最新默認分支:
dsh plugin --profile desktop add github:yukingm/dsh-plugin-layout
鎖定標籤 release(README 示例爲 v0.1.0,與 package.json 中 0.1.0 一致):
dsh plugin --profile desktop add github:yukingm/dsh-plugin-layout#v0.1.0
dsh plugin 會把參數轉給 profile 目錄內的 pnpm,依賴寫入 profile 的 package.json,並把包加入 dsh.profile.bundles。
安裝完成後需要重啓一次桌面應用:Client 半部(client.js)是啓動時加載的瀏覽器 bundle。之後打開 設置 → 插件佈局(Settings → Plugin layout)即可使用。
卸載:
dsh plugin --profile desktop remove dsh-plugin-layout
本地開發時可將工作目錄作爲 pnpm 鏈接安裝;README 說明首次安裝仍需重啓,之後改 client.js 可由客戶端 HMR 拾取(示例路徑爲 Windows 風格,請換成本機絕對路徑):
dsh plugin --profile desktop add E:\my\code\dsh_plugin\dsh-plugin-layout
典型用法¶
- 按上文命令安裝並重啓 DSH 桌面端。
- 打開 設置 → 插件佈局。
- 在列表中找到目標插槽下的入口:不需要的條目選隱藏;需要調整展示順序的使用上下箭頭。
- 若誤操作,使用頁面上的恢復功能,或清空
localStorage鍵dsh-plugin-layout:v1對應的策略(README 說明可在同一頁面完成)。
無需額外配置文件;策略持久化在瀏覽器本地存儲。
適用場景與注意¶
適合誰
同時啓用多個 DSH 插件、希望精簡側欄面板、會話標題欄操作或設置頁條目順序的桌面端用戶;需要在不卸載插件的前提下臨時隱藏某個註冊入口的場景。
有意設計的限制(README「Limits, on purpose」)
- 不支持把入口從一個插槽搬到另一個插槽:條目歸屬註冊它的插件,且不同插槽傳入的 props 不同(例如側欄行與標題欄 dense 佈局)。
- 只處理列表類插槽相關的讀側過濾;
single、keyed插槽不觸發臨時條目通知。 - 只能管註冊表裏的條目,插件在自己容器內繪製的內容不在註冊表內,無法從這裏隱藏。
安全與許可
插件以當前 DSH 進程權限在客戶端運行;安裝前建議瀏覽倉庫源碼並確認許可證。本倉庫爲 MIT(README License 節)。
社區目錄頁(skillhub.cn)與 GitHub 由社區維護,與 DeepSeek / 幻方無官方從屬關係;DSH 生態強調「一切皆插件」,本插件是其中的界面佈局管理工具。
結尾¶
dsh-plugin-layout 解決的是「多插件共存時界面入口太擠、又不好單獨卸插件」的問題:在插槽註冊表讀側統一做隱藏、排序與恢復。更多信息見目錄頁 yukingm/dsh-plugin-layout 與源碼倉庫 github.com/yukingm/dsh-plugin-layout。