Register the default set of tools.
(self)
| 83 | self._register_default_tools() |
| 84 | |
| 85 | def _register_default_tools(self) -> None: |
| 86 | """Register the default set of tools.""" |
| 87 | # File tools (restrict to workspace if configured) |
| 88 | allowed_dir = self.workspace if self.restrict_to_workspace else None |
| 89 | self.tools.register(ReadFileTool(allowed_dir=allowed_dir)) |
| 90 | self.tools.register(WriteFileTool(allowed_dir=allowed_dir)) |
| 91 | self.tools.register(EditFileTool(allowed_dir=allowed_dir)) |
| 92 | self.tools.register(ListDirTool(allowed_dir=allowed_dir)) |
| 93 | |
| 94 | # Shell tool |
| 95 | self.tools.register( |
| 96 | ExecTool( |
| 97 | working_dir=str(self.workspace), |
| 98 | timeout=self.exec_config.timeout, |
| 99 | restrict_to_workspace=self.restrict_to_workspace, |
| 100 | ) |
| 101 | ) |
| 102 | |
| 103 | # Web tools |
| 104 | self.tools.register(WebSearchTool(api_key=self.brave_api_key)) |
| 105 | self.tools.register(WebFetchTool()) |
| 106 | |
| 107 | # Message tool |
| 108 | message_tool = MessageTool(send_callback=self.bus.publish_outbound) |
| 109 | self.tools.register(message_tool) |
| 110 | |
| 111 | # Spawn tool (for subagents) |
| 112 | spawn_tool = SpawnTool(manager=self.subagents) |
| 113 | self.tools.register(spawn_tool) |
| 114 | |
| 115 | # Cron tool (for scheduling) |
| 116 | if self.cron_service: |
| 117 | self.tools.register(CronTool(self.cron_service)) |
| 118 | |
| 119 | # DeepCode tools (conditionally loaded when DEEPCODE_API_URL is set) |
| 120 | deepcode_url = os.environ.get("DEEPCODE_API_URL") |
| 121 | if deepcode_url: |
| 122 | from nanobot.agent.tools.deepcode import create_all_tools |
| 123 | |
| 124 | for tool in create_all_tools(api_url=deepcode_url): |
| 125 | self.tools.register(tool) |
| 126 | logger.info(f"DeepCode tools registered (API: {deepcode_url})") |
| 127 | |
| 128 | async def run(self) -> None: |
| 129 | """Run the agent loop, processing messages from the bus.""" |
no test coverage detected