Nikketryhard b3af73cebd feat: sync all endpoints with MITM LS bypass + real-time thinking streaming
- Responses API (streaming): MITM bypass path polls MitmStore directly
  when custom tools are active, skipping LS step polling entirely.
  Streams thinking text deltas in real-time as they arrive from the MITM.
  Handles function calls, text response, and thinking/reasoning events.

- Responses API (sync): Same MITM bypass for non-streaming responses.
  Polls MitmStore for function calls or completed text before falling
  back to LS path.

- Gemini endpoint: MITM bypass polls MitmStore directly for tool call
  responses, eliminating LS overhead.

- MitmStore: Added captured_thinking_text field with set/peek/take methods
  for real-time thinking text capture from MITM SSE.

- MITM proxy: Now captures both thinking_text and response_text from
  StreamingAccumulator into MitmStore when bypass mode is active.
2026-02-15 01:03:39 -06:00

Antigravity Proxy

OpenAI-compatible proxy that intercepts and relays requests to Google's Antigravity language server, impersonating the real Electron webview.

Quick Start

# Build
cargo build --release

# Run (language server must be running)
RUST_LOG=info ./target/release/antigravity-proxy

# Custom port
RUST_LOG=info ./target/release/antigravity-proxy --port 9000

Default port: 8741

Endpoints

Method Path Description
POST /v1/responses Responses API (primary) — supports stream: true/false
POST /v1/chat/completions Chat Completions API (OpenAI compat shim)
GET /v1/models List available models
GET /v1/sessions List active sessions
DELETE /v1/sessions/:id Delete a session
POST /v1/token Set OAuth token at runtime
GET /v1/usage MITM-intercepted token usage stats
GET /v1/quota LS quota — credits, per-model rate limits, reset timers
GET /health Health check

Available Models

Name Label
opus-4.6 Claude Opus 4.6 (Thinking) — default
opus-4.5 Claude Opus 4.5 (Thinking)
gemini-3-pro-high Gemini 3 Pro (High)
gemini-3-pro Gemini 3 Pro (Low)
gemini-3-flash Gemini 3 Flash

Example: Responses API

Sync

curl -s http://localhost:8741/v1/responses \
  -H "Content-Type: application/json" \
  -d '{
    "model": "gemini-3-flash",
    "input": "Say hello in exactly 3 words",
    "stream": false,
    "timeout": 60
  }' | jq .

Streaming

curl -N http://localhost:8741/v1/responses \
  -H "Content-Type: application/json" \
  -d '{
    "model": "gemini-3-flash",
    "input": "Say hello in exactly 3 words",
    "stream": true,
    "timeout": 60
  }'

Multi-turn (session reuse)

# First message
curl -s http://localhost:8741/v1/responses \
  -H "Content-Type: application/json" \
  -d '{
    "model": "gemini-3-flash",
    "input": "What is 2+2?",
    "conversation": "my-session-1",
    "stream": false
  }' | jq .

# Follow-up in same cascade
curl -s http://localhost:8741/v1/responses \
  -H "Content-Type: application/json" \
  -d '{
    "model": "gemini-3-flash",
    "input": "Now multiply that by 10",
    "conversation": "my-session-1",
    "stream": false
  }' | jq .

Authentication

The proxy needs an OAuth token. Three ways to provide it:

  1. Environment variable: export ANTIGRAVITY_OAUTH_TOKEN=ya29.xxx
  2. Token file: echo 'ya29.xxx' > ~/.config/antigravity-proxy-token
  3. Runtime API: curl -X POST http://localhost:8741/v1/token -d '{"token":"ya29.xxx"}'

Stealth Features

  • TLS fingerprint: BoringSSL with Chrome JA3/JA4 + H2 fingerprint via wreq (version auto-detected)
  • Protobuf: Hand-rolled encoder producing byte-exact match to real webview traffic
  • Warmup: Mimics real webview startup RPC calls
  • Heartbeat: Periodic keep-alive matching real webview lifecycle
  • Jitter: Randomized polling intervals to avoid automation fingerprint
  • Session reuse: Cascades are reused for multi-turn, matching real webview behavior
  • Version detection: Auto-detects Antigravity/Chrome/Electron versions from installed app

MITM Proxy

Built-in TLS-intercepting proxy captures real token usage from LS ↔ Google/Anthropic traffic. Disabled with --no-mitm.

Setup

# 1. Start proxy (generates CA cert automatically)
RUST_LOG=info ./target/release/antigravity-proxy

# 2. Install wrapper (patches LS binary to route through MITM)
sudo ./scripts/mitm-wrapper.sh install

# 3. Restart Antigravity — done!

# Check status
./scripts/mitm-wrapper.sh status

# Uninstall
sudo ./scripts/mitm-wrapper.sh uninstall

Usage Stats

curl -s http://localhost:8741/v1/usage | jq .

Standalone Language Server

Launch an isolated LS instance for experimentation:

# Basic test (starts, checks quota, exits)
./scripts/standalone-ls.sh

# Foreground mode (stays alive)
./scripts/standalone-ls.sh --fg

# With MITM traffic interception
./scripts/standalone-ls.sh --mitm

# Capture a clean traffic snapshot
./scripts/standalone-ls.sh --snapshot

# Snapshot with custom prompt
./scripts/standalone-ls.sh --snapshot --prompt "Explain quantum computing"

The standalone LS shares the main Antigravity app's OAuth (via its extension server) but has its own port, data directory, and cascades.

Traffic Snapshots

The --snapshot flag captures all HTTP/2 traffic and formats it into a clean, color-coded report:

══════════════════════════════════════════════════════════════════════
  STANDALONE LS TRAFFIC SNAPSHOT
══════════════════════════════════════════════════════════════════════

▸ Outbound Connections
  → antigravity-unleash.goog    (Feature Flags)
  → play.googleapis.com         (Telemetry)

══════════════════════════════════════════════════════════════════════
  antigravity-unleash.goog — Feature Flags
══════════════════════════════════════════════════════════════════════

  → POST /api/client/register
    authorization: *:production.e4455...
    unleash-appname: codeium-language-server
    Body (561 bytes, JSON):
      {"appName":"codeium-language-server","instanceId":"..."}

Architecture

graph LR
    A[Your App<br/>OpenAI SDK] -->|HTTP| B[Proxy<br/>:8741]
    B -->|gRPC| C[Language<br/>Server]
    C -->|HTTPS| D[Google /<br/>Anthropic]
    E[MITM Proxy<br/>:8742] -.->|intercept| D
    C -.->|routed via| E

CLI Flags

antigravity-proxy [OPTIONS]

Options:
  --port <PORT>          API server port (default: 8741)
  --no-mitm              Disable MITM proxy
  --mitm-port <PORT>     Override MITM proxy port (default: auto)

License

Private. Do not distribute.

Description
OpenAI-compatible proxy that intercepts and relays requests to Google's Antigravity language server, impersonating the real Electron webview.
Readme MIT 3.9 MiB
Languages
Rust 98.6%
Shell 0.7%
C 0.4%
PowerShell 0.3%