// // CreateTaskTool.swift // Poche // // Author: Simon-Pierre Boucher // Contact: contact@spboucher.ai // import Foundation import FoundationModels struct CreateTaskTool: Tool { let name = "createTask" let description = "Propose la création d'une tâche dans Poche. L'utilisateur devra confirmer." @Generable struct Arguments { @Guide(description: "Titre de la tâche, court et concret") let title: String @Guide(description: "Détails, seulement si utiles") let details: String? @Guide(description: "Échéance au format ISO 8601, seulement si l'utilisateur en a donné une") let dueDate: String? } private let confirm: ConfirmCenter init(confirm: ConfirmCenter) { self.confirm = confirm } func call(arguments: Arguments) async throws -> String { guard let title = ToolInput.title(arguments.title) else { return "Erreur : le titre est vide. Demande un titre à l'utilisateur." } var due: Date? if let rawDue = arguments.dueDate, !rawDue.trimmingCharacters(in: .whitespaces).isEmpty { do { due = try DateResolver.resolve(iso: rawDue) } catch { return "Erreur sur l'échéance : \(error.localizedDescription)" } } let draft = TaskDraft( title: title, details: arguments.details.flatMap(ToolInput.body), due: due ) await confirm.propose(PendingAction(payload: .newTask(draft))) return "Proposition affichée : tâche « \(title) ». Rien n'est encore créé — l'utilisateur doit confirmer." } }