Für alle, die wissen wollen, was unter der Haube steckt: Sprachen, Versionen, Architektur und wie wir sie absichern.
Stand: Release v1.0.48, Oktober 2026. Versionen ändern sich mit jedem Update; massgeblich ist der Quellcode auf GitHub.
| Bereich | Technik |
|---|---|
| Backend | C# auf .NET 10 (ASP.NET Core 10.0.13), REST, SignalR, Server-Sent Events |
| Frontend | Angular 22.0.2, TypeScript 6.0.3, RxJS 7.8.2, Signals |
| Datenbank | PostgreSQL 17 mit pgvector und pg_trgm, Entity Framework Core 10 |
| KI-Assistent Klacksy | Function Calling über 6 LLM-Anbieter plus OpenAI-kompatible Endpunkte; Embeddings und Reranking lokal mit ONNX Runtime |
| Planungs-Engines | Genetische Algorithmen und ein deterministischer Reparatur-Kern in eigenen .NET-Bibliotheken |
| Betrieb | Docker-Images mit nginx, Windows-Installer (Inno Setup), signierte Auto-Updates |
| Lizenz | AGPL-3.0-only, Quellcode öffentlich |
Backend und Frontend folgen der Clean Architecture mit vier Schichten. Die Abhängigkeiten zeigen nur nach innen:
IQueryable.Commands und Queries laufen über einen eigenen Mediator (kein MediatR) mit Pipeline-Behaviors für Validierung (FluentValidation) und Abbruch. Das Mapping erzeugt Riok.Mapperly zur Compile-Zeit statt per Reflection; ein eigener Roslyn-Source-Generator ergänzt weiteren Boilerplate-Code.
Im Backend sind die Schichten Ordner und Namespaces in einer Assembly. Deshalb prüfen 75 Architektur-Testklassen den Quelltext bei jedem Testlauf, zum Beispiel:
DateTime.Now in datenbanknahen Schichten, Parsen nur mit expliziten DateTimeStyles.Das Frontend hat eigene Guard-Specs (Schichtrichtung, eine Klasse oder ein Interface pro Datei, Lizenz-Header) und strenge ESLint-Regeln (kein any, kein console.log, keine zeitzonen-unsichere Datumslogik).
Ehrlich gesagt: Ganz fertig ist die Umstellung nicht. Im Backend stehen 9 bekannte Ausnahmen der Schichtrichtung auf einer Liste, im Frontend 55 Dateien mit Altlasten (Presentation greift direkt auf Infrastructure zu). Beide Listen dürfen nur schrumpfen: Ein neuer Verstoss lässt die Tests scheitern, und ein behobener Eintrag muss von der Liste. Für Dateigrösse und „ein Typ pro Datei“ gibt es keine Ausnahmen.
| Baustein | Version / Umsetzung |
|---|---|
| Laufzeit | .NET 10 (net10.0), Nullable Reference Types aktiv, StyleCop-Analyzer |
| Web | ASP.NET Core 10.0.13, OpenAPI, Rate Limiting, Health Checks |
| ORM | Entity Framework Core 10.0.13, Npgsql 10.0.3, snake_case-Namenskonvention |
| Mapping / Validierung | Riok.Mapperly 4.3.1, FluentValidation 12.2.0 |
| Echtzeit | 7 typisierte SignalR-Hubs, optional mit Redis-Backplane |
| Authentifizierung | JWT (HMAC-SHA256) mit rotierenden Refresh-Tokens, ASP.NET Core Identity, LDAP, OAuth2-Login |
| Hintergrunddienste | 37 Hosted Services, teils per Konfiguration zuschaltbar (Embeddings, Eskalationen, ERP-Import, Datenaufbewahrung, Optimierer) |
| Weitere | ClosedXML (Excel), MailKit, Cronos, ONNX Runtime 1.31.0 |
Umfang: rund 6400 C#-Dateien mit gut 400 000 Zeilen (ohne Migrationen) und 130 Controller.
Klacks spricht das Model Context Protocol: POST /mcp mit dem offiziellen C#-SDK (ModelContextProtocol.AspNetCore 2.2.0), Streamable HTTP, zustandslos. Externe KI-Clients melden sich per JWT oder Personal Access Token an (32 Byte Zufall, gespeichert wird nur der SHA-256-Hash); ein OAuth-Autorisierungsserver mit Metadaten-Endpunkt ist dabei. Die Rechte über MCP sind auf Supervisor-Niveau gedeckelt.
pgvector/pgvector:pg17) mit den Erweiterungen vector und pg_trgm.multilingual-e5-base (ONNX, fp16) und Reranking mit dem Cross-Encoder mMiniLMv2 (ONNX, int8) laufen auf dem eigenen Server. Die Modelldateien sind per SHA-256 gepinnt.| Baustein | Version / Umsetzung |
|---|---|
| Framework | Angular 22.0.2, TypeScript 6.0.3, RxJS 7.8.2 |
| Komponenten | Rund 510 Komponenten, alle standalone und mit OnPush; Signals, inject() und die neue Control-Flow-Syntax (@if, @for) |
| Change Detection | Noch zone-basiert (provideZoneChangeDetection), nicht zoneless |
| State | Kein NgRx: Zustand in Services mit Signals und einem Event-Bus |
| UI | Bootstrap 5.3.8, ng-bootstrap 21, FontAwesome 6, Leaflet, CodeMirror 6, Fabric.js |
| Übersetzung | @ngx-translate 15 mit eigenem Loader |
| Tests | Vitest 4.1.6 über den Angular-Builder, jsdom |
| Qualität | ESLint 9 (Flat Config) inkl. Barrierefreiheitsregeln für Templates, husky |
| Auslieferung | Statisches Bundle hinter nginx, gebaut mit Node 22 |
Umfang: rund 2700 TypeScript-Dateien (knapp 200 000 Zeilen) und 625 Spec-Dateien.
25 Sprachen: Deutsch, Englisch, Französisch und Italienisch sind eingebaut, 21 weitere kommen als Sprachpakete (Oberfläche, Hilfe, Assistententexte, Synonyme, Kalenderregeln). Arabisch und Hebräisch laufen von rechts nach links, inklusive PDF-Berichten.
Deepgram, Groq Whisper, AssemblyAI oder ein eigener OpenAI-kompatibler Dienst; dazu ein selbst gehosteter faster-whisper-Container und Whisper direkt im Browser (transformers.js auf WebAssembly). Eine lokale Engine auf Basis von NVIDIA Parakeet ist in Entwicklung und noch nicht Teil eines Releases.
Blazor Server auf .NET 10 (vorgerendert), Tailwind CSS 3.4.19, keine Cookies, keine Drittanbieter.
Klacks steht unter der GNU AGPL-3.0-only. Jede Quelldatei trägt einen SPDX-Header, ein Test prüft das. Der Code liegt auf GitHub.