docs: redesign do README (padrão TwitterBR-MOD) — dados atualizados
This commit is contained in:
1 parent
42466c274b
commit
9d1ce44ea3
1 file changed
+178
-319
@@ -1,366 +1,225 @@
|
|||||||
<p align="center">
|
<div align="center">
|
||||||
<img src="docs/assets/logo.png" alt="Gemini Nexus" width="128" height="128" />
|
|
||||||
</p>
|
|
||||||
|
|
||||||
<h1 align="center">Gemini Nexus</h1>
|
<img src="docs/assets/logo.png" width="110" alt="Gemini Nexus logo">
|
||||||
|
|
||||||
<p align="center">
|
# Gemini Nexus
|
||||||
<strong>🚀 Professional multi-account AI gateway for Google Gemini & Claude</strong>
|
|
||||||
</p>
|
|
||||||
|
|
||||||
<p align="center">
|
**A desktop gateway that pools your Google Gemini and Claude accounts behind one
|
||||||
English | <a href="README.pt-BR.md">Português</a> | <a href="README.zh-CN.md">中文</a> | <a href="README.es.md">Español</a>
|
local OpenAI- and Anthropic-compatible API — with automatic account switching,
|
||||||
</p>
|
usage analytics and full traffic inspection.**
|
||||||
|
|
||||||
<p align="center">
|

|
||||||
<a href="https://github.com/evandrodevbr/GeminiNexus/releases">
|

|
||||||
<img src="https://img.shields.io/github/v/release/evandrodevbr/GeminiNexus?style=flat-square" alt="Release" />
|

|
||||||
</a>
|
|
||||||
<a href="https://github.com/evandrodevbr/GeminiNexus/releases">
|
English | [Português](README.pt-BR.md) | [中文](README.zh-CN.md) | [Español](README.es.md)
|
||||||
<img src="https://img.shields.io/github/downloads/evandrodevbr/GeminiNexus/total?style=flat-square&color=blue" alt="Downloads" />
|
|
||||||
</a>
|
[Install](#installation) · [Features](#features) · [How it works](#how-it-works) · [Build from source](#build-from-source) · [CI/CD](#cicd)
|
||||||
<a href="https://github.com/evandrodevbr/GeminiNexus/blob/main/LICENSE">
|
|
||||||
<img src="https://img.shields.io/github/license/evandrodevbr/GeminiNexus?style=flat-square" alt="License" />
|
</div>
|
||||||
</a>
|
|
||||||
<img src="https://img.shields.io/badge/platform-Windows%20%7C%20macOS%20%7C%20Linux-informational?style=flat-square" alt="Platform" />
|
> [!NOTE]
|
||||||
<img src="https://img.shields.io/badge/electron-latest-47848F?style=flat-square&logo=electron&logoColor=white" alt="Electron" />
|
> **Project status:** actively released — current version is **0.15.3** (2026-05-02),
|
||||||
</p>
|
> versioned automatically by semantic-release from Conventional Commits (see
|
||||||
|
> [`CHANGELOG.md`](CHANGELOG.md)). The app started as a fork of
|
||||||
|
> [AntigravityManager](https://github.com/Draculabo/AntigravityManager); most of the
|
||||||
|
> code has since been rewritten (see [Licensing and credits](#licensing-and-credits)).
|
||||||
|
|
||||||
> [!IMPORTANT]
|
> [!IMPORTANT]
|
||||||
> **Windows Users:** If you see a **"Windows protected your PC"** (SmartScreen) warning during installation, click **"More info"** and then **"Run anyway"**. This is an expected security prompt for new, unsigned applications.
|
> **Mixed licensing.** Code inherited from AntigravityManager is under
|
||||||
|
> **CC BY-NC-SA 4.0** ([`LICENSE`](LICENSE) — non-commercial, share-alike); all new
|
||||||
|
> code is under **MIT** ([`LICENSE-MIT`](LICENSE-MIT)). The project is being migrated
|
||||||
|
> to MIT as the remaining original code is rewritten. Check both files before any
|
||||||
|
> commercial use.
|
||||||
|
|
||||||
---
|
## Why Gemini Nexus
|
||||||
|
|
||||||
## 📖 Table of Contents
|
Working with AI-powered IDEs and coding tools on a single account means quota that
|
||||||
|
runs out, manual account switching, no idea how many tokens you spent, and no view
|
||||||
|
of what the proxy actually sends. Gemini Nexus puts all of that in one desktop app:
|
||||||
|
|
||||||
- [✨ Why Gemini Nexus?](#-why-gemini-nexus)
|
- **Account pool** — add as many Google accounts as you need via OAuth.
|
||||||
- [🎯 Features](#-features)
|
- **Smart auto-switching** — rotates to the next available account when quota is low or rate-limited.
|
||||||
- [📸 Screenshots](#-screenshots)
|
- **Drop-in local proxy** — speaks the OpenAI and Anthropic protocols, so Cursor, Windsurf, OpenCode and any compatible tool can point at it.
|
||||||
- [⚡ Installation & Quick Start](#-installation--quick-start)
|
- **Observability** — live traffic monitor, request replay and per-model capability inspector.
|
||||||
- [🛠️ Tech Stack](#️-tech-stack)
|
- **Usage analytics** — token charts, trends and cost tracking.
|
||||||
- [💻 Development](#-development)
|
|
||||||
- [❓ FAQ](#-faq)
|
|
||||||
- [🤝 Contributing](#-contributing)
|
|
||||||
- [📄 License](#-license)
|
|
||||||
|
|
||||||
---
|
## Features
|
||||||
|
|
||||||
## ✨ Why Gemini Nexus?
|
| Area | What you get |
|
||||||
|
|---|---|
|
||||||
|
| **Cloud account pool** | OAuth sign-in; avatar, email, status (Active / Rate Limited / Expired) and last-used time; per-account proxy URL; device identity profiles with history |
|
||||||
|
| **Local API gateway** | `POST /v1/chat/completions` (OpenAI), `POST /v1/messages` (Anthropic), `GET /v1/models` and `GET /v1/models/capabilities`; SSE streaming; model mapping (e.g. `claude-sonnet-4-6` → `gemini-3-flash`); configurable port, timeout (default 120 s) and API key; per-model visibility |
|
||||||
|
| **Auto-switching** | Switches when an account's quota drops below 5 % or it is rate-limited; background quota monitor every 5 minutes; scheduling modes `cache-first`, `balance` and `performance-first`; circuit breaker with 60 s → 5 min → 30 min → 2 h backoff |
|
||||||
|
| **Usage analytics** | Token consumption charts (daily/hourly, prompt vs. completion), trend indicators, model ranking, cost tracking with custom model pricing |
|
||||||
|
| **Proxy observability** | Traffic monitor (latency, status, model), request replay, model capabilities (vision, thinking, streaming, JSON mode), cURL and Python snippets, IDE Quick Setup (OpenCode, Cursor, VS Code, Claude Code) |
|
||||||
|
| **Security** | AES-256-GCM for sensitive data, OS credential storage (Keytar + Electron SafeStorage), automatic migration of legacy plaintext data |
|
||||||
|
| **Desktop experience** | System tray, dark / light / system theme, collapsible sidebar, status bar with live proxy indicators, UI in English, 简体中文, Русский and Tiếng Việt |
|
||||||
|
|
||||||
When using AI-powered IDEs and coding tools, have you ever run into these problems?
|
The account-pool and auto-switching design is written up in
|
||||||
|
[`docs/cloud_features.md`](docs/cloud_features.md).
|
||||||
|
|
||||||
- 😫 **Quota limits:** Single account quotas run out quickly, requiring frequent manual switching.
|
<details>
|
||||||
- 🔄 **Account management:** Managing multiple Google/Claude accounts is cumbersome.
|
<summary>Screenshots</summary>
|
||||||
- 📊 **Blind usage:** You don't know how much quota or how many tokens you've actually consumed.
|
|
||||||
- 🔌 **Integration issues:** You need a reliable local API proxy that speaks OpenAI/Anthropic protocols natively.
|
|
||||||
- 🔍 **Lack of transparency:** You can't see what's actually being sent or received by the proxy under the hood.
|
|
||||||
|
|
||||||
**Gemini Nexus** solves all of these issues. It's a professional Electron desktop application that acts as an intelligent gateway between your development tools and Google Gemini / Claude AI.
|
<p align="center"><img src="docs/assets/main.png" alt="Main dashboard" width="80%"></p>
|
||||||
|
<p align="center"><img src="docs/assets/2usage.png" alt="Usage analytics" width="80%"></p>
|
||||||
|
<p align="center"><img src="docs/assets/3proxy.png" alt="Proxy monitor" width="80%"></p>
|
||||||
|
<p align="center"><img src="docs/assets/4routing.png" alt="Routing config" width="80%"></p>
|
||||||
|
<p align="center"><img src="docs/assets/5docs.png" alt="Documentation" width="80%"></p>
|
||||||
|
<p align="center"><img src="docs/assets/6connections.png" alt="Active connections" width="80%"></p>
|
||||||
|
<p align="center"><img src="docs/assets/7config.png" alt="Settings" width="80%"></p>
|
||||||
|
|
||||||
### Key Value Proposition
|
</details>
|
||||||
|
|
||||||
- ✅ **Unlimited Account Pool** — Add any number of Google Gemini & Claude accounts.
|
## Installation
|
||||||
- ✅ **Smart Auto-Switching** — Automatically rotates to the next available account when quota is low or rate-limited.
|
|
||||||
- ✅ **Real-time Usage Analytics** — SaaS-grade dashboard with area charts, trend indicators, and model distribution.
|
|
||||||
- ✅ **Full Proxy Observability** — Live traffic monitor, request replay, and model capabilities inspector.
|
|
||||||
- ✅ **OpenAI & Anthropic Compatible** — Drop-in replacement proxy for Cursor, Windsurf, OpenCode, and any OpenAI-compatible tool.
|
|
||||||
- ✅ **Secure by Default** — AES-256-GCM encryption with OS-native credential management.
|
|
||||||
|
|
||||||
---
|
1. Download the build for your platform from [**Releases**](https://git.evandro.dev.br/evandro/gemini-nexus/releases).
|
||||||
|
The CI build matrix covers Windows (x64, arm64), macOS (x64, arm64) and Linux
|
||||||
|
(x64, arm64); the configured makers produce MSI (Windows x64, only when WiX is
|
||||||
|
available) and ZIP (Windows/macOS), DMG (macOS), AppImage, `.deb` and `.rpm` (Linux).
|
||||||
|
2. Open the app and add at least one account.
|
||||||
|
3. Enable the proxy and point your IDE at it:
|
||||||
|
|
||||||
## 🎯 Features
|
```text
|
||||||
|
API Base URL: http://localhost:8045/v1 (default port; configurable on the Proxy page)
|
||||||
<table>
|
API Key: (copy it from the Proxy page in the app)
|
||||||
<tr>
|
Model: gemini-3-flash (or any mapped model)
|
||||||
<td width="50%">
|
|
||||||
<h3>☁️ Cloud Account Pool</h3>
|
|
||||||
<ul>
|
|
||||||
<li>Add unlimited Google Gemini / Claude accounts via OAuth</li>
|
|
||||||
<li>Display avatar, email, status, and last used time</li>
|
|
||||||
<li>Real-time status monitoring (Active, Rate Limited, Expired)</li>
|
|
||||||
<li>Per-account proxy URL configuration</li>
|
|
||||||
<li>Device identity profile management with history</li>
|
|
||||||
</ul>
|
|
||||||
</td>
|
|
||||||
<td width="50%">
|
|
||||||
<h3>📊 Usage Analytics Dashboard</h3>
|
|
||||||
<ul>
|
|
||||||
<li>Real-time token consumption with 15s auto-refresh</li>
|
|
||||||
<li>Area charts for daily/hourly prompt & completion tokens</li>
|
|
||||||
<li>Trend indicators (% change vs previous period)</li>
|
|
||||||
<li>Inline sparklines on stat cards</li>
|
|
||||||
<li>Model distribution ranking with horizontal bar charts</li>
|
|
||||||
<li>Prompt/Completion ratio visualization</li>
|
|
||||||
</ul>
|
|
||||||
</td>
|
|
||||||
</tr>
|
|
||||||
<tr>
|
|
||||||
<td width="50%">
|
|
||||||
<h3>🔌 Local API Proxy (Gateway)</h3>
|
|
||||||
<ul>
|
|
||||||
<li>OpenAI <code>/v1/chat/completions</code> compatible endpoint</li>
|
|
||||||
<li>Anthropic <code>/v1/messages</code> compatible endpoint</li>
|
|
||||||
<li>Full SSE streaming support (tested with Cursor, Windsurf, OpenCode)</li>
|
|
||||||
<li>Model mapping (e.g. <code>claude-sonnet-4-6</code> → <code>gemini-3-flash</code>)</li>
|
|
||||||
<li>Configurable port, timeout, and API key</li>
|
|
||||||
<li>Model visibility control (show/hide specific models)</li>
|
|
||||||
</ul>
|
|
||||||
</td>
|
|
||||||
<td width="50%">
|
|
||||||
<h3>🔄 Intelligent Auto-Switching</h3>
|
|
||||||
<ul>
|
|
||||||
<li>Unlimited pool mode with smart backup selection</li>
|
|
||||||
<li>Auto-switch when quota < 5% or rate-limited</li>
|
|
||||||
<li>Background monitoring every 5 minutes</li>
|
|
||||||
<li>Graceful fallback with status reason tracking</li>
|
|
||||||
</ul>
|
|
||||||
</td>
|
|
||||||
</tr>
|
|
||||||
<tr>
|
|
||||||
<td width="50%">
|
|
||||||
<h3>🔍 Proxy Observability (Advanced)</h3>
|
|
||||||
<ul>
|
|
||||||
<li><strong>Traffic Monitor</strong> — Live request/response log with latency, status, and model info</li>
|
|
||||||
<li><strong>Request Replay</strong> — Replay any recorded request for debugging</li>
|
|
||||||
<li><strong>Model Capabilities</strong> — Inspect vision, thinking, streaming, JSON mode support per model</li>
|
|
||||||
<li><strong>Developer Tools</strong> — cURL & Python code generation, one-click copy</li>
|
|
||||||
</ul>
|
|
||||||
</td>
|
|
||||||
<td width="50%">
|
|
||||||
<h3>🔐 Security & Encryption</h3>
|
|
||||||
<ul>
|
|
||||||
<li>AES-256-GCM encryption for all sensitive data</li>
|
|
||||||
<li>OS native credential manager integration (Keytar + SafeStorage)</li>
|
|
||||||
<li>Auto migration of legacy plaintext data</li>
|
|
||||||
<li>Encrypted token & quota storage per account</li>
|
|
||||||
</ul>
|
|
||||||
</td>
|
|
||||||
</tr>
|
|
||||||
<tr>
|
|
||||||
<td width="50%">
|
|
||||||
<h3>⚙️ Settings & Customization</h3>
|
|
||||||
<ul>
|
|
||||||
<li>Dark / Light / System theme support</li>
|
|
||||||
<li>Multi-language: English & Português (Brasil)</li>
|
|
||||||
<li>Per-account proxy URL override</li>
|
|
||||||
<li>Model visibility toggles</li>
|
|
||||||
<li>Log directory access</li>
|
|
||||||
</ul>
|
|
||||||
</td>
|
|
||||||
<td width="50%">
|
|
||||||
<h3>🖥️ Desktop Experience</h3>
|
|
||||||
<ul>
|
|
||||||
<li>Native Electron app with system tray integration</li>
|
|
||||||
<li>Collapsible sidebar with persistent state</li>
|
|
||||||
<li>Responsive layouts across all views</li>
|
|
||||||
<li>Status bar with live proxy and connection indicators</li>
|
|
||||||
<li>Error boundaries with user-friendly fallbacks</li>
|
|
||||||
</ul>
|
|
||||||
</td>
|
|
||||||
</tr>
|
|
||||||
</table>
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## 📸 Screenshots
|
|
||||||
|
|
||||||
|
|
||||||
<p align="center">
|
|
||||||
<img src="docs/assets/main.png" alt="Main Dashboard" width="80%" />
|
|
||||||
</p>
|
|
||||||
<p align="center">
|
|
||||||
<img src="docs/assets/2usage.png" alt="Usage Analytics" width="80%" />
|
|
||||||
</p>
|
|
||||||
<p align="center">
|
|
||||||
<img src="docs/assets/3proxy.png" alt="Proxy Monitor" width="80%" />
|
|
||||||
</p>
|
|
||||||
<p align="center">
|
|
||||||
<img src="docs/assets/4routing.png" alt="Routing Config" width="80%" />
|
|
||||||
</p>
|
|
||||||
<p align="center">
|
|
||||||
<img src="docs/assets/5docs.png" alt="Documentation" width="80%" />
|
|
||||||
</p>
|
|
||||||
<p align="center">
|
|
||||||
<img src="docs/assets/6connections.png" alt="Active Connections" width="80%" />
|
|
||||||
</p>
|
|
||||||
<p align="center">
|
|
||||||
<img src="docs/assets/7config.png" alt="Settings Configuration" width="80%" />
|
|
||||||
</p>
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## ⚡ Installation & Quick Start
|
|
||||||
|
|
||||||
### 📦 Download the App
|
|
||||||
|
|
||||||
You can download the latest pre-compiled binaries for Windows, macOS, and Linux from our [Releases page](https://github.com/evandrodevbr/GeminiNexus/releases).
|
|
||||||
|
|
||||||
*(Refer to the warning at the top of this page if you are using Windows and encounter the SmartScreen prompt).*
|
|
||||||
|
|
||||||
### 🔌 Using with AI IDEs
|
|
||||||
|
|
||||||
Once the application is running and you have added at least one account, configure your preferred IDE (Cursor, Windsurf, OpenCode, etc.):
|
|
||||||
|
|
||||||
```plaintext
|
|
||||||
API Base URL: http://localhost:10100/v1
|
|
||||||
API Key: (copy this from the Proxy page in the app)
|
|
||||||
Model: gemini-3-flash (or any mapped model of your choice)
|
|
||||||
```
|
```
|
||||||
|
|
||||||
### 🛠️ Build from Source
|
> [!WARNING]
|
||||||
|
> **Windows SmartScreen.** The builds are not code-signed. If Windows shows
|
||||||
|
> **"Windows protected your PC"**, click **More info → Run anyway**. Separately, the
|
||||||
|
> proxy is disabled by default; once enabled it listens on `0.0.0.0`, and requests
|
||||||
|
> are only authenticated when an API key is configured (an empty key means open
|
||||||
|
> mode) — set one and keep it private.
|
||||||
|
|
||||||
#### Prerequisites
|
## How it works
|
||||||
|
|
||||||
- **Node.js** v20 or higher
|
```mermaid
|
||||||
- **npm** (this project uses `package-lock.json`)
|
flowchart LR
|
||||||
|
IDE["Cursor · Windsurf · OpenCode<br/>Claude Code · any OpenAI/Anthropic client"] -->|"/v1/chat/completions<br/>/v1/messages"| P
|
||||||
#### Steps
|
subgraph APP["Gemini Nexus (Electron)"]
|
||||||
|
R["Renderer<br/>React 19 · TanStack Router/Query"] <-->|"oRPC over IPC"| M["Main process<br/>config · tray · services"]
|
||||||
```bash
|
M --> DB[("SQLite<br/>better-sqlite3 + Drizzle")]
|
||||||
# Clone the repository
|
M --> SEC["Encryption<br/>AES-256-GCM · Keytar/SafeStorage"]
|
||||||
git clone https://github.com/evandrodevbr/GeminiNexus.git
|
M --> MON["CloudMonitor + AutoSwitch<br/>quota every 5 min"]
|
||||||
cd GeminiNexus
|
M --> P["NestJS proxy<br/>port 8045"]
|
||||||
|
P --> SCH["Account scheduler<br/>+ circuit breaker"]
|
||||||
# Install dependencies
|
end
|
||||||
npm install
|
SCH -->|"Google OAuth account"| UP["Google upstream APIs"]
|
||||||
|
MON --> UP
|
||||||
# Start the application in development mode
|
|
||||||
npm start
|
|
||||||
|
|
||||||
# Build for production (e.g., Windows installer)
|
|
||||||
npm run make
|
|
||||||
```
|
```
|
||||||
|
|
||||||
---
|
<details>
|
||||||
|
<summary>Stack and layout</summary>
|
||||||
|
|
||||||
## 🛠️ Tech Stack
|
| Layer | Technology |
|
||||||
|
|---|---|
|
||||||
|
| Shell / build | Electron 41, Electron Forge, Vite 8 |
|
||||||
|
| UI | React 19, TypeScript, Tailwind CSS 4, Radix UI, Nivo charts, react-i18next |
|
||||||
|
| State / routing | TanStack Query, TanStack Router |
|
||||||
|
| Backend | NestJS 11 (proxy gateway), oRPC (type-safe IPC) |
|
||||||
|
| Data | better-sqlite3, Drizzle ORM |
|
||||||
|
| Tests | Vitest (unit), Playwright (E2E) |
|
||||||
|
|
||||||
| Category | Technologies |
|
```text
|
||||||
|----------|-------------|
|
|
||||||
| **Core** | [Electron](https://www.electronjs.org/), [React 19](https://react.dev/), [TypeScript](https://www.typescriptlang.org/) |
|
|
||||||
| **Build** | [Vite](https://vitejs.dev/), [Electron Forge](https://www.electronforge.io/) |
|
|
||||||
| **Styling** | [Tailwind CSS v4](https://tailwindcss.com/), [Radix UI](https://www.radix-ui.com/), [Lucide Icons](https://lucide.dev/) |
|
|
||||||
| **State** | [TanStack Query](https://tanstack.com/query/latest), [TanStack Router](https://tanstack.com/router/latest) |
|
|
||||||
| **Backend** | [NestJS](https://nestjs.com/) (internal gateway), [ORPC](https://orpc.unnoq.com/) (type-safe RPC) |
|
|
||||||
| **Database** | [Better-SQLite3](https://github.com/WiseLibs/better-sqlite3), [Drizzle ORM](https://orm.drizzle.team/) |
|
|
||||||
| **Charts** | [Nivo](https://nivo.rocks/) (Line, Bar, Pie) |
|
|
||||||
| **i18n** | [react-i18next](https://react.i18next.com/) |
|
|
||||||
| **Testing** | [Vitest](https://vitest.dev/), [Playwright](https://playwright.dev/) |
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## 💻 Development
|
|
||||||
|
|
||||||
```bash
|
|
||||||
# Start dev environment (Electron + Vite HMR)
|
|
||||||
npm start
|
|
||||||
|
|
||||||
# Run linting
|
|
||||||
npm run lint
|
|
||||||
|
|
||||||
# Type check
|
|
||||||
npm run type-check
|
|
||||||
|
|
||||||
# Format code
|
|
||||||
npm run format:write
|
|
||||||
|
|
||||||
# Run tests
|
|
||||||
npm test
|
|
||||||
```
|
|
||||||
|
|
||||||
### Project Structure
|
|
||||||
|
|
||||||
```plaintext
|
|
||||||
src/
|
src/
|
||||||
├── actions/ # App actions and flow orchestration
|
├── components/ # UI (proxy/, usage/, ui/ primitives)
|
||||||
├── components/ # React UI components
|
├── ipc/ # oRPC routers: account, cloud, config, gateway, usage, proxy-advanced…
|
||||||
│ ├── proxy/ # Proxy page components (advanced tabs)
|
├── server/ # NestJS proxy gateway (modules: proxy, usage)
|
||||||
│ ├── usage/ # Usage analytics components (StatCard, ChartCard)
|
├── services/ # AutoSwitchService, CloudMonitorService, GoogleAPIService
|
||||||
│ └── ui/ # Base UI primitives (Radix-based)
|
├── routes/ # index, usage, proxy, settings
|
||||||
├── hooks/ # Custom React hooks
|
├── localization/ # i18n resources
|
||||||
├── ipc/ # Electron IPC + database handlers
|
└── types/ # types + Zod schemas
|
||||||
├── layouts/ # Layout components (MainLayout + sidebar)
|
|
||||||
├── localization/ # i18n translation resources
|
|
||||||
├── routes/ # TanStack Router pages (index, usage, proxy, settings)
|
|
||||||
├── server/ # NestJS backend (proxy gateway service)
|
|
||||||
├── services/ # Service layer
|
|
||||||
├── types/ # TypeScript type definitions + Zod schemas
|
|
||||||
└── utils/ # Utility functions
|
|
||||||
```
|
```
|
||||||
|
|
||||||
---
|
The `cli/` folder holds a separate Python command-line tool (Typer + Rich) for
|
||||||
|
account switching and quota checks; see [`cli/README.md`](cli/README.md).
|
||||||
|
|
||||||
## ❓ FAQ
|
|
||||||
|
|
||||||
<details>
|
|
||||||
<summary><b>Q: "Windows protected your PC" (SmartScreen) warning during installation?</b></summary>
|
|
||||||
|
|
||||||
Yes, this is a common warning for new unsigned applications. Click **"More info"** and then **"Run anyway"**. See the warning at the top of the README for more details.
|
|
||||||
</details>
|
</details>
|
||||||
|
|
||||||
<details>
|
## Known limitations
|
||||||
<summary><b>Q: The app won't start when building from source?</b></summary>
|
|
||||||
|
|
||||||
1. Make sure all dependencies are installed: `npm install`
|
- Upstream access goes through Google's `v1internal` Cloud Code endpoints and OAuth scopes (see [`src/services/GoogleAPIService.ts`](src/services/GoogleAPIService.ts)). These are internal, undocumented APIs and may change without notice; the project is unofficial and not affiliated with Google or Anthropic.
|
||||||
2. Check if your Node.js version is >= 20.
|
- End-to-end tests are not run in CI (Electron needs a graphical environment); run `pnpm run test:e2e` locally.
|
||||||
3. Try deleting `node_modules` and reinstalling.
|
- The Windows MSI is only produced when the WiX Toolset is available on the build machine; otherwise the Windows artifact is the ZIP.
|
||||||
4. On Windows, ensure the WiX Toolset is available for `npm run make`.
|
- Builds are unsigned, so Windows and macOS may show security prompts on first launch.
|
||||||
</details>
|
|
||||||
|
## Build from source
|
||||||
|
|
||||||
|
Requirements: **Node.js ≥ 20** (`.nvmrc` pins 22.17.1) and **pnpm** (`packageManager: [email protected]`; the lockfile is `pnpm-lock.yaml`).
|
||||||
|
`pnpm install` runs [`scripts/setup-dev.js --check-only`](scripts/setup-dev.js), which
|
||||||
|
verifies the native toolchain needed by `better-sqlite3` and `keytar`: Visual Studio
|
||||||
|
2022 Build Tools (C++) on Windows, Xcode Command Line Tools on macOS, and
|
||||||
|
`build-essential`, `python3` and `libsecret-1-dev` on Ubuntu (`base-devel`, `python`,
|
||||||
|
`libsecret` on Arch).
|
||||||
|
|
||||||
|
```bash
|
||||||
|
git clone https://git.evandro.dev.br/evandro/gemini-nexus.git
|
||||||
|
cd gemini-nexus
|
||||||
|
pnpm install
|
||||||
|
|
||||||
|
pnpm start # dev mode (Electron + Vite HMR)
|
||||||
|
pnpm run make # build installers/packages for the current platform
|
||||||
|
pnpm run make:win # Windows build helper (extracts WiX from wix314-binaries.zip)
|
||||||
|
|
||||||
|
pnpm run lint # ESLint
|
||||||
|
pnpm run type-check # tsc --noEmit
|
||||||
|
pnpm run format:write
|
||||||
|
pnpm test # Vitest unit tests
|
||||||
|
pnpm run test:e2e # Playwright (local only)
|
||||||
|
```
|
||||||
|
|
||||||
<details>
|
<details>
|
||||||
<summary><b>Q: Account login failed?</b></summary>
|
<summary>FAQ</summary>
|
||||||
|
|
||||||
|
**My IDE can't connect to the proxy.** Check that the proxy is running (green
|
||||||
|
indicator in the status bar), that the port matches your IDE config (default `8045`),
|
||||||
|
that you pasted the API key from the Proxy page, and that at least one account is
|
||||||
|
active.
|
||||||
|
|
||||||
|
**Account login failed.** Verify your network connection, clear the app data and
|
||||||
|
sign in again, and check whether the account is restricted by the provider.
|
||||||
|
|
||||||
|
**The app won't start when building from source.** Reinstall dependencies with
|
||||||
|
`pnpm install`, confirm your Node.js version, and make sure the native toolchain
|
||||||
|
listed above is installed.
|
||||||
|
|
||||||
1. Ensure your network connection is working.
|
|
||||||
2. Try clearing the app data and logging in again.
|
|
||||||
3. Check if the account is restricted by Google/Claude.
|
|
||||||
</details>
|
</details>
|
||||||
|
|
||||||
<details>
|
## CI/CD
|
||||||
<summary><b>Q: My IDE can't connect to the proxy?</b></summary>
|
|
||||||
|
|
||||||
1. Make sure the proxy is actually running (look for the green indicator in the status bar).
|
Workflows in [`.github/workflows/`](.github/workflows):
|
||||||
2. Verify the port matches your IDE config (default is `10100`).
|
|
||||||
3. Copy the API key directly from the Proxy page and paste it into your IDE settings.
|
|
||||||
4. Check that at least one account is active in the Accounts page.
|
|
||||||
</details>
|
|
||||||
|
|
||||||
<details>
|
| Workflow | Trigger | What it does |
|
||||||
<summary><b>Q: Token counts are showing zero?</b></summary>
|
|---|---|---|
|
||||||
|
| [`format.yaml`](.github/workflows/format.yaml) | Pull request to `main` | Prettier check (`pnpm run format`) |
|
||||||
|
| [`lint.yaml`](.github/workflows/lint.yaml) | Pull request to `main` | ESLint (`pnpm run lint`) |
|
||||||
|
| [`testing.yaml`](.github/workflows/testing.yaml) | Push / PR to `main` | Unit tests (`pnpm test`) and type check (`pnpm run type-check`) |
|
||||||
|
| [`release.yml`](.github/workflows/release.yml) | Push to `main`, manual | Semantic-release on Node 22, driven by [`release.config.cjs`](release.config.cjs): `feat` → minor; `fix`, `perf`, `style`, `refactor`, `build` → patch; `docs`, `test`, `ci`, `chore` → no release |
|
||||||
|
| [`publish.yaml`](.github/workflows/publish.yaml) | After **Release** succeeds, manual (`dry_run` defaults to `true`) | Builds the 6-target matrix (Windows/macOS/Linux × x64/arm64) and uploads MSI, DMG, ZIP, AppImage, deb, rpm and update metadata to the release |
|
||||||
|
|
||||||
1. This was a known bug in earlier versions — please update to the latest release.
|
These workflows are written for GitHub: they call the `gh` CLI and the GitHub
|
||||||
2. Token tracking now correctly handles streaming metadata and estimated counts.
|
release publisher.
|
||||||
3. Usage data refreshes every 15 seconds on the Usage Analytics page.
|
|
||||||
</details>
|
|
||||||
|
|
||||||
---
|
## Licensing and credits
|
||||||
|
|
||||||
## 🤝 Contributing
|
- **Original code** from [AntigravityManager](https://github.com/Draculabo/AntigravityManager) by [Draculabo](https://github.com/Draculabo) — [CC BY-NC-SA 4.0](LICENSE).
|
||||||
|
- **All new code, features and architecture** by [evandrodevbr](https://git.evandro.dev.br/evandro) — [MIT](LICENSE-MIT).
|
||||||
|
|
||||||
Contributions are welcome! Please read `CONTRIBUTING.md` for details.
|
The initial proxy concept and early Electron scaffolding came from AntigravityManager.
|
||||||
|
Since the fork, the vast majority of the codebase has been rewritten, redesigned and
|
||||||
|
expanded, including the UI/UX redesign, the usage analytics dashboard with cost
|
||||||
|
tracking and OpenRouter pricing integration, the traffic monitor, dev/prod
|
||||||
|
environment isolation, the CI/CD pipeline and test infrastructure, IDE Quick Setup,
|
||||||
|
custom model pricing, and all documentation and its translations (EN, PT-BR, ES, ZH-CN).
|
||||||
|
|
||||||
---
|
Contributing: see [`CONTRIBUTING.md`](CONTRIBUTING.md), [`CODE_OF_CONDUCT.md`](CODE_OF_CONDUCT.md)
|
||||||
|
and [`SECURITY.md`](SECURITY.md).
|
||||||
|
|
||||||
## 📄 License
|
## Notices
|
||||||
|
|
||||||
This project uses a dual-license structure:
|
- Unofficial project; not affiliated with Google or Anthropic.
|
||||||
|
- Optional Sentry error reporting is controlled by the `error_reporting_enabled` setting; user paths are masked in reported events.
|
||||||
- **Original code** from [AntigravityManager](https://github.com/Draculabo/AntigravityManager) by [Draculabo](https://github.com/Draculabo): Licensed under [CC BY-NC-SA 4.0](LICENSE).
|
- Built with [Electron](https://www.electronjs.org/), [Electron Forge](https://www.electronforge.io/), [NestJS](https://nestjs.com/), [oRPC](https://orpc.unnoq.com/) and [Drizzle ORM](https://orm.drizzle.team/).
|
||||||
- **All new code, features, and architecture** by [evandrodevbr](https://github.com/evandrodevbr): Licensed under the [MIT License](LICENSE-MIT).
|
|
||||||
|
|
||||||
> 🔄 **Migration Notice:** This project is actively being migrated to a fully open-source license (MIT). As the remaining original code is progressively rewritten, the entire project will transition to MIT. We are committed to making Gemini Nexus 100% open-source.
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## 🙏 Credits
|
|
||||||
|
|
||||||
This project was originally forked from [AntigravityManager](https://github.com/Draculabo/AntigravityManager) created by [Draculabo](https://github.com/Draculabo). The initial proxy concept and early Electron scaffolding were based on his work.
|
|
||||||
|
|
||||||
Since the fork, **the vast majority of the codebase has been rewritten, redesigned, and expanded** by [evandrodevbr](https://github.com/evandrodevbr), including but not limited to:
|
|
||||||
|
|
||||||
- Complete UI/UX redesign (navigation, accounts, usage analytics, proxy management)
|
|
||||||
- Usage Analytics dashboard with cost tracking, token averages, and OpenRouter integration
|
|
||||||
- Traffic monitor with per-request token/cost inspection
|
|
||||||
- Environment isolation (dev/prod), CI/CD pipeline, and test infrastructure
|
|
||||||
- IDE Quick Setup (OpenCode, Cursor, VS Code, Claude Code)
|
|
||||||
- Custom model pricing configuration
|
|
||||||
- All documentation and internationalization (EN, PT-BR, ES, ZH-CN)
|
|
||||||
Reference in new issue
Block a user