Merge pull request #1 from vvr3ddy/fix/antigravity-oauth-fallback

fix(providers): validate antigravity credentials at provider creation
This commit is contained in:
Vishnuvardhan Reddy 2026-02-26 10:51:39 +00:00 committed by GitHub
commit a0769ea7f5
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
3 changed files with 23 additions and 11 deletions

View file

@ -33,13 +33,22 @@ type AntigravityProvider struct {
}
// NewAntigravityProvider creates a new Antigravity provider using stored auth credentials.
func NewAntigravityProvider() *AntigravityProvider {
// Returns an error if credentials are not available or invalid.
func NewAntigravityProvider() (*AntigravityProvider, error) {
// Validate credentials exist before creating the provider
cred, err := getCredential("google-antigravity")
if err != nil {
return nil, fmt.Errorf("loading auth credentials: %w", err)
}
if cred == nil {
return nil, fmt.Errorf("no credentials for google-antigravity. Run: picoclaw auth login --provider google-antigravity")
}
return &AntigravityProvider{
tokenSource: createAntigravityTokenSource(),
httpClient: &http.Client{
Timeout: 120 * time.Second,
},
}
}, nil
}
// Chat implements LLMProvider.Chat using the Cloud Code Assist v1internal API.

View file

@ -137,7 +137,11 @@ func CreateProviderFromConfig(cfg *config.ModelConfig) (LLMProvider, string, err
), modelID, nil
case "antigravity":
return NewAntigravityProvider(), modelID, nil
provider, err := NewAntigravityProvider()
if err != nil {
return nil, "", err
}
return provider, modelID, nil
case "claude-cli", "claudecli":
workspace := cfg.Workspace

View file

@ -160,15 +160,14 @@ func TestCreateProviderFromConfig_Antigravity(t *testing.T) {
Model: "antigravity/gemini-2.0-flash",
}
provider, modelID, err := CreateProviderFromConfig(cfg)
if err != nil {
t.Fatalf("CreateProviderFromConfig() error = %v", err)
// Antigravity requires OAuth credentials, which should fail in test environment
_, _, err := CreateProviderFromConfig(cfg)
if err == nil {
t.Fatal("CreateProviderFromConfig() expected error for antigravity without credentials")
}
if provider == nil {
t.Fatal("CreateProviderFromConfig() returned nil provider")
}
if modelID != "gemini-2.0-flash" {
t.Errorf("modelID = %q, want %q", modelID, "gemini-2.0-flash")
// Verify error message mentions credentials
if !strings.Contains(err.Error(), "credentials") && !strings.Contains(err.Error(), "auth") {
t.Errorf("Expected credential-related error, got: %v", err)
}
}