| Version | Date | Description |
|---|---|---|
| 1.0.0 | Janvier 2025 | Version initiale -- modules de base (Dashboard, Applications, Nettoyage, RAM Cleaner). |
| 1.0.1 | Juin 2025 | Phase 3.2 -- Integration LLamaSharp dual-executor, AiChatService, Flow Chains v2. |
| 1.0.2 | Octobre 2025 | Phase 3.3 -- SourceAnalyzer (Roslyn AST), StateValidator (Clone Numerique), metriques Halstead. |
| 1.0.3 | Janvier 2026 | Phase 3.4 -- CodePatcherService, workflow d'approbation humaine, audit NDJSON, Isolation Forest. |
| 1.0.4 | Mars 2026 | Corrections post-audit expert, refactoring axes 1-6, algorithmes avances, site web multi-langue. |
Coclico est une plateforme de gestion systeme Windows de classe entreprise, concue pour operer integralement en local, sans aucune connexion vers un service cloud. La version 1.0.4 represente l'aboutissement de quatre phases majeures de developpement, couvrant la gestion des processus, l'automatisation par chaines visuelles, le nettoyage systeme avance, et un noyau autonome pilote par intelligence artificielle locale.
L'application repose sur le framework .NET 10 avec le langage C# en mode preview, une interface graphique construite sur WPF-UI 4.2 (Fluent Design), et un moteur d'inference IA local base sur LLamaSharp 0.26. L'ensemble du traitement, y compris les decisions d'optimisation prises par le modele de langage, s'execute exclusivement sur la machine de l'utilisateur.
Le noyau autonome constitue la particularite principale de Coclico. Il implemente une boucle d'observation, d'analyse et d'action en trois etapes pipelinisees. Le composant OptimizationEngine collecte les metriques systeme toutes les 30 secondes, les soumet au modele d'inference pour decision, puis execute les actions validees avec creation systematique d'un point de restauration. En parallele, le composant SourceAnalyzer analyse le code source C# a l'aide de Roslyn pour identifier les hotspots de complexite, tandis que le Clone Numerique (StateValidator) valide que toute modification proposee par l'IA ne degrade pas les metriques de qualite logicielle.
La version 1.0.4 integre les corrections issues d'un audit expert complet, un refactoring sur six axes structurels (elimination du code mort, injection de dependances exclusive, decouplage par interfaces, algorithmes statistiques avances), ainsi qu'un site web multi-langue deploye sur GitHub Pages.
Chiffres cles de l'application :
Coclico incarne une vision d'autonomie numerique totale. L'objectif est de fournir a l'utilisateur un outil capable de gerer, optimiser et auditer son systeme Windows sans jamais deleguer une seule operation a un service exterieur. Cette philosophie se materialise par le principe architectural Zero Cloud : toute l'inference IA, toute la telemetrie, tout le stockage de donnees s'executent exclusivement sur la machine locale.
La trajectoire de developpement suit une progression methodique vers l'autonomie. Les premieres phases ont etabli les fondations (telemetrie, gestion de la qualite de service, mecanisme de restauration). Les phases intermediaires ont introduit l'intelligence artificielle locale avec un double contexte d'execution isole. Les phases actuelles visent la capacite d'auto-amelioration du code source par analyse statique et patching automatique, le tout supervise par un clone numerique qui garantit la non-regression de la qualite.
Le perimetre fonctionnel de Coclico couvre huit domaines principaux :
| Domaine | Description | Module |
|---|---|---|
| Supervision | Metriques temps reel CPU, RAM, disque, uptime, processus | Tableau de Bord |
| Gestion logicielle | Bibliotheque universelle multi-sources avec categorisation | Applications |
| Automatisation | Chaines visuelles de taches avec 28 types de noeuds | Flow Chains |
| Deploiement | Installation via Winget en interface graphique | Installeur Rapide |
| Maintenance | Nettoyage avance de 10 categories systeme | Nettoyage Systeme |
| Audit | Inventaire complet des applications installees | Scanner |
| Optimisation memoire | 18 operations natives de liberation memoire | RAM Cleaner |
| Assistance IA | Chat local avec RAG et connaissance contextuelle | Coclico AI |
Coclico s'adresse a trois profils d'utilisateurs complementaires. Les administrateurs systeme y trouvent un outil de supervision et de maintenance centralise. Les developpeurs beneficient des capacites d'analyse de code et d'auto-optimisation du noyau autonome. Les utilisateurs avances exploitent les Flow Chains pour automatiser leurs taches quotidiennes sans ecrire de code.
| Composant | Technologie | Version | Role |
|---|---|---|---|
| Runtime | .NET | 10.0 | Framework d'execution principal |
| Langage | C# | Preview (LangVersion) | Constructeurs primaires, expressions de collection |
| Interface graphique | WPF + WPF-UI | 4.2.0 | Fluent Design, Mica backdrop, TitleBar etendue |
| MVVM | CommunityToolkit.Mvvm | 8.4.0 | Generateurs de source pour ViewModels |
| IA locale | LLamaSharp + Backend CPU | 0.26.0 | Inference LLM locale, double contexte isole |
| Analyse AST | Microsoft.CodeAnalysis.CSharp | 4.12.0 | Analyse Roslyn, calcul CC, metriques Halstead |
| Injection de dependances | Microsoft.Extensions.DependencyInjection | 10.0.0 | Conteneur DI avec validation au build |
| Journalisation | Serilog + Sinks.File | 4.2.0 / 6.0.0 | Journaux rotatifs quotidiens, retention 14 jours |
| Cache | Microsoft.Extensions.Caching.Memory | 10.0.0 | Cache en memoire pour donnees applicatives |
| HTTP | Microsoft.Extensions.Http | 10.0.0 | HttpClientFactory pour appels reseau |
| Extensions reactives | System.Reactive | 6.0.1 | Flux observables pour evenements systeme |
| Acces materiel | System.Management | 10.0.0 | WMI pour metriques hardware |
| Services Windows | System.ServiceProcess.ServiceController | 10.0.0 | Controle des services systeme |
| Serialisation | System.Text.Json | Natif .NET 10 | JSON haute performance, FrozenSet |
Le fichier projet (Coclico.csproj) active les optimisations suivantes au niveau du runtime :
| Directive | Valeur | Effet |
|---|---|---|
TieredPGO | true | Profile-Guided Optimization par niveaux |
TieredCompilation | true | Compilation JIT progressive |
OptimizationPreference | Speed | Privilege la vitesse d'execution |
ConcurrentGarbageCollection | true | GC concurrent pour reduire les pauses |
ServerGarbageCollection | false | Mode Workstation GC pour application desktop |
Le demarrage de Coclico suit une sequence rigoureusement ordonnee, implementee dans App.xaml.cs. Chaque etape est condiditonnelle et journalisee.
App.OnStartup)WindowsPrincipal.IsInRole(WindowsBuiltInRole.Administrator). Si ce n'est pas le cas, une fenetre AdminPromptWindow propose a l'utilisateur de redemarrer avec elevation UAC. En cas de refus, l'application s'arrete.RenderMode.Default, le pool de threads est calibre sur le nombre de coeurs processeur (Environment.ProcessorCount), le GC est place en mode SustainedLowLatency, et le taux d'images des animations WPF est fixe a 60 FPS.ServiceContainer.Build() est appele avec une lambda de configuration qui enregistre l'ensemble des services. La validation est activee (ValidateOnBuild = true), ce qui provoque une erreur immediate si une dependance est manquante.SplashWindow est affichee pendant l'initialisation des services en arriere-plan (RunStartupAsync).IAuditLog execute un nettoyage des entrees depassant la duree de retention configuree (par defaut : 90 jours).Settings.FirstRun est vrai, la fenetre LauncherWindow s'affiche pour permettre la configuration du mode de demarrage (Normal, Minimise, Tray), du demarrage automatique avec Windows et de la reduction dans la zone de notification.MainWindow est instanciee et affichee selon le mode configure.ThemeService.ApplyCurrentSettings() applique la couleur d'accent, l'opacite des cartes et le mode sombre/clair.MemoryCleanerService.TrimSelfWorkingSet() est execute en arriere-plan pour reduire l'empreinte memoire du processus.UpdateCheckService est initialise et verifie les mises a jour toutes les 5 minutes.App.OnExit)L'arret procede au nettoyage ordonne des ressources. Chaque etape est protegee par un bloc try/catch independant pour garantir la robustesse :
ResourceGuardServiceThemeServiceIAiService (decharge le modele LLM de la memoire)ProcessWatcherServiceNetworkMonitorServiceIDynamicTracer.FlushToDisk)ServiceContainer.Shutdown), qui appelle Log.CloseAndFlush() pour SerilogLe conteneur de dependances est encapsule dans la classe statique ServiceContainer, un wrapper thread-safe autour de IServiceProvider utilisant Lazy<T> avec LazyThreadSafetyMode.ExecutionAndPublication.
| Methode | Signature | Comportement |
|---|---|---|
Build | Build(Action<IServiceCollection>) | Construit le conteneur avec journalisation Serilog, cache memoire, audit et HttpClient |
GetRequired<T> | T GetRequired<T>() | Resout le service ou leve une exception |
GetOptional<T> | T? GetOptional<T>() | Resout le service ou retourne null |
CreateScope | IServiceScope CreateScope() | Cree un scope DI pour les services transitoires |
Shutdown | void Shutdown() | Dispose le provider et ferme Serilog |
Les services sont enregistres selon trois categories :
Services avec contrat d'interface (Singletons) :
| Interface | Implementation | Responsabilite |
|---|---|---|
ISecurityPolicy | SecurityPolicyService | Politique de securite avec patterns bloques |
ICacheService | CacheService | Abstraction du cache en memoire |
IDynamicTracer | DynamicTracerService | Telemetrie et metriques de performance |
IResourceAllocator | ResourceAllocatorService | Gestion QoS des processus (priorite, affinite) |
IRollbackService | RollbackService | Points de restauration chiffres (DPAPI) |
ISourceAnalyzer | SourceAnalyzerService | Analyse statique Roslyn |
IStateValidator | StateValidatorService | Clone Numerique -- validation des patches |
ICodePatcher | CodePatcherService | Application de patches avec approbation |
IOptimizationEngine | OptimizationEngineService | Pipeline d'optimisation autonome |
IAiService | AiChatService | Inference LLM locale double contexte |
IAuditLog | AuditLogService | Piste d'audit NDJSON |
Services concrets (Singletons) : SettingsService, InstalledProgramsService, ProfileService, ProcessWatcherService, WorkflowService, ThemeService, LocalizationService, ResourceGuardService, NetworkMonitorService, KeyboardShortcutsService, StartupService, FeatureExecutionEngine.
Services transitoires : CleaningService, InstallerService, StartupHealthService, UserAccountService.
L'application suit le patron Model-View-ViewModel avec une separation stricte des responsabilites :
| Couche | Repertoire | Elements | Convention |
|---|---|---|---|
| Models | Models/ | WorkflowPipeline, PipelineStep, PipelineConnection, LaunchMode | Records immutables pour DTOs, classes INotifyPropertyChanged pour les modeles editables |
| Views | Views/ | 16 vues XAML dont DashboardView, ProgramsView, WorkflowPipelinesView, CleaningView, ScannerView, RamCleanerView, AiChatView, InstallerView, SettingsView | Pas de logique metier dans le code-behind |
| ViewModels | ViewModels/ | DashboardViewModel, CleaningViewModel, ScannerViewModel, SettingsViewModel, WorkflowPipelinesViewModel | Injection par constructeur, CommunityToolkit.Mvvm |
| Services | Services/ | 50+ fichiers de service | Injection par constructeur, ConfigureAwait(false) pour les services de fond |
Les mises a jour de l'interface utilisateur depuis les services de fond respectent la contrainte WPF de thread-affinity via Dispatcher.InvokeAsync. Aucun service n'attend de maniere synchrone une reponse du modele LLM depuis le thread UI.
Au demarrage, l'application configure le runtime pour minimiser les latences :
Environment.ProcessorCount pour eviter les delais de montee en charge.SustainedLowLatency reduit les pauses de collection pendant les operations interactives.Timeline.DesiredFrameRateProperty.RenderMode.Default pour compatibilite maximale avec l'acceleration materielle.Le Tableau de Bord est la page d'accueil de Coclico. Il affiche en temps reel, avec un intervalle de rafraichissement de 3 secondes, les metriques systeme essentielles :
| Metrique | Source | Format |
|---|---|---|
| Utilisation CPU | MemoryCleanerService.GetSystemCpuPercent() | Pourcentage |
| RAM utilisee / totale | MemoryCleanerService.GetRamInfo() | Go / Go |
| Disque C: libre / total | API .NET DriveInfo | Go / Go |
| Uptime Windows | Environment.TickCount64 | jours:heures:minutes |
| Processus actifs | Process.GetProcesses() | Nombre entier |
| Applications installees | InstalledProgramsService | Nombre entier |
L'implementation utilise DashboardViewModel qui met a jour les proprietes liees via le Dispatcher pour respecter le modele de threading WPF.
Le module Applications fournit une bibliotheque exhaustive de tous les logiciels et jeux installes sur le systeme. La detection s'appuie sur de multiples sources :
| Source | Methode de detection |
|---|---|
| Registre Windows | Balayage de HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall et HKCU |
| Steam | Parsing des fichiers appmanifest_*.acf (regex "name"\s+"([^"]+)") |
| Epic Games | Parsing des manifests JSON (DisplayName, InstallLocation, LaunchExecutable) |
| GOG Galaxy | Detection via les repertoires d'installation |
| Ubisoft Connect | Detection via le registre et les repertoires standards |
| EA App | Detection via les repertoires d'installation |
| Rockstar Games | Detection via le registre et les repertoires |
| Microsoft Store (MSIX) | Enumeration des packages installes |
Fonctionnalites avancees :
custom_apps_data.json)ICacheService pour des performances optimalesLe service InstalledProgramsService utilise des SearchValues<string> (.NET 8+) et des FrozenSet<string> pour filtrer efficacement les utilitaires systeme et drivers de la liste affichee. Des expressions regulieres generees a la compilation ([GeneratedRegex]) optimisent le parsing des manifests.
Les Flow Chains constituent le moteur d'automatisation visuelle de Coclico. L'utilisateur compose des chaines de taches par glisser-deposer dans un editeur graphique a noeuds connectes.
| Categorie | Noeuds | Description |
|---|---|---|
| Controle de flux | Start, End, Condition, Loop, Parallel, Delay | Structure et ordonnancement des chaines |
| Applications | OpenApp, CloseApp, KillProcess, KillByMemory, SetProcessPriority | Controle du cycle de vie des processus |
| Commandes | RunCommand, RunPowerShell | Execution de commandes systeme et scripts |
| Reseau | HttpRequest, OpenUrl | Requetes HTTP et ouverture d'URL |
| Fichiers | FileOperation, CompressFile, Screenshot | Operations sur le systeme de fichiers |
| Systeme | SystemCheck, CleanTemp, RamClean, EmptyRecycleBin | Operations de maintenance systeme |
| Interface | Notification, SetVolume, MuteAudio, ClipboardSet, SendKeys, TriggerShortcut | Interaction avec l'environnement utilisateur |
| Operateur | Description |
|---|---|
ProcessRunning / ProcessNotRunning | Verifie l'etat d'execution d'un processus |
FileExists / FileNotExists | Teste l'existence d'un fichier |
TimeAfter / TimeBefore | Condition basee sur l'heure |
CpuBelow / CpuAbove | Seuil d'utilisation CPU |
RamBelow / RamAbove | Seuil d'utilisation memoire |
Chaque PipelineStep possede une propriete OnErrorAction qui determine le comportement en cas d'echec :
ContinueNext (defaut) -- Passe au noeud suivantStopChain -- Arrete immediatement la chaineSkipToEnd -- Saute directement au noeud EndLes chaines sont persistees au format JSON dans %AppData%\Coclico\flow_chains.json. Un mecanisme de migration automatique (ApplyV2MigrationAsync) gere la transition vers le format v2. Les declencheurs supportes incluent les raccourcis clavier globaux (Ctrl+(Alt+)Touche) et les intervalles temporels configurables (minimum 10 secondes).
L'Installeur Rapide fournit une interface graphique pour Windows Package Manager (Winget), permettant l'installation de logiciels en un clic sans recourir a la ligne de commande.
Categories de logiciels disponibles :
La portee d'installation (Scope) est configurable entre Machine (tous les utilisateurs) et User (utilisateur courant) via les parametres de l'application.
Le module de Nettoyage Systeme fournit un moteur de maintenance professionnel avec estimation prealable de l'espace recuperable. Le service CleaningService implemente deux niveaux de nettoyage :
| Categorie | Chemins cibles |
|---|---|
| Fichiers temporaires Windows | %Temp%, C:\Windows\Temp |
| Cache navigateurs | Chrome, Firefox, Edge -- dossiers de cache respectifs |
| Journaux systeme | Fichiers .log dans les repertoires systeme |
| Corbeille | $Recycle.Bin |
| Fichiers temporaires utilisateur | %UserProfile%\AppData\Local\Temp |
| Cache miniatures | thumbcache_*.db |
| Rapports d'erreur Windows | Windows Error Reporting |
| Anciens installers/mises a jour | SoftwareDistribution, anciens packages |
| Cache DNS | Appel natif DnsFlushResolverCache() |
| Prefetch | C:\Windows\Prefetch |
Le mode Deep Clean ajoute un nettoyage intensif couvrant les fichiers orphelins, les caches applicatifs etendus et les artefacts de mise a jour Windows. Le resultat de chaque operation est encapsule dans un objet CleaningResult contenant le nombre de fichiers supprimes, l'espace libere en octets, la duree d'execution et la liste des erreurs eventuelles.
Le Scanner realise un audit complet de l'ensemble des applications installees. Pour chaque application detectee, il restitue :
Les resultats sont triables et filtrables en temps reel. Le ScannerViewModel orchestre l'analyse et presente les resultats dans une vue tabulaire avec possibilite d'export.
Le module RAM Cleaner est le composant le plus profond du point de vue systeme. Il exploite 18 operations natives Windows via P/Invoke pour optimiser l'utilisation de la memoire vive.
GlobalMemoryStatusEx)| # | Operation | API Native | Effet |
|---|---|---|---|
| 1 | Empty Working Sets | NtSetSystemInformation(80, cmd=2) | Vide les Working Sets de tous les processus |
| 2 | Flush Modified Page List | NtSetSystemInformation(80, cmd=3) | Ecrit les pages modifiees sur disque |
| 3 | Purge Standby List | NtSetSystemInformation(80, cmd=4) | Libere la Standby List |
| 4 | Purge Low Priority Standby | NtSetSystemInformation(80, cmd=5) | Libere les pages Standby basse priorite |
| 5 | Memory Combine | NtSetSystemInformation(130) | Combine les pages memoire identiques |
| 6 | GC .NET | GC.Collect + GC.WaitForPendingFinalizers | Force la collection du GC managee |
| 7 | System File Cache | SetSystemFileCacheSize | Reduit le cache fichier systeme |
| 8 | DNS Cache | DnsFlushResolverCache | Vide le cache DNS |
| 9 | ARP Cache | FlushIpNetTable | Vide la table ARP |
| 10 | Registry Flush | RegFlushKey(HKLM) | Force l'ecriture du registre sur disque |
| 11 | Process WS Trim | SetProcessWorkingSetSize(-1, -1) | Reduit le Working Set de chaque processus |
| 12 | Heap Compact | HeapCompact | Compacte le heap du processus |
| 13 | Clipboard Clear | OpenClipboard + EmptyClipboard | Vide le presse-papiers |
| 14-18 | Operations combinees | Sequences des precedentes | Nettoyage complet en sequence |
Chaque operation requiert l'acquisition prealable des privileges SeDebugPrivilege et SeIncreaseQuotaPrivilege via AdjustTokenPrivileges. Le mode automatique permet le declenchement sur intervalle de temps ou des qu'un seuil d'utilisation RAM est depasse.
Coclico AI est l'assistant conversationnel integre. Il s'appuie sur le modele GGUF local et dispose d'une connaissance complete des 8 modules de l'application, des fonctionnalites transversales et des donnees utilisateur. L'assistant est capable de guider l'utilisateur etape par etape, de repondre dans la langue de l'utilisateur (detection automatique parmi 10 langues) et de s'appuyer sur la documentation interne via le systeme RAG. Le detail de l'architecture IA est presente dans la section 5.
L'architecture IA de Coclico repose sur un design a double contexte d'execution isole, implemente dans AiChatService. Ce design garantit que les interactions utilisateur et les decisions du noyau autonome ne s'interferent jamais.
+------------------+
| LLamaWeights |
| (modele GGUF) |
+--------+---------+
|
+-------------+-------------+
| |
+---------+---------+ +---------+---------+
| Chat Context | | Engine Context |
| (_chatCtx) | | (_engineCtx) |
+-------------------+ +-------------------+
| ContextSize: 2048 | | ContextSize: 512 |
| Threads: N-1 (max6)| | Threads: N/2 |
| BatchSize: 256 | | BatchSize: 128 |
| FlashAttention: ON| | FlashAttention: ON|
+--------+----------+ +--------+----------+
| |
+--------+----------+ +--------+----------+
| InteractiveExecutor| | InteractiveExecutor|
+--------+----------+ +--------+----------+
| |
+--------+----------+ +--------+----------+
| _chatSem (1,1) | | _engineSem (1,1) |
| Semaphore | | Semaphore |
+--------+----------+ +--------+----------+
| |
+--------+----------+ +--------+----------+
| AiChatView | | OptimizationEngine |
| (User-facing) | | (Background) |
+--------------------+ +--------------------+
Chaque contexte possede son propre SemaphoreSlim(1, 1) qui garantit l'acces exclusif. Le pattern Immutable Context Swap est utilise pour les reinitialisation : Interlocked.Exchange remplace atomiquement le contexte tout en disposant l'ancien, sans bloquer les consommateurs en cours d'attente.
L'initialisation tente d'abord un chargement avec 8 couches GPU (GpuLayerCount = 8). En cas d'echec (materiel incompatible, drivers absents), le service bascule automatiquement sur le mode CPU pur (GpuLayerCount = 0). Le nombre de couches GPU actives est expose via la propriete ActiveGpuLayers.
Le service maintient une memoire a court terme de 4 echanges (configurable via MaxMemoryTurns). Apres 6 tours de conversation (AutoResetAfterTurns), le contexte est automatiquement reinitialise pour eviter la degradation de la qualite des reponses. La memoire recente est injectee dans le prompt sous forme de bloc structure :
[Memoire recente]
T1 U:"question1..." A:"reponse1..."
T2 U:"question2..." A:"reponse2..."
Pour eviter que le modele LLM (estimee a environ 2,5 Go de RAM) ne reste charge indefiniment en memoire, un mecanisme de dechargement automatique est integre.
| Parametre | Valeur par defaut | Configuration |
|---|---|---|
| Delai d'inactivite | 5 minutes | Settings.AiIdleTimeoutMinutes |
| Protection contre les appels concurrents | Interlocked.CompareExchange | Champ _unloading |
| Sequence de dechargement | Acquire _initLock -> _chatSem -> _engineSem -> Dispose | Ordre strict pour eviter les deadlocks |
| Nettoyage post-dechargement | MemoryCleanerService.ForceGcCollect() | Force la collection du GC apres liberation |
Le rechargement est transparent : toute nouvelle requete via SendMessageAsync ou SendSystemPromptAsync declenche automatiquement InitializeAsync si le modele n'est pas en memoire.
Coclico integre un systeme de Retrieval-Augmented Generation (RAG) implementee dans RagService. Ce systeme permet a l'assistant de s'appuyer sur la documentation interne stockee dans le repertoire resource/docs/.
#{1,3}). Chaque chunk d'au moins 40 caracteres est indexe.SimpleStemmer.log((N - df + 0.5) / (df + 0.5) + 1).topK meilleurs chunks (defaut : 2) sont retournes avec une limite de 350 caracteres par chunk.Deux jeux de parametres d'inference distincts sont utilises selon le contexte d'execution :
| Parametre | Chat (Utilisateur) | Engine (Systeme) |
|---|---|---|
| MaxTokens | 512 | 256 |
| Temperature | 0.4 | 0.1 |
| TopP | 0.90 | 0.95 |
| TopK | 30 | 10 |
| RepeatPenalty | 1.1 | 1.0 |
| ContextSize | 2048 | 512 |
| AntiPrompts | <|end|>, <|user|>, <|endoftext|> | |
Le contexte Engine utilise une temperature tres basse (0.1) et un TopK reduit (10) pour maximiser le determinisme des decisions d'optimisation systeme. Le contexte Chat utilise des valeurs plus elevees pour permettre des reponses plus naturelles et variees.
Le noyau autonome de Coclico implemente une boucle Observe-Analyze-Act-Validate decomposee en quatre services complementaires. Cette architecture est le coeur de la vision d'auto-gouvernance du systeme.
Le service OptimizationEngineService implemente un pipeline asynchrone a trois etapes connectees par des Channel<T> bornes. Ce design decouple la collecte des metriques, la prise de decision et l'execution des actions.
+------------------+ Channel<SystemMetrics> +------------------+ Channel<string> +------------------+
| Stage 1 | (Bounded, DropOldest, 1) | Stage 2 | (Bounded, DropOldest, 1) | Stage 3 |
| COLLECTE | ---------------------------> | DECISION | ----------------------> | EXECUTION |
| | | | | |
| CollectMetrics() | | Cognitive (LLM) | | ExtractAction() |
| - CPU % | | ou | | - CreateSnapshot |
| - RAM Usage | | Fallback (Rules) | | - SetPriority() |
| - Top 5 procs | | | | - Audit Log |
| - Anomalies IF | | + Audit Entry | | - RCA Summary |
+------------------+ +------------------+ +------------------+
| |
+--- Cycle: 30 secondes -----------------------------------------------------------------------+
Stage1CollectAsync)Toutes les 30 secondes, cette etape collecte un snapshot complet de l'etat systeme :
| Metrique | Type | Source |
|---|---|---|
CpuPercent | double | MemoryCleanerService.GetSystemCpuPercent() |
RamUsedMb / RamTotalMb | long | MemoryCleanerService.GetRamInfo() |
RamUsedPercent | double | Calcule a partir de RamInfo |
MemCleanP95Ms | double? | Percentile 95 via IDynamicTracer |
TopProcesses | IReadOnlyList | Top 5 processus par memoire |
EwmaAnomalies | IReadOnlyList<string> | Detection via Isolation Forest |
Le detecteur d'anomalies IsolationForestDetector analyse les trois dimensions (CPU, RAM, DiskIO) et retourne un score d'anomalie. Le seuil est fixe a 0.65.
Stage2DecideAsync)Si le service IA est initialise, le prompt systeme est construit a partir des metriques et soumis au contexte Engine. Le modele repond exclusivement en JSON avec le format :
{
"ProcessId": 1234,
"ProcessName": "chrome",
"TargetPriority": "BelowNormal",
"Reason": "...",
"RcaSummary": "analyse causale courte",
"NoAction": false
}
Si le modele IA n'est pas disponible, un moteur de regles deterministes prend le relais. Le Adaptive Scorer calcule un score composite pondere (CPU: 0.4, RAM: 0.3, Disk: 0.2, History: 0.1) et declenche une action si le score depasse le seuil de 0.6. Les poids s'ajustent automatiquement en fonction de l'efficacite des actions passees.
Chaque decision est enregistree dans la piste d'audit avec le contexte IA complet (AiDecisionContext : prompt, reponse brute, mode de decision).
Stage3ExecuteAsync)L'action extraite de la reponse JSON est executee selon la sequence suivante :
IResourceAllocatorIRollbackService.CreateSnapshot()IResourceAllocator.SetProcessPriority()Les processus critiques (system, smss, csrss, wininit, winlogon, lsass, services, svchost, explorer, coclico) sont proteges par une liste de blocage et ne peuvent jamais etre cibles par le moteur.
Le service SourceAnalyzerService implemente une analyse statique complete du code source C# en utilisant l'API Roslyn (Microsoft.CodeAnalysis.CSharp). Pour chaque methode analysee, cinq metriques de qualite sont calculees.
| Metrique | Algorithme | Description |
|---|---|---|
| Complexite Cyclomatique (CC) | McCabe 1976 | Nombre de chemins d'execution independants. Comptage des if, while, for, foreach, do, case, catch, ?:, &&, ||. |
| Complexite Cognitive (CogCC) | SonarSource | Complexite percue par le developpeur. Increments de nesting, penalites pour imbrication. Implemente via un CSharpSyntaxWalker avec suivi du niveau d'imbrication. |
| Volume de Halstead (V) | Halstead 1977 | V = N * log2(eta) ou N = nombre total d'operateurs et operandes, eta = nombre d'operateurs et operandes distincts. |
| Difficulte de Halstead (D) | Halstead 1977 | D = (eta1 / 2) * (n2 / eta2) |
| Effort de Halstead (E) | Halstead 1977 | E = D * V |
| Indice de Maintenabilite (MI) | Coleman 1994 | MI = max(0, (171 - 5.2*ln(V) - 0.23*CC - 16.2*ln(LOC)) / 171 * 100) |
| CC | Severite | Rang |
|---|---|---|
| 1 -- 5 | Low | 1 |
| 6 -- 10 | Medium | 2 |
| 11 -- 20 | High | 3 |
| 21+ | Critical | 4 |
La severite est rehaussee d'un cran si le nombre de lignes de la methode depasse 80. Les methodes classees "Low" avec moins de 20 lignes sont exclues du rapport pour reduire le bruit. Le rapport final (SourceAnalysisReport) est un record immutable contenant la liste triee des hotspots (par severite decroissante, puis par CC decroissant).
Le StateValidatorService constitue le Clone Numerique de l'application. Il maintient un index complet de tous les fichiers source C# avec leur hash SHA-256 (tronque a 16 caracteres) et leurs metriques de complexite. Cet index sert de reference pour valider que toute modification proposee par l'IA ne degrade pas la qualite du code.
.cs (exclusion de obj/ et bin/)ISourceAnalyzerCodeFileSnapshot) et du source brut dans un ConcurrentDictionarySimulatePatch)Avant toute modification du code, le Clone Numerique simule l'impact du patch en calculant un score composite multi-metriques :
score = 0.35 * normCC
+ 0.15 * normLines
+ 0.20 * normVolume
+ 0.15 * normDifficulty
+ 0.15 * normEffort
Chaque composante norm_X est calculee comme -(delta_X) / (original_X + 1), de sorte qu'une amelioration (reduction) produit un score positif. Le patch n'est accepte que si le score composite depasse le seuil d'amelioration (ImprovementThreshold = 0.05).
Le CodePatcherService orchestre l'application de patches sur le code source avec un workflow d'approbation configurable.
Patch propose
|
v
+--------------------+
| SimulatePatch() | --- Score <= 0.05 ---> [REJETE : "CloneRejected"]
| (StateValidator) |
+---------+----------+
|
Score > 0.05
|
v
+---------+----------+
| AuditOnly mode ? | --- Oui ---> [PROPOSITION EN ATTENTE]
| | + GetPendingProposals()
+---------+----------+ + ApproveAndApplyAsync()
| + RejectProposalAsync()
Non
|
v
+---------+----------+
| Fichier existe ? | --- Non ---> [ECHEC : "FileNotFound"]
+---------+----------+
|
Oui
|
v
+---------+----------+
| Source drift ? | --- Oui ---> [ECHEC : "SourceDrift"]
+---------+----------+
|
Non
|
v
+---------+----------+
| CreateSnapshot() | --- Echec ---> [ECHEC : "SnapshotFailed"]
| (IRollbackService) |
+---------+----------+
|
OK
|
v
+---------+----------+
| MethodReplacer |
| (Roslyn AST) | --- Introuvable ---> [ECHEC : "AstNotFound"]
+---------+----------+
|
OK
|
v
+---------+----------+
| File.WriteAllText |
| + Audit Entry |
+--------------------+
|
v
[SUCCES]
Par defaut, le parametre CodePatcherAuditOnly est a true. Dans ce mode, les patches valides par le Clone Numerique ne sont pas appliques automatiquement. Ils sont stockes en tant que propositions dans une liste accessible via GetPendingProposals(). Un operateur humain peut alors :
ApproveAndApplyAsync() -- le patch est re-valide par le Clone puis appliqueRejectProposalAsync() -- la proposition est retiree et l'evenement est auditeL'historique des patches (acceptes, rejetes, echoues) est maintenu dans un buffer circulaire de 100 entrees.
Le principe Zero Cloud est la contrainte architecturale fondamentale de Coclico. Aucune donnee, aucune metrique, aucun prompt IA n'est jamais transmis a un service exterieur. Cela inclut :
%AppData%\Coclico\telemetry\.settings.json local.La seule communication reseau autorisee est la verification de mise a jour (appel HTTPS vers le depot GitHub) et les operations explicitement declenchees par l'utilisateur (Winget, HttpRequest dans les Flow Chains).
Le service RollbackService implemente un mecanisme de points de restauration a double couche :
ConcurrentDictionary<string, (SnapshotMetadata, string)>%AppData%\Coclico\snapshots\ProtectedData.Protect avec DataProtectionScope.CurrentUser)Chaque snapshot est identifie par un GUID sans tirets (32 caracteres hexadecimaux) et contient les metadonnees suivantes : identifiant, nom du contexte, horodatage UTC, type .NET de l'etat sauvegarde, et taille en octets.
Le service SecurityPolicyService implemente une politique de securite a deux niveaux : des regles par defaut non-supprimables et des regles d'entreprise fusionnables chargees depuis %AppData%\Coclico\security-policy.json.
| Categorie | Exemples de patterns |
|---|---|
| Destruction de donnees | format, rd /s /q, rmdir /s /q, del /f /s /q, rm -rf, cipher /w: |
| Configuration critique | bcdedit, diskpart, reg delete hklm, sc delete |
| Gestion des comptes | net user, net localgroup administrators, icacls, takeown |
| Categorie | Exemples de patterns |
|---|---|
| Execution de code arbitraire | invoke-expression, iex, -encodedcommand, frombase64string |
| Telechargement | downloadstring, downloadfile, invoke-webrequest, net.webclient |
| Chargement d'assemblies | assembly::load, assembly::loadfrom, reflection.assembly |
| Securite systeme | set-mppreference, disable-windowsoptionalfeature |
| Destruction | format-volume, clear-disk, remove-item -recurse |
Les operations de fichiers via les Flow Chains sont bloquees sur les segments de chemin suivants : \windows\, \program files\, \program files (x86)\, \programdata\microsoft\, \system volume information\, \$recycle.bin\, \recovery\, \boot\, \efi\.
L'implementation utilise des FrozenSet<string> pour un matching a haute performance en O(1) amortie. Les wildcards PowerShell sont compiles en Regex avec un timeout de 100ms par pattern pour prevenir les attaques ReDoS.
Le service AuditLogService maintient une piste d'audit append-only au format NDJSON (Newline Delimited JSON). Chaque entree contient :
| Champ | Type | Description |
|---|---|---|
Timestamp | DateTimeOffset | Horodatage UTC de l'evenement |
Actor | string | Origine de l'action (OptimizationEngine, CodePatcher, Human) |
Action | string | Type d'action (AiDecision, PatchApplied, PatchRejected, ProposalApproved, etc.) |
Target | string | Cible de l'action (SystemMetrics, fichier::methode) |
Success | bool | Resultat de l'operation |
Details | string? | Details supplementaires |
AiDecision | AiDecisionContext? | Tracabilite IA : prompt, reponse brute, mode de decision |
Les fichiers d'audit sont nommes audit-YYYY-MM-DD.log et stockes dans %AppData%\Coclico\audit\. L'elagage automatique est execute au demarrage selon la duree de retention configuree (defaut : 90 jours). La lecture des entrees recentes s'effectue en parcours inverse (fin vers debut) avec un buffer de 4096 octets emprunte a ArrayPool<byte>.Shared.
Le service DynamicTracerService fournit l'infrastructure de telemetrie de l'application. Il collecte les metriques de performance de toutes les operations instrumentees.
| Parametre | Valeur | Description |
|---|---|---|
| Capacite du buffer | 2000 snapshots | Buffer circulaire ConcurrentQueue avec eviction FIFO |
| Intervalle de flush | 30 secondes | Timer periodique qui ecrit sur disque |
| Retention | 14 fichiers | Les fichiers les plus anciens sont supprimes |
| Format de sortie | JSON | metrics-YYYY-MM-DD.json dans %AppData%\Coclico\telemetry\ |
Deux modes d'instrumentation sont disponibles :
Mode Span -- Pour mesurer la duree d'un bloc de code :
using var span = tracer.BeginOperation("Feature.Operation", "Category");
// ... code mesure ...
// La duree est enregistree automatiquement au Dispose
Mode Direct -- Pour enregistrer une mesure ponctuelle :
tracer.Record("Feature.Operation", elapsed, "Category", tags);
La methode GetAggregate(string operationName) retourne un objet MetricAggregate contenant :
L'implementation dans Algorithms/TDigest.cs suit l'algorithme de Dunning et Ertl (2019). Ce structure de donnees permet l'estimation de quantiles (P50, P95, P99) sur un flux de donnees en streaming avec une complexite memoire bornee.
| Parametre | Valeur | Description |
|---|---|---|
| Compression | 100 | Controle la precision vs. la taille memoire |
| Buffer d'accumulation | 200 valeurs | Flush automatique dans les centroides |
| Precision estimee | ~1% aux extremes | Meilleure precision pour P50, bonne pour P95/P99 |
L'implementation dans Algorithms/IsolationForestDetector.cs suit l'algorithme de Liu et al. (2008), adapte pour un usage en streaming incremental.
| Parametre | Valeur | Description |
|---|---|---|
| Nombre d'arbres | 100 | Foret d'arbres d'isolation |
| Taille du sous-echantillon | 64 | Echantillonnage avec remplacement |
| Seuil d'anomalie | 0.65 | Score au-dessus duquel un point est classe anomal |
| Minimum pour l'entrainement | 20 observations | Nombre de points avant le premier fit |
| Re-entrainement | Tous les 50 points | Mise a jour incrementale de la foret |
| Taille maximale du buffer | 500 observations | Fenetre glissante |
Lorsqu'une anomalie est detectee, le service identifie les features responsables en calculant le Z-score de chaque dimension et en reportant celles depassant un seuil de 2.0 ecarts-types.
Le composant AdaptiveScorer integre au OptimizationEngineService calcule un score d'urgence pour le mode fallback deterministe. Les poids sont auto-ajustables : lorsqu'une action s'avere inefficace, le poids CPU augmente et les autres diminuent, avec renormalisation pour maintenir la somme a 1.0.
La journalisation est configuree au niveau du conteneur DI avec les parametres suivants :
| Parametre | Valeur |
|---|---|
| Niveau minimum | Debug |
| Repertoire | %AppData%\Coclico\logs\ |
| Rotation | Quotidienne (RollingInterval.Day) |
| Retention | 14 fichiers |
| Nommage | coclico-YYYYMMDD.log |
| Template de sortie | [{Timestamp:yyyy-MM-dd HH:mm:ss.fff} {Level:u3}] [{SourceContext}] {Message:lj}{NewLine}{Exception} |
| Enrichissement | Enrich.FromLogContext() |
L'API publique est exposee via la classe statique LoggingService avec les methodes LogInfo, LogError et LogException. La convention impose qu'aucune exception ne soit absorbee silencieusement -- chaque catch doit produire au minimum une entree de journal.
Le site web de Coclico est construit avec le framework Astro, un generateur de sites statiques axe sur la performance. L'architecture technique est la suivante :
| Composant | Technologie | Role |
|---|---|---|
| Framework | Astro | Generation statique, rendu au build |
| Styles | Tailwind CSS | Utility-first CSS, styles personnalises dans global.css |
| Animations | GSAP | Animations cote client (configure en noExternal pour le SSR) |
| SEO | @astrojs/sitemap | Generation automatique du sitemap |
website/
src/
components/
layout/ -- Composants de mise en page
sections/ -- Sections reutilisables
i18n/
index.ts -- Logique de traduction
locales/ -- Fichiers de traduction par langue
layouts/ -- Templates de page
pages/
index.astro -- Page d'accueil (francais, defaut)
changelog/ -- Notes de version
docs/ -- Documentation technique
faq/ -- Questions frequentes
guide/ -- Guides utilisateur
wiki/ -- Wiki du projet
en/ -- Pages anglaises
de/ -- Pages allemandes
es/ -- Pages espagnoles
fr/ -- Pages francaises
styles/ -- Feuilles de style globales
public/ -- Ressources statiques (favicon, images)
astro.config.mjs -- Configuration Astro
tailwind.config.mjs -- Configuration Tailwind
Le site supporte quatre langues avec le systeme i18n natif d'Astro :
| Langue | Code | Prefixe URL | Role |
|---|---|---|---|
| Francais | fr | / (racine, defaut) | Locale par defaut, pas de prefixe |
| Anglais | en | /en/ | Fallback vers le francais pour les pages manquantes |
| Allemand | de | /de/ | Fallback vers le francais |
| Espagnol | es | /es/ | Fallback vers le francais |
La configuration impose un trailingSlash: 'always' pour la coherence des URL et le bon fonctionnement du deploiement GitHub Pages.
Le site est deploye sur GitHub Pages a l'adresse https://coclico-cy.github.io/Coclico/. La configuration de base (base: '/Coclico') assure le bon fonctionnement des liens relatifs dans le contexte d'un sous-repertoire GitHub Pages. Le repertoire de sortie est configure a ../docs pour etre servi directement depuis le depot.
| Element | Minimum | Recommande |
|---|---|---|
| Systeme d'exploitation | Windows 10 22H2 (build 22621) | Windows 11 23H2+ |
| Runtime | .NET 10 Desktop Runtime | .NET 10 Desktop Runtime |
| RAM (sans IA) | 4 Go | 8 Go |
| RAM (avec IA) | 8 Go | 16 Go |
| Espace disque | 500 Mo (application) | 3 Go (application + modele IA) |
| CPU | 4 coeurs | 6+ coeurs (inference IA optimale) |
| GPU (optionnel) | - | Vulkan compatible (acceleration IA) |
| Privileges | Administrateur requis (UAC prompt automatique) | |
| Winget | Necessaire pour le module Installeur Rapide | |
Coclico_Setup.iss -- InnoSetup)resource/model/IA-support-chat.gguf pour activer l'IAToutes les donnees sont centralisees dans %AppData%\Coclico\ :
| Fichier / Repertoire | Contenu |
|---|---|
settings.json | Parametres de l'application |
flow_chains.json | Definitions des chaines d'automatisation |
custom_apps_data.json | Personnalisations des noms et categories d'applications |
manual_apps.json | Applications ajoutees manuellement |
avatar.png | Avatar de l'utilisateur |
security-policy.json | Politique de securite entreprise (optionnel) |
logs/ | Journaux Serilog rotatifs |
audit/ | Piste d'audit NDJSON |
telemetry/ | Metriques de performance |
snapshots/ | Points de restauration chiffres DPAPI |
# Compilation
dotnet build Coclico/Coclico.csproj
# Execution (necessite elevation administrateur)
dotnet run --project Coclico/Coclico.csproj
# Tests unitaires
dotnet test
# Tests filtres par classe
dotnet test --filter "FullyQualifiedName~ServiceCore"
# Restauration des packages
dotnet restore
# Nettoyage complet
dotnet clean
Coclico/ -- Racine du depot
Coclico.slnx -- Solution .NET
Coclico_Setup.iss -- Script InnoSetup (installeur)
LICENSE -- Open source (MIT)
README.md -- Documentation en anglais
README.fr.md -- Documentation en francais
CLAUDE.md -- Instructions pour IA assistante
Coclico/ -- Projet principal (.NET 10 WPF)
Coclico.csproj -- Fichier projet
App.xaml / App.xaml.cs -- Point d'entree, sequence de demarrage
MainWindow.xaml / .cs -- Fenetre principale Fluent Design
AssemblyInfo.cs -- Metadonnees d'assemblage
app.manifest -- Manifeste UAC
Models/
WorkflowPipeline.cs -- Modeles Flow Chain (28 NodeTypes)
LaunchMode.cs -- Modes de demarrage
Views/
DashboardView.xaml -- Tableau de bord temps reel
ProgramsView.xaml -- Bibliotheque d'applications
WorkflowPipelinesView.xaml -- Editeur Flow Chains
InstallerView.xaml -- Installeur Rapide (Winget)
CleaningView.xaml -- Nettoyage systeme
ScannerView.xaml -- Audit d'applications
RamCleanerView.xaml -- Nettoyage memoire
AiChatView.xaml -- Chat IA local
SettingsView.xaml -- Parametres
HelpView.xaml -- Aide
SplashWindow.xaml -- Ecran de demarrage
LauncherWindow.xaml -- Configuration premier lancement
ProfileWindow.xaml -- Profil utilisateur
AdminPromptWindow.xaml -- Invite d'elevation UAC
AvatarCropWindow.xaml -- Recadrage d'avatar
RuleSelectionDialog.xaml -- Selection de regles
ViewModels/
DashboardViewModel.cs -- VM Tableau de Bord
CleaningViewModel.cs -- VM Nettoyage
ScannerViewModel.cs -- VM Scanner
SettingsViewModel.cs -- VM Parametres
WorkflowPipelinesViewModel.cs -- VM Flow Chains
Services/
ServiceContainer.cs -- Conteneur DI statique
AiChatService.cs -- IA locale dual-executor
OptimizationEngineService.cs -- Pipeline autonome 3 etages
SourceAnalyzerService.cs -- Analyse Roslyn AST
StateValidatorService.cs -- Clone Numerique
CodePatcherService.cs -- AutoPatcher avec approbation
RollbackService.cs -- Points de restauration DPAPI
AuditLogService.cs -- Piste d'audit NDJSON
SecurityPolicyService.cs -- Politique de securite
DynamicTracerService.cs -- Telemetrie et metriques
MemoryCleanerService.cs -- 18 operations P/Invoke
FeatureExecutionEngine.cs -- Moteur d'execution avec circuit-breaker
ResourceAllocatorService.cs -- QoS processus
RagService.cs -- RAG BM25 + Cosinus TF-IDF
CleaningService.cs -- Nettoyage systeme
InstalledProgramsService.cs -- Detection multi-sources
WorkflowService.cs -- CRUD + execution Flow Chains
SettingsService.cs -- Persistance des parametres
InstallerService.cs -- Interface Winget
ThemeService.cs -- Themes et couleurs
LocalizationService.cs -- Internationalisation (10 langues)
ProfileService.cs -- Profil utilisateur
ProcessWatcherService.cs -- Surveillance des processus
NetworkMonitorService.cs -- Surveillance reseau
StartupService.cs -- Demarrage automatique Windows
KeyboardShortcutsService.cs -- Raccourcis clavier globaux
LoggingService.cs -- Abstraction Serilog
ToastService.cs -- Notifications toast
CacheService.cs -- Abstraction du cache
ResourceGuardService.cs -- Gardien de ressources
SecretScanService.cs -- Detection de secrets
SeverityClassifier.cs -- Classification de severite
UpdateCheckService.cs -- Verification de mise a jour
UpdateManager.cs -- Gestionnaire de mise a jour
StartupHealthService.cs -- Verification de sante au demarrage
UserAccountService.cs -- Gestion des comptes
TrayService.Win32.cs -- Integration zone de notification
Algorithms/
IsolationForestDetector.cs -- Detection d'anomalies (Liu et al. 2008)
TDigest.cs -- Estimation de quantiles (Dunning 2019)
MethodReplacer.cs -- Remplacement AST de methodes
SimpleStemmer.cs -- Racinisation pour le RAG
Interfaces (I*.cs)
IAiService.cs -- Contrat service IA
IAuditLog.cs -- Contrat piste d'audit
ICacheService.cs -- Contrat cache
ICodePatcher.cs -- Contrat auto-patcher
IDynamicTracer.cs -- Contrat telemetrie
IOptimizationEngine.cs -- Contrat moteur d'optimisation
IResourceAllocator.cs -- Contrat QoS
IRollbackService.cs -- Contrat rollback
ISecurityPolicy.cs -- Contrat politique de securite
ISourceAnalyzer.cs -- Contrat analyseur statique
IStateValidator.cs -- Contrat clone numerique
Resources/ -- Ressources embarquees (icones, traductions)
Converters/ -- Convertisseurs XAML
Properties/ -- Proprietes d'assemblage
resource/
model/ -- Modele GGUF pour LLamaSharp
docs/ -- Documentation pour le RAG
Coclico.Tests/ -- Projet de tests (xUnit + Moq)
website/ -- Site web (Astro + Tailwind)
src/
pages/ -- Pages multi-langues
components/ -- Composants reutilisables
i18n/ -- Traductions
layouts/ -- Templates
styles/ -- CSS global
public/ -- Ressources statiques
docs/ -- Sortie du build Astro (GitHub Pages)
Installer/ -- Artefacts d'installation