fix(mcp): ELK-лейаут блокирует event loop всего сервера — вынести в worker_thread [T0.1] #482
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?
Суть.
packages/mcp/src/lib/drawio-layout.ts:152-173(капы :21-36, координаты — develop@363f20ab, перед работой перегенерировать):elkjsсинхронный;Promise.raceсsetTimeout(5s)— иллюзия: таймер не сработает, пока event loop заблокирован (комментарий в коде сам это признаёт). На in-app хостеlayout:"elk"исполняется в процессе основного NestJS по запросу LLM.Сценарий отказа. Агент подаёт патологический граф у капа 500 узлов → секунды блокировки event loop → зависают ВСЕ HTTP-запросы, SSE-стримы и loopback-вызовы тулов. LLM-триггеримый DoS + усилитель «стрим дёргается».
Правка.
elk.layout()вworker_thread, создаваемый по требованию; честный таймаут черезworker.terminate()— единственный способ прервать синхронный код.Тесты. Unit на terminate-по-таймауту; бенчмарк-гард на worst-case граф у капа (верификация на реальном worst-case графе, не на синтетике).
Зависимости. Нет — независимый мелкий PR.
Заменено итерационным ишью #486 (коммит 1). Закрыто как дубль.