From 730c14aa23cf675e02dc69ab2fc38062ec567a1f Mon Sep 17 00:00:00 2001 From: Meleki Date: Thu, 12 Mar 2026 22:37:33 +0100 Subject: [PATCH] =?UTF-8?q?docs:=20Dokumentation=20aktualisiert=20?= =?UTF-8?q?=E2=80=93=20API-Key-Scanner,=20passive=20Usage,=20Chat-Badge,?= =?UTF-8?q?=20Key-Check?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ARCHITECTURE.md: - Neue Services: KeyScannerService, AnthropicKeyChecker - scanned_keys Tabelle, api_keys erweitert (status, plan, usage, source_url) - API-Key-Verwaltung komplett überarbeitet: Key-Check mit korrekten Headers, passive Usage-Aktualisierung, GitHub-Scanner, Chat Usage-Badge - Scanner-Endpunkte dokumentiert (scan, scanned, adopt, recheck) - Tool-Anzahl 16 → 17 ARCHITECTURE_QUICK.md: - Gleiche Struktur-Updates (Services, Tabellen, Endpunkte, Tool-Anzahl) - Chat-Page: Usage-Badge-Overlay + Key-Switch-Modal - Passive Usage-Aktualisierung nach jedem API-Request README.md: - Tool-Anzahl 16 → 17 - API-Key-Verwaltung mit Scanner, passive Usage, Chat-Badge --- ARCHITECTURE.md | 62 +++++++++++++++++++++++++++++++------------ ARCHITECTURE_QUICK.md | 23 ++++++++++------ README.md | 4 +-- 3 files changed, 62 insertions(+), 27 deletions(-) diff --git a/ARCHITECTURE.md b/ARCHITECTURE.md index f322829..e79bfcc 100644 --- a/ARCHITECTURE.md +++ b/ARCHITECTURE.md @@ -1,6 +1,6 @@ # ARCHITECTURE.md – Gott -**Gott** ist eine selbst-gehostete AI-Chat-Plattform, gebaut auf **.NET 10** mit **Anthropic Claude API** als Haupt-Provider sowie **OpenAI-kompatiblen Providern** (Nvidia, Pollinations, Gemini). Sie bietet Multi-User-Support, persistente Agent-Memory, 16 Tools (Dateien, Shell, Suche, Memory, Remote-Execution), semantische Suche via lokalen Embeddings, Telegram-Integration, Cronjobs, Remote-Verbindungen und eine Krea-Bildgenerierung – alles über ein Vanilla-JavaScript-Frontend gesteuert. +**Gott** ist eine selbst-gehostete AI-Chat-Plattform, gebaut auf **.NET 10** mit **Anthropic Claude API** als Haupt-Provider sowie **OpenAI-kompatiblen Providern** (Nvidia, Pollinations, Gemini). Sie bietet Multi-User-Support, persistente Agent-Memory, 17 Tools (Dateien, Shell, Suche, Memory, Remote-Execution), semantische Suche via lokalen Embeddings, Telegram-Integration, Cronjobs, Remote-Verbindungen und eine Krea-Bildgenerierung – alles über ein Vanilla-JavaScript-Frontend gesteuert. --- @@ -124,7 +124,8 @@ gott/ │ ├── SharedMessageRecord.cs # Geteilte Nachrichten (Share-Token) │ ├── TelegramBotRecord.cs # Telegram Bot Entität │ ├── ChatModels.cs # ChatMessage, ChatRequest, AttachmentInfo/Block -│ ├── ApiKeyRecord.cs # API-Key-Verwaltung (Provider, Name, Key, IsActive) +│ ├── ApiKeyRecord.cs # API-Key-Verwaltung (Provider, Name, Key, IsActive, Status, Plan, Usage, SourceUrl) +│ ├── ScannedKeyRecord.cs # Gescannte GitHub-Keys (SourceUrl, Status, Plan, Usage, AdoptedApiKeyId) │ └── ChatContext.cs # Runtime-Kontext für einen Chat + ReviewContext │ ├── Services/ # Business-Logic @@ -138,7 +139,7 @@ gott/ │ ├── AnthropicService.cs # Claude API (Streaming + Non-Streaming) │ ├── OpenAiService.cs # OpenAI-kompatible Provider (Nvidia, Pollinations, Gemini) │ ├── SseHelper.cs # Shared SSE-Utilities (WriteSseEvent, TryWriteSse, FinalizeChain) -│ ├── ToolService.cs # Tool-Definitionen + Ausführung (16 Tools) +│ ├── ToolService.cs # Tool-Definitionen + Ausführung (17 Tools) │ ├── SystemPromptBuilder.cs # Modularer System-Prompt aus Blöcken │ ├── MemoryService.cs # Agent-Gedächtnis (Dateisystem) │ ├── SkillService.cs # Skill-Verwaltung (Dateisystem) @@ -151,7 +152,9 @@ gott/ │ ├── KreaService.cs # Krea Image Generation API │ ├── ImageService.cs # Bild-Resize + WebP-Konvertierung (512px + 256px Thumbnail) │ ├── StreamingTracker.cs # Tracking aktiver Streams + CancellationTokenSource für Stop -│ └── WorkspaceHelper.cs # Workspace-Pfad-Auflösung (relativ → absolut) +│ ├── WorkspaceHelper.cs # Workspace-Pfad-Auflösung (relativ → absolut) +│ ├── KeyScannerService.cs # GitHub Code-Search nach geleakten API-Keys +│ └── AnthropicKeyChecker.cs # Anthropic Key-Validierung + Usage-Header-Auswertung │ ├── Endpoints/ # HTTP API (Minimal API) │ ├── AuthEndpoint.cs # Login, Logout, Me @@ -168,7 +171,7 @@ gott/ │ ├── ModelsEndpoint.cs # Provider-Modelle (nvidia, pollinations, gemini, refresh) │ ├── SharedEndpoint.cs # Nachrichten teilen (öffentliche Links) │ ├── AdminEndpoint.cs # Admin: User-CRUD, Impersonate (Admin-only) -│ ├── ApiKeysEndpoint.cs # Admin: API-Key-CRUD, Activate/Deactivate, Check (Admin-only) +│ ├── ApiKeysEndpoint.cs # Admin: API-Key-CRUD, Activate/Deactivate, Check, Scan, Adopt (Admin-only) │ ├── RemoteEndpoint.cs # Remote-Verbindungen: WebSocket, Assign/Unassign, PowerShell-Script │ ├── ServerSettingsEndpoint.cs # Admin: Server-Settings lesen/schreiben (Admin-only) │ ├── ProfileEndpoint.cs # Profil, Persona, Passwort @@ -233,7 +236,7 @@ gott/ │ │ ├── tooltip.js # Tooltip-System │ │ ├── title.js # Tab-Titel-Management + Embedding-Warnung │ │ ├── pages/ # Seiten-Komponenten -│ │ │ ├── chat-page.js # Haupt-Chat-Ansicht (inkl. Remote-Button) +│ │ │ ├── chat-page.js # Haupt-Chat-Ansicht (inkl. Remote-Button, Usage-Badge-Overlay, Key-Switch-Modal) │ │ │ ├── dashboard.js # Dashboard / Home (inkl. API-Keys-Link) │ │ │ ├── session-page.js # Session-Einstellungen │ │ │ ├── agent-page.js # Agent-Editor @@ -241,7 +244,7 @@ gott/ │ │ │ ├── cronjob-page.js # Cronjob-Verwaltung │ │ │ ├── profile-page.js # Profil-Bearbeitung │ │ │ ├── admin-page.js # Admin: Benutzerverwaltung -│ │ │ ├── api-keys-page.js # Admin: API-Key-Verwaltung + Heartbeat-Check +│ │ │ ├── api-keys-page.js # Admin: API-Key-Verwaltung + Check + GitHub-Scanner │ │ │ ├── settings-page.js # App-Einstellungen │ │ │ ├── login-page.js # Login-Formular │ │ │ └── shared-page.js # Öffentliche geteilte Nachricht @@ -329,7 +332,8 @@ TelegramBot (1) ─── (*) Session (via telegram_bot_id) | `cronjobs` | Geplante Tasks (cron expression, prompt, notify_session_id, is_enabled, last_run, next_run) | | `shared_messages` | Geteilte Nachrichten (Share-Token, Ablaufdatum) | | `telegram_bots` | Telegram Bots (bot_token, webhook_secret, name, is_public) – eigenständige Entität | -| `api_keys` | API-Keys pro Provider (key_id, provider, name, api_key, is_active) – nur ein Key pro Provider aktiv | +| `api_keys` | API-Keys pro Provider (key_id, provider, name, api_key, is_active, status, plan, usage_7d, usage_5h, source_url, checked_at) – nur ein Key pro Provider aktiv | +| `scanned_keys` | Gescannte GitHub-Keys (scanned_key_id, api_key, source_url, status, plan, usage_7d, usage_5h, adopted_api_key_id, deleted) | | `message_embeddings` | Sentence-Embeddings für semantische Suche (message_id, vector BLOB, session_id, agent_id) | | `memory_file_embeddings` | Embeddings von Memory-Dateien (agent_id, file_path, chunk_index, vector BLOB) | @@ -408,7 +412,7 @@ RemoteConnectionManager → AuthService → DatabaseService → EnsureDefaultUse | `DatabaseService` | Singleton | SQLite CRUD, Schema-Init, Migrationen, alle DB-Operationen | | `AuthService` | Singleton | Token-Erzeugung/-Validierung, Passwort-Hashing (SHA256) | | `ChatService` | Singleton | Chat-Kontext aufbauen, History aus DB rekonstruieren | -| `AnthropicService` | Singleton | Claude API Kommunikation (Streaming SSE + Non-Streaming) | +| `AnthropicService` | Singleton | Claude API Kommunikation (Streaming SSE + Non-Streaming), passive Usage-Aktualisierung nach jedem Request | | `OpenAiService` | Singleton | OpenAI-kompatible Provider (Nvidia, Pollinations, Gemini) mit Tool-Calling, Streaming, Modell-Caching | | `ToolService` | Singleton | Tool-Definitionen bereitstellen, Tool-Aufrufe ausführen | | `WorkspaceHelper` | Static | Workspace-Pfad-Auflösung (relativ → absolut), Path-Traversal-Schutz | @@ -425,6 +429,8 @@ RemoteConnectionManager → AuthService → DatabaseService → EnsureDefaultUse | `KreaService` | Singleton | Krea API für Bildgenerierung, Job-Polling, Image-Download | | `ImageService` | Singleton | Bild-Resize + WebP-Konvertierung (512px + 256px Thumbnail) für Avatare und Session-Bilder | | `StreamingTracker` | Singleton | Trackt aktive Streams + CancellationTokenSource pro Session für Stop-Button | +| `KeyScannerService` | Singleton | GitHub Code-Search nach geleakten API-Keys (13 Sprachen, 24 Pfad-Extensions), Background-Scan | +| `AnthropicKeyChecker` | Static | Anthropic Key-Validierung via API-Request, Usage-Header-Auswertung (Plan, 7d/5h Usage) | ### Endpoints (API) @@ -449,7 +455,7 @@ Alle Endpoints folgen dem **Minimal API**-Pattern mit Extension Methods (`MapXxx | **Backup** | `/api/backup` | `POST` (Admin only, tar.gz Download) | | **Shared** | `/api/shared/`, `/api/messages/{id}/share` | Share erstellen, öffentlich abrufen, auflisten, löschen | | **Models** | `/api/models/` | `GET nvidia`, `GET pollinations`, `GET gemini`, `POST refresh` | -| **API Keys** | `/api/admin/api-keys/` | CRUD + `PUT activate/deactivate`, `POST check` (Heartbeat-Check für Anthropic-Keys) (Admin-only) | +| **API Keys** | `/api/admin/api-keys/` | CRUD + `PUT activate/deactivate`, `POST check`, `POST scan`, `GET scan/status`, `GET scanned`, `POST scanned/{id}/adopt`, `POST scanned/{id}/recheck`, `DELETE scanned/{id}` (Admin-only) | | **Remote** | `/api/remote` | WebSocket-Endpoint für Remote-Clients, `GET connections`, `POST assign/unassign`, `GET /remote.ps1` | | **Info** | `/api/info` | `GET` (Build-Zeitstempel + Embedding-Verfügbarkeit) | | **ServerSettings** | `/api/admin/server-settings` | `GET`, `PUT` (Admin-only, liest/schreibt `appsettings.Production.json`) | @@ -1732,7 +1738,7 @@ Das ONNX-Modell muss unter `data/models/all-MiniLM-L6-v2/` liegen (`model.onnx` ## API-Key-Verwaltung -API-Keys werden in der Datenbank verwaltet (Tabelle `api_keys`) statt in der Konfigurationsdatei. +API-Keys werden in der Datenbank verwaltet (Tabellen `api_keys` + `scanned_keys`) statt in der Konfigurationsdatei. ### Funktionsweise @@ -1741,14 +1747,36 @@ API-Keys werden in der Datenbank verwaltet (Tabelle `api_keys`) statt in der Kon - **Aktivierung** deaktiviert automatisch alle anderen Keys desselben Providers - **Live-Aktualisierung:** Bei Aktivierung/Deaktivierung wird der Token sofort im laufenden Service aktualisiert (kein Neustart nötig) - **Migration:** Bestehender `AnthropicToken` aus `appsettings.Production.json` wird beim ersten Start automatisch migriert +- **Source-URL:** Bei adoptierten Scan-Keys wird die GitHub-URL gespeichert -### Heartbeat-Check (nur Anthropic) +### Key-Check (nur Anthropic) -`POST /api/admin/api-keys/{id}/check` sendet eine minimale Anfrage an die Anthropic API und liest die Rate-Limit-Headers aus: -- **Gültig/Ungültig** – HTTP 200 vs. 401 -- **Subscription vs. API Console** – Anhand der `unified-*` Headers -- **Budget-Auslastung** – 5h und 7d Prozentwerte -- **Plan-Erkennung** – `Max` (overage > 0), `Pro` (kein fallback-Header), `Pro/Max` (sonst) +`POST /api/admin/api-keys/{id}/check` sendet eine minimale Anfrage an die Anthropic API (`claude-sonnet-4-20250514`, `max_tokens=1`) mit denselben Headers wie der echte Chat-Client (`Authorization: Bearer`, `anthropic-beta`, `User-Agent`, `x-app`, `anthropic-dangerous-direct-browser-access`) und liest die Response-Headers aus: +- **Status:** `valid`, `invalid`, `rate_limited`, `quota_exceeded`, `error` +- **Plan-Erkennung:** `Max` (overage > 0), `Pro` (kein fallback-Header), `Pro/Max` (sonst), `API Console` (keine unified-Headers) +- **Budget-Auslastung:** 5h und 7d Prozentwerte aus `unified-*` Headers + +### Passive Usage-Aktualisierung + +Nach **jedem** API-Request an Anthropic (Streaming, Sub-Agent, NonStreaming) werden die Response-Headers automatisch ausgelesen und Plan/Usage des aktiven API-Keys in der DB aktualisiert (`AnthropicKeyChecker.ExtractMetaFromHeaders()`). Kein separater Check-Request nötig – die Daten sind immer aktuell. + +### GitHub-Scanner (`KeyScannerService`) + +Durchsucht GitHub Code-Search nach geleakten Anthropic API-Keys: +- **13 Sprachen** (Python, JavaScript, TypeScript, Shell, Markdown, JSON, YAML, TOML, Go, Rust, Ruby, Java, PHP) +- **24 Pfad-Extensions** (.env, .cfg, .ini, .conf, .txt, .log, .md, .json, .yaml, .yml, .toml, .py, .js, .ts, .sh, .bash, .go, .rs, .rb, .java, .php, .config, .properties, .xml) +- **Ablauf:** `POST /api/admin/api-keys/scan` → GitHub-Suche → neue Keys in `scanned_keys` speichern → jeden Key mit `AnthropicKeyChecker` prüfen → Status + Plan + Usage aktualisieren +- **Adopt:** `POST /api/admin/api-keys/scanned/{id}/adopt` → Key in `api_keys` übernehmen, Name = `user/repo`, Source-URL = vollständige GitHub-URL +- **Live-Updates:** Scan-Ergebnisse werden nach jeder Iteration in der DB gespeichert (nicht erst am Ende) + +### Chat Usage-Badge (Frontend) + +- **Overlay** oben zentriert im Chat (nur für Admins) mit visuellen Usage-Balken (Sitzung + Woche) +- **Farbstufen:** Grün (<70%), Orange (70-89%), Rot (≥90%) +- **Auto-Hide:** Ausgeblendet beim Hochscrollen (wenn Auto-Scroll deaktiviert) +- **Auto-Refresh:** Badge aktualisiert sich bei neuen Nachrichten (via `pollHistory`) +- **Key-Switch-Modal:** Klick auf Badge öffnet Modal mit allen API-Keys, Zeile klickbar zum Wechseln +- **Manueller Check:** 🔄-Button neben Badge prüft Key und aktualisiert --- diff --git a/ARCHITECTURE_QUICK.md b/ARCHITECTURE_QUICK.md index 3017c6e..b88294d 100644 --- a/ARCHITECTURE_QUICK.md +++ b/ARCHITECTURE_QUICK.md @@ -22,7 +22,9 @@ gott/ │ ├── SseHelper.cs # Shared SSE-Utilities │ ├── EmbeddingService.cs # Lokales Sentence-Embedding (ONNX) │ ├── VectorSearchService.cs # Semantische Suche -│ └── RemoteConnectionManager.cs # WebSocket Remote-Verbindungen +│ ├── RemoteConnectionManager.cs # WebSocket Remote-Verbindungen +│ ├── KeyScannerService.cs # GitHub API-Key-Scanner +│ └── AnthropicKeyChecker.cs # Anthropic Key-Validierung + Usage-Auswertung ├── Endpoints/ # HTTP API (Minimal API MapXxx-Pattern) ├── Middleware/ # AuthMiddleware ├── Templates/ # Vorlagen für neue Agents (IDENTITY, SOUL, USER) @@ -85,7 +87,8 @@ User 1──* TelegramBot 1──* Session (via telegram_bot_id) | `agent_skills` | N:M Agent ↔ Skill | | `shared_messages` | Geteilte Nachrichten (öffentliche Links via Share-Token) | | `telegram_bots` | Telegram Bots (BotToken, WebhookSecret, Name, IsPublic) – eigenständige Entität, 1 Bot → N Sessions | -| `api_keys` | API-Keys pro Provider (key_id, provider, name, api_key, is_active) – nur ein Key pro Provider aktiv | +| `api_keys` | API-Keys pro Provider (key_id, provider, name, api_key, is_active, status, plan, usage_7d, usage_5h, source_url) – nur ein Key pro Provider aktiv | +| `scanned_keys` | Gescannte GitHub-Keys (api_key, source_url, status, plan, usage_7d, usage_5h, adopted_api_key_id) | | `message_embeddings` | Sentence-Embeddings für semantische Suche (message_id, vector BLOB) | | `memory_file_embeddings` | Embeddings von Memory-Dateien (agent_id, file_path, chunk_index, vector BLOB) | @@ -112,7 +115,7 @@ User 1──* TelegramBot 1──* Session (via telegram_bot_id) | Backup | `/api/backup` | POST → tar.gz download (Admin) | | Shared | `/api/shared/`, `/api/messages/{id}/share` | Share erstellen, öffentlich abrufen, löschen | | Models | `/api/models/` | `GET nvidia`, `GET pollinations`, `GET gemini`, `POST refresh` | -| API Keys | `/api/admin/api-keys/` | CRUD + activate/deactivate, `POST check` (Anthropic Heartbeat) (Admin-only) | +| API Keys | `/api/admin/api-keys/` | CRUD + activate/deactivate, `POST check` (Key-Validierung), scan (GitHub-Scanner), scanned (gefundene Keys), adopt (Key übernehmen) (Admin-only) | | Remote | `/api/remote` | WebSocket für Remote-Clients, `GET connections`, `POST assign/unassign` | | Info | `/api/info` | GET → Build-Zeitstempel + Embedding-Verfügbarkeit | | ServerSettings | `/api/admin/server-settings` | `GET`, `PUT` (Admin-only, liest/schreibt `appsettings.Production.json`) | @@ -126,10 +129,10 @@ User 1──* TelegramBot 1──* Session (via telegram_bot_id) | **DatabaseService** | Alles DB: Schema, Migrationen, CRUD | | **AuthService** | Token-Auth, Passwort-Hashing (SHA256) | | **ChatService** | Chat-Kontext aufbauen, History aus DB laden | -| **AnthropicService** | Claude API: SSE Streaming + Non-Streaming | +| **AnthropicService** | Claude API: SSE Streaming + Non-Streaming, passive Usage-Aktualisierung nach jedem Request | | **OpenAiService** | OpenAI-kompatible Provider (Nvidia, Pollinations, Gemini) mit Tool-Calling, Streaming, Modell-Caching | | **SseHelper** | Shared SSE-Utilities: WriteSseEvent, TryWriteSse, FinalizeChain, TruncateToolResult (static) | -| **ToolService** | Tool-Definitionen + Ausführung (16 Tools) | +| **ToolService** | Tool-Definitionen + Ausführung (17 Tools) | | **WorkspaceHelper** | Workspace-Pfad-Auflösung (relativ → absolut), Path-Traversal-Schutz (static) | | **SystemPromptBuilder** | System-Prompt aus modularen Blöcken zusammenbauen + Reminder-Generierung (static) | | **MemoryService** | Agent-Gedächtnis auf Dateisystem | @@ -143,6 +146,8 @@ User 1──* TelegramBot 1──* Session (via telegram_bot_id) | **EmbeddingBackgroundService** | Backfill bestehender Messages + Live-Embedding neuer Messages/Memory-Files | | **RemoteConnectionManager** | WebSocket-basierte Remote-Verbindungen, Command-Execution auf Remote-Clients | | **StreamingTracker** | Tracking aktiver Streams + CancellationTokenSource pro Session für Stop | +| **KeyScannerService** | GitHub-Code-Search nach geleakten API-Keys (13 Sprachen, 24 Pfad-Extensions) | +| **AnthropicKeyChecker** | Key-Validierung via Anthropic API, Usage-Header-Auswertung (Plan, 7d/5h Usage) | --- @@ -176,13 +181,15 @@ User-Input → POST /api/chat (SSE) → Chain + Messages in DB speichern ``` +**Passive Usage-Aktualisierung:** Nach jedem API-Request (Streaming, Sub-Agent, NonStreaming) werden die Response-Header ausgelesen und Plan/Usage des aktiven API-Keys in der DB aktualisiert – kein separater Check nötig. + **History-Optimierung:** Max 120 Messages. Ältere Chains nur Text-Messages (keine Tool-Calls). Letzte Chain vollständig. Tool-Results auf 20.000 Zeichen gekürzt. Attachments nur für letzte User-Message. System-Prompt-Reminder alle ~30 Messages. **Rendering:** Markdown via marked.js + LaTeX via KaTeX (`$$...$$` Block, `$...$` Inline). Timestamps im Format `dd.MM.yyyy HH:mm:ss` on hover. --- -## Tool-System (13 Tools) +## Tool-System (17 Tools) | Tool | Funktion | |------|----------| @@ -237,7 +244,7 @@ User-Input → POST /api/chat (SSE) | Hash-Route | Page-Datei | Beschreibung | |------------|-----------|--------------| | `#/` | `dashboard.js` | Session-Übersicht | -| `#/chat/{id}` | `chat-page.js` | Chat | +| `#/chat/{id}` | `chat-page.js` | Chat (inkl. Usage-Badge-Overlay + Key-Switch-Modal) | | `#/session/{id}` | `session-page.js` | Session-Settings | | `#/agent/{id}` | `agent-page.js` | Agent-Editor | | `#/telegram-bot/{id}` | `telegram-bot-page.js` | Telegram-Bot-Editor | @@ -245,7 +252,7 @@ User-Input → POST /api/chat (SSE) | `#/profile` | `profile-page.js` | Profil | | `#/settings` | `settings-page.js` | Einstellungen | | `#/admin` | `admin-page.js` | Benutzerverwaltung (Admin) | -| `#/api-keys` | `api-keys-page.js` | API-Key-Verwaltung (Admin) | +| `#/api-keys` | `api-keys-page.js` | API-Key-Verwaltung + GitHub-Scanner (Admin) | | `#/server-settings` | `server-settings-page.js` | Servereinstellungen (Admin) | | `#/login` | `login-page.js` | Login | | `#/shared/{token}` | `shared-page.js` | Geteilte Nachricht (öffentlich, kein Auth) | diff --git a/README.md b/README.md index ae8e758..69b2d84 100644 --- a/README.md +++ b/README.md @@ -16,7 +16,7 @@ Self-hosted AI-Coding-Agent mit **Anthropic Claude API** als Haupt-Provider sowi - **Plan-Modus** – Read-only-Modus zum Analysieren und Planen ohne Änderungen (Toggle im Chat) - **Web-Search** – Integrierte Web-Suche mit Quellenangaben (URLs + Titel) in Chat und geteilten Nachrichten - **Multi-Provider** – Anthropic Claude (Haupt-Provider), Nvidia (g4f.space), Pollinations (kostenlos), Google Gemini (kostenloser Free Tier) -- **16 Tools** – `read_file`, `write_file`, `edit_file`, `list_files`, `delete_file`, `execute`, `background_execute`, `glob`, `grep`, `todo_write`, `memory_read`, `memory_write`, `memory_list`, `memory_search`, `remote_execute`, `send_to_session`, `ask_user_choice` +- **17 Tools** – `read_file`, `write_file`, `edit_file`, `list_files`, `delete_file`, `execute`, `background_execute`, `glob`, `grep`, `todo_write`, `memory_read`, `memory_write`, `memory_list`, `memory_search`, `remote_execute`, `send_to_session`, `ask_user_choice` - **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 @@ -27,7 +27,7 @@ Self-hosted AI-Coding-Agent mit **Anthropic Claude API** als Haupt-Provider sowi - **Bildgenerierung** – Krea AI Integration für Bildgenerierung - **Semantische Suche** – Lokale Sentence-Embeddings (all-MiniLM-L6-v2 ONNX) für `memory_search` über vergangene Nachrichten und Memory-Dateien - **Remote-Verbindungen** – WebSocket-basierte Remote-Clients (PowerShell), AI-Agent kann Befehle auf entfernten Rechnern ausführen -- **API-Key-Verwaltung** – Admin-UI zum Verwalten von API-Keys (Anthropic) inkl. Heartbeat-Check, DB-basiert statt Config-Datei +- **API-Key-Verwaltung** – Admin-UI zum Verwalten von API-Keys (Anthropic) inkl. Key-Check, GitHub-Scanner (geleakte Keys finden + übernehmen), passive Usage-Aktualisierung bei jeder Chat-Nachricht, Usage-Badge im Chat mit Key-Switch-Modal - **Nachrichten teilen** – Einzelne Nachrichten per öffentlichem Link teilen - **Archivierung** – Chat-Verläufe archivieren und durchsuchen - **OpenClaw Import** – Chatverlauf aus OpenClaw-Instanzen importieren