# `dev_session.py` - Notion Development Session Manager ## Übersicht `dev_session.py` ist ein interaktives Kommandozeilen-Tool (CLI), das entwickelt wurde, um den Entwicklungs-Workflow durch die Integration mit Notion's "Ultimate Tasks"- und "Projects"-Datenbanken zu optimieren. Es ermöglicht Entwicklern, eine Entwicklungssitzung zu starten, indem sie ein Projekt und einen Task aus Notion auswählen, den Task-Status automatisch aktualisieren und einen formatierten Kontext für die Gemini CLI generieren. ## Funktionen * **Interaktive Projekt- und Task-Auswahl:** Wähle Projekte und Tasks direkt aus deinen Notion-Datenbanken. * **Automatisches Status-Update:** Der Status des ausgewählten Tasks wird automatisch auf 'Doing' (oder den ersten verfügbaren Status in neuen Projekten) gesetzt, um deinen Fortschritt in Notion widerzuspiegeln. * **Task-Erstellung:** Erstelle neue Tasks direkt über das CLI im Kontext des ausgewählten Projekts. * **Dynamische Status-Erkennung:** Fragt Notion API nach verfügbaren Status-Optionen ab, um Kompatibilität mit verschiedenen Notion-Templates zu gewährleisten. * **Gemini CLI Kontext-Generierung:** Erzeugt einen strukturierten Kontext-Prompt, der alle relevanten Informationen (Projekt, Task, Task-ID, vorgeschlagener Git-Branch-Name) für die Gemini CLI enthält. * **Vorgeschlagene Git Branch-Benennung:** Erstellt einen konsistenten Git-Branch-Namen basierend auf der Task-ID und dem Task-Titel. ## Voraussetzungen * **Docker:** Das gesamte Setup ist containerisiert, um Abhängigkeitskonflikte zu vermeiden. * **Notion Integration Token:** Ein Notion API-Token mit Zugriff auf Ihre "Projects"- und "Tasks"-Datenbanken. ## Installation und Einrichtung Das Setup ist so konzipiert, dass es mit minimalem Aufwand sofort einsatzbereit ist. 1. **Notion API Key:** * Stellen Sie sicher, dass Sie einen Notion Integration Token haben. * Das Skript fragt beim ersten Start interaktiv nach dem Token. Sie können es auch als Umgebungsvariable `NOTION_API_KEY` in einer `.env`-Datei im Hauptverzeichnis speichern, um diesen Schritt zu überspringen. * Gewähren Sie Ihrer Notion-Integration Zugriff auf die relevanten "Projects"- und "Tasks"-Datenbanken. 2. **Abhängigkeiten:** Alle notwendigen Abhängigkeiten (Python, `requests`, `python-dotenv`) sind im Dockerfile (`gemini.Dockerfile`) definiert und werden automatisch im Container installiert. Es ist keine manuelle Installation via `pip` erforderlich. ## Nutzung ### 1. Sitzung starten Führen Sie das Start-Skript aus. Es baut bei Bedarf das Docker-Image und startet den Session-Manager. ```bash ./start-gemini.sh ``` Das Skript führt Sie dann interaktiv durch die Auswahl eines Projekts und eines Tasks, genau wie in der Beispiel-Interaktion unten beschrieben. Nach der Auswahl startet es eine Gemini-CLI-Sitzung mit dem passenden Kontext. ### 2. Sitzung abschließen Wenn Sie die Arbeit an einem Task beendet haben, können Sie die Sitzung über den folgenden Befehl abschließen. Dieser Befehl muss **im Terminal des Hosts** ausgeführt werden, während der Container (`gemini-session`) noch läuft. ```bash docker exec -it gemini-session python3 dev_session.py --done ``` Dieser Befehl: * Setzt den Status des Notion-Tasks auf "Done" (oder den finalen Status in Ihrer Konfiguration). * Löscht die lokale Session-Datei (`.session_info.json`). * Deinstalliert den Git-Hook. ### 3. Automatisches Notion-Feedback (Git-Hook) Beim Starten einer Sitzung wird automatisch ein `post-commit`-Git-Hook installiert. * **Funktion:** Nach jedem `git commit` wird die Commit-Nachricht automatisch als Kommentar an den verknüpften Notion-Task gesendet. * **Voraussetzung:** Funktioniert nur für Commits, die im `gemini-session`-Container oder auf dem Host-System (mit installiertem `requests`) gemacht werden, während die Session aktiv ist. * **Deinstallation:** Der Hook wird beim Abschluss der Sitzung mit `--done` automatisch wieder entfernt. ### Beispiel-Interaktion (gekürzt) Die interaktive Auswahl von Projekt und Task bleibt unverändert: ``` Starte interaktive Entwicklungs-Session... Bitte gib deinen Notion API Key ein (Eingabe wird nicht angezeigt): **************** Suche nach Datenbank 'Projects [UT]' in Notion... Datenbank 'Projects [UT]' gefunden mit ID: An welchem Projekt möchtest du arbeiten? [1] My Awesome Project [2] Sync Engine [...] Bitte wähle eine Nummer: 2 ... ``` Nach der Auswahl wird automatisch die Gemini CLI gestartet. ## Git Branch Benennungs-Konvention Das Skript schlägt automatisch einen Git-Branch-Namen vor, der dem Muster `feature/task-{kurze_task_id}-{task_titel_slug}` folgt. * `feature/task-`: Ein Präfix, das den Branch-Typ und die Beziehung zu einem Notion-Task anzeigt. * `{kurze_task_id}`: Die ersten 8 Zeichen der Notion Task ID, für eine eindeutige Referenz. * `{task_titel_slug}`: Eine "Slugified"-Version des Task-Titels (Kleinbuchstaben, Leerzeichen durch Bindestriche ersetzt, Sonderzeichen entfernt). **Beispiel:** `feature/task-2f388f42-create-readmemd-for-devsessionpy` ## Wichtige Hinweise * Stelle sicher, dass deine Notion-Datenbanken die Property `Status` mit mindestens einer Statusoption haben. * Der `Readme Path` wird dynamisch aus dem in Notion ausgewählten Projekt geladen. Falls in Notion kein spezifischer Pfad hinterlegt ist, wird standardmäßig `readme.md` verwendet. Dies eliminiert die Notwendigkeit einer manuellen `project_to_path_map` im Skript.