|
|
1 settimana fa | |
|---|---|---|
| .opencode | 1 settimana fa | |
| .gitignore | 1 settimana fa | |
| AGENTS.md | 1 settimana fa | |
| README.md | 1 settimana fa |
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.
OpenCode startet
└─ lädt Plugin (Konvention: .opencode/plugins/<name>/)
└─ 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).
Die Dateien einfach ins Projekt kopieren:
<projekt>/
└── .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:
{
"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).
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:
{
"$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-string>" | { "package": "...", "options": {...} } ].
Es referenziert das Plugin dann direkt am Quelldort – praktisch, wenn man das
Plugin-Verzeichnis nicht kopieren will.
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 zuerstAGENTS.mdundREADME.mdin 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):
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.
opencode models | grep -c "^OmniRoute/"
# → ~900
Falls nichts erscheint: Server hart neu starten (ein hängender Zombie-Prozess cache alte Plugin-Stände):
pkill -f "opencode"
sleep 2
opencode models
Debug-Tipps siehe AGENTS.md.
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.