Commit Graph
100 Commits
Author SHA1 Message Date
MelekiandClaude Opus 4.6 1101bb83a0 fix: CLI-Pfad-Suche für Windows-Dienst verbessern + CLAUDE_CLI_PATH
- CLAUDE_CLI_PATH Umgebungsvariable als höchste Priorität bei CLI-Suche
- CreateCliStartInfo() Helper dedupliziert ProcessStartInfo-Erstellung
- .cmd-Wrapper-Logik entfernt (nicht benötigt)
- PATH-Suche priorisiert .exe für Windows

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-24 17:33:16 +01:00
MelekiandClaude Opus 4.6 9391b5a6fa fix: Verwaiste tool_result-Blöcke aus History entfernen (API 400)
Wenn eine ältere ask_user_choice-Chain als Text-only geladen wird,
geht der tool_use verloren, aber das tool_result in der nächsten Chain
bleibt – Anthropic API antwortet mit 400 "unexpected tool_use_id".
Neue FixOrphanedToolResults()-Funktion entfernt diese verwaisten Blöcke.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-24 16:52:31 +01:00
MelekiandClaude Opus 4.6 55477742a9 fix: CLIXML-Fehler bei Remote-Tool-Ausführung auf Windows beheben
Statt powershell.exe als Kindprozess mit 2>&1 zu starten (was CLIXML-Parsing-Fehler
bei rohem stderr verursacht), wird System.Diagnostics.Process direkt verwendet.
Zusätzlich werden harmlose CLIXML-Progress-Meldungen aus stderr herausgefiltert.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-22 22:36:26 +01:00
MelekiandClaude Opus 4.6 f03fbd298e feat: User-Berechtigungen für Agent-Erstellung und CLI-Nutzung
- Neue Felder CanCreateAgents und CanUseCli im UserRecord (Default: true)
- DB-Migration mit Abwärtskompatibilität (bestehende User behalten alle Rechte)
- Admin-UI: Checkboxen für beide Berechtigungen pro User
- AgentEndpoint: Prüfung auf CanCreateAgents beim Erstellen
- ChatEndpoint: CLI-Fallback nur wenn CanUseCli erlaubt
- Frontend: Neuer-Agent-Button und Agent-Page bei fehlender Berechtigung gesperrt
- Chat: Proaktive Warnung wenn kein API-Key und keine CLI-Berechtigung
- Bug Fix: is_public fehlte im Agent-INSERT (Public Agents erst nach erneutem Speichern sichtbar)

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-22 18:47:56 +01:00
MelekiandClaude Opus 4.6 500c00f948 feat: Unity MCP-Server Integration pro Session
Sessions können jetzt einen Unity MCP-Server (URL + Token) konfigurieren.
Die CLI erhält automatisch die MCP-Config mit korrektem Transport-Typ
(URL-basierte Erkennung: /sse → SSE, sonst HTTP für streamableHttp).

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-22 18:34:47 +01:00
MelekiandClaude Opus 4.6 9c507e4716 fix: TodoWrite-Tool über CLI korrekt als Todo-Liste rendern
TodoWrite → todo_write Mapping in Backend und Frontend ergänzt.
Todo-Liste wird jetzt aus dem Input-Array gebaut statt aus dem
Result, da die CLI nur einen generischen Erfolgstext zurückgibt.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-20 07:07:12 +01:00
MelekiandClaude Opus 4.6 2494ca89b8 fix: Tool-Box mit sichtbarem Diff nicht mehr halbtransparent
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-19 10:33:46 +01:00
Meleki 18d327c731 docs: Dokumentation an aktuellen Code-Stand anpassen
- agents-Tabelle: use_auto_context, use_github_search, use_serper_search ergänzt
- api_keys-Tabelle: is_public, refresh_token, access_token_expires_at, oauth_provider ergänzt
- scanned_keys-Tabelle: source, type Spalten ergänzt
- scanner_logs-Tabelle: nicht-existierende details-Spalte entfernt
- models_cache.json: OpenAI als vierten Provider ergänzt
- Internal-Endpunkt: POST /api/chat/choice-respond dokumentiert
2026-03-19 10:12:32 +01:00
MelekiandClaude Opus 4.6 486a1be6b5 docs: Dokumentation an aktuellen Code-Stand anpassen
Neue Features dokumentiert: Claude CLI Integration, DB Explorer, MCP-Server (Internal API),
Key-Scanner-System (KeyPatterns, KeyCheckDispatcher, GitHubEventScannerService),
Multi-Provider Key-Checker (OpenAI, Google, Stripe), AnthropicService partial-class Aufteilung,
2 neue Tools (github_code_search, serper_web_search → 19 Tools), OpenAI als Provider,
typing-phrases.js, AppPaths, payload-preview Endpoint.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-19 10:03:30 +01:00
MelekiandClaude Opus 4.6 d1c8aa62f2 fix: Redundantes CLI-Tool-Mapping entfernt + alle Tool-Anzeigenamen ergänzt
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-19 08:58:41 +01:00
MelekiandClaude Opus 4.6 dd7cf0ec93 feat: chatUsageBadge-Setting + Dashboard-Menü als Dropdown
- Neues Setting chatUsageBadge (default: false) blendet Usage-Badge im Chat ein/aus
- Dashboard-Links durch 3-Dot-Header-Menü ersetzt (einheitlich mit Chat)
- Admin-Items über admin-only Attribut gesteuert, dashboard-links CSS entfernt

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-19 08:35:05 +01:00
MelekiandClaude Opus 4.6 3e19da4d48 refactor: Backend-Deduplizierung – Parameter-Objekte, Shared Helpers, KeyCheckDispatcher
- ToolDefinitionOptions + ToolExecutionContext ersetzen lange Parameterlisten in ToolService
- AppendToLastMessage-Helper in ChatService eliminiert 5x duplizierte Logik
- OpenAiService: ResolveProviderConfig + BuildApiMessages + ConvertToOpenAiTools statt doppeltem Code
- Tool-Definitionen aus einer Quelle (Anthropic→OpenAI Konvertierung statt hardcodierter Liste)
- KeyCheckDispatcher zentralisiert Key-Check-Dispatch (ApiKeysEndpoint, KeyScanner, GitHubEventScanner)

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-19 08:01:49 +01:00
MelekiandClaude Opus 4.6 f3069cedf7 fix: CLI-Zugriff auf Temp-Bilder auch ohne Workspace
Read-Tool wird jetzt immer erlaubt (nicht nur mit Workspace), und
/tmp/gott-cli-images/ wird als --add-dir hinzugefügt, damit gesendete
Bilder von der CLI gelesen werden können.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-18 16:53:59 +01:00
MelekiandClaude Opus 4.6 1c622abb37 refactor: AnthropicService partial-class Aufteilung + ToolPayloadOptions + Non-Streaming Deduplizierung
- AnthropicService.cs (337 Zeilen): Felder, Konstruktor, Setters, Utilities
- AnthropicService.Streaming.cs (750 Zeilen): StreamChat, ProcessStream, SSE-Parsing
- AnthropicService.Agents.cs (680 Zeilen): RunAgentChat, ChatNonStreaming, Review/Preparer/Finalizer
- AnthropicService.Cli.cs (530 Zeilen): StreamChatViaCli, MCP-Config, CLI-Helpers
- AddToolsToPayload: 12 Bool-Parameter → ToolPayloadOptions Record
- RunAgentChat + ChatNonStreaming → gemeinsame RunNonStreamingToolLoop-Methode

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-18 14:54:39 +01:00
MelekiandClaude Opus 4.6 92ecaf9dac fix: ask_user_choice Short-Poll, Freitext-Option, Stop-Kontext-Fix
- Long-Poll durch Short-Poll ersetzt (MCP-Server pollt jede Sekunde statt einer blockierenden HTTP-Anfrage)
- Expliziter Lambda-Rückgabetyp Task<IResult> für ASP.NET Minimal API Endpoints (behebt 200 empty body Bug)
- Freitext-Option bei Choice-Buttons ("Eigene Antwort…") für freie User-Eingabe
- Stop während ask_user_choice markiert Chain als awaiting_user_choice statt stopped (Kontext bleibt erhalten)
- ask_user_choice System-Prompt-Instruktion breiter formuliert (Quiz, Multiple-Choice etc.)
- Text wird jetzt immer in DB gespeichert, auch bei ask_user_choice
- Key-Check Model auf claude-haiku-4-5 geändert

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-18 11:32:25 +01:00
MelekiandClaude Opus 4.6 3e0a69e7a4 feat: MCP-Tools ask_user_choice + memory_read/write/list, Text-Marker entfernt
MCP-Server erweitert um ask_user_choice (Long-Poll), memory_read, memory_write
und memory_list Tools. MCP-Config wird jetzt immer generiert (nicht nur bei
Remote-Verbindung). InternalEndpoint um PendingChoices + choice-respond Endpoint
ergänzt. Frontend differenziert CLI-Modus (choice-respond API) vs. API-Modus.
Gesamter :::ASK_USER_CHOICE::: Text-Marker-Mechanismus aus ClaudeCliService,
AnthropicService, markdown.js und stream-ui.js entfernt.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-18 09:54:30 +01:00
MelekiandClaude Opus 4.6 3b068a7866 feat: MCP-Server für remote_execute + Inline-Choice-UI
- Python MCP-Server (stdio, JSON-RPC 2.0) für remote_execute via Claude CLI
- Interner API-Endpoint /api/internal/remote-execute mit Token-Auth
- MCP-Config wird automatisch generiert wenn Remote-Verbindung vorhanden
- Auth-Middleware: /api/internal/ von Auth ausgenommen
- Frontend: :::ASK_USER_CHOICE::: Blöcke als interaktive Buttons rendern
- Streaming: Unvollständige Choice-Blöcke werden während des Streams versteckt
- tool-ui.js: MCP-Tool-Namen generisch normalisieren (mcp__server__tool → tool)

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-18 09:00:50 +01:00
MelekiandClaude Opus 4.6 ee0b817f25 fix: CLI-Stream überlebt Page-Reload (Token-Trennung workCt/sseCt)
workCt steuert den CLI-Prozess (nur Stop-Button), sseCt die SSE-Writes
(Client-Disconnect). Page-Reload cancelt nur sseCt → CLI läuft weiter.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-18 07:01:00 +01:00
MelekiandClaude Opus 4.6 7d55e8e818 fix: Tool-Results im Chat korrekt anzeigen
Result-Div wird nicht mehr leer erstellt bei tool_use – erst wenn
tatsächlich ein Result vorliegt. Header wird nachträglich clickable
gemacht wenn das Result später eintrifft.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-18 06:54:26 +01:00
MelekiandClaude Opus 4.6 6d16d00290 feat: CLI-Streaming – korrekte Tool-Darstellung, Reihenfolge und Error-Handling
- Tool-Namen/Inputs von CLI-Konvention auf gott-Konvention mappen (Edit→edit_file, file_path→path etc.)
- Text vor Tool-Use in DB flushen für korrekte Reihenfolge (statt alles am Ende als Blob)
- lineBuffer in ClaudeCliService vor Tool-Start und bei Text-Block-Ende flushen
- ToolResult-Events parsen und in DB speichern (CLI sendet diese als type:"user" Messages)
- Errors in DB speichern und als SSE-Event senden
- Bild-Attachments als Temp-Dateien für CLI bereitstellen (Read-Tool kann sie lesen)
- Frontend: tool_result Handler, Tool-Name-Normalisierung, appendToolResult()

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-18 06:48:10 +01:00
MelekiandClaude Opus 4.6 3e372b5a6e chore: .claude/ in .gitignore aufgenommen
Verhindert dass lokale Claude CLI Credentials versehentlich ins Repo gelangen.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-17 22:42:23 +01:00
MelekiandClaude Opus 4.6 4af9430466 feat: Claude CLI Pfad mit ask_user_choice, Plan-Modus und Tool-Konfiguration
- ClaudeCliService: Marker-basierte ask_user_choice Erkennung im Stream-Parser
- AnthropicService: StreamChatViaCli mit allowUserChoice, planMode, webSearch
- BuildHistoryContext erweitert für tool_use/tool_result (Choice-Antworten)
- Tool-Use Records werden in DB persistiert (Poll-Kompatibilität)
- CLI Tools konfigurierbar: Workspace/Plan-Modus/WebSearch/kein Workspace
- OAuth DB-Felder für zukünftige Token-Verwaltung

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-17 22:25:39 +01:00
Meleki 8150b58110 Block message send during active stream
Prevent sending messages via Enter key while a stream/response is active.
sendMessage() now returns early if isStreaming is true.
2026-03-17 10:20:52 +01:00
Meleki bfd1767471 chore: Temp/ aus .gitignore entfernt 2026-03-16 21:45:26 +01:00
Meleki e31d6cfb4d MaxHistory Default von 120 auf 220 erhöht 2026-03-15 11:20:33 +01:00
Meleki 0e55e45497 UI: Remote-Modal und sp-loading Styling verbessern
- sp-loading: Flexbox-Layout statt text-align center
- Remote-Modal: Powershell-Befehl immer sichtbar (nicht nur bei leerer Liste)
- remote-card-content: Padding ergänzt
2026-03-15 11:08:51 +01:00
Meleki 24c0c79a64 cleanup: ungenutzte CSS-Klassen entfernt, sp-loading restyled
- .font-sm und .semi-transparent Utility-Klassen entfernt (nirgends verwendet)
- .sp-loading: code-Block mit eigenem Styling statt opacity
- modals.js: font-sm/semi-transparent Klassen aus Remote-Modal entfernt
2026-03-15 10:57:20 +01:00
Meleki ab64a843fc refactor: AppPaths.WwwRoot – zentrale wwwroot-Pfadauflösung
- Neue statische Klasse AppPaths mit WwwRoot-Property
- Dev-Modus: ../../../wwwroot (Quell-Verzeichnis)
- Publish-Modus: Fallback auf BaseDirectory/wwwroot
- Program.cs + RemoteEndpoint.cs nutzen AppPaths statt eigener Logik
2026-03-15 10:57:14 +01:00
Meleki 49ef6bedc6 feat: Payload-Preview im Chat-Menü + Reminder von hinten gezählt
- Neuer Endpoint GET /api/sessions/{id}/payload-preview
  Gibt den exakten Anthropic-API-Payload als JSON zurück (read-only)
- Chat-Menü: 'Payload anzeigen' öffnet Modal mit formatiertem JSON
- Reminder-Logik umgebaut: halbes Intervall (15) vor Ende,
  dann volle Intervalle (30) rückwärts statt von vorne gezählt
- CSS: Payload-Modal Styling, kleine Variable-Fixes
2026-03-15 10:46:51 +01:00
Meleki 229e6d9e53 DB Explorer: Standardmäßig zur letzten Seite springen
- Backend: page=-1 wird als 'letzte Seite' interpretiert (COUNT + Berechnung)
- Frontend: Tabellen-Klick ruft page=-1 auf statt page=1
- Aufgelöster page-Wert aus API-Response für korrekte Anzeige (34/34 statt -1/34)
2026-03-15 10:20:59 +01:00
Meleki fea605dfe5 Routine-Poll-Logs nicht in DB persistieren
- AddLog() neuer Parameter 'persist' (default true)
- 4 Routine-Poll-Logs nur noch im In-Memory-Log:
  - '0 PushEvents empfangen'
  - 'X Events, 0 neue PushEvents'
  - 'X Events, X neue PushEvents → X scannen'
  - 'X Diffs gescannt, 0 neue Keys'
- 'X Diffs gescannt, X neue Keys' wird bei Keys > 0 weiterhin persistiert
2026-03-15 10:13:14 +01:00
Meleki 30662caab7 chore: erledigte Pläne ins Repo aufnehmen (Plans/ aus .gitignore entfernt) 2026-03-15 09:55:44 +01:00
Meleki 8e94975e61 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
2026-03-15 09:20:46 +01:00
Meleki a6a0223f44 Cleanup: Veraltetes Setting 'ScanIntervalHours' beim Start aus DB entfernen 2026-03-14 23:23:13 +01:00
Meleki 3d0049a4f1 Key-Scanner: Intervall durch tägliche Scan-Uhrzeit ersetzen
- ScanIntervalHours → ScanDailyHour (0-23 = Stunde, -1 = deaktiviert)
- Einmal täglich zur konfigurierten Uhrzeit statt alle X Stunden
- Manueller Trigger funktioniert weiterhin unabhängig
- WaitForTriggerOnly entfernt, vereinfachte Loop-Logik
2026-03-14 23:21:06 +01:00
Meleki 3160a3edb8 Dashboard: Sessions nach letzter Chat-Nachricht sortieren statt updated_at
- LEFT JOIN auf messages.created_at (nur type='text')
- COALESCE(last_message_at, updated_at) damit Sessions ohne
  Nachrichten nach ihrem updated_at einsortiert werden
2026-03-14 23:14:18 +01:00
Meleki 02f5fe2faf Provider-Abstraktion: Agents unterstützen jetzt OpenAI + Anthropic
Backend:
- ChatEndpoint: Globaler OpenAI-Fallback entfernt, Key-Check pro Provider
- TelegramService/CronjobService: Provider-Weiche statt hardcoded Anthropic
- AnthropicService: Preparer/Review/Finalizer sind Provider-aware
- OpenAiService: Neue ChatNonStreaming()-Methode für agentic loop
- ToolService: send_to_session lädt Key des Ziel-Agents
- SubAgentContext: Provider-Feld hinzugefügt
- ChatService: BuildSubAgentContext setzt Provider

Frontend:
- Key-Switch-Modal: 'Kein Key'-Option zum Entfernen der Zuweisung
- ApiKeysEndpoint: keyId='none' löscht Key-Zuweisung
2026-03-14 22:59:33 +01:00
Meleki 1effc6d00f feat: API Key pro Agent statt pro User
- Neue Tabelle agent_api_keys (user_id, agent_id, key_id)
- Migration: bestehende selected_api_key_id auf alle Agents verteilt
- Backend: GetAgentApiKeyRecord(userId, agentId) in Chat, Telegram, Cronjobs
- Endpoints: select/selected mit ?agentId Query-Parameter
- Frontend: currentAgentId aus Session, alle Key-Calls agent-aware
- DeleteApiKey bereinigt agent_api_keys statt users.selected_api_key_id
2026-03-14 21:41:27 +01:00
Meleki b04b1a2cf9 feat: Plan-Modus Hint an User-Nachrichten anhängen
- <hint> wird an jede User-Nachricht angehängt wenn Plan-Modus aktiv
- Erinnert Agent an Einschränkungen: keine Dateiänderungen, keine Shell-Befehle (außer read-only), keine Commits
- Analog zum bestehenden cat -n Hint
2026-03-14 21:32:37 +01:00
Meleki 808c539e86 feat: GitHub Issues & PR Comments Scanner
- Neue ScanGitHubIssues()-Methode durchsucht Issues, PRs und Kommentare
- Quick-Mode: Search API (nur Body)
- Full-Mode: Search API (Body + Comments) + Kommentare der Treffer abrufen
- Rate-Limiting: 2.5s (Search), 1s (Comments), 60s Pause bei 403
- Max 100 Issues mit Kommentaren im Full-Mode
- Integration in RunScan() zwischen GitHub Code Search und Serper
2026-03-14 18:48:22 +01:00
Meleki 79d7a88c5c feat: HuggingFace Hub Scanner - Spaces und Models nach API-Keys durchsuchen
- Neue ScanHuggingFace()-Methode: durchsucht Spaces und Models
- 6 Suchbegriffe (anthropic, claude, openai, api-key, chatgpt, gpt4)
- Rekursive Dateiliste, filtert nach relevanten Extensions
- Limits: 50 Dateien/Repo, 500KB/Datei, 300ms Delay
- Läuft in Web- und Full-Mode (nicht Quick)
- Optionales HuggingFaceToken-Setting für höhere Rate-Limits
- CSS: font-size Bereinigung in chat.css
2026-03-14 18:02:47 +01:00
Meleki e1a9117b4a fix: adopted_api_key_id konsistent als string key_id statt numerischer rowid
- CreateApiKey() gibt jetzt string key_id zurück statt long rowid
- SetScannedKeyAdopted() erwartet string statt long
- DeleteApiKey() direkter Vergleich statt Subquery
- DB-Explorer: PageSize Default auf 1000 erhöht
2026-03-14 17:30:59 +01:00
Meleki ce50633e33 refactor: Inline-Styles durch CSS-Klassen ersetzt
- 40+ Utility-Klassen in form.css (clickable, text-danger, flex-row, loading-state, etc.)
- share-menu position/z-index in chat.css statt inline
- index.html: 0 Inline-Styles (hidden-Attribut, CSS-Klassen)
- 12 JS-Dateien bereinigt: style.cssText/style.* durch classList ersetzt
- Bugfix: var(--danger) → var(--dangerous) (nicht existierende Variable)
- display:none Toggles → hidden-Attribut wo passend
- Hardcoded font-sizes in chat.css → var(--font-size)

15 Dateien, nur Frontend (CSS/JS/HTML), kein Backend
2026-03-14 17:14:30 +01:00
Meleki e368abced0 Static Files direkt aus Quell-wwwroot laden, Publish-Kopie deaktiviert
- Program.cs: PhysicalFileProvider auf ../../../wwwroot (Fallback auf publish/wwwroot)
- Program.cs: No-Cache-Middleware für HTML/JS/CSS
- gott.csproj: PublishStaticWebAssets=false, CopyToPublishDirectory=Never für wwwroot
- CSS: DB-Explorer-Styling auf CSS-Variablen umgestellt
2026-03-14 16:44:44 +01:00
Meleki e61f3ef082 feat: DB-Explorer, Scanner-KeyTypes-Setting, Stripe-Checker, Anthropic-Auth-Fix, Progress-Tracking
Backend:
- Neuer Database Explorer Endpoint (GET /api/admin/db/tables, GET /api/admin/db/tables/{name})
- DatabaseService: public GetConnection() Methode
- StripeKeyChecker: 2-Schritt-Check (/v1/balance + /v1/account), erkennt Live/Test, Balance, Account-Details
- AnthropicKeyChecker: Auth-Header fix (x-api-key für API-Keys, Bearer für OAuth), 400-Handler für credit balance
- KeyPatterns: Stripe einkommentiert, Krea AI Pattern, AllTypes-Array, MinLength 4
- ServerSettingsService: string_array Typ (Get/SetStringArray), ScannerKeyTypes Setting mit Checkbox-Optionen
- ServerSettingsEndpoint: string_array Speichern (Array/CSV)
- KeyScannerService: GetActiveSearchPatterns() filtert nach ScannerKeyTypes, Progress-Tracking
- GitHubEventScannerService: CheckNewKeys nur für aktuelle Poll-Keys (statt alle unchecked), klarere Log-Meldung

Frontend:
- Database Explorer Page: Tabellenliste mit Klick -> Tabelleninhalt, Pagination, sticky Header
- Server Settings: Checkbox-Gruppe für string_array (Alle/Keine Buttons)
- API Keys: adoptedApiKeyId Fix (leerer String == null)
- Dashboard: DB-Explorer Link für Admins
- Scan-Progress: Live-Fortschritt mit Phase/Detail/Counter
2026-03-14 16:19:13 +01:00
Meleki 3cd35ebbfa feat: Stripe-Key-Checker, Krea AI Pattern, Scan-Progress-Tracking
- StripeKeyChecker: 2-Schritt-Check (/v1/balance + /v1/account), Live/Test-Erkennung, Balance, Account-Details
- KeyPatterns: Stripe-Patterns einkommentiert (sk_live_, sk_test_), Krea AI Pattern (UUID:Token), Mindest-Suchlänge 4
- KeyScannerService: Stripe-Check integriert, Auto-Check nach Scan entfernt (manuell separat), Progress-Tracking (Phase, Detail, Current/Total, KeysFound)
- ApiKeysEndpoint: Stripe in HandleCheck/HandleCheckAll/HandleAdopt, Progress im Status-Endpoint
- Frontend: Live-Fortschrittsanzeige mit Spinner, Phase, Query, Counter, Polling 1.5s, Krea AI in typeNames/typeIcons
2026-03-14 14:34:02 +01:00
Meleki 122000487c Refactor: Server-Settings von appsettings.json in DB-Tabelle (server_settings)
- Neuer ServerSettingsService: zentrale Settings in SQLite mit In-Memory-Cache
- Auto-Migration: bestehende appsettings.Production.json wird einmalig in DB übernommen
- Alle Services umgestellt: IConfiguration → ServerSettingsService (dynamisch, kein Neustart)
- Port bleibt als einziges Setting in appsettings.Production.json (erfordert Neustart)
- ServerSettingsEndpoint: liest/schreibt DB statt JSON-Datei, Port als Sonder-Setting
- IConfiguration komplett entfernt aus allen Services (ChatService, ToolService, AnthropicService,
  OpenAiService, KreaService, TelegramService, KeyScannerService, GitHubEventScannerService)
- AuthMiddleware: KreaApiKey dynamisch aus DB
- appsettings.json bereinigt: nur noch Port und Logging
- Dokumentation aktualisiert (ARCHITECTURE.md, ARCHITECTURE_QUICK.md, README.md)
2026-03-14 13:06:44 +01:00
Meleki 542a031172 feat: OpenAI Provider, Key-Checker Quota-Erkennung, persistierte Scanner-Logs
- OpenAI als vollwertiger Chat-Provider (Modell-Auswahl, Key-Routing, StreamChat)
- Hardcoded OpenAI-Modelle im Cache (gpt-5.x, gpt-4.1, o3, o4-mini etc.)
- /api/models/openai Endpoint, OpenAI-Optgroup im Agent-Dropdown
- Key-Routing: OpenAI-Key aus api_keys-Tabelle, Fallback via GetFirstActiveKeyByProvider
- OpenAI-Checker: 2-Schritt-Check (Models + chat/completions mit max_tokens=1)
- Google-Checker: 2-Schritt-Check (Models + generateContent mit maxOutputTokens=1)
- 429 insufficient_quota und billing_not_active korrekt als quota_exceeded erkannt
- Provider-Erkennung beim Adopt via KeyPatterns.DetectType() statt hardcoded anthropic
- HandleCheck/HandleCheckAll unterstützt jetzt Anthropic, OpenAI und Google
- Neue scanner_logs-Tabelle mit details-Spalte (JSON) für strukturierte Auswertung
- GitHubEventScannerService: AddLog persistiert in DB, detaillierte Key-Fund-Logs
- KeyScannerService: AddLog-Methode mit DB-Persistierung, detaillierte Logs
- Frontend: Ungeprüfte-prüfen-Button (sequenziell, stoppt bei valid)
- Frontend: Provider-Indicator im Key-Switch-Modal (Anthropic/OpenAI/Google)
- Frontend: Check-Button für alle Provider (nicht nur Anthropic)
2026-03-14 11:19:33 +01:00
Meleki c8859a89d0 Multi-Provider Key Scanner + Checker (OpenAI, Google, 15 Key-Typen)
- KeyPatterns.cs: Zentrale Pattern-Klasse für 15 Key-Typen
  (Anthropic, OpenAI, Google, AWS, GitHub, GitLab, HuggingFace, Stripe, SendGrid, Slack)
- OpenAiKeyChecker.cs: Prüft sk-proj/sk-svcacct/sk- Keys via /v1/models
  (Org, Modelle, RPM/TPM, Tier-Erkennung Free bis 5+)
- GoogleKeyChecker.cs: Prüft AIza-Keys via Gemini /v1/models
  (Gemini-Modelle, Maps-Key-Erkennung)
- KeyScannerService + GitHubEventScannerService: Dispatch nach Key-Typ
- ApiKeysEndpoint: GET /scanned/summary + ?type= Filter
- Frontend: 2-stufige UI (Typ-Übersicht → Keys pro Typ)
2026-03-13 20:43:20 +01:00
Meleki eb8844a4f1 feat: GitHub Event Scanner - Echtzeit-Monitoring öffentlicher Pushes
- Neuer GitHubEventScannerService (BackgroundService)
  - Pollt /events API alle 30s, filtert PushEvents
  - Lädt Head-Commit-Diffs, scannt nach Key-Patterns
  - Ringbuffer (10k IDs) für Event-Deduplication
  - Gefundene Keys werden sofort geprüft (AnthropicKeyChecker)
  - Rate-Limit-Handling (403/429 → Pause bis Reset)
- Feature-Toggle in Server-Einstellungen (GitHubEventScanner)
- Status-Endpoint + Log-Endpoint (/api/admin/api-keys/event-scanner/*)
- Live-Status in API-Keys-Seite mit klappbarem Log
- Auto-Refresh alle 30s
- Plans/ in .gitignore
2026-03-13 18:38:32 +01:00
Meleki 7352438b11 feat: Scanned-Keys 'Alle prüfen' Button + EasyMDE Refresh nach More-Toggle
- POST /api/admin/api-keys/scanned/recheck-all: prüft alle nicht-adoptierten Scanned-Keys sequenziell
- Button mit Loading-State, Ergebnis-Toast und Auto-Reload
- EasyMDE/CodeMirror refresh() nach initMoreButton() Einblenden (behebt leeren Editor-Bug)
2026-03-13 15:58:31 +01:00
Meleki a13355d7e9 Remote: Server-seitiger Heartbeat mit Timeout für tote WebSocket-Verbindungen
- Server sendet alle 30s Ping an Client, Client antwortet mit Pong
- LastActivityAt wird bei jeder empfangenen Nachricht aktualisiert
- Nach 90s Inaktivität wird Verbindung als tot erkannt und aufgeräumt
- HeartbeatLoop läuft parallel zum ReceiveLoop
- remote.ps1: ping-Handler hinzugefügt
2026-03-13 15:44:35 +01:00
Meleki dd0bc263e0 Fix: Remote Command Tool - EncodedCommand statt -Command für korrekte Anführungszeichen-Behandlung 2026-03-13 15:39:31 +01:00
Meleki c5db6d0dbd fix: ScannedKeyRecord.AdoptedApiKeyId als string (UUID), verwaiste Referenzen bei Key-Löschung bereinigen 2026-03-13 13:00:05 +01:00
Meleki dde0fede7d User-spezifische API-Key-Auswahl, globales is_active entfernt
Backend:
- is_active komplett entfernt, durch is_public (Admin-Toggle) ersetzt
- Neues selected_api_key_id auf users-Tabelle
- AnthropicService: globaler _token entfernt, apiToken pro Request
- Token-Durchreichung: StreamChat → ProcessStream → RunAgentChat →
  RunPreparer/RunReview/RunFinalizer, ExecuteTool, send_to_session
- ChatEndpoint: User-Key aus DB laden, an StreamChat übergeben
- TelegramService: Key per bot.UserId auflösen
- CronjobService: Key per job.UserId auflösen
- Neue Endpoints: GET /api/api-keys/available, PUT /api/api-keys/select/{keyId},
  GET /api/api-keys/selected, PUT /api/admin/api-keys/{keyId}/public,
  POST /api/admin/api-keys/check-all
- Program.cs: AnthropicService ohne Token-Parameter

Frontend:
- API-Keys-Page: Public-Toggle (Globe/Lock) statt Activate/Deactivate
- Alle prüfen Button für Batch-Key-Check
- Chat: Key-Auswahl für alle User (nicht nur Admin)
- Dummy-Badge wenn kein Key ausgewählt
- Fallback-Badge bei Key ohne Usage-Daten
- Key-Switch-Modal: apiGetAvailableKeys + apiSelectApiKey
2026-03-13 12:27:03 +01:00
Meleki cc46cf2bbc feat: HTTP/SOCKS Proxy-Support für alle HttpClient-Requests
- Program.cs: ProxyUrl aus Config lesen, WebProxy auf allen HttpClients via ConfigureHttpClientDefaults
- ServerSettingsEndpoint: ProxyUrl Setting im Frontend (Text-Feld)
- appsettings.json: ProxyUrl Default (leer = kein Proxy)
- Unterstützt HTTP und SOCKS5 Proxies (z.B. socks5://127.0.0.1:1080)
- Betrifft alle ausgehenden Requests: Anthropic, OpenAI, GitHub, Serper, Telegram, Krea
2026-03-13 10:09:45 +01:00
Meleki 192f41e91e feat: Serper Web Search als Agent-Tool
- ToolService: serper_web_search Tool-Definition + ExecuteSerperWebSearch()
  Google-Suche via Serper.dev API mit Titel, Link, Snippet
  Knowledge Graph + Answer Box + organische Ergebnisse
- AgentRecord: UseSerperSearch Property (Default: false)
- DB-Migration: use_serper_search Spalte
- AnthropicService + ChatService: useSerperSearch Parameter durchreichen
- ChatEndpoint + AgentEndpoint: useSerperSearch in API
- Frontend: Checkbox, Badge (Serper Search), laden/speichern
- Aktivierung: Agent-Checkbox + SerperApiKey in Server-Einstellungen
2026-03-13 09:41:56 +01:00
Meleki 558ded1ed5 feat: 3 Scan-Modi (Quick/Web/Full) für Key Scanner
- Quick-Scan: nur GitHub mit Dotenv, Text, Markdown + .env
- Web-Scan: nur Serper.dev (Google Dorks)
- Full-Scan: GitHub + Serper komplett (wie bisher)
- Backend: TriggerScan(mode), ScanGitHubQuick(), mode-basierte Quellsteuerung
- Endpoint: ?mode=quick|web|full Query-Parameter
- Frontend: 3 Buttons (⚡ Quick, 🌐 Web, 🔍 Full) mit gemeinsamer Scan-Logik
- Status-Anzeige zeigt Scan-Modus im Ergebnis
2026-03-13 09:33:18 +01:00
Meleki ed8e5af428 fix(web-search): Kommentar für 2026er Auto-Injection + Code-Execution Beta-Header
- web_search_20260209 injected code_execution automatisch – nicht manuell hinzufügen
- Beta-Header code-execution-2025-08-25 hinzugefügt (für zukünftige Kompatibilität)
2026-03-13 09:17:42 +01:00
Meleki 89122e2170 feat: GitHub Code Search als Agent-Tool + Dashboard-Badges
- UseGitHubSearch Property im AgentRecord (Default: false)
- DB-Migration: use_github_search Spalte in agents
- Checkbox im Agent-Formular (Standard: unchecked)
- Tool nur aktiv wenn Agent-Checkbox UND GitHubToken konfiguriert
- includeGitHubSearch Parameter durch StreamChat/AddToolsToPayload
- Dashboard-Badges: 🔮 Auto-Kontext + 🐙 GitHub Search
2026-03-13 08:26:15 +01:00
Meleki bca5e5145a Add github_code_search tool + scanned key type field
- New tool: github_code_search (GitHub Code Search API with text-match fragments)
- Tool available when GitHubToken is configured in server settings
- Registered in AnthropicService + ChatService tool pipelines
- ToolService: SetHttpClientFactory() pattern for lazy DI resolution
- ScannedKeyRecord: type field (anthropic_oauth, anthropic_api, anthropic_unknown, unknown)
- DetectKeyType() based on key prefix
- DB migration: type column with default 'anthropic_oauth'
- Frontend: type label in scanned keys list
2026-03-13 08:12:55 +01:00
Meleki 04c7c2e13d Add SerperApiKey to server settings UI 2026-03-13 06:46:11 +01:00
Meleki 22d966b830 feat: Serper.dev Google-Dork-Integration für Key-Scanner
- ScanSerper() durchsucht Google via Serper.dev nach geleakten API-Keys
- Exakte Phrase-Suche pro KeyPattern, bis zu 100 Ergebnisse pro Query
- Keys aus Snippets und Titles via Regex extrahiert
- Source-Feld (github/serper/gist/pastebin) in ScannedKeyRecord + DB-Migration
- RunScan() kombiniert GitHub + Serper mit Deduplizierung
- Service startet auch wenn nur SerperApiKey konfiguriert ist
- Frontend: Source-Icons und verkürzte URLs für Nicht-GitHub-Quellen
- Config: SerperApiKey in appsettings.json
2026-03-13 06:26:43 +01:00
Meleki 2cf9e1e849 Fix: stopTypingIndicator() bei Stream-Ende in Polling-Recovery aufrufen
Typing-Indicator-Interval lief nach Stream-Ende weiter und
überschrieb 'Bereit' mit 'Agent denkt nach...' nach wenigen Sekunden.
2026-03-12 22:40:08 +01:00
Meleki 730c14aa23 docs: Dokumentation aktualisiert – API-Key-Scanner, passive Usage, Chat-Badge, Key-Check
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
2026-03-12 22:37:33 +01:00
Meleki 8b1794d11e style(chat): Usage-Badge Overlay und Key-Switch-Modal CSS-Anpassungen
- Overlay: full-width mit zentriertem Inhalt, semi-transparenter Hintergrund
- Check-Button Styling in Usage-Badge integriert
- Key-Switch-Rows: Hover-Effekt, Usage-Badge max-width
- Padding und Border-Farben harmonisiert
2026-03-12 22:30:17 +01:00
Meleki 3ec9ebba45 Chat: Usage-Badge-Overlay mit Key-Switch-Modal
- Usage-Badge oben zentriert im Chat (nur Admin)
- Zeigt Sitzung/Woche-Balken des aktiven API-Keys
- Blendet bei Scroll-Up aus, bei Scroll-Down ein
- Klick auf Badge öffnet Key-Switch-Modal (via _createModal)
- Ganze Row klickbar für Key-Wechsel
- Refresh-Button neben Badge für manuellen Key-Check
- Badge aktualisiert sich automatisch bei neuen Nachrichten (pollHistory)
- Cleanup in destroy()
2026-03-12 20:03:30 +01:00
Meleki d33c1c370c Chat: Typing-Indicator statt 'Streaming...' bei Page-Refresh während Stream 2026-03-12 19:32:28 +01:00
Meleki bdcfd1f8b3 API-Keys UI: Toggle+Check neben Badge, übernommene Keys ausblenden, Layout-Polish
- Toggle-Button (Aktivieren/Deaktivieren) links neben Usage-Badge
- Check-Button rechts neben Usage-Badge statt bei Actions
- '✅ Aktiv' aus Meta-Zeile entfernt (Toggle zeigt Status)
- 'Prüfe...' Text beim Check entfernt (Spinner im Button reicht)
- Übernommene Scanned-Keys komplett ausgeblendet statt halbtransparent
- isAdopted-Logik und Wrapper entfernt, Code entschachtelt
- admin-user-row: Border, Radius, Background hinzugefügt
- Aktive Keys visuell hervorgehoben (Primary-Border + Brightness)
- placeholder.css an gleichen Row-Style angeglichen
2026-03-12 19:19:35 +01:00
Meleki de388806cb API-Keys: Source-URL, einheitliches Status-Schema, passive Usage-Erfassung, Usage-Bars
- SourceUrl-Feld in api_keys: GitHub-URL bei adoptierten Scan-Keys gespeichert
- HandleAdopt: Name = user/repo (aus URL extrahiert), SourceUrl = vollständige URL
- Status-Schema vereinheitlicht: überall 'valid' statt 'ok'/'usage_limited'
- AnthropicKeyChecker.ExtractMetaFromHeaders(): passive Header-Auswertung
- AnthropicService: TryUpdateKeyMeta() nach jedem Chat-Request (fire-and-forget)
- DatabaseService: UpdateApiKeyMetaByToken() für passive Updates per Token
- Frontend: formatKeyStatus() zentrale Status-Labels für API-Keys + Scanned-Keys
- Frontend: createUsageBadge() zweizeiliger Balken (Sitzung/Woche) mit Farbstufen
- CSS: Usage-Badge mit Track/Fill, warn (>=70%) und danger (>=90%) Klassen
2026-03-12 18:33:37 +01:00
Meleki 608118a823 Key-Scanner: Auth-Header fix, 401-mit-Usage-Handling, breitere Suche, Live-Refresh
- AnthropicKeyChecker: Bearer-Auth + CLI-Header statt x-api-key (identisch mit AnthropicService)
- 401 mit Usage-Headern → 'usage_limited' statt 'invalid' (Key gültig, Limit erreicht)
- Haiku-Phase entfernt, Streaming-Logik entfernt → ein einfacher Request reicht
- KeyScannerService: SearchLanguages 1→13, PathExtensions 24 neue Pfad-Filter
- ApiKeysEndpoint: usage_limited als 'ok' ans Frontend
- Frontend: Adopt-Button auch bei quota_exceeded, Live-Refresh alle 3s während Scan
- CSS: Overflow-Ellipsis für lange URLs in Admin-Listen
2026-03-12 17:11:06 +01:00
Meleki 006ef223bf feat: GitHub Key Scanner mit automatischem Intervall und manueller UI
- KeyScannerService als BackgroundService (Timer + manueller Trigger)
- GitHub Code Search: sucht nach sk-ant-oat01-* Keys in Dotenv-Dateien
- AnthropicKeyChecker: shared Key-Check-Logik (ersetzt Duplikat in ApiKeysEndpoint)
- ScannedKeyRecord Model mit Soft-Delete und Adopt-Verknüpfung
- Scan-Endpoints: trigger, status, list, recheck, adopt, delete
- API-Keys-Page: Scanner-UI mit Status-Indikator und Scanned-Keys-Liste
- GitHub-URL pro gefundenem Key (html_url aus Search API)
- Server-Settings: GitHubToken + ScanIntervalHours konfigurierbar
- DB-Migration: scanned_keys Tabelle + api_keys Meta-Spalten (status, plan, usage)
- ApiKeyRecord erweitert um Status/Plan/Usage-Felder mit UpdateApiKeyMeta()
2026-03-12 15:35:22 +01:00
Meleki db1a7c7f64 Refactoring + Dokumentation: api.js komprimiert (745→267 Zeilen), SseHelper extrahiert, DatabaseService in Partial Classes aufgeteilt, unbenutztes CSS entfernt, ARCHITECTURE.md/ARCHITECTURE_QUICK.md/README.md aktualisiert (neue Features: Embedding, Remote, API-Keys, 16 Tools) 2026-03-12 13:29:19 +01:00
Meleki 8dc52c1337 feat: API-Key Health-Check für Anthropic-Keys
- POST /api/admin/api-keys/{keyId}/check Endpoint
- Sendet minimale Anfrage an Anthropic API, liest Rate-Limit-Headers
- Plan-Erkennung: Max (Overage > 0), Pro (kein Fallback-Header), Pro/Max (sonst), API Console
- Budget-Auslastung: 5h + 7d + Overage mit Status-Warnings
- Frontend: Heartbeat-Button zeigt Ergebnis inline unter dem Key-Eintrag
- apiCheckApiKey() API-Funktion
2026-03-12 12:40:23 +01:00
Meleki fa8deb15b6 feat: API-Keys-Verwaltung in DB statt appsettings
- Neue Tabelle api_keys (Provider, Name, ApiKey, IsActive)
- Admin-CRUD: GET/POST/PUT/DELETE /api/admin/api-keys
- Aktivieren/Deaktivieren pro Provider (nur einer aktiv)
- Live-Token-Update im AnthropicService ohne Neustart
- Migration: AnthropicToken aus appsettings.Production.json → DB
- AnthropicToken aus ServerSettings-Definitionen + appsettings entfernt
- Frontend: API-Keys-Seite mit Erstellen/Bearbeiten/Löschen/Toggle
- Dashboard: API-Keys-Link für Admins
2026-03-12 12:07:22 +01:00
Meleki 1228dc9d58 fix: Back-Button Fallback auf Dashboard wenn kein History-Eintrag
- router.js: Back-Buttons navigieren zu data-page oder dashboard statt history.back()
- chat-page.js: Chat Back-Button mit gleichem Fallback
- Behebt Problem bei Direktlinks (z.B. #chat/123) ohne vorherigen SPA-Eintrag
2026-03-12 11:37:48 +01:00
Meleki 982aa60376 docs: Dokumentation aktualisieren – Multi-Provider-System, Gemini, Modell-Caching 2026-03-12 09:06:55 +01:00
Meleki ed6e78de56 Cache Provider-Modelle in models_cache.json statt bei jedem Start von APIs zu laden
- LoadModelsAsync() prüft zuerst data/models_cache.json
- Bei Cache-Hit: kein API-Call, sofortiger Start
- RefreshModelsFromApis() lädt von APIs + speichert Cache
- POST /api/models/refresh Endpoint für manuellen Refresh
- dataDir an OpenAiService-Konstruktor übergeben
2026-03-12 08:57:47 +01:00
Meleki 145441fa7b feat: Gemini thought_signature korrekt lesen und zurücksenden
- thought_signature aus delta.tool_calls[n].extra_content.google.thought_signature lesen (korrekter Pfad)
- ThoughtSignature-Feld in MessageRecord + DB-Migration (ALTER TABLE messages ADD COLUMN thought_signature)
- SaveMessage speichert ThoughtSignature pro Tool-Call
- OpenAiService: toolCallAccumulators Tuple um ThoughtSignature erweitert
- Tool-Calls mit thought_signature werden mit extra_content.google.thought_signature zurückgesendet (nicht function.thought_signature)
- ConvertMessage (History-Rebuild) setzt thought_signature ebenfalls korrekt
- ChatService.BuildApiMessages übergibt thought_signature aus DB-Record
- Gemini-Modelle dynamisch laden statt hardcodiert
- Tool-Call-Akkumulator nutzt id als primären Key (Gemini sendet parallele Calls ohne index)
- content=null → content='' für Gemini-Kompatibilität
2026-03-12 06:34:11 +01:00
Meleki e87455ffe9 feat: Gemini als Provider hinzugefügt (Free-Tier-Modelle hardcodiert)
- OpenAiService: Gemini-Provider mit Base-URL generativelanguage.googleapis.com/v1beta/openai
- GeminiApiKey aus IConfiguration (appsettings.json / appsettings.Production.json)
- Gemini Free-Tier-Modelle hardcodiert: 2.5 Pro, 2.5 Flash, 2.5 Flash Lite
- ModelsEndpoint: /api/models/gemini Endpoint
- Frontend: geminiOptgroup dynamisch befüllt
- ProviderKeys als static HashSet (für ChatService.ResolveModelId)
2026-03-11 18:41:47 +01:00
Meleki 50e09bbc36 change model display name 2026-03-11 18:19:48 +01:00
Meleki d08a857492 ui: prettyModelName zeigt Modellnamen für unbekannte Provider korrekt an 2026-03-11 16:55:57 +01:00
Meleki 5ed910edcd feat: Dynamisches Modell-Laden für Nvidia & Pollinations Provider
- OpenAiService: FetchModels() generisch für beide Provider (OpenAI-Format & Pollinations-Array-Format)
- Pollinations Base-URL direkt auf text.pollinations.ai/openai (kein g4f.space Proxy → kein 402)
- Pollinations Modelle-URL: text.pollinations.ai/models
- ModelsEndpoint: /api/models/nvidia + /api/models/pollinations
- agent-page.js: loadProviderModels() generisch, Promise.all für beide Provider parallel
- index.html: statische Nvidia-Option entfernt, beide Optgroups mit 'Wird geladen...'
2026-03-11 16:43:08 +01:00
Meleki 7972ca6a3a feat: OpenAI-kompatibler Provider (Nvidia/g4f.space) mit Tool-Calling und SSE-Streaming
- OpenAiService.cs: Neuer Service für OpenAI-kompatible APIs
  - SSE-Streaming mit text_start/text_delta/text_end Events
  - Tool-Calling: list_files, read_file, write_file, edit_file, delete_file, execute
  - Agentic Loop (max 10 Iterationen)
  - Tool-Use + Tool-Result in DB gespeichert
  - History-Rebuild: Anthropic-Format → OpenAI-Format (tool_use/tool_result korrekt konvertiert)
- ChatContext.cs: Provider-Feld hinzugefügt
- ChatService.cs: OpenAI-Provider-Erkennung in ResolveModelId + PrepareContext
- ChatEndpoint.cs: Provider-Dispatch (nvidia → OpenAiService, sonst → AnthropicService)
- Program.cs: OpenAiService als Singleton registriert
- wwwroot/index.html: nvidia:moonshotai/kimi-k2.5 in Modell-Auswahl
2026-03-11 16:15:09 +01:00
Meleki a646e695cd feat: embedding model warning modal on frontend load
- InfoEndpoint: EmbeddingService injiziert, embeddingAvailable in /api/info Response
- title.js: _showEmbeddingWarning() Modal via _createModal() wenn Modell fehlt
- base.css: ol margin-left wie ul (geordnete Listen)
2026-03-11 14:38:27 +01:00
Meleki f941eae00a feat: typing indicator mit agent-name und random phrases
- typing-phrases.js in index.html eingebunden
- startTypingIndicator() / stopTypingIndicator() in chat.js
- Agent-Name via setCurrentAgentName() aus chat-page.js gesetzt
- Phrase wechselt alle 3 Sekunden zufällig
- Cleanup bei destroy() und finally-Block
2026-03-11 14:25:30 +01:00
Meleki c5f2ed54fd chore: Debug-Log aus send_to_session entfernen 2026-03-11 14:09:24 +01:00
Meleki e374c70c89 fix: send_to_session für alle ExecuteTool-Pfade + generelle FixOrphanedToolUse
- AnthropicService: db/chatService/anthropicService/userId/telegramService auch im
  RunAgentChat (Zeile 899) und ChatNonStreaming (Zeile 1105) ExecuteTool-Aufruf
  durchreichen – Telegram-Flow nutzt ChatNonStreaming, hatte zuvor null-Parameter
- ChatService: FixOrphanedAskUserChoice → FixOrphanedToolUse ersetzt
  Prüft gesamte History auf orphaned tool_use-Blöcke (nicht nur ask_user_choice am Ende)
  Synthetische tool_results werden eingefügt um Anthropic API 400 zu verhindern
- ToolService: Debug-Logging für send_to_session nach /tmp/gott_send_to_session.log
2026-03-11 13:50:12 +01:00
Meleki 2486eee047 fix: send_to_session – fremde Sessions erlauben, Telegram-Notify, Fehler-Logging 2026-03-11 13:36:38 +01:00
Meleki c18b94cd4e feat: send_to_session tool – agent-to-agent messaging
- Neues Tool send_to_session: Agent kann Nachrichten in andere Sessions schicken
- Ziel-Session per ID oder Name (case-insensitive) auffindbar
- User-Message wird nicht in DB gespeichert (wie Cronjob) – keine Bubble im Frontend
- Nachricht wird als '[Nachricht von Agent "X"]' kontextualisiert injiziert
- Sicherheitscheck: Ziel-Session muss demselben User gehören, keine eigene Session
- Zirkuläre Abhängigkeit ChatService ↔ AnthropicService via SetChatService() gelöst
- tool-ui.js: Display-Name für send_to_session
2026-03-11 12:56:36 +01:00
Meleki 20d891c9ef feat: read_file tool mit offset/limit und 2000-Zeilen-Default
- Standardmäßig maximal 2000 Zeilen gelesen (statt komplette Datei)
- Optionale Parameter: offset (1-basiert) und limit
- Hinweis wenn Datei abgeschnitten wurde mit exakter Zeilenangabe
- TODO: Auto-scrolling als erledigt markiert
2026-03-11 11:39:50 +01:00
Meleki b45abab0aa feat: auto-scroll deaktivieren beim hochscrollen, reaktivieren am Ende 2026-03-11 11:31:41 +01:00
Meleki bdb7f54c74 fix: synthetisches tool_result bei übergangenem ask_user_choice
Wenn der User Text schreibt statt eine Choice zu wählen, endet die
vorherige Chain mit einem offenen ask_user_choice tool_use ohne
passendes tool_result. Anthropic API wirft dann 400.

FixOrphanedAskUserChoice() erkennt diesen Fall in BuildHistoryFromDb
und fügt ein synthetisches tool_result ein.
2026-03-11 11:26:52 +01:00
Meleki 148d1459a3 Auto-Context: Semantische Kontext-Injektion, Memory-File-Embeddings, Agent-Toggle
- Automatische Embedding-basierte Kontext-Injektion vor jeder API-Anfrage
  (Top 5 Chat-Ergebnisse + Top 3 Memory-File-Treffer als recalled_context)
- Memory-Dateien (.md) werden embedded (Backfill + Live nach memory_write)
- Neue Agent-Option 'useAutoContext' (Checkbox, Default: aktiviert)
- VectorSearchService: SearchMemoryFilesAsync, EmbedMemoryFileAsync, Chunking
- EmbeddingBackgroundService: Memory-File-Backfill + EnqueueMemoryFile
- ToolService: memory_write löst Re-Embedding aus
- embeddingBg Parameter an ExecuteTool durchgereicht
2026-03-11 09:45:50 +01:00
Meleki add111ffe1 feat: Semantische Suche über Chat-History (memory_search)
- Lokales Embedding-Model (all-MiniLM-L6-v2, ONNX, CPU)
- EmbeddingService: WordPiece-Tokenizer + Mean Pooling (384 Dim)
- VectorSearchService: SQLite-basierte Vektor-Speicherung + Cosine Similarity
- EmbeddingBackgroundService: Backfill bestehender Messages + Live-Queue
- Neues Tool memory_search: Semantische Suche über alle Sessions (inkl. archivierte)
- ~9000 Messages embedded, Suche über komplette Chat-History
2026-03-11 09:22:11 +01:00
Meleki baf53b7dac fix: Remote-Modal URL auf /remote Alias aktualisiert 2026-03-11 08:17:25 +01:00
Meleki 263f438501 Remote: Ctrl+C Handling im PS-Script + /remote Alias
- CancelKeyPress-Event registrieren → .Cancel() → ReceiveAsync bricht sauber ab
- catch [AggregateException] für CancellationToken in .GetAwaiter().GetResult()
- Event-Handler im finally-Block entfernen
- /remote als Alias für /remote.ps1
2026-03-11 08:12:56 +01:00
Meleki 0eb9022803 fix: Remote-Verbindungen – Reverse-Proxy-Support, Shutdown-Handling, Script-Stabilität
- X-Forwarded-Host/Proto Header für korrekte WebSocket-URL hinter Reverse-Proxy
- CancellationToken aus IHostApplicationLifetime für sauberen App-Shutdown
- WebSocket-Close mit 3s Timeout statt endlosem Warten
- PowerShell-Script: Synchroner Empfangs-Loop (Send/Receive-Funktionen)
- TLS 1.2 erzwungen für ältere Windows-Versionen
- remote_execute Tool auch ohne Workspace-Pfad verfügbar (includeRemote)
- Debug-Logs entfernt
2026-03-11 07:41:24 +01:00
Meleki 10da2bd964 feat: Remote-Verbindungen – Windows-Workstations per WebSocket steuern
- RemoteConnectionManager: Singleton-Service verwaltet WebSocket-Verbindungen
  mit Command-Execution (Send/Receive mit Timeout + SemaphoreSlim-Locking)
- RemoteEndpoint: WebSocket-Endpoint /api/remote (auth-frei), REST-APIs für
  Connections/Assign/Unassign, PowerShell-Script-Auslieferung mit dynamischer URL
- remote.ps1: PowerShell-Client für Windows – verbindet per WebSocket,
  sendet Hostname/User/OS, empfängt und führt Befehle aus, Heartbeat
- remote_execute Tool: Neues Agent-Tool, nur verfügbar wenn Session eine
  zugeordnete Remote-Verbindung hat, führt PowerShell-Befehle remote aus
- Frontend: Menüpunkt 'Remote-Verbindungen' im Chat-Dropdown, Modal zeigt
  alle aktiven WebSocket-Verbindungen (Hostname, User, OS, Verbindungszeit),
  Verbinden/Trennen-Buttons pro Verbindung und Session
- Auth: /api/remote und /remote.ps1 von Authentifizierung ausgenommen

Architektur: Windows-Client → WebSocket → GOTT-Server → Agent-Tool
Session-gebunden: Eine Verbindung wird einer Session zugeordnet
2026-03-11 07:04:24 +01:00
Meleki 9f4746c2e7 fix: fullChainStartIndex erkennt awaiting_user_choice der vorherigen Chain
Bug: Nach ask_user_choice wurde die vorherige Chain (mit allen tool_use/
tool_result Paaren) nur als Text geladen statt vollständig. Die API bekam
tool_use IDs ohne zugehörige tool_result Blöcke → 400 Error.

Ursache: Die fullChainStartIndex-Logik prüfte nur ob die AKTUELLE Chain
eine tool_result mit Iteration 999 hat. Aber die Choice-Antwort wird in
die VORHERIGE Chain gespeichert (ChatEndpoint Zeile 68-78), nicht in die
aktuelle. Deshalb wurde needsPrevious=false → vorherige Chain nur als Text.

Fix: Dritte Prüfung hinzugefügt - wenn die vorherige Chain mit
stop_reason='awaiting_user_choice' endete, muss sie vollständig geladen
werden (sie enthält den tool_use UND den tool_result für die Choice).
2026-03-10 22:29:40 +01:00