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, mantendoearBoostActive=trueenquanto a fala é capturada. As orelhas aumentam de escala (1,9x), recebem furos circulares para facilitar a leitura e depois retornam viastopVoiceEars()após 1s de silêncio. Acionado somente pelo pipeline de voz dentro do app. - Trabalhando (agente em execução):
AppState.isWorking=trueaciona 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 estopVoiceEars()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 blocosdeferpara evitar animações travadas.
Formas e tamanhos
- Ícone base desenhado em
CritterIconRenderer.makeIcon(blink:legWiggle:earWiggle:earScale:earHoles:). - A escala das orelhas é
1.0por padrão; o reforço de voz defineearScale=1.9e alternaearHoles=truesem 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.