spb/poche Public
Agent personnel 100 % on-device — SwiftUI + Apple Foundation Models + EventKit + SwiftData. Aucune API, aucun serveur.
Swift 100%
1//2// ToolInput.swift3// Poche4//5// Author: Simon-Pierre Boucher6// Contact: contact@spboucher.ai7//89import Foundation1011/// Shared sanitation for model-provided tool arguments. Model output is12/// hostile input: trim it, cap it, never let it balloon the store or the13/// confirmation card.14enum ToolInput {15 static let maxTitleLength = 8016 static let maxBodyLength = 20001718 /// Trimmed, capped title — nil when effectively empty.19 static func title(_ raw: String) -> String? {20 let trimmed = raw.trimmingCharacters(in: .whitespacesAndNewlines)21 guard !trimmed.isEmpty else { return nil }22 return String(trimmed.prefix(maxTitleLength))23 }2425 static func body(_ raw: String) -> String? {26 let trimmed = raw.trimmingCharacters(in: .whitespacesAndNewlines)27 guard !trimmed.isEmpty else { return nil }28 return String(trimmed.prefix(maxBodyLength))29 }3031 static func optionalText(_ raw: String?) -> String? {32 guard let raw else { return nil }33 return title(raw)34 }35}36