chore(i18n): refresh pl translations

This commit is contained in:
openclaw-docs-i18n[bot] 2026-04-18 09:45:04 +00:00
parent 85d6260920
commit b5ebae404b
9 changed files with 1891 additions and 1863 deletions

View File

@ -1,40 +1,39 @@
---
read_when:
- Musisz wyjaśnić obszar roboczy agenta lub układ jego plików
- Chcesz utworzyć kopię zapasową lub przenieść obszar roboczy agenta
summary: 'Obszar roboczy agenta: lokalizacja, układ i strategia tworzenia kopii zapasowych'
- Musisz wyjaśnić obszar roboczy agenta lub jego układ plików.
- Chcesz utworzyć kopię zapasową obszaru roboczego agenta lub go zmigrować.
summary: 'Obszar roboczy agenta: lokalizacja, układ i strategia kopii zapasowych'
title: Obszar roboczy agenta
x-i18n:
generated_at: "2026-04-05T13:50:15Z"
generated_at: "2026-04-18T09:34:52Z"
model: gpt-5.4
provider: openai
source_hash: 3735633f1098c733415369f9836fdbbc0bf869636a24ed42e95e6784610d964a
source_hash: dd2e74614d8d45df04b1bbda48e2224e778b621803d774d38e4b544195eb234e
source_path: concepts/agent-workspace.md
workflow: 15
---
# Obszar roboczy agenta
Obszar roboczy jest domem agenta. Jest to jedyny katalog roboczy używany przez
narzędzia plikowe i jako kontekst obszaru roboczego. Zachowaj go jako prywatny
i traktuj jak pamięć.
Obszar roboczy to dom agenta. Jest to jedyny katalog roboczy używany przez
narzędzia plikowe i dla kontekstu obszaru roboczego. Zachowaj go jako prywatny i traktuj jak pamięć.
To jest oddzielne od `~/.openclaw/`, które przechowuje konfigurację, dane uwierzytelniające i
To jest oddzielone od `~/.openclaw/`, które przechowuje konfigurację, dane uwierzytelniające i
sesje.
**Ważne:** obszar roboczy jest **domyślnym cwd**, a nie twardym sandboxem. Narzędzia
**Ważne:** obszar roboczy to **domyślny cwd**, a nie twarda piaskownica. Narzędzia
rozwiązują ścieżki względne względem obszaru roboczego, ale ścieżki bezwzględne nadal mogą sięgać
do innych miejsc na hoście, chyba że włączono sandboxing. Jeśli potrzebujesz izolacji, użyj
[`agents.defaults.sandbox`](/gateway/sandboxing) (i/lub konfiguracji sandbox dla poszczególnych agentów).
Gdy sandboxing jest włączony, a `workspaceAccess` nie ma wartości `"rw"`, narzędzia działają
wewnątrz obszaru roboczego sandbox w `~/.openclaw/sandboxes`, a nie w obszarze roboczym hosta.
innych miejsc na hoście, chyba że piaskownica jest włączona. Jeśli potrzebujesz izolacji, użyj
[`agents.defaults.sandbox`](/pl/gateway/sandboxing) (i/lub konfiguracji piaskownicy per agent).
Gdy piaskownica jest włączona i `workspaceAccess` nie jest równe `"rw"`, narzędzia działają
wewnątrz obszaru roboczego piaskownicy w `~/.openclaw/sandboxes`, a nie w obszarze roboczym hosta.
## Domyślna lokalizacja
- Domyślnie: `~/.openclaw/workspace`
- Jeśli ustawiono `OPENCLAW_PROFILE` i nie ma ono wartości `"default"`, domyślną wartością staje się
- Jeśli `OPENCLAW_PROFILE` jest ustawione i nie jest równe `"default"`, wartością domyślną staje się
`~/.openclaw/workspace-<profile>`.
- Nadpisz w `~/.openclaw/openclaw.json`:
- Nadpisanie w `~/.openclaw/openclaw.json`:
```json5
{
@ -44,13 +43,11 @@ wewnątrz obszaru roboczego sandbox w `~/.openclaw/sandboxes`, a nie w obszarze
}
```
`openclaw onboard`, `openclaw configure` lub `openclaw setup` utworzą
obszar roboczy i zasieją pliki bootstrap, jeśli ich brakuje.
Kopie seed dla sandbox przyjmują tylko zwykłe pliki wewnątrz obszaru roboczego; aliasy
symlink/hardlink, które rozwiązują się poza źródłowym obszarem roboczym, są ignorowane.
`openclaw onboard`, `openclaw configure` lub `openclaw setup` utworzy
obszar roboczy i doda początkowe pliki bootstrap, jeśli ich brakuje.
Kopie inicjalizujące piaskownicę akceptują tylko zwykłe pliki znajdujące się w obszarze roboczym; aliasy symlink/hardlink, które wskazują poza źródłowy obszar roboczy, są ignorowane.
Jeśli już samodzielnie zarządzasz plikami obszaru roboczego, możesz wyłączyć tworzenie
plików bootstrap:
Jeśli już samodzielnie zarządzasz plikami obszaru roboczego, możesz wyłączyć tworzenie plików bootstrap:
```json5
{ agent: { skipBootstrap: true } }
@ -58,9 +55,9 @@ plików bootstrap:
## Dodatkowe foldery obszaru roboczego
Starsze instalacje mogły tworzyć `~/openclaw`. Pozostawienie wielu katalogów obszaru roboczego
może powodować mylące rozbieżności uwierzytelnienia lub stanu, ponieważ naraz aktywny jest tylko
jeden obszar roboczy.
Starsze instalacje mogły utworzyć `~/openclaw`. Pozostawienie wielu katalogów obszaru roboczego
może powodować mylące rozbieżności w uwierzytelnianiu lub stanie, ponieważ w danym momencie aktywny jest tylko jeden
obszar roboczy.
**Zalecenie:** utrzymuj jeden aktywny obszar roboczy. Jeśli nie używasz już
dodatkowych folderów, zarchiwizuj je lub przenieś do Kosza (na przykład `trash ~/openclaw`).
@ -71,37 +68,37 @@ Jeśli celowo utrzymujesz wiele obszarów roboczych, upewnij się, że
## Mapa plików obszaru roboczego (co oznacza każdy plik)
To są standardowe pliki, których OpenClaw oczekuje w obszarze roboczym:
To są standardowe pliki, których OpenClaw oczekuje wewnątrz obszaru roboczego:
- `AGENTS.md`
- Instrukcje operacyjne dla agenta i sposób, w jaki powinien używać pamięci.
- Wczytywany na początku każdej sesji.
- Dobre miejsce na reguły, priorytety i szczegóły „jak się zachowywać”.
- Dobre miejsce na reguły, priorytety i szczegóły typu „jak się zachowywać”.
- `SOUL.md`
- Persona, ton i granice.
- Wczytywany w każdej sesji.
- Przewodnik: [Przewodnik po osobowości SOUL.md](/concepts/soul)
- Przewodnik: [Przewodnik po osobowości SOUL.md](/pl/concepts/soul)
- `USER.md`
- Kim jest użytkownik i jak się do niego zwracać.
- Wczytywany w każdej sesji.
- `IDENTITY.md`
- Imię agenta, klimat i emoji.
- Nazwa agenta, klimat i emoji.
- Tworzony/aktualizowany podczas rytuału bootstrap.
- `TOOLS.md`
- Uwagi o lokalnych narzędziach i konwencjach.
- Nie kontroluje dostępności narzędzi; służy tylko jako wskazówka.
- Nie kontroluje dostępności narzędzi; to tylko wskazówki.
- `HEARTBEAT.md`
- Opcjonalna mała lista kontrolna dla uruchomień heartbeat.
- Zachowaj ją krótką, aby nie zużywać niepotrzebnie tokenów.
- Opcjonalna krótka lista kontrolna dla przebiegów Heartbeat.
- Zachowaj ją krótką, aby nie marnować tokenów.
- `BOOT.md`
- Opcjonalna lista kontrolna startu wykonywana przy restarcie gateway, gdy włączone są wewnętrzne hooki.
- Zachowaj ją krótką; do wysyłania na zewnątrz używaj narzędzia wiadomości.
- Opcjonalna lista kontrolna uruchamiania wykonywana przy restarcie Gateway, gdy włączone są hooki wewnętrzne.
- Zachowaj ją krótką; do wysyłek wychodzących używaj narzędzia wiadomości.
- `BOOTSTRAP.md`
- Jednorazowy rytuał pierwszego uruchomienia.
@ -110,26 +107,26 @@ To są standardowe pliki, których OpenClaw oczekuje w obszarze roboczym:
- `memory/YYYY-MM-DD.md`
- Dzienny dziennik pamięci (jeden plik na dzień).
- Zalecane do odczytu: dzisiaj + wczoraj na początku sesji.
- Zalecane do odczytu: dzisiaj + wczoraj przy starcie sesji.
- `MEMORY.md` (opcjonalnie)
- Kuratorowana pamięć długoterminowa.
- Wczytuj tylko w głównej, prywatnej sesji (nie we współdzielonych/grupowych kontekstach).
- Ładuj tylko w głównej, prywatnej sesji (nie we współdzielonych/grupowych kontekstach).
Zobacz [Pamięć](/concepts/memory), aby poznać przepływ pracy i automatyczne opróżnianie pamięci.
Zobacz [Pamięć](/pl/concepts/memory), aby poznać workflow i automatyczny flush pamięci.
- `skills/` (opcjonalnie)
- Skills specyficzne dla obszaru roboczego.
- Lokalizacja skills o najwyższym priorytecie dla tego obszaru roboczego.
- Nadpisuje skills agenta projektu, skills osobiste agenta, skills zarządzane, skills wbudowane oraz `skills.load.extraDirs`, gdy nazwy się pokrywają.
- Lokalizacja Skills o najwyższym priorytecie dla tego obszaru roboczego.
- Zastępuje project agent skills, personal agent skills, managed skills, bundled skills i `skills.load.extraDirs`, gdy nazwy się pokrywają.
- `canvas/` (opcjonalnie)
- Pliki interfejsu Canvas dla widoków węzłów (na przykład `canvas/index.html`).
Jeśli brakuje któregokolwiek pliku bootstrap, OpenClaw wstrzykuje do
Jeśli brakuje jakiegokolwiek pliku bootstrap, OpenClaw wstrzykuje do
sesji znacznik „missing file” i kontynuuje. Duże pliki bootstrap są obcinane podczas wstrzykiwania;
dostosuj limity za pomocą `agents.defaults.bootstrapMaxChars` (domyślnie: 20000) oraz
`agents.defaults.bootstrapTotalMaxChars` (domyślnie: 150000).
dostosuj limity za pomocą `agents.defaults.bootstrapMaxChars` (domyślnie: 12000) i
`agents.defaults.bootstrapTotalMaxChars` (domyślnie: 60000).
`openclaw setup` może odtworzyć brakujące wartości domyślne bez nadpisywania istniejących
plików.
@ -139,19 +136,19 @@ Te elementy znajdują się w `~/.openclaw/` i NIE powinny być commitowane do re
- `~/.openclaw/openclaw.json` (konfiguracja)
- `~/.openclaw/agents/<agentId>/agent/auth-profiles.json` (profile uwierzytelniania modeli: OAuth + klucze API)
- `~/.openclaw/credentials/` (stan kanału/providera oraz starsze dane importu OAuth)
- `~/.openclaw/credentials/` (stan kanałów/dostawców oraz starsze dane importu OAuth)
- `~/.openclaw/agents/<agentId>/sessions/` (transkrypcje sesji + metadane)
- `~/.openclaw/skills/` (zarządzane skills)
- `~/.openclaw/skills/` (managed skills)
Jeśli musisz przenieść sesje lub konfigurację, skopiuj je osobno i trzymaj je
Jeśli musisz zmigrować sesje lub konfigurację, skopiuj je osobno i trzymaj
poza kontrolą wersji.
## Kopia zapasowa Git (zalecana, prywatna)
## Kopia zapasowa Git (zalecane, prywatne)
Traktuj obszar roboczy jako prywatną pamięć. Umieść go w **prywatnym** repozytorium git, aby był
zarchiwizowany i możliwy do odzyskania.
zabezpieczony kopią zapasową i możliwy do odzyskania.
Wykonaj te kroki na maszynie, na której działa Gateway (tam znajduje się
Wykonaj te kroki na maszynie, na której działa Gateway (to tam znajduje się
obszar roboczy).
### 1) Zainicjalizuj repozytorium
@ -166,14 +163,14 @@ git add AGENTS.md SOUL.md TOOLS.md IDENTITY.md USER.md HEARTBEAT.md memory/
git commit -m "Add agent workspace"
```
### 2) Dodaj prywatny zdalny remote (opcje przyjazne początkującym)
### 2) Dodaj prywatny zdalny remote (opcje przyjazne dla początkujących)
Opcja A: interfejs webowy GitHub
1. Utwórz nowe **prywatne** repozytorium na GitHub.
2. Nie inicjalizuj go plikiem README (pozwala to uniknąć konfliktów scalania).
3. Skopiuj adres URL zdalnego HTTPS.
4. Dodaj remote i wypchnij:
2. Nie inicjalizuj go plikiem README (pozwoli to uniknąć konfliktów scalania).
3. Skopiuj adres URL zdalnego repozytorium HTTPS.
4. Dodaj remote i wypchnij zmiany:
```bash
git branch -M main
@ -191,9 +188,9 @@ gh repo create openclaw-workspace --private --source . --remote origin --push
Opcja C: interfejs webowy GitLab
1. Utwórz nowe **prywatne** repozytorium na GitLab.
2. Nie inicjalizuj go plikiem README (pozwala to uniknąć konfliktów scalania).
3. Skopiuj adres URL zdalnego HTTPS.
4. Dodaj remote i wypchnij:
2. Nie inicjalizuj go plikiem README (pozwoli to uniknąć konfliktów scalania).
3. Skopiuj adres URL zdalnego repozytorium HTTPS.
4. Dodaj remote i wypchnij zmiany:
```bash
git branch -M main
@ -214,11 +211,11 @@ git push
Nawet w prywatnym repozytorium unikaj przechowywania sekretów w obszarze roboczym:
- kluczy API, tokenów OAuth, haseł lub prywatnych danych uwierzytelniających;
- czegokolwiek z `~/.openclaw/`;
- surowych zrzutów czatów lub wrażliwych załączników.
- Kluczy API, tokenów OAuth, haseł lub prywatnych danych uwierzytelniających.
- Czegokolwiek z `~/.openclaw/`.
- Surowych zrzutów czatów lub wrażliwych załączników.
Jeśli musisz przechowywać wrażliwe odwołania, użyj placeholderów i trzymaj prawdziwy
Jeśli musisz przechowywać wrażliwe odwołania, używaj placeholderów i trzymaj właściwy
sekret gdzie indziej (menedżer haseł, zmienne środowiskowe lub `~/.openclaw/`).
Sugerowany początkowy `.gitignore`:
@ -233,9 +230,9 @@ Sugerowany początkowy `.gitignore`:
## Przenoszenie obszaru roboczego na nową maszynę
1. Sklonuj repozytorium do żądanej ścieżki (domyślnie `~/.openclaw/workspace`).
1. Sklonuj repozytorium do wybranej ścieżki (domyślnie `~/.openclaw/workspace`).
2. Ustaw `agents.defaults.workspace` na tę ścieżkę w `~/.openclaw/openclaw.json`.
3. Uruchom `openclaw setup --workspace <path>`, aby zasilić brakujące pliki.
3. Uruchom `openclaw setup --workspace <path>`, aby dodać brakujące pliki.
4. Jeśli potrzebujesz sesji, skopiuj `~/.openclaw/agents/<agentId>/sessions/` ze
starej maszyny osobno.
@ -243,12 +240,11 @@ Sugerowany początkowy `.gitignore`:
- Routing wielu agentów może używać różnych obszarów roboczych dla różnych agentów. Zobacz
[Routing kanałów](/pl/channels/channel-routing), aby poznać konfigurację routingu.
- Jeśli `agents.defaults.sandbox` jest włączone, sesje inne niż główna mogą używać obszarów roboczych
sandbox dla każdej sesji w `agents.defaults.sandbox.workspaceRoot`.
- Jeśli `agents.defaults.sandbox` jest włączone, sesje inne niż główna mogą używać per-session obszarów roboczych piaskownicy w `agents.defaults.sandbox.workspaceRoot`.
## Powiązane
- [Standing Orders](/pl/automation/standing-orders) — trwałe instrukcje w plikach obszaru roboczego
- [Heartbeat](/gateway/heartbeat) — plik obszaru roboczego HEARTBEAT.md
- [Session](/concepts/session) — ścieżki przechowywania sesji
- [Sandboxing](/gateway/sandboxing) — dostęp do obszaru roboczego w środowiskach sandbox
- [Stałe polecenia](/pl/automation/standing-orders) — trwałe instrukcje w plikach obszaru roboczego
- [Heartbeat](/pl/gateway/heartbeat) — plik obszaru roboczego HEARTBEAT.md
- [Sesja](/pl/concepts/session) — ścieżki przechowywania sesji
- [Piaskownica](/pl/gateway/sandboxing) — dostęp do obszaru roboczego w środowiskach sandboxed

View File

@ -6,50 +6,50 @@ read_when:
summary: 'Kontekst: co widzi model, jak jest zbudowany i jak go sprawdzić'
title: Kontekst
x-i18n:
generated_at: "2026-04-12T23:28:04Z"
generated_at: "2026-04-18T09:34:53Z"
model: gpt-5.4
provider: openai
source_hash: 3620db1a8c1956d91a01328966df491388d3a32c4003dc4447197eb34316c77d
source_hash: 477ccb1d9654968d0e904b6846b32b8c14db6b6c0d3d2ec2b7409639175629f9
source_path: concepts/context.md
workflow: 15
---
# Kontekst
„Kontekst” to **wszystko, co OpenClaw wysyła do modelu dla danego uruchomienia**. Jest on ograniczony przez **okno kontekstowe** modelu (limit tokenów).
„Kontekst” to **wszystko, co OpenClaw wysyła do modelu podczas uruchomienia**. Jest on ograniczony przez **okno kontekstu** modelu (limit tokenów).
Model mentalny dla początkujących:
- **System prompt** (zbudowany przez OpenClaw): reguły, narzędzia, lista Skills, czas/środowisko uruchomieniowe oraz wstrzyknięte pliki workspace.
- **Historia rozmowy**: Twoje wiadomości + wiadomości asystenta dla tej sesji.
- **Wywołania/wyniki narzędzi + załączniki**: wyniki poleceń, odczyty plików, obrazy/audio itd.
- **System prompt** (budowany przez OpenClaw): reguły, narzędzia, lista Skills, czas/środowisko uruchomieniowe oraz wstrzyknięte pliki obszaru roboczego.
- **Historia rozmowy**: Twoje wiadomości + wiadomości asystenta z tej sesji.
- **Wywołania/wyniki narzędzi + załączniki**: wyjście poleceń, odczyty plików, obrazy/audio itd.
Kontekst _nie jest tym samym_ co „pamięć”: pamięć może być zapisana na dysku i wczytana później; kontekst to to, co znajduje się w bieżącym oknie modelu.
Kontekst _nie jest tym samym_ co „pamięć”: pamięć może być przechowywana na dysku i później ponownie wczytana; kontekst to to, co znajduje się w bieżącym oknie modelu.
## Szybki start (sprawdzanie kontekstu)
- `/status` → szybki widok „jak bardzo zapełnione jest moje okno?” + ustawienia sesji.
- `/context list` → co jest wstrzyknięte + przybliżone rozmiary (dla każdego pliku + łącznie).
- `/context detail` → głębszy rozkład: rozmiary dla każdego pliku, dla każdego schematu narzędzia, dla każdego wpisu Skills oraz rozmiar system promptu.
- `/usage tokens` → dołącza stopkę z użyciem tokenów do zwykłych odpowiedzi.
- `/context list` → co jest wstrzyknięte + przybliżone rozmiary (na plik + sumy).
- `/context detail` → głębszy podział: rozmiary dla poszczególnych plików, schematów narzędzi, wpisów Skills oraz rozmiar system promptu.
- `/usage tokens` → dodaje stopkę z użyciem tokenów do zwykłych odpowiedzi.
- `/compact` → podsumowuje starszą historię do zwartego wpisu, aby zwolnić miejsce w oknie.
Zobacz też: [Polecenia slash](/pl/tools/slash-commands), [Użycie tokenów i koszty](/pl/reference/token-use), [Compaction](/pl/concepts/compaction).
## Przykładowe dane wyjściowe
## Przykładowe wyjście
Wartości różnią się w zależności od modelu, dostawcy, polityki narzędzi i tego, co znajduje się w Twoim workspace.
Wartości różnią się w zależności od modelu, dostawcy, zasad dotyczących narzędzi i zawartości obszaru roboczego.
### `/context list`
```
🧠 Rozkład kontekstu
🧠 Podział kontekstu
Workspace: <workspaceDir>
Maks. bootstrap/plik: 20,000 chars
Bootstrap max/file: 12,000 chars
Sandbox: mode=non-main sandboxed=false
System prompt (uruchomienie): 38,412 chars (~9,603 tok) (Project Context 23,901 chars (~5,976 tok))
System prompt (run): 38,412 chars (~9,603 tok) (Project Context 23,901 chars (~5,976 tok))
Wstrzyknięte pliki workspace:
Injected workspace files:
- AGENTS.md: OK | raw 1,742 chars (~436 tok) | injected 1,742 chars (~436 tok)
- SOUL.md: OK | raw 912 chars (~228 tok) | injected 912 chars (~228 tok)
- TOOLS.md: TRUNCATED | raw 54,210 chars (~13,553 tok) | injected 20,962 chars (~5,241 tok)
@ -58,32 +58,32 @@ Wstrzyknięte pliki workspace:
- HEARTBEAT.md: MISSING | raw 0 | injected 0
- BOOTSTRAP.md: OK | raw 0 chars (~0 tok) | injected 0 chars (~0 tok)
Lista Skills (tekst system promptu): 2,184 chars (~546 tok) (12 skills)
Narzędzia: read, edit, write, exec, process, browser, message, sessions_send, …
Lista narzędzi (tekst system promptu): 1,032 chars (~258 tok)
Schematy narzędzi (JSON): 31,988 chars (~7,997 tok) (wliczają się do kontekstu; nie są pokazane jako tekst)
Narzędzia: (takie same jak powyżej)
Skills list (system prompt text): 2,184 chars (~546 tok) (12 skills)
Tools: read, edit, write, exec, process, browser, message, sessions_send, …
Tool list (system prompt text): 1,032 chars (~258 tok)
Tool schemas (JSON): 31,988 chars (~7,997 tok) (counts toward context; not shown as text)
Tools: (same as above)
Tokeny sesji (z cache): 14,250 łącznie / ctx=32,000
Session tokens (cached): 14,250 total / ctx=32,000
```
### `/context detail`
```
🧠 Rozkład kontekstu (szczegółowy)
🧠 Podział kontekstu (szczegółowy)
Największe Skills (rozmiar wpisu promptu):
Top skills (prompt entry size):
- frontend-design: 412 chars (~103 tok)
- oracle: 401 chars (~101 tok)
… (+10 more skills)
Największe narzędzia (rozmiar schematu):
Top tools (schema size):
- browser: 9,812 chars (~2,453 tok)
- exec: 6,240 chars (~1,560 tok)
… (+N more tools)
```
## Co wlicza się do okna kontekstowego
## Co wlicza się do okna kontekstu
Wlicza się wszystko, co otrzymuje model, w tym:
@ -92,24 +92,24 @@ Wlicza się wszystko, co otrzymuje model, w tym:
- Wywołania narzędzi + wyniki narzędzi.
- Załączniki/transkrypcje (obrazy/audio/pliki).
- Podsumowania Compaction i artefakty przycinania.
- „Opakowania” dostawcy lub ukryte nagłówki (niewidoczne, ale nadal liczone).
- „Wrappery” dostawcy lub ukryte nagłówki (niewidoczne, ale nadal liczone).
## Jak OpenClaw buduje system prompt
System prompt jest **własnością OpenClaw** i jest przebudowywany przy każdym uruchomieniu. Zawiera:
System prompt jest **własnością OpenClaw** i jest budowany od nowa przy każdym uruchomieniu. Zawiera:
- Listę narzędzi + krótkie opisy.
- Listę Skills (tylko metadane; zobacz niżej).
- Lokalizację workspace.
- Listę Skills (tylko metadane; patrz poniżej).
- Lokalizację obszaru roboczego.
- Czas (UTC + przeliczony czas użytkownika, jeśli skonfigurowano).
- Metadane środowiska uruchomieniowego (host/OS/model/myślenie).
- Wstrzyknięte pliki bootstrap workspace w sekcji **Project Context**.
- Metadane środowiska uruchomieniowego (host/OS/model/thinking).
- Wstrzyknięte pliki bootstrap obszaru roboczego w sekcji **Project Context**.
Pełny opis: [System Prompt](/pl/concepts/system-prompt).
Pełny podział: [System Prompt](/pl/concepts/system-prompt).
## Wstrzyknięte pliki workspace (Project Context)
## Wstrzyknięte pliki obszaru roboczego (Project Context)
Domyślnie OpenClaw wstrzykuje stały zestaw plików workspace (jeśli istnieją):
Domyślnie OpenClaw wstrzykuje stały zestaw plików obszaru roboczego (jeśli są obecne):
- `AGENTS.md`
- `SOUL.md`
@ -119,68 +119,68 @@ Domyślnie OpenClaw wstrzykuje stały zestaw plików workspace (jeśli istnieją
- `HEARTBEAT.md`
- `BOOTSTRAP.md` (tylko przy pierwszym uruchomieniu)
Duże pliki są przycinane osobno dla każdego pliku zgodnie z `agents.defaults.bootstrapMaxChars` (domyślnie `20000` znaków). OpenClaw wymusza także łączny limit wstrzykiwania bootstrap dla wszystkich plików przez `agents.defaults.bootstrapTotalMaxChars` (domyślnie `150000` znaków). `/context` pokazuje rozmiary **raw vs injected** oraz to, czy wystąpiło przycięcie.
Duże pliki są obcinane dla każdego pliku osobno zgodnie z `agents.defaults.bootstrapMaxChars` (domyślnie `12000` znaków). OpenClaw wymusza też łączny limit wstrzykiwania bootstrapu dla wszystkich plików przez `agents.defaults.bootstrapTotalMaxChars` (domyślnie `60000` znaków). `/context` pokazuje rozmiary **raw vs injected** oraz informację, czy nastąpiło obcięcie.
Gdy dochodzi do przycięcia, środowisko uruchomieniowe może wstrzyknąć ostrzeżenie bezpośrednio w prompt w sekcji Project Context. Skonfigurujesz to przez `agents.defaults.bootstrapPromptTruncationWarning` (`off`, `once`, `always`; domyślnie `once`).
Gdy dochodzi do obcięcia, środowisko uruchomieniowe może wstrzyknąć blok ostrzeżenia bezpośrednio do promptu w sekcji Project Context. Skonfigurujesz to przez `agents.defaults.bootstrapPromptTruncationWarning` (`off`, `once`, `always`; domyślnie `once`).
## Skills: wstrzyknięte vs ładowane na żądanie
## Skills: wstrzykiwane vs ładowane na żądanie
System prompt zawiera zwartą **listę Skills** (nazwa + opis + lokalizacja). Ta lista ma realny narzut.
Instrukcje Skills _nie_ domyślnie dołączane. Oczekuje się, że model odczyta `SKILL.md` danej umiejętności przez `read` **tylko wtedy, gdy jest to potrzebne**.
Instrukcje Skills _nie_ są domyślnie dołączane. Oczekuje się, że model odczyta `SKILL.md` danej Skills przez `read` **tylko wtedy, gdy będzie to potrzebne**.
## Narzędzia: są dwa koszty
## Narzędzia: są dwa rodzaje kosztów
Narzędzia wpływają na kontekst na dwa sposoby:
1. **Tekst listy narzędzi** w system prompcie (to, co widzisz jako „Tooling”).
1. **Tekst listy narzędzi** w system promptcie (to, co widzisz jako „Tooling”).
2. **Schematy narzędzi** (JSON). Są wysyłane do modelu, aby mógł wywoływać narzędzia. Wliczają się do kontekstu, mimo że nie widzisz ich jako zwykłego tekstu.
`/context detail` rozbija największe schematy narzędzi, aby pokazać, co dominuje.
`/context detail` pokazuje podział największych schematów narzędzi, dzięki czemu możesz zobaczyć, co dominuje.
## Polecenia, dyrektywy i „skróty inline”
Polecenia slash są obsługiwane przez Gateway. Występuje tu kilka różnych zachowań:
Polecenia slash są obsługiwane przez Gateway. Występuje kilka różnych zachowań:
- **Polecenia samodzielne**: wiadomość zawierająca wyłącznie `/...` jest uruchamiana jako polecenie.
- **Polecenia samodzielne**: wiadomość, która zawiera tylko `/...`, jest uruchamiana jako polecenie.
- **Dyrektywy**: `/think`, `/verbose`, `/trace`, `/reasoning`, `/elevated`, `/model`, `/queue` są usuwane, zanim model zobaczy wiadomość.
- Wiadomości zawierające wyłącznie dyrektywy utrwalają ustawienia sesji.
- Dyrektywy inline w zwykłej wiadomości działają jako wskazówki dla tej konkretnej wiadomości.
- **Skróty inline** (tylko dla nadawców z allowlisty): niektóre tokeny `/...` w zwykłej wiadomości mogą zostać uruchomione natychmiast (na przykład: „hej /status”) i są usuwane, zanim model zobaczy pozostały tekst.
- Wiadomości zawierające tylko dyrektywy zapisują ustawienia sesji.
- Dyrektywy inline w zwykłej wiadomości działają jako wskazówki dla pojedynczej wiadomości.
- **Skróty inline** (tylko nadawcy z allowlist): niektóre tokeny `/...` wewnątrz zwykłej wiadomości mogą uruchomić się natychmiast (przykład: „hej /status”) i są usuwane, zanim model zobaczy pozostały tekst.
Szczegóły: [Polecenia slash](/pl/tools/slash-commands).
## Sesje, Compaction i przycinanie (co jest trwałe)
## Sesje, Compaction i przycinanie (co jest zachowywane)
To, co pozostaje między wiadomościami, zależy od mechanizmu:
- **Zwykła historia** pozostaje w transkrypcie sesji, dopóki nie zostanie skompaktowana/przycięta zgodnie z polityką.
- **Compaction** zapisuje podsumowanie w transkrypcie i zachowuje nienaruszone ostatnie wiadomości.
- **Pruning** usuwa stare wyniki narzędzi z promptu _w pamięci_ dla danego uruchomienia, ale nie przepisuje transkryptu.
- **Zwykła historia** pozostaje w transkrypcji sesji, dopóki nie zostanie poddana Compaction/przycięciu zgodnie z polityką.
- **Compaction** zapisuje podsumowanie do transkrypcji i pozostawia nienaruszone ostatnie wiadomości.
- **Przycinanie** usuwa stare wyniki narzędzi z promptu _w pamięci_ dla danego uruchomienia, ale nie przepisuje transkrypcji.
Dokumentacja: [Session](/pl/concepts/session), [Compaction](/pl/concepts/compaction), [Session pruning](/pl/concepts/session-pruning).
Dokumentacja: [Sesja](/pl/concepts/session), [Compaction](/pl/concepts/compaction), [Przycinanie sesji](/pl/concepts/session-pruning).
Domyślnie OpenClaw używa wbudowanego silnika kontekstu `legacy` do składania kontekstu i
Compaction. Jeśli zainstalujesz Plugin, który udostępnia `kind: "context-engine"` i
wybierzesz go za pomocą `plugins.slots.contextEngine`, OpenClaw przekaże temu
silnikowi składanie kontekstu, `/compact` oraz powiązane hooki cyklu życia
kontekstu subagenta. `ownsCompaction: false` nie powoduje automatycznego powrotu
do silnika `legacy`; aktywny silnik nadal musi poprawnie implementować `compact()`. Zobacz
wybierzesz go przez `plugins.slots.contextEngine`, OpenClaw przekaże składanie
kontekstu, `/compact` oraz powiązane hooki cyklu życia kontekstu subagentów temu
silnikowi. `ownsCompaction: false` nie powoduje automatycznego powrotu do silnika
legacy; aktywny silnik nadal musi poprawnie implementować `compact()`. Zobacz
[Context Engine](/pl/concepts/context-engine), aby poznać pełny
interfejs z możliwością podłączania, hooki cyklu życia i konfigurację.
interfejs z obsługą Plugin, hooki cyklu życia i konfigurację.
## Co tak naprawdę raportuje `/context`
## Co faktycznie raportuje `/context`
`/context` preferuje najnowszy raport system promptu **zbudowanego podczas uruchomienia**, jeśli jest dostępny:
- `System prompt (run)` = przechwycony z ostatniego osadzonego uruchomienia (z obsługą narzędzi) i utrwalony w magazynie sesji.
- `System prompt (estimate)` = obliczany na bieżąco, gdy nie istnieje raport z uruchomienia (lub gdy uruchamiasz przez backend CLI, który nie generuje raportu).
- `System prompt (run)` = przechwycony z ostatniego osadzonego uruchomienia (z obsługą narzędzi) i zapisany w magazynie sesji.
- `System prompt (estimate)` = obliczony na bieżąco, gdy nie istnieje raport z uruchomienia (albo przy uruchamianiu przez backend CLI, który nie generuje raportu).
W obu przypadkach raportuje rozmiary i największe składniki; **nie** zrzuca pełnego system promptu ani schematów narzędzi.
W obu przypadkach raportuje rozmiary i głównych uczestników; **nie** wypisuje pełnego system promptu ani schematów narzędzi.
## Powiązane
- [Context Engine](/pl/concepts/context-engine) — niestandardowe wstrzykiwanie kontekstu przez pluginy
- [Context Engine](/pl/concepts/context-engine) — niestandardowe wstrzykiwanie kontekstu przez Pluginy
- [Compaction](/pl/concepts/compaction) — podsumowywanie długich rozmów
- [System Prompt](/pl/concepts/system-prompt) — jak budowany jest system prompt
- [Agent Loop](/pl/concepts/agent-loop) — pełny cykl działania agenta
- [Agent Loop](/pl/concepts/agent-loop) — pełny cykl wykonywania agenta

View File

@ -2,22 +2,22 @@
read_when:
- Rozszerzanie qa-lab lub qa-channel
- Dodawanie scenariuszy QA opartych na repozytorium
- Tworzenie bardziej realistycznej automatyzacji QA wokół panelu Gateway
summary: Prywatny kształt automatyzacji QA dla qa-lab, qa-channel, scenariuszy z seedem i raportów protokołu
- Budowanie bardziej realistycznej automatyzacji QA wokół panelu Gateway
summary: Prywatna struktura automatyzacji QA dla qa-lab, qa-channel, scenariuszy seedowanych i raportów protokołu
title: Automatyzacja QA E2E
x-i18n:
generated_at: "2026-04-17T09:49:38Z"
generated_at: "2026-04-18T09:34:51Z"
model: gpt-5.4
provider: openai
source_hash: 51f97293c184d7c04c95d9858305668fbc0f93273f587ec7e54896ad5d603ab0
source_hash: adf8c5f74e8fabdc8e9fd7ecd41afce8b60354c7dd24d92ac926d3c527927cd4
source_path: concepts/qa-e2e-automation.md
workflow: 15
---
# Automatyzacja QA E2E
Prywatny stos QA ma na celu testowanie OpenClaw w sposób bardziej realistyczny,
ukształtowany przez kanały, niż może to zrobić pojedynczy test jednostkowy.
Prywatny stos QA ma na celu testowanie OpenClaw w bardziej realistyczny,
kanałowy sposób niż pojedynczy test jednostkowy.
Obecne elementy:
@ -25,8 +25,7 @@ Obecne elementy:
reakcji, edycji i usuwania.
- `extensions/qa-lab`: interfejs debuggera i magistrala QA do obserwowania transkryptu,
wstrzykiwania wiadomości przychodzących i eksportowania raportu Markdown.
- `qa/`: zasoby seedów oparte na repozytorium dla zadania startowego i bazowych
scenariuszy QA.
- `qa/`: zasoby seedowane oparte na repozytorium dla zadania startowego i bazowych scenariuszy QA.
Obecny przepływ pracy operatora QA to dwupanelowa witryna QA:
@ -39,13 +38,13 @@ Uruchom za pomocą:
pnpm qa:lab:up
```
To buduje witrynę QA, uruchamia ścieżkę Gateway opartą na Dockerze i udostępnia
stronę QA Lab, gdzie operator lub pętla automatyzacji może dać agentowi misję QA,
obserwować rzeczywiste zachowanie kanału oraz rejestrować, co zadziałało, co się nie powiodło
i co pozostało zablokowane.
To buduje witrynę QA, uruchamia opartą na Dockerze ścieżkę gateway i udostępnia
stronę QA Lab, na której operator lub pętla automatyzacji może zlecić agentowi
misję QA, obserwować rzeczywiste zachowanie kanału oraz rejestrować, co zadziałało,
co się nie udało i co pozostało zablokowane.
Aby szybciej iterować nad interfejsem QA Lab bez przebudowywania obrazu Dockera za każdym razem,
uruchom stos z pakietem QA Lab montowanym przez bind mount:
Aby szybciej iterować nad interfejsem QA Lab bez przebudowywania obrazu Docker przy każdej zmianie,
uruchom stos z podmontowanym pakietem QA Lab:
```bash
pnpm openclaw qa docker-build-image
@ -54,54 +53,53 @@ pnpm qa:lab:up:fast
pnpm qa:lab:watch
```
`qa:lab:up:fast` utrzymuje usługi Dockera na wcześniej zbudowanym obrazie i montuje przez bind mount
`qa:lab:up:fast` utrzymuje usługi Docker na wcześniej zbudowanym obrazie i bind-mountuje
`extensions/qa-lab/web/dist` do kontenera `qa-lab`. `qa:lab:watch`
przebudowuje ten pakiet przy zmianach, a przeglądarka automatycznie przeładowuje się, gdy zmienia się hash zasobów QA Lab.
Aby uruchomić ścieżkę smoke z rzeczywistym transportem Matrix, wykonaj:
Dla ścieżki smoke Matrix z rzeczywistym transportem uruchom:
```bash
pnpm openclaw qa matrix
```
Ta ścieżka tworzy w Dockerze jednorazowy homeserver Tuwunel, rejestruje
tymczasowych użytkowników driver, SUT i observer, tworzy jeden prywatny pokój, a następnie uruchamia
rzeczywistą wtyczkę Matrix wewnątrz procesu podrzędnego QA Gateway. Ścieżka z żywym transportem utrzymuje
konfigurację procesu podrzędnego ograniczoną do testowanego transportu, więc Matrix działa bez
`qa-channel` w konfiguracji procesu podrzędnego. Zapisuje uporządkowane artefakty raportu oraz
połączony log stdout/stderr do wybranego katalogu wyjściowego Matrix QA. Aby przechwycić
również zewnętrzne dane wyjściowe budowania/uruchamiania z `scripts/run-node.mjs`, ustaw
`OPENCLAW_RUN_NODE_OUTPUT_LOG=<path>` na plik logu lokalny względem repozytorium.
Ta ścieżka udostępnia jednorazowy homeserver Tuwunel w Dockerze, rejestruje
tymczasowych użytkowników drivera, SUT i obserwatora, tworzy jeden prywatny pokój,
a następnie uruchamia prawdziwy Plugin Matrix wewnątrz procesu podrzędnego QA gateway. Ścieżka z żywym transportem utrzymuje konfigurację procesu podrzędnego ograniczoną do testowanego transportu, dzięki czemu Matrix działa bez
`qa-channel` w konfiguracji procesu podrzędnego. Zapisuje ustrukturyzowane artefakty raportu oraz
połączony log stdout/stderr do wybranego katalogu wyjściowego Matrix QA. Aby
przechwycić także zewnętrzne dane wyjściowe budowania/uruchamiania z `scripts/run-node.mjs`,
ustaw `OPENCLAW_RUN_NODE_OUTPUT_LOG=<path>` na plik logu lokalny względem repozytorium.
Aby uruchomić ścieżkę smoke z rzeczywistym transportem Telegram, wykonaj:
Dla ścieżki smoke Telegram z rzeczywistym transportem uruchom:
```bash
pnpm openclaw qa telegram
```
Ta ścieżka jest kierowana do jednej rzeczywistej prywatnej grupy Telegram zamiast tworzyć
Ta ścieżka kieruje ruch do jednej prawdziwej prywatnej grupy Telegram zamiast udostępniać
jednorazowy serwer. Wymaga `OPENCLAW_QA_TELEGRAM_GROUP_ID`,
`OPENCLAW_QA_TELEGRAM_DRIVER_BOT_TOKEN` oraz
`OPENCLAW_QA_TELEGRAM_DRIVER_BOT_TOKEN` i
`OPENCLAW_QA_TELEGRAM_SUT_BOT_TOKEN`, a także dwóch różnych botów w tej samej
prywatnej grupie. Bot SUT musi mieć nazwę użytkownika Telegram, a obserwacja bot-do-bot
działa najlepiej, gdy oba boty mają włączony tryb Bot-to-Bot Communication Mode
prywatnej grupie. Bot SUT musi mieć nazwę użytkownika Telegram, a obserwacja bot-do-bota
działa najlepiej, gdy oba boty mają włączony Bot-to-Bot Communication Mode
w `@BotFather`.
Ścieżki z żywym transportem współdzielą teraz jeden mniejszy kontrakt zamiast tego, by każda definiowała
własny kształt listy scenariuszy:
`qa-channel` pozostaje szerokim syntetycznym zestawem testów zachowania produktu i nie jest częścią
`qa-channel` pozostaje szerokim syntetycznym zestawem zachowań produktu i nie jest częścią
macierzy pokrycia dla żywego transportu.
| Ścieżka | Canary | Ograniczanie odpowiedzi wzmiankami | Blokada allowlist | Odpowiedź najwyższego poziomu | Wznowienie po restarcie | Kontynuacja wątku | Izolacja wątku | Obserwacja reakcji | Polecenie pomocy |
| -------- | ------ | ---------------------------------- | ----------------- | ----------------------------- | ----------------------- | ----------------- | -------------- | ------------------ | ---------------- |
| Matrix | x | x | x | x | x | x | x | x | |
| Telegram | x | | | | | | | | x |
| Ścieżka | Canary | Bramka wzmianki | Blokada allowlisty | Odpowiedź najwyższego poziomu | Wznowienie po restarcie | Dalszy ciąg w wątku | Izolacja wątku | Obserwacja reakcji | Polecenie pomocy |
| -------- | ------ | --------------- | ------------------ | ----------------------------- | ----------------------- | ------------------- | -------------- | ------------------ | ---------------- |
| Matrix | x | x | x | x | x | x | x | x | |
| Telegram | x | | | | | | | | x |
Dzięki temu `qa-channel` pozostaje szerokim zestawem testów zachowania produktu, podczas gdy Matrix,
Telegram i przyszłe żywe transporty współdzielą jedną jawną checklistę kontraktu transportu.
Dzięki temu `qa-channel` pozostaje szerokim zestawem zachowań produktu, podczas gdy Matrix,
Telegram i przyszłe żywe transporty współdzielą jedną jawną checklistę kontraktu transportowego.
Aby uruchomić jednorazową ścieżkę na maszynie wirtualnej Linux bez włączania Dockera do ścieżki QA, wykonaj:
Dla ścieżki z jednorazową maszyną wirtualną Linux bez wprowadzania Dockera do ścieżki QA uruchom:
```bash
pnpm openclaw qa suite --runner multipass --scenario channel-chat-baseline
@ -111,95 +109,99 @@ To uruchamia świeżego gościa Multipass, instaluje zależności, buduje OpenCl
wewnątrz gościa, uruchamia `qa suite`, a następnie kopiuje zwykły raport QA i
podsumowanie z powrotem do `.artifacts/qa-e2e/...` na hoście.
Wykorzystuje to samo zachowanie wyboru scenariuszy co `qa suite` na hoście.
Uruchomienia hosta i Multipass suite wykonują domyślnie wiele wybranych scenariuszy równolegle
z izolowanymi workerami Gateway, do 64 workerów lub liczby wybranych scenariuszy.
Użyj `--concurrency <count>`, aby dostroić liczbę workerów, lub
`--concurrency 1` dla wykonania sekwencyjnego.
Uruchomienia live przekazują obsługiwane wejścia uwierzytelniania QA, które są praktyczne dla
gościa: klucze dostawcy oparte na env, ścieżkę konfiguracji dostawcy QA live oraz
`CODEX_HOME`, jeśli jest obecne. Zachowaj `--output-dir` pod katalogiem głównym repozytorium, aby gość
mógł zapisywać z powrotem przez zamontowaną przestrzeń roboczą.
Uruchomienia hosta i Multipass suite domyślnie wykonują wiele wybranych scenariuszy równolegle
z izolowanymi workerami gateway, maksymalnie do 64 workerów lub liczby wybranych
scenariuszy. Użyj `--concurrency <count>`, aby dostroić liczbę workerów, albo
`--concurrency 1` dla wykonania szeregowego.
Uruchomienia na żywo przekazują obsługiwane dane uwierzytelniające QA, które są praktyczne dla
gościa: klucze dostawców oparte na zmiennych środowiskowych, ścieżkę konfiguracji dostawcy QA live oraz
`CODEX_HOME`, jeśli jest obecne. Zachowaj `--output-dir` w katalogu głównym repozytorium, aby gość
mógł zapisywać z powrotem przez podmontowany obszar roboczy.
## Seedy oparte na repozytorium
Zasoby seedów znajdują się w `qa/`:
Zasoby seedowane znajdują się w `qa/`:
- `qa/scenarios/index.md`
- `qa/scenarios/*.md`
- `qa/scenarios/<theme>/*.md`
Są one celowo przechowywane w git, aby plan QA był widoczny zarówno dla ludzi, jak i dla
agenta.
`qa-lab` powinien pozostać ogólnym runnerem Markdown. Każdy plik Markdown scenariusza jest
źródłem prawdy dla jednego przebiegu testowego i powinien definiować:
`qa-lab` powinien pozostać generycznym runnerem Markdown. Każdy plik scenariusza Markdown jest
źródłem prawdy dla jednego uruchomienia testowego i powinien definiować:
- metadane scenariusza
- opcjonalne metadane kategorii, możliwości, ścieżki i ryzyka
- odwołania do dokumentacji i kodu
- opcjonalne wymagania dotyczące wtyczek
- opcjonalną łatkę konfiguracji Gateway
- opcjonalne wymagania Plugin
- opcjonalną łatkę konfiguracji gateway
- wykonywalny `qa-flow`
Współdzielona powierzchnia runtime, która obsługuje `qa-flow`, może pozostać ogólna
i przekrojowa. Na przykład scenariusze Markdown mogą łączyć pomocniki po stronie transportu
z pomocnikami po stronie przeglądarki, które sterują osadzonym Control UI przez
interfejs Gateway `browser.request`, bez dodawania specjalnego runnera.
Powtarzalna powierzchnia runtime, która stoi za `qa-flow`, może pozostać generyczna
i przekrojowa. Na przykład scenariusze Markdown mogą łączyć helpery po stronie
transportu z helperami po stronie przeglądarki, które sterują osadzonym interfejsem Control UI przez
powierzchnię Gateway `browser.request`, bez dodawania runnera specjalnego przypadku.
Lista bazowa powinna pozostać na tyle szeroka, aby obejmować:
Pliki scenariuszy powinny być grupowane według możliwości produktu, a nie według folderu
drzewa źródłowego. Zachowuj stabilność ID scenariuszy przy przenoszeniu plików; używaj `docsRefs` i `codeRefs`
dla identyfikowalności implementacji.
Lista bazowa powinna pozostać wystarczająco szeroka, by obejmować:
- czat DM i kanałowy
- zachowanie wątku
- cykl życia akcji wiadomości
- zachowanie wątków
- cykl życia akcji na wiadomościach
- wywołania zwrotne Cron
- przywoływanie pamięci
- przełączanie modeli
- przekazanie do subagenta
- odczyt repozytorium i dokumentacji
- jedno małe zadanie budowania, takie jak Lobster Invaders
- jedno małe zadanie build, takie jak Lobster Invaders
## Ścieżki mock dostawców
## Ścieżki z mockami dostawców
`qa suite` ma dwie lokalne ścieżki mock dostawców:
`qa suite` ma dwie lokalne ścieżki z mockami dostawców:
- `mock-openai` to świadomy scenariuszy mock OpenClaw. Pozostaje domyślną
deterministyczną ścieżką mock dla QA opartego na repozytorium i bramek parzystości.
deterministyczną ścieżką mock dla QA opartego na repozytorium i bramek zgodności.
- `aimock` uruchamia serwer dostawcy oparty na AIMock do eksperymentalnego pokrycia
protokołu, fixture, record/replay i chaos. Jest dodatkiem i nie zastępuje
dispatcher scenariuszy `mock-openai`.
dyspozytora scenariuszy `mock-openai`.
Implementacja ścieżek dostawców znajduje się w `extensions/qa-lab/src/providers/`.
Każdy dostawca zarządza własnymi ustawieniami domyślnymi, uruchamianiem lokalnego serwera,
konfiguracją modelu Gateway, potrzebami etapowania profilu auth oraz flagami możliwości live/mock.
Współdzielony kod suite i Gateway powinien kierować przez rejestr dostawców zamiast rozgałęziać się
na podstawie nazw dostawców.
Każdy dostawca zarządza własnymi ustawieniami domyślnymi, uruchamianiem lokalnego serwera, konfiguracją modeli gateway,
potrzebami przygotowania profilu auth oraz flagami możliwości live/mock. Współdzielony kod suite i gateway
powinien routować przez rejestr dostawców zamiast rozgałęziać się według nazw dostawców.
## Adaptery transportu
`qa-lab` posiada ogólny interfejs transportu dla scenariuszy QA w Markdown.
`qa-channel` jest pierwszym adapterem tego interfejsu, ale docelowy projekt jest szerszy:
przyszłe kanały rzeczywiste lub syntetyczne powinny podłączać się do tego samego runnera suite
`qa-lab` zarządza generyczną powierzchnią transportu dla scenariuszy QA Markdown.
`qa-channel` jest pierwszym adapterem na tej powierzchni, ale docelowy projekt jest szerszy:
przyszłe prawdziwe lub syntetyczne kanały powinny podłączać się do tego samego runnera suite
zamiast dodawania runnera QA specyficznego dla transportu.
Na poziomie architektury podział wygląda następująco:
- `qa-lab` odpowiada za ogólne wykonywanie scenariuszy, współbieżność workerów, zapisywanie artefaktów i raportowanie.
- adapter transportu odpowiada za konfigurację Gateway, gotowość, obserwację wejścia i wyjścia, akcje transportu oraz znormalizowany stan transportu.
- pliki scenariuszy Markdown w `qa/scenarios/` definiują przebieg testu; `qa-lab` dostarcza współdzieloną powierzchnię runtime, która go wykonuje.
- `qa-lab` zarządza generycznym wykonywaniem scenariuszy, współbieżnością workerów, zapisem artefaktów i raportowaniem.
- adapter transportu zarządza konfiguracją gateway, gotowością, obserwacją ruchu przychodzącego i wychodzącego, akcjami transportu oraz znormalizowanym stanem transportu.
- pliki scenariuszy Markdown w `qa/scenarios/` definiują przebieg testu; `qa-lab` zapewnia powtarzalną powierzchnię runtime, która je wykonuje.
Wskazówki wdrożeniowe dla maintainerów dotyczące nowych adapterów kanałów znajdują się w
[Testing](/pl/help/testing#adding-a-channel-to-qa).
## Raportowanie
`qa-lab` eksportuje raport protokołu Markdown na podstawie obserwowanej osi czasu magistrali.
`qa-lab` eksportuje raport protokołu Markdown z obserwowanej osi czasu magistrali.
Raport powinien odpowiadać na pytania:
- Co zadziałało
- Co się nie powiodło
- Co się nie udało
- Co pozostało zablokowane
- Jakie scenariusze uzupełniające warto dodać
Aby przeprowadzić sprawdzenia charakteru i stylu, uruchom ten sam scenariusz na wielu referencjach modeli live
i zapisz oceniany raport Markdown:
Dla sprawdzania charakteru i stylu uruchom ten sam scenariusz na wielu refach modeli live
i zapisz oceniony raport Markdown:
```bash
pnpm openclaw qa character-eval \
@ -218,36 +220,35 @@ pnpm openclaw qa character-eval \
--judge-concurrency 16
```
To polecenie uruchamia lokalne procesy podrzędne QA Gateway, a nie Docker. Scenariusze
Polecenie uruchamia lokalne procesy podrzędne QA gateway, a nie Docker. Scenariusze
character eval powinny ustawiać personę przez `SOUL.md`, a następnie wykonywać zwykłe tury użytkownika,
takie jak czat, pomoc w przestrzeni roboczej i małe zadania na plikach. Kandydacki model
takie jak czat, pomoc dotycząca workspace i małe zadania na plikach. Kandydacki model
nie powinien być informowany, że jest oceniany. Polecenie zachowuje każdy pełny
transkrypt, rejestruje podstawowe statystyki uruchomienia, a następnie prosi modele oceniające w trybie fast z
rozumowaniem `xhigh`, aby uszeregowały przebiegi według naturalności, klimatu i humoru.
Użyj `--blind-judge-models` podczas porównywania dostawców: prompt sędziego nadal otrzymuje
każdy transkrypt i status uruchomienia, ale referencje kandydatów są zastępowane
neutralnymi etykietami, takimi jak `candidate-01`; raport mapuje rankingi z powrotem na rzeczywiste referencje po
rozumowaniem `xhigh` o uszeregowanie uruchomień według naturalności, klimatu i humoru.
Użyj `--blind-judge-models` przy porównywaniu dostawców: prompt sędziego nadal otrzymuje
każdy transkrypt i status uruchomienia, ale refy kandydatów są zastępowane neutralnymi
etykietami takimi jak `candidate-01`; raport mapuje rankingi z powrotem na rzeczywiste refy po
parsowaniu.
Przebiegi kandydatów domyślnie używają poziomu myślenia `high`, z `xhigh` dla modeli OpenAI, które
go obsługują. Zastąp ustawienie konkretnego kandydata inline przez
Uruchomienia kandydatów domyślnie używają poziomu myślenia `high`, z `xhigh` dla modeli OpenAI,
które to obsługują. Zastąp ustawienie dla konkretnego kandydata inline przez
`--model provider/model,thinking=<level>`. `--thinking <level>` nadal ustawia
globalny fallback, a starsza forma `--model-thinking <provider/model=level>` jest
zachowana dla kompatybilności.
Referencje kandydatów OpenAI domyślnie używają trybu fast, aby tam, gdzie dostawca to obsługuje,
wykorzystywane było przetwarzanie priorytetowe. Dodaj inline `,fast`, `,no-fast` lub `,fast=false`, gdy
zachowana dla zgodności.
Refy kandydatów OpenAI domyślnie używają trybu fast, aby tam, gdzie dostawca to obsługuje, wykorzystywane było przetwarzanie priorytetowe. Dodaj inline `,fast`, `,no-fast` lub `,fast=false`, gdy
pojedynczy kandydat lub sędzia wymaga nadpisania. Przekaż `--fast` tylko wtedy, gdy chcesz
wymusić tryb fast dla każdego modelu kandydata. Czasy trwania dla kandydatów i sędziów są
rejestrowane w raporcie na potrzeby analizy benchmarków, ale prompty sędziów wyraźnie mówią,
aby nie oceniać na podstawie szybkości.
Zarówno przebiegi modeli kandydatów, jak i sędziów domyślnie używają współbieżności 16. Zmniejsz
`--concurrency` lub `--judge-concurrency`, gdy limity dostawcy lub obciążenie lokalnego Gateway
powodują, że przebieg staje się zbyt zaszumiony.
Gdy nie przekazano żadnego kandydata `--model`, character eval domyślnie używa
wymusić tryb fast dla każdego modelu kandydata. Czasy trwania kandydatów i sędziów są
rejestrowane w raporcie do analizy benchmarków, ale prompty sędziów wyraźnie mówią,
aby nie oceniać według szybkości.
Uruchomienia modeli kandydatów i sędziów domyślnie używają współbieżności 16. Zmniejsz
`--concurrency` lub `--judge-concurrency`, gdy limity dostawcy lub obciążenie lokalnego gateway
sprawiają, że uruchomienie jest zbyt zaszumione.
Gdy nie zostanie przekazany żaden kandydacki `--model`, character eval domyślnie używa
`openai/gpt-5.4`, `openai/gpt-5.2`, `openai/gpt-5`, `anthropic/claude-opus-4-6`,
`anthropic/claude-sonnet-4-6`, `zai/glm-5.1`,
`moonshot/kimi-k2.5` oraz
`google/gemini-3.1-pro-preview`, gdy nie przekazano `--model`.
Gdy nie przekazano `--judge-model`, sędziowie domyślnie używają
`google/gemini-3.1-pro-preview`, gdy nie zostanie przekazany żaden `--model`.
Gdy nie zostanie przekazany żaden `--judge-model`, sędziowie domyślnie używają
`openai/gpt-5.4,thinking=xhigh,fast` oraz
`anthropic/claude-opus-4-6,thinking=high`.

View File

@ -1,103 +1,103 @@
---
read_when:
- Edytowanie tekstu promptu systemowego, listy narzędzi lub sekcji czasu/Heartbeat
- Zmiana zachowania bootstrapu przestrzeni roboczej lub wstrzykiwania Skills
- Zmiana zachowania bootstrapu obszaru roboczego lub wstrzykiwania Skills
summary: Co zawiera prompt systemowy OpenClaw i jak jest składany
title: Prompt systemowy
x-i18n:
generated_at: "2026-04-15T19:41:38Z"
generated_at: "2026-04-18T09:34:50Z"
model: gpt-5.4
provider: openai
source_hash: c740e4646bc4980567338237bfb55126af0df72499ca00a48e4848d9a3608ab4
source_hash: e60705994cebdd9768926168cb1c6d17ab717d7ff02353a5d5e7478ba8191cab
source_path: concepts/system-prompt.md
workflow: 15
---
# Prompt systemowy
OpenClaw tworzy niestandardowy prompt systemowy dla każdego uruchomienia agenta. Prompt jest **własnością OpenClaw** i nie używa domyślnego promptu `pi-coding-agent`.
OpenClaw buduje niestandardowy prompt systemowy dla każdego uruchomienia agenta. Prompt jest **własnością OpenClaw** i nie używa domyślnego promptu `pi-coding-agent`.
Prompt jest składany przez OpenClaw i wstrzykiwany do każdego uruchomienia agenta.
Pluginy dostawców mogą wnosić wskazówki do promptu uwzględniające cache bez zastępowania
pełnego promptu należącego do OpenClaw. Runtime dostawcy może:
Wtyczki dostawców mogą wnosić wskazówki do promptu uwzględniające pamięć podręczną bez zastępowania
całego promptu będącego własnością OpenClaw. Środowisko uruchomieniowe dostawcy może:
- zastąpić mały zestaw nazwanych sekcji rdzeniowych (`interaction_style`,
- zastąpić niewielki zestaw nazwanych sekcji rdzenia (`interaction_style`,
`tool_call_style`, `execution_bias`)
- wstrzyknąć **stabilny prefiks** powyżej granicy cache promptu
- wstrzyknąć **dynamiczny sufiks** poniżej granicy cache promptu
- wstrzyknąć **stabilny prefiks** ponad granicą pamięci podręcznej promptu
- wstrzyknąć **dynamiczny sufiks** pod granicą pamięci podręcznej promptu
Używaj wkładów należących do dostawcy do dostrajania specyficznego dla rodziny modeli. Zachowaj starszą
mutację promptu `before_prompt_build` dla zgodności lub rzeczywiście globalnych zmian promptu, a nie dla zwykłego zachowania dostawcy.
mutację promptu `before_prompt_build` dla zgodności lub dla naprawdę globalnych zmian promptu, a nie dla zwykłego zachowania dostawcy.
## Struktura
Prompt jest celowo zwięzły i używa stałych sekcji:
- **Tooling**: przypomnienie o źródle prawdy dla narzędzi strukturalnych oraz wskazówki dotyczące użycia narzędzi w runtime.
- **Safety**: krótkie przypomnienie o zabezpieczeniach, aby unikać zachowań dążących do przejęcia kontroli lub omijania nadzoru.
- **Skills** (gdy dostępne): informuje model, jak na żądanie ładować instrukcje umiejętności.
- **OpenClaw Self-Update**: jak bezpiecznie sprawdzać konfigurację za pomocą
`config.schema.lookup`, modyfikować konfigurację za pomocą `config.patch`, zastępować pełną
konfigurację za pomocą `config.apply` i uruchamiać `update.run` tylko na wyraźną
- **Narzędzia**: przypomnienie o źródle prawdy dla narzędzi strukturalnych oraz wskazówki środowiska uruchomieniowego dotyczące użycia narzędzi.
- **Bezpieczeństwo**: krótkie przypomnienie o zabezpieczeniach, aby unikać zachowań dążących do zdobycia władzy lub obchodzenia nadzoru.
- **Skills** (gdy są dostępne): mówi modelowi, jak w razie potrzeby wczytywać instrukcje umiejętności.
- **Samoaktualizacja OpenClaw**: jak bezpiecznie sprawdzać konfigurację za pomocą
`config.schema.lookup`, łatać konfigurację za pomocą `config.patch`, zastępować całą
konfigurację za pomocą `config.apply` oraz uruchamiać `update.run` tylko na wyraźną
prośbę użytkownika. Narzędzie `gateway`, dostępne tylko dla właściciela, również odmawia przepisywania
`tools.exec.ask` / `tools.exec.security`, w tym starszych aliasów `tools.bash.*`,
które są normalizowane do tych chronionych ścieżek exec.
- **Workspace**: katalog roboczy (`agents.defaults.workspace`).
- **Documentation**: lokalna ścieżka do dokumentacji OpenClaw (repozytorium lub pakiet npm) i kiedy ją czytać.
- **Workspace Files (injected)**: wskazuje, że pliki bootstrap są dołączone poniżej.
- **Sandbox** (gdy włączony): wskazuje środowisko sandbox, ścieżki sandboxa i to, czy podwyższony exec jest dostępny.
- **Current Date & Time**: lokalny czas użytkownika, strefa czasowa i format czasu.
- **Reply Tags**: opcjonalna składnia tagów odpowiedzi dla obsługiwanych dostawców.
- **Heartbeats**: prompt heartbeat i zachowanie potwierdzenia, gdy heartbeat jest włączony dla domyślnego agenta.
- **Runtime**: host, system operacyjny, node, model, katalog główny repozytorium (gdy wykryty), poziom myślenia (jedna linia).
- **Reasoning**: bieżący poziom widoczności + podpowiedź przełączania `/reasoning`.
- **Obszar roboczy**: katalog roboczy (`agents.defaults.workspace`).
- **Dokumentacja**: lokalna ścieżka do dokumentacji OpenClaw (repozytorium lub pakiet npm) i informacja, kiedy ją czytać.
- **Pliki obszaru roboczego (wstrzyknięte)**: wskazuje, że pliki bootstrap są dołączone poniżej.
- **Sandbox** (gdy włączony): wskazuje środowisko uruchomieniowe w sandboxie, ścieżki sandboxa oraz to, czy podwyższone exec jest dostępne.
- **Bieżąca data i godzina**: czas lokalny użytkownika, strefa czasowa i format czasu.
- **Tagi odpowiedzi**: opcjonalna składnia tagów odpowiedzi dla obsługiwanych dostawców.
- **Heartbeat**: prompt Heartbeat i zachowanie potwierdzeń, gdy Heartbeat jest włączony dla domyślnego agenta.
- **Środowisko uruchomieniowe**: host, system operacyjny, node, katalog główny repozytorium (jeśli wykryto), poziom myślenia (jedna linia).
- **Rozumowanie**: bieżący poziom widoczności + wskazówka przełączania `/reasoning`.
Sekcja Tooling zawiera również wskazówki runtime dla długotrwałej pracy:
Sekcja Narzędzia zawiera też wskazówki środowiska uruchomieniowego dotyczące długotrwałej pracy:
- używaj Cron do przyszłych działań następczych (`check back later`, przypomnienia, zadania cykliczne)
zamiast pętli uśpienia `exec`, trików opóźnień `yieldMs` lub powtarzanego odpytywania `process`
- używaj `exec` / `process` tylko dla poleceń, które uruchamiają się teraz i nadal działają
- używaj cron do przyszłych działań następczych (`check back later`, przypomnienia, praca cykliczna)
zamiast pętli `exec` ze `sleep`, trików opóźnienia `yieldMs` lub powtarzanego
odpytywania `process`
- używaj `exec` / `process` tylko do poleceń, które uruchamiają się teraz i dalej działają
w tle
- gdy włączone jest automatyczne wybudzanie po zakończeniu, uruchom polecenie raz i polegaj na
mechanizmie wybudzania opartym na push, gdy wygeneruje wynik lub zakończy się błędem
- używaj `process` do logów, statusu, wejścia lub interwencji, gdy musisz
ścieżce wybudzania typu push, gdy wygeneruje dane wyjściowe lub zakończy się błędem
- używaj `process` do logów, stanu, danych wejściowych lub interwencji, gdy musisz
sprawdzić działające polecenie
- jeśli zadanie jest większe, preferuj `sessions_spawn`; zakończenie sub-agentów działa
w oparciu o push i jest automatycznie ogłaszane z powrotem do żądającego
- nie odpytywuj `subagents list` / `sessions_list` w pętli tylko po to, by czekać na
- jeśli zadanie jest większe, preferuj `sessions_spawn`; zakończenie podagenta jest
oparte na push i automatycznie ogłaszane z powrotem do zlecającego
- nie odpytywaj w pętli `subagents list` / `sessions_list` tylko po to, by czekać na
zakończenie
Gdy eksperymentalne narzędzie `update_plan` jest włączone, Tooling informuje również model,
Gdy eksperymentalne narzędzie `update_plan` jest włączone, sekcja Narzędzia mówi modelowi również,
aby używać go tylko do nietrywialnej pracy wieloetapowej, utrzymywać dokładnie jeden krok
`in_progress` i unikać powtarzania całego planu po każdej aktualizacji.
Zabezpieczenia bezpieczeństwa w prompcie systemowym mają charakter doradczy. Kierują zachowaniem modelu, ale nie wymuszają polityki. Do twardego egzekwowania używaj polityki narzędzi, zatwierdzeń exec, sandboxingu i list dozwolonych kanałów; operatorzy mogą je celowo wyłączyć.
Na kanałach z natywnymi kartami/przyciskami zatwierdzania prompt runtime informuje teraz
agenta, aby najpierw polegał na tym natywnym interfejsie zatwierdzania. Powinien uwzględniać ręczne
polecenie `/approve` tylko wtedy, gdy wynik narzędzia mówi, że zatwierdzenia w czacie są niedostępne lub
ręczne zatwierdzenie jest jedyną drogą.
Na kanałach z natywnymi kartami/przyciskami zatwierdzania prompt środowiska uruchomieniowego informuje teraz
agenta, by najpierw polegał na tym natywnym interfejsie zatwierdzania. Powinien dołączać ręczne polecenie
`/approve` tylko wtedy, gdy wynik narzędzia mówi, że zatwierdzenia na czacie są niedostępne lub
jedyną drogą jest ręczne zatwierdzenie.
## Tryby promptu
OpenClaw może renderować mniejsze prompty systemowe dla sub-agentów. Runtime ustawia
OpenClaw może renderować mniejsze prompty systemowe dla podagentów. Środowisko uruchomieniowe ustawia
`promptMode` dla każdego uruchomienia (nie jest to konfiguracja widoczna dla użytkownika):
- `full` (domyślnie): zawiera wszystkie powyższe sekcje.
- `minimal`: używany dla sub-agentów; pomija **Skills**, **Memory Recall**, **OpenClaw
Self-Update**, **Model Aliases**, **User Identity**, **Reply Tags**,
**Messaging**, **Silent Replies** i **Heartbeats**. Tooling, **Safety**,
Workspace, Sandbox, Current Date & Time (gdy znane), Runtime i wstrzyknięty
- `full` (domyślnie): zawiera wszystkie sekcje powyżej.
- `minimal`: używany dla podagentów; pomija **Skills**, **Przywoływanie pamięci**, **Samoaktualizację OpenClaw**, **Aliasy modeli**, **Tożsamość użytkownika**, **Tagi odpowiedzi**,
**Wiadomości**, **Ciche odpowiedzi** i **Heartbeat**. Narzędzia, **Bezpieczeństwo**,
Obszar roboczy, Sandbox, Bieżąca data i godzina (gdy znane), Środowisko uruchomieniowe i wstrzyknięty
kontekst pozostają dostępne.
- `none`: zwraca tylko podstawową linię tożsamości.
- `none`: zwraca tylko bazową linię tożsamości.
Gdy `promptMode=minimal`, dodatkowe wstrzyknięte prompty są oznaczane jako **Subagent
Context** zamiast **Group Chat Context**.
Gdy `promptMode=minimal`, dodatkowe wstrzyknięte prompty są oznaczane jako **Kontekst podagenta**
zamiast **Kontekst czatu grupowego**.
## Wstrzykiwanie bootstrapu przestrzeni roboczej
## Wstrzykiwanie bootstrapu obszaru roboczego
Pliki bootstrap są przycinane i dołączane w sekcji **Project Context**, aby model widział kontekst tożsamości i profilu bez potrzeby ich jawnego odczytu:
Pliki bootstrap są przycinane i dołączane w sekcji **Kontekst projektu**, aby model widział tożsamość i kontekst profilu bez potrzeby jawnych odczytów:
- `AGENTS.md`
- `SOUL.md`
@ -105,68 +105,67 @@ Pliki bootstrap są przycinane i dołączane w sekcji **Project Context**, aby m
- `IDENTITY.md`
- `USER.md`
- `HEARTBEAT.md`
- `BOOTSTRAP.md` (tylko w zupełnie nowych przestrzeniach roboczych)
- `MEMORY.md`, jeśli istnieje, w przeciwnym razie `memory.md` jako zapasowy wariant pisany małymi literami
- `BOOTSTRAP.md` (tylko w zupełnie nowych obszarach roboczych)
- `MEMORY.md`, jeśli istnieje, w przeciwnym razie `memory.md` jako rezerwa z małych liter
Wszystkie te pliki są **wstrzykiwane do okna kontekstowego** przy każdej turze, chyba że
obowiązuje bramka specyficzna dla danego pliku. `HEARTBEAT.md` jest pomijany przy zwykłych uruchomieniach, gdy
heartbeat jest wyłączony dla domyślnego agenta lub
Wszystkie te pliki są **wstrzykiwane do okna kontekstu** przy każdej turze, chyba że ma zastosowanie bramka specyficzna dla pliku. `HEARTBEAT.md` jest pomijany przy zwykłych uruchomieniach, gdy
Heartbeat jest wyłączony dla domyślnego agenta lub
`agents.defaults.heartbeat.includeSystemPromptSection` ma wartość false. Utrzymuj wstrzykiwane
pliki zwięzłe — szczególnie `MEMORY.md`, który może z czasem rosnąć i prowadzić do
nieoczekiwanie wysokiego użycia kontekstu oraz częstszej Compaction.
nieoczekiwanie wysokiego zużycia kontekstu oraz częstszej Compaction.
> **Uwaga:** codzienne pliki `memory/*.md` **nie** są częścią zwykłego bootstrapowego
> Project Context. W zwykłych turach są odczytywane na żądanie przez
> **Uwaga:** dzienne pliki `memory/*.md` **nie** są częścią zwykłego bootstrapowego
> Kontekstu projektu. Przy standardowych turach są dostępne na żądanie przez
> narzędzia `memory_search` i `memory_get`, więc nie liczą się do
> okna kontekstowego, chyba że model jawnie je odczyta. Wyjątkiem są zwykłe tury `/new` i
> `/reset`: runtime może dołączyć ostatnią codzienną pamięć jako jednorazowy blok
> kontekstu startowego dla tej pierwszej tury.
> okna kontekstu, chyba że model wyraźnie je odczyta. Wyjątkiem są zwykłe tury `/new` i
> `/reset`: środowisko uruchomieniowe może poprzedzić pierwszy obrót jednorazowym blokiem
> kontekstu startowego zawierającym ostatnią dzienną pamięć.
Duże pliki są przycinane z markerem. Maksymalny rozmiar na plik jest kontrolowany przez
`agents.defaults.bootstrapMaxChars` (domyślnie: 20000). Łączna wstrzyknięta zawartość bootstrapu
Duże pliki są obcinane i oznaczane znacznikiem. Maksymalny rozmiar na plik jest kontrolowany przez
`agents.defaults.bootstrapMaxChars` (domyślnie: 12000). Całkowita wstrzyknięta zawartość bootstrapu
we wszystkich plikach jest ograniczona przez `agents.defaults.bootstrapTotalMaxChars`
(domyślnie: 150000). Brakujące pliki wstrzykują krótki znacznik brakującego pliku. Gdy dochodzi do przycięcia,
OpenClaw może wstrzyknąć blok ostrzeżenia w Project Context; kontroluje się to przez
(domyślnie: 60000). Brakujące pliki wstrzykują krótki znacznik brakującego pliku. Gdy dochodzi do obcięcia,
OpenClaw może wstrzyknąć blok ostrzeżenia w Kontekście projektu; steruje tym
`agents.defaults.bootstrapPromptTruncationWarning` (`off`, `once`, `always`;
domyślnie: `once`).
Sesje sub-agentów wstrzykują tylko `AGENTS.md` i `TOOLS.md` (pozostałe pliki bootstrap
są odfiltrowywane, aby zachować mały kontekst sub-agenta).
Sesje podagentów wstrzykują tylko `AGENTS.md` i `TOOLS.md` (pozostałe pliki bootstrapu
są odfiltrowywane, aby zachować mały kontekst podagenta).
Wewnętrzne hooki mogą przechwycić ten krok przez `agent:bootstrap`, aby mutować lub zastępować
wstrzyknięte pliki bootstrap (na przykład zamieniając `SOUL.md` na alternatywną personę).
wstrzyknięte pliki bootstrapu (na przykład zamieniając `SOUL.md` na alternatywną personę).
Jeśli chcesz, aby agent brzmiał mniej generycznie, zacznij od
[Przewodnika osobowości SOUL.md](/pl/concepts/soul).
Aby sprawdzić, jaki wkład ma każdy wstrzyknięty plik (surowy vs wstrzyknięty, przycięcie oraz narzut schematu narzędzi), użyj `/context list` lub `/context detail`. Zobacz [Context](/pl/concepts/context).
Aby sprawdzić, jaki wkład wnosi każdy wstrzyknięty plik (surowy vs wstrzyknięty, obcięcie, plus narzut schematu narzędzi), użyj `/context list` lub `/context detail`. Zobacz [Kontekst](/pl/concepts/context).
## Obsługa czasu
Prompt systemowy zawiera dedykowaną sekcję **Current Date & Time**, gdy znana jest
strefa czasowa użytkownika. Aby zachować stabilność cache promptu, zawiera teraz tylko
Prompt systemowy zawiera dedykowaną sekcję **Bieżąca data i godzina**, gdy znana jest
strefa czasowa użytkownika. Aby zachować stabilność pamięci podręcznej promptu, zawiera teraz tylko
**strefę czasową** (bez dynamicznego zegara ani formatu czasu).
Użyj `session_status`, gdy agent potrzebuje bieżącego czasu; karta statusu
zawiera wiersz znacznika czasu. To samo narzędzie może opcjonalnie ustawić
nadpisanie modelu dla sesji (`model=default` je czyści).
Użyj `session_status`, gdy agent potrzebuje bieżącego czasu; karta stanu
zawiera wiersz ze znacznikiem czasu. To samo narzędzie może opcjonalnie ustawić zastąpienie
modelu dla sesji (`model=default` je czyści).
Konfiguracja:
- `agents.defaults.userTimezone`
- `agents.defaults.timeFormat` (`auto` | `12` | `24`)
Pełne szczegóły zachowania znajdziesz w [Date & Time](/pl/date-time).
Pełne szczegóły zachowania znajdziesz w [Data i czas](/pl/date-time).
## Skills
Gdy istnieją kwalifikujące się Skills, OpenClaw wstrzykuje zwartą **listę dostępnych Skills**
(`formatSkillsForPrompt`), która zawiera **ścieżkę pliku** dla każdego Skill. Prompt
nakazuje modelowi użyć `read`, aby wczytać SKILL.md z podanej
lokalizacji (przestrzeń robocza, zarządzana lub dołączona). Jeśli nie ma kwalifikujących się Skills, sekcja
Gdy istnieją kwalifikujące się Skills, OpenClaw wstrzykuje zwięzłą **listę dostępnych Skills**
(`formatSkillsForPrompt`), która zawiera **ścieżkę do pliku** dla każdego Skill. Prompt
instruuje model, aby użyć `read` do wczytania pliku SKILL.md z podanej
lokalizacji (obszar roboczy, zarządzane lub wbudowane). Jeśli nie ma kwalifikujących się Skills, sekcja
Skills jest pomijana.
Kwalifikacja obejmuje bramki metadanych Skill, kontrole środowiska runtime/konfiguracji
Kwalifikowalność obejmuje bramki metadanych Skill, kontrole środowiska uruchomieniowego/konfiguracji
oraz efektywną listę dozwolonych Skills agenta, gdy skonfigurowano `agents.defaults.skills` lub
`agents.list[].skills`.
@ -180,26 +179,26 @@ oraz efektywną listę dozwolonych Skills agenta, gdy skonfigurowano `agents.def
</available_skills>
```
Pozwala to zachować mały podstawowy prompt, a jednocześnie umożliwia ukierunkowane użycie Skills.
Pozwala to zachować mały bazowy prompt, a jednocześnie nadal umożliwiać ukierunkowane użycie Skills.
Budżet listy Skills należy do podsystemu Skills:
- Globalna wartość domyślna: `skills.limits.maxSkillsPromptChars`
- Nadpisanie dla agenta: `agents.list[].skillsLimits.maxSkillsPromptChars`
- Zastąpienie dla agenta: `agents.list[].skillsLimits.maxSkillsPromptChars`
Ogólne ograniczone fragmenty runtime używają innej powierzchni:
Ogólne ograniczone fragmenty środowiska uruchomieniowego używają innej powierzchni:
- `agents.defaults.contextLimits.*`
- `agents.list[].contextLimits.*`
Ten podział utrzymuje rozmiar Skills oddzielnie od rozmiaru odczytu/wstrzykiwania runtime, takiego jak
`memory_get`, wyniki narzędzi na żywo i odświeżenia AGENTS.md po Compaction.
Ten podział oddziela rozmiar Skills od rozmiaru odczytu/wstrzykiwania środowiska uruchomieniowego
takiego jak `memory_get`, wyniki narzędzi na żywo i odświeżenia `AGENTS.md` po Compaction.
## Documentation
## Dokumentacja
Gdy to możliwe, prompt systemowy zawiera sekcję **Documentation**, która wskazuje
lokalny katalog dokumentacji OpenClaw (albo `docs/` w przestrzeni roboczej repozytorium, albo dokumentację
dołączonego pakietu npm) oraz wspomina też o publicznym mirrorze, repozytorium źródłowym, społecznościowym Discordzie i
Gdy jest dostępna, prompt systemowy zawiera sekcję **Dokumentacja**, która wskazuje
lokalny katalog dokumentacji OpenClaw (albo `docs/` w obszarze roboczym repozytorium, albo dokumentację
dołączoną do pakietu npm) oraz wspomina o publicznym lustrze, źródłowym repozytorium, społecznościowym Discordzie i
ClawHub ([https://clawhub.ai](https://clawhub.ai)) do odkrywania Skills. Prompt instruuje model, aby najpierw konsultował lokalną dokumentację
w sprawach zachowania, poleceń, konfiguracji lub architektury OpenClaw oraz aby
samodzielnie uruchamiał `openclaw status`, kiedy to możliwe (prosząc użytkownika tylko wtedy, gdy nie ma dostępu).
w sprawach dotyczących zachowania OpenClaw, poleceń, konfiguracji lub architektury oraz aby
sam uruchamiał `openclaw status`, gdy to możliwe (prosząc użytkownika tylko wtedy, gdy nie ma dostępu).

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -1,16 +1,16 @@
---
read_when:
- Tworzysz nowy Plugin kanału komunikatora
- Chcesz połączyć OpenClaw z platformą komunikacyjną
- Musisz zrozumieć powierzchnię adaptera ChannelPlugin
- Tworzysz nowy Plugin kanału wiadomości.
- Chcesz połączyć OpenClaw z platformą komunikacyjną.
- Musisz zrozumieć powierzchnię adaptera ChannelPlugin.
sidebarTitle: Channel Plugins
summary: Przewodnik krok po kroku dotyczący tworzenia Pluginu kanału komunikatora dla OpenClaw
summary: Przewodnik krok po kroku po tworzeniu Pluginu kanału wiadomości dla OpenClaw
title: Tworzenie Pluginów kanałów
x-i18n:
generated_at: "2026-04-15T19:41:36Z"
generated_at: "2026-04-18T09:34:53Z"
model: gpt-5.4
provider: openai
source_hash: 80e47e61d1e47738361692522b79aff276544446c58a7b41afe5296635dfad4b
source_hash: 3dda53c969bc7356a450c2a5bf49fb82bf1283c23e301dec832d8724b11e724b
source_path: plugins/sdk-channel-plugins.md
workflow: 15
---
@ -20,7 +20,7 @@ x-i18n:
Ten przewodnik przeprowadzi Cię przez tworzenie Pluginu kanału, który łączy OpenClaw z platformą komunikacyjną. Na końcu będziesz mieć działający kanał z zabezpieczeniami DM, parowaniem, wątkowaniem odpowiedzi i wiadomościami wychodzącymi.
<Info>
Jeśli nie tworzyłeś wcześniej żadnego Pluginu OpenClaw, najpierw przeczytaj
Jeśli nie tworzyłeś jeszcze żadnego Pluginu OpenClaw, najpierw przeczytaj
[Pierwsze kroki](/pl/plugins/building-plugins), aby poznać podstawową strukturę
pakietu i konfigurację manifestu.
</Info>
@ -30,62 +30,60 @@ Ten przewodnik przeprowadzi Cię przez tworzenie Pluginu kanału, który łączy
Pluginy kanałów nie potrzebują własnych narzędzi do wysyłania/edycji/reakcji. OpenClaw utrzymuje jedno współdzielone narzędzie `message` w rdzeniu. Twój Plugin odpowiada za:
- **Konfigurację** — rozpoznawanie konta i kreator konfiguracji
- **Bezpieczeństwo**zasady DM i listy dozwolonych
- **Bezpieczeństwo**politykę DM i listy dozwolonych
- **Parowanie** — przepływ zatwierdzania DM
- **Gramatykę sesji** — sposób, w jaki identyfikatory konwersacji specyficzne dla dostawcy są mapowane na czaty bazowe, identyfikatory wątków i zapasowe elementy nadrzędne
- **Gramatykę sesji** — sposób, w jaki specyficzne dla dostawcy identyfikatory konwersacji mapują się na czaty bazowe, identyfikatory wątków i rezerwowe elementy nadrzędne
- **Ruch wychodzący** — wysyłanie tekstu, multimediów i ankiet na platformę
- **Wątkowanie** — sposób wątkowania odpowiedzi
Rdzeń odpowiada za współdzielone narzędzie wiadomości, połączenie promptów, zewnętrzny kształt klucza sesji, ogólne księgowanie `:thread:` i dyspozycję.
Rdzeń odpowiada za współdzielone narzędzie wiadomości, podłączenie promptów, zewnętrzny kształt klucza sesji, ogólne śledzenie `:thread:` oraz dyspozycję.
Jeśli Twój kanał dodaje parametry narzędzia wiadomości, które przenoszą źródła multimediów, udostępnij te nazwy parametrów przez `describeMessageTool(...).mediaSourceParams`. Rdzeń używa tej jawnej listy do normalizacji ścieżek sandboxa i zasad dostępu do multimediów wychodzących, więc Pluginy nie potrzebują wyjątków w współdzielonym rdzeniu dla parametrów awatarów, załączników lub obrazów okładek specyficznych dla dostawcy.
Preferuj zwracanie mapy kluczowanej akcją, takiej jak
`{ "set-profile": ["avatarUrl", "avatarPath"] }`, aby niezwiązane akcje nie dziedziczyły argumentów multimediów innej akcji. Płaska tablica nadal działa dla parametrów, które celowo współdzielone przez każdą udostępnioną akcję.
Jeśli Twój kanał dodaje parametry narzędzia wiadomości, które przenoszą źródła multimediów, udostępnij te nazwy parametrów przez `describeMessageTool(...).mediaSourceParams`. Rdzeń używa tej jawnej listy do normalizacji ścieżek sandboxa i polityki dostępu do multimediów wychodzących, więc Pluginy nie potrzebują wyjątków we współdzielonym rdzeniu dla specyficznych dla dostawcy parametrów avatarów, załączników czy obrazów okładki.
Preferuj zwracanie mapy z kluczami akcji, takiej jak
`{ "set-profile": ["avatarUrl", "avatarPath"] }`, aby niepowiązane akcje nie dziedziczyły argumentów multimedialnych innej akcji. Płaska tablica nadal działa dla parametrów, które celowo współdzielone przez każdą udostępnioną akcję.
Jeśli Twoja platforma przechowuje dodatkowy zakres wewnątrz identyfikatorów konwersacji, zachowaj to parsowanie w Pluginie za pomocą `messaging.resolveSessionConversation(...)`. To jest kanoniczny hook do mapowania `rawId` na bazowy identyfikator konwersacji, opcjonalny identyfikator wątku, jawny `baseConversationId` i wszelkie `parentConversationCandidates`.
Gdy zwracasz `parentConversationCandidates`, zachowaj ich kolejność od najbardziej zawężonego elementu nadrzędnego do najszerszej/bazowej konwersacji.
Jeśli Twoja platforma przechowuje dodatkowy zakres w identyfikatorach konwersacji, zachowaj to parsowanie w Pluginie za pomocą `messaging.resolveSessionConversation(...)`. To kanoniczny hook do mapowania `rawId` na bazowy identyfikator konwersacji, opcjonalny identyfikator wątku, jawny `baseConversationId` oraz dowolne `parentConversationCandidates`.
Gdy zwracasz `parentConversationCandidates`, zachowaj ich kolejność od najwęższego elementu nadrzędnego do najszerszej/bazowej konwersacji.
Bundlowane Pluginy, które potrzebują tego samego parsowania przed uruchomieniem rejestru kanałów, mogą także udostępniać plik najwyższego poziomu `session-key-api.ts` z pasującym eksportem `resolveSessionConversation(...)`. Rdzeń używa tej bezpiecznej dla bootstrapu powierzchni tylko wtedy, gdy rejestr Pluginów środowiska uruchomieniowego nie jest jeszcze dostępny.
Bundlowane Pluginy, które potrzebują tego samego parsowania przed uruchomieniem rejestru kanałów, mogą też udostępniać plik najwyższego poziomu `session-key-api.ts` z pasującym eksportem `resolveSessionConversation(...)`. Rdzeń używa tej bezpiecznej dla bootstrapu powierzchni tylko wtedy, gdy rejestr Pluginów środowiska uruchomieniowego nie jest jeszcze dostępny.
`messaging.resolveParentConversationCandidates(...)` pozostaje dostępne jako starszy, zgodnościowy mechanizm zapasowy, gdy Plugin potrzebuje jedynie zapasowych elementów nadrzędnych ponad ogólnym/nieprzetworzonym identyfikatorem. Jeśli istnieją oba hooki, rdzeń najpierw używa
`resolveSessionConversation(...).parentConversationCandidates`, a do
`resolveParentConversationCandidates(...)` wraca tylko wtedy, gdy kanoniczny hook ich nie zwraca.
`messaging.resolveParentConversationCandidates(...)` pozostaje dostępne jako starszy, zgodnościowy mechanizm rezerwowy, gdy Plugin potrzebuje jedynie rezerwowych elementów nadrzędnych ponad ogólnym/surowym identyfikatorem. Jeśli istnieją oba hooki, rdzeń najpierw używa `resolveSessionConversation(...).parentConversationCandidates`, a do `resolveParentConversationCandidates(...)` wraca tylko wtedy, gdy kanoniczny hook ich nie zwraca.
## Zatwierdzenia i możliwości kanału
Większość Pluginów kanałów nie potrzebuje kodu specyficznego dla zatwierdzeń.
- Rdzeń odpowiada za `/approve` w tym samym czacie, współdzielone payloady przycisków zatwierdzeń i ogólne dostarczanie zapasowe.
- Preferuj pojedynczy obiekt `approvalCapability` na Pluginie kanału, gdy kanał potrzebuje zachowania specyficznego dla zatwierdzeń.
- `ChannelPlugin.approvals` zostało usunięte. Umieść fakty dotyczące dostarczania/natywności/renderowania/uwierzytelniania zatwierdzeń w `approvalCapability`.
- `plugin.auth` służy tylko do logowania/wylogowania; rdzeń nie odczytuje już hooków uwierzytelniania zatwierdzeń z tego obiektu.
- Rdzeń odpowiada za `/approve` w tym samym czacie, współdzielone ładunki przycisków zatwierdzania i ogólne dostarczanie rezerwowe.
- Preferuj pojedynczy obiekt `approvalCapability` w Pluginie kanału, gdy kanał potrzebuje zachowania specyficznego dla zatwierdzeń.
- `ChannelPlugin.approvals` zostało usunięte. Umieść informacje o dostarczaniu/renderowaniu/uwierzytelnianiu natywnych zatwierdzeń w `approvalCapability`.
- `plugin.auth` służy tylko do logowania/wylogowywania; rdzeń nie odczytuje już hooków uwierzytelniania zatwierdzeń z tego obiektu.
- `approvalCapability.authorizeActorAction` i `approvalCapability.getActionAvailabilityState` to kanoniczna powierzchnia uwierzytelniania zatwierdzeń.
- Użyj `approvalCapability.getActionAvailabilityState` do dostępności uwierzytelniania zatwierdzeń w tym samym czacie.
- Jeśli Twój kanał udostępnia natywne zatwierdzenia exec, użyj `approvalCapability.getExecInitiatingSurfaceState` dla stanu powierzchni inicjującej/klienta natywnego, gdy różni się on od uwierzytelniania zatwierdzeń w tym samym czacie. Rdzeń używa tego hooka specyficznego dla exec, aby odróżniać `enabled` od `disabled`, zdecydować, czy kanał inicjujący obsługuje natywne zatwierdzenia exec, i uwzględnić kanał we wskazówkach zapasowych dla klienta natywnego. `createApproverRestrictedNativeApprovalCapability(...)` wypełnia to dla typowego przypadku.
- Użyj `outbound.shouldSuppressLocalPayloadPrompt` lub `outbound.beforeDeliverPayload` dla zachowań cyklu życia payloadu specyficznych dla kanału, takich jak ukrywanie zduplikowanych lokalnych promptów zatwierdzeń lub wysyłanie wskaźników pisania przed dostarczeniem.
- Użyj `approvalCapability.delivery` tylko do natywnego trasowania zatwierdzeń lub wyłączania mechanizmu zapasowego.
- Użyj `approvalCapability.nativeRuntime` dla natywnych faktów zatwierdzeń należących do kanału. Zachowaj leniwe ładowanie dla gorących entrypointów kanału za pomocą `createLazyChannelApprovalNativeRuntimeAdapter(...)`, które może importować moduł runtime na żądanie, jednocześnie pozwalając rdzeniowi złożyć cykl życia zatwierdzenia.
- Użyj `approvalCapability.render` tylko wtedy, gdy kanał naprawdę potrzebuje niestandardowych payloadów zatwierdzeń zamiast współdzielonego renderera.
- Użyj `approvalCapability.describeExecApprovalSetup`, gdy kanał chce, aby odpowiedź na ścieżce wyłączonej wyjaśniała dokładne przełączniki konfiguracyjne potrzebne do włączenia natywnych zatwierdzeń exec. Hook otrzymuje `{ channel, channelLabel, accountId }`; kanały z nazwanymi kontami powinny renderować ścieżki o zakresie konta, takie jak `channels.<channel>.accounts.<id>.execApprovals.*`, zamiast domyślnych ścieżek najwyższego poziomu.
- Jeśli kanał może wywnioskować stabilne tożsamości typu właściciela DM z istniejącej konfiguracji, użyj `createResolvedApproverActionAuthAdapter` z `openclaw/plugin-sdk/approval-runtime`, aby ograniczyć `/approve` w tym samym czacie bez dodawania logiki specyficznej dla zatwierdzeń w rdzeniu.
- Jeśli kanał potrzebuje natywnego dostarczania zatwierdzeń, utrzymuj kod kanału skupiony na normalizacji celu oraz faktach dotyczących transportu/prezentacji. Użyj `createChannelExecApprovalProfile`, `createChannelNativeOriginTargetResolver`, `createChannelApproverDmTargetResolver` i `createApproverRestrictedNativeApprovalCapability` z `openclaw/plugin-sdk/approval-runtime`. Umieść fakty specyficzne dla kanału za `approvalCapability.nativeRuntime`, najlepiej przez `createChannelApprovalNativeRuntimeAdapter(...)` lub `createLazyChannelApprovalNativeRuntimeAdapter(...)`, aby rdzeń mógł złożyć handler i przejąć filtrowanie żądań, trasowanie, deduplikację, wygasanie, subskrypcję Gateway oraz powiadomienia o przekierowaniu gdzie indziej. `nativeRuntime` jest podzielone na kilka mniejszych powierzchni:
- `availability` — czy konto jest skonfigurowane i czy żądanie powinno zostać obsłużone
- `presentation` — mapowanie współdzielonego modelu widoku zatwierdzenia na oczekujące/rozwiązane/wygasłe natywne payloady lub działania końcowe
- `transport` — przygotowywanie celów oraz wysyłanie/aktualizowanie/usuwanie natywnych wiadomości zatwierdzeń
- Używaj `approvalCapability.getActionAvailabilityState` do dostępności uwierzytelniania zatwierdzeń w tym samym czacie.
- Jeśli Twój kanał udostępnia natywne zatwierdzenia wykonania, użyj `approvalCapability.getExecInitiatingSurfaceState` dla stanu powierzchni inicjującej/natywnego klienta, gdy różni się on od uwierzytelniania zatwierdzeń w tym samym czacie. Rdzeń używa tego hooka specyficznego dla wykonania, aby odróżniać `enabled` od `disabled`, decydować, czy kanał inicjujący obsługuje natywne zatwierdzenia wykonania, oraz uwzględniać kanał w wskazówkach dotyczących natywnego klienta jako rozwiązania rezerwowego. `createApproverRestrictedNativeApprovalCapability(...)` wypełnia to dla typowego przypadku.
- Używaj `outbound.shouldSuppressLocalPayloadPrompt` lub `outbound.beforeDeliverPayload` dla zachowań cyklu życia ładunku specyficznych dla kanału, takich jak ukrywanie zduplikowanych lokalnych promptów zatwierdzenia lub wysyłanie wskaźników pisania przed dostarczeniem.
- Używaj `approvalCapability.delivery` tylko do routingu natywnych zatwierdzeń lub wyłączania dostarczania rezerwowego.
- Używaj `approvalCapability.nativeRuntime` dla faktów dotyczących natywnych zatwierdzeń należących do kanału. Zachowaj leniwe ładowanie na gorących punktach wejścia kanału za pomocą `createLazyChannelApprovalNativeRuntimeAdapter(...)`, który może importować Twój moduł środowiska uruchomieniowego na żądanie, a jednocześnie pozwalać rdzeniowi składać cykl życia zatwierdzenia.
- Używaj `approvalCapability.render` tylko wtedy, gdy kanał naprawdę potrzebuje niestandardowych ładunków zatwierdzeń zamiast współdzielonego renderera.
- Używaj `approvalCapability.describeExecApprovalSetup`, gdy kanał chce, aby odpowiedź na ścieżce wyłączonej wyjaśniała dokładne pokrętła konfiguracyjne potrzebne do włączenia natywnych zatwierdzeń wykonania. Hook otrzymuje `{ channel, channelLabel, accountId }`; kanały z nazwanymi kontami powinny renderować ścieżki o zakresie konta, takie jak `channels.<channel>.accounts.<id>.execApprovals.*`, zamiast domyślnych ścieżek najwyższego poziomu.
- Jeśli kanał potrafi wywnioskować stabilne tożsamości DM podobne do właściciela z istniejącej konfiguracji, użyj `createResolvedApproverActionAuthAdapter` z `openclaw/plugin-sdk/approval-runtime`, aby ograniczyć `/approve` w tym samym czacie bez dodawania do rdzenia logiki specyficznej dla zatwierdzeń.
- Jeśli kanał potrzebuje natywnego dostarczania zatwierdzeń, utrzymuj kod kanału skupiony na normalizacji celu oraz faktach dotyczących transportu/prezentacji. Użyj `createChannelExecApprovalProfile`, `createChannelNativeOriginTargetResolver`, `createChannelApproverDmTargetResolver` i `createApproverRestrictedNativeApprovalCapability` z `openclaw/plugin-sdk/approval-runtime`. Umieść fakty specyficzne dla kanału za `approvalCapability.nativeRuntime`, najlepiej przez `createChannelApprovalNativeRuntimeAdapter(...)` lub `createLazyChannelApprovalNativeRuntimeAdapter(...)`, aby rdzeń mógł złożyć handler i przejąć filtrowanie żądań, routing, deduplikację, wygasanie, subskrypcję Gateway oraz powiadomienia o przekierowaniu. `nativeRuntime` jest podzielone na kilka mniejszych powierzchni:
- `availability` — czy konto jest skonfigurowane i czy żądanie powinno być obsłużone
- `presentation` — mapowanie współdzielonego modelu widoku zatwierdzeń na oczekujące/rozwiązane/wygasłe natywne ładunki lub końcowe akcje
- `transport` — przygotowanie celów oraz wysyłanie/aktualizowanie/usuwanie natywnych wiadomości zatwierdzeń
- `interactions` — opcjonalne hooki bind/unbind/clear-action dla natywnych przycisków lub reakcji
- `observe` — opcjonalne hooki diagnostyki dostarcz
- Jeśli kanał potrzebuje obiektów należących do runtime, takich jak klient, token, aplikacja Bolt lub odbiornik Webhooków, zarejestruj je przez `openclaw/plugin-sdk/channel-runtime-context`. Ogólny rejestr kontekstu runtime pozwala rdzeniowi uruchamiać handlery sterowane możliwościami na podstawie stanu uruchomienia kanału bez dodawania kodu opakowującego specyficznego dla zatwierdzeń.
- Sięgaj po niższopoziomowe `createChannelApprovalHandler` lub `createChannelNativeApprovalRuntime` tylko wtedy, gdy powierzchnia oparta na możliwościach nie jest jeszcze wystarczająco ekspresyjna.
- Kanały natywnych zatwierdzeń muszą trasować zarówno `accountId`, jak i `approvalKind` przez te helpery. `accountId` utrzymuje zasady zatwierdzeń wielu kont w odpowiednim zakresie konta bota, a `approvalKind` utrzymuje zachowanie zatwierdzeń exec vs Plugin dostępne dla kanału bez zakodowanych na sztywno rozgałęzień w rdzeniu.
- Rdzeń odpowiada teraz również za powiadomienia o przekierowaniu zatwierdzeń. Pluginy kanałów nie powinny wysyłać własnych wiadomości uzupełniających typu „zatwierdzenie trafiło do DM / innego kanału” z `createChannelNativeApprovalRuntime`; zamiast tego udostępnij dokładne trasowanie pochodzenia + DM osoby zatwierdzającej przez współdzielone helpery możliwości zatwierdzeń i pozwól rdzeniowi agregować rzeczywiste dostarczenia przed opublikowaniem powiadomienia z powrotem do czatu inicjującego.
- Zachowuj typ identyfikatora dostarczonego zatwierdzenia od początku do końca. Klienci natywni nie powinni zgadywać ani przepisywać trasowania zatwierdzeń exec vs Plugin na podstawie lokalnego stanu kanału.
- Różne typy zatwierdzeń mogą celowo udostępniać różne powierzchnie natywne.
- `observe` — opcjonalne hooki diagnostyki dostarczania
- Jeśli kanał potrzebuje obiektów należących do środowiska uruchomieniowego, takich jak klient, token, aplikacja Bolt lub odbiornik Webhooków, zarejestruj je przez `openclaw/plugin-sdk/channel-runtime-context`. Ogólny rejestr kontekstu środowiska uruchomieniowego pozwala rdzeniowi uruchamiać handlery sterowane możliwościami na podstawie stanu startowego kanału bez dodawania kleju opakowującego specyficznego dla zatwierdzeń.
- Sięgaj po niższopoziomowe `createChannelApprovalHandler` lub `createChannelNativeApprovalRuntime` tylko wtedy, gdy powierzchnia sterowana możliwościami nie jest jeszcze wystarczająco ekspresyjna.
- Kanały natywnych zatwierdzeń muszą kierować zarówno `accountId`, jak i `approvalKind` przez te helpery. `accountId` utrzymuje politykę zatwierdzeń dla wielu kont w zakresie właściwego konta bota, a `approvalKind` utrzymuje dostępność zachowania zatwierdzeń wykonania vs zatwierdzeń Pluginu dla kanału bez zakodowanych na stałe gałęzi w rdzeniu.
- Rdzeń odpowiada teraz także za powiadomienia o przekierowaniu zatwierdzeń. Pluginy kanałów nie powinny wysyłać własnych wiadomości uzupełniających typu „zatwierdzenie trafiło do DM / innego kanału” z `createChannelNativeApprovalRuntime`; zamiast tego udostępnij dokładny routing pochodzenia + DM zatwierdzającego przez współdzielone helpery możliwości zatwierdzeń i pozwól rdzeniowi agregować rzeczywiste dostarczenia przed opublikowaniem jakiegokolwiek powiadomienia z powrotem do czatu inicjującego.
- Zachowuj typ dostarczonego identyfikatora zatwierdzenia end-to-end. Natywni klienci nie powinni zgadywać ani przepisywać routingu zatwierdzeń wykonania vs zatwierdzeń Pluginu na podstawie stanu lokalnego kanału.
- Różne rodzaje zatwierdzeń mogą celowo udostępniać różne natywne powierzchnie.
Obecne przykłady bundlowane:
- Slack zachowuje natywne trasowanie zatwierdzeń dostępne zarówno dla identyfikatorów exec, jak i Plugin.
- Matrix zachowuje to samo natywne trasowanie DM/kanału i UX reakcji dla zatwierdzeń exec i Plugin, jednocześnie nadal pozwalając, by uwierzytelnianie różniło się w zależności od typu zatwierdzenia.
- `createApproverRestrictedNativeApprovalAdapter` nadal istnieje jako opakowanie zgodnościowe, ale nowy kod powinien preferować konstruktor możliwości i udostępniać `approvalCapability` w Pluginie.
- Slack zachowuje dostępność natywnego routingu zatwierdzeń zarówno dla identyfikatorów wykonania, jak i Pluginu.
- Matrix zachowuje ten sam natywny routing DM/kanału i UX reakcji dla zatwierdzeń wykonania i Pluginu, jednocześnie nadal pozwalając, aby uwierzytelnianie różniło się w zależności od rodzaju zatwierdzenia.
- `createApproverRestrictedNativeApprovalAdapter` nadal istnieje jako opakowanie zgodnościowe, ale nowy kod powinien preferować kreator możliwości i udostępniać `approvalCapability` w Pluginie.
Dla gorących entrypointów kanału preferuj węższe podścieżki runtime, gdy potrzebujesz tylko jednej części tej rodziny:
Dla gorących punktów wejścia kanału preferuj węższe podścieżki środowiska uruchomieniowego, gdy potrzebujesz tylko jednej części tej rodziny:
- `openclaw/plugin-sdk/approval-auth-runtime`
- `openclaw/plugin-sdk/approval-client-runtime`
@ -102,81 +100,80 @@ Podobnie preferuj `openclaw/plugin-sdk/setup-runtime`,
`openclaw/plugin-sdk/reply-runtime`,
`openclaw/plugin-sdk/reply-dispatch-runtime`,
`openclaw/plugin-sdk/reply-reference` i
`openclaw/plugin-sdk/reply-chunking`, gdy nie potrzebujesz szerszej, zbiorczej
powierzchni.
`openclaw/plugin-sdk/reply-chunking`, gdy nie potrzebujesz szerszej powierzchni parasolowej.
Konkretnie dla konfiguracji:
- `openclaw/plugin-sdk/setup-runtime` obejmuje bezpieczne dla runtime helpery konfiguracji:
adaptery patchowania konfiguracji bezpieczne importowo (`createPatchedAccountSetupAdapter`,
- `openclaw/plugin-sdk/setup-runtime` obejmuje bezpieczne dla środowiska uruchomieniowego helpery konfiguracji:
bezpieczne importowo adaptery łatania konfiguracji (`createPatchedAccountSetupAdapter`,
`createEnvPatchedAccountSetupAdapter`,
`createSetupInputPresenceValidator`), wyjście notatek wyszukiwania,
`promptResolvedAllowFrom`, `splitSetupEntries` i delegowane
konstruktory proxy konfiguracji
- `openclaw/plugin-sdk/setup-adapter-runtime` to wąska powierzchnia adaptera świadoma env
dla `createEnvPatchedAccountSetupAdapter`
- `openclaw/plugin-sdk/channel-setup` obejmuje konstruktory konfiguracji opcjonalnej instalacji
oraz kilka prymitywów bezpiecznych dla konfiguracji:
`promptResolvedAllowFrom`, `splitSetupEntries` oraz delegowane
kreatory proxy konfiguracji
- `openclaw/plugin-sdk/setup-adapter-runtime` to wąska powierzchnia adaptera
świadoma środowiska dla `createEnvPatchedAccountSetupAdapter`
- `openclaw/plugin-sdk/channel-setup` obejmuje kreatory konfiguracji
opcjonalnej instalacji oraz kilka bezpiecznych dla konfiguracji prymitywów:
`createOptionalChannelSetupSurface`, `createOptionalChannelSetupAdapter`,
Jeśli Twój kanał obsługuje konfigurację lub uwierzytelnianie sterowane przez env i ogólne przepływy uruchamiania/konfiguracji powinny znać te nazwy env jeszcze przed załadowaniem runtime, zadeklaruj je w manifeście Pluginu za pomocą `channelEnvVars`. Zachowaj `envVars` runtime kanału lub lokalne stałe tylko dla kopii przeznaczonej dla operatora.
Jeśli Twój kanał obsługuje konfigurację lub uwierzytelnianie sterowane zmiennymi środowiskowymi i ogólne przepływy uruchamiania/konfiguracji powinny znać te nazwy zmiennych środowiskowych przed załadowaniem środowiska uruchomieniowego, zadeklaruj je w manifeście Pluginu za pomocą `channelEnvVars`. Zachowaj środowiskouruchomieniowe `envVars` kanału lub lokalne stałe tylko dla kopii przeznaczonej dla operatora.
`createOptionalChannelSetupWizard`, `DEFAULT_ACCOUNT_ID`,
`createTopLevelChannelDmPolicy`, `setSetupChannelEnabled` i
`splitSetupEntries`
- używaj szerszej powierzchni `openclaw/plugin-sdk/setup` tylko wtedy, gdy potrzebujesz również
cięższych współdzielonych helperów konfiguracji/ustawień, takich jak
- używaj szerszej powierzchni `openclaw/plugin-sdk/setup` tylko wtedy, gdy potrzebujesz także
cięższych współdzielonych helperów konfiguracji, takich jak
`moveSingleAccountChannelSectionToDefaultAccount(...)`
Jeśli Twój kanał chce jedynie komunikować na powierzchniach konfiguracji „najpierw zainstaluj ten Plugin”, preferuj `createOptionalChannelSetupSurface(...)`. Wygenerowany adapter/kreator domyślnie odmawia zapisu konfiguracji i finalizacji, a także ponownie wykorzystuje ten sam komunikat wymagający instalacji w walidacji, finalizacji i treści z linkiem do dokumentacji.
Jeśli Twój kanał chce jedynie reklamować „najpierw zainstaluj ten Plugin” na powierzchniach konfiguracji, preferuj `createOptionalChannelSetupSurface(...)`. Wygenerowany adapter/kreator domyślnie blokuje zapisy konfiguracji i finalizację, a także ponownie wykorzystuje ten sam komunikat o wymaganej instalacji w walidacji, finalizacji i kopii linku do dokumentacji.
Dla innych gorących ścieżek kanału preferuj wąskie helpery zamiast szerszych starszych powierzchni:
- `openclaw/plugin-sdk/account-core`,
`openclaw/plugin-sdk/account-id`,
`openclaw/plugin-sdk/account-resolution` i
`openclaw/plugin-sdk/account-helpers` dla konfiguracji wielu kont i
zapasowego przejścia do konta domyślnego
`openclaw/plugin-sdk/account-helpers` do konfiguracji wielu kont i
rezerwowego konta domyślnego
- `openclaw/plugin-sdk/inbound-envelope` i
`openclaw/plugin-sdk/inbound-reply-dispatch` dla tras/kopert przychodzących oraz
połączenia zapisywania i dyspozycji
- `openclaw/plugin-sdk/messaging-targets` dla parsowania/dopasowywania celów
`openclaw/plugin-sdk/inbound-reply-dispatch` do routingu/koperty wejściowej oraz
okablowania rejestracji i dyspozycji
- `openclaw/plugin-sdk/messaging-targets` do parsowania/dopasowywania celów
- `openclaw/plugin-sdk/outbound-media` i
`openclaw/plugin-sdk/outbound-runtime` dla ładowania multimediów oraz delegatów
tożsamości/wysyłki ruchu wychodzącego
- `openclaw/plugin-sdk/thread-bindings-runtime` dla cyklu życia powiązań wątków
`openclaw/plugin-sdk/outbound-runtime` do ładowania multimediów oraz delegatów
tożsamości/wysyłania ruchu wychodzącego
- `openclaw/plugin-sdk/thread-bindings-runtime` do cyklu życia powiązań wątków
i rejestracji adapterów
- `openclaw/plugin-sdk/agent-media-payload` tylko wtedy, gdy nadal wymagany jest
starszy układ pól payloadu agenta/multimediów
- `openclaw/plugin-sdk/telegram-command-config` dla normalizacji niestandardowych poleceń Telegram,
walidacji duplikatów/konfliktów oraz kontraktu konfiguracji poleceń
stabilnego względem mechanizmu zapasowego
- `openclaw/plugin-sdk/agent-media-payload` tylko wtedy, gdy nadal wymagany
jest starszy układ pól ładunku agenta/multimediów
- `openclaw/plugin-sdk/telegram-command-config` do normalizacji niestandardowych poleceń Telegram, walidacji duplikatów/konfliktów i umowy konfiguracji poleceń stabilnej wobec mechanizmu rezerwowego
Kanały tylko z uwierzytelnianiem zwykle mogą zakończyć na ścieżce domyślnej: rdzeń obsługuje zatwierdzenia, a Plugin jedynie udostępnia możliwości ruchu wychodzącego/uwierzytelniania. Kanały natywnych zatwierdzeń, takie jak Matrix, Slack, Telegram i niestandardowe transporty czatu, powinny używać współdzielonych helperów natywnych zamiast implementować własny cykl życia zatwierdzeń.
Kanały tylko z uwierzytelnianiem zwykle mogą zakończyć na ścieżce domyślnej: rdzeń obsługuje zatwierdzenia, a Plugin jedynie udostępnia możliwości outbound/auth. Kanały natywnych zatwierdzeń, takie jak Matrix, Slack, Telegram i niestandardowe transporty czatu, powinny używać współdzielonych helperów natywnych zamiast implementować własny cykl życia zatwierdzeń.
## Zasady wzmianek przychodzących
## Polityka wzmianek przychodzących
Obsługę wzmianek przychodzących utrzymuj podzieloną na dwie warstwy:
Obsługę przychodzących wzmianek utrzymuj rozdzieloną na dwie warstwy:
- gromadzenie danych należące do Pluginu
- współdzielone ocenianie zasad
- współdzielona ocena polityki
Dla warstwy współdzielonej użyj `openclaw/plugin-sdk/channel-inbound`.
Do decyzji dotyczących polityki wzmianek używaj `openclaw/plugin-sdk/channel-mention-gating`.
Z `openclaw/plugin-sdk/channel-inbound` korzystaj tylko wtedy, gdy potrzebujesz
szerszego zbioru helperów dla ruchu przychodzącego.
Dobrze pasuje do logiki lokalnej dla Pluginu:
Dobrze pasuje do lokalnej logiki Pluginu:
- wykrywanie odpowiedzi do bota
- wykrywanie cytatu bota
- sprawdzanie udziału w wątku
- wykluczenia wiadomości usługowych/systemowych
- sprawdzanie udziału we wątku
- wykluczanie wiadomości serwisowych/systemowych
- natywne dla platformy cache potrzebne do potwierdzenia udziału bota
Dobrze pasuje do współdzielonego helpera:
- `requireMention`
- jawny wynik wzmianki
- lista dozwolonych niejawnych wzmianek
- obejście poleceń
- lista dozwolonych domyślnych wzmianek
- obejście dla poleceń
- ostateczna decyzja o pominięciu
Preferowany przepływ:
@ -223,7 +220,7 @@ if (decision.shouldSkip) return;
```
`api.runtime.channel.mentions` udostępnia te same współdzielone helpery wzmianek dla
bundlowanych Pluginów kanałów, które już zależą od wstrzykiwania runtime:
bundlowanych Pluginów kanałów, które już zależą od wstrzykiwania środowiska uruchomieniowego:
- `buildMentionRegexes`
- `matchesMentionPatterns`
@ -231,18 +228,23 @@ bundlowanych Pluginów kanałów, które już zależą od wstrzykiwania runtime:
- `implicitMentionKindWhen`
- `resolveInboundMentionDecision`
Jeśli potrzebujesz tylko `implicitMentionKindWhen` i
`resolveInboundMentionDecision`, importuj z
`openclaw/plugin-sdk/channel-mention-gating`, aby uniknąć ładowania niepowiązanych
helperów środowiska uruchomieniowego dla ruchu przychodzącego.
Starsze helpery `resolveMentionGating*` pozostają w
`openclaw/plugin-sdk/channel-inbound` jedynie jako eksporty zgodnościowe. Nowy kod
`openclaw/plugin-sdk/channel-inbound` wyłącznie jako eksporty zgodnościowe. Nowy kod
powinien używać `resolveInboundMentionDecision({ facts, policy })`.
## Przewodnik
## Przewodnik krok po kroku
<Steps>
<a id="step-1-package-and-manifest"></a>
<Step title="Pakiet i manifest">
Utwórz standardowe pliki Pluginu. Pole `channel` w `package.json` to
właśnie to, co sprawia, że jest to Plugin kanału. Pełną powierzchnię metadanych pakietu
znajdziesz w [Konfiguracja Pluginu i Config](/pl/plugins/sdk-setup#openclaw-channel):
Utwórz standardowe pliki Pluginu. Pole `channel` w `package.json`
sprawia, że jest to Plugin kanału. Pełny opis powierzchni metadanych pakietu
znajdziesz w [Konfiguracja i setup Pluginu](/pl/plugins/sdk-setup#openclaw-channel):
<CodeGroup>
```json package.json
@ -256,7 +258,7 @@ powinien używać `resolveInboundMentionDecision({ facts, policy })`.
"channel": {
"id": "acme-chat",
"label": "Acme Chat",
"blurb": "Połącz OpenClaw z Acme Chat."
"blurb": "Connect OpenClaw to Acme Chat."
}
}
}
@ -268,7 +270,7 @@ powinien używać `resolveInboundMentionDecision({ facts, policy })`.
"kind": "channel",
"channels": ["acme-chat"],
"name": "Acme Chat",
"description": "Plugin kanału Acme Chat",
"description": "Acme Chat channel plugin",
"configSchema": {
"type": "object",
"additionalProperties": false,
@ -293,7 +295,7 @@ powinien używać `resolveInboundMentionDecision({ facts, policy })`.
<Step title="Zbuduj obiekt Pluginu kanału">
Interfejs `ChannelPlugin` ma wiele opcjonalnych powierzchni adapterów. Zacznij od
minimum — `id` i `setup` — i dodawaj adaptery w razie potrzeby.
minimum — `id` i `setup` — i dodawaj adaptery w miarę potrzeb.
Utwórz `src/channel.ts`:
@ -303,7 +305,7 @@ powinien używać `resolveInboundMentionDecision({ facts, policy })`.
createChannelPluginBase,
} from "openclaw/plugin-sdk/channel-core";
import type { OpenClawConfig } from "openclaw/plugin-sdk/channel-core";
import { acmeChatApi } from "./client.js"; // klient API Twojej platformy
import { acmeChatApi } from "./client.js"; // your platform API client
type ResolvedAccount = {
accountId: string | null;
@ -344,7 +346,7 @@ powinien używać `resolveInboundMentionDecision({ facts, policy })`.
},
}),
// Bezpieczeństwo DM: kto może wysyłać wiadomości do bota
// DM security: who can message the bot
security: {
dm: {
channelKey: "acme-chat",
@ -354,21 +356,21 @@ powinien używać `resolveInboundMentionDecision({ facts, policy })`.
},
},
// Parowanie: przepływ zatwierdzania dla nowych kontaktów DM
// Pairing: approval flow for new DM contacts
pairing: {
text: {
idLabel: "Nazwa użytkownika Acme Chat",
message: "Wyślij ten kod, aby zweryfikować swoją tożsamość:",
idLabel: "Acme Chat username",
message: "Send this code to verify your identity:",
notify: async ({ target, code }) => {
await acmeChatApi.sendDm(target, `Pairing code: ${code}`);
},
},
},
// Wątkowanie: sposób dostarczania odpowiedzi
// Threading: how replies are delivered
threading: { topLevelReplyToMode: "reply" },
// Ruch wychodzący: wysyłanie wiadomości na platformę
// Outbound: send messages to the platform
outbound: {
attachedResults: {
sendText: async (params) => {
@ -389,17 +391,17 @@ powinien używać `resolveInboundMentionDecision({ facts, policy })`.
```
<Accordion title="Co robi za Ciebie createChatChannelPlugin">
Zamiast ręcznie implementować niskopoziomowe interfejsy adapterów,
przekazujesz deklaratywne opcje, a konstruktor składa je razem:
Zamiast ręcznie implementować niskopoziomowe interfejsy adapterów, przekazujesz
deklaratywne opcje, a kreator składa je razem:
| Opcja | Co podłącza |
| --- | --- |
| `security.dm` | Resolver bezpieczeństwa DM o zakresie z pól config |
| `pairing.text` | Przepływ parowania DM oparty na tekście z wymianą kodu |
| `threading` | Resolver trybu odpowiedzi (stały, o zakresie konta lub niestandardowy) |
| `outbound.attachedResults` | Funkcje wysyłania, które zwracają metadane wyniku (identyfikatory wiadomości) |
| `security.dm` | Ograniczony zakresem resolver zabezpieczeń DM na podstawie pól konfiguracji |
| `pairing.text` | Tekstowy przepływ parowania DM z wymianą kodu |
| `threading` | Resolver trybu odpowiedzi (stały, ograniczony do konta lub niestandardowy) |
| `outbound.attachedResults` | Funkcje wysyłania zwracające metadane wyniku (identyfikatory wiadomości) |
Możesz też przekazać surowe obiekty adapterów zamiast deklaratywnych opcji,
Możesz też przekazać surowe obiekty adapterów zamiast opcji deklaratywnych,
jeśli potrzebujesz pełnej kontroli.
</Accordion>
@ -415,20 +417,20 @@ powinien używać `resolveInboundMentionDecision({ facts, policy })`.
export default defineChannelPluginEntry({
id: "acme-chat",
name: "Acme Chat",
description: "Plugin kanału Acme Chat",
description: "Acme Chat channel plugin",
plugin: acmeChatPlugin,
registerCliMetadata(api) {
api.registerCli(
({ program }) => {
program
.command("acme-chat")
.description("Zarządzanie Acme Chat");
.description("Acme Chat management");
},
{
descriptors: [
{
name: "acme-chat",
description: "Zarządzanie Acme Chat",
description: "Acme Chat management",
hasSubcommands: false,
},
],
@ -441,21 +443,21 @@ powinien używać `resolveInboundMentionDecision({ facts, policy })`.
});
```
Umieść deskryptory CLI należące do kanału w `registerCliMetadata(...)`, aby OpenClaw
mógł pokazywać je w głównej pomocy bez aktywowania pełnego runtime kanału,
podczas gdy zwykłe pełne ładowania nadal pobiorą te same deskryptory do rzeczywistej
rejestracji poleceń. `registerFull(...)` zachowaj dla pracy wyłącznie w runtime.
Umieszczaj deskryptory CLI należące do kanału w `registerCliMetadata(...)`, aby OpenClaw
mógł wyświetlać je w głównej pomocy bez aktywowania pełnego środowiska uruchomieniowego kanału,
podczas gdy zwykłe pełne ładowania nadal przechwytują te same deskryptory do rzeczywistej rejestracji poleceń.
Zachowaj `registerFull(...)` dla pracy wyłącznie środowiska uruchomieniowego.
Jeśli `registerFull(...)` rejestruje metody RPC Gateway, użyj
prefiksu specyficznego dla Pluginu. Przestrzenie nazw administracyjnych rdzenia (`config.*`,
prefiksu specyficznego dla Pluginu. Przestrzenie nazw administratora rdzenia (`config.*`,
`exec.approvals.*`, `wizard.*`, `update.*`) pozostają zarezerwowane i zawsze
są rozwiązywane do `operator.admin`.
`defineChannelPluginEntry` automatycznie obsługuje podział trybów rejestracji. Zobacz
`defineChannelPluginEntry` automatycznie obsługuje ten podział trybu rejestracji. Zobacz
[Punkty wejścia](/pl/plugins/sdk-entrypoints#definechannelpluginentry), aby poznać wszystkie
opcje.
</Step>
<Step title="Dodaj wpis konfiguracji">
<Step title="Dodaj punkt wejścia konfiguracji">
Utwórz `setup-entry.ts` do lekkiego ładowania podczas onboardingu:
```typescript setup-entry.ts
@ -466,32 +468,32 @@ powinien używać `resolveInboundMentionDecision({ facts, policy })`.
```
OpenClaw ładuje to zamiast pełnego punktu wejścia, gdy kanał jest wyłączony
lub nieskonfigurowany. Pozwala to uniknąć wciągania ciężkiego kodu runtime podczas przepływów konfiguracji.
Szczegóły znajdziesz w [Konfiguracja i Config](/pl/plugins/sdk-setup#setup-entry).
lub nieskonfigurowany. Pozwala to uniknąć wciągania ciężkiego kodu środowiska uruchomieniowego podczas przepływów konfiguracji.
Szczegóły znajdziesz w [Konfiguracja i setup](/pl/plugins/sdk-setup#setup-entry).
Bundlowane kanały workspace, które rozdzielają eksporty bezpieczne dla konfiguracji do modułów
pomocniczych, mogą używać `defineBundledChannelSetupEntry(...)` z
`openclaw/plugin-sdk/channel-entry-contract`, gdy potrzebują także
jawnego settera runtime dla czasu konfiguracji.
jawnego settera środowiska uruchomieniowego na czas konfiguracji.
</Step>
<Step title="Obsłuż wiadomości przychodzące">
Twój Plugin musi odbierać wiadomości z platformy i przekazywać je do
OpenClaw. Typowy wzorzec to Webhook, który weryfikuje żądanie i
przekazuje je przez handler przychodzący Twojego kanału:
przekazuje je przez handler ruchu przychodzącego Twojego kanału:
```typescript
registerFull(api) {
api.registerHttpRoute({
path: "/acme-chat/webhook",
auth: "plugin", // uwierzytelnianie zarządzane przez Plugin (samodzielnie zweryfikuj podpisy)
auth: "plugin", // plugin-managed auth (verify signatures yourself)
handler: async (req, res) => {
const event = parseWebhookPayload(req);
// Twój handler przychodzący przekazuje wiadomość do OpenClaw.
// Dokładne podłączenie zależy od SDK Twojej platformy
// zobacz rzeczywisty przykład w bundlowanym pakiecie Pluginu Microsoft Teams lub Google Chat.
// Your inbound handler dispatches the message to OpenClaw.
// The exact wiring depends on your platform SDK
// see a real example in the bundled Microsoft Teams or Google Chat plugin package.
await handleAcmeChatInbound(api, event);
res.statusCode = 200;
@ -504,22 +506,22 @@ powinien używać `resolveInboundMentionDecision({ facts, policy })`.
<Note>
Obsługa wiadomości przychodzących jest specyficzna dla kanału. Każdy Plugin kanału
posiada własny potok przychodzący. Zobacz bundlowane Pluginy kanałów
ma własny potok ruchu przychodzącego. Zobacz bundlowane Pluginy kanałów
(na przykład pakiet Pluginu Microsoft Teams lub Google Chat), aby poznać rzeczywiste wzorce.
</Note>
</Step>
<a id="step-6-test"></a>
<Step title="Test">
Pisz testy współlokowane w `src/channel.test.ts`:
<Step title="Testy">
Pisz współlokowane testy w `src/channel.test.ts`:
```typescript src/channel.test.ts
import { describe, it, expect } from "vitest";
import { acmeChatPlugin } from "./channel.js";
describe("plugin acme-chat", () => {
it("rozpoznaje konto na podstawie config", () => {
describe("acme-chat plugin", () => {
it("resolves account from config", () => {
const cfg = {
channels: {
"acme-chat": { token: "test-token", allowFrom: ["user1"] },
@ -529,7 +531,7 @@ Pisz testy współlokowane w `src/channel.test.ts`:
expect(account.token).toBe("test-token");
});
it("sprawdza konto bez materializowania sekretów", () => {
it("inspects account without materializing secrets", () => {
const cfg = {
channels: { "acme-chat": { token: "test-token" } },
} as any;
@ -538,7 +540,7 @@ Pisz testy współlokowane w `src/channel.test.ts`:
expect(result.tokenStatus).toBe("available");
});
it("zgłasza brakujący config", () => {
it("reports missing config", () => {
const cfg = { channels: {} } as any;
const result = acmeChatPlugin.setup!.inspectAccount!(cfg, undefined);
expect(result.configured).toBe(false);
@ -550,7 +552,7 @@ Pisz testy współlokowane w `src/channel.test.ts`:
pnpm test -- <bundled-plugin-root>/acme-chat/
```
Informacje o współdzielonych helperach testowych znajdziesz w sekcji [Testowanie](/pl/plugins/sdk-testing).
W przypadku współdzielonych helperów testowych zobacz [Testowanie](/pl/plugins/sdk-testing).
</Step>
</Steps>
@ -560,31 +562,31 @@ Pisz testy współlokowane w `src/channel.test.ts`:
```
<bundled-plugin-root>/acme-chat/
├── package.json # metadane openclaw.channel
├── openclaw.plugin.json # Manifest z schematem config
├── openclaw.plugin.json # Manifest ze schematem konfiguracji
├── index.ts # defineChannelPluginEntry
├── setup-entry.ts # defineSetupPluginEntry
├── api.ts # Eksporty publiczne (opcjonalnie)
├── runtime-api.ts # Eksporty wewnętrznego runtime (opcjonalnie)
├── runtime-api.ts # Wewnętrzne eksporty środowiska uruchomieniowego (opcjonalnie)
└── src/
├── channel.ts # ChannelPlugin przez createChatChannelPlugin
├── channel.test.ts # Testy
├── client.ts # Klient API platformy
└── runtime.ts # Magazyn runtime (jeśli potrzebny)
└── runtime.ts # Magazyn środowiska uruchomieniowego (jeśli potrzebny)
```
## Tematy zaawansowane
<CardGroup cols={2}>
<Card title="Opcje wątkowania" icon="git-branch" href="/pl/plugins/sdk-entrypoints#registration-mode">
Stałe, o zakresie konta lub niestandardowe tryby odpowiedzi
Stałe, ograniczone do konta lub niestandardowe tryby odpowiedzi
</Card>
<Card title="Integracja z narzędziem wiadomości" icon="puzzle" href="/pl/plugins/architecture#channel-plugins-and-the-shared-message-tool">
<Card title="Integracja narzędzia wiadomości" icon="puzzle" href="/pl/plugins/architecture#channel-plugins-and-the-shared-message-tool">
describeMessageTool i wykrywanie akcji
</Card>
<Card title="Rozpoznawanie celu" icon="crosshair" href="/pl/plugins/architecture#channel-target-resolution">
inferTargetChatType, looksLikeId, resolveTarget
</Card>
<Card title="Helpery runtime" icon="settings" href="/pl/plugins/sdk-runtime">
<Card title="Helpery środowiska uruchomieniowego" icon="settings" href="/pl/plugins/sdk-runtime">
TTS, STT, multimedia, subagent przez api.runtime
</Card>
</CardGroup>

View File

@ -1,27 +1,27 @@
---
read_when:
- Musisz wiedzieć, z której podścieżki SDK importować.
- Potrzebujesz dokumentacji wszystkich metod rejestracji w `OpenClawPluginApi`.
- Szukasz konkretnego eksportu SDK.
- Musisz wiedzieć, z którego podścieżki SDK importować
- Potrzebujesz opisu wszystkich metod rejestracji w `OpenClawPluginApi`
- Szukasz konkretnego eksportu SDK
sidebarTitle: SDK Overview
summary: Mapa importów, dokumentacja API rejestracji i architektura SDK
summary: Mapa importów, opis interfejsu API rejestracji i architektura SDK
title: Przegląd Plugin SDK
x-i18n:
generated_at: "2026-04-17T09:49:37Z"
generated_at: "2026-04-18T09:34:53Z"
model: gpt-5.4
provider: openai
source_hash: b177fdb6830f415d998a24812bc2c7db8124d3ba77b0174c9a67ac7d747f7e5a
source_hash: 05d3d0022cca32d29c76f6cea01cdf4f88ac69ef0ef3d7fb8a60fbf9a6b9b331
source_path: plugins/sdk-overview.md
workflow: 15
---
# Przegląd Plugin SDK
Plugin SDK to typowany kontrakt między pluginami a częścią core. Ta strona jest
dokumentacją tego, **co importować** i **co można rejestrować**.
Plugin SDK to typowany kontrakt między pluginami a rdzeniem. Ta strona jest
punktem odniesienia dla **czego importować** i **co można rejestrować**.
<Tip>
**Szukasz poradnika?**
**Szukasz przewodnika krok po kroku?**
- Pierwszy plugin? Zacznij od [Pierwsze kroki](/pl/plugins/building-plugins)
- Plugin kanału? Zobacz [Pluginy kanałów](/pl/plugins/sdk-channel-plugins)
- Plugin dostawcy? Zobacz [Pluginy dostawców](/pl/plugins/sdk-provider-plugins)
@ -36,270 +36,284 @@ import { definePluginEntry } from "openclaw/plugin-sdk/plugin-entry";
import { defineChannelPluginEntry } from "openclaw/plugin-sdk/channel-core";
```
Każda podścieżka jest małym, samowystarczalnym modułem. Dzięki temu uruchamianie
pozostaje szybkie i pozwala uniknąć problemów z zależnościami cyklicznymi. W przypadku pomocników wejścia/budowy specyficznych dla kanałów,
preferuj `openclaw/plugin-sdk/channel-core`; `openclaw/plugin-sdk/core` zachowaj dla
szerszej powierzchni zbiorczej i współdzielonych pomocników, takich jak
Każda podścieżka jest małym, samodzielnym modułem. Dzięki temu uruchamianie jest
szybkie i pozwala uniknąć problemów z zależnościami cyklicznymi. Dla
specyficznych dla kanałów helperów entry/build preferuj `openclaw/plugin-sdk/channel-core`; `openclaw/plugin-sdk/core` zachowaj
dla szerszej powierzchni zbiorczej i współdzielonych helperów, takich jak
`buildChannelConfigSchema`.
Nie dodawaj ani nie opieraj się na wygodnych warstwach nazwanych od dostawców, takich jak
Nie dodawaj ani nie polegaj na wygodnych ścieżkach nazwanych od dostawców, takich jak
`openclaw/plugin-sdk/slack`, `openclaw/plugin-sdk/discord`,
`openclaw/plugin-sdk/signal`, `openclaw/plugin-sdk/whatsapp` ani
warstwach pomocniczych oznaczonych marką kanału. Pluginy dostarczane w pakiecie powinny składać generyczne
podścieżki SDK we własnych barrelach `api.ts` lub `runtime-api.ts`, a core
powinien albo używać tych lokalnych barrelli pluginu, albo dodać wąski generyczny
kontrakt SDK, gdy potrzeba rzeczywiście dotyczy wielu kanałów.
`openclaw/plugin-sdk/signal`, `openclaw/plugin-sdk/whatsapp`, ani
helperowych ścieżkach markowanych kanałami. Bundled pluginy powinny składać ogólne
podścieżki SDK we własnych barrelach `api.ts` lub `runtime-api.ts`, a rdzeń
powinien albo używać tych lokalnych barreli pluginu, albo dodać wąski ogólny kontrakt SDK,
gdy potrzeba jest rzeczywiście międzykanałowa.
Wygenerowana mapa eksportów nadal zawiera niewielki zestaw warstw pomocniczych dla pluginów dostarczanych w pakiecie,
takich jak `plugin-sdk/feishu`, `plugin-sdk/feishu-setup`,
Wygenerowana mapa eksportów nadal zawiera niewielki zestaw helperowych
ścieżek dla bundled pluginów, takich jak `plugin-sdk/feishu`, `plugin-sdk/feishu-setup`,
`plugin-sdk/zalo`, `plugin-sdk/zalo-setup` i `plugin-sdk/matrix*`. Te
podścieżki istnieją wyłącznie na potrzeby utrzymania zgodności i konserwacji pluginów dostarczanych w pakiecie; są
celowo pominięte w poniższej wspólnej tabeli i nie są zalecaną
podścieżki istnieją wyłącznie na potrzeby utrzymania bundled pluginów i zgodności;
celowo pominięte w poniższej wspólnej tabeli i nie są zalecaną
ścieżką importu dla nowych pluginów zewnętrznych.
## Dokumentacja podścieżek
## Opis podścieżek
Najczęściej używane podścieżki, pogrupowane według przeznaczenia. Wygenerowana pełna lista
ponad 200 podścieżek znajduje się w `scripts/lib/plugin-sdk-entrypoints.json`.
Zastrzeżone podścieżki pomocnicze dla pluginów dostarczanych w pakiecie nadal pojawiają się na tej wygenerowanej liście.
Traktuj je jako powierzchnie implementacyjne/zgodnościowe, chyba że strona dokumentacji
Zastrzeżone helperowe podścieżki bundled pluginów nadal pojawiają się w tej wygenerowanej liście.
Traktuj je jako szczegół implementacyjny lub powierzchnie zgodności, chyba że strona dokumentacji
wyraźnie promuje którąś z nich jako publiczną.
### Wejście pluginu
### Entry pluginu
| Podścieżka | Kluczowe eksporty |
| -------------------------- | -------------------------------------------------------------------------------------------------------------------------------------- |
| `plugin-sdk/plugin-entry` | `definePluginEntry` |
| `plugin-sdk/core` | `defineChannelPluginEntry`, `createChatChannelPlugin`, `createChannelPluginBase`, `defineSetupPluginEntry`, `buildChannelConfigSchema` |
| `plugin-sdk/config-schema` | `OpenClawSchema` |
| `plugin-sdk/provider-entry` | `defineSingleProviderPluginEntry` |
| Subpath | Kluczowe eksporty |
| --------------------------- | -------------------------------------------------------------------------------------------------------------------------------------- |
| `plugin-sdk/plugin-entry` | `definePluginEntry` |
| `plugin-sdk/core` | `defineChannelPluginEntry`, `createChatChannelPlugin`, `createChannelPluginBase`, `defineSetupPluginEntry`, `buildChannelConfigSchema` |
| `plugin-sdk/config-schema` | `OpenClawSchema` |
| `plugin-sdk/provider-entry` | `defineSingleProviderPluginEntry` |
<AccordionGroup>
<Accordion title="Podścieżki kanałów">
| Podścieżka | Kluczowe eksporty |
| Subpath | Kluczowe eksporty |
| --- | --- |
| `plugin-sdk/channel-core` | `defineChannelPluginEntry`, `defineSetupPluginEntry`, `createChatChannelPlugin`, `createChannelPluginBase` |
| `plugin-sdk/config-schema` | Eksport głównego schematu Zod `openclaw.json` (`OpenClawSchema`) |
| `plugin-sdk/config-schema` | Eksport głównego schematu Zod dla `openclaw.json` (`OpenClawSchema`) |
| `plugin-sdk/channel-setup` | `createOptionalChannelSetupSurface`, `createOptionalChannelSetupAdapter`, `createOptionalChannelSetupWizard`, a także `DEFAULT_ACCOUNT_ID`, `createTopLevelChannelDmPolicy`, `setSetupChannelEnabled`, `splitSetupEntries` |
| `plugin-sdk/setup` | Współdzielone pomocniki kreatora konfiguracji, prompty allowlisty, konstruktory statusu konfiguracji |
| `plugin-sdk/setup` | Współdzielone helpery kreatora konfiguracji, prompty allowlist i konstruktory statusu konfiguracji |
| `plugin-sdk/setup-runtime` | `createPatchedAccountSetupAdapter`, `createEnvPatchedAccountSetupAdapter`, `createSetupInputPresenceValidator`, `noteChannelLookupFailure`, `noteChannelLookupSummary`, `promptResolvedAllowFrom`, `splitSetupEntries`, `createAllowlistSetupWizardProxy`, `createDelegatedSetupWizardProxy` |
| `plugin-sdk/setup-adapter-runtime` | `createEnvPatchedAccountSetupAdapter` |
| `plugin-sdk/setup-tools` | `formatCliCommand`, `detectBinary`, `extractArchive`, `resolveBrewExecutable`, `formatDocsLink`, `CONFIG_DIR` |
| `plugin-sdk/account-core` | Pomocniki konfiguracji/wrót działań dla wielu kont, pomocniki domyślnego fallbacku konta |
| `plugin-sdk/account-id` | `DEFAULT_ACCOUNT_ID`, pomocniki normalizacji identyfikatora konta |
| `plugin-sdk/account-resolution` | Wyszukiwanie konta + pomocniki domyślnego fallbacku |
| `plugin-sdk/account-helpers` | Wąskie pomocniki listy kont/działań na koncie |
| `plugin-sdk/account-core` | Helpery konfiguracji wielu kont / bramek akcji oraz helpery fallbacku konta domyślnego |
| `plugin-sdk/account-id` | `DEFAULT_ACCOUNT_ID`, helpery normalizacji identyfikatorów kont |
| `plugin-sdk/account-resolution` | Wyszukiwanie kont i helpery fallbacku domyślnego |
| `plugin-sdk/account-helpers` | Wąskie helpery list kont i akcji na kontach |
| `plugin-sdk/channel-pairing` | `createChannelPairingController` |
| `plugin-sdk/channel-reply-pipeline` | `createChannelReplyPipeline` |
| `plugin-sdk/channel-config-helpers` | `createHybridChannelConfigAdapter` |
| `plugin-sdk/channel-config-schema` | Typy schematu konfiguracji kanału |
| `plugin-sdk/telegram-command-config` | Pomocniki normalizacji/walidacji niestandardowych komend Telegram z fallbackiem do kontraktu dostarczanego w pakiecie |
| `plugin-sdk/channel-config-schema` | Typy schematów konfiguracji kanałów |
| `plugin-sdk/telegram-command-config` | Helpery normalizacji i walidacji niestandardowych komend Telegram z fallbackiem bundled-contract |
| `plugin-sdk/command-gating` | Wąskie helpery bramek autoryzacji komend |
| `plugin-sdk/channel-policy` | `resolveChannelGroupRequireMention` |
| `plugin-sdk/channel-lifecycle` | `createAccountStatusSink` |
| `plugin-sdk/inbound-envelope` | Współdzielone pomocniki tras wejściowych + budowania envelope |
| `plugin-sdk/inbound-reply-dispatch` | Współdzielone pomocniki zapisu i dyspozycji wejściowej |
| `plugin-sdk/messaging-targets` | Pomocniki parsowania/dopasowywania celów |
| `plugin-sdk/outbound-media` | Współdzielone pomocniki ładowania mediów wychodzących |
| `plugin-sdk/outbound-runtime` | Pomocniki delegatów tożsamości/wysyłki wychodzącej |
| `plugin-sdk/thread-bindings-runtime` | Pomocniki cyklu życia i adapterów wiązań wątków |
| `plugin-sdk/inbound-envelope` | Współdzielone helpery routingu wejściowego i budowania envelope |
| `plugin-sdk/inbound-reply-dispatch` | Współdzielone helpery zapisu rekordów wejściowych i dispatchu |
| `plugin-sdk/messaging-targets` | Helpery parsowania i dopasowywania celów |
| `plugin-sdk/outbound-media` | Współdzielone helpery ładowania mediów wychodzących |
| `plugin-sdk/outbound-runtime` | Helpery tożsamości wychodzącej i delegatów wysyłania |
| `plugin-sdk/poll-runtime` | Wąskie helpery normalizacji ankiet |
| `plugin-sdk/thread-bindings-runtime` | Helpery cyklu życia powiązań wątków i adapterów |
| `plugin-sdk/agent-media-payload` | Starszy konstruktor ładunku mediów agenta |
| `plugin-sdk/conversation-runtime` | Pomocniki wiązania konwersacji/wątku, parowania i skonfigurowanych wiązań |
| `plugin-sdk/runtime-config-snapshot` | Pomocnik migawki konfiguracji runtime |
| `plugin-sdk/runtime-group-policy` | Pomocniki rozstrzygania polityk grupowych w runtime |
| `plugin-sdk/channel-status` | Współdzielone pomocniki migawki/podsumowania statusu kanału |
| `plugin-sdk/channel-config-primitives` | Wąskie prymitywy schematu konfiguracji kanału |
| `plugin-sdk/channel-config-writes` | Pomocniki autoryzacji zapisu konfiguracji kanału |
| `plugin-sdk/channel-plugin-common` | Współdzielone eksporty preludium pluginu kanału |
| `plugin-sdk/allowlist-config-edit` | Pomocniki odczytu/edycji konfiguracji allowlisty |
| `plugin-sdk/group-access` | Współdzielone pomocniki decyzji o dostępie grupowym |
| `plugin-sdk/direct-dm` | Współdzielone pomocniki auth/guard dla bezpośrednich wiadomości |
| `plugin-sdk/interactive-runtime` | Pomocniki normalizacji/redukcji interaktywnych ładunków odpowiedzi |
| `plugin-sdk/channel-inbound` | Pomocniki debounce wejściowego, dopasowania wzmianek, polityki wzmianek oraz envelope |
| `plugin-sdk/conversation-runtime` | Helpery konwersacji/powiązań wątków, parowania i skonfigurowanych powiązań |
| `plugin-sdk/runtime-config-snapshot` | Helper zrzutu konfiguracji runtime |
| `plugin-sdk/runtime-group-policy` | Helpery rozwiązywania zasad grup runtime |
| `plugin-sdk/channel-status` | Współdzielone helpery zrzutów i podsumowań statusu kanałów |
| `plugin-sdk/channel-config-primitives` | Wąskie prymitywy schematów konfiguracji kanałów |
| `plugin-sdk/channel-config-writes` | Helpery autoryzacji zapisu konfiguracji kanałów |
| `plugin-sdk/channel-plugin-common` | Współdzielone eksporty prelude dla pluginów kanałów |
| `plugin-sdk/allowlist-config-edit` | Helpery edycji i odczytu konfiguracji allowlist |
| `plugin-sdk/group-access` | Współdzielone helpery decyzji dostępu grupowego |
| `plugin-sdk/direct-dm` | Współdzielone helpery auth/guard dla bezpośrednich DM |
| `plugin-sdk/interactive-runtime` | Helpery normalizacji i redukcji interaktywnych ładunków odpowiedzi |
| `plugin-sdk/channel-inbound` | Barrel zgodności dla debounce wejścia, dopasowywania mention, helperów zasad mention i helperów envelope |
| `plugin-sdk/channel-mention-gating` | Wąskie helpery zasad mention bez szerszej powierzchni runtime dla wejścia |
| `plugin-sdk/channel-location` | Helpery kontekstu lokalizacji kanału i formatowania |
| `plugin-sdk/channel-logging` | Helpery logowania kanałów dla odrzuceń wejścia oraz błędów typing/ack |
| `plugin-sdk/channel-send-result` | Typy wyników odpowiedzi |
| `plugin-sdk/channel-actions` | `createMessageToolButtonsSchema`, `createMessageToolCardSchema` |
| `plugin-sdk/channel-targets` | Pomocniki parsowania/dopasowywania celów |
| `plugin-sdk/channel-contract` | Typy kontraktu kanału |
| `plugin-sdk/channel-feedback` | Powiązanie informacji zwrotnej/reakcji |
| `plugin-sdk/channel-secret-runtime` | Wąskie pomocniki kontraktu sekretów, takie jak `collectSimpleChannelFieldAssignments`, `getChannelSurface`, `pushAssignment`, oraz typy celu sekretu |
| `plugin-sdk/channel-targets` | Helpery parsowania i dopasowywania celów |
| `plugin-sdk/channel-contract` | Typy kontraktów kanałów |
| `plugin-sdk/channel-feedback` | Okablowanie feedbacku/reakcji |
| `plugin-sdk/channel-secret-runtime` | Wąskie helpery kontraktu sekretów, takie jak `collectSimpleChannelFieldAssignments`, `getChannelSurface`, `pushAssignment`, oraz typy docelowe sekretów |
</Accordion>
<Accordion title="Podścieżki dostawców">
| Podścieżka | Kluczowe eksporty |
| Subpath | Kluczowe eksporty |
| --- | --- |
| `plugin-sdk/provider-entry` | `defineSingleProviderPluginEntry` |
| `plugin-sdk/provider-setup` | Starannie dobrane pomocniki konfiguracji lokalnych/samohostowanych dostawców |
| `plugin-sdk/self-hosted-provider-setup` | Ukierunkowane pomocniki konfiguracji samohostowanych dostawców zgodnych z OpenAI |
| `plugin-sdk/cli-backend` | Domyślne ustawienia backendu CLI + stałe watchdog |
| `plugin-sdk/provider-auth-runtime` | Pomocniki rozstrzygania kluczy API w runtime dla pluginów dostawców |
| `plugin-sdk/provider-auth-api-key` | Pomocniki onboardingu/zapisu profilu dla kluczy API, takie jak `upsertApiKeyProfile` |
| `plugin-sdk/provider-setup` | Dobrane helpery konfiguracji lokalnych i self-hosted dostawców |
| `plugin-sdk/self-hosted-provider-setup` | Ukierunkowane helpery konfiguracji self-hosted dostawców zgodnych z OpenAI |
| `plugin-sdk/cli-backend` | Domyślne ustawienia backendu CLI i stałe watchdog |
| `plugin-sdk/provider-auth-runtime` | Helpery runtime do rozwiązywania kluczy API dla pluginów dostawców |
| `plugin-sdk/provider-auth-api-key` | Helpery onboardingu kluczy API i zapisu profili, takie jak `upsertApiKeyProfile` |
| `plugin-sdk/provider-auth-result` | Standardowy konstruktor wyniku auth OAuth |
| `plugin-sdk/provider-auth-login` | Współdzielone interaktywne pomocniki logowania dla pluginów dostawców |
| `plugin-sdk/provider-env-vars` | Pomocniki wyszukiwania zmiennych środowiskowych auth dostawców |
| `plugin-sdk/provider-auth-login` | Współdzielone helpery interaktywnego logowania dla pluginów dostawców |
| `plugin-sdk/provider-env-vars` | Helpery wyszukiwania zmiennych środowiskowych auth dostawców |
| `plugin-sdk/provider-auth` | `createProviderApiKeyAuthMethod`, `ensureApiKeyFromOptionEnvOrPrompt`, `upsertAuthProfile`, `upsertApiKeyProfile`, `writeOAuthCredentials` |
| `plugin-sdk/provider-model-shared` | `ProviderReplayFamily`, `buildProviderReplayFamilyHooks`, `normalizeModelCompat`, współdzielone konstruktory polityk replay, pomocniki endpointów dostawców oraz pomocniki normalizacji identyfikatorów modeli, takie jak `normalizeNativeXaiModelId` |
| `plugin-sdk/provider-model-shared` | `ProviderReplayFamily`, `buildProviderReplayFamilyHooks`, `normalizeModelCompat`, współdzielone konstruktory zasad replay, helpery endpointów dostawców oraz helpery normalizacji identyfikatorów modeli, takie jak `normalizeNativeXaiModelId` |
| `plugin-sdk/provider-catalog-shared` | `findCatalogTemplate`, `buildSingleProviderApiKeyCatalog`, `supportsNativeStreamingUsageCompat`, `applyProviderNativeStreamingUsageCompat` |
| `plugin-sdk/provider-http` | Generyczne pomocniki możliwości HTTP/endpointów dostawców |
| `plugin-sdk/provider-web-fetch-contract` | Wąskie pomocniki kontraktu konfiguracji/wyboru web-fetch, takie jak `enablePluginInConfig` i `WebFetchProviderPlugin` |
| `plugin-sdk/provider-web-fetch` | Pomocniki rejestracji/cache dostawców web-fetch |
| `plugin-sdk/provider-web-search-config-contract` | Wąskie pomocniki konfiguracji/danych uwierzytelniających web-search dla dostawców, którzy nie potrzebują powiązania włączania pluginu |
| `plugin-sdk/provider-web-search-contract` | Wąskie pomocniki kontraktu konfiguracji/danych uwierzytelniających web-search, takie jak `createWebSearchProviderContractFields`, `enablePluginInConfig`, `resolveProviderWebSearchPluginConfig` oraz zakresowane settery/gettery danych uwierzytelniających |
| `plugin-sdk/provider-web-search` | Pomocniki rejestracji/cache/runtime dostawców web-search |
| `plugin-sdk/provider-tools` | `ProviderToolCompatFamily`, `buildProviderToolCompatFamilyHooks`, czyszczenie schematów Gemini + diagnostyka oraz pomocniki zgodności xAI, takie jak `resolveXaiModelCompatPatch` / `applyXaiModelCompat` |
| `plugin-sdk/provider-http` | Ogólne helpery zdolności HTTP/endpointów dostawców |
| `plugin-sdk/provider-web-fetch-contract` | Wąskie helpery kontraktu konfiguracji/wyboru web-fetch, takie jak `enablePluginInConfig` i `WebFetchProviderPlugin` |
| `plugin-sdk/provider-web-fetch` | Helpery rejestracji i cache dla dostawców web-fetch |
| `plugin-sdk/provider-web-search-config-contract` | Wąskie helpery konfiguracji/poświadczeń web-search dla dostawców, którzy nie potrzebują okablowania włączania pluginu |
| `plugin-sdk/provider-web-search-contract` | Wąskie helpery kontraktu konfiguracji/poświadczeń web-search, takie jak `createWebSearchProviderContractFields`, `enablePluginInConfig`, `resolveProviderWebSearchPluginConfig` oraz zakresowane settery/gettery poświadczeń |
| `plugin-sdk/provider-web-search` | Helpery rejestracji, cache i runtime dla dostawców web-search |
| `plugin-sdk/provider-tools` | `ProviderToolCompatFamily`, `buildProviderToolCompatFamilyHooks`, czyszczenie schematów Gemini i diagnostyka oraz helpery zgodności xAI, takie jak `resolveXaiModelCompatPatch` / `applyXaiModelCompat` |
| `plugin-sdk/provider-usage` | `fetchClaudeUsage` i podobne |
| `plugin-sdk/provider-stream` | `ProviderStreamFamily`, `buildProviderStreamFamilyHooks`, `composeProviderStreamWrappers`, typy wrapperów strumieni oraz współdzielone pomocniki wrapperów Anthropic/Bedrock/Google/Kilocode/Moonshot/OpenAI/OpenRouter/Z.A.I/MiniMax/Copilot |
| `plugin-sdk/provider-onboard` | Pomocniki łatek konfiguracji onboardingu |
| `plugin-sdk/global-singleton` | Pomocniki lokalnych dla procesu singletonów/map/cache |
| `plugin-sdk/provider-stream` | `ProviderStreamFamily`, `buildProviderStreamFamilyHooks`, `composeProviderStreamWrappers`, typy wrapperów strumieni oraz współdzielone helpery wrapperów Anthropic/Bedrock/Google/Kilocode/Moonshot/OpenAI/OpenRouter/Z.A.I/MiniMax/Copilot |
| `plugin-sdk/provider-onboard` | Helpery poprawek konfiguracji onboardingu |
| `plugin-sdk/global-singleton` | Helpery singletonów/map/cache lokalnych dla procesu |
</Accordion>
<Accordion title="Podścieżki auth i bezpieczeństwa">
| Podścieżka | Kluczowe eksporty |
| Subpath | Kluczowe eksporty |
| --- | --- |
| `plugin-sdk/command-auth` | `resolveControlCommandGate`, pomocniki rejestru komend, pomocniki autoryzacji nadawcy |
| `plugin-sdk/command-auth` | `resolveControlCommandGate`, helpery rejestru komend, helpery autoryzacji nadawcy |
| `plugin-sdk/command-status` | Konstruktory komunikatów komend/pomocy, takie jak `buildCommandsMessagePaginated` i `buildHelpMessage` |
| `plugin-sdk/approval-auth-runtime` | Pomocniki rozstrzygania zatwierdzającego i auth działań w tym samym czacie |
| `plugin-sdk/approval-client-runtime` | Pomocniki profilu/filtra zatwierdzania dla natywnego wykonania |
| `plugin-sdk/approval-delivery-runtime` | Adaptery dostarczania/możliwości natywnego zatwierdzania |
| `plugin-sdk/approval-gateway-runtime` | Współdzielony pomocnik rozstrzygania Gateway zatwierdzania |
| `plugin-sdk/approval-handler-adapter-runtime` | Lekkie pomocniki ładowania natywnego adaptera zatwierdzania dla gorących punktów wejścia kanałów |
| `plugin-sdk/approval-handler-runtime` | Szersze pomocniki runtime obsługi zatwierdzania; gdy wystarczą, preferuj węższe warstwy adaptera/Gateway |
| `plugin-sdk/approval-native-runtime` | Pomocniki celu natywnego zatwierdzania + wiązania konta |
| `plugin-sdk/approval-reply-runtime` | Pomocniki ładunku odpowiedzi zatwierdzania exec/pluginu |
| `plugin-sdk/command-auth-native` | Pomocniki natywnego auth komend + natywnego celu sesji |
| `plugin-sdk/command-detection` | Współdzielone pomocniki wykrywania komend |
| `plugin-sdk/command-surface` | Pomocniki normalizacji treści komend i powierzchni komend |
| `plugin-sdk/approval-auth-runtime` | Rozwiązywanie approverów i helpery auth akcji w tym samym czacie |
| `plugin-sdk/approval-client-runtime` | Helpery profili/filtrów natywnego zatwierdzania exec |
| `plugin-sdk/approval-delivery-runtime` | Adaptery natywnych możliwości/dostarczania zatwierdzeń |
| `plugin-sdk/approval-gateway-runtime` | Współdzielony helper rozwiązywania Gateway dla zatwierdzeń |
| `plugin-sdk/approval-handler-adapter-runtime` | Lekkie helpery ładowania natywnych adapterów zatwierdzeń dla gorących entrypointów kanałów |
| `plugin-sdk/approval-handler-runtime` | Szersze helpery runtime obsługi zatwierdzeń; preferuj węższe ścieżki adapter/gateway, gdy są wystarczające |
| `plugin-sdk/approval-native-runtime` | Helpery natywnych celów zatwierdzania i powiązań kont |
| `plugin-sdk/approval-reply-runtime` | Helpery ładunku odpowiedzi zatwierdzeń exec/pluginów |
| `plugin-sdk/command-auth-native` | Natywne auth komend i helpery natywnych celów sesji |
| `plugin-sdk/command-detection` | Współdzielone helpery wykrywania komend |
| `plugin-sdk/command-surface` | Helpery normalizacji treści komend i powierzchni komend |
| `plugin-sdk/allow-from` | `formatAllowFromLowercase` |
| `plugin-sdk/channel-secret-runtime` | Wąskie pomocniki zbierania kontraktów sekretów dla powierzchni sekretów kanałów/pluginów |
| `plugin-sdk/secret-ref-runtime` | Wąskie pomocniki `coerceSecretRef` i typowania SecretRef do parsowania kontraktu sekretów/konfiguracji |
| `plugin-sdk/security-runtime` | Współdzielone pomocniki zaufania, bramkowania DM, treści zewnętrznych i zbierania sekretów |
| `plugin-sdk/ssrf-policy` | Pomocniki polityki SSRF dla allowlisty hostów i sieci prywatnych |
| `plugin-sdk/ssrf-runtime` | Pomocniki pinned-dispatcher, fetch chronionego przez SSRF i polityki SSRF |
| `plugin-sdk/secret-input` | Pomocniki parsowania wejścia sekretów |
| `plugin-sdk/webhook-ingress` | Pomocniki żądań/celów Webhook |
| `plugin-sdk/webhook-request-guards` | Pomocniki rozmiaru treści żądania/timeoutu |
| `plugin-sdk/channel-secret-runtime` | Wąskie helpery zbierania kontraktów sekretów dla powierzchni sekretów kanałów/pluginów |
| `plugin-sdk/secret-ref-runtime` | Wąskie helpery `coerceSecretRef` i typowania SecretRef do parsowania kontraktów sekretów/konfiguracji |
| `plugin-sdk/security-runtime` | Współdzielone helpery zaufania, bramek DM, treści zewnętrznych i zbierania sekretów |
| `plugin-sdk/ssrf-policy` | Helpery polityk SSRF dla allowlist hostów i sieci prywatnych |
| `plugin-sdk/ssrf-dispatcher` | Wąskie helpery pinned-dispatcher bez szerokiej powierzchni infra runtime |
| `plugin-sdk/ssrf-runtime` | Helpery pinned-dispatcher, fetch chronionego przez SSRF i polityki SSRF |
| `plugin-sdk/secret-input` | Helpery parsowania danych wejściowych sekretów |
| `plugin-sdk/webhook-ingress` | Helpery żądań/docelów Webhook |
| `plugin-sdk/webhook-request-guards` | Helpery rozmiaru body i timeoutów żądań |
</Accordion>
<Accordion title="Podścieżki runtime i storage">
| Podścieżka | Kluczowe eksporty |
| Subpath | Kluczowe eksporty |
| --- | --- |
| `plugin-sdk/runtime` | Szerokie pomocniki runtime/logowania/kopii zapasowych/instalacji pluginów |
| `plugin-sdk/runtime-env` | Wąskie pomocniki env runtime, loggera, timeoutu, ponawiania i backoff |
| `plugin-sdk/channel-runtime-context` | Generyczne pomocniki rejestracji i wyszukiwania kontekstu runtime kanału |
| `plugin-sdk/runtime` | Szerokie helpery runtime, logowania, backupu i instalacji pluginów |
| `plugin-sdk/runtime-env` | Wąskie helpery środowiska runtime, loggera, timeoutów, retry i backoff |
| `plugin-sdk/channel-runtime-context` | Ogólne helpery rejestracji i wyszukiwania kontekstu runtime kanałów |
| `plugin-sdk/runtime-store` | `createPluginRuntimeStore` |
| `plugin-sdk/plugin-runtime` | Współdzielone pomocniki komend/hooków/http/interakcji pluginów |
| `plugin-sdk/hook-runtime` | Współdzielone pomocniki pipeline webhooków/wewnętrznych hooków |
| `plugin-sdk/lazy-runtime` | Pomocniki leniwego importu/wiązania runtime, takie jak `createLazyRuntimeModule`, `createLazyRuntimeMethod` i `createLazyRuntimeSurface` |
| `plugin-sdk/process-runtime` | Pomocniki wykonywania procesów |
| `plugin-sdk/cli-runtime` | Pomocniki formatowania, oczekiwania i wersji CLI |
| `plugin-sdk/gateway-runtime` | Pomocniki klienta Gateway i łatania statusu kanału |
| `plugin-sdk/config-runtime` | Pomocniki ładowania/zapisu konfiguracji |
| `plugin-sdk/telegram-command-config` | Pomocniki normalizacji nazw/opisów komend Telegram oraz sprawdzania duplikatów/konfliktów, nawet gdy powierzchnia kontraktu Telegram dostarczana w pakiecie jest niedostępna |
| `plugin-sdk/approval-runtime` | Pomocniki zatwierdzania exec/pluginów, konstruktory możliwości zatwierdzania, pomocniki auth/profili, pomocniki natywnego routingu/runtime |
| `plugin-sdk/reply-runtime` | Współdzielone pomocniki runtime wejścia/odpowiedzi, chunkingu, dyspozycji, Heartbeat, planera odpowiedzi |
| `plugin-sdk/reply-dispatch-runtime` | Wąskie pomocniki dyspozycji/finalizacji odpowiedzi |
| `plugin-sdk/reply-history` | Współdzielone pomocniki historii odpowiedzi dla krótkich okien czasowych, takie jak `buildHistoryContext`, `recordPendingHistoryEntry` i `clearHistoryEntriesIfEnabled` |
| `plugin-sdk/plugin-runtime` | Współdzielone helpery komend, hooków, HTTP i interakcji pluginów |
| `plugin-sdk/hook-runtime` | Współdzielone helpery pipeline Webhook i hooków wewnętrznych |
| `plugin-sdk/lazy-runtime` | Helpery leniwego importu/powiązań runtime, takie jak `createLazyRuntimeModule`, `createLazyRuntimeMethod` i `createLazyRuntimeSurface` |
| `plugin-sdk/process-runtime` | Helpery wykonywania procesów |
| `plugin-sdk/cli-runtime` | Helpery formatowania CLI, oczekiwania i wersji |
| `plugin-sdk/gateway-runtime` | Helpery klienta Gateway i poprawek statusu kanałów |
| `plugin-sdk/config-runtime` | Helpery ładowania/zapisu konfiguracji |
| `plugin-sdk/telegram-command-config` | Helpery normalizacji nazw/opisów komend Telegram oraz sprawdzania duplikatów/konfliktów, nawet gdy bundled powierzchnia kontraktu Telegram jest niedostępna |
| `plugin-sdk/text-autolink-runtime` | Wykrywanie autolinków odwołań do plików bez szerokiego barrel `text-runtime` |
| `plugin-sdk/approval-runtime` | Helpery zatwierdzeń exec/pluginów, konstruktory możliwości zatwierdzeń, helpery auth/profili, helpery natywnego routingu/runtime |
| `plugin-sdk/reply-runtime` | Współdzielone helpery runtime dla wejścia/odpowiedzi, chunkingu, dispatchu, Heartbeat i planera odpowiedzi |
| `plugin-sdk/reply-dispatch-runtime` | Wąskie helpery dispatchu/finalizacji odpowiedzi |
| `plugin-sdk/reply-history` | Współdzielone helpery krótkiego okna historii odpowiedzi, takie jak `buildHistoryContext`, `recordPendingHistoryEntry` i `clearHistoryEntriesIfEnabled` |
| `plugin-sdk/reply-reference` | `createReplyReferencePlanner` |
| `plugin-sdk/reply-chunking` | Wąskie pomocniki chunkingu tekstu/Markdown |
| `plugin-sdk/session-store-runtime` | Pomocniki ścieżki storage sesji + `updated-at` |
| `plugin-sdk/state-paths` | Pomocniki ścieżek katalogów stanu/OAuth |
| `plugin-sdk/routing` | Pomocniki tras/kluczy sesji/wiązania kont, takie jak `resolveAgentRoute`, `buildAgentSessionKey` i `resolveDefaultAgentBoundAccountId` |
| `plugin-sdk/status-helpers` | Współdzielone pomocniki podsumowania statusu kanału/konta, domyślne ustawienia stanu runtime i pomocniki metadanych problemów |
| `plugin-sdk/target-resolver-runtime` | Współdzielone pomocniki rozstrzygania celów |
| `plugin-sdk/string-normalization-runtime` | Pomocniki normalizacji slugów/ciągów znaków |
| `plugin-sdk/request-url` | Wyodrębniaj adresy URL jako ciągi znaków z wejść typu fetch/request |
| `plugin-sdk/run-command` | Uruchamianie komend z limitem czasu i znormalizowanymi wynikami stdout/stderr |
| `plugin-sdk/param-readers` | Typowe czytniki parametrów narzędzi/CLI |
| `plugin-sdk/tool-payload` | Wyodrębnianie znormalizowanych ładunków z obiektów wyników narzędzi |
| `plugin-sdk/reply-chunking` | Wąskie helpery chunkingu tekstu/Markdown |
| `plugin-sdk/session-store-runtime` | Helpery ścieżek session store i `updated-at` |
| `plugin-sdk/state-paths` | Helpery ścieżek katalogów stanu/OAuth |
| `plugin-sdk/routing` | Helpery routingu, kluczy sesji i powiązań kont, takie jak `resolveAgentRoute`, `buildAgentSessionKey` i `resolveDefaultAgentBoundAccountId` |
| `plugin-sdk/status-helpers` | Współdzielone helpery podsumowań statusu kanałów/kont, domyślne wartości stanu runtime i helpery metadanych problemów |
| `plugin-sdk/target-resolver-runtime` | Współdzielone helpery rozwiązywania celów |
| `plugin-sdk/string-normalization-runtime` | Helpery normalizacji slugów/ciągów |
| `plugin-sdk/request-url` | Wyodrębnianie tekstowych URL-i z wejść podobnych do fetch/request |
| `plugin-sdk/run-command` | Runner komend z limitem czasu i znormalizowanymi wynikami stdout/stderr |
| `plugin-sdk/param-readers` | Wspólne czytniki parametrów narzędzi/CLI |
| `plugin-sdk/tool-payload` | Wyodrębnianie znormalizowanych payloadów z obiektów wyników narzędzi |
| `plugin-sdk/tool-send` | Wyodrębnianie kanonicznych pól celu wysyłki z argumentów narzędzi |
| `plugin-sdk/temp-path` | Współdzielone pomocniki ścieżek tymczasowego pobierania |
| `plugin-sdk/logging-core` | Pomocniki loggera subsystemu i redakcji |
| `plugin-sdk/markdown-table-runtime` | Pomocniki trybu tabel Markdown |
| `plugin-sdk/json-store` | Małe pomocniki odczytu/zapisu stanu JSON |
| `plugin-sdk/file-lock` | Pomocniki reentrant locków plików |
| `plugin-sdk/persistent-dedupe` | Pomocniki cache deduplikacji opartego na dysku |
| `plugin-sdk/acp-runtime` | Pomocniki ACP runtime/sesji i dyspozycji odpowiedzi |
| `plugin-sdk/temp-path` | Współdzielone helpery ścieżek tymczasowego pobierania |
| `plugin-sdk/logging-core` | Helpery loggera podsystemu i redakcji |
| `plugin-sdk/markdown-table-runtime` | Helpery trybu tabel Markdown |
| `plugin-sdk/json-store` | Małe helpery odczytu/zapisu stanu JSON |
| `plugin-sdk/file-lock` | Helpery reentrant file-lock |
| `plugin-sdk/persistent-dedupe` | Helpery cache deduplikacji opartej na dysku |
| `plugin-sdk/acp-runtime` | Helpery runtime/sesji ACP i dispatchu odpowiedzi |
| `plugin-sdk/acp-binding-resolve-runtime` | Rozwiązywanie powiązań ACP tylko do odczytu bez importów uruchamiania cyklu życia |
| `plugin-sdk/agent-config-primitives` | Wąskie prymitywy schematu konfiguracji runtime agenta |
| `plugin-sdk/boolean-param` | Elastyczny czytnik parametrów logicznych |
| `plugin-sdk/dangerous-name-runtime` | Pomocniki rozstrzygania dopasowania niebezpiecznych nazw |
| `plugin-sdk/device-bootstrap` | Pomocniki bootstrapu urządzeń i tokenów parowania |
| `plugin-sdk/extension-shared` | Współdzielone prymitywy pomocnicze dla kanałów pasywnych, statusu i ambient proxy |
| `plugin-sdk/models-provider-runtime` | Pomocniki odpowiedzi dostawców/komendy `/models` |
| `plugin-sdk/skill-commands-runtime` | Pomocniki listowania komend Skills |
| `plugin-sdk/native-command-registry` | Pomocniki rejestru/budowy/serializacji natywnych komend |
| `plugin-sdk/agent-harness` | Eksperymentalna powierzchnia zaufanego pluginu dla niskopoziomowych harnessów agentów: typy harnessów, pomocniki sterowania/przerywania aktywnego uruchomienia, pomocniki mostu narzędzi OpenClaw oraz narzędzia wyników prób |
| `plugin-sdk/provider-zai-endpoint` | Pomocniki wykrywania endpointów Z.AI |
| `plugin-sdk/infra-runtime` | Pomocniki zdarzeń systemowych/Heartbeat |
| `plugin-sdk/collection-runtime` | Małe pomocniki cache z ograniczeniem rozmiaru |
| `plugin-sdk/diagnostic-runtime` | Pomocniki flag i zdarzeń diagnostycznych |
| `plugin-sdk/error-runtime` | Graf błędów, formatowanie, współdzielone pomocniki klasyfikacji błędów, `isApprovalNotFoundError` |
| `plugin-sdk/fetch-runtime` | Pomocniki opakowanego fetch, proxy i pinned lookup |
| `plugin-sdk/host-runtime` | Pomocniki normalizacji nazwy hosta i hosta SCP |
| `plugin-sdk/retry-runtime` | Pomocniki konfiguracji ponawiania i uruchamiania ponowień |
| `plugin-sdk/agent-runtime` | Pomocniki katalogu/tożsamości/workspace agenta |
| `plugin-sdk/directory-runtime` | Zapytania/deduplikacja katalogów oparta na konfiguracji |
| `plugin-sdk/boolean-param` | Elastyczny czytnik parametrów boolowskich |
| `plugin-sdk/dangerous-name-runtime` | Helpery rozwiązywania dopasowań niebezpiecznych nazw |
| `plugin-sdk/device-bootstrap` | Helpery bootstrapu urządzenia i tokenów parowania |
| `plugin-sdk/extension-shared` | Współdzielone prymitywy helperów dla kanałów pasywnych, statusu i ambient proxy |
| `plugin-sdk/models-provider-runtime` | Helpery odpowiedzi dostawców i komendy `/models` |
| `plugin-sdk/skill-commands-runtime` | Helpery listowania komend Skills |
| `plugin-sdk/native-command-registry` | Helpery rejestru/budowania/serializacji natywnych komend |
| `plugin-sdk/agent-harness` | Eksperymentalna powierzchnia zaufanego pluginu dla niskopoziomowych harnessów agentów: typy harnessów, helpery sterowania/przerywania aktywnego uruchomienia, helpery mostka narzędzi OpenClaw i narzędzia wyników prób |
| `plugin-sdk/provider-zai-endpoint` | Helpery wykrywania endpointów Z.AI |
| `plugin-sdk/infra-runtime` | Helpery zdarzeń systemowych/Heartbeat |
| `plugin-sdk/collection-runtime` | Małe helpery ograniczonego cache |
| `plugin-sdk/diagnostic-runtime` | Helpery flag i zdarzeń diagnostycznych |
| `plugin-sdk/error-runtime` | Graf błędów, formatowanie, współdzielone helpery klasyfikacji błędów, `isApprovalNotFoundError` |
| `plugin-sdk/fetch-runtime` | Helpery opakowanego fetch, proxy i pinned lookup |
| `plugin-sdk/runtime-fetch` | Fetch runtime świadomy dispatchera bez importów proxy/guarded-fetch |
| `plugin-sdk/response-limit-runtime` | Ograniczony czytnik body odpowiedzi bez szerokiej powierzchni media runtime |
| `plugin-sdk/session-binding-runtime` | Bieżący stan powiązań konwersacji bez routingu skonfigurowanych powiązań lub storeów parowania |
| `plugin-sdk/session-store-runtime` | Helpery odczytu session store bez szerokich importów zapisu/utrzymania konfiguracji |
| `plugin-sdk/context-visibility-runtime` | Rozwiązywanie widoczności kontekstu i filtrowanie kontekstu uzupełniającego bez szerokich importów konfiguracji/bezpieczeństwa |
| `plugin-sdk/string-coerce-runtime` | Wąskie helpery wymuszania i normalizacji rekordów/ciągów prymitywnych bez importów Markdown/logowania |
| `plugin-sdk/host-runtime` | Helpery normalizacji nazw hostów i hostów SCP |
| `plugin-sdk/retry-runtime` | Helpery konfiguracji retry i runnera retry |
| `plugin-sdk/agent-runtime` | Helpery katalogu/tożsamości/workspace agenta |
| `plugin-sdk/directory-runtime` | Oparte na konfiguracji zapytania o katalogi/deduplikacja |
| `plugin-sdk/keyed-async-queue` | `KeyedAsyncQueue` |
</Accordion>
<Accordion title="Podścieżki możliwości i testowania">
| Podścieżka | Kluczowe eksporty |
| Subpath | Kluczowe eksporty |
| --- | --- |
| `plugin-sdk/media-runtime` | Współdzielone pomocniki pobierania/przekształcania/storage mediów oraz konstruktory ładunków mediów |
| `plugin-sdk/media-generation-runtime` | Współdzielone pomocniki failover generowania mediów, wybór kandydatów i komunikaty o brakujących modelach |
| `plugin-sdk/media-understanding` | Typy dostawców rozumienia mediów oraz eksporty pomocnicze dla obrazów/audio skierowane do dostawców |
| `plugin-sdk/text-runtime` | Współdzielone pomocniki tekstu/Markdown/logowania, takie jak usuwanie tekstu widocznego dla asystenta, pomocniki renderowania/chunkingu/tabel Markdown, pomocniki redakcji, pomocniki tagów dyrektyw i narzędzia bezpiecznego tekstu |
| `plugin-sdk/text-chunking` | Pomocnik chunkingu tekstu wychodzącego |
| `plugin-sdk/speech` | Typy dostawców mowy oraz eksporty pomocnicze dla dyrektyw, rejestru i walidacji skierowane do dostawców |
| `plugin-sdk/speech-core` | Współdzielone typy dostawców mowy, pomocniki rejestru, dyrektyw i normalizacji |
| `plugin-sdk/realtime-transcription` | Typy dostawców transkrypcji w czasie rzeczywistym i pomocniki rejestru |
| `plugin-sdk/realtime-voice` | Typy dostawców głosu w czasie rzeczywistym i pomocniki rejestru |
| `plugin-sdk/media-runtime` | Współdzielone helpery pobierania, transformacji i przechowywania mediów oraz konstruktory payloadów mediów |
| `plugin-sdk/media-generation-runtime` | Współdzielone helpery failover generowania mediów, wybór kandydatów i komunikaty o brakujących modelach |
| `plugin-sdk/media-understanding` | Typy dostawców rozumienia mediów oraz eksporty helperów obrazów/audio dla dostawców |
| `plugin-sdk/text-runtime` | Współdzielone helpery tekstu/Markdown/logowania, takie jak usuwanie tekstu widocznego dla asystenta, helpery renderowania/chunkingu/tabel Markdown, helpery redakcji, helpery tagów dyrektyw i narzędzia bezpiecznego tekstu |
| `plugin-sdk/text-chunking` | Helper chunkingu tekstu wychodzącego |
| `plugin-sdk/speech` | Typy dostawców mowy oraz eksporty helperów dyrektyw, rejestru i walidacji dla dostawców |
| `plugin-sdk/speech-core` | Współdzielone typy dostawców mowy oraz helpery rejestru, dyrektyw i normalizacji |
| `plugin-sdk/realtime-transcription` | Typy dostawców transkrypcji w czasie rzeczywistym i helpery rejestru |
| `plugin-sdk/realtime-voice` | Typy dostawców głosu w czasie rzeczywistym i helpery rejestru |
| `plugin-sdk/image-generation` | Typy dostawców generowania obrazów |
| `plugin-sdk/image-generation-core` | Współdzielone typy generowania obrazów, pomocniki failover, auth i rejestru |
| `plugin-sdk/image-generation-core` | Współdzielone typy generowania obrazów oraz helpery failover, auth i rejestru |
| `plugin-sdk/music-generation` | Typy dostawców/żądań/wyników generowania muzyki |
| `plugin-sdk/music-generation-core` | Współdzielone typy generowania muzyki, pomocniki failover, wyszukiwanie dostawców i parsowanie model-ref |
| `plugin-sdk/music-generation-core` | Współdzielone typy generowania muzyki oraz helpery failover, wyszukiwania dostawców i parsowania model-ref |
| `plugin-sdk/video-generation` | Typy dostawców/żądań/wyników generowania wideo |
| `plugin-sdk/video-generation-core` | Współdzielone typy generowania wideo, pomocniki failover, wyszukiwanie dostawców i parsowanie model-ref |
| `plugin-sdk/webhook-targets` | Rejestr celów Webhook i pomocniki instalacji tras |
| `plugin-sdk/webhook-path` | Pomocniki normalizacji ścieżek Webhook |
| `plugin-sdk/web-media` | Współdzielone pomocniki ładowania mediów zdalnych/lokalnych |
| `plugin-sdk/zod` | Reeksport `zod` dla użytkowników Plugin SDK |
| `plugin-sdk/video-generation-core` | Współdzielone typy generowania wideo oraz helpery failover, wyszukiwania dostawców i parsowania model-ref |
| `plugin-sdk/webhook-targets` | Rejestr celów Webhook i helpery instalacji tras |
| `plugin-sdk/webhook-path` | Helpery normalizacji ścieżek Webhook |
| `plugin-sdk/web-media` | Współdzielone helpery ładowania mediów zdalnych/lokalnych |
| `plugin-sdk/zod` | Reeksportowany `zod` dla odbiorców Plugin SDK |
| `plugin-sdk/testing` | `installCommonResolveTargetErrorCases`, `shouldAckReaction` |
</Accordion>
<Accordion title="Podścieżki pamięci">
| Podścieżka | Kluczowe eksporty |
| Subpath | Kluczowe eksporty |
| --- | --- |
| `plugin-sdk/memory-core` | Powierzchnia pomocnicza `memory-core` dostarczana w pakiecie dla pomocników managera/konfiguracji/plików/CLI |
| `plugin-sdk/memory-core` | Powierzchnia helperów bundled `memory-core` dla managera, konfiguracji, plików i helperów CLI |
| `plugin-sdk/memory-core-engine-runtime` | Fasada runtime indeksowania/wyszukiwania pamięci |
| `plugin-sdk/memory-core-host-engine-foundation` | Eksporty silnika foundation hosta pamięci |
| `plugin-sdk/memory-core-host-engine-embeddings` | Kontrakty embeddingów hosta pamięci, dostęp do rejestru, lokalny dostawca oraz generyczne pomocniki batch/zdalne |
| `plugin-sdk/memory-core-host-engine-foundation` | Eksporty silnika bazowego hosta pamięci |
| `plugin-sdk/memory-core-host-engine-embeddings` | Kontrakty embeddingów hosta pamięci, dostęp do rejestru, lokalny dostawca oraz ogólne helpery batch/zdalne |
| `plugin-sdk/memory-core-host-engine-qmd` | Eksporty silnika QMD hosta pamięci |
| `plugin-sdk/memory-core-host-engine-storage` | Eksporty silnika storage hosta pamięci |
| `plugin-sdk/memory-core-host-multimodal` | Pomocniki multimodalne hosta pamięci |
| `plugin-sdk/memory-core-host-query` | Pomocniki zapytań hosta pamięci |
| `plugin-sdk/memory-core-host-secret` | Pomocniki sekretów hosta pamięci |
| `plugin-sdk/memory-core-host-events` | Pomocniki dziennika zdarzeń hosta pamięci |
| `plugin-sdk/memory-core-host-status` | Pomocniki statusu hosta pamięci |
| `plugin-sdk/memory-core-host-runtime-cli` | Pomocniki CLI runtime hosta pamięci |
| `plugin-sdk/memory-core-host-runtime-core` | Pomocniki core runtime hosta pamięci |
| `plugin-sdk/memory-core-host-runtime-files` | Pomocniki plików/runtime hosta pamięci |
| `plugin-sdk/memory-host-core` | Neutralny względem dostawcy alias dla pomocników core runtime hosta pamięci |
| `plugin-sdk/memory-host-events` | Neutralny względem dostawcy alias dla pomocników dziennika zdarzeń hosta pamięci |
| `plugin-sdk/memory-host-files` | Neutralny względem dostawcy alias dla pomocników plików/runtime hosta pamięci |
| `plugin-sdk/memory-host-markdown` | Współdzielone pomocniki zarządzanego Markdown dla pluginów powiązanych z pamięcią |
| `plugin-sdk/memory-host-search` | Fasada runtime Active Memory dla dostępu do managera wyszukiwania |
| `plugin-sdk/memory-host-status` | Neutralny względem dostawcy alias dla pomocników statusu hosta pamięci |
| `plugin-sdk/memory-lancedb` | Powierzchnia pomocnicza `memory-lancedb` dostarczana w pakiecie |
| `plugin-sdk/memory-core-host-multimodal` | Multimodalne helpery hosta pamięci |
| `plugin-sdk/memory-core-host-query` | Helpery zapytań hosta pamięci |
| `plugin-sdk/memory-core-host-secret` | Helpery sekretów hosta pamięci |
| `plugin-sdk/memory-core-host-events` | Helpery dziennika zdarzeń hosta pamięci |
| `plugin-sdk/memory-core-host-status` | Helpery statusu hosta pamięci |
| `plugin-sdk/memory-core-host-runtime-cli` | Helpery runtime CLI hosta pamięci |
| `plugin-sdk/memory-core-host-runtime-core` | Helpery głównego runtime hosta pamięci |
| `plugin-sdk/memory-core-host-runtime-files` | Helpery plików/runtime hosta pamięci |
| `plugin-sdk/memory-host-core` | Neutralny wobec dostawcy alias dla helperów głównego runtime hosta pamięci |
| `plugin-sdk/memory-host-events` | Neutralny wobec dostawcy alias dla helperów dziennika zdarzeń hosta pamięci |
| `plugin-sdk/memory-host-files` | Neutralny wobec dostawcy alias dla helperów plików/runtime hosta pamięci |
| `plugin-sdk/memory-host-markdown` | Współdzielone helpery zarządzanego Markdown dla pluginów powiązanych z pamięcią |
| `plugin-sdk/memory-host-search` | Fasada runtime Active Memory do dostępu do menedżera wyszukiwania |
| `plugin-sdk/memory-host-status` | Neutralny wobec dostawcy alias dla helperów statusu hosta pamięci |
| `plugin-sdk/memory-lancedb` | Powierzchnia helperów bundled `memory-lancedb` |
</Accordion>
<Accordion title="Zastrzeżone podścieżki pomocnicze dostarczane w pakiecie">
| Rodzina | Bieżące podścieżki | Zamierzone użycie |
<Accordion title="Zastrzeżone podścieżki bundled-helper">
| Family | Bieżące podścieżki | Zamierzone użycie |
| --- | --- | --- |
| Browser | `plugin-sdk/browser-cdp`, `plugin-sdk/browser-config-runtime`, `plugin-sdk/browser-config-support`, `plugin-sdk/browser-control-auth`, `plugin-sdk/browser-node-runtime`, `plugin-sdk/browser-profiles`, `plugin-sdk/browser-security-runtime`, `plugin-sdk/browser-setup-tools`, `plugin-sdk/browser-support` | Pomocniki wsparcia dla pluginu Browser dostarczanego w pakiecie (`browser-support` pozostaje barrelem zgodnościowym) |
| Matrix | `plugin-sdk/matrix`, `plugin-sdk/matrix-helper`, `plugin-sdk/matrix-runtime-heavy`, `plugin-sdk/matrix-runtime-shared`, `plugin-sdk/matrix-runtime-surface`, `plugin-sdk/matrix-surface`, `plugin-sdk/matrix-thread-bindings` | Powierzchnia pomocnicza/runtime Matrix dostarczana w pakiecie |
| Line | `plugin-sdk/line`, `plugin-sdk/line-core`, `plugin-sdk/line-runtime`, `plugin-sdk/line-surface` | Powierzchnia pomocnicza/runtime LINE dostarczana w pakiecie |
| IRC | `plugin-sdk/irc`, `plugin-sdk/irc-surface` | Powierzchnia pomocnicza IRC dostarczana w pakiecie |
| Pomocniki specyficzne dla kanałów | `plugin-sdk/googlechat`, `plugin-sdk/zalouser`, `plugin-sdk/bluebubbles`, `plugin-sdk/bluebubbles-policy`, `plugin-sdk/mattermost`, `plugin-sdk/mattermost-policy`, `plugin-sdk/feishu-conversation`, `plugin-sdk/msteams`, `plugin-sdk/nextcloud-talk`, `plugin-sdk/nostr`, `plugin-sdk/tlon`, `plugin-sdk/twitch` | Warstwy zgodnościowe/pomocnicze kanałów dostarczanych w pakiecie |
| Pomocniki specyficzne dla auth/pluginów | `plugin-sdk/github-copilot-login`, `plugin-sdk/github-copilot-token`, `plugin-sdk/diagnostics-otel`, `plugin-sdk/diffs`, `plugin-sdk/llm-task`, `plugin-sdk/thread-ownership`, `plugin-sdk/voice-call` | Warstwy pomocnicze funkcji/pluginów dostarczanych w pakiecie; `plugin-sdk/github-copilot-token` obecnie eksportuje `DEFAULT_COPILOT_API_BASE_URL`, `deriveCopilotApiBaseUrlFromToken` i `resolveCopilotApiToken` |
| Browser | `plugin-sdk/browser-cdp`, `plugin-sdk/browser-config-runtime`, `plugin-sdk/browser-config-support`, `plugin-sdk/browser-control-auth`, `plugin-sdk/browser-node-runtime`, `plugin-sdk/browser-profiles`, `plugin-sdk/browser-security-runtime`, `plugin-sdk/browser-setup-tools`, `plugin-sdk/browser-support` | Helpery wsparcia bundled pluginu Browser (`browser-support` pozostaje barrelem zgodności) |
| Matrix | `plugin-sdk/matrix`, `plugin-sdk/matrix-helper`, `plugin-sdk/matrix-runtime-heavy`, `plugin-sdk/matrix-runtime-shared`, `plugin-sdk/matrix-runtime-surface`, `plugin-sdk/matrix-surface`, `plugin-sdk/matrix-thread-bindings` | Powierzchnia helperów/runtime dla bundled Matrix |
| Line | `plugin-sdk/line`, `plugin-sdk/line-core`, `plugin-sdk/line-runtime`, `plugin-sdk/line-surface` | Powierzchnia helperów/runtime dla bundled LINE |
| IRC | `plugin-sdk/irc`, `plugin-sdk/irc-surface` | Powierzchnia helperów dla bundled IRC |
| Helpery specyficzne dla kanałów | `plugin-sdk/googlechat`, `plugin-sdk/zalouser`, `plugin-sdk/bluebubbles`, `plugin-sdk/bluebubbles-policy`, `plugin-sdk/mattermost`, `plugin-sdk/mattermost-policy`, `plugin-sdk/feishu-conversation`, `plugin-sdk/msteams`, `plugin-sdk/nextcloud-talk`, `plugin-sdk/nostr`, `plugin-sdk/tlon`, `plugin-sdk/twitch` | Ścieżki zgodności/helperów dla bundled kanałów |
| Helpery specyficzne dla auth/pluginów | `plugin-sdk/github-copilot-login`, `plugin-sdk/github-copilot-token`, `plugin-sdk/diagnostics-otel`, `plugin-sdk/diffs`, `plugin-sdk/llm-task`, `plugin-sdk/thread-ownership`, `plugin-sdk/voice-call` | Ścieżki helperów dla bundled funkcji/pluginów; `plugin-sdk/github-copilot-token` obecnie eksportuje `DEFAULT_COPILOT_API_BASE_URL`, `deriveCopilotApiBaseUrlFromToken` i `resolveCopilotApiToken` |
</Accordion>
</AccordionGroup>
@ -310,58 +324,58 @@ metodami:
### Rejestracja możliwości
| Metoda | Co rejestruje |
| Method | Co rejestruje |
| ------------------------------------------------ | ------------------------------------- |
| `api.registerProvider(...)` | Inferencję tekstową (LLM) |
| `api.registerAgentHarness(...)` | Eksperymentalny niskopoziomowy wykonawca agenta |
| `api.registerCliBackend(...)` | Lokalny backend inferencji CLI |
| `api.registerChannel(...)` | Kanał komunikacyjny |
| `api.registerSpeechProvider(...)` | Syntezę tekst-na-mowę / STT |
| `api.registerRealtimeTranscriptionProvider(...)` | Strumieniową transkrypcję w czasie rzeczywistym |
| `api.registerProvider(...)` | Wnioskowanie tekstowe (LLM) |
| `api.registerAgentHarness(...)` | Eksperymentalny niskopoziomowy executor agenta |
| `api.registerCliBackend(...)` | Lokalny backend wnioskowania CLI |
| `api.registerChannel(...)` | Kanał wiadomości |
| `api.registerSpeechProvider(...)` | Synteza tekst-na-mowę / STT |
| `api.registerRealtimeTranscriptionProvider(...)` | Strumieniowa transkrypcja w czasie rzeczywistym |
| `api.registerRealtimeVoiceProvider(...)` | Dwukierunkowe sesje głosowe w czasie rzeczywistym |
| `api.registerMediaUnderstandingProvider(...)` | Analizę obrazów/audio/wideo |
| `api.registerMediaUnderstandingProvider(...)` | Analiza obrazów/audio/wideo |
| `api.registerImageGenerationProvider(...)` | Generowanie obrazów |
| `api.registerMusicGenerationProvider(...)` | Generowanie muzyki |
| `api.registerVideoGenerationProvider(...)` | Generowanie wideo |
| `api.registerWebFetchProvider(...)` | Dostawcę web fetch / scrape |
| `api.registerWebFetchProvider(...)` | Dostawca web fetch / scrape |
| `api.registerWebSearchProvider(...)` | Wyszukiwanie w sieci |
### Narzędzia i komendy
| Metoda | Co rejestruje |
| Method | Co rejestruje |
| ------------------------------- | --------------------------------------------- |
| `api.registerTool(tool, opts?)` | Narzędzie agenta (wymagane lub `{ optional: true }`) |
| `api.registerCommand(def)` | Komendę niestandardową (z pominięciem LLM) |
| `api.registerCommand(def)` | Komenda niestandardowa (omija LLM) |
### Infrastruktura
| Metoda | Co rejestruje |
| Method | Co rejestruje |
| ---------------------------------------------- | --------------------------------------- |
| `api.registerHook(events, handler, opts?)` | Hook zdarzeń |
| `api.registerHttpRoute(params)` | Punkt końcowy HTTP Gateway |
| `api.registerGatewayMethod(name, handler)` | Metodę RPC Gateway |
| `api.registerCli(registrar, opts?)` | Podkomendę CLI |
| `api.registerService(service)` | Usługę działającą w tle |
| `api.registerInteractiveHandler(registration)` | Interaktywny handler |
| `api.registerMemoryPromptSupplement(builder)` | Dodatkową sekcję promptu związaną z pamięcią |
| `api.registerMemoryCorpusSupplement(adapter)` | Dodatkowy korpus pamięci do wyszukiwania/odczytu |
| `api.registerHttpRoute(params)` | Endpoint HTTP Gateway |
| `api.registerGatewayMethod(name, handler)` | Metoda RPC Gateway |
| `api.registerCli(registrar, opts?)` | Podkomenda CLI |
| `api.registerService(service)` | Usługa działająca w tle |
| `api.registerInteractiveHandler(registration)` | Handler interaktywny |
| `api.registerMemoryPromptSupplement(builder)` | Dodatkowa sekcja promptu powiązana z pamięcią |
| `api.registerMemoryCorpusSupplement(adapter)` | Dodatkowy korpus wyszukiwania/odczytu pamięci |
Zastrzeżone przestrzenie nazw administracyjnych core (`config.*`, `exec.approvals.*`, `wizard.*`,
Zastrzeżone przestrzenie nazw administracyjnych rdzenia (`config.*`, `exec.approvals.*`, `wizard.*`,
`update.*`) zawsze pozostają `operator.admin`, nawet jeśli plugin próbuje przypisać
węższy zakres metody Gateway. Dla
metod należących do pluginu preferuj prefiksy specyficzne dla pluginu.
### Metadane rejestracji CLI
`api.registerCli(registrar, opts?)` akceptuje dwa rodzaje metadanych najwyższego poziomu:
`api.registerCli(registrar, opts?)` przyjmuje dwa rodzaje metadanych najwyższego poziomu:
- `commands`: jawne korzenie komend należące do rejestratora
- `descriptors`: deskryptory komend czasu parsowania używane dla głównej pomocy CLI,
- `commands`: jawne korzenie komend należące do registrar
- `descriptors`: deskryptory komend na etapie parsowania używane do pomocy głównego CLI,
routingu i leniwej rejestracji CLI pluginu
Jeśli chcesz, aby komenda pluginu pozostała leniwie ładowana w zwykłej ścieżce głównego CLI,
Jeśli chcesz, aby komenda pluginu pozostawała leniwie ładowana w zwykłej ścieżce głównego CLI,
podaj `descriptors`, które obejmują każdy korzeń komendy najwyższego poziomu udostępniany przez ten
rejestrator.
registrar.
```typescript
api.registerCli(
@ -381,85 +395,84 @@ api.registerCli(
);
```
Używaj samego `commands` tylko wtedy, gdy nie potrzebujesz leniwej rejestracji w głównym CLI.
Używaj samego `commands` tylko wtedy, gdy nie potrzebujesz leniwej rejestracji głównego CLI.
Ta zgodnościowa ścieżka eager nadal jest wspierana, ale nie instaluje
placeholderów opartych na deskryptorach do leniwego ładowania w czasie parsowania.
placeholderów opartych na deskryptorach do leniwego ładowania na etapie parsowania.
### Rejestracja backendu CLI
`api.registerCliBackend(...)` pozwala pluginowi przejąć domyślną konfigurację dla lokalnego
`api.registerCliBackend(...)` pozwala pluginowi zarządzać domyślną konfiguracją lokalnego
backendu CLI AI, takiego jak `codex-cli`.
- `id` backendu staje się prefiksem dostawcy w odwołaniach do modeli takich jak `codex-cli/gpt-5`.
- `id` backendu staje się prefiksem dostawcy w odwołaniach do modeli, takich jak `codex-cli/gpt-5`.
- `config` backendu używa tego samego kształtu co `agents.defaults.cliBackends.<id>`.
- Konfiguracja użytkownika nadal ma pierwszeństwo. OpenClaw scala `agents.defaults.cliBackends.<id>` z domyślną konfiguracją
pluginu przed uruchomieniem CLI.
- Konfiguracja użytkownika nadal ma pierwszeństwo. OpenClaw scala `agents.defaults.cliBackends.<id>` z domyślną konfiguracją pluginu przed uruchomieniem CLI.
- Użyj `normalizeConfig`, gdy backend potrzebuje przepisania zgodności po scaleniu
(na przykład normalizacji starych kształtów flag).
### Sloty wyłączne
### Wyłączne sloty
| Metoda | Co rejestruje |
| Method | Co rejestruje |
| ------------------------------------------ | ----------------------------------------------------------------------------------------------------------------------------------------------------- |
| `api.registerContextEngine(id, factory)` | Silnik kontekstu (aktywny może być tylko jeden naraz). Callback `assemble()` otrzymuje `availableTools` i `citationsMode`, aby silnik mógł dopasować dodatki do promptu. |
| `api.registerMemoryCapability(capability)` | Ujednoliconą możliwość pamięci |
| `api.registerMemoryPromptSection(builder)` | Konstruktor sekcji promptu pamięci |
| `api.registerMemoryFlushPlan(resolver)` | Resolver planu opróżniania pamięci |
| `api.registerMemoryRuntime(runtime)` | Adapter runtime pamięci |
| `api.registerContextEngine(id, factory)` | Silnik kontekstu (aktywny tylko jeden naraz). Callback `assemble()` otrzymuje `availableTools` i `citationsMode`, aby silnik mógł dostosować dodatki do promptu. |
| `api.registerMemoryCapability(capability)` | Ujednolicona możliwość pamięci |
| `api.registerMemoryPromptSection(builder)` | Konstruktor sekcji promptu pamięci |
| `api.registerMemoryFlushPlan(resolver)` | Resolver planu opróżniania pamięci |
| `api.registerMemoryRuntime(runtime)` | Adapter runtime pamięci |
### Adaptery embeddingów pamięci
| Metoda | Co rejestruje |
| ---------------------------------------------- | ---------------------------------------------- |
| Method | Co rejestruje |
| ---------------------------------------------- | ------------------------------------------ |
| `api.registerMemoryEmbeddingProvider(adapter)` | Adapter embeddingów pamięci dla aktywnego pluginu |
- `registerMemoryCapability` to preferowane wyłączne API pluginu pamięci.
- `registerMemoryCapability` może także udostępniać `publicArtifacts.listArtifacts(...)`,
aby pluginy towarzyszące mogły korzystać z eksportowanych artefaktów pamięci przez
`openclaw/plugin-sdk/memory-host-core`, zamiast sięgać do prywatnego układu
`openclaw/plugin-sdk/memory-host-core` zamiast sięgać do prywatnego układu
konkretnego pluginu pamięci.
- `registerMemoryPromptSection`, `registerMemoryFlushPlan` i
`registerMemoryRuntime` to zgodnościowe starsze wyłączne API pluginu pamięci.
- `registerMemoryEmbeddingProvider` pozwala aktywnemu pluginowi pamięci rejestrować jeden
lub więcej identyfikatorów adapterów embeddingów (na przykład `openai`, `gemini` lub niestandardowy
identyfikator zdefiniowany przez plugin).
- `registerMemoryPromptSection`, `registerMemoryFlushPlan` oraz
`registerMemoryRuntime` to starsze, zgodnościowe wyłączne API pluginów pamięci.
- `registerMemoryEmbeddingProvider` pozwala aktywnemu pluginowi pamięci zarejestrować jeden
lub więcej identyfikatorów adapterów embeddingów (na przykład `openai`, `gemini` lub
niestandardowy identyfikator zdefiniowany przez plugin).
- Konfiguracja użytkownika, taka jak `agents.defaults.memorySearch.provider` i
`agents.defaults.memorySearch.fallback`, jest rozstrzygana względem tych zarejestrowanych
`agents.defaults.memorySearch.fallback`, jest rozwiązywana względem tych zarejestrowanych
identyfikatorów adapterów.
### Zdarzenia i cykl życia
| Metoda | Co robi |
| -------------------------------------------- | --------------------------- |
| `api.on(hookName, handler, opts?)` | Typowany hook cyklu życia |
| `api.onConversationBindingResolved(handler)` | Callback rozstrzygnięcia wiązania konwersacji |
| Method | Co robi |
| -------------------------------------------- | ---------------------------- |
| `api.on(hookName, handler, opts?)` | Typowany hook cyklu życia |
| `api.onConversationBindingResolved(handler)` | Callback rozwiązania powiązania konwersacji |
### Semantyka decyzji hooków
- `before_tool_call`: zwrócenie `{ block: true }` jest rozstrzygające. Gdy dowolny handler to ustawi, handlery o niższym priorytecie są pomijane.
- `before_tool_call`: zwrócenie `{ block: true }` jest końcowe. Gdy dowolny handler to ustawi, handlery o niższym priorytecie są pomijane.
- `before_tool_call`: zwrócenie `{ block: false }` jest traktowane jako brak decyzji (tak samo jak pominięcie `block`), a nie jako nadpisanie.
- `before_install`: zwrócenie `{ block: true }` jest rozstrzygające. Gdy dowolny handler to ustawi, handlery o niższym priorytecie są pomijane.
- `before_install`: zwrócenie `{ block: true }` jest końcowe. Gdy dowolny handler to ustawi, handlery o niższym priorytecie są pomijane.
- `before_install`: zwrócenie `{ block: false }` jest traktowane jako brak decyzji (tak samo jak pominięcie `block`), a nie jako nadpisanie.
- `reply_dispatch`: zwrócenie `{ handled: true, ... }` jest rozstrzygające. Gdy dowolny handler przejmie dyspozycję, handlery o niższym priorytecie i domyślna ścieżka dyspozycji modelu są pomijane.
- `message_sending`: zwrócenie `{ cancel: true }` jest rozstrzygające. Gdy dowolny handler to ustawi, handlery o niższym priorytecie są pomijane.
- `reply_dispatch`: zwrócenie `{ handled: true, ... }` jest końcowe. Gdy dowolny handler przejmie dispatch, handlery o niższym priorytecie oraz domyślna ścieżka dispatchu modelu są pomijane.
- `message_sending`: zwrócenie `{ cancel: true }` jest końcowe. Gdy dowolny handler to ustawi, handlery o niższym priorytecie są pomijane.
- `message_sending`: zwrócenie `{ cancel: false }` jest traktowane jako brak decyzji (tak samo jak pominięcie `cancel`), a nie jako nadpisanie.
### Pola obiektu API
| Pole | Typ | Opis |
| ------------------------ | ------------------------- | ------------------------------------------------------------------------------------------ |
| `api.id` | `string` | Identyfikator pluginu |
| `api.name` | `string` | Nazwa wyświetlana |
| `api.version` | `string?` | Wersja pluginu (opcjonalna) |
| `api.description` | `string?` | Opis pluginu (opcjonalny) |
| `api.source` | `string` | Ścieżka źródłowa pluginu |
| `api.rootDir` | `string?` | Katalog główny pluginu (opcjonalny) |
| `api.config` | `OpenClawConfig` | Bieżąca migawka konfiguracji (aktywny snapshot runtime w pamięci, gdy jest dostępny) |
| `api.pluginConfig` | `Record<string, unknown>` | Konfiguracja specyficzna dla pluginu z `plugins.entries.<id>.config` |
| `api.runtime` | `PluginRuntime` | [Pomocniki runtime](/pl/plugins/sdk-runtime) |
| `api.logger` | `PluginLogger` | Logger o zawężonym zakresie (`debug`, `info`, `warn`, `error`) |
| `api.registrationMode` | `PluginRegistrationMode` | Bieżący tryb ładowania; `"setup-runtime"` to lekkie okno uruchamiania/konfiguracji przed pełnym wejściem |
| `api.resolvePath(input)` | `(string) => string` | Rozstrzyga ścieżkę względem katalogu głównego pluginu |
| Field | Type | Description |
| ------------------------ | ------------------------- | ------------------------------------------------------------------------------------------- |
| `api.id` | `string` | Identyfikator pluginu |
| `api.name` | `string` | Nazwa wyświetlana |
| `api.version` | `string?` | Wersja pluginu (opcjonalnie) |
| `api.description` | `string?` | Opis pluginu (opcjonalnie) |
| `api.source` | `string` | Ścieżka źródłowa pluginu |
| `api.rootDir` | `string?` | Katalog główny pluginu (opcjonalnie) |
| `api.config` | `OpenClawConfig` | Bieżący zrzut konfiguracji (aktywny zrzut runtime w pamięci, gdy jest dostępny) |
| `api.pluginConfig` | `Record<string, unknown>` | Konfiguracja specyficzna dla pluginu z `plugins.entries.<id>.config` |
| `api.runtime` | `PluginRuntime` | [Helpery runtime](/pl/plugins/sdk-runtime) |
| `api.logger` | `PluginLogger` | Logger z zakresem (`debug`, `info`, `warn`, `error`) |
| `api.registrationMode` | `PluginRegistrationMode` | Bieżący tryb ładowania; `"setup-runtime"` to lekkie okno uruchamiania/konfiguracji przed pełnym entry |
| `api.resolvePath(input)` | `(string) => string` | Rozwiązywanie ścieżki względem katalogu głównego pluginu |
## Konwencja modułów wewnętrznych
@ -468,9 +481,9 @@ W obrębie pluginu używaj lokalnych plików barrel do importów wewnętrznych:
```
my-plugin/
api.ts # Publiczne eksporty dla zewnętrznych odbiorców
runtime-api.ts # Eksporty runtime wyłącznie do użytku wewnętrznego
runtime-api.ts # Eksporty runtime tylko do użytku wewnętrznego
index.ts # Punkt wejścia pluginu
setup-entry.ts # Lekki punkt wejścia tylko do konfiguracji (opcjonalny)
setup-entry.ts # Lekki entry tylko do konfiguracji (opcjonalnie)
```
<Warning>
@ -479,37 +492,37 @@ my-plugin/
`./runtime-api.ts`. Ścieżka SDK jest wyłącznie kontraktem zewnętrznym.
</Warning>
Ładowane przez fasadę publiczne powierzchnie pluginów dostarczanych w pakiecie (`api.ts`, `runtime-api.ts`,
`index.ts`, `setup-entry.ts` i podobne publiczne pliki wejściowe) preferują teraz
aktywną migawkę konfiguracji runtime, gdy OpenClaw już działa. Jeśli migawka runtime
nie istnieje jeszcze, wracają do rozstrzygniętego pliku konfiguracji na dysku.
Ładowane przez fasadę publiczne powierzchnie bundled pluginów (`api.ts`, `runtime-api.ts`,
`index.ts`, `setup-entry.ts` oraz podobne publiczne pliki entry) preferują teraz
aktywny zrzut konfiguracji runtime, gdy OpenClaw już działa. Jeśli zrzut runtime
nie istnieje jeszcze, wracają do rozwiązanej konfiguracji na dysku.
Pluginy dostawców mogą także udostępniać wąski lokalny barrel kontraktu pluginu, gdy
pomocnik jest celowo specyficzny dla dostawcy i nie należy jeszcze do generycznej podścieżki SDK.
Bieżący przykład dostarczany w pakiecie: dostawca Anthropic przechowuje swoje pomocniki
strumieni Claude we własnej publicznej warstwie `api.ts` / `contract-api.ts`, zamiast
promować logikę nagłówków beta Anthropic i `service_tier` do generycznego
kontraktu `plugin-sdk/*`.
Pluginy dostawców mogą również udostępniać wąski, lokalny barrel kontraktów pluginu, gdy
helper jest celowo specyficzny dla dostawcy i nie należy jeszcze do ogólnej podścieżki SDK.
Bieżący bundled przykład: dostawca Anthropic trzyma swoje helpery strumieni Claude
we własnej publicznej ścieżce `api.ts` / `contract-api.ts`, zamiast promować logikę
nagłówków beta Anthropic i `service_tier` do ogólnego kontraktu
`plugin-sdk/*`.
Inne bieżące przykłady dostarczane w pakiecie:
Inne bieżące bundled przykłady:
- `@openclaw/openai-provider`: `api.ts` eksportuje konstruktory dostawców,
pomocniki modeli domyślnych i konstruktory dostawców realtime
helpery modeli domyślnych i konstruktory dostawców realtime
- `@openclaw/openrouter-provider`: `api.ts` eksportuje konstruktor dostawcy oraz
pomocniki onboardingu/konfiguracji
helpery onboardingu/konfiguracji
<Warning>
Kod produkcyjny rozszerzeń powinien także unikać importów `openclaw/plugin-sdk/<other-plugin>`.
Jeśli pomocnik jest rzeczywiście współdzielony, przenieś go do neutralnej podścieżki SDK,
Kod produkcyjny rozszerzeń powinien również unikać importów `openclaw/plugin-sdk/<other-plugin>`.
Jeśli helper jest rzeczywiście współdzielony, przenieś go do neutralnej podścieżki SDK,
takiej jak `openclaw/plugin-sdk/speech`, `.../provider-model-shared` lub innej
powierzchni zorientowanej na możliwości, zamiast ściśle wiązać ze sobą dwa pluginy.
powierzchni zorientowanej na możliwości, zamiast wiązać ze sobą dwa pluginy.
</Warning>
## Powiązane
- [Punkty wejścia](/pl/plugins/sdk-entrypoints) — opcje `definePluginEntry` i `defineChannelPluginEntry`
- [Pomocniki runtime](/pl/plugins/sdk-runtime) — pełna dokumentacja przestrzeni nazw `api.runtime`
- [Helpery runtime](/pl/plugins/sdk-runtime) — pełny opis przestrzeni nazw `api.runtime`
- [Konfiguracja i config](/pl/plugins/sdk-setup) — pakowanie, manifesty, schematy konfiguracji
- [Testowanie](/pl/plugins/sdk-testing) — narzędzia testowe i reguły lint
- [Migracja SDK](/pl/plugins/sdk-migration) — migracja ze starszych, wycofywanych powierzchni
- [Migracja SDK](/pl/plugins/sdk-migration) — migracja z przestarzałych powierzchni
- [Wnętrze pluginów](/pl/plugins/architecture) — szczegółowa architektura i model możliwości

View File

@ -1,34 +1,34 @@
---
x-i18n:
generated_at: "2026-04-08T06:02:00Z"
generated_at: "2026-04-18T09:35:21Z"
model: gpt-5.4
provider: openai
source_hash: 4a9066b2a939c5a9ba69141d75405f0e8097997b523164340e2f0e9a0d5060dd
source_hash: dbb2c70c82da7f6f12d90e25666635ff4147c52e8a94135e902d1de4f5cbccca
source_path: refactor/qa.md
workflow: 15
---
# Refaktoryzacja QA
Status: podstawowa migracja została wdrożona.
Status: migracja fundamentalna została wdrożona.
## Cel
Przenieść QA OpenClaw z modelu podzielonych definicji do jednego źródła prawdy:
Przenieść QA OpenClaw z modelu rozdzielonych definicji do jednego źródła prawdy dla:
- metadane scenariuszy
- prompty wysyłane do modelu
- konfiguracja początkowa i końcowa
- logika harnessu
- asercje i kryteria powodzenia
- artefakty i wskazówki do raportów
- metadanych scenariusza
- promptów wysyłanych do modelu
- konfiguracji i teardown
- logiki harnessu
- asercji i kryteriów sukcesu
- artefaktów i wskazówek do raportów
Docelowym stanem ma być generyczny harness QA, który wczytuje rozbudowane pliki definicji scenariuszy zamiast kodować większość zachowań na sztywno w TypeScript.
Pożądanym stanem końcowym jest generyczny harness QA, który ładuje rozbudowane pliki definicji scenariuszy zamiast hardcodować większość zachowań w TypeScript.
## Stan obecny
Główne źródło prawdy znajduje się teraz w `qa/scenarios/index.md` oraz w jednym pliku
na scenariusz w `qa/scenarios/*.md`.
Główne źródło prawdy znajduje się teraz w `qa/scenarios/index.md` oraz po jednym pliku na
scenariusz w `qa/scenarios/<theme>/*.md`.
Wdrożone:
@ -36,104 +36,104 @@ Wdrożone:
- kanoniczne metadane pakietu QA
- tożsamość operatora
- misja startowa
- `qa/scenarios/*.md`
- jeden plik Markdown na scenariusz
- `qa/scenarios/<theme>/*.md`
- jeden plik markdown na scenariusz
- metadane scenariusza
- powiązania handlerów
- konfiguracja wykonania specyficzna dla scenariusza
- `extensions/qa-lab/src/scenario-catalog.ts`
- parser pakietu Markdown + walidacja zod
- parser pakietu markdown + walidacja zod
- `extensions/qa-lab/src/qa-agent-bootstrap.ts`
- renderowanie planu z pakietu Markdown
- renderowanie planu z pakietu markdown
- `extensions/qa-lab/src/qa-agent-workspace.ts`
- seeduje wygenerowane pliki zgodności oraz `QA_SCENARIOS.md`
- `extensions/qa-lab/src/suite.ts`
- wybiera wykonywalne scenariusze przez zdefiniowane w Markdown powiązania handlerów
- Protokół magistrali QA + UI
- generyczne osadzone załączniki do renderowania obrazów/wideo/audio/plików
- wybiera wykonywalne scenariusze przez powiązania handlerów zdefiniowane w markdown
- protokół magistrali QA + UI
- generyczne załączniki inline do renderowania obrazów/wideo/audio/plików
Pozostałe rozdzielone powierzchnie:
- `extensions/qa-lab/src/suite.ts`
- nadal zawiera większość wykonywalnej niestandardowej logiki handlerów
- nadal zawiera większość wykonywalnej logiki niestandardowych handlerów
- `extensions/qa-lab/src/report.ts`
- nadal wyprowadza strukturę raportu na podstawie wyników wykonania
- nadal wyprowadza strukturę raportu z wyników runtime
Czyli podział źródła prawdy został naprawiony, ale wykonanie nadal jest w większości oparte na handlerach zamiast w pełni deklaratywne.
Rozdzielenie źródła prawdy zostało więc naprawione, ale wykonanie nadal jest w większości oparte na handlerach, a nie w pełni deklaratywne.
## Jak naprawdę wygląda powierzchnia scenariuszy
## Jak wygląda rzeczywista powierzchnia scenariuszy
Odczyt obecnego suite pokazuje kilka odrębnych klas scenariuszy.
Odczyt bieżącego suite pokazuje kilka odrębnych klas scenariuszy.
### Prosta interakcja
- bazowy kanał
- bazowa DM
- wątkowana kontynuacja
- przełączenie modelu
- dokończenie po zatwierdzeniu
- bazowy DM
- dalszy ciąg w wątku
- przełączanie modelu
- doprowadzenie zatwierdzenia do końca
- reakcja/edycja/usunięcie
### Mutacja konfiguracji i środowiska uruchomieniowego
### Mutacja konfiguracji i runtime
- wyłączenie umiejętności przez poprawkę konfiguracji
- config patch skill disable
- config apply restart wake-up
- zmiana możliwości po restarcie konfiguracji
- sprawdzenie dryfu inwentarza runtime
- config restart capability flip
- runtime inventory drift check
### Asercje dotyczące systemu plików i repozytorium
### Asercje systemu plików i repozytorium
- raport odkrywania źródeł/dokumentacji
- zbudowanie Lobster Invaders
- wyszukiwanie wygenerowanego artefaktu obrazu
- source/docs discovery report
- build Lobster Invaders
- generated image artifact lookup
### Orkiestracja pamięci
- przywołanie pamięci
- narzędzia pamięci w kontekście kanału
- awaryjny fallback pamięci
- ranking pamięci sesji
- izolacja pamięci wątku
- przebieg śnienia pamięci
- memory recall
- memory tools in channel context
- memory failure fallback
- session memory ranking
- thread memory isolation
- memory dreaming sweep
### Integracja narzędzi i pluginów
### Integracja narzędzi i Plugin
- wywołanie MCP plugin-tools
- widoczność Skills
- hot install umiejętności
- natywne generowanie obrazów
- roundtrip obrazu
- rozumienie obrazu z załącznika
- MCP plugin-tools call
- skill visibility
- skill hot install
- native image generation
- image roundtrip
- image understanding from attachment
### Wieloturowe i wieloosobowe
### Wiele tur i wielu aktorów
- przekazanie do subagenta
- synteza fanout subagentów
- przepływy w stylu odzyskiwania po restarcie
- subagent handoff
- subagent fanout synthesis
- flows w stylu restart recovery
Te kategorie są ważne, ponieważ wyznaczają wymagania DSL. Płaska lista promptów + oczekiwanego tekstu nie wystarczy.
Te kategorie mają znaczenie, ponieważ determinują wymagania DSL. Płaska lista prompt + oczekiwany tekst nie wystarczy.
## Kierunek
### Jedno źródło prawdy
Używać `qa/scenarios/index.md` oraz `qa/scenarios/*.md` jako redagowanego źródła
prawdy.
Używaj `qa/scenarios/index.md` oraz `qa/scenarios/<theme>/*.md` jako autorskiego
źródła prawdy.
Pakiet powinien pozostać:
- czytelny dla człowieka w przeglądzie
- czytelny dla człowieka w review
- parsowalny maszynowo
- wystarczająco bogaty, by napędzać:
- wykonywanie suite
- bootstrap przestrzeni roboczej QA
- wystarczająco bogaty, aby obsługiwać:
- wykonanie suite
- bootstrap obszaru roboczego QA
- metadane UI QA Lab
- prompty dokumentacji/odkrywania
- prompty docs/discovery
- generowanie raportów
### Preferowany format redagowania
### Preferowany format autorski
Używać Markdown jako formatu najwyższego poziomu, ze strukturalnym YAML wewnątrz.
Używaj markdown jako formatu najwyższego poziomu, ze strukturalnym YAML w środku.
Zalecany kształt:
@ -144,25 +144,25 @@ Zalecany kształt:
- tags
- docs refs
- code refs
- nadpisania modelu/dostawcy
- wymagania wstępne
- sekcje opisowe
- cel
- uwagi
- wskazówki debugowania
- model/provider overrides
- prerequisites
- sekcje prozy
- objective
- notes
- debugging hints
- ogrodzone bloki YAML
- setup
- steps
- assertions
- cleanup
Daje to:
To daje:
- lepszą czytelność PR niż ogromny JSON
- bogatszy kontekst niż czysty YAML
- ścisłe parsowanie i walidację zod
Surowy JSON jest akceptowalny tylko jako pośrednia forma generowana.
Surowy JSON jest akceptowalny tylko jako pośrednia forma wygenerowana.
## Proponowany kształt pliku scenariusza
@ -239,9 +239,9 @@ Verify generated media is reattached on the follow-up turn.
## Możliwości runnera, które DSL musi obejmować
Na podstawie obecnego suite generyczny runner potrzebuje czegoś więcej niż wykonywania promptów.
Na podstawie bieżącego suite generyczny runner potrzebuje więcej niż wykonywania promptów.
### Akcje środowiskowe i konfiguracyjne
### Akcje środowiska i konfiguracji
- `bus.reset`
- `gateway.waitHealthy`
@ -266,7 +266,7 @@ Na podstawie obecnego suite generyczny runner potrzebuje czegoś więcej niż wy
- `tools.effective`
- `skills.status`
### Akcje na plikach i artefaktach
### Akcje plików i artefaktów
- `file.write`
- `file.read`
@ -275,7 +275,7 @@ Na podstawie obecnego suite generyczny runner potrzebuje czegoś więcej niż wy
- `artifact.captureGeneratedImage`
- `artifact.capturePath`
### Akcje pamięci i crona
### Akcje pamięci i Cron
- `memory.indexForce`
- `memory.searchCli`
@ -305,66 +305,66 @@ Na podstawie obecnego suite generyczny runner potrzebuje czegoś więcej niż wy
- `cron.managedPresent`
- `artifact.exists`
## Zmienne i odwołania do artefaktów
## Zmienne i referencje do artefaktów
DSL musi obsługiwać zapisane wyniki i późniejsze odwołania.
DSL musi obsługiwać zapisane wyjścia i późniejsze referencje.
Przykłady z obecnego suite:
Przykłady z bieżącego suite:
- utworzyć wątek, a potem ponownie użyć `threadId`
- utworzyć sesję, a potem ponownie użyć `sessionKey`
- wygenerować obraz, a następnie dołączyć plik w kolejnej turze
- wygenerować ciąg znacznika wybudzenia, a następnie sprawdzić, że pojawia się później
- utworzyć wątek, a następnie ponownie użyć `threadId`
- utworzyć sesję, a następnie ponownie użyć `sessionKey`
- wygenerować obraz, a następnie dołączyć plik w następnej turze
- wygenerować ciąg wake marker, a następnie sprawdzić, czy pojawi się później
Potrzebne możliwości:
- `saveAs`
- `${vars.name}`
- `${artifacts.name}`
- typowane odwołania do ścieżek, kluczy sesji, identyfikatorów wątków, znaczników, wyników narzędzi
- typowane referencje dla ścieżek, kluczy sesji, identyfikatorów wątków, markerów, wyjść narzędzi
Bez obsługi zmiennych harness będzie dalej przeciekał logiką scenariuszy z powrotem do TypeScript.
Bez obsługi zmiennych harness będzie nadal wypychał logikę scenariuszy z powrotem do TypeScript.
## Co powinno pozostać furtkami awaryjnymi
## Co powinno pozostać jako escape hatches
W fazie 1 w pełni czysto deklaratywny runner nie jest realistyczny.
W pełni czysto deklaratywny runner nie jest realistyczny w fazie 1.
Niektóre scenariusze są z natury silnie orkiestracyjne:
Niektóre scenariusze z natury wymagają cięższej orkiestracji:
- przebieg śnienia pamięci
- memory dreaming sweep
- config apply restart wake-up
- config restart capability flip
- rozwiązywanie wygenerowanego artefaktu obrazu po znaczniku czasu/ścieżce
- ocena discovery-report
- generated image artifact resolution by timestamp/path
- discovery-report evaluation
Na razie powinny używać jawnych niestandardowych handlerów.
Na razie powinny one używać jawnych niestandardowych handlerów.
Zalecana reguła:
Zalecana zasada:
- 85-90% deklaratywnie
- jawne kroki `customHandler` dla trudnej reszty
- tylko nazwane i udokumentowane niestandardowe handlery
- bez anonimowego kodu inline w pliku scenariusza
- jawne kroki `customHandler` dla trudnej pozostałości
- tylko nazwane i udokumentowane custom handlery
- brak anonimowego kodu inline w pliku scenariusza
To utrzymuje generyczny silnik w czystości, a jednocześnie pozwala nadal robić postępy.
To utrzymuje generyczny silnik w czystości, a jednocześnie pozwala iść naprzód.
## Zmiana architektury
### Obecnie
Markdown scenariuszy jest już źródłem prawdy dla:
Markdown scenariusza jest już źródłem prawdy dla:
- wykonywania suite
- plików bootstrap przestrzeni roboczej
- wykonania suite
- plików bootstrap obszaru roboczego
- katalogu scenariuszy UI QA Lab
- metadanych raportów
- promptów discovery
Wygenerowana zgodność:
- seedowana przestrzeń robocza nadal zawiera `QA_KICKOFF_TASK.md`
- seedowana przestrzeń robocza nadal zawiera `QA_SCENARIO_PLAN.md`
- seedowana przestrzeń robocza zawiera teraz także `QA_SCENARIOS.md`
- seedowany obszar roboczy nadal zawiera `QA_KICKOFF_TASK.md`
- seedowany obszar roboczy nadal zawiera `QA_SCENARIO_PLAN.md`
- seedowany obszar roboczy zawiera teraz także `QA_SCENARIOS.md`
## Plan refaktoryzacji
@ -373,69 +373,69 @@ Wygenerowana zgodność:
Gotowe.
- dodano `qa/scenarios/index.md`
- rozdzielono scenariusze do `qa/scenarios/*.md`
- dodano parser dla nazwanej zawartości pakietu Markdown YAML
- rozdzielono scenariusze do `qa/scenarios/<theme>/*.md`
- dodano parser nazwanej zawartości pakietu markdown YAML
- zwalidowano za pomocą zod
- przełączono konsumentów na sparsowany pakiet
- usunięto repozytoryjne `qa/seed-scenarios.json` oraz `qa/QA_KICKOFF_TASK.md`
- usunięto repo-level `qa/seed-scenarios.json` oraz `qa/QA_KICKOFF_TASK.md`
### Faza 2: silnik generyczny
### Faza 2: generyczny silnik
- podzielić `extensions/qa-lab/src/suite.ts` na:
- rozdziel `extensions/qa-lab/src/suite.ts` na:
- loader
- engine
- silnik
- rejestr akcji
- rejestr asercji
- niestandardowe handlery
- zachować istniejące funkcje pomocnicze jako operacje silnika
- custom handlery
- zachowaj istniejące funkcje pomocnicze jako operacje silnika
Rezultat:
- silnik wykonuje proste scenariusze deklaratywne
Zacząć od scenariuszy, które w większości sprowadzają się do prompt + wait + assert:
Zacznij od scenariuszy, które są głównie prompt + wait + assert:
- wątkowana kontynuacja
- rozumienie obrazu z załącznika
- widoczność i wywoływanie umiejętności
- bazowy kanał
- threaded follow-up
- image understanding from attachment
- skill visibility and invocation
- channel baseline
Rezultat:
- pierwsze rzeczywiste scenariusze zdefiniowane w Markdown dostarczane przez generyczny silnik
- pierwsze rzeczywiste scenariusze zdefiniowane w markdown dostarczane przez generyczny silnik
### Faza 4: migracja scenariuszy średniej trudności
- roundtrip generowania obrazu
- narzędzia pamięci w kontekście kanału
- ranking pamięci sesji
- przekazanie do subagenta
- synteza fanout subagentów
- image generation roundtrip
- memory tools in channel context
- session memory ranking
- subagent handoff
- subagent fanout synthesis
Rezultat:
- sprawdzone zmienne, artefakty, asercje narzędzi oraz asercje request-log
- udowodnione zmienne, artefakty, asercje narzędzi i asercje request-log
### Faza 5: pozostawić trudne scenariusze na niestandardowych handlerach
### Faza 5: pozostawienie trudnych scenariuszy na custom handlerach
- przebieg śnienia pamięci
- memory dreaming sweep
- config apply restart wake-up
- config restart capability flip
- dryf inwentarza runtime
- runtime inventory drift
Rezultat:
- ten sam format redagowania, ale z jawnymi blokami niestandardowych kroków tam, gdzie są potrzebne
- ten sam format autorski, ale z jawnymi blokami custom-step tam, gdzie to potrzebne
### Faza 6: usunięcie zakodowanej na sztywno mapy scenariuszy
### Faza 6: usunięcie hardcodowanej mapy scenariuszy
Gdy pokrycie pakietu będzie wystarczająco dobre:
- usunąć większość rozgałęzień TypeScript specyficznych dla scenariuszy z `extensions/qa-lab/src/suite.ts`
- usuń większość branchingu TypeScript specyficznego dla scenariuszy z `extensions/qa-lab/src/suite.ts`
## Fake Slack / obsługa bogatych mediów
## Obsługa fake Slack / rich media
Obecna magistrala QA jest zorientowana głównie na tekst.
Obecna magistrala QA jest zorientowana przede wszystkim na tekst.
Istotne pliki:
@ -445,17 +445,17 @@ Istotne pliki:
- `extensions/qa-lab/src/bus-server.ts`
- `extensions/qa-lab/web/src/ui-render.ts`
Obecnie magistrala QA obsługuje:
Dziś magistrala QA obsługuje:
- tekst
- reakcje
- wątki
Nie modeluje jeszcze osadzonych załączników multimedialnych.
Nie modeluje jeszcze załączników multimedialnych inline.
### Potrzebny kontrakt transportowy
Dodać generyczny model załączników magistrali QA:
Dodaj generyczny model załączników magistrali QA:
```ts
type QaBusAttachment = {
@ -474,7 +474,7 @@ type QaBusAttachment = {
};
```
Następnie dodać `attachments?: QaBusAttachment[]` do:
Następnie dodaj `attachments?: QaBusAttachment[]` do:
- `QaBusMessage`
- `QaBusInboundMessageInput`
@ -482,32 +482,32 @@ Następnie dodać `attachments?: QaBusAttachment[]` do:
### Dlaczego najpierw generycznie
Nie budować modelu mediów tylko dla Slack.
Nie buduj modelu mediów tylko dla Slack.
Zamiast tego:
- jeden generyczny model transportu QA
- wiele rendererów nad nim
- obecny czat QA Lab
- przyszły fake Slack web
- wszelkie inne widoki fałszywego transportu
- bieżący czat QA Lab
- przyszły web fake Slack
- dowolne inne widoki fałszywego transportu
To zapobiega duplikacji logiki i pozwala scenariuszom multimedialnym pozostać niezależnymi od transportu.
### Potrzebne prace w UI
Zaktualizować UI QA, aby renderowało:
Zaktualizuj UI QA, aby renderować:
- podgląd obrazu inline
- odtwarzacz audio inline
- odtwarzacz wideo inline
- chip załącznika pliku
Obecne UI potrafi już renderować wątki i reakcje, więc renderowanie załączników powinno dać się nałożyć na ten sam model kart wiadomości.
Obecne UI potrafi już renderować wątki i reakcje, więc renderowanie załączników powinno zostać dołożone do tego samego modelu karty wiadomości.
### Prace nad scenariuszami odblokowane przez transport mediów
### Prace nad scenariuszami odblokowane przez transport multimediów
Gdy załączniki zaczną przepływać przez magistralę QA, będzie można dodać bogatsze scenariusze fałszywego czatu:
Gdy załączniki będą przepływać przez magistralę QA, będzie można dodać bogatsze scenariusze fake-chat:
- odpowiedź z obrazem inline w fake Slack
- rozumienie załącznika audio
@ -517,24 +517,24 @@ Gdy załączniki zaczną przepływać przez magistralę QA, będzie można doda
## Rekomendacja
Kolejny etap implementacji powinien obejmować:
Następny fragment implementacji powinien obejmować:
1. dodanie loadera scenariuszy Markdown + schematu zod
2. wygenerowanie obecnego katalogu z Markdown
1. dodanie loadera scenariuszy markdown + schematu zod
2. generowanie bieżącego katalogu z markdown
3. najpierw migrację kilku prostych scenariuszy
4. dodanie generycznej obsługi załączników magistrali QA
5. renderowanie obrazu inline w UI QA
6. a potem rozszerzenie na audio i wideo
6. następnie rozszerzenie na audio i wideo
To najmniejsza ścieżka, która potwierdza oba cele:
- generyczne QA zdefiniowane w Markdown
- generyczne QA definiowane w markdown
- bogatsze fałszywe powierzchnie komunikacyjne
## Otwarte pytania
- czy pliki scenariuszy powinny pozwalać na osadzone szablony promptów Markdown z interpolacją zmiennych
- czy setup/cleanup powinny być nazwanymi sekcjami, czy tylko uporządkowanymi listami akcji
- czy odwołania do artefaktów powinny być silnie typowane w schemacie, czy oparte na ciągach znaków
- czy niestandardowe handlery powinny znajdować się w jednym rejestrze, czy w rejestrach per surface
- czy wygenerowany plik zgodności JSON powinien pozostać zatwierdzany w repozytorium podczas migracji
- czy pliki scenariuszy powinny pozwalać na osadzone szablony promptów w markdown z interpolacją zmiennych
- czy setup/cleanup powinny być nazwanymi sekcjami, czy po prostu uporządkowanymi listami akcji
- czy referencje do artefaktów powinny być silnie typowane w schemacie, czy oparte na stringach
- czy custom handlery powinny znajdować się w jednym rejestrze, czy w rejestrach per surface
- czy wygenerowany plik zgodności JSON powinien pozostać commitowany w trakcie migracji