Das Plugin existierte nur im Konfigordner des PCs - ohne Sicherung, ohne Historie. Zaun-Regel 'git push' entfernt (jede Aenderung soll im git landen), dafuer gezielte Sperre fuer --force/--mirror/--delete. Beides gemessen. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
79 lines
3.6 KiB
Markdown
79 lines
3.6 KiB
Markdown
# OpenCode-Plugin: MC2-Governor
|
|
|
|
**Hier liegt die Quelle. Der Einsatzort ist eine Kopie.**
|
|
|
|
```
|
|
deploy/opencode-plugin/mc2-governor.ts <- versioniert, hier aendern
|
|
| kopieren
|
|
v
|
|
%USERPROFILE%\.config\opencode\plugin\ <- wird von OpenCode automatisch geladen
|
|
```
|
|
|
|
Bis zum 21.08.2026 existierte diese Datei **nur** im Konfigordner des PCs — 11 KB
|
|
verhaltensbestimmender Code ohne Sicherung und ohne Historie. Deshalb liegt sie jetzt hier.
|
|
|
|
## Ausbringen
|
|
|
|
```powershell
|
|
Copy-Item "deploy\opencode-plugin\mc2-governor.ts" "$env:USERPROFILE\.config\opencode\plugin\" -Force
|
|
```
|
|
|
|
Wirkt sofort in der naechsten OpenCode-Sitzung; OpenChamber muss dafuer nicht neu starten,
|
|
eine neue Sitzung reicht.
|
|
|
|
## Was es tut
|
|
|
|
1. **Werkzeug-Zaun** (`tool.execute.before`) — blockt Handgriffe, die ein Agent nie
|
|
unbeaufsichtigt tun darf. Leitplanke gegen Entgleisen, **keine** Sandbox.
|
|
2. **Pruef-Tor + Reparaturschleife** (`session.idle`) — sagt der Agent „fertig", laeuft der
|
|
Verify-Befehl aus der Datei `VERIFY` im Repo-Wurzelverzeichnis. ROT geht als naechster
|
|
Auftrag zurueck an den Agenten, bis zu `MC2_LOOP_MAX_ROUNDS` mal.
|
|
‼️ **Schlaeft derzeit:** es gibt in keinem Projekt eine `VERIFY`-Datei. Ohne sie tut
|
|
diese Funktion nichts — schadet aber auch nicht.
|
|
3. **Savepoint statt Zusammenfassen** (`session.compacted`) — beim Komprimieren fallen
|
|
still die Regeln aus dem Kontext; stattdessen wird `SAVEPOINT.md` geschrieben.
|
|
4. **Stimme** — Ereignisse gehen an MC2 `/api/voice/announce`, Lucy spricht sie.
|
|
|
|
Der zugehoerige **Governor-Proxy auf `:8100`** (Token-Zaehler mit Hart-Deckel, Juli 2026)
|
|
**existiert nicht mehr** — kein Port, kein Ordner, keine Unit. Nachgemessen am 21.08.2026.
|
|
Dieses Plugin haengt nicht an ihm.
|
|
|
|
## Schalter (Umgebungsvariablen)
|
|
|
|
| Variable | Default | Wirkung |
|
|
|---|---|---|
|
|
| `MC2_BOX_URL` | `http://192.168.178.151:9001` | MC2-Basis fuer Meldungen |
|
|
| `MC2_FENCE_OFF` | — | `1` schaltet den **ganzen** Zaun ab (alles oder nichts) |
|
|
| `MC2_LOOP_AUTOFIX` | an | `0` schaltet die Reparaturschleife ab |
|
|
| `MC2_LOOP_MAX_ROUNDS` | `3` | Runden der Reparaturschleife |
|
|
| `MC2_LOOP_ANNOUNCE` | an | `0` macht Lucy stumm |
|
|
| `MC2_LOOP_SILENT` | — | `1` = Meldungen ohne Ton |
|
|
|
|
## Aenderung 21.08.2026: `git push` ist frei
|
|
|
|
Der Zaun blockte urspruenglich **jedes** `git push` („Veroeffentlichen ist Sache des
|
|
Menschen"). Das passt nicht mehr: die Bahn ist jetzt PC → Gitea → Box, und jede Aenderung
|
|
soll auch im git landen. Ein Agent, der committen, aber nicht pushen darf, laesst Arbeit
|
|
auf einem einzelnen Rechner liegen.
|
|
|
|
**Erzwungenes Pushen bleibt verboten** — `--force`, `--mirror`, `--delete`. Das
|
|
ueberschreibt fremde Arbeit auf dem Server und ist genau die Klasse Unfall, gegen die der
|
|
Zaun existiert. `--force-with-lease` ist bewusst ausgenommen.
|
|
|
|
Beides gemessen: `git push --dry-run origin main` laeuft durch,
|
|
`git push --force --dry-run origin main` wird mit `[MC2-ZAUN]` abgewiesen.
|
|
|
|
## ‼️ Falle: das `bash`-Werkzeug ist auf Windows kein bash
|
|
|
|
Es laeuft in **PowerShell**. `tail`, `head`, `grep` und Freunde gibt es dort nicht, und
|
|
Pipes verhalten sich anders. Wer dem Agenten Befehle vorgibt, muss das beruecksichtigen.
|
|
|
|
## ‼️ Falle: Gitea-Anmeldung ist flatterhaft
|
|
|
|
Der Git Credential Manager haelt fuer die DDNS-Domain ein **OAuth-Token mit einer Stunde
|
|
Laufzeit**. Laeuft es ab, scheitert der Push des Agenten mit
|
|
`remote: Failed to authenticate user` — ein Push aus PowerShell erneuert es, danach geht es
|
|
wieder. Dauerhafte Loesung waere ein langlebiges Gitea-Token auf die **interne** Adresse
|
|
`http://192.168.178.153:3000` (die DDNS-Domain ist nachts durch die Zwangstrennung ohnehin
|
|
zeitweise tot).
|