spb/poche Public
Agent personnel 100 % on-device — SwiftUI + Apple Foundation Models + EventKit + SwiftData. Aucune API, aucun serveur.
Swift 100%
1//2// SaveNoteTool.swift3// Poche4//5// Author: Simon-Pierre Boucher6// Contact: contact@spboucher.ai7//89import Foundation10import FoundationModels1112/// Saves into Poche's own notes (SwiftData). Not Apple Notes — there is no13/// public API for that, and the name must not pretend otherwise14/// (CLAUDE.md §4).15struct SaveNoteTool: Tool {16 let name = "saveNote"17 let description = "Propose d'enregistrer une note dans Poche (pas dans l'app Notes d'Apple). L'utilisateur devra confirmer."1819 @Generable20 struct Arguments {21 @Guide(description: "Titre court de la note")22 let title: String23 @Guide(description: "Contenu de la note")24 let content: String25 }2627 private let confirm: ConfirmCenter2829 init(confirm: ConfirmCenter) {30 self.confirm = confirm31 }3233 func call(arguments: Arguments) async throws -> String {34 guard let title = ToolInput.title(arguments.title) else {35 return "Erreur : le titre est vide. Demande un titre à l'utilisateur."36 }37 guard let content = ToolInput.body(arguments.content) else {38 return "Erreur : le contenu est vide. Demande le contenu à l'utilisateur."39 }4041 let draft = NoteDraft(title: title, content: content)42 await confirm.propose(PendingAction(payload: .note(draft)))4344 return "Proposition affichée : note « \(title) ». Rien n'est encore enregistré — l'utilisateur doit confirmer."45 }46}47