Инструменты
Сервер предоставляет 63 инструмента: пять инструментов сеанса, три инструмента чтения, 54 инструмента редактирования, по одному на каждую операцию редактирования, и инструмент erd_batch, который выполняет несколько инструментов редактирования как одну правку.
Каждый инструмент, кроме erd_list_documents, принимает первым аргументом путь к документу path, и в таблицах ниже этот аргумент опущен.
Аргумент, помеченный знаком ?, необязателен.
Инструменты сеанса
| Инструмент | Аргументы | Что делает |
|---|---|---|
erd_list_documents | Выводит список ERD-документов с полями path, open, active, dirty и readonly: документы редактора, который обслуживает рабочий каталог, причем в IDE JetBrains это документы всех открытых проектов, а иначе — ERD-файлы в рабочем каталоге. | |
erd_open_document | create? | Открывает документ для редактирования — в ERD Editor того редактора, который его обслуживает, если такой редактор есть. С аргументом create сначала создает файл, если его нет, а к имени без расширения добавляется .erd.json. |
erd_save | Сохраняет документ, который находится в редакторе. VS Code оставляет правки агента несохраненными, пока не будет вызван этот инструмент; Obsidian и IDE JetBrains сохраняют их так же, как ваши, а этот инструмент записывает их сразу. В режиме Headless каждая правка уже записана, и инструмент ничего не делает. | |
erd_undo | Отменяет последнюю правку, сделанную этим агентом, но никогда не ваши. Вызовы, не создавшие шага отмены, пропускаются, и инструмент их называет. | |
erd_redo | Повторно применяет правку, которую последней отменил erd_undo. |
О том, что делают сохранение и отмена в каждом режиме, см. Режимы Live и Headless.
Чтение документа
| Инструмент | Аргументы | Что делает |
|---|---|---|
erd_list | query?, offset?, limit?, namesOnly? | Настройки и счетчики, затем страница таблиц с их индексами и связями, причем для каждой таблицы указаны ее идентификатор, положение и размер на холсте, число столбцов и группа таблиц, если таблица в нее входит. Если не выполняется поиск, после таблиц идут группы таблиц, а затем заметки. |
erd_get | tableIds?, tableNames?, relationshipIds?, indexIds?, memoIds?, tableGroupIds? | Указанные сущности целиком: таблицы с их столбцами и группой таблиц, связи с их столбцами и значениями onDelete и onUpdate, индексы с их столбцами, заметки с их текстом, группы таблиц с их таблицами. |
erd_read | format, vendor?, statements?, header?, tableIds?, tableNames?, groupNames? | Весь документ сразу в одном из четырех форматов либо DDL только некоторых таблиц или групп таблиц. |
Агент находит идентификаторы с помощью erd_list, читает столбцы и другие сведения с помощью erd_get и передает эти идентификаторы инструментам редактирования.
Размер таблицы в выводе erd_list — это прямоугольник, который она занимает на холсте: высота точная, ширина приблизительная.
Для группы таблиц выводятся хранимый ею прямоугольник, ее имя, цвет и число таблиц в ней.
Каждая связь выводится один раз — вместе с одной из двух ее таблиц.
Инструменты erd_list и erd_read сообщают те настройки, которые сохраняет файл, — см. Настройки.
Инструмент erd_read принимает один из четырех форматов:
format | Что возвращает |
|---|---|
snapshot | Компактный JSON со всеми сущностями и их идентификаторами, включая группы таблиц, а также с настройками вместе со скриптами Схемы SQL. В него не входит то, что различается у разных пользователей: измеренные значения ширины, порядок наложения, вид и вкладка. Для большой схемы он получается объемным. |
sql | DDL для одной из восьми баз данных: Databricks, MariaDB, MSSQL, MySQL, Oracle, PostgreSQL, Snowflake или SQLite. По умолчанию vendor — это база данных, заданная в документе. DDL всего документа включает его скрипты перед таблицами и после них. С аргументами tableIds, tableNames или groupNames — только эти таблицы с их внешними ключами и без скриптов. Внешние ключи содержат свои действия ON DELETE и ON UPDATE, кроме тех, которые целевая база данных опускает, — см. ON DELETE и ON UPDATE. |
json | Весь документ точно в том виде, в каком сохранение записывает его в файл, включая правки, которые редактор еще не сохранил, — см. Форма хранения и значение времени выполнения. |
scripts | Только скрипты документа перед таблицами и после них в виде {"before":"…","after":"…"}, где незаданный скрипт пуст, — какой бы большой ни была схема. |
Аргументы vendor, statements, header, tableIds, tableNames и groupNames принимает только формат sql, а любой другой формат их отклоняет.
statements:create— значение по умолчанию;ifNotExists, при котором для MySQL, MariaDB, PostgreSQL, SQLite и Databricks выдаетсяCREATE TABLE IF NOT EXISTS, а для остальных — обычныйCREATE TABLE; илиrecreate, при котором таблицы удаляются перед созданием, причем для Snowflake вместо этого выдаетсяCREATE OR REPLACE TABLE.header:none— значение по умолчанию;use, при котором выбирается база данных или схема, заданная именем базы данных документа; илиcreateAndUse, при котором она сначала создается. В Oracle есть толькоuse, поэтомуcreateAndUseвыдает тамuse, а в PostgreSQL есть толькоcreateAndUse, поэтомуuseне выдает там заголовка. Для SQLite заголовок не выдается, и ни для одной базы данных он не выдается, пока имя базы данных пустое или не является простым идентификатором.groupNames: таблицы указанных групп таблиц — по имени без учета регистра, вместе с таблицами изtableIdsиtableNames. Имя, не совпадающее ни с одной группой, отклоняется с кодомnotFound. Группа без таблиц не добавляет ни одной таблицы, а чтение, в котором не осталось ни одной таблицы, как в случае, когда все указанные группы пусты и ни одна таблица не указана, отклоняется с кодомinvalidArgs.
Аргументы statements и header применяются и к DDL отдельных таблиц. Они работают так же, как параметры Statements и Header на вкладке «Схема SQL» редактора, хотя на вкладке изначально выбраны If not exists и CREATE + USE.
Имена заключаются в кавычки того типа, который сохраняет файл (пока параметр Bracket Type заблокирован, это заблокированный тип), — см. Блокировка.
Большие схемы
Схемы из сотен или тысяч таблиц тоже поддерживаются. Одно чтение возвращает не более 40 000 символов, что ниже порога, начиная с которого Claude Code откладывает результат инструмента в отдельный файл.
erd_listпо умолчанию возвращает страницу из 100 элементов: сначала таблицы, затем группы таблиц, затем заметки, а в поляхnextOffsetиnoteсообщает, где начинается следующая страница. Передайте это значениеnextOffsetкакoffsetс тем же значениемquery.queryищет таблицы по словам в имени или комментарии таблицы либо столбца без учета регистра. Таблицы, в именах которых больше этих слов, идут первыми. При поиске группы таблиц и заметки не выводятся.namesOnlyвыводит только имена таблиц — около 2000 коротких имен в одном ответе.erd_getиerd_readпринимают не только идентификаторы, но иtableNames, аerd_read— еще иgroupNames, поэтому агент, которого попросили написать SQL-запрос к большой схеме, читает DDL только нужных ему таблиц.erd_getперечисляет в полеmissingидентификаторы и имена, которым ничего не соответствует, а в полеnotReturned— идентификаторы, не поместившиеся в один ответ, чтобы их можно было запросить снова.- Чтение, слишком большое для одного ответа, отклоняется с кодом
tooLargeи подсказкой, как его сузить.
Инструменты редактирования
Идентификаторы берутся из erd_list и erd_get или из поля createdIds вызова, создавшего сущность.
Новый идентификатор состоит из 25 строчных букв и цифр, например 03h17be2plxpj5n59tqag7ogj, а идентификатор, который уже есть в документе, сохраняет свою форму, поэтому не делайте никаких выводов по виду идентификатора.
x и y — левый и верхний края на холсте в пикселях, а цвет — это шестнадцатеричный цвет CSS, например #3b82f6, или пустая строка, которая убирает цвет.
Таблицы
| Инструмент | Аргументы | Что делает |
|---|---|---|
erd_add_table | Добавляет пустую таблицу на свободное место и возвращает ее идентификатор в createdIds. | |
erd_remove_table | tableId | Удаляет таблицу вместе с ее столбцами, индексами и всеми связями, в которых она участвует. |
erd_change_table_name | tableId, value | Переименовывает таблицу. |
erd_change_table_comment | tableId, value | Задает комментарий таблицы. Пустая строка очищает его. |
erd_change_table_color | tableId, color | Задает цвет таблицы. |
erd_move_table | tableId, x, y | Перемещает таблицу в указанное положение на холсте. |
erd_move_tables | positions | Перемещает несколько таблиц одной правкой, которую отменяет один вызов erd_undo. positions содержит { tableId, x, y } для каждой таблицы, причем каждая таблица указывается не более одного раза. |
erd_sort_tables | Расставляет все таблицы рядами по холсту, начиная с таблиц с наименьшим числом столбцов, так же как их расставляют erd_import_sql, erd_import_graphql, erd_import_dbml и erd_import_aml. Таблицы одной группы остаются вместе, а рамка каждой группы подгоняется по ним. |
Столбцы
| Инструмент | Аргументы | Что делает |
|---|---|---|
erd_add_column | tableId | Добавляет в таблицу пустой столбец и возвращает его идентификатор в createdIds. |
erd_remove_columns | tableId, columnIds | Удаляет столбцы из одной таблицы вместе со связями и записями индексов, которые их используют. |
erd_change_column_name | tableId, columnId, value | Переименовывает столбец. |
erd_change_column_data_type | tableId, columnId, value | Задает тип данных, например INT или VARCHAR(255). Пока включена Синхронизация типа данных в связях, изменение распространяется по связям в обе стороны, как и в редакторе: тип serial передается внешним ключам как целочисленный тип, который он хранит, так же как его копирует erd_add_relationship, а ключ типа serial сохраняет свой тип, когда меняется один из его внешних ключей, и на этом изменение останавливается. Синхронизацию включает и выключает пользователь, а erd_list сообщает ее состояние в поле relationshipDataTypeSync. |
erd_change_column_default | tableId, columnId, value | Задает значение по умолчанию в виде текста SQL. Пустая строка очищает его. |
erd_change_column_comment | tableId, columnId, value | Задает комментарий. Пустая строка очищает его. |
erd_set_column_primary_key | tableId, columnId, value | true включает столбец в первичный ключ, false исключает его оттуда. |
erd_set_column_unique | tableId, columnId, value | Определяет, уникален ли столбец. |
erd_set_column_not_null | tableId, columnId, value | Определяет, является ли столбец NOT NULL. |
erd_set_column_auto_increment | tableId, columnId, value | Определяет, является ли столбец автоинкрементным. |
erd_move_column | tableId, columnId, targetColumnId | Перемещает столбец внутри его таблицы на место другого столбца. |
Связи
relationshipType — кардинальность на дочернем конце линии связи: ZeroOne, ZeroN, OneOnly или OneN.
Начальная таблица — родительская, т. е. целевая сторона, которая содержит первичный ключ, а конечная таблица — дочерняя.
onDelete и onUpdate — действия ON DELETE и ON UPDATE внешнего ключа: none, noAction, cascade, setNull, setDefault или restrict.
Значение none не добавляет никакого предложения, поэтому действует поведение базы данных по умолчанию — см. ON DELETE и ON UPDATE.
Действие, не указанное в вызове erd_add_relationship или erd_link_columns, равно none.
| Инструмент | Аргументы | Что делает |
|---|---|---|
erd_add_relationship | startTableId, endTableId, relationshipType, onDelete?, onUpdate? | Связывает две таблицы. Копирует первичный ключ родительской таблицы в дочернюю как столбцы внешнего ключа, а если у родительской таблицы его нет, сначала создает столбец первичного ключа. Каждый столбец внешнего ключа получает имя так же, как при рисовании связи в редакторе: ключ id таблицы users дает users_id, а такой ключ, как member_id, сохраняет свое имя — см. Имена столбцов внешнего ключа. Каждый из них копирует тип данных своего ключа, за исключением того, что ключ типа serial дает целочисленный тип, который он хранит, например integer для serial4, а простой serial остается serial во всех базах данных, кроме PostgreSQL, MySQL и MariaDB, — см. Идентифицирующие связи. createdIds содержит новый столбец ключа, если он был создан, столбцы внешнего ключа и последним — идентификатор связи. |
erd_link_columns | startTableId, startColumnIds, endTableId, endColumnIds, relationshipType, onDelete?, onUpdate? | Рисует связь между уже существующими столбцами, составляя пары из начальных и конечных столбцов по их позициям. Не переименовывает ни одного столбца и не меняет ни одного типа данных. |
erd_remove_relationship | relationshipId | Удаляет линию связи. Ее столбцы внешнего ключа остаются в таблице. |
erd_change_relationship_type | relationshipId, relationshipType | Меняет кардинальность связи. |
erd_change_relationship_on_delete | relationshipId, onDelete | Задает действие ON DELETE связи: что происходит с дочерними строками при удалении родительской строки. |
erd_change_relationship_on_update | relationshipId, onUpdate | Задает действие ON UPDATE связи: что происходит с дочерними строками при изменении родительского ключа. |
erd_add_relationship дает имена столбцам внешнего ключа в момент выполнения, поэтому сначала задайте имена родительской таблицы и ее первичного ключа.
Ни один инструмент не меняет столбцы существующей связи так, как это делает окно «Сопоставить столбцы» редактора.
Чтобы сопоставить связь с другими столбцами, выполните erd_remove_relationship, который оставляет ее столбцы внешнего ключа в таблице, и erd_link_columns с нужными столбцами в одном вызове erd_batch, который отменяется одним вызовом erd_undo.
Индексы
Идентификатор столбца индекса — это запись из списка столбцов индекса в ответе erd_get, а не идентификатор столбца таблицы.
| Инструмент | Аргументы | Что делает |
|---|---|---|
erd_add_index | tableId | Добавляет в таблицу пустой индекс и возвращает его идентификатор в createdIds. |
erd_remove_index | indexId | Удаляет индекс. |
erd_change_index_name | indexId, value | Переименовывает индекс. |
erd_set_index_unique | indexId, value | Определяет, уникален ли индекс. |
erd_add_index_column | indexId, columnId | Добавляет в индекс столбец его таблицы и возвращает идентификатор нового столбца индекса. Столбец, который уже есть в индексе, остается без изменений. |
erd_remove_index_column | indexId, indexColumnId | Удаляет один столбец из индекса. |
erd_move_index_column | indexId, indexColumnId, targetIndexColumnId | Перемещает столбец внутри индекса на место другого его столбца. |
erd_set_index_column_order | indexId, indexColumnId, orderType | Задает порядок сортировки одного столбца в индексе: ASC или DESC. |
Заметки
| Инструмент | Аргументы | Что делает |
|---|---|---|
erd_add_memo | Добавляет пустую заметку на свободное место и возвращает ее идентификатор в createdIds. | |
erd_remove_memo | memoId | Удаляет заметку. |
erd_change_memo_value | memoId, value | Заменяет текст заметки. |
erd_change_memo_color | memoId, color | Задает цвет заметки. |
erd_move_memo | memoId, x, y | Перемещает заметку в указанное положение на холсте. |
erd_resize_memo | memoId, width, height | Изменяет размер заметки. Ширина должна быть не меньше примерно 116 пикселей, а высота — не меньше 100. Не создает шага отмены, так как редактор записывает изменение размера заметки только при перетаскивании. |
Пока заметки скрыты через View Option → Memos, erd_add_memo все равно добавляет заметку, и она остается скрытой, пока заметки снова не будут показаны.
erd_list и erd_get выводят и скрытые заметки.
Группы таблиц
Группа таблиц — это именованная рамка, нарисованная позади ее таблиц, а ее цвет отображается на рамке и по всей ширине заголовков ее таблиц — см. Группы таблиц.
Таблица входит не более чем в одну группу. erd_move_table, erd_move_tables и erd_move_table_group никогда не меняют состав группы, куда бы они ни поместили таблицу, тогда как в редакторе таблица входит в группу или выходит из нее в зависимости от того, где ее отпустили, — см. Добавление и исключение таблиц. erd_add_table_group и erd_set_table_group помещают таблицы в группу, а после erd_remove_table_group ее таблицы не входят ни в одну группу.
Группа хранит прямоугольник шириной не менее 160 пикселей и высотой не менее 100 с учетом строки заголовка, а редактор рисует рамку, увеличенную так, чтобы вместить каждую из ее таблиц.
| Инструмент | Аргументы | Что делает |
|---|---|---|
erd_add_table_group | name, color?, x?, y?, width?, height?, tableIds? | Добавляет группу и возвращает ее идентификатор в createdIds. Передайте либо tableIds, либо прямоугольник — x, y, width и height вместе. С аргументом tableIds каждая таблица покидает группу, в которой была, а прямоугольник подгоняется по таблицам так же, как при группировке выделенных таблиц. Прямоугольник захватывает каждую таблицу без группы, центр которой лежит внутри него, как и при рисовании группы. Пустое значение name оставляет группу без имени. Один вызов erd_undo удаляет группу и возвращает каждую таблицу в группу, в которой она была. |
erd_remove_table_group | groupId | Удаляет группу. Ее таблицы остаются на месте, не входя ни в одну группу. |
erd_change_table_group_name | groupId, value | Переименовывает группу. Пустая строка оставляет ее без имени. |
erd_change_table_group_color | groupId, color | Задает цвет группы. |
erd_move_table_group | groupId, x, y | Перемещает группу так, чтобы ее прямоугольник начинался в этой точке, и сдвигает ее таблицы на то же расстояние, так же как при перетаскивании ее строки заголовка. Перемещение меньше чем на 20 пикселей по горизонтали и вертикали в сумме не создает шага отмены. |
erd_resize_table_group | groupId, x?, y?, width, height | Задает прямоугольник группы, оставляя ее таблицы на месте. Если x и y не указаны, угол группы сохраняется. Прямоугольник, который не вместил бы таблицы группы с их отступами, отклоняется с сообщением, в котором указана область, которую он должен вмещать. |
erd_set_table_group | tableIds, groupId | Помещает таблицы в группу, и каждая таблица покидает группу, в которой была. Значение groupId, равное null или пустой строке, исключает их из всех групп. |
Пока группы скрыты через View Option → Table Groups, эти инструменты все равно добавляют и изменяют группы, которые остаются скрытыми, пока группы не будут показаны, — см. Скрытие групп.
erd_sort_tables сохраняет таблицы каждой группы вместе, erd_import_dbml и erd_import_json переносят группы — см. Импорт, — а erd_read с аргументом groupNames выдает DDL выбранных групп.
Версия ERD Editor, вышедшая до появления групп таблиц, при сохранении файла удаляет из него группы, как это делают расширение VS Code до версии 4.0.0 и плагины для Obsidian и JetBrains до версии 1.0.0, — см. Обновление.
Настройки
Агент задает настройки самой схемы: базу данных, ее имя и скрипты Схемы SQL.
Все остальные настройки, которые хранит документ, пользователь задает в редакторе: переключатели Параметров вида, параметры вкладки «Настройки», язык и стили имен Генератора кода, тип кавычек и блокировки.
Ни один инструмент их не меняет, кроме импорта в режиме replace: erd_import_json переносит настройки и блокировки загружаемого документа, а остальные четыре инструмента возвращают вид в начало холста — см. Импорт.
В сервере версии 1.0.0 удалены инструменты, которые их задавали: erd_set_language, erd_set_table_name_case, erd_set_column_name_case, erd_set_bracket_type, erd_set_relationship_data_type_sync, erd_set_relationship_optimization, erd_set_column_order, erd_set_max_width_comment, erd_set_ignore_save_settings и erd_set_show.
erd_list и формат snapshot инструмента erd_read сообщают настройки в том виде, в каком их сохраняет файл, а lockSettings содержит по одному флагу на каждую блокировку: viewport, canvasType, language, tableNameCase, columnNameCase и bracketType.
Для заблокированного языка, стиля имен или типа кавычек сообщается заблокированное значение — то, которое хранит файл и с которым открывается любой редактор, что бы ни отображалось на экране редактора. Вид и вкладка не сообщаются.
erd_set_ddl_script создает шаг отмены. erd_set_database и erd_set_database_name его не создают, поэтому erd_undo не может их отменить.
| Инструмент | Аргументы | Что делает |
|---|---|---|
erd_set_database | value | Задает базу данных: MariaDB, MSSQL, MySQL, Oracle, PostgreSQL, SQLite, Databricks или Snowflake. От нее зависят типы данных базы данных и DDL, который выдает erd_read, если vendor не указан. |
erd_set_database_name | value | Задает имя базы данных, которое указывают заголовки use и createAndUse инструмента erd_read. |
erd_set_ddl_script | position, sql | Задает один из двух скриптов, которые записываются вокруг таблиц, — см. Скрипты перед таблицами и после них. position — это before, скрипт перед таблицами, например CREATE EXTENSION или CREATE SCHEMA, или after, скрипт после них, например GRANT или CREATE VIEW. sql заменяет весь скрипт (не более 10 000 символов), а пустая строка удаляет его. Сначала прочитайте текущий скрипт с помощью формата scripts инструмента erd_read. |
Скрипт попадает в DDL любой базы данных как есть, поэтому пишите его для базы данных документа. Для MSSQL после скрипта, последняя строка которого не GO, добавляется строка GO.
Версия ERD Editor, вышедшая до появления этих скриптов, при сохранении файла удаляет из него скрипты, как это делают расширение VS Code до версии 4.0.0 и плагины для Obsidian и JetBrains до версии 1.0.0, — см. Обновление.
Импорт
Эти инструменты читают схему так же, как это делает меню «Импорт» редактора, — см. Импорт и экспорт файлов.
Каждый из них принимает текст в аргументе value и аргумент mode: replace (по умолчанию) или append.
| Инструмент | Аргументы | Что делает |
|---|---|---|
erd_import_sql | value, mode? | Загружает SQL DDL — операторы CREATE TABLE и подобные им. |
erd_import_graphql | value, mode? | Загружает GraphQL SDL. |
erd_import_dbml | value, mode? | Загружает DBML. Каждый блок TableGroup становится группой из перечисленных в нем таблиц — см. DBML. |
erd_import_aml | value, mode? | Загружает AML. |
erd_import_json | value, mode? | Загружает JSON-документ erd-editor, например другой файл .erd.json. |
Режим replace заменяет документ, а erd_undo восстанавливает предыдущий:
erd_import_sql,erd_import_graphql,erd_import_dbmlиerd_import_amlзаменяют все таблицы, связи, индексы, заметки и группы таблиц. Они сохраняют настройки документа, включая блокировки, кроме вида, который возвращается в начало холста с масштабом 100%.erd_import_jsonзаменяет весь документ, включая настройки: настройки и блокировки из JSON занимают место настроек этого документа, а JSON, в котором не записаны блокировки, включает все блокировки и ставит вид в начало холста. Чтобы сохранить настройки этого документа, возьмите за основу текст, который выдает форматjsonинструментаerd_read. Пустой текст дает новый документ, такой же, какой создаетerd_open_documentс аргументомcreate.
Режим append добавляет импортированное в документ, как и Импорт с добавлением в редакторе, а один вызов erd_undo убирает все добавленное:
- Содержимое текста появляется в виде новых сущностей с новыми идентификаторами — блоком ниже всего, что есть в документе, включая скрытые заметки и группы таблиц, с выравниванием по его левому краю. Все уже имеющиеся таблицы и настройки остаются, в том числе таблица с тем же именем: по имени ничего не объединяется.
- Связи и индексы переносятся только между таблицами, которые приносит импорт, поэтому внешний ключ к таблице, которую текст не объявляет, отбрасывается.
erd_import_sql,erd_import_graphqlиerd_import_amlдобавляют таблицы с их связями и индексами, аerd_import_dbml— еще и свои группы таблиц.erd_import_jsonдобавляет таблицы, связи, индексы, заметки и группы таблиц, но никогда — свои настройки, а пустой текст отклоняет.
JSON-документ сохраняет собственное размещение, включая группы таблиц: в режиме replace таблицы стоят там, где их располагает документ, а в режиме append — так же, но внутри добавленного блока.
Таблицы из SQL, GraphQL, DBML и AML расставляются рядами, начиная с таблиц с наименьшим числом столбцов, причем таблицы каждой группы остаются вместе, так же как их расставляет erd_sort_tables, и никогда не способом Flow, которым их по возможности размещает Импорт в самом редакторе. Эти четыре инструмента отклоняют пустой текст в любом режиме.
erd_batch
erd_batch выполняет несколько инструментов редактирования по порядку как одну правку — все или ни одного.
operationsсодержит до 100 записей вида{ tool, as?, args? }, гдеargs— аргументы инструмента безpath.- Сначала операции пробно выполняются на копии документа. Отклоненная операция указывается, например
operations[1] erd_remove_table: …, и ничего не применяется. - Один вызов
erd_undoотменяет весь пакет, кроме операций, которые он не может отменить и которые называет полеundoNoteрезультата: это операции инструментов, не создающих шага отмены, напримерerd_set_database, и операции, изменившие документ без создания шага отмены, например короткое перемещениеerd_move_table_group. Пакет, который вообще не создал шага отмены,erd_undoпропускает. ПолеhistoryEntriesв результате считает записи в истории редактора внутри пакета, а не вызовыerd_undo. - В режиме Live редактор принимает либо весь пакет, либо ничего из него.
Агент не может знать идентификаторы, которые создаст пакет, до вызова, поэтому операция, названная с помощью as, позволяет последующей операции ссылаться на них: $name или $name.0 — на ее первый созданный идентификатор, $name.1 — на второй, а $name.last — на последний.
Имя состоит из букв ASCII, цифр и знаков подчеркивания, не начинается с цифры и обозначает только одну операцию.
Ссылка разрешается только там, где аргумент принимает идентификатор сущности, поэтому имя или комментарий со значением $x остается текстом.
Таблица со столбцами и связью в одном вызове:
{
"path": "shop.erd.json",
"operations": [
{ "tool": "erd_add_table", "as": "users" },
{ "tool": "erd_change_table_name", "args": { "tableId": "$users", "value": "users" } },
{ "tool": "erd_add_column", "as": "uid", "args": { "tableId": "$users" } },
{ "tool": "erd_change_column_name", "args": { "tableId": "$users", "columnId": "$uid", "value": "id" } },
{ "tool": "erd_change_column_data_type", "args": { "tableId": "$users", "columnId": "$uid", "value": "BIGINT" } },
{ "tool": "erd_set_column_primary_key", "args": { "tableId": "$users", "columnId": "$uid", "value": true } },
{ "tool": "erd_add_table", "as": "orders" },
{ "tool": "erd_change_table_name", "args": { "tableId": "$orders", "value": "orders" } },
{ "tool": "erd_add_relationship", "args": { "startTableId": "$users", "endTableId": "$orders", "relationshipType": "ZeroN", "onDelete": "cascade" } }
]
}
Таблица users и ее ключ id получают имена до создания связи, поэтому связь добавляет в orders столбец внешнего ключа с именем users_id.
Результаты
Правка возвращает одну строку JSON:
{"tool":"erd_add_table","mode":"live","createdIds":["03h17be2plxpj5n59tqag7ogj"],"batches":1,"historyEntries":1}
| Поле | Значение |
|---|---|
mode | live или headless — см. Режимы Live и Headless. |
createdIds | Идентификаторы всего, что создал вызов, по порядку. |
batches, historyEntries | Сколько пакетов изменений отправил вызов и сколько записей в истории редактора он создал. |
undoable, undoNote | Поле undoable равно false, когда erd_undo пропустит вызов, а undoNote объясняет причину: инструмент не создает шага отмены, вызов изменил документ без создания шага отмены, как при перемещении erd_move_table_group меньше чем на 20 пикселей, или в документе уже было это значение. Результат erd_batch всегда содержит undoNote. Если пакет создал шаг отмены, в примечании сказано, что один вызов erd_undo отменяет пакет, и названы операции, которые он оставляет как есть; если не создал, результат содержит undoable: false, а в примечании сказано, что erd_undo его пропускает. |
mismatch | Присутствует, если вызов создал другое число пакетов или записей в истории, чем объявляет инструмент. |
notes | Присутствует, если в сеансе что-то изменилось, например редактор завершил работу или перестал обслуживать документ либо файл изменился на диске. |
Отказ — это результат с ошибкой, содержащий код и сообщение о том, что делать:
{"error":{"code":"notFound","message":"tableId nope names no live table; read the document for current ids"}}
code | Причина |
|---|---|
notFound | Идентификатору не соответствует ни одна существующая сущность, или файла не существует. |
invalidArgs | Аргумент отсутствует или имеет неверное значение. |
invalidPath | Путь не указывает на ERD-документ. В Windows — также путь с именем, которое Windows не сохраняет в том виде, в каком оно написано, или путь, ведущий к документу, который числится в редакторе под другим путем, указанным в сообщении. |
invalidDocument | Файл не является документом, который может прочитать редактор. |
tooLarge | Результат чтения не помещается в один ответ. |
blocked | Документ находится в редакторе с выключенным хабом. В сообщении сказано, как его включить: в VS Code отметьте рабочую область как доверенную и включите dineug.erd-editor.agentHub.enabled или перезагрузите окно; в Obsidian включите параметр Coding agents или перезагрузите Obsidian; в IDE JetBrains включите параметр Coding agents или, если он уже включен, перезапустите IDE. |
hubDisabled | Документ находится в IDE JetBrains только в проекте, которому она не доверяет. Чтение по-прежнему работает; отметьте проект как доверенный, чтобы агент мог вносить правки. |
conflict | Файл изменился на диске во время вызова. Ничего не записано. |
hubAppeared, hubGone | Редактор начал обслуживать документ, который агент редактировал на диске, или редактор, обслуживавший его, все еще работает, но его файл блокировки и соединение пропали. Ничего не записано. |
notSaved | Инструменту erd_save не удалось сохранить документ редактора. |
readonly | Документ находится в редакторе в режиме только для чтения, например файл, в который редактор не может записывать или который не может прочитать как диаграмму. Если редактора нет, сам файл доступен только для чтения, например файл Perforce или TFVC, который не извлечен для редактирования. Ничего не записано. |
protocolMismatch | Расширение или плагин ERD Editor в редакторе и сервер используют разные версии протокола, например сервер версии 1.0.0 с расширением VS Code версии 3.x. Чтение тоже отклоняется, а в сообщении указано, какую сторону нужно обновить, — см. Обновление. |
hubUnreachable, timeout, disconnected | Хаб редактора не принял соединение, не ответил в течение 30 секунд или разорвал соединение во время вызова. В Windows код hubUnreachable также означает, что система Windows не допустила агента к хабу: редактор работает с более высокими правами, чем агент, например запущен от имени администратора, а агент — нет, либо агент работает в песочнице. |
Другие коды встречаются реже, и каждый отказ содержит сообщение о том, что произошло.
Инструменты редактирования, erd_batch и три инструмента чтения отклоняют необъявленный аргумент или аргумент неверного типа с ошибкой JSON-RPC invalid params (-32602) еще до обращения к документу, поэтому аргумент с опечаткой никогда не отбрасывается молча.
Пять инструментов сеанса игнорируют неизвестные им аргументы.