Skip to main content

Veai 5.21: Fix with agent возвращает замечания в исходный открытый чат и передаёт SESSION_ID шлюзу

Архив релизов

Агент только что нашёл ошибки в коде. Но при нажатии Fix with agent Veai открывал новый чат, где результатов этого анализа уже не было. Новому агенту приходилось заново разбирать замечания и изучать связанные файлы. На повторную работу уходили время и токены.

В Veai 5.21 этот разрыв убран. Если чат ревью открыт, Fix with agent отправляет в него номера замечаний, и агент сразу продолжает работу с накопленным контекстом. Если чат закрыт, Veai открывает новый, как раньше. Число замечаний влияет на выбор агентов для исправления.

Релиз также закрывает проблемы, которые останавливали работу агента уже после запуска задачи. Терминальные команды больше не зависают в состоянии Подготовка из-за операций IDE, поиск видит разрешённые каталоги за пределами проекта, а MCP-серверы стабильнее подключаются и обрабатывают одновременные сообщения.

Для собственных OpenAI-совместимых шлюзов появилась подстановка {{SESSION_ID}}: Veai передаёт стабильный идентификатор чата, включая запросы подагентов. Пользовательские заголовки больше не отключают Bearer-авторизацию автоматически, если ключ не передаётся другим способом.

Содержание​

Исправления Auto Review продолжаются в исходном чате​

Кнопка Fix with agent в отчёте ревью раньше всегда создавала новый чат. Новый агент начинал с отдельного контекста и повторно изучал сведения, которые агент ревью уже собрал во время анализа.

Теперь Veai запоминает, из какого чата создан отчёт. При нажатии Fix with agent возможны два сценария:

  1. Исходный чат открыт. Veai отправляет в него короткий запрос с номерами замечаний. Агент продолжает работу с контекстом ревью.
  2. Исходного чата нет. Veai открывает новый чат, как в предыдущих версиях.

Количество замечаний участвует в выборе агентов для исправления. После работы агента проверьте diff и повторно запустите нужные проверки.

Действия Fix with agent, Copy и Open Report теперь учитываются в телеметрии вместе с похожими действиями рядом с отчётом.

Идентификатор чата для OpenAI-совместимого шлюза​

Некоторые OpenAI-совместимые шлюзы требуют стабильный идентификатор диалога в каждом запросе. Например, OpenCode Go отвечает 400 MissingSessionID, если запрос не содержит заголовок x-opencode-session.

В пользовательских заголовках теперь доступна подстановка {{SESSION_ID}}. Перед отправкой запроса Veai заменяет её идентификатором текущего чата:

x-opencode-session: {{SESSION_ID}}

Идентификатор сохраняется внутри одного чата. Подагенты используют идентификатор родительского чата. Это позволяет шлюзу связывать запросы одной рабочей сессии, даже когда часть работы передана подагенту.

Подстановка нужна только провайдерам, которые ожидают session header. Название заголовка и требования к нему определяет ваш шлюз.

Bearer-авторизация при пользовательских заголовках​

До 5.21 любой добавленный заголовок отключал автоматический Authorization: Bearer. Ключ приходилось отдельно указывать среди заголовков.

Теперь Veai добавляет Bearer-авторизацию с настроенным ключом, даже если у провайдера есть другие пользовательские заголовки. Например, при одном Proxy-Authorization запрос также получит Authorization: Bearer.

Veai не добавляет Bearer-заголовок в четырёх случаях:

  • ключ не задан;
  • пользователь уже указал Authorization или один из заголовков для ключа: api-key, x-api-key, x-auth-token, api-token;
  • значение любого заголовка содержит {{API_KEY}};
  • сам ключ уже записан в значении заголовка.

Эти исключения предотвращают дублирование авторизации и сохраняют пользовательскую схему передачи ключа. Подсказка в настройках заголовков обновлена.

Инструменты больше не ждут индексацию​

Терминальная команда могла застрять в состоянии Подготовка: процесс не запускался, остановка агента не срабатывала. Команда ожидала операции записи, которые в этот момент выполняла IDE.

Та же зависимость затрагивала другие инструменты:

  • чтение памяти;
  • просмотр каталогов;
  • чтение вывода терминала;
  • поиск коммитов по сообщению;
  • статус Git;
  • запуск сборки;
  • запуск отладки.

Теперь эти инструменты не зависят от индексов IDE. Поиск коммитов также больше не читает всю историю каждого репозитория. В отладке время ожидания точки останова больше не включает индексацию, а фрагмент кода у точки останова сохраняет последнюю строку.

Поиск в разрешённых каталогах и других проектах​

Поиск по тексту и поиск файлов по имени возвращали пустой список для каталогов за пределами текущего проекта. Ошибка проявлялась на дополнительных разрешённых путях, например ~/.m2, и в содержимом другого открытого проекта. Поиск файлов мог ждать таймаут.

Теперь Veai сначала определяет подходящий открытый проект. Если каталог к проекту не относится, агент просматривает его напрямую. Абсолютные пути и пути вида ./dir внутри проекта также обрабатываются корректно.

Доступ к внешнему каталогу по-прежнему зависит от выданных разрешений. Исправление меняет поиск внутри разрешённой области и не расширяет её автоматически.

Точные отчёты о частично применённых правках​

При пакетном редактировании могла примениться только часть правок. Раньше агент получал отчёт без номеров изменений, повторно отправлял всю пачку и создавал дубликаты уже применённых строк.

Теперь ответ инструмента перечисляет номера успешных и неудачных правок. Агент получает прямое указание повторить только неудачные. Если не применилось ни одно изменение, ответ начинается с No edits were applied..

После частичного применения файл уже находится в новом состоянии. Нумерованный отчёт помогает агенту учитывать этот факт при следующей попытке.

Kotlin, потоковые вызовы и MCP​

Поиск символов теперь находит верхнеуровневые объявления Kotlin: функции, свойства и псевдонимы типов вне классов. Раньше для такого запроса инструмент мог ответить No classes found.

Исправлена обработка OpenAI-совместимых потоков, в которых два вызова инструментов приходят в одном фрагменте. Veai объединяет такие вызовы корректно и больше не завершает обработку ошибкой Currently only one tool call is supported per message!.

В работе MCP исправлены три сценария:

  • серверы со схемой входных данных, допускающей произвольные поля, теперь подключаются, включая свежие версии chrome-devtools-mcp;
  • после запуска IDE запросы восстанавливают нужный реестр и не продолжают падать с ошибкой No ContextAccessor до перезапуска;
  • одновременные сообщения в stdio-серверы больше не теряются.

Veai также больше не показывает сообщение Sentry did not accept the bug report event, если Sentry не принял отчёт об ошибке.

Анализ истории чатов с меньшей нагрузкой​

Раз в час Veai анализировал историю чатов, чтобы найти изменения. Каждый открытый проект запускал отдельный полный разбор вместе с ответами инструментов. При большом хранилище чатов и нескольких проектах это могло надолго остановить интерфейс IDE или привести к нехватке памяти.

В 5.21 параллельные разборы объединяются в один. Чаты читаются потоком, ответы инструментов пропускаются. Это сокращает объём данных, который одновременно находится в памяти, и устраняет повторный разбор одной истории для каждого открытого проекта.

После обновления​

Для большинства исправлений дополнительная настройка не требуется. Проверьте конфигурацию только в двух случаях:

  1. Если ваш OpenAI-совместимый шлюз требует идентификатор сессии, добавьте нужный заголовок со значением {{SESSION_ID}}.
  2. Если у провайдера настроены пользовательские заголовки, проверьте, кто формирует авторизацию: Veai добавит Authorization: Bearer автоматически, кроме четырёх случаев, перечисленных выше.

После исправлений через Fix with agent просмотрите diff и повторите проверки проекта. Если Veai открыл новый чат, исходный чат ревью уже не был доступен, поэтому агент собирает нужный контекст в новой сессии.