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を設定し、全体のフレーム(18×18 pt のテンプレート画像が 36×36 px の Retina バッキングストアにレンダリングされる)を変更せずにearHoles=trueに切り替えます。 - 小走りは、既存のアイドル時の揺れに加算される、小さな水平方向の揺れを伴い、足の揺れを最大約1.0まで使用します。
動作に関する注意点
- 耳/作業中の外部 CLI/ブローカートグルはありません;誤ったフラッピングを避けるため、アプリ自身のシグナル内部に留めてください。
- TTL は短く(<10秒)保ち、ジョブがハングした場合にアイコンが素早くベースラインに戻るようにしてください。