ADR 0035: Встроенный браузер в MFD, внешние веб-LLM и граница с MCP¶
Статус: Proposed (намерение и инварианты доверия; детали WebView и UX — по дорожной карте).
Дата: 2026-04-11
Связанные ADR¶
| ADR | Роль |
|---|---|
| 0021 | MFD как вторичный якорь; встроенный браузер в роли «навигационного» слоя |
| 0016 | внешний агент / мосты к другим средам |
| 0008 | MCP в IDE — контракт и границы процесса |
| 0017 | мультиоконность, MfdHostWindow / вторичные поверхности |
| 0020 | слои видимости рассуждения агента; честные ограничения провайдеров |
Контекст¶
В 0021 зона MFD уже описана как место для вторичных инструментов, в том числе встроенного браузера — чтобы не уводить взгляд из «кокпита» во внешнее окно без необходимости. На практике удобно держать там и веб-интерфейсы сторонних LLM (например режим ИИ в поисковике): быстрый кросс-чек, документация, «второе мнение» рядом с кодом.
Одновременно в IDE остаётся контур MCP (0008) и встроенный/внешний агент (0016): доступ к инструментам, файлам, процессам — у нативного хоста с явной моделью доверия. Веб-страница внутри встроенного браузера живёт в песочнице origin’а провайдера: у неё нет того же API, что у процесса Cascade, и нет прямого подключения к MCP-серверам на машине пользователя.
Без явной фиксации границ легко смешать ожидания: «веб-Ассистент в MFD видит мой файл / репозиторий так же, как агент в Cursor». Это не следует из размещения вкладки в IDE и не должно подразумеваться по умолчанию.
Решение¶
- Встроенный браузер в MFD — намеренная поверхность. Реализация ориентируется на WebView2 (или эквивалент на целевой платформе) внутри региона MFD / вторичного окна по политике 0017 и пресета (0010): не четвёртый семантический якорь в смысле 0021, а вторичный инструмент в зоне MFD. Закладки, стартовый URL (в т.ч. прямая ссылка на веб-режим LLM) — предмет конфигурации продукта, не этого ADR.
- Инвариант доверия: веб ≠ нативный MCP-клиент. Содержимое произвольного HTTPS-origin во встроенном WebView не получает автоматического доступа к MCP, к файлам workspace, к секретам из
ai-keys.toml(0028) и к прочим привилегиям процесса IDE. Это соответствует модели безопасности браузера и снимает класс атак «страница в MFD = расширенные права».
- Контекст «лобового» / редактора во внешний веб-LLM — только явно. Любая передача текста файла, фрагмента кода, пути или метаданных workspace из IDE в сторонний веб-сервис — осознанное действие пользователя (выделение, копирование, будущая кнопка «поделиться…» с подтверждением) и/или отдельная политика продукта с учётом приватности репозитория. Не подразумевается неявная синхронизация «как у встроенного агента с MCP».
- Гибридный рабочий процесс (канон для v1). Стыковка «веб-второе мнение» и «нативный агент с инструментами» — через человека-оператора и простые механизмы: буфер обмена, явная вставка, ссылки, при необходимости — мосты в духе 0016 (внешний клиент, deep link), без обязательной автоматизации.
- «Подружить веб с MCP» — отдельная архитектурная линия. Варианты вроде расширения-браузера, локального шлюза с согласием пользователя, туннеля к API — не часть baseline этого ADR; требуют собственного анализа угроз (XSS, подмена origin, утечки токенов), модели согласия и, при необходимости, отдельного ADR или приложения к 0008. До принятия такого решения продукт не обещает веб-странице в MFD доступ к MCP. Конкретное направление «встроенный веб-портал + Host Object →
IdeCommands» — 0108 (Accepted).
Последствия¶
- UX MFD может включать предсказуемый слой «документация и внешние LLM в одном кокпите» без смешения с привилегиями нативного агента.
- Документация и онбординг должны явно различать: встроенный агент / MCP vs веб-интерфейс третьей стороны в WebView.
- Любая будущая интеграция веб↔локальные инструменты оценивается отдельно и не ломает инварианты п. 2–3 без нового решения.
Отклонённые / вне scope¶
- Полная унификация «веб-LLM в MFD» и «IDE-агент с MCP» в одну неразличимую сущность — отклонена как нарушающая границу доверия и усложняющая безопасность без отдельного проектирования.
- Сертификация WebView или политики конкретного облачного провайдера — вне этого ADR.