dsh-safe-shutdown
Verifieddsh-safe-shutdown · v0.5.2 · MIT · Web UI
Safe shutdown for DeepSeek Harness: preflight audit, rollback-area snapshots, crash recovery, and a settings page section.
Install
dsh plugin add dsh-safe-shutdown Confirm the layer applied with dsh --profile default --dump-config — see the install guide.
Source
Published to npm without a public repository. Inspect the package contents before installing.
Tags
Creators
Readme
dsh-safe-shutdown
DeepSeek Harness 的安全关闭插件:点关闭前先做一次只读预检,有问题能自动修的当场修, 修不了的直接交给你正在对话的 AI;退出前把关键状态快照到回滚区,被强杀/崩溃后下次启动能自动还原。
入口
- 标题栏按钮(原生窗口按钮左侧):长按可拖动,位置会被记住,双击复位
- 设置 → 安全关闭:检测强度、快照保留、异常文件体检
关闭流程
- 预检(
POST /check):只读检查 + 一次写入探针,不杀进程、不发模型请求 - 快照(
POST /close):关键状态原子写入回滚区~/.dsh/dsh-safe-rollback/backups/ - 刷盘等待(quiesce,可配置)
- 状态校验:解析不了就中止关闭并列出问题文件,绝不扩大损坏
- 优雅退出:
electron.app.quit()→taskkill(不带 /F)→ 超时才强杀 强杀前先把宿主状态落盘并记exit=graceful,避免下次误报"上次没干净退出"
出问题怎么办
点「解决 N 个问题」:
- 自动修复:半写临时文件、残留锁、备份明文密钥、日志补行/脱敏、坏快照、崩溃计数、上次强杀确认
- 交给你正在对话的 AI:剩下的项连同完整报告发到当前会话(
POST /ask-ai) - 兜底:投递失败就自动复制到剪贴板
只有"有对话正在运行"这一项时,直接显示「结束对话并关闭」,不会当成文件问题。
崩溃后能回来
- 启动时发现状态文件不可解析、且存在校验通过的快照 → 自动还原,坏文件另存
.broken-<时间> - 坏快照(空文件/半截 JSON)绝不使用
- 手动还原:
POST /rollback - 崩溃循环熔断:连续 3 次没干净退出 → 进入安全模式,暂停自动恢复
预检项(25 项)
基础:运行中的会话/后台任务、Key 配置与选择、代理端口、目录可写、Profile、临时文件、近期崩溃日志、
JSON 结构、.credentials.yaml 结构。
安全补充:上次退出是否干净、日志完整性、日志是否泄漏密钥、快照可回滚性、快照暴露面、 历史备份是否残留明文密钥、残留锁文件、磁盘空间、孤儿进程、系统崩溃转储、链接重定向、崩溃循环。
异常文件体检
GET /anomalies 只读扫描并返回「哪个文件 + 什么问题」:
keyring.json/keyring-state.json:解析失败、0 字节、带 BOM.credentials.yaml:缺少 version/records/refs、存在未知顶层键- 半写残留
*.tmp-<pid>、残留锁文件 - 最近 5 个快照中不可用的
- 历史备份仍含明文
sk-密钥 - 日志末尾不完整
启动 4 秒后静默扫描一次,有 FAIL 就弹窗;设置页也可手动扫描。
设置
| 项 | 默认 | 说明 |
|---|---|---|
safetyLevel |
strict |
strict / relaxed / verify-only |
quiesceMs |
1500 | 关闭前等待刷盘毫秒数 |
maxSnapshots |
10 | 快照保留份数 |
daysToKeepSnapshots |
7 | 快照保留天数(启动时自动清理更早的) |
cleanupOldSnapshots |
true | 启动时自动清理 |
autoRollbackOnCrash |
true | 崩溃后自动从快照恢复 |
forceCloseOnCorruptState |
false | 状态已坏时是否仍强行关闭 |
logMaskSecrets |
true | 日志中 sk- 密钥脱敏 |
sessionEndBudgetMs |
1500 | 注销/关机时允许的最长处理时间 |
配置保存在 ~/.dsh/dsh-safe-shutdown/config.json,非法值自动钳制。
接口
| 方法 | 路径 | 用途 |
|---|---|---|
| POST | /check |
预检 |
| POST | /close |
快照 + 刷盘 + 校验 + 关闭 |
| POST | /session-end |
注销/关机快速路径 |
| POST | /fix |
按检查项 id 执行修复 |
| POST | /ask-ai |
把问题发给你当前的 AI |
| POST | /rollback |
从快照还原 |
| GET | /anomalies |
异常文件体检 |
| GET/POST | /config |
读/写设置 |
| GET | /snapshots |
快照列表与可恢复标记 |
| POST | /snapshots/prune |
立即清理旧快照 |
| GET | /health |
自检(路由表、目录、配置) |
| POST | /diag |
客户端自检上报 |
| GET | /last |
上次预检报告 |
测试
node tests/test-feature-matrix.mjs # 全功能 × 崩溃事件(35 项)
node tests/test-sim-safety.mjs # 安全检测项(32 项)
node tests/test-safe-close.mjs # 关闭流程回归(包含 UI 接线)
node tests/test-sim-sandbox.mjs # 沙箱校验
node tests/test-support-dup-path.mjs # 路由注册严格模式回归
node tools/sim-check.mjs # 对真实 DSH 目录跑一次只读预检