SPB Git

spb/poche Public

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

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