AuthorBuddy/DOCUMENTATION.md
2026-05-31 19:31:27 +02:00

472 lines
19 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# AuthorBuddy.Web Dokumentation
## Inhaltsverzeichnis
1. [Überblick](#1-überblick)
2. [Funktionsübersicht](#2-funktionsübersicht)
3. [Systemarchitektur](#3-systemarchitektur)
4. [Installation & Einrichtung](#4-installation--einrichtung)
5. [Bedienung](#5-bedienung)
- [Projektverwaltung](#51-projektverwaltung)
- [Editor](#52-editor)
- [Assistent](#53-assistent)
- [Einstellungen](#54-einstellungen)
- [Modellverwaltung](#55-modellverwaltung)
- [Benutzerverwaltung](#56-benutzerverwaltung)
- [Datenbank-Administration](#57-datenbank-administration)
6. [Datenbank](#6-datenbank)
7. [Themes & Lokalisierung](#7-themes--lokalisierung)
8. [LLM-Backends](#8-llm-backends)
9. [Technische Referenz](#9-technische-referenz)
---
## 1. Überblick
**AuthorBuddy.Web** ist eine webbasierte Schreibumgebung für Autoren mit KI-Unterstützung. Die Anwendung läuft als Blazor Interactive Server (.NET 10.0) und nutzt lokale Large Language Models (LLMs) über **Ollama** oder **llama.cpp** für Textanalyse, Lektorat, Faktenabfrage und kreative Zusammenarbeit.
Daten werden in einer eingebetteten **LiteDB**-Datenbank (NoSQL) gespeichert es wird kein externes Datenbanksystem benötigt.
### Zielgruppen
- **Autoren & Schriftsteller** Romanvorlage mit Kapitelverwaltung, Exposé, Charakterentwicklung
- **Requirements Engineers** Technische Vorlage für Lastenheft, Pflichtenheft, Use Cases uvm.
- **Administratoren** Benutzerverwaltung mit 2FA, Datenbank-Administration
---
## 2. Funktionsübersicht
| Funktion | Beschreibung |
|----------|-------------|
| **Projektverwaltung** | Zwei Vorlagen: Roman (mit Drafts, Fakten, Charakteren, Archiv) und Technisch (mit Anforderungen, Use Cases, Architektur, Glossar) |
| **Markdown-Editor** | Vollbild-Editor mit Autosave, Versionierung, Diff-Ansicht |
| **KI-Assistent** | Mehrere Modi: Lektorat, Advocatus Diaboli, Hook-Finder, ELI5, Co-Author, RAG-Faktenabfrage |
| **Technische Assistenten** | Lastenheft, Pflichtenheft, Use Cases, Stakeholder-Analyse, Glossar, Qualitätsanforderungen, Risikoanalyse |
| **Rechtschreibprüfung** | KI-gestützte Korrektur über LLM |
| **Stilanalyse** | KI-gestütztes Lektorat |
| **RAG (Retrieval-Augmented Generation)** | Volltext-Suche über Projektdateien mit Embedding-Vektoren |
| **Wikipedia-Recherche** | Integrierte Wikipedia-Suche (DE/EN) mit „Als Fakt speichern" |
| **Datei-Kategorien** | Markdown-Dateien können als Charakter, Exposé, Fakt oder Dokument getaggt werden |
| **Benutzerverwaltung** | Multi-User mit Passwort-Hashing und TOTP-2FA |
| **Modellverwaltung** | LLM-Modelle via Ollama herunterladen und verwalten |
| **Zwei Backends** | Ollama (vollständig) und llama.cpp (OpenAI-kompatibel) |
| **Mehrere Themes** | Hell, Dunkel, Windows 95 Retro |
| **Zweisprachig** | Deutsch (Standard) und Englisch |
| **DB-Admin** | Datenbank-Tabellen einsehen, bearbeiten und löschen (nur Admin) |
---
## 3. Systemarchitektur
### 3.1 Technologie-Stack
| Komponente | Technologie |
|------------|-------------|
| **Framework** | .NET 10.0 Blazor Interactive Server |
| **Sprache** | C# 13 |
| **UI** | Razor Components, CSS Custom Properties |
| **Datenbank** | LiteDB 5.0 (eingebettetes NoSQL-Dokumenten-DB) |
| **Text-Diff** | DiffPlex 1.9 |
| **Authentifizierung** | Cookie-basiert mit ClaimsPrincipal |
| **2FA** | TOTP (Time-based One-Time Password) |
### 3.2 Schichtenarchitektur
```
┌─────────────────────────────────────────────┐
│ Pages (.razor) │
│ Editor, Assistant, Settings, Models, ... │
├─────────────────────────────────────────────┤
│ Shared Components │
│ CategorySelector, CopyCreateToolbar, │
│ DiffView, RedirectToLogin │
├─────────────────────────────────────────────┤
│ Services │
│ AuthService │ OllamaService │
│ SettingsService │ ProjectService │
│ RagService │ WikipediaService │
│ ThemeService │ LocalizationService │
│ DbAdminService │ FileScannerService │
│ OllamaSetupService │
├─────────────────────────────────────────────┤
│ Backends (ILLMBackend) │
│ OllamaBackend │ LlamaCppBackend │
├─────────────────────────────────────────────┤
│ Daten (LiteDB) │
│ UserEntity, ProjectEntity, SettingEntity, │
│ FileCategoryEntity, DocumentVector, │
│ DocumentMetaEntity │
└─────────────────────────────────────────────┘
```
### 3.3 Abhängigkeits-Injektion (DI)
Die Anwendung verwendet das integrierte DI-System von ASP.NET Core:
- **Singleton** (`AddSingleton`): `ILiteDatabase`, `OllamaSettings`, `IOllamaService`, `ILLMBackend` (beide), `IProjectService`, `IRagService`, `IWikipediaService`, `IOllamaSetupService`, `IFileScannerService`, `OperationState`, `IDbAdminService`
- **Scoped** (`AddScoped`): `ISettingsService`, `IThemeService`, `IAuthService`, `ILocalizationService`, `CustomAuthStateProvider`
---
## 4. Installation & Einrichtung
### 4.1 Voraussetzungen
- **.NET 10.0 SDK** oder höher
- **Ollama** (empfohlen) oder **llama.cpp** für LLM-Unterstützung
- Ein moderner Webbrowser (Chrome, Edge, Firefox)
### 4.2 Schnellstart
```bash
# Repository klonen
git clone <repository-url>
cd AuthorBuddy.Web
# Bauen
dotnet build
# Starten
dotnet run
```
Die Anwendung ist standardmäßig unter `http://localhost:5000` erreichbar.
### 4.3 LLM-Modelle einrichten
1. Ollama installieren (https://ollama.com) oder llama.cpp konfigurieren
2. Modelle pullen, z.B.: `ollama pull llama3.2`, `ollama pull nomic-embed-text`
3. In der Anwendung unter **Einstellungen → Modelle** die Modelle auswählen
4. Verbindung testen mit dem **Test**-Button
### 4.4 Erstmaliger Start
Beim ersten Start wird automatisch ein Admin-Benutzer erstellt. Über den *Setup-Assistenten* (`/setup-assistant`) können die empfohlenen Einstellungen übernommen werden.
---
## 5. Bedienung
### 5.1 Projektverwaltung
**Neues Projekt anlegen:**
1. Klicke auf **Datei → Neues Projekt** in der Seitenleiste
2. Wähle eine Vorlage:
- **📖 Roman** Erzeugt Ordner für Drafts, Fakten, Charaktere, Archiv sowie Exposé- und Ideen-Vorlagen
- **⚙️ Technische Vorlage** Erzeugt Ordner für Anforderungen, Use Cases, Architektur, Glossar sowie Lastenheft- und Pflichtenheft-Vorlagen
3. Vergib einen Projektnamen und wähle einen Speicherort
4. Klicke auf **Erstellen**
**Projekt öffnen:**
In der Seitenleiste unter **Projekte** werden alle vorhandenen Projekte aufgelistet. Ein Klick öffnet das Projekt im Editor.
**Projekt kopieren:**
Rechtsklick (oder Kontextmenü) auf ein Projekt → **Projekt kopieren** erstellt eine vollständige Kopie inkl. Dateistruktur, Kategorien und projektspezifischer Einstellungen.
### 5.2 Editor
Der Editor (`/editor`) ist der zentrale Arbeitsbereich.
**Funktionen:**
| Funktion | Beschreibung |
|----------|-------------|
| **Text eingeben** | Markdown-Editor im Vollbildmodus |
| **Autosave** | Speichert automatisch alle 2 Sekunden |
| **Manuell speichern** | `Strg+S` oder Klick auf **Speichern** |
| **Versionierung** | Klick auf **Version** erstellt einen Snapshot im Unterordner `_versions/` |
| **Versionen durchsuchen** | **Versionen** → Liste aller Snapshots mit Kommentar |
| **Diff-Ansicht** | **Vergleichen** zeigt Side-by-Side-Diff zwischen Versionen |
| **Version wiederherstellen** | **Wiederherstellen** lädt eine alte Version in den Editor |
| **Stil prüfen** | KI-Analyse des Schreibstils über das Stil-Modell |
| **Rechtschreibung prüfen** | KI-Korrektur über das Spelling-Modell |
| **RAG-Suche** | Durchsucht indexierte Projektinhalte nach ähnlichen Passagen |
| **Wikipedia-Suche** | Durchsucht Wikipedia (DE+EN) und kann Ergebnisse als Fakten speichern |
| **Assistent** | Öffnet den KI-Assistenten mit dem aktuellen Text als Eingabe |
| **Projekt indexieren** | Baut den Vektorindex für RAG auf (nach Projektänderungen nötig) |
**Datei-Kategorien:**
Im Dateibaum können `.md`-Dateien mit Kategorien versehen werden:
- 👤 **Charakter** Personenprofil
- 📋 **Exposé** Handlungsübersicht (nur eine Datei pro Projekt)
- 📌 **Fakt** Hintergrundinformation
- 📄 **Dokument** Allgemeines Dokument
Kategorien werden im Dateibaum als Badge angezeigt und können über das 🏷-Symbol bearbeitet werden.
### 5.3 Assistent
Der KI-Assistent (`/assistant`) bietet mehrere Arbeitsmodi:
**Roman-Modi:** (immer verfügbar)
| Modus | Beschreibung | Temp. |
|-------|-------------|-------|
| **Lektorat** | Stilistische Textoptimierung lebendiger, anschaulicher Stil | 0.7 |
| **Advocatus Diaboli** | Radikale Gegenposition Schwachstellen in der Argumentation | 0.9 |
| **Hook-Finder** | 5 emotionale Einstiegssätze für den Text | 0.9 |
| **ELI5** | Vereinfachung komplexer Passagen | 0.5 |
| **Co-Author** | Kreative Weiterentwicklung von Handlung/Charakteren | 1.0 |
| **RAG** | Faktenabfrage aus dem projekteigenen Index | 0.3 |
**Technische Modi:** (nur bei technischer Projektvorlage sichtbar)
| Modus | Beschreibung | Temp. |
|-------|-------------|-------|
| **📋 Lastenheft** | Erstellung eines Lastenhefts nach IREB-Standard | 0.3 |
| **⚙️ Pflichtenheft** | Detailliertes Pflichtenheft mit technischer Umsetzung | 0.3 |
| **🔄 Use Cases** | UML-Use-Case-Modellierung mit Akteuren und Abläufen | 0.4 |
| **👥 Stakeholder-Analyse** | Identifikation und Analyse aller Projekt-Stakeholder | 0.5 |
| **📖 Glossar** | Fachglossar mit Definitionen und Synonymen | 0.2 |
| **✅ Qualitätsanforderungen** | Qualitätsanforderungen nach ISO 25010 | 0.3 |
| **⚠️ Risikoanalyse** | Identifikation und Bewertung von Projektrisiken | 0.5 |
**Prompt-Editor:**
Jeder Modus hat einen konfigurierbaren System-Prompt. Klicke auf **Prompt bearbeiten**, um den Prompt für die aktuelle Session anzupassen. Mit **Zurücksetzen** wird der Standard-Prompt aus den Einstellungen geladen.
**Temperatur:**
Der Temperatur-Regler beeinflusst die Kreativität des Modells:
- **0.00.2**: Präzise, deterministisch
- **0.30.5**: Ausgewogen, faktennah
- **0.61.2**: Kreativ, überraschende Wendungen
- **1.32.0**: Chaotisch, experimentell
**Exposé-Kontext:**
In den Modi Lektorat, Co-Author und Hook-Finder wird automatisch das per Kategorie markierte Exposé als Kontext in den Prompt eingefügt.
### 5.4 Einstellungen
Die Einstellungsseite (`/settings`) ist in vier Spalten organisiert:
| Spalte | Inhalt |
|--------|--------|
| Links (Admin) | Modelle, Ollama-Server, Diagnose, Design, Sprache |
| Mitte-Links | Lektor-System-Prompt, Fact-Check-Vorlage, Rechtschreibungs-Prompt |
| Mitte-Rechts | Advocatus Diaboli, Hook-Finder, ELI5, Co-Author |
| Rechts | Alle 7 technischen Prompts mit Temperatur |
**Projektkontext:**
Wenn ein Projekt geladen ist, werden die Einstellungen für dieses Projekt gespeichert. Ohne Projekt gelten die benutzerspezifischen Einstellungen.
### 5.5 Modellverwaltung
Die Modellverwaltung (`/models`) zeigt alle lokal vorhandenen Ollama-Modelle mit Größe und Änderungsdatum an. Neue Modelle können direkt heruntergeladen werden:
1. Modellname eingeben (z.B. `llama3.2`, `mistral`, `gemma4`)
2. Auf **Herunterladen** klicken
3. Der Fortschritt wird in Echtzeit angezeigt
### 5.6 Benutzerverwaltung
Die Benutzerverwaltung (`/user-management`) ist nur für Administratoren zugänglich:
- Liste aller Benutzer mit Rolle und Status
- Benutzer aktivieren/deaktivieren
- Benutzer löschen (der eigene Account kann nicht gelöscht werden)
**Zwei-Faktor-Authentifizierung (2FA):**
Jeder Benutzer kann 2FA einrichten:
1. Unter **Einstellungen → 2FA einrichten** QR-Code scannen
2. Geheimen Schlüssel notieren
3. Code zur Bestätigung eingeben
### 5.7 Datenbank-Administration
Die DB-Admin-Seite (`/db-admin`) ist Administratoren vorbehalten und erlaubt:
- Auswahl der Datenbank-Tabelle (users, projects, settings, fileCategories, documentMeta, vectors)
- Anzeige aller Datensätze in einer Tabelle
- Bearbeiten von Feldwerten (Öffnet Bearbeitungs-Modal)
- Löschen von Datensätzen (mit Bestätigungsdialog)
> **Achtung:** Hier können kritische Daten verändert oder gelöscht werden. Nur durchführen, wenn du genau weißt, was du tust.
---
## 6. Datenbank
Die Anwendung verwendet **LiteDB** eine eingebettete NoSQL-Dokumentendatenbank. Die Datenbankdatei (`author_brain.db`) liegt im Ausführungsverzeichnis der Anwendung.
### 6.1 Collections
| Collection | Entity | Zweck |
|------------|--------|-------|
| `users` | `UserEntity` | Benutzerkonten mit Passwort-Hash und 2FA-Secret |
| `projects` | `ProjectEntity` | Projekte mit Name, Pfad, Besitzer und Vorlagentyp |
| `settings` | `SettingEntity` | Key-Value-Einstellungen (global/benutzer-/projektspezifisch) |
| `fileCategories` | `FileCategoryEntity` | Datei-Kategorie-Zuordnungen |
| `documentMeta` | `DocumentMetaEntity` | Metadaten indexierter Dokumente (Hash, Änderungsdatum) |
| `vectors` | `DocumentVector` | Embedding-Vektoren für die RAG-Suche |
### 6.2 Einstellungshierarchie
Einstellungen werden mit absteigender Priorität aufgelöst:
1. **Projektspezifisch** (`UserId` + `ProjectId` gesetzt)
2. **Benutzerspezifisch** (`UserId` gesetzt, `ProjectId` null)
3. **Global** (beide null)
---
## 7. Themes & Lokalisierung
### 7.1 Themes
Drei CSS-Themes stehen zur Verfügung:
| Theme | Beschreibung |
|-------|-------------|
| **Hell** (Standard) | Helles Farbschema mit blauen Akzenten |
| **Dunkel** | Dark Mode, inspiriert von VS Code |
| **W95** | Windows 95 Retro-Stil |
Die Theme-Umschaltung erfolgt durch dynamisches Einfügen eines `<link>`-Elements in den Seitenkopf.
### 7.2 Lokalisierung
Unterstützte Sprachen:
- **Deutsch** (`de`) Standard
- **Englisch** (`en`)
Die Übersetzungen liegen als JSON-Dateien im Ordner `Resources/`. Die Sprachumschaltung erfolgt in den Einstellungen und wird sofort wirksam. Für nicht gefundene Schlüssel gibt es eingebaute deutsche Fallback-Texte.
---
## 8. LLM-Backends
### 8.1 Ollama (Standard)
- **Status**: Voll unterstützt
- **Modellverwaltung**: Ja (Pull, Delete)
- **API**: REST (`/api/generate`, `/api/embeddings`, `/api/tags`, `/api/pull`, `/api/delete`, `/api/show`)
- **Standard-URL**: `http://localhost:11434`
### 8.2 llama.cpp
- **Status**: Basisfunktionen unterstützt
- **Modellverwaltung**: Nein
- **API**: OpenAI-kompatibel (`/v1/chat/completions`, `/v1/models`) + `/embedding`, `/slots`
- **Standard-URL**: `http://localhost:8080`
Voreingestellte Modelle (in `OllamaSettings`):
| Modell | Zweck |
|--------|-------|
| `gemma4:e4b` | Stil-Analyse (Lektorat) |
| `nomic-embed-text` | Embeddings (RAG) |
| `phi3:mini` | Rechtschreibprüfung |
---
## 9. Technische Referenz
### 9.1 Routen
| Route | Seite | Zugriff |
|-------|-------|---------|
| `/` | Dashboard | Authentifiziert |
| `/login` | Anmeldung | Öffentlich |
| `/register` | Registrierung | Öffentlich |
| `/editor` | Editor | Authentifiziert |
| `/editor/index/{id}` | Editor mit Projekt | Authentifiziert |
| `/editor/newproject` | Editor mit Erstell-Dialog | Authentifiziert |
| `/assistant` | KI-Assistent | Authentifiziert |
| `/settings` | Einstellungen | Authentifiziert |
| `/models` | Modellverwaltung | Authentifiziert |
| `/user-management` | Benutzerverwaltung | Authentifiziert |
| `/setup-2fa` | 2FA einrichten | Authentifiziert |
| `/setup-assistant` | Setup-Assistent | Authentifiziert |
| `/db-admin` | DB-Administration | Authentifiziert (Admin) |
| `/not-found` | 404 | Öffentlich |
| `/Error` | 500 | Öffentlich |
### 9.2 NuGet-Pakete
- **DiffPlex** 1.9.0 Text-Differencing für die Diff-Ansicht
- **LiteDB** 5.0.21 Eingebettete NoSQL-Dokumentendatenbank
### 9.3 Schlüssel-Klassen
| Namespace | Klasse | Zweck |
|-----------|--------|-------|
| `Models` | `Constants` | App-Konstanten (DB-Name, Ordnerstruktur) |
| `Models` | `OllamaSettings` | Zentrale Konfiguration (Singleton) |
| `Models` | `ProjectTemplate` | Vorlagentyp (Novel, Technical) |
| `Models` | `FileCategory` | Datei-Kategorien als Flags-Enum |
| `Models` | `FileTreeItem` | Baumstruktur für Projektdateien |
| `Data` | `UserEntity` | Benutzer-DB-Entity |
| `Data` | `ProjectEntity` | Projekt-DB-Entity |
| `Data` | `SettingEntity` | Einstellungs-DB-Entity |
| `Data` | `DocumentVector` | Embedding-Vektor-DB-Entity |
| `Services` | `AuthService` | Authentifizierung mit 2FA |
| `Services` | `SettingsService` | Einstellungs-Verwaltung |
| `Services` | `ProjectService` | Projekt-CRUD |
| `Services` | `OllamaService` | LLM-Kommunikation (Fassade) |
| `Services` | `RagService` | RAG-Indexierung und -Suche |
| `Services` | `DbAdminService` | DB-Administration |
### 9.4 Wichtige Konstanten
```csharp
Constants.DbFile // "author_brain.db"
Constants.SubFolders // Standard-Ordnerstruktur (Referenz)
```
Projekt-Ordnerstruktur bei **Roman**-Vorlage:
```
{rootPath}/
├── 00_Drafts/
├── 01_Fakten/
├── 02_Characters/
├── 03_Archive/
├── 00_Projekt_Info.md
├── Die Handlung (Das Exposé).md
└── Ideen Sammlung.md
```
Projekt-Ordnerstruktur bei **Technischer** Vorlage:
```
{rootPath}/
├── 00_Anforderungen/
├── 01_UseCases/
├── 02_Architektur/
├── 03_Glossar/
├── 00_Projekt_Info.md
├── Lastenheft.md
└── Pflichtenheft.md
```
---
## 10. Entwicklung & Erweiterung
### 10.1 Neuen Assistenten-Modus hinzufügen
1. **Prompt-Default** in `Models/OllamaSettings.cs` (DE + EN + Temp)
2. **Settings-Key** in `Services/SettingsService.cs` (Key-Konstante + Getter/Setter)
3. **Interface-Methoden** in `Services/ISettingsService.cs`
4. **Settings-UI** in `Components/Pages/Settings.razor`
5. **Mode-Dropdown** + `LoadPromptForMode` in `Components/Pages/OllamaAssistant.razor`
6. **Lokalisierung** in `Resources/de.json` + `Resources/en.json`
7. **DB-Seeding** in `SettingsService.InitializeAsync()` + `LoadProjectSettingsAsync()`
### 10.2 Neues Daten-Modell hinzufügen
1. Entity-Klasse in `Data/` anlegen
2. Collection-Namen in `Services/DbAdminService.KnownCollections` aufnehmen
3. Service-Methoden für CRUD-Operationen schreiben
4. Bei Bedarf UI-Komponente erstellen
---
*Dokumentation erstellt am 31.05.2026*