dsh-tui-checkpoints:dsh-TUI 工作区影子快照

在智能体开发中,文件状态的回滚往往比对话历史的回溯更棘手。当代码生成进入深水区,开发者需要一种机制,能够在对话的每个回合边界保存当前工作区的状态,以便随时回滚文件改动。dsh-tui-checkpoints 旨在解决这一痛点,通过影子仓库机制,为 dsh-TUI 补全文件级别的“真回溯”能力。

下面介绍 dsh-tui-checkpoints 插件。

定位与功能

dsh-tui-checkpoints 是一个用于 dsh-TUI 的社区插件。它不会触碰项目原本的 .git 仓库,而是为每个工作区创建一个独立的影子仓库。

核心功能包括:
* 回合快照:在每个 turn 边界自动保存工作区状态。
* 影子仓库:在 ~/.dsh/checkpoints/repos/ 下维护独立的 git 仓库。
* 文件回溯:通过 /checkpoints 面板浏览和恢复文件状态。
* 安全机制:恢复操作前自动创建 safety-* 分支,确保可回滚。
* 撤销能力:支持对文件级别的修改进行回滚。

安装与启用

该插件目前处于 Spike(技术验证)阶段,未发布到 npm。需要从源码打包安装。

git clone https://github.com/FUSU123fusu/dsh-tui-checkpoints.git
cd dsh-tui-checkpoints
npm pack
dsh plugin --profile dsh-tui add file:dsh-tui-checkpoints-0.1.0.tgz

安装后,重启 dsh-TUI 即可生效。

功能与用法

1. 打开检查点面板

在终端中输入命令:

/checkpoints

2. 浏览快照

面板列表显示快照的元数据:
* 符号:● 表示轮后快照,◦ 表示轮前快照。
* 信息:Turn 编号、Commit 短 Hash、时间戳。

3. 查看差异

选中列表中的某一行,下方会实时显示该快照与当前工作区的差异统计。

4. 恢复文件状态

按下 r 键进行恢复。系统会要求在 3 秒内按两次确认。
* 恢复逻辑为 reset --hard + clean,即还原文件内容并删除新增文件。
* 恢复前,当前状态会先提交到 safety-* 分支,因此恢复本身也是可逆的。

5. 对话回溯

文件状态恢复后,需配合 dsh-TUI 内置的双击 Esc /rewind 功能,将对话回溯到同一轮,以保持文件与对话的一致性。

原理与细节

影子仓库机制

插件在 ~/.dsh/checkpoints/repos/<工作区hash>.git 创建影子仓库。项目目录本身被当作该影子仓库的 work tree。这意味着:
* 项目的 .git 目录完全不受影响。
* 即使项目目录不是 git 仓库,插件也能正常工作。

快照时机

插件监听 session/event,在顶层会话的 turn/start(轮前)和 turn/end(轮后)各执行一次快照。快照操作是串行排队执行的,如果文件无变化,会复用 HEAD 提交,避免生成大量空提交。

忽略规则

默认排除 .git、node_modules 等目录,并读取项目的 .gitignore,将规则写入影子仓库的 info/exclude。

性能表现

  • 首次全量快照:约 5.8s。
  • 无变化快照:约 0.7s(使用 add -A + diff --cached)。

嵌套仓库处理

如果工作区包含嵌套的 git 仓库(子模块或 worktree),插件会将其记录为 Gitlink,不展开其内部漂移。

注意事项

  1. Spike 阶段:这是技术验证版本,尚未发布到 npm,代码可能存在不稳定性。
  2. 文件覆盖风险:恢复操作是工作区级的。如果当前有未保存的编辑内容,恢复时会直接覆盖,尽管这些内容已被安全提交到 safety-* 分支。
  3. 对话与文件分离:对话回溯由 dsh-TUI 内置功能处理,本插件仅负责文件层面的状态管理。

结语

dsh-tui-checkpoints 为 dsh-TUI 提供了文件级别的回溯能力,解决了智能体开发中“改代码难回滚”的痛点。虽然目前是 Spike 版本,但其影子仓库的设计思路和双段式恢复机制(文件 + 对话)为未来的核心 PR 提供了验证基础。

羽毛球分组比赛记分
小程序二维码

欢迎使用《羽毛球分组比赛记分》微信小程序

小夜