# DSH 插件公共区收录:机制、站点要求与我们的策略
调研日期:2026-08-28。生态变动很快,**下面每条要求在动手前都该复核一遍**,
尤其是版本号相关的部分——我们已经踩到过一次文档过期(见[已知坑](#已知坑)第 1 条)。
## 目录
- [一、先破除一个误解](#一先破除一个误解)
- [二、Skill 与 Plugin 是两种东西](#二skill-与-plugin-是两种东西)
- [三、三个核心站点的要求](#三三个核心站点的要求)
- [四、已知坑](#已知坑)
- [五、我们的收录策略](#五我们的收录策略)
- [六、提交清单](#六提交清单)
- [七、维护责任](#七维护责任)
---
## 一、先破除一个误解
**DSH 没有官方运营的插件市场。** 不存在「提交审核 → 上架官方商店」这条链路。
真实机制是一个**基于 GitHub topic 的广播**:
```
你给仓库打上 dsh-plugin topic
│
└─► 所有基于 topic 自动聚合的站点【同时】收录你
├─ dshfind
├─ dsh-market
├─ dsh-plugin-marketplace
├─ 1024Store 的 tokenless discovery
└─ 其他若干
```
由此推出两条对决策有影响的结论:
1. **「只在某一个站点发布」做不到。** 打 topic 是一次不可选择目标的广播。
唯一能控制的是那些需要主动提 PR 的目录——不提 PR 就不进。
2. **收录 ≠ 审核通过 ≠ 安全审查。** 多数站点是每日自动扫描 + 静态校验。
awesome-dsh-plugin 的 README 顶部有明确的免责声明,它自己也说
「收录仍不等于做过安全审查,这只是常识性检查,不是审计」。
所谓「插件市场」本身也是社区插件——用户要先装一个市场插件,才能在 DSH 的
Settings 里浏览安装其他插件。它不是 DSH 的内置功能。
---
## 二、Skill 与 Plugin 是两种东西
这个区分直接决定能不能被收录。
| | **Skill** | **Plugin** |
|---|---|---|
| 形态 | `<名字>/SKILL.md` + 脚本资源 | JS/TS 模块,导出 `apply(ctx)` |
| 安装 | **不需要安装**,放进目录就被发现 | `dsh plugin --profile
add ` |
| 注册 | 无 | `cordis.yml` / `cordis.patch.yml` |
| 作用域 | 支持项目级 | profile 级,**没有项目级概念** |
| 能注册工具/服务/事件 | ❌ | ✅ |
| 热更新 | ✅ 改文件即生效 | 需重载 |
**关键:纯 SKILL.md 仓库进不了需要提 PR 的目录。** ①② 两站的 CI 都会拉你仓库的
`package.json` 检查 `dsh.bundle`,那是「可被 `dsh plugin add` 安装」的凭证。
只有靠 topic 自动聚合的站点(如 dshfind)不看这个。
### DSH skill 的加载路径(按优先级)
| 优先级 | 路径 | 作用域 |
|---|---|---|
| 100 | `.dsh/skills/` | 项目级(找最近的 `.git` 祖先) |
| 200 | `.agents/skills/` | 项目级备选 |
| 300 | 自定义目录 | 用户配置 |
| 400 | `~/.dsh/skills/` | 用户级 |
| 500 | `~/.agents/skills/` | 用户级备选 |
**只扫顶层,不递归。** skill 目录必须直接位于上述路径之下。
---
## 三、三个核心站点的要求
| | **① 1024Store** | **② awesome-dsh-plugin** | **③ dshfind** |
|---|---|---|---|
| 提交到 | `imsai-sh/awesome-deepseek-harness-plugins` | `awesome-dsh-plugin/awesome-dsh-plugin` | 无需提交 |
| 站点 | deepseek1024.com | awesome-dsh-plugin.com | — |
| 提交物 | 1 个 `catalog/plugins/*.json` | 1 个 `data/plugins/*.yml` + 重新生成 README | 打 topic |
| **需要 `dsh.bundle`** | ✅ | ✅ | ❌ |
| 仓库年龄门槛 | 无 | **≥1 天 且 ≥10 提交** | 无 |
| 人工审核 | ❌ 静态检查过即自动 squash merge | ✅ 维护者读源码核对描述 | ❌ |
| 单 PR 上限 | 1 条(走自动通道) | 3 条 | — |
| npm 包 | 可选,不发则 browse-only | 可选,不影响收录 | 不需要 |
| stars | — | 13.2k | 233 |
> ⚠️ `imsai-sh/dsh-1024store` **不接受插件提交**,它是站点和 npm 包的代码仓。
> 其 CONTRIBUTING 明写:「Plugin submissions do not belong here」。
> 真正的目录仓是 `imsai-sh/awesome-deepseek-harness-plugins`。
### ① 1024Store 细则
文件名规则:id 的每个 `/` 段小写、非字母数字连续段转 `-`,段间用 `--` 连接。
`1Ecc/dsh-plugin` → `1ecc--dsh-plugin.json`。
```json
{
"$schema": "../schema/plugin.schema.json",
"id": "1Ecc/dsh-plugin",
"name": "dsh-plugin",
"repository": "https://github.com/1Ecc/dsh-plugin",
"category": "tools",
"description": { "en": "...", "zh": "..." },
"added": "2026-08-28"
}
```
硬约束:
- **PR 只能碰 `catalog/plugins/` 下的文件。** 动 README、workflow、脚本一律拒。
README 是 bot 生成的投影,会自动刷新。
- 恰好 1 条新条目才走自动合并通道;更新或删除既有条目需人工审核。
- 描述客观中性,禁营销词。
- CI 会通过 GitHub API 读你仓库的 `package.json`,确认 `dsh.bundle.patch` 非空
且 patch 文件在同一 revision 存在。
### ② awesome-dsh-plugin 细则
```yaml
url: https://github.com/owner/repo
name: owner/repo
category: skill
description:
en: One-line description ending with a period.
zh: 一句话描述,以句号结尾。
```
- 只有 `description.en` 必填,中文缺了维护者会补。
- 提交后要本地跑 `npm ci && node scripts/generate-readme.mjs` 重新生成两个 README,
连同 yml 一起提交。**不要手工编辑 README。**
- 可用 category:`agi ui usage theme model identity session memory tools browser
vision voice docs skill workflow git notify dev security remote market fun`
- **描述必须属实。** 原文:「写「46 个工具、六大领域」,就应该真有 46 个工具和六个领域」。
夸大是被打回的主要原因。
- 分类选不准不会被打回,维护者会直接改。
### ③ dshfind 细则
README 原文:「给你的**公开** GitHub 仓库加上 `dsh-plugin` topic,下次数据刷新时
就会出现在插件市场中。」
没有 PR,没有 package.json 要求。纯 GitHub topic 索引。
---
## 已知坑
### 1. peerDependencies 的 semver 预发布陷阱(会让用户装不上)
`@deepseek-ai/*` 全部是预发布版本。node-semver 的规则是:**只有当范围内某个比较符与
目标版本的 `major.minor.patch` 完全一致、且该比较符自身带预发布标签时,才放行这个预发布版本。**
我们实测了四种写法(`semver.satisfies`):
| 范围 | 0.0.1-rc.1 | 0.1.0-rc.8 | 0.1.1-rc.2 |
|---|---|---|---|
| `>=0.0.1-rc.1 <0.1.0 \|\| >=0.1.0-rc.1 <0.2.0-0`(**站点文档推荐**) | ✅ | ✅ | ❌ |
| `>=0.0.1-rc.1 <0.2.0`(看着很宽) | ✅ | ❌ | ❌ |
| `>=0.0.0-0 <0.2.0-0`(「匹配一切」) | ❌ | ❌ | ❌ |
| `>=0.0.1-rc.1 <0.1.0 \|\| >=0.1.0-rc.1 <0.1.1 \|\| >=0.1.1-rc.1 <0.2.0-0` | ✅ | ✅ | ✅ |
**站点文档里推荐的那个范围已经过期**——它写在 `0.1.1-rc.x` 发布之前,
现在会静默排除 `latest` 和 `next`,用户 `npm install` 撞 `ERESOLVE`。
⚠️ **上游每发一个新的 `0.x.y` 元组,就要再加一段 `||`。** 这是持续维护项,
不是一次性配置。发版前跑一遍上表那个 `semver.satisfies` 检查。
### 2. `dsh.client` 不等于 `dsh.bundle`
最常见的被拒原因。`dsh.client` 只在带前端 UI 时需要,单独声明它**无法安装**。
必须有 `dsh.bundle.patch`。
### 3. cordis.patch.yml 的 id 冲突会让 dsh 启动崩溃
bundle 安装后,不要在 profile 的 `cordis.patch.yml` 里再插入同名条目,
会触发 `duplicate loader entry id` 崩溃。
### 4. SKILL.md frontmatter 的静默拒绝
DSH 文档明确:含冒号、括号、逗号的值不加引号会导致 YAML 解析失败,
**skill 被静默拒绝——不报错,就是不出现**。排查成本很高,一律加引号。
---
## 五、我们的收录策略
按「先跑通、后扩散」排序,理由是每一步都能独立验证,失败了不会牵连下一步。
| 阶段 | 动作 | 目标站点 | 状态 |
|---|---|---|---|
| A | skill 放 `.dsh/skills/` | — | ✅ 已完成 |
| B | 做成 bundle 插件 | — | ✅ 已完成,8 测试通过 |
| C-1 | 打 `dsh-plugin` topic | ③ + 一批自动聚合站 | ✅ 已完成 2026-08-28 |
| C-2 | PR 到 1024Store 目录仓 | ① | ✅ [PR #263](https://github.com/imsai-sh/awesome-deepseek-harness-plugins/pull/263) 已自动合并 |
| C-3 | PR 到 awesome-dsh-plugin | ② | ⏳ 等门槛,见下 |
**为什么 C-2 排在 C-3 前面**:C-2 无年龄门槛且自动合并,是最快能拿到「正式收录」
反馈的渠道,可以先用它验证 `dsh.bundle` 声明是否被 CI 接受。C-3 权重最大但要等提交数。
### C-3 待办:等门槛,不要凑提交
`awesome-dsh-plugin` 要求仓库**创建满 1 天且提交数 ≥ 10**。这是 CI 自动卡的。
**不要为了凑数造提交。** 那个门槛存在的目的正是过滤「临时攒出来的仓库」,
用空提交绕过它,恰好证明了自己就是它要拦的那类。而且维护者合并前会实际读仓库,
一串无意义的提交只会让人对整个投稿起疑。
接下来这些都是真实要做的工作,自然就够 10 个了:
| 待办 | 价值 |
|---|---|
| Windows 实机验证并修 bug | 能力矩阵里最大的空白 |
| CI 跑测试 | 站点看重「活跃维护」 |
| `screenshots.json` + 趋势图样例 | 市场详情页会展示,不声明就由 README 自动抽取 |
| npm 发布 | 免 `allowBuilds` 构建授权,安装体验更好 |
| 商品链接核对 | 拯救者电池的商品 ID 待确认 |
| 埋点 | 试点转化分析 |
条目内容已经写好放在 [`docs/listing/awesome-dsh-plugin.yml`](listing/awesome-dsh-plugin.yml),
达标后照着里面的注释走即可。
**门槛自查:**
```bash
echo "提交数: $(git rev-list --count HEAD) / 10"
gh repo view 1Ecc/dsh-plugin --json createdAt --jq '"创建于: \(.createdAt)"'
```
---
### 一个必须清醒的判断
打 topic 会把仓库内容推进十几个插件目录站并被搜索引擎索引。
本仓库的 `references/lenovo-offers.md` 含**试点触发条件、试点范围、埋点建议**。
试点期选择「先跑通链路、暂不脱敏」是可以的,但要知道这是**不可撤回的**——
改回 private 能挡住后续访问,已被爬取或缓存的内容收不回来。
正式推广前应当决定:是把内部决策逻辑抽成本地配置,还是接受它公开。
---
## 六、提交清单
### C-1 打 topic
- [ ] 仓库 public
- [ ] 有真实可用代码(非占位/纯 README)
- [ ] 加 topic:`dsh-plugin`(可再加 `deepseek-harness`、`dsh`)
### C-2 提交到 1024Store
- [ ] `package.json` 有非空 `dsh.bundle.patch`,且 patch 文件已提交并推送
- [ ] 已打 `dsh-plugin` topic
- [ ] 自己实测过插件能装能跑(目录方不会执行你的代码,责任在作者)
- [ ] fork 目录仓,新建分支
- [ ] 只加一个文件 `catalog/plugins/1ecc--dsh-plugin.json`
- [ ] `added` 填提交当天日期
- [ ] 描述中英双语、客观、无营销词
- [ ] **确认 diff 里没有任何 `catalog/plugins/` 之外的改动**
### C-3 提交到 awesome-dsh-plugin
- [ ] 上面 C-2 的全部前置条件
- [ ] 仓库创建满 1 天
- [ ] 提交数 ≥ 10
- [ ] 加 `data/plugins/1Ecc__dsh-plugin.yml`
- [ ] `npm ci && node scripts/generate-readme.mjs` 重新生成两个 README 并一起提交
- [ ] category 选 `skill` 或 `tools`
- [ ] 描述里的每个具体声明(工具数量、命令名)都能在代码里对上
---
## 七、维护责任
收录不是一次性动作,几个站点都有清退机制。
| 事项 | 频率 | 说明 |
|---|---|---|
| peer range 补新元组 | 上游发版时 | 见[已知坑](#已知坑)第 1 条,漏了用户就装不上 |
| 仓库保持活跃 | 持续 | awesome-dsh-plugin 定期扫描,归档或长期停更的条目会被移除 |
| 描述与代码保持一致 | 改功能时 | 描述被当作声明核对,改了功能没改描述会被打回 |
| 商品链接有效性 | 定期 | `lenovo-offers.md` 里的商品 ID 会失效,需要责任人巡检 |
| 站点要求复核 | 每次提交前 | 本文档的调研快照是 2026-08-28,生态变动快 |
**收录不是永久的。** awesome-dsh-plugin 原文:「停止维护、有恶意行为、存在明显缺陷的
条目会被移除……规则不是先来后到,规则是谁更好。」