Meleki
2673aecc5b
feat: Emoji-Picker Button im Chat-Input (rechts neben Senden)
...
- #emojiBtn links neben #send platziert
- Fluent Emoji 3D Rendering via parseFluentEmojis()
- Kein Tooltip auf den Emoji-Buttons
- Picker öffnet sich rechts-ausgerichtet über dem Button
- emoji.userdata.js geladen (Kategorien + Mappings)
- Schließt beim Klick außerhalb oder beim destroy()
2026-03-03 16:18:00 +01:00
Meleki
cdd3414771
Fix button spacing, opacity simplification, gitignore cleanup
2026-03-03 15:53:59 +01:00
Meleki
36fd5a6b6e
refactor(css): selektoren in main.css zusammenfassen
2026-03-03 15:20:30 +01:00
Meleki
bf0d65e75a
ui: scrollbar am body-rand, todo_write custom renderer
2026-03-03 15:10:44 +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
5f2b2e2f18
feat: add glob, grep and todo_write builtin tools
2026-03-03 14:10:07 +01:00
Meleki
c3865d239f
chore: CSS-Cleanup opacity → var(--semi-transparent), TODO-Updates
2026-03-03 11:52: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
493dfcda1c
fix: various small fixes (TODO, CSS z-index, telegram status styling, settings prompt)
2026-03-03 10:30:36 +01:00
Meleki
f203ed7f47
feat: Auth-Tokens in SQLite persistieren statt in-memory
...
Tokens überleben jetzt App-Restarts. AuthService schreibt/liest
Tokens aus einer 'tokens'-Tabelle in der SQLite-DB.
Logout (RevokeToken) funktioniert weiterhin korrekt.
2026-03-03 10:07:06 +01:00
Meleki
0c4d32de0f
fix: Backup-Download (0 Bytes + fehlender Dateiname)
...
- api.js: credentials: 'include' hinzugefügt (Auth-Cookie)
- BackupEndpoint.cs: Task<IResult> → Task mit direktem Response-Handling
(ASP.NET hat IResult nicht korrekt verarbeitet → leerer Body)
2026-03-03 10:01:30 +01:00
Meleki
a32de29d25
style: Card-Dropdown öffnet nach links unten statt rechts
...
- Position: unterhalb des Trigger-Buttons
- Rechte Kante des Dropdowns an rechter Kante des Buttons ausgerichtet
- Fallback: nach oben wenn unten kein Platz
2026-03-03 09:29:58 +01:00
Meleki
e2927893f7
style: Card-Dropdown öffnet nach rechts statt unten
...
- Position: rechts neben dem Trigger-Button (gleiche Höhe)
- Fallback: links öffnen wenn rechts kein Platz
- Viewport-Overflow-Check für unten und links
2026-03-03 09:27:09 +01:00
Meleki
90afd79e76
fix: Dashboard Card-Dropdown nicht mehr abgeschnitten
...
- CSS: position: fixed statt absolute, z-index: 1000, box-shadow
- JS: Position dynamisch berechnet (getBoundingClientRect) beim Öffnen
- Viewport-Overflow-Korrektur falls Dropdown zu weit rechts/links
2026-03-03 09:24:26 +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
99914bd343
feat: Stream-Error-Info für Debugging bei unexpected_end / max_tokens
...
- chains Tabelle: neue Spalte stream_error_info (TEXT)
- ChainRecord: neues Property StreamErrorInfo
- AnthropicService/ProcessStream: sammelt Debug-Infos bei problematischen
stop_reasons (unexpected_end, max_tokens) und API error-Events
- FinalizeChain: speichert stream_error_info in DB
- SSE done-Event: enthält streamErrorInfo für Client-seitiges Debugging
2026-03-03 09:14:04 +01:00
Meleki
dc87bf802a
fix: Telegram DELETE /webhook von Auth nicht mehr ausschließen
...
AuthMiddleware hat /api/telegram/webhook komplett von der Auth
ausgeschlossen – unabhängig von der HTTP-Methode. Dadurch hatte
DELETE /api/telegram/webhook kein IsAdmin gesetzt → 403.
Fix: Nur POST auf diesen Pfad (= eingehender Telegram-Webhook)
wird von der Auth ausgenommen.
2026-03-03 09:12:13 +01:00
Meleki
e5d76bb0a9
fix: credentials: include bei allen Telegram API-Requests
2026-03-03 09:09:15 +01:00
Meleki
4ac042e512
Telegram: Webhook-Verwaltung in Einstellungen-Seite
...
- Backend: DELETE /api/telegram/webhook Endpoint + TelegramService.DeleteWebhook()
- api.js: apiTelegramWebhookInfo(), apiTelegramRegisterWebhook(), apiTelegramDeleteWebhook()
- Settings-Page: Neue 'Telegram Bot' Section (nur für Admins, nur wenn konfiguriert)
- Status abrufen: Webhook-URL, ausstehende Updates, letzter Fehler, Aktiv-Badge
- Webhook registrieren: prompt() für Base-URL, POST an Telegram API
- Webhook entfernen: Bestätigungsdialog + DELETE
- CSS: .telegram-status-box, .tg-status-row, .tg-label, .tg-value, .tg-badge
2026-03-03 09:06:22 +01:00
Meleki
7d237c866a
Dashboard: Telegram-Verknüpfung Button + Modal
...
- Session-Card-Menü: 'Telegram verknüpfen' zwischen Chat öffnen und Bearbeiten
- Button nur sichtbar wenn Telegram Bot konfiguriert (GET /api/telegram/status)
- Klick generiert 6-stelligen Link-Code (POST /api/telegram/link)
- Modal zeigt '/link CODE' mit Copy-Button, 5 Min gültig
- Neuer Backend-Endpoint GET /api/telegram/status (IsConfigured)
- API-Funktionen: apiTelegramStatus(), apiTelegramLink()
- Modal-CSS nach bestehendem .fe-overlay Pattern
2026-03-03 07:40:17 +01:00
Meleki
24d818f5d2
docs: TODO Dashboard Menu-Dropdown Overflow-Bug notiert
2026-03-03 06:30:08 +01:00
Meleki
0dd7c38751
feat: Telegram Bot Integration
...
- TelegramService: Non-Streaming Claude Chat mit Tool-Loop,
Commands (/start, /link, /session, /new, /clear, /status, /unlink),
Nachrichten-Splitting bei >4096 Zeichen, Typing-Indicator,
History-Aufbau aus DB, Token-Usage-Tracking
- TelegramEndpoint: Webhook (POST, no-auth), Link-Code-Generierung
(POST, auth), Webhook-Registrierung + Info (Admin)
- DatabaseService: telegram_links Tabelle mit Link-Code-Flow
(6-stelliger Code, 5 Min Ablauf), GetUserSessions
- AuthMiddleware: /api/telegram/webhook von Auth ausgenommen
- Session-Verknüpfung via Link-Code (Web-UI generiert Code,
Telegram /link CODE löst ein)
- TelegramLinkRecord Model
2026-03-03 06:30:05 +01:00
Meleki
81714b1f4c
Dashboard: Claude API Status-Bar
...
- Zeigt Anthropic API Status aus status.claude.com an
- Nur sichtbar bei aktiven Incidents (minor/major/critical)
- Farbcodierte Indikatoren (gelb=warning, rot=danger)
- Stille Fehlerbehandlung bei nicht erreichbarem Status-Endpoint
2026-03-03 05:53:39 +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
e2c887aee6
Update web search version title
2026-03-02 16:12:01 +01:00
Meleki
c2ae2e0ab4
Update TODO.md, Tooltip aktualisiert
2026-03-02 16:07:55 +01:00
Meleki
1ce607ccdd
fix: USER.md-Referenzen in UI durch Persona ersetzt
2026-03-02 15:06:54 +01:00
Meleki
c128341f95
fix: Passwort-Änderung bei falschem Passwort gibt 403 statt 401 zurück
...
401 triggerte den globalen Auth-Handler und redirectete zum Login-Screen.
403 (Forbidden) ist semantisch korrekt und zeigt die Fehlermeldung inline an.
2026-03-02 15:04:16 +01:00
Meleki
7149904ae4
Profil-Seite: Anzeigename, Passwort ändern, Persona (ersetzt USER.md)
...
- Neuer Menüpunkt 'Mein Profil' statt 'Logout'
- Profil-Page: Anzeigename, Persona (Freitext), Passwort ändern, Logout
- ProfileEndpoint: GET/PUT /api/profile, PUT /api/profile/password
- User-Persona im System-Prompt statt USER.md (Fallback: Anzeigename/Username)
- SystemPromptBuilder: dataDir-Parameter entfernt, userPersona-Parameter hinzugefügt
- DB-Migration: persona-Spalte in users-Tabelle
2026-03-02 15:02:39 +01:00
Meleki
f49c526384
Frontend: Aufeinanderfolgende Assistant-Text-Messages gleicher Iteration mergen
...
- Neue Hilfsfunktion _mergeConsecutiveAssistantTexts() in history.js
- Nahtloses Zusammenfügen (Whitespace-Trenner) bei gleicher Iteration
- Angewandt in renderMessages(), _renderMessagesIntoFragment() und loadLatestArchive()
- Behebt fragmentierte Darstellung bei Web-Search-Antworten
2026-03-02 14:29:24 +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
485f47b29a
Browser Zurück/Vor-Navigation: pushState statt replaceState, popstate-Event
2026-03-02 13:02:52 +01:00
Meleki
4e7058e481
Dashboard: Placeholder-Cards durch Header-Buttons ersetzen + UI-Feinschliff
...
- Placeholder-Cards (Neue Session/Neuer Agent) entfernt
- Stattdessen Buttons in den Section-Headern neben den Titeln
- Section-Header h2 Font-Size angepasst
- Agent-Formular: Ego- und Skills-Labels hinzugefügt, Text-Korrektur
- Form-CSS: Gap und Checkbox-Spacing verfeinert, Selektoren präzisiert
2026-03-02 12:59:32 +01:00
Meleki
90c24b0b1a
Chat-Button im Dashboard deaktivieren wenn kein Agent zugewiesen
2026-03-02 12:33:23 +01:00
Meleki
d05023b1da
Fallback-Workspace /tmp wenn Skills aktiv aber kein Workspace gesetzt
2026-03-02 12:31:28 +01:00
Meleki
9af1465ee5
Hourglass-Icon Spin-Animation hinzugefügt
2026-03-02 11:46:58 +01:00
Meleki
7614141760
feat: User-Zuordnung für Sessions und Agents
...
- UserId-Feld zu SessionRecord und AgentRecord hinzugefügt
- DB-Migration: user_id Spalte + bestehende Daten dem Admin zuweisen
- Alle Endpoints filtern/prüfen nach UserId des eingeloggten Users
- HttpContextExtensions.GetUserId() Helper für konsistenten Zugriff
- Betrifft: Agent, Session, Chat, History, Workspace, Skill Endpoints
- Sessions/Agents anderer User sind nicht sichtbar/zugreifbar
2026-03-02 11:39:55 +01:00
Meleki
9a59ae686d
feat: User-Management mit Token-basierter Authentifizierung
...
Backend:
- UserRecord Model + Users-Tabelle in DB
- AuthService: SHA256-Passwort-Hashing, Token-Verwaltung (ConcurrentDictionary)
- AuthMiddleware: Schützt alle /api/-Routes (außer /api/auth/login)
- AuthEndpoint: Login, Logout, Me
- Default-User admin/admin wird automatisch erstellt
Frontend:
- Login-Page mit Formular (Enter-Key-Support)
- Globaler Fetch-Interceptor: 401 → automatisch Login-Redirect
- Auth-Check beim App-Start und bei Hash-Änderungen
- Logout-Link im Dashboard-Header
- Login-CSS: Zentrierte Login-Box
2026-03-02 11:29:09 +01:00
Meleki
a1c54bf376
feat: ToolChoice + ToolNames pro Chain in DB speichern
...
- ChainRecord: neue Felder ToolChoice (auto/any) und ToolNames (JSON-Array)
- DatabaseService: Migration tool_choice + tool_names Spalten, INSERT erweitert
- ChatEndpoint: berechnet Tools vor Chain-Erstellung, speichert Werte mit
- ToolService: execute-Timeout Beschreibung korrigiert (30s → 180s)
2026-03-02 10:42:54 +01:00
Meleki
b24a000784
Zeilenreferenz-Hinweis im System-Prompt auch ohne ToolChoice:any
...
- toolAny+workspace: Kombinierter Erinnerungsblock (Tool-Pflicht + Zeilenreferenz)
- !toolAny+workspace: Eigener Erinnerungsblock nur mit Zeilenreferenz-Hinweis
- Kein doppelter ERINNERUNG-Header mehr
2026-03-02 10:30:22 +01:00
Meleki
41b0d6e350
TODO: CodeMirror horizontal scroll als erledigt markiert
2026-03-02 10:20:23 +01:00
Meleki
ea0b95ef52
Agent-Dateien: Button aus Form entfernt, ins Card-Menu verschoben
...
- agentFilesSection aus index.html entfernt
- filesSection/filesBtn Referenzen aus agent-page.js entfernt
- Neuer Menüeintrag 'Dateien verwalten' im Agent-Card-Menu (dashboard.js)
- Icons für alle Card-Menu-Einträge (Session + Agent)
- card-menu-item: flex layout mit gap für Icon-Ausrichtung
2026-03-02 10:19:31 +01:00
Meleki
32cb98a8c7
Dashboard: Commit-Badge-Labels kürzen (Prefix 'Commit:' entfernt)
2026-03-02 09:44:40 +01:00
Meleki
40bab457d9
AutoCommit: Bool → Dropdown (mention/enforce/forbid), leerer System-Prompt fix
2026-03-02 09:41:26 +01:00
Meleki
7410a18755
Fix: CodeMirror horizontaler Scroll im File Explorer
...
- min-width: 0 auf allen Flex-Ebenen (.fe-main, .fe-cm-wrap, #feCmHost, .CodeMirror)
- overflow: auto Override entfernt, CodeMirror-Default (overflow: scroll) reicht
- Klassisches Flexbox min-width: auto Problem behoben
2026-03-02 08:55:33 +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
4bf500ad47
feat: Stream-Abbruch per Stop-Button
...
- Neuer Stop-Button (#stop) neben Send-Button, erscheint nur während Stream
- AbortController in chat.js: abort() schließt SSE-Verbindung → Backend CancellationToken triggered
- apiChat() akzeptiert optionales AbortSignal
- AbortError-Handling: zeigt 'Abgebrochen' statt Fehlermeldung
- Button-Toggle in sendMessage(), stopStreaming(), startStreamingPoll(), Page-Load-Recovery
- CSS: .stop-btn mit --dangerous Farbe
- Diverse kleine UI-Fixes (TODO.md, theme.css box-spacing, settings-section Layout)
2026-03-02 06:52:26 +01:00
Meleki
190a0d0a8b
Backup: tar.gz ohne ./Root-Ordner – Einträge direkt auf oberster Ebene
2026-03-01 21:45:37 +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