# opencode-openai-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) └─ fetch http://localhost:20128/v1/models → 900 Modelle └─ ctx.provider.transform(editor) ├─ Provider "OmniRoute" existiert? → Modelle mergen └─ sonst → Provider + Modelle anlegen ``` Das Plugin **erstellt den Provider selbst** (inkl. `baseURL`/`apiKey`) – eine Provider-Definition in der `opencode.jsonc` ist deshalb **nicht nötig**. 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-discovery/ ├── index.ts # Plugin-Code (wird von OpenCode automatisch transpiliert) ├── package.json └── tsconfig.json ``` **Fertig.** Kein Eintrag in irgendeiner Config nötig – OpenCode lädt Plugins aus `.opencode/plugins/` automatisch, sobald ein Client das Projektverzeichnis öffnet. Änderungen an `index.ts` werden per File-Watcher sofort neu geladen (Hot-Reload, kein Neustart). Endpunkt anpassen: Konstanten am Kopf von `index.ts` editieren (`PROVIDER_ID`, `BASE_URL`, `API_KEY`). ## Installation (global, alle Projekte) **Weg 1 – Globales Plugin-Verzeichnis (Konvention):** ``` ~/.opencode/plugins/opencode-openai-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-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. ## 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 serve" 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.