meta-info · diff
git:20260908.059a437 to git:20260910.a91d896
71 added, 226 removed. Audit A to A.
---
name: meta-info
- description: Прочитать типизированную локальную структуру и validation объекта метаданных 1С, при необходимости дополнив её списками использования из дерева исходников.
- argument-hint: <sourceSet> <metadataPath> [sections] [limit]
+ description: Прочитать факты объекта метаданных 1С по логическому адресу — свойства, состав, ссылки и декларации — и спросить вердикт о нём.
+ argument-hint: <at> [sections] [limit]
allowed-tools:
- Read
- Glob
---
- # /meta-info — структура и проверка объекта метаданных
+ # /unica:meta-info — факты объекта метаданных
## MCP routing
- - Preferred path: use MCP `unica` tool `unica.meta.info`.
- - Выбирайте объект логически через `sourceSet + metadataPath`; расположение XML
- внутри выгрузки остаётся внутренней деталью `unica`.
- - Читайте локальную структуру и `data.validation` из одного результата. Отдельный
- публичный вызов проверки не нужен.
- - Инструмент читает только дерево исходников и не обращается к индексу кода ни
- при каких аргументах. Без `sections` он ограничивается самим объектом; чтобы
- добавить списки использования, перечислите нужные `sections`, а `limit`
- (`1..=50`) ограничивает только `predefinedItems`.
- - Успешный и предметно неуспешный `tools/call` возвращает `structuredContent`;
- `isError == !structuredContent.ok`. Читайте локальную структуру, validation и
- доступные частичные данные из `structuredContent.data`; `content[0].text` не
- является вторым контрактом результата.
- - Не вызывайте внутренние MCP/CLI-адаптеры и skill-local scripts.
- - `sourceSet` — это имя набора исходников из `v8project.yaml`, а не
- константа. Получите его через `unica.view {}`; `"main"` в примерах
- ниже — иллюстрация, а не значение по умолчанию.
-
- ```json
- {
- "jsonrpc": "2.0",
- "method": "tools/call",
- "params": {
- "name": "unica.meta.info",
- "arguments": {
- "cwd": "<workspace>",
- "sourceSet": "main",
- "metadataPath": "Catalog.Валюты"
- }
- }
- }
- ```
-
- ## Ответ
-
- `data` всегда начинается с локально прочитанной структуры объекта: канонического
- `metadataPath`, вида, имени, синонима, состояния поддержки, свойств именами
- платформы, владельцев, реквизитов, измерений, ресурсов, табличных частей, форм,
- макетов и команд. Поле `validation` (`data.validation`) содержит `status` и
- типизированные `diagnostics`; та же внутренняя проверка выполняется перед каждой
- мутацией.
-
- У структурного типа элемента есть `variants` и `mutationCapability` со
- значением `editable` или `readOnly`. `uuid` — доказанно редактируемый вариант;
- его входная форма — `{"kind": "uuid"}`. Синтаксически корректный, но ещё не
- моделируемый платформенный QName оставляет `type` отсутствующим, отмечает только
- этот элемент как `incomplete` и даёт warning, не превращая весь вызов в ошибку.
- Это не разрешает передавать такой QName в `meta.add` или `meta.edit`.
-
- Формы и макеты наблюдаются по ссылке владельца и отдельному XML-дескриптору,
- команды — по встроенному дескриптору владельца без выдуманного
- `Commands/<Name>.xml`. Страница HTML-макета проверяется как зарегистрированный
- UTF-8-ресурс и не разбирается как XML; её `DOCTYPE`, HTML-сущности и исходные
- байты не нормализуются.
-
- `data.kind` всегда связан с обязательным `data.details`: это закрытый вариант
- для каждого из 23 видов метаданных, а не необязательный универсальный словарь.
- Полнотой этой пары владеют ADR-0047 и `INV-MCP-META-INFO-COVERAGE`.
- Для видов без дополнительных фактов `details` равен `{}`. Constant и
- DefinedType возвращают в нём наблюдаемый `type`, включая доказанно
- редактируемый `UUID`;
- ScheduledJob — логический адрес общего модуля и имя метода;
- CalculationRegister — тройку `schedule`; HTTPService — `urlTemplates` с
- методами; WebService — `xdtoPackages`, операции, параметры и XDTO QName в форме
- `{namespace, localName}`. Возможность прочитать иной тип или свойство не
- означает, что `unica.meta.add/edit` разрешит его записать.
-
- Дополнительные владельцы не сваливаются в общий словарь:
- `ChartOfCharacteristicTypes.details.type` хранит тип значения,
- `ChartOfCalculationTypes.details.baseCalculationTypes` — логические адреса
- базовых видов расчёта, `DocumentJournal.details.registeredDocuments` — адреса
- зарегистрированных документов. Корневые декларации сериализуются отдельно как
- `standardAttributes`, `standardTabularSections` и `characteristics`; их
- прикладные свойства имеют закрытые значения `text`, `boolean`, `localizedString`,
- `typed`, `nil` или `empty`. `localizedString.values` сохраняет пары
- `{language, content}`. Только ранее опубликованный `properties.Synonym` остаётся
- плоской строкой ради wire-совместимости; новые локализованные свойства языки не
- теряют.
-
- Для применимой вложенной коллекции доказанно пустое значение равно `[]`.
- Доказанно отсутствующее применимое значение равно `null` без ошибки.
- Недоказанное или повреждённое значение равно `null` и сопровождается диагностикой
- с путём публичного поля, например `details.urlTemplates[0].methods[0].handler`;
- частичный массив за полный не выдаётся.
-
- Новые коллекции `recalculations`, `accountingFlags`,
- `extDimensionAccountingFlags` и `addressingAttributes` находятся в
- `data.collections`. Неприменимая к виду коллекция отсутствует; применимая без
- контейнера равна `null`; полностью прочитанный пустой контейнер равен `[]`.
- Элементы accounting/addressing дополнительно сохраняют известные стандартные
- свойства в `properties`; неизвестный или повреждённый вложенный узел обнуляет
- всю коллекцию с диагностикой, но неизвестный корректный QName оставляет один
- `incomplete`-элемент и warning. `relations.dataLockFields` использует ту же
- all-or-none семантику и возвращает типизированные field-цели.
-
- У `EventSubscription` поле `data.relations.source` содержит массив того же
- закрытого размеченного объединения, которое принимают `unica.meta.add` и
- `unica.meta.edit`: `object`, `manager`, `recordSet` и `definedType` возвращаются с
- логическим `metadataPath`, `family` — с `sourceClass`. Для менеджера константы
- `sourceClass` различает `constantManager` и `constantValueManager`. Это обратное
- чтение логически допустимого `Properties/Source`, а не строка XML-типа. Примитив,
- ссылка или другой форматный тип не выдаётся как допустимая цель: чтение содержит
- диагностику. Позиция элемента массива не входит в идентичность источника.
-
- `data.functionalSubsystems` и `data.interfaceSubsystems` — только членства
- текущего объекта соответственно в функциональных и интерфейсных подсистемах.
- Запись `Content` может ссылаться на объект логическим адресом метаданных или
- UUID его корневого дескриптора. После полного доказательства топологии отсутствие
- членств сериализуется как `[]`. Если зарегистрированная топология повреждена,
- недоступна или её обработка отменена, оба поля отсутствуют, а диагностика
- содержит `provider_unavailable`; это состояние не подменяется пустыми массивами.
+ - Preferred path: use MCP `unica` tool `unica.view` с адресом объекта.
+ - Адрес — `<набор>:<Вид>.<Имя>`, например `main:Catalog.Валюты`. Имя набора
+ даёт `unica.view {}`, адрес по имени объекта — `unica.search {corpus:
+ "names"}`, адрес по пути файла — аварийный `unica.resolve`. `"main"` ниже
+ только пример, а не значение по умолчанию.
+ - Вердикт о готовности объекта спрашивает `unica.check {at}`, а не читатель:
+ факты и суждение о них разошлись по разным входам намеренно.
+ - Адрес принимает русские и английские псевдонимы вида и отвечает канонической
+ английской формой в `at`.
+ - Код объекта читают по адресу модуля (`…Module.Object.Method.<Имя>`), а не
+ этим скиллом.
- Явно запрошенные секции читаются из дерева исходников, а не из индекса.
- `data.usage` содержит `roles`, `subscriptions` и `functionalOptions` обычными
- полными массивами: они прочитаны из того же снимка, что и сам объект, и
- разойтись с ним не могут, поэтому никаких признаков давности у них нет.
- Предопределённые элементы лежат отдельно в `data.predefinedItems` вместе с
- `total`, `returned` и `truncated`, потому что это содержимое самого объекта.
- `items` возвращается плоско в документном порядке: каждый элемент содержит
- UUID в `id`, поддержанные typed-поля своего владельца и `parentId` для
- вложенного элемента. `Catalog`, `ChartOfAccounts`,
- `ChartOfCharacteristicTypes` и `ChartOfCalculationTypes` имеют разные закрытые
- наборы полей; структурные `type`, `accountingFlags` и `extDimensionTypes`
- читайте как объекты из ответа, не восстанавливайте из них строковый DSL.
- Подписка может достигать объекта через `DefinedType`; такое совпадение входит в
- ответ и помечено полем `via`. Без `sections` или с `sections: []` не читается
- ничего сверх самого объекта.
+ ## Что отвечает узел
- Адрес принимает русские и английские псевдонимы вида, а в
- `data.metadataPath` возвращает каноническую английскую форму. Если известен
- только путь файла, сначала используйте `unica.resolve`; если известно имя
- — `unica.search {corpus: "names"}`. Адрес модуля (`Catalog.X.ObjectModule`) здесь не
- поддерживается: код читают `unica.code.*`.
+ `props` несут свойства объекта под именами платформы — `Hierarchical`,
+ `CodeLength`, `Comment` и прочие из закрытого словаря наблюдаемых имён, — а
+ рядом с ними лежат собственные ключи узла: `kind`, `synonym`, `support`.
- «Представление типа», «Представление объекта» и представления списка ссылочного
- объекта находятся в `properties` под платформенными именами
- `ObjectPresentation`, `ExtendedObjectPresentation`, `ListPresentation` и
- `ExtendedListPresentation`.
+ Составной факт вида разложен по ролям, а не спрятан объектом: обработчик
+ регламентного задания приходит как `handlerModule` и `handlerMethod`,
+ расписание регистра расчёта — как `scheduleRegister`, `scheduleValueField` и
+ `scheduleDateField`. Тип константы, определяемого типа и плана видов
+ характеристик приходит ключом `type` компактной строкой; восстанавливать из
+ неё строковый DSL не нужно — она и есть прочитанное значение.
- Раздел «Поддержка» читается из `Ext/ParentConfigurations.bin`. Объект на замке
- изменяйте через CFE/release-support flow, не через raw support metadata.
+ `branches` перечисляет состав: реквизиты, табличные части, измерения,
+ ресурсы, перерасчёты, значения перечисления, графы, формы, макеты и команды.
+ Шаблоны URL HTTP-сервиса приходят ветвью `URLTemplate` с вложенной ветвью
+ `Method`, операции веб-сервиса — ветвью `Operation` с вложенной `Parameter`.
- Соглашения по именам, синонимам и представлениям находятся в
- [общей ссылке](../../references/platform/metadata-conventions.md); перечни видов
- и свойств не дублируются здесь, потому что их публикует схема операции.
+ Все ссылки объекта наружу собраны в одну ветвь `Relation`: владельцы,
+ движения по регистрам, основания, ввод по строке, поля блокировки, источник
+ события подписки, зарегистрированные документы журнала, базовые виды расчёта
+ и пакеты XDTO веб-сервиса. Элемент несёт имя связи в `relation`, адрес цели в
+ `at` и её вид в `kind`. Элемент показывает наружу, поэтому спуск в него
+ отказывает: цель читается по своему адресу.
- ## Примеры
+ Корневые декларации приходят ветвями `StandardAttribute`, `Characteristic` и
+ `StandardTabularSection`. Стандартная табличная часть носит имя и адресуется,
+ а внутри несёт свою ветвь `StandardAttribute`. Характеристика прикладного
+ имени не носит — она названа парой источников типов и значений, — поэтому её
+ элементы остаются строками данных без адреса.
- ### Документ: локальная структура и validation
+ «Представление типа», «Представление объекта» и представления списка
+ ссылочного объекта лежат в `props` под именами платформы —
+ `ExtendedObjectPresentation`, `ListPresentation` и прочими: проекция их не
+ переименовывает и не сводит в одно поле.
- ```json
- {
- "jsonrpc": "2.0",
- "method": "tools/call",
- "params": {
- "name": "unica.meta.info",
- "arguments": {
- "cwd": "<workspace>",
- "sourceSet": "main",
- "metadataPath": "Document.АвансовыйОтчет"
- }
- }
- }
- ```
+ `filter` с `sections` снимает лишние срезы ответа, `limit` ограничивает число
+ элементов ветви.
- ### Документ и явно запрошенные списки использования
+ ## Поддержка
- ```json
- {
- "jsonrpc": "2.0",
- "method": "tools/call",
- "params": {
- "name": "unica.meta.info",
- "arguments": {
- "cwd": "<workspace>",
- "sourceSet": "main",
- "metadataPath": "Document.АвансовыйОтчет",
- "sections": ["roles", "subscriptions", "functionalOptions"],
- "limit": 20
- }
- }
- }
- ```
+ Состояние поддержки объекта приходит в `props` ключом `support`. Оно прочитано
+ через Unica из `Ext/ParentConfigurations.bin` поставщика; разбирать этот файл
+ самостоятельно не нужно и нельзя. `Поддержка: на замке` или состояние только
+ для чтения — решение о выпуске, а не препятствие к обходу: правку такого
+ объекта веди расширением либо явным планом смены состояния поддержки.
- ### Предопределённые элементы в документном порядке
+ ## Чего этот вход пока не отвечает
- ```json
- {
- "jsonrpc": "2.0",
- "method": "tools/call",
- "params": {
- "name": "unica.meta.info",
- "arguments": {
- "cwd": "<workspace>",
- "sourceSet": "main",
- "metadataPath": "Catalog.Валюты",
- "sections": ["predefinedItems"],
- "limit": 20
- }
- }
- }
- ```
+ Три факта прежнего читателя канонического дома ещё не имеют, и подменять их
+ догадкой нельзя:
- Сначала проверяйте `total`, `returned` и `truncated`, затем обходите `items`.
- `parentId: null` означает корневой элемент; UUID родителя связывает вложенный
- элемент без раскрытия физической структуры `Predefined.xml`.
+ - **предопределённые элементы** объекта: писатель у них есть
+ (`predefinedItem.add`, `predefinedItem.set`, `predefinedItem.remove`), а
+ канонического читателя у предопределённых элементов нет;
+ - **использование** объекта ролями, подписками и функциональными опциями;
+ - **членство** объекта в функциональных и интерфейсных подсистемах.
- ### HTTP-сервис
+ Если нужен один из них, скажи об этом прямо, а не выдавай за него соседний
+ факт.
- ```json
- {
- "jsonrpc": "2.0",
- "method": "tools/call",
- "params": {
- "name": "unica.meta.info",
- "arguments": {
- "cwd": "<workspace>",
- "sourceSet": "main",
- "metadataPath": "HTTPService.ExternalAPI"
- }
- }
- }
- ```
+ ## MCP examples
- ### Веб-сервис
+ ### Факты объекта
```json
{
"jsonrpc": "2.0",
"method": "tools/call",
"params": {
- "name": "unica.meta.info",
+ "name": "unica.view",
"arguments": {
- "cwd": "<workspace>",
- "sourceSet": "main",
- "metadataPath": "WebService.EnterpriseDataUpload_1_0_1_1"
+ "at": "main:Catalog.Валюты"
}
}
}
```
- ### Определяемый тип
+ ### Ссылки объекта наружу
```json
{
"jsonrpc": "2.0",
"method": "tools/call",
"params": {
- "name": "unica.meta.info",
+ "name": "unica.view",
"arguments": {
- "cwd": "<workspace>",
- "sourceSet": "main",
- "metadataPath": "DefinedType.GLN"
+ "at": "main:Document.Заказ.Relation"
}
}
}
```
- ### Подписка на событие: типизированные источники
+ ### Вердикт об объекте
```json
{
"jsonrpc": "2.0",
"method": "tools/call",
"params": {
- "name": "unica.meta.info",
+ "name": "unica.check",
"arguments": {
- "cwd": "<workspace>",
- "sourceSet": "main",
- "metadataPath": "EventSubscription.ОбработкаИзменений"
+ "at": "main:Catalog.Валюты"
}
}
}
```