mirror of
https://github.com/Significant-Gravitas/AutoGPT.git
synced 2026-04-08 03:00:28 -04:00
### Changes 🏗️ This PR adds folder organization capabilities to the library, allowing users to organize their agents into folders: - Added new `LibraryFolder` model and database schema - Created folder management API endpoints for CRUD operations - Implemented folder tree structure with proper parent-child relationships - Added drag-and-drop functionality for moving agents between folders - Created folder creation dialog with emoji picker for folder icons - Added folder editing and deletion capabilities - Implemented folder navigation in the library UI - Added validation to prevent circular references and excessive nesting - Created animation for favoriting agents - Updated library agent list to show folder structure - Added folder filtering to agent list queries <img width="1512" height="950" alt="Screenshot 2026-02-13 at 9 08 45 PM" src="https://github.com/user-attachments/assets/78778e03-4349-4d50-ad71-d83028ca004a" /> ### Checklist 📋 #### For code changes: - [x] I have clearly listed my changes in the PR description - [x] I have made a test plan - [x] I have tested my changes according to the test plan: - [x] Create a new folder with custom name, icon, and color - [x] Move agents into folders via drag and drop - [x] Move agents into folders via context menu - [x] Navigate between folders - [x] Edit folder properties (name, icon, color) - [x] Delete folders and verify agents return to root - [x] Verify favorite animation works when adding to favorites - [x] Test folder navigation with search functionality - [x] Verify folder tree structure is maintained #### For configuration changes: - [x] `.env.default` is updated or already compatible with my changes - [x] `docker-compose.yml` is updated or already compatible with my changes - [x] I have included a list of my configuration changes in the PR description (under **Changes**) <!-- greptile_comment --> <h2>Greptile Overview</h2> <details><summary><h3>Greptile Summary</h3></summary> This PR implements a comprehensive folder organization system for library agents, enabling hierarchical structure up to 5 levels deep. **Backend Changes:** - Added `LibraryFolder` model with self-referential hierarchy (`parentId` → `Parent`/`Children`) - Implemented CRUD operations with validation for circular references and depth limits (MAX_FOLDER_DEPTH=5) - Added `folderId` foreign key to `LibraryAgent` table - Created folder management endpoints: list, get, create, update, move, delete, and bulk agent moves - Proper soft-delete cascade handling for folders and their contained agents **Frontend Changes:** - Created folder creation/edit/delete dialogs with emoji picker integration - Implemented folder navigation UI with breadcrumbs and folder tree structure - Added drag-and-drop support for moving agents between folders - Created context menu for agent actions (move to folder, remove from folder) - Added favorite animation system with `FavoriteAnimationProvider` - Integrated folder filtering into agent list queries **Key Features:** - Folders support custom names, emoji icons, and hex colors - Unique constraint per parent folder per user prevents duplicate names - Validation prevents circular folder hierarchies and excessive nesting - Agents can be moved between folders via drag-drop or context menu - Deleting a folder soft-deletes all descendant folders and contained agents </details> <details><summary><h3>Confidence Score: 4/5</h3></summary> - This PR is safe to merge with minor considerations for performance optimization - The implementation is well-structured with proper validation, error handling, and database constraints. The folder hierarchy logic correctly prevents circular references and enforces depth limits. However, there are some performance concerns with N+1 queries in depth calculation and circular reference checking that could be optimized for deeply nested hierarchies. The foreign key constraint (ON DELETE RESTRICT) conflicts with the hard-delete code path but shouldn't cause issues since soft-deletes are the default. The client-side duplicate validation is redundant but not harmful. - Pay close attention to migration file (foreign key constraint) and db.py (performance of recursive queries) </details> <details><summary><h3>Sequence Diagram</h3></summary> ```mermaid sequenceDiagram participant User participant Frontend participant API participant DB User->>Frontend: Create folder with name/icon/color Frontend->>API: POST /v2/folders API->>DB: Validate parent exists & depth limit API->>DB: Check unique constraint (userId, parentId, name) DB-->>API: Folder created API-->>Frontend: LibraryFolder response Frontend-->>User: Show success toast User->>Frontend: Drag agent to folder Frontend->>API: POST /v2/folders/agents/bulk-move API->>DB: Verify folder exists API->>DB: Update LibraryAgent.folderId DB-->>API: Agents updated API-->>Frontend: Updated agents Frontend-->>User: Refresh agent list User->>Frontend: Navigate into folder Frontend->>API: GET /v2/library/agents?folder_id=X API->>DB: Query agents WHERE folderId=X DB-->>API: Filtered agents API-->>Frontend: Agent list Frontend-->>User: Display folder contents User->>Frontend: Delete folder Frontend->>API: DELETE /v2/folders/{id} API->>DB: Get descendant folders recursively API->>DB: Soft-delete folders + agents in transaction DB-->>API: Deletion complete API-->>Frontend: 204 No Content Frontend-->>User: Show success toast ``` </details> <sub>Last reviewed commit: a6c2f64</sub> <!-- greptile_other_comments_section --> <!-- /greptile_comment -->
11 lines
256 B
Python
11 lines
256 B
Python
class FolderValidationError(Exception):
|
|
"""Raised when folder operations fail validation."""
|
|
|
|
pass
|
|
|
|
|
|
class FolderAlreadyExistsError(FolderValidationError):
|
|
"""Raised when a folder with the same name already exists in the location."""
|
|
|
|
pass
|