diff --git a/src/OpenClaw.Shared/Models.cs b/src/OpenClaw.Shared/Models.cs index f9fbef9..06ca322 100644 --- a/src/OpenClaw.Shared/Models.cs +++ b/src/OpenClaw.Shared/Models.cs @@ -182,17 +182,16 @@ public class SessionInfo get { var prefix = IsMain ? "Main" : "Sub"; - var parts = new List { prefix }; - - if (!string.IsNullOrEmpty(Channel)) - parts.Add(Channel); - - if (!string.IsNullOrEmpty(CurrentActivity)) - parts.Add(CurrentActivity); - else if (!string.IsNullOrEmpty(Status) && Status != "unknown" && Status != "active") - parts.Add(Status); - - return string.Join(" · ", parts); + string? mid = !string.IsNullOrEmpty(Channel) ? Channel : null; + string? end = !string.IsNullOrEmpty(CurrentActivity) ? CurrentActivity + : (!string.IsNullOrEmpty(Status) && Status != "unknown" && Status != "active" ? Status : null); + return (mid, end) switch + { + (null, null) => prefix, + (not null, null) => $"{prefix} · {mid}", + (null, not null) => $"{prefix} · {end}", + _ => $"{prefix} · {mid} · {end}", + }; } } diff --git a/src/OpenClaw.Shared/OpenClawGatewayClient.cs b/src/OpenClaw.Shared/OpenClawGatewayClient.cs index 05189f5..b7a7428 100644 --- a/src/OpenClaw.Shared/OpenClawGatewayClient.cs +++ b/src/OpenClaw.Shared/OpenClawGatewayClient.cs @@ -1358,14 +1358,14 @@ public class OpenClawGatewayClient : WebSocketClientBase private SessionInfo[] GetSessionListInternal() { - var list = new List(_sessions.Values); - list.Sort((a, b) => + var result = new SessionInfo[_sessions.Count]; + _sessions.Values.CopyTo(result, 0); + Array.Sort(result, static (a, b) => { - // Main session first, then by last seen if (a.IsMain != b.IsMain) return a.IsMain ? -1 : 1; return b.LastSeen.CompareTo(a.LastSeen); }); - return list.ToArray(); + return result; } // --- Parsing helpers ---