Repository navigation
Admin Hub
Spezifikation: docs/design/feature-spec-admin-hub.md · Milestone:
docs/design/milestone-v0.7.2.md · Implementiert in PR #12–#19.
Die Sidebar hat seit v0.7.2 eine Sektion WERKZEUGE mit vier Einträgen:
| Tool | Art | Screen |
|---|---|---|
| 🌐 Browser | Launch-Aktion (extern) | – |
| 📝 Quick Notes | Screen-Tool | lib/layouts/tools/quick_notes.dart |
| 📁 Dateimanager | Screen-Tool | lib/layouts/tools/file_manager.dart |
| 📊 Systemmonitor | Screen-Tool | lib/layouts/tools/system_monitor.dart |
Klick startet den Browser als detached Prozess – die Hub-Section ändert
sich nicht. Fallback-Kette in lib/services/app_launcher.dart:
brave → brave-browser → xdg-open https://
Feedback: still bei Erfolg, Info-Snackbar beim xdg-open-Fallback, Fehler-Snackbar wenn gar kein Browser gefunden wurde.
Markdown-/Plaintext-Notizen ohne die App zu verlassen.
- Master-Detail: Liste links (zuletzt geändert zuerst), Editor rechts
- Autosave: debounced 500 ms, kein Speichern-Button
-
Persistenz: eine
.mdpro Notiz unter~/.local/share/linux-assistant/notes/(respektiertXDG_DATA_HOME), atomare Writes (tmp + rename – kein halber Stand bei Absturz) - Löschen: destructive → Confirm-Dialog
- Titel wird aus der ersten nicht-leeren Zeile abgeleitet
- Service:
lib/services/notes_service.dart(injizierbar:NotesService.test(dir))
Bewusst NICHT: Markdown-Preview, Cloud-Sync (v2, Service ist Interface).
Eingebetteter Datei-Browser – kein externer Prozess für die Navigation.
-
Schnellzugriff: Home,
/,/mnt, Downloads, Desktop (nur existierende) - Breadcrumb + Up-Button + Hidden-Files-Toggle + Refresh
- Zeilen: Icon (Ordner = Akzent), Name, Größe (nur Dateien),
Änderungsdatum, Permissions (
FileStat.modeString) -
Öffnen:
xdg-opendetached - Löschen: Confirm-Dialog mit vollem Pfad; Verzeichnisse rekursiv; Symlinks werden als Links gelöscht (Ziel bleibt)
-
Sicherheit:
- Symlinks werden nie navigiert (Loop-Gefahr) – Klick öffnet extern
-
/proc,/sys,/dev: Warn-Banner, Einträge ausgegraut, Delete deaktiviert (Policy inFileBrowserService.isProtected) - Größen nur für Dateien beim Listing (Performance)
Service: lib/services/file_browser_service.dart (reines dart:io).
Bewusst NICHT: Copy/Move/Rename, Thumbnails, Drag&Drop (v2).
Der große Bruder der Dashboard-Kacheln: 1-s-Live, pausierbar.
-
Kacheln (HubGrid): CPU (Sparkline + Per-Core-Balken), RAM (Badge +
Swap), GPU (nur wenn
nvidia-smivorhanden), Disks (Worst + Top-3-Balken), Netzwerk (↓/↑-Raten + Sparkline), Thermal (heißeste Zone + Top-3) - Prozess-Tabelle: Suche, sortierbare Spalten (PID/CPU/RAM/Name), Beenden-Dialog (Abbrechen / SIGTERM / SIGKILL)
- Control-Bar: HaloDot (Live/Pausiert), Pause/Resume, Refresh
-
Sampling-Architektur:
Ticker-getrieben stattTimer– dasTickerModedes Hubs stoppt das Polling automatisch, wenn der Screen off-screen ist./proc-Reads ohne Fork; einzige Forks pro Tick:ps+df;nvidia-sminur alle 5 s - Parser alle rein & fixture-getestet:
parseProcStat,cpuUsageDelta,parseMemInfo,parseNetDev,parseThermal,parseNvidiaSmi,parsePs
Service: lib/services/system_monitor_service.dart.
Siehe Architecture → „Modul-Registry“ (Enum-Wert + hubModules-Eintrag in hub_module.dart).
Konventionen: Hermes-Tokens statt harter Farben, Service injizierbar,
Parser rein, destructive Aktionen mit Confirm.
Linux Assistant
- Home
- Getting-Started – Bauen & Installieren
- Architecture – Aufbau
- Admin-Hub – Die Werkzeuge
- Design-System – Tokens
- Testing – Tests & Goldens
- Release-Process – Versionen & Packaging
- Contributing – PR-Workflow
- Roadmap – Stand & Planung