claude-desktop/ROADMAP.md
Eddy 8d52505d14 docs: Phase 16 — Schulungsmodus-Ausbau zum Session-Replay geplant
7 Sub-Phasen, ~14-16 h Gesamt-Aufwand:
- 16.1 Bridge-Telemetrie (SQLite session_timeline)
- 16.2 3-Spalten-Layout im Praesentations-Fenster
- 16.3 Datei-Baum mit Live-Markierung
- 16.4 Workspace mit Edit-Replay
- 16.5 Timeline mit chronologischer Navigation
- 16.6 Optional: MCP-Tools fuer gezielte Erklaerung
- 16.7 Polish + Session-Export

Architektur-Entscheidung: Bridge-passiv vor MCP-Tools — Bridge sieht
ohnehin alle Tool-Calls, Claude muss nichts wissen. MCP nur als
optionale Erweiterung wenn passive Erfassung stabil laeuft.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-27 22:45:51 +02:00

295 lines
18 KiB
Markdown
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Claude Desktop — Roadmap
Stand: 28.04.2026
---
## Ziel
Claude Desktop soll **schneller und maechtiger** sein als Codium + Claude Code Extension. Kein Feature-Bloat — nur das was echten Geschwindigkeits- und Produktivitaetsvorteil bringt.
---
## Abgeschlossen (v0.1.0 — 14.04.2026)
Alles aus Phase 1-16 ist implementiert und funktionsfaehig:
- Tauri 2.0 + SvelteKit 5 + Claude Agent SDK
- 4-Panel Layout mit 24 UI-Komponenten
- Claude Bridge (Node.js, stdio JSON-Lines)
- Guard-Rails System (Safe/Moderate/Critical/Blocked)
- SQLite Persistierung + Session-Management
- Claude-DB Integration (Wissensbasis durchsuchen/speichern)
- 3-Schichten Context-Management (Sticky/Projekt/Hints)
- Sprach-Interface (Whisper STT + OpenAI TTS)
- Multi-Agent-Modi (Solo/Handlanger/Experten/Auto)
- Hook-System (SessionStart, PreToolUse, PostToolUse)
- VSCodium-Extension (WebSocket Port 7890)
- Programm-Steuerung (D-Bus, Xvfb, Playwright-MCP)
- Praesentations-/Schulungsmodus
- System-Monitor + Performance-Metriken
- Subagent-Hierarchie mit Baumansicht
- Auto-Updater (Forgejo Package Registry)
- Slash-Command Autocomplete
- KB-Hints Injection + Proaktive Intelligenz
- Error-Pattern Auto-Detection (3x → KB-Eintrag)
---
## Phase 3: Performance (naechster Schritt)
**Ziel:** Erste Antwort in < 1s, Bridge immer warm, kein Warten.
| Feature | Datei(en) | Status |
|---------|-----------|--------|
| KB-Cache (RAM) | `knowledge.rs` | 60s TTL, LRU, max 100 Entries |
| Bridge Warm-Start | `lib.rs`, `claude.rs` | Start bei App-Launch, kein Cold-Start |
| Lazy Panel-Load | `+page.svelte` | Dynamic Import mit Cache |
| Session-Resume Fix | `claude-bridge.js` | Stale ID auto-Retry neue Session |
| Auto-Retry (Netzwerk) | `claude-bridge.js` | 3x Backoff bei Rate-Limit/5xx |
| Bridge Heartbeat | `claude-bridge.js` | 30s Pulse an Rust |
| FIFO Message Queue | `ChatPanel.svelte` | Mehrere Nachrichten queuen |
| Bridge-Daemon | `claude.rs`, `claude-bridge.js` | Bridge ueberlebt App-Neustart (--socket Flag) |
| Unix Socket IPC | `claude.rs`, `claude-bridge.js` | stdio UDS (async, Reconnect, PID-Tracking) |
---
## Phase 4: Codium-Killer Features
**Ziel:** Dinge die Codium + Extension prinzipbedingt NICHT koennen.
| Feature | Datei(en) | Status |
|---------|-----------|--------|
| Projekt-Wechsel | `db.rs`, `SessionList.svelte` | Ein Klick wechselt Projekt (CWD, Context, KB-Filter) |
| MCP-Hub nativ | `claude.rs`, `claude-bridge.js` | MCP-Server aus .claude.json, UI-Verwaltung, Runtime-Injection |
| Guard-Rails UI | `guard.rs`, `GuardRailsPanel.svelte` | Live-Feed, Risiko-Statistik, Ein-Klick-Freigabe, 3 Tabs |
| Persistent Memory | `memory.rs`, `claude.rs` | Auto-Load Eintraege in Context, Cross-Session Gedaechtnis |
| Quick-Actions | `QuickActions.svelte`, `ChatPanel.svelte` | Ctrl+K Palette: Deploy, Build, Test, Commit, Git, Navigation |
| Voice-Conversation | `voice.rs`, `VoicePanel.svelte` | Lokales Whisper STT + Piper TTS, VAD, Gespraechsmodus |
| Settings-Panel | `SettingsPanel.svelte` | VS-Code-artiges Layout mit Suche, Kategorien, Commands, Hooks |
| Chat-Detach | `chat_window.rs`, `+page.svelte` | Chat in separates Fenster herausloesen/zurueckholen |
| Aktivitaets-Phasen | `events.ts`, `ChatPanel.svelte` | 4 Phasen: Denkt/Streamt/Tool/Subagent statt nur "Denkt nach" |
---
## Phase 5: Lokale KI + Offline
**Ziel:** Unabhaengig von Cloud fuer Routine-Tasks.
| Feature | Datei(en) | Status |
|---------|-----------|--------|
| Whisper.cpp lokal | `voice.rs` | whisper-cli STT, Thorsten-DE Modell, kein OpenAI noetig |
| Piper-TTS lokal | `voice.rs` | piper-tts mit thorsten_emotional (high), offline |
| Lokales Haiku-Equivalent | `claude-bridge.js`, `claude.rs` | Ollama-Integration, Auto-Detect, local-query Command |
| Offline-Queue | `session.rs` | SQLite-Queue, queue/flush/clear Commands, Auto-Retry |
---
## Phase 6: Desktop-Integration (Linux-Native)
**Ziel:** Claude steuert den Desktop wie ein zweiter User.
| Feature | Datei(en) | Beschreibung |
|---------|-----------|--------------|
| D-Bus Actions | `programs.rs`, `ProgramsPanel.svelte` | 10 Aktionen: Dolphin, Kate, Konsole, Firefox, Notify, Lock |
| Clipboard-Watch | `clipboard.rs` | Claude reagiert auf Clipboard-Inhalt (Code/URL/Fehler erkennen) |
| File-Drop | `ChatPanel.svelte` | Dateien auf Chat droppen Claude analysiert/bearbeitet |
| Screenshot-Analyse | `programs.rs`, `ProgramsPanel.svelte` | Spectacle/Scrot Region-Capture, Vorschau, an Chat senden |
| Global Hotkey | `lib.rs` | Super+C oeffnet Claude-Eingabe von ueberall |
---
## Phase 7: VS Code Extension Features
**Ziel:** Die besten Features der Claude Code VS Code Extension uebernehmen Accept/Reject, @-Mentions, Checkpoints.
| Feature | Datei(en) | Status |
|---------|-----------|--------|
| Accept/Reject DiffView | `DiffView.svelte`, `checkpoint.rs`, `db.rs` | Post-Execution Approval mit Revert, Kompakt-Ansicht, interaktive Buttons |
| Checkpoint/Rewind | `checkpoint.rs`, `db.rs`, `claude.rs`, `claude-bridge.js` | Automatische Snapshots bei Edit/Write, SQLite-basiert, Rewind auf beliebigen Punkt |
| @-Mentions | `FileMention.svelte`, `context.rs`, `ChatPanel.svelte` | Fuzzy-Autocomplete, Dateiinhalt-Injection, Zeilenbereiche (#5-10) |
| Bridge Pending-Queue | `claude-bridge.js` | Nachrichten waehrend laufender Verarbeitung puffern, Auto-Dispatch nach Turn |
| Tool-ID Sync | `events.ts`, `app.ts` | Backend-IDs korrekt durchreichen, Aktivitaets-Punkte Bug behoben |
| Session-Projekt-Sync | `SessionList.svelte` | Session-Klick aktiviert zugehoeriges Projekt automatisch |
---
## Phase 8: VS-Code-Look — Chatbereich-Redesign
**Ziel:** Chatbereich strukturell und visuell wie die offizielle Claude Code Extension fuer VS Code/Codium gestalten linksbuendige Messages, Inline-Tool-Karten, VS-Code-Dark-Theme. ChatPanel.svelte (~2000 Z.) wird in fokussierte Teilkomponenten zerlegt.
| Feature | Datei(en) | Status |
|---------|-----------|--------|
| VS-Code-Theme-Variablen | `theme/vscode.css`, `+layout.svelte` | `--vscode-*` Custom Properties + Aliase fuer Altcode |
| Inline-Render via MessageList | `ChatPanel.svelte` | Messages-Bereich in `<MessageList />` ausgelagert; Logik bleibt im Container |
| Message.svelte | `Message.svelte` (NEU) | Avatar links, linksbuendig, Hover-Actions (Edit/Regenerate/Copy/Merken/Rewind) |
| MessageList.svelte | `MessageList.svelte` (NEU) | Smart-Sticky-Scroll, Back-to-Bottom-Button |
| Inline Tool-Cards | `ToolCallCard.svelte`, `ToolCardRead/Edit/Bash/Generic.svelte` (NEU) | Klappbare Karten in Assistant-Message; Edit zeigt Diff + Accept/Reject |
| Tool-Calls an Message binden | `events.ts`, `app.ts` | `Message.toolCalls?[]` ergaenzt, Tool-Events an letzte Assistant-Msg gebunden |
| ChatStatusBar | `ChatStatusBar.svelte` (NEU) | Token/Mode/Modell + Modus-Picker; Header bekommt Spark-Icon |
| Eigen-Features-Mapping | | Mic, Modus-Indikator, Detach, Das merken" funktionieren weiter |
| Activity-Panel parallel | `ActivityPanel.svelte` | unveraendert, dient als History-View neben den Inline-Karten |
---
## Phase 9: Komplettes UI-Redesign — Cursor/Zed-Niveau (aktuell)
**Ziel:** Schluss mit Emoji-Inflation, 4-Pane-Zerstueckelung und Schriftgroessen-Chaos. Verbindliches Design-System (Farben/Typo/Spacing/Radius), 2-spaltiges Layout (Sidebar + Hauptbereich mit Tabs), Werkzeug-Panels als Drawer von rechts statt zwei nebeneinander liegender Tab-Reihen.
| Feature | Datei(en) | Status |
|---------|-----------|--------|
| Design-System (Variablen) | `app.css` | 4 Graustufen, 1 Akzent (#007acc), 4 Status-Farben, 5 Schriftgroessen, 4-Punkt-Spacing, 2 Radius-Werte |
| vscode.css Aliase | `theme/vscode.css` | `--vscode-*` Variablen mappen auf Phase-9-Variablen |
| UI-Library | `src/lib/ui/` | Button, Card, Icon, Badge, StatusDot, Tooltip, Drawer, Tabs |
| Lucide Icons | | `lucide-svelte` installiert, ersetzt Emojis im Chrome |
| StatusBar (22px) | `StatusBar.svelte` (NEU) | Token · Modell+Modus · Kosten · Phase, klickbarer Modus-Picker |
| Titlebar entruempelt | `+layout.svelte` | Logo + Stop + Schulungsmodus (Lucide) + Version, kein Status-Dot mehr |
| Sidebar (240px) | `Sidebar.svelte` (NEU) | Suche (Cmd+K), Sessions, Nav-Rail mit 4 Lucide-Icons (Activity/Database/Wrench/Settings) |
| ToolDrawer | `ToolDrawer.svelte` (NEU) | Rechts-Drawer (420px) mit internen Tabs fuer Activity/Memory/Tools/Settings, Esc-schliessbar |
| +page.svelte 2-spaltig | `+page.svelte` | 4-Pane-PaneForge-Layout aufgeloest, jetzt: Sidebar + ChatPanel (flex) + Drawer-Overlay |
| Hardgecodete Farben raus | 9 Komponenten | `#ef4444 #22c55e #eab308 #f59e0b #a855f7 #06b6d4 ...` durch `var(--status-*)` ersetzt |
| Status-Emojis durch StatusDot | `AgentView.svelte` | `🟢 🟡 ⚪ 🔴` durch `<StatusDot>` mit Pulse-Animation bei aktivem Agent |
| ChatPanel entkoppelt | `ChatPanel.svelte` | Header + ChatStatusBar entfernt (jetzt global) kompakte Toolbar nur noch fuer Detach |
| Cmd+K global | `+page.svelte`, `QuickActions.svelte` | Globaler Listener oeffnet QuickActions; navigate-tab oeffnet Drawer-Sektion |
| Komponenten-Pass (Emojis raus) | 13 Panels | Emojis in Tab-Labels und Action-Buttons noch sukzessive durch Lucide ersetzen |
---
## Phase 16: Schulungsmodus-Ausbau — Session-Replay
**Ziel:** Das Praesentations-Fenster wird vom Slide-Stream zum vollwertigen Session-Replay. Drei Spalten: Datei-Baum links (waechst mit den beruehrten Pfaden), Workspace in der Mitte (animierter Edit oder Diff-Viewer), Timeline rechts (klickbare Liste aller Tool-Aktionen). Live waehrend Claude arbeitet, retroaktiv fuer gespeicherte Sessions.
**Architektur-Entscheidung:** Bridge-passiv vor MCP-Tools. Die Bridge sieht ohnehin jeden Tool-Call sie schreibt einfach mit. Claude muss nichts wissen oder steuern. MCP-Tools fuer gezielte Erklaerung sind optional und kommen erst wenn die passive Erfassung sauber laeuft.
**Tradeoff:** Reine Bridge-Loesung ist robust und funktioniert auch retroaktiv, aber stumm" sie zeigt was passiert, nicht warum. Reine MCP-Steuerung waere erklaerend, aber fragil (Claude muss konsistent zugreifen). Hybrid in dieser Reihenfolge gibt sofort 90 % des Werts und laesst sich spaeter erweitern.
### Phase 16.1: Bridge-Telemetrie (Datenerfassung)
**Aufwand:** ~3-4 h. Ohne UI-Aenderungen am Ende der Phase liegen Daten in SQLite.
| Feature | Datei(en) | Status |
|---------|-----------|--------|
| SQLite-Schema `session_timeline` | `db.rs`, `migrations` | id, session_id, tool_id, tool, file_path, timestamp, action (read/edit/write/glob/grep/bash), before_hash, after_hash, line_start, line_end, payload_json |
| Telemetry-Modul | `telemetry.rs` (NEU) | `record_tool_event(session_id, ev)`, dedupliziert nach tool_id, schreibt in `session_timeline` |
| Hook in claude.rs | `claude.rs` | In `handle_bridge_message` bei `tool-start`/`tool-end`/`checkpoint-after` jeweils `telemetry::record_*` aufrufen |
| Before/After-Snapshots | `db.rs` | Zusaetzlich zu Checkpoint-Tabelle: dauerhafter Diff pro Edit gespeichert (komprimiert), nicht nur fuer Rewind |
| Tauri-Command `presentation_get_timeline` | `teaching.rs` | Liefert Timeline einer Session (live oder historisch) |
| Tauri-Event `timeline-append` | `claude.rs` | Pro neuem Eintrag Frontend kann live mitschreiben |
**Risiko:** Datenmenge bei langen Sessions. Mitigation: Before/After als komprimiertes Diff (zstd), nicht als Volltext doppelt.
### Phase 16.2: 3-Spalten-Layout im Praesentations-Fenster
**Aufwand:** ~2-3 h. Reines Layout die Spalten zeigen erstmal Platzhalter, Logik kommt in 16.3-16.5.
| Feature | Datei(en) | Status |
|---------|-----------|--------|
| PaneForge-Layout | `presentation/+page.svelte` | 3 PaneGroups: 22 % / 56 % / 22 %, resizable, persistente Breiten |
| Mode-Toggle | `presentation/+page.svelte` | Knopf in Footer: Slides" (alter Modus) Replay" (neues Layout). Slide-Modus bleibt fuer Mermaid/Code/Text erhalten |
| Container-Komponenten | `FileTree.svelte`, `Workspace.svelte`, `Timeline.svelte` (NEU) | Skelette, in den naechsten Phasen befuellt |
| Default-View | `presentation/+page.svelte` | Bei offenem Fenster und neuer Tool-Aktion automatisch in Replay-Modus wechseln |
### Phase 16.3: Datei-Baum mit Live-Markierung
**Aufwand:** ~3 h.
| Feature | Datei(en) | Status |
|---------|-----------|--------|
| Tree-Aufbau aus Timeline | `FileTree.svelte` | Pfade aus Timeline-Eintraegen hierarchischer Baum, Ordner-Knoten implizit |
| Status-Farbcodierung | `FileTree.svelte` | grau=unbekannt, blau=gelesen, gruen=geaendert, gelb=erstellt, rot=geloescht, pulsierend=aktuell aktiv |
| Auto-Expand bei Aktivitaet | `FileTree.svelte` | Wenn Datei in der Timeline auftaucht, Pfad bis zur Wurzel auffalten |
| Klick auf Datei | `FileTree.svelte` `Workspace.svelte` | Mitte zeigt letzten bekannten Stand + alle Edits dieser Datei untereinander |
| Mini-Counter pro Knoten | `FileTree.svelte` | edited.ts (3 )" Anzahl Aenderungen direkt am Knoten |
**Risiko:** Bei sehr breiten Repos wird der Tree unuebersichtlich. Mitigation: Nur Pfade die in der Timeline auftauchen kein vollstaendiger Filesystem-Scan. Maximal 200 Knoten sichtbar, Rest collapsed.
### Phase 16.4: Workspace (Mitte) — Edit-Replay
**Aufwand:** ~2 h. Bauteile (`AnimatedFileEdit`) sind da, fehlen nur Verkettung und Auswahl-Logik.
| Feature | Datei(en) | Status |
|---------|-----------|--------|
| Aktive Datei-Anzeige | `Workspace.svelte` | Eine Datei zur Zeit, Header mit Pfad + aktiv"/„abgeschlossen" Status |
| Edit-Liste pro Datei | `Workspace.svelte` | Wenn mehrere Edits an gleicher Datei: chronologische Liste, jeder Edit als Karte mit Before/After-Diff |
| Replay-Knopf pro Edit | `Workspace.svelte`, `AnimatedFileEdit.svelte` | Klick spielt die Animation erneut ab `{#key}` fuer Reset |
| Lese-Operationen anzeigen | `Workspace.svelte` | Read/Glob/Grep nicht animiert sondern als kompakte Eintraege („Gelesen: Zeilen 5-50") |
| Bash-Snippets | `Workspace.svelte` | `Bash`-Calls als Terminal-Card mit Befehl + Output-Snippet |
### Phase 16.5: Timeline (Rechts) — Chronologische Navigation
**Aufwand:** ~2 h.
| Feature | Datei(en) | Status |
|---------|-----------|--------|
| Vertikale Timeline | `Timeline.svelte` | Chronologisch, neueste oben, Zeitstempel + Tool-Icon + Pfad-Snippet |
| Filter-Chips | `Timeline.svelte` | Nur Edits / Nur Reads / Nur Bash / Alle schmale Toggle-Reihe |
| Klick Workspace + Tree | `Timeline.svelte` | Klick aktiviert Datei in Tree und zeigt diesen Edit in Mitte |
| Live-Indikator | `Timeline.svelte` | Pulsierender Punkt am neuesten Eintrag waehrend Session laeuft |
| Session-Wechsler | `Timeline.svelte` | Dropdown oben: aktuelle Session / historische Sessions, laedt jeweilige Timeline |
### Phase 16.6: Optional — MCP-Tools fuer gezielte Erklaerung
**Aufwand:** ~3 h, optional. Erst nach 16.1-16.5 sinnvoll, vorher kein Mehrwert.
**Konzept:** Wenn das Praesentations-Fenster offen ist, bekommt Claude per System-Prompt-Hint einen MCP-Server `presentation` mit drei Tools. Sie kann sie nutzen muss aber nicht. Bridge-Telemetrie laeuft unabhaengig weiter.
| Tool | Wirkung |
|------|---------|
| `present_focus(file, line_start?, line_end?)` | Markiert Datei + Zeilenbereich im Workspace, scrollt dorthin |
| `present_explain(text, anchor?)` | Sprechblase rechts neben Workspace, optional an Datei/Zeile gepinnt |
| `present_diagram(mermaid)` | Modal mit Mermaid-Diagramm fuer Architektur/Flow-Erklaerungen |
**Tradeoff:** Claude muss daran denken, das ist anfangs flackernd. System-Prompt sollte nutze diese Tools sparsam, nur fuer Schluesselstellen" sagen, sonst wird's Spam.
### Phase 16.7: Polish + Export
**Aufwand:** ~2 h.
| Feature | Datei(en) | Status |
|---------|-----------|--------|
| Geschwindigkeitssteuerung global | `presentation/+page.svelte` | Speed-Steps wirken jetzt fuer alle Edits auch beim Replay alter Eintraege |
| Pause/Resume bei Live | `presentation/+page.svelte` | Pause" friert Tree+Timeline ein, neue Eintraege werden gepuffert, Resume" arbeitet sie ab |
| Session-Export | `teaching.rs` | Schulungsvideo" als JSON-Bundle exportieren laed't in einer anderen Instanz wieder |
| Hotkeys | `presentation/+page.svelte` | j/k = Timeline rauf/runter, Enter = Replay, t = Tree-Fokus |
---
**Gesamt-Aufwand Phase 16 (ohne 16.6):** ~14-16 h, in 6 zusammenhaengenden Sub-Phasen. Jede Sub-Phase ist fuer sich nuetzlich auch wenn nur 16.1-16.3 fertig werden, ist das schon ein lebender Datei-Baum mit Telemetrie-Backend.
**Reihenfolge-Begruendung:** Telemetrie zuerst (16.1) ohne Daten kein UI. Layout-Skelett (16.2) gibt einen Rahmen zum Befuellen. Dann von links nach rechts (16.3 Tree 16.4 Workspace 16.5 Timeline) weil das die natuerliche Lesereihenfolge des Users ist. Polish (16.7) am Ende. MCP (16.6) nur wenn Phase 16.1-16.5 stabil sind.
---
## Technische Schulden
| Was | Prioritaet |
|-----|-----------|
| TypeScript strict mode | Niedrig |
| E2E Tests (Playwright) | Mittel |
| Cargo warnings eliminieren | Erledigt 0 Warnings |
| Dead Code in alten Panels | Niedrig |
| Bridge Error-Handling verbessern | Erledigt Global Handler, Parse-Logging, .catch() |
---
## Nicht geplant
- Multi-User / Team-Features
- Cloud-Sync
- Plugin-System (overkill fuer 1-User-App)
- Electron-Port (Tauri bleibt)
---
## Build & Entwicklung
```bash
# Dev (Hot-Reload)
cd "/mnt/17 - Entwicklungen/20 - Projekte/ClaudeDesktop"
CARGO_TARGET_DIR=/tmp/claude-desktop-target nix-shell --run "npx tauri dev"
# Produktion
CARGO_TARGET_DIR=/tmp/claude-desktop-target nix-shell --run "npx tauri build -- --bundles appimage"
# CI: Commit mit [appimage] → Forgejo Runner baut + uploaded
```