diff --git a/src/crewai/cli/utils.py b/src/crewai/cli/utils.py index 7ff2cf7bd..e1ff0dd15 100644 --- a/src/crewai/cli/utils.py +++ b/src/crewai/cli/utils.py @@ -385,7 +385,7 @@ def extract_available_exports(dir_path: str = "src"): raise SystemExit(1) -def _load_tools_from_init(init_file: Path) -> list: +def _load_tools_from_init(init_file: Path) -> list[dict[str, Any]]: """ Load and validate tools from a given __init__.py file. """ @@ -407,8 +407,11 @@ def _load_tools_from_init(init_file: Path) -> list: raise SystemExit(1) # TODO: Security check: prevent any inject malicious code, or stuff like that + return [ - name + { + "name": name, + } for name in module.__all__ if hasattr(module, name) and is_valid_tool(getattr(module, name)) ] diff --git a/tests/cli/test_utils.py b/tests/cli/test_utils.py index 887a080b3..115bb67eb 100644 --- a/tests/cli/test_utils.py +++ b/tests/cli/test_utils.py @@ -165,7 +165,7 @@ __all__ = ['MyTool'] """, ) tools = utils.extract_available_exports(dir_path=temp_project_dir) - assert ["MyTool"] == tools + assert [{"name": "MyTool"}] == tools def test_extract_available_exports_valid_tool_decorator(temp_project_dir): @@ -182,7 +182,7 @@ __all__ = ['my_tool_function'] """, ) tools = utils.extract_available_exports(dir_path=temp_project_dir) - assert ["my_tool_function"] == tools + assert [{"name": "my_tool_function"}] == tools def test_extract_available_exports_multiple_valid_tools(temp_project_dir): @@ -203,7 +203,7 @@ __all__ = ['MyTool', 'my_tool_function'] """, ) tools = utils.extract_available_exports(dir_path=temp_project_dir) - assert ["MyTool", "my_tool_function"] == tools + assert [{"name": "MyTool"}, {"name": "my_tool_function"}] == tools def test_extract_available_exports_with_invalid_tool_decorator(temp_project_dir): @@ -222,7 +222,7 @@ __all__ = ['MyTool', 'not_a_tool'] """, ) tools = utils.extract_available_exports(dir_path=temp_project_dir) - assert ["MyTool"] == tools + assert [{"name": "MyTool"}] == tools def test_extract_available_exports_import_error(temp_project_dir, capsys):