2.4 #6

Merged
rune merged 14 commits from 2.4 into main 2026-06-19 08:05:37 +02:00
5 changed files with 15 additions and 18 deletions
Showing only changes of commit 92e393ab03 - Show all commits
+1 -1
View File
@@ -33,7 +33,7 @@ struct Conversation: Identifiable, Codable {
var updatedAt: Date
var primaryModel: String? // Primary model used in this conversation
init(
nonisolated init(
id: UUID = UUID(),
name: String,
messages: [Message] = [],
+1 -1
View File
@@ -44,7 +44,7 @@ struct EmailLog: Identifiable, Codable, Equatable {
let responseTime: TimeInterval? // Time to generate response in seconds
let modelId: String? // Model that handled the email
init(
nonisolated init(
id: UUID = UUID(),
timestamp: Date = Date(),
sender: String,
+1 -1
View File
@@ -66,7 +66,7 @@ struct Message: Identifiable, Codable, Equatable {
// Reasoning/thinking content (not persisted in-memory only)
var thinkingContent: String? = nil
init(
nonisolated init(
id: UUID = UUID(),
role: MessageRole,
content: String,
+7 -10
View File
@@ -31,12 +31,11 @@ import IOKit
class EncryptionService {
nonisolated static let shared = EncryptionService()
private let salt = "oAI-secure-storage-v1" // App-specific salt
private lazy var encryptionKey: SymmetricKey = {
deriveEncryptionKey()
}()
private let encryptionKey: SymmetricKey
private init() {}
private init() {
self.encryptionKey = Self.deriveEncryptionKey()
}
// MARK: - Public Interface
@@ -73,19 +72,17 @@ class EncryptionService {
// MARK: - Key Derivation
/// Derive encryption key from machine-specific data
private func deriveEncryptionKey() -> SymmetricKey {
// Combine machine UUID + bundle ID + salt for key material
private static func deriveEncryptionKey() -> SymmetricKey {
let machineUUID = getMachineUUID()
let bundleID = Bundle.main.bundleIdentifier ?? "com.oai.oAI"
let salt = "oAI-secure-storage-v1"
let keyMaterial = "\(machineUUID)-\(bundleID)-\(salt)"
// Hash to create consistent 256-bit key
let hash = SHA256.hash(data: Data(keyMaterial.utf8))
return SymmetricKey(data: hash)
}
/// Get machine-specific UUID (IOPlatformUUID)
private func getMachineUUID() -> String {
private static func getMachineUUID() -> String {
// Get IOPlatformUUID from IOKit
let platformExpert = IOServiceGetMatchingService(
kIOMainPortDefault,
+5 -5
View File
@@ -52,7 +52,7 @@ enum LogLevel: Int, Comparable, CaseIterable, Sendable {
}
}
static func < (lhs: LogLevel, rhs: LogLevel) -> Bool {
nonisolated static func < (lhs: LogLevel, rhs: LogLevel) -> Bool {
lhs.rawValue < rhs.rawValue
}
}
@@ -60,7 +60,7 @@ enum LogLevel: Int, Comparable, CaseIterable, Sendable {
// MARK: - File Logger
final class FileLogger: @unchecked Sendable {
static let shared = FileLogger()
nonisolated static let shared = FileLogger()
private let fileHandle: FileHandle?
private let queue = DispatchQueue(label: "com.oai.filelogger")
@@ -70,8 +70,8 @@ final class FileLogger: @unchecked Sendable {
return f
}()
/// Current minimum log level (read from UserDefaults for thread safety)
var minimumLevel: LogLevel {
/// Current minimum log level (backed by UserDefaults thread-safe).
nonisolated var minimumLevel: LogLevel {
get {
let raw = UserDefaults.standard.integer(forKey: "logLevel")
return LogLevel(rawValue: raw) ?? .info
@@ -95,7 +95,7 @@ final class FileLogger: @unchecked Sendable {
fileHandle?.seekToEndOfFile()
}
func write(_ level: LogLevel, category: String, message: String) {
nonisolated func write(_ level: LogLevel, category: String, message: String) {
guard level >= minimumLevel else { return }
queue.async { [weak self] in
guard let self, let fh = self.fileHandle else { return }