dsh-veripipe:为每一轮对话留下可读的完成回执

前言

在 DeepSeek Harness(DSH)里,智能体常用 todo_write 维护会话投影 todos,用来表示当前计划与进度。DSH 在每次 turn/start 时会清空该投影:下一轮开始后,再读 todos 会得到 null。若你在两轮之间做外部校验(例如判断「计划是否全部完成」),无法区分「上一轮已全部 completed」与「从未写 todo / 中途放弃」——两者在投影上都像「没有列表」。

下面介绍社区插件 dsh-veripipe(维护者 zhangyy0423,SkillHub 分类为「记忆」)。它在同一套会话事件日志上折叠出不会被后续 turn 清掉的投影,并在每个 turn/end mint 一条回执(receipt),供会话生命周期内持续读取;另提供只读工具 veripipe_receipt。插件不增加模型调用、不访问网络、不向会话写入额外状态。

这是什么

dsh-veripipe 是 DSH 插件:对 turn/start、todo/write、goal/change、turn/end 等事件做确定性折叠,维护 veripipeReceipts 会话投影,并注册只读工具 veripipe_receipt。每条回执记录该轮结束时的 todo 计数、goal 标识、结束原因,以及 fail-closed 的 verdict.planComplete 判定。

仓库未发布到 npm,当前 package 版本为 0.1.0,许可证 MIT。与独立项目 veripipe 相关但分仓维护;不装 veripipe 也可单独用作「按 turn 的完成账本」。

核心功能

veripipeReceipts 投影

  • 纯函数式折叠会话事件日志,插件自身不在事件流外持久化状态。
  • 每个 turn/end 生成一条 receipt,最多保留最近 50 条。
  • 与内置 todos 投影并行:后者随新 turn 清空,前者保留历史。

回执字段

字段 含义
turn 回执对应的 turn 编号(事件缺失时为 -1)
endReason turn/end 原因种类,如 completed、aborted、error;不可读时为 unknown
todos 该 turn 内最后一次 todo 列表的计数 { total, completed, inProgress, pending },未写入则为 null
goal turn 结束时的 goal { id, phase, revision },无 active goal 则为 null
verdict.planComplete pass / fail / inconclusive(见下文)

verdict.planComplete(fail-closed)

判定偏保守,不确定一律不算 pass:

  1. pass:本 turn 写入了非空 todo 列表,且每一项均为 completed。
  2. fail:写入了非空列表,且至少一项不是 completed。
  3. inconclusive:本 turn 未写 todo、列表为空,或 todo/write 载荷不可读。

veripipe_receipt 工具

只读;无模型调用、无网络、无写操作。返回当前会话最近若干条 receipt(默认 1 条,可选 limit,范围 1–50,按时间从旧到新排列)。

隐私

回执只存计数与标识:不包含 prompt、todo 正文、工具参数/结果、goal 的 objective 文本。veripipe_receipt 仅返回上述字段。

安装与启用

插件随仓库提交预构建产物 lib/,安装时无需 prepare 构建。@deepseek-ai/* 由宿主 DSH 以 peer dependencies 提供;请勿在插件侧重复声明为 regular dependencies(会导致 @deepseek-ai/dsh-tools 双份加载并破坏工具调用)。运行时直接依赖仅 zod。要求 Node >= 22。

在指定 profile 下添加 GitHub 源(命令来自 README):

dsh plugin --profile <your-profile> add github:zhangyy0423/dsh-veripipe

本地目录或打包 tarball 也可安装:

dsh plugin --profile <your-profile> add ./dsh-veripipe
dsh plugin --profile <your-profile> add ./dsh-veripipe-0.1.0.tgz

插件在当前 dsh 进程权限下运行。安装前请自行审阅 源码与 LICENSE;社区目录 SkillHub 插件页 与 DeepSeek / 幻方无官方从属关系,并非官方应用商店。

典型用法

调用 veripipe_receipt 时可不带必填参数;可选 limit 指定返回最近几条回执:

{ "limit": 3 }

返回结构示例(字段含义见 README):

{
  "available": 7,
  "returned": 3,
  "receipts": [
    {
      "turn": 5,
      "endReason": "completed",
      "todos": { "total": 3, "completed": 3, "inProgress": 0, "pending": 0 },
      "goal": { "id": "g_abc", "phase": "active", "revision": 2 },
      "verdict": { "planComplete": "pass" }
    }
  ]
}

在第一个 turn/end 之前,工具返回 { "available": 0, "returned": 0, "receipts": [] }。

经过上面的步骤,外部校验器或编排逻辑可在任意后续 turn 读取「某轮结束时计划是否 fail-closed 通过」,而无需重放全文事件或接触私有内容。

适用场景与注意

适合:需要在会话内跨 turn 保留「每轮计划完成态」的集成方;与 veripipe 类流水线对接、在 turn/start 清空 todos 之后仍能区分完成与放弃的场景;只要计数与 goal id、不想落盘 todo 正文的合规取向。

注意:

  • 仅反映事件日志中能折叠出的状态;未调用 todo_write 的 turn 会得到 inconclusive,这是设计行为而非 bug。
  • 回执上限 50 条,更早的 turn 不会出现在投影中。
  • 开发改动 src/ 后需 npm run build 并提交 lib/(仓库已提交构建产物供安装)。

链接

dsh-veripipe 用最小增量补上 DSH 内置 todos 在 turn 边界上的可读性缺口:每轮一条、可审计、fail-closed 的完成信号,供人机或外部 verifier 在会话仍存活时读取。

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

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

小夜