Meleki
f64052caf4
feat: Web-Search Sources anzeigen (Streaming + History + Archive + Shared)
...
Backend:
- web_search_tool_result Sources extrahieren (url, title)
- Als 'web_search_result' Message-Typ in DB persistieren
- Sources im web_search_end SSE-Event mitsenden
- Alle 3 Chat-Pfade: StreamChat, RunAgentChat, ChatNonStreaming
Frontend:
- renderToolBoxContent: Sources-Sektion mit klickbaren Domain-Links
- finishToolBox/addToolBoxStatic: sources-Parameter durchgereicht
- History: web_search_result Message-Typ in allen 3 Render-Pfaden
- web_search immer sichtbar (auch bei 'modifications' Filter)
CSS:
- .web-search-sources: Flex-Wrap Container
- .web-search-source: Domain-Pill mit Hover-Effekt, Title-Ellipsis
2026-03-07 09:56:09 +01:00
Meleki
116f21105c
fix(chat): Web-Search-Streaming – Text-Bubbles nach Search in gleicher Bubble fortsetzen
...
- chat.js: _afterWebSearch Flag trackt ob gerade eine Web-Search beendet wurde
- text_start nach Web-Search: resumeStreamBubble() statt neue Bubble
- web_search_start: Bubble NICHT beenden (bleibt finalisiert im DOM)
- web_search_end: setzt _afterWebSearch=true
- Flag wird bei tool_start, review_start, finalizer_start, error, done zurückgesetzt
- ui.js: Neue resumeStreamBubble() Funktion
- _lastStreamDiv/_lastStreamText speichern letzte finalisierte Bubble
- resumeStreamBubble() reaktiviert die letzte Bubble zum Weiter-Streamen
- Verhindert separate Message-Blöcke bei mehrfachen Web-Searches
2026-03-07 09:48:14 +01:00
Meleki
4bec740765
feat: Finalizer-Agent – dritter Agent der nach Worker + Review einschreitet
...
Backend:
- SessionRecord + DB-Migration: finalizer_agent_id auf sessions
- ChatContext.FinalizerContext (Model, SystemPrompt, Tools, Workspace)
- ChatService: FinalizerContext aufbauen (analog zu ReviewContext)
- AnthropicService: RunFinalizer() nach Review-Phase (oder direkt nach Worker)
- RunReviewAgentChat() refactored zu generischem RunAgentChat()
mit agentType-Parameter ('review' | 'finalizer') für SSE-Events und DB-Tags
- SSE-Events: finalizer_start, finalizer_text, finalizer_tool_use, finalizer_done
Frontend:
- Session-Page: Finalizer-Agent-Picker (im 'Weitere Einstellungen' Bereich)
- Chat: SSE-Events für Finalizer-Phase verarbeiten
- UI: addReviewBubble/finalizeReviewBubble unterstützen agentType 'finalizer'
mit eigener Farbe (success-green) und Flag-Checkered-Icon
- renderMarkdown: [Finalizer: AgentName] Tags parsen
- History: Finalizer-Messages als .finalizer-bubble rendern
- Shared-Page: Finalizer-Messages korrekt erkennen und stylen
- Dashboard: Finalizer-Badge (flag-checkered) auf Session-Cards
2026-03-06 23:35:30 +01:00
Meleki
a3f2aa38c1
Update README.md
2026-03-06 23:09:08 +01:00
Meleki
28fd685136
docs: vollständige README mit Features, Installation, Konfiguration, Deployment + Screenshot
2026-03-06 23:02:32 +01:00
Meleki
23c2bde8d4
docs: ServerSettings-UI, Avatar-Offset, konfigurierbarer Port, appsettings.Production.json Verwaltung
2026-03-06 22:53:25 +01:00
Meleki
dc2709b3cd
Server-Port konfigurierbar statt hardcoded
...
- Program.cs: Port aus Config lesen mit Fallback 19000
- appsettings.json: Port: 19000 als Default
- ServerSettingsEndpoint: Port als erste Einstellung (mit Neustart-Hinweis)
2026-03-06 22:37:53 +01:00
Meleki
bfd78278ab
feat: Servereinstellungen-Seite für Admins
...
- Neuer Endpoint GET/PUT /api/admin/server-settings
- Liest appsettings.Production.json (Fallback: appsettings.json → Standardwert)
- Schreibt immer in appsettings.Production.json
- Definierte Settings: AnthropicToken, MaxIterations, PayloadLogging, PayloadLoggingGzip, KreaToken, KreaApiKey
- Neue Frontend-Seite 'server-settings' (Admin-only)
- Dynamisches Formular basierend auf Setting-Definitionen vom Backend
- Password-Felder mit Eye-Toggle, Checkboxen für Booleans, Number-Inputs
- Hinweis dass Neustart erforderlich ist
- Dashboard: Neuer Link 'Servereinstellungen' für Admins
- appsettings.Production.json vom Publish ausgeschlossen (CopyToPublishDirectory=Never)
2026-03-06 22:32:33 +01:00
Meleki
af2f821c72
Session-Form: Review-Agent in erweiterte Einstellungen verschoben
2026-03-06 21:22:21 +01:00
Meleki
4775b8ded7
feat: Avatar Position-Offset (translate X/Y)
...
Backend:
- AgentRecord + SessionRecord: AvatarOffsetX, AvatarOffsetY Properties
- DB-Migration: avatar_offset_x/y REAL DEFAULT 0 auf agents + sessions
- Agent/Session Endpoints: Create + Update lesen/schreiben Offset-Felder
- GetSessionsWithStats: Offset-Felder ans Frontend
Frontend:
- Avatar-Editor: X/Y Offset-Slider (-50% bis +50%) im Modal
- buildTransformStyle() Helper für transform: scale() translate()
- getOffsetX()/getOffsetY() Public API
- Reset bei Clear/AI-Generate/Upload
- ui.js: buildAgentCard + buildSessionCard rendern transform mit Offset
- Agent-Page + Session-Page: initialOffsetX/Y + Save
- CSS: .av-offset-row Styles (gruppiert mit .av-scale-row)
2026-03-06 21:14:51 +01:00
Meleki
95b3683910
docs: Multi-Agent Review-System in ARCHITECTURE.md und ARCHITECTURE_QUICK.md dokumentiert
...
ARCHITECTURE.md:
- Inhaltsverzeichnis: neues Kapitel 18 (Multi-Agent Review-System)
- Datenmodell: sessions-Tabelle um review_agent_id, max_review_iterations erweitert
- Entity-Relationship: Review-Agent-Beziehung
- ChatContext.cs Kommentar: + ReviewContext
- Chat-Pipeline: Review-Phase (4b) nach end_turn mit Diagramm
- SSE-Events: review_* Events
- Neues Kapitel mit Architektur, Konfiguration, Backend-Flow,
ReviewContext Model, SSE-Events, DB-Persistierung, Frontend
ARCHITECTURE_QUICK.md:
- sessions-Tabelle: ReviewAgentId, MaxReviewIterations
- Chat-Pipeline: Review-Phase eingefügt
- ui.js Kommentar: Review-Rendering
- Neues Kapitel Multi-Agent Review-System (Kurzform)
2026-03-06 19:13:41 +01:00
Meleki
6369f7f09c
Review-Nachrichten: konsistentes Styling in History, Chat und Shared-Links
...
- renderMarkdown: [Review: Agent], [Review-Feedback ...], [APPROVED] Tags parsen
→ styled HTML-Header bzw. ausgeblendet (zentral für alle Views)
- history.js: Review-Messages als .review-bubble rendern statt .assistant/.user
Review-Messages vom Merging ausgenommen
- shared-page.js: Review-Messages erkennen → .review-bubble Klasse
Merge-Logik schützt Review-Messages vor Zusammenführung
- addReviewBubbleStatic(): Neue Funktion für History-Rendering mit allen
Buttons (Reply, Delete, Mark, Share)
- chat.css: .review-inline-header, .review-inline-feedback Styles
2026-03-06 17:31:30 +01:00
Meleki
5fe3f8ac87
feat: Review-Agent (Multi-Agent-Kommunikation)
...
- Session hat optionalen ReviewAgentId + MaxReviewIterations
- Nach end_turn des Worker-Agents wird der Review-Agent aufgerufen
- Review-Agent bekommt Worker-Konversation als Kontext + kann Tools nutzen
- [APPROVED] in Review-Antwort → fertig, sonst Feedback an Worker
- Worker korrigiert und wird erneut reviewed (max N Runden)
- SSE-Events: review_start, review_text, review_tool_use, review_feedback, review_approved
- Chat-UI: Review-Phase als eigene Bubble mit Header, Text, Status
- Session-Page: Review-Agent-Picker (gleicher Agent-Card-Helper)
- Dashboard: Review-Agent-Badge auf Session-Cards
- DB-Migration: review_agent_id, max_review_iterations auf sessions
2026-03-06 16:04:00 +01:00
Meleki
2598656f1c
docs: ARCHITECTURE.md + ARCHITECTURE_QUICK.md aktualisiert
...
- Chat: POST /api/chat/stop Endpoint + Stop-Mechanismus (zwei Ebenen) dokumentiert
- StreamingTracker: CancellationTokenSource pro Session beschrieben
- Auth: GET /api/auth/autologin, GET /api/images/file/* ohne Auth
- Admin: POST login-link Endpoint + Login-Link-Sektion
- Krea: Thumb-Endpoint, Status-Endpoint, öffentliches Bild-Serving
- Frontend: buildAgentCard(), buildSessionCard() UI-Helpers + Picker-Modals
- ui.js in Verzeichnisstruktur ergänzt
2026-03-06 15:51:47 +01:00
Meleki
40c8fee531
feat: zuverlässiger Stop-Button für Chat-Streaming
...
- StreamingTracker: CancellationTokenSource pro Session, Cancel()-Methode
- ChatEndpoint: POST /api/chat/stop Endpoint, linkedCts verknüpft
Stop-Token mit Client-Disconnect-Token
- AnthropicService: cancellationToken an ExecuteTool durchgereicht
- ToolService: CancellationToken-Parameter, execute-Tool verknüpft
externen Token mit 180s-Timeout, killt Prozess bei Abbruch
- Frontend: apiStopChat() + stopStreaming() ruft Backend-Stop auf
2026-03-06 15:44:08 +01:00
Meleki
01b3e2c230
Auth: Krea-Bilddateien ohne Authentifizierung zugänglich machen
...
- /api/images/file/{filename} und /api/images/file/{filename}/thumb
als GET ohne Auth erlaubt (analog zu /api/shared/)
2026-03-06 15:35:01 +01:00
Meleki
58468701b9
feat(skills): read description from skill.json
2026-03-06 15:31:53 +01:00
Meleki
1f5f49228b
fix: Krea-Bild-URLs auf /api/images/file/ korrigieren, Thumbnail-Endpoint hinzufügen
...
- ui.js: [Krea: datei] URLs von /api/skills/krea-api/output/ auf /api/images/file/ geändert
- KreaEndpoint: GET /api/images/file/{filename}/thumb mit gecachten WebP-Thumbnails (320px)
- Thumbnail-Cache in data/cache/images/, analog zum SkillEndpoint
2026-03-06 15:10:26 +01:00
Meleki
20f96f69d0
feat: API-Key-Auth für Krea-Endpoints (Automation ohne User-Kontext)
...
- AuthMiddleware: X-Api-Key Header-Prüfung für /api/images/* Routen
- Neues Config-Feld KreaApiKey in appsettings.json
- Bei gültigem API-Key wird Request ohne Cookie-Auth durchgelassen
- Normaler User-Auth funktioniert weiterhin als Fallback
- ARCHITECTURE.md + ARCHITECTURE_QUICK.md aktualisiert
2026-03-06 15:00:11 +01:00
Meleki
1b9cc29421
Admin: Login-Link mit window.location.origin statt Server-Host
...
- Backend gibt nur Token zurück statt fertigen Link
- Frontend baut Link via window.location.origin zusammen
- Zeigt korrekte Domain/Port statt internes http://127.0.0.1
Backend:
- AdminEndpoint: POST /api/admin/users/{userId}/login-link gibt { token }
- AuthEndpoint: GET /api/auth/autologin?token=xxx setzt Cookie + redirect
- AuthMiddleware: autologin-Route von Auth ausgenommen
Frontend:
- api.js: apiAdminGetLoginLink() Funktion
- admin-page.js: Login-as-User Button → Login-Link Button mit Modal
- form.css: Styling für Login-Link Modal
2026-03-06 14:35:01 +01:00
Meleki
eeecd3da62
cleanup: lokale escapeHtml/esc Duplikate entfernt, globale esc() aus ui.js verwenden
2026-03-06 14:24:20 +01:00
Meleki
e45498ac50
Session-Cards: buildSessionCard() Helper + Picker-Modal für Cronjob-Formular
...
- buildSessionCard(session, agent) Helper in ui.js (analog zu buildAgentCard)
Erzeugt .card mit Avatar, Name, Badges (Agent, Kontext, Telegram) und Meta (Nachrichten, Archiv, Workspace)
- Dashboard refactored: Session-Cards nutzen buildSessionCard() statt inline HTML
- Cronjob-Formular: <select> für Session und Benachrichtigungs-Session durch
klickbare Session-Cards + Picker-Modal ersetzt
- openSessionPickerModal() mit filterWithAgent-Option (Session-Dropdown nur
Sessions mit Agent, Notify-Dropdown alle Sessions)
- CSS: .session-select-card und .session-select-change Klassen analog zu agent-*
2026-03-06 14:05:32 +01:00
Meleki
92c20402eb
refactor: Agent-Auswahl in Session-Form als Card + Picker-Modal
...
- buildAgentCard() Helper in ui.js erstellt (wiederverwendbar für Dashboard + Picker)
- Session-Form: select-Dropdown durch klickbare Agent-Card ersetzt
- Agent-Picker-Modal zeigt alle Agents mit identischen Cards wie am Dashboard
- Dashboard refactored: nutzt buildAgentCard() statt dupliziertem Inline-HTML
- Kein duplizierter Code mehr für Agent-Card-Rendering (Badges, Skills, Avatar)
2026-03-06 14:01:27 +01:00
Meleki
a82540e7db
docs: ARCHITECTURE.md + ARCHITECTURE_QUICK.md aktualisiert
...
Neue Kapitel in ARCHITECTURE.md:
- Admin-Benutzerverwaltung (CRUD, Impersonate)
- Avatar-System (Editor-Modal, Scale, AI-Generate)
- LaTeX/Math-Rendering (KaTeX-Pipeline)
Erweiterte Kapitel:
- Projektstruktur: WorkspaceHelper, AdminEndpoint, avatar-editor.js, admin-page.js, KaTeX-Dateien
- Tech-Stack: KaTeX 0.16.21
- Datenmodell: default_path, avatar_scale, telegram_allowed_chat_ids
- Endpoints: Admin (16 Gruppen), Workspace (mkdir/rmdir)
- Chat-Pipeline: CancellationToken-Propagierung (Stop-Button)
- Telegram: Chat-ID-Whitelist + Zugriffskontrolle
- Auth: DefaultPath als Base-Path, Impersonate
- Workspace: WorkspaceHelper, relativer Pfad-Auflösung
- Frontend: avatar-editor.js, admin-page, KaTeX, Timestamps
ARCHITECTURE_QUICK.md:
- Admin-Endpoint, WorkspaceHelper, KaTeX, DefaultPath, Impersonate, CancellationToken
2026-03-06 13:12:42 +01:00
Meleki
011b26c37f
feat(telegram): Zugriffskontrolle mit Chat-ID-Whitelist
...
- TelegramService: IsChatIdAllowed() prüft Owner + Whitelist
- /start von unbekannter ChatId: Zugriff verweigert + ChatId angezeigt
- Owner wird bei Zugriffsanfrage benachrichtigt (Username + ChatId)
- Alle Commands/Messages prüfen Whitelist vor Verarbeitung
- Neues Feld telegram_allowed_chat_ids in sessions-Tabelle
- Frontend: Input für erlaubte Chat-IDs in Session-Telegram-Settings
- API: allowedChatIds in Save/Get durchgereicht
2026-03-06 13:04:02 +01:00
Meleki
5661e55898
style(mobile): shared-content padding for mobile view
2026-03-06 12:40:20 +01:00
Meleki
34cecd03a1
refactor: Avatar-Editor als wiederverwendbares Modal-Modul
...
- Neues avatar-editor.js: Upload, Paste, AI-Generate, Scale, Clear in einem Modal
- Session + Agent Pages: ~280 Zeilen doppelter Avatar-Code → je 5 Zeilen AvatarEditor.init/destroy
- Avatar-Preview klickbar → öffnet Modal mit allen Einstellungen
- chat.css: Shared-Content Message-Styling (max-width, border)
2026-03-06 11:55:00 +01:00
Meleki
057d37d76f
feat: Avatar Scale (0.5×–3×) + Krea AI Bildgenerierung für Avatare
...
Backend:
- SessionRecord + AgentRecord: neues Feld AvatarScale (double, Default 1.0)
- DatabaseService: avatar_scale Migration, in Create/Update/GetWithStats
- SessionEndpoint + AgentEndpoint: avatarScale in Create/Update
- api.js: apiKreaStatus(), apiKreaGenerate()
Frontend:
- Session + Agent Templates: Range-Slider (0.5×–3×) in Avatar-Section
- Krea AI Generate: Prompt-Input + Magic-Button (nur wenn KreaToken konfiguriert)
- Live-Preview: transform: scale() auf Avatar-Vorschau
- Dashboard: scale() auf Session- und Agent-Card-Images
- form.css: avatar-scale-row + avatar-ai-section Styling
2026-03-06 10:59:09 +01:00
Meleki
4ebbeaa818
feat: shared-page message merging + UI reorganization
...
Shared Page:
- Merge consecutive assistant text messages (same iteration)
- Add iteration field to thread API response
- Unified rendering for single/thread messages
UI Reorganization (manual changes):
- Session + Agent forms: collapsible 'Weitere Einstellungen' section
- Agent defaults: tool_choice unchecked, web_search 2025, model opus-4-6
- Profile: default-path field hidden, divider removed
- Form spacing adjustments, .more toggle style
2026-03-06 08:52:27 +01:00
Meleki
4e1ed81f37
feat: DefaultPath als Base-Path für User-Workspaces
...
- WorkspaceHelper.cs: Zentrale Workspace-Auflösung (relativ → absolut)
- Session-Workspace wird relativ zum User-DefaultPath gespeichert
- System-Prompt bekommt aufgelösten absoluten Pfad
- Path-Traversal-Schutz: '..' in Workspace-Pfaden blockiert
- Browse-API gibt '..' nicht mehr als Eintrag zurück
- Folder-Browser: basePath-Limit, Back-Button navigiert zum Parent
- DefaultPath nur durch Admin bearbeitbar (Profil: readonly)
- Legacy: Absolute Pfade in session.Workspace weiterhin kompatibel
2026-03-05 22:49:09 +01:00
Meleki
8e7bda50f9
feat: Ordner erstellen/löschen im File Explorer
...
Backend (WorkspaceEndpoint.cs):
- POST /api/workspace/mkdir – Ordner im Session-Workspace erstellen
- DELETE /api/workspace/dir – Leeren Ordner im Session-Workspace löschen
- POST /api/workspace/agent/mkdir – Ordner im Agent-Memory erstellen
- DELETE /api/workspace/agent/dir – Leeren Ordner im Agent-Memory löschen
- POST /api/workspace/browse/mkdir – Ordner im Folder-Browser erstellen
- Sicherheit: Path-Traversal-Schutz, Root nicht löschbar, nicht-leer → 409
Frontend (file-explorer.js):
- 📁 + Button im Header für neuen Ordner (File Explorer + Folder Browser)
- 🗑️ Button bei jedem Ordner (erscheint on hover, nur File Explorer)
- Validierung: ungültige Zeichen werden abgelehnt
CSS:
- base.css: Icon-Button mit zwei Icons (folder + plus)
- file-explorer.css: Ordner-Zeile als Flex (Label + Delete-Button)
2026-03-05 21:01:09 +01:00
Meleki
d1355dcb0d
feat: Login-as-User (Impersonate) + Default-Path pro User
...
Admin:
- POST /api/admin/users/{userId}/impersonate – erstellt Token für Zieluser
- Login-as-Button (fa-sign-in) in User-Liste (nicht für sich selbst)
- confirm-Dialog, danach location.reload() mit neuem User-Kontext
- Default-Path Feld + Browse-Button im Admin-Formular
Default-Path:
- Neues Feld default_path in users-Tabelle (TryAddColumn Migration)
- UserRecord.DefaultPath Property
- In allen Endpoints: Admin CRUD, Auth /me, Profile Get/Update
- Profil-Seite: Default-Path Feld + Browse-Button
- Session-Seite: Workspace-Browse nutzt defaultPath als Fallback
2026-03-05 20:42:21 +01:00
Meleki
df68843e82
feat: EasyMDE-Editor für Persona und Session-Kontext
...
- profile-page.js: #profilePersona textarea → EasyMDE mit Toolbar und Dark-Theme
- session-page.js: #sessionContext textarea → EasyMDE mit Toolbar und Dark-Theme
- form.css: Override-Styles für EasyMDE in Formularen (height: auto, border-radius)
- base.css: ul margin-left für korrekte Listen-Einrückung
- Beide Editoren: sauberes Cleanup via toTextArea() in destroy()
- Nutzt bestehende fe-mde-wrap Styles aus file-explorer.css
2026-03-05 20:24:30 +01:00
Meleki
9140c4fcc7
feat(dashboard): klickbare Session-Cards + UI-Verbesserungen
...
- Session-Cards mit Agent sind klickbar (navigiert zum Chat)
- Card-Menü bleibt nutzbar via pointer-events Logik
- Menü-Reihenfolge: Bearbeiten vor Chat öffnen
- Session-Beschreibung: textarea → input (einzeilig)
- Globale Link-Styles (a { color: var(--primary) })
2026-03-05 19:50:43 +01:00
Meleki
3ef78b5eb1
feat: Admin-Benutzerverwaltung + Dashboard-Layout-Fixes
...
Backend:
- AdminEndpoint.cs: 5 Endpunkte (List, Create, Update, Reset PW, Delete) - Admin-only
- DatabaseService: CreateUser(), UpdateUserAdmin(), DeleteUser() (kaskadiert Tokens + Shares)
- Route in Program.cs registriert
Frontend:
- admin-page.js: User-Liste mit Edit/Delete, Inline-Formular Create/Edit
- api.js: 5 Admin-API-Funktionen
- index.html: Template tpl-admin, Script-Tag, Dashboard-Link 'Benutzerverwaltung'
- dashboard.js: Admin-Link nur für Admins sichtbar
- form.css: Styles für admin-user-list, admin-user-row, admin-checkbox-row
- dashboard.css: Header-Overflow-Fix, Agents vor Cronjobs
- index.html: Template-Reihenfolge Agents vor Cronjobs
TODO: User-Management als erledigt markiert
2026-03-05 19:19:16 +01:00
Meleki
489b5e0eb0
feat: Timestamps + LaTeX/KaTeX-Rendering im Chat
...
Timestamps (dd.MM.yyyy HH:mm:ss):
- Neuer _formatTimestamp() + _addTimestamp() Helper in ui.js
- Timestamp bei allen User- und Assistant-Nachrichten (live, history, archiv)
- Erscheint on hover, halbtransparent, rechts oben an der Bubble
LaTeX/Math-Rendering mit KaTeX 0.16.21:
- KaTeX lokal eingebunden (JS + CSS + 21 woff2-Fonts)
- renderMarkdown() schützt LaTeX vor Markdown-Parsing
- $$...$$ → Block-Math (zentriert), $...$ → Inline-Math
- Fehlerhafte Ausdrücke als <code> Fallback
- KaTeX-Display Styling in markdown.css
Weitere Änderungen:
- theme.css: Neue --info Farbe
- Blockquote-Styling: info-Farbe statt halbtransparent
2026-03-05 18:25:03 +01:00
Meleki
dbeba6535a
fix: Nachrichtenanzahl zählt nur text-Messages, keine tool_use/tool_result
...
- 5 SQL COUNT-Queries mit 'type = text' Filter versehen:
- GetSessionsWithStats (activeCount + totalCount)
- GetActiveMessageCount
- GetActiveMessageCountBeforeId
- CreateArchive (messageCount)
- Dashboard: Aktive und archivierte Nachrichten separat angezeigt
- ArchiveMessageCount als eigenes Feld im Session-DTO
- TODO.md: Nachrichtenzählung-Bug als erledigt markiert
2026-03-05 16:33:03 +01:00
Meleki
4ae894304f
fix: CancellationToken durchgängig in AnthropicService propagieren
...
- ThrowIfCancellationRequested() am Anfang jeder while-Loop-Iteration
- WriteSseEvent() erhält CancellationToken-Parameter, prüft vor Schreiben
- WriteAsync/FlushAsync mit CancellationToken aufgerufen
- Cancellation-Check vor und nach Tool-Execution
- OperationCanceledException in ExecuteTool wird re-thrown statt geschluckt
- Behebt: Stop-Button brach nur Frontend-Stream ab, Backend lief weiter
2026-03-05 15:28:48 +01:00
Meleki
8a9293218b
refactor: Shared Links als Card-Grid mit Card-Menü (wie Cronjobs)
...
- index.html: shared-links-list → card-grid
- dashboard.js: Cards mit card-compact, card-menu-dropdown, fa-cog statt fa-robot
- dashboard.css: 60 Zeilen shared-link-*/danger-icon CSS entfernt (nutzt card-Styles)
2026-03-05 15:11:05 +01:00
Meleki
38a8223228
feat: Geteilte Links auf Dashboard anzeigen + URL-Fix
...
Dashboard:
- Neue Section 'Geteilte Links' zeigt alle aktiven Shares
- Pro Eintrag: Role-Icon, Text-Vorschau, Session-Name, Modus, Datum
- Buttons: Link kopieren, öffnen, löschen (mit sofortigem UI-Update)
- Section nur sichtbar wenn Shares vorhanden
Backend:
- SharedEndpoint HandleListShares erweitert: Nachricht-Preview,
Role, Session-Name pro Share mitgeliefert
Frontend:
- apiListShares() Funktion hinzugefügt
- Bugfix: Share-URL '/#/shared/' → '/#shared/' (Extra-Slash
verursachte 404 weil parseHash leeren Page-Namen ergab)
2026-03-05 12:01:28 +01:00
Meleki
4bdcebc1e1
fix(css): shared-page layout – center children with page-width
2026-03-05 11:33:52 +01:00
Meleki
43b09ae794
docs: Doku-Korrekturen – Model-Mapping, History-Optimierung, appsettings
...
ARCHITECTURE.md:
- Model-Mapping-Tabelle vervollständigt (alle 8 Aliase + Default)
ARCHITECTURE_QUICK.md:
- max_iterations: 50 → 100
- History-Optimierung korrekt beschrieben (ältere Chains nur Text, Tool-Results 20k Zeichen)
- appsettings-Beispiel korrigiert (AnthropicToken, KreaToken, richtige Keys/Werte)
2026-03-05 10:26:00 +01:00
Meleki
5a0b355acd
refactor: Beispiel-Daten in Memory-Pfaden durch YYYY-MM-DD Platzhalter ersetzen
...
- ToolService.cs: memory_read/memory_write Description nutzt YYYY-MM-DD
- SystemPromptBuilder.cs: Memory-Regel ohne festes Beispiel-Datum
- ARCHITECTURE.md: Dateibaum-Beispiel angepasst
2026-03-05 09:44:52 +01:00
Meleki
64c3f165e9
style: CSS-Verbesserungen (dvh, shared-page, button-layout)
2026-03-05 09:39:09 +01:00
Meleki
1693ace243
docs: Shared Messages Feature in ARCHITECTURE.md, ARCHITECTURE_QUICK.md und TODO.md ergänzt
...
- ARCHITECTURE.md: Neues Kapitel 17 (Nachrichten teilen), ER-Diagramm,
Tabelle shared_messages, SharedEndpoint, Auth-Ausnahme, Frontend-Route,
Dateibaum aktualisiert, Endpoint-Anzahl 14→15
- ARCHITECTURE_QUICK.md: Tabelle, Endpoint, Route, Auth-Ausnahme ergänzt
- TODO.md: Share-Feature als erledigt markiert, neuen Punkt für
Share-Verwaltung hinzugefügt
2026-03-04 23:38:13 +01:00
Meleki
be29984b25
feat: Einzelne Nachrichten als Link teilen
...
Backend:
- SharedMessageRecord Model + shared_messages DB-Tabelle
- SharedEndpoint: POST /api/messages/{id}/share, GET /api/shared/{token},
GET /api/shared (Liste), DELETE /api/shared/{token}
- Auth-Ausnahme für GET /api/shared/{token} (öffentlich ohne Login)
- DB-Methoden: CreateSharedMessage, GetSharedMessage, GetChainMessagesUpTo
Frontend:
- Share-Button (fa-share-alt) an jeder Nachricht
- Kontextmenü: Einzelnachricht oder mit Thread-Kontext teilen
- Link wird automatisch in Zwischenablage kopiert
- Öffentliche Shared-Page (#shared/{token}) ohne Login
- Markdown-Rendering in der geteilten Ansicht
- CSS für Share-Button, Share-Menü und Shared-Page
2026-03-04 23:34:00 +01:00
Meleki
4e915f76af
docs: add ARCHITECTURE.md & ARCHITECTURE_QUICK.md, fix user pre bg
...
- ARCHITECTURE.md: comprehensive project documentation (868 lines)
covering all 21 chapters (data model, services, endpoints,
chat pipeline, tool system, agents, memory, skills, telegram,
cronjobs, krea, auth, workspace, deployment, config)
- ARCHITECTURE_QUICK.md: compact quick-reference (223 lines)
for fast lookups during development
- chat.css: add .msg.user.markdown pre selector so code blocks
in user messages get correct background color (was only on code)
2026-03-04 20:43:14 +01:00
Meleki
26da25967d
feat: Krea Image Generation Endpoint
...
- KreaService: GenerateAsync() mit Job-Polling, Image-Download, Metadaten-Speicherung
- KreaEndpoint: POST /api/images/generate, GET /api/images, GET /api/images/file/{filename}, GET /api/images/status
- KreaImageRecord: Output-Model
- Output: data/images/<timestamp>-<index>.<ext> + data/images/<timestamp>.json
- 16 Modelle: flux, flux-kontext, flux-1.1-pro, imagen-3/4, chatgpt-image, runway-gen-4, etc.
- appsettings.json: KreaToken (Format: KEY_ID:SECRET), obsolete TelegramBotToken/WebhookSecret entfernt
2026-03-04 18:24:51 +01:00
Meleki
f552b44b05
feat: payload logging (on/off + gzip) via appsettings + fix destroy messages ref
2026-03-04 16:10:09 +01:00
Meleki
d482f5dca3
feat: API-Payload-Logging in data/logs/ für Debugging
...
- LogPayload() schreibt den kompletten Claude-API-Request als indented JSON
- Dateiname: <unixtime>-<sessionId>-<chainId>-iter<N>-payload.json
- Beide Pfade abgedeckt: StreamChat (Web) + ChatNonStreaming (Telegram/Cronjobs)
- try/catch: Logging-Fehler crashen nie die App
2026-03-04 14:35:15 +01:00