Commit graph

102 commits

Author SHA1 Message Date
Eddy
f6a12de6ef fix: Panel als fester Teil des Layouts statt Overlay [appimage]
All checks were successful
Build AppImage / build (push) Successful in 6m56s
ToolDrawer ist jetzt 3. Spalte im Flex-Layout (Sidebar | Chat | Panel).
Kein position:fixed, kein Backdrop, kein Overlay. Panel bleibt fest offen
bis X-Button, Esc oder erneuter Sidebar-Klick. Chat wird schmaler.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-05-02 22:42:31 +02:00
Eddy
113efaacc6 feat: Smart Hints v3 (TF-gewichtete Keywords) + Mic-Button Fix [appimage]
Some checks failed
Build AppImage / build (push) Failing after 2m30s
- KB-Hints: Keywords werden über die Session akkumuliert mit Häufigkeitszähler.
  Top-8 gewichtete Keywords für die Suche — je mehr man zum Thema schreibt,
  desto präziser werden die Hints. Generische Einmal-Keywords fallen weg.
- Mic-Button: micPressed-Guard verhindert dass pointerleave ohne vorherigen
  pointerdown die Aufnahme startet (Hover-Aktivierung Bug).

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-05-02 22:27:10 +02:00
Eddy
f80f37884c fix: Drawer bleibt offen + Auto-Scroll MutationObserver + KB-Hints Relevanz [appimage]
Some checks failed
Build AppImage / build (push) Has been cancelled
- Drawer: Backdrop entfernt, Panel bleibt fest offen bis X/Esc/Toggle
- Auto-Scroll: MutationObserver statt ResizeObserver (feuert bei jeder
  DOM-Aenderung), $effect scrollt nach tick() statt sofort
- KB-Hints: 60+ generische Stoppwoerter ergaenzt (bleibt, offen, rechts...),
  Relevanz-Schwelle 1.5 filtert zu generische Treffer raus

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-05-02 22:22:10 +02:00
Eddy
c2f2cae2ef fix: Auto-Scroll bei Assistant-Antworten repariert [appimage]
All checks were successful
Build AppImage / build (push) Successful in 6m56s
Role-Change-Effect scrollt jetzt bei jedem Rollenwechsel (nicht nur user),
Content-Tracker trackt auch parts-Array fuer Tool-Calls und Streaming.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-05-02 21:51:56 +02:00
Eddy
09a9513983 fix: Chat-Chronologie + Auto-Scroll + KB-Hints — 8 Bugs behoben [appimage]
Some checks failed
Build AppImage / build (push) Has been cancelled
- Messages werden nach Timestamp sortiert + Race-Condition-sicherer Merge beim DB-Load
- ChatPanel.scrollToBottom() auf falschem Container entfernt, Scroll nur noch in MessageList
- userScrolledUp wird bei Session-Wechsel resettet (blockierte Auto-Scroll)
- Instant-Scroll Guard schneller freigegeben (1 statt 2 rAFs bei Streaming)
- KB-Hints: Session-Reset bei Chat-Wechsel, Relevance statt Priority im Ranking
- KB-Keywords nicht mehr akkumuliert (verhindert generische Dauertreffer)
- Cache-TTL 60s→15s, Hints alle 2 statt 3 Nachrichten

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-05-02 20:46:42 +02:00
Eddy
fc71e6c634 fix: AnimatedFileEdit-Layout — Zeilen brechen jetzt um statt eine endlose Zeile [appimage]
All checks were successful
Build AppImage / build (push) Successful in 7m47s
- AnimatedFileEdit: <pre> -> <div> + display:block fuer .line
- white-space: pre-wrap damit lange Zeilen umbrechen statt querzuscrollen
- min-height auf .line damit leere Zeilen sichtbar bleiben
- presentation: align-items stretch + file-edit auf volle Breite (max 1400px)

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-27 22:37:56 +02:00
Eddy
71ab5ec830 feat: Schulungsmodus Datei-Animationen + Permission-Toggle + Chat-Scroll-Fix [appimage]
All checks were successful
Build AppImage / build (push) Successful in 8m18s
- AnimatedFileEdit.svelte: neue Komponente fuer animierte Datei-Aenderungen im Praesentation-Fenster
- Schulungsmodus: 5-Stufen-Speed-Regler (Lehrer 10cps bis Data-Modus instant+Glow)
- Schulungsmodus: Live-Catchup-Button, Auto-Weiter nach Slide-Abschluss
- ChatPanel: Permission-Mode-Toggle links vom Textfeld (default/acceptEdits/bypassPermissions)
- ApprovalBar: Floating-Card mit blauem Glow, Buttons umbenannt (Anwenden/Ablehnen)
- MessageList: Scroll-Guard mit scrollend-Event + 700ms-Fallback statt doppeltem rAF
- MessageList: User-Nachrichten scrollen sofort nach unten (requestAnimationFrame + force)
- Message.svelte: MessagePart[]-basiertes Rendering fuer chronologische Reihenfolge
- events.ts: file-change sendet Slide an Praesentation-Fenster wenn offen
- teaching.rs: presentation_send_slide_if_open Command
- claude.rs: set/get_permission_mode Commands mit DB-Persistenz

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-27 22:13:52 +02:00
Eddy
79f4f9fb21 fix: UTF-8-Crash + Input-Reset + ApprovalBar + Scroll/Streaming-Polish [appimage]
All checks were successful
Build AppImage / build (push) Successful in 8m20s
Crash-Fix:
- src/db.rs:801 panickte mit "byte index 240 is not a char boundary"
  mitten in einem -Emoji → SIGABRT. Neues strutil-Modul mit
  safe_truncate()/safe_truncate_ellipsis() (5 Tests grün), an allen
  &s[..N]-Stellen in db/claude/knowledge/session/memory.rs eingebaut.
- update.rs: Stale Lock-Files vom letzten Crash werden jetzt
  protokolliert ("🧹 Stale Lock-Datei aus vorherigem Crash gefunden").

Chat-Polish:
- Input-Textfeld wird nach Senden zuverlässig geleert (Store-Reset +
  DOM-Reset + tick — Svelte 5 bind:value mit Auto-Subscription
  aktualisiert sonst nicht synchron).
- ApprovalBar.svelte (NEU): Sticky-Bar überm Input mit klar
  beschrifteten Buttons "Übernehmen"/"Verwerfen" statt mehrdeutigem
  "Behalten/Zurueck". Bleibt sichtbar wenn der Chat scrollt. Klick
  auf Datei-Name scrollt zur Inline-Karte und blinkt sie. Shortcuts
  Ctrl+Enter/Ctrl+Backspace.
- MessageList: Auto-Scroll trackt jetzt auch toolCalls.length und
  Status-Änderungen, plus ResizeObserver am Container. Smooth bei
  kleinen Distanzen, instant bei großen.
- Streaming-Caret: pulsierender Block-Cursor mit Glow-Shadow.
- Tool-Cards: Slide-In-Transition + Shimmer-Animation auf running.
- WorkingIndicator: Verb passt sich an processingPhase an.
2026-04-27 20:55:08 +02:00
Eddy
75a93987fe fix: Voice-Stop greift hart durch + Schriftgroesse wirkt jetzt im Chat [appimage]
All checks were successful
Build AppImage / build (push) Successful in 7m11s
Voice-Stop:
- TTS-Audio jetzt vollstaendig zerstoert (pause + src='' + load) statt nur pause
- Wartende speakAndWait()-Promise wird beim Stop aufgeloest (vorher Hang)
- isActive()-Check direkt nach text_to_speech Result, kein Audio-Start mehr nach Stop

Schriftgroesse:
- .content hatte feste 13.5px → ueberschrieb --chat-font-size
- Headings (h1-h3) hatten feste px-Werte → jetzt em (relativ zu User-Schrift)

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-27 18:36:00 +02:00
Eddy
f821e321aa feat: TTS-Stimmen-Auswahl + Schrift kleiner einstellbar [appimage]
All checks were successful
Build AppImage / build (push) Successful in 6m49s
- Neue Settings-Sektion "Stimme" mit Radio-Buttons fuer alle Piper-Voices
- Anhoer-Button pro Stimme mit Beispielsatz
- TtsVoice in chatAppearance-Store persistiert, ConversationEngine nutzt Auswahl
- Schriftgroesse jetzt 6-20 px (vorher 8-18), Code-Bloecke 5-18 px (vorher 7-16)
- Empfohlen: thorsten-high (maennlich, beste Qualitaet)
  oder ramona / eva_k / kerstin (weiblich, low-quality)

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-27 17:13:15 +02:00
Eddy
fec8aea22c feat: KB-Hints, Voice-Konversation, Chat-Darstellung, Cross-Session-Recall [appimage]
All checks were successful
Build AppImage / build (push) Successful in 8m8s
- Block A: KB-Hint-Pillen im Chat (💡) über Tool-Cards, Klick öffnet KB-Browser
- Block B: KB-Usage-Tracking (usage_count/last_used), Sortier-Boost für bewährte Einträge
- Block C: Cross-Session-Recall per SQLite-FTS5 (🕒 Pille "Schon mal beantwortet")
- Block D: Voice-Konversationsmodus (Langes Halten = Loop mit Barge-In-Unterbrechung)
- Block F: Select-Button im Audit-Log (appearance:none + SVG-Chevron, WebKitGTK-Fix)
- Block G: Chat-Darstellungseinstellungen (Schriftart, -größe, Zeilenhöhe, Code-Größe)
- WorkingIndicator: Deutsche Animationstexte beim Verarbeiten

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-27 16:54:58 +02:00
Eddy
ad9833fcb8 feat: Phase 8+9 — Inline Tool-Karten + komplettes UI-Redesign auf Cursor/Zed-Niveau [appimage]
Some checks failed
Build AppImage / build (push) Has been cancelled
Phase 8 (VS-Code-Look Chatbereich):
- Linksbuendige Messages mit Avatar-Spalte, Hover-Actions
- Inline Tool-Karten (Read/Edit/Bash/Generic) in Assistant-Messages
- Edit-Karten zeigen Diff direkt mit Accept/Reject
- Tool-Calls werden via events.ts an letzte Assistant-Message gebunden
- Smart-Sticky-Scroll (Auto-Scroll stoppt wenn User selbst scrollt)
- OOM-Bug durch MutationObserver mit subtree:true behoben

Phase 9 (Komplettes UI-Redesign):
- Design-System in app.css: 4 Graustufen, 1 Akzent (#007acc), 4 Status-Farben,
  5 Schriftgroessen (11/12/13/14/16), 4-Punkt-Spacing, 2 Radius-Werte
- vscode.css als Aliase auf das neue System
- UI-Library src/lib/ui/: Button, Card, Icon, Badge, StatusDot, Tooltip, Drawer, Tabs
- Lucide-svelte fuer SVG-Icons (ersetzt Emojis im Chrome)
- StatusBar (22px) ersetzt ueberfuellten Footer mit 6+ Stats
- Titlebar entruempelt: ✱-Logo + Stop + Schulungsmodus + Version
- 2-spaltiges Layout (Sidebar 240px + Hauptbereich) statt 4-Pane-Zerstueckelung
- ToolDrawer: 13 Panels in 4 Gruppen (Aktivitaet/Speicher/Werkzeuge/Einstellungen),
  jede Gruppe mit internen Tabs, Esc schliesst
- Cmd+K global oeffnet QuickActions als zentrale Navigation
- StatusDot-Komponente ersetzt Emoji-Status (🟢🟡🔴) in AgentView
- Hardgecodete Farben (#ef4444, #22c55e, #eab308 ...) in 9 Komponenten durch
  CSS-Variablen ersetzt

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-27 14:27:09 +02:00
Eddy
4780128c6f fix: doppelten Activity-Indicator verhindern + gitignore aufräumen [appimage]
All checks were successful
Build AppImage / build (push) Successful in 7m14s
Wenn User während laufender Verarbeitung tippt, erschien "Denkt nach"
zweimal: einmal in der leeren Assistant-Message und nochmal als
separater Block. Jetzt wird der separate Block nur gezeigt wenn
nirgends eine leere Assistant-Message existiert.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-22 13:46:02 +02:00
Eddy
c779fa7fc5 feat: Phase 7 — Accept/Reject DiffView, @-Mentions, Checkpoint/Rewind [appimage]
All checks were successful
Build AppImage / build (push) Successful in 10m19s
Accept/Reject DiffView:
- Bridge sendet checkpoint-before/after Events bei Edit/Write
- Rust speichert Datei-Snapshots in SQLite (content_before/after)
- Frontend zeigt interaktive DiffView mit Accept/Reject-Buttons
- Bei Reject: Datei wird automatisch auf Zustand VOR der Aenderung zurueckgesetzt
- Neues Modul: checkpoint.rs mit Accept/Reject/Rewind Commands

@-Mentions (Datei-Referenzen):
- @datei.ts im Chat-Input oeffnet Fuzzy-Autocomplete
- Fuzzy-Suche scannt Projektverzeichnis (max 5000 Dateien)
- Score-basiertes Ranking (Anfang, Separator, konsekutive Matches)
- Bei Auswahl: Dateiinhalt wird in Prompt injiziert (als Code-Block)
- @datei.ts#5-10 fuer Zeilenbereiche
- Neue Komponente: FileMention.svelte

Checkpoint/Rewind:
- Automatische Snapshots bei jeder Dateiänderung (Edit/Write)
- SQLite-Tabelle checkpoints mit content_before/content_after
- Rewind: Alle Dateien ab einem Checkpoint zuruecksetzen
- Commands: accept_change, reject_change, list_checkpoints, rewind_to_checkpoint

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-22 08:56:56 +02:00
Eddy
f394d69b70 feat: Nachrichten während Claude arbeitet senden — wie in VS Code Extension
Bridge hat jetzt eine interne Pending-Queue: Nachrichten die während einer
laufenden query() eingehen werden gepuffert und nach dem aktuellen Turn
automatisch FIFO abgearbeitet. Kein Frontend-Queue mehr nötig.

User kann jetzt wie in Claude Code/VS Code Extension weiter tippen während
Claude arbeitet. Nachrichten erscheinen sofort im Chat und werden nahtlos
nach dem aktuellen Turn verarbeitet.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-22 08:36:21 +02:00
Eddy
61541098d7 fix: Mikrofon-Fehlerbehandlung — UI friert auf NixOS nicht mehr ein [appimage]
All checks were successful
Build AppImage / build (push) Successful in 8m39s
Problem: Wenn auf NixOS der WebKit-Audio-Stack unvollständig ist
(fehlendes gst-plugin-pipewire, pipewire-pulse, Policy-Datei oder
whisper-cli/piper Binary), hängt die App fest ohne Fehlermeldung —
weder getUserMedia noch die Backend-Prozesse reagieren.

Frontend (VoicePanel.svelte):
- Preflight: prüft ob navigator.mediaDevices überhaupt existiert
- getUserMedia via Promise.race gegen 8s-Timeout (sonst hängt es ewig)
- Kategorisierte Fehler: NotAllowedError → Berechtigung,
  NotFoundError → keine Hardware, NotReadableError → PipeWire-Problem
- Neuer 'connecting'-State mit 🔌-Icon — User sieht dass was passiert
- AudioContext-Konstruktor in try/catch

Backend (voice.rs):
- ffmpeg: 20s-Timeout + spezifische Fehlermeldung bei fehlendem Binary
- whisper-cli: 60s-Timeout, kein stilles Hängen mehr
- piper-tts: 30s-Timeout, Spawn-Fehler benennt NixOS-Wrapper
- Temp-Dateien werden bei Timeout auch aufgeräumt
2026-04-21 16:42:49 +02:00
Eddy
94c7b9358d fix: Aktivitäts-Liste — grüner Puls-Punkt bleibt nicht mehr hängen
Tool-Start und Tool-End hatten unterschiedliche IDs: tool-start generierte
eine zufällige UUID, tool-end suchte nach der Backend-ID → kein Match →
alle Tool-Calls blieben ewig auf "running" mit pulsierendem grünen Punkt.

Fix: Backend-ID wird jetzt bei tool-start durchgereicht + Fallback auf
letzten laufenden Tool-Call wenn ID nicht matcht.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-21 15:04:32 +02:00
Eddy
50c92072f5 fix: Projekt wird beim Session-Klick automatisch mitgewechselt
Wenn eine Session angeklickt wird die zu einem anderen Projekt gehört,
wird jetzt automatisch switch_project aufgerufen (CWD, Context, KB-Filter).

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-21 15:02:56 +02:00
Eddy
9cc97311b0 fix: Panel-Resize nach Chat-Detach/Reattach funktioniert wieder [appimage]
All checks were successful
Build AppImage / build (push) Successful in 10m7s
{#key $chatDetached} um PaneGroup erzwingt kompletten Re-Mount.
PaneForge verlor vorher die Resize-Handler wenn Pane per {#if} entfernt wurde.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-21 14:53:53 +02:00
Eddy
97488ded61 fix: Chat-Panel Layout im Detach-Modus — Textzeile wird nicht mehr abgeschnitten [appimage]
Some checks failed
Build AppImage / build (push) Has been cancelled
- .chat-input: flex-shrink: 0 + max-height verhindert Überlaufen
- .chat-input textarea: max-height + overflow-y für Scroll bei langen Eingaben
- .chat-panel + .chat-messages: min-height: 0 für korrektes Flex-Overflow (WebKitGTK)

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-21 14:35:53 +02:00
Eddy
c2db56f392 feat: Sessions an Projekt/Workspace binden [appimage]
Some checks failed
Build AppImage / build (push) Failing after 3m54s
Sessions werden jetzt nach aktivem Projekt gefiltert (working_dir).
Beim Projektwechsel sieht man nur noch die Sessions die zu diesem
Projekt gehören. Backend: load_sessions_filtered() mit optionalem
WHERE working_dir-Filter. Ohne Projekt: alle Sessions (abwärtskompatibel).

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-21 13:27:33 +02:00
Eddy
ebbb65a1a9 feat: Modus-Anzeige im Chat + Plan-Präsentation [appimage]
All checks were successful
Build AppImage / build (push) Successful in 9m31s
- Mode-Badge über dem Textfeld zeigt aktiven Agent-Modus (Handlanger/Experten/Auto) mit Verarbeitungsphase
- Plan-Erkennung: erkennt strukturierte Pläne in Claude-Antworten (Mermaid, Sektionen, Schrittlisten)
- Automatisches Senden erkannter Pläne ans Präsentationsfenster als Slides
- PWA Docker Build Pipeline hinzugefügt

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-21 13:16:10 +02:00
Eddy
d4c57b777a feat: Guard-Rails UI, D-Bus Aktionen, Screenshot-Analyse [appimage]
All checks were successful
Build AppImage / build (push) Successful in 8m16s
Guard-Rails: Live-Feed mit Risiko-Badges, 3 Tabs, Ein-Klick-Freigabe
D-Bus: 10 Desktop-Aktionen (Dolphin, Kate, Konsole, Firefox, Notify)
Screenshot: Region/Vollbild via spectacle/scrot, Vorschau + Chat-Send

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-21 12:02:24 +02:00
Eddy
87ba8f7bdf feat: Global Hotkey (Super+C) + Clipboard-Watch + Desktop-Integration [appimage]
All checks were successful
Build AppImage / build (push) Successful in 8m53s
- Global Hotkey: Super+C öffnet Claude-Fenster und fokussiert Input von überall
- Clipboard-Watch: Erkennt Code/URLs/Fehler/Pfade in Zwischenablage, zeigt Vorschlag
- tauri-plugin-global-shortcut + tauri-plugin-dialog integriert
- focus-chat-input Event für Hotkey → Input-Fokus
- clipboard-changed Event für Watch → Chat-Vorschlag

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-21 11:50:56 +02:00
Eddy
6efbd5de5f feat: Projekt-Wechsel mit File-Browser + Nix-Wrapper Audio-Fixes [appimage]
All checks were successful
Build AppImage / build (push) Successful in 9m35s
- File-Browser Dialog (tauri-plugin-dialog) für Projektverzeichnis-Auswahl
- Auto-Name aus Verzeichnisname beim Projekt-Hinzufügen
- Nix-Wrapper: GStreamer Core-Plugins (valve) + ffmpeg-headless im PATH
- Nix-Wrapper: Version 0.1.1 mit korrektem gstreamer.out Output

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-21 11:37:07 +02:00
Eddy
68d2500037 feat: Projekt-Wechsel, File-Drop, Persistent Memory [appimage]
All checks were successful
Build AppImage / build (push) Successful in 8m45s
- Projekt-Wechsel UI in SessionList: Dropdown, Hinzufügen/Entfernen, auto Sticky-Context
- File-Drop auf Chat: Text als Code-Block, Bilder als Base64, 500KB Limit
- Persistent Memory: auto_load Einträge in Claude-Context injiziert (Cross-Session)
- Memory CRUD Tauri-Commands: save/delete/list/autoload
- Svelte 5 Syntax-Fix: on:click → onclick in SessionList.svelte

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-21 10:55:35 +02:00
Eddy
6e1a3c41f2 fix: Mikrofon hängt — PipeWire-Fallback + getUserMedia Timeout [appimage]
All checks were successful
Build AppImage / build (push) Successful in 8m22s
Wenn PipeWire nicht läuft (z.B. PulseAudio/xRDP), wird pipewiresrc
auf Rank 0 gesetzt damit WebKitGTK auf pulsesrc zurückfällt.
getUserMedia bekommt 5s Timeout statt endlos zu hängen.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-21 10:30:18 +02:00
Eddy
a01959a55c fix: Svelte 5 on:click → onclick Syntax in +page.svelte [appimage]
All checks were successful
Build AppImage / build (push) Successful in 9m5s
Build schlug fehl wegen gemischter Event-Handler-Syntax (Svelte 5
erlaubt kein Mischen von on:click und onclick im selben Component).

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-21 10:18:33 +02:00
Eddy
9c6026de40 feat: Quick-Actions (Ctrl+K) + GStreamer-Fix für Produktion [appimage]
Some checks failed
Build AppImage / build (push) Failing after 14s
Quick-Actions Palette mit VS-Code-artigem UI: Suche, Kategorien
(Build/Git/Session/Navigation/Voice/Tools), Keyboard-Navigation.
Nix-Wrapper enthält jetzt GStreamer + PipeWire für Mikrofon-Support.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-21 10:02:40 +02:00
Eddy
e87ac9ffc1 feat: Chat-Detach richtig — Hauptfenster blendet Chat aus, separates Fenster lädt Session
Some checks failed
Build AppImage / build (push) Failing after 15s
- chatDetached Store: Hauptfenster blendet Chat-Pane aus wenn Fenster offen
- Placeholder mit "Zurückholen"-Button statt leerem Pane
- Backend sendet chat-detached/chat-reattached Events ans Hauptfenster
- on_window_event(Destroyed): Automatisches Reattach wenn Fenster geschlossen
- Chat-Window lädt aktive Session + Nachrichten aus DB beim Öffnen
- Mehr Platz für andere Panels wenn Chat herausgelöst

[appimage]

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-21 09:41:38 +02:00
Eddy
51374720e7 feat: Settings-Panel wie VS Code — Suchfeld, Kategorien, Commands/Hooks/Permissions
All checks were successful
Build AppImage / build (push) Successful in 7m46s
- Suchfeld oben: durchsucht alle Einstellungen, Commands, Hooks
- Kategorie-Sidebar: Allgemein, Modell, Commands, Hooks, Berechtigungen, Über
- Commands & Skills: Alle /slash-commands mit Badge (Eingebaut/Custom/Skill)
- Hooks: Toggle-Buttons zum Aktivieren/Deaktivieren
- Permissions: Guard-Rail-Übersicht mit Pattern/Tool/Status
- Debug: Alle DB-Settings unter "Über" aufklappbar
- Bei Suche: Sidebar verschwindet, alle matchenden Sektionen angezeigt

[appimage]

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-21 09:30:27 +02:00
Eddy
98dca27ebe fix: Update-Ladebalken erreicht jetzt sichtbar 100%
All checks were successful
Build AppImage / build (push) Successful in 7m53s
- Backend: Finales 100%-Progress-Event nach Download-Loop senden
- Frontend: Explizit auf 100% setzen + 600ms Pause vor Bestätigungsdialog
- Behebt visuellen Bug dass Balken bei ~97% stehen blieb

[appimage]

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-21 09:11:34 +02:00
Eddy
f94cfc287e UI: Aktivitätsanzeige mit Phasen statt nur "Denkt nach..." + kleine Dots
All checks were successful
Build AppImage / build (push) Successful in 7m34s
- Neue processingPhase Store: thinking, streaming, tool-use, subagent
- Phasen-Labels: "Denkt nach", "Schreibt Antwort", "Arbeitet", "Subagent aktiv"
- Tool-Details weiterhin inline (Liest Datei..., Führt aus..., etc.)
- Alte doppelte Bounce-Dots (8px) entfernt, ersetzt durch dezente 4px Pulse-Dots
- Alles in einer Zeile: Icon + Label + Dots

[appimage]

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-21 09:00:47 +02:00
Eddy
f287514af5 Phase 2.2: Lokales Voice — whisper-cli + piper-tts, Gesprächsmodus mit VAD
Some checks failed
Build AppImage / build (push) Has been cancelled
OpenAI komplett entfernt. Voice läuft jetzt offline mit lokalen Binaries:
- whisper-cli (whisper-cpp 1.8.3) für Speech-to-Text
- piper-tts mit Thorsten-Stimme (Deutsch) für Text-to-Speech
- GStreamer + PipeWire in shell.nix für WebKitGTK Mikrofon-Zugriff
- VoicePanel: Echtgespräch mit VAD-Stille-Erkennung, Interrupt, Loop
- Models in .gitignore (~250MB)

[appimage]

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-21 08:48:03 +02:00
Eddy
5eed2a36bb fix: GStreamer PipeWire Plugin-Pfad im Nix-Launcher + Paste-Collapse (10 Zeilen) [appimage]
All checks were successful
Build AppImage / build (push) Successful in 6m9s
- GST_PLUGIN_SYSTEM_PATH_1_0 mit pipewire im wrapProgram gesetzt
- User-Nachrichten >10 Zeilen werden collapsed ("Eingefuegt: X Zeilen")
- Assistant-Nachrichten weiterhin ab 25 Zeilen

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-20 23:38:26 +02:00
Eddy
54b58cf166 feat: Thinking-Blocks inline + Live Tool-Status im Chat [appimage]
All checks were successful
Build AppImage / build (push) Successful in 6m3s
- Thinking-Blocks immer sichtbar (kein Collapse), kleine Schrift, dezent
- Inline Tool-Status waehrend Verarbeitung (wie VSCodium Extension)
- currentTool Store fuer Echtzeit-Anzeige (Liest/Bearbeitet/Sucht...)

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-20 23:30:04 +02:00
Eddy
2b7dfa6e37 feat: Chat-Panel herausloesbar + Expand-Button Fix [appimage]
All checks were successful
Build AppImage / build (push) Successful in 6m3s
- Neues Fenster fuer Chat-Panel (auf zweiten Monitor ziehbar)
- Expand/Collapse nutzt jetzt $state Array statt Set (Svelte 5 Reaktivitaet)
- Kein Collapse waehrend Streaming (verhindert unklickbare Buttons)

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-20 23:01:27 +02:00
Eddy
e0734303af style: Message-Header modernisiert — Dots statt Emojis, Timestamp-Spacing [appimage]
All checks were successful
Build AppImage / build (push) Successful in 6m10s
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-20 22:53:41 +02:00
Eddy
1b1800e32b fix: escape HTML in thinking blocks to prevent XSS
All checks were successful
Build AppImage / build (push) Has been skipped
Both bridge and frontend now properly escape &, <, > in thinking
content before injecting as innerHTML.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-20 22:41:42 +02:00
Eddy
1689837eb4 feat: premium thinking block UI — ChatGPT/Claude.ai style [appimage]
Some checks are pending
Build AppImage / build (push) Waiting to run
Thinking blocks now look like a proper AI chat app:
- Indigo accent border (left-side, animates on hover/open)
- Dark card background (#161b27) distinct from message
- Custom lightbulb SVG icon + chevron (rotates on open)
- Monospace font for thinking content (JetBrains Mono)
- Max-height 300px with custom scrollbar
- No default disclosure markers (hidden via CSS)
- Summary shows "Überlegung" + line count on the right
- Text-based pattern detection expanded (English + German)
- Bridge escapes HTML in thinking content to prevent XSS

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-20 22:36:29 +02:00
Eddy
8336ac6eb1 feat: thinking blocks collapsed by default [appimage]
Some checks failed
Build AppImage / build (push) Has been cancelled
- Extended Thinking (SDK thinking blocks) rendered as collapsible
  <details> elements — closed by default, click to expand
- Text-based thinking patterns (Lass mich..., Ich analysiere...)
  auto-detected and wrapped in collapsible block
- Clean styling: subtle border, smaller font, 💭 icon
- Bridge now forwards thinking content blocks (previously ignored)

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-20 22:32:55 +02:00
Eddy
8a7e0d87f3 feat: collapsible messages, German cost format, stats persistence [appimage]
Some checks failed
Build AppImage / build (push) Has been cancelled
- Long messages (>25 lines) auto-collapse with expand/collapse button
- Cost display uses German format: "16,23$" instead of "$16.230"
- Session stats (tokens, cost, count) persist to DB after each response
  via new update_session_stats command — survives app restart
- Small costs shown as cents (e.g. "3,2¢")

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-20 22:31:25 +02:00
Eddy
60e426a13d perf: lazy panel loading + auto-retry + bridge heartbeat [appimage]
Some checks failed
Build AppImage / build (push) Has been cancelled
- Panels werden erst bei Tab-Aktivierung geladen (dynamic import mit Cache)
  → schnellerer App-Start, weniger initiales DOM
- Auto-Retry mit Backoff (3 Versuche, 2s/5s/10s) bei transienten Fehlern
  (Rate-Limit, Netzwerk, 5xx) → keine manuellen Neustarts mehr
- Bridge-Heartbeat alle 30s → Rust erkennt tote Bridge sofort

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-20 22:21:51 +02:00
Eddy
e0653ddcab fix(voice): robust microphone fallback for WebKitGTK "Invalid constraint"
All checks were successful
Build AppImage / build (push) Has been skipped
WebKitGTK throws various error types (TypeError, OverconstrainedError,
etc.) when getUserMedia is called. Instead of only catching specific
error names, now ALL errors trigger device-enumeration fallback chain:
1. { audio: true }
2. Explicit deviceId from enumerateDevices()
3. { audio: {} } as last resort

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-20 22:17:52 +02:00
Eddy
5b857ebba4 feat: Multi-Queue — mehrere Nachrichten senden waehrend Claude arbeitet
All checks were successful
Build AppImage / build (push) Has been skipped
Statt Single-Slot-Puffer jetzt FIFO-Queue:
- Nachrichten erscheinen sofort im Chat (mit Queued-Markierung)
- Werden automatisch nacheinander abgearbeitet
- Send-Button + Mikrofon nie disabled waehrend Processing
- Queue visuell mit Anzahl + Cancel-Button
- Stopp loescht gesamte Queue

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-20 21:52:26 +02:00
Eddy
2ff3c8220f fix: Mikrofon OverconstrainedError Fallback für WebKitGTK
All checks were successful
Build AppImage / build (push) Has been skipped
Bei OverconstrainedError wird erst Device-Enumeration versucht, dann
Fallback auf einfache Constraints. VoicePanel nutzt ebenfalls Fallback
von strikten auf einfache Audio-Constraints.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-20 21:32:11 +02:00
Eddy
2de88a2a22 [appimage] Phase 2.0: Proaktive Intelligenz
All checks were successful
Build AppImage / build (push) Successful in 8m19s
- MySQL Pool als Managed State (MysqlPoolState in lib.rs)
- Keyword-Extraktion aus User-Nachrichten (Stoppwort-Filter DE/EN)
- Proaktive KB-Abfrage bei SessionStart (proactive_session_hints)
- Auto-Fehler-Pattern: error_tracker Tabelle, bei 3+ Occurrences
  automatisch KB-Eintrag in Kategorie 'fehler' erstellen
- 6 neue Tauri-Commands für KB-Hints und Error-Tracking

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-20 14:19:29 +02:00
Eddy
d315f421ec [appimage] Bridge-Deploy: Scripts-Bundle + npm ci im Nix-Wrapper-Modus
All checks were successful
Build AppImage / build (push) Successful in 7m11s
Problem: Beim Nix-Wrapper lag nur das Binary unter ~/.local/share/claude-desktop/bin,
aber claude-bridge.js + node_modules waren nirgends deployt → "Bridge nicht gefunden"
beim ersten Chat-Versuch.

Loesung:
- claude.rs: Bridge-Such-Pfad um bin/../scripts erweitert (exe_dir.parent / scripts).
- update.rs: UpdateManifest + UpdateStatus um bundle_filename/bundle_sha256 erweitert.
  Neues Tauri-Command apply_bundle_update: laedt tar.gz, pruefte SHA256, entpackt
  nach ~/.local/share/claude-desktop, ruft npm ci --omit=dev auf. Im AppImage-Modus
  no-op (Bundle ist im AppImage enthalten).
- lib.rs: apply_bundle_update registriert.
- CI: packt scripts/claude-bridge.js + package.json + package-lock.json als
  claude-desktop-bundle_VERSION.tar.gz und laedt neben Binary in die Package Registry.
  update.json v3 enthaelt bundle_filename + bundle_sha256.
- install.sh: Erst-Installer laedt das Bundle, verifiziert SHA, entpackt, fuehrt
  npm ci --omit=dev aus. Holt nodejs bei Bedarf ueber nix-build (analog zu jq).
- UpdateDialog.svelte: ruft im Nix-Modus apply_bundle_update vor apply_update auf,
  damit nach dem Neustart Scripts + node_modules aktuell sind.
- nix/default.nix: nodejs_22 + tar + gzip im Wrapper-PATH, damit die App aus dem
  Binary heraus npm ci aufrufen kann.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-20 13:50:56 +02:00
Eddy
0a447591da Phase 1.5: Aktivierung & Quick-Wins [appimage]
All checks were successful
Build AppImage / build (push) Successful in 7m51s
- KB-Hints werden automatisch in jeden Claude-Prompt injiziert
- SQL-Queries berücksichtigen jetzt Priority (DESC)
- Voice-zu-Claude-Pipeline: Sprache → Transkription → Claude → TTS
- Hook-System feuert echte Events (SessionStart, Pre/PostToolUse)
- Pattern-Detektion bei Tool-Fehlern aktiviert
- Slash-Command Autocomplete mit CommandPalette
- Updater abgesichert: Lock-Datei, Prozess-Guard, Bestätigungs-Dialog
- ROADMAP.md und CHANGELOG.md aktualisiert

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-20 13:00:40 +02:00
Eddy
29cce7fbd8 [appimage] UI-Polish: Icon, Stop-Button dezent, Chat-Queue, Update-Safety
All checks were successful
Build AppImage / build (push) Successful in 6m37s
- Neues Icon-Set (SVG-Quelle + gen-icon.sh): 32/64/128/256/512+@2x in depth=8
  (Tauri-Tray erwartet 8-bit-RGBA, depth=16 crashte den Tray-Setup)
- StopButton: Icon-only (⏹), Position Titlebar rechts, nur sichtbar wenn
  isProcessing aktiv. Kein full-width roter Balken im Footer mehr.
- .footer.active-Farbwechsel entfernt — Footer bleibt neutral
- Version-Badge in der Titlebar (v<APP_VERSION>)
- Chat-Input-Queue: Single-Slot-Puffer. Beim Senden waehrend Processing wird
  die Nachricht gepuffert, Pill "Nachricht wartet..." erscheint, nach Ende
  der aktuellen Antwort wird automatisch abgeschickt.
- Stop verwirft den gepufferten Slot (bewusster Abbruch).
- apply_update: ELF-Header-Smoke-Test vor Rename. Kaputter Download oder
  falsche Architektur liefert Fehlerdialog statt zerschossene Installation.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-20 11:52:43 +02:00