Plugin SDK reference
Manifest Pluginu
Ta strona opisuje natywny manifest pluginu OpenClaw, openclaw.plugin.json. Informacje o zgodnych układach pakietów (Codex, Claude, Cursor) zawiera sekcja Pakiety pluginów.
Zgodne formaty pakietów używają zamiast niego własnych plików manifestu:
- Pakiet Codex:
.codex-plugin/plugin.json - Pakiet Claude:
.claude-plugin/plugin.jsonlub domyślny układ komponentów Claude bez manifestu - Pakiet Cursor:
.cursor-plugin/plugin.json
OpenClaw automatycznie wykrywa te układy, ale nie weryfikuje ich względem poniższego schematu openclaw.plugin.json. W przypadku zgodnego pakietu OpenClaw odczytuje metadane pakietu, zadeklarowane katalogi główne umiejętności, katalogi główne poleceń Claude, domyślne wartości settings.json Claude, domyślne wartości LSP Claude oraz obsługiwane pakiety hooków, jeśli układ odpowiada wymaganiom środowiska uruchomieniowego OpenClaw.
Każdy natywny plugin OpenClaw musi zawierać openclaw.plugin.json w katalogu głównym pluginu. OpenClaw odczytuje go, aby zweryfikować konfigurację bez wykonywania kodu pluginu. Brakujący lub nieprawidłowy manifest blokuje walidację konfiguracji i jest traktowany jako błąd pluginu.
Pełny przewodnik po systemie pluginów zawiera strona Pluginy, a opis natywnego modelu możliwości i aktualne wytyczne dotyczące zgodności zewnętrznej — strona Model możliwości.
Do czego służy ten plik
openclaw.plugin.json zawiera metadane odczytywane przez OpenClaw przed załadowaniem kodu pluginu. Sprawdzenie wszystkich zawartych w nim danych musi być na tyle tanie, aby nie wymagało uruchamiania środowiska wykonawczego pluginu.
Należy go używać do:
- tożsamości pluginu, walidacji konfiguracji i wskazówek interfejsu konfiguracji
- metadanych uwierzytelniania, wdrażania i konfiguracji (aliasu, automatycznego włączania, zmiennych środowiskowych dostawcy i metod uwierzytelniania)
- wskazówek dotyczących aktywacji dla powierzchni płaszczyzny sterowania
- własności skróconych rodzin modeli
- statycznych migawek własności możliwości (
contracts) - metadanych narzędzia uruchamiającego QA, które może sprawdzać współdzielony host
openclaw qa - metadanych konfiguracji specyficznych dla kanałów, scalanych z katalogiem i powierzchniami walidacji
Nie należy go używać do: rejestrowania zachowania w czasie wykonywania, deklarowania punktów wejścia kodu ani przechowywania metadanych instalacji npm. Należą one do kodu pluginu i pliku package.json.
Minimalny przykład
{ "id": "voice-call", "configSchema": { "type": "object", "additionalProperties": false, "properties": {} }}Rozbudowany przykład
{ "id": "openrouter", "name": "OpenRouter", "description": "Plugin dostawcy OpenRouter", "version": "1.0.0", "providers": ["openrouter"], "modelSupport": { "modelPrefixes": ["router-"] }, "modelIdNormalization": { "providers": { "openrouter": { "prefixWhenBare": "openrouter" } } }, "providerEndpoints": [ { "endpointClass": "openrouter", "hostSuffixes": ["openrouter.ai"] } ], "providerRequest": { "providers": { "openrouter": { "family": "openrouter" } } }, "cliBackends": ["openrouter-cli"], "syntheticAuthRefs": ["openrouter-cli"], "setup": { "providers": [ { "id": "openrouter", "envVars": ["OPENROUTER_API_KEY"] } ] }, "providerAuthAliases": { "openrouter-coding": "openrouter" }, "channelEnvVars": { "openrouter-chatops": ["OPENROUTER_CHATOPS_TOKEN"] }, "providerAuthChoices": [ { "provider": "openrouter", "method": "api-key", "choiceId": "openrouter-api-key", "choiceLabel": "Klucz API OpenRouter", "groupId": "openrouter", "groupLabel": "OpenRouter", "optionKey": "openrouterApiKey", "cliFlag": "--openrouter-api-key", "cliOption": "--openrouter-api-key <key>", "cliDescription": "Klucz API OpenRouter", "onboardingScopes": ["text-inference"] } ], "uiHints": { "apiKey": { "label": "Klucz API", "placeholder": "sk-or-v1-...", "sensitive": true } }, "configSchema": { "type": "object", "additionalProperties": false, "properties": { "apiKey": { "type": "string" } } }}Opis pól najwyższego poziomu
| Pole | Wymagane | Typ | Znaczenie |
|---|---|---|---|
id |
Tak | string |
Kanoniczny identyfikator pluginu. Jest to identyfikator używany w plugins.entries.<id>. |
configSchema |
Tak | object |
Wbudowany schemat JSON konfiguracji tego pluginu. |
requiresPlugins |
Nie | string[] |
Identyfikatory pluginów, które również muszą być zainstalowane, aby ten plugin działał. Mechanizm wykrywania umożliwia załadowanie pluginu, ale ostrzega, gdy brakuje któregokolwiek wymaganego pluginu. |
enabledByDefault |
Nie | true |
Oznacza dołączony plugin jako domyślnie włączony. Pominięcie tego pola lub ustawienie dowolnej wartości innej niż true pozostawia plugin domyślnie wyłączony. |
enabledByDefaultOnPlatforms |
Nie | string[] |
Oznacza dołączony plugin jako domyślnie włączony tylko na wymienionych platformach Node.js, na przykład ["darwin"]. Jawna konfiguracja nadal ma pierwszeństwo. |
legacyPluginIds |
Nie | string[] |
Starsze identyfikatory normalizowane do tego kanonicznego identyfikatora pluginu. |
autoEnableWhenConfiguredProviders |
Nie | string[] |
Identyfikatory dostawców, które powinny automatycznie włączać ten plugin, gdy odwołania do uwierzytelniania, konfiguracji lub modeli je wymieniają. |
kind |
Nie | PluginKind | PluginKind[] |
Deklaruje co najmniej jeden wyłączny rodzaj pluginu ("memory", "context-engine") używany przez plugins.slots.*. Plugin będący właścicielem obu miejsc deklaruje oba rodzaje w jednej tablicy. |
channels |
Nie | string[] |
Identyfikatory kanałów należących do tego pluginu. Używane do wykrywania i walidacji konfiguracji. |
providers |
Nie | string[] |
Identyfikatory dostawców należących do tego pluginu. |
providerCatalogEntry |
Nie | string |
Ścieżka lekkiego modułu katalogu dostawcy, względna wobec katalogu głównego pluginu, zawierającego metadane katalogu dostawców ograniczone do manifestu, które można załadować bez aktywowania pełnego środowiska wykonawczego pluginu. |
modelSupport |
Nie | object |
Należące do manifestu metadane skróconej rodziny modeli, używane do automatycznego ładowania pluginu przed uruchomieniem środowiska wykonawczego. |
modelCatalog |
Nie | object |
Deklaratywne metadane katalogu modeli dla dostawców należących do tego pluginu. Jest to kontrakt płaszczyzny sterowania dla przyszłych list tylko do odczytu, wdrażania, selektorów modeli, aliasów i wykluczania bez ładowania środowiska wykonawczego pluginu. |
modelPricing |
Nie | object |
Należąca do dostawcy polityka wyszukiwania zewnętrznych cen. Służy do wykluczania lokalnych lub samodzielnie hostowanych dostawców ze zdalnych katalogów cen albo mapowania odwołań dostawców na identyfikatory katalogów OpenRouter/LiteLLM bez wpisywania identyfikatorów na stałe w rdzeniu. |
modelIdNormalization |
Nie | object |
Należące do dostawcy oczyszczanie aliasów lub prefiksów identyfikatorów modeli, które musi zostać wykonane przed załadowaniem środowiska wykonawczego dostawcy. |
providerEndpoints |
Nie | object[] |
Należące do manifestu metadane hosta punktu końcowego lub adresu baseUrl dla tras dostawcy, które rdzeń musi sklasyfikować przed załadowaniem środowiska wykonawczego dostawcy. |
providerRequest |
Nie | object |
Lekkie metadane rodziny dostawcy i zgodności żądań używane przez ogólną politykę żądań przed załadowaniem środowiska wykonawczego dostawcy. |
secretProviderIntegrations |
Nie | Record<string, object> |
Deklaratywne ustawienia wstępne dostawcy wykonawczego SecretRef, które interfejsy konfiguracji lub instalacji mogą oferować bez wpisywania na stałe w rdzeniu integracji specyficznych dla dostawcy. |
cliBackends |
Nie | string[] |
Identyfikatory backendów wnioskowania CLI należących do tego pluginu. Używane do automatycznej aktywacji podczas uruchamiania na podstawie jawnych odwołań w konfiguracji. |
syntheticAuthRefs |
Nie | string[] |
Odwołania do dostawcy lub backendu CLI, dla których należący do pluginu syntetyczny hak uwierzytelniania powinien zostać sprawdzony podczas wykrywania modeli na zimno przed załadowaniem środowiska wykonawczego. |
nonSecretAuthMarkers |
Nie | string[] |
Należące do dołączonego pluginu zastępcze wartości klucza API reprezentujące niepoufny stan lokalnych danych uwierzytelniających, OAuth lub danych uwierzytelniających z otoczenia. |
commandAliases |
Nie | object[] |
Nazwy poleceń należących do tego pluginu, które powinny generować diagnostykę konfiguracji i CLI uwzględniającą plugin przed załadowaniem środowiska wykonawczego. |
providerAuthEnvVars |
Nie | Record<string, string[]> |
Przestarzałe metadane zmiennych środowiskowych zgodności używane do wyszukiwania uwierzytelniania lub stanu dostawcy. W przypadku nowych pluginów preferowane jest setup.providers[].envVars; OpenClaw nadal odczytuje te dane w okresie wycofywania. |
providerUsageAuthEnvVars |
Nie | Record<string, string[]> |
Dane uwierzytelniające dostawcy używane wyłącznie do sprawdzania użycia lub rozliczeń. OpenClaw używa tych nazw do wykrywania użycia i usuwania sekretów, lecz nigdy do uwierzytelniania wnioskowania. |
providerAuthAliases |
Nie | Record<string, string> |
Identyfikatory dostawców, które powinny ponownie wykorzystywać inny identyfikator dostawcy do wyszukiwania uwierzytelniania, na przykład dostawca kodowania współdzielący klucz API i profile uwierzytelniania dostawcy bazowego. |
channelEnvVars |
Nie | Record<string, string[]> |
Lekkie metadane zmiennych środowiskowych kanału, które OpenClaw może sprawdzać bez ładowania kodu pluginu. Należy ich używać w przypadku konfiguracji kanału sterowanej zmiennymi środowiskowymi lub interfejsów uwierzytelniania, które powinny być widoczne dla ogólnych mechanizmów uruchamiania i konfiguracji. |
providerAuthChoices |
Nie | object[] |
Lekkie metadane wyboru uwierzytelniania dla selektorów wdrażania, rozpoznawania preferowanego dostawcy i prostego powiązania flag CLI. |
activation |
Nie | object |
Lekkie metadane planisty aktywacji dotyczące ładowania wyzwalanego przez uruchamianie, dostawcę, polecenie, kanał, trasę i możliwości. Są to wyłącznie metadane; środowisko wykonawcze pluginu nadal odpowiada za rzeczywiste działanie. |
setup |
Nie | object |
Lekkie deskryptory konfiguracji i wdrażania, które mechanizmy wykrywania oraz interfejsy konfiguracji mogą sprawdzać bez ładowania środowiska wykonawczego pluginu. |
qaRunners |
Nie | object[] |
Lekkie deskryptory mechanizmu uruchamiającego QA używane przez współdzielony host openclaw qa przed załadowaniem środowiska wykonawczego pluginu. |
contracts |
Nie | object |
Statyczna migawka własności możliwości dotycząca zewnętrznych haków uwierzytelniania, osadzeń, mowy, transkrypcji w czasie rzeczywistym, głosu w czasie rzeczywistym, rozumienia multimediów, generowania obrazów, wideo i muzyki, pobierania oraz wyszukiwania w sieci, dostawców procesów roboczych, wyodrębniania dokumentów i treści internetowych oraz własności narzędzi. |
configContracts |
Nie | object |
Zachowanie konfiguracji należące do manifestu, używane przez ogólne pomocnicze funkcje rdzenia: wykrywanie niebezpiecznych flag, cele migracji SecretRef oraz zawężanie starszych ścieżek konfiguracji. Zobacz dokumentację configContracts. |
mediaUnderstandingProviderMetadata |
Nie | Record<string, object> |
Niedrogie domyślne ustawienia rozpoznawania multimediów dla identyfikatorów dostawców zadeklarowanych w contracts.mediaUnderstandingProviders. |
imageGenerationProviderMetadata |
Nie | Record<string, object> |
Niedrogie metadane uwierzytelniania generowania obrazów dla identyfikatorów dostawców zadeklarowanych w contracts.imageGenerationProviders, w tym aliasy uwierzytelniania należące do dostawcy oraz zabezpieczenia bazowego adresu URL. |
videoGenerationProviderMetadata |
Nie | Record<string, object> |
Niedrogie metadane uwierzytelniania generowania wideo dla identyfikatorów dostawców zadeklarowanych w contracts.videoGenerationProviders, w tym aliasy uwierzytelniania należące do dostawcy oraz zabezpieczenia bazowego adresu URL. |
musicGenerationProviderMetadata |
Nie | Record<string, object> |
Niedrogie metadane uwierzytelniania generowania muzyki dla identyfikatorów dostawców zadeklarowanych w contracts.musicGenerationProviders, w tym aliasy uwierzytelniania należące do dostawcy oraz zabezpieczenia bazowego adresu URL. |
toolMetadata |
Nie | Record<string, object> |
Niedrogie metadane dostępności dla narzędzi należących do pluginu, zadeklarowanych w contracts.tools. Należy ich użyć, gdy narzędzie nie powinno ładować środowiska uruchomieniowego, o ile nie istnieją dane potwierdzające obecność konfiguracji, zmiennych środowiskowych lub uwierzytelniania. |
channelConfigs |
Nie | Record<string, object> |
Metadane konfiguracji kanału należące do manifestu, scalane z powierzchniami wykrywania i walidacji przed załadowaniem środowiska uruchomieniowego. |
skills |
Nie | string[] |
Katalogi Skills do załadowania, określone względem katalogu głównego pluginu. |
name |
Nie | string |
Czytelna dla człowieka nazwa pluginu. |
description |
Nie | string |
Krótkie podsumowanie wyświetlane w interfejsach pluginu. |
catalog |
Nie | object |
Opcjonalne wskazówki dotyczące prezentacji w interfejsach katalogu pluginów. Te metadane nie instalują ani nie włączają pluginu i nie nadają mu zaufania. |
icon |
Nie | string |
Adres URL obrazu HTTPS dla kart w platformie handlowej lub katalogu. ClawHub akceptuje każdy prawidłowy adres URL https:// i używa domyślnej ikony pluginu, gdy wartość zostanie pominięta lub jest nieprawidłowa. |
version |
Nie | string |
Informacyjna wersja pluginu. |
uiHints |
Nie | Record<string, object> |
Etykiety interfejsu użytkownika, teksty zastępcze i wskazówki dotyczące poufności pól konfiguracji. |
dokumentacja pól katalogu
catalog udostępnia opcjonalne wskazówki dotyczące wyświetlania w przeglądarkach pluginów. Hosty mogą je ignorować. Wskazówki te nigdy nie instalują ani nie włączają pluginu oraz nie zmieniają jego działania w czasie wykonywania ani poziomu zaufania.
{ "catalog": { "featured": true, "order": 10 }}| Pole | Typ | Znaczenie |
|---|---|---|
featured |
boolean |
Określa, czy powierzchnie katalogu powinny wyróżniać ten plugin. |
order |
number |
Rosnąca wskazówka kolejności wyświetlania wśród wyselekcjonowanych pluginów; niższe wartości pojawiają się wcześniej. |
Dokumentacja metadanych dostawcy generowania
Pola metadanych dostawcy generowania opisują statyczne sygnały uwierzytelniania dostawców zadeklarowanych na odpowiadającej im liście contracts.*GenerationProviders. OpenClaw odczytuje te pola przed załadowaniem środowiska uruchomieniowego dostawcy, aby podstawowe narzędzia mogły ustalić dostępność dostawcy generowania bez importowania każdego pluginu dostawcy.
Tych pól należy używać wyłącznie do prostych, deklaratywnych faktów. Transport, przekształcenia żądań, odświeżanie tokenów, weryfikacja danych uwierzytelniających i właściwe działanie generowania pozostają w środowisku uruchomieniowym pluginu.
{ "contracts": { "imageGenerationProviders": ["example-image"] }, "imageGenerationProviderMetadata": { "example-image": { "aliases": ["example-image-oauth"], "authProviders": ["example-image"], "configSignals": [ { "rootPath": "plugins.entries.example-image.config", "overlayPath": "image", "mode": { "path": "mode", "default": "local", "allowed": ["local"] }, "requiredAny": ["workflow", "workflowPath"], "required": ["promptNodeId"] } ], "authSignals": [ { "provider": "example-image" }, { "provider": "example-image-oauth", "providerBaseUrl": { "provider": "example-image", "defaultBaseUrl": "https://api.example.com/v1", "allowedBaseUrls": ["https://api.example.com/v1"] } } ] } }}Każdy wpis metadanych obsługuje:
| Pole | Wymagane | Typ | Znaczenie |
|---|---|---|---|
aliases |
Nie | string[] |
Dodatkowe identyfikatory dostawców, które należy traktować jako statyczne aliasy uwierzytelniania dostawcy generowania. |
authProviders |
Nie | string[] |
Identyfikatory dostawców, których skonfigurowane profile uwierzytelniania należy uznawać za uwierzytelnianie tego dostawcy generowania. |
configSignals |
Nie | object[] |
Proste sygnały dostępności oparte wyłącznie na konfiguracji dla dostawców lokalnych lub hostowanych samodzielnie, których można skonfigurować bez profili uwierzytelniania ani zmiennych środowiskowych. |
authSignals |
Nie | object[] |
Jawne sygnały uwierzytelniania. Jeśli są obecne, zastępują domyślny zestaw sygnałów pochodzący z identyfikatora dostawcy, aliases i authProviders. |
referenceAudioInputs |
Nie | boolean |
Tylko generowanie wideo. Ustaw na true, gdy dostawca akceptuje referencyjne zasoby audio; w przeciwnym razie video_generate ukrywa parametry referencyjnego audio. |
Każdy wpis configSignals obsługuje:
| Pole | Wymagane | Typ | Znaczenie |
|---|---|---|---|
rootPath |
Tak | string |
Ścieżka z kropkami do należącego do pluginu obiektu konfiguracji, który ma zostać sprawdzony, na przykład plugins.entries.example.config. |
overlayPath |
Nie | string |
Ścieżka z kropkami wewnątrz konfiguracji głównej, której obiekt powinien zostać nałożony na obiekt główny przed oceną sygnału. Służy do konfiguracji właściwej dla funkcji, takiej jak image, video lub music. |
overlayMapPath |
Nie | string |
Ścieżka z kropkami wewnątrz konfiguracji głównej, której poszczególne wartości obiektowe powinny być nakładane na obiekt główny. Służy do map nazwanych kont, takich jak accounts, w których dowolne skonfigurowane konto powinno spełniać warunek. |
required |
Nie | string[] |
Ścieżki z kropkami wewnątrz wynikowej konfiguracji, które muszą zawierać skonfigurowane wartości. Ciągi znaków nie mogą być puste; obiekty i tablice również nie mogą być puste. |
requiredAny |
Nie | string[] |
Ścieżki z kropkami wewnątrz wynikowej konfiguracji, z których co najmniej jedna musi zawierać skonfigurowaną wartość. |
mode |
Nie | object |
Opcjonalny warunek trybu w postaci ciągu znaków wewnątrz wynikowej konfiguracji. Służy, gdy dostępność oparta wyłącznie na konfiguracji dotyczy tylko jednego trybu. |
Każdy warunek mode obsługuje:
| Pole | Wymagane | Typ | Znaczenie |
|---|---|---|---|
path |
Nie | string |
Ścieżka z kropkami wewnątrz wynikowej konfiguracji. Domyślnie mode. |
default |
Nie | string |
Wartość trybu używana, gdy konfiguracja nie zawiera tej ścieżki. |
allowed |
Nie | string[] |
Jeśli występuje, sygnał jest spełniony tylko wtedy, gdy wynikowy tryb ma jedną z tych wartości. |
disallowed |
Nie | string[] |
Jeśli występuje, sygnał nie jest spełniony, gdy wynikowy tryb ma jedną z tych wartości. |
Każdy wpis authSignals obsługuje:
| Pole | Wymagane | Typ | Znaczenie |
|---|---|---|---|
provider |
Tak | string |
Identyfikator dostawcy, który należy sprawdzić w skonfigurowanych profilach uwierzytelniania. |
providerBaseUrl |
Nie | object |
Opcjonalny warunek sprawiający, że sygnał jest uwzględniany tylko wtedy, gdy wskazany skonfigurowany dostawca używa dozwolonego bazowego adresu URL. Służy, gdy alias uwierzytelniania jest prawidłowy tylko dla określonych interfejsów API. |
Każdy warunek providerBaseUrl obsługuje:
| Pole | Wymagane | Typ | Znaczenie |
|---|---|---|---|
provider |
Tak | string |
Identyfikator konfiguracji dostawcy, którego baseUrl należy sprawdzić. |
defaultBaseUrl |
Nie | string |
Bazowy adres URL przyjmowany, gdy konfiguracja dostawcy nie zawiera baseUrl. |
allowedBaseUrls |
Tak | string[] |
Dozwolone bazowe adresy URL dla tego sygnału uwierzytelniania. Sygnał jest ignorowany, gdy skonfigurowany lub domyślny bazowy adres URL nie odpowiada żadnej z tych znormalizowanych wartości. |
Dokumentacja metadanych narzędzi
toolMetadata używa tych samych struktur configSignals i authSignals co metadane dostawcy generowania, indeksowanych według nazwy narzędzia. contracts.tools deklaruje własność. toolMetadata deklaruje prosty dowód dostępności, dzięki czemu OpenClaw może uniknąć importowania środowiska uruchomieniowego pluginu tylko po to, aby jego fabryka narzędzia zwróciła null.
{ "setup": { "providers": [ { "id": "example", "envVars": ["EXAMPLE_API_KEY"] } ] }, "contracts": { "tools": ["example_search"] }, "toolMetadata": { "example_search": { "authSignals": [ { "provider": "example" } ], "configSignals": [ { "rootPath": "plugins.entries.example.config", "overlayPath": "search", "required": ["apiKey"] } ] } }}Wpisy toolMetadata akceptują również optional (oznacza narzędzie jako niewymagane do aktywacji pluginu) oraz replaySafe (oznacza wykonanie narzędzia jako bezpieczne do powtórzenia po niepełnej turze modelu), oprócz wspólnych pól configSignals/authSignals opisanych powyżej.
Jeśli narzędzie nie ma toolMetadata, OpenClaw zachowuje dotychczasowe działanie i ładuje plugin będący jego właścicielem, gdy kontrakt narzędzia odpowiada zasadom. W przypadku narzędzi używanych w ścieżkach krytycznych, których fabryka zależy od uwierzytelniania lub konfiguracji, autorzy pluginów powinni zadeklarować toolMetadata, zamiast wymuszać import środowiska uruchomieniowego przez podstawowy system w celu uzyskania tej informacji.
Dokumentacja providerAuthChoices
Każdy wpis providerAuthChoices opisuje jedną opcję wdrażania lub uwierzytelniania. OpenClaw odczytuje ją przed załadowaniem środowiska uruchomieniowego dostawcy. Listy konfiguracji dostawców korzystają z tych opcji manifestu, opcji konfiguracji wyprowadzonych z deskryptorów oraz metadanych katalogu instalacyjnego bez ładowania środowiska uruchomieniowego dostawcy.
| Pole | Wymagane | Typ | Znaczenie |
|---|---|---|---|
provider |
Tak | string |
Identyfikator dostawcy, do którego należy ta opcja. |
method |
Tak | string |
Identyfikator metody uwierzytelniania, do której należy przekierować obsługę. |
choiceId |
Tak | string |
Stabilny identyfikator opcji uwierzytelniania używany w procesach wdrażania i CLI. |
choiceLabel |
Nie | string |
Etykieta widoczna dla użytkownika. Jeśli ją pominięto, OpenClaw używa wartości choiceId. |
choiceHint |
Nie | string |
Krótki tekst pomocniczy dla selektora. |
assistantPriority |
Nie | number |
Niższe wartości są sortowane wcześniej w interaktywnych selektorach obsługiwanych przez asystenta. |
assistantVisibility |
Nie | "visible" | "manual-only" |
Ukrywa opcję w selektorach asystenta, nadal umożliwiając ręczny wybór w CLI. |
deprecatedChoiceIds |
Nie | string[] |
Starsze identyfikatory opcji, które powinny przekierowywać użytkowników do tej opcji zastępczej. |
groupId |
Nie | string |
Opcjonalny identyfikator grupy służący do grupowania powiązanych opcji. |
groupLabel |
Nie | string |
Etykieta tej grupy widoczna dla użytkownika. |
groupHint |
Nie | string |
Krótki tekst pomocniczy dla grupy. |
onboardingFeatured |
Nie | boolean |
Wyświetla tę grupę w wyróżnionej sekcji interaktywnego selektora wdrażania, przed pozycją „Więcej...”. |
optionKey |
Nie | string |
Wewnętrzny klucz opcji dla prostych procesów uwierzytelniania z jedną flagą. |
cliFlag |
Nie | string |
Nazwa flagi CLI, na przykład --openrouter-api-key. |
cliOption |
Nie | string |
Pełna postać opcji CLI, na przykład --openrouter-api-key <key>. |
cliDescription |
Nie | string |
Opis używany w pomocy CLI. |
appGuidedSecret |
Nie | boolean |
Jeden wklejony sekret wraz z wartościami domyślnymi dostawcy wystarcza do konfiguracji prowadzonej przez aplikację. |
appGuidedDiscovery |
Nie | boolean |
Odpowiadająca metoda uwierzytelniania środowiska wykonawczego zarządza lokalnym wykrywaniem tylko do odczytu za pośrednictwem appGuidedSetup. |
appGuidedAuth |
Nie | "oauth" | "device-code" |
Interaktywne logowanie zarządzane przez dostawcę, które natywne klienty konfiguracji mogą renderować w sposób ogólny. |
onboardingScopes |
Nie | Array<"text-inference" | "image-generation" | "music-generation"> |
Określa, na których powierzchniach wdrażania ma się pojawiać ta opcja. Jeśli wartość pominięto, domyślnie używana jest ["text-inference"]. |
Gdy appGuidedDiscovery ma wartość true, odpowiadająca metoda uwierzytelniania dostawcy musi udostępniać
appGuidedSetup.detect i appGuidedSetup.prepare. Wykrywanie musi odbywać się
wyłącznie do odczytu: bez logowania, pobierania modelu, pobierania plików ani zapisywania konfiguracji. Przygotowanie ponownie sprawdza
dokładnie wybrany model i zwraca propozycję konfiguracji; OpenClaw testuje tę
propozycję na żywo w izolacji i zatwierdza ją dopiero po powodzeniu.
Dokumentacja commandAliases
Należy użyć commandAliases, gdy plugin zarządza nazwą polecenia środowiska wykonawczego, którą użytkownicy mogą omyłkowo umieścić w plugins.allow lub próbować uruchomić jako główne polecenie CLI. OpenClaw używa tych metadanych do diagnostyki bez importowania kodu środowiska wykonawczego pluginu.
{ "commandAliases": [ { "name": "dreaming", "kind": "runtime-slash", "cliCommand": "memory" } ]}| Pole | Wymagane | Typ | Znaczenie |
|---|---|---|---|
name |
Tak | string |
Nazwa polecenia należącego do tego pluginu. |
kind |
Nie | "runtime-slash" |
Oznacza alias jako polecenie czatu z ukośnikiem, a nie główne polecenie CLI. |
cliCommand |
Nie | string |
Powiązane główne polecenie CLI sugerowane do operacji CLI, jeśli takie istnieje. |
Dokumentacja activation
Należy użyć activation, gdy plugin może niewielkim kosztem zadeklarować, które zdarzenia płaszczyzny sterowania powinny uwzględniać go w planie aktywacji lub ładowania.
Ten blok zawiera metadane planisty, a nie interfejs API cyklu życia. Nie rejestruje zachowania środowiska wykonawczego, nie zastępuje register(...) ani nie gwarantuje, że kod pluginu został już wykonany. Planista aktywacji używa tych pól do zawężenia listy pluginów kandydujących, zanim skorzysta z istniejących metadanych własności manifestu, takich jak providers, channels, commandAliases, setup.providers, contracts.tools oraz haki.
Preferowane są najbardziej szczegółowe metadane, które już opisują własność. Należy użyć providers, channels, commandAliases, deskryptorów konfiguracji lub contracts, gdy te pola wyrażają daną relację. activation należy używać do dodatkowych wskazówek dla planisty, których nie można przedstawić za pomocą tych pól własności. cliBackends najwyższego poziomu należy używać do aliasów środowiska wykonawczego CLI, takich jak claude-cli, my-cli lub google-gemini-cli; activation.onAgentHarnesses służy wyłącznie do identyfikatorów osadzonej infrastruktury agentów, które nie mają jeszcze pola własności.
Każdy plugin powinien świadomie ustawić activation.onStartup. Wartość true należy ustawić tylko wtedy, gdy plugin musi działać podczas uruchamiania Gateway. Wartość false należy ustawić, gdy plugin jest bezczynny podczas uruchamiania i powinien być ładowany wyłącznie przez bardziej szczegółowe wyzwalacze. Pominięcie onStartup nie powoduje już niejawnego ładowania pluginu podczas uruchamiania; należy użyć jawnych metadanych aktywacji dla wyzwalaczy aktywacji podczas uruchamiania, przez kanał, konfigurację, infrastrukturę agenta, pamięć lub innych bardziej szczegółowych wyzwalaczy.
{ "activation": { "onStartup": false, "onProviders": ["openai"], "onCommands": ["models"], "onChannels": ["web"], "onRoutes": ["gateway-webhook"], "onConfigPaths": ["browser"], "onCapabilities": ["provider", "tool"] }}| Pole | Wymagane | Typ | Znaczenie |
|---|---|---|---|
onStartup |
Nie | boolean |
Jawna aktywacja podczas uruchamiania Gateway. Każdy plugin powinien ją ustawić. true importuje plugin podczas uruchamiania; false zachowuje jego leniwe ładowanie podczas uruchamiania, chyba że inny dopasowany wyzwalacz wymaga załadowania. |
onProviders |
Nie | string[] |
Identyfikatory dostawców, które powinny uwzględniać ten plugin w planach aktywacji lub ładowania. |
onAgentHarnesses |
Nie | string[] |
Identyfikatory środowiska wykonawczego osadzonej infrastruktury agentów, które powinny uwzględniać ten plugin w planach aktywacji lub ładowania. Dla aliasów zaplecza CLI należy użyć cliBackends najwyższego poziomu. |
onCommands |
Nie | string[] |
Identyfikatory poleceń, które powinny uwzględniać ten plugin w planach aktywacji lub ładowania. |
onChannels |
Nie | string[] |
Identyfikatory kanałów, które powinny uwzględniać ten plugin w planach aktywacji lub ładowania. |
onRoutes |
Nie | string[] |
Rodzaje tras, które powinny uwzględniać ten plugin w planach aktywacji lub ładowania. |
onConfigPaths |
Nie | string[] |
Ścieżki konfiguracji względne wobec katalogu głównego, które powinny uwzględniać ten plugin w planach uruchamiania lub ładowania, gdy ścieżka istnieje i nie została jawnie wyłączona. |
onCapabilities |
Nie | Array<"provider" | "channel" | "tool" | "hook"> |
Ogólne wskazówki dotyczące możliwości używane przez planowanie aktywacji płaszczyzny sterowania. W miarę możliwości preferowane są bardziej szczegółowe pola. |
Bieżący aktywni konsumenci:
- Planowanie uruchamiania Gateway używa
activation.onStartupdo jawnego importu podczas uruchamiania. - Planowanie CLI wyzwalane poleceniem korzysta awaryjnie ze starszego mechanizmu
commandAliases[].cliCommandlubcommandAliases[].name. - Planowanie uruchamiania środowiska wykonawczego agenta używa
activation.onAgentHarnessesdla osadzonych mechanizmów testowych oraz nadrzędnegocliBackends[]dla aliasów środowiska wykonawczego CLI. - Planowanie konfiguracji/kanału wyzwalane przez kanał korzysta awaryjnie ze starszej własności
channels[], gdy brakuje jawnych metadanych aktywacji kanału. - Planowanie Pluginów podczas uruchamiania używa
activation.onConfigPathsdla głównych powierzchni konfiguracji niezwiązanych z kanałami, takich jak blokbrowserdołączonego Pluginu przeglądarki. - Planowanie konfiguracji/środowiska wykonawczego wyzwalane przez dostawcę korzysta awaryjnie ze starszej własności
providers[]i nadrzędnej własnościcliBackends[], gdy brakuje jawnych metadanych aktywacji dostawcy.
Diagnostyka planisty może odróżnić jawne wskazówki aktywacji od awaryjnego użycia własności manifestu. Na przykład activation-command-hint oznacza dopasowanie activation.onCommands, natomiast manifest-command-alias oznacza, że planista użył zamiast tego własności commandAliases. Te etykiety przyczyn służą do diagnostyki hosta i testów; autorzy Pluginów powinni nadal deklarować metadane, które najlepiej opisują własność.
Dokumentacja qaRunners
Należy użyć qaRunners, gdy Plugin udostępnia co najmniej jeden moduł uruchamiający transport poniżej
wspólnego elementu głównego openclaw qa. Te metadane powinny pozostać proste i statyczne; środowisko
wykonawcze Pluginu nadal odpowiada za faktyczną rejestrację CLI za pośrednictwem lekkiej
powierzchni runtime-api.ts, która eksportuje pasujące elementy qaRunnerCliRegistrations. Opcjonalny
element adapterFactory udostępnia transport wspólnym scenariuszom kontroli jakości bez
zmiany modułu uruchamiającego zarejestrowanego polecenia.
{ "qaRunners": [ { "commandName": "matrix", "description": "Uruchom obsługiwaną przez Docker ścieżkę kontroli jakości Matrix na żywo względem jednorazowego serwera macierzystego" } ]}| Pole | Wymagane | Typ | Znaczenie |
|---|---|---|---|
commandName |
Tak | string |
Podpolecenie zamontowane poniżej openclaw qa, na przykład matrix. |
description |
Nie | string |
Zastępczy tekst pomocy używany, gdy wspólny host potrzebuje polecenia szkieletowego. |
Identyfikator adapterFactory musi odpowiadać commandName. Nie należy eksportować rejestracji
dla poleceń nieobecnych w manifeście.
Dokumentacja konfiguracji
Należy użyć setup, gdy powierzchnie konfiguracji i wdrażania potrzebują prostych metadanych należących do Pluginu przed załadowaniem środowiska wykonawczego.
{ "setup": { "providers": [ { "id": "openai", "authMethods": ["api-key"], "envVars": ["OPENAI_API_KEY"], "authEvidence": [ { "type": "local-file-with-env", "fileEnvVar": "OPENAI_CREDENTIALS_FILE", "requiresAllEnv": ["OPENAI_PROJECT"], "credentialMarker": "openai-local-credentials", "source": "lokalne dane uwierzytelniające openai" } ] } ], "cliBackends": ["openai-cli"], "configMigrations": ["legacy-openai-auth"], "requiresRuntime": false }}Nadrzędny element cliBackends pozostaje prawidłowy i nadal opisuje zaplecza wnioskowania CLI. setup.cliBackends to powierzchnia deskryptorów specyficzna dla konfiguracji, przeznaczona dla przepływów płaszczyzny sterowania/konfiguracji, które powinny opierać się wyłącznie na metadanych.
Gdy elementy setup.providers i setup.cliBackends są obecne, stanowią preferowaną powierzchnię wyszukiwania opartą najpierw na deskryptorach podczas wykrywania konfiguracji. Jeśli deskryptor jedynie zawęża kandydujący Plugin, a konfiguracja nadal wymaga bogatszych punktów zaczepienia środowiska wykonawczego na etapie konfiguracji, należy ustawić requiresRuntime: true i pozostawić setup-api jako awaryjną ścieżkę wykonania.
OpenClaw uwzględnia również setup.providers[].envVars w ogólnych wyszukiwaniach uwierzytelniania dostawców i zmiennych środowiskowych. providerAuthEnvVars pozostaje obsługiwane za pośrednictwem adaptera zgodności w okresie wycofywania, ale niedołączone Pluginy, które nadal go używają, otrzymują komunikat diagnostyczny manifestu. Nowe Pluginy powinny umieszczać metadane środowiska konfiguracji/stanu w setup.providers[].envVars.
Należy użyć providerUsageAuthEnvVars, gdy dane uwierzytelniające na poziomie rozliczeń lub organizacji muszą aktywować resolveUsageAuth, nie stając się danymi uwierzytelniającymi do wnioskowania. Nazwy te zostają objęte blokowaniem plików dotenv obszaru roboczego, usuwaniem ze środowiska procesów podrzędnych ACP, filtrowaniem sekretów w piaskownicy i ogólnym oczyszczaniem sekretów. Środowisko wykonawcze dostawcy nadal odczytuje i klasyfikuje wartość wewnątrz resolveUsageAuth.
OpenClaw może również wyprowadzać proste opcje konfiguracji z setup.providers[].authMethods, gdy wpis konfiguracji jest niedostępny albo gdy setup.requiresRuntime: false deklaruje, że środowisko wykonawcze konfiguracji jest zbędne. Jawne wpisy providerAuthChoices pozostają preferowane w przypadku niestandardowych etykiet, flag CLI, zakresu wdrażania i metadanych asystenta.
Element requiresRuntime: false należy ustawić tylko wtedy, gdy te deskryptory są wystarczające dla powierzchni konfiguracji. OpenClaw traktuje jawny element false jako kontrakt oparty wyłącznie na deskryptorach i nie wykona setup-api ani openclaw.setupEntry podczas wyszukiwania konfiguracji. Jeśli Plugin oparty wyłącznie na deskryptorach nadal zawiera jeden z tych wpisów środowiska wykonawczego konfiguracji, OpenClaw zgłasza dodatkowy komunikat diagnostyczny i nadal go ignoruje. Pominięcie requiresRuntime zachowuje starsze zachowanie awaryjne, dzięki czemu istniejące Pluginy, które dodały deskryptory bez tej flagi, nie przestają działać.
Ponieważ wyszukiwanie konfiguracji może wykonywać kod setup-api należący do Pluginu, znormalizowane wartości setup.providers[].id i setup.cliBackends[] muszą pozostać unikatowe we wszystkich wykrytych Pluginach. W przypadku niejednoznacznej własności operacja kończy się niepowodzeniem zamiast wybierać zwycięzcę na podstawie kolejności wykrywania.
Gdy środowisko wykonawcze konfiguracji zostanie wykonane, diagnostyka rejestru konfiguracji zgłasza rozbieżność deskryptorów, jeśli setup-api rejestruje dostawcę lub zaplecze CLI, którego nie deklarują deskryptory manifestu, albo jeśli deskryptor nie ma odpowiadającej mu rejestracji środowiska wykonawczego. Te komunikaty diagnostyczne są dodatkowe i nie powodują odrzucania starszych Pluginów.
Dokumentacja setup.providers
| Pole | Wymagane | Typ | Znaczenie |
|---|---|---|---|
id |
Tak | string |
Identyfikator dostawcy udostępniany podczas konfiguracji lub wdrażania. Znormalizowane identyfikatory muszą być globalnie unikatowe. |
authMethods |
Nie | string[] |
Identyfikatory metod konfiguracji/uwierzytelniania obsługiwanych przez tego dostawcę bez ładowania pełnego środowiska wykonawczego. |
envVars |
Nie | string[] |
Zmienne środowiskowe, które ogólne powierzchnie konfiguracji/stanu mogą sprawdzać przed załadowaniem środowiska wykonawczego Pluginu. |
authEvidence |
Nie | object[] |
Proste lokalne kontrole dowodów uwierzytelnienia dla dostawców, którzy mogą uwierzytelniać się za pomocą znaczników niebędących sekretami. |
Element authEvidence służy do lokalnych znaczników danych uwierzytelniających należących do dostawcy, które można zweryfikować bez ładowania kodu środowiska wykonawczego. Kontrole te muszą pozostać proste i lokalne: bez wywołań sieciowych, odczytów z pęku kluczy lub menedżera sekretów, poleceń powłoki ani prób interfejsu API dostawcy.
Obsługiwane wpisy dowodów:
| Pole | Wymagane | Typ | Znaczenie |
|---|---|---|---|
type |
Tak | string |
Obecnie local-file-with-env. |
fileEnvVar |
Nie | string |
Zmienna środowiskowa zawierająca jawną ścieżkę pliku danych uwierzytelniających. |
fallbackPaths |
Nie | string[] |
Ścieżki lokalnych plików danych uwierzytelniających sprawdzane, gdy fileEnvVar jest nieobecne lub puste. Obsługuje ${HOME} i ${APPDATA}. |
requiresAnyEnv |
Nie | string[] |
Co najmniej jedna z wymienionych zmiennych środowiskowych musi być niepusta, aby dowód był prawidłowy. |
requiresAllEnv |
Nie | string[] |
Każda z wymienionych zmiennych środowiskowych musi być niepusta, aby dowód był prawidłowy. |
credentialMarker |
Tak | string |
Znacznik niebędący sekretem zwracany, gdy dowód jest obecny. |
source |
Nie | string |
Widoczna dla użytkownika etykieta źródła na potrzeby danych wyjściowych uwierzytelniania/stanu. |
Pola konfiguracji
| Pole | Wymagane | Typ | Znaczenie |
|---|---|---|---|
providers |
Nie | object[] |
Deskryptory konfiguracji dostawców udostępniane podczas konfiguracji i wdrażania. |
cliBackends |
Nie | string[] |
Identyfikatory zaplecza używane podczas konfiguracji do wyszukiwania konfiguracji opartego najpierw na deskryptorach. Znormalizowane identyfikatory muszą być globalnie unikatowe. |
configMigrations |
Nie | string[] |
Identyfikatory migracji konfiguracji należące do powierzchni konfiguracji tego Pluginu. |
requiresRuntime |
Nie | boolean |
Określa, czy konfiguracja nadal wymaga wykonania setup-api po wyszukaniu deskryptora. |
Dokumentacja uiHints
uiHints to mapa nazw pól konfiguracji na niewielkie wskazówki dotyczące renderowania. Klucze mogą używać kropek dla zagnieżdżonych pól konfiguracji, ale żaden segment ścieżki nie może być równy __proto__, constructor ani prototype; konfiguracja odrzuca takie nazwy.
{ "uiHints": { "apiKey": { "label": "Klucz API", "help": "Używany do żądań OpenRouter", "placeholder": "sk-or-v1-...", "sensitive": true } }}Każda wskazówka pola może zawierać:
| Pole | Typ | Znaczenie |
|---|---|---|
label |
string |
Widoczna dla użytkownika etykieta pola. |
help |
string |
Krótki tekst pomocniczy. |
tags |
string[] |
Opcjonalne znaczniki interfejsu użytkownika. |
advanced |
boolean |
Oznacza pole jako zaawansowane. |
sensitive |
boolean |
Oznacza pole jako tajne lub poufne. |
placeholder |
string |
Tekst zastępczy dla pól formularza. |
Dokumentacja kontraktów
Należy używać contracts wyłącznie dla statycznych metadanych własności możliwości, które OpenClaw może odczytać bez importowania środowiska wykonawczego Pluginu.
{ "contracts": { "agentToolResultMiddleware": ["openclaw", "codex"], "trustedToolPolicies": ["workflow-budget"], "externalAuthProviders": ["acme-ai"], "embeddingProviders": ["openai-compatible"], "speechProviders": ["openai"], "realtimeTranscriptionProviders": ["openai"], "realtimeVoiceProviders": ["openai"], "memoryEmbeddingProviders": ["local"], "mediaUnderstandingProviders": ["openai"], "imageGenerationProviders": ["openai"], "videoGenerationProviders": ["qwen"], "musicGenerationProviders": ["stability-audio"], "documentExtractors": ["example-docs"], "webContentExtractors": ["firecrawl"], "webFetchProviders": ["firecrawl"], "webSearchProviders": ["gemini"], "workerProviders": ["example-worker"], "usageProviders": ["acme-ai"], "migrationProviders": ["hermes"], "gatewayMethodDispatch": ["authenticated-request"], "tools": ["firecrawl_search", "firecrawl_scrape"] }}Każda lista jest opcjonalna:
| Pole | Typ | Znaczenie |
|---|---|---|
embeddedExtensionFactories |
string[] |
Identyfikatory fabryk rozszerzeń serwera aplikacji Codex, obecnie codex-app-server. |
agentToolResultMiddleware |
string[] |
Identyfikatory środowisk uruchomieniowych, dla których ten plugin może rejestrować oprogramowanie pośredniczące wyników narzędzi. |
trustedToolPolicies |
string[] |
Lokalne dla pluginu identyfikatory zaufanych zasad poprzedzających narzędzia, które może rejestrować zainstalowany plugin. Wbudowane pluginy mogą rejestrować zasady bez tego pola. |
externalAuthProviders |
string[] |
Identyfikatory dostawców, których hak zewnętrznego profilu uwierzytelniania należy do tego pluginu. |
embeddingProviders |
string[] |
Identyfikatory ogólnych dostawców osadzania należących do tego pluginu, przeznaczonych do wielokrotnego generowania osadzeń wektorowych, w tym dla pamięci. |
speechProviders |
string[] |
Identyfikatory dostawców mowy należących do tego pluginu. |
realtimeTranscriptionProviders |
string[] |
Identyfikatory dostawców transkrypcji w czasie rzeczywistym należących do tego pluginu. |
realtimeVoiceProviders |
string[] |
Identyfikatory dostawców głosu w czasie rzeczywistym należących do tego pluginu. |
memoryEmbeddingProviders |
string[] |
Przestarzałe identyfikatory dostawców osadzania specyficznych dla pamięci, należących do tego pluginu. |
mediaUnderstandingProviders |
string[] |
Identyfikatory dostawców rozumienia multimediów należących do tego pluginu. |
transcriptSourceProviders |
string[] |
Identyfikatory dostawców źródeł transkrypcji należących do tego pluginu. |
documentExtractors |
string[] |
Identyfikatory dostawców ekstraktorów dokumentów (na przykład PDF) należących do tego pluginu. |
imageGenerationProviders |
string[] |
Identyfikatory dostawców generowania obrazów należących do tego pluginu. |
videoGenerationProviders |
string[] |
Identyfikatory dostawców generowania filmów należących do tego pluginu. |
musicGenerationProviders |
string[] |
Identyfikatory dostawców generowania muzyki należących do tego pluginu. |
webContentExtractors |
string[] |
Identyfikatory dostawców wyodrębniania treści stron internetowych należących do tego pluginu. |
webFetchProviders |
string[] |
Identyfikatory dostawców pobierania zawartości z internetu należących do tego pluginu. |
webSearchProviders |
string[] |
Identyfikatory dostawców wyszukiwania w internecie należących do tego pluginu. |
workerProviders |
string[] |
Identyfikatory dostawców pracowników chmurowych należących do tego pluginu, używanych do aprowizacji i cyklu życia dzierżaw opartych na profilach. |
usageProviders |
string[] |
Identyfikatory dostawców, których haki uwierzytelniania użycia i migawek użycia należą do tego pluginu. |
migrationProviders |
string[] |
Identyfikatory dostawców importu należących do tego pluginu dla openclaw migrate. |
gatewayMethodDispatch |
string[] |
Zastrzeżone uprawnienie dla uwierzytelnionych tras HTTP pluginu, które wysyłają metody Gateway w obrębie procesu. |
tools |
string[] |
Nazwy narzędzi agenta należących do tego pluginu. |
contracts.embeddedExtensionFactories jest zachowane dla wbudowanych fabryk rozszerzeń przeznaczonych wyłącznie dla serwera aplikacji Codex. Wbudowane przekształcenia wyników narzędzi powinny zamiast tego deklarować contracts.agentToolResultMiddleware i rejestrować się za pomocą api.registerAgentToolResultMiddleware(...). Zainstalowane pluginy mogą korzystać z tego samego punktu integracji oprogramowania pośredniczącego tylko po jawnym włączeniu i wyłącznie dla środowisk uruchomieniowych zadeklarowanych w contracts.agentToolResultMiddleware.
Zainstalowane pluginy, które potrzebują warstwy zaufanych przez hosta zasad poprzedzających narzędzia, muszą zadeklarować każdy rejestrowany lokalny identyfikator w contracts.trustedToolPolicies i zostać jawnie włączone. Wbudowane pluginy zachowują istniejącą ścieżkę zaufanych zasad, lecz zainstalowane pluginy z niezadeklarowanymi identyfikatorami zasad są odrzucane przed rejestracją. Identyfikatory zasad mają zakres pluginu, który je rejestruje, dlatego dwa pluginy mogą zadeklarować i zarejestrować workflow-budget; jeden plugin nie może dwukrotnie zarejestrować tego samego lokalnego identyfikatora.
Rejestracje środowiska uruchomieniowego api.registerTool(...) muszą odpowiadać contracts.tools. Mechanizm wykrywania narzędzi używa tej listy, aby ładować wyłącznie środowiska uruchomieniowe pluginów, które mogą być właścicielami żądanych narzędzi.
Pluginy dostawców implementujące resolveExternalAuthProfiles powinny deklarować contracts.externalAuthProviders; niezadeklarowane haki zewnętrznego uwierzytelniania są ignorowane.
Pluginy dostawców implementujące zarówno resolveUsageAuth, jak i fetchUsageSnapshot powinny deklarować każdy automatycznie wykrywany identyfikator dostawcy w contracts.usageProviders. Mechanizm wykrywania użycia odczytuje ten kontrakt przed załadowaniem kodu środowiska uruchomieniowego, a następnie weryfikuje oba haki po załadowaniu wyłącznie zadeklarowanych właścicieli.
Ogólni dostawcy osadzania powinni deklarować contracts.embeddingProviders dla każdego adaptera zarejestrowanego za pomocą api.registerEmbeddingProvider(...). Ogólnego kontraktu należy używać do wielokrotnego generowania wektorów, w tym przez dostawców używanych przez wyszukiwanie w pamięci. contracts.memoryEmbeddingProviders jest przestarzałą warstwą zgodności specyficzną dla pamięci i pozostaje tylko na czas migracji istniejących dostawców do ogólnego punktu integracji dostawców osadzania.
Dostawcy pracowników muszą deklarować każdy identyfikator api.registerWorkerProvider(...) w contracts.workerProviders. Rdzeń utrwala trwały zamiar przed wywołaniem provision; dostawcy weryfikują swoje ustawienia przed zewnętrzną alokacją, a powtarzane wywołania z tym samym identyfikatorem operacji muszą przejąć tę samą dzierżawę. Rdzeń utrwala również tę zweryfikowaną migawkę ustawień i przekazuje ją wraz z leaseId do inspect({ leaseId, profile }) oraz destroy({ leaseId, profile }), także po zmianie lub usunięciu nazwanego profilu. Niszczenie jest idempotentne, inspekcja zwraca zamkniętą unię stanów active / destroyed / unknown, a materiał prywatnego klucza SSH jest wskazywany wyłącznie za pośrednictwem SecretRef. Aprowizowane punkty końcowe SSH muszą również zawierać publiczny hostKey z zaufanych danych wyjściowych aprowizacji w dokładnym formacie algorithm base64, bez nazwy hosta ani komentarza, aby rdzeń mógł przypiąć host przed nawiązaniem połączenia. Dostawcy generujący dynamiczne odwołania do tożsamości mogą implementować autorytatywny resolveSshIdentity({ leaseId, profile, keyRef }); dostawcy bez niego używają ogólnego mechanizmu rozpoznawania sekretów rdzenia. Autorytatywny unknown osieroca aktywny rekord lokalny; po utrwalonym żądaniu zniszczenia potwierdza zakończenie usuwania.
contracts.gatewayMethodDispatch obecnie akceptuje "authenticated-request". Jest to bramka higieny API dla natywnych tras HTTP pluginów, które celowo wysyłają metody płaszczyzny sterowania Gateway w obrębie procesu, a nie piaskownica chroniąca przed złośliwymi natywnymi pluginami. Należy jej używać wyłącznie dla dokładnie zweryfikowanych powierzchni wbudowanych lub operatorskich, które już wymagają uwierzytelniania HTTP Gateway. Trasa z uprawnieniem pozostaje osiągalna przy zamkniętym przyjmowaniu pracy głównej przez Gateway tylko wtedy, gdy deklaruje również auth: "gateway" oraz specyficzny dla trasy gatewayRuntimeScopeSurface: "trusted-operator"; zwykłe trasy równorzędne tego samego pluginu pozostają za granicą przyjmowania. Dzięki temu stan zawieszenia i wznowienie pozostają dostępne bez przyznawania całemu pluginowi obejścia mechanizmu przyjmowania. Analizowanie i kształtowanie odpowiedzi poza wysyłaniem należy utrzymywać w ograniczonym zakresie; istotna lub modyfikująca praca musi przechodzić przez wysyłanie metod Gateway, które odpowiada za przyjmowanie i egzekwowanie zakresu.
Dokumentacja configContracts
Należy używać configContracts do zachowań konfiguracji należących do manifestu, których potrzebują ogólne pomocnicze mechanizmy rdzenia bez importowania środowiska uruchomieniowego pluginu: wykrywania niebezpiecznych flag, celów migracji SecretRef oraz zawężania starszych ścieżek konfiguracji.
{ "configContracts": { "compatibilityMigrationPaths": ["legacyProvider"], "compatibilityRuntimePaths": ["legacyProvider.webhook"], "dangerousFlags": [ { "path": "accounts.*.allowUnverifiedSenders", "equals": true } ], "secretInputs": { "bundledDefaultEnabled": false, "paths": [ { "path": "apiKey", "expected": "string" } ] } }}| Pole | Wymagane | Typ | Znaczenie |
|---|---|---|---|
compatibilityMigrationPaths |
Nie | string[] |
Ścieżki konfiguracji względne wobec katalogu głównego, które wskazują, że migracje zgodności tego pluginu wykonywane podczas konfiguracji mogą mieć zastosowanie. Pozwala to ogólnym odczytom konfiguracji środowiska uruchomieniowego pomijać wszystkie powierzchnie konfiguracji pluginów, gdy konfiguracja nigdy nie odwołuje się do danego pluginu. |
compatibilityRuntimePaths |
Nie | string[] |
Ścieżki zgodności względne wobec katalogu głównego, które ten plugin może obsłużyć podczas działania przed pełną aktywacją kodu pluginu. Należy używać tego dla starszych powierzchni, które powinny zawężać zestawy wbudowanych kandydatów bez importowania każdego zgodnego środowiska uruchomieniowego pluginu. |
dangerousFlags |
Nie | object[] |
Literały konfiguracji, które openclaw doctor powinien oznaczać jako niezabezpieczone lub niebezpieczne, gdy są włączone. Zobacz poniżej. |
secretInputs |
Nie | object |
Ścieżki konfiguracji w obrębie plugins.entries.<id>.config, które rejestr celów migracji/audytu SecretRef powinien traktować jako ciągi znaków o strukturze sekretu. Zobacz poniżej. |
Każdy wpis dangerousFlags obsługuje:
| Pole | Wymagane | Typ | Znaczenie |
|---|---|---|---|
path |
Tak | string |
Rozdzielana kropkami ścieżka konfiguracji względna wobec plugins.entries.<id>.config. Obsługuje symbole wieloznaczne * dla segmentów map/tablic. |
equals |
Tak | string | number | boolean | null |
Dokładny literał oznaczający tę wartość konfiguracji jako niebezpieczną. |
secretInputs obsługuje:
| Pole | Wymagane | Typ | Znaczenie |
|---|---|---|---|
bundledDefaultEnabled |
Nie | boolean |
Zastępuje domyślne włączenie dołączonego pluginu podczas określania, czy ta powierzchnia SecretRef jest aktywna. Należy użyć tej opcji, gdy plugin jest dołączony, ale powierzchnia ma pozostać nieaktywna do czasu jawnego włączenia w konfiguracji. |
paths |
Tak | object[] |
Ścieżki konfiguracji zawierające sekrety, każda z path (rozdzielona kropkami, względna wobec plugins.entries.<id>.config, obsługuje symbole wieloznaczne *) i opcjonalnym expected (obecnie tylko "string"). |
Dokumentacja mediaUnderstandingProviderMetadata
Należy użyć mediaUnderstandingProviderMetadata, gdy dostawca rozumienia multimediów ma domyślne modele, priorytet automatycznego uwierzytelniania awaryjnego lub natywną obsługę dokumentów, których ogólne pomocnicze funkcje rdzenia potrzebują przed załadowaniem środowiska uruchomieniowego. Klucze muszą być również zadeklarowane w contracts.mediaUnderstandingProviders.
{ "contracts": { "mediaUnderstandingProviders": ["example"] }, "mediaUnderstandingProviderMetadata": { "example": { "capabilities": ["image", "audio"], "defaultModels": { "image": "example-vision-latest", "audio": "example-transcribe-latest" }, "autoPriority": { "image": 40 }, "nativeDocumentInputs": ["pdf"], "documentModels": { "pdf": { "textExtraction": "example-doc-text-latest", "image": "example-doc-vision-latest" } } } }}Każdy wpis dostawcy może zawierać:
| Pole | Typ | Znaczenie |
|---|---|---|
capabilities |
("image" | "audio" | "video")[] |
Możliwości multimedialne udostępniane przez tego dostawcę. |
defaultModels |
Record<string, string> |
Domyślne przypisania możliwości do modeli używane, gdy konfiguracja nie określa modelu. |
autoPriority |
Record<string, number> |
Niższe liczby są sortowane wcześniej podczas automatycznego wyboru dostawcy awaryjnego na podstawie poświadczeń. |
nativeDocumentInputs |
"pdf"[] |
Natywne dane wejściowe dokumentów obsługiwane przez dostawcę. |
documentModels |
{ pdf?: { textExtraction?: string; image?: string | false } } |
Nadpisania modeli dla poszczególnych typów dokumentów. Ustawienie image: false wyłącza wyodrębnianie oparte na obrazach dla tego typu dokumentu. |
Dokumentacja channelConfigs
Należy użyć channelConfigs, gdy plugin kanału potrzebuje prostych metadanych konfiguracji przed załadowaniem środowiska uruchomieniowego. Wykrywanie konfiguracji i stanu kanału w trybie tylko do odczytu może używać tych metadanych bezpośrednio w przypadku skonfigurowanych kanałów zewnętrznych, gdy wpis konfiguracji jest niedostępny lub gdy setup.requiresRuntime: false wskazuje, że środowisko uruchomieniowe konfiguracji nie jest wymagane.
channelConfigs to metadane manifestu pluginu, a nie nowa sekcja najwyższego poziomu konfiguracji użytkownika. Użytkownicy nadal konfigurują instancje kanałów w channels.<channel-id>. OpenClaw odczytuje metadane manifestu, aby określić, który plugin jest właścicielem skonfigurowanego kanału, zanim zostanie wykonany kod środowiska uruchomieniowego pluginu.
W przypadku pluginu kanału configSchema i channelConfigs opisują różne ścieżki:
configSchemaweryfikujeplugins.entries.<plugin-id>.configchannelConfigs.<channel-id>.schemaweryfikujechannels.<channel-id>
Niedołączone pluginy deklarujące channels[] powinny także deklarować pasujące wpisy channelConfigs. Bez nich OpenClaw nadal może załadować plugin, ale schemat konfiguracji ścieżki zimnej, konfiguracja i powierzchnie Control UI nie mogą poznać kształtu opcji należących do kanału, dopóki nie zostanie wykonane środowisko uruchomieniowe pluginu.
channelConfigs.<channel-id>.commands.nativeCommandsAutoEnabled i nativeSkillsAutoEnabled mogą deklarować statyczne wartości domyślne auto na potrzeby kontroli konfiguracji poleceń wykonywanych przed załadowaniem środowiska uruchomieniowego kanału. Dołączone kanały mogą także publikować te same wartości domyślne przez package.json#openclaw.channel.commands wraz z innymi metadanymi katalogu kanałów należącymi do pakietu.
{ "channelConfigs": { "matrix": { "schema": { "type": "object", "additionalProperties": false, "properties": { "homeserverUrl": { "type": "string" } } }, "uiHints": { "homeserverUrl": { "label": "Adres URL serwera domowego", "placeholder": "https://matrix.example.com" } }, "label": "Matrix", "description": "Połączenie z serwerem domowym Matrix", "commands": { "nativeCommandsAutoEnabled": true, "nativeSkillsAutoEnabled": true }, "preferOver": ["matrix-legacy"] } }}Każdy wpis kanału może zawierać:
| Pole | Typ | Znaczenie |
|---|---|---|
schema |
object |
Schemat JSON dla channels.<id>. Wymagany dla każdego zadeklarowanego wpisu konfiguracji kanału. |
uiHints |
Record<string, object> |
Opcjonalne etykiety interfejsu, symbole zastępcze i wskazówki dotyczące danych wrażliwych dla tej sekcji konfiguracji kanału. |
label |
string |
Etykieta kanału scalana z powierzchniami wyboru i inspekcji, gdy metadane środowiska uruchomieniowego nie są gotowe. |
description |
string |
Krótki opis kanału dla powierzchni inspekcji i katalogu. |
commands |
object |
Statyczne automatyczne wartości domyślne natywnych poleceń i natywnych Skills na potrzeby kontroli konfiguracji przed uruchomieniem. |
preferOver |
string[] |
Identyfikatory starszych pluginów lub pluginów o niższym priorytecie, które ten kanał powinien wyprzedzać na powierzchniach wyboru. |
Zastępowanie innego pluginu kanału
Należy użyć preferOver, gdy dany plugin jest preferowanym właścicielem identyfikatora kanału, który może być również udostępniany przez inny plugin. Typowe przypadki to zmieniony identyfikator pluginu, samodzielny plugin zastępujący plugin dołączony lub utrzymywany fork zachowujący ten sam identyfikator kanału w celu zgodności konfiguracji.
{ "id": "acme-chat", "channels": ["chat"], "channelConfigs": { "chat": { "schema": { "type": "object", "additionalProperties": false, "properties": { "webhookUrl": { "type": "string" } } }, "preferOver": ["chat"] } }}Gdy skonfigurowano channels.chat, OpenClaw uwzględnia zarówno identyfikator kanału, jak i identyfikator preferowanego pluginu. Jeśli plugin o niższym priorytecie został wybrany tylko dlatego, że jest dołączony lub domyślnie włączony, OpenClaw wyłącza go w efektywnej konfiguracji środowiska uruchomieniowego, dzięki czemu jeden plugin jest właścicielem kanału i jego narzędzi. Jawny wybór użytkownika nadal ma pierwszeństwo: jeśli użytkownik jawnie włączy oba pluginy (przez plugins.allow lub istotną konfigurację plugins.entries), OpenClaw zachowa ten wybór i zgłosi diagnostykę zduplikowanych kanałów lub narzędzi zamiast niejawnie zmieniać żądany zestaw pluginów.
Zakres preferOver należy ograniczyć do identyfikatorów pluginów, które rzeczywiście mogą udostępniać ten sam kanał. Nie jest to ogólne pole priorytetu i nie zmienia nazw kluczy konfiguracji użytkownika.
Dokumentacja modelSupport
Należy użyć modelSupport, gdy OpenClaw powinien wywnioskować plugin dostawcy ze skróconych identyfikatorów modeli, takich jak gpt-5.6-sol lub claude-sonnet-4.6, przed załadowaniem środowiska uruchomieniowego pluginu.
{ "modelSupport": { "modelPrefixes": ["gpt-", "o1", "o3", "o4"], "modelPatterns": ["^computer-use-preview"] }}OpenClaw stosuje następującą kolejność pierwszeństwa:
- jawne odwołania
provider/modelużywają metadanych manifestu należącego doproviders modelPatternsmają pierwszeństwo przedmodelPrefixes- jeśli pasują zarówno jeden niedołączony, jak i jeden dołączony plugin, pierwszeństwo ma niedołączony plugin
- pozostałe niejednoznaczności są ignorowane, dopóki użytkownik lub konfiguracja nie określi dostawcy
Pola:
| Pole | Typ | Znaczenie |
|---|---|---|
modelPrefixes |
string[] |
Prefiksy dopasowywane za pomocą startsWith do skróconych identyfikatorów modeli. |
modelPatterns |
string[] |
Źródła wyrażeń regularnych dopasowywane do skróconych identyfikatorów modeli po usunięciu sufiksu profilu. |
Wpisy modelPatterns są kompilowane za pomocą compileSafeRegex, które odrzuca wzorce zawierające zagnieżdżone powtórzenia (na przykład (a+)+$). Wzorce, które nie przejdą kontroli bezpieczeństwa, są pomijane bez komunikatu, podobnie jak wyrażenia regularne niepoprawne składniowo. Wzorce powinny być proste i nie zawierać zagnieżdżonych kwantyfikatorów.
Dokumentacja modelCatalog
Należy użyć modelCatalog, gdy OpenClaw powinien znać metadane modeli dostawcy przed załadowaniem środowiska uruchomieniowego pluginu. Jest to należące do manifestu źródło stałych wierszy katalogu, aliasów dostawców, reguł pomijania i trybu wykrywania. Odświeżanie w czasie wykonywania nadal należy do kodu środowiska uruchomieniowego dostawcy, ale manifest informuje rdzeń, kiedy środowisko uruchomieniowe jest wymagane.
{ "providers": ["openai"], "modelCatalog": { "providers": { "openai": { "baseUrl": "https://api.openai.com/v1", "api": "openai-responses", "models": [ { "id": "gpt-5.4", "name": "GPT-5.4", "input": ["text", "image"], "reasoning": true, "contextWindow": 256000, "maxTokens": 128000, "cost": { "input": 1.25, "output": 10, "cacheRead": 0.125 }, "status": "available", "tags": ["default"] } ] } }, "aliases": { "azure-openai-responses": { "provider": "openai", "api": "azure-openai-responses" } }, "suppressions": [ { "provider": "azure-openai-responses", "model": "gpt-5.3-codex-spark", "reason": "niedostępne w Azure OpenAI Responses" } ], "discovery": { "openai": "static" } }}Pola najwyższego poziomu:
| Pole | Typ | Znaczenie |
|---|---|---|
providers |
Record<string, object> |
Wiersze katalogu dla identyfikatorów dostawców należących do tego pluginu. Klucze powinny również występować w nadrzędnym elemencie providers. |
aliases |
Record<string, object> |
Aliasy dostawców, które powinny być rozpoznawane jako należący do pluginu dostawca na potrzeby planowania katalogu lub pomijania. |
suppressions |
object[] |
Wiersze modeli z innego źródła, które ten plugin pomija z przyczyny specyficznej dla dostawcy. |
discovery |
Record<string, "static" | "refreshable" | "runtime"> |
Określa, czy katalog dostawcy można odczytać z metadanych manifestu, odświeżyć w pamięci podręcznej, czy wymaga on środowiska uruchomieniowego. |
runtimeAugment |
boolean |
Ustawiać na true tylko wtedy, gdy środowisko uruchomieniowe dostawcy musi dołączyć wiersze katalogu po zaplanowaniu manifestu i konfiguracji. |
aliases uczestniczy w wyszukiwaniu właściciela dostawcy na potrzeby planowania katalogu modeli. Cele aliasów muszą być nadrzędnymi dostawcami należącymi do tego samego pluginu. Gdy lista filtrowana według dostawcy używa aliasu, OpenClaw może odczytać manifest właściciela i zastosować nadpisania interfejsu API oraz bazowego adresu URL aliasu bez ładowania środowiska uruchomieniowego dostawcy. Aliasy nie rozszerzają niefiltrowanych list katalogu; szerokie listy zawierają wyłącznie wiersze kanonicznego dostawcy będącego właścicielem.
suppressions zastępuje stary punkt zaczepienia suppressBuiltInModel środowiska uruchomieniowego dostawcy. Wpisy pomijania są uwzględniane tylko wtedy, gdy dostawca należy do pluginu lub jest zadeklarowany jako klucz modelCatalog.aliases wskazujący na należącego do pluginu dostawcę. Punkty zaczepienia pomijania w środowisku uruchomieniowym nie są już wywoływane podczas rozpoznawania modelu.
Pola dostawcy:
| Pole | Typ | Znaczenie |
|---|---|---|
baseUrl |
string |
Opcjonalny domyślny bazowy adres URL modeli w katalogu tego dostawcy. |
api |
ModelApi |
Opcjonalny domyślny adapter API modeli w katalogu tego dostawcy. |
headers |
Record<string, string> |
Opcjonalne statyczne nagłówki stosowane do katalogu tego dostawcy. |
defaultUtilityModel |
string |
Opcjonalny identyfikator małego modelu zalecanego przez dostawcę do krótkich wewnętrznych zadań pomocniczych (tytuły, opisywanie postępu). Używany, gdy agents.defaults.utilityModel nie jest ustawione, a ten dostawca obsługuje główny model agenta. |
models |
object[] |
Wymagane wiersze modeli. Wiersze bez id są ignorowane. |
Pola modelu:
| Pole | Typ | Znaczenie |
|---|---|---|
id |
string |
Lokalny dla dostawcy identyfikator modelu bez prefiksu provider/. |
name |
string |
Opcjonalna nazwa wyświetlana. |
api |
ModelApi |
Opcjonalne nadpisanie API dla danego modelu. |
baseUrl |
string |
Opcjonalne nadpisanie bazowego adresu URL dla danego modelu. |
headers |
Record<string, string> |
Opcjonalne statyczne nagłówki dla danego modelu. |
input |
Array<"text" | "image" | "document"> |
Modalności akceptowane przez model. Pozostałe wartości są po cichu odrzucane. |
reasoning |
boolean |
Określa, czy model udostępnia funkcję rozumowania. |
contextWindow |
number |
Natywne okno kontekstu dostawcy. |
contextTokens |
number |
Opcjonalny efektywny limit kontekstu środowiska uruchomieniowego, gdy różni się od contextWindow. |
maxTokens |
number |
Maksymalna liczba tokenów wyjściowych, jeśli jest znana. |
thinkingLevelMap |
Record<string, string | null> |
Opcjonalne nadpisania identyfikatora modelu lub parametrów dla poszczególnych poziomów myślenia. |
cost |
object |
Opcjonalna cena w USD za milion tokenów, z uwzględnieniem opcjonalnego tieredPricing. |
compat |
object |
Opcjonalne flagi zgodności odpowiadające zgodności konfiguracji modeli OpenClaw. |
mediaInput |
object |
Opcjonalna konfiguracja danych wejściowych dla poszczególnych modalności, obecnie tylko dla obrazów. |
status |
"available" | "preview" | "deprecated" | "disabled" |
Stan na liście. Pomijać tylko wtedy, gdy wiersz nie może być w ogóle widoczny. |
statusReason |
string |
Opcjonalna przyczyna wyświetlana wraz ze stanem niedostępności. |
replaces |
string[] |
Starsze lokalne dla dostawcy identyfikatory modeli zastępowane przez ten model. |
replacedBy |
string |
Lokalny dla dostawcy identyfikator modelu zastępczego dla przestarzałych wierszy. |
tags |
string[] |
Stabilne tagi używane przez selektory i filtry. |
Pola pomijania:
| Pole | Typ | Znaczenie |
|---|---|---|
provider |
string |
Identyfikator dostawcy nadrzędnego wiersza przeznaczonego do pominięcia. Musi należeć do tego pluginu lub być zadeklarowany jako należący do niego alias. |
model |
string |
Lokalny dla dostawcy identyfikator modelu przeznaczonego do pominięcia. |
reason |
string |
Opcjonalny komunikat wyświetlany, gdy następuje bezpośrednie żądanie pominiętego wiersza. |
when.baseUrlHosts |
string[] |
Opcjonalna lista hostów efektywnego bazowego adresu URL dostawcy wymaganych do zastosowania pomijania. |
when.providerConfigApiIn |
string[] |
Opcjonalna lista dokładnych wartości api konfiguracji dostawcy wymaganych do zastosowania pomijania. |
Nie umieszczać danych dostępnych wyłącznie w środowisku uruchomieniowym w modelCatalog. Używać static tylko wtedy, gdy wiersze manifestu są wystarczająco kompletne, aby listy filtrowane według dostawcy i powierzchnie wyboru mogły pominąć wykrywanie rejestru lub środowiska uruchomieniowego. Używać refreshable, gdy wiersze manifestu stanowią przydatne początkowe lub uzupełniające pozycje listy, ale późniejsze odświeżenie lub pamięć podręczna może dodać kolejne wiersze; wiersze możliwe do odświeżenia nie są same w sobie miarodajne. Używać runtime, gdy OpenClaw musi załadować środowisko uruchomieniowe dostawcy, aby poznać listę.
Dokumentacja modelIdNormalization
Używać modelIdNormalization do niedrogiego, należącego do dostawcy porządkowania identyfikatora modelu, które musi nastąpić przed załadowaniem środowiska uruchomieniowego dostawcy. Dzięki temu aliasy, takie jak krótkie nazwy modeli, starsze lokalne identyfikatory dostawcy i reguły prefiksów serwera proxy, pozostają w manifeście pluginu będącego właścicielem zamiast w podstawowych tabelach wyboru modeli.
{ "providers": ["anthropic", "openrouter"], "modelIdNormalization": { "providers": { "anthropic": { "aliases": { "sonnet-4.6": "claude-sonnet-4-6" } }, "openrouter": { "prefixWhenBare": "openrouter" } } }}Pola dostawcy:
| Pole | Typ | Znaczenie |
|---|---|---|
aliases |
Record<string,string> |
Dokładne aliasy identyfikatorów modeli bez uwzględniania wielkości liter. Wartości są zwracane w zapisanej postaci. |
stripPrefixes |
string[] |
Prefiksy usuwane przed wyszukaniem aliasu, przydatne w przypadku starszego powielenia dostawcy i modelu. |
prefixWhenBare |
string |
Prefiks dodawany, gdy znormalizowany identyfikator modelu nie zawiera jeszcze /. |
prefixWhenBareAfterAliasStartsWith |
object[] |
Warunkowe reguły prefiksu dla identyfikatorów bez prefiksu stosowane po wyszukaniu aliasu, indeksowane według modelPrefix i prefix. |
Dokumentacja providerEndpoints
Używać providerEndpoints do klasyfikacji punktów końcowych, którą ogólna polityka żądań musi znać przed załadowaniem środowiska uruchomieniowego dostawcy. Rdzeń nadal definiuje znaczenie każdego endpointClass; manifesty pluginów definiują metadane hosta i bazowego adresu URL.
Oficjalne, wyodrębnione pluginy dostawców są wykluczone z dystrybucji rdzenia, dlatego
ich manifesty pozostają niewidoczne do czasu instalacji. Ich providerEndpoints
musi również mieć odzwierciedlenie w scripts/lib/official-external-provider-catalog.json, aby
klasyfikacja punktów końcowych nadal działała bez pluginu; test kontraktowy
wymusza zgodność tego odzwierciedlenia.
Pola punktu końcowego:
| Pole | Typ | Znaczenie |
|---|---|---|
endpointClass |
string |
Znana klasa podstawowego punktu końcowego, taka jak openrouter, moonshot-native lub google-vertex. |
hosts |
string[] |
Dokładne nazwy hostów mapowane na klasę punktu końcowego. |
hostSuffixes |
string[] |
Sufiksy hostów mapowane na klasę punktu końcowego. Poprzedź je ciągiem ., aby dopasowywać wyłącznie sufiksy domen. |
baseUrls |
string[] |
Dokładne znormalizowane bazowe adresy URL HTTP(S) mapowane na klasę punktu końcowego. |
googleVertexRegion |
string |
Statyczny region Google Vertex dla dokładnych hostów globalnych. |
googleVertexRegionHostSuffix |
string |
Sufiks usuwany z pasujących hostów w celu ujawnienia prefiksu regionu Google Vertex. |
Dokumentacja providerRequest
Użyj providerRequest do przechowywania niewymagających dużych nakładów metadanych zgodności żądań, których ogólne zasady obsługi żądań potrzebują bez ładowania środowiska wykonawczego dostawcy. Przepisywanie ładunku zależne od zachowania należy pozostawić hakom środowiska wykonawczego dostawcy lub współdzielonym funkcjom pomocniczym rodziny dostawców.
{ "providerRequest": { "providers": { "vllm": { "family": "vllm", "openAICompletions": { "supportsStreamingUsage": true } } } }}Pola dostawcy:
| Pole | Typ | Znaczenie |
|---|---|---|
family |
string |
Etykieta rodziny dostawcy używana przez ogólne mechanizmy decydowania o zgodności żądań i diagnostykę. |
compatibilityFamily |
"moonshot" |
Opcjonalna grupa zgodności rodziny dostawców dla współdzielonych funkcji pomocniczych żądań. |
openAICompletions |
object |
Flagi żądań uzupełniania zgodnego z OpenAI, obecnie supportsStreamingUsage. |
Dokumentacja secretProviderIntegrations
Użyj secretProviderIntegrations, gdy plugin może opublikować gotową konfigurację wielokrotnego użytku dla dostawcy wykonawczego SecretRef. OpenClaw odczytuje te metadane przed załadowaniem środowiska wykonawczego pluginu, zapisuje własność pluginu w secrets.providers.<alias>.pluginIntegration i pozostawia faktyczne rozwiązywanie sekretów środowisku wykonawczemu SecretRef. Gotowe konfiguracje są udostępniane tylko dla pluginów wbudowanych oraz zainstalowanych pluginów wykrytych w zarządzanych katalogach głównych instalacji pluginów, takich jak instalacje z git i ClawHub.
{ "secretProviderIntegrations": { "secret-store": { "providerAlias": "team-secrets", "displayName": "Team secrets", "source": "exec", "command": "${node}", "args": ["./bin/resolve-secrets.mjs"] } }}Klucz mapy jest identyfikatorem integracji. Jeśli pominięto providerAlias, OpenClaw używa identyfikatora integracji jako aliasu dostawcy SecretRef. Aliasy dostawców muszą być zgodne ze standardowym wzorcem aliasu dostawcy SecretRef, na przykład team-secrets lub onepassword-work.
Gdy operator wybierze gotową konfigurację, OpenClaw zapisuje odwołanie do dostawcy podobne do poniższego:
{ "secrets": { "providers": { "team-secrets": { "source": "exec", "pluginIntegration": { "pluginId": "acme-secrets", "integrationId": "secret-store" } } } }}Podczas uruchamiania lub ponownego ładowania OpenClaw rozwiązuje tego dostawcę, ładując bieżące metadane manifestu pluginu, sprawdzając, czy plugin będący właścicielem jest zainstalowany i aktywny, oraz tworząc polecenie wykonawcze na podstawie manifestu. Wyłączenie lub usunięcie pluginu unieważnia dostawcę dla aktywnych odwołań SecretRef. Operatorzy, którzy potrzebują autonomicznej konfiguracji wykonawczej, nadal mogą bezpośrednio definiować ręcznych dostawców command/args.
Obecnie obsługiwane są tylko gotowe konfiguracje source: "exec". command musi mieć wartość ${node}, a args[0] musi być skryptem rozpoznawania ./ ze ścieżką względną wobec katalogu głównego pluginu. Podczas uruchamiania lub ponownego ładowania OpenClaw przekształca go w bieżący plik wykonywalny Node i bezwzględną ścieżkę skryptu wewnątrz pluginu. Opcje Node, takie jak --require, --import, --loader, --env-file, --eval i --print, nie należą do kontraktu gotowej konfiguracji manifestu. Operatorzy potrzebujący poleceń innych niż Node mogą bezpośrednio skonfigurować autonomicznych ręcznych dostawców wykonawczych.
OpenClaw wyprowadza trustedDirs dla gotowych konfiguracji manifestu z katalogu głównego pluginu oraz, w przypadku gotowych konfiguracji ${node}, z katalogu bieżącego pliku wykonywalnego Node. Wartości trustedDirs określone w manifeście są ignorowane. Inne opcje dostawcy wykonawczego, takie jak timeoutMs, noOutputTimeoutMs, maxOutputBytes, jsonOnly, env, passEnv i allowInsecurePath, są przekazywane do standardowej konfiguracji dostawcy wykonawczego SecretRef.
Dokumentacja modelPricing
Użyj modelPricing, gdy dostawca wymaga sterowania zachowaniem cen w płaszczyźnie sterowania przed załadowaniem środowiska wykonawczego. Pamięć podręczna cen Gateway odczytuje te metadane bez importowania kodu środowiska wykonawczego dostawcy.
{ "providers": ["ollama", "openrouter"], "modelPricing": { "providers": { "ollama": { "external": false }, "openrouter": { "openRouter": { "passthroughProviderModel": true }, "liteLLM": false } } }}Pola dostawcy:
| Pole | Typ | Znaczenie |
|---|---|---|
external |
boolean |
Ustaw false dla dostawców lokalnych lub hostowanych samodzielnie, którzy nigdy nie powinni pobierać cen OpenRouter ani LiteLLM. |
openRouter |
false | object |
Mapowanie wyszukiwania cen OpenRouter. false wyłącza wyszukiwanie OpenRouter dla tego dostawcy. |
liteLLM |
false | object |
Mapowanie wyszukiwania cen LiteLLM. false wyłącza wyszukiwanie LiteLLM dla tego dostawcy. |
Pola źródła:
| Pole | Typ | Znaczenie |
|---|---|---|
provider |
string |
Identyfikator dostawcy w zewnętrznym katalogu, jeśli różni się od identyfikatora dostawcy OpenClaw, na przykład z-ai dla dostawcy zai. |
passthroughProviderModel |
boolean |
Traktowanie identyfikatorów modeli zawierających ukośniki jako zagnieżdżonych odwołań dostawca/model, przydatne dla dostawców proxy, takich jak OpenRouter. |
modelIdTransforms |
"version-dots"[] |
Dodatkowe warianty identyfikatorów modeli zewnętrznego katalogu. version-dots próbuje identyfikatorów wersji z kropkami, takich jak claude-opus-4.6. |
Indeks dostawców OpenClaw
Indeks dostawców OpenClaw to należące do OpenClaw metadane podglądu dostawców, których pluginy mogą nie być jeszcze zainstalowane. Nie jest częścią manifestu pluginu. Manifesty pluginów pozostają źródłem nadrzędnym dla zainstalowanych pluginów. Indeks dostawców jest wewnętrznym kontraktem rezerwowym, z którego przyszłe interfejsy instalowalnych dostawców i wyboru modelu przed instalacją będą korzystać, gdy plugin dostawcy nie jest zainstalowany.
Kolejność nadrzędności katalogów:
- Konfiguracja użytkownika.
- Manifest zainstalowanego pluginu
modelCatalog. - Pamięć podręczna katalogu modeli po jawnym odświeżeniu.
- Wiersze podglądu indeksu dostawców OpenClaw.
Indeks dostawców nie może zawierać sekretów, stanu włączenia, haków środowiska wykonawczego ani bieżących danych modeli właściwych dla konta. Jego katalogi podglądu używają tego samego kształtu wiersza dostawcy modelCatalog co manifesty pluginów, ale powinny ograniczać się do stabilnych metadanych prezentacyjnych, chyba że pola adaptera środowiska wykonawczego, takie jak api, baseUrl, ceny lub flagi zgodności są celowo utrzymywane w zgodności z manifestem zainstalowanego pluginu. Dostawcy z aktywnym wykrywaniem /models powinni zapisywać odświeżone wiersze za pośrednictwem jawnej ścieżki pamięci podręcznej katalogu modeli, zamiast wywoływać interfejsy API dostawcy podczas zwykłego wyświetlania listy lub wdrażania.
Wpisy indeksu dostawców mogą również zawierać metadane instalowalnego pluginu dla dostawców, których plugin został przeniesiony poza rdzeń lub nie jest jeszcze zainstalowany z innego powodu. Metadane te odzwierciedlają wzorzec katalogu kanałów: nazwa pakietu, specyfikacja instalacji npm, oczekiwana integralność oraz niewymagające dużych nakładów etykiety wyboru uwierzytelniania wystarczają do wyświetlenia instalowalnej opcji konfiguracji. Po zainstalowaniu pluginu jego manifest ma pierwszeństwo, a wpis indeksu dostawców jest ignorowany dla tego dostawcy.
openclaw doctor --fix migruje niewielki, zamknięty zestaw starszych kluczy możliwości najwyższego poziomu manifestu do contracts.*: speechProviders, mediaUnderstandingProviders, imageGenerationProviders i tools. Żaden z nich (ani żadna inna lista możliwości) nie jest już odczytywany jako pole najwyższego poziomu manifestu; standardowe ładowanie manifestu rozpoznaje je wyłącznie w contracts.
Manifest a package.json
Te dwa pliki służą do różnych celów:
| Plik | Zastosowanie |
|---|---|
openclaw.plugin.json |
Wykrywanie, walidacja konfiguracji, metadane wyboru uwierzytelniania i wskazówki interfejsu użytkownika, które muszą istnieć przed uruchomieniem kodu pluginu |
package.json |
Metadane npm, instalacja zależności i blok openclaw używany do punktów wejścia, kontroli instalacji, konfiguracji lub metadanych katalogu |
W razie wątpliwości, gdzie powinny znaleźć się określone metadane, należy zastosować tę regułę:
- jeśli OpenClaw musi je znać przed załadowaniem kodu pluginu, umieść je w
openclaw.plugin.json - jeśli dotyczą pakowania, plików wejściowych lub zachowania instalacji npm, umieść je w
package.json
Pola package.json wpływające na wykrywanie
Niektóre metadane pluginu używane przed uruchomieniem celowo znajdują się w package.json, w bloku openclaw, zamiast w openclaw.plugin.json. openclaw.bundle i openclaw.bundle.json nie są kontraktami pluginów OpenClaw; natywne pluginy muszą używać openclaw.plugin.json wraz z obsługiwanymi polami package.json#openclaw opisanymi poniżej.
Ważne przykłady:
| Pole | Znaczenie |
|---|---|
openclaw.extensions |
Deklaruje natywne punkty wejścia pluginu. Muszą znajdować się w katalogu pakietu pluginu. |
openclaw.runtimeExtensions |
Deklaruje zbudowane punkty wejścia środowiska uruchomieniowego JavaScript dla zainstalowanych pakietów. Muszą znajdować się w katalogu pakietu pluginu. |
openclaw.setupEntry |
Lekki punkt wejścia używany wyłącznie do konfiguracji podczas wdrażania, odroczonego uruchamiania kanału oraz wykrywania statusu kanału/SecretRef w trybie tylko do odczytu. Musi znajdować się w katalogu pakietu pluginu. |
openclaw.runtimeSetupEntry |
Deklaruje zbudowany punkt wejścia konfiguracji JavaScript dla zainstalowanych pakietów. Wymaga setupEntry, musi istnieć i znajdować się w katalogu pakietu pluginu. |
openclaw.channel |
Lekkie metadane katalogu kanałów, takie jak etykiety, ścieżki dokumentacji, aliasy i tekst opcji wyboru. |
openclaw.channel.commands |
Statyczne metadane automatycznych wartości domyślnych natywnych poleceń i natywnych umiejętności, używane przez konfigurację, audyt i powierzchnie list poleceń przed załadowaniem środowiska uruchomieniowego kanału. |
openclaw.channel.configuredState |
Lekkie metadane mechanizmu sprawdzającego stan konfiguracji, który może odpowiedzieć na pytanie „czy konfiguracja oparta wyłącznie na zmiennych środowiskowych już istnieje?” bez ładowania pełnego środowiska uruchomieniowego kanału. |
openclaw.channel.persistedAuthState |
Lekkie metadane mechanizmu sprawdzającego utrwalone uwierzytelnienie, który może odpowiedzieć na pytanie „czy istnieje już jakakolwiek aktywna sesja?” bez ładowania pełnego środowiska uruchomieniowego kanału. |
openclaw.install.clawhubSpec / openclaw.install.npmSpec / openclaw.install.localPath |
Wskazówki dotyczące instalowania/aktualizowania pluginów dołączonych i publikowanych zewnętrznie. |
openclaw.install.defaultChoice |
Preferowana ścieżka instalacji, gdy dostępnych jest wiele źródeł instalacji. |
openclaw.install.minHostVersion |
Minimalna obsługiwana wersja hosta OpenClaw określona dolną granicą semver, taką jak >=2026.3.22 lub >=2026.5.1-beta.1. |
openclaw.compat.pluginApi |
Minimalny zakres API pluginów OpenClaw wymagany przez ten pakiet, określony dolną granicą semver, taką jak >=2026.5.27. |
openclaw.install.expectedIntegrity |
Oczekiwany ciąg integralności dystrybucji npm, taki jak sha512-...; procesy instalacji i aktualizacji weryfikują względem niego pobrany artefakt. |
openclaw.install.allowInvalidConfigRecovery |
Umożliwia wąsko określoną ścieżkę odzyskiwania przez ponowną instalację dołączonego pluginu, gdy konfiguracja jest nieprawidłowa. |
openclaw.install.requiredPlatformPackages |
Aliasy pakietów npm, które muszą zostać zmaterializowane, gdy ich ograniczenia platformy w pliku blokady odpowiadają bieżącemu hostowi. |
openclaw.startup.deferConfiguredChannelFullLoadUntilAfterListen |
Umożliwia załadowanie powierzchni kanału środowiska uruchomieniowego konfiguracji przed rozpoczęciem nasłuchiwania, a następnie odracza pełny skonfigurowany plugin kanału do aktywacji po rozpoczęciu nasłuchiwania. |
Metadane manifestu określają, które opcje dostawcy/kanału/konfiguracji pojawiają się podczas wdrażania przed załadowaniem środowiska uruchomieniowego. package.json#openclaw.install informuje proces wdrażania, jak pobrać lub włączyć ten plugin, gdy zostanie wybrana jedna z tych opcji. Nie należy przenosić wskazówek instalacyjnych do openclaw.plugin.json.
openclaw.install.minHostVersion jest egzekwowane podczas instalacji i ładowania rejestru manifestów dla źródeł pluginów, które nie są dołączone. Nieprawidłowe wartości są odrzucane; wartości nowsze, ale prawidłowe powodują pominięcie zewnętrznych pluginów na starszych hostach. Zakłada się, że dołączone pluginy źródłowe mają tę samą wersję co kod źródłowy hosta.
openclaw.install.requiredPlatformPackages jest przeznaczone dla pakietów npm, które udostępniają wymagane natywne pliki binarne za pośrednictwem opcjonalnych aliasów właściwych dla platformy. Należy podać samą nazwę pakietu npm dla aliasu każdej obsługiwanej platformy. Podczas instalacji npm OpenClaw weryfikuje tylko zadeklarowany alias, którego ograniczenia w pliku blokady odpowiadają bieżącemu hostowi. Jeśli npm zgłosi powodzenie, ale pominie ten alias, OpenClaw ponawia próbę raz ze świeżą pamięcią podręczną i wycofuje instalację, jeśli aliasu nadal brakuje.
openclaw.compat.pluginApi jest egzekwowane podczas instalacji pakietu dla źródeł pluginów, które nie są dołączone. Należy używać go do określenia dolnej granicy API SDK/środowiska uruchomieniowego pluginów OpenClaw, względem której zbudowano pakiet. Może być bardziej rygorystyczne niż minHostVersion, gdy pakiet pluginu wymaga nowszego API, ale nadal zachowuje niższą wskazówkę instalacyjną dla innych procesów. Oficjalna synchronizacja wydań OpenClaw domyślnie podnosi istniejące dolne granice API oficjalnych pluginów do wersji wydania OpenClaw, ale wydania obejmujące wyłącznie plugin mogą zachować niższą granicę, gdy pakiet celowo obsługuje starsze hosty. Nie należy używać samej wersji pakietu jako kontraktu zgodności. peerDependencies.openclaw pozostaje metadanymi pakietu npm; OpenClaw używa kontraktu openclaw.compat.pluginApi do podejmowania decyzji o zgodności instalacji.
Oficjalne metadane instalacji na żądanie powinny używać clawhubSpec, gdy plugin jest opublikowany w ClawHub; proces wdrażania traktuje je jako preferowane źródło zdalne i po instalacji zapisuje informacje o artefakcie ClawHub. npmSpec pozostaje awaryjnym mechanizmem zgodności dla pakietów, które nie zostały jeszcze przeniesione do ClawHub.
Dokładne przypięcie wersji npm znajduje się już w npmSpec, na przykład "npmSpec": "@wecom/wecom-openclaw-plugin@1.2.3". Oficjalne wpisy katalogu zewnętrznego powinny łączyć dokładne specyfikacje z expectedIntegrity, aby procesy aktualizacji kończyły się niepowodzeniem w sposób bezpieczny, jeśli pobrany artefakt npm nie odpowiada już przypiętemu wydaniu. Interaktywny proces wdrażania nadal oferuje zaufane specyfikacje npm z rejestru, w tym same nazwy pakietów i znaczniki dystrybucji, ze względu na zgodność. Diagnostyka katalogu może rozróżniać źródła: dokładne, zmienne, przypięte integralnością, bez integralności, z niezgodnością nazwy pakietu oraz z nieprawidłową opcją domyślną. Ostrzega również, gdy występuje expectedIntegrity, ale nie istnieje prawidłowe źródło npm, które można przypiąć. Gdy występuje expectedIntegrity, procesy instalacji/aktualizacji je egzekwują; gdy zostanie pominięte, rozstrzygnięcie rejestru jest zapisywane bez przypięcia integralności.
Pluginy kanałów powinny udostępniać openclaw.setupEntry, gdy skanowanie statusu, listy kanałów lub SecretRef wymaga identyfikowania skonfigurowanych kont bez ładowania pełnego środowiska uruchomieniowego. Punkt wejścia konfiguracji powinien udostępniać metadane kanału oraz bezpieczne dla konfiguracji adaptery ustawień, statusu i sekretów; klientów sieciowych, procesy nasłuchujące Gateway i środowiska uruchomieniowe transportu należy pozostawić w głównym punkcie wejścia rozszerzenia.
Pola punktów wejścia środowiska uruchomieniowego nie zastępują kontroli granic pakietu dla pól źródłowych punktów wejścia. Na przykład openclaw.runtimeExtensions nie może umożliwić załadowania ścieżki openclaw.extensions, która wychodzi poza pakiet.
Zakres openclaw.install.allowInvalidConfigRecovery jest celowo wąski. Nie umożliwia instalowania dowolnych uszkodzonych konfiguracji. Obecnie pozwala procesom instalacji wyłącznie odzyskiwać sprawność po konkretnych błędach aktualizacji nieaktualnych dołączonych pluginów, takich jak brakująca ścieżka dołączonego pluginu lub nieaktualny wpis channels.<id> dotyczący tego samego dołączonego pluginu. Niepowiązane błędy konfiguracji nadal blokują instalację i kierują operatorów do openclaw doctor --fix.
openclaw.channel.persistedAuthState to metadane pakietu dla niewielkiego modułu sprawdzającego:
{ "openclaw": { "channel": { "id": "whatsapp", "persistedAuthState": { "specifier": "./auth-presence", "exportName": "hasAnyWhatsAppAuth" } } }}Należy ich używać, gdy konfiguracja, narzędzie doctor, status lub procesy sprawdzania obecności w trybie tylko do odczytu wymagają taniego sprawdzenia uwierzytelnienia typu tak/nie przed załadowaniem pełnego pluginu kanału. Utrwalony stan uwierzytelnienia nie jest skonfigurowanym stanem kanału: nie należy używać tych metadanych do automatycznego włączania pluginów, naprawiania zależności środowiska uruchomieniowego ani decydowania, czy środowisko uruchomieniowe kanału powinno zostać załadowane. Docelowy eksport powinien być niewielką funkcją, która odczytuje wyłącznie utrwalony stan; nie należy kierować go przez pełny moduł zbiorczy środowiska uruchomieniowego kanału.
openclaw.channel.configuredState obsługuje tanie kontrole konfiguracji. Gdy zmienne środowiskowe są wystarczające, preferowane są deklaratywne metadane środowiska:
{ "openclaw": { "channel": { "id": "telegram", "configuredState": { "env": { "allOf": ["TELEGRAM_BOT_TOKEN"] } } } }}Należy używać env.allOf, gdy wymagana jest każda z wymienionych zmiennych, oraz env.anyOf, gdy wystarczy dowolna jedna niepusta zmienna. Jeśli niewielka kontrola niewymagająca środowiska uruchomieniowego potrzebuje czegoś więcej niż metadane środowiska, należy użyć specifier wraz z exportName, jak pokazano dla persistedAuthState; gdy występuje env, OpenClaw używa go bez ładowania tego modułu. Jeśli kontrola wymaga pełnego rozstrzygnięcia konfiguracji lub rzeczywistego środowiska uruchomieniowego kanału, tę logikę należy pozostawić w haku config.hasConfiguredState pluginu.
Kolejność pierwszeństwa wykrywania (zduplikowane identyfikatory pluginów)
OpenClaw wykrywa pluginy w trzech katalogach głównych, sprawdzanych w następującej kolejności: pluginy dołączone do OpenClaw, globalny katalog główny instalacji (~/.openclaw/extensions) i katalog główny bieżącego obszaru roboczego (<workspace>/.openclaw/extensions), a także wszystkie jawne wpisy plugins.load.paths.
Jeśli dwa wykryte elementy mają ten sam id, zachowywany jest tylko manifest o najwyższym pierwszeństwie; duplikaty o niższym pierwszeństwie są odrzucane zamiast ładowania obok niego. Kolejność od najwyższego do najniższego pierwszeństwa:
- Wybrany przez konfigurację — ścieżka jawnie przypięta w
plugins.entries.<id> - Instalacja globalna odpowiadająca śledzonemu rekordowi instalacji — plugin zainstalowany za pomocą
openclaw plugin install/openclaw plugin update, którego śledzenie instalacji OpenClaw rozpoznaje dla tego samego identyfikatora, nawet jeśli identyfikator należy również do dołączonego pluginu - Dołączony — pluginy dostarczane z OpenClaw
- Obszar roboczy — pluginy wykryte względem bieżącego obszaru roboczego
- Każdy inny wykryty kandydat
Konsekwencje:
- Rozgałęziona lub nieaktualna kopia dołączonego pluginu, znajdująca się bez śledzenia w obszarze roboczym lub globalnym katalogu głównym, nie zastąpi dołączonej kompilacji.
- Aby zastąpić dołączony plugin, należy uruchomić
openclaw plugin installdla tego identyfikatora, dzięki czemu śledzona instalacja globalna uzyska wyższe pierwszeństwo niż dołączona kopia, albo przypiąć konkretną ścieżkę za pomocąplugins.entries.<id>, aby wygrała dzięki pierwszeństwu wyboru przez konfigurację. - Odrzucenia duplikatów są rejestrowane, aby narzędzie Doctor i diagnostyka uruchamiania mogły wskazać odrzuconą kopię.
- Zastąpienia duplikatów wybrane przez konfigurację są opisywane w diagnostyce jako jawne zastąpienia, ale nadal generują ostrzeżenie, aby nieaktualne rozwidlenia i przypadkowe przesłonięcia pozostawały widoczne.
Wymagania dotyczące schematu JSON
- Każdy plugin musi zawierać schemat JSON, nawet jeśli nie przyjmuje żadnej konfiguracji.
- Pusty schemat jest dopuszczalny (na przykład
{ "type": "object", "additionalProperties": false }). - Schematy są walidowane podczas odczytu i zapisu konfiguracji, a nie w czasie wykonywania.
- Podczas rozszerzania lub tworzenia forka dołączonego pluginu o nowe klucze konfiguracji należy jednocześnie zaktualizować
openclaw.plugin.jsonconfigSchematego pluginu. Schematy dołączonych pluginów są rygorystyczne, więc dodanieplugins.entries.<id>.config.myNewKeyw konfiguracji użytkownika bez dodaniamyNewKeydoconfigSchema.propertieszostanie odrzucone przed załadowaniem środowiska uruchomieniowego pluginu.
Przykład rozszerzenia schematu:
{ "configSchema": { "type": "object", "additionalProperties": false, "properties": { "myNewKey": { "type": "string" } } }}Zachowanie walidacji
- Nieznane klucze
channels.*są błędami, chyba że identyfikator kanału jest zadeklarowany w manifeście pluginu. Jeśli ten sam identyfikator występuje również wplugins.allow,plugins.entrieslubplugins.installs(plugin, do którego istnieje odwołanie, ale którego obecnie nie można wykryć), OpenClaw obniża rangę problemu do ostrzeżenia. - Odwołania w
plugins.entries.<id>,plugins.allowiplugins.denydo nieznanych identyfikatorów pluginów są ostrzeżeniami („zignorowano nieaktualny wpis konfiguracji”), a nie błędami, dzięki czemu aktualizacje oraz usunięte lub przemianowane pluginy nie blokują uruchomienia Gateway. - Odwołanie w
plugins.slots.memorydo nieznanego identyfikatora pluginu jest błędem, z wyjątkiem znanego oficjalnego zewnętrznego pluginumemory-lancedb, w przypadku którego wyświetlane jest ostrzeżenie. - Jeśli plugin jest zainstalowany, ale jego manifest lub schemat jest uszkodzony albo go brakuje, walidacja kończy się niepowodzeniem, a Doctor zgłasza błąd pluginu.
- Jeśli konfiguracja pluginu istnieje, ale plugin jest wyłączony, konfiguracja zostaje zachowana, a w Doctor i logach pojawia się ostrzeżenie.
Pełny schemat plugins.* opisano w dokumentacji konfiguracji.
Uwagi
- Manifest jest wymagany w przypadku natywnych pluginów OpenClaw, w tym ładowanych z lokalnego systemu plików. Środowisko uruchomieniowe nadal ładuje moduł pluginu osobno; manifest służy wyłącznie do wykrywania i walidacji.
- Natywne manifesty są analizowane jako JSON5, dlatego komentarze, końcowe przecinki i klucze bez cudzysłowów są dozwolone, o ile końcowa wartość nadal jest obiektem.
- Moduł ładujący manifest odczytuje wyłącznie udokumentowane pola manifestu. Należy unikać niestandardowych kluczy najwyższego poziomu.
channels,providers,cliBackendsiskillsmożna pominąć, jeśli plugin ich nie potrzebuje.providerCatalogEntrymusi pozostać lekki i nie powinien importować rozbudowanego kodu środowiska uruchomieniowego; należy używać go do statycznych metadanych katalogu dostawców lub wąskich deskryptorów wykrywania, a nie do wykonywania operacji podczas obsługi żądań.- Wyłączne rodzaje pluginów są wybierane przez
plugins.slots.*:kind: "memory"za pomocąplugins.slots.memory(domyślniememory-core),kind: "context-engine"za pomocąplugins.slots.contextEngine(domyślnielegacy). - Wyłączny rodzaj pluginu należy zadeklarować w tym manifeście. Pole
OpenClawPluginDefinition.kindpunktu wejścia środowiska uruchomieniowego jest przestarzałe i pozostaje jedynie jako mechanizm zgodności ze starszymi pluginami. - Metadane zmiennych środowiskowych (
setup.providers[].envVars, przestarzałeproviderAuthEnvVarsorazchannelEnvVars) mają wyłącznie charakter deklaratywny. Status, audyt, walidacja dostarczania Cron i inne powierzchnie tylko do odczytu nadal uwzględniają poziom zaufania pluginu oraz obowiązujące zasady aktywacji, zanim uznają zmienną środowiskową za skonfigurowaną. - Metadane kreatora środowiska uruchomieniowego wymagające kodu dostawcy opisano w sekcji Hooki środowiska uruchomieniowego dostawcy.
- Jeśli plugin zależy od modułów natywnych, należy udokumentować kroki kompilacji oraz wszelkie wymagania dotyczące listy dozwolonych elementów menedżera pakietów (na przykład pnpm
allow-build-scripts+pnpm rebuild <package>).