Triage
Confirmed as a real Antigravity / ACP reliability bug. Four sessions across 0.0.40 and 0.0.41-nightly is enough; the two user-facing strings match what the adapter forwards today.
What we verified
- Raw error passthrough.
mapAcpToAdapterError(apps/server/src/provider/acp/AcpAdapterSupport.ts) setsdetail: error.messagewith no transient/network branch. Antigravity only remaps sign-in. A droppedstreamGenerateContent(EOF) therefore lands in chat asmodel unreachable: doRequest … EOF. - No reconnect on the live runtime.
AcpSessionRuntime.ensureConnectedrethrows a latched termination.recordTermination/retireRuntimedo not reconnect.AntigravityAdapterhas no prompt retry/backoff. OnConnectionTerminatedit tears the session down (hasSession→ false). - Next prompt is a full recover, then the binary fails. Recovery is
ProviderService.recoverSessionForThread→startSession+ resume cursor — notProviderInstanceRegistry(that path is settings hot-reload). NeitherFailed to rebuild agentnorreceived 1000 (OK); then sent 1000 (OK)exists in this repo. Those come fromagy_acp_server(Go websocket close phrasing). T3 surfaces them unchanged. Code1000is a normal close; the agent’s own rebuild still fails, and we treat that as fatal.
T3 vs upstream
| Layer | Owns |
|---|---|
agy_acp_server dropping streamGenerateContent with EOF, and failing its own agent rebuild on WS 1000 | Upstream (local Antigravity proxy). T3 cannot retry that HTTP stream. |
Forwarding the raw Go string; latching the session; not retrying startSession / session/prompt after a clean close | T3 |
Retry-with-backoff of streamGenerateContent is the proxy’s job. T3 should still stop showing transport internals and should recover the session the way a second send often does today.
Related
- #10607 (open) — Grok: retire a dead ACP session so the next turn can
session/load. Closest prior art. Antigravity already retires onConnectionTerminated; the gap is classify + retry after the binary’s failed rebuild. - #11626 / #11628 — Antigravity cancel/queue work; not duplicates.
- #9919 — existing pattern for classifying Antigravity init errors.
No duplicate issue found.
Proposed fix (T3)
- Classify
EOF/model unreachable/1000 (OK)/Failed to rebuild agentas transient inmapAntigravityError(or sharedmapAcpToAdapterError). Show a short readable message. - Retry
startSessionwith backoff on that class of error. If resume/session/loadhits the binary’s failed rebuild, start a fresh session instead of failing the turn. - Keep in-runtime clean close as disconnect + recover, not a one-way latch.
Workaround remains: send the prompt again (often starts a fresh agent).
Accepting as bug + upstream. T3 handling should ship without waiting on the proxy.