using StellaOps.Symbols.Core.Models; namespace StellaOps.Symbols.Client; /// /// Client interface for the Symbols service. /// public interface ISymbolsClient { /// /// Uploads a symbol manifest to the server. /// Task UploadManifestAsync( SymbolManifest manifest, CancellationToken cancellationToken = default); /// /// Gets a manifest by ID. /// Task GetManifestAsync( string manifestId, CancellationToken cancellationToken = default); /// /// Gets manifests by debug ID. /// Task> GetManifestsByDebugIdAsync( string debugId, CancellationToken cancellationToken = default); /// /// Resolves addresses to symbols. /// Task> ResolveAsync( string debugId, IEnumerable addresses, CancellationToken cancellationToken = default); /// /// Resolves a single address to a symbol. /// Task ResolveAddressAsync( string debugId, ulong address, CancellationToken cancellationToken = default); /// /// Queries manifests with filters. /// Task QueryManifestsAsync( SymbolManifestQuery query, CancellationToken cancellationToken = default); /// /// Gets service health status. /// Task GetHealthAsync(CancellationToken cancellationToken = default); } /// /// Result of manifest upload. /// public sealed record SymbolManifestUploadResult { public required string ManifestId { get; init; } public required string DebugId { get; init; } public required string BinaryName { get; init; } public string? BlobUri { get; init; } public required int SymbolCount { get; init; } public required DateTimeOffset CreatedAt { get; init; } } /// /// Result of symbol resolution. /// public sealed record SymbolResolutionResult { public required ulong Address { get; init; } public required bool Found { get; init; } public string? MangledName { get; init; } public string? DemangledName { get; init; } public ulong Offset { get; init; } public string? SourceFile { get; init; } public int? SourceLine { get; init; } public double Confidence { get; init; } } /// /// Query parameters for manifest search. /// public sealed record SymbolManifestQuery { public string? DebugId { get; init; } public string? CodeId { get; init; } public string? BinaryName { get; init; } public string? Platform { get; init; } public BinaryFormat? Format { get; init; } public DateTimeOffset? CreatedAfter { get; init; } public DateTimeOffset? CreatedBefore { get; init; } public bool? HasDsse { get; init; } public int Offset { get; init; } public int Limit { get; init; } = 50; } /// /// Result of manifest query. /// public sealed record SymbolManifestQueryResult { public required IReadOnlyList Manifests { get; init; } public required int TotalCount { get; init; } public required int Offset { get; init; } public required int Limit { get; init; } } /// /// Summary of a symbol manifest. /// public sealed record SymbolManifestSummary { public required string ManifestId { get; init; } public required string DebugId { get; init; } public string? CodeId { get; init; } public required string BinaryName { get; init; } public string? Platform { get; init; } public required BinaryFormat Format { get; init; } public required int SymbolCount { get; init; } public required bool HasDsse { get; init; } public required DateTimeOffset CreatedAt { get; init; } } /// /// Symbols service health status. /// public sealed record SymbolsHealthStatus { public required string Status { get; init; } public required string Version { get; init; } public required DateTimeOffset Timestamp { get; init; } public long? TotalManifests { get; init; } public long? TotalSymbols { get; init; } }