DSH plugin 装了不激活:dsh.bundle 清单缺失与 inject 报错的原因与解决

故障排查发布于 2026-08-28作者: DeepSeek Plugin 插件市场
DeepSeek HarnessDSH plugin插件不激活dsh.bundlewithout inject
DSH plugin 装了不激活:缺 dsh.bundle 清单或源码缺 inject 声明,装不上只能当普通依赖、不加载。作者补 bundle 清单,用户先回 DSH Plugin Hub 换已发布版。

DSH plugin 装了不激活,是两类声明缺失:包没有 dsh.bundle 清单(dsh plugin add 只当普通依赖装、永远不加载),或插件源码缺 inject 声明(运行时拿不到宿主注入、报 cannot get property ... without inject)。 前者需要作者补清单,后者是插件 bug;用户侧最快的办法是先回 DSH Plugin Hub 换已发布版本。

DSH plugin 装了不激活:两个报错原文与现象

现象是「装得上、激活不了」:dsh plugin add 退出码正常、包在依赖列表里,但插件能力完全不生效,或加载时报 without inject 两段报错(来源):

  1. 装了不激活:终端提示包「作为普通依赖安装、不是 profile 层」(declares no dsh.bundle — installed as a plain dependency),功能不出现——包没声明 dsh.bundle,插件市场/宿主不把它当插件加载;
  2. cannot get property "systemPrompt" without inject:插件代码在声明依赖之前就读取 systemPrompt 等服务,Cordis 反射层直接抛错(源码);
  3. 判断:前者是包格式问题(缺清单),后者是代码 bug(缺声明)——两者都让插件「装了等于没装」。

DSH plugin 不激活根因:缺 dsh.bundle 清单 + 缺 inject 声明

根因两条:一是包没有 dsh.bundle 清单,装进宿主必须声明配置层;二是插件源码读取服务前没声明 inject,运行时拿不到宿主注入。 展开说:

  1. 缺清单装不上层:官方插件发布文档定义——组合包(bundle)必须在 package.json 声明 dsh.bundle 并携带 cordis.patch.yml;没有 dsh.bundle 声明的包可以安装,但只作为普通依赖、不激活任何层(来源);
  2. 缺 inject 拿不到服务:Cordis 要求插件先声明再用——代码调 ctx.systemPrompt 却没写 inject: ["systemPrompt"],反射层找不到注入即抛 without inject源码);
  3. 两者都不是用户能修的:前者要作者改包声明重新发布,后者要作者改源码。

解决 DSH plugin 不激活(作者侧):补 bundle 清单 → 加 inject 声明 → 重装验证

如果你是插件作者:按「补清单 → 加声明 → 重装验证」修;如果你是用户:跳到第 4 节换已发布版。 作者侧步骤:

  1. 补 dsh.bundle 清单——在插件包内新建 cordis.patch.yml,定义要插入/覆盖的插件配置行;在 package.json 里声明引用:
    json
    {
      "dsh": {
        "bundle": { "patch": "cordis.patch.yml" }
      }
    }
    
    重新构建并发布;dsh plugin add 识别到 dsh.bundle 声明后才会把包追加进 profile 的 bundles 层(来源);
  2. 加 inject 声明——找到读取 ctx.systemPrompt(或其他服务)的代码,在插件配置里声明依赖:
    yaml
    inject: ["systemPrompt"]
    
    或等价的 ctx.inject() 写法,保证先声明再使用(来源);
  3. 重装验证——dsh plugin --profile web remove <包名> 后重新 add,重启宿主,确认插件层已激活、不再报 without inject

用户侧:DSH plugin 装不活先回 DSH Plugin Hub 换已发布版

用户侧无法替作者补清单——先回 DSH Plugin Hub 插件市场换官方或已发布的版本,同时把报错反馈给作者。 步骤:

  1. 打开「设置 → 插件市场」(即 DSH Plugin Hub),搜索同一个插件名,看是否有已发布的官方/验证版本;
  2. 有就卸载当前 git 源安装的版本、改装 Hub 里的已发布版——Hub 收录的插件经过验证,缺失声明的问题更少;
  3. declares no dsh.bundlecannot get property ... without inject 原样反馈给插件作者,附上你的 dsh 版本与安装命令;
  4. 装不活且 Hub 也没有替代版时,先禁用该插件避免影响其他功能,等作者修复。

DSH plugin 修复后怎么验证?层激活、注入声明与能力三查

修复后用三查确认:插件真的进了 bundle 层、without inject 不再出现、插件能力在界面上生效——三查全过才算激活。 按顺序执行:

  1. 查插件在已安装列表

    bash
    dsh plugin --profile web list
    

    列表里出现包名说明已装进当前 profile;没出现说明安装没完成,回上节重装。

  2. 查 bundle 声明(作者侧自验)——确认插件 package.json 里 dsh 声明指向补丁文件:

    bash
    grep -A3 '"dsh"' <插件目录>/package.json
    

    输出包含 bundle.patch 且指向 cordis.patch.yml 即清单完整;没有该段说明包还是缺 dsh.bundle

  3. 重启宿主看层激活

    bash
    dsh web
    

    启动日志里出现该插件的 bundle 层加载记录、不再报 cannot get property ... without inject,即声明问题已消除。

  4. 界面验证能力——Web UI 里该插件提供的命令/面板/配置项出现并可用,即真正激活。

  5. 运行观察收尾——持续使用一段时间不再弹 without inject 类报错,修复闭环。

注意事项:DSH plugin 装了不激活先看 no dsh.bundle 提示

  1. 「装了不激活」先看终端有没有 no dsh.bundle 提示——有就是缺清单,别反复重装。
  2. without inject 是插件 bug,别改宿主配置去绕——把报错发给作者最快。
  3. 从 GitHub 源直接 git+https://... 安装的包最容易缺声明,优先走 npm 分发的发布版。
  4. DSH Plugin Hub 的插件页会标注来源与版本,装前先看是不是验证过的发布版。
  5. 其他安装报错可参考安装报错排查
DSH Plugin Hub 插件市场:浏览、搜索与一键安装插件

来源:dshbase 常见问题排错DeepSeek Harness 插件发布文档cordis/reflect.ts

常见问题

DSH plugin 装了不激活、没反应是什么原因?

DSH plugin 装了不激活,最常见是包没有 dsh.bundle 清单:dsh plugin add 只会把它当普通依赖装上,永远不会加载——插件必须带 cordis.patch.yml 并在 package.json 声明 dsh.bundle.patch 才会作为配置层激活(来源)。

cannot get property "systemPrompt" without inject 报错是什么意思?

DSH plugin 报 without inject 是插件代码 bug:代码在声明依赖(inject)之前就读取了 systemPrompt 等服务,运行时拿不到宿主注入。报错由 Cordis 反射层抛出(源码),把这条报错原样发给插件作者即可。

怎么给插件补 dsh.bundle 清单让它激活?

补 DSH plugin 的 dsh.bundle 清单:在插件包内加 cordis.patch.yml(定义要插入/覆盖的插件配置行),并在 package.json 的 dsh.bundle.patch 字段指向它,然后重新构建发布;dsh plugin add 识别到 dsh.bundle 声明后才会把包追加进 profile 的 bundles 层(来源)。

装了不激活的插件,用户侧最快怎么办?

DSH plugin 装了不激活时,用户侧最快是回 DSH Plugin Hub 换已发布版——用户侧无法替作者补清单,先回 DSH Plugin Hub 插件市场换官方或已发布的版本(Hub 收录的是验证过的插件),同时把报错反馈给作者;git 源安装的插件缺声明时尤其常见。

相关术语

dsh.bundle
dsh.bundle 是插件 package.json 中声明配置层的字段,指向一个 cordis.patch.yml 补丁文件;声明了它,dsh plugin add 才会把包作为 profile 层激活,否则只当普通依赖安装。DeepSeek Harness 官方插件发布文档
inject
inject 是 Cordis 插件声明所需服务依赖的机制;插件代码访问 ctx.systemPrompt 等属性前必须先声明 inject: ["systemPrompt"],否则抛 cannot get property ... without inject。DeepSeek Harness cordis 源码
cordis.patch.yml
cordis.patch.yml 是插件包内定义配置层内容的补丁文件,通过 package.json 的 dsh.bundle.patch 字段被 dsh.bundle 引用,用于插入或覆盖插件配置行。DeepSeek Harness 官方插件发布文档
配置层(bundle layer)
配置层是 DSH 组合包(bundle)对 profile 的贡献形式:一个包通过 dsh.bundle 声明并携带补丁文件,安装后即成为 profile 的一个可激活层。DeepSeek Harness 官方插件发布文档

来源