diff --git a/README.md b/README.md index 61fab41..fd310fa 100644 --- a/README.md +++ b/README.md @@ -96,9 +96,14 @@ Das Install-Skript sichert eine vorhandene `~/.pi/agent/settings.json` als `.bak kopiert dann `settings.json` aus dem Repo. Damit ist der korrekte Default-Provider (`llama-cpp-single/coding_model`) automatisch konfiguriert. -Nach späteren Änderungen an `pi-coding-extension.ts` oder `models.json`: +Die Extension wird nicht kopiert, sondern verlinkt +(`~/.pi/agent/extensions/pi-coding-extension.ts` → Repo). Änderungen an `pi-coding-extension.ts` gelten +damit für jeden pi-Aufruf ab dem nächsten Start bzw. `/reload`, ohne erneutes Deploy. Das gilt auch für noch +nicht committete Änderungen. + +Nach späteren Änderungen an `models.json` oder `settings.json`: ```bash -./deploy-pi-config.sh # kopiert nach ~/.pi/agent/ +./deploy-pi-config.sh # verlinkt die Extension, kopiert models.json, settings.json (nur packages) # dann /reload in pi agent ``` @@ -259,7 +264,7 @@ und Extension-Guards gegen Regressionen. | `start-coding-server.sh` | Single-Server starten (Port 8001, Coder + Judge) | | `stop-coding-server.sh` | Container stoppen | | `status-coding-server.sh` | Laufstatus anzeigen | -| `deploy-pi-config.sh` | Extension + models.json + settings.json nach `~/.pi/agent/` deployen | +| `deploy-pi-config.sh` | Extension nach `~/.pi/agent/extensions/` verlinken, models.json + settings.json kopieren | | `examples/` | Demo-Projekte (Python, Rust, Go, C, Bash, HTML/JS) für Live-Demos | | `examples/restore-all.sh` | Examples nach Demo-Lauf in Ausgangszustand zurücksetzen | diff --git a/deploy-pi-config.sh b/deploy-pi-config.sh index b0b85ff..21398bf 100755 --- a/deploy-pi-config.sh +++ b/deploy-pi-config.sh @@ -1,13 +1,20 @@ #!/usr/bin/env bash -# Kopiert die versionierten Dateien aus dem Repo nach ~/.pi/agent/. -# Nach jeder Änderung im Repo ausführen, damit pi agent die neue Version lädt. +# Verlinkt die Extension und kopiert models.json/settings.json aus dem Repo nach ~/.pi/agent/. +# Die Extension ist ein Symlink: Änderungen im Repo gelten ab dem nächsten pi-Start bzw. /reload. +# Erneut ausführen nur nach Änderungen an models.json oder settings.json. set -euo pipefail REPO="$(cd "$(dirname "$0")" && pwd)" mkdir -p ~/.pi/agent/extensions -cp "$REPO/pi-coding-extension.ts" ~/.pi/agent/extensions/pi-coding-extension.ts -echo "Kopiert: pi-coding-extension.ts → ~/.pi/agent/extensions/" +# A previous, differing copy is kept as .bak before it is replaced by the symlink. +EXT=~/.pi/agent/extensions/pi-coding-extension.ts +if [ -f "$EXT" ] && [ ! -L "$EXT" ] && ! cmp -s "$EXT" "$REPO/pi-coding-extension.ts"; then + cp "$EXT" "$EXT.bak" + echo "Backup: pi-coding-extension.ts → pi-coding-extension.ts.bak" +fi +ln -sfn "$REPO/pi-coding-extension.ts" "$EXT" +echo "Verlinkt: ~/.pi/agent/extensions/pi-coding-extension.ts → $REPO/pi-coding-extension.ts" cp "$REPO/models.json" ~/.pi/agent/models.json echo "Kopiert: models.json → ~/.pi/agent/" diff --git a/tests/scripts.test.mjs b/tests/scripts.test.mjs index 686bad2..a5f88a3 100644 --- a/tests/scripts.test.mjs +++ b/tests/scripts.test.mjs @@ -44,3 +44,9 @@ test("install-Skript deployt settings.json mit vorherigem Backup", () => { assert.match(s, /cp "\$REPO\/models\.json"/); assert.match(s, /pi-coding-extension\.ts/); }); + +test("install-Skript verlinkt die Extension statt sie zu kopieren", () => { + const s = readRepoFile("deploy-pi-config.sh"); + assert.match(s, /ln -sfn "\$REPO\/pi-coding-extension\.ts" "\$EXT"/); + assert.doesNotMatch(s, /cp "\$REPO\/pi-coding-extension\.ts"/, "cp auf den Symlink bricht mit 'same file' ab"); +});