dwgx/WindsurfAPI

GitHub: dwgx/WindsurfAPI

一个 Node.js 实现的 API 网关,将 Windsurf 能力同时以 OpenAI 与 Anthropic 兼容接口暴露,解决多模型接入与账号轮换问题。

Stars: 336 | Forks: 112

# 严正声明:未经作者明确书面许可,严禁任何商业使用、转售、代部署或中转售卖 把 [Windsurf](https://windsurf.com)(原 Codeium)的 AI 模型变成**两套标准 API 同时兼容**: - `POST /v1/chat/completions` — **OpenAI 兼容** 任何 OpenAI SDK 直接用 - `POST /v1/messages` — **Anthropic 兼容** Claude Code / Cline / Cursor 直接连 **107 个模型**:Claude Opus / Sonnet · GPT-5 全系 · Gemini 3.x · DeepSeek · Grok · Qwen · Kimi · GLM 等。零 npm 依赖 纯 Node.js。 ## 它到底在干嘛 ``` ┌─────────────┐ /v1/chat/completions ┌────────────┐ │ OpenAI SDK │ ──────────────────────→ │ │ │ curl / 前端 │ ←────────────────────── │ │ └─────────────┘ OpenAI JSON + SSE │ WindsurfAPI│ │ Node.js │ ┌──────────────┐ ┌─────────────────┐ ┌─────────────┐ /v1/messages │ (本服务) │ gRPC │ Language │ HTTPS │ Windsurf 云端 │ │ Claude Code │ ──────────────────────→ │ │ ───→ │ Server (LS) │ ────→ │ server.self- │ │ Cline │ ←────────────────────── │ │ ←─── │ (Windsurf │ ←─── │ serve.windsurf │ │ Cursor │ Anthropic SSE │ │ │ binary) │ │ .com │ └─────────────┘ └────────────┘ └──────────────┘ └─────────────────┘ ↑ 账号池轮询 速率限制隔离 故障转移 ``` **它做了什么**: 1. 一个 HTTP 服务(端口 3003)同时暴露 OpenAI 和 Anthropic 两套 API 2. 把请求翻译成 Windsurf 内部 gRPC 协议,通过本地 Language Server 发给 Windsurf 云 3. 维护账号池,自动轮询 + 速率限制 + 故障转移 4. 返回前把上游 Windsurf 身份剥掉,模型自称"我是 Claude Opus 4.6 由 Anthropic 开发" ## Claude Code / Cline / Cursor 怎么用 模型本身**不会**操作文件 — 文件操作是 IDE Agent 客户端(Claude Code / Cline 等)在本地执行的: ``` 你 "帮我改 bug" Claude Code WindsurfAPI Windsurf Cloud │ │ │ │ │────────────────────────────→ │ │ │ │ │ POST /v1/messages │ │ │ │ messages + tools + system │ │ │ │ ─────────────────────────────→│ 打包成 Cascade 请求 │ │ │ │ ──────────────────────→ │ │ │ │ │ │ │ │ 模型思考 → 返回 │ │ │ tool_use(edit_file) │ │ │ ←────────────────────── │ │ │ ←── Anthropic SSE ────────────│ │ │ │ content_block=tool_use │ │ │ │ │ │ │ │ 本地执行 edit_file() │ │ │ │ (读写本地文件) │ │ │ │ │ │ │ │ 带 tool_result 再发一轮 │ │ │ │ ─────────────────────────────→│ ──────────────────────→ │ │ │ ... (循环) ... │ │ │ │ │ ← 最终答案 │ │ │ ``` **重点**:WindsurfAPI 只负责**传递** tool_use / tool_result,真正改文件的是客户端 CLI。 ## 快速开始 ### 一键部署 ``` git clone https://github.com/dwgx/WindsurfAPI.git cd WindsurfAPI bash setup.sh # 建目录 · 配权限 · 生成 .env node src/index.js ``` Dashboard:`http://你的IP:3003/dashboard` ### 一键更新 部署过之后要拉最新修复,一条命令搞定: ``` cd ~/WindsurfAPI && bash update.sh ``` `update.sh` 做了:`git pull` → 停 PM2 → kill 3003 端口残留 → 重启 → 健康检查。 如果你用的是我们的公网实例(`skiapi.dev` 之类),不用管,我们已经推过了。 ### 手动安装 ``` git clone https://github.com/dwgx/WindsurfAPI.git cd WindsurfAPI # Language Server 二进制 —— 一键下载 + chmod(从 Exafunction/codeium releases) mkdir -p /opt/windsurf/data/db bash install-ls.sh # 如果想用本地已下好的 binary: # bash install-ls.sh /path/to/language_server_linux_x64 # 或者指定 URL: # bash install-ls.sh --url https://example.com/language_server_linux_x64 cat > .env << 'EOF' PORT=3003 API_KEY= DEFAULT_MODEL=gpt-4o-mini MAX_TOKENS=8192 LOG_LEVEL=info LS_BINARY_PATH=/opt/windsurf/language_server_linux_x64 LS_PORT=42100 DASHBOARD_PASSWORD= EOF node src/index.js ``` ## 加账号 服务跑起来之后要先加 Windsurf 账号才能用,三种方式: **方式 1 Dashboard 一键登录(推荐)** 打开 `http://你的IP:3003/dashboard` → 登录取号 → 点 **Google 登录** 或 **GitHub 登录**(OAuth 弹窗)或直接填邮箱密码。所有方式都会自动入池。 **方式 2 Token(任何登录方式都能用)** 去 [windsurf.com/show-auth-token](https://windsurf.com/show-auth-token) 复制 Token: ``` curl -X POST http://localhost:3003/auth/login \ -H "Content-Type: application/json" \ -d '{"token": "你的token"}' ``` **方式 3 批量** ``` curl -X POST http://localhost:3003/auth/login \ -H "Content-Type: application/json" \ -d '{"accounts": [{"token": "t1"}, {"token": "t2"}]}' ``` ## 调用示例 ### OpenAI 格式(Python / JS / curl) ``` from openai import OpenAI client = OpenAI(base_url="http://你的IP:3003/v1", api_key="你设的API_KEY") r = client.chat.completions.create( model="claude-sonnet-4.6", messages=[{"role": "user", "content": "你好"}] ) print(r.choices[0].message.content) ``` ### Anthropic 格式(Claude Code 直接连) ``` export ANTHROPIC_BASE_URL=http://你的IP:3003 export ANTHROPIC_API_KEY=你设的API_KEY claude # 正常用 Claude Code 即可 ``` ``` # 裸 curl 测试 curl http://localhost:3003/v1/messages \ -H "Authorization: Bearer 你的key" \ -H "anthropic-version: 2023-06-01" \ -d '{"model":"claude-opus-4.6","max_tokens":100,"messages":[{"role":"user","content":"你好"}]}' ``` ### Cline / Cursor / Aider 在客户端配置里 **Custom OpenAI Compatible**: - Base URL: `http://你的IP:3003/v1` - API Key: 你设的 API_KEY - Model: 任选我们支持的模型 ## 环境变量 | 变量 | 默认值 | 干嘛的 | |---|---|---| | `PORT` | `3003` | 服务端口 | | `API_KEY` | 空 | 调 API 要带的密钥 留空就不验证 | | `DEFAULT_MODEL` | `claude-4.5-sonnet-thinking` | 不传 model 用哪个 | | `MAX_TOKENS` | `8192` | 默认最大回复 token 数 | | `LOG_LEVEL` | `info` | debug / info / warn / error | | `LS_BINARY_PATH` | `/opt/windsurf/language_server_linux_x64` | LS 二进制位置 | | `LS_PORT` | `42100` | LS gRPC 端口 | | `DASHBOARD_PASSWORD` | 空 | 后台密码 留空不设密码 | ## Dashboard 功能面板 打开 `http://你的IP:3003/dashboard`: | 面板 | 功能 | |---|---| | **总览** | 运行状态 · 账号池 · LS 健康 · 成功率 | | **登录取号** | Google / GitHub OAuth 一键登录 · 邮箱密码登录 · **测试代理** 按钮(实测出口 IP) | | **账号管理** | 加 / 删 / 停用 · 探测订阅等级 · 看余额 · 封禁模型黑名单 | | **模型控制** | 全局模型黑白名单 | | **代理配置** | 全局或单账号的 HTTP / SOCKS5 代理 | | **日志** | 实时 SSE 串流 · 按级别筛 · 每条 `turns=N chars=M` 诊断多轮 | | **统计分析** | 时间范围 6h / 24h / 72h · 账号维度 · p50 / p95 延迟 | | **实验性** | Cascade 对话复用 · **模型身份注入(每厂商可自定义 prompt)** | ## 支持的模型 总共 107 个,以下是主要分类,实际列表以 `/v1/models` 返回为准:
Claude(Anthropic) — 20 个 claude-3.5-sonnet / 3.7-sonnet / thinking · claude-4-sonnet / opus / thinking · claude-4.1-opus · claude-4.5-haiku / sonnet / opus · claude-sonnet-4.6(含 1m / thinking / thinking-1m) · claude-opus-4.6 / thinking
GPT(OpenAI) — 55+ 个 gpt-4o · gpt-4o-mini · gpt-4.1 / mini / nano · gpt-5 / 5-medium / 5-high / 5-mini · gpt-5.1 全系(含 codex / fast) · gpt-5.2 全系(none / low / medium / high / xhigh + fast + codex) · gpt-5.3-codex · gpt-5.4 / 5.4-mini · gpt-oss-120b · o3 / o3-mini / o3-high / o3-pro / o4-mini
Gemini(Google) — 9 个 gemini-2.5-pro / flash · gemini-3.0-pro / flash(含 minimal / low / high) · gemini-3.1-pro(low / high)
其他 deepseek-v3 / v3-2 / r1 · grok-3 / mini / mini-thinking / code-fast-1 · qwen-3 / 3-coder · kimi-k2 / k2.5 · glm-4.7 / 5 / 5.1 · minimax-m2.5 · swe-1.5 / 1.6(含 fast) · arena-fast / smart
## 架构要点 - **零 npm 依赖** 全走 `node:*` 内置 · protobuf 手搓(`src/proto.js`)· 下载即跑 - **账号池 + LS 池** 每个独立 proxy 一个 LS 实例 不混用 - **NO_TOOL 模式** `planner_mode=3` 关掉 Cascade 内置工具循环,避免 `/tmp/windsurf-workspace/` 路径泄漏 - **三层 sanitize** LS 内建工具结果过滤 · `
标签:AI 模型, Anthropic 兼容, API 网关, Claude, curl, CVE检测, DeepSeek, Gemini, GLM, GNU通用公共许可证, GPT-5, Grok, gRPC, HTTPS, JSON, Kimi, MITM代理, Node.js, OpenAI 兼容, Python工具, Qwen, SEO 关键词, SSE, Windsurf, 云服务, 代理服务, 兼容 API, 前端, 后端, 多模型支持, 服务端, 熵值分析, 纯 Node.js, 语言服务器, 零依赖