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