OpenClaw kieruje każdą wiadomość przychodzącą do sesji na podstawie jej
źródła: wiadomości prywatne, czaty grupowe, zadania Cron itd. Cały stan sesji
należy do Gateway; klienci interfejsu użytkownika pobierają dane sesji z Gateway.
Jak kierowane są wiadomości
Izolacja wiadomości prywatnych
Domyślnie wszystkie wiadomości prywatne współdzielą jedną sesję w celu
zachowania ciągłości, co jest odpowiednie w konfiguracjach dla jednego użytkownika.
Jeśli z agentem może komunikować się wiele osób, należy włączyć izolację wiadomości
prywatnych. Bez niej wszyscy użytkownicy współdzielą ten sam kontekst rozmowy,
więc prywatne wiadomości Alicji byłyby widoczne dla Boba.
Opcje session.dmScope:
Jeśli ta sama osoba kontaktuje się z różnych kanałów, należy użyć
session.identityLinks, aby przypisać jej tożsamości do jednego kanonicznego identyfikatora
rozmówcy, dzięki czemu będą współdzielić sesję.
Dokowanie połączonych kanałów
Polecenia dokowania przenoszą trasę odpowiedzi bieżącej sesji czatu prywatnego
do innego połączonego kanału bez rozpoczynania nowej sesji. Przykłady,
konfigurację i rozwiązywanie problemów zawiera Dokowanie kanałów.
Konfigurację można zweryfikować za pomocą openclaw security audit.
Cykl życia sesji
Sesje są używane ponownie, dopóki nie wygasną zgodnie z session.reset:
- Reset dzienny (domyślnie
mode: "daily") — nowa sesja o skonfigurowanej
godzinie lokalnej (session.reset.atHour, domyślnie 4, 0-23) na hoście Gateway. Aktualność
dzienna zależy od czasu rozpoczęcia bieżącej sessionId, a nie od późniejszych
zapisów metadanych.
- Reset po bezczynności (
mode: "idle") — nowa sesja po session.reset.idleMinutes
bezczynności. Aktualność po bezczynności zależy od ostatniej rzeczywistej interakcji
użytkownika/kanału, dlatego zdarzenia systemowe Heartbeat, Cron i exec nie
podtrzymują sesji.
- Reset ręczny — wpisz na czacie
/new lub /reset. /new <model>
również przełącza model.
Gdy skonfigurowano zarówno reset dzienny, jak i reset po bezczynności, obowiązuje
ten, który nastąpi wcześniej. Tury zdarzeń systemowych Heartbeat, Cron, exec i
innych mogą zapisywać metadane sesji, ale zapisy te nie przedłużają okresu
aktualności resetu dziennego ani resetu po bezczynności. Gdy reset odnawia sesję,
oczekujące powiadomienia o zdarzeniach systemowych ze starej sesji są odrzucane,
aby nieaktualne informacje z procesów w tle nie zostały dodane na początku
pierwszego promptu w nowej sesji.
Sesje z aktywną sesją CLI należącą do dostawcy nie są przerywane przez domyślny
niejawny reset dzienny. Gdy takie sesje powinny wygasać według czasomierza, należy
użyć /reset lub jawnie skonfigurować session.reset.
Domyślne ustawienie można zastąpić dla każdego typu czatu lub kanału:
resetByType obsługuje direct (starszy alias dm), group i thread.
Starsze ustawienie najwyższego poziomu session.idleMinutes nadal działa jako alias
zgodności domyślnego trybu bezczynności, gdy nie ustawiono bloku
session.reset/resetByType.
Lokalizacja stanu
- Wiersze sesji środowiska uruchomieniowego:
~/.openclaw/agents/<agentId>/agent/openclaw-agent.sqlite
- Zarchiwizowane pliki transkrypcji:
~/.openclaw/agents/<agentId>/sessions/
- Źródło migracji starszych wierszy:
~/.openclaw/agents/<agentId>/sessions/sessions.json
Wiersze sesji w bazie danych SQLite poszczególnych agentów przechowują oddzielne
znaczniki czasu cyklu życia:
sessionStartedAt: czas rozpoczęcia bieżącej sessionId; używany przez reset dzienny.
lastInteractionAt: ostatnia interakcja użytkownika/kanału przedłużająca okres aktywności.
updatedAt: ostatnia modyfikacja wiersza magazynu; przydatna podczas wyświetlania i usuwania,
ale niemiarodajna dla aktualności resetu dziennego lub resetu po bezczynności.
Podczas migracji ze starszych instalacji uruchomienie Gateway i openclaw doctor --fix automatycznie importują starsze wiersze sessions.json oraz aktywną historię
transkrypcji JSONL do SQLite. Wiersze bez sessionStartedAt są rozpoznawane na
podstawie nagłówka sesji w starszej transkrypcji JSONL, jeśli jest dostępny. Jeśli
starszy wiersz nie zawiera również lastInteractionAt, aktualność po bezczynności
jest ustalana na podstawie czasu rozpoczęcia tej sesji, a nie późniejszych zapisów
technicznych. Aby jawnie sprawdzić dane lub uzyskać dowody walidacji, należy użyć
openclaw doctor --session-sqlite inspect --session-sqlite-all-agents i sekwencji migracji narzędzia Doctor.
Konserwacja sesji
OpenClaw ogranicza rozmiar magazynu sesji w czasie za pomocą session.maintenance;
poniżej przedstawiono wartości domyślne:
W przypadku limitów maxEntries o rozmiarze produkcyjnym zapisy środowiska
uruchomieniowego Gateway wykorzystują mały bufor przekroczenia limitu i partiami
zmniejszają liczbę wpisów do skonfigurowanego maksimum. Odczyty magazynu sesji
nie usuwają ani nie ograniczają wpisów podczas uruchamiania Gateway, dzięki czemu
uruchamianie i izolowane sesje Cron nie ponoszą kosztu pełnego czyszczenia
magazynu. openclaw sessions cleanup --enforce natychmiast stosuje limit.
Sesje sond uruchomień modelu Gateway są domyślnie krótkotrwałe. Wiersze pasujące
do agent:*:explicit:model-run-<uuid> używają stałego okresu przechowywania 24h,
ale czyszczenie zależy od obciążenia: usuwa nieaktualne wiersze sond tylko po
osiągnięciu progu konserwacji/limitu wpisów sesji i jest wykonywane przed
ogólniejszym limitem wieku nieaktualnych wpisów oraz limitem liczby wpisów.
Zwykłe sesje prywatne, grupowe, wątków, Cron, punktów zaczepienia, Heartbeat,
ACP i podagentów nie dziedziczą tego 24-godzinnego okresu przechowywania.
Konserwacja zachowuje trwałe zewnętrzne wskaźniki konwersacji, w tym sesje
grupowe i sesje czatu ograniczone do wątku, jednocześnie umożliwiając wygasanie
syntetycznych wpisów Cron, punktów zaczepienia, Heartbeat, ACP i podagentów.
Jeśli wcześniej używano izolacji wiadomości prywatnych, a następnie przywrócono
wartość session.dmScope na main, nieaktualne wiersze wiadomości
prywatnych z kluczami rozmówców można wyświetlić za pomocą
openclaw sessions cleanup --dry-run --fix-dm-scope. Zastosowanie tej samej flagi
wycofuje stare wiersze bezpośrednich wiadomości prywatnych i zachowuje ich
transkrypcje jako usunięte archiwa.
Podgląd dowolnego przebiegu konserwacji można wyświetlić za pomocą openclaw sessions cleanup --dry-run.
Sprawdzanie sesji
Dalsza lektura
Powiązane