mirror of
https://github.com/router-for-me/CLIProxyAPIPlus.git
synced 2026-03-29 16:54:41 +00:00
Add util.SanitizeClaudeToolID() to replace non-conforming characters in tool_use.id fields across all five response translators (gemini, codex, openai, antigravity, gemini-cli). Upstream tool names may contain dots or other special characters (e.g. "fs.readFile") that violate Claude's ID validation regex. The sanitizer replaces such characters with underscores and provides a generated fallback for empty IDs. Fixes #1872, Fixes #1849 Made-with: Cursor
25 lines
608 B
Go
25 lines
608 B
Go
package util
|
|
|
|
import (
|
|
"fmt"
|
|
"regexp"
|
|
"sync/atomic"
|
|
"time"
|
|
)
|
|
|
|
var (
|
|
claudeToolUseIDSanitizer = regexp.MustCompile(`[^a-zA-Z0-9_-]`)
|
|
claudeToolUseIDCounter uint64
|
|
)
|
|
|
|
// SanitizeClaudeToolID ensures the given id conforms to Claude's
|
|
// tool_use.id regex ^[a-zA-Z0-9_-]+$. Non-conforming characters are
|
|
// replaced with '_'; an empty result gets a generated fallback.
|
|
func SanitizeClaudeToolID(id string) string {
|
|
s := claudeToolUseIDSanitizer.ReplaceAllString(id, "_")
|
|
if s == "" {
|
|
s = fmt.Sprintf("toolu_%d_%d", time.Now().UnixNano(), atomic.AddUint64(&claudeToolUseIDCounter, 1))
|
|
}
|
|
return s
|
|
}
|