dsh-checkpoint-dock
简体中文 | English
为 DeepSeek Harness 提供一个 IDE 风格的检查点 dock:agent 每一轮改过哪些文件、改了什么,都会出现在输入框上方,并且可以直接 保留、撤销、重做、回退。
DSH 自带的“已编辑 N 个文件”卡片负责告诉你这一轮产出了什么;这个插件负责的是改完之后还能反悔。
特色
- 按轮次、按文件记录:每个检查点只保存这一轮真正改过的文件,不复制对话,也不做整工作区快照。
- 完整的反悔链:保留 → 撤销 → 重做 → 回退到此,覆盖“接受这一轮”“退回这一轮之前”“恢复这一轮之后”“退回到很久以前的某一轮”。
- 改了什么,当场能看:dock 内直接展开 before/after diff;文件行仍可打开 DSH 的 changes-review 侧栏。
- 常驻但不碍事:默认常驻在输入框上方;关闭常驻后,只有出现未处理的文件改动才出现,处理完自动收起。
- 多会话不混:设置里的总览按 DSH 会话标题分组,能同时回看不同对话的检查点。
- 不依赖 git:不需要仓库、不需要 commit,也不会因为
git gc让旧检查点失效。 - 原生 DSH 风格:按钮、菜单、配色和设置页都使用 DSH 的主题变量,和内置界面保持一致。
和同类工具的区别
同类工具信息来自各自公开文档(截至 2026-11);这里只做机制对照,不评价实现质量。当前可对照的实现有
dsh-checkpoint-rewind(工作区/配置/会话快照)、dsh-snapshot-manager(整工作区快照与对话回退)、dsh-checkpoint-diff(基于 rewind 的只读 diff)。只写名称,不附链接。
| 能力 | 本插件 | dsh-checkpoint-rewind |
dsh-snapshot-manager |
dsh-checkpoint-diff |
|---|---|---|---|---|
| 记录范围 | 每轮改动的文件 | 工作区 + 配置 + 会话游标 | 整工作区 | 不产生快照,读取 rewind 快照 |
| 查看 diff | dock 内 before/after | 面板内树 diff | 面板内快照 diff | 任意两个检查点对比 |
| 回退能力 | 保留 / 撤销 / 重做 / 回退到此 | /rewind、选择性恢复 |
文件回退 + 对话 fork | 回滚(依赖 rewind) |
| 恢复对话 / 配置 | 不支持 | 支持 | 支持对话 | 不支持 |
| 依赖 git | 不依赖 | git 或复制模式 | 不依赖 | 继承 rewind |
| 适合 | 逐轮文件改动 | 整体三态回退 | 大范围快照回退 | 纯查看历史差异 |
快照类工具更擅长覆盖工作区、配置和会话状态;这个插件走的是另一条路:轻、快、只围绕文件改动。不复制整个工作区,不 fork 对话,不恢复配置,不依赖 git;代价是只覆盖文件内容,不覆盖会话状态。
安装
要求 DSH >= 0.2.2-rc.1。包已发布在 npm:dsh-checkpoint-dock。
从 npm:
dsh plugin --profile desktop add dsh-checkpoint-dock
从本地目录:
dsh plugin --profile desktop add D:\path\to\dsh-checkpoint-dock
也可以在插件页选择本地 bundle。装完刷新页面就能看到 dock。
插件由 Host 侧代码(index.mjs、lib/)和客户端代码(client/index.js)两半组成:首次安装或升级后重启一次 DSH,Host 侧才会加载新代码;只刷新页面只更新客户端那一半。升级后如果 dock 突然不见,多半是 Host 插件 import 失败,可以看 $DSH_HOME/unlag-reload.log(装了 dsh-unlag 的话)或 DSH 日志里 checkpoint-dock 的报错。
卸载:
dsh plugin --profile desktop remove dsh-checkpoint-dock
卸载不会删除已有检查点,数据仍在 $DSH_HOME/edit-checkpoints/,需要的话手动删目录。
使用
- 让 agent 在一轮里修改文件。
- 输入框上方会出现对应检查点,点开可以看到文件和 diff。
- 用 保留 / 撤销 / 重做 / 回退到此 处理这一轮的修改。
- 没有检查点时 dock 会自动隐藏;想回看历史,进 设置 → 检查点 → 总览。
常驻关闭后,只有出现尚未处理的文件改动时 dock 才会出现,处理完自动收起。设置按浏览器保存,同一台机器的不同 DSH 端口共用。
检查点按会话内顺序编号,设置总览按 DSH 会话标题分组;多个对话同时改文件时,也能分清每条检查点属于哪个会话。
保留、撤销与重做
- 撤销 N 恢复的是“第 N 轮第一次写这些文件之前”的磁盘内容,不是“点击保留那一刻”的内容。保留本身不改文件。
- 保留最新一条,会把之前所有未撤销的检查点一并标记为已保留。
- 某个检查点之后只要有已保留的检查点,更早的检查点就不能再单独撤销,即使两轮改的是不同文件;需要整体回退时用“回退到此”。
- 撤销 / 重做 / 回退会先校验每个文件的当前 hash;文件被其他工具或手工改过时会报冲突,不会强行覆盖。
- 重做只能从最早的已撤销检查点开始,依次向后;中间有更新的活跃检查点时会挡住重做。
- 回退会撤销目标之后的所有检查点,这些记录进入“已撤销”,可以再按顺序重做。
数据与隐私
- 检查点数据以明文保存在
$DSH_HOME/edit-checkpoints/,包含被修改文件的内容;不要提交到仓库,也不要同步到不可信位置。 - 默认跳过
.env*、私钥、.ssh/.aws/.gnupg等敏感路径;这是保守策略,不是加密,不能替代密钥管理。 - 只捕获 DSH 文件工具发起的写入。Shell、构建脚本、git 和外部编辑器直接写文件不会进入检查点。
- 单文件上限为 4 MiB;超过上限的文件只记录近似行数,不参与安全撤销。
- 记录文件损坏时会被改名为
*.corrupt-<时间戳>隔离,只影响那一条,同会话其他检查点照常可用。 - 在 DSH 里删除会话不会自动删除它的检查点。「设置 → 检查点 → 存储」会把这类记录列为「已删除的会话」,由你决定何时清理。
- 「配置」页可以开启「自动清理检查点」,并选择保留最近多少条(10–200 条)。开启后每轮结束时若超出上限,就自动清掉最早那些记录的内容;钉住的检查点不会被清理。「存储」页只做统计:总占用、记录数,以及按会话的占用饼图。
已知限制
- 只处理当前工作区内的文件;工作区外和临时文件不进入检查点。
- 只恢复文件字节和权限位,不恢复 mtime、目录、符号链接目标或
.git元数据。 - 撤销 / 回退是覆盖式恢复:不会删除本轮之外新建的文件。
- 跨会话保护只在撤销 / 重做 / 回退时检查,不是持续性的文件编辑锁。两个会话仍可以同时写同一个文件;如果对方写入发生在本轮封存之前,本轮 after 可能已经包含对方字节。要彻底避免,需要工作区级的写入串行化。
- 不提供整工作区快照、对话回退或配置回退;需要这些能力请使用专门的 checkpoint / snapshot 插件。
- v1 旧记录没有 after 内容,diff 和重做不可用;不做自动迁移。
- 已删除会话的检查点不会自动回收,需要在「设置 → 检查点 → 存储」手动清理;清理会跳过最近 1 小时内还在写入的记录,避免误删刚创建的会话。
No comments yet. Be the first to write one.