---
read_when:
    - Налаштування інтерфейсу меню Mac або логіки стану
summary: Логіка стану панелі меню та те, що показується користувачам
title: Рядок меню
x-i18n:
    generated_at: "2026-05-06T02:40:04Z"
    model: gpt-5.5
    provider: openai
    source_hash: c569ced20b2f6a639d52d373cc8b55a42d7c015a0b234d5154ce67ac03c2eaf6
    source_path: platforms/mac/menu-bar.md
    workflow: 16
---

## Що показано

- Ми відображаємо поточний робочий стан агента в іконці рядка меню та в першому рядку стану меню.
- Стан працездатності приховано, доки робота активна; він повертається, коли всі сесії неактивні.
- Кореневе підменю «Контекст» містить нещодавні сесії замість того, щоб розгортати їх безпосередньо в кореневому меню.
- Блок «Nodes» у кореневому меню перелічує лише **пристрої** (спарені вузли через `node.list`), а не записи клієнтів/присутності.
- Кореневий розділ «Використання» з’являється під «Контекст», коли доступні знімки використання провайдера, а за ними, коли доступні, наведено деталі вартості використання.

## Модель станів

- Сесії: події надходять із `runId` (для окремого запуску) плюс `sessionKey` у payload. «Головна» сесія має ключ `main`; якщо його немає, ми повертаємося до сесії, яку було оновлено найнещодавніше.
- Пріоритет: головна сесія завжди перемагає. Якщо головна сесія активна, її стан показується негайно. Якщо головна сесія неактивна, показується найнещодавніше активна неголовна сесія. Ми не перемикаємося туди-сюди посеред активності; ми перемикаємося лише тоді, коли поточна сесія стає неактивною або головна сесія стає активною.
- Види активності:
  - `job`: високорівневе виконання команди (`state: started|streaming|done|error`).
  - `tool`: `phase: start|result` із `toolName` та `meta/args`.

## Перелік IconState (Swift)

- `idle`
- `workingMain(ActivityKind)`
- `workingOther(ActivityKind)`
- `overridden(ActivityKind)` (налагоджувальне перевизначення)

### ActivityKind → гліф

- `exec` → 💻
- `read` → 📄
- `write` → ✍️
- `edit` → 📝
- `attach` → 📎
- типово → 🛠️

### Візуальне зіставлення

- `idle`: звичайний персонаж.
- `workingMain`: бейдж із гліфом, повне тонування, анімація ніг «працює».
- `workingOther`: бейдж із гліфом, приглушене тонування, без метушні.
- `overridden`: використовує вибраний гліф/тонування незалежно від активності.

## Підменю «Контекст»

- Кореневе меню показує один рядок «Контекст» із кількістю/станом сесій і відкриває підменю.
- Заголовок підменю «Контекст» показує кількість активних сесій за останні 24 години.
- Кожен рядок сесії зберігає свою смугу токенів, вік, попередній перегляд, thinking/verbose, а також дії скидання, ущільнення й видалення.
- Повідомлення про завантаження, від’єднання та помилки завантаження сесій з’являються всередині підменю «Контекст».
- Використання провайдера та деталі вартості використання залишаються на кореневому рівні під «Контекст», щоб їх можна було швидко переглянути без відкриття підменю.

## Текст рядка стану (меню)

- Поки робота активна: `<Session role> · <activity label>`
  - Приклади: `Main · exec: pnpm test`, `Other · read: apps/macos/Sources/OpenClaw/AppState.swift`.
- Коли неактивно: повертається до зведення працездатності.

## Приймання подій

- Джерело: події control-channel `agent` (`ControlChannel.handleAgentEvent`).
- Розібрані поля:
  - `stream: "job"` із `data.state` для запуску/зупинки.
  - `stream: "tool"` із `data.phase`, `name`, необов’язковими `meta`/`args`.
- Мітки:
  - `exec`: перший рядок `args.command`.
  - `read`/`write`: скорочений шлях.
  - `edit`: шлях плюс виведений вид зміни з `meta`/кількості рядків diff.
  - запасний варіант: назва інструмента.

## Налагоджувальне перевизначення

- Settings ▸ Debug ▸ селектор «Перевизначення іконки»:
  - `System (auto)` (типово)
  - `Working: main` (для кожного виду інструмента)
  - `Working: other` (для кожного виду інструмента)
  - `Idle`
- Зберігається через `@AppStorage("iconOverride")`; зіставляється з `IconState.overridden`.

## Контрольний список тестування

- Запустіть завдання головної сесії: перевірте, що іконка перемикається негайно, а рядок стану показує мітку головної сесії.
- Запустіть завдання неголовної сесії, коли головна неактивна: іконка/стан показують неголовну сесію; залишаються стабільними, доки вона не завершиться.
- Запустіть головну сесію, поки інша активна: іконка миттєво перемикається на головну.
- Швидкі сплески інструментів: переконайтеся, що бейдж не мерехтить (TTL-пільга для результатів інструментів).
- Рядок працездатності знову з’являється, щойно всі сесії стають неактивними.

## Пов’язане

- [застосунок macOS](/uk/platforms/macos)
- [Іконка рядка меню](/uk/platforms/mac/icon)
