Стани піктограми рядка меню
Автор: steipete · Оновлено: 2025-12-06 · Область: macOS app (apps/macos)
- Бездіяльність: Звичайна анімація піктограми (кліпання, періодичне похитування).
- Призупинено: Елемент статусу використовує
appearsDisabled; без руху. - Голосовий тригер (великі вуха): Детектор голосового пробудження викликає
AppState.triggerVoiceEars(ttl: nil), коли почуто слово активації, зберігаючиearBoostActive=true, поки захоплюється висловлювання. Вуха збільшуються (1.9x), отримують круглі отвори у вухах для кращої читабельності, потім опускаються черезstopVoiceEars()після 1 с тиші. Спрацьовує лише з внутрішнього голосового конвеєра app. - Робота (агент виконується):
AppState.isWorking=trueкерує мікрорухом “метушні хвоста/лап”: швидше похитування лап і невелике зміщення, поки виконується робота. Зараз перемикається навколо запусків агента WebChat; додайте таке саме перемикання навколо інших довгих завдань, коли будете їх підключати.
- Голосове пробудження: runtime/tester викликає
AppState.triggerVoiceEars(ttl: nil)при спрацьовуванні таstopVoiceEars()після 1 с тиші, щоб відповідати вікну захоплення. - Активність агента: встановлюйте
AppStateStore.shared.setWorking(true/false)навколо інтервалів роботи (у виклику агента WebChat це вже зроблено). Тримайте інтервали короткими та скидайте їх у блокахdefer, щоб уникнути завислих анімацій.
- Базова піктограма малюється в
CritterIconRenderer.makeIcon(blink:legWiggle:earWiggle:earScale:earHoles:). - Масштаб вух за замовчуванням становить
1.0; голосове підсилення встановлюєearScale=1.9і перемикаєearHoles=true, не змінюючи загальний кадр (шаблонне зображення 18×18 pt рендериться в буфер Retina 36×36 px). - Метушня використовує похитування лап до ~1.0 з невеликим горизонтальним тремтінням; вона додається до будь-якого наявного похитування в стані бездіяльності.
- Немає зовнішнього перемикача CLI/broker для вух/роботи; залишайте це внутрішнім для власних сигналів app, щоб уникнути випадкового миготіння.
- Тримайте TTL короткими (<10s), щоб піктограма швидко поверталася до базового стану, якщо завдання зависне.