refactor(dev-session): Entkopplung der Gemini CLI
Ä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.
This commit is contained in:
@@ -1,20 +1,53 @@
|
||||
#!/bin/bash
|
||||
|
||||
#!/bin/sh
|
||||
# Definiere den Namen für das Docker-Image und den Container
|
||||
IMAGE_NAME="gemini-dev-env"
|
||||
CONTAINER_NAME="gemini-session"
|
||||
|
||||
# Sicherstellen, dass der Config-Ordner existiert, damit Docker ihn als Ordner und nicht als Datei mountet
|
||||
# Sicherstellen, dass der Config-Ordner existiert
|
||||
mkdir -p .gemini-config
|
||||
|
||||
echo "Räume alte 'gemini-session' auf, falls vorhanden..."
|
||||
sudo docker rm -f gemini-session > /dev/null 2>&1
|
||||
# Prüfen, ob das Docker-Image existiert
|
||||
if ! docker image inspect "$IMAGE_NAME" &> /dev/null;
|
||||
then
|
||||
echo "Docker-Image '$IMAGE_NAME' nicht gefunden. Baue es jetzt aus 'gemini.Dockerfile'..."
|
||||
docker build -t "$IMAGE_NAME" -f gemini.Dockerfile .
|
||||
if [ $? -ne 0 ]; then
|
||||
echo "FEHLER: Docker-Image konnte nicht gebaut werden."
|
||||
exit 1
|
||||
fi
|
||||
fi
|
||||
|
||||
echo "Räume alte '$CONTAINER_NAME' auf, falls vorhanden..."
|
||||
docker rm -f "$CONTAINER_NAME" > /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 \
|
||||
--env-file .env \
|
||||
|
||||
# Führe dev_session.py im Hintergrund aus und fange die Ausgabe ab
|
||||
# Der Kontext für die Gemini CLI wird von dev_session.py in speziellen Markierungen ausgegeben
|
||||
DEV_SESSION_OUTPUT=$(docker run -i --rm \
|
||||
-v "$(pwd):/app" \
|
||||
-v "$(pwd)/.gemini-config:/root/.config" \
|
||||
--name gemini-session \
|
||||
gemini-dev-env \
|
||||
bash -c "python3 dev_session.py"
|
||||
|
||||
-w /app \
|
||||
--name "${CONTAINER_NAME}-temp" \
|
||||
"$IMAGE_NAME" \
|
||||
python3 dev_session.py 2>&1)
|
||||
|
||||
# Extrahiere den CLI-Kontext aus der Ausgabe
|
||||
CLI_CONTEXT=$(echo "$DEV_SESSION_OUTPUT" | sed -n '/---GEMINI_CLI_CONTEXT_START---/,/---GEMINI_CLI_CONTEXT_END---/{//!p}')
|
||||
|
||||
# Gib die Ausgaben von dev_session.py (außer dem Kontext) vor dem Start der CLI aus
|
||||
echo "$DEV_SESSION_OUTPUT" | sed '/---GEMINI_CLI_CONTEXT_START---/,/---GEMINI_CLI_CONTEXT_END---/d'
|
||||
|
||||
# Starte die Gemini CLI mit dem extrahierten Kontext
|
||||
# Die --initial-prompt Option sorgt dafür, dass der Kontext als erste Eingabe dient
|
||||
docker run -it --rm \
|
||||
-v "$(pwd):/app" \
|
||||
-v "$(pwd)/.gemini-config:/root/.config" \
|
||||
-w /app \
|
||||
--name "$CONTAINER_NAME" \
|
||||
"$IMAGE_NAME" \
|
||||
gemini --initial-prompt "$CLI_CONTEXT"
|
||||
|
||||
# Nach Beendigung der Session (z.B. durch Strg+C) wird aufgeräumt
|
||||
echo "Session beendet."
|
||||
Reference in New Issue
Block a user