Forge
markdowndeeb25a2
1# ADR 0058: Сопряжение агента и Roslyn MCP в `settings.toml` (лимиты, виды узлов, таймауты, пресеты)
2
3**Статус:** Proposed
4**Дата:** 2026-04-18
5
6## Связанные ADR
7
8| ADR | Роль |
9|-----|------|
10| [0008](0008-mcp-contracts-and-testable-infrastructure.md) | контракты MCP |
11| [0028](0028-user-settings-toml-localappdata-and-secrets.md) | `settings.toml` |
12| [0039](0039-workspace-navigation-affordances.md) | навигация, пресеты MCP; карта намерений в UI |
13| [0040](0040-lsp-launch-line-settings-toml-presets-and-environment.md) | паттерн TOML |
14| [0053](0053-semantic-map-control-flow-pfd.md) | карта намерений на PFD |
15| [0059](0059-roslyn-mcp-profiles-manager-tactical-strategic-efb.md) | профили, Manager, режимы Auto-Focus / Combat / Echelon, EFB на третьем мониторе — **отдельный ADR** |
16
17---
18## Контекст
19
20Агентский слой и **Roslyn** связаны через **MCP-инструменты**. Без явных правил «сколько и чего отдавать» агент перегружает контекст или недополучает структуру. Менять это нужно **в конфиге** ([0028](0028-user-settings-toml-localappdata-and-secrets.md)), без обязательной правки C#.
21
22**Интуиция (не норма ADR):** агентский слой — контур запросов, Roslyn MCP — шлюз семантики; настройки ниже задают **объём, фильтр, тайминг**.
23
24**Уже есть (не отменяется):**
25
26- `[semantic_map]` — вид/глубина UI — [0039](0039-workspace-navigation-affordances.md), [0053](0053-semantic-map-control-flow-pfd.md).
27- Пресеты **`get_code_navigation_context`** — [0039 § Agent/MCP](0039-workspace-navigation-affordances.md#adr0039-mcp-workspace-navigation).
28
29Этот ADR — **слой параметров сопряжения агент ↔ Roslyn MCP** в TOML. Поведение **профилей**, **Manager**, тактика/стратегия, третий монитор — **[0059](0059-roslyn-mcp-profiles-manager-tactical-strategic-efb.md)**.
30
31---
32
33## Решение (принципы)
34
35<a id="adr0058-p1"></a>
36
37### 1. Одна декларативная схема — несколько потребителей
38
39| Категория | Пример смысла | Кто обязан учитывать |
40|-----------|----------------|----------------------|
41| Лимиты объёма ответа | `max_nodes_per_query`, лимиты глубины обхода | **Roslyn MCP** (или адаптер агрегации графа) |
42| Фильтр видов узлов / символов | `included_kinds` / исключения | **Roslyn MCP** |
43| Таймауты / «грязная» семантика | ожидание компиляции vs stale graph | **Roslyn MCP** ± **IDE** |
44| Пресеты режимов запроса | условные `ExploreMode` / `RefactoringMode` | **Roslyn MCP**; агент может переопределить в вызове |
45
46**Правило приоритета:** аргумент вызова > секция TOML > дефолт сервера — зафиксировать в реализации и [MCP-PROTOCOL.md](../MCP-PROTOCOL.md) при появлении полей.
47
48<a id="adr0058-p2"></a>
49
50### 2. Четыре группы параметров (контрактные оси)
51
521. **Throttling & scoping** — лимиты объёма и глубины за запрос (`max_nodes_per_query`, `max_recursion_depth` или эквиваленты в спецификации тула).
53
542. **Маппинг видимости (capabilities)** — какие классы узлов/символов в выдаче.
55
563. **Таймауты и согласованность** — ждать компиляцию; stale graph; лимиты времени на тяжёлые запросы.
57
584. **Инструментальные пресеты** — именованные наборы (controlFlow / architecture / обзор vs рефакторинг). Связь с [0039](0039-workspace-navigation-affordances.md): ссылка по имени или ортогональные пресеты — без неявного слияния.
59
60<a id="adr0058-p3"></a>
61
62### 3. Размещение в TOML
63
64Целевая секция, например **`[agent.roslyn_mcp]`**, отдельно от `[semantic_map]` и от **`[[code_navigation.presets]]`** ([0039](0039-workspace-navigation-affordances.md)) без явного маппинга. Точные ключи — после прототипа; здесь зафиксированы **оси**.
65
66<a id="adr0058-p4"></a>
67
68### 4. Версионирование
69
70Опциональные ключи и явные дефолты; смена обязательной формы — bump схемы ([0028](0028-user-settings-toml-localappdata-and-secrets.md)).
71
72<a id="adr0058-p5"></a>
73
74### 5. Минимальный v0 vs отложенное
75
76**v0:** лимиты + один-два таймаута + один пресет «обзор vs глубже» без полного `included_kinds`.
77
78**Отложено:** исчерпывающий справочник kinds, сложная recursion, мегаконфиг; **автоматика профилей и режимов** — [0059](0059-roslyn-mcp-profiles-manager-tactical-strategic-efb.md).
79
80---
81
82## Последствия
83
84- Явный контракт PR: ключ относится к MCP-серверу или IDE.
85- Тесты на дефолты и merge приоритетов.
86
87---
88
89## Отклонённые альтернативы
90
91- Только env — хуже воспроизводимости.
92- Только системный промпт — нет детерминизма на уровне тула.
93
94---
95
96## Открытые вопросы
97
98- Синхронизация с конфигом **standalone** `roslyn-mcp` вне IDE — одна схема или две.
99- Какие тулы в scope первой реализации (navigation / semantic map / оба).
100
View only · write via MCP/CIDE