Class: Clacky::ToolRegistry
- Inherits:
-
Object
- Object
- Clacky::ToolRegistry
- Defined in:
- lib/clacky/agent/tool_registry.rb
Constant Summary collapse
- TOOL_ALIASES =
Common aliases that LLMs frequently use instead of the registered tool names. Keys are downcased aliases; values are the canonical registered names.
{ # file_reader aliases "read" => "file_reader", "read_file" => "file_reader", "filereader" => "file_reader", "file_read" => "file_reader", "cat" => "file_reader", # write aliases "write_file" => "write", "create_file" => "write", "file_write" => "write", # edit aliases "file_edit" => "edit", "replace" => "edit", "replace_in_file" => "edit", "str_replace" => "edit", # terminal aliases "shell" => "terminal", "bash" => "terminal", "exec" => "terminal", "execute" => "terminal", "run_command" => "terminal", "run" => "terminal", "command" => "terminal", # web_search aliases "search" => "web_search", "websearch" => "web_search", "internet_search" => "web_search", "online_search" => "web_search", # web_fetch aliases "fetch" => "web_fetch", "webfetch" => "web_fetch", "browse" => "web_fetch", "url_fetch" => "web_fetch", "http_get" => "web_fetch", # grep aliases "search_files" => "grep", "search_in_files" => "grep", "find_in_files" => "grep", "search_code" => "grep", # glob aliases "find_files" => "glob", "list_files" => "glob", "file_glob" => "glob", "search_filenames" => "glob", # invoke_skill aliases "skill" => "invoke_skill", "run_skill" => "invoke_skill", # todo_manager aliases "todo" => "todo_manager", "task_manager" => "todo_manager", # request_user_feedback aliases "ask_user" => "request_user_feedback", "user_feedback" => "request_user_feedback", "ask" => "request_user_feedback", # trash_manager aliases "trash" => "trash_manager", "delete" => "trash_manager", "rm" => "trash_manager", "remove" => "trash_manager", }.freeze
Instance Method Summary collapse
- #all ⇒ Object
- #all_definitions ⇒ Object
- #allowed_definitions(allowed_tools = nil) ⇒ Object
- #by_category(category) ⇒ Object
- #get(name) ⇒ Object
-
#initialize ⇒ ToolRegistry
constructor
A new instance of ToolRegistry.
- #register(tool) ⇒ Object
-
#resolve(name) ⇒ Object
Resolve a tool name (possibly misspelt or aliased) to the canonical registered name.
- #tool_names ⇒ Object
Constructor Details
#initialize ⇒ ToolRegistry
Returns a new instance of ToolRegistry.
69 70 71 72 73 |
# File 'lib/clacky/agent/tool_registry.rb', line 69 def initialize @tools = {} # Downcased index for case-insensitive lookups @downcased_index = {} end |
Instance Method Details
#all ⇒ Object
119 120 121 |
# File 'lib/clacky/agent/tool_registry.rb', line 119 def all @tools.values end |
#all_definitions ⇒ Object
123 124 125 |
# File 'lib/clacky/agent/tool_registry.rb', line 123 def all_definitions @tools.values.map(&:to_function_definition) end |
#allowed_definitions(allowed_tools = nil) ⇒ Object
127 128 129 130 131 132 133 |
# File 'lib/clacky/agent/tool_registry.rb', line 127 def allowed_definitions(allowed_tools = nil) return all_definitions if allowed_tools.nil? || allowed_tools.include?("all") @tools.select { |name, _| allowed_tools.include?(name) } .values .map(&:to_function_definition) end |
#by_category(category) ⇒ Object
139 140 141 |
# File 'lib/clacky/agent/tool_registry.rb', line 139 def by_category(category) @tools.values.select { |tool| tool.category == category } end |
#get(name) ⇒ Object
80 81 82 |
# File 'lib/clacky/agent/tool_registry.rb', line 80 def get(name) @tools[name] || raise(Clacky::ToolCallError, "Tool not found: #{name}") end |
#register(tool) ⇒ Object
75 76 77 78 |
# File 'lib/clacky/agent/tool_registry.rb', line 75 def register(tool) @tools[tool.name] = tool @downcased_index[tool.name.downcase] = tool.name end |
#resolve(name) ⇒ Object
Resolve a tool name (possibly misspelt or aliased) to the canonical registered name. Resolution order:
1. Exact match in the registry
2. Case-insensitive match (e.g. "Read" → "file_reader")
3. Alias lookup (e.g. "read_file" → "file_reader")
Returns the canonical tool name, or nil if nothing matched.
90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 |
# File 'lib/clacky/agent/tool_registry.rb', line 90 def resolve(name) return name if @tools.key?(name) downcased = name.downcase # Case-insensitive match if @downcased_index.key?(downcased) return @downcased_index[downcased] end # Alias lookup if TOOL_ALIASES.key?(downcased) return TOOL_ALIASES[downcased] end # Fuzzy: try underscore / hyphen normalisation (e.g. "file-reader" → "file_reader") normalized = downcased.tr("-", "_") if normalized != downcased if @downcased_index.key?(normalized) return @downcased_index[normalized] end if TOOL_ALIASES.key?(normalized) return TOOL_ALIASES[normalized] end end nil end |
#tool_names ⇒ Object
135 136 137 |
# File 'lib/clacky/agent/tool_registry.rb', line 135 def tool_names @tools.keys end |