diff --git a/docs/pl/automation/tasks.md b/docs/pl/automation/tasks.md
index 43240e11f..be2a64225 100644
--- a/docs/pl/automation/tasks.md
+++ b/docs/pl/automation/tasks.md
@@ -2,45 +2,41 @@
read_when:
- Sprawdzanie trwających lub niedawno zakończonych zadań w tle
- Debugowanie błędów dostarczania dla odłączonych uruchomień agentów
- - Zrozumienie, jak uruchomienia w tle są powiązane z sesjami, cron i heartbeat
-summary: Śledzenie zadań w tle dla uruchomień ACP, subagentów, izolowanych zadań cron i operacji CLI
+ - Zrozumienie, jak uruchomienia w tle odnoszą się do sesji, cron i heartbeat
+summary: Śledzenie zadań w tle dla uruchomień ACP, podagentów, izolowanych zadań cron i operacji CLI
title: Zadania w tle
x-i18n:
- generated_at: "2026-04-06T03:07:01Z"
+ generated_at: "2026-04-10T09:44:53Z"
model: gpt-5.4
provider: openai
- source_hash: 2f56c1ac23237907a090c69c920c09578a2f56f5d8bf750c7f2136c603c8a8ff
+ source_hash: d7b5ba41f1025e0089986342ce85698bc62f676439c3ccf03f3ed146beb1b1ac
source_path: automation/tasks.md
workflow: 15
---
# Zadania w tle
-> **Szukasz planowania?** Zobacz [Automation & Tasks](/pl/automation), aby wybrać właściwy mechanizm. Ta strona dotyczy **śledzenia** pracy w tle, a nie jej planowania.
+> **Szukasz harmonogramowania?** Zobacz [Automatyzacja i zadania](/pl/automation), aby wybrać właściwy mechanizm. Ta strona dotyczy **śledzenia** pracy w tle, a nie jej harmonogramowania.
-Zadania w tle śledzą pracę wykonywaną **poza główną sesją rozmowy**:
-uruchomienia ACP, uruchomienia subagentów, wykonania izolowanych zadań cron oraz operacje inicjowane przez CLI.
+Zadania w tle śledzą pracę uruchamianą **poza główną sesją rozmowy**:
+uruchomienia ACP, tworzenie podagentów, izolowane wykonania zadań cron oraz operacje inicjowane przez CLI.
Zadania **nie** zastępują sesji, zadań cron ani heartbeat — są **rejestrem aktywności**, który zapisuje, jaka odłączona praca została wykonana, kiedy i czy zakończyła się powodzeniem.
-Nie każde uruchomienie agenta tworzy zadanie. Tury heartbeat i zwykły interaktywny czat tego nie robią. Wszystkie wykonania cron, uruchomienia ACP, uruchomienia subagentów i polecenia agenta z CLI tworzą zadania.
+Nie każde uruchomienie agenta tworzy zadanie. Tury heartbeat i zwykły interaktywny czat tego nie robią. Wszystkie wykonania cron, uruchomienia ACP, uruchomienia podagentów i polecenia agenta z CLI tworzą zadania.
-## TL;DR
+## W skrócie
- Zadania to **rekordy**, a nie harmonogramy — cron i heartbeat decydują, _kiedy_ praca jest uruchamiana, a zadania śledzą, _co się wydarzyło_.
-- ACP, subagenty, wszystkie zadania cron i operacje CLI tworzą zadania. Tury heartbeat nie.
-- Każde zadanie przechodzi przez `queued → running → terminal` (`succeeded`, `failed`, `timed_out`, `cancelled` lub `lost`).
-- Zadania cron pozostają aktywne, dopóki środowisko uruchomieniowe cron nadal jest właścicielem zadania; zadania CLI oparte na czacie pozostają aktywne tylko wtedy, gdy ich kontekst uruchomienia właściciela nadal jest aktywny.
-- Zakończenie jest sterowane przez push: odłączona praca może powiadomić bezpośrednio lub wybudzić
- sesję żądającą/heartbeat po zakończeniu, więc pętle odpytywania stanu
- zwykle nie są właściwym rozwiązaniem.
-- Izolowane uruchomienia cron i zakończenia subagentów w trybie best-effort czyszczą śledzone karty/procesy przeglądarki dla swojej sesji podrzędnej przed końcowym rozliczeniem czyszczenia.
-- Dostarczanie izolowanych uruchomień cron pomija nieaktualne pośrednie odpowiedzi nadrzędne, gdy
- praca potomnych subagentów nadal się opróżnia, i preferuje końcowe dane wyjściowe potomka,
- jeśli dotrą przed dostarczeniem.
-- Powiadomienia o zakończeniu są dostarczane bezpośrednio do kanału lub umieszczane w kolejce do następnego heartbeat.
+- ACP, podagenci, wszystkie zadania cron i operacje CLI tworzą zadania. Tury heartbeat nie.
+- Każde zadanie przechodzi przez `queued → running → terminal` (succeeded, failed, timed_out, cancelled lub lost).
+- Zadania cron pozostają aktywne, dopóki środowisko uruchomieniowe cron nadal jest właścicielem zadania; zadania CLI powiązane z czatem pozostają aktywne tylko tak długo, jak długo aktywny jest ich kontekst uruchomienia.
+- Zakończenie jest obsługiwane przez mechanizm push: odłączona praca może powiadomić bezpośrednio albo wybudzić sesję żądającą/heartbeat po zakończeniu, więc pętle odpytywania o status zwykle nie są właściwym rozwiązaniem.
+- Izolowane uruchomienia cron i zakończenia podagentów w miarę możliwości porządkują śledzone karty/procesy przeglądarki dla swojej sesji podrzędnej przed końcowym rozliczeniem czyszczenia.
+- Dostarczanie dla izolowanego cron pomija nieaktualne tymczasowe odpowiedzi nadrzędne, gdy praca podrzędnych podagentów nadal się kończy, i preferuje końcowe dane wyjściowe potomka, jeśli dotrą przed dostarczeniem.
+- Powiadomienia o zakończeniu są dostarczane bezpośrednio do kanału lub kolejkowane do następnego heartbeat.
- `openclaw tasks list` pokazuje wszystkie zadania; `openclaw tasks audit` ujawnia problemy.
- Rekordy terminalne są przechowywane przez 7 dni, a następnie automatycznie usuwane.
@@ -57,7 +53,7 @@ openclaw tasks list --status running
# Pokaż szczegóły konkretnego zadania (według ID, ID uruchomienia lub klucza sesji)
openclaw tasks show
-# Anuluj działające zadanie (zabija sesję podrzędną)
+# Anuluj uruchomione zadanie (zabija sesję podrzędną)
openclaw tasks cancel
# Zmień politykę powiadomień dla zadania
@@ -70,7 +66,7 @@ openclaw tasks audit
openclaw tasks maintenance
openclaw tasks maintenance --apply
-# Sprawdź stan Task Flow
+# Sprawdź stan TaskFlow
openclaw tasks flow list
openclaw tasks flow show
openclaw tasks flow cancel
@@ -79,18 +75,18 @@ openclaw tasks flow cancel
## Co tworzy zadanie
| Źródło | Typ środowiska uruchomieniowego | Kiedy tworzony jest rekord zadania | Domyślna polityka powiadomień |
-| ---------------------- | ------------------------------- | ------------------------------------------------------ | ----------------------------- |
-| Uruchomienia ACP w tle | `acp` | Utworzenie podrzędnej sesji ACP | `done_only` |
-| Orkiestracja subagentów | `subagent` | Uruchomienie subagenta przez `sessions_spawn` | `done_only` |
-| Zadania cron (wszystkie typy) | `cron` | Każde wykonanie cron (sesja główna i izolowana) | `silent` |
-| Operacje CLI | `cli` | Polecenia `openclaw agent` uruchamiane przez gateway | `silent` |
-| Zadania mediów agenta | `cli` | Uruchomienia `video_generate` powiązane z sesją | `silent` |
+| ---------------------- | -------------------------------- | ------------------------------------------------------ | ----------------------------- |
+| Uruchomienia ACP w tle | `acp` | Utworzenie podrzędnej sesji ACP | `done_only` |
+| Orkiestracja podagentów | `subagent` | Utworzenie podagenta przez `sessions_spawn` | `done_only` |
+| Zadania cron (wszystkie typy) | `cron` | Każde wykonanie cron (sesja główna i izolowana) | `silent` |
+| Operacje CLI | `cli` | Polecenia `openclaw agent` uruchamiane przez gateway | `silent` |
+| Zadania medialne agenta | `cli` | Uruchomienia `video_generate` powiązane z sesją | `silent` |
Zadania cron w sesji głównej domyślnie używają polityki powiadomień `silent` — tworzą rekordy do śledzenia, ale nie generują powiadomień. Izolowane zadania cron również domyślnie używają `silent`, ale są bardziej widoczne, ponieważ działają we własnej sesji.
-Uruchomienia `video_generate` powiązane z sesją również używają polityki powiadomień `silent`. Nadal tworzą rekordy zadań, ale zakończenie jest przekazywane z powrotem do oryginalnej sesji agenta jako wewnętrzne wybudzenie, aby agent mógł sam napisać wiadomość uzupełniającą i dołączyć gotowy film. Jeśli włączysz `tools.media.asyncCompletion.directSend`, asynchroniczne zakończenia `music_generate` i `video_generate` najpierw próbują bezpośredniego dostarczenia do kanału, a dopiero potem wracają do ścieżki wybudzenia sesji żądającej.
+Uruchomienia `video_generate` powiązane z sesją także używają domyślnie polityki powiadomień `silent`. Nadal tworzą rekordy zadań, ale zakończenie jest przekazywane z powrotem do oryginalnej sesji agenta jako wewnętrzne wybudzenie, aby agent mógł sam napisać wiadomość uzupełniającą i dołączyć gotowy film. Jeśli włączysz `tools.media.asyncCompletion.directSend`, asynchroniczne zakończenia `music_generate` i `video_generate` najpierw próbują bezpośredniego dostarczenia do kanału, a dopiero potem wracają do ścieżki wybudzenia sesji żądającej.
-Gdy zadanie `video_generate` powiązane z sesją jest nadal aktywne, narzędzie działa też jako zabezpieczenie: powtarzane wywołania `video_generate` w tej samej sesji zwracają status aktywnego zadania zamiast uruchamiać drugie równoległe generowanie. Użyj `action: "status"`, gdy chcesz uzyskać jawne sprawdzenie postępu/statusu po stronie agenta.
+Gdy zadanie `video_generate` powiązane z sesją jest nadal aktywne, narzędzie działa również jako zabezpieczenie: powtórzone wywołania `video_generate` w tej samej sesji zwracają status aktywnego zadania zamiast uruchamiać drugie równoległe generowanie. Użyj `action: "status"`, gdy chcesz wykonać jawne sprawdzenie postępu/statusu po stronie agenta.
**Co nie tworzy zadań:**
@@ -112,52 +108,50 @@ stateDiagram-v2
running --> lost : session gone > 5 min
```
-| Status | Co oznacza |
-| ----------- | ------------------------------------------------------------------------- |
-| `queued` | Utworzone, oczekuje na uruchomienie przez agenta |
-| `running` | Tura agenta jest aktywnie wykonywana |
-| `succeeded` | Zakończone pomyślnie |
-| `failed` | Zakończone błędem |
-| `timed_out` | Przekroczono skonfigurowany limit czasu |
-| `cancelled` | Zatrzymane przez operatora przez `openclaw tasks cancel` |
+| Status | Co oznacza |
+| ----------- | ------------------------------------------------------------------------ |
+| `queued` | Utworzone, oczekuje na uruchomienie przez agenta |
+| `running` | Tura agenta jest aktywnie wykonywana |
+| `succeeded` | Zakończone pomyślnie |
+| `failed` | Zakończone błędem |
+| `timed_out` | Przekroczono skonfigurowany limit czasu |
+| `cancelled` | Zatrzymane przez operatora za pomocą `openclaw tasks cancel` |
| `lost` | Środowisko uruchomieniowe utraciło autorytatywny stan zaplecza po 5-minutowym okresie karencji |
-Przejścia zachodzą automatycznie — gdy powiązane uruchomienie agenta się kończy, status zadania jest aktualizowany odpowiednio do wyniku.
+Przejścia zachodzą automatycznie — gdy skojarzone uruchomienie agenta się kończy, status zadania aktualizuje się odpowiednio.
`lost` jest zależne od środowiska uruchomieniowego:
-- Zadania ACP: zniknęły metadane podrzędnej sesji ACP w zapleczu.
-- Zadania subagentów: podrzędna sesja zniknęła z docelowego magazynu agenta.
+- Zadania ACP: zniknęły metadane podrzędnej sesji ACP.
+- Zadania podagentów: podrzędna sesja zniknęła z docelowego magazynu agenta.
- Zadania cron: środowisko uruchomieniowe cron nie śledzi już zadania jako aktywnego.
-- Zadania CLI: izolowane zadania sesji podrzędnej używają sesji podrzędnej; zadania CLI oparte na czacie używają zamiast tego aktywnego kontekstu uruchomienia, więc pozostające wiersze sesji kanału/grupy/bezpośredniej nie utrzymują ich przy życiu.
+- Zadania CLI: izolowane zadania sesji podrzędnej używają sesji podrzędnej; zadania CLI powiązane z czatem używają zamiast tego aktywnego kontekstu uruchomienia, więc utrzymujące się wiersze sesji kanału/grupy/wiadomości bezpośredniej nie podtrzymują ich aktywności.
## Dostarczanie i powiadomienia
Gdy zadanie osiągnie stan terminalny, OpenClaw Cię powiadomi. Istnieją dwie ścieżki dostarczania:
-**Dostarczenie bezpośrednie** — jeśli zadanie ma cel kanałowy (`requesterOrigin`), wiadomość o zakończeniu trafia bezpośrednio do tego kanału (Telegram, Discord, Slack itd.). W przypadku zakończeń subagentów OpenClaw zachowuje też powiązane kierowanie do wątku/tematu, gdy jest dostępne, i może uzupełnić brakujące `to` / konto z zapisanej trasy sesji żądającej (`lastChannel` / `lastTo` / `lastAccountId`), zanim zrezygnuje z bezpośredniego dostarczenia.
+**Dostarczenie bezpośrednie** — jeśli zadanie ma docelowy kanał (`requesterOrigin`), wiadomość o zakończeniu trafia bezpośrednio do tego kanału (Telegram, Discord, Slack itd.). W przypadku zakończeń podagentów OpenClaw zachowuje również powiązane trasowanie wątku/tematu, jeśli jest dostępne, i może uzupełnić brakujące `to` / konto z zapisanej trasy sesji żądającej (`lastChannel` / `lastTo` / `lastAccountId`), zanim zrezygnuje z bezpośredniego dostarczenia.
-**Dostarczenie w kolejce sesji** — jeśli bezpośrednie dostarczenie się nie powiedzie lub nie ustawiono źródła, aktualizacja jest umieszczana w kolejce jako zdarzenie systemowe w sesji żądającego i pojawia się przy następnym heartbeat.
+**Dostarczenie kolejkowane do sesji** — jeśli dostarczenie bezpośrednie się nie powiedzie albo nie ustawiono źródła, aktualizacja jest kolejkowana jako zdarzenie systemowe w sesji żądającej i pojawia się przy następnym heartbeat.
-Zakończenie zadania natychmiast wyzwala wybudzenie heartbeat, więc wynik zobaczysz szybko — nie musisz czekać na następny zaplanowany tick heartbeat.
+Zakończenie zadania wywołuje natychmiastowe wybudzenie heartbeat, dzięki czemu szybko widzisz wynik — nie musisz czekać na następny zaplanowany tick heartbeat.
-Oznacza to, że typowy przepływ pracy opiera się na push: uruchom odłączoną pracę raz, a następnie pozwól
-środowisku uruchomieniowemu wybudzić Cię lub powiadomić po zakończeniu. Odpytuj stan zadania tylko wtedy, gdy
-potrzebujesz debugowania, interwencji lub jawnego audytu.
+Oznacza to, że zwykły przepływ pracy jest oparty na mechanizmie push: uruchom odłączoną pracę raz, a następnie pozwól środowisku uruchomieniowemu wybudzić Cię lub powiadomić po zakończeniu. Odpytuj stan zadania tylko wtedy, gdy potrzebujesz debugowania, interwencji lub jawnego audytu.
### Polityki powiadomień
-Określają, jak dużo informacji otrzymujesz o każdym zadaniu:
+Kontrolują, jak dużo informacji otrzymujesz o każdym zadaniu:
-| Polityka | Co jest dostarczane |
-| -------------------- | ------------------------------------------------------------------------ |
-| `done_only` (domyślna) | Tylko stan terminalny (`succeeded`, `failed` itd.) — **to ustawienie domyślne** |
-| `state_changes` | Każda zmiana stanu i aktualizacja postępu |
-| `silent` | Nic |
+| Polityka | Co jest dostarczane |
+| --------------------- | ------------------------------------------------------------------------- |
+| `done_only` (domyślna) | Tylko stan terminalny (succeeded, failed itd.) — **to ustawienie domyślne** |
+| `state_changes` | Każda zmiana stanu i aktualizacja postępu |
+| `silent` | Nic |
-Zmień politykę, gdy zadanie jest uruchomione:
+Zmień politykę podczas działania zadania:
```bash
openclaw tasks notify state_changes
@@ -179,7 +173,7 @@ Kolumny wyjściowe: ID zadania, rodzaj, status, dostarczenie, ID uruchomienia, s
openclaw tasks show
```
-Token wyszukiwania akceptuje ID zadania, ID uruchomienia lub klucz sesji. Pokazuje pełny rekord zawierający czas, stan dostarczenia, błąd i podsumowanie terminalne.
+Token lookup akceptuje ID zadania, ID uruchomienia lub klucz sesji. Pokazuje pełny rekord, w tym czasy, stan dostarczenia, błąd i terminalne podsumowanie.
### `tasks cancel`
@@ -187,7 +181,7 @@ Token wyszukiwania akceptuje ID zadania, ID uruchomienia lub klucz sesji. Pokazu
openclaw tasks cancel
```
-W przypadku zadań ACP i subagentów powoduje to zabicie sesji podrzędnej. Status przechodzi do `cancelled`, a powiadomienie o dostarczeniu zostaje wysłane.
+W przypadku zadań ACP i podagentów powoduje to zabicie sesji podrzędnej. W przypadku zadań śledzonych przez CLI anulowanie jest rejestrowane w rejestrze zadań (nie ma osobnego uchwytu środowiska uruchomieniowego podrzędnego). Status przechodzi na `cancelled`, a w razie potrzeby wysyłane jest powiadomienie o dostarczeniu.
### `tasks notify`
@@ -201,16 +195,16 @@ openclaw tasks notify
openclaw tasks audit [--json]
```
-Ujawnia problemy operacyjne. Wyniki pojawiają się też w `openclaw status`, gdy zostaną wykryte problemy.
+Pokazuje problemy operacyjne. Ustalenia pojawiają się również w `openclaw status`, gdy wykryte zostaną problemy.
-| Ustalenie | Ważność | Wyzwalacz |
-| ------------------------ | ------- | ----------------------------------------------------- |
-| `stale_queued` | warn | Oczekuje dłużej niż 10 minut |
-| `stale_running` | error | Działa dłużej niż 30 minut |
-| `lost` | error | Zniknęło środowisko uruchomieniowe będące właścicielem zadania |
-| `delivery_failed` | warn | Dostarczenie nie powiodło się, a polityka powiadomień nie jest `silent` |
-| `missing_cleanup` | warn | Zadanie terminalne bez znacznika czasu czyszczenia |
-| `inconsistent_timestamps`| warn | Naruszenie osi czasu (na przykład zakończono przed rozpoczęciem) |
+| Ustalenie | Ważność | Wyzwalacz |
+| ------------------------- | ------- | ---------------------------------------------------- |
+| `stale_queued` | warn | Kolejka trwa dłużej niż 10 minut |
+| `stale_running` | error | Uruchomione dłużej niż 30 minut |
+| `lost` | error | Zniknęła własność zadania oparta na środowisku uruchomieniowym |
+| `delivery_failed` | warn | Dostarczenie nie powiodło się, a polityka powiadomień nie jest `silent` |
+| `missing_cleanup` | warn | Zadanie terminalne bez znacznika czasu czyszczenia |
+| `inconsistent_timestamps` | warn | Naruszenie osi czasu (na przykład zakończone przed rozpoczęciem) |
### `tasks maintenance`
@@ -219,22 +213,20 @@ openclaw tasks maintenance [--json]
openclaw tasks maintenance --apply [--json]
```
-Użyj tego, aby wyświetlić podgląd lub zastosować uzgadnianie, oznaczanie czyszczenia i przycinanie
-dla zadań oraz stanu Task Flow.
+Użyj tego, aby wyświetlić podgląd lub zastosować uzgadnianie, oznaczanie czyszczenia i usuwanie przestarzałych danych dla zadań oraz stanu Task Flow.
Uzgadnianie jest zależne od środowiska uruchomieniowego:
-- Zadania ACP/subagentów sprawdzają swoją podrzędną sesję zaplecza.
+- Zadania ACP/podagentów sprawdzają swoją podrzędną sesję zaplecza.
- Zadania cron sprawdzają, czy środowisko uruchomieniowe cron nadal jest właścicielem zadania.
-- Zadania CLI oparte na czacie sprawdzają nadrzędny aktywny kontekst uruchomienia, a nie tylko wiersz sesji czatu.
+- Zadania CLI powiązane z czatem sprawdzają właścicielski aktywny kontekst uruchomienia, a nie tylko wiersz sesji czatu.
Czyszczenie po zakończeniu jest również zależne od środowiska uruchomieniowego:
-- Zakończenie subagenta w trybie best-effort zamyka śledzone karty/procesy przeglądarki dla sesji podrzędnej, zanim będzie kontynuowane czyszczenie po ogłoszeniu.
-- Zakończenie izolowanego uruchomienia cron w trybie best-effort zamyka śledzone karty/procesy przeglądarki dla sesji cron, zanim uruchomienie zostanie całkowicie zakończone.
-- Dostarczanie zakończenia izolowanego uruchomienia cron w razie potrzeby czeka na dalsze działania potomnych subagentów
- i pomija nieaktualny tekst potwierdzenia nadrzędnego zamiast go ogłaszać.
-- Dostarczanie zakończenia subagenta preferuje najnowszy widoczny tekst asystenta; jeśli jest pusty, wraca do oczyszczonego najnowszego tekstu tool/toolResult, a uruchomienia wywołań narzędzi zakończone tylko przekroczeniem czasu mogą zostać zredukowane do krótkiego podsumowania częściowego postępu.
+- Zakończenie podagenta w miarę możliwości zamyka śledzone karty/procesy przeglądarki dla sesji podrzędnej, zanim kontynuowane będzie czyszczenie ogłoszenia.
+- Zakończenie izolowanego cron w miarę możliwości zamyka śledzone karty/procesy przeglądarki dla sesji cron, zanim uruchomienie zostanie całkowicie zakończone.
+- Dostarczenie dla izolowanego cron czeka na zakończenie następczej pracy podrzędnych podagentów, gdy jest to potrzebne, i pomija nieaktualny tekst potwierdzenia nadrzędnego zamiast go ogłaszać.
+- Dostarczenie zakończenia podagenta preferuje najnowszy widoczny tekst asystenta; jeśli jest pusty, używa oczyszczonego najnowszego tekstu tool/toolResult, a uruchomienia wyłącznie z wywołaniem narzędzia zakończone timeoutem mogą zostać zredukowane do krótkiego podsumowania częściowego postępu.
- Błędy czyszczenia nie maskują rzeczywistego wyniku zadania.
### `tasks flow list|show|cancel`
@@ -245,22 +237,21 @@ openclaw tasks flow show [--json]
openclaw tasks flow cancel
```
-Użyj tych poleceń, gdy interesuje Cię orkiestrujący Task Flow,
-a nie pojedynczy rekord zadania w tle.
+Używaj ich wtedy, gdy interesuje Cię orkiestrujący Task Flow, a nie pojedynczy rekord zadania w tle.
-## Tablica zadań na czacie (`/tasks`)
+## Tablica zadań czatu (`/tasks`)
Użyj `/tasks` w dowolnej sesji czatu, aby zobaczyć zadania w tle powiązane z tą sesją. Tablica pokazuje
aktywne i niedawno zakończone zadania wraz ze środowiskiem uruchomieniowym, statusem, czasem oraz szczegółami postępu lub błędu.
-Gdy bieżąca sesja nie ma widocznych powiązanych zadań, `/tasks` wraca do lokalnych dla agenta liczników zadań,
-dzięki czemu nadal otrzymujesz przegląd bez ujawniania szczegółów innych sesji.
+Gdy bieżąca sesja nie ma widocznych powiązanych zadań, `/tasks` przełącza się na lokalne dla agenta liczniki zadań,
+dzięki czemu nadal masz ogólny obraz bez ujawniania szczegółów innych sesji.
Aby zobaczyć pełny rejestr operatora, użyj CLI: `openclaw tasks list`.
-## Integracja statusu (obciążenie zadaniami)
+## Integracja ze statusem (obciążenie zadaniami)
-`openclaw status` zawiera szybkie podsumowanie zadań:
+`openclaw status` zawiera skrócone podsumowanie zadań:
```
Tasks: 3 queued · 2 running · 1 issues
@@ -272,64 +263,62 @@ Podsumowanie raportuje:
- **failures** — liczba `failed` + `timed_out` + `lost`
- **byRuntime** — podział według `acp`, `subagent`, `cron`, `cli`
-Zarówno `/status`, jak i narzędzie `session_status` używają migawki zadań uwzględniającej czyszczenie: preferowane są aktywne zadania,
-nieaktualne zakończone wiersze są ukrywane, a niedawne niepowodzenia pojawiają się tylko wtedy, gdy nie pozostała żadna aktywna praca.
-Dzięki temu karta statusu skupia się na tym, co ma znaczenie w tej chwili.
+Zarówno `/status`, jak i narzędzie `session_status` używają migawki zadań uwzględniającej czyszczenie: preferowane są aktywne zadania, nieaktualne zakończone wiersze są ukrywane, a ostatnie błędy są pokazywane tylko wtedy, gdy nie pozostała żadna aktywna praca. Dzięki temu karta statusu skupia się na tym, co jest teraz najważniejsze.
## Przechowywanie i konserwacja
-### Gdzie są przechowywane zadania
+### Gdzie przechowywane są zadania
-Rekordy zadań są przechowywane w SQLite pod adresem:
+Rekordy zadań są trwale zapisywane w SQLite pod adresem:
```
$OPENCLAW_STATE_DIR/tasks/runs.sqlite
```
-Rejestr jest ładowany do pamięci podczas uruchamiania gateway i synchronizuje zapisy do SQLite, aby zapewnić trwałość po restarcie.
+Rejestr jest ładowany do pamięci przy uruchomieniu gateway i synchronizuje zapisy do SQLite, aby zapewnić trwałość po ponownym uruchomieniu.
### Automatyczna konserwacja
-Co **60 sekund** działa proces czyszczący, który obsługuje trzy rzeczy:
+Proces czyszczący uruchamia się co **60 sekund** i obsługuje trzy rzeczy:
-1. **Uzgadnianie** — sprawdza, czy aktywne zadania nadal mają autorytatywne zaplecze środowiska uruchomieniowego. Zadania ACP/subagentów używają stanu sesji podrzędnej, zadania cron używają własności aktywnego zadania, a zadania CLI oparte na czacie używają nadrzędnego kontekstu uruchomienia. Jeśli ten stan zaplecza zniknie na dłużej niż 5 minut, zadanie zostaje oznaczone jako `lost`.
+1. **Uzgadnianie** — sprawdza, czy aktywne zadania nadal mają autorytatywne zaplecze w środowisku uruchomieniowym. Zadania ACP/podagentów używają stanu sesji podrzędnej, zadania cron używają własności aktywnego zadania, a zadania CLI powiązane z czatem używają właścicielskiego kontekstu uruchomienia. Jeśli ten stan zaplecza nie istnieje dłużej niż 5 minut, zadanie zostaje oznaczone jako `lost`.
2. **Oznaczanie czyszczenia** — ustawia znacznik czasu `cleanupAfter` dla zadań terminalnych (`endedAt + 7 days`).
-3. **Przycinanie** — usuwa rekordy po dacie `cleanupAfter`.
+3. **Usuwanie** — usuwa rekordy po dacie `cleanupAfter`.
-**Retencja**: rekordy zadań terminalnych są przechowywane przez **7 dni**, a następnie automatycznie usuwane. Nie jest wymagana żadna konfiguracja.
+**Retencja**: terminalne rekordy zadań są przechowywane przez **7 dni**, a następnie automatycznie usuwane. Nie jest wymagana żadna konfiguracja.
-## Jak zadania są powiązane z innymi systemami
+## Jak zadania odnoszą się do innych systemów
### Zadania i Task Flow
-[Task Flow](/pl/automation/taskflow) to warstwa orkiestracji przepływów nad zadaniami w tle. Pojedynczy przepływ może przez cały czas swojego życia koordynować wiele zadań, używając trybów synchronizacji zarządzanej lub lustrzanej. Użyj `openclaw tasks`, aby sprawdzić pojedyncze rekordy zadań, a `openclaw tasks flow`, aby sprawdzić orkiestrujący przepływ.
+[Task Flow](/pl/automation/taskflow) to warstwa orkiestracji przepływu ponad zadaniami w tle. Pojedynczy przepływ może w ciągu swojego cyklu życia koordynować wiele zadań, używając zarządzanych lub lustrzanych trybów synchronizacji. Użyj `openclaw tasks`, aby sprawdzić pojedyncze rekordy zadań, oraz `openclaw tasks flow`, aby sprawdzić orkiestrujący przepływ.
Szczegóły znajdziesz w [Task Flow](/pl/automation/taskflow).
### Zadania i cron
-**Definicja** zadania cron znajduje się w `~/.openclaw/cron/jobs.json`. **Każde** wykonanie cron tworzy rekord zadania — zarówno w sesji głównej, jak i izolowanej. Zadania cron w sesji głównej domyślnie używają polityki powiadomień `silent`, aby śledzić bez generowania powiadomień.
+**Definicja** zadania cron znajduje się w `~/.openclaw/cron/jobs.json`. **Każde** wykonanie cron tworzy rekord zadania — zarówno w sesji głównej, jak i izolowanej. Zadania cron w sesji głównej domyślnie używają polityki powiadomień `silent`, dzięki czemu są śledzone bez generowania powiadomień.
-Zobacz [Cron Jobs](/pl/automation/cron-jobs).
+Zobacz [Zadania cron](/pl/automation/cron-jobs).
### Zadania i heartbeat
-Uruchomienia heartbeat to tury sesji głównej — nie tworzą rekordów zadań. Gdy zadanie się kończy, może wywołać wybudzenie heartbeat, aby wynik był szybko widoczny.
+Uruchomienia heartbeat są turami sesji głównej — nie tworzą rekordów zadań. Gdy zadanie się zakończy, może wywołać wybudzenie heartbeat, aby wynik był widoczny od razu.
Zobacz [Heartbeat](/pl/gateway/heartbeat).
### Zadania i sesje
-Zadanie może odnosić się do `childSessionKey` (gdzie wykonywana jest praca) oraz `requesterSessionKey` (kto ją uruchomił). Sesje to kontekst rozmowy; zadania to warstwa śledzenia aktywności nad tym kontekstem.
+Zadanie może odwoływać się do `childSessionKey` (gdzie wykonywana jest praca) oraz `requesterSessionKey` (kto ją uruchomił). Sesje to kontekst rozmowy; zadania to warstwa śledzenia aktywności nad tym kontekstem.
-### Zadania i uruchomienia agenta
+### Zadania i uruchomienia agentów
-Pole `runId` zadania wskazuje uruchomienie agenta wykonujące pracę. Zdarzenia cyklu życia agenta (start, koniec, błąd) automatycznie aktualizują status zadania — nie musisz zarządzać cyklem życia ręcznie.
+`runId` zadania łączy je z uruchomieniem agenta wykonującym pracę. Zdarzenia cyklu życia agenta (start, koniec, błąd) automatycznie aktualizują status zadania — nie trzeba zarządzać cyklem życia ręcznie.
## Powiązane
-- [Automation & Tasks](/pl/automation) — wszystkie mechanizmy automatyzacji w skrócie
-- [Task Flow](/pl/automation/taskflow) — orkiestracja przepływów nad zadaniami
-- [Scheduled Tasks](/pl/automation/cron-jobs) — planowanie pracy w tle
+- [Automatyzacja i zadania](/pl/automation) — wszystkie mechanizmy automatyzacji w skrócie
+- [Task Flow](/pl/automation/taskflow) — orkiestracja przepływu ponad zadaniami
+- [Zaplanowane zadania](/pl/automation/cron-jobs) — harmonogramowanie pracy w tle
- [Heartbeat](/pl/gateway/heartbeat) — okresowe tury sesji głównej
-- [CLI: Tasks](/cli/index#tasks) — dokumentacja poleceń CLI
+- [CLI: Zadania](/cli/index#tasks) — dokumentacja poleceń CLI
diff --git a/docs/pl/concepts/active-memory.md b/docs/pl/concepts/active-memory.md
new file mode 100644
index 000000000..eee14ab04
--- /dev/null
+++ b/docs/pl/concepts/active-memory.md
@@ -0,0 +1,614 @@
+---
+read_when:
+ - Chcesz zrozumieć, do czego służy aktywna pamięć
+ - Chcesz włączyć aktywną pamięć dla agenta konwersacyjnego
+ - Chcesz dostroić działanie aktywnej pamięci bez włączania jej wszędzie
+summary: Podagent pamięci blokującej należący do pluginu, który wstrzykuje odpowiednią pamięć do interaktywnych sesji czatu
+title: Aktywna pamięć
+x-i18n:
+ generated_at: "2026-04-10T09:44:39Z"
+ model: gpt-5.4
+ provider: openai
+ source_hash: 6a51437df4ae4d9d57764601dfcfcdadb269e2895bf49dc82b9f496c1b3cb341
+ source_path: concepts/active-memory.md
+ workflow: 15
+---
+
+# Aktywna pamięć
+
+Aktywna pamięć to opcjonalny, należący do pluginu blokujący podagent pamięci, który uruchamia się
+przed główną odpowiedzią dla kwalifikujących się sesji konwersacyjnych.
+
+Istnieje, ponieważ większość systemów pamięci jest skuteczna, ale reaktywna. Polegają one na
+tym, że główny agent zdecyduje, kiedy przeszukać pamięć, albo na tym, że użytkownik powie coś
+w rodzaju „zapamiętaj to” lub „przeszukaj pamięć”. W tym momencie chwila, w której pamięć
+sprawiłaby, że odpowiedź byłaby naturalna, już minęła.
+
+Aktywna pamięć daje systemowi jedną ograniczoną szansę na wydobycie istotnej pamięci
+przed wygenerowaniem głównej odpowiedzi.
+
+## Wklej to do swojego agenta
+
+Wklej to do swojego agenta, jeśli chcesz włączyć Aktywną pamięć z
+samowystarczalną konfiguracją z bezpiecznymi ustawieniami domyślnymi:
+
+```json5
+{
+ plugins: {
+ entries: {
+ "active-memory": {
+ enabled: true,
+ config: {
+ enabled: true,
+ agents: ["main"],
+ allowedChatTypes: ["direct"],
+ modelFallbackPolicy: "default-remote",
+ queryMode: "recent",
+ promptStyle: "balanced",
+ timeoutMs: 15000,
+ maxSummaryChars: 220,
+ persistTranscripts: false,
+ logging: true,
+ },
+ },
+ },
+ },
+}
+```
+
+To włącza plugin dla agenta `main`, domyślnie ogranicza go do sesji
+w stylu wiadomości bezpośrednich, pozwala mu najpierw dziedziczyć bieżący model sesji, a
+także nadal dopuszcza wbudowany zdalny mechanizm awaryjny, jeśli nie jest dostępny
+żaden jawny ani odziedziczony model.
+
+Następnie uruchom ponownie gateway:
+
+```bash
+node scripts/run-node.mjs gateway --profile dev
+```
+
+Aby obserwować to na żywo w rozmowie:
+
+```text
+/verbose on
+```
+
+## Włącz aktywną pamięć
+
+Najbezpieczniejsza konfiguracja to:
+
+1. włączenie pluginu
+2. wskazanie jednego agenta konwersacyjnego
+3. pozostawienie logowania włączonego tylko podczas dostrajania
+
+Zacznij od tego w `openclaw.json`:
+
+```json5
+{
+ plugins: {
+ entries: {
+ "active-memory": {
+ enabled: true,
+ config: {
+ agents: ["main"],
+ allowedChatTypes: ["direct"],
+ modelFallbackPolicy: "default-remote",
+ queryMode: "recent",
+ promptStyle: "balanced",
+ timeoutMs: 15000,
+ maxSummaryChars: 220,
+ persistTranscripts: false,
+ logging: true,
+ },
+ },
+ },
+ },
+}
+```
+
+Następnie uruchom ponownie gateway:
+
+```bash
+node scripts/run-node.mjs gateway --profile dev
+```
+
+Co to oznacza:
+
+- `plugins.entries.active-memory.enabled: true` włącza plugin
+- `config.agents: ["main"]` włącza aktywną pamięć tylko dla agenta `main`
+- `config.allowedChatTypes: ["direct"]` domyślnie utrzymuje aktywną pamięć tylko dla sesji w stylu wiadomości bezpośrednich
+- jeśli `config.model` nie jest ustawione, aktywna pamięć najpierw dziedziczy bieżący model sesji
+- `config.modelFallbackPolicy: "default-remote"` pozostawia wbudowany zdalny mechanizm awaryjny jako domyślny, gdy nie jest dostępny żaden jawny ani odziedziczony model
+- `config.promptStyle: "balanced"` używa domyślnego, ogólnego stylu promptu dla trybu `recent`
+- aktywna pamięć nadal działa tylko w kwalifikujących się interaktywnych trwałych sesjach czatu
+
+## Jak to zobaczyć
+
+Aktywna pamięć wstrzykuje ukryty kontekst systemowy dla modelu. Nie ujawnia
+surowych tagów `...` klientowi.
+
+## Przełącznik sesji
+
+Użyj polecenia pluginu, jeśli chcesz wstrzymać lub wznowić aktywną pamięć dla
+bieżącej sesji czatu bez edytowania konfiguracji:
+
+```text
+/active-memory status
+/active-memory off
+/active-memory on
+```
+
+To ustawienie dotyczy zakresu sesji. Nie zmienia
+`plugins.entries.active-memory.enabled`, wyboru agenta ani innej globalnej
+konfiguracji.
+
+Jeśli chcesz, aby polecenie zapisało konfigurację oraz wstrzymało lub wznowiło aktywną pamięć
+dla wszystkich sesji, użyj jawnej formy globalnej:
+
+```text
+/active-memory status --global
+/active-memory off --global
+/active-memory on --global
+```
+
+Forma globalna zapisuje `plugins.entries.active-memory.config.enabled`. Pozostawia
+`plugins.entries.active-memory.enabled` włączone, aby polecenie nadal było dostępne i można było
+ponownie włączyć aktywną pamięć później.
+
+Jeśli chcesz zobaczyć, co aktywna pamięć robi w sesji na żywo, włącz tryb
+szczegółowy dla tej sesji:
+
+```text
+/verbose on
+```
+
+Gdy tryb szczegółowy jest włączony, OpenClaw może pokazać:
+
+- wiersz stanu aktywnej pamięci, taki jak `Active Memory: ok 842ms recent 34 chars`
+- czytelne podsumowanie debugowania, takie jak `Active Memory Debug: Lemon pepper wings with blue cheese.`
+
+Te wiersze pochodzą z tego samego przebiegu aktywnej pamięci, który zasila ukryty
+kontekst systemowy, ale są sformatowane dla ludzi zamiast ujawniać surowe
+znaczniki promptu.
+
+Domyślnie transkrypt blokującego podagenta pamięci jest tymczasowy i usuwany
+po zakończeniu działania.
+
+Przykładowy przebieg:
+
+```text
+/verbose on
+what wings should i order?
+```
+
+Oczekiwany widoczny kształt odpowiedzi:
+
+```text
+...normal assistant reply...
+
+🧩 Active Memory: ok 842ms recent 34 chars
+🔎 Active Memory Debug: Lemon pepper wings with blue cheese.
+```
+
+## Kiedy się uruchamia
+
+Aktywna pamięć używa dwóch bramek:
+
+1. **Włączenie w konfiguracji**
+ Plugin musi być włączony, a identyfikator bieżącego agenta musi występować w
+ `plugins.entries.active-memory.config.agents`.
+2. **Ścisła kwalifikacja w czasie działania**
+ Nawet gdy jest włączona i skierowana do danego agenta, aktywna pamięć działa tylko dla
+ kwalifikujących się interaktywnych trwałych sesji czatu.
+
+Rzeczywista reguła jest następująca:
+
+```text
+plugin enabled
++
+agent id targeted
++
+allowed chat type
++
+eligible interactive persistent chat session
+=
+active memory runs
+```
+
+Jeśli którykolwiek z tych warunków nie jest spełniony, aktywna pamięć się nie uruchamia.
+
+## Typy sesji
+
+`config.allowedChatTypes` kontroluje, w jakich rodzajach rozmów Aktywna
+Pamięć może się w ogóle uruchamiać.
+
+Wartość domyślna to:
+
+```json5
+allowedChatTypes: ["direct"]
+```
+
+Oznacza to, że Aktywna pamięć domyślnie działa w sesjach w stylu wiadomości bezpośrednich, ale
+nie w sesjach grupowych ani kanałowych, chyba że jawnie je włączysz.
+
+Przykłady:
+
+```json5
+allowedChatTypes: ["direct"]
+```
+
+```json5
+allowedChatTypes: ["direct", "group"]
+```
+
+```json5
+allowedChatTypes: ["direct", "group", "channel"]
+```
+
+## Gdzie działa
+
+Aktywna pamięć to funkcja wzbogacająca rozmowę, a nie ogólnoplatformowa
+funkcja inferencji.
+
+| Surface | Runs active memory? |
+| ------------------------------------------------------------------- | ------------------------------------------------------- |
+| Control UI / web chat persistent sessions | Yes, if the plugin is enabled and the agent is targeted |
+| Other interactive channel sessions on the same persistent chat path | Yes, if the plugin is enabled and the agent is targeted |
+| Headless one-shot runs | No |
+| Heartbeat/background runs | No |
+| Generic internal `agent-command` paths | No |
+| Sub-agent/internal helper execution | No |
+
+## Dlaczego warto tego używać
+
+Używaj aktywnej pamięci, gdy:
+
+- sesja jest trwała i skierowana do użytkownika
+- agent ma istotną pamięć długoterminową do przeszukania
+- ciągłość i personalizacja są ważniejsze niż pełna deterministyczność promptu
+
+Sprawdza się szczególnie dobrze w przypadku:
+
+- stałych preferencji
+- powtarzających się nawyków
+- długoterminowego kontekstu użytkownika, który powinien naturalnie się pojawiać
+
+Nie jest dobrym wyborem dla:
+
+- automatyzacji
+- wewnętrznych workerów
+- jednorazowych zadań API
+- miejsc, w których ukryta personalizacja byłaby zaskakująca
+
+## Jak to działa
+
+Kształt działania w czasie wykonywania jest następujący:
+
+```mermaid
+flowchart LR
+ U["User Message"] --> Q["Build Memory Query"]
+ Q --> R["Active Memory Blocking Memory Sub-Agent"]
+ R -->|NONE or empty| M["Main Reply"]
+ R -->|relevant summary| I["Append Hidden active_memory_plugin System Context"]
+ I --> M["Main Reply"]
+```
+
+Blokujący podagent pamięci może używać tylko:
+
+- `memory_search`
+- `memory_get`
+
+Jeśli połączenie jest słabe, powinien zwrócić `NONE`.
+
+## Tryby zapytań
+
+`config.queryMode` kontroluje, jak dużą część rozmowy widzi blokujący podagent pamięci.
+
+## Style promptu
+
+`config.promptStyle` kontroluje, jak chętnie lub rygorystycznie blokujący podagent pamięci
+decyduje o tym, czy zwrócić pamięć.
+
+Dostępne style:
+
+- `balanced`: domyślne ustawienie ogólnego przeznaczenia dla trybu `recent`
+- `strict`: najmniej skłonny; najlepszy, gdy chcesz bardzo małego przenikania z pobliskiego kontekstu
+- `contextual`: najbardziej przyjazny dla ciągłości; najlepszy, gdy historia rozmowy powinna mieć większe znaczenie
+- `recall-heavy`: bardziej skłonny do wydobywania pamięci przy słabszych, ale nadal wiarygodnych dopasowaniach
+- `precision-heavy`: zdecydowanie preferuje `NONE`, chyba że dopasowanie jest oczywiste
+- `preference-only`: zoptymalizowany pod ulubione rzeczy, nawyki, rutyny, gust i powtarzające się fakty osobiste
+
+Domyślne mapowanie, gdy `config.promptStyle` nie jest ustawione:
+
+```text
+message -> strict
+recent -> balanced
+full -> contextual
+```
+
+Jeśli jawnie ustawisz `config.promptStyle`, to nadpisanie ma pierwszeństwo.
+
+Przykład:
+
+```json5
+promptStyle: "preference-only"
+```
+
+## Zasady mechanizmu awaryjnego modelu
+
+Jeśli `config.model` nie jest ustawione, Aktywna pamięć próbuje rozwiązać model w tej kolejności:
+
+```text
+explicit plugin model
+-> current session model
+-> agent primary model
+-> optional built-in remote fallback
+```
+
+`config.modelFallbackPolicy` kontroluje ostatni krok.
+
+Wartość domyślna:
+
+```json5
+modelFallbackPolicy: "default-remote"
+```
+
+Inna opcja:
+
+```json5
+modelFallbackPolicy: "resolved-only"
+```
+
+Użyj `resolved-only`, jeśli chcesz, aby Aktywna pamięć pomijała przywoływanie zamiast
+korzystać z wbudowanego zdalnego domyślnego mechanizmu awaryjnego, gdy nie jest dostępny
+żaden jawny ani odziedziczony model.
+
+## Zaawansowane mechanizmy awaryjne
+
+Te opcje celowo nie są częścią zalecanej konfiguracji.
+
+`config.thinking` może nadpisać poziom myślenia blokującego podagenta pamięci:
+
+```json5
+thinking: "medium"
+```
+
+Wartość domyślna:
+
+```json5
+thinking: "off"
+```
+
+Nie włączaj tego domyślnie. Aktywna pamięć działa na ścieżce odpowiedzi, więc dodatkowy
+czas myślenia bezpośrednio zwiększa opóźnienie widoczne dla użytkownika.
+
+`config.promptAppend` dodaje dodatkowe instrukcje operatora po domyślnym
+prompcie Aktywnej pamięci i przed kontekstem rozmowy:
+
+```json5
+promptAppend: "Prefer stable long-term preferences over one-off events."
+```
+
+`config.promptOverride` zastępuje domyślny prompt Aktywnej pamięci. OpenClaw
+nadal dołącza później kontekst rozmowy:
+
+```json5
+promptOverride: "You are a memory search agent. Return NONE or one compact user fact."
+```
+
+Dostosowywanie promptu nie jest zalecane, chyba że celowo testujesz inny
+kontrakt przywoływania. Domyślny prompt jest dostrojony tak, aby zwracać `NONE`
+albo zwięzły kontekst faktów o użytkowniku dla głównego modelu.
+
+### `message`
+
+Wysyłana jest tylko najnowsza wiadomość użytkownika.
+
+```text
+Latest user message only
+```
+
+Użyj tego, gdy:
+
+- chcesz najszybszego działania
+- chcesz najsilniejszego nastawienia na przywoływanie stabilnych preferencji
+- kolejne tury nie wymagają kontekstu rozmowy
+
+Zalecany limit czasu:
+
+- zacznij od około `3000` do `5000` ms
+
+### `recent`
+
+Wysyłana jest najnowsza wiadomość użytkownika wraz z niewielkim ogonem ostatniej rozmowy.
+
+```text
+Recent conversation tail:
+user: ...
+assistant: ...
+user: ...
+
+Latest user message:
+...
+```
+
+Użyj tego, gdy:
+
+- chcesz lepszej równowagi między szybkością a osadzeniem w rozmowie
+- pytania uzupełniające często zależą od kilku ostatnich tur
+
+Zalecany limit czasu:
+
+- zacznij od około `15000` ms
+
+### `full`
+
+Do blokującego podagenta pamięci wysyłana jest cała rozmowa.
+
+```text
+Full conversation context:
+user: ...
+assistant: ...
+user: ...
+...
+```
+
+Użyj tego, gdy:
+
+- najwyższa jakość przywoływania jest ważniejsza niż opóźnienie
+- rozmowa zawiera istotne przygotowanie daleko wcześniej w wątku
+
+Zalecany limit czasu:
+
+- zwiększ go znacząco w porównaniu z `message` lub `recent`
+- zacznij od około `15000` ms lub więcej, w zależności od rozmiaru wątku
+
+Ogólnie limit czasu powinien rosnąć wraz z rozmiarem kontekstu:
+
+```text
+message < recent < full
+```
+
+## Trwałość transkryptów
+
+Uruchomienia blokującego podagenta pamięci aktywnej pamięci tworzą rzeczywisty
+transkrypt `session.jsonl` podczas wywołania blokującego podagenta pamięci.
+
+Domyślnie ten transkrypt jest tymczasowy:
+
+- jest zapisywany w katalogu tymczasowym
+- jest używany tylko na potrzeby uruchomienia blokującego podagenta pamięci
+- jest usuwany natychmiast po zakończeniu działania
+
+Jeśli chcesz zachować te transkrypty blokującego podagenta pamięci na dysku do debugowania lub
+inspekcji, jawnie włącz ich trwałość:
+
+```json5
+{
+ plugins: {
+ entries: {
+ "active-memory": {
+ enabled: true,
+ config: {
+ agents: ["main"],
+ persistTranscripts: true,
+ transcriptDir: "active-memory",
+ },
+ },
+ },
+ },
+}
+```
+
+Po włączeniu aktywna pamięć zapisuje transkrypty w osobnym katalogu w folderze
+sesji docelowego agenta, a nie w głównej ścieżce transkryptu rozmowy użytkownika.
+
+Domyślny układ wygląda koncepcyjnie tak:
+
+```text
+agents//sessions/active-memory/.jsonl
+```
+
+Możesz zmienić względny podkatalog za pomocą `config.transcriptDir`.
+
+Używaj tego ostrożnie:
+
+- transkrypty blokującego podagenta pamięci mogą szybko się gromadzić w aktywnych sesjach
+- tryb zapytań `full` może duplikować dużą część kontekstu rozmowy
+- te transkrypty zawierają ukryty kontekst promptu i przywołane wspomnienia
+
+## Konfiguracja
+
+Cała konfiguracja aktywnej pamięci znajduje się pod:
+
+```text
+plugins.entries.active-memory
+```
+
+Najważniejsze pola to:
+
+| Klucz | Typ | Znaczenie |
+| --------------------------- | ---------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------ |
+| `enabled` | `boolean` | Włącza sam plugin |
+| `config.agents` | `string[]` | Identyfikatory agentów, które mogą używać aktywnej pamięci |
+| `config.model` | `string` | Opcjonalne odwołanie do modelu blokującego podagenta pamięci; gdy nie jest ustawione, aktywna pamięć używa bieżącego modelu sesji |
+| `config.queryMode` | `"message" \| "recent" \| "full"` | Określa, jak dużą część rozmowy widzi blokujący podagent pamięci |
+| `config.promptStyle` | `"balanced" \| "strict" \| "contextual" \| "recall-heavy" \| "precision-heavy" \| "preference-only"` | Określa, jak chętnie lub rygorystycznie blokujący podagent pamięci decyduje, czy zwrócić pamięć |
+| `config.thinking` | `"off" \| "minimal" \| "low" \| "medium" \| "high" \| "xhigh" \| "adaptive"` | Zaawansowane nadpisanie poziomu myślenia dla blokującego podagenta pamięci; domyślnie `off` dla szybkości |
+| `config.promptOverride` | `string` | Zaawansowana pełna zamiana promptu; niezalecana do zwykłego użycia |
+| `config.promptAppend` | `string` | Zaawansowane dodatkowe instrukcje dołączane do domyślnego lub nadpisanego promptu |
+| `config.timeoutMs` | `number` | Twardy limit czasu dla blokującego podagenta pamięci |
+| `config.maxSummaryChars` | `number` | Maksymalna łączna liczba znaków dozwolona w podsumowaniu active-memory |
+| `config.logging` | `boolean` | Emituje logi aktywnej pamięci podczas dostrajania |
+| `config.persistTranscripts` | `boolean` | Zachowuje transkrypty blokującego podagenta pamięci na dysku zamiast usuwać pliki tymczasowe |
+| `config.transcriptDir` | `string` | Względny katalog transkryptów blokującego podagenta pamięci w folderze sesji agenta |
+
+Przydatne pola do dostrajania:
+
+| Klucz | Typ | Znaczenie |
+| ----------------------------- | -------- | ---------------------------------------------------------------- |
+| `config.maxSummaryChars` | `number` | Maksymalna łączna liczba znaków dozwolona w podsumowaniu active-memory |
+| `config.recentUserTurns` | `number` | Poprzednie tury użytkownika do uwzględnienia, gdy `queryMode` ma wartość `recent` |
+| `config.recentAssistantTurns` | `number` | Poprzednie tury asystenta do uwzględnienia, gdy `queryMode` ma wartość `recent` |
+| `config.recentUserChars` | `number` | Maksymalna liczba znaków na ostatnią turę użytkownika |
+| `config.recentAssistantChars` | `number` | Maksymalna liczba znaków na ostatnią turę asystenta |
+| `config.cacheTtlMs` | `number` | Ponowne użycie pamięci podręcznej dla powtarzających się identycznych zapytań |
+
+## Zalecana konfiguracja
+
+Zacznij od `recent`.
+
+```json5
+{
+ plugins: {
+ entries: {
+ "active-memory": {
+ enabled: true,
+ config: {
+ agents: ["main"],
+ queryMode: "recent",
+ promptStyle: "balanced",
+ timeoutMs: 15000,
+ maxSummaryChars: 220,
+ logging: true,
+ },
+ },
+ },
+ },
+}
+```
+
+Jeśli chcesz sprawdzić działanie na żywo podczas dostrajania, użyj `/verbose on` w
+sesji zamiast szukać osobnego polecenia debugowania active-memory.
+
+Następnie przejdź do:
+
+- `message`, jeśli chcesz mniejszych opóźnień
+- `full`, jeśli uznasz, że dodatkowy kontekst jest wart wolniejszego blokującego podagenta pamięci
+
+## Debugowanie
+
+Jeśli aktywna pamięć nie pojawia się tam, gdzie się spodziewasz:
+
+1. Potwierdź, że plugin jest włączony w `plugins.entries.active-memory.enabled`.
+2. Potwierdź, że identyfikator bieżącego agenta znajduje się w `config.agents`.
+3. Potwierdź, że testujesz przez interaktywną trwałą sesję czatu.
+4. Włącz `config.logging: true` i obserwuj logi gateway.
+5. Sprawdź, czy samo wyszukiwanie pamięci działa, używając `openclaw memory status --deep`.
+
+Jeśli trafienia pamięci są zbyt zaszumione, zaostrz:
+
+- `maxSummaryChars`
+
+Jeśli aktywna pamięć jest zbyt wolna:
+
+- obniż `queryMode`
+- obniż `timeoutMs`
+- zmniejsz liczbę ostatnich tur
+- zmniejsz limity znaków na turę
+
+## Powiązane strony
+
+- [Wyszukiwanie w pamięci](/pl/concepts/memory-search)
+- [Dokumentacja konfiguracji pamięci](/pl/reference/memory-config)
+- [Konfiguracja Plugin SDK](/pl/plugins/sdk-setup)
diff --git a/docs/pl/concepts/agent-loop.md b/docs/pl/concepts/agent-loop.md
index 6ebfbf364..687bba426 100644
--- a/docs/pl/concepts/agent-loop.md
+++ b/docs/pl/concepts/agent-loop.md
@@ -4,40 +4,39 @@ read_when:
summary: Cykl życia pętli agenta, strumienie i semantyka oczekiwania
title: Pętla agenta
x-i18n:
- generated_at: "2026-04-09T01:27:54Z"
+ generated_at: "2026-04-10T09:44:34Z"
model: gpt-5.4
provider: openai
- source_hash: 32d3a73df8dabf449211a6183a70dcfd2a9b6f584dc76d0c4c9147582b2ca6a1
+ source_hash: b6831a5b11e9100e49f650feca51ab44a2bef242ce1b5db2766d0b3b5c5ba729
source_path: concepts/agent-loop.md
workflow: 15
---
# Pętla agenta (OpenClaw)
-Pętla agentowa to pełny „rzeczywisty” przebieg działania agenta: przyjęcie danych wejściowych → złożenie kontekstu → wnioskowanie modelu →
-wykonanie narzędzi → strumieniowanie odpowiedzi → utrwalenie. To autorytatywna ścieżka, która przekształca wiadomość
-w działania i końcową odpowiedź, jednocześnie utrzymując spójny stan sesji.
+Pętla agenta to pełny, „rzeczywisty” przebieg działania agenta: przyjęcie danych wejściowych → złożenie kontekstu → wnioskowanie modelu →
+wykonanie narzędzi → strumieniowanie odpowiedzi → utrwalenie. To autorytatywna ścieżka, która zamienia wiadomość
+w działania i końcową odpowiedź, przy zachowaniu spójnego stanu sesji.
-W OpenClaw pętla to pojedynczy, serializowany przebieg na sesję, który emituje zdarzenia cyklu życia i strumieni
-gdy model myśli, wywołuje narzędzia i strumieniuje dane wyjściowe. Ten dokument wyjaśnia, jak ta rzeczywista pętla
-jest połączona od początku do końca.
+W OpenClaw pętla to pojedynczy, serializowany przebieg na sesję, który emituje zdarzenia cyklu życia i zdarzenia strumienia,
+gdy model analizuje, wywołuje narzędzia i strumieniuje wynik. Ten dokument wyjaśnia, jak ta rzeczywista pętla jest połączona od początku do końca.
## Punkty wejścia
- Gateway RPC: `agent` i `agent.wait`.
- CLI: polecenie `agent`.
-## Jak to działa (na wysokim poziomie)
+## Jak to działa (wysoki poziom)
-1. RPC `agent` weryfikuje parametry, rozwiązuje sesję (sessionKey/sessionId), utrwala metadane sesji i natychmiast zwraca `{ runId, acceptedAt }`.
+1. RPC `agent` sprawdza poprawność parametrów, rozpoznaje sesję (sessionKey/sessionId), utrwala metadane sesji i natychmiast zwraca `{ runId, acceptedAt }`.
2. `agentCommand` uruchamia agenta:
- - rozwiązuje domyślne wartości modelu + thinking/verbose
+ - rozpoznaje model + domyślne wartości thinking/verbose
- ładuje migawkę Skills
- wywołuje `runEmbeddedPiAgent` (środowisko uruchomieniowe pi-agent-core)
- - emituje **koniec/błąd cyklu życia**, jeśli osadzona pętla tego nie wyemituje
+ - emituje **lifecycle end/error**, jeśli osadzona pętla sama go nie emituje
3. `runEmbeddedPiAgent`:
- serializuje przebiegi przez kolejki per sesja i globalne
- - rozwiązuje profil modelu + auth i buduje sesję pi
+ - rozpoznaje model + profil uwierzytelniania i buduje sesję Pi
- subskrybuje zdarzenia pi i strumieniuje delty asystenta/narzędzi
- wymusza limit czasu -> przerywa przebieg po jego przekroczeniu
- zwraca ładunki + metadane użycia
@@ -46,28 +45,28 @@ jest połączona od początku do końca.
- delty asystenta => `stream: "assistant"`
- zdarzenia cyklu życia => `stream: "lifecycle"` (`phase: "start" | "end" | "error"`)
5. `agent.wait` używa `waitForAgentRun`:
- - czeka na **koniec/błąd cyklu życia** dla `runId`
+ - czeka na **lifecycle end/error** dla `runId`
- zwraca `{ status: ok|error|timeout, startedAt, endedAt, error? }`
## Kolejkowanie + współbieżność
-- Przebiegi są serializowane dla każdego klucza sesji (pas sesji) i opcjonalnie przez pas globalny.
+- Przebiegi są serializowane dla każdego klucza sesji (pas sesji) i opcjonalnie przez globalny pas.
- Zapobiega to wyścigom narzędzi/sesji i utrzymuje spójną historię sesji.
- Kanały wiadomości mogą wybierać tryby kolejki (collect/steer/followup), które zasilają ten system pasów.
- Zobacz [Kolejka poleceń](/pl/concepts/queue).
+ Zobacz [Command Queue](/pl/concepts/queue).
-## Przygotowanie sesji + przestrzeni roboczej
+## Przygotowanie sesji + obszaru roboczego
-- Przestrzeń robocza jest rozwiązywana i tworzona; przebiegi sandboxowane mogą przekierowywać do katalogu głównego przestrzeni roboczej sandboxa.
-- Skills są ładowane (lub ponownie używane z migawki) i wstrzykiwane do env oraz promptu.
-- Pliki bootstrap/kontekstu są rozwiązywane i wstrzykiwane do raportu promptu systemowego.
-- Uzyskiwana jest blokada zapisu sesji; `SessionManager` jest otwierany i przygotowywany przed strumieniowaniem.
+- Obszar roboczy jest rozpoznawany i tworzony; przebiegi piaskownicowane mogą zostać przekierowane do katalogu głównego obszaru roboczego sandboxa.
+- Skills są ładowane (lub ponownie używane z migawki) i wstrzykiwane do środowiska oraz promptu.
+- Pliki bootstrap/context są rozpoznawane i wstrzykiwane do raportu promptu systemowego.
+- Uzyskiwana jest blokada zapisu sesji; `SessionManager` jest otwierany i przygotowywany przed rozpoczęciem strumieniowania.
## Składanie promptu + prompt systemowy
-- Prompt systemowy jest budowany z bazowego promptu OpenClaw, promptu Skills, kontekstu bootstrap i nadpisań dla przebiegu.
-- Wymuszane są limity specyficzne dla modelu i tokeny rezerwowe dla kompaktowania.
-- Zobacz [Prompt systemowy](/pl/concepts/system-prompt), aby sprawdzić, co widzi model.
+- Prompt systemowy jest budowany na podstawie bazowego promptu OpenClaw, promptu Skills, kontekstu bootstrap i nadpisań dla danego przebiegu.
+- Wymuszane są limity specyficzne dla modelu oraz rezerwa tokenów na kompaktowanie.
+- Zobacz [System prompt](/pl/concepts/system-prompt), aby sprawdzić, co widzi model.
## Punkty hooków (gdzie można przechwycić)
@@ -78,71 +77,70 @@ OpenClaw ma dwa systemy hooków:
### Hooki wewnętrzne (hooki Gateway)
-- **`agent:bootstrap`**: uruchamia się podczas budowania plików bootstrap przed finalizacją promptu systemowego.
+- **`agent:bootstrap`**: uruchamia się podczas budowania plików bootstrap, zanim prompt systemowy zostanie ostatecznie sfinalizowany.
Użyj tego, aby dodawać/usuwać pliki kontekstu bootstrap.
-- **Hooki poleceń**: `/new`, `/reset`, `/stop` i inne zdarzenia poleceń (zobacz dokumentację hooków).
+- **Hooki poleceń**: `/new`, `/reset`, `/stop` i inne zdarzenia poleceń (zobacz dokumentację Hooks).
-Zobacz [Hooki](/pl/automation/hooks), aby sprawdzić konfigurację i przykłady.
+Zobacz [Hooks](/pl/automation/hooks), aby poznać konfigurację i przykłady.
### Hooki pluginów (cykl życia agenta + gateway)
-Uruchamiają się wewnątrz pętli agenta lub potoku gateway:
+Są uruchamiane wewnątrz pętli agenta lub potoku gateway:
-- **`before_model_resolve`**: uruchamia się przed sesją (bez `messages`), aby deterministycznie nadpisać dostawcę/model przed rozwiązywaniem modelu.
-- **`before_prompt_build`**: uruchamia się po załadowaniu sesji (z `messages`), aby wstrzyknąć `prependContext`, `systemPrompt`, `prependSystemContext` lub `appendSystemContext` przed wysłaniem promptu. Używaj `prependContext` dla dynamicznego tekstu per tura, a pól kontekstu systemowego dla stabilnych wskazówek, które powinny znajdować się w przestrzeni promptu systemowego.
-- **`before_agent_start`**: hook zgodności wstecznej; może uruchamiać się w obu fazach; preferuj powyższe jawne hooki.
-- **`before_agent_reply`**: uruchamia się po działaniach inline i przed wywołaniem LLM, pozwalając pluginowi przejąć turę i zwrócić syntetyczną odpowiedź lub całkowicie wyciszyć turę.
-- **`agent_end`**: sprawdza końcową listę wiadomości i metadane przebiegu po zakończeniu.
+- **`before_model_resolve`**: uruchamia się przed sesją (bez `messages`), aby deterministycznie nadpisać dostawcę/model przed rozpoznaniem modelu.
+- **`before_prompt_build`**: uruchamia się po załadowaniu sesji (z `messages`), aby wstrzyknąć `prependContext`, `systemPrompt`, `prependSystemContext` lub `appendSystemContext` przed wysłaniem promptu. Używaj `prependContext` do dynamicznego tekstu dla danego obrotu i pól kontekstu systemowego do stabilnych wskazówek, które powinny znajdować się w obszarze promptu systemowego.
+- **`before_agent_start`**: hook zgodności wstecznej; może uruchamiać się w obu fazach — preferuj powyższe jawne hooki.
+- **`before_agent_reply`**: uruchamia się po działaniach inline i przed wywołaniem LLM, pozwalając pluginowi przejąć obrót i zwrócić syntetyczną odpowiedź lub całkowicie wyciszyć obrót.
+- **`agent_end`**: umożliwia inspekcję końcowej listy wiadomości i metadanych przebiegu po zakończeniu.
- **`before_compaction` / `after_compaction`**: obserwują lub opisują cykle kompaktowania.
- **`before_tool_call` / `after_tool_call`**: przechwytują parametry/wyniki narzędzi.
-- **`before_install`**: sprawdza wbudowane wyniki skanowania i opcjonalnie blokuje instalacje skillów lub pluginów.
+- **`before_install`**: umożliwia inspekcję wyników wbudowanego skanowania i opcjonalne blokowanie instalacji Skills lub pluginów.
- **`tool_result_persist`**: synchronicznie przekształca wyniki narzędzi przed zapisaniem ich do transkryptu sesji.
- **`message_received` / `message_sending` / `message_sent`**: hooki wiadomości przychodzących i wychodzących.
- **`session_start` / `session_end`**: granice cyklu życia sesji.
- **`gateway_start` / `gateway_stop`**: zdarzenia cyklu życia gateway.
-Zasady decyzji hooków dla zabezpieczeń wychodzących/narzędzi:
+Zasady podejmowania decyzji przez hooki dla zabezpieczeń wiadomości wychodzących/narzędzi:
-- `before_tool_call`: `{ block: true }` jest końcowe i zatrzymuje handlery o niższym priorytecie.
+- `before_tool_call`: `{ block: true }` jest terminalne i zatrzymuje handlery o niższym priorytecie.
- `before_tool_call`: `{ block: false }` nic nie robi i nie usuwa wcześniejszej blokady.
-- `before_install`: `{ block: true }` jest końcowe i zatrzymuje handlery o niższym priorytecie.
+- `before_install`: `{ block: true }` jest terminalne i zatrzymuje handlery o niższym priorytecie.
- `before_install`: `{ block: false }` nic nie robi i nie usuwa wcześniejszej blokady.
-- `message_sending`: `{ cancel: true }` jest końcowe i zatrzymuje handlery o niższym priorytecie.
+- `message_sending`: `{ cancel: true }` jest terminalne i zatrzymuje handlery o niższym priorytecie.
- `message_sending`: `{ cancel: false }` nic nie robi i nie usuwa wcześniejszego anulowania.
-Zobacz [Hooki pluginów](/pl/plugins/architecture#provider-runtime-hooks), aby sprawdzić API hooków i szczegóły rejestracji.
+Zobacz [Plugin hooks](/pl/plugins/architecture#provider-runtime-hooks), aby poznać API hooków i szczegóły rejestracji.
## Strumieniowanie + odpowiedzi częściowe
- Delty asystenta są strumieniowane z pi-agent-core i emitowane jako zdarzenia `assistant`.
-- Strumieniowanie bloków może emitować odpowiedzi częściowe na `text_end` lub `message_end`.
+- Strumieniowanie bloków może emitować odpowiedzi częściowe przy `text_end` lub `message_end`.
- Strumieniowanie rozumowania może być emitowane jako osobny strumień lub jako odpowiedzi blokowe.
-- Zobacz [Strumieniowanie](/pl/concepts/streaming), aby sprawdzić dzielenie na fragmenty i zachowanie odpowiedzi blokowych.
+- Zobacz [Streaming](/pl/concepts/streaming), aby poznać zachowanie fragmentacji i odpowiedzi blokowych.
-## Wykonanie narzędzi + narzędzia do wiadomości
+## Wykonywanie narzędzi + narzędzia wiadomości
-- Zdarzenia start/aktualizacja/koniec narzędzi są emitowane w strumieniu `tool`.
-- Wyniki narzędzi są sanitizowane pod kątem rozmiaru i ładunków obrazów przed logowaniem/emisją.
-- Wysłania narzędzi do wiadomości są śledzone, aby wyeliminować zduplikowane potwierdzenia asystenta.
+- Zdarzenia start/update/end narzędzi są emitowane w strumieniu `tool`.
+- Wyniki narzędzi są oczyszczane pod kątem rozmiaru i ładunków obrazów przed logowaniem/emisją.
+- Wysłania przez narzędzia wiadomości są śledzone, aby tłumić zduplikowane potwierdzenia asystenta.
-## Kształtowanie odpowiedzi + wyciszanie
+## Kształtowanie odpowiedzi + tłumienie
- Końcowe ładunki są składane z:
- tekstu asystenta (i opcjonalnie rozumowania)
- - podsumowań narzędzi inline (gdy verbose + dozwolone)
- - tekstu błędu asystenta, gdy model zwraca błąd
-- Dokładny token wyciszenia `NO_REPLY` / `no_reply` jest odfiltrowywany z wychodzących
+ - podsumowań narzędzi inline (gdy `verbose` jest włączone i dozwolone)
+ - tekstu błędu asystenta, gdy model zwróci błąd
+- Dokładny cichy token `NO_REPLY` / `no_reply` jest odfiltrowywany z wychodzących
ładunków.
-- Duplikaty narzędzi do wiadomości są usuwane z końcowej listy ładunków.
-- Jeśli nie pozostaną żadne renderowalne ładunki, a narzędzie zwróciło błąd, emitowana jest
- zapasowa odpowiedź błędu narzędzia
- (chyba że narzędzie do wiadomości już wysłało widoczną dla użytkownika odpowiedź).
+- Duplikaty z narzędzi wiadomości są usuwane z końcowej listy ładunków.
+- Jeśli nie pozostaną żadne renderowalne ładunki, a narzędzie zwróciło błąd, emitowana jest zapasowa odpowiedź błędu narzędzia
+ (chyba że narzędzie wiadomości wysłało już odpowiedź widoczną dla użytkownika).
## Kompaktowanie + ponowienia
- Automatyczne kompaktowanie emituje zdarzenia strumienia `compaction` i może wywołać ponowienie.
- Przy ponowieniu bufory w pamięci i podsumowania narzędzi są resetowane, aby uniknąć zduplikowanego wyjścia.
-- Zobacz [Kompaktowanie](/pl/concepts/compaction), aby sprawdzić potok kompaktowania.
+- Zobacz [Compaction](/pl/concepts/compaction), aby poznać potok kompaktowania.
## Strumienie zdarzeń (obecnie)
@@ -152,14 +150,14 @@ Zobacz [Hooki pluginów](/pl/plugins/architecture#provider-runtime-hooks), aby s
## Obsługa kanału czatu
-- Delty asystenta są buforowane do wiadomości czatu `delta`.
-- Końcowa wiadomość czatu `final` jest emitowana przy **końcu/błędzie cyklu życia**.
+- Delty asystenta są buforowane do komunikatów czatu `delta`.
+- Końcowy komunikat czatu `final` jest emitowany przy **lifecycle end/error**.
## Limity czasu
-- Domyślnie `agent.wait`: 30 s (tylko oczekiwanie). Parametr `timeoutMs` nadpisuje tę wartość.
-- Czas działania agenta: domyślnie `agents.defaults.timeoutSeconds` to 172800 s (48 godzin); wymuszany przez licznik przerwania w `runEmbeddedPiAgent`.
-- Limit bezczynności LLM: `agents.defaults.llm.idleTimeoutSeconds` przerywa żądanie modelu, gdy przed upływem okna bezczynności nie nadejdą żadne fragmenty odpowiedzi. Ustaw tę wartość jawnie dla wolnych modeli lokalnych lub dostawców rozumowania/wywołań narzędzi; ustaw `0`, aby wyłączyć. Jeśli nie jest ustawiona, OpenClaw używa `agents.defaults.timeoutSeconds`, gdy jest skonfigurowane, w przeciwnym razie 60 s. Przebiegi wyzwalane przez cron bez jawnego limitu czasu LLM lub agenta wyłączają mechanizm bezczynności i polegają na zewnętrznym limicie czasu crona.
+- Domyślny `agent.wait`: 30 s (tylko oczekiwanie). Parametr `timeoutMs` go nadpisuje.
+- Czas działania agenta: domyślnie `agents.defaults.timeoutSeconds` wynosi 172800 s (48 godzin); egzekwowany przez licznik przerwania w `runEmbeddedPiAgent`.
+- Limit bezczynności LLM: `agents.defaults.llm.idleTimeoutSeconds` przerywa żądanie modelu, gdy przed upływem okna bezczynności nie nadejdą żadne fragmenty odpowiedzi. Ustaw go jawnie dla wolnych modeli lokalnych lub dostawców rozumowania/wywołań narzędzi; ustaw na 0, aby wyłączyć. Jeśli nie jest ustawiony, OpenClaw używa `agents.defaults.timeoutSeconds`, jeśli skonfigurowano, w przeciwnym razie 120 s. Przebiegi wyzwalane przez cron bez jawnego limitu czasu LLM lub agenta wyłączają nadzorcę bezczynności i polegają na zewnętrznym limicie czasu crona.
## Gdzie wszystko może zakończyć się wcześniej
@@ -170,8 +168,8 @@ Zobacz [Hooki pluginów](/pl/plugins/architecture#provider-runtime-hooks), aby s
## Powiązane
-- [Narzędzia](/pl/tools) — dostępne narzędzia agenta
-- [Hooki](/pl/automation/hooks) — skrypty sterowane zdarzeniami wyzwalane przez zdarzenia cyklu życia agenta
-- [Kompaktowanie](/pl/concepts/compaction) — jak podsumowywane są długie rozmowy
-- [Zgody exec](/pl/tools/exec-approvals) — bramki zatwierdzania dla poleceń powłoki
-- [Thinking](/pl/tools/thinking) — konfiguracja poziomu myślenia/rozumowania
+- [Tools](/pl/tools) — dostępne narzędzia agenta
+- [Hooks](/pl/automation/hooks) — skrypty sterowane zdarzeniami, wyzwalane przez zdarzenia cyklu życia agenta
+- [Compaction](/pl/concepts/compaction) — jak podsumowywane są długie rozmowy
+- [Exec Approvals](/pl/tools/exec-approvals) — bramki zatwierdzania dla poleceń powłoki
+- [Thinking](/pl/tools/thinking) — konfiguracja poziomu thinking/rozumowania
diff --git a/docs/pl/concepts/memory-search.md b/docs/pl/concepts/memory-search.md
index 9e4754ea1..173146425 100644
--- a/docs/pl/concepts/memory-search.md
+++ b/docs/pl/concepts/memory-search.md
@@ -1,15 +1,15 @@
---
read_when:
- - Chcesz zrozumieć, jak działa `memory_search`
+ - Chcesz zrozumieć, jak działa memory_search
- Chcesz wybrać dostawcę embeddingów
- Chcesz dostroić jakość wyszukiwania
-summary: Jak wyszukiwanie pamięci znajduje odpowiednie notatki za pomocą embeddingów i wyszukiwania hybrydowego
+summary: Jak wyszukiwanie w pamięci znajduje odpowiednie notatki za pomocą embeddingów i wyszukiwania hybrydowego
title: Wyszukiwanie w pamięci
x-i18n:
- generated_at: "2026-04-06T03:06:39Z"
+ generated_at: "2026-04-10T09:44:32Z"
model: gpt-5.4
provider: openai
- source_hash: b6541cd702bff41f9a468dad75ea438b70c44db7c65a4b793cbacaf9e583c7e9
+ source_hash: ca0237f4f1ee69dcbfb12e6e9527a53e368c0bf9b429e506831d4af2f3a3ac6f
source_path: concepts/memory-search.md
workflow: 15
---
@@ -17,8 +17,8 @@ x-i18n:
# Wyszukiwanie w pamięci
`memory_search` znajduje odpowiednie notatki z Twoich plików pamięci, nawet gdy
-sformułowania różnią się od oryginalnego tekstu. Działa przez indeksowanie pamięci w małych
-fragmentach i przeszukiwanie ich za pomocą embeddingów, słów kluczowych lub obu tych metod.
+sformułowania różnią się od oryginalnego tekstu. Działa poprzez indeksowanie pamięci na małe
+fragmenty i przeszukiwanie ich za pomocą embeddingów, słów kluczowych albo obu tych metod.
## Szybki start
@@ -43,18 +43,18 @@ W przypadku lokalnych embeddingów bez klucza API użyj `provider: "local"` (wym
## Obsługiwani dostawcy
| Dostawca | ID | Wymaga klucza API | Uwagi |
-| -------- | --------- | ------------- | ---------------------------------------------------- |
-| OpenAI | `openai` | Tak | Wykrywany automatycznie, szybki |
-| Gemini | `gemini` | Tak | Obsługuje indeksowanie obrazów i dźwięku |
-| Voyage | `voyage` | Tak | Wykrywany automatycznie |
-| Mistral | `mistral` | Tak | Wykrywany automatycznie |
-| Bedrock | `bedrock` | Nie | Wykrywany automatycznie, gdy łańcuch poświadczeń AWS zostanie rozwiązany |
-| Ollama | `ollama` | Nie | Lokalny, musi być ustawiony jawnie |
-| Local | `local` | Nie | Model GGUF, pobieranie ~0.6 GB |
+| -------- | --------- | ----------------- | ---------------------------------------------------- |
+| OpenAI | `openai` | Tak | Wykrywany automatycznie, szybki |
+| Gemini | `gemini` | Tak | Obsługuje indeksowanie obrazów/dźwięku |
+| Voyage | `voyage` | Tak | Wykrywany automatycznie |
+| Mistral | `mistral` | Tak | Wykrywany automatycznie |
+| Bedrock | `bedrock` | Nie | Wykrywany automatycznie, gdy łańcuch poświadczeń AWS zostanie rozwiązany |
+| Ollama | `ollama` | Nie | Lokalny, trzeba ustawić jawnie |
+| Local | `local` | Nie | Model GGUF, pobieranie ~0.6 GB |
## Jak działa wyszukiwanie
-OpenClaw uruchamia równolegle dwie ścieżki pobierania i scala wyniki:
+OpenClaw uruchamia równolegle dwie ścieżki pobierania wyników i scala ich rezultaty:
```mermaid
flowchart LR
@@ -72,30 +72,30 @@ flowchart LR
- **Wyszukiwanie słów kluczowych BM25** znajduje dokładne dopasowania (ID, ciągi błędów, klucze
konfiguracji).
-Jeśli dostępna jest tylko jedna ścieżka (brak embeddingów lub brak FTS), druga działa samodzielnie.
+Jeśli dostępna jest tylko jedna ścieżka (brak embeddingów albo brak FTS), działa samodzielnie tylko druga.
-## Poprawianie jakości wyszukiwania
+## Poprawa jakości wyszukiwania
Dwie opcjonalne funkcje pomagają, gdy masz dużą historię notatek:
### Zanikanie czasowe
-Stare notatki stopniowo tracą wagę w rankingu, dzięki czemu najpierw pojawiają się nowsze informacje.
-Przy domyślnym okresie półtrwania wynoszącym 30 dni notatka z zeszłego miesiąca uzyskuje wynik równy 50%
-swojej pierwotnej wagi. Stałe pliki, takie jak `MEMORY.md`, nigdy nie podlegają zanikaniu.
+Starsze notatki stopniowo tracą wagę w rankingu, dzięki czemu najpierw pojawiają się nowsze informacje.
+Przy domyślnym okresie półtrwania wynoszącym 30 dni notatka z zeszłego miesiąca ma wynik równy 50% swojej
+pierwotnej wagi. Pliki stałe, takie jak `MEMORY.md`, nigdy nie podlegają zanikaniu.
Włącz zanikanie czasowe, jeśli Twój agent ma wiele miesięcy codziennych notatek, a nieaktualne
-informacje wciąż są wyżej w rankingu niż nowszy kontekst.
+informacje stale wyprzedzają nowszy kontekst.
### MMR (różnorodność)
-Ogranicza nadmiarowe wyniki. Jeśli pięć notatek wspomina tę samą konfigurację routera, MMR
-sprawia, że najwyższe wyniki obejmują różne tematy zamiast się powtarzać.
+Ogranicza powtarzające się wyniki. Jeśli pięć notatek wspomina tę samą konfigurację routera, MMR
+sprawia, że najwyższe wyniki obejmują różne tematy, zamiast się powtarzać.
-Włącz MMR, jeśli `memory_search` ciągle zwraca niemal zduplikowane fragmenty z
+Włącz MMR, jeśli `memory_search` stale zwraca niemal identyczne fragmenty z
różnych codziennych notatek.
@@ -120,16 +120,16 @@ różnych codziennych notatek.
## Pamięć multimodalna
-Dzięki Gemini Embedding 2 możesz indeksować obrazy i pliki audio razem z
-Markdownem. Zapytania wyszukiwania nadal pozostają tekstowe, ale są dopasowywane do treści wizualnych i audio.
-Instrukcje konfiguracji znajdziesz w [Dokumentacji konfiguracji pamięci](/pl/reference/memory-config).
+Z Gemini Embedding 2 możesz indeksować obrazy i pliki audio obok plików
+Markdown. Zapytania wyszukiwania nadal pozostają tekstowe, ale dopasowują się do treści wizualnych i audio.
+Informacje o konfiguracji znajdziesz w [dokumencie referencyjnym konfiguracji pamięci](/pl/reference/memory-config).
-## Wyszukiwanie pamięci sesji
+## Wyszukiwanie w pamięci sesji
-Opcjonalnie możesz indeksować transkrypcje sesji, aby `memory_search` mogło przypominać sobie
-wcześniejsze rozmowy. Jest to funkcja opcjonalna, włączana przez
+Możesz opcjonalnie indeksować transkrypcje sesji, aby `memory_search` mógł przywoływać
+wcześniejsze rozmowy. Jest to funkcja opt-in dostępna przez
`memorySearch.experimental.sessionMemory`. Szczegóły znajdziesz w
-[dokumentacji konfiguracji](/pl/reference/memory-config).
+[dokumencie referencyjnym konfiguracji](/pl/reference/memory-config).
## Rozwiązywanie problemów
@@ -139,10 +139,11 @@ wcześniejsze rozmowy. Jest to funkcja opcjonalna, włączana przez
**Tylko dopasowania słów kluczowych?** Twój dostawca embeddingów może nie być skonfigurowany. Sprawdź
`openclaw memory status --deep`.
-**Nie można znaleźć tekstu CJK?** Odbuduj indeks FTS za pomocą
+**Nie znajduje tekstu CJK?** Odbuduj indeks FTS za pomocą
`openclaw memory index --force`.
## Dalsza lektura
+- [Aktywna pamięć](/pl/concepts/active-memory) -- pamięć sub-agentów dla interaktywnych sesji czatu
- [Pamięć](/pl/concepts/memory) -- układ plików, backendy, narzędzia
-- [Dokumentacja konfiguracji pamięci](/pl/reference/memory-config) -- wszystkie opcje konfiguracji
+- [Dokument referencyjny konfiguracji pamięci](/pl/reference/memory-config) -- wszystkie opcje konfiguracji
diff --git a/docs/pl/concepts/qa-e2e-automation.md b/docs/pl/concepts/qa-e2e-automation.md
index 055d6cb0b..e9c168d31 100644
--- a/docs/pl/concepts/qa-e2e-automation.md
+++ b/docs/pl/concepts/qa-e2e-automation.md
@@ -3,35 +3,34 @@ read_when:
- Rozszerzanie qa-lab lub qa-channel
- Dodawanie scenariuszy QA opartych na repozytorium
- Tworzenie bardziej realistycznej automatyzacji QA wokół panelu Gateway
-summary: Prywatna struktura automatyzacji QA dla qa-lab, qa-channel, scenariuszy seed i raportów protokołu
+summary: Prywatny kształt automatyzacji QA dla qa-lab, qa-channel, scenariuszy inicjalizowanych seedem i raportów protokołu
title: Automatyzacja QA E2E
x-i18n:
- generated_at: "2026-04-09T01:27:48Z"
+ generated_at: "2026-04-10T09:44:32Z"
model: gpt-5.4
provider: openai
- source_hash: c922607d67e0f3a2489ac82bc9f510f7294ced039c1014c15b676d826441d833
+ source_hash: 357d6698304ff7a8c4aa8a7be97f684d50f72b524740050aa761ac0ee68266de
source_path: concepts/qa-e2e-automation.md
workflow: 15
---
# Automatyzacja QA E2E
-Prywatny stos QA ma na celu testowanie OpenClaw w bardziej realistyczny,
-zbliżony do kanałów sposób, niż może to zapewnić pojedynczy test jednostkowy.
+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.
Obecne elementy:
-- `extensions/qa-channel`: syntetyczny kanał wiadomości z obsługą DM, kanałów, wątków,
+- `extensions/qa-channel`: syntetyczny kanał wiadomości z powierzchniami DM, kanału, wątku,
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 oparte na repozytorium dla zadania startowego i bazowych
- scenariuszy QA.
+- `qa/`: zasoby seed oparte na repozytorium dla zadania startowego i bazowych scenariuszy QA.
Obecny przepływ pracy operatora QA to dwupanelowa witryna QA:
-- Lewy panel: panel Gateway (Control UI) z agentem.
-- Prawy panel: QA Lab, pokazujący transkrypt w stylu Slacka i plan scenariusza.
+- Po lewej: panel Gateway (Control UI) z agentem.
+- Po prawej: QA Lab, pokazujący transkrypt w stylu Slacka i plan scenariusza.
Uruchom za pomocą:
@@ -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, na której operator lub pętla automatyzacji może przekazać agentowi
-misję QA, obserwować rzeczywiste zachowanie kanału oraz zapisywać, co działało,
-co zawiodło lub co pozostało zablokowane.
+To buduje witrynę QA, uruchamia ścieżkę gateway opartą na Dockerze i udostępnia
+stronę QA Lab, na której operator lub pętla automatyzacji może przydzielić
+agentowi misję QA, obserwować rzeczywiste zachowanie kanału oraz rejestrować,
+co zadziałało, co zawiodło lub co pozostało zablokowane.
Aby szybciej iterować nad interfejsem QA Lab bez przebudowywania obrazu Dockera za każdym razem,
-uruchom stos z bind-mountowanym bundlem QA Lab:
+uruchom stos z bind-montowanym bundelem QA Lab:
```bash
pnpm openclaw qa docker-build-image
@@ -54,10 +53,25 @@ pnpm qa:lab:up:fast
pnpm qa:lab:watch
```
-`qa:lab:up:fast` utrzymuje usługi Dockera na wcześniej zbudowanym obrazie i bind-mountuje
+`qa:lab:up:fast` utrzymuje usługi Dockera na wcześniej zbudowanym obrazie i bind-montuje
`extensions/qa-lab/web/dist` do kontenera `qa-lab`. `qa:lab:watch`
-przebudowuje ten bundle po zmianach, a przeglądarka automatycznie przeładowuje się,
-gdy hash zasobu QA Lab ulegnie zmianie.
+przebudowuje ten bundle przy zmianach, a przeglądarka automatycznie przeładowuje się,
+gdy zmienia się hash zasobu QA Lab.
+
+Aby uruchomić jednorazową ścieżkę Linux VM bez włączania Dockera do ścieżki QA, użyj:
+
+```bash
+pnpm openclaw qa suite --runner multipass --scenario channel-chat-baseline
+```
+
+To uruchamia świeżego gościa Multipass, instaluje zależności, buduje OpenClaw
+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 scenariusza co `qa suite` na hoście.
+Uruchomienia live przekazują obsługiwane wejścia uwierzytelniania QA, które są praktyczne dla
+gościa: klucze dostawców oparte na env, ścieżkę konfiguracji dostawcy live QA oraz
+`CODEX_HOME`, gdy jest obecne. Utrzymuj `--output-dir` w katalogu repozytorium, aby gość
+mógł zapisywać z powrotem przez zamontowany workspace.
## Seedy oparte na repozytorium
@@ -66,17 +80,17 @@ Zasoby seed znajdują się w `qa/`:
- `qa/scenarios/index.md`
- `qa/scenarios/*.md`
-Są one celowo przechowywane w git, aby plan QA był widoczny zarówno dla ludzi, jak i dla
-agenta. Lista bazowa powinna pozostać na tyle szeroka, aby obejmować:
+Są one celowo przechowywane w git, aby plan QA był widoczny zarówno dla ludzi, jak i
+agenta. Lista bazowa powinna pozostać wystarczająco szeroka, aby obejmować:
-- czat w DM i na kanałach
+- czat DM i kanałowy
- zachowanie wątków
- cykl życia akcji na wiadomościach
-- wywołania cron
+- wywołania zwrotne cron
- przywoływanie pamięci
- przełączanie modeli
- przekazanie do subagenta
-- odczytywanie repozytorium i dokumentacji
+- odczyt repozytorium i dokumentacji
- jedno małe zadanie build, takie jak Lobster Invaders
## Raportowanie
@@ -84,13 +98,13 @@ agenta. Lista bazowa powinna pozostać na tyle szeroka, aby obejmować:
`qa-lab` eksportuje raport protokołu w Markdown na podstawie obserwowanej osi czasu magistrali.
Raport powinien odpowiadać na pytania:
-- Co działało
+- Co zadziałało
- Co zawiodło
- Co pozostało zablokowane
- Jakie scenariusze uzupełniające warto dodać
-W przypadku kontroli charakteru i stylu uruchom ten sam scenariusz dla wielu aktywnych
-referencji modeli i zapisz oceniany raport Markdown:
+W przypadku kontroli charakteru i stylu uruchom ten sam scenariusz dla wielu live refów modeli
+i zapisz oceniony raport Markdown:
```bash
pnpm openclaw qa character-eval \
@@ -109,41 +123,41 @@ pnpm openclaw qa character-eval \
--judge-concurrency 16
```
-Polecenie uruchamia lokalne podrzędne procesy QA Gateway, a nie Docker. Scenariusze
-oceny charakteru powinny ustawiać personę przez `SOUL.md`, a następnie wykonywać zwykłe
-tury użytkownika, takie jak czat, pomoc dotyczącą workspace i małe zadania na plikach. Modelowi
-kandydującemu nie należy mówić, ż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` o uszeregowanie uruchomień według naturalności, klimatu i humoru.
-Użyj `--blind-judge-models` podczas porównywania providerów: prompt oceniający 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
+To polecenie uruchamia lokalne podrzędne procesy gateway QA, a nie Dockera. Scenariusze
+oceny charakteru powinny ustawiać personę przez `SOUL.md`, a następnie uruchamiać zwykłe
+tury użytkownika, takie jak czat, pomoc dotycząca workspace i małe zadania plikowe. Kandydacki model
+nie powinien być informowany, że jest oceniany. Polecenie zachowuje każdy pełny
+transkrypt, rejestruje podstawowe statystyki przebiegu, a następnie prosi modele sędziują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 przebiegu, ale refy kandydatów są zastępowane neutralnymi
+etykietami, takimi jak `candidate-01`; raport mapuje rankingi z powrotem na rzeczywiste refy po
parsowaniu.
-Uruchomienia kandydatów domyślnie używają poziomu myślenia `high`, a dla modeli OpenAI,
-które go obsługują, `xhigh`. Zastąp ustawienie dla konkretnego kandydata inline za pomocą
+Przebiegi kandydatów domyślnie używają poziomu rozumowania `high`, z `xhigh` dla modeli OpenAI,
+które to obsługują. Zastąp ustawienie dla konkretnego kandydata inline za pomocą
`--model provider/model,thinking=`. `--thinking ` nadal ustawia
globalne ustawienie zapasowe, a starsza forma `--model-thinking ` jest
zachowana dla zgodności.
-Referencje kandydatów OpenAI domyślnie używają trybu fast, aby tam, gdzie provider to obsługuje,
-korzystać z przetwarzania priorytetowego. Dodaj inline `,fast`, `,no-fast` lub `,fast=false`, gdy
+Refy kandydatów OpenAI domyślnie używają trybu fast, aby wykorzystywane było przetwarzanie priorytetowe tam,
+gdzie dostawca to obsługuje. 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 kandydującego. Czasy trwania dla kandydatów i modeli
-oceniających są zapisywane w raporcie do analizy benchmarków, ale prompty oceniające wyraźnie
-mówią, aby nie tworzyć rankingu na podstawie szybkości.
-Zarówno uruchomienia modeli kandydujących, jak i oceniających domyślnie używają współbieżności 16. Zmniejsz
-`--concurrency` lub `--judge-concurrency`, gdy limity providera lub obciążenie lokalnego Gateway
-powodują, że uruchomienie staje się zbyt zaszumione.
-Gdy nie zostanie przekazany żaden kandydat `--model`, ocena charakteru domyślnie używa
+wymusić tryb fast dla każdego modelu kandydującego. Czasy trwania kandydatów i sędziów są
+rejestrowane w raporcie do analizy porównawczej, ale prompty sędziów wyraźnie mówią,
+aby nie tworzyć rankingu według 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
+sprawiają, że przebieg staje się zbyt zaszumiony.
+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 zostanie przekazany parametr `--model`.
-Gdy nie zostanie przekazany żaden `--judge-model`, modele oceniające domyślnie używają
+`google/gemini-3.1-pro-preview`, gdy nie zostanie przekazany `--model`.
+Gdy nie zostanie przekazany `--judge-model`, sędziowie domyślnie używają
`openai/gpt-5.4,thinking=xhigh,fast` oraz
`anthropic/claude-opus-4-6,thinking=high`.
## Powiązana dokumentacja
-- [Testing](/pl/help/testing)
+- [Testowanie](/pl/help/testing)
- [QA Channel](/pl/channels/qa-channel)
-- [Dashboard](/web/dashboard)
+- [Panel](/web/dashboard)
diff --git a/docs/pl/gateway/configuration-reference.md b/docs/pl/gateway/configuration-reference.md
index 954ce69f7..ce0624aeb 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łów, modeli, bramy lub narzędzi
-summary: Dokumentacja referencyjna konfiguracji bramy dla podstawowych kluczy OpenClaw, wartości domyślnych i linków do dedykowanych dokumentacji podsystemów
-title: Dokumentacja referencyjna konfiguracji
+ - Weryfikujesz bloki konfiguracji kanału, modelu, bramy lub narzędzia
+summary: Odwołanie do konfiguracji bramy dla podstawowych kluczy OpenClaw, wartości domyślnych i linków do dedykowanych odwołań podsystemów
+title: Odwołanie do konfiguracji
x-i18n:
- generated_at: "2026-04-09T01:33:09Z"
+ generated_at: "2026-04-10T09:44:39Z"
model: gpt-5.4
provider: openai
- source_hash: a9d6d0c542b9874809491978fdcf8e1a7bb35a4873db56aa797963d03af4453c
+ source_hash: c6aa34e3a9096c4dabef26b9cdfda4bd7693e16da43a88c1641cfad8ba1ec237
source_path: gateway/configuration-reference.md
workflow: 15
---
-# Dokumentacja referencyjna konfiguracji
+# Odwołanie do konfiguracji
-Dokumentacja podstawowej konfiguracji dla `~/.openclaw/openclaw.json`. Przegląd zorientowany na zadania znajdziesz w [Configuration](/pl/gateway/configuration).
+Podstawowe odwołanie do konfiguracji dla `~/.openclaw/openclaw.json`. Przegląd zorientowany na zadania znajdziesz w [Konfiguracja](/pl/gateway/configuration).
-Ta strona opisuje główne powierzchnie konfiguracji OpenClaw i zawiera odnośniki tam, gdzie dany podsystem ma własną, bardziej szczegółową dokumentację. **Nie** próbuje wstawiać na jednej stronie każdego katalogu poleceń należącego do kanału/pluginu ani każdego szczegółowego parametru 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żdej głębokiej opcji pamięci/QMD.
Źródło prawdy w kodzie:
-- `openclaw config schema` wypisuje aktualny schemat JSON Schema używany do walidacji i przez UI Control, z dołączonymi metadanymi bundled/plugin/channel, gdy są dostępne
-- `config.schema.lookup` zwraca jeden węzeł schematu ograniczony do ścieżki dla narzędzi do szczegółowej analizy
+- `openclaw config schema` wypisuje aktualny schemat JSON używany do walidacji i Control UI, ze scalonymi metadanymi bundled/plugin/channel, gdy są dostępne
+- `config.schema.lookup` zwraca jeden węzeł schematu ograniczony do ścieżki dla narzędzi do szczegółowej eksploracji
- `pnpm config:docs:check` / `pnpm config:docs:gen` weryfikują hash bazowy dokumentacji konfiguracji względem bieżącej powierzchni schematu
-Dedykowane szczegółowe dokumentacje:
+Dedykowane szczegółowe odwołania:
-- [Memory configuration reference](/pl/reference/memory-config) dla `agents.defaults.memorySearch.*`, `memory.qmd.*`, `memory.citations` i 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ściciela kanału/pluginu 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 w `plugins.entries.memory-core.config.dreaming`
+- [Polecenia Slash](/pl/tools/slash-commands) dla bieżącego katalogu poleceń built-in + bundled
+- strony właścicieli kanałów/pluginów 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 są 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 DM i zasady grup:
+Wszystkie kanały obsługują zasady dla DM i grup:
-| Zasada DM | Zachowanie |
-| ------------------- | -------------------------------------------------------------- |
-| `pairing` (domyślna) | Nieznani nadawcy dostają jednorazowy kod parowania; właściciel musi zatwierdzić |
-| `allowlist` | Tylko nadawcy z `allowFrom` (lub sparowanego magazynu dozwolonych) |
-| `open` | Zezwól na wszystkie przychodzące DM (wymaga `allowFrom: ["*"]`) |
-| `disabled` | Ignoruj wszystkie przychodzące DM |
+| Zasada DM | Zachowanie |
+| -------------------- | -------------------------------------------------------------- |
+| `pairing` (domyślna) | Nieznani nadawcy otrzymują jednorazowy kod parowania; właściciel musi zatwierdzić |
+| `allowlist` | Tylko nadawcy w `allowFrom` (lub w sparowanym magazynie dozwolonych) |
+| `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 bramkowanie wzmiankami) |
-| `disabled` | Blokuje wszystkie wiadomości w grupach/pokojach |
+| `open` | Pomijaj listy dozwolonych grup (nadal obowiązuje requireMention) |
+| `disabled` | Blokuj wszystkie wiadomości grupowe/pokojów |
`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.` nieobecne), zasada grup w czasie działania wraca do `allowlist` (fail-closed) z ostrzeżeniem przy uruchomieniu.
+Jeśli blok dostawcy jest całkowicie pominięty (`channels.` nie istnieje), zasada grupy w czasie działania wraca do `allowlist` (fail-closed) z ostrzeżeniem przy uruchomieniu.
-### Nadpisania modelu dla kanału
+### Nadpisania modelu dla kanałów
-Użyj `channels.modelByChannel`, aby przypisać określone identyfikatory kanałów do modelu. Wartości akceptują `provider/model` lub skonfigurowane aliasy modeli. Mapowanie kanałów jest stosowane, gdy sesja nie ma już nadpisania modelu (na przykład ustawionego przez `/model`).
+Użyj `channels.modelByChannel`, aby przypisać określone identyfikatory kanałów do modelu. Wartości akceptują `provider/model` lub skonfigurowane aliasy modeli. Mapowanie kanałów ma zastosowanie, gdy sesja nie ma już nadpisania modelu (na przykład ustawionego przez `/model`).
```json5
{
@@ -87,7 +87,7 @@ Użyj `channels.modelByChannel`, aby przypisać określone identyfikatory kanał
### Domyślne ustawienia kanałów i heartbeat
-Użyj `channels.defaults` dla współdzielonych zachowań zasad grup i heartbeat między dostawcami:
+Użyj `channels.defaults` dla współdzielonej zasady grupy i zachowania heartbeat we wszystkich dostawcach:
```json5
{
@@ -105,11 +105,11 @@ Użyj `channels.defaults` dla współdzielonych zachowań zasad grup i heartbeat
}
```
-- `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ślnie, uwzględnia cały cytowany/wątkowy/historyczny kontekst), `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 statusy kanałów w wyjściu heartbeat.
-- `channels.defaults.heartbeat.showAlerts`: uwzględnia statusy pogorszone/błędów w wyjściu heartbeat.
-- `channels.defaults.heartbeat.useIndicator`: renderuje zwarty heartbeat w stylu wskaźnika.
+- `channels.defaults.groupPolicy`: zapasowa zasada grupy, gdy `groupPolicy` na poziomie dostawcy nie jest ustawione.
+- `channels.defaults.contextVisibility`: domyślny tryb widoczności kontekstu uzupełniającego dla wszystkich kanałów. Wartości: `all` (domyślnie, 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 dla kanału: `channels..contextVisibility`.
+- `channels.defaults.heartbeat.showOk`: uwzględniaj statusy zdrowych kanałów w wyjściu heartbeat.
+- `channels.defaults.heartbeat.showAlerts`: uwzględniaj statusy obniżonego działania/błędów w wyjściu heartbeat.
+- `channels.defaults.heartbeat.useIndicator`: renderuj zwarte wyjście heartbeat w stylu wskaźnika.
### WhatsApp
@@ -124,7 +124,7 @@ WhatsApp działa przez kanał web bramy (Baileys Web). Uruchamia się automatycz
textChunkLimit: 4000,
chunkMode: "length", // length | newline
mediaMaxMb: 50,
- sendReadReceipts: true, // niebieskie ptaszki (false w trybie self-chat)
+ sendReadReceipts: true, // niebieskie znaczniki (false w trybie self-chat)
groups: {
"*": { requireMention: true },
},
@@ -146,7 +146,7 @@ WhatsApp działa przez kanał web bramy (Baileys Web). Uruchamia się automatycz
}
```
-
+
```json5
{
@@ -164,10 +164,10 @@ WhatsApp działa przez kanał web bramy (Baileys Web). Uruchamia się automatycz
}
```
-- 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 domyślny wybór zapasowy, gdy pasuje do skonfigurowanego identyfikatora konta.
-- Starszy katalog autoryzacji 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`.
+- Polecenia wychodzące domyślnie używają konta `default`, jeśli istnieje; w przeciwnym razie pierwszego skonfigurowanego identyfikatora konta (sortowanego).
+- Opcjonalne `channels.whatsapp.defaultAccount` nadpisuje ten zapasowy wybór konta domyślnego, gdy pasuje do skonfigurowanego identyfikatora konta.
+- Starszy katalog auth dla pojedynczego konta Baileys jest migrowany przez `openclaw doctor` do `whatsapp/default`.
+- Nadpisania dla konta: `channels.whatsapp.accounts..sendReadReceipts`, `channels.whatsapp.accounts..dmPolicy`, `channels.whatsapp.accounts..allowFrom`.
@@ -225,13 +225,13 @@ WhatsApp działa przez kanał web bramy (Baileys Web). Uruchamia się automatycz
}
```
-- Token bota: `channels.telegram.botToken` lub `channels.telegram.tokenFile` (tylko zwykły plik; symlinki odrzucane), z `TELEGRAM_BOT_TOKEN` jako zapasowym źródłem dla konta domyślnego.
+- Token bota: `channels.telegram.botToken` lub `channels.telegram.tokenFile` (tylko zwykły plik; symlinki są odrzucane), z `TELEGRAM_BOT_TOKEN` jako wartością zapasową dla konta domyślnego.
- Opcjonalne `channels.telegram.defaultAccount` nadpisuje domyślny wybór konta, gdy pasuje do skonfigurowanego identyfikatora konta.
-- W konfiguracjach wielokontowych (2+ identyfikatory kont) ustaw jawny domyślny wybór (`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 forów (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 strumieni w Telegramie używają `sendMessage` + `editMessageText` (działa w czatach bezpośrednich i grupowych).
-- Zasady ponawiania: zobacz [Retry policy](/pl/concepts/retry).
+- 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 w [Agenty ACP](/pl/tools/acp-agents#channel-specific-settings).
+- Podglądy streamingu w Telegramie używają `sendMessage` + `editMessageText` (działa w czatach bezpośrednich i grupowych).
+- Zasady retry: zobacz [Zasady retry](/pl/concepts/retry).
### Discord
@@ -297,7 +297,7 @@ WhatsApp działa przez kanał web bramy (Baileys Web). Uruchamia się automatycz
enabled: true,
idleHours: 24,
maxAgeHours: 0,
- spawnSubagentSessions: false, // opt-in dla sessions_spawn({ thread: true })
+ spawnSubagentSessions: false, // opt-in for sessions_spawn({ thread: true })
},
voice: {
enabled: true,
@@ -333,36 +333,36 @@ WhatsApp działa przez kanał web bramy (Baileys Web). Uruchamia się automatycz
}
```
-- Token: `channels.discord.token`, z `DISCORD_BOT_TOKEN` jako zapasowym źródłem dla konta domyślnego.
-- Bezpośrednie wywołania wychodzące, które podają jawny `token` Discorda, używają tego tokena do wywołania; ustawienia ponawiania/zasad konta nadal pochodzą z wybranego konta w aktywnej migawce środowiska wykonawczego.
+- Token: `channels.discord.token`, z `DISCORD_BOT_TOKEN` jako wartością zapasową dla konta domyślnego.
+- Bezpośrednie wywołania wychodzące, które podają jawny Discord `token`, używają tego tokenu dla wywołania; ustawienia retry/zasad konta nadal pochodzą z wybranego konta w aktywnym snapshotcie runtime.
- Opcjonalne `channels.discord.defaultAccount` nadpisuje domyślny wybór konta, gdy pasuje do skonfigurowanego identyfikatora konta.
-- Użyj `user:` (DM) lub `channel:` (kanał guild) dla celów dostarczania; same numeryczne identyfikatory są odrzucane.
-- Slugi guild są małymi literami ze spacjami zamienionymi na `-`; klucze kanałów używają nazwy w postaci slug (bez `#`). Preferuj identyfikatory guild.
-- Wiadomości autorstwa botów są domyślnie ignorowane. `allowBots: true` je włącza; użyj `allowBots: "mentions"`, aby akceptować tylko wiadomości botów, które wzmiankują bota (własne wiadomości nadal filtrowane).
-- `channels.discord.guilds..ignoreOtherMentions` (i nadpisania kanałów) odrzuca wiadomości, które wzmiankują innego użytkownika lub rolę, ale nie bota (z wyłączeniem @everyone/@here).
+- Używaj `user:` (DM) lub `channel:` (kanał guild); same numeryczne identyfikatory są odrzucane.
+- Slugi guild są zapisywane małymi literami, a spacje są zastępowane przez `-`; klucze kanałów używają nazwy w postaci slugu (bez `#`). Preferuj identyfikatory guild.
+- Wiadomości napisane przez boty są domyślnie ignorowane. `allowBots: true` włącza ich obsługę; 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 kanałów) 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 routingiem związanym z wątkami Discord:
- - `enabled`: nadpisanie Discorda dla funkcji sesji związanych z wątkiem (`/focus`, `/unfocus`, `/agents`, `/session idle`, `/session max-age` i dostarczanie/routing związany z wątkiem)
- - `idleHours`: nadpisanie Discorda dla automatycznego odwiązywania po bezczynności w godzinach (`0` wyłącza)
- - `maxAgeHours`: nadpisanie Discorda dla twardego maksymalnego wieku w godzinach (`0` wyłącza)
+- `channels.discord.threadBindings` kontroluje routing powiązany z wątkami Discord:
+ - `enabled`: nadpisanie Discord dla funkcji sesji powiązanych z wątkiem (`/focus`, `/unfocus`, `/agents`, `/session idle`, `/session max-age` oraz powiązane dostarczanie/routing)
+ - `idleHours`: nadpisanie Discord dla automatycznego wyłączenia focusu po bezczynności w godzinach (`0` wyłącza)
+ - `maxAgeHours`: nadpisanie Discord dla twardego maksymalnego wieku w godzinach (`0` wyłącza)
- `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).
+- 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 [Agenty ACP](/pl/tools/acp-agents#channel-specific-settings).
- `channels.discord.ui.components.accentColor` ustawia kolor akcentu dla kontenerów Discord components v2.
-- `channels.discord.voice` włącza rozmowy w kanałach głosowych Discord i opcjonalne auto-join + 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 i ponowne dołączenie do sesji głosowej po powtarzających się błędach deszyfrowania.
-- `channels.discord.streaming` jest kanonicznym kluczem trybu strumieniowania. Starsze wartości `streamMode` i logiczne `streaming` są migrowane automatycznie.
-- `channels.discord.autoPresence` mapuje dostępność środowiska wykonawczego na obecność bota (healthy => online, degraded => idle, exhausted => dnd) i pozwala na opcjonalne nadpisania tekstu statusu.
-- `channels.discord.dangerouslyAllowNameMatching` ponownie włącza dopasowywanie po zmiennych nazwach/tagach (tryb zgodności typu break-glass).
-- `channels.discord.execApprovals`: natywne dostarczanie zatwierdzeń exec w Discordzie 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 uprawnionych do zatwierdzania żądań exec. Gdy pominięte, używane jest `commands.ownerAllowFrom`.
+- `channels.discord.voice` włącza rozmowy w kanałach głosowych Discord oraz opcjonalne auto-join + nadpisania TTS.
+- `channels.discord.voice.daveEncryption` i `channels.discord.voice.decryptionFailureTolerance` są przekazywane do opcji DAVE w `@discordjs/voice` (domyślnie `true` i `24`).
+- 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 odszyfrowania.
+- `channels.discord.streaming` to kanoniczny klucz trybu streamingu. Starsze wartości `streamMode` i boolowskie `streaming` są automatycznie migrowane.
+- `channels.discord.autoPresence` mapuje dostępność runtime 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 (tryb zgodności break-glass).
+- `channels.discord.execApprovals`: natywne dla Discord 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ć na podstawie `approvers` lub `commands.ownerAllowFrom`.
+ - `approvers`: identyfikatory użytkowników Discord, którzy mogą zatwierdzać żądania exec. Gdy pominięte, używana jest wartość zapasowa `commands.ownerAllowFrom`.
- `agentFilter`: opcjonalna lista dozwolonych identyfikatorów agentów. Pomiń, aby przekazywać zatwierdzenia dla wszystkich agentów.
- `sessionFilter`: opcjonalne wzorce kluczy sesji (substring 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"`, przyciski mogą być używane tylko przez rozwiązanych zatwierdzających.
- - `cleanupAfterResolve`: gdy `true`, usuwa DM z zatwierdzeniami po zatwierdzeniu, odrzuceniu lub przekroczeniu czasu.
+ - `target`: gdzie wysyłać prompty zatwierdzenia. `"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 rozwiązanych zatwierdzających.
+ - `cleanupAfterResolve`: gdy `true`, usuwa DM z zatwierdzeniem po zatwierdzeniu, odrzuceniu lub przekroczeniu limitu 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
@@ -393,11 +393,11 @@ WhatsApp działa przez kanał web bramy (Baileys Web). Uruchamia się automatycz
}
```
-- JSON konta usługi: wbudowany (`serviceAccount`) lub oparty na pliku (`serviceAccountFile`).
-- Obsługiwany jest także SecretRef dla konta usługi (`serviceAccountRef`).
-- Zapasowe źródła z env: `GOOGLE_CHAT_SERVICE_ACCOUNT` lub `GOOGLE_CHAT_SERVICE_ACCOUNT_FILE`.
-- Użyj `spaces/` lub `users/` dla celów dostarczania.
-- `channels.googlechat.dangerouslyAllowNameMatching` ponownie włącza dopasowywanie po zmiennym adresie e-mail principal (tryb zgodności typu break-glass).
+- JSON konta usługi: inline (`serviceAccount`) lub z pliku (`serviceAccountFile`).
+- SecretRef dla konta usługi jest również obsługiwany (`serviceAccountRef`).
+- Wartości zapasowe z env: `GOOGLE_CHAT_SERVICE_ACCOUNT` lub `GOOGLE_CHAT_SERVICE_ACCOUNT_FILE`.
+- Używaj `spaces/` lub `users/` dla celów dostarczania.
+- `channels.googlechat.dangerouslyAllowNameMatching` ponownie włącza dopasowywanie po zmiennym principalu email (tryb zgodności break-glass).
### Slack
@@ -449,7 +449,7 @@ WhatsApp działa przez kanał web bramy (Baileys Web). Uruchamia się automatycz
chunkMode: "length",
streaming: {
mode: "partial", // off | partial | block | progress
- nativeTransport: true, // użyj natywnego API strumieniowego Slacka, gdy mode=partial
+ nativeTransport: true, // use Slack native streaming API when mode=partial
},
mediaMaxMb: 20,
execApprovals: {
@@ -464,34 +464,34 @@ WhatsApp działa przez kanał web bramy (Baileys Web). Uruchamia się automatycz
}
```
-- **Socket mode** wymaga zarówno `botToken`, jak i `appToken` (`SLACK_BOT_TOKEN` + `SLACK_APP_TOKEN` jako zapasowe źródło env dla konta domyślnego).
-- **HTTP mode** wymaga `botToken` plus `signingSecret` (na poziomie głównym lub per konto).
-- `botToken`, `appToken`, `signingSecret` i `userToken` akceptują zwykłe
- stringi lub obiekty SecretRef.
-- Migawki kont Slacka udostępniają pola źródła/statusu dla poszczególnych poświadczeń, takie jak
- `botTokenSource`, `botTokenStatus`, `appTokenStatus`, a w trybie HTTP,
+- **Socket mode** wymaga zarówno `botToken`, jak i `appToken` (`SLACK_BOT_TOKEN` + `SLACK_APP_TOKEN` jako zapasowe wartości env dla konta domyślnego).
+- **HTTP mode** wymaga `botToken` oraz `signingSecret` (na poziomie root lub per konto).
+- `botToken`, `appToken`, `signingSecret` i `userToken` akceptują jawne
+ ciągi znaków lub obiekty SecretRef.
+- Snapshoty kont Slack ujawniają 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 wykonawczego nie mogła
+ 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 Slacka.
+- `configWrites: false` blokuje zapisy konfiguracji inicjowane ze Slacka.
- Opcjonalne `channels.slack.defaultAccount` nadpisuje domyślny wybór konta, gdy pasuje do skonfigurowanego identyfikatora konta.
-- `channels.slack.streaming.mode` jest kanonicznym kluczem trybu strumieniowania Slacka. `channels.slack.streaming.nativeTransport` steruje natywnym transportem strumieniowym Slacka. Starsze wartości `streamMode`, logiczne `streaming` i `nativeStreaming` są migrowane automatycznie.
-- Użyj `user:` (DM) lub `channel:` dla celów dostarczania.
+- `channels.slack.streaming.mode` to kanoniczny klucz trybu streamingu Slack. `channels.slack.streaming.nativeTransport` kontroluje natywny transport streamingu Slacka. Starsze wartości `streamMode`, boolowskie `streaming` i `nativeStreaming` są automatycznie migrowane.
+- Używaj `user:` (DM) lub `channel:` dla celów dostarczania.
**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 ramach kanału. `thread.inheritParent` kopiuje transkrypcję kanału nadrzędnego do nowych wątków.
+**Izolacja sesji wątku:** `thread.historyScope` jest per wątek (domyślnie) lub współdzielone w obrębie kanału. `thread.inheritParent` kopiuje transkrypt kanału nadrzędnego do nowych wątków.
-- Natywne strumieniowanie Slacka wraz ze statusem wątku Slacka w stylu asystenta „is typing...” wymaga celu odpowiedzi w wątku. Górnopoziomowe DM domyślnie pozostają poza wątkiem, więc zamiast podglądu w stylu wątku używają `typingReaction` lub zwykłego dostarczenia.
-- `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, np. `"hourglass_flowing_sand"`.
-- `channels.slack.execApprovals`: natywne dostarczanie zatwierdzeń exec w Slacku i autoryzacja zatwierdzających. Ten sam schemat co Discord: `enabled` (`true`/`false`/`"auto"`), `approvers` (identyfikatory użytkowników Slacka), `agentFilter`, `sessionFilter` i `target` (`"dm"`, `"channel"` lub `"both"`).
+- Natywny streaming Slack plus status w stylu asystenta Slack „is typing...” w wątku wymagają celu odpowiedzi w wątku. 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 Slack 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 Slack dostarczanie zatwierdzeń exec i autoryzacja zatwierdzających. Ten sam schemat co w Discord: `enabled` (`true`/`false`/`"auto"`), `approvers` (identyfikatory użytkowników Slack), `agentFilter`, `sessionFilter` oraz `target` (`"dm"`, `"channel"` lub `"both"`).
-| Grupa akcji | Domyślnie | Uwagi |
-| ----------- | --------- | --------------------- |
+| Grupa akcji | Domyślnie | Uwagi |
+| ----------- | --------- | ---------------------- |
| reactions | włączone | Reagowanie + lista reakcji |
| messages | włączone | Odczyt/wysyłanie/edycja/usuwanie |
| pins | włączone | Przypnij/odepnij/lista |
-| memberInfo | włączone | Informacje o członku |
+| memberInfo | włączone | Informacje o członku |
| emojiList | włączone | Lista niestandardowych emoji |
### Mattermost
@@ -516,7 +516,7 @@ Mattermost jest dostarczany jako plugin: `openclaw plugins install @openclaw/mat
native: true, // opt-in
nativeSkills: true,
callbackPath: "/api/channels/mattermost/command",
- // Opcjonalny jawny URL dla wdrożeń z reverse proxy/publicznych
+ // Optional explicit URL for reverse-proxy/public deployments
callbackUrl: "https://gateway.example.com/api/channels/mattermost/command",
},
textChunkLimit: 4000,
@@ -526,22 +526,22 @@ Mattermost jest dostarczany jako plugin: `openclaw plugins install @openclaw/mat
}
```
-Tryby czatu: `oncall` (odpowiada przy wzmiance @, domyślnie), `onmessage` (każda wiadomość), `onchar` (wiadomości zaczynające się od prefiksu wyzwalacza).
+Tryby czatu: `oncall` (odpowiada na @-mention, domyślnie), `onmessage` (każda wiadomość), `onchar` (wiadomości zaczynające się od prefiksu wyzwalacza).
Gdy natywne polecenia Mattermost są włączone:
- `commands.callbackPath` musi być ścieżką (na przykład `/api/channels/mattermost/command`), a nie pełnym URL.
- `commands.callbackUrl` musi wskazywać na endpoint bramy OpenClaw i być osiągalny z serwera Mattermost.
-- Natywne wywołania slash callbacks są uwierzytelniane przy użyciu tokenów per polecenie zwracanych
+- Natywne callbacki slash są uwierzytelniane za pomocą tokenów per polecenie zwracanych
przez Mattermost podczas rejestracji slash command. Jeśli rejestracja się nie powiedzie lub żadne
- polecenia nie zostaną aktywowane, OpenClaw odrzuci callbacki z błędem
+ polecenia nie zostaną aktywowane, OpenClaw odrzuca callbacki 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 host/domena, a nie pełnych URL-i.
-- `channels.mattermost.configWrites`: zezwala lub zabrania zapisów konfiguracji inicjowanych przez Mattermost.
-- `channels.mattermost.requireMention`: wymaga `@mention` przed odpowiedzią w kanałach.
-- `channels.mattermost.groups..requireMention`: nadpisanie bramkowania wzmiankami per kanał (`"*"` dla domyślnego).
+- `channels.mattermost.configWrites`: zezwalaj lub odmawiaj zapisów konfiguracji inicjowanych z Mattermost.
+- `channels.mattermost.requireMention`: wymagaj `@mention` przed odpowiedzią w kanałach.
+- `channels.mattermost.groups..requireMention`: nadpisanie requireMention per kanał (`"*"` dla domyślnej wartości).
- Opcjonalne `channels.mattermost.defaultAccount` nadpisuje domyślny wybór konta, gdy pasuje do skonfigurowanego identyfikatora konta.
### Signal
@@ -551,7 +551,7 @@ Gdy natywne polecenia Mattermost są włączone:
channels: {
signal: {
enabled: true,
- account: "+15555550123", // opcjonalne powiązanie z kontem
+ account: "+15555550123", // opcjonalne powiązanie konta
dmPolicy: "pairing",
allowFrom: ["+15551234567", "uuid:123e4567-e89b-12d3-a456-426614174000"],
configWrites: true,
@@ -566,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 przez Signal.
+- `channels.signal.configWrites`: zezwalaj lub odmawiaj zapisów konfiguracji inicjowanych z Signal.
- Opcjonalne `channels.signal.defaultAccount` nadpisuje domyślny wybór konta, gdy pasuje do skonfigurowanego identyfikatora konta.
### BlueBubbles
-BlueBubbles to zalecana ścieżka iMessage (oparta na pluginie, konfigurowana w `channels.bluebubbles`).
+BlueBubbles to zalecana ścieżka dla iMessage (oparta na pluginie, konfigurowana w `channels.bluebubbles`).
```json5
{
@@ -579,16 +579,16 @@ BlueBubbles to zalecana ścieżka iMessage (oparta na pluginie, konfigurowana w
bluebubbles: {
enabled: true,
dmPolicy: "pairing",
- // serverUrl, password, webhookPath, kontrola grup i zaawansowane akcje:
- // zobacz /channels/bluebubbles
+ // serverUrl, password, webhookPath, group controls, and advanced actions:
+ // see /channels/bluebubbles
},
},
}
```
-- Podstawowe ścieżki kluczy opisane tutaj: `channels.bluebubbles`, `channels.bluebubbles.dmPolicy`.
+- Podstawowe ścieżki kluczy omówione tutaj: `channels.bluebubbles`, `channels.bluebubbles.dmPolicy`.
- Opcjonalne `channels.bluebubbles.defaultAccount` nadpisuje domyślny wybór konta, 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 celu (`chat_id:*`, `chat_guid:*`, `chat_identifier:*`) w `match.peer.id`. Współdzielona semantyka pól: [ACP Agents](/pl/tools/acp-agents#channel-specific-settings).
+- 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: [Agenty ACP](/pl/tools/acp-agents#channel-specific-settings).
- Pełna konfiguracja kanału BlueBubbles jest udokumentowana w [BlueBubbles](/pl/channels/bluebubbles).
### iMessage
@@ -621,11 +621,11 @@ OpenClaw uruchamia `imsg rpc` (JSON-RPC przez stdio). Nie jest wymagany daemon a
- 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`) do pobierania załączników SCP.
+- `cliPath` może wskazywać na wrapper SSH; ustaw `remoteHost` (`host` lub `user@host`) do 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 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).
+- `channels.imessage.configWrites`: zezwalaj lub odmawiaj 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: [Agenty ACP](/pl/tools/acp-agents#channel-specific-settings).
@@ -669,19 +669,19 @@ Matrix jest obsługiwany 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 proxy HTTP(S). Nazwane konta mogą go nadpisywać przez `channels.matrix.accounts..proxy`.
-- `channels.matrix.network.dangerouslyAllowPrivateNetwork` zezwala na prywatne/wewnętrzne homeserwery. `proxy` i ten opt-in sieciowy są niezależnymi mechanizmami.
+- `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 opt-in dla sieci to niezależne mechanizmy.
- `channels.matrix.defaultAccount` wybiera preferowane konto w konfiguracjach wielokontowych.
-- `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.execApprovals`: natywne dostarczanie zatwierdzeń exec w Matrix 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`.
+- `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` albo `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ć na podstawie `approvers` lub `commands.ownerAllowFrom`.
- `approvers`: identyfikatory użytkowników Matrix (np. `@owner:example.org`) uprawnionych 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 (substring lub regex).
- - `target`: gdzie wysyłać prośby o zatwierdzenie. `"dm"` (domyślnie), `"channel"` (pokój źródłowy) lub `"both"`.
+ - `target`: gdzie wysyłać prompty zatwierdzenia. `"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 routowanego peera, podczas gdy `per-room` izoluje każdy pokój DM.
-- Sondy statusu Matrix i wyszukiwania w aktywnym katalogu używają tych samych zasad proxy co ruch środowiska wykonawczego.
+- `channels.matrix.dm.sessionScope` kontroluje sposób 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 aktywne wyszukiwania w katalogu używają tych samych zasad proxy co ruch runtime.
- Pełna konfiguracja Matrix, reguły kierowania i przykłady konfiguracji są udokumentowane w [Matrix](/pl/channels/matrix).
### Microsoft Teams
@@ -694,14 +694,14 @@ Microsoft Teams jest obsługiwany przez rozszerzenie i konfigurowany w `channels
msteams: {
enabled: true,
configWrites: true,
- // appId, appPassword, tenantId, webhook, zasady zespołów/kanałów:
- // zobacz /channels/msteams
+ // appId, appPassword, tenantId, webhook, team/channel policies:
+ // see /channels/msteams
},
},
}
```
-- Podstawowe ścieżki kluczy opisane tutaj: `channels.msteams`, `channels.msteams.configWrites`.
+- Podstawowe ścieżki kluczy omówione 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
@@ -727,13 +727,13 @@ IRC jest obsługiwany przez rozszerzenie i konfigurowany w `channels.irc`.
}
```
-- Podstawowe ścieżki kluczy opisane tutaj: `channels.irc`, `channels.irc.dmPolicy`, `channels.irc.configWrites`, `channels.irc.nickserv.*`.
+- Podstawowe ścieżki kluczy omówione tutaj: `channels.irc`, `channels.irc.dmPolicy`, `channels.irc.configWrites`, `channels.irc.nickserv.*`.
- Opcjonalne `channels.irc.defaultAccount` nadpisuje domyślny wybór konta, 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).
+- Pełna konfiguracja kanału IRC (host/port/TLS/kanały/listy dozwolonych/requireMention) jest udokumentowana w [IRC](/pl/channels/irc).
### Wiele kont (wszystkie kanały)
-Uruchom wiele kont na kanał (każde z własnym `accountId`):
+Uruchamiaj wiele kont na kanał (każde z własnym `accountId`):
```json5
{
@@ -755,27 +755,27 @@ Uruchom wiele kont na kanał (każde z własnym `accountId`):
```
- `default` jest używane, gdy `accountId` jest pominięte (CLI + routing).
-- Tokeny z env dotyczą tylko konta **default**.
-- Bazowe ustawienia kanału dotyczą wszystkich kont, chyba że zostaną nadpisane per konto.
+- Tokeny z env mają zastosowanie tylko do 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), nadal mając jednokontową konfigurację na najwyższym poziomie, OpenClaw najpierw promuje wartości najwyższego poziomu specyficzne dla pojedynczego 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.
+- Jeśli dodasz konto inne niż domyślne przez `openclaw channels add` (lub onboarding kanału), gdy nadal używasz jednokontowej konfiguracji kanału na najwyższym poziomie, OpenClaw najpierw promuje wartości jednokontowe na najwyższym poziomie o zakresie konta do mapy kont kanału, aby oryginalne konto nadal działało. W większości kanałów są one przenoszone do `channels..accounts.default`; Matrix może zamiast tego zachować istniejący pasujący cel nazwany/domyslny.
- Istniejące powiązania tylko kanałowe (bez `accountId`) nadal pasują do konta domyślnego; powiązania z zakresem konta pozostają opcjonalne.
-- `openclaw doctor --fix` także naprawia mieszane kształty, przenosząc wartości najwyższego poziomu specyficzne dla pojedynczego 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.
+- `openclaw doctor --fix` również naprawia mieszane kształty przez przeniesienie wartości jednokontowych na najwyższym poziomie 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 cel nazwany/domyslny.
### 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).
+Wiele kanałów rozszerzeń jest konfigurowanych jako `channels.` i udokumentowanych 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: [Kanały](/pl/channels).
-### Bramkowanie wzmiankami w czatach grupowych
+### Wymuszanie mention w czatach grupowych
-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.
+Wiadomości grupowe domyślnie **wymagają mention** (mention w metadanych lub bezpieczne wzorce regex). Dotyczy czatów grupowych WhatsApp, Telegram, Discord, Google Chat i iMessage.
-**Typy wzmianek:**
+**Typy mention:**
-- **Wzmianki w metadanych**: natywne wzmianki @ platformy. Ignorowane w trybie self-chat WhatsApp.
+- **Mention w metadanych**: natywne @-mentions 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.
-- Bramkowanie wzmiankami jest egzekwowane tylko wtedy, gdy wykrywanie jest możliwe (natywne wzmianki lub co najmniej jeden wzorzec).
+- Wymuszanie mention jest stosowane tylko wtedy, gdy wykrycie jest możliwe (natywne mentions lub co najmniej jeden wzorzec).
```json5
{
@@ -805,13 +805,13 @@ Wiadomości grupowe domyślnie **wymagają wzmianki** (wzmianka w metadanych lub
}
```
-Rozstrzyganie: nadpisanie per DM → domyślna wartość dostawcy → brak limitu (zachowywane wszystko).
+Kolejność rozstrzygania: nadpisanie per DM → domyślna wartość dostawcy → brak limitu (zachowywana całość).
Obsługiwane: `telegram`, `whatsapp`, `discord`, `slack`, `signal`, `imessage`, `msteams`.
#### Tryb self-chat
-Dodaj własny numer do `allowFrom`, aby włączyć tryb self-chat (ignoruje natywne wzmianki @, odpowiada tylko na wzorce tekstowe):
+Uwzględnij własny numer w `allowFrom`, aby włączyć tryb self-chat (ignoruje natywne @-mentions, odpowiada tylko na wzorce tekstowe):
```json5
{
@@ -832,21 +832,21 @@ Dodaj własny numer do `allowFrom`, aby włączyć tryb self-chat (ignoruje naty
}
```
-### Commands (obsługa poleceń czatu)
+### Polecenia (obsługa poleceń czatu)
```json5
{
commands: {
- native: "auto", // rejestruj natywne polecenia, gdy są obsługiwane
- nativeSkills: "auto", // rejestruj natywne polecenia skill, gdy są obsługiwane
- text: true, // parsuj /commands w wiadomościach czatu
- bash: false, // zezwalaj na ! (alias: /bash)
+ native: "auto", // register native commands when supported
+ nativeSkills: "auto", // register native skill commands when supported
+ text: true, // parse /commands in chat messages
+ bash: false, // allow ! (alias: /bash)
bashForegroundMs: 2000,
- config: false, // zezwalaj na /config
- mcp: false, // zezwalaj na /mcp
- plugins: false, // zezwalaj na /plugins
- debug: false, // zezwalaj na /debug
- restart: true, // zezwalaj na /restart + narzędzie restartu bramy
+ config: false, // allow /config
+ mcp: false, // allow /mcp
+ plugins: false, // allow /plugins
+ debug: false, // allow /debug
+ restart: true, // allow /restart + gateway restart tool
ownerAllowFrom: ["discord:123456789012345678"],
ownerDisplay: "raw", // raw | hash
ownerDisplaySecret: "${OWNER_ID_HASH_SECRET}",
@@ -861,30 +861,30 @@ Dodaj własny numer do `allowFrom`, aby włączyć tryb self-chat (ignoruje naty
-- Ten blok konfiguruje powierzchnie poleceń. Bieżący katalog wbudowanych + bundled poleceń znajdziesz w [Slash Commands](/pl/tools/slash-commands).
-- Ta strona jest **dokumentacją referencyjną 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ą dokumentowane na ich stronach kanałów/pluginów oraz w [Slash Commands](/pl/tools/slash-commands).
+- Ten blok konfiguruje powierzchnie poleceń. Bieżący katalog poleceń built-in + bundled znajdziesz w [Polecenia Slash](/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 kanałów/pluginów oraz w [Polecenia Slash](/pl/tools/slash-commands).
- Polecenia tekstowe muszą być **samodzielnymi** wiadomościami zaczynającymi się od `/`.
- `native: "auto"` włącza natywne polecenia dla Discord/Telegram, pozostawia Slack wyłączony.
-- `nativeSkills: "auto"` włącza natywne polecenia skill dla Discord/Telegram, pozostawia Slack wyłączony.
+- `nativeSkills: "auto"` włącza natywne polecenia Skills dla Discord/Telegram, pozostawia Slack wyłączony.
- Nadpisanie per kanał: `channels.discord.commands.native` (bool lub `"auto"`). `false` czyści wcześniej zarejestrowane polecenia.
-- Nadpisz rejestrację natywnych skill per kanał przez `channels..commands.nativeSkills`.
-- `channels.telegram.customCommands` dodaje dodatkowe wpisy menu bota Telegram.
+- Nadpisz rejestrację natywnych Skills per kanał za pomocą `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` (odczyt/zapis `openclaw.json`). Dla klientów bramy `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 konfiguracji serwera MCP zarządzanego przez OpenClaw w `mcp.servers`.
-- `plugins: true` włącza `/plugins` dla wykrywania pluginów, instalacji i sterowania włączaniem/wyłączaniem.
-- `channels..configWrites` bramkuje mutacje konfiguracji per kanał (domyślnie: true).
-- Dla kanałów wielokontowych `channels..accounts..configWrites` także bramkuje zapisy, które dotyczą tego konta (na przykład `/allowlist --config --account ` lub `/config set channels..accounts....`).
-- `restart: false` wyłącza `/restart` i akcje narzędzia restartu bramy. Domyślnie: `true`.
+- `config: true` włącza `/config` (odczyt/zapis `openclaw.json`). Dla klientów bramy `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` steruje mutacjami konfiguracji per kanał (domyślnie: true).
+- Dla kanałów wielokontowych `channels..accounts..configWrites` również steruje zapisami kierowanymi do tego konta (na przykład `/allowlist --config --account ` lub `/config set channels..accounts....`).
+- `restart: false` wyłącza `/restart` oraz akcje narzędzia restartu bramy. 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ścicieli w system prompt. Ustaw `ownerDisplaySecret`, aby sterować hashowaniem.
-- `allowFrom` jest per dostawca. Jeśli jest ustawione, jest **jedynym** źródłem autoryzacji (listy dozwolonych/parowanie kanału i `useAccessGroups` są ignorowane).
+- `ownerDisplay: "hash"` hashuje identyfikatory właściciela w system prompt. Ustaw `ownerDisplaySecret`, aby kontrolować hashowanie.
+- `allowFrom` jest per dostawca. Gdy jest ustawione, jest to **jedyne** źródło autoryzacji (listy dozwolonych/parowanie kanału oraz `useAccessGroups` są ignorowane).
- `useAccessGroups: false` pozwala poleceniom omijać zasady grup dostępu, gdy `allowFrom` nie jest ustawione.
- Mapa dokumentacji poleceń:
- - katalog wbudowany + bundled: [Slash Commands](/pl/tools/slash-commands)
- - powierzchnie poleceń specyficzne dla kanału: [Channels](/pl/channels)
+ - katalog built-in + bundled: [Polecenia Slash](/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)
@@ -896,7 +896,7 @@ Dodaj własny numer do `allowFrom`, aby włączyć tryb self-chat (ignoruje naty
### `agents.defaults.workspace`
-Wartość domyślna: `~/.openclaw/workspace`.
+Domyślnie: `~/.openclaw/workspace`.
```json5
{
@@ -906,7 +906,7 @@ Wartość domyślna: `~/.openclaw/workspace`.
### `agents.defaults.repoRoot`
-Opcjonalny katalog główny repozytorium pokazywany w wierszu Runtime system prompt. Jeśli nie jest ustawiony, OpenClaw wykrywa go automatycznie, przechodząc w górę od workspace.
+Opcjonalny katalog główny repozytorium wyświetlany w wierszu Runtime system prompt. Jeśli nie jest ustawiony, OpenClaw wykrywa go automatycznie, przechodząc w górę od workspace.
```json5
{
@@ -926,16 +926,16 @@ Opcjonalna domyślna lista dozwolonych Skills dla agentów, które nie ustawiaj
list: [
{ id: "writer" }, // dziedziczy github, weather
{ id: "docs", skills: ["docs-search"] }, // zastępuje wartości domyślne
- { id: "locked-down", skills: [] }, // bez skills
+ { id: "locked-down", skills: [] }, // bez Skills
],
},
}
```
- Pomiń `agents.defaults.skills`, aby domyślnie nie ograniczać Skills.
-- Pomiń `agents.list[].skills`, aby odziedziczyć wartości domyślne.
+- Pomiń `agents.list[].skills`, aby dziedziczyć wartości domyślne.
- Ustaw `agents.list[].skills: []`, aby nie mieć żadnych Skills.
-- Niepusta lista `agents.list[].skills` jest ostatecznym zestawem dla tego agenta; nie
+- Niepusta lista `agents.list[].skills` jest końcowym zestawem dla tego agenta; nie
łączy się z wartościami domyślnymi.
### `agents.defaults.skipBootstrap`
@@ -950,9 +950,9 @@ Wyłącza automatyczne tworzenie plików bootstrap workspace (`AGENTS.md`, `SOUL
### `agents.defaults.contextInjection`
-Określa, kiedy pliki bootstrap workspace są wstrzykiwane do system prompt. Domyślnie: `"always"`.
+Kontroluje, kiedy pliki bootstrap workspace są wstrzykiwane do system prompt. Domyślnie: `"always"`.
-- `"continuation-skip"`: bezpieczne tury kontynuacji (po zakończonej odpowiedzi asystenta) pomijają ponowne wstrzykiwanie bootstrap workspace, zmniejszając rozmiar prompt. Uruchomienia heartbeat i ponowne próby po kompaktacji nadal odbudowują kontekst.
+- `"continuation-skip"`: bezpieczne tury kontynuacji (po ukończonej odpowiedzi asystenta) pomijają ponowne wstrzyknięcie bootstrapu workspace, zmniejszając rozmiar promptu. Uruchomienia heartbeat i ponowne próby po kompaktowaniu nadal odbudowują kontekst.
```json5
{
@@ -962,7 +962,7 @@ Określa, kiedy pliki bootstrap workspace są wstrzykiwane do system prompt. Dom
### `agents.defaults.bootstrapMaxChars`
-Maksymalna liczba znaków na plik bootstrap workspace przed przycięciem. Domyślnie: `20000`.
+Maksymalna liczba znaków na plik bootstrap workspace przed obcięciem. Domyślnie: `20000`.
```json5
{
@@ -972,7 +972,7 @@ Maksymalna liczba znaków na plik bootstrap workspace przed przycięciem. Domyś
### `agents.defaults.bootstrapTotalMaxChars`
-Maksymalna łączna liczba znaków wstrzykniętych we wszystkich plikach bootstrap workspace. Domyślnie: `150000`.
+Maksymalna łączna liczba znaków wstrzykiwana ze wszystkich plików bootstrap workspace. Domyślnie: `150000`.
```json5
{
@@ -982,12 +982,12 @@ Maksymalna łączna liczba znaków wstrzykniętych we wszystkich plikach bootstr
### `agents.defaults.bootstrapPromptTruncationWarning`
-Steruje widocznym dla agenta tekstem ostrzeżenia, gdy kontekst bootstrap jest przycinany.
+Kontroluje widoczny dla agenta tekst ostrzeżenia, gdy kontekst bootstrap jest obcinany.
Domyślnie: `"once"`.
-- `"off"`: nigdy nie wstrzykuje tekstu ostrzeżenia do system prompt.
-- `"once"`: wstrzykuje ostrzeżenie raz dla każdej unikalnej sygnatury przycięcia (zalecane).
-- `"always"`: wstrzykuje ostrzeżenie przy każdym uruchomieniu, gdy występuje przycięcie.
+- `"off"`: nigdy nie wstrzykuj tekstu ostrzeżenia do system prompt.
+- `"once"`: wstrzykuj ostrzeżenie raz dla każdej unikalnej sygnatury obcięcia (zalecane).
+- `"always"`: wstrzykuj ostrzeżenie przy każdym uruchomieniu, gdy istnieje obcięcie.
```json5
{
@@ -997,10 +997,10 @@ Domyślnie: `"once"`.
### `agents.defaults.imageMaxDimensionPx`
-Maksymalny rozmiar w pikselach najdłuższego boku obrazu w blokach obrazu transcript/tool przed wywołaniami dostawców.
+Maksymalny rozmiar w pikselach dłuższego boku obrazu w blokach obrazów transkryptu/narzędzi przed wywołaniami dostawcy.
Domyślnie: `1200`.
-Niższe wartości zwykle zmniejszają użycie vision-token i rozmiar ładunku żądania przy sesjach z dużą liczbą zrzutów ekranu.
+Niższe wartości zwykle zmniejszają użycie vision tokenów i rozmiar payloadu żądania w przebiegach z dużą liczbą zrzutów ekranu.
Wyższe wartości zachowują więcej szczegółów wizualnych.
```json5
@@ -1011,7 +1011,7 @@ Wyższe wartości zachowują więcej szczegółów wizualnych.
### `agents.defaults.userTimezone`
-Strefa czasowa dla kontekstu system prompt (nie dla znaczników czasu wiadomości). Zapasowo używana jest strefa czasowa hosta.
+Strefa czasowa dla kontekstu system prompt (nie dla znaczników czasu wiadomości). Wartość zapasowa to strefa czasowa hosta.
```json5
{
@@ -1021,7 +1021,7 @@ Strefa czasowa dla kontekstu system prompt (nie dla znaczników czasu wiadomośc
### `agents.defaults.timeFormat`
-Format czasu w system prompt. Domyślnie: `auto` (preferencja systemu operacyjnego).
+Format czasu w system prompt. Domyślnie: `auto` (preferencja OS).
```json5
{
@@ -1059,7 +1059,7 @@ Format czasu w system prompt. Domyślnie: `auto` (preferencja systemu operacyjne
primary: "anthropic/claude-opus-4-6",
fallbacks: ["openai/gpt-5.4-mini"],
},
- params: { cacheRetention: "long" }, // globalne domyślne parametry dostawcy
+ params: { cacheRetention: "long" }, // global default provider params
pdfMaxBytesMb: 10,
pdfMaxPages: 20,
thinkingDefault: "low",
@@ -1074,43 +1074,43 @@ Format czasu w system prompt. Domyślnie: `auto` (preferencja systemu operacyjne
}
```
-- `model`: akceptuje string (`"provider/model"`) lub obiekt (`{ primary, fallbacks }`).
- - Forma string ustawia tylko model podstawowy.
- - Forma obiektu ustawia model podstawowy plus uporządkowane modele zapasowe.
-- `imageModel`: akceptuje string (`"provider/model"`) lub obiekt (`{ primary, fallbacks }`).
+- `model`: akceptuje albo ciąg znaków (`"provider/model"`), albo obiekt (`{ primary, fallbacks }`).
+ - Forma ciągu ustawia tylko model główny.
+ - Forma obiektu ustawia model główny oraz uporządkowane modele przejęcia awaryjnego.
+- `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ąć obrazu jako wejścia.
-- `imageGenerationModel`: akceptuje string (`"provider/model"`) lub 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 także jako routing zapasowy, gdy wybrany/domyslny model nie może przyjąć wejścia obrazu.
+- `imageGenerationModel`: akceptuje albo ciąg znaków (`"provider/model"`), albo obiekt (`{ primary, fallbacks }`).
+ - Używany przez współdzieloną funkcję 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 także odpowiadające uwierzytelnienie/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 pole jest pominięte, `image_generate` nadal może wywnioskować domyślnego dostawcę z uwierzytelnieniem. Najpierw próbuje bieżącego domyślnego dostawcy, potem pozostałych zarejestrowanych dostawców generowania obrazów w kolejności identyfikatorów dostawców.
-- `musicGenerationModel`: akceptuje string (`"provider/model"`) lub obiekt (`{ primary, fallbacks }`).
- - Używany przez współdzieloną funkcję generowania muzyki i wbudowane narzędzie `music_generate`.
+ - Jeśli wybierzesz bezpośrednio `provider/model`, skonfiguruj też pasujące uwierzytelnienie/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ślny dostawca oparty na auth. 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 oraz 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 pole jest pominięte, `music_generate` nadal może wywnioskować domyślnego dostawcę z uwierzytelnieniem. Najpierw próbuje bieżącego domyślnego dostawcy, potem pozostałych zarejestrowanych dostawców generowania muzyki w kolejności identyfikatorów dostawców.
- - Jeśli wybierzesz bezpośrednio provider/model, skonfiguruj także odpowiadające uwierzytelnienie/klucz API dostawcy.
-- `videoGenerationModel`: akceptuje string (`"provider/model"`) lub obiekt (`{ primary, fallbacks }`).
- - Używany przez współdzieloną funkcję generowania wideo i wbudowane narzędzie `video_generate`.
+ - Jeśli pominięte, `music_generate` nadal może wywnioskować domyślny dostawca oparty na auth. 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 uwierzytelnienie/klucz API dostawcy.
+- `videoGenerationModel`: akceptuje albo ciąg znaków (`"provider/model"`), albo obiekt (`{ primary, fallbacks }`).
+ - Używany przez współdzieloną funkcję generowania wideo oraz 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 pole jest pominięte, `video_generate` nadal może wywnioskować domyślnego dostawcę z uwierzytelnieniem. Najpierw próbuje bieżącego domyślnego dostawcy, potem pozostałych zarejestrowanych dostawców generowania wideo w kolejności identyfikatorów dostawców.
- - Jeśli wybierzesz bezpośrednio provider/model, skonfiguruj także odpowiadające uwierzytelnienie/klucz API dostawcy.
- - Bundled dostawca generowania wideo Qwen obsługuje maksymalnie 1 wyjściowe wideo, 1 wejściowy obraz, 4 wejściowe wideo, 10 sekund czasu trwania oraz opcje na poziomie dostawcy `size`, `aspectRatio`, `resolution`, `audio` i `watermark`.
-- `pdfModel`: akceptuje string (`"provider/model"`) lub obiekt (`{ primary, fallbacks }`).
+ - Jeśli pominięte, `video_generate` nadal może wywnioskować domyślny dostawca oparty na auth. 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 uwierzytelnienie/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 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ęte, narzędzie PDF wraca 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 momencie wywołania.
-- `pdfMaxPages`: domyślna maksymalna liczba stron uwzględnianych przez tryb zapasowy ekstrakcji w narzędziu `pdf`.
+- `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 zapasowy tryb ekstrakcji w narzędziu `pdf`.
- `verboseDefault`: domyślny poziom verbose dla agentów. Wartości: `"off"`, `"on"`, `"full"`. Domyślnie: `"off"`.
- `elevatedDefault`: domyślny poziom elevated-output 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 skonfigurowanego dostawcy dla tego dokładnego identyfikatora modelu, a dopiero potem wraca 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 wraca do pierwszego skonfigurowanego dostawcy/modelu zamiast ujawniać nieaktualny domyślny model 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, np. `temperature`, `maxTokens`, `cacheRetention`, `context1m`).
+- `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 do skonfigurowanego dostawcy, 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 wraca do pierwszego skonfigurowanego dostawcy/modelu zamiast ujawniać 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) oraz `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 kluczach. Szczegóły znajdziesz w [Prompt Caching](/pl/reference/prompt-caching).
-- Narzędzia zapisu konfiguracji, które modyfikują te pola (na przykład `/models set`, `/models set-image` oraz polecenia dodawania/usuwania fallbacków), zapisują kanoniczną formę obiektową i w miarę możliwości zachowują istniejące listy fallbacków.
+- 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).
+- 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 w miarę możliwości zachowują istniejące listy fallbacków.
- `maxConcurrent`: maksymalna liczba równoległych uruchomień agentów między sesjami (każda sesja nadal jest serializowana). Domyślnie: 4.
-**Wbudowane skróty aliasów** (mają zastosowanie tylko wtedy, gdy model znajduje się w `agents.defaults.models`):
+**Wbudowane skróty aliasów** (mają zastosowanie tylko wtedy, gdy model jest w `agents.defaults.models`):
| Alias | Model |
| ------------------- | -------------------------------------- |
@@ -1125,13 +1125,13 @@ Format czasu w system prompt. Domyślnie: `auto` (preferencja systemu operacyjne
Twoje skonfigurowane aliasy zawsze mają pierwszeństwo przed domyślnymi.
-Modele Z.AI GLM-4.x automatycznie włączają tryb myślenia, chyba że ustawisz `--thinking off` lub samodzielnie zdefiniujesz `agents.defaults.models["zai/"].params.thinking`.
-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ą myślenia `adaptive`, gdy nie jest ustawiony jawny poziom myślenia.
+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` dla streamingu 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ą `adaptive` thinking, gdy nie ustawiono jawnego poziomu thinking.
### `agents.defaults.cliBackends`
-Opcjonalne backendy CLI dla awaryjnych uruchomień tylko tekstowych (bez wywołań narzędzi). Przydatne jako zapas, gdy dostawcy API zawodzą.
+Opcjonalne backendy CLI dla zapasowych uruchomień tylko tekstowych (bez wywołań narzędzi). Przydatne jako kopia zapasowa, gdy dostawcy API zawodzą.
```json5
{
@@ -1159,13 +1159,13 @@ Opcjonalne backendy CLI dla awaryjnych uruchomień tylko tekstowych (bez wywoła
}
```
-- Backendy CLI są nastawione na tekst; narzędzia są zawsze wyłączone.
-- Sesje są obsługiwane, gdy ustawione jest `sessionArg`.
+- Backendy CLI są przede wszystkim tekstowe; narzędzia są zawsze wyłączone.
+- 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 stringiem. 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. 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ść zawierająca wyłącznie białe znaki jest ignorowana. Przydatne do kontrolowanych eksperymentów z promptami.
```json5
{
@@ -1186,16 +1186,16 @@ Okresowe uruchomienia heartbeat.
agents: {
defaults: {
heartbeat: {
- every: "30m", // 0m wyłącza
+ every: "30m", // 0m disables
model: "openai/gpt-5.4-mini",
includeReasoning: false,
- includeSystemPromptSection: true, // domyślnie: true; false pomija sekcję Heartbeat z system prompt
- lightContext: false, // domyślnie: false; true zachowuje tylko HEARTBEAT.md z plików bootstrap workspace
- isolatedSession: false, // domyślnie: false; true uruchamia każdy heartbeat w nowej sesji (bez historii rozmowy)
+ includeSystemPromptSection: true, // default: true; false omits the Heartbeat section from the system prompt
+ lightContext: false, // default: false; true keeps only HEARTBEAT.md from workspace bootstrap files
+ isolatedSession: false, // default: false; true runs each heartbeat in a fresh session (no conversation history)
session: "main",
to: "+15555550123",
- directPolicy: "allow", // allow (domyślnie) | block
- target: "none", // domyślnie: none | opcje: last | whatsapp | telegram | discord | ...
+ directPolicy: "allow", // allow (default) | block
+ target: "none", // default: none | options: last | whatsapp | telegram | discord | ...
prompt: "Read HEARTBEAT.md if it exists...",
ackMaxChars: 300,
suppressToolErrorWarnings: false,
@@ -1205,14 +1205,14 @@ Okresowe uruchomienia heartbeat.
}
```
-- `every`: string czasu trwania (ms/s/m/h). Domyślnie: `30m` (uwierzytelnianie kluczem API) lub `1h` (uwierzytelnianie OAuth). Ustaw `0m`, aby wyłączyć.
-- `includeSystemPromptSection`: gdy false, pomija sekcję Heartbeat z system prompt i pomija wstrzykiwanie `HEARTBEAT.md` do kontekstu bootstrap. Domyślnie: `true`.
-- `suppressToolErrorWarnings`: gdy true, wycisza ładunki ostrzeżeń o błędach narzędzi podczas uruchomień heartbeat.
-- `directPolicy`: zasada dostarczania bezpośredniego/DM. `allow` (domyślnie) pozwala na dostarczanie do celu bezpośredniego. `block` tłumi dostarczanie do celu bezpośredniego i emituje `reason=dm-blocked`.
+- `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 false, pomija sekcję Heartbeat w system prompt i pomija wstrzykiwanie `HEARTBEAT.md` do kontekstu bootstrap. Domyślnie: `true`.
+- `suppressToolErrorWarnings`: gdy true, wycisza payloady ostrzeżeń o błędach narzędzi podczas uruchomień heartbeat.
+- `directPolicy`: zasada dostarczania bezpośredniego/DM. `allow` (domyślnie) zezwala na dostarczanie do celu bezpośredniego. `block` wyłącza dostarczanie do celu bezpośredniego 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żde uruchomienie heartbeat działa w świeżej sesji bez wcześniejszej historii rozmowy. Ten sam wzorzec izolacji co cron `sessionTarget: "isolated"`. Zmniejsza koszt tokenów pojedynczego heartbeat z ~100K do ~2-5K tokenów.
-- Per agent: ustaw `agents.list[].heartbeat`. Gdy dowolny agent definiuje `heartbeat`, heartbeat uruchamiają **tylko ci agenci**.
-- Heartbeat wykonuje pełne tury agenta — krótsze interwały zużywają więcej tokenów.
+- `isolatedSession`: gdy true, każde uruchomienie heartbeat działa w świeżej sesji bez wcześniejszej historii rozmowy. Ten sam wzorzec izolacji co `sessionTarget: "isolated"` w cron. Zmniejsza koszt tokenów na heartbeat z ~100K do ~2-5K tokenów.
+- Per agent: ustaw `agents.list[].heartbeat`. Gdy jakikolwiek agent definiuje `heartbeat`, heartbeat uruchamiają **tylko ci agenci**.
+- Heartbeat wykonuje pełne tury agenta — krótsze interwały spalają więcej tokenów.
### `agents.defaults.compaction`
@@ -1222,14 +1222,14 @@ Okresowe uruchomienia heartbeat.
defaults: {
compaction: {
mode: "safeguard", // default | safeguard
- provider: "my-provider", // id zarejestrowanego pluginu dostawcy kompaktacji (opcjonalnie)
+ provider: "my-provider", // id of a registered compaction provider plugin (optional)
timeoutSeconds: 900,
reserveTokensFloor: 24000,
identifierPolicy: "strict", // strict | off | custom
- identifierInstructions: "Preserve deployment IDs, ticket IDs, and host:port pairs exactly.", // używane, gdy identifierPolicy=custom
- postCompactionSections: ["Session Startup", "Red Lines"], // [] wyłącza ponowne wstrzykiwanie
- model: "openrouter/anthropic/claude-sonnet-4-6", // opcjonalne nadpisanie modelu tylko dla kompaktacji
- notifyUser: true, // wyślij krótkie powiadomienie, gdy kompaktacja się rozpocznie (domyślnie: false)
+ identifierInstructions: "Preserve deployment IDs, ticket IDs, and host:port pairs exactly.", // used when identifierPolicy=custom
+ postCompactionSections: ["Session Startup", "Red Lines"], // [] disables reinjection
+ model: "openrouter/anthropic/claude-sonnet-4-6", // optional compaction-only model override
+ notifyUser: true, // send a brief notice when compaction starts (default: false)
memoryFlush: {
enabled: true,
softThresholdTokens: 6000,
@@ -1242,15 +1242,15 @@ Okresowe uruchomienia heartbeat.
}
```
-- `mode`: `default` lub `safeguard` (sumaryzacja porcjowana dla długich historii). Zobacz [Compaction](/pl/concepts/compaction).
-- `provider`: id zarejestrowanego pluginu dostawcy kompaktacji. Gdy ustawione, wywoływane jest `summarize()` dostawcy zamiast wbudowanej sumaryzacji LLM. W razie błędu następuje powrót do wbudowanej. Ustawienie dostawcy wymusza `mode: "safeguard"`. Zobacz [Compaction](/pl/concepts/compaction).
-- `timeoutSeconds`: maksymalna liczba sekund dozwolona dla pojedynczej operacji kompaktacji, po której OpenClaw ją przerywa. Domyślnie: `900`.
-- `identifierPolicy`: `strict` (domyślnie), `off` lub `custom`. `strict` poprzedza sumaryzację kompaktacji wbudowanymi wskazówkami dotyczącymi zachowywania nieprzezroczystych identyfikatorów.
-- `identifierInstructions`: opcjonalny własny tekst zachowywania identyfikatorów używany, gdy `identifierPolicy=custom`.
-- `postCompactionSections`: opcjonalne nazwy sekcji H2/H3 z AGENTS.md do ponownego wstrzyknięcia po kompaktacji. Domyślnie `["Session Startup", "Red Lines"]`; ustaw `[]`, aby wyłączyć ponowne wstrzykiwanie. Gdy nieustawione lub jawnie ustawione na tę domyślną parę, starsze nagłówki `Every Session`/`Safety` są także akceptowane jako zgodność wsteczna.
-- `model`: opcjonalne nadpisanie `provider/model-id` tylko dla sumaryzacji kompaktacji. Użyj tego, gdy główna sesja ma pozostać przy jednym modelu, ale sumaryzacje kompaktacji mają działać na innym; gdy nieustawione, kompaktacja używa podstawowego modelu sesji.
-- `notifyUser`: gdy `true`, wysyła krótką informację do użytkownika, gdy kompaktacja się rozpoczyna (na przykład „Compacting context...” ). Domyślnie wyłączone, aby kompaktacja pozostawała cicha.
-- `memoryFlush`: cicha tura agentyczna przed automatyczną kompaktacją w celu zapisania trwałych wspomnień. Pomijana, gdy workspace jest tylko do odczytu.
+- `mode`: `default` lub `safeguard` (fragmentaryczne streszczanie dla długich historii). Zobacz [Compaction](/pl/concepts/compaction).
+- `provider`: identyfikator zarejestrowanego pluginu dostawcy compaction. Gdy jest ustawiony, wywoływane jest `summarize()` tego dostawcy zamiast wbudowanego streszczania LLM. W razie błędu wraca do wbudowanego rozwiązania. 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 zachowania nieprzezroczystych identyfikatorów podczas streszczania compaction.
+- `identifierInstructions`: opcjonalny niestandardowy 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 starszy mechanizm zapasowy.
+- `model`: opcjonalne nadpisanie `provider/model-id` tylko dla streszczania compaction. Użyj tego, gdy główna sesja powinna pozostać przy jednym modelu, ale streszczenia compaction mają działać na innym; gdy nieustawione, compaction używa modelu głównego sesji.
+- `notifyUser`: gdy `true`, wysyła użytkownikowi krótkie powiadomienie po rozpoczęciu compaction (na przykład „Compacting context...”). Domyślnie wyłączone, aby compaction pozostawał cichy.
+- `memoryFlush`: cicha tura agentowa przed automatycznym compaction, aby zapisać trwałe wspomnienia. Pomijana, gdy workspace jest tylko do odczytu.
### `agents.defaults.contextPruning`
@@ -1262,7 +1262,7 @@ Przycina **stare wyniki narzędzi** z kontekstu w pamięci przed wysłaniem do L
defaults: {
contextPruning: {
mode: "cache-ttl", // off | cache-ttl
- ttl: "1h", // czas trwania (ms/s/m/h), domyślna jednostka: minuty
+ ttl: "1h", // duration (ms/s/m/h), default unit: minutes
keepLastAssistants: 3,
softTrimRatio: 0.3,
hardClearRatio: 0.5,
@@ -1279,24 +1279,24 @@ 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 dotknięciu cache).
-- Przycinanie najpierw miękko skraca zbyt duże wyniki narzędzi, a potem twardo czyści starsze wyniki narzędzi, jeśli to konieczne.
+- `ttl` kontroluje, 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 potem w razie potrzeby całkowicie czyści starsze wyniki narzędzi.
-**Miękkie przycinanie** zachowuje początek + koniec i wstawia `...` w środku.
+**Miękkie skracanie** zachowuje początek i koniec oraz wstawia `...` pośrodku.
**Twarde czyszczenie** zastępuje cały wynik narzędzia placeholderem.
Uwagi:
-- Bloki obrazów nigdy nie są przycinane/czyszczone.
-- Proporcje są oparte na znakach (przybliżenie), a nie dokładnej liczbie tokenów.
+- Bloki obrazów nigdy nie są skracane/czyszczone.
+- Proporcje są oparte na liczbie znaków (przybliżenie), 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).
-### Strumieniowanie blokowe
+### Block streaming
```json5
{
@@ -1306,17 +1306,17 @@ Szczegóły zachowania znajdziesz w [Session Pruning](/pl/concepts/session-pruni
blockStreamingBreak: "text_end", // text_end | message_end
blockStreamingChunk: { minChars: 800, maxChars: 1200 },
blockStreamingCoalesce: { idleMs: 1000 },
- humanDelay: { mode: "natural" }, // off | natural | custom (użyj minMs/maxMs)
+ humanDelay: { mode: "natural" }, // off | natural | custom (use minMs/maxMs)
},
},
}
```
- Kanały inne niż Telegram wymagają jawnego `*.blockStreaming: true`, aby włączyć odpowiedzi blokowe.
-- Nadpisania kanałów: `channels..blockStreamingCoalesce` (i warianty per konto). Signal/Slack/Discord/Google Chat domyślnie używają `minChars: 1500`.
-- `humanDelay`: losowa pauza między odpowiedziami blokowymi. `natural` = 800–2500 ms. Nadpisanie per agent: `agents.list[].humanDelay`.
+- Nadpisania kanału: `channels..blockStreamingCoalesce` (oraz warianty per konto). Signal/Slack/Discord/Google Chat mają domyślnie `minChars: 1500`.
+- `humanDelay`: losowa przerwa między odpowiedziami blokowymi. `natural` = 800–2500 ms. Nadpisanie per agent: `agents.list[].humanDelay`.
-Zobacz [Streaming](/pl/concepts/streaming), aby poznać zachowanie i szczegóły chunkowania.
+Szczegóły zachowania i dzielenia na fragmenty znajdziesz w [Streaming](/pl/concepts/streaming).
### Wskaźniki pisania
@@ -1331,7 +1331,7 @@ Zobacz [Streaming](/pl/concepts/streaming), aby poznać zachowanie i szczegóły
}
```
-- Domyślnie: `instant` dla czatów bezpośrednich/wzmianek, `message` dla niewspomnianych 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).
@@ -1340,7 +1340,7 @@ Zobacz [Typing Indicators](/pl/concepts/typing-indicators).
### `agents.defaults.sandbox`
-Opcjonalne sandboxing dla osadzonego agenta. Pełny przewodnik znajdziesz w [Sandboxing](/pl/gateway/sandboxing).
+Opcjonalny sandboxing dla osadzonego agenta. Pełny przewodnik znajdziesz w [Sandboxing](/pl/gateway/sandboxing).
```json5
{
@@ -1386,7 +1386,7 @@ Opcjonalne sandboxing dla osadzonego agenta. Pełny przewodnik znajdziesz w [San
identityFile: "~/.ssh/id_ed25519",
certificateFile: "~/.ssh/id_ed25519-cert.pub",
knownHostsFile: "~/.ssh/known_hosts",
- // SecretRefs / treści inline także są obsługiwane:
+ // SecretRefs / inline contents also supported:
// identityData: { source: "env", provider: "default", id: "SSH_IDENTITY" },
// certificateData: { source: "env", provider: "default", id: "SSH_CERTIFICATE" },
// knownHostsData: { source: "env", provider: "default", id: "SSH_KNOWN_HOSTS" },
@@ -1439,44 +1439,44 @@ Opcjonalne sandboxing dla osadzonego agenta. Pełny przewodnik znajdziesz w [San
**Backend:**
-- `docker`: lokalne środowisko Docker (domyślnie)
-- `ssh`: ogólne zdalne środowisko oparte na SSH
-- `openshell`: środowisko OpenShell
+- `docker`: lokalny runtime Docker (domyślnie)
+- `ssh`: ogólny zdalny runtime oparty na SSH
+- `openshell`: runtime OpenShell
-Gdy wybrano `backend: "openshell"`, ustawienia specyficzne dla środowiska wykonawczego przechodzą do
+Gdy wybrane jest `backend: "openshell"`, ustawienia specyficzne dla runtime są przenoszone do
`plugins.entries.openshell.config`.
**Konfiguracja backendu SSH:**
- `target`: cel SSH w formie `user@host[:port]`
- `command`: polecenie klienta SSH (domyślnie: `ssh`)
-- `workspaceRoot`: bezwzględny zdalny katalog główny używany dla workspace per scope
+- `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`: treści inline lub SecretRef, które OpenClaw materializuje do plików tymczasowych w czasie działania
-- `strictHostKeyChecking` / `updateHostKeys`: przełączniki zasad klucza hosta OpenSSH
+- `identityData` / `certificateData` / `knownHostsData`: zawartość inline lub SecretRefs, które OpenClaw materializuje do plików tymczasowych w runtime
+- `strictHostKeyChecking` / `updateHostKeys`: ustawienia zasad kluczy hosta OpenSSH
**Priorytet uwierzytelniania SSH:**
- `identityData` ma pierwszeństwo przed `identityFile`
- `certificateData` ma pierwszeństwo przed `certificateFile`
- `knownHostsData` ma pierwszeństwo przed `knownHostsFile`
-- Wartości `*Data` oparte na SecretRef są rozwiązywane z aktywnej migawki środowiska sekretów przed rozpoczęciem sesji sandbox
+- Wartości `*Data` oparte na SecretRef są rozwiązywane z aktywnego snapshotu runtime sekretów przed rozpoczęciem sesji sandbox
**Zachowanie backendu SSH:**
-- zasiewa zdalny workspace raz po utworzeniu lub ponownym utworzeniu
+- 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 do hosta
-- nie obsługuje kontenerów przeglądarki w sandboxie
+- nie synchronizuje automatycznie zmian zdalnych z powrotem na hosta
+- nie obsługuje kontenerów przeglądarki sandbox
**Dostęp do workspace:**
-- `none`: workspace sandbox per scope w `~/.openclaw/sandboxes`
-- `ro`: workspace sandbox pod `/workspace`, workspace agenta zamontowany tylko do odczytu pod `/agent`
-- `rw`: workspace agenta zamontowany do odczytu/zapisu pod `/workspace`
+- `none`: workspace sandbox per zakres w `~/.openclaw/sandboxes`
+- `ro`: workspace sandbox w `/workspace`, workspace agenta montowany tylko do odczytu w `/agent`
+- `rw`: workspace agenta montowany do odczytu i zapisu w `/workspace`
-**Scope:**
+**Zakres:**
- `session`: kontener + workspace per sesja
- `agent`: jeden kontener + workspace per agent (domyślnie)
@@ -1495,10 +1495,10 @@ Gdy wybrano `backend: "openshell"`, ustawienia specyficzne dla środowiska wykon
from: "openclaw",
remoteWorkspaceDir: "/sandbox",
remoteAgentWorkspaceDir: "/agent",
- gateway: "lab", // opcjonalnie
- gatewayEndpoint: "https://lab.example", // opcjonalnie
- policy: "strict", // opcjonalny identyfikator polityki OpenShell
- providers: ["openai"], // opcjonalnie
+ gateway: "lab", // optional
+ gatewayEndpoint: "https://lab.example", // optional
+ policy: "strict", // optional OpenShell policy id
+ providers: ["openai"], // optional
autoProviders: true,
timeoutSeconds: 120,
},
@@ -1510,30 +1510,30 @@ Gdy wybrano `backend: "openshell"`, ustawienia specyficzne dla środowiska wykon
**Tryb OpenShell:**
-- `mirror`: zasiej zdalne z lokalnego przed exec, synchronizuj z powrotem po exec; lokalny workspace pozostaje kanoniczny
-- `remote`: zasiej zdalne raz podczas tworzenia sandbox, następnie utrzymuj zdalny workspace jako kanoniczny
+- `mirror`: zainicjalizuj zdalny zasób z lokalnego przed exec, zsynchronizuj z powrotem po exec; lokalny workspace pozostaje kanoniczny
+- `remote`: zainicjalizuj zdalny zasób raz przy tworzeniu sandbox, a następnie utrzymuj zdalny workspace jako kanoniczny
-W trybie `remote` lokalne edycje hosta wykonane poza OpenClaw nie są automatycznie synchronizowane do sandbox po kroku zasiewania.
+W trybie `remote` lokalne na hoście edycje wykonane poza OpenClaw nie są automatycznie synchronizowane do sandbox po kroku inicjalizacji.
Transport odbywa się przez SSH do sandbox OpenShell, ale plugin zarządza cyklem życia sandbox i opcjonalną synchronizacją mirror.
-**`setupCommand`** uruchamia się raz po utworzeniu kontenera (przez `sh -lc`). Wymaga wyjścia sieciowego, zapisywalnego katalogu głównego i użytkownika root.
+**`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.
**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` (break-glass).
+`sandbox.docker.dangerouslyAllowContainerNamespaceJoin: true` (tryb break-glass).
-**Załączniki przychodzące** są stagingowane do `media/inbound/*` w aktywnym workspace.
+**Przychodzące załączniki** są umieszczane w `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.
**Sandboxed browser** (`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).
-- `allowHostControl: false` (domyślnie) blokuje sesjom sandbox kierowanie do przeglądarki hosta.
+- `allowHostControl: false` (domyślnie) blokuje możliwość kierowania sesji sandbox 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 wejście CDP na granicy kontenera do zakresu CIDR (na przykład `172.21.0.1/32`).
+- `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 sandbox. Gdy jest 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:
+- Domyślne ustawienia uruchomienia są zdefiniowane w `scripts/sandbox-browser-entrypoint.sh` i dostrojone pod hosty kontenerowe:
- `--remote-debugging-address=127.0.0.1`
- `--remote-debugging-port=`
- `--user-data-dir=${HOME}/.chrome`
@@ -1554,20 +1554,20 @@ 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 od nich
- zależy Twój workflow.
+ - `OPENCLAW_BROWSER_DISABLE_EXTENSIONS=0` ponownie włącza rozszerzenia, jeśli twój workflow
+ 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.
- plus `--no-sandbox` i `--disable-setuid-sandbox`, gdy włączone jest `noSandbox`.
- - Ustawienia domyślne są bazą obrazu kontenera; użyj własnego obrazu przeglądarki z własnym
- entrypointem, aby zmienić domyślne zachowanie kontenera.
+ - Wartości domyślne są bazą obrazu kontenera; użyj niestandardowego obrazu przeglądarki z niestandardowym
+ entrypointem, aby zmienić domyślne ustawienia kontenera.
Sandboxing przeglądarki i `sandbox.docker.binds` są dostępne tylko dla Docker.
-Budowanie obrazów:
+Zbuduj obrazy:
```bash
scripts/sandbox-setup.sh # główny obraz sandbox
@@ -1587,10 +1587,10 @@ scripts/sandbox-browser-setup.sh # opcjonalny obraz przeglądarki
workspace: "~/.openclaw/workspace",
agentDir: "~/.openclaw/agents/main/agent",
model: "anthropic/claude-opus-4-6", // lub { primary, fallbacks }
- thinkingDefault: "high", // nadpisanie domyślnego poziomu myślenia per agent
- reasoningDefault: "on", // nadpisanie domyślnej widoczności reasoning per agent
+ thinkingDefault: "high", // nadpisanie poziomu thinking per agent
+ reasoningDefault: "on", // nadpisanie widoczności reasoning per agent
fastModeDefault: false, // nadpisanie fast mode per agent
- params: { cacheRetention: "none" }, // nadpisuje matching defaults.models params po kluczach
+ params: { cacheRetention: "none" }, // nadpisuje pasujące defaults.models params po kluczu
skills: ["docs-search"], // zastępuje agents.defaults.skills, gdy ustawione
identity: {
name: "Samantha",
@@ -1623,25 +1623,25 @@ scripts/sandbox-browser-setup.sh # opcjonalny obraz przeglądarki
```
- `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.
-- `model`: forma string 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 na wpis wybranego 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 się z nimi scalać, a `[]` oznacza brak Skills.
-- `thinkingDefault`: opcjonalny domyślny poziom myślenia per agent (`off | minimal | low | medium | high | xhigh | adaptive`). Nadpisuje `agents.defaults.thinkingDefault` dla tego agenta, gdy nie jest ustawione nadpisanie per wiadomość lub sesję.
-- `reasoningDefault`: opcjonalna domyślna widoczność reasoning per agent (`on | off | stream`). Stosowana, gdy nie jest ustawione nadpisanie reasoning per wiadomość lub sesję.
-- `fastModeDefault`: opcjonalna domyślna wartość fast mode per agent (`true | false`). Stosowana, gdy nie jest ustawione nadpisanie fast-mode per wiadomość lub sesję.
-- `runtime`: opcjonalny deskryptor środowiska wykonawczego per agent. Użyj `type: "acp"` z domyślnymi ustawieniami `runtime.acp` (`agent`, `backend`, `mode`, `cwd`), gdy agent ma domyślnie używać sesji harness ACP.
+- `default`: gdy ustawiono wiele, wygrywa pierwszy (zapisywane jest ostrzeżenie). Jeśli żaden nie jest ustawiony, domyślny jest pierwszy wpis listy.
+- `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 się z nimi łączyć, 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 sesja.
+- `reasoningDefault`: opcjonalna domyślna widoczność reasoning per agent (`on | off | stream`). Ma zastosowanie, gdy nie ustawiono nadpisania reasoning per wiadomość ani per sesja.
+- `fastModeDefault`: opcjonalna wartość domyślna fast mode per agent (`true | false`). Ma zastosowanie, gdy nie ustawiono nadpisania fast mode per wiadomość ani per sesja.
+- `runtime`: opcjonalny deskryptor runtime per agent. Użyj `type: "acp"` z domyślnymi wartościami `runtime.acp` (`agent`, `backend`, `mode`, `cwd`), gdy agent ma domyślnie używać sesji harness ACP.
- `identity.avatar`: ścieżka względem workspace, 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).
-- Ochrona dziedziczenia sandbox: jeśli sesja żądająca jest sandboxowana, `sessions_spawn` odrzuca cele, które działałyby bez sandbox.
+- Ochrona dziedziczenia sandbox: jeśli sesja żądająca jest w sandbox, `sessions_spawn` odrzuca cele, które działałyby poza sandbox.
- `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
+## Routing wieloagentowy
-Uruchamiaj wielu izolowanych agentów w jednej bramie. Zobacz [Multi-Agent](/pl/concepts/multi-agent).
+Uruchamiaj wielu odizolowanych agentów w jednej bramie Gateway. Zobacz [Multi-Agent](/pl/concepts/multi-agent).
```json5
{
@@ -1660,12 +1660,12 @@ Uruchamiaj wielu izolowanych agentów w jednej bramie. Zobacz [Multi-Agent](/pl/
### Pola dopasowania binding
-- `type` (opcjonalnie): `route` dla zwykłego routingu (brak typu oznacza route), `acp` dla trwałych powiązań konwersacji ACP.
+- `type` (opcjonalnie): `route` dla zwykłego routingu (brakujący typ domyślnie oznacza route), `acp` dla trwałych powiązań rozmów 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; specyficzne dla kanału)
-- `acp` (opcjonalne; tylko dla wpisów `type: "acp"`): `{ mode, label, cwd, backend }`
+- `match.accountId` (opcjonalnie; `*` = dowolne konto; pominięte = konto domyślne)
+- `match.peer` (opcjonalnie; `{ kind: direct|group|channel, id }`)
+- `match.guildId` / `match.teamId` (opcjonalnie; specyficzne dla kanału)
+- `acp` (opcjonalnie; tylko dla wpisów `type: "acp"`): `{ mode, label, cwd, backend }`
**Deterministyczna kolejność dopasowania:**
@@ -1673,12 +1673,12 @@ Uruchamiaj wielu izolowanych agentów w jednej bramie. Zobacz [Multi-Agent](/pl/
2. `match.guildId`
3. `match.teamId`
4. `match.accountId` (dokładne, bez peer/guild/team)
-5. `match.accountId: "*"` (w całym kanale)
+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 konwersacji (`match.channel` + konto + `match.peer.id`) i nie używa powyższej hierarchii routingu route binding.
+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 route binding.
### Profile dostępu per agent
@@ -1729,7 +1729,7 @@ Dla wpisów `type: "acp"` OpenClaw rozwiązuje po dokładnej tożsamości konwer
-
+
```json5
{
@@ -1775,7 +1775,7 @@ Dla wpisów `type: "acp"` OpenClaw rozwiązuje po dokładnej tożsamości konwer
-Szczegóły pierwszeństwa znajdziesz w [Multi-Agent Sandbox & Tools](/pl/tools/multi-agent-sandbox-tools).
+Szczegóły priorytetów znajdziesz w [Multi-Agent Sandbox & Tools](/pl/tools/multi-agent-sandbox-tools).
---
@@ -1809,14 +1809,14 @@ Szczegóły pierwszeństwa znajdziesz w [Multi-Agent Sandbox & Tools](/pl/tools/
rotateBytes: "10mb",
resetArchiveRetention: "30d", // czas trwania lub false
maxDiskBytes: "500mb", // opcjonalny twardy budżet
- highWaterBytes: "400mb", // opcjonalny cel cleanup
+ highWaterBytes: "400mb", // opcjonalny cel czyszczenia
},
threadBindings: {
enabled: true,
- idleHours: 24, // domyślne automatyczne odwiązywanie po bezczynności w godzinach (`0` wyłącza)
+ idleHours: 24, // domyślny automatyczny unfocus po bezczynności w godzinach (`0` wyłącza)
maxAgeHours: 0, // domyślny twardy maksymalny wiek w godzinach (`0` wyłącza)
},
- mainKey: "main", // starsze (runtime zawsze używa "main")
+ mainKey: "main", // starsza wersja (runtime zawsze używa "main")
agentToAgent: { maxPingPongTurns: 5 },
sendPolicy: {
rules: [{ action: "deny", match: { channel: "discord", chatType: "group" } }],
@@ -1829,33 +1829,33 @@ Szczegóły pierwszeństwa znajdziesz w [Multi-Agent Sandbox & Tools](/pl/tools/
- **`scope`**: bazowa strategia grupowania sesji dla kontekstów czatu grupowego.
- - `per-sender` (domyślnie): każdy nadawca otrzymuje izolowaną sesję w kontekście kanału.
- - `global`: wszyscy uczestnicy w kontekście kanału współdzielą jedną sesję (używaj tylko wtedy, gdy zamierzony jest wspólny kontekst).
+ - `per-sender` (domyślnie): każdy nadawca otrzymuje odizolowaną sesję w obrębie 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 wieloużytkownikowych skrzynek odbiorczych).
+ - `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`**: główna zasada resetu. `daily` resetuje o `atHour` czasu lokalnego; `idle` resetuje po `idleMinutes`. Gdy skonfigurowane są oba, wygrywa ten, który wygaśnie wcześniej.
-- **`resetByType`**: nadpisania per typ (`direct`, `group`, `thread`). Starsze `dm` jest akceptowane jako alias `direct`.
-- **`parentForkMaxTokens`**: maksymalne `totalTokens` sesji nadrzędnej dozwolone przy tworzeniu rozwidlonej sesji wątku (domyślnie `100000`).
- - Jeśli `totalTokens` rodzica jest powyżej tej wartości, OpenClaw uruchamia świeżą sesję wątku zamiast dziedziczyć historię transkrypcji rodzica.
- - Ustaw `0`, aby wyłączyć to zabezpieczenie i zawsze pozwalać na forki rodzica.
-- **`mainKey`**: starsze pole. Runtime zawsze używa `"main"` dla głównego bucketu 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ńcuchy ping-pong.
-- **`sendPolicy`**: dopasowanie po `channel`, `chatType` (`direct|group|channel`, ze starszym aliasem `dm`), `keyPrefix` lub `rawKeyPrefix`. Pierwsze deny wygrywa.
-- **`maintenance`**: kontrola cleanup + retencji magazynu sesji.
- - `mode`: `warn` emituje tylko ostrzeżenia; `enforce` stosuje cleanup.
- - `pruneAfter`: próg wieku dla nieaktualnych wpisów (domyślnie `30d`).
+- **`identityLinks`**: mapuje identyfikatory kanoniczne na peery z prefiksem dostawcy do współdzielenia sesji między kanałami.
+- **`reset`**: podstawowa zasada resetu. `daily` resetuje o lokalnej godzinie `atHour`; `idle` resetuje po `idleMinutes`. Gdy skonfigurowane są oba, wygrywa ten, który 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 świeżą sesję wątku zamiast dziedziczyć historię transkryptu sesji nadrzędnej.
+ - Ustaw `0`, aby wyłączyć to zabezpieczenie i zawsze pozwalać na rozwidlanie z sesji nadrzędnej.
+- **`mainKey`**: starsze pole. Runtime zawsze używa `"main"` dla głównego koszyka czatu bezpośredniego.
+- **`agentToAgent.maxPingPongTurns`**: maksymalna liczba tur odpowiedzi zwrotnej między agentami podczas wymian agent-agent (liczba całkowita, zakres: `0`–`5`). `0` wyłącza łańcuchowanie ping-pong.
+- **`sendPolicy`**: dopasowanie według `channel`, `chatType` (`direct|group|channel`, ze starszym aliasem `dm`), `keyPrefix` lub `rawKeyPrefix`. Pierwsze dopasowanie deny wygrywa.
+- **`maintenance`**: kontrola czyszczenia i 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 zgodna z `pruneAfter`; ustaw `false`, aby wyłączyć.
- - `maxDiskBytes`: opcjonalny budżet dyskowy katalogu sesji. W trybie `warn` zapisuje ostrzeżenia; w trybie `enforce` usuwa najstarsze artefakty/sesje w pierwszej kolejności.
- - `highWaterBytes`: opcjonalny cel po cleanup budżetu. Domyślnie `80%` z `maxDiskBytes`.
-- **`threadBindings`**: globalne wartości domyślne dla funkcji sesji związanych z wątkiem.
+ - `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 powiązanych z wątkiem.
- `enabled`: główny domyślny przełącznik (dostawcy mogą nadpisywać; Discord używa `channels.discord.threadBindings.enabled`)
- - `idleHours`: domyślne automatyczne odwiązywanie po bezczynności w godzinach (`0` wyłącza; dostawcy mogą nadpisywać)
+ - `idleHours`: domyślny automatyczny unfocus 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ć)
@@ -1867,7 +1867,7 @@ Szczegóły pierwszeństwa znajdziesz w [Multi-Agent Sandbox & Tools](/pl/tools/
```json5
{
messages: {
- responsePrefix: "🦞", // lub "auto"
+ responsePrefix: "🦞", // or "auto"
ackReaction: "👀",
ackReactionScope: "group-mentions", // group-mentions | group-all | direct | all
removeAckAfterReply: false,
@@ -1882,7 +1882,7 @@ Szczegóły pierwszeństwa znajdziesz w [Multi-Agent Sandbox & Tools](/pl/tools/
},
},
inbound: {
- debounceMs: 2000, // 0 wyłącza
+ debounceMs: 2000, // 0 disables
byChannel: {
whatsapp: 5000,
slack: 1500,
@@ -1896,34 +1896,34 @@ Szczegóły pierwszeństwa znajdziesz w [Multi-Agent Sandbox & Tools](/pl/tools/
Nadpisania per kanał/konto: `channels..responsePrefix`, `channels..accounts..responsePrefix`.
-Rozstrzyganie (wygrywa najbardziej szczegółowe): konto → kanał → globalne. `""` wyłącza i zatrzymuje kaskadę. `"auto"` wyprowadza `[{identity.name}]`.
+Kolejność rozstrzygania (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` |
+| 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 myślenia | `high`, `low`, `off` |
-| `{identity.name}` | Nazwa tożsamości agenta | (tak samo jak `"auto"`) |
+| `{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}`.
### Reakcja ack
-- Domyślnie aktywna jest `identity.emoji` aktywnego agenta, w przeciwnym razie `"👀"`. Ustaw `""`, aby wyłączyć.
+- Domyślnie używa `identity.emoji` aktywnego agenta, w przeciwnym razie `"👀"`. Ustaw `""`, aby wyłączyć.
- Nadpisania per kanał: `channels..ackReaction`, `channels..accounts..ackReaction`.
-- Kolejność rozstrzygania: konto → kanał → `messages.ackReaction` → fallback identity.
+- Kolejność rozstrzygania: konto → kanał → `messages.ackReaction` → wartość zapasowa identity.
- 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 Slacku i Discordzie nieustawiona wartość zachowuje reakcje statusu włączone, gdy aktywne są reakcje ack.
- W Telegramie ustaw jawnie `true`, aby włączyć reakcje statusu cyklu życia.
+ W Slack i Discord brak ustawienia pozostawia reakcje statusu włączone, gdy aktywne są reakcje ack.
+ W Telegram ustaw jawnie `true`, aby włączyć reakcje statusu cyklu życia.
-### Debounce przychodzący
+### Debounce przychodzących wiadomości
-Łączy szybkie wiadomości tekstowe od tego samego nadawcy w jedną turę agenta. Media/załączniki powodują natychmiastowy flush. Polecenia sterujące omijają debounce.
+Grupuje 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 (text-to-speech)
@@ -1966,18 +1966,18 @@ Zmienne nie rozróżniają wielkości liter. `{think}` jest aliasem dla `{thinki
}
```
-- `auto` steruje domyślnym trybem auto-TTS: `off`, `always`, `inbound` lub `tagged`. `/tts on|off` może nadpisać lokalne preferencje, a `/tts status` pokazuje stan efektywny.
-- `summaryModel` nadpisuje `agents.defaults.model.primary` dla auto-summary.
-- `modelOverrides` jest domyślnie włączone; `modelOverrides.allowProvider` domyślnie ma wartość `false` (opt-in).
-- Klucze API mają fallback do `ELEVENLABS_API_KEY`/`XI_API_KEY` oraz `OPENAI_API_KEY`.
-- `openai.baseUrl` nadpisuje endpoint OpenAI TTS. Kolejność rozstrzygania to konfiguracja, potem `OPENAI_TTS_BASE_URL`, potem `https://api.openai.com/v1`.
+- `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.
+- `summaryModel` nadpisuje `agents.defaults.model.primary` dla automatycznego podsumowania.
+- `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 endpoint OpenAI TTS. Kolejność rozstrzygania to konfiguracja, potem `OPENAI_TTS_BASE_URL`, a następnie `https://api.openai.com/v1`.
- Gdy `openai.baseUrl` wskazuje na endpoint inny niż OpenAI, OpenClaw traktuje go jako serwer TTS zgodny z OpenAI i łagodzi walidację modelu/głosu.
---
## Talk
-Wartości domyślne dla trybu Talk (macOS/iOS/Android).
+Ustawienia domyślne dla trybu Talk (macOS/iOS/Android).
```json5
{
@@ -2001,13 +2001,13 @@ Wartości domyślne dla trybu Talk (macOS/iOS/Android).
}
```
-- `talk.provider` musi pasować do klucza 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ą tylko zgodnościowe i są automatycznie migrowane do `talk.providers.`.
-- Voice ID mają fallback do `ELEVENLABS_VOICE_ID` lub `SAG_VOICE_ID`.
-- `providers.*.apiKey` akceptuje zwykłe stringi lub obiekty SecretRef.
-- Fallback `ELEVENLABS_API_KEY` ma zastosowanie tylko wtedy, gdy nie skonfigurowano klucza API Talk.
+- `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żą tylko do zgodności i są automatycznie migrowane do `talk.providers.`.
+- Identyfikatory głosów używają wartości zapasowych `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.
- `providers.*.voiceAliases` pozwala dyrektywom Talk używać przyjaznych nazw.
-- `silenceTimeoutMs` określa, jak długo tryb Talk czeka po ciszy użytkownika, zanim wyśle transkrypt. Wartość nieustawiona zachowuje domyślne okno pauzy platformy (`700 ms na macOS i Android, 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 Android, 900 ms na iOS`).
---
@@ -2017,35 +2017,35 @@ Wartości domyślne dla trybu Talk (macOS/iOS/Android).
`tools.profile` ustawia bazową listę dozwolonych przed `tools.allow`/`tools.deny`:
-Lokalny onboarding domyślnie ustawia nowe lokalne konfiguracje na `tools.profile: "coding"`, gdy wartość nie jest ustawiona (istniejące jawne profile są zachowywane).
+Lokalny onboarding domyślnie ustawia w nowych lokalnych konfiguracjach `tools.profile: "coding"`, gdy nie jest ustawione (istniejące jawne profile są zachowywane).
-| Profil | Zawiera |
+| Profil | Obejmuje |
| ----------- | ------------------------------------------------------------------------------------------------------------------------------- |
| `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` | Bez ograniczeń (tak samo jak brak ustawienia) |
+| `full` | Bez ograniczeń (to samo co brak ustawienia) |
### Grupy narzędzi
-| Grupa | Narzędzia |
-| ------------------ | ------------------------------------------------------------------------------------------------------------------------ |
-| `group:runtime` | `exec`, `process`, `code_execution` (`bash` jest akceptowany jako alias dla `exec`) |
-| `group:fs` | `read`, `write`, `edit`, `apply_patch` |
+| Grupa | Narzędzia |
+| ------------------ | ---------------------------------------------------------------------------------------------------------------------- |
+| `group:runtime` | `exec`, `process`, `code_execution` (`bash` jest akceptowane jako alias dla `exec`) |
+| `group:fs` | `read`, `write`, `edit`, `apply_patch` |
| `group:sessions` | `sessions_list`, `sessions_history`, `sessions_send`, `sessions_spawn`, `sessions_yield`, `subagents`, `session_status` |
-| `group:memory` | `memory_search`, `memory_get` |
-| `group:web` | `web_search`, `x_search`, `web_fetch` |
-| `group:ui` | `browser`, `canvas` |
-| `group:automation` | `cron`, `gateway` |
-| `group:messaging` | `message` |
-| `group:nodes` | `nodes` |
-| `group:agents` | `agents_list` |
-| `group:media` | `image`, `image_generate`, `video_generate`, `tts` |
-| `group:openclaw` | Wszystkie wbudowane narzędzia (nie obejmuje pluginów dostawców) |
+| `group:memory` | `memory_search`, `memory_get` |
+| `group:web` | `web_search`, `x_search`, `web_fetch` |
+| `group:ui` | `browser`, `canvas` |
+| `group:automation` | `cron`, `gateway` |
+| `group:messaging` | `message` |
+| `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) |
### `tools.allow` / `tools.deny`
-Globalna zasada allow/deny dla narzędzi (deny wygrywa). Bez rozróżniania wielkości liter, obsługuje wildcardy `*`. Stosowane nawet wtedy, gdy sandbox Docker jest wyłączony.
+Globalna zasada allow/deny dla narzędzi (deny wygrywa). Bez rozróżniania wielkości liter, obsługuje wildcardy `*`. Stosowana nawet wtedy, gdy sandbox Docker jest wyłączony.
```json5
{
@@ -2055,7 +2055,7 @@ Globalna zasada allow/deny dla narzędzi (deny wygrywa). Bez rozróżniania wiel
### `tools.byProvider`
-Dalsze ograniczenia narzędzi dla określonych dostawców lub modeli. Kolejność: profil bazowy → profil dostawcy → allow/deny.
+Dalsze ograniczanie narzędzi dla określonych dostawców lub modeli. Kolejność: profil bazowy → profil dostawcy → allow/deny.
```json5
{
@@ -2071,7 +2071,7 @@ Dalsze ograniczenia narzędzi dla określonych dostawców lub modeli. Kolejnoś
### `tools.elevated`
-Steruje podwyższonym dostępem exec poza sandboxem:
+Steruje dostępem elevated exec poza sandboxem:
```json5
{
@@ -2087,9 +2087,9 @@ Steruje podwyższonym dostępem exec poza sandboxem:
}
```
-- Nadpisanie per agent (`agents.list[].tools.elevated`) może tylko dodatkowo ograniczać.
+- Nadpisanie per agent (`agents.list[].tools.elevated`) może jedynie dalej ograniczać.
- `/elevated on|off|ask|full` zapisuje stan per sesja; dyrektywy inline mają zastosowanie do pojedynczej wiadomości.
-- Podwyższony `exec` omija sandbox i używa skonfigurowanej ścieżki ucieczki (`gateway` domyślnie lub `node`, gdy celem exec jest `node`).
+- Elevated `exec` omija sandboxing i używa skonfigurowanej ścieżki ucieczki (`gateway` domyślnie lub `node`, gdy celem exec jest `node`).
### `tools.exec`
@@ -2136,13 +2136,13 @@ Ustawienia można definiować globalnie w `tools.loopDetection` i nadpisywać pe
```
- `historySize`: maksymalna historia wywołań narzędzi zachowywana do analizy pętli.
-- `warningThreshold`: próg powtarzających się wzorców bez postępu dla ostrzeżeń.
-- `criticalThreshold`: wyższy próg powtórzeń 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.
-- Jeśli `warningThreshold >= criticalThreshold` lub `criticalThreshold >= globalCircuitBreakerThreshold`, walidacja kończy się niepowodzeniem.
+- `warningThreshold`: próg powtarzającego się wzorca bez postępu dla ostrzeżeń.
+- `criticalThreshold`: wyższy próg powtarzania do blokowania krytycznych pętli.
+- `globalCircuitBreakerThreshold`: próg twardego zatrzymania dla każdego przebiegu bez postępu.
+- `detectors.genericRepeat`: ostrzegaj przy powtarzanych wywołaniach tego samego narzędzia z tymi samymi argumentami.
+- `detectors.knownPollNoProgress`: ostrzegaj/blokuj przy znanych narzędziach odpytywania (`process.poll`, `command_status` itp.).
+- `detectors.pingPong`: ostrzegaj/blokuj przy naprzemiennych wzorcach par bez postępu.
+- Jeśli `warningThreshold >= criticalThreshold` lub `criticalThreshold >= globalCircuitBreakerThreshold`, walidacja kończy się błędem.
### `tools.web`
@@ -2152,7 +2152,7 @@ Ustawienia można definiować globalnie w `tools.loopDetection` i nadpisywać pe
web: {
search: {
enabled: true,
- apiKey: "brave_api_key", // lub BRAVE_API_KEY env
+ apiKey: "brave_api_key", // lub env BRAVE_API_KEY
maxResults: 5,
timeoutSeconds: 30,
cacheTtlMinutes: 15,
@@ -2184,7 +2184,7 @@ Konfiguruje rozumienie mediów przychodzących (obraz/audio/wideo):
media: {
concurrency: 2,
asyncCompletion: {
- directSend: false, // opt-in: wyślij ukończone async music/video bezpośrednio do kanału
+ directSend: false, // opt-in: wyślij ukończone asynchroniczne music/video bezpośrednio do kanału
},
audio: {
enabled: true,
@@ -2212,28 +2212,28 @@ Konfiguruje rozumienie mediów przychodzących (obraz/audio/wideo):
**Wpis dostawcy** (`type: "provider"` lub pominięte):
-- `provider`: id 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`
**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 następnego wpisu.
+- W razie błędu następuje przejście do kolejnego wpisu.
Uwierzytelnianie dostawcy używa standardowej kolejności: `auth-profiles.json` → zmienne env → `models.providers.*.apiKey`.
**Pola async completion:**
-- `asyncCompletion.directSend`: gdy `true`, ukończone zadania async `music_generate`
- i `video_generate` najpierw próbują bezpośredniego dostarczenia kanałowego. Domyślnie: `false`
- (starsza ścieżka wybudzania sesji żądającego/dostarczenia modelowego).
+- `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 wybudzenia sesji żądającej/dostarczenia przez model).
@@ -2252,7 +2252,7 @@ Uwierzytelnianie dostawcy używa standardowej kolejności: `auth-profiles.json`
### `tools.sessions`
-Steruje tym, które sesje mogą być celem dla narzędzi sesji (`sessions_list`, `sessions_history`, `sessions_send`).
+Steruje tym, które sesje mogą być wskazywane przez narzędzia sesji (`sessions_list`, `sessions_history`, `sessions_send`).
Domyślnie: `tree` (bieżąca sesja + sesje utworzone przez nią, takie jak subagenci).
@@ -2271,9 +2271,9 @@ 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 uruchamiasz sesje per nadawca pod tym samym identyfikatorem agenta).
+- `agent`: każda sesja należąca do bieżącego identyfikatora agenta (może obejmować innych użytkowników, jeśli uruchamiasz sesje per nadawca pod tym samym identyfikatorem agenta).
- `all`: dowolna sesja. Kierowanie między agentami nadal wymaga `tools.agentToAgent`.
-- Ograniczenie sandbox: gdy bieżąca sesja jest sandboxowana i `agents.defaults.sandbox.sessionToolsVisibility="spawned"`, widoczność jest wymuszana do `tree`, nawet jeśli `tools.sessions.visibility="all"`.
+- Ograniczenie sandbox: gdy bieżąca sesja działa w sandboxie, a `agents.defaults.sandbox.sessionToolsVisibility="spawned"`, widoczność jest wymuszana do `tree`, nawet jeśli `tools.sessions.visibility="all"`.
### `tools.sessions_spawn`
@@ -2284,7 +2284,7 @@ Steruje obsługą załączników inline dla `sessions_spawn`.
tools: {
sessions_spawn: {
attachments: {
- enabled: false, // opt-in: ustaw true, aby zezwolić na inline file attachments
+ enabled: false, // opt-in: ustaw true, aby zezwolić na załączniki plików inline
maxTotalBytes: 5242880, // 5 MB łącznie dla wszystkich plików
maxFiles: 50,
maxFileBytes: 1048576, // 1 MB na plik
@@ -2298,15 +2298,15 @@ Steruje 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 do workspace potomnego w `.openclaw/attachments//` z `.manifest.json`.
-- Zawartość załączników jest automatycznie redagowana z trwałości transcript.
-- Wejścia base64 są walidowane przy użyciu ścisłych reguł alfabetu/padding oraz ochrony rozmiaru przed dekodowaniem.
+- Pliki są materializowane do workspace potomnego w `.openclaw/attachments//` z plikiem `.manifest.json`.
+- Zawartość załączników jest automatycznie redagowana w trwałym zapisie transkryptu.
+- Wejścia base64 są walidowane przy użyciu ścisłych kontroli alfabetu/dopełnienia oraz zabezpieczenia rozmiaru przed dekodowaniem.
- Uprawnienia plików to `0700` dla katalogów i `0600` dla plików.
-- Cleanup podąża za polityką `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 obowiązuje reguła auto-enable zależna od runtime.
+Eksperymentalne flagi wbudowanych narzędzi. Domyślnie wyłączone, chyba że ma zastosowanie reguła automatycznego włączenia specyficzna dla runtime.
```json5
{
@@ -2320,9 +2320,9 @@ Flagi eksperymentalnych wbudowanych narzędzi. Domyślnie wyłączone, chyba że
Uwagi:
-- `planTool`: włącza strukturalne narzędzie `update_plan` do śledzenia nietrywialnych prac wieloetapowych.
-- Domyślnie: `false` dla dostawców innych niż OpenAI. Uruchomienia OpenAI i OpenAI Codex automatycznie je włączają, gdy wartość nie jest ustawiona; ustaw `false`, aby wyłączyć to automatyczne włączenie.
-- Gdy jest włączone, system prompt dodaje także wskazówki użycia, aby model korzystał z niego tylko przy istotnej pracy i utrzymywał najwyżej jeden krok `in_progress`.
+- `planTool`: włącza strukturalne narzędzie `update_plan` do śledzenia nietrywialnych, wieloetapowych prac.
+- Domyślnie: `false` dla dostawców innych niż OpenAI. Uruchomienia OpenAI i OpenAI Codex automatycznie je włączają, gdy nie jest ustawione; ustaw `false`, aby wyłączyć to automatyczne włączenie.
+- Gdy jest włączone, system prompt dodaje także wskazówki użycia, aby model używał go tylko do istotnej pracy i utrzymywał co najwyżej jeden krok `in_progress`.
### `agents.defaults.subagents`
@@ -2343,20 +2343,20 @@ 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).
-- `runTimeoutSeconds`: domyślny timeout (sekundy) dla `sessions_spawn`, gdy wywołanie narzędzia pomija `runTimeoutSeconds`. `0` oznacza brak timeoutu.
+- `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 timeout (sekundy) dla `sessions_spawn`, gdy wywołanie narzędzia pomija `runTimeoutSeconds`. `0` oznacza brak limitu czasu.
- Zasada narzędzi per subagent: `tools.subagents.tools.allow` / `tools.subagents.tools.deny`.
---
-## Własni dostawcy i base URL
+## Niestandardowi dostawcy i base URL-e
-OpenClaw używa wbudowanego katalogu modeli. Dodaj własnych 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
{
models: {
- mode: "merge", // merge (domyślnie) | replace
+ mode: "merge", // merge (default) | replace
providers: {
"custom-proxy": {
baseUrl: "http://localhost:4000/v1",
@@ -2380,45 +2380,46 @@ OpenClaw używa wbudowanego katalogu modeli. Dodaj własnych dostawców przez `m
}
```
-- Użyj `authHeader: true` + `headers` dla własnych potrzeb uwierzytelniania.
+- Użyj `authHeader: true` + `headers` dla niestandardowych potrzeb uwierzytelniania.
- 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 wygrywają.
- - Niepuste wartości `apiKey` agenta wygrywają tylko wtedy, gdy dany dostawca nie jest zarządzany przez SecretRef w bieżącym kontekście config/auth-profile.
- - Wartości `apiKey` dostawców zarządzanych 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 zapisywania rozwiązanych sekretów.
- - Wartości nagłówków dostawców zarządzanych 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 między jawną konfiguracją a niejawnymi wartościami katalogu.
- - Pasujące `contextTokens` modelu zachowuje jawny limit runtime, gdy jest obecny; użyj go, aby ograniczyć efektywny kontekst bez zmiany natywnych metadanych modelu.
+ - Niepuste wartości `baseUrl` z agenta `models.json` mają pierwszeństwo.
+ - Niepuste wartości `apiKey` z 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ądzane przez SecretRef są odświeżane ze znaczników źródłowych (`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 ze znaczników źródłowych (`secretref-env:ENV_VAR_NAME` dla odwołań env, `secretref-managed` dla odwołań file/exec).
+ - Puste lub brakujące wartości `apiKey`/`baseUrl` z agenta wracają do `models.providers` w konfiguracji.
+ - Pasujące wartości `contextWindow`/`maxTokens` modelu używają wyższej wartości spośród jawnej konfiguracji i niejawnych wartości katalogu.
+ - Pasujące `contextTokens` modelu zachowuje jawny limit runtime, gdy jest obecny; użyj go, aby ograniczyć efektywny kontekst bez zmieniania natywnych metadanych modelu.
- Użyj `models.mode: "replace"`, gdy chcesz, aby konfiguracja całkowicie przepisała `models.json`.
- - Trwałość znaczników jest źródłowo-autorytatywna: znaczniki są zapisywane z aktywnej migawki konfiguracji źródłowej (przed rozwiązaniem), a nie z rozwiązanych wartości sekretów runtime.
+ - Trwałość znaczników jest źródłowo autorytatywna: znaczniki są zapisywane z aktywnego snapshotu 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 własnych dostawców indeksowana przez id dostawcy.
-- `models.providers.*.api`: adapter żądań (`openai-completions`, `openai-responses`, `anthropic-messages`, `google-generative-ai` itd.).
-- `models.providers.*.apiKey`: poświadczenie dostawcy (preferuj SecretRef/podstawienie env).
+- `models.providers`: mapa niestandardowych dostawców indeksowana według identyfikatora dostawcy.
+- `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 transport poświadczenia w nagłówku `Authorization`, gdy jest to wymagane.
-- `models.providers.*.baseUrl`: base URL API upstream.
-- `models.providers.*.headers`: dodatkowe statyczne nagłówki dla routingu proxy/tenant.
+- `models.providers.*.injectNumCtxForOpenAICompat`: dla Ollama + `openai-completions` wstrzykuje `options.num_ctx` do żądań (domyślnie: `true`).
+- `models.providers.*.authHeader`: wymusza transport poświadczeń w nagłówku `Authorization`, gdy jest wymagany.
+- `models.providers.*.baseUrl`: bazowy URL nadrzędnego API.
+- `models.providers.*.headers`: dodatkowe statyczne nagłówki do routingu proxy/tenant.
- `models.providers.*.request`: nadpisania transportu dla żądań HTTP model-provider.
- - `request.headers`: dodatkowe nagłówki (scalane z domyślnymi nagłówkami dostawcy). Wartości akceptują SecretRef.
- - `request.auth`: nadpisanie strategii uwierzytelniania. Tryby: `"provider-default"` (użyj wbudowanego auth dostawcy), `"authorization-bearer"` (z `token`), `"header"` (z `headerName`, `value`, opcjonalnie `prefix`).
- - `request.proxy`: nadpisanie proxy HTTP. Tryby: `"env-proxy"` (użyj zmiennych env `HTTP_PROXY`/`HTTPS_PROXY`), `"explicit-proxy"` (z `url`). Oba tryby akceptują opcjonalny pod-obiekt `tls`.
+ - `request.headers`: dodatkowe nagłówki (scalane z domyślnymi wartościami dostawcy). Wartości akceptują SecretRef.
+ - `request.auth`: nadpisanie strategii auth. Tryby: `"provider-default"` (użyj wbudowanego auth dostawcy), `"authorization-bearer"` (z `token`), `"header"` (z `headerName`, `value`, opcjonalnym `prefix`).
+ - `request.proxy`: nadpisanie proxy HTTP. Tryby: `"env-proxy"` (użyj zmiennych env `HTTP_PROXY`/`HTTPS_PROXY`), `"explicit-proxy"` (z `url`). Oba tryby akceptują opcjonalny podobiekt `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 do zakresów prywatnych, CGNAT lub podobnych, przez osłonę pobierania HTTP dostawcy (opt-in operatora dla zaufanych, self-hosted endpointów zgodnych z OpenAI). WebSocket używa tego samego `request` dla nagłówków/TLS, ale nie tej osłony SSRF dla fetch. Domyślnie `false`.
- `models.providers.*.models`: jawne wpisy katalogu modeli dostawcy.
-- `models.providers.*.models.*.contextWindow`: natywne metadane okna kontekstu modelu.
+- `models.providers.*.models.*.contextWindow`: metadane natywnego 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 inny niż `api.openai.com`) OpenClaw wymusza to na `false` w czasie działania. Puste/pominięte `baseUrl` zachowuje domyślne zachowanie OpenAI.
-- `models.providers.*.models.*.compat.requiresStringContent`: opcjonalna wskazówka zgodności dla endpointów czatu zgodnych z OpenAI, które obsługują tylko stringi. Gdy `true`, OpenClaw spłaszcza czysto tekstowe tablice `messages[].content` do zwykłych stringów przed wysłaniem żądania.
-- `plugins.entries.amazon-bedrock.config.discovery`: katalog główny ustawień auto-discovery Bedrock.
-- `plugins.entries.amazon-bedrock.config.discovery.enabled`: włącz/wyłącz niejawne wykrywanie.
-- `plugins.entries.amazon-bedrock.config.discovery.region`: region AWS dla wykrywania.
-- `plugins.entries.amazon-bedrock.config.discovery.providerFilter`: opcjonalny filtr provider-id dla ukierunkowanego wykrywania.
-- `plugins.entries.amazon-bedrock.config.discovery.refreshInterval`: interwał odpytywania dla odświeżania wykrywania.
+- `models.providers.*.models.*.compat.supportsDeveloperRole`: opcjonalna wskazówka zgodności. Dla `api: "openai-completions"` z niepustym, nienatywnym `baseUrl` (host nie jest `api.openai.com`) OpenClaw wymusza w runtime wartość `false`. Puste/pominięte `baseUrl` zachowuje domyślne zachowanie OpenAI.
+- `models.providers.*.models.*.compat.requiresStringContent`: opcjonalna wskazówka zgodności dla endpointów czatu zgodnych z OpenAI obsługujących tylko ciągi. 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ń auto-discovery Bedrock.
+- `plugins.entries.amazon-bedrock.config.discovery.enabled`: włącza/wyłącza niejawne discovery.
+- `plugins.entries.amazon-bedrock.config.discovery.region`: region AWS dla discovery.
+- `plugins.entries.amazon-bedrock.config.discovery.providerFilter`: opcjonalny filtr identyfikatora dostawcy do ukierunkowanego discovery.
+- `plugins.entries.amazon-bedrock.config.discovery.refreshInterval`: interwał odpytywania dla odświeżania discovery.
- `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.
@@ -2495,8 +2496,8 @@ Ustaw `OPENCODE_API_KEY` (lub `OPENCODE_ZEN_API_KEY`). Używaj odwołań `openco
Ustaw `ZAI_API_KEY`. `z.ai/*` i `z-ai/*` są akceptowanymi aliasami. Skrót: `openclaw onboard --auth-choice zai-api-key`.
- Ogólny endpoint: `https://api.z.ai/api/paas/v4`
-- Endpoint kodowania (domyślny): `https://api.z.ai/api/coding/paas/v4`
-- Dla ogólnego endpointu zdefiniuj własnego dostawcę z nadpisaniem base URL.
+- Endpoint do kodowania (domyślny): `https://api.z.ai/api/coding/paas/v4`
+- Dla ogólnego endpointu zdefiniuj niestandardowego dostawcę z nadpisaniem base URL.
@@ -2537,9 +2538,9 @@ Ustaw `ZAI_API_KEY`. `z.ai/*` i `z-ai/*` są akceptowanymi aliasami. Skrót: `op
Dla endpointu China: `baseUrl: "https://api.moonshot.cn/v1"` lub `openclaw onboard --auth-choice moonshot-api-key-cn`.
-Natywne endpointy Moonshot deklarują zgodność użycia strumieniowania na współdzielonym
-transporcie `openai-completions`, a OpenClaw opiera się tutaj na możliwościach endpointu,
-a nie tylko na samym wbudowanym identyfikatorze dostawcy.
+Natywne endpointy Moonshot deklarują zgodność użycia streamingu na współdzielonym
+transporcie `openai-completions`, a OpenClaw opiera się tu na możliwościach endpointu,
+a nie wyłącznie na wbudowanym identyfikatorze dostawcy.
@@ -2557,7 +2558,7 @@ a nie tylko na samym wbudowanym identyfikatorze dostawcy.
}
```
-Zgodny z Anthropic, wbudowany dostawca. Skrót: `openclaw onboard --auth-choice kimi-code-api-key`.
+Wbudowany dostawca zgodny z Anthropic. Skrót: `openclaw onboard --auth-choice kimi-code-api-key`.
@@ -2566,4 +2567,1144 @@ Zgodny z Anthropic, wbudowany dostawca. Skrót: `openclaw onboard --auth-choice
```json5
{
env: { SYNTHETIC_API_KEY: "sk-..." },
- agents
\ No newline at end of file
+ agents: {
+ defaults: {
+ model: { primary: "synthetic/hf:MiniMaxAI/MiniMax-M2.5" },
+ models: { "synthetic/hf:MiniMaxAI/MiniMax-M2.5": { alias: "MiniMax M2.5" } },
+ },
+ },
+ models: {
+ mode: "merge",
+ providers: {
+ synthetic: {
+ baseUrl: "https://api.synthetic.new/anthropic",
+ apiKey: "${SYNTHETIC_API_KEY}",
+ api: "anthropic-messages",
+ models: [
+ {
+ id: "hf:MiniMaxAI/MiniMax-M2.5",
+ name: "MiniMax M2.5",
+ reasoning: true,
+ input: ["text"],
+ cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 },
+ contextWindow: 192000,
+ maxTokens: 65536,
+ },
+ ],
+ },
+ },
+ },
+}
+```
+
+Base URL powinien pomijać `/v1` (klient Anthropic dopisuje je sam). Skrót: `openclaw onboard --auth-choice synthetic-api-key`.
+
+
+
+
+
+```json5
+{
+ agents: {
+ defaults: {
+ model: { primary: "minimax/MiniMax-M2.7" },
+ models: {
+ "minimax/MiniMax-M2.7": { alias: "Minimax" },
+ },
+ },
+ },
+ models: {
+ mode: "merge",
+ providers: {
+ minimax: {
+ baseUrl: "https://api.minimax.io/anthropic",
+ apiKey: "${MINIMAX_API_KEY}",
+ api: "anthropic-messages",
+ models: [
+ {
+ id: "MiniMax-M2.7",
+ name: "MiniMax M2.7",
+ reasoning: true,
+ input: ["text", "image"],
+ cost: { input: 0.3, output: 1.2, cacheRead: 0.06, cacheWrite: 0.375 },
+ contextWindow: 204800,
+ maxTokens: 131072,
+ },
+ ],
+ },
+ },
+ },
+}
+```
+
+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 obejmuje tylko M2.7.
+Na ścieżce streamingu 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
+`MiniMax-M2.7-highspeed`.
+
+
+
+
+
+Zobacz [Modele lokalne](/pl/gateway/local-models). W skrócie: uruchom duży model lokalny przez LM Studio Responses API na wydajnym sprzęcie; zachowaj scalone modele hostowane jako fallback.
+
+
+
+---
+
+## Skills
+
+```json5
+{
+ skills: {
+ allowBundled: ["gemini", "peekaboo"],
+ load: {
+ extraDirs: ["~/Projects/agent-scripts/skills"],
+ },
+ install: {
+ preferBrew: true,
+ nodeManager: "npm", // npm | pnpm | yarn | bun
+ },
+ entries: {
+ "image-lab": {
+ apiKey: { source: "env", provider: "default", id: "GEMINI_API_KEY" }, // lub jawny ciąg
+ env: { GEMINI_API_KEY: "GEMINI_KEY_HERE" },
+ },
+ peekaboo: { enabled: true },
+ sag: { enabled: false },
+ },
+ },
+}
+```
+
+- `allowBundled`: opcjonalna lista dozwolonych tylko dla bundled Skills (managed/workspace Skills pozostają bez zmian).
+- `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 wróci do innych typów instalatorów.
+- `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`: wygodny skrót dla Skills deklarujących podstawową zmienną env (jawny ciąg lub obiekt SecretRef).
+
+---
+
+## Plugins
+
+```json5
+{
+ plugins: {
+ enabled: true,
+ allow: ["voice-call"],
+ deny: [],
+ load: {
+ paths: ["~/Projects/oss/voice-call-extension"],
+ },
+ entries: {
+ "voice-call": {
+ enabled: true,
+ hooks: {
+ allowPromptInjection: false,
+ },
+ config: { provider: "twilio" },
+ },
+ },
+ },
+}
+```
+
+- Wczytywane z `~/.openclaw/extensions`, `/.openclaw/extensions` oraz `plugins.load.paths`.
+- Discovery akceptuje natywne pluginy OpenClaw oraz zgodne bundle Codex i Claude, w tym bundle Claude w domyślnym układzie bez manifestu.
+- **Zmiany konfiguracji wymagają restartu bramy.**
+- `allow`: opcjonalna lista dozwolonych (wczytywane są tylko wymienione pluginy). `deny` ma pierwszeństwo.
+- `plugins.entries..apiKey`: wygodne pole klucza API na poziomie pluginu (gdy plugin je obsługuje).
+- `plugins.entries..env`: mapa zmiennych env 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 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 w zakresie żądania nadpisań `provider` i `model` per uruchomienie dla przebiegów tła subagenta.
+- `plugins.entries..subagent.allowedModels`: opcjonalna lista dozwolonych kanonicznych celów `provider/model` dla zaufanych nadpisań subagenta. Użyj `"*"`, tylko jeśli świadomie chcesz dopuścić 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 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 env `FIRECRAWL_API_KEY`.
+ - `baseUrl`: bazowy URL API Firecrawl (domyślnie: `https://api.firecrawl.dev`).
+ - `onlyMainContent`: wyodrębniaj tylko główną treść stron (domyślnie: `true`).
+ - `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 (eksperymentalne). Fazy i progi opisano 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 * * *"`).
+ - polityka faz i progi są szczegółami implementacyjnymi (nie są kluczami konfiguracji dla użytkownika).
+- Pełna konfiguracja pamięci znajduje się w [Odwołanie 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 pluginy bundle Claude mogą również wnosić osadzone domyślne ustawienia Pi z `settings.json`; OpenClaw stosuje je jako oczyszczone ustawienia agenta, a nie jako surowe patche konfiguracji OpenClaw.
+- `plugins.slots.memory`: wybiera identyfikator aktywnego pluginu pamięci albo `"none"`, aby wyłączyć pluginy 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`.
+ - 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).
+
+---
+
+## Browser
+
+```json5
+{
+ browser: {
+ enabled: true,
+ evaluateEnabled: true,
+ defaultProfile: "user",
+ ssrfPolicy: {
+ dangerouslyAllowPrivateNetwork: true, // default trusted-network mode
+ // allowPrivateNetwork: true, // legacy alias
+ // hostnameAllowlist: ["*.example.com", "example.com"],
+ // allowedHostnames: ["localhost"],
+ },
+ profiles: {
+ openclaw: { cdpPort: 18800, color: "#FF4500" },
+ work: { cdpPort: 18801, color: "#0066CC" },
+ user: { driver: "existing-session", attachOnly: true, color: "#00AA00" },
+ brave: {
+ driver: "existing-session",
+ attachOnly: true,
+ userDataDir: "~/Library/Application Support/BraveSoftware/Brave-Browser",
+ color: "#FB542B",
+ },
+ remote: { cdpUrl: "http://10.0.0.42:9222", color: "#00AA00" },
+ },
+ color: "#FF4500",
+ // headless: false,
+ // noSandbox: false,
+ // extraArgs: [],
+ // executablePath: "/Applications/Brave Browser.app/Contents/MacOS/Brave Browser",
+ // attachOnly: false,
+ },
+}
+```
+
+- `evaluateEnabled: false` wyłącza `act:evaluate` i `wait --fn`.
+- `ssrfPolicy.dangerouslyAllowPrivateNetwork` ma domyślnie wartość `true`, gdy nie jest ustawione (model zaufanej sieci).
+- Ustaw `ssrfPolicy.dangerouslyAllowPrivateNetwork: false` dla ścisłej nawigacji browser tylko po publicznej sieci.
+- W trybie ścisłym zdalne endpointy profili CDP (`profiles.*.cdpUrl`) podlegają temu samemu blokowaniu sieci prywatnej podczas sprawdzania dostępności/discovery.
+- `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 są wyłączone).
+- `profiles.*.cdpUrl` akceptuje `http://`, `https://`, `ws://` i `wss://`.
+ Użyj HTTP(S), gdy chcesz, aby OpenClaw wykrywał `/json/version`; użyj WS(S),
+ gdy dostawca daje bezpośredni URL DevTools WebSocket.
+- Profile `existing-session` są tylko dla hosta i używają Chrome MCP zamiast CDP.
+- Profile `existing-session` mogą ustawić `userDataDir`, aby kierować do konkretnego
+ profilu przeglądarki opartej na Chromium, takiej jak Brave lub Edge.
+- Profile `existing-session` zachowują obecne ograniczenia ścieżki Chrome MCP:
+ akcje oparte na snapshot/ref zamiast targetowania selektorami CSS, hooki
+ przesyłania jednego pliku, brak nadpisań timeoutów dialogów, brak `wait --load networkidle` oraz brak
+ `responsebody`, eksportu PDF, przechwytywania pobrań i akcji wsadowych.
+- Lokalnie zarządzane profile `openclaw` automatycznie przypisują `cdpPort` i `cdpUrl`; jawnie
+ ustawiaj `cdpUrl` tylko dla zdalnego CDP.
+- Kolejność auto-detect: domyślna przeglądarka, jeśli oparta na Chromium → Chrome → Brave → Edge → Chromium → Chrome Canary.
+- Usługa sterowania: 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 debug).
+
+---
+
+## UI
+
+```json5
+{
+ ui: {
+ seamColor: "#FF4500",
+ assistant: {
+ name: "OpenClaw",
+ avatar: "CB", // emoji, short text, image URL, or data URI
+ },
+ },
+}
+```
+
+- `seamColor`: kolor akcentu dla chromu natywnego UI aplikacji (barwa dymku Talk Mode itp.).
+- `assistant`: nadpisanie tożsamości Control UI. Wartość zapasowa pochodzi z aktywnej tożsamości agenta.
+
+---
+
+## Gateway
+
+```json5
+{
+ gateway: {
+ mode: "local", // local | remote
+ port: 18789,
+ bind: "loopback",
+ auth: {
+ mode: "token", // none | token | password | trusted-proxy
+ token: "your-token",
+ // password: "your-password", // or OPENCLAW_GATEWAY_PASSWORD
+ // trustedProxy: { userHeader: "x-forwarded-user" }, // for mode=trusted-proxy; see /gateway/trusted-proxy-auth
+ allowTailscale: true,
+ rateLimit: {
+ maxAttempts: 10,
+ windowMs: 60000,
+ lockoutMs: 300000,
+ exemptLoopback: true,
+ },
+ },
+ tailscale: {
+ mode: "off", // off | serve | funnel
+ resetOnExit: false,
+ },
+ controlUi: {
+ enabled: true,
+ basePath: "/openclaw",
+ // root: "dist/control-ui",
+ // allowedOrigins: ["https://control.example.com"], // required for non-loopback Control UI
+ // dangerouslyAllowHostHeaderOriginFallback: false, // dangerous Host-header origin fallback mode
+ // allowInsecureAuth: false,
+ // dangerouslyDisableDeviceAuth: false,
+ },
+ remote: {
+ url: "ws://gateway.tailnet:18789",
+ transport: "ssh", // ssh | direct
+ token: "your-token",
+ // password: "your-password",
+ },
+ trustedProxies: ["10.0.0.1"],
+ // Optional. Default false.
+ allowRealIpFallback: false,
+ tools: {
+ // Additional /tools/invoke HTTP denies
+ deny: ["browser"],
+ // Remove tools from the default HTTP deny list
+ allow: ["gateway"],
+ },
+ push: {
+ apns: {
+ relay: {
+ baseUrl: "https://relay.example.com",
+ timeoutMs: 10000,
+ },
+ },
+ },
+ },
+}
+```
+
+
+
+- `mode`: `local` (uruchom bramę) lub `remote` (połącz się ze zdalną bramą). 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 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 Docker**: domyślne powiązanie `loopback` nasłuchuje na `127.0.0.1` wewnątrz kontenera. Przy sieci bridge Docker (`-p 18789:18789`) ruch trafia na `eth0`, więc brama jest nieosiągalna. 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ą uwierzytelniania bramy. W praktyce oznacza to współdzielony token/hasło lub świadomy tożsamości reverse proxy z `gateway.auth.mode: "trusted-proxy"`. Kreator onboardingu domyślnie generuje token.
+- Jeśli zarówno `gateway.auth.token`, jak i `gateway.auth.password` są skonfigurowane (w tym SecretRefs), 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 auth. Używaj tylko dla zaufanych lokalnych konfiguracji loopback; ta opcja celowo nie jest oferowana w promptach onboardingu.
+- `gateway.auth.mode: "trusted-proxy"`: deleguje auth do świadomego tożsamości reverse proxy 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ć wymagania auth dla Control UI/WebSocket (weryfikowane przez `tailscale whois`). Endpointy HTTP API **nie** używają tego auth nagłówków Tailscale; stosują zwykły tryb HTTP auth bramy. Ten przepływ bez tokenu zakłada, że host bramy jest zaufany. Domyślnie `true`, gdy `tailscale.mode = "serve"`.
+- `gateway.auth.rateLimit`: opcjonalny limiter 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 niepowodzenia. 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` ma domyślnie wartość `true`; ustaw `false`, gdy świadomie chcesz ograniczać ruchem rate-limit także localhost (dla konfiguracji testowych lub rygorystycznych wdrożeń proxy).
+- Próby auth WS pochodzące z browser są zawsze dławione z wyłączonym wyjątkiem loopback (defense-in-depth przeciw brute force localhost z browsera).
+- W loopback te blokady pochodzące z localhost browser są izolowane per znormalizowana
+ wartość `Origin`, więc powtarzające się niepowodzenia 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 browser-origin dla połączeń Gateway WebSocket. Wymagana, gdy oczekiwani są klienci browser z originów innych niż loopback.
+- `controlUi.dangerouslyAllowHostHeaderOriginFallback`: niebezpieczny tryb włączający fallback origin oparty na nagłówku Host dla wdrożeń, które świadomie opierają się na takiej polityce origin.
+- `remote.transport`: `ssh` (domyślnie) lub `direct` (ws/wss). Dla `direct` `remote.url` musi być `ws://` lub `wss://`.
+- `OPENCLAW_ALLOW_INSECURE_PRIVATE_WS=1`: klienckie nadpisanie break-glass pozwalające na jawny tekst `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 bramy.
+- `gateway.push.apns.relay.baseUrl`: bazowy URL HTTPS zewnętrznego relay APNs używanego przez oficjalne/TestFlight buildy iOS po opublikowaniu przez nie rejestracji opartych na relay do bramy. Ten URL musi odpowiadać URL relay skompilowanemu w buildzie iOS.
+- `gateway.push.apns.relay.timeoutMs`: limit czasu wysyłki gateway-to-relay w milisekundach. Domyślnie `10000`.
+- Rejestracje oparte na relay są delegowane do określonej tożsamości bramy. Sparowana aplikacja iOS pobiera `gateway.identity.get`, uwzględnia tę tożsamość w rejestracji relay i przekazuje do bramy grant wysyłki o zakresie rejestracji. Inna brama 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 relay.
+- `OPENCLAW_APNS_RELAY_ALLOW_HTTP=true`: tylko deweloperska furtka dla URL-i relay HTTP na loopback. Produkcyjne URL-e relay 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 gniazda w minutach. Utrzymuj tę 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`.
+- `channels..healthMonitor.enabled`: per-kanałowe opt-out z restartów monitora zdrowia przy zachowaniu włączonego monitora globalnego.
+- `channels..accounts..healthMonitor.enabled`: nadpisanie per konto dla kanałów wielokontowych. Gdy jest ustawione, ma pierwszeństwo przed nadpisaniem na poziomie kanału.
+- Lokalne ścieżki wywołań bramy 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ę fail-closed (bez maskującego zdalnego fallbacku).
+- `trustedProxies`: adresy IP reverse proxy, które kończą TLS lub wstrzykują nagłówki klienta przekazywanego dalej. Wymieniaj tylko proxy, które kontrolujesz. Wpisy loopback są nadal prawidłowe dla konfiguracji proxy na tym samym hoście/lokalnego wykrywania (na przykład Tailscale Serve lub lokalny reverse proxy), ale **nie** kwalifikują żądań loopback do `gateway.auth.mode: "trusted-proxy"`.
+- `allowRealIpFallback`: gdy `true`, brama 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ę deny).
+- `gateway.tools.allow`: usuwa nazwy narzędzi z domyślnej listy deny HTTP.
+
+
+
+### Endpointy zgodne z OpenAI
+
+- Chat Completions: domyślnie wyłączone. Włącz przez `gateway.http.endpoints.chatCompletions.enabled: true`.
+- Responses API: `gateway.http.endpoints.responses.enabled`.
+- 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 jak nieustawione; 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 utwardzający odpowiedzi:
+ - `gateway.http.securityHeaders.strictTransportSecurity` (ustawiaj tylko dla kontrolowanych przez siebie originów HTTPS; zobacz [Trusted Proxy Auth](/pl/gateway/trusted-proxy-auth#tls-termination-and-hsts))
+
+### Izolacja wielu instancji
+
+Uruchamiaj wiele bram na jednym hoście z unikalnymi portami i katalogami stanu:
+
+```bash
+OPENCLAW_CONFIG_PATH=~/.openclaw/a.json \
+OPENCLAW_STATE_DIR=~/.openclaw-a \
+openclaw gateway --port 19001
+```
+
+Wygodne flagi: `--dev` (używa `~/.openclaw-dev` + portu `19001`), `--profile ` (używa `~/.openclaw-`).
+
+Zobacz [Wiele bram](/pl/gateway/multiple-gateways).
+
+### `gateway.tls`
+
+```json5
+{
+ gateway: {
+ tls: {
+ enabled: false,
+ autoGenerate: false,
+ certPath: "/etc/openclaw/tls/server.crt",
+ keyPath: "/etc/openclaw/tls/server.key",
+ caPath: "/etc/openclaw/tls/ca-bundle.crt",
+ },
+ },
+}
+```
+
+- `enabled`: włącza terminację TLS na nasłuchu bramy (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.
+- `certPath`: ścieżka systemu plików do pliku certyfikatu TLS.
+- `keyPath`: ścieżka systemu plików do pliku klucza prywatnego TLS; utrzymuj ograniczone uprawnienia.
+- `caPath`: opcjonalna ścieżka do bundla CA dla weryfikacji klienta lub niestandardowych łańcuchów zaufania.
+
+### `gateway.reload`
+
+```json5
+{
+ gateway: {
+ reload: {
+ mode: "hybrid", // off | restart | hot | hybrid
+ debounceMs: 500,
+ deferralTimeoutMs: 300000,
+ },
+ },
+}
+```
+
+- `mode`: kontroluje sposób stosowania edycji konfiguracji w runtime.
+ - `"off"`: ignoruj zmiany na żywo; zmiany wymagają jawnego restartu.
+ - `"restart"`: zawsze restartuj proces bramy po zmianie konfiguracji.
+ - `"hot"`: stosuj zmiany w procesie bez restartu.
+ - `"hybrid"` (domyślnie): najpierw spróbuj hot reload; jeśli to wymagane, wróć do restartu.
+- `debounceMs`: okno debounce w ms przed zastosowaniem zmian konfiguracji (nieujemna liczba całkowita).
+- `deferralTimeoutMs`: maksymalny czas oczekiwania w ms na zakończenie operacji w toku przed wymuszeniem restartu (domyślnie: `300000` = 5 minut).
+
+---
+
+## Hooki
+
+```json5
+{
+ hooks: {
+ enabled: true,
+ token: "shared-secret",
+ path: "/hooks",
+ maxBodyBytes: 262144,
+ defaultSessionKey: "hook:ingress",
+ allowRequestSessionKey: false,
+ allowedSessionKeyPrefixes: ["hook:"],
+ allowedAgentIds: ["hooks", "main"],
+ presets: ["gmail"],
+ transformsDir: "~/.openclaw/hooks/transforms",
+ mappings: [
+ {
+ match: { path: "gmail" },
+ action: "agent",
+ agentId: "hooks",
+ wakeMode: "now",
+ name: "Gmail",
+ sessionKey: "hook:gmail:{{messages[0].id}}",
+ messageTemplate: "From: {{messages[0].from}}\nSubject: {{messages[0].subject}}\n{{messages[0].snippet}}",
+ deliver: true,
+ channel: "last",
+ model: "openai/gpt-5.4-mini",
+ },
+ ],
+ },
+}
+```
+
+Auth: `Authorization: Bearer ` lub `x-openclaw-token: `.
+Tokeny hooków w query string są odrzucane.
+
+Uwagi dotyczące walidacji i bezpieczeństwa:
+
+- `hooks.enabled=true` wymaga niepustego `hooks.token`.
+- `hooks.token` musi być **inne** niż `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`.
+- Jeśli `hooks.allowRequestSessionKey=true`, ogranicz `hooks.allowedSessionKeyPrefixes` (na przykład `["hook:"]`).
+
+**Endpointy:**
+
+- `POST /hooks/wake` → `{ text, mode?: "now"|"next-heartbeat" }`
+- `POST /hooks/agent` → `{ message, name?, agentId?, sessionKey?, wakeMode?, deliver?, channel?, to?, model?, thinking?, timeoutSeconds? }`
+ - `sessionKey` z payloadu żądania jest akceptowany tylko wtedy, gdy `hooks.allowRequestSessionKey=true` (domyślnie: `false`).
+- `POST /hooks/` → rozwiązywane przez `hooks.mappings`
+
+
+
+- `match.path` dopasowuje podścieżkę po `/hooks` (np. `/hooks/gmail` → `gmail`).
+- `match.source` dopasowuje pole payloadu dla ścieżek ogólnych.
+- Szablony takie jak `{{messages[0].subject}}` odczytują dane z payloadu.
+- `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 określonego agenta; nieznane identyfikatory wracają do domyślnego.
+- `allowedAgentIds`: ogranicza jawny routing (`*` lub pominięte = zezwól na wszystkie, `[]` = odrzuć wszystkie).
+- `defaultSessionKey`: opcjonalny stały klucz sesji dla przebiegów hook agent bez jawnego `sessionKey`.
+- `allowRequestSessionKey`: zezwala wywołującym `/hooks/agent` na ustawienie `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).
+
+
+
+### Integracja Gmail
+
+```json5
+{
+ hooks: {
+ gmail: {
+ account: "openclaw@gmail.com",
+ topic: "projects//topics/gog-gmail-watch",
+ subscription: "gog-gmail-watch-push",
+ pushToken: "shared-push-token",
+ hookUrl: "http://127.0.0.1:18789/hooks/gmail",
+ includeBody: true,
+ maxBytes: 20000,
+ renewEveryMinutes: 720,
+ serve: { bind: "127.0.0.1", port: 8788, path: "/" },
+ tailscale: { mode: "funnel", path: "/gmail-pubsub" },
+ model: "openrouter/meta-llama/llama-3.3-70b-instruct:free",
+ thinking: "off",
+ },
+ },
+}
+```
+
+- Gateway automatycznie uruchamia `gog gmail watch serve` przy starcie, gdy jest skonfigurowany. Ustaw `OPENCLAW_SKIP_GMAIL_WATCHER=1`, aby to wyłączyć.
+- Nie uruchamiaj osobnego `gog gmail watch serve` równolegle z Gateway.
+
+---
+
+## Canvas host
+
+```json5
+{
+ canvasHost: {
+ root: "~/.openclaw/workspace/canvas",
+ liveReload: true,
+ // enabled: false, // or OPENCLAW_SKIP_CANVAS_HOST=1
+ },
+}
+```
+
+- Udostępnia przez HTTP pod portem Gateway HTML/CSS/JS i A2UI edytowalne przez agenta:
+ - `http://:/__openclaw__/canvas/`
+ - `http://:/__openclaw__/a2ui/`
+- Tylko lokalnie: zachowaj `gateway.bind: "loopback"` (domyślnie).
+- Powiązania inne niż loopback: trasy canvas wymagają auth Gateway (token/hasło/trusted-proxy), tak samo jak inne powierzchnie HTTP Gateway.
+- Node WebViews zazwyczaj nie wysyłają nagłówków auth; po sparowaniu i połączeniu noda Gateway ogłasza URL-e capability o zakresie noda do dostępu do canvas/A2UI.
+- URL-e capability są powiązane z aktywną sesją WS noda i szybko wygasają. Nie jest używany fallback oparty na IP.
+- Wstrzykuje klienta live-reload do serwowanego HTML.
+- Automatycznie tworzy startowy `index.html`, gdy katalog jest pusty.
+- Udostępnia także A2UI pod `/__openclaw__/a2ui/`.
+- Zmiany wymagają restartu bramy.
+- Wyłącz live reload dla dużych katalogów lub przy błędach `EMFILE`.
+
+---
+
+## Discovery
+
+### mDNS (Bonjour)
+
+```json5
+{
+ discovery: {
+ mdns: {
+ mode: "minimal", // minimal | full | off
+ },
+ },
+}
+```
+
+- `minimal` (domyślnie): pomija `cliPath` + `sshPort` z rekordów TXT.
+- `full`: uwzględnia `cliPath` + `sshPort`.
+- Nazwa hosta domyślnie to `openclaw`. Nadpisz przez `OPENCLAW_MDNS_HOSTNAME`.
+
+### Wide-area (DNS-SD)
+
+```json5
+{
+ discovery: {
+ wideArea: { enabled: true },
+ },
+}
+```
+
+Zapisuje strefę unicast DNS-SD w `~/.openclaw/dns/`. Dla discovery między sieciami połącz to z serwerem DNS (zalecany CoreDNS) + Tailscale split DNS.
+
+Konfiguracja: `openclaw dns setup --apply`.
+
+---
+
+## Środowisko
+
+### `env` (inline env vars)
+
+```json5
+{
+ env: {
+ OPENROUTER_API_KEY: "sk-or-...",
+ vars: {
+ GROQ_API_KEY: "gsk-...",
+ },
+ shellEnv: {
+ enabled: true,
+ timeoutMs: 15000,
+ },
+ },
+}
+```
+
+- Inline env vars są stosowane tylko wtedy, gdy env procesu nie zawiera danego klucza.
+- Pliki `.env`: `.env` z CWD + `~/.openclaw/.env` (żaden nie nadpisuje istniejących zmiennych).
+- `shellEnv`: importuje brakujące oczekiwane klucze z profilu logowania powłoki.
+- Pełny priorytet znajdziesz w [Środowisko](/pl/help/environment).
+
+### Podstawianie zmiennych env
+
+Odwołuj się do zmiennych env w dowolnym ciągu konfiguracji za pomocą `${VAR_NAME}`:
+
+```json5
+{
+ gateway: {
+ auth: { token: "${OPENCLAW_GATEWAY_TOKEN}" },
+ },
+}
+```
+
+- Dopasowywane są tylko nazwy wielkimi literami: `[A-Z_][A-Z0-9_]*`.
+- Brakujące/puste zmienne powodują błąd przy wczytywaniu konfiguracji.
+- Użyj `$${VAR}` dla dosłownego `${VAR}`.
+- Działa z `$include`.
+
+---
+
+## Sekrety
+
+Odwołania do sekretów są addytywne: wartości jawne nadal działają.
+
+### `SecretRef`
+
+Użyj jednego kształtu obiektu:
+
+```json5
+{ source: "env" | "file" | "exec", provider: "default", id: "..." }
+```
+
+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"`)
+- wzorzec `id` dla `source: "exec"`: `^[A-Za-z0-9][A-Za-z0-9._:/-]{0,255}$`
+- identyfikatory `source: "exec"` nie mogą zawierać segmentów ścieżki `.` ani `..` oddzielonych ukośnikami (na przykład `a/../b` jest odrzucane)
+
+### Obsługiwana powierzchnia poświadczeń
+
+- Kanoniczna macierz: [Powierzchnia poświadczeń SecretRef](/pl/reference/secretref-credential-surface)
+- `secrets apply` kieruje do obsługiwanych ścieżek poświadczeń w `openclaw.json`.
+- Odwołania w `auth-profiles.json` są uwzględniane w runtime resolution i w zakresie audytu.
+
+### Konfiguracja dostawców sekretów
+
+```json5
+{
+ secrets: {
+ providers: {
+ default: { source: "env" }, // opcjonalny jawny dostawca env
+ filemain: {
+ source: "file",
+ path: "~/.openclaw/secrets.json",
+ mode: "json",
+ timeoutMs: 5000,
+ },
+ vault: {
+ source: "exec",
+ command: "/usr/local/bin/openclaw-vault-resolver",
+ passEnv: ["PATH", "VAULT_ADDR"],
+ },
+ },
+ defaults: {
+ env: "default",
+ file: "filemain",
+ exec: "vault",
+ },
+ },
+}
+```
+
+Uwagi:
+
+- Dostawca `file` obsługuje `mode: "json"` oraz `mode: "singleValue"` (`id` musi mieć wartość `"value"` w trybie singleValue).
+- Dostawca `exec` wymaga bezwzględnej ścieżki `command` i używa payloadów protokołu na stdin/stdout.
+- Domyślnie ścieżki poleceń będące symlinkami są odrzucane. Ustaw `allowSymlinkCommand: true`, aby zezwolić na ścieżki symlink przy jednoczesnej walidacji ścieżki celu po rozwiązaniu.
+- Jeśli skonfigurowano `trustedDirs`, sprawdzenie zaufanych katalogów dotyczy ścieżki celu po rozwiązaniu.
+- Ś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 snapshotu w pamięci, a następnie ścieżki żądań odczytują już tylko ten snapshot.
+- Filtrowanie aktywnej powierzchni ma zastosowanie podczas aktywacji: nierozwiązane odwołania na aktywnych powierzchniach powodują błąd startu/reload, a nieaktywne powierzchnie są pomijane z diagnostyką.
+
+---
+
+## Magazyn auth
+
+```json5
+{
+ auth: {
+ profiles: {
+ "anthropic:default": { provider: "anthropic", mode: "api_key" },
+ "anthropic:work": { provider: "anthropic", mode: "api_key" },
+ "openai-codex:personal": { provider: "openai-codex", mode: "oauth" },
+ },
+ order: {
+ anthropic: ["anthropic:default", "anthropic:work"],
+ "openai-codex": ["openai-codex:personal"],
+ },
+ },
+}
+```
+
+- 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 w trybie OAuth (`auth.profiles..mode = "oauth"`) nie obsługują poświadczeń auth-profile opartych na SecretRef.
+- Statyczne poświadczenia runtime pochodzą z rozwiązanych snapshotów w pamięci; starsze statyczne wpisy `auth.json` są usuwane po wykryciu.
+- Starsze importy OAuth pochodzą z `~/.openclaw/credentials/oauth.json`.
+- Zobacz [OAuth](/pl/concepts/oauth).
+- Zachowanie runtime sekretów oraz narzędzia `audit/configure/apply`: [Zarządzanie sekretami](/pl/gateway/secrets).
+
+### `auth.cooldowns`
+
+```json5
+{
+ auth: {
+ cooldowns: {
+ billingBackoffHours: 5,
+ billingBackoffHoursByProvider: { anthropic: 3, openai: 8 },
+ billingMaxHours: 24,
+ authPermanentBackoffMinutes: 10,
+ authPermanentMaxMinutes: 60,
+ failureWindowHours: 24,
+ overloadedProfileRotations: 1,
+ overloadedBackoffMs: 0,
+ rateLimitedProfileRotations: 1,
+ },
+ },
+}
+```
+
+- `billingBackoffHours`: bazowy backoff w godzinach, gdy profil kończy się niepowodzeniem z powodu rzeczywistych błędów billing/braku środków
+ (domyślnie: `5`). Jawny tekst billing nadal może
+ trafić tutaj nawet przy odpowiedziach `401`/`403`, ale dopasowywacze tekstu
+ specyficzne dla dostawcy pozostają ograniczone do dostawcy, który je posiada (na przykład OpenRouter
+ `Key limit exceeded`). Komunikaty retryable HTTP `402` dotyczące okna użycia lub
+ limitu wydatków organizacji/workspace pozostają zamiast tego w ścieżce `rate_limit`.
+- `billingBackoffHoursByProvider`: opcjonalne nadpisania per dostawca dla godzin backoff billing.
+- `billingMaxHours`: limit w godzinach dla wykładniczego wzrostu backoff billing (domyślnie: `24`).
+- `authPermanentBackoffMinutes`: bazowy backoff w minutach dla błędów `auth_permanent` o wysokiej pewności (domyślnie: `10`).
+- `authPermanentMaxMinutes`: limit w minutach dla wzrostu backoff `auth_permanent` (domyślnie: `60`).
+- `failureWindowHours`: ruchome 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 na fallback modelu (domyślnie: `1`). Typy błędów 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 dla błędów rate limit przed przejściem na fallback modelu (domyślnie: `1`). Ten koszyk rate limit obejmuje teksty charakterystyczne dla dostawcy, takie jak `Too many concurrent requests`, `ThrottlingException`, `concurrency limit reached`, `workers_ai ... quota limit exceeded` oraz `resource exhausted`.
+
+---
+
+## Logowanie
+
+```json5
+{
+ logging: {
+ level: "info",
+ file: "/tmp/openclaw/openclaw.log",
+ consoleLevel: "info",
+ consoleStyle: "pretty", // pretty | compact | json
+ redactSensitive: "tools", // off | tools
+ redactPatterns: ["\\bTOKEN\\b\\s*[=:]\\s*([\"']?)([^\\s\"']+)\\1"],
+ },
+}
+```
+
+- Domyślny plik logu: `/tmp/openclaw/openclaw-YYYY-MM-DD.log`.
+- Ustaw `logging.file` dla stałej ścieżki.
+- `consoleLevel` zwiększa się do `debug`, gdy używasz `--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.
+
+---
+
+## Diagnostyka
+
+```json5
+{
+ diagnostics: {
+ enabled: true,
+ flags: ["telegram.*"],
+ stuckSessionWarnMs: 30000,
+
+ otel: {
+ enabled: false,
+ endpoint: "https://otel-collector.example.com:4318",
+ protocol: "http/protobuf", // http/protobuf | grpc
+ headers: { "x-tenant-id": "my-org" },
+ serviceName: "openclaw-gateway",
+ traces: true,
+ metrics: true,
+ logs: false,
+ sampleRate: 1.0,
+ flushIntervalMs: 5000,
+ },
+
+ cacheTrace: {
+ enabled: false,
+ filePath: "~/.openclaw/logs/cache-trace.jsonl",
+ includeMessages: true,
+ includePrompt: true,
+ includeSystem: true,
+ },
+ },
+}
+```
+
+- `enabled`: główny przełącznik wyjścia instrumentacji (domyślnie: `true`).
+- `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 dla emitowania ostrzeżeń o zablokowanej sesji, gdy sesja pozostaje w stanie przetwarzania.
+- `otel.enabled`: włącza pipeline eksportu OpenTelemetry (domyślnie: `false`).
+- `otel.endpoint`: URL kolektora 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 trace, metrics lub logs.
+- `otel.sampleRate`: współczynnik próbkowania trace `0`–`1`.
+- `otel.flushIntervalMs`: okresowy interwał flush telemetry w ms.
+- `cacheTrace.enabled`: zapisuje snapshoty śledzenia cache dla uruchomień osadzonych (domyślnie: `false`).
+- `cacheTrace.filePath`: ścieżka wyjściowa dla JSONL śledzenia cache (domyślnie: `$OPENCLAW_STATE_DIR/logs/cache-trace.jsonl`).
+- `cacheTrace.includeMessages` / `includePrompt` / `includeSystem`: kontrolują, co jest uwzględniane w wyjściu śledzenia cache (wszystkie domyślnie: `true`).
+
+---
+
+## Aktualizacje
+
+```json5
+{
+ update: {
+ channel: "stable", // stable | beta | dev
+ checkOnStart: true,
+
+ auto: {
+ enabled: false,
+ stableDelayHours: 6,
+ stableJitterHours: 12,
+ betaCheckIntervalHours: 1,
+ },
+ },
+}
+```
+
+- `channel`: kanał wydań dla instalacji npm/git — `"stable"`, `"beta"` lub `"dev"`.
+- `checkOnStart`: sprawdza aktualizacje npm przy starcie bramy (domyślnie: `true`).
+- `auto.enabled`: włącza automatyczne aktualizacje w tle dla instalacji pakietowych (domyślnie: `false`).
+- `auto.stableDelayHours`: minimalne opóźnienie w godzinach przed automatycznym zastosowaniem na kanale stable (domyślnie: `6`; maks.: `168`).
+- `auto.stableJitterHours`: dodatkowe okno rozłożenia wdrażania 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`).
+
+---
+
+## ACP
+
+```json5
+{
+ acp: {
+ enabled: false,
+ dispatch: { enabled: true },
+ backend: "acpx",
+ defaultAgent: "main",
+ allowedAgents: ["main", "ops"],
+ maxConcurrentSessions: 10,
+
+ stream: {
+ coalesceIdleMs: 50,
+ maxChunkChars: 1000,
+ repeatSuppression: true,
+ deliveryMode: "live", // live | final_only
+ hiddenBoundarySeparator: "paragraph", // none | space | newline | paragraph
+ maxOutputChars: 50000,
+ maxSessionUpdateChars: 500,
+ },
+
+ runtime: {
+ ttlMinutes: 30,
+ },
+ },
+}
+```
+
+- `enabled`: globalna bramka funkcji ACP (domyślnie: `false`).
+- `dispatch.enabled`: niezależna bramka dla dispatchu 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 odpowiadać zarejestrowanemu pluginowi runtime ACP).
+- `defaultAgent`: zapasowy docelowy identyfikator agenta ACP, gdy spawny nie określają jawnego celu.
+- `allowedAgents`: lista dozwolonych identyfikatorów agentów dla sesji runtime ACP; pusta oznacza brak dodatkowego ograniczenia.
+- `maxConcurrentSessions`: maksymalna liczba jednocześnie aktywnych sesji ACP.
+- `stream.coalesceIdleMs`: okno flush bezczynności w ms dla streamowanego tekstu.
+- `stream.maxChunkChars`: maksymalny rozmiar fragmentu przed podziałem projekcji bloku streamingu.
+- `stream.repeatSuppression`: tłumi powtarzające się linie statusu/narzędzi per tura (domyślnie: `true`).
+- `stream.deliveryMode`: `"live"` streamuje 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 na turę ACP.
+- `stream.maxSessionUpdateChars`: maksymalna liczba znaków dla projektowanych linii statusu/aktualizacji ACP.
+- `stream.tagVisibility`: zapis nazw tagów na boolowskie nadpisania widoczności dla zdarzeń streamingu.
+- `runtime.ttlMinutes`: TTL bezczynności w minutach dla workerów sesji ACP przed objęciem ich czyszczeniem.
+- `runtime.installCommand`: opcjonalne polecenie instalacji uruchamiane podczas bootstrapowania środowiska runtime ACP.
+
+---
+
+## CLI
+
+```json5
+{
+ cli: {
+ banner: {
+ taglineMode: "off", // random | default | off
+ },
+ },
+}
+```
+
+- `cli.banner.taglineMode` kontroluje styl sloganu bannera:
+ - `"random"` (domyślnie): rotujące zabawne/sezonowe slogany.
+ - `"default"`: stały neutralny slogan (`Wszystkie Twoje czaty, jeden OpenClaw.`).
+ - `"off"`: bez tekstu sloganu (tytuł/wersja bannera są nadal pokazywane).
+- Aby ukryć cały banner (nie tylko slogany), ustaw env `OPENCLAW_HIDE_BANNER=1`.
+
+---
+
+## Wizard
+
+Metadane zapisywane przez przepływy konfiguracji prowadzone przez CLI (`onboard`, `configure`, `doctor`):
+
+```json5
+{
+ wizard: {
+ lastRunAt: "2026-01-01T00:00:00.000Z",
+ lastRunVersion: "2026.1.4",
+ lastRunCommit: "abc1234",
+ lastRunCommand: "configure",
+ lastRunMode: "local",
+ },
+}
+```
+
+---
+
+## Tożsamość
+
+Zobacz pola tożsamości `agents.list` w sekcji [Domyślne ustawienia agentów](#agent-defaults).
+
+---
+
+## Bridge (starszy, usunięty)
+
+Bieżące buildy nie zawierają już mostu TCP. Nody łą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
+{
+ "bridge": {
+ "enabled": true,
+ "port": 18790,
+ "bind": "tailnet",
+ "tls": {
+ "enabled": true,
+ "autoGenerate": true
+ }
+ }
+}
+```
+
+
+
+---
+
+## Cron
+
+```json5
+{
+ cron: {
+ enabled: true,
+ maxConcurrentRuns: 2,
+ webhook: "https://example.invalid/legacy", // przestarzały fallback dla zapisanych zadań notify:true
+ webhookToken: "replace-with-dedicated-token", // opcjonalny token bearer dla wychodzącego auth webhooka
+ sessionRetention: "24h", // ciąg czasu trwania lub false
+ runLog: {
+ maxBytes: "2mb", // domyślnie 2_000_000 bajtów
+ keepLines: 2000, // domyślnie 2000
+ },
+ },
+}
+```
+
+- `sessionRetention`: jak długo przechowywać ukończone odizolowane sesje uruchomień cron przed ich usunięciem z `sessions.json`. Kontroluje również czyszczenie zarchiwizowanych usuniętych transkryptów cron. Domyślnie: `24h`; ustaw `false`, aby wyłączyć.
+- `runLog.maxBytes`: maksymalny rozmiar na plik logu uruchomienia (`cron/runs/.jsonl`) przed przycinaniem. Domyślnie: `2_000_000` bajtów.
+- `runLog.keepLines`: liczba najnowszych linii zachowywanych przy uruchomieniu przycinania logu. Domyślnie: `2000`.
+- `webhookToken`: token bearer używany do dostarczania POST webhooków cron (`delivery.mode = "webhook"`); jeśli pominięty, nie jest wysyłany nagłówek auth.
+- `webhook`: przestarzały starszy fallback URL webhooka (http/https) używany tylko dla zapisanych zadań, które nadal mają `notify: true`.
+
+### `cron.retry`
+
+```json5
+{
+ cron: {
+ retry: {
+ maxAttempts: 3,
+ backoffMs: [30000, 60000, 300000],
+ retryOn: ["rate_limit", "overloaded", "network", "timeout", "server_error"],
+ },
+ },
+}
+```
+
+- `maxAttempts`: maksymalna liczba ponownych prób 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 uruchamiają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ą oddzielnej obsługi błędów.
+
+### `cron.failureAlert`
+
+```json5
+{
+ cron: {
+ failureAlert: {
+ enabled: false,
+ after: 3,
+ cooldownMs: 3600000,
+ mode: "announce",
+ accountId: "main",
+ },
+ },
+}
+```
+
+- `enabled`: włącza alerty o błędach dla zadań cron (domyślnie: `false`).
+- `after`: liczba kolejnych niepowodzeń przed wywołaniem alertu (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 webhooka.
+- `accountId`: opcjonalny identyfikator konta lub kanału do zawężenia dostarczania alertu.
+
+### `cron.failureDestination`
+
+```json5
+{
+ cron: {
+ failureDestination: {
+ mode: "announce",
+ channel: "last",
+ to: "channel:C1234567890",
+ accountId: "main",
+ },
+ },
+}
+```
+
+- Domyślny cel powiadomień o błędach cron dla wszystkich zadań.
+- `mode`: `"announce"` lub `"webhook"`; domyślnie `"announce"`, gdy istnieją wystarczające dane celu.
+- `channel`: nadpisanie kanału dla dostarczania announce. `"last"` ponownie używa ostatniego znanego kanału dostarczenia.
+- `to`: jawny cel announce lub URL webhooka. Wymagane dla trybu webhook.
+- `accountId`: opcjonalne nadpisanie konta dla dostarczania.
+- `delivery.failureDestination` per zadanie nadpisuje tę globalną wartość domyślną.
+- Gdy nie ustawiono ani globalnego, ani per-zadanie celu błędu, zadania, które już dostarczają przez `announce`, przy błędzie wracają do tego podstawowego celu announce.
+- `delivery.failureDestination` jest obsługiwane tylko dla zadań `sessionTarget="isolated"`, chyba że podstawowe `delivery.mode` zadania ma wartość `"webhook"`.
+
+Zobacz [Zadania Cron](/pl/automation/cron-jobs). Odizolowane wykonania cron są śledzone jako [zadania w tle](/pl/automation/tasks).
+
+---
+
+## Zmienne szablonu modelu mediów
+
+Placeholdery szablonów rozwijane w `tools.media.models[].args`:
+
+| Zmienna | Opis |
+| ----------------- | ------------------------------------------------- |
+| `{{Body}}` | Pełna treść wiadomości przychodzącej |
+| `{{RawBody}}` | Surowa treść (bez wrapperów historii/nadawcy) |
+| `{{BodyStripped}}` | Treść z usuniętymi mention z grup |
+| `{{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 medium 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) |
+| `{{Provider}}` | Wskazówka dostawcy (whatsapp, telegram, discord itp.) |
+
+---
+
+## Include konfiguracji (`$include`)
+
+Podziel konfigurację na wiele plików:
+
+```json5
+// ~/.openclaw/openclaw.json
+{
+ gateway: { port: 18789 },
+ agents: { $include: "./agents.json5" },
+ broadcast: {
+ $include: ["./clients/mueller.json5", "./clients/schmidt.json5"],
+ },
+}
+```
+
+**Zachowanie scalania:**
+
+- Pojedynczy plik: zastępuje obiekt zawierający.
+- Tablica plików: głęboko scalana w kolejności (późniejsze nadpisują wcześniejsze).
+- Klucze sąsiednie: scalane po include (nadpisują dołączone wartości).
+- Zagnieżdżone include: maksymalnie 10 poziomów głębokości.
+- Ścieżki: rozwiązywane względem pliku zawierającego, ale muszą pozostać w obrębie katalogu głównego konfiguracji najwyższego poziomu (`dirname` od `openclaw.json`). Formy bezwzględne/`../` są dozwolone tylko wtedy, gdy po rozwiązaniu nadal mieszczą się w tej granicy.
+- Błędy: czytelne komunikaty dla brakujących plików, błędów parsowania i cyklicznych include.
+
+---
+
+_Powiązane: [Konfiguracja](/pl/gateway/configuration) · [Przykłady konfiguracji](/pl/gateway/configuration-examples) · [Doctor](/pl/gateway/doctor)_
diff --git a/docs/pl/gateway/protocol.md b/docs/pl/gateway/protocol.md
index 8de9647df..a8db758c3 100644
--- a/docs/pl/gateway/protocol.md
+++ b/docs/pl/gateway/protocol.md
@@ -1,34 +1,34 @@
---
read_when:
- - Implementowanie lub aktualizowanie klientów WS gateway
- - Debugowanie niedopasowań protokołu lub niepowodzeń połączenia
+ - Implementowanie lub aktualizowanie klientów WS bramy
+ - Debugowanie niezgodności protokołu lub błędów połączenia
- Ponowne generowanie schematu/modeli protokołu
-summary: 'Protokół Gateway WebSocket: uzgadnianie połączenia, ramki, wersjonowanie'
-title: Protokół Gateway
+summary: 'Protokół WebSocket bramy: uzgadnianie połączenia, ramki, wersjonowanie'
+title: Protokół bramy
x-i18n:
- generated_at: "2026-04-08T02:15:42Z"
+ generated_at: "2026-04-10T09:44:32Z"
model: gpt-5.4
provider: openai
- source_hash: 8635e3ac1dd311dbd3a770b088868aa1495a8d53b3ebc1eae0dfda3b2bf4694a
+ source_hash: 83c820c46d4803d571c770468fd6782619eaa1dca253e156e8087dec735c127f
source_path: gateway/protocol.md
workflow: 15
---
-# Protokół Gateway (WebSocket)
+# Protokół bramy (WebSocket)
-Protokół Gateway WS jest **pojedynczą płaszczyzną sterowania + transportem węzłów** dla
-OpenClaw. Wszyscy klienci (CLI, interfejs webowy, aplikacja macOS, węzły iOS/Android, bezgłowe
-węzły) łączą się przez WebSocket i deklarują swoją **rolę** + **zakres** w czasie
-uzgadniania połączenia.
+Protokół Gateway WS to **jedyna płaszczyzna sterowania + transport węzłów** dla
+OpenClaw. Wszyscy klienci (CLI, interfejs webowy, aplikacja macOS, węzły
+iOS/Android, węzły bezgłowe) łączą się przez WebSocket i deklarują swoją **rolę**
++ **zakres** podczas uzgadniania połączenia.
## Transport
- WebSocket, ramki tekstowe z ładunkami JSON.
- Pierwsza ramka **musi** być żądaniem `connect`.
-## Uzgadnianie połączenia (connect)
+## Uzgadnianie połączenia (`connect`)
-Gateway → klient (wyzwanie przed połączeniem):
+Brama → klient (wyzwanie przed połączeniem):
```json
{
@@ -38,7 +38,7 @@ Gateway → klient (wyzwanie przed połączeniem):
}
```
-Klient → Gateway:
+Klient → brama:
```json
{
@@ -73,7 +73,7 @@ Klient → Gateway:
}
```
-Gateway → klient:
+Brama → klient:
```json
{
@@ -96,8 +96,8 @@ Gdy zostanie wydany token urządzenia, `hello-ok` zawiera także:
}
```
-Podczas przekazania w zaufanym przepływie bootstrap, `hello-ok.auth` może także zawierać dodatkowe
-ograniczone wpisy ról w `deviceTokens`:
+Podczas przekazywania w zaufanym bootstrapie, `hello-ok.auth` może także zawierać
+dodatkowe ograniczone wpisy ról w `deviceTokens`:
```json
{
@@ -116,11 +116,12 @@ ograniczone wpisy ról w `deviceTokens`:
}
```
-W przypadku wbudowanego przepływu bootstrap węzła/operatora podstawowy token węzła pozostaje
-`scopes: []`, a każdy przekazany token operatora pozostaje ograniczony do listy dozwolonych zakresów
-operatora bootstrap (`operator.approvals`, `operator.read`,
-`operator.talk.secrets`, `operator.write`). Sprawdzenia zakresu bootstrap pozostają
-prefiksowane rolą: wpisy operatora spełniają tylko żądania operatora, a role inne niż operator
+W przypadku wbudowanego przepływu bootstrap dla węzła/operatora podstawowy token
+węzła pozostaje z `scopes: []`, a każdy przekazany token operatora pozostaje
+ograniczony do listy dozwolonych zakresów operatora bootstrapu
+(`operator.approvals`, `operator.read`, `operator.talk.secrets`,
+`operator.write`). Kontrole zakresu bootstrapu pozostają prefiksowane rolą:
+wpisy operatora spełniają tylko żądania operatora, a role inne niż operator
nadal wymagają zakresów pod własnym prefiksem roli.
### Przykład węzła
@@ -164,14 +165,15 @@ nadal wymagają zakresów pod własnym prefiksem roli.
- **Odpowiedź**: `{type:"res", id, ok, payload|error}`
- **Zdarzenie**: `{type:"event", event, payload, seq?, stateVersion?}`
-Metody powodujące skutki uboczne wymagają **kluczy idempotencji** (zobacz schemat).
+Metody wywołujące skutki uboczne wymagają **kluczy idempotencji** (zobacz
+schemat).
## Role + zakresy
### Role
- `operator` = klient płaszczyzny sterowania (CLI/UI/automatyzacja).
-- `node` = host możliwości (`camera/screen/canvas/system.run`).
+- `node` = host możliwości (camera/screen/canvas/system.run).
### Zakresy (operator)
@@ -187,62 +189,67 @@ Typowe zakresy:
`talk.config` z `includeSecrets: true` wymaga `operator.talk.secrets`
(lub `operator.admin`).
-Metody Gateway RPC rejestrowane przez pluginy mogą żądać własnego zakresu operatora, ale
-zastrzeżone prefiksy administracyjne rdzenia (`config.*`, `exec.approvals.*`, `wizard.*`,
-`update.*`) zawsze są mapowane na `operator.admin`.
+Metody RPC bramy zarejestrowane przez pluginy mogą wymagać własnego zakresu
+operatora, ale zarezerwowane prefiksy administracyjne rdzenia (`config.*`,
+`exec.approvals.*`, `wizard.*`, `update.*`) zawsze są mapowane na
+`operator.admin`.
-Zakres metody to tylko pierwszy próg kontroli. Niektóre polecenia slash osiągane przez
-`chat.send` nakładają dodatkowo bardziej rygorystyczne kontrole na poziomie polecenia. Na przykład trwałe
-zapisy `/config set` i `/config unset` wymagają `operator.admin`.
+Zakres metody jest tylko pierwszym progiem kontroli. Niektóre polecenia slash
+osiągane przez `chat.send` nakładają dodatkowo bardziej restrykcyjne kontrole na
+poziomie polecenia. Na przykład trwałe zapisy `/config set` i `/config unset`
+wymagają `operator.admin`.
-`node.pair.approve` ma także dodatkową kontrolę zakresu w momencie zatwierdzania ponad
-bazowy zakres metody:
+`node.pair.approve` ma także dodatkową kontrolę zakresu podczas zatwierdzania,
+ponad bazowy zakres metody:
-- żądania bez poleceń: `operator.pairing`
+- żądania bez polecenia: `operator.pairing`
- żądania z poleceniami węzła innymi niż exec: `operator.pairing` + `operator.write`
-- żądania obejmujące `system.run`, `system.run.prepare` lub `system.which`:
+- żądania zawierające `system.run`, `system.run.prepare` lub `system.which`:
`operator.pairing` + `operator.admin`
### Caps/commands/permissions (node)
-Węzły deklarują roszczenia możliwości w czasie połączenia:
+Węzły deklarują żądania możliwości podczas łączenia:
-- `caps`: wysokopoziomowe kategorie możliwości.
+- `caps`: kategorie możliwości wysokiego poziomu.
- `commands`: lista dozwolonych poleceń dla invoke.
- `permissions`: szczegółowe przełączniki (np. `screen.record`, `camera.capture`).
-Gateway traktuje je jako **roszczenia** i egzekwuje listy dozwolonych po stronie serwera.
+Brama traktuje je jako **deklaracje** i egzekwuje listy dozwolonych po stronie
+serwera.
## Obecność
-- `system-presence` zwraca wpisy kluczowane tożsamością urządzenia.
-- Wpisy obecności zawierają `deviceId`, `roles` i `scopes`, aby interfejsy mogły pokazywać jeden wiersz na urządzenie,
- nawet gdy łączy się ono zarówno jako **operator**, jak i **node**.
+- `system-presence` zwraca wpisy indeksowane tożsamością urządzenia.
+- Wpisy obecności zawierają `deviceId`, `roles` i `scopes`, aby interfejsy UI
+ mogły pokazywać jeden wiersz na urządzenie, nawet gdy łączy się ono zarówno
+ jako **operator**, jak i **node**.
## Typowe rodziny metod RPC
-Ta strona nie jest wygenerowanym pełnym zrzutem, ale publiczna powierzchnia WS jest szersza
-niż przykłady uzgadniania połączenia/uwierzytelniania powyżej. To są główne rodziny metod, które
-Gateway udostępnia obecnie.
+Ta strona nie jest wygenerowanym pełnym zrzutem, ale publiczna powierzchnia WS
+jest szersza niż przykłady uzgadniania połączenia/uwierzytelniania powyżej. To
+główne rodziny metod, które brama udostępnia obecnie.
-`hello-ok.features.methods` to zachowawcza lista wykrywania zbudowana z
-`src/gateway/server-methods-list.ts` oraz załadowanych eksportów metod pluginów/kanałów.
-Traktuj ją jako wykrywanie funkcji, a nie wygenerowany zrzut każdego pomocniczego wywołania
-zaimplementowanego w `src/gateway/server-methods/*.ts`.
+`hello-ok.features.methods` to zachowawcza lista wykrywania zbudowana na bazie
+`src/gateway/server-methods-list.ts` oraz załadowanych eksportów metod
+pluginów/kanałów. Traktuj ją jako wykrywanie funkcji, a nie jako wygenerowany
+zrzut każdego wywoływalnego helpera zaimplementowanego w
+`src/gateway/server-methods/*.ts`.
### System i tożsamość
-- `health` zwraca buforowany lub świeżo sprawdzony snapshot kondycji gateway.
-- `status` zwraca podsumowanie gateway w stylu `/status`; pola wrażliwe są
- dołączane tylko dla klientów operatora z zakresem admin.
-- `gateway.identity.get` zwraca tożsamość urządzenia gateway używaną przez przepływy relay i
- parowania.
-- `system-presence` zwraca bieżący snapshot obecności dla połączonych
- urządzeń operatora/węzła.
-- `system-event` dopisuje zdarzenie systemowe i może aktualizować/rozgłaszać kontekst
- obecności.
-- `last-heartbeat` zwraca najnowsze zapisane zdarzenie heartbeat.
-- `set-heartbeats` przełącza przetwarzanie heartbeat w gateway.
+- `health` zwraca buforowaną lub świeżo sprawdzoną migawkę stanu zdrowia bramy.
+- `status` zwraca podsumowanie bramy w stylu `/status`; pola wrażliwe są
+ dołączane tylko dla klientów operatora z zakresem administratora.
+- `gateway.identity.get` zwraca tożsamość urządzenia bramy używaną przez
+ przepływy relay i parowania.
+- `system-presence` zwraca bieżącą migawkę obecności dla połączonych urządzeń
+ operatora/węzła.
+- `system-event` dopisuje zdarzenie systemowe i może aktualizować/rozgłaszać
+ kontekst obecności.
+- `last-heartbeat` zwraca ostatnie zapisane trwałe zdarzenie heartbeat.
+- `set-heartbeats` przełącza przetwarzanie heartbeatów na bramie.
### Modele i użycie
@@ -250,30 +257,31 @@ zaimplementowanego w `src/gateway/server-methods/*.ts`.
- `usage.status` zwraca okna użycia dostawcy/podsumowania pozostałego limitu.
- `usage.cost` zwraca zagregowane podsumowania kosztów użycia dla zakresu dat.
- `doctor.memory.status` zwraca gotowość pamięci wektorowej / embeddingów dla
- aktywnego domyślnego obszaru roboczego agenta.
-- `sessions.usage` zwraca podsumowania użycia dla poszczególnych sesji.
+ aktywnego domyślnego workspace agenta.
+- `sessions.usage` zwraca podsumowania użycia dla każdej sesji.
- `sessions.usage.timeseries` zwraca szereg czasowy użycia dla jednej sesji.
- `sessions.usage.logs` zwraca wpisy dziennika użycia dla jednej sesji.
-### Kanały i pomocniki logowania
+### Kanały i helpery logowania
-- `channels.status` zwraca podsumowania statusu wbudowanych + dołączonych kanałów/pluginów.
-- `channels.logout` wylogowuje z określonego kanału/konta tam, gdzie kanał
+- `channels.status` zwraca podsumowania stanu kanałów/pluginów wbudowanych i
+ dołączonych.
+- `channels.logout` wylogowuje z określonego kanału/konta, jeśli dany kanał
obsługuje wylogowanie.
-- `web.login.start` uruchamia przepływ logowania QR/web dla bieżącego
- dostawcy kanału web obsługującego QR.
-- `web.login.wait` czeka na zakończenie tego przepływu logowania QR/web i przy powodzeniu uruchamia
- kanał.
-- `push.test` wysyła testowe powiadomienie APNs do zarejestrowanego węzła iOS.
+- `web.login.start` uruchamia przepływ logowania QR/web dla bieżącego dostawcy
+ kanału web obsługującego QR.
+- `web.login.wait` czeka na zakończenie tego przepływu logowania QR/web i po
+ sukcesie uruchamia kanał.
+- `push.test` wysyła testowe powiadomienie push APNs do zarejestrowanego węzła iOS.
- `voicewake.get` zwraca zapisane wyzwalacze słowa aktywującego.
- `voicewake.set` aktualizuje wyzwalacze słowa aktywującego i rozgłasza zmianę.
### Wiadomości i logi
-- `send` jest bezpośrednim wywołaniem RPC dostarczania wychodzącego dla
- wysyłek kierowanych do kanału/konta/wątku poza runnerem czatu.
-- `logs.tail` zwraca ogon skonfigurowanego dziennika plikowego gateway z kursorem/limitem oraz
- kontrolami maksymalnej liczby bajtów.
+- `send` to bezpośrednia metoda RPC dostarczania wychodzącego dla wysyłek
+ ukierunkowanych na kanał/konto/wątek poza runnerem czatu.
+- `logs.tail` zwraca końcówkę skonfigurowanego dziennika plikowego bramy z
+ kontrolą kursora/limitu i maksymalnej liczby bajtów.
### Talk i TTS
@@ -281,64 +289,65 @@ zaimplementowanego w `src/gateway/server-methods/*.ts`.
wymaga `operator.talk.secrets` (lub `operator.admin`).
- `talk.mode` ustawia/rozgłasza bieżący stan trybu Talk dla klientów
WebChat/Control UI.
-- `talk.speak` syntetyzuje mowę przez aktywnego dostawcę mowy Talk.
-- `tts.status` zwraca stan włączenia TTS, aktywnego dostawcę, dostawców zapasowych
- oraz stan konfiguracji dostawcy.
-- `tts.providers` zwraca widoczny spis dostawców TTS.
+- `talk.speak` syntezuje mowę przez aktywnego dostawcę mowy Talk.
+- `tts.status` zwraca stan włączenia TTS, aktywnego dostawcę, dostawców
+ zapasowych i stan konfiguracji dostawcy.
+- `tts.providers` zwraca widoczny inwentarz dostawców TTS.
- `tts.enable` i `tts.disable` przełączają stan preferencji TTS.
- `tts.setProvider` aktualizuje preferowanego dostawcę TTS.
- `tts.convert` uruchamia jednorazową konwersję tekstu na mowę.
### Sekrety, konfiguracja, aktualizacja i kreator
-- `secrets.reload` ponownie rozwiązuje aktywne SecretRef i podmienia stan sekretów w czasie działania
- tylko przy pełnym powodzeniu.
-- `secrets.resolve` rozwiązuje przypisania sekretów docelowych poleceń dla określonego
- zestawu poleceń/celów.
-- `config.get` zwraca bieżący snapshot konfiguracji i hash.
-- `config.set` zapisuje zwalidowany ładunek konfiguracji.
+- `secrets.reload` ponownie rozwiązuje aktywne SecretRef i podmienia stan
+ sekretów w czasie działania tylko przy pełnym sukcesie.
+- `secrets.resolve` rozwiązuje przypisania sekretów docelowych poleceń dla
+ określonego zestawu poleceń/celów.
+- `config.get` zwraca bieżącą migawkę konfiguracji i hash.
+- `config.set` zapisuje zweryfikowany ładunek konfiguracji.
- `config.patch` scala częściową aktualizację konfiguracji.
-- `config.apply` waliduje i zastępuje pełny ładunek konfiguracji.
-- `config.schema` zwraca ładunek aktywnego schematu konfiguracji używany przez Control UI i
- narzędzia CLI: schemat, `uiHints`, wersję oraz metadane generowania, w tym
- metadane schematu pluginów + kanałów, gdy środowisko wykonawcze może je załadować. Schemat
- zawiera metadane pól `title` / `description` pochodzące z tych samych etykiet
- i tekstów pomocy używanych przez UI, w tym zagnieżdżone obiekty, wildcard, elementy tablic
- oraz gałęzie kompozycji `anyOf` / `oneOf` / `allOf`, gdy istnieje odpowiadająca
- dokumentacja pól.
-- `config.schema.lookup` zwraca ładunek wyszukiwania ograniczony do ścieżki dla jednej ścieżki konfiguracji:
- znormalizowaną ścieżkę, płytki węzeł schematu, dopasowaną wskazówkę + `hintPath` oraz
- podsumowania bezpośrednich elementów potomnych do drążenia w UI/CLI.
- - Węzły schematu wyszukiwania zachowują dokumentację skierowaną do użytkownika i typowe pola walidacji:
- `title`, `description`, `type`, `enum`, `const`, `format`, `pattern`,
- ograniczenia liczb/ciągów/tablic/obiektów oraz flagi logiczne takie jak
- `additionalProperties`, `deprecated`, `readOnly`, `writeOnly`.
- - Podsumowania elementów potomnych udostępniają `key`, znormalizowaną `path`, `type`, `required`,
- `hasChildren` oraz dopasowane `hint` / `hintPath`.
-- `update.run` uruchamia przepływ aktualizacji gateway i planuje restart tylko wtedy,
- gdy sama aktualizacja się powiodła.
+- `config.apply` weryfikuje i zastępuje pełny ładunek konfiguracji.
+- `config.schema` zwraca ładunek aktywnego schematu konfiguracji używany przez
+ Control UI i narzędzia CLI: schemat, `uiHints`, wersję i metadane generowania,
+ w tym metadane schematów pluginów + kanałów, gdy środowisko wykonawcze może je
+ załadować. Schemat zawiera metadane pól `title` / `description` pochodzące z
+ tych samych etykiet i tekstów pomocy używanych przez UI, w tym dla zagnieżdżonych
+ obiektów, wildcard, elementów tablic i gałęzi kompozycji `anyOf` / `oneOf` / `allOf`,
+ gdy istnieje odpowiadająca dokumentacja pola.
+- `config.schema.lookup` zwraca ładunek wyszukiwania ograniczony do ścieżki dla
+ jednej ścieżki konfiguracji: znormalizowaną ścieżkę, płytki węzeł schematu,
+ dopasowaną wskazówkę + `hintPath` oraz podsumowania bezpośrednich elementów
+ podrzędnych do drążenia w UI/CLI.
+ - Węzły schematu wyszukiwania zachowują dokumentację widoczną dla użytkownika
+ i typowe pola walidacji: `title`, `description`, `type`, `enum`, `const`,
+ `format`, `pattern`, ograniczenia liczbowe/tekstowe/tablicowe/obiektowe oraz
+ flagi logiczne, takie jak `additionalProperties`, `deprecated`, `readOnly`,
+ `writeOnly`.
+ - Podsumowania elementów podrzędnych udostępniają `key`, znormalizowaną `path`,
+ `type`, `required`, `hasChildren`, a także dopasowane `hint` / `hintPath`.
+- `update.run` uruchamia przepływ aktualizacji bramy i planuje restart tylko
+ wtedy, gdy sama aktualizacja zakończyła się sukcesem.
- `wizard.start`, `wizard.next`, `wizard.status` i `wizard.cancel` udostępniają
- kreator wdrożenia przez WS RPC.
+ kreator onboardingu przez WS RPC.
### Istniejące główne rodziny
-#### Pomocniki agenta i obszaru roboczego
+#### Helpery agentów i workspace
- `agents.list` zwraca skonfigurowane wpisy agentów.
-- `agents.create`, `agents.update` i `agents.delete` zarządzają rekordami agentów oraz
- powiązaniami obszaru roboczego.
+- `agents.create`, `agents.update` i `agents.delete` zarządzają rekordami
+ agentów i okablowaniem workspace.
- `agents.files.list`, `agents.files.get` i `agents.files.set` zarządzają
- plikami obszaru roboczego bootstrap udostępnianymi dla agenta.
-- `agent.identity.get` zwraca efektywną tożsamość asystenta dla agenta lub
- sesji.
-- `agent.wait` czeka na zakończenie uruchomienia i zwraca końcowy snapshot, gdy
- jest dostępny.
+ plikami bootstrap workspace udostępnianymi dla agenta.
+- `agent.identity.get` zwraca efektywną tożsamość asystenta dla agenta lub sesji.
+- `agent.wait` czeka na zakończenie uruchomienia i zwraca terminalną migawkę,
+ jeśli jest dostępna.
#### Sterowanie sesją
- `sessions.list` zwraca bieżący indeks sesji.
-- `sessions.subscribe` i `sessions.unsubscribe` przełączają subskrypcje zdarzeń zmian sesji
- dla bieżącego klienta WS.
+- `sessions.subscribe` i `sessions.unsubscribe` przełączają subskrypcje zdarzeń
+ zmian sesji dla bieżącego klienta WS.
- `sessions.messages.subscribe` i `sessions.messages.unsubscribe` przełączają
subskrypcje zdarzeń transkryptu/wiadomości dla jednej sesji.
- `sessions.preview` zwraca ograniczone podglądy transkryptu dla określonych
@@ -346,147 +355,174 @@ zaimplementowanego w `src/gateway/server-methods/*.ts`.
- `sessions.resolve` rozwiązuje lub kanonizuje cel sesji.
- `sessions.create` tworzy nowy wpis sesji.
- `sessions.send` wysyła wiadomość do istniejącej sesji.
-- `sessions.steer` jest wariantem przerwania i sterowania dla aktywnej sesji.
+- `sessions.steer` to wariant przerwania i sterowania dla aktywnej sesji.
- `sessions.abort` przerywa aktywną pracę dla sesji.
- `sessions.patch` aktualizuje metadane/nadpisania sesji.
-- `sessions.reset`, `sessions.delete` i `sessions.compact` wykonują
- konserwację sesji.
+- `sessions.reset`, `sessions.delete` i `sessions.compact` wykonują działania
+ konserwacyjne na sesji.
- `sessions.get` zwraca pełny zapisany wiersz sesji.
-- wykonywanie czatu nadal używa `chat.history`, `chat.send`, `chat.abort` i
+- wykonanie czatu nadal używa `chat.history`, `chat.send`, `chat.abort` i
`chat.inject`.
-- `chat.history` jest znormalizowane pod kątem wyświetlania dla klientów UI: wbudowane tagi dyrektyw są
- usuwane z widocznego tekstu, ładunki XML wywołań narzędzi w zwykłym tekście (w tym
+- `chat.history` jest znormalizowane do wyświetlania dla klientów UI:
+ znaczniki dyrektyw inline są usuwane z widocznego tekstu, ładunki XML wywołań
+ narzędzi w zwykłym tekście (w tym
`...`, `...`,
`...`, `...` oraz
- obcięte bloki wywołań narzędzi) i wyciekłe tokeny sterowania modelem ASCII/full-width
- są usuwane, czyste wiersze asystenta z cichymi tokenami, takie jak dokładne `NO_REPLY` /
- `no_reply`, są pomijane, a zbyt duże wiersze mogą zostać zastąpione placeholderami.
+ obcięte bloki wywołań narzędzi) i wyciekłe tokeny sterujące modelu w ASCII/pełnej
+ szerokości są usuwane, czyste wiersze asystenta zawierające wyłącznie ciche tokeny,
+ takie jak dokładne `NO_REPLY` / `no_reply`, są pomijane, a zbyt duże wiersze mogą
+ być zastępowane placeholderami.
#### Parowanie urządzeń i tokeny urządzeń
- `device.pair.list` zwraca oczekujące i zatwierdzone sparowane urządzenia.
- `device.pair.approve`, `device.pair.reject` i `device.pair.remove` zarządzają
rekordami parowania urządzeń.
-- `device.token.rotate` obraca token sparowanego urządzenia w granicach zatwierdzonej roli
- i zakresów.
+- `device.token.rotate` obraca token sparowanego urządzenia w granicach jego
+ zatwierdzonej roli i zakresów.
- `device.token.revoke` unieważnia token sparowanego urządzenia.
#### Parowanie węzłów, invoke i oczekująca praca
- `node.pair.request`, `node.pair.list`, `node.pair.approve`,
- `node.pair.reject` i `node.pair.verify` obejmują parowanie węzłów i bootstrap
- verification.
-- `node.list` i `node.describe` zwracają stan znanych/połączonych węzłów.
+ `node.pair.reject` i `node.pair.verify` obejmują parowanie węzłów i
+ weryfikację bootstrapu.
+- `node.list` i `node.describe` zwracają stan znanych/podłączonych węzłów.
- `node.rename` aktualizuje etykietę sparowanego węzła.
-- `node.invoke` przekazuje polecenie do połączonego węzła.
-- `node.invoke.result` zwraca wynik żądania invoke.
-- `node.event` przenosi zdarzenia pochodzące z węzła z powrotem do gateway.
+- `node.invoke` przekazuje polecenie do podłączonego węzła.
+- `node.invoke.result` zwraca wynik dla żądania invoke.
+- `node.event` przenosi zdarzenia pochodzące z węzła z powrotem do bramy.
- `node.canvas.capability.refresh` odświeża ograniczone tokeny możliwości canvas.
-- `node.pending.pull` i `node.pending.ack` to interfejsy API kolejki połączonych węzłów.
-- `node.pending.enqueue` i `node.pending.drain` zarządzają trwałą oczekującą pracą
- dla węzłów offline/rozłączonych.
+- `node.pending.pull` i `node.pending.ack` to API kolejki podłączonych węzłów.
+- `node.pending.enqueue` i `node.pending.drain` zarządzają trwałą oczekującą
+ pracą dla węzłów offline/rozłączonych.
#### Rodziny zatwierdzeń
- `exec.approval.request`, `exec.approval.get`, `exec.approval.list` i
- `exec.approval.resolve` obejmują jednorazowe żądania zatwierdzenia exec oraz oczekujące
- wyszukiwanie/odtwarzanie zatwierdzeń.
-- `exec.approval.waitDecision` czeka na jedno oczekujące zatwierdzenie exec i zwraca
- ostateczną decyzję (lub `null` przy przekroczeniu czasu).
-- `exec.approvals.get` i `exec.approvals.set` zarządzają snapshotami polityki zatwierdzeń exec
- gateway.
-- `exec.approvals.node.get` i `exec.approvals.node.set` zarządzają lokalną dla węzła
- polityką zatwierdzeń exec przez polecenia relay węzła.
+ `exec.approval.resolve` obejmują jednorazowe żądania zatwierdzenia exec oraz
+ wyszukiwanie/odtwarzanie oczekujących zatwierdzeń.
+- `exec.approval.waitDecision` czeka na jedną oczekującą decyzję zatwierdzenia
+ exec i zwraca ostateczną decyzję (lub `null` przy przekroczeniu limitu czasu).
+- `exec.approvals.get` i `exec.approvals.set` zarządzają migawkami polityki
+ zatwierdzeń exec bramy.
+- `exec.approvals.node.get` i `exec.approvals.node.set` zarządzają lokalną dla
+ węzła polityką zatwierdzeń exec za pośrednictwem poleceń relay węzła.
- `plugin.approval.request`, `plugin.approval.list`,
- `plugin.approval.waitDecision` i `plugin.approval.resolve` obejmują
- przepływy zatwierdzeń definiowane przez pluginy.
+ `plugin.approval.waitDecision` i `plugin.approval.resolve` obejmują przepływy
+ zatwierdzeń zdefiniowane przez pluginy.
#### Inne główne rodziny
- automatyzacja:
- - `wake` planuje natychmiastowe lub przy następnym heartbeat wstrzyknięcie tekstu wybudzającego
+ - `wake` planuje natychmiastowe lub przy następnym heartbeat wstrzyknięcie tekstu budzenia
- `cron.list`, `cron.status`, `cron.add`, `cron.update`, `cron.remove`,
`cron.run`, `cron.runs`
-- skills/tools: `skills.*`, `tools.catalog`, `tools.effective`
+- Skills/narzędzia: `commands.list`, `skills.*`, `tools.catalog`, `tools.effective`
### Typowe rodziny zdarzeń
- `chat`: aktualizacje czatu UI, takie jak `chat.inject` i inne zdarzenia czatu
- tylko dla transkryptu.
-- `session.message` i `session.tool`: aktualizacje transkryptu/strumienia zdarzeń dla
- subskrybowanej sesji.
-- `sessions.changed`: zmienił się indeks sesji lub metadane.
-- `presence`: aktualizacje snapshotu obecności systemu.
-- `tick`: okresowe zdarzenie keepalive / żywotności.
-- `health`: aktualizacja snapshotu kondycji gateway.
+ dotyczące wyłącznie transkryptu.
+- `session.message` i `session.tool`: aktualizacje transkryptu/strumienia
+ zdarzeń dla subskrybowanej sesji.
+- `sessions.changed`: indeks sesji lub metadane uległy zmianie.
+- `presence`: aktualizacje migawki obecności systemu.
+- `tick`: okresowe zdarzenie keepalive / liveness.
+- `health`: aktualizacja migawki stanu zdrowia bramy.
- `heartbeat`: aktualizacja strumienia zdarzeń heartbeat.
- `cron`: zdarzenie zmiany uruchomienia/zadania cron.
-- `shutdown`: powiadomienie o wyłączeniu gateway.
-- `node.pair.requested` / `node.pair.resolved`: cykl życia parowania węzłów.
+- `shutdown`: powiadomienie o zamknięciu bramy.
+- `node.pair.requested` / `node.pair.resolved`: cykl życia parowania węzła.
- `node.invoke.request`: rozgłoszenie żądania invoke węzła.
-- `device.pair.requested` / `device.pair.resolved`: cykl życia sparowanych urządzeń.
-- `voicewake.changed`: zmieniła się konfiguracja wyzwalacza słowa aktywującego.
-- `exec.approval.requested` / `exec.approval.resolved`: cykl życia zatwierdzeń exec.
-- `plugin.approval.requested` / `plugin.approval.resolved`: cykl życia zatwierdzeń pluginów.
+- `device.pair.requested` / `device.pair.resolved`: cykl życia sparowanego urządzenia.
+- `voicewake.changed`: konfiguracja wyzwalaczy słowa aktywującego uległa zmianie.
+- `exec.approval.requested` / `exec.approval.resolved`: cykl życia
+ zatwierdzenia exec.
+- `plugin.approval.requested` / `plugin.approval.resolved`: cykl życia
+ zatwierdzenia pluginu.
-### Metody pomocnicze węzłów
+### Metody pomocnicze węzła
-- Węzły mogą wywoływać `skills.bins`, aby pobrać bieżącą listę plików wykonywalnych skill
- na potrzeby automatycznych kontroli listy dozwolonych.
+- Węzły mogą wywoływać `skills.bins`, aby pobrać bieżącą listę plików
+ wykonywalnych Skills do automatycznych kontroli listy dozwolonych.
### Metody pomocnicze operatora
-- Operatorzy mogą wywoływać `tools.catalog` (`operator.read`), aby pobrać katalog narzędzi środowiska wykonawczego dla
- agenta. Odpowiedź zawiera pogrupowane narzędzia i metadane pochodzenia:
+- Operatorzy mogą wywoływać `commands.list` (`operator.read`), aby pobrać
+ inwentarz poleceń środowiska wykonawczego dla agenta.
+ - `agentId` jest opcjonalne; pomiń je, aby odczytać domyślny workspace agenta.
+ - `scope` określa, którą powierzchnię celuje podstawowa `name`:
+ - `text` zwraca podstawowy tekstowy token polecenia bez wiodącego `/`
+ - `native` oraz domyślna ścieżka `both` zwracają nazwy natywne zależne od
+ dostawcy, gdy są dostępne
+ - `textAliases` zawiera dokładne aliasy slash, takie jak `/model` i `/m`.
+ - `nativeName` zawiera natywną nazwę zależną od dostawcy, gdy taka istnieje.
+ - `provider` jest opcjonalne i wpływa tylko na nazewnictwo natywne oraz
+ dostępność natywnych poleceń pluginów.
+ - `includeArgs=false` pomija zserializowane metadane argumentów w odpowiedzi.
+- Operatorzy mogą wywoływać `tools.catalog` (`operator.read`), aby pobrać
+ katalog narzędzi środowiska wykonawczego dla agenta. Odpowiedź zawiera
+ pogrupowane narzędzia i metadane pochodzenia:
- `source`: `core` lub `plugin`
- `pluginId`: właściciel pluginu, gdy `source="plugin"`
- `optional`: czy narzędzie pluginu jest opcjonalne
-- Operatorzy mogą wywoływać `tools.effective` (`operator.read`), aby pobrać efektywny w czasie działania
- spis narzędzi dla sesji.
+- Operatorzy mogą wywoływać `tools.effective` (`operator.read`), aby pobrać
+ efektywny inwentarz narzędzi środowiska wykonawczego dla sesji.
- `sessionKey` jest wymagane.
- - Gateway wyprowadza zaufany kontekst środowiska wykonawczego po stronie serwera z sesji zamiast akceptować
- kontekst uwierzytelniania lub dostarczenia dostarczony przez wywołującego.
- - Odpowiedź jest ograniczona do sesji i odzwierciedla to, czego aktywna rozmowa może użyć w danej chwili,
- w tym narzędzia rdzenia, pluginów i kanałów.
-- Operatorzy mogą wywoływać `skills.status` (`operator.read`), aby pobrać widoczny
- spis skills dla agenta.
- - `agentId` jest opcjonalne; pomiń je, aby odczytać domyślny obszar roboczy agenta.
- - Odpowiedź zawiera kwalifikowalność, brakujące wymagania, kontrole konfiguracji oraz
- zsanityzowane opcje instalacji bez ujawniania surowych wartości sekretów.
-- Operatorzy mogą wywoływać `skills.search` i `skills.detail` (`operator.read`) dla
- metadanych wykrywania ClawHub.
+ - Brama wyprowadza zaufany kontekst środowiska wykonawczego po stronie serwera
+ z sesji zamiast akceptować kontekst uwierzytelniania lub dostarczenia
+ dostarczony przez wywołującego.
+ - Odpowiedź jest ograniczona do sesji i odzwierciedla to, z czego aktywna
+ konwersacja może korzystać w danej chwili, w tym z narzędzi rdzenia,
+ pluginów i kanałów.
+- Operatorzy mogą wywoływać `skills.status` (`operator.read`), aby pobrać
+ widoczny inwentarz Skills dla agenta.
+ - `agentId` jest opcjonalne; pomiń je, aby odczytać domyślny workspace agenta.
+ - Odpowiedź zawiera kwalifikowalność, brakujące wymagania, kontrole
+ konfiguracji oraz oczyszczone opcje instalacji bez ujawniania surowych
+ wartości sekretów.
+- Operatorzy mogą wywoływać `skills.search` i `skills.detail`
+ (`operator.read`) dla metadanych wykrywania ClawHub.
- Operatorzy mogą wywoływać `skills.install` (`operator.admin`) w dwóch trybach:
- - Tryb ClawHub: `{ source: "clawhub", slug, version?, force? }` instaluje
- folder skill w katalogu `skills/` domyślnego obszaru roboczego agenta.
- - Tryb instalatora Gateway: `{ name, installId, dangerouslyForceUnsafeInstall?, timeoutMs? }`
- uruchamia zadeklarowaną akcję `metadata.openclaw.install` na hoście gateway.
+ - tryb ClawHub: `{ source: "clawhub", slug, version?, force? }` instaluje
+ folder skill do katalogu `skills/` domyślnego workspace agenta.
+ - tryb instalatora bramy: `{ name, installId, dangerouslyForceUnsafeInstall?, timeoutMs? }`
+ uruchamia zadeklarowane działanie `metadata.openclaw.install` na hoście bramy.
- Operatorzy mogą wywoływać `skills.update` (`operator.admin`) w dwóch trybach:
- - Tryb ClawHub aktualizuje jeden śledzony slug lub wszystkie śledzone instalacje ClawHub w
- domyślnym obszarze roboczym agenta.
- - Tryb konfiguracji łata wartości `skills.entries.`, takie jak `enabled`,
- `apiKey` i `env`.
+ - tryb ClawHub aktualizuje jeden śledzony slug lub wszystkie śledzone
+ instalacje ClawHub w domyślnym workspace agenta.
+ - tryb konfiguracji modyfikuje wartości `skills.entries.`, takie jak
+ `enabled`, `apiKey` i `env`.
## Zatwierdzenia exec
-- Gdy żądanie exec wymaga zatwierdzenia, gateway rozgłasza `exec.approval.requested`.
-- Klienci operatora rozwiązują je przez wywołanie `exec.approval.resolve` (wymaga zakresu `operator.approvals`).
-- Dla `host=node`, `exec.approval.request` musi zawierać `systemRunPlan` (kanoniczne `argv`/`cwd`/`rawCommand`/metadane sesji). Żądania bez `systemRunPlan` są odrzucane.
-- Po zatwierdzeniu przekazane wywołania `node.invoke system.run` ponownie używają tego kanonicznego
- `systemRunPlan` jako autorytatywnego kontekstu polecenia/cwd/sesji.
+- Gdy żądanie exec wymaga zatwierdzenia, brama rozgłasza `exec.approval.requested`.
+- Klienci operatora rozwiązują je przez wywołanie `exec.approval.resolve`
+ (wymaga zakresu `operator.approvals`).
+- Dla `host=node`, `exec.approval.request` musi zawierać `systemRunPlan`
+ (kanoniczne `argv`/`cwd`/`rawCommand`/metadane sesji). Żądania bez
+ `systemRunPlan` są odrzucane.
+- Po zatwierdzeniu przekazane dalej wywołania `node.invoke system.run` ponownie
+ używają tego kanonicznego `systemRunPlan` jako autorytatywnego kontekstu
+ polecenia/cwd/sesji.
- Jeśli wywołujący zmieni `command`, `rawCommand`, `cwd`, `agentId` lub
`sessionKey` między prepare a końcowym zatwierdzonym przekazaniem `system.run`,
- gateway odrzuci uruchomienie zamiast ufać zmodyfikowanemu ładunkowi.
+ brama odrzuci uruchomienie zamiast ufać zmodyfikowanemu ładunkowi.
-## Zapasowe dostarczanie agenta
+## Fallback dostarczania agenta
- Żądania `agent` mogą zawierać `deliver=true`, aby zażądać dostarczenia wychodzącego.
-- `bestEffortDeliver=false` zachowuje rygorystyczne działanie: nierozwiązane lub wyłącznie wewnętrzne cele dostarczenia zwracają `INVALID_REQUEST`.
-- `bestEffortDeliver=true` umożliwia przejście awaryjne do wykonania tylko w sesji, gdy nie można rozwiązać żadnej zewnętrznej trasy dostarczenia (na przykład sesje internal/webchat lub niejednoznaczne konfiguracje wielu kanałów).
+- `bestEffortDeliver=false` zachowuje ścisłe działanie: nierozwiązane lub
+ wyłącznie wewnętrzne cele dostarczania zwracają `INVALID_REQUEST`.
+- `bestEffortDeliver=true` pozwala na fallback do wykonania tylko w sesji, gdy
+ nie można rozwiązać zewnętrznej trasy dostarczania (na przykład sesje
+ internal/webchat lub niejednoznaczne konfiguracje wielokanałowe).
## Wersjonowanie
- `PROTOCOL_VERSION` znajduje się w `src/gateway/protocol/schema.ts`.
-- Klienci wysyłają `minProtocol` + `maxProtocol`; serwer odrzuca niedopasowania.
+- Klienci wysyłają `minProtocol` + `maxProtocol`; serwer odrzuca niezgodności.
- Schematy + modele są generowane z definicji TypeBox:
- `pnpm protocol:gen`
- `pnpm protocol:gen:swift`
@@ -494,99 +530,115 @@ zaimplementowanego w `src/gateway/server-methods/*.ts`.
## Uwierzytelnianie
-- Uwierzytelnianie gateway współdzielonym sekretem używa `connect.params.auth.token` lub
- `connect.params.auth.password`, zależnie od skonfigurowanego trybu uwierzytelniania.
-- Tryby niosące tożsamość, takie jak Tailscale Serve
- (`gateway.auth.allowTailscale: true`) lub `gateway.auth.mode: "trusted-proxy"` inne niż
- local loopback, spełniają kontrolę uwierzytelniania connect na podstawie
+- Uwierzytelnianie bramy za pomocą wspólnego sekretu używa
+ `connect.params.auth.token` lub `connect.params.auth.password`, zależnie od
+ skonfigurowanego trybu uwierzytelniania.
+- Tryby przenoszące tożsamość, takie jak Tailscale Serve
+ (`gateway.auth.allowTailscale: true`) lub `gateway.auth.mode: "trusted-proxy"`
+ poza loopback, spełniają kontrolę uwierzytelniania połączenia na podstawie
nagłówków żądania zamiast `connect.params.auth.*`.
-- Prywatny ingress `gateway.auth.mode: "none"` całkowicie pomija uwierzytelnianie connect współdzielonym sekretem; nie wystawiaj tego trybu na publiczny/niezaufany ingress.
-- Po sparowaniu Gateway wydaje **token urządzenia** ograniczony do roli + zakresów połączenia.
- Jest on zwracany w `hello-ok.auth.deviceToken` i powinien być
- utrwalony przez klienta na potrzeby przyszłych połączeń.
-- Klienci powinni utrwalać podstawowy `hello-ok.auth.deviceToken` po każdym
+- Prywatny ingress z `gateway.auth.mode: "none"` całkowicie pomija
+ uwierzytelnianie połączenia wspólnym sekretem; nie wystawiaj tego trybu na
+ publiczny/niezaufany ingress.
+- Po sparowaniu brama wydaje **token urządzenia** ograniczony do roli +
+ zakresów połączenia. Jest on zwracany w `hello-ok.auth.deviceToken` i klient
+ powinien zapisać go na potrzeby przyszłych połączeń.
+- Klienci powinni zapisywać podstawowy `hello-ok.auth.deviceToken` po każdym
udanym połączeniu.
-- Ponowne łączenie z tym **zapisanym** tokenem urządzenia powinno także ponownie używać zapisanego
- zatwierdzonego zestawu zakresów dla tego tokenu. Pozwala to zachować już przyznany
- dostęp do odczytu/sprawdzeń/statusu i unika cichego zawężenia ponownych połączeń do
- węższego, domyślnego zakresu tylko admin.
-- Zwykła kolejność pierwszeństwa uwierzytelniania connect to najpierw jawny współdzielony token/hasło, potem
- jawny `deviceToken`, potem zapisany token per urządzenie, a następnie token bootstrap.
+- Ponowne połączenie z użyciem tego **zapisanego** tokenu urządzenia powinno
+ również ponownie używać zapisanego zatwierdzonego zestawu zakresów dla tego
+ tokenu. Zachowuje to wcześniej przyznany dostęp do odczytu/probe/status i
+ zapobiega cichemu zawężeniu ponownych połączeń do węższego domyślnego zakresu
+ tylko dla administratora.
+- Normalna kolejność pierwszeństwa uwierzytelniania połączenia to najpierw
+ jawny współdzielony token/hasło, potem jawny `deviceToken`, następnie
+ zapisany token per urządzenie, a na końcu token bootstrap.
- Dodatkowe wpisy `hello-ok.auth.deviceTokens` to tokeny przekazania bootstrap.
- Utrwalaj je tylko wtedy, gdy połączenie użyło uwierzytelniania bootstrap na zaufanym transporcie,
- takim jak `wss://` lub loopback/local pairing.
-- Jeśli klient dostarczy **jawny** `deviceToken` lub jawne `scopes`, ten
- żądany przez wywołującego zestaw zakresów pozostaje autorytatywny; zakresy z pamięci podręcznej są ponownie używane tylko wtedy, gdy klient ponownie używa zapisanego tokenu per urządzenie.
+ Zapisuj je tylko wtedy, gdy połączenie używało uwierzytelniania bootstrap na
+ zaufanym transporcie, takim jak `wss://` lub loopback/lokalne parowanie.
+- Jeśli klient poda **jawny** `deviceToken` lub jawne `scopes`, żądany przez
+ wywołującego zestaw zakresów pozostaje autorytatywny; zakresy z pamięci
+ podręcznej są używane ponownie tylko wtedy, gdy klient ponownie używa
+ zapisanego tokenu per urządzenie.
- Tokeny urządzeń można obracać/unieważniać przez `device.token.rotate` i
`device.token.revoke` (wymaga zakresu `operator.pairing`).
-- Wydawanie/obracanie tokenów pozostaje ograniczone do zatwierdzonego zestawu ról zapisanych w
- wpisie parowania tego urządzenia; obrót tokenu nie może rozszerzyć urządzenia do
- roli, której zatwierdzenie parowania nigdy nie nadało.
-- Dla sesji tokenów sparowanych urządzeń zarządzanie urządzeniem jest ograniczone do własnego zakresu, chyba że
- wywołujący ma także `operator.admin`: użytkownicy bez admina mogą usuwać/unieważniać/obracać
- tylko **własny** wpis urządzenia.
+- Wydawanie/obracanie tokenów pozostaje ograniczone do zatwierdzonego zestawu
+ ról zapisanego w wpisie parowania tego urządzenia; obrót tokenu nie może
+ rozszerzyć urządzenia do roli, której zatwierdzenie parowania nigdy nie nadało.
+- Dla sesji tokenów sparowanych urządzeń zarządzanie urządzeniami jest
+ ograniczone do własnego zakresu, chyba że wywołujący ma także
+ `operator.admin`: użytkownicy bez uprawnień administratora mogą
+ usuwać/unieważniać/obracać tylko **własny** wpis urządzenia.
- `device.token.rotate` sprawdza także żądany zestaw zakresów operatora względem
- bieżących zakresów sesji wywołującego. Użytkownicy bez admina nie mogą obracać tokenu do
- szerszego zestawu zakresów operatora, niż już posiadają.
-- Niepowodzenia uwierzytelniania zawierają `error.details.code` oraz wskazówki odzyskiwania:
+ bieżących zakresów sesji wywołującego. Użytkownicy bez uprawnień administratora
+ nie mogą obrócić tokenu do szerszego zestawu zakresów operatora, niż już posiadają.
+- Błędy uwierzytelniania zawierają `error.details.code` oraz wskazówki odzyskiwania:
- `error.details.canRetryWithDeviceToken` (boolean)
- `error.details.recommendedNextStep` (`retry_with_device_token`, `update_auth_configuration`, `update_auth_credentials`, `wait_then_retry`, `review_auth_configuration`)
- Zachowanie klienta dla `AUTH_TOKEN_MISMATCH`:
- - Zaufani klienci mogą podjąć jedną ograniczoną próbę ponowienia z tokenem per urządzenie z pamięci podręcznej.
- - Jeśli to ponowienie się nie powiedzie, klienci powinni zatrzymać automatyczne pętle ponownego łączenia i wyświetlić operatorowi wskazówki dotyczące działania.
+ - Zaufani klienci mogą podjąć jedną ograniczoną próbę ponownego połączenia z
+ użyciem tokenu per urządzenie z pamięci podręcznej.
+ - Jeśli ta próba się nie powiedzie, klienci powinni zatrzymać automatyczne
+ pętle ponownego łączenia i pokazać operatorowi wskazówki dotyczące dalszych działań.
## Tożsamość urządzenia + parowanie
-- Węzły powinny zawierać stabilną tożsamość urządzenia (`device.id`) wyprowadzoną z
- odcisku palca pary kluczy.
-- Gateway wydaje tokeny dla każdego urządzenia + roli.
-- Zatwierdzenia parowania są wymagane dla nowych identyfikatorów urządzeń, chyba że włączono
- lokalne automatyczne zatwierdzanie.
-- Automatyczne zatwierdzanie parowania jest skoncentrowane na bezpośrednich lokalnych połączeniach local loopback.
-- OpenClaw ma także wąską ścieżkę samopołączenia backend/kontener-local dla
- zaufanych przepływów pomocniczych ze współdzielonym sekretem.
-- Połączenia tailnet lub LAN z tego samego hosta są nadal traktowane jako zdalne na potrzeby parowania i
- wymagają zatwierdzenia.
-- Wszyscy klienci WS muszą dołączać tożsamość `device` podczas `connect` (operator + node).
+- Węzły powinny dołączać stabilną tożsamość urządzenia (`device.id`) wyprowadzoną
+ z odcisku palca pary kluczy.
+- Bramy wydają tokeny dla każdego urządzenia + roli.
+- Zatwierdzenia parowania są wymagane dla nowych identyfikatorów urządzeń,
+ chyba że włączono lokalne automatyczne zatwierdzanie.
+- Automatyczne zatwierdzanie parowania jest skoncentrowane na bezpośrednich
+ lokalnych połączeniach loopback.
+- OpenClaw ma także wąską ścieżkę samopołączenia backend/container-local dla
+ zaufanych przepływów pomocniczych ze wspólnym sekretem.
+- Połączenia tailnet lub LAN z tego samego hosta są nadal traktowane jako zdalne
+ na potrzeby parowania i wymagają zatwierdzenia.
+- Wszyscy klienci WS muszą dołączać tożsamość `device` podczas `connect`
+ (`operator` + `node`).
Control UI może ją pominąć tylko w tych trybach:
- - `gateway.controlUi.allowInsecureAuth=true` dla zgodności z niezabezpieczonym HTTP tylko na localhost.
- - udane uwierzytelnianie operatora Control UI z `gateway.auth.mode: "trusted-proxy"`.
+ - `gateway.controlUi.allowInsecureAuth=true` dla zgodności z niezabezpieczonym HTTP tylko dla localhost.
+ - pomyślne uwierzytelnienie operatora Control UI przy `gateway.auth.mode: "trusted-proxy"`.
- `gateway.controlUi.dangerouslyDisableDeviceAuth=true` (tryb awaryjny, poważne obniżenie bezpieczeństwa).
-- Wszystkie połączenia muszą podpisywać nonce dostarczone przez serwer w `connect.challenge`.
+- Wszystkie połączenia muszą podpisywać `connect.challenge` nonce dostarczony przez serwer.
-### Diagnostyka migracji uwierzytelniania urządzenia
+### Diagnostyka migracji uwierzytelniania urządzeń
-Dla starszych klientów, którzy nadal używają zachowania podpisywania sprzed wyzwania, `connect` teraz zwraca
-kody szczegółów `DEVICE_AUTH_*` pod `error.details.code` ze stabilnym `error.details.reason`.
+Dla starszych klientów, które nadal używają zachowania podpisywania sprzed
+wprowadzenia challenge, `connect` zwraca teraz kody szczegółów `DEVICE_AUTH_*`
+w `error.details.code` wraz ze stabilnym `error.details.reason`.
-Typowe niepowodzenia migracji:
+Typowe błędy migracji:
| Komunikat | details.code | details.reason | Znaczenie |
| --------------------------- | -------------------------------- | ------------------------ | -------------------------------------------------- |
-| `device nonce required` | `DEVICE_AUTH_NONCE_REQUIRED` | `device-nonce-missing` | Klient pominął `device.nonce` (lub wysłał pusty). |
-| `device nonce mismatch` | `DEVICE_AUTH_NONCE_MISMATCH` | `device-nonce-mismatch` | Klient podpisał starym/błędnym nonce. |
-| `device signature invalid` | `DEVICE_AUTH_SIGNATURE_INVALID` | `device-signature` | Ładunek podpisu nie pasuje do ładunku v2. |
+| `device nonce required` | `DEVICE_AUTH_NONCE_REQUIRED` | `device-nonce-missing` | Klient pominął `device.nonce` (lub wysłał pustą wartość). |
+| `device nonce mismatch` | `DEVICE_AUTH_NONCE_MISMATCH` | `device-nonce-mismatch` | Klient podpisał dane nieaktualnym/błędnym nonce. |
+| `device signature invalid` | `DEVICE_AUTH_SIGNATURE_INVALID` | `device-signature` | Ładunek podpisu nie odpowiada ładunkowi v2. |
| `device signature expired` | `DEVICE_AUTH_SIGNATURE_EXPIRED` | `device-signature-stale` | Podpisany znacznik czasu jest poza dozwolonym odchyleniem. |
-| `device identity mismatch` | `DEVICE_AUTH_DEVICE_ID_MISMATCH` | `device-id-mismatch` | `device.id` nie pasuje do odcisku palca klucza publicznego. |
-| `device public key invalid` | `DEVICE_AUTH_PUBLIC_KEY_INVALID` | `device-public-key` | Format/kanonikalizacja klucza publicznego nie powiodły się. |
+| `device identity mismatch` | `DEVICE_AUTH_DEVICE_ID_MISMATCH` | `device-id-mismatch` | `device.id` nie odpowiada odciskowi palca klucza publicznego. |
+| `device public key invalid` | `DEVICE_AUTH_PUBLIC_KEY_INVALID` | `device-public-key` | Format/kanonikalizacja klucza publicznego nie powiodły się. |
Cel migracji:
- Zawsze czekaj na `connect.challenge`.
-- Podpisuj ładunek v2, który zawiera nonce serwera.
-- Wyślij ten sam nonce w `connect.params.device.nonce`.
-- Preferowany ładunek podpisu to `v3`, który wiąże `platform` i `deviceFamily`
+- Podpisuj ładunek v2 zawierający nonce serwera.
+- Wysyłaj ten sam nonce w `connect.params.device.nonce`.
+- Preferowanym ładunkiem podpisu jest `v3`, który wiąże `platform` i `deviceFamily`
oprócz pól device/client/role/scopes/token/nonce.
-- Starsze podpisy `v2` pozostają akceptowane ze względu na zgodność, ale przypinanie metadanych sparowanego urządzenia nadal kontroluje politykę poleceń przy ponownym połączeniu.
+- Starsze podpisy `v2` pozostają akceptowane dla zgodności, ale przypięcie
+ metadanych sparowanego urządzenia nadal kontroluje politykę poleceń przy
+ ponownym połączeniu.
## TLS + pinning
- TLS jest obsługiwany dla połączeń WS.
-- Klienci mogą opcjonalnie przypiąć odcisk palca certyfikatu gateway (zobacz konfigurację `gateway.tls`
- oraz `gateway.remote.tlsFingerprint` lub flagę CLI `--tls-fingerprint`).
+- Klienci mogą opcjonalnie przypinać odcisk palca certyfikatu bramy (zobacz
+ konfigurację `gateway.tls` oraz `gateway.remote.tlsFingerprint` lub flagę CLI
+ `--tls-fingerprint`).
## Zakres
-Ten protokół udostępnia **pełne API gateway** (status, kanały, modele, czat,
-agent, sesje, węzły, zatwierdzenia itd.). Dokładna powierzchnia jest zdefiniowana przez
-schematy TypeBox w `src/gateway/protocol/schema.ts`.
+Ten protokół udostępnia **pełne API bramy** (status, kanały, modele, chat,
+agent, sesje, węzły, zatwierdzenia itd.). Dokładna powierzchnia jest
+zdefiniowana przez schematy TypeBox w `src/gateway/protocol/schema.ts`.
diff --git a/docs/pl/help/testing.md b/docs/pl/help/testing.md
index e3a9e0cd9..cc141ae0a 100644
--- a/docs/pl/help/testing.md
+++ b/docs/pl/help/testing.md
@@ -1,29 +1,29 @@
---
read_when:
- Uruchamianie testów lokalnie lub w CI
- - Dodawanie regresji dla błędów modeli/providerów
- - Debugowanie zachowania gateway + agenta
-summary: 'Zestaw testowy: pakiety unit/e2e/live, uruchamianie w Dockerze i zakres poszczególnych testów'
+ - Dodawanie testów regresji dla błędów modeli/dostawców
+ - Debugowanie zachowania bramy i agenta
+summary: 'Zestaw testów: pakiety unit/e2e/live, uruchamianie w Dockerze oraz zakres każdego testu'
title: Testowanie
x-i18n:
- generated_at: "2026-04-09T01:31:02Z"
+ generated_at: "2026-04-10T09:44:36Z"
model: gpt-5.4
provider: openai
- source_hash: 01117f41d8b171a4f1da11ed78486ee700e70ae70af54eb6060c57baf64ab21b
+ source_hash: 21b78e59a5189f4e8e6e1b490d350f4735c0395da31d21fc5d10b825313026b4
source_path: help/testing.md
workflow: 15
---
# Testowanie
-OpenClaw ma trzy pakiety Vitest (unit/integration, e2e, live) oraz niewielki zestaw uruchomień w Dockerze.
+OpenClaw ma trzy pakiety Vitest (unit/integration, e2e, live) oraz niewielki zestaw runnerów Docker.
-Ten dokument jest przewodnikiem „jak testujemy”:
+Ten dokument to przewodnik „jak testujemy”:
-- Co obejmuje każdy pakiet testów (i czego celowo _nie_ obejmuje)
+- Co obejmuje każdy pakiet (i czego celowo _nie_ obejmuje)
- Jakie polecenia uruchamiać w typowych przepływach pracy (lokalnie, przed push, debugowanie)
-- Jak testy live wykrywają poświadczenia oraz wybierają modele/providery
-- Jak dodawać regresje dla rzeczywistych problemów modeli/providerów
+- Jak testy live wykrywają poświadczenia i wybierają modele/dostawców
+- Jak dodawać testy regresji dla rzeczywistych problemów z modelami/dostawcami
## Szybki start
@@ -32,230 +32,249 @@ Na co dzień:
- Pełna bramka (oczekiwana przed push): `pnpm build && pnpm check && pnpm test`
- Szybsze lokalne uruchomienie pełnego pakietu na wydajnej maszynie: `pnpm test:max`
- Bezpośrednia pętla watch Vitest: `pnpm test:watch`
-- Bezpośrednie wskazywanie pliku obsługuje teraz również ścieżki rozszerzeń/kanałów: `pnpm test extensions/discord/src/monitor/message-handler.preflight.test.ts`
+- Bezpośrednie targetowanie plików obsługuje teraz także ścieżki rozszerzeń/kanałów: `pnpm test extensions/discord/src/monitor/message-handler.preflight.test.ts`
+- Gdy iterujesz nad pojedynczym błędem, najpierw preferuj uruchomienia targetowane.
- Witryna QA oparta na Dockerze: `pnpm qa:lab:up`
+- Ścieżka QA oparta na Linuksowej maszynie wirtualnej: `pnpm openclaw qa suite --runner multipass --scenario channel-chat-baseline`
Gdy dotykasz testów lub chcesz mieć większą pewność:
- Bramka pokrycia: `pnpm test:coverage`
- Pakiet E2E: `pnpm test:e2e`
-Podczas debugowania rzeczywistych providerów/modeli (wymaga prawdziwych poświadczeń):
+Podczas debugowania rzeczywistych dostawców/modeli (wymaga prawdziwych poświadczeń):
-- Pakiet live (modele + sondy narzędzi/obrazów gateway): `pnpm test:live`
+- Pakiet live (modele + sondy narzędzi/obrazów bramy): `pnpm test:live`
- Ciche uruchomienie jednego pliku live: `pnpm test:live -- src/agents/models.profiles.live.test.ts`
Wskazówka: gdy potrzebujesz tylko jednego nieudanego przypadku, zawężaj testy live za pomocą zmiennych środowiskowych allowlist opisanych poniżej.
-## Pakiety testów (co uruchamia się gdzie)
+## Runnery specyficzne dla QA
-Najlepiej myśleć o pakietach jako o „rosnącym realizmie” (i rosnącej niestabilności/koszcie):
+Te polecenia są dostępne obok głównych pakietów testowych, gdy potrzebujesz realizmu qa-lab:
-### Unit / integration (domyślnie)
+- `pnpm openclaw qa suite`
+ - Uruchamia scenariusze QA oparte na repo bezpośrednio na hoście.
+- `pnpm openclaw qa suite --runner multipass`
+ - Uruchamia ten sam pakiet QA w jednorazowej Linuksowej maszynie wirtualnej Multipass.
+ - Zachowuje ten sam sposób wyboru scenariuszy co `qa suite` na hoście.
+ - Używa tych samych flag wyboru dostawców/modeli 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ę do konfiguracji dostawcy QA live oraz `CODEX_HOME`,
+ jeśli są obecne.
+ - Katalogi wyjściowe muszą pozostać pod katalogiem głównym repo, aby gość mógł zapisywać z powrotem przez zamontowany workspace.
+ - Zapisuje zwykły raport + podsumowanie QA oraz logi Multipass w
+ `.artifacts/qa-e2e/...`.
+- `pnpm qa:lab:up`
+ - Uruchamia witrynę QA opartą na Dockerze do pracy QA w stylu operatorskim.
+
+## Pakiety testowe (co uruchamia się gdzie)
+
+Myśl o pakietach jako o „rosnącym realizmie” (i rosnącej niestabilności/koszcie):
+
+### Unit / integration (domyślny)
- Polecenie: `pnpm test`
-- Konfiguracja: dziesięć sekwencyjnych uruchomień shardów (`vitest.full-*.config.ts`) na istniejących zakresowanych projektach Vitest
-- Pliki: podstawowe inwentarze unit w `src/**/*.test.ts`, `packages/**/*.test.ts`, `test/**/*.test.ts` oraz dozwolone testy node w `ui` objęte przez `vitest.unit.config.ts`
+- Konfiguracja: dziesięć sekwencyjnych uruchomień shardów (`vitest.full-*.config.ts`) na istniejących scope’owanych projektach Vitest
+- Pliki: inwentarze core/unit w `src/**/*.test.ts`, `packages/**/*.test.ts`, `test/**/*.test.ts` oraz dozwolone testy node w `ui` objęte przez `vitest.unit.config.ts`
- Zakres:
- - Czyste testy unit
- - Testy integracyjne in-process (auth gateway, routing, narzędzia, parsowanie, konfiguracja)
+ - Czyste testy jednostkowe
+ - Testy integracyjne w tym samym procesie (uwierzytelnianie bramy, routing, narzędzia, parsowanie, konfiguracja)
- Deterministyczne regresje dla znanych błędów
- Oczekiwania:
- - Uruchamiane w CI
- - Nie wymagają prawdziwych kluczy
- - Powinny być szybkie i stabilne
+ - Uruchamia się w CI
+ - Nie wymaga prawdziwych kluczy
+ - Powinien być szybki i stabilny
- Uwaga o projektach:
- - 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. To zmniejsza szczytowe RSS na obciążonych maszynach i zapobiega temu, by prace `auto-reply`/rozszerzeń zagłodziły 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 zakresowanych ścieżek, więc `pnpm test extensions/discord/src/monitor/message-handler.preflight.test.ts` unika kosztu uruchamiania pełnego projektu root.
- - `pnpm test:changed` rozwija zmienione ścieżki git do tych samych zakresowanych ścieżek, gdy diff dotyka tylko routowalnych plików źródłowych/testowych; edycje konfiguracji/ustawień nadal wracają do szerokiego ponownego uruchomienia root-project.
- - Wybrane testy `plugin-sdk` i `commands` są również kierowane przez dedykowane lekkie ścieżki, które pomijają `test/setup-openclaw-runtime.ts`; pliki stanowe / ciężkie runtime pozostają na istniejących ścieżkach.
- - Wybrane pliki pomocnicze źródeł `plugin-sdk` i `commands` również mapują uruchomienia trybu changed na jawne testy sąsiednie w tych lekkich ścieżkach, tak aby edycje helperów nie powodowały ponownego uruchamiania całego ciężkiego pakietu dla tego katalogu.
- - `auto-reply` ma teraz trzy dedykowane koszyki: helpery główne top-level, testy integracyjne top-level `reply.*` oraz poddrzewo `src/auto-reply/reply/**`. Dzięki temu najcięższa praca harnessu reply nie trafia do tanich testów status/chunk/token.
-- Uwaga o embedded runner:
+ - Nieukierunkowane `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. To zmniejsza szczytowe RSS na obciążonych maszynach i zapobiega temu, by praca `auto-reply`/rozszerzeń blokowała niezwiązane pakiety.
+ - `pnpm test --watch` nadal używa natywnego grafu projektów root `vitest.config.ts`, ponieważ wieloshardowa pętla watch nie jest praktyczna.
+ - `pnpm test`, `pnpm test:watch` oraz `pnpm test:perf:imports` kierują jawne cele plików/katalogów najpierw przez scope’owane ś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 scope’owanych ścieżek, gdy diff dotyczy wyłącznie routowalnych plików źródłowych/testowych; edycje konfiguracji/setup nadal cofają się do szerokiego ponownego uruchomienia projektu root.
+ - Wybrane testy `plugin-sdk` i `commands` są również kierowane przez dedykowane lekkie ścieżki, które pomijają `test/setup-openclaw-runtime.ts`; pliki ciężkie pod względem stanu/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 powodują ponownego uruchamiania pełnego ciężkiego pakietu dla tego katalogu.
+ - `auto-reply` ma teraz trzy dedykowane koszyki: helpery core najwyższego poziomu, integracyjne testy `reply.*` najwyższego poziomu oraz poddrzewo `src/auto-reply/reply/**`. Dzięki temu najcięższa praca harnessu reply nie trafia do tanich testów status/chunk/token.
+- Uwaga o wbudowanym 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 też w dobrej kondycji pakiety integracyjne embedded runner:
+ utrzymuj oba poziomy pokrycia.
+ - Dodawaj ukierunkowane testy regresji helperów dla czystych granic routingu/normalizacji.
+ - Utrzymuj też w dobrej kondycji zintegrowane pakiety embedded runner:
`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 sprawdzają, że zakresowane identyfikatory i zachowanie compaction nadal przepływają
- przez rzeczywiste ścieżki `run.ts` / `compact.ts`; testy samych helperów nie są
- wystarczającym zamiennikiem dla tych ścieżek integracyjnych.
+ - Te pakiety weryfikują, że scope’owane identyfikatory i zachowanie compaction nadal przepływają przez rzeczywiste ścieżki `run.ts` / `compact.ts`; same testy helperów nie są wystarczającym substytutem dla tych ścieżek integracyjnych.
- Uwaga o puli:
- Bazowa konfiguracja Vitest domyślnie używa teraz `threads`.
- Współdzielona konfiguracja Vitest ustawia też `isolate: false` i używa nieizolowanego runnera w projektach root, konfiguracjach e2e i live.
- - Główna ścieżka UI zachowuje ustawienia `jsdom` i optymalizator, ale teraz również działa na współdzielonym nieizolowanym runnerze.
+ - Główna ścieżka UI zachowuje ustawienia `jsdom` i optimizer, ale teraz również 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ć zachowanie ze standardowym V8.
-- Uwaga o szybkiej iteracji lokalnej:
- - `pnpm test:changed` kieruje przez zakresowane ścieżki, gdy zmienione ścieżki da się jednoznacznie przypisać do mniejszego pakietu.
- - `pnpm test:max` i `pnpm test:changed:max` zachowują to samo routowanie, tylko z wyższym limitem workerów.
- - Lokalna automatyczna skala workerów jest teraz celowo konserwatywna i również wycofuje się, gdy średnie obciążenie hosta jest już wysokie, więc wiele równoległych uruchomień Vitest domyślnie powoduje mniej szkód.
- - Bazowa konfiguracja Vitest oznacza projekty/pliki konfiguracyjne 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.
+ - Współdzielony launcher `scripts/run-vitest.mjs` domyślnie dodaje teraz także `--no-maglev` dla procesów potomnych Node Vitest, aby zmniejszyć narzut kompilacji V8 podczas dużych lokalnych uruchomień. Ustaw `OPENCLAW_VITEST_ENABLE_MAGLEV=1`, jeśli chcesz porównać zachowanie z domyślnym V8.
+- Uwaga o szybkiej lokalnej iteracji:
+ - `pnpm test:changed` kieruje przez scope’owane ścieżki, gdy zmienione ścieżki da się czysto zmapować do mniejszego pakietu.
+ - `pnpm test:max` i `pnpm test:changed:max` zachowują to samo zachowanie routingu, tylko z wyższym limitem workerów.
+ - Lokalne automatyczne skalowanie workerów jest teraz celowo konserwatywne i wycofuje się także wtedy, gdy średnie obciążenie hosta jest już wysokie, więc wiele równoczesnych uruchomień Vitest domyślnie powoduje mniej szkód.
+ - Bazowa konfiguracja Vitest oznacza projekty/pliki konfiguracyjne jako `forceRerunTriggers`, aby ponowne uruchomienia w trybie changed pozostawały poprawne, gdy zmienia się okablowanie 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 jedną jawną lokalizację cache do bezpośredniego profilowania.
- Uwaga o debugowaniu wydajności:
- - `pnpm test:perf:imports` włącza raportowanie czasu importu Vitest oraz wyjście 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ą root-project dla tego zatwierdzonego diffu i wypisuje wall time oraz macOS max RSS.
-- `pnpm test:perf:changed:bench -- --worktree` benchmarkuje bieżące brudne drzewo, 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 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.
+ - `pnpm test:perf:imports` włącza raportowanie czasu importu Vitest oraz wyjście z podziałem importów.
+ - `pnpm test:perf:imports:changed` zawęża ten sam widok profilowania do plików zmienionych względem `origin/main`.
+- `pnpm test:perf:changed:bench -- --ref ` porównuje routowane `test:changed` z natywną ścieżką projektu root dla tego zatwierdzonego diffu i wypisuje czas ścienny oraz maksymalne RSS na macOS.
+- `pnpm test:perf:changed:bench -- --worktree` benchmarkuje bieżące brudne drzewo, routują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 kosztów uruchomienia 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.
-### E2E (gateway smoke)
+### E2E (smoke bramy)
- Polecenie: `pnpm test:e2e`
- 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 workerów adaptacyjnych (CI: do 2, lokalnie: domyślnie 1).
+ - Używa `threads` Vitest z `isolate: false`, zgodnie z resztą repo.
+ - Używa adaptacyjnych workerów (CI: do 2, lokalnie: domyślnie 1).
- Domyślnie działa w trybie cichym, aby zmniejszyć narzut I/O konsoli.
- Przydatne nadpisania:
- `OPENCLAW_E2E_WORKERS=` aby wymusić liczbę workerów (maksymalnie 16).
- `OPENCLAW_E2E_VERBOSE=1` aby ponownie włączyć szczegółowe wyjście konsoli.
- Zakres:
- - Wieloinstancyjne zachowanie gateway end-to-end
+ - Zachowanie end-to-end bramy z wieloma instancjami
- Powierzchnie WebSocket/HTTP, parowanie węzłów i cięższy networking
- Oczekiwania:
- - Uruchamiane w CI (gdy są włączone w pipeline)
- - Nie wymagają prawdziwych kluczy
- - Mają więcej ruchomych części niż testy unit (mogą być wolniejsze)
+ - Uruchamia się w CI (gdy jest włączone w pipeline)
+ - Nie wymaga prawdziwych kluczy
+ - Ma więcej ruchomych części niż testy jednostkowe (może być wolniejszy)
### E2E: smoke backendu OpenShell
- Polecenie: `pnpm test:e2e:openshell`
- Plik: `test/openshell-sandbox.e2e.test.ts`
- Zakres:
- - Uruchamia izolowany gateway OpenShell na hoście za pomocą Dockera
+ - Uruchamia izolowaną bramę OpenShell na hoście przez Docker
- Tworzy sandbox z tymczasowego lokalnego Dockerfile
- - Testuje backend OpenShell w OpenClaw przez rzeczywiste `sandbox ssh-config` + wykonanie SSH
- - Weryfikuje zdalne kanoniczne zachowanie systemu plików przez most fs sandboxa
+ - Testuje backend OpenShell OpenClaw przez rzeczywiste `sandbox ssh-config` + wykonanie SSH
+ - Weryfikuje zdalnie kanoniczne zachowanie systemu plików przez most fs sandboxa
- Oczekiwania:
- - Tylko opt-in; nie jest częścią domyślnego uruchomienia `pnpm test:e2e`
- - Wymaga lokalnego CLI `openshell` oraz działającego demona Dockera
- - Używa izolowanych `HOME` / `XDG_CONFIG_HOME`, a następnie niszczy testowy gateway i sandbox
+ - Tylko opcjonalnie; 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 testową bramę i sandbox
- Przydatne nadpisania:
- - `OPENCLAW_E2E_OPENSHELL=1` aby włączyć test podczas ręcznego uruchamiania szerszego pakietu e2e
+ - `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 wrapper
-### Live (prawdziwi providerzy + prawdziwe modele)
+### Live (prawdziwi dostawcy + prawdziwe modele)
- Polecenie: `pnpm test:live`
- Konfiguracja: `vitest.live.config.ts`
- Pliki: `src/**/*.live.test.ts`
- Domyślnie: **włączone** przez `pnpm test:live` (ustawia `OPENCLAW_LIVE_TEST=1`)
- Zakres:
- - „Czy ten provider/model rzeczywiście działa _dzisiaj_ z prawdziwymi poświadczeniami?”
- - Wychwytywanie zmian formatów providerów, specyfiki wywoływania narzędzi, problemów z auth i zachowania limitów szybkości
+ - „Czy ten dostawca/model faktycznie działa _dzisiaj_ z prawdziwymi poświadczeniami?”
+ - Wychwytywanie zmian formatów dostawców, osobliwości wywoływania narzędzi, problemów z uwierzytelnianiem i zachowania limitów szybkości
- Oczekiwania:
- - Z założenia niestabilne w CI (prawdziwe sieci, rzeczywiste polityki providerów, limity, awarie)
- - Kosztują pieniądze / zużywają limity
+ - 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”
-- Uruchomienia live pobierają `~/.profile`, aby uzupełnić brakujące klucze API.
-- Domyślnie uruchomienia live nadal izolują `HOME` i kopiują materiały konfiguracyjne/auth do tymczasowego katalogu domowego testów, aby fixtury 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 prawdziwego katalogu domowego.
-- `pnpm test:live` działa teraz domyślnie w cichszym trybie: zachowuje wyjście postępu `[live] ...`, ale ukrywa dodatkowy komunikat o `~/.profile` i wycisza logi bootstrap gateway / hałas Bonjour. Ustaw `OPENCLAW_LIVE_TEST_QUIET=0`, jeśli chcesz przywrócić pełne logi uruchomieniowe.
-- Rotacja kluczy API (specyficzna dla providera): ustaw `*_API_KEYS` w formacie oddzielanym 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 po odpowiedziach rate limit.
+- Uruchomienia live pobierają `~/.profile`, aby uzyskać brakujące klucze API.
+- Domyślnie uruchomienia live nadal izolują `HOME` i kopiują materiały konfiguracji/uwierzytelniania do tymczasowego home testowego, aby fixture’y unit nie mogły modyfikować twojego prawdziwego `~/.openclaw`.
+- Ustaw `OPENCLAW_LIVE_USE_REAL_HOME=1` tylko wtedy, gdy celowo potrzebujesz, aby testy live używały twojego prawdziwego katalogu domowego.
+- `pnpm test:live` domyślnie używa teraz cichszego trybu: zachowuje wyjście postępu `[live] ...`, ale ukrywa dodatkową informację o `~/.profile` i wycisza logi bootstrapu bramy/hałas Bonjour. Ustaw `OPENCLAW_LIVE_TEST_QUIET=0`, jeśli chcesz z powrotem pełne logi startowe.
+- Rotacja kluczy API (specyficzna dla dostawcy): ustaw `*_API_KEYS` w formacie przecinek/średnik albo `*_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 o limicie szybkości.
- Wyjście postępu/heartbeat:
- - Pakiety live emitują teraz linie postępu na stderr, więc długie wywołania provideró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 provider/gateway były natychmiast streamowane podczas uruchomień live.
- - Czas heartbeat dla bezpośrednich modeli regulujesz przez `OPENCLAW_LIVE_HEARTBEAT_MS`.
- - Czas heartbeat dla gateway/probe regulujesz przez `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/bramy były natychmiast strumieniowane podczas uruchomień live.
+ - Strojenie heartbeatów bezpośrednich modeli przez `OPENCLAW_LIVE_HEARTBEAT_MS`.
+ - Strojenie heartbeatów bramy/sond przez `OPENCLAW_LIVE_GATEWAY_HEARTBEAT_MS`.
## Który pakiet powinienem uruchomić?
-Skorzystaj z tej tabeli decyzyjnej:
+Użyj tej tabeli decyzyjnej:
-- Edycja logiki/testów: uruchom `pnpm test` (oraz `pnpm test:coverage`, jeśli zmieniłeś dużo)
-- Zmiany w sieci gateway / protokole WS / parowaniu: dodaj `pnpm test:e2e`
-- Debugowanie „mój bot nie działa” / błędów specyficznych dla providera / wywoływania narzędzi: uruchom zawężone `pnpm test:live`
+- Edytujesz logikę/testy: uruchom `pnpm test` (oraz `pnpm test:coverage`, jeśli zmieniłeś dużo)
+- Dotykasz networkingu bramy / protokołu WS / parowania: dodaj `pnpm test:e2e`
+- Debugujesz „mój bot nie działa” / awarie specyficzne dla dostawcy / wywoływanie narzędzi: uruchom zawężone `pnpm test:live`
## Live: przegląd możliwości węzła 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 podłączony węzeł Android i potwierdzić zachowanie kontraktu poleceń.
+- Cel: wywołać **każde polecenie aktualnie anonsowane** przez podłączony węzeł Android i potwierdzić zachowanie kontraktu poleceń.
- Zakres:
- - Ustawienia wstępne/ręczne (pakiet nie instaluje, nie uruchamia ani nie paruje aplikacji).
- - Walidacja `node.invoke` gateway polecenie po poleceniu dla wybranego węzła Android.
-- Wymagane przygotowanie:
- - Aplikacja Android już połączona i sparowana z gateway.
- - Aplikacja utrzymywana na pierwszym planie.
- - Uprawnienia/zgody na przechwytywanie przyznane dla możliwości, które mają przejść.
+ - Wstępnie przygotowana/ręczna konfiguracja (pakiet nie instaluje, nie uruchamia ani nie paruje aplikacji).
+ - Walidacja `node.invoke` bramy polecenie po poleceniu dla wybranego węzła Android.
+- Wymagana wcześniejsza konfiguracja:
+ - Aplikacja Android jest już połączona i sparowana z bramą.
+ - Aplikacja pozostaje na pierwszym planie.
+ - Uprawnienia/zgody na przechwytywanie są przyznane dla możliwości, które mają przejść test.
- 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: [Android App](/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 łatwiej izolować awarie:
+Testy live są podzielone na dwie warstwy, aby można było izolować awarie:
-- „Direct model” mówi nam, czy provider/model w ogóle potrafi odpowiedzieć przy danym kluczu.
-- „Gateway smoke” mówi nam, czy działa pełny pipeline gateway+agent dla tego modelu (sesje, historia, narzędzia, polityka sandboxa itp.).
+- „Direct model” mówi nam, czy dostawca/model w ogóle potrafi odpowiedzieć przy użyciu danego klucza.
+- „Gateway smoke” mówi nam, czy działa pełny pipeline brama+agent dla tego modelu (sesje, historia, narzędzia, polityka sandboxa itd.).
-### Warstwa 1: Bezpośrednie completion modelu (bez gateway)
+### Warstwa 1: Bezpośrednie uzupełnienie modelu (bez bramy)
- Test: `src/agents/models.profiles.live.test.ts`
- Cel:
- - Wyliczyć wykryte modele
- - Użyć `getApiKeyForModel` do wybrania modeli, do których masz poświadczenia
- - Wykonać małe completion dla każdego modelu (oraz ukierunkowane regresje tam, gdzie potrzeba)
+ - Enumerować wykryte modele
+ - Używać `getApiKeyForModel` do wybierania modeli, do których masz poświadczenia
+ - Uruchamiać małe completion dla każdego modelu (oraz ukierunkowane regresje tam, gdzie to potrzebne)
- Jak włączyć:
- `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 faktycznie uruchomić ten pakiet; w przeciwnym razie zostanie pominięty, aby `pnpm test:live` pozostawało skupione na gateway smoke
+- 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` pozostało skupione na gateway smoke
- 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 allowlisty
+ - `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` to alias dla nowoczesnej allowlisty
- albo `OPENCLAW_LIVE_MODELS="openai/gpt-5.4,anthropic/claude-opus-4-6,..."` (allowlista 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 lub liczbę dodatnią dla mniejszego limitu.
-- Jak wybierać providery:
+ - Przebiegi modern/all domyślnie używają dobranego limitu o wysokim sygnale; ustaw `OPENCLAW_LIVE_MAX_MODELS=0` dla wyczerpującego przebiegu modern albo wartość dodatnią dla mniejszego limitu.
+- Jak wybierać dostawców:
- `OPENCLAW_LIVE_PROVIDERS="google,google-antigravity,google-gemini-cli"` (allowlista rozdzielana przecinkami)
- Skąd pochodzą klucze:
- - Domyślnie: ze store profili i fallbacków env
- - Ustaw `OPENCLAW_LIVE_REQUIRE_PROFILE_KEYS=1`, aby wymusić wyłącznie **store profili**
+ - Domyślnie: magazyn profili i fallbacki env
+ - Ustaw `OPENCLAW_LIVE_REQUIRE_PROFILE_KEYS=1`, aby wymusić wyłącznie **magazyn profili**
- Dlaczego to istnieje:
- - Oddziela „API providera jest zepsute / klucz jest nieprawidłowy” od „pipeline agenta gateway jest zepsuty”
- - Zawiera małe, izolowane regresje (przykład: OpenAI Responses/Codex Responses reasoning replay + przepływy tool-call)
+ - Oddziela „API dostawcy jest zepsute / klucz jest nieprawidłowy” od „pipeline agenta bramy jest zepsuty”
+ - Zawiera małe, odizolowane regresje (przykład: przepływy reasoning replay + tool-call dla OpenAI Responses/Codex Responses)
-### Warstwa 2: Gateway + smoke agenta deweloperskiego (to, co naprawdę robi "@openclaw")
+### Warstwa 2: Gateway + smoke agenta dev (to, co faktycznie robi "@openclaw")
- Test: `src/gateway/gateway-models.profiles.live.test.ts`
- Cel:
- - Uruchomić in-process gateway
- - Utworzyć/załatać sesję `agent:dev:*` (nadpisanie modelu dla każdego uruchomienia)
+ - Uruchomić bramę w procesie
+ - Utworzyć/spatchować sesję `agent:dev:*` (nadpisanie modelu dla każdego uruchomienia)
- Iterować po modelach-z-kluczami i potwierdzać:
- „sensowną” odpowiedź (bez narzędzi)
- - że działa prawdziwe wywołanie narzędzia (`read` probe)
- - opcjonalne dodatkowe sondy narzędzi (`exec+read` probe)
- - że ścieżki regresji OpenAI (samo tool-call → follow-up) nadal działają
-- Szczegóły sond (aby szybciej wyjaśniać awarie):
- - sonda `read`: test zapisuje plik nonce w workspace i prosi agenta, aby go `read` oraz odesłał nonce.
- - sonda `exec+read`: test prosi agenta, aby zapisał nonce do pliku tymczasowego przez `exec`, a następnie odczytał go przez `read`.
- - sonda obrazu: test dołącza wygenerowany PNG (kot + losowy 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 działa prawdziwe wywołanie narzędzia (sonda read)
+ - opcjonalne dodatkowe sondy narzędzi (sonda exec+read)
+ - że ścieżki regresji OpenAI (tylko tool-call → follow-up) nadal działają
+- Szczegóły sond (aby dało się szybko wyjaśniać awarie):
+ - sonda `read`: test zapisuje plik z nonce w workspace i prosi agenta o jego `read` oraz odesłanie nonce.
+ - sonda `exec+read`: test prosi agenta o zapisanie nonce przez `exec` do pliku tymczasowego, a następnie o jego odczytanie przez `read`.
+ - sonda obrazu: test dołącza wygenerowany PNG (kot + zrandomizowany kod) i oczekuje, że model zwróci `cat `.
+ - Odniesienie do implementacji: `src/gateway/gateway-models.profiles.live.test.ts` oraz `src/gateway/live-image-probe.ts`.
- Jak włączyć:
- `pnpm test:live` (lub `OPENCLAW_LIVE_TEST=1`, jeśli wywołujesz Vitest bezpośrednio)
- Jak wybierać modele:
- 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ć
- - 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 lub liczbę dodatnią dla mniejszego limitu.
-- Jak wybierać providery (aby uniknąć „wszystkiego z OpenRouter”):
+ - `OPENCLAW_LIVE_GATEWAY_MODELS=all` to alias dla nowoczesnej allowlisty
+ - Lub ustaw `OPENCLAW_LIVE_GATEWAY_MODELS="provider/model"` (albo listę rozdzielaną przecinkami), aby zawęzić
+ - Przebiegi modern/all dla bramy domyślnie używają dobranego limitu o wysokim sygnale; ustaw `OPENCLAW_LIVE_GATEWAY_MAX_MODELS=0` dla wyczerpującego przebiegu modern albo wartość dodatnią 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 + obrazu są zawsze włączone w tym teście live:
- - sonda `read` + sonda `exec+read` (stress test narzędzi)
- - sonda obrazu działa, gdy model ogłasza obsługę wejścia obrazowego
- - Przepływ (wysoki poziom):
+- 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 anonsuje obsługę wejścia obrazowego
+ - Przepływ (na wysokim poziomie):
- Test generuje mały PNG z „CAT” + losowym kodem (`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`)
- - Embedded agent przekazuje do modelu multimodalną wiadomość użytkownika
- - Asercja: odpowiedź zawiera `cat` + kod (tolerancja OCR: dopuszczalne drobne pomyłki)
+ - Brama parsuje załączniki do `images[]` (`src/gateway/server-methods/agent.ts` + `src/gateway/chat-attachments.ts`)
+ - Wbudowany agent przekazuje do modelu multimodalną wiadomość użytkownika
+ - Potwierdzenie: odpowiedź zawiera `cat` + kod (tolerancja OCR: drobne błędy są dozwolone)
-Wskazówka: aby zobaczyć, co możesz testować na swojej maszynie (oraz dokładne identyfikatory `provider/model`), uruchom:
+Wskazówka: aby zobaczyć, co można testować na twojej maszynie (oraz dokładne identyfikatory `provider/model`), uruchom:
```bash
openclaw models list
@@ -266,22 +285,22 @@ openclaw models list --json
- Test: `src/gateway/gateway-cli-backend.live.test.ts`
- Cel: zweryfikować pipeline Gateway + agent przy użyciu lokalnego backendu CLI, bez dotykania domyślnej konfiguracji.
-- Domyślne ustawienia smoke specyficzne dla backendu znajdują się w definicji `cli-backend.ts` należącej do odpowiedniego rozszerzenia.
-- Włączenie:
+- Domyślne ustawienia smoke specyficzne dla backendu znajdują się w definicji `cli-backend.ts` należącej do danego rozszerzenia.
+- 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 provider/model: `claude-cli/claude-sonnet-4-6`
- - Zachowanie polecenia/argumentów/obrazów pochodzi z metadanych odpowiedniego pluginu backendu CLI.
+- Domyślne wartości:
+ - Domyślny dostawca/model: `claude-cli/claude-sonnet-4-6`
+ - Zachowanie poleceń/argumentów/obrazu pochodzi z metadanych pluginu backendu CLI, do którego należy.
- 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ć prawdziwy załącznik obrazu (ścieżki są wstrzykiwane do promptu).
- - `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 kontrolować sposób 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 wznowienia.
- - `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ć ją, gdy wybrany model obsługuje cel przełączenia).
+ - `OPENCLAW_LIVE_CLI_BACKEND_IMAGE_PROBE=1`, aby wysłać prawdziwy załącznik obrazu (ścieżki są wstrzykiwane do promptu).
+ - `OPENCLAW_LIVE_CLI_BACKEND_IMAGE_ARG="--image"`, aby przekazywać ścieżki plików obrazów jako argumenty CLI zamiast wstrzykiwania do promptu.
+ - `OPENCLAW_LIVE_CLI_BACKEND_IMAGE_MODE="repeat"` (lub `"list"`), aby kontrolować sposób przekazywania argumentów obrazu, gdy ustawiono `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:
@@ -297,7 +316,7 @@ Recepta Docker:
pnpm test:docker:live-cli-backend
```
-Recepty Docker dla pojedynczego providera:
+Recepty Docker dla pojedynczego dostawcy:
```bash
pnpm test:docker:live-cli-backend:claude
@@ -307,27 +326,27 @@ pnpm test:docker:live-cli-backend:gemini
Uwagi:
-- Runner Dockera znajduje się w `scripts/test-live-cli-backend-docker.sh`.
+- Runner Docker znajduje się w `scripts/test-live-cli-backend-docker.sh`.
- Uruchamia smoke live backendu CLI wewnątrz obrazu Docker repo jako nieuprzywilejowany użytkownik `node`.
-- Rozwiązuje metadane smoke CLI z odpowiedniego rozszerzenia, a następnie instaluje odpowiedni pakiet Linux CLI (`@anthropic-ai/claude-code`, `@openai/codex` lub `@google/gemini-cli`) do zapisywalnego prefiksu cache w `OPENCLAW_DOCKER_CLI_TOOLS_DIR` (domyślnie: `~/.cache/openclaw/docker-cli-tools`).
-- 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 łata sesję z Sonnet do Opus i sprawdza, że wznowiona sesja nadal pamięta wcześniejszą notatkę.
+- Rozwiązuje metadane smoke CLI z rozszerzenia, do którego należą, a następnie instaluje pasujący linuksowy pakiet CLI (`@anthropic-ai/claude-code`, `@openai/codex` lub `@google/gemini-cli`) do keszowanego zapisywalnego prefiksu w `OPENCLAW_DOCKER_CLI_TOOLS_DIR` (domyślnie: `~/.cache/openclaw/docker-cli-tools`).
+- Smoke live backendu CLI testuje teraz ten sam pełny 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 bramy.
+- Domyślny smoke Claude dodatkowo patchuje sesję z Sonnet do Opus i weryfikuje, że wznowiona sesja nadal pamięta wcześniejszą notatkę.
-## Live: smoke ACP bind (`/acp spawn ... --bind here`)
+## Live: smoke bind ACP (`/acp spawn ... --bind here`)
- Test: `src/gateway/gateway-acp-bind.live.test.ts`
-- Cel: zweryfikować rzeczywisty przepływ conversation-bind ACP z aktywnym agentem ACP:
+- Cel: zweryfikować rzeczywisty przepływ conversation-bind ACP z live 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:
+ - związać syntetyczną rozmowę kanału wiadomości na miejscu
+ - wysłać zwykły follow-up w tej samej rozmowie
+ - zweryfikować, że follow-up trafia do transkryptu związanej sesji ACP
+- Włączanie:
- `pnpm test:live src/gateway/gateway-acp-bind.live.test.ts`
- `OPENCLAW_LIVE_ACP_BIND=1`
-- Domyślne ustawienia:
+- Domyślne wartości:
- Agenci ACP w Dockerze: `claude,codex,gemini`
- Agent ACP dla bezpośredniego `pnpm test:live ...`: `claude`
- - Syntetyczny kanał: kontekst konwersacji w stylu DM Slacka
+ - Syntetyczny kanał: kontekst rozmowy w stylu Slack DM
- Backend ACP: `acpx`
- Nadpisania:
- `OPENCLAW_LIVE_ACP_BIND_AGENT=claude`
@@ -336,7 +355,7 @@ 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 gateway `chat.send` z polami synthetic originating-route tylko dla administratora, aby testy mogły dołączać kontekst kanału wiadomości bez udawania dostarczenia na zewnątrz.
+ - Ta ścieżka używa powierzchni `chat.send` bramy z syntetycznymi polami originating-route tylko dla administratora, dzięki czemu testy mogą 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 pluginu `acpx` dla wybranego agenta harness ACP.
Przykład:
@@ -361,49 +380,49 @@ pnpm test:docker:live-acp-bind:codex
pnpm test:docker:live-acp-bind:gemini
```
-Uwagi dotyczące Dockera:
+Uwagi Docker:
-- Runner Dockera znajduje się w `scripts/test-live-acp-bind-docker.sh`.
-- Domyślnie uruchamia smoke ACP bind kolejno dla wszystkich obsługiwanych agentów live CLI: `claude`, `codex`, a następnie `gemini`.
+- Runner Docker znajduje się w `scripts/test-live-acp-bind-docker.sh`.
+- Domyślnie uruchamia smoke bind ACP dla wszystkich obsługiwanych live agentów CLI po kolei: `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 odpowiednie materiały auth CLI w kontenerze, instaluje `acpx` do zapisywalnego prefiksu npm, a następnie instaluje wymagane 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` zachował zmienne env providera z pobranego profilu dostępne dla potomnego harnessu CLI.
+- Pobiera `~/.profile`, przygotowuje pasujące materiały uwierzytelniania CLI w kontenerze, 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` zachował zmienne env dostawcy z pobranego profilu dostępne dla podrzędnego CLI harnessu.
### Zalecane recepty live
-Wąskie, jawne allowlisty są najszybsze i najmniej podatne na błędy:
+Wąskie, jawne allowlisty są najszybsze i najmniej podatne na niestabilność:
-- Pojedynczy model, direct (bez gateway):
+- Pojedynczy model, bezpośrednio (bez bramy):
- `OPENCLAW_LIVE_MODELS="openai/gpt-5.4" pnpm test:live src/agents/models.profiles.live.test.ts`
- Pojedynczy model, gateway smoke:
- `OPENCLAW_LIVE_GATEWAY_MODELS="openai/gpt-5.4" pnpm test:live src/gateway/gateway-models.profiles.live.test.ts`
-- Wywoływanie narzędzi u kilku providerów:
+- 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`
-- Skupienie na Google (klucz API Gemini + Antigravity):
+- Fokus 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`
Uwagi:
-- `google/...` używa API Gemini (klucz API).
+- `google/...` używa interfejsu Gemini API (klucz API).
- `google-antigravity/...` używa mostu OAuth Antigravity (endpoint agenta w stylu Cloud Code Assist).
-- `google-gemini-cli/...` używa lokalnego Gemini CLI na twojej maszynie (osobne auth + specyfika narzędzi).
+- `google-gemini-cli/...` używa lokalnego CLI Gemini na twojej maszynie (osobne uwierzytelnianie + osobliwości narzędzi).
- Gemini API vs Gemini CLI:
- - API: OpenClaw wywołuje hostowane API Gemini Google przez HTTP (auth kluczem API / profilem); to właśnie większość użytkowników ma na myśli, mówiąc „Gemini”.
- - CLI: OpenClaw wykonuje lokalny binarny plik `gemini`; ma własne auth i może zachowywać się inaczej (streaming/obsługa narzędzi/rozjazd wersji).
+ - API: OpenClaw wywołuje hostowane Gemini API Google przez HTTP (uwierzytelnianie przez klucz API / profil); 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).
## 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 opcjonalne), ale są to **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 stale działać:
+To jest uruchomienie „wspólnych modeli”, które oczekujemy utrzymać w działaniu:
-- OpenAI (nie-Codex): `openai/gpt-5.4` (opcjonalnie: `openai/gpt-5.4-mini`)
+- 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` oraz `google/gemini-3-flash-preview` (unikaj starszych modeli Gemini 2.x)
@@ -414,9 +433,9 @@ To jest uruchomienie „typowych modeli”, które powinno stale działać:
Uruchom gateway smoke 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`
-### Bazowe: wywoływanie narzędzi (Read + opcjonalnie Exec)
+### Baseline: wywoływanie narzędzi (Read + opcjonalnie Exec)
-Wybierz co najmniej jeden model z każdej rodziny providerów:
+Wybierz co najmniej jeden model z każdej rodziny dostawców:
- OpenAI: `openai/gpt-5.4` (lub `openai/gpt-5.4-mini`)
- Anthropic: `anthropic/claude-opus-4-6` (lub `anthropic/claude-sonnet-4-6`)
@@ -424,81 +443,81 @@ Wybierz co najmniej jeden model z każdej rodziny providerów:
- Z.AI (GLM): `zai/glm-4.7`
- MiniMax: `minimax/MiniMax-M2.7`
-Opcjonalne dodatkowe pokrycie (warto mieć):
+Opcjonalne dodatkowe pokrycie (mile widziane):
- xAI: `xai/grok-4` (lub najnowszy dostępny)
-- Mistral: `mistral/`… (wybierz jeden model z obsługą narzędzi, 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 przynajmniej jeden model obsługujący obrazy w `OPENCLAW_LIVE_GATEWAY_MODELS` (Claude/Gemini/warianty OpenAI z obsługą vision itd.), aby przetestować 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 bramy
Jeśli masz włączone klucze, obsługujemy też testowanie przez:
-- 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 (auth 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+obrazu)
+- OpenCode: `opencode/...` dla Zen oraz `opencode-go/...` dla Go (uwierzytelnianie przez `OPENCODE_API_KEY` / `OPENCODE_ZEN_API_KEY`)
-Więcej providerów, których możesz dodać do macierzy live (jeśli masz poświadczenia/konfigurację):
+Więcej dostawców, których możesz uwzględnić 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` (własne endpointy): `minimax` (cloud/API), plus dowolny proxy zgodny z OpenAI/Anthropic (LM Studio, vLLM, LiteLLM itd.)
+- Przez `models.providers` (niestandardowe endpointy): `minimax` (cloud/API) oraz dowolny proxy zgodny z OpenAI/Anthropic (LM Studio, vLLM, LiteLLM itd.)
-Wskazówka: nie próbuj na sztywno wpisywać „wszystkich modeli” w dokumentacji. Autorytatywną listą jest to, co zwraca `discoverModels(...)` na twojej maszynie + jakie klucze są dostępne.
+Wskazówka: nie próbuj na sztywno wpisywać w dokumentacji „wszystkich modeli”. Autorytatywną listą jest to, co zwraca `discoverModels(...)` na twojej maszynie + jakie klucze są dostępne.
## Poświadczenia (nigdy nie commituj)
-Testy live wykrywają poświadczenia tak samo jak CLI. W praktyce oznacza to:
+Testy live wykrywają poświadczenia w taki sam sposób, jak robi to CLI. Praktyczne konsekwencje:
-- 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 „no creds”, debuguj to tak samo, jak debugowałbyś `openclaw models list` / wybór modelu.
-- Profile auth per agent: `~/.openclaw/agents//agent/auth-profiles.json` (to właśnie oznaczają „profile keys” w testach live)
+- Profile uwierzytelniania 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 live home, jeśli istnieje, ale nie jest głównym store kluczy profili)
-- Lokalne uruchomienia live domyślnie kopiują aktywną konfigurację, pliki `auth-profiles.json` per agent, starsze `credentials/` oraz obsługiwane zewnętrzne katalogi auth CLI do tymczasowego katalogu domowego testów; przygotowane katalogi live home pomijają `workspace/` i `sandboxes/`, a nadpisania ścieżek `agents.*.workspace` / `agentDir` są usuwane, aby sondy nie działały na twoim rzeczywistym workspace hosta.
+- Katalog stanu legacy: `~/.openclaw/credentials/` (kopiowany do przygotowanego home 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, legacy `credentials/` oraz obsługiwane zewnętrzne katalogi uwierzytelniania CLI do tymczasowego home testowego; przygotowane home live pomijają `workspace/` i `sandboxes/`, a nadpisania ścieżek `agents.*.workspace` / `agentDir` są usuwane, aby sondy nie dotykały twojego rzeczywistego workspace hosta.
-Jeśli chcesz polegać na kluczach env (np. wyeksportowanych w `~/.profile`), uruchamiaj testy lokalne po `source ~/.profile` albo użyj poniższych runnerów Docker (mogą zamontować `~/.profile` do kontenera).
+Jeśli chcesz polegać na kluczach env (np. wyeksportowanych w `~/.profile`), uruchamiaj lokalne testy po `source ~/.profile` albo użyj poniższych runnerów Docker (mogą zamontować `~/.profile` do kontenera).
## Deepgram live (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
- 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
- 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:
- - Testuje wbudowane ścieżki comfy dla obrazów, wideo i `music_generate`
+ - Testuje wbudowane ścieżki comfy dla obrazu, wideo i `music_generate`
- 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 pluginu
+ - Przydatne po zmianach w przesyłaniu workflow comfy, odpytywaniu, pobieraniu lub rejestracji pluginów
-## Live generowania obrazów
+## Image generation live
- 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 providera generowania obrazów
- - Ładuje brakujące zmienne env providera z twojego login shell (`~/.profile`) przed wykonaniem sond
- - Domyślnie używa aktywnych/env kluczy API przed zapisanymi profilami auth, aby stare klucze testowe w `auth-profiles.json` nie maskowały rzeczywistych poświadczeń shell
- - Pomija providerów bez użytecznego auth/profilu/modelu
+ - Enumeruje każdy zarejestrowany plugin dostawcy generowania obrazów
+ - Przed sondowaniem ładuje brakujące zmienne env dostawców z twojej powłoki logowania (`~/.profile`)
+ - Domyślnie używa kluczy API live/env przed zapisanymi profilami auth, aby nieaktualne testowe klucze w `auth-profiles.json` nie maskowały rzeczywistych poświadczeń z powłoki
+ - Pomija dostawców bez użytecznego auth/profilu/modelu
- Uruchamia standardowe warianty generowania obrazów przez współdzieloną możliwość runtime:
- `google:flash-generate`
- `google:pro-generate`
- `google:pro-edit`
- `openai:default-generate`
-- Aktualnie objęci wbudowani providerzy:
+- Obecnie objęci wbudowani dostawcy:
- `openai`
- `google`
- Opcjonalne zawężanie:
@@ -506,203 +525,203 @@ Jeśli chcesz polegać na kluczach env (np. wyeksportowanych w `~/.profile`), ur
- `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 auth:
- - `OPENCLAW_LIVE_REQUIRE_PROFILE_KEYS=1` aby wymusić auth ze store profili i ignorować nadpisania tylko-env
+ - `OPENCLAW_LIVE_REQUIRE_PROFILE_KEYS=1`, aby wymusić auth z magazynu profili i ignorować nadpisania tylko-env
-## Live generowania muzyki
+## Music generation live
- 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:
- - Testuje współdzieloną wbudowaną ścieżkę providera generowania muzyki
+ - Testuje współdzieloną ścieżkę wbudowanych dostawców generowania muzyki
- Obecnie obejmuje Google i MiniMax
- - Ładuje zmienne env providera z twojego login shell (`~/.profile`) przed wykonaniem sond
- - Domyślnie używa aktywnych/env kluczy API przed zapisanymi profilami auth, aby stare klucze testowe w `auth-profiles.json` nie maskowały rzeczywistych poświadczeń shell
- - Pomija providerów bez użytecznego auth/profilu/modelu
+ - Przed sondowaniem ładuje zmienne env dostawców z twojej powłoki logowania (`~/.profile`)
+ - Domyślnie używa kluczy API live/env przed zapisanymi profilami auth, aby nieaktualne testowe klucze w `auth-profiles.json` nie maskowały rzeczywistych poświadczeń z powłoki
+ - Pomija dostawców bez użytecznego auth/profilu/modelu
- Uruchamia oba zadeklarowane tryby runtime, gdy są dostępne:
- - `generate` z wejściem opartym wyłącznie na prompt
- - `edit`, gdy provider deklaruje `capabilities.edit.enabled`
+ - `generate` z wejściem zawierającym tylko prompt
+ - `edit`, gdy dostawca deklaruje `capabilities.edit.enabled`
- Obecne pokrycie współdzielonej ścieżki:
- `google`: `generate`, `edit`
- `minimax`: `generate`
- - `comfy`: osobny plik Comfy live, nie ten współdzielony przegląd
+ - `comfy`: osobny plik live Comfy, nie ten współdzielony przebieg
- Opcjonalne zawężanie:
- `OPENCLAW_LIVE_MUSIC_GENERATION_PROVIDERS="google,minimax"`
- `OPENCLAW_LIVE_MUSIC_GENERATION_MODELS="google/lyria-3-clip-preview,minimax/music-2.5+"`
- Opcjonalne zachowanie auth:
- - `OPENCLAW_LIVE_REQUIRE_PROFILE_KEYS=1` aby wymusić auth ze store profili i ignorować nadpisania tylko-env
+ - `OPENCLAW_LIVE_REQUIRE_PROFILE_KEYS=1`, aby wymusić auth z magazynu profili i ignorować nadpisania tylko-env
-## Live generowania wideo
+## Video generation live
- 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:
- - Testuje współdzieloną wbudowaną ścieżkę providera generowania wideo
- - Ładuje zmienne env providera z twojego login shell (`~/.profile`) przed wykonaniem sond
- - Domyślnie używa aktywnych/env kluczy API przed zapisanymi profilami auth, aby stare klucze testowe w `auth-profiles.json` nie maskowały rzeczywistych poświadczeń shell
- - Pomija providerów bez użytecznego auth/profilu/modelu
+ - Testuje współdzieloną ścieżkę wbudowanych dostawców generowania wideo
+ - Przed sondowaniem ładuje zmienne env dostawców z twojej powłoki logowania (`~/.profile`)
+ - Domyślnie używa kluczy API live/env przed zapisanymi profilami auth, aby nieaktualne testowe klucze w `auth-profiles.json` nie maskowały rzeczywistych poświadczeń z powłoki
+ - Pomija dostawców bez użytecznego auth/profilu/modelu
- Uruchamia oba zadeklarowane tryby runtime, gdy są dostępne:
- - `generate` z wejściem opartym wyłącznie na prompt
- - `imageToVideo`, gdy provider deklaruje `capabilities.imageToVideo.enabled` i wybrany provider/model akceptuje lokalne wejście obrazu oparte na buforze we współdzielonym przeglądzie
- - `videoToVideo`, gdy provider deklaruje `capabilities.videoToVideo.enabled` i wybrany provider/model akceptuje lokalne wejście wideo oparte na buforze we współdzielonym przeglądzie
- - Aktualnie zadeklarowani, ale pomijani providerzy `imageToVideo` we współdzielonym przeglądzie:
- - `vydra`, ponieważ wbudowane `veo3` jest tylko tekstowe, a wbudowany `kling` wymaga zdalnego URL obrazu
- - Pokrycie specyficzne dla providera Vydra:
+ - `generate` z wejściem zawierającym tylko prompt
+ - `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ż wbudowany `veo3` jest tylko tekstowy, a wbudowany `kling` wymaga zdalnego URL obrazu
+ - Pokrycie Vydra specyficzne dla dostawcy:
- `OPENCLAW_LIVE_TEST=1 OPENCLAW_LIVE_VYDRA_VIDEO=1 pnpm test:live -- extensions/vydra/vydra.live.test.ts`
- - ten plik uruchamia `veo3` text-to-video oraz ścieżkę `kling`, która domyślnie używa fixtury ze zdalnym URL obrazu
- - Aktualne pokrycie live `videoToVideo`:
+ - 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 wybranym modelem jest `runway/gen4_aleph`
- - Aktualnie zadeklarowani, ale pomijani providerzy `videoToVideo` we współdzielonym przeglądzie:
- - `alibaba`, `qwen`, `xai`, ponieważ te ścieżki wymagają obecnie 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 do specyficznych dla organizacji funkcji video inpaint/remix
+ - Obecnie zadeklarowani, ale pomijani dostawcy `videoToVideo` we współdzielonym przebiegu:
+ - `alibaba`, `qwen`, `xai`, ponieważ te ścieżki obecnie wymagają zdalnych URL referencyjnych `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 specyficznego dla organizacji do video inpaint/remix
- Opcjonalne zawężanie:
- `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"`
- Opcjonalne zachowanie auth:
- - `OPENCLAW_LIVE_REQUIRE_PROFILE_KEYS=1` aby wymusić auth ze store profili i ignorować nadpisania tylko-env
+ - `OPENCLAW_LIVE_REQUIRE_PROFILE_KEYS=1`, aby wymusić auth z magazynu profili i ignorować nadpisania tylko-env
-## Harness live mediów
+## Harness live dla mediów
- Polecenie: `pnpm test:live:media`
- Cel:
- - Uruchamia współdzielone pakiety live dla obrazów, muzyki i wideo przez jedno natywne wejście repo
- - Automatycznie ładuje brakujące zmienne env providera z `~/.profile`
- - Domyślnie automatycznie zawęża każdy pakiet do providerów, którzy aktualnie mają użyteczne auth
- - Ponownie używa `scripts/test-live.mjs`, dzięki czemu zachowanie heartbeat i quiet mode pozostaje spójne
+ - Uruchamia współdzielone pakiety live dla obrazu, muzyki i wideo przez jeden natywny entrypoint repo
+ - Automatycznie ładuje brakujące zmienne env dostawców z `~/.profile`
+ - Domyślnie automatycznie zawęża każdy pakiet do dostawców, którzy aktualnie mają użyteczne auth
+ - Ponownie używa `scripts/test-live.mjs`, dzięki czemu heartbeat i tryb cichy zachowują spójność
- 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`
-## Runnery Docker (opcjonalne kontrole „działa w Linuxie”)
+## Runnery Docker (opcjonalne testy „działa w Linuksie”)
Te runnery Docker dzielą się na dwa koszyki:
-- Runnery live-model: `test:docker:live-models` i `test:docker:live-gateway` uruchamiają tylko odpowiadający im plik live z kluczami profili wewnątrz obrazu Docker repo (`src/agents/models.profiles.live.test.ts` i `src/gateway/gateway-models.profiles.live.test.ts`), montując lokalny katalog konfiguracji i workspace (oraz pobierając `~/.profile`, jeśli jest zamontowany). Odpowiadające im lokalne entrypointy to `test:live:models-profiles` i `test:live:gateway-profiles`.
-- Runnery Docker live domyślnie używają mniejszego limitu smoke, aby pełny przegląd Docker pozostawał praktyczny:
+- Runnery live-model: `test:docker:live-models` i `test:docker:live-gateway` uruchamiają tylko odpowiadający im plik live z kluczami profili wewnątrz obrazu Docker repo (`src/agents/models.profiles.live.test.ts` i `src/gateway/gateway-models.profiles.live.test.ts`), montując lokalny katalog konfiguracji i workspace (oraz pobierając `~/.profile`, jeśli jest zamontowany). Odpowiadające lokalne entrypointy to `test:live:models-profiles` i `test:live:gateway-profiles`.
+- Runnery Docker live domyślnie używają mniejszego limitu smoke, aby pełny przebieg Docker pozostał 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
- jawnie chcesz uruchomić większy, wyczerpujący przegląd.
-- `test:docker:all` buduje obraz live Docker jeden raz przez `test:docker:live-build`, a następnie ponownie używa go dla dwóch ścieżek Docker live.
+ celowo chcesz większego, wyczerpującego skanowania.
+- `test:docker:all` buduje obraz Docker live raz przez `test:docker:live-build`, a następnie używa go ponownie dla dwóch ścieżek Docker live.
- Runnery 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.
-Runnery Docker live-model bind-mountują też tylko potrzebne katalogi auth CLI (lub wszystkie obsługiwane, gdy uruchomienie nie jest zawężone), a następnie kopiują je do katalogu domowego kontenera przed startem, aby zewnętrzny OAuth CLI mógł odświeżać tokeny bez modyfikowania store auth hosta:
+Runnery Docker live-model również bind-mountują tylko potrzebne katalogi auth CLI (albo 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 auth hosta:
-- Direct models: `pnpm test:docker:live-models` (skrypt: `scripts/test-live-models-docker.sh`)
-- Smoke ACP bind: `pnpm test:docker:live-acp-bind` (skrypt: `scripts/test-live-acp-bind-docker.sh`)
+- Modele bezpośrednie: `pnpm test:docker:live-models` (skrypt: `scripts/test-live-models-docker.sh`)
+- Smoke bind 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`)
-- Gateway + agent deweloperski: `pnpm test:docker:live-gateway` (skrypt: `scripts/test-live-gateway-models-docker.sh`)
-- Live smoke Open WebUI: `pnpm test:docker:openwebui` (skrypt: `scripts/e2e/openwebui-docker.sh`)
+- Gateway + agent dev: `pnpm test:docker:live-gateway` (skrypt: `scripts/test-live-gateway-models-docker.sh`)
+- Open WebUI live smoke: `pnpm test:docker:openwebui` (skrypt: `scripts/e2e/openwebui-docker.sh`)
- Kreator onboardingu (TTY, pełne scaffoldowanie): `pnpm test:docker:onboard` (skrypt: `scripts/e2e/onboard-docker.sh`)
-- Sieć gateway (dwa kontenery, auth WS + health): `pnpm test:docker:gateway-network` (skrypt: `scripts/e2e/gateway-network-docker.sh`)
-- Most kanałów MCP (seedowany Gateway + most stdio + smoke surowych ramek powiadomień Claude): `pnpm test:docker:mcp-channels` (skrypt: `scripts/e2e/mcp-channels-docker.sh`)
+- Networking bramy (dwa kontenery, uwierzytelnianie WS + health): `pnpm test:docker:gateway-network` (skrypt: `scripts/e2e/gateway-network-docker.sh`)
+- Most kanałów MCP (seedowana Gateway + most stdio + raw smoke ramek 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`)
-Runnery Docker live-model bind-mountują też bieżący checkout tylko do odczytu i
+Runnery Docker live-model również bind-mountują bieżący checkout tylko do odczytu i
przygotowują go do tymczasowego katalogu roboczego wewnątrz kontenera. Dzięki temu obraz runtime
-pozostaje lekki, a Vitest nadal działa na dokładnie twoich lokalnych źródłach/konfiguracji.
-Etap przygotowania pomija duże lokalne cache i wyniki buildów aplikacji, takie jak
-`.pnpm-store`, `.worktrees`, `__openclaw_vitest__` oraz lokalne dla aplikacji katalogi `.build` lub
-wyniki Gradle, aby uruchomienia Docker live nie traciły minut na kopiowanie
+pozostaje smukły, a jednocześnie Vitest nadal działa na dokładnie twoim lokalnym źródle/konfiguracji.
+Etap przygotowania pomija duże lokalne cache oraz build outputy aplikacji, takie jak
+`.pnpm-store`, `.worktrees`, `__openclaw_vitest__` oraz lokalne katalogi `.build` aplikacji lub
+katalogi wyjściowe Gradle, dzięki czemu uruchomienia Docker live nie tracą minut na kopiowanie
artefaktów specyficznych dla maszyny.
-Ustawiają one również `OPENCLAW_SKIP_CHANNELS=1`, aby sondy gateway live nie uruchamiały
-rzeczywistych workerów kanałów Telegram/Discord/itd. wewnątrz kontenera.
+Ustawiają też `OPENCLAW_SKIP_CHANNELS=1`, aby sondy gateway live nie uruchamiały
+rzeczywistych workerów kanałów Telegram/Discord/etc. wewnątrz kontenera.
`test:docker:live-models` nadal uruchamia `pnpm test:live`, więc przekaż także
-`OPENCLAW_LIVE_GATEWAY_*`, gdy musisz zawęzić lub wykluczyć pokrycie gateway
-live w tej ścieżce Docker.
-`test:docker:openwebui` jest smoke kompatybilnoś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
+`OPENCLAW_LIVE_GATEWAY_*`, gdy chcesz zawęzić lub wykluczyć pokrycie gateway
+live z tej ścieżki Docker.
+`test:docker:openwebui` to smoke kompatybilności wyższego poziomu: uruchamia
+kontener bramy OpenClaw z włączonymi endpointami HTTP zgodnymi z OpenAI,
+uruchamia przypięty kontener Open WebUI względem tej bramy, 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 sam Open WebUI może potrzebować zakończyć własną konfigurację cold-start.
Ta ścieżka oczekuje użytecznego klucza modelu live, a `OPENCLAW_PROFILE_FILE`
-(domyslnie `~/.profile`) jest podstawowym sposobem dostarczenia go w uruchomieniach Docker.
-Udane uruchomienia wypisują mały ładunek JSON, taki jak `{ "ok": true, "model":
+(domyślnie `~/.profile`) jest podstawowym sposobem jego dostarczenia w uruchomieniach z Dockerem.
+Pomyślne uruchomienia wypisują mały ładunek JSON, taki jak `{ "ok": true, "model":
"openclaw/default", ... }`.
-`test:docker:mcp-channels` jest celowo deterministyczny i nie potrzebuje
-prawdziwego konta Telegram, Discord ani iMessage. Uruchamia seedowany kontener Gateway,
-startuje drugi kontener, który uruchamia `openclaw mcp serve`, a następnie
-weryfikuje wykrywanie routowanych konwersacji, odczyty transkryptów, metadane załączników,
-zachowanie kolejki zdarzeń live, routing wysyłki wychodzącej oraz powiadomienia w stylu Claude o kanałach +
-uprawnieniach przez rzeczywisty most stdio MCP. Kontrola powiadomień
-sprawdza bezpośrednio surowe ramki stdio MCP, więc smoke weryfikuje to, co most
-rzeczywiście emituje, a nie tylko to, co akurat udostępnia konkretne SDK klienta.
+`test:docker:mcp-channels` jest celowo deterministyczny i nie wymaga
+rzeczywistego konta Telegram, Discord ani iMessage. Uruchamia seedowany kontener
+Gateway, startuje drugi kontener, który uruchamia `openclaw mcp serve`, a następnie
+weryfikuje wykrywanie routowanych 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. Sprawdzanie powiadomień
+bezpośrednio inspektuje surowe ramki stdio MCP, dzięki czemu smoke waliduje to, co
+most faktycznie emituje, a nie tylko to, co akurat udostępnia określony SDK klienta.
-Ręczny smoke wątku ACP w plain language (nie CI):
+Ręczny smoke wątku ACP w zwykłym języku (nie CI):
- `bun scripts/dev/discord-acp-plain-language-smoke.ts --channel ...`
-- 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.
+- Zachowaj ten skrypt do przepływów regresji/debugowania. Może być ponownie potrzebny do walidacji routingu wątków ACP, więc go nie usuwaj.
Przydatne zmienne env:
- `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_CLI_TOOLS_DIR=...` (domyślnie: `~/.cache/openclaw/docker-cli-tools`) montowane do `/home/node/.npm-global` dla cache instalacji CLI wewnątrz Dockera
-- Zewnętrzne katalogi/pliki auth CLI pod `$HOME` są montowane tylko do odczytu pod `/host-auth...`, a następnie kopiowane do `/home/node/...` przed uruchomieniem testów
+- `OPENCLAW_DOCKER_CLI_TOOLS_DIR=...` (domyślnie: `~/.cache/openclaw/docker-cli-tools`) montowane do `/home/node/.npm-global` dla keszowanych instalacji CLI wewnątrz Dockera
+- Zewnętrzne katalogi/pliki auth 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 providerów montują tylko potrzebne katalogi/pliki wywnioskowane z `OPENCLAW_LIVE_PROVIDERS` / `OPENCLAW_LIVE_GATEWAY_PROVIDERS`
- - Nadpisanie ręczne: `OPENCLAW_DOCKER_AUTH_DIRS=all`, `OPENCLAW_DOCKER_AUTH_DIRS=none` lub lista rozdzielana przecinkami, np. `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ć providerów w kontenerze
-- `OPENCLAW_LIVE_REQUIRE_PROFILE_KEYS=1` aby upewnić się, że poświadczenia pochodzą ze store profili (a nie z env)
-- `OPENCLAW_OPENWEBUI_MODEL=...` aby wybrać model udostępniany przez gateway dla smoke Open WebUI
-- `OPENCLAW_OPENWEBUI_PROMPT=...` aby nadpisać prompt kontroli nonce używany przez smoke Open WebUI
-- `OPENWEBUI_IMAGE=...` aby nadpisać przypięty tag obrazu Open WebUI
+ - Zawężone uruchomienia dostawców montują tylko potrzebne katalogi/pliki wywnioskowane z `OPENCLAW_LIVE_PROVIDERS` / `OPENCLAW_LIVE_GATEWAY_PROVIDERS`
+ - Ręczne nadpisanie przez `OPENCLAW_DOCKER_AUTH_DIRS=all`, `OPENCLAW_DOCKER_AUTH_DIRS=none` lub listę rozdzielaną przecinkami, np. `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 w kontenerze
+- `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 bramę dla smoke Open WebUI
+- `OPENCLAW_OPENWEBUI_PROMPT=...`, aby nadpisać prompt sprawdzania nonce używany przez smoke Open WebUI
+- `OPENWEBUI_IMAGE=...`, aby nadpisać przypięty tag obrazu Open WebUI
-## Spójność dokumentacji
+## Kontrola poprawności dokumentacji
-Po edycji dokumentacji uruchom kontrolę dokumentacji: `pnpm check:docs`.
-Uruchom pełną walidację anchorów Mintlify, gdy potrzebujesz również kontroli nagłówków na stronie: `pnpm docs:check-links:anchors`.
+Po edycjach dokumentacji uruchom kontrole dokumentacji: `pnpm check:docs`.
+Uruchom pełną walidację anchorów Mintlify, gdy potrzebujesz także sprawdzenia nagłówków na stronie: `pnpm docs:check-links:anchors`.
-## Regresje offline (bezpieczne dla CI)
+## Regresja offline (bezpieczna dla CI)
-Są to regresje „rzeczywistego pipeline” bez prawdziwych providerów:
+To regresje „rzeczywistego pipeline’u” bez prawdziwych 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 config + wymuszone auth): `src/gateway/gateway.test.ts` (przypadek: "runs wizard over ws and writes auth token config")
+- Gateway tool calling (mockowane OpenAI, rzeczywista pętla bramy + agenta): `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ę + wymusza auth): `src/gateway/gateway.test.ts` (przypadek: "runs wizard over ws and writes auth token config")
-## Ewalucje niezawodności agenta (Skills)
+## Ewaluacje niezawodności agenta (Skills)
Mamy już kilka bezpiecznych dla CI testów, które zachowują się jak „ewaluacje niezawodności agenta”:
-- Mock wywoływania narzędzi przez rzeczywistą pętlę gateway + agent (`src/gateway/gateway.test.ts`).
+- Mockowane wywoływanie narzędzi przez rzeczywistą pętlę bramy + agenta (`src/gateway/gateway.test.ts`).
- Przepływy kreatora end-to-end, które walidują okablowanie sesji i efekty konfiguracji (`src/gateway/gateway.test.ts`).
Czego nadal brakuje dla Skills (zobacz [Skills](/pl/tools/skills)):
-- **Decisioning:** gdy Skills są wymienione w prompcie, czy agent wybiera właściwy skill (albo unika nieistotnych)?
-- **Compliance:** czy agent czyta `SKILL.md` przed użyciem i wykonuje wymagane kroki/argumenty?
-- **Kontrakty przepływu pracy:** scenariusze wieloturowe, które potwierdzają kolejność narzędzi, przenoszenie historii sesji i granice sandboxa.
+- **Decisioning:** gdy Skills są wypisane w prompcie, czy agent wybiera właściwy Skill (albo unika nieistotnych)?
+- **Compliance:** czy agent odczytuje `SKILL.md` przed użyciem i wykonuje wymagane kroki/argumenty?
+- **Workflow contracts:** scenariusze wieloturowe, które potwierdzają kolejność narzędzi, przenoszenie historii sesji i granice sandboxa.
-Przyszłe ewaluacje powinny najpierw pozostać deterministyczne:
+Przyszłe ewaluacje powinny w pierwszej kolejności pozostać deterministyczne:
-- Runner scenariuszy używający mock providerów do potwierdzania wywołań narzędzi + kolejności, odczytów plików skill i okablowania sesji.
-- Mały pakiet scenariuszy skupionych na skillach (użyj vs unikaj, gating, prompt injection).
-- Opcjonalne ewaluacje live (opt-in, sterowane env) dopiero po wdrożeniu pakietu bezpiecznego dla CI.
+- Runner scenariuszy używający mockowanych dostawców do potwierdzania 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 unikaj, gating, prompt injection).
+- Opcjonalne ewaluacje live (opt-in, bramkowane przez env) dopiero po wdrożeniu pakietu bezpiecznego dla CI.
## Testy kontraktowe (kształt pluginów i kanałów)
Testy kontraktowe weryfikują, że każdy zarejestrowany plugin i kanał jest zgodny ze swoim
kontraktem interfejsu. Iterują po wszystkich wykrytych pluginach i uruchamiają pakiet
asercji kształtu i zachowania. Domyślna ścieżka unit `pnpm test` celowo
-pomija te współdzielone pliki seam i smoke; uruchamiaj polecenia kontraktów jawnie,
-gdy dotykasz współdzielonych powierzchni kanałów lub providerów.
+pomija te współdzielone pliki seam i smoke; uruchamiaj polecenia kontraktowe jawnie,
+gdy dotykasz współdzielonych powierzchni kanałów lub dostawców.
### Polecenia
- Wszystkie kontrakty: `pnpm test:contracts`
- Tylko kontrakty kanałów: `pnpm test:contracts:channels`
-- Tylko kontrakty providerów: `pnpm test:contracts:plugins`
+- Tylko kontrakty dostawców: `pnpm test:contracts:plugins`
### Kontrakty kanałów
@@ -715,17 +734,17 @@ Znajdują się w `src/channels/plugins/contracts/*.contract.test.ts`:
- **inbound** - Obsługa wiadomości przychodzących
- **actions** - Handlery akcji kanału
- **threading** - Obsługa identyfikatorów wątków
-- **directory** - API katalogu/listy kontaktów
-- **group-policy** - Egzekwowanie polityki grup
+- **directory** - API katalogu/listy
+- **group-policy** - Wymuszanie zasad grup
-### Kontrakty statusu providerów
+### Kontrakty statusu dostawców
Znajdują się w `src/plugins/contracts/*.contract.test.ts`.
-- **status** - Sondy statusu kanału
+- **status** - Sondy statusu kanałów
- **registry** - Kształt rejestru pluginów
-### Kontrakty providerów
+### Kontrakty dostawców
Znajdują się w `src/plugins/contracts/*.contract.test.ts`:
@@ -734,27 +753,27 @@ Znajdują się w `src/plugins/contracts/*.contract.test.ts`:
- **catalog** - API katalogu modeli
- **discovery** - Wykrywanie pluginów
- **loader** - Ładowanie pluginów
-- **runtime** - Runtime providera
+- **runtime** - Runtime dostawcy
- **shape** - Kształt/interfejs pluginu
- **wizard** - Kreator konfiguracji
### Kiedy uruchamiać
-- Po zmianie eksportów lub subpaths `plugin-sdk`
-- Po dodaniu lub modyfikacji pluginu kanału lub providera
-- Po refaktoryzacji rejestracji pluginów lub wykrywania
+- Po zmianie eksportów lub subścieżek plugin-sdk
+- Po dodaniu lub modyfikacji pluginu kanału lub dostawcy
+- Po refaktoryzacji rejestracji lub wykrywania pluginów
Testy kontraktowe uruchamiają się w CI i nie wymagają prawdziwych kluczy API.
## Dodawanie regresji (wskazówki)
-Gdy naprawiasz problem providera/modelu wykryty w live:
+Gdy naprawiasz problem dostawcy/modelu wykryty w live:
-- Jeśli to możliwe, dodaj regresję bezpieczną dla CI (mock/stub providera albo przechwycenie dokładnej transformacji kształtu żądania)
-- Jeśli problem z natury występuje tylko live (rate limit, polityki auth), utrzymaj test live wąski i opt-in przez zmienne env
-- Staraj się celować w najmniejszą warstwę, która wychwytuje błąd:
- - błąd konwersji/odtwarzania żądania providera → test direct models
- - błąd pipeline sesji/historii/narzędzi gateway → gateway live smoke albo bezpieczny dla CI test mock gateway
-- Zabezpieczenie przechodzenia SecretRef:
- - `src/secrets/exec-secret-ref-id-parity.test.ts` wyprowadza jeden przykładowy cel dla każdej klasy SecretRef z metadanych rejestru (`listSecretTargetRegistryEntries()`), a następnie potwierdza, że identyfikatory exec segmentów przejścia 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 dla niesklasyfikowanych identyfikatorów celów, aby nowe klasy nie mogły zostać po cichu pominięte.
+- Jeśli to możliwe, dodaj regresję bezpieczną dla CI (mockowany/stubowany dostawca albo przechwycenie dokładnej transformacji kształtu żądania)
+- Jeśli problem z natury występuje tylko w live (limity szybkości, polityki auth), utrzymuj test live wąski i opcjonalny przez zmienne env
+- Preferuj targetowanie najmniejszej warstwy, która wychwytuje błąd:
+ - błąd konwersji/replay żądania dostawcy → test modeli bezpośrednich
+ - błąd pipeline’u sesji/historii/narzędzi bramy → gateway live smoke albo bezpieczny dla CI test mockowanej bramy
+- Bariera ochronna 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 potwierdza, ż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.
diff --git a/docs/pl/reference/memory-config.md b/docs/pl/reference/memory-config.md
index 639d5aac9..229170968 100644
--- a/docs/pl/reference/memory-config.md
+++ b/docs/pl/reference/memory-config.md
@@ -1,84 +1,97 @@
---
read_when:
- - Chcesz skonfigurować dostawców wyszukiwania pamięci lub modele embeddingów
+ - Chcesz skonfigurować dostawców wyszukiwania w pamięci lub modele embeddingów
- Chcesz skonfigurować backend QMD
- - Chcesz dostroić wyszukiwanie hybrydowe, MMR lub zanik czasowy
+ - Chcesz dostroić wyszukiwanie hybrydowe, MMR lub zanikanie czasowe
- Chcesz włączyć multimodalne indeksowanie pamięci
-summary: Wszystkie ustawienia konfiguracji dla wyszukiwania pamięci, dostawców embeddingów, QMD, wyszukiwania hybrydowego i indeksowania multimodalnego
-title: Dokumentacja konfiguracji pamięci
+summary: Wszystkie opcje konfiguracji wyszukiwania w pamięci, dostawców embeddingów, QMD, wyszukiwania hybrydowego i indeksowania multimodalnego
+title: Dokument referencyjny konfiguracji pamięci
x-i18n:
- generated_at: "2026-04-06T03:13:06Z"
+ generated_at: "2026-04-10T09:45:08Z"
model: gpt-5.4
provider: openai
- source_hash: 0de0b85125443584f4e575cf673ca8d9bd12ecd849d73c537f4a17545afa93fd
+ source_hash: 5f9076bdfad95b87bd70625821bf401326f8eaeb53842b70823881419dbe43cb
source_path: reference/memory-config.md
workflow: 15
---
-# Dokumentacja konfiguracji pamięci
+# Dokument referencyjny konfiguracji pamięci
-Ta strona zawiera wszystkie ustawienia konfiguracji wyszukiwania pamięci w OpenClaw. Aby zapoznać się z
-omówieniem koncepcyjnym, zobacz:
+Ta strona zawiera wszystkie opcje konfiguracji wyszukiwania w pamięci w OpenClaw. Aby zapoznać się z
+omówieniem pojęciowym, zobacz:
- [Przegląd pamięci](/pl/concepts/memory) -- jak działa pamięć
- [Wbudowany silnik](/pl/concepts/memory-builtin) -- domyślny backend SQLite
-- [Silnik QMD](/pl/concepts/memory-qmd) -- lokalny sidecar
-- [Wyszukiwanie pamięci](/pl/concepts/memory-search) -- pipeline wyszukiwania i strojenie
+- [Silnik QMD](/pl/concepts/memory-qmd) -- lokalny sidecar działający local-first
+- [Wyszukiwanie w pamięci](/pl/concepts/memory-search) -- potok wyszukiwania i strojenie
+- [Aktywna pamięć](/pl/concepts/active-memory) -- włączanie sub-agenta pamięci dla interaktywnych sesji
-Wszystkie ustawienia wyszukiwania pamięci znajdują się w `agents.defaults.memorySearch` w
-`openclaw.json`, chyba że zaznaczono inaczej.
+Wszystkie ustawienia wyszukiwania w pamięci znajdują się w `agents.defaults.memorySearch` w
+`openclaw.json`, o ile nie wskazano inaczej.
+
+Jeśli szukasz przełącznika funkcji **aktywnej pamięci** i konfiguracji sub-agenta,
+znajdują się one w `plugins.entries.active-memory`, a nie w `memorySearch`.
+
+Aktywna pamięć używa modelu dwóch bramek:
+
+1. plugin musi być włączony i kierować na bieżące ID agenta
+2. żądanie musi dotyczyć kwalifikującej się interaktywnej trwałej sesji czatu
+
+Zobacz [Aktywna pamięć](/pl/concepts/active-memory), aby poznać model aktywacji,
+konfigurację należącą do pluginu, trwałość transkryptów i bezpieczny schemat wdrażania.
---
## Wybór dostawcy
-| Key | Type | Default | Opis |
-| ---------- | --------- | ---------------- | ------------------------------------------------------------------------------------------ |
-| `provider` | `string` | wykrywany automatycznie | Identyfikator adaptera embeddingów: `openai`, `gemini`, `voyage`, `mistral`, `bedrock`, `ollama`, `local` |
+| Klucz | Typ | Domyślnie | Opis |
+| --------- | --------- | --------------- | ------------------------------------------------------------------------------------------- |
+| `provider` | `string` | wykrywany automatycznie | ID adaptera embeddingów: `openai`, `gemini`, `voyage`, `mistral`, `bedrock`, `ollama`, `local` |
| `model` | `string` | domyślny dostawcy | Nazwa modelu embeddingów |
-| `fallback` | `string` | `"none"` | Identyfikator adaptera fallback, gdy podstawowy zawiedzie |
-| `enabled` | `boolean` | `true` | Włącza lub wyłącza wyszukiwanie pamięci |
+| `fallback` | `string` | `"none"` | ID adaptera zapasowego, gdy podstawowy zawiedzie |
+| `enabled` | `boolean` | `true` | Włącza lub wyłącza wyszukiwanie w pamięci |
### Kolejność automatycznego wykrywania
Gdy `provider` nie jest ustawiony, OpenClaw wybiera pierwszy dostępny:
-1. `local` -- jeśli `memorySearch.local.modelPath` jest skonfigurowane i plik istnieje.
+1. `local` -- jeśli skonfigurowano `memorySearch.local.modelPath` i plik istnieje.
2. `openai` -- jeśli można rozpoznać klucz OpenAI.
3. `gemini` -- jeśli można rozpoznać klucz Gemini.
4. `voyage` -- jeśli można rozpoznać klucz Voyage.
5. `mistral` -- jeśli można rozpoznać klucz Mistral.
-6. `bedrock` -- jeśli łańcuch poświadczeń AWS SDK zostanie rozpoznany (rola instancji, klucze dostępu, profil, SSO, tożsamość webowa lub współdzielona konfiguracja).
+6. `bedrock` -- jeśli łańcuch poświadczeń AWS SDK zostanie rozwiązany (rola instancji, klucze dostępu, profil, SSO, tożsamość webowa lub współdzielona konfiguracja).
-`ollama` jest obsługiwane, ale nie jest wykrywane automatycznie (ustaw je jawnie).
+`ollama` jest obsługiwany, ale nie jest wykrywany automatycznie (ustaw go jawnie).
### Rozpoznawanie klucza API
Zdalne embeddingi wymagają klucza API. Bedrock zamiast tego używa domyślnego
łańcucha poświadczeń AWS SDK (role instancji, SSO, klucze dostępu).
-| Provider | Zmienna env | Klucz config |
-| -------- | ------------------------------ | --------------------------------- |
-| OpenAI | `OPENAI_API_KEY` | `models.providers.openai.apiKey` |
-| Gemini | `GEMINI_API_KEY` | `models.providers.google.apiKey` |
-| Voyage | `VOYAGE_API_KEY` | `models.providers.voyage.apiKey` |
+| Dostawca | Zmienna środowiskowa | Klucz konfiguracji |
+| -------- | ------------------------------ | -------------------------------- |
+| OpenAI | `OPENAI_API_KEY` | `models.providers.openai.apiKey` |
+| Gemini | `GEMINI_API_KEY` | `models.providers.google.apiKey` |
+| Voyage | `VOYAGE_API_KEY` | `models.providers.voyage.apiKey` |
| Mistral | `MISTRAL_API_KEY` | `models.providers.mistral.apiKey` |
-| Bedrock | łańcuch poświadczeń AWS | Klucz API nie jest potrzebny |
-| Ollama | `OLLAMA_API_KEY` (placeholder) | -- |
+| Bedrock | łańcuch poświadczeń AWS | Klucz API nie jest potrzebny |
+| Ollama | `OLLAMA_API_KEY` (placeholder) | -- |
-OAuth Codex obejmuje tylko czat/uzupełnienia i nie spełnia wymagań żądań embeddingów.
+OAuth Codex obejmuje tylko chat/completions i nie spełnia wymagań żądań
+embeddingów.
---
-## Konfiguracja zdalnego endpointu
+## Konfiguracja zdalnego punktu końcowego
-Dla niestandardowych endpointów zgodnych z OpenAI lub nadpisywania domyślnych wartości dostawcy:
+Do niestandardowych punktów końcowych zgodnych z OpenAI lub nadpisania ustawień domyślnych dostawcy:
-| Key | Type | Opis |
-| ---------------- | -------- | -------------------------------------------------- |
-| `remote.baseUrl` | `string` | Niestandardowy bazowy URL API |
-| `remote.apiKey` | `string` | Nadpisanie klucza API |
-| `remote.headers` | `object` | Dodatkowe nagłówki HTTP (scalane z domyślnymi dostawcy) |
+| Klucz | Typ | Opis |
+| ----------------- | -------- | ------------------------------------------------ |
+| `remote.baseUrl` | `string` | Niestandardowy bazowy URL API |
+| `remote.apiKey` | `string` | Nadpisuje klucz API |
+| `remote.headers` | `object` | Dodatkowe nagłówki HTTP (łączone z domyślnymi ustawieniami dostawcy) |
```json5
{
@@ -101,21 +114,21 @@ Dla niestandardowych endpointów zgodnych z OpenAI lub nadpisywania domyślnych
## Konfiguracja specyficzna dla Gemini
-| Key | Type | Default | Opis |
-| ---------------------- | -------- | ---------------------- | ------------------------------------------ |
-| `model` | `string` | `gemini-embedding-001` | Obsługuje też `gemini-embedding-2-preview` |
-| `outputDimensionality` | `number` | `3072` | Dla Embedding 2: 768, 1536 lub 3072 |
+| Klucz | Typ | Domyślnie | Opis |
+| ---------------------- | -------- | --------------------- | ------------------------------------------ |
+| `model` | `string` | `gemini-embedding-001` | Obsługuje także `gemini-embedding-2-preview` |
+| `outputDimensionality` | `number` | `3072` | Dla Embedding 2: 768, 1536 lub 3072 |
-Zmiana modelu lub `outputDimensionality` uruchamia automatyczne pełne ponowne indeksowanie.
+Zmiana modelu lub `outputDimensionality` uruchamia automatyczne pełne przeindeksowanie.
---
## Konfiguracja embeddingów Bedrock
-Bedrock używa domyślnego łańcucha poświadczeń AWS SDK -- klucze API nie są potrzebne.
-Jeśli OpenClaw działa na EC2 z rolą instancji z włączonym Bedrock, po prostu ustaw
+Bedrock używa domyślnego łańcucha poświadczeń AWS SDK -- nie są potrzebne żadne klucze API.
+Jeśli OpenClaw działa na EC2 z rolą instancji obsługującą Bedrock, po prostu ustaw
dostawcę i model:
```json5
@@ -131,17 +144,17 @@ dostawcę i model:
}
```
-| Key | Type | Default | Opis |
-| ---------------------- | -------- | ------------------------------ | ----------------------------- |
-| `model` | `string` | `amazon.titan-embed-text-v2:0` | Dowolny identyfikator modelu embeddingów Bedrock |
-| `outputDimensionality` | `number` | domyślna wartość modelu | Dla Titan V2: 256, 512 lub 1024 |
+| Klucz | Typ | Domyślnie | Opis |
+| ---------------------- | -------- | ----------------------------- | --------------------------------- |
+| `model` | `string` | `amazon.titan-embed-text-v2:0` | Dowolne ID modelu embeddingów Bedrock |
+| `outputDimensionality` | `number` | domyślna wartość modelu | Dla Titan V2: 256, 512 lub 1024 |
### Obsługiwane modele
Obsługiwane są następujące modele (z wykrywaniem rodziny i domyślnymi
wymiarami):
-| Model ID | Provider | Domyślne wymiary | Konfigurowalne wymiary |
+| ID modelu | Dostawca | Domyślne wymiary | Konfigurowalne wymiary |
| ------------------------------------------ | ---------- | ---------------- | ---------------------- |
| `amazon.titan-embed-text-v2:0` | Amazon | 1024 | 256, 512, 1024 |
| `amazon.titan-embed-text-v1` | Amazon | 1536 | -- |
@@ -154,7 +167,7 @@ wymiarami):
| `twelvelabs.marengo-embed-3-0-v1:0` | TwelveLabs | 512 | -- |
| `twelvelabs.marengo-embed-2-7-v1:0` | TwelveLabs | 1024 | -- |
-Warianty z sufiksem przepustowości (na przykład `amazon.titan-embed-text-v1:2:8k`) dziedziczą
+Warianty z sufiksem przepustowości (np. `amazon.titan-embed-text-v1:2:8k`) dziedziczą
konfigurację modelu bazowego.
### Uwierzytelnianie
@@ -162,17 +175,17 @@ konfigurację modelu bazowego.
Uwierzytelnianie Bedrock używa standardowej kolejności rozpoznawania poświadczeń AWS SDK:
1. Zmienne środowiskowe (`AWS_ACCESS_KEY_ID` + `AWS_SECRET_ACCESS_KEY`)
-2. Cache tokenów SSO
-3. Poświadczenia tokena tożsamości webowej
+2. Pamięć podręczna tokenów SSO
+3. Poświadczenia tokenu tożsamości webowej
4. Współdzielone pliki poświadczeń i konfiguracji
5. Poświadczenia metadanych ECS lub EC2
-Region jest rozpoznawany z `AWS_REGION`, `AWS_DEFAULT_REGION`, `baseUrl`
-dostawcy `amazon-bedrock` lub domyślnie ustawiany na `us-east-1`.
+Region jest rozpoznawany na podstawie `AWS_REGION`, `AWS_DEFAULT_REGION`,
+`baseUrl` dostawcy `amazon-bedrock` albo domyślnie przyjmuje wartość `us-east-1`.
### Uprawnienia IAM
-Rola IAM lub użytkownik potrzebują:
+Rola IAM lub użytkownik potrzebuje:
```json
{
@@ -182,7 +195,7 @@ Rola IAM lub użytkownik potrzebują:
}
```
-Dla zasady najmniejszych uprawnień ogranicz `InvokeModel` do konkretnego modelu:
+Aby zachować zasadę najmniejszych uprawnień, ogranicz `InvokeModel` do konkretnego modelu:
```
arn:aws:bedrock:*::foundation-model/amazon.titan-embed-text-v2:0
@@ -192,42 +205,42 @@ arn:aws:bedrock:*::foundation-model/amazon.titan-embed-text-v2:0
## Konfiguracja lokalnych embeddingów
-| Key | Type | Default | Opis |
-| --------------------- | -------- | ---------------------- | ------------------------------- |
-| `local.modelPath` | `string` | pobierane automatycznie | Ścieżka do pliku modelu GGUF |
-| `local.modelCacheDir` | `string` | domyślna wartość node-llama-cpp | Katalog cache dla pobranych modeli |
+| Klucz | Typ | Domyślnie | Opis |
+| --------------------- | -------- | --------------------- | ------------------------------ |
+| `local.modelPath` | `string` | pobierany automatycznie | Ścieżka do pliku modelu GGUF |
+| `local.modelCacheDir` | `string` | domyślna wartość node-llama-cpp | Katalog pamięci podręcznej dla pobranych modeli |
Domyślny model: `embeddinggemma-300m-qat-Q8_0.gguf` (~0.6 GB, pobierany automatycznie).
-Wymaga natywnej kompilacji: `pnpm approve-builds`, a następnie `pnpm rebuild node-llama-cpp`.
+Wymaga natywnego builda: `pnpm approve-builds`, a następnie `pnpm rebuild node-llama-cpp`.
---
## Konfiguracja wyszukiwania hybrydowego
-Wszystko pod `memorySearch.query.hybrid`:
+Wszystko znajduje się w `memorySearch.query.hybrid`:
-| Key | Type | Default | Opis |
-| --------------------- | --------- | ------- | -------------------------------- |
-| `enabled` | `boolean` | `true` | Włącza hybrydowe wyszukiwanie BM25 + wektorowe |
-| `vectorWeight` | `number` | `0.7` | Waga dla wyników wektorowych (0-1) |
-| `textWeight` | `number` | `0.3` | Waga dla wyników BM25 (0-1) |
-| `candidateMultiplier` | `number` | `4` | Mnożnik rozmiaru puli kandydatów |
+| Klucz | Typ | Domyślnie | Opis |
+| --------------------- | --------- | --------- | ---------------------------------- |
+| `enabled` | `boolean` | `true` | Włącza hybrydowe wyszukiwanie BM25 + wektorowe |
+| `vectorWeight` | `number` | `0.7` | Waga wyników wektorowych (0-1) |
+| `textWeight` | `number` | `0.3` | Waga wyników BM25 (0-1) |
+| `candidateMultiplier` | `number` | `4` | Mnożnik rozmiaru puli kandydatów |
### MMR (różnorodność)
-| Key | Type | Default | Opis |
-| ------------- | --------- | ------- | ------------------------------------ |
-| `mmr.enabled` | `boolean` | `false` | Włącza ponowne rangowanie MMR |
-| `mmr.lambda` | `number` | `0.7` | 0 = maksymalna różnorodność, 1 = maksymalna trafność |
+| Klucz | Typ | Domyślnie | Opis |
+| ------------- | --------- | --------- | ---------------------------------------- |
+| `mmr.enabled` | `boolean` | `false` | Włącza ponowne rankingowanie MMR |
+| `mmr.lambda` | `number` | `0.7` | 0 = maksymalna różnorodność, 1 = maksymalna trafność |
-### Zanik czasowy (świeżość)
+### Zanikanie czasowe (świeżość)
-| Key | Type | Default | Opis |
-| ---------------------------- | --------- | ------- | ----------------------------- |
-| `temporalDecay.enabled` | `boolean` | `false` | Włącza premiowanie świeżości |
-| `temporalDecay.halfLifeDays` | `number` | `30` | Wynik spada o połowę co N dni |
+| Klucz | Typ | Domyślnie | Opis |
+| ---------------------------- | --------- | --------- | ----------------------------- |
+| `temporalDecay.enabled` | `boolean` | `false` | Włącza premiowanie świeżości |
+| `temporalDecay.halfLifeDays` | `number` | `30` | Wynik spada o połowę co N dni |
-Pliki evergreen (`MEMORY.md`, pliki bez dat w `memory/`) nigdy nie podlegają zanikowi.
+Pliki stałe (`MEMORY.md`, pliki bez daty w `memory/`) nigdy nie podlegają zanikaniu.
### Pełny przykład
@@ -254,9 +267,9 @@ Pliki evergreen (`MEMORY.md`, pliki bez dat w `memory/`) nigdy nie podlegają za
## Dodatkowe ścieżki pamięci
-| Key | Type | Opis |
-| ------------ | ---------- | -------------------------------------------- |
-| `extraPaths` | `string[]` | Dodatkowe katalogi lub pliki do indeksowania |
+| Klucz | Typ | Opis |
+| ----------- | ---------- | --------------------------------------- |
+| `extraPaths` | `string[]` | Dodatkowe katalogi lub pliki do zindeksowania |
```json5
{
@@ -270,33 +283,31 @@ Pliki evergreen (`MEMORY.md`, pliki bez dat w `memory/`) nigdy nie podlegają za
}
```
-Ścieżki mogą być bezwzględne lub względne względem obszaru roboczego. Katalogi są skanowane
+Ścieżki mogą być bezwzględne lub względne względem workspace. Katalogi są skanowane
rekurencyjnie w poszukiwaniu plików `.md`. Obsługa symlinków zależy od aktywnego backendu:
-wbudowany silnik ignoruje symlinki, podczas gdy QMD korzysta z zachowania
-bazowego skanera QMD.
+wbudowany silnik ignoruje symlinki, a QMD stosuje zachowanie skanera QMD.
-Dla wyszukiwania transkryptów między agentami w zakresie agenta użyj
+W przypadku wyszukiwania transkryptów między agentami w zakresie agenta użyj
`agents.list[].memorySearch.qmd.extraCollections` zamiast `memory.qmd.paths`.
-Te dodatkowe kolekcje używają tego samego kształtu `{ path, name, pattern? }`, ale
-są scalane dla każdego agenta i mogą zachować jawne współdzielone nazwy, gdy ścieżka
-wskazuje poza bieżący obszar roboczy.
-Jeśli ta sama rozpoznana ścieżka pojawi się zarówno w `memory.qmd.paths`, jak i
-`memorySearch.qmd.extraCollections`, QMD zachowuje pierwszy wpis i pomija
-duplikat.
+Te dodatkowe kolekcje mają ten sam kształt `{ path, name, pattern? }`, ale
+są scalane per agent i mogą zachowywać jawne wspólne nazwy, gdy ścieżka
+wskazuje poza bieżący workspace.
+Jeśli ta sama rozpoznana ścieżka pojawi się zarówno w `memory.qmd.paths`, jak i w
+`memorySearch.qmd.extraCollections`, QMD zachowa pierwszy wpis i pominie duplikat.
---
## Pamięć multimodalna (Gemini)
-Indeksuj obrazy i audio razem z Markdown przy użyciu Gemini Embedding 2:
+Indeksuj obrazy i audio obok Markdown za pomocą Gemini Embedding 2:
-| Key | Type | Default | Opis |
-| ------------------------- | ---------- | ---------- | ------------------------------------------- |
-| `multimodal.enabled` | `boolean` | `false` | Włącza indeksowanie multimodalne |
-| `multimodal.modalities` | `string[]` | -- | `["image"]`, `["audio"]` lub `["all"]` |
-| `multimodal.maxFileBytes` | `number` | `10000000` | Maksymalny rozmiar pliku do indeksowania |
+| Klucz | Typ | Domyślnie | Opis |
+| ------------------------- | ---------- | ---------- | -------------------------------------- |
+| `multimodal.enabled` | `boolean` | `false` | Włącza indeksowanie multimodalne |
+| `multimodal.modalities` | `string[]` | -- | `["image"]`, `["audio"]` lub `["all"]` |
+| `multimodal.maxFileBytes` | `number` | `10000000` | Maksymalny rozmiar pliku do indeksowania |
-Dotyczy tylko plików w `extraPaths`. Domyślne korzenie pamięci pozostają tylko dla Markdown.
+Dotyczy tylko plików w `extraPaths`. Domyślne katalogi pamięci pozostają tylko dla Markdown.
Wymaga `gemini-embedding-2-preview`. `fallback` musi mieć wartość `"none"`.
Obsługiwane formaty: `.jpg`, `.jpeg`, `.png`, `.webp`, `.gif`, `.heic`, `.heif`
@@ -304,67 +315,67 @@ Obsługiwane formaty: `.jpg`, `.jpeg`, `.png`, `.webp`, `.gif`, `.heic`, `.heif`
---
-## Cache embeddingów
+## Pamięć podręczna embeddingów
-| Key | Type | Default | Opis |
-| ------------------ | --------- | ------- | -------------------------------- |
-| `cache.enabled` | `boolean` | `false` | Buforuje embeddingi fragmentów w SQLite |
-| `cache.maxEntries` | `number` | `50000` | Maksymalna liczba buforowanych embeddingów |
+| Klucz | Typ | Domyślnie | Opis |
+| ------------------ | --------- | --------- | --------------------------------- |
+| `cache.enabled` | `boolean` | `false` | Buforuje embeddingi fragmentów w SQLite |
+| `cache.maxEntries` | `number` | `50000` | Maksymalna liczba buforowanych embeddingów |
-Zapobiega ponownemu osadzaniu niezmienionego tekstu podczas reindeksowania lub aktualizacji transkryptów.
+Zapobiega ponownemu tworzeniu embeddingów dla niezmienionego tekstu podczas ponownego indeksowania lub aktualizacji transkryptów.
---
## Indeksowanie wsadowe
-| Key | Type | Default | Opis |
-| ----------------------------- | --------- | ------- | ---------------------------- |
-| `remote.batch.enabled` | `boolean` | `false` | Włącza API embeddingów wsadowych |
-| `remote.batch.concurrency` | `number` | `2` | Równoległe zadania wsadowe |
-| `remote.batch.wait` | `boolean` | `true` | Czeka na zakończenie wsadu |
-| `remote.batch.pollIntervalMs` | `number` | -- | Interwał odpytywania |
-| `remote.batch.timeoutMinutes` | `number` | -- | Limit czasu wsadu |
+| Klucz | Typ | Domyślnie | Opis |
+| -------------------------- | --------- | --------- | -------------------------- |
+| `remote.batch.enabled` | `boolean` | `false` | Włącza API embeddingów wsadowych |
+| `remote.batch.concurrency` | `number` | `2` | Równoległe zadania wsadowe |
+| `remote.batch.wait` | `boolean` | `true` | Czeka na zakończenie wsadu |
+| `remote.batch.pollIntervalMs` | `number` | -- | Interwał odpytywania |
+| `remote.batch.timeoutMinutes` | `number` | -- | Limit czasu wsadu |
Dostępne dla `openai`, `gemini` i `voyage`. Wsady OpenAI są zwykle
-najszybsze i najtańsze przy dużych uzupełnieniach zaległości.
+najszybsze i najtańsze przy dużych uzupełnieniach historycznych.
---
-## Wyszukiwanie pamięci sesji (eksperymentalne)
+## Wyszukiwanie w pamięci sesji (eksperymentalne)
-Indeksuj transkrypty sesji i udostępniaj je przez `memory_search`:
+Indeksuj transkrypcje sesji i udostępniaj je przez `memory_search`:
-| Key | Type | Default | Opis |
-| ----------------------------- | ---------- | ------------ | ------------------------------------------- |
-| `experimental.sessionMemory` | `boolean` | `false` | Włącza indeksowanie sesji |
-| `sources` | `string[]` | `["memory"]` | Dodaj `"sessions"`, aby uwzględnić transkrypty |
-| `sync.sessions.deltaBytes` | `number` | `100000` | Próg bajtów dla reindeksowania |
-| `sync.sessions.deltaMessages` | `number` | `50` | Próg wiadomości dla reindeksowania |
+| Klucz | Typ | Domyślnie | Opis |
+| --------------------------- | ---------- | ------------ | ----------------------------------------- |
+| `experimental.sessionMemory` | `boolean` | `false` | Włącza indeksowanie sesji |
+| `sources` | `string[]` | `["memory"]` | Dodaj `"sessions"`, aby uwzględnić transkrypcje |
+| `sync.sessions.deltaBytes` | `number` | `100000` | Próg bajtów dla ponownego indeksowania |
+| `sync.sessions.deltaMessages` | `number` | `50` | Próg liczby wiadomości dla ponownego indeksowania |
-Indeksowanie sesji jest opt-in i działa asynchronicznie. Wyniki mogą być nieco
-nieaktualne. Logi sesji są przechowywane na dysku, więc dostęp do systemu plików należy traktować jako
-granicę zaufania.
+Indeksowanie sesji jest funkcją opt-in i działa asynchronicznie. Wyniki mogą być nieco
+nieaktualne. Logi sesji są przechowywane na dysku, więc granicą zaufania pozostaje
+dostęp do systemu plików.
---
-## Przyspieszenie wektorowe SQLite (sqlite-vec)
+## Akceleracja wektorowa SQLite (sqlite-vec)
-| Key | Type | Default | Opis |
-| ---------------------------- | --------- | ------- | ---------------------------------- |
-| `store.vector.enabled` | `boolean` | `true` | Używa sqlite-vec dla zapytań wektorowych |
-| `store.vector.extensionPath` | `string` | dołączone | Nadpisuje ścieżkę sqlite-vec |
+| Klucz | Typ | Domyślnie | Opis |
+| ------------------------- | --------- | --------- | --------------------------------- |
+| `store.vector.enabled` | `boolean` | `true` | Używa sqlite-vec do zapytań wektorowych |
+| `store.vector.extensionPath` | `string` | dołączona | Nadpisuje ścieżkę do sqlite-vec |
-Gdy sqlite-vec jest niedostępne, OpenClaw automatycznie przechodzi awaryjnie do
-podobieństwa cosinusowego w procesie.
+Gdy sqlite-vec jest niedostępne, OpenClaw automatycznie przełącza się na
+podobieństwo cosinusowe w procesie.
---
## Przechowywanie indeksu
-| Key | Type | Default | Opis |
-| --------------------- | -------- | ------------------------------------- | -------------------------------------------- |
-| `store.path` | `string` | `~/.openclaw/memory/{agentId}.sqlite` | Lokalizacja indeksu (obsługuje token `{agentId}`) |
-| `store.fts.tokenizer` | `string` | `unicode61` | Tokenizer FTS5 (`unicode61` lub `trigram`) |
+| Klucz | Typ | Domyślnie | Opis |
+| -------------------- | -------- | ------------------------------------ | -------------------------------------------- |
+| `store.path` | `string` | `~/.openclaw/memory/{agentId}.sqlite` | Lokalizacja indeksu (obsługuje token `{agentId}`) |
+| `store.fts.tokenizer` | `string` | `unicode61` | Tokenizer FTS5 (`unicode61` lub `trigram`) |
---
@@ -373,50 +384,49 @@ podobieństwa cosinusowego w procesie.
Ustaw `memory.backend = "qmd"`, aby włączyć. Wszystkie ustawienia QMD znajdują się w
`memory.qmd`:
-| Key | Type | Default | Opis |
-| ------------------------ | --------- | -------- | -------------------------------------------- |
-| `command` | `string` | `qmd` | Ścieżka do pliku wykonywalnego QMD |
-| `searchMode` | `string` | `search` | Polecenie wyszukiwania: `search`, `vsearch`, `query` |
-| `includeDefaultMemory` | `boolean` | `true` | Automatycznie indeksuje `MEMORY.md` + `memory/**/*.md` |
-| `paths[]` | `array` | -- | Dodatkowe ścieżki: `{ name, path, pattern? }` |
-| `sessions.enabled` | `boolean` | `false` | Indeksuje transkrypty sesji |
-| `sessions.retentionDays` | `number` | -- | Retencja transkryptów |
-| `sessions.exportDir` | `string` | -- | Katalog eksportu |
+| Klucz | Typ | Domyślnie | Opis |
+| ----------------------- | --------- | --------- | -------------------------------------------- |
+| `command` | `string` | `qmd` | Ścieżka do pliku wykonywalnego QMD |
+| `searchMode` | `string` | `search` | Polecenie wyszukiwania: `search`, `vsearch`, `query` |
+| `includeDefaultMemory` | `boolean` | `true` | Automatycznie indeksuje `MEMORY.md` + `memory/**/*.md` |
+| `paths[]` | `array` | -- | Dodatkowe ścieżki: `{ name, path, pattern? }` |
+| `sessions.enabled` | `boolean` | `false` | Indeksuje transkrypcje sesji |
+| `sessions.retentionDays` | `number` | -- | Retencja transkryptów |
+| `sessions.exportDir` | `string` | -- | Katalog eksportu |
OpenClaw preferuje bieżące kształty kolekcji QMD i zapytań MCP, ale zachowuje
-zgodność ze starszymi wydaniami QMD, przechodząc awaryjnie do starszych flag kolekcji `--mask`
-i starszych nazw narzędzi MCP, gdy jest to potrzebne.
+zgodność ze starszymi wydaniami QMD, przechodząc w razie potrzeby na starsze flagi kolekcji `--mask`
+oraz starsze nazwy narzędzi MCP.
-Nadpisania modeli QMD pozostają po stronie QMD, a nie w config OpenClaw. Jeśli musisz
-globalnie nadpisać modele QMD, ustaw zmienne środowiskowe, takie jak
-`QMD_EMBED_MODEL`, `QMD_RERANK_MODEL` i `QMD_GENERATE_MODEL`, w środowisku runtime
-gateway.
+Nadpisania modeli QMD pozostają po stronie QMD, a nie w konfiguracji OpenClaw. Jeśli chcesz
+globalnie nadpisać modele QMD, ustaw zmienne środowiskowe takie jak
+`QMD_EMBED_MODEL`, `QMD_RERANK_MODEL` i `QMD_GENERATE_MODEL` w środowisku uruchomieniowym gatewaya.
### Harmonogram aktualizacji
-| Key | Type | Default | Opis |
-| ------------------------- | --------- | ------- | -------------------------------------- |
-| `update.interval` | `string` | `5m` | Interwał odświeżania |
-| `update.debounceMs` | `number` | `15000` | Opóźnienie zmian plików |
-| `update.onBoot` | `boolean` | `true` | Odświeżanie przy uruchomieniu |
-| `update.waitForBootSync` | `boolean` | `false` | Blokuje uruchomienie do zakończenia odświeżania |
-| `update.embedInterval` | `string` | -- | Oddzielna kadencja embeddingów |
-| `update.commandTimeoutMs` | `number` | -- | Limit czasu dla poleceń QMD |
-| `update.updateTimeoutMs` | `number` | -- | Limit czasu dla operacji aktualizacji QMD |
-| `update.embedTimeoutMs` | `number` | -- | Limit czasu dla operacji embeddingów QMD |
+| Klucz | Typ | Domyślnie | Opis |
+| ------------------------ | --------- | --------- | ----------------------------------------- |
+| `update.interval` | `string` | `5m` | Interwał odświeżania |
+| `update.debounceMs` | `number` | `15000` | Debounce zmian plików |
+| `update.onBoot` | `boolean` | `true` | Odświeża przy uruchomieniu |
+| `update.waitForBootSync` | `boolean` | `false` | Blokuje uruchamianie do zakończenia odświeżenia |
+| `update.embedInterval` | `string` | -- | Oddzielna częstotliwość embeddingów |
+| `update.commandTimeoutMs` | `number` | -- | Limit czasu dla poleceń QMD |
+| `update.updateTimeoutMs` | `number` | -- | Limit czasu dla operacji aktualizacji QMD |
+| `update.embedTimeoutMs` | `number` | -- | Limit czasu dla operacji embeddingów QMD |
### Limity
-| Key | Type | Default | Opis |
-| ------------------------- | -------- | ------- | ------------------------------ |
-| `limits.maxResults` | `number` | `6` | Maksymalna liczba wyników wyszukiwania |
-| `limits.maxSnippetChars` | `number` | -- | Ogranicza długość fragmentu |
-| `limits.maxInjectedChars` | `number` | -- | Ogranicza łączną liczbę wstrzykniętych znaków |
-| `limits.timeoutMs` | `number` | `4000` | Limit czasu wyszukiwania |
+| Klucz | Typ | Domyślnie | Opis |
+| ------------------------ | -------- | --------- | ------------------------------ |
+| `limits.maxResults` | `number` | `6` | Maksymalna liczba wyników wyszukiwania |
+| `limits.maxSnippetChars` | `number` | -- | Ogranicza długość fragmentu |
+| `limits.maxInjectedChars` | `number` | -- | Ogranicza łączną liczbę wstrzykniętych znaków |
+| `limits.timeoutMs` | `number` | `4000` | Limit czasu wyszukiwania |
### Zakres
-Steruje tym, które sesje mogą otrzymywać wyniki wyszukiwania QMD. Ten sam schemat co
+Kontroluje, które sesje mogą otrzymywać wyniki wyszukiwania QMD. Ten sam schemat co
[`session.sendPolicy`](/pl/gateway/configuration-reference#session):
```json5
@@ -433,16 +443,16 @@ Steruje tym, które sesje mogą otrzymywać wyniki wyszukiwania QMD. Ten sam sch
```
Domyślnie tylko DM. `match.keyPrefix` dopasowuje znormalizowany klucz sesji;
-`match.rawKeyPrefix` dopasowuje surowy klucz, w tym `agent::`.
+`match.rawKeyPrefix` dopasowuje surowy klucz zawierający `agent::`.
### Cytowania
`memory.citations` dotyczy wszystkich backendów:
-| Value | Zachowanie |
-| ---------------- | ---------------------------------------------------- |
-| `auto` (domyślne) | Uwzględnia stopkę `Source: ` we fragmentach |
-| `on` | Zawsze uwzględnia stopkę |
+| Wartość | Zachowanie |
+| ---------------- | -------------------------------------------------- |
+| `auto` (domyślnie) | Dołącza stopkę `Source: ` w fragmentach |
+| `on` | Zawsze dołącza stopkę |
| `off` | Pomija stopkę (ścieżka nadal jest przekazywana agentowi wewnętrznie) |
### Pełny przykład QMD
@@ -470,20 +480,20 @@ Domyślnie tylko DM. `match.keyPrefix` dopasowuje znormalizowany klucz sesji;
## Dreaming (eksperymentalne)
-Dreaming jest konfigurowane pod `plugins.entries.memory-core.config.dreaming`,
-a nie pod `agents.defaults.memorySearch`.
+Dreaming jest konfigurowane w `plugins.entries.memory-core.config.dreaming`,
+a nie w `agents.defaults.memorySearch`.
-Dreaming działa jako jedno zaplanowane przejście i wykorzystuje wewnętrzne fazy light/deep/REM jako
-szczegół implementacyjny.
+Dreaming działa jako jeden zaplanowany przebieg i używa wewnętrznych faz light/deep/REM jako
+szczegółu implementacyjnego.
-Aby poznać zachowanie koncepcyjne i polecenia ukośnikowe, zobacz [Dreaming](/concepts/dreaming).
+Aby zapoznać się z działaniem pojęciowym i poleceniami slash, zobacz [Dreaming](/pl/concepts/dreaming).
### Ustawienia użytkownika
-| Key | Type | Default | Opis |
+| Klucz | Typ | Domyślnie | Opis |
| ----------- | --------- | ----------- | ------------------------------------------------- |
-| `enabled` | `boolean` | `false` | Włącza lub wyłącza dreaming całkowicie |
-| `frequency` | `string` | `0 3 * * *` | Opcjonalna kadencja cron dla pełnego przejścia dreaming |
+| `enabled` | `boolean` | `false` | Całkowicie włącza lub wyłącza dreaming |
+| `frequency` | `string` | `0 3 * * *` | Opcjonalna częstotliwość cron dla pełnego przebiegu dreaming |
### Przykład
@@ -506,6 +516,6 @@ Aby poznać zachowanie koncepcyjne i polecenia ukośnikowe, zobacz [Dreaming](/c
Uwagi:
-- Dreaming zapisuje stan maszyny do `memory/.dreams/`.
-- Dreaming zapisuje czytelne dla człowieka dane narracyjne do `DREAMS.md` (lub istniejącego `dreams.md`).
-- Polityka faz light/deep/REM i progi są zachowaniem wewnętrznym, a nie config dostępnym dla użytkownika.
+- Dreaming zapisuje stan maszyny w `memory/.dreams/`.
+- Dreaming zapisuje czytelne dla człowieka narracyjne dane wyjściowe w `DREAMS.md` (lub istniejącym `dreams.md`).
+- Zasady i progi faz light/deep/REM są zachowaniem wewnętrznym, a nie konfiguracją przeznaczoną dla użytkownika.
diff --git a/docs/pl/tools/browser.md b/docs/pl/tools/browser.md
index 4f8e1b88b..f19162c64 100644
--- a/docs/pl/tools/browser.md
+++ b/docs/pl/tools/browser.md
@@ -1,40 +1,40 @@
---
read_when:
- Dodawanie automatyzacji przeglądarki sterowanej przez agenta
- - Debugowanie, dlaczego openclaw ingeruje w Twoją własną przeglądarkę Chrome
- - Implementowanie ustawień przeglądarki i cyklu życia w aplikacji macOS
+ - Debugowanie, dlaczego openclaw zakłóca działanie Twojego Chrome
+ - Implementowanie ustawień i cyklu życia przeglądarki w aplikacji macOS
summary: Zintegrowana usługa sterowania przeglądarką + polecenia akcji
-title: Browser (zarządzany przez OpenClaw)
+title: Przeglądarka (zarządzana przez OpenClaw)
x-i18n:
- generated_at: "2026-04-05T14:09:23Z"
+ generated_at: "2026-04-10T09:45:02Z"
model: gpt-5.4
provider: openai
- source_hash: a41162efd397ea918469e16aa67e554bcbb517b3112df1d3e7927539b6a0926a
+ source_hash: cd3424f62178bbf25923b8bc8e4d9f70e330f35428d01fe153574e5fa45d7604
source_path: tools/browser.md
workflow: 15
---
-# Browser (zarządzany przez openclaw)
+# Przeglądarka (zarządzana przez openclaw)
-OpenClaw może uruchamiać **dedykowany profil Chrome/Brave/Edge/Chromium**, którym steruje agent.
-Jest on odseparowany od Twojej osobistej przeglądarki i zarządzany przez małą lokalną
+OpenClaw może uruchamiać **dedykowany profil Chrome/Brave/Edge/Chromium**, który agent kontroluje.
+Jest on odizolowany od Twojej osobistej przeglądarki i zarządzany przez małą lokalną
usługę sterowania wewnątrz Gateway (tylko loopback).
-Perspektywa dla początkujących:
+Ujęcie dla początkujących:
-- Traktuj to jak **oddzielną przeglądarkę tylko dla agenta**.
+- Potraktuj to jako **oddzielną przeglądarkę tylko dla agenta**.
- Profil `openclaw` **nie** dotyka Twojego osobistego profilu przeglądarki.
-- Agent może **otwierać karty, czytać strony, klikać i wpisywać tekst** w bezpiecznym obszarze.
-- Wbudowany profil `user` podłącza się do Twojej prawdziwej zalogowanej sesji Chrome przez Chrome MCP.
+- Agent może **otwierać karty, odczytywać strony, klikać i wpisywać tekst** w bezpiecznej ścieżce.
+- Wbudowany profil `user` dołącza do Twojej prawdziwej zalogowanej sesji Chrome przez Chrome MCP.
## Co otrzymujesz
- Oddzielny profil przeglądarki o nazwie **openclaw** (domyślnie z pomarańczowym akcentem).
-- Deterministyczne sterowanie kartami (list/open/focus/close).
-- Akcje agenta (click/type/drag/select), snapshoty, zrzuty ekranu, PDF-y.
+- Deterministyczne sterowanie kartami (lista/otwieranie/fokus/zamykanie).
+- Akcje agenta (kliknięcie/wpisywanie/przeciąganie/zaznaczanie), snapshoty, zrzuty ekranu, pliki PDF.
- Opcjonalną obsługę wielu profili (`openclaw`, `work`, `remote`, ...).
-Ta przeglądarka **nie** jest Twoją codzienną przeglądarką. To bezpieczna, izolowana powierzchnia do
+Ta przeglądarka **nie** jest Twoją codzienną przeglądarką. To bezpieczna, odizolowana powierzchnia do
automatyzacji i weryfikacji przez agenta.
## Szybki start
@@ -46,16 +46,16 @@ openclaw browser --browser-profile openclaw open https://example.com
openclaw browser --browser-profile openclaw snapshot
```
-Jeśli pojawi się komunikat „Browser disabled”, włącz go w konfiguracji (patrz poniżej) i uruchom ponownie
+Jeśli pojawia się komunikat „Browser disabled”, włącz ją w konfiguracji (patrz niżej) i uruchom ponownie
Gateway.
-Jeśli całkowicie brakuje `openclaw browser`, albo agent mówi, że narzędzie browser
-jest niedostępne, przejdź do [Missing browser command or tool](/tools/browser#missing-browser-command-or-tool).
+Jeśli `openclaw browser` całkowicie nie istnieje albo agent mówi, że narzędzie przeglądarki
+jest niedostępne, przejdź do [Brak polecenia lub narzędzia browser](/pl/tools/browser#missing-browser-command-or-tool).
-## Sterowanie pluginem
+## Sterowanie przez plugin
-Domyślne narzędzie `browser` jest teraz dołączonym pluginem, który jest domyślnie
-włączony. Oznacza to, że możesz go wyłączyć lub zastąpić bez usuwania reszty
+Domyślne narzędzie `browser` jest teraz dołączonym pluginem, który jest
+domyślnie włączony. Oznacza to, że możesz go wyłączyć lub zastąpić bez usuwania reszty
systemu pluginów OpenClaw:
```json5
@@ -71,29 +71,29 @@ systemu pluginów OpenClaw:
```
Wyłącz dołączony plugin przed zainstalowaniem innego pluginu, który udostępnia
-to samo narzędzie `browser`. Domyślne działanie Browser wymaga obu warunków:
+tę samą nazwę narzędzia `browser`. Domyślne środowisko przeglądarki wymaga obu elementów:
-- `plugins.entries.browser.enabled` nie jest wyłączone
+- `plugins.entries.browser.enabled` nie może być wyłączone
- `browser.enabled=true`
-Jeśli wyłączysz tylko plugin, dołączone CLI Browser (`openclaw browser`),
-metoda gateway (`browser.request`), narzędzie agenta i domyślna usługa sterowania
-Browser znikną razem. Twoja konfiguracja `browser.*` pozostaje nienaruszona, aby
-mogła zostać ponownie użyta przez plugin zastępczy.
+Jeśli wyłączysz tylko plugin, dołączone CLI przeglądarki (`openclaw browser`),
+metoda gateway (`browser.request`), narzędzie agenta i domyślna usługa sterowania przeglądarką
+znikną razem. Twoja konfiguracja `browser.*` pozostanie nienaruszona, aby mogła zostać
+ponownie użyta przez plugin zastępczy.
-Dołączony plugin Browser jest teraz także właścicielem implementacji runtime Browser.
-Rdzeń zachowuje tylko współdzielone helpery Plugin SDK oraz re-eksporty zgodności dla
-starszych wewnętrznych ścieżek importu. W praktyce usunięcie lub zastąpienie pakietu pluginu Browser
-usuwa zestaw funkcji Browser zamiast pozostawiać drugi runtime należący do rdzenia.
+Dołączony plugin przeglądarki jest teraz również właścicielem implementacji runtime przeglądarki.
+Rdzeń zachowuje tylko współdzielone pomocniki Plugin SDK oraz re-eksporty zgodności dla
+starszych wewnętrznych ścieżek importu. W praktyce usunięcie lub zastąpienie pakietu pluginu
+przeglądarki usuwa zestaw funkcji przeglądarki zamiast pozostawiać drugi runtime należący do rdzenia.
-Zmiany konfiguracji Browser nadal wymagają restartu Gateway, aby dołączony plugin
-mógł ponownie zarejestrować swoją usługę Browser z nowymi ustawieniami.
+Zmiany konfiguracji przeglądarki nadal wymagają ponownego uruchomienia Gateway, aby dołączony plugin
+mógł ponownie zarejestrować swoją usługę przeglądarki z nowymi ustawieniami.
-## Brak polecenia browser lub narzędzia
+## Brak polecenia lub narzędzia browser
Jeśli `openclaw browser` nagle staje się nieznanym poleceniem po aktualizacji albo
-agent zgłasza brak narzędzia browser, najczęstszą przyczyną jest restrykcyjna
-lista `plugins.allow`, która nie zawiera `browser`.
+agent zgłasza brak narzędzia browser, najczęstszą przyczyną jest restrykcyjna lista
+`plugins.allow`, która nie zawiera `browser`.
Przykład błędnej konfiguracji:
@@ -105,7 +105,7 @@ Przykład błędnej konfiguracji:
}
```
-Napraw to, dodając `browser` do listy dozwolonych pluginów:
+Napraw to, dodając `browser` do allowlisty pluginów:
```json5
{
@@ -117,34 +117,34 @@ Napraw to, dodając `browser` do listy dozwolonych pluginów:
Ważne uwagi:
-- `browser.enabled=true` samo w sobie nie wystarczy, gdy ustawiono `plugins.allow`.
-- `plugins.entries.browser.enabled=true` także samo w sobie nie wystarczy, gdy ustawiono `plugins.allow`.
-- `tools.alsoAllow: ["browser"]` **nie** ładuje dołączonego pluginu Browser. Zmienia jedynie politykę narzędzi po tym, jak plugin został już załadowany.
-- Jeśli nie potrzebujesz restrykcyjnej listy dozwolonych pluginów, usunięcie `plugins.allow` także przywraca domyślne działanie dołączonego Browser.
+- `browser.enabled=true` samo w sobie nie wystarczy, gdy ustawione jest `plugins.allow`.
+- `plugins.entries.browser.enabled=true` samo w sobie również nie wystarczy, gdy ustawione jest `plugins.allow`.
+- `tools.alsoAllow: ["browser"]` **nie** ładuje dołączonego pluginu browser. To jedynie dostosowuje politykę narzędzi po tym, jak plugin został już załadowany.
+- Jeśli nie potrzebujesz restrykcyjnej allowlisty pluginów, usunięcie `plugins.allow` również przywraca domyślne zachowanie dołączonej przeglądarki.
Typowe objawy:
- `openclaw browser` jest nieznanym poleceniem.
-- brakuje `browser.request`.
-- agent zgłasza, że narzędzie browser jest niedostępne lub brakuje go.
+- Brakuje `browser.request`.
+- Agent zgłasza narzędzie browser jako niedostępne lub brakujące.
-## Profile: `openclaw` kontra `user`
+## Profile: `openclaw` vs `user`
-- `openclaw`: zarządzana, izolowana przeglądarka (nie wymaga rozszerzenia).
-- `user`: wbudowany profil podłączania Chrome MCP do Twojej **prawdziwej zalogowanej sesji Chrome**.
+- `openclaw`: zarządzana, odizolowana przeglądarka (nie wymaga rozszerzenia).
+- `user`: wbudowany profil dołączania Chrome MCP do Twojej **prawdziwej zalogowanej sesji Chrome**.
-Dla wywołań narzędzia Browser przez agenta:
+Dla wywołań narzędzia przeglądarki przez agenta:
-- Domyślnie: używaj izolowanej przeglądarki `openclaw`.
-- Preferuj `profile="user"`, gdy znaczenie mają istniejące zalogowane sesje i użytkownik
- siedzi przy komputerze, aby kliknąć/zatwierdzić ewentualny prompt podłączenia.
-- `profile` to jawne nadpisanie, gdy chcesz określony tryb przeglądarki.
+- Domyślnie: używaj odizolowanej przeglądarki `openclaw`.
+- Preferuj `profile="user"`, gdy mają znaczenie istniejące zalogowane sesje, a użytkownik
+ jest przy komputerze, aby kliknąć/zatwierdzić ewentualny prompt dołączenia.
+- `profile` jest jawnym nadpisaniem, gdy chcesz konkretny tryb przeglądarki.
-Ustaw `browser.defaultProfile: "openclaw"`, jeśli domyślnie chcesz tryb zarządzany.
+Ustaw `browser.defaultProfile: "openclaw"`, jeśli chcesz, aby domyślnie używany był tryb zarządzany.
## Konfiguracja
-Ustawienia Browser znajdują się w `~/.openclaw/openclaw.json`.
+Ustawienia przeglądarki znajdują się w `~/.openclaw/openclaw.json`.
```json5
{
@@ -187,32 +187,32 @@ Ustawienia Browser znajdują się w `~/.openclaw/openclaw.json`.
Uwagi:
-- Usługa sterowania Browser wiąże się z loopback na porcie wyprowadzonym z `gateway.port`
+- Usługa sterowania przeglądarką wiąże się z loopback na porcie wyprowadzonym z `gateway.port`
(domyślnie: `18791`, czyli gateway + 2).
- Jeśli nadpiszesz port Gateway (`gateway.port` lub `OPENCLAW_GATEWAY_PORT`),
- wyprowadzone porty Browser przesuwają się, aby pozostać w tej samej „rodzinie”.
-- `cdpUrl` domyślnie wskazuje zarządzany lokalny port CDP, jeśli nie jest ustawiony.
-- `remoteCdpTimeoutMs` dotyczy kontroli osiągalności zdalnego (nie-loopback) CDP.
-- `remoteCdpHandshakeTimeoutMs` dotyczy kontroli osiągalności handshake WebSocket zdalnego CDP.
-- Nawigacja Browser/otwieranie kart jest chronione przed SSRF przed nawigacją i ponownie sprawdzane w trybie best-effort na końcowym URL `http(s)` po nawigacji.
-- W ścisłym trybie SSRF sprawdzane są także wykrywanie/sondy zdalnych endpointów CDP (`cdpUrl`, w tym lookupi `/json/version`).
-- `browser.ssrfPolicy.dangerouslyAllowPrivateNetwork` domyślnie ma wartość `true` (model zaufanej sieci). Ustaw `false`, aby wymusić ścisłe przeglądanie wyłącznie publiczne.
-- `browser.ssrfPolicy.allowPrivateNetwork` pozostaje obsługiwane jako starszy alias zgodności.
-- `attachOnly: true` oznacza „nigdy nie uruchamiaj lokalnej przeglądarki; tylko podłączaj się, jeśli już działa”.
-- `color` i per-profil `color` zabarwiają UI Browser, aby było widać, który profil jest aktywny.
-- Profil domyślny to `openclaw` (samodzielna przeglądarka zarządzana przez OpenClaw). Użyj `defaultProfile: "user"`, aby przejść do zalogowanej przeglądarki użytkownika.
-- Kolejność automatycznego wykrywania: domyślna systemowa przeglądarka, jeśli jest oparta na Chromium; w przeciwnym razie Chrome → Brave → Edge → Chromium → Chrome Canary.
+ pochodne porty przeglądarki przesuną się tak, aby pozostać w tej samej „rodzinie”.
+- `cdpUrl` domyślnie wskazuje zarządzany lokalny port CDP, gdy nie jest ustawione.
+- `remoteCdpTimeoutMs` dotyczy kontroli osiągalności zdalnego (nie-loopbackowego) CDP.
+- `remoteCdpHandshakeTimeoutMs` dotyczy kontroli osiągalności handshaku WebSocket dla zdalnego CDP.
+- Nawigacja przeglądarki/otwieranie kart jest chronione przed SSRF przed nawigacją i w miarę możliwości sprawdzane ponownie dla końcowego adresu `http(s)` po nawigacji.
+- W ścisłym trybie SSRF zdalne wykrywanie/sondowanie endpointów CDP (`cdpUrl`, w tym wyszukiwania `/json/version`) również są sprawdzane.
+- `browser.ssrfPolicy.dangerouslyAllowPrivateNetwork` domyślnie ma wartość `true` (model zaufanej sieci). Ustaw `false`, aby wymusić ścisłe przeglądanie tylko publicznych zasobów.
+- `browser.ssrfPolicy.allowPrivateNetwork` pozostaje obsługiwane jako starszy alias dla zgodności.
+- `attachOnly: true` oznacza „nigdy nie uruchamiaj lokalnej przeglądarki; dołączaj tylko wtedy, gdy już działa”.
+- `color` oraz `color` dla poszczególnych profili nadają interfejsowi przeglądarki kolor, dzięki czemu widać, który profil jest aktywny.
+- Domyślny profil to `openclaw` (samodzielna przeglądarka zarządzana przez OpenClaw). Użyj `defaultProfile: "user"`, aby przejść na zalogowaną przeglądarkę użytkownika.
+- Kolejność automatycznego wykrywania: domyślna przeglądarka systemowa, jeśli jest oparta na Chromium; w przeciwnym razie Chrome → Brave → Edge → Chromium → Chrome Canary.
- Lokalne profile `openclaw` automatycznie przypisują `cdpPort`/`cdpUrl` — ustawiaj je tylko dla zdalnego CDP.
- `driver: "existing-session"` używa Chrome DevTools MCP zamiast surowego CDP. Nie
ustawiaj `cdpUrl` dla tego sterownika.
- Ustaw `browser.profiles..userDataDir`, gdy profil existing-session
- ma podłączać się do niestandardowego profilu użytkownika Chromium, takiego jak Brave lub Edge.
+ ma dołączać do niestandardowego profilu użytkownika Chromium, takiego jak Brave lub Edge.
## Używanie Brave (lub innej przeglądarki opartej na Chromium)
-Jeśli Twoją **domyślną systemową** przeglądarką jest przeglądarka oparta na Chromium (Chrome/Brave/Edge itd.),
-OpenClaw użyje jej automatycznie. Ustaw `browser.executablePath`, aby nadpisać
-autowykrywanie:
+Jeśli Twoja **domyślna przeglądarka systemowa** jest oparta na Chromium (Chrome/Brave/Edge itd.),
+OpenClaw używa jej automatycznie. Ustaw `browser.executablePath`, aby nadpisać
+automatyczne wykrywanie:
Przykład CLI:
@@ -243,52 +243,52 @@ openclaw config set browser.executablePath "/usr/bin/google-chrome"
}
```
-## Sterowanie lokalne a zdalne
+## Sterowanie lokalne vs zdalne
- **Sterowanie lokalne (domyślne):** Gateway uruchamia usługę sterowania loopback i może uruchomić lokalną przeglądarkę.
-- **Sterowanie zdalne (host węzła):** uruchom hosta węzła na komputerze, który ma przeglądarkę; Gateway będzie proxy'ować do niego akcje Browser.
-- **Zdalne CDP:** ustaw `browser.profiles..cdpUrl` (lub `browser.cdpUrl`), aby
- podłączyć się do zdalnej przeglądarki opartej na Chromium. W takim przypadku OpenClaw nie uruchomi lokalnej przeglądarki.
+- **Sterowanie zdalne (host węzła):** uruchom host węzła na komputerze, na którym znajduje się przeglądarka; Gateway będzie proxyfikować do niego akcje przeglądarki.
+- **Zdalny CDP:** ustaw `browser.profiles..cdpUrl` (lub `browser.cdpUrl`), aby
+ dołączyć do zdalnej przeglądarki opartej na Chromium. W takim przypadku OpenClaw nie uruchomi lokalnej przeglądarki.
-Zachowanie zatrzymywania różni się zależnie od trybu profilu:
+Zachowanie przy zatrzymywaniu różni się w zależności od trybu profilu:
- lokalne profile zarządzane: `openclaw browser stop` zatrzymuje proces przeglądarki, który
- uruchomił OpenClaw
-- profile attach-only i zdalnego CDP: `openclaw browser stop` zamyka aktywną
- sesję sterowania i usuwa nadpisania emulacji Playwright/CDP (viewport,
- schemat kolorów, locale, timezone, tryb offline i podobny stan), mimo że
- OpenClaw nie uruchomił żadnego procesu Browser
+ został uruchomiony przez OpenClaw
+- profile tylko-dołączane i zdalne profile CDP: `openclaw browser stop` zamyka aktywną
+ sesję sterowania i zwalnia nadpisania emulacji Playwright/CDP (viewport,
+ schemat kolorów, locale, strefę czasową, tryb offline i podobny stan), nawet
+ jeśli żaden proces przeglądarki nie został uruchomiony przez OpenClaw
-Zdalne URL-e CDP mogą zawierać auth:
+Zdalne adresy URL CDP mogą zawierać uwierzytelnianie:
-- tokeny query (np. `https://provider.example?token=`)
-- auth HTTP Basic (np. `https://user:pass@provider.example`)
+- Tokeny w query (np. `https://provider.example?token=`)
+- Uwierzytelnianie HTTP Basic (np. `https://user:pass@provider.example`)
-OpenClaw zachowuje auth przy wywoływaniu endpointów `/json/*` i przy łączeniu
-z WebSocket CDP. Preferuj zmienne środowiskowe lub menedżery sekretów dla
-tokenów zamiast commitować je do plików konfiguracji.
+OpenClaw zachowuje uwierzytelnianie przy wywoływaniu endpointów `/json/*` oraz podczas łączenia
+z WebSocketem CDP. Preferuj zmienne środowiskowe lub menedżery sekretów dla
+tokenów zamiast commitowania ich do plików konfiguracji.
-## Proxy Browser dla węzłów (domyślnie zero konfiguracji)
+## Proxy przeglądarki węzła (domyślnie zero konfiguracji)
-Jeśli uruchamiasz **hosta węzła** na komputerze, który ma Browser, OpenClaw może
-automatycznie kierować wywołania narzędzia Browser do tego węzła bez żadnej dodatkowej konfiguracji Browser.
-To domyślna ścieżka dla zdalnych gateway.
+Jeśli uruchamiasz **host węzła** na komputerze, który ma Twoją przeglądarkę, OpenClaw może
+automatycznie kierować wywołania narzędzia przeglądarki do tego węzła bez żadnej dodatkowej konfiguracji przeglądarki.
+To domyślna ścieżka dla zdalnych gatewayów.
Uwagi:
-- Host węzła udostępnia swoją lokalną usługę sterowania Browser przez **polecenie proxy**.
-- Profile pochodzą z własnej konfiguracji węzła `browser.profiles` (takiej samej jak lokalnie).
-- `nodeHost.browserProxy.allowProfiles` jest opcjonalne. Pozostaw puste dla starszego/domyslnego zachowania: wszystkie skonfigurowane profile pozostają osiągalne przez proxy, w tym trasy tworzenia/usuwania profili.
-- Jeśli ustawisz `nodeHost.browserProxy.allowProfiles`, OpenClaw potraktuje to jako granicę minimalnych uprawnień: można kierować tylko do profili z listy dozwolonych, a trwałe trasy tworzenia/usuwania profili są blokowane na powierzchni proxy.
-- Wyłącz, jeśli tego nie chcesz:
+- Host węzła udostępnia swój lokalny serwer sterowania przeglądarką przez **polecenie proxy**.
+- Profile pochodzą z własnej konfiguracji `browser.profiles` węzła (takiej samej jak lokalnie).
+- `nodeHost.browserProxy.allowProfiles` jest opcjonalne. Pozostaw puste dla starszego/dom yślnego zachowania: wszystkie skonfigurowane profile pozostają dostępne przez proxy, łącznie z trasami tworzenia/usuwania profili.
+- Jeśli ustawisz `nodeHost.browserProxy.allowProfiles`, OpenClaw potraktuje to jako granicę minimalnych uprawnień: tylko profile z allowlisty mogą być celem, a trasy tworzenia/usuwania trwałych profili są blokowane na powierzchni proxy.
+- Wyłącz to, jeśli nie chcesz z tego korzystać:
- Na węźle: `nodeHost.browserProxy.enabled=false`
- Na gateway: `gateway.nodes.browser.mode="off"`
## Browserless (hostowany zdalny CDP)
[Browserless](https://browserless.io) to hostowana usługa Chromium, która udostępnia
-URL-e połączeń CDP przez HTTPS i WebSocket. OpenClaw może używać obu form, ale
-dla zdalnego profilu Browser najprostszą opcją jest bezpośredni URL WebSocket
+adresy URL połączeń CDP przez HTTPS i WebSocket. OpenClaw może używać obu form, ale
+dla zdalnego profilu przeglądarki najprostszą opcją jest bezpośredni adres WebSocket URL
z dokumentacji połączeń Browserless.
Przykład:
@@ -312,30 +312,30 @@ Przykład:
Uwagi:
-- Zastąp `` swoim prawdziwym tokenem Browserless.
-- Wybierz endpoint regionu odpowiadający Twojemu kontu Browserless (zobacz ich dokumentację).
-- Jeśli Browserless daje Ci bazowy URL HTTPS, możesz albo przekształcić go do
- `wss://` dla bezpośredniego połączenia CDP, albo pozostawić URL HTTPS i pozwolić OpenClaw
+- Zastąp `` swoim rzeczywistym tokenem Browserless.
+- Wybierz endpoint regionu zgodny z Twoim kontem Browserless (zobacz ich dokumentację).
+- Jeśli Browserless podaje bazowy adres HTTPS URL, możesz albo przekonwertować go na
+ `wss://` dla bezpośredniego połączenia CDP, albo pozostawić adres HTTPS URL i pozwolić OpenClaw
wykryć `/json/version`.
-## Dostawcy bezpośredniego WebSocket CDP
+## Bezpośredni dostawcy WebSocket CDP
-Niektóre hostowane usługi Browser udostępniają **bezpośredni endpoint WebSocket** zamiast
-standardowego wykrywania CDP opartego na HTTP (`/json/version`). OpenClaw obsługuje oba warianty:
+Niektóre hostowane usługi przeglądarki udostępniają **bezpośredni endpoint WebSocket**
+zamiast standardowego wykrywania CDP opartego na HTTP (`/json/version`). OpenClaw obsługuje oba tryby:
- **Endpointy HTTP(S)** — OpenClaw wywołuje `/json/version`, aby wykryć
- URL WebSocket debuggera, a następnie się łączy.
+ adres URL debuggera WebSocket, a następnie się łączy.
- **Endpointy WebSocket** (`ws://` / `wss://`) — OpenClaw łączy się bezpośrednio,
- pomijając `/json/version`. Użyj tego dla usług takich jak
+ pomijając `/json/version`. Używaj tego w przypadku usług takich jak
[Browserless](https://browserless.io),
- [Browserbase](https://www.browserbase.com) albo dowolnego dostawcy, który przekazuje Ci
- URL WebSocket.
+ [Browserbase](https://www.browserbase.com) lub dowolnego dostawcy, który przekazuje Ci
+ adres URL WebSocket.
### Browserbase
-[Browserbase](https://www.browserbase.com) to chmurowa platforma do uruchamiania
-bezgłowych przeglądarek z wbudowanym rozwiązywaniem CAPTCHA, trybem stealth i
-proxy rezydencyjnymi.
+[Browserbase](https://www.browserbase.com) to platforma chmurowa do uruchamiania
+przeglądarek headless z wbudowanym rozwiązywaniem CAPTCHA, trybem stealth i
+rezydencyjnymi proxy.
```json5
{
@@ -357,61 +357,62 @@ proxy rezydencyjnymi.
Uwagi:
- [Zarejestruj się](https://www.browserbase.com/sign-up) i skopiuj swój **API Key**
- z [dashboardu Overview](https://www.browserbase.com/overview).
-- Zastąp `` swoim prawdziwym kluczem API Browserbase.
-- Browserbase automatycznie tworzy sesję Browser przy połączeniu WebSocket, więc nie
- jest potrzebny ręczny krok tworzenia sesji.
-- Darmowa warstwa pozwala na jedną sesję współbieżną i jedną godzinę Browser miesięcznie.
- Limity płatnych planów znajdziesz w [cenniku](https://www.browserbase.com/pricing).
-- Pełne API reference, przewodniki SDK i przykłady integracji znajdziesz w [dokumentacji Browserbase](https://docs.browserbase.com).
+ z [panelu Overview](https://www.browserbase.com/overview).
+- Zastąp `` swoim rzeczywistym kluczem API Browserbase.
+- Browserbase automatycznie tworzy sesję przeglądarki przy połączeniu WebSocket, więc
+ nie jest potrzebny ręczny krok tworzenia sesji.
+- Warstwa darmowa pozwala na jedną współbieżną sesję i jedną godzinę przeglądarki miesięcznie.
+ Zobacz [cennik](https://www.browserbase.com/pricing), aby poznać limity planów płatnych.
+- Zobacz [dokumentację Browserbase](https://docs.browserbase.com), aby uzyskać pełne
+ odniesienie do API, przewodniki po SDK i przykłady integracji.
## Bezpieczeństwo
Kluczowe założenia:
-- Sterowanie Browser działa tylko na loopback; dostęp przechodzi przez auth Gateway lub parowanie węzłów.
-- Samodzielne loopback HTTP API Browser używa **wyłącznie auth współdzielonym sekretem**:
- bearer auth tokenem gateway, `x-openclaw-password` albo HTTP Basic auth ze
+- Sterowanie przeglądarką działa tylko przez loopback; dostęp przechodzi przez uwierzytelnianie Gateway lub parowanie węzłów.
+- Samodzielne loopbackowe API HTTP przeglądarki używa **wyłącznie uwierzytelniania wspólnym sekretem**:
+ auth bearer tokenem gateway, `x-openclaw-password` lub HTTP Basic auth z
skonfigurowanym hasłem gateway.
-- Nagłówki tożsamości Tailscale Serve i `gateway.auth.mode: "trusted-proxy"` **nie**
- uwierzytelniają tego samodzielnego loopback API Browser.
-- Jeśli sterowanie Browser jest włączone i nie skonfigurowano auth współdzielonym sekretem, OpenClaw
- automatycznie generuje `gateway.auth.token` przy starcie i utrwala go w konfiguracji.
-- OpenClaw **nie** generuje automatycznie tego tokena, gdy `gateway.auth.mode` ma już wartość
+- Nagłówki tożsamości Tailscale Serve i `gateway.auth.mode: "trusted-proxy"`
+ **nie** uwierzytelniają tego samodzielnego loopbackowego API przeglądarki.
+- Jeśli sterowanie przeglądarką jest włączone i nie skonfigurowano uwierzytelniania wspólnym sekretem, OpenClaw
+ automatycznie generuje `gateway.auth.token` przy uruchomieniu i zapisuje go w konfiguracji.
+- OpenClaw **nie** generuje automatycznie tego tokenu, gdy `gateway.auth.mode` jest już ustawione na
`password`, `none` lub `trusted-proxy`.
-- Utrzymuj Gateway i wszystkie hosty węzłów w prywatnej sieci (Tailscale); unikaj wystawiania publicznego.
-- Traktuj zdalne URL-e/tokeny CDP jako sekrety; preferuj zmienne env albo menedżer sekretów.
+- Utrzymuj Gateway i wszelkie hosty węzłów w sieci prywatnej (Tailscale); unikaj publicznej ekspozycji.
+- Traktuj zdalne adresy URL/tokeny CDP jako sekrety; preferuj zmienne env lub menedżer sekretów.
-Wskazówki dla zdalnego CDP:
+Wskazówki dotyczące zdalnego CDP:
-- Jeśli to możliwe, preferuj szyfrowane endpointy (HTTPS lub WSS) i tokeny krótkotrwałe.
-- Unikaj osadzania długowiecznych tokenów bezpośrednio w plikach konfiguracji.
+- W miarę możliwości preferuj szyfrowane endpointy (HTTPS lub WSS) i tokeny krótkotrwałe.
+- Unikaj osadzania długotrwałych tokenów bezpośrednio w plikach konfiguracyjnych.
## Profile (wiele przeglądarek)
OpenClaw obsługuje wiele nazwanych profili (konfiguracji routingu). Profile mogą być:
-- **zarządzane przez openclaw**: dedykowana przeglądarka oparta na Chromium z własnym katalogiem danych użytkownika + portem CDP
-- **zdalne**: jawny URL CDP (przeglądarka oparta na Chromium uruchomiona gdzie indziej)
-- **istniejąca sesja**: Twój istniejący profil Chrome przez automatyczne połączenie Chrome DevTools MCP
+- **zarządzane przez openclaw**: dedykowana instancja przeglądarki opartej na Chromium z własnym katalogiem danych użytkownika i portem CDP
+- **zdalne**: jawny adres URL CDP (przeglądarka oparta na Chromium uruchomiona gdzie indziej)
+- **istniejąca sesja**: Twój istniejący profil Chrome przez auto-połączenie Chrome DevTools MCP
-Wartości domyślne:
+Domyślne ustawienia:
- Profil `openclaw` jest tworzony automatycznie, jeśli go brakuje.
-- Profil `user` jest wbudowany dla podłączania existing-session Chrome MCP.
-- Profile existing-session poza `user` są opt-in; twórz je przy użyciu `--driver existing-session`.
+- Profil `user` jest wbudowany dla dołączania do istniejącej sesji Chrome MCP.
+- Profile istniejących sesji poza `user` są opcjonalne; twórz je za pomocą `--driver existing-session`.
- Lokalne porty CDP są domyślnie przydzielane z zakresu **18800–18899**.
- Usunięcie profilu przenosi jego lokalny katalog danych do Kosza.
Wszystkie endpointy sterowania akceptują `?profile=`; CLI używa `--browser-profile`.
-## Existing-session przez Chrome DevTools MCP
+## Istniejąca sesja przez Chrome DevTools MCP
-OpenClaw może także podłączyć się do uruchomionego profilu przeglądarki opartej na Chromium przez
-oficjalny serwer Chrome DevTools MCP. Pozwala to ponownie używać kart i stanu logowania
-już otwartych w tym profilu Browser.
+OpenClaw może również dołączyć do działającego profilu przeglądarki opartej na Chromium przez
+oficjalny serwer Chrome DevTools MCP. Pozwala to ponownie wykorzystać karty i stan logowania
+już otwarte w tym profilu przeglądarki.
-Oficjalne tło i dokumentacja konfiguracji:
+Oficjalne materiały wprowadzające i referencje konfiguracyjne:
- [Chrome for Developers: Use Chrome DevTools MCP with your browser session](https://developer.chrome.com/blog/chrome-devtools-mcp-debug-your-browser-session)
- [Chrome DevTools MCP README](https://github.com/ChromeDevTools/chrome-devtools-mcp)
@@ -421,14 +422,14 @@ Wbudowany profil:
- `user`
Opcjonalnie: utwórz własny niestandardowy profil existing-session, jeśli chcesz inną
-nazwę, kolor lub katalog danych Browser.
+nazwę, kolor lub katalog danych przeglądarki.
-Domyślne zachowanie:
+Zachowanie domyślne:
-- Wbudowany profil `user` używa automatycznego połączenia Chrome MCP, które kieruje do
+- Wbudowany profil `user` używa auto-połączenia Chrome MCP, które jest kierowane do
domyślnego lokalnego profilu Google Chrome.
-Używaj `userDataDir` dla Brave, Edge, Chromium lub niestandardowego profilu Chrome:
+Użyj `userDataDir` dla Brave, Edge, Chromium lub niestandardowego profilu Chrome:
```json5
{
@@ -445,19 +446,19 @@ Używaj `userDataDir` dla Brave, Edge, Chromium lub niestandardowego profilu Chr
}
```
-Następnie w odpowiedniej przeglądarce:
+Następnie w odpowiadającej przeglądarce:
-1. Otwórz stronę inspect tej przeglądarki dla zdalnego debugowania.
+1. Otwórz stronę inspekcji tej przeglądarki dla zdalnego debugowania.
2. Włącz zdalne debugowanie.
-3. Utrzymuj Browser uruchomioną i zatwierdź prompt połączenia, gdy OpenClaw się podłączy.
+3. Pozostaw przeglądarkę uruchomioną i zatwierdź prompt połączenia, gdy OpenClaw się dołączy.
-Typowe strony inspect:
+Typowe strony inspekcji:
- Chrome: `chrome://inspect/#remote-debugging`
- Brave: `brave://inspect/#remote-debugging`
- Edge: `edge://inspect/#remote-debugging`
-Test smoke aktywnego podłączenia:
+Test smoke dla live attach:
```bash
openclaw browser --browser-profile user start
@@ -471,65 +472,67 @@ Jak wygląda powodzenie:
- `status` pokazuje `driver: existing-session`
- `status` pokazuje `transport: chrome-mcp`
- `status` pokazuje `running: true`
-- `tabs` wyświetla już otwarte karty Browser
-- `snapshot` zwraca refs z wybranej aktywnej karty
+- `tabs` wyświetla listę już otwartych kart przeglądarki
+- `snapshot` zwraca refy z wybranej aktywnej karty
-Co sprawdzić, jeśli podłączenie nie działa:
+Co sprawdzić, jeśli dołączenie nie działa:
- docelowa przeglądarka oparta na Chromium ma wersję `144+`
-- zdalne debugowanie jest włączone na stronie inspect tej przeglądarki
-- Browser wyświetliła prompt zgody na podłączenie i został on zaakceptowany
-- `openclaw doctor` migruje stare konfiguracje Browser oparte na rozszerzeniach i sprawdza,
- czy Chrome jest lokalnie zainstalowane dla domyślnych profili auto-connect, ale nie może
- włączyć po Twojej stronie zdalnego debugowania w Browser
+- zdalne debugowanie jest włączone na stronie inspekcji tej przeglądarki
+- przeglądarka wyświetliła prompt zgody na dołączenie i został on zaakceptowany
+- `openclaw doctor` migruje starą konfigurację przeglądarki opartą na rozszerzeniu i sprawdza, czy
+ Chrome jest zainstalowany lokalnie dla domyślnych profili auto-połączenia, ale nie może
+ włączyć po Twojej stronie zdalnego debugowania w przeglądarce
Użycie przez agenta:
-- Używaj `profile="user"`, gdy potrzebujesz zalogowanego stanu Browser użytkownika.
-- Jeśli używasz niestandardowego profilu existing-session, przekaż jego jawną nazwę.
-- Wybieraj ten tryb tylko wtedy, gdy użytkownik siedzi przy komputerze, aby zatwierdzić prompt podłączenia.
+- Użyj `profile="user"`, gdy potrzebujesz stanu zalogowanej przeglądarki użytkownika.
+- Jeśli używasz niestandardowego profilu existing-session, przekaż jawną nazwę tego profilu.
+- Wybieraj ten tryb tylko wtedy, gdy użytkownik jest przy komputerze, aby zatwierdzić
+ prompt dołączenia.
- Gateway lub host węzła może uruchomić `npx chrome-devtools-mcp@latest --autoConnect`
Uwagi:
-- Ta ścieżka jest bardziej ryzykowna niż izolowany profil `openclaw`, ponieważ może
- działać wewnątrz Twojej zalogowanej sesji Browser.
-- OpenClaw nie uruchamia Browser dla tego sterownika; podłącza się tylko do
+- Ta ścieżka jest bardziej ryzykowna niż odizolowany profil `openclaw`, ponieważ może
+ działać wewnątrz Twojej zalogowanej sesji przeglądarki.
+- OpenClaw nie uruchamia przeglądarki dla tego sterownika; dołącza tylko do
istniejącej sesji.
-- OpenClaw używa tu oficjalnego przepływu Chrome DevTools MCP `--autoConnect`. Jeśli
- ustawiono `userDataDir`, OpenClaw przekaże je dalej, aby wskazać ten jawny
- katalog danych użytkownika Chromium.
-- Zrzuty ekranu existing-session obsługują przechwytywanie całych stron i przechwytywanie elementów `--ref` ze snapshotów, ale nie selektory CSS `--element`.
-- Zrzuty ekranu stron existing-session działają bez Playwright przez Chrome MCP.
- Oparte na ref zrzuty ekranów elementów (`--ref`) także tam działają, ale `--full-page`
+- OpenClaw używa tutaj oficjalnego przepływu `--autoConnect` Chrome DevTools MCP. Jeśli
+ ustawiono `userDataDir`, OpenClaw przekazuje je dalej, aby kierować do tego jawnego
+ katalogu danych użytkownika Chromium.
+- Zrzuty ekranu existing-session obsługują przechwycenia strony i przechwycenia elementów `--ref`
+ ze snapshotów, ale nie selektory CSS `--element`.
+- Zrzuty ekranu strony existing-session działają bez Playwright przez Chrome MCP.
+ Zrzuty ekranów elementów oparte na refach (`--ref`) także tam działają, ale `--full-page`
nie może być łączone z `--ref` ani `--element`.
- Akcje existing-session są nadal bardziej ograniczone niż ścieżka
- zarządzanej Browser:
+ zarządzanej przeglądarki:
- `click`, `type`, `hover`, `scrollIntoView`, `drag` i `select` wymagają
- refów snapshotu zamiast selektorów CSS
- - `click` obsługuje tylko lewy przycisk (bez nadpisywania przycisku i modyfikatorów)
- - `type` nie obsługuje `slowly=true`; używaj `fill` albo `press`
+ refów ze snapshotów zamiast selektorów CSS
+ - `click` obsługuje tylko lewy przycisk myszy (bez nadpisywania przycisku ani modyfikatorów)
+ - `type` nie obsługuje `slowly=true`; użyj `fill` lub `press`
- `press` nie obsługuje `delayMs`
- `hover`, `scrollIntoView`, `drag`, `select`, `fill` i `evaluate` nie
- obsługują nadpisań timeout per wywołanie
- - `select` obecnie obsługuje tylko pojedynczą wartość
-- Existing-session `wait --url` obsługuje wzorce exact, substring i glob
- tak jak inne sterowniki Browser. `wait --load networkidle` nie jest jeszcze obsługiwane.
-- Hooki upload existing-session wymagają `ref` lub `inputRef`, obsługują jeden plik na raz
- i nie obsługują kierowania do `element` przez CSS.
-- Hooki dialog existing-session nie obsługują nadpisań timeout.
-- Niektóre funkcje nadal wymagają ścieżki zarządzanej Browser, w tym batch
- actions, eksport PDF, przechwytywanie pobrań i `responsebody`.
-- Existing-session jest lokalne względem hosta. Jeśli Chrome znajduje się na innym komputerze lub
- w innej przestrzeni nazw sieci, użyj zdalnego CDP albo hosta węzła.
+ obsługują nadpisywania timeoutów dla pojedynczego wywołania
+ - `select` obecnie obsługuje tylko jedną wartość
+- Existing-session `wait --url` obsługuje wzorce dokładne, podciągi i globy
+ tak jak inne sterowniki przeglądarki. `wait --load networkidle` nie jest jeszcze obsługiwane.
+- Hooki uploadu existing-session wymagają `ref` lub `inputRef`, obsługują po jednym pliku naraz
+ i nie obsługują kierowania przez CSS `element`.
+- Hooki dialogów existing-session nie obsługują nadpisywania timeoutów.
+- Niektóre funkcje nadal wymagają ścieżki zarządzanej przeglądarki, w tym
+ akcje wsadowe, eksport PDF, przechwytywanie pobrań i `responsebody`.
+- Existing-session jest lokalne względem hosta. Jeśli Chrome działa na innej maszynie lub w
+ innej przestrzeni nazw sieci, użyj zamiast tego zdalnego CDP lub hosta węzła.
## Gwarancje izolacji
-- **Dedykowany katalog danych użytkownika**: nigdy nie dotyka Twojego osobistego profilu Browser.
-- **Dedykowane porty**: unika `9222`, aby zapobiec kolizjom z przepływami deweloperskimi.
-- **Deterministyczne sterowanie kartami**: karty są wskazywane przez `targetId`, a nie „ostatnia karta”.
+- **Dedykowany katalog danych użytkownika**: nigdy nie dotyka Twojego osobistego profilu przeglądarki.
+- **Dedykowane porty**: unika `9222`, aby zapobiegać kolizjom z przepływami pracy deweloperskiej.
+- **Deterministyczne sterowanie kartami**: kierowanie na karty przez `targetId`, a nie „ostatnią kartę”.
-## Wybór Browser
+## Wybór przeglądarki
Przy lokalnym uruchamianiu OpenClaw wybiera pierwszą dostępną:
@@ -549,14 +552,14 @@ Platformy:
## API sterowania (opcjonalne)
-Tylko dla integracji lokalnych Gateway udostępnia małe loopback HTTP API:
+Tylko dla integracji lokalnych, Gateway udostępnia niewielkie loopbackowe API HTTP:
- Status/start/stop: `GET /`, `POST /start`, `POST /stop`
- Karty: `GET /tabs`, `POST /tabs/open`, `POST /tabs/focus`, `DELETE /tabs/:targetId`
- Snapshot/zrzut ekranu: `GET /snapshot`, `POST /screenshot`
- Akcje: `POST /navigate`, `POST /act`
- Hooki: `POST /hooks/file-chooser`, `POST /hooks/dialog`
-- Pobrania: `POST /download`, `POST /wait/download`
+- Pobieranie: `POST /download`, `POST /wait/download`
- Debugowanie: `GET /console`, `POST /pdf`
- Debugowanie: `GET /errors`, `GET /requests`, `POST /trace/start`, `POST /trace/stop`, `POST /highlight`
- Sieć: `POST /response/body`
@@ -566,17 +569,38 @@ Tylko dla integracji lokalnych Gateway udostępnia małe loopback HTTP API:
Wszystkie endpointy akceptują `?profile=`.
-Jeśli skonfigurowano auth gateway współdzielonym sekretem, trasy HTTP Browser także wymagają auth:
+Jeśli skonfigurowano uwierzytelnianie gateway wspólnym sekretem, trasy HTTP przeglądarki również wymagają uwierzytelnienia:
- `Authorization: Bearer `
-- `x-openclaw-password: ` albo HTTP Basic auth z tym hasłem
+- `x-openclaw-password: ` lub HTTP Basic auth z tym hasłem
Uwagi:
-- To samodzielne loopback API Browser **nie** korzysta z trusted-proxy ani
- nagłówków tożsamości Tailscale Serve.
-- Jeśli `gateway.auth.mode` ma wartość `none` albo `trusted-proxy`, te loopbackowe trasy Browser
- nie dziedziczą tych trybów opartych na tożsamości; utrzymuj je tylko na loopback.
+- To samodzielne loopbackowe API przeglądarki **nie** używa nagłówków trusted-proxy ani
+ tożsamości Tailscale Serve.
+- Jeśli `gateway.auth.mode` ma wartość `none` lub `trusted-proxy`, te loopbackowe trasy przeglądarki
+ nie dziedziczą tych trybów opartych na tożsamości; utrzymuj je wyłącznie na loopback.
+
+### Kontrakt błędów `/act`
+
+`POST /act` używa ustrukturyzowanej odpowiedzi błędu dla walidacji na poziomie trasy i
+błędów polityki:
+
+```json
+{ "error": "", "code": "ACT_*" }
+```
+
+Obecne wartości `code`:
+
+- `ACT_KIND_REQUIRED` (HTTP 400): brakuje `kind` lub nie został rozpoznany.
+- `ACT_INVALID_REQUEST` (HTTP 400): payload akcji nie przeszedł normalizacji lub walidacji.
+- `ACT_SELECTOR_UNSUPPORTED` (HTTP 400): użyto `selector` z nieobsługiwanym rodzajem akcji.
+- `ACT_EVALUATE_DISABLED` (HTTP 403): `evaluate` (lub `wait --fn`) jest wyłączone w konfiguracji.
+- `ACT_TARGET_ID_MISMATCH` (HTTP 403): najwyższego poziomu lub wsadowe `targetId` koliduje z celem żądania.
+- `ACT_EXISTING_SESSION_UNSUPPORTED` (HTTP 501): akcja nie jest obsługiwana dla profili existing-session.
+
+Inne błędy runtime nadal mogą zwracać `{ "error": "" }` bez pola
+`code`.
### Wymaganie Playwright
@@ -586,58 +610,58 @@ czytelny błąd 501.
Co nadal działa bez Playwright:
-- snapshoty ARIA
-- zrzuty ekranów całych stron dla zarządzanej przeglądarki `openclaw`, gdy dostępny jest
- WebSocket CDP per karta
-- zrzuty ekranów całych stron dla profili `existing-session` / Chrome MCP
-- zrzuty ekranów `--ref` dla existing-session na podstawie wyjścia snapshotu
+- Snapshoty ARIA
+- Zrzuty ekranu strony dla zarządzanej przeglądarki `openclaw`, gdy dostępny jest WebSocket
+ CDP dla danej karty
+- Zrzuty ekranu strony dla profili `existing-session` / Chrome MCP
+- Zrzuty ekranów existing-session oparte na `--ref` z danych wyjściowych snapshotu
Co nadal wymaga Playwright:
- `navigate`
- `act`
-- snapshoty AI / snapshoty ról
-- zrzuty ekranów elementów przez selektory CSS (`--element`)
-- pełny eksport PDF Browser
+- AI snapshoty / snapshoty ról
+- Zrzuty ekranów elementów przez selektor CSS (`--element`)
+- eksport pełnego PDF przeglądarki
-Zrzuty ekranów elementów odrzucają też `--full-page`; trasa zwraca `fullPage is
+Zrzuty ekranów elementów również odrzucają `--full-page`; trasa zwraca `fullPage is
not supported for element screenshots`.
Jeśli widzisz `Playwright is not available in this gateway build`, zainstaluj pełny
-pakiet Playwright (nie `playwright-core`) i uruchom ponownie gateway albo ponownie zainstaluj
-OpenClaw z obsługą Browser.
+pakiet Playwright (nie `playwright-core`) i uruchom ponownie gateway albo zainstaluj
+OpenClaw ponownie z obsługą przeglądarki.
#### Instalacja Playwright w Dockerze
-Jeśli Twój Gateway działa w Dockerze, unikaj `npx playwright` (konflikty z nadpisaniami npm).
-Użyj dołączonego CLI:
+Jeśli Twój Gateway działa w Dockerze, unikaj `npx playwright` (konflikty nadpisań npm).
+Zamiast tego użyj dołączonego CLI:
```bash
docker compose run --rm openclaw-cli \
node /app/node_modules/playwright-core/cli.js install chromium
```
-Aby utrwalać pobrania Browser, ustaw `PLAYWRIGHT_BROWSERS_PATH` (na przykład,
+Aby zachować pobrane przeglądarki, ustaw `PLAYWRIGHT_BROWSERS_PATH` (na przykład
`/home/node/.cache/ms-playwright`) i upewnij się, że `/home/node` jest utrwalane przez
-`OPENCLAW_HOME_VOLUME` albo bind mount. Zobacz [Docker](/install/docker).
+`OPENCLAW_HOME_VOLUME` lub bind mount. Zobacz [Docker](/pl/install/docker).
## Jak to działa (wewnętrznie)
Przepływ na wysokim poziomie:
-- Mały **serwer sterowania** akceptuje żądania HTTP.
+- Mały **serwer sterowania** przyjmuje żądania HTTP.
- Łączy się z przeglądarkami opartymi na Chromium (Chrome/Brave/Edge/Chromium) przez **CDP**.
-- Dla bardziej zaawansowanych akcji (click/type/snapshot/PDF) używa **Playwright** na warstwie
+- W przypadku zaawansowanych akcji (kliknięcie/wpisywanie/snapshot/PDF) używa **Playwright** na wierzchu
CDP.
-- Gdy brakuje Playwright, dostępne są tylko operacje niezależne od Playwright.
+- Gdy brakuje Playwright, dostępne są tylko operacje niewymagające Playwright.
-Ten projekt utrzymuje po stronie agenta stabilny, deterministyczny interfejs, a jednocześnie pozwala
-przełączać lokalne/zdalne przeglądarki i profile.
+Taki projekt zapewnia agentowi stabilny, deterministyczny interfejs, a jednocześnie pozwala
+zamieniać lokalne/zdalne przeglądarki i profile.
-## Krótka dokumentacja CLI
+## Krótkie odniesienie do CLI
Wszystkie polecenia akceptują `--browser-profile `, aby wskazać konkretny profil.
-Wszystkie polecenia akceptują też `--json` dla maszynowo czytelnego wyjścia (stabilne ładunki).
+Wszystkie polecenia akceptują też `--json` dla danych wyjściowych czytelnych maszynowo (stabilne payloady).
Podstawy:
@@ -670,9 +694,9 @@ Inspekcja:
Uwaga dotycząca cyklu życia:
-- Dla profili attach-only i zdalnego CDP `openclaw browser stop` nadal jest
- poprawnym poleceniem czyszczenia po testach. Zamknie aktywną sesję sterowania i
- wyczyści tymczasowe nadpisania emulacji zamiast zabijać właściwą
+- Dla profili tylko-dołączanych i zdalnych profili CDP `openclaw browser stop` nadal jest
+ właściwym poleceniem czyszczenia po testach. Zamyka aktywną sesję sterowania i
+ czyści tymczasowe nadpisania emulacji zamiast zamykać bazową
przeglądarkę.
- `openclaw browser errors --clear`
- `openclaw browser requests --filter api --clear`
@@ -724,37 +748,37 @@ Stan:
Uwagi:
-- `upload` i `dialog` to wywołania **uzbrajające**; uruchamiaj je przed kliknięciem/naciśnięciem,
- które wyzwala wybór pliku/dialog.
-- Ścieżki wyjściowe pobrań i śladów są ograniczone do katalogów tymczasowych OpenClaw:
- - ślady: `/tmp/openclaw` (fallback: `${os.tmpdir()}/openclaw`)
- - pobrania: `/tmp/openclaw/downloads` (fallback: `${os.tmpdir()}/openclaw/downloads`)
-- Ścieżki uploadów są ograniczone do katalogu tymczasowego uploadów OpenClaw:
- - uploady: `/tmp/openclaw/uploads` (fallback: `${os.tmpdir()}/openclaw/uploads`)
-- `upload` może także ustawiać wejścia plików bezpośrednio przez `--input-ref` lub `--element`.
+- `upload` i `dialog` to wywołania **uzbrajające**; uruchom je przed kliknięciem/naciśnięciem,
+ które wywoła wybór pliku/okno dialogowe.
+- Ścieżki wyjściowe pobierania i trace są ograniczone do tymczasowych katalogów głównych OpenClaw:
+ - traces: `/tmp/openclaw` (fallback: `${os.tmpdir()}/openclaw`)
+ - downloads: `/tmp/openclaw/downloads` (fallback: `${os.tmpdir()}/openclaw/downloads`)
+- Ścieżki uploadu są ograniczone do tymczasowego katalogu głównego uploadów OpenClaw:
+ - uploads: `/tmp/openclaw/uploads` (fallback: `${os.tmpdir()}/openclaw/uploads`)
+- `upload` może też ustawiać wejścia plików bezpośrednio przez `--input-ref` lub `--element`.
- `snapshot`:
- - `--format ai` (domyślnie, gdy Playwright jest zainstalowany): zwraca snapshot AI z liczbowymi refami (`aria-ref=""`).
+ - `--format ai` (domyślnie, gdy Playwright jest zainstalowany): zwraca snapshot AI z numerycznymi refami (`aria-ref=""`).
- `--format aria`: zwraca drzewo dostępności (bez refów; tylko do inspekcji).
- `--efficient` (lub `--mode efficient`): kompaktowy preset snapshotu ról (interactive + compact + depth + niższe maxChars).
- - Domyślna konfiguracja (tylko narzędzie/CLI): ustaw `browser.snapshotDefaults.mode: "efficient"`, aby używać wydajnych snapshotów, gdy wywołujący nie przekazuje trybu (zobacz [Gateway configuration](/gateway/configuration-reference#browser)).
+ - Domyślna konfiguracja (tylko tool/CLI): ustaw `browser.snapshotDefaults.mode: "efficient"`, aby używać wydajnych snapshotów, gdy wywołujący nie przekazuje trybu (zobacz [Konfiguracja Gateway](/pl/gateway/configuration-reference#browser)).
- Opcje snapshotu ról (`--interactive`, `--compact`, `--depth`, `--selector`) wymuszają snapshot oparty na rolach z refami takimi jak `ref=e12`.
- - `--frame "