Нема описа

Paul Klumpp 9c7bc1310f feat: read endpoint/key from config with fallback to defaults пре 1 недеља
.opencode 9c7bc1310f feat: read endpoint/key from config with fallback to defaults пре 1 недеља
.gitignore 2abf48f2c4 feat: Add OpenCode v2 model discovery plugin as plain JS пре 1 недеља
AGENTS.md f2be16b686 chore: Rename plugin to opencode-openai-compatible-model-discovery and update docs пре 1 недеља
README.md 680fcd1529 feat: config-driven model discovery with opt-in flag пре 1 недеља

README.md

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/<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).

Installation (projektlokal)

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).

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:

{
  "$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.

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):

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

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.

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.