DSH Time Machine(时光机)
让 DSH 的会话与工作区一起回到检查点,并从旧节点继续探索。
面向 DeepSeek Harness 的非官方社区插件:保存文件和会话边界,预览后恢复工作区,并保留每条尝试过的分支。
English · v0.2.0 发行说明 · 真实任务报告 · 功能对照 · 测试记录 · 问题反馈
效果预览

这是实际运行的 Web 界面截图,其中的认证、Redis 和 JWT 内容是为演示创建的样例数据。它展示了失败节点仍在时间线中、恢复前的救援检查点,以及从旧节点继续的 experiment/jwt 分支。界面默认中文,可切换英文。
安装
先安装 DeepSeek Harness 和 pnpm;需要 Node.js ^22.19.0 || >=24.0.0。当前支持 DSH >=0.1.5-rc.2 <0.2.0 的 web profile。
dsh plugin --profile web add github:GeoSyntax/dsh-plugin-time-machine#v0.2.0
插件的 cordis.patch.yml 会作为 Bundle 随安装加入 profile。安装或更新后重启 DSH;无需再手动复制插件配置。当前通过 GitHub 安装,尚未发布 npm 包。DSH 的 Bundle 安装说明解释了 profile 的加载方式。
固定包安装(可选)
如果需要离线审查或可复现安装,可以从 v0.2.0 Release 下载 dsh-plugin-time-machine-0.2.0.tgz,并先核对 SHA256SUMS.txt:
sha256sum -c SHA256SUMS.txt
npm install ./dsh-plugin-time-machine-0.2.0.tgz
该 tarball 是 npm 格式的固定发布产物,但当前尚未发布到 npm registry;DSH Bundle 用户仍应优先使用上面的 dsh plugin ...#v0.2.0 命令。
快速开始
在希望 Agent 修改的项目目录启动:
dsh web
打开 DSH Web,完成一轮会修改文件的对话。插件默认在轮次边界创建检查点。随后在会话里输入:
/tm-list
/tm-tree
/tm-list 显示检查点 ID,/tm-tree 显示分支关系。另一个页面打开 http://127.0.0.1:3088,即可查看中文仪表盘、文件变化和恢复预览。选择一个检查点,先预览影响,再决定恢复或从该节点创建分支。DSH Web 自身默认运行在 http://127.0.0.1:3080;两者是不同页面。
能做什么
- 恢复工作区: 预览目标文件、冲突及外部副作用,确认后回到旧检查点;普通新增文件会随完整恢复清理,忽略文件默认保留。
- 保留探索路径: 检查点组成持久化 DAG;从旧节点 fork 时保留原来的失败分支和错误证据。
- 对齐会话: 回滚时请求 DSH 从对应消息边界创建会话分支,同时恢复文件;原会话历史继续保留。
- 记录失败线索: 将失败工具的摘要用于新分支的反思提示,帮助 Agent 避开已知错误。
- 适配非 Git 目录: 没有 Git 仓库时使用 manifest 和内容哈希保存快照。
完整操作与同类插件的逐项比较见功能对照。
使用边界
- 默认
safe模式遇到无法验证的用户修改、暂存区变化或受保护的忽略文件时会拒绝覆盖;恢复前请查看 preview。 - 当前 DSH 宿主的 fork 共用工作区,不提供独立 worktree 或容器。并行会话修改同一目录时,应先确认工作区状态。
- 文件回滚不能撤销数据库事务、网络请求或云资源变更;插件能记录并提示这类副作用,严格门禁与补偿适配器需要按项目配置。
- 完整恢复和选择性文件恢复是不同操作;需要只恢复某些文件时,应使用选择性恢复功能。
更深入的安全策略、可选加密和配置项见 设计文档。
验证
仓库的 CI 覆盖 Node.js 22/24 的 Windows、macOS、Ubuntu,DSH Bundle 加载、客户端 companion、依赖审计及自动化测试。测试计划还记录了本地 DSH 源码宿主与 Web 流程的验证方法。截图展示的是界面和样例时间线;它本身不构成外部副作用可回滚的证明。
社区与反馈
这是一个非官方社区插件。欢迎在 DSH 插件讨论 #7191 查看演示、反馈兼容性,或在 GitHub Issues 提交最小复现。想独立验证 v0.2.0,可参加 测试招募 Issue #25。安全问题请看 SECURITY.md,贡献方式见 CONTRIBUTING.md;完整的用户招募、社区目录提交和推广检查表见 社区推广与反馈手册。
许可证
MIT
No comments yet. Be the first to write one.