前言¶
在 DeepSeek Harness(DSH)里做 Agent 开发时,常见做法是发错指令、想从某条用户消息重来,或模型改了一轮文件后希望对话和磁盘状态一起回到更早的点。DSH 默认可以通过「在新对话中分支」继续探索,但会新开分支或换窗口,容易留下副本、打断当前会话节奏。若还要手动用 Git 或自己记改了哪些文件,成本更高。
下面介绍社区插件 dsh-nonead-prompt-rewind(维护者 NoneadChina,分类:工作流)。它在同一窗口、同一会话内,把对话回退到任意更早的用户消息,并可在确认后一并还原插件追踪过的 workspace 文件,语义对齐 Claude Code 的 /rewind,不依赖 Git 整树快照。
这是什么¶
dsh-nonead-prompt-rewind 是发布在 npm 的 DSH 插件(包名 dsh-nonead-prompt-rewind)。刻意只做一件事:就地回退到任意远的用户消息,并可选择通过轻量写前备份还原被工具改过的文件。
- 仓库:NoneadChina/dsh-nonead-prompt-rewind
- 社区目录:SkillHub 插件页
- 许可:MIT
核心功能¶
就地消息回退¶
目标用户消息及其之后的内容,会同时从模型上下文和界面渲染的对话中撤回;目标消息的文本会自动回填到输入框。全程在当前会话内完成,不新建分支、不产生残留会话副本。
实现上遵循会话日志 append-only:回退不删改历史,只在日志末尾追加一条与官方 /compact 同类的「隐藏 + 替换」标记,把后续内容遮蔽掉。被撤回的内容仍完整留在日志中,可在「轨迹」等面板审计;禁用插件时也可仅让界面重新显示(不影响日志本身)。
轻量文件还原(可选)¶
对齐 Claude Code 检查点思路:局部追踪写类工具(write、edit)编辑过的文件,写前备份;每条用户消息边界会重扫已跟踪文件,外部变更(命令、手改)也会被记录。回退确认时,对话与文件一次确认、同时生效,没有「只退对话」或「只退文件」的分模式。
限制与边界见仓库文档(例如单文件默认超过 8 MiB 不备份、未被工具碰过的文件不还原、子代理编辑不追踪)。快照关闭期间的新改动无法还原。
交互与命令¶
- 每条用户消息操作行有 ↶ 回退 按钮;确认框会列出将被还原或删除的文件清单。
- 命令:
/rewind(别名/undo)打开候选列表;/rewind @<序号>直接指定目标。 - 设置 →「回退历史」:按工作区保留最近 10 次回退(可通过配置项
historyLimit调整),可标注完成 / 部分完成 / 未完成;对当前会话最新且未撤销的那一次,可「恢复到回退之前」——只还原文件、不恢复对话,且每条只能撤一次;若回退后又改过相关文件,撤销会被拒绝。
存储与安全(摘要)¶
- 快照默认目录:
<dsh home>/rewind-snapshots/(默认~/.dsh/rewind-snapshots/);回退历史:<dsh home>/rewind-history/。 - 快照备份可在插件配置卡关闭;另有默认关闭的快照自动清理,可通过
/snapshot-auto-cleanup查看与配置。 - 插件声明:不触碰 Git 仓库、无网络请求、不访问凭据;文件备份与还原经安全加固。详见仓库 SECURITY.md。
界面文案跟随 DSH 语言,内置多种 locale;插件与 DSH 均处开发者预览阶段,生产环境建议 pin 精确版本。
安装与启用¶
安装前确认本机 DSH 版本,并在 Releases 选择与本机 DSH 适配的插件版本。仓库 package.json 声明宿主支持 dsh:>=0.2.1-0 <0.3.1-0,Node.js >=24.9.0。
命令行(将 <name> 换成你的 Profile 名,<版本> 换成 Releases 中的版本号,例如资料中的 npm 包当前版本为 0.5.1,仍以 Releases 说明为准):
dsh plugin --profile <name> add dsh-nonead-prompt-rewind@<版本>
图形界面:侧栏「插件」→「添加插件」→ 填写 dsh-nonead-prompt-rewind@<版本> → 安装 → 重启 DSH。
npm 上的
dsh-rewind属于其他作者,请使用dsh-nonead-prompt-rewind。从旧包名升级时,插件条目 id 与相关设置不会自动迁移,需重新安装;/rewind、/undo、快照目录名与已有快照数据保持不变。
插件以当前 DSH 进程权限运行,安装前应自行查看源码与 MIT 许可证,评估是否适合你的工作区。
典型用法¶
- 在对话中找到要回退的用户消息,点击旁边的 ↶;或输入
/rewind//undo从列表选择;已知序号时用/rewind @<序号>。 - 在确认框中查看将被还原或删除的文件列表,点击「回退」确认。
- 回退立即生效:界面与模型上下文回到目标消息当时的状态,目标消息文本已在输入框中,修改后可重新发送。
候选列表支持方向键与 Enter/Esc;确认框默认焦点在「取消」,可用 ⌘/Ctrl+Enter 直接确认。
快照与历史相关命令示例(完整说明见 README):
/snapshot-auto-cleanup 查看状态
/snapshot-auto-cleanup on|off 开启 / 关闭自动清理
/snapshot-auto-cleanup max-age <天数> 设置失活阈值
/snapshot-auto-cleanup run [--apply] 预演,或加 --apply 执行
卸载插件:
dsh plugin --profile <name> remove dsh-nonead-prompt-rewind
如需删除本地数据,可另行删除 rewind-snapshots、rewind-history 等目录(见 README「卸载」一节)。
适用场景与注意¶
适合:在同一 DSH 会话里频繁「从某条 prompt 重来」、且希望 Agent 写过的文件尽量随回退一起还原的开发者;不强制依赖 Git 的普通目录工作流。
不适合或需另寻方案:整工作树 / Git 级快照;子代理会话内的编辑回退;替代 DSH 内置的「在新对话中分支」。
注意:
/export导出的 JSONL 仍包含已撤回内容,插件无法改动导出行为。- 回退目标早于已加载历史时,对话区可能暂时空白,需「加载更早」后再看历史。
- 明确不做 fork/分支回退、不做子代理备份追踪。
与默认 DSH 行为对比(摘自 README):
| 维度 | 默认行为 | 本插件 |
|---|---|---|
| 对话回退 | 新建分支对话 | 就地回退,不切窗口 |
| 文件还原 | 手动 / Git | 写前轻量备份,确认后一并还原 |
| 还原依赖 | 常依赖 Git 或重型快照 | 不依赖 Git 仓库 |
| 历史 | 无统一记录 | 按工作区保留最近回退,最新一次可撤销文件改动 |
结尾¶
dsh-nonead-prompt-rewind 把「从任意用户消息重来」收束为同窗口的一次确认操作,并用 append-only 日志遮蔽与写前文件备份,在 Agent 工作流里补齐接近 Claude Code /rewind 的体验。
- 社区目录:https://www.skillhub.cn/plugins/NoneadChina/dsh-nonead-prompt-rewind
- 源码与文档:https://github.com/NoneadChina/dsh-nonead-prompt-rewind
SkillHub 为社区插件目录站点,与 DeepSeek / 幻方无官方从属关系;DSH 生态理念是「一切皆插件」,选用插件时请自行核对版本与权限边界。