Миграция к архитектурной политике CascadeIDE
Связь: architecture-policy.md.
Подход: strangler — по фазам, без остановки разработки.
Стратегия: опора на целевой каркас (CDS · CCU · DAL · IDS)
Геометрия канал→композитор кабины (CDS) (ADR 0036), вычислительных блоков кабины (CCU) (ADR 0097), DAL vs Application vs UI (ADR 0102) и IDS (ADR 0079) уже устоялась как целевая линия: новые возможности смешиваем с нею, а не с параллельными локальными «мини-архитектурами» в главном окне.
Иначе неизбежное наполнение MainWindowViewModel новыми фичами съест запас времени на приведение к этому каркасу. Поэтому:
- Держим активный упрощающий буфер вокруг MW: последовательное сужение крупных partial-кластеров (MCP,
Presentation*/ShellState, карта workspace и др.) через оркестраторы и политики вFeatures/<домен>/— см. ниже Wave 1 (MCP / UI clusters). - Новая логика по умолчанию живёт в
Features/по слоям DAL → Application/CCU-потребители → биндинг на VM; главный VM — тонкий композитор там, где уместно уже зафиксировано таблицей «Целевая карта срезов» и ADR 0006. - ADR 0009 остаётся в силе: полное стирание исторического монолита по дедлайну не обязательно — но без пункта 1 можно соблюдать strangler формально и при этом не приблизиться к каркасу, если главный узел только разрастается новыми фичами без выносов.
Текущее состояние
MainWindowViewModel — композитор окна: конструктор, подписки, мост IIdeMcpActions → IdeMcpCommandExecutor, оркестрация решения/сборки/LSP/MCP. Объём ~5.2k строк суммарно по partial-классу MainWindowViewModel*.cs (~5.2k) плюс диспетчер IdeMcpCommandExecutor*.cs и Generated/IdeMcpCommandExecutor.Generated.g.cs (~0k); счётчики — ориентир по состоянию репозитория (авто: 2026-07). Чат, Git, терминал, сборка, инструментирование и т.д. — в Features/* как дочерние VM; цель дальше — сужать главный VM по мере доработок (вынос в сервисы, план B).
Срез MainWindowViewModel (карта partial-файлов)
Имена по алфавиту — для поиска; строки — Measure-Object -Line по .cs (пересчёт: tools/Update-ArchitectureMigrationMainWindowSlice.ps1).
| Файл | Строк (≈) | Содержание |
|---|---|---|
MainWindowViewModel.AgentEnvironment.cs |
121 | AEE: PFD Verify Epoch instrument, chat trace, epoch stale on write (ADR 0148 W3–W5). |
MainWindowViewModel.AgentHarness.cs |
39 | Agent harness: auto-verify coalescing after .cs writes (ADR 0166 interim). |
MainWindowViewModel.AutonomousAgent.cs |
113 | Автономный агент (Power). |
MainWindowViewModel.Capabilities.cs |
23 | Реестр capabilities. |
MainWindowViewModel.CascadeChord.cs |
107 | Аккордный слой ADR 0060: корень cascade_chord из hotkeys.toml (по умолчанию Ctrl+K), затем тот же хвост мелодии, что после c:. Однозначный обычный alias (например so) исполняется без Enter при отсутствии более длинного alias-префикса; параметрические (wai:, els::…) — только по Enter или из палитры. При конфликте префиксов (gs vs gsu) — точный хвост или Enter. |
MainWindowViewModel.CockpitCommandLine.cs |
24 | Cockpit Command Line на Forward host: primary=intercom — Skia в ChatPanel; primary=editor — оверлей CockpitCommandLineOverlayView (ADR 0120). |
MainWindowViewModel.CommandPalette.cs |
166 | Палитра команд. |
MainWindowViewModel.CompactIdeLayout.cs |
85 | Compact tier IDE-scan presentation (ADR 0171 §2.3): Forward center, PFD/Intercom right or bottom, MFD bottom. |
MainWindowViewModel.CorrespondenceShell.cs |
24 | Страница Correspondence (CRS) в оболочке Mfd (ADR 0156). |
MainWindowViewModel.cs |
376 | Главный композитор окна (partial-класс, несколько MainWindowViewModel*.cs). Карта файлов и ответственности — docs/architecture-migration.md, раздел «Срез MainWindowViewModel». |
MainWindowViewModel.CSharpLsp.cs |
138 | Запуск/перезапуск C# LSP. |
MainWindowViewModel.CursorAcp.cs |
36 | Путь Cursor ACP и предпочитаемая модель. |
MainWindowViewModel.DebugStackUi.cs |
35 | Выбор кадра в панели «Стек» Mfd: подгрузка Locals для выбранного кадра (DAP). |
MainWindowViewModel.DockInstrumentSlots.cs |
34 | Какой инструмент показан в слотах PFD/MFD главного окна — по InstrumentPlacementRuntime и DisplaySettings (в т.ч. [display.instrument_routing] и merge workspace.toml). Логика — MainWindowDockedGridInstrumentSlots. |
MainWindowViewModel.DocumentsDock.cs |
29 | Документы / dock. |
MainWindowViewModel.EditorNavigation.cs |
9 | Monaco editor navigation service wiring for MainWindow. |
MainWindowViewModel.EditorOllama.cs |
30 | Состояние редактора, Markdown и выбора модели Ollama. |
MainWindowViewModel.EditorSession.cs |
129 | Wave 2: EditorWorkspaceViewModel + прокси на MWVM для существующих привязок и MCP. |
MainWindowViewModel.Eicas.cs |
17 | Канал EICAS / CAS — отдельно от полосы телеметрии контура работы (ADR 0021, вариант A). |
MainWindowViewModel.EnvironmentReadiness.cs |
48 | Снимок «готовность окружения» (ADR 0023), отдельно от Workspace Health. |
MainWindowViewModel.FeatureCommandProxies.cs |
66 | Wave 2: прокси RelayCommand на feature VMs (XAML, MCP, hotkeys без смены привязок). |
MainWindowViewModel.FeatureSessions.cs |
13 | Wave 2 этап 5: application shell, debug, build session VMs. |
MainWindowViewModel.HybridIndex.cs |
145 | Hybrid Codebase Index (HCI): status projection and UI commands for the HIS (MFD) page. |
MainWindowViewModel.HybridIndexSettings.cs |
18 | Привязки окна настроек к HybridIndex (ADR 0106). |
MainWindowViewModel.IdeHealth.cs |
95 | Связка с Workspace Health. |
MainWindowViewModel.IdeMcpHostLifecycle.cs |
20 | Жизненный цикл IDE MCP-хоста: ide_ping, перезапуск внешних MCP и stdio-сессии Cursor ACP. |
MainWindowViewModel.IntercomAttachAffordances.cs |
69 | Intercom attach affordances: selection hotkey, drag-to-composer (ADR 0128). |
MainWindowViewModel.IntercomAttachmentReveal.cs |
44 | Reveal вложения Intercom из чата: загрузка решения при необходимости, затем навигация в редактор (ADR 0128). |
MainWindowViewModel.IntercomFeedMetrics.cs |
26 | [intercom] feed_metrics — плотность Skia-ленты (comfortable / compact). |
MainWindowViewModel.IntercomTransport.cs |
34 | Координатор team transport Intercom: подключение SSE/HTTP ingest и делегирование в ChatPanel. |
MainWindowViewModel.IntercomTransportSettings.cs |
35 | Привязки [intercom.transport] и Connect/Disconnect (ADR 0144). |
MainWindowViewModel.LaunchProfiles.cs |
90 | Селектор launch profile, импорт launchSettings.json (ADR 0090). |
MainWindowViewModel.LayoutNotifications.cs |
17 | Инвалидация производных высот MainGrid без длинных цепочек NotifyPropertyChangedFor в ShellState. |
MainWindowViewModel.MagicLink.cs |
54 | Magic link: pipe-сервер single-instance и обработка URI. |
MainWindowViewModel.MarkdownExport.cs |
31 | Экспорт Markdown. |
MainWindowViewModel.MarkdownLsp.cs |
103 | Запуск/перезапуск Markdown LSP. |
MainWindowViewModel.McpBreakpointReveal.cs |
49 | MCP: постановка брейкпоинта с загрузкой решения и показом строки в редакторе. |
MainWindowViewModel.McpHostBridge.cs |
54 | Внутренний мост для MainWindowIdeMcpHost (Wave 2 Big Bang). |
MainWindowViewModel.MfdShell.cs |
62 | Оболочка Mfd: одна активная страница; навигация — команды и палитра. Якорь на экране задаётся presentation (зона Mfd в main и/или окно-хост). |
MainWindowViewModel.PfdBackgroundStatus.cs |
235 | Компактная полоса статуса над PFD/Forward: Verify Epoch (AEE W3) и solution warm-up (ADR 0141). |
MainWindowViewModel.Presentation.cs |
287 | Вычисляемые свойства разметки, Workspace Health и видимости панелей (режимы UI). |
MainWindowViewModel.PresentationLayout.CockpitSurfaceSnapshot.cs |
8 | Сборка CockpitSurfaceState главного окна (Build). |
MainWindowViewModel.PresentationLayout.cs |
113 | ADR 0017: строка presentation и второй TopLevel — MfdHostWindow с полным вторичным контуром (п. 8). |
MainWindowViewModel.PresentationLayout.HostShell.cs |
47 | События «окно-хост открыло полный контур» — скрытие колонок в main (PresentationLayout). |
MainWindowViewModel.PresentationLayout.HostWindowBounds.cs |
84 | Персистенция геометрии окон-хостов пресета presentation (ADR 0017). |
MainWindowViewModel.PresentationLayoutAuthority.cs |
14 | Запись intent видимости панелей (семантика «хочу»); фактическая поверхность — MainWindowShellSurfaceCompositor. |
MainWindowViewModel.PresentationTier.cs |
75 | Presentation tier compact vs cockpit (ADR 0171). |
MainWindowViewModel.PrimaryWorkSurface.cs |
77 | Переключатель лобового якоря Intercom / Editor (ADR 0120). |
MainWindowViewModel.SettingsReactive.cs |
228 | Реакции на изменение полей настроек и ключей API: диск, автономный агент, панели. |
MainWindowViewModel.ShellConstruction.cs |
272 | Конструктор и композиция shell: дочерние VM, шина, DAP/HCI, топология presentation (ADR 0017). |
MainWindowViewModel.ShellSession.cs |
192 | Wave 2 этап 3: ShellChromeViewModel + прокси на MWVM для привязок и presentation. |
MainWindowViewModel.ShellState.AiProviders.cs |
58 | Часть ShellState: режим ИИ и облачные ключи привязаны к нижнему приложению/чату. |
MainWindowViewModel.ShellState.AutonomousAgentStripe.cs |
64 | Часть ShellState: полоса/карточки автономной задачи агента, безопасности, LOC и сводки тестов для IDE Health. |
MainWindowViewModel.ShellState.ChatAndSessionConfig.cs |
34 | Часть ShellState: ввод чата и конфиг MCP/ACP для автономной сессии. |
MainWindowViewModel.ShellState.cs |
12 | Состояние раскладки главного окна: три зоны внимания в MainGrid (PFD · Forward · MFD), см. ADR 0021 и docs/ui-ux/cascade-ide-ui-layout-v1.md. Терминал, сборка, Git и пр. — во вторичном контуре колонки MFD (MfdShellView / MfdShellPageStack); отдельной строки «нижней панели» на всю ширину под сеткой нет. Режим ИИ и облачные ключи — MainWindowViewModel.ShellState.AiProviders.cs; чат и MCP/ACP — MainWindowViewModel.ShellState.ChatAndSessionConfig.cs; полоса агента / тесты для IDE Health — MainWindowViewModel.ShellState.AutonomousAgentStripe.cs; регион MFD/PFD и страницы контура — ShellState.RegionAndContour.cs; режим/UI-сессия и полосы — ShellState.UiSessionChrome.cs; модель/Kroki — ShellState.ModelPullMarkdown.cs. |
MainWindowViewModel.ShellState.ModelPullMarkdown.cs |
20 | Часть MainWindowViewModel: pull модели и превью Markdown / Kroki. |
MainWindowViewModel.SolutionBuild.cs |
125 | Загрузка решения, Ollama install; сборка — MainWindowBuildSessionViewModel. |
MainWindowViewModel.SolutionExplorer.cs |
112 | Solution Explorer: фильтр, compact, track active, индекс файлов (ADR 0167). |
MainWindowViewModel.SolutionWarmup.cs |
61 | Solution warm-up: оркестратор фаз загрузки решения, лампа статуса и подписка на DataBus (ADR 0141). |
MainWindowViewModel.StartupProject.cs |
140 | Стартовый проект. |
MainWindowViewModel.UiGitWorkspace.cs |
126 | Git + workspace UI. |
MainWindowViewModel.ViewBridge.cs |
68 | Колбэки и провайдеры, которые View подставляет в главный VM (диалоги, UI automation). |
MainWindowViewModel.WebAiPortal.cs |
29 | Страница MFD «веб-портал» (ADR 0108): URL, результат последнего вызова моста, WebAiPortalCommandBridge. |
MainWindowViewModel.WorkspaceNavigationMap.Bridge.cs |
50 | Мост к WorkspaceNavigationMapViewModel (ADR 0039): host + lifecycle, без прокси-привязок. |
MainWindowViewModel.WorkspaceSplitters.cs |
23 | Сплиттеры рабочей области (MainGrid, обозреватель решения, Git и т.д.): режим «взлёт» — блокировка перетаскивания. |
IdeMcpCommandExecutor (диспетчер MCP → IIdeMcpActions)
| Файл | Строк (≈) | Содержание |
|---|
Техдолг по главному VM (не блокирует развитие): крупные куски MCP по-прежнему рядом с VM (IdeMcpActions.*); дальнейший вынос — по мере изменений. Странглер-фасад и уведомления UI: связка списка HybridIndexDependentPresentationNames и [NotifyPropertyChangedFor] у _hybridIndexLast закреплена тестом HybridIndexPresentationNotificationsConsistencyTests; пачечные вызовы OnPropertyChanged для Workspace Health IDE, док-инструментов в слотах и глифов брейкпоинтов сведены к статическим массивам имён и циклу в partial-файлах главного VM. План B по примитивам MCP для текущего объёма закрыт: координаты/пути редактора (EditorTextCoordinateUtilities), разбор JSON панели отладки (McpDebugPayloadParsing), чтение полей args MCP (McpCommandJsonArgs в Services/) — вне ViewModels/. Готовность окружения (ADR 0023): полный список строк — EnvironmentReadinessSnapshotBuilder.BuildAllRowsAsync в Features/EnvironmentReadiness/Application/ (DAL/канал CCU, ADR 0102); обновление страницы — EnvironmentReadinessRefreshOrchestrator (канал → compositor на UI), главный VM вызывает только оркестратор. Cursor ACP (ADR 0102): разрешение пути к cursor-agent, stdio-процесс и fs в пределах workspace — Features/CursorAcp/DataAcquisition/; сессия ACP и IAcpClient — Services/CursorAcp/CursorAcpChatConnection. Настройки (ADR 0102): пути к %LocalAppData%\CascadeIDE\, hotkeys и чтение внешнего JSON MCP — Features/Settings/DataAcquisition/ (UserSettingsPaths, TextFileReadWrite, HotkeyTomlLoader); сериализация и merge display — Services/SettingsService. Workspace (ADR 0102): загрузка .sln/.csproj, дерево проекта, поиск .sln у файла, папка-workspace, разрешение workspace_path для отладки — Features/Workspace/DataAcquisition/; обход SolutionItem для MCP/JSON — Features/Workspace/Application/McpSolutionTree.
Целевая карта срезов
| Срез | Что сейчас (где живёт) | Целевое размещение | Примечание |
|---|---|---|---|
| Git | Оркестрация и MCP на MainWindowViewModel; вкладка — GitPanelViewModel |
Features/Git/GitPanelViewModel + GitStatusRow в Models/ |
MainWindow передаёт workspace, LoadSolution, MCP commit/push; телеметрия полосы частично в UiGitWorkspace / ShellState |
| Инфраструктура git | Process + git внутри VM |
Services/IGitCommandRunner / GitCommandRunner |
Общий для панели, полосы телеметрии, MCP GitCommit/GitStatus |
| Сборка / вывод | Текст вывода в BuildOutputPanelViewModel; оркестрация сборки в MainWindowViewModel |
Features/Build/BuildOutputPanelViewModel |
Вкладка Build output |
| Терминал | TerminalPanelViewModel |
Features/Terminal/TerminalPanelViewModel |
Вкладка Terminal (телеметрия Power на той же вкладке — пока на главном VM) |
| Чат | История, ввод, SendChat, стриминг в ChatPanelViewModel |
Features/Chat/ChatPanelViewModel + ChatMessageViewModel |
Правая колонка; провайдер/модель и контекст редактора — замыкания на MainWindowViewModel |
| Инструментирование | События, таймлайн, агент, тесты, MCP-отладка | Features/Instrumentation/InstrumentationPanelViewModel |
В разметке — DataContext="{Binding InstrumentationPanel}" + x:DataType; главный VM не дублирует поля |
| Решение и документы | SolutionRoots, OpenDocuments, dock |
SolutionWorkspaceViewModel + DocumentsWorkspaceViewModel (Features/Workspace, Features/Documents); MWVM — композитор и SolutionLoadSessionApplyProjection.IHost |
Ядро сессии IDE |
| MCP-мост | IIdeMcpActions на MainWindowViewModel |
Остаётся на главном VM; делегирование в сервисы/дочерние VM | Контракт стабилен |
Фазы
Фаза 0 — инфраструктура (сделано)
IGitCommandRunner+GitCommandRunner: единая точка запускаgitпо рабочему каталогу.MainWindowViewModelиспользует runner для телеметрии и MCP (RunGitCommandAsync).
Фаза 1 — Git-панель (сделано)
- Состояние и команды вкладки Git — в
Features/Git/GitPanelViewModel. Зависимости:IGitCommandRunner,GetWorkspacePath,IIdeMcpActions,LoadSolution,RefreshGitSummaryAsync. MainWindowViewModel: свойствоGitPanel, видимость вкладки (IsGitPanelVisible) и настройки остаются на главном VM; при сменеSolutionPathвызываютсяGitPanel.RefreshRepositoryFlagAsync()и при открытой вкладке —RefreshGitPanelAsync().- Страница Git в MFD (
MfdShellPageStack): контент страницы сDataContext="{Binding GitPanel}"(нет отдельногоBottomPanelViewво Flight).
Фаза 2 — Build output и Terminal (сделано)
Features/Build/BuildOutputPanelViewModel— текст вывода сборки и связанных операций (BuildOutput). Видимость вкладки и команды сборки остаются вMainWindowViewModel; он по-прежнему заполняетBuildOutputPanel.BuildOutput(как для Git — оркестрация снаружи).Features/Terminal/TerminalPanelViewModel—TerminalControlModel(AvaloniaTerminal),EnsureSessionStarted(),AppendOutput()для ACP; ConPTY/redirected черезIntegratedTerminalSessionHost.- Страницы Terminal и Build output в колонке MFD (
MfdShellPageStack):DataContext="{Binding TerminalPanel}"иDataContext="{Binding BuildOutputPanel}"; телеметрия Power на странице Terminal остаётся наMainWindowViewModel. (В старой топологии использовались привязки вBottomPanelView.)
Фаза 3 — Chat (сделано)
Features/Chat/ChatPanelViewModel—ChatMessages,ChatInput,IsChatLoading,SendChatCommand, стриминг черезAiProviderManager. В конструктор передаются замыкания: активный провайдер, модель Ollama, минимальный контекст,CurrentFilePath,EditorText.MainWindowViewModel: свойствоChatPanel,IsChatPanelExpanded, выбор провайдера/модели и быстрые команды, подставляющие текст вChatPanel.ChatInput.ChatPanelView: блоки сообщений и ввода сDataContext="{Binding ChatPanel}"(свёртка панели и пр. — по-прежнему на главном VM).
Фаза 4 — Instrumentation (сделано)
Features/Instrumentation/InstrumentationPanelViewModel—AgentToolCalls,AgentTraceSteps,EventTimeline,PowerTaskQueueItems,TestResultsOutput, стек/переменные MCP-отладки;AppendAgentTraceStep(потокобезопасно).ViewModels/—DebugStackFrameViewModel,DebugVariableViewModel,AgentTraceStepViewModelвынесены в отдельные файлы (типы дляx:DataTypeбез изменений).MainWindowViewModel: свойствоInstrumentationPanel, подписка наIsDebugPanelVisibleдля строк телеметрии полосы;IIdeMcpActions.ShowDebugStateиRunTestsпишут вInstrumentationPanel. Дочерние виды биндят блоки кInstrumentationPanel, без прокси на главном VM.
Фаза 5 — события, UI-поток, нагрузка (основное сделано)
Цель и порядок шагов зафиксированы в ADR: 0004 (маршалинг UI), 0007 (сигналы, батчинг), 0005 (отложенные идеи расширяемости). Краткий навигатор — architecture-policy.md. Кратко:
- Явные границы между источниками сигналов и подписчиками (без лишней связности между подсистемами).
- Единая политика маршалинга на UI-поток для обновлений после фона.
- Точечно — очереди/батчинг там, где поток данных давит на UI.
Сделано по п. 2: контракт IUiScheduler, реализация AvaloniaUiScheduler (единственное место с прямым Dispatcher.UIThread), доступ из кода через UiScheduler.Default. Вызовы переведены с размазанного Dispatcher.UIThread на UiScheduler.Default; для удобства — GlobalUsings.cs с global using CascadeIDE.Services.
Сделано по п. 3 (диагностики): WorkspaceDiagnosticsCoordinator — debounce для Roslyn без LSP; CSharpLspDiagnosticsHost — коалесcing DiagnosticsChanged (один Post на серию textDocument/publishDiagnostics, по тому же принципу, что BuildOutputPanelViewModel.Append).
Опционально позже по фазе 5: при профилировании — ещё батчинг на стороне подписчиков Problems; шина событий / слабее связность (п. 1) — только если вырастет число кросс-подсистемных подписок.
Сделано по MCP и UI-потоку (дыра закрыта): единый вход IIdeMcpActions.ExecuteCommandAsync в MainWindowViewModel маршалит выполнение на UI через IUiScheduler.InvokeAsync(Func<Task<string>>); добавлен перегруз InvokeAsync<T>(Func<Task<T>>) в IUiScheduler / AvaloniaUiScheduler. Так MCP stdio и автономный агент не вызывают хендлеры IdeMcpCommandExecutor с фонового потока. Долгие операции по-прежнему не блокируют UI: внутри IIdeMcpActions используются ConfigureAwait(false), Task.Run, Post на панели вывода и т.д.
План: связность MainWindowViewModel / MCP (не фаза 5, отдельная дорожка)
| Шаг | Смысл |
|---|---|
| A — сделано | Один канал маршалинга MCP → UI (ExecuteCommandAsync + InvokeAsync<Task<string>>), документация на входе executor. |
| B — примитивы (текущий объём закрыт) | Разбор аргументов JSON и вспомогательная логика без UI — в Services/ (EditorTextCoordinateUtilities, McpDebugPayloadParsing, McpCommandJsonArgs); IdeMcpCommandExecutor остаётся диспетчером к IIdeMcpActions. |
| B — дальше по мере роста | Новые фичи по возможности — в сервисы с узким интерфейсом; VM — оркестратор и IIdeMcpActions, без раздувания «командными» методами. |
Не блокирует продукт: выделение SolutionWorkspaceViewModel, MEF/плагины, опциональный дополнительный батчинг Problems — см. политику и таблицу срезов выше.
Сделано: коалесcing обновлений BuildOutput в BuildOutputPanelViewModel.Append (один Post на серию вызовов; Set/Clear/FlushPending инвалидируют отложенный flush); после BuildSolutionAsync вызывается FlushPending, чтобы текст и флаг сборки были согласованы до чтения MCP.
Не в этой фазе: MEF и загрузка плагинов из каталога — зафиксировано как отложенная идея в политике.
Feature archetype v1 (DoD новой фичи)
Чеклист «куда класть код» и шаблон каталогов — design/feature-archetype-v1.md. IDE chrome tokens — design/ide-chrome-tokens-v1.md. Цель: развитие в том же ритме, что CDS/CCU/DAL/IDS, без роста MWVM по умолчанию.
Правила на время миграции
- Новый код фич — в срезе
Features/<Имя>/, не в конецMainWindowViewModel. См. feature-archetype-v1.md. Панельный VM вешаем на UI черезDataContext="{Binding ИмяПанели}"(и при compiled bindings —x:DataTypeна том же элементе), а не через десятки прокси-свойств на главном VM. - Повторное использование git — только через
IGitCommandRunner(или обёртки), не копироватьProcess. - Изменения в
MainWindowViewModelпо старым фичам — по возможности сопровождать микро-выносом в сервис/панельный VM. - Добыча внешних данных (fs/process/json/toml/wire) — в Data Acquisition Layer (
Features/<Feature>/DataAcquisition), а не вCockpit/ComputingUnits/*(см. ADR 0102). - Крупную бизнес-логику в
MainWindowViewModelне наращивать: сначала оркестратор/политика вFeatures/<>с узким контрактом; MV — только проверки контекста окна, вызов и обновление UI/шины (см. раздел «Стратегия: опора на целевой каркас» выше).
Wave 1: MCP thinning (практический срез)
Цель волны: уменьшить плотность логики в MainWindowViewModel.IdeMcpActions.*, сохранив MainWindowViewModel как orchestration-слой.
- Вынести из
IdeMcpActions.*подготовку payload/парсинг/валидацию в feature-application сервисы с узкими интерфейсами. - Оставить в
MainWindowViewModelтолько:- проверку preconditions контекста окна;
- вызов соответствующего application-сервиса;
- публикацию DataBus/UI обновлений.
- Порядок первой волны:
IdeMcpActions.Editor->IdeMcpActions.Navigation->IdeMcpActions.BuildTest. - Первый срез выполнен: JSON для
get_open_document_text(поиск вкладки по пути черезIdeMcpEditorOrchestrator.BuildGetOpenDocumentTextResponse), якорь control-flow дляget_code_navigation_context(IdeMcpNavigationOrchestrator.ResolveControlFlowLineColumn), payloadget_solution_files(IdeMcpBuildTestOrchestrator.BuildSolutionFilesJson). - Второй срез:
HybridIndexScopeResolverвFeatures/HybridIndex/Application/иIdeMcpHybridIndexScopeдля MCPcodebase_index_*(TryResolveForCodebaseIndexCommand— без дубля логики в VM); MCP agent-notes черезIdeMcpAgentNotesOrchestrator;ResolveHybridIndexScopeв VM — делегирует ресолверу. Ошибки HCI и ping/rebuild хоста вынесены в оркестраторы (v1.38); дальнейший вынос build/test/UI — точечно при росте API. - Третий срез:
Services.IdeMcpSolutionPathAvailability.IsRunnableSolutionFileдля MCP build/test/code-cleanup (I/O вне статического оркестратора, CASCOPE031); мутации UI тестов —IdeMcpBuildTestOrchestrator.IdeMcpTestRunInstrumentationMutation. - Четвёртый срез: единый контур
BuildStateChanged→ DataBus →RebuildIdeHealth(ADR 0099): локальная сборка решения и MCP code cleanup не шлют «сырой»_ideDataBus.Publishбез пересборки полосы; MCP-пути послеConfigureAwait(false)используютPublishIdeBuildStateOnUiAsync. - Пятый срез: MCP git целиком на
IdeMcpGitWorkspaceSession(Features/IdeMcp/Application/), VM — только workspace +RefreshGitSummaryAsync; список команд preflight-fix — приватная константа в сессии (CASCOPE030: не статическое поле в оркестраторе). - Шестой срез:
IdeMcpIdeStateUiCapture+BuildIdeStatePayload(capture, diagnostics);get_ide_state— diagnostics вне UI, снимок UI однимCaptureIdeMcpIdeStateUi(включая CDS черезBuildCockpitSurfaceSnapshot). - Седьмой срез:
IdeMcpDapSnapshotUiPlan/IdeMcpDebugOrchestrator.BuildDapSnapshotUiPlanдляApplyDapDebugSnapshotToUi(безFile.Existsв Application, CASCOPE031);get_debug_snapshot— сериализация без очереди на UI (GetSnapshotпод lock).
Wave 1: UI clusters thinning
Цель волны: сократить связность крупных partial-кластеров MainWindowViewModel без big-bang.
- Кластер
Presentation*:- удерживать вычисления раскладки/видимости в compositor/policy-сервисах;
- на VM оставить свойства-проекции и orchestration вызовы.
- первый срез (v1.40):
MainWindowPresentationSurfaceProjection(Features/Shell/Application) — заголовок окна, mount-style/топология, контур MFD, телеметрия-подписи, безопасность агента, mount-контекст IDE Health; плейсхолдеры риска/результата и дефолты в ShellState.AutonomousAgentStripe через константу проекции. - второй срез (v1.40b):
IdeHealthStripPresentationProjection— строки полосы IDE Health (build/tests/debug line + cockpit-short) изIdeHealthInputSnapshot?; геттерыMainWindowViewModel.Presentationтолько проксируют последний снимок. - третий срез (v1.40c): кластер
PresentationLayoutразнесён на partial: топология/MainGrid (PresentationLayout.cs),PresentationLayout.HostShell,PresentationLayout.HostWindowBounds,PresentationLayout.CockpitSurfaceSnapshot(CDS-сборка без изменения логики). - четвёртый срез (v1.40d):
MainWindowPresentationCapabilitiesProjection— булевы цепочки и подписи изUiModeCapabilities(IDE Health strip / EICAS chrome / instrumentation / risk-result карточки / Skia overlay / safety ordinal / LOC-бейдж); тестыMainWindowPresentationCapabilitiesProjectionTests.
- Кластер
ShellState:- состояния панелей и режимов — в отдельные state-модули по доменам, не в один monolith-файл.
- четвёртый срез:
MainWindowViewModel.ShellState.AiProviders.cs— режим ИИ (AiMode, облачный провайдер, вычисляемые флаги выбора) и поля API-ключей; геометрия регионов и видимость страниц MFD после v1.39 —ShellState.RegionAndContour. - пятый срез:
MainWindowViewModel.ShellState.ChatAndSessionConfig.cs— клавиша отправки чата, thinking/минимальный контекст, JSON внешних MCP,AcpAutoInjectIdeMcp. - шестой срез:
MainWindowViewModel.ShellState.AutonomousAgentStripe.cs— активная задача агента, риск/результат/шаг,SafetyLevel, LOC-бейдж, сводка/бейдж тестов для полосы IDE Health. - седьмой срез (v1.39): enum
CascadeIDE.Models.Shell.CommandPaletteHostи partialShellState.RegionAndContour/ShellState.UiSessionChrome/ShellState.ModelPullMarkdown; «базовый»ShellState.csсведён к краткой сводке + привязкам текстов вторичных групп редакторов.
- Кластер
WorkspaceNavigationMap:- graph/data трансформации — в сервисы/CCU;
- в VM оставить binding-state и команды поверхности.
- Первый срез (карта PFD):
CodeNavigationMapPresentationProjection+ статическиеCodeNavigationMapSettings.ViewWantsList/ViewWantsGraph; биндинги list/graph/бейдж/has-related вMainWindowViewModel.WorkspaceNavigationMapделегируют в проекцию. - Второй срез:
WorkspaceNavigationMapContextJsonBuilder(ветвление related / subgraph / control-flow JSON внутри фонового refresh) иCodeNavigationMapViewportPolicy(пороги ширины viewport мини-карты); тестыWorkspaceNavigationMapContextAndViewportTests. - Третий срез:
WorkspaceNavigationMapRefreshComposer— разбор JSON refresh, композиция сцены + trace-flow, related-строки; снимок CDS для control-flow собирается на UI-потоке вместе с контекстом refresh и передаётся в композитор какCockpitSurfaceState(без чтения VM с пула); тестыWorkspaceNavigationMapRefreshComposerTests. - Четвёртый срез (v1.40e): partial
MainWindowViewModel.WorkspaceNavigationMap.Refresh— debounce、RunWorkspaceNavigationMapRefreshAsyncи viewport width; файл привязок/команд карты (WorkspaceNavigationMap.cs) укорочен до состояния и проекций.- пятый срез (v1.40f):
MainWindowPresentationSurfaceProjection— видимость сплита main grid (IsMainGridSplitColumnVisible), флаги Skia-mount IDE Health (колонка / окно-хост),ResolveInstrumentMountStyleForSlot; отдельноMainWindowPresentationDapProjectionдля паузы/«running» DAP; геттерыMainWindowViewModel.Presentationтолько делегируют; тестыMainWindowPresentationDapProjectionTestsи доп. кейсы вMainWindowPresentationSurfaceProjectionTests. - шестой срез (v1.40g):
IMainWindowHostSurfaceInput(Cockpit/Composition/HostSurface) —MainWindowHostSurfaceProjectionпринимает контракт вместо ссылки наMainWindowViewModel; реализация на VM через partial; тестMainWindowHostSurfaceProjectionTests.
- пятый срез (v1.40f):
- Кластер Solution / Build / Startup / UiMode (завершение Wave 1 UI, v1.45–v1.48):
StartupProjectRefreshProjection— восстановление стартового.csprojпослеLoadSolution;MainWindowViewModel.StartupProject— делегирование.SolutionLoadUiApplyProjection— первая страница MFD после загрузки решения;MainWindowViewModel.SolutionBuild(LoadSolutionAsync).MainWindowBuildSolutionPrepProjection—CanBuild/ prep заголовка и страницы Build; сборка по-прежнему черезDotnetSolutionChunkedBuildOrchestrator.UiModeLayoutApplyProjection— план раскладки + persist workspace;ApplyUiModeLayoutвUiGitWorkspace.
Wave 1 — статус (текущий объём закрыт)
Фазы 0–5 и Wave 1 (MCP thinning + UI clusters thinning по плану v1.15–v1.48) считаются выполненными для зафиксированного scope strangler: главный VM остаётся композитором (подписки, дочерние VM, IdeMcp property), но крупные кластеры вынесены в Features/*/Application оркестраторами/проекциями.
Wave 2 — Big Bang MCP (v1.53, этап 1)
Цель: убрать реализацию IIdeMcpActions с MainWindowViewModel — только композиция и public IIdeMcpActions IdeMcp => _ideMcpHost.
Сделано (этап 1):
MainWindowIdeMcpHost(Features/IdeMcp/Application/, partial’ы бывшихMainWindowViewModel.IdeMcpActions.*) — единственная реализацияIIdeMcpActions.MainWindowViewModel.McpHostBridge— internal-доступ к приватным полям/методам VM для host (git, editor providers, DataBus, breakpoints, debug stack).IdeMcpCommandExecutorпринимает(MainWindowViewModel vm, IIdeMcpActions actions); generated/handlers вызывают_actions, не cast VM.ProtocolDocGenгенерирует_actionsв pass-through хендлерах.- Call sites:
App.axaml.cs(MCP stdio),AgentContractHeadlessRuntime, hotkeys, command palette, Intercom, Git panel (IdeMcp), DAP callback →_ideMcpHost.ApplyDapDebugSnapshotToUi. - RelayCommand превью Markdown остались на MWVM (
MainWindowViewModel.IdeMcpUiRelayCommands.cs).
Этап 2 (v1.54):
EditorWorkspaceViewModel(Features/Editor/) —CurrentFilePath,EditorText, selection,IsLoadingCurrentFile, markdown preview flags.- MWVM — прокси-свойства + ретрансляция
PropertyChanged(Views/MCP без массовой правки).
Этап 3 (v1.55):
ShellChromeViewModel(Features/Shell/) — регионы MainGrid, видимость MFD-страниц,UiMode,EditorGroupCount,IsBuilding,CurrentMfdShellPage, …ShellChromePresentationNotifyMap— presentation-зависимости на MWVM (бывшиеNotifyPropertyChangedForна shell-полях).- MWVM —
Shell+ прокси +OnShellChromePropertyChanged; reactive side-effects (настройки, MFD-навигация, bloom UI mode) вMainWindowViewModel.ShellSession. - Удалены
MainWindowViewModel.ShellState.RegionAndContour/UiSessionChrome(поля перенесены).
Этап 4 (v1.56):
- Shell: layout/MFD/UI mode RelayCommand →
ShellChromeViewModel.Commands.*; MWVM —MainWindowViewModel.FeatureCommandProxies(палитра, MCP, hotkeys без смены имён команд). - Documents: вкладки/группы →
DocumentsWorkspaceViewModel.Commands;CloseDocumentAPI →CloseDocumentByPath. - Safety L1–L3 — пока на MWVM (
RelayCommands.UiMode). - Удалены
RelayCommands.Layout/RelayCommands.Documents;ToggleMfdRegionExpandedубран изSolutionBuild.
Этап 5 (v1.57):
- Application shell:
MainWindowApplicationShellViewModel— меню (открыть решение/папку/файл), темы, язык UI, окна-хосты; прокси команд на MWVM. - Debug:
MainWindowDebugSessionViewModel— F5/attach/step/stop;DebugLaunchInteractiveAsync→Debug.*;StateChanged→Debug.NotifyRelayCommandsChanged(). - Build:
MainWindowBuildSessionViewModel—BuildSolutionAsync,HideBuildOutput; bridgeHostDotnetRunner. - Editor slice:
EditorWorkspaceViewModel.DebugGlyphs(брейкпоинты,DebugPosition*),EditorWorkspaceViewModel.Hud(баннер диагностик/вхождений); прокси на MWVM. - Удалены
RelayCommands.Shell,RelayCommands.Debug; build-команды убраны изSolutionBuild; удаленыBreakpoints.cs,EditorHud.csна MWVM. ShowDebugInfoAsync,GetWorkspacePath— internal на host; тесты MCP →vm.IdeMcp.
Этап 6 (v1.58):
- Shell:
ShellChromeViewModel.Commands.Safety(L1–L3),Commands.MarkdownPreview(MFD preview / отдельное окно). - Editor:
EditorWorkspaceViewModel.DebugHints,InlineHints,StabilizedInput; прокси на MWVM. - Удалены
RelayCommands.UiMode,IdeMcpUiRelayCommands,EditorDebugHints/EditorInlineHints/EditorStabilizedInputна MWVM. - Bridge:
HostUpdateCodeNavigationMapCaretOffset.
Дальше: метрики LOC в таблице partial MWVM; крупные кластеры (navigation map, HCI) — Plan B по мере фич.
Backlog MWVM (закрыт, v1.49–v1.52):
- v1.49 —
SolutionWorkspaceViewModelвFeatures/Workspace/;SolutionLoadSessionApplyProjection— применение загрузки решения (дерево + сброс редактора + MFD); тестыSolutionLoadSessionApplyProjectionTests. - v1.50 —
IdeMcpCommandExecutorперенесён вFeatures/IdeMcp/Execution/(диспетчер внеViewModels/; генераторProtocolDocGenиCascadeIDE.csprojсинхронизированы). MWVM по-прежнему владеет экземпляром и маршалит UI. - v1.51 — Точечный вынос MCP/UI при росте API — правило на поддержку (feature-archetype-v1.md); не big-bang.
- v1.52 — MEF/плагины и опциональный дополнительный батчинг Problems — вне scope (политика ADR 0009 / фаза 5 «основное сделано»); коалесcing BuildOutput и Diagnostics уже в продукте.
Новые фичи — по feature-archetype; MWVM не раздуваем без выноса.
Версионирование
- v1 — карта срезов и фазы 0–4.
- v1.1 — фаза 1 (Git-панель) отмечена как выполненная.
- v1.2 — фаза 2 (Build output / Terminal как отдельные VM + привязки во Flight — страницы
MfdShellPageStack; исторически упоминалсяBottomPanelView). - v1.3 — фаза 3 (
ChatPanelViewModel, привязки вChatPanelView+MainWindow.axaml.cs). - v1.4 — фаза 4 (
InstrumentationPanelViewModel, модели трассы/отладки в отдельных файлах, прокси на главном VM). - v1.5 — инструментирование без прокси: разметка с
DataContextнаInstrumentationPanel, правила миграции уточнены. - v1.6 — фаза 5 (события, UI-поток, батчинг); MEF/плагины вынесены в отложенные идеи политики.
- v1.7 — фаза 5: введены
IUiScheduler/UiScheduler.Default, маршалинг UI сосредоточен вAvaloniaUiScheduler. - v1.8 — фаза 5:
BuildOutputPanelViewModel.Appendкоалесит обновления привязки;FlushPendingпосле сборки решения. - v1.9 — фаза 5:
IUiScheduler.InvokeAsync<T>(Func<Task<T>>); MCPExecuteCommandAsyncвсегда на UI; план шага B по выносу логики из VM. - v1.10 — фаза 5: коалесcing
DiagnosticsChangedвCSharpLspDiagnosticsHost; фаза 5 отмечена как «основное сделано», опциональные пункты вынесены отдельно. - v1.11 — раздел «Срез MainWindowViewModel»: карта partial-файлов и уточнение текущего состояния (не один
.csна ~3k строк). - v1.12 — обозреватель решения: вложенность файлов как в VS —
<DependentUpon>из.csproj+ эвристика для SDK-glob (Stem.*.cs→ родительStem.csв той же папке). Формат.slnвложенность не задаёт. - v1.13 — рефакторинг: дерево файлов проекта вынесено в
Services/ProjectFileTreeBuilder.cs,SolutionParser— только загрузка решения и сортировка узлов. - v1.14 — план B (примитивы MCP):
McpCommandJsonArgsвServices/вместо вложенного класса вIdeMcpCommandExecutor; генераторProtocolDocGenиIdeMcpCommandExecutor.Generated.g.csсинхронизированы; тесты на контракт чтения args. - v1.15 — зафиксирован слой Data Acquisition Layer (fs/process/parse outside CCU), добавлены wave-планы
MCP thinningиUI clusters thinningдля следующей итерации strangler. - v1.16 — готовность окружения:
EnvironmentReadinessSnapshotBuilderиEnvironmentReadinessRefreshOrchestratorвFeatures/EnvironmentReadiness/Application/; сценарий refresh вынесен изMainWindowViewModel; CASCOPE020 / CASCOPE021 (граница CCU) — severity Error при чистом baseline. - v1.17 — DAL-завершение среза Environment Readiness (ADR 0102):
EnvironmentReadinessExecutablePathProbe,EnvironmentReadinessEnvSnapshot/WellKnownEnv,EnvironmentReadinessPathAcquisition,EnvironmentReadinessFileFactsвFeatures/EnvironmentReadiness/DataAcquisition/; I/O и классификация путей внеApplication/. - v1.18 — Cursor ACP DAL:
CursorAcpAgentPath,CursorAcpWorkspaceFileAccessвFeatures/CursorAcp/DataAcquisition/;global usingдля этого пространства имён;CursorAcpChatConnectionбез прямого I/O путей агента и workspace-файлов в обработчиках ACP. - v1.19 — Settings DAL:
UserSettingsPaths,TextFileReadWrite,HotkeyTomlLoaderвFeatures/Settings/DataAcquisition/;McpExternalServersJsonResolverчитает файл через DAL. Workspace:SolutionParser,ProjectFileTreeBuilder,SolutionFileLocator,FolderWorkspaceTreeBuilder,DebugWorkspacePath—Features/Workspace/DataAcquisition/;McpSolutionTree—Features/Workspace/Application/;global usingдля Settings и Workspace;SolutionFileLocatorне зависит отEditorTextCoordinateUtilities(локальное сравнение путей). - v1.20 — Wave MCP thinning (первый срез): оркестраторы
IdeMcpEditorOrchestrator/IdeMcpNavigationOrchestrator/IdeMcpBuildTestOrchestrator+ тестыIdeMcpOrchestratorThinningTests. - v1.21 — MCP thinning второй заход:
HybridIndexScopeResolver,IdeMcpHybridIndexScope,IdeMcpAgentNotesOrchestrator; тестыHybridIndexScopeAndIdeMcpScopeTests. - v1.22 —
IdeMcpSolutionPathAvailability,IdeMcpTestRunInstrumentationMutation; тестыIdeMcpSolutionPathAvailabilityTests. - v1.23 —
PublishIdeBuildStateOnUiAsync; MCPRunCodeCleanupAsyncобрамлёнBuildStateChanged;BuildSolutionAsync—PublishToIdeDataBusAndRebuildвместо «тихой» публикации в шину. - v1.24 —
IdeMcpGitWorkspaceSession(+ тестыIdeMcpGitWorkspaceSessionTests);MainWindowViewModel.IdeMcpActions.Git— делегирование в сессию. - v1.25 —
IdeMcpIdeStateUiCapture;IdeMcpWorkspaceOrchestrator.BuildIdeStatePayloadпо снимку; тест вIdeMcpOrchestratorThinningTests. - v1.26 — DAP UI-план + MCP
GetDebugSnapshotAsyncбезUiScheduler.InvokeAsync. - v1.27 — Wave UI clusters:
CodeNavigationMapPresentationProjection,CodeNavigationMapSettings.ViewWants*; тестыCodeNavigationMapPresentationProjectionTests. - v1.28 — Wave UI clusters:
WorkspaceNavigationMapContextJsonBuilder,CodeNavigationMapViewportPolicy; тестыWorkspaceNavigationMapContextAndViewportTests. - v1.29 — Явная стратегия целевого каркаса (CDS / CCU / DAL / IDS), приоритет упрощающего буфера вокруг
MainWindowViewModelи правило 5 раздела «Правила на время миграции» — чтобы strangler совпадал с реальным приближением к устоявшейся линии слоёв, а не откладывался потоком фич. - v1.30 — Wave UI clusters:
WorkspaceNavigationMapRefreshComposer(пост-JSON конвейер карты PFD); тестыWorkspaceNavigationMapRefreshComposerTests. - v1.31 — Тот же срез: CDS-снимок для trace-flow на карте захватывается на UI до фонового парсинга/компоновки, контракт
Compose(.., CockpitSurfaceState?)безFuncс пула. - v1.32 — Wave UI clusters: вынесен partial
MainWindowViewModel.ShellState.AiProviders(режим ИИ и облачные ключи) изShellState.cs. - v1.33 — Wave UI clusters:
MainWindowViewModel.ShellState.ChatAndSessionConfig(чат + MCP/ACP конфиг автономной сессии). - v1.34 — Wave UI clusters:
MainWindowViewModel.ShellState.AutonomousAgentStripe(полоса автономного агента + тесты/LOC для IDE Health). - v1.35 — Терминология раскладки: три зоны (PFD · Forward · MFD); терминал/сборка/Git — вторичный контур колонки MFD, не отдельная «нижняя панель». Уточнены xmldoc
ShellStateи флаги страниц MFD. - v1.36 — Переименование:
IsBottomPanelVisible→IsMfdContourContentVisible(флаги контента стека вторичного контура MFD). - v1.37 — Разметка и снимки:
Border#BottomPanelShell→MfdContourStackHost(MfdShellView.axaml); ключlayout_regionsв MCP/DeepSnapshot обновлён; доки без отсылки к вымышленной «нижней панели» главного окна во Flight. - v1.38 — Wave MCP thinning (завершение волны в текущем объёме):
IdeMcpBuildTestOrchestrator— поверхность панели при missing solution / ошибке сборки;IdeMcpHostOrchestrator— JSONping/рестарт MCP;IdeMcpHybridCodebaseIndexOrchestrator— литералы ошибок иSerializeReindexFailed; дедупPublishIdeMcpTestRunMutationвIdeMcpActions.BuildTest. - v1.39 — Wave UI clusters: доменное разнесение
MainWindowViewModel.ShellState: регион/контур MFD (ShellState.RegionAndContour.cs), режим UI и сборка (UiSessionChrome.cs), Kroki/modelfetch (ModelPullMarkdown.cs); enum палитры вModels/Shell/CommandPaletteHost.cs(хост-окна + тесты пользуются изCascadeIDE.Models.Shell). - v1.40 — Wave UI clusters, кластер Presentation: статическая проекция
MainWindowPresentationSurfaceProjectionдля вычисляемых свойствMainWindowViewModel.Presentation, тестыMainWindowPresentationSurfaceProjectionTests. - v1.40b — тот же кластер:
IdeHealthStripPresentationProjection+ тестыIdeHealthStripPresentationProjectionTests; VM не дублирует разбор вложенного снимка в шести геттерах. - v1.40c —
MainWindowViewModel.PresentationLayout: несколькоPresentationLayout.*partial-файлов (топология, host-shell инвалидация, сохранённые bounds окон-хостов, CDS snapshot). - v1.40d —
MainWindowPresentationCapabilitiesProjection+ тесты; геттерыPresentationделегируют цепочки capabilities/Skia/safety/LOC. - v1.40e —
MainWindowViewModel.WorkspaceNavigationMap.Refresh: поток обновления карты отделён от partial с привязками PFD. - v1.40f — расширение
MainWindowPresentationSurfaceProjection(split/Mount-style/IDE Health mount) +MainWindowPresentationDapProjection; VM без локальных помощников резолва mount-style. - v1.40g —
IMainWindowHostSurfaceInput+ проекция host surface без типа VM; связность Cockpit → ViewModels ослаблена на границе shell/host кадра. - v1.40h — MCP
BuildAsync/RunCodeCleanupAsync: общий каркасWithIdeMcpPublishedBuildStateAsync(параBuildStateChangedна шину IDE Health, ADR 0099) вместо дублирующего try/finally вMainWindowViewModel.IdeMcpActions.BuildTest. - v1.40i — MCP UI automation:
IdeMcpUiAutomationOrchestrator—TryGetRemoveBreakpointNormalizedPath,ShouldSkipToggleBreakpointInEditor,InvokeStringResultOnUiAsync,EditChatAssistantMessageOnUiAsync;MainWindowViewModel.IdeMcpActions.UiAutomationкороче. - v1.40j — палитра команд: типы строки списка
IdeCommandPaletteRowKind/IdeCommandPaletteRowViewModelвынесены вViewModels/IdeCommandPaletteRowViewModel.cs;MainWindowViewModel.CommandPalette.csостаётся логикой фильтрации и исполнения. - v1.40k — Launch / MCP:
DebugLaunchByProfileMcpOrchestrator(Features/Launch/Application) — сценарийdebug_launchпоtarget_pathили профилю без длинного тела вMainWindowViewModel.StartupProject; HCI:HybridIndexHisPresentationProjection.LampItem+ тесты,MainWindowViewModel.HybridIndex— однострочный геттер. - v1.40l — Workspace:
SolutionLoadCrashLog(Features/Workspace/Application) — записьLoadSolutioncrash в.cascade-ide/crash-log.txtвнеMainWindowViewModel.SolutionBuild; штамп UTC черезInvariantCulture. - v1.41a — Launch / F5:
DebugLaunchForF5Orchestrator(Features/Launch/Application) — pre-resolve + MSBuild для F5 внеMainWindowViewModel.StartupProject;LaunchProjectPathResolver.NormalizeExistingProjectFileFullPath(DAL) — проверка существования стартового.csprojбезFile.Existsв Application-оркестраторе (CASCOPE031). - v1.41b — Палитра команд:
IdeCommandPaletteFilterOrchestrator/IdeCommandPaletteExecutionOrchestrator+CommandPaletteGoToAsyncHandle(Features/Search/Application) — фильтрация (каталог / melody / go-to + ripgrep) и исполнение выбора внеMainWindowViewModel.CommandPalette. - v1.41c — CascadeChord (ADR 0060):
CascadeChordIntentSession(Features/Shell/Application) — фаза, хвост, таймер и разбор клавиш;MainWindowViewModel.CascadeChord— привязки и туннель к сессии. - v1.41d — Presentation:
MainWindowPresentationSurfaceProjection.ComposeHostSurfaceFrame— сборкаMainWindowHostSurfaceFrameпоIMainWindowHostSurfaceInputи нормализованному UI-режиму внеMainWindowViewModel.Presentation. - v1.41e — Настройки:
ShellSettingsReactiveSideEffects(Features/Settings/Application) — длинные цепочки внешний MCP / autonomous, AI mode / cloud provider, HCI index dir + scope вместо тел вMainWindowViewModel.SettingsReactive. - v1.41f — Relay-команды: нарезка
MainWindowViewModel.RelayCommandsнаRelayCommands.Shell/Layout/Documents/UiMode(+RelayCommands.Debugбез изменений логики);ApplyMfdRegionExpanded/ApplyPfdRegionExpandedвместо прямых присваиваний (CASCOPE003). - v1.41g — MCP executor:
IdeMcpCommandExecutor.Handlers.Chromeразнесён наChrome.OutputFocus/Chrome.UiVisibility/Chrome.MenuToolbar(регистрация хендлеров без изменения поведения). - v1.41h — Главное окно: тело конструктора вынесено в
MainWindowViewModel.ShellConstruction; CASCOPE003 — в белом спискеShellConstruction(наряду сMainWindowViewModel.cs). - v1.41i — MCP executor:
IdeMcpCommandExecutor.Handlers.PowerDocumentsразнесён наPowerDocuments.FocusPowerAgent(фокус, автономность, чат, Ollama) иPowerDocuments.Documents(вкладки документов). - v1.41j — MCP
IIdeMcpActions:IdeMcpActions.BuildTestразнесён наBuildTest.Build(диагностики, дерево решения, сборка, structured, code cleanup) иBuildTest.Tests(тесты иPublishIdeMcpTestRunMutation). - v1.41k — MCP UI automation:
IdeMcpActions.UiAutomationразнесён наUiAutomation.EditorPreview(редактор, брейкпоинты, превью) иUiAutomation.Providers(подтверждения, тема, провайдеры контролов и чата). - v1.41l — MCP executor:
Handlers.DapDebug→DapDebug.LaunchAttach/DapDebug.Stepping;Handlers.Editor→Editor.ToolCatalog(статическийRegisterCore),FilesAndChat,StateContent,EditNavigation;Chrome.MenuToolbar→MenuToolbar.DialogsApp,ThemeLanguage,PanelsLayout;CascadeIDE.csproj—DependentUponдля вложенных partial. - v1.41m — Workspace:
BlankSolutionCreator(Features/Workspace/Application) — новое пустое.slnчерезdotnet new sln; меню Файл → Создать новое решение…, MCPcreate_new_solution_dialog, тестыBlankSolutionCreatorTests;MainWindowViewModel.TryCreateBlankSolutionAtPathAsync. - v1.41n — Роли слоёв: атрибут
[PresentationProjection](CascadeIDE.Contracts), анализаторLayerRoleConsistencyAnalyzer(CASCOPE032–042); проекции вFeatures/*/Applicationпереведены с[ComputingUnit]на[PresentationProjection]; оркестраторы палитры/F5/debug —[ApplicationOrchestrator]; I/O-исключения (ExpandedMarkdownFileExportProjection,StartupProjectDebugInferenceProjection) остаются на[ComputingUnit]. - v1.41o —
ShellSettingsPresentationProjection(былShellSettingsOrchestrator); CASCOPE039 не предупреждает MCP/application-фасады с[ApplicationOrchestrator]и делегированием в*Service(и разборомJsonElement/GraphDocument). - v1.42 — design/feature-archetype-v1.md + design/ide-chrome-tokens-v1.md; глобальные стили
cascadeSection/ UiKitCascadeSection,CascadeStatusChip; ADR 0076, 0121 → Accepted. - v1.43 — ADR 0120 (primary work surface Intercom/Editor) → Accepted · Implemented; IOP manifest синхронизирован.
- v1.44 — ADR 0119 (chat slash commands) → Accepted · Implemented (фазы A, A′, B); 0121 таблица зрелости обновлена.
- v1.45 — Strangler UI:
StartupProjectRefreshProjection; MWVMStartupProjectукорочен. - v1.46 —
SolutionLoadUiApplyProjection+MainWindowBuildSolutionPrepProjection; MWVMSolutionBuildбез прямогоFile.Existsдля CanBuild. - v1.47 —
UiModeLayoutApplyProjection;ApplyUiModeLayoutвUiGitWorkspace. - v1.48 — Wave 1 strangler MWVM (текущий объём) отмечен закрытым; backlog зафиксирован в разделе «Wave 1 — статус».
- v1.49 —
SolutionWorkspaceViewModel+SolutionLoadSessionApplyProjection(см. backlog MWVM). - v1.50 —
IdeMcpCommandExecutor→Features/IdeMcp/Execution/.