v1.32.0
Гейт неподдерживаемых форматов исходников. Схема индекса и BUILDER_VERSION (14) не менялись — пересборка индексов не требуется; IndexBuilder, состав MCP-тулов и поведение на выгрузке Конфигуратора (cf) и проекте 1С:EDT (edt) не изменились.
Версия минорная: у ответа rlm_start появилось новое поле, а построение индекса на чужом формате перестало запускаться молча.
Добавлено
- Поле
source_supportв ответеrlm_start— три значения:supported,foreign_with_bsl,foreign_no_bsl. Раньше ответ отвечал только на вопрос «cf это или edt», а третьего варианта «это вообще не наш формат» в контракте не было:config_formatпоказывалunknown— ровно то же, что у усечённой или нестандартно разложенной, но НАШЕЙ выгрузки. Теперь класс поддержки — отдельное машиночитаемое поле. - Предупреждение и best-effort режим на чужом дереве с
.bsl. Было так: на исходниках чужого формата (например, где метаданные лежат в собственном JSON) сессия открывалась как обычная, все хелперы метаданных отрабатывали и возвращали тихие нули — пустые списки объектов, пустыеwarnings, ноль перехватов. Отличить «в конфигурации этого нет» от «формат не разбирается» было нельзя ни агенту, ни человеку, и ответ строился на пустоте как на факте. Стало: сессия по-прежнему работает и BSL-хелперы остаются на месте (текст модулей читается независимо от раскладки метаданных), но предупреждение идёт первым — и первым элементомwarnings, и первым блоком текста стратегии, выше баннера лимитов. В нём сказано прямо: метаданные и имена объектов на такой раскладке ненадёжны, работать нужно от путей и текста BSL, пустой результат метаданных считать признаком неподдерживаемого формата, а ответ объявлять best-effort. - Generic-режим на чужом дереве без единого
.bsl. Раньше такая сессия получала полную 1С-стратегию и полсотни BSL-хелперов, которым нечего анализировать. Теперь BSL-хелперы в песочницу не загружаются вовсе, а стратегия — короткая и перечисляет только то, что реально доступно:read_file,read_files,grep,grep_summary,grep_read,glob_files,tree,find_files(иllm_query, если провайдер настроен). Нумерация строк уread_file/read_files/grep_readсохраняется — представление результатов не меняется. Списокavailable_functionsв ответе перестал обещать несуществующее. - CLI-флаг
--allow-unsupported-formatуindex build. Подтверждает построение заведомо неполного индекса без интерактивного вопроса — для скриптов и CI. Существует только уbuild; на отсутствие.bslне влияет.
Исправлено
- Один дескриптор с незнакомой кодировкой убивал всю сессию. Было так:
Configuration.xmlилиConfiguration.mdoс объявлением видаencoding="x-invalid"(опечатка, экзотическая кодовая страница, повреждённая выгрузка) роняет XML-парсер исключениемLookupError— неParseError, который разбор дескрипторов перехватывал. Поэтомуrlm_startзавершался какSession init failed: LookupError: unknown encoding: …, причём достаточно было такого файла у соседнего каталога в радиусе поиска расширений: сессия умирала из-за конфигурации, к которой не имеет отношения. Стало: нечитаемое объявление кодировки трактуется так же, как любой неразбираемый XML, — «конфигурации здесь нет». Семантика поиска не изменилась: дерево, которое распознавалось раньше, распознаётся точно так же.
Изменено
- Новое построение индекса на формате, отличном от cf/edt, больше не запускается молча. Было так:
index buildна любом каталоге с.bsl-файлами строил индекс, где метаданные почти пусты (на проверенном чужом дереве — 18 пустых таблиц из 27 приhas_metadata=1), и этот индекс потом выглядел как обычный. Стало: решение принимает сервер, и оно разное для двух каналов. CLI спрашивает подтверждение[y/N](принимаютсяy,yes,д,да), а без терминала требует явный--allow-unsupported-format— молча собрать неполный индекс из скрипта нельзя. MCP отказывает до постановки фоновой задачи и в тексте отказа указывает точную CLI-команду: подтвердить заведомо неполную сборку может только человек в терминале. Если.bslне найдено ни одного (или дерево нечитаемо) — отказывают оба канала: строить не по чему. Существующие индексы,update,info,dropи внутренний путь построения не затронуты. - Поддерживаемый формат определяется по валидному дескриптору, а не по имени файла. Проверяется сигнатура: у CF — корневой элемент
MetaDataObjectв пространстве имёнMDClassesи первый дочернийConfiguration, у EDT — корневойConfigurationв пространствеmdclass. Поэтому чужойdocs/Configuration.xmlс произвольным XML, постороннийFoo/Configuration/Configuration.mdoили любойlayout.mdoгейт не обходят. Дескриптор ищется в трёх раскладках — на саму конфигурацию или расширение, на прямой контейнер и на контейнер с одним уровнем обёртки (cfe/Расш1/…), — так что одиночные расширения и контейнеры со всеми расширениями сразу распознаются как поддерживаемые. Глубже двух каталогов поиск не идёт: в этом случае нужно указать более точный корень. Файл читается префиксно и целиком не разбирается — на многомегабайтном боевомConfiguration.xmlпроверка занимает единицы миллисекунд, а битый хвост опознанию не мешает.
Полный список изменений: CHANGELOG.md