macOS companion app

Ícone da barra de menus

Estados do ícone da barra de menus

Autor: steipete · Atualizado: 2025-12-06 · Escopo: app para macOS (apps/macos)

  • Ocioso: Animação normal do ícone (piscar, balanço ocasional).
  • Pausado: O item de status usa appearsDisabled; sem movimento.
  • Acionador de voz (orelhas grandes): O detector de ativação por voz chama AppState.triggerVoiceEars(ttl: nil) quando a palavra de ativação é ouvida, mantendo earBoostActive=true enquanto a fala é capturada. As orelhas aumentam de escala (1,9x), recebem furos circulares para facilitar a leitura e depois retornam via stopVoiceEars() após 1s de silêncio. Acionado somente pelo pipeline de voz dentro do app.
  • Trabalhando (agente em execução): AppState.isWorking=true aciona uma micromovimentação de "corrida da cauda/perna": balanço mais rápido da perna e leve deslocamento enquanto o trabalho está em andamento. Atualmente alternado em torno das execuções do agente do WebChat; adicione a mesma alternância em torno de outras tarefas longas quando conectá-las.

Pontos de conexão

  • Ativação por voz: a chamada de runtime/testador usa AppState.triggerVoiceEars(ttl: nil) no acionamento e stopVoiceEars() após 1s de silêncio para corresponder à janela de captura.
  • Atividade do agente: defina AppStateStore.shared.setWorking(true/false) em torno dos intervalos de trabalho (já feito na chamada do agente do WebChat). Mantenha os intervalos curtos e redefina em blocos defer para evitar animações travadas.

Formas e tamanhos

  • Ícone base desenhado em CritterIconRenderer.makeIcon(blink:legWiggle:earWiggle:earScale:earHoles:).
  • A escala das orelhas é 1.0 por padrão; o reforço de voz define earScale=1.9 e alterna earHoles=true sem alterar o quadro geral (imagem de modelo de 18×18 pt renderizada em um armazenamento de apoio Retina de 36×36 px).
  • A corrida usa balanço da perna até ~1,0 com uma pequena oscilação horizontal; é aditiva a qualquer balanço ocioso existente.

Observações comportamentais

  • Sem alternância externa de CLI/broker para orelhas/trabalho; mantenha isso interno aos próprios sinais do app para evitar oscilação acidental.
  • Mantenha os TTLs curtos (<10s) para que o ícone retorne rapidamente ao estado inicial se uma tarefa travar.

Relacionados