PinBoDHua/dsh-time-machine ↗★ 0

dsh-time-machine

时光机 —— 为 DeepSeek Harness 的每一次对话自动留下工作区还原点:影子 Git 持久快照、逐轮记录、影响预览、覆盖/精确回滚,回滚前自动再存安全点,失败自动回滚。不碰用户仓库、不删除忽略文件,让 Agent 的改动从「事后检查」变成「随时可退」。 适合频繁让Agent修改本地代码,需要随时预览、覆盖或精确回滚修改的用户。

Package
dsh-time-machine
Compatibility
Unverified
Version
0.1.0
License
MIT
Last updated
Oct 25, 2026

Other repositories with this package name

Install

$npx -p @deepseek-ai/dsh dsh plugin --profile web add github:PinBoDHua/dsh-time-machine

使用

会话标题栏面板

在任意顶层会话的标题栏右侧会出现「时光机」按钮:

  • 时间线:按时间倒序列出还原点,标出自动/手动/安全点/恢复后、轮次、文件数与行数;其他会话的还原点会带标记。
  • 恢复:点某一行的「恢复」,选择:
    • 覆盖文件:写回文件,不删除新增文件;
    • 精确还原:写回文件并删除新增文件(需要勾选确认)。 预览会展示写入/删除数量、行数、示例文件与警告;确认后执行。
  • 新建还原点:随时手动留点。
  • 设置:自动记录开关、轮前/轮后记录、保留数量与天数、快照超时、额外排除。
  • 会话运行中恢复会被锁定(避免与 Agent 的写入竞争);自动记录继续。

面板会显示最近 50 个还原点;更多可用 CLI 查看。

/rewind 命令

命令直接作用于当前会话,不产生模型消息:

/rewind                        列出最近 10 个还原点
/rewind snapshot [备注]        立即创建还原点
/rewind restore            覆盖恢复(不删除新增文件)
/rewind restore  --exact   精确恢复(同时删除新增文件)
/rewind recover [planId]       查看/执行未完成恢复的回滚

恢复在会话空闲时执行;恢复前的安全点、恢复后的快照 id 会显示在结果里。命令输出只给用户看,不会自动注入模型上下文;继续工作前请让 Agent 重新读取已回滚的文件。

time_machine 工具

模型可调用:

{"action": "list"}
{"action": "snapshot", "label": "before refactor"}
{"action": "restore", "checkpointId": "20261025-142105-c3d4"}
  • 工具描述要求模型只在用户明确要求回滚时调用 restore,不得自行决定;
  • 工具恢复固定为「覆盖文件」模式,不删除新增文件;精确恢复只对人类入口开放;
  • 工具恢复允许发生在它自己的轮次里(模型正等待工具结果,不会与其他写入重叠);有其他会话在同一工作区运行时仍会拒绝;
  • 每次恢复前都会创建安全点。

CLI

CLI 与 DSH 使用同一个数据目录:

node lib/bin.js status
node lib/bin.js list --workspace D:/Projects/some-project
node lib/bin.js snapshot --workspace D:/Projects/some-project --label "before refactor"
node lib/bin.js restore --workspace D:/Projects/some-project --checkpoint 20261025-142105-c3d4 --mode overwrite
node lib/bin.js restore --workspace D:/Projects/some-project --checkpoint 20261025-142105-c3d4 --mode exact --yes
node lib/bin.js recover
node lib/bin.js gc --workspace D:/Projects/some-project
node lib/bin.js doctor
  • restore 默认只打印计划;加 --yes 才执行。
  • recover 无参数时列出未完成恢复日志;--workspace --plan --yes 执行回滚。
  • doctor 检查工作区记录、缺失快照对象、恢复日志、对象体积与陈旧临时索引。
  • 数据目录覆盖:DSH_TIME_MACHINE_DATA_DIR;关闭自动记录:DSH_TIME_MACHINE_DISABLE=1。

HTTP 接口

面板使用的同源接口(只接受回环请求;写操作带进程内控制密钥):

方法路径作用
GET/plugins/dsh-time-machine/status?sessionId=工作区、还原点、忙碌状态、配置、控制密钥
POST/plugins/dsh-time-machine/checkpoint手动还原点
POST/plugins/dsh-time-machine/plan计算恢复影响,返回短期计划 id
POST/plugins/dsh-time-machine/restore执行计划(需要确认短语 RESTORE)
POST/plugins/dsh-time-machine/config修改全局配置

配置

配置保存在 $DSH_HOME/.dsh-time-machine/settings.json(或 DSH_TIME_MACHINE_DATA_DIR 下的同名文件),面板设置页可改:

字段默认说明
autotrue总开关;关闭后不自动记录,手动/恢复仍可用
beforeTurntrue轮前快照
afterTurntrue轮后快照
maxCheckpoints120每个工作区保留数量(最少 5,最多 1000)
maxAgeDays14超过天数的旧还原点进入清理
timeoutMs30000单条快照 Git 命令超时
restoreTimeoutMs120000恢复/回滚命令超时
maxRestoreFileBytes67108864单文件恢复上限;超过则拒绝该次计划
autoGctrue清理旧引用后偶尔运行 git gc 回收对象
excludes.git/, node_modules/, .dsh-time-machine/额外 gitignore 规则

环境变量:

  • DSH_TIME_MACHINE_DATA_DIR:覆盖数据目录(CLI 与宿主都读);
  • DSH_TIME_MACHINE_DISABLE:非空时关闭自动记录(手动/恢复仍可用)。