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; }
}