dsh-dynplugin-manager:DSH 动态插件的安装、加载与生命周期管理

前言

DSH(DeepSeek Harness)的插件体系中,动态插件(Dynamic Cordis Plugins)通常有两条加载通道:runner 通道按会话加载,loader 通道通过持久挂载生效。对于需要人工安装、挂载、停用和移除插件的使用者来说,相关操作分散在命令、目录和配置项中,不够直接。

dsh-dynplugin-manager 是一个面向 DSH dynamic plugins 的管理插件,提供设置页、安装对话框、内置发现、slash commands 和生命周期操作。

这是什么

dsh-dynplugin-manager 是仓库 Thomas-key/dsh-dynplugin-manager 中的插件,包名为 dsh-dynplugin-manager,许可证为 MIT。

它管理的是 DSH dynamic plugins,包括 runner 会话级加载和 loader 持久挂载两类对象。仓库材料中的维护信息存在不一致:README 提到 authored by deepseek-v4-flash,并说明若相关维护说明未移除则作者不积极维护;package.json 的 author 字段为 illusion。使用前应自行审查源码、依赖和维护状态。

核心功能

内置插件发现

插件从两个位置发现候选:

  • runner managed dir:~/.dsh/dynplugin-manager/plugins/
  • profile node_modules:~/.dsh/profiles/<profile>/node_modules/

不需要额外配置目录,设置页会基于这些位置展示可管理对象。

Settings 页面

启用后,进入 Settings → Dynamic Plugins 可以看到动态插件状态。

页面提供:

  • 内置发现结果
  • live state badges
  • loader 插件的 disable / uninstall 操作
  • install dialog 入口

安装对话框

安装对话框支持以下来源:

  • local dir
  • GitHub repo
  • npm package

流程为:选择来源、扫描、按候选插件选择 link / copy 安装模式、查看即时结果、one-click mount。

其中 GitHub repo 来源会将 zip 解压到:

~/.dsh/dynplugin-manager/cache/

并支持 monorepo。

自动路由

/dynload <name> 会根据插件形态自动路由:

  • self-contained 插件走 runner session-scoped load
  • import-using 插件走 loader persistent insert-row mount

质量检查

插件使用 verify-before-persist 机制:在写入持久配置前执行验证;验证失败不写入内容。

安装与启用

先确认来源

README 中给出了 name collision warning:可能存在同名 npm 包。安装时建议明确从该仓库安装:

dsh plugin --profile web add -w Thomas-key/dsh-dynplugin-manager

如果从本地 checkout 安装:

dsh plugin --profile web add -w ./dsh-dynplugin-manager

安装运行时依赖

插件以 link 方式安装,Node 会从目录本身解析 import。@deepseek-ai/dsh-tools 不提交到仓库,需要先在 checkout 中安装,否则 dsh web 可能启动失败:

cd dsh-dynplugin-manager
npm install
cd ..

peerDependencies 中的 @deepseek-ai/cordisreact 由 DSH host 提供,不应本地安装。

启用

经过上面的步骤后,重启 dsh web,然后进入:

Settings  Dynamic Plugins

即可看到动态插件列表和安装对话框。

典型用法

加载插件

/dynload <name>

该命令会自动路由:

  • self-contained 插件进入 runner session-scoped 模式
  • import-using 插件进入 loader persistent mount 模式

停用插件

/dynunmount <name>

行为按通道区分:

  • loader:移除 insert row,相当于 disable,包本身保留
  • runner:删除 managed copy

完全移除插件

/dynuninstall <name>

完全移除包括:

  • insert row
  • dsh plugin remove
  • managed copy
  • 相关 records

手动清理 .pnpm 残留

完全移除后,如需手动回收 .pnpm 物理残留,可以执行:

dsh plugin --profile web prune

注意:dsh plugin --profile web prune 可能删除用户安装的包,因此插件不会自动执行 prune。

适用场景与注意

适合需要人工管理 DSH 动态插件的使用者和开发者,尤其是需要统一查看插件状态、从本地目录 / GitHub / npm 安装、挂载、停用和移除动态插件的场景。

使用前建议注意:

  • 插件会以当前 DSH 进程权限运行,安装前应检查源码、依赖和许可证。
  • 该插件许可证为 MIT。
  • 同名 npm 包可能冲突,应从 Thomas-key/dsh-dynplugin-manager 仓库明确安装。
  • 维护状态在仓库材料中不一致,使用前应自行判断维护活跃度。
  • npm 上已有 dsh-plugin-manager(author hrhgit),它管理 bundle plugins,与本插件管理的 dynamic plugins 不是同一对象。

链接

社区目录页是插件目录页面,不等同于官方应用商店。

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

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

Xiaoye