Test-AnthropicProxy.ps1
|
function Test-AnthropicProxy { <# .SYNOPSIS Validates that ANTHROPIC_BASE_URL or ANTHROPIC_API_KEY is set before starting Claude. .DESCRIPTION Priority order: 1. ANTHROPIC_BASE_URL already set → tests reachability; fails if proxy is down 2. ANTHROPIC_API_KEY set → no-op (direct Anthropic access), returns $null 3. -Login specified → no-op (interactive login flow), returns $null else → logs error with setup suggestions, exits 1 .PARAMETER Login Skip proxy setup — the user will authenticate interactively via claude login. .OUTPUTS Always $null — proxy lifecycle is managed externally (e.g. ClaudeProxy scheduled task). #> [CmdletBinding()] param( [switch]$Login ) if ($Login -and ((Test-Path env:ANTHROPIC_API_KEY) -or (Test-Path env:ANTHROPIC_BASE_URL) -or (Test-Path env:DISABLE_LOGIN_COMMAND))) { Write-Error "-Login was specified but ANTHROPIC_API_KEY, ANTHROPIC_BASE_URL, or DISABLE_LOGIN_COMMAND is already set. Unset them or omit -Login." exit 1 } if (Test-Path env:ANTHROPIC_BASE_URL) { Write-Verbose "Pre-configured proxy at $env:ANTHROPIC_BASE_URL — checking reachability." $httpClient = [System.Net.Http.HttpClient]::new() $httpClient.Timeout = [System.TimeSpan]::FromSeconds(5) try { $null = $httpClient.GetAsync($env:ANTHROPIC_BASE_URL).GetAwaiter().GetResult() Write-Verbose "Proxy is reachable." } catch { Write-Error "ANTHROPIC_BASE_URL is '$env:ANTHROPIC_BASE_URL' but the proxy is not reachable: $_" if (Test-Path env:ANTHROPIC_BASE_URL_DIAG_CMD) { Write-Host " To diagnose, run: $env:ANTHROPIC_BASE_URL_DIAG_CMD" -ForegroundColor Cyan } exit 1 } finally { $httpClient.Dispose() } return $null } if (Test-Path env:ANTHROPIC_API_KEY) { Write-Verbose "ANTHROPIC_API_KEY set; connecting directly to Anthropic." return $null } if ($Login) { Write-Verbose "-Login specified; skipping proxy setup." return $null } $onWindows = $IsWindows -or $env:OS -eq 'Windows_NT' Write-Error "No API key or proxy configured and -Login was not specified." Write-Host "" Write-Host "Choose one of:" -ForegroundColor Yellow Write-Host " 1. Set ANTHROPIC_API_KEY to connect directly to Anthropic:" if ($onWindows) { Write-Host " setx ANTHROPIC_API_KEY <your-key>" -ForegroundColor Cyan } else { Write-Host " export ANTHROPIC_API_KEY=<your-key> # add to ~/.bashrc or ~/.zshrc" -ForegroundColor Cyan } Write-Host " 2. Set ANTHROPIC_BASE_URL to point to a running proxy:" if ($onWindows) { Write-Host " setx ANTHROPIC_BASE_URL http://127.0.0.1:11211/api/anthropic" -ForegroundColor Cyan } else { Write-Host " export ANTHROPIC_BASE_URL=http://127.0.0.1:11211/api/anthropic" -ForegroundColor Cyan } Write-Host " 3. Run with -Login to authenticate interactively:" Write-Host " claude -Login" -ForegroundColor Cyan Write-Host "" exit 1 } |