Menü Çubuğu Durum Mantığı
Gösterilenler
- Geçerli aracı çalışma durumunu menü çubuğu simgesinde ve menünün ilk durum satırında gösteririz.
- Sağlık durumu, çalışma etkinken gizlenir; tüm oturumlar boşta olduğunda geri gelir.
- Menüdeki “Nodes” bloğu, istemci/mevcudiyet girdilerini değil yalnızca cihazları (
node.listüzerinden eşleştirilmiş düğümler) listeler. - Sağlayıcı kullanım anlık görüntüleri mevcut olduğunda Context altında bir “Usage” bölümü görünür.
Durum modeli
- Oturumlar: olaylar
runId(çalıştırma başına) ile birlikte yüktesessionKeyile gelir. “main” oturumumainanahtarıdır; yoksa en son güncellenen oturuma geri döneriz. - Öncelik: main her zaman kazanır. main etkinken durumu hemen gösterilir. main boşta ise, en son etkin olan main olmayan oturum gösterilir. Etkinlik sırasında ileri geri geçiş yapmayız; yalnızca geçerli oturum boşta olduğunda veya main etkin olduğunda geçiş yaparız.
- Etkinlik türleri:
job: üst düzey komut yürütme (state: started|streaming|done|error).tool:toolNamevemeta/argsilephase: start|result.
IconState enum (Swift)
idleworkingMain(ActivityKind)workingOther(ActivityKind)overridden(ActivityKind)(hata ayıklama geçersiz kılması)
ActivityKind → glif
exec→ 💻read→ 📄write→ ✍️edit→ 📝attach→ 📎- varsayılan → 🛠️
Görsel eşleme
idle: normal critter.workingMain: glifli rozet, tam renk tonu, bacak “working” animasyonu.workingOther: glifli rozet, soluk renk tonu, scurry yok.overridden: etkinlikten bağımsız olarak seçilen glifi/renk tonunu kullanır.
Durum satırı metni (menü)
- Çalışma etkinken:
<Session role> · <activity label>- Örnekler:
Main · exec: pnpm test,Other · read: apps/macos/Sources/OpenClaw/AppState.swift.
- Örnekler:
- Boştayken: sağlık özetine geri döner.
Olay alımı
- Kaynak: kontrol kanalı
agentolayları (ControlChannel.handleAgentEvent). - Ayrıştırılan alanlar:
- başlatma/durdurma için
data.stateilestream: "job". data.phase,name, isteğe bağlımeta/argsilestream: "tool".
- başlatma/durdurma için
- Etiketler:
exec:args.commandöğesinin ilk satırı.read/write: kısaltılmış yol.edit: yol artımeta/diff sayılarından çıkarılan değişiklik türü.- geri dönüş: araç adı.
Hata ayıklama geçersiz kılması
- Ayarlar ▸ Debug ▸ “Icon override” seçici:
System (auto)(varsayılan)Working: main(araç türü başına)Working: other(araç türü başına)Idle
@AppStorage("iconOverride")üzerinden depolanır;IconState.overriddenile eşlenir.
Test kontrol listesi
- Main oturumu job tetikleyin: simgenin hemen değiştiğini ve durum satırının main etiketini gösterdiğini doğrulayın.
- Main boşta iken main olmayan bir oturum job tetikleyin: simge/durum main olmayanı gösterir; bitene kadar sabit kalır.
- Diğeri etkinken main başlatın: simge anında main’e döner.
- Hızlı araç patlamaları: rozetin titremediğinden emin olun (araç sonuçlarında TTL toleransı).
- Tüm oturumlar boşta olduğunda sağlık satırı yeniden görünür.