編集者注

anjaymi/dsh-plugin-store

Native plugin store for DeepSeek Harness Web

これは DeepSeek Harness(DSH)プラグインです。当サイトは GitHub README、インストール情報、メンテナンス状況、公開セキュリティシグナルをまとめています。

dsh-plugin-store

面向 DeepSeek Harness(dsh)Web GUIdsh web)的内置插件商店,以 设置 → 插件 下的 插件市场 标签页形式呈现。

它提供精选目录 + 实时 GitHub 发现,并让你在 GUI 内完成结构性校验安装社区插件到 web profile,无需手敲命令。


功能

  • 精选目录:来自 awesome-dsh-plugin 生态(内置 snapshot,离线优先)+ 实时 GitHub topic:dsh-plugin 发现(前 30,排除 fork)。
  • 结构校验:只有当某个仓库的当前根 package.json 同时声明 nameversiondsh.bundle.patch 时,它才可安装。目录/snapshot 的收录不算校验——每条记录加载时都是 verified: null,必须通过实时复核才被信任。刷新时仅对有界的 topic:dsh-plugin 批次做 结构校验;精选条目在安装时才校验。
  • 真实 GitHub 星标:展示的是真实 GitHub 星标数。topic 条目来自 stargazers_count;精选条目 若为 null,Host 会用 Shields 徽章(GET /api/dsh-plugin-store?method=stars&repos=...)补全, 客户端把真实计数分批(每批 40,前 120 项)合并进卡片。无本地 star 账本、不伪造 0,也没有 客户端“点星”交互。
  • 基于 FIFO 队列的后台安装:安装任务单活排队(同时只跑一个子进程),并且在队头重新拉取 仓库根 manifest 复核 dsh.bundle,在真正触及 profile 之前才通过。若复核失败,profile 保持 原样。
  • 重启提示:安装成功后提示重启 dsh web 使插件层加载。
  • 同源 + 进程内随机令牌门禁:所有变更型 POST 必须同源携带进程内随机令牌(令牌经 GET ?method=bootstrap 一次性签发,每个进程恒定)。请求体上限 8 KB。

安装

在终端把本仓库作为 bundle 加入 web profile:

# 从本仓库 checkout 目录执行
dsh plugin --profile web add github:anjaymi/dsh-plugin-store

或直接按 GitHub 规范(推送本仓库后):

dsh plugin --profile web add github:anjaymi/dsh-plugin-store

然后重启 Web GUI:

dsh web

设置 → 插件 下即出现 插件市场 标签页。

dsh 会把 add 转发给 profile 目录里的 pnpm,并在包声明 dsh.bundle.patch 时自动挂载为 一层 bundle。若 pnpm 要求构建 git 源,把其打印的 key 加入 profiles/web/pnpm-workspace.yamlallowBuilds 后重新执行。

使用

控件作用
搜索按仓库名或描述过滤
全部 / 精选 / 新发现 / 结构已验证 / 已安装过滤标签页
分类按分类过滤
★ / 星标数真实 GitHub 星标数——null 的精选条目由 Shields 徽章分批补全(每批 40,不伪造 0)
GitHub打开仓库
校验并安装 / 安装未校验=校验并安装,已校验=安装;最终门禁由 Host 执行
任务面板展示运行/排队安装任务的实时状态与输出,可终止或关闭
  • 标为 校验并安装 的卡片表示该条目尚未通过结构校验——但仍允许安装,若队头实时复核发现 根 manifest 缺少 dsh.bundle,Host 会拒绝。该按钮不是禁用态:决策权在 Host。
  • v0.1 不包含卸载功能。

配置

  • GITHUB_TOKEN(可选,建议设置):在启动 dsh web 前注入环境变量,可提升 GitHub 搜索 接口的速率限制、避免「刷新目录」时 403。
  • Profile:安装恒指向 web profile($DSH_HOME/profiles/web)。
  • 缓存:刷新后的目录缓存 2 小时(位于你的 DSH home 下的 catalog.json);刷新失败时保留 上一次目录,而非丢弃。

安全模型

  • HTTP 路由挂在既有回环 web server(绑 127.0.0.1);除非显式设置 DSH_PKG_ALLOW_LAN=1--host 0.0.0.0 会被 DSH 封禁。
  • 同源:POST 要求 Origin 的 host 与请求 Host 一致。
  • 进程内令牌GET ?method=bootstrap 签发随机令牌;每个变更型 POST 必须用 x-dsh-plugin-store-token 头携带该令牌。只读接口(list/stars)不要求令牌。
  • 严格安装规范:只接受 owner/repo(可选 owner/repo#subpath)git 规范——绝不接受二进制 或本地路径,且商店拒绝操作自身包。
  • 注册表权威:仓库必须已存在于当前目录中才可安装。
  • 队头复核:安装时重新拉取根 manifest,要求 name/version/dsh.bundle 通过后才触碰 profile;门禁不过即不写入任何 profile 状态。
  • 商店自有文件的原子写:商店自己负责磁盘上的目录缓存与安装前快照,这些经 @deepseek-ai/dsh-atomic-writewriteFileAtomic / withFileLock)。真实 profile 的 package.json 不由商店直接写入——它由官方 dsh plugin CLI(转发给 profile 目录里的 pnpm)来 reconcile。商店绝不直接修改你的 cordis.yml 或 profile manifest。
  • 无硬编码安装路径$DSH_HOME@deepseek-ai/dsh-home-pathsresolveDshHome)解析; 从启动入口(process.argv[1] + process.execArgv)或部署自身的 bin 定位 CLI,绝不来自客户端。

开发

npm install
npm test            # node:test — 见 tests/*.test.mjs
npm run pack:check  # npm pack --dry-run

结构

lib/host.js                 # ESM Host:/api/dsh-plugin-store 路由、目录、校验、安装队列
lib/client.js               # 浏览器 bundle:window.__ModuleLoader__.load({id, factory(require)})
data/registry.snapshot.json # 内置精选 + 发现 snapshot(离线优先)
tests/*.test.mjs            # node:test 套件
cordis.patch.yml            # 挂载商店的 bundle patch
PRODUCT.md                  # 产品定位、用户、人格、反目标、WCAG AA
DESIGN.md                   # 实际 DSH token + 18/14/12/11 字号、36/32、8px、138、无阴影

客户端是手写的 window.__ModuleLoader__.load CommonJS factory(无需打包器);Host 在 /plugins/dsh-plugin-store/client.js 组合并加载它。

License

MIT

REPOSITORY SIGNALS

セキュリティとインストールエビデンス

このスコアは公開リポジトリメタデータと当サイトに登録されたインストールエビデンスのみに基づくもので、コードセキュリティ監査とは異なります。

出所の追跡可能性

公開プラグインカタログから取得し、公開 GitHub リポジトリにリンクしています。

ライセンス

リポジトリは MIT ライセンスを宣言しています。

メンテナンス活動

過去180日以内にコードの更新があります。

インストールエビデンス

再現可能な正確なインストールメタデータはまだ登録されていません。リポジトリの説明に従って手動で確認してください。

インストールライフサイクルスクリプト

確認したパッケージメタデータにインストールライフサイクルスクリプトは宣言されていません。