每轮自动快照工作区,随时把文件恢复到任意更早状态
24.5/100
综合分
1
GitHub 星标
—
npm 周下载
—/5
用户评分
数据截至 2026/10/27 · 周下载取自 npm 全网(含 CI / 镜像),非本站安装数;综合分由星标、活跃度与兼容性检查合成。
安装命令 · 需先装 dsh CLI 引擎
dsh plugin --profile web add zoyluoblue/deepseek-harness-rewind该包不可直接 npm 安装,改从 GitHub 源安装(明细见下方安装检查)
状态速览
判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态信任档位:仅索引
是什么
dsh 原生插件 · dev
装得上吗
本站尚未做安装检查
安全吗
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
还在维护吗
更新放缓:最近一次提交在 75 天前
档位由哪些信号合成
本站实装验证(真实安装 L4 覆盖全站;L5 为运行时冒烟或实机截图,覆盖范围小于 L4) · 验证所用 dsh 版本 · 静态安装检查 · 风险分级 · 仓库维护状态。 下方各区块是它的证据明细。
社区实装还没有人打卡 · 装过的第一个就是你
安全扫描自动 · 静态分析源码v2.7.0🔵 扫描:含敏感能力尚无人工评估展开查看扫描说明与证据 ↓
安全扫描自动 · 静态分析源码
v2.7.0静态扫描发现插件具备触达本地系统的能力:执行外部命令、读写/删除本地文件、读取剪贴板或密钥类环境变量(至少其一)。这是能力清单,不是危险判定——具体能力项与证据见下方,安装前请自行判断是否需要。
读写/删除本地文件发起外部网络请求
查看扫描证据(共 11 处,展示前 11 条)
- 发起网络请求src/client/source.ts:39
const response = await fetch(`${TIMELINE_ROUTE}${query}`, { - 发起网络请求src/client/source.ts:55
const response = await fetch(ROLLBACK_ROUTE, { - 写入本地文件src/shadow-repo.ts:205
await mkdir(join(this.shadowDir, 'no-hooks'), { recursive: true }) - 写入本地文件src/shadow-repo.ts:206
await writeFile(join(this.shadowDir, 'no-excludes'), '') - 写入本地文件src/shadow-repo.ts:207
await writeFile( - 写入本地文件src/shadow-repo.ts:216
await mkdir(join(gitDir, 'info'), { recursive: true }) - 写入本地文件src/shadow-repo.ts:217
await writeFile(join(gitDir, 'info', 'exclude'), `${exclude}\n`) - 读取本地文件src/stores.ts:98
canonical = await realpath(path) - 读取本地文件src/stores.ts:167
await realpath(path) - 读取本地文件src/stores.ts:177
entries = await readdir(join(this.options.home, ROOT_DIR)) - 读取本地文件src/stores.ts:187
raw = await readFile(join(this.options.home, ROOT_DIR, key, 'meta.json'), 'utf8')
扫描于 2026/11/2(0 天前) · 范围 全包扫描(包内未声明入口) · 来源 GitHub 仓库
静态扫描只反映源码中出现的调用,不构成安全背书;人工评估与自动扫描相互独立、互不覆盖。
依赖的 DSH / Cordis 模块
@deepseek-ai/cordis@deepseek-ai/dsh-client-locale@deepseek-ai/dsh-client-ui-primitives@deepseek-ai/dsh-client-ui-settings@deepseek-ai/dsh-client-ui-slots@deepseek-ai/dsh-commands@deepseek-ai/dsh-home-paths@deepseek-ai/dsh-host-webserver@deepseek-ai/dsh-session@deepseek-ai/dsh-subprocess@deepseek-ai/dsh-tools给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个
dsh 插件:每轮对话给工作区做快照,随时把文件恢复到之前任一节点。给 DeepSeek Harness 编码会话用的回退/撤销功能,你自己的 git 仓库完全不受影响。
README
由 DeepSeek 最新模型翻译生成@zoytown/dsh-rewind
把文件放回去。 一个 DeepSeek Harness 插件:每一轮结束时自动保存工作区,agent 改坏了就把文件恢复到任意一个更早的时间点 —— 在设置页点,或者用 /rewind。
你自己的 git 仓库不会被改动。不是 git 仓库的目录同样受保护。
dsh 设置面板中的「回溯」页,按时间倒序列出 DeepSeek Harness 会话的每一轮、改动了几个文件,以及恢复按钮
为什么需要它
agent 连续改了六轮。第 3 轮是对的,第 4 到第 6 轮越改越糟。你想要第 3 轮的状态。
git 帮不上忙:你从第 1 轮之后就没提交过,而 agent 的中间状态本来就从来不是 commit。
git checkout . 会把所有改动一起丢掉,包括那些改对了的部分。
harness 本身不保存工作区文件 —— 它内建的 dsh-session-checkpoint-policy 管的是会话日志何时落盘,与你的文件无关。
这个插件补的就是这块空白。
它做什么
- 每一轮都保存。 一轮结束时把工作区提交进插件自己的影子仓库。没有改动的轮次只花一次 tree 比对,不会产生多余的条目。
- 可以恢复到任意一轮。 之后修改过的文件被还原,之后新增的文件被删除 —— 工作区是变成那个状态,而不是把那个状态叠上去。
展开完整文档(README 剩余 1 节)
@zoytown/dsh-rewind 把文件放回去。 一个 DeepSeek Harness 插件:每一轮结束时自动保存工作区,agent 改坏了就把文件恢复到任意一个更早的时间点 —— 在设置页点,或者用 /rewind。 你自己的 git 仓库不会被改动。不是 git 仓库的目录同样受保护。 dsh 设置面板中的「回溯」页,按时间倒序列出 DeepSeek Harness 会话的每一轮、改动了几个文件,以及恢复按钮 为什么需要它 agent 连续改了六轮。第 3 轮是对的,第 4 到第 6 轮越改越糟。你想要第 3 轮的状态。 git 帮不上忙:你从第 1 轮之后就没提交过,而 agent 的中间状态本来就从来不是 commit。 git checkout . 会把所有改动一起丢掉,包括那些改对了的部分。 harness 本身不保存工作区文件 —— 它内建的 dsh-session-checkpoint-policy 管的是会话日志何时落盘,与你的文件无关。 这个插件补的就是这块空白。 它做什么 - 每一轮都保存。 一轮结束时把工作区提交进插件自己的影子仓库。没有改动的轮次只花一次 tree 比对,不会产生多余的条目。 - 可以恢复到任意一轮。 之后修改过的文件被还原,之后新增的文件被删除 —— 工作区是变成那个状态,而不是把那个状态叠上去。 - 每次恢复都可以再撤销。 被覆盖掉的状态会先存一份,所以恢复错了,再恢复上面那一条就回来了。 - 绝不碰你的 git。 快照放在 $DSH_HOME/rewind/,不在你的 .git 里。你的 index、HEAD、stash、 reflog、gc 都在影响范围之外;非 git 目录也享受同样的保护。 安装 npx -y @deepseek-ai/dsh plugin --profile web add @zoytown/dsh-rewind 然后重启 dsh,设置面板左侧会出现「回溯」入口。 需要机器上有 git。没有的话插件会提示快照已暂停,dsh 的其他功能不受任何影响。 卸载: npx -y @deepseek-ai/dsh plugin --profile web remove @zoytown/dsh-rewind 快照不会随插件一起消失;要回收空间就删掉 $DSH_HOME/rewind/。 怎么用 设置页 设置 → 回溯,按时间倒序列出当前工作区的每一个保存点,带上改了几个文件、跑了哪些工具。 点「恢复」会先弹确认,明确告诉你之后新增的文件会被删除,确认后才动手。 徽章标的是你的文件当前等同于哪个快照 —— 恢复之后它会移到被恢复的那一条上,而不是一直待在最新那条。 dsh 回溯插件的确认对话框,恢复前明确告知之后新增的文件会被删除 /rewind 命令 不消耗 token,不触发模型回合 —— 由 harness 直接处理,不会发给模型。 | 命令 | 作用 | | /rewind | 恢复到本会话的上一轮 | | /rewind 3 | 恢复到第 3 轮结束时 | | /rewind a1b2c3d4 | 按 id 恢复(唯一前缀,4 位以上即可) | | /rewind list | 列出本工作区的快照 | | /rewind save | 立刻保存当前状态(不必等一轮结束) | 恢复完成后会打印被覆盖状态的 id,用 /rewind <那个 id> 就能撤销这次恢复。 哪些文件会被保存 快照尊重你的 .gitignore,所以被忽略的文件 —— .env、构建产物、node_modules —— 既不会被保存,也不会被恢复。这既让快照保持小体积,也意味着恢复操作不会动这些文件。 在此之外,下面的 excludes 列表对每一个工作区都生效,无论它是不是 git 仓库。 它的存在是为了让没有忽略规则的目录不会把 node_modules 整个吞进快照,但它不是条件性的:一个刻意把 dist/ 或 build/ 提交进 git 的项目,这些文件同样不会被保存。 只想依赖自己的 .gitignore 就把 excludes 设成 []。 .git 本身永远被排除,且不可配置:把它存进快照会让每个快照的体积翻倍,而恢复它会用一份过期的副本覆盖掉你真正的提交历史。 配置 编辑 profile 的 cordis.yml 里 dsh-rewind 那一行: - id: dsh-rewind name: '@zoytown/dsh-rewind' config: gitTimeoutMs: 60000 retentionDays: 30 maxSessions: 50 listLimit: 200 exposeTool: 'off' | 配置项 | 默认值 | 含义 | | gitTimeoutMs | 60000 | 单条 git 命令的超时。超大工作区可以调高。 | | excludes | 常见依赖与产物目录 | 在你的 .gitignore 之外额外不保存的路径,对每个工作区都生效。设成 [] 则只依赖你自己的 .gitignore。 | | retentionDays | 30 | 最新快照早于这个天数的会话会被清理。 | | maxSessions | 50 | 每个工作区保留多少个会话,按时间倒序。 | | listLimit | 200 | 一次最多展示多少条快照。 | | exposeTool | 'off' | 模型能不能用回溯。见下。 | 让 agent 自己回溯 exposeTool 默认是 'off',也就是回溯只属于你。 | 取值 | agent 可以 | | 'off' | 什么都做不了 —— 回溯只归你 | | 'read-only' | 查看自己的历史(rewind_list) | | 'full' | 还可以恢复工作区(rewind_restore) | 'full' 确实有用 ——「这条路走不通,把文件放回去重来」是再多提示词也替代不了的止损动作;但也确实有风险:agent 判断失误就可能丢掉你想留的工作。 每次恢复仍然会先保存被覆盖的状态,所以是可撤销的,但开不开这个开关,应该是你自己的、明确的决定。 常见问题 agent 刚把我的文件改坏了,怎么撤销? 输入 /rewind,工作区会恢复到上一轮结束时的状态。想回到具体某一点,用 /rewind list 看所有保存点,再用 /rewind 3 恢复到第 3 轮。 它会往我的 git 仓库里提交东西吗? 不会。快照存在 $DSH_HOME/rewind/ 下一个独立的仓库里,你的 .git 从不会被写入。 你的 index、HEAD、stash、reflog 都不变,git status 的输出和之前一模一样。 我的项目不是 git 仓库,能用吗? 能。影子仓库是插件自带的,你的目录不需要是 git 仓库 ——而且这恰恰是回溯保护得最好的场景,因为这种情况下本来就没有别的东西在保护你。 回溯会把对话也一起撤销吗? 不会。回溯只恢复文件。DeepSeek Harness 的会话日志在设计上是 append-only 的,聊天记录原样保留 ——所以恢复之后 agent 仍然记得它做过什么,这通常正是你想要的:让它换一种思路重来,而不是失忆。 装了但设置里没有「回溯」,怎么办? 先重启 dsh —— 插件在启动时挂载。还是没有的话,跑 npx -y @deepseek-ai/dsh --profile web --dump-config,确认输出里有 dsh-rewind 这一行;没有就说明这个包被当成普通依赖装上了,而不是作为 bundle 生效。 会拖慢每一轮吗? 不会。快照在一轮结束之后才跑,且不会被 agent 循环 await;没有改动文件的轮次只花一次 tree 比对,什么都不存。 占多少磁盘? 快照像 git commit 一样共享存储:没变的文件只存一份。 一个工作区的成本大致是「它的一份副本 + 之后的改动」。 超过 retentionDays(默认 30 天)的会话会被自动删除。 agent 能自己回溯吗? 只有你打开它才能。exposeTool 默认是 'off';设成 'full' 让 agent 能恢复工作区,设成 'read-only' 则只让它看历史、不能恢复。 已知限制 - 被 .gitignore 忽略的文件不保存也不恢复。 agent 改坏了 .env 或 node_modules 里的东西,回溯救不回来。 - 恢复不影响对话。 文件会回去,聊天记录不会。 - 保留策略是按会话粒度,不是按单个快照。 一个特别长的会话会保留它的全部快照;限额到了是整个会话一起删。 - 0.1 不支持沙箱 / 远端 subprocess provider。 影子仓库建在 dsh 所在的机器上,而在别处执行工具的 provider(如 E2B)会导致快照打在错误的文件系统上。本版本面向默认的本地 provider。 - 必须装有 git。 没有的话页面会显示快照已暂停,dsh 其他功能完全不受影响。 - 嵌套 git 仓库里的文件不会被保存。 子仓库是按 git 记录子仓库的方式记的 —— 一个指针,不是文件本身,所以回溯既不保存也不恢复它里面的任何内容。 - 从设置页或 /rewind 发起的恢复,在 agent 跑一轮的过程中会被拒绝。 这两条路径会等 agent 空闲。 可选开启的 rewind_restore 工具是刻意的例外:它由 agent 在自己的回合内调用,所以不等待(改用「禁止与其他工具调用并行」来防并发写)。 - 恢复过程被中途打断(git 超时、进程被杀)可能让工作区停在两个状态之间。 safety 快照总是先写,所以不会丢东西:重跑一次恢复,或恢复那条 safety 记录,就能收敛。 但不要把「恢复报错」理解成「磁盘上一定什么都没动」。 - excludes 对每个工作区都生效,不只是对没有 .gitignore 的目录。 把 dist/ 或 build/ 提交进 git 的项目,这些文件不会被保存也不会被恢复,除非把 excludes 设成 []。 实现方式 每个工作区在 $DSH_HOME/rewind/<key>/repo.git 下有一个 git 仓库,用 --work-tree 指向你的目录。 保存走 add → write-tree → commit-tree → update-ref,只往影子仓库里写:不碰工作区任何文件,也不移动 HEAD。恢复走 read-tree -m -u,让工作区等于那个快照 ——包括删掉快照里没有的文件。 每条 git 命令都关掉了 hooks、关掉了签名、屏蔽了你的全局 excludes,所以你仓库自己的 hook 永远不会被触发,也不会突然向你要签名密码。 git 通过 harness 的 subprocess 服务执行,因此它总是跑在你的文件真正所在的地方。 不同会话在同一个工作区仓库里是各自独立的链,既共享存储,又能单独恢复、单独过期。 隐私 没有任何数据离开你的机器。插件没有遥测,也不发起任何对外网络请求。 它的两条 HTTP 路由是给设置页用的本机接口:要求请求既来自回环网卡,又以回环名称访问服务器(Host 头)—— 后一项正是 DNS rebinding 页面无法满足的。恢复接口还额外要求 POST 并拒绝跨站标记的请求。 当然,任何已经能在你机器上以你的身份执行代码的东西都能访问它们,就像它同样能访问 dsh 本身一样。 事实核验 以上描述已于 2026-08-19 在 DeepSeek Harness 0.1.0-rc.6/0.1.0-rc.7 与 git 2.50.1 上实测,包含一次从设置页发起的完整「保存 → 恢复 → 撤销」流程。 DeepSeek Harness 处于 developer preview,harness 升级后请重新核对这些结论。 环境要求 - dsh 运行工具的环境里有 git - Node ^22.19 || >=24 - DeepSeek Harness(developer preview,会有破坏性变更) 许可 MIT
预览分享卡片长什么样 ↓
分享 · DeepSeek Harness Hub
zoyluoblue/deepseek-harness-rewind
每轮自动快照工作区,随时把文件恢复到任意更早状态
相关插件 · 开发 / 工程
隐私简历生成器reactive-resume/reactive-resume
Reactive Resume 已迁至 GitHub 上的…
★ 45,125已汉化MCP
71.7
AI 架构文档生成器sopaco/deepwiki-rs
🚀 Litho 已进化为 Terrain —— 给你的 AI 智能体一张会呼吸的代码库地图。
★ 3,157已汉化DSH
70.8
长时任务执行闭环AMAP-ML/LongHorizon-Harness
面向 Computer-Use Agent 的 Loop Engineering
★ 1,764已汉化DSH
70.5
AI 编程纪律方法包GanyuanRan/Aegis
让 AI 编程 agent 变得可信:少返工、更安全、说“完成”前先给证据。
★ 1,384已汉化DSH
69.6
多代理编排运行时Enderfga/claw-orchestrator
面向编程智能体的运行时。把 Claude Code、Codex、Antigravity、Grok…
★ 586已汉化MCP
69.4
记忆进化插件csyangwen/dsh-memory-evolve
dsh-memory-evolve 使用场景指南
★ 461已汉化DSH
67.9