From ceb0a8b3e3977ba3565da7c134b1ec71b384a018 Mon Sep 17 00:00:00 2001 From: Peter Steinberger Date: Sat, 13 Dec 2025 17:15:00 +0000 Subject: [PATCH] fix(macos): surface gateway sessions load errors --- .../Sources/Clawdis/MenuContextCardInjector.swift | 10 +++++++++- apps/macos/Sources/Clawdis/SessionData.swift | 7 ++++++- 2 files changed, 15 insertions(+), 2 deletions(-) diff --git a/apps/macos/Sources/Clawdis/MenuContextCardInjector.swift b/apps/macos/Sources/Clawdis/MenuContextCardInjector.swift index 6294f3250..588a6021e 100644 --- a/apps/macos/Sources/Clawdis/MenuContextCardInjector.swift +++ b/apps/macos/Sources/Clawdis/MenuContextCardInjector.swift @@ -122,7 +122,15 @@ final class MenuContextCardInjector: NSObject, NSMenuDelegate { self.cacheUpdatedAt = Date() } catch { if self.cachedRows.isEmpty { - self.cacheErrorText = "Could not load sessions" + let raw = (error as? LocalizedError)?.errorDescription ?? error.localizedDescription + let trimmed = raw.trimmingCharacters(in: .whitespacesAndNewlines) + if trimmed.isEmpty { + self.cacheErrorText = "Could not load sessions" + } else { + // Keep the menu readable: one line, short. + let firstLine = trimmed.split(whereSeparator: \.isNewline).first.map(String.init) ?? trimmed + self.cacheErrorText = firstLine.count > 90 ? "\(firstLine.prefix(87))…" : firstLine + } } self.cacheUpdatedAt = Date() } diff --git a/apps/macos/Sources/Clawdis/SessionData.swift b/apps/macos/Sources/Clawdis/SessionData.swift index 231758b75..de0544df9 100644 --- a/apps/macos/Sources/Clawdis/SessionData.swift +++ b/apps/macos/Sources/Clawdis/SessionData.swift @@ -238,7 +238,12 @@ enum SessionLoader { do { data = try await ControlChannel.shared.request(method: "sessions.list", params: params) } catch { - throw SessionLoadError.gatewayUnavailable(error.localizedDescription) + let msg = (error as? LocalizedError)?.errorDescription ?? error.localizedDescription + if msg.localizedCaseInsensitiveContains("unknown method: sessions.list") { + throw SessionLoadError.gatewayUnavailable( + "Gateway is too old (missing sessions.list). Restart/update the gateway.") + } + throw SessionLoadError.gatewayUnavailable(msg) } let decoded: GatewaySessionsListResponse