AllDSH
EN

进阶 · 1 分钟读完 · 更新于 2026-09-15

DSH 插件清单与 dshTarget 兼容性字段

DeepSeek Harness 插件清单里包含哪些内容,harness 兼容性如何声明,以及怎样声明才不会把用户挡在门外。

作者 赤榆 · 维护者与编辑

维护本站目录:逐条核对安装命令与已发布包是否一致、评定验证等级、执行自动扫描,并撰写教程。 ·

DeepSeek Harness 处于开发者预览阶段,这意味着运行时会变,插件必须说明自己是针对什么版本构建的。社区目前的做法是往清单里写一段兼容性声明,把它写对,决定了一个插件是到处都能装,还是会悄悄坏掉。

清单里有什么

插件清单是向 harness 和目录站点描述这个包的元数据。实践中它存在于 package.json 里,外加一小段 harness 专用的配置块。真正重要的字段有:

字段 用途 说明
name 包的身份 必须与发布的名称完全一致
version 发布版本 遵循 semver;用户会锁定这个版本
type 模块系统 现代插件填 module
keywords 被发现 包含 dsh-plugin 和 deepseek-harness
dsh.compatibility Harness 兼容性 你实际测试过的版本范围
license 法律清晰度 多数目录站点要求提供
repository 事实来源 目录站点用它收录条目并跟踪活跃度

目录站点读不到的字段,它要么胡乱推断、要么留空——所以清单值得被当作用户可见的内容来对待,而不是构建期的附属品。

兼容性声明怎么运作

声明写的是你的插件实际构建并测试过的 harness 版本,例如 >=0.1.0-rc.6 <0.2.0 或 0.1.2-rc.1 || 0.1.5-alpha.1。它是契约,不是猜测。用户在安装前会拿它和自己装的 harness 对比,目录站点则把它原样记录下来——在本站,它就是每个插件页上展示的 dshTarget 字段。

关于这套机制有两个该如实告诉作者的事实:

  1. harness 并不强制执行它。 截至 0.1.5-rc.1,运行时里没有任何代码读取 dsh.compatibility;声明不匹配的插件照样能装、照样加载。这段声明是写给人和目录站点看的,不是写给加载器的——这也让准确性更重要而不是更不重要,因为写错了不会有任何东西替你兜底。
  2. 要写真实存在的版本号。 已发布的版本线是普通的 semver 加预览标签:0.1.0-rc.2 到 0.1.0-rc.8、0.1.1-rc.*、0.1.2-alpha.*、0.1.2-rc.1、0.1.3-alpha.*、0.1.5-alpha.*、0.1.5-rc.*、0.1.6-alpha.1,当前 latest 是 0.1.5-rc.1。目录站点没法把它从没见过的缩写映射到这张表上——请从表里挑版本来声明,不要自造简称。

三条规则让声明保持有用:

  1. 声明你真正测过的版本。在 0.1.2-rc.1 上测过、从没在 0.1.5 线上跑过的插件,就该如实写,哪怕更旧的版本号在列表里不好看。
  2. 在引入新运行时能力的同一个提交里更新它,不要拖到另一次发布再补——那种提交总会被忘掉。
  3. 声明的范围永远不要宽过你验证过的范围。声称兼容某个假想未来版本的插件,只会无谓地把能用的用户挡在门外,而且这种声明经不起推敲。

怎么写

生态目前沉淀下来的写法,是在 dsh 块里放一个 compatibility 对象:

{
  "name": "dsh-my-plugin",
  "version": "0.3.0",
  "type": "module",
  "keywords": ["dsh-plugin", "deepseek-harness", "web-search"],
  "license": "MIT",
  "repository": "https://github.com/you/dsh-my-plugin",
  "dsh": {
    "bundle": { "patch": "./cordis.patch.yml" },
    "compatibility": {
      "dsh": ">=0.1.0-rc.6 <0.2.0",
      "profiles": ["web"],
      "dshReleases": {
        "0.1.5-alpha.1": "compatible",
        "0.1.5-rc.1": "compatible"
      }
    }
  }
}

dsh 是范围;当一刀切会夸大时,用 dshReleases 把单个版本标成 compatible 或 unknown;profiles 说明你支持哪些 harness 界面。

在 README 里也用大白话写一遍,因为人先读的是 README:

已在 DSH 0.1.5-rc.1 上测试。在 0.1.2 线上工具能注册,但流式状态字段不可用。

把失败现象写出来而不只写版本号,兼容性说明才真正能指导用户行动。

插件不兼容时会发生什么

失败通常是可读的:运行时会报这个插件的加载错误,会话的其余部分照常继续。要避免的是插件加载成功然后行为异常——在用户看来那像是 harness 本身的 bug,会引来一堆难查的报告。

如果你的插件触及一个你知道经常变动的层面(比如界面渲染或事件载荷结构),请在加载时做一次运行时检查,发现不匹配就用清晰的报错拒绝激活。体面地拒绝加载比带病加载的体验更好——而且这件事声明替你做不了,因为根本没有东西执行它。

兼容性作为收录信号

目录站点展示兼容性,是因为它回答了用户安装前最关心的问题:它在我的 harness 上能不能跑。在本站,声明会原样出现在每个插件页上,旁边是验证等级和最近更新日期,让你既能判断它能不能跑,也能判断还有没有在维护。验证等级 L3 要求的正是这两件事:安装命令可解析,且声明了目标版本。安装命令可解析但没有声明的插件会停在 L2,并且不会出现在兼容性矩阵的任何分组里——这如实反映了作者到底承诺过什么。

FAQ

兼容性声明能替代 peer 依赖声明吗?

不能。它向用户和目录站点传达 harness 兼容性;peer 依赖范围仍然决定安装时实际解析哪些 @deepseek-ai/* 包。两者用途不同:peer 范围是安装要求,兼容性声明是支持承诺。

多久该更新一次?

每当你引入新的运行时能力、或完成一轮兼容性复测时。不需要每次发版都动。

一个插件能同时支持两个 harness 版本吗?

可以——这正是范围写法或显式 dshReleases 映射的用途。声明 0.1.2-rc.1 || 0.1.5-alpha.1,并把中间的版本标成 unknown(如果你没测过),好过声称一个笼统的大范围。

完全不声明会怎样?

插件照样能装、能加载——harness 不检查。目录站点会记为「未声明」:在本站,该条目不显示目标版本、验证等级停在 L2、且不出现在兼容性矩阵的任何分组里。用户无从判断它适不适合自己,安装量会因此明显下降。

下一步

读 Cordis 生命周期指南 了解这些字段背后的运行时行为,然后发布你的插件。

来源与参考

本页的技术判断建立在以下第一手资料之上,链接可直接追溯核对。

  1. [1]deepseek-ai/deepseek-harness — GitHubDeepSeek Harness、Cordis 运行时与插件加载模型的上游仓库。
  2. [2]@deepseek-ai/dsh on npm — npm已发布的 harness 包,也是本站 dshTarget 字段跟踪的版本来源。
  3. [3]About semantic versioning — npm Docs兼容性与 dshTarget 建议所依据的版本号约定。
  4. [4]Keep a Changelog 1.1.0 — Keep a Changelog建议插件采用的可维护变更日志约定。

全部链接最后核验于 2026-09-11

ESC

输入关键词搜索索引,索引由 Pagefind 在部署时生成。