mirror of
https://github.com/CherryHQ/cherry-studio.git
synced 2025-12-27 04:31:27 +08:00
35 lines
1.1 KiB
TypeScript
35 lines
1.1 KiB
TypeScript
export function buildFunctionCallToolName(serverName: string, toolName: string) {
|
|
const sanitizedServer = serverName.trim().replace(/-/g, '_')
|
|
const sanitizedTool = toolName.trim().replace(/-/g, '_')
|
|
|
|
// Combine server name and tool name
|
|
let name = sanitizedTool
|
|
if (!sanitizedTool.includes(sanitizedServer.slice(0, 7))) {
|
|
name = `${sanitizedServer.slice(0, 7) || ''}-${sanitizedTool || ''}`
|
|
}
|
|
|
|
// Replace invalid characters with underscores or dashes
|
|
// Keep a-z, A-Z, 0-9, underscores and dashes
|
|
name = name.replace(/[^a-zA-Z0-9_-]/g, '_')
|
|
|
|
// Ensure name starts with a letter or underscore (for valid JavaScript identifier)
|
|
if (!/^[a-zA-Z]/.test(name)) {
|
|
name = `tool-${name}`
|
|
}
|
|
|
|
// Remove consecutive underscores/dashes (optional improvement)
|
|
name = name.replace(/[_-]{2,}/g, '_')
|
|
|
|
// Truncate to 63 characters maximum
|
|
if (name.length > 63) {
|
|
name = name.slice(0, 63)
|
|
}
|
|
|
|
// Handle edge case: ensure we still have a valid name if truncation left invalid chars at edges
|
|
if (name.endsWith('_') || name.endsWith('-')) {
|
|
name = name.slice(0, -1)
|
|
}
|
|
|
|
return name
|
|
}
|