# 中断恢复 [README](../README.md) · [English](recovery.md) 从 0.4.0 开始,新回退及其 redo 会在修改文件前保存命名救援快照和独立恢复记录。DSH 退出、进程被终止、超时或部分文件还原失败后,重启插件即可从设置继续处理。 ## 使用入口 打开 **DSH 设置 → FileSnap → 中断恢复**,无需先打开原会话。 1. 选择未完成的回退或 redo,点击 **预览继续还原** 或 **预览回滚到操作前**。 2. 查看将还原和删除的文件。预览只保存安全快照,不修改工作区。 3. 确认后执行。完成时可打开对应对话;原有分支仍保留。 “继续”到达原先选择的目标;“回滚”回到这次操作开始前。回滚一旦开始,中断后只能继续回滚,避免混淆两种方向。文件已经全部到位但进程没来得及记录成功时,也需确认完成记录,不会再消费一次 redo。 有未完成操作时,插件会阻止该工作区的新 Agent 步骤、受监控编辑和回退/redo,并暂停插件的空间清理。先处理恢复,再继续任务。 ![中断恢复预览:查看待还原和删除的文件并确认(0.4.0)](../assets/screenshots/v0.4.0/09-interrupted-restore.png) ## 冲突与边界 恢复预览检查现有文件内容和权限。文件既不符合操作前状态,也不符合目标状态时,会列为冲突并禁用确认;确认时再次检查。先用编辑器或其他位置保留新增修改,再处理冲突。预览不会替你丢弃修改。 ![中断后文件再次修改时列出冲突并禁用确认(0.4.0)](../assets/screenshots/v0.4.0/10-recovery-conflict.png) - 如果 `.filesnapignore` 与当时确认的规则不同,恢复会拒绝执行。先将忽略规则恢复到操作开始时的文本,再预览;这也适用于原操作修改了忽略文件的情况。现有引擎的 `prepare` 只读取当前规则,插件不会用不完整清单确认恢复。 - 同一工作区只由一个 DSH 进程操作;恢复期间停止外部编辑器、脚本和其他助手写入。插件会检查本进程的运行中 Agent,但不是跨进程或文件系统事务锁。 - 恢复针对本机工作区,依赖救援快照及源会话的快照引用仍然存在。不要手动删除相关引擎数据。 - 这是进程中断恢复,不承诺整台机器断电时的跨文件原子性。插件记录使用临时文件、刷新和重命名;快照持久性仍受现有引擎和文件系统影响。 - 升级前已经发生的回退继续使用旧引擎 undo 路径,无法补出当时不存在的插件恢复记录。新能力适用于本版创建的回退及其 redo。 ## 保存了什么 恢复记录位于配置的 `dataDir`(未设置则为平台数据目录)下的 `dsh-filesnap/recovery-v1/`。它只保存恢复所需的目标、救援点、路径状态、分支对应关系和 redo 栈,不是聊天操作日志。恢复完成时,未完成记录与 redo 栈在同一次替换中提交;临时操作状态随之移除。 这些记录不进入 DSH 的会话文件。卸载插件后,对话仍由 DSH 原生读取;需要恢复插件的文件操作时再安装插件,并保留原数据目录。未知版本或损坏的恢复记录会被拒绝,不会猜测后继续写文件。 引擎保持 FileSnap 0.5.1+,复用 `prepare`、`restore` 及明确传入忽略规则的能力。`doctor` 仍只检测文件锁和清理临时残留,不承担这套宿主恢复流程。