dsh-recency-guard:DSH 插件崩溃后的新近性隔离与恢复

前言

在 DeepSeek Harness(DSH)里按需安装、更新第三方或实验性插件,是常见做法。一旦某个插件在启动或运行阶段拖垮宿主,往往只能先关掉全部插件,再逐个加回定位元凶。这个过程费时,还容易在「刚更新过谁」与「配置被改掉」之间失去线索。下面介绍的 dsh-recency-guard(维护者 xuanyuanchumo,社区分类 admin-security)面向这一类崩溃恢复场景:记录安装与更新的时间顺序,备份相关配置,并在下一次启动、问题插件代码尚未被加载之前,按规则自动隔离最可疑的条目,待宿主稳定后再逐步恢复。

这是什么

dsh-recency-guard 是 DSH 的插件崩溃恢复守护。README 将其概括为:记录第三方/实验性插件的安装与更新新近性,备份其配置;崩溃后自动关闭最近更新的嫌疑插件,使 profile 能再次启动,稳定后恢复仍可用的配置。

当前 npm 包版本为 0.12.1(MIT 许可),产物入口为 dist/index.js,并附带零依赖 CLI bin/rescue.mjs(包内命令名 recency-guard-rescue)。插件通过 Cordis patch 注入宿主,并在 Web 客户端侧挂载管理面板与工具接口。

核心机制

崩溃后的隔离策略

当某个插件导致 DSH 崩溃时,守护会在崩溃时刻记下「谁最可疑」。下一次启动时,在崩溃插件的代码被加载之前,将其挡在门外。

若仍反复崩溃,关闭范围会按新近性递增:第 1 次关闭最近更新的 1 个;仍崩溃则关闭最近更新的 2 个,以此类推。宿主稳定运行后,除首要嫌疑外,其余被自动关闭的配置会恢复启用。

恢复置信与两阶段提交

证据分两类处理:

  • 唯一嫌疑:视为确定性证据,可在第 1 轮观察后直接关闭。
  • 多嫌疑:视为概率性证据;同一头号嫌疑需连续 N 轮(默认 2,可配置项 confirmRounds)仍占首位才自动关闭,以降低偶发崩溃误伤。

关闭动作分两阶段:prepared(记录待执行)→ quarantined(已生效)。若崩溃打断执行,下次启动会按磁盘现状对账(confirmed / reverted),避免半成品状态。

异常退出检测(v0.12.1)

除原有哨兵文件路径外,v0.12.1 增加 classifyAbnormalExit,覆盖 SIGKILL、OOM、断电、原生段错误等无法执行 process.on('exit') 的场景。残留启动标记且 PID 已死时按概率性证据计数,达 confirmRounds 后复用既有 recover() 通道,避免「永远关 0 个」的崩溃循环。干净启动、热重载、并发实例等结局会归零或留痕,并与「稳定后是否恢复插件」判定解耦(仅 exitClass === 'clean' 时走自动恢复)。

配置备份与时间线

插件更新前,会把更新前的配置快照存为 <版本>@<时刻>.json,默认每插件保留 5 份(可配置)。便于对照「升级后行为变了,是配置变了还是缺陷」。

备份根目录可通过配置 backupRoot 或环境变量 RECENCY_GUARD_BACKUP_ROOT 指定;自定义根下仍按分区键分层,便于多项目隔离。工具侧支持 action=backups 查看最近备份与各插件时间线。

官方实验插件

匹配 @deepseek-ai/dsh-experimental-* 的组件只记录、不自动关闭(journal 中为 official-observe,并做整组状态的时间线备份)。崩溃归因时仍可查看当时装了哪些实验组件、版本与状态,但不自动关停官方实验场组件。

变更检测

订阅宿主 plugin-manager/changed 事件(500ms 防抖),经 GUI/工具路径的安装与更新会尽快进入时间线与嫌疑面。CLI 或手工编辑配置不触发该事件,仍由每次启动的同步 diff 兜底。

可观测性与面板

侧栏提供生命周期、事件流、嫌疑排名、备份策略、图谱关系等卡片;v0.10 起增加转移矩阵、控制带、数据流说明等可观测视图。面板动作带 revision 乐观并发校验,写操作(recover / restore / reenable / archive)执行前写入审计 journal。

宿主正常时可通过工具 recency_guard 查询状态、历史与备份;命令窗口输出对人话摘要做了展示接线(v0.12)。

安装与启用

已抓取资料中未给出固定的 dsh plugin add … 一行命令。请打开社区目录页,按该页公布的安装方式操作:

package.json 中声明的 DSH 兼容范围为多条预发布分支(例如 0.2.1-rc.5+、0.2.2-rc.1+ 等标记为 compatible)。若宿主升级后插件被兼容闸门移出 profile,需对齐 README 与 dsh.compatibility.dshReleases 后再挂载。

安装前建议阅读仓库源码与 MIT 许可证;本插件与宿主同属 admin-security 类能力,在当前 DSH 进程权限下运行,能读写 profile 内的插件状态与配置备份。

典型用法

宿主不可用时的只读逃生 CLI

宿主因崩溃无法启动时,可在 profile 目录外只读查看守护产物(零依赖、语义化退出码 2 表示仍有未恢复崩溃,便于脚本联动):

node bin/rescue.mjs status --profile-dir <dir>
node bin/rescue.mjs history --profile-dir <dir>
node bin/rescue.mjs decision --profile-dir <dir>
node bin/rescue.mjs archives --profile-dir <dir>

若已通过 npm 安装包,也可使用 bin 名:

recency-guard-rescue status --profile-dir <dir>

v0.10 起,status / history 在终端侧按 CJK 显示宽度对齐中英混排标签。

配置项(资料中明确出现)

在宿主设置中调整(具体字段以仓库文档为准):

项 作用
confirmRounds 多嫌疑时头号嫌疑连续几轮仍居首才自动关闭(默认 2)
backupRoot 时间线备份根目录
RECENCY_GUARD_BACKUP_ROOT 环境变量,作用同 backupRoot

面板上的备份策略卡片为只读投影;改配置仍走宿主设置页。

宿主内的工具与面板

守护注册宿主工具后,可查询事件时间线、事实摘要与备份列表;侧栏面板支持查看恢复判定(观察中 / 已行动)、嫌疑列表(默认展示 15 条,可展开其余)、手动恢复或重新启用等操作(动作需有效 revision,冲突时返回 409)。

适用场景与注意

适合:经常试用社区插件或 @deepseek-ai/dsh-experimental-*、需要在崩溃后先让 profile 能起来再慢慢对账的 DSH 用户;希望保留「谁在崩溃前刚被更新过」与配置时间线的团队环境。

注意:

  1. 自动关闭针对第三方/非官方实验嫌疑;官方实验插件仅观测,不承担自动隔离。
  2. 强杀、断电等异常退出依赖 v0.12.1 的残留标记逻辑,仍可能需多轮观察才行动,属有意设计的概率性证据。
  3. 插件不能替代对第三方源码的安全审计;安装前请自行检查仓库与权限边界。
  4. SkillHub 目录为社区索引站点,与 DeepSeek / 幻方无官方从属关系;版本与兼容信息以 GitHub 与 package.json 为准。

结尾

dsh-recency-guard 把「最近动过谁」变成可执行的启动前隔离策略,并用备份、journal 与离线 rescue.mjs 把崩溃恢复从盲试改成了可对账的流程。需要安装入口与分类说明时,见 SkillHub 目录页;需要机制细节与版本记录时,见 GitHub 仓库。

羽毛球分组比赛记分
小程序二维码

欢迎使用《羽毛球分组比赛记分》微信小程序

小夜