To jest przewodnik dla kontrybutorów dla deweloperów rdzenia OpenClaw. Jeśli
tworzysz zewnętrzny plugin, zobacz zamiast tego Tworzenie pluginów.
Głęboką dokumentację architektury (model możliwości, własność,
potok ładowania, pomocniki runtime) znajdziesz w Wewnętrznych mechanizmach Pluginów.
- plugin = granica własności
- możliwość = współdzielony kontrakt rdzenia
Kiedy utworzyć możliwość
Utwórz nową możliwość, gdy wszystkie poniższe warunki są prawdziwe:- Więcej niż jeden dostawca mógłby wiarygodnie ją zaimplementować.
- Kanały, narzędzia albo pluginy funkcji powinny móc z niej korzystać bez przejmowania się dostawcą.
- Rdzeń musi posiadać zachowanie awaryjnego przełączania, polityki, konfiguracji albo dostarczania.
Standardowa sekwencja
- Zdefiniuj typowany kontrakt rdzenia.
- Dodaj rejestrację pluginu dla tego kontraktu.
- Dodaj współdzielony pomocnik runtime.
- Podłącz jeden rzeczywisty plugin dostawcy jako dowód.
- Przenieś konsumentów funkcji/kanałów na pomocnik runtime.
- Dodaj testy kontraktu.
- Udokumentuj konfigurację widoczną dla operatora i model własności.
Co trafia gdzie
Rdzeń:- Typy żądań/odpowiedzi.
- Rejestr dostawców + rozwiązywanie.
- Zachowanie awaryjnego przełączania.
- Schemat konfiguracji z propagowanymi metadanymi dokumentacji
title/descriptionw węzłach obiektów zagnieżdżonych, wieloznacznych, elementów tablic i kompozycji. - Powierzchnia pomocnika runtime.
- Wywołania API dostawcy.
- Obsługa uwierzytelniania dostawcy.
- Normalizacja żądań specyficzna dla dostawcy.
- Rejestracja implementacji możliwości.
- Wywołuje
api.runtime.*albo pasujący pomocnikplugin-sdk/*-runtime. - Nigdy nie wywołuje bezpośrednio implementacji dostawcy.
Punkty rozszerzeń dostawcy i harnessa
Używaj haków dostawcy, gdy zachowanie należy do kontraktu dostawcy modelu, a nie do ogólnej pętli agenta. Przykłady obejmują parametry żądań specyficzne dla dostawcy po wyborze transportu, preferencję profilu uwierzytelniania, nakładki promptów i routing awaryjny kolejnej próby po awarii modelu/profilu. Używaj haków harnessa agenta, gdy zachowanie należy do runtime wykonującego turę. Harnessy mogą klasyfikować jawne wyniki protokołu, takie jak pusty wynik, rozumowanie bez widocznego wyniku albo ustrukturyzowany plan bez ostatecznej odpowiedzi, aby zewnętrzna polityka awaryjnego przełączania modelu mogła podjąć decyzję o ponowieniu próby. Utrzymuj oba punkty rozszerzeń wąskie:- Rdzeń posiada politykę ponawiania/awaryjnego przełączania.
- Pluginy dostawców posiadają wskazówki specyficzne dla dostawcy dotyczące żądań/uwierzytelniania/routingu.
- Pluginy harnessów posiadają klasyfikację prób specyficzną dla runtime.
- Pluginy firm trzecich zwracają wskazówki, a nie bezpośrednie mutacje stanu rdzenia.
Lista kontrolna plików
Dla nowej możliwości spodziewaj się dotknąć tych obszarów: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- Jeden albo więcej pakietów bundlowanych pluginów.
- Konfiguracja, dokumentacja, testy.
Przykład: generowanie obrazów
Generowanie obrazów ma standardowy kształt:- Rdzeń definiuje
ImageGenerationProvider. - Rdzeń udostępnia
registerImageGenerationProvider(...). - Rdzeń udostępnia
runtime.imageGeneration.generate(...). - Pluginy
openai,google,faliminimaxrejestrują implementacje wspierane przez dostawców. - Przyszli dostawcy rejestrują ten sam kontrakt bez zmieniania kanałów/narzędzi.
agents.defaults.imageModelanalizuje obrazy.agents.defaults.imageGenerationModelgeneruje obrazy.
Dostawcy embeddingów
UżywajembeddingProviders dla dostawców embeddingów wektorowych wielokrotnego użytku. Ten kontrakt
jest celowo szerszy niż pamięć: narzędzia, wyszukiwanie, pobieranie, importery albo
przyszłe pluginy funkcji mogą korzystać z embeddingów bez zależności od silnika
pamięci.
Wyszukiwanie w pamięci może korzystać z ogólnych embeddingProviders. Starszy
kontrakt memoryEmbeddingProviders jest przestarzałą kompatybilnością, podczas gdy istniejący
dostawcy specyficzni dla pamięci migrują; nowi dostawcy embeddingów wielokrotnego użytku powinni używać
embeddingProviders.
Lista kontrolna przeglądu
Przed wysłaniem nowej możliwości zweryfikuj:- Żaden kanał/narzędzie nie importuje bezpośrednio kodu dostawcy.
- Pomocnik runtime jest współdzieloną ścieżką.
- Co najmniej jeden test kontraktu potwierdza bundlowaną własność.
- Dokumentacja konfiguracji nazywa nowy model/klucz konfiguracji.
- Dokumentacja pluginu wyjaśnia granicę własności.
Powiązane
- Wewnętrzne mechanizmy Pluginów — model możliwości, własność, potok ładowania, pomocniki runtime.
- Tworzenie pluginów — samouczek pierwszego pluginu.
- Przegląd SDK — mapa importów i dokumentacja API rejestracji.
- Tworzenie Skills — towarzysząca powierzchnia kontrybutora.