Skip to content

model,app,tui: replace gemini adapter with full-peer antigravity (agy) - #6

Merged
selyafi merged 1 commit into
mainfrom
feat/antigravity-adapter
Jun 19, 2026
Merged

model,app,tui: replace gemini adapter with full-peer antigravity (agy)#6
selyafi merged 1 commit into
mainfrom
feat/antigravity-adapter

Conversation

@selyafi

@selyafi selyafi commented Jun 19, 2026

Copy link
Copy Markdown
Owner

Why

Google cut off the gemini-cli free-tier OAuth client ("This client is no longer supported for Gemini Code Assist for individuals … migrate to the Antigravity suite"), so the gemini adapter — a default working model — now fails at runtime for free-tier users. Meanwhile agy 1.0.9 resolved the spike S8b blocker (changelog: "Fixed OAuth token persistence and authentication hangs"), verified live. So Antigravity takes the third model slot as a full peer.

What

  • Un-stub antigravitycli into a full peer — implements Reviewer + Synthesizer + InputBudgetSetter, mirroring codexcli/claudecli.
    • Invocation: agy --print=- --print-timeout <dur> with the prompt piped via stdin (empirically locked: --print is a string flag requiring a value; - is the stdin marker). Raw output → model.ParseFindings (no envelope, unlike gemini's -o json).
    • --print-timeout derives from the call's ctx deadline so --model-timeout governs antigravity exactly like codex/claude (which pass no internal cap); --model-timeout 0 → 24h ceiling. agy's intrinsic 5m default would otherwise silently halve antigravity's budget on large PRs.
    • Parse-error path hints at the one-time agy login (the unauthenticated-agy failure shape).
  • Remove the geminicli adapter and all wiring. Models are now codex, claude, antigravity.
  • TUI picker: pre-checks every known available model (derived from pickerPriority); antigravity is no longer the excluded experimental stub. SelectedNames derives order + known-set from pickerPriority (no hand-maintained name lists).

Auth note

agy requires a one-time interactive login (run agy once); after that its OAuth token persists and diffsmith drives it non-interactively. Preflight checks PATH only (matching codex/claude); auth errors surface at Review time.

Testing

  • 495 unit tests pass (go test ./...), build + vet clean.
  • New TDD coverage: agy argv/stdin contract, ctx-derived print-timeout (incl. --model-timeout 0), budget enforcement, error wrapping, full-peer capability guard, negative guard that argv never auto-approves tools.
  • Gated live canary (integration_test.go, build tag integration) runs real agy against fixtures (incl. prompt-injection) — the durable guard against agy's undocumented flag contract. Verified live end-to-end.
  • Reviewed via multi-agent /simplify and xhigh /code-review; all surfaced findings fixed (most notably the print-timeout-vs---model-timeout bug).

Notes

  • docs/ updates (design spec, S8b spike closure, architecture note) are local-only per the repo's .git/info/exclude and are not in this diff; README.md is updated.
  • bd was not touched this session due to a DATABASE MISMATCH warning (mis-delete risk on sync); recommend bd migrate --update-repo-id separately.

Google cut off the gemini-cli free-tier OAuth client; agy 1.0.9 resolved the
S8b auth blocker (persistent OAuth tokens), so Antigravity takes the third
model slot as a full peer (reviewer + synthesizer + input-budget setter).

- antigravitycli: un-stub into a full peer. Invoke `agy --print=- --print-timeout
  <dur>` via stdin, raw output -> ParseFindings. The print-timeout derives from
  the call's ctx deadline so --model-timeout governs antigravity like codex/claude
  (which pass no internal cap); --model-timeout 0 yields a 24h ceiling. Parse-error
  path hints at the one-time `agy` login. Gated live canary (build tag
  integration) guards agy's undocumented flag contract.
- remove the geminicli adapter and all wiring; models are now codex, claude,
  antigravity.
- tui picker: pre-check every known available model (derived from pickerPriority);
  antigravity is no longer the excluded experimental stub. SelectedNames derives
  order + known-set from pickerPriority.
- update README + comments across the model/app/provider layers.
@selyafi
selyafi merged commit 5ba79c2 into main Jun 19, 2026
2 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant