Что нового в 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 надолго зависала или падала с нехваткой памяти. Теперь параллельные разборы объединяются в один, чаты читаются потоком, а ответы инструментов пропускаются.