Class: Rubino::Tools::GlobTool
- Inherits:
-
Base
- Object
- Base
- Rubino::Tools::GlobTool
show all
- Defined in:
- lib/rubino/tools/glob_tool.rb
Overview
Tool for finding files by glob patterns. Returns matching file paths sorted by modification time.
Instance Attribute Summary
Attributes inherited from Base
#cancel_token, #read_tracker, #stream_chunk, #stream_kind
Instance Method Summary
collapse
Methods inherited from Base
#cancellation_requested?, #config_key, #display_name, #emit_chunk, #mcp?, #risky?, #to_tool_definition, workspace_root, workspace_roots
Instance Method Details
#call(arguments) ⇒ Object
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
|
# File 'lib/rubino/tools/glob_tool.rb', line 47
def call(arguments)
pattern = arguments["pattern"] || arguments[:pattern]
path = arguments["path"] || arguments[:path] || "."
max_results = arguments["max_results"] || arguments[:max_results] || 100
include_ignored = arguments["include_ignored"] || arguments[:include_ignored] || false
expanded_path = expand_workspace_path(path)
full_pattern = resolve_pattern(pattern, path, expanded_path)
return full_pattern if full_pattern.is_a?(String) && full_pattern.start_with?("Error:")
files = matching_files(full_pattern, expanded_path, max_results, include_ignored)
if files.empty?
"No files matched pattern: #{pattern}"
else
relative_files = files.map { |f| f.sub("#{expanded_path}/", "") }
full = "#{relative_files.size} file(s) found:\n\n#{relative_files.join("\n")}"
{ output: full,
metrics: "#{relative_files.size} file#{"s" if relative_files.size != 1}",
body: Util::Output.preview(full),
body_kind: :plain }
end
end
|
#description ⇒ Object
12
13
14
15
|
# File 'lib/rubino/tools/glob_tool.rb', line 12
def description
"Find files by glob pattern (e.g., '**/*.rb', 'src/**/*.ts'). " \
"Returns matching file paths sorted by modification time."
end
|
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
|
# File 'lib/rubino/tools/glob_tool.rb', line 17
def input_schema
{
type: "object",
properties: {
pattern: {
type: "string",
description: "The glob pattern to match files against (e.g., '**/*.rb')"
},
path: {
type: "string",
description: "Base directory to search in (defaults to current directory)"
},
max_results: {
type: "integer",
description: "Maximum number of results (default: 100)"
},
include_ignored: {
type: "boolean",
description: "Include files git ignores (.gitignore, build artifacts). " \
"Default false — results honor .gitignore like grep does."
}
},
required: %w[pattern]
}
end
|
#name ⇒ Object
8
9
10
|
# File 'lib/rubino/tools/glob_tool.rb', line 8
def name
"glob"
end
|
#risk_level ⇒ Object
43
44
45
|
# File 'lib/rubino/tools/glob_tool.rb', line 43
def risk_level
:low
end
|