Files
Brancheneinstufung2/README_dev_session.md
Floke f96235c607 refactor(dev-session): Entkopplung der Gemini CLI
Ändert die Architektur des -Systems, um die Stabilität der Gemini CLI zu verbessern.

Die Gemini CLI wird nicht mehr als direkter Unterprozess von  gestartet. Stattdessen gibt  den generierten Kontext auf stdout aus, und das -Skript fängt ihn ab und startet die CLI in einem sauberen, separaten Container.

- ****: Entfernt die Funktion  und gibt den Kontext stattdessen über stdout aus.
- ****: Führt jetzt einen zweistufigen Prozess aus. Zuerst wird der Kontext von  in einem temporären Container abgerufen und dann die Gemini CLI in einem neuen Container mit dem Kontext als  gestartet.
- ****: Dokumentation aktualisiert, um die neue Architektur widerzuspiegeln.
2026-01-25 19:40:26 +00:00

6.1 KiB

dev_session.py - Notion Development Session Manager

Übersicht

dev_session.py ist ein interaktives Kommandozeilen-Tool (CLI), das den Entwicklungs-Workflow durch die Integration mit Notion optimiert. Es ermöglicht Entwicklern, ein Projekt und einen Task auszuwählen und den Task-Status automatisch zu aktualisieren.

Wichtige Architekturänderung: Das Skript dev_session.py startet die Gemini CLI nicht mehr direkt. Stattdessen generiert es einen formatierten Kontext und gibt diesen auf der Standardausgabe aus. Das übergeordnete start-gemini.sh-Skript fängt diesen Kontext auf und startet dann die Gemini CLI in einer sauberen, interaktiven Sitzung mit dem korrekten Startkontext. Dieser zweistufige Prozess stellt sicher, dass die Gemini CLI mit allen erforderlichen Tools und in der korrekten Umgebung läuft.

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

Das start-gemini.sh-Skript orchestriert den gesamten Startvorgang.

./start-gemini.sh

Was im Hintergrund passiert:

  1. Das Skript führt dev_session.py in einem temporären Docker-Container aus.
  2. Sie durchlaufen den interaktiven Auswahlprozess für Projekt und Task wie gewohnt.
  3. Nach Ihrer Auswahl gibt dev_session.py den generierten Kontext für die Gemini CLI aus und beendet sich.
  4. start-gemini.sh fängt diese Ausgabe ab und extrahiert den Kontext.
  5. Anschließend startet das Skript einen neuen, sauberen Docker-Container mit der Gemini CLI und übergibt den extrahierten Kontext als Start-Prompt.

Dieser Prozess stellt sicher, dass Ihre interaktive Gemini-Sitzung von der Notion-API-Logik entkoppelt ist und in einer stabilen Umgebung läuft.

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.