Files
Brancheneinstufung2/README_dev_session.md
Floke ebf0a4cc0a feat(dev-session): Containerize dev session manager
This commit introduces a containerized workflow for the development session manager (dev_session.py).

- Dockerization: Added gemini.Dockerfile to create a self-contained environment with all Python dependencies, removing the need for manual host setup.
- Start Script: Updated start-gemini.sh to build and run the container, executing dev_session.py as the entrypoint.
- Session Management: Implemented --done flag to properly terminate a session, update the Notion task status, and clean up the git hook.
- Notion Integration: Created and integrated notion_commit_hook.py which is automatically installed/uninstalled to post commit messages to the active Notion task.
- Documentation: Updated README_dev_session.md to reflect the new container-based setup, usage, and features.
2026-01-25 19:22:18 +00:00

5.4 KiB

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.

./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.

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: <PROJEKTE_DB_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.