Files
openclaw/apps/macos/Sources/OpenClaw/OnboardingView+Actions.swift
Peter Steinberger 6a7b62889e feat(macos): install and run the local Gateway automatically (#99767)
* feat(macos): automate local gateway setup

* fix(macos): auto-approve the local Mac node

* chore(macos): refresh generated setup metadata

* chore(macos): refresh generated setup metadata

* chore(macos): refresh generated setup metadata

* chore(macos): refresh generated setup metadata

* chore(macos): refresh generated setup metadata
2026-07-03 22:09:56 -07:00

78 lines
2.4 KiB
Swift

import AppKit
import Foundation
import OpenClawDiscovery
import OpenClawIPC
import SwiftUI
extension OnboardingView {
func selectLocalGateway() {
self.defaultsToLocalGateway = false
self.state.connectionMode = .local
self.preferredGatewayID = nil
self.showAdvancedConnection = false
GatewayDiscoveryPreferences.setPreferredStableID(nil)
}
func selectUnconfiguredGateway() {
self.defaultsToLocalGateway = false
Task { await self.onboardingWizard.cancelIfRunning() }
self.state.connectionMode = .unconfigured
self.preferredGatewayID = nil
self.showAdvancedConnection = false
GatewayDiscoveryPreferences.setPreferredStableID(nil)
}
func selectRemoteGateway(_ gateway: GatewayDiscoveryModel.DiscoveredGateway) {
self.defaultsToLocalGateway = false
Task { await self.onboardingWizard.cancelIfRunning() }
self.preferredGatewayID = gateway.stableID
GatewayDiscoveryPreferences.setPreferredStableID(gateway.stableID)
GatewayDiscoverySelectionSupport.applyRemoteSelection(gateway: gateway, state: self.state)
self.state.connectionMode = .remote
MacNodeModeCoordinator.shared.setPreferredGatewayStableID(gateway.stableID)
}
func openSettings(tab: SettingsTab) {
AppNavigationActions.openSettings(tab: tab)
}
func handleBack() {
withAnimation {
self.currentPage = max(0, self.currentPage - 1)
}
}
func handleNext() {
if self.isWizardBlocking { return }
self.commitRecommendedConnectionIfNeeded(for: self.activePageIndex)
if self.currentPage < self.pageCount - 1 {
withAnimation { self.currentPage += 1 }
} else {
self.finish()
}
}
func commitRecommendedConnectionIfNeeded(for pageIndex: Int) {
if pageIndex == self.connectionPageIndex,
self.defaultsToLocalGateway,
self.state.connectionMode == .unconfigured
{
self.selectLocalGateway()
}
}
func finish() {
OnboardingController.markComplete()
OnboardingController.shared.close()
}
func copyToPasteboard(_ text: String) {
let pb = NSPasteboard.general
pb.clearContents()
pb.setString(text, forType: .string)
self.copied = true
DispatchQueue.main.asyncAfter(deadline: .now() + 1.2) { self.copied = false }
}
}