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. // 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{ return &AntigravityProvider{
tokenSource: createAntigravityTokenSource(), tokenSource: createAntigravityTokenSource(),
httpClient: &http.Client{ httpClient: &http.Client{
Timeout: 120 * time.Second, Timeout: 120 * time.Second,
}, },
} }, nil
} }
// Chat implements LLMProvider.Chat using the Cloud Code Assist v1internal API. // 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 ), modelID, nil
case "antigravity": case "antigravity":
return NewAntigravityProvider(), modelID, nil provider, err := NewAntigravityProvider()
if err != nil {
return nil, "", err
}
return provider, modelID, nil
case "claude-cli", "claudecli": case "claude-cli", "claudecli":
workspace := cfg.Workspace workspace := cfg.Workspace

View file

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