Commit graph

165 commits

Author SHA1 Message Date
Eddy
3f22e735cd chore: trigger build [appimage]
Some checks failed
Build AppImage / build (push) Has been cancelled
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-20 22:18:10 +02:00
Eddy
e0653ddcab fix(voice): robust microphone fallback for WebKitGTK "Invalid constraint"
All checks were successful
Build AppImage / build (push) Has been skipped
WebKitGTK throws various error types (TypeError, OverconstrainedError,
etc.) when getUserMedia is called. Instead of only catching specific
error names, now ALL errors trigger device-enumeration fallback chain:
1. { audio: true }
2. Explicit deviceId from enumerateDevices()
3. { audio: {} } as last resort

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-20 22:17:52 +02:00
Eddy
5d72b85bf4 build: Phase 3 Performance-Release [appimage]
All checks were successful
Build AppImage / build (push) Successful in 6m6s
KB-Cache, Bridge-Warmstart, Multi-Queue, maxTurns 200

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-20 22:05:11 +02:00
Eddy
3d84feab6f feat: Phase 3 Performance — KB-Cache, Bridge-Warmstart, maxTurns 200
All checks were successful
Build AppImage / build (push) Has been skipped
- KB-Cache im RAM: Suchergebnisse 60s gecacht, kein MySQL-Roundtrip pro Nachricht
- Bridge wird beim App-Start sofort gestartet (kein Cold-Start bei erster Nachricht)
- Bridge-Start-Wait von 500ms auf 200ms reduziert
- maxTurns von 25 auf 200 erhoeht (verhindert "maximum turns reached" bei komplexen Tasks)
- invalidate_kb_cache Command fuer manuelles Cache-Leeren

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-20 22:02:23 +02:00
Eddy
5b857ebba4 feat: Multi-Queue — mehrere Nachrichten senden waehrend Claude arbeitet
All checks were successful
Build AppImage / build (push) Has been skipped
Statt Single-Slot-Puffer jetzt FIFO-Queue:
- Nachrichten erscheinen sofort im Chat (mit Queued-Markierung)
- Werden automatisch nacheinander abgearbeitet
- Send-Button + Mikrofon nie disabled waehrend Processing
- Queue visuell mit Anzahl + Cancel-Button
- Stopp loescht gesamte Queue

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-20 21:52:26 +02:00
Eddy
22bf5333af refactor: Roadmap neu geschrieben — Performance-First, alte Test-Roadmap entfernt
All checks were successful
Build AppImage / build (push) Has been skipped
Fokus auf Geschwindigkeitsvorteile gegenueber Codium + Claude Code.
Abgeschlossene Phasen 1-16 zusammengefasst, neue Phasen 3-6 definiert.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-20 21:45:48 +02:00
Eddy
0bdecfd4bd build: AppImage neu bauen mit Mikrofon-Fix [appimage]
All checks were successful
Build AppImage / build (push) Successful in 6m9s
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-20 21:33:31 +02:00
Eddy
2ff3c8220f fix: Mikrofon OverconstrainedError Fallback für WebKitGTK
All checks were successful
Build AppImage / build (push) Has been skipped
Bei OverconstrainedError wird erst Device-Enumeration versucht, dann
Fallback auf einfache Constraints. VoicePanel nutzt ebenfalls Fallback
von strikten auf einfache Audio-Constraints.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-20 21:32:11 +02:00
Eddy
2e473cde00 fix: stale Claude-Session-ID automatisch resetten [appimage]
All checks were successful
Build AppImage / build (push) Successful in 6m20s
Wenn die in SQLite gespeicherte claude_session_id keine passende
Konversation mehr hat (neue Maschine, Cache geleert, frische Installation),
warf das SDK "No conversation found with session ID: <uuid>" und der
Chat blieb kaputt — der Retry in claude-bridge.js hat NIE gegriffen, weil
er auf queryOptions.sessionId geprueft hat waehrend wir queryOptions.resume
setzen.

Fix:
- claude-bridge.js: Retry-Guard auf queryOptions.resume umgezogen + Match
  auf die konkrete Fehlermeldung ("No conversation found with session ID").
  Bei stale ID: session-reset-Event an Rust senden, dann retry ohne resume.
- claude.rs: Neuer Handler fuer session-reset — loescht die stale
  claude_session_id aus der aktiven Session in der DB, damit die App beim
  naechsten Start nicht wieder in denselben Fehler laeuft.

Reproduziert auf VM + NixOS-Desktop nach frischer Installation.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-20 17:16:35 +02:00
Eddy
3913e1cce8 fix: HiDPI-Scaling im Nix-Launcher — liest Xft.dpi, erzwingt Xwayland
All checks were successful
Build AppImage / build (push) Has been skipped
GTK3 kann unter Wayland kein natives fractional Scaling. Der Launcher
liest jetzt Xft.dpi aus xrdb, setzt GDK_DPI_SCALE entsprechend (fuer
scharfe Fonts) und erzwingt unter Wayland GDK_BACKEND=x11, damit der
Compositor die Fenstergroesse skaliert. Override per CLAUDE_DESKTOP_SCALE
oder abschaltbar mit CLAUDE_DESKTOP_SCALE=off.

Funktioniert transparent auf X11-VM und KDE-Wayland-Desktop.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-20 17:10:56 +02:00
be38b6e700 fix: KDE-Cache (kbuildsycoca) neu bauen, sonst fehlt Menue-Eintrag
All checks were successful
Build AppImage / build (push) Has been skipped
2026-04-20 17:02:52 +02:00
03e1ae527b fix: Installer nutzt 'nix profile' statt nix-env wenn Profil inkompatibel
All checks were successful
Build AppImage / build (push) Has been skipped
Auf aktuellen NixOS-Systemen mit flakes ist das Default-Profil unter
~/.local/state/nix/profiles/profile inkompatibel mit nix-env. Der
Installer erkennt jetzt den Profil-Typ (nix profile list) und nutzt
den passenden Befehl (nix profile install / nix-env -i).
2026-04-20 17:00:06 +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
d315f421ec [appimage] Bridge-Deploy: Scripts-Bundle + npm ci im Nix-Wrapper-Modus
All checks were successful
Build AppImage / build (push) Successful in 7m11s
Problem: Beim Nix-Wrapper lag nur das Binary unter ~/.local/share/claude-desktop/bin,
aber claude-bridge.js + node_modules waren nirgends deployt → "Bridge nicht gefunden"
beim ersten Chat-Versuch.

Loesung:
- claude.rs: Bridge-Such-Pfad um bin/../scripts erweitert (exe_dir.parent / scripts).
- update.rs: UpdateManifest + UpdateStatus um bundle_filename/bundle_sha256 erweitert.
  Neues Tauri-Command apply_bundle_update: laedt tar.gz, pruefte SHA256, entpackt
  nach ~/.local/share/claude-desktop, ruft npm ci --omit=dev auf. Im AppImage-Modus
  no-op (Bundle ist im AppImage enthalten).
- lib.rs: apply_bundle_update registriert.
- CI: packt scripts/claude-bridge.js + package.json + package-lock.json als
  claude-desktop-bundle_VERSION.tar.gz und laedt neben Binary in die Package Registry.
  update.json v3 enthaelt bundle_filename + bundle_sha256.
- install.sh: Erst-Installer laedt das Bundle, verifiziert SHA, entpackt, fuehrt
  npm ci --omit=dev aus. Holt nodejs bei Bedarf ueber nix-build (analog zu jq).
- UpdateDialog.svelte: ruft im Nix-Modus apply_bundle_update vor apply_update auf,
  damit nach dem Neustart Scripts + node_modules aktuell sind.
- nix/default.nix: nodejs_22 + tar + gzip im Wrapper-PATH, damit die App aus dem
  Binary heraus npm ci aufrufen kann.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-20 13:50:56 +02:00
Eddy
9be09897dd Fix: Updater funktioniert jetzt auch bei lokalen Builds [appimage]
All checks were successful
Build AppImage / build (push) Successful in 8m51s
Dev-Check entfernt der Updates bei lokalen Builds blockiert hat.
Jede gültige Remote-Version wird bei dev/dev-local als neuer erkannt.
HTTP/Netzwerk-Fehler werden graceful behandelt statt zu crashen.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-20 13:19:54 +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
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
71e84067f8 install.sh: jq automatisch aus nixpkgs beziehen wenn nicht vorhanden
All checks were successful
Build AppImage / build (push) Has been skipped
Vanilla-NixOS hat kein jq im PATH. Der Installer holt es jetzt via
nix-build '<nixpkgs>' -A jq und haengt es temporaer an den PATH.
Kein Abbruch mehr fuer Erstnutzer.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-20 11:16:08 +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
4e36b04cc9 PWA Mobile-App: API-Server + SvelteKit-Frontend (Phase 1+2)
All checks were successful
Build AppImage / build (push) Has been skipped
Backend (pwa/server/):
- Express + WebSocket API-Server auf Port 3100
- Claude Agent SDK Bridge mit Streaming
- Bearer-Token Authentifizierung
- REST: /api/status, /api/models, /api/sessions, /api/stop
- WebSocket: /ws mit Live-Text-Streaming
- Dockerfile für Container-Deployment

Frontend (pwa/client/):
- SvelteKit 5 PWA mit Dark Theme
- Mobil-optimierter Chat (WhatsApp/Telegram-Feeling)
- Message-Bubbles mit Markdown + Live-Streaming
- Session-Drawer (Swipe von links)
- Settings-Modal (Server/Token/Modell)
- Service Worker für Auto-Updates
- PWA-Manifest für "Add to Homescreen"
- Safe-Area-Insets für Notch-Handys

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-20 06:38:12 +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
427fa858a9 [appimage] AppRun korrekt: linuxdeploy-Hook + AppRun.wrapped statt eigene ENVs
All checks were successful
Build AppImage / build (push) Successful in 5m38s
Mein Custom-AppRun ueberschrieb das gesamte linuxdeploy-Setup. Resultat:
WebKitNetworkProcess wurde nicht gefunden weil WEBKIT_EXEC_PATH und das
korrekte LD_LIBRARY_PATH/Symlinks fehlten.

Fix: NixOS-Detection + WEBKIT-Defaults VOR den Original-Hook setzen, dann
linuxdeploy-Hook + AppRun.wrapped wie im Original aufrufen.
2026-04-20 00:11:38 +02:00
Eddy
01ddc7c938 [appimage] Fix AppRun: claude-desktop explizit, nicht find|head
All checks were successful
Build AppImage / build (push) Successful in 5m43s
find|head -1 traf xdg-open (alphabetisch vor claude-desktop) statt unsere
App. Resultat: AppImage zeigte nur xdg-open --help statt zu starten.
2026-04-20 00:01:31 +02:00
Eddy
819a65e8ae [appimage] Fix HTTP 409: auch versionierte Datei vor Upload loeschen
All checks were successful
Build AppImage / build (push) Successful in 5m15s
Forgejo Package Registry weist PUT auf existierenden Pfad mit 409 ab.
Bisher wurde nur 'latest/' geloescht, nicht aber 'VERSION/'. Beim
zweiten Build mit gleicher Version (0.1.0) crashte der Upload daher.
2026-04-19 23:36:19 +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
c9f352ecbf [appimage] Fix Upload-Step: Leerzeichen im AppImage-Namen brach curl-URL
All checks were successful
Build AppImage / build (push) Successful in 5m21s
Tauri produziert "Claude Desktop_0.1.0_amd64.AppImage" mit Leerzeichen.
curl encoded URLs nicht automatisch -> malformed HTTP-Request, Step crash
in 150ms beim PUT.

Fix:
- AppImage vor Upload zu "Claude-Desktop_..." umbenennen (tr ' ' '-')
- set -e + curl --fail -sS damit echte HTTP-Fehler den Step killen
- BASE-URL als Variable, weniger Wiederholung
2026-04-19 23:00:01 +02:00
Eddy
e346c0e5e9 [appimage] Re-trigger nach libssl-dev im Runner
Some checks failed
Build AppImage / build (push) Failing after 6m27s
2026-04-19 22:41:58 +02:00
Eddy
65c868c2ff [appimage] Auf neuen Debian-Runner umstellen
Some checks failed
Build AppImage / build (push) Failing after 1m42s
- runs-on: docker -> appimage (16-Forgejo-Runner-AppImage)
- APPIMAGE_EXTRACT_AND_RUN aus Workflow raus (jetzt im Runner-ENV)
- Erster echter Test des dedizierten AppImage-Runners
2026-04-19 22:01:39 +02:00
Eddy
467a2c5e8f [appimage] APPIMAGE_EXTRACT_AND_RUN=1 fuer linuxdeploy auf Alpine/musl
Some checks failed
Build AppImage / build (push) Failing after 6m53s
2026-04-16 00:07:54 +02:00
Eddy
817edc0f33 [appimage] Retry nach xdg-utils im Runner
Some checks failed
Build AppImage / build (push) Failing after 8m19s
2026-04-15 23:52:46 +02:00
Eddy
a2079f81bf [appimage] Retry mit Runner Rust 1.94.1 (edge-main)
Some checks failed
Build AppImage / build (push) Failing after 8m25s
2026-04-15 23:37:12 +02:00
Eddy
9e31b76319 [appimage] package-lock.json committen fuer npm ci im Runner
Some checks failed
Build AppImage / build (push) Failing after 1m17s
Die Lock-Datei war in .gitignore ausgeschlossen - damit scheitert
npm ci im CI-Build ("can only install with an existing package-lock.json").
Fix: Datei aus .gitignore raus und committen. Ist ohnehin Best Practice
damit Installs reproduzierbar sind.
2026-04-15 23:07:16 +02:00
Eddy
9e4ec73c6a [appimage] Retry nach Runner-Fix auf act_runner v0.3.1
Some checks failed
Build AppImage / build (push) Failing after 5s
2026-04-15 22:54:19 +02:00
Eddy
59046f5eb1 [appimage] Runner-nativ bauen statt rust:1.83-bookworm
Some checks failed
Build AppImage / build (push) Failing after 7s
Der 17-Forgejo-Runner (docker:host-Label) hat Rust 1.87, Node 22,
GTK, WebKit, AppIndicator, patchelf usw. bereits aus dem
docker.forgejo-runner-Image vorinstalliert. Der bisherige
container:-Block mit rust:1.83-bookworm + apt-get install hat
wegen DNS/Netzwerk in der DinD-Umgebung versagt.

Loesung: container: komplett entfernen, Job laeuft direkt im
Runner. Spart den Pull, spart die apt-Installationen und umgeht
das DNS-Problem.
2026-04-15 22:29:31 +02:00
Eddy
51b5a58c63 [appimage] Fix: DNS-Konfiguration für DinD-Container
Some checks failed
Build AppImage / build (push) Failing after 1m49s
- Container-Options: --dns 8.8.8.8 --dns 1.1.1.1
- Fallback-Step: /etc/resolv.conf ergänzen
- Löst "Could not resolve host" im Forgejo Runner

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-04-15 14:47:42 +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
424ab73e1d [appimage] Fix: rust:1.83-bookworm Image + Node.js Installation
Some checks failed
Build AppImage / build (push) Failing after 2m18s
2026-04-15 14:24:19 +02:00
Eddy
1aa353c921 [appimage] Test-Build der CI-Pipeline
Some checks failed
Build AppImage / build (push) Failing after 13s
2026-04-15 14:20:31 +02:00
Eddy
2c64963553 CI: Runner-Label auf 'docker' geändert + Forgejo API Upload
All checks were successful
Build AppImage / build (push) Has been skipped
- runs-on: docker (statt ubuntu-latest)
- Container: aspect-build/rust:stable-node22-bookworm
- Manueller git clone mit REGISTRY_TOKEN
- Forgejo API für Release-Upload (statt GitHub Action)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-04-15 14:18:35 +02:00
Eddy
e17d94a078 CI: AppImage Build Pipeline für Forgejo Actions
Some checks are pending
Build AppImage / build (push) Waiting to run
- Triggert bei [appimage] im Commit oder Release-Tag (v*)
- Baut mit Tauri-Container + Node 22 + Rust stable
- Lädt AppImage als Artifact hoch
- Bei Tag: Erstellt automatisch Release mit AppImage

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-04-15 14:16:54 +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
adcb8ac3b5 Docs: TEST-ROADMAP aktualisiert
- Kontext-Auslastung hinzugefügt
- Veraltete Uncommitted-Liste entfernt
- Commit-Historie hinzugefügt

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-04-15 13:42:28 +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
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
0c095a4d49 Phase 11 final: Tool-Restriction via System-Prompt statt SDK-Whitelist
In claude-agent-sdk 0.2.104 vererbt sich tools/disallowedTools auf
Sub-Agents — keine saubere Trennung Main vs. Sub via Query-Options.

Fix: Tool-Preset (claude_code) fuer alle Modi freischalten, Modus-
Verhalten ausschliesslich via System-Prompt (Orchestrator-Prompts)
durchsetzen. Sub-Agents haben jetzt funktionierenden Bash-Zugriff,
liefern echte ls-Ausgaben statt Halluzinationen.

Phase 11 ist damit final funktional:
- Solo: alle Tools, direkter Zugriff
- Handlanger: Delegation via Prompt durchgesetzt
- Experten: Multi-Agent via Prompt durchgesetzt
- Auto: Heuristik wechselt zwischen den Modi

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