{"repo":"dwgx/WindsurfAPI","free":true,"listed":false,"github":"https://github.com/dwgx/WindsurfAPI","clone":"git clone https://github.com/dwgx/WindsurfAPI.git","description":"Turn Windsurf / Devin Desktop's 100+ AI models (Claude, GPT, Gemini, DeepSeek, Kimi, GLM, SWE) into OpenAI-, Anthropic- & Gemini-compatible APIs. Zero-dependency self-hosted reverse proxy for Claude Code, Cline & Cursor. 把 Windsurf/Devin 云端 100+ 模型变成三套兼容 API。","language":"JavaScript","stars":2940,"topics":["anthropic-compatible","api-gateway","claude","claude-code","cline","codeium","cursor","deepseek","devin","devin-api","gemini","gemini-compatible","gpt","llm","openai","openai-compatible","reverse-proxy","self-hosted","swe-1-5","windsurf"],"license":"MIT","category":"api_gateway","readme_excerpt":"<p align=\"center\">\n  <img src=\"logo.svg\" alt=\"WindsurfAPI\" width=\"92\" />\n</p>\n\n# WindsurfAPI · DevinAPI\n\n> 把 Windsurf / Devin 的 100+ AI 模型（Claude、GPT、Gemini、DeepSeek、Kimi、GLM、SWE…）变成 OpenAI / Anthropic / Gemini 三套标准 API。零 npm 运行时依赖。\n\n> **历史账本** · 把 1205 次提交、183 个版本、69 个 PR、177 个 issue 摊开给你看：时间线主账 + 贡献者分析 + Git 树三形态（竖/横/环）+ 自伤与返工全记录 —— [**打开可视化账本**](https://dwgx.github.io/WindsurfAPI/HISTORY-LEDGER-VIZ.html)（纯原生渲染，零依赖）\n\n\n<p align=\"center\">\n  <a href=\"https://github.com/dwgx/WindsurfAPI/stargazers\"><img src=\"https://img.shields.io/github/stars/dwgx/WindsurfAPI?style=for-the-badge&logo=github&color=f5c518\" alt=\"Stars\"></a>&nbsp;\n  <a href=\"https://github.com/dwgx/WindsurfAPI/blob/master/LICENSE\"><img src=\"https://img.shields.io/github/license/dwgx/WindsurfAPI?style=for-the-badge&color=2da44e\" alt=\"License\"></a>&nbsp;\n  <a href=\"https://github.com/dwgx/WindsurfAPI/releases/latest\"><img src=\"https://img.shields.io/github/v/release/dwgx/WindsurfAPI?style=for-the-badge&logo=github&color=1f6feb\" alt=\"Release\"></a>&nbsp;\n  <a href=\"https://github.com/dwgx/WindsurfAPI/actions/workflows/ci.yml\"><img src=\"https://img.shields.io/github/actions/workflow/status/dwgx/WindsurfAPI/ci.yml?style=for-the-badge&logo=githubactions&logoColor=white&label=CI&color=8957e5\" alt=\"CI\"></a>&nbsp;\n  <a href=\"https://dwgx.github.io/WindsurfAPI/\"><img src=\"https://img.shields.io/badge/Docs-GitHub_Pages-181717?style=for-the-badge&logo=github\" alt=\"Docs\"></a>&nbsp;\n  <a href=\"https://github.com/dwgx\"><img src=\"https://img.shields.io/github/followers/dwgx?label=Follow&style=for-the-badge&logo=github&color=181717\" alt=\"Follow\"></a>\n  &nbsp;·&nbsp;\n  <a href=\"README.en.md\">English</a>\n</p>\n\n# 声明\n\n> **没点 Star 和 Follow 的**：严禁商业使用、转售、代部署、挂后台对外提供服务、包装成中转服务出售。\n> **点了 Star 和 Follow 的**：随便用，我睁一只眼闭一只眼。\n>\n> 代码本体按 MIT License 开源（见 [LICENSE](LICENSE)），上面这段是作者个人态度。\n\n---\n\n把 [Windsurf](https://windsurf.com)（原 Codeium，现 Devin Desktop）的 AI 模型变成**三套标准 API 同时兼容**：\n\n- `POST /v1/chat/completions` — **OpenAI 兼容** 任何 OpenAI SDK 直接用\n- `POST /v1/responses` — **OpenAI Responses 兼容**（另有 `GET` / `DELETE /v1/responses/{id}` 读取与删除已存响应，需带身份 header，见下）\n- `POST /v1/messages` — **Anthropic 兼容** Claude Code / Cline / Cursor 直接连\n- `POST /v1beta/models/*` — **Gemini 兼容** 直接对接 Gemini SDK\n\n**100+ 模型**：Claude 4.5/4.6/Opus 4.7/5 · GPT-5/5.1/5.2/5.4/5.5/5.6-Luna 全系 · Gemini 2.5/3.0/3.1 · Grok · Qwen · Kimi K2.x · GLM 4.7/5/5.1/5.2 · MiniMax · SWE 1.5/1.6/1.7 · Arena 等。零 npm 依赖 纯 Node.js。\n\n<sub>关键词：Windsurf 逆向 · Devin 代理 · Claude Code 中转 · Cursor 镜像 · AI 中转 API · OpenAI 兼容接口 · 免费 Claude/GPT/Gemini · 大模型反代 · Codeium 逆向</sub>\n\n<p align=\"center\">\n  <a href=\"#它到底在干嘛\">原理</a> ·\n  <a href=\"#快速开始\">5 分钟跑起来</a> ·\n  <a href=\"#claude-code--cline--cursor-怎么用\">客户端接入</a> ·\n  <a href=\"docs/ENV-SWITCHES.md\">环境开关</a> ·\n  <a href=\"docs/\">全部文档</a> ·\n  <a href=\"README.en.md\">English</a>\n</p>\n\n## 它到底在干嘛\n\n```mermaid\nflowchart LR\n    subgraph clients[\"你的客户端\"]\n        A[\"OpenAI SDK<br/>curl / 前端\"]\n        B[\"Claude Code<br/>Cline · Cursor\"]\n        C[\"Gemini SDK\"]\n    end\n\n    subgraph gw[\"WindsurfAPI（本服务 · 端口 3003）\"]\n        direction TB\n        R[\"协议翻译层<br/>OpenAI ↔ Anthropic ↔ Gemini\"]\n        P[\"账号池<br/>轮询 · 限流隔离 · 故障转移 · 熔断\"]\n        N[\"身份中和<br/>剥掉上游 Windsurf 身份\"]\n        R --- P\n        R --- N\n    end\n\n    LS[\"Language Server<br/>（Windsurf 二进制）\"]\n    UP[\"Windsurf 云端<br/>server.self-serve.windsurf.com\"]\n    DC[\"Devin 云端<br/>（DEVIN_CONNECT 路径）\"]\n\n    A -- \"/v1/chat/completions\" --> R\n    B -- \"/v1/messages\" --> R\n    C -- \"/v1beta/models/*\" --> R\n    R -- \"gRPC\" --> LS\n    LS -- \"HTTPS\" --> UP\n    R -. \"HTTPS（可选直连）\" .-> DC\n\n    classDef gwStyle fill:#1f6feb22,stroke:#1f6feb,stroke-width:2px\n    classDef upStyle fill:#8957e522,stroke:#8957e5\n    class gw gwStyle\n    class UP,DC upStyle\n```\n\n<details>\n<summary>纯文本版（不支持 mermaid 的环境）</summary>\n\n```\n     ┌─────────────┐   /v1/chat/completions   ┌────────────┐\n     │ OpenAI SDK  │ ──────────────────────→  │            │\n     │ curl / 前端 │ ←──────────────────────  │            │\n     └─────────────┘   OpenAI JSON + SSE      │ WindsurfAPI│\n                                              │ Node.js    │      ┌──────────────┐       ┌─────────────────┐\n     ┌─────────────┐   /v1/messages           │ (本服务)   │ gRPC │ Language     │ HTTPS │ Windsurf 云端   │\n     │ Claude Code │ ──────────────────────→  │            │ ───→ │ Server (LS)  │ ────→ │ server.self-    │\n     │ Cline       │ ←──────────────────────  │            │ ←─── │ (Windsurf    │ ←─── │ serve.windsurf  │\n     │ Cursor      │   Anthropic SSE          │            │      │  binary)     │       │ .com            │\n     └─────────────┘                          └────────────┘      └──────────────┘       └─────────────────┘\n                                                    ↑\n                                                账号池轮询\n                                                速率限制隔离\n                                                故障转移\n```\n\n</details>\n\n**它做了什么**：\n1. 一个 HTTP 服务（端口 3003）同时暴露 OpenAI 和 Anthropic 两套 API\n2. 把请求翻译成 Windsurf 内部 gRPC 协议，通过本地 Language Server 发给 Windsurf 云\n3. 维护账号池，自动轮询 + 速率限制 + 故障转移\n4. 返回前把上游 Windsurf 身份剥掉，模型自称\"我是 Claude Opus 4.6 由 Anthropic 开发\"\n\n## Claude Code / Cline / Cursor 怎么用\n\n模型本身**不会**操作文件 — 文件操作是 IDE Agent 客户端（Claude Code / Cline 等）在本地执行的：\n\n```\n 你 \"帮我改 bug\"                Claude Code                    WindsurfAPI               Windsurf Cloud\n   │                                │                               │                          │\n   │────────────────────────────→  │                               │                          │\n   │                                │  POST /v1/messages            │                          │\n   │                                │  messages + tools + system    │                          │\n   │                                │ ─────────────────────────────→│ 打包成 Cascade 请求      │\n   │                                │                               │ ──────────────────────→  │\n   │                                │                               │                          │\n   │                                │                               │               模型思考 → 返回\n   │                                │                               │               tool_use(edit_file)\n   │                                │                               │ ←──────────────────────  │\n   │                                │ ←── Anthropic SSE ────────────│                          │\n   │                                │   content_block=tool_use      │                          │\n   │                                │                               │                          │\n   │                                │ 本地执行 edit_file()          │                          │\n   │                                │ (读写本地文件)                │                          │\n   │                                │                               │                          │\n   │                                │ 带 tool_result 再发一轮       │                          │\n   │                                │ ─────────────────────────────→│ ──────────────────────→  │\n   │                                │                                             ... (循环) ...\n   │                                │                               │                          │\n   │  ← 最终答案                    │                               │                          │\n```\n\n**重点**：WindsurfAPI 只负责**传递** tool_use / tool_result，真正改文件的是客户端 CLI。\n\n## 快速开始\n\n### 一键部署\n\n```bash\ngit clone https://github.com/dwgx/WindsurfAPI.git\ncd WindsurfAPI\nbash setup.sh          # 建目录 · 配权限 · 生成 .env\nnode src/index.js\n```\n\nDashboard：`http://你的IP:3003/dashboard`\n\n### Docker 部署\n\n```bash\ncp .env.example .env\n\n# 可选：提前把 language_server_linux_x64 放到 .docker-data/opt/windsurf/ 下\n# 不放也行，容器首次启动时会自动下载到 /opt/windsurf/\n\ndocker compose up -d --build\ndocker compose logs -f\n```\n\n默认挂载：\n\n- `./.docker-data/data`：持久化 `accounts.json`、`proxy.json`、`stats.json`、`runtime-config.json`、`model-access.json`、`logs/`\n- `./.docker-data/opt/windsurf`：Language Server 二进制与数据目录\n- `./.docker-data/tmp/windsurf-workspace`：临时工作区\n\n如果想改持久化目录，可在 `.env` 里设置 `DATA_DIR`。Docker 默认已设为 `/data`。\n\n### 一键更新\n\n部署过之后要拉最新修复，一条命令搞定：\n\n```bash\ncd ~/WindsurfAPI && bash update.sh\n```\n\n`update.sh` 做了：`git pull` → 通过 `install-ls.sh` 更新 LS binary → 停 PM2 → kill 3003 端口残留 → 重启 → 健康检查。\n\n如果你用的是我们的公网实例（`skiapi.dev` 之类），不用管，我们已经推过了。\n\n### 手动安装\n\n```bash\ngit clone https://github.com/dwgx/WindsurfAPI.git\ncd WindsurfAPI\n\n# Language Server 二进制 —— 自动检测 Linux/macOS，一键下载 + chmod\nbash install-ls.sh\n\n# 下载链：WindsurfAPI release → 公开 LS mirror\n#   https://github.com/dwgx/windsurf-ls-release/releases/latest/download\n# → Exafunction/codeium fallback。需要私有镜像或回滚时可设置：\n#   WINDSURFAPI_LS_RELEASE=https://github.com/<owner>/<repo>/releases/latest/download bash install-ls.sh\n\n# 默认安装路径：\n#   Linux x64:          /opt/windsurf/language_server_linux_x64\n#   Linux arm64:        /opt/windsurf/language_server_linux_arm\n#   macOS Apple Silicon: $HOME/.windsurf/language_server_macos_arm\n#   macOS Intel:        $HOME/.windsurf/language_server_macos_x64\n\n# 如果想用本地已下好的 binary：\n#   bash install-ls.sh /path/to/language_server_linux_x64\n# 或者指定 URL：\n#   bash install-ls.sh --url https://example.com/language_server_linux_x64\n\n# ⚠️ LS binary 版本偏旧 / 想换一个来源？\n# 默认下载链已接入 dwgx/windsurf-ls-release 公开 mirror。\n# 如果 mirror 暂未覆盖你的平台，仍可把 Windsurf 桌面端本体里的 LS binary 拷过来：\n#\n#   macOS:   \"$HOME/Library/Application Support/Windsurf/resources/app/extensions/windsurf/bin/language_server_macos_arm\"\n#   Linux:   \"$HOME/.windsurf/bin/language_server_linux_x64\"\n#            或  /opt/Windsurf/resources/app/extensions/windsurf/bin/language_server_linux_x64\n#   Windows: %APPDATA%\\Windsurf\\bin\\language_server_windows_x64.exe\n#\n#   # 从本地桌面端装：\n#   bash install-ls.sh /path/to/language_server_linux_x64\n#\n# 注意：换 LS binary 不会改变 /v1/models 的内容。\n# 模型目录是代理直连 HTTPS 拉的（GetCascadeModelConfigs / GetCliModelConfigs），\n# 请求里的 ideVersion 写死在 src/windsurf-api.js，不从 binary 读 —— 所以目录只取决于\n# 上游给这个账号授予了什么。看不到某个新模型，是上游","default_branch":"master","files":732,"tree":[".dockerignore",".env.example",".gitattributes",".githooks/post-commit",".githooks/pre-commit",".github/ISSUE_TEMPLATE/bug.yml",".github/ISSUE_TEMPLATE/config.yml",".github/ISSUE_TEMPLATE/feature.yml",".github/ISSUE_TEMPLATE/model-availability.yml",".github/PULL_REQUEST_TEMPLATE.md",".github/workflows/ci.yml",".github/workflows/release.yml",".github/workflows/star-history.yml",".gitignore",".gitmessage","CHANGELOG.md","CONTRIBUTING.md","Dockerfile","LICENSE","README.en.md","README.md","SECURITY.md","deploy/macos/README.md","deploy/macos/install-launchd.sh","deploy/macos/run-background.sh","deploy/macos/run.sh","deploy/macos/stop.sh","deploy/macos/uninstall-launchd.sh","deploy/windows/README.md","deploy/windows/gen-icon.ps1","deploy/windows/install-task.bat","deploy/windows/install-task.ps1","deploy/windows/restart.bat","deploy/windows/run-background.bat","deploy/windows/run.bat","deploy/windows/run.ps1","deploy/windows/run.vbs","deploy/windows/start.bat","deploy/windows/start.ps1","deploy/windows/status.ps1","deploy/windows/stop.bat","deploy/windows/stop.ps1","deploy/windows/tray.bat","deploy/windows/tray.ps1","deploy/windows/tray.vbs","deploy/windows/uninstall-task.bat","deploy/windows/update.bat","deploy/windows/windsurfapi.ico","docker-compose.yml","docs/AUDIT-LEDGER.md","docs/DEVIN-CONNECT-CUTOVER.md","docs/ENV-SWITCHES.md","docs/HANDOFF-2026-07-27.md","docs/HANDOFF-2026-08-03-B.md","docs/HANDOFF-2026-08-03.md","docs/HANDOFF-2026-08-04-B.md","docs/HANDOFF-2026-08-04-C.md","docs/HANDOFF-2026-08-04-D.md","docs/HANDOFF-2026-08-04-E.md","docs/HANDOFF-2026-08-04.md","docs/HANDOFF-2026-08-05.md","docs/HANDOFF-2026-08-06.md","docs/HISTORY-LEDGER-2026-04-early.md","docs/HISTORY-LEDGER-2026-04-late.md","docs/HISTORY-LEDGER-2026-05-bridge.md","docs/HISTORY-LEDGER-2026-06-connect.md","docs/HISTORY-LEDGER-2026-07-early.md","docs/HISTORY-LEDGER-2026-07-late.md","docs/HISTORY-LEDGER-2026-07-mid.md","docs/HISTORY-LEDGER-2026-08-docs.md","docs/HISTORY-LEDGER-2026-08-feature.md","docs/HISTORY-LEDGER-ISSUES.md","docs/HISTORY-LEDGER-PRS.md","docs/HISTORY-LEDGER-VIZ.html","docs/HISTORY-LEDGER.md","docs/README.md","docs/assets/star-history.svg","docs/dashboard-i18n.md","docs/dashboard/data/contributors.json","docs/index.html","docs/reasoning-dedup.md","docs/releases/README.md","docs/releases/RELEASE_NOTES_2.0.10.md","docs/releases/RELEASE_NOTES_2.0.100.md","docs/releases/RELEASE_NOTES_2.0.101.md","docs/releases/RELEASE_NOTES_2.0.102.md","docs/releases/RELEASE_NOTES_2.0.103.md","docs/releases/RELEASE_NOTES_2.0.104.md","docs/releases/RELEASE_NOTES_2.0.105.md","docs/releases/RELEASE_NOTES_2.0.106.md","docs/releases/RELEASE_NOTES_2.0.107.md","docs/releases/RELEASE_NOTES_2.0.108.md","docs/releases/RELEASE_NOTES_2.0.109.md","docs/releases/RELEASE_NOTES_2.0.11.md","docs/releases/RELEASE_NOTES_2.0.110.md","docs/releases/RELEASE_NOTES_2.0.111.md","docs/releases/RELEASE_NOTES_2.0.112.md","docs/releases/RELEASE_NOTES_2.0.113.md","docs/releases/RELEASE_NOTES_2.0.114.md","docs/releases/RELEASE_NOTES_2.0.115.md","docs/releases/RELEASE_NOTES_2.0.116.md","docs/releases/RELEASE_NOTES_2.0.117.md","docs/releases/RELEASE_NOTES_2.0.118.md","docs/releases/RELEASE_NOTES_2.0.119.md","docs/releases/RELEASE_NOTES_2.0.12.md","docs/releases/RELEASE_NOTES_2.0.120.md","docs/releases/RELEASE_NOTES_2.0.121.md","docs/releases/RELEASE_NOTES_2.0.122.md","docs/releases/RELEASE_NOTES_2.0.123.md","docs/releases/RELEASE_NOTES_2.0.124.md","docs/releases/RELEASE_NOTES_2.0.125.md","docs/releases/RELEASE_NOTES_2.0.126.md","docs/releases/RELEASE_NOTES_2.0.127.md","docs/releases/RELEASE_NOTES_2.0.128.md","docs/releases/RELEASE_NOTES_2.0.129.md","docs/releases/RELEASE_NOTES_2.0.13.md","docs/releases/RELEASE_NOTES_2.0.130.md","docs/releases/RELEASE_NOTES_2.0.131.md","docs/releases/RELEASE_NOTES_2.0.132.md","docs/releases/RELEASE_NOTES_2.0.133.md","docs/releases/RELEASE_NOTES_2.0.134.md","docs/releases/RELEASE_NOTES_2.0.135.md","docs/releases/RELEASE_NOTES_2.0.136.md","docs/releases/RELEASE_NOTES_2.0.137.md","docs/releases/RELEASE_NOTES_2.0.138.md","docs/releases/RELEASE_NOTES_2.0.139.md","docs/releases/RELEASE_NOTES_2.0.14.md","docs/releases/RELEASE_NOTES_2.0.140.md","docs/releases/RELEASE_NOTES_2.0.141.md","docs/releases/RELEASE_NOTES_2.0.142.md","docs/releases/RELEASE_NOTES_2.0.143.md","docs/releases/RELEASE_NOTES_2.0.144.md","docs/releases/RELEASE_NOTES_2.0.145.md","docs/releases/RELEASE_NOTES_2.0.146.md","docs/releases/RELEASE_NOTES_2.0.147.md","docs/releases/RELEASE_NOTES_2.0.15.md","docs/releases/RELEASE_NOTES_2.0.16.md","docs/releases/RELEASE_NOTES_2.0.17.md","docs/releases/RELEASE_NOTES_2.0.18.md","docs/releases/RELEASE_NOTES_2.0.19.md","docs/releases/RELEASE_NOTES_2.0.20.md","docs/releases/RELEASE_NOTES_2.0.21.md","docs/releases/RELEASE_NOTES_2.0.22.md","docs/releases/RELEASE_NOTES_2.0.23.md","docs/releases/RELEASE_NOTES_2.0.24.md","docs/releases/RELEASE_NOTES_2.0.25.md","docs/releases/RELEASE_NOTES_2.0.26.md","docs/releases/RELEASE_NOTES_2.0.27.md","docs/releases/RELEASE_NOTES_2.0.28.md","docs/releases/RELEASE_NOTES_2.0.29.md","docs/releases/RELEASE_NOTES_2.0.30.md","docs/releases/RELEASE_NOTES_2.0.31.md","docs/releases/RELEASE_NOTES_2.0.32.md","docs/releases/RELEASE_NOTES_2.0.33.md","docs/releases/RELEASE_NOTES_2.0.34.md","docs/releases/RELEASE_NOTES_2.0.35.md","docs/releases/RELEASE_NOTES_2.0.36.md","docs/releases/RELEASE_NOTES_2.0.37.md","docs/releases/RELEASE_NOTES_2.0.38.md","docs/releases/RELEASE_NOTES_2.0.39.md","docs/releases/RELEASE_NOTES_2.0.40.md","docs/releases/RELEASE_NOTES_2.0.41.md","docs/releases/RELEASE_NOTES_2.0.42.md","docs/releases/RELEASE_NOTES_2.0.43.md","docs/releases/RELEASE_NOTES_2.0.44.md","docs/releases/RELEASE_NOTES_2.0.45.md","docs/releases/RELEASE_NOTES_2.0.46.md","docs/releases/RELEASE_NOTES_2.0.47.md","docs/releases/RELEASE_NOTES_2.0.48.md","docs/releases/RELEASE_NOTES_2.0.49.md","docs/releases/RELEASE_NOTES_2.0.50.md","docs/releases/RELEASE_NOTES_2.0.51.md","docs/releases/RELEASE_NOTES_2.0.52.md","docs/releases/RELEASE_NOTES_2.0.53.md","docs/releases/RELEASE_NOTES_2.0.54.md","docs/releases/RELEASE_NOTES_2.0.55.md","docs/releases/RELEASE_NOTES_2.0.56.md","docs/releases/RELEASE_NOTES_2.0.57.md","docs/releases/RELEASE_NOTES_2.0.58.md","docs/releases/RELEASE_NOTES_2.0.59.md","docs/releases/RELEASE_NOTES_2.0.6.md","docs/releases/RELEASE_NOTES_2.0.60.md","docs/releases/RELEASE_NOTES_2.0.61.md","docs/releases/RELEASE_NOTES_2.0.62.md","docs/releases/RELEASE_NOTES_2.0.63.md","docs/releases/RELEASE_NOTES_2.0.65.md","docs/releases/RELEASE_NOTES_2.0.66.md","docs/releases/RELEASE_NOTES_2.0.67.md","docs/releases/RELEASE_NOTES_2.0.68.md","docs/releases/RELEASE_NOTES_2.0.69.md","docs/releases/RELEASE_NOTES_2.0.7.md","docs/releases/RELEASE_NOTES_2.0.70.md","docs/releases/RELEASE_NOTES_2.0.71.md","docs/releases/RELEASE_NOTES_2.0.72.md","docs/releases/RELEASE_NOTES_2.0.73.md","docs/releases/RELEASE_NOTES_2.0.74.md","docs/releases/RELEASE_NOTES_2.0.75.md","docs/releases/RELEASE_NOTES_2.0.76.md","docs/releases/RELEASE_NOTES_2.0.77.md","docs/releases/RELEASE_NOTES_2.0.78.md","docs/releases/RELEASE_NOTES_2.0.79.md","docs/releases/RELEASE_NOTES_2.0.8.md","docs/releases/RELEASE_NOTES_2.0.80.md","docs/releases/RELEASE_NOTES_2.0.81.md","docs/releases/RELEASE_NOTES_2.0.82.md","docs/releases/RELEASE_NOTES_2.0.83.md","docs/releases/RELEASE_NOTES_2.0.84.md","docs/releases/RELEASE_NOTES_2.0.85.md","docs/releases/RELEASE_NOTES_2.0.86.md","docs/releases/RELEASE_NOTES_2.0.87.md","docs/releases/RELEASE_NOTES_2.0.88.md","docs/releases/RELEASE_NOTES_2.0.89.md","docs/releases/RELEASE_NOTES_2.0.9.md","docs/releases/RELEASE_NOTES_2.0.90.md","docs/releases/RELEASE_NOTES_2.0.91.md","docs/releases/RELEASE_NOTES_2.0.92.md","docs/releases/RELEASE_NOTES_3.0.0.md","docs/releases/RELEASE_NOTES_3.0.1.md","docs/releases/RELEASE_NOTES_3.0.2.md","docs/releases/RELEASE_NOTES_3.1.0.md","docs/releases/RELEASE_NOTES_3.1.1.md","docs/releases/RELEASE_NOTES_3.1.2.md","docs/releases/RELEASE_NOTES_3.1.3.md","docs/releases/RELEASE_NOTES_3.1.4.md","docs/releases/RELEASE_NOTES_3.1.5.md","docs/releases/RELEASE_NOTES_3.2.0.md","docs/releases/RELEASE_NOTES_3.2.1.md","docs/releases/RELEASE_NOTES_3.2.2.md","docs/releases/RELEASE_NOTES_3.2.3.md","docs/releases/RELEASE_NOTES_3.2.4.md","docs/releases/RELEASE_NOTES_3.2.5.md","docs/releases/RELEASE_NOTES_3.8.0.md","docs/releases/RELEASE_NOTES_3.9.0.md","docs/releases/RELEASE_NOTES_3.9.1.md","docs/releases/RELEASE_NOTES_3.9.10.md","docs/releases/RELEASE_NOTES_3.9.11.md","docs/releases/RELEASE_NOTES_3.9.12.md","docs/releases/RELEASE_NOTES_3.9.13.md","docs/releases/RELEASE_NOTES_3.9.14.md","docs/releases/RELEASE_NOTES_3.9.15.md","docs/releases/RELEASE_NOTES_3.9.16.md","docs/releases/RELEASE_NOTES_3.9.17.md","docs/releases/RELEASE_NOTES_3.9.18.md","docs/releases/RELEASE_NOTES_3.9.19.md","docs/releases/RELEASE_NOTES_3.9.2.md","docs/releases/RELEASE_NOTES_3.9.20.md","docs/releases/RELEASE_NOTES_3.9.21.md","docs/releases/RELEASE_NOTES_3.9.3.md","docs/releases/RELEASE_NOTES_3.9.4.md","docs/releases/RELEASE_NOTES_3.9.5.md","docs/releases/RELEASE_NOTES_3.9.6.md","docs/releases/RELEASE_NOTES_3.9.7.md","docs/releases/RELEASE_NOTES_3.9.8.md","docs/releases/RELEASE_NOTES_3.9.9.md","docs/releases/RELEASE_NOTES_v3.9.22.md","docs/review.html","examples/proxy-user-inject.js","https-proxy.js","install-ls.sh","logo.svg","nginx.conf","package-lock.json","package.json","scripts/cascade-survival-probe.mjs","scripts/cli-agent-sim.js","scripts/cline-compat-verify.mjs","scripts/cline-smoke.sh","scripts/dashboard-cdp-check.mjs","scripts/devin-connect-calibrate.mjs","scripts/devin-connect-image-calibrate.mjs","scripts/devin-connect-login.mjs","scripts/devin-connect-paid-verify.mjs","scripts/devin-connect-smoke.mjs","scripts/exe-boot-smoke.mjs","scripts/gen-docs-models.js","scripts/gen-star-history.mjs","scripts/lsp-capacity-matrix.mjs","scripts/model-identity-test.js","scripts/mutate-verify-dirty.mjs","scripts/mutate-verify.mjs","scripts/native-bridge-smoke.mjs","scripts/run-test-shard.mjs","scripts/secret-scan.mjs","scripts/spec-baseline-audit.mjs","scripts/spec-static-check.mjs","scripts/special-agent-smoke.mjs","scripts/sync-docs-contributors.mjs","scripts/vps-exec.py","scripts/web-search-direct-probe.mjs","setup.sh","src/account/sticky-session.js","src/auth.js","src/backend-router.js","src/cache.js","src/caller-key.js","src/cascade-native-bridge.js","src/client.js","src/config.js","src/connect.js","src/conversation-pool.js","src/dashboard/account-text-parser.js","src/dashboard/api.js","src/dashboard/check-i18n.js","src/dashboard/check-inline-sync.js","src/dashboard/data/contributors.json","src/dashboard/diff.js","src/dashboard/docker-self-update.js","src/dashboard/email-otp-login.js","src/dashboard/i18n/en.json","src/dashboard/i18n/zh-CN.json","src/dashboard/import-parser.js","src/dashboard/index-sketch.html","src/dashboard/index.html","src/dashboard/local-windsurf.js","src/dashboard/logger.js","src/dashboard/model-access.js","src/dashboard/oauth-sessions.js","src/dashboard/pool-events.js","src/dashboard/proxy-config.js","src/dashboard/stats.js","src/dashboard/windsurf-login.js","src/data/devin-catalog-snapshot.json","src/devin-acp.js","src/devin-backend.js","src/devin-connect-catalog.js","src/devin-connect-credentials.js","src/devin-connect-metrics.js","src/devin-connect-models.js","src/devin-connect-openai.js","src/devin-connect.js","src/fs-atomic.js","src/grpc.js","src/handlers/cc-compat.js","src/handlers/chat.js","src/handlers/cline-compat.js","src/handlers/gemini.js","src/handlers/identity-neutralize.js","src/handlers/intent-extractor.js","src/handlers/messages.js","src/handlers/models.js","src/handlers/responses.js","src/handlers/tool-emulation.js","src/image.js","src/index.js","src/langserver.js","src/leak-trace.js","src/log-safety.js","src/models.js","src/native-bridge-stats.js","src/net-safety.js","src/pdf.js","src/proto-trace.js","src/proto.js","src/reasoning-dedup.js","src/response-classifier.js","src/response-store.js","src/restart.js","src/runtime-config.js","src/sanitize.js","src/server-registry.js","src/server.js","src/session-continuity.js","src/socks.js","src/special-agent.js","src/sse-registry.js","src/stop-sequences.js","src/system-fingerprint.js","src/trace.js","src/vendor/README.md","src/vendor/jpeg-js/LICENSE","src/vendor/jpeg-js/decoder.js","src/vendor/jpeg-js/encoder.js","src/vendor/png.js","src/version.js","src/windsurf-api.js","src/windsurf.js","test/_research/responses-cache-hit-seq-A.json","test/_research/responses-cache-hit-seq-B.json","test/_research/responses-cache-hit-seq.test.js","test/_research/swe-1-7-kimi-tool-call-wire.json","test/account-add-proxy-ordering.test.js","test/account-entitlement.test.js","test/account-text-parser.test.js","test/account-tier-filter.test.js","test/addaccount-by-email.test.js","test/anthropic-input-validation.test.js","test/anthropic-version-header.test.js","test/audit-fixes.test.js","test/auth-admin-gate.test.js","test/auth-error-recovery-persist.test.js","test/auth-migration.test.js","test/auth-pool-selfheal.test.js","test/auth-safe-equal-hash.test.js","test/auth-total-spend.test.js","test/auth-warning.test.js","test/backend-router.test.js","test/backend-switch-hotswap.test.js","test/ban-detection.test.js","test/bash-prefix-repair-boundary.test.js","test/billing-userstatus-decode.test.js"],"storefront":"/r/dwgx","claimed":false,"request_supported":{"post":"https://gitbuyer.com/r/dwgx/WindsurfAPI/request-supported","requests":0},"note":"indexed from public GitHub; nothing is for sale on this page. Clone it from GitHub. Paid listings live at /search."}