macOS companion app
Barra dei menu
Cosa viene mostrato
- Lo stato di lavoro corrente dell'agente viene visualizzato nell'icona della barra dei menu e nella prima riga di stato del menu.
- Lo stato di integrità viene nascosto mentre è in corso un'attività; riappare quando tutte le sessioni sono inattive.
- Una voce radice "Contesto" apre un sottomenu con le sessioni recenti anziché espanderle nel menu radice.
- Un blocco "Nodi" nel menu radice elenca solo i dispositivi associati (da
node.list), non le voci relative a client/presenza. - Una sezione radice "Utilizzo" appare sotto Contesto quando sono disponibili istantanee dell'utilizzo del provider, seguite dai dettagli sui costi, se disponibili.
Modello di stato
- Origine:
WorkActivityStore(apps/macos/Sources/OpenClaw/WorkActivityStore.swift). - Gli eventi arrivano come
ControlAgentEventcon unrunId; il gestore (ControlChannel.routeWorkActivity) leggesessionKeydal payload dell'evento e usa"main"come valore predefinito se assente. - Priorità: la sessione principale (
sessionKey == "main"per impostazione predefinita) ha sempre la precedenza. Se la sessione principale è attiva, il suo stato viene mostrato immediatamente. Se è inattiva, viene mostrata invece la sessione non principale attiva più di recente. L'archivio non cambia sessione durante un'attività; passa a un'altra sessione solo quando quella corrente diventa inattiva o quella principale diventa attiva. - Tipi di attività:
job: esecuzione di comandi di alto livello (state: started|streaming|done|error|...).tool:phase: start|resultconnameemeta/argsfacoltativi.
Enumerazione IconState (Swift)
idleworkingMain(ActivityKind)workingOther(ActivityKind)overridden(ActivityKind)(sostituzione per il debug)
ActivityKind -> simbolo del badge
ActivityKind incapsula un ToolKind (bash, read, write, edit, attach, other) o un semplice job. Ciascuno corrisponde a un badge SF Symbol disegnato sopra l'icona della creatura (IconState.badgeSymbolName):
| Tipo | Simbolo |
|---|---|
bash |
chevron.left.slash.chevron.right |
read |
doc |
write |
pencil |
edit |
pencil.tip |
attach |
paperclip |
other / job |
gearshape.fill |
Corrispondenza visiva
idle: creatura normale, nessun badge.workingMain: badge con simbolo, tinta piena (risalto.primary), animazione delle zampe "al lavoro".workingOther: badge con simbolo, tinta attenuata (risalto.secondary), nessun movimento rapido.overridden: usa il simbolo e la tinta scelti indipendentemente dall'attività reale.
Sottomenu del contesto
- Il menu principale mostra una riga "Contesto" con il numero e lo stato delle sessioni; apre un sottomenu (
MenuSessionsInjector). - L'intestazione del sottomenu mostra il numero di sessioni attive nelle ultime 24 ore.
- Ogni riga di sessione mantiene la barra dei token, l'età, l'anteprima, le opzioni per attivare o disattivare il ragionamento e la modalità dettagliata e le azioni di reimpostazione, Compaction ed eliminazione.
- I messaggi di caricamento, disconnessione ed errore durante il caricamento delle sessioni vengono visualizzati nel sottomenu del contesto.
- Le sezioni relative all'utilizzo e ai costi rimangono al livello principale sotto Contesto, così da poter essere consultate a colpo d'occhio senza aprire il sottomenu.
Testo della riga di stato (menu)
- Mentre il lavoro è attivo:
<Session role> · <activity label>("\(roleLabel) · \(activity.label)"inMenuContentView), dove l'etichetta del ruolo èMainoOther. - Quando è inattivo: torna al riepilogo dello stato di integrità.
Acquisizione degli eventi
- Origine: eventi
agentdel canale di controllo, instradati daControlChannel.routeWorkActivity(from:). - Campi analizzati:
stream: "job"condata.stateper l'avvio/arresto.stream: "tool"condata.phase,data.nameedata.meta/data.argsfacoltativi.
- Le etichette degli strumenti provengono da
ToolDisplayRegistry.resolve(name:args:meta:); per i nomi non risolti viene utilizzato il nome grezzo dello strumento.
Override di debug
- Impostazioni > Debug > selettore "Icon override":
System (auto)(predefinito)Working: main/Working: other(per tipo di strumento: bash, lettura, scrittura, modifica, altro)Idle
- Memorizzato nella chiave
UserDefaultsopenclaw.iconOverride; associato aIconState.overridden.
Elenco di controllo per i test
- Avviare un processo della sessione principale: l'icona cambia immediatamente e la riga di stato mostra l'etichetta della sessione principale.
- Avviare un processo di una sessione non principale mentre quella principale è inattiva: l'icona e lo stato mostrano la sessione non principale e rimangono stabili fino al suo completamento.
- Avviare la sessione principale mentre un'altra sessione è attiva: l'icona passa immediatamente alla sessione principale.
- Raffiche rapide di strumenti: il badge non sfarfalla (finestra di tolleranza di 2 secondi prima di rimuovere uno strumento che ha terminato,
WorkActivityStore.toolResultGrace). - La riga dello stato di integrità ricompare quando tutte le sessioni sono inattive.
Correlati
Was this useful?