claude-desktop/README.md
Eddy 8725e2f4e6 docs: Komplette Dokumentation überarbeitet — README als Entwickler-Handbuch, CLAUDE.md als Session-Kurzreferenz
README.md: Architektur-Diagramm, alle 18 Rust-Module + 27 Svelte-Komponenten dokumentiert,
Features nach Phasen, MCP-Server, CI/CD, Tastenkürzel, KB-Referenzen.
CLAUDE.md: Tech-Stack, Kommunikationskette, Bridge-Daemon Details, Agent-Modi,
häufige Probleme & Lösungen Tabelle, Build-Befehle.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-21 14:59:42 +02:00

242 lines
10 KiB
Markdown

# Claude Desktop
Nativer AI-Desktop-Assistent fuer Linux. Schneller und maechtiger als Codium + Claude Code Extension.
**Tech-Stack:** Tauri 2.0 (Rust) + SvelteKit 5 + Claude Agent SDK (Node.js)
**Codebase:** ~24.000 Zeilen, 154 Commits, 27 Svelte-Komponenten, 18 Rust-Module
---
## Schnellstart
```bash
# Development (Hot-Reload)
cd "/mnt/17 - Entwicklungen/20 - Projekte/ClaudeDesktop"
CARGO_TARGET_DIR=/tmp/claude-desktop-target nix-shell --run "npx tauri dev"
# Produktion (AppImage)
CARGO_TARGET_DIR=/tmp/claude-desktop-target nix-shell --run "npx tauri build -- --bundles appimage"
# CI: Commit mit [appimage] im Message → Forgejo Runner baut + uploaded automatisch
```
---
## Architektur
```
┌──────────────────────────────────────────────────────────┐
│ SvelteKit Frontend │
│ 27 Svelte-Komponenten (Chat, Voice, Guard-Rails, ...) │
├──────────────────────────────────────────────────────────┤
│ Tauri IPC │
├──────────────────────────────────────────────────────────┤
│ Rust Backend │
│ 18 Module (claude.rs, db.rs, guard.rs, voice.rs, ...) │
├──────────────────────┬───────────────────────────────────┤
│ SQLite (lokal) │ Unix Domain Socket / stdio │
│ Sessions, Settings │ ↕ │
│ Memory, Audit │ Claude Bridge (Node.js) │
│ Offline-Queue │ @anthropic-ai/claude-agent-sdk │
├──────────────────────┤ ↕ │
│ MySQL (claude-db) │ Claude API (Anthropic) │
│ Wissensbasis │ + MCP-Server (6 Stueck) │
└──────────────────────┴───────────────────────────────────┘
```
### Datenfluss
1. **User** → Eingabe im ChatPanel (Text/Sprache/File-Drop)
2. **Frontend**`invoke('send_message')` via Tauri IPC
3. **Rust** → Sticky Context + KB-Hints laden, an Bridge senden
4. **Bridge**`query()` mit Claude Agent SDK, Events streamen
5. **Claude API** → Antwort + Tool-Calls (Bash, Read, Edit, MCP, ...)
6. **Bridge** → Events via JSON-Lines an Rust zurueck
7. **Rust**`emit()` Events ans Frontend
8. **Frontend** → Live-Rendering (Text, Tools, Subagents)
### Bridge-Modi
| Modus | Beschreibung | Wann |
|-------|-------------|------|
| **UDS-Daemon** | Bridge als eigenstaendiger Prozess, ueberlebt App-Neustart | Standard (bevorzugt) |
| **stdio** | Bridge als Child-Process mit stdin/stdout | Fallback wenn UDS fehlschlaegt |
Socket-Pfad: `/tmp/claude-bridge.sock`, PID-File: `/tmp/claude-bridge.pid`
---
## Dateistruktur
### Rust Backend (`src-tauri/src/`)
| Datei | Zeilen | Funktion |
|-------|--------|----------|
| `lib.rs` | ~340 | App-Setup, Tray-Icon, Global Hotkey (Super+C), Plugin-Init |
| `claude.rs` | ~1000 | **Kernmodul**: Bridge-Kommunikation (UDS/stdio), MCP-Hub, Ollama, send_message |
| `db.rs` | ~800 | SQLite: Sessions, Messages, Settings, Projekte, Monitor-Events, Fehler-Tracking |
| `knowledge.rs` | ~1000 | MySQL-Wissensbasis: Suche, Cache (60s TTL), KB-Hints, Smart Hints v2 |
| `session.rs` | ~300 | Session-CRUD, Offline-Queue (queue/flush/clear) |
| `guard.rs` | ~250 | Guard-Rails: Safe/Moderate/Critical/Blocked, Permissions |
| `memory.rs` | ~200 | Persistentes Gedaechtnis: Auto-Load, Patterns, Cross-Session |
| `context.rs` | ~300 | 3-Schichten Context: Sticky/Projekt/Hints, Render fuer Prompt |
| `voice.rs` | ~355 | Whisper STT + Piper TTS (5 deutsche Stimmen), offline |
| `hooks.rs` | ~200 | Hook-System: SessionStart, PreToolUse, PostToolUse |
| `audit.rs` | ~150 | Audit-Log: Alle Aktionen mit Timestamp + Risk-Level |
| `programs.rs` | ~300 | D-Bus Aktionen, Screenshot-Capture, Xvfb |
| `ide.rs` | ~200 | VSCodium-Extension Bridge (WebSocket Port 7890) |
| `clipboard.rs` | ~150 | Clipboard-Watch: Code/URL/Fehler erkennen |
| `teaching.rs` | ~150 | Praesentations-/Schulungsmodus (separates Fenster) |
| `chat_window.rs` | ~100 | Chat-Detach: Separates Fenster herausloesen/zurueckholen |
| `update.rs` | ~250 | Auto-Updater: Forgejo Package Registry, Lock-Datei |
| `commands.rs` | ~100 | Slash-Command Registry (scannt ~/.claude/commands/) |
### Frontend (`src/lib/components/`)
| Komponente | Funktion |
|-----------|----------|
| `ChatPanel.svelte` | **Hauptkomponente**: Nachrichtenliste, Eingabe, File-Drop, Modus-Indikator |
| `SessionList.svelte` | Sidebar: Sessions, Projekt-Wechsel, Suche |
| `ActivityPanel.svelte` | Live-Aktivitaet: Tool-Calls, Agent-Status |
| `AgentView.svelte` | Subagent-Hierarchie als Baumansicht |
| `MonitorPanel.svelte` | System-Monitor: API/Tool/Error Events |
| `PerformancePanel.svelte` | Token-/Kosten-Statistiken |
| `GuardRailsPanel.svelte` | 3-Tab: Live-Feed / Regeln / Blockiert |
| `VoicePanel.svelte` | Push-to-Talk, Gespraechsmodus, TTS-Wiedergabe |
| `ContextPanel.svelte` | Sticky Context anzeigen/editieren |
| `MemoryPanel.svelte` | Persistentes Gedaechtnis CRUD |
| `KnowledgePanel.svelte` | Wissensbasis durchsuchen |
| `HooksPanel.svelte` | Hook-Verwaltung |
| `SettingsPanel.svelte` | VS-Code-artiges Settings mit Suche/Kategorien |
| `ProgramsPanel.svelte` | D-Bus Aktionen, Screenshot, Xvfb |
| `IdePanel.svelte` | VSCodium-Verbindung Status |
| `AuditLog.svelte` | Audit-Eintraege durchsuchen |
| `QuickActions.svelte` | Ctrl+K Kommandopalette |
| `CommandPalette.svelte` | Slash-Command Autocomplete (/-Eingabe) |
| `CodeBlock.svelte` | Syntax-Highlighting + Copy-Button |
| `DiffView.svelte` | Diff-Anzeige fuer Code-Aenderungen |
| `MermaidDiagram.svelte` | Mermaid-Diagramme rendern |
| `StopButton.svelte` | Abbruch-Button waehrend Agent laeuft |
| `UpdateDialog.svelte` | Auto-Update Bestaetigungsdialog |
| `FilePreview.svelte` | Datei-Vorschau (Text/Bild) |
| `AnimatedCode.svelte` | Code-Tipp-Animation fuer Praesentation |
| `AutoCorrectionModal.svelte` | Fehler-Pattern Vorschlag |
### Bridge (`scripts/claude-bridge.js`)
~1100 Zeilen Node.js. Zentrale Datei fuer die Claude-Kommunikation:
- **query()** via `@anthropic-ai/claude-agent-sdk` — streamt Events
- **Multi-Agent-Modi**: Solo / Handlanger (Haiku-Worker) / Experten (4 spezialisierte Agents) / Auto
- **Subagent-Tracking**: Map mit toolUseId → agentId/type/depth
- **MCP-Server Injection**: Configs von Rust empfangen, in queryOptions injizieren
- **Ollama-Integration**: Auto-Detect beim Start, local-query fuer einfache Tasks
- **Auto-Retry**: 3x Backoff bei Rate-Limit/5xx/Netzwerkfehler
- **Session-Resume**: Stale Session-ID → automatisch neue Session starten
- **UDS-Server-Modus**: `--socket /tmp/claude-bridge.sock` fuer Daemon-Betrieb
### Stores (`src/lib/stores/`)
| Store | Inhalt |
|-------|--------|
| `app.ts` | activeSession, activeProject, agentMode, chatDetached, processingPhase |
| `events.ts` | Event-Handler fuer alle Bridge-Events (text, result, tool-start/end, ...) |
| `updateTrigger.ts` | Reactive Trigger fuer Panel-Updates |
---
## Features komplett
### Phase 1-2 (v0.1.0 — 14.04.2026)
- Tauri 2.0 + SvelteKit 5 Grundgeruest
- 4-Panel Layout, Claude Bridge (stdio), Guard-Rails
- SQLite + Session-Management, Claude-DB Integration
- 3-Schichten Context, Multi-Agent-Modi, Hook-System
- VSCodium-Extension, Programm-Steuerung (D-Bus, Xvfb)
- Praesentationsmodus, System-Monitor, Subagent-Hierarchie
- Auto-Updater, Slash-Commands, KB-Hints, Error-Patterns
### Phase 3: Performance (22.04.2026)
- KB-Cache (RAM, 60s TTL), Bridge Warm-Start, Lazy Panel-Load
- Session-Resume Fix, Auto-Retry (3x Backoff), Heartbeat
- FIFO Message Queue, **Bridge-Daemon** (UDS), **Unix Socket IPC**
### Phase 4: Codium-Killer Features
- Projekt-Wechsel (Ein-Klick), **MCP-Hub nativ** (6 Server)
- Guard-Rails UI (3 Tabs), Persistent Memory, Quick-Actions (Ctrl+K)
- Voice (Whisper + Piper, offline), Settings-Panel, Chat-Detach
- Aktivitaets-Phasen (Denkt/Streamt/Tool/Subagent)
### Phase 5: Lokale KI + Offline
- Whisper.cpp + Piper-TTS (komplett offline, 5 deutsche Stimmen)
- **Ollama-Integration** (Auto-Detect, local-query)
- **Offline-Queue** (SQLite, flush bei Reconnect)
### Phase 6: Desktop-Integration
- D-Bus Actions (10 Aktionen), Clipboard-Watch, File-Drop
- Screenshot-Analyse, Global Hotkey (Super+C)
---
## MCP-Server (6 Stueck, automatisch geladen)
| Name | Funktion | Transport |
|------|----------|-----------|
| `forgejo` | Git: Repos, Issues, PRs, Releases | stdio |
| `claude-db` | MySQL Wissensbasis: Suche, CRUD | SSE (MCP-Hub) |
| `playwright` | Browser-Automatisierung | stdio |
| `context7` | Library-Dokumentation | stdio |
| `portainer` | Docker-Container-Management | stdio |
| `homeassistant` | Smart-Home Steuerung | stdio |
Configs in `~/.claude.json` → werden beim Bridge-Start automatisch injiziert.
---
## CI/CD
**Workflow:** `.forgejo/workflows/build-appimage.yml`
**Runner:** `16-Forgejo-Runner-AppImage` (Debian Bookworm)
**Trigger:** `[appimage]` in Commit-Message auf `main`
1. Commit mit `[appimage]` → Push
2. Forgejo Runner baut AppImage (~8-10 Min)
3. Upload in Forgejo Package Registry
4. Ntfy-Notification (Topic: `vk-builds`)
5. App zieht Update beim naechsten Start (Auto-Updater)
**NixOS:** AppImage hat WebKit2GTK/Mesa ABI-Konflikt → lokaler Build mit `shell.nix` noetig. Nix-Wrapper in `~/.local/bin/claude-desktop`.
---
## Tastenkuerzel
| Kuerzel | Aktion |
|---------|--------|
| `Super+C` | Claude-Eingabe von ueberall oeffnen |
| `Ctrl+K` | Quick-Actions Palette |
| `Ctrl+Enter` | Nachricht senden |
| `Escape` | Quick-Actions/Autocomplete schliessen |
| `/` | Slash-Command Autocomplete |
---
## Wissensbasis-Referenzen
| KB-ID | Thema |
|-------|-------|
| #248 | Tauri 2.0 + SvelteKit auf NixOS shell.nix |
| #311 | CI/CD Pipeline (Workflow-Tricks) |
| #371 | Debian Forgejo-Runner Setup |
| #381 | NixOS WebKit2GTK EGL-Crash |
| #382 | Cargo auf SMB → CARGO_TARGET_DIR |
| #384 | Custom-AppRun + linuxdeploy-Hook |
---
## Nicht geplant
- Multi-User / Team-Features
- Cloud-Sync
- Plugin-System (overkill fuer 1-User-App)
- Electron-Port (Tauri bleibt)