chore(i18n): refresh pl translations

This commit is contained in:
openclaw-docs-i18n[bot] 2026-04-10 09:53:53 +00:00
parent 6f6e9b6d4a
commit 08f7e3c846
11 changed files with 3842 additions and 1956 deletions

View File

@ -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.
<Note>
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.
</Note>
## 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 <lookup>
# Anuluj działające zadanie (zabija sesję podrzędną)
# Anuluj uruchomione zadanie (zabija sesję podrzędną)
openclaw tasks cancel <lookup>
# 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 <lookup>
openclaw tasks flow cancel <lookup>
@ -79,18 +75,18 @@ openclaw tasks flow cancel <lookup>
## 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.
<Tip>
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.
</Tip>
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 <lookup> state_changes
@ -179,7 +173,7 @@ Kolumny wyjściowe: ID zadania, rodzaj, status, dostarczenie, ID uruchomienia, s
openclaw tasks show <lookup>
```
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 <lookup>
```
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 <lookup> <done_only|state_changes|silent>
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 <lookup> [--json]
openclaw tasks flow cancel <lookup>
```
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 przechowywane zadania
### Gdzie przechowywane 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

View File

@ -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 `<active_memory_plugin>...</active_memory_plugin>` 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/<agent>/sessions/active-memory/<blocking-memory-sub-agent-session-id>.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)

View File

@ -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

View File

@ -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.
<Tip>
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.
</Tip>
### 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ć.
<Tip>
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.
</Tip>
@ -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

View File

@ -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=<level>`. `--thinking <level>` nadal ustawia
globalne ustawienie zapasowe, a starsza forma `--model-thinking <provider/model=level>` 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)

File diff suppressed because it is too large Load Diff

View File

@ -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ą
konserwac 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
`<tool_call>...</tool_call>`, `<function_call>...</function_call>`,
`<tool_calls>...</tool_calls>`, `<function_calls>...</function_calls>` 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.<skillKey>`, 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.<skillKey>`, 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`.

File diff suppressed because it is too large Load Diff

View File

@ -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 t `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 |
<Warning>
Zmiana modelu lub `outputDimensionality` uruchamia automatyczne pełne ponowne indeksowanie.
Zmiana modelu lub `outputDimensionality` uruchamia automatyczne pełne przeindeksowanie.
</Warning>
---
## 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:<id>:`.
`match.rawKeyPrefix` dopasowuje surowy klucz zawierający `agent:<id>:`.
### Cytowania
`memory.citations` dotyczy wszystkich backendów:
| Value | Zachowanie |
| ---------------- | ---------------------------------------------------- |
| `auto` (domyślne) | Uwzględnia stopkę `Source: <path#line>` we fragmentach |
| `on` | Zawsze uwzględnia stopkę |
| Wartość | Zachowanie |
| ---------------- | -------------------------------------------------- |
| `auto` (domyślnie) | Dołącza stopkę `Source: <path#line>` 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.

View File

@ -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.<name>.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.<name>.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.<name>.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=<token>`)
- auth HTTP Basic (np. `https://user:pass@provider.example`)
- Tokeny w query (np. `https://provider.example?token=<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 `<BROWSERLESS_API_KEY>` 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 `<BROWSERLESS_API_KEY>` 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 `<BROWSERBASE_API_KEY>` 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 `<BROWSERBASE_API_KEY>` 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 **1880018899**.
- Usunięcie profilu przenosi jego lokalny katalog danych do Kosza.
Wszystkie endpointy sterowania akceptują `?profile=<name>`; 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=<name>`.
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 <gateway token>`
- `x-openclaw-password: <gateway password>` albo HTTP Basic auth z tym hasłem
- `x-openclaw-password: <gateway 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": "<message>", "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": "<message>" }` 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 <name>`, 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ści
- 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ć bazo
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="<n>"`).
- `--format ai` (domyślnie, gdy Playwright jest zainstalowany): zwraca snapshot AI z numerycznymi refami (`aria-ref="<n>"`).
- `--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 "<iframe selector>"` ogranicza snapshoty ról do iframe (łączy się z refami ról takimi jak `e12`).
- `--interactive` wypisuje płaską, łatwą do wyboru listę elementów interaktywnych (najlepszą do wykonywania akcji).
- `--labels` dodaje zrzut ekranu tylko aktualnego viewportu z nałożonymi etykietami refów (wypisuje `MEDIA:<path>`).
- `click`/`type`/itd. wymagają `ref` ze `snapshot` (albo liczbowego `12`, albo refu roli `e12`).
Selektory CSS celowo nieobsługiwane dla akcji.
- `--frame "<iframe selector>"` ogranicza snapshoty ról do iframe'a (paruje się z refami ról takimi jak `e12`).
- `--interactive` wyświetla płaską, łatwą do wyboru listę elementów interaktywnych (najlepszą do sterowania akcjami).
- `--labels` dodaje zrzut ekranu tylko viewportu z nałożonymi etykietami refów (wypisuje `MEDIA:<path>`).
- `click`/`type`/itd. wymagają `ref` ze `snapshot` (numerycznego `12` albo refu roli `e12`).
Selektory CSS celowo nieobsługiwane dla akcji.
## Snapshoty i refy
OpenClaw obsługuje dwa style „snapshotów”:
- **AI snapshot (liczbowe refy)**: `openclaw browser snapshot` (domyślnie; `--format ai`)
- Wyjście: tekstowy snapshot zawierający liczbowe refy.
- **Snapshot AI (numeryczne refy)**: `openclaw browser snapshot` (domyślnie; `--format ai`)
- Wynik: tekstowy snapshot zawierający numeryczne refy.
- Akcje: `openclaw browser click 12`, `openclaw browser type 23 "hello"`.
- Wewnętrznie ref jest rozwiązywany przez `aria-ref` Playwright.
- **Snapshot ról (refy ról jak `e12`)**: `openclaw browser snapshot --interactive` (albo `--compact`, `--depth`, `--selector`, `--frame`)
- Wyjście: lista/drzewo oparte na rolach z `[ref=e12]` (oraz opcjonalnie `[nth=1]`).
- **Snapshot ról (refy ról takie jak `e12`)**: `openclaw browser snapshot --interactive` (lub `--compact`, `--depth`, `--selector`, `--frame`)
- Wynik: lista/drzewo oparte na rolach z `[ref=e12]` (i opcjonalnym `[nth=1]`).
- Akcje: `openclaw browser click e12`, `openclaw browser highlight e12`.
- Wewnętrznie ref jest rozwiązywany przez `getByRole(...)` (plus `nth()` dla duplikatów).
- Dodaj `--labels`, aby dołączyć zrzut ekranu viewportu z nałożonymi etykietami `e12`.
@ -762,13 +786,13 @@ OpenClaw obsługuje dwa style „snapshotów”:
Zachowanie refów:
- Refy **nie są stabilne między nawigacjami**; jeśli coś się nie powiedzie, uruchom ponownie `snapshot` i użyj świeżego refu.
- Jeśli snapshot ról został wykonany z `--frame`, refy ról są ograniczone do tego iframe do czasu następnego snapshotu ról.
- Jeśli snapshot ról został wykonany z `--frame`, refy ról są ograniczone do tego iframe'a aż do następnego snapshotu ról.
## Rozszerzenia wait
## Rozszerzone możliwości `wait`
Możesz czekać na coś więcej niż tylko czas/tekst:
Możesz czekać na więcej niż tylko czas/tekst:
- Czekanie na URL (obsługiwane globy przez Playwright):
- Czekanie na URL (globy obsługiwane przez Playwright):
- `openclaw browser wait --url "**/dash"`
- Czekanie na stan ładowania:
- `openclaw browser wait --load networkidle`
@ -777,7 +801,7 @@ Możesz czekać na coś więcej niż tylko czas/tekst:
- Czekanie, aż selektor stanie się widoczny:
- `openclaw browser wait "#main"`
Można to łączyć:
Można je łączyć:
```bash
openclaw browser wait "#main" \
@ -793,16 +817,16 @@ Gdy akcja się nie powiedzie (np. „not visible”, „strict mode violation”
1. `openclaw browser snapshot --interactive`
2. Użyj `click <ref>` / `type <ref>` (preferuj refy ról w trybie interactive)
3. Jeśli nadal się nie powiedzie: `openclaw browser highlight <ref>`, aby zobaczyć, w co celuje Playwright
3. Jeśli nadal się nie powiedzie: `openclaw browser highlight <ref>`, aby zobaczyć, na co kieruje Playwright
4. Jeśli strona zachowuje się dziwnie:
- `openclaw browser errors --clear`
- `openclaw browser requests --filter api --clear`
5. Do głębokiego debugowania: nagraj ślad:
5. Do głębokiego debugowania: nagraj trace:
- `openclaw browser trace start`
- odtwórz problem
- `openclaw browser trace stop` (wypisuje `TRACE:<path>`)
## Wyjście JSON
## Dane wyjściowe JSON
`--json` służy do skryptów i narzędzi strukturalnych.
@ -815,18 +839,18 @@ openclaw browser requests --filter api --json
openclaw browser cookies --json
```
Snapshoty ról w JSON zawierają `refs` oraz mały blok `stats` (lines/chars/refs/interactive), dzięki czemu narzędzia mogą analizować rozmiar i gęstość ładunku.
Snapshoty ról w JSON zawierają `refs` oraz mały blok `stats` (lines/chars/refs/interactive), aby narzędzia mogły analizować rozmiar i gęstość payloadu.
## Ustawienia stanu i środowiska
## Pokrętła stanu i środowiska
Są przydatne w przepływach typu „spraw, żeby strona zachowywała się jak X”:
Są przydatne w przepływach „spraw, aby witryna zachowywała się jak X”:
- Cookies: `cookies`, `cookies set`, `cookies clear`
- Storage: `storage local|session get|set|clear`
- Offline: `set offline on|off`
- Headers: `set headers --headers-json '{"X-Debug":"1"}'` (starsze `set headers --json '{"X-Debug":"1"}'` nadal jest obsługiwane)
- Auth HTTP Basic: `set credentials user pass` (lub `--clear`)
- Geolokalizacja: `set geo <lat> <lon> --origin "https://example.com"` (lub `--clear`)
- HTTP Basic auth: `set credentials user pass` (lub `--clear`)
- Geolocation: `set geo <lat> <lon> --origin "https://example.com"` (lub `--clear`)
- Media: `set media dark|light|no-preference|none`
- Timezone / locale: `set timezone ...`, `set locale ...`
- Device / viewport:
@ -835,13 +859,13 @@ Są przydatne w przepływach typu „spraw, żeby strona zachowywała się jak X
## Bezpieczeństwo i prywatność
- Profil Browser openclaw może zawierać zalogowane sesje; traktuj go jako wrażliwy.
- Profil przeglądarki openclaw może zawierać zalogowane sesje; traktuj go jako wrażliwy.
- `browser act kind=evaluate` / `openclaw browser evaluate` oraz `wait --fn`
wykonują dowolny JavaScript w kontekście strony. Prompt injection może tym sterować.
Wyłącz to przez `browser.evaluateEnabled=false`, jeśli tego nie potrzebujesz.
- W przypadku logowania i uwag dotyczących antybotów (X/Twitter itd.) zobacz [Browser login + X/Twitter posting](/tools/browser-login).
- Utrzymuj Gateway/hosta węzła jako prywatne (tylko loopback lub tailnet).
- Endpointy zdalnego CDP są potężne; tuneluj je i chroń.
- W przypadku logowań i uwag dotyczących anti-botów (X/Twitter itd.) zobacz [Logowanie w przeglądarce + publikowanie na X/Twitter](/pl/tools/browser-login).
- Utrzymuj Gateway/host węzła w prywatnym środowisku (tylko loopback lub tailnet).
- Zdalne endpointy CDP są potężne; tuneluj je i zabezpieczaj.
Przykład trybu ścisłego (domyślnie blokowanie prywatnych/wewnętrznych miejsc docelowych):
@ -859,34 +883,34 @@ Przykład trybu ścisłego (domyślnie blokowanie prywatnych/wewnętrznych miejs
## Rozwiązywanie problemów
W przypadku problemów specyficznych dla Linuxa (szczególnie snap Chromium) zobacz
[Browser troubleshooting](/tools/browser-linux-troubleshooting).
W przypadku problemów specyficznych dla Linuxa (zwłaszcza snap Chromium) zobacz
[Rozwiązywanie problemów z przeglądarką](/pl/tools/browser-linux-troubleshooting).
Dla konfiguracji split-host WSL2 Gateway + Windows Chrome zobacz
[WSL2 + Windows + remote Chrome CDP troubleshooting](/tools/browser-wsl2-windows-remote-cdp-troubleshooting).
W przypadku konfiguracji rozdzielonego hosta WSL2 Gateway + Windows Chrome zobacz
[WSL2 + Windows + rozwiązywanie problemów ze zdalnym Chrome CDP](/pl/tools/browser-wsl2-windows-remote-cdp-troubleshooting).
## Narzędzia agenta + jak działa sterowanie
Agent otrzymuje **jedno narzędzie** do automatyzacji Browser:
Agent otrzymuje **jedno narzędzie** do automatyzacji przeglądarki:
- `browser` — status/start/stop/tabs/open/focus/close/snapshot/screenshot/navigate/act
Jak to działa:
Jak to się mapuje:
- `browser snapshot` zwraca stabilne drzewo UI (AI lub ARIA).
- `browser act` używa identyfikatorów `ref` ze snapshotów do click/type/drag/select.
- `browser screenshot` przechwytuje piksele (całą stronę albo element).
- `browser act` używa identyfikatorów `ref` ze snapshotu do kliknięcia/wpisywania/przeciągania/zaznaczania.
- `browser screenshot` przechwytuje piksele (cała strona lub element).
- `browser` akceptuje:
- `profile`, aby wybrać nazwany profil Browser (`openclaw`, `chrome` albo zdalny CDP).
- `target` (`sandbox` | `host` | `node`), aby wybrać miejsce działania Browser.
- `profile`, aby wybrać nazwany profil przeglądarki (openclaw, chrome lub zdalny CDP).
- `target` (`sandbox` | `host` | `node`), aby wybrać, gdzie znajduje się przeglądarka.
- W sesjach sandboxowanych `target: "host"` wymaga `agents.defaults.sandbox.browser.allowHostControl=true`.
- Jeśli pominięto `target`: sesje sandboxowane domyślnie używają `sandbox`, a sesje niesandboxowane `host`.
- Jeśli połączony jest węzeł obsługujący Browser, narzędzie może automatycznie kierować ruch do niego, chyba że przypniesz `target="host"` lub `target="node"`.
- Jeśli `target` zostanie pominięte: sesje sandboxowane domyślnie używają `sandbox`, a sesje niesandboxowane `host`.
- Jeśli podłączony jest węzeł z obsługą przeglądarki, narzędzie może automatycznie kierować do niego wywołania, chyba że przypniesz `target="host"` lub `target="node"`.
To utrzymuje deterministyczne działanie agenta i pozwala uniknąć kruchych selektorów.
Dzięki temu agent pozostaje deterministyczny i unika kruchych selektorów.
## Powiązane
- [Tools Overview](/tools) — wszystkie dostępne narzędzia agenta
- [Sandboxing](/gateway/sandboxing) — sterowanie Browser w środowiskach sandboxowanych
- [Security](/gateway/security) — ryzyka sterowania Browser i utwardzanie
- [Przegląd narzędzi](/pl/tools) — wszystkie dostępne narzędzia agenta
- [Sandboxing](/pl/gateway/sandboxing) — sterowanie przeglądarką w środowiskach sandboxowanych
- [Bezpieczeństwo](/pl/gateway/security) — ryzyka i utwardzanie sterowania przeglądarką

View File

@ -1,66 +1,69 @@
---
read_when:
- Konfigurowanie zatwierdzeń exec lub list dozwolonych
- Implementowanie UX zatwierdzeń exec w aplikacji macOS
- Przeglądanie promptów wyjścia z sandboxa i ich konsekwencji
- Implementacja UX zatwierdzeń exec w aplikacji macOS
- Przegląd promptów wyjścia z sandboxa i ich konsekwencji
summary: Zatwierdzenia exec, listy dozwolonych i prompty wyjścia z sandboxa
title: Zatwierdzenia exec
x-i18n:
generated_at: "2026-04-08T02:19:40Z"
generated_at: "2026-04-10T09:45:19Z"
model: gpt-5.4
provider: openai
source_hash: 6041929185bab051ad873cc4822288cb7d6f0470e19e7ae7a16b70f76dfc2cd9
source_hash: 5f4a2e2f1f3c13a1d1926c9de0720513ea8a74d1ca571dbe74b188d8c560c14c
source_path: tools/exec-approvals.md
workflow: 15
---
# Zatwierdzenia exec
Zatwierdzenia exec to **zabezpieczenie aplikacji towarzyszącej / hosta węzła** pozwalające agentowi działającemu w sandboxie uruchamiać
polecenia na rzeczywistym hoście (`gateway` lub `node`). Potraktuj to jak blokadę bezpieczeństwa:
polecenia są dozwolone tylko wtedy, gdy polityka + lista dozwolonych + (opcjonalne) zatwierdzenie użytkownika są zgodne.
Zatwierdzenia exec **dodatkiem** do polityki narzędzi i kontroli elevated (chyba że elevated jest ustawione na `full`, co pomija zatwierdzenia).
Efektywna polityka jest **bardziej rygorystyczną** z `tools.exec.*` i domyślnych ustawień zatwierdzeń; jeśli pole zatwierdzeń zostanie pominięte, używana jest wartość `tools.exec`.
Exec hosta używa również lokalnego stanu zatwierdzeń na tej maszynie. Lokalne dla hosta
`ask: "always"` w `~/.openclaw/exec-approvals.json` nadal wyświetla prompty, nawet jeśli
domyślne ustawienia sesji lub konfiguracji żądają `ask: "on-miss"`.
Zatwierdzenia exec to **zabezpieczenie aplikacji towarzyszącej / hosta węzła** umożliwiające agentowi działającemu w sandboxie uruchamianie
poleceń na rzeczywistym hoście (`gateway` lub `node`). Traktuj to jak blokadę bezpieczeństwa:
polecenia są dozwolone tylko wtedy, gdy polityka + lista dozwolonych + (opcjonalnie) zgoda użytkownika są ze sobą zgodne.
Zatwierdzenia exec działają **dodatkowo** względem polityki narzędzi i bramkowania elevated (chyba że elevated jest ustawione na `full`, co pomija zatwierdzenia).
Skuteczna polityka jest **bardziej restrykcyjną** z `tools.exec.*` i domyślnych ustawień zatwierdzeń; jeśli pole zatwierdzeń jest pominięte, używana jest wartość z `tools.exec`.
Exec hosta używa także lokalnego stanu zatwierdzeń na tej maszynie. Lokalne ustawienie hosta
`ask: "always"` w `~/.openclaw/exec-approvals.json` powoduje dalsze wyświetlanie promptów, nawet jeśli
sesja lub domyślna konfiguracja żądają `ask: "on-miss"`.
Użyj `openclaw approvals get`, `openclaw approvals get --gateway` lub
`openclaw approvals get --node <id|name|ip>`, aby sprawdzić żądaną politykę,
źródła polityki hosta i wynik efektywny.
źródła polityki hosta oraz wynik skuteczny.
Dla maszyny lokalnej `openclaw exec-policy show` pokazuje ten sam scalony widok, a
`openclaw exec-policy set|preset` może zsynchronizować lokalnie żądaną politykę z
lokalnym plikiem zatwierdzeń hosta w jednym kroku. Gdy zakres lokalny żąda `host=node`,
`openclaw exec-policy show` zgłasza ten zakres w czasie działania jako zarządzany przez node, zamiast
udawać, że lokalny plik zatwierdzeń jest skutecznym źródłem prawdy.
Jeśli interfejs aplikacji towarzyszącej **nie jest dostępny**, każde żądanie wymagające promptu jest
rozstrzygane przez **ask fallback** (domyślnie: deny).
rozstrzygane przez **awaryjne zachowanie ask** (domyślnie: odmowa).
Natywni klienci zatwierdzeń w czacie mogą również udostępniać specyficzne dla kanału elementy interakcji w
wiadomości oczekującego zatwierdzenia. Na przykład Matrix może dodawać skróty reakcji do
promptu zatwierdzenia (`✅` pozwól raz, `❌` odrzuć i `♾️` pozwól zawsze, gdy dostępne),
jednocześnie pozostawiając polecenia `/approve ...` w wiadomości jako rozwiązanie zapasowe.
Natywne klienckie mechanizmy zatwierdzania na czacie mogą również udostępniać udogodnienia specyficzne dla kanału w oczekującej wiadomości o zatwierdzeniu. Na przykład Matrix może inicjalizować skróty reakcji w prompcie zatwierdzenia (`✅` zezwól raz, `❌` odmów oraz `♾️` zezwól zawsze, gdy dostępne),
jednocześnie pozostawiając polecenia `/approve ...` w wiadomości jako mechanizm zapasowy.
## Gdzie to ma zastosowanie
## Gdzie ma to zastosowanie
Zatwierdzenia exec są egzekwowane lokalnie na hoście wykonania:
Zatwierdzenia exec są wymuszane lokalnie na hoście wykonania:
- **host gateway** → proces `openclaw` na maszynie gateway
- **host node** → runner węzła (aplikacja towarzysząca macOS lub bezgłowy host węzła)
- **host node** → runner węzła (aplikacja towarzysząca macOS lub bezgłowy host node)
Uwaga dotycząca modelu zaufania:
- Wywołujący uwierzytelnieni przez Gateway są zaufanymi operatorami dla tego Gateway.
- Sparowane węzły rozszerzają tę zdolność zaufanego operatora na host node.
- Zatwierdzenia exec zmniejszają ryzyko przypadkowego wykonania, ale nie są granicą uwierzytelniania per użytkownik.
- Zatwierdzone uruchomienia na hoście node wiążą kanoniczny kontekst wykonania: kanoniczne cwd, dokładne argv, powiązanie env
gdy występuje oraz przypiętą ścieżkę do pliku wykonywalnego, gdy ma to zastosowanie.
- Dla skryptów powłoki i bezpośrednich wywołań plików interpreterów/runtime OpenClaw również próbuje powiązać
jeden konkretny lokalny operand pliku. Jeśli ten powiązany plik zmieni się po zatwierdzeniu, ale przed wykonaniem,
- Wywołujący uwierzytelnieni względem Gateway są zaufanymi operatorami tego Gateway.
- Sparowane węzły rozszerzają te zaufane uprawnienia operatora na host node.
- Zatwierdzenia exec ograniczają ryzyko przypadkowego wykonania, ale nie stanowią granicy uwierzytelniania per użytkownik.
- Zatwierdzone uruchomienia na hoście node wiążą kanoniczny kontekst wykonania: kanoniczny cwd, dokładne argv, powiązanie env,
gdy występuje, oraz przypiętą ścieżkę do pliku wykonywalnego, gdy ma to zastosowanie.
- Dla skryptów powłoki i bezpośrednich wywołań plików interpretera/runtime OpenClaw próbuje także powiązać
jeden konkretny operand lokalnego pliku. Jeśli ten powiązany plik zmieni się po zatwierdzeniu, ale przed wykonaniem,
uruchomienie zostanie odrzucone zamiast wykonać zmienioną treść.
- To powiązanie pliku jest celowo realizowane według zasady best-effort, a nie jako pełny model semantyczny każdego
interpretera/runtime i ścieżki ładowania. Jeśli tryb zatwierdzania nie potrafi zidentyfikować dokładnie jednego konkretnego lokalnego
pliku do powiązania, odmawia wygenerowania uruchomienia opartego na zatwierdzeniu zamiast udawać pełne pokrycie.
- To wiązanie plików jest celowo rozwiązaniem opartym na najlepszej próbie, a nie kompletnym modelem semantycznym każdego
interpretera/runtime i każdej ścieżki ładowania. Jeśli tryb zatwierdzania nie potrafi zidentyfikować dokładnie jednego konkretnego lokalnego
pliku do powiązania, odmawia utworzenia uruchomienia opartego na zatwierdzeniu, zamiast udawać pełne pokrycie.
Podział na macOS:
- **usługa hosta node** przekazuje `system.run` do **aplikacji macOS** przez lokalne IPC.
- **aplikacja macOS** egzekwuje zatwierdzenia i wykonuje polecenie w kontekście UI.
- **aplikacja macOS** wymusza zatwierdzenia i wykonuje polecenie w kontekście UI.
## Ustawienia i przechowywanie
@ -103,14 +106,14 @@ Przykładowy schemat:
}
```
## Tryb „YOLO” bez zatwierdz
## Tryb „YOLO” bez zatwierdzania
Jeśli chcesz, aby exec hosta działał bez promptów zatwierdzania, musisz otworzyć **obie** warstwy polityki:
Jeśli chcesz, aby exec hosta działał bez promptów zatwierdzenia, musisz otworzyć **obie** warstwy polityki:
- żądaną politykę exec w konfiguracji OpenClaw (`tools.exec.*`)
- lokalną dla hosta politykę zatwierdzeń w `~/.openclaw/exec-approvals.json`
- lokalną politykę zatwierdzeń hosta w `~/.openclaw/exec-approvals.json`
Jest to teraz domyślne zachowanie hosta, chyba że jawnie je zaostrzysz:
Jest to teraz domyślne zachowanie hosta, o ile nie zaostrzysz go jawnie:
- `tools.exec.security`: `full` na `gateway`/`node`
- `tools.exec.ask`: `off`
@ -118,12 +121,12 @@ Jest to teraz domyślne zachowanie hosta, chyba że jawnie je zaostrzysz:
Ważne rozróżnienie:
- `tools.exec.host=auto` wybiera miejsce uruchomienia exec: sandbox, jeśli dostępny, w przeciwnym razie gateway.
- `tools.exec.host=auto` wybiera miejsce wykonywania exec: sandbox, jeśli jest dostępny, w przeciwnym razie gateway.
- YOLO wybiera sposób zatwierdzania exec hosta: `security=full` plus `ask=off`.
- W trybie YOLO OpenClaw nie dodaje osobnej heurystycznej bramki zatwierdzeń dla maskowania poleceń ponad skonfigurowaną politykę exec hosta.
- `auto` nie sprawia, że routing do gateway staje się darmowym obejściem z sesji działającej w sandboxie. Żądanie per wywołanie `host=node` jest dozwolone z `auto`, a `host=gateway` jest dozwolone z `auto` tylko wtedy, gdy nie jest aktywne środowisko sandbox. Jeśli chcesz stabilnej domyślnej wartości innej niż auto, ustaw `tools.exec.host` lub użyj jawnie `/exec host=...`.
- W trybie YOLO OpenClaw nie dodaje osobnej heurystycznej bramki zatwierdzania zaciemniania poleceń ponad skonfigurowaną politykę exec hosta.
- `auto` nie sprawia, że routowanie do gateway staje się darmowym obejściem z sesji sandboxowanej. Żądanie per wywołanie `host=node` jest dozwolone z `auto`, a `host=gateway` jest dozwolone z `auto` tylko wtedy, gdy nie działa żadne środowisko sandbox. Jeśli chcesz stabilnej domyślnej wartości innej niż auto, ustaw `tools.exec.host` lub użyj jawnie `/exec host=...`.
Jeśli chcesz bardziej konserwatywnej konfiguracji, zaostrz z powrotem dowolną warstwę do `allowlist` / `on-miss`
Jeśli chcesz bardziej zachowawczej konfiguracji, ponownie zaostrz dowolną z warstw do `allowlist` / `on-miss`
lub `deny`.
Trwała konfiguracja hosta gateway „nigdy nie pytaj”:
@ -135,7 +138,7 @@ openclaw config set tools.exec.ask off
openclaw gateway restart
```
Następnie ustaw plik zatwierdzeń hosta zgodnie z tym:
Następnie ustaw zgodny plik zatwierdzeń hosta:
```bash
openclaw approvals set --stdin <<'EOF'
@ -150,7 +153,22 @@ openclaw approvals set --stdin <<'EOF'
EOF
```
Dla hosta node zastosuj zamiast tego ten sam plik zatwierdzeń na tym węźle:
Lokalny skrót do tej samej polityki hosta gateway na bieżącej maszynie:
```bash
openclaw exec-policy preset yolo
```
Ten lokalny skrót aktualizuje oba elementy:
- lokalne `tools.exec.host/security/ask`
- lokalne ustawienia domyślne `~/.openclaw/exec-approvals.json`
Jest on celowo ograniczony tylko do lokalnego środowiska. Jeśli musisz zdalnie zmienić zatwierdzenia hosta gateway lub hosta node,
nadal używaj `openclaw approvals set --gateway` lub
`openclaw approvals set --node <id|name|ip>`.
Dla hosta node zastosuj zamiast tego ten sam plik zatwierdzeń na danym węźle:
```bash
openclaw approvals set --node <id|name|ip> --stdin <<'EOF'
@ -165,39 +183,45 @@ openclaw approvals set --node <id|name|ip> --stdin <<'EOF'
EOF
```
Ważne ograniczenie tylko lokalne:
- `openclaw exec-policy` nie synchronizuje zatwierdzeń node
- `openclaw exec-policy set --host node` jest odrzucane
- zatwierdzenia exec dla node są pobierane z node w czasie działania, więc aktualizacje kierowane do node muszą używać `openclaw approvals --node ...`
Skrót tylko dla sesji:
- `/exec security=full ask=off` zmienia tylko bieżącą sesję.
- `/elevated full` to skrót awaryjny, który również pomija zatwierdzenia exec dla tej sesji.
- `/elevated full` to skrót awaryjny break-glass, który również pomija zatwierdzenia exec dla tej sesji.
Jeśli plik zatwierdzeń hosta pozostaje bardziej rygorystyczny niż konfiguracja, nadal wygrywa bardziej rygorystyczna polityka hosta.
Jeśli plik zatwierdzeń hosta pozostanie bardziej restrykcyjny niż konfiguracja, bardziej restrykcyjna polityka hosta nadal wygrywa.
## Przełączniki polityki
## Elementy sterujące polityki
### Security (`exec.security`)
- **deny**: zablokuj wszystkie żądania exec hosta.
- **allowlist**: zezwalaj tylko na polecenia z listy dozwolonych.
- **full**: zezwalaj na wszystko (odpowiednik elevated).
- **deny**: blokuje wszystkie żądania exec hosta.
- **allowlist**: zezwala tylko na polecenia znajdujące się na liście dozwolonych.
- **full**: zezwala na wszystko (odpowiednik elevated).
### Ask (`exec.ask`)
- **off**: nigdy nie wyświetlaj promptu.
- **on-miss**: wyświetl prompt tylko wtedy, gdy lista dozwolonych nie pasuje.
- **always**: wyświetlaj prompt dla każdego polecenia.
- trwałe zaufanie `allow-always` nie tłumi promptów, gdy efektywny tryb ask to `always`
- **off**: nigdy nie wyświetla promptu.
- **on-miss**: wyświetla prompt tylko wtedy, gdy lista dozwolonych nie pasuje.
- **always**: wyświetla prompt przy każdym poleceniu.
- trwałe zaufanie `allow-always` nie wyłącza promptów, gdy skuteczny tryb ask to `always`
### Ask fallback (`askFallback`)
Jeśli prompt jest wymagany, ale żaden UI nie jest osiągalny, fallback decyduje:
Jeśli prompt jest wymagany, ale żaden UI nie jest osiągalny, zachowanie awaryjne określa wynik:
- **deny**: blokuj.
- **allowlist**: zezwalaj tylko wtedy, gdy lista dozwolonych pasuje.
- **full**: zezwalaj.
- **deny**: blokuje.
- **allowlist**: zezwala tylko wtedy, gdy lista dozwolonych pasuje.
- **full**: zezwala.
### Wzmocnienie eval inline dla interpreterów (`tools.exec.strictInlineEval`)
### Wzmocnienie inline interpreter eval (`tools.exec.strictInlineEval`)
Gdy `tools.exec.strictInlineEval=true`, OpenClaw traktuje formy eval kodu inline jako wymagające zatwierdzenia, nawet jeśli sam plik wykonywalny interpretera znajduje się na liście dozwolonych.
Gdy `tools.exec.strictInlineEval=true`, OpenClaw traktuje formy inline code-eval jako wymagające zatwierdzenia, nawet jeśli sam binarny interpreter znajduje się na liście dozwolonych.
Przykłady:
@ -209,16 +233,16 @@ Przykłady:
- `lua -e`
- `osascript -e`
To obrona warstwowa dla loaderów interpreterów, które nie mapują się czysto do jednego stabilnego operandu pliku. W trybie ścisłym:
To mechanizm defense-in-depth dla loaderów interpreterów, które nie mapują się czysto na jeden stabilny operand pliku. W trybie ścisłym:
- te polecenia nadal wymagają jawnego zatwierdzenia;
- `allow-always` nie zapisuje automatycznie dla nich nowych wpisów listy dozwolonych.
- `allow-always` nie utrwala dla nich automatycznie nowych wpisów listy dozwolonych.
## Allowlist (per agent)
## Lista dozwolonych (per agent)
Listy dozwolonych są **per agent**. Jeśli istnieje wielu agentów, przełącz, którego agenta
edytujesz w aplikacji macOS. Wzorce są **niezależnymi od wielkości liter dopasowaniami glob**.
Wzorce powinny rozwiązywać się do **ścieżek plików wykonywalnych** (wpisy zawierające tylko basename są ignorowane).
Listy dozwolonych są **per agent**. Jeśli istnieje wielu agentów, przełącz agenta,
którego edytujesz, w aplikacji macOS. Wzorce to **dopasowania glob bez rozróżniania wielkości liter**.
Wzorce powinny rozwiązywać się do **ścieżek binarnych** (wpisy zawierające tylko basename są ignorowane).
Starsze wpisy `agents.default` są migrowane do `agents.main` podczas ładowania.
Łańcuchy powłoki, takie jak `echo ok && pwd`, nadal wymagają, aby każdy segment najwyższego poziomu spełniał reguły listy dozwolonych.
@ -231,42 +255,42 @@ Przykłady:
Każdy wpis listy dozwolonych śledzi:
- **id** stabilny UUID używany jako tożsamość w UI (opcjonalnie)
- **last used** znacznik czasu
- **last used command**
- **last resolved path**
- **ostatnie użycie** znacznik czasu
- **ostatnio użyte polecenie**
- **ostatnio rozpoznana ścieżka**
## Auto-allow skill CLIs
## Automatyczne zezwalanie na CLI Skills
Gdy **Auto-allow skill CLIs** jest włączone, pliki wykonywalne wskazywane przez znane Skills
są traktowane jako wpisy listy dozwolonych na węzłach (węzeł macOS lub bezgłowy host węzła). Używa to
`skills.bins` przez Gateway RPC do pobrania listy plików binarnych skill. Wyłącz to, jeśli chcesz rygorystycznych ręcznych list dozwolonych.
są traktowane jako znajdujące się na liście dozwolonych na węzłach (macOS node lub bezgłowy host node). Wykorzystuje to
`skills.bins` przez Gateway RPC do pobrania listy binariów Skills. Wyłącz tę opcję, jeśli chcesz stosować ścisłe ręczne listy dozwolonych.
Ważne uwagi dotyczące zaufania:
- To **niejawna wygodna lista dozwolonych**, oddzielna od ręcznych wpisów listy dozwolonych opartych na ścieżkach.
- To **niejawna wygodna lista dozwolonych**, oddzielona od ręcznych wpisów listy dozwolonych opartych na ścieżkach.
- Jest przeznaczona dla zaufanych środowisk operatora, w których Gateway i node znajdują się w tej samej granicy zaufania.
- Jeśli potrzebujesz rygorystycznego jawnego zaufania, pozostaw `autoAllowSkills: false` i używaj tylko ręcznych wpisów listy dozwolonych opartych na ścieżkach.
- Jeśli potrzebujesz ściśle jawnego zaufania, pozostaw `autoAllowSkills: false` i używaj wyłącznie ręcznych wpisów ścieżek na liście dozwolonych.
## Safe bins (tylko stdin)
`tools.exec.safeBins` definiuje małą listę plików binarnych **tylko stdin** (na przykład `cut`),
które mogą działać w trybie allowlist **bez** jawnych wpisów listy dozwolonych. Safe bins odrzucają
pozycyjne argumenty plików i tokeny podobne do ścieżek, więc mogą działać tylko na przychodzącym strumieniu.
Traktuj to jako wąską szybką ścieżkę dla filtrów strumieni, a nie ogólną listę zaufania.
**Nie** dodawaj interpreterów ani plików binarnych runtime (na przykład `python3`, `node`, `ruby`, `bash`, `sh`, `zsh`) do `safeBins`.
Jeśli polecenie potrafi wykonywać eval kodu, uruchamiać podpolecenia lub z założenia czytać pliki, preferuj jawne wpisy listy dozwolonych i pozostaw włączone prompty zatwierdzeń.
`tools.exec.safeBins` definiuje małą listę binariów **tylko stdin** (na przykład `cut`),
które mogą działać w trybie allowlist **bez** jawnych wpisów na liście dozwolonych. Safe bins odrzucają
pozycyjne argumenty plików i tokeny przypominające ścieżki, więc mogą działać wyłącznie na strumieniu wejściowym.
Traktuj to jako wąską szybką ścieżkę dla filtrów strumienia, a nie ogólną listę zaufania.
**Nie** dodawaj interpreterów ani binariów runtime (na przykład `python3`, `node`, `ruby`, `bash`, `sh`, `zsh`) do `safeBins`.
Jeśli polecenie z założenia może wykonywać kod, uruchamiać podpolecenia lub odczytywać pliki, preferuj jawne wpisy listy dozwolonych i pozostaw włączone prompty zatwierdzania.
Niestandardowe safe bins muszą definiować jawny profil w `tools.exec.safeBinProfiles.<bin>`.
Walidacja jest deterministyczna wyłącznie na podstawie kształtu argv (bez sprawdzania istnienia systemu plików hosta), co
zapobiega zachowaniu typu oracle istnienia plików wynikającemu z różnic allow/deny.
Walidacja jest deterministyczna wyłącznie na podstawie kształtu argv (bez sprawdzania istnienia plików w systemie plików hosta), co
zapobiega zachowaniu typu oracle istnienia pliku wynikającemu z różnic między allow/deny.
Opcje zorientowane na pliki są odrzucane dla domyślnych safe bins (na przykład `sort -o`, `sort --output`,
`sort --files0-from`, `sort --compress-program`, `sort --random-source`,
`sort --temporary-directory`/`-T`, `wc --files0-from`, `jq -f/--from-file`,
`grep -f/--file`).
Safe bins egzekwują również jawne polityki flag per plik binarny dla opcji, które łamią zachowanie wyłącznie stdin
(na przykład `sort -o/--output/--compress-program` i rekursywne flagi grep).
Długie opcje są walidowane w trybie fail-closed w trybie safe-bin: nieznane flagi i niejednoznaczne
Safe bins wymuszają także jawną politykę flag per binarium dla opcji, które naruszają zachowanie ograniczone do stdin
(na przykład `sort -o/--output/--compress-program` i flagi rekurencyjne grep).
Długie opcje są walidowane w trybie safe-bin zgodnie z zasadą fail-closed: nieznane flagi i niejednoznaczne
skróty są odrzucane.
Odrzucane flagi według profilu safe-bin:
Flagi odrzucane przez profil safe-bin:
[//]: # "SAFE_BIN_DENIED_FLAGS:START"
@ -277,31 +301,31 @@ Odrzucane flagi według profilu safe-bin:
[//]: # "SAFE_BIN_DENIED_FLAGS:END"
Safe bins wymuszają również traktowanie tokenów argv jako **dosłownego tekstu** podczas wykonywania (bez globbingu
Safe bins wymuszają także traktowanie tokenów argv jako **tekstu dosłownego** podczas wykonania (bez rozwijania globów
i bez rozwijania `$VARS`) dla segmentów tylko stdin, więc wzorce takie jak `*` lub `$HOME/...` nie mogą zostać
użyte do przemycenia odczytu plików.
Safe bins muszą również rozwiązywać się z zaufanych katalogów plików binarnych (domyślne katalogi systemowe plus opcjonalne
`tools.exec.safeBinTrustedDirs`). Wpisy `PATH` nigdy nie są automatycznie zaufane.
użyte do przemycania odczytów plików.
Safe bins muszą również rozwiązywać się z zaufanych katalogów binarnych (domyślne katalogi systemowe plus opcjonalne
`tools.exec.safeBinTrustedDirs`). Wpisy `PATH` nigdy nie są automatycznie uznawane za zaufane.
Domyślne zaufane katalogi safe-bin są celowo minimalne: `/bin`, `/usr/bin`.
Jeśli Twój plik wykonywalny safe-bin znajduje się w ścieżkach menedżera pakietów/użytkownika (na przykład
`/opt/homebrew/bin`, `/usr/local/bin`, `/opt/local/bin`, `/snap/bin`), dodaj je jawnie
do `tools.exec.safeBinTrustedDirs`.
Łączenie poleceń powłoki i przekierowania nie są automatycznie dozwolone w trybie allowlist.
Łączenie poleceń powłoki (`&&`, `||`, `;`) jest dozwolone, gdy każdy segment najwyższego poziomu spełnia zasady listy dozwolonych
(w tym safe bins lub auto-allow skill). Przekierowania nadal nie są obsługiwane w trybie allowlist.
Łączenie poleceń powłoki (`&&`, `||`, `;`) jest dozwolone, gdy każdy segment najwyższego poziomu spełnia reguły allowlist
(w tym safe bins lub automatyczne zezwalanie na Skills). Przekierowania pozostają nieobsługiwane w trybie allowlist.
Podstawianie poleceń (`$()` / backticks) jest odrzucane podczas parsowania allowlist, również wewnątrz
cudzysłowów; użyj pojedynczych cudzysłowów, jeśli potrzebujesz dosłownego tekstu `$()`.
W zatwierdzeniach aplikacji towarzyszącej macOS surowy tekst powłoki zawierający składnię sterowania lub rozwijania powłoki
(`&&`, `||`, `;`, `|`, `` ` ``, `$`, `<`, `>`, `(`, `)`) jest traktowany jako brak dopasowania listy dozwolonych, chyba że
sam plik binarny powłoki znajduje się na liście dozwolonych.
Dla wrapperów powłoki (`bash|sh|zsh ... -c/-lc`) nadpisania env ograniczone do zakresu żądania są redukowane do
podwójnych cudzysłowów; użyj pojedynczych cudzysłowów, jeśli potrzebujesz dosłownego tekstu `$()`.
W zatwierdzeniach aplikacji towarzyszącej macOS surowy tekst powłoki zawierający składnię sterowania powłoką lub rozwijania
(`&&`, `||`, `;`, `|`, `` ` ``, `$`, `<`, `>`, `(`, `)`) jest traktowany jako brak dopasowania allowlist, chyba że
sam binarny plik powłoki znajduje się na liście dozwolonych.
Dla wrapperów powłoki (`bash|sh|zsh ... -c/-lc`) nadpisania env w zakresie żądania są redukowane do
małej jawnej listy dozwolonych (`TERM`, `LANG`, `LC_*`, `COLORTERM`, `NO_COLOR`, `FORCE_COLOR`).
Dla decyzji allow-always w trybie allowlist znane wrappery dispatch
(`env`, `nice`, `nohup`, `stdbuf`, `timeout`) utrwalają ścieżki wewnętrznych plików wykonywalnych zamiast ścieżek wrapperów. Multipleksery powłoki (`busybox`, `toybox`) są również odpakowywane dla apletów powłoki (`sh`, `ash`,
itd.), tak aby utrwalane były ścieżki wewnętrznych plików wykonywalnych zamiast plików binarnych multipleksera. Jeśli wrapper lub
multiplekser nie może zostać bezpiecznie odpakowany, żaden wpis listy dozwolonych nie jest utrwalany automatycznie.
Jeśli dodajesz do listy dozwolonych interpretery takie jak `python3` lub `node`, preferuj `tools.exec.strictInlineEval=true`, aby eval inline nadal wymagał jawnego zatwierdzenia. W trybie ścisłym `allow-always` może nadal utrwalać niegroźne wywołania interpreterów/skryptów, ale nośniki eval inline nie są utrwalane automatycznie.
W przypadku decyzji allow-always w trybie allowlist znane wrappery dyspozytorskie
(`env`, `nice`, `nohup`, `stdbuf`, `timeout`) utrwalają ścieżki wewnętrznych plików wykonywalnych zamiast ścieżek wrapperów. Multipleksery powłoki (`busybox`, `toybox`) są również rozwijane dla apletów powłoki (`sh`, `ash`,
itp.), tak aby utrwalać wewnętrzne pliki wykonywalne zamiast binariów multipleksera. Jeśli wrapper lub
multiplekser nie może zostać bezpiecznie rozwinięty, żaden wpis allowlist nie jest utrwalany automatycznie.
Jeśli umieszczasz na liście dozwolonych interpretery takie jak `python3` lub `node`, preferuj `tools.exec.strictInlineEval=true`, aby inline eval nadal wymagało jawnego zatwierdzenia. W trybie ścisłym `allow-always` nadal może utrwalać nieszkodliwe wywołania interpretera/skryptu, ale nośniki inline-eval nie są utrwalane automatycznie.
Domyślne safe bins:
@ -311,161 +335,161 @@ Domyślne safe bins:
[//]: # "SAFE_BIN_DEFAULTS:END"
`grep` i `sort` nie znajdują się na liście domyślnej. Jeśli jawnie je włączysz, zachowaj jawne wpisy listy dozwolonych dla
`grep` i `sort` nie znajdują się na liście domyślnej. Jeśli jawnie je włączysz, zachowaj jawne wpisy allowlist dla
ich przepływów pracy innych niż stdin.
Dla `grep` w trybie safe-bin podawaj wzorzec za pomocą `-e`/`--regexp`; forma wzorca pozycyjnego jest
odrzucana, aby operandy plików nie mogły zostać przemycone jako niejednoznaczne argumenty pozycyjne.
odrzucana, aby operandy plików nie mogły być przemycane jako niejednoznaczne argumenty pozycyjne.
### Safe bins versus allowlist
### Safe bins a allowlist
| Temat | `tools.exec.safeBins` | Allowlist (`exec-approvals.json`) |
| ---------------- | ------------------------------------------------------ | ------------------------------------------------------------ |
| Cel | Automatyczne zezwalanie na wąskie filtry stdin | Jawne zaufanie określonym plikom wykonywalnym |
| Typ dopasowania | Nazwa pliku wykonywalnego + polityka argv safe-bin | Wzorzec glob rozwiązanego do ścieżki pliku wykonywalnego |
| Zakres argumentów| Ograniczony profilem safe-bin i regułami tokenów dosłownych | Tylko dopasowanie ścieżki; odpowiedzialność za argumenty spoczywa poza tym na Tobie |
| Typ dopasowania | Nazwa pliku wykonywalnego + polityka argv safe-bin | Wzorzec glob dopasowujący rozwiązaną ścieżkę pliku wykonywalnego |
| Zakres argumentów | Ograniczony przez profil safe-bin i reguły tokenów dosłownych | Tylko dopasowanie ścieżki; argumenty są poza tym Twoją odpowiedzialnością |
| Typowe przykłady | `head`, `tail`, `tr`, `wc` | `jq`, `python3`, `node`, `ffmpeg`, niestandardowe CLI |
| Najlepsze użycie | Niskiego ryzyka transformacje tekstu w pipelineach | Każde narzędzie o szerszym zachowaniu lub skutkach ubocznych |
| Najlepsze zastosowanie | Niskiego ryzyka przekształcenia tekstu w potokach | Dowolne narzędzie o szerszym zachowaniu lub skutkach ubocznych |
Lokalizacja konfiguracji:
- `safeBins` pochodzi z konfiguracji (`tools.exec.safeBins` lub per agent `agents.list[].tools.exec.safeBins`).
- `safeBinTrustedDirs` pochodzi z konfiguracji (`tools.exec.safeBinTrustedDirs` lub per agent `agents.list[].tools.exec.safeBinTrustedDirs`).
- `safeBinProfiles` pochodzi z konfiguracji (`tools.exec.safeBinProfiles` lub per agent `agents.list[].tools.exec.safeBinProfiles`). Klucze profili per agent nadpisują klucze globalne.
- wpisy listy dozwolonych znajdują się w lokalnym dla hosta `~/.openclaw/exec-approvals.json` pod `agents.<id>.allowlist` (lub przez Control UI / `openclaw approvals allowlist ...`).
- `openclaw security audit` ostrzega `tools.exec.safe_bins_interpreter_unprofiled`, gdy interpretery/pliki runtime pojawiają się w `safeBins` bez jawnych profili.
- `openclaw doctor --fix` może wygenerować brakujące wpisy niestandardowych `safeBinProfiles.<bin>` jako `{}` (następnie je przejrzyj i zaostrz). Pliki binarne interpreterów/runtime nie są generowane automatycznie.
- wpisy allowlist znajdują się w lokalnym dla hosta pliku `~/.openclaw/exec-approvals.json` w `agents.<id>.allowlist` (lub przez Control UI / `openclaw approvals allowlist ...`).
- `openclaw security audit` ostrzega za pomocą `tools.exec.safe_bins_interpreter_unprofiled`, gdy binaria interpretera/runtime pojawiają się w `safeBins` bez jawnych profili.
- `openclaw doctor --fix` może utworzyć brakujące niestandardowe wpisy `safeBinProfiles.<bin>` jako `{}` (następnie przejrzyj je i zaostrz). Binaria interpretera/runtime nie są tworzone automatycznie.
Przykład niestandardowego profilu:
__OC_I18N_900004__
Jeśli jawnie dodasz `jq` do `safeBins`, OpenClaw nadal odrzuca builtin `env` w trybie safe-bin,
więc `jq -n env` nie może zrzucić środowiska procesu hosta bez jawnej ścieżki z listy dozwolonych
Przykład profilu niestandardowego:
__OC_I18N_900005__
Jeśli jawnie włączysz `jq` do `safeBins`, OpenClaw nadal odrzuci wbudowane `env` w trybie safe-bin,
tak aby `jq -n env` nie mogło zrzucić środowiska procesu hosta bez jawnej ścieżki allowlist
lub promptu zatwierdzenia.
## Edycja w Control UI
Użyj karty **Control UI → Nodes → Exec approvals**, aby edytować wartości domyślne, nadpisania
Użyj karty **Control UI → Nodes → Exec approvals**, aby edytować ustawienia domyślne, nadpisania
per agent i listy dozwolonych. Wybierz zakres (Defaults lub agent), dostosuj politykę,
dodaj/usuń wzorce listy dozwolonych, a następnie kliknij **Save**. UI pokazuje metadane **last used**
dla każdego wzorca, aby ułatwić utrzymanie porządku na liście.
dodaj/usuń wzorce allowlist, a następnie kliknij **Save**. UI pokazuje metadane **ostatniego użycia**
dla każdego wzorca, dzięki czemu można utrzymywać porządek na liście.
Selektor celu wybiera **Gateway** (lokalne zatwierdzenia) lub **Node**. Węzły
muszą ogłaszać `system.execApprovals.get/set` (aplikacja macOS lub bezgłowy host węzła).
Jeśli węzeł nie ogłasza jeszcze zatwierdzeń exec, edytuj bezpośrednio jego lokalny
muszą ogłaszać `system.execApprovals.get/set` (aplikacja macOS lub bezgłowy host node).
Jeśli węzeł nie ogłasza jeszcze zatwierdzeń exec, edytuj bezpośrednio jego lokalny plik
`~/.openclaw/exec-approvals.json`.
CLI: `openclaw approvals` obsługuje edycję gateway lub node (zobacz [CLI zatwierdzeń](/cli/approvals)).
CLI: `openclaw approvals` obsługuje edycję gateway lub node (zobacz [Approvals CLI](/cli/approvals)).
## Przepływ zatwierdzania
Gdy prompt jest wymagany, gateway rozgłasza `exec.approval.requested` do klientów operatora.
Control UI i aplikacja macOS rozwiązują to przez `exec.approval.resolve`, a następnie gateway przekazuje
Gdy prompt jest wymagany, gateway rozsyła `exec.approval.requested` do klientów operatora.
Control UI i aplikacja macOS rozstrzygają go przez `exec.approval.resolve`, po czym gateway przekazuje
zatwierdzone żądanie do hosta node.
Dla `host=node` żądania zatwierdzeń zawierają kanoniczny payload `systemRunPlan`. Gateway używa
tego planu jako autorytatywnego kontekstu polecenia/cwd/sesji podczas przekazywania zatwierdzonych żądań `system.run`.
Dla `host=node` żądania zatwierdzenia zawierają kanoniczny ładunek `systemRunPlan`. Gateway używa
tego planu jako autorytatywnego kontekstu polecenia/cwd/sesji podczas przekazywania zatwierdzonych żądań
`system.run`.
To ma znaczenie przy opóźnieniach asynchronicznego zatwierdzania:
Ma to znaczenie przy opóźnieniach asynchronicznego zatwierdzania:
- ścieżka node exec przygotowuje z góry jeden kanoniczny plan
- rekord zatwierdzenia przechowuje ten plan i jego metadane powiązania
- po zatwierdzeniu końcowe przekazane wywołanie `system.run` używa ponownie zapisanego planu
- po zatwierdzeniu końcowe przekazane wywołanie `system.run` ponownie używa zapisanego planu
zamiast ufać późniejszym zmianom wywołującego
- jeśli wywołujący zmieni `command`, `rawCommand`, `cwd`, `agentId` lub
`sessionKey` po utworzeniu żądania zatwierdzenia, gateway odrzuci
przekazane uruchomienie jako niedopasowanie zatwierdzenia
`sessionKey` po utworzeniu żądania zatwierdzenia, gateway odrzuci przekazane
uruchomienie jako niedopasowanie zatwierdzenia
## Polecenia interpreterów/runtime
## Polecenia interpretera/runtime
Uruchomienia interpreterów/runtime oparte na zatwierdzeniach są celowo konserwatywne:
Uruchomienia interpretera/runtime oparte na zatwierdzeniu są celowo konserwatywne:
- Dokładny kontekst argv/cwd/env jest zawsze wiązany.
- Formy bezpośrednich skryptów powłoki i bezpośrednich plików runtime są według zasady best-effort wiązane z jednym konkretnym snapshotem lokalnego
pliku.
- Typowe formy wrapperów menedżerów pakietów, które nadal rozwiązują się do jednego bezpośredniego lokalnego pliku (na przykład
`pnpm exec`, `pnpm node`, `npm exec`, `npx`), są odpakowywane przed powiązaniem.
- Jeśli OpenClaw nie potrafi zidentyfikować dokładnie jednego konkretnego lokalnego pliku dla polecenia interpretera/runtime
- Dokładny kontekst argv/cwd/env jest zawsze powiązany.
- Bezpośrednie formy skryptów powłoki i bezpośrednich plików runtime są, zgodnie z najlepszą próbą, powiązywane z jedną konkretną migawką pliku lokalnego.
- Typowe formy wrapperów menedżera pakietów, które nadal rozwiązują się do jednego bezpośredniego pliku lokalnego (na przykład
`pnpm exec`, `pnpm node`, `npm exec`, `npx`), są rozwijane przed powiązaniem.
- Jeśli OpenClaw nie potrafi zidentyfikować dokładnie jednego konkretnego pliku lokalnego dla polecenia interpretera/runtime
(na przykład skrypty pakietów, formy eval, łańcuchy loaderów specyficzne dla runtime lub niejednoznaczne formy
wieloplikowe), wykonanie oparte na zatwierdzeniu jest odrzucane zamiast deklarować pokrycie semantyczne, którego
faktycznie nie ma.
- Dla takich przepływów pracy preferuj sandboxing, oddzielną granicę hosta lub jawny zaufany
wieloplikowe), wykonanie oparte na zatwierdzeniu zostaje odrzucone zamiast deklarować pokrycie semantyczne, którego faktycznie
nie ma.
- Dla takich przepływów pracy preferuj sandboxing, osobną granicę hosta lub jawny zaufany
przepływ allowlist/full, w którym operator akceptuje szerszą semantykę runtime.
Gdy zatwierdzenia są wymagane, narzędzie exec natychmiast zwraca identyfikator zatwierdzenia. Użyj tego identyfikatora, aby
powiązać późniejsze zdarzenia systemowe (`Exec finished` / `Exec denied`). Jeśli żadna decyzja nie nadejdzie przed upływem
limitu czasu, żądanie jest traktowane jako timeout zatwierdzenia i prezentowane jako powód odmowy.
Gdy zatwierdzenia są wymagane, narzędzie exec zwraca natychmiast identyfikator zatwierdzenia. Użyj tego identyfikatora do
skorelowania późniejszych zdarzeń systemowych (`Exec finished` / `Exec denied`). Jeśli przed upływem limitu czasu nie nadejdzie
żadna decyzja, żądanie jest traktowane jako przekroczenie czasu zatwierdzenia i prezentowane jako powód odmowy.
### Zachowanie dostarczania follow-up
Po zakończeniu zatwierdzonego asynchronicznego exec OpenClaw wysyła turn `agent` follow-up do tej samej sesji.
Po zakończeniu zatwierdzonego asynchronicznego exec OpenClaw wysyła follow-upowy obrót `agent` do tej samej sesji.
- Jeśli istnieje prawidłowy zewnętrzny cel dostarczenia (kanał dostarczalny plus cel `to`), dostarczenie follow-up używa tego kanału.
- W przepływach wyłącznie webchat lub sesji wewnętrznych bez celu zewnętrznego dostarczenie follow-up pozostaje tylko w sesji (`deliver: false`).
- Jeśli wywołujący jawnie żąda rygorystycznego zewnętrznego dostarczenia, ale nie ma możliwego do rozwiązania zewnętrznego kanału, żądanie kończy się błędem `INVALID_REQUEST`.
- Jeśli włączono `bestEffortDeliver` i nie można rozwiązać zewnętrznego kanału, dostarczenie jest degradowane do trybu tylko sesyjnego zamiast zakończyć się błędem.
- Jeśli istnieje prawidłowy zewnętrzny cel dostarczenia (kanał dostarczalny plus docelowe `to`), dostarczenie follow-up używa tego kanału.
- W przepływach wyłącznie webchat lub sesjach wewnętrznych bez zewnętrznego celu dostarczenie follow-up pozostaje tylko w sesji (`deliver: false`).
- Jeśli wywołujący jawnie żąda ścisłego dostarczenia zewnętrznego, ale nie można rozwiązać żadnego zewnętrznego kanału, żądanie kończy się błędem `INVALID_REQUEST`.
- Jeśli włączono `bestEffortDeliver` i nie można rozwiązać zewnętrznego kanału, dostarczenie zostaje obniżone do trybu tylko sesyjnego zamiast zakończyć się błędem.
Okno dialogowe potwierdzenia zawiera:
Okno potwierdzenia zawiera:
- polecenie + argumenty
- cwd
- identyfikator agenta
- id agenta
- rozwiązaną ścieżkę pliku wykonywalnego
- metadane hosta + polityki
Akcje:
Działania:
- **Allow once** → uruchom teraz
- **Always allow** → dodaj do listy dozwolonych + uruchom
- **Always allow** → dodaj do allowlist + uruchom
- **Deny** → zablokuj
## Przekazywanie zatwierdzeń do kanałów czatu
Możesz przekazywać prompty zatwierdzeń exec do dowolnego kanału czatu (w tym kanałów pluginów) i zatwierdzać
je za pomocą `/approve`. Używa to zwykłego pipeline dostarczania wychodzącego.
je za pomocą `/approve`. Używa to zwykłego potoku dostarczania wychodzącego.
Konfiguracja:
__OC_I18N_900005__
Odpowiedź w czacie:
__OC_I18N_900006__
Polecenie `/approve` obsługuje zarówno zatwierdzenia exec, jak i zatwierdzenia pluginów. Jeśli identyfikator nie pasuje do oczekującego zatwierdzenia exec, automatycznie sprawdza zatwierdzenia pluginów.
Odpowiedź na czacie:
__OC_I18N_900007__
Polecenie `/approve` obsługuje zarówno zatwierdzenia exec, jak i zatwierdzenia pluginów. Jeśli identyfikator nie pasuje do oczekującego zatwierdzenia exec, automatycznie sprawdza zamiast tego zatwierdzenia pluginów.
### Przekazywanie zatwierdzeń pluginów
Przekazywanie zatwierdzeń pluginów używa tego samego pipeline dostarczania co zatwierdzenia exec, ale ma własną
niezależną konfigurację w `approvals.plugin`. Włączenie lub wyłączenie jednej z nich nie wpływa na drugą.
__OC_I18N_900007__
Kształt konfiguracji jest identyczny jak `approvals.exec`: `enabled`, `mode`, `agentFilter`,
Przekazywanie zatwierdzeń pluginów używa tego samego potoku dostarczania co zatwierdzenia exec, ale ma własną
niezależną konfigurację w `approvals.plugin`. Włączenie lub wyłączenie jednego nie wpływa na drugie.
__OC_I18N_900008__
Kształt konfiguracji jest identyczny jak w `approvals.exec`: `enabled`, `mode`, `agentFilter`,
`sessionFilter` i `targets` działają tak samo.
Kanały obsługujące współdzielone odpowiedzi interaktywne renderują te same przyciski zatwierdzeń zarówno dla zatwierdzeń exec, jak i
pluginów. Kanały bez współdzielonego interaktywnego UI przechodzą na zwykły tekst z instrukcjami `/approve`.
Kanały obsługujące współdzielone interaktywne odpowiedzi renderują te same przyciski zatwierdzania zarówno dla zatwierdzeń exec, jak i
pluginów. Kanały bez współdzielonego interaktywnego UI wracają do zwykłego tekstu z instrukcjami `/approve`.
### Zatwierdzenia w tym samym czacie na dowolnym kanale
Gdy żądanie zatwierdzenia exec lub pluginu pochodzi z dostarczalnej powierzchni czatu, ten sam czat
może teraz domyślnie zatwierdzić je przez `/approve`. Dotyczy to kanałów takich jak Slack, Matrix i
Microsoft Teams, oprócz istniejących już przepływów Web UI i terminal UI.
może je teraz domyślnie zatwierdzić za pomocą `/approve`. Dotyczy to kanałów takich jak Slack, Matrix i
Microsoft Teams, oprócz istniejących przepływów Web UI i terminal UI.
Ta współdzielona ścieżka polecenia tekstowego używa zwykłego modelu uwierzytelniania kanału dla tej rozmowy. Jeśli
czat źródłowy może już wysyłać polecenia i otrzymywać odpowiedzi, żądania zatwierdzeń nie potrzebują już
oddzielnego natywnego adaptera dostarczania tylko po to, by pozostać oczekujące.
Ta współdzielona ścieżka poleceń tekstowych używa normalnego modelu uwierzytelniania kanału dla danej rozmowy. Jeśli
czat źródłowy może już wysyłać polecenia i odbierać odpowiedzi, żądania zatwierdzenia nie potrzebują już
osobnego natywnego adaptera dostarczania tylko po to, by pozostać w stanie oczekiwania.
Discord i Telegram również obsługują `/approve` w tym samym czacie, ale te kanały nadal używają swoich
rozwiązanych list zatwierdzających do autoryzacji, nawet gdy natywne dostarczanie zatwierdzeń jest wyłączone.
Discord i Telegram również obsługują `/approve` w tym samym czacie, ale te kanały nadal używają
swojej rozpoznanej listy zatwierdzających do autoryzacji, nawet gdy natywne dostarczanie zatwierdzeń jest wyłączone.
Dla Telegram i innych natywnych klientów zatwierdzeń, które wywołują Gateway bezpośrednio,
ten fallback jest celowo ograniczony do błędów typu „zatwierdzenie nie znalezione”. Rzeczywista
odmowa/błąd zatwierdzenia exec nie wykonuje po cichu ponownej próby jako zatwierdzenie pluginu.
Dla Telegrama i innych natywnych klientów zatwierdzeń, które wywołują Gateway bezpośrednio,
to zachowanie zapasowe jest celowo ograniczone do błędów typu „nie znaleziono zatwierdzenia”. Rzeczywista
odmowa/błąd zatwierdzenia exec nie powoduje cichego ponownego sprawdzenia jako zatwierdzenie pluginu.
### Natywne dostarczanie zatwierdzeń
Niektóre kanały mogą także działać jako natywni klienci zatwierdzeń. Natywni klienci dodają DM zatwierdzających, fanout czatu źródłowego
oraz specyficzny dla kanału interaktywny UX zatwierdzeń ponad współdzielony przepływ `/approve`
Niektóre kanały mogą również działać jako natywni klienci zatwierdzeń. Natywni klienci dodają DM-y zatwierdzających, fanout do czatu źródłowego
oraz interaktywny UX zatwierdzania specyficzny dla kanału ponad współdzielony przepływ `/approve`
w tym samym czacie.
Gdy natywne karty/przyciski zatwierdzeń są dostępne, ten natywny UI jest główną
ścieżką skierowaną do agenta. Agent nie powinien również powielać zwykłego polecenia czatu
`/approve`, chyba że wynik narzędzia mówi, że zatwierdzenia w czacie są niedostępne albo
ręczne zatwierdzenie jest jedyną pozostałą ścieżką.
Gdy dostępne są natywne karty/przyciski zatwierdzania, to natywne UI jest podstawową
ścieżką widoczną dla agenta. Agent nie powinien również powielać zwykłego polecenia czatu
`/approve`, chyba że wynik narzędzia wskazuje, że zatwierdzenia na czacie są niedostępne lub
jedyną pozostałą ścieżką jest zatwierdzenie ręczne.
Model ogólny:
@ -473,103 +497,103 @@ Model ogólny:
- `approvals.exec` kontroluje przekazywanie promptów zatwierdzeń do innych miejsc docelowych czatu
- `channels.<channel>.execApprovals` kontroluje, czy dany kanał działa jako natywny klient zatwierdzeń
Natywni klienci zatwierdzeń automatycznie włączają dostarczanie najpierw do DM, gdy wszystkie poniższe warunki są spełnione:
Natywni klienci zatwierdzeń automatycznie włączają dostarczanie z priorytetem DM, gdy spełnione są wszystkie poniższe warunki:
- kanał obsługuje natywne dostarczanie zatwierdzeń
- zatwierdzający mogą zostać rozwiązani z jawnych `execApprovals.approvers` lub udokumentowanych źródeł fallback dla
tego kanału
- `channels.<channel>.execApprovals.enabled` jest nieustawione lub ma wartość `"auto"`
- osoby zatwierdzające można rozpoznać na podstawie jawnego `execApprovals.approvers` lub
udokumentowanych źródeł zapasowych tego kanału
- `channels.<channel>.execApprovals.enabled` nie jest ustawione lub ma wartość `"auto"`
Ustaw `enabled: false`, aby jawnie wyłączyć natywnego klienta zatwierdzeń. Ustaw `enabled: true`, aby wymusić
jego włączenie, gdy zatwierdzający się rozwiązują. Publiczne dostarczanie do czatu źródłowego pozostaje jawne przez
`channels.<channel>.execApprovals.target`.
jego włączenie, gdy uda się rozpoznać osoby zatwierdzające. Publiczne dostarczanie do czatu źródłowego pozostaje
jawnie kontrolowane przez `channels.<channel>.execApprovals.target`.
FAQ: [Dlaczego istnieją dwie konfiguracje zatwierdzeń exec dla zatwierdzeń w czacie?](/help/faq#why-are-there-two-exec-approval-configs-for-chat-approvals)
FAQ: [Dlaczego istnieją dwie konfiguracje zatwierdzeń exec dla zatwierdzeń na czacie?](/help/faq#why-are-there-two-exec-approval-configs-for-chat-approvals)
- Discord: `channels.discord.execApprovals.*`
- Slack: `channels.slack.execApprovals.*`
- Telegram: `channels.telegram.execApprovals.*`
Ci natywni klienci zatwierdzeń dodają routing DM i opcjonalny fanout do kanału ponad współdzielony
Ci natywni klienci zatwierdzeń dodają routowanie do DM-ów i opcjonalny fanout do kanału ponad współdzielony
przepływ `/approve` w tym samym czacie oraz współdzielone przyciski zatwierdzeń.
Współdzielone zachowanie:
Wspólne zachowanie:
- Slack, Matrix, Microsoft Teams i podobne dostarczalne czaty używają zwykłego modelu uwierzytelniania kanału
- Slack, Matrix, Microsoft Teams i podobne dostarczalne czaty używają normalnego modelu uwierzytelniania kanału
dla `/approve` w tym samym czacie
- gdy natywny klient zatwierdzeń włącza się automatycznie, domyślnym celem natywnego dostarczania są DM zatwierdzających
- w przypadku Discord i Telegram tylko rozwiązani zatwierdzający mogą zatwierdzać lub odrzuc
- zatwierdzający Discord mogą być jawni (`execApprovals.approvers`) lub wywnioskowani z `commands.ownerAllowFrom`
- zatwierdzający Telegram mogą być jawni (`execApprovals.approvers`) lub wywnioskowani z istniejącej konfiguracji właściciela (`allowFrom`, plus `defaultTo` dla wiadomości bezpośrednich, gdy jest obsługiwane)
- zatwierdzający Slack mogą być jawni (`execApprovals.approvers`) lub wywnioskowani z `commands.ownerAllowFrom`
- natywne przyciski Slack zachowują rodzaj identyfikatora zatwierdzenia, więc identyfikatory `plugin:` mogą rozwiązywać zatwierdzenia pluginów
bez drugiej lokalnej warstwy fallback w Slack
- natywny routing DM/kanału Matrix i skróty reakcji obsługują zarówno zatwierdzenia exec, jak i pluginów;
- gdy natywny klient zatwierdzeń włącza się automatycznie, domyślnym celem natywnego dostarczania są DM-y osób zatwierdzających
- dla Discorda i Telegrama tylko rozpoznane osoby zatwierdzające mogą zatwierdzać lub odmawi
- osoby zatwierdzające w Discord mogą być jawne (`execApprovals.approvers`) lub wywnioskowane z `commands.ownerAllowFrom`
- osoby zatwierdzające w Telegramie mogą być jawne (`execApprovals.approvers`) lub wywnioskowane z istniejącej konfiguracji ownera (`allowFrom` oraz `defaultTo` dla wiadomości bezpośrednich tam, gdzie jest obsługiwane)
- osoby zatwierdzające w Slack mogą być jawne (`execApprovals.approvers`) lub wywnioskowane z `commands.ownerAllowFrom`
- natywne przyciski Slack zachowują rodzaj id zatwierdzenia, więc identyfikatory `plugin:` mogą rozwiązywać zatwierdzenia pluginów
bez drugiej lokalnej warstwy zapasowej specyficznej dla Slacka
- natywne routowanie DM/kanału i skróty reakcji w Matrix obsługują zarówno zatwierdzenia exec, jak i pluginów;
autoryzacja pluginów nadal pochodzi z `channels.matrix.dm.allowFrom`
- osoba żądająca nie musi być zatwierdzającym
- czat źródłowy może zatwierdzać bezpośrednio przez `/approve`, gdy dany czat już obsługuje polecenia i odpowiedzi
- natywne przyciski zatwierdzeń Discord routują według rodzaju identyfikatora zatwierdzenia: identyfikatory `plugin:` trafiają
bezpośrednio do zatwierdzeń pluginów, wszystko inne trafia do zatwierdzeń exec
- natywne przyciski zatwierdzeń Telegram stosują ten sam ograniczony fallback exec→plugin co `/approve`
- gdy natywny `target` włącza dostarczanie do czatu źródłowego, prompty zatwierdzeń zawierają tekst polecenia
- oczekujące zatwierdzenia exec domyślnie wygasają po 30 minutach
- jeśli żaden interfejs operatora ani skonfigurowany klient zatwierdzeń nie może przyjąć żądania, prompt przechodzi do `askFallback`
- zgłaszający nie musi być osobą zatwierdzającą
- czat źródłowy może zatwierdzać bezpośrednio za pomocą `/approve`, gdy ten czat już obsługuje polecenia i odpowiedzi
- natywne przyciski zatwierdzeń Discord routują według rodzaju id zatwierdzenia: identyfikatory `plugin:` trafiają
bezpośrednio do zatwierdzeń pluginów, a wszystko inne do zatwierdzeń exec
- natywne przyciski zatwierdzeń Telegram stosują to samo ograniczone zachowanie zapasowe exec-to-plugin co `/approve`
- gdy natywne `target` włącza dostarczanie do czatu źródłowego, prompty zatwierdzeń zawierają tekst polecenia
- oczekujące zatwierdzenia exec wygasają domyślnie po 30 minutach
- jeśli żaden UI operatora ani skonfigurowany klient zatwierdzeń nie może przyjąć żądania, prompt wraca do `askFallback`
Telegram domyślnie używa DM zatwierdzających (`target: "dm"`). Możesz przełączyć na `channel` lub `both`, gdy
chcesz, aby prompty zatwierdzeń pojawiały się również w źródłowym czacie/temacie Telegram. Dla tematów forum Telegram
OpenClaw zachowuje temat dla promptu zatwierdzenia i follow-up po zatwierdzeniu.
Telegram domyślnie kieruje do DM-ów osób zatwierdzających (`target: "dm"`). Możesz przełączyć na `channel` lub `both`, gdy
chcesz, aby prompty zatwierdzeń pojawiały się również w źródłowym czacie/wątku Telegrama. Dla tematów forum Telegrama
OpenClaw zachowuje temat dla promptu zatwierdzenia oraz follow-up po zatwierdzeniu.
Zobacz:
- [Discord](/channels/discord)
- [Telegram](/channels/telegram)
### Przepływ IPC macOS
__OC_I18N_900008__
### Przepływ IPC na macOS
__OC_I18N_900009__
Uwagi dotyczące bezpieczeństwa:
- Tryb gniazda Unix `0600`, token przechowywany w `exec-approvals.json`.
- Sprawdzenie peera z tym samym UID.
- Sprawdzanie peera z tym samym UID.
- Challenge/response (nonce + token HMAC + hash żądania) + krótki TTL.
## Zdarzenia systemowe
Cykl życia exec jest ujawniany jako komunikaty systemowe:
- `Exec running` (tylko jeśli polecenie przekracza próg powiadomienia o uruchomieniu)
- `Exec running` (tylko jeśli polecenie przekroczy próg powiadomienia o wykonywaniu)
- `Exec finished`
- `Exec denied`
Są one publikowane do sesji agenta po zgłoszeniu zdarzenia przez węzeł.
Zatwierdzenia exec na hoście gateway emitują ten sam cykl życia zdarzeń, gdy polecenie się kończy (oraz opcjonalnie, gdy działa dłużej niż próg).
Exec objęte zatwierdzeniem używają ponownie identyfikatora zatwierdzenia jako `runId` w tych komunikatach, aby ułatwić korelację.
Są one publikowane do sesji agenta po zgłoszeniu zdarzenia przez node.
Zatwierdzenia exec na hoście gateway emitują te same zdarzenia cyklu życia, gdy polecenie się zakończy (oraz opcjonalnie, gdy działa dłużej niż próg).
Exec objęte zatwierdzeniem używają ponownie identyfikatora zatwierdzenia jako `runId` w tych komunikatach, co ułatwia korelację.
## Zachowanie po odrzuceniu zatwierdzenia
## Zachowanie przy odmowie zatwierdzenia
Gdy asynchroniczne zatwierdzenie exec zostanie odrzucone, OpenClaw uniemożliwia agentowi ponowne użycie
wyniku z jakiegokolwiek wcześniejszego uruchomienia tego samego polecenia w sesji. Powód odrzucenia
jest przekazywany z jawną wskazówką, że nie ma dostępnych danych wyjściowych polecenia, co zatrzymuje
Gdy asynchroniczne zatwierdzenie exec zostaje odrzucone, OpenClaw uniemożliwia agentowi ponowne użycie
wyników z wcześniejszego uruchomienia tego samego polecenia w sesji. Powód odmowy
jest przekazywany wraz z jawną wskazówką, że żadne dane wyjściowe polecenia nie są dostępne, co powstrzymuje
agenta przed twierdzeniem, że istnieją nowe dane wyjściowe, lub przed powtarzaniem odrzuconego polecenia z
nieaktualnymi wynikami z wcześniejszego udanego uruchomienia.
nieaktualnymi wynikami z wcześniejszego pomyślnego uruchomienia.
## Konsekwencje
- **full** daje szerokie uprawnienia; gdy to możliwe, preferuj listy dozwolonych.
- **ask** pozwala Ci zachować kontrolę, jednocześnie umożliwiając szybkie zatwierdzenia.
- **full** ma szerokie uprawnienia; gdy to możliwe, preferuj listy dozwolonych.
- **ask** pozwala Ci zachować kontrolę, a jednocześnie umożliwia szybkie zatwierdzanie.
- Listy dozwolonych per agent zapobiegają przenikaniu zatwierdzeń jednego agenta do innych.
- Zatwierdzenia mają zastosowanie tylko do żądań exec hosta od **autoryzowanych nadawców**. Nieautoryzowani nadawcy nie mogą wydawać `/exec`.
- `/exec security=full` to wygodna opcja na poziomie sesji dla autoryzowanych operatorów i z założenia pomija zatwierdzenia.
Aby twardo zablokować exec hosta, ustaw security zatwierdzeń na `deny` lub zablokuj narzędzie `exec` przez politykę narzędzi.
- `/exec security=full` to wygodne ustawienie na poziomie sesji dla autoryzowanych operatorów i zgodnie z założeniem pomija zatwierdzenia.
Aby całkowicie zablokować exec hosta, ustaw security zatwierdzeń na `deny` lub zablokuj narzędzie `exec` za pomocą polityki narzędzi.
Powiązane:
- [Narzędzie exec](/pl/tools/exec)
- [Tryb elevated](/pl/tools/elevated)
- [Exec tool](/pl/tools/exec)
- [Elevated mode](/pl/tools/elevated)
- [Skills](/pl/tools/skills)
## Powiązane
- [Exec](/pl/tools/exec) — narzędzie do wykonywania poleceń powłoki
- [Sandboxing](/pl/gateway/sandboxing) — tryby sandbox i dostęp do obszaru roboczego
- [Bezpieczeństwo](/pl/gateway/security) — model bezpieczeństwa i utwardzanie
- [Sandboxing](/pl/gateway/sandboxing) — tryby sandboxa i dostęp do obszaru roboczego
- [Security](/pl/gateway/security) — model bezpieczeństwa i utwardzanie
- [Sandbox vs Tool Policy vs Elevated](/pl/gateway/sandbox-vs-tool-policy-vs-elevated) — kiedy używać każdego z nich