HCI в CascadeIDE: операционные заметки для агента и разработчика
Где задаётся конфигурация
- Диск: пользовательский
settings.toml(см.SettingsService.GetSettingsPath()), секция[hybrid_index]. Образец полей —docs/samples/settings.toml. - UI: окно «Настройки» главного окна CascadeIDE — блок Hybrid Codebase Index (HCI); те же значения пишутся в модель и при изменении переезжают в in-proc оркестратор без перезапуска IDE.
Смысл ключей (кратко)
| TOML / модель | Назначение |
|---|---|
enabled |
Мастер-переключатель: если выкл — фонового watcher нет; кнопка «Reindex now» на MFD всё равно выполняет один полный in-proc прогон HCI и публикацию статуса (независимо от включён ли watch по файлам). |
index_dir |
Относительный каталог под корнем workspace для SQLite и артефактов; должен совпадать с тем, что ожидает внешний MCP hybrid-codebase-index при совместном использовании. |
debounce_ms |
Задержка после событий FileSystemWatcher перед очередным reindex (ограничение 0…60000 в UI). |
watch_files |
Поднять watcher; выкл — только статус/hand poke. |
auto_reindex_on_solution_open |
При смене/открытии решения выполнить Poke, чтобы подтянуть свежесть без ожидания событий ФС. |
scope_mode |
workspace или workspace+solution: один ключ базы на workspace vs отдельные под-папки на решение под index_dir. |
pause_when_mcp_stdio_host |
При режиме чата mcp_only не держать фонового watcher (снижение конкуренции с stdio MCP). |
Как проверять состояние
- В IDE: вторичный контур MFD → страница INDEX/HCI (
show_hybrid_index_page), лампа OK/Caution, счётчик документов,FRESHNS, пути scope/БД в подсказках. - Снаружи: MCP
hybrid-codebase-indexк тому же workspace и тем же параметрам области — тот же смыслdatabasePath.
Те же операции через IDE MCP (паритет с внешним HCI MCP)
Из чата/host с подключённым CascadeIDE MCP агент вызывает те же идентификаторы, что у тулов hybrid-codebase-index: через ide_execute_command или прокси-тулы ide_codebase_index_*:
codebase_index_status— JSON статуса;codebase_index_search— гибридный поиск (аргументы как у внешнего MCP);codebase_index_explain— explain поhit_id;codebase_index_reindex— инкремент по умолчанию,full_rebuild: true— полная перестройка; после успешного прогона публикуетсяHybridIndexStateChangedдля MFD.
JSON против события шины. codebase_index_status/SerializeStatus(IndexStatus) — полный MCP-ответ (настройки, reindex-state и др. в DTO); в IDE DataBus идёт свёрнутое событие HybridIndexStateChanged из CCU (HybridIndexStateChangedUnit). Для автоматизации нужен MCP — см. кодовые summary на методе и юните; паритет по смыслу путей/БД, не побайтовое совпадение JSON ↔ payload шины.
Если не переданы workspace_path / solution_path, область берётся из текущего открытого решения с тем же ResolveHybridIndexScope, что оркестратор HCI (scope_mode в настройках).
Анти-паттерны
- Удалять папку
publishMCP или junction на неё без остановки процесса, который держитexe/dll. - Абсолютный
index_dirв UI/TOML: нормализация принудительно возвращает относительный путь или дефолт.hybrid-codebase-index.
Проекция снимка на MFD (развитие и сопровождение)
- Шина → поле снимка. Ядро отдаёт
IndexStatus; CCUCockpit/ComputingUnits/HybridIndex/HybridIndexStateChangedUnitсворачивает его вHybridIndexStateChangedпередIDataBus.Publish(единая точка для watcher/reindex/MCP и задел под Semantic Map). В VM событие приходит через подписку; в UI-поток присваиваетсяHybridIndexLast(генерируемое[ObservableProperty]+[NotifyPropertyChangedFor(...)]). - Без нового события с шины. Свежесть и подписи вида «прошло N минут от
IndexedAtIso» завязаны на UTC: при открытии вкладки INDEX, смене scope/каталога индекса в настройках и послеApplyHybridCodebaseIndexOrchestrationForCurrentSolutionвызываетсяRaiseHybridIndexPresentationProperties(), который обходит тот же список имён, что и атрибут у поля снимка (массивHybridIndexDependentPresentationNamesрядом с полем — расширять в двух местах сразу).
Аналогичный приём пачечного обновления без «источника-снимка» для оверлея Cascade Chord: CascadeChordOverlayPresentationNames + NotifyCascadeChordOverlayProperties() в MainWindowViewModel.CascadeChord.cs.
Кодовые якоря
- Оркестратор:
Features/HybridIndex/Application/HybridIndexOrchestrator.cs - Связка с настройками и решением:
MainWindowViewModel.cs(ApplyHybridCodebaseIndexOrchestrationForCurrentSolution),MainWindowViewModel.SettingsReactive.cs,MainWindowViewModel.HybridIndexSettings.cs - Проекция UI MFD:
MainWindowViewModel.HybridIndex.cs,Views/HybridIndexMfdPageView.axaml