# 聊天历史连续滚动 ## 用户问题 长会话向上阅读时,当前界面每次只增加 80 条消息,并在顶部显示“加载更早的消息”控件。这个控件把连续滚动切成多个操作,用户无法像 VSCode 一样直接拖动滚动条或连续滚到会话顶部。 ## 目标 - 已加载的当前会话可以从底部连续滚动到顶部。 - 消息仍按可见范围挂载,长会话不会因为取消 80 条限制而一次性创建全部消息组件。 - 滚动位置、锚点、消息展开状态和流式输出行为保持稳定。 - 为后续 minimap 提供完整的消息索引和可定位滚动范围。 ## 范围 - 取消真实聊天会话的 80 条历史窗口增量。 - 保留现有消息窗口化、占位高度、滚动锚定和按需挂载。 - 对 100、500、2,000、10,000 条消息进行功能和性能对比。 - 记录 minimap 的下一阶段性能测试入口,但本阶段不实现 minimap。 ## 非目标 - 不改变未打开会话的摘要加载策略。 - 不要求一次从数据库加载所有未加载的会话历史。 - 不取消最多约 60 条消息组件的 DOM 窗口化限制。 - 不在本阶段加入 minimap、消息摘要接口或新的 IPC。 ## 产品验收 - 打开一个已加载历史的会话后,顶部不再出现“加载更早的消息”按钮。 - 用户可以连续滚动到第一条消息,滚动位置不会因消息挂载或高度测量而跳动。 - 2,000 条消息会话仍保持窗口化渲染,实际挂载消息数量维持现有上限附近。 - 流式输出、输入、消息展开、附件和工具输出行为没有回归。 - 若会话只有摘要,仍按现有逻辑按需加载完整历史。