| 1 | using CascadeIDE.Cockpit.DataBus; |
| 2 | using CascadeIDE.Contracts; |
| 3 | using HybridCodebaseIndex.Core; |
| 4 | |
| 5 | namespace CascadeIDE.Cockpit.ComputingUnits.HybridIndex; |
| 6 | |
| 7 | /// <summary> |
| 8 | /// CCU: свёртка <see cref="IndexStatus"/> ядра HCI в типизированное событие <see cref="HybridIndexStateChanged"/> для IDE DataBus |
| 9 | /// (ADR 0097, 0106). Единая точка маппинга для watcher, reindex/MCP и будущих потребителей (Semantic Map). |
| 10 | /// <para> |
| 11 | /// Не смешивать с JSON ответами <c>ide_execute</c> и |
| 12 | /// <see cref="CascadeIDE.Features.HybridIndex.McpParity.CodebaseIndexIdeJsonResponses.SerializeStatus(HybridCodebaseIndex.Core.IndexStatus)"/>: |
| 13 | /// там <see cref="IndexStatus"/> целиком (включая настройки, reindex state); здесь только поля, нужные проекции MFD/UI. |
| 14 | /// </para> |
| 15 | /// </summary> |
| 16 | [ComputingUnit] |
| 17 | public sealed class HybridIndexStateChangedUnit : ICockpitComputeUnit |
| 18 | { |
| 19 | /// <summary> |
| 20 | /// Строит событие шины из снимка ядра; <paramref name="workspaceRootNormalizedOrFallback"/> подставляется, если ядро не нормализовало корень. |
| 21 | /// </summary> |
| 22 | public static HybridIndexStateChanged FromCoreStatus( |
| 23 | IndexStatus status, |
| 24 | string workspaceRootNormalizedOrFallback, |
| 25 | string? solutionPathTrimmedOrNull) => |
| 26 | new( |
| 27 | WorkspaceRoot: status.WorkspaceRootNormalized ?? workspaceRootNormalizedOrFallback, |
| 28 | SolutionPath: solutionPathTrimmedOrNull, |
| 29 | DatabasePath: status.DatabasePath, |
| 30 | DocumentCount: status.DocumentCount, |
| 31 | IndexedAtIso: status.IndexedAtIso, |
| 32 | LastError: status.LastReindexError, |
| 33 | LastErrorAtIso: status.LastReindexErrorAtIso); |
| 34 | } |
| 35 | |