dsh-snapshot:给 DeepSeek Harness 补上文件快照与撤销

前言

在 DeepSeek Harness(DSH)里跑智能体,最常见的操作之一就是用 write/edit 改文件。这类操作一旦执行,文件原内容就被覆盖了——模型改错一处,或者一轮批量重构改坏了关键文件,改动前的内容就找不回来,只能靠手工备份或版本控制补救。

dsh-snapshot 把这件事做成了插件:每次 write/edit 调用后自动备份文件历史,需要时恢复到任意历史版本。下面介绍它的功能、安装方式和使用注意。

这是什么

dsh-snapshot 是由 Hyna-hla 维护的 DeepSeek Harness 宿主插件,定位是「文件快照与撤销」,许可证为 MIT。它做两件事:

  1. 拦截 write/edit 工具调用,自动把文件内容备份到快照仓库;
  2. 提供一组工具,用于查询、恢复、清空历史版本,并把当前会话导出为 Markdown / JSON。

DSH 的理念是「一切皆插件」,dsh-snapshot 就是按这个方式接入宿主的组合(composition)。

核心功能

自动备份

每次 write/edit 工具调用后,插件会把文件当前内容写入快照仓库,路径形如:

<工作区>\.dsh-snapshots\snap-<b64>.json

其中 <b64> 是文件路径经 btoa 编码后的结果,每个被追踪的文件对应一个 JSON 文件。有两个上限:每文件最多保留 20 版,单版内容不超过 2MB。达到上限后靠覆写旧版本腾出空间,而不是删除——原因是 DSH 的 fs 服务没有 mkdir/unlink 能力,插件只能在既有文件上覆写。

四个工具

  • snapshot_list:列出快照仓库,显示每个被追踪文件的版本数与最新版本时间;
  • snapshot_restore:把文件恢复到指定历史版本。恢复前会自动再备份一次当前内容,所以恢复操作本身也可以撤销;
  • snapshot_purge:清空所有历史版本;
  • export_session:把当前会话导出为 Markdown / JSON。

典型的使用流程是:先做 snapshot_list 确认某个文件有哪些版本,再用 snapshot_restore 恢复到指定版本;不需要历史时用 snapshot_purge 清空。

安装与启用

资料未提供一键安装命令,需要手动完成三步。

第 1 步:把构建产物拷入 profile 的 node_modules\dsh-snapshot,或者经 file: 依赖引入。

第 2 步:在 cordis.patch.yml 里注册,idname 均为 dsh-snapshotconfig 中配置两个上限:

- insert:
    - id: dsh-snapshot
      name: dsh-snapshot
      config:
        maxVersions: 20
        maxContentBytes: 2097152

maxContentBytes 是单版内容的字节上限,2097152 即 2MB。

第 3 步:重启 DeepSeek Harness,组合在进程启动时加载。

经过上面的步骤,插件即随宿主进程生效。

实现上的两个细节

一是沙盒策略。宿主根上下文拿不到会话工作区,插件要往工作区写快照时,需要透传 sandboxPolicy,即调用 sandboxPolicy.resolve({session}) 解析出会话对应的策略。自己写类似插件的话,这一点需要留意。

二是仓库组织方式。快照仓库按「每文件一个 JSON」组织,文件名是 btoa 编码后的路径;版本增删靠覆写而非删除,原因如前所述——fs 服务没有 mkdir/unlink。

适用场景与注意

适合让模型高频改文件的场景:批量重构、多轮修改代码或配置,误改后直接 snapshot_restore 回去,不必手工比对。也适合想在会话结束后留档的情况,export_session 可以把会话导出为 Markdown / JSON。

使用前注意几点:

  1. 插件以当前 dsh 进程的权限运行,安装前建议先读一遍源码,确认行为符合预期;许可证为 MIT,仓库地址见文末。
  2. 版本数与单版大小上限通过 configmaxVersionsmaxContentBytes 设置,可按自己工作区文件的大小调整。
  3. snapshot_purge 会清空所有历史版本,执行前确认不再需要这些记录。

结尾

dsh-snapshot 解决的问题很具体:智能体改文件没有后悔药。它用每次 write/edit 后的自动备份,把撤销变成一次工具调用,实现不复杂,但省掉的是实打实的排查时间。

  • 插件目录页:https://www.skillhub.cn/plugins/Hyna-hla/dsh-snapshot
  • GitHub 仓库:https://github.com/Hyna-hla/dsh-snapshot

目录页来自社区维护的独立站点,与 DeepSeek、幻方没有官方从属关系;安装前请以上方仓库中的源码与说明为准。

羽毛球分组比赛记分
小程序二维码

欢迎使用《羽毛球分组比赛记分》微信小程序

小夜