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:
DynamicTracerServicesammelt CPU/RAM/Netzwerk-Telemetrie - Analysieren:
OptimizationEngineService+SourceAnalyzerService(Roslyn AST) - Handeln:
AutoPatcherServicewendet validierte Patches an - Validieren:
DigitalTwinServicestellt 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:
PascalCasefür Klassen/Interfaces,_camelCasefür private Felder,Async-Suffix für asynchrone Methoden - Injektion: Nur Konstruktor — niemals Service-Locator im Konstruktor
- Hintergrund:
ConfigureAwait(false)bei jedemawaitin Diensten - Protokollierung:
LoggingService.LogInfo/LoggingService.LogException— niemals Exceptions stillschweigend schlucken - DTOs:
recordfür Unveränderlichkeit von Snapshots und Ergebnissen - Geheimnisse: Niemals hardcoden —
SettingsServiceoder Umgebungsvariablen verwenden