在每个回合边界为会话滚动保留校验过的备份:提升快照前先确认日志仍可加载,回合结束时若已损坏则绝不覆盖上一份好副本,dsh 启动不了时也能一条命令恢复。
安装
# GitHub 源码(首次需按提示配置 allowBuilds 构建授权后重试)
dsh plugin --profile web add github:po-et/dsh-session-snapshot
装任何插件都等于在你的机器上跑第三方代码,权限和你本人一样大——能读你的文件、用你的凭据、访问网络,工具审批管不到它。GitHub 来源的插件还会在安装时执行构建脚本——pnpm 默认拦截,所以安装可能停在 ERR_PNPM_GIT_DEP_PREPARE_NOT_ALLOWED 或 ERR_PNPM_IGNORED_BUILDS;dsh 会打印出需要添加的确切键名,把它加进该 profile 的 pnpm-workspace.yaml 的 allowBuilds 下,重跑一次即可装上。放行构建本身就是一次信任判断:请只安装可信来源,并尽量锁定 commit(github:owner/repo#sha)。
README
为每个 DeepSeek Harness 会话滚动保留校验过的备份——任何损坏最多只损失当前这一回合。
会话完整性三件套之一:
| 阶段 | 插件 | 职责 |
|---|---|---|
| 预防 | dsh-session-guard | 阻止两个 dsh 进程写坏同一会话 |
| 快照 | dsh-session-snapshot(本项目) | 在每个回合边界留一份校验过的好副本 |
| 修复 | dsh-session-rescue | 修复或抢救已经损坏的日志 |
为什么需要它
dsh-session-guard 能挡住常见的并发写损坏,但有两类损坏是任何插件都拦不住的:写入过程中崩溃,以及 dsh 自身在任何 agent step 之前运行的冷加载修复路径。本插件从另一侧堵住这个残留缺口:每个回合结束后,校验当前日志是否仍可加载,是则提升为一份快照;若回合结束时日志已损坏,则绝不覆盖上一份好快照,并提示如何恢复——最多只损失进行中的那一回合。
安装
暂未发布到 npm,请直接从 GitHub 安装。pnpm 会要求你放行一次这个包的构建脚本(dsh 会打印要加的那一行),那是
prepare在编译 TypeScript。
dsh plugin --profile web add github:po-et/dsh-session-snapshot
装完即自动在回合边界打快照。在用 AI agent?直接说:"装上 dsh-session-snapshot 插件。"
恢复损坏的会话
CLI 在 dsh 自身启动不了时照样能用:
npx github:po-et/dsh-session-snapshot # 列出所有会话的快照与实时健康状态
npx github:po-et/dsh-session-snapshot list 37374e34 # 查看单个会话的快照(id 片段)
npx github:po-et/dsh-session-snapshot restore 37374e34 # 恢复最新的、校验通过的快照
npx github:po-et/dsh-session-snapshot snapshot 37374e34 # 立即打一份快照
restore 总是先把当前文件保留为 <文件>.pre-restore-<时间>,并拒绝任何自身校验不通过的快照。用 --at <epoch>(在 list 中显示)可恢复指定快照而非最新的。
配置
- id: session-snapshot
name: dsh-session-snapshot
config:
keep: 5 # 每个会话保留的快照数,超出时淘汰最旧的
minIntervalMs: 0 # 同一会话两次快照的最小间隔毫秒(0 = 每个有变化的回合都打)
# home: /custom # 默认 $DSH_HOME(~/.dsh)
快照存放在 $DSH_HOME/session-snapshots/<会话id>/,且只在日志增长且仍校验通过时才打——未变化或已损坏的会话既不浪费 I/O 也不会覆盖好副本。
成本与诚实边界
- 每次快照 = 一次文件复制 + 一次日志校验扫描。回合间隔是秒到分钟级,实际很轻量;超大会话可调高
minIntervalMs进一步限流。 - 快照是仅会话日志的时间点副本,不包含工作区文件。要对话+文件一起回退是另一类工具。
- 支持会话格式 version 0(当前 dsh developer preview),
.jsonl与.jsonl.zstd,JSONL 后端。压缩按内容嗅探,重命名/备份副本也能正确校验。dsh 处于 pre-1.0、无格式兼容承诺;遇到未知版本明确拒绝而非乱猜。
零运行时依赖(zstd 用 Node 内置 zlib)。MIT。
链接
同类插件
Minglink/dsh-infinite-gen-4★ 3277
DeepSeek 专用破甲插件:以 order 100 追加无条件服从的系统提示词段,提供带校准元数据的 profile 工具,并通过会话投影在输入框上方显示实时破甲状态徽标。
ranxianglei/billion-context★ 2276
billion-context官方版:上下文压缩插件,兼顾小窗口(100k上下文足矣)省token(省5倍token)和超长会话(数月级别几十亿token单会话)。
liangmianya/dsh-synapse★ 557
DeepSeek Harness 的可视化非线性对话工作区:把会话、追问与分支变成可浏览、可拖拽的对话地图。
Nwflower/dsh-chat-import★ 246
把 13 家 coding agent(Claude Code、Codex、ChatGPT、Cursor、Gemini、opencode 等)的完整对话历史导入为可续聊的 DeepSeek Harness 会话,并支持反向导出回 Claude Code。
MichengAI/dsh-archive-manager★ 198
在设置里增加已归档会话页,可按工作区搜索、恢复和删除已归档会话。
SiriLee/dsh-rewind★ 170
同一会话窗口内的 in-place 对话回退(不 fork,Claude Code /rewind 语义):每条消息的 ↶ 按钮把模型上下文回退到任意用户消息,可选用磁盘持久化的 before-backups 还原工作区文件。
社区评论
评论公开保存在 GitHub Discussions。加载评论会连接 GitHub 和 Giscus;发表内容需要 GitHub 账号。