Перейти к содержанию

ADR 0058: Сопряжение агента и Roslyn MCP в settings.toml (лимиты, виды узлов, таймауты, пресеты)

Статус: Proposed
Дата: 2026-04-18

Связанные ADR

ADR Роль
0008 контракты MCP
0028 settings.toml
0039 навигация, пресеты MCP; карта намерений в UI
0040 паттерн TOML
0053 карта намерений на PFD
0059 профили, Manager, режимы Auto-Focus / Combat / Echelon, EFB на третьем мониторе — отдельный ADR

Контекст

Агентский слой и Roslyn связаны через MCP-инструменты. Без явных правил «сколько и чего отдавать» агент перегружает контекст или недополучает структуру. Менять это нужно в конфиге (0028), без обязательной правки C#.

Интуиция (не норма ADR): агентский слой — контур запросов, Roslyn MCP — шлюз семантики; настройки ниже задают объём, фильтр, тайминг.

Уже есть (не отменяется):

  • [semantic_map] — вид/глубина UI — 0039, 0053.
  • Пресеты get_code_navigation_context0039 § Agent/MCP.

Этот ADR — слой параметров сопряжения агент ↔ Roslyn MCP в TOML. Поведение профилей, Manager, тактика/стратегия, третий монитор — 0059.


Решение (принципы)

1. Одна декларативная схема — несколько потребителей

Категория Пример смысла Кто обязан учитывать
Лимиты объёма ответа max_nodes_per_query, лимиты глубины обхода Roslyn MCP (или адаптер агрегации графа)
Фильтр видов узлов / символов included_kinds / исключения Roslyn MCP
Таймауты / «грязная» семантика ожидание компиляции vs stale graph Roslyn MCP ± IDE
Пресеты режимов запроса условные ExploreMode / RefactoringMode Roslyn MCP; агент может переопределить в вызове

Правило приоритета: аргумент вызова > секция TOML > дефолт сервера — зафиксировать в реализации и MCP-PROTOCOL.md при появлении полей.

2. Четыре группы параметров (контрактные оси)

  1. Throttling & scoping — лимиты объёма и глубины за запрос (max_nodes_per_query, max_recursion_depth или эквиваленты в спецификации тула).

  2. Маппинг видимости (capabilities) — какие классы узлов/символов в выдаче.

  3. Таймауты и согласованность — ждать компиляцию; stale graph; лимиты времени на тяжёлые запросы.

  4. Инструментальные пресеты — именованные наборы (controlFlow / architecture / обзор vs рефакторинг). Связь с 0039: ссылка по имени или ортогональные пресеты — без неявного слияния.

3. Размещение в TOML

Целевая секция, например [agent.roslyn_mcp], отдельно от [semantic_map] и от [[code_navigation.presets]] (0039) без явного маппинга. Точные ключи — после прототипа; здесь зафиксированы оси.

4. Версионирование

Опциональные ключи и явные дефолты; смена обязательной формы — bump схемы (0028).

5. Минимальный v0 vs отложенное

v0: лимиты + один-два таймаута + один пресет «обзор vs глубже» без полного included_kinds.

Отложено: исчерпывающий справочник kinds, сложная recursion, мегаконфиг; автоматика профилей и режимов0059.


Последствия

  • Явный контракт PR: ключ относится к MCP-серверу или IDE.
  • Тесты на дефолты и merge приоритетов.

Отклонённые альтернативы

  • Только env — хуже воспроизводимости.
  • Только системный промпт — нет детерминизма на уровне тула.

Открытые вопросы

  • Синхронизация с конфигом standalone roslyn-mcp вне IDE — одна схема или две.
  • Какие тулы в scope первой реализации (navigation / semantic map / оба).