From d98648f03ba9a0b4308d9b7aeed1e45416ddaf71 Mon Sep 17 00:00:00 2001 From: cyhhao Date: Thu, 29 Jan 2026 03:03:40 +0800 Subject: [PATCH] fix: rewrite OpenCode identity sentence to Claude Code --- .../internal/service/gateway_sanitize_test.go | 20 +++++++++++++++++++ backend/internal/service/gateway_service.go | 8 ++++++++ 2 files changed, 28 insertions(+) create mode 100644 backend/internal/service/gateway_sanitize_test.go diff --git a/backend/internal/service/gateway_sanitize_test.go b/backend/internal/service/gateway_sanitize_test.go new file mode 100644 index 00000000..3b0a07c9 --- /dev/null +++ b/backend/internal/service/gateway_sanitize_test.go @@ -0,0 +1,20 @@ +package service + +import ( + "strings" + "testing" + + "github.com/stretchr/testify/require" +) + +func TestSanitizeOpenCodeText_RewritesCanonicalSentence(t *testing.T) { + in := "You are OpenCode, the best coding agent on the planet." + got := sanitizeOpenCodeText(in) + require.Equal(t, strings.TrimSpace(claudeCodeSystemPrompt), got) +} + +func TestSanitizeOpenCodeText_RewritesOpenCodeKeywords(t *testing.T) { + in := "OpenCode and opencode are mentioned." + got := sanitizeOpenCodeText(in) + require.Equal(t, "Claude Code and Claude are mentioned.", got) +} diff --git a/backend/internal/service/gateway_service.go b/backend/internal/service/gateway_service.go index c666c96a..e17d0f0c 100644 --- a/backend/internal/service/gateway_service.go +++ b/backend/internal/service/gateway_service.go @@ -559,6 +559,14 @@ func sanitizeOpenCodeText(text string) string { if text == "" { return text } + // Some clients include a fixed OpenCode identity sentence. Anthropic may treat + // this as a non-Claude-Code fingerprint, so rewrite it to the canonical + // Claude Code banner before generic "OpenCode"/"opencode" replacements. + text = strings.ReplaceAll( + text, + "You are OpenCode, the best coding agent on the planet.", + strings.TrimSpace(claudeCodeSystemPrompt), + ) text = strings.ReplaceAll(text, "OpenCode", "Claude Code") text = opencodeTextRe.ReplaceAllString(text, "Claude") return text