import Foundation public enum RDAIDiagnosticStage: String, Codable, Sendable { case indexing, retrieval, generation, storage } public struct RDAIDiagnosticEvent: Codable, Sendable { public let documentHash: String public let stage: RDAIDiagnosticStage public let durationMilliseconds: Int public let errorCode: String? public let count: Int public let createdAt: Date public init(documentHash: String, stage: RDAIDiagnosticStage, durationMilliseconds: Int, errorCode: String? = nil, count: Int = 0, createdAt: Date = .init()) { self.documentHash = documentHash; self.stage = stage; self.durationMilliseconds = durationMilliseconds; self.errorCode = errorCode; self.count = count; self.createdAt = createdAt } } public protocol RDAIDiagnosticsRecording: Sendable { func record(_ event: RDAIDiagnosticEvent) async } public actor RDAIInMemoryDiagnosticsRecorder: RDAIDiagnosticsRecording { private var values: [RDAIDiagnosticEvent] = [] public init() {} public func record(_ event: RDAIDiagnosticEvent) { values.append(event) } public func events() -> [RDAIDiagnosticEvent] { values } public func removeAll() { values.removeAll() } }