from __future__ import annotations from app.core.contracts import ToolResult, UserTask from app.tools.base import BaseTool from app.tools.sandbox import ToolSandbox class FileReadTool(BaseTool): name = "file_read" def __init__(self, sandbox: ToolSandbox) -> None: self._sandbox = sandbox def execute(self, task: UserTask, args: dict[str, object]) -> ToolResult: path = args.get("path") if not path: return ToolResult(tool=self.name, ok=False, error="Missing path") resolved = self._sandbox.ensure_path_allowed(str(path)) content = resolved.read_text(encoding="utf-8") return ToolResult( tool=self.name, ok=True, output=content, metadata={"path": str(resolved), "size": len(content)}, )