SPB Git

spb/poche Public

Agent personnel 100 % on-device — SwiftUI + Apple Foundation Models + EventKit + SwiftData. Aucune API, aucun serveur.

Swift 100%
1.7 KB · 56 lines swift
Raw Blame History
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