// // PersonaStore.swift // Zyquo Agent // // Author: Simon-Pierre Boucher // Mail: contact@spboucher.ai // // Personas (Phase 6): system-prompt addition + preferred agent model + // default safety mode, persisted to personas.json. A task adopting a // persona gets its addendum appended to the agent system prompt on every // run (AgentConfiguration.personaAddendum). // import Combine import Foundation @MainActor final class PersonaStore: ObservableObject { static let fileName = "personas.json" @Published private(set) var personas: [Persona] { didSet { persistence.save(personas, to: Self.fileName) } } private let persistence: PersistenceService init(persistence: PersistenceService = .shared) { self.persistence = persistence self.personas = persistence.load([Persona].self, from: Self.fileName) ?? [] } func persona(id: UUID?) -> Persona? { guard let id else { return nil } return personas.first { $0.id == id } } // MARK: - CRUD func add(_ persona: Persona) { personas.append(persona) } func update(_ persona: Persona) { guard let index = personas.firstIndex(where: { $0.id == persona.id }) else { return } personas[index] = persona } func delete(_ id: Persona.ID) { personas.removeAll { $0.id == id } } }