# Contributing Guide Language: [δΈ­ζ–‡](CONTRIBUTING.md) | [English](CONTRIBUTING.en.md) Thanks for your interest in contributing to DS2API! ## Development Setup ### Prerequisites - Go 1.24+ - Node.js 20+ (for WebUI development) - npm (bundled with Node.js) ### Backend Development ```bash # 1. Clone git clone https://github.com/CJackHwang/ds2api.git cd ds2api # 2. Configure cp config.example.json config.json # Edit config.json with test accounts # 3. Run backend go run ./cmd/ds2api # Default: http://localhost:5001 ``` ### Frontend Development (WebUI) ```bash # 1. Navigate to WebUI directory cd webui # 2. Install dependencies npm install # 3. Start dev server (hot reload) npm run dev # Default: http://localhost:5173, auto-proxies API to backend ``` WebUI tech stack: - React + Vite - Tailwind CSS - Bilingual language packs: `webui/src/locales/zh.json` / `en.json` ### Docker Development ```bash docker-compose -f docker-compose.dev.yml up ``` ## Code Standards | Language | Standards | | --- | --- | | **Go** | Run `gofmt` and ensure `go test ./...` passes before committing | | **JavaScript/React** | Follow existing project style (functional components) | | **Commit messages** | Use semantic prefixes: `feat:`, `fix:`, `docs:`, `refactor:`, `style:`, `perf:`, `chore:` | ## Submitting a PR 1. Fork the repo 2. Create a branch (e.g. `feature/xxx` or `fix/xxx`) 3. Commit changes 4. Push your branch 5. Open a Pull Request > πŸ’‘ If you modify files under `webui/`, no manual build is needed β€” CI handles it automatically. ## Build WebUI Manually build WebUI to `static/admin/`: ```bash ./scripts/build-webui.sh ``` ## Running Tests ```bash # Go unit tests go test ./... # End-to-end live tests (real accounts) ./scripts/testsuite/run-live.sh ``` ## Project Structure ```text ds2api/ β”œβ”€β”€ cmd/ β”‚ β”œβ”€β”€ ds2api/ # Local/container entrypoint β”‚ └── ds2api-tests/ # End-to-end testsuite entrypoint β”œβ”€β”€ api/ β”‚ β”œβ”€β”€ index.go # Vercel Serverless Go entry β”‚ β”œβ”€β”€ chat-stream.js # Vercel Node.js stream relay β”‚ └── helpers/ # Node.js helper modules β”œβ”€β”€ internal/ β”‚ β”œβ”€β”€ account/ # Account pool and concurrency queue β”‚ β”œβ”€β”€ adapter/ β”‚ β”‚ β”œβ”€β”€ openai/ # OpenAI adapter β”‚ β”‚ └── claude/ # Claude adapter β”‚ β”œβ”€β”€ admin/ # Admin API handlers β”‚ β”œβ”€β”€ auth/ # Auth and JWT β”‚ β”œβ”€β”€ config/ # Config loading and hot-reload β”‚ β”œβ”€β”€ deepseek/ # DeepSeek client, PoW WASM β”‚ β”œβ”€β”€ server/ # HTTP routing (chi router) β”‚ β”œβ”€β”€ sse/ # SSE parsing utilities β”‚ β”œβ”€β”€ testsuite/ # Testsuite core logic β”‚ β”œβ”€β”€ util/ # Common utilities β”‚ └── webui/ # WebUI static hosting β”œβ”€β”€ webui/ # React WebUI source β”‚ └── src/ β”‚ β”œβ”€β”€ components/ # Components β”‚ └── locales/ # Language packs β”œβ”€β”€ scripts/ # Build and test scripts β”œβ”€β”€ static/admin/ # WebUI build output (not committed) β”œβ”€β”€ Dockerfile # Multi-stage build β”œβ”€β”€ docker-compose.yml # Production β”œβ”€β”€ docker-compose.dev.yml # Development └── vercel.json # Vercel config ``` ## Reporting Issues Please use [GitHub Issues](https://github.com/CJackHwang/ds2api/issues) and include: - Steps to reproduce - Relevant log output - Environment info (OS, Go version, deployment method)