feat(mcp): drawio стадия 2 — правила генерации: guide, shape-каталог, elk-layout, quality-warnings #424
Reference in New Issue
Block a user
Delete Branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
ТЗ: научить агента генерировать качественные диаграммы
Зависит от #423 (стадия 1: CRUD
drawio_get/create/update).Цель
После стадии 1 агент умеет создавать диаграммы, но качество — «сырое AI»: угаданные имена стенсилов рендерятся пустыми квадратами, ручные координаты дают налезания и edge сквозь фигуры, цветные заливки групп. Стадия 2 закрывает это правилами и справочными инструментами — без vision-цикла и без рендеринга (всё детерминированно, математикой по XML).
Состав
1. Хард-правила в description инструментов
drawio_create/drawio_updateСжатый блок правил прямо в описании (паттерн jgraph/drawio-mcp — правила инжектятся в tool description, модель видит их в момент вызова):
id=0/1; ячейкаvertexxoredge; у edge — дочерний<mxGeometry>; без XML-комментариев; уникальные id;html=1в стилях + XML-экранирование вvalue; перенос строки —
, не\n;fillColor=none;container=1;dropTarget=1;— дети сparent=<groupId>и координатами относительно родителя; edge между контейнерами —parent="1";adaptiveColors="auto"наmxGraphModel(тёмная тема Docmost бесплатно; цветаstrokeColor/fillColor/fontColor="default"авто-адаптируются);shape=mxgraph.*— сначалаdrawio_shapes».2.
drawio_guide(section?)— справочник по запросуProgressive disclosure: полный authoring-справочник не раздувает контекст, читается по секциям:
skeleton|layout|containers|icons-aws|icons-azure. Весь исходный материал секций — в Приложении ниже, писать guide прямо из этой ишью.3.
drawio_shapes(query, category?, limit?)— verified shape-каталогjgraph/drawio-mcp(shape-search/search-index.json, ~4.7MB / ~10 400 шейпов, Apache-2.0; сжать в.json.gz). Формат записи:{style, w, h, title, tags, type}.shape-search/generate-index.js, перестраивающий индекс изapp.min.jsрелиза draw.io — каталог не протухает; задокументировать процедуру обновления.w/h+ категорию.Это фикс «пустых квадратов» №1.
4.
layout: "elk"— параметр наdrawio_create/drawio_updatemxGeometry.5. Quality-warnings в линтере (замена vision-self-check, без рендера)
Вычислимо геометрией по XML:
Warnings (не errors) возвращаются в результате
create/update→ модель чинит сама. В description — указание: «исправь warnings и повтори, максимум 2 итерации».Приложение: исходный материал для guide-секций
layout— числовые эвристики (превращают «сделай красиво» в проверяемые правила)exitX/exitY/entryX/entryYдля всех непрямых связей — иначе ортогональная авто-маршрутизация ведёт линии сквозь фигуры. Вертикальная связь:exitX=0.5;exitY=1→entryX=0.5;entryY=0. Распределение точек при 2+ связях на узел: 0.25 / 0.5 / 0.75.labelBackgroundColor=#F5F5F5;fontSize=11;; не подписывать очевидный поток (Lambda→DynamoDB не нужен «Write»); лучше нумерация стадий (1,2,3), чем много подписей.dashed=1= async; красная штриховаяstrokeColor=#DD344C= error-path.child.x = parent.center_x - child.width/2, не на глаз.containers— группыcontainer=1;dropTarget=1;fillColor=none(цветная заливка группы — мгновенный признак «AI-generated»).parent="<groupId>", координаты относительно родителя.parent="1", иначе обрезается.spacingLeft=40;spacingTop=-4;— чтобы заголовок группы не налезал на иконку группы.swimlane;horizontal=0;startSize=110;— лейны сparent="1", дети внутри.icons-aws— два взаимоисключающих паттерна (причина №1 битых иконок)shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.<name>#ffffff(обязательно)shape=mxgraph.aws4.<name>none(обязательно)Полный шаблон service-level (для PNG-экспорта обязателен
fillColor, иначе иконка невидима):Категорийная палитра fillColor: Compute
#ED7100, Networking#8C4FFF, Database#C925D1, Storage#3F8624, Security#DD344C, Integration#E7157B, AI/ML#01A88D.Gotcha-ребрендинги (имена стенсилов отстают от AWS):
elasticsearch_serviceeventbridgepeeringvpc_peering(пустой квадрат)managed_streaming_for_kafkamsksingle_sign_oniam_identity_centerBlocklist битых → замены:
dynamodb_table→dynamodb;general_saml_token→traditional_server;kinesis_data_streams— ненадёжен. Неизвестный сервис → genericresIcon=mxgraph.aws4.general_AWScloudс подписью; безымянный цветной прямоугольник запрещён.Групповые стенсилы: AWS Cloud
group_aws_cloud_alt, VPCgroup_vpc2, Subnetgroup_security_group, Accountgroup_account; сабнеты —shape=mxgraph.aws4.group;grIcon=mxgraph.aws4.group_public_subnet;.icons-azure— image-style вместо shape-styleshape=mxgraph.azure2.*рендерится не во всех хостах. Использовать image-style:Известные рабочие пути:
networking/Front_Doors.svg,app_services/API_Management_Services.svg,databases/Azure_Cosmos_DB.svg,identity/Managed_Identities.svg,management_governance/Monitor.svg,devops/Application_Insights.svg. Фолбэк для устойчивости — абсолютный URL:https://raw.githubusercontent.com/jgraph/drawio/dev/src/main/webapp/img/lib/azure2/<категория>/<Icon>.svg.skeleton— каркас и формы XMLСм. справку в #423 (канонический каркас, три формы входа, decode-chain). В guide продублировать кратко.
Где в коде
packages/mcp/src/tool-specs.ts— descriptions + новые инструментыdrawio_guide,drawio_shapes;packages/mcp/src/lib/drawio-xml.ts— quality-warnings (расширение линтера из #423);packages/mcp/src/lib/drawio-layout.ts— обвязка elkjs (mxGraphModel → ELK-граф → обратно);packages/mcp/data/drawio-shape-index.json.gz+ guide-контент (markdown-файлы или константы).Критерии приёмки
drawio_shapes("lambda")возвращает валидную style-строкуmxgraph.aws4-иконки с корректным паттерном (service/resource) и размерами; запрос по стенсилу из blocklist возвращает замену.drawio_guideотдаёт каждую секцию; размер одной секции ≤ ~4KB (не раздувать контекст).drawio_create(layout:"elk")на графе из 10+ узлов с грубыми координатами выдаёт диаграмму без пересечений bbox и без warnings.Внешние референсы
.github/skills/drawio-mcp-diagramming/)Вне скоупа