·
English
本项目目前仅供获准范围内使用。 未经作者明确书面授权,禁止将本项目用于商业用途、付费代部署、挂后台对外提供服务、包装成中转服务出售,或以任何形式转售。 对未经授权的商业使用与传播行为,作者保留公开说明、取证和追责的权利。
把 Windsurf(原 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 │
└─────────────┘ └────────────┘ └──────────────┘ └─────────────────┘
↑
账号池轮询
速率限制隔离
故障转移
它做了什么:
- 一个 HTTP 服务(端口 3003)同时暴露 OpenAI 和 Anthropic 两套 API
- 把请求翻译成 Windsurf 内部 gRPC 协议,通过本地 Language Server 发给 Windsurf 云
- 维护账号池,自动轮询 + 速率限制 + 故障转移
- 返回前把上游 Windsurf 身份剥掉,模型自称"我是 Claude Opus 4.6 由 Anthropic 开发"
模型本身不会操作文件 — 文件操作是 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.jsDashboard:http://你的IP:3003/dashboard
部署过之后要拉最新修复,一条命令搞定:
cd ~/WindsurfAPI && bash update.shupdate.sh 做了:git pull → 停 PM2 → kill 3003 端口残留 → 重启 → 健康检查。
如果你用的是我们的公网实例(skiapi.dev 之类),不用管,我们已经推过了。
git clone https://github.com/dwgx/WindsurfAPI.git
cd WindsurfAPI
# Language Server 二进制放到这里
mkdir -p /opt/windsurf/data/db
cp language_server_linux_x64 /opt/windsurf/
chmod +x /opt/windsurf/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 复制 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"}]}'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)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":"你好"}]}'在客户端配置里 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 |
空 | 后台密码 留空不设密码 |
打开 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
免费账号只能用
gpt-4o-mini和gemini-2.5-flash,其他需要 Windsurf Pro。
- 零 npm 依赖 全走
node:*内置 · protobuf 手搓(src/proto.js)· 下载即跑 - 账号池 + LS 池 每个独立 proxy 一个 LS 实例 不混用
- NO_TOOL 模式
planner_mode=3关掉 Cascade 内置工具循环,避免/tmp/windsurf-workspace/路径泄漏 - 三层 sanitize LS 内建工具结果过滤 ·
<tool_call>文本解析 · 输出路径清洗 - 真实 token 计量 从
CortexStepMetadata.model_usage抓 Cascade 真实inputTokens/outputTokens/cacheRead/cacheWrite,prompt_tokens含 cacheWrite
npm install -g pm2
pm2 start src/index.js --name windsurf-api
pm2 save && pm2 startup不要用 pm2 restart(会出僵尸进程),用一键更新脚本 bash update.sh。
# Ubuntu
ufw allow 3003/tcp
# CentOS
firewall-cmd --add-port=3003/tcp --permanent && firewall-cmd --reload云服务器记得去安全组开 3003。
Q: 登录报"邮箱或密码错误" A: 你是用 Google/GitHub 登录的 Windsurf 吧 那种账号没有密码。Dashboard 的登录取号面板现在直接支持 Google / GitHub OAuth 一键登录。
Q: 模型说"我无法操作文件系统" A: 这是 chat API,不是 IDE agent。要让模型真的改文件,用 Claude Code / Cline / Cursor / Aider 之类的客户端 CLI,把它们的 API base URL 指向本服务就行。模型出 tool_use,客户端本地执行,再把 tool_result 发回来。上面的图有详细流程。
Q: 上下文丢失 / 模型忘了前面说的
A: 多账号轮询不会丢上下文 — 每次请求都重新打包完整 history 发给 Cascade。真正的原因通常是中转层(new-api 等)没把完整 messages[] 透传过来。在 Dashboard 日志面板看 turns=N:如果多轮对话但 turns=1,就是中转层在你之前就把历史丢了。
Q: 长 prompt 超时 A: 已修。cold stall 检测按输入长度自适应,长输入最多给 90s。
Q: Claude Code 能用吗
A: 能。export ANTHROPIC_BASE_URL=http://你的API + export ANTHROPIC_API_KEY=你的key。/v1/messages 支持 system + tools + tool_use + tool_result + stream + multi-turn 全套,已实测通过。
Q: 免费账号能用什么模型
A: 只有 gpt-4o-mini 和 gemini-2.5-flash,其他全要 Pro。
MIT