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?