新增功能(貢獻者指南)
當 OpenClaw 需要新的共享領域(例如圖像生成、視頻生成或某些未來的供應商支援的功能領域)時,請使用本指南。
規則:
- 外掛 = 所有權界線
- 功能 = 共享核心契約
不要開始就將供應商直接連接到頻道或工具。首先從定義該功能開始。
何時建立功能
Section titled “何時建立功能”當 所有 以下條件都符合時,請建立新功能:
- 多個供應商可能實作它。
- 頻道、工具或功能外掛應該在不在乎供應商的情況下使用它。
- 核心需要擁有後備、原則、設定或傳遞行為。
如果工作僅限於供應商且尚未存在共享契約,請停止並先定義契約。
- 定義類型化的核心契約。
- 新增該契約的外掛註冊。
- 新增共享的執行時期輔助程式。
- 連接一個真實的供應商外掛作為證明。
- 將功能/頻道消費者移至執行時期輔助程式。
- 新增契約測試。
- 記錄面向操作員的設定和所有權模型。
什麼放在哪裡
Section titled “什麼放在哪裡”核心:
- 請求/回應類型。
- 提供者註冊表 + 解析。
- 後備行為。
- 在巢狀物件、萬用字元、陣列項目和組合節點上,具有傳播
title/description文件中繼資料的設定架構。 - 執行時期輔助程式介面。
供應商外掛:
- 供應商 API 呼叫。
- 供應商驗證處理。
- 供應商特定的請求正規化。
- 功能實作的註冊。
功能/頻道外掛:
- 呼叫
api.runtime.*或相符的plugin-sdk/*-runtime輔助程式。 - 永遠不要直接呼叫供應商實作。
提供者與程式縫隙
Section titled “提供者與程式縫隙”當行為屬於模型提供者合約而非通用代理程式迴圈時,請使用 provider hooks。範例包括在選擇傳輸後的供應商特定請求參數、auth-profile 偏好、提示覆蓋層,以及在模型/設定檔故障後的後續容錯路由。
當行為屬於正在執行轉次的執行階段時,請使用 agent harness hooks。程式 可以將成功但無用的嘗試結果(例如空、僅推理或僅規劃的回應)進行分類,以便外部模型容錯原則可以做出重試決策。
保持這兩個縫隙狹窄:
- 核心擁有重試/容錯原則。
- 提供者外掛擁有供應商特定的請求/驗證/路由提示。
- 程式外掛擁有執行階段特定的嘗試分類。
- 第三方外掛返回提示,而不是直接變更核心狀態。
檔案檢查清單
Section titled “檔案檢查清單”對於新功能,預計會接觸到這些區域:
src/<capability>/types.tssrc/<capability>/...registry/runtime.tssrc/plugins/types.tssrc/plugins/registry.tssrc/plugins/captured-registration.tssrc/plugins/contracts/registry.tssrc/plugins/runtime/types-core.tssrc/plugins/runtime/index.tssrc/plugin-sdk/<capability>.tssrc/plugin-sdk/<capability>-runtime.ts- 一或多個套件的外掛程式套件。
- 組態、文件、測試。
實作範例:影像生成
Section titled “實作範例:影像生成”影像生成遵循標準形式:
- 核心定義
ImageGenerationProvider。 - 核心公開
registerImageGenerationProvider(...)。 - 核心公開
runtime.imageGeneration.generate(...)。 openai、google、fal和minimax外掛註冊供應商支援的實作。- 未來的供應商註冊相同的合約,而無需變更頻道/工具。
組態金鑰特意與視覺分析路由分開:
agents.defaults.imageModel分析影像。agents.defaults.imageGenerationModel生成影像。
將這兩者分開,以便容錯和原則保持明確。
審查檢查清單
Section titled “審查檢查清單”在發布新功能之前,請驗證:
- 沒有任何頻道/工具直接匯入供應商程式碼。
- 執行時期輔助程式是共享的路徑。
- 至少有一個合約測試斷言了捆綁的所有權。
- 配置文件中命名了新的模型/配置鍵。
- 外掛文件解釋了所有權邊界。
如果 PR 跳過了能力層並將供應商行為硬編碼到通道/工具中,請將其退回並先定義合約。
- Plugin internals — 能力模型、所有權、載入管線、執行時期輔助程式。
- Building plugins — 第一個外掛教學。
- SDK overview — 匯入映射和註冊 API 參考。
- Creating skills — 伴隨的貢獻者介面。