macOS companion app

Значок в строке меню

Автор: steipete · Обновлено: 2025-12-06 · Область: macOS приложение (apps/macos)

  • Покой: Обычная анимация значка (моргание, периодическое покачивание).
  • Пауза: Элемент статуса использует appearsDisabled; движения нет.
  • Голосовой триггер (большие уши): Детектор голосового пробуждения вызывает AppState.triggerVoiceEars(ttl: nil), когда слышно слово-активатор, сохраняя earBoostActive=true, пока высказывание захватывается. Уши увеличиваются (в 1.9 раза), получают круглые отверстия для лучшей читаемости, затем сбрасываются через stopVoiceEars() после 1 секунды тишины. Срабатывает только из внутреннего голосового пайплайна приложения.
  • Работа (агент запущен): AppState.isWorking=true запускает микродвижение «бег хвоста/лап»: более быстрое покачивание лап и небольшое смещение во время выполнения задачи. В настоящее время переключается вокруг запусков агента WebChat; добавьте такой же переключатель для других длительных задач при их подключении.

Точки подключения

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

Проверки состоянияЛогирование в macOS