À propos du projet

WindsurfAPI est un service de proxy inverse auto-hébergé qui convertit plus de 100 modèles d'IA cloud de Windsurf (anciennement Codeium, désormais Devin Desktop) en plusieurs ensembles d'interfaces API standard. Le projet est implémenté en Node.js pur, revendique zéro dépendance npm à l'exécution et écoute par défaut sur le port 3003. ## Interfaces fournies - `POST /v1/chat/completions` : compatible OpenAI Chat, utilisable directement avec le SDK OpenAI - `POST /v1/completions` : anciennes Completions OpenAI (non streaming) - `POST /v1/responses` : compatible OpenAI Responses, avec en plus `GET`/`DELETE /v1/responses/{id}` pour lire et supprimer les réponses stockées, et `previous_response_id` pour poursuivre le contexte - `POST /v1/messages` : compatible Anthropic, pour les clients Claude Code, Cline, Cursor, etc. - `POST /v1beta/models/*` : compatible Gemini, avec prise en charge de l'en-tête `x-goog-api-key` et du paramètre de requête `?key=` ## Fonctionnement Le service traduit les requêtes de chaque protocole en protocole gRPC interne de Windsurf, transmises au cloud Windsurf via le binaire local Language Server ; il peut aussi se connecter directement au cloud Devin via le chemin `DEVIN_CONNECT`. Un pool de comptes intégré assure rotation, isolation des limites de débit, bascule et disjoncteur ; les informations d'identité Windsurf amont sont retirées avant le retour. ## Déploiement et utilisation Un déploiement en une commande via `setup.sh`, un déploiement Docker Compose et un script de mise à jour `update.sh` sont fournis. Il faut d'abord ajouter un compte Windsurf : via la connexion OAuth Google/GitHub du Dashboard, via e-mail/mot de passe, ou en important en masse des Tokens obtenus sur `windsurf.com/show-auth-token` via l'interface `/auth/login`. Le Dashboard (`/dashboard`) propose des panneaux de vue d'ensemble, de connexion et récupération de comptes, de gestion des comptes, de liste blanche/noire des modèles, de configuration du proxy, de journaux en temps réel et de statistiques. ## Points de configuration Les variables d'environnement couvrent le port, la clé API, le modèle par défaut, le nombre maximal de tokens, le niveau de journalisation, le chemin du binaire LS et le répertoire de données, le pool d'instances LS et les garde-fous mémoire, le stockage des réponses (TTL, nombre d'entrées, budget en octets), les sessions persistantes, la liste blanche des hôtes proxy, etc. Un `API_KEY` vide et un `DASHBOARD_PASSWORD` vide sont par défaut fail-closed (retour 401) ; l'ouverture locale nécessite de définir explicitement les commutateurs correspondants. ## Modèles et clients La liste statique de modèles couvre les séries Claude, GPT, Gemini, Grok, Qwen, Kimi, GLM, MiniMax, SWE, Arena, etc., et fusionne au démarrage le catalogue de modèles transmis dynamiquement par le cloud. La documentation précise que les modèles eux-mêmes n'opèrent pas sur les fichiers : la lecture/écriture de fichiers est effectuée localement par des clients comme Claude Code ou Cline, la passerelle se chargeant uniquement de transmettre tool_use/tool_result. Face au filtrage par liste blanche des noms de modèles contenant `claude` chez le client Cursor, le README fournit une table de correspondance d'alias. Le projet est open source sous licence MIT ; le README contient également une déclaration personnelle de l'auteur concernant l'usage commercial.