diff --git a/backend/internal/service/gateway_sanitize_test.go b/backend/internal/service/gateway_sanitize_test.go index a70c1a00..8fa971ca 100644 --- a/backend/internal/service/gateway_sanitize_test.go +++ b/backend/internal/service/gateway_sanitize_test.go @@ -13,8 +13,9 @@ func TestSanitizeOpenCodeText_RewritesCanonicalSentence(t *testing.T) { require.Equal(t, strings.TrimSpace(claudeCodeSystemPrompt), got) } -func TestSanitizeToolText_RewritesOpenCodeKeywords(t *testing.T) { +func TestSanitizeToolDescription_DoesNotRewriteKeywords(t *testing.T) { in := "OpenCode and opencode are mentioned." - got := sanitizeToolText(in) - require.Equal(t, "Claude Code and Claude are mentioned.", got) + got := sanitizeToolDescription(in) + // We no longer rewrite tool descriptions; only redact obvious path leaks. + require.Equal(t, in, got) } diff --git a/backend/internal/service/gateway_service.go b/backend/internal/service/gateway_service.go index 40354e48..703804a4 100644 --- a/backend/internal/service/gateway_service.go +++ b/backend/internal/service/gateway_service.go @@ -715,26 +715,15 @@ func sanitizeSystemText(text string) string { return text } -// sanitizeToolText is intentionally more aggressive than sanitizeSystemText because -// tool descriptions are not user chat content, and some upstreams may flag "opencode" -// strings as non-Claude-Code fingerprints. -func sanitizeToolText(text string) string { - if text == "" { - return text - } - text = sanitizeSystemText(text) - text = strings.ReplaceAll(text, "OpenCode", "Claude Code") - text = opencodeTextRe.ReplaceAllString(text, "Claude") - return text -} - func sanitizeToolDescription(description string) string { if description == "" { return description } description = toolDescAbsPathRe.ReplaceAllString(description, "[path]") description = toolDescWinPathRe.ReplaceAllString(description, "[path]") - return sanitizeToolText(description) + // Intentionally do NOT rewrite tool descriptions (OpenCode/Claude strings). + // Tool names/skill names may rely on exact wording, and rewriting can be misleading. + return description } func normalizeToolInputSchema(inputSchema any, cache map[string]string) {