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.
This commit is contained in:
@@ -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:
|
||||
@@ -525,8 +538,12 @@ def report_status_to_notion(
|
||||
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()
|
||||
|
||||
|
||||
@@ -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
|
||||
--name "$CONTAINER_NAME" \
|
||||
gemini-dev-env --prompt-interactive "$FULL_CONTEXT"
|
||||
Reference in New Issue
Block a user