Merge pull request #1 from vvr3ddy/fix/antigravity-oauth-fallback
fix(providers): validate antigravity credentials at provider creation
This commit is contained in:
commit
a0769ea7f5
3 changed files with 23 additions and 11 deletions
|
|
@ -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.
|
||||||
|
|
|
||||||
|
|
@ -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
|
||||||
|
|
|
||||||
|
|
@ -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")
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue