From 88bf4e77ecbacc90c35fff58a411922c51d22a77 Mon Sep 17 00:00:00 2001 From: Luis Pater Date: Wed, 21 Jan 2026 11:31:37 +0800 Subject: [PATCH] fix(translator): update `HasValidSignature` to require `modelName` parameter for improved validation --- internal/cache/signature_cache.go | 4 ++-- internal/cache/signature_cache_test.go | 2 +- .../antigravity/claude/antigravity_claude_request.go | 8 ++++---- 3 files changed, 7 insertions(+), 7 deletions(-) diff --git a/internal/cache/signature_cache.go b/internal/cache/signature_cache.go index f3693962..c26eb4e2 100644 --- a/internal/cache/signature_cache.go +++ b/internal/cache/signature_cache.go @@ -186,8 +186,8 @@ func ClearSignatureCache(sessionID string) { } // HasValidSignature checks if a signature is valid (non-empty and long enough) -func HasValidSignature(signature string) bool { - return signature != "" && len(signature) >= MinValidSignatureLen +func HasValidSignature(modelName, signature string) bool { + return (signature != "" && len(signature) >= MinValidSignatureLen) || (signature == "skip_thought_signature_validator" && GetModelGroup(modelName) == "gemini") } func GetModelGroup(modelName string) string { diff --git a/internal/cache/signature_cache_test.go b/internal/cache/signature_cache_test.go index 98115c40..8bcabed5 100644 --- a/internal/cache/signature_cache_test.go +++ b/internal/cache/signature_cache_test.go @@ -132,7 +132,7 @@ func TestHasValidSignature(t *testing.T) { for _, tt := range tests { t.Run(tt.name, func(t *testing.T) { - result := HasValidSignature(tt.signature) + result := HasValidSignature("claude-sonnet-4-5-thinking", tt.signature) if result != tt.expected { t.Errorf("HasValidSignature(%q) = %v, expected %v", tt.signature, result, tt.expected) } diff --git a/internal/translator/antigravity/claude/antigravity_claude_request.go b/internal/translator/antigravity/claude/antigravity_claude_request.go index 5b6ffe22..73f9b333 100644 --- a/internal/translator/antigravity/claude/antigravity_claude_request.go +++ b/internal/translator/antigravity/claude/antigravity_claude_request.go @@ -156,19 +156,19 @@ func ConvertClaudeRequestToAntigravity(modelName string, inputRawJSON []byte, _ } } } - if cache.HasValidSignature(clientSignature) { + if cache.HasValidSignature(modelName, clientSignature) { signature = clientSignature } // log.Debugf("Using client-provided signature for thinking block") } // Store for subsequent tool_use in the same message - if cache.HasValidSignature(signature) { + if cache.HasValidSignature(modelName, signature) { currentMessageThinkingSignature = signature } // Skip trailing unsigned thinking blocks on last assistant message - isUnsigned := !cache.HasValidSignature(signature) + isUnsigned := !cache.HasValidSignature(modelName, signature) // If unsigned, skip entirely (don't convert to text) // Claude requires assistant messages to start with thinking blocks when thinking is enabled @@ -223,7 +223,7 @@ func ConvertClaudeRequestToAntigravity(modelName string, inputRawJSON []byte, _ // This is the approach used in opencode-google-antigravity-auth for Gemini // and also works for Claude through Antigravity API const skipSentinel = "skip_thought_signature_validator" - if cache.HasValidSignature(currentMessageThinkingSignature) { + if cache.HasValidSignature(modelName, currentMessageThinkingSignature) { partJSON, _ = sjson.Set(partJSON, "thoughtSignature", currentMessageThinkingSignature) } else { // No valid signature - use skip sentinel to bypass validation