dsh-package-manager:DSH 插件包管理中间件

前言

DSH(DeepSeek Harness)的核心理念是“一切皆插件”。随着插件数量的增加,手动管理依赖、配置热重载以及处理版本同步会变得繁琐。dsh-package-manager 是一个针对 DSH 的包管理中间件,它封装了原有的 add 模式,支持预设和插件。它通过官方的 watchUserPatches 机制,实现了插件的声明式安装与热装卸,无需重启进程。

工作原理

本插件只保留一条安装管线:将 dsh-bundle 插件安装为 profile 依赖,并将该插件声明的 dsh.bundle.patch 写入 profile 自己的 cordis.patch.yml。

热挂载、热卸载、禁用/启用不再直接操作 Loader API,而是完全交给宿主启动时挂载好的 watchUserPatches。DSH 在启动时将补丁层合成为一棵 Loader 树,本插件通过在 cordis.patch.yml 中写入带标记的托管块,利用行级 diff 实现更新:

  • 写块 = 热挂载
  • 删块 = 热卸载
  • 重写为“原补丁行 + { disabled: true }” = 热禁用/启用

这种方式避免了重复组合同一批行,且插件无需重启即可生效。

核心功能

  1. dsh-bundle 单管线热装卸:利用官方热重载路径,无需重启。
  2. 开关即禁用行:禁用操作保留依赖记录,仅在托管块尾部增删补丁行。
  3. 检查更新:对 git 源插件执行 git ls-remote,有更新时自动同步 mirror 并热更新。
  4. Custom Adapter 支持:无 bundle 插件仍可声明式 YAML adapter 执行任意安装/卸载步骤。
  5. requirements 复原与同步:通过 deps.yaml 做最小差集管理 install / keep / update / uninstall / disable / enable。
  6. 本地运行插件发现:监听 Cordis internal/plugin 并遍历已存在 fiber,自动展示本地插件。
  7. CLI + Web + API:提供统一的 dpm CLI、Web 设置页接口与程序化 API。
  8. 装前校验:拒绝 workspace: 依赖、非 ESM、缺 dsh.bundle.patch 或未构建入口的包。
  9. doctor:清理 ledger stale 记录、托管块残留与 profile pnpm 树。

安装与启用

前提:已有 DSH profile(例如 <home>/profiles/web),且尚未安装本包。

  1. 在 profile 目录下安装依赖:
    cd <home>/profiles/web
    pnpm add github:space-spacee-clamation/dsh-package-manager
    pnpm install
  1. 编辑 <home>/profiles/web/package.json,添加依赖(不要添加到 dsh.profile.bundles):
    {
      "dependencies": {
        "@dsh-ext/dsh-package-manager": "github:space-spacee-clamation/dsh-package-manager"
      }
    }
  1. 将包管理器自己迁入 profile 的 cordis.patch.yml 托管块:
    dpm self-managed --repo /path/to/dsh-package-manager --profile web

重启 DSH 后,包管理器由用户层托管块挂载。之后通过 watchUserPatches 即可热更新。

若未发布到 profile,也可以直接执行 node bin/dpm.mjs ... 使用 CLI。

典型用法

# 查看状态
dpm state

# 安装插件(dry-run)
dpm install --profile web --source github:owner/repo --adapter auto --dry-run

# 安装并允许构建
dpm install --profile web --source github:owner/repo --allow-build

# 卸载
dpm uninstall --profile web --id repo

# 检查更新
dpm check-update --profile web --id repo

# 禁用/启用
dpm disable --profile web --id repo
dpm enable --profile web --id repo

# 还原 requirements
dpm restore --file ./requirements/deps.yaml

# 同步 profile
dpm sync --repo . --modes web,headless

# 运行诊断
dpm doctor

适用场景与注意

本插件适合需要批量管理 DSH 插件依赖和热重载的 DSH 用户。由于插件以当前 DSH 进程的权限运行,安装前应仔细检查源码与许可证。

当前内容仍在迭代中。

结尾

dsh-package-manager 通过统一管线和托管块机制,简化了 DSH 插件的安装与热更新流程。通过 CLI、Web 和 API 的结合,它为插件管理提供了从命令行到可视化界面的完整工具链。

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

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

小夜