From 7ef83311bb4237f1c707c0aaa679ec6f8e5e7abe Mon Sep 17 00:00:00 2001 From: Peter Steinberger Date: Sat, 13 Dec 2025 01:57:40 +0000 Subject: [PATCH] feat(bridge): show node ip in pairing --- apps/ios/Sources/Settings/SettingsTab.swift | 2 +- .../Bridge/BridgeConnectionHandler.swift | 19 ++++++++++++++++++- .../Sources/Clawdis/Bridge/BridgeServer.swift | 2 ++ .../Sources/ClawdisKit/BridgeFrames.swift | 5 ++++- 4 files changed, 25 insertions(+), 3 deletions(-) diff --git a/apps/ios/Sources/Settings/SettingsTab.swift b/apps/ios/Sources/Settings/SettingsTab.swift index 2bdeef99a..958d6bf3f 100644 --- a/apps/ios/Sources/Settings/SettingsTab.swift +++ b/apps/ios/Sources/Settings/SettingsTab.swift @@ -107,7 +107,7 @@ struct SettingsTab: View { private func platformString() -> String { let v = ProcessInfo.processInfo.operatingSystemVersion - return "ios \(v.majorVersion).\(v.minorVersion).\(v.patchVersion)" + return "iOS \(v.majorVersion).\(v.minorVersion).\(v.patchVersion)" } private func appVersion() -> String { diff --git a/apps/macos/Sources/Clawdis/Bridge/BridgeConnectionHandler.swift b/apps/macos/Sources/Clawdis/Bridge/BridgeConnectionHandler.swift index 4aaa18c4c..b9fda454b 100644 --- a/apps/macos/Sources/Clawdis/Bridge/BridgeConnectionHandler.swift +++ b/apps/macos/Sources/Clawdis/Bridge/BridgeConnectionHandler.swift @@ -73,7 +73,14 @@ actor BridgeConnectionHandler { case "pair-request": let req = try self.decoder.decode(BridgePairRequest.self, from: data) self.nodeId = req.nodeId - let result = await handlePair(req) + let enriched = BridgePairRequest( + type: req.type, + nodeId: req.nodeId, + displayName: req.displayName, + platform: req.platform, + version: req.version, + remoteAddress: self.remoteAddressString()) + let result = await handlePair(enriched) await self.handlePairResult( result, serverName: Host.current().localizedName ?? ProcessInfo.processInfo.hostName) @@ -114,6 +121,16 @@ actor BridgeConnectionHandler { await self.close(with: onDisconnected) } + private func remoteAddressString() -> String? { + switch self.connection.endpoint { + case let .hostPort(host: host, port: _): + let value = String(describing: host) + return value.trimmingCharacters(in: .whitespacesAndNewlines).isEmpty ? nil : value + default: + return nil + } + } + private func handlePairResult(_ result: PairResult, serverName: String) async { switch result { case let .ok(token): diff --git a/apps/macos/Sources/Clawdis/Bridge/BridgeServer.swift b/apps/macos/Sources/Clawdis/Bridge/BridgeServer.swift index 618e8909f..a8a5c6936 100644 --- a/apps/macos/Sources/Clawdis/Bridge/BridgeServer.swift +++ b/apps/macos/Sources/Clawdis/Bridge/BridgeServer.swift @@ -262,10 +262,12 @@ enum BridgePairingApprover { static func approve(request: BridgePairRequest, isRepair: Bool) async -> Bool { await withCheckedContinuation { cont in let name = request.displayName ?? request.nodeId + let remote = request.remoteAddress?.trimmingCharacters(in: .whitespacesAndNewlines).nonEmpty let alert = NSAlert() alert.messageText = isRepair ? "Re-pair Clawdis Node?" : "Pair Clawdis Node?" alert.informativeText = """ Node: \(name) + IP: \(remote ?? "unknown") Platform: \(request.platform ?? "unknown") Version: \(request.version ?? "unknown") """ diff --git a/apps/shared/ClawdisKit/Sources/ClawdisKit/BridgeFrames.swift b/apps/shared/ClawdisKit/Sources/ClawdisKit/BridgeFrames.swift index 0e76504ee..3ffa59d81 100644 --- a/apps/shared/ClawdisKit/Sources/ClawdisKit/BridgeFrames.swift +++ b/apps/shared/ClawdisKit/Sources/ClawdisKit/BridgeFrames.swift @@ -97,19 +97,22 @@ public struct BridgePairRequest: Codable, Sendable { public let displayName: String? public let platform: String? public let version: String? + public let remoteAddress: String? public init( type: String = "pair-request", nodeId: String, displayName: String?, platform: String?, - version: String?) + version: String?, + remoteAddress: String? = nil) { self.type = type self.nodeId = nodeId self.displayName = displayName self.platform = platform self.version = version + self.remoteAddress = remoteAddress } }