Implements the functionality in , allowing the Gemini agent to non-interactively update a Notion task with a detailed progress summary. The agent can now be prompted to: - Collect the new task status and any open to-dos. - Generate a summary of Git changes () and commit messages. - Post a formatted report as a comment to the Notion task. - Update the task's status property. The has been updated to document this new agent-centric workflow, detailing how to start a session, work within it, and use the agent to report progress and push changes seamlessly.
7.2 KiB
dev_session.py - Notion Development Session Manager
Übersicht
dev_session.py ist ein Kommandozeilen-Tool (CLI), das den Entwicklungs-Workflow durch die Integration mit Notion und Git optimiert. Es dient als Brücke zwischen der interaktiven Gemini CLI-Sitzung und dem Projektmanagement in Notion.
Wichtige Architekturänderung: Das Skript dev_session.py startet die Gemini CLI nicht mehr direkt. Stattdessen durchläuft der Entwickler einen interaktiven Setup-Prozess, an dessen Ende ein Kontext für die Gemini CLI generiert wird. Das übergeordnete start-gemini.sh-Skript fängt diesen Kontext auf und startet die Gemini CLI in einer sauberen, isolierten Docker-Sitzung. Dieser zweistufige Prozess gewährleistet eine stabile und kontextbezogene Entwicklungsumgebung.
Funktionen
- Interaktive Projekt- und Task-Auswahl: Wähle Projekte und Tasks direkt aus deinen Notion-Datenbanken.
- Automatischer Start-Status: Setzt den Status des ausgewählten Tasks beim Start der Sitzung automatisch auf 'Doing'.
- Task-Erstellung: Erstelle neue Tasks direkt über das CLI im Kontext des ausgewählten Projekts.
- Agent-gesteuerte Statusberichte: Ermöglicht dem Gemini-Agenten, nach Abschluss eines Arbeitspakets einen detaillierten Statusbericht an Notion zu senden, Code zu committen und zu pushen.
- Automatisches Commit-Feedback: Ein
post-commitGit-Hook sendet jede Commit-Nachricht als kurzen Kommentar an den Notion-Task. - Kontext-Generierung für Gemini CLI: Erzeugt einen strukturierten Start-Prompt mit allen relevanten Informationen (Projekt, Task, Beschreibung, Git-Branch).
- Vorgeschlagene Git Branch-Benennung: Erstellt einen konsistenten Git-Branch-Namen basierend auf der Task-ID und dem Titel.
Voraussetzungen
- Docker: Das gesamte Setup ist containerisiert.
- Notion Integration Token: Ein Notion API-Token mit Zugriff auf Ihre "Projects"- und "Tasks"-Datenbanken.
Installation und Einrichtung
-
Notion API Key:
- Stellen Sie sicher, dass Sie einen Notion Integration Token haben.
- Das Skript fragt beim ersten Start interaktiv nach dem Token. Alternativ kann er als Umgebungsvariable
NOTION_API_KEYin einer.env-Datei im Hauptverzeichnis gespeichert werden. - Gewähren Sie Ihrer Notion-Integration Zugriff auf die relevanten Datenbanken.
-
Abhängigkeiten: Alle Abhängigkeiten sind im
gemini.Dockerfiledefiniert und werden automatisch im Container installiert.
Der Entwicklungs-Workflow
Der Workflow ist in drei Hauptphasen unterteilt: Sitzung starten, in der Sitzung arbeiten und Ergebnisse zurückmelden.
1. Sitzung starten
Der gesamte Startvorgang wird über das start-gemini.sh-Skript orchestriert.
./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 Ihr Projekt und Ihren Task in Notion.
- Nach der Auswahl generiert
dev_session.pyden Kontext, speichert die Session-Informationen (z.B. Task-ID) in.dev_session/SESSION_INFO, installiert die Git-Hooks und gibt den Kontext an die Standardausgabe aus. start-gemini.shfängt diese Ausgabe ab, extrahiert den Kontext und startet einen neuen, sauberen Docker-Container (gemini-session) mit der Gemini CLI, wobei der Kontext als Start-Prompt übergeben wird.
Dieser Prozess stellt sicher, dass Ihre interaktive Gemini-Sitzung von der Notion-Logik entkoppelt ist und mit allen relevanten Informationen beginnt.
2. Arbeiten in der Gemini CLI
Nach dem Start befinden Sie sich in der Gemini CLI. Hier findet die eigentliche Entwicklungsarbeit statt.
- Commits: Wenn Sie oder der Agent
git commitausführen, greift derpost-commit-Hook. Er liest die Task-ID aus der Session-Datei und sendet die Commit-Nachricht automatisch als kurzen Kommentar an den verknüpften Notion-Task. Dies sorgt für eine granulare Nachverfolgung des Fortschritts.
3. Fortschritt melden und Änderungen pushen (Agent-gesteuerter Workflow)
Dies ist der primäre Weg, um ein logisches Arbeitspaket abzuschließen und den Fortschritt zu dokumentieren. Anstatt Git-Befehle und Notion-Updates manuell zu koordinieren, geben Sie dem Agenten eine übergeordnete Anweisung.
Beispiel-Anweisung an den Gemini-Agenten:
"Okay, die Implementierung ist abgeschlossen. Fasse die Arbeit zusammen, erstelle einen Statusbericht für Notion, committe alle Änderungen und pushe sie."
Was der Agent im Hintergrund tut:
- Informationen sammeln: Der Agent führt einen kurzen Dialog mit Ihnen, um den neuen Status (
Bereit für Review,Blockiertetc.) und eventuelle offene To-Dos zu erfragen. - Git-Änderungen analysieren: Der Agent generiert eine Zusammenfassung der geänderten Dateien und der neuen Commit-Nachrichten.
- Notion-Update (nicht-interaktiv): Der Agent ruft
dev_session.pymit den gesammelten Informationen als Parameter auf.python3 dev_session.py --report-status \ --status "Ready for Review" \ --todos "- Finale Doku prüfen" \ --git-changes "..." \ --commit-messages "..." - Bericht erstellen: Das Skript formatiert diese Informationen zu einem sauberen Status-Update, postet es als Kommentar an den Notion-Task und aktualisiert gleichzeitig dessen Status-Feld.
- Git-Operationen: Nachdem Notion aktualisiert wurde, führt der Agent die
git add,git commitundgit pushBefehle aus.
Dieser Prozess stellt sicher, dass der Code-Stand im Repository immer synchron mit dem dokumentierten Fortschritt in Notion ist, ohne dass Sie die Gemini CLI verlassen müssen.
4. Sitzung abschließen
Wenn der gesamte Task abgeschlossen ist, können Sie die Sitzung über den folgenden Befehl vom Host-Terminal aus beenden.
docker exec -it gemini-session python3 dev_session.py --done
Dieser Befehl:
- Setzt den Status des Notion-Tasks auf "Done".
- Löscht die lokale Session-Datei (
.dev_session/SESSION_INFO). - Deinstalliert den
post-commitGit-Hook.
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, um eine direkte Verbindung zwischen Code und Task herzustellen.
Beispiel: feature/task-2f388f42-update-readme-for-reporting
Entwicklung & Troubleshooting des Start-Skripts
Das start-gemini.sh-Skript wurde entwickelt, um mehrere Herausforderungen zu lösen:
-
Problem: Fehlende Interaktivität: Frühe Versionen leiteten die Ausgabe von
dev_session.pydirekt in eine Variable um, was die interaktiveninput()-Aufforderungen blockierte.- Lösung: Einsatz des
tee-Befehls, der die Ausgabe gleichzeitig auf dem Bildschirm anzeigt und in eine temporäre Datei schreibt, aus der der Kontext später gelesen wird.
- Lösung: Einsatz des
-
Problem: Fehlerhafter Start-Parameter: Die Gemini CLI erwartet den initialen Prompt über
--prompt-interactive.- Lösung: Korrektur des Arguments im
docker run-Befehl.
- Lösung: Korrektur des Arguments im
-
Problem: Konflikt durch nicht aufgeräumte Container: Vorzeitig beendete Skripte hinterließen Container, die den nächsten Start blockierten.
- Lösung: Explizite
docker rm -f-Befehle am Anfang des Skripts, um alte Container zu bereinigen.
- Lösung: Explizite