defineToolPlugin, gdy
plugin posiada stałą listę narzędzi i chcesz, aby OpenClaw wygenerował metadane manifestu,
dzięki którym te narzędzia pozostają wykrywalne bez ładowania kodu uruchomieniowego.
Zalecany przepływ wygląda tak:
- Utwórz szkielet pakietu za pomocą
openclaw plugins init. - Napisz narzędzia z
defineToolPlugin. - Zbuduj JavaScript.
- Wygeneruj metadane
openclaw.plugin.jsonipackage.jsonza pomocąopenclaw plugins build. - Zweryfikuj wygenerowane metadane przed publikacją lub instalacją.
Wymagania
- Node >= 22.
- Wyjście pakietu TypeScript ESM.
typeboxdla schematów konfiguracji i parametrów narzędzi.openclaw >=2026.5.17, pierwsza wersja OpenClaw eksportującaopenclaw/plugin-sdk/tool-plugin.- Katalog główny pakietu, który może dostarczać
dist/,openclaw.plugin.jsonipackage.json.
typebox w czasie uruchomienia, więc trzymaj typebox w
dependencies, nie tylko w devDependencies.
Szybki start
Utwórz nowy pakiet pluginu:src/index.ts: punkt wejściadefineToolPluginz narzędziemecho.src/index.test.ts: mały test metadanych.tsconfig.json: wyjście TypeScript NodeNext dodist/.package.json: skrypty, zależności uruchomieniowe iopenclaw.extensions: ["./dist/index.js"].openclaw.plugin.json: wygenerowane metadane manifestu dla początkowego narzędzia.
Napisz narzędzie
defineToolPlugin przyjmuje tożsamość pluginu, opcjonalny schemat konfiguracji i
statyczną listę narzędzi. Typy parametrów i konfiguracji są wnioskowane ze schematów
TypeBox.
Narzędzia opcjonalne i fabryczne
Ustawoptional: true, gdy użytkownicy powinni jawnie dodać narzędzie do listy dozwolonych,
zanim zostanie wysłane do modelu:
openclaw plugins build zapisuje odpowiadający wpis manifestu toolMetadata.<tool>.optional,
dzięki czemu OpenClaw może wykryć narzędzie bez ładowania kodu uruchomieniowego
pluginu.
Użyj factory, gdy narzędzie potrzebuje kontekstu narzędzia uruchomieniowego, zanim może
zostać utworzone. Fabryka utrzymuje statyczne metadane, jednocześnie pozwalając narzędziu wyłączyć się dla
konkretnego uruchomienia, sprawdzić stan piaskownicy albo powiązać pomocniki uruchomieniowe.
definePluginEntry, gdy
plugin oblicza nazwy narzędzi dynamicznie albo łączy narzędzia z hookami,
usługami, dostawcami, poleceniami lub innymi powierzchniami uruchomieniowymi.
Wartości zwracane
defineToolPlugin opakowuje zwykłe wartości zwracane w format wyniku narzędzia
OpenClaw:
- Zwróć ciąg znaków, gdy model powinien zobaczyć dokładnie ten tekst.
- Zwróć wartość zgodną z JSON, gdy chcesz, aby model zobaczył sformatowany JSON,
a OpenClaw zachował oryginalną wartość w
details.
AgentToolResult albo ponownie użyć
istniejącej implementacji api.registerTool. Użyj definePluginEntry zamiast
defineToolPlugin, gdy potrzebujesz w pełni dynamicznych narzędzi albo mieszanych
możliwości pluginu.
Konfiguracja
configSchema jest opcjonalny. Jeśli go pominiesz, OpenClaw użyje ścisłego schematu
pustego obiektu, a wygenerowany manifest nadal będzie zawierać configSchema.
configSchema, drugi argument execute jest typowany na podstawie
schematu:
Wygenerowane metadane
OpenClaw wykrywa zainstalowane pluginy z zimnych metadanych. Musi być w stanie odczytać manifest pluginu przed zaimportowaniem kodu uruchomieniowego pluginu. DlategodefineToolPlugin
udostępnia statyczne metadane, a openclaw plugins build zapisuje te
metadane w pakiecie.
Uruchom generator po zmianie identyfikatora pluginu, nazwy, opisu, schematu konfiguracji,
aktywacji lub nazw narzędzi:
contracts.tools jest ważnym kontraktem wykrywania. Informuje OpenClaw, który
plugin posiada każde narzędzie, bez ładowania każdego zainstalowanego środowiska uruchomieniowego pluginu. Jeśli
manifest jest nieaktualny, narzędzia może brakować w wykrywaniu albo za błąd
rejestracji może zostać obwiniony niewłaściwy plugin.
Metadane pakietu
Dla prostego przepływu pluginu narzędziowegoopenclaw plugins build uzgadnia
package.json z wybranym pojedynczym punktem wejścia uruchomieniowego:
./dist/index.js. Wpisy
źródłowe są przydatne podczas programowania w workspace, ale opublikowane pakiety nie powinny
zależeć od ładowania TypeScriptu w czasie uruchomienia.
Walidacja w CI
Użyjplugins build --check, aby CI zakończyło się błędem, gdy wygenerowane metadane są nieaktualne, bez
przepisywania plików:
plugins validate sprawdza, że:
openclaw.plugin.jsonistnieje i przechodzi przez standardowy loader manifestu.- Bieżący punkt wejścia eksportuje metadane
defineToolPlugin. - Wygenerowane pola manifestu pasują do metadanych punktu wejścia.
contracts.toolspasuje do zadeklarowanych nazw narzędzi.package.jsonwskazujeopenclaw.extensionsna wybrany punkt wejścia uruchomieniowego.
Instalacja i lokalna inspekcja
Z oddzielnego checkoutu OpenClaw albo zainstalowanego CLI zainstaluj ścieżkę pakietu:Publikacja
Publikuj przez ClawHub, gdy pakiet jest gotowy:Rozwiązywanie problemów
plugin entry not found: ./dist/index.js
Wybrany plik punktu wejścia nie istnieje. Uruchom npm run build, a następnie ponownie uruchom
openclaw plugins build --entry ./dist/index.js albo
openclaw plugins validate --entry ./dist/index.js.
plugin entry does not expose defineToolPlugin metadata
Punkt wejścia nie wyeksportował wartości utworzonej przez defineToolPlugin. Sprawdź, czy
domyślny eksport modułu jest wynikiem defineToolPlugin(...), albo przekaż poprawny
punkt wejścia przez --entry.
openclaw.plugin.json generated metadata is stale
Manifest nie pasuje już do metadanych punktu wejścia. Uruchom:
openclaw.plugin.json i package.json.
package.json openclaw.extensions must include ./dist/index.js
Metadane pakietu wskazują inny punkt wejścia uruchomieniowego. Uruchom
openclaw plugins build --entry ./dist/index.js, aby generator uzgodnił
metadane pakietu z punktem wejścia, który zamierzasz dostarczyć.
Cannot find package 'typebox'
Zbudowany plugin importuje typebox w czasie uruchomienia. Trzymaj typebox w
dependencies, zainstaluj ponownie zależności pakietu, zbuduj ponownie i ponownie uruchom walidację.
Narzędzie nie pojawia się po instalacji
Sprawdź te elementy w kolejności:openclaw plugins inspect <plugin-id> --runtimeopenclaw plugins validate --root <plugin-root> --entry ./dist/index.jsopenclaw.plugin.jsonmacontracts.toolsz oczekiwanymi nazwami narzędzi.package.jsonmaopenclaw.extensions: ["./dist/index.js"].- Gateway został zrestartowany lub przeładowany po zainstalowaniu pluginu.