Skip to content

v1.32.0

Choose a tag to compare

@github-actions github-actions released this 04 Aug 15:33
· 4 commits to master since this release

Гейт неподдерживаемых форматов исходников. Схема индекса и 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_filesllm_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