DSH 插件市場:管理 HTTPS 插件倉庫、校驗下載並管理靜態插件插拔

DSH 理念是「一切皆插件」。開發者從社區目錄(如 skillhub.cn)獲取插件後,需要一個受控的機制來管理這些插件的生命週期和來源。本插件提供 Host 插件市場和 Web 設置頁,旨在解決插件來源管理、下載校驗及啓停控制的問題。

功能

本插件主要提供以下能力:

  1. 插件倉庫管理:支持用戶在設置頁添加 HTTPS 插件倉庫,倉庫狀態保存在 $DSH_HOME/plugins/market/repositories.json。
  2. 下載校驗:在下載前驗證 HTTPS 協議、manifest 字段、entry 路徑以及 SHA-256 校驗和。
  3. 靜態插件插拔:靜態插件默認展示插拔狀態。安裝後默認停用,啓用/停用操作會寫入配置文件 $DSH_HOME/plugins/market/static.patch.yml,下次啓動 DSH 時生效。
  4. 動態插件控制:動態插件默認只展示運行/停止狀態。只有 manifest 聲明 controllable: true,且 Host 顯式注入可釋放的生命週期控制器時,才提供手動啓動/停止功能。
  5. 安全邊界:不自動執行下載的插件代碼。下載內容只寫入已校驗的安裝目錄,靜態插件通過 Host 生成的 Loader patch 加載。

倉庫格式

倉庫是一個 HTTPS JSON 文件,當前 schema 版本爲 1。示例內容如下:

{
  "version": 1,
  "plugins": [
    {
      "id": "example-static",
      "name": "示例靜態插件",
      "version": "1.0.0",
      "description": "一個經過校驗的靜態插件。",
      "type": "static",
      "downloadUrl": "https://example.com/plugins/example-static/index.js",
      "checksum": "0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef",
      "entry": "index.js",
      "permissions": ["settings.read"],
      "config": {
        "example": true
      }
    }
  ]
}

字段要求如下:

  • id:[a-z0-9][a-z0-9._-]{0,63}。
  • type:static 或 dynamic。
  • downloadUrl:必須爲 HTTPS。
  • checksum:小寫 SHA-256 十六進制摘要。
  • entry:相對路徑,禁止絕對路徑、反斜槓和 ..。
  • permissions、config、controllable 爲可選字段。

安裝與啓用

在安裝前,請先閱讀 core-patches/README.md,因爲當前 DSH 主線還沒有合併本插件所需的 Host 掛載邏輯。請先把對應改動合入 DSH 核心。

核心補丁就緒後,將本倉庫作爲依賴加入 DSH 的 profile 或 web bundle,並讓 dsh.bundle.patch 指向本包的 cordis.patch.yml:

{
  "dependencies": {
    "@deepseek-ai/dsh-host-plugin-market": "github:V-dev-388/DSH-plugin-market"
  }
}

典型用法

  1. 在 DSH 的 Web 設置頁添加一個 HTTPS 插件倉庫 URL。
  2. 點擊「刷新目錄」以獲取倉庫內的插件列表。
  3. 選擇插件進行安裝或移除。
  4. 對已安裝的靜態插件進行啓用或停用管理。
  5. 將本倉庫作爲依賴加入 DSH 的 profile 或 web bundle。

適用場景與注意

  • 適合需要統一管理第三方插件來源、確保代碼安全性的開發者。
  • 插件以當前 DSH 進程的權限運行,安裝前請檢查源碼與許可證。
  • 下載過程採用「先寫臨時目錄,校驗成功後原子替換安裝目錄」的方式,確保安裝過程的原子性和安全性。
羽毛球分组比赛记分
小程序二维码

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

小夜