docs/gemini.md
Gemini uses the Gemini CLI OAuth credentials and private quota APIs. No browser cookies.
OAuth-backed quota API (only path used in fetch())
~/.gemini/settings.json.oauth-personal (or unknown → try OAuth creds).api-key, vertex-ai (hard error).Legacy CLI parsing (parser exists but not used in current fetch path)
GeminiStatusProbe.parse(text:) can parse /stats output.~/.gemini/oauth_creds.json.access_token, refresh_token (optional), id_token, expiry_date.gemini binary, then search for:
.../libexec/lib/node_modules/@google/gemini-cli/node_modules/@google/gemini-cli-core/dist/src/code_assist/oauth2.js.../node_modules/@google/gemini-cli-core/dist/src/code_assist/oauth2.jsOAUTH_CLIENT_ID and OAUTH_CLIENT_SECRET from oauth2.js.POST https://cloudcode-pa.googleapis.com/v1internal:retrieveUserQuota{ "project": "<projectId>" } (or {} if unknown)Authorization: Bearer <access_token>cloudaicompanionProject from loadCodeAssist.GET https://cloudresourcemanager.googleapis.com/v1/projects
gen-lang-client* or label generative-language.POST https://cloudcode-pa.googleapis.com/v1internal:loadCodeAssist{ "metadata": { "ideType": "GEMINI_CLI", "pluginType": "GEMINI" } }POST https://oauth2.googleapis.com/tokenclient_id, client_secret, refresh_token, grant_type=refresh_token.remainingFraction, resetTime, modelId.remainingFraction wins.percentLeft = remainingFraction * 100.resetTime parsed as ISO-8601, formatted as "Resets in Xh Ym".loadCodeAssist:
standard-tier → "Paid"free-tier + hd claim → "Workspace"free-tier → "Free"legacy-tier → "Legacy"id_token JWT claims.Sources/CodexBarCore/Providers/Gemini/GeminiStatusProbe.swift