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

插件自愈医生 ckk-09/dsh-refix

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

自动巡检插件故障,能修的当场修复并留观回退

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

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

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

状态速览

判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态
信任档位:需留意
是什么[目录]—
dsh 原生插件 · other
暂无时间戳·判据 →
装得上吗[实装验证]!
实装验证未通过(unknown),装前请到仓库确认最近更新与 issue
L4 · 真实安装等级说明 →
数据截至 2026/10/05·判据 →
安全吗[自动扫描]—
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
数据截至 2026/11/03·判据 →
还在维护吗[仓库]—
更新放缓:最近一次提交在 47 天前
暂无时间戳·判据 →
图例:✓ 通过! 需注意— 未判定 / 无数据· 「未判定」= 本站尚无数据,不代表插件有问题
档位由哪些信号合成

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

验证判据与等级说明 →

可信度证据

⚠︎ 实装验证未通过(unknown · 2026/10/5) ——可能是验证环境差异,装前建议到 GitHub 仓库确认最近更新与 issue。
安全扫描自动 · 静态分析源码
v2.7.0
🔵 扫描:含敏感能力尚无人工评估
展开查看扫描说明与证据 ↓

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

可执行外部命令读写/删除本地文件发起外部网络请求
查看扫描证据(共 58 处,展示前 58 条)
  • 读取本地文件
    ac/ac52.ac.mts:11
    const REFIX_V4 = readFileSync(new URL('../versions/refix-v1.04.js', import.meta.url), 'utf8')
  • 读取本地文件
    ac/n-series-p2.static-check.mjs:18
    const src = (p) => readFileSync(join(root, p), 'utf8')
  • 读取本地文件
    ac/n-series.static-check.mjs:20
    const src = (p) => readFileSync(join(root, p), 'utf8')
  • 读取本地文件
    ac/p0.ac.mts:17
    const REFIX_HOST = readFileSync(new URL('../versions/refix-v1.01.js', import.meta.url), 'utf8')
  • 读取本地文件
    ac/p0.ac.mts:18
    const PATIENT_HOST = readFileSync(new URL('../versions/patient-v1.js', import.meta.url), 'utf8')
  • 读取本地文件
    ac/p1.ac.mts:9
    const REFIX_V1 = readFileSync(new URL('../versions/refix-v1.01.js', import.meta.url), 'utf8')
  • 读取本地文件
    ac/p1.ac.mts:10
    const REFIX_V2 = readFileSync(new URL('../versions/refix-v1.02.js', import.meta.url), 'utf8')
  • 读取本地文件
    ac/p1.ac.mts:11
    const PATIENT_OK = readFileSync(new URL('../versions/patient-v1.js', import.meta.url), 'utf8')
  • 读取本地文件
    ac/p1.ac.mts:12
    const PATIENT_BROKEN = readFileSync(new URL('../versions/patient-v2-broken.js', import.meta.url), 'utf8')
  • 读取本地文件
    ac/p2.ac.mts:9
    const REFIX_V2 = readFileSync(new URL('../versions/refix-v1.02.js', import.meta.url), 'utf8')
  • 读取本地文件
    ac/p2.ac.mts:10
    const REFIX_V3 = readFileSync(new URL('../versions/refix-v1.03.js', import.meta.url), 'utf8')
  • 读取本地文件
    ac/p2.ac.mts:11
    const PATIENT_OK = readFileSync(new URL('../versions/patient-v1.js', import.meta.url), 'utf8')
  • 读取本地文件
    ac/p2.ac.mts:12
    const PATIENT_BROKEN = readFileSync(new URL('../versions/patient-v2-broken.js', import.meta.url), 'utf8')
  • 读取本地文件
    ac/p3.ac.mts:9
    const REFIX_V3 = readFileSync(new URL('../versions/refix-v1.03.js', import.meta.url), 'utf8')
  • 读取本地文件
    ac/p3.ac.mts:10
    const REFIX_V4 = readFileSync(new URL('../versions/refix-v1.04.js', import.meta.url), 'utf8')
  • 读取本地文件
    ac/p3.ac.mts:11
    const PATIENT_OK = readFileSync(new URL('../versions/patient-v1.js', import.meta.url), 'utf8')
  • 读取本地文件
    ac/p3.ac.mts:12
    const PATIENT_BROKEN = readFileSync(new URL('../versions/patient-v2-broken.js', import.meta.url), 'utf8')
  • 读取本地文件
    ac/p3r.ac.mts:11
    const REFIX_V4 = readFileSync(new URL('../versions/refix-v1.04.js', import.meta.url), 'utf8')
  • 读取本地文件
    ac/p3r.ac.mts:12
    const REFIX_V5 = readFileSync(new URL('../versions/refix-v1.05.js', import.meta.url), 'utf8')
  • 读取本地文件
    ac/p3r.ac.mts:13
    const PATIENT_OK = readFileSync(new URL('../versions/patient-v1.js', import.meta.url), 'utf8')
  • 读取本地文件
    ac/p3r2.ac.mts:11
    const REFIX_V5 = readFileSync(new URL('../versions/refix-v1.05.js', import.meta.url), 'utf8')
  • 读取本地文件
    ac/p3r2.ac.mts:12
    const REFIX_V6 = readFileSync(new URL('../versions/refix-v1.06.js', import.meta.url), 'utf8')
  • 读取本地文件
    ac/p3r2.ac.mts:13
    const PATIENT_OK = readFileSync(new URL('../versions/patient-v1.js', import.meta.url), 'utf8')
  • 读取本地文件
    ac/p3r3.ac.mts:10
    const REFIX_V6 = readFileSync(new URL('../versions/refix-v1.06.js', import.meta.url), 'utf8')
  • 读取本地文件
    ac/p3r3.ac.mts:11
    const REFIX_V7 = readFileSync(new URL('../versions/refix-v1.1-pre2.js', import.meta.url), 'utf8')
  • 读取本地文件
    ac/p3r3.ac.mts:12
    const PATIENT_OK = readFileSync(new URL('../versions/patient-v1.js', import.meta.url), 'utf8')
  • 读取本地文件
    ac/pre3-smoke.mjs:18
    const src = (p) => readFileSync(join(root, 'versions', p), 'utf8')
  • 读取本地文件
    ac/upd.ac.mts:23
    const V8 = readFileSync(new URL('../versions/refix-v1.1-pre1.js', import.meta.url), 'utf8')
  • 读取本地文件
    ac/upd.ac.mts:24
    const PATIENT_OK = readFileSync(new URL('../versions/patient-v1.js', import.meta.url), 'utf8')
  • 读取本地文件
    ac/upd2.ac.mts:30
    const V9 = readFileSync(new URL('../versions/refix-v1.1-pre2.js', import.meta.url), 'utf8')
  • 读取本地文件
    ac/upd2.ac.mts:31
    const PATIENT_OK = readFileSync(new URL('../versions/patient-v1.js', import.meta.url), 'utf8')
  • 读取本地文件
    ac/upd3.ac.mts:43
    const UPDATER = readFileSync(new URL('../versions/refix-updater-v1.1-pre.js', import.meta.url), 'utf8')
  • 读取本地文件
    ac/upd3.ac.mts:44
    const V9 = readFileSync(new URL('../versions/refix-v1.1-pre2.js', import.meta.url), 'utf8')
  • 读取本地文件
    ac/v110-smoke.mjs:17
    const source = readFileSync(join(root, 'versions', 'refix-v1.10.js'), 'utf8')
  • 执行外部命令固定命令
    deploy/static/boot-test.mjs:48
    spawn('taskkill', ['/PID', String(pid), '/T', '/F'], { stdio: 'ignore', windowsHide: true })
  • 写入本地文件
    deploy/static/boot-test.mjs:64
    try { writeFileSync(logPath, lines.join('\n'), 'utf8') } catch (_) {}
  • 执行外部命令来自配置/变量
    deploy/static/boot-test.mjs:88
    child = spawn(DSH_CMD, ['--profile', PROFILE, '--port', '0', '--no-open'], {
  • 读取本地文件
    deploy/static/build-static.mjs:101
    const manifest = JSON.parse(readFileSync(manifestPath, 'utf8'))
  • 读取本地文件
    deploy/static/build-static.mjs:104
    if (!existsSync(srcPath)) fail(`source not found: ${srcPath} (manifest.file=${manifest.file})`)
  • 读取本地文件
    deploy/static/build-static.mjs:106
    const source = readFileSync(srcPath, 'utf8')
  • 删除本地文件递归
    deploy/static/build-static.mjs:540
    rmSync(outDir, { recursive: true, force: true })
  • 写入本地文件
    deploy/static/build-static.mjs:543
    mkdirSync(dirname(target), { recursive: true })
  • 写入本地文件
    deploy/static/build-static.mjs:544
    writeFileSync(target, content, 'utf8')
  • 写入本地文件
    deploy/static/build-static.mjs:558
    mkdirSync(distDir, { recursive: true })
  • 执行外部命令来自配置/变量
    deploy/static/build-static.mjs:560
    const packed = spawnSync(npmCmd, ['pack', '--pack-destination', distDir], {
  • 读取本地文件
    deploy/static/build-static.mjs:573
    const bytes = readFileSync(tgzPath)
  • 执行外部命令来自配置/变量
    deploy/static/dump-config-check.mjs:31
    const result = spawnSync(DSH_CMD, ['--profile', PROFILE, '--dump-config'], {
  • 写入本地文件
    deploy/static/dump-config-check.mjs:67
    if (OUT !== '') writeFileSync(OUT, out, 'utf8')
  • 读取本地文件
    deploy/static/test-static.mjs:40
    const hit = BUNDLE_CANDIDATES.find((p) => existsSync(p))
  • 删除本地文件递归
    deploy/static/test-static.mjs:162
    rmSync(scratch, { recursive: true, force: true })
  • 写入本地文件
    deploy/static/test-static.mjs:163
    mkdirSync(scratch, { recursive: true })
  • 写入本地文件
    deploy/static/test-static.mjs:165
    mkdirSync(emptyHome, { recursive: true })
  • 写入本地文件
    deploy/static/test-static.mjs:170
    copyFileSync(modulePath, copy)
  • 删除本地文件递归
    deploy/static/test-static.mjs:293
    if (scratch !== null) rmSync(scratch, { recursive: true, force: true })
  • 发起网络请求
    versions/refix-updater-v1.1-pre.js:256
    res = await web.fetch({ url: url })
  • 发起网络请求
    versions/refix-v1.1-pre1.js:416
    res = await web.fetch({ url: UPDATE_SOURCE_URL })
  • 发起网络请求
    versions/refix-v1.1-pre2.js:479
    res = await web.fetch({ url: UPDATE_SOURCE_URL })
  • 发起网络请求
    versions/refix-v1.1-pre3.js:536
    res = await web.fetch({ url: UPDATE_SOURCE_URL })
扫描于 2026/11/3(1 天前) · 范围 全包扫描 · 来源 GitHub 仓库

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

社区实装还没有人打卡 · 装过的第一个就是你
给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个

功能亮点

  • 自动巡检插件故障
  • 当场修复故障
  • 留观与回退

README

由 DeepSeek 最新模型翻译生成
dsh-refix — 给你的 DSH 插件请一位「全科医生」 一句话:它是一个会自己体检、自己开药、自己记病历的 DSH 插件保姆,别的插件出事了它先发现,能修的它自己修,修不好它会老实告诉你。 DSH Market 它能帮你做什么? 想象你的 DSH 会话里跑着好几个动态插件。突然某个插件罢工了、报错了、页面渲染挂了——以前你要自己盯、自己查、自己修。现在有了 dsh-refix: | 就像医生会… | dsh-refix 会… | 背后的能力 | | 🩺 定期体检 | 每 15 秒 + 出事瞬间自动巡检所有插件,发现「某某插件停了」「某某方法报错了」 | F1 诊断 | | 💊 按方开药 | 每种常见病症都有现成的处理方案,没见过的病症绝不动手,只向你报告 | F2 处方 | | 🏥 治病留观 | 修复 = 切换到新版本,然后观察 30 秒确认真的好了;没修好自动退回旧版本,绝不越修越坏 | F3 执行 | | 📒 记住病历 | 同一个毛病第二次犯,直接用上次有效的药方;上次治坏了的方子,它不会再试 | F4 迭代 | | 📢 提醒复查 | 出现新版本时在对话里提醒你,并附上一步步的升级手册(但绝不擅自升级) | F6 更新提示 | 三条铁律贯穿始终:诊断只看不碰、修复绝不删库(永不 undefine)、牵涉浏览器的操作必须你亲自点头。
展开完整文档(README 剩余 1 节)
dsh-refix — 给你的 DSH 插件请一位「全科医生」

一句话:它是一个会自己体检、自己开药、自己记病历的 DSH 插件保姆,别的插件出事了它先发现,能修的它自己修,修不好它会老实告诉你。

DSH Market

它能帮你做什么?

想象你的 DSH 会话里跑着好几个动态插件。突然某个插件罢工了、报错了、页面渲染挂了——以前你要自己盯、自己查、自己修。现在有了 dsh-refix:

| 就像医生会… | dsh-refix 会… | 背后的能力 |
| 🩺 定期体检 | 每 15 秒 + 出事瞬间自动巡检所有插件,发现「某某插件停了」「某某方法报错了」 | F1 诊断 |
| 💊 按方开药 | 每种常见病症都有现成的处理方案,没见过的病症绝不动手,只向你报告 | F2 处方 |
| 🏥 治病留观 | 修复 = 切换到新版本,然后观察 30 秒确认真的好了;没修好自动退回旧版本,绝不越修越坏 | F3 执行 |
| 📒 记住病历 | 同一个毛病第二次犯,直接用上次有效的药方;上次治坏了的方子,它不会再试 | F4 迭代 |
| 📢 提醒复查 | 出现新版本时在对话里提醒你,并附上一步步的升级手册(但绝不擅自升级) | F6 更新提示 |

三条铁律贯穿始终:诊断只看不碰、修复绝不删库(永不 undefine)、牵涉浏览器的操作必须你亲自点头。

三分钟上手

一条命令,装完即用 —— 不需要下载源码,也不需要贴任何话术:

dsh plugin --profile web add https://raw.githubusercontent.com/ckk-09/dsh-refix/main/deploy/static/dist/dsh-refix-1.4.0.tgz

然后正常启动 dsh,插件随启动自动加载。控制台出现这一行就成了:

dsh-refix p3.8 ready; contract OK (兼容性自检通过); baseline plugins: N; patrol every 15000ms

想立刻问一句,就说——

调用 refix_report 给我一份 dsh-refix 的自检报告

看到一坨 JSON?恭喜,医生已经上岗了。(注意:插件自身只有 15s 巡检是自动的;出报告与执行修复要有人调工具——你开口就行。)

完整步骤、动态包装法(要在会话里热切换 / 回退版本时用)与高频故障 → QUICKSTART.md。
工具参数、outcome / phase / reason 全表、哈希核对、回退、五个必踩的坑 → TECHNICAL.md 的「使用者参考」。

选哪个版本?

✅ 稳定版(推荐所有人使用)

静态包(V1.4,默认推荐) —— 一条命令装、装完随 dsh 启动自动加载,全程不需要模型介入:

| 定版号 | 产物 | 一句话说明 |
| V1.4 | deploy/static/dist/dsh-refix-1.4.0.tgz | 当前推荐:装它只要一条命令。插件逻辑与 V1.10(p3.8)逐字节相同,随源码带上六项独立审查修复 + Phase 2 四项新能力。 |
| V1.3 | deploy/static/dist/dsh-refix-1.3.0.tgz | 上一版静态包(插件逻辑 = V1.08 / p3.7)。 |
| V1.2 | deploy/static/dist/dsh-refix-1.2.0.tgz | 首个静态包发布——改的是交付形态,不是功能(插件逻辑 = V1.07 / p3.4)。 |

动态包源码(V1.0x 线) —— 需要在会话里热切换 / 一键回退版本时用:

| 定版号 | 文件 | 一句话说明 |
| V1.01 | versions/refix-v1.01.js | 最小骨架:体检报告能用 |
| V1.02 | versions/refix-v1.02.js | 加入自动巡检 |
| V1.03 | versions/refix-v1.03.js | 会治病了(观察窗 + 自动回退) |
| V1.04 | versions/refix-v1.04.js | 会记病历(知识库复用) |
| V1.05 | versions/refix-v1.05.js | 第一轮安全大修 |
| V1.06 | versions/refix-v1.06.js | 第二轮复检修复 |
| V1.10 | versions/refix-v1.10.js | Phase 2(当前推荐):F7 主动告警 + 探针两级化 + 知识库导出/回填 + 同 Team 代修放行,并继承 V1.08 全部修复 —— V1.4 静态包就是它的静态形态 |
| V1.08 | versions/refix-v1.08.js | 独立审查修复版:六项缺陷逐条修复 —— V1.3 静态包就是它的静态形态 |
| V1.07 | versions/refix-v1.07.js | 第三轮复检修复 —— V1.0x 的上一版(V1.2 静态包是它的静态形态) |

⚠️ 前瞻版本(尝鲜专用,慎重选择升级安装)

🚧 警告:以下是 V1.1 的预览版(pre),包含实验性改动与潜在的破坏性变更,随时可能调整甚至回退。
不确定就别用;要试,请先看完 TECHNICAL.md 的「已知边界」一节。稳定永远选 V1.4(静态包)。

另外:更新提示只报稳定线。装了 pre 版不会被自动催升级,想装哪个 pre 版请自己指名文件——这个项目不会把实验版塞给普通用户。

| 定版号 | 文件 | 新增了什么 | 风险提示 |
| V1.1-pre1 | versions/refix-v1.1-pre1.js | 更新探测 + 对话内更新提示 | 实验性功能,未正式发布 |
| V1.1-pre2 | versions/refix-v1.1-pre2.js | 更新提示附带可执行手册 + 外部文本隔离 | 同上 |
| V1.1-pre3 | versions/refix-v1.1-pre3.js | 稳定线全部能力 + F6 更新探测;由 tools/gen-pre.mjs 从 V1.10 单源生成,勿手改 | 同上 |
| V1.1-pre-updater | versions/refix-updater-v1.1-pre.js | 独立的「自动装新版」助手(默认关闭,每次都需你点批准) | 这是全仓库唯一会「从网络拉代码并执行」的能力,含实验性破坏,慎重启用 |

它不会做什么?(免得你担心)

- ❌ 不会删除任何插件(修复只换版本,旧版本永远留着当后悔药)
- ❌ 不会联网拉代码来执行(唯一的例外是那个默认关闭、每次都要你点「允许一次」的 updater)
- ❌ 不会在你不知情时动你的插件(浏览器半区的操作必须走 DSH 原生审批,你说了算)
- ❌ 不会无中生有编修复方案(没见过的病症只报告,交给人)
- ✅ 重启后「失忆」(病历不落盘)——这是刻意设计:不留任何痕迹在你机器上

想深入了解?

| 想知道… | 去看 |
| 一步步怎么装、报错怎么办 | QUICKSTART.md |
| 工具参数、返回值全表(outcome/phase/reason)、哈希核对、回退、五个坑 | TECHNICAL.md 的「使用者参考」 |
| 全部技术细节:硬边界 B1~B6、诊断策略表、13/13 验收矩阵、8/8 回归、已知边界 | TECHNICAL.md |
| 每个阶段干了什么、踩过什么坑 | reports/ 目录(P0~P4 + P3R/P3R2/P3R3) |
| 验收怎么跑 | TECHNICAL.md 的「运行验收脚本」 |

License

MIT

dsh-refix —— 你 DSH 插件的「家庭医生」

一句话:一个插件管家,自己查健康、自己开药方、自己记病历。别的插件倒下了,它第一个发现,能安全修的就修,修不了的如实上报。

它能为你做什么?

想象一下,你的 DSH 会话里跑着好几个动态插件。一个崩了,一个抛异常,第三个渲染不出来——以前你得自己盯着、自己诊断、自己修。有了 dsh-refix:

| 就像一位医生…… | dsh-refix…… | 能力 |
| 🩺 定期体检 | 每 15s 巡逻一次 + 事件触发即时检查,发现「插件 X 停了」「方法 Y 抛异常」 | F1 诊断 |
| 💊 照方抓药 | 每个已知症状都有现成修复方案;未知症状绝不碰,只上报 | F2 开方 |
| 🏥 治完再观察 | 一次修复 = 换版本 + 30s 观察窗口;没稳住就自动回退 | F3 修复 |
| 📒 记病历 | 复发的症状直接复用验证过的方案;上次失败的方案绝不重试 | F4 迭代 |
| 📢 提醒复诊 | 有新版本时注入更新提示,附带分步手册(绝不自己升级) | F6 更新探测 |

三条铁律贯穿始终:诊断严格只读;修复绝不删除(永不 undefine);任何触碰浏览器的操作都要你明确批准。

3 分钟跑起来

一条命令,搞定 —— 不用下载源码,不用粘贴任何内容:

dsh plugin --profile web add https://raw.githubusercontent.com/ckk-09/dsh-refix/main/deploy/static/dist/dsh-refix-1.4.0.tgz

然后照常启动 dsh;插件每次启动都会自动加载。看到下面这行,就说明它起来了:

dsh-refix p3.8 ready; contract OK (兼容性自检通过); baseline plugins: N; patrol every 15000ms

想立刻让它检查一次:

调用 refix_report,给我看 dsh-refix 的自检报告

看到一坨 JSON?恭喜 —— 医生已上岗。(注意:插件内部只有 15 秒巡检是自动的;报告和修复都要靠工具调用 —— 直接跟模型说就行。)

完整步骤、动态包挂载路径(想在会话里热切换或回滚版本时用这个),以及高频故障 → 见 QUICKSTART.md。
工具参数、outcome / phase / reason 三张表、哈希校验、回滚,还有你一定会踩的五个坑 → 见 TECHNICAL.md 的「使用者参考」一节。

该选哪个版本?

✅ 稳定线(推荐所有人用)

静态包(V1.4,默认) —— 一条命令装完,每次启动随 dsh 自动加载,全程不牵扯模型:

| 版本 | 产物 | 一句话 |
| V1.4 | deploy/static/dist/dsh-refix-1.4.0.tgz | 当前推荐:一条命令装完。插件逻辑与 V1.10(p3.8)逐字节一致,包含六项独立评审修复,外加 Phase 2 的四项能力。 |
| V1.3 | deploy/static/dist/dsh-refix-1.3.0.tgz | 上一个静态版本(插件逻辑 = V1.08 / p3.7)。 |
| V1.2 | deploy/static/dist/dsh-refix-1.2.0.tgz | 首个静态包版本 —— 改的是交付形式,不是功能(插件逻辑 = V1.07 / p3.4)。 |

动态包源码(V1.0x 线) —— 想在会话里热切换或回滚版本时用这些:

| 版本 | 文件 | 一句话 |
| V1.01 | versions/refix-v1.01.js | 最小骨架:报告工具可用 |
| V1.02 | versions/refix-v1.02.js | 加入自动巡检 |
| V1.03 | versions/refix-v1.03.js | 能治(观察窗口 + 自动回滚) |
| V1.04 | versions/refix-v1.04.js | 留档(知识库) |
| V1.05 | versions/refix-v1.05.js | 第一轮安全加固 |
| V1.06 | versions/refix-v1.06.js | 第二轮评审修复 |
| V1.10 | versions/refix-v1.10.js | Phase 2(当前推荐):F7 主动告警 + 两级探测 + 知识导出/恢复 + 同队修复 —— 继承 V1.08 全部修复;V1.4 是它的静态形式 |
| V1.08 | versions/refix-v1.08.js | 独立评审修复:修掉六个缺陷 —— V1.3 是它的静态形式 |
| V1.07 | versions/refix-v1.07.js | 第三轮评审修复 —— V1.0x 线的上一个版本(V1.2 是它的静态形式) |

⚠️ 预览线(实验性 —— 升级请谨慎)

🚧 警告:V1.1-pre 系列是 V1.1 的预览版,带有实验性、可能破坏兼容的改动,随时可能变更或回滚。
拿不准就留在 V1.4(静态打包版)。一定要试的话,先读 TECHNICAL.md 里的「已知限制」一节。

另外:更新提示只会报告稳定线。 装了 pre 版本永远不会催你升级;想要某个具体的 pre 版本,自己把文件名写清楚 —— 这个项目不会把实验性构建推给普通用户。

| 版本 | 文件 | 新增内容 | 风险提示 |
| V1.1-pre1 | versions/refix-v1.1-pre1.js | 更新探测 + 会话内更新提示 | 实验性,未发布 |
| V1.1-pre2 | versions/refix-v1.1-pre2.js | 提示里带上分步手动操作说明 + 外部文本隔离 | 同上 |
| V1.1-pre3 | versions/refix-v1.1-pre3.js | 稳定线的全部能力 + F6 更新探测;由 tools/gen-pre.mjs 从 V1.10 生成 —— 不要手动改 | 同上 |
| V1.1-pre-updater | versions/refix-updater-v1.1-pre.js | 独立的「安装新版本」辅助工具(默认关闭,每次都要你批准) | 本仓库唯一会从网络拉取代码并执行的能力 —— 实验性,可能破坏兼容;请谨慎启用 |

它不会做什么(所以你可以放心)

- ❌ 绝不删除插件(修复只切换版本;旧版本留着当回滚点)
- ❌ 绝不从网络拉取并执行代码(唯一例外是默认关闭的 updater,每次都要你明确点「允许一次」)
- ❌ 未经你同意绝不动你的插件(浏览器侧操作走 DSH 原生审批流程 —— 由你决定)
- ❌ 绝不凭空编造修复方案(遇到未知症状就上报,交给人处理)
- ✅ 重启后忘掉一切(记录不持久化)—— 有意为之:不在你机器上留下任何东西

想深入了解?

| 你要找… | 去哪里 |
| 分步安装与故障排查 | QUICKSTART.md |
| 工具参数、完整返回值表(outcome/phase/reason)、哈希校验、回滚、五个坑 | TECHNICAL.md 的「使用者参考」一节 |
| 完整技术细节:边界 B1~B6、症状策略表、13/13 AC 矩阵、8/8 回归、已知限制 | TECHNICAL.md |
| 每个阶段做了什么、踩了哪些坑 | reports/(P0~P4 + P3R/P3R2/P3R3) |
| 怎么跑验收 | 运行验收脚本 |

License

MIT
预览分享卡片长什么样 ↓ckk-09/dsh-refix
分享 · DeepSeek Harness Hub
ckk-09/dsh-refix

自动巡检插件故障,能修的当场修复并留观回退

这个插件是你维护的吗?
作者本人可认领并核对本条目;认领通过后,详情页会显示「作者已认领」标记。
认领条目 →
回到顶部