Skip to content

feat(chat): collapse completed response activity - #1483

Open
CATMIAOZHI wants to merge 3 commits into
AAswordman:devfrom
CATMIAOZHI:feat/chat-process-current
Open

CATMIAOZHI wants to merge 3 commits into
AAswordman:devfrom
CATMIAOZHI:feat/chat-process-current

Conversation

@CATMIAOZHI

@CATMIAOZHI CATMIAOZHI commented Nov 9, 2026 •

Copy link
Copy Markdown
Collaborator

feat(chat): collapse completed response activity

变更说明 / Description

长回复可以收起已完成的思考、工具过程和中间消息,最终答复保持可见。

背景与动机 / Context and motivation

本层堆叠在子代理核心 #1482 之上。目标为最新 dev(ca968ce95),当前差异包含父层;父层合并后会重放本层并缩小差异。

改动范围 / Changes

  • 气泡、Cursor 和浮窗支持过程折叠,设置可关闭自动折叠。
  • 按聊天保留展开状态,定位到隐藏消息时先展开。
  • 浮窗使用原始消息下标定位,避免长列表逐行扫描。

兼容性与风险 / Compatibility and risks

本层只改变呈现方式,不额外迁移数据库或删除聊天内容。累计分支继承 #1482 的数据库迁移范围与预览版兼容性限制。

维护者已在协调回复中确认本次改动不受此前对话树层级问题影响。PR 已转为 Ready,仍按父层依赖顺序审阅;该回复不代替数据库升级及备份导入验证。

关联 Issue / Related issue

相关背景:#319(已关闭)。本次仅折叠已完成的回复过程。

验证方式 / Verification

  • Windows,JDK 21,Android debug::app:testDebugUnitTest --tests '*CompletedProcessTest' --tests '*AssistantContinuationTest' --tests '*ResponseProcessMessagesTest',13 项全部通过。
  • 当前差异的逻辑、性能、界面三项独立静态审计通过。修复空终稿误隐藏过程,并有回归测试。未运行本地 Lint。
  • 真机待验证:在两种聊天样式和浮窗查看长工具过程,验证手动展开、定位隐藏消息、关闭自动折叠以及返回聊天后的展开状态。

证据 / Evidence

本地测试报告:app/build/reports/tests/testDebugUnitTest/index.html。真机画面尚未采集。

检查清单 / Checklist

  • 已记录验证命令、结果和未运行项。
  • 上游目标为 dev。
  • 创建 PR 后核对 Candidate checks。
  • 发布前对最终远端基线再检查一次差异。
  • 补充真机画面或录屏。

@CATMIAOZHI CATMIAOZHI left a comment

Copy link
Copy Markdown
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

审计结论:💬 意见

自审:本 PR 作者为 CATMIAOZHI(本人),本次为自审。

改动(本层 1 个提交,22 个文件,+746/−102;累计差异含父层 #1482,共 192 个文件,+16782/−1379):长回复收起已完成的思考、工具过程和中间消息,最终答复保持可见;气泡、Cursor、浮窗共用折叠规则,设置可关闭自动折叠。

审计范围说明:本层为堆叠在 #1482 之上的单提交 6af1858(97f2d49..6af1858),本次审计只审本层改动;父层内容与 #1482 的 head(97f2d4996)一致,留待 #1482 审计覆盖,不在此重复审。

通过的检查:

  • 目标分支为 dev,本层无数据库迁移、无新增权限、无 token/密钥相关改动;只改呈现方式,不改写持久化聊天内容。
  • 折叠边界正确:纯工具回复、空终稿、仅有推理无答复时不折叠(completedProcessEnd 返回 -1),最终答复的标题与多段落完整保留;三个回归测试(CompletedProcessTest、AssistantContinuationTest、ResponseProcessMessagesTest,作者称 13 项通过)的断言与实现逐项核对一致。
  • 生成中的回复不折叠(终稿 contentStream != null 时不成组);图片导出与 Markdown 预览不折叠(无 transcript 身份时 processEnd 为 -1)。
  • 展开状态按聊天保留,TranscriptExpansionState 以 mutableStateMapOf 驱动重组,删除聊天时清理;定位到折叠内的消息时先展开再滚动(ChatArea)。
  • 中英文文案齐全(8 条 × 2),开关默认开启、重置后恢复开启,与协议文档一致;设置页开关接线正确。

问题:

  1. [P1] 合并顺序与 Draft 状态需 maintainer 确认:本层自身无数据库改动,但累计差异包含 #1482 的数据库改动(新增 SubagentMigration.kt,改动 AppDatabase.kt、ChatEntity.kt);PR 描述称“Operit2 导入支持协调完成前保持 Draft”,而当前 PR 并非 draft。直接合入会把父层的数据库改动一并带入,绕过所述协调。请确认是转回 draft、还是协调已完成可正常合入;合并决定留待 @AAswordman。
  2. [P3] 未运行本地 Lint(作者已在 PR 描述中披露),建议合入前跑一次。
  3. [P3] 真机未验证:checklist 中“补充真机画面或录屏”未完成,两种聊天样式与浮窗下的手动展开、定位隐藏消息、关闭自动折叠、返回聊天后展开状态待真机确认。
  4. [P3] 折叠 key 取 sentAt(ResponseProcessGroup.key = message.sentAt):理论上两轮回复 sentAt 相同会共用折叠状态;实际中 sentAt 为单轮请求时间戳,碰撞概率极低,可接受。
  5. [P3] 流式输出期间每次消息更新都会全量重算 responseProcessGroups(remember 依赖整个消息快照);长对话下可考虑只在成组条件变化时重算,目前线性扫描成本可接受。

后续可跟进(不阻塞):无。

由 水晴喵的muse 审计

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant