fix: missing antigravity and minimax plan option in powershell

This commit is contained in:
Sundaram Kumar Jha
2026-03-24 09:26:07 +05:30
parent 403b47db61
commit 4620380341
+198 -26
View File
@@ -299,6 +299,11 @@ $zaiKey = [System.Environment]::GetEnvironmentVariable("ZAI_API_KEY", "User")
if (-not $zaiKey) { $zaiKey = $env:ZAI_API_KEY }
if ($zaiKey) { $ZaiCredDetected = $true }
$MinimaxCredDetected = $false
$minimaxKey = [System.Environment]::GetEnvironmentVariable("MINIMAX_API_KEY", "User")
if (-not $minimaxKey) { $minimaxKey = $env:MINIMAX_API_KEY }
if ($minimaxKey) { $MinimaxCredDetected = $true }
$KimiCredDetected = $false
$kimiConfigPath = Join-Path $env:USERPROFILE ".kimi\config.toml"
if (Test-Path $kimiConfigPath) { $KimiCredDetected = $true }
@@ -311,6 +316,14 @@ $hiveKey = [System.Environment]::GetEnvironmentVariable("HIVE_API_KEY", "User")
if (-not $hiveKey) { $hiveKey = $env:HIVE_API_KEY }
if ($hiveKey) { $HiveCredDetected = $true }
$AntigravityCredDetected = $false
# Check native Antigravity IDE (Windows) SQLite state DB
$antigravityVscdbPath = Join-Path $env:APPDATA "Antigravity\User\globalStorage\state.vscdb"
if (Test-Path $antigravityVscdbPath) { $AntigravityCredDetected = $true }
# Native OAuth credentials
$antigravityAccountsPath = Join-Path $env:USERPROFILE ".hive\antigravity-accounts.json"
if (Test-Path $antigravityAccountsPath) { $AntigravityCredDetected = $true }
# Detect API key providers
$ProviderMenuEnvVars = @("ANTHROPIC_API_KEY", "OPENAI_API_KEY", "GEMINI_API_KEY", "GROQ_API_KEY", "CEREBRAS_API_KEY", "OPENROUTER_API_KEY")
$ProviderMenuNames = @("Anthropic (Claude) - Recommended", "OpenAI (GPT)", "Google Gemini - Free tier available", "Groq - Fast, free tier", "Cerebras - Fast, free tier", "OpenRouter - Bring any OpenRouter model")
@@ -339,7 +352,9 @@ if (Test-Path $HiveConfigFile) {
$PrevEnvVar = if ($prevLlm.api_key_env_var) { $prevLlm.api_key_env_var } else { "" }
if ($prevLlm.use_claude_code_subscription) { $PrevSubMode = "claude_code" }
elseif ($prevLlm.use_codex_subscription) { $PrevSubMode = "codex" }
elseif ($prevLlm.use_antigravity_subscription) { $PrevSubMode = "antigravity" }
elseif ($prevLlm.use_kimi_code_subscription) { $PrevSubMode = "kimi_code" }
elseif ($prevLlm.provider -eq "minimax" -or ($prevLlm.api_base -and $prevLlm.api_base -like "*api.minimax.io*")) { $PrevSubMode = "minimax_code" }
elseif ($prevLlm.api_base -and $prevLlm.api_base -like "*api.z.ai*") { $PrevSubMode = "zai_code" }
elseif ($prevLlm.api_base -and $prevLlm.api_base -like "*api.kimi.com*") { $PrevSubMode = "kimi_code" }
elseif ($prevLlm.provider -eq "hive" -or ($prevLlm.api_base -and $prevLlm.api_base -like "*adenhq.com*")) { $PrevSubMode = "hive_llm" }
@@ -352,11 +367,13 @@ $DefaultChoice = ""
if ($PrevSubMode -or $PrevProvider) {
$prevCredValid = $false
switch ($PrevSubMode) {
"claude_code" { if ($ClaudeCredDetected) { $prevCredValid = $true } }
"zai_code" { if ($ZaiCredDetected) { $prevCredValid = $true } }
"codex" { if ($CodexCredDetected) { $prevCredValid = $true } }
"kimi_code" { if ($KimiCredDetected) { $prevCredValid = $true } }
"hive_llm" { if ($HiveCredDetected) { $prevCredValid = $true } }
"claude_code" { if ($ClaudeCredDetected) { $prevCredValid = $true } }
"zai_code" { if ($ZaiCredDetected) { $prevCredValid = $true } }
"codex" { if ($CodexCredDetected) { $prevCredValid = $true } }
"minimax_code" { if ($MinimaxCredDetected) { $prevCredValid = $true } }
"kimi_code" { if ($KimiCredDetected) { $prevCredValid = $true } }
"hive_llm" { if ($HiveCredDetected) { $prevCredValid = $true } }
"antigravity" { if ($AntigravityCredDetected) { $prevCredValid = $true } }
default {
if ($PrevEnvVar) {
$envVal = [System.Environment]::GetEnvironmentVariable($PrevEnvVar, "Process")
@@ -367,21 +384,25 @@ if ($PrevSubMode -or $PrevProvider) {
}
if ($prevCredValid) {
switch ($PrevSubMode) {
"claude_code" { $DefaultChoice = "1" }
"zai_code" { $DefaultChoice = "2" }
"codex" { $DefaultChoice = "3" }
"kimi_code" { $DefaultChoice = "4" }
"hive_llm" { $DefaultChoice = "5" }
"claude_code" { $DefaultChoice = "1" }
"zai_code" { $DefaultChoice = "2" }
"codex" { $DefaultChoice = "3" }
"minimax_code" { $DefaultChoice = "4" }
"kimi_code" { $DefaultChoice = "5" }
"hive_llm" { $DefaultChoice = "6" }
"antigravity" { $DefaultChoice = "7" }
}
if (-not $DefaultChoice) {
switch ($PrevProvider) {
"anthropic" { $DefaultChoice = "6" }
"openai" { $DefaultChoice = "7" }
"gemini" { $DefaultChoice = "8" }
"groq" { $DefaultChoice = "9" }
"cerebras" { $DefaultChoice = "10" }
"openrouter" { $DefaultChoice = "11" }
"kimi" { $DefaultChoice = "4" }
"anthropic" { $DefaultChoice = "8" }
"openai" { $DefaultChoice = "9" }
"gemini" { $DefaultChoice = "10" }
"groq" { $DefaultChoice = "11" }
"cerebras" { $DefaultChoice = "12" }
"openrouter" { $DefaultChoice = "13" }
"minimax" { $DefaultChoice = "4" }
"kimi" { $DefaultChoice = "5" }
"hive" { $DefaultChoice = "6" }
}
}
}
@@ -413,26 +434,40 @@ Write-Host ") OpenAI Codex Subscription " -NoNewline
Write-Color -Text "(use your Codex/ChatGPT Plus plan)" -Color DarkGray -NoNewline
if ($CodexCredDetected) { Write-Color -Text " (credential detected)" -Color Green } else { Write-Host "" }
# 4) Kimi Code
# 4) MiniMax Coding Key
Write-Host " " -NoNewline
Write-Color -Text "4" -Color Cyan -NoNewline
Write-Host ") MiniMax Coding Key " -NoNewline
Write-Color -Text "(use your MiniMax coding key)" -Color DarkGray -NoNewline
if ($MinimaxCredDetected) { Write-Color -Text " (credential detected)" -Color Green } else { Write-Host "" }
# 5) Kimi Code
Write-Host " " -NoNewline
Write-Color -Text "5" -Color Cyan -NoNewline
Write-Host ") Kimi Code Subscription " -NoNewline
Write-Color -Text "(use your Kimi Code plan)" -Color DarkGray -NoNewline
if ($KimiCredDetected) { Write-Color -Text " (credential detected)" -Color Green } else { Write-Host "" }
# 5) Hive LLM
# 6) Hive LLM
Write-Host " " -NoNewline
Write-Color -Text "5" -Color Cyan -NoNewline
Write-Color -Text "6" -Color Cyan -NoNewline
Write-Host ") Hive LLM " -NoNewline
Write-Color -Text "(use your Hive API key)" -Color DarkGray -NoNewline
if ($HiveCredDetected) { Write-Color -Text " (credential detected)" -Color Green } else { Write-Host "" }
# 7) Antigravity Subscription
Write-Host " " -NoNewline
Write-Color -Text "7" -Color Cyan -NoNewline
Write-Host ") Antigravity Subscription " -NoNewline
Write-Color -Text "(use your Google/Gemini plan)" -Color DarkGray -NoNewline
if ($AntigravityCredDetected) { Write-Color -Text " (credential detected)" -Color Green } else { Write-Host "" }
Write-Host ""
Write-Color -Text " API key providers:" -Color Cyan
# 6-11) API key providers
# 8-13) API key providers
for ($idx = 0; $idx -lt $ProviderMenuEnvVars.Count; $idx++) {
$num = $idx + 6
$num = $idx + 8
$envVal = [System.Environment]::GetEnvironmentVariable($ProviderMenuEnvVars[$idx], "Process")
if (-not $envVal) { $envVal = [System.Environment]::GetEnvironmentVariable($ProviderMenuEnvVars[$idx], "User") }
Write-Host " " -NoNewline
@@ -441,7 +476,7 @@ for ($idx = 0; $idx -lt $ProviderMenuEnvVars.Count; $idx++) {
if ($envVal) { Write-Color -Text " (credential detected)" -Color Green } else { Write-Host "" }
}
$SkipChoice = 6 + $ProviderMenuEnvVars.Count
$SkipChoice = 8 + $ProviderMenuEnvVars.Count
Write-Host " " -NoNewline
Write-Color -Text "$SkipChoice" -Color Cyan -NoNewline
Write-Host ") Skip for now"
@@ -534,6 +569,19 @@ switch ($num) {
}
}
4 {
# MiniMax Coding Key
$SubscriptionMode = "minimax_code"
$SelectedEnvVar = "MINIMAX_API_KEY"
$SelectedProviderId = "minimax"
$SelectedModel = "MiniMax-M2.5"
$SelectedMaxTokens = 32768
$SelectedMaxContextTokens = 900000 # MiniMax M2.5 — 1M context window
$SelectedApiBase = "https://api.minimax.io/v1"
Write-Host ""
Write-Ok "Using MiniMax coding key"
Write-Color -Text " Model: MiniMax-M2.5 | API: api.minimax.io" -Color DarkGray
}
5 {
# Kimi Code Subscription
$SubscriptionMode = "kimi_code"
$SelectedProviderId = "kimi"
@@ -545,7 +593,7 @@ switch ($num) {
Write-Ok "Using Kimi Code subscription"
Write-Color -Text " Model: kimi-k2.5 | API: api.kimi.com/coding" -Color DarkGray
}
5 {
6 {
# Hive LLM
$SubscriptionMode = "hive_llm"
$SelectedProviderId = "hive"
@@ -569,9 +617,54 @@ switch ($num) {
}
Write-Color -Text " Model: $SelectedModel | API: $HiveLlmEndpoint" -Color DarkGray
}
{ $_ -ge 6 -and $_ -le 11 } {
7 {
# Antigravity Subscription
if (-not $AntigravityCredDetected) {
Write-Host ""
Write-Color -Text " Setting up Antigravity authentication..." -Color Cyan
Write-Host ""
Write-Color -Text " A browser window will open for Google OAuth." -Color Yellow
Write-Host " Sign in with your Google account that has Antigravity access."
Write-Host ""
# Run native OAuth flow
try {
Push-Location $ProjectDir
& $UvCmd run python (Join-Path $ProjectDir "core\antigravity_auth.py") auth account add 2>&1
Pop-Location
# Re-detect credentials
$antigravityAccountsPath = Join-Path $env:USERPROFILE ".hive\antigravity-accounts.json"
if (Test-Path $antigravityAccountsPath) {
$AntigravityCredDetected = $true
}
} catch {
Pop-Location
}
if (-not $AntigravityCredDetected) {
Write-Host ""
Write-Fail "Authentication failed or was cancelled."
Write-Host ""
exit 1
}
}
if ($AntigravityCredDetected) {
$SubscriptionMode = "antigravity"
$SelectedProviderId = "openai"
$SelectedModel = "gemini-3-flash"
$SelectedMaxTokens = 32768
$SelectedMaxContextTokens = 1000000 # Gemini 3 Flash — 1M context window
Write-Host ""
Write-Warn "Using Antigravity can technically cause your account suspension. Please use at your own risk."
Write-Host ""
Write-Ok "Using Antigravity subscription"
Write-Color -Text " Model: gemini-3-flash | Direct OAuth (no proxy required)" -Color DarkGray
}
}
{ $_ -ge 8 -and $_ -le 13 } {
# API key providers
$provIdx = $num - 6
$provIdx = $num - 8
$SelectedEnvVar = $ProviderMenuEnvVars[$provIdx]
$SelectedProviderId = $ProviderMenuIds[$provIdx]
$providerName = $ProviderMenuNames[$provIdx] -replace ' - .*', '' # strip description
@@ -732,6 +825,73 @@ if ($SubscriptionMode -eq "zai_code") {
}
}
# For MiniMax coding key: prompt for API key with verification + retry
if ($SubscriptionMode -eq "minimax_code") {
while ($true) {
$existingMinimax = [System.Environment]::GetEnvironmentVariable("MINIMAX_API_KEY", "User")
if (-not $existingMinimax) { $existingMinimax = $env:MINIMAX_API_KEY }
if ($existingMinimax) {
$masked = $existingMinimax.Substring(0, [Math]::Min(4, $existingMinimax.Length)) + "..." + $existingMinimax.Substring([Math]::Max(0, $existingMinimax.Length - 4))
Write-Host ""
Write-Color -Text " $([char]0x2B22) Current MiniMax key: $masked" -Color Green
$apiKey = Read-Host " Press Enter to keep, or paste a new key to replace"
} else {
Write-Host ""
Write-Host "Get your API key from: " -NoNewline
Write-Color -Text "https://platform.minimax.io/user-center/basic-information/interface-key" -Color Cyan
Write-Host ""
$apiKey = Read-Host "Paste your MiniMax API key (or press Enter to skip)"
}
if ($apiKey) {
[System.Environment]::SetEnvironmentVariable("MINIMAX_API_KEY", $apiKey, "User")
$env:MINIMAX_API_KEY = $apiKey
Write-Host ""
Write-Ok "MiniMax API key saved as User environment variable"
# Health check the new key
Write-Host " Verifying MiniMax API key... " -NoNewline
try {
Push-Location $ProjectDir
$hcResult = & $UvCmd run python (Join-Path $ProjectDir "scripts/check_llm_key.py") "minimax" $apiKey "https://api.minimax.io/v1" 2>$null
Pop-Location
$hcJson = $hcResult | ConvertFrom-Json
if ($hcJson.valid -eq $true) {
Write-Color -Text "ok" -Color Green
break
} elseif ($hcJson.valid -eq $false) {
Write-Color -Text "failed" -Color Red
Write-Warn $hcJson.message
[System.Environment]::SetEnvironmentVariable("MINIMAX_API_KEY", $null, "User")
Remove-Item -Path "Env:\MINIMAX_API_KEY" -ErrorAction SilentlyContinue
Write-Host ""
Read-Host " Press Enter to try again"
} else {
Write-Color -Text "--" -Color Yellow
Write-Color -Text " Could not verify key (network issue). The key has been saved." -Color DarkGray
break
}
} catch {
Pop-Location
Write-Color -Text "--" -Color Yellow
Write-Color -Text " Could not verify key (network issue). The key has been saved." -Color DarkGray
break
}
} elseif (-not $existingMinimax) {
Write-Host ""
Write-Warn "Skipped. Add your MiniMax API key later:"
Write-Color -Text " [System.Environment]::SetEnvironmentVariable('MINIMAX_API_KEY', 'your-key', 'User')" -Color Cyan
$SelectedEnvVar = ""
$SelectedProviderId = ""
$SubscriptionMode = ""
break
} else {
break
}
}
}
# For Kimi Code subscription: prompt for API key with verification + retry
if ($SubscriptionMode -eq "kimi_code") {
while ($true) {
@@ -910,9 +1070,21 @@ if ($SelectedProviderId) {
$workerLlm["use_claude_code_subscription"] = $true
} elseif ($SubscriptionMode -eq "codex") {
$workerLlm["use_codex_subscription"] = $true
} elseif ($SubscriptionMode -eq "antigravity") {
$workerLlm["use_antigravity_subscription"] = $true
# Pass along any Antigravity OAuth env vars if set
$agSecret = [System.Environment]::GetEnvironmentVariable("ANTIGRAVITY_CLIENT_SECRET", "User")
if (-not $agSecret) { $agSecret = $env:ANTIGRAVITY_CLIENT_SECRET }
if ($agSecret) { $workerLlm["antigravity_client_secret"] = $agSecret }
$agClientId = [System.Environment]::GetEnvironmentVariable("ANTIGRAVITY_CLIENT_ID", "User")
if (-not $agClientId) { $agClientId = $env:ANTIGRAVITY_CLIENT_ID }
if ($agClientId) { $workerLlm["antigravity_client_id"] = $agClientId }
} elseif ($SubscriptionMode -eq "zai_code") {
$workerLlm["api_base"] = "https://api.z.ai/api/coding/paas/v4"
$workerLlm["api_key_env_var"] = $SelectedEnvVar
} elseif ($SubscriptionMode -eq "minimax_code") {
$workerLlm["api_base"] = "https://api.minimax.io/v1"
$workerLlm["api_key_env_var"] = $SelectedEnvVar
} elseif ($SubscriptionMode -eq "kimi_code") {
$workerLlm["api_base"] = "https://api.kimi.com/coding"
$workerLlm["api_key_env_var"] = $SelectedEnvVar