> ## Documentation Index
> Fetch the complete documentation index at: https://docs2.openclaw.ai/llms.txt
> Use this file to discover all available pages before exploring further.

# Bilah menu

## Yang ditampilkan

* Kami menampilkan status kerja agent saat ini di ikon bilah menu dan di baris status pertama pada menu.
* Status kesehatan disembunyikan saat pekerjaan aktif; status tersebut kembali saat semua sesi menganggur.
* Submenu "Konteks" root berisi sesi terbaru alih-alih memperluasnya langsung di menu root.
* Blok "Node" di menu root hanya mencantumkan **perangkat** (node yang dipasangkan melalui `node.list`), bukan entri klien/kehadiran.
* Bagian "Penggunaan" root muncul di bawah Konteks saat snapshot penggunaan provider tersedia, diikuti detail biaya penggunaan saat tersedia.

## Model status

* Sesi: event datang dengan `runId` (per-run) ditambah `sessionKey` di payload. Sesi "utama" adalah key `main`; jika tidak ada, kami fallback ke sesi yang paling baru diperbarui.
* Prioritas: utama selalu menang. Jika utama aktif, statusnya langsung ditampilkan. Jika utama menganggur, sesi non-utama yang paling baru aktif akan ditampilkan. Kami tidak bolak-balik di tengah aktivitas; kami hanya beralih saat sesi saat ini menjadi menganggur atau utama menjadi aktif.
* Jenis aktivitas:
  * `job`: eksekusi perintah tingkat tinggi (`state: started|streaming|done|error`).
  * `tool`: `phase: start|result` dengan `toolName` dan `meta/args`.

## Enum IconState (Swift)

* `idle`
* `workingMain(ActivityKind)`
* `workingOther(ActivityKind)`
* `overridden(ActivityKind)` (override debug)

### ActivityKind → glyph

* `exec` → 💻
* `read` → 📄
* `write` → ✍️
* `edit` → 📝
* `attach` → 📎
* default → 🛠️

### Pemetaan visual

* `idle`: critter normal.
* `workingMain`: badge dengan glyph, tint penuh, animasi kaki "working".
* `workingOther`: badge dengan glyph, tint redup, tanpa scurry.
* `overridden`: menggunakan glyph/tint yang dipilih terlepas dari aktivitas.

## Submenu Konteks

* Menu root menampilkan satu baris "Konteks" dengan jumlah/status sesi dan membuka submenu.
* Header submenu Konteks menampilkan jumlah sesi aktif selama 24 jam terakhir.
* Setiap baris sesi mempertahankan bilah token, usia, pratinjau, thinking/verbose, reset, compact, dan aksi hapusnya.
* Pesan pemuatan, terputus, dan error pemuatan sesi muncul di dalam submenu Konteks.
* Detail penggunaan provider dan biaya penggunaan tetap berada di level root di bawah Konteks agar tetap bisa dilihat sekilas tanpa membuka submenu.

## Teks baris status (menu)

* Saat pekerjaan aktif: `<Session role> · <activity label>`
  * Contoh: `Main · exec: pnpm test`, `Other · read: apps/macos/Sources/OpenClaw/AppState.swift`.
* Saat menganggur: fallback ke ringkasan kesehatan.

## Ingesti event

* Sumber: event `agent` control-channel (`ControlChannel.handleAgentEvent`).
* Field yang di-parse:
  * `stream: "job"` dengan `data.state` untuk mulai/berhenti.
  * `stream: "tool"` dengan `data.phase`, `name`, `meta`/`args` opsional.
* Label:
  * `exec`: baris pertama dari `args.command`.
  * `read`/`write`: path yang dipersingkat.
  * `edit`: path ditambah jenis perubahan yang diinferensikan dari jumlah `meta`/diff.
  * fallback: nama tool.

## Override debug

* Settings ▸ Debug ▸ pemilih "Override ikon":
  * `System (auto)` (default)
  * `Working: main` (per jenis tool)
  * `Working: other` (per jenis tool)
  * `Idle`
* Disimpan melalui `@AppStorage("iconOverride")`; dipetakan ke `IconState.overridden`.

## Checklist pengujian

* Picu job sesi utama: verifikasi ikon langsung beralih dan baris status menampilkan label utama.
* Picu job sesi non-utama saat utama menganggur: ikon/status menampilkan non-utama; tetap stabil hingga selesai.
* Mulai utama saat yang lain aktif: ikon langsung beralih ke utama.
* Burst tool cepat: pastikan badge tidak berkedip (grace TTL pada hasil tool).
* Baris kesehatan muncul kembali setelah semua sesi menganggur.

## Terkait

* [Aplikasi macOS](/id/platforms/macos)
* [Ikon bilah menu](/id/platforms/mac/icon)
