diff options
| author | Joel Kronqvist <joel.kronqvist@iki.fi> | 2026-10-11 01:02:18 +0300 |
|---|---|---|
| committer | Joel Kronqvist <joel.kronqvist@iki.fi> | 2026-10-11 01:02:18 +0300 |
| commit | 3b9658bb9ae113732e250ad4e84866a349f88274 (patch) | |
| tree | 4c5afc6b0de92a1adc01ec5e174b61540c327fa8 /actions.py | |
| parent | deb9c54f7ef75b73813c1709fbf98511eeab625a (diff) | |
| download | agent-3b9658bb9ae113732e250ad4e84866a349f88274.tar.gz agent-3b9658bb9ae113732e250ad4e84866a349f88274.zip | |
feat: --workdir
Diffstat (limited to 'actions.py')
| -rw-r--r-- | actions.py | 21 |
1 files changed, 10 insertions, 11 deletions
@@ -4,12 +4,12 @@ import subprocess def _path_checked(path: Path, cwd=Path.cwd()) -> Optional[Path]: """Resolves `path`, returning `None` if it's not a subdirectory of `cwd`.""" - path = path.resolve() + path = (path if path.is_absolute() else (cwd / path)).resolve() cwd = cwd.resolve() return path if path.is_relative_to(cwd) else None -def _path_helper(path_str: str, callback): - path = _path_checked(Path(path_str)) +def _path_helper(path_str: str, callback, cwd=Path.cwd()): + path = _path_checked(Path(path_str), cwd=cwd) if path is None: return {"status": "error", "reason": f"Permission denied: {path_str}"} else: @@ -18,33 +18,33 @@ def _path_helper(path_str: str, callback): except Exception as e: return {"status": "error", "reason": f"Failure: {e}"} -def ls(args): +def ls(args, workdir=Path.cwd()): '{"action": "ls", "path": PATH} - list files at PATH' def inner(path: Path): return {"content": list(map(lambda s: str(s), path.iterdir()))} match args: case {"action": "ls", "path": path_str}: - return _path_helper(path_str, inner) + return _path_helper(path_str, inner, cwd=workdir) -def read(args): +def read(args, workdir=Path.cwd()): '{"action": "read", "path": PATH} - read file at PATH' def inner(path: Path): contents = path.read_text(encoding="utf-8") return {"content": contents} match args: case {"action": "read", "path": path_str}: - return _path_helper(path_str, inner) + return _path_helper(path_str, inner, cwd=workdir) -def write(args): +def write(args, workdir=Path.cwd()): '{"action": "write", "path": PATH, "content": CONTENT} - write CONTENT into file at PATH' def inner(path: Path, text: str): n_bytes = path.write_text(text) return {"bytes": n_bytes} match args: case {"action": "write", "path": path_str, "content": content}: - return _path_helper(path_str, lambda path: inner(path, content)) + return _path_helper(path_str, lambda path: inner(path, content), cwd=workdir) -def tldr(args): +def tldr(args, workdir=Path.cwd()): '{"action": "tldr", "program": PROGRAM} - read tldr docs for PROGRAM' match args: case {"action": "tldr", "program": program_str}: @@ -61,4 +61,3 @@ def tldr(args): except Exception as e: return {"status": "error", "reason": f"An unexpected error occurred: {e}"} -ALL_ACTIONS = [ls, read, write, tldr] |
