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)
idleworkingMain(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 години.
- У кожному рядку сеансу зберігаються смуга токенів, вік, попередній перегляд, перемикач режимів міркування/докладного виведення, а також дії скидання, ущільнення й видалення.
- Повідомлення про завантаження, відсутність з’єднання та помилки завантаження сеансу відображаються в підменю «Контекст».
- Розділи використання та вартості залишаються на кореневому рівні під пунктом «Контекст», щоб їх можна було швидко переглядати, не відкриваючи підменю.
Текст рядка стану (меню)
- Під час активної роботи:
<Session role> · <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
- Зберігається за ключем
UserDefaultsopenclaw.iconOverride; зіставляється зIconState.overridden.
Контрольний список тестування
- Запустіть завдання основного сеансу: піктограма перемикається негайно, а в рядку стану відображається мітка основного сеансу.
- Запустіть завдання неосновного сеансу, коли основний неактивний: піктограма та стан відображають неосновний сеанс і залишаються незмінними до його завершення.
- Запустіть основний сеанс, поки активний інший: піктограма миттєво перемикається на основний.
- Швидкі серії викликів інструментів: індикатор не мерехтить (2-секундний пільговий період перед очищенням завершеного інструмента,
WorkActivityStore.toolResultGrace). - Рядок стану справності знову з’являється, щойно всі сеанси стають неактивними.
Пов’язане
Was this useful?