All notable changes to this project will be documented in this file.
The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.
- Dynamic Model Discovery: Per-key model fetching with 6-hour refresh cycle (
MODEL_FETCH_INTERVAL=21600000)- Eliminates stale model errors (e.g., experimental models like
gemini-2.0-flash-exp) - Request-driven discovery when model unknown
- Automatic removal of models no longer available
- Eliminates stale model errors (e.g., experimental models like
- Cross-Source Routing: Automatic failover across API keys → Antigravity OAuth → Gemini CLI OAuth
- Configurable source preference order
- Dynamic discovery across all sources
- Unified model availability
- Model Aliasing System: Create user-friendly aliases for frequently-used models
- CLI commands:
geminitro alias add/remove/list - Stored in
.geminitro/models.json - Transparent resolution in request flow
- Example:
flash→gemini-2.0-flash
- CLI commands:
- Quota Groups: Share quota limits across model variants
- CLI commands:
geminitro quota-group add/remove/list - Default groups for Gemini CLI and Antigravity models
- When one model hits quota, entire group enters cooldown
- CLI commands:
- Background Quota Refresh: Proactive 5-minute polling for OAuth keys (
QUOTA_REFRESH_INTERVAL=300000)- Filters keys with <5% quota remaining before making requests
- Prevents rate limit errors
- OAuth-only feature (Antigravity, Gemini CLI)
- Proper Case Normalization: Consistent "Gemini 2.0 Flash" formatting across all sources
- User input normalized to Proper Case
- Converted to kebab-case for API calls
- Works with API keys, Antigravity OAuth, and Gemini CLI OAuth
geminitro alias add <name> <target>- Create model aliasgeminitro alias remove <name>- Remove model aliasgeminitro alias list- List all aliasesgeminitro quota-group add <name> <models...>- Create quota groupgeminitro quota-group remove <name>- Remove quota groupgeminitro quota-group list- List all quota groups
MODEL_FETCH_INTERVAL- Model refresh interval (default: 6 hours)QUOTA_REFRESH_INTERVAL- OAuth quota polling interval (default: 5 minutes)
services/aliasService.js- Model aliasing CRUD operationsservices/quotaGroupService.js- Quota group managementservices/quotaRefreshService.js- Background quota polling servicesrc/cli/migrateModelsJson.js- Auto-migration script formodels.jsonschemautils/modelNormalizer.js- Proper Case ↔ kebab-case conversion utilities
- Model Fetch Interval: Increased from 1 hour to 6 hours for better performance
- models.json Schema: Migrated from array format to object with
models,aliases, andquotaGroups- Auto-migration runs on server startup with timestamped backup
- Fully backward compatible
- Key Selection: Enhanced
getOptimalKeyWithDiscovery()with cross-source routing logic - Model Normalization: All models displayed in Proper Case, sent to API in kebab-case
- Critical Bug: Removed
thought_signaturefield from function calling (rejected by Gemini API in gemini-2.5-pro) - Stale Models: Dynamic discovery prevents "all keys exhausted" errors for experimental models
- OAuth Fallback: Cross-source routing ensures OAuth sources are tried when API keys exhausted
- Added 14 new unit tests (74 total across 13 test suites)
tests/keyService.crossSource.test.js- 7 tests for cross-source routingtests/keyService.dynamicDiscovery.test.js- 7 tests for dynamic model discovery- All tests passing with 100% backward compatibility
Automatic - No manual action required. On first startup after upgrade:
- Server detects legacy
models.jsonarray format - Creates timestamped backup (e.g.,
models.json.backup.1234567890) - Migrates to new schema:
{ models: [...], aliases: {}, quotaGroups: {...} } - Pre-configures default quota groups for Antigravity and Gemini CLI
None. Fully backward compatible with existing configurations.
1.5.5 - 2026-02-25
- UI Improvements: Refined the log expansion toggle to appear as a "tab flap" anchored to the dark logs box for improved aesthetics and logical grouping.
1.5.4 - 2026-02-25
- UI Improvements: Corrected the positioning of the "Expand/Collapse All" toggle in the dashboard logs to sit in the gap above the log box.
1.5.3 - 2026-02-25
- UI Improvements: Repositioned the "Expand/Collapse All" (+) button in the dashboard logs to a floating position on the dark logs box for a cleaner layout.
- Settings Persistence: Implemented
.envpersistence for Verbose Logging and refactored settings updates for better reliability.
1.5.2 - 2026-02-25
- Account Persistence: Fixed issue where account types (Antigravity vs Gemini CLI) were not persisting after restart by adding
sourcefield to persistence layer. - Reliability: Optimized
saveKeysto be synchronous to prevent race conditions during state updates.
1.5.1 - 2026-02-25
- Account Selection: Refactored
getOptimalKeyto strictly honorsupportedModelsand prevent fallback to accounts that explicitly exclude the requested model.
1.5.0 - 2026-02-25
- Antigravity OAuth: Sign in with Google via OAuth for Antigravity accounts
- Gemini CLI OAuth: Use existing Gemini CLI credentials with OAuth flow
- Manual Token Entry: Support for manually entering refresh tokens via dashboard and CLI
- Auto-import: Detect and import existing Antigravity accounts from OpenCode config
- Browser-based Setup Wizard: Interactive first-run flow with OAuth options
- CLI Commands:
geminitro key oauth-antigravity,geminitro key oauth-gemini-cli,geminitro key import-antigravity
- Antigravity: 3-tier discovery strategy (loadCodeAssist API → GitHub spec → hardcoded fallback)
- Gemini CLI: Direct retrieveUserQuota API for accurate model lists
- Separate Logic: Each account type uses its own appropriate discovery method
- Dynamic Refresh: Models are discovered and cached per account on addition
- Tool Calls: Full function calling support with proper argument validation
- Reasoning Effort: Maps OpenAI o-series
reasoning_effortto GeminithinkingConfig.budgetTokens - Extended Thinking: Supports Claude-style
thinking.budget_tokenspassthrough for Antigravity - Usage Telemetry: Accurate token usage tracking per request via
stream_options.include_usage - Schema Validation: Strict JSON schema sanitization to prevent Gemini API "Unknown name" errors
- Account Management: Visual distinction for API Key, Antigravity, and Gemini CLI accounts
- Logo Assets: Display account type with appropriate logos (AI Studio, Antigravity, Gemini CLI)
- OAuth Flow: In-dashboard OAuth initiation with state persistence and callback handling
- Live Updates: Real-time account status updates via Socket.IO
- Add Key Modal: Unified modal with OAuth options matching setup wizard design
- Setup Wizard: OAuth options alongside traditional API key entry
services/antigravityService.js- Complete Antigravity/Gemini CLI API integrationservices/oauthService.js- OAuth flow management, token exchange, refresh token handling
- Key Pool: Now supports mixed account types (API keys + OAuth accounts)
- Model Refresh: Separate discovery logic per account type instead of unified approach
- Dashboard UI: "Add Key" button changed to "+ Add" for consistency
- Setup Flow: Enhanced first-run experience with OAuth options
- Model discovery for Antigravity accounts now uses original 3-tier strategy (loadCodeAssist → GitHub → hardcoded)
- Gemini CLI accounts no longer receive incorrect Antigravity model lists
- JSON schema validation errors resolved by stripping unsupported keywords (
const,default,pattern,$schema) - Tool call IDs now properly preserved and passed through to satisfy Antigravity/Claude backend requirements
- Role-alternation grouping implemented to resolve payload validation issues
- Strict allow-list for tool parameter schema keys to prevent "Unknown name" errors
- Added OAuth setup instructions to README
- Updated
.env.examplewith OAuth client credentials - Implementation plans in
docs/plans/2026-02-23-oauth-authentication.mdanddocs/plans/2026-02-24-oauth-model-discovery.md
1.4.4 - 2026-02-24
- Minor improvements and bug fixes
1.4.3 - 2026-02-23
- Dashboard and agent setup enhancements
1.4.2 - 2026-02-22
- Agent registration improvements
1.4.1 - 2026-02-21
- Auto-detect coding agents with multi-select install
1.4.0 - 2026-02-20
- Major feature release with improved agent support
1.3.3 - 2026-02-19
- Multimodal content support improvements
1.3.2 - 2026-02-18
- Port conflict resolution
1.3.1 - 2026-02-17
- Auto-create .env and build dashboard on fresh install
1.3.0 - 2026-02-16
- Initial dashboard release
1.2.0 - 2026-02-15
- CLI improvements and key management