Forge
markdowndeeb25a2
1# Текущая архитектура CascadeIDE (v1)
2
3Этот документ — **единая точка входа** про то, **как устроено сейчас** (а не “почему так”).
4Контекст решений и альтернативы — в **ADR**: [`docs/adr/README.md`](../adr/README.md).
5Политика и “куда смотреть” — [`docs/architecture-policy.md`](../architecture-policy.md).
6
7---
8
9## 1. Модель системы (на одном экране)
10
11CascadeIDE — desktop IDE (Avalonia + MVVM), где **семантика “кабины”** (PFD / Forward / MFD) задаёт структуру внимания, а MCP делает IDE управляемой агентом.
12
13- **PFD**: первичная зона внимания, короткая ситуационная сводка и “командирские” индикаторы.
14- **Forward**: рабочая зона (редактор/доки), основной поток действий.
15- **MFD**: вторичный контур — **длинные потоки** (терминал/сборка/Git/…): **страницы** стека.
16
17Эталон layout главного окна и имена регионов для MCP:
18- [`docs/ui-ux/cascade-ide-ui-layout-v1.md`](../ui-ux/cascade-ide-ui-layout-v1.md)
19
20---
21
22## 2. Слои и границы ответственности
23
24Норматив по слоям и “что где живёт”:
25- **ADR 0006**: слои, срезы фич, роль `MainWindowViewModel` — [`docs/adr/0006-presentation-layers-and-feature-slices.md`](../adr/0006-presentation-layers-and-feature-slices.md)
26- **ADR 0102**: DAL (граница внешних адаптеров) — [`docs/adr/0102-data-acquisition-layer-boundary-and-contract.md`](../adr/0102-data-acquisition-layer-boundary-and-contract.md)
27- **ADR 0097**: CCU (свёртка сырья → DTO/снимок) — [`docs/adr/0097-cockpit-compute-units-transport-to-channel-dto.md`](../adr/0097-cockpit-compute-units-transport-to-channel-dto.md)
28- **ADR 0099**: IDE DataBus (типизированные события) — [`docs/adr/0099-ide-databus-typed-events-and-projections.md`](../adr/0099-ide-databus-typed-events-and-projections.md)
29- **ADR 0036**: CDS → композитор → поверхность (кабина как домен смысла) — [`docs/adr/0036-cds-channel-compositor-surface-pipeline.md`](../adr/0036-cds-channel-compositor-surface-pipeline.md)
30- **ADR 0079**: IDS (IDE overlays) как отдельный домен от CDS — [`docs/adr/0079-ide-display-system-ids-overlay-pipeline.md`](../adr/0079-ide-display-system-ids-overlay-pipeline.md)
31
32Практическая ментальная модель (сверху вниз):
33
34- **UI (Views)**: `Views/*.axaml` и связанные `*.axaml.cs`. Держим простым: layout, биндинги, именование регионов.
35- **VM (ViewModels)**: композиция состояния, команд и связей между зонами внимания.
36- **Application / orchestration**: use-case координация внутри фичи (как правило `Features/<Feature>/Application/*`).
37- **DAL**: вход/выход во внешний мир (процессы, git, LSP, MCP-клиенты, файловая система).
38- **Transport / bus / batching**: доставка событий/строк в UI (bounded, backpressure).
39- **CCU**: свёртка событий/сырья в DTO, пригодный для UI и наблюдаемости.
40
41---
42
43## 3. Архитектура UI “Flight” (факт, не концепт)
44
45Главное окно — **три колонки** PFD | Forward | MFD. Длинные потоки (Terminal/Build/Git/…) живут как **страницы MFD**, а не как нижняя панель на всю ширину.
46
47Подробно:
48- [`docs/ui-ux/cascade-ide-ui-layout-v1.md`](../ui-ux/cascade-ide-ui-layout-v1.md)
49- Карта “концепт → код” (что историческое, что актуальное): [`docs/ui-ux/concept-to-implementation-map-v1.md`](../ui-ux/concept-to-implementation-map-v1.md)
50
51Ключевые элементы MFD (по текущим именам):
52- `MfdShellView` + `MfdShellPageStack`
53- регион “хост стека” (для снимков/темы/контрактов): `MfdContourStackHost`
54
55---
56
57## 4. MCP: IDE как сервер инструментов
58
59Контракт и протокол:
60- [`docs/MCP-PROTOCOL.md`](../MCP-PROTOCOL.md)
61- **ADR 0008** (контракты и тестируемая инфраструктура): [`docs/adr/0008-mcp-contracts-and-testable-infrastructure.md`](../adr/0008-mcp-contracts-and-testable-infrastructure.md)
62- **ADR 0052** (CLI контракта и снапшот-тесты): [`docs/adr/0052-agent-contract-cli-and-snapshot-tests.md`](../adr/0052-agent-contract-cli-and-snapshot-tests.md)
63
64Что важно помнить:
65- MCP ориентирован на **наблюдаемость** (снимки, диагностики) и **управление** (команды), а не на “тайные” API.
66- Ключи/имена регионов UI, которые видит агент, должны быть стабильны и задокументированы (см. layout doc выше).
67
68---
69
70## 5. Hybrid Index и навигация по коду (вкратце)
71
72- **Hybrid index (FTS + vec)** как локальная БД контекста:
73 [`docs/adr/0105-hybrid-codebase-index-for-csharp-web.md`](../adr/0105-hybrid-codebase-index-for-csharp-web.md) (Accepted · Implemented)
74 [`docs/adr/0106-hybrid-codebase-index-cascadeide-integration-and-semantic-map.md`](../adr/0106-hybrid-codebase-index-cascadeide-integration-and-semantic-map.md) (Proposed)
75- Навигационный MCP (`get_code_navigation_context`) и presets:
76 [`docs/adr/0039-workspace-navigation-affordances.md`](../adr/0039-workspace-navigation-affordances.md)
77
78---
79
80## 6. “Где смотреть в коде” (якоря)
81
82Это не полный список, а “первая десятка” для ориентации.
83
84- **UI layout / регионы**: `Views/MainWindow.axaml`, `Views/MfdShellView.axaml`
85- **VM главного окна**: `ViewModels/MainWindowViewModel.*.cs` (partials)
86- **Hybrid Index orchestration**: `Features/HybridIndex/Application/*`
87- **CCU / каналы кабины**: `Cockpit/ComputingUnits/*`, `Cockpit/Channels/*`, `Cockpit/Cds/*`, `Cockpit/Composition/*`, `Cockpit/Surface/*`
88- **MCP tool catalog / protocol docs**: `Services/*` (см. ADR 0008 и `MCP-PROTOCOL.md`)
89
90Если цель — “поймать границу слоёв”, полезны Roslyn анализаторы:
91- [`CascadeIDE.ArchitectureAnalyzers/README.md`](../../CascadeIDE.ArchitectureAnalyzers/README.md)
92
93---
94
95## 7. Что считать историческим (и не путать с текущим)
96
97В репозитории есть документы и концепты, описывающие старые макеты (например “нижняя панель” на всю ширину).
98Смотри явные пометки “старой топологии” в:
99- [`docs/ui-ux/cascade-ide-ui-layout-v1.md`](../ui-ux/cascade-ide-ui-layout-v1.md)
100- [`docs/architecture-migration.md`](../architecture-migration.md)
101
102---
103
104## 8. Как обновлять этот документ
105
106Обновляй, когда меняется хотя бы одно из:
107- топология зон внимания (PFD/Forward/MFD), ключевые регионы и их имена;
108- границы слоёв (DAL/CCU/DataBus/IDS/CDS) или главный “путь данных”;
109- контракт MCP (новые инструменты, смена ключей/форматов).
110
111Версия: **v1** (актуальный “срез”).
112
View only · write via MCP/CIDE