-
-
Notifications
You must be signed in to change notification settings - Fork 1.2k
feat: implement persona folder for advanced persona management #4443
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Merged
Conversation
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Implement hierarchical folder structure for organizing personas: - Add PersonaFolder model with recursive parent-child relationships - Add folder_id and sort_order fields to Persona model - Implement CRUD operations for persona folders in database layer - Add migration support for existing databases - Extend PersonaManager with folder management methods - Add dashboard API routes for folder operations
…folders Add new API endpoint POST /persona/reorder to batch update sort_order for both personas and folders. This enables drag-and-drop reordering in the dashboard UI. Changes: - Add abstract batch_update_sort_order method to BaseDatabase - Implement batch_update_sort_order in SQLiteDatabase - Add batch_update_sort_order to PersonaManager with cache refresh - Add reorder_items route handler with input validation
Extend persona creation flow to support folder placement and ordering: - Add folder_id and sort_order parameters to insert_persona in db layer - Update PersonaManager.create_persona to accept and pass folder params - Add get_folder_detail API endpoint for retrieving folder information - Include folder_id and sort_order in persona creation response - Add session flush/refresh to return complete persona object
- Add folder management system with tree view and breadcrumbs - Implement create, rename, delete, and move operations for folders - Add drag-and-drop support for organizing personas and folders - Create new PersonaManager component and Pinia store for state management - Refactor PersonaPage to support hierarchical structure - Update locale files with folder-related translations - Handle empty parent_id correctly in backend route
Move folder expansion logic from local component state to global Pinia store to persist expansion state. - Add `expandedFolderIds` state and toggle actions to `personaStore` - Update `FolderTreeNode` to use store state instead of local data - Automatically navigate to target folder after moving a persona
Extract folder management UI into reusable base components and create persona-specific wrapper components that integrate with personaStore. - Add base folder components (tree, breadcrumb, card, dialogs) with customizable labels for i18n support - Create useFolderManager composable for folder state management - Implement drag-and-drop support for moving personas between folders - Add persona-specific wrapper components connecting to personaStore - Reorganize PersonaManager into views/persona directory structure - Include comprehensive README documentation for component usage
Remove deprecated persona folder management Vue components that have been superseded by the new reusable folder management component library. Deleted components: - CreateFolderDialog.vue - FolderBreadcrumb.vue - FolderCard.vue - FolderTree.vue - FolderTreeNode.vue - MoveTargetNode.vue - MoveToFolderDialog.vue - PersonaCard.vue - PersonaManager.vue These components are replaced by the centralized folder management implementation introduced in commit 3fbb3db.
Implement a 150ms delay before showing the skeleton loader in PersonaManager to prevent visual flicker during fast loading operations. - Add showSkeleton state with timer-based delay mechanism - Use v-fade-transition for smooth skeleton visibility transitions - Clean up timer on component unmount to prevent memory leaks - Only display skeleton when loading exceeds threshold duration
…na selection Introduce BaseFolderItemSelector.vue as a reusable component for selecting items within folder hierarchies. Refactor PersonaSelector to use this new base component instead of its previous flat list implementation. Changes: - Add BaseFolderItemSelector with folder tree navigation and item selection - Extend folder types with SelectableItem and FolderItemSelectorLabels - Refactor PersonaSelector to leverage the new base component - Add i18n translations for rootFolder and emptyFolder labels
Add hierarchical folder tree output for the persona list command, showing personas organized by folders with visual tree connectors. - Add _build_tree_output method for recursive tree structure rendering - Display folders with 📁 icon and personas with 👤 icon - Show root-level personas separately from folder contents - Include total persona count in output
… lines Replace complex tree connector logic with simpler depth-based indentation using "│ " prefix. Remove unnecessary parameters (prefix, is_last) and computed variables (has_content, total_items, item_idx) in favor of a cleaner depth-based approach.
Add frontend validation to prevent creating personas with duplicate IDs. Load existing persona IDs when opening the create form and validate against them in real-time. - Add existingPersonaIds array and loadExistingPersonaIds method - Add validation rule to check for duplicate persona IDs - Add i18n messages for duplicate ID error (en-US and zh-CN) - Fix minLength validation to require at least 1 character
Move create button label to folder-specific translation path instead of using generic buttons.create key.
Add visual feedback showing which folder a new persona will be created in. - Add info alert in PersonaForm displaying the target folder name - Pass currentFolderName prop from PersonaManager and PersonaSelector - Add recursive findFolderName helper to resolve folder ID to name - Add i18n translations for createInFolder and rootFolder labels
Contributor
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Sorry @RC-CHN, your pull request is larger than the review limit of 150000 diff characters
Soulter
approved these changes
Jan 21, 2026
Member
Soulter
left a comment
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
LGTM
Soulter
added a commit
that referenced
this pull request
Jan 21, 2026
* feat(db): add persona folder management for hierarchical organization Implement hierarchical folder structure for organizing personas: - Add PersonaFolder model with recursive parent-child relationships - Add folder_id and sort_order fields to Persona model - Implement CRUD operations for persona folders in database layer - Add migration support for existing databases - Extend PersonaManager with folder management methods - Add dashboard API routes for folder operations * feat(persona): add batch sort order update endpoint for personas and folders Add new API endpoint POST /persona/reorder to batch update sort_order for both personas and folders. This enables drag-and-drop reordering in the dashboard UI. Changes: - Add abstract batch_update_sort_order method to BaseDatabase - Implement batch_update_sort_order in SQLiteDatabase - Add batch_update_sort_order to PersonaManager with cache refresh - Add reorder_items route handler with input validation * feat(persona): add folder_id and sort_order params to persona creation Extend persona creation flow to support folder placement and ordering: - Add folder_id and sort_order parameters to insert_persona in db layer - Update PersonaManager.create_persona to accept and pass folder params - Add get_folder_detail API endpoint for retrieving folder information - Include folder_id and sort_order in persona creation response - Add session flush/refresh to return complete persona object * feat(dashboard): implement persona folder management UI - Add folder management system with tree view and breadcrumbs - Implement create, rename, delete, and move operations for folders - Add drag-and-drop support for organizing personas and folders - Create new PersonaManager component and Pinia store for state management - Refactor PersonaPage to support hierarchical structure - Update locale files with folder-related translations - Handle empty parent_id correctly in backend route * feat(dashboard): centralize folder expansion state in persona store Move folder expansion logic from local component state to global Pinia store to persist expansion state. - Add `expandedFolderIds` state and toggle actions to `personaStore` - Update `FolderTreeNode` to use store state instead of local data - Automatically navigate to target folder after moving a persona * feat(dashboard): add reusable folder management component library Extract folder management UI into reusable base components and create persona-specific wrapper components that integrate with personaStore. - Add base folder components (tree, breadcrumb, card, dialogs) with customizable labels for i18n support - Create useFolderManager composable for folder state management - Implement drag-and-drop support for moving personas between folders - Add persona-specific wrapper components connecting to personaStore - Reorganize PersonaManager into views/persona directory structure - Include comprehensive README documentation for component usage * refactor(dashboard): remove legacy persona folder management components Remove deprecated persona folder management Vue components that have been superseded by the new reusable folder management component library. Deleted components: - CreateFolderDialog.vue - FolderBreadcrumb.vue - FolderCard.vue - FolderTree.vue - FolderTreeNode.vue - MoveTargetNode.vue - MoveToFolderDialog.vue - PersonaCard.vue - PersonaManager.vue These components are replaced by the centralized folder management implementation introduced in commit 3fbb3db. * fix(dashboard): add delayed skeleton loading to prevent UI flicker Implement a 150ms delay before showing the skeleton loader in PersonaManager to prevent visual flicker during fast loading operations. - Add showSkeleton state with timer-based delay mechanism - Use v-fade-transition for smooth skeleton visibility transitions - Clean up timer on component unmount to prevent memory leaks - Only display skeleton when loading exceeds threshold duration * feat(dashboard): add generic folder item selector component for persona selection Introduce BaseFolderItemSelector.vue as a reusable component for selecting items within folder hierarchies. Refactor PersonaSelector to use this new base component instead of its previous flat list implementation. Changes: - Add BaseFolderItemSelector with folder tree navigation and item selection - Extend folder types with SelectableItem and FolderItemSelectorLabels - Refactor PersonaSelector to leverage the new base component - Add i18n translations for rootFolder and emptyFolder labels * feat(persona): add tree-view display for persona list command Add hierarchical folder tree output for the persona list command, showing personas organized by folders with visual tree connectors. - Add _build_tree_output method for recursive tree structure rendering - Display folders with 📁 icon and personas with 👤 icon - Show root-level personas separately from folder contents - Include total persona count in output * refactor(persona): simplify tree-view output with shorter indentation lines Replace complex tree connector logic with simpler depth-based indentation using "│ " prefix. Remove unnecessary parameters (prefix, is_last) and computed variables (has_content, total_items, item_idx) in favor of a cleaner depth-based approach. * feat(dashboard): add duplicate persona ID validation in create form Add frontend validation to prevent creating personas with duplicate IDs. Load existing persona IDs when opening the create form and validate against them in real-time. - Add existingPersonaIds array and loadExistingPersonaIds method - Add validation rule to check for duplicate persona IDs - Add i18n messages for duplicate ID error (en-US and zh-CN) - Fix minLength validation to require at least 1 character * i18n(persona): add createButton translation key for folder dialog Move create button label to folder-specific translation path instead of using generic buttons.create key. * feat(persona): show target folder name in persona creation dialog Add visual feedback showing which folder a new persona will be created in. - Add info alert in PersonaForm displaying the target folder name - Pass currentFolderName prop from PersonaManager and PersonaSelector - Add recursive findFolderName helper to resolve folder ID to name - Add i18n translations for createInFolder and rootFolder labels * style:format code * fix: remove 'persistent' attribute from dialog components --------- Co-authored-by: Soulter <905617992@qq.com>
Soulter
added a commit
that referenced
this pull request
Jan 22, 2026
* feat: astr live * chore: remove * feat: metrics * feat: enhance audio processing and metrics display in live mode * feat: genie tts * feat: enhance live mode audio processing and text handling * feat: add metrics * feat: eyes * feat: nervous * chore: update readme Added '自动压缩对话' feature and updated features list. * feat: skip saving head system messages in history (#4538) * feat: skip saving the first system message in history * fix: rename variable for clarity in system message handling * fix: update logic to skip all system messages until the first non-system message * fix: clarify logic for skipping initial system messages in conversation * chore: bump version to 4.12.2 * docs: update 4.12.2 changelog * refactor: update event types for LLM tool usage and response * chore: bump version to 4.12.3 * fix: ensure embedding dimensions are returned as integers in providers (#4547) * fix: ensure embedding dimensions are returned as integers in providers * chore: ruff format * perf: T2I template editor preview (#4574) * feat: add file drag upload feature for ChatUI (#4583) * feat(chat): add drag-drop upload and fix batch file upload * style(chat): adjust drop overlay to only cover input container * fix: streaming response for DingTalk (#4590) closes: #4384 * #4384 钉钉消息回复卡片模板 * chore: ruff format * chore: ruff format --------- Co-authored-by: ManJiang <man.jiang@jg-robust.com> Co-authored-by: Soulter <905617992@qq.com> * feat: implement persona folder for advanced persona management (#4443) * feat(db): add persona folder management for hierarchical organization Implement hierarchical folder structure for organizing personas: - Add PersonaFolder model with recursive parent-child relationships - Add folder_id and sort_order fields to Persona model - Implement CRUD operations for persona folders in database layer - Add migration support for existing databases - Extend PersonaManager with folder management methods - Add dashboard API routes for folder operations * feat(persona): add batch sort order update endpoint for personas and folders Add new API endpoint POST /persona/reorder to batch update sort_order for both personas and folders. This enables drag-and-drop reordering in the dashboard UI. Changes: - Add abstract batch_update_sort_order method to BaseDatabase - Implement batch_update_sort_order in SQLiteDatabase - Add batch_update_sort_order to PersonaManager with cache refresh - Add reorder_items route handler with input validation * feat(persona): add folder_id and sort_order params to persona creation Extend persona creation flow to support folder placement and ordering: - Add folder_id and sort_order parameters to insert_persona in db layer - Update PersonaManager.create_persona to accept and pass folder params - Add get_folder_detail API endpoint for retrieving folder information - Include folder_id and sort_order in persona creation response - Add session flush/refresh to return complete persona object * feat(dashboard): implement persona folder management UI - Add folder management system with tree view and breadcrumbs - Implement create, rename, delete, and move operations for folders - Add drag-and-drop support for organizing personas and folders - Create new PersonaManager component and Pinia store for state management - Refactor PersonaPage to support hierarchical structure - Update locale files with folder-related translations - Handle empty parent_id correctly in backend route * feat(dashboard): centralize folder expansion state in persona store Move folder expansion logic from local component state to global Pinia store to persist expansion state. - Add `expandedFolderIds` state and toggle actions to `personaStore` - Update `FolderTreeNode` to use store state instead of local data - Automatically navigate to target folder after moving a persona * feat(dashboard): add reusable folder management component library Extract folder management UI into reusable base components and create persona-specific wrapper components that integrate with personaStore. - Add base folder components (tree, breadcrumb, card, dialogs) with customizable labels for i18n support - Create useFolderManager composable for folder state management - Implement drag-and-drop support for moving personas between folders - Add persona-specific wrapper components connecting to personaStore - Reorganize PersonaManager into views/persona directory structure - Include comprehensive README documentation for component usage * refactor(dashboard): remove legacy persona folder management components Remove deprecated persona folder management Vue components that have been superseded by the new reusable folder management component library. Deleted components: - CreateFolderDialog.vue - FolderBreadcrumb.vue - FolderCard.vue - FolderTree.vue - FolderTreeNode.vue - MoveTargetNode.vue - MoveToFolderDialog.vue - PersonaCard.vue - PersonaManager.vue These components are replaced by the centralized folder management implementation introduced in commit 3fbb3db. * fix(dashboard): add delayed skeleton loading to prevent UI flicker Implement a 150ms delay before showing the skeleton loader in PersonaManager to prevent visual flicker during fast loading operations. - Add showSkeleton state with timer-based delay mechanism - Use v-fade-transition for smooth skeleton visibility transitions - Clean up timer on component unmount to prevent memory leaks - Only display skeleton when loading exceeds threshold duration * feat(dashboard): add generic folder item selector component for persona selection Introduce BaseFolderItemSelector.vue as a reusable component for selecting items within folder hierarchies. Refactor PersonaSelector to use this new base component instead of its previous flat list implementation. Changes: - Add BaseFolderItemSelector with folder tree navigation and item selection - Extend folder types with SelectableItem and FolderItemSelectorLabels - Refactor PersonaSelector to leverage the new base component - Add i18n translations for rootFolder and emptyFolder labels * feat(persona): add tree-view display for persona list command Add hierarchical folder tree output for the persona list command, showing personas organized by folders with visual tree connectors. - Add _build_tree_output method for recursive tree structure rendering - Display folders with 📁 icon and personas with 👤 icon - Show root-level personas separately from folder contents - Include total persona count in output * refactor(persona): simplify tree-view output with shorter indentation lines Replace complex tree connector logic with simpler depth-based indentation using "│ " prefix. Remove unnecessary parameters (prefix, is_last) and computed variables (has_content, total_items, item_idx) in favor of a cleaner depth-based approach. * feat(dashboard): add duplicate persona ID validation in create form Add frontend validation to prevent creating personas with duplicate IDs. Load existing persona IDs when opening the create form and validate against them in real-time. - Add existingPersonaIds array and loadExistingPersonaIds method - Add validation rule to check for duplicate persona IDs - Add i18n messages for duplicate ID error (en-US and zh-CN) - Fix minLength validation to require at least 1 character * i18n(persona): add createButton translation key for folder dialog Move create button label to folder-specific translation path instead of using generic buttons.create key. * feat(persona): show target folder name in persona creation dialog Add visual feedback showing which folder a new persona will be created in. - Add info alert in PersonaForm displaying the target folder name - Pass currentFolderName prop from PersonaManager and PersonaSelector - Add recursive findFolderName helper to resolve folder ID to name - Add i18n translations for createInFolder and rootFolder labels * style:format code * fix: remove 'persistent' attribute from dialog components --------- Co-authored-by: Soulter <905617992@qq.com> * perf: live mode entry * chore: remove japanese prompt --------- Co-authored-by: Anima-IGCenter <cacheigcrystal2@gmail.com> Co-authored-by: Clhikari <Clhikari@qq.com> Co-authored-by: jiangman202506 <jiangman202506@163.com> Co-authored-by: ManJiang <man.jiang@jg-robust.com> Co-authored-by: Ruochen Pan <67079377+RC-CHN@users.noreply.github.com>
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Labels
feature:persona
The bug / feature is about astrbot AI persona system (system prompt)
lgtm
This PR has been approved by a maintainer
size:XXL
This PR changes 1000+ lines, ignoring generated files.
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
添加了文件夹管理相关前端组件,并重构了人格管理页面作为范例,为之后可能需要文件夹管理的其他功能(如知识库等)做准备。
Modifications / 改动点
核心部分为persona添加了邻接表来处理虚拟文件夹,并做了相关迁移处理脚本
Screenshots or Test Results / 运行截图或测试结果
Checklist / 检查清单
requirements.txt和pyproject.toml文件相应位置。/ I have ensured that no new dependencies are introduced, OR if new dependencies are introduced, they have been added to the appropriate locations inrequirements.txtandpyproject.toml.