Полосы появляются и исчезают сами по своим условиям, ничего включать вручную не нужно. Порядок сверху вниз всегда один: очередь, потом план, потом статус хода, а под ними — поле ввода.
Полоска очереди
Полоска очереди появляется только тогда, когда есть сообщения, отправленные вами во время работы агента. Сообщение из очереди не показывается в ленте: оно появится там само, когда агент возьмёт его в работу. Каждое сообщение в очереди занимает отдельную строку с иконкой таймера, текстом сообщения и двумя кнопками: Cancel убирает сообщение из очереди, а Send now отправляет его первым.
- У первого сообщения в очереди стоит метка next, если сообщений больше одного, чтобы было видно, что уйдёт следующим.
- Сообщение, которое ещё не дошло до агента, помечено not sent. Для такого сообщения кнопка Send now не показывается, потому что отправлять нечего: оно уйдёт само, как только появится связь.
- Прикреплённые к сообщению скиллы пишутся мелкой строкой над текстом с символом доллара, поэтому видно, что сообщение уйдёт не голым текстом.
- Тап по тексту сообщения открывает правку. В окне правки поле сообщения и две кнопки: Save сохраняет, Cancel закрывает без изменений. Для сообщения, которое уже стоит в очереди агента, правка уходит на сервер, а для ещё не отправленного меняется только текст в буфере.
- Кнопка Send now прерывает текущий ход агента и отправляет выбранное сообщение вместо него. Выбранное сообщение сразу встаёт в полоске первым, чтобы было видно, что уйдёт следующим.
- Полоска показывает только текущий открытый тред. Очередь другого диалога подтянется сама, когда вы его откроете.
Если агент не может принять сообщение прямо во время хода, сообщение не теряется: оно либо встаёт в очередь агента, либо остаётся в буфере на телефоне и уходит при восстановлении связи. Буфер перед отправкой сверяется с очередью агента, поэтому сообщение, которое уже дошло, не отправляется второй раз. Если ход агента завис и тред помечен заблокированным, приложение не отправляет очередь само: сначала нужно разблокировать тред кнопкой на плашке внизу ленты.
Полоска плана
Полоска плана — это единственное место, где виден план, пока он живёт. Как только агент предложил план, вы его одобрили или он выполняется, карточки плана в ленте нет: план целиком живёт здесь, а в ленту он возвращается уже закрытым, как часть истории. Строка полоски идёт в одну линию: слева кружок с номером текущего шага, дальше текст текущего шага или название плана, справа счётчик выполненных шагов из общего числа и стрелка раскрытия. Под строкой идёт честная полоска прогресса, а под ней тонкая линия-разделитель перед полосой статуса.
- План ждёт вашего решения — в полоске две кнопки Reject и Start. Кнопка Start основная и мягко пульсирует, пока ждёт нажатия.
- Reject отклоняет план и оставляет агента в режиме планирования. В поле ввода при этом ничего не пропадает: если там был ваш текст, он останется.
- Start одобряет план и переводит агента в обычный режим работы. Всё, что было в поле ввода, при этом не отправляется: агент получает только подтверждение и выполняет план.
- Кружок слева показывает номер текущего шага, а когда все шаги закрыты — галочку. Пока шагов в плане нет, вместо номера рисуется значок плана.
- Счётчик справа обновляется на каждом шаге агента и показывает вид «сделано из всего», например 2/5.
- Когда все шаги закрыты, полоска две с половиной секунды показывает, что всё выполнено, а потом исчезает, не дожидаясь конца хода.
- Если ход закончился, а часть шагов осталась неотмеченной, полоска остаётся и показывает текущий шаг. Полоска уходит, как только начнётся новый ход или все шаги закроются.
- Полоска не показывается для плана, который отклонили, для плана прошлого хода во время нового хода в режиме планирования и для активного хода в другом треде.
Раскрытая панель плана
Тап по строке полоски раскрывает план целиком, и он растёт вверх поверх ленты: лента и поле ввода остаются на своих местах, а список шагов прокручивается сам. Кнопка «Назад» на устройстве сворачивает панель, как и повторный тап по строке. В шапке панели слева написан счётчик выполненных шагов, а после завершения хода с неотмеченными шагами вместо счётчика пишется, сколько шагов осталось без отметки. Справа в шапке есть кнопка копирования: она копирует план целиком, и в свёрнутой строке такой кнопки нет, чтобы строка не резервировала под неё место.
Полоска статуса хода
Полоска статуса есть всегда и не зависит от прокрутки ленты. В ходе она показывает пульсирующие точки, значок текущего этапа, текст этапа, счётчик сообщений в очереди и таймер. Без хода вместо пульсирующих точек стоят три неподвижные точки и галочка, а таймер и счётчик очереди исчезают.
Что может быть написано в строке статуса:
- ready — хода нет, агент готов к работе.
- working… — ход идёт, но этап не распознан.
- running… — агент выполняет команду в терминале.
- mcp: сервер·инструмент — агент вызывает инструмент через MCP.
- reading: путь — агент читает или ищет по файлу.
- writing response… — агент пишет ответ.
- thinking… — агент размышляет.
- changing files… — агент вносит правки в файлы.
- Compacting context — агент сжимает переписку, чтобы влезть в окно контекста.
- opening thread… — открывается тред и читается его история.
- waiting for approval — агент ждёт вашего одобрения действия.
- waiting for your answer — агент задал вопрос или ждёт ввода в форму.
- thread blocked — ход потерялся, и тред ждёт разблокировки.
- suspected hang · silence Nм — ход молчит дольше обычного, и приложение отметило это как подозрение на зависание.
- no connection · reconnecting… — связь с агентом потеряна, идёт переподключение.
- Disconnected — у удалённого агента связь оборвана.
- connected · remote — у удалённого агента связь жива.
- Значок слева соответствует этапу: терминал для команды, карандаш для правки файла, голова для размышлений, гаечный ключ для MCP, документ для чтения файлов и круговые стрелки для смены файлов.
- Таймер идёт на живой ход и тикает раз в секунду. Он показывает минуты и секунды, а когда ход длится больше часа — ещё и часы.
- Пока идёт сжатие контекста, таймер показывает время сжатия, а не время хода.
- Счётчик очереди в строке статуса появляется, только когда в очереди есть сообщения и ход идёт.
- Цвет строки зависит от состояния. Блокировка треда и подозрение на зависание рисуются цветом ошибки, ожидание вашего ответа, одобрения и открытие треда — акцентным цветом, всё остальное — обычным цветом текста.
- Тонкая полоска под строкой идёт во время хода и во время открытия треда. Она показывает, что процесс идёт, но не показывает точный процент: задачи у неё нет.
- Если ход молчит, а вопросов и команд в ленте нет, приложение через четыре минуты тишины проверяет, жив ли ход на сервере. Проверка идёт не чаще раза в две минуты, и если сервер отвечает, что ход идёт, приложение продолжает показывать статус молчания, а не обрывает ход.
- Если сервер отвечает, что ход уже закончен, приложение закрывает ход у себя и отправляет накопленную очередь.
- Пока ждёт вашего ответа, одобрения плана или идёт сжатие контекста, проверка молчания не запускается: в этих случаях тишина ожидаема.
- Пока агент выполняет команду, которая ещё не закончилась, приложение не считает ход зависшим и не прерывает его по таймеру.
- Разблокировка треда снимает подозрение на зависание, пишет уведомление об успехе и отправляет очередь.
Технические данные
| Параметр | Значение |
|---|---|
| Порядок полос снизу вверх | статус хода, план, очередь |
| Точки и значок в строке статуса | точки 4dp, значок 16dp |
| Отступы в строке полоски | 16dp по горизонтали, 6dp по вертикали |
| Отступы в строке плана и очереди | 16dp по горизонтали, 8dp по вертикали |
| Кнопки в строке | 12dp по горизонтали, 4dp по вертикали |
| Пульсация кнопки Start | 800 мс, туда-обратно |
| Высота кружка шага в плане | 20dp |
| Минимальная высота строки плана | 36dp |
| Высота полоски прогресса | 2dp, отступ по краям 16dp |
| Разделитель под планом | 0.5dp |
| Высота поля правки сообщения в очереди | от 96dp |
| Сколько строк занимает текст сообщения в очереди | до двух, лишнее обрезается |
| Формат таймера хода | mm:ss, а дольше часа h:mm:ss |
| Вспышка выполненного плана | 2,5 с |
| Формат счётчика шагов | сделано/всего |
| Пауза перед повтором неудачной отправки очереди | 1500 мс |
| Задержка перечитывания очереди по уведомлению агента | 150 мс |
| Порог тишины для проверки хода | 4 минуты |
| Минимальный интервал между проверками | 2 минуты |
| Тайм-аут сжатия контекста | 10 минут |
| Когда приложение запускает очередь само | тред простаивает, очередь непуста, запрос уже не летит |
Что агент умеет
- Агент умеет принять ваше сообщение посреди хода: если режим отправки переключён в очередь, сообщение встаёт в очередь и уходит сразу после конца хода.
- Если ход оборвался и очередь осталась стоять, приложение само запускает её голову, а ждать, пока это сделает агент, не нужно.
- Агент умеет предложить план и ждать вашего решения прямо в полоске под лентой.
- Агент умеет отмечать шаги плана по ходу работы, и полоска показывает это в реальном времени.
- Агент умеет сжимать переписку, и пока идёт сжатие, в строке статуса пишется отдельная надпись.
- Агент умеет выполнять команды, читать файлы, вносить правки и вызывать инструменты, и строкой статуса показывает, чем он занят прямо сейчас.
Ограничения
- Тонкая полоска под строкой статуса показывает сам факт работы, а не точный процент: точной задачи у неё нет, поэтому считать нечего.
- Сообщение в очереди остаётся в очереди, пока агент его не начал: отправить его раньше времени без прерывания хода нельзя, поэтому Send now останавливает текущий ход.
- Сообщения, помеченные not sent, нельзя отправить первым: они ещё не дошли до агента и ждут связи.
- Полоска плана показывает только последний план: если планов было несколько, в ленте остаются они, а в полоске видно только текущий.
- Раскрытая панель плана занимает всю рабочую область и прокручивается сама, поэтому длинный план не выталкивает поле ввода, а шапка с кнопкой копирования остаётся на виду.
- Заблокированный тред не отправляет очередь автоматически: пока вы не разблокируете его кнопкой на плашке, сообщения остаются в очереди.
- Проверка молчания не прерывает ход сама: она только показывает подозрение и сверяется с сервером, а решение остаётся за вами.