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

插件体检医生 hollowfyh/dsh-plugin-doctor

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

自动禁用加载失败的插件并生成诊断报告

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

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

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

状态速览

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

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

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

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

读写/删除本地文件
查看扫描证据(共 9 处,展示前 9 条)
  • 读取本地文件
    lib/index.js:62
    if (!existsSync(dir)) mkdirSync(dir, { recursive: true })
  • 写入本地文件
    lib/index.js:62
    if (!existsSync(dir)) mkdirSync(dir, { recursive: true })
  • 写入本地文件
    lib/index.js:68
    writeFileSync(temp, `${JSON.stringify(value, null, 2)}\n`, 'utf8')
  • 写入本地文件
    lib/index.js:69
    renameSync(temp, file)
  • 写入本地文件
    lib/index.js:73
    appendFileSync(file, `${JSON.stringify(incident)}\n`, 'utf8')
  • 读取本地文件
    lib/index.js:162
    if (!existsSync(file)) return undefined
  • 读取本地文件
    lib/index.js:164
    if (!existsSync(backupDir)) mkdirSync(backupDir, { recursive: true })
  • 写入本地文件
    lib/index.js:164
    if (!existsSync(backupDir)) mkdirSync(backupDir, { recursive: true })
  • 写入本地文件
    lib/index.js:167
    copyFileSync(file, target)
扫描于 2026/11/3(1 天前) · 范围 入口闭包 + 发布文件清单 · 来源 GitHub 仓库

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

给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个

DeepSeek Harness 的自愈插件诊断工具:检测失败的插件记录,自动禁用并备份补丁,通过 /doctor 输出诊断信息。

README

由 DeepSeek 最新模型翻译生成
dsh-plugin-doctor 插件体检与自动修复。某个插件行在加载时发生冲突(apply 抛错、服务重复注册、依赖缺失等),DSH 会把它标记为 failed 并让它停摆,但整个宿主继续运行。本插件周期扫描 Loader 树: - 发现 failed 行时,调用官方 pluginManager.setPluginEnabled(id, false) 持久化禁用该行(写入 profile 的 cordis.patch.yml 并触发热重组),让其余插件照常工作; - 每次修复写入 $DSH_HOME/plugin-doctor/incidents.jsonl,整份报告写入 report.json; - 注册 /doctor 斜杠命令,随时手动体检。
展开完整文档(README 剩余 1 节)
dsh-plugin-doctor

插件体检与自动修复。某个插件行在加载时发生冲突(apply 抛错、服务重复注册、依赖缺失等),DSH 会把它标记为 failed 并让它停摆,但整个宿主继续运行。本插件周期扫描 Loader 树:

- 发现 failed 行时,调用官方 pluginManager.setPluginEnabled(id, false) 持久化禁用该行(写入 profile 的 cordis.patch.yml 并触发热重组),让其余插件照常工作;
- 每次修复写入 $DSH_HOME/plugin-doctor/incidents.jsonl,整份报告写入 report.json;
- 注册 /doctor 斜杠命令,随时手动体检。

配置(profile 的 cordis.patch.yml 里给本行加 config)

- id: plugin-doctor
name: 'dsh-plugin-doctor'
config:
autoFix: true # 默认 true:自动禁用加载失败的行 scanDelayMs: 3000 # 启动后延迟首次扫描的毫秒数 watchIntervalMs: 12000 # 运行期扫描间隔(0 = 只在启动时扫描一次) maxFixesPerBoot: 3 # 单次启动最多自动修复的行数

安全边界

- 只禁用,不卸载、不改 package.json 依赖;
- 不处理自身、dsh-plugin-manager 与插件清单模块,以及只读行(readOnlyReason);
- 修复数量有上限;临时冲突(HMR transactions cannot be nested)自动重试,最多 6 次;
- 被修复的行在「插件」页仍可手动重新启用;修复记录完整可查。

报告格式

report.json 每次扫描重写:

{
"at": "…", "total": 199, "active": 174,
"failed": [{ "entryId": "…", "moduleName": "…", "readOnlyReason": null }],
"dormant": [],
"fixed": [{ "entryId": "…", "result": { "application": "applied", "changed": true } }],
"skipped": [{ "entryId": "…", "reason": "…" }],
"errors": []
}

dormant = 启用但没有任何存活 fiber 的行(常见于模块导入失败),仅报告、不自动处理。

测试

- node test/smoke.mjs:假上下文下的 4 个场景(正常禁用 / 临时冲突重试 / autoFix 关闭 / 修复上限)。
- test/broken-plugin.mjs:故意在 apply 抛错的测试插件,可通过 patch 的 insert 行临时装载,验证端到端自动修复(实测通过:失败行被禁用并写入 disabled: true)。

实现细节

- 失败检测:优先 pluginManager.listPlugins()(带 readOnlyReason 与 fiberPhase),拿不到时直读 ctx.loader.entries() 并按 fiber.state 映射阶段。
- 修复:pluginManager.setPluginEnabled(entryId, false) —— 官方开关 API,写入 profile 的 cordis.patch.yml 并触发 HMR 重组。
- HMR 上下文坑:本插件若在一次热重组中被挂载,apply 里创建的定时器会继承那次事务的 AsyncLocalStorage 上下文,runExclusive 会以 "HMR transactions cannot be nested" 拒绝修复。因此修复调用包在 hmr.executing.exit(callback) 里(临时清空事务上下文);拿不到该字段时回退直接调用。此路径已在桌面实例实测通过。

局限

- 只看宿主侧 Loader 行;浏览器端模块加载失败、slot 层 UI 重叠不在本插件范围内。
- 若失败发生在宿主启动的极早期(Loader 树本身起不来),本插件同样无法启动——需要人工介入。
- 导入失败(模块不存在)通常不产生 failed fiber,只在 dormant 里出现;被 dormant 记录的模块需要人工检查模块名/依赖。

目录

lib/index.js 宿主侧插件实现 cordis.patch.yml 本 bundle 的插入行 test/smoke.mjs 假上下文冒烟测试 test/broken-plugin.mjs 端到端故障注入插件
预览分享卡片长什么样 ↓hollowfyh/dsh-plugin-doctor
分享 · DeepSeek Harness Hub
hollowfyh/dsh-plugin-doctor

自动禁用加载失败的插件并生成诊断报告

这是你的仓库?认领条目

回到顶部