前言¶
DSH 的插件體系裏,一個 web profile 可能同時包含系統插件、界面插件、工具插件、自己添加的擴展包,以及當前會話臨時創建的動態插件。原生插件列表更像一張長名單,不容易分辨哪些屬於系統插件,哪些屬於用戶插件,也不方便查看說明和做卸載收尾。
dsh-pluginmanager 是一個面向 DSH web profile 的設置頁插件。它把插件整理成原生擴展、用戶擴展、運行中(臨時)三層視圖,並提供可編輯描述、補登記、停用/啓用和卸載管理。下面介紹它的功能、安裝方式和注意事項。
這是什麼¶
dsh-pluginmanager 由 zdjmrq 維護,npm 包名與 GitHub 倉庫名均爲 dsh-pluginmanager,許可證爲 MIT。項目與 DeepSeek 無隸屬關係,屬於社區插件。
它主要解決三件事:
- 把 DSH 插件按職責分層,減少在長列表裏逐個找包名。
- 給用戶擴展提供停用、啓用、徹底卸載、補登記和未登記依賴標籤。
- 爲插件提供可編輯描述、搜索過濾、數量徽章和雙語展示。
核心功能¶
三層架構視圖¶
插件被分成三類:
- 原生擴展:只讀展示,按系統層、WebUI 層、工具層組織,不提供卸載按鈕。
- 用戶擴展:可停用/啓用、徹底卸載、補登記,並顯示未登記依賴標籤。
- 運行中(臨時):展示當前會話中的動態 Cordis 插件,只讀。
用戶擴展管理¶
用戶擴展裏的操作會區分“臨時不可用”和“徹底清理”:
- 停用/啓用:只摘除或恢復激活行,保留配置,便於反悔。
- 徹底卸載:清理激活行、依賴聲明和
node_modules中的相關內容,並做二次確認。卸載過程會通過dsh plugin --profile web remove做依賴/bundles 收尾,再清理 patch 行與描述。 - 補登記:對手工放入
node_modules但未登記到dependencies的插件,將其納入依賴管理,使插件市場可識別。
描述、檢索與展示¶
插件管理器內置 90+ 個核心原生插件的中文名和一句話簡介。所有插件都支持編輯描述,保存位置爲:
~/.dsh/profiles/web/plugin-manager/descriptions.json
界面上支持按名稱、顯示名、描述、來源搜索過濾,也支持摺疊、數量徽章、中文名與包名並排、中英雙語展示。對於由當前 agent 預設控制的工具插件啓停,頁面會標出預設感知信息,避免誤讀。
熱切換與補丁寫入¶
啓用、停用、卸載會先把變更持久化到 cordis.patch.yml,再熱切換運行中的 Loader 條目。聲明 dsh.client.platform: web 的插件在切換成功後會自動刷新頁面。
補丁編輯採用文本塊級操作 cordis.patch.yml,保留註釋與 !!js 表達式,並在寫入前自動備份。Browser 半邊在 settings.plugins.tab slot 註冊,使用 React + CSS 變量。
安裝與啓用¶
安裝步驟¶
1、進入 web profile 目錄:
cd ~/.dsh/profiles/web
2、作爲 bundle 安裝插件倉庫:
pnpm add "git+https://github.com/zdjmrq/dsh-pluginmanager.git"
3、把包名追加到 package.json 的 dsh.profile.bundles 列表末尾。需要添加的包名是:
"dsh-pluginmanager"
4、重啓 dsh web 服務,然後進入:
設置 → 插件 → 插件管理
避免重複激活¶
只選一種安裝方式,不要將 bundle 方式與手工 cordis.patch.yml 插入行混用。該插件自帶 cordis.patch.yml;如果另外在 profile 的 cordis.patch.yml 中寫入同樣的插入行,啓動會報:
duplicate loader entry id: pluginmanager
並拒絕啓動。
排查時檢查這兩個位置,同一插件只應出現在其中一處:
~/.dsh/profiles/web/package.json的dsh.profile.bundles~/.dsh/profiles/web/cordis.patch.yml
如果從舊版 patch 行方式升級,先刪掉 patch 裏對應那一行,再安裝 bundle。本地開發調試如果使用 file: 依賴指向倉庫目錄,同樣不要疊加 patch 行。
典型用法¶
查看插件分層¶
進入插件管理頁後,先看頂層摺疊項和數量徽章,再展開對應層。對於原生擴展,重點看系統層、WebUI 層、工具層的劃分;對於用戶擴展,重點看是否有未登記依賴標籤。
編輯描述¶
找到目標插件,點編輯描述,寫入備註。保存後會落到 ~/.dsh/profiles/web/plugin-manager/descriptions.json。
處理未登記插件¶
如果某個插件是手工拷進 node_modules 的,可能沒有寫進 dependencies。在用戶擴展裏使用補登記,把它納入依賴管理。之後插件市場也能識別它。
停用或卸載¶
如果只想暫時關閉某個用戶擴展,使用停用/啓用,配置會保留。如果要移除插件,使用徹底卸載,並按二次確認繼續。卸載會涉及 cordis.patch.yml 和 package.json 的修改,寫入前會有備份。
適用場景與注意¶
這個插件適合維護 DSH web profile、安裝過較多擴展、需要區分系統插件和用戶插件的人。
使用前建議注意:
- 它會在當前 dsh 進程中運行,並能讀寫 profile 下的配置文件。
- 卸載、停用操作會修改
cordis.patch.yml和package.json,每次寫入前有備份;仍建議審閱源碼後再使用。 - 熱加載的即時生效等於讓目標插件在本進程內重啓一次;正在使用的會話狀態,例如運行中的終端,會斷開。
- 若運行中切換失敗,操作已持久化,重啓服務後仍會生效。
- 原生擴展不提供卸載按鈕。
- 項目許可證爲 MIT,並與 DeepSeek 無隸屬關係。
鏈接¶
GitHub 倉庫:https://github.com/zdjmrq/dsh-pluginmanager