# 发布到 DSH 商店 ## 它不是"提交给官方审核",而是**加一个索引源** DSH 的商店(设置 → 插件 → 发现)读的是**你配置的市场索引 JSON**,不是集中托管的商店。 所以"发布"= 让 `market-index.json` 有一个能访问的 URL,然后把这个 URL 加进 DSH。 索引格式是 **format 1**,字段有严格校验(`@deepseek-ai/dsh-plugin-market-index` 负责解析): | 字段 | 要求 | 踩坑点 | |---|---|---| | `format` | 必须是 `1` | | | `plugins[].name` | 合法 npm 包名 | 作用域包名也要合法 | | `plugins[].metadata.category` | 必须先在 `metadata.categories` 里声明 | 没声明整份索引被拒 | | `versions[].version` | 精确 SemVer | 不能写 `^1.0.0` | | `versions[].publishTimestamp` | **整数秒** | 毫秒会被拒 | | `versions[].source.type` | `npm` 或 `git` | | | `versions[].source.commit` | **完整 40 位小写 SHA** | 短 SHA 会被拒;且必须**远程真实存在** | 手写这些很容易错,而且错了客户端只显示"索引无效"。所以用脚本生成 + **用官方解析器自校验**: ```bash node scripts/make-market-index.mjs # 用当前 HEAD 生成 node scripts/make-market-index.mjs <40位SHA> # 指定提交(推荐:指向远程 main 的实际提交) node scripts/make-market-index.mjs --check # 只校验不写盘 ``` 脚本会优先加载 DSH 自带的解析器校验;没装 DSH 时退回按官方规则自查,不通过就不写盘。 ## 索引 URL **用这个**(这台网络下实测可访问,内容通过官方校验): ``` https://gcore.jsdelivr.net/gh/yyfabab1/dsh-gpt-image@main/market-index.json ``` 备选: ``` https://ghproxy.net/https://raw.githubusercontent.com/yyfabab1/dsh-gpt-image/main/market-index.json https://raw.githubusercontent.com/yyfabab1/dsh-gpt-image/main/market-index.json ← 部分网络下连不上 ``` > 为什么不是 raw.githubusercontent.com:实测这台机器上它直接连不通(`github.com:443` 也是, > 所以 `git push` 要走 API 兜底)。镜像能通、内容一致,就用镜像。 ## 在 DSH 里加这个源 ``` 设置 → 插件 → 发现(Discover)→ 添加插件源 → 粘贴上面的索引 URL ``` 加完就能在发现页看到「出图台 · 素材生产流水线」,直接装。 或者不用商店,直接用命令装: ```bash dsh plugin --profile web add @dsh-external/dsh-gpt-image ``` ## 每次发新版本要做什么 1. 改 `package.json` 版本号 2. 提交并推到 GitHub 3. `node scripts/make-market-index.mjs <远程 main 的 40 位 SHA>` 4. 提交 `market-index.json` 并推送 第 3 步的 SHA **必须是远程真实存在的提交** —— 本地提交号(尤其是走 API 兜底推送产生的) 和远程不一样,写错了商店安装时会找不到版本。取远程的真实值: ```bash gh api repos/yyfabab1/dsh-gpt-image/git/ref/heads/main --jq '.object.sha' ```