Приложение-компаньон для macOS
Строка меню
Что отображается
- Текущее состояние работы агента отображается в значке строки меню и в первой строке статуса меню.
- Статус работоспособности скрыт, пока идет работа; он возвращается, когда все сессии простаивают.
- Блок «Узлы» в меню перечисляет только устройства (спаренные узлы через
node.list), а не записи клиентов/присутствия. - Раздел «Использование» появляется под Контекстом, когда доступны снимки использования провайдеров.
Модель состояний
- Сессии: события приходят с
runId(на запуск) иsessionKeyв данных. «Основная» сессия имеет ключmain; если она отсутствует, используется последняя обновленная сессия. - Приоритет: основная сессия всегда в приоритете. Если основная активна, её состояние отображается немедленно. Если основная простаивает, отображается последняя активная неосновная сессия. Мы не переключаемся во время активности; переключение происходит только когда текущая сессия переходит в состояние простоя или основная становится активной.
- Виды активности:
job: выполнение высокоуровневой команды (state: started|streaming|done|error).tool:phase: start|resultсtoolNameиmeta/args.
Enum IconState (Swift)
idleworkingMain(ActivityKind)workingOther(ActivityKind)overridden(ActivityKind)(отладочное переопределение)
ActivityKind → глиф
exec→ 💻read→ 📄write→ ✍️edit→ 📝attach→ 📎- по умолчанию → 🛠️
Визуальное соответствие
idle: обычный значок (critter).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/счетчиков diff.- запасной вариант: имя инструмента.
Отладочное переопределение
- Настройки ▸ Отладка ▸ Селектор «Переопределение значка»:
Система (авто)(по умолчанию)Работает: основная(по виду инструмента)Работает: другая(по виду инструмента)Простой
- Сохраняется через
@AppStorage("iconOverride"); преобразуется вIconState.overridden.
Контрольный список для тестирования
- Запустить задание основной сессии: убедиться, что значок переключается немедленно и строка статуса показывает метку основной сессии.
- Запустить задание неосновной сессии, пока основная простаивает: значок/статус показывает неосновную сессию; остается стабильным до её завершения.
- Запустить основную сессию, пока другая активна: значок мгновенно переключается на основную.
- Быстрые всплески инструментов: убедиться, что значок не мерцает (время жизни для результатов инструмента с запасом).
- Строка состояния работоспособности снова появляется, когда все сессии простаивают.
Настройка разработки для macOSГолосовое пробуждение