🎁 福利专区全网大模型免费应用 + 新用户福利 + 注册活动入口,低成本玩转 AI

插件诊断面板 Ragnoryok1/dsh-plugin-doctor

DeepSeek Harness
Ragnoryok125 天前有提交已提供中文文档扫描:含敏感能力

排查加载失败与更新残留的插件问题

30/100
综合分
0
GitHub 星标
—
npm 周下载
—/5
用户评分

数据截至 2026/10/7 · 周下载取自 npm 全网(含 CI / 镜像),非本站安装数;综合分由星标、活跃度与兼容性检查合成。

安装命令 · 需先装 dsh CLI 引擎
dsh plugin --profile web add Ragnoryok1/dsh-plugin-doctor
该包不可直接 npm 安装,改从 GitHub 源安装(明细见下方安装检查)

状态速览

判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态
信任档位:待复验
是什么
dsh 原生插件 · dev
装得上吗
曾在 dsh 0.2.0-rc.2 下真实安装成功,但当前 dsh 已更新至 0.2.1-rc.5,本站尚未在新版下复验
L4 · 真实安装等级说明 →
安全吗
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
还在维护吗
活跃:最近一次提交在 25 天前
档位由哪些信号合成

本站实装验证(真实安装 L4 覆盖全站;L5 为运行时冒烟或实机截图,覆盖范围小于 L4) · 验证所用 dsh 版本 · 静态安装检查 · 风险分级 · 仓库维护状态。 下方各区块是它的证据明细。

验证判据与等级说明 →
社区实装还没有人打卡 · 装过的第一个就是你
安全扫描自动 · 静态分析源码
v2.7.0
🔵 扫描:含敏感能力尚无人工评估
展开查看扫描说明与证据 ↓

静态扫描发现插件具备触达本地系统的能力:执行外部命令、读写/删除本地文件、读取剪贴板或密钥类环境变量(至少其一)。这是能力清单,不是危险判定——具体能力项与证据见下方,安装前请自行判断是否需要。

读写/删除本地文件
查看扫描证据(共 14 处,展示前 6 条)
  • 读取本地文件
    bin/doctor-scan.mjs:30
    try { return JSON.parse(readFileSync(path, 'utf8')) } catch { return null }
  • 读取本地文件
    bin/doctor-scan.mjs:101
    if (!existsSync(modules)) return out
  • 读取本地文件
    bin/doctor-scan.mjs:102
    for (const entry of readdirSync(modules)) {
  • 读取本地文件
    bin/doctor-scan.mjs:105
    if (!statSync(path).isDirectory()) continue
  • 读取本地文件
    bin/doctor-scan.mjs:107
    for (const inner of readdirSync(path)) out.push({ name: `${entry}/${inner}`, path: join(path, inner) })
  • 读取本地文件
    bin/doctor-scan.mjs:114
    if (!existsSync(PROFILES)) {
扫描于 2026/10/31(1 天前) · 范围 入口闭包 + 发布文件清单 · 来源 GitHub 仓库

静态扫描只反映源码中出现的调用,不构成安全背书;人工评估与自动扫描相互独立、互不覆盖。

依赖的 DSH / Cordis 模块
@deepseek-ai/dsh-client-locale
给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个

功能亮点

  • 排查加载失败插件
  • 识别更新残留行
  • 扫描磁盘清理残留

DeepSeek Harness 插件诊断:找出加载失败的插件、更新失败留下的残留行、未纳管条目,还能扫描磁盘清理更新残留。

README

由 DeepSeek 最新模型翻译生成
@ragnoryok1/dsh-plugin-doctor DeepSeek Harness 插件诊断 一个面向 DeepSeek Harness Web GUI(dsh)的诊断面板。 检查内容 | 分类 | 含义 | | 加载失败 | 插件在启动时报告了错误,会显示它自己给出的消息。 | | 已声明但未运行 | 某个包声明了这一行,但没有任何运行中的条目承载它——这正是更新失败后留下的痕迹。 | | 无法在此管理 | 条目存在,但不能在这里切换。会显示具体原因:management-required、unaddressable 等。 | | 已禁用 | 被有意关闭。 | | 版本警告 | 不致命,但在下次更新前值得一读。 | 只有错误才算作问题。参考类分类始终可见,但绝不会让一个健康的配置档看起来像是坏掉了。 界面外观 插件清单旁的“诊断”标签页 安装 dsh plugin --profile web add @ragnoryok1/dsh-plugin-doctor 然后打开 Settings → Built-in plugins → Diagnostics。 为什么它能经受住多次更新 本插件从不读取其他包的文件或内部实现。
展开完整文档(README 剩余 1 节)
@ragnoryok1/dsh-plugin-doctor

DeepSeek Harness 插件诊断

一个面向 DeepSeek Harness Web GUI(dsh)的诊断面板。

检查内容

| 分类 | 含义 |
| 加载失败 | 插件在启动时报告了错误,会显示它自己给出的消息。 |
| 已声明但未运行 | 某个包声明了这一行,但没有任何运行中的条目承载它——这正是更新失败后留下的痕迹。 |
| 无法在此管理 | 条目存在,但不能在这里切换。会显示具体原因:management-required、unaddressable 等。 |
| 已禁用 | 被有意关闭。 |
| 版本警告 | 不致命,但在下次更新前值得一读。 |

只有错误才算作问题。参考类分类始终可见,但绝不会让一个健康的配置档看起来像是坏掉了。

界面外观

插件清单旁的“诊断”标签页

安装

dsh plugin --profile web add @ragnoryok1/dsh-plugin-doctor

然后打开 Settings → Built-in plugins → Diagnostics。

为什么它能经受住多次更新

本插件从不读取其他包的文件或内部实现。它展示的一切都来自受支持的服务:插件管理器通过 Remote 协议(remote.pluginManager)上报状态,返回结果再从 { ok, value } 信封中解包出来。

由此衍生出两个特性,而这两点都很容易做错:

- “未发现问题”总是附带检查数量——否则它与“这次检查什么都没看到”无法区分;
- 参考信息不是问题:配置档自身拥有的内置模块属于正常情况,而不是故障。

如何验证

像“能找出损坏的插件”这样的说法,如果没有真正弄坏一个插件就毫无价值,因此我们在一台实际运行的 harness 上,用一个刻意弄坏的插件做了验证:fixtures/canary/ 里存放着一个 apply() 始终抛异常的 fixture。

| 配置档状态 | 面板显示的内容 |
| 已安装 canary | “发现 1 个问题” → “已声明但未运行 (1):doctor-canary”,并附带模块名和建议 |
| 已移除 canary | “未发现问题。所有插件均已加载且兼容。” |

复现步骤见 fixtures/canary/README.md。

有一个细节值得了解:在宿主端失败的行永远不会进入运行中插件列表,因此已经没有谁还能承载 meta.error——正是包级条目检查抓到了它。两种检查都必不可少,实践也证实了这一点。

两个部分:面板与磁盘扫描

面板通过受支持的服务读取插件状态——但这些服务运行在浏览器里,看不到文件系统。而那些我们总要手动一点点排查的故障恰恰存在于磁盘上,所以由另一个脚本来报告它们:

node bin/doctor-scan.mjs
or, when the package is installed on its own: npx dsh-doctor

| 查找对象 | 为什么重要 |
| .parked 目录 | 被搁置的插件副本——更新时绕过“重命名被占用”留下的痕迹 |
| _tmp_ 目录 | 安装失败后的残留;正是它让更新以 EPERM 失败 |
| 损坏的 file: 链接 | 配置档指向了一个已经不在的文件:安装还没开始就会以 ENOENT 失败 |
| 启动失败报告 | logs/startup-.log:启动器自己列出未能激活的插件,含包名、错误与等待其服务的插件数量 |

在真实残留物上验证过。 该脚本先在干净的配置档上运行,再在刻意制造了残留文件的配置档上运行(两类残留都被找到),然后再次在干净的配置档上运行——没有任何发现。期间它还发现了一个真实的 .parked 目录,是某次插件更新中为绕过 EPERM 而遗留在配置档里的;那个目录已被删除。

为什么残留文件没有出现在面板里。 要在界面中展示它们,就需要本插件自己的 remote 服务,而 ctx.remote.* 下的名称是由 harness 构建流水线生成的。生成器(@deepseek-ai/dsh-typert-generator)已经发布,所以这条路是存在的——但那是另一项工作,本文档并不宣称它已经完成。

它不做什么

- 不做任何修复:它只负责报告;
- 不向任何地方发送数据:一切都在本地计算。

为什么 peer 范围这么长

peerDependencies 里不是一个短范围,而是九条带显式预发布标签的分支。这不是装饰:node-semver 只有在范围中存在同一个 major.minor.patch 元组、且自身带预发布标签的比较符时,才允许预发布版本通过。所以看起来很宽的 >=0.1.0-rc.2 <0.3.0 既匹配不到 0.1.7-alpha.2,也匹配不到 0.2.1-alpha.1,用户会撞上 ERESOLVE。已用 npm 本身验证:短范围只解析出 0.1.0-rc.2 … 0.1.0-rc.8,长范围覆盖我们需要的每个版本。

构建

npm install
npm run build # tsdown -> lib/index.js (host half) + lib/client.js (client bundle)
npm pack

lib/client.js 以 dsh 客户端加载器能够识别的格式构建(__ModuleLoader__.load),并导出 inject/apply。React 与 harness 相关包保持为外部依赖,由加载器负责解析。

目录结构

- src/client/index.ts —— 面板、各项检查以及标签页注册;
- src/client/locales.ts —— 本插件自身界面所用的 ru、zh 和 en 词典;
- src/index.ts —— 空的宿主端部分(它的作用是提供一个可加载的 node 入口);
- cordis.patch.yml —— 配置档补丁(为 plugin-doctor 客户端行添加 - insert:);
- bin/doctor-scan.mjs —— 磁盘扫描(残留文件与损坏链接);
- fixtures/canary/ —— 用于验证面板的 canary fixture。

许可证

MIT。这是一个社区包,与 DeepSeek 无隶属关系。
预览分享卡片长什么样 ↓Ragnoryok1/dsh-plugin-doctor
分享 · DeepSeek Harness Hub
Ragnoryok1/dsh-plugin-doctor

排查加载失败与更新残留的插件问题

回到顶部