DeepSeek Harness 插件

dsh-lifeboat

Out-of-process safe boot, failure isolation, and recovery UI for DeepSeek Harness profiles.(英文原文)

跳到安装方式

来源信息

GitHub 仓库
IoveCelestina/dsh-lifeboat
最近更新
2026年8月19日
分类
安全与权限
GitHub stars
0
载体类型
plugin
目录证据
上游声明已找到 dsh.bundle
证据路径
package.json#dsh.bundle
核对版本
0.1.0-rc.8
上游核对日期
2026-08-20

该证据由上游目录提供。本站没有安装、运行或安全审核这个插件。

安装

默认先复制一段 Prompt,让 Agent 读 GitHub 仓库和源码;需要自己装时再切到命令。

复制这段 Prompt,发给 DSH、Codex 或其他 Agent,让它先读 GitHub 仓库和源码。

请先不要安装或执行任何命令。阅读这个插件的 GitHub 仓库、README 和关键源码,然后用清楚、直接的方式回答以下问题,帮助我判断它是否适合我的需求:

1. 这个插件是什么,解决什么问题;
2. 适合哪些用户和典型使用场景;
3. 安装后如何使用,并给出一个最小使用示例;
4. 有哪些已知限制,以及隐私、安全、兼容性或维护风险;
5. 给出“推荐 / 有条件推荐 / 不推荐”的明确建议和理由。

请区分仓库明确说明、根据源码推断和未知信息。证据不足时请明确说明,不要猜测或照抄 README。

GitHub:https://github.com/IoveCelestina/dsh-lifeboat
插件名:dsh-lifeboat
作者:IoveCelestina

检查来源文件

安装前先看这个插件目录里的 README 和其他文件。

文件资源管理器4 个文件
README.zh.md来源说明 · 只读预览
README 语言

DSH Lifeboat

English | 简体中文

DSH Lifeboat 是 DeepSeek Harness Profile 的进程外救援控制台。即使某个插件导致 Harness 无法启动,它仍能独立打开。所有探测都使用临时 DSH_HOME;只有用户明确确认恢复后,才会修改原 Profile 的 manifest。

![DSH Lifeboat 救援控制台](screenshot.png)

已实现

  • 仅监听 127.0.0.1 的独立 Web 界面:展示探测进度、证据、已验证恢复方案选择、报告下载和一键撤销。
  • 无界面的 CLI 诊断,输出相同的 dsh-lifeboat/v1 JSON 报告。
  • 默认通过 dsh --profile <name> --dump-config 做确定性的配置探测。
  • 可选启动探测:进程必须完整存活超过配置的健康窗口;在此之前退出(包括退出码 0)都会判定失败。
  • 每次诊断只采集一份有界配置快照,再为每次探测克隆全新的临时 Home;启动探测默认重复确认两次,证据不一致时不开放恢复。
  • 对完整 Profile 执行“先找上界”的有界删除搜索:delta debugging 先找到较小的已验证方案,再用浅层精确枚举证明是否存在更小方案。
  • 分别检查 Profile 自身和 Harness Home 的 cordis.patch.yml
  • 恢复前重新校验完整探测输入指纹和 manifest SHA-256,再创建时间戳备份并原子写入;同一服务会话内可撤销。
  • 有界单任务队列、可控关停、GET /api/health、页面刷新续接、服务重启后找回报告与撤销凭据,以及原子持久化诊断报告。
  • Harness 内部只加载一个健康标记插件;救援服务本身始终在 Harness 进程外。

从当前目录运行

要求 Node.js ^22.19.0 || >=24.0.0,没有运行时依赖。

node ./src/cli.js serve

打开终端输出的 http://127.0.0.1:<端口>/。默认端口是 4317,可用 --port 0 自动选择空闲端口。

终态报告默认保存到 $DSH_HOME/lifeboat/reports,默认保留最新 500 份;可用 --max-reports N 调整。只有外部留存策略负责清理时才建议用 --max-reports 0 关闭自动清理。systemd 与 Windows 任务计划程序的托管方法见[服务运行说明](docs/service.md)。

只使用 CLI:

node ./src/cli.js diagnose --profile web
node ./src/cli.js diagnose --profile web --json
node ./src/cli.js diagnose --profile web --max-exact-removals 2 --max-recovery-probes 256

从 Harness 源码目录运行 dsh 时,不拼接 Shell 字符串,而是分别传入可执行文件和参数:

node ./src/cli.js diagnose \
  --command pnpm \
  --command-arg --dir \
  --command-arg /path/to/deepseek-harness \
  --command-arg dsh \
  --profile web

启动探测会真正执行已安装的插件代码,因此还需要明确确认:

node ./src/cli.js diagnose \
  --profile web \
  --mode boot \
  --boot-confirmations 2 \
  --allow-runtime-code-execution

作为 Harness Bundle 安装

通过 Harness 安装固定版本的 v0.1.1 Release:

dsh plugin --profile web add https://github.com/IoveCelestina/dsh-lifeboat/releases/download/v0.1.1/dsh-lifeboat-0.1.1.tgz

如需安装本地检出,则在包含本目录的父目录执行:

dsh plugin --profile web add ./dsh-lifeboat

安装后,cordis.patch.yml 会把健康标记加入 Profile。救援界面不会挂在 Harness Web 内部,否则启动崩溃时它也无法使用。可从 Profile 的包环境启动:

pnpm --dir "$DSH_HOME/profiles/web" exec dsh-lifeboat serve

Release 包通过 GitHub Release 资产分发,不发布到 npm Registry。在将它用于真实故障前,应当用当前 Harness CLI 再验证一次上面的 tarball 安装链路。

自动隔离过程

1. 一次性读取 $DSH_HOME/profiles/<name>/package.json、两层用户 Patch、有限的安全 Profile 资源和已安装包解析身份,形成诊断快照。 2. 固定安装自带 Bundle;同时出现在 Profile dependencies 和活动 Bundle 列表中的包作为第三方候选。 3. 每次探测尝试都在系统临时目录创建新的 dsh-lifeboat-probe-* Home,并从同一份配置快照克隆。 4. 跳过凭据文件和符号链接;包链接固定使用快照时解析出的绝对目标,避免诊断中途切换链接目标,同时保持 pnpm 包可解析。 5. 先探测完整组合,再区分 Bundle 故障与用户 Patch 故障。 6. Bundle 故障以“删除哪些 Bundle 后,完整的其余 Profile 能否通过”为判据。受限的 delta debugging 先缩减“删除全部候选 Bundle”这个已知可恢复集合;完整结束时得到 1-minimal 方案,即任意恢复其中一个 Bundle 都会失去当前恢复效果。 7. 随后只枚举该上界以下、且不超过配置精确深度的删除数。若所有更小删除数都已排除,上界就提升为全局最少的 exact;否则保留明确非全局的 1-minimal 标记。剩余的一小段独立预算用于查找同删除数备选方案。 8. 每个候选方案都会在另一个全新 Home 中,带上全部未删除 Bundle 和原 Patch 独立复验。复验失败、启动证据不稳定、搜索预算耗尽或实时输入已不再匹配快照时,都不生成自动恢复。 9. 启动探测的重复结果不一致时,结论为 unstable-probe。 10. 默认先断开 Lifeboat 创建的包链接,再删除临时目录;选择“保留取证目录”时不删除。

搜索不会无界遍历 2^n 个组合。初始上界最多使用总逻辑探测预算的一半;证明阶段只在上界以下检查至多 C(n,1) + ... + C(n,k) 个候选。同删除数备选方案在同一总预算内另有一个子预算(通常 4–32 次,总预算更小时随之缩小)和数量上限。默认精确深度仍是 2;配置探测总预算是 256,启动探测是 64。可在界面的高级参数或 --max-exact-removals / --max-recovery-probes 中调整主要限制。

这些是恢复方案,不是责任判定。若 A 和 B 只在同时激活时失败,Lifeboat 可同时给出“停用 A”和“停用 B”两个等价方案;若 A 和 B 各自都会导致失败,经验证的方案就必须同时停用两者。报告会区分 exactone-minimal,并记录是否已枚举全部同删除数的备选方案。

恢复行为

只有报告包含通过独立复验的 Bundle 删除方案时,界面才会开放“应用恢复”:

1. 用户在多个经验证的等价方案中选择一个。 2. 服务端从自己的诊断报告解析 planId,拒绝客户端自行拼出的 Bundle 列表。 3. 获取 Profile 级跨进程写锁,拒绝重叠的恢复操作。 4. 重新读取 manifest;若诊断后的文件 Hash 已变化则拒绝写入。 5. 拒绝链接形式的 Profile、manifest、锁或备份目录,再将原文件完整写入 .lifeboat-backups/,文件名记录完整 SHA-256。 6. 校验备份后原子替换 manifest,只从 dsh.profile.bundles 移除所选方案的 Bundle,并保留已安装依赖。 7. 持久化恢复凭据,使一键撤销在本地服务重启后仍可用;撤销前同时校验备份 Hash 和 manifest 结构,并把恢复后的 manifest 留作额外回退保护。

之后执行 dsh plugin 包管理命令时,Harness 可能根据已安装依赖重新激活 Bundle。恢复启动后仍应更新或移除真正有问题的依赖。

安全边界

  • 本地服务拒绝非回环 Host,使用严格 CSP,并要求随机的进程级写操作令牌。
  • 配置探测不会挂载插件行。启动探测会以当前系统用户权限执行插件代码,它不是操作系统级插件沙箱。
  • 子进程环境会移除名称含 KEYSECRETTOKENPASSWORDCREDENTIALCOOKIEAUTH 的变量。
  • 启动存活窗口只是健康启发式,不代表应用功能已经全部验证。
  • 启动健康窗口必须比探测总超时至少早 250 毫秒结束;参数冲突时直接拒绝,不再静默缩短窗口。
  • POSIX 平台把探针放入独立进程组,清理时终止整个组,包括组长退出后仍留在该组的子进程;Windows 在探针主进程仍存活时使用 taskkill /T
  • 包解析指纹覆盖快照时的真实链接目标和包 manifest;已安装包源码目录仍通过链接使用,而非完整复制。同一路径内只改源码、不改 package.json 的情况不属于不可变配置快照,诊断期间应避免此类修改。
  • 当前版本面向采用 dsh.profile.bundles 的 Harness 预发布版本,尚未覆盖所有历史版本。

与 dsh-guard 的关系

Lifeboat 是独立实现,不是其他插件的分叉。当前目录中最接近的 dsh-guard 以滚动快照和进程内回退为主;它的 README 也明确说明进程内插件无法单独救援启动崩溃,需要外部启动器。Lifeboat 聚焦独立诊断服务、全新 Home 复现、已验证的有界删除方案与证据门控恢复。详见[非排名式对照](docs/community-overlap.md)。

验证

npm test
npm run check
npm pack --dry-run --ignore-scripts

项目只使用 Node.js 内置模块,避免救援工具自己再引入一套可能损坏的依赖图。