39 lines
881 B
Go
39 lines
881 B
Go
package helps
|
|
|
|
import "github.com/tidwall/gjson"
|
|
|
|
var defaultClaudeBuiltinToolNames = []string{
|
|
"web_search",
|
|
"code_execution",
|
|
"text_editor",
|
|
"computer",
|
|
}
|
|
|
|
func newClaudeBuiltinToolRegistry() map[string]bool {
|
|
registry := make(map[string]bool, len(defaultClaudeBuiltinToolNames))
|
|
for _, name := range defaultClaudeBuiltinToolNames {
|
|
registry[name] = true
|
|
}
|
|
return registry
|
|
}
|
|
|
|
func AugmentClaudeBuiltinToolRegistry(body []byte, registry map[string]bool) map[string]bool {
|
|
if registry == nil {
|
|
registry = newClaudeBuiltinToolRegistry()
|
|
}
|
|
tools := gjson.GetBytes(body, "tools")
|
|
if !tools.Exists() || !tools.IsArray() {
|
|
return registry
|
|
}
|
|
tools.ForEach(func(_, tool gjson.Result) bool {
|
|
if tool.Get("type").String() == "" {
|
|
return true
|
|
}
|
|
if name := tool.Get("name").String(); name != "" {
|
|
registry[name] = true
|
|
}
|
|
return true
|
|
})
|
|
return registry
|
|
}
|