spb/zyquo-agent Public MIT
The autonomous agent that actually operates your Mac — plans, runs real commands, verifies its own work.
Swift 94.7%
Shell 4.1%
Python 0.7%
Makefile 0.5%
1//2// TemplateStore.swift3// Zyquo Agent4//5// Author: Simon-Pierre Boucher6// Mail: contact@spboucher.ai7//8// Task templates: the built-in library (TaskTemplateLibrary) plus the user's9// own templates, persisted to templates.json. Built-ins are read-only.10//1112import Combine13import Foundation1415@MainActor16final class TemplateStore: ObservableObject {17 static let fileName = "templates.json"1819 /// User-created templates (CRUD, persisted).20 @Published private(set) var userTemplates: [TaskTemplate] {21 didSet { persistence.save(userTemplates, to: Self.fileName) }22 }2324 private let persistence: PersistenceService2526 init(persistence: PersistenceService = .shared) {27 self.persistence = persistence28 self.userTemplates = persistence.load([TaskTemplate].self, from: Self.fileName) ?? []29 }3031 /// Built-ins first (library order), then user templates.32 var all: [TaskTemplate] {33 TaskTemplateLibrary.builtIn + userTemplates34 }3536 func templates(in category: TemplateCategory) -> [TaskTemplate] {37 all.filter { $0.category == category }38 }3940 // MARK: - CRUD (user templates only)4142 func add(_ template: TaskTemplate) {43 var template = template44 template.isBuiltIn = false45 userTemplates.append(template)46 }4748 func update(_ template: TaskTemplate) {49 guard let index = userTemplates.firstIndex(where: { $0.id == template.id }) else { return }50 userTemplates[index] = template51 }5253 func delete(_ id: TaskTemplate.ID) {54 userTemplates.removeAll { $0.id == id }55 }56}57