fix(upstream): 支持 Claude custom 类型工具 (MCP) 格式

- ClaudeTool 结构体增加 Type 和 Custom 字段
- buildTools 函数支持从 custom 字段读取 input_schema
- convertClaudeToolsToGeminiTools 函数支持 MCP 工具格式
- 修复 Antigravity upstream error 400: JSON schema invalid

修复 Issue 0.2: tools.X.custom.input_schema 验证错误
This commit is contained in:
IanShaw027
2025-12-31 20:56:38 +08:00
parent 3fd9bd4a80
commit 15e676e9cd
3 changed files with 51 additions and 6 deletions

View File

@@ -379,12 +379,26 @@ func buildTools(tools []ClaudeTool) []GeminiToolDeclaration {
// 普通工具
var funcDecls []GeminiFunctionDecl
for _, tool := range tools {
var description string
var inputSchema map[string]any
// 检查是否为 custom 类型工具 (MCP)
if tool.Type == "custom" && tool.Custom != nil {
// Custom 格式: 从 custom 字段获取 description 和 input_schema
description = tool.Custom.Description
inputSchema = tool.Custom.InputSchema
} else {
// 标准格式: 从顶层字段获取
description = tool.Description
inputSchema = tool.InputSchema
}
// 清理 JSON Schema
params := cleanJSONSchema(tool.InputSchema)
params := cleanJSONSchema(inputSchema)
funcDecls = append(funcDecls, GeminiFunctionDecl{
Name: tool.Name,
Description: tool.Description,
Description: description,
Parameters: params,
})
}