前言¶
在 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,用臺賬工具跟進狀態。它不能替代「判據寫得好不好」的產品判斷,但能減少事後改門檻、改腳本、口頭通過這類協作損耗。