"""File operation schemas."""
from typing import Optional
from pydantic import BaseModel, Field
class FileEntry(BaseModel):
"""Information about a file entry."""
name: str = Field(..., description="File name")
path: str = Field(..., description="Relative path from root")
size_bytes: int = Field(..., description="File size in bytes")
created: float = Field(..., description="Creation timestamp")
modified: float = Field(..., description="Last modification timestamp")
is_binary: bool = Field(..., description="Whether file is binary")
class FileListResult(BaseModel):
"""Result of listing files."""
files: list[FileEntry] = Field(..., description="List of files")
total_count: int = Field(..., description="Total number of files found")
class FileContentResult(BaseModel):
"""Result of reading file content."""
content: str = Field(..., description="File content (text or base64 encoded)")
is_binary: bool = Field(..., description="True if binary file (content is base64)")
encoding: Optional[str] = Field(None, description="Text encoding if text file")
total_size: int = Field(..., description="Total file size in bytes")
bytes_read: int = Field(..., description="Number of bytes read in this operation")
offset: int = Field(..., description="Starting offset of this read")
class FileMetadata(BaseModel):
"""Detailed metadata for a file."""
path: str = Field(..., description="Relative path from root")
exists: bool = Field(..., description="Whether file exists")
size_bytes: int = Field(..., description="File size in bytes")
is_binary: bool = Field(..., description="Whether file appears to be binary")
mime_type: Optional[str] = Field(None, description="MIME type (if detected)")
created: float = Field(..., description="Creation timestamp")
modified: float = Field(..., description="Last modification timestamp")
accessed: float = Field(..., description="Last access timestamp")
permissions: str = Field(..., description="File permissions (rwxrwxrwx)")