macOS companion app
Піктограма в рядку меню
Стани піктограми рядка меню
Автор: steipete · Оновлено: 2025-12-06 · Область: застосунок macOS (apps/macos)
- Бездіяльність: Звичайна анімація піктограми (моргання, періодичне погойдування).
- Призупинено: Елемент стану використовує
appearsDisabled; руху немає. - Голосовий тригер (великі вуха): Детектор голосового пробудження викликає
AppState.triggerVoiceEars(ttl: nil), коли чує слово пробудження, утримуючиearBoostActive=true, поки захоплюється висловлювання. Вуха збільшуються (1.9x), отримують круглі отвори для кращої читабельності, а потім опускаються черезstopVoiceEars()після 1 с тиші. Спрацьовує лише з голосового конвеєра всередині застосунку. - Робота (агент запущено):
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, відрендерене у 36×36 px Retina backing store). - Швидке перебирання використовує погойдування лап до ~1.0 з невеликим горизонтальним тремтінням; воно додається до будь-якого наявного погойдування бездіяльності.
Поведінкові примітки
- Немає зовнішнього перемикача CLI/брокера для вух/роботи; тримайте це внутрішнім для власних сигналів застосунку, щоб уникнути випадкового мерехтіння.
- Тримайте TTL короткими (<10s), щоб піктограма швидко поверталася до базового стану, якщо завдання зависне.