规范与示例:如何发布一个可被 DSH 插件包市场发现的插件合集。
DSH 插件生态使用 dsh-plugin 作为统一发现入口。插件合集仓库在此基础上再添加 dsh-plugin-pack,表示仓库提供的是一组插件的分发清单,而不是单个插件本体。
单个插件仓库 -> dsh-plugin
插件合集仓库 -> dsh-plugin + dsh-plugin-pack
插件合集不需要复制插件源码,也不需要依赖某个启动器。它只记录插件名称、安装规格、仓库地址和依赖关系。任何兼容 DSH 的客户端都可以读取清单,并为用户执行等价的:
dsh plugin add <spec>
- 复制本仓库的
dsh-plugin-pack.json。 - 修改
id、名称、说明和plugins列表。 - 为仓库添加两个 topic:
dsh-plugin、dsh-plugin-pack。 - 运行
node scripts/validate.mjs。 - 发布仓库后,向本仓库提交 PR,将插件包条目加入
market/index.json。
可以将 DSH 插件包 AI 快捷分享提示词 发送给已安装插件的 DSH。AI 会协助盘点当前 Profile、核实可复现安装源、生成符合 Schema v1 的插件包仓库,并引导完成本地验证、GitHub 发布和 Topics 配置。
配置 dsh-plugin 与 dsh-plugin-pack Topics 表示仓库属于 DSH 插件包分类,但当前启动器不会仅凭 Topic 自动展示仓库。插件包还需要通过 PR 加入本仓库的 market/index.json;PR 合并后才算被当前启动器市场正式收录。
本规范仓库名为 dsh-plugin-pack。其他合集仓库应根据内容命名,例如 dsh-plugin-pack-office、dsh-plugin-pack-writing 或 dsh-plugin-pack-better-sidebar。
规范文件名为 dsh-plugin-pack.json,当前 schemaVersion 为 1。每个插件必须有唯一的 id 和可直接传给 DSH 的 spec。requires 使用清单内其他插件的 id 表示安装依赖。
{
"schemaVersion": 1,
"id": "dsh-plugin-pack",
"name": "DSH Plugin Pack Example",
"version": "0.1.0",
"description": "A starter pack demonstrating a base plugin and an extension.",
"license": "MIT",
"plugins": [
{
"id": "better-sidebar",
"name": "DSH Better Sidebar",
"kind": "plugin",
"spec": "github:omdsh-dev/DSH-better-sidebar",
"repository": "https://github.com/omdsh-dev/DSH-better-sidebar"
},
{
"id": "dsh-sidebar-qa",
"name": "DSH Sidebar QA",
"kind": "extension",
"spec": "dsh-sidebar-qa",
"repository": "https://github.com/ChenRuoT/dsh-sidebar-qa",
"requires": ["better-sidebar"]
}
]
}spec 可以是 npm 包名、GitHub 规格、Git URL 或 DSH 支持的其他安装规格。合集市场负责展示和展开清单,插件的实际安装仍由 DSH 完成。
这里的 dsh-sidebar-qa 是一个真实的第三方扩展示例:它不会自行创建侧边栏宿主,而是通过 Better Sidebar 暴露的 ctx.betterSidebar.registerTab 服务注册页面。requires 让安装器先安装宿主,再安装扩展;插件本身仍应通过 peerDependencies 和运行时注入声明硬依赖,不能只依赖合集顺序。
- 合集只声明插件,不托管或修改插件源码。
- 发布前应确认每个
spec可以独立安装,并在 README 中说明 DSH 版本要求。 requires只表达安装顺序和依赖关系,不替代插件自身的依赖声明。- 市场应将“已发现”和“已验证”分开显示;topic 不代表安全审查或质量保证。
- 清单中的安装规格应固定到可信仓库或版本,避免无意跟随不稳定分支。
npm run validate
GitHub Actions 会在每次提交时运行同一个校验脚本。
market/index.json 是第一版插件包市场索引,当前先收录 dsh-plugin-pack-web。它使用推荐的 json-manifest 格式,市场直接读取其 dsh-plugin-pack.json 结构化清单。
市场同时兼容标准 dsh-plugin-pack.json 和旧式 README 文本合集。旧式合集不需要立即重写,只需在索引中声明源文件和格式;新合集推荐使用结构化 JSON 清单。
| 仓库类型 | 必须的 topic |
|---|---|
| 单个 DSH 插件 | dsh-plugin |
| DSH 插件合集 | dsh-plugin、dsh-plugin-pack |
GitHub topic 只允许小写字母、数字和连字符,因此规范使用 dsh-plugin 和 dsh-plugin-pack。dsh-plugin-pack 用于让市场区分“插件合集”和“单个插件”。
本规范和示例采用 MIT License。清单引用的插件由各自作者按照其仓库许可证发布。