macOS companion app
Строка меню
Что отображается
- Мы показываем текущее рабочее состояние агента в значке строки меню и в первой строке состояния меню.
- Состояние работоспособности скрыто, пока работа активна; оно возвращается, когда все сеансы простаивают.
- Корневое подменю «Контекст» содержит недавние сеансы, вместо того чтобы раскрывать их напрямую в корневом меню.
- Блок «Узлы» в корневом меню перечисляет только устройства (связанные узлы через
node.list), а не записи клиентов/присутствия. - Корневой раздел «Использование» появляется под Контекстом, когда доступны снимки использования провайдера, после чего показываются сведения о стоимости использования, если они доступны.
Модель состояния
- Сеансы: события приходят с
runId(для отдельного запуска) плюсsessionKeyв полезной нагрузке. «Основной» сеанс — это ключ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: использует выбранный глиф/тонировку независимо от активности.
Подменю «Контекст»
- Корневое меню показывает одну строку «Контекст» с количеством/статусом сеансов и открывает подменю.
- Заголовок подменю «Контекст» показывает количество активных сеансов за последние 24 часа.
- Каждая строка сеанса сохраняет свою полосу токенов, возраст, предпросмотр, режим thinking/verbose, а также действия сброса, Compaction и удаления.
- Сообщения о загрузке, отключении и ошибке загрузки сеансов появляются внутри подменю «Контекст».
- Сведения об использовании провайдера и стоимости использования остаются на корневом уровне под Контекстом, чтобы их можно было быстро просмотреть без открытия подменю.
Текст строки состояния (меню)
- Пока работа активна:
<Session role> · <activity label>- Примеры:
Main · exec: pnpm test,Other · read: apps/macos/Sources/OpenClaw/AppState.swift.
- Примеры:
- В простое: возвращается к сводке работоспособности.
Прием событий
- Источник: события
agentcontrol-channel (ControlChannel.handleAgentEvent). - Разобранные поля:
stream: "job"сdata.stateдля запуска/остановки.stream: "tool"сdata.phase,name, необязательнымиmeta/args.
- Метки:
exec: первая строкаargs.command.read/write: сокращенный путь.edit: путь плюс выведенный тип изменения изmeta/количества строк diff.- запасной вариант: имя инструмента.
Отладочное переопределение
- Настройки ▸ Отладка ▸ средство выбора «Переопределение значка»:
System (auto)(по умолчанию)Working: main(по типу инструмента)Working: other(по типу инструмента)Idle
- Хранится через
@AppStorage("iconOverride"); сопоставляется сIconState.overridden.
Контрольный список тестирования
- Запустить задачу основного сеанса: убедиться, что значок переключается немедленно, а строка состояния показывает метку основного сеанса.
- Запустить задачу неосновного сеанса, пока основной простаивает: значок/статус показывает неосновной; остается стабильным до завершения.
- Запустить основной, пока другой активен: значок мгновенно переключается на основной.
- Быстрые всплески инструментов: убедиться, что бейдж не мерцает (льготный TTL для результатов инструментов).
- Строка работоспособности снова появляется, когда все сеансы простаивают.
Связанное
Was this useful?