docs: Dokumentation aktualisieren (ReviewContext→SubAgentContext, Provider-Weiche, agent_api_keys, Scanner, Dashboard-Sortierung, Plan-Modus-Hint)
ARCHITECTURE.md: - ReviewContext → SubAgentContext (Code-Block + alle Referenzen) - ChatContext.cs Kommentar aktualisiert - Provider-Weiche für Telegram, Cronjobs, Sub-Agents dokumentiert - OpenAiService: ChatNonStreaming() ergänzt - Chat-Pipeline: API-Key-Auflösung als Schritt 3c - Multi-Provider-Tabelle: AnthropicToken → agent_api_keys - api_keys Tabelle: Zuweisung pro Agent statt global - Neue Tabellen: agent_api_keys, scanner_logs, server_settings - Dashboard-Sortierung nach letzter Chat-Nachricht - Plan-Modus: Hint-Mechanismus dokumentiert - Key-Scanner: 4 Quellen (GitHub Code, Issues/PRs, HuggingFace, Serper) - API-Key pro Agent: Endpoints + Kein-Key-Option - ServerSettingsService in Service-Tabelle - session.js: currentAgentId dokumentiert - Streaming vs Non-Streaming: Sub-Agents ergänzt ARCHITECTURE_QUICK.md: - Multi-Agent Backend: SubAgentContext + Provider-Weiche - OpenAiService: Non-Streaming erwähnt - Chat-Pipeline: Key-Auflösung ergänzt - api_keys: Zuweisung pro Agent - Dashboard-Route: Sortierungs-Hinweis README.md: - Key-Scanner: 4 Quellen statt nur GitHub
This commit is contained in:
1 parent
a6a0223f44
commit
8e94975e61
3 files changed
+109
-51
No files matched your search
+13
-8
@@ -87,8 +87,11 @@ 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, status, plan, usage_7d, usage_5h, source_url) – nur ein Key pro Provider aktiv |
|
||||
| `api_keys` | API-Keys (key_id, provider, name, api_key, is_active, status, plan, usage_7d, usage_5h, source_url) – mehrere Keys pro Provider möglich, Zuweisung pro Agent |
|
||||
| `agent_api_keys` | API-Key-Zuweisung pro User+Agent (user_id, agent_id, key_id) – ersetzt globales `users.selected_api_key_id` |
|
||||
| `scanned_keys` | Gescannte GitHub-Keys (api_key, source_url, status, plan, usage_7d, usage_5h, adopted_api_key_id) |
|
||||
| `scanner_logs` | Scanner-Logs (timestamp, type, message, scanner, details) |
|
||||
| `server_settings` | Server-Settings (key, value, type) – verwaltet über `ServerSettingsService` |
|
||||
| `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) |
|
||||
|
||||
@@ -130,7 +133,7 @@ User 1──* TelegramBot 1──* Session (via telegram_bot_id)
|
||||
| **AuthService** | Token-Auth, Passwort-Hashing (SHA256) |
|
||||
| **ChatService** | Chat-Kontext aufbauen, History aus DB laden |
|
||||
| **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 |
|
||||
| **OpenAiService** | OpenAI-kompatible Provider (Nvidia, Pollinations, Gemini) mit Tool-Calling, Streaming (`StreamChat`) + Non-Streaming (`ChatNonStreaming` für Telegram/Cronjobs/Sub-Agents), Modell-Caching |
|
||||
| **SseHelper** | Shared SSE-Utilities: WriteSseEvent, TryWriteSse, FinalizeChain, TruncateToolResult (static) |
|
||||
| **ToolService** | Tool-Definitionen + Ausführung (17 Tools) |
|
||||
| **WorkspaceHelper** | Workspace-Pfad-Auflösung (relativ → absolut), Path-Traversal-Schutz (static) |
|
||||
@@ -146,8 +149,9 @@ 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) |
|
||||
| **KeyScannerService** | API-Key-Scanner (GitHub Code Search, GitHub Issues/PRs, HuggingFace Hub, Google/Serper), täglicher Scan |
|
||||
| **AnthropicKeyChecker** | Key-Validierung via Anthropic API, Usage-Header-Auswertung (Plan, 7d/5h Usage) |
|
||||
| **ServerSettingsService** | Server-Settings Verwaltung (In-Memory-Cache + DB), Cleanup obsoleter Settings |
|
||||
|
||||
---
|
||||
|
||||
@@ -159,12 +163,13 @@ User-Input → POST /api/chat (SSE)
|
||||
→ History aus DB laden (letzte N Chains)
|
||||
→ SystemPromptBuilder: 11 Blöcke zusammensetzen (+ Plan-Modus/Preparer-Blöcke)
|
||||
→ Tool-Definitionen vom ToolService holen (im Plan-Modus: nur Read-only)
|
||||
→ API-Key auflösen: GetAgentApiKeyRecord(userId, agentId) – Anthropic ohne Key → Fehler, keyless Provider → OK
|
||||
→ Preparer-Phase (optional, wenn PreparerAgentId gesetzt):
|
||||
→ RunPreparer() → RunAgentChat(agentType: "preparer")
|
||||
→ RunPreparer() → Provider-Weiche: Anthropic → RunAgentChat(), OpenAI → ChatNonStreaming()
|
||||
→ Antwort ohne [QUESTION] → automatisch weiterleiten (Default = Forward)
|
||||
→ [QUESTION] → Rückfrage an User, Flow stoppt
|
||||
→ AnthropicService.StreamChat()
|
||||
→ Claude API Call (SSE)
|
||||
→ AnthropicService.StreamChat() / OpenAiService.StreamChat()
|
||||
→ API Call (SSE)
|
||||
→ Token-für-Token an Client streamen
|
||||
→ Bei tool_use → ToolService.Execute() → Ergebnis zurück → neuer API Call
|
||||
→ Bei ask_user_choice → SSE user_choice Event → Flow stoppt (awaiting_user_choice)
|
||||
@@ -243,7 +248,7 @@ User-Input → POST /api/chat (SSE)
|
||||
|
||||
| Hash-Route | Page-Datei | Beschreibung |
|
||||
|------------|-----------|--------------|
|
||||
| `#/` | `dashboard.js` | Session-Übersicht |
|
||||
| `#/` | `dashboard.js` | Session-Übersicht (sortiert nach letzter Chat-Nachricht) |
|
||||
| `#/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 |
|
||||
@@ -303,7 +308,7 @@ Eine Session kann bis zu **vier Agents** haben: Worker (Pflicht), Preparer (opti
|
||||
|
||||
**Preparer:** Default = Forward (jede Antwort wird automatisch weitergeleitet, `[QUESTION]` stoppt). Bekommt eigene History mit `includeTag: "preparer"`. Aufbereiteter Prompt wird als `[Vorbereitet von AgentName]:` User-Message gespeichert.
|
||||
|
||||
**Backend:** `ChatService` baut `PreparerContext` + `ReviewContext` + `FinalizerContext`. `RunPreparer()` im ChatEndpoint (vor StreamChat). `RunReview()` + `RunFinalizer()` in AnthropicService. Alle nutzen `RunAgentChat()` (mit `Tag`-Markierung, Sub-Agent-Messages aus API-History gefiltert).
|
||||
**Backend:** `ChatService` baut `SubAgentContext` für Preparer, Review und Finalizer. `RunPreparer()` im ChatEndpoint (vor StreamChat). `RunReview()` + `RunFinalizer()` in AnthropicService. Alle nutzen Provider-Weiche: Anthropic → `RunAgentChat()`, OpenAI → `ChatNonStreaming()` (mit `Tag`-Markierung, Sub-Agent-Messages aus API-History gefiltert).
|
||||
|
||||
**SSE-Events:**
|
||||
- Preparer: `preparer_start`, `preparer_text`, `preparer_tool_use`, `preparer_done`
|
||||
|
||||
Reference in new issue
Block a user