dsh-proof:用项目自检与工作区指纹,把「已完成」变成可验证证据

前言

在 DeepSeek Harness(DSH)里让模型改代码、跑检查,常见困境是:模型会宣称「测试都过了」,你很难区分这是复述还是真跑过;同一会话里上午验证通过,下午又改了一堆文件,旧结论却还在;换一个新会话,也查不到上次验证做到哪一步。社区插件目录里记忆、模型接入、UI 类插件很多,但专门把「验证」做成一次有据可查操作的并不多——主观打分类插件还会额外消耗 token。

下面介绍维护者 xwtxbzz 发布在工作流分类下的 dsh-proof(目录标识 xwtxbzz/dsh-proof):调用一次 proof,得到真实退出码、失败时的输出尾部,以及工作区指纹;指纹一变,上一次的「通过」会被判为过期(stale),不再当作完成证据。

这是什么

dsh-proof 是 DSH 服务端插件,只做一件事:把「验证」变成可复现、可落盘、可跨会话查询的操作。它不接管上下文、不计费、不改 UI;检查命令来自项目自身(如 typecheck、lint、test、build),而不是插件自造一套判定标准。

维护者:xwtxbzz。分类:工作流。社区目录页:SkillHub - dsh-proof。源码与文档:GitHub - xwtxbzz/dsh-proof(安装说明以目录页与仓库 README 为准;包尚未发布到 npm)。

核心功能

执行项目检查并返回结构化结果

工具 proof 与斜杠命令 /proof 会按配置或自动探测结果,在工作区里执行检查命令。默认动作为 run:执行并记录;status 只读上次结论并判断是否过期。

返回值形如 { ok, report, data }:report 供人阅读的多行摘要;data 供程序使用,含每项检查的 exitCode、timedOut、durationMs、tail,以及指纹与变动文件信息。失败时 ok 为 false,需结合失败项与报错原文处理,而不是口头「已通过」。

工作区指纹与 stale

有 git 时,指纹由 rev-parse HEAD 与 git status --porcelain 组合后哈希;无 git 时对工作区文件路径、大小、mtime 做遍历哈希(会跳过 node_modules、dist 等常见目录)。上次记录的指纹与当前不一致时,stale 为 true:即便上次每项都 exit 0,status 也会把 ok 置为 false,强制重新跑检查。插件状态目录默认在 ~/.dsh/proof,且会从指纹计算中排除,避免「写状态」误伤指纹。

自动探测与配置

/proof init 会探测项目可用检查并写出工作区根目录下的 dsh-proof.json(已存在则拒绝覆盖)。探测顺序包括:package.json 中的 typecheck → lint → test → build(按 lockfile 选包管理器)、Cargo.toml、go.mod、pytest/Makefile 等;探测不到则返回「未验证」,不会假装通过。

可选配置键(dsh-proof.json 或 cordis.patch.yml 的 config)包括:autoDetect、checks、timeoutMs(默认 600000)、tailLines(默认 30)、workspace、stateDir、policy(为 true 时在系统提示末尾注入「完成证据」契约,要求模型在宣称完成前调用 proof)。

安装与启用

当前推荐从 GitHub 安装(文档注明尚未发布到 npm,勿用未在资料中出现的 dsh plugin add dsh-proof 形式):

dsh plugin --profile desktop add "git+https://github.com/xwtxbzz/dsh-proof.git"

手工挂载时需把包装进 profile 的 node_modules,并确认 package.json 里 dsh.profile.bundles 含 "dsh-proof",否则 bundle patch 不会加载。安装后需重启 DSH(服务端插件仅在启动时装载)。新会话中应能看到斜杠命令 /proof,且启用 policy 时系统提示末尾会出现完成证据相关契约。

本地开发可参考目录页上的 file: 路径安装方式;路径需换成你本机克隆或拷贝的目录。

典型用法

先做初始化,再查看配置,然后执行一遍检查:

/proof init
/proof config
/proof run

示例输出形态(目录页文档):汇总通过项数、工作区路径、指纹(git 短 hash 与时间戳),以及每项名称、实际命令、耗时与 exit code。改代码后再查状态:

/proof status

若工作区自上次验证后有变动,会提示上一轮验证已过期,旧结果不算证据。

/proof run 可带检查名称,只跑部分项。模型侧在契约开启时,应在宣称任务完成前调用 proof;失败时需引用失败项与输出尾部。

dsh-proof.json 示例(/proof init 生成后可手工修改):

{
  "checks": [
    { "name": "typecheck", "command": "pnpm run typecheck" },
    { "name": "test", "command": "pnpm run test", "timeoutMs": 900000 }
  ],
  "timeoutMs": 600000,
  "tailLines": 30
}

工具 proof 还支持参数:action(run | status)、checks(名称过滤)、cwd(覆盖工作区根)。

适用场景与注意

适合谁: 在 DSH 里做代码修改、希望模型「完成」有客观依据的开发者;希望复用仓库已有 npm/Cargo/Go 等脚本而不是另建一套 CI 插件逻辑的团队。

权限与安全: 插件会执行 dsh-proof.json 或配置里写的 shell 命令,行为与你在该工作区手动跑脚本相当;它以当前 DSH 进程的用户权限运行。安装前应阅读源码与 MIT 许可证(目录页注明),只在受信工作区启用。文档说明其不联网、不改仓库文件、不提升权限,也不绕过 DSH 审批策略;超时会对进程树尽力终止(Windows 用 taskkill,Unix 用 SIGKILL),避免会话被挂死。

生态说明: DSH 采用「一切皆插件」的扩展方式;SkillHub 等社区目录由第三方维护,与 DeepSeek / 幻方无官方从属关系,本文仅作插件能力说明,而非官方应用商店条目。

排障要点: 斜杠命令里没有 /proof 时,检查 bundles 是否包含 dsh-proof 并重启 DSH;报「没有可用的验证命令」时用 /proof init 或手工配置 checks;若频繁 stale,检查是否有产物目录被纳入指纹;临时关闭契约可设 policy: false,工具与命令仍可用。

结尾

dsh-proof 把「跑项目自己的检查」和「指纹过期则证据失效」绑在一起,适合在 DSH 工作流里减少「说完成但未验证」的情况。进一步参数与 market 对比见仓库内 docs/market-comparison.md。

  • 目录页:https://www.skillhub.cn/plugins/xwtxbzz/dsh-proof
  • GitHub:https://github.com/xwtxbzz/dsh-proof
羽毛球分组比赛记分
小程序二维码

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

小夜