メニューバー
メニューバーのステータスロジックとユーザーに表示される内容
表示内容
- メニューバーアイコンとメニューの最初のステータス行に現在のエージェント作業状態を表示します。
- 作業がアクティブな間、健康状態は非表示になります。すべてのセッションがアイドル状態になると戻ります。
- メニューの "Nodes" ブロックは''デバイス''のみをリストします(''node.list'' 経由のペアリングされたノード)、クライアント/プレゼンスエントリではありません。
- プロバイダーの使用スナップショットが利用可能な場合、Context の下に "Usage" セクションが表示されます。
状態モデル
- セッション:イベントは ''runId''(実行ごと)とペイロード内の ''sessionKey'' で到着します。「main」セッションはキー ''main'' です。存在しない場合、最後に更新されたセッションにフォールバックします。
- 優先順位:main が常に勝ちます。main がアクティブな場合、その状態がすぐに表示されます。main がアイドルな場合、最後にアクティブだった非 main セッションが表示されます。アクティビティの途中でフリップフロップしません。現在のセッションがアイドルになるか main がアクティブになったときにのみ切り替えます。
- アクティビティの種類:
- ''job'':高レベルのコマンド実行(''state: started|streaming|done|error'')。
- ''tool'':''phase: start|result''、''toolName''、''meta/args'' を伴います。
IconState enum (Swift)
- ''idle''
- ''workingMain(ActivityKind)''
- ''workingOther(ActivityKind)''
- ''overridden(ActivityKind)''(デバッグオーバーライド)
ActivityKind → グリフ
- ''exec'' → 💻
- ''read'' → 📄
- ''write'' → ✍️
- ''edit'' → 📝
- ''attach'' → 📎
- デフォルト → 🛠️
視覚的マッピング
- ''idle'':通常のクリッター。
- ''workingMain'':グリフ、完全な色調、脚の「作業中」アニメーションを伴うバッジ。
- ''workingOther'':グリフ、ミュートされた色調、急走なしのバッジ。
- ''overridden'':アクティビティに関係なく、選択されたグリフ/色調を使用します。
ステータス行テキスト(メニュー)
- 作業がアクティブな間:''<Session role> · <activity label>''
- Examples: ''Main · exec: pnpm test'', ''Other · read: apps/macos/Sources/OpenClaw/AppState.swift''.
- アイドル時:健康サマリーにフォールバックします。
イベント取り込み
- ソース:コントロールチャネル ''agent'' イベント(''ControlChannel.handleAgentEvent'')。
- 解析されたフィールド:
- ''stream: "job"''、開始/停止用の ''data.state'' を伴います。
- ''stream: "tool"''、''data.phase''、''name''、オプションの ''meta''/''args'' を伴います。
- ラベル:
- ''exec'':''args.command'' の最初の行。
- ''read''/''write'':短縮されたパス。
- ''edit'':''meta''/diff カウントから推測される変更種類を加えたパス。
- フォールバック:ツール名。
デバッグオーバーライド
- 設定 ▸ デバッグ ▸ "Icon override" ピッカー:
- ''System (auto)''(デフォルト)
- ''Working: main''(ツール種類ごと)
- ''Working: other''(ツール種類ごと)
- ''Idle''
- ''@AppStorage("iconOverride")'' 経由で保存;''IconState.overridden'' にマッピングされます。
テストチェックリスト
- メインセッションジョブをトリガーします:アイコンがすぐに切り替わり、ステータス行にメインラベルが表示されることを確認します。
- メインがアイドルの間に非メインセッションジョブをトリガーします:アイコン/ステータスが非メインを表示します。完了まで安定しています。
- 他がアクティブな間にメインを開始します:アイコンがすぐにメインにフリップします。
- 急速なツールバースト:バッジがフリッカーしないことを確認します(ツール結果の TTL グレース)。
- すべてのセッションがアイドルになると、健康行が再表示されます。