Sobre el proyecto

WindsurfAPI es un servicio de proxy inverso autoalojado que convierte más de 100 modelos de IA en la nube de Windsurf (antes Codeium, ahora Devin Desktop) en múltiples interfaces API estándar. El proyecto está implementado en Node.js puro, afirma no tener dependencias npm en tiempo de ejecución y escucha por defecto en el puerto 3003. ## Interfaces ofrecidas - `POST /v1/chat/completions`: compatible con OpenAI Chat, se puede usar directamente con el SDK de OpenAI - `POST /v1/completions`: Completions antiguo de OpenAI (no streaming) - `POST /v1/responses`: compatible con OpenAI Responses, además admite `GET`/`DELETE /v1/responses/{id}` para leer y eliminar respuestas almacenadas, y permite continuar el contexto con `previous_response_id` - `POST /v1/messages`: compatible con Anthropic, para que se conecten clientes como Claude Code, Cline, Cursor, etc. - `POST /v1beta/models/*`: compatible con Gemini, admite la cabecera `x-goog-api-key` y el parámetro de consulta `?key=` ## Cómo funciona El servicio traduce las solicitudes de cada protocolo al protocolo gRPC interno de Windsurf y las reenvía a la nube de Windsurf a través del binario local del Language Server; también puede conectarse directamente a la nube de Devin mediante la ruta `DEVIN_CONNECT`. Incluye un grupo de cuentas integrado que ofrece rotación, aislamiento de límites de velocidad, conmutación por error y disyuntor; antes de devolver la respuesta, elimina la información de identidad de Windsurf del origen. ## Despliegue y uso Ofrece despliegue con un solo comando mediante `setup.sh`, despliegue con Docker Compose y un script de actualización `update.sh`. Primero hay que añadir una cuenta de Windsurf: se puede iniciar sesión con OAuth de Google/GitHub desde el Dashboard, con correo y contraseña, o importar en lote tokens obtenidos en `windsurf.com/show-auth-token` a través de la interfaz `/auth/login`. El Dashboard (`/dashboard`) ofrece paneles de resumen, inicio de sesión y obtención de cuentas, gestión de cuentas, listas blancas y negras de modelos, configuración del proxy, registros en tiempo real, análisis estadísticos, etc. ## Puntos clave de configuración Las variables de entorno sobrescriben el puerto, la clave API, el modelo predeterminado, el máximo de tokens, el nivel de registro, la ruta del binario LS y el directorio de datos, el grupo de instancias LS y las protecciones de memoria, el almacenamiento de respuestas (TTL, número de entradas, presupuesto de bytes), las sesiones persistentes, la lista blanca de hosts del proxy, etc. Un `API_KEY` vacío y un `DASHBOARD_PASSWORD` vacío tienen por defecto un comportamiento fail-closed (devuelven 401); para abrir el acceso local hay que establecer explícitamente los interruptores correspondientes. ## Modelos y clientes La lista estática de modelos cubre las series Claude, GPT, Gemini, Grok, Qwen, Kimi, GLM, MiniMax, SWE, Arena, etc., y al iniciarse fusiona el catálogo de modelos dinámicos enviado desde la nube. La documentación aclara que los modelos en sí no manipulan archivos; la lectura y escritura de archivos la realizan localmente clientes como Claude Code o Cline, y la puerta de enlace solo se encarga de transmitir tool_use/tool_result. Para el bloqueo por lista blanca de nombres de modelo que contienen `claude` en el cliente Cursor, el README proporciona una tabla de mapeo de alias. El proyecto es de código abierto bajo licencia MIT, y el README incluye además una declaración personal del autor sobre el uso comercial.