fix: sync gateway mode via gateway config

This commit is contained in:
Peter Steinberger
2026-01-05 06:39:37 +00:00
parent 724354b9f0
commit d9103b387a

View File

@@ -401,11 +401,9 @@ final class AppState {
private func syncGatewayConfigIfNeeded() { private func syncGatewayConfigIfNeeded() {
guard !self.isPreview, !self.isInitializing else { return } guard !self.isPreview, !self.isInitializing else { return }
var root = ClawdbotConfigFile.loadDict() let connectionMode = self.connectionMode
var gateway = root["gateway"] as? [String: Any] ?? [:] let remoteTarget = self.remoteTarget
var changed = false let desiredMode: String? = switch connectionMode {
let desiredMode: String? = switch self.connectionMode {
case .local: case .local:
"local" "local"
case .remote: case .remote:
@@ -413,37 +411,44 @@ final class AppState {
case .unconfigured: case .unconfigured:
nil nil
} }
let remoteHost = connectionMode == .remote
? CommandResolver.parseSSHTarget(remoteTarget)?.host
: nil
let currentMode = (gateway["mode"] as? String)?.trimmingCharacters(in: .whitespacesAndNewlines) Task { @MainActor in
if let desiredMode { var root = await ConfigStore.load()
if currentMode != desiredMode { var gateway = root["gateway"] as? [String: Any] ?? [:]
gateway["mode"] = desiredMode var changed = false
let currentMode = (gateway["mode"] as? String)?.trimmingCharacters(in: .whitespacesAndNewlines)
if let desiredMode {
if currentMode != desiredMode {
gateway["mode"] = desiredMode
changed = true
}
} else if currentMode != nil {
gateway.removeValue(forKey: "mode")
changed = true changed = true
} }
} else if currentMode != nil {
gateway.removeValue(forKey: "mode")
changed = true
}
if self.connectionMode == .remote, if connectionMode == .remote, let host = remoteHost {
let host = CommandResolver.parseSSHTarget(self.remoteTarget)?.host var remote = gateway["remote"] as? [String: Any] ?? [:]
{ let existingUrl = (remote["url"] as? String)?.trimmingCharacters(in: .whitespacesAndNewlines) ?? ""
var remote = gateway["remote"] as? [String: Any] ?? [:] let parsedExisting = existingUrl.isEmpty ? nil : URL(string: existingUrl)
let existingUrl = (remote["url"] as? String)?.trimmingCharacters(in: .whitespacesAndNewlines) ?? "" let scheme = parsedExisting?.scheme?.isEmpty == false ? parsedExisting?.scheme : "ws"
let parsedExisting = existingUrl.isEmpty ? nil : URL(string: existingUrl) let port = parsedExisting?.port ?? 18789
let scheme = parsedExisting?.scheme?.isEmpty == false ? parsedExisting?.scheme : "ws" let desiredUrl = "\(scheme ?? "ws")://\(host):\(port)"
let port = parsedExisting?.port ?? 18789 if existingUrl != desiredUrl {
let desiredUrl = "\(scheme ?? "ws")://\(host):\(port)" remote["url"] = desiredUrl
if existingUrl != desiredUrl { gateway["remote"] = remote
remote["url"] = desiredUrl changed = true
gateway["remote"] = remote }
changed = true
} }
}
guard changed else { return } guard changed else { return }
root["gateway"] = gateway root["gateway"] = gateway
ClawdbotConfigFile.saveDict(root) try? await ConfigStore.save(root)
}
} }
func triggerVoiceEars(ttl: TimeInterval? = 5) { func triggerVoiceEars(ttl: TimeInterval? = 5) {