🎁 福利专区全网大模型免费应用 + 新用户福利 + 注册活动入口,低成本玩转 AI

检查点回退 wyhgoodjob/dsh-checkpoint

DeepSeek 客户端
wyhgoodjob60 天前有提交已提供中文文档扫描:含敏感能力兼容 / 相关生态

把文件与会话回退到上一个已完成的回合

28.6/100
综合分
0
GitHub 星标
—
npm 周下载
—/5
用户评分

数据截至 2026/9/20 · 周下载取自 npm 全网(含 CI / 镜像),非本站安装数;综合分由星标、活跃度与兼容性检查合成。

相关生态插件(非 dsh 原生,按其对应运行时安装)
git clone https://github.com/wyhgoodjob/dsh-checkpoint.git

状态速览

判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态
信任档位:已验证
是什么[目录]—
生态应用
桌面端 / Web 外壳,不以 dsh plugin add 安装
暂无时间戳·判据 →
装得上吗[实装验证]✓
本站已真实安装成功
非静态推断
L4 · 真实安装等级说明 →
数据截至 2026/09/25·判据 →
安全吗[自动扫描]—
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
数据截至 2026/11/04·判据 →
还在维护吗[仓库]—
更新放缓:最近一次提交在 60 天前
暂无时间戳·判据 →
图例:✓ 通过! 需注意— 未判定 / 无数据· 「未判定」= 本站尚无数据,不代表插件有问题
档位由哪些信号合成

本站实装验证(真实安装 L4 覆盖全站;L5 为运行时冒烟或实机截图,覆盖范围小于 L4) · 验证所用 dsh 版本 · 静态安装检查 · 风险分级 · 仓库维护状态。 下方各区块是它的证据明细。

验证判据与等级说明 →

可信度证据

安全扫描自动 · 静态分析源码
v2.7.0
🔵 扫描:含敏感能力尚无人工评估
展开查看扫描说明与证据 ↓

静态扫描发现插件具备触达本地系统的能力:执行外部命令、读写/删除本地文件、读取剪贴板或密钥类环境变量(至少其一)。这是能力清单,不是危险判定——具体能力项与证据见下方,安装前请自行判断是否需要。

读写/删除本地文件
查看扫描证据(共 15 处,展示前 15 条)
  • 读取本地文件
    src/git-snapshot.ts:64
    const cwd = existsSync(this.options.workTree) ? this.options.workTree : this.options.gitDir
  • 写入本地文件
    src/git-snapshot.ts:79
    mkdirSync(join(this.options.gitDir, 'objects', 'info'), { recursive: true })
  • 读取本地文件
    src/git-snapshot.ts:82
    if (!existsSync(alternates)) {
  • 写入本地文件
    src/git-snapshot.ts:83
    writeFileSync(alternates, `${this.options.seed.objectsDir}\n`)
  • 读取本地文件
    src/git-snapshot.ts:86
    if (!existsSync(indexFile) && existsSync(this.options.seed.indexFile)) {
  • 读取本地文件
    src/git-snapshot.ts:87
    writeFileSync(indexFile, readFileSync(this.options.seed.indexFile))
  • 写入本地文件
    src/git-snapshot.ts:87
    writeFileSync(indexFile, readFileSync(this.options.seed.indexFile))
  • 读取本地文件
    src/git-snapshot.ts:101
    if (!existsSync(this.options.workTree)) return EMPTY_TREE
  • 删除本地文件递归
    src/git-snapshot.ts:139
    rmSync(join(this.options.workTree, path), { recursive: true, force: true })
  • 读取本地文件
    src/git-snapshot.ts:156
    if (statSync(absolute).size < maxBytes) continue
  • 写入本地文件
    src/git-snapshot.ts:162
    writeFileSync(join(this.options.gitDir, 'info', 'exclude'), `# checkpoint capture exclusions\n`, { flag: 'a' })
  • 写入本地文件
    src/git-snapshot.ts:163
    writeFileSync(join(this.options.gitDir, 'info', 'exclude'), `${path}\n`, { flag: 'a' })
  • 读取本地文件
    src/index.ts:126
    const parsed: unknown = JSON.parse(readFileSync(indexFile(id), 'utf8'))
  • 写入本地文件
    src/index.ts:136
    mkdirSync(join(file, '..'), { recursive: true })
  • 写入本地文件
    src/index.ts:137
    writeFileSync(file, JSON.stringify(state.index))
扫描于 2026/11/4(1 天前) · 范围 全包扫描(包内未声明入口) · 来源 GitHub 仓库

静态扫描只反映源码中出现的调用,不构成安全背书;人工评估与自动扫描相互独立、互不覆盖。

社区实装还没有人打卡 · 装过的第一个就是你
依赖的 DSH / Cordis 模块
@deepseek-ai/cordis
给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个

功能亮点

  • 文件与会话回退
  • 还原到已完成轮次
  • Git快照式检查点

为 DeepSeek Harness 提供 Git 快照式检查点与回滚:把文件和对话还原到之前某个已完成的轮次。

README

由 DeepSeek 最新模型翻译生成
dsh-checkpoint 面向 DeepSeek Harness(dsh)的 git 快照 checkpoint/回退能力。 把会话回退到上一个已完成的 turn:git 工作树内同时还原文件与会话;非 git 工作树只回退会话,并由工具结果明示。 状态:spike 已定案,进入实现。 Task 0 spike 完成,结论为方案 B;下文的接口契约即 spike 之后的最终设计。本 README 是权威交接文档。 设计(已确定) - 捕获粒度:每 turn,而非每模型 step。一个 turn = 一次用户交互及其 agent 工作;回退落在已完成的 turn/end 边界上。每-step 捕获(opencode 式)是后续增强,明确排除在 MVP 外。 - 存储:每会话一个独立 git object DB,位于 /checkpoint//git/(git init 配 GIT_DIR/GIT_WORK_TREE),只存 tree hash——不在用户仓库里建任何 commit、branch 或 ref。当工作区本身是 git 仓库时,通过 objects/info/alternates + 复制 index 为其播种,复用已哈希的 blob(大仓库近乎零成本)。忽略 ignored 文件;超过体积上限(默认 2 MiB)的 untracked 文件跳过。
展开完整文档(README 剩余 1 节)
dsh-checkpoint

面向 DeepSeek Harness(dsh)的 git 快照 checkpoint/回退能力。

把会话回退到上一个已完成的 turn:git 工作树内同时还原文件与会话;非 git 工作树只回退会话,并由工具结果明示。

状态:spike 已定案,进入实现。 Task 0 spike 完成,结论为方案 B;下文的接口契约即 spike 之后的最终设计。本 README 是权威交接文档。

设计(已确定)

- 捕获粒度:每 turn,而非每模型 step。一个 turn = 一次用户交互及其 agent 工作;回退落在已完成的 turn/end 边界上。每-step 捕获(opencode 式)是后续增强,明确排除在 MVP 外。
- 存储:每会话一个独立 git object DB,位于 /checkpoint//git/(git init 配 GIT_DIR/GIT_WORK_TREE),只存 tree hash——不在用户仓库里建任何 commit、branch 或 ref。当工作区本身是 git 仓库时,通过 objects/info/alternates + 复制 index 为其播种,复用已哈希的 blob(大仓库近乎零成本)。忽略 ignored 文件;超过体积上限(默认 2 MiB)的 untracked 文件跳过。
- 快照索引是插件自有文件:/checkpoint//index.json(每 turn 一条:turn 号、tree hash、变更路径、时间戳)。为什么索引不进会话日志,见 §Task 0。
- git 检测 + 优雅降级:每会话解析一次 git 工作树(git rev-parse --is-inside-work-tree)。是 git 仓库 → 文件+会话都回退;不是(或没有 git 可执行文件)→ 只回退会话;checkpoint_list 报告 isGitRepo: false,checkpoint_restore 拒绝文件还原。
- 回退 = fork + reseed,保住 append-only 会话日志不变式:ctx.sessions.fork(source, boundarySeq, childId) 把日志切到目标 turn 的含端点 turn/end seq;git 层把文件还原到同一边界。没有 in-place 截断。
- staged revert:还原前先对当前状态再存一份快照,让撤销操作本身可撤销(opencode 语义)。

Task 0 — spike 结论(方案 B)

问题:本插件的 live 事件能否带上 ignorable: true? 答案:不能。

- Session.append(packages/core/session/src/index.ts)的信封只由 { type, seq, time, data, surfaceOp?, sourceEventSeqs? } 构成;SurfaceIntent 没有其他字段。live 路径没有任何通道设置该标记。
- 持久化读取路径(session-persistence/src/coordinator.ts 的未知类型守卫)对 KNOWN_SESSION_EVENT_TYPES 之外的事件类型硬拒绝,除非持久化信封带 ignorable: true。
- harness 内没有任何 ignorable: true 的生产者;seed/restore 信封校验接受该键,但 live 生产不可达。

因此:插件不向会话日志写任何自定义事件。快照索引是插件自有文件;模型可见性由两个工具承担(tool/call/tool/result 都是已知事件类型,重载安全)。若未来 harness 为 live append 开放 ignorable 通道,插件可迁回「日志 checkpoint/captured 事件 + 投影」的方案 A——在此之前不要重新加事件。

接口契约

侧存索引(/checkpoint//index.json)

interface CheckpointRecord {
turn: number
treeHash: string | null // 工作区不是 git 仓库时为 null changed: string[] // 本 turn 变更的路径 capturedAt: number // epoch 毫秒 }

工具

- checkpoint_list —— 参数 {};结果:{ isGitRepo: boolean, points: { turn, changedCount, capturedAt }[] }。
- checkpoint_restore —— 参数 { turn: number };执行 fork+reseed + 文件还原 + 还原前自快照;结果:{ restored: string[], childSessionId?: string, contextOnly: boolean, undoPoint?: number }。非 git 工作树时 restored 为空、contextOnly: true。

命令

- /checkpoint —— 在 harness commands 服务存在时注册(用户从命令面板发起,不经过模型 turn)。与 checkpoint_restore 一样把当前会话回退到指定 turn,结果直接渲染在 UI 里。结尾数字是目标 turn;不带数字时回复用法与可用 turn 列表。

Config

interface Config {
dataDir?: string // 默认:/checkpoint untrackedFileMaxBytes?: number // 默认 2 MiB }

插件形态:函数插件,named export name / inject / Config / apply,无 default export(harness 惯例)。注入 subprocess、sessions、tools。

已标注的 harness 扩展点(已核实,无需重新调研)

- agent/pre-step 与 session/event 流是捕获触发器——插件只读不写。监听 turn/start(捕获 pre-tree)与 turn/end(捕获 post-tree + patch)。会话工作区是 session.header.cwd(持久数据)。
- ctx.sessions.fork(source, boundary?, childId?) —— 含端点边界 seq;所选前缀必须落在 open turn 之外(否则 OPEN_TURN);错误码 SESSION_NOT_FOUND | SESSION_NOT_LIVE | SESSION_ALREADY_EXISTS | INVALID_BOUNDARY | OPEN_TURN。子会话继承 cwd、盖 parentSession、设 seedLength。
- 子进程 —— git 一律经 ctx.subprocess.spawn({ argv, cwd, ... }) 执行;可执行文件用 ctx.subprocess.resolveExecutable('git') 解析,解析为空即优雅降级。任何地方都不得写 process.platform 分支。
- 测试组合所需的宿主服务(真实 web profile 全部自带):sessions、subprocess(subprocess-local)、tools;完整会话冒烟还需要 subagent 全家、shell/shellEnv、fs、web、userQuestions、jobs、skills——与任何 preset 驱动的会话一致。

实现顺序

1. ✅ Spike(§Task 0)—— 结论 B 已记录。
2. src/git-snapshot.ts —— 独立 git object DB(init/track/restore/patch)、alternates 播种、untracked 体积上限。用真实 git 二进制在 tmpdir 中单测。
3. src/index.ts —— 函数插件:Config、每会话 git 工作树检测、捕获钩子、index.json 管理、两个工具、fork+reseed + staged restore。
4. 测试 —— 单测(git-snapshot)+ harness 检出内的真实组合冒烟(启动 spine、跑一个改文件的 turn、restore、断言文件还原)。
5. README(即本文件,保持最新)+ 打包清理。

验收标准

- git 工作树:跑一个改了文件的 turn,checkpoint_restore 到上一 turn —— 文件还原、会话在那一 turn 切断、且回退本身可撤销。
- 非 git 工作树:checkpoint_list 报告 isGitRepo: false;checkpoint_restore 只回退会话并报告 contextOnly: true;文件不动。
- 带 checkpoint 活动的会话在 first-party build 中重载干净(日志内无自定义事件)。
- 无 bin 入口;ESM-only;@deepseek-ai/cordis 与每个被 import 的 @deepseek-ai/dsh- 都在 peerDependencies 中。

针对 harness 检出的开发方式

harness 包尚未进入稳定的公共 registry 节奏,因此基于本地检出开发:

1. 把 deepseek-harness clone 到本仓库旁,pnpm install && pnpm run build(构建生成启动所需的 lib/typert. 产物)。
2. 在本仓库把要 import 的 harness 包以 file: 路径加进 devDependencies(如 file:../deepseek-harness/packages/core/session)。
3. 快速迭代:在 harness 检出内写临时 vitest spec,进程内启动 harness spine、ctx.baseUrl 指向 apps/cli、挂载本仓库的被测插件并驱动——随后删除 spec。长期归宿是本仓库内的真实组合 boot 测试。

边界与非目标

- 仅每 turn(无每-step 捕获)。
- 仅本地 git 工作树;非 git 工作区或远程后端(e2b/subprocess)不做 filesystem-copy 兜底(scheme C)。
- 会话回退始终可用;文件回退明确是 best-effort,范围仅限已快照的文件(ignored 文件、超限 untracked 文件与 shell 副作用永不还原)。

许可证

MIT
预览分享卡片长什么样 ↓wyhgoodjob/dsh-checkpoint
分享 · DeepSeek Harness Hub
wyhgoodjob/dsh-checkpoint

把文件与会话回退到上一个已完成的回合

这个插件是你维护的吗?
作者本人可认领并核对本条目;认领通过后,详情页会显示「作者已认领」标记。
认领条目 →
回到顶部