dsh-webui-market-plugin:在 Web GUI 内浏览与安装社区插件

前言

DeepSeek Harness(DSH)把能力拆成可组合的插件,但装插件往往要查社区目录、复制安装命令、在终端里指定 profile,再重启 web 服务。社区目录独立维护在 awesome-dsh-plugin.com,与 DeepSeek / 幻方无官方从属关系;官网实现可参考 dsh-market

下面介绍由 Sanqi-normal 维护的 @sanqi-normal/dsh-webui-market-plugin:把目录浏览、安装、更新、卸载放进 DSH web GUI 的 设置 → 插件 → 插件市场,界面跟随 harness 深浅色主题,并按系统语言切换中英文。

这是什么

@sanqi-normal/dsh-webui-market-plugin 是 DSH web profile 内的社区插件市场客户端。它读取 awesome-dsh-plugin.com 的插件目录(JSON API plugins.json,含 Star 数与收录日期),在设置面板里展示分类、搜索与排序,并通过后台调用 dsh plugin CLI 把插件写入指定 profile 的 bundle 层。

插件当前版本为 0.5.5,许可证 MIT,GitHub 仓库约 100 stars。分类上属于联网工具:目录数据来自网络,安装可走 npm registry 或 GitHub 源。

核心功能

目录浏览与排序

打开 设置(Settings)→ 插件(Plugins)→ 插件市场(Plugin Market) 后:

  • 目录按分类分组,支持搜索与「已安装」过滤
  • 卡片显示 GitHub Star(无数据则不显示)
  • 可按 最热(Star 降序,无 Star 排最后)、最新(收录日期)排序,或恢复官网默认顺序
  • 大目录分批渐进渲染,避免一次性插入数百卡片造成卡顿
  • 顶部显示目录来源官网链接,可直达 awesome-dsh-plugin.com

详情 可查看该插件的官方安装命令(含目标 profile)。

安装、更新、卸载与任务队列

安装、更新、卸载组成 FIFO 任务队列。多个插件可连续排队;任务面板固定在右下角,实时显示「排队中 / 校验中 / 执行中 / 完成 / 失败 / 已终止 / 超时」。可取消排队项、终止执行项、查看每个任务的 pnpm 日志。

  • 默认任务超时 120 秒,可用环境变量 DSH_MARKET_OP_TIMEOUT_MS 调大(例如 300000
  • 遇到 pnpm 临时网络错误(GET ... errorETIMEDOUTECONNRESET 等)会自动重试一次
  • 一键更新全部 会把所有可更新插件依次加入队列
  • 队列支持一键清空已完成/失败记录;清除会同步到服务端,刷新后不会再次出现

已安装插件卡片会显示真实状态(与 profile 的 package.json 同步),按「作者 + 仓库」(owner/repo)识别,避免同名插件误标。目录外或市场之外安装的依赖也会出现在 本机插件 列表,标注目录内/外、已停用、来源类型,并支持停用、启用或卸载(内置 bundle 与本地 link/file 源不提供删除)。

跨 Profile 安装与同步

官网目录默认发布 --profile web 命令;桌面端(desktop shell)使用独立 profile(如 desktop),只装到 web 的插件不会自动出现在桌面应用。

面板顶部提供 安装设置跨 Profile 同步

  • 自动同步到其它 profile 默认开启:安装时自动装到本机所有已初始化的 profile;关闭后仅装到安装时选择的 profile
  • 安装确认框可选目标 profile(默认 web)
  • 跨 Profile 同步 把 web 里已装的插件一键补装到目标 profile(只新增缺失项)
  • 同步为本地复制:源 profile 已装过才放行(syncFrom 校验),目录外插件(如 aegis)也可同步;装到 desktop 等 profile 后需重启对应应用

安全机制与试装验证

  • 来源白名单:安装只接受精选目录收录的 github: 源(与 dsh-market 策略一致);目录抓取失败或 registry/link 源不做此限制。白名单对所有目标 profile 生效,可勾选「跳过安全检查」绕过
  • npm 优先:目录条目带 npm 映射时优先用 npm 安装/更新;仅 GitHub-only 插件走 GitHub 源。可在 npm/pnpm 配置中设置国内镜像(如 registry=https://registry.npmmirror.com
  • 试装验证(trial boot):白名单通过后,若插件未声明 web client 半端,会在临时 DSH_HOME 里试装并实际启动一次;只有出现 dsh web: 就绪行才判定可装。验证失败给出真实启动错误并拒绝安装,真实 profile 不会被写入。试装仅对 web profile 执行
  • 同源校验:写操作只接受同源 POST,跨源请求返回 403
  • 安装前自动快照:写入前会把 package.json 备份为 .mkts-snapshot-<时间戳>.json,可配合 dsh plugin --profile <name> remove <包名> 手工回退

停用、启用与热挂载

  • 停用 / 启用:停用保留依赖与磁盘文件,只移出激活的 bundle 层;状态写入 dsh.market.disabled,重启后仍保持
  • 热挂载:安装成功后,若 cordis.patch.yml 仅为简单 id/name 插入,可挂入运行中的组合并自动刷新页面;复杂 patch 或环境不支持时回退为「重启生效」。热挂载仅作用于运行中的 web profile

失败排查

安装 / 更新 / 卸载失败(含超时、已终止、已拒绝)后,失败弹窗和任务队列会出现 询问 DSH 按钮:前端新建对话,并把操作目标、环境信息与完整错误日志作为 prompt 发送给 AI,便于排查。

pnpm ≥11 若遇 ERR_PNPM_MINIMUM_RELEASE_AGE_VIOLATION,市场会自动把违规的 name@version 合并进 profile 的 pnpm-workspace.yamlminimumReleaseAgeExclude 并重试一次。

安装与启用

本插件在 DSH web profile 内运行,peer 依赖由宿主提供,用户无需手动安装 @deepseek-ai/cordis@deepseek-ai/dsh-client-runtime@deepseek-ai/dsh-client-ui-slots。当前版本面向 DSH 0.0.1-rc.2+(不含 0.0.1-rc.1)及 0.1.0-rc.2+。Node 要求 ^22.19.0 || >=24.0.0

方式一:从 npm registry 安装(推荐):

dsh plugin --profile web add @sanqi-normal/dsh-webui-market-plugin

方式二:从 GitHub 源码安装:

dsh plugin --profile web add github:Sanqi-normal/dsh-webui-market-plugin

安装后重启 web 服务生效:

pnpm dsh web

GitHub 源安装会执行包内 prepare 脚本。若被 pnpm 拦截,把提示的包名加入 profile 的 pnpm-workspace.yamlallowBuilds 后重试。pnpm 11 起未在 allowBuilds 中显式放行的构建脚本会导致 ERR_PNPM_IGNORED_BUILDS;若该包不需要构建脚本,可写成 false 明确拒绝。

典型用法

经过上面的安装步骤后,在浏览器打开 DSH web 界面,进入 设置 → 插件 → 插件市场

  1. 在搜索框或分类中定位目标插件,用「最热 / 最新」排序缩小范围
  2. 详情 核对官方安装命令与目标 profile
  3. 在卡片上执行 安装;若需 desktop 等 profile,在 安装设置 中确认「自动同步到其它 profile」,或在 跨 Profile 同步 区补装
  4. 在右下角任务面板观察进度;失败时可查看 pnpm 日志或点 询问 DSH
  5. 安装成功后,若未热挂载生效,执行 pnpm dsh web 重启 web 服务

维护者可用以下命令从官网 JSON API 刷新离线目录快照(官网不可达时会失败,不会复制旧数据):

pnpm run snapshot

快照写入 data/catalog-snapshot.json,供官网抓取失败时回退。

适用场景与注意

适合谁:经常在 DSH web GUI 里试用社区插件的开发者;需要在 web 与 desktop 等多个 profile 间保持插件一致的本机用户;希望用白名单、试装验证和任务队列降低「装坏组合」风险的环境。

务必注意

  • 本插件以当前 dsh 进程的权限运行,安装前应检查目标插件源码与许可证
  • 安装 / 卸载后通常需重启 web 服务;热挂载成功时可免重启
  • 在命令行手工执行 dsh plugin add/remove/update 可能短暂恢复已停用项,重启或下一次市场操作会再次应用停用状态
  • 跨 profile 同步只增不删,不会删除目标 profile 已有内容
  • 目录数据与插件数量以 awesome-dsh-plugin.com 为准;这是社区生态目录,不是官方应用商店

结尾

@sanqi-normal/dsh-webui-market-plugin 把 awesome-dsh-plugin.com 的目录搬进 DSH 设置面板,用队列化安装、白名单、试装验证和跨 profile 同步,把「查目录 → 敲命令 → 重启」收成一套可观测的流程。若你主要在 web GUI 里扩展 harness 能力,这是联网工具类里较完整的市场前端之一。

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

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

小夜