using System.Collections.Immutable; using System.Text.Json; namespace StellaOps.AdvisoryAI.KnowledgeSearch; public sealed record KnowledgeSearchRequest( string Q, int? K = null, KnowledgeSearchFilter? Filters = null, bool IncludeDebug = false); public sealed record KnowledgeSearchFilter { public IReadOnlyList? Type { get; init; } public string? Product { get; init; } public string? Version { get; init; } public string? Service { get; init; } public IReadOnlyList? Tags { get; init; } } public sealed record KnowledgeSearchResponse( string Query, int TopK, IReadOnlyList Results, KnowledgeSearchDiagnostics Diagnostics); public sealed record KnowledgeSearchResult( string Type, string Title, string Snippet, double Score, KnowledgeOpenAction Open, IReadOnlyDictionary? Debug = null); public sealed record KnowledgeOpenAction( KnowledgeOpenActionType Kind, KnowledgeOpenDocAction? Docs = null, KnowledgeOpenApiAction? Api = null, KnowledgeOpenDoctorAction? Doctor = null); public enum KnowledgeOpenActionType { Docs = 1, Api = 2, Doctor = 3 } public sealed record KnowledgeOpenDocAction( string Path, string Anchor, int SpanStart, int SpanEnd); public sealed record KnowledgeOpenApiAction( string Service, string Method, string Path, string OperationId); public sealed record KnowledgeOpenDoctorAction( string CheckCode, string Severity, bool CanRun, string RunCommand); public sealed record KnowledgeSearchDiagnostics( int FtsMatches, int VectorMatches, long DurationMs, bool UsedVector, string Mode); internal sealed record KnowledgeSourceDocument( string DocId, string DocType, string Product, string Version, string SourceRef, string Path, string Title, string ContentHash, JsonDocument Metadata); internal sealed record KnowledgeChunkDocument( string ChunkId, string DocId, string Kind, string? Anchor, string? SectionPath, int SpanStart, int SpanEnd, string Title, string Body, float[]? Embedding, JsonDocument Metadata); internal sealed record KnowledgeApiSpec( string SpecId, string DocId, string Service, string? OpenApiVersion, string? Title, string? Version, string SourcePath, JsonDocument Content); internal sealed record KnowledgeApiOperation( string OperationKey, string SpecId, string ChunkId, string Service, string Method, string Path, string? OperationId, IReadOnlyList Tags, string? Summary, JsonDocument RequestJson, JsonDocument ResponsesJson, JsonDocument SecurityJson); internal sealed record KnowledgeDoctorProjection( string CheckCode, string ChunkId, string Title, string Severity, string Remediation, string RunCommand, IReadOnlyList Symptoms, JsonDocument ReferencesJson, JsonDocument MetadataJson); internal sealed record KnowledgeIndexSnapshot( IReadOnlyList Documents, IReadOnlyList Chunks, IReadOnlyList ApiSpecs, IReadOnlyList ApiOperations, IReadOnlyList DoctorProjections); public sealed record KnowledgeRebuildSummary( int DocumentCount, int ChunkCount, int ApiSpecCount, int ApiOperationCount, int DoctorProjectionCount, long DurationMs); internal sealed record KnowledgeChunkRow( string ChunkId, string DocId, string Kind, string? Anchor, string? SectionPath, int SpanStart, int SpanEnd, string Title, string Body, string Snippet, JsonDocument Metadata, float[]? Embedding, double LexicalScore);