Commit Graph
49 Commits
Author SHA1 Message Date
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 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 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 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 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 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 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 8fc29c82d9 refactor: Chat-Payload vereinfacht + Inline-Bilder statt Platzhalter
Backend:
- ChatEndpoint empfängt nur noch content + sessionId (nicht mehr die gesamte History)
- History wird komplett aus DB aufgebaut via BuildHistoryFromDb
- Gelöschte Nachrichten (deleted_on) werden aus History gefiltert
- Leere Nachrichten werden übersprungen (kein API 400 mehr)
- BuildHistoryFromDb optimiert: nur Text für ältere Chains, Tool-Calls nur für aktuelle Chain
- GetChainMessages: includeDeleted-Parameter (Default: false)
- Archiv-Export nutzt includeDeleted: true

Frontend:
- messages[]-Array komplett entfernt (kein Client-seitiger History-State mehr)
- apiChat() sendet nur content + sessionId
- Inline-Bilder: [Bild: name] wird durch <img> ersetzt (live mit DataURL, History per API-Nachladen)
- _autoLoadImageAttachments() für History/Archiv/ältere Nachrichten
- Klick auf Inline-Bild öffnet Vollbild-Modal
2026-03-04 14:29:33 +01:00
Meleki 0120bb8f73 Telegram: Bot=Session statt User-Level, Chat-Code-Refactoring
- Telegram-Config (Bot-Token, Webhook-Secret, ChatId) von User-Settings
  in sessions-Tabelle verschoben → jede Session hat ihren eigenen Bot
- Link-Code-System komplett entfernt (TelegramLinkRecord gelöscht)
- /start verknüpft automatisch, kein /link mehr nötig
- Alle Endpoints session-basiert: /api/sessions/{id}/telegram/*
- Webhook-URL pro Session: /api/telegram/webhook/{sessionId}

Refactoring: Doppelten Chat-Code eliminiert
- Neuer ChatService: PrepareContext, BuildHistoryFromDb, ResolveModelId
- Neues ChatContext-Model als gemeinsame Datenstruktur
- AnthropicService.ChatNonStreaming() für Telegram (statt eigenem Loop)
- TelegramService um ~180 Zeilen reduziert, kein eigener Claude-Loop mehr
- ChatEndpoint nutzt ChatService.PrepareContext() statt eigener Setup-Logik
- Model-Mapping nur noch an einer Stelle (3x → 1x)

Frontend
- Telegram-Section von Settings-Page in Session-Bearbeitungsseite verschoben
- Webhook-Secret readonly, wird einmalig generiert und persistent gespeichert
- Status wird automatisch geladen, Register/Delete je nach Webhook-Status
- Toast-Notification-System (showToast) in ui.js
- Link-Code-Modal und Telegram-Menüpunkt im Dashboard entfernt
- Telegram-Badge auf Session-Cards (konfiguriert/verbunden)

Bugfix: Bearer statt x-api-key für OAuth-Tokens im TelegramService
2026-03-03 21:46:59 +01:00
Meleki c720a06c16 feat: todo_write tool-box mit custom parser, kein input, standardmäßig sichtbar 2026-03-03 14:50:22 +01:00
Meleki a14a991a0f feat: Nachrichten als gelöscht markieren
- DB: deleted_on TEXT Spalte in messages (Migration)
- Backend: ToggleMessageDelete(), includeDeleted-Parameter in allen History-Queries
- Neuer Endpoint: PUT /api/messages/{id}/delete
- Frontend: Trash-Button zwischen Reply- und Mark-Button
- Gelöschte Nachrichten: durchgestrichen + roter Rand (oder versteckt je nach Einstellung)
- Einstellungen: Toggle-Switch 'Gelöschte Nachrichten anzeigen'
- KI-Payload: gelöschte Nachrichten werden nicht mitgeschickt
2026-03-03 11:45:52 +01:00
Meleki 4fa0111c33 feat: Erweiterte Model-Auswahl für Agents
- Model-Optionen: sonnet-4-5, sonnet-4-6, opus-4-5, opus-4-6, haiku-4-5
- ChatEndpoint + TelegramService: Model-Mapping für alle Varianten
- Agent-Formular: Dropdown mit allen Model-Versionen
- ui.js: prettyModelName() vereinfacht für neue Model-Werte
2026-03-03 09:22:47 +01:00
Meleki 5d132585d5 Fluent Emoji 3D: Unicode-Emojis durch Microsoft Fluent Emoji ersetzen
- emoji.js: Emoji-Replacement-Engine mit umfassendem Unicode 15.0 Regex
  - String-basiert (replaceEmojisWithFluent) in renderMarkdown()
  - DOM-basiert (parseFluentEmojis) als Post-Processing via TreeWalker
  - CDN: @lobehub/fluent-emoji-3d@1.1.0 via jsdelivr (WebP/3D)
  - Intelligenter Fallback: fe0f-Varianten, dann Original-Unicode
  - Fail-Cache verhindert wiederholte Requests für fehlende Emojis
- User-Nachrichten werden jetzt als Markdown gerendert (renderMarkdown)
  - [Datei: ...] Refs: Platzhalter-Mechanismus vor Markdown-Parsing
  - Reply-Quotes bleiben durch Wrapper-Div erhalten
- parseFluentEmojis an allen Render-Stellen integriert:
  addAssistantBubble, endStreamBubble, _renderUserTextContent,
  _renderSystemPromptBlocks, history._renderMessagesIntoFragment,
  history.loadLatestArchive
- CSS: .fluent-emoji Klasse (1.2em, inline, scale 1.25)
- CSS: white-space:pre-wrap nur noch für .msg:not(.markdown)
2026-03-03 05:53:31 +01:00
Meleki 8039b47dec Web-Suche (Agent-Toggle mit Versionswahl), Admin-only Backup, Haiku 4.5
- Agent: Web-Suche als Dropdown (Deaktiviert / 2025 / 2026) statt bool
- AnthropicService: web_search Tool dynamisch nach Version einfügen
- Stream: server_tool_use + web_search_tool_result Events verarbeiten
- Chat-Frontend: web_search_start/end Events mit Suchindikator
- Dashboard: Badge zeigt Web-Suche mit Jahresversion
- UserRecord: IsAdmin Feld, DB-Migration is_admin Spalte
- AuthMiddleware: IsAdmin aus DB laden und in Context setzen
- BackupEndpoint: Admin-Check (403 für Nicht-Admins)
- AuthEndpoint: isAdmin in Login/Me Response
- Frontend: Backup-Section nur für Admins sichtbar
- Haiku 4.5 als Model-Option (Agent-Dropdown + ChatEndpoint)
- TODO: Cronjobs, Haiku ergänzt
2026-03-02 14:05:59 +01:00
Meleki 56d4d1be0a Dashboard: Badges für Sessions (Kontext) und Agents (Features, Skills, Model-Name)
- prettyModelName() von chat.js nach ui.js als globale Funktion verschoben
- Session-Cards: Kontext-Badge mit Tooltip wenn context vorhanden
- Agent-Cards: Badges für ToolChoice:any, AutoCommit, Soul, Identity, UserInfo, Memory
- Agent-Cards: Skill-Badges pro aktiviertem Skill (parallel geladen)
- Agent-Cards: Model-Name via prettyModelName() statt roher Model-ID
- Neue CSS-Klassen: badge-feature, badge-forced-feature, badge-skill
- Theme: primary/dangerous Farben angepasst
- Chat: Input overflow hidden→auto
2026-03-02 08:22:18 +01:00
Meleki 754b2aa3e3 fix: Krea-Tags in Code-Blöcken nicht parsen, Git-Verhalten unabhängig von ToolChoice
- renderMarkdown: Code-Blöcke (<pre>, <code>) vor Krea-Regex schützen
  via Platzhalter-Swap, danach wiederherstellen
- SystemPromptBuilder: Git-Commit-Regeln nur an Workspace gebunden,
  nicht mehr an ToolChoice:any – eigener PromptBlock mit Label
- CSS: modal-width Variable, Krea-Modal width:max-content, minor tweaks
- TODO.md aktualisiert
2026-03-02 07:59:29 +01:00
Meleki 71bb97be13 Fix: Krea-Thumbnails mit fester Höhe statt scrollDown-Listener
- _scrollOnImages() komplett entfernt (verursachte ungewolltes Runterscrollen)
- .krea-ref: feste Höhe 240px + min-width 240px + Placeholder-Hintergrund
- .krea-thumb: width/height 100% mit object-fit contain
- Browser reserviert Platz vor dem Laden → kein Layout-Shift
2026-03-01 21:40:15 +01:00
Meleki d42e5077c4 System-Prompt-Modal: strukturierte Blöcke via API statt Frontend-Parsing
- SystemPromptBuilder.BuildBlocks() liefert List<PromptBlock> mit Icon/Label/Content
- Neuer Endpoint GET /api/sessions/{id}/system-prompt-blocks (JSON-Array)
- Labels beschreiben präzise die Herkunft jedes Blocks (Agent, Session, System, Skills)
- Verhalten + Erinnerung nur noch mit Workspace + ToolChoice:any (Bugfix)
- Frontend: simples Block-Rendering statt komplexer Heuristik-Logik
- SP-Block Styling mit Label-Header und Content-Box
2026-03-01 21:31:38 +01:00
Meleki 40e56acc30 PROMPT.md-based skill injection, scroll-on-image-load fix, skill availability UI
- SkillService: read PROMPT.md instead of SKILL.md for system prompt injection
- SkillInfo: add HasPromptMd field, skills without PROMPT.md are not injectable
- Agent form: disable checkbox + warning for skills missing PROMPT.md
- Thumbnail size: 320px (was 300px)
- Chat: _scrollOnImages() re-scrolls after lazy-loaded images finish loading
- CSS: skill-unavailable/warning styling, adjusted thumb dimensions
2026-03-01 20:38:18 +01:00
Meleki 8d86406037 Krea inline thumbnails with cached WebP generation and gallery layout
- Add /api/skills/{slug}/output/{filename}/thumb endpoint with ImageSharp
- Generate 300px WebP thumbnails, cached in data/cache/skills/{slug}/
- Replace text badge with inline thumbnail preview in chat
- Click opens full-size image modal with backdrop blur
- wrapKreaGalleries() groups consecutive krea-refs into flex container
- Thumbnails lazy-loaded, cache invalidated when original is newer
2026-03-01 20:12:14 +01:00
Meleki 9e4ed6dada Add image preview support: Krea-tag parsing with modal, file-explorer preview, skill output endpoint, increase execute timeout to 180s
- SkillEndpoint: GET /api/skills/{slug}/output/{filename} for skill output files
- WorkspaceEndpoint: GET /api/workspace/raw for raw file serving (images)
- File-Explorer: Image preview for png/jpg/gif/webp/svg/bmp/ico
- Chat UI: Parse [Krea: filename] tags into clickable chips with image modal
- ToolService: Increase execute timeout from 30s to 180s for long-running skills
2026-03-01 20:00:35 +01:00
Meleki 575e5c1d44 feat: Ältere Nachrichten nachladen per Button (500er Batches)
- Backend: beforeId-Parameter + GetActiveMessagesBeforeId + GetActiveMessageCountBeforeId
- Frontend: Button 'X ältere Nachrichten laden' statt Info-Text
- Archiv-Button erscheint erst wenn alle älteren Nachrichten geladen
- Scroll-Position bleibt beim Nachladen erhalten
- Fix: wwwroot Quell-Dateien mit publish synchronisiert
2026-03-01 16:32:08 +01:00
Meleki 38bdb4408c feat: Chain-Meta Anzeige-Einstellung + Darstellung verbessern
- Settings: 'Chain-Info' Dropdown (Immer/Manchmal/Nie), Default 'Manchmal'
- Manchmal-Regeln: In+Out >= 10k Tokens, >= 25 Iterationen, >= 90s Dauer
- Model-Name: claude-opus-4-6 → Opus 4.6, Unbekanntes → 'Unbekannt'
- Tokens: In/Out zu einem Badge zusammengeführt
- Cache: Read/Write zu einem Badge zusammengeführt
- Iterations → Iterationen
2026-03-01 16:20:01 +01:00
Meleki 7490d483c2 feat: Tool-Call-Anzeige in Settings konfigurierbar (alle/modifikationen/verstecken)
- Neue Chat-Section in Settings mit Dropdown für Tool-Call-Sichtbarkeit
- Default: Nur Modifikationen (write_file, edit_file, delete_file, memory_write)
- isToolVisible() filtert beim Streaming, History und Archiv-Rendering
- Reset-Button setzt auch Tool-Call-Einstellung zurück
2026-03-01 16:04:00 +01:00
Meleki 402fbc5a40 fix: mark-button direkt nach reply-button einfügen statt am Ende 2026-03-01 15:20:46 +01:00
Meleki 120d3c8302 Mark-Button nach Reply-Button positionieren (appendChild statt prepend) 2026-03-01 01:35:15 +01:00
Meleki 19f32442b1 feat: Nachrichten als wichtig markieren (Stern-Button)
- MessageRecord: neues Property IsMarked
- DatabaseService: Migration is_marked, ToggleMessageMark(), GetMarkedMessages()
- HistoryEndpoint: PUT /api/messages/{id}/mark (Toggle)
- SystemPromptBuilder: markierte Nachrichten als Referenz im System-Prompt
- ChatEndpoint + SessionEndpoint: markierte Nachrichten laden und an Builder übergeben
- Frontend: Stern-Button (☆/★) auf jeder Nachricht, Toggle per API
- CSS: .marked-Klasse mit gelbem Seitenrand, Button-Styling
2026-03-01 01:30:21 +01:00
Meleki 21ca3a451b Reply-Button an den Anfang der Message prependen statt appenden 2026-03-01 01:22:03 +01:00
Meleki 57b4b5931b feat: Reply/Zitat-Feature für Chat-Nachrichten
- Reply-Button (Hover) auf jeder User/Assistant-Nachricht
- Reply-Preview-Leiste über dem Input-Feld (mit Timestamp, Rolle, Text-Preview)
- Beim Senden: Zitat als Kontext-Block vorangestellt (> [Zitat: HH:MM, Role]:)
- User-Nachrichten parsen Zitat-Blöcke als visuelle Quote-Elemente (blaue Borderlinie)
- Timestamp-basierte Referenzierung (HH:MM oder DD.MM. HH:MM)
- clearReply() bei Chat-Clear, Navigation und Destroy
2026-03-01 01:06:23 +01:00
Meleki 7c0e5d180a fix: Streaming-Navigation-Bugs (doppelte Messages, client_disconnected), Tool-Result ohne Truncation
- _chatAbandoned-Flag statt AbortController: Backend-Stream läuft bei Navigation weiter, Frontend ignoriert Events
- stopHistoryPolling() während Streaming-Poll aktiv, verhindert parallele Polls
- _pollLock in pollHistory() gegen Race-Conditions bei gleichzeitigen Poll-Aufrufen
- Tool-Result truncate(300) im Live-Chat entfernt, in History beibehalten
- Dashboard Badge-Styling verfeinert
2026-03-01 00:32:05 +01:00
Meleki f20d94b08f Streaming-Cursor: Block-Cursor-Stil, schnelleres Blinken, korrekte Inline-Positionierung 2026-02-28 21:48:15 +01:00
Meleki ab234fde69 Custom Commands: Typen (Hintergrund/Vordergrund/Nachricht) mit Output-Modal 2026-02-28 21:30:15 +01:00
Meleki 24cbce40c4 Globale .icon-btn Klasse für alle Icon-only Buttons, Hover-Filter, Theme-Anpassungen 2026-02-28 20:09:12 +01:00
Meleki 8c9f54da79 Alle Unicode-Icons durch Font Awesome 4.7 Icons ersetzt
- chat.js: Attachment-Labels, Streaming-Spinner, File/Ref-Previews, Warning/Error-Bubbles
- chat-page.js: Meta-Bar Status (Erfolg/Fehler), Backup-Meldungen
- dashboard.js: Nachrichten/Ordner/Persona-Icons
- session-page.js: Remove-Buttons
- history.js: Archiv-Badge, Attachment-Indicator
- ui.js: Archiv-Button, Warning/Error-Bubble Icons
- file-explorer.js: Verzeichnis/Datei-Icons, Back/Close-Buttons, getFileIcon()
- index.html: Header-Menü, Send-Button, Settings-Button
2026-02-28 19:10:24 +01:00
Meleki f74409dd89 Token-Optimierung: Prompt Caching + Tool-Result-Truncation in History 2026-02-28 16:21:08 +01:00
Meleki 76341dc42b Fix: Chat scrollt nach Font-Loading nochmal nach unten
scrollDown() wartet jetzt auf document.fonts.ready und scrollt erneut.
chat-page.js wartet nach loadHistory() zusätzlich per requestAnimationFrame
auf den Repaint nach Font-Swap.
2026-02-28 15:54:47 +01:00
Meleki 3cb468f4e8 Chat: User-Nachrichten [Datei:]-Tags als klickbare Chips rendern, System-Prompt mit Workspace-Pfad und Leerzeilen-Hinweis erweitern 2026-02-28 11:53:50 +01:00
Meleki b07e776b7a Massive style changes 2026-02-27 23:39:06 +01:00
Meleki e662548d79 Avatar: Ctrl+V paste + serverseitige Skalierung auf max 256px; Tool-Boxes: Diff-View für edit/write_file, Foldout für alle Tools, stop_reason im Chat; ImageSharp 3.1.12 2026-02-27 16:46:07 +01:00
Meleki 18b2feef4a Parse assistant messages as Markdown (marked.js) 2026-02-27 14:47:33 +01:00
Meleki c2335c542f Frontend: trim message text in all bubble renderers 2026-02-27 11:25:01 +01:00
Meleki 663f2c2a9a Multi-File Upload, Dateinamen in History, kein Auto-Scroll bei Attachment-Klick 2026-02-27 08:28:59 +01:00
Meleki 1271c9c651 File-Upload: Attachments-Tabelle, Base64-Speicherung, Frontend mit Drag&Drop/Paste/Preview, Error-Handling Fix 2026-02-27 08:11:46 +01:00
Meleki 843c210209 Archiv-System: Clear archiviert, Button lädt ältere Archive chronologisch, kein Limit 2026-02-26 16:52:58 +01:00
Meleki 19f926da05 Frontend Refactoring: HTML/CSS/JS getrennt, modulare Struktur 2026-02-26 15:43:10 +01:00