diff --git a/apps/macos/Sources/Clawdis/Bridge/BridgeConnectionHandler.swift b/apps/macos/Sources/Clawdis/Bridge/BridgeConnectionHandler.swift index a29552ae8..0c2a1e6f2 100644 --- a/apps/macos/Sources/Clawdis/Bridge/BridgeConnectionHandler.swift +++ b/apps/macos/Sources/Clawdis/Bridge/BridgeConnectionHandler.swift @@ -8,6 +8,8 @@ struct BridgeNodeInfo: Sendable { var displayName: String? var platform: String? var version: String? + var deviceFamily: String? + var modelIdentifier: String? var remoteAddress: String? var caps: [String]? } @@ -145,6 +147,8 @@ actor BridgeConnectionHandler { displayName: hello.displayName, platform: hello.platform, version: hello.version, + deviceFamily: hello.deviceFamily, + modelIdentifier: hello.modelIdentifier, remoteAddress: self.remoteAddressString(), caps: hello.caps)) } @@ -178,6 +182,8 @@ actor BridgeConnectionHandler { displayName: enriched.displayName, platform: enriched.platform, version: enriched.version, + deviceFamily: enriched.deviceFamily, + modelIdentifier: enriched.modelIdentifier, remoteAddress: enriched.remoteAddress, caps: enriched.caps)) } diff --git a/apps/macos/Sources/Clawdis/Bridge/BridgeServer.swift b/apps/macos/Sources/Clawdis/Bridge/BridgeServer.swift index 9a9df3118..9d331f61d 100644 --- a/apps/macos/Sources/Clawdis/Bridge/BridgeServer.swift +++ b/apps/macos/Sources/Clawdis/Bridge/BridgeServer.swift @@ -403,7 +403,29 @@ actor BridgeServer { guard let token = hello.token, token == paired.token else { return .unauthorized } - do { try await store.touchSeen(nodeId: nodeId) } catch { /* ignore */ } + + do { + var updated = paired + let name = hello.displayName?.trimmingCharacters(in: .whitespacesAndNewlines).nonEmpty + let platform = hello.platform?.trimmingCharacters(in: .whitespacesAndNewlines).nonEmpty + let version = hello.version?.trimmingCharacters(in: .whitespacesAndNewlines).nonEmpty + let deviceFamily = hello.deviceFamily?.trimmingCharacters(in: .whitespacesAndNewlines).nonEmpty + let modelIdentifier = hello.modelIdentifier?.trimmingCharacters(in: .whitespacesAndNewlines).nonEmpty + + if updated.displayName != name { updated.displayName = name } + if updated.platform != platform { updated.platform = platform } + if updated.version != version { updated.version = version } + if updated.deviceFamily != deviceFamily { updated.deviceFamily = deviceFamily } + if updated.modelIdentifier != modelIdentifier { updated.modelIdentifier = modelIdentifier } + + if updated != paired { + try await store.upsert(updated) + } else { + try await store.touchSeen(nodeId: nodeId) + } + } catch { + // ignore + } return .ok } @@ -429,6 +451,8 @@ actor BridgeServer { displayName: request.displayName, platform: request.platform, version: request.version, + deviceFamily: request.deviceFamily, + modelIdentifier: request.modelIdentifier, token: token, createdAtMs: nowMs, lastSeenAtMs: nowMs) diff --git a/apps/macos/Sources/Clawdis/Bridge/PairedNodesStore.swift b/apps/macos/Sources/Clawdis/Bridge/PairedNodesStore.swift index 90eaad7c5..e78215635 100644 --- a/apps/macos/Sources/Clawdis/Bridge/PairedNodesStore.swift +++ b/apps/macos/Sources/Clawdis/Bridge/PairedNodesStore.swift @@ -5,6 +5,8 @@ struct PairedNode: Codable, Equatable { var displayName: String? var platform: String? var version: String? + var deviceFamily: String? + var modelIdentifier: String? var token: String var createdAtMs: Int var lastSeenAtMs: Int? diff --git a/apps/macos/Sources/Clawdis/ControlRequestHandler.swift b/apps/macos/Sources/Clawdis/ControlRequestHandler.swift index e9606651e..68edbdb44 100644 --- a/apps/macos/Sources/Clawdis/ControlRequestHandler.swift +++ b/apps/macos/Sources/Clawdis/ControlRequestHandler.swift @@ -10,6 +10,8 @@ enum ControlRequestHandler { var displayName: String? var platform: String? var version: String? + var deviceFamily: String? + var modelIdentifier: String? var remoteAddress: String? var connected: Bool var capabilities: [String]? @@ -434,6 +436,8 @@ enum ControlRequestHandler { displayName: (live?.displayName ?? p.displayName), platform: (live?.platform ?? p.platform), version: (live?.version ?? p.version), + deviceFamily: (live?.deviceFamily ?? p.deviceFamily), + modelIdentifier: (live?.modelIdentifier ?? p.modelIdentifier), remoteAddress: live?.remoteAddress, connected: live != nil, capabilities: live?.caps) @@ -445,6 +449,8 @@ enum ControlRequestHandler { displayName: c.displayName, platform: c.platform, version: c.version, + deviceFamily: c.deviceFamily, + modelIdentifier: c.modelIdentifier, remoteAddress: c.remoteAddress, connected: true, capabilities: c.caps)