From 6e38c85de86df46ef4a2980763b5c901ec83e238 Mon Sep 17 00:00:00 2001 From: Floke Date: Mon, 26 Jan 2026 12:51:53 +0000 Subject: [PATCH] refactor(workflow): Enhance Notion reporting and context awareness - Adds a '--summary' parameter to dev_session.py to allow for detailed, narrative descriptions in Notion status updates. - The Notion comment format is updated to prominently display this summary. - start-gemini.sh is refactored to be more robust and context-aware. - It now injects the container name and a strict rule against nested docker commands into the Gemini CLI's initial prompt. - This prevents operational errors and provides better context for the agent. --- dev_session.py | 30 ++++++++++++++++++-- start-gemini.sh | 74 +++++++++++++++++++++++++++++++++++++++++++------ 2 files changed, 92 insertions(+), 12 deletions(-) diff --git a/dev_session.py b/dev_session.py index 36b7b434..690e3850 100644 --- a/dev_session.py +++ b/dev_session.py @@ -454,7 +454,8 @@ def report_status_to_notion( status_override: Optional[str], todos_override: Optional[str], git_changes_override: Optional[str], - commit_messages_override: Optional[str] + commit_messages_override: Optional[str], + summary_override: Optional[str] ) -> None: """ Erstellt einen Statusbericht für den Notion-Task, entweder interaktiv oder mit überschriebenen Werten. @@ -514,6 +515,18 @@ def report_status_to_notion( print("❌ FEHLER: Kein Status festgelegt. Abbruch des Berichts.") return + # Detaillierte Zusammenfassung abfragen oder übernehmen + actual_summary = summary_override + if not actual_summary: + print("\nBitte gib eine Zusammenfassung der Arbeit ein (was wurde getan, Ergebnisse, Probleme etc.).") + user_summary_lines = [] + while True: + line = input() + if not line: + break + user_summary_lines.append(line) + actual_summary = "\n".join(user_summary_lines) + # To-Dos abfragen oder übernehmen actual_todos = todos_override if not actual_todos: @@ -524,9 +537,13 @@ def report_status_to_notion( report_lines = [] report_lines.append(f"**Status Update ({datetime.now().strftime('%Y-%m-%d %H:%M')})**") report_lines.append(f"**Neuer Status:** `{actual_status}`") + + if actual_summary: + report_lines.append("\n**Arbeitszusammenfassung:**") + report_lines.append(actual_summary) if actual_git_changes or actual_commit_messages: - report_lines.append("\n**Zusammenfassung der Änderungen:**") + report_lines.append("\n**Technische Änderungen (Git):**") if actual_git_changes: report_lines.append("```diff") report_lines.append(actual_git_changes) @@ -761,6 +778,7 @@ def main(): parser.add_argument("--todos", type=str, help="Eine durch '\n' getrennte Liste offener To-Dos.") parser.add_argument("--git-changes", type=str, help="Zusammenfassung der Git-Änderungen (git diff --stat).") parser.add_argument("--commit-messages", type=str, help="Eine durch '\n' getrennte Liste der Commit-Nachrichten.") + parser.add_argument("--summary", type=str, help="Eine detaillierte textuelle Zusammenfassung der erledigten Arbeit.") args = parser.parse_args() @@ -783,7 +801,13 @@ def main(): except (FileNotFoundError, json.JSONDecodeError): print("❌ FEHLER: Fehler beim Lesen der Session-Informationen. Kann keinen Kommentar hinzufügen.") elif args.report_status: - report_status_to_notion(args.status, args.todos, args.git_changes, args.commit_messages) + report_status_to_notion( + status_override=args.status, + todos_override=args.todos, + git_changes_override=args.git_changes, + commit_messages_override=args.commit_messages, + summary_override=args.summary + ) else: start_interactive_session() diff --git a/start-gemini.sh b/start-gemini.sh index 3378d6a6..cbd423a0 100644 --- a/start-gemini.sh +++ b/start-gemini.sh @@ -1,17 +1,73 @@ -#!/bin/sh +#!/bin/bash +# --- Konfiguration --- +# Der Name des finalen Containers, in dem die Gemini CLI läuft. +CONTAINER_NAME="gemini-session" + +# --- Aufräumen --- # Sicherstellen, dass der Config-Ordner existiert, damit Docker ihn als Ordner und nicht als Datei mountet mkdir -p .gemini-config -echo "Räume alte 'gemini-session' auf, falls vorhanden..." -sudo docker rm -f gemini-session > /dev/null 2>&1 +echo "Räume alte Docker-Container auf, falls vorhanden..." +# Entfernt den Haupt-Container und den temporären Container vom letzten Lauf +docker rm -f "$CONTAINER_NAME" > /dev/null 2>&1 +docker rm -f "${CONTAINER_NAME}-temp" > /dev/null 2>&1 -echo "Starte eine neue, interaktive Gemini-Session..." -# --env-file .env lädt deine Variablen automatisch -# -v .../.gemini-config:/root/.config sorgt dafür, dass deine Settings (Modellwahl) gespeichert bleiben -sudo docker run -it --rm \ +# --- Interaktives Setup via dev_session.py --- +echo "Starte interaktive Entwicklungs-Session-Konfiguration..." + +# Erstelle eine temporäre Datei, um die Ausgabe von dev_session.py aufzufangen +TEMP_FILE=$(mktemp) + +# Führe dev_session.py in einem temporären, interaktiven Container aus. +# Die Ausgabe wird gleichzeitig im Terminal angezeigt (damit der User die Fragen sieht) +# und in die temporäre Datei geschrieben. +docker run -it --rm \ + --env-file .env \ + -v "$(pwd):/app" \ + --name "${CONTAINER_NAME}-temp" \ + gemini-dev-env python3 dev_session.py | tee "$TEMP_FILE" + +# Überprüfe, ob der vorherige Befehl erfolgreich war (exit code 0) +if [ ${PIPESTATUS[0]} -ne 0 ]; then + echo "------------------------------------------------------------------" + echo "❌ Fehler: Der Konfigurationsprozess wurde abgebrochen oder ist fehlgeschlagen." + echo "Die Gemini CLI wird nicht gestartet." + echo "------------------------------------------------------------------" + rm "$TEMP_FILE" + exit 1 +fi + +# Extrahiere den reinen CLI-Kontext aus der temporären Datei +# sed sucht nach den Markern und gibt nur den Text dazwischen aus +CLI_CONTEXT=$(sed -n '/---GEMINI_CLI_CONTEXT_START---/,/---GEMINI_CLI_CONTEXT_END---/p' "$TEMP_FILE" | sed '1d;$d') + +# Lösche die temporäre Datei +rm "$TEMP_FILE" + +# Überprüfe, ob der Kontext extrahiert werden konnte +if [ -z "$CLI_CONTEXT" ]; then + echo "------------------------------------------------------------------" + echo "❌ Fehler: Es konnte kein gültiger Kontext für die Gemini CLI generiert werden." + echo "Stelle sicher, dass dev_session.py die Kontext-Marker korrekt ausgibt." + echo "Die Gemini CLI wird nicht gestartet." + echo "------------------------------------------------------------------" + exit 1 +fi + +# --- Start der Haupt-Gemini-Session --- +echo "Starte eine neue, interaktive Gemini-Session mit dem generierten Kontext..." + +# Füge den Systemhinweis zum Container-Namen am Anfang des Kontextes hinzu +FULL_CONTEXT="**Wichtiger Systemhinweis:** Das aktuelle Projekt läuft im Docker-Container namens '${CONTAINER_NAME}'. Alle relevanten Befehle müssen in diesem Kontext ausgeführt werden. Führe niemals Befehle wie 'docker build' oder 'docker run' aus. + +$CLI_CONTEXT" + +# Starte den finalen Container mit der Gemini CLI +# --prompt-interactive übergibt den initialen Kontext +docker run -it --rm \ --env-file .env \ -v "$(pwd):/app" \ -v "$(pwd)/.gemini-config:/root/.config" \ - --name gemini-session \ - gemini-dev-env \ No newline at end of file + --name "$CONTAINER_NAME" \ + gemini-dev-env --prompt-interactive "$FULL_CONTEXT" \ No newline at end of file