dsh-plugin-installer:在 Harness 界面里安装、更新与卸载插件

前言

DeepSeek Harness(DSH)把能力拆成可组合的插件 bundle,profile 用 pnpm 管理依赖。日常装插件时,命令行 dsh plugin add … 在官方桌面端有一个硬限制:应用运行时 desktop profile 由进程独占,pnpm 锁和加载器配置都在 app 手里,CLI 往往改不动正在用的 profile。设置里的官方「插件」页又主要管已安装列表和官方来源,社区包、GitHub 仓库、本地目录并不都在同一条路径里完成。

下面介绍社区插件 dsh-plugin-installer(维护者 DogEgg-alR,GitHub:DogEgg-alR/dsh-plugin-installer)。它在客户端设置 → 插件里增加 「安装与更新」 标签页,通过进程内的 pluginManager 服务安装与卸载,和官方插件页同一条实现;更新则转发 dshmarket 的公开更新接口,不在界面里重写版本策略。

这是什么

一句话:在 DeepSeek Harness 客户端界面里直接安装、更新、卸载 DSH 插件,并处理卸载后的 node_modules 残留。

分类属于 客户端 插件:宿主半提供 HTTP 桥并调用 pluginManager,客户端半在 plugins.tab 里渲染 UI。许可证 MIT,当前 package 版本为 1.4.3(以仓库 package.json 为准)。

核心功能

安装

输入任意 pnpm 认可的 spec,走 profile 自己的 pluginManager.installBundle,应用运行中也可安装,不会和 desktop profile 的文件锁对撞。

写法 例子
npm 包名 dsh-whale-widget
指定版本 dsh-better-sidebar@0.28.2
GitHub 仓库 github:DogEgg-alR/dsh-plugin-installer、owner/repo
本地目录 C:\Users\me\dsh-plugins\my-plugin

装完会说明结果是「已生效」还是「重启后生效」;失败时给出可操作原因(已安装、不是插件包、依赖歧义已回滚、版本不兼容、pnpm 输出等)。

更新

点「检查更新」后逐行对比 当前版本 → 最新版本,可单行更新,带进度、失败说明,以及在市场提供恢复点时的「回滚到更新前」。进度展示跟随市场报告的 phase / percent / downloaded / detail;阶段文案来自 pnpm 的 pnpm:stage(解析依赖 → 下载 → 链接 → 构建)。轮询间隔 400ms。

依赖:更新区需要已安装 dshmarket,且市场需支持 update-api/v1(README 写明兼容 dshmarket 1.66+,beta)。未装市场时只显示提示,不影响安装。

特殊行为(资料原文):agent 正在跑时市场可能返回 AGENTS_RUNNING,插件会改走 busyPolicy: "drain" 排队,等对话结束再自动执行;RELEASE_TOO_FRESH / VERSION_UNCHANGED 时界面额外提供「强制更新」。

卸载与残留清理

列表每行可卸载(两步确认)。若 pluginManager.removeBundle() 因 bundle 正在使用而拒绝(桌面端常见 bundle-in-use),界面会逐级尝试:直接移除 → 停用后再移除 → 只从 profile 的 dependencies 与 dsh.profile.bundles 摘除并提示重启。第 3 步不碰正在运行的进程。

摘除的包会写入 <profile>/.dsh-plugin-installer/pending-cleanup.json;宿主启动约 10 秒后自动清理 node_modules 残留,也可在界面触发 POST /dsh-plugin-installer/api/cleanup 立即清理。

安装与启用

方式一:普通 profile(dsh web / CLI)

dsh plugin --profile web add github:DogEgg-alR/dsh-plugin-installer

桌面端把 web 换成 desktop 即可,但 须在完全退出官方桌面应用后 在外部终端执行,否则 CLI 仍可能等锁。

方式二:手动写进 profile

cd ~/.dsh/profiles/web
pnpm add github:DogEgg-alR/dsh-plugin-installer

还须在 package.json 的 dsh.profile.bundles 里追加 "dsh-plugin-installer",或在 profile 的 cordis.patch.yml 里插入挂载行;两种方式不要同时用。

官方桌面端在应用运行时

  1. 让 DSH 对话用 plugin_manager 的 install_bundle 安装(见下一节),或
  2. 完全退出应用 → 外部终端执行方式一(profile 用 desktop)→ 再打开。

装上后 重启一次(新 bundle 只在启动时读加载器配置)。之后在 设置 → 插件 → 安装与更新 里装其它插件通常不必再为 installer 本身重启。

让 DeepSeek Harness 代为安装

把下面整段粘到 DSH 对话窗口:

帮我装插件 github:DogEgg-alR/dsh-plugin-installer 。
用 plugin_manager 工具的 install_bundle,target 填绝对路径或 spec;
装完把 application 字段告诉我,如果是 restart-required 就提醒我重启客户端。
不要自己改 profile 的 package.json,也不要手跑 pnpm。

典型用法

  1. 完成上述安装并重启(若提示需要)。
  2. 打开 设置 → 插件 → 安装与更新。
  3. 在输入框填入 spec(例如 github:DogEgg-alR/dsh-plugin-installer 或 npm 包名),点「安装」。
  4. 需要批量看版本时点「检查更新」;确认 dshmarket 已就绪后再点某一行的「更新」。
  5. 卸载时按界面引导;若提示 bundle 在用,按结果说明停用或「从 profile 配置摘除」,必要时重启或点「立即清理」处理队列。

安装请求在后台是 POST /dsh-plugin-installer/api/install,立即返回 202 { jobId },客户端轮询 GET /dsh-plugin-installer/api/job?id= 取结果,避免长连接被掐断——因此界面会有一段时间处于进行中状态,pnpm 在整个 profile 里解析并落盘,几十秒在 README 中被描述为常态。

适用场景与注意

适合谁:经常在桌面端或 dsh web 里试社区插件、GitHub 开发版、本地目录 bundle,又不想在 app 运行时和 profile 锁搏斗的 DSH 用户。

安全与权限:插件以当前 DSH 进程权限执行 pnpm 与 pluginManager 操作,等同于你在该 profile 里手动装包。安装前应查看目标仓库源码与许可证,不要安装来源不明的 spec。

生态说明:DSH 社区插件目录(如 SkillHub 上的条目)是独立站点,与 DeepSeek / 幻方无官方从属关系;本插件是社区维护的客户端工具,不是官方应用商店。

兼容性(README):DeepSeek Harness 桌面端 / dsh web,profile 名任意;更新功能依赖 dshmarket 1.66+;客户端半仅依赖加载器注入的 react。

结尾

dsh-plugin-installer 把「装包 spec → pluginManager」和「更新 → dsh-market/update-api/v1」搬进 Harness UI,并补全卸载与 pending-cleanup 流程,针对的是 desktop profile 运行时 CLI 改不动、官方插件页入口单一的问题。

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

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

小夜