diff --git a/.task/feature-chat-order-artifact-files.md b/.task/feature-chat-order-artifact-files.md new file mode 100644 index 00000000..48e0083f --- /dev/null +++ b/.task/feature-chat-order-artifact-files.md @@ -0,0 +1,54 @@ +# feature/chat-order-artifact-files 任务卡 + +任务主记录:Dev PR(本卡随分支合入,PR 见 Git 远端 feature/chat-order-artifact-files → main);状态:已完成;owner:weichen + +## 基线与授权 + +- 权威仓:ssh://git@git-ssh.u1680832.nyat.app:31411/weichen/Agent-System-Dev.git;目标分支:main;R0(initial_base_sha)= ffda6d33eabb23c9be5bac221529367d771c5f7b +- 工作区:/home/weichen/projects/Agent-System-Dev-wt-feature-chat-order-artifact-files(worktree);分支:feature/chat-order-artifact-files +- 授权与交付终点:用户四项反馈的修复(消息顺序保真 / 下载通道 / 工件文件管理 / 设置界面布局),实现+验证+PR 合入 main + gitlink 推进 + 卡闭合。 + +## 目标与非目标 + +用户反馈(2026-09-30,附用户设置界面截图): +1. 会议纪要 docx 任务中"工具调用的位置和实际的位置不符,助手输出显示的顺序没有保持"——根因:Conversation.tsx 按 `p.process` 布尔把一条消息的 parts 二分重排(过程全前置);live 流式同病(固定模板序)且 live 期间无工件 chip。 +2. "整理好的内容,没有下载通道"——后端无 Content-Disposition/MIME 回退;chip 无下载;DocViewer 弹层套弹层。 +3. "工作区中的文件应该能浏览、显示、下载、回看"——ArtifactsPanel 仅 图标+名+kind 裸列表;收件箱结果卡 doc-ref 点不开(无 docBridge)。 +4. "用户设置界面设计有问题"——根因:SettingsShell 根挂 `.modal.ui-settings-shell`,宿主 styles.css 后加载以同特异性覆盖(column/860px)压坏左右布局;设置行未用 @ui SettingRow;保存按钮随内容滚动。 + +非目标:docx 在线预览(无新依赖原则,下载为主);新增 fs 类工具/工作区目录("工作区文件"即 artifacts);live 事件协议改动。 + +## 修复要点(四仓) + +- modules/ui:`.modal.ui-settings-shell` 复合选择器(0,2,0)免疫加载顺序;SettingsShell 增 `actions` 固定底栏 + `.ui-settings-scroll` 滚动区;ActivityCardView/InboxList 透传 `docBridge`;Icon 增 file/image/download/trash/eye;SettingRow label/desc 放宽 ReactNode。 +- modules/backend:`artifactContent` 始终回 Content-Disposition(默认 inline,`?download=1` → attachment;RFC 5987 filename* + ASCII 兜底);`contentTypeOf` 增 Office/PDF/CSV/MD 扩展名显式表 + mime.TypeByExtension 回退。 +- modules/frontend:`messageparts.ts` 新增 `groupParts`(连续过程部件就地聚块,渲染顺序=落库顺序)+ humanSize/artifactIcon;AssistantMessage 按块序渲染;LiveState.parts 按事件到达序维护(含 artifact.created 即时上 chip);工件 chip = 图标+打开+下载;ArtifactsPanel = 搜索+kind 过滤+上传+行内 预览/下载/删除(确认);DocViewer 单层 OverlayHost(pdf iframe / csv·json 等宽 / 二进制信息卡+下载 CTA);SettingsModal 迁移 SettingRow+actions 底栏;InboxList 接 docBridge。 +- modules/documents:本卡 + 提案补记(渲染顺序=落库顺序 约定)。 + +## 同步记录 + +| 节点 | sync_base_sha | tested_head_sha | checked_at | +|---|---|---|---| +| 启动 | ffda6d33eabb23c9be5bac221529367d771c5f7b | ffda6d33eabb23c9be5bac221529367d771c5f7b | 2026-09-30T14:54:07Z | +| 同步前验收 | ffda6d33eabb23c9be5bac221529367d771c5f7b | 76e255342b24e34f1b344784c87f5b076c6b8557 | 2026-09-30T15:18:27Z | +| 合入前(子仓变基至 cross-session-reading 合入后的 main 并全套重验) | ca84888… | e6fdc5b… | 2026-09-30T15:35:00Z | + +## 结果与验证 + +- 结果(四子仓 PR 均已合入 main;Dev gitlink 推进): + - UI https://git-home.u1680832.nyat.app:30319/weichen/Agent-System-UI/pulls/14(merged) + - Backend https://git-home.u1680832.nyat.app:30319/weichen/Agent-System-Backend/pulls/19(merged) + - Frontend https://git-home.u1680832.nyat.app:30319/weichen/Agent-System-Frontend/pulls/15(merged) + - Documents https://git-home.u1680832.nyat.app:30319/weichen/Agent-System-Documents/pulls/22(merged) +- 验证: + - `make precheck`(READY,R0=ffda6d33ea);`make task-sync`(synced,15:18:27Z)。 + - `make test`(Dev 组合,gitlink 推进后):core ok、backend 全包 ok(含 disposition/MIME 新测)、frontend vitest 20 passed、ui tsc + 37 passed、agent-command ok。 + - 头链(Playwright + 缓存 Chromium,mock 后端 + SQLite 直插交错 parts 探针消息)12/12: + 消息 DOM 序 = text → process-collapse(含 knowledge_search) → text → artifact-chip; + 设置外壳 computed flex-direction=row、侧栏/主区并排、actions 底栏含"保存设置"; + `?download=1` → attachment + RFC5987 中文名、默认 inline;工件面板 工具栏/过滤/上传/行内下载齐全。 +- 影响与剩余项: + - docx 在线预览未做(下载为主;pdf 已内嵌预览)——如需 docx 预览需引入新依赖,另行裁定。 + - live 流式顺序为到达序投影,与顺序执行的工具调用一致;并行工具执行的顺序语义需后端先定义。 + - Mimosa 钩子在个别 commit 报 scanner_no_output(按兼容策略继续);未宣称安全结论。 +| 同步前验收 | 816b40e8f74d27218c2ed321dc88007fd298bed3 | 26230bcea061c71f71ff7c124b3a91d7a0656140 | 2026-09-30T15:27:57Z | diff --git a/modules/backend b/modules/backend index cb7f79d6..239cf764 160000 --- a/modules/backend +++ b/modules/backend @@ -1 +1 @@ -Subproject commit cb7f79d652eee7a5cb29ac3b3738672d8ff889c0 +Subproject commit 239cf7646162ce03f4990163a1e24462443135ba diff --git a/modules/documents b/modules/documents index bf0988b2..58824482 160000 --- a/modules/documents +++ b/modules/documents @@ -1 +1 @@ -Subproject commit bf0988b2b2eb61ad6a09241f91e0b0129da1300a +Subproject commit 58824482372a78ffccc09910e83a955c4e8a8389 diff --git a/modules/frontend b/modules/frontend index 9c879538..fb219e04 160000 --- a/modules/frontend +++ b/modules/frontend @@ -1 +1 @@ -Subproject commit 9c879538772f64412fe588add76d7b921b5da2a4 +Subproject commit fb219e04a37f3bac0b64dae0b8778d92c65495d6 diff --git a/modules/ui b/modules/ui index c7564791..efa6c692 160000 --- a/modules/ui +++ b/modules/ui @@ -1 +1 @@ -Subproject commit c7564791f8f0eae8d06d13effc72cefe2528bd3e +Subproject commit efa6c6924827f68e3fdea2b8b8f85b63b0867af4