using LehrerApp.Core.Mcp; namespace LehrerApp.McpBridge; /// /// Unterscheidet an jeder Stelle, an der die Bridge versucht, sich mit LehrerApp.Desktop zu /// verbinden, zwischen dem harmlosen Regelfall "LehrerApp läuft gerade nicht" und einem echten /// Verbindungsfehler. wirft bei einer lokalen /// Named Pipe (kein Netzwerk, kein Handshake) genau dann eine , wenn /// innerhalb der Frist kein Prozess auf den Pipe-Namen lauschte - praktisch immer, weil /// LehrerApp.Desktop nicht läuft oder der MCP-Server dort in den Einstellungen nicht aktiviert ist. /// Jede andere Exception (z.B. bei einem Rechte-/ /// ACL-Mismatch zwischen den Prozessen) deutet auf ein echtes Konfigurationsproblem hin. /// internal static class ConnectionDiagnostics { public const int NotRunningErrorCode = -32001; public const int UnexpectedErrorCode = -32002; public static (int Code, string ClientMessage, string StderrLine) Describe(Exception ex) => ex switch { TimeoutException => ( NotRunningErrorCode, "LehrerApp läuft nicht oder der MCP-Server ist in den Einstellungen nicht aktiviert.", "LehrerApp.McpBridge: Kein Kontakt zu LehrerApp (Pipe „" + McpPipeConstants.PipeName + "“ nicht erreichbar). Das ist normal, wenn LehrerApp.Desktop gerade nicht läuft oder der " + "MCP-Server dort in den Einstellungen nicht aktiviert ist - kein Hinweis auf eine " + "fehlerhafte Bridge-/Client-Konfiguration."), _ => ( UnexpectedErrorCode, $"Unerwarteter Verbindungsfehler ({ex.GetType().Name}): {ex.Message}", $"LehrerApp.McpBridge: Unerwarteter Fehler beim Verbindungsaufbau zu LehrerApp " + $"({ex.GetType().Name}: {ex.Message}). Das ist vermutlich KEIN einfaches \"LehrerApp " + "läuft noch nicht\", sondern deutet auf ein Konfigurations- oder Rechteproblem hin."), }; }