feat: refactor tool metadata handling and simplify allowed tool code checks

This commit is contained in:
mlogclub
2026-04-12 23:15:27 +08:00
parent c5941e91e0
commit 6499126f40
3 changed files with 38 additions and 29 deletions
@@ -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 {
+4 -27
View File
@@ -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
}
+32
View File
@@ -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 {