- Add Vision framework integration for image analysis (OCR, classification) - Add image attachment support in chat UI with drag & drop - Add recent images sidebar from Downloads/Desktop - Add copy to clipboard button for assistant responses - Add gRPC reflection service with toggle in settings - Create proper .proto file and generate Swift code - Add server restart when toggling reflection setting - Fix port number formatting in settings (remove comma grouping) - Update gRPC dependencies to v2.x 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
64 lines
1.9 KiB
Swift
64 lines
1.9 KiB
Swift
import Foundation
|
|
import ServiceManagement
|
|
|
|
@Observable
|
|
final class AppSettings {
|
|
var host: String {
|
|
didSet { UserDefaults.standard.set(host, forKey: "grpc_host") }
|
|
}
|
|
|
|
var port: Int {
|
|
didSet { UserDefaults.standard.set(port, forKey: "grpc_port") }
|
|
}
|
|
|
|
var apiKey: String {
|
|
didSet { UserDefaults.standard.set(apiKey, forKey: "api_key") }
|
|
}
|
|
|
|
var autoStartServer: Bool {
|
|
didSet { UserDefaults.standard.set(autoStartServer, forKey: "auto_start_server") }
|
|
}
|
|
|
|
var enableReflection: Bool {
|
|
didSet { UserDefaults.standard.set(enableReflection, forKey: "enable_reflection") }
|
|
}
|
|
|
|
var launchAtLogin: Bool {
|
|
didSet {
|
|
do {
|
|
if launchAtLogin {
|
|
try SMAppService.mainApp.register()
|
|
} else {
|
|
try SMAppService.mainApp.unregister()
|
|
}
|
|
} catch {
|
|
print("Failed to update launch at login: \(error)")
|
|
}
|
|
}
|
|
}
|
|
|
|
init() {
|
|
self.host = UserDefaults.standard.string(forKey: "grpc_host") ?? "0.0.0.0"
|
|
let savedPort = UserDefaults.standard.integer(forKey: "grpc_port")
|
|
self.port = savedPort == 0 ? 50051 : savedPort
|
|
self.apiKey = UserDefaults.standard.string(forKey: "api_key") ?? ""
|
|
self.autoStartServer = UserDefaults.standard.bool(forKey: "auto_start_server")
|
|
// Default to true if not set
|
|
if UserDefaults.standard.object(forKey: "enable_reflection") == nil {
|
|
self.enableReflection = true
|
|
} else {
|
|
self.enableReflection = UserDefaults.standard.bool(forKey: "enable_reflection")
|
|
}
|
|
self.launchAtLogin = SMAppService.mainApp.status == .enabled
|
|
}
|
|
|
|
func resetToDefaults() {
|
|
host = "0.0.0.0"
|
|
port = 50051
|
|
apiKey = ""
|
|
autoStartServer = false
|
|
enableReflection = true
|
|
launchAtLogin = false
|
|
}
|
|
}
|