Back to home

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

License

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 做差集恢复(删除多余、还原缺失/变更)。

示意图

点击回退后:旧消息隐藏、提示词回填输入栏

输入栏上方的"已回退 N 条消息"停靠条(逐条恢复)

安装

方式一:交给 DSH 自动安装(推荐)

把本仓库链接发给 DSH(例如:请安装这个插件:https://github.com/Da-Mie/dsh-rewind)。 DSH 会读取 docs/AI-INSTALL.md(给 AI 的安装指引)并自动完成: 克隆仓库 → 建立 junction 链接 → 注册到 Web profile → 重启生效。

方式二:手动安装

  1. 克隆本仓库到稳定目录,例如 E:\AI_apps\DSH\DSH_WorkFile\plugins\dsh-rewind
  2. $env:USERPROFILE\.dsh\profiles\node_modules 下建 junction 指向包目录; 在 profiles\web\package.jsondependencies"dsh-rewind": "link:<包路径>", 并在 dsh.profile.bundles 追加 "dsh-rewind"
  3. 重启 DSH 桌面应用后端,浏览器刷新加载 lib/client.js(插件集变更需要重启)。

配置(cordis.yml 行 config,作为 apply 的第二个参数传入)

字段默认说明
enabledtrue总开关
excludes内置列表快照排除的目录名(node_modules/.git/dist 等),用数组覆盖

已知边界 / 限制

  • 回退点限已完成的 turn 边界:不能回退到仍在进行(尚未 turn/end)的回合内;回退到第一条会新建一个空会话作为分支(第一条之前无前缀可 fork)。
  • 长会话回退有处理时长:fork 需在宿主侧重放前缀事件日志,成本随会话长度增长。点击回退会立即显示停靠条("处理中")并回填提示词,真正的会话切换在后台就绪后完成;就绪前锚点之后的消息仍会短暂可见。
  • 逐条恢复(恢复到此)仍是同步操作:长会话下同样需等待 fork 完成(界面短暂"处理中")。
  • 原会话在发送新提示词后才归档(侧边栏隐藏,磁盘数据保留可恢复);回退/恢复本身不动项目文件。
  • 文件回滚在后台进行:发送新提示词后异步回滚,通常远快于 agent 首次写文件,但不与首条回复严格同步。
  • 后台处理期间的边界:fork 未就绪时发送的提示词会被转发到新分支继续;此时点"恢复全部"会取消本次回退(无用的 fork 自动归档)。

许可证

MIT

交互设计参考 OpenChamber(MIT)。