# opencode-openai-compatible-model-discovery Ein OpenCode v2 Plugin, das automatisch alle Modelle eines OpenAI-kompatiblen API-Endpunkts (`GET /v1/models`) entdeckt und als wählbare Modelle unter dem Provider **OmniRoute** registriert. > Getestet mit **OpenCode v2.0.32** – alle ~900 Modelle eines lokalen Gateways > erscheinen in der Modellauswahl. ## Wie es funktioniert ``` OpenCode startet └─ lädt Plugin (Konvention: .opencode/plugins//) └─ setup(ctx) └─ ctx.provider.transform(editor) → Provider mit openai-compatible + discover_models sammeln └─ pro Provider: fetch {baseURL}/models → Modelle mergen (dedup by id) ``` Das Plugin **erstellt keine Provider** – es ergänzt nur bereits in der `opencode.jsonc` definierte Provider. Ein Provider wird berücksichtigt, wenn sein `package` "openai-compatible" enthält **und** `settings.discover_models` auf `true` gesetzt ist (Compat: `settings.modelsDiscovery.enabled === true`). Bestehende manuelle Models bleiben erhalten (Merge, dedup by id). Wichtig: Das Plugin füllt alle Pflichtfelder des `Model.Info`-Schemas (`modelID`, `providerID`, `capabilities.tools`, `variants`, `cost`, `limit`, `time.released`, `status`, `enabled`) – fehlt eines davon, verwirft OpenCode die Modelle **still** (typisches Symptom: Plugin lädt ohne Fehler, aber keine Modelle erscheinen). ## Installation (projektlokal) Die Dateien einfach ins Projekt kopieren: ``` / └── .opencode/plugins/opencode-openai-compatible-model-discovery/ ├── index.ts # Plugin-Code (wird von OpenCode automatisch transpiliert) ├── package.json └── tsconfig.json ``` **Fertig** (Plugin-Laden). Zusätzlich muss der zu discovernde Provider in der `opencode.jsonc` definiert sein, mit Opt-in-Flag: ```jsonc { "providers": { "OmniRoute": { "package": "aisdk:@ai-sdk/openai-compatible", "settings": { "baseURL": "http://localhost:20128/v1", "apiKey": "sk-...", "discover_models": true } } } } ``` Endpunkt/Key anpassen: in der `opencode.jsonc` (nicht mehr in `index.ts`). ## Installation (global, alle Projekte) **Weg 1 – Globales Plugin-Verzeichnis (Konvention):** ``` ~/.opencode/plugins/opencode-openai-compatible-model-discovery/ ├── index.ts ├── package.json └── tsconfig.json ``` OpenCode überwacht `~/.opencode/` ebenfalls (siehe Server-Logs: `watcher subscribe path=/home/paul/.opencode`). Gleiche Struktur wie projektlokal, das Plugin ist dann in jedem Projekt aktiv. **Weg 2 – Über die globale Config** (`~/.config/opencode/opencode.jsonc`), falls das Verzeichnis-Layout nicht greift: ```json { "$schema": "https://opencode.ai/config.json", "plugins": [ { "package": "file:///home/paul/dev2/opencode-openai-compat-with-model-discovery/.opencode/plugins/opencode-openai-compatible-model-discovery" } ] } ``` Das v2-Schema erlaubt `"plugins": [ "" | { "package": "...", "options": {...} } ]`. Es referenziert das Plugin dann direkt am Quelldort – praktisch, wenn man das Plugin-Verzeichnis nicht kopieren will. ## Installation per AI-Agent Man muss das Plugin nicht selbst installieren – man kann auch seinen Coding-Agenten (pi, Claude Code, OpenCode selbst, etc.) auf dieses Repo zeigen und ihn die Installation erledigen lassen. **Dafür:** Agenten auf das Repo zeigen lassen (Prompt-Beispiel): > Installiere das Plugin aus `.opencode/plugins/opencode-openai-compatible-model-discovery/` > global bei mir. Lies dazu zuerst `AGENTS.md` und `README.md` in diesem > Repository und folge den Anweisungen dort. Der Agent findet in `AGENTS.md` alle technischen Details (Plugin-API, Schema-Pflichtfelder, Stolpersteine) und in diesem `README.md` die Installationsschritte. **Checkliste für den Agenten (auch direkt als Prompt kopierbar):** ```text Installiere das OpenCode-Plugin opencode-openai-compatible-model-discovery global. 1. Lies AGENTS.md und README.md im Repo-Root für Kontext. 2. Stelle sicher, dass das Gateway läuft: curl -s http://localhost:20128/v1/models muss JSON mit einem "data"-Array liefern (sonst Plugin trotzdem installieren, aber warnen). 3. Kopiere das komplette Plugin-Verzeichnis: mkdir -p ~/.opencode/plugins cp -r .opencode/plugins/opencode-openai-compatible-model-discovery ~/.opencode/plugins/ 4. Entferne ggf. alte Reste: ~/.opencode darf KEIN opencode-models-discovery und KEIN @opencode-ai/plugin (v1!) in node_modules/package.json enthalten. 5. Beende laufende OpenCode-Server hart: pkill -f "opencode" 6. Verifiziere: opencode plugin list → opencode.openai-compatible-model-discovery local opencode models | grep -c "^OmniRoute/" → ~900 7. Berichte das Ergebnis (Anzahl Modelle oder Fehler). NICHT tun: - Das alte opencode-models-discovery installieren oder referenzieren (fehlerhaft, wurde nie erfolgreich betrieben). - Ein "modelsDiscovery"-Feld auf Top-Level in opencode.jsonc schreiben (existiert im v2-Schema nicht). Stattdessen `discover_models: true` innerhalb von `settings`. - Den Opt-in-Flag vergessen: ohne `settings.discover_models: true` (bzw. `settings.modelsDiscovery.enabled: true`) werden keine Models discovered. ``` ## Verifizieren ```bash opencode models | grep -c "^OmniRoute/" # → ~900 ``` Falls nichts erscheint: Server hart neu starten (ein hängender Zombie-Prozess cache alte Plugin-Stände): ```bash pkill -f "opencode" sleep 2 opencode models ``` Debug-Tipps siehe `AGENTS.md`. ## Historie / Abgrenzung Dieses Plugin ersetzt das **fehlfunktionale** `opencode-models-discovery` (niemals erfolgreich gelaufen; AggregateError beim Build, `modelsDiscovery`- Config-Feld existiert im v2-Schema nicht). Es wird **nicht** verwendet.