
SiriLee/dsh-rewind
dsh-rewind-plugin
dsh-rewind-plugin is a community DeepSeek Harness plugin. Read the repository README before installing.
Install
npx @deepseek-ai/dsh plugin --profile <name> add dsh-rewind-plugin@<版本>Restart `dsh web` after install. Bundle APIs can change during the developer preview.
README badge
[](https://dshhub.dev/plugins/dsh-rewind)Paste this into your README. The star count updates with every catalog sync.
From the README
Excerpt from SiriLee/dsh-rewind, cleaned of badges and images.
dsh-rewind
DeepSeek Harness 插件:一键就地回退对话到任意更早的用户消息——同窗口内完成,不新建分支、不换窗口,可一并还原工作区文件(完整 Claude Code /rewind 语义)。
English | 中文
刻意聚焦、保持极简,只做一件事:就地回退到任意远的用户消息,还能顺手还原改过的文件。
- 就地消息回退——目标消息及其之后的内容同时从模型上下文和渲染对话中撤回,目标消息文本自动回填输入框。始终在原会话内完成,不新建分支、不残留副本。
- 轻量备份还原——对齐 Claude Code:追踪写类工具编辑过的文件,回退时一并还原,已跟踪文件的外部变更也能还原。局部追踪、写前备份、不变不存,不依赖 git。
- 安全保障——会话日志仅追加回退标记,从不删改;文件备份与还原经安全加固;完备测试,随 DSH 升级长期维护。安全模型:SECURITY.md。
效果预览
每条用户消息的操作行都有一个 ↶ 回退 按钮。点击后弹出模式选择浮层——「仅回退对话」或「回退对话和文件」,后者会先展示文件变更清单再确认。还可以通过 /rewind 和 /undo 命令便捷地选择和回退。
<td align="center"><img src="assets/screenshots/rewind-button.png" width="440" alt="用户消息旁的 ↶ 回退按钮"><br><sub>用户消息旁的 ↶ 回退按钮</sub></td>
<td align="center"><img src="assets/screenshots/mode-popover.png" width="440" alt="模式选择浮层"><br><sub>模式选择浮层</sub></td>
<td align="center"><img src="assets/screenshots/impact-list.png" width="440" alt="影响清单"><br><sub>「回退对话和文件」影响清单</sub></td>
<td align="center"><img src="assets/screenshots/rewind-candidates.png" width="440" alt="/rewind 候选面板"><br><sub>/rewind 候选面板</sub></td>
安装
确认本机 DSH 版本后,在 Release 找到适配的插件版本。
命令行:
dsh plugin --profile <name> add dsh-rewind-plugin@<版本>
图形界面:侧栏「插件」页 →「添加插件」→ 填 dsh-rewind-plugin@<版本> → 安装 → 重启 DSH 并刷新浏览器。
<img src="assets/screenshots/add-plugin.png" width="600" alt="「添加插件」弹窗:在输入框填入 dsh-rewind-plugin@版本号"><br> <sub>图片仅为示例,请以实际适配版本号为准。</sub>
更新:命令行可直接覆盖安装;图形界面会拒绝重复安装,需先卸载旧版本,再装新版本。
[!WARNING] npm 上的
dsh-rewind属于其他作者,请用dsh-rewind-plugin安装。
使用
- 在对话中找到要回退的那条用户消息,或输入
/rewind(或其别名/undo)打开候选列表选择。 - 选中它。 小浮层提供两种模式——「仅回退对话」或「回退对话和文件」。
- 回退立即生效:对话回到目标消息当时的样子,目标消息的文本自动回填输入框——改完直接重发。
键盘操作:候选列表与模式浮层均支持 ↑↓ 移动、Enter 确认、Esc 取消/返回。
<b>边界说明</b>
- 回退可以反复进行——没有阶段或次数限制。
- 回退本身无法撤销,但被撤回的内容仍保留在会话日志中。
- 插话也能回退——模型尚未读取的
steering插话消息,同样可作为回退目标,不会打断当前生成。 - 回退已读消息会打断当前正在运行的回合——确保回退的安全执行。
存储管理
快照备份(默认开启):用于文件还原;可在本插件的配置卡片中关闭。关闭后不再创建新的快照,关闭期间的文件改动无法还原。快照存储于 <dsh home>/rewind-snapshots/(默认 ~/.dsh/rewind-snapshots/)。手动删除该目录仅清除文件备份(对话回退不受影响),插件可自动重建。
全局自动清理(默认关闭):把长期不活跃的会话快照整目录移除,不影响活动会话与对话日志。可在配置卡片查看与配置(自动清理开关、失活天数),也可用 /snapshot-auto-cleanup 命令查看、设置和运行。详见:快照自动清理。
卸载
# 卸载插件
dsh plugin --profile <name> remove dsh-rewind-plugin
# 如需同时删除本地数据
rm -rf <dsh home>/rewind-snapshots
rm <dsh home>/snapshot-cleanup-last-sweep.json
插件的自动清理设置保存在当前 Profile 的插件配置中。如需彻底清理,可手动删除对应条目。
本插件的优势
和常见的几种做法相比,本插件在"回退"这件事上的取舍:
| 维度 | 常见做法 | 本插件 |
|---|---|---|
| 对话回退 | Fork 分支新建对话 | 就地回退——不新建会话、不切窗口,便捷回退 |
| 文件还原 | 无还原功能 / git 管理或完整快照 | 写前轻量备份——写文件前自动存原内容,一键还原 |
| 依赖 | 常依赖 Git 仓库或完整快照引擎 | 无依赖——不依赖 git,普通目录即可用 |
| 存储开销 | 整树快照占空间大 | 轻量——不变不存,且只追踪写类工具改动过的文件 |
原理
整套设计只有两条主线,核心哲学朴素却克制:对话部分「只遮蔽、不删除」,使用 DSH 原生的「隐藏 + 替换」机制;文件部分「局部追踪,写前轻量备份」,参考 Claude Code 的检查点语义。
1. 对话回退:一次「遮蔽」,而不是「删除」
append-only 是铁律:会话日志只追加、从不改写——这是可审计与信息安全的地基。回退从不动历史,它只做一步:往日志末尾追加一条 “空消息”标记,把目标消息及其之后的全部内容「遮蔽 + 替换」掉,让模型和界面都只看得到目标之前的部分。
- 同一份日志——只在当前会话的日志做简单追加,不新建会话、不新建分支,因此不会留下残留和副本;
- 标记是规范的——采用与官方
/compact相同的「隐藏 + 替换」:/compact把一段历史压缩成摘要,/rewind则换成一条“空消息”标记。由于其规范性,DSH 的日志重放、压缩、续接检查都能正确识别它,绝不会把它误认为真实对话; - 替换内容无感——模型对标记忽略、无感(实测验证)。配合插件对界面显示的处理,模型和你看到的对话就是目标消息当时的样子;
- 记录完整保留——因为是「遮蔽」而非「删除」,被撤回的内容完整留在日志里,可审计、可追溯,原则上也能手动恢复。
…

