diegosouzapw/OmniRoute · error

[models] antigravity onboardUser done but no project in…

Error message

[models] antigravity onboardUser done but no project in response at ${url} — Google BYOP (user-defined GCP project) required

What it means

Terminal bootstrap condition for Google Bring-Your-Own-Project accounts: onboardUser returned 200 but the body lacked `cloudaicompanionProject`, meaning Google will not auto-create a project for this account tier (standard-tier/personal accounts, tracked in #8491). Detected explicitly so bootstrap fails fast with a clear instruction instead of fabricating a project id that Google would later reject with a delayed 429 RESOURCE_EXHAUSTED.

Solutions

  1. Configure a user-defined GCP project (BYOP) for the antigravity connection via the connection settings.
  2. Upgrade the Google account tier to one that supports automatic project creation.
  3. Document in the provider setup UI that standard-tier accounts must supply their own GCP project.
Defensive patterns

Strategy: validation

When it happens

Trigger: Thrown at open-sse/services/antigravityProjectBootstrap.ts:203 when the library encounters an invalid state.

Common situations: See trigger scenarios.


AI-assisted analysis of diegosouzapw/OmniRoute@a179ffed5b (2026-08-25). Data as JSON: /api/errors/b7ea9de9f9c369b1. Report an issue: GitHub.

Appendix: source

Thrown at open-sse/services/antigravityProjectBootstrap.ts:203

        method: "POST",
        headers,
        body: JSON.stringify({
          tier_id: tierId,
          metadata: getAntigravityLoadCodeAssistMetadata(),
        }),
        signal: signal ? AbortSignal.any([signal, timeoutSignal]) : timeoutSignal,
      });

      if (response.ok) {
        // Accounts Google expects to Bring Their Own Project: onboardUser
        // returns 200 without a `cloudaicompanionProject` in the body — no
        // automatic project creation for standard-tier/personal accounts
        // (tracked in #8491). Detect that so we can fail fast with a clear
        // instruction instead of retrying forever or fabricating an id that
        // Google later rejects with a delayed 429 RESOURCE_EXHAUSTED.
        const body = await response.text().catch(() => "");
        if (body && !/cloudaicompanionProject/.test(body)) {
          console.warn(
            `[models] antigravity onboardUser done but no project in response at ${url} — Google BYOP (user-defined GCP project) required`
          );
          return "requires_manual_project";
        }
        return "onboarded";
      }

      console.warn(
        `[models] antigravity onboardUser failed at ${url} (${response.status}) — trying next`
      );
    } catch (error) {
      if (signal?.aborted || (error instanceof Error && error.name === "AbortError")) {
        throw signal?.reason ?? error;
      }
      const msg = error instanceof Error ? error.message : String(error);
      console.warn(`[models] antigravity onboardUser threw for ${url}: ${msg} — trying next`);
    }
  }

View on GitHub (pinned to a179ffed5b)