Перейти до основного вмісту

Інструменти

Сервер надає 77 інструментів: п’ять інструментів сеансу, чотири інструменти читання, 67 інструментів редагування, по одному на кожну операцію редагування, і erd_batch, який виконує кілька інструментів редагування як одну зміну.

Кожен інструмент, крім erd_list_documents, приймає першим аргументом path документа, і в таблицях нижче його пропущено. Аргумент, позначений ?, необов’язковий.

Інструменти сеансу​

ІнструментАргументиЩо робить
erd_list_documentsПерелічує ERD-документи з полями path, open, active, dirty і readonly: документи редактора, який обслуговує робочий каталог (в IDE від JetBrains це охоплює всі відкриті проєкти), а інакше — ERD-файли в межах робочого каталогу.
erd_open_documentcreate?Відкриває документ для редагування в ERD Editor того редактора, який його обслуговує, якщо такий є. З аргументом create спершу створює файл, якщо його немає, а до назви без розширення додається .erd.json.
erd_saveЗберігає документ, який тримає редактор. VS Code залишає зміни агента незбереженими, доки не викликано цей інструмент; Obsidian та IDE від JetBrains зберігають їх так само, як і ваші, а цей інструмент записує їх одразу. У режимі Headless кожна зміна вже записана, про що свідчить saved: true у її результаті, і цей інструмент нічого не робить.
erd_undoВідміняє останню зміну, зроблену цим агентом, і ніколи — вашу. Виклики, що не створили кроку відміни, він пропускає й називає.
erd_redoПовторно застосовує зміну, яку останньою відмінив erd_undo.

Про те, що роблять збереження й відміна в кожному режимі, див. режими Live і Headless.

Читання документа​

ІнструментАргументиЩо робить
erd_listquery?, offset?, limit?, namesOnly?Налаштування й лічильники, потім сторінка таблиць з їхніми індексами та зв’язками; кожна таблиця подається з ідентифікатором, положенням і розміром на полотні, кількістю стовпців, логічною назвою, якщо вона є, і групою таблиць, якщо вона входить до групи. Якщо це не пошук, після таблиць ідуть групи таблиць, нотатки, а потім домени, терміни й слова.
erd_gettableIds?, tableNames?, relationshipIds?, indexIds?, memoIds?, tableGroupIds?, wordIds?, termIds?, domainIds?Названі сутності повністю: таблиці з їхніми стовпцями та групою таблиць, зв’язки з їхніми стовпцями та значеннями onDelete і onUpdate, індекси з їхніми стовпцями, нотатки з їхнім текстом, групи таблиць з їхніми таблицями, а також слова, терміни й домени з усіма полями.
erd_readformat, vendor?, statements?, header?, logicalNameAsComment?, tableIds?, tableNames?, groupNames?Увесь документ одразу в одному з чотирьох форматів або DDL лише деяких таблиць чи груп таблиць.
erd_list_checkslevel?, tableIds?, tableNames?, offset?, limit?Проблеми, які виявляють словники слів, термінів і доменів, у тому вигляді, у якому їх перелічує аркуш Checks на вкладці словника редактора, посторінково. Він нічого не змінює — див. перевірки словника.

Агент знаходить ідентифікатори за допомогою erd_list, читає стовпці, рядки словників та інші подробиці за допомогою erd_get і передає ці ідентифікатори інструментам редагування. Розмір таблиці в erd_list — це прямокутник, який вона займає на полотні: висота точна, ширина приблизна. Група таблиць подається прямокутником, який вона зберігає, разом із назвою, кольором і кількістю таблиць у ній. Кожен зв’язок подається один раз, разом з однією з двох його таблиць. Рядок словника подається ідентифікатором, значенням name і тим, що він дає фізичній назві чи стовпцю: dataType домену, physicalName і domainId терміна та abbreviation слова. Кожен словник подає свої рядки в тому порядку, у якому їх показує його аркуш. Інструменти erd_list і erd_read повідомляють ті налаштування, які зберігає файл, — див. налаштування.

В erd_get і форматі snapshot інструмента erd_read кожна таблиця й кожен стовпець мають logicalName (порожній рядок, якщо логічної назви немає) і nameDerived, що має значення true, поки назву дали словники, тож нова логічна назва сформує її знову, — див. словники. Кожен стовпець має domainId, як і кожен термін: порожній рядок, якщо домену немає або якщо це домен, якого вже немає в документі.

erd_read приймає один із чотирьох форматів:

formatЩо повертає
snapshotКомпактний JSON з усіма сутностями та їхніми ідентифікаторами, включно з групами таблиць та рядками слів, термінів і доменів, а також налаштуваннями разом зі скриптами схеми SQL. Він пропускає те, що в різних користувачів різне: виміряні ширини, порядок накладання, область перегляду, вкладку й відображення назв. Для великої схеми він великий.
sqlDDL для однієї з восьми баз даних: 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":"…"}, кожен порожній, якщо його не задано, хоч би якою великою була схема.

Лише формат sql приймає vendor, statements, header, logicalNameAsComment, tableIds, tableNames і groupNames, а будь-який інший формат їх відхиляє.

  • statements: create, типове значення; ifNotExists, яке записує CREATE TABLE IF NOT EXISTS для MySQL, MariaDB, PostgreSQL, SQLite і Databricks та звичайний CREATE TABLE для решти; або recreate, яке видаляє таблиці перед їх створенням, а для Snowflake натомість записує CREATE OR REPLACE TABLE.
  • header: none, типове значення; use, яке вибирає базу даних або схему, задану назвою бази даних документа; або createAndUse, яке спершу її створює. В Oracle є лише use, тому createAndUse записує там use, а в PostgreSQL є лише createAndUse, тому use там заголовка не записує. Для SQLite заголовок не записується, як і для будь-якої бази даних, поки назва бази даних порожня або не є простим ідентифікатором.
  • logicalNameAsComment: true записує логічну назву таблиці чи стовпця як коментар, поки коментар порожній або складається лише з пробілів, — там, де кожна база даних записує коментарі, і в тій формі, у якій вона це робить, — і зберігає кожен коментар із текстом; false, типове значення, не записує логічної назви — див. логічні назви як коментарі.
  • groupNames: таблиці груп таблиць, заданих назвами в будь-якому регістрі, разом із таблицями з tableIds і tableNames. Назва, яка не збігається з жодною групою, відхиляється з кодом notFound. Група без таблиць не додає жодної таблиці, а читання, у якому зовсім не залишилося таблиць, як-от коли всі названі групи порожні й жодної таблиці не названо, відхиляється з кодом invalidArgs.

statements, header і logicalNameAsComment застосовуються й до DDL деяких таблиць. Вони працюють так само, як параметри Statements і Header та перемикач Write logical names into empty comments на вкладці схеми SQL редактора, хоча на вкладці початково вибрано If not exists і CREATE + USE. Перемикач початково вимкнено, так само як і logicalNameAsComment. Назви беруться в лапки того типу, який зберігає файл, тобто заблокованого, поки 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_list посторінково виводить їхні рядки після таблиць, а erd_get повертає рядки повністю за domainIds, termIds і wordIds.
  • erd_get наводить ідентифікатори й назви, які нічого не позначають, у полі missing, а ідентифікатори, для яких не вистачило місця в одній відповіді, — у полі notReturned, щоб їх можна було запитати знову.
  • erd_list_checks так само відповідає посторінково — див. перевірки словника.
  • Читання, завелике для однієї відповіді, відхиляється з кодом tooLarge і поясненням, як його звузити.

Перевірки словника​

erd_list_checks перелічує перевірки аркуша перевірок редактора в тому самому порядку: спершу перевірки слів, потім термінів і доменів — кожного словника в тому порядку, у якому рядки показує його аркуш, — а потім кожної таблиці, після якої йдуть її стовпці. Як і на аркуші, перевірка виконується лише тоді, коли словник, який вона читає, містить хоча б один рядок. Документ, словники якого не містять жодного слова, терміна чи домену, взагалі не перевіряється: total дорівнює 0, і про це повідомляє note.

  • level: error або warning — лише для цього рівня; за замовчуванням обидва.
  • tableIds і tableNames: лише перевірки цих таблиць та їхніх стовпців (назви — у будь-якому регістрі), без власних рядків словників. Ідентифікатор чи назва, які не позначають жодної таблиці, відхиляються з кодом notFound.
  • offset і limit: за замовчуванням сторінка зі 100 перевірок, яка також закінчується там, де заповнюється одна відповідь. Поки є наступні, nextOffset і note повідомляють, де починається наступна сторінка; передайте це значення як offset з тими самими фільтрами. Виправивши частину перевірок, перелічіть їх знову від зсуву 0: виправлена перевірка зникає зі списку, тож пізніший зсув пропустив би ще не виправлені перевірки.

Відповідь містить total — скільки перевірок залишають фільтри; counts — скільки з них припадає на кожен код, без кодів, на які не припадає жодної; і саму сторінку як checks. Кожна перевірка повідомляє свої level і code, а також kind і id свого об’єкта: table, column, word, term або domain. Перевірка стовпця додає його tableId і назву його таблиці як table. name — це назва об’єкта, для таблиці чи стовпця — фізична назва, разом з його logicalName, якщо вона є. field — це те, що читає перевірка: name, logicalName або domainId. text — це те, що вона там знайшла, а suggestions, якщо словники щось пропонують, — те, що слід використати натомість. Тож агент може виправити перевірку без виклику erd_get:

{"level":"warning","code":"physicalNameMismatch","kind":"column","id":"8e1z0q4xk2m7cwd5tfb9h3ynp","tableId":"03h17be2plxpj5n59tqag7ogj","table":"users","name":"id","logicalName":"Member Number","field":"name","text":"id","suggestions":["MBR_NO"]}
codelevelType на аркушіЩо виявляє
duplicateNameerrorDuplicate nameНазва, спільна для двох рядків одного словника. Перелічується кожен із цих рядків.
unknownDomainerrorUnknown domainСтовпець або термін, прив’язаний до домену, якого вже немає в документі. text — назва цього домену або його ідентифікатор, якщо назва невідома.
forbiddenWorderrorForbidden wordСлово, яке якесь слово словника перелічує як заборонене, у логічній назві таблиці чи стовпця або в назві терміна. suggestions — стандартні слова.
unregisteredWordwarningUnregistered wordТекст, якого не перелічує жодне слово, у тих самих місцях.
synonymWordwarningSynonymСинонім, ужитий замість стандартного слова, у тих самих місцях. suggestions — стандартні слова.
physicalNameMismatchwarningPhysical name mismatchФізична назва таблиці чи стовпця, що відрізняється від тієї, яку дає термін її логічної назви. Пропозиція — фізична назва терміна або та, яку складають його слова, поки термін її не містить.
domainTypeMismatchwarningDomain type mismatchСтовпець, тип даних якого відрізняється від типу домену, до якого він прив’язаний. text — тип стовпця, а пропозиція — тип домену.

Як кожна перевірка читає назву, описано в розділі що виявляє кожна перевірка.

Інструменти редагування​

Ідентифікатори беруться з erd_list і erd_get або з createdIds виклику, який створив сутність. Новий ідентифікатор складається з 25 малих літер і цифр, як-от 03h17be2plxpj5n59tqag7ogj, а ідентифікатор, який уже є в документі, зберігає свою форму, тож не робіть жодних висновків із вигляду ідентифікатора. x і y — це лівий і верхній краї на полотні в пікселях, а колір — це шістнадцятковий колір CSS, як-от #3b82f6, або порожній рядок, який прибирає колір.

Таблиці​

ІнструментАргументиЩо робить
erd_add_tableДодає порожню таблицю у вільному місці й повертає її ідентифікатор у createdIds.
erd_remove_tabletableIdВидаляє таблицю разом з її стовпцями, індексами та всіма зв’язками, що її стосуються.
erd_change_table_nametableId, valueПерейменовує таблицю. Після цього назва вважається заданою вручну, тож пізніша логічна назва залишає її без змін, поки вона не порожня, — див. словники.
erd_change_table_commenttableId, valueЗадає коментар таблиці. Порожній рядок очищає його.
erd_set_table_logical_nametableId, valueЗадає логічну назву таблиці. Порожній рядок очищає її й залишає назву. Поки назва таблиці порожня або була сформована, словники формують її з логічної назви — див. словники. Термін не дає таблиці домену.
erd_change_table_colortableId, colorЗадає колір таблиці.
erd_move_tabletableId, x, yПереміщує таблицю в задане місце на полотні.
erd_move_tablespositionsПереміщує кілька таблиць однією зміною, яку відміняє один виклик erd_undo. positions містить { tableId, x, y } для кожної таблиці, кожну таблицю щонайбільше один раз.
erd_sort_tablesРозміщує всі таблиці рядами по полотну, спершу ті, що мають найменше стовпців, так само, як їх розміщують erd_import_sql, erd_import_graphql, erd_import_dbml і erd_import_aml. Таблиці однієї групи залишаються разом, а рамка кожної групи підганяється під них.

Стовпці​

ІнструментАргументиЩо робить
erd_add_columntableIdДодає порожній стовпець до таблиці й повертає його ідентифікатор у createdIds.
erd_remove_columnstableId, columnIdsВидаляє стовпці з однієї таблиці разом зі зв’язками та записами індексів, які їх використовують.
erd_change_column_nametableId, columnId, valueПерейменовує стовпець. Після цього назва вважається заданою вручну, як і назва таблиці.
erd_change_column_data_typetableId, columnId, valueЗадає тип даних, як-от INT або VARCHAR(255). Поки синхронізація типів даних у зв’язках увімкнена, зміна поширюється зв’язками в обидва боки, як і в редакторі: тип serial доходить до зовнішніх ключів як цілочисловий тип, який він зберігає, так само, як його копіює erd_add_relationship, а ключ типу serial зберігає свій тип, коли змінюється один з його зовнішніх ключів, і на цьому зміна зупиняється. Вмикати чи вимикати синхронізацію вирішує користувач, а erd_list повідомляє її як relationshipDataTypeSync. Стовпець, прив’язаний до домену, відв’язується від нього, коли йому задають тип, відмінний від типу домену, як і кожен стовпець, до якого доходить синхронізація і новий тип якого відрізняється від типу його власного домену, — див. відв’язування.
erd_change_column_defaulttableId, columnId, valueЗадає типове значення у вигляді тексту SQL. Порожній рядок очищає його.
erd_change_column_commenttableId, columnId, valueЗадає коментар. Порожній рядок очищає його.
erd_set_column_logical_nametableId, columnId, valueЗадає логічну назву стовпця. Порожній рядок очищає її й залишає назву. Поки назва стовпця порожня або була сформована, словники формують її, а стовпець прив’язується до домену терміна й отримує тип даних домену — див. словники.
erd_set_column_domaintableId, columnId, domainId?, domainName?Прив’язує стовпець до домену, заданого ідентифікатором або назвою — одним із двох. Стовпець отримує тип даних домену, який поширюється зв’язками, поки ввімкнено синхронізацію типів даних у зв’язках, з тим самим відв’язуванням, що й у erd_change_column_data_type. domainId зі значенням null або порожнім рядком чи порожнє значення domainName відв’язує стовпець від домену й зберігає його тип.
erd_set_column_primary_keytableId, columnId, valuetrue робить стовпець частиною первинного ключа, false вилучає його звідти.
erd_set_column_uniquetableId, columnId, valueЗадає, чи є стовпець унікальним.
erd_set_column_not_nulltableId, columnId, valueЗадає, чи є стовпець NOT NULL.
erd_set_column_auto_incrementtableId, columnId, valueЗадає, чи має стовпець автоінкремент.
erd_move_columntableId, 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_relationshipstartTableId, endTableId, relationshipType, onDelete?, onUpdate?Зв’язує дві таблиці. Копіює первинний ключ батьківської таблиці в дочірню як стовпці зовнішнього ключа, спершу створюючи стовпець первинного ключа, якщо в батьківській таблиці його немає. Кожен стовпець зовнішнього ключа отримує назву так само, як під час малювання зв’язку в редакторі: ключ id таблиці users дає users_id, а ключ, як-от member_id, зберігає свою назву — див. назви стовпців зовнішнього ключа. Кожен копіює тип даних свого ключа, але ключ типу serial дає цілочисловий тип, який він зберігає, як-от integer для serial4, а простий serial залишається serial в усіх базах даних, крім PostgreSQL, MySQL і MariaDB, — див. ідентифікувальні зв’язки. Кожен також бере логічну назву свого ключа й прив’язується до домену, до якого прив’язаний його ключ, якщо тільки ключ типу serial не дає йому іншого типу. createdIds містить новий стовпець ключа, якщо його було створено, стовпці зовнішнього ключа, а останнім — ідентифікатор зв’язку.
erd_link_columnsstartTableId, startColumnIds, endTableId, endColumnIds, relationshipType, onDelete?, onUpdate?Проводить зв’язок між наявними стовпцями, утворюючи пари з початкових і кінцевих стовпців за їхнім положенням. Він не перейменовує жодного стовпця, не змінює жодного типу даних і не копіює ні логічної назви, ні домену.
erd_remove_relationshiprelationshipIdВидаляє лінію зв’язку. Стовпці зовнішнього ключа зв’язку залишаються в таблиці.
erd_change_relationship_typerelationshipId, relationshipTypeЗмінює кардинальність зв’язку.
erd_change_relationship_on_deleterelationshipId, onDeleteЗадає дію ON DELETE зв’язку: що відбувається з дочірніми рядками, коли видаляють батьківський рядок.
erd_change_relationship_on_updaterelationshipId, onUpdateЗадає дію ON UPDATE зв’язку: що відбувається з дочірніми рядками, коли змінюють батьківський ключ.

erd_add_relationship дає назви стовпцям зовнішнього ключа й копіює логічні назви їхніх ключів під час виконання. Пізніше перейменування ключа чи його логічна назва до них не доходять, тож спершу задайте назви батьківській таблиці та її первинному ключу, а ключу — його логічну назву. Назви, які він дає, вважаються заданими вручну, тож пізніша логічна назва залишає їх без змін, тоді як erd_derive_physical_names знову віддає їх словникам — див. словники.

Жоден інструмент не змінює стовпці наявного зв’язку так, як це робить зіставлення стовпців у редакторі. Щоб зіставити зв’язок з іншими стовпцями, виконайте erd_remove_relationship, який залишає його стовпці зовнішнього ключа в таблиці, і erd_link_columns з потрібними стовпцями в одному erd_batch, який відміняє один виклик erd_undo.

Індекси​

Ідентифікатор стовпця індексу — це запис у списку стовпців індексу, який повертає erd_get, а не ідентифікатор стовпця таблиці.

ІнструментАргументиЩо робить
erd_add_indextableIdДодає порожній індекс до таблиці й повертає його ідентифікатор у createdIds.
erd_remove_indexindexIdВидаляє індекс.
erd_change_index_nameindexId, valueПерейменовує індекс.
erd_set_index_uniqueindexId, valueЗадає, чи є індекс унікальним.
erd_add_index_columnindexId, columnIdДодає стовпець таблиці індексу й повертає ідентифікатор нового стовпця індексу. Стовпець, який уже є в індексі, залишається без змін.
erd_remove_index_columnindexId, indexColumnIdВидаляє один стовпець з індексу.
erd_move_index_columnindexId, indexColumnId, targetIndexColumnIdПереміщує стовпець у межах індексу на місце іншого його стовпця.
erd_set_index_column_orderindexId, indexColumnId, orderTypeЗадає порядок сортування одного стовпця в індексі, ASC або DESC.

Нотатки​

ІнструментАргументиЩо робить
erd_add_memoДодає порожню нотатку у вільному місці й повертає її ідентифікатор у createdIds.
erd_remove_memomemoIdВидаляє нотатку.
erd_change_memo_valuememoId, valueЗамінює текст нотатки.
erd_change_memo_colormemoId, colorЗадає колір нотатки.
erd_move_memomemoId, x, yПереміщує нотатку в задане місце на полотні.
erd_resize_memomemoId, 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_groupname, color?, x?, y?, width?, height?, tableIds?Додає групу й повертає її ідентифікатор у createdIds. Передайте або tableIds, або прямокутник: x, y, width і height разом. З tableIds кожна таблиця виходить із групи, у якій була, а прямокутник підганяється під них так само, як під час групування виділених таблиць. Прямокутник охоплює кожну таблицю, що не входить до жодної групи й центр якої лежить у ньому, як і під час малювання групи. Порожнє значення name залишає групу без назви. Один виклик erd_undo видаляє групу й повертає кожну таблицю до групи, у якій вона була.
erd_remove_table_groupgroupIdВидаляє групу. Її таблиці залишаються на своїх місцях поза будь-якою групою.
erd_change_table_group_namegroupId, valueПерейменовує групу. Порожній рядок залишає її без назви.
erd_change_table_group_colorgroupId, colorЗадає колір групи.
erd_move_table_groupgroupId, x, yПереміщує групу так, щоб її прямокутник починався в цій точці, і зсуває її таблиці на ту саму відстань, як це робить перетягування смуги заголовка. Переміщення менш ніж на 20 пікселів, якщо скласти зсуви по горизонталі й вертикалі, не створює кроку відміни. Починаючи з версії сервера 1.2.0, переміщення доходить до редактора як точки, в яких закінчуються група та її таблиці, тож із розширенням для VS Code версії 4.3.0 або новішої чи плагіном для Obsidian або JetBrains версії 1.3.0 або новішої переміщення групи чи однієї з її таблиць, зроблене там у той самий момент, закінчується на одному з двох положень, ніколи на їхній сумі — див. зміни в один і той самий момент.
erd_resize_table_groupgroupId, x?, y?, width, heightЗадає прямокутник групи, а її таблиці залишаються на своїх місцях. Якщо x і y не вказано, кут групи зберігається. Прямокутник, який не вмістив би таблиці групи з їхніми відступами, відхиляється з повідомленням, що називає рамку, яку він має вмістити.
erd_set_table_grouptableIds, groupIdДодає таблиці до групи, і кожна з них виходить із групи, у якій була. groupId зі значенням null або порожнім рядком вилучає їх з усіх груп.

Поки групи приховано через View Option → Table Groups, ці інструменти однаково додають і змінюють групи, які залишаються прихованими, доки групи не буде показано, — див. приховування груп. erd_sort_tables тримає таблиці кожної групи разом, erd_import_dbml і erd_import_json імпортують групи — див. імпорт, — а erd_read записує DDL вибраних груп за допомогою groupNames. Випуск ERD Editor, що вийшов раніше, ніж з’явилися групи таблиць, під час збереження файлу відкидає його групи, як це роблять розширення для VS Code до версії 4.0.0 і плагіни для Obsidian та JetBrains до версії 1.0.0, — див. оновлення.

Словники​

Ці інструменти редагують три словники вкладки словника редактора, за якими логічна назва таблиці чи стовпця формує фізичну назву:

  • Слово — це стандартне слово для складання логічних назв разом зі скороченням, яке воно записує у фізичну назву, як-от Member і MBR.
  • Термін — це ціла логічна назва разом із фізичною назвою, яку він дає, а для стовпця — ще й доменом, до якого він його прив’язує, як-от Member Number з MBR_NO та Identifier.
  • Домен — це іменований тип даних, до якого прив’язуються стовпці, як-от Identifier для INT.
ІнструментАргументиЩо робить
erd_add_wordname, abbreviation, englishName?, description?, synonyms?, forbiddenWords?Додає слово в кінець словника слів і повертає його ідентифікатор у createdIds. synonyms і forbiddenWords розділяються комами: це інші написання слова та слова, які не можна вживати замість нього.
erd_update_wordwordId, name?, abbreviation?, englishName?, description?, synonyms?, forbiddenWords?Змінює передані поля, а решту залишає без змін.
erd_remove_wordwordIdВидаляє слово.
erd_add_termname, physicalName?, domainId?, domainName?, description?, synonyms?Додає термін у кінець словника термінів і повертає його ідентифікатор у createdIds. Без physicalName фізичну назву складають слова, якщо можуть, як-от MBR_NO для Member Number.
erd_update_termtermId, name?, physicalName?, domainId?, domainName?, description?, synonyms?Змінює передані поля, а решту залишає без змін. Значення name, передане, поки термін не містить фізичної назви, або разом із порожнім physicalName, також записує фізичну назву, яку складають його слова, якщо вони її складають.
erd_remove_termtermIdВидаляє термін.
erd_add_domainname, category?, dataType, description?Додає домен у кінець словника доменів і повертає його ідентифікатор у createdIds. category групує домени, як-от Number або Text.
erd_update_domaindomainId, name?, category?, dataType?, description?Змінює передані поля, а решту залишає без змін. Нове значення dataType доходить до кожного стовпця, прив’язаного до домену, і поширюється зв’язками, поки ввімкнено синхронізацію типів даних у зв’язках, з тим самим відв’язуванням, що й у erd_change_column_data_type.
erd_remove_domaindomainIdВидаляє домен. Стовпці, прив’язані до нього, зберігають свій тип даних, а вони й терміни, прив’язані до нього, не показують жодного домену: їхній domainId читається як порожній рядок. erd_undo повертає прив’язки, а під час збереження вони не потрапляють до файлу.
erd_derive_physical_namesscope, tableId?, columnId?Повторно формує фізичні назви з логічних назв, як це робить повторне формування фізичних назв у редакторі, для одного стовпця, однієї таблиці або всього документа.
  • Словник містить кожну назву лише один раз, тож назва, яку вже містить інший рядок того самого словника, відхиляється з кодом invalidArgs. Назви порівнюються без початкових і кінцевих пробілів, з урахуванням регістру, тож Member і member — це дві назви.
  • Оновлення називає рядок за ідентифікатором і передає щонайменше одне поле. Значення, які рядок уже містить, нічого не змінюють і не створюють кроку відміни; додавання чи видалення завжди його створює.
  • Домен терміна задається або через domainId (null чи порожній рядок — без домену), або через domainName (порожній рядок — без домену). domainName бере перший домен із такою назвою в порядку словника, порівнюючи назви так само, як описано вище. Передавання обох аргументів або значення domainName, якого не має жоден домен, відхиляється. erd_set_column_domain приймає домен так само.
  • Зміна чи видалення слова або терміна нічого не перейменовує й нічого не відв’язує: назви й домени, які вони дали, залишаються без змін. erd_derive_physical_names повторно формує назви й прив’язує домен, який термін дає тепер, але стовпець, якому тепер не відповідає жоден термін або термін якого не дає домену, зберігає домен, до якого прив’язаний. erd_set_column_domain з порожнім domainId відв’язує його.
  • Жоден інструмент не імпортує й не експортує словник як CSV, не сортує словник і не вставляє рядки в задане місце, як це робить вкладка словника.

erd_list виводить рядки, erd_get повертає всі поля, формат snapshot інструмента erd_read містить їх усі, а erd_list_checks виводить проблеми, які виявляють словники, — див. читання документа.

erd_set_table_logical_name і erd_set_column_logical_name формують фізичну назву так само, як редактор під час введення логічної назви, — див. формування фізичних назв:

  • Назва формується лише тоді, коли вона порожня або сама була сформована, що інструменти читання показують як nameDerived: true. Непорожня назва, задана вручну, залишається, і записується лише логічна назва. erd_change_table_name, erd_change_column_name, імпорт SQL, GraphQL, DBML і AML, а також стовпці зовнішнього ключа, яким дає назви erd_add_relationship, — усі вони задають назви вручну. Назву, перейменовану на порожній рядок, наступна логічна назва формує знову.
  • Першим іде термін, назва якого збігається з логічною назвою, з порівнянням так само, як для назв у словнику. Він дає свою фізичну назву або ту, яку складають його слова, поки він її не містить. Для стовпця також прив’язується домен терміна, навіть коли назва не формується, і стовпець отримує тип даних домену, який поширюється зв’язками, поки ввімкнено синхронізацію типів даних у зв’язках.
  • Якщо такого терміна немає, назву складають слова, скорочення яких з’єднуються підкресленнями: Member Number дає MBR_NO. Тут або все, або нічого: синонім, заборонене слово, текст, якого не перелічує жодне слово, або слово без скорочення нічого не складають, і назва залишається такою, як була. Слова не прив’язують домену, як і термін без домену, тож стовпець зберігає домен, до якого прив’язаний.
  • Стовпець, сформовану назву якого вже має інший стовпець його таблиці (у будь-якому регістрі), зберігає свою назву, свій nameDerived і свій домен.
  • Очищення логічної назви залишає фізичну назву без змін. Виклик, логічна назва якого й те, що вона формує, уже на місці, нічого не змінює й не створює кроку відміни.

erd_derive_physical_names приймає scope: column з tableId і columnId — для цього стовпця; table з tableId — для назви таблиці й кожного її стовпця; або document без ідентифікатора — для кожної таблиці та її стовпців. Значення scope, для якого бракує потрібного ідентифікатора або передано ідентифікатор, якого воно не приймає, відхиляється. Кожну охоплену назву, що має логічну назву, зокрема й задану вручну, знову формують словники, і вона отримує те, що вони дають тепер: фізичну назву терміна, а для стовпця — ще й його домен і тип, або інакше назву, складену зі слів, яка залишає домен стовпця без змін. Логічна назва, яка нічого не формує, залишає назву без змін, але nameDerived тепер має значення true. Назва без логічної назви залишається без змін, як і стовпець, нову назву якого має інший стовпець його таблиці, як-от другий зовнішній ключ до тієї самої таблиці, — він також зберігає свій nameDerived. Один виклик erd_undo відміняє весь виклик. Назви імпортованої схеми задано вручну, тож, щоб дати їй назви за словниками, задайте логічні назви, а потім викличте erd_derive_physical_names. Цей виклик дає власну фізичну назву терміна, а вона не складається заново, коли змінюються слова терміна. Тому після зміни слів терміна спершу оновіть термін: передайте його name з порожнім physicalName, щоб слова склали фізичну назву заново, або передайте нове значення physicalName.

Випуск ERD Editor, що вийшов раніше, ніж з’явилася вкладка словника, під час збереження файлу відкидає його логічні назви, прив’язки до доменів і рядки словників, як це роблять розширення для VS Code до версії 4.2.0 і плагіни для Obsidian та JetBrains до версії 1.2.0. З них розширення версії 4.0.0 або 4.1.0 і плагіни версії 1.0.0 або 1.1.0 і далі редагують у режимі Live разом із сервером, але не показують і не зберігають логічних назв, прив’язок до доменів і рядків словників, які записує агент, — див. оновлення.

Налаштування​

Агент задає налаштування самої схеми: базу даних, її назву та скрипти схеми 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 і unlockNameViewMode. Останній читається навпаки: він має значення false, поки блокування Name View увімкнено, як у новому документі та у файлі, збереженому до появи цього блокування, і true, щойно користувач вимкне блокування. Для заблокованої мови, стилю назв чи типу лапок повідомляється заблоковане значення, тобто те, яке зберігає файл і з яким відкривається кожен редактор, хоч би що показував екран редактора. Область перегляду, вкладка й відображення назв не повідомляються. Агент читає й записує логічні назви незалежно від того, що показує відображення назв.

erd_set_ddl_script створює крок відміни. erd_set_database і erd_set_database_name його не створюють, тож erd_undo не може їх відмінити.

ІнструментАргументиЩо робить
erd_set_databasevalueЗадає базу даних: MariaDB, MSSQL, MySQL, Oracle, PostgreSQL, SQLite, Databricks або Snowflake. Цим визначаються типи даних бази даних і DDL, який записує erd_read, коли vendor не вказано.
erd_set_database_namevalueЗадає назву бази даних, яку вказують заголовки use і createAndUse інструмента erd_read.
erd_set_ddl_scriptposition, 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_sqlvalue, mode?Завантажує SQL DDL, оператори CREATE TABLE і подібні.
erd_import_graphqlvalue, mode?Завантажує GraphQL SDL.
erd_import_dbmlvalue, mode?Завантажує DBML. Кожен TableGroup стає групою таблиць із тих таблиць, які в ньому названо, — див. DBML.
erd_import_amlvalue, mode?Завантажує AML.
erd_import_jsonvalue, 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 не вимкнено блокування Name View, — тоді переноситься відображення назв із JSON. Щоб зберегти налаштування цього документа, починайте з тексту, який повертає формат json інструмента erd_read. Порожній текст дає новий документ, такий самий, як той, що створює erd_open_document з аргументом create.

У редакторі з розширенням для VS Code версії 4.3.0 або новішої чи плагіном для Obsidian або JetBrains версії 1.3.0 або новішої replace та його erd_undo чи erd_redo також завершують малювання зв’язку — див. Live.

append додає імпортоване до документа, як це робить імпорт із додаванням у редакторі, а один виклик erd_undo прибирає все додане:

  • Вміст тексту з’являється як нові сутності з новими ідентифікаторами в блоці, який розміщується під усім вмістом документа, включно з прихованими нотатками й групами таблиць, і вирівнюється за лівим краєм цього вмісту. Кожна наявна таблиця й кожне налаштування залишаються, зокрема таблиця з тією самою назвою: за назвою нічого не об’єднується.
  • Зв’язки та індекси додаються лише для таблиць, які приносить імпорт, тож зовнішній ключ до таблиці, яку текст не оголошує, відкидається.
  • erd_import_sql, erd_import_graphql і erd_import_aml додають таблиці з їхніми зв’язками та індексами, а erd_import_dbml — ще й свої групи таблиць. erd_import_json додає таблиці, зв’язки, індекси, нотатки й групи таблиць, але ніколи не свої налаштування, і відхиляє порожній текст. Його таблиці й стовпці приносять свої логічні назви, але жоден стовпець не прив’язаний до домену, і жодне слово, термін чи домен із JSON не переноситься.

JSON-документ зберігає власне розміщення, включно з групами таблиць: у режимі replace — там, де він розміщує свої таблиці, а в режимі append — усередині доданого блоку. Таблиці з SQL, GraphQL, DBML і AML розставляються рядами, спершу ті, що мають найменше стовпців, причому таблиці кожної групи йдуть разом, так, як їх розміщує erd_sort_tables, і ніколи не в режимі Flow, у якому їх розміщує власний імпорт редактора, коли це можливо. Ці чотири інструменти відхиляють порожній текст в обох режимах.

erd_batch​

erd_batch виконує кілька інструментів редагування по черзі як одну зміну, усі або жодного.

  • operations містить до 100 записів, кожен вигляду { tool, as?, args? }, де tool — це інструмент редагування, а args — аргументи інструмента без path. Інструмент читання, як-от erd_list_checks, відхиляється.
  • Спершу операції пробно виконуються на копії документа. Відхилену операцію буде названо, як-от 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, цифр і символів підкреслення, не починається з цифри й позначає лише одну операцію. Посилання розв’язується лише там, де аргумент приймає ідентифікатор сутності, зокрема wordId, termId і domainId, тож назва чи коментар із текстом $x залишаються текстом. Значення domainName теж є текстом, але воно читається, коли виконується його операція, тож може називати домен, доданий попередньою операцією пакета.

Таблиця з її стовпцями та зв’язок за один виклик:

{
"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.

Слова, домен і термін, а потім таблиця, назви якої формуються з них за логічними назвами:

{
"path": "shop.erd.json",
"operations": [
{ "tool": "erd_add_word", "args": { "name": "Member", "abbreviation": "MBR" } },
{ "tool": "erd_add_word", "args": { "name": "Number", "abbreviation": "NO" } },
{ "tool": "erd_add_word", "args": { "name": "Name", "abbreviation": "NM" } },
{ "tool": "erd_add_domain", "as": "identifier", "args": { "name": "Identifier", "dataType": "INT" } },
{ "tool": "erd_add_term", "args": { "name": "Member Number", "domainId": "$identifier" } },
{ "tool": "erd_add_table", "as": "members" },
{ "tool": "erd_set_table_logical_name", "args": { "tableId": "$members", "value": "Member" } },
{ "tool": "erd_add_column", "as": "no", "args": { "tableId": "$members" } },
{ "tool": "erd_set_column_logical_name", "args": { "tableId": "$members", "columnId": "$no", "value": "Member Number" } },
{ "tool": "erd_add_column", "as": "nm", "args": { "tableId": "$members" } },
{ "tool": "erd_set_column_logical_name", "args": { "tableId": "$members", "columnId": "$nm", "value": "Member Name" } }
]
}

Фізичну назву терміна MBR_NO складають його слова, а таблиця отримує назву MBR. Стовпець Member Number бере MBR_NO терміна та його домен, тож він прив’язаний до Identifier і має тип INT, а назва стовпця Member Name, якого немає серед термінів, складається як MBR_NM.

Результати​

Редагування повертає один рядок JSON:

{"tool":"erd_add_table","mode":"live","createdIds":["03h17be2plxpj5n59tqag7ogj"],"batches":1,"historyEntries":1}
ПолеЗначення
modelive або headless — див. режими Live і Headless.
savedtrue у результаті кожної зміни в режимі Headless, erd_batch, erd_undo і erd_redo: на момент відповіді виклику файл уже містить зміну, тож зберігати нічого не потрібно. Результат у режимі Live не має saved, бо зміну тримає редактор, — див. збереження.
createdIdsІдентифікатори того, що створив виклик, по порядку.
batches, historyEntriesСкільки пакетів змін надіслав виклик і скільки записів в історії змін редактора він створив.
undoable, undoNoteundoable дорівнює 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.
hubDisabledIDE від JetBrains тримає документ лише в проєкті, якому вона не довіряє. Читання й далі працює; щоб агент міг редагувати, позначте проєкт як довірений.
conflictФайл змінився на диску під час виклику. Нічого не записано.
hubAppeared, hubGoneРедактор почав обслуговувати документ, який агент редагував на диску, або редактор, що його обслуговував, досі працює, але його файл блокування та з’єднання зникли. Нічого не записано.
notSavederd_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) ще до того, як торкнутися документа, тож аргумент з помилкою в назві ніколи не відкидається мовчки. П’ять інструментів сеансу ігнорують невідомі їм аргументи.