Qiushi DSH Evidence Audit:为 DeepSeek Harness 留下可本地校验的哈希链证据回执

前言

在 DeepSeek Harness(DSH)使用场景中,一个常见需求是:希望把一次运行里的关键观察点留下来,方便之后在本地核对,但不想把 prompt、工具参数、工具结果或 session ID 明文写进日志。

Qiushi DSH Evidence Audit 提供的是一个 observe-only 的 DSH Profile Bundle。它监听官方 tools/resultsession/event 扩展点,并把观察结果整理成确定性、哈希链的 JSONL 证据回执。

这是什么

下面先交代项目边界。

  • 项目名:qiushi-dsh-evidence-audit
  • 维护者:030611
  • 许可证:MIT
  • 定位:DeepSeek Harness 的 observe-only evidence audit bundle
  • 来源性质:社区维护,不是 DeepSeek 官方项目

它只作为观察者工作。它不注册模型可见工具,不修改 prompt,不转换 tool result,也不向 session 追加内容。

核心功能

这个插件主要做一件事:把 DSH 发布出来的观察事件,整理成一条本地可校验的 JSONL 证据链。

  1. 监听官方 tools/resultsession/event 扩展点。
  2. 追加确定性、哈希链的 JSONL evidence receipts。
  3. 不保存 prompt、工具参数、工具结果或 session ID 的明文。
  4. 对保留记录被修改、未触及前缀被删除、链接断裂、最后一行不完整等情况,在验证现有文件时可能使其可被检测。
  5. 可以展示这个 observer 在某个本地序列中看到了哪些事件类别和哈希。

默认回执路径是:

$DSH_HOME/evidence-audit/evidence-receipts.jsonl

如果 DSH_HOME 未设置,则默认是:

~/.dsh/evidence-audit/evidence-receipts.jsonl

每一行包含:

schemaVersion
sequence
collectedAt
previousRecordHash
recordHash

其中 recordHash 是对除自身之外所有字段做 canonical JSON 后的 SHA-256。下一行通过 previousRecordHash 指向前一行的 recordHash;第一行的 previousRecordHash 使用 null

插件启动时会校验完整现有文件。如果某一行、sequence、record hash 或 previous-hash link 无效,它会拒绝继续追加。

安装与启用

前置条件是:

Node.js: ^22.19.0 || >=24.0.0
DSH installation: built from the tested commit

先执行安装。以 web profile 为例:

dsh plugin --profile web add qiushi-dsh-evidence-audit

如果你使用的是其他 profile,可以使用通用形式:

dsh plugin --profile <profile> add qiushi-dsh-evidence-audit

安装后,下面这条命令用于检查插件是否已经进入当前 profile 的配置:

dsh --profile <profile> --dump-config

配置输出中应能看到一行 id 为 qiushi-evidence-audit、name 为 qiushi-dsh-evidence-audit 的记录。

默认回执会写入:

$DSH_HOME/evidence-audit/evidence-receipts.jsonl

如果 DSH_HOME 未设置,则写入:

~/.dsh/evidence-audit/evidence-receipts.jsonl

如果要从当前 profile 移除这个 bundle,可以执行:

dsh plugin --profile <profile> remove qiushi-dsh-evidence-audit

如果你是从 DSH 源码 checkout 运行,按照该 checkout 的文档把 dsh 替换为对应的启动器,例如文档中的 pnpm dsh 启动方式。

回执里记录了什么

session-event receipt 保存的是经过哈希或可审计类别的字段,包括:

  • 经过哈希的 session ID
  • event type
  • event sequence
  • event time
  • event data hash
  • 可选的 ignorable 标记

tool-result receipt 保存的是:

  • tool name
  • 经过哈希的 call ID、root-call ID、session ID
  • argument hash
  • final outcome hash
  • error flag
  • parent-presence flag
  • 可选 error code

这里需要强调:eventDataHashargumentsHashoutcomeHash 不是脱敏、加密、数字签名,也不是外部信任锚。JSONL 文件不保存观察到的明文,但接收文件本身仍应作为敏感伪匿名数据处理。

它不能证明什么

这个插件的能力边界很清楚。

它可以让你看到 observer 在本地序列中记录了哪些事件类别和哈希,也可以让现有证据链中的部分异常在验证时显现。但它不能证明:

  • 某个命令是否正确运行
  • 某个结果是否真实
  • 文件由谁产生
  • 一个合法后缀是否曾经被删除

另外,事件类型和工具名仍然是可读的,因为它们是稳定的审计类别。

tools/resultsession/event 这两个 feed 不做去重。DSH 可能先通过 tools/result 发布一次逻辑工具结果,之后又通过 session/event 作为 tool/result 事件持久化。这种情况下,这个插件会分别写入两条 receipt,描述两次观察。不要把这些 receipt 直接相加为独立的工具执行次数。

兼容性

这个版本的兼容性声明比较窄:它针对 deepseek-ai/deepseek-harness 的 commit 47f943859bef60e4160492346772ded9b24f765a,测试日期为 2026-08-13。

这是一个 commit-pinned 声明,不是对 npm release 0.0.1-rc.1、未来 DSH commits 或某个 semver range 的承诺。

输出覆盖

如果你需要覆盖默认输出位置,覆盖路径必须使用绝对路径。

后续 profile patch 会替换完整行配置。因此如果要修改输出配置,需要保留原 row name,并提供完整配置,而不是只提供单个字段。

适用场景与注意

它适合希望在 DSH 本地运行中保留一条可校验观察链,同时避免把 prompt、工具参数、工具结果和 session ID 明文落盘的使用者。

使用前注意以下几点:

  1. 它是社区维护项目,不是 DeepSeek 官方项目。
  2. 插件以当前 dsh 进程权限运行。安装前应检查源码和 MIT 许可证。
  3. 回执文件应作为敏感伪匿名数据保护。
  4. 不要把哈希当作脱敏、加密、数字签名或外部信任锚。
  5. 两个事件 feed 不去重,回执数量不能直接当作独立工具执行次数。
  6. 插件启动时会验证完整现有文件。若启动阶段发现路径问题或已有链条损坏,插件会直接失败,而不是静默丢弃审计记录。
  7. 运行时的主要开销包括 canonical serialization、SHA-256、每条观察记录的同步追加 I/O,以及插件启动时的完整链条验证。

结尾

Qiushi DSH Evidence Audit 做的事情比较克制:它不改模型输入,不改工具结果,也不替 DSH 做执行判断。它只把 DSH 暴露出来的观察事件,整理成一条本地可校验的哈希链 JSONL。

如果你需要在 DSH 里保留一条不含明文敏感内容的本地证据链,可以按上面的步骤安装并验证配置,然后检查默认回执文件是否符合预期。

项目源码:

https://github.com/030611/qiushi-dsh-evidence-audit
羽毛球分组比赛记分
小程序二维码

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

小夜