前言¶
在 DSH(DeepSeek Harness)里做多 agent 协作时,常见摩擦不是「代码写错」,而是双方对「做完了」的定义不一致:实现者说跑过了,验收者事后放宽门槛,或把真实失败包装成环境问题再重试。口头约定和事后补测很难审计,也挡不住判据或脚本在冻结后被悄悄改掉。
下面介绍社区工作流插件 dsh-oracle-gate(维护者 CresBigB)。它把顺序反过来:先把验收判据落成带哈希的不可变文件,之后每次执行只能按冻结过的判据 id 进行,裁决依据代码记账的回执,而不是任何人的自我评价。插件当前版本 0.2.0,许可证 MIT,需在 DSH 宿主中加载,不能独立用 node 直接当普通库跑全套工具链。
这是什么¶
dsh-oracle-gate 是 DSH 的验收准入闸门插件。README 用一句话概括目标:让「做完了」这件事不再由做的人说了算。
- 目录页:https://www.skillhub.cn/plugins/CresBigB/dsh-oracle-gate
- 源码:https://github.com/CresBigB/dsh-oracle-gate
- 分类:工作流(SkillHub 归类)
DSH 生态的理念是「一切皆插件」;SkillHub 等社区目录是独立站点,与 DeepSeek / 幻方无官方从属关系。安装前建议自行阅读源码与许可证,并理解插件在宿主进程内运行时的权限边界(见下文「适用场景与注意」)。
核心机制¶
插件用四步流程,每一步对应一类常见「作弊路径」。
1. 冻结 oracle_gate_freeze¶
判据写入 <workspace>/.protocol-kit/<run_id>/oracles.json,并记录内容哈希。冻结后:
- 同一
run_id不能再次冻结 - 判据引用的每个本地文件(脚本、数据、基线)记下
sha256与字节数 - 可在尚未写实现代码之前就定死门槛
支持直接传 oracles,或传 acceptance 由 src/kernel/compile.js 编译;dry_run 只编译不落盘。
2. 执行 oracle_gate_exec¶
只接受判据 id,不接受临时指定的命令。执行前校验判据文件哈希,以及引用文件的哈希;任一项不匹配则拒绝执行(不是警告)。预算在预留阶段消耗,失败不退。
3. 裁决 oracle_gate_gate¶
区分「真实执行回执」与「人工 / LLM 评审结论」,再统一裁决。四种结果:
| 裁决 | 含义 |
|---|---|
pass |
全部可执行判据通过,人工判据也有明确结论 |
rejected |
硬失败(退出码、超时等);人工评审传 pass 也拦不住 |
insufficient-evidence |
证据不足:缺回执、缺引用 |
blocked-on-human |
在等人,不算失败 |
人工判据须以结构化形式传入,并带 evidence_refs;无引用则视为未过。
4. 归因 oracle_gate_failures¶
失败类型绑定固定回退目标,例如 requirement-misread → clarify、implementation → implement、oracle-gamed → freeze、infrastructure → no-replay 等,避免所有失败都当成再实现一遍。
README 中记录了两类实测:冻结后篡改判据脚本会被文件哈希拒绝执行;判据硬失败时即使人工传 verdict: "pass",裁决仍为 rejected。
工具清单¶
共 12 个工具,统一前缀 oracle_gate_。不确定下一步时,可先调只读总入口 oracle_gate:扫描台账,列出各 run 的裁决状态与建议的下一步。
| 类别 | 工具 | 作用 |
|---|---|---|
| 总入口 | oracle_gate |
验收台账;无参数时缺省用当前目录 |
| 执行内核 | oracle_gate_freeze / exec / gate / failures |
冻结、执行、裁决、失败归因 |
| 进度 | oracle_gate_status |
run 进度、判据通过/失败/未跑、预算桶、下一步建议(只读) |
| 设计 | oracle_gate_inventory / design / run / domain |
资产盘点、P1–P4 决策协议、领域包 |
| 数值 | oracle_gate_numeric |
曲线比较(相对误差、覆盖率等;不记账不裁决) |
| 诊断 | oracle_gate_ping |
版本、挂载配置、服务可见性自检 |
领域包(backend、frontend、numeric、architecture)只影响设计阶段注入的视角;执行内核不依赖领域包。
安装与启用¶
⚠️ 这是 DSH 插件,不能独立运行。需要 DSH 宿主环境,由宿主解析 @deepseek-ai/dsh-tools;直接 node import 找不到该模块属正常现象。要求 Node.js ≥ 22。
package.json 中 peerDependencies 为 @deepseek-ai/dsh-tools: >=0.2.0-rc.2 <0.3.0-0。若区间未覆盖宿主当前内核版本,插件会被静默跳过(无报错、工具消失)——安装后若工具不出现,应对照同 profile 下其它插件与宿主版本是否在区间内。
官方 README 给出的安装步骤如下(link: 指向源码目录,改代码即时生效):
git clone https://github.com/CresBigB/dsh-oracle-gate.git
cd ~/.dsh/profiles/desktop
corepack pnpm add "link:/abs/path/to/dsh-oracle-gate"
然后把 "dsh-oracle-gate" 加入该 profile 目录下 package.json 的 dsh.profile.bundles 数组,并重启 DSH Desktop。不同平台 profile 目录可能不同,示例路径为 ~/.dsh/profiles/desktop。
典型用法¶
快速开始遵循「先冻结 → 再执行 → 再裁决 → 随时查状态」。下面示例来自 README(路径需换成你的绝对路径):
// 1. 冻结:先把门槛定死
oracle_gate_freeze({
root: "/abs/path/to/project",
run_id: "add-pagination",
acceptance: [
{ criterion: "类型检查通过", level: "L0", check: "npx tsc --noEmit" },
{ criterion: "分页行为正确", level: "L1", check: "npm test -- pagination" },
{ criterion: "代码风格一致", level: "L2" }
]
})
// 2. 执行
oracle_gate_exec({ root: "...", run_id: "add-pagination", oracle_id: "L0-typecheck" })
// 3. 裁决
oracle_gate_gate({
root: "...",
run_id: "add-pagination",
reviews: [{ oracle_id: "L2-style", verdict: "pass", veto: false, evidence_refs: ["src/table.tsx:12"] }]
})
// 4. 看进度
oracle_gate_status({ root: "...", run_id: "add-pagination" })
产物落在 .protocol-kit/<run_id>/:
oracles.json # 冻结判据(含哈希)
ledger.jsonl # 预算账本
receipts/ # 执行回执
failures.jsonl # 失败归因
均为纯文本,可用 git diff 审计。若只想理解设计,可不安装,直接阅读 src/kernel/ 与 src/tools/ 下的 ESM 源码。
设计边界与安全¶
能做到的(README 列举):判据冻结后不可 silent 修改;执行仅按 id;硬门优先于人工评审;预算预留即消耗;产物可审计。
做不到的:判据 import 的模块不在文件锁内;无法判断判据本身是否合理;无法阻止冻结之前就把门槛定得很低——保证的是「定下来之后不能改」。
安全方面:插件运行在宿主进程内,拥有完整 Node 权限,没有沙箱。写文件限制在 <root>/.protocol-kit/;不发起网络请求;不读 root 外路径;不记录密钥、令牌。安装前仍应通读 src/ 与 cordis.patch.yml,确认符合你的安全策略。
测试与维护¶
仓库内测试:
npm test
README 说明为 10 个测试文件、19 个用例,覆盖内核、裁决、状态、数值比较、领域包校验、文件锁;使用本地临时目录,不联网。
问题与贡献可走 GitHub Issues:https://github.com/CresBigB/dsh-oracle-gate/issues。
结尾¶
dsh-oracle-gate 适合需要在 agent 工作流里把「验收标准」和「执行证据」绑死、且可审计的团队:先 freeze,再 exec 与 gate,用台账工具跟进状态。它不能替代「判据写得好不好」的产品判断,但能减少事后改门槛、改脚本、口头通过这类协作损耗。