排查加载失败与更新残留的插件问题
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
安全吗
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
还在维护吗
活跃:最近一次提交在 25 天前
档位由哪些信号合成
本站实装验证(真实安装 L4 覆盖全站;L5 为运行时冒烟或实机截图,覆盖范围小于 L4) · 验证所用 dsh 版本 · 静态安装检查 · 风险分级 · 仓库维护状态。 下方各区块是它的证据明细。
社区实装还没有人打卡 · 装过的第一个就是你
安全扫描自动 · 静态分析源码v2.7.0🔵 扫描:含敏感能力尚无人工评估展开查看扫描说明与证据 ↓
安全扫描自动 · 静态分析源码
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 无隶属关系。预览分享卡片长什么样 ↓
分享 · DeepSeek Harness Hub
Ragnoryok1/dsh-plugin-doctor
排查加载失败与更新残留的插件问题
相关插件 · 开发 / 工程
隐私简历生成器reactive-resume/reactive-resume
Reactive Resume 已迁至 GitHub 上的…
★ 45,125已汉化MCP
71.7
AI 架构文档生成器sopaco/deepwiki-rs
🚀 Litho 已进化为 Terrain —— 给你的 AI 智能体一张会呼吸的代码库地图。
★ 3,157已汉化DSH
70.8
长时任务执行闭环AMAP-ML/LongHorizon-Harness
面向 Computer-Use Agent 的 Loop Engineering
★ 1,764已汉化DSH
70.5
AI 编程纪律方法包GanyuanRan/Aegis
让 AI 编程 agent 变得可信:少返工、更安全、说“完成”前先给证据。
★ 1,384已汉化DSH
69.6
多代理编排运行时Enderfga/claw-orchestrator
面向编程智能体的运行时。把 Claude Code、Codex、Antigravity、Grok…
★ 586已汉化MCP
69.4
记忆进化插件csyangwen/dsh-memory-evolve
dsh-memory-evolve 使用场景指南
★ 461已汉化DSH
67.9