Skip to content

Code source

martialzinsou edited this page Sep 21, 2026 · 4 revisions

Code source

Vue d'ensemble du dépôt

KarenOs/
├── Sources/
│   └── KarenOS/
│       ├── KarenOSApp.swift          ← point d'entrée, onglets, environnement
│       ├── ContentView.swift         ← conteneur des onglets
│       ├── ChatView.swift            ← interface de discussion + compétence active
│       ├── ChatService.swift         ← historique, streaming, appel OpenAI local
│       ├── ModelStore.swift          ← registre des modèles installés
│       ├── LocalModel.swift          ← modèle de données d'un modèle installé
│       ├── StoreView.swift           ← Boutique (recherche, cartes)
│       ├── StoreCard.swift           ← carte d'un modèle dans la Boutique
│       ├── StoreDetailSheet.swift    ← fiche détail (fichiers, licence, dialogue)
│       ├── HuggingFaceClient.swift   ← API Hugging Face (recherche, détails, CDN)
│       ├── DownloadManager.swift     ← téléchargement avec progression
│       ├── StoreModel.swift          ← modèle de données d'une entrée Boutique
│       ├── Skill.swift               ← modèle Skill + SkillStore
│       ├── SkillsView.swift          ← onglet Compétences (liste, détail, éditeur)
│       ├── ModelListView.swift       ← bibliothèque « Mes modèles »
│       ├── EngineManager.swift       ← moteur : install, port libre, lancement, health
│       ├── AppPaths.swift            ← chemins vers ~/Library/Application Support
│       └── ...
├── Scripts/
│   ├── make-app.sh                   ← compilation + assemblage de l'app
│   └── …                             ← autres scripts d'aide
├── Packaging/
│   └── Info.plist                    ← propriétés de l'app
├── build/                            ← résultat de la compilation (ignoré par git)
├── screenshots/                      ← captures d'écran pour le README
├── docs/DOCUMENTATION.md             ← documentation complète (schémas Mermaid)
└── README.md

Carte des responsabilités

Fichier Responsabilité clé
KarenOSApp.swift @main ; construit le SkillStore et l'AgentStore en environmentObject ; configure les 4 onglets.
Agent.swift Modèles Agent, AgentTrigger (manuel/lancement/intervalle), AgentEndCondition (itérations, durée, mot-clé), AgentStore persisté.
AgentRunner.swift Boucle de mission : chargement du modèle de l'agent, itérations en streaming, pause/reprise/arrêt, conditions de fin, restauration du modèle précédent, journal.
AgentsView.swift Onglet Agents : liste, fiche (mission, exécution, journal), éditeur (modèle, déclencheur, boucle, conditions de fin).
Multimodal.swift ChatAttachment (image/vidéo/audio/fichier), panneau de sélection, SpeechInputController (dictée locale SFSpeechRecognizer).
ContentView.swift Le TabView : Mes modèles / Boutique / Agents / Compétences.
ChatView.swift Saisie, envoi, affichage streaming ; menu « Compétence » ; badge de statut ; pièces jointes et micro (multimodal).
ChatService.swift Compile l'historique, insère le prompt système, appelle le moteur, parse les événements SSE, génère le texte ; support vision (contenu multi-part).
ModelStore.swift Charge models.json, déduplique, résout la liste/fichiers, mémorise l'installation.
StoreView.swift Recherche (débounce 450 ms), 12 résultats max, cartes, gestion d'état de la Boutique.
HuggingFaceClient.swift Catégorié par modèle : search, details, resolve (URL CDN d'un fichier). Détecte les modèles gated.
DownloadManager.swift Session de téléchargement avec progrès, reprend/annule proprement, écrit dans Models/.
EngineManager.swift Installation idempotente du moteur, port libre, launch, poll /health (max 120 s), arrêt propre.
Skill.swift Décodage/encodage persistant + systemPrompt (Rôle / Contexte / Obligations).
SkillsView.swift Liste, fiche détail (aperçu du prompt), éditeur avec modèles d'exemples, activation.

Conventions

  • Swift strict : typage explicite des modèles de données (LocalModel, StoreModel, Skill), pas de dépendances externes (pas de CocoaPods / SPM utilisable — build swiftc nu).
  • Pas de commentaires superflus : code lisible par lui-même.
  • En-têtes uniformes : // KarenOS + // Par Martial Zinsou sur chaque source.
  • UI en SwiftUI : TabView, List, Sheet, Menu, AsyncImage, Task {} / @State / @EnvironmentObject.

Exemple : le cœur du streaming (ChatService)

// (pseudo-structure)
func streamReply(messages: [String], baseURL: URL) -> AsyncThrowingStream<String, Error> {
    AsyncThrowingStream { continuation in
        // 1. build de l'URL /v1/chat/completions
        // 2. request POST { messages, stream: true, max_tokens: 512, temperature: 0.7 }
        // 3. for try await line in lines { 
        //      parse SSE "data: {delta.content}" → continuation.yield(token)
        //    }
        // 4. "[DONE]" → continuation.finish()
    }
}

Compiler et lancer

Raccourci : Scripts/make-app.sh puis ouverture de build/KarenOS.app. Voir la page Construction & lancement pour le détail complet.

Voir aussi : Architecture, Persistance.

Clone this wiki locally