namespace ClawdDotNet.Desktop; /// /// Die Argumente, die vor allem anderen gelesen werden müssen. /// /// Eigene Klasse, weil sie zwei Aufrufer hat, die sich nicht kennen dürfen: /// entscheidet damit, ob überhaupt ein Fenster entsteht, und /// übernimmt die vorgewählte Instanz in den Startvorgang. Lägen sie in /// App, müsste Program die Oberfläche anfassen, um zu erfahren, dass keine /// gebraucht wird. /// internal static class CommandLine { public const string InstanceArgument = "--instance"; /// Läuft ohne Fenster: nur Aufbau, Socket und Warten (#528, Stufe 2). public const string HeadlessArgument = "--headless"; /// /// Gestartet und beaufsichtigt vom Instanzmanager (#528, Stufe 5). /// /// Dann gehört der Instanzwechsel dorthin und nicht in dieses Fenster: Der /// Manager hält die Fenster aller Instanzen im Hintergrund und holt das gewünschte /// nach vorn. Ein Fenster, das sich selbst mit einer anderen Instanz neu startet, /// nähme dabei genau die Instanz mit, aus der heraus jemand wechselt — und das ist /// der Vorfall, mit dem dieses Vorhaben angefangen hat (#529). /// public const string ManagedArgument = "--managed"; /// /// Der Instanzpfad hinter --instance, oder null. /// /// Bewusst ohne Prüfung, ob es das Verzeichnis gibt — das entscheidet der /// Aufrufer, und er entscheidet es unterschiedlich: Mit Fenster erscheint dann der /// Auswahldialog, ohne Fenster ist es ein Abbruch mit Meldung. /// public static string? ReadInstancePath(IReadOnlyList? args) { if (args is null) return null; for (var i = 0; i < args.Count - 1; i++) { if (string.Equals(args[i], InstanceArgument, StringComparison.OrdinalIgnoreCase)) return args[i + 1]; } return null; } /// #713: Only the stdio bridge to a running instance's MCP server — no application. public static bool IsMcpBridge(IReadOnlyList? args) => Has(args, Core.Mcp.McpStdioBridge.Argument); public static bool IsHeadless(IReadOnlyList? args) => Has(args, HeadlessArgument); /// public static bool IsManaged(IReadOnlyList? args) => Has(args, ManagedArgument); private static bool Has(IReadOnlyList? args, string flag) => args is not null && args.Any(a => string.Equals(a, flag, StringComparison.OrdinalIgnoreCase)); }