neues modell
This commit is contained in:
@@ -65,7 +65,7 @@ damit keine interaktive Oberfläche benötigt wird. Der Prompt wird über stdin
|
||||
|
||||
Die Berechtigungen beginnen mit `deny` und erlauben gezielt:
|
||||
|
||||
- Lesen, Suchen, Auflisten sowie eine kleine Read-only-Shell-Allowlist;
|
||||
- Lesen, Suchen, Auflisten sowie eine Read-only-Shell-Allowlist;
|
||||
- Schreiben und externe Verzeichnisse ausschließlich für das angegebene Ergebnisverzeichnis;
|
||||
- im Modus `solo` keine Tasks;
|
||||
- im Modus `builtin` nur OpenCodes `general`- und `explore`-Subagenten;
|
||||
@@ -76,6 +76,27 @@ Git-Worktree-Wurzel relative Allow-Patterns. Das ist unter Windows notwendig, we
|
||||
Laufverzeichnis im selben Git-Worktree liegen, das Laufverzeichnis aber außerhalb des
|
||||
Root-Unterordners liegt.
|
||||
|
||||
Die Shell-Rechte sind seit Skill 12.0.0 eine **Denylist**, spiegelbildlich zum
|
||||
Claude-Code-Adapter: Erlaubt ist alles, gesperrt sind ausdrücklich die schreibenden und
|
||||
bauenden Kommandos – `rm`, `rmdir`, `mv`, `cp`, `dd`, `truncate`, `chmod`, `chown`, `ln`,
|
||||
`tee`, `sed -i`, die schreibenden `git`-Kommandos einschließlich `fetch`, `pull` und `remote`,
|
||||
`dotnet`, `msbuild`, `npm install`, `nuget` sowie `Remove-Item`, `Move-Item`, `Copy-Item`,
|
||||
`New-Item`, `Set-Content`, `Add-Content`, `Clear-Content`, `Out-File`, `Set-ItemProperty` und
|
||||
`Rename-Item`.
|
||||
|
||||
**Die Reihenfolge ist bedeutsam.** OpenCode wertet die Regeln der Reihe nach aus; die *zuletzt
|
||||
passende* Regel gewinnt – nicht die spezifischste, und `deny` gewinnt nicht automatisch. Das
|
||||
Catch-all `"*": "allow"` muss deshalb **zuerst** stehen, die Sperren danach. Python-Dicts
|
||||
erhalten ihre Einfügereihenfolge, `json.dump` schreibt sie unverändert.
|
||||
|
||||
Die frühere Allowlist konnte Kommandos nur als Präfix treffen und scheiterte deshalb an
|
||||
Pipelines: `Get-ChildItem ... | Format-Table ...` blieb gesperrt, obwohl `Get-ChildItem`
|
||||
erlaubt war. Zugleich war die Werkzeugfreiheit nicht mit der des Claude-Adapters vergleichbar.
|
||||
|
||||
Wie beim Claude-Adapter gilt: Mustervergleich auf Kommandozeilen ist **nicht lückenlos**. Die
|
||||
belastbare Read-only-Garantie bleibt der Vorher/Nachher-Vergleich per `git status`; die
|
||||
Denylist senkt das Risiko, sie ersetzt die Verifikation nicht.
|
||||
|
||||
Webzugriff, Skills, Rückfragen und Weiterdelegation durch Subagenten bleiben gesperrt. Bei
|
||||
`custom` übersetzt der Adapter `description` und `prompt` jeder Rolle in eine explizite
|
||||
OpenCode-Subagentenkonfiguration mit demselben Modell wie der Hauptagent.
|
||||
@@ -120,6 +141,37 @@ Codebasisanalyse nicht.
|
||||
Das geladene Fenster wird zusätzlich als `limit.context` in die Laufkonfiguration geschrieben,
|
||||
damit OpenCode nicht mehr Kontext sendet, als der Server vorhält.
|
||||
|
||||
### Speicherhygiene und Ladeparameter
|
||||
|
||||
Der lokale Durchsatz haengt fast vollstaendig davon ab, ob Gewichte und KV-Cache in den VRAM
|
||||
passen. Gemessen am 01.09.2026 auf einer RTX 5080 Laptop GPU (16.303 MiB):
|
||||
|
||||
| Konfiguration | VRAM belegt | Generierung |
|
||||
|---|---:|---:|
|
||||
| `gemma-4-e4b`, 32k, parallel 1 | 5.162 MiB | 48,3 tok/s |
|
||||
| `gemma-4-e4b`, 32k, parallel 4 | 5.222 MiB | 47,7 tok/s |
|
||||
| `gemma-4-e4b`, **131k**, parallel 4 | 6.854 MiB | 46,8 tok/s |
|
||||
| `qwen3.8-27b`, 32k, `--gpu max` | 15.696 MiB (308 frei) | Abbruch nach 10 min |
|
||||
| beide Modelle gleichzeitig geladen | 15.836 MiB (168 frei) | 0,028 Mio. Tokens/h |
|
||||
|
||||
Daraus die drei Regeln, die der Preflight seit Adapter 2.2.0 durchsetzt:
|
||||
|
||||
1. **Genau ein Modell ist geladen.** `--lmstudio-autoload` entlaedt `--all` und laedt nur das
|
||||
angeforderte Modell; ein fremdes geladenes Modell fuehrt sonst zum Abbruch. Ein nebenher
|
||||
geladenes Modell belegt VRAM, das dem Lauf fehlt, und veraendert dessen Durchsatz um
|
||||
Groessenordnungen.
|
||||
2. **Der Kontext wird auf das Modellmaximum geladen** (`--lmstudio-context max`, Standard).
|
||||
Freier VRAM ist in Kontext besser investiert als ungenutzt: vierfaches Fenster fuer 1,7 GB
|
||||
und 1,5 tok/s. `--min-context` bleibt die Gueltigkeitsschwelle, nicht die Ladegroesse.
|
||||
3. **`--lmstudio-gpu max`** erzwingt die vollstaendige Auslagerung, **`--lmstudio-parallel 4`**
|
||||
ist messbar kostenneutral und hilft, wenn Subagenten nebenlaeufig anfragen.
|
||||
|
||||
**Modelle jenseits der VRAM-Grenze sind nicht messbar.** `qwen3.8-27b` belegt mit 17,74 GB
|
||||
Gewichten mehr, als die Karte hat; der Rest laeuft auf der CPU. Auch eine kleinere
|
||||
Quantisierung loest das nicht, weil der KV-Cache eines 27B-Modells bei brauchbarem Kontext
|
||||
mehrere GB zusaetzlich fordert. Fuer eine 16-GB-Karte ist die 9B-Klasse die groesste, die mit
|
||||
vollem Fenster hineinpasst - dann aber in hoher Quantisierung, um den Speicher zu nutzen.
|
||||
|
||||
### Zusätzliche Laufartefakte und Messfelder
|
||||
|
||||
| Datei | Inhalt |
|
||||
@@ -190,7 +242,14 @@ Port oder Installationsort abweichen.
|
||||
|
||||
`--agents` bei `solo` und `builtin` weglassen. `--stall-timeout 600` beendet den gesamten
|
||||
OpenCode-Prozessbaum, wenn zehn Minuten lang weder stdout noch stderr Aktivität zeigen.
|
||||
`--stall-timeout 0` deaktiviert diese Sicherung. `--max-runtime 0` setzt kein absolutes
|
||||
`--stall-timeout 0` deaktiviert diese Sicherung.
|
||||
|
||||
**In den Modi `builtin` und `custom` ist `--stall-timeout 0` zwingend.** OpenCode sendet
|
||||
**keine Ereignisse, solange ein Subagent arbeitet** – der Ereignisstrom schweigt für dessen
|
||||
gesamte Laufzeit. Jeder positive Stall-Timeout bricht den Lauf deshalb ab, sobald der erste
|
||||
Subagent startet, und erzeugt eine Fehlmessung, die wie ein Hänger aussieht. Der Adapter lehnt
|
||||
diese Kombination seit Version 1.3.0 mit einer Fehlermeldung ab, statt sie stillschweigend zu
|
||||
korrigieren. Die Laufzeit wird in diesen Modi ausschließlich über `--max-runtime` begrenzt. `--max-runtime 0` setzt kein absolutes
|
||||
Laufzeitlimit. `Ctrl+C` beendet ebenfalls den Prozessbaum und persistiert soweit möglich das
|
||||
Teilergebnis. Ein leeres `Ergebnisse`-Verzeichnis macht den Lauf standardmäßig zu einem Fehler.
|
||||
Nur ein bewusst textueller Smoke-Test darf diese Prüfung mit `--allow-empty-output` abschalten.
|
||||
|
||||
Reference in New Issue
Block a user