macOS companion app

Рядок меню

Що відображається

  • Поточний робочий стан агента відображається в піктограмі рядка меню та в першому рядку стану меню.
  • Стан справності приховується, поки триває робота; він знову з’являється, коли всі сеанси переходять у стан простою.
  • Кореневий пункт «Контекст» відкриває підменю з нещодавніми сеансами замість їх розгортання в кореневому меню.
  • Блок «Вузли» в кореневому меню містить лише спарені пристроїnode.list), а не записи клієнтів або присутності.
  • Розділ «Використання» з’являється в кореневому меню під розділом «Контекст», коли доступні знімки використання провайдера; після нього, за наявності, відображаються відомості про витрати.

Модель стану

  • Джерело: WorkActivityStore (apps/macos/Sources/OpenClaw/WorkActivityStore.swift).
  • Події надходять як ControlAgentEvent з runId; обробник (ControlChannel.routeWorkActivity) зчитує sessionKey із корисного навантаження події та використовує "main" за замовчуванням, якщо ключ відсутній.
  • Пріоритет: головний сеанс (за замовчуванням sessionKey == "main") завжди має перевагу. Якщо головний сеанс активний, його стан відображається негайно. Якщо головний сеанс перебуває в стані простою, натомість відображається останній активний неголовний сеанс. Сховище не перемикається під час активності; перемикання відбувається лише тоді, коли поточний сеанс переходить у стан простою або активується головний сеанс.
  • Типи активності:
    • job: виконання високорівневої команди (state: started|streaming|done|error|...).
    • tool: phase: start|result з name та необов’язковими meta/args.

Перелік IconState (Swift)

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

ActivityKind -> символ значка

ActivityKind обгортає ToolKind (bash, read, write, edit, attach, other) або окремий job. Кожному відповідає символ SF Symbols, який відображається як значок поверх піктограми істоти (IconState.badgeSymbolName):

Тип Символ
bash chevron.left.slash.chevron.right
read doc
write pencil
edit pencil.tip
attach paperclip
other / job gearshape.fill

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

  • idle: звичайна істота без значка.
  • workingMain: значок із символом, повний відтінок (виразність .primary), анімація «роботи» лапок.
  • workingOther: значок із символом, приглушений відтінок (виразність .secondary), без метушіння.
  • overridden: використовує вибраний символ і відтінок незалежно від фактичної активності.

Підменю контексту

  • Кореневе меню містить один рядок «Контекст» із кількістю сеансів і станом; він відкриває підменю (MenuSessionsInjector).
  • Заголовок підменю показує кількість активних сеансів за останні 24 години.
  • У кожному рядку сеансу зберігаються смуга токенів, вік, попередній перегляд, перемикач режимів міркування/докладного виведення, а також дії скидання, ущільнення й видалення.
  • Повідомлення про завантаження, відсутність з’єднання та помилки завантаження сеансу відображаються в підменю «Контекст».
  • Розділи використання та вартості залишаються на кореневому рівні під пунктом «Контекст», щоб їх можна було швидко переглядати, не відкриваючи підменю.

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

  • Під час активної роботи: &lt;Session role&gt; · <activity label> ("\(roleLabel) · \(activity.label)" у MenuContentView), де мітка ролі — Main або Other.
  • У стані бездіяльності: повертається до зведення про стан системи.

Отримання подій

  • Джерело: події agent каналу керування, маршрутизовані методом ControlChannel.routeWorkActivity(from:).
  • Поля, що аналізуються:
    • stream: "job" із data.state для запуску/зупинки.
    • stream: "tool" із data.phase, data.name та необов’язковими data.meta/data.args.
  • Мітки інструментів надходять із ToolDisplayRegistry.resolve(name:args:meta:); для нерозпізнаних назв використовується необроблена назва інструмента.

Перевизначення для налагодження

  • Засіб вибору Settings > Debug > "Icon override":
    • System (auto) (за замовчуванням)
    • Working: main / Working: other (для кожного типу інструмента: bash, читання, запис, редагування, інше)
    • Idle
  • Зберігається за ключем UserDefaults openclaw.iconOverride; зіставляється з IconState.overridden.

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

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

Пов’язане

Was this useful?
On this page

On this page