Отдельный пункт меню отвечает за вложения: приложение само понимает, что вы выбрали, и показывает это готовым чипом над полем.
Как устроено само поле
- Поле начинается с двух строк и растёт под текст. В нём помещается до пяти строк, а дальше текст прокручивается внутри поля, а лента не растёт.
- Пустое поле показывает подсказку вместо текста. Она выглядит как Ask the agent и исчезает, как только вы начинаете печатать.
- Курсор в поле бирюзовый. Шрифт текста обычный для ответов агента, чтобы написанное вами читалось так же, как то, что он прислал.
- Кнопка отправки на клавиатуре работает как Send. Если текст есть, нажатие этой кнопки отправляет сообщение, а если поле пустое, ничего не происходит.
- В углу поля всегда видна кнопка разворота. В свёрнутом виде это значок во весь экран, в развёрнутом — стрелка вниз.
- Развёрнутое поле занимает почти весь экран. Его верхний край упирается в нижнюю границу верхней панели, чтобы шапка чата оставалась на виду.
- В развёрнутом виде текст не обрезается. Вместо пяти строк поле вмещает до тысячи строк и прокручивается внутри себя.
- Когда начинается ход агента, развёрнутое поле само сворачивается. Так лента остаётся свободной под ответ.
- Пустое свёрнутое поле компактное, а с текстом у него появляется верхний отступ. В этом отступе живёт счётчик символов, поэтому высота поля не скачет при наборе текста.
- Счётчик символов виден, только когда есть текст. Он показывает, сколько символов уже написано, и рисуется полупрозрачным в левом верхнем углу поля.
Что можно прикрепить
- Прикреплённый скилл показывается чипом с именем и знаком доллара. Нажатие на чип снимает скилл с этого сообщения, и следующее сообщение уйдёт уже без него.
- Снятый скилл не отключается целиком. Он просто перестаёт уходить в следующее сообщение, а в настройках остаётся включённым.
- Выбрать файл или картинку можно одним пунктом Attach. Из него открывается системный выбор файла, а тип вложения определяется по самому файлу.
- Тип файла определяется по тому, что о нём сообщает система. Сначала смотрится тип файла, а если система его не знает или отдаёт общий тип, то расширение и имя.
- Файлы делятся на три вида, и вид меняет то, как агент с ними обработается. Картинка сохраняется как картинка и агент смотрит её сам, текстовый файл уходит путём, который агент прочитает своими инструментами, а бинарный файл уходит путём, который прочитать нельзя.
- Пока файл загружается, чип показывает крутящийся кружок. Загрузка идёт на сервер, а путь к готовому файлу сам подставляется в текст сообщения.
- Путь вставляется в текст отдельной строкой. Если поле было пустым, путь становится всем содержимым, а если в нём уже был текст, путь добавляется в конец с новой строки.
- Картинка в чипе показывается миниатюрой. Миниатюра видна сразу, ещё до конца загрузки, и рисуется прямо на чипе.
- У бинарного файла на чипе есть предупреждение. Оно прямо говорит, что агент сможет прочитать такой файл только как файл, без содержимого.
- Крестик на чипе убирает вложение из сообщения. Сам файл при этом остаётся на сервере, из текста убирается его путь.
- Если загрузка сорвалась, чип становится красным. На нём видно, что именно сломалось, и подпись с предложением нажать, чтобы повторить.
- Нажатие на красный чип повторяет загрузку. Выбранный файл при этом не нужно искать заново, приложение берёт его по сохранённой ссылке.
- На чипе с файлом показан его размер. Маленькие файлы видны в байтах, средние в килобайтах, а большие в мегабайтах с одним знаком после запятой.
- Картинка с именем файла в чипе не теряется. Имя обрезается до одной строки с многоточием, если оно слишком длинное.
Нижний ряд
- Слева в ряду стоит иконка меню композера. Она открывает вложения, скиллы, заготовки, сжатие контекста и переключатели треда.
- На иконке меню может быть бирюзовая точка. Она означает, что состояние треда нестандартное: экран не засыпает или сообщения уходят в очередь.
- Рядом с меню стоит переключатель режима. Он переключает две метки: build и plan, и меняет значок на этой кнопке.
- Нажатие на режим просто переключает его. Отдельного выпадающего списка нет: кнопка всегда переключает build и plan сама.
- Справа в ряду стоит кнопка отправки. Она активна, только когда в поле есть непробельный текст, иначе нажатия ничего не делают.
- Пока идёт ход агента, рядом с отправкой появляется кнопка Stop. Она красная и останавливает работу агента.
- Во время остановки кнопка Stop временно гаснет. Так видно, что нажатие уже прошло и агент заканчивает текущее действие.
- Обе кнопки справа одного размера. Ряд не прыгает, когда кнопка Stop появляется и исчезает.
Меню композера
- Пункт Attach открывает выбор файла. Подсказка под ним предупреждает, что тип картинки определится сам, а если источники для распознавания не настроены, это прямо написано в подсказке.
- Пункт Skills открывает экран скиллов. Там можно включить скилл в промпте, и приложение покажет предупреждение, если такой скилл зависит от выключенного инструмента.
- Пункт Prompts открывает библиотеку заготовок. Выбранная заготовка вставляется в поле как готовый текст.
- Пункт Compact context сжимает переписку. Он недоступен, пока идёт ход агента или уже идёт сжатие, и при нажатии спрашивает подтверждение, потому что отменить сжатие нельзя.
- Переключатель Keep screen on не даёт экрану заснуть. Он держит экран включённым, пока открыт этот тред.
- Переключатель Steer while running решает, что будет с сообщением. Если он включён, сообщение дописывается в активный ход агента, а если выключен, оно встаёт в очередь и уйдёт после конца хода.
- Состояние переключателей видно сразу. У Keep screen on и Steer while running справа стоят настоящие тумблеры, которые показывают текущее состояние.
- Выбор режима отправки запоминается. Выключили Steer while running один раз, и в следующих тредах сообщения по умолчанию будут вставать в очередь.
Что происходит при отправке
- Перед отправкой экран отпускает клавиатуру. Фокус с поля снимается, чтобы клавиатура не ожила сама при следующем сворачивании экрана.
- Отправка сразу очищает поле и вложения. Прикреплённые скиллы снимаются чуть позже: когда сообщение ушло на сервер или встало в очередь, а если отправка сорвалась, они остаются прикреплёнными.
- Отправка не блокируется из-за связи. Если соединения с сервером нет, приложение сначала переподключается само, и только потом отправляет сообщение.
- Пока идёт ход агента, сообщение ведёт себя по-разному. При включённом steer оно дописывается в активный ход, а при выключенном встаёт в очередь и уходит после конца хода.
- Если сервер отклонил дописывание, сообщение не теряется. Оно переносится в очередь и уходит отдельным ходом, когда агент закончит текущую работу.
- Если ход в треде завис и заблокирован, сообщение тоже ждёт. Оно встаёт в очередь до ручной разблокировки, чтобы не слать команды в застрявший ход.
- Отправка снимает плашку о пустом ответе агента. Если агент вернул только размышления без ответа, подсказка с повтором исчезает.
- Отправленный текст сразу появляется в ленте как ваше сообщение. Оно сначала показывает состояние отправки и обновляется по мере подтверждения сервером.
- Пока файл ещё загружается, его можно отправить вместе с текстом. В этом случае путь в текст не подставится, но чип загрузки продолжит доводить файл до конца.
Технические данные
| Параметр | Значение |
|---|---|
| Строк в свёрнутом поле | от 1 до 5 |
| Строк в развёрнутом поле | до 1000 |
| Подсказка пустого поля | Ask the agent |
| Счётчик символов | только при непустом поле |
| Радиус карточки композера | 20dp |
| Тень карточки композера | 8dp |
| Отступы карточки снизу и по бокам | 12dp по бокам, 8dp снизу |
| Верхний отступ поля | 12dp у пустого свёрнутого, 28dp с текстом |
| Анимация отступов поля | 220 миллисекунд |
| Высота кнопок отправки и остановки | 40dp |
| Высота кнопки меню композера | 40dp |
| Размер кнопки разворота поля | 28dp |
| Режимы работы агента | build и plan |
| Отображение размера файла | байты, килобайты, мегабайты |
| Строк в предупреждении об ошибке загрузки | до 2 |
| Предельный размер обычного файла | 12 МБ |
| Предельный размер картинки | 20 МБ |
| Подготовка картинки | до 3 мегапикселей и 3072 пикселей по стороне |
| Качество картинки при сжатии | 95 для JPEG, PNG без потерь |
| Типы вложений | картинка, текст, бинарный файл |
| Куда попадает вложение | загружается на сервер, путь подставляется в текст |
| Автозакрытие поля в развёрнутом виде | при начале хода агента |
| Запоминание режима отправки | между тредами и запусками приложения |