diff --git a/README.md b/README.md index 0cb0e69..34f8eb7 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,163 @@ +![](Screenshot.png) + # // gott -Self-hosted AI-Coding-Agent auf Basis der Anthropic API. Stellt eine Web-UI bereit, über die man in Sessions mit konfigurierbaren Agenten chatten kann. Die Agenten haben Tool-Zugriff (Dateien lesen/schreiben/bearbeiten, Shell-Befehle ausführen) auf ein definiertes Workspace-Verzeichnis. +Self-hosted AI-Coding-Agent auf Basis der Anthropic Claude API. Stellt eine Web-UI bereit, über die man in Sessions mit konfigurierbaren Agenten chatten kann. Die Agenten haben Tool-Zugriff (Dateien lesen/schreiben/bearbeiten, Shell-Befehle ausführen, Suchen, Todos, Memory) auf ein definiertes Workspace-Verzeichnis. -- **Stack:** .NET 10, SQLite, Vanilla-Frontend -- **Port:** 19000 (konfigurierbar via `appsettings.json`) +--- + +## Features + +- **Multi-Agent-System** – Mehrere Agenten mit eigenen Identitäten, Persönlichkeiten und Tool-Konfigurationen +- **Multi-Agent Review** – Optionaler Review-Agent pro Session, der die Arbeit des Worker-Agents prüft und Feedback gibt +- **12 Tools** – `read_file`, `write_file`, `edit_file`, `list_files`, `delete_file`, `execute`, `glob`, `grep`, `todo_write`, `memory_read`, `memory_write`, `memory_list` +- **Streaming** – Echtzeit-Antworten via Server-Sent Events (SSE) +- **Stop-Button** – Laufende Requests zuverlässig abbrechen (inkl. laufender Shell-Befehle) +- **Skill-System** – Wiederverwendbare Prompt-Bausteine, zuordenbar pro Agent +- **Memory** – Persistentes Gedächtnis pro Agent (Dateisystem-basiert) +- **Workspace-Browser** – Integrierter Datei-Explorer mit Editor +- **Telegram-Integration** – Agents über Telegram ansprechen +- **Cronjobs** – Zeitgesteuerte Prompts mit Cron-Expressions +- **Bildgenerierung** – Krea AI Integration für Bildgenerierung +- **Nachrichten teilen** – Einzelne Nachrichten per öffentlichem Link teilen +- **Archivierung** – Chat-Verläufe archivieren und durchsuchen +- **Benutzerverwaltung** – Multi-User mit Admin-Rollen, Impersonate, Login-Links +- **Servereinstellungen** – Admin-UI für `appsettings.Production.json` +- **Desktop-Client** – WPF + WebView2 Windows-App +- **Dark Theme** – CSS-Variables basiertes Theming + +## Tech-Stack + +| Bereich | Technologie | +|---------|-------------| +| **Backend** | .NET 10 Minimal API, C# | +| **Datenbank** | SQLite + Dapper | +| **AI** | Anthropic Claude API (SSE Streaming) | +| **Frontend** | Vanilla JS SPA (kein Framework), CSS Variables | +| **Mathe** | KaTeX (LaTeX-Rendering) | +| **Bilder** | SixLabors.ImageSharp | +| **Cron** | Cronos | +| **Desktop** | WPF + WebView2 (optional) | + +--- + +## Voraussetzungen + +- [.NET 10 SDK](https://dotnet.microsoft.com/download/dotnet/10.0) +- Anthropic API Key ([console.anthropic.com](https://console.anthropic.com/)) +- Linux/macOS/Windows (Produktiv: Linux empfohlen) + +## Installation + +```bash +git clone /app/gott +cd /app/gott +dotnet publish -c Release -o publish +``` + +## Konfiguration + +Beim ersten Start wird `appsettings.json` mit Standardwerten verwendet. Für eigene Einstellungen eine `appsettings.Production.json` im `publish/`-Verzeichnis anlegen (oder über die Admin-UI verwalten): + +```json +{ + "Port": 19000, + "AnthropicToken": "sk-ant-...", + "MaxIterations": 100, + "PayloadLogging": false, + "PayloadLoggingGzip": false, + "KreaToken": "", + "KreaApiKey": "" +} +``` + +| Setting | Beschreibung | Default | +|---------|-------------|---------| +| `Port` | Server-Port (erfordert Neustart) | `19000` | +| `AnthropicToken` | Anthropic API Key (**erforderlich**) | – | +| `MaxIterations` | Max Tool-Loop Iterationen pro Chat | `100` | +| `PayloadLogging` | API-Payloads in Konsole loggen | `false` | +| `PayloadLoggingGzip` | Payload-Logs als .gz komprimieren | `false` | +| `KreaToken` | Krea AI API Token (optional) | – | +| `KreaApiKey` | API-Key für Krea-Endpoints ohne User-Auth (optional) | – | + +> **Hinweis:** Die `appsettings.Production.json` wird **nicht** beim `dotnet publish` mitkopiert. Sie lebt ausschließlich im `publish/`-Verzeichnis und kann über die Admin-UI (`#/server-settings`) verwaltet werden. + +## Starten + +```bash +cd publish +dotnet gott.dll +``` + +Die Web-UI ist dann unter `http://localhost:19000` erreichbar. + +Beim ersten Start wird automatisch ein Admin-Account erstellt – die Zugangsdaten werden in der Konsole ausgegeben. + +## Deployment (Linux) + +Empfohlen als systemd-Service hinter einem Reverse Proxy (Nginx, Caddy): + +```bash +# deploy.sh (Beispiel) +#!/bin/bash +set -e +cd /app/gott +systemctl stop gott +dotnet publish -c Release -o publish +systemctl start gott +``` + +Beispiel systemd-Unit (`/etc/systemd/system/gott.service`): + +```ini +[Unit] +Description=gott AI Agent +After=network.target + +[Service] +WorkingDirectory=/app/gott/publish +ExecStart=/usr/bin/dotnet /app/gott/publish/gott.dll +Restart=always +RestartSec=5 +Environment=ASPNETCORE_ENVIRONMENT=Production +Environment=DOTNET_ENVIRONMENT=Production + +[Install] +WantedBy=multi-user.target +``` + +--- + +## Projektstruktur + +``` +gott/ +├── Program.cs # Startup, DI, Middleware, Routing +├── appsettings.json # Standard-Konfiguration +├── Models/ # Records (reine Daten) +├── Services/ # Business-Logic (Singletons) +├── Endpoints/ # HTTP API (Minimal API) +├── Middleware/ # Auth-Middleware +├── Templates/ # Vorlagen (IDENTITY.md, SOUL.md, USER.md) +├── wwwroot/ # Frontend (Vanilla JS SPA) +│ ├── js/ # App, Router, API, Chat, UI-Helpers, Pages +│ └── css/ # Styles (theme.css = CSS Variables) +├── WindowsApp/ # WPF + WebView2 Desktop Client +└── publish/ # Build-Output + Laufzeit-Daten + └── data/ + ├── gott.db # SQLite Datenbank + ├── agents/{id}/ # Memory-Dateien pro Agent + ├── skills/{slug}/ # Skill-Dateien + └── images/ # Krea-generierte Bilder +``` + +> ⚠️ Quelldateien in `wwwroot/` editieren – **niemals** in `publish/wwwroot/`! + +Ausführliche Dokumentation: [ARCHITECTURE.md](ARCHITECTURE.md) · Kurzreferenz: [ARCHITECTURE_QUICK.md](ARCHITECTURE_QUICK.md) + +--- + +## Lizenz + +Proprietär – Alle Rechte vorbehalten. diff --git a/Screenshot.png b/Screenshot.png new file mode 100644 index 0000000..61b6374 Binary files /dev/null and b/Screenshot.png differ