Diagnostic
Diagnostic =
BuiltInDiagnostic<"engine.track.failed","error",TrackFailedData> |BuiltInDiagnostic<"engine.input.reopened","info"|"warning",InputReopenedData> |BuiltInDiagnostic<"engine.input.retried","warning", {attempt:number;offset:number; }> |BuiltInDiagnostic<"engine.track.starved","warning", {durationMs:number; }> |BuiltInDiagnostic<"engine.track.gaps","info", {gaps:number;silentMs:number; }> |BuiltInDiagnostic<"engine.worker.load","debug"|"warning", {threadId:number;tracks:number;utilization:number; }> |BuiltInDiagnostic<"voice.endpoint.changed","info", {endpoint:string;previous?:string; }> |BuiltInDiagnostic<"voice.join.retried","info", {channelId:string; }> |BuiltInDiagnostic<"voice.recovered","warning",VoiceRecoveryData> |BuiltInDiagnostic<"voice.recovery.failed","error",VoiceRecoveryData> |BuiltInFields<CoreBackgroundStage,"error"> &object|PluginDiagnostic
A report. Without plugin, it is a core or built-in engine stage whose severity and data are typed by stage, so
diagnostic.plugin === undefined && diagnostic.stage === "engine.track.failed" narrows data. With plugin, the
named plugin chose the stage and its flat data.