Logika Status Bilah Menu
Apa yang ditampilkan
- Kami menampilkan status pekerjaan agen saat ini pada ikon bilah menu dan pada baris status pertama di menu.
- Status kesehatan disembunyikan saat pekerjaan aktif; status itu kembali saat semua sesi idle.
- Blok “Nodes” di menu hanya mencantumkan perangkat (node yang dipasangkan melalui
node.list), bukan entri client/presence. - Bagian “Usage” muncul di bawah Context saat snapshot penggunaan provider tersedia.
Model state
- Sesi: event tiba dengan
runId(per-eksekusi) ditambahsessionKeydi payload. Sesi “main” adalah kuncimain; jika tidak ada, kami fallback ke sesi yang terakhir diperbarui. - Prioritas: main selalu menang. Jika main aktif, state-nya langsung ditampilkan. Jika main idle, sesi non‑main yang paling baru aktif akan ditampilkan. Kami tidak bolak-balik di tengah aktivitas; kami hanya berpindah saat sesi saat ini menjadi idle atau main menjadi aktif.
- Jenis aktivitas:
job: eksekusi perintah tingkat tinggi (state: started|streaming|done|error).tool:phase: start|resultdengantoolNamedanmeta/args.
Enum IconState (Swift)
idleworkingMain(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.
Teks baris status (menu)
- Saat pekerjaan aktif:
<Session role> · <activity label>- Contoh:
Main · exec: pnpm test,Other · read: apps/macos/Sources/OpenClaw/AppState.swift.
- Contoh:
- Saat idle: fallback ke ringkasan kesehatan.
Ingest event
- Sumber: event
agentcontrol-channel (ControlChannel.handleAgentEvent). - Field yang di-parse:
stream: "job"dengandata.stateuntuk mulai/berhenti.stream: "tool"dengandata.phase,name,meta/argsopsional.
- Label:
exec: baris pertamaargs.command.read/write: path yang dipendekkan.edit: path plus jenis perubahan yang disimpulkan darimeta/jumlah diff.- fallback: nama tool.
Override debug
- Settings ▸ Debug ▸ pemilih “Icon override”:
System (auto)(default)Working: main(per jenis tool)Working: other(per jenis tool)Idle
- Disimpan melalui
@AppStorage("iconOverride"); dipetakan keIconState.overridden.
Daftar periksa pengujian
- Picu job sesi main: verifikasi ikon langsung berpindah dan baris status menampilkan label main.
- Picu job sesi non‑main saat main idle: ikon/status menampilkan non‑main; tetap stabil sampai selesai.
- Mulai main saat yang lain aktif: ikon langsung beralih ke main.
- Ledakan tool cepat: pastikan badge tidak berkedip (masa tenggang TTL pada hasil tool).
- Baris kesehatan muncul kembali setelah semua sesi idle.