spb/poche Public
Agent personnel 100 % on-device — SwiftUI + Apple Foundation Models + EventKit + SwiftData. Aucune API, aucun serveur.
Swift 100%
1//2// AppDependencies.swift3// Poche4//5// Author: Simon-Pierre Boucher6// Contact: contact@spboucher.ai7//89import Foundation10import SwiftData11import FoundationModels12import Observation1314/// Composition root. Everything is built here once, so there is a single15/// ConfirmCenter (the only write path) and a single AgentSession (one16/// request in flight, ever).17@MainActor18@Observable19final class AppDependencies {20 let store: PocheStore21 let index: SemanticIndex22 let bridge: EventKitBridge23 let confirm: ConfirmCenter24 let agent: AgentSession25 let chat: ChatViewModel2627 init(container: ModelContainer) {28 let store = PocheStore(container: container)29 let index = SemanticIndex()30 let bridge = EventKitBridge()31 let executor = ActionExecutor(bridge: bridge, store: store)32 let confirm = ConfirmCenter(executor: executor)3334 // Hard cap from CLAUDE.md §4: at most 8 tools exposed simultaneously.35 let tools: [any Tool] = [36 CreateReminderTool(confirm: confirm),37 CreateCalendarEventTool(confirm: confirm),38 SaveNoteTool(confirm: confirm),39 CreateTaskTool(confirm: confirm),40 UpdateTaskTool(confirm: confirm, store: store),41 SearchMyDataTool(store: store, index: index),42 GetUpcomingTool(bridge: bridge),43 ]44 precondition(tools.count <= 8, "Tool cardinality cap exceeded (CLAUDE.md §4)")4546 let agent = AgentSession(tools: tools)4748 self.store = store49 self.index = index50 self.bridge = bridge51 self.confirm = confirm52 self.agent = agent53 self.chat = ChatViewModel(agent: agent, confirm: confirm, store: store)54 }55}56