CHANGELOG_EN.md
Complete version history for Antigravity Tools. Return to project home at README_EN.md.
store:false in the HTTP Responses path, avoids creating redundant session snapshots and background save tasks, significantly reducing memory growth during large-context replays.store:false while still emitting full tool-call arguments, and hardens non-streaming history persistence with store_response guard.RESOURCE_EXHAUSTED for specific models are properly detected and not reused.GraceRetry and unbinds the session immediately, breaking infinite retry loops in Balance and CacheFirst modes.gemini-3.7-flash) to standard quota bucket IDs (gemini-3-flash) before evaluating thresholds, restoring quota protection functionality."Continue the task.") to satisfy Google Gemini API turn-ordering requirements.reasoning_effort parameters to upstream Gemini thinkingLevel for tiered Flash models.usage object ({input_tokens: 0, output_tokens: 0}) to prevent type validation errors on strict clients like OpenCode and @ai-sdk/anthropic.POST /accounts/switch omitted the target_ide field and hardcoded None, preventing agy CLI and automation scripts from hitting the pre-existing keyring-only fast path. Passing {"targetIde": "agy"} now updates credentials quietly without killing and relaunching the running Antigravity IDE.cleanup_old_logs calculated the 30-day cutoff using seconds (timestamp()) while request logs were stored in milliseconds (timestamp_millis()), causing expiration queries to never match and old logs to never be purged. Unified retention cutoff calculations to milliseconds (now.timestamp_millis() - days * 24 * 3600 * 1000).VACUUM executed on every ProxyMonitor startup initialization. Compaction is now only triggered when a meaningful batch of records is purged (deleted >= 500), while gracefully tolerating non-fatal compaction errors. Completely eliminates sustained 100% disk active time and system freeze caused by repeatedly rewriting multi-gigabyte log databases when 0 records are deleted.Ascending -> Descending -> Default). In Weekly Quota mode, automatically extracts the earliest reset timestamp across Gemini and Claude model quota groups, allowing users to prioritize accounts that will recover quota soonest.@dnd-kit drag gestures and updates the grip handle tooltip when column sorting is active, preventing accidental sort-order conflicts.GDK_BACKEND=x11 solely because DISPLAY is present: niri / Hyprland / sway / river / labwc / wayfire always expose an Xwayland compatibility bridge. Previously, detecting DISPLAY forced X11 backend, causing WebKitGTK UI to render completely black. Those compositors now retain native Wayland, while GNOME / KDE historical X11 fallback remains intact.WEBKIT_DISABLE_DMABUF_RENDERER=1 if unset to prevent black windows. GNOME + AMD/Intel continues using the hardware-accelerated DMA-BUF fast path. Existing user environment variables are never overridden.400 thinking.signature: Field required on Non-Thinking Suffix Claude Models in Multi-Turn Dialogues (Issue #3391):
-thinking suffix, allowing base models like claude-sonnet-4-6 with explicit thinking: { type: "enabled" } to bypass thinking-signature defenses.reasoning_content and valid signatures, Claude thinking requests safely downgrade to non-thinking mode and prevent injecting synthetic thought blocks that fail upstream signature verification.openai_req.thinking and strips -thinking suffix when 400 signature errors occur, guaranteeing that subsequent retry attempts run purely in standard text mode rather than looping on repeated 400 errors.process_function_call skipping input_json_delta when tools have empty or no arguments (such as EnterPlanMode), which caused incomplete tool use blocks that leaked tool input syntax into regular text content or triggered client parse errors; now guarantees emitting input_json_delta with partial_json: "{}".emit_force_stop() which was blocked by internal message_stop_sent guard, preventing termination events from being emitted; explicitly dispatches message_delta and message_stop events to ensure Claude clients gracefully finish turns without looping infinitely.!has_tool_calls check prevented compressing historical assistant reasoning_content in agent environments (e.g. OpenClaw) where almost every assistant turn contains tool calls. Allows pruning long thoughts down to placeholder ... while fully preserving tool calls and their valid thoughtSignature tokens, eliminating token bloat and preventing upstream Google API 400 signature errors.openai/request.rs to generate a minimal placeholder thought block { "text": "...", "thought": true } for historical assistant thinking in older turns outside the recent window, fulfilling upstream thinking schema requirements while discarding thousands of redundant thinking tokens.prepare_session_input with semantic prefix matching (ignoring client ID format differences) and sliding suffix boundary identification. Added fallback protection: when client sends full history and matches fail, uses client's full sequence instead of appending client history onto server history, eliminating exponential history compounding (2x/4x).video_url / inlineData) in OpenAI-Compatible API (Issue #3381):
video_url: Extended OpenAIContentBlock to natively deserialize and process video_url blocks, resolving Invalid request: data did not match any variant of untagged enum OpenAIContent when clients send video inputs.proxy/video) supporting base64 data URLs (data:video/mp4;base64,...), remote video URLs (fileData), local files (file:// or filesystem paths automatically encoded to inlineData), and raw base64. Covers MP4, WebM, MOV, AVI, WMV, MKV format normalization, oversize advisory warnings, and token estimation.call:default_api:ToolName{...}) into plain text deltas instead of structured functionCall blocks, silently breaking Claude Desktop / Claude Code agent loops. Enforced a 7-point strict fail-closed guard sequence (registered tools required, no native tool use in current turn, strict prefix match, registered tool whitelist alignment, no surrounding prose, valid JSON args, no prior text deltas emitted) to securely recover leaked calls into standard tool_use blocks without prompt injection risks.streaming.rs) and non-streaming responses (response.rs), added diagnostic warning logs (tracing::warn) when text patterns are detected, and reinforced stability with 9 unit test scenarios.query.where: { type: "array", items: { type: "array" } }). The recursive JSON schema sanitization now injects a Gemini-compatible {"type": "string"} fallback for itemless array nodes, backed by unit regression tests.type: "error" structure with error: { "type": "overloaded_error", "message": ... } emitted via state.emit("error", ...), ensuring Claude clients reliably catch and handle stream aborts.VariantType::ClaudeThinking support for claude-opus-4-5 and claude-opus-4-6 base model definitions. This resolves an issue where selecting base model IDs yielded no thinking tiers in dropdown selectors. Also aligned Gemini3Pro variant ordering.resources/app/package.json directly from the installation directory, preventing executing --version from inadvertently launching the Chromium/Electron GUI window.APPIMAGE, APPDIR, ARGV0, LD_LIBRARY_PATH, GTK_PATH, etc.) are stripped, and /tmp/.mount_* paths are filtered from XDG_DATA_DIRS to avoid inheriting conflicting runtime libraries.tauri-plugin-window-state configuration to exclude StateFlags::VISIBLE. This prevents the window from popping up on autostart or tray background launches when configured with visible: false.update_account_json to an async function that dispatches synchronous disk I/O and global account locks to Tokio's blocking thread pool (spawn_blocking). This prevents disk serialization contention from blocking Tokio worker threads and causing runtime starvation under high concurrency.get_token scheduling path, file persistence after OAuth token refreshes and project_id resolution is now offloaded to background tasks after updating memory caches immediately, preventing disk write overhead from consuming the 5-second timeout window.message_start, fallback text ContentBlock, and message_stop events, eliminating peek loop timeouts.collect_stream_to_json always returns at least one valid text ContentBlock when parsing empty upstream streams, complying strictly with Anthropic client non-empty content constraints.x-goog-user-project headers on content requests to ensure proper upstream PA service authentication.trailing characters at line ...), the parser automatically recovers the valid full Account data and atomically rewrites a clean file back to disk, completely preventing accounts from silently disappearing from the UI and causing cascading 429 rate limit outages.ACCOUNT_FILE_LOCKS) to ensure strict serialized thread safety across concurrent quota refreshes, 429 rate-limit event writes, and last_used touch operations.resolveQuotaModels. When a pinned selector matches a real quota model name (such as gemini-3.7-flash-low, gemini-3.7-flash-high, etc.), it renders as an independent discrete chip (model:${id}) instead of being collapsed and deduplicated into a single legacy category:gemini-flash slot that was hardcoded to older models.to_lowercase() matching in Claude protocol and common handlers to capture all Google thought signature error variants (Invalid thought signature., thought_signature, thoughtsignature), reliably triggering automatic retry and signature stripping.gemini-3.x (Flash / Pro families) and gemini-3.7 in is_model_compatible, ensuring thought signatures persist correctly across laddered variant turns.error! logs when load_app_config() fails in lib.rs, converting silent exits into actionable error logs and clarifying that services were not started.tokio::spawn(async {}) handles from ProxyServiceInstance, leaving unified lifecycle management to AdminServerInstance.{{name}}, {{error}} interpolation parameters to avoid runtime UI render issues.gemini-3.7-flash, gemini-3.1-flash-lite, claude-opus-4-6, gpt-oss-120b-medium with @lobehub/icons official brand icons.useProxyModels to eliminate duplicate model entries caused by sub-tier suffixes.ClaudeThinking reasoning variants for Claude models and disabled unsupported max variants for Gemini 3 series.DETACHED_PROCESS with CREATE_NO_WINDOW (0x08000000) across Cloudflared, tar decompression, and manual executable calls to eliminate console windows popping up.std::process::Command and tokio::process::Command extensions.ContextManager compressed thinking content to "...", it preserved the original thoughtSignature, causing Google API to fail validation with 400 INVALID_ARGUMENT: Invalid thought signature._is_valid_version() semantic version format validation and switched Method 2 to curl -w '%{url_effective}' to avoid header parsing whitespace issues.thoughtSignature placeholders to prevent context from exceeding the 1M token ceiling.usageMetadata, middleware uses the local token estimation engine to calculate input_tokens, preventing blank token stats in monitor logs.const Keyword Normalization for Computer Use MCP (Issue #3327):
{"const": "value"} into standard {"type": "...", "enum": ["value"]} compatible with Gemini/Vertex Schema Proto.anyOf/oneOf unions and deeply nested objects containing const fields.response_format.json_schema Structured Outputs (PR #3324):
response_format: { type: "json_schema", json_schema: { ... } }.$ref/$defs definitions, converting schemas into Gemini generationConfig.responseSchema standards with responseMimeType: "application/json".https://cp.cloudflare.com/generate_204 via standard HTTPS CONNECT tunnels, eliminating false 407 Proxy Authentication Required errors.username and password from http(s)://user:pass@ip:port proxy URLs and injects HTTP Basic Auth.gemini-3.7-flash, gemini-3.7-flash-low, gemini-3.7-flash-medium, gemini-3.7-flash-high, and gemini-3.7-flash-tiered.input_audio (Base64 + format) and audio_url, converting seamlessly to Gemini inlineData/fileData.wav, mp3, m4a, ogg, flac, aiff from Data URLs, remote HTTP links, local files, and raw Base64.invalid_grant and disables accounts only after 2+ consecutive confirmed failures.validation_url / appeal_url from Google RPC responses and flags accounts in the UI with a quick-action verification button.