- Replace static model-catalog.json with live Zenmux listByFilter API
- Map Zenmux schema: slug→id, suitable_api→protocols, supports_reasoning, pricing
- Derive tags (function-call, vision, reasoning) from Zenmux fields
- Cache response 5 minutes; ctoken configurable via ZENMUX_CTOKEN env var
- Filter result to user's group-available models as before
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>