fix: clarify knowledge document actions and task history

Restore URL identity in merged rows and replace crowded document actions with a primary entry and accessible menu. Organize preview navigation and maintenance actions, and show task history as batches with matching counts and filters.

Keep preview task scope consistent for multi-document sources and track pending operations independently so one source does not block another source's pause action. Include responsive Electron layout and behavioral regressions, bilingual copy, and design documentation.

Validation: focused regressions, typecheck, lint, and diff checks passed. Electron fixtures cover light/dark and wide/narrow layouts. Full tests reported two previously known HeartbeatCenter assertions; real import and parsing integration was not rerun.

Release note: 知识库文档列表保留来源网址,统一查看入口和更多操作,并整理解析结果页。任务历史按批次展示,筛选计数与当前对象一致,不同来源的操作互不阻塞。
This commit is contained in:
mesalogo
2026-09-27 12:55:50 +08:00
parent 44cd944601
commit ceb275bdb8
16 changed files with 730 additions and 206 deletions
+44
View File
@@ -16,6 +16,50 @@
## 验证证据
### 2026-09-27 独立评审 P2 修复
- `DocumentsView` 将任务来源 ID 与维护用来源分开传递。目录和一对多 URL 的文档预览
只筛选当前文档任务,父批次作为上下文保留,同组 B 的任务不再因来源 ID 被纳入。
真正单文档合并行在列表和预览中均保留来源、文档双 ID;判定使用完整文档集合。
- 在飞状态由全局单 ID 改为按操作 ID 计数,完成或失败时只清理本次操作。来源暂停、
同步及文档操作使用各自 ID 判断禁用,A 同步或重解析期间仍可暂停 B。
- 新增 9 项行为回归:目录及一对多 URL 各覆盖列表、预览入口,并在搜索只剩 A 时确认
不纳入 B 或其他来源级任务;单文档合并预览覆盖双 ID。四组 deferred 用例验证
A 同步/重解析与 B 暂停的调用 ID、重复提交禁用、A 先完成及 B 先失败后的独立状态。
预览测试同时确认所属来源的同步和移除入口仍可用。
- `npx vitest run src/renderer/src/KnowledgeWorkspace.test.tsx src/renderer/src/DocumentResultPreview.test.tsx`:
2 个文件、66 项通过;`npm run typecheck`、`npm run lint`、`git diff --check` 通过。
- 本轮仅修改上述组件、工作区测试及本地知识库 UI/进度文档。未重跑全量或 Electron
渲染验收,未提交;此前全量结果及渲染验证边界见下方记录。
### 2026-09-27 文档入口与任务历史整理
对应 US-D1、US-D2、US-D4,完成文档行、解析预览与知识任务中心的界面修改。当前交互
以 [来源操作](./ui-design.md#6-来源操作) 和 [任务历史](./ui-design.md#8-任务批次与历史)
为准,替代下方同日早期记录中的原生折叠操作区。
- 合并 URL 行恢复地址,保留查询参数与片段;同标题、不同查询参数的两条 URL 已验证
可以区分、分别搜索并打开正确来源。
- 文档与来源行使用一个主要按钮和共享菜单,分块、任务、重解析、同步、暂停、重试及
移除继续可达。预览按返回、标题、维护操作分层,保留搜索、焦点与滚动恢复;解析时
原件与当前来源使用各自原有 API。共享菜单补充向下翻转及缩窗后的视口高度限制。
- 任务中心按真实父子记录计批次,对象筛选同步影响计数。历史包含已结束失败批次,
运行批次中的成功子步骤不会单独混入历史。取消、重试继续服从服务契约。
- 最终定向命令 `npx vitest run src/renderer/src/ApplicationMenu.test.tsx src/renderer/src/KnowledgeWorkspace.test.tsx src/renderer/src/DocumentResultPreview.test.tsx src/renderer/src/KnowledgeChunkManager.test.tsx src/renderer/src/WorkspacePrimitives.test.tsx tests/knowledge-layout.electron.test.ts tests/attachment-layout.electron.test.ts tests/overlay-layering.electron.test.ts`:8 个文件、106 项通过。
- `tests/knowledge-layout.electron.test.ts` 使用真实 DocumentsView、KnowledgeTasksView、
DocumentResultPreview、菜单与 CSS,覆盖浅深主题及 1100×720、720×720、420×480。
验证页面无横向溢出、表格内部滚动、菜单展开不改变行高、顶部菜单翻转、原生 End/Escape、
预览焦点恢复及历史默认折叠。截图已检查宽屏列表、窄屏预览与菜单、任务历史。
截图复核发现文档 Grid 原先会被表格最小宽度撑开;列宽改用 `minmax(0, 1fr)`,
并增加内部页面容器无横向溢出的断言,确保导入工具栏不随表格横向滚动。
隐藏窗口无截图时曾停在帧等待;改用可见窗口并确认真实焦点后,无截图运行通过。
- 附件布局和 Modal 浮层的真实 Electron 回归通过,验证共享菜单修改没有破坏这两个入口。
- 完整 `npm test` 最后一次完成:448 个文件通过、1 个失败、11 个跳过;5291 项通过、
2 项失败、83 项跳过。失败仅为下方已记录的 HeartbeatCenter 中英文 tablist 数量断言。
此后补回解析时原件菜单入口、补测锚点滚出视口,并修正窄屏 Grid,均通过上述最终定向回归。
- `npm run typecheck`、`npm run lint`、`git diff --check` 通过。布局 fixture 使用合成数据与桥接替身,
本轮未从完整 App 重做 UI → Main 的文件导入及真实解析服务验收;没有新增外部模型调用。
### 2026-09-27 文档与来源统一列表
在现有 `knowledge-workspace` 拆分基础上修改 `DocumentsView.tsx`,单文件、单 URL 与
+50 -8
View File
@@ -51,8 +51,8 @@ Conversation 的检索范围,返回对话并聚焦输入框。
- 向量状态。
- 启用图谱时的图谱状态。
失败文档保留错误信息和“重新处理”。只要仍有可用分块,就允许打开分块管理,避免隐藏
上一版可用索引。
失败文档保留错误信息和“重新处理”,入口位置见第 6 节。只要仍有可用分块,就允许
打开分块管理,避免隐藏上一版可用索引。
## 5. 问答效果与高级参数
@@ -75,13 +75,28 @@ Conversation 的检索范围,返回对话并聚焦输入框。
单文档行。移除确认使用来源的完整文档数量,不使用搜索结果数。
导入文件、目录、URL 及拖放入口保持可用,拖放区使用紧凑的图标与文字提示。
单文档行的同步、移除和重新解析收进原生“更多操作”折叠区,解析预览、打开来源、
分块和任务保留直接入口。失败文档的重新处理入口仍直接显示。合并行的任务入口包含
该来源及该文档的相关任务,保留没有来源 ID 的文档任务。大小与分块数不拆行,操作组
按可用宽度换行,窄窗口在表格内部横向滚动。
合并行继续显示 URL,包含路径、查询参数和片段,使同标题的不同页面可以区分;
长地址允许换行。本地文件沿用文件名摘要。来源组中的 URL 同样可见。
解析预览复用现有结果组件;返回列表时恢复搜索、原触发按钮焦点及页面滚动位置。
重新解析继续调用文档重建,使用当前设置并保留上次结果,失败时显示可恢复错误。
每行只直接显示一个主要动作及一个“更多操作”按钮。有解析结果时主要动作是
“查看解析结果”;没有结果时,失败文档显示“重新处理”,其余文档有任务时显示
“查看任务”,否则显示“打开来源”。来源组优先提供失败重试或查看任务,没有任务时
提供同步或暂停。状态与错误始终在行内可见。
更多操作复用 `AnchoredMenu`,依次放置打开来源、打开解析时原件、文档分块、查看任务,
再用分隔线区分重新处理、来源同步和移除来源。仅在有对应资源时显示原件或任务入口;
没有分块时禁用分块入口。来源组的菜单提供任务及来源维护。菜单支持方向键、Home、End、
Escape 和焦点返回,展开不改变行高;空间不足时翻转方向或在菜单内滚动。
大小与分块数保持单行,窄窗口在表格内部横向滚动。
解析预览头部按返回、文档标题与库名及全局范围、维护菜单排列,地址仍可辨认。
正文、图片和详情使用共享结果组件;知识库的会话选择及添加图片工具仅在图片页显示,
切换页签保留选择。返回列表恢复搜索、原触发按钮焦点及页面滚动位置。重新解析继续
调用文档重建,使用当前设置并保留上次结果,失败时显示可恢复错误。维护菜单同时保留
当前来源与解析时原件的打开操作,两者分别读取知识来源和已保存的解析资产。
在飞操作只禁用对应的操作入口。同步或重解析 A 期间,其他来源 B 的暂停仍可用;
并发操作分别恢复可用状态,A 结束不能提前解除仍在执行的 B。
文档行提供“打开来源”,Main 根据知识库和文档归属重新读取保存的文件路径或 URL。
移除来源使用确认对话框,说明文档数、索引、图谱证据和托管副本影响。初始焦点位于
@@ -96,3 +111,30 @@ Conversation 的检索范围,返回对话并聚焦输入框。
均切换一次选择;选中背景和整行焦点环保持可见。Tab 聚焦、Space 切换,Escape 关闭并
返回触发按钮。点击行内非焦点元素时产生的空目标失焦不关闭弹层;点击外部或焦点明确
移到外部时才关闭,避免原生标签完成勾选前被卸载。
## 8. 任务批次与历史
任务中心按服务返回的 `parentTaskId` 组织一次操作及其文档、阶段子任务。顶层操作按
创建时间倒序排列,一个操作计为一个批次;缺失父记录的旧任务仍独立显示。重试产生的
新操作保留真实历史,使用已有 `attempt` 显示尝试次数,不按标题猜测合并关系。
文档或来源进入任务中心后,列表与计数使用同一对象范围,并保留命中任务的父级上下文。
合并文档行同时匹配来源 ID 和文档 ID,包括没有来源 ID 的文档任务。“清除对象筛选”
恢复当前库的任务集合。
列表与解析预览使用相同的文档任务范围。目录及一对多来源下的文档只按文档 ID 筛选,
即使搜索后只剩一篇也不扩大到整个来源;只有真正的单文档合并行同时包含来源 ID。
预览菜单中的来源同步、暂停和移除仍作用于所属来源,来源维护范围独立于任务筛选。
- 进行中:批次内有排队或运行记录。
- 失败:批次内有失败或中断记录;运行批次也可能同时存在失败子任务。
- 历史:批次内没有排队或运行记录,包含完成、失败、中断、取消和跳过。
计数均按批次计算,失败与历史可以重叠。标题旁的共享帮助解释口径。运行批次中已成功的
阶段不会单独进入历史。切换到进行中或失败时展开相关批次;全部和历史默认收起子任务,
用户仍可逐项展开。批次状态保留服务原值,子任务失败以额外文字提示,不改写父状态。
只有进行中的记录显示进度条;失败和中断保留停止阶段、错误及处理建议。已结束记录
不再显示“当前阶段”、百分比或默认“等待处理”。摘要保留时间、服务消息、子任务数及
重试次数。取消和重试严格使用服务返回的 `canCancel`、`canRetry`,提交期间禁用重复
操作,失败后保留筛选、任务内容及就地错误。