Datenbank
PostgreSQL-Tabellen und JSON-Dateien - das Datenmodell von SessionPilot.
Überblick
SessionPilot verwendet zwei Datenspeicher: PostgreSQL für strukturierte Daten (Sessions, Messages, Plans) und JSON-Dateien für lokale Konfigurationsdaten (Gruppen, Relationen, Favoriten).
PostgreSQL-Tabellen
sessions
Zentrale Tabelle für alle importierten AI-Coding-Sessions.
| Spalte | Typ | Beschreibung |
|---|---|---|
| id | SERIAL | Primärschlüssel |
| session_uuid | TEXT | Eindeutige Session-ID |
| account | TEXT | AI-Account (Claude, Codex, Gemini) |
| project_name | TEXT | Zugeordnetes Projekt |
| model | TEXT | Verwendetes AI-Modell |
| started_at | TIMESTAMP | Startzeit |
| ended_at | TIMESTAMP | Endzeit |
| duration_ms | INTEGER | Dauer in Millisekunden |
| total_input_tokens | INTEGER | Verbrauchte Input-Tokens |
| total_output_tokens | INTEGER | Generierte Output-Tokens |
| cost_estimate | DECIMAL | Geschätzte Kosten |
| outcome | TEXT | Ergebnis (ok, needs_fix, reverted) |
| outcome_reason | TEXT | Grund für das Ergebnis |
| outcome_severity | TEXT | Schweregrad |
| ai_has_writes | BOOLEAN | Hat die AI Dateien geschrieben? |
| ai_has_tool_calls | BOOLEAN | Hat die AI Tools verwendet? |
| ai_tools_used | TEXT[] | Liste verwendeter Tools |
messages
Einzelne Nachrichten innerhalb einer Session.
| Spalte | Typ | Beschreibung |
|---|---|---|
| id | SERIAL | Primärschlüssel |
| session_id | INTEGER | FK auf sessions |
| type | TEXT | Nachrichtentyp (human, assistant, tool) |
| content | TEXT | Textinhalt |
| content_json | JSONB | Strukturierter Inhalt |
| model | TEXT | Verwendetes Modell |
| input_tokens | INTEGER | Input-Tokens dieser Nachricht |
| output_tokens | INTEGER | Output-Tokens dieser Nachricht |
| timestamp | TIMESTAMP | Zeitstempel |
ai_file_touches
Aufzeichnung aller Datei-Zugriffe durch die AI pro Session.
| Spalte | Typ | Beschreibung |
|---|---|---|
| id | SERIAL | Primärschlüssel |
| session_id | INTEGER | FK auf sessions |
| file_path | TEXT | Betroffene Datei |
| touch_type | TEXT | Art des Zugriffs (read, write, create, delete) |
| tool_name | TEXT | Verwendetes Tool |
| timestamp | TIMESTAMP | Zeitstempel |
project_plans
Importierte Claude Plans.
| Spalte | Typ | Beschreibung |
|---|---|---|
| id | SERIAL | Primärschlüssel |
| filename | TEXT | Dateiname der Plan-Datei |
| title | TEXT | Titel des Plans |
| project_name | TEXT | Zugeordnetes Projekt |
| content | TEXT | Volltext des Plans |
| status | TEXT | Status (draft, active, completed) |
| session_uuid | TEXT | Verknüpfte Session |
review_threads und session_reviews
Tabellen für das Review-System zur Bewertung von Sessions.
mv_model_quality (Materialized View)
Aggregierte Modell-Metriken aus Sprint 11. Berechnet Quality Scores, Erfolgsraten und Performance-Daten pro Modell. Muss nach Datenimport mit REFRESH MATERIALIZED VIEW mv_model_quality aktualisiert werden.
JSON-Dateien
Für lokale, schnell änderbare Daten werden JSON-Dateien verwendet:
| Datei | Beschreibung |
|---|---|
groups.json |
Projekt-Gruppen und Zuordnungen |
relations.json |
Beziehungen zwischen Projekten |
ideas.json |
Ideen und Notizen |
scheduled_tasks.json |
Geplante Aufgaben |
favorites.json |
Projekt-Favoriten |
notifications.json |
Aktive Benachrichtigungen |
.notification_state.json |
Zustand des Notification-Checkers |
.sync_hashes.json |
Hash-Cache für Session-Import |
Technische Details
- Connection-Pool über
services/db_service.py(psycopg2) - Thread-Safety - JSON-Stores nutzen Locks für konkurrierende Zugriffe
- Kein ORM - Direkte SQL-Queries für maximale Kontrolle
- Secrets in
.env-Datei (DB-Passwort, Gitea-Token), geladen via systemd EnvironmentFile