SPB Git

spb/poche Public

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

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