claude-desktop/CHANGELOG.md
Eddy 79f4f9fb21
All checks were successful
Build AppImage / build (push) Successful in 8m20s
fix: UTF-8-Crash + Input-Reset + ApprovalBar + Scroll/Streaming-Polish [appimage]
Crash-Fix:
- src/db.rs:801 panickte mit "byte index 240 is not a char boundary"
  mitten in einem -Emoji → SIGABRT. Neues strutil-Modul mit
  safe_truncate()/safe_truncate_ellipsis() (5 Tests grün), an allen
  &s[..N]-Stellen in db/claude/knowledge/session/memory.rs eingebaut.
- update.rs: Stale Lock-Files vom letzten Crash werden jetzt
  protokolliert ("🧹 Stale Lock-Datei aus vorherigem Crash gefunden").

Chat-Polish:
- Input-Textfeld wird nach Senden zuverlässig geleert (Store-Reset +
  DOM-Reset + tick — Svelte 5 bind:value mit Auto-Subscription
  aktualisiert sonst nicht synchron).
- ApprovalBar.svelte (NEU): Sticky-Bar überm Input mit klar
  beschrifteten Buttons "Übernehmen"/"Verwerfen" statt mehrdeutigem
  "Behalten/Zurueck". Bleibt sichtbar wenn der Chat scrollt. Klick
  auf Datei-Name scrollt zur Inline-Karte und blinkt sie. Shortcuts
  Ctrl+Enter/Ctrl+Backspace.
- MessageList: Auto-Scroll trackt jetzt auch toolCalls.length und
  Status-Änderungen, plus ResizeObserver am Container. Smooth bei
  kleinen Distanzen, instant bei großen.
- Streaming-Caret: pulsierender Block-Cursor mit Glow-Shadow.
- Tool-Cards: Slide-In-Transition + Shimmer-Animation auf running.
- WorkingIndicator: Verb passt sich an processingPhase an.
2026-04-27 20:55:08 +02:00

153 lines
18 KiB
Markdown

# Changelog
Alle nennenswerten Änderungen an Claude Desktop werden hier dokumentiert.
Format angelehnt an [Keep a Changelog](https://keepachangelog.com/de/1.0.0/).
---
## [Unreleased] - 2026-04-27
### Behoben (Phase 9.1: Crash-Fix + Chat-Polish)
- **Crash-Fix UTF-8 Truncation** in [src-tauri/src/db.rs](src-tauri/src/db.rs) — `&content[..240]` panickte mitten in einem ✅-Emoji (3 Bytes), App stürzte mit SIGABRT ab. Neues [src-tauri/src/strutil.rs](src-tauri/src/strutil.rs)-Modul mit `safe_truncate()` und `safe_truncate_ellipsis()` (5 Unit-Tests grün), in db.rs/claude.rs/knowledge.rs/session.rs/memory.rs an allen `&s[..N]`- und `&s[..s.len().min(N)]`-Stellen eingebaut
- **Stale Lock-File-Cleanup** in [src-tauri/src/update.rs](src-tauri/src/update.rs): nach Crash bleibt `/tmp/claude-desktop.lock` mit toter PID liegen — beim Neustart wird das jetzt explizit protokolliert (`🧹 Stale Lock-Datei aus vorherigem Crash gefunden`) statt stillschweigend ersetzt
- **Input-Textfeld nach Senden leer** in [ChatPanel.svelte](src/lib/components/ChatPanel.svelte): `bind:value={$currentInput}` aktualisierte den DOM-Wert in Svelte 5 mit Auto-Subscription nicht zuverlässig synchron. Belt-and-Suspenders: Store-Reset + harter DOM-Reset + `tick()` — der Text ist jetzt wirklich weg
### Hinzugefügt (Phase 9.1: Chat-Polish)
- **ApprovalBar.svelte** (NEU): Sticky-Bar oberhalb des Chat-Inputs, erscheint wenn `pendingChanges.length > 0`. Zeigt 1 oder N wartende Datei-Änderungen mit klar beschrifteten Buttons **„✓ Übernehmen"** / **„✕ Verwerfen"** (statt vorher mehrdeutigem „Behalten/Zurueck"). Bleibt sichtbar wenn der Chat scrollt — User verliert die offene Anfrage nicht aus den Augen. Klick auf den Datei-Namen scrollt zur Inline-Diff-Karte und blinkt sie kurz (Approval-Flash). Tastatur-Shortcuts: `Ctrl+Enter` = erste übernehmen, `Ctrl+Shift+Enter` = alle übernehmen, `Ctrl+Backspace` = erste verwerfen
- **Smart-Sticky-Scroll v2** in [MessageList.svelte](src/lib/components/MessageList.svelte): Auto-Scroll triggert jetzt auch bei Tool-Card-Updates (`message.toolCalls.length` und Status-Änderungen) — vorher hat nur `content.length` getrackt, daher hat der Stream den User „abgehängt" wenn neue Tool-Karten dazukamen. Plus ResizeObserver am Container für Diff-Aufklappen/Code-Block-Render. Smooth-Scroll bei kleinen Distanzen (< 240 px), instant bei großen. Threshold von 100 60 px
- **Streaming-Caret aufgewertet** in [Message.svelte](src/lib/components/Message.svelte): pulsierender Block-Cursor `▍` mit Glow-Shadow (Codium-Style) statt hartem on/off-blink
- **Tool-Card-Slide-In + Shimmer** in [ToolCallCard.svelte](src/lib/components/ToolCallCard.svelte): neue Tool-Karten kommen mit `transition:slide` rein, laufende Karten haben einen sanften Shimmer-Streifen über dem linken Rand (1.4s-Loop)
- **Phase-bewusster WorkingIndicator** in [WorkingIndicator.svelte](src/lib/components/WorkingIndicator.svelte): Verb passt sich an `processingPhase` an Denkt nach"/„Schreibt"/„Nutzt &lt;Tool&gt;"/„Subagent arbeitet" statt Random-Verb wenn die Phase bekannt ist. Random-Verben bleiben als Fallback
- **DiffView-Buttons umbenannt** in [DiffView.svelte](src/lib/components/DiffView.svelte): „✓ Übernehmen" / „✕ Verwerfen" mit klaren Tooltips (Shortcut-Hints) statt Behalten/Zurueck"
### Hinzugefügt (Phase 9: UI-Redesign Schritt 2 — 2-spaltiges Layout + Drawer + Komponenten-Pass)
- **Sidebar.svelte** (NEU): 240px-Sidebar mit Cmd+K-Suche oben, Sessions-Liste in der Mitte, Nav-Rail unten mit 4 Lucide-Icons (Aktivität/Speicher/Werkzeuge/Einstellungen) ersetzt die alte separate SessionList-Pane
- **ToolDrawer.svelte** (NEU): Rechts-eingeschobener 420px-Drawer mit internen Tabs pro Sektion Activity (Live/Monitor/Kosten), Speicher (Gedächtnis/Wissensbasis/Kontext), Werkzeuge (Programme/Sprache/Agenten/Guard-Rails/Hooks), Einstellungen (Settings/Audit). Esc schließt
- **2-spaltiges Layout** in [+page.svelte](src/routes/+page.svelte): das alte 4-Pane-PaneForge-Layout (Sessions/Chat/Mid-Tabs/Right-Tabs) ist aufgelöst. Jetzt: Sidebar (fix 240px) + ChatPanel (flex) + Drawer als Overlay. Kein Wirrwarr aus 13 nebeneinander liegenden Tabs mehr
- **Cmd+K global**: globaler Listener im +page.svelte öffnet QuickActions; bestehender `navigate-tab`-Event mappt automatisch auf die richtige Drawer-Sektion
- **StatusDot in AgentView**: `🟢 🟡 ⚪ 🔴`-Emojis durch `<StatusDot>`-Komponente ersetzt saubere CSS-Dots mit Pulse-Animation bei aktiven Agenten
- **Hardgecodete Farben raus** in 9 Komponenten: `#ef4444`, `#22c55e`, `#eab308`, `#f59e0b`, `#a855f7`, `#06b6d4`, `#a78bfa`, `#8b5cf6`, `#60a5fa` durch `var(--status-success/warning/error/info)` und `var(--accent)` ersetzt betroffen: GuardRailsPanel, AgentView, ChatPanel, PerformancePanel, ProgramsPanel, SettingsPanel, VoicePanel, IdePanel, AutoCorrectionModal, UpdateDialog
- **ChatPanel entkoppelt**: lokaler Header (mit Spark-Icon, Stats, Detach) und ChatStatusBar entfernt die Funktionen leben in der globalen Titlebar bzw. Statusbar. Im ChatPanel bleibt nur eine kompakte 28px-Toolbar mit Detach-Button
### Hinzugefügt (Phase 9: UI-Redesign Schritt 1 — Design-System + Status-Bar)
- **Design-System** in [src/app.css](src/app.css): 4 Graustufen (`--bg-primary/secondary/tertiary/input`), 1 Akzent `#007acc` (VS-Code-Blau), 4 Status-Farben (`--status-success/warning/error/info`), 5 Schriftgrößen (`--fs-xs/sm/md/lg/xl`), 4-Punkt-Spacing (`--sp-1..6`), 2 Border-Radius-Werte (`--r-sm/md`); vorherige KDE-Breeze-Werte abgelöst
- **vscode.css als Aliase**: [src/lib/theme/vscode.css](src/lib/theme/vscode.css) mappt `--vscode-*` Variablen auf das neue System Phase-8-Komponenten laufen unverändert weiter
- **UI-Library** [src/lib/ui/](src/lib/ui/): Button, Card, Icon (Lucide-Wrapper), Badge, StatusDot (CSS statt Emoji), Tooltip, Drawer (Esc-schließbar), Tabs verbindliche Bausteine für alle Panels
- **Lucide-Icons**: `lucide-svelte` installiert, ersetzt Emojis im UI-Chrome (Phase 9 Schritt-für-Schritt)
- **StatusBar.svelte** (NEU): kompakte 22px-Footer-Zeile mit Token-Auslastung (Färbung ab 70/90%), Modell+Modus (klickbarer Picker), Session-Kosten, Verarbeitungs-Phase ersetzt den überfüllten alten Footer mit 6+ Stats und Pulse-Animation
- **Titlebar entrümpelt**: nur noch Logo (✱), Stop-Button, Schulungsmodus (Lucide-Icon statt 🎓), Version Status-Dot entfernt, doppelte Modell-Anzeige entfernt
### Geändert
- **Footer ersetzt**: alter `<footer class="footer">` aus [+layout.svelte](src/routes/+layout.svelte) komplett entfernt, ersetzt durch globale `<StatusBar />`
- **Hardgecodete Farben** in `+layout.svelte` (`#22c55e`, `#ef4444`, `#eab308`, `#f59e0b`, `#a855f7`, `#06b6d4`) entfernt durch CSS-Variablen ersetzt
### Hinzugefügt (Phase 8: VS-Code-Look — Chatbereich-Redesign)
- **VS-Code-Dark-Theme**: Globales Theme-File `src/lib/theme/vscode.css` mit `--vscode-*` Custom-Properties (Editor-BG #1e1e1e, Sidebar #252526, Akzent #0e639c, Diff-Grün/-Rot wie im Original); bestehende `--bg-primary`, `--accent` usw. werden als Aliase auf VS-Code-Werte gemappt alle Panels ziehen automatisch das neue Theme
- **Linksbündiges Message-Layout**: Neue [Message.svelte](src/lib/components/Message.svelte) und [MessageList.svelte](src/lib/components/MessageList.svelte) User und Assistant beide linksbündig mit Avatar-Kreis (24px) vorn, durchgehende Zeitachse wie in der Claude-Code-Extension; Hover-Actions (Edit/Regenerate/Copy/Merken/Rewind) erscheinen rechts oben
- **Inline Tool-Karten**: Tool-Calls erscheinen jetzt als ausklappbare Karten direkt in der Assistant-Message statt nur im Activity-Panel neue [ToolCallCard.svelte](src/lib/components/ToolCallCard.svelte) Basis + Spezialisierungen [ToolCardRead](src/lib/components/ToolCardRead.svelte) (Code-Snippet mit Zeilennummern), [ToolCardEdit](src/lib/components/ToolCardEdit.svelte) (Diff + Accept/Reject inline), [ToolCardBash](src/lib/components/ToolCardBash.svelte) (Terminal-Output), [ToolCardGeneric](src/lib/components/ToolCardGeneric.svelte) (Grep/Glob/WebFetch/MCP/Task)
- **Tool-Call-Binding an Message**: `Message.toolCalls?: InlineToolCall[]` ergänzt; events.ts hängt `tool-start` an die letzte Assistant-Message und finalisiert sie bei `tool-end` Karten werden live gerendert
- **Smart-Sticky-Scroll**: MessageList scrollt automatisch ans Ende, stoppt aber wenn der User selbst gescrollt hat; Back-to-Bottom-Button erscheint dann
- **ChatStatusBar**: Neue Statusbar unter dem Input mit Token-Auslastung (mit Warning/Danger-Färbung), Modus-Picker (Solo/Handlanger/Experten/Auto, Klick öffnet Menü), Modell-Badge, Phase-Indikator, Shortcut-Hints
- **Tool-Card-Helper**: [src/lib/utils/toolCards.ts](src/lib/utils/toolCards.ts) mit `getToolMeta()` und `getToolSubtitle()` für Icon-/Label-/Subtitel-Zuordnung; [markdown.ts](src/lib/utils/markdown.ts) extrahiert den Markdown-Renderer aus ChatPanel
- **Header-Redesign**: Spark-Icon statt 💬, kompakte Stats, VS-Code-Sidebar-Hintergrund
### Geändert
- ChatPanel.svelte (~50KB CSS) rendert jetzt Messages über `<MessageList />` statt inline; der separate Pending-Changes-Block unten wurde entfernt Diffs erscheinen direkt in den Edit-Tool-Karten
- Backend (claude.rs, claude-bridge.js, checkpoint.rs) bleibt unverändert reines UI-Refactor
---
## [Unreleased] - 2026-04-22
### Hinzugefügt (Phase 7: VS Code Extension Features)
- **Accept/Reject DiffView**: Dateiänderungen nach Ausführung prüfen und akzeptieren oder rückgängig machen DiffView mit interaktiven Buttons, Kompakt-Ansicht für große Diffs (`DiffView.svelte`, `checkpoint.rs`)
- **Checkpoint/Rewind System**: Automatische Snapshots (content_before/content_after) bei Edit/Write Tool-Calls SQLite-basiert, pro Session, Rewind auf beliebigen Checkpoint (`checkpoint.rs`, `db.rs`)
- **@-Mentions im Chat**: `@datei.ts` öffnet Fuzzy-Autocomplete für Projektdateien, Dateiinhalt wird automatisch in den Prompt injiziert, Zeilenbereiche mit `#5-10` (`FileMention.svelte`, `context.rs`)
- **Bridge Pending-Queue**: Nachrichten während laufender Claude-Verarbeitung werden gepuffert und automatisch nach dem aktuellen Turn verarbeitet nahtloses Weitertippen (`claude-bridge.js`)
- **Fuzzy File Search**: Score-basierter Algorithmus mit Start-Bonus, Separator-Bonus, Consecutive-Match scannt Projektverzeichnis bis 5000 Dateien (`context.rs`)
- **Session-Projekt-Sync**: Klick auf Session aktiviert automatisch das zugehörige Projekt (`SessionList.svelte`)
- **Tool-ID Durchreichung**: Backend-IDs werden korrekt von tool-start bis tool-end durchgereicht behebt endlos-pulsierende Aktivitätspunkte (`events.ts`, `app.ts`)
### Behoben
- **Aktivitäts-Panel**: Grüne Punkte pulsieren nicht mehr endlos Tool-IDs werden jetzt korrekt zwischen Backend und Frontend synchronisiert
- **Session-Projekt-Verknüpfung**: Beim Klick auf eine Session wird das zugehörige Projekt automatisch aktiviert
### Hinzugefügt
- **Bridge-Daemon (Phase 3)**: Bridge läuft als eigenständiger Daemon-Prozess, überlebt App-Neustarts kein Cold-Start mehr (`claude-bridge.js --socket`, `claude.rs`)
- **Unix Socket IPC (Phase 3)**: Kommunikation über Unix Domain Socket statt stdio async, kein Block, Auto-Reconnect bei Verbindungsverlust (`claude.rs`, `claude-bridge.js`)
- **Bridge-Status API**: `get_bridge_status` Command zeigt Verbindungsmodus (UDS/stdio), Daemon-PID, Socket-Pfad
- **Daemon-Steuerung**: `stop_bridge_daemon` Command zum expliziten Stoppen des Daemon-Prozesses
- **Modus-Indikator**: Badge im ChatPanel zeigt aktuellen Agent-Modus (Handlanger/Experten/Auto) mit Verarbeitungsphase
- **Plan-Erkennung**: Claude-Antworten mit Plänen werden automatisch als Slides an das Präsentationsfenster gesendet (`planPresentation.ts`)
- **Session-Projekt-Filter**: Sessions werden nach aktivem Projekt/Workspace gefiltert (`db.rs`, `session.rs`)
- **Weibliche TTS-Stimme**: Kerstin als Standard-Stimme, 5 deutsche Stimmen wählbar (`voice.rs`)
- **MCP-Hub nativ (Phase 4)**: MCP-Server werden aus `~/.claude.json` geladen und beim Bridge-Start injiziert kein CLI-Umweg nötig (`claude.rs`, `claude-bridge.js`)
- **MCP-Verwaltung**: Tauri-Commands `list_mcp_servers`, `add_mcp_server`, `remove_mcp_server` Server zur Laufzeit hinzufügen/entfernen
- **Ollama-Integration (Phase 5)**: Lokales Modell für einfache Tasks Auto-Detect, `local-query` Command, konfigurierbar (`claude-bridge.js`, `claude.rs`)
- **Offline-Queue (Phase 5)**: Nachrichten bei fehlender Verbindung in SQLite queuen, später automatisch senden (`session.rs`)
- **UTF-8 Crash Fix**: Kein Panic mehr bei Multi-Byte-Zeichen in DB-Abfragen (`db.rs`, `knowledge.rs`)
- **Guard-Rails UI (Live)**: 3-Tab-Ansicht (Live-Feed/Regeln/Blockiert), Risiko-Statistik-Leiste, Ein-Klick-Freigabe bei Bestätigungsbedarf, guard-check Events vom Backend (`GuardRailsPanel.svelte`, `guard.rs`)
- **D-Bus Desktop-Aktionen**: 10 vordefinierte Aktionen (Dolphin, Kate, Konsole, Firefox, Notify, Lock Screen), Aktionen-Grid im ProgramsPanel, CLI/GUI-Unterscheidung (`programs.rs`, `ProgramsPanel.svelte`)
- **Screenshot-Analyse**: Bildschirmbereich oder Vollbild capturen via spectacle/scrot/gnome-screenshot, Vorschau im Panel, "An Claude senden" Button (`programs.rs`, `ProgramsPanel.svelte`)
- **Projekt-Wechsel**: Ein-Klick-Projektwechsel in der Sidebar Dropdown mit Projektliste, Hinzufügen/Entfernen, Working-Dir + Sticky-Context wird automatisch umgeschaltet (`SessionList.svelte`, `db.rs`)
- **File-Drop auf Chat**: Dateien per Drag & Drop auf den Chat ziehen Text-Dateien als Code-Block, Bilder als Base64, Spracherkennung, 500KB-Limit (`ChatPanel.svelte`)
- **Persistent Memory**: Auto-Load Memory-Einträge werden bei jeder Nachricht in den Claude-Context injiziert Cross-Session Gedächtnis für Patterns, Zugänge, Präferenzen (`memory.rs`, `claude.rs`)
- **Memory CRUD-Commands**: Speichern, Löschen, Auflisten, Auto-Load-Filter für Memory-Einträge als Tauri-Commands (`memory.rs`, `lib.rs`)
- **Global Hotkey (Super+C)**: Claude-Eingabe von überall öffnen Fenster wird angezeigt, fokussiert, Input-Feld aktiviert (`lib.rs`, `ChatPanel.svelte`)
- **Clipboard-Watch**: Überwacht Zwischenablage, erkennt Code/URLs/Fehler/Pfade, zeigt Vorschlag im Chat (`clipboard.rs`, `ChatPanel.svelte`)
- **File-Browser für Projekt-Wechsel**: Nativer Verzeichnis-Dialog statt manuellem Pfad, Auto-Name aus Ordnername (`SessionList.svelte`, `tauri-plugin-dialog`)
- **Quick-Actions Palette (Ctrl+K)**: VS-Code-artige Kommandopalette mit Suche, Kategorien (Build, Git, Session, Navigation, Voice, Tools), Keyboard-Navigation (`QuickActions.svelte`)
- **Lokales Voice (Phase 2.2)**: whisper-cli STT + piper-tts TTS, komplett lokal ohne OpenAI-API (`voice.rs`, `VoicePanel.svelte`)
- **Chat-Detach**: Chat in separates Fenster herauslösen, Platz für andere Panels, Zurückholen per Button (`chat_window.rs`, `+page.svelte`)
- **Aktivitäts-Phasen**: 4 Zustände (Denkt nach/Streamt/Tool-Nutzung/Subagent) statt nur "Denkt nach..." (`events.ts`, `ChatPanel.svelte`)
- **Settings-Panel (VS Code Stil)**: Suchfeld, Kategorien-Sidebar, Commands/Hooks/Permissions-Verwaltung (`SettingsPanel.svelte`)
- **GStreamer im Nix-Wrapper**: Mikrofon funktioniert jetzt auch in Produktion (PipeWire + gst-plugins) (`nix/default.nix`)
- **Slash-Command Autocomplete**: `/`-Eingabe im Chat öffnet Dropdown mit allen Commands, Skills und Built-ins (`commands.rs`, `CommandPalette.svelte`)
- **KB-Hints Injection**: Jede Nachricht an Claude bekommt automatisch relevante Wissensbasis-Einträge (`claude.rs`, `knowledge.rs`)
- **Voice-zu-Claude-Pipeline**: Spracheingabe wird transkribiert, an Claude gesendet, Antwort per TTS vorgelesen (`VoicePanel.svelte`)
- **Pattern-Detektion**: Tool-Fehler werden automatisch gegen bekannte Fehler-Patterns geprüft (`events.ts`)
- **Hook-Dispatch**: SessionStart, PreToolUse, PostToolUse feuern echte Events ans Frontend (`hooks.rs`, `events.ts`)
- **Updater Lock-Datei System**: PID-basiertes Locking verhindert parallele Update-Instanzen (`update.rs`)
- **Updater Bestätigungs-Dialog**: User muss Update-Installation bestätigen statt Überraschungs-Restart (`UpdateDialog.svelte`)
- **Updater Graceful Shutdown**: Frontend bekommt 2s Zeit zum State-Speichern vor Restart (`update.rs`, `lib.rs`)
- **Command-Registry**: Scannt `~/.claude/commands/` und `~/.claude/skills/` für Autocomplete (`commands.rs`)
### Geändert
- SQL-Queries in `knowledge.rs` sortieren jetzt nach `priority DESC` (höchste Priorität zuerst)
- `get_tool_hints()` korrigiert: War fälschlich `priority ASC`, jetzt `DESC`
- `search_knowledge()` filtert jetzt auch nach `status = 'active'`
- `UpdateDialog.svelte` auf Svelte 5 Runes migriert (`$state`, `$effect`, `$derived`)
- `lib.rs`: App-Lifecycle erweitert um Lock-Datei create/remove bei Start/Exit
### Behoben
- **Svelte 5 Event-Syntax**: Alle `on:click` `onclick` in SessionList.svelte (keine Mixed-Syntax mehr)
- **Mikrofon hängt**: PipeWire-Fallback + 5s getUserMedia-Timeout wenn PipeWire nicht läuft (`nix/default.nix`, `ChatPanel.svelte`)
- **Update-Fortschrittsbalken**: Erreicht jetzt visuell 100% vor der Bestätigungsmeldung (`update.rs`, `UpdateDialog.svelte`)
- **Mikrofon in Produktion**: GStreamer + PipeWire-Plugins fehlten im Nix-Wrapper, WebKitGTK konnte getUserMedia nicht nutzen (`nix/default.nix`)
- Updater konnte Binary ersetzen während App noch lief (kein Lock, kein Prozess-Check)
---
## [0.1.0] - 2026-04-14
### Erstveröffentlichung
Enthält Phase 1-16 der Roadmap:
- Tauri 2.0 + SvelteKit 5 App-Grundgerüst
- Claude Agent SDK Integration mit Live-Streaming
- 4-Panel Layout mit 24 UI-Komponenten
- SQLite Persistierung + Session-Management
- Guard-Rails System für kontrollierte OS-Zugriffe
- Claude-DB Integration (Wissensbasis durchsuchen/speichern)
- Intelligentes Context-Management (3-Schichten-Gedächtnis)
- Sprach-Interface (Whisper STT + OpenAI TTS)
- Multi-Agent-Architektur (Solo/Handlanger/Experten-Modi)
- Hook-System für Automatisierung
- VSCodium-Integration (WebSocket-Bridge)
- Programm-Steuerung (D-Bus, Xvfb, Playwright)
- Präsentations- & Schulungsmodus
- System-Monitor mit Performance-Metriken
- Subagent-Hierarchie mit Baumansicht
- CI/CD Pipeline (Forgejo Actions AppImage)