diff --git a/docs/proposals/2026-09-30-ui-redesign-and-auth.md b/docs/proposals/2026-09-30-ui-redesign-and-auth.md index 8dfaf8b..155cbf0 100644 --- a/docs/proposals/2026-09-30-ui-redesign-and-auth.md +++ b/docs/proposals/2026-09-30-ui-redesign-and-auth.md @@ -200,3 +200,29 @@ demo 为静态设计稿(无后端),数据为演示数据;视觉规格( - 本提案不含实施;实施前须用户裁定方案(默认 A)与认证阶段 2 范围。 - 不做计费/套餐(Footer 用量区留位即可)、不做 SSO/OAuth、不做项目级 ACL(远期,见 5.2)。 - 中栏与右栏结构不在本次重构范围(D25/D26 已定且未被推翻);底部终端面板不做(我们非终端工作台)。 + +## 9. 交付补记(2026-09-30 下午:消息顺序保真 + 工件文件管理) + +用户验收 UI 能力平台后反馈四项,本轮修复(任务 feature/chat-order-artifact-files): + +1. **消息顺序保真(新设计约定:渲染顺序 = 落库顺序)**。后端 llm.go 按时间交错落库 parts + (text → tool_call → tool_result → artifact_ref → 下一轮 text…),前端曾按 `p.process` + 布尔二分重排(过程全前置),工具调用脱离真实位置。修复:`groupParts` 只把"连续的"过程 + 部件就地聚成折叠块,内容部件原位保留;live 流式改为 `LiveState.parts` 按事件到达序维护 + (artifact.created 即时上 chip)。该约定写入 UI 层默认要求:任何 parts 分组展示不得改变原始顺序。 +2. **下载通道**。后端 `artifactContent` 始终回 `Content-Disposition`(默认 inline, + `?download=1` → attachment,RFC 5987 filename* 支持中文名)+ Office/PDF 扩展名 MIME 表; + 前端 chip / 工件面板行 / DocViewer 三处都有下载动作。 +3. **工件面板 = 工作区文件管理**(浏览/显示/下载/回看/删除):搜索 + kind 过滤 + 上传 + + 行内 预览/下载/删除(二次确认);DocViewer 重构为单层 OverlayHost(pdf 内嵌 iframe、 + csv/json 等宽、二进制信息卡 + 下载 CTA);收件箱结果卡经 docBridge 可直接打开工件。 +4. **设置界面级联修复**。SettingsShell 根元素同挂宿主 `.modal`,被后加载的宿主样式以同 + 特异性覆盖(column/860px)压坏左右布局——改为 `.modal.ui-settings-shell` 复合选择器 + (0,2,0)免疫加载顺序;设置行统一 @ui SettingRow,保存按钮进固定 actions 底栏。 + 教训入库:**@ui 组件挂宿主通用类时,外壳样式必须用复合选择器高于宿主单类**。 + +验证:ui 37 + frontend 20 vitest 全绿;backend go test ./... 全绿(含 disposition/MIME 新测); +Playwright 头链 12/12(mock 后端 + SQLite 直插交错 parts 探针消息): +DOM 序 [text→process-collapse→text→artifact-chip]、设置外壳 computed flex-direction=row 且 +侧栏/主区并排、?download=1 → attachment+RFC5987 文件名、面板工具栏/过滤/上传/行内下载。 +docx 在线预览为非目标(下载为主);工作区文件即 artifacts(不新增 fs 工具/目录)。