FROM node:24-slim RUN apt-get update && apt-get install -y --no-install-recommends \ git \ curl \ ca-certificates \ && rm -rf /var/lib/apt/lists/* \ && git config --global user.name "arena" \ && git config --global user.email "arena@localhost" \ && git config --global init.defaultBranch main # Install Node.js-based agent CLIs globally in a single layer RUN npm install -g \ @anthropic-ai/claude-code \ @google/gemini-cli \ @vibe-kit/grok-cli \ @openai/codex \ @qwen-code/qwen-code \ @moonshot-ai/kimi-code \ mmx-cli # Install Cursor CLI (installs agent symlink to ~/.local/bin) RUN curl https://cursor.com/install -fsS | bash ENV PATH="/root/.local/bin:${PATH}" # Configure Qwen Code to use OPENROUTER_API_KEY (set as HF Space secret at runtime) RUN mkdir -p /root/.qwen && echo '{"security":{"auth":{"selectedType":"openai"}},"model":{"name":"qwen/qwen3-coder-plus"},"modelProviders":{"openai":[{"id":"qwen/qwen3-coder-plus","name":"Qwen3-Coder-Plus via OpenRouter","envKey":"OPENROUTER_API_KEY","baseUrl":"https://openrouter.ai/api/v1"}]}}' > /root/.qwen/settings.json WORKDIR /app COPY package*.json ./ RUN npm ci --omit=dev COPY . . EXPOSE 7860 CMD ["sh", "-c", "\ mkdir -p /root/.kimi-code && \ printf 'default_model = \"kimi-code/kimi-for-coding\"\\ndefault_permission_mode = \"auto\"\\n\\n[providers.kimi-code]\\ntype = \"openai\"\\nbase_url = \"https://openrouter.ai/api/v1\"\\napi_key = \"%s\"\\n\\n[models.\"kimi-code/kimi-for-coding\"]\\nprovider = \"kimi-code\"\\nmodel = \"moonshotai/kimi-k2\"\\nmax_context_size = 262144\\n' \"$OPENROUTER_API_KEY\" > /root/.kimi-code/config.toml && \ echo 'Kimi Code config written.' && \ exec node --no-deprecation app.js"]