Files
virtual-banker/backend/tools/registry.go

74 lines
1.4 KiB
Go

package tools
import (
"context"
"fmt"
)
// Tool represents an executable tool
type Tool interface {
Name() string
Description() string
Execute(ctx context.Context, params map[string]interface{}) (*ToolResult, error)
}
// ToolResult represents the result of tool execution
type ToolResult struct {
Success bool
Data interface{}
Error string
RequiresConfirmation bool
}
// Registry manages available tools
type Registry struct {
tools map[string]Tool
}
// NewRegistry creates a new tool registry
func NewRegistry() *Registry {
return &Registry{
tools: make(map[string]Tool),
}
}
// Register registers a tool
func (r *Registry) Register(tool Tool) {
r.tools[tool.Name()] = tool
}
// Get gets a tool by name
func (r *Registry) Get(name string) (Tool, error) {
tool, ok := r.tools[name]
if !ok {
return nil, fmt.Errorf("tool not found: %s", name)
}
return tool, nil
}
// List returns all registered tools
func (r *Registry) List() []Tool {
tools := make([]Tool, 0, len(r.tools))
for _, tool := range r.tools {
tools = append(tools, tool)
}
return tools
}
// GetAllowedTools returns tools allowed for a tenant
func (r *Registry) GetAllowedTools(allowedNames []string) []Tool {
allowedSet := make(map[string]bool)
for _, name := range allowedNames {
allowedSet[name] = true
}
var tools []Tool
for _, tool := range r.tools {
if allowedSet[tool.Name()] {
tools = append(tools, tool)
}
}
return tools
}