cmd/opencodereview/delegate_cmd.go — 委託模式

preview + rule 子命令,輸出結構化 JSON 給宿主 Agent
檔案:cmd/opencodereview/delegate_cmd.go(10,084 bytes)

大方向

delegate_cmd.go 定義 ocr delegate。這是 OCR「把 LLM 推理交給宿主 Agent」的橋樑:OCR 只做確定性工程(檔案篩選、規則解析),把「可評審檔案清單 + 每檔規則 + ref 元資料」輸出成結構化 JSON,讓 Claude Code / OpenCode 等宿主用自己的 LLM 做評審。核心是 previewrule 兩個子命令,全程不呼叫任何 LLM


1. 上下文載入

delegateContext 結構 · loadDelegateContext() delegate_cmd.go載入 diff provider、規則 resolver、模式資訊。

delegateContext 聚合 delegate 需要的元件:diff.Provider(從 --from/--to/--commit 建構)、rules.Resolver(從 --rule 建構)、模式與 merge-base。它是 preview 與 rule 兩個子命令共享的「載入一次」邏輯。

2. Preview 子命令

executeDelegatePreview() · previewFiles() delegate_cmd.go輸出可評審檔案清單 + mode/ref 元資料。

preview(ctx) 呼叫 agent 的 diff preview(過濾後的可評審檔案),previewFiles[]model.Diff 轉成 []delegatePreviewFileJSON(path、status、插入/刪除行數),reviewable 旗標標記哪些檔實際會送評。輸出經 writeDelegateJSON 序列化。

delegateSchemaVersion · delegatePreviewJSON delegate_cmd.go版本化的輸出 schema。

delegateSchemaVersion = "1" 讓輸出結構可以版本演進而不破壞宿主 Agent 的解析。這是「給另一個 agent 吃的 API」該有的設計——schema 版本化 + 純 JSON stdout。

3. Rule 子命令

executeDelegateRule() · ruleGroupsJSON() delegate_cmd.go依規則內容分組輸出每檔適用的評審規則。

傳入 Step 1 的檔案路徑,OCR 依「共享相同規則的檔案歸為一組」輸出 []delegateRuleGroupJSON——避免重複貼規則給宿主。規則來自四層鏈(見 internal/config/rules)。

4. 共用邏輯

mergeBase() · reviewMode() · resolver() delegate_cmd.godelegateContext 的存取方法。

mergeBase 回傳 range 模式的 merge-base SHA(宿主用 git diff 需要它);reviewMode 回傳 workspace/range/commit;resolver 回傳規則解析器。這些是 Step 3(取 diff)與 Step 2(取規則)的依據。

看完這頁你應該能說出:delegate 為何「全程零 LLM」、preview 與 rule 兩個子命令各輸出什麼、schema 版本化為何重要、以及 merge-base 如何幫宿主取正確的 diff。

延伸閱讀:委託模式文件 · internal/agent