Files
gitmost/packages
agent_coder fe30936e2f fix(mcp): drawio — авто-стрип XML-комментариев вместо lint-ошибки (#505)
Модель органически вставляет `<!-- ... -->` в mxGraph-XML вопреки запрету
в описании тула (природа LLM, промптингом не лечится). Жёсткая ошибка
линтера [no-comments] заставляла её ПОЛНОСТЬЮ перегенерировать диаграмму —
впустую потраченный tool-call на почти каждой первой генерации.

Теперь в общем prepare-пути (`prepareModel`, через который идут
drawioCreate/drawioUpdate/drawioEditCells) комментарии срезаются ДО линта:
`xml.replace(/<!--[\s\S]*?-->/g, "")`. Комментарии не несут семантики, так
что стрип всегда безопасен. Число срезанных комментариев уходит в
`warnings[]` как `stripped N XML comment(s)` (только при N > 0) — модель это
видит, но НЕ ретраит.

Стрип ГЕЙТИТСЯ на well-formedness: сначала парсим модель, и режем
комментарии только если XML корректен. На malformed-входе (например сырой
неэкранированный `<!--` внутри значения атрибута на пути create/update, где
normalizeInput отдаёт строку без парсинга) стрип НЕ выполняется — иначе он
молча вырезал бы текст автора и принял битую диаграмму. Вместо этого правила
линтера value-escaping / well-formed-xml корректно отклоняют такой вход, и
автор видит реальную ошибку. В корректном XML литеральный `<!--` в значении
обязан быть entity-escaped, а CDATA drawio не использует, поэтому после
проверки well-formedness регэксп бьёт только по настоящим comment-нодам.

Правило `no-comments` в линтере оставлено как defense-in-depth backstop.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-12 04:47:40 +03:00
..