메뉴 바 아이콘 상태

Author: steipete · Updated: 2025-12-06 · Scope: macOS 앱 (apps/macos)

  • Idle: 일반 아이콘 애니메이션 (깜빡임, 가끔 흔들림).
  • Paused: 상태 항목이 appearsDisabled 사용; 움직임 없음.
  • Voice trigger (큰 귀): Voice wake detector가 웨이크 워드를 감지하면 AppState.triggerVoiceEars(ttl: nil)를 호출하여, 발화가 캡처되는 동안 earBoostActive=true를 유지합니다. 귀가 확대되고 (1.9x), 가독성을 위해 원형 귀 구멍이 생기며, 1초 침묵 후 stopVoiceEars()를 통해 떨어집니다. 인앱 voice 파이프라인에서만 실행됩니다.
  • Working (에이전트 실행 중): AppState.isWorking=true는 "꼬리/다리 서두름" 마이크로 모션을 구동합니다: 작업이 진행 중일 때 더 빠른 다리 흔들림과 약간의 오프셋. 현재 WebChat 에이전트 실행 주변에서 토글됩니다; 다른 긴 작업을 연결할 때 동일한 토글을 추가하세요.

연결 지점

  • Voice wake: runtime/tester가 트리거 시 AppState.triggerVoiceEars(ttl: nil)를 호출하고 캡처 창에 맞춰 1초 침묵 후 stopVoiceEars()를 호출합니다.
  • 에이전트 활동: 작업 범위 주변에서 AppStateStore.shared.setWorking(true/false)를 설정합니다 (WebChat 에이전트 호출에서 이미 완료). 범위를 짧게 유지하고 defer 블록에서 재설정하여 애니메이션이 멈추지 않도록 합니다.

형태 및 크기

  • 기본 아이콘은 CritterIconRenderer.makeIcon(blink:legWiggle:earWiggle:earScale:earHoles:)에서 그려집니다.
  • 귀 스케일은 기본적으로 1.0; voice boost는 earScale=1.9를 설정하고 전체 프레임을 변경하지 않고 earHoles=true를 토글합니다 (18×18 pt 템플릿 이미지가 36×36 px Retina 백킹 스토어로 렌더링됨).
  • Scurry는 작은 수평 흔들림과 함께 최대 ~1.0의 다리 흔들림을 사용합니다; 기존 idle 흔들림에 추가됩니다.

동작 참고사항

  • 귀/working에 대한 외부 CLI/broker 토글 없음; 우발적인 플래핑을 피하기 위해 앱 자체 신호 내부로 유지합니다.
  • 작업이 멈출 경우 아이콘이 빠르게 기준선으로 돌아가도록 TTL을 짧게 (<10s) 유지합니다.