Ä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.
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.
-
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_KEYin 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.
-
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 viapiperforderlich.
Nutzung
1. Sitzung starten
Das start-gemini.sh-Skript orchestriert den gesamten Startvorgang.
./start-gemini.sh
Was im Hintergrund passiert:
- Das Skript führt
dev_session.pyin einem temporären Docker-Container aus. - Sie durchlaufen den interaktiven Auswahlprozess für Projekt und Task wie gewohnt.
- Nach Ihrer Auswahl gibt
dev_session.pyden generierten Kontext für die Gemini CLI aus und beendet sich. start-gemini.shfängt diese Ausgabe ab und extrahiert den Kontext.- 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 commitwird 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 installiertemrequests) gemacht werden, während die Session aktiv ist. - Deinstallation: Der Hook wird beim Abschluss der Sitzung mit
--doneautomatisch 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
Statusmit mindestens einer Statusoption haben. - Der
Readme Pathwird dynamisch aus dem in Notion ausgewählten Projekt geladen. Falls in Notion kein spezifischer Pfad hinterlegt ist, wird standardmäßigreadme.mdverwendet. Dies eliminiert die Notwendigkeit einer manuellenproject_to_path_mapim Skript.