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 进程的权限运行,安装前请检查源码与许可证。
  • 下载过程采用「先写临时目录,校验成功后原子替换安装目录」的方式,确保安装过程的原子性和安全性。
羽毛球分组比赛记分
小程序二维码

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

小夜