Référence v1.0.4

Documentation API

Référence complète des interfaces de service, modèles de données, types de nœuds WorkflowPipeline et configuration de Coclico 1.0.4.

Vue d'ensemble

Cette documentation couvre l'ensemble des interfaces publiques de Coclico. La version actuelle est 1.0.4. Les interfaces préfixées par I sont enregistrées dans le DI et peuvent être injectées dans n'importe quel service ou ViewModel.

  • Namespace principal : Coclico.Services
  • Modèles : Coclico.Models
  • ViewModels : Coclico.ViewModels
  • Framework : .NET 10, C# preview, WPF-UI 4.2

ICacheService

Cache in-memory thread-safe avec TTL par entrée. Implémenté par CacheService (singleton).

public interface ICacheService
{
    /// Récupère une valeur. Retourne null si absente ou expirée.
    T? Get<T>(string key);

    /// Stocke une valeur. ttl=null = pas d'expiration.
    void Set<T>(string key, T value, TimeSpan? ttl = null);

    /// Pattern TryGet pour éviter la double lookup.
    bool TryGet<T>(string key, out T? value);

    /// Invalide une entrée spécifique.
    void Invalidate(string key);

    /// Vide le cache entièrement.
    void InvalidateAll();
}

IDynamicTracer

Service de télémétrie temps-réel. Collecte CPU, RAM, réseau, disque. Implémenté par DynamicTracerService (singleton).

public interface IDynamicTracer
{
    /// Snapshot ponctuel de la télémétrie système.
    Task<TelemetrySnapshot> GetSnapshotAsync(CancellationToken ct = default);

    /// Remplit un buffer de télémétrie (évite les allocations — pour OptimizationEngine).
    Task FillTelemetryBufferAsync(Memory<byte> buffer, CancellationToken ct = default);

    /// Historique glissant (60 derniers snapshots).
    IReadOnlyList<TelemetrySnapshot> History { get; }
}

public record TelemetrySnapshot(
    DateTimeOffset Timestamp,
    double CpuPercent,       // 0.0 – 100.0
    long RamUsedMb,
    long RamTotalMb,
    double NetworkInKbps,
    double NetworkOutKbps
);

IRollbackService

Gestion des snapshots pour rollback des patches IA. Implémenté par RollbackService (singleton).

public interface IRollbackService
{
    /// Crée un snapshot du fichier avant modification. Retourne l'ID du snapshot.
    Task<Guid> CreateSnapshotAsync(string filePath, CancellationToken ct = default);

    /// Restaure un fichier depuis son snapshot.
    Task RestoreAsync(Guid snapshotId, CancellationToken ct = default);

    /// Liste tous les snapshots disponibles.
    IReadOnlyList<SnapshotInfo> GetSnapshots();

    /// Supprime les snapshots plus vieux que maxAge.
    Task PruneAsync(TimeSpan maxAge);
}

IOptimizationEngine

Moteur d'optimisation autonome (Phase 2). Exécute un cycle analyse/action toutes les 30 secondes. Implémenté par OptimizationEngineService.

public interface IOptimizationEngine
{
    /// Démarre la boucle d'optimisation en arrière-plan.
    Task StartAsync(CancellationToken ct);

    /// Arrête proprement la boucle.
    Task StopAsync();

    /// Résultat du dernier cycle d'optimisation.
    OptimizationResult? LastResult { get; }

    /// Événement déclenché après chaque cycle.
    event Action<OptimizationResult>? CycleCompleted;
}

IResourceAllocator

Allocation et libération des ressources système (threads, handles, mémoire poolée). Implémenté par ResourceAllocatorService.

public interface IResourceAllocator
{
    Task<ResourceHandle> AcquireAsync(ResourceType type, CancellationToken ct = default);
    void Release(ResourceHandle handle);
    ResourceUsageReport GetUsageReport();
}

ISourceAnalyzer

Analyse AST Roslyn du code source C# (Phase 3.3). Calcule complexité cyclomatique, métriques Halstead et Maintainability Index.

public interface ISourceAnalyzer
{
    /// Analyse complète d'un fichier C#.
    Task<AnalysisReport> AnalyzeFileAsync(string filePath, CancellationToken ct = default);

    /// Métriques d'une méthode spécifique.
    Task<MethodMetrics> GetMethodMetricsAsync(string filePath, string methodName);
}

public record MethodMetrics(
    string MethodName,
    int CyclomaticComplexity,   // CC — seuil d'alerte : > 10
    double HalsteadVolume,       // V = N × log2(n)
    double HalsteadDifficulty,   // D = (n1/2) × (N2/n2)
    double HalsteadEffort,       // E = D × V
    double MaintainabilityIndex  // MI = 171 - 5.2×ln(V) - 0.23×CC - 16.2×ln(LOC)
);

IAuditLog

Journal d'audit append-only en format NDJSON. Inclut le contexte de chaque décision IA. Implémenté par AuditLogService.

public interface IAuditLog
{
    /// Enregistre une entrée d'audit.
    Task WriteAsync(AuditEntry entry, CancellationToken ct = default);

    /// Écrit une décision IA avec son contexte complet.
    Task WriteAiDecisionAsync(AiDecisionContext ctx, CancellationToken ct = default);

    /// Supprime les entrées plus vieilles que retentionDays.
    Task PruneAsync(int retentionDays);
}

ISecurityPolicy

Politique de sécurité qui contrôle quelles opérations sont autorisées dans les Flow Chains. Les defaults hardcodés ne peuvent pas être supprimés par la configuration JSON.

public interface ISecurityPolicy
{
    /// Retourne true si le type de nœud est autorisé.
    bool IsNodeAllowed(NodeType nodeType);

    /// Retourne true si la clé de registre cible est autorisée.
    bool IsRegistryPathAllowed(string registryPath);

    /// Retourne true si le chemin de fichier est dans une zone autorisée.
    bool IsFilePathAllowed(string filePath);
}

AppSettings

Modèle de configuration principale. Géré par SettingsService, persisté dans %APPDATA%\Coclico\settings.json.

public class AppSettings
{
    // Général
    public string Language { get; set; } = "fr";
    public string Theme { get; set; } = "Dark";          // "Light" | "Dark" | "System"
    public string AccentColor { get; set; } = "#6366F1";   // Indigo par défaut
    public LaunchMode LaunchMode { get; set; } = LaunchMode.Manual;
    public bool MinimizeToTray { get; set; } = true;

    // Nettoyage
    public bool CleanWindowsTemp { get; set; } = true;
    public bool CleanBrowserCache { get; set; } = true;
    public bool CleanSystemLogs { get; set; } = false;
    public bool CleanRecycleBin { get; set; } = true;
    public bool CleanPrefetch { get; set; } = false;
    public bool CleanThumbnailCache { get; set; } = true;
    public bool CleanErrorReports { get; set; } = true;
    public bool CleanOldInstallers { get; set; } = false;
    public bool FlushDns { get; set; } = true;

    // IA & Audit
    public bool AutoPatcherAuditOnly { get; set; } = true;  // Défaut enterprise
    public int AuditRetentionDays { get; set; } = 90;
    public string AiModelPath { get; set; } = "";            // Vide = chemin par défaut
    public bool UseVulkanAcceleration { get; set; } = true;
}

public enum LaunchMode
{
    Manual,         // Lancement manuel uniquement
    WithWindows,    // Démarrage automatique avec Windows
    MinimizedTray   // Démarrage minimisé dans le tray
}

security-policy.json

Fichier de politique de sécurité chargé au démarrage. Les valeurs ci-dessous sont les défauts hardcodés (non-suppressibles) :

{
  "blockedNodeTypes": ["DeleteRegistryKey"],
  "blockedRegistryPaths": [
    "HKLM\\SYSTEM\\CurrentControlSet",
    "HKLM\\SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion"
  ],
  "allowedFileWriteZones": [
    "%APPDATA%\\Coclico\\",
    "%TEMP%\\"
  ],
  "maxPipelineNodesPerRun": 200,
  "requireApprovalForRegistryWrite": true
}

NodeType — 28 types de nœuds

Enumération complète des types de nœuds disponibles dans les WorkflowPipeline :

Valeur enumCatégorieDescription
KillProcessProcessusTermine un processus par nom ou PID
LaunchProcessProcessusLance un exécutable avec arguments
RestartServiceServices WindowsArrête puis redémarre un service Windows
StopServiceServices WindowsArrête un service Windows
StartServiceServices WindowsDémarre un service Windows
SetRegistryValueRegistreÉcrit une valeur dans le registre Windows
DeleteRegistryKeyRegistreSupprime une clé de registre (restreint par policy)
CreateDirectoryFichiersCrée un dossier (et les parents si nécessaire)
DeleteFileFichiersSupprime un fichier ou un dossier
MoveFileFichiersDéplace un fichier ou dossier
CopyFileFichiersCopie un fichier ou dossier
RunScriptScriptsExécute un script PowerShell ou batch
CleanTempNettoyageVide les dossiers temporaires Windows
EmptyRecycleBinNettoyageVide la corbeille de tous les lecteurs
FlushDnsNettoyageVide le cache DNS via DnsFlushResolverCache
ClearBrowserCacheNettoyageSupprime le cache des navigateurs détectés
ClearEventLogsNettoyageEfface les journaux d'événements Windows
ClearPrefetchNettoyageSupprime les fichiers de prefetch Windows
ClearThumbnailCacheNettoyageSupprime le cache de miniatures et icônes
ClearWindowsErrorReportsNettoyageEfface les rapports d'erreur WER
FreeRamMémoireLibère la RAM via P/Invoke ntdll + advapi32
SetWorkingSetMémoireÉcrête le working set d'un processus spécifique
PingHostRéseauVérifie la connectivité vers un hôte
DisableNetworkAdapterRéseauDésactive une interface réseau par nom
EnableNetworkAdapterRéseauActive une interface réseau par nom
WaitContrôlePause d'une durée en millisecondes
ConditionContrôleBranchement conditionnel sur une valeur système
LogContrôleÉcrit un message dans le journal Serilog
NotificationContrôleAffiche un toast à l'utilisateur

ConditionOperator — 10 opérateurs

Opérateurs disponibles pour les conditions de nœuds (NodeCondition.Operator) :

ValeurTypeDescription
EqualsUniverselÉgalité stricte (string ou numérique)
NotEqualsUniverselDifférent de
GreaterThanNumériqueStrictement supérieur à
LessThanNumériqueStrictement inférieur à
GreaterOrEqualNumériqueSupérieur ou égal à
LessOrEqualNumériqueInférieur ou égal à
ContainsStringLa valeur contient la sous-chaîne
NotContainsStringLa valeur ne contient pas la sous-chaîne
IsEmptyStringLa valeur est vide ou null
IsNotEmptyStringLa valeur est non-vide et non-null

OnErrorAction

Comportement d'un nœud en cas d'échec :

  • ContinueNext (valeur par défaut) — L'erreur est loguée, l'exécution continue avec le nœud suivant.
  • StopChain — L'exécution s'arrête immédiatement. Aucun nœud suivant ne s'exécute.
  • SkipToEnd — Tous les nœuds intermédiaires sont ignorés. Seul le dernier nœud de la chaîne s'exécute.

Catégories Deep Clean — 10 catégories

#CatégorieChemins ciblésAPI Windows
1 Fichiers temporaires Windows %TEMP%, C:\Windows\Temp File.Delete, Directory.Delete
2 Cache des navigateurs Chrome, Edge, Firefox, Opera — profils détectés Directory.Delete (AppData\Local)
3 Logs système Journaux Windows, logs IIS, WindowsUpdate.log EventLog.Clear, File.Delete
4 Corbeille Tous les lecteurs ($Recycle.Bin) SHEmptyRecycleBin (shell32)
5 Fichiers temp utilisateur AppData\Local\Temp (tous profils) Directory.Delete
6 Cache des miniatures AppData\Local\Microsoft\Windows\Explorer (thumbcache_*.db) File.Delete
7 Rapports d'erreur Windows AppData\Local\Microsoft\Windows\WER, ProgramData\Microsoft\Windows\WER Directory.Delete
8 Anciens installeurs C:\Windows\Installer\$PatchCache$ Directory.Delete
9 Cache DNS Résolveur DNS Windows DnsFlushResolverCache (dnsapi.dll)
10 Prefetch C:\Windows\Prefetch\*.pf File.Delete (requiert admin)

Sources Applications — 8 sources

SourceMécanisme de détectionDonnées récupérées
Registry HKLM HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall Nom, version, éditeur, taille, date d'installation, chemin de désinstallation
Registry HKCU HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall Applications installées par l'utilisateur courant
Steam libraryfolders.vdf → dossiers de bibliothèque → appmanifest_*.acf AppId, nom, taille installée, dossier d'installation
Epic Games %ProgramData%\Epic\EpicGamesLauncher\Data\Manifests\*.item (JSON) AppId, nom du jeu, version, dossier d'installation
GOG Galaxy Base de données SQLite locale de GOG Galaxy Titre, version, chemin d'installation, taille
Ubisoft Connect Registre Ubisoft + dossier d'installation Nom du jeu, chemin, version
EA App Manifestes XML dans le dossier EA (%ProgramData%\EA Desktop) Nom, version, chemin d'installation
Rockstar Games Dossier de données Rockstar Games Launcher Nom du jeu, statut d'installation
Microsoft Store Get-AppxPackage via PowerShell (System.Management.Automation) PackageFamilyName, DisplayName, version, taille

Structure des fichiers

Tous les fichiers de Coclico résident dans %APPDATA%\Coclico\ :

%APPDATA%\Coclico\
├── settings.json              # AppSettings sérialisées (JSON)
├── security-policy.json       # Politique de sécurité personnalisée
├── flow-chains\               # Définitions WorkflowPipeline
│   ├── {guid}.json            # Une chaîne par fichier
│   └── ...
├── audit\                     # Journal d'audit (IAuditLog)
│   ├── audit-2024-01.ndjson
│   └── ...
├── logs\                      # Logs Serilog (rolling daily, 14 jours)
│   ├── coclico-20240101.log
│   └── ...
├── rollback\                  # Snapshots IRollbackService
│   ├── {snapshotId}\
│   │   ├── metadata.json
│   │   └── original_file.bak
│   └── ...
└── resource\
    └── model\
        └── IA-support-chat.gguf  # Modèle LLM GGUF local

Format d'audit NDJSON

Chaque ligne du fichier d'audit est un objet JSON indépendant. Exemple d'entrée de décision IA :

{
  "timestamp": "2024-01-15T14:32:00.000Z",
  "type": "AiDecision",
  "level": "Info",
  "action": "PatchProposal",
  "userId": "local",
  "aiContext": {
    "model": "IA-support-chat.gguf",
    "promptHash": "sha256:a3f...",
    "responseTokens": 312,
    "latencyMs": 4820,
    "approved": false
  },
  "patch": {
    "proposalId": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
    "targetFile": "Services/OptimizationEngineService.cs",
    "originalCC": 8,
    "patchedCC": 7,
    "validatedByDigitalTwin": true
  }
}