diff --git a/.task/feature-duplication-lesson-records.md b/.task/feature-duplication-lesson-records.md index 0dbeb565..a664f94f 100644 --- a/.task/feature-duplication-lesson-records.md +++ b/.task/feature-duplication-lesson-records.md @@ -51,3 +51,4 @@ | 同步前验收 | 0b0540e2d251ed6bee77e63fb1ed174dda3ddd41 | 888aa9471c0a6f6917eef1d4801e87b5c411cf6a | 2026-09-30T16:47:54Z | | 同步前验收 | 9f2a7fb4b806bb63f43c3ee759bdbb1ab1f97720 | 21a92441dce7787b8c3eaeaf731aad9a58215836 | 2026-09-30T16:49:57Z | | 同步前验收 | bb7f541d42dc6bd2609e59fed6760f22ed5c213e | dcb5bc0f727b5ceaf95b73b5ea514e63d9a89ae0 | 2026-09-30T17:17:46Z | +| 同步前验收 | 978dc80817e7240f0a45a390ed2a6334041e84dd | 4eec51a954c1271729a3659544eb891f0181d8c2 | 2026-09-30T17:19:17Z | diff --git a/.task/feature-file-preview-caps.md b/.task/feature-file-preview-caps.md new file mode 100644 index 00000000..90e2ec8c --- /dev/null +++ b/.task/feature-file-preview-caps.md @@ -0,0 +1,39 @@ +# feature/file-preview-caps 任务卡 + +任务主记录:;状态:进行中;owner:weichen + +## 基线与授权 + +- 权威仓:ssh://git@git-ssh.u1680832.nyat.app:31411/weichen/Agent-System-Dev.git;目标分支:main;R0(initial_base_sha)= 548ca2b3f1326f298b44cd4b6c94ef7e9d7bdaf8 +- 工作区:/home/weichen/projects/Agent-System-Dev-wt-feature-file-preview-caps(worktree);分支:feature/file-preview-caps +- 授权与交付终点:实施已裁定的预览方案(D1 引入 Office 依赖、D2 pptx 全保真、D3 OG 卡+可选内嵌、D4 右栏+弹窗双落位、D5 fs 仅配置开关)+ 删除入口回退(保留能力)+ fs 工具族实现不提供;实现+验证+PR 合入 main+gitlink 推进+卡闭合。 + +## 目标与非目标 + +目标(方案 docs/proposals/2026-09-30-file-preview-and-reserved-capabilities.md §3–§4): +1. @ui FilePreview 能力组件:格式矩阵分派 + 无依赖渲染器(md/图片/pdf/代码行号/数据等宽/二进制卡)+ Office loader 注入槽 + 插件 registerFilePreview + LinkPreviewCard。 +2. backend:GET /api/url-preview(SSRF 拨号时点校验 + 缓存 + 净化错误);fs 工具族(fs_read/write/list,Hidden + runtime.fsTools 门禁 + // 沙箱 + 穿越负例全拒 + 写文件登记工件);ToolDesc.Hidden。 +3. frontend:四个预览依赖(动态 import 懒加载);DocViewer 收敛为 FilePreview 容器;右栏"预览"页签(railPreview 双落位);chip/面板行右栏预览动作;**删除按钮回退**(api.deleteArtifact 与后端端点保留,UI 不暴露)。 + +非目标:Office 在线编辑;语法高亮(highlight.js 另行裁定);服务端格式转换;fs 的 shell/exec 类操作;URL 预览的正文抓取(仅元数据)。 + +## 同步记录 + +| 节点 | sync_base_sha | tested_head_sha | checked_at | +|---|---|---|---| +| 启动 | 548ca2b3f1326f298b44cd4b6c94ef7e9d7bdaf8 | 548ca2b3f1326f298b44cd4b6c94ef7e9d7bdaf8 | 2026-09-30T16:17:43Z | + +## 结果与验证 + +- 结果(子仓提交,均基于各自 main 顶端): + - core 4d29301 ToolDesc.Hidden;ui fb76239 FilePreview 能力组件(45 tests);backend 6d4ccfd url-preview + fs 工具族;frontend 594d151 装配+双落位+删除回退(33 tests)。 + - D2 备选条款触发记录:pptx2html@0.3.4 module 入口 `./txml` 大小写错配(Linux 打包必炸),改用 pptx-preview@1.0.7(init(dom).preview(arrayBuffer) 全保真),已带证据写入 frontend 提交。 +- 验证: + - 各仓:core/backend/frontend/ui 全绿(go test ./...;vitest ui 45 + frontend 33;tsc 干净;构建产物确认主入口仅 +12KB,xlsx 430KB/pptx 1.2MB/jszip 98KB 为首次预览才加载的独立 chunk)。 + - make test(Dev 组合)全绿。 + - 服务端负例(严格实例,无放行标志):/api/tools 无 fs_ 工具;url-preview 对 127.0.0.1/10.0.0.1/192.168.1.1 均回"目标地址被安全策略拒绝",javascript: 回"仅支持 http/https"。 + - 头链 Playwright 15/15(7 样例矩阵:csv/go 行号/png/pdf iframe/docx mammoth 正文/xlsx 双 sheet+pptx-preview stage;面板无删除按钮、7 行右栏预览动作;右栏预览页签激活+内容渲染+关弹层保留;chip 双动作)。 +- 影响与剩余项: + - fs 工具默认不可见不可调(runtime.fsTools 未开);开启方式为配置/环境(设置页无开关,D5)。 + - 删除能力保留于 API(DELETE /api/artifacts/{id}),UI 无入口;将来暴露可加管理开关。 + - 代码预览无语法高亮;pptx 依赖较重(1.2MB chunk,仅首次预览 pptx 时加载)——如不可接受可回退大纲级(需再裁定)。 diff --git a/deps/agent-command b/deps/agent-command index 67d6c624..cc1ad774 160000 --- a/deps/agent-command +++ b/deps/agent-command @@ -1 +1 @@ -Subproject commit 67d6c6245d3c1c5c4b234e13029ff95a543beb18 +Subproject commit cc1ad7749816afe129f81bcf0732d0ca7c789d10 diff --git a/deps/agent-intent b/deps/agent-intent index 5d5d99e7..1dbbe814 160000 --- a/deps/agent-intent +++ b/deps/agent-intent @@ -1 +1 @@ -Subproject commit 5d5d99e737beb9751f09f5a96a33bd0ab27737d8 +Subproject commit 1dbbe8149c561b36282bf781e61a06d1284be3a1 diff --git a/deps/agent-native b/deps/agent-native index 39be6485..228daa3f 160000 --- a/deps/agent-native +++ b/deps/agent-native @@ -1 +1 @@ -Subproject commit 39be6485314cc8cb8eebe18cccaa06ff8cf87bde +Subproject commit 228daa3ff5ec174752052c2a826d76571fb63a09 diff --git a/deps/agent-squad b/deps/agent-squad index 946e8d55..1aa548ff 160000 --- a/deps/agent-squad +++ b/deps/agent-squad @@ -1 +1 @@ -Subproject commit 946e8d55381ad54e70d4a0d6e7dea50c6abf330e +Subproject commit 1aa548ff147876eb0e80413ee361213853a940b3 diff --git a/deps/error-code-system b/deps/error-code-system index 9e99b526..a3ee67bb 160000 --- a/deps/error-code-system +++ b/deps/error-code-system @@ -1 +1 @@ -Subproject commit 9e99b52611449c0ce7f35527b9b95fe55701f892 +Subproject commit a3ee67bba269e1276c14e22c026171ecf2cf6190 diff --git a/deps/logging-system b/deps/logging-system index da5c33eb..49b5d8be 160000 --- a/deps/logging-system +++ b/deps/logging-system @@ -1 +1 @@ -Subproject commit da5c33eb25a88b5ad5c88999d1a119f6f5b3af24 +Subproject commit 49b5d8be604d05e4246dffa0d10fa1c2b7ad45d7 diff --git a/modules/backend b/modules/backend index daddac8e..028a0ac0 160000 --- a/modules/backend +++ b/modules/backend @@ -1 +1 @@ -Subproject commit daddac8e472d9dc6e263ba706499962bd22d1361 +Subproject commit 028a0ac0ec775949faec96e438a40bec020bd707 diff --git a/modules/core b/modules/core index cafd9a54..90b57477 160000 --- a/modules/core +++ b/modules/core @@ -1 +1 @@ -Subproject commit cafd9a54e5f23ae1744750f1e6e97e0a505f8d81 +Subproject commit 90b57477bb49b3a9e62131560aa6c9a4532f19b4 diff --git a/modules/frontend b/modules/frontend index 6752b788..c5e93568 160000 --- a/modules/frontend +++ b/modules/frontend @@ -1 +1 @@ -Subproject commit 6752b788b9557abbaa4e63aac568fa1697877d2a +Subproject commit c5e93568a5475ef4817d2ca5f3dbe3202d1a796c diff --git a/modules/ui b/modules/ui index efd87f97..b6be6e89 160000 --- a/modules/ui +++ b/modules/ui @@ -1 +1 @@ -Subproject commit efd87f9766b2c55b7a2c165e97de74f4e3845347 +Subproject commit b6be6e89ef97e6688f6dcf234e3e9102ad90ca67