45 lines
1.2 KiB
Python
45 lines
1.2 KiB
Python
from types import SimpleNamespace
|
|
|
|
from nanobot.agent.tools.context import ToolContext
|
|
from nanobot.agent.tools.file_state import FileStates
|
|
from nanobot.agent.tools.filesystem import FileToolsConfig, ReadFileTool
|
|
from nanobot.agent.tools.loader import ToolLoader
|
|
from nanobot.agent.tools.registry import ToolRegistry
|
|
from nanobot.config.schema import Config, ToolsConfig
|
|
|
|
FILE_TOOL_NAMES = {
|
|
"apply_patch",
|
|
"edit_file",
|
|
"find_files",
|
|
"grep",
|
|
"list_dir",
|
|
"read_file",
|
|
"write_file",
|
|
}
|
|
|
|
|
|
def test_file_tools_enabled_by_default():
|
|
assert FileToolsConfig().enable is True
|
|
assert Config().tools.file.enable is True
|
|
|
|
|
|
def test_file_tool_gate_follows_flag():
|
|
cfg = ToolsConfig()
|
|
cfg.file.enable = False
|
|
assert ReadFileTool.enabled(SimpleNamespace(config=cfg)) is False
|
|
assert ReadFileTool.enabled(SimpleNamespace(config=ToolsConfig())) is True
|
|
|
|
|
|
def test_file_tool_loader_skips_all_builtin_file_tools_when_disabled(tmp_path):
|
|
cfg = ToolsConfig(file=FileToolsConfig(enable=False))
|
|
ctx = ToolContext(
|
|
config=cfg,
|
|
workspace=str(tmp_path),
|
|
file_state_store=FileStates(),
|
|
)
|
|
registry = ToolRegistry()
|
|
|
|
ToolLoader().load(ctx, registry)
|
|
|
|
assert FILE_TOOL_NAMES.isdisjoint(registry.tool_names)
|