前言¶
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 }” = 热禁用/启用
这种方式避免了重复组合同一批行,且插件无需重启即可生效。
核心功能¶
- dsh-bundle 单管线热装卸:利用官方热重载路径,无需重启。
- 开关即禁用行:禁用操作保留依赖记录,仅在托管块尾部增删补丁行。
- 检查更新:对 git 源插件执行
git ls-remote,有更新时自动同步 mirror 并热更新。 - Custom Adapter 支持:无 bundle 插件仍可声明式 YAML adapter 执行任意安装/卸载步骤。
- requirements 复原与同步:通过
deps.yaml做最小差集管理install / keep / update / uninstall / disable / enable。 - 本地运行插件发现:监听 Cordis
internal/plugin并遍历已存在 fiber,自动展示本地插件。 - CLI + Web + API:提供统一的
dpmCLI、Web 设置页接口与程序化 API。 - 装前校验:拒绝
workspace:依赖、非 ESM、缺dsh.bundle.patch或未构建入口的包。 - doctor:清理 ledger stale 记录、托管块残留与 profile pnpm 树。
安装与启用¶
前提:已有 DSH profile(例如 <home>/profiles/web),且尚未安装本包。
- 在 profile 目录下安装依赖:
cd <home>/profiles/web
pnpm add github:space-spacee-clamation/dsh-package-manager
pnpm install
- 编辑
<home>/profiles/web/package.json,添加依赖(不要添加到dsh.profile.bundles):
{
"dependencies": {
"@dsh-ext/dsh-package-manager": "github:space-spacee-clamation/dsh-package-manager"
}
}
- 将包管理器自己迁入 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 的结合,它为插件管理提供了从命令行到可视化界面的完整工具链。