macOS companion app
Pasek menu
Co jest wyświetlane
- Bieżący stan pracy agenta jest przedstawiany na ikonie paska menu oraz w pierwszym wierszu stanu w menu.
- Stan kondycji jest ukryty podczas aktywnej pracy; pojawia się ponownie, gdy wszystkie sesje są bezczynne.
- Główny element „Kontekst” otwiera podmenu z ostatnimi sesjami zamiast rozwijać je w menu głównym.
- Blok „Węzły” w menu głównym zawiera tylko sparowane urządzenia (z
node.list), bez wpisów klientów ani obecności. - Sekcja „Użycie” pojawia się w menu głównym poniżej sekcji Kontekst, gdy dostępne są migawki użycia dostawcy, a po niej wyświetlane są szczegóły kosztów, jeśli są dostępne.
Model stanu
- Źródło:
WorkActivityStore(apps/macos/Sources/OpenClaw/WorkActivityStore.swift). - Zdarzenia docierają jako
ControlAgentEventz identyfikatoremrunId; procedura obsługi (ControlChannel.routeWorkActivity) odczytujesessionKeyz ładunku zdarzenia i w razie jego braku przyjmuje domyślnie"main". - Priorytet: sesja główna (domyślnie
sessionKey == "main") zawsze ma pierwszeństwo. Jeśli jest aktywna, jej stan jest wyświetlany natychmiast. Jeśli jest bezczynna, wyświetlana jest zamiast niej ostatnio aktywna sesja inna niż główna. Magazyn nie przełącza sesji w trakcie aktywności; robi to dopiero wtedy, gdy bieżąca sesja stanie się bezczynna lub sesja główna stanie się aktywna. - Rodzaje aktywności:
job: wykonywanie polecenia wysokiego poziomu (state: started|streaming|done|error|...).tool:phase: start|resultznameoraz opcjonalnymimeta/args.
Wyliczenie IconState (Swift)
idleworkingMain(ActivityKind)workingOther(ActivityKind)overridden(ActivityKind)(nadpisanie na potrzeby debugowania)
ActivityKind -> symbol odznaki
ActivityKind opakowuje ToolKind (bash, read, write, edit, attach, other) lub samodzielne job. Każdemu rodzajowi odpowiada symbol SF wyświetlany jako odznaka na ikonie stworzonka (IconState.badgeSymbolName):
| Rodzaj | Symbol |
|---|---|
bash |
chevron.left.slash.chevron.right |
read |
doc |
write |
pencil |
edit |
pencil.tip |
attach |
paperclip |
other / job |
gearshape.fill |
Odwzorowanie wizualne
idle: zwykłe stworzonko, bez odznaki.workingMain: odznaka z symbolem, pełne zabarwienie (wyróżnienie.primary), animacja „pracy” odnóży.workingOther: odznaka z symbolem, stonowane zabarwienie (wyróżnienie.secondary), bez animacji biegania.overridden: używa wybranego symbolu i zabarwienia niezależnie od rzeczywistej aktywności.
Podmenu kontekstu
- Menu główne wyświetla jeden wiersz „Kontekst” z liczbą i stanem sesji; otwiera on podmenu (
MenuSessionsInjector). - Nagłówek podmenu wyświetla liczbę aktywnych sesji z ostatnich 24 godzin.
- Każdy wiersz sesji zachowuje pasek tokenów, wiek, podgląd, przełącznik trybu rozumowania/szczegółowości oraz działania resetowania, kompaktowania i usuwania.
- Komunikaty o ładowaniu, rozłączeniu i błędzie wczytywania sesji są wyświetlane w podmenu kontekstu.
- Sekcje użycia i kosztów pozostają na poziomie głównym poniżej pozycji „Kontekst”, aby można je było szybko sprawdzić bez otwierania podmenu.
Tekst wiersza stanu (menu)
- Gdy praca jest aktywna:
<Session role> · <activity label>("\(roleLabel) · \(activity.label)"wMenuContentView), gdzie etykieta roli toMainlubOther. - W stanie bezczynności: powraca do podsumowania stanu.
Pozyskiwanie zdarzeń
- Źródło: zdarzenia
agentkanału sterowania, kierowane przezControlChannel.routeWorkActivity(from:). - Analizowane pola:
stream: "job"zdata.statedla rozpoczęcia/zatrzymania.stream: "tool"zdata.phase,data.nameoraz opcjonalnymidata.meta/data.args.
- Etykiety narzędzi pochodzą z
ToolDisplayRegistry.resolve(name:args:meta:); w przypadku nierozpoznanych nazw używana jest nieprzetworzona nazwa narzędzia.
Nadpisanie debugowania
- Ustawienia > Debugowanie > selektor „Nadpisanie ikony”:
System (auto)(domyślnie)Working: main/Working: other(według rodzaju narzędzia: bash, odczyt, zapis, edycja, inne)Idle
- Przechowywane pod kluczem
UserDefaultsopenclaw.iconOverride; mapowane naIconState.overridden.
Lista kontrolna testów
- Uruchom zadanie sesji głównej: ikona przełącza się natychmiast, a wiersz stanu wyświetla etykietę sesji głównej.
- Uruchom zadanie sesji innej niż główna, gdy sesja główna jest bezczynna: ikona i stan wskazują sesję inną niż główna; pozostają stabilne aż do jej zakończenia.
- Uruchom sesję główną, gdy aktywna jest inna sesja: ikona natychmiast przełącza się na sesję główną.
- Szybkie serie wywołań narzędzi: plakietka nie miga (2-sekundowy okres karencji przed usunięciem zakończonego narzędzia,
WorkActivityStore.toolResultGrace). - Wiersz kondycji pojawia się ponownie, gdy wszystkie sesje są bezczynne.
Powiązane
Was this useful?