Professional AI Account Management & Protocol Proxy System (v4.1.21)
Seamlessly proxy Gemini & Claude. OpenAI-Compatible. Privacy First.
Features • GUI Overview • Architecture • Installation • Integration
简体中文 | English
Antigravity Tools is an all-in-one desktop application designed for developers and AI enthusiasts. It perfectly combines multi-account management, protocol conversion, and smart request scheduling to provide you with a stable, high-speed, and low-cost Local AI Relay Station.
By leveraging this app, you can transform common Web Sessions (Google/Anthropic) into standardized API interfaces, completely eliminating the protocol gap between different providers.
| Sponsor | Description |
|---|---|
![]() | Thanks to PackyCode for sponsoring this project! PackyCode is a reliable and efficient API relay service provider, offering relays for various services such as Claude Code, Codex, and Gemini. PackyCode provides a special offer for users of this project: Register using this link and enter the "Ctrler" coupon code when topping up to enjoy a 10% discount. |
![]() | Thanks to AICodeMirror for sponsoring this project! AICodeMirror provides official high-stability relay services for Claude Code / Codex / Gemini CLI, supporting enterprise-grade concurrency, fast invoicing, and 24/7 dedicated technical support. Claude Code / Codex / Gemini official channels at 38% / 2% / 9% of original price, with extra discounts on top-ups! AICodeMirror offers special benefits for Antigravity-Manager users: register via this link to enjoy 20% off your first top-up, and enterprise customers can get up to 25% off! |
If you find this project helpful, feel free to buy me a coffee!
| Alipay | WeChat Pay | Buy Me a Coffee |
|---|---|---|
![]() | ![]() | ![]() |
/v1/chat/completions endpoint, compatible with 99% of existing AI apps./v1/messages interface, supporting all features of Claude Code CLI (e.g., chain-of-thought, system prompts).429 (Too Many Requests) or 401 (Expired), the backend triggers millisecond-level automatic retry and silent rotation, ensuring business continuity.gemini-3-pro-high).size (e.g., 1024x1024, 16:9) parameters or model name suffixes. Dashboard | Account List |
About Page | API Proxy |
Settings |
Claude Code Web Search | Cherry Studio Integration |
Imagen 3 Advanced Drawing | Kilo Code Integration |
Automatically detects your OS, architecture, and package manager — one command to download and install.
Linux / macOS:
curl -fsSL https://raw.githubusercontent.com/lbjlaq/Antigravity-Manager/v4.1.21/install.sh | bash
Windows (PowerShell):
irm https://raw.githubusercontent.com/lbjlaq/Antigravity-Manager/main/install.ps1 | iex
Supported formats: Linux (
.deb/.rpm/.AppImage) | macOS (.dmg) | Windows (NSIS.exe)Advanced usage: Install a specific version
curl -fsSL ... | bash -s -- --version 4.1.21, dry-run modecurl -fsSL ... | bash -s -- --dry-run
If you have Homebrew installed, you can also install via:
# 1. Tap the repository
brew tap lbjlaq/antigravity-manager https://github.com/lbjlaq/Antigravity-Manager
# 2. Install the app
brew install --cask antigravity-tools
Tip: If you encounter permission issues, add the
--no-quarantineflag.
You can choose to install via the one-click script or Homebrew:
Option 1: One-click script (Recommended)
curl -sSL https://raw.githubusercontent.com/lbjlaq/Antigravity-Manager/main/deploy/arch/install.sh | bash
Option 2: via Homebrew (If you have Linuxbrew installed)
brew tap lbjlaq/antigravity-manager https://github.com/lbjlaq/Antigravity-Manager brew install --cask antigravity-tools
The AppImage will be automatically symlinked to your binary path with executable permissions.
Download from GitHub Releases:
.dmg (Universal, Apple Silicon & Intel).msi or portable .zip.deb or AppImageIf you prefer running in a containerized environment, we provide a native Docker image. This image supports the v4.0.3 Native Headless architecture, automatically hosts frontend static resources, and allows for direct browser-based management.
# Option 1: Direct Run (Recommended)
# - API_KEY: Required. Used for AI request authentication.
# - WEB_PASSWORD: Optional. Used for Web UI login. Defaults to API_KEY if NOT set.
docker run -d --name antigravity-manager \
-p 8045:8045 \
-e API_KEY=sk-your-api-key \
-e WEB_PASSWORD=your-login-password \
-e ABV_MAX_BODY_SIZE=104857600 \
-v ~/.antigravity_tools:/root/.antigravity_tools \
lbjlaq/antigravity-manager:latest
# Forgot keys? Run `docker logs antigravity-manager` or `grep -E '"api_key"|"admin_password"' ~/.antigravity_tools/gui_config.json`
#### 🔐 Authentication Scenarios
* **Scenario A: Only `API_KEY` is set**
- **Web Login**: Use `API_KEY` to access the dashboard.
- **API Calls**: Use `API_KEY` for AI request authentication.
* **Scenario B: Both `API_KEY` and `WEB_PASSWORD` are set (Recommended)**
- **Web Login**: **Must** use `WEB_PASSWORD`. Using API Key will be rejected (more secure).
- **API Calls**: Continue to use `API_KEY`. This allows you to share the API Key with team members while keeping the password for administrative access only.
#### 🆙 Upgrade Guide for Older Versions
If you are upgrading from v4.0.1 or earlier, your installation won't have a `WEB_PASSWORD` set by default. You can add one using any of these methods:
1. **Web UI (Recommended)**: Log in using your existing `API_KEY`, go to the **API Proxy Settings** page, find the **Web UI Management Password** section below the API Key, set your new password, and save.
2. **Environment Variable (Docker)**: Stop the old container and start the new one with the added parameter `-e WEB_PASSWORD=your_new_password`. **Note: Environment variables have the highest priority and will override any changes in the UI.**
3. **Config File (Persistent)**: Directly edit `~/.antigravity_tools/gui_config.json` and add/modify `"admin_password": "your_new_password"` inside the `proxy` object.
- *Note: `WEB_PASSWORD` is the environment variable name, while `admin_password` is the JSON key in the config file.*
> [!TIP]
> **Priority Logic**:
> - **Environment Variable** (`WEB_PASSWORD`) has the highest priority. If set, the application will always use it and ignore values in the configuration file.
> - **Configuration File** (`gui_config.json`) is used for persistent storage. When you change the password via Web UI and save, it is written here.
> - **Fallback**: If neither is set, it falls back to `API_KEY`; if even `API_KEY` is missing, a random one is generated.
# Option 2: Use Docker Compose
# 1. Enter the Docker directory
cd docker
# 2. Start the service
docker compose up -d
Access URL:
http://localhost:8045(Admin Console) |http://localhost:8045/v1(API Base) System Requirements:
- RAM: 1GB recommended (minimum 256MB).
- Persistence: Mount
/root/.antigravity_toolsto persist your data.- Architecture: Supports x86_64 and ARM64. See: Docker Deployment Guide (docker)
Due to macOS security gatekeeper, non-App Store apps might show this. Run this in Terminal to fix:
sudo xattr -rd com.apple.quarantine "/Applications/Antigravity Tools.app"
Accounts → Add Account → OAuth.Note: the auth URL contains a one-time local callback port. Always use the latest URL shown in the dialog. If the app isn’t running or the dialog is closed during auth, the browser may show
localhost refused connection.
export ANTHROPIC_API_KEY="sk-antigravity"
export ANTHROPIC_BASE_URL="http://127.0.0.1:8045"
claude
~/.config/opencode/opencode.json:
antigravity-manager (does not overwrite google/anthropic providers)antigravity-accounts.json (plugin-compatible v3 format) for the OpenCode pluginC:\Users\<User>\.config\opencode\ (same ~/.config/opencode rule).Quick verification commands:
# Test antigravity-manager provider (supports --variant)
opencode run "test" --model antigravity-manager/claude-sonnet-4-5-thinking --variant high
# If opencode-antigravity-auth is installed, verify google provider still works independently
opencode run "test" --model google/antigravity-claude-sonnet-4-5-thinking --variant max
import openai
client = openai.OpenAI(
api_key="sk-antigravity",
base_url="http://127.0.0.1:8045/v1"
)
response = client.chat.completions.create(
model="gemini-3-flash",
messages=[{"role": "user", "content": "Hello, please introduce yourself"}]
)
print(response.choices[0].message.content)
Changelog:
400 INVALID_ARGUMENT errors caused by Cherry Studio sending excessive maxOutputTokens (128k). The system now automatically caps Claude protocol output to 65536, ensuring requests remain within Gemini's limits.thinking: { type: "adaptive" } behavior for Gemini models in Claude protocol. It now maps to a fixed thinking budget of 24576 (aligned with OpenAI protocol), resolving Gemini Vertex AI incompatibility with thinkingBudget: -1 and significantly improving stability in Cherry Studio.custom-protocol feature by default, resolving issues with custom protocols (e.g., tauri://) failing to load in production builds, ensuring stability for local resources.AppRuntimeFlags for state management, linking window close behavior with tray status.extract_semver) to accurately identify semantic versions from complex command outputs, improving auto-update and environment detection accuracy.create_codex_sse_stream to emit the complete SSE event lifecycle required by the OpenAI Responses API specification (response.output_item.added, content_part.added/done, output_item.done, response.completed), resolving the issue where Cherry Studio failed to assemble response content due to missing events.builtin_web_search tool declarations sent by Cherry Studio to prevent conflicts with inject_google_search_tool, ensuring the Google Search tool is correctly injected.groundingMetadata parsing to the Codex streaming response, enabling search query and source citation echo in web search results.should_disable_thinking_due_to_history check that could permanently disable thinking mode due to imperfect message history, now relying on thinking_recovery mechanism for automatic repair.400 INVALID_ARGUMENT error in Claude Proxy during tool calls.role: "user" fields in protocol translation for better Google API compatibility.anyOf/oneOf best-match selection and constraint-to-description migration.-thinking.image and imagen keywords, ensuring image model quota info is correctly synchronized.X-Client-Name, X-Client-Version, X-Machine-Id, and X-VSCode-SessionId, achieving pixel-level camouflage from the network layer to the application layer, further reducing the probability of 403 risk controls.Field required error from upstream APIs caused by empty text blocks (text: "") sent by Claude Code CLI during tool use.mcp__puppeteer_navigate instead of the registered mcp__puppeteer__puppeteer_navigate).claude-opus-4-6-thinking model definition was missing during Opencode CLI synchronization, ensuring proper recognition and invocation by the client.rquest with BoringSSL to perfectly mimic Chrome 123's TLS fingerprint (JA3/JA4), effectively resolving 403/Captchas issues from strict upstream providers.Box<dyn Stream>, enabling unified compatibility for both reqwest (standard) and rquest (spoofed) response streams and resolving underlying type conflicts.invalid_grant).gemini-3-pro-image variants with resolution or aspect-ratio suffixes (e.g., -4k, -16x9) failed to normalize correctly, leading to precise matching failures in the quota system.updater.json to reduce direct dependency on GitHub API, improving check speed.400 Invalid Argument error caused by parameter structure mismatch when calling models like Claude 3.7/4.5 Thinking via proxy.thinking field injection. Now uniformly uses the generationConfig.thinkingConfig nested structure recommended by Google's native protocol.stream=true mode where the usage field was incorrectly appended to every data chunk, causing clients (like Cline/Roo Code) to report exponentially inflated token usage.linux-x86_64 and linux-aarch64 platforms in updater.json, enabling Linux AppImage users to receive auto-update notifications..AppImage.sig signature files for Linux builds, completing the auto-update loop for macOS, Windows, and Linux.install.sh (Linux/macOS) and install.ps1 (Windows), supporting fully automated download, installation, and configuration via simple curl or irm commands.opencode binary, allowing sync status management via configuration files in isolated environments like Docker.gemini-3-pro-image and its 4k/2k variants were incorrectly identified as supporting Adaptive Thinking due to the gemini-3-pro keyword, leading to the erroneous injection of effortLevel.antigravity-tools.rb Cask to v4.1.16, ensuring macOS and Linux users get the latest stable build via brew install.updater.json) in the Release workflow. The system now automatically builds a complete update index from .sig signature files, supporting darwin-aarch64, darwin-x86_64, and windows-x86_64 architectures.bold-spark-xxx) mentioned in the error. If the project is missing, create a new one and enable the necessary Vertex AI APIs.gcloud auth login) and ensuring that your project is correctly configured using gcloud config set project.is_forbidden.mapped_model is empty, it now falls back to the original model ID instead of showing "Unknown", increasing clarity.RefreshCw icon for a more refined interactive experience.imageSize parameter, available across all protocols (OpenAI/Claude/Gemini).imageSize parameter > quality parameter inference > model suffix inference.imageSize field.quality parameter and model suffix methods, without affecting existing code.brew upgrade --cask flow directly within the app for a seamless upgrade experience.gemini-3-pro-image when the image quota is exhausted.MAX_RECURSION_DEPTH (10) for deep recursive logic like flatten_refs, effectively preventing crashes caused by circular references or excessively deep nesting.tool_calls in create_openai_sse_stream, ensuring multiple tool calls within the same chunk have independent and sequential index values, preventing parsing failures caused by concatenated arguments.bamboo-precept-lgxtn), ensuring uninterrupted API requests.Settings.tsx and ApiProxy.tsx with t() internationalization calls.claude-opus-4-6-thinking with enhanced reasoning capabilities.claude-opus-4.5 / claude-opus-4 to 4.6, allowing legacy configurations to use the new model without changes.maxOutputTokens was less than thinkingBudget. The system now automatically adjusts and aligns token limits to ensure request compliance.~/.bun/bin and global install paths, resolving issues where Bun users could not automatically sync Claude CLI configurations.claude-opus-4-6. The system now verifies the actual model_quotas held by the account. Only accounts that explicitly possess the quota for the target model can participate in the rotation, thoroughly resolving the "Soft Priority" issue where Pro/Free accounts were incorrectly selected.Ultra > Pro > Free. As long as an Ultra account is available, the system will always prioritize scheduling Ultra accounts, preventing downgrade to Pro accounts and ensuring service quality for high-end models.Settings -> Custom Model Mapping or gui_config.json to ensure there is NO wildcard configuration like "claude-opus-4-*": "claude-opus-4-5-thinking". This could cause claude-opus-4-6-thinking to be incorrectly mapped to claude-opus-4-5-thinking. We recommend adding an explicit exact mapping for claude-opus-4-6-thinking.ABV_BIND_LOCAL_ONLY environment variable. When set to true, Docker/Headless mode will strictly bind to 127.0.0.1 and no longer expose services to 0.0.0.0 by default, meeting specific security network requirements.ag_enc_ prefix to explicitly identify encrypted password fields.useful-flow-g3dts), which are now rejected by the Google API with a 404 error.bamboo-precept-lgxtn) when an account fails to retrieve a valid project ID automatically, ensuring service continuity and reliability..volta/bin and its internal binaries in both cli_sync and opencode_sync, ensuring a "zero-config" experience for Volta users when syncing CLI configurations.-4k, -2k) or explicit parameters (quality: "hd"). This prevents accidental downgrades caused by default parameters in the request body.includeThoughts: false to prioritize single-image generation quality.effort parameter (low/medium/high), allowing dynamic adjustment of thinking depth and budget.maxOutputTokens was incorrectly truncated in Adaptive mode due to missing Budget perception, ensuring long thought chains are preserving.docs/adaptive_mode_test_examples.md, providing a comprehensive guide for validating multi-turn conversations, complex tasks, and budget mode switching.account_bindings were overwritten during settings save, ensuring persistent mappings across restarts.zh.json and inconsistent translations across locales.socks5h:// in the UI and unified backend proxy URL normalization logic to improve guidance for remote DNS resolution.model field and mirror environment cleanup for Claude) to ensure post-sync compatibility..antigravity.bak backups before syncing, with one-click restore support.GlobalSystemPrompt component with one-click enable and multi-line content editing.temperature and top_p data types from f32 to f64 in the backend.0.95 becoming 0.949999...) during proxy serialization, improving upstream compatibility.NavLogo and Settings pages, utilizing the app_name translation key for consistent UI language switching.gemini-3-pro-image and its 4k/2k variants were incorrectly identified as "Thinking Models" because they contain the gemini-3-pro keyword.thinkingConfig alongside imageConfig, which led to backend resolution downgrades (to 1k).en.json, covering new features like Cloudflared, Circuit Breaker, and OpenCode Sync.UpstreamCallResult to unify upstream request management and optimize streaming/non-streaming response paths.claude-opus-4-6 series models automatically enable Thinking Mode with preset Budgets, allowing users to enjoy the latest reasoning capabilities without manual intervention.claude-opus-4-6-thinking and its aliases (claude-opus-4-6, 20260201), managing them under the claude-sonnet-4.5 quota group.npm, pnpm, Yarn, NVM, FNM).PATH environment is incomplete and enhanced support for .cmd and .bat files on Windows.tool_calls and Claude tool_use.draggable="false" to all links and icons in the navigation bar and Logo to prevent accidental browser default dragging behavior, improving interaction stability.maxLength={15} for edit inputs in both account list and card views.ProxyToken struct to eliminate disk reads during the get_token sorting hot path.std::fs::read_to_string) from request processing, significantly improving latency and throughput under high concurrency.projects/...) models. The system now automatically injects skip_thought_signature_validator even if a real signature is missing, preventing the Field required for thinking signature error.[Core Fix] Fixed Image API Account Rotation on 429/500/503 Errors (Issue #1622):
images/generations and images/edits, aligning with the robustness of the Chat API.[Core Feature] Add Custom Label Support for Accounts (PR #1620):
[Core Fix] Handle NULL values in get_stats when database is empty (PR #1578):
SUM() calls with COALESCE(..., 0) to ensure numeric values are always returned, fixing type conversion errors in rusqlite when no logs exist.[Core Fix] Claude 403 Error Handling & Account Rotation Optimization (PR #1616):
is_forbidden and removes them from the active memory pool upon encountering 403 errors.VALIDATION_REQUIRED errors and implements a 10-minute temporary block for affected accounts.QUOTA_EXHAUSTED errors, ensuring the system correctly attempts to rotate to the next available account.[Core Feature] OpenCode CLI Configuration Sync Integration (PR #1614):
~/.config/opencode/opencode.json with proper provider settings for Anthropic and Google.antigravity-accounts.json for OpenCode plugin compatibility.[Core Feature] Allow Hiding Unused Menu Items (PR #1610):
[Core Fix] Gemini Native Protocol Image Generation Full Fix (Issue #1573, #1625):
INVALID_ARGUMENT errors in Gemini native image generation caused by the missing role: "user" field in the contents array.generationConfig.imageConfig (e.g., aspectRatio, imageSize) is correctly passed to the upstream API without getting filtered.[Core Enhancement] Custom Mapping Supports Manual Input for Any Model ID:
claude-opus-4-6. Users can route requests to these experimental models through custom mappings.thinking_recovery mechanism. Automatically strips stale thinking blocks and guides the model when status loops or interruptions are detected, enhancing stability in complex tool-calling scenarios.Invalid signature (HTTP 400) errors after session interruptions or resets.v4.1.5 (2026-02-05):
localStorage to session-based sessionStorage, significantly reducing security risks on shared devices.localStorage keys, automatically transfers them to sessionStorage, and securely wipes the old data, ensuring a seamless transition and eliminating security vulnerabilities for existing users.account_id being None when adding new accounts. The system now generates a temporary UUID for new accounts to ensure all OAuth requests have a clear account context.refresh_access_token and get_effective_client to provide more detailed proxy selection information, helping diagnose network issues in Docker environments.page and page_size in IpAccessLogQuery, resolving 400 Bad Request errors from /api/security/logsAddBlacklistWrapper and AddWhitelistWrapper structs, fixing 422 Unprocessable Content errors from /api/security/blacklist and /api/security/whitelist POST requestsipPattern → ip_pattern, ensuring consistency with backend API parametersset_forbidden method in token_manager.rs to support marking accounts as disabledquota.is_forbidden status, automatically skipping disabled accountsrequest.ts to remove used parameters from body after path parameter replacement, avoiding duplicate parametersrequest field, simplifying request structureisTauri environment detection in useDebugConsole.ts, distinguishing between Tauri and Web environmentsrequest() instead of invoke(), ensuring proper calls in Web environment--legacy-peer-deps flag, resolving frontend dependency conflicts@lobehub/icons peer dependencies, fixing build failures caused by missing frontend dependenciesTypeError crashes caused by direct calls to native invoke APIs in non-Tauri environments. Communication now flows through the compatibility request layer.HTTP Error 422 when generating and binding fingerprints by aligning the parameter structure between frontend and backend (nested profile object support)./api/system/save-file and its associated handlers. Added path traversal prevention (.. check) to the database import interface.save_text_file and read_text_file commands, strictly forbidding directory traversal and blocking access to sensitive system paths.v4.1.4 (2026-02-05):
TokenManager. Added deep validation for disabled and proxy_disabled statuses in loading, syncing, and scheduling paths to prevent disabled accounts from being mistakenly selected.validation_blocked field system to handle Google's VALIDATION_REQUIRED (403 temporary risk control) scenarios, implementing intelligent automatic bypass based on expiration time./proxy path), resolving the issue where debug mode could not be enabled in Web mode.BindDeviceProfileWrapper structure for the admin_bind_device_profile_with_profile interface, fixing HTTP 422 errors caused by nested parameters sent from the frontend.serde alias feature to support both camelCase (frontend) and snake_case (backend files) at the API layer, ensuring old account files load correctly.Wrapper layers in multiple management API routes (e.g., IP blacklist/whitelist management, security setting updates), directly destructuring business models to improve code conciseness and development efficiency.finish_reason was incorrectly set to stop during tool calls, causing OpenAI clients to prematurely terminate conversations. The system now forcibly sets finish_reason to tool_calls when tool calls are present, ensuring proper tool loop execution.cmd/code/script (which Gemini may generate) to the standard command parameter, improving tool call compatibility.claude-sonnet-4-5-thinking) under the OpenAI protocol, resolving interruption issues in clients like OpenCode.v4.1.3 (2026-02-05):
{"config": ...}) wrapped by the frontend invoke method, ensuring security configurations are correctly persisted.camelCase renaming support for IP management interfaces, resolving failures in adding or deleting entries caused by case mismatches in Web-mode Query parameters.gemini-3-pro and other reasoning models were missing thinking blocks in OpenAI, Claude, and Gemini protocols since v4.1.0.thinkingConfig injection and default-enablement mechanisms, ensuring thinking features are correctly activated even when not explicitly requested by clients.wrapper.rs to prevent configuration conflicts in high-concurrency scenarios.v4.1.2 (2026-02-05):
ClientAdapter framework with Arc reference counting to fully decouple handler logic from downstream client specifics, ensuring thread-safe sharing.opencode, eliminating AI_TypeValidationError.let_it_crash fail-fast mechanism to significantly improve stability and error feedback in high-concurrency scenarios.event: error / Non-stream JSON), ensuring clients can correctly parse upstream exceptions.proxy_disabled) was ignored in batch quota refresh and auto-warmup logic.SignatureCache to physically isolate thinking signatures using session_id, preventing signature cross-contamination in multi-turn or concurrent sessions.[undefined]), improving compatibility with various clients like Cherry Studio.@lobehub/icons to display brand-specific logos for models in account cards, tables, and dialogs.get_account_state_on_disk mechanism that adds a second-layer status confirmation on the token acquisition path, completely resolving issues with disabled accounts being selected due to memory cache latency.toggle_proxy_status command to automatically disable fixed account mode when an account is disabled and trigger an immediate proxy pool reload.invalid_grant error and auto-disables an account, it now physically purges in-memory tokens, rate limit records, and session bindings, ensuring immediate offline status for faulty accounts.futures streams, refactoring sequential checks into parallel processing (concurrency limit: 20).crypto.randomUUID API.v4.1.1 (2026-02-04):
GitHub API -> GitHub Raw -> jsDelivr, significantly improving update detection reliability.antigravityUnifiedStateSync.oauthToken format for v1.16.5+ while maintaining backward compatibility for legacy formats.react-router dependency to a safe version, addressing a cross-site scripting (XSS) risk in the ScrollRestoration component during server-side rendering (SSR).v4.1.0 (2026-02-04):
ip:port) by prepending http://.cloudflare.com.username field in ProxyRequestLog initialization..no_proxy() for Warmup requests in Docker environments, preventing localhost requests from being incorrectly routed to external proxies causing 502/401 errors./internal/* paths from authentication, ensuring internal warmup requests are not intercepted.v4.0.15 (2026-02-03):
v4.0.14 (2026-02-02):
v4.0.13 (2026-02-02):
ref conflict introduced during merge that caused incorrect click detection on mobile/desktop.v4.0.12 (2026-02-01):
connector.rs) to eliminate inefficient legacy code.v4.0.11 (2026-01-31):
Sandbox -> Daily -> Prod. Using lenient environments first to reduce the occurrence of 403 errors.VALIDATION_REQUIRED (403), the system temporarily blocks the account for 10 minutes. Requests will skip this account during the block period to prevent further flagging.TokenManager instances, ensuring the Admin Dashboard and Proxy Service share a single account manager./health and /healthz routes that were lost during the 4.0.0 architecture migration."status": "ok" and the current application version, facilitating version matching and liveness checks for monitoring systems.thinking_budget (e.g., 32k) exceeded the limit (24k) for Gemini Flash thinking models (e.g., gemini-2.0-flash-thinking), resulting in 400 Bad Request errors.v4.0.9 (2026-01-30):
User-Agent header for upstream requests in "Service Configuration". This enables simulation of any client version (Cheat Mode), effectively bypassing version blocks or risk controls in certain regions.check_and_protect_quota() would exit early when processing disabled accounts. Now, even if an account is disabled, the system still scans and updates its protected_models (model-level protection list) in real-time, ensuring accounts with insufficient quota cannot bypass protection mechanisms after being re-enabled.src-tauri/src/modules/cache.rs to calculate and manage temporary file distributions (e.g., translation cache, log fingerprints).v4.0.8 (2026-01-30):
debug_logger.rs to capture and record raw request, transformed payload, and complete streaming response for OpenAI, Claude, and Gemini handlers.TokenStats.tsx to ensure floating information stays within the viewport on small windows or high zoom levels, preventing content from being buried by window boundaries.LazyLock for efficient version parsing, boosting performance and reducing memory jitter.VersionSource enum, allowing developers to trace versioning origins and troubleshoot fetch failures effortlessly.parametersJsonSchema to parameters in tool declarations to align with the latest Gemini API specifications.auth_mode to auto. In Docker or LAN-access environments, the system now automatically activates authentication to ensure WEB_PASSWORD is enforced.ABV_AUTH_MODE and AUTH_MODE environment variables, allowing users to explicitly override the authentication mode at startup (supports off, strict, all_except_health, auto).v4.0.7 (2026-01-29):
[Performance] Optimize Docker Build Process (Fix Issue #1271):
[Performance] Resolve Docker Version Lag and Crash with Large Datasets (Fix Issue #1269):
spawn_blocking). This eliminates UI freezes and proxy unavailability when viewing large log files (800MB+).[Core Fix] Resolve OpenAI Protocol 400 Invalid Argument Error (Fix Issue #1267):
maxOutputTokens: 81920 setting introduced in v4.0.6 for OpenAI/Claude protocols. This value exceeded the hard limits of many standard models (e.g., gemini-3-pro-preview or native Claude 3.5), causing immediate request rejection.thinkingConfig for models explicitly ending with -thinking. This prevents side effects on standard models (like gemini-3-pro) that do not support this parameter.[Compatibility] Fix OpenAI Codex (v0.92.0) Error (Fix Issue #1278):
external_web_access field injected by Codex clients in tool definitions, eliminating the 400 Invalid Argument error from Gemini API.name field. Invalid tool definitions missing a name will now be automatically skipped with a warning instead of failing the request.[Core Feature] Adaptive Circuit Breaker:
account_id:model) rate limit tracking, ensuring that quota exhaustion of a single model does not lock the entire account.[60, 300, 1800, 7200]), automatically increasing lock duration based on consecutive failures.TokenManager memory cache to apply configuration changes instantly to the proxy service without requiring a restart.[Core Optimization] Improved Log Cleanup & Reduction (Fix Issue #1280):
v4.0.6 (2026-01-28):
upsert (update or insert) mode. Re-authorizing an existing account now smoothly updates its tokens and project info without error.TokenManager to ensure all platforms share the same robust account verification and storage logic.ModelCapacityExhausted errors (e.g., 503) from a fixed 15s wait to a tiered [5s, 10s, 15s] approach, significantly reducing wait times for transient capacity fluctuations.max_tokens for Claude and OpenAI protocols from 16k to 81,920 (80k).
262: - Resolve Truncation: Completely resolved the truncation issue where Opus 4.5 and similar models were capped at around 48k tokens when thinking mode was enabled due to default budget constraints. Users can now enjoy full long-context output capabilities without any configuration.--no-autoupdate / --loglevel) that caused the cloudflared process to exit immediately.DETACHED_PROCESS flags for Windows, enabling fully silent background execution without popup windows.v4.0.5 (2026-01-28):
localhost as the OAuth redirect URI for all modes (including Docker/Web) to bypass Google's security restrictions on private IPs and non-HTTPS environments.ar) language support.RateLimitTracker and TokenManager to ensure state consistency under high concurrency.DELETE /api/proxy/rate-limits) to facilitate programmatic management and integration.v4.0.4 (2026-01-27):
/v1/images/generate), supporting parameters like size and quality.docs/gemini-3-image-guide.md providing a complete guide for Gemini image generation integration.common_utils.rs) and Gemini/OpenAI mapping logic to ensure stable transmission of large payloads.accounts.json), causing them to disappear after restart or be invisible to the desktop app.TokenManager persistence logic to reuse modules::account core methods, ensuring atomicity of file locks and index updates.device_id injection.cloudcode-pa.googleapis.com).Subscription Tier > Remaining Quota > Health Score. Ensures that among accounts with the same tier and quota, the most stable one is always prioritized.TokenManager core interface and completed synchronized adaptation for all handlers (Claude, Gemini, OpenAI, Audio, Warmup), ensuring scheduling changes are transparent to business logic.Retry-After or rate limit headers with decimal millisecond values, causing parsing failures.v4.0.3 (2026-01-27):
ABV_MAX_BODY_SIZE to allow dynamic adjustment of the maximum limit.state parameter generation and callback verification to enhance OAuth security and compatibility.v4.0.2 (2026-01-26):
admin_update_model_mapping interface correctly invokes persistence logic, so configurations remain effective after container restarts.minLength, pattern, format, etc.) into description hints before removal.CONSTRAINT_FIELDS constant and move_constraints_to_description function to ensure models can understand original constraints through descriptions.{"minLength": 5} → {"description": "[Constraint: minLen: 5]"}extract_best_schema_from_union function with scoring mechanism to select the best type (object > array > scalar)."Accepts: type1 | type2" hints to descriptions after merging, preserving all possible type information.get_schema_type_name function supporting explicit types and structural inference.ToolAdapter trait providing customized Schema processing capabilities for different MCP tools.PencilAdapter that automatically adds descriptions for Pencil drawing tool's visual properties (cornerRadius, strokeWidth) and path parameters.clean_json_schema_for_tool function.clean_json_schema_cached function and cache statistics, expected 60%+ performance improvement.ABV_WEB_PASSWORD or WEB_PASSWORD environment variables.API_KEY if not set (ensuring backward compatibility).API_KEY for authentication, achieving permission isolation.v4.0.1 (2026-01-26):
v4.0.0 (2026-01-25):
deploy/arch/PKGBUILD.template caused by hardcoded data.tar.zst..deb package versions.ABV_PUBLIC_URL customization, perfectly adapting to remote VPS or NAS deployment scenarios.deploy directories and legacy scripts, resulting in a more modern project structure.antigravity-manager and integrated a dedicated docker/ directory and manual.400 Invalid signature errors.common.rs, achieving system-wide logic normalization.Retry-After header was missing. All handlers now execute physical wait times via the shared module before retrying, protecting IP reputation.ANTHROPIC_AUTH_TOKEN when setting ANTHROPIC_API_KEY, resolving sync errors for the Claude CLI.ANTHROPIC_MODEL that might interfere with model defaults, ensuring consistent CLI behavior.v4.0.0 (2026-01-25):
gemini-2.5-flash.gemini-3-flash) via dropdown.internal-background-task now strictly adheres to user redirection rules.gemini-2.5-flash and gemini-2.5-flash-lite models are currently experiencing severe capacity limitations (Rate Limited / Capacity Exhausted).gemini-3-flash or gemini-3-pro-high) in "Custom Mappings" until upstream services recover.ko) translation support, available for selection in Settings.v3.3.49 (2026-01-22):
[Core Fix] Thinking Interruption & 0-Token Defense (Fix Thinking Interruption):
[Core Fix] Removed Flash Lite Model to Fix 429 Errors:
gemini-2.5-flash-lite is frequently returning 429 errors today due to Upstream Google Container Capacity Exhausted (MODEL_CAPACITY_EXHAUSTED), rather than standard account quota limits.gemini-2.5-flash-lite calls (e.g., background title generation, L3 summary compression) and preset mappings with the more stable gemini-2.5-flash.gemini-2.5-flash-lite in "Custom Mappings" or "Presets", please update it to another model immediately, or you may continue to experience 429 errors.[UX Optimization] Immediate Effect of Settings (Fix PR #949):
[Code Cleanup] Backend Architecture Refactoring & Optimization (PR #950):
openai/collector.rs) to significantly improve maintainability.[Core Fix] State Sync Strategy Update:
App.tsx and Settings.tsx, ensuring UI consistency during configuration loading.[Core Optimization] Context Compression & Token Savings:
[Enhancement] API Monitor Dashboard Upgrade (PR #951):
[JSON Schema Optimization] Recursive $defs Collection & Improved Fallback (PR #953):
collect_all_defs() to gathered $defs/definitions from all schema levels, fixing missing nested definitions.flatten_refs() to catch and handle orphan $ref fields.$ref, converting them to string type with descriptive hints.[Core Fix] Account Index Protection (Fix Issue #929):
[Feature] Deep Optimization of Router & Model Mapping (PR #954):
[Stability] OAuth Callback & Parsing Enhancement (Fix #931, #850, #778):
[Optimization] OAuth Communication Quality (Issue #948, #887):
[UX Enhancement] Upstream Proxy Validation & Restart Hint (Contributed by @zhiqianzheng):
v3.3.48 (2026-01-21):
CREATE_NO_WINDOW flag to the cloudflared process creation logic, ensuring all background processes run silently without visible windows.v3.3.47 (2026-01-21):
/v1/images/generations endpoint had two parameter mapping defects:
size parameter only supported hardcoded specific dimension strings; OpenAI standard sizes (like 1280x720) were incorrectly fallback to 1:1 aspect ratioquality parameter was only used for Prompt enhancement and not mapped to Gemini's imageSize, unable to control the physical resolution of output imagescommon_utils.rs: Added parse_image_config_with_params function to support parsing image configuration from OpenAI parameters (size, quality)calculate_aspect_ratio_from_size function, using mathematical calculation instead of hardcoded matching, supporting any WIDTHxHEIGHT formathandle_images_generations function, removed hardcoded mapping, calling unified configuration parsing functionquality: "hd" → imageSize: "4K", quality: "medium" → imageSize: "2K"gemini-3-pro-image-16-9-4k) still works normallyquality parameter correctly mappedcommon_utils/compact is tedious, and existing compression strategies break LLM's KV Cache, causing cost spikesassistant messages (replaces with "...")signature field, resolves Issue #902 (signature loss causing 400 errors)gemini-2.5-flash-lite to generate 8-section XML structured summary (extremely low cost)[User: XML Summary] + [Assistant: Confirmation] + [User's Latest Message]context_manager.rs implements Token estimation, tool trimming, Thinking compression, signature extractioncall_gemini_sync() - reusable synchronous upstream call function/compact needed, system handles automaticallyestimation_calibrator.rs):
estimation_calibrator.rs - Global singleton calibrator, thread-safeclaude.rs, streaming.rs, context_manager.rsI: 0, O: 0 (actual request succeeded but tokens not recorded)has_valid_signature_for_function_calls() now checks Session Cacherequest.rssession_id parameter passing to signature check function[Signature-Check] log series for tracking signature recovery process400 Bad Request errors from the Gemini API caused by parameter type mismatches (e.g., string instead of number) during Tool Use.fix_tool_call_args in json_schema.rs to automatically coerce parameter types (strings to numbers/booleans) based on their JSON Schema definitions.local_shell_call and apply_patch when parameters were incorrectly formatted as strings by certain clients or proxy layers.gemini-3-pro-image to default_monitored_models() in config.rs, aligning with Smart Warmup and Pinned Quota Models listsQuotaProtection.tsx, adjusted layout to 4 models per row (consistent with Smart Warmup)X-Accel-Buffering: no header in all streaming responses/v1/messages), OpenAI (/v1/chat/completions), and Gemini native protocol all supportedclaude.rs:L877, openai.rs:L314, gemini.rs:L240[System Recovery] Your previous output contained an invalid signature. Please regenerate the response without the corrupted signature block.
claude.rs:L1012-1030 - Enhanced existing logic, supports String and Array message formatsopenai.rs:L391-427 - Complete implementation, uses OpenAIContentBlock::Text typegemini.rs:L17, L299-329 - Modified function signature to support mutable body, injects repair promptsv3.3.46 (2026-01-20):
ja.json, zh-TW.json, vi.json, ru.json, and tr.json. Added missing translations for account_trend, by_model, etc., ensuring consistent UI presentation across all 8 supported languages.[DONE] is a standard SSE (Server-Sent Events) protocol end signal that frequently appears in code and documentation. Including it as a stopSequence caused unexpected output truncation when the model explained SSE-related content."[DONE]" marker from the Gemini request's stopSequences array.finishReason field, not stopSequence"data: [DONE]" is handled separately in mod.rsARG USE_CHINA_MIRROR build argument. The default mode keeps the original Debian official sources (ideal for overseas/cloud builds); when enabled, it automatically switches to Tsinghua University (TUNA) mirrors (optimized for mainland China).start.sh using pkill to precisely terminate Xtigervnc and websockify processes and clean up /tmp/.X11-unix lock files, resolving various VNC connection issues after restarts./v1/responses) with complex object array input or custom tools like apply_patch (missing schema) caused upstream 400 (INVALID_ARGUMENT) errors.input_text content blocks and mapped the developer role to system instructions.requestId prefix to agent- across all OpenAI paths to resolve ID recognition issues with some clients. interface response bodies, resolving the issue where token consumption was not displayed in traffic logs.apply_patch or local_shell_call) were not being recursively cleaned, leading to 400 errors from Gemini API due to unsupported fields like const or propertyNames.Value::Array types in the JSON Schema processor.v3.3.45 (2026-01-19):
preferred_account_id support in the proxy core, allowing mandatory locking of specific accounts via API or UI.ja.json and vi.json caused by historical PR accumulation.start.sh with X11 lock file cleanup and service crash monitoring for enterprise-grade stability.shm_size: 2gb to eliminate container browser and GUI crashes.storage.json detection to ensure accurate path acquisition before process closure, compatible with custom data directories.localStorage persistence for page size. Manually selected page sizes now permanently lock and override the automatic mode.v3.3.44 (2026-01-19):
Prompt is too long: Historical Thinking Blocks accumulate and exceed token limitsInvalid signature: Proxy restarts clear in-memory signature cache, causing Google to reject old signaturesContextManager Module: Implements token estimation and history purification logicSoft (60%+ pressure): Retains last ~2 turns of Thinking, strips earlier historyAggressive (90%+ pressure): Removes all historical Thinking Blocksthought_signature when purifying Thinking to avoid validation failuresX-Context-Purified: true response header for debuggingv3.3.43 (2026-01-18):
pro_low to "低消費").refresh_msg (hiện đài -> hiện tại).x-goog-api-key Header Support:
x-goog-api-key header.x-api-key.v3.3.42 (2026-01-18):
[Stream Data]. The proxy now intercepts and aggregates stream chunks, restoring scattered delta fragments into complete response content and "thinking" processes for significantly improved debugging.anyOf/oneOf structures in tool definitions. It automatically extracts properties from the richest branch, fixing the long-standing malformed function call error.minLength, pattern, and format are now automatically converted into text hints and appended to the description, preserving semantic information for the model.request.rs, ensuring the stability of historical fixes (e.g., boolean coercion, shell array conversion).v3.3.41 (2026-01-18):
merge_consecutive_messages logic to automatically merge consecutive messages with the same role. This resolves 400 Bad Request errors caused by role alternation violations during Spec/Plan mode switches.EnterPlanMode tool calls, redundant arguments are now forcibly cleared to ensure full compliance with the official protocol, fixing instruction set validation failures.v3.3.40 (2026-01-18):
streaming.rs to stop appending illegal thinking blocks after text blocks. Signatures are now silently cached for recovery.claude.rs to cover signature invalidation, sequence errors, and protocol mismatches. Implemented millisecond-level silent retries with automated session healing.Grep and Glob tools, ensuring query is accurately mapped to path as per Claude Code Schema, with automatic injection of default path ..search), preserving the integrity of original tool call signatures.thought_signature, the proxy now automatically injects a placeholder to satisfy upstream constraints.clean_cache_control_from_messages to strip illegal cache_control tags that disrupt Vertex AI/Anthropic strict mode.v3.3.39 (2026-01-17):
allOf merging, intelligent union type selection, automatic Nullable filtering, and empty object parameter backfill, completely resolving 400 errors caused by complex tool definitions.Search to grep and introduced Glob-to-Include Migration (automatically moving Glob patterns like **/*.rs to the inclusion parameter), resolving Claude Code Error searching files errors.search_code_definitions and other related tools, and enforced boolean type conversion.local_shell_call command parameter to return as an array, enhancing compatibility with Google API.maxOutputTokens based on thinking_budget to satisfy strict API constraints; streamlined Stop Sequences to improve streaming output quality.v3.3.38 (2026-01-17):
is_retry flag to forcibly strip all historical signatures during retry attempts. Coupled with strict model family validation (no more signature mixing between Gemini 1.5 and 2.0), this eliminates 400 errors from invalid signatures.v3.3.37 (2026-01-17):
#[serde(default)] attribute to StickySessionConfig, ensuring that old configuration files (missing sticky session fields) can be correctly loaded, preventing deserialization errors.ApiProxy.tsx. Users now see a loading spinner while fetching configuration, and if loading fails, a clear error message with a retry button is displayed instead of a blank or broken state.kCFPreferencesAnyApplication), causing failure to detect the default browser and blocking OAuth redirects.com.apple.security.temporary-exception.shared-preference.read-only exception to Entitlements.plist, explicitly allowing read access to global configurations.v3.3.36 (2026-01-17):
is_warmup_request logic. The old logic scanned the last 10 historical messages; once any "Warmup" message appeared in history (user-sent or background heartbeat), the system would misidentify all subsequent user inputs (like "continue") as Warmup requests and force an "OK" response.cache_control: {"type": "ephemeral"} fields into Thinking blocks, causing Google API to return Extra inputs are not permitted 400 errors.clean_cache_control_from_messages and integrated it into the Anthropic (z.ai) forwarding path, ensuring all cache_control fields are stripped before sending to upstream APIs.gemini-2.5-flash quota status to gemini-3-flash.gemini-3-flash was triggered for warmup even when it had 0% quota, just because gemini-2.5-flash (unused/different bucket) reported 100%.2.5 -> 3 mapping logic. The scheduler now strictly checks the quota percentage of the specific model itself, triggering warmup only when that actual model reports 100%.gemini-2.5-pro model has been removed from the supported list.gpt-4 family aliases (e.g., gpt-4, gpt-4o) have been remapped to gemini-2.5-flash to ensure service continuity.gemini-2.5-pro via aliases will be automatically routed to gemini-2.5-flash. The model is no longer selectable in the frontend..antigravity.bak. The "Restore" feature intelligently detects these backups and offers to restore the original user configuration instead of just resetting to defaults.PATH but exist in standard fallback locations.where checks) on Windows would briefly pop up a console window. Added CREATE_NO_WINDOW flag to ensure all background checks run silently.auth_mode is set to off, instead of incorrectly showing "Enabled".v3.3.35 (2026-01-16):
settings.json, .claude.json; Codex: auth.json, config.toml; Gemini: .env, settings.json, config.json), ensuring a more complete setup."hasCompletedOnboarding": true into ~/.claude.json during sync, allowing users to skip the initial onboarding/login steps for Claude CLI.window.confirm for "Restore Default Configuration" with the app's themed ModalDialog.RotateCcw, and streamlined status badge text with whitespace-nowrap to prevent layout breaks in tight spaces.collector.rs) in v3.3.34 missed the signature field of thinking blocks when processing content_block_start events, causing signature loss.Invalid signature in thinking block errors during cross-model switches or cold starts.signature field in collector.rs, with unit test test_collect_thinking_response_with_signature.request.rs. Only cached and compatible signatures are used. Unknown or incompatible signatures cause thinking blocks to downgrade to plain text, preventing invalid signatures from being sent.Invalid signature in thinking block errors, supporting cross-model switches and cold start scenarios, ensuring Thinking models work stably in all modes.pendingLogsRef and ID deduplication mechanisms to completely eliminate duplicate entries in the log list.totalCount from the backend with every new log batch, ensuring accurate pagination and total counts./monitor for a more intuitive experience.v3.3.34 (2026-01-16):
/v1/responses and other proprietary endpoints caused Gemini to receive empty bodies when the request body contained only instructions or input but lacked the messages field, as the transformation logic didn't cover all scenarios.handle_completions. The system now forcibly detects Codex-specific fields (instructions/input), and even if messages is empty or missing, automatically transforms them into standard System/User message pairs, ensuring legal upstream requests.session_id extraction and scheduling logic under the OpenAI protocol. Now, whether it's Chat or Codex interface, as long as it's the same conversation, the system will try its best to schedule it to the same Google account.thoughtSignature was incorrectly re-encoded in Base64. This doubled encoding caused Google Vertex AI to fail signature verification, returning an Invalid signature error.Thinking, ToolUse, and ToolResult processing logic, ensuring the signature is passed through to the upstream in its original valid format.useRef, added a manual Refresh button as a backup, and explicitly enabled Tauri event permissions.gemini-pro could not match the backend-defined gemini-3-pro-high strict group.normalize_to_standard_id, ensuring variants like Gemini-3-Pro-High are correctly recognized.gemini-pro/flash in frontend isModelProtected, ensuring lock icons correctly reflect backend protection status.usageMetadata was not mapped to the usage field in OpenAI format, causing clients like Kilo to show zero token usage.usage field to OpenAIResponse.prompt_tokens, completion_tokens, and total_tokens from both streaming (SSE) and non-streaming responses.setBackgroundColor calls on Linux platform.v3.3.33 (2026-01-15):
instructions parameter, ensuring it is correctly injected as System Instructions for better compatibility with tools like Codex.instructions or input fields into Responses mode.gemini-3-pro-low/high/pro to the internal alias gemini-3-pro-preview, with proper restoration to the physical high model name for upstream requests.opus keywords and ensure they route to the high-performance Pro preview tier by default.tool_use.id was lost during OpenAI format conversion, ensuring both functionCall and functionResponse retain original IDs, fixing the Field required error when calling Claude models.reasoning_content field in OpenAI messages, correctly mapping it to internal thought blocks and injecting chain-of-thought signatures.tool role messages, ensuring strict compliance with upstream payload validation.has_available_account() method in TokenManager to comprehensively assess account rate-limit and quota protection status.token_manager.rs: Added has_available_account() method to check for available accounts that are not rate-limited or quota-protectedhandlers/claude.rs: Optimized Fallback mode logic from simple google_accounts == 0 to intelligent availability checkgemini-2.5-flash) didn't match the standard names in the UI (e.g., gemini-3-flash), causing string matching failures and preventing protection triggers.normalize_to_standard_id, mapping all physical model names to three standard protection IDs:
gemini-3-flash: All Flash variants (1.5-flash, 2.5-flash, 3-flash, etc.)gemini-3-pro-high: All Pro variants (1.5-pro, 2.5-pro, etc.)claude-sonnet-4-5: All Claude Sonnet variants (3.5-sonnet, sonnet-4-5, etc.)model_mapping.rs: Added normalization functions.account.rs: Normalizes model names when updating quotas and stores the standard ID.token_manager.rs: Normalizes target_model for matching during request interception.gemini-2.5-flash due to web search, it is correctly normalized to gemini-3-flash and triggers protection.GET /logs endpoint for external access.session_id to warmup requests, limited max_tokens to 8, and set temperature to 0 to reduce resource consumption and avoid 429 errors.INVALID_ARGUMENT errors caused by incorrect block ordering (Text appearing before Thinking) when thinking mode is enabled.
[Thinking, Text, ToolUse] order validation.v3.3.32 (2026-01-15):
TokenManager, resolving inconsistent rate-limit judgments in multi-instance or complex network environments.v3.3.31 (2026-01-14):
token_manager.rs.Elastic-Recovery logic by adding a full-message pre-scanning mechanism for IDs. This prevents the injection of placeholder results when a real one exists later in the history, resolving the Found multiple tool_result blocks with id error.v3.3.30 (2026-01-14):
pattern parameter in description or query fields by adding automatic remapping logic.yes/no, -n, resolving invocation failures caused by type errors in parameters like lineNumbers.sk- and be at least 10 characters long) to prevent invalid input.v3.3.29 (2026-01-14):
stream: true) lacked Function Call processing logic, preventing clients from receiving tool call information.create_openai_sse_stream function only handled text content, thinking content, and images, completely missing functionCall processing.emitted_tool_calls) to prevent duplicate sendsfunctionCall detection and conversion logic in parts loopdelta.tool_calls arraycall_idindex, id, type, function.name, function.arguments)stream: true + tools parameters can now properly receive Function Call data.Prompt is too long errors and returns friendly guidance, directing users to execute /compact.: ping) to prevent connection timeouts during long-running tool calls.<style>, <script>, and inline Base64 resources from browser snapshots.accounts.json.expected value at line 1 column 1 caused by corrupted or empty index files.v3.3.28 (2026-01-14):
reasoning_content accumulation logic in streaming response collector, resolving the issue where Gemini 3 Pro (high/low) non-streaming responses lost thinking content.-thinking (e.g., claude-opus-4-5-thinking, claude-sonnet-4-5-thinking), automatically injecting thinkingConfig to ensure proper thinking content output.thinkingBudget: 16000 configuration for all thinking models (Gemini 3 Pro and Claude thinking series), complying with Cloud Code API specifications.reasoning_content field works properly for Gemini 3 Pro and Claude Thinking models under OpenAI protocol, without affecting Anthropic and Gemini native protocols.ExperimentalConfig, consistent with other config items (mapping, proxy, security, zai, scheduling).experimental field storage and update_experimental() method in AxumServer, automatically triggering hot reload in save_config.~/.antigravity_tools/warmup_history.json, cooldown period remains effective after program restart, resolving state loss issue.gemini-3-flash, claude-sonnet-4-5, gemini-3-pro-high, gemini-3-pro-image), avoiding bloated history records.@tanstack/react-virtual virtual scrolling library, rendering only visible rows (~20-30 rows)v3.3.27 (2026-01-13):
v3.3.26 (2026-01-13):
limit/remaining fields. It now directly uses the percentage field, ensuring that accounts are immediately disabled if any monitored model (e.g., Claude 4.5 Sonnet) falls below the threshold.quota_protection: claude-sonnet-4-5 (0% <= 10%)), facilitating troubleshooting.cache_control field cleanup mechanism, completely resolving "Extra inputs are not permitted" errors caused by cache_control in thinking blocks when using tools like Chrome Dev Tools MCP.
[DEBUG-593] log prefix, recording message and block indices for easy problem localization and debugging.deep_clean_cache_control() function to recursively traverse all nested objects and arrays, removing cache_control fields from any location.cache_control fields are sent to Antigravity.tool_result_compressor module to handle oversized tool outputs, reducing 429 error probability caused by excessive prompt length.
cache_control fields in thinking blocks, while reducing 429 error probability through smart compression of oversized tool outputs.X-Account-Email response header issue in the /v1/images/generations endpoint. The monitoring panel now correctly displays account information for image generation requests.X-Account-Email response header issue in the /v1/images/edits endpoint, ensuring account information for image editing requests is properly logged.X-Account-Email response header issue in the /v1/audio/transcriptions endpoint, completing monitoring support for audio transcription functionality.deploy/headless-xvfb/ directory, providing installation, sync, and upgrade scripts for headless Linux servers.v3.3.25 (2026-01-13):
process.rs.v3.3.24 (2026-01-12):
claude-sonnet-4-5 from "Claude 3.5 Sonnet" to "Claude 4.5 Sonnet".v3.3.23 (2026-01-12):
tray-icon.png) resolution from 22x22 to 44x44, completely resolving blurriness on high-DPI displays (Fix Issue #557).sort_thinking_blocks_first logic to ensure thinking blocks in assistant messages are always placed first, complying with Anthropic API's 400 validation rules.v3.3.22 (2026-01-12):
gemini-3-flash, gemini-3-pro-high, claude-sonnet-4-5), triggers protection only when selected models fall below thresholdclaude-sonnet-4-5 when enabling protection, UI enforces at least one model selectiongemini-3-flash, gemini-3-pro-high, claude-sonnet-4-5, gemini-3-pro-image)SmartWarmup.tsx component with consistent selection experience as quota protectionstatus field index (50x faster stats queries), optimized get_stats() from 3 full table scans to 1 (66% faster)request_body/response_body fields (90%+ data reduction), added get_proxy_logs_paginated command (20 items/page), frontend "Load More" buttonget_proxy_log_detail command, queries full data only on click (0.1-0.5s load time)v3.3.21 (2026-01-11):
paths (array) to path (string), and implemented case-insensitive tool name matching.[Redacted Thinking], preserving context instead of dropping data.last_used_account lock acquisition outside the retry loop, reducing lock operations from 18 to 1-2 per request, dramatically decreasing lock contention in concurrent scenarios.get_token() operations to prevent indefinite hangs during system overload or deadlock.WEBKIT_DISABLE_DMABUF_RENDERER=1) on Linux systems to resolve transparent window rendering or black screen issues in some distributions.n parameter, allowing a single request to return multiple candidates.brew install --cask with automatic AppImage permission configuration.info! to debug!, dramatically reducing log output volume.streaming.rs and response.rs, added cleanup_old_logs() automatic cleanup function.v3.3.15 (2026-01-04):
claude-opus-4-5-thinking for the first request, if there's no valid signature, the system automatically disables thinking mode to avoid API rejection, resolving the "Server disconnected without sending a response" error.cache_control fields from all nested objects/arrays, resolving Anthropic API (z.ai mode) "Extra inputs are not permitted" errors.query → pattern, Read: path → file_path), resolving Claude Code tool call validation errors.GEMINI_SAFETY_THRESHOLD environment variable supporting 5 safety levels (OFF/LOW/MEDIUM/HIGH/NONE), defaulting to OFF for backward compatibility.output_config.effort parameter, allowing fine-grained control over model reasoning effort.v3.3.14 (2026-01-03):
WEB_SEARCH_FALLBACK_MODEL for improved maintainabilityfunctionDeclarations and googleSearchparse_error_count and last_valid_state tracking for streaming response error monitoringhandle_parse_error() for graceful stream degradationreset_error_state() for post-error recoveryget_error_count() for error count retrievalis_forbidden check in lowQuotaCount filter to exclude disabled accountsv3.3.13 (2026-01-03):
thinking: Field required errors.gemini-2.5-flash), Thinking is automatically disabled and historical messages are downgraded to avoid "Corrupted thought signature" errors. Only models with -thinking suffix (e.g., gemini-2.5-flash-thinking) or Claude models support Thinking.quotaResetDelay could not be correctly parsed.
quotaResetDelay from details[0].quotaResetDelay to details[0].metadata.quotaResetDelay, matching Google API's actual JSON structure.parse_duration_string() function to support parsing all time formats returned by Google API, including complex combinations like "2h21m25.831582438s", "1h30m", "5m", "30s", etc.RateLimitReason enum to distinguish between QUOTA_EXHAUSTED (quota exhausted) and RATE_LIMIT_EXCEEDED (rate limit) types, setting different default wait times based on type (quota exhausted: 1 hour, rate limit: 30 seconds)."2h21m25s"), resulting in using a fixed default value of 60 seconds. Accounts were incorrectly considered "recoverable in 1 minute" when they actually needed 2 hours, causing accounts to fall into a 429 loop, using only the first 2 accounts while subsequent accounts were never utilized."2h21m25.831582438s" → 8485 seconds). Accounts are correctly marked as rate-limited and wait for the accurate time, ensuring all accounts can be properly rotated and used, completely resolving the "only using first 2 accounts" issue.v3.3.12 (2026-01-02):
400: thinking.signature: Field required errors when using the Antigravity (Google API) channel.
skip_thought_signature_validator sentinel values to ToolUse and Thinking blocks. Now only uses real signatures or omits the thoughtSignature field entirely.v3.3.11 (2026-01-02):
gemini-3-flash would output confused responses (like "Thinking Process" or "Actually, the instruction says...") in general-purpose clients like Cherry Studio. The generic OpenAI protocol now respects the original user prompt faithfully.maxOutputTokens: 64000 for Gemini requests. This forced setting caused standard Gemini 3 Flash/Pro models (limit 8192) to reject requests and return empty responses, triggering 'NoneType' object has no attribute 'strip' errors in Python clients. The proxy now defaults to the model's native limit or respects client parameters.maxOutputTokens: 64000 for Gemini requests. This override caused standard Gemini 3 Flash/Pro models (limit 8192) to reject requests with empty responses, leading to 'NoneType' object has no attribute 'strip' errors in Python clients. The proxy now defaults to model native limits or respects client parameters.--user-data-dir pathdata/user-data directoryallow_methods from generic Any to explicit method list (GET/POST/PUT/DELETE/HEAD/OPTIONS/PATCH), improving browser environment compatibility.max_age(3600) configuration to cache CORS preflight requests for 1 hour, reducing unnecessary OPTIONS requests and improving performance.allow_credentials(false) configuration, following security best practices when used with allow_origin(Any).@dnd-kit library, supporting keyboard navigation and accessibility features.v3.3.10 (2026-01-01):
prod → daily dual-endpoint fallback strategy. Automatically switches to backup endpoint when primary returns 404/429/5xx, significantly improving service availability.pool_max_idle_per_host(16), tcp_keepalive(60s) and other parameters to optimize connection reuse and reduce establishment overhead, especially optimized for WSL/Windows environments./api/event_logging/batch, /healthz) from INFO to TRACE, completely eliminating log noise.RUST_LOG=debug to view full request/response JSON for deep debugging.-2k resolution via model name suffixes for higher definitions.-21x9 (or -21-9) aspect ratio, perfect for ultra-wide displays.2560x1080.POST /v1/models/detect to reveal model capabilities and configuration variants in real-time./v1/models API now dynamically lists all resolution and aspect ratio combinations for image models (e.g., gemini-3-pro-image-4k-21x9).gemini-2.0-flash-exp to gemini-2.5-flash-lite, resolving 404 errors for title generation, summaries, and other background tasks.gemini-2.5-flash-lite.v3.3.9 (2026-01-01):
Scheduling Mode now formally covers OpenAI, Gemini Native, and Claude protocols.quotaResetDelay and automatic 20s cooling isolation for 500/503/529 errors.v3.3.8 (2025-12-31):
Proxy Monitor Module (Core Thanks to @84hero PR #212):
UI Optimization & Layout Improvements:
Zai Dispatcher Integration (Core Thanks to @XinXin622 PR #205):
Exclusive, Pooled, and Fallback modes to balance response speed and account security.Automatic Account Exception Handling (Core Thanks to @salacoste PR #203):
invalid_grant), preventing proxy failures caused by repeated attempts to use broken accounts.Dynamic Model List API (Intelligent Endpoint Optimization):
/v1/models (OpenAI) and /v1/models/claude (Claude) endpoints now aggregate built-in and custom mappings in real-time. Changes in settings take effect instantly.gemini-3-pro-image-4k-16x9 and all custom IDs in terminals or clients.Quota Management & Intelligent Routing (Operational Optimization & Bug Fixes):
TokenManager session locking. In high-concurrency scenarios (e.g., Agent mode), ensures stable account assignment for requests within the same session.v3.3.7 (2025-12-30):
pattern) are now moved to descriptions, preventing Gemini schema rejection.gemini-2.5-flash for 100% success rate.thoughtSignature extraction and persistence, resolving 400 errors caused by missing signatures in multi-turn chats.v3.3.6 (2025-12-30):
/v1/images/generations, including parameters like model, prompt, n, size, and response_format./v1/images/edits and /v1/images/variations endpoints.v3.3.5 (2025-12-29):
429 (rate limit), 403 (forbidden), and 401 (expired) errors. Retries now force-bypass the 60s session lock to rotate to the next available account in the pool, implementing a true failover.2025-12-29T22:50:41+08:00) instead of UTC, making logs more intuitive for users.v3.3.4 (2025-12-29):
input_image block parsing and added support for file:// local paths with automatic Base64 conversion.cache_control) and added context backfilling for thoughtSignature.v3.3.3 (2025-12-29):
thought: true markers in historical ContentBlock::Thinking messages. This issue led to 400 INVALID_REQUEST_ERROR regardless of whether thinking was explicitly enabled, especially in multi-turn conversations.v3.3.2 (2025-12-29):
web_search_tool_result content blocks. Structured search citations and source links now display correctly in compatible clients like Cherry Studio.thoughtSignature storage mechanism. The system now captures real-time signatures from streaming responses and automatically backfills them for subsequent requests missing signatures, significantly reducing 400 INVALID_ARGUMENT errors.GroundingMetadata structures, resolving type conflicts and parsing anomalies identified during PR #128 integration.thoughtSignature across fragmented streaming chunks.v3.3.1 (2025-12-28):
cache_control tags or thought: true fields in historical messages. Optimized with a "historical message de-thinking" strategy to bypass parsing bugs in the Google API compatibility layer.pattern, minLength, maximum) are now automatically migrated to description fields, ensuring compliance while preserving semantic hints.role tags from system instructions and enhanced explicit filtering for cache_control to guarantee maximum payload compatibility.googleSearchRetrieval and other next-gen tool definitions. Now provides standardized googleSearch payload mapping, ensuring seamless integration with Cherry Studio's built-in search toggle.[undefined] properties injected by clients like Cherry Studio, resolving 400 INVALID_ARGUMENT errors at the source.[USER] for real conversations, [AUTO] for background tasks.v3.3.0 (2025-12-27):
/v1/responses endpoint and intelligent instruction conversion (SSOP) for shell tool calls.thoughtSignature storage and backfilling logic, completely resolving signature validation errors when using Claude CLI with Gemini 3 series models./v1/completions and /v1/responses routes, ensuring compatibility with legacy OpenAI clients.127.0.0.1 (localhost-only), ensuring privacy and security by default.allow_lan_access configuration toggle; when enabled, listens on 0.0.0.0 to allow LAN device access.v3.2.8 (2025-12-26):
content format mismatch when sending image requests to vision models (e.g., gemini-3-pro-image) via OpenAI protocol.inlineData, providing the same image processing power as the Claude protocol.v3.2.7 (2025-12-26):
propertyNames, const, anyOf, oneOf, allOf, if/then/else, not and other advanced JSON Schema fields commonly used by MCP tools but unsupported by Gemini, completely resolving 400 errors when using MCP tools with Claude Code v2.0.76+.["string", "null"]) to downgrade to single types, resolving "Proto field is not repeating" errors.pattern, etc.import_custom_db command registration. Users can now properly select custom state.vscdb files for account import.RetryInfo parsing to strictly follow Google API retry instructions with added safety redundancy, effectively reducing account suspension risks.image_gen requests, enabling high-speed rotation across multiple accounts and completely resolving Imagen 3 429 errors.v3.2.6 (2025-12-26):
mkdir, automatically maps empty outputs to explicit success signals, resolving task flow interruptions and hallucinations in Claude CLI.stopSequences for proxy links, precisely cutting off streaming output and completely resolving parsing errors caused by trailing redundancy.GoogleSearch and FunctionCall, and implemented automatic tool stripping during background task redirection (Token Saver), completely eliminating 400 Tool Conflict (Multiple tools) errors.RetryInfo to wait and retry automatically when rate-limited, reducing unnecessary account rotation./resume 400 signature errors, improving session recovery success.enumCaseInsensitive and other extension fields.mappers test modules, and added new tests for content block merging and empty output completion.v3.2.1 (2025-12-25):
state.vscdb file path, facilitating data recovery from backups or custom locations.project_id to the local database in real-time during quota refresh.functionCall results (e.g., search) for both streaming and non-streaming responses, completely resolving the "empty output" error.<thought> tags, ensuring no loss of inference information.stop sequences, response_format (JSON mode), and custom tools.multipleOf, exclusiveMinimum, pattern, const, if-then-else), resolving 400 errors when CLI tools invoke tools via API.assistant messages must start with a thinking block when Thinking is enabled. Now supports automatic injection of placeholder thinking blocks and automatic restoration of <thought> tags from text, ensuring stability for long conversations in advanced tools like Claude Code.system messages caused errors.v3.2.0 (2025-12-24):
proxy subsystem with decoupled mappers, handlers, and middleware for superior maintainability.SIGTERM with SIGKILL fallback.brew install --cask antigravity.See Releases for earlier history.
Special thanks to all developers who have contributed to this project.
This project has referenced or learned from the ideas or code of the following excellent open-source projects during its development (in no particular order):
License: CC BY-NC-SA 4.0. Strictly for non-commercial use.
Security: All account data is encrypted and stored locally in a SQLite database. Data never leaves your device unless sync is enabled.
If you find this tool helpful, please give it a ⭐️ on GitHub!
Copyright © 2025 Antigravity Team.