Architektur
Technische Architektur von SessionPilot - Blueprints, Services, Templates und Datenspeicher.
architektur
flask
blueprints
services
templates
api
Überblick
SessionPilot ist eine Flask-basierte Web-Anwendung mit einer klaren Schichtentrennung: Routes (API/Views), Services (Business-Logik) und Datenspeicher (PostgreSQL + JSON).
Einstiegspunkt
app.py ist der zentrale Einstiegspunkt (ca. 85 Zeilen). Er:
- Erstellt die Flask-App
- Registriert alle Blueprints
- Startet den Notification-Checker (Background-Thread)
- Lädt Umgebungsvariablen aus
.env
Projektstruktur
| Bereich | Anzahl | Beschreibung |
|---|---|---|
| Route-Module | 31 | Flask Blueprints in routes/ |
| Service-Module | 32 | Business-Logik in services/ |
| Templates | 19 | Jinja2-Templates, erweitern base.html |
| JS-Module | 39 | Frontend-Logik in static/js/ |
| CSS-Dateien | 35 | Styles in static/css/ |
Blueprint-Architektur
Jedes Route-Modul ist ein eigenständiger Flask Blueprint. Die Registrierung erfolgt zentral in routes/__init__.py. Wichtige Blueprints:
- data_routes - Haupt-Daten-Aggregation (
/api/data,/api/containers) - session_routes - Claude Sessions (PostgreSQL)
- project_routes - Projekt-Info, Detail, Export
- search_routes - Volltextsuche via ripgrep
- widget_routes - Dashboard-Widgets (Charts, Statistiken)
- analytics_routes - File-Heatmap, Risk-Radar, Modell-Vergleich
- plans_routes - Plans Import und Verwaltung
Service-Schicht
Die Services kapseln die gesamte Business-Logik:
- project_scanner.py - Scannt Projekte, verwaltet project.json, Cache
- project_detector.py - Typ-Erkennung (monorepo, fork, tool etc.)
- path_resolver.py - Zentralisierte Projektpfad-Auflösung
- notification_service.py - Thread-safe JSON-Store für Benachrichtigungen
- notification_checker.py - Background-Thread, prüft alle 60s auf Änderungen
- gitea_service.py - Gitea-API (In-Memory-Cache, 60s TTL)
- docker_service.py - Container-Status via
docker ps - db_service.py - PostgreSQL Connection-Pool
- session_import.py - JSONL-Parser mit Hash-basiertem Cache
- cost_service.py - Token-Kosten-Berechnung pro Modell
- file_touch_service.py - Per-File Touch-Extraktion, Heatmap, Risk-Radar
Frontend-Architektur
- api.js - Zentraler Fetch-Wrapper (
api.get(),api.post(),api.put(),api.del()) - base.js - Globale Utilities:
formatTokens(),formatDate(),escapeHtml(),formatTimeAgo() - Modal-System -
openModal(id),closeModal(id)mit Modal-Stack und Escape-Handler - Design Tokens - Zentrale CSS-Variablen in
static/css/design-tokens.css - Chart.js - Dashboard-Charts via CDN, Lazy-Loading beim Tab-Wechsel
Datenspeicher
PostgreSQL
- sessions - Importierte AI-Sessions mit Token-Statistiken
- messages - Einzelne Nachrichten pro Session
- ai_file_touches - Datei-Zugriffe pro Session
- project_plans - Importierte Claude Plans
JSON-Dateien
groups.json- Projekt-Gruppenrelations.json- Projekt-Beziehungenideas.json- Ideen und Notizenscheduled_tasks.json- Geplante Aufgabenfavorites.json- Projekt-Favoritennotifications.json- Benachrichtigungen
Wichtige Patterns
- @api_route Decorator - Einheitliches Error-Handling für API-Endpoints
- Shared Helpers -
session_import_utils.pyfür gemeinsame Funktionen (vermeidet Circular Imports) - Tag-Erkennung - Zentral in
project_detector.py:detect_tags(), nicht duplizieren - Session-Sync - Hash-basierter Cache, max 1x/Stunde, null DB-Zugriffe bei unveränderten Dateien