mirror of
https://github.com/router-for-me/Cli-Proxy-API-Management-Center.git
synced 2026-02-03 03:10:50 +08:00
191 lines
7.7 KiB
Markdown
191 lines
7.7 KiB
Markdown
# CLI Proxy API Management Center
|
|
|
|
A modern React-based WebUI for managing the CLI Proxy API, completely refactored with a modern tech stack for enhanced maintainability, type safety, and user experience.
|
|
|
|
[中文文档](README_CN.md)
|
|
|
|
**Main Project**: https://github.com/router-for-me/CLIProxyAPI
|
|
**Example URL**: https://remote.router-for.me/
|
|
**Minimum Required Version**: ≥ 6.3.0 (recommended ≥ 6.5.0)
|
|
|
|
Since version 6.0.19, the WebUI ships with the main program; access it via `/management.html` on the API port once the service is running.
|
|
|
|
## Features
|
|
|
|
### Core Capabilities
|
|
|
|
- **Login & Authentication**: Auto-detects current address (manual override supported), encrypted auto-login with secure localStorage, session persistence
|
|
- **Basic Settings**: Debug mode, proxy URL, request retries with custom config, quota fallback (auto-switch project/preview models), usage statistics toggle, request logging & file logging, WebSocket `/ws/*` authentication
|
|
- **API Keys Management**: Manage proxy auth keys with add/edit/delete operations
|
|
- **AI Providers**: Configure Gemini/Codex/Claude settings, OpenAI-compatible providers with custom base URLs/headers/proxy/model aliases, Vertex AI credential import from service-account JSON
|
|
- **Auth Files & OAuth**: Upload/download/search/paginate JSON credentials; type filters (Qwen/Gemini/GeminiCLI/AIStudio/Claude/Codex/Antigravity/iFlow/Vertex/Empty); bulk delete; OAuth/Device flows for multiple providers
|
|
- **Logs Viewer**: Real-time log viewer with auto-refresh, download and clear capabilities (appears when logging-to-file is enabled)
|
|
- **Usage Analytics**: Overview cards, hourly/daily toggles, interactive charts with multiple model lines, per-API statistics table
|
|
- **Config Management**: In-browser YAML editor for `/config.yaml` with syntax highlighting, reload/save functionality
|
|
- **System Information**: Connection status, config cache, server version/build date, UI version in footer
|
|
|
|
### User Experience
|
|
|
|
- **Responsive Design**: Full mobile support with collapsible sidebar
|
|
- **Theme System**: Light/dark mode with persistent preference
|
|
- **Internationalization**: English and Simplified Chinese (zh-CN) with seamless switching
|
|
- **Real-time Feedback**: Toast notifications for all operations
|
|
- **Security**: Masked secrets, encrypted local storage
|
|
|
|
## Tech Stack
|
|
|
|
- **Frontend Framework**: React 19 with TypeScript
|
|
- **Build Tool**: Vite 7 with single-file output ([vite-plugin-singlefile](https://github.com/nicknisi/vite-plugin-singlefile))
|
|
- **State Management**: [Zustand](https://github.com/pmndrs/zustand) for global stores
|
|
- **Routing**: React Router 7 with HashRouter
|
|
- **HTTP Client**: Axios with interceptors for auth & error handling
|
|
- **Internationalization**: i18next + react-i18next
|
|
- **Styling**: SCSS with CSS Modules, CSS Variables for theming
|
|
- **Charts**: Chart.js + react-chartjs-2
|
|
- **Code Editor**: @uiw/react-codemirror with YAML support
|
|
|
|
## Getting Started
|
|
|
|
### Prerequisites
|
|
|
|
- Node.js 18+ (LTS recommended)
|
|
- npm 9+
|
|
|
|
### Installation
|
|
|
|
```bash
|
|
# Clone the repository
|
|
git clone https://github.com/router-for-me/Cli-Proxy-API-Management-Center.git
|
|
cd Cli-Proxy-API-Management-Center
|
|
|
|
# Install dependencies
|
|
npm install
|
|
```
|
|
|
|
### Development
|
|
|
|
```bash
|
|
npm run dev # Start Vite dev server (default: http://localhost:5173)
|
|
```
|
|
|
|
### Build
|
|
|
|
```bash
|
|
npm run build # TypeScript check + Vite production build
|
|
```
|
|
|
|
The build outputs a single `dist/index.html` file with all assets inlined.
|
|
|
|
### Other Commands
|
|
|
|
```bash
|
|
npm run preview # Preview production build locally
|
|
npm run lint # ESLint with strict mode (--max-warnings 0)
|
|
npm run format # Prettier formatting for src/**/*.{ts,tsx,css,scss}
|
|
npm run type-check # TypeScript type checking only (tsc --noEmit)
|
|
```
|
|
|
|
## Usage
|
|
|
|
### Access Methods
|
|
|
|
1. **Integrated with CLI Proxy API (Recommended)**
|
|
After starting the CLI Proxy API service, visit `http://your-server:8317/management.html`
|
|
|
|
2. **Standalone (Built file)**
|
|
Open the built `dist/index.html` directly in a browser, or host it on any static file server
|
|
|
|
3. **Development Server**
|
|
Run `npm run dev` and open `http://localhost:5173`
|
|
|
|
### Initial Configuration
|
|
|
|
1. The login page auto-detects the current address; you can modify it if needed
|
|
2. Enter your management key
|
|
3. Click Connect to authenticate
|
|
4. Credentials are encrypted and saved locally for auto-login
|
|
|
|
> **Tip**: The Logs navigation item appears only after enabling "Logging to file" in Basic Settings.
|
|
|
|
## Project Structure
|
|
|
|
```
|
|
├── src/
|
|
│ ├── components/
|
|
│ │ ├── common/ # Shared components (NotificationContainer)
|
|
│ │ ├── layout/ # App shell (MainLayout with sidebar)
|
|
│ │ └── ui/ # Reusable UI primitives (Button, Input, Modal, etc.)
|
|
│ ├── hooks/ # Custom hooks (useApi, useDebounce, usePagination, etc.)
|
|
│ ├── i18n/
|
|
│ │ ├── locales/ # Translation files (zh-CN.json, en.json)
|
|
│ │ └── index.ts # i18next configuration
|
|
│ ├── pages/ # Route page components with co-located .module.scss
|
|
│ ├── router/ # ProtectedRoute wrapper
|
|
│ ├── services/
|
|
│ │ ├── api/ # API layer (client.ts singleton, feature modules)
|
|
│ │ └── storage/ # Secure storage utilities
|
|
│ ├── stores/ # Zustand stores (auth, config, theme, language, notification)
|
|
│ ├── styles/ # Global SCSS (variables, mixins, themes, components)
|
|
│ ├── types/ # TypeScript type definitions
|
|
│ ├── utils/ # Utility functions (constants, format, validation, etc.)
|
|
│ ├── App.tsx # Root component with routing
|
|
│ └── main.tsx # Entry point
|
|
├── dist/ # Build output (single-file bundle)
|
|
├── vite.config.ts # Vite configuration
|
|
├── tsconfig.json # TypeScript configuration
|
|
└── package.json
|
|
```
|
|
|
|
### Key Architecture Patterns
|
|
|
|
- **Path Alias**: Use `@/` to import from `src/` (configured in vite.config.ts and tsconfig.json)
|
|
- **API Client**: Singleton `apiClient` in `src/services/api/client.ts` with auth interceptors
|
|
- **State Management**: Zustand stores with localStorage persistence for auth/theme/language
|
|
- **Styling**: SCSS variables auto-injected; CSS Modules for component-scoped styles
|
|
- **Build Output**: Single-file bundle for easy distribution (all assets inlined)
|
|
|
|
## Troubleshooting
|
|
|
|
### Connection Issues
|
|
|
|
1. Confirm the CLI Proxy API service is running
|
|
2. Check if the API address is correct
|
|
3. Verify that the management key is valid
|
|
4. Ensure your firewall allows the connection
|
|
|
|
### Data Not Updating
|
|
|
|
1. Click the "Refresh All" button in the header
|
|
2. Check your network connection
|
|
3. Open browser DevTools console for error details
|
|
|
|
### Logs & Config Editor
|
|
|
|
- **Logs**: Requires server-side logging-to-file enabled; 404 indicates old server version or logging disabled
|
|
- **Config Editor**: Requires `/config.yaml` endpoint; ensure valid YAML syntax before saving
|
|
|
|
### Usage Statistics
|
|
|
|
- If charts are empty, enable "Usage statistics" in settings; data resets on server restart
|
|
|
|
## Contributing
|
|
|
|
We welcome Issues and Pull Requests! Please follow these guidelines:
|
|
|
|
1. Fork the repository
|
|
2. Create a feature branch (`git checkout -b feature/amazing-feature`)
|
|
3. Commit your changes with clear messages
|
|
4. Push to your branch
|
|
5. Open a Pull Request
|
|
|
|
### Development Guidelines
|
|
|
|
- Run `npm run lint` and `npm run type-check` before committing
|
|
- Follow existing code patterns and naming conventions
|
|
- Use TypeScript strict mode
|
|
- Write meaningful commit messages
|
|
|
|
## License
|
|
|
|
This project is licensed under the MIT License.
|