fix(web): split rectification process talk from the spoken reply

Keep provider thinking off, classify CoT as 思考, and stop remounted sessions from firing a second opening.

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
Jesse_Chen
2026-08-23 10:14:35 +08:00
parent f699c35f56
commit f03a2706b4
13 changed files with 376 additions and 32 deletions
+34
View File
@@ -5403,4 +5403,38 @@
- 复发自:BUG-354(按领域交错思考/分析,步骤树截断)
- 修复版本:`995b752e`
## BUG-357 | 生时纠正思考与结论同一样式,过程自述进了正文
- 状态:resolved
- 首次发现:2026-08-23
- 最近更新:2026-08-23
- 影响面:生时纠正对话、`runV9AgentTurn``ChatMessageRow`、灰色思考折叠
- 用户现象:生时纠正里思考和模型结论是同一样式;用户可见气泡里先出现长段内部权衡(日期精度、batch 写入、skill 规则),最后才是确认口误和下一个追问,分不清哪段是思考、哪段是给用户的话。
- 触发条件:生时纠正已读取 Case 且工具成功后,模型把中文过程自述写进 `text-delta`
- 根因:BUG-354 为保住正文预算关闭了纠正 provider thinking。`reasoning-delta` 不再出现,中文自述改走 `text-delta`。契约门只在 Case 未加载或工具失败时把正文改送到 `thinking.delta`;工具成功后全部当作回答。界面上思考折叠和正文也没有咨询页那种「思考 / 回复」分层。
- 修复:保持 `thinking: disabled` 与 16384 正文预算。对已加载 Case 的 `text-delta` 按段落拆成过程自述与口语结论:自述进 `thinking.delta`,结论进 `answer.delta` 并作为落盘正文。界面与咨询对齐:折叠「思考」(13px 次要色,有正文后默认收起)和完整「回复」。
- 验证:`frontend/tests/rectification-spoken-answer.test.ts``frontend/tests/rectification-v9-stream.test.ts``frontend/tests/rectification-agentic-entry.test.ts``frontend/tests/chat-stream-layout.test.ts`
- 防复发:纠正组答不得在不拆开正文预算的情况下重开 provider thinking 来充当思考 UI。`answer.delta` 不得承载 skill/schema/batch 过程自述。思考与回复必须分层渲染,不得共用同一段正文样式。
- 相关记录:BUG-345、BUG-354、BUG-356
- 复发自:BUG-345(关 thinking 后自述改走正文)、BUG-354(纠正与咨询一并关闭 provider thinking
- 修复版本:
## BUG-358 | 生时纠正离开页面再回来,当轮回答被另一段开场覆盖
- 状态:resolved
- 首次发现:2026-08-23
- 最近更新:2026-08-23
- 影响面:生时纠正会话恢复、`shouldStartOpening`、Turn 水合、聊天组件 remount key
- 用户现象:当轮已经看到 Agent 追问,跳到别的页面再回来后,原来的回答不见了;会话里多出一段新的助手正文(例如从教育追问变成感情追问)。
- 触发条件:生时纠正 Case 已有用户+助手同一物理 Turn;离开校正表面后再进入。常见路径是侧栏切走再切回,客户端仍留着创建时的 `shouldStartOpening=true`
- 根因:聊天组件用最后一条 Turn id 做 React key,新回合会整棵重挂,`openingStarted` 被清掉。创建 Case 时的 `shouldStartOpening` 在开场成功后仍保持 true;切走再回来若不再走 open RPC,就会对已有账本再发一轮 `opening`。模型读到已有证据后写出下一条追问,盖过用户刚看过的当轮正文。已落盘的过程自述也会原样回到气泡。
- 修复:有持久化 Turn 时禁止自动 opening;开场一旦发出就把 `shouldStartOpening` 收成 false。水合 key 只在空历史/`ready` 之间切换,不跟最后一条 id。回合成功后刷新 Case turns。恢复时把已落盘过程自述拆进折叠「思考」,正文只留口语结论。
- 验证:`frontend/tests/rectification-agentic-entry.test.ts``frontend/tests/rectification-spoken-answer.test.ts`
- 防复发:已有 Turn 的校正表面不得因 remount 再发 opening。`shouldStartOpening` 只能表示「这个 Case 还没有第一轮」;开场发出后必须立刻关掉。水合 key 不得使用会随新回合变化的 Turn id。
- 相关记录:BUG-176、BUG-345、BUG-357
- 复发自:BUG-176(同一物理 Turn 的助手正文在恢复时丢失;后来又用最后一条 id 做 key,把 opening 状态一起冲掉)
- 修复版本: