Da-Mie
dsh-rewind
OpenChamber-style conversation rewind / restore / branch-continue for DeepSeek Harness: view-level rewind with restore, project-file rollback on commit, timeline dialog, todos-style rewind dock
- Stars
- 0
- Language
- JavaScript
- Created
- Aug 15, 2026
- Updated
- Aug 15, 2026
Introduction
dsh-rewind
DeepSeek Harness(DSH)插件:在 Web 会话中实时回退对话、回退后可恢复; 若在回退点发送新提示词,则项目(工作区文件)回退到该阶段并从新提示词继续。
交互设计与呈现方式参考自 OpenChamber: 时间线对话框、回退清单停靠条、"提示词回填输入栏后直接修改"的交互模型, 以及"回退即完成、发送即普通发送"的无感机制。 底层机制使用 DSH 原生能力(fork / archive / append-only 会话日志)+ 插件自建项目快照。
功能
- 时间线对话框(Alt+T):搜索用户消息、点击滚动定位;行内 ↩ 回退到此;上一个回合 / 最新 / 加载更早;
- 消息行 ↩ 图标(复制键左侧,OpenChamber 式):用户消息行回退到本条;回合尾部(assistant 回复)行回退到该回复之后;
- 回退即回显、后台切换(无感):点击回退后立即出现 "已回退 N 条消息"停靠条(todos 同款视觉、流式占位不遮挡),被回退的提示词文本填入原输入栏(可直接修改);
fork 前缀会话 → 预载 → 切换全部在后台完成,就绪后无感切到该点(OpenChamber 式:破坏性动作在回退时完成);可逐条 [恢复到此] 或 [恢复全部]; - 发送 = 普通发送(零切换零闪烁):回退态下在输入栏回车发送,对话直接继续(不做任何会话切换);文件回滚与旧会话归档在后台完成;
- 项目文件只在发送新提示词时回滚;回退 / 恢复本身不动文件。
机制
- 回退(点击 ↩ / 时间线) = 立即回显停靠条并回填提示词,随后后台 fork 前缀会话、预载、切换(旧会话保留为恢复源,原 turn 后台取消);
- 恢复 = 切回旧会话([恢复全部])/ 重新 fork 到该条([恢复到此]);无用的 fork 后台归档;
- 发送 = 普通发送;检测到新消息后后台完成:取消旧会话 turn → 项目文件回滚(
/dsh-rewind rollback)→ 归档旧会话,全程不影响对话; - host 快照引擎:每次
turn/end后对工作区拍增量快照(mtime/size 快速路径 + 内容寻址 blobs;排除 node_modules/.git 等;存放于%USERPROFILE%\.dsh\plugins\dsh-rewind\<workspace哈希>\),提交时按目标 checkpoint 做差集恢复(删除多余、还原缺失/变更)。
示意图


安装
方式一:交给 DSH 自动安装(推荐)
把本仓库链接发给 DSH(例如:请安装这个插件:https://github.com/Da-Mie/dsh-rewind)。 DSH 会读取 docs/AI-INSTALL.md(给 AI 的安装指引)并自动完成: 克隆仓库 → 建立 junction 链接 → 注册到 Web profile → 重启生效。
方式二:手动安装
- 克隆本仓库到稳定目录,例如
E:\AI_apps\DSH\DSH_WorkFile\plugins\dsh-rewind; - 在
$env:USERPROFILE\.dsh\profiles\node_modules下建 junction 指向包目录; 在profiles\web\package.json的dependencies加"dsh-rewind": "link:<包路径>", 并在dsh.profile.bundles追加"dsh-rewind"; - 重启 DSH 桌面应用后端,浏览器刷新加载
lib/client.js(插件集变更需要重启)。
配置(cordis.yml 行 config,作为 apply 的第二个参数传入)
| 字段 | 默认 | 说明 |
|---|---|---|
enabled | true | 总开关 |
excludes | 内置列表 | 快照排除的目录名(node_modules/.git/dist 等),用数组覆盖 |
已知边界 / 限制
- 回退点限已完成的 turn 边界:不能回退到仍在进行(尚未 turn/end)的回合内;回退到第一条会新建一个空会话作为分支(第一条之前无前缀可 fork)。
- 长会话回退有处理时长:fork 需在宿主侧重放前缀事件日志,成本随会话长度增长。点击回退会立即显示停靠条("处理中")并回填提示词,真正的会话切换在后台就绪后完成;就绪前锚点之后的消息仍会短暂可见。
- 逐条恢复(恢复到此)仍是同步操作:长会话下同样需等待 fork 完成(界面短暂"处理中")。
- 原会话在发送新提示词后才归档(侧边栏隐藏,磁盘数据保留可恢复);回退/恢复本身不动项目文件。
- 文件回滚在后台进行:发送新提示词后异步回滚,通常远快于 agent 首次写文件,但不与首条回复严格同步。
- 后台处理期间的边界:fork 未就绪时发送的提示词会被转发到新分支继续;此时点"恢复全部"会取消本次回退(无用的 fork 自动归档)。
许可证
交互设计参考 OpenChamber(MIT)。