execute method
Execute the tool with the given input.
Implementation
@override
Future<ToolResult> execute(Map<String, dynamic> input) async {
final pattern = input['pattern'] as String?;
if (pattern == null || pattern.isEmpty) {
return ToolResult.error('Missing required parameter: pattern');
}
final searchPath = input['path'] as String? ?? Directory.current.path;
final dir = Directory(searchPath);
if (!await dir.exists()) {
return ToolResult.error('Directory not found: $searchPath');
}
try {
// Extract extension from glob pattern
final ext = _extractExtension(pattern);
final matches = <_FileMatch>[];
await for (final entity in dir.list(recursive: true)) {
if (entity is! File) continue;
if (_shouldSkip(entity.path)) continue;
if (ext != null && !entity.path.endsWith(ext)) continue;
if (ext == null && !_simpleGlobMatch(entity.path, pattern)) continue;
final stat = await entity.stat();
matches.add(_FileMatch(entity.path, stat.modified));
if (matches.length >= 500) break;
}
// Sort by modification time (newest first)
matches.sort((a, b) => b.modified.compareTo(a.modified));
if (matches.isEmpty) {
return ToolResult.success('No files matching pattern: $pattern');
}
return ToolResult.success(matches.map((m) => m.path).join('\n'));
} catch (e) {
return ToolResult.error('Glob error: $e');
}
}