DSH Hub
dsh-rewind-plugin cover

SiriLee/dsh-rewind

dsh-rewind-plugin

UIWeb UI205 GitHub stars· updated 2026-10-26

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

dsh-rewind-plugin DSH Hub badge
[![DSH Hub](https://dshhub.dev/badge/dsh-rewind.svg)](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 安装。

使用

  1. 在对话中找到要回退的那条用户消息,或输入 /rewind(或其别名 /undo)打开候选列表选择。
  2. 选中它。 小浮层提供两种模式——「仅回退对话」或「回退对话和文件」。
  3. 回退立即生效:对话回到目标消息当时的样子,目标消息的文本自动回填输入框——改完直接重发。

键盘操作:候选列表与模式浮层均支持 ↑↓ 移动、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 的日志重放、压缩、续接检查都能正确识别它,绝不会把它误认为真实对话;
  • 替换内容无感——模型对标记忽略、无感(实测验证)。配合插件对界面显示的处理,模型和你看到的对话就是目标消息当时的样子;
  • 记录完整保留——因为是「遮蔽」而非「删除」,被撤回的内容完整留在日志里,可审计、可追溯,原则上也能手动恢复。

…

Related plugins