前言¶
在 DeepSeek Harness(DSH)使用场景中,一个常见需求是:希望把一次运行里的关键观察点留下来,方便之后在本地核对,但不想把 prompt、工具参数、工具结果或 session ID 明文写进日志。
Qiushi DSH Evidence Audit 提供的是一个 observe-only 的 DSH Profile Bundle。它监听官方 tools/result 和 session/event 扩展点,并把观察结果整理成确定性、哈希链的 JSONL 证据回执。
这是什么¶
下面先交代项目边界。
- 项目名:
qiushi-dsh-evidence-audit - 维护者:
030611 - 许可证:MIT
- 定位:DeepSeek Harness 的 observe-only evidence audit bundle
- 来源性质:社区维护,不是 DeepSeek 官方项目
它只作为观察者工作。它不注册模型可见工具,不修改 prompt,不转换 tool result,也不向 session 追加内容。
核心功能¶
这个插件主要做一件事:把 DSH 发布出来的观察事件,整理成一条本地可校验的 JSONL 证据链。
- 监听官方
tools/result和session/event扩展点。 - 追加确定性、哈希链的 JSONL evidence receipts。
- 不保存 prompt、工具参数、工具结果或 session ID 的明文。
- 对保留记录被修改、未触及前缀被删除、链接断裂、最后一行不完整等情况,在验证现有文件时可能使其可被检测。
- 可以展示这个 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
这里需要强调:eventDataHash、argumentsHash 和 outcomeHash 不是脱敏、加密、数字签名,也不是外部信任锚。JSONL 文件不保存观察到的明文,但接收文件本身仍应作为敏感伪匿名数据处理。
它不能证明什么¶
这个插件的能力边界很清楚。
它可以让你看到 observer 在本地序列中记录了哪些事件类别和哈希,也可以让现有证据链中的部分异常在验证时显现。但它不能证明:
- 某个命令是否正确运行
- 某个结果是否真实
- 文件由谁产生
- 一个合法后缀是否曾经被删除
另外,事件类型和工具名仍然是可读的,因为它们是稳定的审计类别。
tools/result 和 session/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 明文落盘的使用者。
使用前注意以下几点:
- 它是社区维护项目,不是 DeepSeek 官方项目。
- 插件以当前 dsh 进程权限运行。安装前应检查源码和 MIT 许可证。
- 回执文件应作为敏感伪匿名数据保护。
- 不要把哈希当作脱敏、加密、数字签名或外部信任锚。
- 两个事件 feed 不去重,回执数量不能直接当作独立工具执行次数。
- 插件启动时会验证完整现有文件。若启动阶段发现路径问题或已有链条损坏,插件会直接失败,而不是静默丢弃审计记录。
- 运行时的主要开销包括 canonical serialization、SHA-256、每条观察记录的同步追加 I/O,以及插件启动时的完整链条验证。
结尾¶
Qiushi DSH Evidence Audit 做的事情比较克制:它不改模型输入,不改工具结果,也不替 DSH 做执行判断。它只把 DSH 暴露出来的观察事件,整理成一条本地可校验的哈希链 JSONL。
如果你需要在 DSH 里保留一条不含明文敏感内容的本地证据链,可以按上面的步骤安装并验证配置,然后检查默认回执文件是否符合预期。
项目源码:
https://github.com/030611/qiushi-dsh-evidence-audit