ai-edt-tools
EDT-based 1C:Enterprise (1С:Предприятие 8.3+) development via the EDT MCP server - BSL code analysis and editing, metadata inspection and construction, module navigation, query validation, managed forms, error checking, debugging, infobase update. Use when the project is an EDT w
Install
npx skills add https://github.com/Desko77/claude-code-skills-1c/tree/main/skills/ai-edt-tools
claude plugin marketplace add https://llmmart.ai/marketplace.json && claude plugin install desko77-claude-code-skills-1c@llmmart
git clone https://github.com/Desko77/claude-code-skills-1c.git
The skills CLI installs just this skill, for any of its supported agents. Claude Code installs the whole desko77/claude-code-skills-1c collection as a plugin from our marketplace. Git is the plain clone.
Skill manifest
AI-EDT MCP Tools
MCP-сервер ai-edt дает прямой доступ к семантическому индексу EDT (BM model), платформенной
документации, проверкам, отладке и конструкторам метаданных. Работает через живой экземпляр EDT. Semantic-
операции (ссылки, определения, иерархия вызовов, структура модуля) идут по BM-модели и AST, а не по
текстовому совпадению; текстовый и regex-поиск в каталоге тоже есть (code_search operation=text_search).
Каталог инструментов вынесен в references/ - читай нужный файл по ситуации, а не весь набор.
Навык написан под AI-EDT - MCP-сервер работает плагином внутри запущенной 1C:EDT (update site: https://desko77.github.io/ai-edt/). Весь каталог в
references/описывает именно его: больше сотни операций, свернутых в фасады с маршрутизацией черезoperation=.Если подключен ДРУГОЙ MCP-плагин для EDT, этот каталог к нему неприменим: там свой набор инструментов, свои имена и фасадов может не быть вовсе - вызов вида
diagnostics operation=get_project_errorsвернет ошибку. Ключ сервера тоже свой. Порядок в этом случае: взять фактические имена изtools/listсессии и работать по документации своего плагина; общие принципы навыка (что проверять после правки, чего не подменять ручной правкой файлов) остаются в силе.
When to Use
- Анализ и правка BSL: модули, методы, ссылки, вызовы, рефакторинг.
- Метаданные: чтение, создание, изменение, удаление, переименование с каскадом.
- Формы: структура, скриншот из WYSIWYG-редактора, правка без ручного XML.
- Запросы 1С: валидация синтаксиса и семантики до запуска.
- Ошибки проекта, обновление ИБ, юнит-тесты YAxUnit, отладка и профилирование.
Для BSL и метаданных 1С этот сервер приоритетнее Grep/Read и точнее любого текстового поиска.
Когда НЕ использовать
- 1С 7.7 (
.1s,.ert,1Cv7.MD) - скил1c77-devи сервер1c77-metadata: инструменты EDT к 7.7 неприменимы. - Обычные (неуправляемые) формы и проект в формате Конфигуратора без EDT-проекта - каталог рассчитан на
управляемые формы и EDT-модель; для XML-выгрузки Конфигуратора есть отдельные скилы
1c-*(cf/epf/erf). - Данные живой базы вне отладочной сессии - скил
1c-mcp-toolkitпо HTTP. - EDT не запущена - инструменты недоступны; сообщить пользователю, а не переходить на ручную правку файлов проекта.
Prerequisites
get_edt_version - проба. Не ответил - корректный вывод "ai-edt недоступен", а НЕ "EDT не запущена": та же
картина бывает при недоступном MCP-сервере, зависшей очереди вызовов и несовместимом плагине. При ошибке
связи или timeout self_status НЕ вызывать - он на том же сервере; он полезен только когда сервер отвечает,
но операция не проходит. Разбор случаев и что делать в каждом - rules/mcp-tool-priority.md, раздел "Когда
инструменты недоступны". Коротко: анализировать без MCP можно, писать в проект вслепую - нельзя.
Ключевые фасады - точки входа
Фасад заменяет набор родственных standalone-инструментов: одна точка входа, действие выбирается параметром
operation (у отладчика - action). У большинства есть встроенная справка: operation=help, детали
конкретной операции - operation=help topic=<операция>.
| Фасад | Когда брать |
|---|---|
code_search |
исследовать код и модель: поиск, ссылки, определения, иерархия вызовов, символы. Только чтение |
edit_metadata |
создавать и менять метаданные и формы; массовые правки - batch=true |
diagnostics |
ошибки проекта, сводки, перевалидация, проверка перед экспортом |
launch_debugger |
отладка целиком: запуск и attach, точки останова, шаги, переменные, evaluate, профилирование |
project_admin |
проекты, конфигурации, подсистемы, resync на диск, перезапуск EDT |
infobase_admin |
ИБ и запуск: приложения, создание и удаление ИБ, учетные данные, обновление, sync_control |
config_io |
импорт и экспорт конфигурации и отдельных артефактов |
insights |
метрики, графы зависимостей, сравнение конфигураций, анализ влияния |
security_audit |
роли, RLS, чувствительные данные |
docs_lookup |
документация платформы и встроенная справка объектов |
workspace_marks |
теги, объекты по тегам, закладки, задачи |
yaxunit_tests |
юнит-тесты YAxUnit |
Данных информационной базы у плагина нет. browse_data, execute_query и фасад data_access из него
удалены - звать их бесполезно. Запрос или чтение данных живой базы - скил 1c-mcp-toolkit (обработка по HTTP). Отладка отдает только состояние исполнения текущего кадра
(get_variables, evaluate_expression), а не таблицы базы.
Одно исключение - журнал регистрации (с 0.2.27): infobase_admin operation=read_event_log читает журнал
ФАЙЛОВОЙ базы прямо из плагина - кто входил, что проводилось, какие обновления платформа отвергла.
Это не запрос к данным: журнал лежит файлами рядом с базой. Серверная база и однофайловый формат
1Cv8.lgd отвечают именованным отказом, а не пустым списком.
Состав операций каждого фасада - references/facades.md, здесь только маршрут: перечни операций намеренно
не дублируются, иначе два списка расходятся.
Не фасады, вызываются напрямую: vanessa (сценарии Vanessa Automation, снимок формы работающей 1С -
доводы в каталоге инструментов), self_status, конструкторы dcs_workshop (СКД),
mxl_workshop (табличные документы), xdto_workshop (XDTO-пакеты), extension_workshop (расширения и
заимствование), external_object_workshop (внешние обработки и отчеты), external_data_source_workshop.
Часть standalone-инструментов поглощена фасадами и остается backward-compat алиасами (примеры):
get_project_errors / clean_project / revalidate_objects -> diagnostics; debug_launch /
set_breakpoint / step / resume -> launch_debugger; get_tags / get_objects_by_tags /
get_bookmarks / get_tasks -> workspace_marks.
Под пресетом Canonical поглощенные имена скрыты из tools/list (оставаясь вызываемыми), поэтому
канонический вызов - через фасад: diagnostics operation=get_project_errors, launch_debugger action=launch.
Ниже и в references имена операций пишутся короткой формой для узнаваемости.
Поглощены НЕ все. Самостоятельными остаются, в частности, write_module_source, validate_query,
get_edt_version, read_module_source, read_method_source, get_module_structure, list_modules,
ai_context, diff_module, get_form_structure, get_form_screenshot, code_review. Список не
исчерпывающий - сверяться с tools/list и references/facades.md. Записи BSL в code_search нет вовсе:
он только читает.
Навигация по references
| Нужно | Файл |
|---|---|
| Что за фасад, какие операции, режим доступа (чтение / изменение / опасно) | references/facades.md |
| Чтение и навигация по BSL, структура модулей, поиск, запись кода | references/code-and-model.md |
| Создание и правка метаданных, формы, макеты, конструкторы | references/metadata-forms-constructors.md |
| ИБ, запуск, обновление, отладка, профилирование, тесты | references/infobase-debug-tests.md |
| Ошибки проекта, валидация, метрики, графы, безопасность | references/diagnostics-analysis-security.md |
| Проект и воркспейс, метки, задачи, композитные агентские инструменты, пресеты видимости | references/project-tags-agent-helpers.md |
| Готовый порядок вызовов под конкретную задачу | references/workflows.md |
| Теги ошибок, троттлинг, грабли, большие конфигурации, sync_control | references/gotchas-and-errors.md |
Каталог в references/ - снимок docs AI-EDT на ревизии 4fb31770 (28.07.2026), 118 имен сверены с
реестром групп ToolCategory.java. Снимок отстает от рабочего дерева форка: там уже появляются
инструменты, которых нет ни в реестре групп, ни в docs (например find_dead_code), а число 118 полноты не
доказывает.
Инструмент не нашелся в каталоге - не считать, что его нет, и не уходить в ручной обход. Порядок поиска:
tools/list текущей сессии (там актуальный набор с учетом пресета) -> operation=help у профильного фасада
(каталог операций) -> edit_metadata operation=help topic=availability (что доступно на этом runtime).
self_status для этого НЕ годится: он показывает состояние сервера, служб EDT и очереди, а не каталог
инструментов. Каталог устарел - пересобрать снимок из docs проекта, а не дописывать по памяти: именно так в
скил попадали инструменты из старых версий.
Критические запреты и проверки
Полный список обязательных проверок с лимитами - rules/mcp-tool-priority.md, раздел "Обязательные
проверки" (единственный источник). Здесь только то, без чего скил применять нельзя.
- BSL пишется через
write_module_source, а не Edit/Write по.bsl: иначе EDT не увидит правку до refresh, теряется авто-валидация и подсчет строк. Перед первой записью в модуль -rules/edt-bsl-write-safety.md: там безопасные режимы (replaceMethod,replaceLinesсexpectedText, вставкиinsertBefore/insertAfter) и почему голыйreplaceзатирает модуль. - Формы правятся form-операциями
edit_metadata, а не ручным XML в.form. validate_queryпосле каждого написанного или измененного запроса, не копя до конца; для СКД -dcsMode=true.validate_for_exportперед любой записью конфигурации в ИБ и перед сборкой артефактов, включая неявную запись уyaxunit_tests. Findings блокируют операцию.
Остальные обязательные проверки (ask_1c_ai с обязательной верификацией его замечаний, порядок
revalidate_objects -> get_project_errors, лимиты итераций, поведение при отказе сервера) не
перечисляются здесь во избежание расхождений - они в rules/mcp-tool-priority.md, раздел "Обязательные
проверки", пункты 1-6.
Экономия контекста
ai_contextсtarget=<FQN>иdepth=standard- один вызов вместо metadata + modules + structure.get_module_structure->read_method_sourceвместо чтения модуля целиком: работает и на модулях 25k+ строк, отдает точные границы методов дешево по токенам.- Крупные карты (
list_modules, каталог FQN, структура большого модуля) кэшировать один раз в gitignored-файл проекта, а не перезапрашивать. - Тяжелые выборки уводить в субагента, чтобы сырье не оседало в основном контексте. Детали и запреты -
references/gotchas-and-errors.md.
Обработка ошибок
Не ретраить вслепую: сигналы Pending/runKey, propertyMismatch, requiresCascadeForms,
*ApiNotFound, BSL model is not available требуют разных действий. Полная таблица -
references/gotchas-and-errors.md. Лимиты повторов и правило остановки (сменить подход, а не бросить
задачу) заданы в rules/mcp-tool-priority.md, раздел "Троттлинг и ошибки" - там единственный источник.
Files (claude-code-skills-1c)
-
evals
-
evals.json 2.7 KB
{ "skill_name": "ai-edt-tools", "evals": [ { "id": 1, "prompt": "Покажи структуру модуля CommonModules/ОбщегоНазначения/Module.bsl в проекте МойПроект", "expected_output": "Список всех процедур и функций модуля с сигнатурами, номерами строк, флагами Экспорт и директивами компиляции", "expectations": [ "Вызван инструмент get_module_structure с параметром projectName=\"МойПроект\"", "Передан параметр modulePath=\"CommonModules/ОбщегоНазначения/Module.bsl\"", "Ответ содержит список методов с номерами строк и флагами Экспорт", "Перед вызовом проверена доступность EDT MCP сервера (get_edt_version)" ] }, { "id": 2, "prompt": "Найди все ошибки уровня CRITICAL в проекте МойПроект для документа РеализацияТоваровУслуг", "expected_output": "Список критических ошибок EDT по объекту Document.РеализацияТоваровУслуг с кодами проверок и расположением", "expectations": [ "Вызван инструмент get_project_errors с параметром projectName=\"МойПроект\"", "Передан параметр severity=\"CRITICAL\"", "Передан параметр objects содержащий \"Document.РеализацияТоваровУслуг\"", "Ответ содержит коды проверок (checkId) и расположение ошибок" ] }, { "id": 3, "prompt": "Найди все места где вызывается метод ПолучитьДанныеКлиента в проекте МойПроект", "expected_output": "Список всех вызывающих мест метода ПолучитьДанныеКлиента с путями к файлам и номерами строк", "expectations": [ "Вызван инструмент get_method_call_hierarchy с параметром methodName=\"ПолучитьДанныеКлиента\"", "Передан параметр direction=\"callers\"", "Передан параметр projectName=\"МойПроект\"", "Ответ содержит пути к BSL-файлам и номера строк вызовов" ] } ] }
-
-
references
-
code-and-model.md 4.6 KB
# AI-EDT: Исследование модели / Исходный код BSL > Снимок каталога инструментов AI-EDT из его docs (`docs/tools/README.ru.md`) на ревизии > `4fb31770`, снят 28.07.2026. На момент снятия 118 имен сходились с реестром групп `ToolCategory.java`. > Снимок НЕ канон и НЕ полон: рабочее дерево проекта уходит вперед (пример - `find_dead_code`, есть в коде, > нет ни в реестре групп, ни в docs). Актуальный набор инструментов сессии - `tools/list`, каталог операций > фасада - `operation=help`. Обновлять пересборкой из docs проекта, а не правкой руками. ## Исследование модели Семантическая модель EDT, документация платформы, объекты метаданных и связи между ними. | Инструмент | Режим | Назначение | |---|---|---| | `get_content_assist` | Чтение | Возвращает подсказки EDT и сведения о типах в позиции BSL. | | `get_platform_documentation` | Чтение | Ищет методы, свойства и конструкторы типов платформы 1С. | | `get_metadata_objects` | Чтение | Получает список объектов метаданных с фильтрами. | | `get_metadata_details` | Чтение | Возвращает реквизиты, табличные части, формы и другие свойства объектов. | | `find_references` | Чтение | Ищет семантические ссылки на объект в метаданных, формах, ролях и BSL. | | `object_summary` | Чтение | Формирует компактную сводку по объекту конфигурации. | | `semantic_metadata_search` | Чтение | Ищет объекты по смысловому описанию, а не только по имени. | | `list_subsystems` | Чтение | Показывает подсистемы и их состав. | | `dcs_search` | Чтение | Ищет элементы и выражения в схемах компоновки данных. | | `docs_lookup` | Фасад · Чтение | Объединяет документацию платформы и встроенную справку объектов 1С. | ## Исходный код BSL Чтение, изменение и семантическая навигация по модулям. | Инструмент | Режим | Назначение | |---|---|---| | `read_module_source` | Чтение | Читает BSL-модуль целиком или по диапазону строк. | | `write_module_source` | Изменение | Записывает модуль. Режимы шире, чем replace / append / searchReplace: есть `replaceMethod` (заменяет метод вместе с его ведущей шапкой), `replaceLines` (с проверкой `expectedText`), `insertBefore` / `insertAfter`, `replaceMethods` (несколько методов атомарно). **Перед первой записью в модуль прочитать `rules/edt-bsl-write-safety.md`: голый `replace` перезаписывает модуль целиком и затирает чужой код.** | | `get_module_structure` | Чтение | Возвращает методы, области, параметры и контексты выполнения. | | `list_modules` | Чтение | Показывает BSL-модули проекта с фильтрами. | | `search_in_code` | Чтение | Выполняет текстовый или regex-поиск по BSL. | | `read_method_source` | Чтение | Читает конкретную процедуру или функцию. | | `get_method_call_hierarchy` | Чтение | Ищет вызывающие или вызываемые методы. | | `go_to_definition` | Чтение | Разрешает символ и возвращает место определения. | | `get_symbol_info` | Чтение | Возвращает hover/type information в позиции BSL. | | `validate_query` | Чтение | Проверяет синтаксис и семантику запроса 1С. | | `code_search` | Фасад · Чтение | Объединяет поиск, ссылки, определения, hierarchy и content assist. | -
diagnostics-analysis-security.md 5.1 KB
# AI-EDT: Диагностика и проблемы / Аналитика конфигурации / Безопасность и доступ > Снимок каталога инструментов AI-EDT из его docs (`docs/tools/README.ru.md`) на ревизии > `4fb31770`, снят 28.07.2026. На момент снятия 118 имен сходились с реестром групп `ToolCategory.java`. > Снимок НЕ канон и НЕ полон: рабочее дерево проекта уходит вперед (пример - `find_dead_code`, есть в коде, > нет ни в реестре групп, ни в docs). Актуальный набор инструментов сессии - `tools/list`, каталог операций > фасада - `operation=help`. Обновлять пересборкой из docs проекта, а не правкой руками. ## Диагностика и проблемы Ошибки проекта, сводки, статический анализ и состояние самого MCP-сервера. | Инструмент | Режим | Назначение | |---|---|---| | `get_problem_summary` | Чтение | Группирует проблемы по проектам и уровню важности. | | `get_project_errors` | Чтение | Возвращает детальные проблемы EDT с фильтрами. | | `code_review` | Чтение | Запускает анализ BSL через настроенный BSL Language Server. | | `get_mcp_history` | Чтение | Показывает историю последних MCP-вызовов. Запись несет `arbitratedBy` (`tool` / `signal`), `deliveryStatus` (`delivered` / `failed`), у сигнала - `signalType` и `signalNote`; в `stats` - `interrupted` и `undelivered` поверх `success` и `failure`. | | `self_status` | Чтение | Диагностирует состояние сервера, служб EDT и очереди вызовов. С 0.2.26 перечисляет ВСЕ запущенные экземпляры AI-EDT с их портами, рабочими областями и открытыми проектами - на машине с несколькими EDT только так и понять, какая из них ответила. | | `diagnostics` | Фасад · Чтение | Объединяет ошибки, сводки, валидацию и справку по проверкам. | ## Аналитика конфигурации Высокоуровневый анализ структуры и последствий изменений. | Инструмент | Режим | Назначение | |---|---|---| | `dependency_graph` | Чтение | Строит граф зависимостей объектов метаданных. | | `detect_query_anti_patterns` | Чтение | Ищет производительные и структурные проблемы запросов. | | `project_metrics` | Чтение | Рассчитывает метрики проекта и состава конфигурации. | | `compare_configurations` | Чтение | Сравнивает две конфигурации или проекта EDT. Переименования спариваются ДО классификации: объект с равным содержанием (имя и его зеркала - uuid, синоним, идентификаторы типов - вне доказательства) читается как `renamed`, а не удаленный и добавленный; изменившееся сверх того парой не становится. Вложения сравниваются по содержимому, смена типа реквизита видна на `level=attribute`. | | `impact_analysis` | Чтение | Оценивает последствия изменения или удаления объекта. | | `extension_diff` | Чтение | Сравнивает расширение с основной конфигурацией. | | `list_interceptors` | Чтение | Показывает перехватчики методов расширения. | | `insights` | Фасад · Чтение | Объединяет метрики, графы, сравнение и анализ влияния. | ## Безопасность и доступ Аудит прав и потенциально чувствительных данных. | Инструмент | Режим | Назначение | |---|---|---| | `audit_role_rights` | Чтение | Анализирует права ролей на объекты конфигурации. | | `find_rls_violations` | Чтение | Ищет подозрительные или неполные ограничения RLS. | | `sensitive_data_scan` | Чтение | Ищет потенциальные секреты и персональные данные в коде и метаданных. | | `security_audit` | Фасад · Чтение | Объединяет аудит ролей, RLS и sensitive-data scan. | -
facades.md 36.7 KB
# AI-EDT: Обозначения / Ключевые фасады > Снимок каталога инструментов AI-EDT из его docs (`docs/tools/README.ru.md`) на ревизии > `4fb31770`, снят 28.07.2026. На момент снятия 118 имен сходились с реестром групп `ToolCategory.java`. > Снимок НЕ канон и НЕ полон: рабочее дерево проекта уходит вперед (пример - `find_dead_code`, есть в коде, > нет ни в реестре групп, ни в docs). Актуальный набор инструментов сессии - `tools/list`, каталог операций > фасада - `operation=help`. Обновлять пересборкой из docs проекта, а не правкой руками. ## Обозначения | Метка | Значение | |---|---| | **Чтение** | Не должен изменять проект или информационную базу. | | **Изменение** | Записывает исходники, метаданные, настройки или файлы проекта. | | **Выполнение** | Запускает EDT/1С, тесты, запросы или код в живой сессии. | | **Опасно** | Может удалить, импортировать, перезаписать или синхронизировать данные. | | **Смешанный** | Поведение зависит от выбранной операции или параметров вызова. | | **Фасад** | Единая точка входа для нескольких родственных операций. | | **Workshop** | Высокоуровневый конструктор сложного артефакта. | ## Ключевые фасады Фасады уменьшают размер `tools/list`: вместо набора родственных standalone-инструментов агент видит одну точку входа и выбирает действие через параметр `operation`. У большинства фасадов встроена справка: ```json { "operation": "help" } ``` Для подробностей конкретной операции используется `topic`: ```json { "operation": "help", "topic": "text_search" } ``` ### `code_search` - поиск и навигация по коду Операции: `text_search`, `object_references`, `method_references`, `resolve_symbol`, `call_hierarchy`, `symbol_info`, `content_assist`, `outgoing_structures`, `help`. Используйте фасад для исследования BSL и модели перед изменениями. Все операции только читают проект. У `call_hierarchy` есть `depth`: он уходит дальше непосредственных соседей, до пяти уровней, циклы отбрасываются, а не обходятся по кругу. У `text_search` `projectName` НЕОБЯЗАТЕЛЕН: без него ищутся все открытые проекты с исходниками, а ответ называет их поименно. Это важно, когда рядом лежат конфигурация и ее расширения - пустой ответ по одному проекту читается как "такого текста нет вообще". Явно названный несуществующий проект остается ошибкой. ### `launch_debugger` - полный цикл отладки Объединяет запуск/Attach, line и exception breakpoints, `run_to_line`, ожидание suspend, чтение и изменение переменных, stepping, resume, terminate, evaluation и profiling. Большинство операций требует действующей конфигурации запуска EDT; операции с кадрами требуют приостановленного потока. `action=launch` открывает в запускаемом клиенте внешнюю обработку или отчет: `externalObjectName` называет объект, `externalObjectProject` - проект внешних объектов, когда это не тот проект, который запускается. Имя, которое не разрешается, останавливает запуск ДО обновления базы, и ответ несет `nothingWasLaunchedOrUpdated`. Произвольного пути к `.epf` у запуска нет - объект разрешается только из проекта внешних объектов, поэтому готовый бинарник сперва заводится в проект через `external_object_workshop operation=import_external_object`, и это ЕДИНСТВЕННЫЙ маршрут. Среда открывает такой объект, СОБИРАЯ его, поэтому у проекта внешних объектов должна быть включена генерация дампа. На свежесозданном проекте она выключена, и клиент тогда стартует с пустым экраном. Запуск отказывает и называет проект; `enableExternalObjectDump=true` включает генерацию для этого проекта и продолжает запуск. `debugServerPort` дает запуску свой порт отладочного сервера (1..65535). На машине один порт по умолчанию на все запущенные среды, и второй начавший отладку получает окно «порт уже используется» - это способ разойтись. Сохраненная конфигурация запуска не меняется. Успех ставится только по НАБЛЮДАЕМОЙ живой цели отладки. Отказ называет увиденное - запуск не создан, завершился сразу, все цели завершены, цель не появилась за десять секунд - и перечисляет модальные окна, открывшиеся во время запуска. `action=wait_for_break` ждет **не больше 50 секунд** и 50 по умолчанию, под всеми четырьмя именами довода (`timeoutSeconds`, `timeoutMs`, `waitSeconds`, `timeout`): один запрос дольше не живет, и просьба на 300 секунд раньше возвращалась ошибкой транспорта вместо ответа. Урезанное ожидание несет `timeoutCapped` и `waitedSeconds`; точки останова остаются расставленными, так что ждать дальше - это следующий вызов. `action=get_variables` помечает записи, для которых API переменных не отдал значения, полем `valueNotReturnedByVariables` и считает их: значения читаются по одному - `expandPath=<имя>` (он при промахе вычисляет имя) или `action=evaluate`. Переменная с пустой строкой не помечается: пустое значение - это ответ. Когда приложение не разрешается само, отказ перечисляет все увиденные запуски с конфигурацией, типом, идентификатором приложения и числом целей отладки. ### `diagnostics` - диагностика и валидация Операции: `get_project_errors`, `get_problem_summary`, `revalidate_objects`, `clean_project`, `validate_for_export`, `get_check_description`, `help`. `marker_corrections` стоит рядом с ними отдельным инструментом: он применяет к найденной проблеме то штатное исправление, которое предлагает сама проверка. Работает в два шага - сначала список доступных исправлений для находки, затем применение выбранного по его описанию из списка. Нужны `projectName` и `checkId`. Это не "починить все": исправление есть не у каждой проверки. ### `project_admin` - проекты и рабочее пространство `list_subsystems` стоит отдельного упоминания: он отдает подсистемы иерархией вместе с составом (FQN входящих объектов) и признаком, есть ли на диске `CommandInterface.cmi`. Плоский список имен от `get_metadata_objects` этого не показывает. Наличие или отсутствие `.cmi` инструмент подает как факт, а не как ошибку - трактовку смотреть в правиле `edt-zip-export-pitfalls.md`. Три операции требуют оговорки: - **`resync_to_disk`** сбрасывает модель объектов из памяти EDT на диск. Звать ПЕРЕД `update_database` и перед экспортом конфигурации: именно рассинхрон памяти и диска дает класс ошибок "валидно в EDT, падает в ИБ" и `zip:///` not-found. Ссылки в `Configuration.mdo` он при этом не чистит - это другой дефект. Подробности в правиле `edt-zip-export-pitfalls.md`. - **`delete_project`** разрушительна. По умолчанию (`deleteContent=false`) проект только отключается от рабочей области, файлы остаются на диске и импортируются обратно; `deleteContent=true` стирает и файлы. - **`restart_edt`** перезапускает или гасит саму EDT, внутри которой работает плагин. После нее сервер отвечает не сразу. - **`answer_dialog`** нажимает названную кнопку модального окна, на котором стоит EDT: такое окно держит workbench, и снаружи это неотличимо от зависания. Читать окно - `self_status` либо поля `blockedByDialog` и `dialogs` в ответе долгой операции со `status=Pending`; нажимать - назвав кнопку в `button`. Само по себе не нажимается ничего, а имя, не совпавшее ни с одной кнопкой или совпавшее с несколькими, отвергается. Операции: `list_projects`, `list_configurations`, `get_configuration_properties`, `create_project`, `delete_project`, `resync_to_disk`, `restart_edt`, `answer_dialog`, `list_subsystems`, `help`. Часть операций изменяет рабочее пространство или перезапускает EDT. **История вызовов.** `get_mcp_history` отдает список последних вызовов, урезанный до нескольких сотен знаков на запись: буфер живет в куче самой среды. Полный текст лежит рядом на диске - довод `entryId` из записи списка отдает ОДИН вызов целиком, с полными доводами и полным ответом, замаскированными так же, как в журнале. Запись, которой в кладовой больше нет, получает названный отказ, а не урезанную копию под видом полной; `entryId` вместе с `clear` отвергается. Что хранится на диске, задается на странице настроек в группе «Call history on disk»: хранить ли полный текст, сколько дней хранить (14 по умолчанию, ноль - до предела размера) и в какой папке. При выключенной записи вызовов на диск не пишется ничего. ### `infobase_admin` - жизненный цикл информационной базы Объединяет `get_applications`, `read_event_log`, `create_infobase`, `delete_infobase`, `set_infobase_credentials`, `create_launch_config`, `start_client`, `update_database`, `branch_infobase`, `sync_control` и встроенную справку. С `dryRun=true` ничего не запускается: ответ несет состояние обновления (`updateState`), признак `wouldUpdate`, готовность базы (`readiness`) и ее проблемы (`readinessProblems`). Прогон не записывается, база не занимается. Состав изменений по объектам так недостижим, и ответ говорит это в `composition`. `branch_infobase` связывает ветку git с приложением проекта, после чего `update_database` отказывается обновлять базу, привязанную к другой ветке. У проекта-РАСШИРЕНИЯ привязка лежит в самом расширении, а не в конфигурации, которую оно расширяет. `read_event_log` (с 0.2.27) читает журнал регистрации ФАЙЛОВОЙ базы - кто входил, что проводилось, что платформа отвергла, - с отбором по `from` / `to` / `event` / `user` / `severity`. Серверная база и однофайловый SQLite-формат `1Cv8.lgd` отвечают именованным отказом, а не пустым списком. **`start_client`** запускает клиент 1С:Предприятие из конфигурации запуска EDT, без отладчика. Плагин прямо просит звать его ВМЕСТО сборки командной строки `1cv8.exe` руками: версия runtime, база, вид клиента и пользователь берутся из настроек среды, а не собираются агентом по памяти. **`create_launch_config`** привязывает СУЩЕСТВУЮЩУЮ базу к проекту - создать ее заранее должен `create_infobase`. Привязка идет как несинхронизированная, поэтому сразу после нее `get_applications` честно сообщит, что базу нужно обновить. **`delete_infobase`** по умолчанию убирает базу только из списка EDT; `deleteContent=true` удаляет и каталог `.1CD` с диска - необратимо. **`set_infobase_credentials`** хранит пароль зашифрованным, в ответ отдает лишь признак `passwordStored`, в журнал пароль не попадает. `update_database` по проекту-РАСШИРЕНИЮ обновляет базу той конфигурации, которую расширение расширяет, и `applicationId` для этого не нужен: без него берется приложение по умолчанию - свое, затем родительское. Отказ называет тех держателей базы, кого сервер видит (клиенты, запущенные EDT, и соседние экземпляры AI-EDT), и честно говорит, кого он видеть не может. ### `config_io` - импорт и экспорт Объединяет `export_configuration_to_xml`, `import_configuration_from_xml`, `export_object` и `export_common_picture`. Сюда же относятся два входа для бинарников, и у обоих есть аналог среди скилов набора - выбор зависит от того, нужен ли на выходе EDT-проект: - **`import_configuration_from_binary`** принимает `.cf` или `.cfe` одним файлом и разворачивает его в НОВЫЙ проект EDT: бинарник грузится во временную базу, выгружается в Designer-XML и импортируется оттуда, временная база потом удаляется. Существующее имя проекта отвергается, чужую базу инструмент не трогает. Запускает толстый клиент, поэтому нужен доступный runtime платформы, а на большой конфигурации занимает минуты. Если проект EDT не нужен, а нужны просто исходники - это `v8unpack-cf`, он распаковывает бинарник без платформы. `1c-db-load-cf` сюда НЕ подходит: он грузит `.cf` в базу, а не разбирает его на файлы. - **`unpack_external_binary`** превращает внешнюю обработку или отчет (`.epf` / `.erf`) в Designer-XML, который затем скармливается `import_configuration_from_xml`. Нужен, когда файл пришел со стороны и проекта под него еще нет. База, названная в `projectName` / `applicationId`, только предоставляет процесс Конфигуратора - ее конфигурация не читается и не меняется. Целые конфигурации и расширения инструмент НЕ принимает: их конвертация означала бы загрузку в базу поверх того, что там лежит. Разобрать `.epf` без EDT и без платформы умеет скил `1c-epf-dump`. ### `insights` - аналитика конфигурации Операции: `project_metrics`, `dependency_graph`, `compare_configurations`, `compare_three_way`, `detect_query_anti_patterns`, `generate_health_snapshot`, `impact_analysis`, `object_summary`, `semantic_metadata_search`, `help`. `compare_three_way` сравнивает открытый проект с новой поставкой И с поставкой, от которой обе произошли, - это и есть обновление на поддержке. Двух сторон там мало: у доработанной конфигурации отличается почти все, а важно, КТО изменил. Отвечает числом узлов, сколькими различаются, сколько односторонних, ИМЕНАМИ измененных объектов на каждой стороне и списком проблем с пометкой блокирующих. Решения по объектам (`decisions`) записываются на сравнение и выгружаются в файл, который EDT читает обратно. **По умолчанию только читает.** `intent=MERGE` применяет решения к проекту - НЕОБРАТИМО; без решений отклоняется, а проверку выполняет само окружение и при блокирующей проблеме останавливается до записи (пройти дальше - отдельное значение `MERGE_IGNORING_PROBLEMS`, не флаг). Поле `merged` говорит, что произошло на самом деле, а не о чем попросили. `describe_db_tables` (доступен и отдельным именем) показывает, во что объект превращается в базе данных: основную таблицу, по одной на каждую табличную часть, виртуальные таблицы регистра (остатки, обороты, срезы) с их параметрами, таблицу изменений, перерасчеты регистра расчета. Имена таблиц и полей отдаются на двух языках, с типами, готовыми к подстановке после `ИЗ`. Звать ДО написания запроса: за один вызов видно все, что можно выбрать, вместо перебора имен по одному через `validate_query`. Все операции только читают проект. ### `security_audit` - аудит безопасности Операции: `audit_role_rights`, `find_rls_violations`, `sensitive_data_scan`, `help`. Читают проект все, КРОМЕ одной. `audit_role_rights mode=orphans` - единственная пишущая: перечисляет права роли на объекты, которых в конфигурации больше нет, и при `apply=true` их удаляет. Решение трехзначное - удаляется только то, про что удалось доказать, что объекта нет; неразрешенное перечисляется отдельным списком и не трогается. Под пресетом без права записи `apply=true` отклоняется. ### `workspace_marks` - метки рабочего пространства Объединяет `get_tags`, `get_objects_by_tags`, `get_bookmarks`, `get_tasks` и встроенную справку. ### `docs_lookup` - документация платформы и объектов Объединяет `get_platform_documentation`, `get_object_help`, `system_enum_values` и встроенную справку фасада. `system_enum_values` отвечает на вопрос, что можно написать после точки: `ВидДвиженияНакопления` -> `Приход`, `Расход`. Ошибка здесь не ловится редактором - неизвестный член системного перечисления это ошибка времени исполнения. Значения приходят с обоими именами, поле `valuesFrom` называет тип, из которого прочитано (он НЕ совпадает с тем, что спросили: значения лежат на парном типе-менеджере). `get_object_help` читает встроенную справку объекта конфигурации - те страницы, что открываются кнопкой "?" в интерфейсе. Отвечает markdown, язык выбирается параметром. Ценность для агента не в самой справке, а в том, что она объясняет БИЗНЕС-СМЫСЛ объекта; читать ее стоит до правки чужой типовой, чтобы не переделать то, что работает как задумано. ### `yaxunit_tests` - запуск и отладка YAxUnit Поддерживает обычный запуск и debug-режим. Требует установленного расширения YAxUnit и конфигурации запуска целевой ИБ. Прогон асинхронный: инструмент опрашивает запуск ограниченное время (по умолчанию 60 секунд) и отдает отчет в формате JUnit. Если за окно опроса запуск не закончился, ответ будет **Pending** - это не ошибка, надо позвать тот же инструмент с теми же аргументами еще раз. ### `edit_metadata` - универсальный конструктор метаданных Содержит около 160 операций, разбитых на домены: - объекты и их вложенные элементы; - специализированные типы метаданных; - командный интерфейс; - HTTP- и SOAP-сервисы; - управляемые формы; - макеты; - карта маршрута бизнес-процесса; - расширения; - СКД; - общие пакетные и служебные операции. Поддерживает `dryRun`, пакетное выполнение и `operation=help`. Полный список следует получать из встроенной справки, поскольку это самая быстро меняющаяся часть API. Три вещи, которые из общего списка не видны: - **`extend_object_type`** (с 0.2.26) добавляет тип объекту, ЗАИМСТВОВАННОМУ расширением, со состоянием `Extended`, не трогая унаследованные. Для такого объекта `set_object_type` не подходит в принципе: состав типов заимствованного объекта живет в блоке расширения, а не в обычном свойстве, и `set_object_type` там писал в никуда, отвечая "применено". - **`operation=help topic=parameters`** (с 0.2.28) отдает полные правила тех параметров, чье описание в схеме сокращено до одной строки. Параметров не убавилось - убавилось прозы в каталоге, который клиент возит с собой в каждой сессии. - **`copy_object`** копирует объект в другой проект как СОБСТВЕННЫЙ, а не заимствованный. Разница с `extension_workshop borrow_object` принципиальная: заимствование ПЕРЕХВАТЫВАЕТ типовой объект, копирование его ПОВТОРЯЕТ. Для объекта, который в основной конфигурации уже есть, нужно заимствование. Копированием занимается сама EDT, поэтому идентификаторы, неконфликтующее имя, членство в подсистемах и описания типов она берет на себя; выбранное ею имя возвращается в ответе - оно не обязано совпадать с исходным. Ссылки на объекты, которых в целевом проекте нет, НЕ разрешаются, поэтому копию после переноса надо валидировать. ### `dcs_workshop` - схема компоновки данных Создает и изменяет наборы данных, поля, параметры, связи, вычисляемые поля, ресурсы, настройки и варианты отчета. Проверяет запросы и выражения перед записью. `repair_schema` (через фасад - `edit_metadata operation=repair_report_schema`) восстанавливает схему из `.dcs` в модель, когда макет в EDT открывается с «Схема недоступна», а файл цел. Доводы: `projectName`, `objectName`, `templateName` (по умолчанию - основная схема владельца на языке конфигурации), `overwriteModel`, `dryRun`. Файл не изменяется. `outcome`: `restored` (в модели схемы не было), `matched` (модель уже совпадает с файлом, ничего не изменено), `refused_model_differs` (в модели другая схема - заменяется только с `overwriteModel=true`, и тогда ее сериализация пишется в `backupPath` рядом с `.dcs`), `replaced`, `file_changed` (файл изменился между чтением и подключением - повторить), `no_template`, `no_file`. `success=true` только при `confirmed=true` - модель после фиксации сериализуется в байты файла, иначе `confirmation` называет причину. `dryRun=true` решает и отвечает, ничего не меняя. ### `mxl_workshop` - табличный макет MXL Управляет областями, ячейками, объединением, оформлением, шириной, высотой и рисунками табличного документа. Поддерживает preview через `dryRun`. `format_cells` задает на диапазоне перенос текста (`textPlacement`), поворот (`textOrientation`), высоту строки, ширину и автоширину колонки и вес колонки при распределении ширины. Формат ищется среди существующих и добавляется, только если такого нет: в `.mxl` форматы общие и адресуются индексом. ### `extension_workshop` - расширения конфигурации Объединяет установку, удаление, просмотр и экспорт расширений, lifecycle-сценарии, сравнение с основной конфигурацией и список перехватчиков, а также заимствование: `borrow_object`, `borrow_child`, `borrow_form_item`, `borrow_module`, `borrow_objects`. Операции над УСТАНОВЛЕННЫМ в базу расширением (`install_extension`, `uninstall_extension`, `list_extension`) идут через платформу, поэтому у них три условия сразу: доступный runtime, сохраненные учетные данные (`set_infobase_credentials`) и НЕзаблокированная база - запущенный клиент 1С держит ее и не дает работать. Удаление расширения из базы разрушительно. `list_interceptors` и `extension_diff` работают с исходниками расширения и платформы не требуют. **С 0.2.26 заимствование дописывает связку с типовым объектом** - `extendedConfigurationObject` у корня и в блоке расширения, плюс отметку переопределения модуля. Без нее расширение не переопределяет ничего, а EDT молчит: до этой правки заимствование отвечало успехом, и проект выглядел здоровым. Отсюда три следствия для агента: - заимствование, которое не смогло дописать связку, **больше не отвечает успехом** - оно называет причину; руками `.mdo` не править; - **повторный вызов чинит** объект, заимствованный прежней сборкой (раньше второй вызов коротко отвечал "уже заимствовано"); - `borrow_module` **требует `moduleType`** там, где у объекта модулей несколько: у общего модуля отметка лежит в `module`, у справочника - в `objectModule` / `managerModule`, у регистра - в `recordSetModule`. Не назвали вид - отказ перечислит те, что есть. - `borrow_form_item` заимствует ФОРМУ, которая несет элемент: у элемента формы своего адреса в модели нет. Форму называют доводом `formName` рядом с владельцем либо полным адресом в `objectFqn` (`Catalog.X.Form.ФормаЭлемента`); без названной формы вызов отказывает и не заимствует ничего. То же у `edit_metadata operation=adopt_form_item`, где форму называют `childKind=Form` и `name`. ### `xdto_workshop` - XDTO-пакеты Создает пакеты, пространства имен, типы объектов, свойства и типы значений XDTO. ### `external_object_workshop` - внешние отчеты и обработки Создает исходную структуру внешнего отчета или обработки и возвращает созданные артефакты проекта. `import_external_object` добавляет `.epf` / `.erf` в существующий контейнер: `targetProjectName`, `inputPath`, `baseProjectName` (конфигурация; по умолчанию родитель контейнера), `applicationId` (когда у конфигурации несколько приложений - см. `get_applications`). Бинарник преобразуется через Конфигуратор базы этого приложения, как в `unpack_external_binary`: EDT отпускает базу и берет ее обратно; отказ отпустить - отказ импорта (`infobaseNotReleased`), отказ вернуть - поле `reconnectError` в ответе при любом исходе импорта. Ответ несет `hostProject` и `infobaseName`. ### `support_registry` - реестр поддержки поставщика Читает, от каких конфигураций поставщика происходит эта, с их релизами, сколько объектов в каждом режиме поддержки, какие правила среда применит на следующем обновлении, и режим одного объекта вместе с объектами, которые среда потребует изменить вместе с ним. Операции: `status`, `list_objects`, `object_mode`, `snapshot_modes`, `restore_modes`, `help`. Режим - это то, что ОБЪЯВЛЕНО для объекта (`ChangesNotAllowed`, `ChangesAllowed`, `CANCELLED`), а не утверждение, что объект изменен; на второй вопрос отвечает `compare_three_way`. Расхождение этих двух и есть опасное место: объект изменен, а режим остался `ChangesNotAllowed` - следующее обновление поставщика затрет доработку. `object_mode` принимает адрес потомка (`Catalog.Товары.Attribute.Автор`) и вложенной подсистемы (`Subsystem.А.Subsystem.Б`); зависимые объекты названы адресами, а не идентификаторами, и страница берет `offset` и `limit` (`dependentsTotal`, `dependentsShown`, `dependentsMore`). Когда объект числится в режиме `ChangesAllowed`, а редактировать его нельзя, ответ объясняет расхождение. `snapshot_modes` записывает в файл, какой объект какой режим держал - этим объединение и делается обратимым: обновление берет модель поддержки из поставки, и никакое правило объединения этому не мешает. `restore_modes` возвращает записанное обратно и единственный здесь меняет конфигурацию: без `apply=true` он только сообщает, что сделал бы. ### `external_data_source_workshop` - внешние источники данных Создает внешний источник данных, таблицы, поля и связанные параметры подключения. -
gotchas-and-errors.md 17.7 KB
# AI-EDT: ошибки, троттлинг и грабли Накопленный практикой разбор сигналов и обходов. Каталог инструментов - остальные файлы `references/`. Имена сверялись с реестром проекта на ревизии `4fb31770` (28.07.2026); полноты снимок не гарантирует - актуальный набор сессии смотреть в `tools/list`. Принцип: НЕ ретраить вслепую, читать тег и текст сообщения. Лимиты повторов и терминальное поведение заданы в `rules/mcp-tool-priority.md` (раздел "Троттлинг и ошибки") - здесь числа не повторяются, чтобы не разошлись. ## Реакция на сигналы в ответе | Сигнал в ответе | Что значит | Действие | |-----------------|-----------|----------| | `Pending` + `runKey` | долгая операция (find_references на крупном объекте, yaxunit, export_object) | повторить ТОТ ЖЕ вызов с тем же `runKey` и параметрами (фильтры не менять) - заберет финал | | `cancelled` в ответе | обход остановлен клиентом (`notifications/cancelled`) или кнопкой оператора: `find_dead_code`, `detect_query_anti_patterns`, `sensitive_data_scan`, `find_rls_violations`, `project_metrics`, `dependency_graph`, `semantic_metadata_search`, `find_references` останавливаются на границе и отдают найденное | не читать пустой список как «находок нет» - в ответе написано, что обход остановлен. У `project_metrics` рядом стоит `partial=true` и `unscannedModules`, числа являются нижней границей, а разделы `objects`, `errors`, `forms`, шаг которых не выполнялся, отсутствуют, а не равны нулю | | timeout на большом конфиге | нет фильтра либо Xtext-индекс не успел | сузить `metadataType` / `fileMask`; для find_references - `skipBsl=true` либо `timeoutSeconds=60` + retry | | `BSL model is not available ... indexed` | семантическая модель НЕ построена ЛИБО неверный `modulePath`/FQN | сперва проверить путь: неверный дает ту же ошибку, а модель работает и на модулях 25k+ строк. Если правда не построена - `Read` (`src/.../ObjectModule.bsl`), `Grep` точечно | | `propertyMismatch` (+ `mismatches`) | объект уже есть, свойства не совпали | НЕ ретраить create/add; пройти `set_object_property` по каждому из `mismatches` | | `requiresCascadeForms` (+ `affectedForms`) | удаление поля затронет формы | посмотреть preview, подтвердить деструктив, повторить с `cascadeForms=true` | | `mxlApiNotFound` / `rightsApiNotFound` / `adoptServiceNotFound` / `exportApiNotFound` | несовместимый EDT runtime | НЕ циклить; сообщить пользователю, предложить GUI-fallback | | `dcsFactoryMethodNotFound` (+ `triedMethods`) | СКД-операция не нашла нужный EDT factory-метод | структурная диагностика, не ошибка реализации; сообщить, предложить GUI-fallback для настройки СКД | | `kindMismatch` (export_object) | outputPath не совпал с типом объекта | поправить `.epf` vs `.erf` по nature | | `RuntimeCoreException: Файл не обнаружен 'zip:///...'` | экспорт в ИБ: нет исходника (.cmi/.form/.mdo) | правило `edt-zip-export-pitfalls.md`: создать минимальный валидный + `clean_project` | | tool disabled / not found | пресет скрыл инструмент либо его нет в сборке | НЕ обходить; сказать пользователю (сменить пресет, обновить плагин) | | `401 Unauthorized` от `/mcp` при живом `/health` | включен флажок Require bearer token (по умолчанию выключен), а клиент не передает bearer-токен или передает не тот | токен - на странице Window > Preferences > AI-EDT, поле Bearer token; прописать в конфигурацию клиента заголовком `Authorization: Bearer <токен>`, либо снять флажок на той же странице (сервер на всех интерфейсах требует токен всегда). Без токена сервер не отвечает никому, обходить нечем. `404` с текстом про `/mcp` на `/register` или `/.well-known/...` - клиент после `401` ищет OAuth-сервер; лечится тем же токеном | | любой "not available" в начале сессии | сервер `ai-edt` не отвечает - причина пока неизвестна | `get_edt_version` как проба. Ошибка связи или timeout - `self_status` НЕ вызывать (он на том же сервере), диагноз "ai-edt недоступен". Сервер ответил, но операция не прошла - уточнить через `self_status`. Разбор случаев и что при этом можно продолжать - `rules/mcp-tool-priority.md`, раздел "Когда инструменты недоступны" | ## Троттлинг (анти-циклы) Числовые лимиты заданы в `rules/mcp-tool-priority.md`, раздел "Троттлинг и ошибки" - единственный источник, здесь не дублируются, чтобы значения не разошлись. Смысл: цикл редактирования - одна итерация по одному файлу или задаче; после 2 неудачных попыток исправить одну и ту же ошибку одним подходом подход меняется, а не повторяется. ## Самокоррекция по тексту ошибки Инструменты подсказывают сами: неверное enum-значение возвращает "did you mean" со списком валидных, пропущенный обязательный параметр - "X is required. Example: ...". Читать текст ошибки, а не гадать. Токены операций нормализуются: camelCase и snake_case работают оба. ## Сверять существование фичи ДО ручного обхода Частая ошибка: агент городит ручной обход (правка `.mdo`/`.form` через Write, Python-скрипт, десятки парных вызовов) того, что в плагине УЖЕ ЕСТЬ. Перед любым ручным обходом: 1. `edit_metadata operation=help` - каталог операций. 2. `edit_metadata operation=help topic=availability` - что доступно на текущем runtime. 3. Профильный фасад: `project_admin`, `infobase_admin`, `config_io`, `diagnostics`, `insights`, `security_audit`, `docs_lookup`, `extension_workshop`, соответствующий `*_workshop`. Массовое создание - `edit_metadata batch=true` с массивом `operations` (38 ролей = ОДИН вызов, не 38 пар). Внешние обработки - `external_object_workshop` + `edit_metadata` по FQN. Правка форм - form-операции `edit_metadata`, а не Write в `.form`. ## Большие конфигурации (УХ, ERP, УТ) - частичная индексация - Поиск по всему проекту БЕЗ фильтра дает timeout. Всегда сужать: `metadataType` (`commonModules`, `documents`, ...) либо `fileMask`. - СНАЧАЛА пробовать `get_module_structure` / `read_method_source` - они работают на модулях 25k+ строк и дают точные границы методов дешево по токенам. НЕ уходить в Grep+Read превентивно из-за размера модуля. Падать в `Read`/`Grep` только при ФАКТИЧЕСКОЙ ошибке "BSL model is not available". - Номера строк из grep по BSL - строка совпадения, а НЕ граница метода. Границы брать из `read_method_source`. - Путь модуля при кириллице в имени: `Glob` капризничает на цифрах и кавычках в пути, надежнее `Bash find -ipath "*Фрагмент*ManagerModule.bsl"`. ## sync_control - синхронизация EDT и ИБ Решение принимает EDT: сравнивает UUID конфигурации проекта с `configurationUUID` в baseline `%APPDATA%\.1cedt\ib-sync\ss\<UUID-ИБ>\index.idx`. Не совпало или baseline нет - выгрузка ПОЛНАЯ. - `operation=status` - read-only, предсказывает FULL/INCREMENTAL для следующего обновления ИБ и причину. - `operation=diagnose` - read-only, по КАЖДОМУ baseline: `equalityState` + `predictedUpdateState`. Все NOT_EQUAL при "импорт: изменений нет" означает разошедшиеся подписи ресурсов (типично после переимпорта ДТ: контент тот же, подписи сдвинулись) - дельта считается как весь конфиг и срывается в FULL. Глубже `status`, который может дать оптимистичный INCREMENTAL по любому подходящему baseline. - `operation=suppress` (`enabled=true/false`, обратимо) - гейтит ТОЛЬКО фоновую авто-синхронизацию. Явные и принудительные действия (ручное "Обновить конфигурацию ИБ", "Обновить конфигурацию перед экспортом" при .cfe-экспорте, pre-launch диалог) НЕ гейтит. - `operation=mark_synchronized` - пересчитывает SHA-256 всех ресурсов как текущее состояние и пишет baseline: EDT считает ИБ равной проекту, дельта нулевая. - `operation=reseed_baseline` (`infobaseUuid` из status + `confirm=true`) - перештамповывает `configurationUUID` в baseline под UUID проекта, сохраняя подписи ресурсов. **Железное правило: `mark_synchronized` и `reseed_baseline` - ТОЛЬКО по явной команде пользователя, НИКОГДА автономно.** Обе делают EDT уверенной, что ИБ равна проекту; если реальная дельта есть, EDT молча пропустит настоящие изменения. Только пользователь знает, что не менялось. `status` / `diagnose` / `suppress` безопасны. ## Грабля .cfe-экспорта расширения в файловую ИБ (падение на 4 ГБ) Диалог EDT "Сохранить конфигурацию в файл" форсит "Обновить конфигурацию перед экспортом" (серый и отмеченный чекбокс, когда ИБ не равна проекту) -> full -> ConfigSave основной конфигурации > 4 ГБ. Лимит файлового режима действует на ОДИН внутренний файл внутри `.1CD`; дело в размере КОНФИГУРАЦИИ (основная плюс поставщика плюс макеты), а не данных. GUID в тексте ошибки - UUID конфигурации, не таблица данных. `suppress` не спасает. Обход: EDT -> выгрузить расширение в XML-файлы -> Конфигуратор: Расширения -> Загрузить конфигурацию из файлов + F7 (обновление только расширения) -> Сохранить расширение в файл (.cfe). Насовсем лечит клиент-серверная ИБ. ## Анти-паттерны edit_metadata - В extension-проекте при создании CommonModule НЕ передавать `privileged=true` и НЕ комбинировать `global=true` с `server=true` - early-fail. - В EventSubscription `handler` передавать полной формой `CommonModule.X.Method` либо короткой `X.Method` (префикс добавится сам), но НЕ просто `Method` - невозможно резолвить. - `delete_metadata_object` НЕ резолвит FQN XDTOPackage - чистка через файловую систему. ## Данных живой базы у плагина нет **У AI-EDT нет доступа к данным информационной базы - ни в отладке, ни вне ее.** Инструменты `browse_data`, `execute_query` и объединявший их фасад `data_access` из плагина удалены (в тестах это зафиксировано строкой `data_access removal dropped execute_query, browse_data and data_access`). Их имена еще встречаются в старых заметках - звать их бесполезно, ответом будет "unknown tool". Единственный маршрут к данным живой базы - **скил `1c-mcp-toolkit` (обработка по HTTP)**. Из приостановленной debug-сессии плагин отдает состояние исполнения: `get_variables`, `set_variable`, `evaluate_expression`, `get_stack` - это про переменные и выражения текущего кадра, а не про таблицы базы. **Исключение, появившееся в 0.2.27, - журнал регистрации.** `infobase_admin operation=read_event_log` читает журнал ФАЙЛОВОЙ базы прямо из плагина. Это не обход правила выше: журнал лежит файлами рядом с базой и читается без платформы, тогда как таблицы базы по-прежнему недоступны. Серверная база (журнал на сервере) и однофайловый SQLite-формат `1Cv8.lgd` отвечают ИМЕНОВАННЫМ отказом - пустой список над базой, полной событий, читался бы как "событий нет". ## Заимствованный объект: два места, где ответ раньше врал **`set_object_type` на САМОМ заимствованном объекте НЕ ПИШЕТ НИЧЕГО и отвечает `applied:true`.** Речь именно о составе типов объекта; смена типа его РЕКВИЗИТА через child-FQN (`ownerFqn=<владелец>.Attribute.<имя>`) работает и запрету не подлежит. Замерено: файл не менялся, проверка тремя каналами. Состав типов заимствованного объекта живет в блоке расширения (`extension/typeExtension`), обычного свойства типа у него нет вовсе. Правильный инструмент - **`edit_metadata operation=extend_object_type`** (с 0.2.26): ДОБАВЛЯЕТ тип со состоянием `Extended`, унаследованные (`Checked`) не трогает. Семантика замены сюда не подходит в принципе - заменять нечего. **Заимствование до 0.2.26 не дописывало связку** с типовым объектом, и расширение молча ничего не переопределяло при нулевых ошибках проекта. Теперь связка пишется, а заимствование, которое не смогло ее дописать, отвечает отказом с причиной. Объект, заимствованный старой сборкой, **чинится повторным вызовом `borrow_*`** - руками `.mdo` не править. ## Изоляция тяжелых выборок и баги плагина Оба сюжета описаны в `rules/mcp-tool-priority.md` (разделы "Экономия контекста" и "Баги плагина AI-EDT") - здесь не дублируются. Коротко: тяжелые выборки уводить в субагента (модель для BSL-разведки - Sonnet или выше), а найденный дефект плагина заносить строкой в свой кросс-сессионный инбокс обратной связи (отдельный файл вне репозитория, чтобы находки не терялись между сессиями). -
infobase-debug-tests.md 10 KB
# AI-EDT: Информационная база и запуск / Отладка и профилирование > Снимок каталога инструментов AI-EDT из его docs (`docs/tools/README.ru.md`) на ревизии > `4fb31770`, снят 28.07.2026. На момент снятия 118 имен сходились с реестром групп `ToolCategory.java`. > Снимок НЕ канон и НЕ полон: рабочее дерево проекта уходит вперед (пример - `find_dead_code`, есть в коде, > нет ни в реестре групп, ни в docs). Актуальный набор инструментов сессии - `tools/list`, каталог операций > фасада - `operation=help`. Обновлять пересборкой из docs проекта, а не правкой руками. ## Информационная база и запуск Работа с приложениями, информационными базами, расширениями, тестами и живыми данными. > [!CAUTION] > Инструменты этой группы могут запускать 1С, изменять ИБ или перезаписывать конфигурацию. Перед операциями **Опасно** сделайте резервную копию. | Инструмент | Режим | Назначение | |---|---|---| | `get_applications` | Чтение | Показывает приложения и информационные базы проекта. | | `list_configurations` | Чтение | Возвращает клиентские и Attach-конфигурации запуска EDT. | | `update_database` | Опасно | Обновляет конфигурацию информационной базы. С `statusOnly=true` читает отслеживаемые обновления вместо запуска: `updates[]` с `runKey`, состоянием и прогрессом, отбор по `projectName`; ничего не запускает и не забирает готовый результат, ключ чужого вида работы отвергается. | | `debug_launch` | Выполнение | Запускает клиент или подключается к серверу отладки 1С. `startupOption` - строка `/C` для клиента (autostart, /Execute, адрес отладчика), пишется в копию конфигурации запуска, сохраненная не меняется; Attach-конфигурация и уже запущенный без них сеанс ее отвергают. `waitForEndpoint` с `endpointTimeoutSeconds` (1..50, по умолчанию 20) превращают ответ в отчет готовности: GET на адрес, готово когда итоговый статус ниже 500, не больше пяти перенаправлений, одно чтение не дольше 5 секунд; неответивший адрес - отказ, клиент НЕ останавливается. Те же доводы у `start_client` фасада `infobase_admin`. | | `run_yaxunit_tests` | Выполнение | Запускает YAxUnit и читает JUnit-отчет. | | `yaxunit_tests` | Фасад · Выполнение | Единая точка запуска и отладки тестов YAxUnit. | | `vanessa` | Выполнение | Запускает сценарии Vanessa Automation и снимает форму в работающей 1С. Сценарий берется файлом (`featurePath`), текстом (`scenarioText`) или собирается из `formToOpen` - тогда шаг открытия задается `openStep`, у формы списка, формы объекта и формы расширения он свой. Шагу открытия нужны типы интерфейсного тестирования: они есть только в клиенте, запущенном менеджером тестирования (`testManager`), иначе шаг отвечает `Тип не определен (ТестируемаяГруппаФормы)`. Клиент для шага запуска называется `testClient`, порт - `testClientPort`, пользователь базы - `infobaseUser` (пароль отвергается). Результат читается из файлов `<uuid>-result.json`, которые Vanessa называет сама. Снимок делает внешняя программа, по умолчанию IrfanView. | | `create_launch_config` | Изменение | Создает конфигурацию запуска EDT. | | `create_infobase` | Опасно | Создает информационную базу и связывает ее с проектом. | | `delete_infobase` | Опасно | Удаляет информационную базу. | | `install_extension` | Опасно | Устанавливает расширение в информационную базу. | | `uninstall_extension` | Опасно | Удаляет расширение из информационной базы. | | `list_extension` | Чтение | Показывает установленные расширения. | | `import_configuration_from_xml` | Опасно | Импортирует XML конфигурации с возможной перезаписью проекта. | | `export_configuration_to_xml` | Изменение | Экспортирует конфигурацию в XML. | | `export_extension` | Изменение | Экспортирует расширение конфигурации. | | `set_infobase_credentials` | Опасно | Изменяет сохраненные учетные данные подключения к ИБ. | | `sync_control` | Опасно | Управляет направлением и состоянием синхронизации проект ↔ ИБ. | | `resync_to_disk` | Опасно | Принудительно синхронизирует модель EDT на диск. | | `restart_edt` | Опасно | Перезапускает выбранный экземпляр EDT. | | `delete_project` | Опасно | Удаляет проект из рабочего пространства. | | `self_upkeep` | Чтение | Сообщает, опубликована ли на update site сборка плагина новее установленной. | | `infobase_admin` | Фасад · Смешанный | Объединяет жизненный цикл ИБ и обновление конфигурации. | > Данных информационной базы плагин не отдает: `browse_data`, `execute_query` и фасад `data_access` из него > удалены. Запрос к живой базе - только через скил `1c-mcp-toolkit`. > > Исключение - журнал регистрации ФАЙЛОВОЙ базы: он лежит файлами рядом с ней и читается > `infobase_admin operation=read_event_log` без платформы и без запущенной базы. Таблицы базы > по-прежнему недоступны, серверная база и формат `1Cv8.lgd` отвечают именованным отказом. ## Отладка и профилирование Полный цикл управления приостановленной BSL-сессией. | Инструмент | Режим | Назначение | |---|---|---| | `set_breakpoint` | Выполнение | Устанавливает строковую точку останова BSL. | | `remove_breakpoint` | Выполнение | Удаляет точку останова. | | `list_breakpoints` | Чтение | Показывает активные точки останова. | | `wait_for_break` | Выполнение | Ожидает приостановку и возвращает поток, стек и кадры. | | `get_variables` | Чтение | Читает переменные выбранного кадра стека. | | `step` | Выполнение | Выполняет step over, step into или step out. | | `resume` | Выполнение | Продолжает выполнение приостановленного потока. | | `evaluate_expression` | Выполнение | Вычисляет BSL-выражение в контексте кадра. | | `debug_yaxunit_tests` | Выполнение | Запускает тесты YAxUnit в режиме отладки. | | `debug_status` | Чтение | Возвращает активные debug targets, потоки и состояние suspend. | | `start_profiling` | Выполнение | Включает или выключает замер производительности. | | `get_profiling_results` | Чтение | Возвращает измерения по модулям и строкам. | | `launch_debugger` | Фасад · Выполнение | Объединяет запуск, breakpoints, stepping, variables и profiling. | | `run_to_line` | Выполнение | Продолжает выполнение до выбранной строки. | | `set_exception_breakpoint` | Выполнение | Настраивает остановку по исключениям. | | `set_variable` | Выполнение | Изменяет значение переменной приостановленного кадра. | | `terminate_launch` | Выполнение | Завершает выбранный debug launch. | **Открытый редактор виднее файла.** `read_module_source` отдает несохраненные правки редактора и помечает это в ответе; `write_module_source` при таком редакторе отказывает. То есть прочитанное и записанное относятся к одному состоянию, а не к разным. -
metadata-forms-constructors.md 5.3 KB
# AI-EDT: Редактирование метаданных / Конструкторы и мастерские / Формы и экспорт > Снимок каталога инструментов AI-EDT из его docs (`docs/tools/README.ru.md`) на ревизии > `4fb31770`, снят 28.07.2026. На момент снятия 118 имен сходились с реестром групп `ToolCategory.java`. > Снимок НЕ канон и НЕ полон: рабочее дерево проекта уходит вперед (пример - `find_dead_code`, есть в коде, > нет ни в реестре групп, ни в docs). Актуальный набор инструментов сессии - `tools/list`, каталог операций > фасада - `operation=help`. Обновлять пересборкой из docs проекта, а не правкой руками. ## Редактирование метаданных Точечный рефакторинг объектов и их реквизитов. | Инструмент | Режим | Назначение | |---|---|---| | `rename_metadata_object` | Изменение | Переименовывает объект или вложенный элемент с каскадным refactoring. | | `delete_metadata_object` | Опасно | Удаляет объект или вложенный элемент после preview/confirm. | | `add_metadata_attribute` | Изменение | Добавляет реквизит поддерживаемому объекту метаданных. | Эти три инструмента сохранены для совместимости и также доступны как операции `edit_metadata`. ## Конструкторы и мастерские Высокоуровневое создание метаданных и сложных файлов EDT. | Инструмент | Режим | Назначение | |---|---|---| | `edit_form` | Workshop · Изменение | Изменяет элементы, реквизиты, команды и события управляемой формы. | | `edit_metadata` | Фасад · Изменение | Универсальный конструктор метаданных с пакетным и dry-run режимами. | | `dcs_workshop` | Workshop · Изменение | Создает и изменяет схемы компоновки данных. Набор Object требует `dataObjectName` на `add_dataset` и на `add_union_item` (на другом типе набора довод отвергается). `add_total` пишет `dataPath` из выражения, явный довод перекрывает. `add_appearance` строит фильтр из `field` и `conditionValue` - частичное условие отвергается с названным доводом; `appearance` строкой `Имя=Значение;...`, JSON-объект или массив отвергаются. Те же доводы у алиаса `edit_metadata operation=add_conditional_appearance`. | | `mxl_workshop` | Workshop · Изменение | Создает и редактирует табличные макеты MXL. | | `extension_workshop` | Workshop · Смешанный | Управляет расширениями и перехватчиками. | | `xdto_workshop` | Workshop · Изменение | Создает и изменяет XDTO-пакеты. | | `external_object_workshop` | Workshop · Изменение | Создает внешние отчеты и обработки. | | `external_data_source_workshop` | Workshop · Изменение | Создает внешние источники данных и их таблицы. | ## Формы и экспорт Представление форм, встроенная справка и перенос артефактов. | Инструмент | Режим | Назначение | |---|---|---| | `get_form_structure` | Чтение | Возвращает реквизиты, элементы, команды и события формы. | | `get_form_screenshot` | Смешанный | Делает PNG-снимок формы; при `savePath` записывает файл на диск. | | `get_object_help` | Чтение | Читает встроенную HTML-справку объекта метаданных. | | `export_object` | Изменение | Экспортирует выбранный объект конфигурации. | | `diff_module` | Чтение | Сравнивает версии BSL-модуля. | | `ai_context` | Чтение | Собирает метаданные и структуру модулей объекта одним вызовом. | | `get_command_interface` | Чтение | Возвращает командный интерфейс конфигурации или подсистемы. | | `validate_for_export` | Чтение | Проверяет готовность объектов к экспорту. | | `export_common_picture` | Изменение | Экспортирует общую картинку конфигурации. | | `config_io` | Фасад · Смешанный | Объединяет импорт и экспорт конфигурации и отдельных артефактов. | -
project-tags-agent-helpers.md 7.3 KB
# AI-EDT: Проект и конфигурация / Метки и задачи / Составные операции для агента / Без назначенной группы / Пресеты и видимость > Снимок каталога инструментов AI-EDT из его docs (`docs/tools/README.ru.md`) на ревизии > `4fb31770`, снят 28.07.2026. На момент снятия 118 имен сходились с реестром групп `ToolCategory.java`. > Снимок НЕ канон и НЕ полон: рабочее дерево проекта уходит вперед (пример - `find_dead_code`, есть в коде, > нет ни в реестре групп, ни в docs). Актуальный набор инструментов сессии - `tools/list`, каталог операций > фасада - `operation=help`. Обновлять пересборкой из docs проекта, а не правкой руками. ## Проект и конфигурация Сведения о рабочем пространстве, конфигурации и состоянии валидации. | Инструмент | Режим | Назначение | |---|---|---| | `get_edt_version` | Чтение | Возвращает версию запущенной EDT. | | `list_projects` | Чтение | Показывает проекты текущего рабочего пространства. | | `get_configuration_properties` | Чтение | Возвращает основные свойства конфигурации 1С. | | `clean_project` | Выполнение | Очищает маркеры и запускает полную перевалидацию проекта. | | `revalidate_objects` | Выполнение | Повторно проверяет выбранные объекты по FQN. | | `get_check_description` | Чтение | Читает встроенное описание проверки EDT по ее идентификатору. | | `project_admin` | Фасад · Смешанный | Управляет проектами, конфигурациями запуска и синхронизацией с диском. | ## Метки и задачи Навигационные метки AI-EDT и стандартные маркеры рабочего пространства. | Инструмент | Режим | Назначение | |---|---|---| | `get_tags` | Чтение | Возвращает метки проекта и количество назначенных объектов. | | `get_objects_by_tags` | Чтение | Ищет объекты метаданных по выбранным меткам. | | `get_bookmarks` | Чтение | Читает закладки рабочего пространства EDT. | | `get_tasks` | Чтение | Возвращает TODO/FIXME и другие task-маркеры. | | `workspace_marks` | Фасад · Чтение | Объединяет теги, объекты по тегам, закладки и задачи. | ## Составные операции для агента Один вызов вместо нескольких последовательных обращений. | Инструмент | Режим | Назначение | |---|---|---| | `generate_health_snapshot` | Чтение | Формирует снимок здоровья проекта, валидации и зависимостей. | | `code_template` | Чтение | Возвращает готовый BSL-фрагмент по встроенному шаблону. | | `generate_event_handlers` | Изменение | Создает заготовки обработчиков событий объекта или формы. | | `extension_lifecycle` | Смешанный | Выполняет составной сценарий работы с расширением. | ## Без назначенной группы Эти инструменты зарегистрированы в `McpHttpEndpoint.declareAllTools()`, но в текущем исходном `ToolCategory` для них нет группы. Они остаются вызываемыми и не получают отдельный checkbox в дереве Tools. Canonical скрывает их явно, однако групповые ограничения других пресетов, включая Read-only, не могут их отключить. > **ВНИМАНИЕ, следствие для агента.** Пресет Read-only ниже описан как "отключает запись" - но на > инструменты БЕЗ группы он не действует, а среди них есть изменяющие (например `create_project`). Значит > Read-only НЕ является гарантией безопасности: под ним возможны изменения рабочего пространства. Перед > деструктивной операцией полагаться не на пресет, а на явное подтверждение пользователя. Дефект занесен в > инбокс плагина. | Инструмент | Режим | Логичное размещение | Назначение | |---|---|---|---| | `create_project` | Изменение | Проект и конфигурация | Создает новый проект EDT. | | `get_outgoing_structures` | Чтение | Исследование модели | Возвращает исходящие структурные ссылки объекта метаданных: типы, владельца, родителя и другие зависимости. | > [!WARNING] > Это расхождение конфигурации, а не особенность каталога. Его стоит устранить в `ToolCategory` и зафиксировать тестом покрытия. ## Пресеты и видимость | Пресет | Что видит и может вызывать агент | |---|---| | **Canonical** | Фасады перечислены в `tools/list`; покрываемые ими standalone-инструменты скрыты, но остаются вызываемыми. | | **All Tools** | Показывает весь зарегистрированный набор. | | **Read-only** | Отключает запись, отладку, запуск и обновление ИБ. | | **Editing** | Разрешает чтение и изменение, но отключает группу отладки. | | **Debug & Test** | Разрешает чтение, запуск, отладку и тесты; отключает изменения и опасные операции. | | **Code Review** | Оставляет чтение и анализ BSL без записи и запуска. | | **Custom** | Использует вручную выбранные состояния инструментов. | Состояния отдельного инструмента: - **listed** - отображается в `tools/list` и вызывается; - **callable-hidden** - скрыт из списка, но прямой вызов разрешен; - **disabled** - вызов отклоняется сервером. --- [↑ В начало](#каталог-инструментов-ai-edt) -
workflows.md 25.8 KB
# AI-EDT: типовые сценарии работы > Накопленный практикой порядок вызовов. Каталог инструментов - остальные файлы `references/`. > Имена сверялись с реестром проекта на ревизии `4fb31770` (28.07.2026); полноты снимок не гарантирует. > > **Синтаксис.** Сценарии ниже записаны короткими standalone-именами (`find_references`, `search_in_code`, > `get_project_errors`, `debug_launch`, `go_to_definition`, `get_method_call_hierarchy`). Под пресетом > Canonical эти имена скрыты из `tools/list`, хотя и остаются вызываемыми, поэтому канонический вызов - через > фасад: > > | Короткое имя в сценарии | Канонический вызов | > |---|---| > | `search_in_code` | `code_search operation=text_search` | > | `find_references` | `code_search operation=object_references` | > | `go_to_definition` | `code_search operation=resolve_symbol` | > | `get_method_call_hierarchy` | `code_search operation=call_hierarchy` | > | `get_project_errors`, `revalidate_objects`, `clean_project`, `validate_for_export` | `diagnostics operation=<то же имя>` | > | `debug_launch` | `launch_debugger action=launch` | > | `set_breakpoint` | `launch_debugger action=add_breakpoint` | > | `remove_breakpoint`, `list_breakpoints`, `set_exception_breakpoint`, `run_to_line`, `wait_for_break`, `get_variables`, `set_variable`, `resume`, `debug_status`, `start_profiling`, `get_profiling_results` | `launch_debugger action=<то же имя>` | > | `evaluate_expression` | `launch_debugger action=evaluate` | > | `step mode=over/into/out` | `launch_debugger action=step_over` / `step_into` / `step_out` | > | `terminate_launch` | `launch_debugger action=terminate` | > | `get_applications`, `update_database` | `infobase_admin operation=<то же имя>` | > | `sync_control` | проще напрямую: `sync_control operation=status`. Через фасад действие идет отдельным параметром: `infobase_admin operation=sync_control syncOperation=status` | > | `get_tags`, `get_objects_by_tags`, `get_bookmarks`, `get_tasks` | `workspace_marks operation=<то же имя>` | > > Старые имена (`debug_launch`, `set_breakpoint`, `terminate_launch`) фасад отладчика принимает и как алиасы, > но канонические - из таблицы. Полный список действий - `launch_debugger action=help`. > > Инструменты без фасада (`write_module_source`, `validate_query`, `read_method_source`, > `get_module_structure`, `ai_context` и другие) вызываются по имени. ## Typical Workflows ### Анализ незнакомого модуля 1. `get_module_structure` - получить список методов 2. `read_method_source` - прочитать нужные методы 3. `get_method_call_hierarchy` - понять, откуда вызываются ### Поиск использований объекта метаданных 1. `find_references` - все ссылки на объект (код, формы, роли, подсистемы) 2. `search_in_code` - дополнительный текстовый поиск если нужно ### Проверка качества после изменений 1. `revalidate_objects` - перевалидировать измененные объекты 2. `get_project_errors` с фильтром по объектам - получить ошибки 3. `get_check_description` - понять суть ошибки и как исправить 4. `ask_1c_ai` (1c-naparnik) - обязательная проверка качества после любого изменения BSL, включая код, записанный через `write_module_source`, и стабы, созданные операциями `edit_metadata` ### Валидация запросов 1. `validate_query` - проверить текст запроса на синтаксис и семантику 2. `validate_query` с `dcsMode=true` - проверить запрос СКД ### Обновление и тестирование 1. `get_applications` - получить ID приложения 2. `validate_for_export` - ОБЯЗАТЕЛЬНО до записи в ИБ; findings блокируют обновление, сперва исправить 3. `update_database` - обновить базу 4. `debug_launch` - запустить в отладке Тот же пункт 2 нужен и когда обновление неявное: у `yaxunit_tests` по умолчанию `updateBeforeLaunch=true`, то есть запуск тестов сам вызывает `update_database`. ### Навигация к определению 1. `go_to_definition` с `symbol` - найти определение метода или объекта 2. `get_symbol_info` - получить тип символа в конкретной позиции 3. `read_method_source` - прочитать код, если нужно больше контекста ### Перед разрушительной операцией `insights operation=impact_analysis` считает радиус поражения объекта: что на него ссылается, какой уровень серьезности (LOW / MEDIUM / HIGH) и что рекомендуется. Плагин прямо предписывает звать его ПЕРЕД `delete_metadata_object`, `rename_metadata_object`, `remove_object_attribute` и прочими операциями, которые что-то убирают. Одного `find_references` для этого мало: он показывает ссылки, но не оценивает последствия. ### Рефакторинг метаданных 1. `find_references` - проверить все ссылки перед изменением 2. `rename_metadata_object` с `preview=true` - просмотр каскадных изменений 3. `rename_metadata_object` с `confirm=true` - выполнить переименование 4. `revalidate_objects` - проверить результат ### Модификация метаданных через EDT 1. `add_metadata_attribute` - добавить реквизит (вместо ручного редактирования XML) 2. `delete_metadata_object` - удалить объект/реквизит с очисткой ссылок 3. `write_module_source` - записать BSL-код с автопроверкой синтаксиса ### Изучение API платформы 1. `get_platform_documentation` с `typeName` - документация по типу 2. `get_content_assist` - автодополнение в контексте кода ### Сбор контекста перед доработкой 1. `ai_context` с `target=<FQN объекта>` и `depth=standard` - одним вызовом получить метаданные + список модулей + структуру методов 2. При необходимости углубиться в конкретный метод - `depth=full` + `focusMethod=<имя>` ### Code review изменений модуля 1. `diff_module` с `mode=summary` - обзор какие методы добавлены/изменены/удалены 2. Если нужен детальный разбор - `mode=methods` (отдельный diff на каждый измененный метод) 3. Для полного контекста изменений - `mode=unified` (git diff) ### Отладка BSL-кода 1. `get_applications` - получить `applicationId` 2. `debug_launch` - запустить приложение в режиме отладки 3. `set_breakpoint` - установить breakpoint в нужном методе 4. Запустить сценарий через UI приложения или `yaxunit_tests mode=debug` 5. `wait_for_break` - дождаться срабатывания breakpoint 6. `get_variables` с `frameRef` - посмотреть значения переменных 7. `evaluate_expression` - вычислить BSL-выражение в контексте остановки 8. `step` (over/into/out) или `resume` - продолжить выполнение 9. `remove_breakpoint` - снять breakpoint после завершения ### Профилирование BSL-кода 1. `debug_launch` или `yaxunit_tests mode=debug` - активная debug-сессия 2. `start_profiling` с `applicationId` - включить замер 3. Выполнить тестовый сценарий (через UI или YaxUnit) 4. `get_profiling_results` с `moduleFilter` - получить данные по вызовам/времени 5. Использовать `minFrequency` для фильтрации редко вызываемых строк ### Модификация формы без ручного XML 1. `edit_metadata operation=help topic=workflow` или `edit_form operation=help` - справка по операциям 2. `get_form_screenshot` - визуально оценить текущее состояние формы 3. `edit_metadata operation=add_field|add_group|add_button|add_table|add_decoration` (через `edit_form` тоже работает) - добавить элементы. Имена проверяются на коллизию 4. `edit_metadata operation=add_button standardCommand=Записать` - 22 stock команд платформы с auto-icon 5. `edit_metadata operation=add_table autoGenerateColumns=true` - один FormField на каждую колонку ТЧ с префиксом родителя 6. `edit_metadata operation=add_decoration kind=Picture picture="StdPicture.Find" projectName=...` - валидация картинки через `PictureValidator` 7. `edit_metadata operation=add_form_event_handler event=ПриСозданииНаСервере` - auto-stub в модуль формы (22 события из FormEventRegistry) 8. `edit_metadata operation=remove_form_attribute name=... deleteDataItems=true` - удаляет реквизит со всеми bound items 9. `edit_metadata operation=remove_item path=...` - удалить любой элемент по FQN 10. `get_form_screenshot` с `refresh=true` - проверить результат ### Запуск YAxUnit-тестов 1. `yaxunit_tests help=writing` - первое знакомство с YAxUnit (см. также `help=assertions|setup|events|advanced`) 2. `validate_for_export` - обязательно, когда `updateBeforeLaunch` не выключен явно (по умолчанию `true`, см. пункт 8): тогда запуск тестов сам выполняет `update_database`, то есть пишет конфигурацию в ИБ. При явном `updateBeforeLaunch=false` записи нет и проверка не требуется 3. `yaxunit_tests mode=run` с `applicationId` или `configName` - синхронный прогон с timeout polling 4. При истечении timeout вернется JSON `Pending` + `runKey` - повторить вызов с **теми же** параметрами (НЕ менять filters/configName), забирается финальный отчет 5. Filters: `tests=Тест_X,Тест_Y`, `suites=ТестыКадры`, `extensions=YAxUnit`, `modules=*Тесты*`, `tags=smoke,fast`, `contexts=Server,Client` 6. При `0 tests run` - проверить активность YAxUnit-расширения в ИБ (Конфигурация → Расширения → Active = Yes), затем `help=setup` 7. Отладка теста: `set_breakpoint` → `yaxunit_tests mode=debug tests=Тест_X` → `wait_for_break` → `get_variables`/`step` 8. `updateBeforeLaunch=true` (default) - автоматический `update_database` перед запуском, чтобы не висеть на модальном "Обновить?" ### Создание метаданных через edit_metadata > Набор операций `edit_metadata` меняется чаще остального каталога. Авторитетный перечень - `operation=help` > (и `topic=availability` для текущего runtime); ниже - проверенные практикой приемы и порядок, а не полный > список операций. 1. `edit_metadata operation=help topic=workflow` - типичный сценарий "от нуля до готовой подсистемы" 2. `edit_metadata operation=help topic=availability` - probe какие группы реально доступны на текущем EDT runtime 3. `edit_metadata operation=create_object objectType=Catalog name=Products` - для `CommonForm` автоматически создается вторая форма-обертка. 4. `edit_metadata operation=add_object_attribute name=Article type=String` - идемпотентно. При несовпадении свойств возвращается тег `propertyMismatch` с массивом `mismatches` - НЕ ретраить, использовать `set_object_property` 5. `edit_metadata operation=create_form formType=Generic layout=empty` - 11 базовых свойств применяются автоматически, без них форма не открывается в редакторе 6. `edit_metadata operation=remove_object_attribute name=Article` - если поле используется в формах, нужно `cascadeForms=true` (без него получите `requiresCascadeForms` + preview `affectedForms`) 7. EventSubscription: `add_event_subscription_handler handler="CommonModule.X.Method"` или `"X.Method"` - префикс добавляется автоматически 8. Extension-проект: НЕ передавать `privileged=true` для CommonModule, НЕ комбинировать `global=true+server=true` - early-fail 9. HTTP services: `add_url_template` (URL-шаблон) → `add_url_template_method` (метод GET/POST/PUT/DELETE; default handler = `<template><method>`; возвращает hint с сигнатурой для `write_module_source`) 10. Object commands: `create_object_command` → автоматически создает `CommandModule.bsl` со стабом `ОбработкаКоманды`. `remove_command` для удаления. 11. **МАССОВОЕ создание (batch=true) - против N round-trip'ов.** За ОДИН вызов много операций: `edit_metadata batch=true operations=[{"operation":"create_object",...},{"operation":"add_object_attribute",...},...]`. Массив идет по порядку, КАЖДАЯ op в своей BM-транзакции, `projectName`/`ownerFqn`/`dryRun` наследуются от внешнего вызова (per-item переопределяет). Поздние op видят ранние (`create_object` -> `add_object_attribute` к новому объекту). Ответ: `batchResults[]` (index/operation/ok/response) + счетчики ok/fail. **Кейс "38 ролей": НЕ 38+ пар вызовов, а ОДИН** `batch=true` с `[{create_object Role1},{set_role_right ...},{create_object Role2},...]`. Работает для ЛЮБЫХ операций, не только adopt_*. Оговорка: не атомарно на все (каждая op - своя транзакция); нужна атомарность "все или ничего" - это отдельный запрос. 12. **Внешние обработки/отчеты - все через тулзы, руками в `.mdo` НЕ лезть.** Создание: `external_object_workshop operation=create kind=ExternalDataProcessor|ExternalReport name=X [parentProjectName=Y]` (создает DT-проект `.epf`/`.erf`, nature `V8ExternalObjectsNature`, `.mdo` c UUID; parentProjectName опционален). Наполнение - штатным `edit_metadata` по FQN корня: `add_object_attribute` / `add_tabular_section` / `add_template` на `ownerFqn=ExternalDataProcessor.X` РАБОТАЮТ. Формы - `create_form`; сборка - `validate_for_export` (обязательная проверка перед сборкой артефакта), затем `export_object` -> `.epf`. --- ``` # Object группа edit_metadata operation=createObject projectName=X objectType=Catalog name=Products dryRun=true edit_metadata operation=addObjectAttribute ownerFqn=Catalog.Products name=Article edit_metadata operation=removeObjectAttribute ownerFqn=Catalog.Products name=Article cascadeForms=true # Forms группа (alias к edit_form для add*/removeFormItem) edit_metadata operation=createForm projectName=X ownerFqn=Catalog.Products formName=ItemForm formType=ItemForm setAsDefault=true edit_metadata operation=addField formFqn=Catalog.Products.Form.ItemForm name=Article dataPath=Object.Article edit_metadata operation=listPictures projectName=X filter=add # поиск картинок (StandardPictures + CommonPicture.*) # Templates группа edit_metadata operation=addTemplate projectName=X ownerFqn=Catalog.Products name=PrintForm templateType=Spreadsheet # 10 типов: Spreadsheet/Text/DCS/Appearance/Binary/HTML/Geo/Graph/ActiveDocument/AddIn # HTTP-services: композитное создание + удаление edit_metadata operation=create_http_service projectName=X name=Orders # минимум: один вызов = HTTPService + Template1 + Get GET + Module.bsl со стабом edit_metadata operation=create_http_service projectName=X name=Orders rootURL=/api/orders \ urlTemplateName=ByID urlTemplate=/order/{id} methodName=Read httpMethod=GET handler=ReadOrderByID edit_metadata operation=add_url_template projectName=X ownerFqn=HTTPService.Orders name=List template=/orders edit_metadata operation=add_url_template_method projectName=X ownerFqn=HTTPService.Orders templateName=List name=All httpMethod=GET withHandlerStub=true # auto-stub в Module.bsl edit_metadata operation=remove_url_template_method projectName=X ownerFqn=HTTPService.Orders templateName=List name=All edit_metadata operation=remove_url_template projectName=X ownerFqn=HTTPService.Orders name=List # В расширении тот же синтаксис, projectName=<extension project name> # Extensions группа (batch + child-FQN) edit_metadata operation=adopt_objects projectName=Ext baseProjectName=Base targetFqn=Catalog.A,Document.B,Document.C # CSV per-object result edit_metadata operation=adopt_object projectName=Ext baseProjectName=Base targetFqn=Document.SalesOrder recursive=true # с детьми # adopt_child / adopt_form_item принимают composed FQN или явные ownerFqn + childKind + name edit_metadata operation=adopt_child projectName=Ext baseProjectName=Base ownerFqn=Catalog.Products childKind=Form name=ItemForm edit_metadata operation=adopt_child projectName=Ext baseProjectName=Base targetFqn=Document.Sales.Attribute.Discount # equivalent edit_metadata operation=adopt_child projectName=Ext baseProjectName=Base targetFqn=InformationRegister.Rates.Resource.Rate # childKind aliases на русском также поддержаны: Форма / Реквизит / ТабличнаяЧасть / Макет / Команда / Измерение / Ресурс # Specialized группа edit_metadata operation=addEnumValue ownerFqn=Enum.Statuses name=Active edit_metadata operation=addRegisterField ownerFqn=InformationRegister.Q name=Status fieldKind=resource edit_metadata operation=addEventSubscriptionHandler eventName=BeforeWrite handler="MyModule.Handler" # нормализация в "CommonModule.MyModule.Handler" # DCS группа edit_metadata operation=createReportSchema projectName=X ownerFqn=Report.Sales edit_metadata operation=addDataSet projectName=X ownerFqn=Report.Sales name=Main type=Query queryText="ВЫБРАТЬ..." edit_metadata operation=addCalculatedField projectName=X ownerFqn=Report.Sales name=Total expression="Sum * Qty" edit_metadata operation=repairReportSchema projectName=X ownerFqn=Report.Sales # лечение схемы-фантома в расширениях ``` **Идемпотентность:** - При повторном вызове `addObjectAttribute`/`addTabularSection`/`createObject` с уже существующим именем + другими свойствами - ответ содержит `propertyMismatch` тег с массивом `[{name, requested, existing}]`. AI агент должен вызвать `setObjectProperty` для каждого diff'а, а НЕ ретраить add*. - При совпадении свойств - `idempotentSkip` тег (success no-op). **Cascade form cleanup:** - При `removeObjectAttribute`/`removeTabularSection`/`removeTabularSectionAttribute` с активными ссылками на удаляемое поле в формах - операция отказывает с `requiresCascadeForms` тегом + `affectedForms` preview. - Передать `cascadeForms=true` (или `force=true`) - поля автоматически удаляются со всех форм владельца. **Защитные слои:** - **Standard attribute conflict guard** - `edit_metadata addObjectAttribute` блокирует имена, совпадающие с платформенными стандартными реквизитами (Code, Date, Number, Posted, LineNumber и др., включая русские варианты). - **Supplier lock guard** - при обнаружении что объект на поддержке и режим прав `NOT_ALLOWED` / `DENIED` / `DISABLED` блокирует с инструкцией "включить редактирование в EDT или работать через расширение". - **Гарантированный sync на диск** для всех BM-mutating tools (10s soft cap). **Защитные слои (headless метаданные):** - **EventSubscription handler auto-prefix** - `addEventSubscriptionHandler handler="..."` принимает `"Method"` или `"CommonModule.X.Method"`, нормализуется к полной форме. Если CommonModule не существует - early-fail с тегом `commonModuleNotFound`. - **Extension CommonModule guards** - в проекте-расширении блокирует `privileged=true` и комбинацию `global=true+server=true` (платформа отвергает на UpdateDBCfg). - **Generic+empty form 11 base properties** - `createForm formType=Generic layout=empty` автоматически получает 11 базовых свойств (групповая раскладка, командная панель и др.), без них форма не открывается в EDT-редакторе и таблицы схлопываются до нулевой высоты. - **CommonForm auto inner form** - `createObject CommonForm.X` автоматически создает внутреннюю форму вторым шагом (.mdo + Form.form + Module.bsl рядом). ## AI-agent helper tools Три композитных tool для AI-friendly workflows. #### `generate_health_snapshot` - Полный health snapshot за один вызов Объединяет errors + metadata stats + project metrics + anti-patterns в одном response, заменяя 5+ tool-calls. Один вызов дает AI агенту полную картину состояния проекта. | Параметр | Обязательный | Описание | |---|:---:|---| | `projectName` | да | Имя проекта EDT | | `includeAntiPatterns` | нет | Запустить `detect_query_anti_patterns` (default true) | | `includeMetrics` | нет | Запустить `project_metrics` (default true) | | `errorScope` | нет | `session\|project\|all` (default `session`) | #### `code_template` - Boilerplate BSL templates 11 готовых шаблонов BSL-кода для типичных задач: HTTP-service handler, scheduled job, event subscription, form module skeleton, object events, print form, background job, EDP method, YAxUnit test suite и др. | Параметр | Обязательный | Описание | |---|:---:|---| | `template` | да | Имя шаблона: `httpService`, `scheduledJob`, `eventSubscription`, `formModule`, `objectEvents`, `printForm`, `backgroundJob`, `edpMethod`, `yaxunit`, `commonModule`, `apiClient` | | `params` | нет | JSON-объект с подстановками (имена методов/реквизитов) | | `language` | нет | `ru\|en` (default `ru`) | #### `extension_lifecycle` - Workflow для расширений Многошаговый guided workflow: probe extension → adopt object → generate event handler → revalidate. Заменяет цепочку из 4-5 tool calls для типичного сценария "добавить перехватчик метода в расширении". | Параметр | Обязательный | Описание | |---|:---:|---| | `projectName` | да | Имя расширения (V8ExtensionNature project) | | `step` | да | `probe\|adopt\|generateHandler\|validate\|all` | | `targetFqn` | нет | FQN заимствуемого объекта (для adopt/generateHandler) | | `methodName` | нет | Имя метода для перехвата (для generateHandler) | | `interceptType` | нет | `before\|after\|instead` (default `before`) | При вызове deferred операции `edit_metadata` возвращает понятное сообщение с probe API availability и подсказкой про GUI fallback - это нормальное поведение, не ошибка реализации.
-
-
SKILL.md 16.4 KB
--- name: ai-edt-tools description: "EDT-based 1C:Enterprise (1С:Предприятие 8.3+) development via the EDT MCP server - BSL code analysis and editing, metadata inspection and construction, module navigation, query validation, managed forms, error checking, debugging, infobase update. Use when the project is an EDT workspace: 1C/BSL modules, .mdo metadata, 1C queries, managed forms. Not for 1C 7.7 (.1s/.ert/1Cv7.MD) and not for Configurator-format sources without an EDT project - those have their own skills." --- # AI-EDT MCP Tools MCP-сервер **ai-edt** дает прямой доступ к семантическому индексу EDT (BM model), платформенной документации, проверкам, отладке и конструкторам метаданных. Работает через живой экземпляр EDT. Semantic- операции (ссылки, определения, иерархия вызовов, структура модуля) идут по BM-модели и AST, а не по текстовому совпадению; текстовый и regex-поиск в каталоге тоже есть (`code_search operation=text_search`). Каталог инструментов вынесен в `references/` - читай нужный файл по ситуации, а не весь набор. > **Навык написан под [AI-EDT](https://github.com/Desko77/ai-edt)** - MCP-сервер работает плагином > внутри запущенной 1C:EDT (update site: https://desko77.github.io/ai-edt/). Весь каталог в > `references/` описывает именно его: больше сотни операций, свернутых в **фасады** с маршрутизацией > через `operation=`. > > Если подключен ДРУГОЙ MCP-плагин для EDT, этот каталог к нему неприменим: там свой набор > инструментов, свои имена и фасадов может не быть вовсе - вызов вида > `diagnostics operation=get_project_errors` вернет ошибку. Ключ сервера тоже свой. Порядок в этом > случае: взять фактические имена из `tools/list` сессии и работать по документации своего плагина; > общие принципы навыка (что проверять после правки, чего не подменять ручной правкой файлов) > остаются в силе. ## When to Use - Анализ и правка BSL: модули, методы, ссылки, вызовы, рефакторинг. - Метаданные: чтение, создание, изменение, удаление, переименование с каскадом. - Формы: структура, скриншот из WYSIWYG-редактора, правка без ручного XML. - Запросы 1С: валидация синтаксиса и семантики до запуска. - Ошибки проекта, обновление ИБ, юнит-тесты YAxUnit, отладка и профилирование. Для BSL и метаданных 1С этот сервер приоритетнее Grep/Read и точнее любого текстового поиска. ## Когда НЕ использовать - **1С 7.7** (`.1s`, `.ert`, `1Cv7.MD`) - скил `1c77-dev` и сервер `1c77-metadata`: инструменты EDT к 7.7 неприменимы. - **Обычные (неуправляемые) формы и проект в формате Конфигуратора без EDT-проекта** - каталог рассчитан на управляемые формы и EDT-модель; для XML-выгрузки Конфигуратора есть отдельные скилы `1c-*` (cf/epf/erf). - **Данные живой базы вне отладочной сессии** - скил `1c-mcp-toolkit` по HTTP. - **EDT не запущена** - инструменты недоступны; сообщить пользователю, а не переходить на ручную правку файлов проекта. ## Prerequisites `get_edt_version` - проба. Не ответил - корректный вывод "ai-edt недоступен", а НЕ "EDT не запущена": та же картина бывает при недоступном MCP-сервере, зависшей очереди вызовов и несовместимом плагине. При ошибке связи или timeout `self_status` НЕ вызывать - он на том же сервере; он полезен только когда сервер отвечает, но операция не проходит. Разбор случаев и что делать в каждом - `rules/mcp-tool-priority.md`, раздел "Когда инструменты недоступны". Коротко: анализировать без MCP можно, писать в проект вслепую - нельзя. ## Ключевые фасады - точки входа Фасад заменяет набор родственных standalone-инструментов: одна точка входа, действие выбирается параметром `operation` (у отладчика - `action`). У большинства есть встроенная справка: `operation=help`, детали конкретной операции - `operation=help topic=<операция>`. | Фасад | Когда брать | |---|---| | `code_search` | исследовать код и модель: поиск, ссылки, определения, иерархия вызовов, символы. Только чтение | | `edit_metadata` | создавать и менять метаданные и формы; массовые правки - `batch=true` | | `diagnostics` | ошибки проекта, сводки, перевалидация, проверка перед экспортом | | `launch_debugger` | отладка целиком: запуск и attach, точки останова, шаги, переменные, evaluate, профилирование | | `project_admin` | проекты, конфигурации, подсистемы, resync на диск, перезапуск EDT | | `infobase_admin` | ИБ и запуск: приложения, создание и удаление ИБ, учетные данные, обновление, `sync_control` | | `config_io` | импорт и экспорт конфигурации и отдельных артефактов | | `insights` | метрики, графы зависимостей, сравнение конфигураций, анализ влияния | | `security_audit` | роли, RLS, чувствительные данные | | `docs_lookup` | документация платформы и встроенная справка объектов | | `workspace_marks` | теги, объекты по тегам, закладки, задачи | | `yaxunit_tests` | юнит-тесты YAxUnit | **Данных информационной базы у плагина нет.** `browse_data`, `execute_query` и фасад `data_access` из него удалены - звать их бесполезно. Запрос или чтение данных живой базы - скил `1c-mcp-toolkit` (обработка по HTTP). Отладка отдает только состояние исполнения текущего кадра (`get_variables`, `evaluate_expression`), а не таблицы базы. **Одно исключение - журнал регистрации** (с 0.2.27): `infobase_admin operation=read_event_log` читает журнал ФАЙЛОВОЙ базы прямо из плагина - кто входил, что проводилось, какие обновления платформа отвергла. Это не запрос к данным: журнал лежит файлами рядом с базой. Серверная база и однофайловый формат `1Cv8.lgd` отвечают именованным отказом, а не пустым списком. Состав операций каждого фасада - `references/facades.md`, здесь только маршрут: перечни операций намеренно не дублируются, иначе два списка расходятся. Не фасады, вызываются напрямую: `vanessa` (сценарии Vanessa Automation, снимок формы работающей 1С - доводы в каталоге инструментов), `self_status`, конструкторы `dcs_workshop` (СКД), `mxl_workshop` (табличные документы), `xdto_workshop` (XDTO-пакеты), `extension_workshop` (расширения и заимствование), `external_object_workshop` (внешние обработки и отчеты), `external_data_source_workshop`. Часть standalone-инструментов поглощена фасадами и остается backward-compat алиасами (примеры): `get_project_errors` / `clean_project` / `revalidate_objects` -> `diagnostics`; `debug_launch` / `set_breakpoint` / `step` / `resume` -> `launch_debugger`; `get_tags` / `get_objects_by_tags` / `get_bookmarks` / `get_tasks` -> `workspace_marks`. **Под пресетом Canonical поглощенные имена скрыты из `tools/list`** (оставаясь вызываемыми), поэтому канонический вызов - через фасад: `diagnostics operation=get_project_errors`, `launch_debugger action=launch`. Ниже и в references имена операций пишутся короткой формой для узнаваемости. Поглощены НЕ все. Самостоятельными остаются, в частности, `write_module_source`, `validate_query`, `get_edt_version`, `read_module_source`, `read_method_source`, `get_module_structure`, `list_modules`, `ai_context`, `diff_module`, `get_form_structure`, `get_form_screenshot`, `code_review`. Список не исчерпывающий - сверяться с `tools/list` и `references/facades.md`. Записи BSL в `code_search` нет вовсе: он только читает. ## Навигация по references | Нужно | Файл | |---|---| | Что за фасад, какие операции, режим доступа (чтение / изменение / опасно) | `references/facades.md` | | Чтение и навигация по BSL, структура модулей, поиск, запись кода | `references/code-and-model.md` | | Создание и правка метаданных, формы, макеты, конструкторы | `references/metadata-forms-constructors.md` | | ИБ, запуск, обновление, отладка, профилирование, тесты | `references/infobase-debug-tests.md` | | Ошибки проекта, валидация, метрики, графы, безопасность | `references/diagnostics-analysis-security.md` | | Проект и воркспейс, метки, задачи, композитные агентские инструменты, пресеты видимости | `references/project-tags-agent-helpers.md` | | Готовый порядок вызовов под конкретную задачу | `references/workflows.md` | | Теги ошибок, троттлинг, грабли, большие конфигурации, sync_control | `references/gotchas-and-errors.md` | Каталог в `references/` - снимок docs AI-EDT на ревизии `4fb31770` (28.07.2026), 118 имен сверены с реестром групп `ToolCategory.java`. **Снимок отстает от рабочего дерева форка**: там уже появляются инструменты, которых нет ни в реестре групп, ни в docs (например `find_dead_code`), а число 118 полноты не доказывает. Инструмент не нашелся в каталоге - не считать, что его нет, и не уходить в ручной обход. Порядок поиска: `tools/list` текущей сессии (там актуальный набор с учетом пресета) -> `operation=help` у профильного фасада (каталог операций) -> `edit_metadata operation=help topic=availability` (что доступно на этом runtime). `self_status` для этого НЕ годится: он показывает состояние сервера, служб EDT и очереди, а не каталог инструментов. Каталог устарел - пересобрать снимок из docs проекта, а не дописывать по памяти: именно так в скил попадали инструменты из старых версий. ## Критические запреты и проверки Полный список обязательных проверок с лимитами - `rules/mcp-tool-priority.md`, раздел "Обязательные проверки" (единственный источник). Здесь только то, без чего скил применять нельзя. 1. **BSL пишется через `write_module_source`**, а не Edit/Write по `.bsl`: иначе EDT не увидит правку до refresh, теряется авто-валидация и подсчет строк. Перед первой записью в модуль - `rules/edt-bsl-write-safety.md`: там безопасные режимы (`replaceMethod`, `replaceLines` с `expectedText`, вставки `insertBefore` / `insertAfter`) и почему голый `replace` затирает модуль. 2. **Формы правятся form-операциями `edit_metadata`**, а не ручным XML в `.form`. 3. **`validate_query` после каждого написанного или измененного запроса**, не копя до конца; для СКД - `dcsMode=true`. 4. **`validate_for_export` перед любой записью конфигурации в ИБ и перед сборкой артефактов**, включая неявную запись у `yaxunit_tests`. Findings блокируют операцию. Остальные обязательные проверки (`ask_1c_ai` с обязательной верификацией его замечаний, порядок `revalidate_objects` -> `get_project_errors`, лимиты итераций, поведение при отказе сервера) не перечисляются здесь во избежание расхождений - они в `rules/mcp-tool-priority.md`, раздел "Обязательные проверки", пункты 1-6. ## Экономия контекста - `ai_context` с `target=<FQN>` и `depth=standard` - один вызов вместо metadata + modules + structure. - `get_module_structure` -> `read_method_source` вместо чтения модуля целиком: работает и на модулях 25k+ строк, отдает точные границы методов дешево по токенам. - Крупные карты (`list_modules`, каталог FQN, структура большого модуля) кэшировать один раз в gitignored-файл проекта, а не перезапрашивать. - Тяжелые выборки уводить в субагента, чтобы сырье не оседало в основном контексте. Детали и запреты - `references/gotchas-and-errors.md`. ## Обработка ошибок Не ретраить вслепую: сигналы `Pending`/`runKey`, `propertyMismatch`, `requiresCascadeForms`, `*ApiNotFound`, `BSL model is not available` требуют разных действий. Полная таблица - `references/gotchas-and-errors.md`. Лимиты повторов и правило остановки (сменить подход, а не бросить задачу) заданы в `rules/mcp-tool-priority.md`, раздел "Троттлинг и ошибки" - там единственный источник.
Comments (0)
Sign in to join the conversation.
Reviews (0)
No reviews yet.
No comments yet.