macOS companion app

Строка меню

Что отображается

  • Мы показываем текущее рабочее состояние агента в значке строки меню и в первой строке состояния меню.
  • Состояние работоспособности скрыто, пока работа активна; оно возвращается, когда все сеансы простаивают.
  • Корневое подменю «Контекст» содержит недавние сеансы, вместо того чтобы раскрывать их напрямую в корневом меню.
  • Блок «Узлы» в корневом меню перечисляет только устройства (связанные узлы через node.list), а не записи клиентов/присутствия.
  • Корневой раздел «Использование» появляется под Контекстом, когда доступны снимки использования провайдера, после чего показываются сведения о стоимости использования, если они доступны.

Модель состояния

  • Сеансы: события приходят с runId (для отдельного запуска) плюс sessionKey в полезной нагрузке. «Основной» сеанс — это ключ 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, а также действия сброса, Compaction и удаления.
  • Сообщения о загрузке, отключении и ошибке загрузки сеансов появляются внутри подменю «Контекст».
  • Сведения об использовании провайдера и стоимости использования остаются на корневом уровне под Контекстом, чтобы их можно было быстро просмотреть без открытия подменю.

Текст строки состояния (меню)

  • Пока работа активна: &lt;Session role&gt; · <activity label>
    • Примеры: Main · exec: pnpm test, Other · read: apps/macos/Sources/OpenClaw/AppState.swift.
  • В простое: возвращается к сводке работоспособности.

Прием событий

  • Источник: события agent control-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?
On this page

On this page