Состояния значка строки меню
Автор: steipete · Обновлено: 2025-12-06 · Область: приложение для macOS (apps/macos)
- Простой: Обычная анимация значка (мигание, редкое «покачивание»).
- Пауза: Элемент статуса использует
appearsDisabled; движения нет. - Голосовой триггер («большие уши»): Детектор голосового пробуждения вызывает
AppState.triggerVoiceEars(ttl: nil)при распознавании ключевого слова, удерживаяearBoostActive=trueво время захвата высказывания. Уши увеличиваются (1,9×), получают круглые отверстия для читаемости, затем опускаются через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, рендерится в Retina‑буфер 36×36 px). - Scurry использует парики ног до ~1.0 с небольшой горизонтальной рыбалкой; это добавка к любому существующему холостому волку.
- Внешнего переключателя CLI/брокера для ушей/режима работы нет; держите это внутри собственных сигналов приложения, чтобы избежать случайного «хлопанья».
- Держите TTL короткими (<10 с), чтобы значок быстро возвращался к базовому состоянию, если задание зависло.