dsh-pluginmanager:給 DSH Web 插件做分層、描述與卸載管理

前言

DSH 的插件體系裏,一個 web profile 可能同時包含系統插件、界面插件、工具插件、自己添加的擴展包,以及當前會話臨時創建的動態插件。原生插件列表更像一張長名單,不容易分辨哪些屬於系統插件,哪些屬於用戶插件,也不方便查看說明和做卸載收尾。

dsh-pluginmanager 是一個面向 DSH web profile 的設置頁插件。它把插件整理成原生擴展、用戶擴展、運行中(臨時)三層視圖,並提供可編輯描述、補登記、停用/啓用和卸載管理。下面介紹它的功能、安裝方式和注意事項。

這是什麼

dsh-pluginmanagerzdjmrq 維護,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.jsondsh.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.jsondsh.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.ymlpackage.json 的修改,寫入前會有備份。

適用場景與注意

這個插件適合維護 DSH web profile、安裝過較多擴展、需要區分系統插件和用戶插件的人。

使用前建議注意:

  • 它會在當前 dsh 進程中運行,並能讀寫 profile 下的配置文件。
  • 卸載、停用操作會修改 cordis.patch.ymlpackage.json,每次寫入前有備份;仍建議審閱源碼後再使用。
  • 熱加載的即時生效等於讓目標插件在本進程內重啓一次;正在使用的會話狀態,例如運行中的終端,會斷開。
  • 若運行中切換失敗,操作已持久化,重啓服務後仍會生效。
  • 原生擴展不提供卸載按鈕。
  • 項目許可證爲 MIT,並與 DeepSeek 無隸屬關係。

鏈接

GitHub 倉庫:https://github.com/zdjmrq/dsh-pluginmanager

羽毛球分组比赛记分
小程序二维码

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

小夜