dsh-plugin-console
已验证@noob-stupid/dsh-plugin-console · v0.3.20 · MIT · Web 界面
DSH plugin management panel & marketplace: one-click enable/disable, multi-source market (GitHub/Gitee/custom), static-index market (500+ plugins / 300 skills), skills, suites, and one-click framework upgrade.
安装
dsh plugin add @noob-stupid/dsh-plugin-console 用 dsh --profile default --dump-config 确认 layer 已生效 —— 参见安装指南。
源码
标签
作者
说明文档
English: README.md | 中文: README.zh.md
DSH 插件中心(dsh-plugin-hub)
给 DeepSeek Harness(DSH)Web 界面加上插件管理面板:一键启用/停用已安装插件, 在多个搜索源上浏览 dsh-plugin 插件项目(GitHub / Gitee / 自定义源),一键添加并启用—— 并带一份 CI 每 6 小时自动收录的静态插件/技能索引。
🎯 框架一键升级(v0.3.13 亮点)
打开「插件管理」面板 → 插件市场 →
deepseek-ai/deepseek-harness卡片 → 点 「框架升级 → vX」,一步完成: 备份配置与框架本体(回滚点)→ 在线安装(服务不中断)→ 版本校验 → 失败自动回滚 → 自动重启生效。升级后自动重链框架配套包(避免 pnpm 顶层链接滞后导致的混版本问题,如模型插件旧版缺失 vision 模型)。 已实测:0.1.0-rc.8 → 0.1.1-rc.2 全程自动、失败可回滚、升级后可正常使用。
- 核心优势
- 一键部署
- 使用方法
- 功能
- 原理
- 兼容性策略
- 项目结构
- HTTP 接口
- AI 兜底安装与授权弹窗
- 框架层补丁(cordis.patch.yml 解析容错)
- 安全说明
- 免责声明
- 已知限制
- 帮助 / Help
- 生态与收录
- 支持
- 更新日志
- License
核心优势
| 优势 | 说明 | |
|---|---|---|
| 🧩 | 插件 + 技能双市场 | 自动收录 dsh-plugin topic 仓库(按 star 500+),另有技能 tab(agent-skills ∪ claude-skills ∪ dsh-skill,最多 300)——浏览、搜索、一键安装,零 GitHub API 调用 |
| 🤖 | 自动收录 CI | GitHub Actions 每 6 小时自动重跑 build-index(也支持手动触发);作者只需给自己的仓库打 dsh-plugin / agent-skills / claude-skills / dsh-skill 标签,无需申请、无需审核 |
| ⚡ | 秒开、零限流 | 索引以静态 marketplace/index.json 提交仓库,经 jsDelivr CDN 分发(宿主 10 分钟缓存)——终端用户零 GitHub API 调用、零限流 |
| 🔄 | 版本检测与一键更新 | 已安装条目自动比对 npm dist-tags.latest,卡片出现「更新 → vX」;聚合包子包版本不配套时给出 depsOutdated 提示,避免版本混搭启动冲突 |
| 🔀 | 多源检索 | GitHub / Gitee(仓库直装模式)/ 自定义搜索源(URL 模板 + 请求头认证 + 私网 http);「⊞」并行合并 GitHub + 全部自定义源 |
| 🔒 | 安全默认 | 全部路由仅环回;AI 兜底置于明确费用授权弹窗之后;基础设施行禁止开关(受保护) |
给插件作者:给仓库打上
dsh-plugin标签即可被官方 topic 列表 与本中心自动收录;技能类仓库请打agent-skills/claude-skills/dsh-skill。
一键部署
方式一:官方命令(推荐)
插件声明了 dsh.bundle 官方清单,一条命令装好并自动启用:
# npm 发布版(推荐:预构建产物,无需 git / 构建授权)
dsh plugin --profile web add @noob-stupid/dsh-plugin-console
# 或直接装 GitHub 源码(需 git,首次需 allowBuilds 授权)
dsh plugin --profile web add github:Noob-stupid/dsh-plugin-hub
卸载 / 重装(即更新):
dsh plugin --profile web remove @noob-stupid/dsh-plugin-console
dsh plugin --profile web add @noob-stupid/dsh-plugin-console
然后重启 dsh 服务 → 刷新页面 → 设置 → 插件 → 插件管理。
方式二:部署脚本(网络受限时的兜底)
Windows(PowerShell):
git clone https://github.com/Noob-stupid/dsh-plugin-hub "$env:TEMP\dsh-plugin-console" 2>$null; & "$env:TEMP\dsh-plugin-console\deploy.ps1"
Linux / macOS:
git clone https://github.com/Noob-stupid/dsh-plugin-hub /tmp/dsh-plugin-console 2>/dev/null; bash /tmp/dsh-plugin-console/deploy.sh
脚本会做两件事:把插件包拷进 $DSH_HOME/profiles/<profile>/node_modules/,
并在 cordis.patch.yml 幂等追加启用条目。完成后:
- 重启 dsh 服务(宿主代码变更需要重启进程;命令行方式重启进程,桌面客户端退出重开);
- 刷新页面 → 设置 → 插件 → 插件管理。
方式三:一句话交给 AI
安装 DSH 插件中心(dsh-plugin-hub):运行
dsh plugin --profile web add @noob-stupid/dsh-plugin-console(npm 发布版);若没有 dsh CLI,则克隆 https://github.com/Noob-stupid/dsh-plugin-hub 到~/.dsh/profiles/web/node_modules/,在cordis.patch.yml注册(id: plugin-console,name: @noob-stupid/dsh-plugin-console)。完成后重启 dsh web。
要求:DSH ≥ 0.1.0-rc.6(web profile,含 dsh-client-modules / dsh-host-plugin-inventory)。
使用方法
- 重启 DSH → 打开 Web GUI → 设置 → 插件 → 插件管理。
- 已安装列表:一键开关(HMR 约 1 秒生效)、按名称/id 搜索、展开详情(版本、仓库、README 摘要)。
- 插件市场:GitHub 源空查询直接打开静态索引(秒开);输入关键词实时搜索。顶部登录标切换
搜索源(GitHub / Gitee / 自定义);「⊞」多源合并;「★」只看可
dsh plugin add直装。 - 技能 tab:搜索框旁切换「插件 / 技能」,浏览并一键安装技能(克隆到
~/.dsh/skills/<名称>/)。 - 安装:点「添加到本地」→ 后台安装链自动执行(可放心离开页面);已安装条目自动出现 「检测更新」/「更新 → vX」。
功能
已安装插件(一键开关 + 详情)
- 默认只显示第三方插件(后装/非 dsh 自带),带「第三方」标签与删除入口;点「全部」切换查看完整列表(1.5s 亮框反馈);
- 列出全部插件条目(名称、加载状态、启用状态);支持按名称/id 搜索;
- 点「停用」= 在用户补丁层写入
- id: X+disabled: true,HMR 立即生效; - 点「启用」= 移除该停用条目;bundle 层本就停用的行用
disabled: false覆盖; - 打标「补丁停用 / 补丁强制启用」区分用户补丁状态;
- 基础设施保护:host 传输/热加载/存储/设置链上的插件(timer、hmr、webserver 等 70+ 行)标记「受保护」,禁止开关——误停用会破坏热加载本身;
- 详情面板:每个插件可点「详情」,展开简介、版本、仓库/主页链接与 README 摘要;
- 版本检测:「检测更新」走 curl 读 npm
dist-tags.latest(node 网络黑洞时也可用), 并提示需要同步的子包版本(depsOutdated),避免半更新混搭导致启动冲突。
框架一键升级(deepseek-harness 卡片)
- deepseek-harness 卡片在检测到框架新版本时显示「框架升级 → vX」(稳定版 latest 优先; latest 与当前相同时取 next 预发布渠道);点击一键完成:备份配置与框架本体(回滚点)→ 在线安装(服务保持运行、页面不断开)→ 版本校验 → 自动重启生效;
- 实时进度:升级时弹出
DSH-Upgrade窗口,实时显示 pnpm 下载进度;面板内进度卡片 同步显示等待时长; - 升级保护:失败自动回滚(robocopy,升级前校验回滚点有效)、版本校验防假成功、 15 分钟硬超时、卡死检测(debug 日志无更新自动切换 registry)、全局异常兜底、 15 分钟残留状态清理——框架绝不处于损坏状态;
- pnpm 通道:npm-cli.js 在 schtasks 任务环境启动即卡死(debug 日志 0 字节、网络请求
都发不出);升级改用
corepack pnpm(实测 0.4s 秒启动、11.5s 装完 rc.8)+ 国内源 npmmirror,并带dangerouslyAllowAllBuilds让 node-pty/koffi 等原生模块正常编译; - 运行时解析 bin.js:pnpm 布局下
@deepseek-ai/dsh是 Junction——拉起服务在运行时 解析(跟随 Junction 到当前版本),而非使用脚本生成时固化的路径; - 卡片关闭语义:终态(成功/失败)点叉号永久关闭(持久化);进行中点叉号仅本次会话 隐藏,刷新后恢复显示。
插件市场(多搜索源)
- 搜索源切换:点击顶部登录态标识弹出菜单,在 GitHub / Gitee / 自定义源 间切换(选择持久化); 市场标题、加载提示、搜索框占位符、说明行全部随源切换;
- GitHub 源:默认搜索
dsh-plugin,浏览器直连(失败自动回退服务端通道); - Gitee 源:Gitee 官方搜索 API 已停用,采用仓库直装模式——输入
owner/repo(支持中文路径与完整 URL)精确查找仓库并安装; - 自定义搜索源:软件源管理中添加(URL 模板含
{q}/{page}占位符),支持 请求头认证(如Authorization: Bearer ...)与本机/私网 http 地址; - 多源汇总:搜索框旁「⊞」开启——GitHub + 全部自定义源并行检索,结果合并并标注来源;
- ★ 官方筛选:只筛可
dsh plugin add直装的插件——根包带dsh.bundle清单(官方) 或聚合仓库中子包带dsh.bundle(子包可直装);标记由服务端 curl 双通道 + 客户端兜底补全, 搜索结果与筛选即时可用; - 类型徽标:官方 / 聚合 / 技能(仓库含 SKILL.md)自动识别;
- 「添加到本地」= 按当前源安装(registry 失败自动回退 git 通道)+ 写入启用条目,HMR 生效。
静态索引市场(插件 / 技能双 tab)
混合架构:浏览走静态索引(秒开、零 API 调用),搜索走实时通道(GitHub 搜索 API / 多源并行)—— 两者互补:新仓库即使还没进索引,也能被实时搜索找到。
- GitHub 源空查询展示静态索引(
marketplace/index.json,jsDelivr CDN + 宿主 10 分钟缓存): 按 star 排序 500+ 插件,秒开、零 GitHub API 调用; - 搜索框旁**「插件 / 技能」tab**:技能 tab 列出自动收录的
agent-skills∪claude-skills∪dsh-skill仓库(最多 300); - 自动版本比对:市场中已安装的条目后台自动查 npm
dist-tags.latest,卡片变「更新 → vX」; - 技能安装:技能条目一键安装 = git clone → 复制 SKILL.md 及同目录资源到
~/.dsh/skills/<名称>/(frontmatter 的 name 优先于仓库名;SKILL.md 位于仓库根或第一层 子目录均可识别);已装技能显示灰色「已装」徽标。
软件源管理
市场标题行右侧悬浮「软件源」按钮(半透明、颜色加深),弹出管理模态框:
- 安装源(registry):添加 / 行内编辑 / 设为主源 / 恢复默认;支持私有源与内网地址; 删除已保护(插件安装依赖的 npm 源,避免误删);
- 搜索源:内置 GitHub、Gitee + 自定义搜索源(增删、🔒 显示请求头数量);
- Gitee 登录(可选):直装模式无需登录;登录仅提高接口限额——创建第三方应用 (gitee.com → 数据管理 → 第三方应用,权限勾选 user_info、projects)后填入 client_id / client_secret → 保存 → 授权登录。
原理
开关语义
DSH 的 web profile 由 bundle 补丁层 + 用户补丁层($DSH_HOME/profiles/web/cordis.patch.yml)
组合而成,补丁是逐键覆盖语义。插件开关只是往用户补丁层追加/移除两行 YAML:
- id: 插件条目id
disabled: true
配置文件监视器(HMR)会在保存后 1 秒内重组合,无需重启——除宿主代码本身变更外。
安装链
配置的软件源按主→备依次尝试(默认 npmmirror → npmjs)
→ curl 手动安装 (node 网络黑洞时:curl 下载 tarball 解压进 node_modules)
→ git 通道 (GitHub 走加速代理+直连,Gitee 走对应平台)
→ Windows EPERM 陈旧目录自动清理重试
→ 自动展开仓库子包 (聚合包优先)
→ 本地 AI 兜底 (置于明确费用授权弹窗之后)
技能安装独立走:git clone --depth 1 → 复制 SKILL.md 资源到 ~/.dsh/skills/<名称>/
(不碰 npm、不写补丁、无需重启)。
数据源
GitHub Actions(每 6 小时,仓库自带 token)
└─ scripts/build-index.cjs:分页拉取 topic:dsh-plugin(按 star 500 个)+ 技能 topic(300 个)
└─ 提交 marketplace/index.json 回 main
└─ 宿主经 jsDelivr CDN 读取(10 分钟缓存)→ 市场秒开、零 API 调用
└─ 实时搜索仍走 GitHub 搜索 API(浏览器直连 + 服务端通道兜底)
版本检测与已安装识别
- 已安装识别:按已装条目的
repository字段或模块名与市场条目比对(仓库名 → 包名映射); - 版本检测:
check-update走 curl 读 npmdist-tags.latest;聚合包额外对比子包 声明版本 vs 本地实际版本(depsOutdated),防止半更新混搭导致启动冲突。
兼容性策略
- 当前支持 DSH 0.1.0 系列(
0.1.0-rc.6及同系列版本)。 - 面板会读取运行中的
@deepseek-ai/dsh-web-app版本:官方发布破坏性升级 (0.2 / 1.0 等)后,面板顶部会显示兼容性警告并给出本仓库地址,而不是默默失效。 - 官方破坏性更新可能改动的接口:补丁层语义、
webServer.register、 加载器条目结构、dsh.clientbundle 格式、settings.plugins.tab插槽。 届时随官方版本更新本仓库即可(依赖面已收窄到上述几个点)。 - 部署脚本不校验版本、直接安装;面板里的警告是权威提示。
项目结构
lib/index.js 宿主端插件(/plugin-console/* 路由 + 补丁读写 + 多源检索 + 安装)
lib/client.js 浏览器端 bundle(ModuleLoader 格式,设置页 tab)
scripts/build-index.cjs 索引构建(插件 --limit 500 / 技能 --skills --limit 300)
scripts/apply-framework-patch.cjs 框架层补丁(issue #5,幂等,可重复应用)
.github/workflows/registry.yml 自动收录 CI(每 6 小时 + 手动触发)
marketplace/index.json 生成的静态索引(jsDelivr CDN 分发)
deploy.ps1 / deploy.sh 一键部署脚本(Windows / Linux·macOS)
test-harness.mjs 逻辑自检(state/toggle/校验/环回保护;搜索视网络环境 SKIP)
HTTP 接口
| 接口 | 方法 | 说明 |
|---|---|---|
/plugin-console/state |
GET | 插件清单 + 补丁状态 + 兼容性 + 运行中的安装任务 |
/plugin-console/toggle |
POST | 启用/停用条目(写用户补丁层) |
/plugin-console/uninstall |
POST | 删除条目并卸载包(bundle 感知) |
/plugin-console/search |
POST | 多源搜索(github/gitee/自定义,multi 合并) |
/plugin-console/repo |
POST | 仓库元数据:package.json、private 根、dsh 提示、hasSkill |
/plugin-console/enrich |
POST | 服务端类型标记(官方/聚合/技能) |
/plugin-console/install |
POST | 安装(插件或 kind: skill 技能),返回任务 id |
/plugin-console/install-status |
POST | 轮询安装任务 |
/plugin-console/check-update |
POST | npm 最新版本 + 子包不配套检查 |
/plugin-console/market-index |
POST | 静态索引(jsDelivr CDN,10 分钟缓存) |
/plugin-console/skills-installed |
GET | ~/.dsh/skills 下已安装技能 |
/plugin-console/sources |
GET/POST | 软件源与搜索源管理、Gitee OAuth 配置 |
/plugin-console/gitee-oauth-url / gitee-oauth-callback |
GET | Gitee OAuth 流程 |
/plugin-console/ai-consent |
POST | 同意/取消 AI 兜底步骤 |
/plugin-console/restart |
POST | 自带守护的安全自重启(等同面板按钮) |
AI 兜底安装与授权弹窗
安装走确定性通道链:配置源(主→备)→ curl 手动安装 → git 通道 → EPERM 清理重试 → 仓库子包展开。常规通道全部失败时,才轮到本地 AI 兜底。
本地 AI 兜底是什么:拉起一个本地 AI 子代理接管安装——它会像人工一样诊断(查仓库结构、识别子包/聚合包、清理残留),用正确管理器完成安装并落配置。注意:这一步会调用 DeepSeek API 模型,可能产生 API 费用。
授权弹窗逻辑(费用透明):
- 常规通道全失败后,任务进入「等待授权」状态,屏幕中央弹出最上层模态框:
- 明确说明"将调用 DeepSeek API 模型,可能产生 API 费用"
- 提供 同意,继续 / 取消 两个按钮(取消 = 零费用)
- 10 分钟未决定自动取消
- 模态框内可勾选 "以后不再提醒"(自动同意)——勾选后可随时在插件市场页面最底部恢复弹窗提醒
- 右上角悬浮的 "AI 兜底"开关可彻底关闭该功能:常规通道失败将直接取消安装,永远不会调用模型 API(零费用)
框架层补丁(cordis.patch.yml 解析容错)
问题(issue #5):cordis.patch.yml 若含顶格 [] 占位符 + 后续条目(两个 YAML 根节点),
DSH 启动时解析崩溃:end of the stream or a document separator is expected。
修复位置:DSH 框架 dsh-app-boot 的 parsePatchList——解析失败时自动移除顶格空数组占位行(视为 no-op)后重试;
正常文件、纯 [] 文件、缩进子数组均不受影响。
应用方式(DSH 升级后需重新执行,升级会覆盖框架文件):
node scripts/apply-framework-patch.cjs
脚本自动定位 npx 缓存中的 dsh-app-boot/lib/index.js,检测到已补丁则跳过(幂等),首次应用会保留 .bak-issue5 备份。
安全说明
- 全部路由仅允许环回地址访问;
- GitHub 元数据只用于发现公开插件,npm 安装走 registry 的完整 TLS 校验;
- GitHub 源搜索在浏览器内直连;Gitee / 自定义源检索与请求头(含认证信息)仅经服务端处理,不下发浏览器;
- 自定义源地址仅允许 https 与本机/私网 http(127.0.0.1、localhost、10.x、192.168.x、172.16-31.x 等);
- 技能是纯文件(SKILL.md + 资源)——安装技能不会执行任何代码;git clone 来自你选择的仓库,安装前请自行核验。
免责声明
- 市场收录的均为 GitHub 第三方仓库,各插件由各自作者独立开发维护,与 DeepSeek Harness 及本插件中心无任何关联;
- 本中心不对任何插件的质量、可靠性、安全性、许可证合规性、兼容性作任何明示或默示担保;收录不构成推荐或背书——安装即代表你已自行评估并接受相应风险,建议安装前阅读仓库源码与 README;
- 本中心按「现状」(AS-IS)提供,因安装或使用任何第三方插件造成的任何直接或间接损失(数据丢失、系统损坏、隐私泄露等),本中心及其开发者不承担任何责任。
已知限制
- 宿主代码变更需要重启服务(面板的重启按钮自带守护、安全);客户端变更只需刷新页面;
- 实时 GitHub 搜索依赖 GitHub 可达性(浏览器直连 + 服务端兜底;网络黑洞期请稍后重试);
- 版本检测只对已发布到 npm 的包生效;技能类仓库没有版本概念;
- 静态索引有上限(每次构建 500 插件 / 300 技能);新仓库靠 star 爬升或等下一轮 6 小时 CI 进入索引;
- 技能由
dsh-skill-filesystem扫描发现——若当前 profile 未启用该插件,装好的技能会休眠,启用并重启后生效。
帮助 / Help
遇到问题先看这里;仍有疑问请到 Issues 提问。
- 面板没出现:重启 dsh 服务 → 刷新页面 → 设置 → 插件 → 插件管理。
- 点开关没反应:基础设施行带"受保护"标签(禁止开关,这是保护机制);普通插件开关经 HMR 生效,约 1-3 秒,可点刷新查看。
- 顶部出现兼容性警告:官方发布了破坏性更新,请到本仓库获取适配版本(见兼容性策略)。
- 市场搜索没结果/报错:GitHub 源走浏览器直连(与浏览器可用性一致),失败自动回退
服务端通道;Gitee 源为仓库直装模式(输入
owner/repo);自定义源检查地址与请求头配置; 网络黑洞期请稍后重试。 - ★ 筛选为空:★ 只筛可
dsh plugin add直装(官方 + 子包带 bundle 的聚合); 标记 1-3 秒后台补全后自动出现,不会误报"没有"。 - 安装失败:确认仓库有 package.json 且包名已发布到 npm;npm 装不了的会回退
github:owner/repo安装(需要 git);可在软件源管理中换主源(如 npmmirror 网络波动时)。 - 装好的技能 DSH 不识别:在 profile 的
cordis.yml启用@deepseek-ai/dsh-skill-filesystem并重启;技能位于~/.dsh/skills/<名称>/。
生态与收录
- 已被 awesome-dsh-plugin(社区主精选列表)与 DSH Directory 收录;
- 本中心的自动收录索引(500+ 插件 / 300 技能,CI 每 6 小时刷新)会收录任何打了
dsh-plugin/agent-skills/claude-skills/dsh-skill标签的仓库——作者打上标签即可自动出现在市场,无需申请; - 如果你在开发 DSH 插件,本面板就是你的分发渠道:所有使用本面板的用户都能一键安装你的插件。
支持
如果这个面板帮你省了时间、让 DSH 更好用:
- ⭐ 给本仓库点个 Star——直接帮助更多 DSH 用户发现它;
- 分享给身边的 DSH 用户或社区;
- 提交你自己的插件(打上
dsh-plugin标签)一起壮大生态; - 发现 bug 或有新需求?开一个 Issue。
更新日志
版本记录见 CHANGELOG.md。
License
MIT