Commit graph

180 commits

Author SHA1 Message Date
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
dcc42ee903 feat: Textanalyse fuer KB-Hints — Konzept-Erkennung + Bigrams + Chat-Kontext [appimage]
All checks were successful
Build AppImage / build (push) Successful in 8m32s
- Konzept-Map: ~60 deutsche Phrasen → technische Suchbegriffe
  ("Nachrichten falsch rum" → "message sort chronological")
- Bigram-Extraktion: benachbarte Content-Woerter als Phrase
- Chat-Kontext: letzte 3 User-Nachrichten fliessen in die Suche ein
- Erweiterte Tech-Terms (~40) und Stoppwort-Liste
- Keywords max 12 statt 8, Konzepte haben Vorrang

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-05-02 20:53:49 +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
8d52505d14 docs: Phase 16 — Schulungsmodus-Ausbau zum Session-Replay geplant
7 Sub-Phasen, ~14-16 h Gesamt-Aufwand:
- 16.1 Bridge-Telemetrie (SQLite session_timeline)
- 16.2 3-Spalten-Layout im Praesentations-Fenster
- 16.3 Datei-Baum mit Live-Markierung
- 16.4 Workspace mit Edit-Replay
- 16.5 Timeline mit chronologischer Navigation
- 16.6 Optional: MCP-Tools fuer gezielte Erklaerung
- 16.7 Polish + Session-Export

Architektur-Entscheidung: Bridge-passiv vor MCP-Tools — Bridge sieht
ohnehin alle Tool-Calls, Claude muss nichts wissen. MCP nur als
optionale Erweiterung wenn passive Erfassung stabil laeuft.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-27 22:45:51 +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
6d3a0d8740 fix: Bridge-EPIPE-Endlosschleife + monitor_events-Schneeball verhindern [appimage]
All checks were successful
Build AppImage / build (push) Successful in 8m24s
Ursache: Bridge schrieb bei EPIPE-Fehler (Tauri-Pipe geschlossen) einen
monitor_event, der selbst wieder EPIPE warf -> uncaughtException-Loop.
Ergebnis: 1.082.260 identische Fehler-Eintraege, DB auf 293 MB angewachsen,
App hing beim Start am Index-Scan dieser Tabelle.

Bridge (scripts/claude-bridge.js):
- crashHandlerActive-Flag verhindert Re-Eintreten der Handler
- isPipeError() erkennt EPIPE/ERR_STREAM_DESTROYED/ERR_STREAM_WRITE_AFTER_END
- Bei Pipe-Fehler: process.exit(0) statt Schreibversuch
- stdout/stderr error-Listener als Erstausloeser-Sperre
- Alle sendEvent/sendMonitorEvent-Aufrufe in try/catch isoliert

Schema (src-tauri/src/db.rs):
- Trigger cleanup_old_monitor_events war AFTER INSERT (lief bei jedem Insert)
  -> bei 1 Mio Zeilen O(n) DELETE pro Event = O(n^2)-Schneeball
- Neuer Trigger: WHEN COUNT > 50000, behaelt juengste 30000, loescht >7d alt
- DROP TRIGGER vor CREATE damit Migration auf bestehenden DBs greift

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-27 15:58:10 +02:00
Eddy
549727d681 fix(ci): ntfy-action erwartet ntfy_auth, nicht auth [appimage]
All checks were successful
Build AppImage / build (push) Successful in 9m33s
Die ntfy-action ueber data/ntfy-action@main definiert ihre Inputs als
ntfy_auth (siehe action.yml). Mit auth: kam keine Notification durch.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-27 14:40:57 +02:00
Eddy
ed089c1e1c ci: Ntfy-Benachrichtigungen aus der Pipeline (start/success/failure) [appimage]
Some checks failed
Build AppImage / build (push) Has been cancelled
Bisher kamen Build-Statusmeldungen vom /deploy-Polling. Das ist redundant —
die Pipeline kann selbst auf Topic vk-builds pingen, dann brauchen wir kein
Claude-Polling mehr (spart Tokens, vermeidet doppelte Pings).

- Notify start: grauer Hammer am Anfang
- Notify success: gruener Haken (mit Versionsnummer)
- Notify failure: rote Lampe + Priority high

Voraussetzung: Repo-Secret NTFY_AUTH ist gesetzt (siehe globales CLAUDE.md).

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-27 14:34:06 +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
359933686b docs: Phase 7 in CHANGELOG und ROADMAP dokumentiert
All checks were successful
Build AppImage / build (push) Has been skipped
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-22 13:10:51 +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
384888ccd8 Nix-Wrapper: whisper-cpp zu runtimeBins hinzugefügt für lokale Transkription [appimage]
All checks were successful
Build AppImage / build (push) Successful in 8m40s
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-21 16:20:06 +02:00
Eddy
48c7b2a30c fix: Bridge OOM-Crash — Handler defensiv + Node-Heap 4GB [appimage]
Some checks failed
Build AppImage / build (push) Has been cancelled
Der uncaughtException-Handler aus f69f566 las err.stack dreimal und
serialisierte ihn zweimal per JSON.stringify. err.stack ist ein lazy
Getter der bei jedem Zugriff neu formatiert wird — bei V8-nahe-OOM
hat genau das den Abort ausgelöst (Crash-Dump Frames 20-24:
ErrorStackGetter → FormatStackTrace → FatalProcessOutOfMemory).

- Handler: err.stack einmal lesen, auf 2000 Zeichen kürzen, try/catch
  drumrum. Handler darf nicht selbst crashen.
- Bridge-Start: --max-old-space-size=4096 (Node-Default ~2GB reicht
  bei langen Sessions mit großen Thinking-Blocks + Agent-SDK-History
  nicht). Betrifft Daemon- UND stdio-Modus.
2026-04-21 16:19:51 +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
8725e2f4e6 docs: Komplette Dokumentation überarbeitet — README als Entwickler-Handbuch, CLAUDE.md als Session-Kurzreferenz
README.md: Architektur-Diagramm, alle 18 Rust-Module + 27 Svelte-Komponenten dokumentiert,
Features nach Phasen, MCP-Server, CI/CD, Tastenkürzel, KB-Referenzen.
CLAUDE.md: Tech-Stack, Kommunikationskette, Bridge-Daemon Details, Agent-Modi,
häufige Probleme & Lösungen Tabelle, Build-Befehle.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-21 14:59:42 +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
f69f566b00 [appimage] Technische Schulden: Cargo Warnings + Bridge Error-Handling + Chat-Layout
All checks were successful
Build AppImage / build (push) Successful in 9m13s
- Cargo Warnings: 0 (dead_code allow für load_sessions, invalidate_expired)
- Bridge: uncaughtException + unhandledRejection Handler, Ollama .catch()
- Rust: Parse-Fehler bei Bridge-Nachrichten werden geloggt statt verschluckt
- Chat-Panel: Detach-Layout Fix bereits enthalten (flex-shrink, min-height)

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-21 14:40:38 +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
49240842d0 [appimage] Phase 5: Ollama-Integration + Offline-Queue
Some checks failed
Build AppImage / build (push) Has been cancelled
Lokales Haiku-Equivalent: Bridge erkennt Ollama automatisch beim Start,
local-query Command für einfache Tasks (Commit-Messages, Übersetzungen).
Konfigurierbar über set-ollama-config.

Offline-Queue: Nachrichten werden bei fehlender Verbindung in SQLite
gequeuet und bei Reconnect automatisch gesendet. Commands:
queue_message, list_queued_messages, flush_offline_queue, clear_offline_queue.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-21 14:32:01 +02:00
Eddy
fab7e88c44 [appimage] Phase 4: MCP-Hub nativ — Server aus Config laden + UI-Verwaltung
Some checks failed
Build AppImage / build (push) Has been cancelled
MCP-Server-Configs werden beim Bridge-Start aus ~/.claude.json geladen
und per set-mcp-servers Command an die Bridge injiziert. Neue Tauri-Commands:
list_mcp_servers, add_mcp_server, remove_mcp_server für Runtime-Verwaltung.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-21 14:28:08 +02:00
Eddy
e36209690e [appimage] Phase 3 komplett: Bridge-Daemon + Unix Socket IPC
Some checks failed
Build AppImage / build (push) Has been cancelled
Bridge überlebt jetzt App-Neustarts als eigenständiger Daemon-Prozess.
Kommunikation über Unix Domain Socket statt stdio — async, Auto-Reconnect,
PID-Tracking. Fallback auf stdio-Modus wenn UDS nicht verfügbar.

Neue Commands: get_bridge_status, stop_bridge_daemon.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-21 14:21:25 +02:00
Eddy
d29bbd7bfd fix: Rusqlite Borrow-Lifetime in load_sessions_filtered [appimage]
All checks were successful
Build AppImage / build (push) Successful in 8m10s
stmt.query_map()?.collect() direkt als Return-Expression hält den
Borrow über den Block-End hinaus. Fix: Ergebnis erst in let binden,
dann returnen — so wird der Temporary vor stmt gedroppt.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-21 13:54:32 +02:00
Eddy
b9dfc8a720 fix: UTF-8 Panic bei String-Truncation (db.rs + knowledge.rs) [appimage]
Some checks failed
Build AppImage / build (push) Failing after 3m34s
Crash: "byte index 200 is not a char boundary; inside '─' (bytes 198..201)"
Fix: char_indices() statt byte-slice für sicheres Abschneiden bei
Multi-Byte-Zeichen (ä, ü, ─, etc.)

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-21 13:49:21 +02:00
Eddy
05bc35208d feat: Kerstin als Standard-Stimme + Stimmenauswahl [appimage]
- Standard-TTS von Thorsten (männlich) auf Kerstin (weiblich) gewechselt
- text_to_speech nutzt jetzt den voice-Parameter (vorher ignoriert)
- get_tts_voices zeigt alle verfügbaren Stimmen mit Verfügbarkeits-Check
- 5 deutsche Stimmen: Kerstin, Thorsten HQ, Thorsten, Eva, Ramona
- Modell-Suche mit dynamischem Dateinamen pro Stimme

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-21 13:43:21 +02:00
Eddy
a3d1dadc46 fix: Session-Filter vereinfacht + Piper/Whisper Modell-Pfade erweitert [appimage]
Some checks failed
Build AppImage / build (push) Failing after 3m9s
- db.rs: load_sessions_filtered() ohne shared row_mapper (Borrow-Probleme)
- voice.rs: Modell-Suche auch in ~/.local/share/claude-desktop/models/
  und ~/.claude-desktop/models/ (AppImage + Nix-Wrapper Kompatibilität)

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-21 13:40:51 +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
b90db222e7 fix: GSettings-Schemas im Nix-Wrapper (XDG_DATA_DIRS) [appimage]
App crashte mit "No GSettings schemas are installed on the system"
weil WebKitGTK die GLib-Schemas nicht finden konnte.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-21 12:06:25 +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