跳到正文
MyDSH我的 DSH 实战笔记
English
独立维护,非DeepSeek官方;与mydsh.dev等其他MyDSH站点无关联。

首页/开发者与插件开发/插件结构与清单

拆一个真实的 manifest:11 个字段各自管什么

看别人插件的 package.json,一半字段不认识,不知道该抄哪些。

已核验版本与环境核验日期2026-11-14
样本
packages/core/tools与站内13个插件
核验日期
2026-11-14

下面每个字段都是从真实包里读出来的,不是猜的。

字段实例值管什么
name@deepseek-ai/dsh-tools包名。安装与bundles用的都是它
version0.1.2-alpha.5跟宿主同代。生态惯例是跟着宿主版本号走
typemoduleESM。插件必须import/export,CommonJS不行
mainlib/index.js入口,导出name与apply(ctx)
exports{“.”: …, “./invariant”: …}子路径导出。客户端插件还会导出 ./client
dsh.bundle.patch./cordis.patch.yml往宿主插入条目的入口。没有它,插件装了也不做任何事
dsh.client.inject["@deepseek-ai/dsh-…"]客户端插件要注入的目标。宿主缺包会静默挂起
dsh.compatibility(dsh-context独有)兼容性声明。第三方可以自定义子树,不限于bundle/client
engines.dsh>=0.2.0-rc.2 || …声明支持的宿主范围。实测不满足也照样装、照样合成,不被拦
engines.node^22.19.0 || >=24.0.0唯一的硬门,但也只是npm的EBADENGINE警告
peerDependenciescordis / dsh-agent / …宿主提供的依赖,插件不自带

最容易看漏的一个字段

dsh.bundle.patch。只有main没有patch的包,装了之后dump-config里不会出现任何新条目——不是坏了,是它本来就不打算往宿主里插东西(可能是给别人当库用的)。判断一个包是「插件」还是「库」,看这个字段最快。

两个 engines 完全不是一回事

  • engines.dsh:声明而已。本站实测把要求 >=0.2.0-rc.2的插件装到0.1.2上,安装成功、合成成功、没有任何拒绝。
  • engines.node:npm会校验,但也只给 EBADENGINE 警告,不阻止安装。
所以别指望「声明了版本要求」能保护你。真正会出问题的是 dsh.client.inject 里宿主没有的包——那个不会给你任何警告,直接静默挂起。判断能不能跑,看inject差集,不看engines。

怎么算跑通

照着逐条对,全过才算完成。有一条没过,先解决它再往下。

  • 能说出dsh.bundle.patch缺失会导致什么
  • 知道engines.dsh不满足也不会被拦
  • 判断插件能不能跑是看inject差集而不是engines

会失败在哪

现象 / 原因 / 怎么办,按实际踩到的顺序写。

现象原因怎么办
拷了别人的manifest但插件不生效漏了dsh.bundle.patch这一节补上patch文件并在package.json里指向它
以为engines.dsh会保护自己它只是声明,没有实现改为核对inject差集

来源

标「已核验」的,来自本站实跑;标「公开资料整理」的,逐条附出处。