From a13db82d28fb4b98598b069562f84ff6748142a5 Mon Sep 17 00:00:00 2001 From: Peter Steinberger Date: Fri, 26 Dec 2025 21:44:05 +0100 Subject: [PATCH] fix(nodes): improve version reporting --- apps/android/app/build.gradle.kts | 2 +- .../com/steipete/clawdis/node/NodeRuntime.kt | 19 +++++++++++++++++-- .../Clawdis/MenuSessionsInjector.swift | 12 ++++++++++-- 3 files changed, 28 insertions(+), 5 deletions(-) diff --git a/apps/android/app/build.gradle.kts b/apps/android/app/build.gradle.kts index 113627aac..a0fd7d6be 100644 --- a/apps/android/app/build.gradle.kts +++ b/apps/android/app/build.gradle.kts @@ -20,7 +20,7 @@ android { minSdk = 31 targetSdk = 36 versionCode = 1 - versionName = "0.1" + versionName = "2.0.0-beta3" } buildTypes { diff --git a/apps/android/app/src/main/java/com/steipete/clawdis/node/NodeRuntime.kt b/apps/android/app/src/main/java/com/steipete/clawdis/node/NodeRuntime.kt index 7cfd8c53f..0ade08e3b 100644 --- a/apps/android/app/src/main/java/com/steipete/clawdis/node/NodeRuntime.kt +++ b/apps/android/app/src/main/java/com/steipete/clawdis/node/NodeRuntime.kt @@ -16,6 +16,7 @@ import com.steipete.clawdis.node.bridge.BridgeEndpoint import com.steipete.clawdis.node.bridge.BridgePairingClient import com.steipete.clawdis.node.bridge.BridgeSession import com.steipete.clawdis.node.node.CameraCaptureManager +import com.steipete.clawdis.node.BuildConfig import com.steipete.clawdis.node.node.CanvasController import com.steipete.clawdis.node.node.ScreenRecordManager import com.steipete.clawdis.node.protocol.ClawdisCapability @@ -346,6 +347,13 @@ class NodeRuntime(context: Context) { add(ClawdisCapability.VoiceWake.rawValue) } } + val versionName = BuildConfig.VERSION_NAME.trim().ifEmpty { "dev" } + val advertisedVersion = + if (BuildConfig.DEBUG && !versionName.contains("dev", ignoreCase = true)) { + "$versionName-dev" + } else { + versionName + } BridgePairingClient().pairAndHello( endpoint = endpoint, hello = @@ -354,7 +362,7 @@ class NodeRuntime(context: Context) { displayName = displayName.value, token = null, platform = "Android", - version = "dev", + version = advertisedVersion, deviceFamily = "Android", modelIdentifier = modelIdentifier, caps = caps, @@ -372,6 +380,13 @@ class NodeRuntime(context: Context) { val authToken = requireNotNull(resolved.token).trim() prefs.saveBridgeToken(authToken) + val versionName = BuildConfig.VERSION_NAME.trim().ifEmpty { "dev" } + val advertisedVersion = + if (BuildConfig.DEBUG && !versionName.contains("dev", ignoreCase = true)) { + "$versionName-dev" + } else { + versionName + } session.connect( endpoint = endpoint, hello = @@ -380,7 +395,7 @@ class NodeRuntime(context: Context) { displayName = displayName.value, token = authToken, platform = "Android", - version = "dev", + version = advertisedVersion, deviceFamily = "Android", modelIdentifier = modelIdentifier, caps = diff --git a/apps/macos/Sources/Clawdis/MenuSessionsInjector.swift b/apps/macos/Sources/Clawdis/MenuSessionsInjector.swift index 38d2a05c4..f61d2e727 100644 --- a/apps/macos/Sources/Clawdis/MenuSessionsInjector.swift +++ b/apps/macos/Sources/Clawdis/MenuSessionsInjector.swift @@ -447,7 +447,7 @@ final class MenuSessionsInjector: NSObject, NSMenuDelegate { } if let version = entry.version?.nonEmpty { - menu.addItem(self.makeNodeCopyItem(label: "Version", value: "v\(version)")) + menu.addItem(self.makeNodeCopyItem(label: "Version", value: self.formatVersionLabel(version))) } menu.addItem(self.makeNodeDetailItem(label: "Last seen", value: entry.ageDescription)) @@ -487,7 +487,15 @@ final class MenuSessionsInjector: NSObject, NSMenuDelegate { item.representedObject = url return item } - + private func formatVersionLabel(_ version: String) -> String { + let trimmed = version.trimmingCharacters(in: .whitespacesAndNewlines) + guard !trimmed.isEmpty else { return version } + if trimmed.hasPrefix("v") { return trimmed } + if let first = trimmed.unicodeScalars.first, CharacterSet.decimalDigits.contains(first) { + return "v\(trimmed)" + } + return trimmed + } @objc private func patchThinking(_ sender: NSMenuItem) { guard let dict = sender.representedObject as? [String: Any],