Commit graph

17 commits

Author SHA1 Message Date
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
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
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
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
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
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
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
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
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
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
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
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
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
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