This commit implements a progressive refactoring of the tool system to support plugin discovery, scoped loading, and protocol-driven runtime context injection. Key changes: - Add Tool ABC metadata (tool_name, _scopes) and ToolContext dataclass for dependency injection. - Introduce ToolLoader with pkgutil-based builtin discovery and entry_points-based third-party plugin loading. - Add scope filtering (core/subagent/memory) so different contexts load appropriate tool sets. - Introduce ContextAware protocol and RequestContext dataclass to replace hardcoded per-tool context injection in AgentLoop. - Add RuntimeState / MutableRuntimeState protocols to decouple MyTool from AgentLoop. - Migrate all built-in tools to declare scopes and implement create()/enabled() hooks. - Migrate MessageTool, SpawnTool, CronTool, and MyTool to ContextAware. - Refactor AgentLoop to use ToolLoader and protocol-driven context injection. - Refactor SubagentManager to use ToolLoader(scope="subagent") with per-run FileStates isolation. - Register all built-in tools via pyproject.toml entry_points. - Add comprehensive tests for loader scopes, entry_points, ContextAware, subagent tools, and runtime state sync.
32 lines
702 B
Python
32 lines
702 B
Python
"""Agent tools module."""
|
|
|
|
from nanobot.agent.tools.base import Schema, Tool, tool_parameters
|
|
from nanobot.agent.tools.context import ToolContext
|
|
from nanobot.agent.tools.loader import ToolLoader
|
|
from nanobot.agent.tools.registry import ToolRegistry
|
|
from nanobot.agent.tools.schema import (
|
|
ArraySchema,
|
|
BooleanSchema,
|
|
IntegerSchema,
|
|
NumberSchema,
|
|
ObjectSchema,
|
|
StringSchema,
|
|
tool_parameters_schema,
|
|
)
|
|
|
|
__all__ = [
|
|
"Schema",
|
|
"ArraySchema",
|
|
"BooleanSchema",
|
|
"IntegerSchema",
|
|
"NumberSchema",
|
|
"ObjectSchema",
|
|
"StringSchema",
|
|
"Tool",
|
|
"ToolContext",
|
|
"ToolLoader",
|
|
"ToolRegistry",
|
|
"tool_parameters",
|
|
"tool_parameters_schema",
|
|
]
|