anjaymi/dsh-plugin-store
Native plugin store for DeepSeek Harness Web
이것은 DeepSeek Harness(DSH) 플러그인입니다. 이 사이트는 GitHub README, 설치 정보, 유지보수 상태, 공개 보안 시그널을 모아 보여줍니다.
dsh-plugin-store
面向 DeepSeek Harness(dsh)Web GUI(dsh web)的内置插件商店,以 设置 → 插件 下的
插件市场 标签页形式呈现。
它提供精选目录 + 实时 GitHub 发现,并让你在 GUI 内完成结构性校验与安装社区插件到
web profile,无需手敲命令。
功能
- 精选目录:来自 awesome-dsh-plugin 生态(内置 snapshot,离线优先)+ 实时
GitHub
topic:dsh-plugin发现(前 30,排除 fork)。 - 结构校验:只有当某个仓库的当前根
package.json同时声明name、version与dsh.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.yaml的allowBuilds后重新执行。
使用
| 控件 | 作用 |
|---|---|
| 搜索 | 按仓库名或描述过滤 |
| 全部 / 精选 / 新发现 / 结构已验证 / 已安装 | 过滤标签页 |
| 分类 | 按分类过滤 |
| ★ / 星标数 | 真实 GitHub 星标数——null 的精选条目由 Shields 徽章分批补全(每批 40,不伪造 0) |
| GitHub | 打开仓库 |
| 校验并安装 / 安装 | 未校验=校验并安装,已校验=安装;最终门禁由 Host 执行 |
| 任务面板 | 展示运行/排队安装任务的实时状态与输出,可终止或关闭 |
- 标为 校验并安装 的卡片表示该条目尚未通过结构校验——但仍允许安装,若队头实时复核发现
根 manifest 缺少
dsh.bundle,Host 会拒绝。该按钮不是禁用态:决策权在 Host。 - v0.1 不包含卸载功能。
配置
GITHUB_TOKEN(可选,建议设置):在启动dsh web前注入环境变量,可提升 GitHub 搜索 接口的速率限制、避免「刷新目录」时 403。- Profile:安装恒指向
webprofile($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-write(writeFileAtomic/withFileLock)。真实 profile 的package.json不由商店直接写入——它由官方dsh pluginCLI(转发给 profile 目录里的 pnpm)来 reconcile。商店绝不直接修改你的cordis.yml或 profile manifest。 - 无硬编码安装路径:
$DSH_HOME由@deepseek-ai/dsh-home-paths(resolveDshHome)解析; 从启动入口(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
보안 및 설치 증거
이 점수는 공개 저장소 메타데이터와 이 사이트에 등록된 설치 증거에만 기반하며, 코드 보안 감사와 다릅니다.
공개 플러그인 카탈로그에서 왔으며, 공개 GitHub 저장소로 연결됩니다.
저장소가 MIT 라이선스를 선언했습니다.
최근 180일 내 코드 업데이트가 있습니다.
재현 가능한 정확한 설치 메타데이터가 아직 등록되지 않았습니다. 저장소 설명에 따라 직접 확인하세요.
검사한 패키지 메타데이터에 설치 라이프사이클 스크립트가 선언되지 않았습니다.