.agents/design/bug/stream-resume-history-title.md
新对话发起后,侧栏会先展示一个临时历史项。旧逻辑在服务端历史记录尚未落库或尚未拉取回来时,容易显示固定的“新对话”。流恢复场景下,这个临时标题更容易停留在默认文案,导致用户在历史列表中无法通过刚输入的问题识别会话。
本 PR 目标是让临时历史项先使用用户输入生成的标题,服务端标题回来后再覆盖。
onUpdateHistoryTitle 发现本地 histories 没有目标 chatId 时,会直接触发拉取服务端历史;如果服务端还没落库,本地仍然没有可展示标题。chatBoxData.title 与侧栏临时项标题没有在新对话开始时同步。在 ChatBox 发起新一轮对话时,通过 getChatTitleFromChatMessage(currentHumanChat) 从用户输入生成临时标题。
该标题同步写入:
chatBoxData.title这样服务端历史未返回前,侧栏也能展示用户可识别的标题。
新增 getDisplayHistoryTitle:
侧栏临时项不再无条件展示固定“新对话”,而是优先使用 chatBoxData.title。
onUpdateHistoryTitle 支持本地 upsert新增 upsertHistoryTitle:
generating 且 hasBeenRead=false。随后仍然调用 loadHistories({ init: true }) 拉取服务端数据。这样既保证即时展示,又能在服务端落库后回到真实历史记录。
本 PR 不改变服务端标题生成逻辑。拉取历史成功后,服务端返回的历史项会覆盖本地临时项,从而把临时标题替换成最终落库标题。
projects/app/src/components/core/chat/ChatContainer/ChatBox/index.tsx
projects/app/src/pageComponents/chat/slider/ChatSliderList.tsx
chatBoxData.title。getDisplayHistoryTitle 处理空标题回退。projects/app/src/web/core/chat/context/chatContext.tsx
onUpdateHistoryTitle 改为先本地 upsert,再拉取服务端历史。projects/app/src/web/core/chat/context/historyTitleUtils.ts
getDisplayHistoryTitle 和 upsertHistoryTitle。projects/app/test/web/core/chat/context/historyTitleUtils.test.ts
onUpdateHistoryTitle 在 histories 尚未包含目标 chatId 时,也能先插入临时项。onUpdateHistoryTitle 支持本地 upsert