Web interfaces
Czat internetowy
Status: interfejs czatu SwiftUI w systemach macOS/iOS komunikuje się bezpośrednio z WebSocketem Gateway. Bez osadzonej przeglądarki i bez lokalnego serwera plików statycznych.
Czym jest
- Natywny interfejs czatu dla Gateway.
- Korzysta z tych samych sesji i reguł routingu co inne kanały.
- Deterministyczny routing: odpowiedzi zawsze wracają do WebChat.
- Historia jest zawsze pobierana z Gateway (bez lokalnego monitorowania plików). Jeśli Gateway jest nieosiągalny, WebChat działa tylko do odczytu.
Szybki start
- Uruchom Gateway.
- Otwórz interfejs WebChat (aplikację macOS/iOS) lub kartę czatu Control UI.
- Upewnij się, że skonfigurowano prawidłową metodę uwierzytelniania w Gateway (domyślnie współdzielony sekret, nawet w interfejsie pętli zwrotnej).
Jak to działa
- Interfejs łączy się z WebSocketem Gateway i używa metod RPC
chat.history,chat.send,chat.injectorazchat.message.get. chat.historyma ograniczony rozmiar w celu zapewnienia stabilności: Gateway może skracać długie pola tekstowe, pomijać rozbudowane metadane i zastępować zbyt duże wpisy wartością[chat.history omitted: message too large]. Klienci API mogą wysłać dla danego żądania parametrmaxChars, aby zastąpić domyślny limit dla jednego wywołania.- Gdy widoczna wiadomość asystenta została skrócona w
chat.history, Control UI może otworzyć boczny panel czytnika i na żądanie pobrać pełny wpis po normalizacji do wyświetlania za pośrednictwemchat.message.get, bez zwiększania domyślnego rozmiaru historii.chat.message.getużywa tej samej gałęzi transkrypcji i reguł wyświetlania cochat.history, ale wskazuje jeden wpis za pomocąmessageIdi zwraca zgodny ze stanem faktycznym powód niedostępności, gdy nie można już zwrócić pełnej treści. chat.historypodąża za aktywną gałęzią transkrypcji w plikach sesji, do których dane są tylko dopisywane, dzięki czemu porzucone gałęzie po przepisaniu i zastąpione kopie promptów nie są renderowane w WebChat.- Wpisy Compaction są renderowane jako separator „Skompaktowana historia” z wyjaśnieniem, że skompaktowana transkrypcja jest zachowywana jako punkt kontrolny, oraz z akcją otwierającą punkty kontrolne sesji (utworzenie gałęzi lub przywrócenie, jeśli pozwalają na to uprawnienia).
- Control UI zapamiętuje bazową wartość
sessionIdGateway zwróconą przezchat.historyi dołącza ją do kolejnych wywołańchat.send, dzięki czemu ponowne połączenia i odświeżenia strony kontynuują tę samą zapisaną rozmowę, chyba że użytkownik rozpocznie lub zresetuje sesję. chat.sendprzyjmuje klucz idempotencji (Control UI używa identyfikatora uruchomienia); Gateway deduplikuje powtarzające się żądania używające tego samego klucza, więc ponawiane lub zduplikowane, trwające wysłania dla tej samej sesji, wiadomości i załączników nie tworzą drugiego uruchomienia.- Pliki startowe przestrzeni roboczej i oczekujące instrukcje
BOOTSTRAP.mdsą przekazywane w sekcji# Project Contextpromptu systemowego agenta, a nie kopiowane do wiadomości użytkownika WebChat. Jeśli zawartość inicjalizacyjna zostanie skrócona, prompt systemowy otrzyma zamiast niej krótkie „Powiadomienie o kontekście inicjalizacyjnym”; szczegółowe liczby i ustawienia konfiguracji pozostają dostępne w interfejsach diagnostycznych. - Normalizacja wyświetlania w
chat.historyusuwa: kontekst OpenClaw przeznaczony wyłącznie dla środowiska uruchomieniowego, otoczki przychodzących komunikatów, wbudowane znaczniki dyrektyw dostarczania, takie jak[[reply_to_current]],[[reply_to:<id>]]i[[audio_as_voice]], tekstowe ładunki XML wywołań narzędzi (<tool_call>,<function_call>,<tool_calls>,<function_calls>, w tym skrócone bloki) oraz ujawnione tokeny sterujące modelu zapisane znakami ASCII lub pełnej szerokości. Wpisy asystenta, których cały widoczny tekst zawiera wyłącznie token ciszyNO_REPLY(bez rozróżniania wielkości liter), są pomijane. - Ładunki odpowiedzi oznaczone jako rozumowanie (
isReasoning: true) są wykluczane z treści asystenta w WebChat, tekstu odtwarzanej transkrypcji i bloków zawartości audio, dzięki czemu ładunki zawierające wyłącznie tok rozumowania nie są wyświetlane jako widoczne wiadomości asystenta ani udostępniane jako dźwięk do odtworzenia. chat.injectdopisuje notatkę asystenta bezpośrednio do transkrypcji i rozsyła ją do interfejsu (bez uruchamiania agenta).- Przerwane uruchomienia mogą pozostawiać częściową odpowiedź asystenta widoczną w interfejsie. Gdy istnieje zbuforowana odpowiedź, Gateway zapisuje jej częściowy tekst w historii transkrypcji i oznacza wpis metadanymi przerwania.
Model transkrypcji i dostarczania
WebChat ma dwie oddzielne ścieżki danych:
- Wiersze transkrypcji SQLite stanowią trwałą transkrypcję modelu i środowiska uruchomieniowego. W przypadku zwykłych uruchomień agenta osadzone środowisko uruchomieniowe OpenClaw zapisuje widoczne dla modelu wiadomości
user,assistantitoolResultza pośrednictwem akcesora sesji. WebChat nie zapisuje w tej transkrypcji dowolnego tekstu dotyczącego dostarczania, statusu ani komunikatów pomocniczych. - Zdarzenia
ReplyPayloadGateway stanowią bieżącą projekcję dostarczania: znormalizowaną pod kątem wyświetlania w WebChat lub kanale, strumieniowania blokowego, znaczników dyrektyw, osadzania multimediów, flag TTS/audio i zachowania awaryjnego interfejsu. Same nie stanowią kanonicznego dziennika sesji. - Środowiska testowe wymagające widocznych odpowiedzi za pośrednictwem
tools.messagenadal używają WebChat jako wewnętrznego miejsca docelowego odpowiedzi źródłowej dla bieżącego uruchomienia. Pozbawione celumessage.sendz tego aktywnego uruchomienia WebChat jest rzutowane do tego samego czatu i kopiowane do transkrypcji sesji; WebChat nie staje się kanałem wychodzącym wielokrotnego użytku i nigdy nie dziedziczylastChannel. - WebChat wstawia wpisy asystenta do transkrypcji tylko wtedy, gdy Gateway jest właścicielem wyświetlanej wiadomości poza zwykłą osadzoną turą agenta:
chat.inject, odpowiedzi poleceń niewymagających agenta, przerwana częściowa odpowiedź oraz zarządzane przez WebChat uzupełnienia transkrypcji dotyczące multimediów. - Jeśli tekst asystenta pojawia się na żywo podczas uruchomienia, ale znika po ponownym załadowaniu historii, należy sprawdzić kolejno: czy transkrypcja SQLite zawiera tekst asystenta, czy projekcja wyświetlania
chat.historygo usunęła, a następnie czy optymistyczne scalanie końca transkrypcji w Control UI zastąpiło lokalny stan dostarczania utrwalonym zrzutem.
Końcowe odpowiedzi zwykłych uruchomień agenta powinny być trwałe, ponieważ osadzone środowisko uruchomieniowe zapisuje message_end asystenta. Każdy mechanizm awaryjny kopiujący dostarczony końcowy ładunek do transkrypcji musi najpierw zapobiec zduplikowaniu tury asystenta, którą osadzone środowisko uruchomieniowe już zapisało.
Panel narzędzi agentów w Control UI
- Panel Tools w
/agentsinterfejsu Control UI zawiera widok „Dostępne teraz” obsługiwany przeztools.effective(sessionKey=...): generowaną przez serwer projekcję inwentarza narzędzi bieżącej sesji przeznaczoną tylko do odczytu, obejmującą narzędzia podstawowe, Plugin, należące do kanałów oraz narzędzia już wykrytych serwerów MCP. - Oddzielny widok edycji konfiguracji (obsługiwany przez
tools.catalog) obejmuje profile, nadpisania dla poszczególnych agentów i semantykę katalogu. - Dostępność w środowisku uruchomieniowym jest zależna od sesji. Przełączenie sesji tego samego agenta może zmienić listę „Dostępne teraz”. Jeśli skonfigurowane serwery MCP nie zostały połączone lub zmieniły się od ostatniego wykrywania, panel wyświetla powiadomienie zamiast po cichu uruchamiać transporty MCP ze ścieżki odczytu.
- Edytor konfiguracji nie oznacza dostępności w środowisku uruchomieniowym; efektywny dostęp nadal podlega hierarchii zasad (
allow/denyoraz nadpisaniom dla poszczególnych agentów, dostawców i kanałów).
Użycie zdalne
- Tryb zdalny tuneluje WebSocket Gateway przez SSH/Tailscale.
- Nie trzeba uruchamiać oddzielnego serwera WebChat.
Dokumentacja konfiguracji (WebChat)
Pełna konfiguracja: Konfiguracja
WebChat nie ma utrwalanej sekcji konfiguracji. Gateway używa wbudowanego limitu wyświetlania chat.history; klienci API mogą wysłać dla danego żądania parametr maxChars, aby zastąpić go dla pojedynczego wywołania. Starsza konfiguracja channels.webchat i gateway.webchat została wycofana; uruchom openclaw doctor --fix, aby ją usunąć.
Powiązane opcje globalne:
gateway.port,gateway.bind: host/port WebSocketu.gateway.auth.mode,gateway.auth.token,gateway.auth.password: uwierzytelnianie WebSocketu za pomocą współdzielonego sekretu.gateway.auth.allowTailscale: karta czatu Control UI w przeglądarce może używać nagłówków tożsamości Tailscale Serve, gdy ta opcja jest włączona.gateway.auth.mode: "trusted-proxy": uwierzytelnianie przez odwrotne proxy dla klientów przeglądarkowych za rozpoznającym tożsamość źródłem proxy innym niż interfejs pętli zwrotnej (zobacz Uwierzytelnianie zaufanego proxy).gateway.remote.url,gateway.remote.token,gateway.remote.password: docelowy zdalny Gateway.session.*: pamięć sesji i domyślne ustawienia klucza głównego.