标准号DSHIO/T 01—2026名称开发规范版本v1.0发布日期2026-11-06实施日期2026-11-06状态现行

DSHIO-DEV · 开发规范

插件怎么写才算合格。六条要求,每条都给出正确写法和常见错误。

这条标准的边界。 它不规定插件「应该做什么功能」,只规定「怎么交付才算合格」。 功能好坏是作者的自由,能不能被可靠安装和加载是标准管的事。

1. 项目结构

一个可安装的插件包至少要有三个文件:

package.json          ← 必需,声明 dsh.bundle
cordis.patch.yml      ← 必需,声明要插入的插件
lib/index.js          ← 必需,导出 apply(ctx)
要求说明
1.1package.json 的 main 或 exports 指向真实存在的入口文件
1.2不打包 node_modules、.git、测试文件
1.3仓库根目录有 README,说明插件做什么、怎么装

2. manifest 规范

这是最常被拒的一条。DSH 只认 dsh.bundle,光有 dsh.client 装不上。

正确写法:

{
  "name": "your-plugin",
  "version": "1.0.0",
  "dsh": {
    "bundle": { "patch": "./cordis.patch.yml" }
  },
  "engines": { "dsh": ">=0.2.0" }
}

错误写法(装了但不会加载):

{
  "dsh": { "client": { "platform": "web" } }   // ← 只有 client,没有 bundle
}
要求说明
2.1dsh.bundle.patch 必须存在,指向真实文件
2.2cordis.patch.yml 里 name 与 package name 一致
2.3engines.dsh 只写下界,不封顶
关于 2.3 —— 这是装不上最常见的原因。
❌ "dsh": ">=0.2.0-rc.2 <0.2.2-0"   // 排除了 0.2.2,用户在最新版装不上
✅ "dsh": ">=0.2.0"                // 只写下界
我们实测的 122 个头部插件里,有 8 个因为这个封顶写法装不上。

3. 权限声明

插件的能力必须显式声明,因为用户需要据此判断风险。

取值含义风险
none不访问外部资源低
network发起网络请求中
filesystem读写工作区文件高
shell执行系统命令高
device访问硬件(摄像头/麦克风等)高
要求说明
3.1在 README 里列出用到的权限
3.2不声明未使用的权限(过度声明会拉高风险等级)
3.3多个权限同时使用时,风险取最高

4. 版本策略

要求说明
4.1遵循 SemVer:MAJOR 破坏性变更、MINOR 新增、PATCH 修复
4.2破坏性变更要在 CHANGELOG 说明,并同步抬 engines.dsh 下界
4.3不重复发布同一个版本号

5. 错误处理

DSH 的加载器在旧版本里有个特性:任何一个插件抛错,可能拒绝整棵加载树。

要求说明
5.1apply(ctx) 里对可能失败的步骤做 try/catch
5.2缺少依赖时降级或禁用自身,不要抛到宿主
5.3错误信息要能定位(包含插件名和出错步骤)

6. 安全红线

违反任何一条,永久移出目录。

编号禁止行为
6.1写入工作区之外的系统路径
6.2读取或上传用户凭据(API key、token、cookie)
6.3未经用户明确同意建立常驻进程或计划任务
6.4把用户数据外发到第三方(不告知、无开关)
6.5安装时执行破坏性命令(删除、格式化、批量改权限)
6.6伪装成官方插件(名称、图标、作者信息)

自查清单

发布前逐条对照。全部通过即符合 DSHIO-DEV v1.0。

[ ] package.json 有 dsh.bundle.patch
[ ] cordis.patch.yml 的 name 与 package name 一致
[ ] engines.dsh 只写下界,没有封顶
[ ] README 列出声明的权限
[ ] 没有声明未使用的权限
[ ] apply() 对失败步骤有 try/catch
[ ] 不违反 6.1 - 6.6 任何一条

下一步

写完对照 DSHIO-TEST 自测,通过后按 DSHIO-GRADE 拿等级。

版本历史

版本标准号发布日期变更内容
v1.0DSHIO/T 01—20262026-11-06 首次发布

条款变更时版本号递增,旧版本保留可查。