|
|
1 vecka sedan | |
|---|---|---|
| .opencode | 1 vecka sedan | |
| .gitignore | 1 vecka sedan | |
| AGENTS.md | 1 vecka sedan | |
| README.md | 1 vecka sedan | |
| opencode.jsonc | 1 vecka sedan |
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)
└─ 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).
Die Dateien einfach ins Projekt kopieren:
<projekt>/
└── .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).
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:
{
"$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-string>" | { "package": "...", "options": {...} } ].
Es referenziert das Plugin dann direkt am Quelldort – praktisch, wenn man das
Plugin-Verzeichnis nicht kopieren will.
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 serve"
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.