Commit graph

140 commits

Author SHA1 Message Date
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
18c8ef2f4f Drei Agent-Modi: Solo / Handlanger / Experten
- Solo: Main macht alles, keine Subagents (für Triviales)
- Handlanger: Main denkt, Subs führen exakt aus (Koordination)
- Experten: Jeder Agent plant selbst (parallelisierbar)

Einstellbar in UI:
- Settings: Agent-Modus Dropdown
- Auto-Modus wählt basierend auf Komplexität
- Footer zeigt aktiven Modus

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-04-14 12:22:50 +02:00
Eddy
f640b18f47 Phase 11: Multi-Agent-Architektur für Context-Einsparung
Orchestrator + spezialisierte Sub-Agents statt einem Main-Agent:
- Orchestrator: Plant, delegiert, entscheidet (kleiner Context)
- Research Agent: Durchsucht Code, gibt Zusammenfassung
- Implement Agent: Schreibt Code nach Spec
- Test Agent: Führt Tests aus, berichtet Ergebnisse
- Review Agent: Prüft Code-Qualität

Vorteile:
- Main Context bleibt klein (~10k statt 200k)
- Compacting selten nötig
- Parallele Arbeit möglich
- Spezialisierung = bessere Ergebnisse

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-04-14 12:20:18 +02:00
Eddy
25617dc76f Enforcement-Mechanismen für Context-Nutzung
- Position: Schicht 1 im System Prompt, Schicht 2 als letzter Reminder
- Explizite Anweisungen mit <critical-context> Tags
- validateResponse() für Kontext-Ignorierung erkennen
- Auto-Retry mit Korrektur-Hinweis
- context_failures Tabelle für Feedback-Loop
- UI-Warnung bei Regel-Verletzung

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-04-14 12:18:08 +02:00
Eddy
35872f8679 ROADMAP.md mit vollständigem Entwicklungsplan
Phase 5: Subagent-Hierarchie (Baumansicht)
Phase 6: Session-Management (Auto-Load, agentId)
Phase 7: UI (Edit/Regenerate/Copy/Diff)
Phase 8: Claude-DB Integration (Wissensbasis)
Phase 9: Context-Management (Drei-Schichten-Gedächtnis)
Phase 10: Sprach-Interface (Whisper/TTS)
Phase 11: Hook-System (Automatisierung)

Enthält DB-Schema für:
- project_context (Schicht 2)
- credentials (verschlüsselt)
- compacting_archive
- concept_cache

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-04-14 12:15:45 +02:00
Eddy
3c6da3b3d5 Tray-Icon mit Menü (Zeigen/Minimieren/Beenden)
- Tray-Icon zeigt App im System-Tray
- Kontextmenü: Fenster zeigen, Minimieren, Beenden
- Klick auf Tray-Icon zeigt Fenster
- Capabilities für Window-Operationen ergänzt
- Icon-Konfiguration in tauri.conf.json

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-04-14 11:57:15 +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
583fc2cb82 Bridge komplett auf Claude Agent SDK umgebaut — Opus 4.6 funktioniert
- @anthropic-ai/claude-agent-sdk statt raw API oder CLI-Spawn
- query() Funktion mit async generator für Streaming
- OAuth-Auth funktioniert automatisch (Claude Max Abo)
- Opus 4.6 als Default, kein Rate-Limit, ~5s Antwort
- AbortController für STOPP-Button
- Kein CLI-Overhead, keine Hooks, kein MCP-Init

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-13 21:33:01 +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
87ccf014cc Default-Modell auf Claude Opus 4.6 gesetzt
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-13 21:19:18 +02:00
Eddy
377a808e7b Bridge: Konfigurierbares Modell (Default: Haiku, via CLAUDE_MODEL Env)
Haiku als Default — schnell und günstig für Tests. Sonnet/Opus
über CLAUDE_MODEL Env-Var oder später über Settings in der App.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-13 21:15:00 +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
59e5b2ad77 Fix: Bridge-Prozess im Projektverzeichnis starten (node_modules)
current_dir() auf Projektroot setzen damit Node.js die
node_modules/@anthropic-ai/sdk findet.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-13 20:57:31 +02:00
Eddy
c78e7f3dcc Bridge auf direkte Anthropic API umgebaut — ~2s statt 5-10min
- @anthropic-ai/sdk statt Claude CLI — kein Hook/MCP/Plugin-Overhead
- OAuth-Token automatisch aus ~/.claude/.credentials.json geladen
- Streaming via messages.stream() — Text erscheint sofort
- Conversation-History für Multi-Turn (clear-history Befehl)
- AbortController für sofortigen STOPP
- Kosten-Berechnung pro Request
- API-Key auch per set-api-key Befehl oder ANTHROPIC_API_KEY Env-Var

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-13 20:53:29 +02:00
Eddy
11ecbd83f3 Fix: withGlobalTauri + Bridge-Pfadsuche für Dev-Modus
- tauri.conf.json: withGlobalTauri: true — behebt 'invoke undefined'
- claude.rs: Bridge-Script in 3 Pfaden suchen (Binary-Dir, Cargo-Manifest, CWD)

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-13 20:43:01 +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
3e5021dbf0 Fix: Bridge --verbose Flag + korrekte Event-Extraktion
- --verbose ist Pflicht für --output-format stream-json
- total_cost_usd statt cost_usd für Kosten
- usage.input_tokens/output_tokens + Cache-Info
- Session-ID aus system.init Events
- rate_limit_event ignorieren
- allowedTools entfernt (Claude entscheidet selbst)

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-13 20:32:32 +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