Commit graph

29 commits

Author SHA1 Message Date
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
29cce7fbd8 [appimage] UI-Polish: Icon, Stop-Button dezent, Chat-Queue, Update-Safety
All checks were successful
Build AppImage / build (push) Successful in 6m37s
- Neues Icon-Set (SVG-Quelle + gen-icon.sh): 32/64/128/256/512+@2x in depth=8
  (Tauri-Tray erwartet 8-bit-RGBA, depth=16 crashte den Tray-Setup)
- StopButton: Icon-only (⏹), Position Titlebar rechts, nur sichtbar wenn
  isProcessing aktiv. Kein full-width roter Balken im Footer mehr.
- .footer.active-Farbwechsel entfernt — Footer bleibt neutral
- Version-Badge in der Titlebar (v<APP_VERSION>)
- Chat-Input-Queue: Single-Slot-Puffer. Beim Senden waehrend Processing wird
  die Nachricht gepuffert, Pill "Nachricht wartet..." erscheint, nach Ende
  der aktuellen Antwort wird automatisch abgeschickt.
- Stop verwirft den gepufferten Slot (bewusster Abbruch).
- apply_update: ELF-Header-Smoke-Test vor Rename. Kaputter Download oder
  falsche Architektur liefert Fehlerdialog statt zerschossene Installation.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-20 11:52:43 +02:00
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
e69ffe7f2b [appimage] AppImage auf jeder Linux-Distro lauffaehig (inkl. NixOS)
Some checks failed
Build AppImage / build (push) Failing after 5m28s
Zwei kombinierte Patches:

1. main.rs: WEBKIT_DISABLE_DMABUF_RENDERER + WEBKIT_DISABLE_COMPOSITING_MODE
   als defensive Defaults wenn nicht vom User gesetzt. Behebt typische
   WebKit2GTK-Renderer-Crashes auf modernen Wayland-Setups.

2. Workflow: nach 'tauri build' wird der AppRun gepatched.
   - Detect NixOS via /run/opengl-driver/lib -> Host-Mesa via LD_LIBRARY_PATH
   - WebKit-Workarounds als ENV-Defaults (override moeglich)
   - Standard linuxdeploy-Pfade (PATH, XDG_DATA_DIRS etc.)
   - Re-bundle mit appimagetool

Resultat: AppImage laeuft out-of-the-box auf Debian/Ubuntu/Fedora/NixOS,
ohne dass der User ENV-Vars setzen muss.
2026-04-19 23:27:40 +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
a203589eda Fix: Date-Panic in Wissensbasis (chrono::NaiveDateTime)
- mysql_async mit chrono-Feature für NaiveDateTime-Support
- 7 SELECTs in knowledge.rs von String auf NaiveDateTime umgestellt
- Timestamps werden jetzt korrekt formatiert statt Panic

Getestet:
- Wissens-Suche funktioniert ohne Crash
- Handlanger-Modus Chat-Antwort erscheint
- VSCodium-Extension Verbindung OK

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-04-15 12:43:41 +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
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
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
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
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
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
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
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
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