Menu Bar Icon
Menu bar icon states and animations for OpenClaw on macOS
作者:steipete · 更新日時:2025-12-06 · 範囲:macOS アプリ(''apps/macos'')
アイコンの状態
- アイドル: 通常のアイコンアニメーション(点滅、時折の揺れ)。
- ''一時停止:'' ステータス項目は ''appearsDisabled'' を使用します。アニメーションなし。
- ''音声トリガー(大きな耳):'' 音声ウェイク検出器はウェイクワードが聞こえると ''AppState.triggerVoiceEars(ttl: nil)'' を呼び出し、発話がキャプチャされている間 ''earBoostActive=true'' を保持します。耳は拡大(1.9 倍)、可読性のために円形の耳の穴を取得し、1 秒の静音後に ''stopVoiceEars()'' 経由でドロップします。アプリ内音声パイプラインからのみ起動されます。
- ''稼働中(エージェント実行中):'' ''AppState.isWorking=true'' は「尻尾/脚の急走」マイクロモーションを駆動します:作業中は脚の揺れが速く、わずかなオフセットがあります。現在は WebChat エージェントの実行周りで切り替えられています。他の長いタスクを接続するときは同じ切り替えを追加してください。
接続ポイント
- 音声ウェイク:ランタイム/テスターはトリガー時に ''AppState.triggerVoiceEars(ttl: nil)'' を呼び出し、キャプチャウィンドウに一致するように 1 秒の静音後に ''stopVoiceEars()'' を呼び出します。
- エージェントアクティビティ:作業スパン周りで ''AppStateStore.shared.setWorking(true/false)'' を設定します(WebChat エージェント呼び出しですで完了)。スパンを短く保ち、''defer'' ブロックでリセットして、アニメーションが固まるのを回避します。
形状とサイズ
- 基本アイコンは ''CritterIconRenderer.makeIcon(blink:legWiggle:earWiggle:earScale:earHoles:)'' で描画されます。
- 耳のスケールはデフォルトで ''1.0'' です。音声ブーストは ''earScale=1.9'' を設定し、全体のフレームを変更せずに ''earHoles=true'' を切り替えます(18×18 pt テンプレート画像が 36×36 px Retina バッキングストアにレンダリングされます)。
- 急走は脚の揺れを最大 ~1.0 で使用し、小さな水平のジグを伴います。これは既存のアイドル揺れに加算されます。
動作に関する注意事項
- 耳/稼働用の外部 CLI/ブローカー切り替えはありません。偶発的なフラッピングを回避するために、アプリ独自のシグナルの内部に保ちます。
- TTL を短く保ち(<10s)して、ジョブがハングした場合にアイコンがすばやくベースラインに戻るようにします。