"""Shell command execution tool. This module provides an operation that can execute shell commands asynchronously and return the output, error, and exit code. """ from ...core.op import BaseTool from ...core.schema import ToolCall from ...core.utils import run_shell_command class ExecuteShell(BaseTool): """Operation for executing shell commands asynchronously. This operation takes a shell command as input, executes it asynchronously, and returns the stdout, stderr, and exit code in a formatted result. """ def _build_tool_call(self) -> ToolCall: return ToolCall( **{ "description": self.get_prompt("tool"), "parameters": { "type": "object", "properties": { "command": { "type": "string", "description": "command", }, }, "required": ["command"], }, }, ) async def execute(self): command: str = self.context.command stdout, stderr, return_code = await run_shell_command(command) result_parts = [ f"Command: {command}", f"Output: {stdout if stdout else '(empty)'}", f"Error: {stderr if stderr else '(none)'}", f"Exit Code: {return_code if return_code is not None else '(none)'}", ] return "\n".join(result_parts)