Files
task-69de7223f309a98be0007e09/virtual_fs.py
T
2026-06-02 07:04:27 +00:00

77 lines
2.2 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
"""
Virtual file system for the deep agent.
This module implements a simple in-memory file system that allows the agent to create
and modify files during its execution. At the end of the run the virtual files can
be dumped to the real file system.
"""
from __future__ import annotations
from pathlib import Path
from typing import Dict, Iterable, Tuple
class VirtualFileSystem:
"""A minimal inmemory file system.
The files are stored in a dictionary mapping a relative path to its content.
The content is stored as a string. The class provides methods for writing
files, reading files and dumping all files to a real directory.
"""
def __init__(self) -> None:
self._files: Dict[str, str] = {}
def write(self, path: str | Path, content: str) -> None:
"""Write *content* to *path*.
Parameters
----------
path:
The relative path of the file. ``Path`` objects are accepted for
convenience.
content:
The textual content to store.
"""
path = str(path).lstrip("./")
self._files[path] = content
def read(self, path: str | Path) -> str:
"""Return the content of *path*.
Raises
------
KeyError
If the file does not exist.
"""
path = str(path).lstrip("./")
return self._files[path]
def list_files(self) -> Iterable[Tuple[str, str]]:
"""Yield ``(path, content)`` for all stored files."""
for path, content in self._files.items():
yield path, content
def dump_to_disk(self, root: str | Path) -> None:
"""Write all virtual files to *root*.
Parameters
----------
root:
The directory on the real file system where the files should be
created.
"""
root = Path(root)
for path, content in self._files.items():
file_path = root / path
file_path.parent.mkdir(parents=True, exist_ok=True)
file_path.write_text(content, encoding="utf-8")
def __repr__(self) -> str: # pragma: no cover
return f"VirtualFileSystem({len(self._files)} files)"
# Singleton instance used by the tools.
virtual_fs = VirtualFileSystem()