Commit graph

102 commits

Author SHA1 Message Date
Eddy
506f1d3fdc [appimage] Auto-Updater: Package Registry + update.json + Nix-Wrapper
All checks were successful
Build AppImage / build (push) Successful in 7m52s
- update.rs: Umstellung auf Package-Registry-Manifest mit SHA256-Verify,
  Basic-Auth, dev/APPIMAGE/Nix-Wrapper-Modus. Liest binary_filename
  im Nix-Modus (AppImage laeuft auf NixOS nicht)
- Nix-Wrapper-Paket (nix/default.nix): LD_LIBRARY_PATH-korrekter Launcher
  + Installer-Script, User-Home-Binary (writable fuer Auto-Update)
- CI laedt jetzt AppImage UND natives Binary + update.json v2
  (binary_filename/binary_sha256) in die Package Registry
- Svelte: Store-basierter Update-Trigger, manueller Check im
  Settings-Panel, "Kein Update"-Dialog-Variante, expectedSha256-Param
- install.sh: One-Click-Installer fuer NixOS (curl | bash)
- sha2-Dep fuer Integritaets-Check des Downloads

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-20 11:05:19 +02:00
Eddy
3993387977 Security-Fixes + UI-Verbesserungen: Stop-Button, Textfeld, Agent-Filter
All checks were successful
Build AppImage / build (push) Has been skipped
Backend:
- Credentials aus Code entfernt → ENV-Variablen mit Fallback
- File-Traversal in Update-Download verhindert (Path-Sanitization)
- CLI-Injection bei D-Bus mit Whitelist-Validierung abgesichert

Frontend:
- Stop-Button dezenter (kleinere Schrift, gedämpftes Rot, kein Pulsieren)
- Stop löscht keine Session/Messages mehr — nur Agents stoppen
- Textfeld nicht mehr blockiert während Claude arbeitet (Einwände möglich)
- Agent-Filter "Nur aktive" wird in localStorage persistent gespeichert

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-20 03:18:39 +02:00
Eddy
2cd721dd97 Feature: VoicePanel mit Push-to-Talk und Sprachsteuerung
- Neues VoicePanel.svelte mit Mikrofon-Zugriff via Web Audio API
- Push-to-Talk und Continuous-Mode (VAD-Ready)
- Audio-Visualisierung mit Canvas-Waveform
- OpenAI Whisper STT + TTS Integration via voice.rs
- Stimmenauswahl (Alloy, Echo, Fable, Onyx, Nova, Shimmer)
- Tab "Sprache" im rechten Panel integriert

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-04-15 14:46:24 +02:00
Eddy
a519a7cdd2 Feature: Auto-Update System für AppImage
- Backend (update.rs): Forgejo-API Check, Download mit Progress-Events, AppImage-Replace + Restart
- Frontend (UpdateDialog.svelte): Modal mit Version, Release-Notes, Fortschrittsbalken
- Automatischer Update-Check 3s nach App-Start
- reqwest mit stream-Feature für Download-Progress

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-04-15 14:06:23 +02:00
Eddy
f191cd062c Feature: Kontext-Auslastung im Footer (X% ctx)
- Bridge: Token-Berechnung inkl. Cache (input + cache_read + cache_creation)
- Store: contextUsage + contextPercent (derived)
- Layout: Farbcodierte Anzeige (grün/gelb/rot bei 60%/80%)
- Tooltip zeigt absolute Token-Zahlen

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-04-15 13:40:34 +02:00
Eddy
48fd61fd01 Fix: Auto-Session erscheint sofort in Session-Liste
- ChatPanel: emit('session-created') nach Auto-Session-Erstellung
- SessionList: listen('session-created') + loadSessions() Refresh
- TEST-ROADMAP: Experten-Modus + Session-Fix verifiziert

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-04-15 13:08:53 +02:00
Eddy
79b8525ede Bugfixes: Resume, Tool-Whitelist, Sub-Agent-Tree, UI-Polish
Bridge (claude-bridge.js):
- Resume-Fix: queryOptions.resume statt .sessionId (SDK-API)
- tools-Whitelist statt disallowedTools (Blacklist vererbt sich auf Sub-Agents!)
  Handlanger: Main nur Task+TodoWrite, Sub-Agents bekommen volles Tool-Set
  Experten: Main nur Task+TodoWrite+Read+Grep+Glob
  Solo: preset claude_code
- handleToolUse/handleToolResult Helper, greifen auch in assistant.content-Bloecken
  (SDK liefert tool_use/tool_result nicht als standalone events)
- Dedup via handledTools Set
- Resume-Retry-Fallback bei ungueltiger Session-ID
- Custom agents-Option entfernt (SDK spawnt Sub-Agents ohne Tools → Halluzination)
- Orchestrator-Prompt: verweist auf general-purpose (vollstaendiges Tool-Set)

Backend (claude.rs):
- claude_session_id NUR beim 1. Mal setzen (sonst verliert man History)
- Generic event emit fuer alle Bridge-Events ans Frontend
- Mode-Persistenz bei Bridge-Start (agent_mode aus DB laden)

Knowledge (knowledge.rs):
- MYSQL_HOST: 192.168.155.1 → 192.168.155.11 (MariaDB-Server)
- MYSQL_PASS: claude → 8715
- category Option<&str> Typ-Annotation fuer exec_map

Programs (programs.rs):
- xvfb_screenshot: Fallback scrot → import (ImageMagick) → ffmpeg

Voice (voice.rs):
- Part::file (existiert nicht) → Part::bytes, keine Temp-Datei

Frontend:
- events.ts: mode-changed Listener, result.text Fallback,
  addAgent({id}) fuer korrekte Parent-Child-Verknuepfung
- ChatPanel: Copy-Button, Typing-Dots in Bubble (kein Doppel-Header),
  $effect statt $:, onkeydown statt on:keydown
- AgentView: "Nur aktive" Toggle, Delegations-Badge, Tool-Count hidden bei 0,
  agentMode Import
- ProgramsPanel: Button-Styling, Error-Banner mit Copy-Button,
  selectable Text
- MonitorPanel: Filter-Dropdown Styling (Hintergrund + Hover)
- SettingsPanel: changeMode() wird beim Klick aufgerufen (nicht nur Store)
- +layout.svelte: agent_mode beim App-Start laden, Mode-Badge im Footer,
  🎓-Button fuer Schulungsfenster
- +page.svelte: Programme-Tab + Hooks-Tab

Neue Dateien:
- TEST-ROADMAP.md — Status und naechste Schritte
- .gitignore erweitert (scheduled_tasks.lock, out/, node_modules)
- vscode-extension/tsconfig.json: include nur src/, exclude node_modules

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-14 21:24:51 +02:00
Eddy
120715982b Phasen 12-15: Hooks, VSCodium-Bridge, Programm-Steuerung, Schulungsmodus
Phase 12 Hook-System (hooks.rs + HooksPanel):
- HookManager mit Event-Registry + Ausfuehrungs-Log
- 5 Built-in Hooks (SessionStart, PreToolUse, PostToolUse,
  BeforeCompacting, AfterCompacting)
- Tauri-Commands: list_hooks, set_hook_enabled, get_hook_executions, fire_hook
- HooksPanel.svelte mit Live-Ausfuehrungs-Log

Phase 13 VSCodium-Integration:
- vscode-extension/: WebSocket-Server auf Port 7890
  (Commands: openFile, goToLine, formatDocument, findInFiles,
   openTerminal, getStatus, executeCommand, ping)
- src-tauri/src/ide.rs: WebSocket-Client via tokio-tungstenite
- IdePanel.svelte: Status, Port-Konfig, Ping-Test, Live-Anzeige aktive Datei

Phase 14 Programm-Steuerung (programs.rs + ProgramsPanel):
- D-Bus: dbus_call + dbus_list_services
- Xvfb: start/stop/status + screenshot (scrot)
- Playwright-Info (MCP-Verweis)
- ProgramsPanel mit 4 Sektionen (VSCodium, Playwright, D-Bus, Xvfb)

Phase 15 Schulungsmodus (teaching.rs + presentation/+page.svelte):
- Separates Tauri-Webview-Fenster
- MermaidDiagram.svelte (dynamic import mermaid)
- AnimatedCode.svelte mit WPM-Steuerung
- Tauri-Commands: presentation_open/close/send_slide/clear
- 🎓-Button in der Titelbar
- Capabilities um core:webview:allow-create-webview-window erweitert

Deps:
- Cargo: +tokio-tungstenite 0.23, +futures-util 0.3
- npm: +mermaid ^11.4.0 (npm install erforderlich)

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-14 19:10:41 +02:00
Eddy
de90c2da19 Phase 11 Ausbau: AUTO-Heuristik + Custom Sub-Agents + Delegations-Badge
Bridge (scripts/claude-bridge.js):
- chooseAutoMode(): Keyword-Heuristik wählt solo/handlanger/experten
  basierend auf Aufgabenkomplexität und Nachrichtenlänge
- auto-mode-chosen Event fuer Frontend-Feedback
- effectiveMode statt agentMode durchs ganze sendMessage-Flow

Custom Sub-Agents via SDK agents-Option:
- HANDLANGER_AGENTS.worker: Haiku, exakte Ausfuehrung, max 500 Tokens
- EXPERTEN_AGENTS: research/implement/test/review mit eigenen Tools+Prompts
- Orchestrator-Prompts verweisen auf subagent_type Namen
- Kostenersparnis im Handlanger-Modus durch Haiku-Delegation

UI (AgentView.svelte):
- Delegations-Badge bei Sub-Agent-Knoten (farbcodiert nach Modus)
- Nur sichtbar bei depth > 0 und Modus != solo

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-14 18:50:30 +02:00
Eddy
314042a01f Phase 11 Basis: Multi-Agent-Modi mit Tool-Filterung
Bridge (scripts/claude-bridge.js):
- allowedTools je nach Agent-Modus erzwingt Delegation
- Handlanger: nur Task + TodoWrite
- Experten: Task + TodoWrite + Read + Grep + Glob
- Solo/Auto: unveraendert

Backend (src-tauri/src/claude.rs):
- Mode-Persistenz: nach bridge-ready wird gespeicherter Modus gesetzt
- Catch-all Event-Handler: leitet unbekannte Bridge-Events generisch
  ans Frontend weiter (subagent-started, monitor-event, mode-changed, ...)

UI (routes/+layout.svelte, stores/events.ts):
- Modus-Badge im Footer (Handlanger orange, Experten lila, Auto cyan)
- mode-changed Event-Listener synchronisiert agentMode Store

Bugfix voice.rs:
- reqwest::multipart::Part::file existiert nicht → auf Part::bytes umgestellt
- keine Temp-Datei mehr noetig

Bugfix knowledge.rs:
- Type-Annotation bei category Option<&str> fuer exec_map Inference

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-14 18:39:17 +02:00
Eddy
f51241efa6 Phase 10 Sprach-Interface + Phase 9 Nacharbeiten
Voice (Phase 10):
- voice.rs: OpenAI Whisper (STT) + TTS Backend
- ChatPanel: Mikrofon-Button, VAD (Pause 1.5s), Live-Pegel
- SettingsPanel: OpenAI-Key Konfiguration

Phase 9 Nacharbeiten:
- Auto-Extract vor Compacting (Entscheidungen/TODOs/Insights)
- get_tool_hints() - relevante KB-Eintraege bei Tool-Start
- activeKnowledgeHints Store, Anzeige im KnowledgePanel

Tech-Schulden:
- Dead-Code in memory.rs entfernt (MemorySystem struct)
- cargo-check Warnings behoben

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-14 18:24:28 +02:00
Eddy
51239d6639 Sticky Context Auto-Load beim App-Start
- init_sticky_context Tauri Command: Lädt Context aus DB, sendet an Bridge
- Frontend ruft Command beim Start auf (+layout.svelte)
- StickyContextInfo Store für Status-Tracking
- Context-Badge im Footer (📌 +XXctx Token)
- Zeigt Anzahl Einträge und Token-Schätzung

Bugfixes:
- context.rs: Typ-Annotationen in Closures (String statt str)
- db.rs: conn als pub(crate) für Module-Zugriff
- memory.rs: get_sticky_context → get_sticky_memory_entries (Namenskonflikt)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-04-14 14:39:39 +02:00
Eddy
be65dee04a Claude-Session-ID für SDK-Fortsetzung
- events.ts: Session-ID aus claude-result speichern via set_claude_session_id
- claude.rs: load_claude_session_id() lädt ID der aktiven Session
- claude.rs: send_to_bridge_full() mit resumeSessionId Parameter
- claude-bridge.js: sendMessage() akzeptiert resumeSessionId
- Bridge nutzt sessionId in query() Optionen für SDK-Fortsetzung

Ermöglicht nahtlose Konversations-Fortsetzung auf SDK-Ebene.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-04-14 14:30:28 +02:00
Eddy
6b8f28145f Performance-Panel mit Kosten-Tracker und Statistiken
- Neues PerformancePanel.svelte mit:
  - Kosten-Übersicht (Session, Heute, Gesamt)
  - Token-Statistiken mit Input/Output Ratio-Balken
  - Latenz-Verteilung (Min, P50, P95, Max)
  - Fehlerrate-Anzeige
  - Letzte Sessions Übersicht
- Neuer Tab "📈 Kosten" im mittleren Panel

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-04-14 14:25:13 +02:00
Eddy
9d73684ece Monitor-Events Backend-Persistierung in SQLite
- MonitorEvent Struct + CRUD-Methoden in db.rs
- monitor_events Tabelle mit Auto-Cleanup (7 Tage)
- Tauri Commands: save/load/clear_monitor_events
- Frontend: Events beim Start laden, beim Hinzufügen speichern
- Async clearMonitorEvents löscht auch DB-Einträge

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-04-14 14:22:31 +02:00
Eddy
88f2d22d12 Log-Export im Monitor-Panel
- 📥 JSON Button: Exportiert alle Events als strukturiertes JSON
- 📄 TXT Button: Exportiert als lesbarer Text
- Enthält Zeitstempel, Stats und Filter-Status
- Download als Datei (monitor-log.json / .txt)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-04-14 14:08:23 +02:00
Eddy
84dc806266 Live Token-Anzeige im Chat-Header
- Zeigt geschätzte Token-Anzahl (~X.Xk)
- Farbcodiert: grün < 20k, gelb 20-40k, rot > 40k
- Aktualisiert sich live bei jeder Nachricht

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-04-14 14:07:39 +02:00
Eddy
ab95af24ae Token-basiertes Compacting mit Bestätigungs-Dialog
- Warnung bei ~40k Token (statt plumpe Nachrichtenanzahl)
- Dialog zeigt aktuelle Token-Schätzung
- User entscheidet ob kompaktiert wird
- Zeigt was nach Compacting übrig bleibt (30 neueste)
- "Später" Button um Dialog zu schließen

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-04-14 14:03:31 +02:00
Eddy
56eb2f50cb Keyboard Shortcuts + "Das merken" Button
- Ctrl+K: Focus auf Chat-Input
- Ctrl+Shift+K: Input leeren + Focus
- Ctrl+Enter: Nachricht senden (auch mehrzeilig)
- "Das merken" Button (💡) bei jeder Nachricht
- Modal-Dialog zum Speichern in Wissensbasis
- Kategorie, Priorität, Tags auswählbar

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-04-14 13:59:23 +02:00
Eddy
2653b4fe8f Offene Punkte abgeschlossen: Bridge-Context, DiffView, FilePreview
- claude-bridge.js: Sticky Context bei API-Calls injizieren
- claude.rs: Context automatisch aus DB laden und mitsenden
- DiffView.svelte: Komponente für Edit-Tool Ergebnisse (Diff-Ansicht)
- FilePreview.svelte: Komponente für Read-Tool Ergebnisse

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-04-14 13:38:50 +02:00
Eddy
eb91e54ede Phase 9: Intelligentes Context-Management
- context.rs: Drei-Schichten-Gedächtnis (Sticky, Projekt, Wissens-Hints)
- StickyContext für kritische Infos (User, Credentials, Regeln)
- ProjectContext für Entscheidungen und TODOs nach Compacting
- DB-Schema: sticky_context, compacting_archive, context_failures
- ContextPanel.svelte: UI zur Verwaltung des Sticky Context
- Neuer Tab "Context" im rechten Panel

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-04-14 13:35:07 +02:00
Eddy
e6bd0de3da Phase 8: Claude-DB Integration — Wissensbasis-Anbindung
- knowledge.rs: MySQL-Verbindung zu claude-db (192.168.155.1)
- Volltextsuche mit MATCH AGAINST
- "Das merken" Feature zum Speichern
- KnowledgePanel.svelte: Suche, Filter, Detail-View
- Neuer Tab "Wissen" im mittleren Panel

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-04-14 13:27:59 +02:00
Eddy
abaf4eb9bf Phase 6: Session-Management Verbesserungen
- Session Auto-Load bei App-Start (aktive Session + Nachrichten)
- agent_id Spalte in messages-Tabelle für Agent-Zuordnung
- DbMessage Interface erweitert (agent_id)
- Session-Compacting: compact_session() fasst alte Nachrichten zusammen
- Standard: 30 letzte Nachrichten behalten, Rest als Summary

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-04-14 13:05:16 +02:00
Eddy
9d837efae6 Phase 7: UI-Verbesserungen — Code-Copy, Edit, Regenerate
- Code-Blöcke mit Copy-Button (📋) und Sprach-Label
- Nachrichten bearbeiten (✏️) mit Speichern & Senden
- Antwort regenerieren (🔄) für letzte Assistant-Nachricht
- Custom marked-Renderer für Code-Block-Wrapper
- MutationObserver für Streaming-kompatible Copy-Buttons

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-04-14 12:44:50 +02:00
Eddy
adb11fd121 Phase 16: System-Monitor (Debug-Panel)
Neue Komponenten:
- MonitorPanel.svelte: Live-Event-Stream mit Farbcodierung
- MonitorEvent Store in app.ts (Ringbuffer max 1000)

Features:
- 🔵 API-Events (Request/Response, Token, Kosten, Latenz)
- 🟡 Tool-Events (Name, Parameter, Dauer)
- 🟠 Agent-Events (Start/Stop)
- 🔴 Error-Events
- Filter nach Event-Typ
- Auto-Scroll toggle
- Detail-Ansicht bei Klick
- Copy-Button für Details
- Statistik-Anzeige (API-Calls, Errors, Avg Latency)

claude-bridge.js:
- sendMonitorEvent() Funktion
- summarizeToolInput() für kompakte Zusammenfassung
- Events bei API-Start, API-Ende, Tool-Start, Fehler

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-04-14 12:40:29 +02:00
Eddy
6cfcdb2c79 Phase 5: Subagent-Hierarchie + ROADMAP erweitert
Subagent-Hierarchie:
- Agent Interface erweitert: parentAgentId, depth, model
- claude-bridge.js: Erkennt Task-Tool als Subagent-Start
- events.ts: Listener für subagent-started/stopped
- AgentView.svelte: Baumansicht mit Einrückung + Collapse

ROADMAP erweitert (Phase 5-16):
- Phase 5: Subagent-Hierarchie 
- Phase 6-9: Session, UI, Claude-DB, Context
- Phase 10: Sprach-Interface
- Phase 11: Multi-Agent-Modi (Solo/Handlanger/Experten)
- Phase 12: Hook-System
- Phase 13: VSCodium Integration
- Phase 14: Programm-Steuerung (Playwright, D-Bus)
- Phase 15: Schulungsmodus (Mermaid, animierter Code)
- Phase 16: System-Monitor (Debug-Panel)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-04-14 12:35:29 +02:00
Eddy
4ba14a53e1 Session-Historie: Nachrichten werden persistent gespeichert
- Neue messages-Tabelle in SQLite für Chat-Nachrichten
- save_message, load_messages, clear_messages Tauri-Commands
- User-Nachrichten werden beim Senden sofort gespeichert
- Assistant-Nachrichten werden nach Abschluss gespeichert
- Beim Session-Wechsel werden Nachrichten aus DB geladen
- currentSessionId Store für Session-Tracking

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-04-14 10:35:04 +02:00
Eddy
433e2de2b6 Modell-Auswahl in Settings implementiert
- Neues SettingsPanel mit Modell-Auswahl (Haiku/Sonnet/Opus)
- Modell wird in SQLite persistiert (claude_model Setting)
- Bridge unterstützt set-model und get-models Commands
- Modell kann zur Laufzeit gewechselt werden
- Preisanzeige pro Modell im Settings-Panel
- Aktuelles Modell wird beim App-Start geladen

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-04-14 09:32:26 +02:00
Eddy
9129163876 Titlebar aufgeräumt — Kosten/Token nur im Footer, Modell-Badge oben rechts
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-13 22:19:08 +02:00
Eddy
1777ed8e0c Footer-Statusleiste mit Token, Kosten, Modell-Badge
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-13 22:18:10 +02:00
Eddy
e09fb8815c Statusleiste mit Token/Kosten + Modell-Badge + STOPP funktionsfähig
- Titlebar: Token in/out, Kosten, Modell-Badge (z.B. "Opus 4.6")
- sessionStats Store: kumulierte Token/Kosten pro Session
- STOPP-Button ruft invoke('stop_all_agents') auf
- Escape-Hotkey zum Stoppen
- Kompakteres Layout

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-13 22:14:46 +02:00
Eddy
3cbf77e832 Modellname mit Version: Opus 4.6 statt Opus 4
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-13 22:10:24 +02:00
Eddy
6ebd7ccf54 Modellname schöner: Opus 4 statt opus-4
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-13 21:35:50 +02:00
Eddy
03f84ceb56 Modellname im Chat anzeigen + Opus 4 als Default
- ChatPanel: Zeigt Modellname statt "Claude" (z.B. "opus-4", "haiku-4-5")
- Modell-Info kommt aus dem result-Event der Bridge
- Korrekter Modell-ID: claude-opus-4-20250514

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-13 21:21:40 +02:00
Eddy
c882e23445 Fix: Bridge-Prozess im State speichern (verhindert Drop/Kill)
Child-Objekt wurde am Ende von start_bridge() gedroppt — das schloss
die Pipes und beendete den Node-Prozess. Jetzt wird child im
ClaudeState gespeichert und lebt solange die App läuft.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-13 21:10:38 +02:00
Eddy
df3b33a6ed Live-Streaming im Chat — Text erscheint Wort für Wort
- events.ts: Leere Streaming-Nachricht bei agent-started anlegen,
  claude-text Events schreiben direkt in die aktuelle Nachricht
- ChatPanel: Typing-Dots nur bei leerer/fehlender Streaming-Nachricht
- Kein Warten auf agent-stopped mehr — Text erscheint sofort

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-13 20:34:38 +02:00
Eddy
e48519fff4 PaneForge statt eigener Resize-Logik — funktionierendes Drag
Eigene Resize-Implementierung komplett ersetzt durch PaneForge Library:
- Getestet, Svelte 5 kompatibel, funktioniert in WebKitGTK
- autoSaveId für automatische Persistierung in localStorage
- minSize/maxSize pro Panel in Prozent
- Kein eigener Pointer-Event-Code mehr nötig

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-13 20:26:20 +02:00
Eddy
f414e820e6 Fix: Rechtes Panel tatsächlich kleiner schiebbar
Alle Panels nutzen jetzt feste px-Werte, das letzte Panel bekommt
den Restplatz über JS-Berechnung statt CSS 1fr. Dadurch kann der
Drag-Handle die Breite tatsächlich reduzieren.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-13 20:24:00 +02:00
Eddy
8a6ed764c5 Fix: Rechtes Panel frei zusammenschiebbar (minmax 80px statt gespeichertem Wert)
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-13 20:22:20 +02:00
Eddy
e16a9c720a Fix: Letztes Panel füllt Restbreite (kein toter Bereich rechts)
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-13 20:21:39 +02:00
Eddy
fa60ade2fc Fix: applyWidths() generiert korrekt 7 Grid-Spalten mit Handle-Gaps
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-13 20:20:54 +02:00
Eddy
82f40b6ae2 Fix: Resizable Panels via Pointer Events + setPointerCapture
Komplett auf Vanilla JS Pointer Events umgestellt:
- setPointerCapture() fängt ALLE Events am Handle-Element (kein Overlay nötig)
- touch-action: none auf Handles (WebKitGTK Kompatibilität)
- addEventListener in onMount statt Svelte on: Syntax
- Handles als sichtbare 8px Grid-Spalten (nicht absolute)

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-13 20:13:46 +02:00
Eddy
eb8e2ac1d7 Fix: Resize-Handles als absolute Overlays statt Grid-Spalten
Komplett neuer Ansatz: Handles sind absolut positionierte 8px-Elemente
über den Panel-Grenzen statt schmale Grid-Spalten. Behebt das Problem
dass WebKitGTK Mouse-Events auf engen Grid-Zellen nicht registriert.

- Handles position:absolute über kumulierten Panel-Breiten
- 8px breit, transparent, wird blau beim Hover
- Drag-Overlay (position:fixed) fängt Events während Drag
- document.addEventListener statt window für bessere Kompatibilität

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-13 19:27:32 +02:00
Eddy
a0ad11b66c Fix: Resizable Panels — Drag-Overlay verhindert Text-Selektion
- Unsichtbares Fullscreen-Overlay während Drag fängt alle Maus-Events
- document.body.style.userSelect blockiert sofort bei mousedown
- Bestehende Selektion wird beim Drag-Start gelöscht
- Handle 5px breit + unsichtbarer 15px Greifbereich (::before)
- Visueller Grip-Indikator beim Hover

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-13 19:17:44 +02:00
Eddy
92353e2852 Fix: Grid-Template für 7 Spalten (4 Panels + 3 Handles)
Grid hatte nur 4 Spalten-Werte für 7 Kinder — Handles wurden
in die nächste Zeile umgebrochen. Jetzt korrekt: panel 3px panel 3px ...

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-13 19:16:15 +02:00
Eddy
56c967b618 Resizable Panels — alle Bereiche per Drag ziehbar
- 3 Resize-Handles zwischen den 4 Panels (Session/Chat/Aktivität/Agents)
- Mindestbreite 120px pro Panel
- Panel-Breiten werden in localStorage gespeichert und beim Neustart geladen
- Visuelles Feedback: Handle wird blau beim Hover/Drag

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-13 19:13:50 +02:00
Eddy
f101661016 Phase 5: Session-Verwaltung + permanente Konversationen
- session.rs: Neues Modul mit 7 Tauri-Commands (CRUD, Resume, aktive Session)
- db.rs: Sessions-Tabelle + CRUD-Methoden (bleiben bis User sie löscht)
- claude.rs: Session-ID und Token/Kosten automatisch in DB speichern
- SessionList.svelte: Sidebar mit Session-Liste, Erstellen, Fortsetzen, Löschen
- +page.svelte: 4-Panel Layout (Sessions | Chat | Aktivität | Agents)

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-13 19:11:17 +02:00
Eddy
532c91c605 AWL Dark Theme + Tauri 2 Config-Fix
- app.css: Komplett neues Farbschema basierend auf AWL Dark / KDE Breeze Dark
- tauri.conf.json: Shell-Plugin scope entfernt (Tauri 2 inkompatibel)
- capabilities/default.json: Tauri 2 Berechtigungen für Shell-Plugin
- StopButton + Layout: Hardcoded Farben durch CSS-Variablen ersetzt

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-13 18:38:17 +02:00
Eddy
ff423e9d80 Phase 4: Tab-Switching, Markdown-Rendering, Guard-Rails UI
- +page.svelte: Echtes Tab-Switching (Aktivität/Gedächtnis/Historie + Agents/Guard-Rails)
- ChatPanel: Markdown-Rendering via marked, Auto-Scroll, verbessertes Layout
- GuardRailsPanel: Neue Komponente für Permission-Verwaltung (CRUD, blockierte Patterns)
- package.json: marked als Dependency

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-13 18:31:33 +02:00
Eddy
f5ca5bca7c Phase 3: SQLite-Persistierung, Guard-Rails Integration + Claude Bridge
- db.rs: Vollständige SQLite-Schicht (Permissions, Audit, Memory, Patterns, Settings)
- guard.rs: Risiko-Klassifikation + Freigabe-Management in lib.rs integriert
- scripts/claude-bridge.js: Node.js Bridge für Claude CLI (stream-json, NDJSON)
- audit.rs + memory.rs: An SQLite angebunden statt In-Memory
- Frontend: MemoryPanel + AuditLog laden echte Daten via Tauri-Commands
- shell.nix: Rust-Toolchain aus nixpkgs statt rustup
- Build: cargo check + npm run build erfolgreich

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-13 18:28:35 +02:00
Eddy
5003fb9996 Phase 2: Claude SDK Integration + Event-System
- claude-bridge.js: Node.js Bridge für Claude Code CLI
- claude.rs: Child-Process Management, Event-Verarbeitung
- events.ts: Frontend Event-Listener für Tauri-Events
- Layout/ChatPanel: Echte Tauri-Commands statt Placeholder

Events implementiert:
- agent-started/stopped
- tool-start/tool-end
- claude-text (Streaming)
- claude-result (Kosten/Token)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-04-13 14:43:34 +02:00
Eddy
2822796c7a Initial Commit: Claude Desktop Grundgerüst
- Tauri 2.0 + SvelteKit Projekt aufgesetzt
- Basis-UI mit 3 Panels (Chat, Aktivität, Präsentation)
- Roter STOPP-Button Footer
- Autonomes Gedächtnis-System (memory.rs)
- Änderungs-Log / Audit Trail (audit.rs)
- Multi-Agent-View Komponenten
- NixOS Entwicklungsumgebung (shell.nix)

Phase 1 abgeschlossen, Claude SDK Integration folgt.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-04-13 12:16:20 +02:00