DeepSeek Harness Hub
← 返回列表

代码时光机wyq09/dsh-rewind

DeepSeek Harnessspec-screened在 GitHub 查看 ↗
未验证

记录每回合代码快照,预览差异后一键回退

尚未跑自动兼容性验证,可查看页面内的依赖与入口分析。 · 最近上游提交 2026/8/23 · 已提供中文文档

一个给 DeepSeek Harness(DSH) 用的「检查点 / 回退」插件

综合分
27.5
GitHub 分
27.5
用户评分
★ Stars
0
周下载量
安装插件(需先安装 dsh CLI 引擎:npm install -g @deepseek-ai/dsh)
dsh plugin --profile web add wyq09/dsh-rewind
该插件未发布到 npm,走 GitHub 源安装(pnpm 若拦截 prepare 脚本,按其提示在 pnpm-workspace.yaml 的 allowBuilds 中放行后重跑)
数据截至 2026/9/16(元数据每日更新 · 实装验证按队列轮转,单条结论的验证时间见上方)
用户评分
还没有人投票,来当第一个
订阅周报,不错过优质插件更新
每周一封 · 高评分插件 + 新用户活动

README

dsh-rewind

dsh-rewind 是 DeepSeek Harness(DSH)Web Profile 的代码时光机。它记录每个任务回合前后的工作区状态,让你预览差异后回到任意已记录步骤,并支持撤销、重做。

先理解它为什么能回退

回退成立的前提不是“记住 AI 说了什么”,而是同时保存代码状态:

任务开始前 S0 ── DSH 第 1 回合 ──> S1 ── DSH 第 2 回合 ──> S2
start                    turn-1                    turn-2

如果只在第 1 回合结束后保存 S1,唯一快照就等于当前代码,点击还原自然没有任何变化。v1.1.0 修复了这个根本问题:

1. 选中工作区或任务开始时,先保存可见的 S0。
2. 每个新回合开始时检查一次,捕获回合前的外部改动。
3. agent/turn-stopping 时保存回合后的状态;文件树没变化就去重跳过。
4. 还原前先保存 before-restore 安全快照,再把工作区切换到目标文件树。
5. undo 回安全快照,redo 再回目标快照。

底层是工作区内的 .dsh-rewind/ 影子 Git 仓库。它不提交到项目自己的分支,也不修改项目自己的 Git HEAD、暂存区或提交历史。

功能

- 第一次任务前自动创建基线,不再出现“有快照但还原没效果”
- 每个有文件变化的 DSH 回合后自动创建检查点
- 时间线、diff 预览、二次确认还原
- 多层撤销与重做
- rewind 模型工具,DSH 可以按自然语言调用
- 非 Git 项目也可用
- 同一工作区的多个 DSH 会话使用独立时间线
- 每个会话最多保留 50 个普通检查点
- 元数据损坏时可从影子 Git ref 和提交信息恢复

环境要求

- DeepSeek Harness dsh,使用 web profile
- Node.js 18 或更高版本
- git
- pnpm(dsh plugin 会调用它管理 Profile)
- macOS 或 Linux;当前实现还依赖 mkdir、tee、cat、rm

先检查:

dsh --version
node --version
git --version
pnpm --version

安装

方式一:安装当前本地源码(开发和验收推荐)

进入本仓库根目录执行:

cd /absolute/path/to/dsh-rewind
dsh plugin --profile web add .

DSH 会把该依赖加入 ~/.dsh/profiles/web/package.json,并根据本包的 dsh.bundle.patch 自动把 dsh-rewind 加进 dsh.profile.bundles。不需要手改 cordis.yml。

源码继续修改后,重新安装并重启:

dsh plugin --profile web add . --force

方式二:从 GitHub 安装

仓库版本发布到远端后执行:

dsh plugin --profile web add 'github:wyq09/dsh-rewind#v1.1.1'

验证组合配置

dsh --profile web --dump-config | grep -A2 -B2 dsh-rewind

应看到类似:

- id: dsh-rewind
name: dsh-rewind

启动

先停止旧的 dsh web 进程,再启动:

dsh web

不想自动打开浏览器:

dsh web --no-open

终端应出现(版本号不低于 v1.1.1):

[dsh-rewind] host loaded v1.1.1

若服务地址是 http://127.0.0.1:3000,可直接自检后端:

curl http://127.0.0.1:3000/dsh-rewind/health

应返回 "ok":true 和 "version":"1.1.1"。最后在浏览器强制刷新一次(macOS:Cmd+Shift+R;Windows/Linux:Ctrl+F5)。

第一次使用:完整流程

1. 打开 DSH Web,先选择一个工作区。
2. 右下角应看到固定定位的 ⏪ N 胶囊。点击展开。
3. 面板会初始化任务前基线,列表出现 T0 · start。
4. 给 DSH 一个会改文件的任务,例如“在 README 末尾增加一行测试文字”。
5. 回合结束后列表出现新的 T1 检查点。
6. 点击 T0 · start,下方 diff 展示从当前状态还原到 S0 会发生什么:红色是还原时删除,绿色是还原时加回。
7. 点击“还原选中项”,再点击红色“确认还原”。
8. 如果反悔,点击“撤销”;需要再次应用还原则点“重做”。

面板按钮:

| 按钮 | 作用 |
| --- | --- |
| 📸 立即快照 | 立即保存当前工作区;没有变化时自动跳过 |
| ↺ 还原选中项 | 二次确认后还原目标检查点 |
| ↩ 撤销 | 撤销最近一次还原 |
| ↪ 重做 | 重做最近被撤销的还原 |
| ⟳ | 立即刷新状态 |
| − / × | 收起面板,保留右下角胶囊 |

让 DSH 自己操作

插件注册了模型工具 rewind。为了稳定触发,明确说“使用 rewind 工具”:

使用 rewind 工具列出当前检查点。
使用 rewind 工具预览还原到 start-0-... 会改哪些文件。
使用 rewind 工具把工作区还原到 start-0-...。
使用 rewind 工具撤销刚才的还原。
使用 rewind 工具立即创建一个检查点。

工具动作对应关系:

| action | 用途 | 是否需要 id |
| --- | --- | --- |
| list | 列出检查点 | 否 |
| preview | 预览还原补丁 | 是 |
| restore | 安全快照后还原 | 是 |
| undo | 撤销最近一次还原 | 否 |
| redo | 重做最近一次还原 | 否 |
| checkpoint | 手动快照 | 否 |

如何确认自动触发正常

一次正常回合会满足三个可观察条件:
1. 任务前已有 start 或 turn-start。
2. DSH 修改文件并结束回合后,终端出现 turn checkpoint ...。
3. 面板的检查点数量增加;若没增加,终端无报错且文件树未变化,说明被 tree-dedup 正常去重。

查看本地数据:

ls -la .dsh-rewind
git --git-dir=.dsh-rewind/git for-each-ref refs/dsh-rewind/

常见问题

看不到右下角胶囊

依次检查:

dsh --profile web --dump-config | grep dsh-rewind
curl http://127.0.0.1:3000/dsh-rewind/health

然后确认重启过 DSH 并强制刷新浏览器。v1.0.0 在面板未展开时没有挂载胶囊 CSS,胶囊可能显示成页面底部的一小段普通文本;v1.1.0 已修复。

胶囊一直是 0

先选择工作区。未选择工作区时会话没有 cwd,插件不知道该快照哪个目录。展开面板后若显示 no-session,新建或打开一个工作区会话。

第一次还原没有效果

确认列表中存在 T0 · start,并确认健康接口版本至少是 1.1.0。旧版只记录回合后的当前状态,这是本次修复的主要根因。

终端报 git not resolved 或命令不存在

确保 git、mkdir、tee、cat、rm 在启动 DSH 的 PATH 中。

项目自己的 git status 出现 .dsh-rewind/

这是本地运行数据,不应提交。把下面一行加入项目 .gitignore,或只加入项目本地的 .git/info/exclude:

.dsh-rewind/

数据、安全与限制

- 只还原工作区文件,不回滚 DSH 对话记录。
- 还原前总会尝试创建 before-restore 安全检查点。
- 默认忽略 node_modules、dist、build、虚拟环境、缓存目录、.git 和 .dsh-rewind。
- 新发现的单文件超过 10 MB 时不进入快照。
- 同一目录一次新增 200 个或更多文件时,该目录跳过。
- 二进制差异可能只显示统计信息。
- .dsh-rewind 会占用磁盘;每会话普通检查点上限是 50,但 Git 对象回收仍由 Git 自己决定。
- 不要把 .dsh-rewind/ 提交、同步或分享,其中可能包含被删除代码和历史版本中的敏感内容。

卸载

dsh plugin --profile web remove dsh-rewind

重启 dsh web。卸载不会自动删除各项目里的 .dsh-rewind/,便于误卸载后恢复;确认不再需要历史时再手动删除对应项目中的该目录。

项目结构

dsh-rewind/
├── package.json
├── cordis.patch.yml
├── dsh/
│   ├── index.js       # host:快照引擎、事件、HTTP、模型工具
│   └── prompt.js      # 独立的模型工具提示词
├── client/
│   └── client.js      # Web 时间线面板
└── test/
└── rewind.integration.test.js

开发验证

npm run check
npm test

许可证:MIT。设计参考 arpagon/pi-rewind。

上游仓库有新提交时邮件通知你(每天最多一封,无更新不打扰),随时一键退订。

💬 加入 DPharness 群聊

插件用法、部署报错、新插件第一时间同步——群里问,比一个人翻文档快。

点击加入 QQ 群
DPharness 群聊二维码,手机 QQ 扫码进群
扫码进群