diff --git a/internal/ai/runtime/internal/impl/callbacks/agent_trace_handler.go b/internal/ai/runtime/internal/impl/callbacks/agent_trace_handler.go index db4925e..0f3682c 100644 --- a/internal/ai/runtime/internal/impl/callbacks/agent_trace_handler.go +++ b/internal/ai/runtime/internal/impl/callbacks/agent_trace_handler.go @@ -125,11 +125,12 @@ func (h *RuntimeTraceHandler) resolveToolMetadata(modelToolName string) (ToolMet return ToolMetadata{}, false } if spec, ok := toolx.GetRegisteredToolSpecByName(modelToolName); ok { + resolved := toolx.ResolveToolMetadata(spec.Code, spec.Name) return ToolMetadata{ - ToolCode: spec.Code, - ServerCode: spec.ServerCode, - ToolName: spec.Name, - SourceType: spec.SourceType, + ToolCode: resolved.ToolCode, + ServerCode: resolved.ServerCode, + ToolName: resolved.ToolName, + SourceType: resolved.SourceType, }, true } metadata, ok := h.toolMetadataBy[modelToolName] diff --git a/internal/ai/runtime/internal/impl/factory/tool_helpers.go b/internal/ai/runtime/internal/impl/factory/tool_helpers.go index 24b3f2e..d4e27c6 100644 --- a/internal/ai/runtime/internal/impl/factory/tool_helpers.go +++ b/internal/ai/runtime/internal/impl/factory/tool_helpers.go @@ -45,11 +45,12 @@ func buildRuntimeTraceToolMetadata( } } if selectedSkill != nil { + resolved := toolx.ResolveToolMetadata(toolx.BuiltinSkill.Code, toolx.BuiltinSkill.Name) ret[toolx.BuiltinSkill.Name] = einocallbacks.ToolMetadata{ - ToolCode: toolx.BuiltinSkill.Code, - ServerCode: toolx.BuiltinSkill.ServerCode, - ToolName: toolx.BuiltinSkill.Name, - SourceType: toolx.BuiltinSkill.SourceType, + ToolCode: resolved.ToolCode, + ServerCode: resolved.ServerCode, + ToolName: resolved.ToolName, + SourceType: resolved.SourceType, } } return ret diff --git a/internal/ai/runtime/registry/registry.go b/internal/ai/runtime/registry/registry.go index 76a5ce7..b027605 100644 --- a/internal/ai/runtime/registry/registry.go +++ b/internal/ai/runtime/registry/registry.go @@ -46,15 +46,12 @@ func (r *Registry) Resolve(ctx Context) (*ToolSet, error) { } ret.StaticTools = append(ret.StaticTools, tool) ret.StaticToolCodes[toolName] = toolCode - serverCode, resolvedToolName, sourceType, _ := toolx.BuildToolMetadata(toolCode) - if resolvedToolName == "" { - resolvedToolName = toolName - } + resolvedMetadata := toolx.ResolveToolMetadata(toolCode, toolName) ret.StaticToolMetadata[toolName] = ToolMetadata{ - ToolCode: toolCode, - ServerCode: serverCode, - ToolName: resolvedToolName, - SourceType: sourceType, + ToolCode: resolvedMetadata.ToolCode, + ServerCode: resolvedMetadata.ServerCode, + ToolName: resolvedMetadata.ToolName, + SourceType: resolvedMetadata.SourceType, } } return ret, nil diff --git a/internal/pkg/toolx/builtin_tools.go b/internal/pkg/toolx/builtin_tools.go index e5d4067..67f643f 100644 --- a/internal/pkg/toolx/builtin_tools.go +++ b/internal/pkg/toolx/builtin_tools.go @@ -16,6 +16,13 @@ type ToolSpec struct { Appendix string } +type ToolMetadata struct { + ToolCode string + ServerCode string + ToolName string + SourceType string +} + var ( BuiltinToolSearch = ToolSpec{ Code: "builtin/tool_search", @@ -310,6 +317,24 @@ func BuildToolMetadata(toolCode string) (serverCode, toolName, sourceType string return spec.ServerCode, spec.Name, spec.SourceType, true } +func ResolveToolMetadata(toolCode string, fallbackName string) ToolMetadata { + toolCode = NormalizeToolCodeAlias(strings.TrimSpace(toolCode)) + fallbackName = strings.TrimSpace(fallbackName) + serverCode, toolName, sourceType, ok := BuildToolMetadata(toolCode) + if !ok && toolName == "" { + toolName = fallbackName + } + if toolName == "" { + toolName = fallbackName + } + return ToolMetadata{ + ToolCode: toolCode, + ServerCode: strings.TrimSpace(serverCode), + ToolName: strings.TrimSpace(toolName), + SourceType: strings.TrimSpace(sourceType), + } +} + func IsAlwaysAllowedToolCode(toolCode string) bool { return NormalizeToolCodeAlias(strings.TrimSpace(toolCode)) == GraphHandoffConversation.Code }