# 快照清理

插件会在每次修改文件前保存一份备份，方便你把代码回退到之前的状态。这些备份叫**快照**，按消息分组、按会话存放。

`/snapshot-auto-cleanup` 帮你管理这些快照——既可以回收旧会话占用的磁盘，也可以清空**当前**会话、让它从"现在"重新开始记录回退历史。

## 它能做什么

**自动清理**（默认关闭）：插件会记住哪些会话你已不再使用，并定期移除它们的快照以节省磁盘。它**绝不**触碰你当前活跃的会话，也**绝不**触碰你的对话。

**手动**：即使自动清理是关闭的，你也可以自己执行清理：

- `/snapshot-auto-cleanup run [--apply]` — 先预演，再真正移除你已有一阵子没用的会话的快照。
- `/snapshot-auto-cleanup run --current [--apply]` — 先预演，再真正清空**当前**会话的快照。这会让它从"现在"重新开始记录回退历史（你的对话不受影响）。若此刻有正在进行中的回合，插件会先暂停它，再清空。

## 命令

```
/snapshot-auto-cleanup                       查看当前设置
/snapshot-auto-cleanup on|off                开启/关闭自动清理
/snapshot-auto-cleanup max-age <天数>        会话失活多少天后移除其快照
/snapshot-auto-cleanup run                   预演：看自动清理会移除什么
/snapshot-auto-cleanup run --apply           真正移除这些快照
/snapshot-auto-cleanup run --current         预演：看清空本会话快照会怎样
/snapshot-auto-cleanup run --current --apply 真正清空本会话快照
```

`run` 一开始总是预演；加 `--apply` 才真正执行。`run` 无论自动清理是否开启都能用。

## 设置

自动清理开关与失活天数保存在 **dsh-settings 配置文档**。可在 **设置→插件→插件配置→快照清理** 面板查看与修改（自动清理开关、失活天数），也可用 `/snapshot-auto-cleanup` 命令查看和设置：

<img src="../assets/screenshots/cleanup-setting.png" alt="快照清理设置：自动清理与失活天数" width="600">

- `enabled` — 是否运行自动清理（默认 `false`）。
- `maxAgeDays` — 会话失活多少天后移除其快照（默认 `30`）。只接受正整数，因此一个损坏的设置永远不可能"删掉一切"。

## 自动清理何时运行

开启后，自动清理在后台运行，**一天最多一次**——且距上次清理已满 24 小时才会执行。这个时钟保存在 `<dsh home>/snapshot-cleanup-last-sweep.json`，所以重启宿主也不会让它提前运行。想立刻清理而不等待，用 `/snapshot-auto-cleanup run`。

## 安全

- 只会移除回退用的**快照**：一个会话的快照目录里只有写前文件备份及其附属记录（暂存副本、救援副本、还原日志），清理也只动这些。你的对话绝不会被动到，插件也绝不改写或删除你的会话历史。
- 自动清理**永不**移除你**当前活跃**会话的快照——只清理已失活超过阈值的会话。
- `run --current` 会清空当前会话的快照。这对该会话的文件回退历史是**不可逆**的：你无法回退到清空之前的代码状态，但你的对话保持完整，会话会从"现在"开始重新记录快照。

## 已知限制

插件每个会话只保留**最近 100 条消息**的快照。若你在一个很长的会话里多次回退或压缩，这 100 个名额常会被"已经无法再回退到"的消息占满，你可能无法回退到想要的位置。（Claude Code 也是同样行为。）想恢复到一个干净状态，运行 `/snapshot-auto-cleanup run --current --apply` 清空当前会话、重新开始。
