Logika stanu paska menu¶
Co jest wyświetlane¶
- Prezentujemy bieżący stan pracy agenta w ikonie paska menu oraz w pierwszym wierszu stanu menu.
- Stan zdrowia jest ukryty podczas aktywnej pracy; wraca, gdy wszystkie sesje są bezczynne.
- Blok „Nodes” w menu wyświetla wyłącznie urządzenia (sparowane węzły przez
node.list), a nie wpisy klienta/obecności. - Sekcja „Usage” pojawia się pod Kontekstem, gdy dostępne są migawki użycia dostawcy.
Model stanu¶
- Sesje: zdarzenia przychodzą z
runId(na uruchomienie) wraz zsessionKeyw ładunku. „Główna” sesja ma kluczmain; jeśli go brakuje, wracamy do ostatnio zaktualizowanej sesji. - Priorytet: główna zawsze wygrywa. Jeśli główna jest aktywna, jej stan jest wyświetlany natychmiast. Jeśli główna jest bezczynna, wyświetlana jest ostatnio aktywna sesja niegłówna. Nie przełączamy się w trakcie aktywności; zmiana następuje tylko wtedy, gdy bieżąca sesja przechodzi w bezczynność lub gdy główna staje się aktywna.
- Rodzaje aktywności:
job: wysokopoziomowe wykonywanie poleceń (state: started|streaming|done|error).tool:phase: start|resultztoolNameorazmeta/args.
Enum IconState (Swift)¶
idleworkingMain(ActivityKind)workingOther(ActivityKind)overridden(ActivityKind)(nadpisanie debugowe)
ActivityKind → glif¶
exec→ 💻read→ 📄write→ ✍️edit→ 📝attach→ 📎- domyślnie → 🛠️
Mapowanie wizualne¶
idle: normalny stworek.workingMain: odznaka z glifem, pełne zabarwienie, animacja „pracy” nóg.workingOther: odznaka z glifem, stonowane zabarwienie, brak „biegania”.overridden: używa wybranego glifu/zabarwienia niezależnie od aktywności.
Tekst wiersza stanu (menu)¶
- Gdy praca jest aktywna:
<Session role> · <activity label> - Przykłady:
Main · exec: pnpm test,Other · read: apps/macos/Sources/OpenClaw/AppState.swift. - Gdy bezczynne: powrót do podsumowania stanu zdrowia.
Ingest zdarzeń¶
- Źródło: zdarzenia
agentkanału kontrolnego (ControlChannel.handleAgentEvent). - Parsowane pola:
stream: "job"zdata.statedla start/stop.stream: "tool"zdata.phase,name, opcjonalniemeta/args.- Etykiety:
exec: pierwsza liniaargs.command.read/write: skrócona ścieżka.edit: ścieżka plus wnioskowany rodzaj zmiany zmeta/liczników diff.- rezerwowo: nazwa narzędzia.
Nadpisanie debugowe¶
- Ustawienia ▸ Debug ▸ selektor „Icon override”:
System (auto)(domyślne)Working: main(wg rodzaju narzędzia)Working: other(wg rodzaju narzędzia)Idle- Przechowywane przez
@AppStorage("iconOverride"); mapowane doIconState.overridden.
Lista kontrolna testów¶
- Uruchom zadanie głównej sesji: sprawdź, czy ikona przełącza się natychmiast i wiersz stanu pokazuje etykietę główną.
- Uruchom zadanie sesji niegłównej, gdy główna jest bezczynna: ikona/stan pokazują niegłówną; pozostaje stabilne do zakończenia.
- Uruchom główną, gdy inna jest aktywna: ikona przełącza się na główną natychmiast.
- Szybkie serie narzędzi: upewnij się, że odznaka nie migocze (okres łaski TTL dla wyników narzędzi).
- Wiersz zdrowia pojawia się ponownie, gdy wszystkie sesje są bezczynne.