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.
98 lines
5.4 KiB
Markdown
98 lines
5.4 KiB
Markdown
# `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: <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.
|