Back to home

0xKcyzz

dsh-plugin-store

DeepSeek Harness 插件商店:浏览、搜索、筛选并一键安装 dsh-plugin 生态插件

Stars
3
Language
JavaScript
Created
Aug 14, 2026
Updated
Aug 15, 2026

Introduction

简体中文 | English

License: MIT DSH: Web Topics Node.js

DSH Plugin Store · 插件商店

这是一个 DeepSeek Harness 内置的插件商店:在「设置 → 插件」里新增插件商店,浏览、搜索、筛选并一键安装 / 更新 / 卸载 dsh-plugin 生态插件。

安装:

dsh plugin --profile web add github:0xKcyzz/dsh-plugin-store

安装后重启 DSH,打开 设置 → 插件 → 「插件商店」。

功能

  • 联网目录 + 渐进式加载:从 GitHub topic:dsh-plugin 拉取插件。搜索接口单查询上限 1000 条,本插件按 Star 分片查询再合并,可加载全部(当前约 1800+ 个)。首屏先秒出前 300 条,其余在后台补全并写入磁盘缓存(30 分钟),之后秒开。
  • 卡片列表:类型标签徽章、作者/仓库名、简介、Star 数、发布日期。
  • 搜索:按名称、简介、标签、作者实时过滤。
  • 筛选
    • 功能分类(下拉框):全部分类 / 已安装 / 界面增强 / 通知 / 工作流自动化 / 开发辅助 / 知识学习 / 其他工具。
    • 类型标签(单行横向滚动,带实时计数):全部类型 / 已收录 + 18 个类型标签。
  • 排序:GitHub Stars / 最近添加 / 最近更新 / 名称。
  • 分页:每页 10 / 30 / 50(默认 10),页码固定 7 格(翻页不位移)+ 跳页输入框。
  • 一键安装:卡片「安装」在宿主机执行 pnpm add,并把声明 dsh.bundle 的依赖写进 profile 的 bundle 列表。
  • 手动安装:标题栏「手动安装」弹出输入框,粘贴安装命令或包名(支持 dsh plugin add github:owner/repo@scope/pkggithub:owner/repo#subdir 等)。
  • 卸载:已安装插件卡片按钮变为「卸载」,本地移除(改 package.json + 删 bundle + 删目录,不依赖 pnpm/网络,秒回)。
  • 更新检测:已安装且是最新版的显示绿色「最新版」标签;有更新的显示「有更新」标签 + 「更新」按钮;「已安装」页面顶部有「一键更新」批量更新全部。
  • 查看详情:跳转插件仓库的 GitHub 页面。
  • 安装 / 卸载 / 更新成功或失败都在顶部横幅提示

界面

打开 设置 → 插件 → 插件商店

  • 顶部:插件总数 / 已收录数 / 已加载条数 + 「一键更新(仅已安装页)」「手动安装」「刷新」按钮。
  • 工具栏:搜索框 + 分类下拉框 + 排序下拉框。
  • 单行横向滚动的类型标签条(全部类型 / 已收录 / 18 个分类标签,带计数)。
  • 双列卡片网格:标签徽章、最新版/有更新状态、名称、简介、Star 数、语言 / License / 发布日期、查看详情 + 安装/更新/卸载按钮。
  • 底部分页栏:每页条数、页码(固定 7 格)、上一页/下一页、跳页。
image

工作原理

本插件是双面(dual-face) DSH bundle,由 cordis.patch.yml 以单行挂载:

  • Host 半侧src/index.tslib/index.js):注册 /plugin-store/* HTTP 路由——
    • GET /plugin-store/catalog:抓取 GitHub Search API(按 Star 分片 + 限流重试),归一化、分类,渐进式返回 + 磁盘缓存。
    • GET /plugin-store/installed:读取 profile 的 package.json,报告已安装依赖与 bundle。
    • GET /plugin-store/install-meta:返回安装时间戳记录(用于更新检测)。
    • POST /plugin-store/install:预检 dsh.bundlepnpm add <spec> → 重排 dsh.profile.bundles → 记录安装时间戳。
    • POST /plugin-store/uninstall:本地移除依赖 + bundle + 目录,记录卸载。
  • Client 半侧src/client/*lib/client.js):注册 settings.plugins.tab(id=store),渲染商店界面,通过 fetch 调用 Host 路由。

包声明 dsh.bundle.patch + dsh.client,所以安装后:Host 入口由 Loader 加载,浏览器半侧由 client-modules 注入 window.__DSH_BOOT__

配置(环境变量)

变量默认值说明
GITHUB_TOKEN可选 GitHub Token,提升 API 限流额度(未认证搜索 10 次/分钟,认证后 30 次/分钟),建议配置以更快加载全部插件。
DSH_PLUGIN_STORE_PROFILEweb安装目标 profile 名。

开发 / 构建

npm install   # 安装 esbuild 等构建工具
npm run build # 产出 lib/index.js(Host)+ lib/client.js(浏览器)

仓库已提交 lib/ 构建产物,github:owner/repo 安装时无需构建;改动 src/ 后需重新 npm run build 并提交。

说明与限制

  • 重启生效:安装 / 卸载 / 更新只写入依赖与 bundle 列表,需重启 DSH 才挂载 / 移除 / 更新。
  • 限流:全量抓取约 22 次搜索请求(带间隔 + 重试);未配置 GITHUB_TOKEN 时后台补全较慢(约 2 分钟),界面会标注「已加载 N(部分)」,配置 token 后约 45 秒。
  • 更新检测基于 pushed_at:对比「目录里仓库的最新推送时间」与「安装时记录的推送时间」,跟随目录缓存(30 分钟)。
  • topic 噪声dsh-plugin 主题下含不少非 DSH 插件仓库(设计工具、桌面客户端、skill 集、monorepo 皮肤合集等)。「已收录」标签用启发式近似「可安装的 DSH 插件」,非权威口径。
  • 可安装性:只有声明 dsh.bundle.patch 的 npm 包才会成为真正的 profile bundle;合集仓库(如皮肤库)需用 github:owner/repo#subdir 手动安装其中的具体子包。
  • 分类为启发式:功能分类 / 类型标签由内置关键词表(src/categories.ts)从 topics、语言、名称、简介派生,可按需调整。

License

MIT