Technische Referenz

Entwickler-Wiki

Interne Architektur, Muster, Kerndienste und autonomes System von Coclico. Referenz für Mitwirkende und Integratoren.

Hinweis: Diese Seite ist größtenteils auf Französisch verfügbar. Eine vollständige deutsche Übersetzung folgt in Kürze. Die Code-Beispiele sind auf Englisch (C#).

Übersicht

Coclico ist um eine autonome Schleife Beobachten → Analysieren → Handeln → Validieren herum aufgebaut:

  • Beobachten: DynamicTracerService sammelt CPU/RAM/Netzwerk-Telemetrie
  • Analysieren: OptimizationEngineService + SourceAnalyzerService (Roslyn AST)
  • Handeln: AutoPatcherService wendet validierte Patches an
  • Validieren: DigitalTwinService stellt sicher, dass die zyklomatische Komplexität nicht steigt

Framework: .NET 10 / C# (LangVersion: preview), UI in WPF + WPF-UI 4.x, DI über Microsoft.Extensions.DependencyInjection.

Startup & DI

Einstiegspunkt ist App.xaml.cs:

// App.xaml.cs — vereinfachte Startsequenz
protected override async void OnStartup(StartupEventArgs e)
{
    // 1. Pflichtmäßige UAC-Erhöhung
    if (!ElevationHelper.IsElevated())
        ElevationHelper.RestartAsAdmin();

    // 2. DI-Container aufbauen
    ServiceContainer.Build(services =>
    {
        services.AddSingleton<ICacheService, CacheService>();
        services.AddSingleton<IDynamicTracer, DynamicTracerService>();
        services.AddSingleton<IRollbackService, RollbackService>();
        services.AddSingleton<AiChatService>();
        services.AddTransient<CleaningService>();
    }, validateOnBuild: true);

    new MainWindow().Show();
}

ServiceContainer

Ein thread-sicherer statischer Wrapper um IServiceProvider:

// Obligatorische Auflösung — wirft Exception wenn fehlend
public static T GetRequired<T>() where T : notnull
    => _provider!.GetRequiredService<T>();

// Optionale Auflösung — gibt null zurück wenn fehlend
public static T? GetOptional<T>() where T : class
    => _provider!.GetService<T>();
Bevorzugen Sie Konstruktorinjektion im neuen Code. ServiceContainer.GetRequired<T>() ist für Fälle reserviert, in denen Injektion nicht möglich ist.

MVVM-Muster

Coclico folgt streng MVVM mit CommunityToolkit.Mvvm 8.4: Views (XAML), ViewModels ([ObservableProperty], [RelayCommand]), Services (Geschäftslogik). UI-Updates immer über Dispatcher.InvokeAsync.

Dual LLM Executor

AiChatService verwaltet zwei vollständig isolierte LLamaSharp-Kontext-/Executor-Paare:

// Kontext für Benutzer-Chat (AiChatView)
private LLamaContext _chatCtx;
private readonly SemaphoreSlim _chatSem = new(1, 1);

// Kontext für OptimizationEngine (Hintergrund)
private LLamaContext _engineCtx;
private readonly SemaphoreSlim _engineSem = new(1, 1);

FeatureExecutionEngine

Alle lang laufenden Aktionen müssen durch FeatureExecutionEngine.RunFeatureAsync gehen — fügt automatisch Circuit-Breaker-Schutz, Telemetrie und Abbruchunterstützung hinzu.

RollbackService

Jede KI-ausgelöste Schreiboperation muss von einem Rollback-Snapshot vorangestellt werden:

// Pflichtmuster vor File.WriteAllText
var snapshotId = await _rollback.CreateSnapshotAsync(path).ConfigureAwait(false);
try { File.WriteAllText(path, content, Encoding.UTF8); }
catch { await _rollback.RestoreAsync(snapshotId).ConfigureAwait(false); throw; }

Flow Chains System

Drei Dienste verwalten den Automatisierungs-Pipeline-Lebenszyklus: WorkflowPipelineService (CRUD), WorkflowPipelineExecutionService (Ausführung + Sicherheitsrichtlinie), WorkflowExecutionService (Orchestrierung + Planung).

WorkflowPipeline

public enum NodeType
{
    KillProcess, LaunchProcess, RestartService, StopService, StartService,
    SetRegistryValue, DeleteRegistryKey, CreateDirectory, DeleteFile,
    MoveFile, CopyFile, RunScript, CleanTemp, EmptyRecycleBin, FlushDns,
    ClearBrowserCache, ClearEventLogs, ClearPrefetch, ClearThumbnailCache,
    ClearWindowsErrorReports, FreeRam, SetWorkingSet, PingHost,
    DisableNetworkAdapter, EnableNetworkAdapter, Wait, Condition, Log, Notification
} // 28 Typen

public enum OnErrorAction { ContinueNext, StopChain, SkipToEnd }

SourceAnalyzer (Roslyn) — Phase 3.3

SourceAnalyzerService verwendet Roslyn für AST-Analyse des C#-Quellcodes. Berechnet pro Methode: Zyklomatische Komplexität (CC), Halstead-Metriken (V, D, E) und Wartbarkeitsindex (MI).

Digital Twin Gate — Phase 3.3

Vor der Anwendung eines KI-generierten Patches validiert DigitalTwinService, dass der Patch die zyklomatische Komplexität nicht erhöht. Wenn patchedCC > originalCC, wird der Patch abgelehnt.

AutoPatcher — Phase 3.4

Verwaltet den KI-Patch-Lebenszyklus mit menschlicher Genehmigung. Standard: AutoPatcherAuditOnly = true — Patches werden protokolliert, aber nie ohne ausdrückliche Genehmigung angewendet.

Sicherheit & Audit

SecurityPolicyService fusioniert security-policy.json mit nicht unterdrückbaren hardcodierten Standardwerten. AuditLogService schreibt ein append-only NDJSON-Protokoll mit vollständigem KI-Entscheidungskontext.

Code-Konventionen

  • Benennung: PascalCase für Klassen/Interfaces, _camelCase für private Felder, Async-Suffix für asynchrone Methoden
  • Injektion: Nur Konstruktor — niemals Service-Locator im Konstruktor
  • Hintergrund: ConfigureAwait(false) bei jedem await in Diensten
  • Protokollierung: LoggingService.LogInfo / LoggingService.LogException — niemals Exceptions stillschweigend schlucken
  • DTOs: record für Unveränderlichkeit von Snapshots und Ergebnissen
  • Geheimnisse: Niemals hardcoden — SettingsService oder Umgebungsvariablen verwenden