From 0ebabf5152d4e2a86a13df2f71784deff55b80ad Mon Sep 17 00:00:00 2001 From: Luis Pater Date: Sat, 6 Dec 2025 01:32:12 +0800 Subject: [PATCH] feat(antigravity): add FetchAntigravityProjectID function and integrate project ID retrieval --- internal/api/handlers/management/auth_files.go | 17 +++++++++++++++++ sdk/auth/antigravity.go | 5 +++++ 2 files changed, 22 insertions(+) diff --git a/internal/api/handlers/management/auth_files.go b/internal/api/handlers/management/auth_files.go index 54b2a329..6f77fda9 100644 --- a/internal/api/handlers/management/auth_files.go +++ b/internal/api/handlers/management/auth_files.go @@ -1472,6 +1472,17 @@ func (h *Handler) RequestAntigravityToken(c *gin.Context) { } } + projectID := "" + if strings.TrimSpace(tokenResp.AccessToken) != "" { + fetchedProjectID, errProject := sdkAuth.FetchAntigravityProjectID(ctx, tokenResp.AccessToken, httpClient) + if errProject != nil { + log.Warnf("antigravity: failed to fetch project ID: %v", errProject) + } else { + projectID = fetchedProjectID + log.Infof("antigravity: obtained project ID %s", projectID) + } + } + now := time.Now() metadata := map[string]any{ "type": "antigravity", @@ -1484,6 +1495,9 @@ func (h *Handler) RequestAntigravityToken(c *gin.Context) { if email != "" { metadata["email"] = email } + if projectID != "" { + metadata["project_id"] = projectID + } fileName := sanitizeAntigravityFileName(email) label := strings.TrimSpace(email) @@ -1507,6 +1521,9 @@ func (h *Handler) RequestAntigravityToken(c *gin.Context) { delete(oauthStatus, state) fmt.Printf("Authentication successful! Token saved to %s\n", savedPath) + if projectID != "" { + fmt.Printf("Using GCP project: %s\n", projectID) + } fmt.Println("You can now use Antigravity services through this CLI") }() diff --git a/sdk/auth/antigravity.go b/sdk/auth/antigravity.go index 5df8ab34..b3d7f6c5 100644 --- a/sdk/auth/antigravity.go +++ b/sdk/auth/antigravity.go @@ -320,6 +320,11 @@ const ( antigravityClientMetadata = `{"ideType":"IDE_UNSPECIFIED","platform":"PLATFORM_UNSPECIFIED","pluginType":"GEMINI"}` ) +// FetchAntigravityProjectID exposes project discovery for external callers. +func FetchAntigravityProjectID(ctx context.Context, accessToken string, httpClient *http.Client) (string, error) { + return fetchAntigravityProjectID(ctx, accessToken, httpClient) +} + // fetchAntigravityProjectID retrieves the project ID for the authenticated user via loadCodeAssist. // This uses the same approach as Gemini CLI to get the cloudaicompanionProject. func fetchAntigravityProjectID(ctx context.Context, accessToken string, httpClient *http.Client) (string, error) {