New Tools
This commit is contained in:
parent
bbf67f11b1
commit
23823c82da
@ -30,6 +30,8 @@ tools_definition = [
|
|||||||
gadget.tools_mapping( schema = coder.schema_git_operation, handler = coder.git_operation ),
|
gadget.tools_mapping( schema = coder.schema_git_operation, handler = coder.git_operation ),
|
||||||
|
|
||||||
gadget.tools_mapping( schema = coder.schema_workspace_change, handler = coder.workspace_change ),
|
gadget.tools_mapping( schema = coder.schema_workspace_change, handler = coder.workspace_change ),
|
||||||
|
gadget.tools_mapping( schema = coder.schema_search_grep, handler = coder.search_grep ),
|
||||||
|
gadget.tools_mapping( schema = coder.schema_search_glob, handler = coder.search_glob ),
|
||||||
|
|
||||||
# Carrack Tools
|
# Carrack Tools
|
||||||
gadget.tools_mapping( schema = carrack.schema_sendhttprequest, handler = carrack.sendhttprequest ),
|
gadget.tools_mapping( schema = carrack.schema_sendhttprequest, handler = carrack.sendhttprequest ),
|
||||||
|
|||||||
@ -1,6 +1,7 @@
|
|||||||
import os
|
import os
|
||||||
import subprocess
|
import subprocess
|
||||||
import re
|
import re
|
||||||
|
import fnmatch
|
||||||
import glob as glob_module
|
import glob as glob_module
|
||||||
|
|
||||||
# Global state to track the agent's current working directory
|
# Global state to track the agent's current working directory
|
||||||
@ -220,3 +221,76 @@ def workspace_change(path):
|
|||||||
return f"Error: The path {target_path} does not exist or is not a directory."
|
return f"Error: The path {target_path} does not exist or is not a directory."
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
return f"Error changing workspace: {str(e)}"
|
return f"Error changing workspace: {str(e)}"
|
||||||
|
|
||||||
|
schema_search_grep = {
|
||||||
|
"type": "function",
|
||||||
|
"function": {
|
||||||
|
"name": "search_grep",
|
||||||
|
"description": "Search file contents using regular expressions. Fast content search across your codebase. Supports full regex syntax and file pattern filtering.",
|
||||||
|
"parameters": {
|
||||||
|
"type": "object",
|
||||||
|
"properties": {
|
||||||
|
"pattern": {"type": "string", "description": "Regex pattern to search for in file contents"},
|
||||||
|
"path": {"type": "string", "description": "Directory to search in (default: current working directory)", "default": "."},
|
||||||
|
"include": {"type": "string", "description": "File pattern to include (e.g. '*.py', '*.{ts,tsx}'). If not provided, all files are searched."}
|
||||||
|
},
|
||||||
|
"required": ["pattern"]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
def search_grep(pattern, path=".", include=None):
|
||||||
|
try:
|
||||||
|
search_path = os.path.join(get_current_workspace(), path) if not os.path.isabs(path) else path
|
||||||
|
results = []
|
||||||
|
for root, dirs, files in os.walk(search_path):
|
||||||
|
for file in files:
|
||||||
|
if include and not fnmatch.fnmatch(file, include):
|
||||||
|
continue
|
||||||
|
file_path = os.path.join(root, file)
|
||||||
|
try:
|
||||||
|
with open(file_path, 'r', encoding='utf-8', errors='replace') as f:
|
||||||
|
for i, line in enumerate(f.readlines(), 1):
|
||||||
|
if re.search(pattern, line):
|
||||||
|
results.append(f"{file_path}:{i}: {line.strip()}")
|
||||||
|
except:
|
||||||
|
continue
|
||||||
|
return "\n".join(results[:100]) if results else "No matches found"
|
||||||
|
except Exception as e:
|
||||||
|
return f"Error searching: {str(e)}"
|
||||||
|
|
||||||
|
schema_search_glob = {
|
||||||
|
"type": "function",
|
||||||
|
"function": {
|
||||||
|
"name": "search_glob",
|
||||||
|
"description": "Find files by pattern matching. Search for files using glob patterns like `**/*.html` or `modules/**/*.py`. Returns matching file paths sorted by modification time.",
|
||||||
|
"parameters": {
|
||||||
|
"type": "object",
|
||||||
|
"properties": {
|
||||||
|
"pattern": {"type": "string", "description": "Glob pattern to match files (e.g. '**/*.html', 'modules/**/*.py')"},
|
||||||
|
"path": {"type": "string", "description": "Directory to search in (default: current working directory)", "default": "."}
|
||||||
|
},
|
||||||
|
"required": ["pattern"]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
def search_glob(pattern, path="."):
|
||||||
|
try:
|
||||||
|
search_path = os.path.join(get_current_workspace(), path) if not os.path.isabs(path) else path
|
||||||
|
files = glob_module.glob(f"{search_path}/{pattern}", recursive=True)
|
||||||
|
def _isfile(f):
|
||||||
|
try:
|
||||||
|
return os.path.isfile(f)
|
||||||
|
except OSError:
|
||||||
|
return False
|
||||||
|
files = [f for f in files if _isfile(f)]
|
||||||
|
def _mtime(f):
|
||||||
|
try:
|
||||||
|
return os.path.getmtime(f)
|
||||||
|
except OSError:
|
||||||
|
return 0
|
||||||
|
files.sort(key=_mtime, reverse=True)
|
||||||
|
return "\n".join(files[:500]) if files else "No files found"
|
||||||
|
except Exception as e:
|
||||||
|
return f"Error searching: {str(e)}"
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user