spb/poche Public
Agent personnel 100 % on-device — SwiftUI + Apple Foundation Models + EventKit + SwiftData. Aucune API, aucun serveur.
Swift 100%
1//2// CreateTaskTool.swift3// Poche4//5// Author: Simon-Pierre Boucher6// Contact: contact@spboucher.ai7//89import Foundation10import FoundationModels1112struct CreateTaskTool: Tool {13 let name = "createTask"14 let description = "Propose la création d'une tâche dans Poche. L'utilisateur devra confirmer."1516 @Generable17 struct Arguments {18 @Guide(description: "Titre de la tâche, court et concret")19 let title: String20 @Guide(description: "Détails, seulement si utiles")21 let details: String?22 @Guide(description: "Échéance au format ISO 8601, seulement si l'utilisateur en a donné une")23 let dueDate: String?24 }2526 private let confirm: ConfirmCenter2728 init(confirm: ConfirmCenter) {29 self.confirm = confirm30 }3132 func call(arguments: Arguments) async throws -> String {33 guard let title = ToolInput.title(arguments.title) else {34 return "Erreur : le titre est vide. Demande un titre à l'utilisateur."35 }3637 var due: Date?38 if let rawDue = arguments.dueDate, !rawDue.trimmingCharacters(in: .whitespaces).isEmpty {39 do {40 due = try DateResolver.resolve(iso: rawDue)41 } catch {42 return "Erreur sur l'échéance : \(error.localizedDescription)"43 }44 }4546 let draft = TaskDraft(47 title: title,48 details: arguments.details.flatMap(ToolInput.body),49 due: due50 )51 await confirm.propose(PendingAction(payload: .newTask(draft)))5253 return "Proposition affichée : tâche « \(title) ». Rien n'est encore créé — l'utilisateur doit confirmer."54 }55}56