メニューバーアイコンの状態
著者: steipete · 更新日: 2025-12-06 · 対象: macOSアプリ (apps/macos)
- アイドル: 通常のアイコンアニメーション(まばたき、時折の揺れ)。
- 一時停止: ステータスアイテムが
appearsDisabledを使用。動きなし。 - Voice起動(大きな耳): Voice Wakeの検出器がウェイクワードを聞くと
AppState.triggerVoiceEars(ttl: nil)を呼び出し、発話のキャプチャ中earBoostActive=trueを維持。耳が拡大(1.9倍)し、視認性のために円形の耳穴を表示、1秒の無音後にstopVoiceEars()で縮小。アプリ内の音声パイプラインからのみ発火。 - 作業中(エージェント実行中):
AppState.isWorking=trueが「尾/脚のパタパタ」マイクロモーションを駆動:脚のバタバタが速くなり、作業中にわずかなオフセットが付く。現在はWebChatのエージェント実行時にトグル。他の長時間タスクにも同じトグルを適用してください。
接続ポイント
- Voice Wake:ランタイム/テスターがトリガー時に
AppState.triggerVoiceEars(ttl: nil)を呼び出し、キャプチャウィンドウに合わせて1秒の無音後にstopVoiceEars()を呼び出す。 - エージェントアクティビティ:作業スパンの前後で
AppStateStore.shared.setWorking(true/false)を設定(WebChatのエージェント呼び出しで実装済み)。スパンは短く保ち、deferブロックでリセットしてアニメーションの固着を防止。
形状とサイズ
- ベースアイコンは
CritterIconRenderer.makeIcon(blink:legWiggle:earWiggle:earScale:earHoles:)で描画。 - 耳のスケールのデフォルトは
1.0。VoiceブーストでearScale=1.9、earHoles=trueに設定。全体のフレームは変更なし(18×18 ptテンプレート画像を36×36 pxのRetinaバッキングストアにレンダリング)。 - パタパタは最大約1.0の脚の揺れにわずかな水平方向の揺れを追加。既存のアイドル揺れに加算。
動作に関する注意
- CLI/ブローカーによる耳/作業状態の外部トグルはなし。意図しないフラッピングを避けるため、アプリ内部のシグナルのみに限定。
- TTLは短く(10秒未満)保ち、ジョブがハングした場合にアイコンがすぐにベースラインに戻るようにする。