namespace MeetingAssistant.MeetingNotes; public interface IMeetingMetadataProvider { Task GetCurrentMeetingAsync( DateTimeOffset startedAt, CancellationToken cancellationToken); } public interface IMeetingMetadataDiagnosticProvider { Task DiagnoseCurrentMeetingAsync( DateTimeOffset startedAt, TimeSpan timeout, CancellationToken cancellationToken); } public sealed record MeetingMetadata( string Title, IReadOnlyList Attendees, string Agenda, DateTimeOffset? ScheduledEnd = null); public sealed record MeetingMetadataDiagnosticResult( string Provider, DateTimeOffset StartedAt, bool Succeeded, bool TimedOut, long ElapsedMilliseconds, MeetingMetadata? Metadata, string? Error); public sealed class NoopMeetingMetadataProvider : IMeetingMetadataProvider { public Task GetCurrentMeetingAsync( DateTimeOffset startedAt, CancellationToken cancellationToken) { return Task.FromResult(null); } }