From b5ebae404b20460ce175d64d963bf52c178d6605 Mon Sep 17 00:00:00 2001 From: "openclaw-docs-i18n[bot]" Date: Sat, 18 Apr 2026 09:45:04 +0000 Subject: [PATCH] chore(i18n): refresh pl translations --- docs/pl/concepts/agent-workspace.md | 130 +-- docs/pl/concepts/context.md | 126 +- docs/pl/concepts/qa-e2e-automation.md | 195 ++-- docs/pl/concepts/system-prompt.md | 181 ++- docs/pl/gateway/configuration-reference.md | 1200 ++++++++++---------- docs/pl/help/testing.md | 747 ++++++------ docs/pl/plugins/sdk-channel-plugins.md | 278 ++--- docs/pl/plugins/sdk-overview.md | 591 +++++----- docs/pl/refactor/qa.md | 306 ++--- 9 files changed, 1891 insertions(+), 1863 deletions(-) diff --git a/docs/pl/concepts/agent-workspace.md b/docs/pl/concepts/agent-workspace.md index 3a74b124f..964f1f321 100644 --- a/docs/pl/concepts/agent-workspace.md +++ b/docs/pl/concepts/agent-workspace.md @@ -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-`. -- 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//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//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 `, aby zasilić brakujące pliki. +3. Uruchom `openclaw setup --workspace `, aby dodać brakujące pliki. 4. Jeśli potrzebujesz sesji, skopiuj `~/.openclaw/agents//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 diff --git a/docs/pl/concepts/context.md b/docs/pl/concepts/context.md index cd3d1ff08..067116e0a 100644 --- a/docs/pl/concepts/context.md +++ b/docs/pl/concepts/context.md @@ -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: -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 są_ 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 diff --git a/docs/pl/concepts/qa-e2e-automation.md b/docs/pl/concepts/qa-e2e-automation.md index 882823efe..8718992fb 100644 --- a/docs/pl/concepts/qa-e2e-automation.md +++ b/docs/pl/concepts/qa-e2e-automation.md @@ -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=` 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=` 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 `, 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 `, 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//*.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=`. `--thinking ` nadal ustawia globalny fallback, a starsza forma `--model-thinking ` 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`. diff --git a/docs/pl/concepts/system-prompt.md b/docs/pl/concepts/system-prompt.md index c43c34762..890252d9a 100644 --- a/docs/pl/concepts/system-prompt.md +++ b/docs/pl/concepts/system-prompt.md @@ -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 ``` -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). diff --git a/docs/pl/gateway/configuration-reference.md b/docs/pl/gateway/configuration-reference.md index 2549c3527..cafba0022 100644 --- a/docs/pl/gateway/configuration-reference.md +++ b/docs/pl/gateway/configuration-reference.md @@ -1,37 +1,37 @@ --- read_when: - - Potrzebujesz dokładnej semantyki pól konfiguracji lub wartości domyślnych. - - Weryfikujesz bloki konfiguracji kanału, modelu, Gateway lub narzędzia. -summary: Dokumentacja konfiguracji Gateway dla podstawowych kluczy OpenClaw, wartości domyślnych i odnośników do dedykowanych dokumentacji podsystemów -title: Dokumentacja konfiguracji + - Potrzebujesz dokładnej semantyki pól konfiguracji lub wartości domyślnych + - Weryfikujesz bloki konfiguracji kanału, modelu, Gateway lub narzędzia +summary: Odwołanie do konfiguracji Gateway dla podstawowych kluczy OpenClaw, wartości domyślnych i odnośników do dedykowanych opisów podsystemów +title: Odwołanie do konfiguracji x-i18n: - generated_at: "2026-04-15T19:41:43Z" + generated_at: "2026-04-18T09:34:54Z" model: gpt-5.4 provider: openai - source_hash: 2bdb0f3e56e4a4d767fb4d6150526ae9b3926ef5b213b458001f41d02762436d + source_hash: 4b504c9c6b47d7a327a0acf6934561c9b2606c01cc8ebe5526ccde73033d759f source_path: gateway/configuration-reference.md workflow: 15 --- -# Dokumentacja konfiguracji +# Odwołanie do konfiguracji -Podstawowa dokumentacja konfiguracji dla `~/.openclaw/openclaw.json`. Aby zobaczyć omówienie zorientowane na zadania, przejdź do [Konfiguracja](/pl/gateway/configuration). +Podstawowe odwołanie do konfiguracji `~/.openclaw/openclaw.json`. Aby zobaczyć omówienie zorientowane na zadania, przejdź do [Konfiguracja](/pl/gateway/configuration). -Ta strona obejmuje główne powierzchnie konfiguracji OpenClaw i odsyła dalej, gdy podsystem ma własną, bardziej szczegółową dokumentację. **Nie** próbuje umieszczać na jednej stronie każdego katalogu poleceń należącego do kanału/Plugin ani każdego zaawansowanego ustawienia pamięci/QMD. +Ta strona obejmuje główne powierzchnie konfiguracji OpenClaw i odsyła dalej, gdy dany podsystem ma własne, bardziej szczegółowe odwołanie. **Nie** próbuje umieszczać na jednej stronie każdego katalogu poleceń należącego do kanału/Pluginu ani każdego szczegółowego parametru pamięci/QMD. -Źródło prawdy w kodzie: +Prawda w kodzie: -- `openclaw config schema` wypisuje bieżący schemat JSON używany do walidacji i Control UI, z dołączonymi metadanymi bundled/Plugin/kanałów, gdy są dostępne -- `config.schema.lookup` zwraca jeden węzeł schematu o zakresie jednej ścieżki dla narzędzi do szczegółowej analizy -- `pnpm config:docs:check` / `pnpm config:docs:gen` weryfikują hash bazowy dokumentacji konfiguracji względem bieżącej powierzchni schematu +- `openclaw config schema` wypisuje aktualny schemat JSON używany do walidacji i Control UI, z dołączonymi metadanymi bundled/Pluginu/kanału, gdy są dostępne +- `config.schema.lookup` zwraca jeden węzeł schematu ograniczony do ścieżki dla narzędzi drążących szczegóły +- `pnpm config:docs:check` / `pnpm config:docs:gen` sprawdzają skrót bazowy dokumentacji konfiguracji względem bieżącej powierzchni schematu -Dedykowane szczegółowe dokumentacje: +Dedykowane szczegółowe odwołania: -- [Dokumentacja konfiguracji pamięci](/pl/reference/memory-config) dla `agents.defaults.memorySearch.*`, `memory.qmd.*`, `memory.citations` oraz konfiguracji Dreaming w `plugins.entries.memory-core.config.dreaming` -- [Slash Commands](/pl/tools/slash-commands) dla bieżącego katalogu wbudowanych + bundled poleceń -- strony właścicieli kanałów/Pluginów dla powierzchni poleceń specyficznych dla kanału +- [Odwołanie do konfiguracji pamięci](/pl/reference/memory-config) dla `agents.defaults.memorySearch.*`, `memory.qmd.*`, `memory.citations` oraz konfiguracji Dreaming pod `plugins.entries.memory-core.config.dreaming` +- [Polecenia ukośnikowe](/pl/tools/slash-commands) dla bieżącego katalogu poleceń wbudowanych + bundled +- strony właściciela kanału/Pluginu dla powierzchni poleceń specyficznych dla kanału -Format konfiguracji to **JSON5** (dozwolone komentarze i końcowe przecinki). Wszystkie pola są opcjonalne — OpenClaw używa bezpiecznych wartości domyślnych, gdy są pominięte. +Format konfiguracji to **JSON5** (dozwolone komentarze i przecinki końcowe). Wszystkie pola są opcjonalne — OpenClaw używa bezpiecznych wartości domyślnych, gdy zostaną pominięte. --- @@ -41,30 +41,30 @@ Każdy kanał uruchamia się automatycznie, gdy istnieje jego sekcja konfiguracj ### Dostęp do DM i grup -Wszystkie kanały obsługują zasady dla DM i zasady dla grup: +Wszystkie kanały obsługują zasady DM i zasady grup: | Zasada DM | Zachowanie | | -------------------- | -------------------------------------------------------------- | | `pairing` (domyślna) | Nieznani nadawcy otrzymują jednorazowy kod parowania; właściciel musi zatwierdzić | | `allowlist` | Tylko nadawcy z `allowFrom` (lub sparowanego magazynu dozwolonych) | -| `open` | Zezwala na wszystkie przychodzące DM (wymaga `allowFrom: ["*"]`) | -| `disabled` | Ignoruje wszystkie przychodzące DM | +| `open` | Zezwalaj na wszystkie przychodzące DM (wymaga `allowFrom: ["*"]`) | +| `disabled` | Ignoruj wszystkie przychodzące DM | -| Zasada grup | Zachowanie | -| -------------------- | ------------------------------------------------------ | +| Zasada grup | Zachowanie | +| -------------------- | ---------------------------------------------------- | | `allowlist` (domyślna) | Tylko grupy pasujące do skonfigurowanej listy dozwolonych | -| `open` | Pomija listy dozwolonych grup (nadal obowiązuje wymaganie wzmianki) | -| `disabled` | Blokuje wszystkie wiadomości grupowe/pokojowe | +| `open` | Pomija listy dozwolonych grup (nadal obowiązuje bramkowanie wzmiankami) | +| `disabled` | Blokuje wszystkie wiadomości grupowe/pokojowe | `channels.defaults.groupPolicy` ustawia wartość domyślną, gdy `groupPolicy` dostawcy nie jest ustawione. Kody parowania wygasają po 1 godzinie. Oczekujące żądania parowania DM są ograniczone do **3 na kanał**. -Jeśli blok dostawcy całkowicie nie istnieje (`channels.` jest nieobecne), zasada grup w czasie działania wraca do `allowlist` (fail-closed) z ostrzeżeniem przy uruchamianiu. +Jeśli blok dostawcy całkowicie nie istnieje (`channels.` jest nieobecne), zasada grup w czasie działania wraca do `allowlist` (fail-closed) z ostrzeżeniem przy uruchomieniu. -### Nadpisania modeli dla kanałów +### Nadpisania modelu dla kanału -Użyj `channels.modelByChannel`, aby przypiąć określone identyfikatory kanałów do modelu. Wartości akceptują `provider/model` lub skonfigurowane aliasy modeli. Mapowanie kanałów ma zastosowanie wtedy, gdy sesja nie ma już nadpisania modelu (na przykład ustawionego przez `/model`). +Użyj `channels.modelByChannel`, aby przypiąć określone identyfikatory kanałów do modelu. Wartości akceptują `provider/model` lub skonfigurowane aliasy modeli. Mapowanie kanału ma zastosowanie wtedy, gdy sesja nie ma już nadpisania modelu (na przykład ustawionego przez `/model`). ```json5 { @@ -87,7 +87,7 @@ Użyj `channels.modelByChannel`, aby przypiąć określone identyfikatory kanał ### Domyślne ustawienia kanałów i Heartbeat -Użyj `channels.defaults` dla współdzielonych zasad grup i zachowania Heartbeat we wszystkich dostawcach: +Użyj `channels.defaults` dla wspólnej zasady grup i zachowania Heartbeat we wszystkich dostawcach: ```json5 { @@ -106,14 +106,14 @@ Użyj `channels.defaults` dla współdzielonych zasad grup i zachowania Heartbea ``` - `channels.defaults.groupPolicy`: zapasowa zasada grup, gdy `groupPolicy` na poziomie dostawcy nie jest ustawione. -- `channels.defaults.contextVisibility`: domyślny tryb widoczności dodatkowego kontekstu dla wszystkich kanałów. Wartości: `all` (domyślna, uwzględnia cały kontekst cytatu/wątku/historii), `allowlist` (uwzględnia tylko kontekst od nadawców z listy dozwolonych), `allowlist_quote` (tak samo jak allowlist, ale zachowuje jawny kontekst cytatu/odpowiedzi). Nadpisanie per kanał: `channels..contextVisibility`. -- `channels.defaults.heartbeat.showOk`: uwzględnia zdrowe stany kanałów w wyjściu Heartbeat. -- `channels.defaults.heartbeat.showAlerts`: uwzględnia stany pogorszone/błędów w wyjściu Heartbeat. -- `channels.defaults.heartbeat.useIndicator`: renderuje kompaktowe wyjście Heartbeat w stylu wskaźnika. +- `channels.defaults.contextVisibility`: domyślny tryb widoczności dodatkowego kontekstu dla wszystkich kanałów. Wartości: `all` (domyślna, uwzględnia cały cytowany/wątkowy/historyczny kontekst), `allowlist` (uwzględnia tylko kontekst od nadawców z listy dozwolonych), `allowlist_quote` (jak allowlist, ale zachowuje jawny kontekst cytatu/odpowiedzi). Nadpisanie per kanał: `channels..contextVisibility`. +- `channels.defaults.heartbeat.showOk`: uwzględnia zdrowe statusy kanałów w wyjściu Heartbeat. +- `channels.defaults.heartbeat.showAlerts`: uwzględnia statusy zdegradowane/błędów w wyjściu Heartbeat. +- `channels.defaults.heartbeat.useIndicator`: renderuje zwarte wyjście Heartbeat w stylu wskaźnika. ### WhatsApp -WhatsApp działa przez kanał web Gateway (Baileys Web). Uruchamia się automatycznie, gdy istnieje połączona sesja. +WhatsApp działa przez kanał web gateway (`Baileys Web`). Uruchamia się automatycznie, gdy istnieje połączona sesja. ```json5 { @@ -146,7 +146,7 @@ WhatsApp działa przez kanał web Gateway (Baileys Web). Uruchamia się automaty } ``` - + ```json5 { @@ -165,7 +165,7 @@ WhatsApp działa przez kanał web Gateway (Baileys Web). Uruchamia się automaty ``` - Polecenia wychodzące domyślnie używają konta `default`, jeśli istnieje; w przeciwnym razie pierwszego skonfigurowanego identyfikatora konta (posortowanego). -- Opcjonalne `channels.whatsapp.defaultAccount` nadpisuje ten zapasowy wybór konta domyślnego, jeśli pasuje do skonfigurowanego identyfikatora konta. +- Opcjonalne `channels.whatsapp.defaultAccount` nadpisuje ten zapasowy wybór domyślnego konta, gdy pasuje do skonfigurowanego identyfikatora konta. - Starszy katalog uwierzytelniania Baileys dla pojedynczego konta jest migrowany przez `openclaw doctor` do `whatsapp/default`. - Nadpisania per konto: `channels.whatsapp.accounts..sendReadReceipts`, `channels.whatsapp.accounts..dmPolicy`, `channels.whatsapp.accounts..allowFrom`. @@ -226,12 +226,12 @@ WhatsApp działa przez kanał web Gateway (Baileys Web). Uruchamia się automaty ``` - Token bota: `channels.telegram.botToken` lub `channels.telegram.tokenFile` (tylko zwykły plik; dowiązania symboliczne są odrzucane), z `TELEGRAM_BOT_TOKEN` jako wartością zapasową dla konta domyślnego. -- Opcjonalne `channels.telegram.defaultAccount` nadpisuje wybór konta domyślnego, jeśli pasuje do skonfigurowanego identyfikatora konta. -- W konfiguracjach z wieloma kontami (2+ identyfikatory kont) ustaw jawne konto domyślne (`channels.telegram.defaultAccount` lub `channels.telegram.accounts.default`), aby uniknąć routingu zapasowego; `openclaw doctor` ostrzega, gdy tego brakuje lub jest nieprawidłowe. -- `configWrites: false` blokuje zapisy konfiguracji inicjowane z Telegrama (migracje identyfikatorów supergrup, `/config set|unset`). -- Wpisy najwyższego poziomu `bindings[]` z `type: "acp"` konfigurują trwałe powiązania ACP dla tematów forum (użyj kanonicznego `chatId:topic:topicId` w `match.peer.id`). Semantyka pól jest współdzielona z [ACP Agents](/pl/tools/acp-agents#channel-specific-settings). -- Podglądy strumieniowe Telegram używają `sendMessage` + `editMessageText` (działa w czatach bezpośrednich i grupowych). -- Zasady ponawiania: zobacz [Retry policy](/pl/concepts/retry). +- Opcjonalne `channels.telegram.defaultAccount` nadpisuje wybór konta domyślnego, gdy pasuje do skonfigurowanego identyfikatora konta. +- W konfiguracjach wielokontowych (2+ identyfikatory kont) ustaw jawne konto domyślne (`channels.telegram.defaultAccount` lub `channels.telegram.accounts.default`), aby uniknąć routingu zapasowego; `openclaw doctor` ostrzega, gdy tego brakuje lub jest nieprawidłowe. +- `configWrites: false` blokuje zapisy konfiguracji inicjowane przez Telegram (migracje identyfikatorów supergrup, `/config set|unset`). +- Wpisy najwyższego poziomu `bindings[]` z `type: "acp"` konfigurują trwałe powiązania ACP dla tematów forum (użyj kanonicznego `chatId:topic:topicId` w `match.peer.id`). Semantyka pól jest współdzielona w [ACP Agents](/pl/tools/acp-agents#channel-specific-settings). +- Podglądy strumienia Telegram używają `sendMessage` + `editMessageText` (działa w czatach bezpośrednich i grupowych). +- Zasady ponawiania: zobacz [Zasady ponawiania](/pl/concepts/retry). ### Discord @@ -334,35 +334,35 @@ WhatsApp działa przez kanał web Gateway (Baileys Web). Uruchamia się automaty ``` - Token: `channels.discord.token`, z `DISCORD_BOT_TOKEN` jako wartością zapasową dla konta domyślnego. -- Bezpośrednie wywołania wychodzące, które przekazują jawny `token` Discorda, używają tego tokena do wywołania; ustawienia ponawiania/zasad konta nadal pochodzą z wybranego konta w aktywnej migawce środowiska uruchomieniowego. -- Opcjonalne `channels.discord.defaultAccount` nadpisuje wybór konta domyślnego, jeśli pasuje do skonfigurowanego identyfikatora konta. -- Używaj `user:` (DM) lub `channel:` (kanał serwera) jako celów dostarczenia; same numeryczne identyfikatory są odrzucane. -- Slugi serwerów są pisane małymi literami, a spacje są zastępowane przez `-`; klucze kanałów używają nazwy w postaci slugu (bez `#`). Preferuj identyfikatory serwerów. -- Wiadomości napisane przez bota są domyślnie ignorowane. `allowBots: true` je włącza; użyj `allowBots: "mentions"`, aby akceptować tylko wiadomości botów, które wspominają bota (własne wiadomości nadal są filtrowane). +- Bezpośrednie wywołania wychodzące, które podają jawny `token` Discorda, używają tego tokena dla wywołania; ustawienia ponawiania/zasad konta nadal pochodzą z wybranego konta w aktywnej migawce runtime. +- Opcjonalne `channels.discord.defaultAccount` nadpisuje wybór konta domyślnego, gdy pasuje do skonfigurowanego identyfikatora konta. +- Używaj `user:` (DM) lub `channel:` (kanał guild) jako celów dostarczenia; same numeryczne identyfikatory są odrzucane. +- Slugi guild są pisane małymi literami, a spacje są zastępowane przez `-`; klucze kanałów używają nazwy w formie sluga (bez `#`). Preferuj identyfikatory guild. +- Wiadomości utworzone przez bota są domyślnie ignorowane. `allowBots: true` je włącza; użyj `allowBots: "mentions"`, aby akceptować tylko wiadomości botów, które wspominają bota (własne wiadomości nadal są filtrowane). - `channels.discord.guilds..ignoreOtherMentions` (oraz nadpisania na poziomie kanału) odrzuca wiadomości, które wspominają innego użytkownika lub rolę, ale nie bota (z wyłączeniem @everyone/@here). - `maxLinesPerMessage` (domyślnie 17) dzieli wysokie wiadomości nawet wtedy, gdy mają mniej niż 2000 znaków. -- `channels.discord.threadBindings` steruje routowaniem związanym z wątkami Discorda: - - `enabled`: nadpisanie Discorda dla funkcji sesji związanych z wątkami (`/focus`, `/unfocus`, `/agents`, `/session idle`, `/session max-age` oraz dostarczanie/routowanie związane z powiązaniem) - - `idleHours`: nadpisanie Discorda dla automatycznego zdejmowania fokusu po bezczynności w godzinach (`0` wyłącza) +- `channels.discord.threadBindings` steruje routowaniem powiązanym z wątkami Discorda: + - `enabled`: nadpisanie Discorda dla funkcji sesji powiązanych z wątkami (`/focus`, `/unfocus`, `/agents`, `/session idle`, `/session max-age` oraz dostarczanie/routowanie powiązane) + - `idleHours`: nadpisanie Discorda dla automatycznego odfokusowania po bezczynności w godzinach (`0` wyłącza) - `maxAgeHours`: nadpisanie Discorda dla twardego maksymalnego wieku w godzinach (`0` wyłącza) - - `spawnSubagentSessions`: przełącznik opt-in dla automatycznego tworzenia/powiązania wątków przez `sessions_spawn({ thread: true })` -- Wpisy najwyższego poziomu `bindings[]` z `type: "acp"` konfigurują trwałe powiązania ACP dla kanałów i wątków (użyj identyfikatora kanału/wątku w `match.peer.id`). Semantyka pól jest współdzielona z [ACP Agents](/pl/tools/acp-agents#channel-specific-settings). + - `spawnSubagentSessions`: przełącznik opt-in dla automatycznego tworzenia/powiązywania wątków przez `sessions_spawn({ thread: true })` +- Wpisy najwyższego poziomu `bindings[]` z `type: "acp"` konfigurują trwałe powiązania ACP dla kanałów i wątków (użyj identyfikatora kanału/wątku w `match.peer.id`). Semantyka pól jest współdzielona w [ACP Agents](/pl/tools/acp-agents#channel-specific-settings). - `channels.discord.ui.components.accentColor` ustawia kolor akcentu dla kontenerów komponentów Discord v2. -- `channels.discord.voice` włącza rozmowy w kanałach głosowych Discorda oraz opcjonalne automatyczne dołączanie i nadpisania TTS. -- `channels.discord.voice.daveEncryption` oraz `channels.discord.voice.decryptionFailureTolerance` są przekazywane do opcji DAVE `@discordjs/voice` (`true` i `24` domyślnie). -- OpenClaw dodatkowo próbuje odzyskać odbiór głosu przez opuszczenie i ponowne dołączenie do sesji głosowej po powtarzających się błędach odszyfrowywania. -- `channels.discord.streaming` jest kanonicznym kluczem trybu strumieniowania. Starsze wartości `streamMode` i logiczne `streaming` są automatycznie migrowane. -- `channels.discord.autoPresence` mapuje dostępność środowiska uruchomieniowego na status obecności bota (healthy => online, degraded => idle, exhausted => dnd) i pozwala na opcjonalne nadpisania tekstu statusu. -- `channels.discord.dangerouslyAllowNameMatching` ponownie włącza dopasowywanie po zmiennej nazwie/tagu (awaryjny tryb zgodności). +- `channels.discord.voice` włącza rozmowy w kanałach głosowych Discorda oraz opcjonalne automatyczne dołączanie + nadpisania TTS. +- `channels.discord.voice.daveEncryption` i `channels.discord.voice.decryptionFailureTolerance` są przekazywane do opcji DAVE `@discordjs/voice` (domyślnie `true` i `24`). +- OpenClaw dodatkowo próbuje odzyskać odbiór głosu przez opuszczenie/ponowne dołączenie do sesji głosowej po powtarzających się błędach odszyfrowywania. +- `channels.discord.streaming` to kanoniczny klucz trybu strumieniowania. Starsze wartości `streamMode` i logiczne `streaming` są migrowane automatycznie. +- `channels.discord.autoPresence` mapuje dostępność runtime na obecność bota (healthy => online, degraded => idle, exhausted => dnd) i pozwala na opcjonalne nadpisania tekstu statusu. +- `channels.discord.dangerouslyAllowNameMatching` ponownie włącza dopasowywanie po zmiennej nazwie/tagu (tryb zgodności break-glass). - `channels.discord.execApprovals`: natywne dla Discorda dostarczanie zatwierdzeń exec i autoryzacja zatwierdzających. - - `enabled`: `true`, `false` lub `"auto"` (domyślnie). W trybie auto zatwierdzenia exec aktywują się, gdy zatwierdzających można rozwiązać z `approvers` lub `commands.ownerAllowFrom`. - - `approvers`: identyfikatory użytkowników Discorda, którym wolno zatwierdzać żądania exec. Gdy pominięte, używa wartości zapasowej z `commands.ownerAllowFrom`. + - `enabled`: `true`, `false` lub `"auto"` (domyślnie). W trybie auto zatwierdzenia exec aktywują się, gdy osoby zatwierdzające można rozwiązać z `approvers` lub `commands.ownerAllowFrom`. + - `approvers`: identyfikatory użytkowników Discorda, którzy mogą zatwierdzać żądania exec. Gdy pominięte, wartość zapasowa pochodzi z `commands.ownerAllowFrom`. - `agentFilter`: opcjonalna lista dozwolonych identyfikatorów agentów. Pomiń, aby przekazywać zatwierdzenia dla wszystkich agentów. - `sessionFilter`: opcjonalne wzorce kluczy sesji (podciąg lub regex). - - `target`: gdzie wysyłać prośby o zatwierdzenie. `"dm"` (domyślnie) wysyła do DM zatwierdzających, `"channel"` wysyła do kanału źródłowego, `"both"` wysyła do obu. Gdy target zawiera `"channel"`, przycisków mogą używać tylko rozwiązani zatwierdzający. - - `cleanupAfterResolve`: gdy `true`, usuwa DM z zatwierdzeniem po zatwierdzeniu, odrzuceniu lub przekroczeniu limitu czasu. + - `target`: gdzie wysyłać prośby o zatwierdzenie. `"dm"` (domyślnie) wysyła do DM zatwierdzających, `"channel"` wysyła do kanału źródłowego, `"both"` wysyła do obu. Gdy target zawiera `"channel"`, przyciski mogą być używane tylko przez rozpoznanych zatwierdzających. + - `cleanupAfterResolve`: gdy `true`, usuwa DM z zatwierdzeniami po zatwierdzeniu, odrzuceniu lub przekroczeniu czasu. -**Tryby powiadomień o reakcjach:** `off` (brak), `own` (wiadomości bota, domyślnie), `all` (wszystkie wiadomości), `allowlist` (od `guilds..users` dla wszystkich wiadomości). +**Tryby powiadomień o reakcjach:** `off` (brak), `own` (wiadomości bota, domyślnie), `all` (wszystkie wiadomości), `allowlist` (z `guilds..users` dla wszystkich wiadomości). ### Google Chat @@ -395,9 +395,9 @@ WhatsApp działa przez kanał web Gateway (Baileys Web). Uruchamia się automaty - JSON konta usługi: osadzony (`serviceAccount`) lub oparty na pliku (`serviceAccountFile`). - SecretRef konta usługi jest również obsługiwany (`serviceAccountRef`). -- Wartości zapasowe ze środowiska: `GOOGLE_CHAT_SERVICE_ACCOUNT` lub `GOOGLE_CHAT_SERVICE_ACCOUNT_FILE`. +- Zapasowe wartości środowiskowe: `GOOGLE_CHAT_SERVICE_ACCOUNT` lub `GOOGLE_CHAT_SERVICE_ACCOUNT_FILE`. - Używaj `spaces/` lub `users/` jako celów dostarczenia. -- `channels.googlechat.dangerouslyAllowNameMatching` ponownie włącza dopasowywanie po zmiennym adresie e-mail principal (awaryjny tryb zgodności). +- `channels.googlechat.dangerouslyAllowNameMatching` ponownie włącza dopasowywanie po zmiennym principalu e-mail (tryb zgodności break-glass). ### Slack @@ -464,30 +464,35 @@ WhatsApp działa przez kanał web Gateway (Baileys Web). Uruchamia się automaty } ``` -- **Tryb socket** wymaga zarówno `botToken`, jak i `appToken` (`SLACK_BOT_TOKEN` + `SLACK_APP_TOKEN` jako zapasowe wartości środowiskowe dla konta domyślnego). -- **Tryb HTTP** wymaga `botToken` oraz `signingSecret` (w korzeniu lub per konto). -- `botToken`, `appToken`, `signingSecret` i `userToken` akceptują jawne ciągi znaków lub obiekty SecretRef. -- Migawki kont Slacka udostępniają pola źródła/statusu per poświadczenie, takie jak `botTokenSource`, `botTokenStatus`, `appTokenStatus` oraz, w trybie HTTP, `signingSecretStatus`. `configured_unavailable` oznacza, że konto jest skonfigurowane przez SecretRef, ale bieżąca ścieżka polecenia/środowiska uruchomieniowego nie mogła rozwiązać wartości sekretu. -- `configWrites: false` blokuje zapisy konfiguracji inicjowane ze Slacka. -- Opcjonalne `channels.slack.defaultAccount` nadpisuje wybór konta domyślnego, jeśli pasuje do skonfigurowanego identyfikatora konta. -- `channels.slack.streaming.mode` jest kanonicznym kluczem trybu strumieniowania Slacka. `channels.slack.streaming.nativeTransport` kontroluje natywny transport strumieniowania Slacka. Starsze wartości `streamMode`, logiczne `streaming` i `nativeStreaming` są automatycznie migrowane. +- **Tryb Socket** wymaga zarówno `botToken`, jak i `appToken` (`SLACK_BOT_TOKEN` + `SLACK_APP_TOKEN` jako zapasowe wartości środowiskowe dla konta domyślnego). +- **Tryb HTTP** wymaga `botToken` plus `signingSecret` (na poziomie głównym lub per konto). +- `botToken`, `appToken`, `signingSecret` i `userToken` akceptują zwykłe + łańcuchy znaków lub obiekty SecretRef. +- Migawki kont Slacka udostępniają pola źródła/statusu dla poszczególnych poświadczeń, takie jak + `botTokenSource`, `botTokenStatus`, `appTokenStatus` oraz, w trybie HTTP, + `signingSecretStatus`. `configured_unavailable` oznacza, że konto jest + skonfigurowane przez SecretRef, ale bieżąca ścieżka polecenia/runtime nie mogła + rozwiązać wartości sekretu. +- `configWrites: false` blokuje zapisy konfiguracji inicjowane przez Slack. +- Opcjonalne `channels.slack.defaultAccount` nadpisuje wybór konta domyślnego, gdy pasuje do skonfigurowanego identyfikatora konta. +- `channels.slack.streaming.mode` to kanoniczny klucz trybu strumieniowania Slacka. `channels.slack.streaming.nativeTransport` steruje natywnym transportem strumieniowania Slacka. Starsze wartości `streamMode`, logiczne `streaming` i `nativeStreaming` są migrowane automatycznie. - Używaj `user:` (DM) lub `channel:` jako celów dostarczenia. **Tryby powiadomień o reakcjach:** `off`, `own` (domyślnie), `all`, `allowlist` (z `reactionAllowlist`). -**Izolacja sesji wątków:** `thread.historyScope` jest per wątek (domyślnie) lub współdzielone w całym kanale. `thread.inheritParent` kopiuje transkrypt kanału nadrzędnego do nowych wątków. +**Izolacja sesji wątków:** `thread.historyScope` jest per wątek (domyślnie) lub współdzielony w całym kanale. `thread.inheritParent` kopiuje transkrypt kanału nadrzędnego do nowych wątków. -- Natywne strumieniowanie Slacka oraz status w stylu asystenta Slacka „is typing...” w wątku wymagają celu odpowiedzi będącego wątkiem. DM najwyższego poziomu domyślnie pozostają poza wątkiem, więc używają `typingReaction` lub zwykłego dostarczania zamiast podglądu w stylu wątku. -- `typingReaction` dodaje tymczasową reakcję do przychodzącej wiadomości Slacka, gdy odpowiedź jest w trakcie generowania, a następnie usuwa ją po zakończeniu. Użyj skrótu emoji Slacka, takiego jak `"hourglass_flowing_sand"`. +- Natywne strumieniowanie Slacka oraz status w stylu asystenta Slacka „is typing...” wymagają docelowego wątku odpowiedzi. DM najwyższego poziomu domyślnie pozostają poza wątkiem, więc używają `typingReaction` lub zwykłego dostarczenia zamiast podglądu w stylu wątku. +- `typingReaction` dodaje tymczasową reakcję do przychodzącej wiadomości Slacka podczas generowania odpowiedzi, a następnie usuwa ją po zakończeniu. Użyj shortcode emoji Slacka, takiego jak `"hourglass_flowing_sand"`. - `channels.slack.execApprovals`: natywne dla Slacka dostarczanie zatwierdzeń exec i autoryzacja zatwierdzających. Ten sam schemat co w Discordzie: `enabled` (`true`/`false`/`"auto"`), `approvers` (identyfikatory użytkowników Slacka), `agentFilter`, `sessionFilter` i `target` (`"dm"`, `"channel"` lub `"both"`). -| Grupa akcji | Domyślnie | Uwagi | -| ----------- | --------- | ------------------------ | -| reactions | włączone | Reagowanie + lista reakcji | -| messages | włączone | Odczyt/wysyłanie/edycja/usuwanie | -| pins | włączone | Przypinanie/odpinanie/lista | -| memberInfo | włączone | Informacje o członku | -| emojiList | włączone | Lista niestandardowych emoji | +| Grupa działań | Domyślnie | Uwagi | +| ------------- | --------- | ---------------------- | +| reactions | włączone | Reagowanie + lista reakcji | +| messages | włączone | Odczyt/wysyłanie/edycja/usuwanie | +| pins | włączone | Przypinanie/odpinanie/lista | +| memberInfo | włączone | Informacje o członku | +| emojiList | włączone | Lista niestandardowych emoji | ### Mattermost @@ -521,18 +526,23 @@ Mattermost jest dostarczany jako Plugin: `openclaw plugins install @openclaw/mat } ``` -Tryby czatu: `oncall` (odpowiada na wzmiankę @, domyślnie), `onmessage` (każda wiadomość), `onchar` (wiadomości zaczynające się od prefiksu wyzwalacza). +Tryby czatu: `oncall` (odpowiada na wzmiankę @, domyślnie), `onmessage` (każda wiadomość), `onchar` (wiadomości zaczynające się od prefiksu wyzwalającego). -Gdy natywne polecenia Mattermost są włączone: +Gdy włączone są natywne polecenia Mattermost: -- `commands.callbackPath` musi być ścieżką (na przykład `/api/channels/mattermost/command`), a nie pełnym URL-em. -- `commands.callbackUrl` musi wskazywać na punkt końcowy Gateway OpenClaw i być osiągalny z serwera Mattermost. -- Natywne wywołania zwrotne slash są uwierzytelniane tokenami per polecenie zwracanymi przez Mattermost podczas rejestracji poleceń slash. Jeśli rejestracja się nie powiedzie lub żadne polecenia nie zostaną aktywowane, OpenClaw odrzuci wywołania zwrotne z komunikatem `Unauthorized: invalid command token.` -- Dla prywatnych/tailnet/wewnętrznych hostów callbacków Mattermost może wymagać, aby `ServiceSettings.AllowedUntrustedInternalConnections` zawierało host/domenę callbacku. Używaj wartości hosta/domeny, a nie pełnych URL-i. -- `channels.mattermost.configWrites`: zezwala lub zabrania zapisów konfiguracji inicjowanych z Mattermost. -- `channels.mattermost.requireMention`: wymaga `@mention` przed odpowiedzią w kanałach. -- `channels.mattermost.groups..requireMention`: nadpisanie wymagania wzmianki per kanał (`"*"` dla wartości domyślnej). -- Opcjonalne `channels.mattermost.defaultAccount` nadpisuje wybór konta domyślnego, jeśli pasuje do skonfigurowanego identyfikatora konta. +- `commands.callbackPath` musi być ścieżką (na przykład `/api/channels/mattermost/command`), a nie pełnym adresem URL. +- `commands.callbackUrl` musi wskazywać punkt końcowy Gateway OpenClaw i być osiągalny z serwera Mattermost. +- Natywne wywołania zwrotne poleceń ukośnikowych są uwierzytelniane za pomocą tokenów per polecenie zwracanych + przez Mattermost podczas rejestracji poleceń ukośnikowych. Jeśli rejestracja się nie powiedzie lub żadne + polecenia nie zostaną aktywowane, OpenClaw odrzuci wywołania zwrotne z komunikatem + `Unauthorized: invalid command token.` +- W przypadku prywatnych/tailnet/wewnętrznych hostów callbacków Mattermost może wymagać, + aby `ServiceSettings.AllowedUntrustedInternalConnections` zawierało host/domenę callbacku. + Używaj wartości host/domena, a nie pełnych adresów URL. +- `channels.mattermost.configWrites`: zezwalaj lub zabraniaj zapisów konfiguracji inicjowanych przez Mattermost. +- `channels.mattermost.requireMention`: wymagaj `@mention` przed odpowiedzią w kanałach. +- `channels.mattermost.groups..requireMention`: nadpisanie bramkowania wzmianką per kanał (`"*"` dla wartości domyślnej). +- Opcjonalne `channels.mattermost.defaultAccount` nadpisuje wybór konta domyślnego, gdy pasuje do skonfigurowanego identyfikatora konta. ### Signal @@ -556,12 +566,12 @@ Gdy natywne polecenia Mattermost są włączone: **Tryby powiadomień o reakcjach:** `off`, `own` (domyślnie), `all`, `allowlist` (z `reactionAllowlist`). - `channels.signal.account`: przypina uruchamianie kanału do określonej tożsamości konta Signal. -- `channels.signal.configWrites`: zezwala lub zabrania zapisów konfiguracji inicjowanych z Signal. -- Opcjonalne `channels.signal.defaultAccount` nadpisuje wybór konta domyślnego, jeśli pasuje do skonfigurowanego identyfikatora konta. +- `channels.signal.configWrites`: zezwala lub zabrania zapisów konfiguracji inicjowanych przez Signal. +- Opcjonalne `channels.signal.defaultAccount` nadpisuje wybór konta domyślnego, gdy pasuje do skonfigurowanego identyfikatora konta. ### BlueBubbles -BlueBubbles to zalecana ścieżka dla iMessage (oparta na Plugin, konfigurowana w `channels.bluebubbles`). +BlueBubbles to zalecana ścieżka dla iMessage (oparta na Pluginie, konfigurowana pod `channels.bluebubbles`). ```json5 { @@ -576,10 +586,10 @@ BlueBubbles to zalecana ścieżka dla iMessage (oparta na Plugin, konfigurowana } ``` -- Główne ścieżki kluczy omawiane tutaj: `channels.bluebubbles`, `channels.bluebubbles.dmPolicy`. -- Opcjonalne `channels.bluebubbles.defaultAccount` nadpisuje wybór konta domyślnego, jeśli pasuje do skonfigurowanego identyfikatora konta. -- Wpisy najwyższego poziomu `bindings[]` z `type: "acp"` mogą wiązać rozmowy BlueBubbles z trwałymi sesjami ACP. Użyj uchwytu BlueBubbles lub ciągu docelowego (`chat_id:*`, `chat_guid:*`, `chat_identifier:*`) w `match.peer.id`. Współdzielona semantyka pól: [ACP Agents](/pl/tools/acp-agents#channel-specific-settings). -- Pełna konfiguracja kanału BlueBubbles jest opisana w [BlueBubbles](/pl/channels/bluebubbles). +- Podstawowe ścieżki kluczy opisane tutaj: `channels.bluebubbles`, `channels.bluebubbles.dmPolicy`. +- Opcjonalne `channels.bluebubbles.defaultAccount` nadpisuje wybór konta domyślnego, gdy pasuje do skonfigurowanego identyfikatora konta. +- Wpisy najwyższego poziomu `bindings[]` z `type: "acp"` mogą wiązać konwersacje BlueBubbles z trwałymi sesjami ACP. Użyj uchwytu BlueBubbles lub ciągu docelowego (`chat_id:*`, `chat_guid:*`, `chat_identifier:*`) w `match.peer.id`. Współdzielona semantyka pól: [ACP Agents](/pl/tools/acp-agents#channel-specific-settings). +- Pełna konfiguracja kanału BlueBubbles jest udokumentowana w [BlueBubbles](/pl/channels/bluebubbles). ### iMessage @@ -607,17 +617,17 @@ OpenClaw uruchamia `imsg rpc` (JSON-RPC przez stdio). Nie jest wymagany daemon a } ``` -- Opcjonalne `channels.imessage.defaultAccount` nadpisuje wybór konta domyślnego, jeśli pasuje do skonfigurowanego identyfikatora konta. +- Opcjonalne `channels.imessage.defaultAccount` nadpisuje wybór konta domyślnego, gdy pasuje do skonfigurowanego identyfikatora konta. - Wymaga Full Disk Access do bazy danych Messages. - Preferuj cele `chat_id:`. Użyj `imsg chats --limit 20`, aby wyświetlić listę czatów. -- `cliPath` może wskazywać na wrapper SSH; ustaw `remoteHost` (`host` lub `user@host`) dla pobierania załączników przez SCP. +- `cliPath` może wskazywać na opakowanie SSH; ustaw `remoteHost` (`host` lub `user@host`) dla pobierania załączników przez SCP. - `attachmentRoots` i `remoteAttachmentRoots` ograniczają ścieżki przychodzących załączników (domyślnie: `/Users/*/Library/Messages/Attachments`). - SCP używa ścisłego sprawdzania klucza hosta, więc upewnij się, że klucz hosta przekaźnika już istnieje w `~/.ssh/known_hosts`. -- `channels.imessage.configWrites`: zezwala lub zabrania zapisów konfiguracji inicjowanych z iMessage. -- Wpisy najwyższego poziomu `bindings[]` z `type: "acp"` mogą wiązać rozmowy iMessage z trwałymi sesjami ACP. Użyj znormalizowanego uchwytu lub jawnego celu czatu (`chat_id:*`, `chat_guid:*`, `chat_identifier:*`) w `match.peer.id`. Współdzielona semantyka pól: [ACP Agents](/pl/tools/acp-agents#channel-specific-settings). +- `channels.imessage.configWrites`: zezwalaj lub zabraniaj zapisów konfiguracji inicjowanych przez iMessage. +- Wpisy najwyższego poziomu `bindings[]` z `type: "acp"` mogą wiązać konwersacje iMessage z trwałymi sesjami ACP. Użyj znormalizowanego uchwytu lub jawnego celu czatu (`chat_id:*`, `chat_guid:*`, `chat_identifier:*`) w `match.peer.id`. Współdzielona semantyka pól: [ACP Agents](/pl/tools/acp-agents#channel-specific-settings). - + ```bash #!/usr/bin/env bash @@ -628,7 +638,7 @@ exec ssh -T gateway-host imsg "$@" ### Matrix -Matrix jest wspierany przez rozszerzenie i konfigurowany w `channels.matrix`. +Matrix jest obsługiwany przez rozszerzenie i konfigurowany pod `channels.matrix`. ```json5 { @@ -659,24 +669,24 @@ Matrix jest wspierany przez rozszerzenie i konfigurowany w `channels.matrix`. ``` - Uwierzytelnianie tokenem używa `accessToken`; uwierzytelnianie hasłem używa `userId` + `password`. -- `channels.matrix.proxy` kieruje ruch HTTP Matrix przez jawny serwer proxy HTTP(S). Nazwane konta mogą to nadpisać przez `channels.matrix.accounts..proxy`. -- `channels.matrix.network.dangerouslyAllowPrivateNetwork` zezwala na prywatne/wewnętrzne homeservery. `proxy` i to sieciowe opt-in są niezależnymi mechanizmami kontroli. -- `channels.matrix.defaultAccount` wybiera preferowane konto w konfiguracjach z wieloma kontami. -- `channels.matrix.autoJoin` domyślnie ma wartość `off`, więc zaproszone pokoje i nowe zaproszenia w stylu DM są ignorowane, dopóki nie ustawisz `autoJoin: "allowlist"` z `autoJoinAllowlist` albo `autoJoin: "always"`. +- `channels.matrix.proxy` kieruje ruch HTTP Matrix przez jawny serwer proxy HTTP(S). Nazwane konta mogą go nadpisywać przez `channels.matrix.accounts..proxy`. +- `channels.matrix.network.dangerouslyAllowPrivateNetwork` zezwala na prywatne/wewnętrzne homeservery. `proxy` i to sieciowe opt-in są niezależnymi ustawieniami. +- `channels.matrix.defaultAccount` wybiera preferowane konto w konfiguracjach wielokontowych. +- `channels.matrix.autoJoin` ma domyślnie wartość `off`, więc zaproszone pokoje i nowe zaproszenia w stylu DM są ignorowane, dopóki nie ustawisz `autoJoin: "allowlist"` z `autoJoinAllowlist` lub `autoJoin: "always"`. - `channels.matrix.execApprovals`: natywne dla Matrix dostarczanie zatwierdzeń exec i autoryzacja zatwierdzających. - - `enabled`: `true`, `false` lub `"auto"` (domyślnie). W trybie auto zatwierdzenia exec aktywują się, gdy zatwierdzających można rozwiązać z `approvers` lub `commands.ownerAllowFrom`. + - `enabled`: `true`, `false` lub `"auto"` (domyślnie). W trybie auto zatwierdzenia exec aktywują się, gdy osoby zatwierdzające można rozwiązać z `approvers` lub `commands.ownerAllowFrom`. - `approvers`: identyfikatory użytkowników Matrix (np. `@owner:example.org`) uprawnione do zatwierdzania żądań exec. - `agentFilter`: opcjonalna lista dozwolonych identyfikatorów agentów. Pomiń, aby przekazywać zatwierdzenia dla wszystkich agentów. - `sessionFilter`: opcjonalne wzorce kluczy sesji (podciąg lub regex). - `target`: gdzie wysyłać prośby o zatwierdzenie. `"dm"` (domyślnie), `"channel"` (pokój źródłowy) lub `"both"`. - Nadpisania per konto: `channels.matrix.accounts..execApprovals`. -- `channels.matrix.dm.sessionScope` kontroluje, jak DM Matrix są grupowane w sesje: `per-user` (domyślnie) współdzieli według kierowanego peera, a `per-room` izoluje każdy pokój DM. -- Sondy statusu Matrix i wyszukiwania w katalogu na żywo używają tej samej polityki proxy co ruch środowiska uruchomieniowego. -- Pełna konfiguracja Matrix, reguły targetowania i przykłady konfiguracji są opisane w [Matrix](/pl/channels/matrix). +- `channels.matrix.dm.sessionScope` steruje sposobem grupowania DM Matrix w sesje: `per-user` (domyślnie) współdzieli według routowanego peera, a `per-room` izoluje każdy pokój DM. +- Sondy statusu Matrix i wyszukiwania w aktywnym katalogu używają tych samych zasad proxy co ruch runtime. +- Pełna konfiguracja Matrix, reguły targetowania i przykłady konfiguracji są udokumentowane w [Matrix](/pl/channels/matrix). ### Microsoft Teams -Microsoft Teams jest wspierany przez rozszerzenie i konfigurowany w `channels.msteams`. +Microsoft Teams jest obsługiwany przez rozszerzenie i konfigurowany pod `channels.msteams`. ```json5 { @@ -691,12 +701,12 @@ Microsoft Teams jest wspierany przez rozszerzenie i konfigurowany w `channels.ms } ``` -- Główne ścieżki kluczy omawiane tutaj: `channels.msteams`, `channels.msteams.configWrites`. -- Pełna konfiguracja Teams (poświadczenia, webhook, zasady DM/grup, nadpisania per zespół/per kanał) jest opisana w [Microsoft Teams](/pl/channels/msteams). +- Podstawowe ścieżki kluczy opisane tutaj: `channels.msteams`, `channels.msteams.configWrites`. +- Pełna konfiguracja Teams (poświadczenia, Webhook, zasady DM/grup, nadpisania per zespół/per kanał) jest udokumentowana w [Microsoft Teams](/pl/channels/msteams). ### IRC -IRC jest wspierany przez rozszerzenie i konfigurowany w `channels.irc`. +IRC jest obsługiwane przez rozszerzenie i konfigurowane pod `channels.irc`. ```json5 { @@ -717,9 +727,9 @@ IRC jest wspierany przez rozszerzenie i konfigurowany w `channels.irc`. } ``` -- Główne ścieżki kluczy omawiane tutaj: `channels.irc`, `channels.irc.dmPolicy`, `channels.irc.configWrites`, `channels.irc.nickserv.*`. -- Opcjonalne `channels.irc.defaultAccount` nadpisuje wybór konta domyślnego, jeśli pasuje do skonfigurowanego identyfikatora konta. -- Pełna konfiguracja kanału IRC (host/port/TLS/kanały/listy dozwolonych/wymaganie wzmianki) jest opisana w [IRC](/pl/channels/irc). +- Podstawowe ścieżki kluczy opisane tutaj: `channels.irc`, `channels.irc.dmPolicy`, `channels.irc.configWrites`, `channels.irc.nickserv.*`. +- Opcjonalne `channels.irc.defaultAccount` nadpisuje wybór konta domyślnego, gdy pasuje do skonfigurowanego identyfikatora konta. +- Pełna konfiguracja kanału IRC (host/port/TLS/kanały/listy dozwolonych/bramkowanie wzmiankami) jest udokumentowana w [IRC](/pl/channels/irc). ### Wiele kont (wszystkie kanały) @@ -744,28 +754,28 @@ Uruchamiaj wiele kont na kanał (każde z własnym `accountId`): } ``` -- `default` jest używane, gdy `accountId` jest pominięte (CLI + routing). -- Tokeny środowiskowe mają zastosowanie tylko do konta **default**. +- `default` jest używane, gdy `accountId` zostanie pominięte (CLI + routing). +- Tokeny środowiskowe dotyczą tylko konta **default**. - Bazowe ustawienia kanału mają zastosowanie do wszystkich kont, chyba że zostaną nadpisane per konto. - Użyj `bindings[].match.accountId`, aby kierować każde konto do innego agenta. -- Jeśli dodasz konto inne niż domyślne przez `openclaw channels add` (lub onboarding kanału), gdy nadal używasz jednokontowej konfiguracji najwyższego poziomu dla kanału, OpenClaw najpierw promuje jednokontowe wartości najwyższego poziomu o zakresie konta do mapy kont kanału, aby oryginalne konto nadal działało. Większość kanałów przenosi je do `channels..accounts.default`; Matrix może zamiast tego zachować istniejący pasujący nazwany/domyslny cel. -- Istniejące powiązania tylko-kanałowe (bez `accountId`) nadal dopasowują się do konta domyślnego; powiązania o zakresie konta pozostają opcjonalne. -- `openclaw doctor --fix` również naprawia mieszane kształty, przenosząc jednokontowe wartości najwyższego poziomu o zakresie konta do promowanego konta wybranego dla tego kanału. Większość kanałów używa `accounts.default`; Matrix może zamiast tego zachować istniejący pasujący nazwany/domyslny cel. +- Jeśli dodasz konto inne niż domyślne przez `openclaw channels add` (lub onboarding kanału), gdy nadal używasz najwyższego poziomu konfiguracji kanału dla pojedynczego konta, OpenClaw najpierw promuje najwyższego poziomu wartości pojedynczego konta o zakresie konta do mapy kont kanału, aby oryginalne konto nadal działało. Większość kanałów przenosi je do `channels..accounts.default`; Matrix może zamiast tego zachować istniejący pasujący nazwany/domyslny cel. +- Istniejące powiązania tylko kanałowe (bez `accountId`) nadal pasują do konta domyślnego; powiązania o zakresie konta pozostają opcjonalne. +- `openclaw doctor --fix` również naprawia mieszane kształty, przenosząc najwyższego poziomu wartości pojedynczego konta o zakresie konta do promowanego konta wybranego dla tego kanału. Większość kanałów używa `accounts.default`; Matrix może zamiast tego zachować istniejący pasujący nazwany/domyslny cel. ### Inne kanały rozszerzeń Wiele kanałów rozszerzeń jest konfigurowanych jako `channels.` i opisanych na ich dedykowanych stronach kanałów (na przykład Feishu, Matrix, LINE, Nostr, Zalo, Nextcloud Talk, Synology Chat i Twitch). -Zobacz pełny indeks kanałów: [Channels](/pl/channels). +Zobacz pełny indeks kanałów: [Kanały](/pl/channels). -### Wymaganie wzmianki w czatach grupowych +### Bramka wzmianek w czatach grupowych -Wiadomości grupowe domyślnie **wymagają wzmianki** (wzmianka z metadanych lub bezpieczne wzorce regex). Dotyczy czatów grupowych WhatsApp, Telegram, Discord, Google Chat i iMessage. +Wiadomości grupowe domyślnie **wymagają wzmianki** (wzmianka w metadanych lub bezpieczne wzorce regex). Dotyczy czatów grupowych WhatsApp, Telegram, Discord, Google Chat i iMessage. **Typy wzmianek:** -- **Wzmianki z metadanych**: natywne wzmianki @ platformy. Ignorowane w trybie self-chat WhatsApp. -- **Wzorce tekstowe**: bezpieczne wzorce regex w `agents.list[].groupChat.mentionPatterns`. Nieprawidłowe wzorce i niebezpieczne zagnieżdżone powtórzenia są ignorowane. -- Wymaganie wzmianki jest egzekwowane tylko wtedy, gdy wykrycie jest możliwe (natywne wzmianki lub co najmniej jeden wzorzec). +- **Wzmianki w metadanych**: Natywne wzmianki @ platformy. Ignorowane w trybie czatu własnego WhatsApp. +- **Wzorce tekstowe**: Bezpieczne wzorce regex w `agents.list[].groupChat.mentionPatterns`. Nieprawidłowe wzorce i niebezpieczne zagnieżdżone powtórzenia są ignorowane. +- Bramka wzmianek jest wymuszana tylko wtedy, gdy wykrycie jest możliwe (natywne wzmianki lub co najmniej jeden wzorzec). ```json5 { @@ -778,7 +788,7 @@ Wiadomości grupowe domyślnie **wymagają wzmianki** (wzmianka z metadanych lub } ``` -`messages.groupChat.historyLimit` ustawia globalną wartość domyślną. Kanały mogą ją nadpisać przez `channels..historyLimit` (lub per konto). Ustaw `0`, aby wyłączyć. +`messages.groupChat.historyLimit` ustawia globalną wartość domyślną. Kanały mogą ją nadpisywać przez `channels..historyLimit` (lub per konto). Ustaw `0`, aby wyłączyć. #### Limity historii DM @@ -795,13 +805,13 @@ Wiadomości grupowe domyślnie **wymagają wzmianki** (wzmianka z metadanych lub } ``` -Rozwiązywanie: nadpisanie per DM → domyślna wartość dostawcy → brak limitu (zachowywane wszystko). +Rozstrzyganie: nadpisanie per DM → wartość domyślna dostawcy → brak limitu (wszystko zachowane). Obsługiwane: `telegram`, `whatsapp`, `discord`, `slack`, `signal`, `imessage`, `msteams`. -#### Tryb self-chat +#### Tryb czatu własnego -Uwzględnij własny numer w `allowFrom`, aby włączyć tryb self-chat (ignoruje natywne wzmianki @, odpowiada tylko na wzorce tekstowe): +Dodaj własny numer do `allowFrom`, aby włączyć tryb czatu własnego (ignoruje natywne wzmianki @, odpowiada tylko na wzorce tekstowe): ```json5 { @@ -851,32 +861,32 @@ Uwzględnij własny numer w `allowFrom`, aby włączyć tryb self-chat (ignoruje -- Ten blok konfiguruje powierzchnie poleceń. Bieżący katalog wbudowanych + bundled poleceń znajdziesz w [Slash Commands](/pl/tools/slash-commands). -- Ta strona jest **dokumentacją kluczy konfiguracji**, a nie pełnym katalogiem poleceń. Polecenia należące do kanałów/Pluginów, takie jak QQ Bot `/bot-ping` `/bot-help` `/bot-logs`, LINE `/card`, device-pair `/pair`, memory `/dreaming`, phone-control `/phone` i Talk `/voice`, są opisane na stronach ich kanałów/Pluginów oraz w [Slash Commands](/pl/tools/slash-commands). +- Ten blok konfiguruje powierzchnie poleceń. Aktualny katalog poleceń wbudowanych + bundled znajdziesz w [Poleceniach ukośnikowych](/pl/tools/slash-commands). +- Ta strona to **odwołanie do kluczy konfiguracji**, a nie pełny katalog poleceń. Polecenia należące do kanałów/Pluginów, takie jak QQ Bot `/bot-ping` `/bot-help` `/bot-logs`, LINE `/card`, device-pair `/pair`, memory `/dreaming`, phone-control `/phone` i Talk `/voice`, są udokumentowane na stronach ich kanałów/Pluginów oraz w [Poleceniach ukośnikowych](/pl/tools/slash-commands). - Polecenia tekstowe muszą być **samodzielnymi** wiadomościami zaczynającymi się od `/`. - `native: "auto"` włącza natywne polecenia dla Discorda/Telegrama, pozostawia Slack wyłączony. - `nativeSkills: "auto"` włącza natywne polecenia Skills dla Discorda/Telegrama, pozostawia Slack wyłączony. - Nadpisanie per kanał: `channels.discord.commands.native` (bool lub `"auto"`). `false` czyści wcześniej zarejestrowane polecenia. -- Nadpisz rejestrację natywnych Skills per kanał przez `channels..commands.nativeSkills`. -- `channels.telegram.customCommands` dodaje dodatkowe wpisy menu bota Telegram. +- Nadpisz rejestrację natywnych poleceń Skills per kanał przez `channels..commands.nativeSkills`. +- `channels.telegram.customCommands` dodaje dodatkowe wpisy do menu bota Telegram. - `bash: true` włącza `! ` dla powłoki hosta. Wymaga `tools.elevated.enabled` oraz nadawcy w `tools.elevated.allowFrom.`. -- `config: true` włącza `/config` (odczytuje/zapisuje `openclaw.json`). Dla klientów Gateway `chat.send` trwałe zapisy `/config set|unset` wymagają także `operator.admin`; tylko do odczytu `/config show` pozostaje dostępne dla zwykłych klientów operatora z zakresem zapisu. -- `mcp: true` włącza `/mcp` dla zarządzanej przez OpenClaw konfiguracji serwera MCP w `mcp.servers`. -- `plugins: true` włącza `/plugins` do wykrywania Pluginów, instalacji oraz sterowania włączaniem/wyłączaniem. -- `channels..configWrites` ogranicza mutacje konfiguracji per kanał (domyślnie: true). -- Dla kanałów z wieloma kontami `channels..accounts..configWrites` również ogranicza zapisy kierowane do tego konta (na przykład `/allowlist --config --account ` lub `/config set channels..accounts....`). +- `config: true` włącza `/config` (odczytuje/zapisuje `openclaw.json`). Dla klientów gateway `chat.send` trwałe zapisy `/config set|unset` wymagają także `operator.admin`; tylko do odczytu `/config show` pozostaje dostępne dla zwykłych klientów operatora z zakresem zapisu. +- `mcp: true` włącza `/mcp` dla zarządzanej przez OpenClaw konfiguracji serwera MCP pod `mcp.servers`. +- `plugins: true` włącza `/plugins` dla wykrywania Pluginów, instalacji oraz sterowania włączaniem/wyłączaniem. +- `channels..configWrites` bramkuje mutacje konfiguracji per kanał (domyślnie: true). +- W kanałach wielokontowych `channels..accounts..configWrites` również bramkuje zapisy kierowane do tego konta (na przykład `/allowlist --config --account ` lub `/config set channels..accounts....`). - `restart: false` wyłącza `/restart` i działania narzędzia restartu Gateway. Domyślnie: `true`. -- `ownerAllowFrom` to jawna lista dozwolonych właściciela dla poleceń/narzędzi tylko dla właściciela. Jest oddzielna od `allowFrom`. -- `ownerDisplay: "hash"` hashuje identyfikatory właściciela w system prompt. Ustaw `ownerDisplaySecret`, aby sterować haszowaniem. +- `ownerAllowFrom` to jawna lista dozwolonych właścicieli dla poleceń/narzędzi tylko dla właściciela. Jest oddzielna od `allowFrom`. +- `ownerDisplay: "hash"` hashuje identyfikatory właściciela w system prompt. Ustaw `ownerDisplaySecret`, aby sterować hashowaniem. - `allowFrom` jest per dostawca. Gdy jest ustawione, jest **jedynym** źródłem autoryzacji (listy dozwolonych/parowanie kanału i `useAccessGroups` są ignorowane). - `useAccessGroups: false` pozwala poleceniom omijać zasady grup dostępu, gdy `allowFrom` nie jest ustawione. - Mapa dokumentacji poleceń: - - katalog wbudowanych + bundled: [Slash Commands](/pl/tools/slash-commands) - - powierzchnie poleceń specyficzne dla kanału: [Channels](/pl/channels) + - katalog wbudowany + bundled: [Polecenia ukośnikowe](/pl/tools/slash-commands) + - powierzchnie poleceń specyficzne dla kanałów: [Kanały](/pl/channels) - polecenia QQ Bot: [QQ Bot](/pl/channels/qqbot) - - polecenia parowania: [Pairing](/pl/channels/pairing) + - polecenia parowania: [Parowanie](/pl/channels/pairing) - polecenie karty LINE: [LINE](/pl/channels/line) - - memory Dreaming: [Dreaming](/pl/concepts/dreaming) + - memory dreaming: [Dreaming](/pl/concepts/dreaming) @@ -942,7 +952,7 @@ Wyłącza automatyczne tworzenie plików bootstrap workspace (`AGENTS.md`, `SOUL Steruje tym, kiedy pliki bootstrap workspace są wstrzykiwane do system prompt. Domyślnie: `"always"`. -- `"continuation-skip"`: bezpieczne tury kontynuacji (po zakończonej odpowiedzi asystenta) pomijają ponowne wstrzyknięcie bootstrap workspace, zmniejszając rozmiar prompt. Uruchomienia Heartbeat i ponowne próby po Compaction nadal przebudowują kontekst. +- `"continuation-skip"`: bezpieczne tury kontynuacji (po zakończonej odpowiedzi asystenta) pomijają ponowne wstrzykiwanie bootstrap workspace, zmniejszając rozmiar prompt. Uruchomienia Heartbeat i ponowienia po Compaction nadal przebudowują kontekst. ```json5 { @@ -952,32 +962,32 @@ Steruje tym, kiedy pliki bootstrap workspace są wstrzykiwane do system prompt. ### `agents.defaults.bootstrapMaxChars` -Maksymalna liczba znaków na plik bootstrap workspace przed obcięciem. Domyślnie: `20000`. +Maksymalna liczba znaków na plik bootstrap workspace przed obcięciem. Domyślnie: `12000`. ```json5 { - agents: { defaults: { bootstrapMaxChars: 20000 } }, + agents: { defaults: { bootstrapMaxChars: 12000 } }, } ``` ### `agents.defaults.bootstrapTotalMaxChars` -Maksymalna łączna liczba znaków wstrzykiwanych we wszystkich plikach bootstrap workspace. Domyślnie: `150000`. +Maksymalna łączna liczba znaków wstrzykiwanych we wszystkich plikach bootstrap workspace. Domyślnie: `60000`. ```json5 { - agents: { defaults: { bootstrapTotalMaxChars: 150000 } }, + agents: { defaults: { bootstrapTotalMaxChars: 60000 } }, } ``` ### `agents.defaults.bootstrapPromptTruncationWarning` -Steruje widocznym dla agenta tekstem ostrzeżenia, gdy kontekst bootstrap jest obcinany. +Steruje widocznym dla agenta tekstem ostrzeżenia, gdy kontekst bootstrap zostanie obcięty. Domyślnie: `"once"`. -- `"off"`: nigdy nie wstrzykuje tekstu ostrzeżenia do system prompt. -- `"once"`: wstrzykuje ostrzeżenie raz dla każdego unikalnego podpisu obcięcia (zalecane). -- `"always"`: wstrzykuje ostrzeżenie przy każdym uruchomieniu, gdy istnieje obcięcie. +- `"off"`: nigdy nie wstrzykuj tekstu ostrzeżenia do system prompt. +- `"once"`: wstrzyknij ostrzeżenie raz dla każdego unikalnego podpisu obcięcia (zalecane). +- `"always"`: wstrzykuj ostrzeżenie przy każdym uruchomieniu, gdy istnieje obcięcie. ```json5 { @@ -985,26 +995,26 @@ Domyślnie: `"once"`. } ``` -### Mapa właścicieli budżetu kontekstu +### Mapa własności budżetu kontekstu -OpenClaw ma wiele budżetów prompt/kontekstu o dużej objętości i są one -celowo podzielone według podsystemów zamiast kierowania wszystkiego przez -jedno ogólne ustawienie. +OpenClaw ma wiele wysokowolumenowych budżetów prompt/kontekstu i są one +celowo rozdzielone według podsystemów zamiast przepływać przez jedno ogólne +ustawienie. - `agents.defaults.bootstrapMaxChars` / `agents.defaults.bootstrapTotalMaxChars`: zwykłe wstrzykiwanie bootstrap workspace. - `agents.defaults.startupContext.*`: - jednorazowe preludium startowe `/new` i `/reset`, w tym ostatnie dzienne - pliki `memory/*.md`. + jednorazowe wprowadzenie uruchamiania dla `/new` i `/reset`, w tym ostatnie + pliki `memory/*.md` z dni dziennych. - `skills.limits.*`: - kompaktowa lista Skills wstrzykiwana do system prompt. + zwarta lista Skills wstrzykiwana do system prompt. - `agents.defaults.contextLimits.*`: - ograniczone wycinki środowiska uruchomieniowego i wstrzykiwane bloki należące do runtime. + ograniczone wycinki runtime i wstrzykiwane bloki należące do runtime. - `memory.qmd.limits.*`: - rozmiar fragmentów wyszukiwania zaindeksowanej pamięci i wstrzyknięć. + rozmiarowanie fragmentów wyszukiwania pamięci indeksowanej i wstrzyknięć. -Użyj pasującego nadpisania per agent tylko wtedy, gdy jeden agent potrzebuje innego +Używaj pasującego nadpisania per agent tylko wtedy, gdy jeden agent potrzebuje innego budżetu: - `agents.list[].skillsLimits.maxSkillsPromptChars` @@ -1012,7 +1022,7 @@ budżetu: #### `agents.defaults.startupContext` -Steruje preludium startowym pierwszej tury wstrzykiwanym przy pustych uruchomieniach `/new` i `/reset`. +Steruje wprowadzeniem uruchamiania pierwszej tury wstrzykiwanym przy pustych uruchomieniach `/new` i `/reset`. ```json5 { @@ -1051,12 +1061,13 @@ Współdzielone wartości domyślne dla ograniczonych powierzchni kontekstu runt ``` - `memoryGetMaxChars`: domyślny limit wycinka `memory_get` przed dodaniem - metadanych obcięcia i informacji o kontynuacji. -- `memoryGetDefaultLines`: domyślne okno wierszy `memory_get`, gdy `lines` jest + metadanych obcięcia i komunikatu o kontynuacji. +- `memoryGetDefaultLines`: domyślne okno linii `memory_get`, gdy `lines` jest pominięte. -- `toolResultMaxChars`: limit wyników narzędzi na żywo używany dla utrwalonych wyników i +- `toolResultMaxChars`: limit bieżącego wyniku narzędzia używany dla utrwalonych wyników i odzyskiwania po przepełnieniu. -- `postCompactionMaxChars`: limit wycinka AGENTS.md używany podczas wstrzykiwania odświeżenia po Compaction. +- `postCompactionMaxChars`: limit wycinka AGENTS.md używany podczas odświeżającego + wstrzyknięcia po Compaction. #### `agents.list[].contextLimits` @@ -1087,8 +1098,8 @@ z `agents.defaults.contextLimits`. #### `skills.limits.maxSkillsPromptChars` -Globalny limit dla kompaktowej listy Skills wstrzykiwanej do system prompt. To -nie wpływa na odczyt plików `SKILL.md` na żądanie. +Globalny limit zwartej listy Skills wstrzykiwanej do system prompt. Nie +wpływa to na odczytywanie plików `SKILL.md` na żądanie. ```json5 { @@ -1121,7 +1132,7 @@ Nadpisanie per agent dla budżetu prompt Skills. ### `agents.defaults.imageMaxDimensionPx` -Maksymalny rozmiar w pikselach dla dłuższego boku obrazu w blokach obrazów transkryptu/narzędzi przed wywołaniami dostawcy. +Maksymalny rozmiar w pikselach dla dłuższego boku obrazu w blokach obrazu transkryptu/narzędzia przed wywołaniami dostawcy. Domyślnie: `1200`. Niższe wartości zwykle zmniejszają użycie tokenów vision i rozmiar ładunku żądania przy przebiegach z dużą liczbą zrzutów ekranu. @@ -1204,45 +1215,45 @@ Format czasu w system prompt. Domyślnie: `auto` (preferencja systemu operacyjne - `model`: akceptuje albo ciąg znaków (`"provider/model"`), albo obiekt (`{ primary, fallbacks }`). - Forma ciągu ustawia tylko model podstawowy. - - Forma obiektu ustawia model podstawowy oraz uporządkowane modele przełączania awaryjnego. + - Forma obiektu ustawia model podstawowy oraz uporządkowane modele awaryjne. - `imageModel`: akceptuje albo ciąg znaków (`"provider/model"`), albo obiekt (`{ primary, fallbacks }`). - Używany przez ścieżkę narzędzia `image` jako konfiguracja modelu vision. - - Używany także jako routing zapasowy, gdy wybrany/domyslny model nie może przyjąć wejścia obrazu. + - Używany także jako routing zapasowy, gdy wybrany/domyslny model nie może przyjmować danych wejściowych obrazu. - `imageGenerationModel`: akceptuje albo ciąg znaków (`"provider/model"`), albo obiekt (`{ primary, fallbacks }`). - - Używany przez współdzieloną funkcję generowania obrazów i każdą przyszłą powierzchnię narzędzia/Pluginu generującą obrazy. + - Używany przez współdzieloną możliwość generowania obrazów oraz każdą przyszłą powierzchnię narzędzia/Pluginu, która generuje obrazy. - Typowe wartości: `google/gemini-3.1-flash-image-preview` dla natywnego generowania obrazów Gemini, `fal/fal-ai/flux/dev` dla fal lub `openai/gpt-image-1` dla OpenAI Images. - - Jeśli wybierzesz bezpośrednio `provider/model`, skonfiguruj również pasujące uwierzytelnianie/klucz API dostawcy (na przykład `GEMINI_API_KEY` lub `GOOGLE_API_KEY` dla `google/*`, `OPENAI_API_KEY` dla `openai/*`, `FAL_KEY` dla `fal/*`). - - Jeśli pominięte, `image_generate` nadal może wywnioskować domyślną wartość dostawcy opartą na uwierzytelnieniu. Najpierw próbuje bieżącego domyślnego dostawcy, a potem pozostałych zarejestrowanych dostawców generowania obrazów w kolejności identyfikatorów dostawców. + - Jeśli wybierzesz bezpośrednio `provider/model`, skonfiguruj też pasujące uwierzytelnianie/klucz API dostawcy (na przykład `GEMINI_API_KEY` lub `GOOGLE_API_KEY` dla `google/*`, `OPENAI_API_KEY` dla `openai/*`, `FAL_KEY` dla `fal/*`). + - Jeśli zostanie pominięty, `image_generate` nadal może wywnioskować domyślnego dostawcę z uwierzytelnianiem. Najpierw próbuje bieżącego domyślnego dostawcy, a potem pozostałych zarejestrowanych dostawców generowania obrazów w kolejności identyfikatorów dostawców. - `musicGenerationModel`: akceptuje albo ciąg znaków (`"provider/model"`), albo obiekt (`{ primary, fallbacks }`). - - Używany przez współdzieloną funkcję generowania muzyki i wbudowane narzędzie `music_generate`. + - Używany przez współdzieloną możliwość generowania muzyki i wbudowane narzędzie `music_generate`. - Typowe wartości: `google/lyria-3-clip-preview`, `google/lyria-3-pro-preview` lub `minimax/music-2.5+`. - - Jeśli pominięte, `music_generate` nadal może wywnioskować domyślną wartość dostawcy opartą na uwierzytelnieniu. Najpierw próbuje bieżącego domyślnego dostawcy, a potem pozostałych zarejestrowanych dostawców generowania muzyki w kolejności identyfikatorów dostawców. - - Jeśli wybierzesz bezpośrednio `provider/model`, skonfiguruj również pasujące uwierzytelnianie/klucz API dostawcy. + - Jeśli zostanie pominięty, `music_generate` nadal może wywnioskować domyślnego dostawcę z uwierzytelnianiem. Najpierw próbuje bieżącego domyślnego dostawcy, a potem pozostałych zarejestrowanych dostawców generowania muzyki w kolejności identyfikatorów dostawców. + - Jeśli wybierzesz bezpośrednio `provider/model`, skonfiguruj też pasujące uwierzytelnianie/klucz API dostawcy. - `videoGenerationModel`: akceptuje albo ciąg znaków (`"provider/model"`), albo obiekt (`{ primary, fallbacks }`). - - Używany przez współdzieloną funkcję generowania wideo i wbudowane narzędzie `video_generate`. + - Używany przez współdzieloną możliwość generowania wideo i wbudowane narzędzie `video_generate`. - Typowe wartości: `qwen/wan2.6-t2v`, `qwen/wan2.6-i2v`, `qwen/wan2.6-r2v`, `qwen/wan2.6-r2v-flash` lub `qwen/wan2.7-r2v`. - - Jeśli pominięte, `video_generate` nadal może wywnioskować domyślną wartość dostawcy opartą na uwierzytelnieniu. Najpierw próbuje bieżącego domyślnego dostawcy, a potem pozostałych zarejestrowanych dostawców generowania wideo w kolejności identyfikatorów dostawców. - - Jeśli wybierzesz bezpośrednio `provider/model`, skonfiguruj również pasujące uwierzytelnianie/klucz API dostawcy. - - Bundled dostawca generowania wideo Qwen obsługuje maksymalnie 1 wyjściowe wideo, 1 wejściowy obraz, 4 wejściowe filmy, czas trwania do 10 sekund oraz opcje na poziomie dostawcy `size`, `aspectRatio`, `resolution`, `audio` i `watermark`. + - Jeśli zostanie pominięty, `video_generate` nadal może wywnioskować domyślnego dostawcę z uwierzytelnianiem. Najpierw próbuje bieżącego domyślnego dostawcy, a potem pozostałych zarejestrowanych dostawców generowania wideo w kolejności identyfikatorów dostawców. + - Jeśli wybierzesz bezpośrednio `provider/model`, skonfiguruj też pasujące uwierzytelnianie/klucz API dostawcy. + - Bundled dostawca generowania wideo Qwen obsługuje maksymalnie 1 wyjściowe wideo, 1 wejściowy obraz, 4 wejściowe wideo, czas trwania 10 sekund oraz opcje na poziomie dostawcy `size`, `aspectRatio`, `resolution`, `audio` i `watermark`. - `pdfModel`: akceptuje albo ciąg znaków (`"provider/model"`), albo obiekt (`{ primary, fallbacks }`). - Używany przez narzędzie `pdf` do routingu modelu. - - Jeśli pominięty, narzędzie PDF przechodzi awaryjnie do `imageModel`, a następnie do rozwiązanego modelu sesji/domyslnego. -- `pdfMaxBytesMb`: domyślny limit rozmiaru PDF dla narzędzia `pdf`, gdy `maxBytesMb` nie jest przekazane w czasie wywołania. -- `pdfMaxPages`: domyślna maksymalna liczba stron uwzględnianych przez tryb awaryjnej ekstrakcji w narzędziu `pdf`. -- `verboseDefault`: domyślny poziom verbose dla agentów. Wartości: `"off"`, `"on"`, `"full"`. Domyślnie: `"off"`. + - Jeśli zostanie pominięty, narzędzie PDF przechodzi awaryjnie do `imageModel`, a następnie do rozwiązanego modelu sesji/domyslnego. +- `pdfMaxBytesMb`: domyślny limit rozmiaru PDF dla narzędzia `pdf`, gdy `maxBytesMb` nie jest przekazane przy wywołaniu. +- `pdfMaxPages`: domyślna maksymalna liczba stron uwzględnianych przez zapasowy tryb ekstrakcji w narzędziu `pdf`. +- `verboseDefault`: domyślny poziom szczegółowości dla agentów. Wartości: `"off"`, `"on"`, `"full"`. Domyślnie: `"off"`. - `elevatedDefault`: domyślny poziom wyjścia elevated dla agentów. Wartości: `"off"`, `"on"`, `"ask"`, `"full"`. Domyślnie: `"on"`. -- `model.primary`: format `provider/model` (np. `openai/gpt-5.4`). Jeśli pominiesz dostawcę, OpenClaw najpierw próbuje aliasu, potem unikalnego dopasowania dokładnego identyfikatora modelu w skonfigurowanych dostawcach, a dopiero potem wraca do skonfigurowanego domyślnego dostawcy (przestarzałe zachowanie zgodności, więc preferuj jawne `provider/model`). Jeśli ten dostawca nie udostępnia już skonfigurowanego modelu domyślnego, OpenClaw przechodzi awaryjnie do pierwszego skonfigurowanego dostawcy/modelu zamiast ujawniać przestarzałą wartość domyślną usuniętego dostawcy. +- `model.primary`: format `provider/model` (np. `openai/gpt-5.4`). Jeśli pominiesz dostawcę, OpenClaw najpierw próbuje aliasu, potem unikalnego dopasowania dokładnego identyfikatora modelu wśród skonfigurowanych dostawców, a dopiero potem przechodzi do skonfigurowanego dostawcy domyślnego (przestarzałe zachowanie zgodności, więc preferuj jawne `provider/model`). Jeśli ten dostawca nie udostępnia już skonfigurowanego modelu domyślnego, OpenClaw przechodzi awaryjnie do pierwszego skonfigurowanego dostawcy/modelu zamiast zgłaszać nieaktualną wartość domyślną usuniętego dostawcy. - `models`: skonfigurowany katalog modeli i lista dozwolonych dla `/model`. Każdy wpis może zawierać `alias` (skrót) i `params` (specyficzne dla dostawcy, na przykład `temperature`, `maxTokens`, `cacheRetention`, `context1m`). - `params`: globalne domyślne parametry dostawcy stosowane do wszystkich modeli. Ustawiane w `agents.defaults.params` (np. `{ cacheRetention: "long" }`). -- Priorytet scalania `params` (konfiguracja): `agents.defaults.params` (globalna baza) jest nadpisywane przez `agents.defaults.models["provider/model"].params` (per model), a następnie `agents.list[].params` (pasujący identyfikator agenta) nadpisuje po kluczu. Szczegóły znajdziesz w [Prompt Caching](/pl/reference/prompt-caching). -- `embeddedHarness`: domyślna polityka niskopoziomowego runtime wbudowanego agenta. Użyj `runtime: "auto"`, aby pozwolić zarejestrowanym harnessom Pluginów przejmować obsługiwane modele, `runtime: "pi"`, aby wymusić wbudowany harness PI, albo zarejestrowanego identyfikatora harnessu, np. `runtime: "codex"`. Ustaw `fallback: "none"`, aby wyłączyć automatyczny zapasowy fallback PI. -- Pisarze konfiguracji, którzy mutują te pola (na przykład `/models set`, `/models set-image` oraz polecenia dodawania/usuwania fallbacków), zapisują kanoniczną formę obiektu i w miarę możliwości zachowują istniejące listy fallbacków. +- Kolejność scalania `params` (konfiguracja): `agents.defaults.params` (globalna baza) jest nadpisywane przez `agents.defaults.models["provider/model"].params` (per model), a następnie `agents.list[].params` (pasujący identyfikator agenta) nadpisuje według klucza. Szczegóły znajdziesz w [Prompt Caching](/pl/reference/prompt-caching). +- `embeddedHarness`: domyślna niskopoziomowa polityka runtime wbudowanego agenta. Użyj `runtime: "auto"`, aby zarejestrowane harnessy Pluginów mogły przejmować obsługiwane modele, `runtime: "pi"`, aby wymusić wbudowany harness PI, albo zarejestrowanego identyfikatora harnessu, takiego jak `runtime: "codex"`. Ustaw `fallback: "none"`, aby wyłączyć automatyczny zapasowy fallback PI. +- Zapisywacze konfiguracji, które modyfikują te pola (na przykład `/models set`, `/models set-image` oraz polecenia dodawania/usuwania fallbacków), zapisują kanoniczną formę obiektu i zachowują istniejące listy fallbacków, gdy to możliwe. - `maxConcurrent`: maksymalna liczba równoległych uruchomień agentów między sesjami (każda sesja nadal jest serializowana). Domyślnie: 4. ### `agents.defaults.embeddedHarness` -`embeddedHarness` kontroluje, który niskopoziomowy executor uruchamia tury wbudowanego agenta. -Większość wdrożeń powinna zachować wartość domyślną `{ runtime: "auto", fallback: "pi" }`. +`embeddedHarness` steruje tym, który niskopoziomowy wykonawca uruchamia tury wbudowanego agenta. +W większości wdrożeń należy pozostawić wartość domyślną `{ runtime: "auto", fallback: "pi" }`. Użyj tego, gdy zaufany Plugin udostępnia natywny harness, taki jak bundled harness serwera aplikacji Codex. @@ -1261,12 +1272,12 @@ harness serwera aplikacji Codex. ``` - `runtime`: `"auto"`, `"pi"` lub identyfikator zarejestrowanego harnessu Pluginu. Bundled Plugin Codex rejestruje `codex`. -- `fallback`: `"pi"` lub `"none"`. `"pi"` zachowuje wbudowany harness PI jako fallback zgodności. `"none"` powoduje, że brakujący lub nieobsługiwany wybór harnessu Pluginu kończy się błędem zamiast cichego użycia PI. +- `fallback`: `"pi"` lub `"none"`. `"pi"` zachowuje wbudowany harness PI jako kompatybilny fallback. `"none"` powoduje, że brakujący lub nieobsługiwany wybór harnessu Pluginu kończy się błędem zamiast cichego użycia PI. - Nadpisania środowiskowe: `OPENCLAW_AGENT_RUNTIME=` nadpisuje `runtime`; `OPENCLAW_AGENT_HARNESS_FALLBACK=none` wyłącza fallback PI dla tego procesu. -- Dla wdrożeń tylko z Codex ustaw `model: "codex/gpt-5.4"`, `embeddedHarness.runtime: "codex"` i `embeddedHarness.fallback: "none"`. -- To kontroluje tylko wbudowany harness czatu. Generowanie mediów, vision, PDF, muzyka, wideo i TTS nadal używają swoich ustawień dostawcy/modelu. +- Dla wdrożeń tylko z Codex ustaw `model: "codex/gpt-5.4"`, `embeddedHarness.runtime: "codex"` oraz `embeddedHarness.fallback: "none"`. +- To steruje tylko wbudowanym harness chat. Generowanie mediów, vision, PDF, muzyka, wideo i TTS nadal używają własnych ustawień dostawcy/modelu. -**Wbudowane skróty aliasów** (mają zastosowanie tylko wtedy, gdy model jest w `agents.defaults.models`): +**Wbudowane skróty aliasów** (mają zastosowanie tylko wtedy, gdy model znajduje się w `agents.defaults.models`): | Alias | Model | | ------------------- | -------------------------------------- | @@ -1279,15 +1290,15 @@ harness serwera aplikacji Codex. | `gemini-flash` | `google/gemini-3-flash-preview` | | `gemini-flash-lite` | `google/gemini-3.1-flash-lite-preview` | -Skonfigurowane przez Ciebie aliasy zawsze mają pierwszeństwo przed domyślnymi. +Twoje skonfigurowane aliasy zawsze mają pierwszeństwo przed domyślnymi. Modele Z.AI GLM-4.x automatycznie włączają tryb thinking, chyba że ustawisz `--thinking off` lub samodzielnie zdefiniujesz `agents.defaults.models["zai/"].params.thinking`. -Modele Z.AI domyślnie włączają `tool_stream` do strumieniowania wywołań narzędzi. Ustaw `agents.defaults.models["zai/"].params.tool_stream` na `false`, aby to wyłączyć. +Modele Z.AI domyślnie włączają `tool_stream` dla strumieniowania wywołań narzędzi. Ustaw `agents.defaults.models["zai/"].params.tool_stream` na `false`, aby to wyłączyć. Modele Anthropic Claude 4.6 domyślnie używają thinking `adaptive`, gdy nie ustawiono jawnego poziomu thinking. ### `agents.defaults.cliBackends` -Opcjonalne backendy CLI dla tekstowych przebiegów awaryjnych (bez wywołań narzędzi). Przydatne jako kopia zapasowa, gdy dostawcy API zawodzą. +Opcjonalne backendy CLI dla zapasowych uruchomień wyłącznie tekstowych (bez wywołań narzędzi). Przydatne jako kopia zapasowa, gdy dostawcy API zawodzą. ```json5 { @@ -1316,12 +1327,12 @@ Opcjonalne backendy CLI dla tekstowych przebiegów awaryjnych (bez wywołań nar ``` - Backendy CLI są przede wszystkim tekstowe; narzędzia są zawsze wyłączone. -- Sesje są obsługiwane, gdy ustawione jest `sessionArg`. +- Sesje są obsługiwane, gdy ustawiono `sessionArg`. - Przekazywanie obrazów jest obsługiwane, gdy `imageArg` akceptuje ścieżki plików. ### `agents.defaults.systemPromptOverride` -Zastępuje cały system prompt złożony przez OpenClaw stałym ciągiem znaków. Ustawiane na poziomie domyślnym (`agents.defaults.systemPromptOverride`) lub per agent (`agents.list[].systemPromptOverride`). Wartości per agent mają pierwszeństwo; wartość pusta lub zawierająca tylko białe znaki jest ignorowana. Przydatne do kontrolowanych eksperymentów z promptami. +Zastępuje cały system prompt złożony przez OpenClaw stałym ciągiem znaków. Ustawiane na poziomie domyślnym (`agents.defaults.systemPromptOverride`) lub per agent (`agents.list[].systemPromptOverride`). Wartości per agent mają pierwszeństwo; pusta wartość lub wartość składająca się wyłącznie z białych znaków jest ignorowana. Przydatne do kontrolowanych eksperymentów z promptami. ```json5 { @@ -1363,14 +1374,14 @@ Okresowe uruchomienia Heartbeat. ``` - `every`: ciąg czasu trwania (ms/s/m/h). Domyślnie: `30m` (uwierzytelnianie kluczem API) lub `1h` (uwierzytelnianie OAuth). Ustaw `0m`, aby wyłączyć. -- `includeSystemPromptSection`: gdy ma wartość false, pomija sekcję Heartbeat w system prompt i pomija wstrzykiwanie `HEARTBEAT.md` do kontekstu bootstrap. Domyślnie: `true`. -- `suppressToolErrorWarnings`: gdy ma wartość true, ukrywa ładunki ostrzeżeń o błędach narzędzi podczas uruchomień Heartbeat. +- `includeSystemPromptSection`: gdy `false`, pomija sekcję Heartbeat w system prompt i pomija wstrzykiwanie `HEARTBEAT.md` do kontekstu bootstrap. Domyślnie: `true`. +- `suppressToolErrorWarnings`: gdy `true`, pomija ładunki ostrzeżeń o błędach narzędzi podczas uruchomień Heartbeat. - `timeoutSeconds`: maksymalny czas w sekundach dozwolony dla tury agenta Heartbeat przed jej przerwaniem. Pozostaw nieustawione, aby użyć `agents.defaults.timeoutSeconds`. -- `directPolicy`: zasada dostarczania bezpośredniego/DM. `allow` (domyślnie) zezwala na dostarczanie do celu bezpośredniego. `block` blokuje dostarczanie do celu bezpośredniego i emituje `reason=dm-blocked`. -- `lightContext`: gdy ma wartość true, uruchomienia Heartbeat używają lekkiego kontekstu bootstrap i zachowują tylko `HEARTBEAT.md` z plików bootstrap workspace. -- `isolatedSession`: gdy ma wartość true, każde uruchomienie Heartbeat odbywa się w świeżej sesji bez wcześniejszej historii rozmowy. Ten sam wzorzec izolacji co Cron `sessionTarget: "isolated"`. Zmniejsza koszt tokenów na Heartbeat z około 100K do około 2-5K tokenów. -- Per agent: ustaw `agents.list[].heartbeat`. Gdy dowolny agent definiuje `heartbeat`, Heartbeat uruchamiają **tylko te agenty**. -- Heartbeat uruchamia pełne tury agenta — krótsze interwały zużywają więcej tokenów. +- `directPolicy`: zasada bezpośredniego/dm dostarczania. `allow` (domyślnie) zezwala na dostarczanie do bezpośredniego celu. `block` blokuje dostarczanie do bezpośredniego celu i emituje `reason=dm-blocked`. +- `lightContext`: gdy `true`, uruchomienia Heartbeat używają lekkiego kontekstu bootstrap i zachowują tylko `HEARTBEAT.md` z plików bootstrap workspace. +- `isolatedSession`: gdy `true`, każdy Heartbeat działa w świeżej sesji bez wcześniejszej historii rozmowy. Ten sam wzorzec izolacji co Cron `sessionTarget: "isolated"`. Zmniejsza koszt tokenów na Heartbeat z około 100K do około 2-5K tokenów. +- Per agent: ustaw `agents.list[].heartbeat`. Gdy dowolny agent definiuje `heartbeat`, Heartbeat uruchamiają **tylko ci agenci**. +- Heartbeat uruchamia pełne tury agenta — krótsze interwały spalają więcej tokenów. ### `agents.defaults.compaction` @@ -1400,19 +1411,19 @@ Okresowe uruchomienia Heartbeat. } ``` -- `mode`: `default` lub `safeguard` (podsumowywanie porcjami dla długiej historii). Zobacz [Compaction](/pl/concepts/compaction). -- `provider`: identyfikator zarejestrowanego Pluginu dostawcy Compaction. Gdy ustawione, wywoływane jest `summarize()` dostawcy zamiast wbudowanego podsumowywania LLM. W razie błędu wraca do wbudowanego trybu. Ustawienie dostawcy wymusza `mode: "safeguard"`. Zobacz [Compaction](/pl/concepts/compaction). -- `timeoutSeconds`: maksymalna liczba sekund dozwolona dla pojedynczej operacji Compaction, po której OpenClaw ją przerywa. Domyślnie: `900`. -- `identifierPolicy`: `strict` (domyślnie), `off` lub `custom`. `strict` dodaje na początku wbudowane wskazówki dotyczące zachowywania nieprzezroczystych identyfikatorów podczas podsumowywania Compaction. +- `mode`: `default` lub `safeguard` (sumaryzacja porcjowana dla długich historii). Zobacz [Compaction](/pl/concepts/compaction). +- `provider`: identyfikator zarejestrowanego Pluginu dostawcy Compaction. Gdy jest ustawiony, zamiast wbudowanej sumaryzacji LLM wywoływane jest `summarize()` dostawcy. W razie błędu następuje fallback do wbudowanej implementacji. Ustawienie dostawcy wymusza `mode: "safeguard"`. Zobacz [Compaction](/pl/concepts/compaction). +- `timeoutSeconds`: maksymalna liczba sekund dozwolona dla pojedynczej operacji Compaction, po której OpenClaw ją przerwie. Domyślnie: `900`. +- `identifierPolicy`: `strict` (domyślnie), `off` lub `custom`. `strict` dodaje wstępnie wbudowane wskazówki dotyczące zachowania nieprzezroczystych identyfikatorów podczas sumaryzacji Compaction. - `identifierInstructions`: opcjonalny własny tekst zachowania identyfikatorów używany, gdy `identifierPolicy=custom`. -- `postCompactionSections`: opcjonalne nazwy sekcji H2/H3 z AGENTS.md do ponownego wstrzyknięcia po Compaction. Domyślnie `["Session Startup", "Red Lines"]`; ustaw `[]`, aby wyłączyć ponowne wstrzyknięcie. Gdy nieustawione lub jawnie ustawione na tę domyślną parę, starsze nagłówki `Every Session`/`Safety` są również akceptowane jako zgodność wsteczna. -- `model`: opcjonalne nadpisanie `provider/model-id` tylko dla podsumowywania Compaction. Użyj tego, gdy główna sesja ma pozostać przy jednym modelu, ale podsumowania Compaction mają działać na innym; gdy nieustawione, Compaction używa modelu podstawowego sesji. -- `notifyUser`: gdy `true`, wysyła krótkie powiadomienie do użytkownika, gdy rozpoczyna się Compaction (na przykład „Trwa kompaktowanie kontekstu...” ). Domyślnie wyłączone, aby Compaction pozostawał cichy. -- `memoryFlush`: cicha agentowa tura przed automatycznym Compaction, aby zapisać trwałe wspomnienia. Pomijane, gdy workspace jest tylko do odczytu. +- `postCompactionSections`: opcjonalne nazwy sekcji H2/H3 z AGENTS.md do ponownego wstrzyknięcia po Compaction. Domyślnie `["Session Startup", "Red Lines"]`; ustaw `[]`, aby wyłączyć ponowne wstrzykiwanie. Gdy nie jest ustawione lub jest jawnie ustawione na tę domyślną parę, starsze nagłówki `Every Session`/`Safety` są również akceptowane jako starszy fallback. +- `model`: opcjonalne nadpisanie `provider/model-id` tylko dla sumaryzacji Compaction. Użyj tego, gdy główna sesja ma pozostać przy jednym modelu, ale podsumowania Compaction mają działać na innym; gdy nie jest ustawione, Compaction używa modelu podstawowego sesji. +- `notifyUser`: gdy `true`, wysyła krótkie powiadomienie do użytkownika przy rozpoczęciu Compaction (na przykład „Compacting context...”). Domyślnie wyłączone, aby Compaction pozostał cichy. +- `memoryFlush`: cicha tura agentowa przed automatycznym Compaction do zapisania trwałych wspomnień. Pomijana, gdy workspace jest tylko do odczytu. ### `agents.defaults.contextPruning` -Przycina **stare wyniki narzędzi** z kontekstu w pamięci przed wysłaniem do LLM. **Nie** modyfikuje historii sesji zapisanej na dysku. +Przycina **stare wyniki narzędzi** z kontekstu w pamięci przed wysłaniem do LLM. **Nie** modyfikuje historii sesji na dysku. ```json5 { @@ -1437,22 +1448,22 @@ Przycina **stare wyniki narzędzi** z kontekstu w pamięci przed wysłaniem do L - `mode: "cache-ttl"` włącza przebiegi przycinania. -- `ttl` określa, jak często przycinanie może uruchomić się ponownie (po ostatnim użyciu pamięci podręcznej). -- Przycinanie najpierw miękko skraca zbyt duże wyniki narzędzi, a następnie w razie potrzeby całkowicie czyści starsze wyniki narzędzi. +- `ttl` określa, jak często przycinanie może zostać uruchomione ponownie (po ostatnim dotknięciu cache). +- Przycinanie najpierw miękko skraca zbyt duże wyniki narzędzi, a następnie w razie potrzeby twardo czyści starsze wyniki narzędzi. **Miękkie skracanie** zachowuje początek i koniec oraz wstawia `...` pośrodku. -**Twarde czyszczenie** zastępuje cały wynik narzędzia symbolem zastępczym. +**Twarde czyszczenie** zastępuje cały wynik narzędzia placeholderem. Uwagi: - Bloki obrazów nigdy nie są skracane/czyszczone. -- Proporcje są oparte na znakach (w przybliżeniu), a nie na dokładnej liczbie tokenów. +- Współczynniki są oparte na znakach (w przybliżeniu), a nie na dokładnej liczbie tokenów. - Jeśli istnieje mniej niż `keepLastAssistants` wiadomości asystenta, przycinanie jest pomijane. -Szczegóły zachowania znajdziesz w [Session Pruning](/pl/concepts/session-pruning). +Szczegóły działania znajdziesz w [Session Pruning](/pl/concepts/session-pruning). ### Strumieniowanie blokowe @@ -1471,10 +1482,10 @@ Szczegóły zachowania znajdziesz w [Session Pruning](/pl/concepts/session-pruni ``` - Kanały inne niż Telegram wymagają jawnego `*.blockStreaming: true`, aby włączyć odpowiedzi blokowe. -- Nadpisania kanału: `channels..blockStreamingCoalesce` (oraz warianty per konto). Signal/Slack/Discord/Google Chat domyślnie używają `minChars: 1500`. +- Nadpisania kanałów: `channels..blockStreamingCoalesce` (oraz warianty per konto). Signal/Slack/Discord/Google Chat mają domyślnie `minChars: 1500`. - `humanDelay`: losowa pauza między odpowiedziami blokowymi. `natural` = 800–2500 ms. Nadpisanie per agent: `agents.list[].humanDelay`. -Szczegóły zachowania i porcjowania znajdziesz w [Streaming](/pl/concepts/streaming). +Szczegóły działania i porcjowania znajdziesz w [Streaming](/pl/concepts/streaming). ### Wskaźniki pisania @@ -1489,7 +1500,7 @@ Szczegóły zachowania i porcjowania znajdziesz w [Streaming](/pl/concepts/strea } ``` -- Wartości domyślne: `instant` dla czatów bezpośrednich/wzmianek, `message` dla niewzmiankowanych czatów grupowych. +- Domyślnie: `instant` dla czatów bezpośrednich/wzmianek, `message` dla czatów grupowych bez wzmianki. - Nadpisania per sesja: `session.typingMode`, `session.typingIntervalSeconds`. Zobacz [Typing Indicators](/pl/concepts/typing-indicators). @@ -1601,17 +1612,17 @@ Opcjonalny sandboxing dla wbudowanego agenta. Pełny przewodnik znajdziesz w [Sa - `ssh`: ogólny zdalny runtime oparty na SSH - `openshell`: runtime OpenShell -Gdy wybrane jest `backend: "openshell"`, ustawienia specyficzne dla runtime są przenoszone do +Gdy wybrane jest `backend: "openshell"`, ustawienia specyficzne dla runtime przenoszą się do `plugins.entries.openshell.config`. **Konfiguracja backendu SSH:** -- `target`: cel SSH w formie `user@host[:port]` +- `target`: cel SSH w formacie `user@host[:port]` - `command`: polecenie klienta SSH (domyślnie: `ssh`) - `workspaceRoot`: bezwzględny zdalny katalog główny używany dla workspace per zakres - `identityFile` / `certificateFile` / `knownHostsFile`: istniejące lokalne pliki przekazywane do OpenSSH -- `identityData` / `certificateData` / `knownHostsData`: zawartość inline lub SecretRef, które OpenClaw materializuje do plików tymczasowych w czasie działania -- `strictHostKeyChecking` / `updateHostKeys`: ustawienia zasad klucza hosta OpenSSH +- `identityData` / `certificateData` / `knownHostsData`: treść inline lub SecretRef, które OpenClaw materializuje do plików tymczasowych w runtime +- `strictHostKeyChecking` / `updateHostKeys`: ustawienia zasad kluczy hosta OpenSSH **Priorytet uwierzytelniania SSH:** @@ -1622,10 +1633,10 @@ Gdy wybrane jest `backend: "openshell"`, ustawienia specyficzne dla runtime są **Zachowanie backendu SSH:** -- inicjuje zdalny workspace raz po utworzeniu lub odtworzeniu +- inicjalizuje zdalny workspace raz po utworzeniu lub odtworzeniu - następnie utrzymuje zdalny workspace SSH jako kanoniczny - kieruje `exec`, narzędzia plikowe i ścieżki mediów przez SSH -- nie synchronizuje automatycznie zdalnych zmian z powrotem na hosta +- nie synchronizuje automatycznie zmian zdalnych z powrotem do hosta - nie obsługuje kontenerów przeglądarki sandboxa **Dostęp do workspace:** @@ -1637,7 +1648,7 @@ Gdy wybrane jest `backend: "openshell"`, ustawienia specyficzne dla runtime są **Zakres:** - `session`: kontener + workspace per sesja -- `agent`: jeden kontener + workspace per agent (domyślnie) +- `agent`: jeden kontener + workspace na agenta (domyślnie) - `shared`: współdzielony kontener i workspace (brak izolacji między sesjami) **Konfiguracja Pluginu OpenShell:** @@ -1668,30 +1679,30 @@ Gdy wybrane jest `backend: "openshell"`, ustawienia specyficzne dla runtime są **Tryb OpenShell:** -- `mirror`: inicjuje zdalne środowisko z lokalnego przed `exec`, synchronizuje z powrotem po `exec`; lokalny workspace pozostaje kanoniczny -- `remote`: inicjuje zdalne środowisko raz podczas tworzenia sandboxa, a następnie utrzymuje zdalny workspace jako kanoniczny +- `mirror`: inicjalizuje zdalne z lokalnego przed `exec`, synchronizuje z powrotem po `exec`; lokalny workspace pozostaje kanoniczny +- `remote`: inicjalizuje zdalne raz przy tworzeniu sandboxa, a następnie utrzymuje zdalny workspace jako kanoniczny -W trybie `remote` lokalne zmiany hosta wykonane poza OpenClaw nie są automatycznie synchronizowane do sandboxa po kroku inicjalizacji. -Transport odbywa się przez SSH do sandboxa OpenShell, ale Plugin zarządza cyklem życia sandboxa i opcjonalną synchronizacją lustrzaną. +W trybie `remote` lokalne na hoście edycje wykonane poza OpenClaw nie są automatycznie synchronizowane do sandboxa po kroku inicjalizacji. +Transport odbywa się przez SSH do sandboxa OpenShell, ale Plugin zarządza cyklem życia sandboxa i opcjonalną synchronizacją mirror. -**`setupCommand`** uruchamia się raz po utworzeniu kontenera (przez `sh -lc`). Wymaga wychodzącego dostępu do sieci, zapisywalnego katalogu głównego i użytkownika root. +**`setupCommand`** uruchamia się raz po utworzeniu kontenera (przez `sh -lc`). Wymaga wychodzącego ruchu sieciowego, zapisywalnego katalogu głównego i użytkownika root. **Kontenery domyślnie używają `network: "none"`** — ustaw `"bridge"` (lub własną sieć bridge), jeśli agent potrzebuje dostępu wychodzącego. `"host"` jest blokowane. `"container:"` jest domyślnie blokowane, chyba że jawnie ustawisz -`sandbox.docker.dangerouslyAllowContainerNamespaceJoin: true` (tryb awaryjny). +`sandbox.docker.dangerouslyAllowContainerNamespaceJoin: true` (tryb break-glass). -**Przychodzące załączniki** są umieszczane w `media/inbound/*` w aktywnym workspace. +**Przychodzące załączniki** są etapowane do `media/inbound/*` w aktywnym workspace. -**`docker.binds`** montuje dodatkowe katalogi hosta; globalne i per-agent `binds` są scalane. +**`docker.binds`** montuje dodatkowe katalogi hosta; globalne i per-agent bindy są scalane. -**Sandboxowana przeglądarka** (`sandbox.browser.enabled`): Chromium + CDP w kontenerze. URL noVNC jest wstrzykiwany do system prompt. Nie wymaga `browser.enabled` w `openclaw.json`. -Dostęp obserwatora noVNC domyślnie używa uwierzytelniania VNC, a OpenClaw emituje URL z krótkotrwałym tokenem (zamiast ujawniać hasło we współdzielonym URL). +**Przeglądarka sandboxa** (`sandbox.browser.enabled`): Chromium + CDP w kontenerze. Adres URL noVNC jest wstrzykiwany do system prompt. Nie wymaga `browser.enabled` w `openclaw.json`. +Dostęp obserwatora noVNC domyślnie używa uwierzytelniania VNC, a OpenClaw emituje adres URL z krótkotrwałym tokenem (zamiast ujawniać hasło we współdzielonym adresie URL). -- `allowHostControl: false` (domyślnie) blokuje sandboxowane sesje przed kierowaniem do przeglądarki hosta. -- `network` domyślnie ma wartość `openclaw-sandbox-browser` (dedykowana sieć bridge). Ustaw `bridge` tylko wtedy, gdy jawnie chcesz globalnej łączności bridge. -- `cdpSourceRange` opcjonalnie ogranicza ruch przychodzący CDP na krawędzi kontenera do zakresu CIDR (na przykład `172.21.0.1/32`). -- `sandbox.browser.binds` montuje dodatkowe katalogi hosta tylko do kontenera sandboxowanej przeglądarki. Gdy ustawione (w tym `[]`), zastępuje `docker.binds` dla kontenera przeglądarki. -- Domyślne parametry uruchomienia są zdefiniowane w `scripts/sandbox-browser-entrypoint.sh` i dostrojone pod hosty kontenerowe: +- `allowHostControl: false` (domyślnie) blokuje sesjom sandboxowanym kierowanie do przeglądarki hosta. +- `network` ma domyślnie wartość `openclaw-sandbox-browser` (dedykowana sieć bridge). Ustaw `bridge` tylko wtedy, gdy jawnie chcesz globalnej łączności bridge. +- `cdpSourceRange` opcjonalnie ogranicza wejściowy ruch CDP na krawędzi kontenera do zakresu CIDR (na przykład `172.21.0.1/32`). +- `sandbox.browser.binds` montuje dodatkowe katalogi hosta tylko do kontenera przeglądarki sandboxa. Gdy jest ustawione (w tym `[]`), zastępuje `docker.binds` dla kontenera przeglądarki. +- Domyślne parametry uruchamiania są zdefiniowane w `scripts/sandbox-browser-entrypoint.sh` i dostrojone do hostów kontenerowych: - `--remote-debugging-address=127.0.0.1` - `--remote-debugging-port=` - `--user-data-dir=${HOME}/.chrome` @@ -1712,24 +1723,24 @@ Dostęp obserwatora noVNC domyślnie używa uwierzytelniania VNC, a OpenClaw emi - `--disable-3d-apis`, `--disable-software-rasterizer` i `--disable-gpu` są domyślnie włączone i można je wyłączyć przez `OPENCLAW_BROWSER_DISABLE_GRAPHICS_FLAGS=0`, jeśli użycie WebGL/3D tego wymaga. - - `OPENCLAW_BROWSER_DISABLE_EXTENSIONS=0` ponownie włącza rozszerzenia, jeśli Twój workflow + - `OPENCLAW_BROWSER_DISABLE_EXTENSIONS=0` ponownie włącza rozszerzenia, jeśli Twój przepływ pracy ich wymaga. - `--renderer-process-limit=2` można zmienić przez `OPENCLAW_BROWSER_RENDERER_PROCESS_LIMIT=`; ustaw `0`, aby użyć domyślnego limitu procesów Chromium. - - dodatkowo `--no-sandbox` i `--disable-setuid-sandbox`, gdy `noSandbox` jest włączone. - - Wartości domyślne są bazą obrazu kontenera; użyj własnego obrazu przeglądarki z własnym - entrypointem, aby zmienić domyślne ustawienia kontenera. + - dodatkowo `--no-sandbox` i `--disable-setuid-sandbox`, gdy włączone jest `noSandbox`. + - Wartości domyślne są bazą obrazu kontenera; aby zmienić domyślne ustawienia kontenera, użyj własnego obrazu przeglądarki z własnym + entrypoint. -Sandboxing przeglądarki i `sandbox.docker.binds` działają tylko z Dockerem. +Sandboxing przeglądarki i `sandbox.docker.binds` są dostępne tylko dla Dockera. -Budowanie obrazów: +Zbuduj obrazy: ```bash -scripts/sandbox-setup.sh # main sandbox image -scripts/sandbox-browser-setup.sh # optional browser image +scripts/sandbox-setup.sh # główny obraz sandboxa +scripts/sandbox-browser-setup.sh # opcjonalny obraz przeglądarki ``` ### `agents.list` (nadpisania per agent) @@ -1782,26 +1793,26 @@ scripts/sandbox-browser-setup.sh # optional browser image ``` - `id`: stabilny identyfikator agenta (wymagany). -- `default`: gdy ustawionych jest wiele, wygrywa pierwszy (zapisywane jest ostrzeżenie). Jeśli żaden nie jest ustawiony, domyślny jest pierwszy wpis listy. +- `default`: gdy ustawiono wiele, wygrywa pierwszy (zapisywane jest ostrzeżenie). Jeśli nie ustawiono żadnego, domyślny jest pierwszy wpis na liście. - `model`: forma ciągu nadpisuje tylko `primary`; forma obiektu `{ primary, fallbacks }` nadpisuje oba (`[]` wyłącza globalne fallbacki). Zadania Cron, które nadpisują tylko `primary`, nadal dziedziczą domyślne fallbacki, chyba że ustawisz `fallbacks: []`. -- `params`: parametry strumienia per agent scalane ponad wybranym wpisem modelu w `agents.defaults.models`. Użyj tego do nadpisań specyficznych dla agenta, takich jak `cacheRetention`, `temperature` lub `maxTokens`, bez duplikowania całego katalogu modeli. -- `skills`: opcjonalna lista dozwolonych Skills per agent. Jeśli pominięta, agent dziedziczy `agents.defaults.skills`, gdy jest ustawione; jawna lista zastępuje wartości domyślne zamiast je scalać, a `[]` oznacza brak Skills. -- `thinkingDefault`: opcjonalny domyślny poziom thinking per agent (`off | minimal | low | medium | high | xhigh | adaptive`). Nadpisuje `agents.defaults.thinkingDefault` dla tego agenta, gdy nie jest ustawione nadpisanie per wiadomość ani per sesję. -- `reasoningDefault`: opcjonalna domyślna widoczność reasoning per agent (`on | off | stream`). Stosowane, gdy nie ma nadpisania reasoning per wiadomość ani per sesję. -- `fastModeDefault`: opcjonalna wartość domyślna per agent dla fast mode (`true | false`). Stosowane, gdy nie ma nadpisania fast mode per wiadomość ani per sesję. -- `embeddedHarness`: opcjonalne nadpisanie polityki niskopoziomowego harnessu per agent. Użyj `{ runtime: "codex", fallback: "none" }`, aby jeden agent był tylko Codex, a pozostałe zachowały domyślny fallback PI. -- `runtime`: opcjonalny deskryptor runtime per agent. Użyj `type: "acp"` z domyślnymi ustawieniami `runtime.acp` (`agent`, `backend`, `mode`, `cwd`), gdy agent ma domyślnie używać sesji harnessu ACP. -- `identity.avatar`: ścieżka względna do workspace, URL `http(s)` lub URI `data:`. +- `params`: parametry strumienia per agent scalane na wpis wybranego modelu w `agents.defaults.models`. Użyj tego do nadpisań specyficznych dla agenta, takich jak `cacheRetention`, `temperature` lub `maxTokens`, bez powielania całego katalogu modeli. +- `skills`: opcjonalna lista dozwolonych Skills per agent. Jeśli pominięta, agent dziedziczy `agents.defaults.skills`, gdy jest ustawione; jawna lista zastępuje wartości domyślne zamiast się z nimi scalać, a `[]` oznacza brak Skills. +- `thinkingDefault`: opcjonalny domyślny poziom thinking per agent (`off | minimal | low | medium | high | xhigh | adaptive`). Nadpisuje `agents.defaults.thinkingDefault` dla tego agenta, gdy nie ustawiono nadpisania per wiadomość ani per sesję. +- `reasoningDefault`: opcjonalna domyślna widoczność reasoning per agent (`on | off | stream`). Ma zastosowanie, gdy nie ustawiono nadpisania reasoning per wiadomość ani per sesję. +- `fastModeDefault`: opcjonalna wartość domyślna trybu fast per agent (`true | false`). Ma zastosowanie, gdy nie ustawiono nadpisania trybu fast per wiadomość ani per sesję. +- `embeddedHarness`: opcjonalne nadpisanie niskopoziomowej polityki harness per agent. Użyj `{ runtime: "codex", fallback: "none" }`, aby jeden agent był tylko Codex, podczas gdy inni agenci zachowają domyślny fallback PI. +- `runtime`: opcjonalny deskryptor runtime per agent. Użyj `type: "acp"` z ustawieniami domyślnymi `runtime.acp` (`agent`, `backend`, `mode`, `cwd`), gdy agent ma domyślnie używać sesji harness ACP. +- `identity.avatar`: ścieżka względem workspace, adres URL `http(s)` lub URI `data:`. - `identity` wyprowadza wartości domyślne: `ackReaction` z `emoji`, `mentionPatterns` z `name`/`emoji`. - `subagents.allowAgents`: lista dozwolonych identyfikatorów agentów dla `sessions_spawn` (`["*"]` = dowolny; domyślnie: tylko ten sam agent). -- Zabezpieczenie dziedziczenia sandboxa: jeśli sesja żądająca jest sandboxowana, `sessions_spawn` odrzuca cele, które działałyby bez sandboxa. -- `subagents.requireAgentId`: gdy true, blokuje wywołania `sessions_spawn`, które pomijają `agentId` (wymusza jawny wybór profilu; domyślnie: false). +- Ochrona dziedziczenia sandboxa: jeśli sesja żądająca działa w sandboxie, `sessions_spawn` odrzuca cele, które działałyby bez sandboxa. +- `subagents.requireAgentId`: gdy `true`, blokuje wywołania `sessions_spawn`, które pomijają `agentId` (wymusza jawny wybór profilu; domyślnie: false). --- ## Routing wielu agentów -Uruchamiaj wiele izolowanych agentów w jednym Gateway. Zobacz [Multi-Agent](/pl/concepts/multi-agent). +Uruchamiaj wielu izolowanych agentów w jednym Gateway. Zobacz [Multi-Agent](/pl/concepts/multi-agent). ```json5 { @@ -1820,11 +1831,11 @@ Uruchamiaj wiele izolowanych agentów w jednym Gateway. Zobacz [Multi-Agent](/pl ### Pola dopasowania binding -- `type` (opcjonalne): `route` dla zwykłego routingu (brak typu domyślnie oznacza route), `acp` dla trwałych powiązań rozmów ACP. +- `type` (opcjonalne): `route` dla zwykłego routingu (brakujący typ domyślnie oznacza route), `acp` dla trwałych bindingów konwersacji ACP. - `match.channel` (wymagane) - `match.accountId` (opcjonalne; `*` = dowolne konto; pominięte = konto domyślne) - `match.peer` (opcjonalne; `{ kind: direct|group|channel, id }`) -- `match.guildId` / `match.teamId` (opcjonalne; zależne od kanału) +- `match.guildId` / `match.teamId` (opcjonalne; specyficzne dla kanału) - `acp` (opcjonalne; tylko dla `type: "acp"`): `{ mode, label, cwd, backend }` **Deterministyczna kolejność dopasowania:** @@ -1833,12 +1844,12 @@ Uruchamiaj wiele izolowanych agentów w jednym Gateway. Zobacz [Multi-Agent](/pl 2. `match.guildId` 3. `match.teamId` 4. `match.accountId` (dokładne, bez peer/guild/team) -5. `match.accountId: "*"` (na cały kanał) +5. `match.accountId: "*"` (dla całego kanału) 6. Agent domyślny W obrębie każdego poziomu wygrywa pierwszy pasujący wpis `bindings`. -Dla wpisów `type: "acp"` OpenClaw rozwiązuje po dokładnej tożsamości rozmowy (`match.channel` + konto + `match.peer.id`) i nie używa powyższej kolejności poziomów powiązań route. +Dla wpisów `type: "acp"` OpenClaw rozwiązuje po dokładnej tożsamości konwersacji (`match.channel` + konto + `match.peer.id`) i nie używa powyższej kolejności poziomów binding route. ### Profile dostępu per agent @@ -1860,7 +1871,7 @@ Dla wpisów `type: "acp"` OpenClaw rozwiązuje po dokładnej tożsamości rozmow - + ```json5 { @@ -1988,34 +1999,34 @@ Szczegóły priorytetów znajdziesz w [Multi-Agent Sandbox & Tools](/pl/tools/mu -- **`scope`**: podstawowa strategia grupowania sesji dla kontekstów czatu grupowego. - - `per-sender` (domyślnie): każdy nadawca otrzymuje izolowaną sesję w kontekście kanału. +- **`scope`**: bazowa strategia grupowania sesji dla kontekstów czatów grupowych. + - `per-sender` (domyślnie): każdy nadawca otrzymuje izolowaną sesję w ramach kontekstu kanału. - `global`: wszyscy uczestnicy w kontekście kanału współdzielą jedną sesję (używaj tylko wtedy, gdy współdzielony kontekst jest zamierzony). - **`dmScope`**: sposób grupowania DM. - `main`: wszystkie DM współdzielą główną sesję. - `per-peer`: izolacja według identyfikatora nadawcy między kanałami. - `per-channel-peer`: izolacja per kanał + nadawca (zalecane dla skrzynek odbiorczych wielu użytkowników). - `per-account-channel-peer`: izolacja per konto + kanał + nadawca (zalecane dla wielu kont). -- **`identityLinks`**: mapuje kanoniczne identyfikatory do peerów z prefiksem dostawcy dla współdzielenia sesji między kanałami. -- **`reset`**: podstawowa polityka resetu. `daily` resetuje o `atHour` czasu lokalnego; `idle` resetuje po `idleMinutes`. Gdy skonfigurowane są oba, wygrywa to, które wygaśnie wcześniej. -- **`resetByType`**: nadpisania per typ (`direct`, `group`, `thread`). Starsze `dm` jest akceptowane jako alias `direct`. +- **`identityLinks`**: mapuje kanoniczne identyfikatory na peery z prefiksem dostawcy dla współdzielenia sesji między kanałami. +- **`reset`**: główna zasada resetu. `daily` resetuje o `atHour` czasu lokalnego; `idle` resetuje po `idleMinutes`. Gdy skonfigurowano oba, wygrywa to, co wygaśnie wcześniej. +- **`resetByType`**: nadpisania per typ (`direct`, `group`, `thread`). Starsze `dm` jest akceptowane jako alias dla `direct`. - **`parentForkMaxTokens`**: maksymalna wartość `totalTokens` sesji nadrzędnej dozwolona przy tworzeniu rozwidlonej sesji wątku (domyślnie `100000`). - - Jeśli `totalTokens` sesji nadrzędnej przekracza tę wartość, OpenClaw rozpoczyna nową sesję wątku zamiast dziedziczyć historię transkryptu sesji nadrzędnej. - - Ustaw `0`, aby wyłączyć to zabezpieczenie i zawsze zezwalać na rozwidlanie z sesji nadrzędnej. -- **`mainKey`**: starsze pole. Runtime zawsze używa `"main"` dla głównego kubełka czatu bezpośredniego. -- **`agentToAgent.maxPingPongTurns`**: maksymalna liczba tur odpowiedzi zwrotnych między agentami podczas wymian agent-agent (liczba całkowita, zakres: `0`–`5`). `0` wyłącza łańcuchowanie ping-pong. -- **`sendPolicy`**: dopasowanie po `channel`, `chatType` (`direct|group|channel`, ze starszym aliasem `dm`), `keyPrefix` lub `rawKeyPrefix`. Pierwsze odrzucenie wygrywa. -- **`maintenance`**: czyszczenie magazynu sesji + kontrola retencji. + - Jeśli nadrzędne `totalTokens` przekracza tę wartość, OpenClaw rozpoczyna nową sesję wątku zamiast dziedziczyć historię transkryptu sesji nadrzędnej. + - Ustaw `0`, aby wyłączyć to zabezpieczenie i zawsze zezwalać na rozwidlanie od rodzica. +- **`mainKey`**: starsze pole. Runtime zawsze używa `"main"` dla głównego koszyka czatu bezpośredniego. +- **`agentToAgent.maxPingPongTurns`**: maksymalna liczba tur odpowiedzi zwrotnych między agentami podczas wymian agent-do-agenta (liczba całkowita, zakres: `0`–`5`). `0` wyłącza łańcuch ping-pong. +- **`sendPolicy`**: dopasowanie według `channel`, `chatType` (`direct|group|channel`, ze starszym aliasem `dm`), `keyPrefix` lub `rawKeyPrefix`. Pierwsza odmowa wygrywa. +- **`maintenance`**: kontrola czyszczenia + retencji magazynu sesji. - `mode`: `warn` emituje tylko ostrzeżenia; `enforce` stosuje czyszczenie. - `pruneAfter`: granica wieku dla nieaktualnych wpisów (domyślnie `30d`). - `maxEntries`: maksymalna liczba wpisów w `sessions.json` (domyślnie `500`). - `rotateBytes`: rotuje `sessions.json`, gdy przekroczy ten rozmiar (domyślnie `10mb`). - - `resetArchiveRetention`: retencja dla archiwów transkryptów `*.reset.`. Domyślnie przyjmuje wartość `pruneAfter`; ustaw `false`, aby wyłączyć. - - `maxDiskBytes`: opcjonalny twardy budżet dyskowy katalogu sesji. W trybie `warn` zapisuje ostrzeżenia; w trybie `enforce` najpierw usuwa najstarsze artefakty/sesje. + - `resetArchiveRetention`: retencja dla archiwów transkryptów `*.reset.`. Domyślnie taka sama jak `pruneAfter`; ustaw `false`, aby wyłączyć. + - `maxDiskBytes`: opcjonalny budżet dyskowy katalogu sesji. W trybie `warn` zapisuje ostrzeżenia; w trybie `enforce` najpierw usuwa najstarsze artefakty/sesje. - `highWaterBytes`: opcjonalny cel po czyszczeniu budżetu. Domyślnie `80%` wartości `maxDiskBytes`. -- **`threadBindings`**: globalne wartości domyślne dla funkcji sesji związanych z wątkami. - - `enabled`: główny domyślny przełącznik (dostawcy mogą go nadpisywać; Discord używa `channels.discord.threadBindings.enabled`) - - `idleHours`: domyślny automatyczny brak fokusu po bezczynności w godzinach (`0` wyłącza; dostawcy mogą nadpisywać) +- **`threadBindings`**: globalne wartości domyślne dla funkcji sesji powiązanych z wątkami. + - `enabled`: główny domyślny przełącznik (dostawcy mogą nadpisywać; Discord używa `channels.discord.threadBindings.enabled`) + - `idleHours`: domyślne automatyczne odfokusowanie po bezczynności w godzinach (`0` wyłącza; dostawcy mogą nadpisywać) - `maxAgeHours`: domyślny twardy maksymalny wiek w godzinach (`0` wyłącza; dostawcy mogą nadpisywać) @@ -2056,17 +2067,17 @@ Szczegóły priorytetów znajdziesz w [Multi-Agent Sandbox & Tools](/pl/tools/mu Nadpisania per kanał/konto: `channels..responsePrefix`, `channels..accounts..responsePrefix`. -Rozwiązywanie (wygrywa najbardziej szczegółowe): konto → kanał → globalne. `""` wyłącza i zatrzymuje kaskadę. `"auto"` wyprowadza `[{identity.name}]`. +Rozstrzyganie (wygrywa najbardziej szczegółowe): konto → kanał → globalne. `""` wyłącza i zatrzymuje kaskadę. `"auto"` wyprowadza `[{identity.name}]`. **Zmienne szablonu:** -| Zmienna | Opis | Przykład | -| ---------------- | ----------------------- | --------------------------- | -| `{model}` | Krótka nazwa modelu | `claude-opus-4-6` | -| `{modelFull}` | Pełny identyfikator modelu | `anthropic/claude-opus-4-6` | -| `{provider}` | Nazwa dostawcy | `anthropic` | -| `{thinkingLevel}` | Bieżący poziom thinking | `high`, `low`, `off` | -| `{identity.name}` | Nazwa tożsamości agenta | (to samo co `"auto"`) | +| Zmienna | Opis | Przykład | +| ---------------- | ------------------------- | --------------------------- | +| `{model}` | Krótka nazwa modelu | `claude-opus-4-6` | +| `{modelFull}` | Pełny identyfikator modelu | `anthropic/claude-opus-4-6` | +| `{provider}` | Nazwa dostawcy | `anthropic` | +| `{thinkingLevel}` | Bieżący poziom thinking | `high`, `low`, `off` | +| `{identity.name}` | Nazwa tożsamości agenta | (to samo co `"auto"`) | Zmienne nie rozróżniają wielkości liter. `{think}` jest aliasem dla `{thinkingLevel}`. @@ -2074,18 +2085,18 @@ Zmienne nie rozróżniają wielkości liter. `{think}` jest aliasem dla `{thinki - Domyślnie używa `identity.emoji` aktywnego agenta, w przeciwnym razie `"👀"`. Ustaw `""`, aby wyłączyć. - Nadpisania per kanał: `channels..ackReaction`, `channels..accounts..ackReaction`. -- Kolejność rozwiązywania: konto → kanał → `messages.ackReaction` → fallback tożsamości. +- Kolejność rozstrzygania: konto → kanał → `messages.ackReaction` → fallback tożsamości. - Zakres: `group-mentions` (domyślnie), `group-all`, `direct`, `all`. - `removeAckAfterReply`: usuwa ack po odpowiedzi w Slack, Discord i Telegram. - `messages.statusReactions.enabled`: włącza reakcje statusu cyklu życia w Slack, Discord i Telegram. - W Slack i Discord brak ustawienia utrzymuje reakcje statusu włączone, gdy reakcje ack są aktywne. + W Slack i Discord pozostawienie bez ustawienia zachowuje włączone reakcje statusu, gdy aktywne są reakcje ack. W Telegram ustaw to jawnie na `true`, aby włączyć reakcje statusu cyklu życia. -### Debounce przychodzących wiadomości +### Debounce wejściowy Łączy szybkie wiadomości tekstowe od tego samego nadawcy w jedną turę agenta. Media/załączniki są opróżniane natychmiast. Polecenia sterujące omijają debounce. -### TTS (zamiana tekstu na mowę) +### TTS (text-to-speech) ```json5 { @@ -2126,12 +2137,12 @@ Zmienne nie rozróżniają wielkości liter. `{think}` jest aliasem dla `{thinki } ``` -- `auto` kontroluje domyślny tryb auto-TTS: `off`, `always`, `inbound` lub `tagged`. `/tts on|off` może nadpisać lokalne preferencje, a `/tts status` pokazuje stan efektywny. +- `auto` steruje domyślnym trybem auto-TTS: `off`, `always`, `inbound` lub `tagged`. `/tts on|off` może nadpisywać lokalne preferencje, a `/tts status` pokazuje stan efektywny. - `summaryModel` nadpisuje `agents.defaults.model.primary` dla automatycznego podsumowania. -- `modelOverrides` jest domyślnie włączone; `modelOverrides.allowProvider` domyślnie ma wartość `false` (wymaga opt-in). -- Klucze API mają wartości zapasowe z `ELEVENLABS_API_KEY`/`XI_API_KEY` oraz `OPENAI_API_KEY`. -- `openai.baseUrl` nadpisuje punkt końcowy OpenAI TTS. Kolejność rozwiązywania to konfiguracja, następnie `OPENAI_TTS_BASE_URL`, a potem `https://api.openai.com/v1`. -- Gdy `openai.baseUrl` wskazuje punkt końcowy inny niż OpenAI, OpenClaw traktuje go jako serwer TTS zgodny z OpenAI i łagodzi walidację modelu/głosu. +- `modelOverrides` jest domyślnie włączone; `modelOverrides.allowProvider` ma domyślnie wartość `false` (opt-in). +- Klucze API używają wartości zapasowych `ELEVENLABS_API_KEY`/`XI_API_KEY` oraz `OPENAI_API_KEY`. +- `openai.baseUrl` nadpisuje punkt końcowy TTS OpenAI. Kolejność rozstrzygania to konfiguracja, potem `OPENAI_TTS_BASE_URL`, potem `https://api.openai.com/v1`. +- Gdy `openai.baseUrl` wskazuje na punkt końcowy inny niż OpenAI, OpenClaw traktuje go jako serwer TTS zgodny z OpenAI i łagodzi walidację modelu/głosu. --- @@ -2163,11 +2174,11 @@ Ustawienia domyślne dla trybu Talk (macOS/iOS/Android). - `talk.provider` musi odpowiadać kluczowi w `talk.providers`, gdy skonfigurowano wielu dostawców Talk. - Starsze płaskie klucze Talk (`talk.voiceId`, `talk.voiceAliases`, `talk.modelId`, `talk.outputFormat`, `talk.apiKey`) służą wyłącznie zgodności i są automatycznie migrowane do `talk.providers.`. -- Identyfikatory głosów mają wartości zapasowe z `ELEVENLABS_VOICE_ID` lub `SAG_VOICE_ID`. -- `providers.*.apiKey` akceptuje jawne ciągi znaków lub obiekty SecretRef. -- Wartość zapasowa `ELEVENLABS_API_KEY` ma zastosowanie tylko wtedy, gdy nie skonfigurowano klucza API Talk. +- Identyfikatory głosów używają wartości zapasowych `ELEVENLABS_VOICE_ID` lub `SAG_VOICE_ID`. +- `providers.*.apiKey` akceptuje zwykłe ciągi znaków lub obiekty SecretRef. +- Zapasowa wartość `ELEVENLABS_API_KEY` ma zastosowanie tylko wtedy, gdy nie skonfigurowano żadnego klucza API Talk. - `providers.*.voiceAliases` pozwala dyrektywom Talk używać przyjaznych nazw. -- `silenceTimeoutMs` kontroluje, jak długo tryb Talk czeka po ciszy użytkownika, zanim wyśle transkrypt. Brak ustawienia zachowuje domyślne okno pauzy platformy (`700 ms na macOS i Androidzie, 900 ms na iOS`). +- `silenceTimeoutMs` określa, jak długo tryb Talk czeka po ciszy użytkownika, zanim wyśle transkrypt. Brak ustawienia zachowuje domyślne okno pauzy platformy (`700 ms na macOS i Androidzie, 900 ms na iOS`). --- @@ -2177,14 +2188,14 @@ Ustawienia domyślne dla trybu Talk (macOS/iOS/Android). `tools.profile` ustawia bazową listę dozwolonych przed `tools.allow`/`tools.deny`: -Lokalny onboarding domyślnie ustawia w nowych lokalnych konfiguracjach `tools.profile: "coding"`, gdy nie jest ustawione (istniejące jawne profile są zachowywane). +Lokalny onboarding domyślnie ustawia nowe lokalne konfiguracje na `tools.profile: "coding"`, gdy wartość nie jest ustawiona (istniejące jawne profile są zachowywane). -| Profil | Obejmuje | +| Profil | Zawiera | | ----------- | ------------------------------------------------------------------------------------------------------------------------------- | | `minimal` | tylko `session_status` | | `coding` | `group:fs`, `group:runtime`, `group:web`, `group:sessions`, `group:memory`, `cron`, `image`, `image_generate`, `video_generate` | | `messaging` | `group:messaging`, `sessions_list`, `sessions_history`, `sessions_send`, `session_status` | -| `full` | Brak ograniczeń (tak samo jak brak ustawienia) | +| `full` | Bez ograniczeń (tak samo jak brak ustawienia) | ### Grupy narzędzi @@ -2201,11 +2212,11 @@ Lokalny onboarding domyślnie ustawia w nowych lokalnych konfiguracjach `tools.p | `group:nodes` | `nodes` | | `group:agents` | `agents_list` | | `group:media` | `image`, `image_generate`, `video_generate`, `tts` | -| `group:openclaw` | Wszystkie wbudowane narzędzia (z wyłączeniem Pluginów dostawców) | +| `group:openclaw` | Wszystkie wbudowane narzędzia (bez Pluginów dostawców) | ### `tools.allow` / `tools.deny` -Globalna polityka dozwalania/odrzucania narzędzi (odrzucenie ma pierwszeństwo). Nierozróżniająca wielkości liter, obsługuje wildcardy `*`. Stosowana nawet wtedy, gdy sandbox Docker jest wyłączony. +Globalna zasada dozwalania/zabraniania narzędzi (odmowa wygrywa). Bez rozróżniania wielkości liter, obsługuje wildcardy `*`. Stosowana nawet wtedy, gdy sandbox Docker jest wyłączony. ```json5 { @@ -2231,7 +2242,7 @@ Dodatkowo ogranicza narzędzia dla określonych dostawców lub modeli. Kolejnoś ### `tools.elevated` -Steruje dostępem elevated exec poza sandboxem: +Steruje dostępem do elevated exec poza sandboxem: ```json5 { @@ -2274,7 +2285,7 @@ Steruje dostępem elevated exec poza sandboxem: ### `tools.loopDetection` Kontrole bezpieczeństwa pętli narzędzi są **domyślnie wyłączone**. Ustaw `enabled: true`, aby aktywować wykrywanie. -Ustawienia można zdefiniować globalnie w `tools.loopDetection` i nadpisywać per agent w `agents.list[].tools.loopDetection`. +Ustawienia można definiować globalnie w `tools.loopDetection` i nadpisywać per agent w `agents.list[].tools.loopDetection`. ```json5 { @@ -2295,13 +2306,13 @@ Ustawienia można zdefiniować globalnie w `tools.loopDetection` i nadpisywać p } ``` -- `historySize`: maksymalna historia wywołań narzędzi przechowywana do analizy pętli. -- `warningThreshold`: próg powtarzającego się wzorca bez postępu dla ostrzeżeń. -- `criticalThreshold`: wyższy próg powtarzania dla blokowania krytycznych pętli. -- `globalCircuitBreakerThreshold`: próg twardego zatrzymania dla dowolnego przebiegu bez postępu. -- `detectors.genericRepeat`: ostrzega o powtarzanych wywołaniach tego samego narzędzia z tymi samymi argumentami. -- `detectors.knownPollNoProgress`: ostrzega/blokuje znane narzędzia odpytywania (`process.poll`, `command_status` itd.). -- `detectors.pingPong`: ostrzega/blokuje naprzemienne wzorce par bez postępu. +- `historySize`: maksymalna historia wywołań narzędzi zachowywana do analizy pętli. +- `warningThreshold`: próg ostrzeżeń dla powtarzających się wzorców bez postępu. +- `criticalThreshold`: wyższy próg powtórzeń do blokowania krytycznych pętli. +- `globalCircuitBreakerThreshold`: próg twardego zatrzymania dla każdego przebiegu bez postępu. +- `detectors.genericRepeat`: ostrzegaj o powtarzanych wywołaniach tego samego narzędzia z tymi samymi argumentami. +- `detectors.knownPollNoProgress`: ostrzegaj/blokuj znane narzędzia odpytywania (`process.poll`, `command_status` itp.). +- `detectors.pingPong`: ostrzegaj/blokuj naprzemienne wzorce par bez postępu. - Jeśli `warningThreshold >= criticalThreshold` lub `criticalThreshold >= globalCircuitBreakerThreshold`, walidacja kończy się błędem. ### `tools.web` @@ -2336,7 +2347,7 @@ Ustawienia można zdefiniować globalnie w `tools.loopDetection` i nadpisywać p ### `tools.media` -Konfiguruje rozumienie przychodzących mediów (obraz/audio/wideo): +Konfiguruje rozumienie mediów przychodzących (obraz/audio/wideo): ```json5 { @@ -2372,28 +2383,28 @@ Konfiguruje rozumienie przychodzących mediów (obraz/audio/wideo): **Wpis dostawcy** (`type: "provider"` lub pominięte): -- `provider`: identyfikator dostawcy API (`openai`, `anthropic`, `google`/`gemini`, `groq` itd.) +- `provider`: identyfikator dostawcy API (`openai`, `anthropic`, `google`/`gemini`, `groq` itp.) - `model`: nadpisanie identyfikatora modelu -- `profile` / `preferredProfile`: wybór profilu `auth-profiles.json` +- `profile` / `preferredProfile`: wybór profilu z `auth-profiles.json` **Wpis CLI** (`type: "cli"`): - `command`: wykonywalne polecenie do uruchomienia -- `args`: argumenty szablonowe (obsługuje `{{MediaPath}}`, `{{Prompt}}`, `{{MaxChars}}` itd.) +- `args`: argumenty szablonowe (obsługuje `{{MediaPath}}`, `{{Prompt}}`, `{{MaxChars}}` itp.) **Pola wspólne:** - `capabilities`: opcjonalna lista (`image`, `audio`, `video`). Domyślnie: `openai`/`anthropic`/`minimax` → image, `google` → image+audio+video, `groq` → audio. - `prompt`, `maxChars`, `maxBytes`, `timeoutSeconds`, `language`: nadpisania per wpis. -- Błędy powodują przejście do kolejnego wpisu. +- W przypadku błędów następuje fallback do kolejnego wpisu. -Uwierzytelnianie dostawcy przebiega według standardowej kolejności: `auth-profiles.json` → zmienne środowiskowe → `models.providers.*.apiKey`. +Uwierzytelnianie dostawców używa standardowej kolejności: `auth-profiles.json` → zmienne środowiskowe → `models.providers.*.apiKey`. -**Pola async completion:** +**Pola asynchronicznego zakończenia:** -- `asyncCompletion.directSend`: gdy `true`, zakończone zadania asynchroniczne `music_generate` +- `asyncCompletion.directSend`: gdy `true`, ukończone asynchroniczne zadania `music_generate` i `video_generate` najpierw próbują bezpośredniego dostarczenia do kanału. Domyślnie: `false` - (starsza ścieżka wybudzania sesji żądającej/dostarczania modelu). + (starsza ścieżka wybudzania sesji żądającej/dostarczenia modelu). @@ -2412,7 +2423,7 @@ Uwierzytelnianie dostawcy przebiega według standardowej kolejności: `auth-prof ### `tools.sessions` -Kontroluje, które sesje mogą być wskazywane przez narzędzia sesji (`sessions_list`, `sessions_history`, `sessions_send`). +Steruje tym, które sesje mogą być celem dla narzędzi sesji (`sessions_list`, `sessions_history`, `sessions_send`). Domyślnie: `tree` (bieżąca sesja + sesje utworzone przez nią, takie jak subagenci). @@ -2431,13 +2442,13 @@ Uwagi: - `self`: tylko bieżący klucz sesji. - `tree`: bieżąca sesja + sesje utworzone przez bieżącą sesję (subagenci). -- `agent`: dowolna sesja należąca do bieżącego identyfikatora agenta (może obejmować innych użytkowników, jeśli używasz sesji per nadawca pod tym samym identyfikatorem agenta). +- `agent`: dowolna sesja należąca do bieżącego identyfikatora agenta (może obejmować innych użytkowników, jeśli używasz sesji per-sender pod tym samym identyfikatorem agenta). - `all`: dowolna sesja. Kierowanie między agentami nadal wymaga `tools.agentToAgent`. -- Ograniczenie sandboxa: gdy bieżąca sesja jest sandboxowana i `agents.defaults.sandbox.sessionToolsVisibility="spawned"`, widoczność jest wymuszana na `tree`, nawet jeśli `tools.sessions.visibility="all"`. +- Ograniczenie sandboxa: gdy bieżąca sesja działa w sandboxie i `agents.defaults.sandbox.sessionToolsVisibility="spawned"`, widoczność jest wymuszana na `tree`, nawet jeśli `tools.sessions.visibility="all"`. ### `tools.sessions_spawn` -Kontroluje obsługę załączników inline dla `sessions_spawn`. +Steruje obsługą załączników inline dla `sessions_spawn`. ```json5 { @@ -2458,15 +2469,15 @@ Kontroluje obsługę załączników inline dla `sessions_spawn`. Uwagi: - Załączniki są obsługiwane tylko dla `runtime: "subagent"`. Runtime ACP je odrzuca. -- Pliki są materializowane w workspace potomnym pod `.openclaw/attachments//` z `.manifest.json`. -- Zawartość załączników jest automatycznie redagowana z utrwalania transkryptu. +- Pliki są materializowane w workspace potomnym pod `.openclaw/attachments//` wraz z `.manifest.json`. +- Zawartość załączników jest automatycznie redagowana z trwałego zapisu transkryptu. - Wejścia base64 są walidowane przy użyciu ścisłych kontroli alfabetu/dopełnienia i zabezpieczenia rozmiaru przed dekodowaniem. - Uprawnienia plików to `0700` dla katalogów i `0600` dla plików. -- Czyszczenie zależy od polityki `cleanup`: `delete` zawsze usuwa załączniki; `keep` zachowuje je tylko wtedy, gdy `retainOnSessionKeep: true`. +- Czyszczenie podąża za zasadą `cleanup`: `delete` zawsze usuwa załączniki; `keep` zachowuje je tylko wtedy, gdy `retainOnSessionKeep: true`. ### `tools.experimental` -Flagi eksperymentalnych wbudowanych narzędzi. Domyślnie wyłączone, chyba że ma zastosowanie reguła automatycznego włączenia strict-agentic GPT-5. +Eksperymentalne flagi wbudowanych narzędzi. Domyślnie wyłączone, chyba że obowiązuje reguła automatycznego włączania dla strict-agentic GPT-5. ```json5 { @@ -2480,9 +2491,9 @@ Flagi eksperymentalnych wbudowanych narzędzi. Domyślnie wyłączone, chyba że Uwagi: -- `planTool`: włącza strukturalne narzędzie `update_plan` do śledzenia nietrywialnej pracy wieloetapowej. +- `planTool`: włącza strukturalne narzędzie `update_plan` do śledzenia nietrywialnych prac wieloetapowych. - Domyślnie: `false`, chyba że `agents.defaults.embeddedPi.executionContract` (lub nadpisanie per agent) jest ustawione na `"strict-agentic"` dla przebiegu OpenAI lub OpenAI Codex z rodziny GPT-5. Ustaw `true`, aby wymusić włączenie narzędzia poza tym zakresem, lub `false`, aby pozostawić je wyłączone nawet dla przebiegów strict-agentic GPT-5. -- Gdy włączone, system prompt również dodaje wskazówki użycia, aby model używał go tylko do istotnej pracy i utrzymywał co najwyżej jeden krok `in_progress`. +- Gdy jest włączone, system prompt dodaje także wskazówki użycia, aby model używał go tylko do znaczących prac i utrzymywał najwyżej jeden krok `in_progress`. ### `agents.defaults.subagents` @@ -2502,16 +2513,16 @@ Uwagi: } ``` -- `model`: domyślny model dla uruchamianych subagentów. Jeśli pominięty, subagenci dziedziczą model wywołującego. -- `allowAgents`: domyślna lista dozwolonych identyfikatorów agentów docelowych dla `sessions_spawn`, gdy agent żądający nie ustawia własnego `subagents.allowAgents` (`["*"]` = dowolny; domyślnie: tylko ten sam agent). +- `model`: domyślny model dla uruchamianych subagentów. Jeśli pominięte, subagenci dziedziczą model wywołującego. +- `allowAgents`: domyślna lista dozwolonych docelowych identyfikatorów agentów dla `sessions_spawn`, gdy agent żądający nie ustawia własnego `subagents.allowAgents` (`["*"]` = dowolny; domyślnie: tylko ten sam agent). - `runTimeoutSeconds`: domyślny limit czasu (sekundy) dla `sessions_spawn`, gdy wywołanie narzędzia pomija `runTimeoutSeconds`. `0` oznacza brak limitu czasu. -- Polityka narzędzi per subagent: `tools.subagents.tools.allow` / `tools.subagents.tools.deny`. +- Zasada narzędzi per subagent: `tools.subagents.tools.allow` / `tools.subagents.tools.deny`. --- -## Niestandardowi dostawcy i base URL-e +## Niestandardowi dostawcy i bazowe adresy URL -OpenClaw używa wbudowanego katalogu modeli. Dodawaj niestandardowych dostawców przez `models.providers` w konfiguracji lub `~/.openclaw/agents//agent/models.json`. +OpenClaw używa wbudowanego katalogu modeli. Dodaj niestandardowych dostawców przez `models.providers` w konfiguracji lub `~/.openclaw/agents//agent/models.json`. ```json5 { @@ -2544,42 +2555,42 @@ OpenClaw używa wbudowanego katalogu modeli. Dodawaj niestandardowych dostawców - Nadpisz katalog główny konfiguracji agenta przez `OPENCLAW_AGENT_DIR` (lub `PI_CODING_AGENT_DIR`, starszy alias zmiennej środowiskowej). - Priorytet scalania dla pasujących identyfikatorów dostawców: - Niepuste wartości `baseUrl` z `models.json` agenta mają pierwszeństwo. - - Niepuste wartości `apiKey` agenta mają pierwszeństwo tylko wtedy, gdy ten dostawca nie jest zarządzany przez SecretRef w bieżącym kontekście config/auth-profile. - - Wartości `apiKey` dostawcy zarządzanego przez SecretRef są odświeżane ze znaczników źródła (`ENV_VAR_NAME` dla odwołań env, `secretref-managed` dla odwołań file/exec) zamiast utrwalania rozwiązanych sekretów. - - Wartości nagłówków dostawcy zarządzanego przez SecretRef są odświeżane ze znaczników źródła (`secretref-env:ENV_VAR_NAME` dla odwołań env, `secretref-managed` dla odwołań file/exec). - - Puste lub brakujące `apiKey`/`baseUrl` agenta wracają do `models.providers` w konfiguracji. - - Pasujące `contextWindow`/`maxTokens` modelu używają wyższej wartości z jawnej konfiguracji i domyślnych wartości katalogu. - - Pasujące `contextTokens` modelu zachowuje jawny limit runtime, gdy jest obecny; użyj go, aby ograniczyć efektywny kontekst bez zmiany natywnych metadanych modelu. - - Użyj `models.mode: "replace"`, gdy chcesz, aby konfiguracja całkowicie nadpisała `models.json`. + - Niepuste wartości `apiKey` agenta mają pierwszeństwo tylko wtedy, gdy ten dostawca nie jest zarządzany przez SecretRef w bieżącym kontekście konfiguracji/profilu auth. + - Wartości `apiKey` dostawcy zarządzane przez SecretRef są odświeżane na podstawie znaczników źródła (`ENV_VAR_NAME` dla odwołań env, `secretref-managed` dla odwołań file/exec) zamiast utrwalania rozwiązanych sekretów. + - Wartości nagłówków dostawcy zarządzane przez SecretRef są odświeżane na podstawie znaczników źródła (`secretref-env:ENV_VAR_NAME` dla odwołań env, `secretref-managed` dla odwołań file/exec). + - Puste lub brakujące `apiKey`/`baseUrl` agenta przechodzą awaryjnie do `models.providers` w konfiguracji. + - Dla pasujących modeli `contextWindow`/`maxTokens` używana jest wyższa wartość spośród jawnej konfiguracji i domyślnych wartości katalogu. + - Dla pasujących modeli `contextTokens` zachowuje jawny limit runtime, gdy jest obecny; użyj go, aby ograniczyć efektywny kontekst bez zmiany natywnych metadanych modelu. + - Użyj `models.mode: "replace"`, gdy chcesz, aby konfiguracja całkowicie przepisała `models.json`. - Utrwalanie znaczników jest autorytatywne względem źródła: znaczniki są zapisywane z aktywnej migawki konfiguracji źródłowej (przed rozwiązaniem), a nie z rozwiązanych wartości sekretów runtime. ### Szczegóły pól dostawcy - `models.mode`: zachowanie katalogu dostawców (`merge` lub `replace`). - `models.providers`: mapa niestandardowych dostawców kluczowana identyfikatorem dostawcy. -- `models.providers.*.api`: adapter żądań (`openai-completions`, `openai-responses`, `anthropic-messages`, `google-generative-ai` itd.). -- `models.providers.*.apiKey`: poświadczenie dostawcy (preferuj podstawienie SecretRef/env). +- `models.providers.*.api`: adapter żądań (`openai-completions`, `openai-responses`, `anthropic-messages`, `google-generative-ai` itp.). +- `models.providers.*.apiKey`: poświadczenie dostawcy (preferuj SecretRef/podstawianie env). - `models.providers.*.auth`: strategia uwierzytelniania (`api-key`, `token`, `oauth`, `aws-sdk`). - `models.providers.*.injectNumCtxForOpenAICompat`: dla Ollama + `openai-completions` wstrzykuje `options.num_ctx` do żądań (domyślnie: `true`). - `models.providers.*.authHeader`: wymusza przesyłanie poświadczenia w nagłówku `Authorization`, gdy jest to wymagane. -- `models.providers.*.baseUrl`: bazowy URL nadrzędnego API. -- `models.providers.*.headers`: dodatkowe statyczne nagłówki dla routingu proxy/dzierżawy. +- `models.providers.*.baseUrl`: bazowy adres URL nadrzędnego API. +- `models.providers.*.headers`: dodatkowe statyczne nagłówki dla routingu proxy/tenant. - `models.providers.*.request`: nadpisania transportu dla żądań HTTP dostawcy modeli. - - `request.headers`: dodatkowe nagłówki (scalane z domyślnymi ustawieniami dostawcy). Wartości akceptują SecretRef. + - `request.headers`: dodatkowe nagłówki (scalane z domyślnymi dostawcy). Wartości akceptują SecretRef. - `request.auth`: nadpisanie strategii uwierzytelniania. Tryby: `"provider-default"` (użyj wbudowanego uwierzytelniania dostawcy), `"authorization-bearer"` (z `token`), `"header"` (z `headerName`, `value`, opcjonalnym `prefix`). - - `request.proxy`: nadpisanie proxy HTTP. Tryby: `"env-proxy"` (użyj zmiennych środowiskowych `HTTP_PROXY`/`HTTPS_PROXY`), `"explicit-proxy"` (z `url`). Oba tryby akceptują opcjonalny pod-obiekt `tls`. + - `request.proxy`: nadpisanie serwera proxy HTTP. Tryby: `"env-proxy"` (użyj zmiennych środowiskowych `HTTP_PROXY`/`HTTPS_PROXY`), `"explicit-proxy"` (z `url`). Oba tryby akceptują opcjonalny pod-obiekt `tls`. - `request.tls`: nadpisanie TLS dla połączeń bezpośrednich. Pola: `ca`, `cert`, `key`, `passphrase` (wszystkie akceptują SecretRef), `serverName`, `insecureSkipVerify`. - - `request.allowPrivateNetwork`: gdy `true`, zezwala na HTTPS do `baseUrl`, gdy DNS rozwiązuje się do prywatnych, CGNAT lub podobnych zakresów, przez zabezpieczenie pobierania HTTP dostawcy (operator opt-in dla zaufanych samohostowanych punktów końcowych zgodnych z OpenAI). WebSocket używa tego samego `request` dla nagłówków/TLS, ale nie tego zabezpieczenia SSRF pobierania. Domyślnie `false`. + - `request.allowPrivateNetwork`: gdy `true`, zezwala na HTTPS do `baseUrl`, gdy DNS rozwiązuje się do zakresów prywatnych, CGNAT lub podobnych, przez ochronę fetch HTTP dostawcy przed SSRF (operator opt-in dla zaufanych, samohostowanych punktów końcowych zgodnych z OpenAI). WebSocket używa tego samego `request` dla nagłówków/TLS, ale nie tej ochrony fetch przed SSRF. Domyślnie `false`. - `models.providers.*.models`: jawne wpisy katalogu modeli dostawcy. -- `models.providers.*.models.*.contextWindow`: natywne metadane okna kontekstu modelu. -- `models.providers.*.models.*.contextTokens`: opcjonalny limit kontekstu runtime. Użyj tego, gdy chcesz mniejszy efektywny budżet kontekstu niż natywne `contextWindow` modelu. -- `models.providers.*.models.*.compat.supportsDeveloperRole`: opcjonalna wskazówka zgodności. Dla `api: "openai-completions"` z niepustym nienatywnym `baseUrl` (host różny od `api.openai.com`) OpenClaw wymusza to w runtime na `false`. Puste/pominięte `baseUrl` zachowuje domyślne zachowanie OpenAI. -- `models.providers.*.models.*.compat.requiresStringContent`: opcjonalna wskazówka zgodności dla punktów końcowych czatu zgodnych z OpenAI obsługujących tylko ciągi znaków. Gdy `true`, OpenClaw spłaszcza czysto tekstowe tablice `messages[].content` do zwykłych ciągów przed wysłaniem żądania. -- `plugins.entries.amazon-bedrock.config.discovery`: główny katalog ustawień automatycznego wykrywania Bedrock. +- `models.providers.*.models.*.contextWindow`: metadane natywnego okna kontekstu modelu. +- `models.providers.*.models.*.contextTokens`: opcjonalny limit kontekstu runtime. Użyj tego, gdy chcesz mieć mniejszy efektywny budżet kontekstu niż natywne `contextWindow` modelu. +- `models.providers.*.models.*.compat.supportsDeveloperRole`: opcjonalna wskazówka zgodności. Dla `api: "openai-completions"` z niepustym, nienatywnym `baseUrl` (host inny niż `api.openai.com`) OpenClaw wymusza tę wartość na `false` w runtime. Puste/pominięte `baseUrl` zachowuje domyślne zachowanie OpenAI. +- `models.providers.*.models.*.compat.requiresStringContent`: opcjonalna wskazówka zgodności dla zgodnych z OpenAI punktów końcowych czatu obsługujących wyłącznie ciągi znaków. Gdy `true`, OpenClaw spłaszcza czysto tekstowe tablice `messages[].content` do zwykłych ciągów przed wysłaniem żądania. +- `plugins.entries.amazon-bedrock.config.discovery`: główny poziom ustawień automatycznego wykrywania Bedrock. - `plugins.entries.amazon-bedrock.config.discovery.enabled`: włącza/wyłącza niejawne wykrywanie. - `plugins.entries.amazon-bedrock.config.discovery.region`: region AWS dla wykrywania. -- `plugins.entries.amazon-bedrock.config.discovery.providerFilter`: opcjonalny filtr identyfikatora dostawcy do wykrywania ukierunkowanego. -- `plugins.entries.amazon-bedrock.config.discovery.refreshInterval`: interwał odpytywania do odświeżania wykrywania. +- `plugins.entries.amazon-bedrock.config.discovery.providerFilter`: opcjonalny filtr identyfikatora dostawcy dla ukierunkowanego wykrywania. +- `plugins.entries.amazon-bedrock.config.discovery.refreshInterval`: interwał odpytywania dla odświeżania wykrywania. - `plugins.entries.amazon-bedrock.config.discovery.defaultContextWindow`: zapasowe okno kontekstu dla wykrytych modeli. - `plugins.entries.amazon-bedrock.config.discovery.defaultMaxTokens`: zapasowa maksymalna liczba tokenów wyjściowych dla wykrytych modeli. @@ -2698,8 +2709,8 @@ Ustaw `ZAI_API_KEY`. `z.ai/*` i `z-ai/*` są akceptowanymi aliasami. Skrót: `op Dla punktu końcowego w Chinach: `baseUrl: "https://api.moonshot.cn/v1"` lub `openclaw onboard --auth-choice moonshot-api-key-cn`. -Natywne punkty końcowe Moonshot ogłaszają zgodność użycia strumieniowania na współdzielonym -transporcie `openai-completions`, a OpenClaw opiera się tu na możliwościach punktu końcowego, +Natywne punkty końcowe Moonshot reklamują zgodność użycia strumieniowania we współdzielonym +transporcie `openai-completions`, a OpenClaw opiera się tutaj na możliwościach punktu końcowego, a nie wyłącznie na wbudowanym identyfikatorze dostawcy. @@ -2757,7 +2768,7 @@ Wbudowany dostawca zgodny z Anthropic. Skrót: `openclaw onboard --auth-choice k } ``` -Base URL powinien pomijać `/v1` (klient Anthropic dopisuje je sam). Skrót: `openclaw onboard --auth-choice synthetic-api-key`. +Base URL powinien pomijać `/v1` (klient Anthropic sam go dopisuje). Skrót: `openclaw onboard --auth-choice synthetic-api-key`. @@ -2800,7 +2811,7 @@ Base URL powinien pomijać `/v1` (klient Anthropic dopisuje je sam). Skrót: `op Ustaw `MINIMAX_API_KEY`. Skróty: `openclaw onboard --auth-choice minimax-global-api` lub `openclaw onboard --auth-choice minimax-cn-api`. -Katalog modeli domyślnie zawiera tylko M2.7. +Domyślnie katalog modeli zawiera tylko M2.7. Na ścieżce strumieniowania zgodnej z Anthropic OpenClaw domyślnie wyłącza thinking MiniMax, chyba że jawnie ustawisz `thinking`. `/fast on` lub `params.fastMode: true` przepisuje `MiniMax-M2.7` na @@ -2810,7 +2821,7 @@ chyba że jawnie ustawisz `thinking`. `/fast on` lub -Zobacz [Local Models](/pl/gateway/local-models). W skrócie: uruchamiaj duży model lokalny przez LM Studio Responses API na odpowiednio wydajnym sprzęcie; zachowaj hostowane modele jako scalone dla fallbacku. +Zobacz [Modele lokalne](/pl/gateway/local-models). W skrócie: uruchom duży model lokalny przez LM Studio Responses API na mocnym sprzęcie; zachowaj scalone modele hostowane jako fallback. @@ -2841,18 +2852,18 @@ Zobacz [Local Models](/pl/gateway/local-models). W skrócie: uruchamiaj duży mo } ``` -- `allowBundled`: opcjonalna lista dozwolonych tylko dla bundled Skills (Skills zarządzane/workspace bez zmian). +- `allowBundled`: opcjonalna lista dozwolonych tylko dla bundled Skills (Skills zarządzane/w workspace pozostają bez wpływu). - `load.extraDirs`: dodatkowe współdzielone katalogi główne Skills (najniższy priorytet). - `install.preferBrew`: gdy true, preferuje instalatory Homebrew, jeśli `brew` jest dostępne, zanim przejdzie do innych rodzajów instalatorów. -- `install.nodeManager`: preferencja instalatora node dla specyfikacji `metadata.openclaw.install` +- `install.nodeManager`: preferencja instalatora Node dla specyfikacji `metadata.openclaw.install` (`npm` | `pnpm` | `yarn` | `bun`). - `entries..enabled: false` wyłącza Skill nawet jeśli jest bundled/zainstalowany. -- `entries..apiKey`: wygodne ustawienie dla Skills deklarujących główną zmienną env (jawny ciąg znaków lub obiekt SecretRef). +- `entries..apiKey`: ułatwienie dla Skills deklarujących podstawową zmienną env (zwykły ciąg znaków lub obiekt SecretRef). --- -## Plugins +## Pluginy ```json5 { @@ -2877,42 +2888,42 @@ Zobacz [Local Models](/pl/gateway/local-models). W skrócie: uruchamiaj duży mo ``` - Ładowane z `~/.openclaw/extensions`, `/.openclaw/extensions` oraz `plugins.load.paths`. -- Wykrywanie akceptuje natywne Plugins OpenClaw oraz zgodne bundli Codex i Claude, w tym bundli Claude o domyślnym układzie bez manifestu. -- **Zmiany konfiguracji wymagają restartu Gateway.** -- `allow`: opcjonalna lista dozwolonych (ładują się tylko wymienione Plugins). `deny` ma pierwszeństwo. +- Wykrywanie akceptuje natywne Pluginy OpenClaw oraz zgodne bundli Codex i Claude, w tym bundli Claude z domyślnym układem bez manifestu. +- **Zmiany konfiguracji wymagają restartu gateway.** +- `allow`: opcjonalna lista dozwolonych (ładują się tylko wymienione Pluginy). `deny` ma pierwszeństwo. - `plugins.entries..apiKey`: wygodne pole klucza API na poziomie Pluginu (gdy obsługiwane przez Plugin). -- `plugins.entries..env`: mapa zmiennych środowiskowych o zakresie Pluginu. -- `plugins.entries..hooks.allowPromptInjection`: gdy `false`, core blokuje `before_prompt_build` i ignoruje pola mutujące prompt ze starszego `before_agent_start`, zachowując przy tym starsze `modelOverride` i `providerOverride`. Dotyczy natywnych hooków Pluginów i obsługiwanych katalogów hooków dostarczanych przez bundle. -- `plugins.entries..subagent.allowModelOverride`: jawnie ufa temu Pluginowi, że może żądać nadpisań `provider` i `model` per uruchomienie dla przebiegów subagenta w tle. -- `plugins.entries..subagent.allowedModels`: opcjonalna lista dozwolonych kanonicznych celów `provider/model` dla zaufanych nadpisań subagentów. Używaj `"*"` tylko wtedy, gdy celowo chcesz zezwolić na dowolny model. -- `plugins.entries..config`: obiekt konfiguracji zdefiniowany przez Plugin (walidowany względem natywnego schematu Pluginu OpenClaw, gdy jest dostępny). -- `plugins.entries.firecrawl.config.webFetch`: ustawienia dostawcy web-fetch Firecrawl. - - `apiKey`: klucz API Firecrawl (akceptuje SecretRef). Wartość zapasowa pochodzi z `plugins.entries.firecrawl.config.webSearch.apiKey`, starszego `tools.web.fetch.firecrawl.apiKey` lub zmiennej środowiskowej `FIRECRAWL_API_KEY`. - - `baseUrl`: bazowy URL API Firecrawl (domyślnie: `https://api.firecrawl.dev`). +- `plugins.entries..env`: mapa zmiennych env o zakresie Pluginu. +- `plugins.entries..hooks.allowPromptInjection`: gdy `false`, core blokuje `before_prompt_build` i ignoruje pola modyfikujące prompt ze starszego `before_agent_start`, zachowując jednocześnie starsze `modelOverride` i `providerOverride`. Dotyczy natywnych hooków Pluginu i obsługiwanych katalogów hooków dostarczanych przez bundle. +- `plugins.entries..subagent.allowModelOverride`: jawnie ufa temu Pluginowi, że może żądać nadpisań `provider` i `model` per uruchomienie dla uruchomień subagenta w tle. +- `plugins.entries..subagent.allowedModels`: opcjonalna lista dozwolonych kanonicznych celów `provider/model` dla zaufanych nadpisań subagenta. Używaj `"*"` tylko wtedy, gdy świadomie chcesz zezwolić na dowolny model. +- `plugins.entries..config`: obiekt konfiguracji zdefiniowany przez Plugin (walidowany przez natywny schemat Pluginu OpenClaw, gdy jest dostępny). +- `plugins.entries.firecrawl.config.webFetch`: ustawienia dostawcy pobierania web Firecrawl. + - `apiKey`: klucz API Firecrawl (akceptuje SecretRef). Używa wartości zapasowej z `plugins.entries.firecrawl.config.webSearch.apiKey`, starszego `tools.web.fetch.firecrawl.apiKey` lub zmiennej środowiskowej `FIRECRAWL_API_KEY`. + - `baseUrl`: bazowy adres URL API Firecrawl (domyślnie: `https://api.firecrawl.dev`). - `onlyMainContent`: wyodrębnia tylko główną treść stron (domyślnie: `true`). - - `maxAgeMs`: maksymalny wiek pamięci podręcznej w milisekundach (domyślnie: `172800000` / 2 dni). - - `timeoutSeconds`: limit czasu żądania scrapingu w sekundach (domyślnie: `60`). -- `plugins.entries.xai.config.xSearch`: ustawienia xAI X Search (wyszukiwanie webowe Grok). + - `maxAgeMs`: maksymalny wiek cache w milisekundach (domyślnie: `172800000` / 2 dni). + - `timeoutSeconds`: limit czasu żądania scrape w sekundach (domyślnie: `60`). +- `plugins.entries.xai.config.xSearch`: ustawienia xAI X Search (wyszukiwanie web Grok). - `enabled`: włącza dostawcę X Search. - `model`: model Grok używany do wyszukiwania (np. `"grok-4-1-fast"`). -- `plugins.entries.memory-core.config.dreaming`: ustawienia memory Dreaming. Zobacz [Dreaming](/pl/concepts/dreaming), aby poznać fazy i progi. - - `enabled`: główny przełącznik Dreaming (domyślnie `false`). - - `frequency`: harmonogram Cron dla każdego pełnego przebiegu Dreaming (domyślnie `"0 3 * * *"`). - - polityka faz i progi są szczegółami implementacji (nie są kluczami konfiguracji przeznaczonymi dla użytkownika). -- Pełna konfiguracja pamięci znajduje się w [Memory configuration reference](/pl/reference/memory-config): +- `plugins.entries.memory-core.config.dreaming`: ustawienia memory dreaming. Informacje o fazach i progach znajdziesz w [Dreaming](/pl/concepts/dreaming). + - `enabled`: główny przełącznik dreaming (domyślnie `false`). + - `frequency`: harmonogram Cron dla każdego pełnego przebiegu dreaming (domyślnie `"0 3 * * *"`). + - zasady faz i progi są szczegółami implementacyjnymi (nie są kluczami konfiguracji skierowanymi do użytkownika). +- Pełna konfiguracja pamięci znajduje się w [Odwołaniu do konfiguracji pamięci](/pl/reference/memory-config): - `agents.defaults.memorySearch.*` - `memory.backend` - `memory.citations` - `memory.qmd.*` - `plugins.entries.memory-core.config.dreaming` -- Włączone Plugins z bundli Claude mogą także dostarczać osadzone wartości domyślne Pi z `settings.json`; OpenClaw stosuje je jako oczyszczone ustawienia agentów, a nie jako surowe łatki konfiguracji OpenClaw. -- `plugins.slots.memory`: wybiera identyfikator aktywnego Pluginu pamięci albo `"none"`, aby wyłączyć Plugins pamięci. -- `plugins.slots.contextEngine`: wybiera identyfikator aktywnego Pluginu silnika kontekstu; domyślnie `"legacy"`, chyba że zainstalujesz i wybierzesz inny silnik. -- `plugins.installs`: metadane instalacji zarządzane przez CLI używane przez `openclaw plugins update`. +- Włączone Pluginy Claude bundle mogą również wnosić osadzone ustawienia domyślne Pi z `settings.json`; OpenClaw stosuje je jako zsanityzowane ustawienia agenta, a nie jako surowe łatki konfiguracji OpenClaw. +- `plugins.slots.memory`: wybierz identyfikator aktywnego Pluginu pamięci lub `"none"`, aby wyłączyć Pluginy pamięci. +- `plugins.slots.contextEngine`: wybierz identyfikator aktywnego Pluginu silnika kontekstu; domyślnie `"legacy"`, chyba że zainstalujesz i wybierzesz inny silnik. +- `plugins.installs`: metadane instalacji zarządzane przez CLI, używane przez `openclaw plugins update`. - Obejmuje `source`, `spec`, `sourcePath`, `installPath`, `version`, `resolvedName`, `resolvedVersion`, `resolvedSpec`, `integrity`, `shasum`, `resolvedAt`, `installedAt`. - Traktuj `plugins.installs.*` jako stan zarządzany; preferuj polecenia CLI zamiast ręcznych edycji. -Zobacz [Plugins](/pl/tools/plugin). +Zobacz [Pluginy](/pl/tools/plugin). --- @@ -2953,27 +2964,28 @@ Zobacz [Plugins](/pl/tools/plugin). ``` - `evaluateEnabled: false` wyłącza `act:evaluate` i `wait --fn`. -- `ssrfPolicy.dangerouslyAllowPrivateNetwork` jest wyłączone, gdy nie jest ustawione, więc nawigacja Browser pozostaje domyślnie restrykcyjna. -- Ustaw `ssrfPolicy.dangerouslyAllowPrivateNetwork: true` tylko wtedy, gdy celowo ufasz nawigacji Browser do sieci prywatnych. -- W trybie ścisłym zdalne punkty końcowe profili CDP (`profiles.*.cdpUrl`) podlegają temu samemu blokowaniu sieci prywatnych podczas kontroli osiągalności/wykrywania. +- `ssrfPolicy.dangerouslyAllowPrivateNetwork` jest wyłączone, gdy nie jest ustawione, więc nawigacja Browser pozostaje domyślnie ścisła. +- Ustaw `ssrfPolicy.dangerouslyAllowPrivateNetwork: true` tylko wtedy, gdy świadomie ufasz nawigacji Browser po sieci prywatnej. +- W trybie ścisłym zdalne punkty końcowe profilów CDP (`profiles.*.cdpUrl`) podlegają temu samemu blokowaniu sieci prywatnej podczas kontroli osiągalności/wykrywania. - `ssrfPolicy.allowPrivateNetwork` pozostaje obsługiwane jako starszy alias. - W trybie ścisłym używaj `ssrfPolicy.hostnameAllowlist` i `ssrfPolicy.allowedHostnames` dla jawnych wyjątków. -- Profile zdalne są tylko do podłączania (start/stop/reset wyłączone). +- Profile zdalne są tylko do podłączania (start/stop/reset są wyłączone). - `profiles.*.cdpUrl` akceptuje `http://`, `https://`, `ws://` i `wss://`. Używaj HTTP(S), gdy chcesz, aby OpenClaw wykrył `/json/version`; używaj WS(S), - gdy dostawca przekazuje bezpośredni URL DevTools WebSocket. -- Profile `existing-session` działają tylko na hoście i używają Chrome MCP zamiast CDP. -- Profile `existing-session` mogą ustawiać `userDataDir`, aby kierować na konkretny - profil przeglądarki opartej na Chromium, takiej jak Brave lub Edge. -- Profile `existing-session` zachowują bieżące limity tras Chrome MCP: + gdy dostawca daje bezpośredni adres URL DevTools WebSocket. +- Profile `existing-session` są dostępne tylko na hoście i używają Chrome MCP zamiast CDP. +- Profile `existing-session` mogą ustawiać `userDataDir`, aby kierować do konkretnego + profilu przeglądarki opartej na Chromium, takiej jak Brave lub Edge. +- Profile `existing-session` zachowują obecne ograniczenia trasy Chrome MCP: działania oparte na snapshot/ref zamiast targetowania selektorami CSS, hooki - przesyłania jednego pliku, brak nadpisań limitu czasu dialogów, brak `wait --load networkidle` oraz brak - `responsebody`, eksportu PDF, przechwytywania pobrań i działań wsadowych. + przesyłania jednego pliku, brak nadpisań limitu czasu dialogów, brak + `wait --load networkidle`, a także brak `responsebody`, eksportu PDF, przechwytywania pobrań + czy działań wsadowych. - Lokalne zarządzane profile `openclaw` automatycznie przypisują `cdpPort` i `cdpUrl`; jawnie ustawiaj `cdpUrl` tylko dla zdalnego CDP. -- Kolejność automatycznego wykrywania: domyślna przeglądarka, jeśli jest oparta na Chromium → Chrome → Brave → Edge → Chromium → Chrome Canary. -- Usługa sterowania: tylko loopback (port wyprowadzany z `gateway.port`, domyślnie `18791`). -- `extraArgs` dopisuje dodatkowe flagi uruchomienia do lokalnego startu Chromium (na przykład +- Kolejność automatycznego wykrywania: domyślna przeglądarka, jeśli oparta na Chromium → Chrome → Brave → Edge → Chromium → Chrome Canary. +- Usługa sterująca: tylko loopback (port wyprowadzany z `gateway.port`, domyślnie `18791`). +- `extraArgs` dodaje dodatkowe flagi uruchamiania do lokalnego startu Chromium (na przykład `--disable-gpu`, rozmiar okna lub flagi debugowania). --- @@ -2992,8 +3004,8 @@ Zobacz [Plugins](/pl/tools/plugin). } ``` -- `seamColor`: kolor akcentu dla chrome natywnego UI aplikacji (odcień dymku trybu Talk itd.). -- `assistant`: nadpisanie tożsamości Control UI. Wartość zapasowa pochodzi z aktywnej tożsamości agenta. +- `seamColor`: kolor akcentu dla chromu natywnego UI aplikacji (odcień dymka trybu Talk itd.). +- `assistant`: nadpisanie tożsamości Control UI. Wartość zapasowa pochodzi z tożsamości aktywnego agenta. --- @@ -3062,43 +3074,43 @@ Zobacz [Plugins](/pl/tools/plugin). -- `mode`: `local` (uruchom Gateway) lub `remote` (połącz ze zdalnym Gateway). Gateway odmawia uruchomienia, jeśli nie jest `local`. +- `mode`: `local` (uruchom gateway) lub `remote` (połącz ze zdalnym gateway). Gateway odmawia uruchomienia, jeśli nie jest `local`. - `port`: pojedynczy multipleksowany port dla WS + HTTP. Priorytet: `--port` > `OPENCLAW_GATEWAY_PORT` > `gateway.port` > `18789`. -- `bind`: `auto`, `loopback` (domyślnie), `lan` (`0.0.0.0`), `tailnet` (tylko IP Tailscale) lub `custom`. +- `bind`: `auto`, `loopback` (domyślnie), `lan` (`0.0.0.0`), `tailnet` (tylko adres IP Tailscale) lub `custom`. - **Starsze aliasy bind**: używaj wartości trybu bind w `gateway.bind` (`auto`, `loopback`, `lan`, `tailnet`, `custom`), a nie aliasów hosta (`0.0.0.0`, `127.0.0.1`, `localhost`, `::`, `::1`). -- **Uwaga dotycząca Dockera**: domyślny bind `loopback` nasłuchuje na `127.0.0.1` wewnątrz kontenera. Przy sieci bridge Dockera (`-p 18789:18789`) ruch przychodzi przez `eth0`, więc Gateway jest nieosiągalny. Użyj `--network host` albo ustaw `bind: "lan"` (lub `bind: "custom"` z `customBindHost: "0.0.0.0"`), aby nasłuchiwać na wszystkich interfejsach. -- **Auth**: domyślnie wymagane. Bindy inne niż loopback wymagają uwierzytelniania Gateway. W praktyce oznacza to współdzielony token/hasło albo reverse proxy świadome tożsamości z `gateway.auth.mode: "trusted-proxy"`. Kreator onboardingu domyślnie generuje token. +- **Uwaga dotycząca Dockera**: domyślne powiązanie `loopback` nasłuchuje na `127.0.0.1` wewnątrz kontenera. Przy sieci bridge Dockera (`-p 18789:18789`) ruch przychodzi przez `eth0`, więc gateway jest nieosiągalny. Użyj `--network host` albo ustaw `bind: "lan"` (lub `bind: "custom"` z `customBindHost: "0.0.0.0"`), aby nasłuchiwać na wszystkich interfejsach. +- **Auth**: domyślnie wymagane. Powiązania inne niż loopback wymagają auth gateway. W praktyce oznacza to współdzielony token/hasło albo reverse proxy świadome tożsamości z `gateway.auth.mode: "trusted-proxy"`. Kreator onboardingu domyślnie generuje token. - Jeśli skonfigurowane są jednocześnie `gateway.auth.token` i `gateway.auth.password` (w tym SecretRef), ustaw jawnie `gateway.auth.mode` na `token` lub `password`. Uruchamianie oraz przepływy instalacji/naprawy usługi kończą się błędem, gdy oba są skonfigurowane, a tryb nie jest ustawiony. -- `gateway.auth.mode: "none"`: jawny tryb bez uwierzytelniania. Używaj tylko dla zaufanych lokalnych konfiguracji local loopback; ten tryb celowo nie jest oferowany przez prompty onboardingowe. -- `gateway.auth.mode: "trusted-proxy"`: deleguje uwierzytelnianie do reverse proxy świadomego tożsamości i ufa nagłówkom tożsamości z `gateway.trustedProxies` (zobacz [Trusted Proxy Auth](/pl/gateway/trusted-proxy-auth)). Ten tryb oczekuje źródła proxy **innego niż loopback**; reverse proxy na tym samym hoście przez loopback nie spełniają wymagań uwierzytelniania trusted-proxy. -- `gateway.auth.allowTailscale`: gdy `true`, nagłówki tożsamości Tailscale Serve mogą spełniać uwierzytelnianie Control UI/WebSocket (weryfikowane przez `tailscale whois`). Punkty końcowe HTTP API **nie** używają tego uwierzytelniania nagłówkiem Tailscale; stosują normalny tryb uwierzytelniania HTTP Gateway. Ten beztokenowy przepływ zakłada, że host Gateway jest zaufany. Domyślnie `true`, gdy `tailscale.mode = "serve"`. -- `gateway.auth.rateLimit`: opcjonalny limiter nieudanych prób uwierzytelniania. Stosowany per IP klienta i per zakres auth (współdzielony sekret i token urządzenia są śledzone niezależnie). Zablokowane próby zwracają `429` + `Retry-After`. - - W asynchronicznej ścieżce Tailscale Serve Control UI nieudane próby dla tego samego `{scope, clientIp}` są serializowane przed zapisem porażki. Współbieżne błędne próby od tego samego klienta mogą więc uruchomić limiter przy drugim żądaniu zamiast przejść równolegle jako zwykłe niedopasowania. - - `gateway.auth.rateLimit.exemptLoopback` domyślnie ma wartość `true`; ustaw `false`, jeśli celowo chcesz ograniczać ruchem także localhost (dla środowisk testowych lub ścisłych wdrożeń proxy). -- Próby uwierzytelniania WS pochodzące z przeglądarki są zawsze ograniczane z wyłączonym wyjątkiem dla loopbacka (dodatkowa warstwa obrony przed brutalnym atakiem z przeglądarki na localhost). -- Na loopback te blokady pochodzące z przeglądarki są izolowane per znormalizowana wartość `Origin`, - więc powtarzające się błędy z jednego źródła localhost nie blokują automatycznie - innego źródła. -- `tailscale.mode`: `serve` (tylko tailnet, bind loopback) lub `funnel` (publiczne, wymaga auth). -- `controlUi.allowedOrigins`: jawna lista dozwolonych źródeł przeglądarki dla połączeń Gateway WebSocket. Wymagana, gdy oczekiwani są klienci przeglądarkowi z innych źródeł niż loopback. -- `controlUi.dangerouslyAllowHostHeaderOriginFallback`: niebezpieczny tryb włączający fallback źródła oparty na nagłówku Host dla wdrożeń, które celowo opierają się na polityce źródła z nagłówka Host. +- `gateway.auth.mode: "none"`: jawny tryb bez auth. Używaj tylko dla zaufanych lokalnych konfiguracji local loopback; ta opcja celowo nie jest oferowana w promptach onboardingu. +- `gateway.auth.mode: "trusted-proxy"`: deleguje auth do reverse proxy świadomego tożsamości i ufa nagłówkom tożsamości z `gateway.trustedProxies` (zobacz [Trusted Proxy Auth](/pl/gateway/trusted-proxy-auth)). Ten tryb oczekuje źródła proxy **innego niż loopback**; reverse proxy loopback na tym samym hoście nie spełniają wymagań auth trusted-proxy. +- `gateway.auth.allowTailscale`: gdy `true`, nagłówki tożsamości Tailscale Serve mogą spełniać auth dla Control UI/WebSocket (weryfikowane przez `tailscale whois`). Punkty końcowe HTTP API **nie** używają tego auth nagłówków Tailscale; zamiast tego stosują zwykły tryb auth HTTP gateway. Ten przepływ bez tokena zakłada, że host gateway jest zaufany. Domyślnie `true`, gdy `tailscale.mode = "serve"`. +- `gateway.auth.rateLimit`: opcjonalny ogranicznik nieudanych prób auth. Stosowany per IP klienta i per zakres auth (współdzielony sekret i token urządzenia są śledzone niezależnie). Zablokowane próby zwracają `429` + `Retry-After`. + - W asynchronicznej ścieżce Tailscale Serve Control UI nieudane próby dla tego samego `{scope, clientIp}` są serializowane przed zapisem błędu. Współbieżne błędne próby od tego samego klienta mogą więc wyzwolić ogranicznik przy drugim żądaniu zamiast obu przejść wyścigowo jako zwykłe niedopasowania. + - `gateway.auth.rateLimit.exemptLoopback` ma domyślnie wartość `true`; ustaw `false`, gdy świadomie chcesz ograniczać również ruch localhost (dla konfiguracji testowych lub ścisłych wdrożeń proxy). +- Próby auth WS pochodzące z przeglądarki są zawsze ograniczane z wyłączonym wyjątkiem loopback (defense-in-depth przeciw brutalnemu łamaniu localhost z poziomu przeglądarki). +- W loopback te blokady pochodzące z przeglądarki są izolowane per znormalizowana + wartość `Origin`, więc powtarzające się błędy z jednego pochodzenia localhost nie + blokują automatycznie innego pochodzenia. +- `tailscale.mode`: `serve` (tylko tailnet, bind loopback) lub `funnel` (publiczny, wymaga auth). +- `controlUi.allowedOrigins`: jawna lista dozwolonych pochodzeń przeglądarki dla połączeń Gateway WebSocket. Wymagana, gdy oczekiwani są klienci przeglądarkowi z pochodzeń innych niż loopback. +- `controlUi.dangerouslyAllowHostHeaderOriginFallback`: niebezpieczny tryb, który włącza zapasowy fallback pochodzenia na podstawie nagłówka Host dla wdrożeń świadomie opierających się na polityce pochodzenia z nagłówka Host. - `remote.transport`: `ssh` (domyślnie) lub `direct` (ws/wss). Dla `direct` `remote.url` musi być `ws://` lub `wss://`. -- `OPENCLAW_ALLOW_INSECURE_PRIVATE_WS=1`: awaryjne nadpisanie po stronie klienta, które zezwala na jawne `ws://` do zaufanych adresów IP sieci prywatnej; domyślnie jawny tekst pozostaje dozwolony tylko dla loopback. -- `gateway.remote.token` / `.password` to pola poświadczeń klienta zdalnego. Same w sobie nie konfigurują uwierzytelniania Gateway. -- `gateway.push.apns.relay.baseUrl`: bazowy HTTPS URL zewnętrznego przekaźnika APNs używanego przez oficjalne/TestFlight buildy iOS po opublikowaniu przez nie rejestracji opartych na przekaźniku do Gateway. Ten URL musi odpowiadać URL-owi przekaźnika skompilowanemu w buildzie iOS. -- `gateway.push.apns.relay.timeoutMs`: limit czasu wysyłania Gateway-do-przekaźnika w milisekundach. Domyślnie `10000`. -- Rejestracje oparte na przekaźniku są delegowane do określonej tożsamości Gateway. Sparowana aplikacja iOS pobiera `gateway.identity.get`, dołącza tę tożsamość do rejestracji przekaźnika i przekazuje do Gateway uprawnienie wysyłania o zakresie rejestracji. Inny Gateway nie może ponownie użyć tej zapisanej rejestracji. -- `OPENCLAW_APNS_RELAY_BASE_URL` / `OPENCLAW_APNS_RELAY_TIMEOUT_MS`: tymczasowe nadpisania środowiskowe dla powyższej konfiguracji przekaźnika. -- `OPENCLAW_APNS_RELAY_ALLOW_HTTP=true`: tylko deweloperska furtka dla URL-i przekaźnika HTTP na loopback. Produkcyjne URL-e przekaźnika powinny pozostać przy HTTPS. +- `OPENCLAW_ALLOW_INSECURE_PRIVATE_WS=1`: awaryjne nadpisanie po stronie klienta, które zezwala na jawny `ws://` do zaufanych prywatnych adresów IP; domyślnie jawny tekst pozostaje dozwolony tylko dla loopback. +- `gateway.remote.token` / `.password` to pola poświadczeń klienta zdalnego. Same w sobie nie konfigurują auth gateway. +- `gateway.push.apns.relay.baseUrl`: bazowy adres HTTPS zewnętrznego przekaźnika APNs używanego przez oficjalne/TestFlight buildy iOS po opublikowaniu przez nie rejestracji opartych na przekaźniku do gateway. Ten adres URL musi odpowiadać adresowi przekaźnika skompilowanemu w buildzie iOS. +- `gateway.push.apns.relay.timeoutMs`: limit czasu wysyłki gateway-do-przekaźnika w milisekundach. Domyślnie `10000`. +- Rejestracje oparte na przekaźniku są delegowane do określonej tożsamości gateway. Sparowana aplikacja iOS pobiera `gateway.identity.get`, uwzględnia tę tożsamość w rejestracji przekaźnika i przekazuje do gateway uprawnienie wysyłki o zakresie rejestracji. Inny gateway nie może ponownie użyć tej zapisanej rejestracji. +- `OPENCLAW_APNS_RELAY_BASE_URL` / `OPENCLAW_APNS_RELAY_TIMEOUT_MS`: tymczasowe nadpisania env dla powyższej konfiguracji przekaźnika. +- `OPENCLAW_APNS_RELAY_ALLOW_HTTP=true`: wyłącznie deweloperska furtka dla adresów URL przekaźnika HTTP na loopback. Produkcyjne adresy URL przekaźników powinny pozostać przy HTTPS. - `gateway.channelHealthCheckMinutes`: interwał monitora zdrowia kanałów w minutach. Ustaw `0`, aby globalnie wyłączyć restarty monitora zdrowia. Domyślnie: `5`. -- `gateway.channelStaleEventThresholdMinutes`: próg nieaktualnego socketu w minutach. Zachowaj wartość większą lub równą `gateway.channelHealthCheckMinutes`. Domyślnie: `30`. -- `gateway.channelMaxRestartsPerHour`: maksymalna liczba restartów monitora zdrowia na kanał/konto w ruchomej godzinie. Domyślnie: `10`. +- `gateway.channelStaleEventThresholdMinutes`: próg nieaktualnego gniazda w minutach. Zachowaj tę wartość większą lub równą `gateway.channelHealthCheckMinutes`. Domyślnie: `30`. +- `gateway.channelMaxRestartsPerHour`: maksymalna liczba restartów monitora zdrowia per kanał/konto w przesuwającym się oknie godzinnym. Domyślnie: `10`. - `channels..healthMonitor.enabled`: rezygnacja per kanał z restartów monitora zdrowia przy zachowaniu globalnego monitora. -- `channels..accounts..healthMonitor.enabled`: nadpisanie per konto dla kanałów z wieloma kontami. Gdy ustawione, ma pierwszeństwo przed nadpisaniem na poziomie kanału. -- Lokalne ścieżki wywołań Gateway mogą używać `gateway.remote.*` jako wartości zapasowej tylko wtedy, gdy `gateway.auth.*` nie jest ustawione. -- Jeśli `gateway.auth.token` / `gateway.auth.password` jest jawnie skonfigurowane przez SecretRef i nierozwiązane, rozwiązywanie kończy się bezpiecznie jako zamknięte (bez maskującego zdalnego fallbacku). -- `trustedProxies`: adresy IP reverse proxy, które kończą TLS lub wstrzykują nagłówki przekazanego klienta. Wymieniaj tylko proxy, które kontrolujesz. Wpisy loopback są nadal prawidłowe dla konfiguracji wykrywania tego samego hosta/proxy lokalnego (na przykład Tailscale Serve lub lokalne reverse proxy), ale **nie** sprawiają, że żądania loopback kwalifikują się do `gateway.auth.mode: "trusted-proxy"`. -- `allowRealIpFallback`: gdy `true`, Gateway akceptuje `X-Real-IP`, jeśli brakuje `X-Forwarded-For`. Domyślnie `false` dla zachowania fail-closed. +- `channels..accounts..healthMonitor.enabled`: nadpisanie per konto dla kanałów wielokontowych. Gdy ustawione, ma pierwszeństwo przed nadpisaniem na poziomie kanału. +- Lokalne ścieżki wywołań gateway mogą używać `gateway.remote.*` jako wartości zapasowej tylko wtedy, gdy `gateway.auth.*` nie jest ustawione. +- Jeśli `gateway.auth.token` / `gateway.auth.password` są jawnie skonfigurowane przez SecretRef i nierozwiązane, rozwiązywanie kończy się fail-closed (bez maskowania przez fallback zdalny). +- `trustedProxies`: adresy IP reverse proxy, które kończą TLS lub wstrzykują nagłówki klienta przekazanego dalej. Wymieniaj tylko proxy, którymi zarządzasz. Wpisy loopback pozostają prawidłowe dla konfiguracji proxy na tym samym hoście / wykrywania lokalnego (na przykład Tailscale Serve lub lokalne reverse proxy), ale **nie** czynią żądań loopback kwalifikującymi się do `gateway.auth.mode: "trusted-proxy"`. +- `allowRealIpFallback`: gdy `true`, gateway akceptuje `X-Real-IP`, jeśli brakuje `X-Forwarded-For`. Domyślnie `false` dla zachowania fail-closed. - `gateway.tools.deny`: dodatkowe nazwy narzędzi blokowane dla HTTP `POST /tools/invoke` (rozszerza domyślną listę blokad). - `gateway.tools.allow`: usuwa nazwy narzędzi z domyślnej listy blokad HTTP. @@ -3108,18 +3120,18 @@ Zobacz [Plugins](/pl/tools/plugin). - Chat Completions: domyślnie wyłączone. Włącz przez `gateway.http.endpoints.chatCompletions.enabled: true`. - Responses API: `gateway.http.endpoints.responses.enabled`. -- Utwardzanie wejścia URL dla Responses: +- Utwardzanie wejść URL dla Responses: - `gateway.http.endpoints.responses.maxUrlParts` - `gateway.http.endpoints.responses.files.urlAllowlist` - `gateway.http.endpoints.responses.images.urlAllowlist` - Puste listy dozwolonych są traktowane jako brak ustawienia; użyj `gateway.http.endpoints.responses.files.allowUrl=false` - i/lub `gateway.http.endpoints.responses.images.allowUrl=false`, aby wyłączyć pobieranie URL-i. -- Opcjonalny nagłówek utwardzający odpowiedź: - - `gateway.http.securityHeaders.strictTransportSecurity` (ustawiaj tylko dla kontrolowanych przez siebie źródeł HTTPS; zobacz [Trusted Proxy Auth](/pl/gateway/trusted-proxy-auth#tls-termination-and-hsts)) + Puste listy dozwolonych są traktowane jak brak ustawienia; użyj `gateway.http.endpoints.responses.files.allowUrl=false` + i/lub `gateway.http.endpoints.responses.images.allowUrl=false`, aby wyłączyć pobieranie URL. +- Opcjonalny nagłówek utwardzania odpowiedzi: + - `gateway.http.securityHeaders.strictTransportSecurity` (ustawiaj tylko dla kontrolowanych przez siebie pochodzeń HTTPS; zobacz [Trusted Proxy Auth](/pl/gateway/trusted-proxy-auth#tls-termination-and-hsts)) ### Izolacja wielu instancji -Uruchamiaj wiele Gateway na jednym hoście z unikalnymi portami i katalogami stanu: +Uruchamiaj wiele gateway na jednym hoście z unikalnymi portami i katalogami stanu: ```bash OPENCLAW_CONFIG_PATH=~/.openclaw/a.json \ @@ -3127,9 +3139,9 @@ OPENCLAW_STATE_DIR=~/.openclaw-a \ openclaw gateway --port 19001 ``` -Wygodne flagi: `--dev` (używa `~/.openclaw-dev` + port `19001`), `--profile ` (używa `~/.openclaw-`). +Wygodne flagi: `--dev` (używa `~/.openclaw-dev` + portu `19001`), `--profile ` (używa `~/.openclaw-`). -Zobacz [Multiple Gateways](/pl/gateway/multiple-gateways). +Zobacz [Wiele gateway](/pl/gateway/multiple-gateways). ### `gateway.tls` @@ -3147,11 +3159,11 @@ Zobacz [Multiple Gateways](/pl/gateway/multiple-gateways). } ``` -- `enabled`: włącza kończenie TLS na listenerze Gateway (HTTPS/WSS) (domyślnie: `false`). -- `autoGenerate`: automatycznie generuje lokalną samopodpisaną parę certyfikat/klucz, gdy nie skonfigurowano jawnych plików; tylko do użytku lokalnego/deweloperskiego. +- `enabled`: włącza zakończenie TLS na nasłuchującym gateway (HTTPS/WSS) (domyślnie: `false`). +- `autoGenerate`: automatycznie generuje lokalną parę samopodpisanego certyfikatu/klucza, gdy nie skonfigurowano jawnych plików; tylko do użytku lokalnego/deweloperskiego. - `certPath`: ścieżka systemu plików do pliku certyfikatu TLS. -- `keyPath`: ścieżka systemu plików do prywatnego klucza TLS; utrzymuj ograniczone uprawnienia. -- `caPath`: opcjonalna ścieżka pakietu CA do weryfikacji klienta lub niestandardowych łańcuchów zaufania. +- `keyPath`: ścieżka systemu plików do pliku klucza prywatnego TLS; zachowaj ograniczone uprawnienia. +- `caPath`: opcjonalna ścieżka do pakietu CA dla weryfikacji klienta lub niestandardowych łańcuchów zaufania. ### `gateway.reload` @@ -3167,11 +3179,11 @@ Zobacz [Multiple Gateways](/pl/gateway/multiple-gateways). } ``` -- `mode`: kontroluje sposób stosowania edycji konfiguracji w runtime. - - `"off"`: ignoruje edycje na żywo; zmiany wymagają jawnego restartu. - - `"restart"`: zawsze restartuje proces Gateway przy zmianie konfiguracji. - - `"hot"`: stosuje zmiany w procesie bez restartu. - - `"hybrid"` (domyślnie): najpierw próbuje hot reload; w razie potrzeby wraca do restartu. +- `mode`: steruje sposobem stosowania edycji konfiguracji w runtime. + - `"off"`: ignoruj edycje na żywo; zmiany wymagają jawnego restartu. + - `"restart"`: zawsze restartuj proces gateway przy zmianie konfiguracji. + - `"hot"`: stosuj zmiany w procesie bez restartu. + - `"hybrid"` (domyślnie): najpierw spróbuj hot reload; jeśli to wymagane, przejdź do restartu. - `debounceMs`: okno debounce w ms przed zastosowaniem zmian konfiguracji (nieujemna liczba całkowita). - `deferralTimeoutMs`: maksymalny czas w ms oczekiwania na operacje w toku przed wymuszeniem restartu (domyślnie: `300000` = 5 minut). @@ -3217,7 +3229,7 @@ Uwagi dotyczące walidacji i bezpieczeństwa: - `hooks.enabled=true` wymaga niepustego `hooks.token`. - `hooks.token` musi być **różny** od `gateway.auth.token`; ponowne użycie tokenu Gateway jest odrzucane. -- `hooks.path` nie może być `/`; używaj dedykowanej podścieżki, takiej jak `/hooks`. +- `hooks.path` nie może być `/`; użyj dedykowanej podścieżki, takiej jak `/hooks`. - Jeśli `hooks.allowRequestSessionKey=true`, ogranicz `hooks.allowedSessionKeyPrefixes` (na przykład `["hook:"]`). **Punkty końcowe:** @@ -3231,16 +3243,16 @@ Uwagi dotyczące walidacji i bezpieczeństwa: - `match.path` dopasowuje podścieżkę po `/hooks` (np. `/hooks/gmail` → `gmail`). - `match.source` dopasowuje pole ładunku dla ścieżek ogólnych. -- Szablony takie jak `{{messages[0].subject}}` odczytują dane z ładunku. +- Szablony takie jak `{{messages[0].subject}}` odczytują wartości z ładunku. - `transform` może wskazywać moduł JS/TS zwracający akcję hooka. - `transform.module` musi być ścieżką względną i pozostawać w obrębie `hooks.transformsDir` (ścieżki bezwzględne i traversal są odrzucane). -- `agentId` kieruje do konkretnego agenta; nieznane identyfikatory wracają do domyślnego. -- `allowedAgentIds`: ogranicza jawny routing (`*` lub pominięte = zezwól na wszystkie, `[]` = zabroń wszystkich). -- `defaultSessionKey`: opcjonalny stały klucz sesji dla przebiegów agenta hooka bez jawnego `sessionKey`. +- `agentId` kieruje do konkretnego agenta; nieznane identyfikatory przechodzą awaryjnie do agenta domyślnego. +- `allowedAgentIds`: ogranicza jawne routowanie (`*` lub pominięte = zezwól na wszystkie, `[]` = zabroń wszystkim). +- `defaultSessionKey`: opcjonalny stały klucz sesji dla uruchomień hooków agenta bez jawnego `sessionKey`. - `allowRequestSessionKey`: pozwala wywołującym `/hooks/agent` ustawiać `sessionKey` (domyślnie: `false`). - `allowedSessionKeyPrefixes`: opcjonalna lista dozwolonych prefiksów dla jawnych wartości `sessionKey` (żądanie + mapowanie), np. `["hook:"]`. - `deliver: true` wysyła końcową odpowiedź do kanału; `channel` domyślnie ma wartość `last`. -- `model` nadpisuje LLM dla tego przebiegu hooka (musi być dozwolony, jeśli ustawiono katalog modeli). +- `model` nadpisuje LLM dla tego uruchomienia hooka (musi być dozwolony, jeśli ustawiono katalog modeli). @@ -3268,11 +3280,11 @@ Uwagi dotyczące walidacji i bezpieczeństwa: ``` - Gateway automatycznie uruchamia `gog gmail watch serve` przy starcie, gdy jest skonfigurowane. Ustaw `OPENCLAW_SKIP_GMAIL_WATCHER=1`, aby to wyłączyć. -- Nie uruchamiaj osobnego `gog gmail watch serve` równolegle z Gateway. +- Nie uruchamiaj osobno `gog gmail watch serve` równolegle z Gateway. --- -## Canvas host +## Host Canvas ```json5 { @@ -3284,17 +3296,17 @@ Uwagi dotyczące walidacji i bezpieczeństwa: } ``` -- Udostępnia edytowalne przez agenta HTML/CSS/JS oraz A2UI przez HTTP pod portem Gateway: +- Udostępnia edytowalne przez agenta HTML/CSS/JS i A2UI przez HTTP pod portem Gateway: - `http://:/__openclaw__/canvas/` - `http://:/__openclaw__/a2ui/` - Tylko lokalnie: zachowaj `gateway.bind: "loopback"` (domyślnie). -- Bindy inne niż loopback: ścieżki canvas wymagają uwierzytelniania Gateway (token/hasło/trusted-proxy), tak samo jak inne powierzchnie HTTP Gateway. -- Node WebViews zwykle nie wysyłają nagłówków auth; po sparowaniu i połączeniu node Gateway ogłasza URL-e capability o zakresie node dla dostępu do canvas/A2UI. -- URL-e capability są powiązane z aktywną sesją WS node i szybko wygasają. Fallback oparty na IP nie jest używany. -- Wstrzykuje klienta live reload do serwowanego HTML. -- Automatycznie tworzy startowy `index.html`, gdy katalog jest pusty. -- Serwuje też A2UI pod `/__openclaw__/a2ui/`. -- Zmiany wymagają restartu Gateway. +- Powiązania inne niż loopback: trasy canvas wymagają auth Gateway (token/hasło/trusted-proxy), tak samo jak inne powierzchnie HTTP Gateway. +- Node WebViews zwykle nie wysyłają nagłówków auth; po sparowaniu i połączeniu node Gateway anonsuje adresy URL możliwości o zakresie node dla dostępu do canvas/A2UI. +- Adresy URL możliwości są powiązane z aktywną sesją WS node i szybko wygasają. Nie używa się fallbacku opartego na IP. +- Wstrzykuje klienta live-reload do serwowanego HTML. +- Automatycznie tworzy początkowy `index.html`, gdy katalog jest pusty. +- Udostępnia także A2UI pod `/__openclaw__/a2ui/`. +- Zmiany wymagają restartu gateway. - Wyłącz live reload dla dużych katalogów lub przy błędach `EMFILE`. --- @@ -3315,9 +3327,9 @@ Uwagi dotyczące walidacji i bezpieczeństwa: - `minimal` (domyślnie): pomija `cliPath` + `sshPort` z rekordów TXT. - `full`: uwzględnia `cliPath` + `sshPort`. -- Nazwa hosta domyślnie ma wartość `openclaw`. Nadpisz przez `OPENCLAW_MDNS_HOSTNAME`. +- Nazwa hosta domyślnie to `openclaw`. Nadpisz przez `OPENCLAW_MDNS_HOSTNAME`. -### Wide-area (DNS-SD) +### Szeroki obszar (DNS-SD) ```json5 { @@ -3335,7 +3347,7 @@ Konfiguracja: `openclaw dns setup --apply`. ## Środowisko -### `env` (inline env vars) +### `env` (zmienne env inline) ```json5 { @@ -3352,10 +3364,10 @@ Konfiguracja: `openclaw dns setup --apply`. } ``` -- Inline env vars są stosowane tylko wtedy, gdy w środowisku procesu brakuje klucza. -- Pliki `.env`: `.env` z bieżącego katalogu roboczego + `~/.openclaw/.env` (żaden nie nadpisuje istniejących zmiennych). -- `shellEnv`: importuje brakujące oczekiwane klucze z profilu powłoki logowania. -- Pełny priorytet znajdziesz w [Environment](/pl/help/environment). +- Zmienne env inline są stosowane tylko wtedy, gdy w env procesu brakuje danego klucza. +- Pliki `.env`: `.env` z bieżącego katalogu roboczego + `~/.openclaw/.env` (żaden z nich nie nadpisuje istniejących zmiennych). +- `shellEnv`: importuje brakujące oczekiwane klucze z profilu login shell. +- Pełny priorytet znajdziesz w [Środowisko](/pl/help/environment). ### Podstawianie zmiennych env @@ -3370,7 +3382,7 @@ Odwołuj się do zmiennych env w dowolnym ciągu konfiguracji przez `${VAR_NAME} ``` - Dopasowywane są tylko nazwy pisane wielkimi literami: `[A-Z_][A-Z0-9_]*`. -- Brakujące/puste zmienne powodują błąd podczas ładowania konfiguracji. +- Brakujące/puste zmienne powodują błąd przy ładowaniu konfiguracji. - Ucieknij przez `$${VAR}`, aby uzyskać dosłowne `${VAR}`. - Działa z `$include`. @@ -3378,11 +3390,11 @@ Odwołuj się do zmiennych env w dowolnym ciągu konfiguracji przez `${VAR_NAME} ## Sekrety -Odwołania do sekretów są addytywne: jawne wartości nadal działają. +Odwołania do sekretów są addytywne: wartości jawne nadal działają. ### `SecretRef` -Użyj jednego kształtu obiektu: +Użyj jednej postaci obiektu: ```json5 { source: "env" | "file" | "exec", provider: "default", id: "..." } @@ -3392,15 +3404,15 @@ Walidacja: - wzorzec `provider`: `^[a-z][a-z0-9_-]{0,63}$` - wzorzec `id` dla `source: "env"`: `^[A-Z][A-Z0-9_]{0,127}$` -- `source: "file"` `id`: bezwzględny wskaźnik JSON (na przykład `"/providers/openai/apiKey"`) +- `id` dla `source: "file"`: bezwzględny wskaźnik JSON (na przykład `"/providers/openai/apiKey"`) - wzorzec `id` dla `source: "exec"`: `^[A-Za-z0-9][A-Za-z0-9._:/-]{0,255}$` -- `id` dla `source: "exec"` nie mogą zawierać segmentów ścieżki rozdzielanych przez ukośniki `.` ani `..` (na przykład `a/../b` jest odrzucane) +- `id` dla `source: "exec"` nie może zawierać segmentów ścieżki `.` ani `..` oddzielonych ukośnikami (na przykład `a/../b` jest odrzucane) ### Obsługiwana powierzchnia poświadczeń -- Macierz kanoniczna: [SecretRef Credential Surface](/pl/reference/secretref-credential-surface) -- `secrets apply` kieruje na obsługiwane ścieżki poświadczeń `openclaw.json`. -- Odwołania z `auth-profiles.json` są uwzględniane w rozwiązywaniu runtime i pokryciu audytu. +- Kanoniczna macierz: [Powierzchnia poświadczeń SecretRef](/pl/reference/secretref-credential-surface) +- `secrets apply` kieruje do obsługiwanych ścieżek poświadczeń `openclaw.json`. +- Odwołania w `auth-profiles.json` są uwzględniane w rozwiązywaniu runtime i pokryciu audytu. ### Konfiguracja dostawców sekretów @@ -3433,12 +3445,12 @@ Walidacja: Uwagi: - Dostawca `file` obsługuje `mode: "json"` i `mode: "singleValue"` (`id` musi mieć wartość `"value"` w trybie singleValue). -- Dostawca `exec` wymaga bezwzględnej ścieżki `command` i używa ładunków protokołu przez stdin/stdout. -- Domyślnie ścieżki poleceń będące dowiązaniami symbolicznymi są odrzucane. Ustaw `allowSymlinkCommand: true`, aby zezwolić na ścieżki dowiązań symbolicznych przy jednoczesnej walidacji ścieżki rozwiązanego celu. -- Jeśli skonfigurowano `trustedDirs`, kontrola zaufanych katalogów dotyczy ścieżki rozwiązanego celu. +- Dostawca `exec` wymaga bezwzględnej ścieżki `command` i używa ładunków protokołu na stdin/stdout. +- Domyślnie ścieżki poleceń będące dowiązaniami symbolicznymi są odrzucane. Ustaw `allowSymlinkCommand: true`, aby zezwolić na ścieżki dowiązań przy jednoczesnej walidacji ścieżki rozwiązanej. +- Jeśli skonfigurowano `trustedDirs`, kontrola zaufanego katalogu dotyczy rozwiązanej ścieżki docelowej. - Środowisko potomne `exec` jest domyślnie minimalne; przekazuj wymagane zmienne jawnie przez `passEnv`. -- Odwołania do sekretów są rozwiązywane w czasie aktywacji do migawki w pamięci, a następnie ścieżki żądań odczytują tylko tę migawkę. -- Filtrowanie aktywnej powierzchni ma zastosowanie podczas aktywacji: nierozwiązane odwołania na włączonych powierzchniach powodują błąd startu/przeładowania, a nieaktywne powierzchnie są pomijane z diagnostyką. +- Odwołania do sekretów są rozwiązywane przy aktywacji do migawki w pamięci, a następnie ścieżki żądań odczytują tylko tę migawkę. +- Podczas aktywacji stosowane jest filtrowanie aktywnej powierzchni: nierozwiązane odwołania na włączonych powierzchniach powodują błąd uruchomienia/przeładowania, a nieaktywne powierzchnie są pomijane z diagnostyką. --- @@ -3462,11 +3474,11 @@ Uwagi: - Profile per agent są przechowywane w `/auth-profiles.json`. - `auth-profiles.json` obsługuje odwołania na poziomie wartości (`keyRef` dla `api_key`, `tokenRef` dla `token`) dla statycznych trybów poświadczeń. -- Profile trybu OAuth (`auth.profiles..mode = "oauth"`) nie obsługują poświadczeń `auth-profile` opartych na SecretRef. +- Profile w trybie OAuth (`auth.profiles..mode = "oauth"`) nie obsługują poświadczeń profilu auth opartych na SecretRef. - Statyczne poświadczenia runtime pochodzą z rozwiązanych migawek w pamięci; starsze statyczne wpisy `auth.json` są czyszczone po wykryciu. -- Starsze importy OAuth z `~/.openclaw/credentials/oauth.json`. +- Starsze importy OAuth pochodzą z `~/.openclaw/credentials/oauth.json`. - Zobacz [OAuth](/pl/concepts/oauth). -- Zachowanie runtime sekretów oraz narzędzia `audit/configure/apply`: [Secrets Management](/pl/gateway/secrets). +- Zachowanie runtime sekretów oraz narzędzia `audit/configure/apply`: [Zarządzanie sekretami](/pl/gateway/secrets). ### `auth.cooldowns` @@ -3488,20 +3500,20 @@ Uwagi: } ``` -- `billingBackoffHours`: bazowy backoff w godzinach, gdy profil kończy się błędem z powodu rzeczywistych - problemów rozliczeniowych/braku środków (domyślnie: `5`). Jawny tekst rozliczeniowy może - nadal trafić tutaj nawet przy odpowiedziach `401`/`403`, ale dopasowania tekstu specyficzne dla dostawcy - pozostają ograniczone do dostawcy, do którego należą (na przykład OpenRouter - `Key limit exceeded`). Powtarzalne komunikaty `402` dotyczące okna użycia lub - limitów wydatków organizacji/workspace pozostają zamiast tego w ścieżce `rate_limit`. -- `billingBackoffHoursByProvider`: opcjonalne nadpisania godzin backoffu rozliczeniowego per dostawca. -- `billingMaxHours`: limit wzrostu wykładniczego backoffu rozliczeniowego w godzinach (domyślnie: `24`). +- `billingBackoffHours`: bazowy backoff w godzinach, gdy profil zawiedzie z powodu rzeczywistych + błędów rozliczeń/braku środków (domyślnie: `5`). Jawny tekst rozliczeniowy może + nadal trafić tutaj nawet przy odpowiedziach `401`/`403`, ale dopasowania tekstu + specyficzne dla dostawcy pozostają ograniczone do dostawcy, który nimi zarządza (na przykład OpenRouter + `Key limit exceeded`). Odpowiedzi retryable HTTP `402` dotyczące okna użycia lub + komunikatów o limicie wydatków organizacji/workspace pozostają zamiast tego w ścieżce `rate_limit`. +- `billingBackoffHoursByProvider`: opcjonalne nadpisania per dostawca dla godzin backoff rozliczeń. +- `billingMaxHours`: limit w godzinach dla wykładniczego wzrostu backoff rozliczeń (domyślnie: `24`). - `authPermanentBackoffMinutes`: bazowy backoff w minutach dla błędów `auth_permanent` o wysokiej pewności (domyślnie: `10`). -- `authPermanentMaxMinutes`: limit wzrostu backoffu `auth_permanent` w minutach (domyślnie: `60`). -- `failureWindowHours`: ruchome okno w godzinach używane dla liczników backoffu (domyślnie: `24`). -- `overloadedProfileRotations`: maksymalna liczba rotacji auth-profile tego samego dostawcy przy błędach przeciążenia przed przełączeniem na fallback modelu (domyślnie: `1`). Także kształty typu provider-busy, takie jak `ModelNotReadyException`, trafiają tutaj. +- `authPermanentMaxMinutes`: limit w minutach dla wzrostu backoff `auth_permanent` (domyślnie: `60`). +- `failureWindowHours`: przesuwające się okno w godzinach używane dla liczników backoff (domyślnie: `24`). +- `overloadedProfileRotations`: maksymalna liczba rotacji auth-profile tego samego dostawcy dla błędów przeciążenia przed przejściem do fallbacku modelu (domyślnie: `1`). Kształty zajętości dostawcy takie jak `ModelNotReadyException` trafiają tutaj. - `overloadedBackoffMs`: stałe opóźnienie przed ponowną próbą rotacji przeciążonego dostawcy/profilu (domyślnie: `0`). -- `rateLimitedProfileRotations`: maksymalna liczba rotacji auth-profile tego samego dostawcy przy błędach limitu szybkości przed przełączeniem na fallback modelu (domyślnie: `1`). Ten koszyk `rate_limit` obejmuje teksty charakterystyczne dla dostawców, takie jak `Too many concurrent requests`, `ThrottlingException`, `concurrency limit reached`, `workers_ai ... quota limit exceeded` i `resource exhausted`. +- `rateLimitedProfileRotations`: maksymalna liczba rotacji auth-profile tego samego dostawcy dla błędów limitu szybkości przed przejściem do fallbacku modelu (domyślnie: `1`). Ten koszyk limitu szybkości obejmuje teksty o kształcie dostawcy, takie jak `Too many concurrent requests`, `ThrottlingException`, `concurrency limit reached`, `workers_ai ... quota limit exceeded` i `resource exhausted`. --- @@ -3521,8 +3533,8 @@ Uwagi: ``` - Domyślny plik logu: `/tmp/openclaw/openclaw-YYYY-MM-DD.log`. -- Ustaw `logging.file`, aby uzyskać stałą ścieżkę. -- `consoleLevel` podnosi się do `debug`, gdy `--verbose`. +- Ustaw `logging.file`, aby używać stałej ścieżki. +- `consoleLevel` zwiększa się do `debug` przy `--verbose`. - `maxFileBytes`: maksymalny rozmiar pliku logu w bajtach, po którym zapisy są wstrzymywane (dodatnia liczba całkowita; domyślnie: `524288000` = 500 MB). W środowiskach produkcyjnych używaj zewnętrznej rotacji logów. --- @@ -3564,16 +3576,16 @@ Uwagi: - `flags`: tablica ciągów flag włączających ukierunkowane wyjście logów (obsługuje wildcardy takie jak `"telegram.*"` lub `"*"`). - `stuckSessionWarnMs`: próg wieku w ms do emitowania ostrzeżeń o zablokowanej sesji, gdy sesja pozostaje w stanie przetwarzania. - `otel.enabled`: włącza potok eksportu OpenTelemetry (domyślnie: `false`). -- `otel.endpoint`: URL kolektora dla eksportu OTel. +- `otel.endpoint`: adres URL collectora dla eksportu OTel. - `otel.protocol`: `"http/protobuf"` (domyślnie) lub `"grpc"`. - `otel.headers`: dodatkowe nagłówki metadanych HTTP/gRPC wysyłane z żądaniami eksportu OTel. - `otel.serviceName`: nazwa usługi dla atrybutów zasobu. -- `otel.traces` / `otel.metrics` / `otel.logs`: włączają eksport śledzeń, metryk lub logów. -- `otel.sampleRate`: współczynnik próbkowania śledzeń `0`–`1`. -- `otel.flushIntervalMs`: okresowy interwał opróżniania telemetrii w ms. -- `cacheTrace.enabled`: zapisuje migawki śladu cache dla przebiegów wbudowanych (domyślnie: `false`). +- `otel.traces` / `otel.metrics` / `otel.logs`: włącza eksport śladów, metryk lub logów. +- `otel.sampleRate`: współczynnik próbkowania śladów `0`–`1`. +- `otel.flushIntervalMs`: okresowy interwał flush telemetrii w ms. +- `cacheTrace.enabled`: loguje migawki śladu cache dla uruchomień wbudowanych (domyślnie: `false`). - `cacheTrace.filePath`: ścieżka wyjściowa dla JSONL śladu cache (domyślnie: `$OPENCLAW_STATE_DIR/logs/cache-trace.jsonl`). -- `cacheTrace.includeMessages` / `includePrompt` / `includeSystem`: kontrolują, co jest uwzględniane w wyjściu śladu cache (wszystkie domyślnie: `true`). +- `cacheTrace.includeMessages` / `includePrompt` / `includeSystem`: sterują tym, co jest uwzględniane w wyjściu śladu cache (wszystkie domyślnie: `true`). --- @@ -3595,12 +3607,12 @@ Uwagi: } ``` -- `channel`: kanał wydania dla instalacji npm/git — `"stable"`, `"beta"` lub `"dev"`. -- `checkOnStart`: sprawdza aktualizacje npm przy starcie Gateway (domyślnie: `true`). -- `auto.enabled`: włącza aktualizacje automatyczne w tle dla instalacji pakietowych (domyślnie: `false`). -- `auto.stableDelayHours`: minimalne opóźnienie w godzinach przed automatycznym zastosowaniem na kanale stable (domyślnie: `6`; max: `168`). -- `auto.stableJitterHours`: dodatkowe okno rozłożenia wdrożenia kanału stable w godzinach (domyślnie: `12`; max: `168`). -- `auto.betaCheckIntervalHours`: jak często wykonywane są sprawdzenia kanału beta, w godzinach (domyślnie: `1`; max: `24`). +- `channel`: kanał wydań dla instalacji npm/git — `"stable"`, `"beta"` lub `"dev"`. +- `checkOnStart`: sprawdza aktualizacje npm przy uruchamianiu gateway (domyślnie: `true`). +- `auto.enabled`: włącza automatyczne aktualizacje w tle dla instalacji pakietów (domyślnie: `false`). +- `auto.stableDelayHours`: minimalne opóźnienie w godzinach przed automatycznym zastosowaniem w kanale stable (domyślnie: `6`; maks.: `168`). +- `auto.stableJitterHours`: dodatkowe okno rozłożenia wdrożenia kanału stable w godzinach (domyślnie: `12`; maks.: `168`). +- `auto.betaCheckIntervalHours`: jak często uruchamiane są sprawdzenia kanału beta w godzinach (domyślnie: `1`; maks.: `24`). --- @@ -3634,21 +3646,21 @@ Uwagi: ``` - `enabled`: globalna bramka funkcji ACP (domyślnie: `false`). -- `dispatch.enabled`: niezależna bramka dla dyspozycji tur sesji ACP (domyślnie: `true`). Ustaw `false`, aby zachować dostępność poleceń ACP przy jednoczesnym blokowaniu wykonania. -- `backend`: domyślny identyfikator backendu runtime ACP (musi odpowiadać zarejestrowanemu Pluginowi runtime ACP). +- `dispatch.enabled`: niezależna bramka dla dyspozycji tur sesji ACP (domyślnie: `true`). Ustaw `false`, aby pozostawić polecenia ACP dostępne przy jednoczesnym blokowaniu wykonania. +- `backend`: domyślny identyfikator backendu runtime ACP (musi pasować do zarejestrowanego Pluginu runtime ACP). - `defaultAgent`: zapasowy identyfikator docelowego agenta ACP, gdy uruchomienia nie określają jawnego celu. -- `allowedAgents`: lista dozwolonych identyfikatorów agentów dopuszczonych do sesji runtime ACP; pusta oznacza brak dodatkowych ograniczeń. +- `allowedAgents`: lista dozwolonych identyfikatorów agentów dla sesji runtime ACP; pusta oznacza brak dodatkowych ograniczeń. - `maxConcurrentSessions`: maksymalna liczba jednocześnie aktywnych sesji ACP. -- `stream.coalesceIdleMs`: okno bezczynnego opróżniania w ms dla strumieniowanego tekstu. -- `stream.maxChunkChars`: maksymalny rozmiar porcji przed podziałem projekcji strumieniowanego bloku. +- `stream.coalesceIdleMs`: okno opróżniania po bezczynności w ms dla tekstu strumieniowanego. +- `stream.maxChunkChars`: maksymalny rozmiar chunku przed podziałem projekcji strumieniowanego bloku. - `stream.repeatSuppression`: tłumi powtarzające się linie statusu/narzędzi per tura (domyślnie: `true`). -- `stream.deliveryMode`: `"live"` strumieniuje przyrostowo; `"final_only"` buforuje aż do terminalnych zdarzeń tury. +- `stream.deliveryMode`: `"live"` strumieniuje przyrostowo; `"final_only"` buforuje do terminalnych zdarzeń tury. - `stream.hiddenBoundarySeparator`: separator przed widocznym tekstem po ukrytych zdarzeniach narzędzi (domyślnie: `"paragraph"`). -- `stream.maxOutputChars`: maksymalna liczba znaków wyjścia asystenta projektowana per tura ACP. +- `stream.maxOutputChars`: maksymalna liczba znaków wyjścia asystenta projektowanych per tura ACP. - `stream.maxSessionUpdateChars`: maksymalna liczba znaków dla projektowanych linii statusu/aktualizacji ACP. -- `stream.tagVisibility`: zapis nazw tagów do logicznych nadpisań widoczności dla strumieniowanych zdarzeń. -- `runtime.ttlMinutes`: TTL bezczynności w minutach dla workerów sesji ACP przed kwalifikacją do czyszczenia. -- `runtime.installCommand`: opcjonalne polecenie instalacji uruchamiane przy bootstrapowaniu środowiska runtime ACP. +- `stream.tagVisibility`: zapis nazw tagów do logicznych nadpisań widoczności dla zdarzeń strumieniowanych. +- `runtime.ttlMinutes`: bezczynny TTL w minutach dla workerów sesji ACP przed możliwością ich wyczyszczenia. +- `runtime.installCommand`: opcjonalne polecenie instalacji do uruchomienia przy bootstrapowaniu środowiska runtime ACP. --- @@ -3664,17 +3676,17 @@ Uwagi: } ``` -- `cli.banner.taglineMode` kontroluje styl sloganu bannera: +- `cli.banner.taglineMode` steruje stylem sloganu banera: - `"random"` (domyślnie): rotujące zabawne/sezonowe slogany. - - `"default"`: stały neutralny slogan (`Wszystkie Twoje czaty, jeden OpenClaw.`). - - `"off"`: brak tekstu sloganu (tytuł/wersja bannera nadal są wyświetlane). -- Aby ukryć cały banner (nie tylko slogany), ustaw zmienną środowiskową `OPENCLAW_HIDE_BANNER=1`. + - `"default"`: stały neutralny slogan (`All your chats, one OpenClaw.`). + - `"off"`: brak tekstu sloganu (tytuł/wersja banera nadal są pokazywane). +- Aby ukryć cały baner (nie tylko slogany), ustaw env `OPENCLAW_HIDE_BANNER=1`. --- ## Wizard -Metadane zapisywane przez prowadzone przepływy konfiguracji CLI (`onboard`, `configure`, `doctor`): +Metadane zapisywane przez przepływy konfiguracji prowadzonej CLI (`onboard`, `configure`, `doctor`): ```json5 { @@ -3698,9 +3710,9 @@ Zobacz pola tożsamości `agents.list` w sekcji [Domyślne ustawienia agenta](#a ## Bridge (starsze, usunięte) -Bieżące buildy nie zawierają już mostu TCP. Node łączą się przez Gateway WebSocket. Klucze `bridge.*` nie są już częścią schematu konfiguracji (walidacja kończy się błędem do czasu ich usunięcia; `openclaw doctor --fix` może usunąć nieznane klucze). +Bieżące buildy nie zawierają już mostu TCP. Node łączą się przez Gateway WebSocket. Klucze `bridge.*` nie są już częścią schematu konfiguracji (walidacja kończy się błędem, dopóki nie zostaną usunięte; `openclaw doctor --fix` może usunąć nieznane klucze). - + ```json { @@ -3741,8 +3753,8 @@ Bieżące buildy nie zawierają już mostu TCP. Node łączą się przez Gateway - `sessionRetention`: jak długo zachowywać ukończone izolowane sesje uruchomień Cron przed usunięciem z `sessions.json`. Steruje także czyszczeniem zarchiwizowanych usuniętych transkryptów Cron. Domyślnie: `24h`; ustaw `false`, aby wyłączyć. - `runLog.maxBytes`: maksymalny rozmiar pliku logu na uruchomienie (`cron/runs/.jsonl`) przed przycięciem. Domyślnie: `2_000_000` bajtów. - `runLog.keepLines`: liczba najnowszych linii zachowywanych po uruchomieniu przycinania logu uruchomienia. Domyślnie: `2000`. -- `webhookToken`: token bearer używany do dostarczania POST Webhook dla Cron (`delivery.mode = "webhook"`); jeśli pominięty, nagłówek auth nie jest wysyłany. -- `webhook`: przestarzały starszy zapasowy URL Webhook (http/https) używany tylko dla zapisanych zadań, które nadal mają `notify: true`. +- `webhookToken`: token bearer używany do dostarczania Cron Webhook przez POST (`delivery.mode = "webhook"`); jeśli pominięty, nie jest wysyłany nagłówek auth. +- `webhook`: przestarzały starszy zapasowy adres URL Webhook (http/https) używany tylko dla zapisanych zadań, które nadal mają `notify: true`. ### `cron.retry` @@ -3758,11 +3770,11 @@ Bieżące buildy nie zawierają już mostu TCP. Node łączą się przez Gateway } ``` -- `maxAttempts`: maksymalna liczba ponowień dla jednorazowych zadań przy błędach przejściowych (domyślnie: `3`; zakres: `0`–`10`). +- `maxAttempts`: maksymalna liczba ponowień dla zadań jednorazowych przy błędach przejściowych (domyślnie: `3`; zakres: `0`–`10`). - `backoffMs`: tablica opóźnień backoff w ms dla każdej próby ponowienia (domyślnie: `[30000, 60000, 300000]`; 1–10 wpisów). - `retryOn`: typy błędów wyzwalające ponowienia — `"rate_limit"`, `"overloaded"`, `"network"`, `"timeout"`, `"server_error"`. Pomiń, aby ponawiać dla wszystkich typów przejściowych. -Dotyczy tylko jednorazowych zadań Cron. Zadania cykliczne używają osobnej obsługi błędów. +Dotyczy tylko jednorazowych zadań Cron. Zadania cykliczne używają oddzielnej obsługi błędów. ### `cron.failureAlert` @@ -3781,10 +3793,10 @@ Dotyczy tylko jednorazowych zadań Cron. Zadania cykliczne używają osobnej obs ``` - `enabled`: włącza alerty o błędach dla zadań Cron (domyślnie: `false`). -- `after`: liczba kolejnych niepowodzeń przed uruchomieniem alertu (dodatnia liczba całkowita, min.: `1`). -- `cooldownMs`: minimalna liczba milisekund między powtarzanymi alertami dla tego samego zadania (nieujemna liczba całkowita). -- `mode`: tryb dostarczenia — `"announce"` wysyła przez wiadomość kanałową; `"webhook"` wysyła POST na skonfigurowany Webhook. -- `accountId`: opcjonalny identyfikator konta lub kanału do ograniczenia zakresu dostarczania alertów. +- `after`: liczba kolejnych błędów, po której uruchamia się alert (dodatnia liczba całkowita, min.: `1`). +- `cooldownMs`: minimalna liczba milisekund między powtarzającymi się alertami dla tego samego zadania (nieujemna liczba całkowita). +- `mode`: tryb dostarczania — `"announce"` wysyła przez wiadomość kanałową; `"webhook"` publikuje do skonfigurowanego Webhook. +- `accountId`: opcjonalny identyfikator konta lub kanału do ograniczenia dostarczania alertu. ### `cron.failureDestination` @@ -3801,44 +3813,44 @@ Dotyczy tylko jednorazowych zadań Cron. Zadania cykliczne używają osobnej obs } ``` -- Domyślny cel dla powiadomień o błędach Cron we wszystkich zadaniach. +- Domyślne miejsce docelowe dla powiadomień o błędach Cron we wszystkich zadaniach. - `mode`: `"announce"` lub `"webhook"`; domyślnie `"announce"`, gdy istnieją wystarczające dane docelowe. -- `channel`: nadpisanie kanału dla dostarczania announce. `"last"` ponownie używa ostatniego znanego kanału dostarczenia. -- `to`: jawny cel announce lub URL Webhook. Wymagane dla trybu webhook. +- `channel`: nadpisanie kanału dla dostarczania announce. `"last"` ponownie używa ostatniego znanego kanału dostarczania. +- `to`: jawny cel announce lub adres URL Webhook. Wymagane dla trybu Webhook. - `accountId`: opcjonalne nadpisanie konta dla dostarczania. -- Per-zadaniowe `delivery.failureDestination` nadpisuje tę globalną wartość domyślną. -- Gdy nie jest ustawiony ani globalny, ani per-zadaniowy cel błędu, zadania, które już dostarczają przez `announce`, wracają przy błędzie do tego podstawowego celu announce. +- `delivery.failureDestination` per zadanie nadpisuje tę globalną wartość domyślną. +- Gdy nie ustawiono ani globalnego, ani per-zadanie miejsca docelowego błędu, zadania już dostarczające przez `announce` przechodzą awaryjnie do tego podstawowego celu announce przy błędzie. - `delivery.failureDestination` jest obsługiwane tylko dla zadań `sessionTarget="isolated"`, chyba że podstawowe `delivery.mode` zadania ma wartość `"webhook"`. -Zobacz [Cron Jobs](/pl/automation/cron-jobs). Izolowane wykonania Cron są śledzone jako [background tasks](/pl/automation/tasks). +Zobacz [Zadania Cron](/pl/automation/cron-jobs). Izolowane wykonania Cron są śledzone jako [zadania w tle](/pl/automation/tasks). --- -## Zmienne szablonów modeli mediów +## Zmienne szablonu modelu mediów -Placeholders szablonów rozwijane w `tools.media.models[].args`: +Placeholdery szablonu rozwijane w `tools.media.models[].args`: | Zmienna | Opis | | ----------------- | ------------------------------------------------- | -| `{{Body}}` | Pełna treść wiadomości przychodzącej | -| `{{RawBody}}` | Surowa treść (bez opakowań historii/nadawcy) | -| `{{BodyStripped}}` | Treść z usuniętymi wzmiankami grupowymi | -| `{{From}}` | Identyfikator nadawcy | -| `{{To}}` | Identyfikator celu | -| `{{MessageSid}}` | Identyfikator wiadomości kanału | -| `{{SessionId}}` | Bieżący UUID sesji | -| `{{IsNewSession}}` | `"true"` po utworzeniu nowej sesji | -| `{{MediaUrl}}` | Pseudo-URL przychodzącego medium | -| `{{MediaPath}}` | Lokalna ścieżka medium | -| `{{MediaType}}` | Typ medium (image/audio/document/…) | -| `{{Transcript}}` | Transkrypt audio | -| `{{Prompt}}` | Rozwiązany prompt mediów dla wpisów CLI | -| `{{MaxChars}}` | Rozwiązana maksymalna liczba znaków wyjścia dla wpisów CLI | -| `{{ChatType}}` | `"direct"` lub `"group"` | -| `{{GroupSubject}}` | Temat grupy (best effort) | -| `{{GroupMembers}}` | Podgląd członków grupy (best effort) | -| `{{SenderName}}` | Wyświetlana nazwa nadawcy (best effort) | -| `{{SenderE164}}` | Numer telefonu nadawcy (best effort) | +| `{{Body}}` | Pełna treść przychodzącej wiadomości | +| `{{RawBody}}` | Surowa treść (bez opakowań historii/nadawcy) | +| `{{BodyStripped}}` | Treść z usuniętymi wzmiankami grupowymi | +| `{{From}}` | Identyfikator nadawcy | +| `{{To}}` | Identyfikator celu | +| `{{MessageSid}}` | Identyfikator wiadomości kanału | +| `{{SessionId}}` | UUID bieżącej sesji | +| `{{IsNewSession}}` | `"true"`, gdy utworzono nową sesję | +| `{{MediaUrl}}` | Pseudo-URL przychodzącego medium | +| `{{MediaPath}}` | Lokalna ścieżka medium | +| `{{MediaType}}` | Typ medium (image/audio/document/…) | +| `{{Transcript}}` | Transkrypt audio | +| `{{Prompt}}` | Rozwiązany prompt medium dla wpisów CLI | +| `{{MaxChars}}` | Rozwiązana maksymalna liczba znaków wyjściowych dla wpisów CLI | +| `{{ChatType}}` | `"direct"` lub `"group"` | +| `{{GroupSubject}}` | Temat grupy (best effort) | +| `{{GroupMembers}}` | Podgląd członków grupy (best effort) | +| `{{SenderName}}` | Wyświetlana nazwa nadawcy (best effort) | +| `{{SenderE164}}` | Numer telefonu nadawcy (best effort) | | `{{Provider}}` | Wskazówka dostawcy (whatsapp, telegram, discord itd.) | --- @@ -3861,11 +3873,11 @@ Podziel konfigurację na wiele plików: **Zachowanie scalania:** - Pojedynczy plik: zastępuje zawierający go obiekt. -- Tablica plików: głębokie scalanie w kolejności (późniejsze nadpisują wcześniejsze). -- Klucze sąsiednie: scalane po include (nadpisują dołączone wartości). -- Zagnieżdżone include: do 10 poziomów głębokości. -- Ścieżki: rozwiązywane względem pliku dołączającego, ale muszą pozostać w obrębie katalogu głównego najwyższego poziomu konfiguracji (`dirname` z `openclaw.json`). Formy bezwzględne/`../` są dozwolone tylko wtedy, gdy nadal rozwiązują się wewnątrz tej granicy. -- Błędy: jasne komunikaty dla brakujących plików, błędów parsowania i cyklicznych include. +- Tablica plików: głęboko scalana w kolejności (późniejsze nadpisują wcześniejsze). +- Klucze rodzeństwa: scalane po include'ach (nadpisują dołączone wartości). +- Zagnieżdżone include'y: do 10 poziomów głębokości. +- Ścieżki: rozwiązywane względem pliku dołączającego, ale muszą pozostać wewnątrz katalogu konfiguracji najwyższego poziomu (`dirname` dla `openclaw.json`). Formy bezwzględne/`../` są dozwolone tylko wtedy, gdy nadal rozwiązują się wewnątrz tej granicy. +- Błędy: jasne komunikaty dla brakujących plików, błędów parsowania i cyklicznych include'ów. --- diff --git a/docs/pl/help/testing.md b/docs/pl/help/testing.md index a4feb84e8..4fa7e012c 100644 --- a/docs/pl/help/testing.md +++ b/docs/pl/help/testing.md @@ -2,14 +2,14 @@ read_when: - Uruchamianie testów lokalnie lub w CI - Dodawanie testów regresji dla błędów modeli/dostawców - - Debugowanie zachowania Gateway i agenta -summary: 'Zestaw testowy: pakiety testów unit/e2e/live, uruchamianie w Dockerze oraz zakres pokrycia poszczególnych testów' + - Debugowanie zachowania Gateway + agenta +summary: 'Zestaw testowy: pakiety unit/e2e/live, uruchamianie w Dockerze i zakres poszczególnych testów' title: Testowanie x-i18n: - generated_at: "2026-04-17T09:49:36Z" + generated_at: "2026-04-18T09:34:52Z" model: gpt-5.4 provider: openai - source_hash: 55483bc68d3b24daca3189fba3af1e896f39b8e83068d102fed06eac05b36102 + source_hash: 7cdd2048ba58e606fd68703977c2b33000abdb1826b6589ce25a35c53468726a source_path: help/testing.md workflow: 15 --- @@ -18,7 +18,7 @@ x-i18n: OpenClaw ma trzy pakiety Vitest (unit/integration, e2e, live) oraz niewielki zestaw uruchomień w Dockerze. -Ten dokument jest przewodnikiem „jak testujemy”: +Ten dokument to przewodnik „jak testujemy”: - Co obejmuje każdy pakiet (i czego celowo _nie_ obejmuje) - Jakie polecenia uruchamiać w typowych przepływach pracy (lokalnie, przed wypchnięciem, debugowanie) @@ -27,13 +27,13 @@ Ten dokument jest przewodnikiem „jak testujemy”: ## Szybki start -Na co dzień: +W większość dni: - Pełna bramka (oczekiwana przed wypchnięciem): `pnpm build && pnpm check && pnpm test` - Szybsze lokalne uruchomienie pełnego pakietu na wydajnej maszynie: `pnpm test:max` -- Bezpośrednia pętla obserwacji Vitest: `pnpm test:watch` +- Bezpośrednia pętla watch Vitest: `pnpm test:watch` - Bezpośrednie wskazywanie plików obsługuje teraz także ścieżki rozszerzeń/kanałów: `pnpm test extensions/discord/src/monitor/message-handler.preflight.test.ts` -- Gdy pracujesz nad pojedynczym błędem, najpierw wybieraj uruchomienia ukierunkowane. +- Gdy iterujesz nad pojedynczym błędem, najpierw preferuj uruchomienia zawężone do celu. - Witryna QA oparta na Dockerze: `pnpm qa:lab:up` - Ścieżka QA oparta na maszynie wirtualnej Linux: `pnpm openclaw qa suite --runner multipass --scenario channel-chat-baseline` @@ -47,58 +47,58 @@ Podczas debugowania rzeczywistych dostawców/modeli (wymaga prawdziwych poświad - Pakiet live (modele + sondy narzędzi/obrazów Gateway): `pnpm test:live` - Ciche uruchomienie jednego pliku live: `pnpm test:live -- src/agents/models.profiles.live.test.ts` -Wskazówka: gdy potrzebujesz tylko jednego błędnego przypadku, zawężaj testy live za pomocą zmiennych środowiskowych allowlist opisanych poniżej. +Wskazówka: jeśli potrzebujesz tylko jednego nieudanego przypadku, preferuj zawężanie testów live za pomocą zmiennych środowiskowych allowlist opisanych poniżej. ## Uruchomienia specyficzne dla QA -Te polecenia działają obok głównych pakietów testów, gdy potrzebujesz realizmu QA-lab: +Te polecenia znajdują się obok głównych pakietów testowych, gdy potrzebujesz realizmu QA-lab: - `pnpm openclaw qa suite` - Uruchamia scenariusze QA oparte na repozytorium bezpośrednio na hoście. - - Domyślnie uruchamia wiele wybranych scenariuszy równolegle z izolowanymi workerami Gateway, do 64 workerów lub liczby wybranych scenariuszy. Użyj `--concurrency `, aby dostroić liczbę workerów, albo `--concurrency 1` dla starszej ścieżki sekwencyjnej. + - Domyślnie uruchamia równolegle wiele wybranych scenariuszy z odizolowanymi workerami Gateway, do 64 workerów lub liczby wybranych scenariuszy. Użyj `--concurrency `, aby dostroić liczbę workerów, albo `--concurrency 1` dla starszej ścieżki sekwencyjnej. - Obsługuje tryby dostawców `live-frontier`, `mock-openai` i `aimock`. - `aimock` uruchamia lokalny serwer dostawcy oparty na AIMock dla eksperymentalnego pokrycia fixture i mocków protokołu bez zastępowania świadomej scenariuszy ścieżki `mock-openai`. + `aimock` uruchamia lokalny serwer dostawcy oparty na AIMock do eksperymentalnego testowania fixture i mocków protokołu bez zastępowania ścieżki `mock-openai` świadomej scenariuszy. - `pnpm openclaw qa suite --runner multipass` - - Uruchamia ten sam pakiet QA wewnątrz tymczasowej maszyny wirtualnej Linux Multipass. - - Zachowuje takie samo zachowanie wyboru scenariuszy jak `qa suite` na hoście. - - Używa tych samych flag wyboru dostawcy/modelu co `qa suite`. - - Uruchomienia live przekazują do gościa obsługiwane wejścia uwierzytelniania QA, które są praktyczne: - klucze dostawców oparte na env, ścieżkę konfiguracji dostawcy live QA oraz `CODEX_HOME`, jeśli jest obecne. - - Katalogi wyjściowe muszą pozostać pod katalogiem głównym repozytorium, aby gość mógł zapisywać dane zwrotnie przez zamontowany obszar roboczy. + - Uruchamia ten sam pakiet QA wewnątrz tymczasowej maszyny wirtualnej Multipass Linux. + - Zachowuje ten sam sposób wyboru scenariuszy co `qa suite` na hoście. + - Ponownie wykorzystuje te same flagi wyboru dostawcy/modelu co `qa suite`. + - Uruchomienia live przekazują obsługiwane wejścia autoryzacyjne 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. + - Katalogi wyjściowe muszą pozostawać pod katalogiem głównym repozytorium, aby gość mógł zapisywać dane z powrotem przez zamontowany obszar roboczy. - Zapisuje standardowy raport i podsumowanie QA oraz logi Multipass w `.artifacts/qa-e2e/...`. - `pnpm qa:lab:up` - - Uruchamia witrynę QA opartą na Dockerze do operatorskiej pracy QA. + - Uruchamia witrynę QA opartą na Dockerze do pracy QA w stylu operatora. - `pnpm openclaw qa aimock` - - Uruchamia tylko lokalny serwer dostawcy AIMock do bezpośrednich testów smoke protokołu. + - Uruchamia tylko lokalny serwer dostawcy AIMock do bezpośredniego smoke testu protokołu. - `pnpm openclaw qa matrix` - - Uruchamia ścieżkę QA Matrix live na jednorazowym homeserverze Tuwunel opartym na Dockerze. - - Ten host QA jest obecnie przeznaczony wyłącznie do repozytorium/developmentu. Spakowane instalacje OpenClaw nie dostarczają `qa-lab`, więc nie udostępniają `openclaw qa`. - - Kopie repozytorium ładują dołączony runner bezpośrednio; nie jest potrzebny osobny krok instalacji Plugin. - - Tworzy trzech tymczasowych użytkowników Matrix (`driver`, `sut`, `observer`) oraz jeden prywatny pokój, a następnie uruchamia podrzędny proces QA Gateway z rzeczywistym Plugin Matrix jako transportem SUT. - - Domyślnie używa przypiętego stabilnego obrazu Tuwunel `ghcr.io/matrix-construct/tuwunel:v1.5.1`. Nadpisz za pomocą `OPENCLAW_QA_MATRIX_TUWUNEL_IMAGE`, gdy chcesz przetestować inny obraz. - - Matrix nie udostępnia współdzielonych flag źródła poświadczeń, ponieważ ta ścieżka lokalnie tworzy tymczasowych użytkowników. - - Zapisuje raport QA Matrix, podsumowanie, artefakt obserwowanych zdarzeń oraz połączony log wyjścia stdout/stderr w `.artifacts/qa-e2e/...`. + - Uruchamia ścieżkę QA live dla Matrix względem tymczasowego homeserwera Tuwunel opartego na Dockerze. + - Ten host QA jest dziś przeznaczony tylko dla repozytorium/deweloperów. Spakowane instalacje OpenClaw nie dostarczają `qa-lab`, więc nie udostępniają `openclaw qa`. + - Check-outy repozytorium ładują dołączony runner bezpośrednio; nie jest potrzebny osobny krok instalacji Plugin. + - Tworzy trzy tymczasowe konta użytkowników Matrix (`driver`, `sut`, `observer`) oraz jeden prywatny pokój, a następnie uruchamia podrzędny proces QA Gateway z rzeczywistym Plugin Matrix jako transportem SUT. + - Domyślnie używa przypiętego stabilnego obrazu Tuwunel `ghcr.io/matrix-construct/tuwunel:v1.5.1`. Nadpisz przez `OPENCLAW_QA_MATRIX_TUWUNEL_IMAGE`, gdy potrzebujesz przetestować inny obraz. + - Matrix nie udostępnia współdzielonych flag źródła poświadczeń, ponieważ ta ścieżka tworzy tymczasowych użytkowników lokalnie. + - Zapisuje raport QA Matrix, podsumowanie, artefakt obserwowanych zdarzeń oraz połączony log stdout/stderr w `.artifacts/qa-e2e/...`. - `pnpm openclaw qa telegram` - - Uruchamia ścieżkę QA Telegram live na rzeczywistej prywatnej grupie przy użyciu tokenów bota driver i SUT z env. - - Wymaga `OPENCLAW_QA_TELEGRAM_GROUP_ID`, `OPENCLAW_QA_TELEGRAM_DRIVER_BOT_TOKEN` oraz `OPENCLAW_QA_TELEGRAM_SUT_BOT_TOKEN`. Identyfikator grupy musi być numerycznym identyfikatorem czatu Telegram. - - Obsługuje `--credential-source convex` dla współdzielonych, pulowanych poświadczeń. Domyślnie używaj trybu env albo ustaw `OPENCLAW_QA_CREDENTIAL_SOURCE=convex`, aby włączyć pulowane dzierżawy. - - Wymaga dwóch odrębnych botów w tej samej prywatnej grupie, przy czym bot SUT musi udostępniać nazwę użytkownika Telegram. - - Aby uzyskać stabilną obserwację bot-do-bota, włącz Bot-to-Bot Communication Mode w `@BotFather` dla obu botów i upewnij się, że bot driver może obserwować ruch botów w grupie. + - Uruchamia ścieżkę QA live dla Telegram względem rzeczywistej prywatnej grupy, używając tokenów bota driver i SUT ze zmiennych środowiskowych. + - Wymaga `OPENCLAW_QA_TELEGRAM_GROUP_ID`, `OPENCLAW_QA_TELEGRAM_DRIVER_BOT_TOKEN` i `OPENCLAW_QA_TELEGRAM_SUT_BOT_TOKEN`. Identyfikator grupy musi być numerycznym identyfikatorem czatu Telegram. + - Obsługuje `--credential-source convex` dla współdzielonych poświadczeń z puli. Domyślnie używaj trybu env albo ustaw `OPENCLAW_QA_CREDENTIAL_SOURCE=convex`, aby włączyć dzierżawy z puli. + - Wymaga dwóch różnych botów w tej samej prywatnej grupie, przy czym bot SUT musi udostępniać nazwę użytkownika Telegram. + - Aby obserwacja bot-do-bot była stabilna, włącz Bot-to-Bot Communication Mode w `@BotFather` dla obu botów i upewnij się, że bot driver może obserwować ruch botów w grupie. - Zapisuje raport QA Telegram, podsumowanie oraz artefakt obserwowanych wiadomości w `.artifacts/qa-e2e/...`. -Ścieżki transportu live współdzielą jeden standardowy kontrakt, aby nowe transporty nie rozchodziły się funkcjonalnie: +Ścieżki live transport współdzielą jeden standardowy kontrakt, aby nowe transporty nie ulegały rozjechaniu: -`qa-channel` pozostaje szerokim, syntetycznym pakietem QA i nie jest częścią macierzy pokrycia transportu live. +`qa-channel` pozostaje szerokim syntetycznym pakietem QA i nie jest częścią macierzy pokrycia live transport. -| Ścieżka | Canary | Ograniczanie wzmianek | Blokada allowlist | Odpowiedź najwyższego poziomu | Wznowienie po restarcie | Dalszy ciąg 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 wzmianek | Blokada allowlist | Odpowiedź najwyższego poziomu | Wznowienie po restarcie | Dalszy ciąg wątku | Izolacja wątku | Obserwacja reakcji | Polecenie help | +| -------- | ------ | --------------- | ----------------- | ----------------------------- | ----------------------- | ----------------- | -------------- | ------------------ | -------------- | +| Matrix | x | x | x | x | x | x | x | x | | +| Telegram | x | | | | | | | | x | ### Współdzielone poświadczenia Telegram przez Convex (v1) -Gdy dla `openclaw qa telegram` włączone jest `--credential-source convex` (lub `OPENCLAW_QA_CREDENTIAL_SOURCE=convex`), QA lab pobiera wyłączną dzierżawę z puli opartej na Convex, wysyła Heartbeat tej dzierżawy podczas działania ścieżki i zwalnia dzierżawę przy zamknięciu. +Gdy dla `openclaw qa telegram` włączone jest `--credential-source convex` (lub `OPENCLAW_QA_CREDENTIAL_SOURCE=convex`), QA lab pobiera wyłączną dzierżawę z puli opartej na Convex, wysyła Heartbeat tej dzierżawy podczas działania ścieżki i zwalnia dzierżawę przy zamykaniu. Referencyjny szablon projektu Convex: @@ -112,7 +112,7 @@ Wymagane zmienne środowiskowe: - `OPENCLAW_QA_CONVEX_SECRET_CI` dla `ci` - Wybór roli poświadczeń: - CLI: `--credential-role maintainer|ci` - - Domyślne z env: `OPENCLAW_QA_CREDENTIAL_ROLE` (domyślnie `maintainer`) + - Domyślnie z env: `OPENCLAW_QA_CREDENTIAL_ROLE` (domyślnie `maintainer`) Opcjonalne zmienne środowiskowe: @@ -121,12 +121,12 @@ Opcjonalne zmienne środowiskowe: - `OPENCLAW_QA_CREDENTIAL_ACQUIRE_TIMEOUT_MS` (domyślnie `90000`) - `OPENCLAW_QA_CREDENTIAL_HTTP_TIMEOUT_MS` (domyślnie `15000`) - `OPENCLAW_QA_CONVEX_ENDPOINT_PREFIX` (domyślnie `/qa-credentials/v1`) -- `OPENCLAW_QA_CREDENTIAL_OWNER_ID` (opcjonalny identyfikator śledzenia) -- `OPENCLAW_QA_ALLOW_INSECURE_HTTP=1` zezwala na adresy URL Convex `http://` dla loopback tylko do lokalnego developmentu. +- `OPENCLAW_QA_CREDENTIAL_OWNER_ID` (opcjonalny trace id) +- `OPENCLAW_QA_ALLOW_INSECURE_HTTP=1` pozwala na URL-e Convex `http://` na loopback wyłącznie do lokalnego developmentu. -`OPENCLAW_QA_CONVEX_SITE_URL` powinno w normalnym użyciu korzystać z `https://`. +`OPENCLAW_QA_CONVEX_SITE_URL` powinien w normalnym działaniu używać `https://`. -Administracyjne polecenia maintainera (dodawanie/usuwanie/listowanie puli) wymagają konkretnie +Polecenia administracyjne maintainera (dodawanie/usuwanie/listowanie puli) wymagają konkretnie `OPENCLAW_QA_CONVEX_SECRET_MAINTAINER`. Pomocnicze polecenia CLI dla maintainerów: @@ -139,12 +139,12 @@ pnpm openclaw qa credentials remove --credential-id Użyj `--json`, aby uzyskać dane wyjściowe czytelne maszynowo w skryptach i narzędziach CI. -Domyślny kontrakt endpointu (`OPENCLAW_QA_CONVEX_SITE_URL` + `/qa-credentials/v1`): +Domyślny kontrakt endpointów (`OPENCLAW_QA_CONVEX_SITE_URL` + `/qa-credentials/v1`): - `POST /acquire` - Żądanie: `{ kind, ownerId, actorRole, leaseTtlMs, heartbeatIntervalMs }` - Sukces: `{ status: "ok", credentialId, leaseToken, payload, leaseTtlMs?, heartbeatIntervalMs? }` - - Wyczerpane/nadające się do ponowienia: `{ status: "error", code: "POOL_EXHAUSTED" | "NO_CREDENTIAL_AVAILABLE", ... }` + - Wyczerpane/do ponowienia: `{ status: "error", code: "POOL_EXHAUSTED" | "NO_CREDENTIAL_AVAILABLE", ... }` - `POST /heartbeat` - Żądanie: `{ kind, ownerId, actorRole, credentialId, leaseToken, leaseTtlMs }` - Sukces: `{ status: "ok" }` (lub puste `2xx`) @@ -162,15 +162,15 @@ Domyślny kontrakt endpointu (`OPENCLAW_QA_CONVEX_SITE_URL` + `/qa-credentials/v - Żądanie: `{ kind?, status?, includePayload?, limit? }` - Sukces: `{ status: "ok", credentials, count }` -Kształt payloadu dla rodzaju Telegram: +Kształt payload dla rodzaju Telegram: - `{ groupId: string, driverToken: string, sutToken: string }` - `groupId` musi być ciągiem będącym numerycznym identyfikatorem czatu Telegram. -- `admin/add` weryfikuje ten kształt dla `kind: "telegram"` i odrzuca nieprawidłowy payload. +- `admin/add` waliduje ten kształt dla `kind: "telegram"` i odrzuca nieprawidłowy payload. ### Dodawanie kanału do QA -Dodanie kanału do systemu QA w Markdown wymaga dokładnie dwóch rzeczy: +Dodanie kanału do systemu markdown QA wymaga dokładnie dwóch rzeczy: 1. Adaptera transportu dla kanału. 2. Pakietu scenariuszy, który sprawdza kontrakt kanału. @@ -180,7 +180,7 @@ Nie dodawaj nowego głównego korzenia poleceń QA, gdy współdzielony host `qa `qa-lab` odpowiada za współdzieloną mechanikę hosta: - korzeń poleceń `openclaw qa` -- uruchamianie i kończenie pakietu +- uruchamianie i zamykanie pakietu - współbieżność workerów - zapisywanie artefaktów - generowanie raportów @@ -190,32 +190,32 @@ Nie dodawaj nowego głównego korzenia poleceń QA, gdy współdzielony host `qa Pluginy runnerów odpowiadają za kontrakt transportu: - jak `openclaw qa ` jest montowane pod współdzielonym korzeniem `qa` -- jak Gateway jest konfigurowany dla tego transportu +- jak konfigurowany jest Gateway dla tego transportu - jak sprawdzana jest gotowość - jak wstrzykiwane są zdarzenia przychodzące - jak obserwowane są wiadomości wychodzące - jak udostępniane są transkrypcje i znormalizowany stan transportu -- jak wykonywane są działania oparte na transporcie +- jak wykonywane są akcje oparte na transporcie - jak obsługiwany jest reset lub czyszczenie specyficzne dla transportu Minimalny próg wdrożenia dla nowego kanału to: -1. Zachowanie `qa-lab` jako właściciela współdzielonego korzenia `qa`. -2. Implementacja runnera transportu na współdzielonym styku hosta `qa-lab`. -3. Zachowanie mechanik specyficznych dla transportu wewnątrz Plugin runnera lub harnessu Plugin. -4. Montowanie runnera jako `openclaw qa ` zamiast rejestrowania konkurencyjnego korzenia poleceń. +1. Zachować `qa-lab` jako właściciela współdzielonego korzenia `qa`. +2. Zaimplementować runner transportu na współdzielonym interfejsie hosta `qa-lab`. +3. Utrzymać mechanikę specyficzną dla transportu wewnątrz Plugin runnera lub harnessu Plugin. +4. Montować runner jako `openclaw qa ` zamiast rejestrować konkurencyjny korzeń poleceń. Pluginy runnerów powinny deklarować `qaRunners` w `openclaw.plugin.json` i eksportować pasującą tablicę `qaRunnerCliRegistrations` z `runtime-api.ts`. - Zachowuj lekkość `runtime-api.ts`; leniwe wykonanie CLI i runnera powinno pozostać za oddzielnymi punktami wejścia. -5. Tworzenie lub adaptację scenariuszy Markdown w `qa/scenarios/`. -6. Używanie generycznych helperów scenariuszy dla nowych scenariuszy. -7. Zachowanie istniejących aliasów zgodności, chyba że repozytorium przeprowadza zamierzoną migrację. + Utrzymuj `runtime-api.ts` lekkie; leniwe wykonywanie CLI i runnera powinno pozostać za oddzielnymi punktami wejścia. +5. Tworzyć lub dostosowywać scenariusze markdown w tematycznych katalogach `qa/scenarios/`. +6. Dla nowych scenariuszy używać generycznych helperów scenariuszy. +7. Utrzymać działanie istniejących aliasów zgodności, chyba że repozytorium przeprowadza celową migrację. Reguła decyzyjna jest ścisła: -- Jeśli zachowanie można wyrazić raz w `qa-lab`, umieść je w `qa-lab`. -- Jeśli zachowanie zależy od transportu jednego kanału, pozostaw je w tym Plugin runnera lub harnessie Plugin. -- Jeśli scenariusz potrzebuje nowej możliwości, z której może skorzystać więcej niż jeden kanał, dodaj generyczny helper zamiast gałęzi specyficznej dla kanału w `suite.ts`. -- Jeśli zachowanie ma znaczenie tylko dla jednego transportu, zachowaj scenariusz jako specyficzny dla transportu i jasno zaznacz to w kontrakcie scenariusza. +- Jeśli zachowanie da się wyrazić jednokrotnie w `qa-lab`, umieść je w `qa-lab`. +- Jeśli zachowanie zależy od jednego transportu kanału, utrzymuj je w tym Plugin runnera lub harnessie Plugin. +- Jeśli scenariusz potrzebuje nowej możliwości, z której może skorzystać więcej niż jeden kanał, dodaj helper generyczny zamiast gałęzi specyficznej dla kanału w `suite.ts`. +- Jeśli zachowanie ma sens tylko dla jednego transportu, zachowaj specyfikę transportową scenariusza i wyraź to jawnie w kontrakcie scenariusza. Preferowane nazwy generycznych helperów dla nowych scenariuszy to: @@ -246,59 +246,59 @@ dla tworzenia nowych scenariuszy. ## Pakiety testów (co uruchamia się gdzie) -Myśl o tych pakietach jako o „rosnącym realizmie” (oraz rosnącej zawodności/koszcie): +Potraktuj pakiety jako „rosnący realizm” (i rosnącą niestabilność/koszt): -### Unit / integration (domyślnie) +### Unit / integration (domyślne) - Polecenie: `pnpm test` - Konfiguracja: dziesięć sekwencyjnych shardów (`vitest.full-*.config.ts`) uruchamianych na istniejących zakresowych projektach Vitest -- Pliki: inwentarze core/unit w `src/**/*.test.ts`, `packages/**/*.test.ts`, `test/**/*.test.ts` oraz dopuszczone dozwoloną listą testy node w `ui` objęte przez `vitest.unit.config.ts` +- Pliki: inwentarze core/unit w `src/**/*.test.ts`, `packages/**/*.test.ts`, `test/**/*.test.ts` oraz dopuszczone testy node w `ui`, objęte przez `vitest.unit.config.ts` - Zakres: - - Czyste testy unit - - Testy integracyjne w procesie (uwierzytelnianie Gateway, routing, narzędzia, parsowanie, konfiguracja) - - Deterministyczne regresje dla znanych błędów + - Czyste testy jednostkowe + - Testy integracyjne w jednym procesie (autoryzacja Gateway, routing, narzędzia, parsowanie, konfiguracja) + - Deterministyczne testy regresji dla znanych błędów - Oczekiwania: - Uruchamiane w CI - Nie wymagają prawdziwych kluczy - Powinny być szybkie i stabilne - Uwaga o projektach: - - Niekierowane `pnpm test` uruchamia teraz jedenaście mniejszych konfiguracji shardów (`core-unit-src`, `core-unit-security`, `core-unit-ui`, `core-unit-support`, `core-support-boundary`, `core-contracts`, `core-bundled`, `core-runtime`, `agentic`, `auto-reply`, `extensions`) zamiast jednego ogromnego natywnego procesu root-project. Zmniejsza to szczytowe RSS na obciążonych maszynach i zapobiega zagładzaniu niezwiązanych pakietów przez pracę `auto-reply`/rozszerzeń. - - `pnpm test --watch` nadal używa natywnego grafu projektów root z `vitest.config.ts`, ponieważ pętla watch z wieloma shardami nie jest praktyczna. - - `pnpm test`, `pnpm test:watch` i `pnpm test:perf:imports` najpierw kierują jawne cele plików/katalogów przez zakresowe ścieżki, więc `pnpm test extensions/discord/src/monitor/message-handler.preflight.test.ts` nie płaci kosztu uruchomienia pełnego projektu root. - - `pnpm test:changed` rozwija zmienione ścieżki git do tych samych zakresowych ścieżek, gdy diff dotyka wyłącznie routowalnych plików źródłowych/testowych; edycje konfiguracji/ustawień nadal wracają do szerokiego ponownego uruchomienia projektu root. - - Lekkie importowo testy unit z obszarów agents, commands, plugins, helperów `auto-reply`, `plugin-sdk` i podobnych czysto użytkowych części są kierowane przez ścieżkę `unit-fast`, która pomija `test/setup-openclaw-runtime.ts`; pliki stanowe/ciężkie runtime pozostają na istniejących ścieżkach. - - Wybrane pliki źródłowe helperów `plugin-sdk` i `commands` również mapują uruchomienia w trybie changed na jawne testy sąsiednie w tych lekkich ścieżkach, dzięki czemu edycje helperów nie wymuszają ponownego uruchomienia pełnego ciężkiego pakietu dla tego katalogu. - - `auto-reply` ma teraz trzy dedykowane koszyki: pomocniki core najwyższego poziomu, testy integracyjne najwyższego poziomu `reply.*` oraz poddrzewo `src/auto-reply/reply/**`. Dzięki temu najcięższa praca harnessu odpowiedzi nie trafia do tanich testów status/chunk/token. -- Uwaga o osadzonym runnerze: - - Gdy zmieniasz wejścia wykrywania message-tool lub kontekst runtime Compaction, - zachowaj oba poziomy pokrycia. - - Dodawaj ukierunkowane regresje helperów dla czystych granic routingu/normalizacji. - - Utrzymuj również w dobrej kondycji pakiety integracyjne osadzonego runnera: + - Niezawężone `pnpm test` uruchamia teraz jedenaście mniejszych konfiguracji shardów (`core-unit-src`, `core-unit-security`, `core-unit-ui`, `core-unit-support`, `core-support-boundary`, `core-contracts`, `core-bundled`, `core-runtime`, `agentic`, `auto-reply`, `extensions`) zamiast jednego ogromnego natywnego procesu root-project. Ogranicza to szczytowe RSS na obciążonych maszynach i zapobiega sytuacji, w której prace `auto-reply`/rozszerzeń zagładzają niezwiązane pakiety. + - `pnpm test --watch` nadal używa natywnego grafu projektów root `vitest.config.ts`, ponieważ pętla watch z wieloma shardami nie jest praktyczna. + - `pnpm test`, `pnpm test:watch` i `pnpm test:perf:imports` najpierw kierują jawne cele plików/katalogów do zakresowych ścieżek, więc `pnpm test extensions/discord/src/monitor/message-handler.preflight.test.ts` unika kosztu uruchamiania całego root project. + - `pnpm test:changed` rozwija zmienione ścieżki git do tych samych zakresowych ścieżek, gdy diff dotyka wyłącznie routowalnych plików źródłowych/testowych; edycje konfiguracji/ustawień nadal wracają do szerokiego ponownego uruchomienia root-project. + - Lekkie importowo testy jednostkowe z obszarów agentów, poleceń, Plugin, helperów auto-reply, `plugin-sdk` i podobnych czysto narzędziowych miejsc są kierowane do ścieżki `unit-fast`, która pomija `test/setup-openclaw-runtime.ts`; pliki stanowe/ciężkie runtime pozostają w istniejących ścieżkach. + - Wybrane pliki źródłowe helperów `plugin-sdk` i `commands` również mapują uruchomienia w trybie changed do jawnych testów sąsiednich w tych lekkich ścieżkach, dzięki czemu zmiany helperów nie wymagają ponownego uruchamiania całego ciężkiego pakietu dla tego katalogu. + - `auto-reply` ma teraz trzy dedykowane koszyki: helpery core najwyższego poziomu, testy integracyjne najwyższego poziomu `reply.*` oraz poddrzewo `src/auto-reply/reply/**`. Dzięki temu najcięższe prace harnessu reply są odseparowane od tanich testów status/chunk/token. +- Uwaga o wbudowanym runnerze: + - Gdy zmieniasz wejścia wykrywania narzędzi wiadomości lub kontekst runtime Compaction, + utrzymuj oba poziomy pokrycia. + - Dodawaj skupione testy regresji helperów dla czystych granic routingu/normalizacji. + - Utrzymuj też zdrowy stan pakietów integracyjnych wbudowanego runnera: `src/agents/pi-embedded-runner/compact.hooks.test.ts`, `src/agents/pi-embedded-runner/run.overflow-compaction.test.ts` oraz `src/agents/pi-embedded-runner/run.overflow-compaction.loop.test.ts`. - - Te pakiety weryfikują, że zakresowe identyfikatory i zachowanie Compaction nadal przechodzą - przez rzeczywiste ścieżki `run.ts` / `compact.ts`; testy tylko helperów nie są - wystarczającym zamiennikiem dla tych ścieżek integracyjnych. + - Te pakiety weryfikują, że zakresowe identyfikatory i zachowanie Compaction nadal przepływają + przez rzeczywiste ścieżki `run.ts` / `compact.ts`; same testy helperów nie są + wystarczającym zamiennikiem tych ścieżek integracyjnych. - Uwaga o puli: - Bazowa konfiguracja Vitest domyślnie używa teraz `threads`. - - Współdzielona konfiguracja Vitest ustawia także `isolate: false` i używa nieizolowanego runnera w projektach root, konfiguracjach e2e i live. - - Główna ścieżka UI zachowuje konfigurację `jsdom` i optymalizator, ale teraz również działa na współdzielonym nieizolowanym runnerze. + - Współdzielona konfiguracja Vitest ustawia również na stałe `isolate: false` i używa nieizolowanego runnera we wszystkich root projects, konfiguracjach e2e i live. + - Główna ścieżka UI zachowuje ustawienia `jsdom` i optimizer, ale teraz także działa na współdzielonym nieizolowanym runnerze. - Każdy shard `pnpm test` dziedziczy te same domyślne ustawienia `threads` + `isolate: false` ze współdzielonej konfiguracji Vitest. - - Współdzielony launcher `scripts/run-vitest.mjs` domyślnie dodaje teraz także `--no-maglev` dla podrzędnych procesów Node Vitest, aby ograniczyć churn kompilacji V8 podczas dużych lokalnych uruchomień. Ustaw `OPENCLAW_VITEST_ENABLE_MAGLEV=1`, jeśli chcesz porównać działanie ze standardowym zachowaniem V8. + - Współdzielony launcher `scripts/run-vitest.mjs` dodaje teraz domyślnie także `--no-maglev` dla podrzędnych procesów Node Vitest, aby ograniczyć churn kompilacji V8 podczas dużych lokalnych uruchomień. Ustaw `OPENCLAW_VITEST_ENABLE_MAGLEV=1`, jeśli chcesz porównać zachowanie ze standardowym V8. - Uwaga o szybkiej lokalnej iteracji: - - `pnpm test:changed` kieruje przez zakresowe ścieżki, gdy zmienione ścieżki da się jednoznacznie odwzorować na mniejszy pakiet. - - `pnpm test:max` i `pnpm test:changed:max` zachowują to samo zachowanie routingu, tylko z wyższym limitem workerów. - - Automatyczne skalowanie lokalnych workerów jest teraz celowo bardziej zachowawcze i dodatkowo wycofuje się, gdy średnie obciążenie hosta jest już wysokie, dzięki czemu wiele równoczesnych uruchomień Vitest domyślnie wyrządza mniej szkód. - - Bazowa konfiguracja Vitest oznacza projekty/pliki konfiguracyjne jako `forceRerunTriggers`, aby ponowne uruchomienia w trybie changed pozostawały poprawne przy zmianach okablowania testów. + - `pnpm test:changed` kieruje do zakresowych ścieżek, gdy zmienione ścieżki da się czysto odwzorować na mniejszy pakiet. + - `pnpm test:max` i `pnpm test:changed:max` zachowują ten sam sposób routingu, tylko z wyższym limitem workerów. + - Automatyczne skalowanie lokalnych workerów jest teraz celowo konserwatywne i dodatkowo zmniejsza intensywność działania, gdy średnie obciążenie hosta jest już wysokie, dzięki czemu wiele równoczesnych uruchomień Vitest domyślnie powoduje mniej szkód. + - Bazowa konfiguracja Vitest oznacza pliki projektów/konfiguracji jako `forceRerunTriggers`, aby ponowne uruchomienia w trybie changed pozostawały poprawne po zmianach w okablowaniu testów. - Konfiguracja utrzymuje włączone `OPENCLAW_VITEST_FS_MODULE_CACHE` na obsługiwanych hostach; ustaw `OPENCLAW_VITEST_FS_MODULE_CACHE_PATH=/abs/path`, jeśli chcesz mieć jedną jawną lokalizację cache do bezpośredniego profilowania. - Uwaga o debugowaniu wydajności: - - `pnpm test:perf:imports` włącza raportowanie czasu importu Vitest wraz z danymi wyjściowymi podziału importów. + - `pnpm test:perf:imports` włącza raportowanie czasu importów w Vitest oraz dane wyjściowe z rozbiciem importów. - `pnpm test:perf:imports:changed` zawęża ten sam widok profilowania do plików zmienionych od `origin/main`. -- `pnpm test:perf:changed:bench -- --ref ` porównuje kierowane `test:changed` z natywną ścieżką projektu root dla tego zatwierdzonego diffu i wypisuje czas ścienny oraz maksymalne RSS w macOS. +- `pnpm test:perf:changed:bench -- --ref ` porównuje routowane `test:changed` ze ścieżką natywnego root-project dla tego zatwierdzonego diffu i wypisuje czas ścienny oraz maksymalne RSS na macOS. - `pnpm test:perf:changed:bench -- --worktree` wykonuje benchmark bieżącego brudnego drzewa, kierując listę zmienionych plików przez `scripts/test-projects.mjs` i główną konfigurację Vitest. - - `pnpm test:perf:profile:main` zapisuje profil CPU głównego wątku dla narzutu uruchamiania i transformacji Vitest/Vite. - - `pnpm test:perf:profile:runner` zapisuje profile CPU+heap runnera dla pakietu unit przy wyłączonej równoległości plików. + - `pnpm test:perf:profile:main` zapisuje profil CPU głównego wątku dla kosztów uruchamiania i transformacji Vitest/Vite. + - `pnpm test:perf:profile:runner` zapisuje profile CPU+heap runnera dla pakietu unit z wyłączoną równoległością plików. ### E2E (smoke Gateway) @@ -306,36 +306,36 @@ Myśl o tych pakietach jako o „rosnącym realizmie” (oraz rosnącej zawodno - Konfiguracja: `vitest.e2e.config.ts` - Pliki: `src/**/*.e2e.test.ts`, `test/**/*.e2e.test.ts` - Domyślne ustawienia runtime: - - Używa Vitest `threads` z `isolate: false`, zgodnie z resztą repozytorium. - - Używa adaptacyjnej liczby workerów (CI: do 2, lokalnie: domyślnie 1). - - Domyślnie działa w trybie silent, aby ograniczyć narzut I/O konsoli. + - Używa `threads` Vitest z `isolate: false`, zgodnie z resztą repozytorium. + - Używa adaptacyjnych workerów (CI: do 2, lokalnie: domyślnie 1). + - Domyślnie działa w trybie cichym, aby ograniczyć narzut I/O konsoli. - Przydatne nadpisania: - - `OPENCLAW_E2E_WORKERS=`, aby wymusić liczbę workerów (limit 16). - - `OPENCLAW_E2E_VERBOSE=1`, aby ponownie włączyć szczegółowe dane wyjściowe konsoli. + - `OPENCLAW_E2E_WORKERS=` aby wymusić liczbę workerów (maksymalnie 16). + - `OPENCLAW_E2E_VERBOSE=1` aby ponownie włączyć szczegółowe dane wyjściowe konsoli. - Zakres: - - Zachowanie end-to-end wielu instancji Gateway - - Powierzchnie WebSocket/HTTP, parowanie Node i cięższa komunikacja sieciowa + - Zachowanie end-to-end Gateway z wieloma instancjami + - Powierzchnie WebSocket/HTTP, parowanie Node i cięższe scenariusze sieciowe - Oczekiwania: - - Uruchamiane w CI (gdy są włączone w pipeline) + - Uruchamiane w CI (gdy włączone w pipeline) - Nie wymagają prawdziwych kluczy - - Mają więcej ruchomych części niż testy unit (mogą być wolniejsze) + - Mają więcej ruchomych części niż testy jednostkowe (mogą być wolniejsze) ### E2E: smoke backendu OpenShell - Polecenie: `pnpm test:e2e:openshell` - Plik: `test/openshell-sandbox.e2e.test.ts` - Zakres: - - Uruchamia izolowany Gateway OpenShell na hoście przez Docker + - Uruchamia odizolowany Gateway OpenShell na hoście przez Docker - Tworzy sandbox z tymczasowego lokalnego Dockerfile - - Ćwiczy backend OpenShell OpenClaw przez rzeczywiste `sandbox ssh-config` + wykonanie SSH - - Weryfikuje zdalne kanoniczne zachowanie systemu plików przez most fs sandboxa + - Testuje backend OpenShell w OpenClaw przez rzeczywiste `sandbox ssh-config` + wykonanie SSH + - Weryfikuje zachowanie zdalno-kanonicznego systemu plików przez most fs sandboxa - Oczekiwania: - - Wyłącznie opt-in; nie jest częścią domyślnego uruchomienia `pnpm test:e2e` + - Tylko opt-in; nie jest częścią domyślnego uruchomienia `pnpm test:e2e` - Wymaga lokalnego CLI `openshell` oraz działającego demona Docker - - Używa izolowanych `HOME` / `XDG_CONFIG_HOME`, a następnie niszczy testowy Gateway i sandbox + - Używa odizolowanych `HOME` / `XDG_CONFIG_HOME`, a następnie niszczy testowy Gateway i sandbox - Przydatne nadpisania: - - `OPENCLAW_E2E_OPENSHELL=1`, aby włączyć test przy ręcznym uruchamianiu szerszego pakietu e2e - - `OPENCLAW_E2E_OPENSHELL_COMMAND=/path/to/openshell`, aby wskazać niestandardowy binarny plik CLI lub skrypt wrappera + - `OPENCLAW_E2E_OPENSHELL=1` aby włączyć test przy ręcznym uruchamianiu szerszego pakietu e2e + - `OPENCLAW_E2E_OPENSHELL_COMMAND=/path/to/openshell` aby wskazać niestandardowe binarium CLI lub skrypt wrappera ### Live (rzeczywiści dostawcy + rzeczywiste modele) @@ -345,114 +345,114 @@ Myśl o tych pakietach jako o „rosnącym realizmie” (oraz rosnącej zawodno - Domyślnie: **włączone** przez `pnpm test:live` (ustawia `OPENCLAW_LIVE_TEST=1`) - Zakres: - „Czy ten dostawca/model rzeczywiście działa _dzisiaj_ z prawdziwymi poświadczeniami?” - - Wychwytywanie zmian formatu dostawcy, niuansów wywoływania narzędzi, problemów z uwierzytelnianiem i zachowania limitów szybkości + - Wykrywanie zmian formatu dostawcy, osobliwości wywoływania narzędzi, problemów z autoryzacją i zachowania limitów szybkości - Oczekiwania: - - Celowo niestabilne w CI (rzeczywiste sieci, rzeczywiste polityki dostawców, limity, awarie) + - Z założenia niestabilne w CI (prawdziwe sieci, prawdziwe polityki dostawców, limity, awarie) - Kosztują pieniądze / zużywają limity szybkości - - Lepiej uruchamiać zawężone podzbiory niż „wszystko” + - Lepiej uruchamiać zawężone podzbiory zamiast „wszystkiego” - Uruchomienia live pobierają `~/.profile`, aby uzupełnić brakujące klucze API. -- Domyślnie uruchomienia live nadal izolują `HOME` i kopiują materiał konfiguracyjny/uwierzytelniający do tymczasowego testowego katalogu domowego, aby fixture unit nie mogły modyfikować Twojego prawdziwego `~/.openclaw`. -- Ustaw `OPENCLAW_LIVE_USE_REAL_HOME=1` tylko wtedy, gdy celowo chcesz, aby testy live używały Twojego rzeczywistego katalogu domowego. -- `pnpm test:live` domyślnie działa teraz ciszej: zachowuje dane wyjściowe postępu `[live] ...`, ale ukrywa dodatkowy komunikat `~/.profile` i wycisza logi bootstrapu Gateway/komunikaty Bonjour. Ustaw `OPENCLAW_LIVE_TEST_QUIET=0`, jeśli chcesz ponownie zobaczyć pełne logi startowe. -- Rotacja kluczy API (specyficzna dla dostawcy): ustaw `*_API_KEYS` w formacie rozdzielanym przecinkami/średnikami lub `*_API_KEY_1`, `*_API_KEY_2` (na przykład `OPENAI_API_KEYS`, `ANTHROPIC_API_KEYS`, `GEMINI_API_KEYS`) albo nadpisanie per-live przez `OPENCLAW_LIVE_*_KEY`; testy ponawiają próbę przy odpowiedziach z limitem szybkości. +- Domyślnie uruchomienia live nadal izolują `HOME` i kopiują materiały config/auth do tymczasowego testowego katalogu domowego, tak aby fixture unit nie mogły modyfikować prawdziwego `~/.openclaw`. +- Ustaw `OPENCLAW_LIVE_USE_REAL_HOME=1` tylko wtedy, gdy celowo chcesz, aby testy live używały twojego rzeczywistego katalogu domowego. +- `pnpm test:live` domyślnie działa teraz w cichszym trybie: zachowuje dane wyjściowe postępu `[live] ...`, ale ukrywa dodatkowy komunikat o `~/.profile` i wycisza logi bootstrapu Gateway oraz hałas Bonjour. Ustaw `OPENCLAW_LIVE_TEST_QUIET=0`, jeśli chcesz ponownie zobaczyć pełne logi uruchamiania. +- Rotacja kluczy API (specyficzna dla dostawcy): ustaw `*_API_KEYS` w formacie rozdzielanym przecinkami/średnikami lub `*_API_KEY_1`, `*_API_KEY_2` (na przykład `OPENAI_API_KEYS`, `ANTHROPIC_API_KEYS`, `GEMINI_API_KEYS`) albo nadpisanie per-live przez `OPENCLAW_LIVE_*_KEY`; testy ponawiają próby przy odpowiedziach z limitem szybkości. - Dane wyjściowe postępu/Heartbeat: - - Pakiety live emitują teraz linie postępu do stderr, więc długie wywołania dostawców pozostają widocznie aktywne nawet wtedy, gdy przechwytywanie konsoli Vitest jest ciche. - - `vitest.live.config.ts` wyłącza przechwytywanie konsoli Vitest, aby linie postępu dostawców/Gateway były strumieniowane natychmiast podczas uruchomień live. - - Dostosuj Heartbeat bezpośrednich modeli za pomocą `OPENCLAW_LIVE_HEARTBEAT_MS`. - - Dostosuj Heartbeat Gateway/sond za pomocą `OPENCLAW_LIVE_GATEWAY_HEARTBEAT_MS`. + - Pakiety live emitują teraz linie postępu do stderr, dzięki czemu długie wywołania dostawców są widocznie aktywne nawet wtedy, gdy przechwytywanie konsoli Vitest jest ciche. + - `vitest.live.config.ts` wyłącza przechwytywanie konsoli Vitest, aby linie postępu dostawcy/Gateway były strumieniowane natychmiast podczas uruchomień live. + - Dostosuj Heartbeat bezpośredniego modelu przez `OPENCLAW_LIVE_HEARTBEAT_MS`. + - Dostosuj Heartbeat Gateway/sond przez `OPENCLAW_LIVE_GATEWAY_HEARTBEAT_MS`. ## Który pakiet powinienem uruchomić? Użyj tej tabeli decyzyjnej: -- Edycja logiki/testów: uruchom `pnpm test` (oraz `pnpm test:coverage`, jeśli zmieniłeś dużo) -- Modyfikacje sieci Gateway / protokołu WS / parowania: dodaj `pnpm test:e2e` -- Debugowanie „mój bot nie działa” / awarii specyficznych dla dostawcy / wywoływania narzędzi: uruchom zawężone `pnpm test:live` +- Edytujesz logikę/testy: uruchom `pnpm test` (oraz `pnpm test:coverage`, jeśli zmieniło się dużo) +- Dotykasz sieci Gateway / protokołu WS / parowania: dodaj `pnpm test:e2e` +- Debugujesz „mój bot nie działa” / błędy specyficzne dla dostawcy / wywoływanie narzędzi: uruchom zawężone `pnpm test:live` ## Live: przegląd możliwości Node Android - Test: `src/gateway/android-node.capabilities.live.test.ts` - Skrypt: `pnpm android:test:integration` -- Cel: wywołać **każde polecenie aktualnie ogłaszane** przez połączony Node Android i sprawdzić zachowanie kontraktu polecenia. +- Cel: wywołać **każde obecnie reklamowane polecenie** przez podłączony Node Android i sprawdzić zachowanie kontraktu poleceń. - Zakres: - Wstępnie przygotowana/ręczna konfiguracja (pakiet nie instaluje, nie uruchamia ani nie paruje aplikacji). - Walidacja `node.invoke` Gateway polecenie po poleceniu dla wybranego Node Android. -- Wymagana wstępna konfiguracja: +- Wymagana wcześniejsza konfiguracja: - Aplikacja Android jest już połączona i sparowana z Gateway. - Aplikacja pozostaje na pierwszym planie. - - Uprawnienia/zgody na przechwytywanie są przyznane dla możliwości, które mają przejść. + - Uprawnienia/zgody na przechwytywanie są nadane dla możliwości, które mają przejść. - Opcjonalne nadpisania celu: - `OPENCLAW_ANDROID_NODE_ID` lub `OPENCLAW_ANDROID_NODE_NAME`. - `OPENCLAW_ANDROID_GATEWAY_URL` / `OPENCLAW_ANDROID_GATEWAY_TOKEN` / `OPENCLAW_ANDROID_GATEWAY_PASSWORD`. -- Pełne szczegóły konfiguracji Android: [Aplikacja Android](/pl/platforms/android) +- Pełne szczegóły konfiguracji Androida: [Android App](/pl/platforms/android) ## Live: smoke modeli (klucze profili) Testy live są podzielone na dwie warstwy, aby można było izolować awarie: -- „Direct model” mówi nam, czy dostawca/model w ogóle potrafi odpowiedzieć przy danym kluczu. -- „Gateway smoke” mówi nam, czy pełny pipeline gateway+agent działa dla tego modelu (sesje, historia, narzędzia, polityka sandboxa itd.). +- „Direct model” mówi nam, czy dostawca/model potrafi w ogóle odpowiedzieć przy danym kluczu. +- „Gateway smoke” mówi nam, czy działa pełny potok gateway+agent dla tego modelu (sesje, historia, narzędzia, polityka sandboxa itd.). -### Warstwa 1: bezpośrednie completion modelu (bez Gateway) +### Warstwa 1: bezpośrednie uzupełnianie modelu (bez Gateway) - Test: `src/agents/models.profiles.live.test.ts` - Cel: - Wyliczyć wykryte modele - - Użyć `getApiKeyForModel` do wyboru modeli, dla których masz poświadczenia - - Wykonać małe completion dla każdego modelu (oraz ukierunkowane regresje tam, gdzie to potrzebne) + - Użyć `getApiKeyForModel`, aby wybrać modele, do których masz poświadczenia + - Uruchomić małe uzupełnienie dla każdego modelu (oraz ukierunkowane regresje tam, gdzie to potrzebne) - Jak włączyć: - - `pnpm test:live` (lub `OPENCLAW_LIVE_TEST=1`, jeśli uruchamiasz Vitest bezpośrednio) -- Ustaw `OPENCLAW_LIVE_MODELS=modern` (lub `all`, alias dla modern), aby rzeczywiście uruchomić ten pakiet; w przeciwnym razie zostanie pominięty, aby `pnpm test:live` pozostawało skupione na smoke Gateway + - `pnpm test:live` (lub `OPENCLAW_LIVE_TEST=1`, jeśli wywołujesz Vitest bezpośrednio) +- Ustaw `OPENCLAW_LIVE_MODELS=modern` (lub `all`, alias dla `modern`), aby rzeczywiście uruchomić ten pakiet; w przeciwnym razie zostanie pominięty, aby `pnpm test:live` pozostawało skupione na smoke testach Gateway - Jak wybierać modele: - - `OPENCLAW_LIVE_MODELS=modern`, aby uruchomić nowoczesną allowlist (`Opus/Sonnet 4.6+`, `GPT-5.x + Codex`, `Gemini 3`, `GLM 4.7`, `MiniMax M2.7`, `Grok 4`) - - `OPENCLAW_LIVE_MODELS=all` jest aliasem dla nowoczesnej allowlist - - albo `OPENCLAW_LIVE_MODELS="openai/gpt-5.4,anthropic/claude-opus-4-6,..."` (allowlist rozdzielana przecinkami) - - Przeglądy modern/all domyślnie używają dobranego limitu o wysokim sygnale; ustaw `OPENCLAW_LIVE_MAX_MODELS=0` dla wyczerpującego przeglądu modern albo liczbę dodatnią dla mniejszego limitu. + - `OPENCLAW_LIVE_MODELS=modern`, aby uruchomić nowoczesną allowlistę (Opus/Sonnet 4.6+, GPT-5.x + Codex, Gemini 3, GLM 4.7, MiniMax M2.7, Grok 4) + - `OPENCLAW_LIVE_MODELS=all` jest aliasem dla nowoczesnej allowlisty + - albo `OPENCLAW_LIVE_MODELS="openai/gpt-5.4,anthropic/claude-opus-4-6,..."` (allowlista rozdzielana przecinkami) + - Przebiegi modern/all domyślnie używają dobranego limitu o wysokim sygnale; ustaw `OPENCLAW_LIVE_MAX_MODELS=0` dla pełnego przebiegu modern albo dodatnią liczbę dla mniejszego limitu. - Jak wybierać dostawców: - - `OPENCLAW_LIVE_PROVIDERS="google,google-antigravity,google-gemini-cli"` (allowlist rozdzielana przecinkami) + - `OPENCLAW_LIVE_PROVIDERS="google,google-antigravity,google-gemini-cli"` (allowlista rozdzielana przecinkami) - Skąd pochodzą klucze: - - Domyślnie: magazyn profili i zapasowe wartości env - - Ustaw `OPENCLAW_LIVE_REQUIRE_PROFILE_KEYS=1`, aby wymusić wyłącznie **magazyn profili** + - Domyślnie: magazyn profili i awaryjne wartości z env + - Ustaw `OPENCLAW_LIVE_REQUIRE_PROFILE_KEYS=1`, aby wymusić użycie wyłącznie **magazynu profili** - Dlaczego to istnieje: - - Oddziela „API dostawcy jest uszkodzone / klucz jest nieprawidłowy” od „pipeline agenta Gateway jest uszkodzony” - - Zawiera małe, izolowane regresje (przykład: odtwarzanie reasoning replay + przepływy tool-call dla OpenAI Responses/Codex Responses) + - Oddziela „API dostawcy jest zepsute / klucz jest nieprawidłowy” od „potok agenta Gateway jest zepsuty” + - Zawiera małe, odizolowane regresje (przykład: przepływy OpenAI Responses/Codex Responses reasoning replay + tool-call) -### Warstwa 2: smoke Gateway + agenta dev (to, co faktycznie robi „@openclaw”) +### Warstwa 2: Gateway + smoke agenta dev (to, co naprawdę robi „@openclaw”) - Test: `src/gateway/gateway-models.profiles.live.test.ts` - Cel: - Uruchomić Gateway w procesie - - Utworzyć/załatać sesję `agent:dev:*` (nadpisanie modelu dla każdego uruchomienia) - - Iterować po modelach-z-kluczami i sprawdzać: + - Utworzyć/zmodyfikować sesję `agent:dev:*` (nadpisanie modelu dla każdego uruchomienia) + - Iterować po modelach z kluczami i sprawdzać: - „znaczącą” odpowiedź (bez narzędzi) - - działanie rzeczywistego wywołania narzędzia (sonda odczytu) + - że rzeczywiste wywołanie narzędzia działa (sonda odczytu) - opcjonalne dodatkowe sondy narzędzi (sonda exec+read) - - dalsze działanie ścieżek regresji OpenAI (tylko tool-call → follow-up) -- Szczegóły sond (aby dało się szybko wyjaśniać błędy): - - sonda `read`: test zapisuje plik nonce w obszarze roboczym i prosi agenta, aby go `read` oraz zwrócił nonce. - - sonda `exec+read`: test prosi agenta, aby zapisał nonce do pliku tymczasowego przez `exec`, a następnie odczytał go z powrotem przez `read`. - - sonda obrazu: test dołącza wygenerowany PNG (kot + zrandomizowany kod) i oczekuje, że model zwróci `cat `. - - Referencja implementacji: `src/gateway/gateway-models.profiles.live.test.ts` oraz `src/gateway/live-image-probe.ts`. + - że ścieżki regresji OpenAI (tylko tool-call → dalszy ciąg) nadal działają +- Szczegóły sond (aby można było szybko wyjaśniać błędy): + - sonda `read`: test zapisuje plik nonce w obszarze roboczym i prosi agenta o jego `read` oraz zwrócenie nonce. + - sonda `exec+read`: test prosi agenta o zapisanie nonce przez `exec` do pliku tymczasowego, a następnie odczytanie go przez `read`. + - sonda obrazu: test dołącza wygenerowany PNG (kot + losowy kod) i oczekuje, że model zwróci `cat `. + - Odniesienie do implementacji: `src/gateway/gateway-models.profiles.live.test.ts` i `src/gateway/live-image-probe.ts`. - Jak włączyć: - - `pnpm test:live` (lub `OPENCLAW_LIVE_TEST=1`, jeśli uruchamiasz Vitest bezpośrednio) + - `pnpm test:live` (lub `OPENCLAW_LIVE_TEST=1`, jeśli wywołujesz Vitest bezpośrednio) - Jak wybierać modele: - - Domyślnie: nowoczesna allowlist (Opus/Sonnet 4.6+, GPT-5.x + Codex, Gemini 3, GLM 4.7, MiniMax M2.7, Grok 4) - - `OPENCLAW_LIVE_GATEWAY_MODELS=all` jest aliasem dla nowoczesnej allowlist - - Albo ustaw `OPENCLAW_LIVE_GATEWAY_MODELS="provider/model"` (lub listę rozdzielaną przecinkami), aby zawęzić wybór - - Przeglądy gateway modern/all domyślnie używają dobranego limitu o wysokim sygnale; ustaw `OPENCLAW_LIVE_GATEWAY_MAX_MODELS=0` dla wyczerpującego przeglądu modern albo liczbę dodatnią dla mniejszego limitu. -- Jak wybierać dostawców (unikaj „całego OpenRouter”): - - `OPENCLAW_LIVE_GATEWAY_PROVIDERS="google,google-antigravity,google-gemini-cli,openai,anthropic,zai,minimax"` (allowlist rozdzielana przecinkami) -- Sondy narzędzi i obrazu są w tym teście live zawsze włączone: + - Domyślnie: nowoczesna allowlista (Opus/Sonnet 4.6+, GPT-5.x + Codex, Gemini 3, GLM 4.7, MiniMax M2.7, Grok 4) + - `OPENCLAW_LIVE_GATEWAY_MODELS=all` jest aliasem dla nowoczesnej allowlisty + - Albo ustaw `OPENCLAW_LIVE_GATEWAY_MODELS="provider/model"` (lub listę rozdzielaną przecinkami), aby zawęzić + - Przebiegi gateway modern/all domyślnie używają dobranego limitu o wysokim sygnale; ustaw `OPENCLAW_LIVE_GATEWAY_MAX_MODELS=0` dla pełnego przebiegu modern albo dodatnią liczbę dla mniejszego limitu. +- Jak wybierać dostawców (unikaj „wszystkiego z OpenRouter”): + - `OPENCLAW_LIVE_GATEWAY_PROVIDERS="google,google-antigravity,google-gemini-cli,openai,anthropic,zai,minimax"` (allowlista rozdzielana przecinkami) +- Sondy narzędzi i obrazu są zawsze włączone w tym teście live: - sonda `read` + sonda `exec+read` (obciążenie narzędzi) - - sonda obrazu uruchamia się, gdy model deklaruje obsługę wejścia obrazu - - Przepływ (wysoki poziom): - - Test generuje mały PNG z „CAT” + losowym kodem (`src/gateway/live-image-probe.ts`) + - sonda obrazu uruchamia się, gdy model deklaruje obsługę wejścia obrazowego + - Przepływ (na wysokim poziomie): + - Test generuje mały PNG z napisem „CAT” + losowy kod (`src/gateway/live-image-probe.ts`) - Wysyła go przez `agent` `attachments: [{ mimeType: "image/png", content: "" }]` - Gateway parsuje załączniki do `images[]` (`src/gateway/server-methods/agent.ts` + `src/gateway/chat-attachments.ts`) - - Osadzony agent przekazuje do modelu multimodalną wiadomość użytkownika - - Asercja: odpowiedź zawiera `cat` + kod (tolerancja OCR: dopuszczalne są drobne pomyłki) + - Wbudowany agent przekazuje multimodalną wiadomość użytkownika do modelu + - Asercja: odpowiedź zawiera `cat` + kod (tolerancja OCR: drobne błędy są dopuszczalne) -Wskazówka: aby zobaczyć, co możesz testować na swojej maszynie (oraz dokładne identyfikatory `provider/model`), uruchom: +Wskazówka: aby zobaczyć, co możesz testować na swojej maszynie (i dokładne identyfikatory `provider/model`), uruchom: ```bash openclaw models list @@ -462,22 +462,22 @@ openclaw models list --json ## Live: smoke backendu CLI (Claude, Codex, Gemini lub inne lokalne CLI) - Test: `src/gateway/gateway-cli-backend.live.test.ts` -- Cel: zweryfikować pipeline Gateway + agenta przy użyciu lokalnego backendu CLI, bez naruszania domyślnej konfiguracji. +- Cel: zweryfikować potok Gateway + agent przy użyciu lokalnego backendu CLI, bez naruszania domyślnej konfiguracji. - Domyślne ustawienia smoke specyficzne dla backendu znajdują się w definicji `cli-backend.ts` należącej do odpowiedniego rozszerzenia. -- Włączenie: - - `pnpm test:live` (lub `OPENCLAW_LIVE_TEST=1`, jeśli uruchamiasz Vitest bezpośrednio) +- Włączanie: + - `pnpm test:live` (lub `OPENCLAW_LIVE_TEST=1`, jeśli wywołujesz Vitest bezpośrednio) - `OPENCLAW_LIVE_CLI_BACKEND=1` - Domyślne ustawienia: - Domyślny dostawca/model: `claude-cli/claude-sonnet-4-6` - - Zachowanie komendy/argumentów/obrazu pochodzi z metadanych Plugin właściciela backendu CLI. + - Zachowanie command/args/image pochodzi z metadanych Plugin właściciela backendu CLI. - Nadpisania (opcjonalne): - `OPENCLAW_LIVE_CLI_BACKEND_MODEL="codex-cli/gpt-5.4"` - `OPENCLAW_LIVE_CLI_BACKEND_COMMAND="/full/path/to/codex"` - `OPENCLAW_LIVE_CLI_BACKEND_ARGS='["exec","--json","--color","never","--sandbox","read-only","--skip-git-repo-check"]'` - `OPENCLAW_LIVE_CLI_BACKEND_IMAGE_PROBE=1`, aby wysłać rzeczywisty załącznik obrazu (ścieżki są wstrzykiwane do promptu). - - `OPENCLAW_LIVE_CLI_BACKEND_IMAGE_ARG="--image"`, aby przekazywać ścieżki plików obrazu jako argumenty CLI zamiast przez wstrzykiwanie do promptu. - - `OPENCLAW_LIVE_CLI_BACKEND_IMAGE_MODE="repeat"` (lub `"list"`), aby sterować sposobem przekazywania argumentów obrazu, gdy ustawione jest `IMAGE_ARG`. - - `OPENCLAW_LIVE_CLI_BACKEND_RESUME_PROBE=1`, aby wysłać drugą turę i zweryfikować przepływ wznowienia. + - `OPENCLAW_LIVE_CLI_BACKEND_IMAGE_ARG="--image"`, aby przekazywać ścieżki plików obrazów jako argumenty CLI zamiast przez wstrzyknięcie do promptu. + - `OPENCLAW_LIVE_CLI_BACKEND_IMAGE_MODE="repeat"` (lub `"list"`), aby sterować sposobem przekazywania argumentów obrazów, gdy ustawione jest `IMAGE_ARG`. + - `OPENCLAW_LIVE_CLI_BACKEND_RESUME_PROBE=1`, aby wysłać drugą turę i zweryfikować przepływ wznawiania. - `OPENCLAW_LIVE_CLI_BACKEND_MODEL_SWITCH_PROBE=0`, aby wyłączyć domyślną sondę ciągłości tej samej sesji Claude Sonnet -> Opus (ustaw `1`, aby wymusić jej włączenie, gdy wybrany model obsługuje cel przełączenia). Przykład: @@ -506,27 +506,27 @@ pnpm test:docker:live-cli-backend:gemini Uwagi: - Runner Docker znajduje się w `scripts/test-live-cli-backend-docker.sh`. -- Uruchamia smoke live backendu CLI wewnątrz obrazu Docker repozytorium jako nieuprzywilejowany użytkownik `node`. -- Rozpoznaje metadane smoke CLI od rozszerzenia właściciela, a następnie instaluje pasujący pakiet Linux CLI (`@anthropic-ai/claude-code`, `@openai/codex` lub `@google/gemini-cli`) do buforowanego zapisywalnego prefiksu pod `OPENCLAW_DOCKER_CLI_TOOLS_DIR` (domyślnie: `~/.cache/openclaw/docker-cli-tools`). -- `pnpm test:docker:live-cli-backend:claude-subscription` wymaga przenośnego OAuth subskrypcji Claude Code przez `~/.claude/.credentials.json` z `claudeAiOauth.subscriptionType` albo `CLAUDE_CODE_OAUTH_TOKEN` z `claude setup-token`. Najpierw potwierdza bezpośrednie `claude -p` w Dockerze, a następnie uruchamia dwie tury Gateway backendu CLI bez zachowywania zmiennych środowiskowych klucza API Anthropic. Ta ścieżka subskrypcji domyślnie wyłącza sondy MCP/tool i obrazu Claude, ponieważ Claude obecnie rozlicza użycie aplikacji firm trzecich przez billing dodatkowego użycia zamiast zwykłych limitów planu subskrypcyjnego. -- Smoke live backendu CLI ćwiczy teraz ten sam przepływ end-to-end dla Claude, Codex i Gemini: tura tekstowa, tura klasyfikacji obrazu, a następnie wywołanie narzędzia MCP `cron` zweryfikowane przez CLI Gateway. -- Domyślny smoke Claude dodatkowo łata sesję z Sonnet do Opus i weryfikuje, że wznowiona sesja nadal pamięta wcześniejszą notatkę. +- Uruchamia smoke live backendu CLI wewnątrz obrazu Docker repozytorium jako użytkownik `node` bez uprawnień roota. +- Rozwiązuje metadane smoke CLI z rozszerzenia właściciela, a następnie instaluje pasujący pakiet Linux CLI (`@anthropic-ai/claude-code`, `@openai/codex` lub `@google/gemini-cli`) do buforowanego zapisywalnego prefiksu pod `OPENCLAW_DOCKER_CLI_TOOLS_DIR` (domyślnie: `~/.cache/openclaw/docker-cli-tools`). +- `pnpm test:docker:live-cli-backend:claude-subscription` wymaga przenośnego OAuth subskrypcji Claude Code przez `~/.claude/.credentials.json` z `claudeAiOauth.subscriptionType` albo `CLAUDE_CODE_OAUTH_TOKEN` z `claude setup-token`. Najpierw potwierdza bezpośrednie `claude -p` w Dockerze, a następnie uruchamia dwie tury Gateway CLI-backend bez zachowywania zmiennych środowiskowych z kluczem API Anthropic. Ta ścieżka subskrypcji domyślnie wyłącza sondy Claude MCP/tool i image, ponieważ Claude obecnie rozlicza użycie aplikacji zewnętrznych przez billing extra-usage zamiast zwykłych limitów planu subskrypcji. +- Smoke live backendu CLI testuje teraz ten sam przepływ end-to-end dla Claude, Codex i Gemini: tura tekstowa, tura klasyfikacji obrazu, a następnie wywołanie narzędzia MCP `cron` zweryfikowane przez CLI Gateway. +- Domyślny smoke Claude dodatkowo modyfikuje sesję z Sonnet do Opus i weryfikuje, że wznowiona sesja nadal pamięta wcześniejszą notatkę. ## Live: smoke powiązania ACP (`/acp spawn ... --bind here`) - Test: `src/gateway/gateway-acp-bind.live.test.ts` -- Cel: zweryfikować rzeczywisty przepływ conversation-bind ACP z żywym agentem ACP: +- Cel: zweryfikować rzeczywisty przepływ powiązania rozmowy ACP z aktywnym agentem ACP: - wysłać `/acp spawn --bind here` - - powiązać syntetyczną konwersację kanału wiadomości w miejscu - - wysłać zwykły follow-up w tej samej konwersacji - - zweryfikować, że follow-up trafia do transkryptu powiązanej sesji ACP -- Włączenie: + - powiązać syntetyczną rozmowę kanału wiadomości w miejscu + - wysłać zwykły dalszy ciąg w tej samej rozmowie + - zweryfikować, że dalszy ciąg trafia do transkryptu powiązanej sesji ACP +- Włączanie: - `pnpm test:live src/gateway/gateway-acp-bind.live.test.ts` - `OPENCLAW_LIVE_ACP_BIND=1` - Domyślne ustawienia: - Agenci ACP w Dockerze: `claude,codex,gemini` - Agent ACP dla bezpośredniego `pnpm test:live ...`: `claude` - - Syntetyczny kanał: kontekst konwersacji w stylu Slack DM + - Syntetyczny kanał: kontekst rozmowy w stylu prywatnej wiadomości Slack - Backend ACP: `acpx` - Nadpisania: - `OPENCLAW_LIVE_ACP_BIND_AGENT=claude` @@ -535,8 +535,8 @@ Uwagi: - `OPENCLAW_LIVE_ACP_BIND_AGENTS=claude,codex,gemini` - `OPENCLAW_LIVE_ACP_BIND_AGENT_COMMAND='npx -y @agentclientprotocol/claude-agent-acp@'` - Uwagi: - - Ta ścieżka używa powierzchni `chat.send` Gateway z polami synthetic originating-route dostępnymi tylko dla administratora, aby testy mogły dołączać kontekst kanału wiadomości bez udawania zewnętrznego dostarczenia. - - Gdy `OPENCLAW_LIVE_ACP_BIND_AGENT_COMMAND` nie jest ustawione, test używa wbudowanego rejestru agentów Plugin `acpx` dla wybranego agenta harness ACP. + - Ta ścieżka używa powierzchni gateway `chat.send` z admin-only syntetycznymi polami originating-route, aby testy mogły dołączyć kontekst kanału wiadomości bez udawania zewnętrznego dostarczenia. + - Gdy `OPENCLAW_LIVE_ACP_BIND_AGENT_COMMAND` nie jest ustawione, test używa wbudowanego rejestru agentów Plugin `acpx` dla wybranego agenta harnessu ACP. Przykład: @@ -563,33 +563,33 @@ pnpm test:docker:live-acp-bind:gemini Uwagi dotyczące Dockera: - Runner Docker znajduje się w `scripts/test-live-acp-bind-docker.sh`. -- Domyślnie uruchamia smoke ACP bind kolejno dla wszystkich obsługiwanych żywych agentów CLI: `claude`, `codex`, a następnie `gemini`. +- Domyślnie uruchamia smoke powiązania ACP sekwencyjnie dla wszystkich obsługiwanych agentów live CLI: `claude`, `codex`, a następnie `gemini`. - Użyj `OPENCLAW_LIVE_ACP_BIND_AGENTS=claude`, `OPENCLAW_LIVE_ACP_BIND_AGENTS=codex` lub `OPENCLAW_LIVE_ACP_BIND_AGENTS=gemini`, aby zawęzić macierz. -- Pobiera `~/.profile`, przygotowuje pasujący materiał uwierzytelniający CLI do kontenera, instaluje `acpx` do zapisywalnego prefiksu npm, a następnie instaluje żądane żywe CLI (`@anthropic-ai/claude-code`, `@openai/codex` lub `@google/gemini-cli`), jeśli go brakuje. -- Wewnątrz Dockera runner ustawia `OPENCLAW_LIVE_ACP_BIND_ACPX_COMMAND=$HOME/.npm-global/bin/acpx`, aby acpx zachowywał zmienne środowiskowe dostawcy z pobranego profilu dostępne dla podrzędnego CLI harnessu. +- Pobiera `~/.profile`, przygotowuje pasujące materiały autoryzacyjne CLI do kontenera, instaluje `acpx` do zapisywalnego prefiksu npm, a następnie instaluje żądane live CLI (`@anthropic-ai/claude-code`, `@openai/codex` lub `@google/gemini-cli`), jeśli go brakuje. +- Wewnątrz Dockera runner ustawia `OPENCLAW_LIVE_ACP_BIND_ACPX_COMMAND=$HOME/.npm-global/bin/acpx`, aby `acpx` zachowywał zmienne środowiskowe dostawcy z pobranego profilu dostępne dla podrzędnego CLI harnessu. -## Live: smoke harnessu serwera aplikacji Codex +## Live: smoke harnessu Codex app-server -- Cel: zweryfikować należący do Plugin harness Codex przez zwykłą metodę - `agent` Gateway: +- Cel: zweryfikować należący do Plugin harness Codex przez normalną metodę + gateway `agent`: - załadować dołączony Plugin `codex` - wybrać `OPENCLAW_AGENT_RUNTIME=codex` - - wysłać pierwszą turę Gateway agent do `codex/gpt-5.4` - - wysłać drugą turę do tej samej sesji OpenClaw i zweryfikować, że wątek - serwera aplikacji może zostać wznowiony - - uruchomić `/codex status` oraz `/codex models` przez tę samą ścieżkę - poleceń Gateway + - wysłać pierwszą turę agenta gateway do `codex/gpt-5.4` + - wysłać drugą turę do tej samej sesji OpenClaw i zweryfikować, że wątek app-server + można wznowić + - uruchomić `/codex status` i `/codex models` przez tę samą ścieżkę + poleceń gateway - Test: `src/gateway/gateway-codex-harness.live.test.ts` -- Włączenie: `OPENCLAW_LIVE_CODEX_HARNESS=1` -- Model domyślny: `codex/gpt-5.4` +- Włączanie: `OPENCLAW_LIVE_CODEX_HARNESS=1` +- Domyślny model: `codex/gpt-5.4` - Opcjonalna sonda obrazu: `OPENCLAW_LIVE_CODEX_HARNESS_IMAGE_PROBE=1` - Opcjonalna sonda MCP/tool: `OPENCLAW_LIVE_CODEX_HARNESS_MCP_PROBE=1` -- Smoke ustawia `OPENCLAW_AGENT_HARNESS_FALLBACK=none`, aby uszkodzony harness Codex - nie mógł przejść testu przez cichy fallback do PI. -- Uwierzytelnianie: `OPENAI_API_KEY` z powłoki/profilu oraz opcjonalnie skopiowane +- Ten smoke ustawia `OPENCLAW_AGENT_HARNESS_FALLBACK=none`, aby uszkodzony harness Codex + nie mógł przejść testu przez ciche przełączenie awaryjne na PI. +- Autoryzacja: `OPENAI_API_KEY` z powłoki/profilu oraz opcjonalnie skopiowane `~/.codex/auth.json` i `~/.codex/config.toml` -Recepta lokalna: +Lokalna recepta: ```bash source ~/.profile @@ -611,19 +611,20 @@ Uwagi dotyczące Dockera: - Runner Docker znajduje się w `scripts/test-live-codex-harness-docker.sh`. - Pobiera zamontowany `~/.profile`, przekazuje `OPENAI_API_KEY`, kopiuje pliki - uwierzytelniające CLI Codex, jeśli są obecne, instaluje `@openai/codex` do zapisywalnego zamontowanego prefiksu npm, - przygotowuje drzewo źródłowe, a następnie uruchamia tylko test live harnessu Codex. + autoryzacyjne CLI Codex, gdy są obecne, instaluje `@openai/codex` do zapisywalnego zamontowanego prefiksu npm, + przygotowuje drzewo źródeł, a następnie uruchamia tylko test live harnessu Codex. - Docker domyślnie włącza sondy obrazu oraz MCP/tool. Ustaw - `OPENCLAW_LIVE_CODEX_HARNESS_IMAGE_PROBE=0` lub - `OPENCLAW_LIVE_CODEX_HARNESS_MCP_PROBE=0`, gdy potrzebujesz węższego uruchomienia debugowego. -- Docker eksportuje także `OPENCLAW_AGENT_HARNESS_FALLBACK=none`, zgodnie z konfiguracją testu live, - tak aby fallback `openai-codex/*` lub PI nie mógł ukryć regresji harnessu Codex. + `OPENCLAW_LIVE_CODEX_HARNESS_IMAGE_PROBE=0` albo + `OPENCLAW_LIVE_CODEX_HARNESS_MCP_PROBE=0`, gdy potrzebujesz węższego uruchomienia debugującego. +- Docker eksportuje również `OPENCLAW_AGENT_HARNESS_FALLBACK=none`, zgodnie z konfiguracją + testu live, tak aby fallback `openai-codex/*` lub PI nie mógł ukryć regresji + harnessu Codex. ### Zalecane recepty live -Wąskie, jawne allowlist są najszybsze i najmniej zawodne: +Wąskie, jawne allowlisty są najszybsze i najmniej podatne na niestabilność: -- Pojedynczy model, bezpośrednio (bez Gateway): +- Pojedynczy model, direct (bez Gateway): - `OPENCLAW_LIVE_MODELS="openai/gpt-5.4" pnpm test:live src/agents/models.profiles.live.test.ts` - Pojedynczy model, smoke Gateway: @@ -632,7 +633,7 @@ Wąskie, jawne allowlist są najszybsze i najmniej zawodne: - Wywoływanie narzędzi u kilku dostawców: - `OPENCLAW_LIVE_GATEWAY_MODELS="openai/gpt-5.4,anthropic/claude-opus-4-6,google/gemini-3-flash-preview,zai/glm-4.7,minimax/MiniMax-M2.7" pnpm test:live src/gateway/gateway-models.profiles.live.test.ts` -- Ukierunkowanie na Google (klucz API Gemini + Antigravity): +- Skupienie na Google (klucz API Gemini + Antigravity): - Gemini (klucz API): `OPENCLAW_LIVE_GATEWAY_MODELS="google/gemini-3-flash-preview" pnpm test:live src/gateway/gateway-models.profiles.live.test.ts` - Antigravity (OAuth): `OPENCLAW_LIVE_GATEWAY_MODELS="google-antigravity/claude-opus-4-6-thinking,google-antigravity/gemini-3-pro-high" pnpm test:live src/gateway/gateway-models.profiles.live.test.ts` @@ -640,23 +641,23 @@ Uwagi: - `google/...` używa API Gemini (klucz API). - `google-antigravity/...` używa mostu OAuth Antigravity (endpoint agenta w stylu Cloud Code Assist). -- `google-gemini-cli/...` używa lokalnego CLI Gemini na Twojej maszynie (osobne uwierzytelnianie + niuanse narzędzi). +- `google-gemini-cli/...` używa lokalnego Gemini CLI na twojej maszynie (osobna autoryzacja + osobliwości narzędzi). - Gemini API vs Gemini CLI: - - API: OpenClaw wywołuje hostowane API Gemini Google przez HTTP (uwierzytelnianie kluczem API / profilem); to właśnie większość użytkowników ma na myśli, mówiąc „Gemini”. - - CLI: OpenClaw wywołuje lokalny binarny plik `gemini`; ma własne uwierzytelnianie i może zachowywać się inaczej (streaming/obsługa narzędzi/rozjazd wersji). + - API: OpenClaw wywołuje hostowane API Gemini Google przez HTTP (autoryzacja kluczem API / profilem); to właśnie większość użytkowników ma na myśli, mówiąc „Gemini”. + - CLI: OpenClaw wywołuje lokalne binarium `gemini`; ma własną autoryzację i może zachowywać się inaczej (streaming/obsługa narzędzi/rozbieżność wersji). ## Live: macierz modeli (co obejmujemy) -Nie ma stałej „listy modeli CI” (live jest opt-in), ale to są **zalecane** modele do regularnego pokrywania na maszynie deweloperskiej z kluczami. +Nie ma stałej „listy modeli CI” (live jest opt-in), ale to są **zalecane** modele do regularnego obejmowania na maszynie deweloperskiej z kluczami. ### Nowoczesny zestaw smoke (wywoływanie narzędzi + obraz) -To jest uruchomienie „typowych modeli”, które powinno pozostawać sprawne: +To jest uruchomienie „typowych modeli”, które oczekujemy, że będzie nadal działać: - OpenAI (bez Codex): `openai/gpt-5.4` (opcjonalnie: `openai/gpt-5.4-mini`) - OpenAI Codex: `openai-codex/gpt-5.4` - Anthropic: `anthropic/claude-opus-4-6` (lub `anthropic/claude-sonnet-4-6`) -- Google (Gemini API): `google/gemini-3.1-pro-preview` i `google/gemini-3-flash-preview` (unikaj starszych modeli Gemini 2.x) +- Google (API Gemini): `google/gemini-3.1-pro-preview` i `google/gemini-3-flash-preview` (unikaj starszych modeli Gemini 2.x) - Google (Antigravity): `google-antigravity/claude-opus-4-6-thinking` i `google-antigravity/gemini-3-flash` - Z.AI (GLM): `zai/glm-4.7` - MiniMax: `minimax/MiniMax-M2.7` @@ -664,7 +665,7 @@ To jest uruchomienie „typowych modeli”, które powinno pozostawać sprawne: Uruchom smoke Gateway z narzędziami + obrazem: `OPENCLAW_LIVE_GATEWAY_MODELS="openai/gpt-5.4,openai-codex/gpt-5.4,anthropic/claude-opus-4-6,google/gemini-3.1-pro-preview,google/gemini-3-flash-preview,google-antigravity/claude-opus-4-6-thinking,google-antigravity/gemini-3-flash,zai/glm-4.7,minimax/MiniMax-M2.7" pnpm test:live src/gateway/gateway-models.profiles.live.test.ts` -### Baseline: wywoływanie narzędzi (Read + opcjonalnie Exec) +### Bazowy poziom: wywoływanie narzędzi (Read + opcjonalnie Exec) Wybierz co najmniej jeden model z każdej rodziny dostawców: @@ -674,76 +675,76 @@ Wybierz co najmniej jeden model z każdej rodziny dostawców: - Z.AI (GLM): `zai/glm-4.7` - MiniMax: `minimax/MiniMax-M2.7` -Opcjonalne dodatkowe pokrycie (dobrze mieć): +Opcjonalne dodatkowe pokrycie (warto mieć): - xAI: `xai/grok-4` (lub najnowszy dostępny) -- Mistral: `mistral/`… (wybierz jeden model z obsługą „tools”, który masz włączony) +- Mistral: `mistral/`… (wybierz jeden model z obsługą `tools`, który masz włączony) - Cerebras: `cerebras/`… (jeśli masz dostęp) - LM Studio: `lmstudio/`… (lokalnie; wywoływanie narzędzi zależy od trybu API) ### Vision: wysyłanie obrazu (załącznik → wiadomość multimodalna) -Uwzględnij co najmniej jeden model obsługujący obrazy w `OPENCLAW_LIVE_GATEWAY_MODELS` (warianty Claude/Gemini/OpenAI z obsługą vision itd.), aby przećwiczyć sondę obrazu. +Uwzględnij co najmniej jeden model z obsługą obrazów w `OPENCLAW_LIVE_GATEWAY_MODELS` (Claude/Gemini/warianty OpenAI z obsługą vision itd.), aby przetestować sondę obrazu. -### Agregatory / alternatywne Gateway +### Agregatory / alternatywne bramki -Jeśli masz włączone klucze, obsługujemy też testowanie przez: +Jeśli masz włączone klucze, obsługujemy także testowanie przez: -- OpenRouter: `openrouter/...` (setki modeli; użyj `openclaw models scan`, aby znaleźć kandydatów z obsługą tool+image) -- OpenCode: `opencode/...` dla Zen oraz `opencode-go/...` dla Go (uwierzytelnianie przez `OPENCODE_API_KEY` / `OPENCODE_ZEN_API_KEY`) +- OpenRouter: `openrouter/...` (setki modeli; użyj `openclaw models scan`, aby znaleźć kandydatów z obsługą narzędzi i obrazów) +- OpenCode: `opencode/...` dla Zen oraz `opencode-go/...` dla Go (autoryzacja przez `OPENCODE_API_KEY` / `OPENCODE_ZEN_API_KEY`) -Więcej dostawców, których możesz uwzględnić w macierzy live (jeśli masz poświadczenia/konfigurację): +Więcej dostawców, których możesz użyć w macierzy live (jeśli masz poświadczenia/konfigurację): - Wbudowani: `openai`, `openai-codex`, `anthropic`, `google`, `google-vertex`, `google-antigravity`, `google-gemini-cli`, `zai`, `openrouter`, `opencode`, `opencode-go`, `xai`, `groq`, `cerebras`, `mistral`, `github-copilot` -- Przez `models.providers` (niestandardowe endpointy): `minimax` (cloud/API) oraz dowolny proxy zgodny z OpenAI/Anthropic (LM Studio, vLLM, LiteLLM itd.) +- Przez `models.providers` (niestandardowe endpointy): `minimax` (chmura/API) oraz każdy proxy zgodny z OpenAI/Anthropic (LM Studio, vLLM, LiteLLM itd.) -Wskazówka: nie próbuj na sztywno wpisywać „wszystkich modeli” w dokumentacji. Autorytatywna lista to wszystko, co zwraca `discoverModels(...)` na Twojej maszynie + wszystkie dostępne klucze. +Wskazówka: nie próbuj na sztywno wpisywać „wszystkich modeli” w dokumentacji. Źródłem prawdy jest lista zwracana przez `discoverModels(...)` na twojej maszynie + dostępne klucze. ## Poświadczenia (nigdy nie commituj) -Testy live wykrywają poświadczenia tak samo jak CLI. Praktyczne konsekwencje: +Testy live wykrywają poświadczenia tak samo jak CLI. W praktyce oznacza to: -- Jeśli CLI działa, testy live powinny znaleźć te same klucze. -- Jeśli test live zgłasza „no creds”, debuguj to tak samo, jak debugowałbyś `openclaw models list` / wybór modelu. +- Jeśli działa CLI, testy live powinny znaleźć te same klucze. +- Jeśli test live mówi „brak poświadczeń”, debuguj to tak samo, jak debugowałbyś `openclaw models list` / wybór modelu. -- Profile uwierzytelniania per-agent: `~/.openclaw/agents//agent/auth-profiles.json` (to właśnie oznaczają „profile keys” w testach live) +- Profile autoryzacji per agent: `~/.openclaw/agents//agent/auth-profiles.json` (to właśnie oznaczają „profile keys” w testach live) - Konfiguracja: `~/.openclaw/openclaw.json` (lub `OPENCLAW_CONFIG_PATH`) - Starszy katalog stanu: `~/.openclaw/credentials/` (kopiowany do przygotowanego katalogu domowego live, jeśli istnieje, ale nie jest głównym magazynem kluczy profili) -- Lokalne uruchomienia live domyślnie kopiują aktywną konfigurację, pliki `auth-profiles.json` per-agent, starsze `credentials/` oraz obsługiwane zewnętrzne katalogi uwierzytelniania CLI do tymczasowego testowego katalogu domowego; przygotowane katalogi domowe live pomijają `workspace/` i `sandboxes/`, a nadpisania ścieżek `agents.*.workspace` / `agentDir` są usuwane, aby sondy nie działały na rzeczywistym obszarze roboczym hosta. +- Lokalne uruchomienia live domyślnie kopiują aktywną konfigurację, pliki `auth-profiles.json` per agent, starszy katalog `credentials/` oraz obsługiwane zewnętrzne katalogi autoryzacji CLI do tymczasowego testowego katalogu domowego; przygotowane katalogi domowe live pomijają `workspace/` i `sandboxes/`, a nadpisania ścieżek `agents.*.workspace` / `agentDir` są usuwane, aby sondy nie trafiały do twojego rzeczywistego obszaru roboczego hosta. -Jeśli chcesz polegać na kluczach env (np. eksportowanych w `~/.profile`), uruchamiaj testy lokalne po `source ~/.profile` albo użyj poniższych runnerów Docker (mogą montować `~/.profile` do kontenera). +Jeśli chcesz polegać na kluczach z env (na przykład wyeksportowanych w `~/.profile`), uruchamiaj testy lokalne po `source ~/.profile` albo użyj uruchomień Docker poniżej (mogą zamontować `~/.profile` do kontenera). -## Deepgram live (transkrypcja audio) +## Live Deepgram (transkrypcja audio) - Test: `src/media-understanding/providers/deepgram/audio.live.test.ts` -- Włączenie: `DEEPGRAM_API_KEY=... DEEPGRAM_LIVE_TEST=1 pnpm test:live src/media-understanding/providers/deepgram/audio.live.test.ts` +- Włączanie: `DEEPGRAM_API_KEY=... DEEPGRAM_LIVE_TEST=1 pnpm test:live src/media-understanding/providers/deepgram/audio.live.test.ts` -## BytePlus coding plan live +## Live BytePlus coding plan - Test: `src/agents/byteplus.live.test.ts` -- Włączenie: `BYTEPLUS_API_KEY=... BYTEPLUS_LIVE_TEST=1 pnpm test:live src/agents/byteplus.live.test.ts` +- Włączanie: `BYTEPLUS_API_KEY=... BYTEPLUS_LIVE_TEST=1 pnpm test:live src/agents/byteplus.live.test.ts` - Opcjonalne nadpisanie modelu: `BYTEPLUS_CODING_MODEL=ark-code-latest` -## ComfyUI workflow media live +## Live mediów dla workflow ComfyUI - Test: `extensions/comfy/comfy.live.test.ts` -- Włączenie: `OPENCLAW_LIVE_TEST=1 COMFY_LIVE_TEST=1 pnpm test:live -- extensions/comfy/comfy.live.test.ts` +- Włączanie: `OPENCLAW_LIVE_TEST=1 COMFY_LIVE_TEST=1 pnpm test:live -- extensions/comfy/comfy.live.test.ts` - Zakres: - - Ćwiczy dołączone ścieżki obrazu, wideo i `music_generate` comfy - - Pomija każdą możliwość, chyba że skonfigurowane jest `models.providers.comfy.` + - Testuje dołączone ścieżki obrazu, wideo i `music_generate` comfy + - Pomija każdą możliwość, jeśli `models.providers.comfy.` nie jest skonfigurowane - Przydatne po zmianach w przesyłaniu workflow comfy, odpytywaniu, pobieraniu lub rejestracji Plugin -## Image generation live +## Live generowania obrazów - Test: `src/image-generation/runtime.live.test.ts` - Polecenie: `pnpm test:live src/image-generation/runtime.live.test.ts` - Harness: `pnpm test:live:media image` - Zakres: - - Wylicza każdy zarejestrowany Plugin dostawcy image-generation - - Ładuje brakujące zmienne środowiskowe dostawców z Twojej powłoki logowania (`~/.profile`) przed uruchomieniem sond - - Domyślnie używa kluczy API live/env przed zapisanymi profilami uwierzytelniania, dzięki czemu nieaktualne testowe klucze w `auth-profiles.json` nie maskują rzeczywistych poświadczeń powłoki - - Pomija dostawców bez użytecznego uwierzytelniania/profilu/modelu - - Uruchamia standardowe warianty image-generation przez współdzieloną możliwość runtime: + - Wylicza każdy zarejestrowany Plugin dostawcy generowania obrazów + - Przed sondowaniem ładuje brakujące zmienne środowiskowe dostawców z powłoki logowania (`~/.profile`) + - Domyślnie używa kluczy API live/env przed zapisanymi profilami autoryzacji, dzięki czemu nieaktualne testowe klucze w `auth-profiles.json` nie maskują rzeczywistych poświadczeń powłoki + - Pomija dostawców bez użytecznej autoryzacji/profilu/modelu + - Uruchamia standardowe warianty generowania obrazów przez współdzieloną możliwość runtime: - `google:flash-generate` - `google:pro-generate` - `google:pro-edit` @@ -751,204 +752,208 @@ Jeśli chcesz polegać na kluczach env (np. eksportowanych w `~/.profile`), uruc - Obecnie objęci dołączeni dostawcy: - `openai` - `google` -- Opcjonalne zawężanie: +- Opcjonalne zawężenie: - `OPENCLAW_LIVE_IMAGE_GENERATION_PROVIDERS="openai,google"` - `OPENCLAW_LIVE_IMAGE_GENERATION_MODELS="openai/gpt-image-1,google/gemini-3.1-flash-image-preview"` - `OPENCLAW_LIVE_IMAGE_GENERATION_CASES="google:flash-generate,google:pro-edit"` -- Opcjonalne zachowanie uwierzytelniania: - - `OPENCLAW_LIVE_REQUIRE_PROFILE_KEYS=1`, aby wymusić uwierzytelnianie z magazynu profili i ignorować nadpisania tylko z env +- Opcjonalne zachowanie autoryzacji: + - `OPENCLAW_LIVE_REQUIRE_PROFILE_KEYS=1`, aby wymusić autoryzację z magazynu profili i ignorować nadpisania tylko z env -## Music generation live +## Live generowania muzyki - Test: `extensions/music-generation-providers.live.test.ts` -- Włączenie: `OPENCLAW_LIVE_TEST=1 pnpm test:live -- extensions/music-generation-providers.live.test.ts` +- Włączanie: `OPENCLAW_LIVE_TEST=1 pnpm test:live -- extensions/music-generation-providers.live.test.ts` - Harness: `pnpm test:live:media music` - Zakres: - - Ćwiczy współdzieloną dołączoną ścieżkę dostawcy music-generation + - Testuje współdzieloną dołączoną ścieżkę dostawcy generowania muzyki - Obecnie obejmuje Google i MiniMax - - Ładuje zmienne środowiskowe dostawców z Twojej powłoki logowania (`~/.profile`) przed uruchomieniem sond - - Domyślnie używa kluczy API live/env przed zapisanymi profilami uwierzytelniania, dzięki czemu nieaktualne testowe klucze w `auth-profiles.json` nie maskują rzeczywistych poświadczeń powłoki - - Pomija dostawców bez użytecznego uwierzytelniania/profilu/modelu + - Przed sondowaniem ładuje zmienne środowiskowe dostawców z powłoki logowania (`~/.profile`) + - Domyślnie używa kluczy API live/env przed zapisanymi profilami autoryzacji, dzięki czemu nieaktualne testowe klucze w `auth-profiles.json` nie maskują rzeczywistych poświadczeń powłoki + - Pomija dostawców bez użytecznej autoryzacji/profilu/modelu - Uruchamia oba zadeklarowane tryby runtime, gdy są dostępne: - `generate` z wejściem opartym wyłącznie na prompcie - `edit`, gdy dostawca deklaruje `capabilities.edit.enabled` - Obecne pokrycie współdzielonej ścieżki: - `google`: `generate`, `edit` - `minimax`: `generate` - - `comfy`: osobny plik live Comfy, nie ten współdzielony przegląd -- Opcjonalne zawężanie: + - `comfy`: osobny plik live Comfy, nie ten współdzielony przebieg +- Opcjonalne zawężenie: - `OPENCLAW_LIVE_MUSIC_GENERATION_PROVIDERS="google,minimax"` - `OPENCLAW_LIVE_MUSIC_GENERATION_MODELS="google/lyria-3-clip-preview,minimax/music-2.5+"` -- Opcjonalne zachowanie uwierzytelniania: - - `OPENCLAW_LIVE_REQUIRE_PROFILE_KEYS=1`, aby wymusić uwierzytelnianie z magazynu profili i ignorować nadpisania tylko z env +- Opcjonalne zachowanie autoryzacji: + - `OPENCLAW_LIVE_REQUIRE_PROFILE_KEYS=1`, aby wymusić autoryzację z magazynu profili i ignorować nadpisania tylko z env -## Video generation live +## Live generowania wideo - Test: `extensions/video-generation-providers.live.test.ts` -- Włączenie: `OPENCLAW_LIVE_TEST=1 pnpm test:live -- extensions/video-generation-providers.live.test.ts` +- Włączanie: `OPENCLAW_LIVE_TEST=1 pnpm test:live -- extensions/video-generation-providers.live.test.ts` - Harness: `pnpm test:live:media video` - Zakres: - - Ćwiczy współdzieloną dołączoną ścieżkę dostawcy video-generation - - Domyślnie używa bezpiecznej dla wydań ścieżki smoke: dostawcy inni niż FAL, jedno żądanie text-to-video na dostawcę, jednosekundowy prompt lobster oraz limit operacji per-dostawca z `OPENCLAW_LIVE_VIDEO_GENERATION_TIMEOUT_MS` (domyślnie `180000`) - - Domyślnie pomija FAL, ponieważ opóźnienie kolejki po stronie dostawcy może dominować czas wydania; przekaż `--video-providers fal` lub `OPENCLAW_LIVE_VIDEO_GENERATION_PROVIDERS="fal"`, aby uruchomić go jawnie - - Ładuje zmienne środowiskowe dostawców z Twojej powłoki logowania (`~/.profile`) przed uruchomieniem sond - - Domyślnie używa kluczy API live/env przed zapisanymi profilami uwierzytelniania, dzięki czemu nieaktualne testowe klucze w `auth-profiles.json` nie maskują rzeczywistych poświadczeń powłoki - - Pomija dostawców bez użytecznego uwierzytelniania/profilu/modelu + - Testuje współdzieloną dołączoną ścieżkę dostawcy generowania wideo + - Domyślnie używa bezpiecznej dla wydań ścieżki smoke: dostawcy inni niż FAL, jedno żądanie text-to-video na dostawcę, jednosekundowy prompt z lobster oraz limit czasu operacji na dostawcę z `OPENCLAW_LIVE_VIDEO_GENERATION_TIMEOUT_MS` (domyślnie `180000`) + - Domyślnie pomija FAL, ponieważ opóźnienia kolejki po stronie dostawcy mogą zdominować czas wydania; przekaż `--video-providers fal` lub `OPENCLAW_LIVE_VIDEO_GENERATION_PROVIDERS="fal"`, aby uruchomić go jawnie + - Przed sondowaniem ładuje zmienne środowiskowe dostawców z twojej powłoki logowania (`~/.profile`) + - Domyślnie używa kluczy API live/env przed zapisanymi profilami autoryzacji, dzięki czemu nieaktualne testowe klucze w `auth-profiles.json` nie maskują rzeczywistych poświadczeń powłoki + - Pomija dostawców bez użytecznej autoryzacji/profilu/modelu - Domyślnie uruchamia tylko `generate` - Ustaw `OPENCLAW_LIVE_VIDEO_GENERATION_FULL_MODES=1`, aby uruchamiać także zadeklarowane tryby transformacji, gdy są dostępne: - - `imageToVideo`, gdy dostawca deklaruje `capabilities.imageToVideo.enabled` i wybrany dostawca/model akceptuje lokalne wejście obrazu oparte na buforze we współdzielonym przeglądzie - - `videoToVideo`, gdy dostawca deklaruje `capabilities.videoToVideo.enabled` i wybrany dostawca/model akceptuje lokalne wejście wideo oparte na buforze we współdzielonym przeglądzie - - Obecni zadeklarowani, ale pomijani dostawcy `imageToVideo` we współdzielonym przeglądzie: - - `vydra`, ponieważ dołączony `veo3` obsługuje tylko tekst, a dołączony `kling` wymaga zdalnego URL obrazu - - Pokrycie Vydra specyficzne dla dostawcy: + - `imageToVideo`, gdy dostawca deklaruje `capabilities.imageToVideo.enabled` i wybrany dostawca/model akceptuje lokalne wejście obrazu oparte na buforze we współdzielonym przebiegu + - `videoToVideo`, gdy dostawca deklaruje `capabilities.videoToVideo.enabled` i wybrany dostawca/model akceptuje lokalne wejście wideo oparte na buforze we współdzielonym przebiegu + - Obecnie zadeklarowani, ale pomijani dostawcy `imageToVideo` we współdzielonym przebiegu: + - `vydra`, ponieważ dołączony `veo3` jest tylko tekstowy, a dołączony `kling` wymaga zdalnego URL obrazu + - Pokrycie specyficzne dla dostawcy Vydra: - `OPENCLAW_LIVE_TEST=1 OPENCLAW_LIVE_VYDRA_VIDEO=1 pnpm test:live -- extensions/vydra/vydra.live.test.ts` - - ten plik uruchamia ścieżkę `veo3` text-to-video oraz ścieżkę `kling`, która domyślnie używa fixture zdalnego URL obrazu + - ten plik uruchamia `veo3` text-to-video oraz ścieżkę `kling`, która domyślnie używa fixture ze zdalnym URL obrazu - Obecne pokrycie live `videoToVideo`: - tylko `runway`, gdy wybrany model to `runway/gen4_aleph` - - Obecni zadeklarowani, ale pomijani dostawcy `videoToVideo` we współdzielonym przeglądzie: - - `alibaba`, `qwen`, `xai`, ponieważ te ścieżki obecnie wymagają zdalnych referencyjnych URL `http(s)` / MP4 - - `google`, ponieważ obecna współdzielona ścieżka Gemini/Veo używa lokalnego wejścia opartego na buforze i ta ścieżka nie jest akceptowana we współdzielonym przeglądzie - - `openai`, ponieważ obecna współdzielona ścieżka nie gwarantuje dostępu specyficznego dla organizacji do video inpaint/remix -- Opcjonalne zawężanie: + - Obecnie zadeklarowani, ale pomijani dostawcy `videoToVideo` we współdzielonym przebiegu: + - `alibaba`, `qwen`, `xai`, ponieważ te ścieżki obecnie wymagają zdalnych referencyjnych URL-i `http(s)` / MP4 + - `google`, ponieważ obecna współdzielona ścieżka Gemini/Veo używa lokalnego wejścia opartego na buforze, a ta ścieżka nie jest akceptowana we współdzielonym przebiegu + - `openai`, ponieważ obecna współdzielona ścieżka nie gwarantuje dostępu do funkcji org-specyficznych video inpaint/remix +- Opcjonalne zawężenie: - `OPENCLAW_LIVE_VIDEO_GENERATION_PROVIDERS="google,openai,runway"` - `OPENCLAW_LIVE_VIDEO_GENERATION_MODELS="google/veo-3.1-fast-generate-preview,openai/sora-2,runway/gen4_aleph"` - - `OPENCLAW_LIVE_VIDEO_GENERATION_SKIP_PROVIDERS=""`, aby uwzględnić każdego dostawcę w domyślnym przeglądzie, w tym FAL - - `OPENCLAW_LIVE_VIDEO_GENERATION_TIMEOUT_MS=60000`, aby zmniejszyć limit operacji każdego dostawcy dla agresywnego uruchomienia smoke -- Opcjonalne zachowanie uwierzytelniania: - - `OPENCLAW_LIVE_REQUIRE_PROFILE_KEYS=1`, aby wymusić uwierzytelnianie z magazynu profili i ignorować nadpisania tylko z env + - `OPENCLAW_LIVE_VIDEO_GENERATION_SKIP_PROVIDERS=""`, aby uwzględnić każdego dostawcę w domyślnym przebiegu, w tym FAL + - `OPENCLAW_LIVE_VIDEO_GENERATION_TIMEOUT_MS=60000`, aby zmniejszyć limit operacji dla każdego dostawcy w agresywnym przebiegu smoke +- Opcjonalne zachowanie autoryzacji: + - `OPENCLAW_LIVE_REQUIRE_PROFILE_KEYS=1`, aby wymusić autoryzację z magazynu profili i ignorować nadpisania tylko z env -## Harness media live +## Harness live mediów - Polecenie: `pnpm test:live:media` - Cel: - - Uruchamia współdzielone pakiety live image, music i video przez jeden natywny dla repozytorium punkt wejścia + - Uruchamia współdzielone pakiety live dla obrazów, muzyki i wideo przez jeden natywny dla repozytorium punkt wejścia - Automatycznie ładuje brakujące zmienne środowiskowe dostawców z `~/.profile` - - Domyślnie automatycznie zawęża każdy pakiet do dostawców, którzy aktualnie mają użyteczne uwierzytelnianie - - Ponownie używa `scripts/test-live.mjs`, dzięki czemu zachowanie Heartbeat i trybu quiet pozostaje spójne + - Domyślnie automatycznie zawęża każdy pakiet do dostawców, którzy aktualnie mają użyteczną autoryzację + - Ponownie wykorzystuje `scripts/test-live.mjs`, dzięki czemu zachowanie Heartbeat i trybu cichego pozostaje spójne - Przykłady: - `pnpm test:live:media` - `pnpm test:live:media image video --providers openai,google,minimax` - `pnpm test:live:media video --video-providers openai,runway --all-providers` - `pnpm test:live:media music --quiet` -## Uruchomienia Docker (opcjonalne kontrole „działa w Linuxie”) +## Uruchomienia Docker (opcjonalne kontrole „działa w Linux”) Te uruchomienia Docker dzielą się na dwa koszyki: -- Uruchomienia live-model: `test:docker:live-models` oraz `test:docker:live-gateway` uruchamiają tylko odpowiadający im plik live z kluczami profili wewnątrz obrazu Docker repozytorium (`src/agents/models.profiles.live.test.ts` i `src/gateway/gateway-models.profiles.live.test.ts`), montując lokalny katalog konfiguracji i obszar roboczy (oraz pobierając `~/.profile`, jeśli jest zamontowany). Odpowiadające im lokalne punkty wejścia to `test:live:models-profiles` oraz `test:live:gateway-profiles`. -- Uruchomienia Docker live domyślnie używają mniejszego limitu smoke, aby pełny przegląd Docker pozostawał praktyczny: +- Uruchomienia live modeli: `test:docker:live-models` i `test:docker:live-gateway` uruchamiają tylko pasujący plik live z kluczami profili wewnątrz obrazu Docker repozytorium (`src/agents/models.profiles.live.test.ts` i `src/gateway/gateway-models.profiles.live.test.ts`), montując lokalny katalog config i obszar roboczy (oraz pobierając `~/.profile`, jeśli jest zamontowany). Odpowiadające lokalne punkty wejścia to `test:live:models-profiles` i `test:live:gateway-profiles`. +- Uruchomienia Docker live domyślnie używają mniejszego limitu smoke, aby pełny przebieg Docker pozostawał praktyczny: `test:docker:live-models` domyślnie ustawia `OPENCLAW_LIVE_MAX_MODELS=12`, a `test:docker:live-gateway` domyślnie ustawia `OPENCLAW_LIVE_GATEWAY_SMOKE=1`, `OPENCLAW_LIVE_GATEWAY_MAX_MODELS=8`, `OPENCLAW_LIVE_GATEWAY_STEP_TIMEOUT_MS=45000` oraz - `OPENCLAW_LIVE_GATEWAY_MODEL_TIMEOUT_MS=90000`. Nadpisz te zmienne env, gdy - celowo chcesz uruchomić większy, wyczerpujący skan. -- `test:docker:all` buduje obraz live Docker raz przez `test:docker:live-build`, a następnie ponownie używa go dla dwóch ścieżek Docker live. -- Uruchomienia smoke kontenerów: `test:docker:openwebui`, `test:docker:onboard`, `test:docker:gateway-network`, `test:docker:mcp-channels` oraz `test:docker:plugins` uruchamiają jeden lub więcej rzeczywistych kontenerów i weryfikują ścieżki integracji wyższego poziomu. + `OPENCLAW_LIVE_GATEWAY_MODEL_TIMEOUT_MS=90000`. Nadpisz te zmienne środowiskowe, gdy + jawnie chcesz większego, wyczerpującego skanowania. +- `test:docker:all` buduje obraz live Docker raz przez `test:docker:live-build`, a następnie używa go ponownie dla dwóch ścieżek Docker live. +- Uruchomienia smoke kontenerów: `test:docker:openwebui`, `test:docker:onboard`, `test:docker:gateway-network`, `test:docker:mcp-channels` i `test:docker:plugins` uruchamiają jeden lub więcej rzeczywistych kontenerów i weryfikują ścieżki integracyjne wyższego poziomu. -Uruchomienia Docker live-model również bind-mountują tylko potrzebne katalogi domowe uwierzytelniania CLI (lub wszystkie obsługiwane, gdy uruchomienie nie jest zawężone), a następnie kopiują je do katalogu domowego kontenera przed uruchomieniem, aby zewnętrzne OAuth CLI mogło odświeżać tokeny bez modyfikowania magazynu uwierzytelniania hosta: +Uruchomienia Docker live modeli również montują tylko potrzebne katalogi domowe autoryzacji CLI (lub wszystkie obsługiwane, gdy uruchomienie nie jest zawężone), a następnie kopiują je do katalogu domowego kontenera przed uruchomieniem, aby OAuth zewnętrznego CLI mógł odświeżać tokeny bez modyfikowania magazynu autoryzacji hosta: -- Modele bezpośrednie: `pnpm test:docker:live-models` (skrypt: `scripts/test-live-models-docker.sh`) +- Modele direct: `pnpm test:docker:live-models` (skrypt: `scripts/test-live-models-docker.sh`) - Smoke powiązania ACP: `pnpm test:docker:live-acp-bind` (skrypt: `scripts/test-live-acp-bind-docker.sh`) - Smoke backendu CLI: `pnpm test:docker:live-cli-backend` (skrypt: `scripts/test-live-cli-backend-docker.sh`) -- Smoke harnessu serwera aplikacji Codex: `pnpm test:docker:live-codex-harness` (skrypt: `scripts/test-live-codex-harness-docker.sh`) +- Smoke harnessu Codex app-server: `pnpm test:docker:live-codex-harness` (skrypt: `scripts/test-live-codex-harness-docker.sh`) - Gateway + agent dev: `pnpm test:docker:live-gateway` (skrypt: `scripts/test-live-gateway-models-docker.sh`) -- Smoke Open WebUI live: `pnpm test:docker:openwebui` (skrypt: `scripts/e2e/openwebui-docker.sh`) -- Kreator onboardingu (TTY, pełny scaffolding): `pnpm test:docker:onboard` (skrypt: `scripts/e2e/onboard-docker.sh`) -- Sieć Gateway (dwa kontenery, uwierzytelnianie WS + health): `pnpm test:docker:gateway-network` (skrypt: `scripts/e2e/gateway-network-docker.sh`) -- Most kanałów MCP (zasiany Gateway + most stdio + smoke surowej ramki powiadomień Claude): `pnpm test:docker:mcp-channels` (skrypt: `scripts/e2e/mcp-channels-docker.sh`) -- Plugins (smoke instalacji + alias `/plugin` + semantyka restartu pakietu Claude): `pnpm test:docker:plugins` (skrypt: `scripts/e2e/plugins-docker.sh`) +- Smoke live Open WebUI: `pnpm test:docker:openwebui` (skrypt: `scripts/e2e/openwebui-docker.sh`) +- Kreator onboardingu (TTY, pełne scaffolding): `pnpm test:docker:onboard` (skrypt: `scripts/e2e/onboard-docker.sh`) +- Sieć Gateway (dwa kontenery, autoryzacja WS + health): `pnpm test:docker:gateway-network` (skrypt: `scripts/e2e/gateway-network-docker.sh`) +- Most kanałów MCP (zasiany Gateway + most stdio + surowy smoke ramki powiadomień Claude): `pnpm test:docker:mcp-channels` (skrypt: `scripts/e2e/mcp-channels-docker.sh`) +- Pluginy (smoke instalacji + alias `/plugin` + semantyka restartu pakietu Claude): `pnpm test:docker:plugins` (skrypt: `scripts/e2e/plugins-docker.sh`) -Uruchomienia Docker live-model również bind-mountują bieżące checkout repozytorium w trybie tylko do odczytu i przygotowują je do tymczasowego katalogu roboczego wewnątrz kontenera. Dzięki temu obraz runtime pozostaje lekki, a jednocześnie Vitest działa na dokładnie Twoim lokalnym źródle/konfiguracji. -Krok przygotowania pomija duże lokalne cache i wyniki budowania aplikacji, takie jak -`.pnpm-store`, `.worktrees`, `__openclaw_vitest__` oraz lokalne dla aplikacji katalogi `.build` lub wyjścia Gradle, dzięki czemu uruchomienia Docker live nie tracą minut na kopiowanie artefaktów zależnych od maszyny. -Ustawiają także `OPENCLAW_SKIP_CHANNELS=1`, aby sondy Gateway live nie uruchamiały +Uruchomienia Docker live modeli montują również bieżący check-out tylko do odczytu i +przygotowują go w tymczasowym katalogu roboczym wewnątrz kontenera. Dzięki temu obraz runtime +pozostaje smukły, a jednocześnie Vitest działa na dokładnie twoim lokalnym źródle/config. +Krok przygotowania pomija duże lokalne cache i artefakty budowy aplikacji, takie jak +`.pnpm-store`, `.worktrees`, `__openclaw_vitest__` oraz lokalne dla aplikacji katalogi `.build` lub +katalogi wyjściowe Gradle, dzięki czemu uruchomienia Docker live nie tracą minut na kopiowanie +artefaktów specyficznych dla maszyny. +Ustawiają także `OPENCLAW_SKIP_CHANNELS=1`, aby sondy gateway live nie uruchamiały rzeczywistych workerów kanałów Telegram/Discord/itd. wewnątrz kontenera. -`test:docker:live-models` nadal uruchamia `pnpm test:live`, więc przekazuj również -`OPENCLAW_LIVE_GATEWAY_*`, gdy chcesz zawęzić lub wykluczyć pokrycie Gateway +`test:docker:live-models` nadal uruchamia `pnpm test:live`, więc przekaż również +`OPENCLAW_LIVE_GATEWAY_*`, gdy potrzebujesz zawęzić lub wykluczyć pokrycie gateway live z tej ścieżki Docker. `test:docker:openwebui` to smoke zgodności wyższego poziomu: uruchamia kontener -Gateway OpenClaw z włączonymi endpointami HTTP zgodnymi z OpenAI, uruchamia -przypięty kontener Open WebUI względem tego Gateway, loguje się przez +Gateway OpenClaw z włączonymi endpointami HTTP zgodnymi z OpenAI, +uruchamia przypięty kontener Open WebUI względem tego gateway, loguje się przez Open WebUI, weryfikuje, że `/api/models` udostępnia `openclaw/default`, a następnie wysyła rzeczywiste żądanie czatu przez proxy `/api/chat/completions` Open WebUI. Pierwsze uruchomienie może być zauważalnie wolniejsze, ponieważ Docker może potrzebować pobrać -obraz Open WebUI, a Open WebUI może potrzebować zakończyć własną konfigurację cold-start. +obraz Open WebUI, a samo Open WebUI może potrzebować zakończyć własną konfigurację zimnego startu. Ta ścieżka oczekuje użytecznego klucza modelu live, a `OPENCLAW_PROFILE_FILE` -(domyślnie `~/.profile`) jest podstawowym sposobem dostarczenia go w uruchomieniach dockerowych. -Udane uruchomienia wypisują mały payload JSON, taki jak `{ "ok": true, "model": +(domyślnie `~/.profile`) jest podstawowym sposobem jego dostarczenia w uruchomieniach dockerowych. +Pomyślne uruchomienia wypisują niewielki payload JSON, taki jak `{ "ok": true, "model": "openclaw/default", ... }`. -`test:docker:mcp-channels` jest celowo deterministyczne i nie wymaga +`test:docker:mcp-channels` jest celowo deterministyczny i nie wymaga rzeczywistego konta Telegram, Discord ani iMessage. Uruchamia zasiany kontener -Gateway, startuje drugi kontener, który uruchamia `openclaw mcp serve`, a następnie -weryfikuje odkrywanie routowanych konwersacji, odczyty transkryptów, metadane załączników, -zachowanie kolejki zdarzeń live, routing wysyłki wychodzącej oraz powiadomienia Claude w stylu kanału + -uprawnień przez rzeczywisty most stdio MCP. Kontrola powiadomień -bezpośrednio analizuje surowe ramki stdio MCP, więc smoke weryfikuje to, co most -rzeczywiście emituje, a nie tylko to, co akurat udostępnia konkretny SDK klienta. +Gateway, uruchamia drugi kontener, który wywołuje `openclaw mcp serve`, a następnie +weryfikuje routowane wykrywanie rozmów, odczyty transkryptów, metadane załączników, +zachowanie kolejki zdarzeń live, routing wysyłki wychodzącej oraz powiadomienia kanału + +uprawnień w stylu Claude przez rzeczywisty most stdio MCP. Kontrola powiadomień +sprawdza bezpośrednio surowe ramki stdio MCP, dzięki czemu smoke weryfikuje to, co +most faktycznie emituje, a nie tylko to, co akurat udostępnia konkretny SDK klienta. -Ręczny smoke wątku ACP w prostym języku (nie CI): +Ręczny smoke zwykłego języka wątku ACP (nie CI): - `bun scripts/dev/discord-acp-plain-language-smoke.ts --channel ...` -- Zachowaj ten skrypt dla przepływów pracy regresji/debugowania. Może być znowu potrzebny do walidacji routingu wątków ACP, więc go nie usuwaj. +- Zachowaj ten skrypt do przepływów regresji/debugowania. Może być ponownie potrzebny do walidacji routingu wątków ACP, więc nie usuwaj go. -Przydatne zmienne env: +Przydatne zmienne środowiskowe: - `OPENCLAW_CONFIG_DIR=...` (domyślnie: `~/.openclaw`) montowane do `/home/node/.openclaw` - `OPENCLAW_WORKSPACE_DIR=...` (domyślnie: `~/.openclaw/workspace`) montowane do `/home/node/.openclaw/workspace` - `OPENCLAW_PROFILE_FILE=...` (domyślnie: `~/.profile`) montowane do `/home/node/.profile` i pobierane przed uruchomieniem testów -- `OPENCLAW_DOCKER_PROFILE_ENV_ONLY=1`, aby zweryfikować tylko zmienne env pobrane z `OPENCLAW_PROFILE_FILE`, używając tymczasowych katalogów config/workspace i bez montowania zewnętrznego uwierzytelniania CLI +- `OPENCLAW_DOCKER_PROFILE_ENV_ONLY=1`, aby zweryfikować tylko zmienne środowiskowe pobrane z `OPENCLAW_PROFILE_FILE`, używając tymczasowych katalogów config/workspace i bez montowania zewnętrznej autoryzacji CLI - `OPENCLAW_DOCKER_CLI_TOOLS_DIR=...` (domyślnie: `~/.cache/openclaw/docker-cli-tools`) montowane do `/home/node/.npm-global` dla buforowanych instalacji CLI wewnątrz Dockera -- Zewnętrzne katalogi/pliki uwierzytelniania CLI pod `$HOME` są montowane tylko do odczytu pod `/host-auth...`, a następnie kopiowane do `/home/node/...` przed rozpoczęciem testów +- Zewnętrzne katalogi/pliki autoryzacji CLI pod `$HOME` są montowane tylko do odczytu pod `/host-auth...`, a następnie kopiowane do `/home/node/...` przed rozpoczęciem testów - Domyślne katalogi: `.minimax` - Domyślne pliki: `~/.codex/auth.json`, `~/.codex/config.toml`, `.claude.json`, `~/.claude/.credentials.json`, `~/.claude/settings.json`, `~/.claude/settings.local.json` - Zawężone uruchomienia dostawców montują tylko potrzebne katalogi/pliki wywnioskowane z `OPENCLAW_LIVE_PROVIDERS` / `OPENCLAW_LIVE_GATEWAY_PROVIDERS` - - Nadpisz ręcznie przez `OPENCLAW_DOCKER_AUTH_DIRS=all`, `OPENCLAW_DOCKER_AUTH_DIRS=none` lub listę rozdzielaną przecinkami, taką jak `OPENCLAW_DOCKER_AUTH_DIRS=.claude,.codex` + - Nadpisz ręcznie przez `OPENCLAW_DOCKER_AUTH_DIRS=all`, `OPENCLAW_DOCKER_AUTH_DIRS=none` albo listę rozdzielaną przecinkami, taką jak `OPENCLAW_DOCKER_AUTH_DIRS=.claude,.codex` - `OPENCLAW_LIVE_GATEWAY_MODELS=...` / `OPENCLAW_LIVE_MODELS=...`, aby zawęzić uruchomienie - `OPENCLAW_LIVE_GATEWAY_PROVIDERS=...` / `OPENCLAW_LIVE_PROVIDERS=...`, aby filtrować dostawców wewnątrz kontenera - `OPENCLAW_SKIP_DOCKER_BUILD=1`, aby ponownie użyć istniejącego obrazu `openclaw:local-live` przy ponownych uruchomieniach, które nie wymagają przebudowy - `OPENCLAW_LIVE_REQUIRE_PROFILE_KEYS=1`, aby upewnić się, że poświadczenia pochodzą z magazynu profili (a nie z env) -- `OPENCLAW_OPENWEBUI_MODEL=...`, aby wybrać model udostępniany przez Gateway dla smoke Open WebUI +- `OPENCLAW_OPENWEBUI_MODEL=...`, aby wybrać model udostępniany przez gateway dla smoke Open WebUI - `OPENCLAW_OPENWEBUI_PROMPT=...`, aby nadpisać prompt sprawdzający nonce używany przez smoke Open WebUI - `OPENWEBUI_IMAGE=...`, aby nadpisać przypięty tag obrazu Open WebUI -## Kontrola spójności dokumentacji +## Kontrola poprawności dokumentacji -Uruchom kontrole dokumentacji po edycji dokumentów: `pnpm check:docs`. +Po edycji dokumentacji uruchom kontrole dokumentów: `pnpm check:docs`. Uruchom pełną walidację anchorów Mintlify, gdy potrzebujesz także kontroli nagłówków w obrębie strony: `pnpm docs:check-links:anchors`. ## Regresja offline (bezpieczna dla CI) -To regresje „rzeczywistego pipeline’u” bez rzeczywistych dostawców: +To są regresje „rzeczywistego potoku” bez rzeczywistych dostawców: - Wywoływanie narzędzi Gateway (mock OpenAI, rzeczywista pętla gateway + agent): `src/gateway/gateway.test.ts` (przypadek: "runs a mock OpenAI tool call end-to-end via gateway agent loop") -- Kreator Gateway (WS `wizard.start`/`wizard.next`, zapisuje konfigurację + wymuszone uwierzytelnianie): `src/gateway/gateway.test.ts` (przypadek: "runs wizard over ws and writes auth token config") +- Kreator Gateway (WS `wizard.start`/`wizard.next`, zapis config + wymuszona autoryzacja): `src/gateway/gateway.test.ts` (przypadek: "runs wizard over ws and writes auth token config") -## Ewalucje niezawodności agenta (Skills) +## Evale niezawodności agentów (Skills) -Mamy już kilka testów bezpiecznych dla CI, które działają jak „ewaluacje niezawodności agenta”: +Mamy już kilka bezpiecznych dla CI testów, które działają jak „evale niezawodności agentów”: -- Mockowane wywoływanie narzędzi przez rzeczywistą pętlę gateway + agent (`src/gateway/gateway.test.ts`). -- Przepływy end-to-end kreatora, które walidują okablowanie sesji i skutki konfiguracji (`src/gateway/gateway.test.ts`). +- Mock wywoływania narzędzi przez rzeczywistą pętlę gateway + agent (`src/gateway/gateway.test.ts`). +- Przepływy kreatora end-to-end, które walidują okablowanie sesji i skutki konfiguracji (`src/gateway/gateway.test.ts`). Czego nadal brakuje dla Skills (zobacz [Skills](/pl/tools/skills)): -- **Podejmowanie decyzji:** gdy Skills są wymienione w prompcie, czy agent wybiera właściwą Skill (albo unika nieistotnych)? -- **Zgodność:** czy agent czyta `SKILL.md` przed użyciem i wykonuje wymagane kroki/argumenty? +- **Podejmowanie decyzji:** gdy Skills są wymienione w promcie, czy agent wybiera właściwy Skill (albo unika nieistotnych)? +- **Zgodność:** czy agent czyta `SKILL.md` przed użyciem i stosuje wymagane kroki/argumenty? - **Kontrakty przepływu pracy:** scenariusze wieloturowe, które sprawdzają kolejność narzędzi, przenoszenie historii sesji i granice sandboxa. -Przyszłe ewaluacje powinny najpierw pozostać deterministyczne: +Przyszłe evale powinny przede wszystkim pozostać deterministyczne: -- Runner scenariuszy używający mockowanych dostawców do sprawdzania wywołań narzędzi i ich kolejności, odczytów plików Skill oraz okablowania sesji. -- Niewielki pakiet scenariuszy skupionych na Skills (użyj vs pomiń, bramkowanie, prompt injection). -- Opcjonalne ewaluacje live (opt-in, bramkowane przez env) dopiero po wdrożeniu pakietu bezpiecznego dla CI. +- Runner scenariuszy używający mockowanych dostawców do sprawdzania wywołań narzędzi + ich kolejności, odczytów plików skill i okablowania sesji. +- Mały pakiet scenariuszy skupionych na skills (użyj vs pomiń, bramkowanie, prompt injection). +- Opcjonalne evale live (opt-in, sterowane przez env) dopiero po wdrożeniu pakietu bezpiecznego dla CI. -## Testy kontraktowe (kształt Plugin i kanału) +## Testy kontraktowe (kształt Plugin i kanałów) -Testy kontraktowe weryfikują, że każdy zarejestrowany Plugin i kanał są zgodne ze swoim -kontraktem interfejsu. Iterują po wszystkich wykrytych Pluginach i uruchamiają pakiet -asercji dotyczących kształtu i zachowania. Domyślna ścieżka unit `pnpm test` celowo -pomija te współdzielone pliki seam i smoke; uruchamiaj polecenia kontraktowe jawnie, +Testy kontraktowe sprawdzają, czy każdy zarejestrowany Plugin i kanał jest zgodny +ze swoim kontraktem interfejsu. Iterują po wszystkich wykrytych Pluginach i uruchamiają pakiet +asercji dotyczących kształtu i zachowania. Domyślna ścieżka unit `pnpm test` +celowo pomija te współdzielone pliki seam i smoke; uruchamiaj polecenia kontraktowe jawnie, gdy dotykasz współdzielonych powierzchni kanałów lub dostawców. ### Polecenia @@ -961,29 +966,29 @@ gdy dotykasz współdzielonych powierzchni kanałów lub dostawców. Znajdują się w `src/channels/plugins/contracts/*.contract.test.ts`: -- **plugin** - Podstawowy kształt Plugin (id, nazwa, możliwości) +- **plugin** - Podstawowy kształt Plugin (`id`, `name`, `capabilities`) - **setup** - Kontrakt kreatora konfiguracji -- **session-binding** - Zachowanie powiązania sesji -- **outbound-payload** - Struktura payloadu wiadomości +- **session-binding** - Zachowanie wiązania sesji +- **outbound-payload** - Struktura payload wiadomości - **inbound** - Obsługa wiadomości przychodzących - **actions** - Handlery akcji kanału - **threading** - Obsługa identyfikatorów wątków -- **directory** - API katalogu/listy -- **group-policy** - Egzekwowanie polityki grupowej +- **directory** - API katalogu/listy użytkowników +- **group-policy** - Wymuszanie zasad grupowych ### Kontrakty statusu dostawców Znajdują się w `src/plugins/contracts/*.contract.test.ts`. -- **status** - Sondy statusu kanałów +- **status** - Sondy statusu kanału - **registry** - Kształt rejestru Plugin ### Kontrakty dostawców Znajdują się w `src/plugins/contracts/*.contract.test.ts`: -- **auth** - Kontrakt przepływu uwierzytelniania -- **auth-choice** - Wybór/selekcja uwierzytelniania +- **auth** - Kontrakt przepływu autoryzacji +- **auth-choice** - Wybór/selekcja autoryzacji - **catalog** - API katalogu modeli - **discovery** - Wykrywanie Plugin - **loader** - Ładowanie Plugin @@ -993,21 +998,21 @@ Znajdują się w `src/plugins/contracts/*.contract.test.ts`: ### Kiedy uruchamiać -- Po zmianie eksportów lub subścieżek Plugin SDK -- Po dodaniu albo modyfikacji Plugin kanału lub dostawcy +- Po zmianie eksportów `plugin-sdk` lub podścieżek +- Po dodaniu lub modyfikacji kanału albo Plugin dostawcy - Po refaktoryzacji rejestracji lub wykrywania Plugin -Testy kontraktowe są uruchamiane w CI i nie wymagają rzeczywistych kluczy API. +Testy kontraktowe są uruchamiane w CI i nie wymagają prawdziwych kluczy API. ## Dodawanie regresji (wskazówki) Gdy naprawiasz problem dostawcy/modelu wykryty w live: -- Jeśli to możliwe, dodaj regresję bezpieczną dla CI (mockowany/stubowany dostawca albo przechwycenie dokładnej transformacji kształtu żądania) -- Jeśli z natury da się to odtworzyć tylko w live (limity szybkości, polityki uwierzytelniania), utrzymuj test live wąski i opt-in przez zmienne env -- Wybieraj możliwie najmniejszą warstwę, która wychwytuje błąd: - - błąd konwersji/odtwarzania żądania dostawcy → test modeli bezpośrednich - - błąd pipeline’u sesji/historii/narzędzi Gateway → smoke Gateway live albo bezpieczny dla CI test mockowanego Gateway -- Zabezpieczenie przechodzenia SecretRef: - - `src/secrets/exec-secret-ref-id-parity.test.ts` wyprowadza jeden przykładowy cel na klasę SecretRef z metadanych rejestru (`listSecretTargetRegistryEntries()`), a następnie sprawdza, że identyfikatory exec segmentów przechodzenia są odrzucane. - - Jeśli dodasz nową rodzinę celów SecretRef `includeInPlan` w `src/secrets/target-registry-data.ts`, zaktualizuj `classifyTargetClass` w tym teście. Test celowo kończy się niepowodzeniem przy niesklasyfikowanych identyfikatorach celów, aby nie dało się po cichu pominąć nowych klas. +- Dodaj regresję bezpieczną dla CI, jeśli to możliwe (mock/stub dostawcy albo uchwycenie dokładnej transformacji kształtu żądania) +- Jeśli problem z natury dotyczy tylko live (limity szybkości, polityki autoryzacji), utrzymaj test live wąski i opt-in przez zmienne środowiskowe +- Preferuj celowanie w najmniejszą warstwę, która wychwytuje błąd: + - błąd konwersji/powtórzenia żądania dostawcy → test direct models + - błąd potoku sesja/historia/narzędzia Gateway → smoke Gateway live albo bezpieczny dla CI mock test Gateway +- Ochrona traversalu SecretRef: + - `src/secrets/exec-secret-ref-id-parity.test.ts` wyprowadza jeden przykładowy cel na klasę SecretRef z metadanych rejestru (`listSecretTargetRegistryEntries()`), a następnie sprawdza, że identyfikatory exec segmentów traversalu są odrzucane. + - Jeśli dodasz nową rodzinę celów SecretRef `includeInPlan` w `src/secrets/target-registry-data.ts`, zaktualizuj `classifyTargetClass` w tym teście. Test celowo kończy się niepowodzeniem przy niesklasyfikowanych identyfikatorach celów, aby nie można było po cichu pominąć nowych klas. diff --git a/docs/pl/plugins/sdk-channel-plugins.md b/docs/pl/plugins/sdk-channel-plugins.md index 648cccdeb..5c8f654de 100644 --- a/docs/pl/plugins/sdk-channel-plugins.md +++ b/docs/pl/plugins/sdk-channel-plugins.md @@ -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. - 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. @@ -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 są 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 są 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..accounts..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..accounts..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 dostarczeń -- 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 - 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): ```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 })`. 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 })`. ``` - 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. @@ -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. - + 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. 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 })`. 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. - -Pisz testy współlokowane w `src/channel.test.ts`: + +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 -- /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). @@ -560,31 +562,31 @@ Pisz testy współlokowane w `src/channel.test.ts`: ``` /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 - Stałe, o zakresie konta lub niestandardowe tryby odpowiedzi + Stałe, ograniczone do konta lub niestandardowe tryby odpowiedzi - + describeMessageTool i wykrywanie akcji inferTargetChatType, looksLikeId, resolveTarget - + TTS, STT, multimedia, subagent przez api.runtime diff --git a/docs/pl/plugins/sdk-overview.md b/docs/pl/plugins/sdk-overview.md index 989e90eea..c2a63a76e 100644 --- a/docs/pl/plugins/sdk-overview.md +++ b/docs/pl/plugins/sdk-overview.md @@ -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ć**. - **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; +są 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` | - | 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 | - | 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 | - | 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ń | - | 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` | - | 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` | - | 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` | - - | Rodzina | Bieżące podścieżki | Zamierzone użycie | + + | 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` | @@ -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.`. -- Konfiguracja użytkownika nadal ma pierwszeństwo. OpenClaw scala `agents.defaults.cliBackends.` z domyślną konfiguracją - pluginu przed uruchomieniem CLI. +- Konfiguracja użytkownika nadal ma pierwszeństwo. OpenClaw scala `agents.defaults.cliBackends.` 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` | Konfiguracja specyficzna dla pluginu z `plugins.entries..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` | Konfiguracja specyficzna dla pluginu z `plugins.entries..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) ``` @@ -479,37 +492,37 @@ my-plugin/ `./runtime-api.ts`. Ścieżka SDK jest wyłącznie kontraktem zewnętrznym. -Ł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 - Kod produkcyjny rozszerzeń powinien także unikać importów `openclaw/plugin-sdk/`. - 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/`. + 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. ## 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 diff --git a/docs/pl/refactor/qa.md b/docs/pl/refactor/qa.md index 7b16b8f5f..3473adac9 100644 --- a/docs/pl/refactor/qa.md +++ b/docs/pl/refactor/qa.md @@ -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//*.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//*.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//*.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//*.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