using AcDream.Launcher.Core.Profiles; namespace AcDream.Launcher.Core.Orchestration; public sealed record LauncherCharacterSnapshot( string ServerName, string AccountName, string Name, string? Id, LaunchMode LaunchMode, IReadOnlyList Plugins, IReadOnlyList LoginCommands, bool HasRunningSession, string SessionStatus); /// /// Password is deliberately absent. The account credential remains reachable /// only inside and the transient /// stdin handoff performed by . /// public sealed record LauncherAccountSnapshot( string ServerName, string AccountName, IReadOnlyList Characters, bool HasRunningActivity, string ActivityStatus); public sealed record LauncherServerSnapshot( string Name, string Host, int Port, IReadOnlyList Accounts); public enum LauncherActivityKind { Play, Probe, } public enum LauncherActivityState { Starting, Running, Connected, InWorld, Disconnected, Stopping, Exited, Failed, Cancelled, } public sealed record LauncherSessionSnapshot( string SessionId, LauncherActivityKind Kind, string ServerName, string AccountName, string? CharacterName, LaunchMode? LaunchMode, LauncherActivityState State, string Status, int? ExitCode, string? Error, DateTimeOffset CreatedAt) { public bool IsActive => State is not ( LauncherActivityState.Exited or LauncherActivityState.Failed or LauncherActivityState.Cancelled); } public sealed record LauncherStateSnapshot( IReadOnlyList Servers, IReadOnlyList Sessions, LauncherPlatformCapabilities Platform, bool IsInstallationReady, string InstallationStatus); public sealed class LauncherOperationException : Exception { public LauncherOperationException(string message) : base(message) { } }