from __future__ import annotations from pydantic import BaseModel class ErrorBody(BaseModel): code: str message: str details: dict[str, str] | None = None class ErrorResponse(BaseModel): error: ErrorBody class DirectoryEntry(BaseModel): name: str path: str modified: str class FileEntry(BaseModel): name: str path: str size: int modified: str class BrowseResponse(BaseModel): path: str directories: list[DirectoryEntry] files: list[FileEntry] class MkdirRequest(BaseModel): parent_path: str name: str class MkdirResponse(BaseModel): path: str class RenameRequest(BaseModel): path: str new_name: str class RenameResponse(BaseModel): path: str class DeleteRequest(BaseModel): path: str class DeleteResponse(BaseModel): path: str class ViewResponse(BaseModel): path: str name: str content_type: str encoding: str truncated: bool size: int modified: str content: str class SaveRequest(BaseModel): path: str content: str expected_modified: str class SaveResponse(BaseModel): path: str size: int modified: str class TaskListItem(BaseModel): id: str operation: str status: str source: str destination: str created_at: str finished_at: str | None = None class TaskListResponse(BaseModel): items: list[TaskListItem] class TaskDetailResponse(BaseModel): id: str operation: str status: str source: str destination: str done_bytes: int | None = None total_bytes: int | None = None done_items: int | None = None total_items: int | None = None current_item: str | None = None failed_item: str | None = None error_code: str | None = None error_message: str | None = None created_at: str started_at: str | None = None finished_at: str | None = None class CopyRequest(BaseModel): source: str destination: str class TaskCreateResponse(BaseModel): task_id: str status: str class MoveRequest(BaseModel): source: str destination: str class BookmarkCreateRequest(BaseModel): path: str label: str class BookmarkItem(BaseModel): id: int path: str label: str created_at: str class BookmarkListResponse(BaseModel): items: list[BookmarkItem] class BookmarkDeleteResponse(BaseModel): id: int