fix(macos): detect and reset stale SSH tunnels
This commit is contained in:
@@ -23,6 +23,8 @@ struct DebugSettings: View {
|
||||
@State private var portCheckInFlight = false
|
||||
@State private var portReports: [DebugActions.PortReport] = []
|
||||
@State private var portKillStatus: String?
|
||||
@State private var tunnelResetInFlight = false
|
||||
@State private var tunnelResetStatus: String?
|
||||
@State private var pendingKill: DebugActions.PortListener?
|
||||
@AppStorage(attachExistingGatewayOnlyKey) private var attachExistingGatewayOnly: Bool = false
|
||||
@AppStorage(debugFileLogEnabledKey) private var diagnosticsFileLogEnabled: Bool = false
|
||||
@@ -264,6 +266,11 @@ struct DebugSettings: View {
|
||||
}
|
||||
.buttonStyle(.borderedProminent)
|
||||
.disabled(self.portCheckInFlight)
|
||||
Button("Reset SSH tunnel") {
|
||||
Task { await self.resetGatewayTunnel() }
|
||||
}
|
||||
.buttonStyle(.bordered)
|
||||
.disabled(self.tunnelResetInFlight || !self.isRemoteMode)
|
||||
}
|
||||
|
||||
if let portKillStatus {
|
||||
@@ -272,6 +279,12 @@ struct DebugSettings: View {
|
||||
.foregroundStyle(.secondary)
|
||||
.fixedSize(horizontal: false, vertical: true)
|
||||
}
|
||||
if let tunnelResetStatus {
|
||||
Text(tunnelResetStatus)
|
||||
.font(.caption2)
|
||||
.foregroundStyle(.secondary)
|
||||
.fixedSize(horizontal: false, vertical: true)
|
||||
}
|
||||
|
||||
if self.portReports.isEmpty, !self.portCheckInFlight {
|
||||
Text("Check which process owns 18789 and suggest fixes.")
|
||||
@@ -593,6 +606,21 @@ struct DebugSettings: View {
|
||||
self.portCheckInFlight = false
|
||||
}
|
||||
|
||||
@MainActor
|
||||
private func resetGatewayTunnel() async {
|
||||
self.tunnelResetInFlight = true
|
||||
self.tunnelResetStatus = nil
|
||||
let result = await DebugActions.resetGatewayTunnel()
|
||||
switch result {
|
||||
case let .success(message):
|
||||
self.tunnelResetStatus = message
|
||||
case let .failure(err):
|
||||
self.tunnelResetStatus = err.localizedDescription
|
||||
}
|
||||
await self.runPortCheck()
|
||||
self.tunnelResetInFlight = false
|
||||
}
|
||||
|
||||
@MainActor
|
||||
private func requestKill(_ listener: DebugActions.PortListener) {
|
||||
if listener.expected {
|
||||
@@ -730,6 +758,10 @@ struct DebugSettings: View {
|
||||
}
|
||||
}
|
||||
|
||||
private var isRemoteMode: Bool {
|
||||
CommandResolver.connectionSettings().mode == .remote
|
||||
}
|
||||
|
||||
private func configURL() -> URL {
|
||||
FileManager.default.homeDirectoryForCurrentUser
|
||||
.appendingPathComponent(".clawdis")
|
||||
|
||||
Reference in New Issue
Block a user