Skip to main content

Что нового в Veai 5.21

В Veai 5.21 исправления по итогам ревью обходятся дешевле: агент по возможности продолжает работу в том же чате, где ревью проводили. Для собственных провайдеров в заголовки запросов можно подставлять идентификатор чата. Остальное в релизе - исправления: команды в терминале больше не виснут в "Подготовке", MCP-серверы подключаются стабильнее, а поиск видит каталоги за пределами текущего проекта.

Исправления после ревью через формальный анализ​

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

Теперь Veai запоминает, из какого чата создан отчёт. Если этот чат открыт, агент получает короткий запрос с номерами замечаний и работает в нём. Если чата нет, открывается новый, как раньше. Число замечаний влияет на выбор агентов, которые берутся за исправление. Клики по "Fix with agent", "Copy" и "Open Report" теперь попадают в телеметрию, как и похожие действия рядом.

Идентификатор чата в заголовках запросов​

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

Теперь в значениях заголовков работает подстановка {{SESSION_ID}}. При отправке запроса Veai заменяет её на идентификатор чата. Внутри одного чата он не меняется, подагенты берут идентификатор родительского чата. Пример: x-opencode-session: {{SESSION_ID}}.

Есть и второе изменение, про авторизацию. Любой добавленный заголовок раньше молча отключал Authorization: Bearer, и ключ приходилось вписывать в заголовки открытым текстом. Теперь Veai добавляет Bearer-авторизацию с вашим ключом сам. Он этого не делает в четырёх случаях:

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

Если у вас заданы заголовки без ключа, например только Proxy-Authorization, к ним теперь добавится и Authorization: Bearer. Подсказка в настройках заголовков обновлена.

Исправления ошибок​

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

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

Поиск по тексту и поиск файлов по имени возвращали пустой список для каталогов вне текущего проекта. Речь о дополнительных разрешённых путях вроде ~/.m2 и о содержимом другого открытого проекта. Поиск файлов к тому же дожидался таймаута. Теперь Veai находит нужный проект или просматривает каталог напрямую. Абсолютные пути и пути вида ./dir внутри проекта тоже перестали давать пустой результат.

Когда из пачки правок применялась только часть, агент получал отчёт без номеров и не понимал, что файл уже изменён. Он отправлял всю пачку повторно и дублировал правки. Теперь в ответе перечислены номера применённых и неудачных правок, и сказано повторять только неудачные. Если не применилась ни одна, ответ начинается с "No edits were applied.".

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

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

MCP-серверы, у которых схема входных данных инструмента допускает произвольные поля (например, свежие версии chrome-devtools-mcp), раньше не подключались. Теперь подключаются. Исправлена и другая поломка: после старта IDE запросы к MCP могли постоянно падать с ошибкой "No ContextAccessor" до перезапуска. Veai теперь восстанавливает нужный реестр перед запросами. Кроме того, одновременные сообщения в stdio-серверы перестали теряться.

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

Исправления производительности​

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