Skip to content

[Feature Request] 对话历史侧边栏支持文件夹嵌套与文件夹独立排序 #710

Description

@CATMIAOZHI

问题描述

当前对话历史侧边栏的分组功能存在两个核心限制,在对话数量较多时尤为突出:

1. 文件夹不支持嵌套

分组是单层扁平结构。当对话累积到几百个时,所有分组都堆在同一层,无法按层级组织。例如:

工作/项目A/Operit      ← 想这样,但做不到
工作/项目A/其他项目
工作/项目B
个人/学习
个人/日常

只能靠命名约定来假装层级:

工作-项目A-Operit      ← 用命名前缀区分,文件夹列表越来越长
工作-项目A-其他项目
工作-项目B
个人-学习
个人-日常

2. 文件夹不支持独立排序

文件夹没有独立的排序能力。文件夹的显示顺序取决于其内部第一个对话的 displayOrder,用户无法直接拖拽一个文件夹来调整它在列表中的位置——只能通过调整文件夹内部对话的顺序来间接影响。文件夹一多,这个限制就变得很麻烦。


期望行为

  1. 文件夹嵌套:支持创建多层级的文件夹结构,用户可以在文件夹内创建子文件夹
  2. 文件夹独立排序:文件夹有独立的排序,用户可以拖拽文件夹本身来调整它在列表中的位置
  3. 对话跨文件夹拖拽:对话可以在不同文件夹之间拖拽移动,改变归属
  4. 文件夹折叠/展开:每层文件夹支持折叠/展开(当前已有此功能,嵌套后应保持)
  5. 搜索适配:搜索时匹配所有层级的文件夹名,匹配到的对话显示完整路径上下文

当前实现现状

代码层面,目前的分组功能基于 chats 表的 group 字段(String? 类型),是一个纯文本标签。文件夹没有独立的数据实体,也没有排序字段——文件夹仅作为 chat 记录上的分组标签存在。

UI 层通过 groupBy { it.group } 产生单层分组,HistoryListItem 只有三种类型(CharacterHeader、Header、Item),没有嵌套层级的概念。


使用场景

  • 400+ 对话需要按"工作/个人"分类,各分类下再按项目分层
  • 开发者使用 Operit 管理多个项目,每个项目有"讨论"、"代码审查"、"Bug 跟踪"等子分类
  • 同一个项目下不同模块的对话需要分开管理,但又不希望它们散落在扁平列表里

注意事项

  • 与现有的角色卡绑定模式(BY_CHARACTER_CARD)兼容——文件夹应在角色卡绑定上下文中工作
  • 对话分支功能(parentChatId)不受影响——这是独立的对话版本管理机制
  • 现有备份/导出功能需要考虑文件夹层级信息的保存和恢复

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions