"""copy_file.py – tool for copying files inside the sandbox.""" from __future__ import annotations from shlex import quote from typing import TYPE_CHECKING from langchain_core.tools import BaseTool, tool from loguru import logger from docker_agent_sandbox.tools._utils import _parent if TYPE_CHECKING: from docker_agent_sandbox.sandbox import DockerSandbox def make_copy_file_tool(sandbox: "DockerSandbox") -> BaseTool: """Return a copy_file tool bound to *sandbox*.""" @tool def copy_file(src: str, dst: str) -> str: """ Copy a file from *src* to *dst*. Parent directories of *dst* are created automatically. Returns a confirmation message or an error. """ logger.debug("Copying file inside sandbox: {!r} -> {!r}", src, dst) mkdir_cmd = f"mkdir -p -- {quote(_parent(dst))}" exit_code, output = sandbox.exec( f"{mkdir_cmd} && cp -- {quote(src)} {quote(dst)}" ) if exit_code != 0: return f"[ERROR copying {src!r} to {dst!r}] {output.strip()}" return f"[OK] Copied {src} -> {dst}" return copy_file