Feat(frontend)完善前端中英文支持与表单样式,持久化聊天记录并修复会话并发问题 #24

Merged
Kronecker merged 7 commits from feat/frontend-i18n-spellcheck into main 2026-09-05 15:27:02 +08:00
Owner

改动背景

此前聊天记录仅保存在浏览器页面会话中,刷新页面后无法恢复。本次将会话和消息保存到应用本地数据库,同时补齐前端英文提示、统一原生表单控件样式,并修复聊天持久化引入的并发问题。

主要改动

聊天记录持久化

  • 新增 SQLite v7 迁移,建立会话与消息表。
  • 提供会话创建、分页查询、删除及消息分页查询接口。
  • 保存用户消息和助手回复,包括思考内容、引用、工具调用及 Token 用量。
  • 页面初始化时加载已保存的会话,切换会话时从后端恢复完整消息。
  • 删除会话时级联删除关联消息。
  • 更新界面提示和文档,说明聊天记录保存在本地数据库中。

会话并发控制

  • 会话创建期间锁定发送,避免重复提交。
  • 创建请求返回后校验操作版本与当前会话;切换、停止或删除会取消尚未开始的发送,避免跨会话混用消息。
  • 历史加载成功后才允许发送;加载失败时保持禁发,重试成功后恢复。
  • 忽略已失效的历史加载结果,避免覆盖新会话中的消息。
  • 删除期间禁止向目标会话发送消息及重复删除,并保留输入草稿。
  • 删除失败后解除限制,其他会话的发送不受影响。
  • 在数据库写事务内检查助手消息所属会话是否仍然存在,避免流结束或取消后重新创建已删除的会话。

前端语言与控件调整

  • 补齐聊天、搜索、编辑器、Provider、模型路由、插件、技能、任务及媒体等功能的英文失败提示。
  • 新增可复用的 FilePicker,应用于媒体附件、参考音频和请求配置导入。
  • 统一复选框、单选框、滑块、进度条和折叠区域的样式。
  • 保留文件输入的标签关联及键盘焦点提示。

关键行为变化

场景 修改前 修改后
刷新聊天页面 页面内聊天记录丢失 从本地数据库恢复
会话创建期间切换会话 待发送内容可能混入其他会话 取消过期发送操作
历史加载期间发送 请求缺少上下文,返回的历史可能覆盖新消息 加载成功后才允许发送
删除正在生成的会话 流结束时可能重新创建会话 助手落库跳过已删除会话
删除请求期间再次发送 可能启动不可见且未取消的流 禁止向正在删除的会话发送
删除请求失败 缺少完整的发送限制恢复控制 保留会话和草稿,恢复发送

验证结果

  • 前端全量测试:121 项通过。
  • 后端全量测试:566 项通过。
  • 前端类型检查及生产构建通过。
  • git diff --check 通过。
  • 与本地 main、审阅时最新远端 main 均无合并冲突。
  • 本地及远端功能分支均指向 32411ce

新增回归测试覆盖:

  • 历史加载期间禁止发送,加载成功后携带完整上下文。
  • 历史加载失败后的禁发与重试恢复。
  • 创建期间重复发送、停止、切换和删除。
  • 过期历史响应不会覆盖新会话消息。
  • 删除期间禁止发送及重复删除。
  • 删除失败后恢复发送并保留草稿。
  • 删除操作不干扰其他会话的流式回复。
  • 流正常结束或提前关闭后,已删除会话不会被重建。
  • 未删除会话仍正常保存完整或部分回复。

数据库与发布说明

本次包含 SQLite v7 数据库迁移,建议发布前备份应用数据库。

前后端应配套更新,新的聊天页面依赖新增的会话接口。

既有构建大包提示和后端测试依赖弃用提示仍然存在,未导致测试或构建失败。本轮验证以自动化测试和构建为主,未进行真实模型服务的完整端到端验收。

## 改动背景 此前聊天记录仅保存在浏览器页面会话中,刷新页面后无法恢复。本次将会话和消息保存到应用本地数据库,同时补齐前端英文提示、统一原生表单控件样式,并修复聊天持久化引入的并发问题。 ## 主要改动 ### 聊天记录持久化 - 新增 SQLite v7 迁移,建立会话与消息表。 - 提供会话创建、分页查询、删除及消息分页查询接口。 - 保存用户消息和助手回复,包括思考内容、引用、工具调用及 Token 用量。 - 页面初始化时加载已保存的会话,切换会话时从后端恢复完整消息。 - 删除会话时级联删除关联消息。 - 更新界面提示和文档,说明聊天记录保存在本地数据库中。 ### 会话并发控制 - 会话创建期间锁定发送,避免重复提交。 - 创建请求返回后校验操作版本与当前会话;切换、停止或删除会取消尚未开始的发送,避免跨会话混用消息。 - 历史加载成功后才允许发送;加载失败时保持禁发,重试成功后恢复。 - 忽略已失效的历史加载结果,避免覆盖新会话中的消息。 - 删除期间禁止向目标会话发送消息及重复删除,并保留输入草稿。 - 删除失败后解除限制,其他会话的发送不受影响。 - 在数据库写事务内检查助手消息所属会话是否仍然存在,避免流结束或取消后重新创建已删除的会话。 ### 前端语言与控件调整 - 补齐聊天、搜索、编辑器、Provider、模型路由、插件、技能、任务及媒体等功能的英文失败提示。 - 新增可复用的 `FilePicker`,应用于媒体附件、参考音频和请求配置导入。 - 统一复选框、单选框、滑块、进度条和折叠区域的样式。 - 保留文件输入的标签关联及键盘焦点提示。 ## 关键行为变化 | 场景 | 修改前 | 修改后 | |---|---|---| | 刷新聊天页面 | 页面内聊天记录丢失 | 从本地数据库恢复 | | 会话创建期间切换会话 | 待发送内容可能混入其他会话 | 取消过期发送操作 | | 历史加载期间发送 | 请求缺少上下文,返回的历史可能覆盖新消息 | 加载成功后才允许发送 | | 删除正在生成的会话 | 流结束时可能重新创建会话 | 助手落库跳过已删除会话 | | 删除请求期间再次发送 | 可能启动不可见且未取消的流 | 禁止向正在删除的会话发送 | | 删除请求失败 | 缺少完整的发送限制恢复控制 | 保留会话和草稿,恢复发送 | ## 验证结果 - [x] 前端全量测试:121 项通过。 - [x] 后端全量测试:566 项通过。 - [x] 前端类型检查及生产构建通过。 - [x] `git diff --check` 通过。 - [x] 与本地 main、审阅时最新远端 main 均无合并冲突。 - [x] 本地及远端功能分支均指向 `32411ce`。 新增回归测试覆盖: - 历史加载期间禁止发送,加载成功后携带完整上下文。 - 历史加载失败后的禁发与重试恢复。 - 创建期间重复发送、停止、切换和删除。 - 过期历史响应不会覆盖新会话消息。 - 删除期间禁止发送及重复删除。 - 删除失败后恢复发送并保留草稿。 - 删除操作不干扰其他会话的流式回复。 - 流正常结束或提前关闭后,已删除会话不会被重建。 - 未删除会话仍正常保存完整或部分回复。 ## 数据库与发布说明 本次包含 SQLite v7 数据库迁移,建议发布前备份应用数据库。 前后端应配套更新,新的聊天页面依赖新增的会话接口。 既有构建大包提示和后端测试依赖弃用提示仍然存在,未导致测试或构建失败。本轮验证以自动化测试和构建为主,未进行真实模型服务的完整端到端验收。
Kronecker added 7 commits 2026-09-05 15:26:39 +08:00
Author
Owner

审阅总结评论

审阅结论:建议合并。

已复查最新提交 32411ce 的会话状态管理、历史恢复、删除流程和流式落库逻辑。此前发现的四个并发问题均已修复,并补充对应回归测试,本次复审未发现新的阻碍合并问题。

前端 121 项、后端 566 项测试通过,前端类型检查及构建通过;与审阅时最新远端 main 无合并冲突,远端功能分支与本地提交一致。

本次包含数据库迁移,发布时需配套更新前后端,并按发布流程备份数据库。建议合并。

# 审阅总结评论 **审阅结论:建议合并。** 已复查最新提交 `32411ce` 的会话状态管理、历史恢复、删除流程和流式落库逻辑。此前发现的四个并发问题均已修复,并补充对应回归测试,本次复审未发现新的阻碍合并问题。 前端 121 项、后端 566 项测试通过,前端类型检查及构建通过;与审阅时最新远端 main 无合并冲突,远端功能分支与本地提交一致。 本次包含数据库迁移,发布时需配套更新前后端,并按发布流程备份数据库。建议合并。
Kronecker merged commit 1c7b5b4e84 into main 2026-09-05 15:27:02 +08:00
Sign in to join this conversation.
No Reviewers
No labels
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: Kronecker/NotesAgentic#24