diff --git a/internal/ai/runtime/internal/impl/factory/agent_factory.go b/internal/ai/runtime/internal/impl/factory/agent_factory.go index 5ef87d6..cc2429d 100644 --- a/internal/ai/runtime/internal/impl/factory/agent_factory.go +++ b/internal/ai/runtime/internal/impl/factory/agent_factory.go @@ -108,12 +108,12 @@ func (f *AgentFactory) BuildCustomerServiceAgent(ctx context.Context, input Buil if modelName == "" || toolCode == "" { continue } - serverCode, toolName, _ := toolx.GetRegisteredToolIdentity(toolCode) + serverCode, toolName, sourceType, _ := toolx.BuildToolMetadata(toolCode) toolMetadataBy[modelName] = einocallbacks.ToolMetadata{ ToolCode: toolCode, ServerCode: serverCode, ToolName: toolName, - SourceType: toolx.ResolveToolSourceType(toolCode), + SourceType: sourceType, } } if input.SelectedSkill != nil { diff --git a/internal/ai/runtime/registry/registry.go b/internal/ai/runtime/registry/registry.go index 3941a2d..2fdb055 100644 --- a/internal/ai/runtime/registry/registry.go +++ b/internal/ai/runtime/registry/registry.go @@ -53,33 +53,14 @@ func isAllowedToolCode(toolCode string, allowedToolCodes map[string]struct{}) bo if len(allowedToolCodes) == 0 { return true } + toolCode = toolx.NormalizeToolCodeAlias(strings.TrimSpace(toolCode)) if _, ok := allowedToolCodes[toolCode]; ok { return true } - if isAlwaysAllowedToolCode(toolCode) { + if toolx.IsAlwaysAllowedToolCode(toolCode) { return true } - if strings.TrimSpace(toolCode) == toolx.GraphTriageServiceRequest.Code { - if _, ok := allowedToolCodes[toolx.GraphCreateTicketConfirm.Code]; ok { - return true - } - if _, ok := allowedToolCodes[toolx.GraphHandoffConversation.Code]; ok { - return true - } - } - if strings.TrimSpace(toolCode) == toolx.GraphAnalyzeConversation.Code { - if _, ok := allowedToolCodes[toolx.GraphCreateTicketConfirm.Code]; ok { - return true - } - if _, ok := allowedToolCodes[toolx.GraphHandoffConversation.Code]; ok { - return true - } - } - if strings.TrimSpace(toolCode) == toolx.GraphPrepareTicketDraft.Code { - _, ok := allowedToolCodes[toolx.GraphCreateTicketConfirm.Code] - return ok - } - return false + return toolx.IsImpliedAllowedToolCode(toolCode, allowedToolCodes) } func makeAllowedToolCodeSet(input []string) map[string]struct{} { @@ -88,7 +69,7 @@ func makeAllowedToolCodeSet(input []string) map[string]struct{} { } ret := make(map[string]struct{}, len(input)) for _, item := range input { - item = strings.TrimSpace(item) + item = toolx.NormalizeToolCodeAlias(strings.TrimSpace(item)) if item == "" { continue } @@ -96,7 +77,3 @@ func makeAllowedToolCodeSet(input []string) map[string]struct{} { } return ret } - -func isAlwaysAllowedToolCode(toolCode string) bool { - return strings.TrimSpace(toolCode) == toolx.GraphHandoffConversation.Code -} diff --git a/internal/pkg/toolx/builtin_tools.go b/internal/pkg/toolx/builtin_tools.go index 0b678a3..563aaf0 100644 --- a/internal/pkg/toolx/builtin_tools.go +++ b/internal/pkg/toolx/builtin_tools.go @@ -278,6 +278,38 @@ func BuildToolAppendices(hasDynamicMCPTools bool, toolCodes map[string]string) [ return ret } +func BuildToolMetadata(toolCode string) (serverCode, toolName, sourceType string, ok bool) { + spec, ok := GetRegisteredToolSpec(toolCode) + if !ok { + return "", "", ResolveToolSourceType(toolCode), false + } + return spec.ServerCode, spec.Name, spec.SourceType, true +} + +func IsAlwaysAllowedToolCode(toolCode string) bool { + return NormalizeToolCodeAlias(strings.TrimSpace(toolCode)) == GraphHandoffConversation.Code +} + +func IsImpliedAllowedToolCode(toolCode string, allowedToolCodes map[string]struct{}) bool { + toolCode = NormalizeToolCodeAlias(strings.TrimSpace(toolCode)) + if toolCode == "" || len(allowedToolCodes) == 0 { + return false + } + switch toolCode { + case GraphTriageServiceRequest.Code, GraphAnalyzeConversation.Code: + if _, ok := allowedToolCodes[GraphCreateTicketConfirm.Code]; ok { + return true + } + if _, ok := allowedToolCodes[GraphHandoffConversation.Code]; ok { + return true + } + case GraphPrepareTicketDraft.Code: + _, ok := allowedToolCodes[GraphCreateTicketConfirm.Code] + return ok + } + return false +} + func hasToolCode(toolCodes map[string]string, target string) bool { target = strings.TrimSpace(target) if target == "" || len(toolCodes) == 0 {