Chuyển đến nội dung chính

dsh-plugin-marketplace

Đã xác minh

@w2112515/dsh-plugin-marketplace · v0.2.4 · MIT · Giao diện web

Out-of-tree installable plugin marketplace bundle for DeepSeek Harness

Cài đặt

dsh plugin add @w2112515/dsh-plugin-marketplace

Xác nhận layer đã áp bằng dsh --profile default --dump-config — xem hướng dẫn cài plugin.

Mã nguồn

Tác giả

Readme

DSH 插件市场(DSH Plugin Marketplace)

DeepSeek Harness(DSH)的插件市场:在 DSH 自己的设置界面里浏览、审阅、安装插件——基于证据的安装安全、逐次同意的脚本安装、策展整合方案、零遥测。

English documentation: README.md

这是什么?

DSH 插件市场是一个仓外可安装的 DSH bundle,为 DeepSeek Harness 提供完整的插件市场能力。它不属于 DSH 官方仓库,不要求修改或合并 DSH 源码,也不是独立 Web 产品。安装进 web profile 后,DSH 的 Host Loader 挂载市场 Host 插件,包内声明的 dsh.client 浏览器入口注册到「设置 → 插件 → 插件市场」。界面语言跟随 DSH 自动切换(中文 / English)。

一览:

  • 2200+ 个插件:每日扫描所有携带 dsh-plugin topic 的 GitHub 仓库,浏览不需要 GitHub 账号或 Token。
  • 基于证据的安装资格:扫描器证明每个插件在固定 commit 上哪些安装目标真实存在——「一键安装」意味着已证明可装,而不是大概能装
  • 脚本逐次同意:安装脚本逐字展示,显式同意后才运行——永不持久化,绝不批量代同意。
  • 策展整合方案:一次审阅,装出一套完整的能力基线。
  • 无遥测、无安装统计、无服务器——目录就是 GitHub Pages 上的静态 JSON。

DSH 设置中的插件市场:2211 个插件、九个分类、搜索、新鲜度指示和每行的评分入口

安装到本机 DSH

从 npm 安装:

dsh plugin --profile web add @w2112515/dsh-plugin-marketplace

也可以从 GitHub 安装并固定 commit(本仓库提交了构建后的 lib/,因此不会在你的机器上执行 prepare):

dsh plugin --profile web add github:w2112515/dsh-plugin-marketplace#<40位commit>

普通用户不需要 GitHub Token。自动安装需要 Host 能调用 pnpm 11(插件也会自动尝试 corepack pnpm);需确认脚本的安装需要 pnpm ≥ 11.7。两者都不可用时 WebUI 保持浏览能力并给出恢复提示,不会显示假成功。卸载:dsh plugin --profile web remove @w2112515/dsh-plugin-marketplace

默认目录由本仓库的 GitHub Pages 提供。开发时可用环境变量临时覆盖:

$env:DSH_PLUGIN_MARKETPLACE_CATALOG_URL = 'https://w2112515.github.io/dsh-plugin-marketplace/plugin-marketplace/catalog-v1.json'
dsh plugin --profile web add D:\Work\dsh-plugin-marketplace
dsh --profile web --dump-config
dsh web

安装安全

自动安装固定 40 位不可变 commit,一律经过 能力预检 → 短期审核 plan → 确认执行,失败时回滚 profile manifest、lockfile 与 workspace 配置。安装资格由固定 commit 上的证据决定:

目录条目 扫描器证明的内容 安装行为
可自动安装 所有安装目标(入口文件、patch)在固定 commit 的 git tree 中存在 pnpm add --ignore-scripts,第三方生命周期脚本绝不运行
需确认脚本 目标缺失(未随仓库提交构建产物)但声明了生命周期脚本 审核页逐字展示脚本内容;你显式勾选同意后,Host 以 --allow-build=<包名> 替代 --ignore-scripts 执行一次安装,脚本执行被精确限定在本次调用的这一个包上。不写入 allowBuilds,同意永不持久化
手动安装 以上都不满足 只展示仓库链接,市场不执行任何内容

插件详情页:用途、新鲜度与活跃度证据、社区评分,以及经过能力预检的安装面板

整合方案(Solution Packs)

整合包是一个插件仓库策展清单。仓库同时携带 dsh-plugindsh-plugin-pack 两个 topic 并提供 dsh.pack.json 即成为整合包:

{
  "schemaVersion": 1,
  "name": "我的精选",
  "description": "一套策展的起手组合",
  "items": ["owner/plugin-a", "owner/plugin-b"]
}
  • items 为 1–50 个 owner/repo;扫描时解析为稳定的仓库 id,改名不会造成身份错配。
  • 市场逐项显式标注:将自动安装 / 需确认脚本 / 需手动安装 / 未收录 / 已在 profile 中,并给出诚实的「可安装 N/M」计数。整合包卡片还会前置展示安装构成(如「7 一键 · 1 需审脚本 · 1 手动」),由扫描时的目录事实计算。
  • 安装整合包 = 串行复用单插件的 plan→execute 路径,首个失败即停止、不回滚、逐项报告结果。
  • 整合包不放权:需确认脚本的插件仍需进入其详情页单独审阅同意;手动项保持手动。
  • 整合包永不按 star 排序。 star 排序只会奖励「把最高星插件塞进包里」的行为——那是换了皮的 star 榜单,不是策展。排序为编辑精选优先(由市场维护者审阅一致性与诚实度后列入 FEATURED_MARKETPLACE_PACKS),其余按新鲜度。策展宁缺毋滥:能力空缺就空着,不用未经验证的插件凑数。

用 Codex、Claude Code 或 Cursor 写整合包时,安装便携 Skill dsh-marketplace-publish。收录规则仍以本页和扫描器为准。

整合方案视图:精选的 DSH 分类星数榜首整合包及其前置展示的安装构成

整合包详情页:逐项安装状态与诚实的 3/9 可自动安装计数,不代替用户做任何同意

社区评分

评分借用 GitHub 原生 reaction:目录中每个插件在评分 issue 下有一条投票评论,点 👍/👎 即投票——一票对应一个真实 GitHub 账号。详情页展示总评分与近 90 天两个窗口,不满 10 票不出结论。客户端只读,投票全程发生在 GitHub 上,市场绝不持有你的凭据。

面向 Agent

市场对 agent 原生开放:Host 插件注册四个工具,DSH agent 在任何会话中都可以调用——marketplace_searchmarketplace_detailmarketplace_installmarketplace_manual_guide。搜索与详情是只读的;安装走与 WebUI 完全相同的 plan→execute 管线,且每次调用都要求人工一次性批准——批准提示中带有插件名、固定 commit 与风险信号——同意绝不持久化、绝不批量代授。需脚本审阅的条目会被设计性拒绝(逐字审阅留在「设置 → 插件 → 插件市场」);手动条目市场绝不执行——guide 工具仅抓取该仓库自己的安装说明,交给 agent 用普通 shell 工具在会话既有权限下执行。插件安装后需重启 dsh web 生效。在 bundle 配置中设 agentTools: false 可关闭 agent 面。

Agent 也可以用普通 shell 工具安装市场本身:

dsh plugin --profile web add github:w2112515/dsh-plugin-marketplace#<40位commit>
dsh --profile web --dump-config   # 验证 bundle 层
# 重启 dsh web 生效

隐私立场

本市场只读静态目录,永不回传:不统计安装次数、没有遥测、没有分析端点——也刻意没有可以收集它们的服务器,目录就是 GitHub Pages 上的一份 JSON,每个安装决定都发生在你自己机器上。流行度信号只来自 GitHub 公开数据(stars),仅此而已。

工作原理

  • 分发单元:声明 dsh.bundle.patch 的 npm/Git/tarball package。
  • Host:下载并严格校验中央静态目录(schema + 完整性摘要),维护 last-known-good 缓存,拥有当前 profile 的审核与写入权。
  • Client:通过 settings.plugins.tab Slot 提供检索、分类筛选、详情、风险信号、审核确认与整合方案界面。
  • Host/Client 通道:包私有、同源的 /api/plugin-marketplace JSON API,不修改 DSH 的静态 Typert Remote 清单。
  • 目录生产:本仓库 GitHub Actions 每日扫描带 dsh-plugin topic 的候选仓库;只有静态校验通过且未归档的 Bundle 进入用户目录,拒绝项只保存在 workflow artifact。遇到 GitHub Search 1,000 条上限时按创建时间窗口递归拆分。只有中央扫描器使用仓库自带的 GITHUB_TOKEN
  • 分类体系:插件按九个类别归类(主题、记忆、用量、技能、安全、消息渠道、界面、工具、模型接入),依据是显式的 dsh-category-<slug> topic 或保守整词匹配;没有任何可靠信号的插件诚实地留在「未分类」。

插件作者指南

可被收录的条件:仓库携带 dsh-plugin topic、package.json 声明 dsh.bundle.patch、且 cordis.patch.yml 有效。可选 dsh-category-theme|memory|usage|skill|security|channel|ui|tool|provider topic 显式决定目录分类。

获得自动安装资格:让你的 bundle 要加载的文件存在于固定 commit 的 git tree 中——把构建产物(如 lib/)提交进仓库(本仓库即如此)。若刻意不提交构建产物、由 prepare/install 脚本生成,用户会在安装前逐字看到脚本并可选择按次同意;同意范围永不超出被审阅的 commit。

用 Codex、Claude Code 或 Cursor 上架插件时,安装同一份 dsh-marketplace-publish。它不替代上面的规则。

配置

bundle 插入的 row id 是 plugin-marketplace。可在 $DSH_HOME/profiles/web/cordis.patch.yml 覆盖完整配置(patch 对 config 是整体替换,必须写全所有字段):

- id: plugin-marketplace
  config:
    catalogUrl: https://w2112515.github.io/dsh-plugin-marketplace/plugin-marketplace/catalog-v1.json
    maxAgeMs: 172800000
    timeoutMs: 60000
    maxBytes: 15000000
    agentTools: true

目录是 GitHub Pages 上的每日快照。今天刚出现在 GitHub 上的插件,要等下一次扫描成功才会进市场。扫描失败时继续用上一份快照。

仓库结构

dsh-plugin-marketplace/
├── package.json
├── cordis.patch.yml
├── src/
│   ├── index.ts                 # Host 插件与同源 API
│   ├── catalog*.ts              # schema、网络、LKG 缓存、查询
│   ├── profile-operations.ts    # plan/确认/回滚、同意门控执行
│   └── client/                  # WebUI Slot 插件(中/英)
├── scripts/                     # GitHub 扫描器(插件 + 整合包)
├── website/public/              # workflow 生成的静态目录
└── .github/workflows/           # CI 与每日 Pages 发布

本地构建

要求 Node.js ^22.19.0 || >=24 和 pnpm 11。

cd D:\Work\dsh-plugin-marketplace
pnpm install --frozen-lockfile
pnpm run build
pnpm run check
pnpm pack --dry-run

非目标

  • 不向 deepseek-ai/deepseek-harness 提交代码或要求官方发布。
  • 不修改 DSH 的 Web bundle、Settings Slot、API Remote 或 CLI 源码。
  • 浏览器不直接访问 GitHub API,不要求用户配置 Token。
  • 未经用户逐次、逐 commit 的显式同意,绝不运行生命周期脚本。
  • 不做任何形式的遥测——包括安装次数统计。

友情链接