Przejdź do głównej treści

Manifest Pluginu (openclaw.plugin.json)

Ta strona dotyczy wyłącznie natywnego manifestu Pluginu OpenClaw. Informacje o zgodnych układach bundli znajdziesz tutaj: Bundle Pluginów. Zgodne formaty bundli używają innych plików manifestu:
  • Bundle Codex: .codex-plugin/plugin.json
  • Bundle Claude: .claude-plugin/plugin.json lub domyślny układ komponentów Claude bez manifestu
  • Bundle Cursor: .cursor-plugin/plugin.json
OpenClaw automatycznie wykrywa również te układy bundli, ale nie są one walidowane względem schematu openclaw.plugin.json opisanego tutaj. W przypadku zgodnych bundli OpenClaw obecnie odczytuje metadane bundla oraz zadeklarowane korzenie Skills, korzenie poleceń Claude, domyślne wartości settings.json dla bundla Claude, domyślne wartości LSP dla bundla Claude oraz obsługiwane pakiety hooków, gdy układ odpowiada oczekiwaniom środowiska uruchomieniowego OpenClaw. Każdy natywny Plugin OpenClaw musi zawierać plik openclaw.plugin.json w katalogu głównym Pluginu. OpenClaw używa tego manifestu do walidacji konfiguracji bez wykonywania kodu Pluginu. Brakujące lub nieprawidłowe manifesty są traktowane jako błędy Pluginu i blokują walidację konfiguracji. Zobacz pełny przewodnik po systemie Pluginów: Pluginy. Informacje o natywnym modelu capabilities i bieżące wskazówki dotyczące zewnętrznej kompatybilności: Model capabilities.

Do czego służy ten plik

openclaw.plugin.json to metadane, które OpenClaw odczytuje przed załadowaniem kodu Twojego Pluginu. Używaj go do:
  • tożsamości Pluginu
  • walidacji konfiguracji
  • metadanych uwierzytelniania i onboardingu, które powinny być dostępne bez uruchamiania runtime Pluginu
  • tanich wskazówek aktywacji, które powierzchnie control-plane mogą sprawdzać przed załadowaniem runtime
  • tanich deskryptorów konfiguracji, które powierzchnie konfiguracji/onboardingu mogą sprawdzać przed załadowaniem runtime
  • metadanych aliasów i automatycznego włączania, które powinny być rozwiązywane przed załadowaniem runtime Pluginu
  • skróconych metadanych własności rodziny modeli, które powinny automatycznie aktywować Plugin przed załadowaniem runtime
  • statycznych snapshotów własności capabilities używanych do wbudowanego okablowania zgodności i pokrycia kontraktów
  • tanich metadanych runnera QA, które współdzielony host openclaw qa może sprawdzać przed załadowaniem runtime Pluginu
  • metadanych konfiguracji specyficznych dla kanału, które powinny być scalane z powierzchniami katalogu i walidacji bez ładowania runtime
  • wskazówek dla UI konfiguracji
Nie używaj go do:
  • rejestrowania zachowania runtime
  • deklarowania entrypointów kodu
  • metadanych instalacji npm
To należy do kodu Twojego Pluginu i package.json.

Minimalny przykład

{
  "id": "voice-call",
  "configSchema": {
    "type": "object",
    "additionalProperties": false,
    "properties": {}
  }
}

Rozbudowany przykład

{
  "id": "openrouter",
  "name": "OpenRouter",
  "description": "Plugin providera OpenRouter",
  "version": "1.0.0",
  "providers": ["openrouter"],
  "modelSupport": {
    "modelPrefixes": ["router-"]
  },
  "providerEndpoints": [
    {
      "endpointClass": "xai-native",
      "hosts": ["api.x.ai"]
    }
  ],
  "cliBackends": ["openrouter-cli"],
  "syntheticAuthRefs": ["openrouter-cli"],
  "providerAuthEnvVars": {
    "openrouter": ["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

PoleWymaganeTypCo oznacza
idTakstringKanoniczny identyfikator Pluginu. To identyfikator używany w plugins.entries.<id>.
configSchemaTakobjectWbudowany schemat JSON Schema dla konfiguracji tego Pluginu.
enabledByDefaultNietrueOznacza, że wbudowany Plugin jest domyślnie włączony. Pomiń to pole lub ustaw dowolną wartość inną niż true, aby Plugin pozostał domyślnie wyłączony.
legacyPluginIdsNiestring[]Starsze identyfikatory normalizowane do tego kanonicznego identyfikatora Pluginu.
autoEnableWhenConfiguredProvidersNiestring[]Identyfikatory providerów, które powinny automatycznie włączyć ten Plugin, gdy uwierzytelnianie, konfiguracja lub odwołania do modeli o nich wspominają.
kindNie"memory" | "context-engine"Deklaruje wyłączny typ Pluginu używany przez plugins.slots.*.
channelsNiestring[]Identyfikatory kanałów należących do tego Pluginu. Używane do wykrywania i walidacji konfiguracji.
providersNiestring[]Identyfikatory providerów należących do tego Pluginu.
modelSupportNieobjectSkrócone metadane rodziny modeli zarządzane przez manifest, używane do automatycznego załadowania Pluginu przed uruchomieniem runtime.
providerEndpointsNieobject[]Metadane hosta/baseUrl endpointów zarządzane przez manifest dla tras providera, które rdzeń musi sklasyfikować przed załadowaniem runtime providera.
cliBackendsNiestring[]Identyfikatory backendów inferencji CLI należących do tego Pluginu. Używane do automatycznej aktywacji przy starcie na podstawie jawnych odwołań w konfiguracji.
syntheticAuthRefsNiestring[]Odwołania do providerów lub backendów CLI, których zarządzany przez Plugin hook synthetic auth powinien zostać sprawdzony podczas zimnego wykrywania modeli przed załadowaniem runtime.
nonSecretAuthMarkersNiestring[]Wartości zastępczych kluczy API należące do wbudowanego Pluginu, które reprezentują niejawną lokalną, OAuth lub ambient credential state.
commandAliasesNieobject[]Nazwy poleceń należące do tego Pluginu, które powinny generować diagnostykę konfiguracji i CLI uwzględniającą Plugin przed załadowaniem runtime.
providerAuthEnvVarsNieRecord<string, string[]>Lekkie metadane zmiennych środowiskowych uwierzytelniania providera, które OpenClaw może sprawdzić bez ładowania kodu Pluginu.
providerAuthAliasesNieRecord<string, string>Identyfikatory providerów, które powinny używać ponownie innego identyfikatora providera do wyszukiwania uwierzytelniania, na przykład provider kodowania współdzielący klucz API i profile auth bazowego providera.
channelEnvVarsNieRecord<string, string[]>Lekkie metadane zmiennych środowiskowych kanału, które OpenClaw może sprawdzić bez ładowania kodu Pluginu. Używaj tego dla konfiguracji kanału sterowanej przez env lub dla powierzchni auth, które powinny być widoczne dla ogólnych helperów startu/konfiguracji.
providerAuthChoicesNieobject[]Lekkie metadane wyboru uwierzytelniania dla selektorów onboardingu, rozwiązywania preferowanego providera i prostego powiązania flag CLI.
activationNieobjectLekkie wskazówki aktywacji dla ładowania wyzwalanego przez providera, polecenie, kanał, trasę i capability. Tylko metadane; rzeczywiste zachowanie nadal należy do runtime Pluginu.
setupNieobjectLekkie deskryptory konfiguracji/onboardingu, które powierzchnie wykrywania i konfiguracji mogą sprawdzać bez ładowania runtime Pluginu.
qaRunnersNieobject[]Lekkie deskryptory runnerów QA używane przez współdzielony host openclaw qa przed załadowaniem runtime Pluginu.
contractsNieobjectStatyczny snapshot capabilities wbudowanego pakietu dla własności speech, realtime transcription, realtime voice, media-understanding, image-generation, music-generation, video-generation, web-fetch, web search oraz tools.
channelConfigsNieRecord<string, object>Metadane konfiguracji kanału zarządzane przez manifest, scalane z powierzchniami wykrywania i walidacji przed załadowaniem runtime.
skillsNiestring[]Katalogi Skills do załadowania, względne wobec katalogu głównego Pluginu.
nameNiestringCzytelna dla człowieka nazwa Pluginu.
descriptionNiestringKrótkie podsumowanie wyświetlane na powierzchniach Pluginu.
versionNiestringInformacyjna wersja Pluginu.
uiHintsNieRecord<string, object>Etykiety UI, placeholdery i wskazówki dotyczące wrażliwości dla pól konfiguracji.

Opis providerAuthChoices

Każdy wpis providerAuthChoices opisuje jeden wybór onboardingu lub uwierzytelniania. OpenClaw odczytuje to przed załadowaniem runtime providera.
PoleWymaganeTypCo oznacza
providerTakstringIdentyfikator providera, do którego należy ten wybór.
methodTakstringIdentyfikator metody auth, do której ma nastąpić przekazanie.
choiceIdTakstringStabilny identyfikator wyboru auth używany przez onboarding i przepływy CLI.
choiceLabelNiestringEtykieta widoczna dla użytkownika. Jeśli zostanie pominięta, OpenClaw użyje choiceId.
choiceHintNiestringKrótki tekst pomocniczy dla selektora.
assistantPriorityNienumberNiższe wartości są sortowane wcześniej w interaktywnych selektorach sterowanych przez asystenta.
assistantVisibilityNie"visible" | "manual-only"Ukrywa wybór w selektorach asystenta, nadal pozwalając na ręczny wybór w CLI.
deprecatedChoiceIdsNiestring[]Starsze identyfikatory wyboru, które powinny przekierowywać użytkowników do tego zastępczego wyboru.
groupIdNiestringOpcjonalny identyfikator grupy do grupowania powiązanych wyborów.
groupLabelNiestringEtykieta tej grupy widoczna dla użytkownika.
groupHintNiestringKrótki tekst pomocniczy dla grupy.
optionKeyNiestringWewnętrzny klucz opcji dla prostych przepływów auth z jedną flagą.
cliFlagNiestringNazwa flagi CLI, na przykład --openrouter-api-key.
cliOptionNiestringPełny kształt opcji CLI, na przykład --openrouter-api-key <key>.
cliDescriptionNiestringOpis używany w pomocy CLI.
onboardingScopesNieArray<"text-inference" | "image-generation">Na których powierzchniach onboardingu ten wybór powinien się pojawiać. Jeśli pole zostanie pominięte, domyślnie używane jest ["text-inference"].

Opis commandAliases

Użyj commandAliases, gdy Plugin posiada nazwę polecenia runtime, którą użytkownicy mogą błędnie umieścić w plugins.allow lub próbować uruchomić jako główne polecenie CLI. OpenClaw używa tych metadanych do diagnostyki bez importowania kodu runtime Pluginu.
{
  "commandAliases": [
    {
      "name": "dreaming",
      "kind": "runtime-slash",
      "cliCommand": "memory"
    }
  ]
}
PoleWymaganeTypCo oznacza
nameTakstringNazwa polecenia należącego do tego Pluginu.
kindNie"runtime-slash"Oznacza alias jako polecenie slash czatu, a nie główne polecenie CLI.
cliCommandNiestringPowiązane główne polecenie CLI sugerowane do operacji CLI, jeśli istnieje.

Opis activation

Użyj activation, gdy Plugin może w tani sposób zadeklarować, które zdarzenia control-plane powinny aktywować go później.

Opis qaRunners

Użyj qaRunners, gdy Plugin wnosi jeden lub więcej runnerów transportu pod współdzielony główny węzeł openclaw qa. Zachowaj te metadane jako lekkie i statyczne; rzeczywista rejestracja CLI nadal należy do runtime Pluginu poprzez lekką powierzchnię runtime-api.ts, która eksportuje qaRunnerCliRegistrations.
{
  "qaRunners": [
    {
      "commandName": "matrix",
      "description": "Uruchom opartą na Dockerze aktywną ścieżkę QA Matrix przeciwko tymczasowemu homeserverowi"
    }
  ]
}
PoleWymaganeTypCo oznacza
commandNameTakstringPodpolecenie montowane pod openclaw qa, na przykład matrix.
descriptionNiestringZapasowy tekst pomocy używany, gdy współdzielony host potrzebuje polecenia zastępczego.
Ten blok zawiera wyłącznie metadane. Nie rejestruje zachowania runtime i nie zastępuje register(...), setupEntry ani innych entrypointów runtime/Pluginu. Obecni konsumenci używają go jako wskazówki zawężającej przed szerszym ładowaniem Pluginu, więc brak metadanych aktywacji zwykle wpływa tylko na wydajność; nie powinien zmieniać poprawności, dopóki nadal istnieją starsze mechanizmy własności w manifeście.
{
  "activation": {
    "onProviders": ["openai"],
    "onCommands": ["models"],
    "onChannels": ["web"],
    "onRoutes": ["gateway-webhook"],
    "onCapabilities": ["provider", "tool"]
  }
}
PoleWymaganeTypCo oznacza
onProvidersNiestring[]Identyfikatory providerów, które powinny aktywować ten Plugin na żądanie.
onCommandsNiestring[]Identyfikatory poleceń, które powinny aktywować ten Plugin.
onChannelsNiestring[]Identyfikatory kanałów, które powinny aktywować ten Plugin.
onRoutesNiestring[]Rodzaje tras, które powinny aktywować ten Plugin.
onCapabilitiesNieArray<"provider" | "channel" | "tool" | "hook">Ogólne wskazówki capabilities używane przez planowanie aktywacji control-plane.
Obecni aktywni konsumenci:
  • planowanie CLI wyzwalane poleceniami wraca do starszych commandAliases[].cliCommand lub commandAliases[].name
  • planowanie konfiguracji/kanału wyzwalane kanałem wraca do starszej własności channels[], gdy brakuje jawnych metadanych aktywacji kanału
  • planowanie konfiguracji/runtime wyzwalane providerem wraca do starszej własności providers[] i najwyższego poziomu cliBackends[], gdy brakuje jawnych metadanych aktywacji providera

Opis setup

Użyj setup, gdy powierzchnie konfiguracji i onboardingu potrzebują lekkich metadanych należących do Pluginu przed załadowaniem runtime.
{
  "setup": {
    "providers": [
      {
        "id": "openai",
        "authMethods": ["api-key"],
        "envVars": ["OPENAI_API_KEY"]
      }
    ],
    "cliBackends": ["openai-cli"],
    "configMigrations": ["legacy-openai-auth"],
    "requiresRuntime": false
  }
}
Najwyższego poziomu cliBackends pozostaje poprawne i nadal opisuje backendy inferencji CLI. setup.cliBackends to powierzchnia deskryptora specyficzna dla konfiguracji dla przepływów control-plane/konfiguracji, które powinny pozostać wyłącznie metadanymi. Jeśli są obecne, setup.providers i setup.cliBackends są preferowaną powierzchnią wyszukiwania opartą najpierw na deskryptorze dla wykrywania konfiguracji. Jeśli deskryptor jedynie zawęża kandydujący Plugin, a konfiguracja nadal potrzebuje bogatszych hooków runtime działających w czasie konfiguracji, ustaw requiresRuntime: true i pozostaw setup-api jako zapasową ścieżkę wykonania. Ponieważ wyszukiwanie konfiguracji może wykonywać należący do Pluginu kod setup-api, znormalizowane wartości setup.providers[].id i setup.cliBackends[] muszą pozostać unikalne globalnie we wszystkich wykrytych Pluginach. Niejednoznaczna własność kończy się bezpiecznym zamknięciem zamiast wybierania zwycięzcy na podstawie kolejności wykrywania.

Opis setup.providers

PoleWymaganeTypCo oznacza
idTakstringIdentyfikator providera ujawniany podczas konfiguracji lub onboardingu. Zachowaj globalną unikalność znormalizowanych identyfikatorów.
authMethodsNiestring[]Identyfikatory metod konfiguracji/auth obsługiwane przez tego providera bez ładowania pełnego runtime.
envVarsNiestring[]Zmienne środowiskowe, które ogólne powierzchnie konfiguracji/statusu mogą sprawdzać przed załadowaniem runtime Pluginu.

Pola setup

PoleWymaganeTypCo oznacza
providersNieobject[]Deskryptory konfiguracji providera ujawniane podczas konfiguracji i onboardingu.
cliBackendsNiestring[]Identyfikatory backendów używane w czasie konfiguracji do wyszukiwania najpierw po deskryptorze. Zachowaj globalną unikalność znormalizowanych identyfikatorów.
configMigrationsNiestring[]Identyfikatory migracji konfiguracji należące do powierzchni konfiguracji tego Pluginu.
requiresRuntimeNiebooleanCzy konfiguracja nadal wymaga wykonania setup-api po wyszukaniu po deskryptorze.

Opis uiHints

uiHints to mapa od nazw pól konfiguracji do niewielkich wskazówek renderowania.
{
  "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ć:
PoleTypCo oznacza
labelstringEtykieta pola widoczna dla użytkownika.
helpstringKrótki tekst pomocniczy.
tagsstring[]Opcjonalne tagi UI.
advancedbooleanOznacza pole jako zaawansowane.
sensitivebooleanOznacza pole jako sekretne lub wrażliwe.
placeholderstringTekst placeholdera dla pól formularza.

Opis contracts

Używaj contracts wyłącznie do statycznych metadanych własności capabilities, które OpenClaw może odczytać bez importowania runtime Pluginu.
{
  "contracts": {
    "speechProviders": ["openai"],
    "realtimeTranscriptionProviders": ["openai"],
    "realtimeVoiceProviders": ["openai"],
    "mediaUnderstandingProviders": ["openai", "openai-codex"],
    "imageGenerationProviders": ["openai"],
    "videoGenerationProviders": ["qwen"],
    "webFetchProviders": ["firecrawl"],
    "webSearchProviders": ["gemini"],
    "tools": ["firecrawl_search", "firecrawl_scrape"]
  }
}
Każda lista jest opcjonalna:
PoleTypCo oznacza
speechProvidersstring[]Identyfikatory providerów speech należących do tego Pluginu.
realtimeTranscriptionProvidersstring[]Identyfikatory providerów realtime transcription należących do tego Pluginu.
realtimeVoiceProvidersstring[]Identyfikatory providerów realtime voice należących do tego Pluginu.
mediaUnderstandingProvidersstring[]Identyfikatory providerów media-understanding należących do tego Pluginu.
imageGenerationProvidersstring[]Identyfikatory providerów image-generation należących do tego Pluginu.
videoGenerationProvidersstring[]Identyfikatory providerów video-generation należących do tego Pluginu.
webFetchProvidersstring[]Identyfikatory providerów web-fetch należących do tego Pluginu.
webSearchProvidersstring[]Identyfikatory providerów web search należących do tego Pluginu.
toolsstring[]Nazwy tools agenta należących do tego Pluginu do sprawdzania kontraktów wbudowanych.

Opis channelConfigs

Użyj channelConfigs, gdy Plugin kanału potrzebuje lekkich metadanych konfiguracji przed załadowaniem runtime.
{
  "channelConfigs": {
    "matrix": {
      "schema": {
        "type": "object",
        "additionalProperties": false,
        "properties": {
          "homeserverUrl": { "type": "string" }
        }
      },
      "uiHints": {
        "homeserverUrl": {
          "label": "URL homeservera",
          "placeholder": "https://matrix.example.com"
        }
      },
      "label": "Matrix",
      "description": "Połączenie z homeserverem Matrix",
      "preferOver": ["matrix-legacy"]
    }
  }
}
Każdy wpis kanału może zawierać:
PoleTypCo oznacza
schemaobjectJSON Schema dla channels.<id>. Wymagane dla każdego zadeklarowanego wpisu konfiguracji kanału.
uiHintsRecord<string, object>Opcjonalne etykiety UI/placeholdery/wskazówki dotyczące wrażliwości dla tej sekcji konfiguracji kanału.
labelstringEtykieta kanału scalana z powierzchniami selektora i inspekcji, gdy metadane runtime nie są jeszcze gotowe.
descriptionstringKrótki opis kanału dla powierzchni inspekcji i katalogu.
preferOverstring[]Starsze lub niżej priorytetyzowane identyfikatory Pluginów, które ten kanał powinien wyprzedzać na powierzchniach wyboru.

Opis modelSupport

Użyj modelSupport, gdy OpenClaw ma wnioskować o Twoim Pluginie providera na podstawie skróconych identyfikatorów modeli takich jak gpt-5.4 lub claude-sonnet-4.6, zanim runtime Pluginu zostanie załadowany.
{
  "modelSupport": {
    "modelPrefixes": ["gpt-", "o1", "o3", "o4"],
    "modelPatterns": ["^computer-use-preview"]
  }
}
OpenClaw stosuje następujący priorytet:
  • jawne odwołania provider/model używają metadanych manifestu providers należących do właściciela
  • modelPatterns mają pierwszeństwo przed modelPrefixes
  • jeśli pasują jednocześnie jeden Plugin niewbudowany i jeden wbudowany, wygrywa Plugin niewbudowany
  • pozostała niejednoznaczność jest ignorowana, dopóki użytkownik lub konfiguracja nie określi providera
Pola:
PoleTypCo oznacza
modelPrefixesstring[]Prefiksy dopasowywane za pomocą startsWith do skróconych identyfikatorów modeli.
modelPatternsstring[]Źródła regex dopasowywane do skróconych identyfikatorów modeli po usunięciu sufiksu profilu.
Starsze klucze capabilities najwyższego poziomu są przestarzałe. Użyj openclaw doctor --fix, aby przenieść speechProviders, realtimeTranscriptionProviders, realtimeVoiceProviders, mediaUnderstandingProviders, imageGenerationProviders, videoGenerationProviders, webFetchProviders i webSearchProviders do contracts; zwykłe ładowanie manifestu nie traktuje już tych pól najwyższego poziomu jako własności capabilities.

Manifest a package.json

Te dwa pliki pełnią różne role:
PlikUżywaj go do
openclaw.plugin.jsonWykrywania, walidacji konfiguracji, metadanych wyboru auth i wskazówek UI, które muszą istnieć przed uruchomieniem kodu Pluginu
package.jsonMetadanych npm, instalacji zależności oraz bloku openclaw używanego dla entrypointów, kontroli instalacji, konfiguracji lub metadanych katalogu
Jeśli nie masz pewności, gdzie powinien trafić dany fragment metadanych, zastosuj tę zasadę:
  • jeśli OpenClaw musi znać go przed załadowaniem kodu Pluginu, umieść go w openclaw.plugin.json
  • jeśli dotyczy pakowania, plików entry lub zachowania instalacji npm, umieść go w package.json

Pola package.json, które wpływają na wykrywanie

Część metadanych Pluginu używanych przed runtime celowo znajduje się w package.json w bloku openclaw, a nie w openclaw.plugin.json. Ważne przykłady:
PoleCo oznacza
openclaw.extensionsDeklaruje natywne entrypointy Pluginu.
openclaw.setupEntryLekki entrypoint tylko do konfiguracji, używany podczas onboardingu i opóźnionego uruchamiania kanału.
openclaw.channelLekkie metadane katalogu kanałów, takie jak etykiety, ścieżki do dokumentacji, aliasy i teksty wyboru.
openclaw.channel.configuredStateLekkie metadane sprawdzania stanu konfiguracji, które mogą odpowiedzieć na pytanie „czy konfiguracja tylko z env już istnieje?” bez ładowania pełnego runtime kanału.
openclaw.channel.persistedAuthStateLekkie metadane sprawdzania utrwalonego stanu auth, które mogą odpowiedzieć na pytanie „czy coś jest już zalogowane?” bez ładowania pełnego runtime kanału.
openclaw.install.npmSpec / openclaw.install.localPathWskazówki instalacji/aktualizacji dla Pluginów wbudowanych i publikowanych zewnętrznie.
openclaw.install.defaultChoicePreferowana ścieżka instalacji, gdy dostępnych jest wiele źródeł instalacji.
openclaw.install.minHostVersionMinimalna obsługiwana wersja hosta OpenClaw, z użyciem dolnego ograniczenia semver, na przykład >=2026.3.22.
openclaw.install.allowInvalidConfigRecoveryPozwala na wąską ścieżkę odzyskiwania przez ponowną instalację wbudowanego Pluginu, gdy konfiguracja jest nieprawidłowa.
openclaw.startup.deferConfiguredChannelFullLoadUntilAfterListenUmożliwia załadowanie powierzchni kanału tylko do konfiguracji przed pełnym Pluginem kanału podczas uruchamiania.
openclaw.install.minHostVersion jest egzekwowane podczas instalacji i ładowania rejestru manifestu. Nieprawidłowe wartości są odrzucane; nowsze, ale poprawne wartości powodują pominięcie Pluginu na starszych hostach. openclaw.install.allowInvalidConfigRecovery jest celowo wąskie. Nie sprawia, że dowolnie uszkodzone konfiguracje stają się instalowalne. Obecnie pozwala tylko przepływom instalacji odzyskać stan po określonych nieaktualnych błędach aktualizacji wbudowanego Pluginu, takich jak brakująca ścieżka wbudowanego Pluginu lub nieaktualny wpis channels.<id> dla tego samego wbudowanego Pluginu. Niezwiązane błędy konfiguracji nadal blokują instalację i kierują operatorów do openclaw doctor --fix. openclaw.channel.persistedAuthState to metadane pakietu dla małego modułu sprawdzającego:
{
  "openclaw": {
    "channel": {
      "id": "whatsapp",
      "persistedAuthState": {
        "specifier": "./auth-presence",
        "exportName": "hasAnyWhatsAppAuth"
      }
    }
  }
}
Użyj tego, gdy przepływy konfiguracji, doctor lub configured-state potrzebują lekkiego sprawdzenia auth typu tak/nie przed załadowaniem pełnego Pluginu kanału. Eksport docelowy powinien być małą funkcją, która odczytuje wyłącznie stan utrwalony; nie kieruj go przez pełny barrel runtime kanału. openclaw.channel.configuredState ma ten sam kształt dla lekkich sprawdzeń skonfigurowania wyłącznie na podstawie env:
{
  "openclaw": {
    "channel": {
      "id": "telegram",
      "configuredState": {
        "specifier": "./configured-state",
        "exportName": "hasTelegramConfiguredState"
      }
    }
  }
}
Użyj tego, gdy kanał może odpowiedzieć o stanie konfiguracji na podstawie env lub innych małych wejść niezwiązanych z runtime. Jeśli sprawdzenie wymaga pełnego rozwiązywania konfiguracji lub rzeczywistego runtime kanału, pozostaw tę logikę w hooku Pluginu config.hasConfiguredState.

Wymagania JSON Schema

  • Każdy Plugin musi dostarczać JSON Schema, nawet jeśli nie przyjmuje żadnej konfiguracji.
  • Pusty schemat jest akceptowalny (na przykład { "type": "object", "additionalProperties": false }).
  • Schematy są walidowane podczas odczytu/zapisu konfiguracji, a nie w runtime.

Zachowanie walidacji

  • Nieznane klucze channels.*błędami, chyba że identyfikator kanału jest zadeklarowany przez manifest Pluginu.
  • plugins.entries.<id>, plugins.allow, plugins.deny i plugins.slots.* muszą odwoływać się do wykrywalnych identyfikatorów Pluginów. Nieznane identyfikatory są błędami.
  • Jeśli Plugin jest zainstalowany, ale ma uszkodzony lub brakujący manifest albo schemat, 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 + logach pojawia się ostrzeżenie.
Pełny schemat plugins.* znajdziesz w Opisie konfiguracji.

Uwagi

  • Manifest jest wymagany dla natywnych Pluginów OpenClaw, w tym dla ładowania z lokalnego systemu plików.
  • Runtime nadal ładuje moduł Pluginu osobno; manifest służy wyłącznie do wykrywania + walidacji.
  • Natywne manifesty są parsowane przy użyciu JSON5, więc komentarze, końcowe przecinki i klucze bez cudzysłowów są akceptowane, o ile wartość końcowa nadal jest obiektem.
  • Loader manifestu odczytuje wyłącznie udokumentowane pola manifestu. Unikaj dodawania tutaj własnych kluczy najwyższego poziomu.
  • providerAuthEnvVars to lekka ścieżka metadanych dla sprawdzeń auth, walidacji znaczników env i podobnych powierzchni auth providera, które nie powinny uruchamiać runtime Pluginu tylko po to, aby sprawdzić nazwy env.
  • providerAuthAliases pozwala wariantom providera ponownie używać zmiennych env auth, profili auth, auth opartego na konfiguracji i wyboru onboardingu klucza API innego providera bez hardcodowania tej relacji w rdzeniu.
  • providerEndpoints pozwala Pluginom providera zarządzać prostymi metadanymi dopasowywania hosta/baseUrl endpointu. Używaj tego tylko dla klas endpointów, które rdzeń już obsługuje; zachowanie runtime nadal należy do Pluginu.
  • syntheticAuthRefs to lekka ścieżka metadanych dla należących do providera hooków synthetic auth, które muszą być widoczne dla zimnego wykrywania modeli, zanim rejestr runtime zacznie istnieć. Wypisuj tylko odwołania, których runtime provider lub backend CLI rzeczywiście implementuje resolveSyntheticAuth.
  • nonSecretAuthMarkers to lekka ścieżka metadanych dla należących do wbudowanego Pluginu zastępczych kluczy API, takich jak znaczniki lokalne, OAuth lub ambient credential. Rdzeń traktuje je jako niesekretne na potrzeby wyświetlania auth i audytów sekretów bez hardcodowania właściciela providera.
  • channelEnvVars to lekka ścieżka metadanych dla fallbacku shell-env, promptów konfiguracji i podobnych powierzchni kanału, które nie powinny uruchamiać runtime Pluginu tylko po to, aby sprawdzić nazwy env.
  • providerAuthChoices to lekka ścieżka metadanych dla selektorów wyboru auth, rozwiązywania --auth-choice, mapowania preferowanego providera i prostej rejestracji flag CLI onboardingu przed załadowaniem runtime providera. Metadane kreatora runtime, które wymagają kodu providera, opisano tutaj: Hooki runtime providera.
  • Wyłączne typy Pluginów są wybierane przez plugins.slots.*.
    • kind: "memory" jest wybierane przez plugins.slots.memory.
    • kind: "context-engine" jest wybierane przez plugins.slots.contextEngine (domyślnie: wbudowane legacy).
  • channels, providers, cliBackends i skills można pominąć, jeśli Plugin ich nie potrzebuje.
  • Jeśli Twój Plugin zależy od modułów natywnych, opisz kroki budowania oraz wszelkie wymagania dotyczące allowlist menedżera pakietów (na przykład pnpm allow-build-scripts
    • pnpm rebuild <package>).

Powiązane