// // SaveNoteTool.swift // Poche // // Author: Simon-Pierre Boucher // Contact: contact@spboucher.ai // import Foundation import FoundationModels /// Saves into Poche's own notes (SwiftData). Not Apple Notes — there is no /// public API for that, and the name must not pretend otherwise /// (CLAUDE.md §4). struct SaveNoteTool: Tool { let name = "saveNote" let description = "Propose d'enregistrer une note dans Poche (pas dans l'app Notes d'Apple). L'utilisateur devra confirmer." @Generable struct Arguments { @Guide(description: "Titre court de la note") let title: String @Guide(description: "Contenu de la note") let content: 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." } guard let content = ToolInput.body(arguments.content) else { return "Erreur : le contenu est vide. Demande le contenu à l'utilisateur." } let draft = NoteDraft(title: title, content: content) await confirm.propose(PendingAction(payload: .note(draft))) return "Proposition affichée : note « \(title) ». Rien n'est encore enregistré — l'utilisateur doit confirmer." } }