diff --git a/deploy/push-und-sync.ps1 b/deploy/push-und-sync.ps1 new file mode 100644 index 0000000..019bdb4 --- /dev/null +++ b/deploy/push-und-sync.ps1 @@ -0,0 +1,82 @@ +<# + push-und-sync.ps1 — der Handschlag zwischen PC und AI-Box (21.08.2026). + + Bahn: PC (Quelle der Wahrheit) -> Gitea -> Box ~/projekte + + Warum ueberhaupt ein Skript: `projekte-sync` laeuft auf der Box stuendlich. Wer + gerade gepusht hat, will aber nicht bis zu 60 Minuten warten. Das hier stoesst + denselben Dienst sofort an — kein zweiter Mechanismus, nur ein Ausloeser. + + Warum PowerShell und nicht Git-Bash: Push zum Gitea geht vom PC nur ueber den + Git Credential Manager, und den gibt es hier (Lehre vom 24.07.). + + Aufruf (im Projektordner): + .\deploy\push-und-sync.ps1 + .\deploy\push-und-sync.ps1 -NurSync # nicht pushen, nur Box nachziehen + .\deploy\push-und-sync.ps1 -Pfad "F:\Coding Stuff\rippy" +#> + +[CmdletBinding()] +param( + [string] $Pfad = (Get-Location).Path, + [switch] $NurSync, + [string] $BoxHost = "hitonabi@192.168.178.151" +) + +$ErrorActionPreference = "Stop" + +function Schritt($text) { Write-Host "`n== $text" -ForegroundColor Cyan } +function Gut($text) { Write-Host " $text" -ForegroundColor Green } +function Warn($text) { Write-Host " $text" -ForegroundColor Yellow } + +Set-Location $Pfad + +# --- 1. Ist das ueberhaupt ein Repo, und was steht an? --------------------- +$null = git rev-parse --is-inside-work-tree 2>$null +if ($LASTEXITCODE -ne 0) { throw "Kein Git-Repository: $Pfad" } + +$zweig = (git branch --show-current).Trim() + +# Repo-Name aus der Remote-URL, NICHT aus dem Ordnernamen: der lokale Ordner heisst +# z. B. "mission-control-2", das Gitea-Repo aber "mission-control-v2". Der Ordnername +# haette die Box-Abfrage still ins Leere laufen lassen. +$remote = (git remote get-url origin).Trim() +$repo = [System.IO.Path]::GetFileNameWithoutExtension(($remote -split '/')[-1]) +Schritt "Repo '$repo', Zweig '$zweig'" + +$offen = git status --porcelain +if ($offen) { + Warn "Es liegen unversionierte/ungespeicherte Aenderungen:" + $offen | Select-Object -First 10 | ForEach-Object { Warn " $_" } + Warn "Diese werden NICHT mitgeschickt. Erst committen, dann erneut aufrufen." +} + +# --- 2. Pushen ------------------------------------------------------------ +if (-not $NurSync) { + $ausstehend = git log --oneline "origin/$zweig..HEAD" 2>$null + if (-not $ausstehend) { + Gut "Nichts zu pushen — Gitea ist bereits auf Stand." + } else { + Schritt "Push nach Gitea ($(($ausstehend | Measure-Object).Count) Commit(s))" + $ausstehend | ForEach-Object { Write-Host " $_" } + git push origin $zweig + if ($LASTEXITCODE -ne 0) { throw "Push fehlgeschlagen. Haengt die DDNS-Domain? Interne Adresse ist http://192.168.178.153:3000" } + Gut "gepusht" + } +} + +# --- 3. Box nachziehen lassen -------------------------------------------- +Schritt "Box zieht nach (projekte-sync)" +ssh $BoxHost "systemctl --user start projekte-sync.service" +if ($LASTEXITCODE -ne 0) { throw "Sync-Dienst liess sich nicht starten." } + +$stand = ssh $BoxHost "cd ~/projekte/$repo 2>/dev/null && git log --oneline -1 || echo 'NICHT-IN-PROJEKTE'" +if ($stand -eq "NICHT-IN-PROJEKTE") { + Warn "'$repo' liegt nicht unter ~/projekte." + Warn "Bei mission-control-v2 ist das ABSICHT: das Live-Deployment liegt in ~/mission-control-v2" + Warn "und wird bewusst nicht automatisch gezogen — es braucht seinen eigenen Deploy-Schritt." +} else { + Gut "Box steht jetzt auf: $stand" +} + +Write-Host "" diff --git a/docs/aufgaben/umbau-openchamber.md b/docs/aufgaben/umbau-openchamber.md index 596c4bd..46cc76a 100644 --- a/docs/aufgaben/umbau-openchamber.md +++ b/docs/aufgaben/umbau-openchamber.md @@ -242,3 +242,94 @@ Steht dort ein Pfad mit `F:\` oder `tokens 0/0`, ist es diese Falle. **Merke:** Ein Projekt taucht in der Server-Liste erst auf, wenn dort einmal eine Sitzung lief. `mc2-referenz` wurde am 21.08. mit einem harmlosen Lauf angemeldet (`box/hermes`, „Antworte nur mit OK") — Worktree danach nachgemessen unverändert: 5 geänderte Dateien, HEAD `e04ace2`. + +--- + +## ▶▶ Kurswechsel 21.08. (nachmittags): Quelle ist der PC, nicht die Box + +Der Fernbetrieb oben war **falsch herum gedacht**. Der User arbeitet so — und so ist es +jetzt gebaut: + +``` +F:\Coding Stuff\… ← Quelle der Wahrheit, liegt IMMER lokal + │ OpenChamber startet seine EIGENE OpenCode-CLI und arbeitet an lokalen Dateien + │ git push (PowerShell/GCM) + ▼ +Gitea 192.168.178.153:3000 + │ projekte-sync (stuendlich, --ff-only) — oder sofort per Skript + ▼ +AI-Box ~/projekte/… ← Spiegel fuer Deploy / CI / Lucy + ▲ + └─ von der Box kommt NUR noch das Modell (Inferenz ueber HTTP) +``` + +**Damit faellt die Windows-Pfad-Falle ersatzlos weg** — es gibt keine Fernpfade mehr. + +### ★★ Kein Box-Umbau noetig: MC2 `:9001/v1` ist der Modellweg + +Erst war geplant, den Gateway `:9010` ins LAN zu binden. Ueberfluessig — die Gateway-Unit +sagt es selbst: *„LAN-Clients kommen weiter ueber MC2 `:9001/v1`, das roh hierher +durchreicht."* Der Port ist seit jeher offen. + +Vom PC aus gemessen: `:9001/v1/models` liefert **die Rollen-Aliase** (`fast`, `heavy`, +`hermes`, `coder`), `fast` antwortet in **0,7 s**. Kein neuer Port, keine Neubindung, +keine ufw-Regel — und **keine Modell-Eigennamen** in der PC-Konfiguration (die Regel vom +20.08. bleibt gewahrt). llama-swap `:8080` waere die Alternative gewesen, liefert aber nur +Eigennamen (`Qwen3.6-35B-A3B`) → genau der stille 404 vom 19.08. + +### Was auf dem PC steht + +`C:\Users\TobisPC\.config\opencode\opencode.json` — Provider `aibox` → +`http://192.168.178.151:9001/v1`, Standard `aibox/fast`, `small_model` `aibox/hermes`. +Die Juli-Struktur ist erhalten: Agenten `plan`(heavy) · `build`(fast) · `explore`(hermes) · +`review`(heavy), inklusive **IDE-Zaun** (`ssh`/`scp`/`sftp` deny, gezielte Arcane-Ausnahme; +Catch-all `*: allow` steht ZUERST, weil OpenCode `findLast` auswertet). +Arbeitsanweisung als `ARBEITSANWEISUNG.md` daneben, ueber `instructions` global geladen. + +Das Plugin `plugin/mc2-governor.ts` wird automatisch mitgeladen: Werkzeug-Zaun, +Pruef-Tor-Schleife, Savepoint statt Zusammenfassen, Meldungen an Lucys Stimme. +‼️ Es blockt **`git push`** absichtlich — *„Veroeffentlichen ist Sache des Menschen."* +Der Agent codet, gepusht wird von Hand (siehe Skript unten). + +**Gebuendelte CLI:** OpenCode **1.18.18** in OpenChambers `resources\opencode-cli`. +Im lokalen Betrieb vergibt OpenChamber dem Server automatisch ein Passwort +(`OPENCODE_SERVER_PASSWORD`, lifecycle-owned) — `/config` antwortet von aussen mit `401`. +Der Schutz, den der Box-Server nicht hatte, ist hier also gratis dabei. + +**Env-Variablen `OPENCODE_HOST` und `OPENCODE_SKIP_START` sind wieder ENTFERNT.** +Sie erzwingen den Fernbetrieb; mit ihnen startet OpenChamber keine eigene CLI. + +### Box zurueckgebaut + +`opencode-server.service` ist **gestoppt, deaktiviert und geloescht**, die ufw-Regel fuer +`4096` wieder entfernt. Damit erledigt sich die offene Sicherheitsfrage von heute Mittag +von selbst: der ungeschuetzte Dienst existiert nicht mehr. ufw steht wieder auf +`22 · 9001 · 8080 · 7681`. + +### `deploy/push-und-sync.ps1` — der Handschlag + +```powershell +.\deploy\push-und-sync.ps1 # committen -> pushen -> Box zieht sofort nach +.\deploy\push-und-sync.ps1 -NurSync # nur nachziehen +.\deploy\push-und-sync.ps1 -Pfad "F:\Coding Stuff\rippy" +``` + +Stoesst `projekte-sync` sofort an, statt bis zu 60 Minuten auf den Timer zu warten — +**kein zweiter Mechanismus, nur ein Ausloeser.** Meldet danach, auf welchem Commit die Box steht. + +‼️ **Falle beim Bauen gefunden:** Der Repo-Name darf **nicht** aus dem Ordnernamen kommen — +lokal heisst es `mission-control-2`, in Gitea `mission-control-v2`. Das Skript liest ihn +aus der Remote-URL. Getestet gegen beide Faelle: MC2 (Live-Deployment, liegt als +Verknuepfung unter `~/projekte`) und `rippy` (normales Projekt, `a14449e`). + +### Offener Punkt: PC-Remote haengt an der DDNS-Domain + +Der PC pusht nach `https://git.tobisniceshomelab.ddnsfree.com/…`, die Box nutzt intern +`http://192.168.178.153:3000`. Die Domain ist nachts durch die Zwangstrennung zeitweise +tot (Lehre vom 24.07.). Umstellen mit: + +```bash +git remote set-url origin http://192.168.178.153:3000/Hitonabi/mission-control-v2.git +``` + +Noch **nicht** gemacht — aendert Git-Konfiguration in den Repos des Users.