From b73a7e07d2abce951829d28ec5a2f2e589d7589a Mon Sep 17 00:00:00 2001 From: Peter Steinberger Date: Tue, 9 Dec 2025 23:45:50 +0000 Subject: [PATCH] mac: open latest log file --- .../Sources/Clawdis/GeneralSettings.swift | 28 ++++++++++++++++--- 1 file changed, 24 insertions(+), 4 deletions(-) diff --git a/apps/macos/Sources/Clawdis/GeneralSettings.swift b/apps/macos/Sources/Clawdis/GeneralSettings.swift index e1963e691..c36cec652 100644 --- a/apps/macos/Sources/Clawdis/GeneralSettings.swift +++ b/apps/macos/Sources/Clawdis/GeneralSettings.swift @@ -522,15 +522,35 @@ extension GeneralSettings { } private func revealLogs() { - let path = URL(fileURLWithPath: "/tmp/clawdis/clawdis.log") - if FileManager.default.fileExists(atPath: path.path) { - NSWorkspace.shared.selectFile(path.path, inFileViewerRootedAtPath: path.deletingLastPathComponent().path) + let fm = FileManager.default + let legacy = URL(fileURLWithPath: "/tmp/clawdis/clawdis.log") + let rollingDir = URL(fileURLWithPath: "/tmp/clawdis") + + // Prefer the newest rolling log (clawdis-YYYY-MM-DD.log), fall back to legacy path. + let dirContents = (try? fm.contentsOfDirectory( + at: rollingDir, + includingPropertiesForKeys: [.contentModificationDateKey], + options: [.skipsHiddenFiles])) ?? [] + + let rollingLog = dirContents + .filter { $0.lastPathComponent.hasPrefix("clawdis-") && $0.pathExtension == "log" } + .sorted { lhs, rhs in + let lDate = (try? lhs.resourceValues(forKeys: [.contentModificationDateKey]).contentModificationDate) ?? .distantPast + let rDate = (try? rhs.resourceValues(forKeys: [.contentModificationDateKey]).contentModificationDate) ?? .distantPast + return lDate > rDate + } + .first + + let target = rollingLog ?? (fm.fileExists(atPath: legacy.path) ? legacy : nil) + + if let target { + NSWorkspace.shared.selectFile(target.path, inFileViewerRootedAtPath: target.deletingLastPathComponent().path) return } let alert = NSAlert() alert.messageText = "Log file not found" - alert.informativeText = "Expected log at \(path.path). Run a health check or generate activity first." + alert.informativeText = "Looked for clawdis logs in /tmp/clawdis/. Run a health check or send a message to generate activity, then try again." alert.alertStyle = .informational alert.addButton(withTitle: "OK") alert.runModal()