macOS companion app
Ikona paska menu
Stany ikony na pasku menu
Autor: steipete · Zaktualizowano: 2025-12-06 · Zakres: aplikacja macOS (apps/macos)
- Bezczynność: Normalna animacja ikony (mruganie, sporadyczne poruszenie).
- Wstrzymanie: Element statusu używa
appearsDisabled; brak ruchu. - Wyzwalacz głosowy (duże uszy): Detektor wybudzania głosem wywołuje
AppState.triggerVoiceEars(ttl: nil), gdy usłyszy słowo wybudzające, utrzymującearBoostActive=truepodczas przechwytywania wypowiedzi. Uszy powiększają się (1.9x), otrzymują okrągłe otwory dla czytelności, a następnie są wyłączane przezstopVoiceEars()po 1 s ciszy. Uruchamiane tylko z wewnętrznego potoku głosowego aplikacji. - Praca (działający agent):
AppState.isWorking=truesteruje mikroruchem typu „szybkie przebieranie ogonem/nogami”: szybsze poruszanie nogami i niewielkie przesunięcie, gdy praca jest w toku. Obecnie przełączane wokół uruchomień agenta WebChat; dodaj ten sam przełącznik wokół innych długich zadań, gdy je podłączysz.
Punkty podłączenia
- Wybudzanie głosem: runtime/tester wywołuje
AppState.triggerVoiceEars(ttl: nil)po wyzwoleniu orazstopVoiceEars()po 1 s ciszy, aby dopasować okno przechwytywania. - Aktywność agenta: ustawiaj
AppStateStore.shared.setWorking(true/false)wokół odcinków pracy (już zrobione w wywołaniu agenta WebChat). Utrzymuj odcinki krótkie i resetuj je w blokachdefer, aby uniknąć zablokowanych animacji.
Kształty i rozmiary
- Ikona bazowa jest rysowana w
CritterIconRenderer.makeIcon(blink:legWiggle:earWiggle:earScale:earHoles:). - Skala uszu domyślnie wynosi
1.0; wzmocnienie głosowe ustawiaearScale=1.9i przełączaearHoles=truebez zmiany całej ramki (obraz szablonu 18×18 pt renderowany do magazynu Retina 36×36 px). - Szybkie poruszanie używa wychylenia nóg do ~1.0 z niewielkim poziomym drgnięciem; nakłada się addytywnie na każde istniejące poruszanie w stanie bezczynności.
Uwagi behawioralne
- Brak zewnętrznego przełącznika CLI/brokera dla uszu/pracy; trzymaj to wewnątrz własnych sygnałów aplikacji, aby uniknąć przypadkowego migotania.
- Utrzymuj krótkie TTL-e (<10 s), aby ikona szybko wracała do stanu bazowego, jeśli zadanie się zawiesi.