FUNKTIONIERT — das Plugin opencode-openai-compatible-model-discovery discovered ~900 Gateway-Modelle und registriert sie als OmniRoute/* in OpenCode.
OpenCode v2 Plugin (opencode-openai-compatible-model-discovery), das:
GET /v1/models).
├── AGENTS.md # Diese Datei
├── README.md # Doku für Menschen (Installation)
└── .opencode/plugins/
└── opencode-openai-compatible-model-discovery/
├── index.ts # Plugin-Code (TypeScript, ESM)
├── package.json # Plugin Package-Metadata
└── tsconfig.json # TypeScript-Konfiguration
Keine
opencode.jsoncnötig! Das Plugin ist selbstständig — es erstellt denOmniRoute-Provider pereditor.add()selbst.
@opencode/plugin (v2.x) — NICHT @opencode-ai/plugin (v1).opencode/plugins/ werden automatisch geladen. Global: ~/.opencode/plugins/ (gleiche Struktur).opencode.jsonc wird benötigt.BASE_URL: http://localhost:20128/v1
API_KEY: sk-e9ac58c0b78cd2bc-f17d3e-f6beea67
MODELS: GET /v1/models → 900 Modelle
ctx.provider.transform(editor) mit editor.models.set() auf einem nicht-existierenden Provider ist ein stilles No-Op. Immer editor.add({ info, models }) verwenden — das Plugin erstellt den OmniRoute-Provider selbst.
OpenCode verwirft Models OHNE Fehlermeldung aus dem Index, wenn Schema-Felder fehlen.
{
id, modelID, providerID, name,
capabilities: { tools, input: [], output: [] },
variants: [],
cost: [{ input, output, cache: { read, write } }],
limit: { context, output },
time: { released },
status: "active",
enabled: true,
}
Wichtig: limit (SINGULAR), nicht limits. Fehler erscheinen client-seitig als InvalidRequestError: Missing key at ["data"][N][...] — der Index N zeigt das fehlgeschlagene Model.
Der Plugin-Load wird getriggert, sobald ein Client das Projektverzeichnis öffnet. Bei Änderungen: pkill -f opencode (Server killen) + CLI-Aufruf. Syntaxfehler im TS zeigen als BuildMessage im Log.
OpenCode watcht die Plugin-index.ts — Änderungen werden sofort neu geladen.
Das Muster steht in .opencode/plugins/opencode-openai-compatible-model-discovery/index.ts.
Kernlogik:
fetch(\${BASE_URL}/models`)` — Modellliste vom Gateway holeneditor.add() aufrufen, falls editor.get("OmniRoute") null ist — das Plugin erstellt den Provider selbstopencode plugin list # → opencode.openai-compatible-model-discovery local
opencode models | grep -c "^OmniRoute/" # → ~900