fix(antigravity): prevent corrupted thought signature when switching models

When switching from Claude models (e.g., Opus 4.5) to Gemini models
(e.g., Flash) mid-conversation via Antigravity OAuth, the client-provided
thinking signatures from Claude would cause "Corrupted thought signature"
errors since they are incompatible with Gemini API.

Changes:
- Remove fallback to client-provided signatures in thinking block handling
- Only use cached signatures (from same-session Gemini responses)
- Skip thinking blocks without valid cached signatures
- tool_use blocks continue to use skip_thought_signature_validator when
  no valid signature is available

This ensures cross-model switching works correctly while preserving
signature validation for same-model conversations.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
adrenjc
2026-01-13 18:24:05 +08:00
parent 43652d044c
commit 5977af96a0
2 changed files with 61 additions and 21 deletions

View File

@@ -123,11 +123,6 @@ func ConvertClaudeRequestToAntigravity(modelName string, inputRawJSON []byte, _
if contentTypeResult.Type == gjson.String && contentTypeResult.String() == "thinking" {
// Use GetThinkingText to handle wrapped thinking objects
thinkingText := util.GetThinkingText(contentResult)
signatureResult := contentResult.Get("signature")
clientSignature := ""
if signatureResult.Exists() && signatureResult.String() != "" {
clientSignature = signatureResult.String()
}
// Always try cached signature first (more reliable than client-provided)
// Client may send stale or invalid signatures from different sessions
@@ -139,11 +134,11 @@ func ConvertClaudeRequestToAntigravity(modelName string, inputRawJSON []byte, _
}
}
// Fallback to client signature only if cache miss and client signature is valid
if signature == "" && cache.HasValidSignature(clientSignature) {
signature = clientSignature
// log.Debugf("Using client-provided signature for thinking block")
}
// NOTE: We do NOT fallback to client signature anymore.
// Client signatures from Claude models are incompatible with Antigravity/Gemini API.
// When switching between models (e.g., Claude Opus -> Gemini Flash), the Claude
// signatures will cause "Corrupted thought signature" errors.
// If we have no cached signature, the thinking block will be skipped below.
// Store for subsequent tool_use in the same message
if cache.HasValidSignature(signature) {