Files
mission-control-v2/deploy/opencode-plugin/README.md
T
HitonabiandClaude Opus 5 c2a54bd25d feat(governor): Plugin ins Repo geholt, git push freigegeben, force push bleibt gesperrt
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>
2026-08-21 15:06:50 +02:00

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).