Forge
markdowndeeb25a2
1# Сравнение кандидатов на поверхность редактора (v1)
2
3**Статус:** чертеж-компаньон к [ADR 0103](../adr/0103-editor-hud-substrate-semantic-projection-and-surface-adapter.md)
4**Дата:** 2026-04-26
5**Обновлено:** 2026-06-20 — нормативная линия Monaco: [ADR 0162](../adr/0162-monaco-forward-editor-webview2-host.md)
6
7**Связь:** [0085](../adr/0085-editor-hud-inline-layer-and-hud-banner.md), [0098](../adr/0098-semantic-first-document-as-projection.md), [0035](../adr/0035-mfd-embedded-webview-external-llm-and-mcp-boundary.md), [concept-to-implementation-map-v1](../ui-ux/concept-to-implementation-map-v1.md), [LANGUAGE-SERVICES-PLAN.md](../LANGUAGE-SERVICES-PLAN.md)
8
9Документ — **сравнительный аппендикс** к хосту документного редактора в зоне **Forward**. Он **не** меняет продуктовый baseline: **AvaloniaEdit** остаётся стеком по умолчанию в репозитории.
10
11---
12
13## 1. Текущий стек (baseline)
14
15| Измерение | AvaloniaEdit (сейчас) |
16|-----------|------------------------|
17| **Интеграция** | Нативный Avalonia; хост `DockDocumentView`; TextMate через AvaloniaEdit.TextMate |
18| **LSP / семантика** | Склейка в коде приложения (направление DAL — [0102](../adr/0102-data-acquisition-layer-boundary-and-contract.md)); «клей» не исчезает сам |
19| **Inline HUD** | Adorners, свои renderers, tooltips — реализуемо; полноценные inlays/ghost уровня VS — предмет доработок |
20| **Производительность** | Для типичных файлов хорошо; для очень больших — от способа использования хоста |
21| **Тема** | Может следовать теме приложения; паритет с MFD/кабиной — отдельная работа ([0066](../adr/0066-cockpit-ui-vs-ide-presentation-layer.md)) |
22| **High-frequency** | События напрямую; всё равно вести через **bounded**-контур [0103](../adr/0103-editor-hud-substrate-semantic-projection-and-surface-adapter.md), а не в DataBus |
23| **Риск** | Меньше разброса платформы на Windows; нет встроенного браузера во Forward |
24
25---
26
27## 2. Веб-редактор в WebView2 (например Monaco)
28
29| Измерение | Monaco (или аналог) в WebView2 |
30|-----------|----------------------------------|
31| **Что это** | Встроенный **Edge** webview в **нативном** процессе — **не** оболочка Electron-приложения. Иные компромиссы (interop, C++/WinRT, два кучи) vs связка Chromium+Node. |
32| **Inline HUD** | Богатая экосистема (у Monaco: decorations, codelens-паттерны); остаётся работа по **C#-специфичной** стыковке LSP и **IPC** к DAL/IDE |
33| **Тема** | Две системы: веб-CSS и Avalonia `PrimitivesKit` / кабина — риск **дублирования** |
34| **Производительность** | Может быть сильной; large-doc и **alloc** — от интеграции |
35| **Платформа** | WebView2 ориентирован на Windows; кроссплатформенный MFD уже ссылается на [0093](../adr/0093-mfd-embedded-browser-for-launch-url.md) для **вторичных** поверхностей, без обязанности для **кодового** редактора |
36| **Политика** | [ADR 0103](../adr/0103-editor-hud-substrate-semantic-projection-and-surface-adapter.md): **не** baseline Forward; только опциональная исследовательская линия. WebView2 как инструмент **MFD** — [0035](../adr/0035-mfd-embedded-webview-external-llm-and-mcp-boundary.md). |
37
38---
39
40## 3. Другие нативные или гибридные варианты (strawman)
41
42| Вариант | Когда смотреть |
43|---------|----------------|
44| **Более тяжёлая кастомизация Avalonia** (больше adorners, Skia, своя вёрстка текста) | Оставаться нативным; вкладываться, если пределы AvaloniaEdit **измеримы** в целевых сценариях (большие файлы, плотность hint’ов) |
45| **Редактор в отдельном процессе** (IPC) | Вне v1; растёт операционка и синхронизация с «истиной буфера» [0084](../adr/0084-agent-edits-editor-source-of-truth-presence-channel.md) |
46| **Стиль Roslyn/VS platform** | Долгий горизонт; не вытекает из спайка 0103 |
47
48---
49
50## 4. Как это питает `IEditorSurfaceAdapter`
51
52Контракт адаптера — **независимый от хоста**: тот же `SemanticProjectionPipeline` / `EditorHudEngine` сначала крутит AvaloniaEdit; веб-хост реализует **тот же** порт координат, каретки и **семантического отображения**, без дублирования DAL или CCU.
53
54**Минимальная поверхность порта (концептуально):**
55
56- `DocumentId` + снимок текста или диапазоны изменений для LSP
57- Каретка/selection в смещениях документа; опционально визуальная строка/колонка
58- API запроса **стабилизированной** презентации hover/диагностик от **движка** (а не сырой LSP во view)
59
60---
61
62## 5. Сводка решения
63
64| Сценарий | Направление |
65|----------|-------------|
66| **Редактор кода Forward по умолчанию** | **AvaloniaEdit** + слои [0103](../adr/0103-editor-hud-substrate-semantic-projection-and-surface-adapter.md) |
67| **MFD / URL запуска / внешний LLM** | WebView2 по **0035 / 0093** — не замена ядра редактора без отдельного ADR |
68| **Monaco / WebView2 Forward** | [ADR 0162](../adr/0162-monaco-forward-editor-webview2-host.md): strangler `monaco_webview2`, не Photino-shell; фазы M0–M6 |
69
View only · write via MCP/CIDE