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.
18 KiB
18 KiB
Changelog
Alle nennenswerten Änderungen an Claude Desktop werden hier dokumentiert.
Format angelehnt an Keep a Changelog.
[Unreleased] - 2026-04-27
Behoben (Phase 9.1: Crash-Fix + Chat-Polish)
- Crash-Fix UTF-8 Truncation in src-tauri/src/db.rs —
&content[..240]panickte mitten in einem ✅-Emoji (3 Bytes), App stürzte mit SIGABRT ab. Neues src-tauri/src/strutil.rs-Modul mitsafe_truncate()undsafe_truncate_ellipsis()(5 Unit-Tests grün), in db.rs/claude.rs/knowledge.rs/session.rs/memory.rs an allen&s[..N]- und&s[..s.len().min(N)]-Stellen eingebaut - Stale Lock-File-Cleanup in src-tauri/src/update.rs: nach Crash bleibt
/tmp/claude-desktop.lockmit toter PID liegen — beim Neustart wird das jetzt explizit protokolliert (🧹 Stale Lock-Datei aus vorherigem Crash gefunden) statt stillschweigend ersetzt - Input-Textfeld nach Senden leer in ChatPanel.svelte:
bind:value={$currentInput}aktualisierte den DOM-Wert in Svelte 5 mit Auto-Subscription nicht zuverlässig synchron. Belt-and-Suspenders: Store-Reset + harter DOM-Reset +tick()— der Text ist jetzt wirklich weg
Hinzugefügt (Phase 9.1: Chat-Polish)
- ApprovalBar.svelte (NEU): Sticky-Bar oberhalb des Chat-Inputs, erscheint wenn
pendingChanges.length > 0. Zeigt 1 oder N wartende Datei-Änderungen mit klar beschrifteten Buttons „✓ Übernehmen" / „✕ Verwerfen" (statt vorher mehrdeutigem „Behalten/Zurueck"). Bleibt sichtbar wenn der Chat scrollt — User verliert die offene Anfrage nicht aus den Augen. Klick auf den Datei-Namen scrollt zur Inline-Diff-Karte und blinkt sie kurz (Approval-Flash). Tastatur-Shortcuts:Ctrl+Enter= erste übernehmen,Ctrl+Shift+Enter= alle übernehmen,Ctrl+Backspace= erste verwerfen - Smart-Sticky-Scroll v2 in MessageList.svelte: Auto-Scroll triggert jetzt auch bei Tool-Card-Updates (
message.toolCalls.lengthund Status-Änderungen) — vorher hat nurcontent.lengthgetrackt, daher hat der Stream den User „abgehängt" wenn neue Tool-Karten dazukamen. Plus ResizeObserver am Container für Diff-Aufklappen/Code-Block-Render. Smooth-Scroll bei kleinen Distanzen (< 240 px), instant bei großen. Threshold von 100 → 60 px - Streaming-Caret aufgewertet in Message.svelte: pulsierender Block-Cursor
▍mit Glow-Shadow (Codium-Style) statt hartem on/off-blink - Tool-Card-Slide-In + Shimmer in ToolCallCard.svelte: neue Tool-Karten kommen mit
transition:sliderein, laufende Karten haben einen sanften Shimmer-Streifen über dem linken Rand (1.4s-Loop) - Phase-bewusster WorkingIndicator in WorkingIndicator.svelte: Verb passt sich an
processingPhasean — „Denkt nach"/„Schreibt"/„Nutzt <Tool>"/„Subagent arbeitet" statt Random-Verb wenn die Phase bekannt ist. Random-Verben bleiben als Fallback - DiffView-Buttons umbenannt in DiffView.svelte: „✓ Übernehmen" / „✕ Verwerfen" mit klaren Tooltips (Shortcut-Hints) statt „Behalten/Zurueck"
Hinzugefügt (Phase 9: UI-Redesign Schritt 2 — 2-spaltiges Layout + Drawer + Komponenten-Pass)
- Sidebar.svelte (NEU): 240px-Sidebar mit Cmd+K-Suche oben, Sessions-Liste in der Mitte, Nav-Rail unten mit 4 Lucide-Icons (Aktivität/Speicher/Werkzeuge/Einstellungen) — ersetzt die alte separate SessionList-Pane
- ToolDrawer.svelte (NEU): Rechts-eingeschobener 420px-Drawer mit internen Tabs pro Sektion — Activity (Live/Monitor/Kosten), Speicher (Gedächtnis/Wissensbasis/Kontext), Werkzeuge (Programme/Sprache/Agenten/Guard-Rails/Hooks), Einstellungen (Settings/Audit). Esc schließt
- 2-spaltiges Layout in +page.svelte: das alte 4-Pane-PaneForge-Layout (Sessions/Chat/Mid-Tabs/Right-Tabs) ist aufgelöst. Jetzt: Sidebar (fix 240px) + ChatPanel (flex) + Drawer als Overlay. Kein Wirrwarr aus 13 nebeneinander liegenden Tabs mehr
- Cmd+K global: globaler Listener im +page.svelte öffnet QuickActions; bestehender
navigate-tab-Event mappt automatisch auf die richtige Drawer-Sektion - StatusDot in AgentView:
🟢 🟡 ⚪ 🔴-Emojis durch<StatusDot>-Komponente ersetzt — saubere CSS-Dots mit Pulse-Animation bei aktiven Agenten - Hardgecodete Farben raus in 9 Komponenten:
#ef4444,#22c55e,#eab308,#f59e0b,#a855f7,#06b6d4,#a78bfa,#8b5cf6,#60a5fadurchvar(--status-success/warning/error/info)undvar(--accent)ersetzt — betroffen: GuardRailsPanel, AgentView, ChatPanel, PerformancePanel, ProgramsPanel, SettingsPanel, VoicePanel, IdePanel, AutoCorrectionModal, UpdateDialog - ChatPanel entkoppelt: lokaler Header (mit Spark-Icon, Stats, Detach) und ChatStatusBar entfernt — die Funktionen leben in der globalen Titlebar bzw. Statusbar. Im ChatPanel bleibt nur eine kompakte 28px-Toolbar mit Detach-Button
Hinzugefügt (Phase 9: UI-Redesign Schritt 1 — Design-System + Status-Bar)
- Design-System in src/app.css: 4 Graustufen (
--bg-primary/secondary/tertiary/input), 1 Akzent#007acc(VS-Code-Blau), 4 Status-Farben (--status-success/warning/error/info), 5 Schriftgrößen (--fs-xs/sm/md/lg/xl), 4-Punkt-Spacing (--sp-1..6), 2 Border-Radius-Werte (--r-sm/md); vorherige KDE-Breeze-Werte abgelöst - vscode.css als Aliase: src/lib/theme/vscode.css mappt
--vscode-*Variablen auf das neue System — Phase-8-Komponenten laufen unverändert weiter - UI-Library src/lib/ui/: Button, Card, Icon (Lucide-Wrapper), Badge, StatusDot (CSS statt Emoji), Tooltip, Drawer (Esc-schließbar), Tabs — verbindliche Bausteine für alle Panels
- Lucide-Icons:
lucide-svelteinstalliert, ersetzt Emojis im UI-Chrome (Phase 9 Schritt-für-Schritt) - StatusBar.svelte (NEU): kompakte 22px-Footer-Zeile mit Token-Auslastung (Färbung ab 70/90%), Modell+Modus (klickbarer Picker), Session-Kosten, Verarbeitungs-Phase — ersetzt den überfüllten alten Footer mit 6+ Stats und Pulse-Animation
- Titlebar entrümpelt: nur noch Logo (✱), Stop-Button, Schulungsmodus (Lucide-Icon statt 🎓), Version — Status-Dot entfernt, doppelte Modell-Anzeige entfernt
Geändert
- Footer ersetzt: alter
<footer class="footer">aus +layout.svelte komplett entfernt, ersetzt durch globale<StatusBar /> - Hardgecodete Farben in
+layout.svelte(#22c55e,#ef4444,#eab308,#f59e0b,#a855f7,#06b6d4) entfernt — durch CSS-Variablen ersetzt
Hinzugefügt (Phase 8: VS-Code-Look — Chatbereich-Redesign)
- VS-Code-Dark-Theme: Globales Theme-File
src/lib/theme/vscode.cssmit--vscode-*Custom-Properties (Editor-BG #1e1e1e, Sidebar #252526, Akzent #0e639c, Diff-Grün/-Rot wie im Original); bestehende--bg-primary,--accentusw. werden als Aliase auf VS-Code-Werte gemappt → alle Panels ziehen automatisch das neue Theme - Linksbündiges Message-Layout: Neue Message.svelte und MessageList.svelte — User und Assistant beide linksbündig mit Avatar-Kreis (24px) vorn, durchgehende Zeitachse wie in der Claude-Code-Extension; Hover-Actions (Edit/Regenerate/Copy/Merken/Rewind) erscheinen rechts oben
- Inline Tool-Karten: Tool-Calls erscheinen jetzt als ausklappbare Karten direkt in der Assistant-Message statt nur im Activity-Panel — neue ToolCallCard.svelte Basis + Spezialisierungen ToolCardRead (Code-Snippet mit Zeilennummern), ToolCardEdit (Diff + Accept/Reject inline), ToolCardBash (Terminal-Output), ToolCardGeneric (Grep/Glob/WebFetch/MCP/Task)
- Tool-Call-Binding an Message:
Message.toolCalls?: InlineToolCall[]ergänzt; events.ts hängttool-startan die letzte Assistant-Message und finalisiert sie beitool-end— Karten werden live gerendert - Smart-Sticky-Scroll: MessageList scrollt automatisch ans Ende, stoppt aber wenn der User selbst gescrollt hat; Back-to-Bottom-Button erscheint dann
- ChatStatusBar: Neue Statusbar unter dem Input mit Token-Auslastung (mit Warning/Danger-Färbung), Modus-Picker (Solo/Handlanger/Experten/Auto, Klick öffnet Menü), Modell-Badge, Phase-Indikator, Shortcut-Hints
- Tool-Card-Helper: src/lib/utils/toolCards.ts mit
getToolMeta()undgetToolSubtitle()für Icon-/Label-/Subtitel-Zuordnung; markdown.ts extrahiert den Markdown-Renderer aus ChatPanel - Header-Redesign: Spark-Icon ✱ statt 💬, kompakte Stats, VS-Code-Sidebar-Hintergrund
Geändert
- ChatPanel.svelte (~50KB CSS) rendert jetzt Messages über
<MessageList />statt inline; der separate Pending-Changes-Block unten wurde entfernt — Diffs erscheinen direkt in den Edit-Tool-Karten - Backend (claude.rs, claude-bridge.js, checkpoint.rs) bleibt unverändert — reines UI-Refactor
[Unreleased] - 2026-04-22
Hinzugefügt (Phase 7: VS Code Extension Features)
- Accept/Reject DiffView: Dateiänderungen nach Ausführung prüfen und akzeptieren oder rückgängig machen — DiffView mit interaktiven Buttons, Kompakt-Ansicht für große Diffs (
DiffView.svelte,checkpoint.rs) - Checkpoint/Rewind System: Automatische Snapshots (content_before/content_after) bei Edit/Write Tool-Calls — SQLite-basiert, pro Session, Rewind auf beliebigen Checkpoint (
checkpoint.rs,db.rs) - @-Mentions im Chat:
@datei.tsöffnet Fuzzy-Autocomplete für Projektdateien, Dateiinhalt wird automatisch in den Prompt injiziert, Zeilenbereiche mit#5-10(FileMention.svelte,context.rs) - Bridge Pending-Queue: Nachrichten während laufender Claude-Verarbeitung werden gepuffert und automatisch nach dem aktuellen Turn verarbeitet — nahtloses Weitertippen (
claude-bridge.js) - Fuzzy File Search: Score-basierter Algorithmus mit Start-Bonus, Separator-Bonus, Consecutive-Match — scannt Projektverzeichnis bis 5000 Dateien (
context.rs) - Session-Projekt-Sync: Klick auf Session aktiviert automatisch das zugehörige Projekt (
SessionList.svelte) - Tool-ID Durchreichung: Backend-IDs werden korrekt von tool-start bis tool-end durchgereicht — behebt endlos-pulsierende Aktivitätspunkte (
events.ts,app.ts)
Behoben
- Aktivitäts-Panel: Grüne Punkte pulsieren nicht mehr endlos — Tool-IDs werden jetzt korrekt zwischen Backend und Frontend synchronisiert
- Session-Projekt-Verknüpfung: Beim Klick auf eine Session wird das zugehörige Projekt automatisch aktiviert
Hinzugefügt
- Bridge-Daemon (Phase 3): Bridge läuft als eigenständiger Daemon-Prozess, überlebt App-Neustarts — kein Cold-Start mehr (
claude-bridge.js --socket,claude.rs) - Unix Socket IPC (Phase 3): Kommunikation über Unix Domain Socket statt stdio — async, kein Block, Auto-Reconnect bei Verbindungsverlust (
claude.rs,claude-bridge.js) - Bridge-Status API:
get_bridge_statusCommand — zeigt Verbindungsmodus (UDS/stdio), Daemon-PID, Socket-Pfad - Daemon-Steuerung:
stop_bridge_daemonCommand zum expliziten Stoppen des Daemon-Prozesses - Modus-Indikator: Badge im ChatPanel zeigt aktuellen Agent-Modus (Handlanger/Experten/Auto) mit Verarbeitungsphase
- Plan-Erkennung: Claude-Antworten mit Plänen werden automatisch als Slides an das Präsentationsfenster gesendet (
planPresentation.ts) - Session-Projekt-Filter: Sessions werden nach aktivem Projekt/Workspace gefiltert (
db.rs,session.rs) - Weibliche TTS-Stimme: Kerstin als Standard-Stimme, 5 deutsche Stimmen wählbar (
voice.rs) - MCP-Hub nativ (Phase 4): MCP-Server werden aus
~/.claude.jsongeladen und beim Bridge-Start injiziert — kein CLI-Umweg nötig (claude.rs,claude-bridge.js) - MCP-Verwaltung: Tauri-Commands
list_mcp_servers,add_mcp_server,remove_mcp_server— Server zur Laufzeit hinzufügen/entfernen - Ollama-Integration (Phase 5): Lokales Modell für einfache Tasks — Auto-Detect,
local-queryCommand, konfigurierbar (claude-bridge.js,claude.rs) - Offline-Queue (Phase 5): Nachrichten bei fehlender Verbindung in SQLite queuen, später automatisch senden (
session.rs) - UTF-8 Crash Fix: Kein Panic mehr bei Multi-Byte-Zeichen in DB-Abfragen (
db.rs,knowledge.rs) - Guard-Rails UI (Live): 3-Tab-Ansicht (Live-Feed/Regeln/Blockiert), Risiko-Statistik-Leiste, Ein-Klick-Freigabe bei Bestätigungsbedarf, guard-check Events vom Backend (
GuardRailsPanel.svelte,guard.rs) - D-Bus Desktop-Aktionen: 10 vordefinierte Aktionen (Dolphin, Kate, Konsole, Firefox, Notify, Lock Screen), Aktionen-Grid im ProgramsPanel, CLI/GUI-Unterscheidung (
programs.rs,ProgramsPanel.svelte) - Screenshot-Analyse: Bildschirmbereich oder Vollbild capturen via spectacle/scrot/gnome-screenshot, Vorschau im Panel, "An Claude senden" Button (
programs.rs,ProgramsPanel.svelte) - Projekt-Wechsel: Ein-Klick-Projektwechsel in der Sidebar — Dropdown mit Projektliste, Hinzufügen/Entfernen, Working-Dir + Sticky-Context wird automatisch umgeschaltet (
SessionList.svelte,db.rs) - File-Drop auf Chat: Dateien per Drag & Drop auf den Chat ziehen — Text-Dateien als Code-Block, Bilder als Base64, Spracherkennung, 500KB-Limit (
ChatPanel.svelte) - Persistent Memory: Auto-Load Memory-Einträge werden bei jeder Nachricht in den Claude-Context injiziert — Cross-Session Gedächtnis für Patterns, Zugänge, Präferenzen (
memory.rs,claude.rs) - Memory CRUD-Commands: Speichern, Löschen, Auflisten, Auto-Load-Filter für Memory-Einträge als Tauri-Commands (
memory.rs,lib.rs) - Global Hotkey (Super+C): Claude-Eingabe von überall öffnen — Fenster wird angezeigt, fokussiert, Input-Feld aktiviert (
lib.rs,ChatPanel.svelte) - Clipboard-Watch: Überwacht Zwischenablage, erkennt Code/URLs/Fehler/Pfade, zeigt Vorschlag im Chat (
clipboard.rs,ChatPanel.svelte) - File-Browser für Projekt-Wechsel: Nativer Verzeichnis-Dialog statt manuellem Pfad, Auto-Name aus Ordnername (
SessionList.svelte,tauri-plugin-dialog) - Quick-Actions Palette (Ctrl+K): VS-Code-artige Kommandopalette mit Suche, Kategorien (Build, Git, Session, Navigation, Voice, Tools), Keyboard-Navigation (
QuickActions.svelte) - Lokales Voice (Phase 2.2): whisper-cli STT + piper-tts TTS, komplett lokal ohne OpenAI-API (
voice.rs,VoicePanel.svelte) - Chat-Detach: Chat in separates Fenster herauslösen, Platz für andere Panels, Zurückholen per Button (
chat_window.rs,+page.svelte) - Aktivitäts-Phasen: 4 Zustände (Denkt nach/Streamt/Tool-Nutzung/Subagent) statt nur "Denkt nach..." (
events.ts,ChatPanel.svelte) - Settings-Panel (VS Code Stil): Suchfeld, Kategorien-Sidebar, Commands/Hooks/Permissions-Verwaltung (
SettingsPanel.svelte) - GStreamer im Nix-Wrapper: Mikrofon funktioniert jetzt auch in Produktion (PipeWire + gst-plugins) (
nix/default.nix) - Slash-Command Autocomplete:
/-Eingabe im Chat öffnet Dropdown mit allen Commands, Skills und Built-ins (commands.rs,CommandPalette.svelte) - KB-Hints Injection: Jede Nachricht an Claude bekommt automatisch relevante Wissensbasis-Einträge (
claude.rs,knowledge.rs) - Voice-zu-Claude-Pipeline: Spracheingabe wird transkribiert, an Claude gesendet, Antwort per TTS vorgelesen (
VoicePanel.svelte) - Pattern-Detektion: Tool-Fehler werden automatisch gegen bekannte Fehler-Patterns geprüft (
events.ts) - Hook-Dispatch: SessionStart, PreToolUse, PostToolUse feuern echte Events ans Frontend (
hooks.rs,events.ts) - Updater Lock-Datei System: PID-basiertes Locking verhindert parallele Update-Instanzen (
update.rs) - Updater Bestätigungs-Dialog: User muss Update-Installation bestätigen statt Überraschungs-Restart (
UpdateDialog.svelte) - Updater Graceful Shutdown: Frontend bekommt 2s Zeit zum State-Speichern vor Restart (
update.rs,lib.rs) - Command-Registry: Scannt
~/.claude/commands/und~/.claude/skills/für Autocomplete (commands.rs)
Geändert
- SQL-Queries in
knowledge.rssortieren jetzt nachpriority DESC(höchste Priorität zuerst) get_tool_hints()korrigiert: War fälschlichpriority ASC, jetztDESCsearch_knowledge()filtert jetzt auch nachstatus = 'active'UpdateDialog.svelteauf Svelte 5 Runes migriert ($state,$effect,$derived)lib.rs: App-Lifecycle erweitert um Lock-Datei create/remove bei Start/Exit
Behoben
- Svelte 5 Event-Syntax: Alle
on:click→onclickin SessionList.svelte (keine Mixed-Syntax mehr) - Mikrofon hängt: PipeWire-Fallback + 5s getUserMedia-Timeout wenn PipeWire nicht läuft (
nix/default.nix,ChatPanel.svelte) - Update-Fortschrittsbalken: Erreicht jetzt visuell 100% vor der Bestätigungsmeldung (
update.rs,UpdateDialog.svelte) - Mikrofon in Produktion: GStreamer + PipeWire-Plugins fehlten im Nix-Wrapper, WebKitGTK konnte getUserMedia nicht nutzen (
nix/default.nix) - Updater konnte Binary ersetzen während App noch lief (kein Lock, kein Prozess-Check)
[0.1.0] - 2026-04-14
Erstveröffentlichung
Enthält Phase 1-16 der Roadmap:
- Tauri 2.0 + SvelteKit 5 App-Grundgerüst
- Claude Agent SDK Integration mit Live-Streaming
- 4-Panel Layout mit 24 UI-Komponenten
- SQLite Persistierung + Session-Management
- Guard-Rails System für kontrollierte OS-Zugriffe
- Claude-DB Integration (Wissensbasis durchsuchen/speichern)
- Intelligentes Context-Management (3-Schichten-Gedächtnis)
- Sprach-Interface (Whisper STT + OpenAI TTS)
- Multi-Agent-Architektur (Solo/Handlanger/Experten-Modi)
- Hook-System für Automatisierung
- VSCodium-Integration (WebSocket-Bridge)
- Programm-Steuerung (D-Bus, Xvfb, Playwright)
- Präsentations- & Schulungsmodus
- System-Monitor mit Performance-Metriken
- Subagent-Hierarchie mit Baumansicht
- CI/CD Pipeline (Forgejo Actions → AppImage)