Логіка стану рядка меню
Що показується
- Ми показуємо поточний стан роботи агента в іконці рядка меню та в першому рядку стану меню.
- Стан працездатності приховується, поки робота активна; він повертається, коли всі сесії перебувають у стані очікування.
- Блок “Вузли” у меню показує лише пристрої (спарені вузли через
node.list), а не записи клієнтів/присутності. - Розділ “Використання” з’являється під Context, коли доступні знімки використання провайдера.
Модель стану
- Сесії: події надходять із
runId(для кожного запуску) разом ізsessionKeyу корисному навантаженні. “Основна” сесія — це ключmain; якщо його немає, ми використовуємо сесію, оновлену найпізніше. - Пріоритет: main завжди має перевагу. Якщо main активна, її стан показується негайно. Якщо main у стані очікування, показується найнещодавніше активна не-main сесія. Ми не перемикаємося туди-сюди посеред активності; перемикання відбувається лише тоді, коли поточна сесія переходить у стан очікування або main стає активною.
- Типи активності:
job: виконання високорівневих команд (state: started|streaming|done|error).tool:phase: start|resultзtoolNameіmeta/args.
Перелік IconState (Swift)
idleworkingMain(ActivityKind)workingOther(ActivityKind)overridden(ActivityKind)(налагоджувальне перевизначення)
ActivityKind → гліф
exec→ 💻read→ 📄write→ ✍️edit→ 📝attach→ 📎- за замовчуванням → 🛠️
Візуальне зіставлення
idle: звичайна істота.workingMain: бейдж із гліфом, повне тонування, анімація “робочої” лапки.workingOther: бейдж із гліфом, приглушене тонування, без руху.overridden: використовує вибраний гліф/тонування незалежно від активності.
Текст рядка стану (меню)
- Поки робота активна:
<Роль сесії> · <мітка активності>- Приклади:
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/кількості відмінностей.- резервний варіант: назва інструмента.
Налагоджувальне перевизначення
- Налаштування ▸ Налагодження ▸ перемикач “Перевизначення іконки”:
System (auto)(за замовчуванням)Working: main(для кожного типу інструмента)Working: other(для кожного типу інструмента)Idle
- Зберігається через
@AppStorage("iconOverride"); зіставляється зIconState.overridden.
Контрольний список тестування
- Запустіть job основної сесії: переконайтеся, що іконка перемикається одразу, а рядок стану показує мітку main.
- Запустіть job не-main сесії, поки main у стані очікування: іконка/стан показують не-main; стан залишається стабільним, доки вона не завершиться.
- Запустіть main, поки інша активна: іконка миттєво перемикається на main.
- Швидкі серії викликів інструментів: переконайтеся, що бейдж не мерехтить (пільговий TTL для результатів інструментів).
- Рядок працездатності знову з’являється, щойно всі сесії переходять у стан очікування.