diff --git a/lib/roast/cogs/agent/providers/claude/tool_use.rb b/lib/roast/cogs/agent/providers/claude/tool_use.rb index ed6fad87..ff03d557 100644 --- a/lib/roast/cogs/agent/providers/claude/tool_use.rb +++ b/lib/roast/cogs/agent/providers/claude/tool_use.rb @@ -91,6 +91,25 @@ def format_read details ? "READ #{file_path} (#{details})" : "READ #{file_path}" end + # Formats a Glob tool-use line. + # + # Input fields: + # :pattern (String) – glob pattern to match [required] + # :path (String) – directory to search in [optional] + # + # Output: "GLOB ", with " (in )" appended when :path + # is present. + # + # Examples: + # GLOB **/*.rb (in lib/roast) + # GLOB **/*.rb + # + #: () -> String + def format_glob + pattern, path = input.values_at(:pattern, :path) + path ? "GLOB #{pattern} (in #{path})" : "GLOB #{pattern}" + end + #: () -> String def format_unknown "UNKNOWN [#{name}] #{input.inspect}" diff --git a/test/roast/cogs/agent/providers/claude/tool_use_test.rb b/test/roast/cogs/agent/providers/claude/tool_use_test.rb index 6beff4aa..188982e6 100644 --- a/test/roast/cogs/agent/providers/claude/tool_use_test.rb +++ b/test/roast/cogs/agent/providers/claude/tool_use_test.rb @@ -103,6 +103,24 @@ class ToolUseTest < ActiveSupport::TestCase assert_equal "READ /a.rb", output end + # format_glob + + test "format_glob renders the pattern only when no path given" do + tool_use = ToolUse.new(name: :glob, input: { pattern: "**/*.rb" }) + + output = tool_use.format + + assert_equal "GLOB **/*.rb", output + end + + test "format_glob appends the search path in parentheses" do + tool_use = ToolUse.new(name: :glob, input: { pattern: "**/*.rb", path: "lib/roast" }) + + output = tool_use.format + + assert_equal "GLOB **/*.rb (in lib/roast)", output + end + test "format calls format_unknown for unknown tool" do tool_use = ToolUse.new(name: :unknown_tool, input: { arg: "value" })