Как это устроено
Формат ответов
Каждый ответ — короткий markdown, который агент читает сверху вниз. Первой строкой идёт заголовок с кружком статуса, поэтому исход виден сразу. Ниже — поля и секции в фиксированном порядке, одинаковом у всех инструментов.
Кружки статуса
| Кружок | Статус | Что значит |
|---|---|---|
committed |
Записано. У инструментов чтения — всегда : чтение прошло | |
dry_run · running |
Предпросмотр без записи или операция ушла в фон — позже нужен повторный вызов | |
rolled_back |
Отклонено и откачено: в конфигурации ничего не изменилось, причина в rollback_reason |
|
failed |
Ошибка: не найдено, нет лицензии, сервис EDT не ответил. В ответе message и подсказка fix_hint |
|
noop |
Менять было нечего: всё уже в нужном состоянии |
Кружок стоит и в заголовке, и в строке status — заголовок виден даже в свёрнутой карточке вызова.
Ответ записи и действия
### 🟢 update — Catalog.Контрагенты.Attribute.ИНН
- **status:** 🟢 committed
- **fqn:** `Catalog.Контрагенты.Attribute.ИНН`
- **operation:** `update`
#### Changes
- synonym: «» → «ИНН организации»
- length: Строка(10) → Строка(12)
#### Warnings
- повторный write перезапишет тип без квалификатора- Заголовок — кружок, операция и адрес. Адрес в ответе — готовый аргумент для следующего вызова.
- Поля
- **имя:** значение:status,operation, у пачкиcount, при откатеrollback_reason, у кодаlinesиvalidation, у действий — свои поля (old_name,new_name,references_updated,roles_changed…). - Секции в фиксированном порядке, только непустые:
Changes(что изменилось, в виде «было → стало»),Diff,Preview,Warnings,Did you mean,Errors. Changesпоказывает то, что инструмент прочитал после записи, а не то, что его просили сделать.
Ответ чтения
### Document.РеализацияТоваровУслуг.Template.Печать
> Σ 41×9 (R1C1:R41C9) · formats 24 · merges 3 · areas 2 · defaultFormatIndex 0
#### Areas (2)
- Заголовок [Rect] R1C1:R3C9
- ТабЧасть [Rect] R8C1:R20C9
#### Merges (3)
- R1C1:R1C9 (1×9)
- … (2 ещё)
#### Parameters (0)
_(нет)_- Дайджест
> Σ …— главные числа одной строкой. - Секции
#### Имя (N)— число в скобках всегда полное, даже если показана часть; хвост… (N ещё)говорит, сколько скрыто. _(нет)_— раздел пуст. Тип рядом с именем — в квадратных скобках:Реквизит [Строка(50)].- Длинный ответ режется окном; строка
*lines: …*в конце подсказывает следующую страницу (Окно чтения). - Если ничего не найдено, ответ говорит, где искали: секция
Checkedу графов и ревью — пустой результат с областью проверки, а не просто ноль.
Отказ с подсказкой
Когда имя не найдено, инструмент не угадывает, а перечисляет ближайшие варианты в секции Did you mean:
### 🔴 search — `txt`
- **status:** 🔴 failed
- **message:** Unknown operation: txt
- **fix_hint:** supported: text, symbol, references, calls
#### Did you mean
- text
- symbol
- references
- callsУ отказов записи к причине добавляется указатель на контракт: контракт: metadata_read <адрес>#help. Агент идёт туда и исправляет вызов, а не перебирает варианты.
Ничего не изменилось
### ⚪ update — Role.ПолныеПрава.Rights::Catalog.Валюты
- **status:** ⚪ noop — все указанные права уже в нужном состоянии
- **fqn:** `Role.ПолныеПрава.Rights::Catalog.Валюты`
- **operation:** `update`Почему markdown, а не JSON
Ответ читает модель, и каждый символ стоит контекста. Markdown с устойчивыми подписями полей короче JSON, а значения из него агент извлекает так же надёжно: подписи status, operation, fqn, message, fix_hint не меняются между версиями без записи в журнале версий.