Перейти к основному содержанию

Состояния значка строки меню

Автор: 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 с), чтобы значок быстро возвращался к базовому состоянию, если задание зависло.