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, отрисованное в Retina-буфер 36×36 px).
  • Суета использует покачивание лап до ~1.0 с небольшим горизонтальным подергиванием; оно добавляется к любому существующему покачиванию в ожидании.

Поведенческие заметки

  • Нет внешнего переключателя CLI/брокера для ушей/работы; держите это внутри собственных сигналов приложения, чтобы избежать случайного дребезга.
  • Держите TTL короткими (<10 с), чтобы значок быстро возвращался к базовому состоянию, если задание зависнет.

Связанные материалы

Was this useful?
On this page

On this page