From 98ddf332d7ff3e7029c8727faf368083b91286ff Mon Sep 17 00:00:00 2001 From: coso Date: Tue, 5 May 2026 10:57:32 +0800 Subject: [PATCH] docs: update v1.27.0 release notes --- RELEASE_NOTES.md | 2 +- .../agentui-implementation-progress.md | 47 +++++++++++++++++++ ...ersation-projection-implementation-plan.md | 3 +- 3 files changed, 50 insertions(+), 2 deletions(-) diff --git a/RELEASE_NOTES.md b/RELEASE_NOTES.md index 13dbb00dd..60b66762c 100644 --- a/RELEASE_NOTES.md +++ b/RELEASE_NOTES.md @@ -43,7 +43,7 @@ #### 5. 会话恢复、消息投影与性能稳定性 -- 新增会话详情拉取、hydration、retry、metadata sync、finalize 和切换快照控制器,把 `useAgentSession` 中的会话恢复逻辑拆成可测边界,降低切换历史会话时的竞态风险。 +- 新增会话详情拉取、hydration、retry、metadata sync、finalize、post-finalize persistence 和切换快照控制器,把 `useAgentSession` 中的会话恢复逻辑拆成可测边界,降低切换历史会话时的竞态风险。 - 新增 conversation projection store、历史消息 hydration、消息渲染窗口、timeline render 和 thread timeline window 投影,减少长历史消息列表渲染和恢复路径漂移。 - 旧会话切换失败时增加可重试/可跳过分类, transient 失败不再直接破坏当前快照;不可恢复错误仍按原错误路径处理。 - MessageList 和 Agent UI 性能指标补齐旧历史内容扫描、markdown 延迟渲染、线程 item 扫描和首帧 paint 的采集与回归。 diff --git a/docs/exec-plans/agentui-implementation-progress.md b/docs/exec-plans/agentui-implementation-progress.md index 555367bc8..518ac1234 100644 --- a/docs/exec-plans/agentui-implementation-progress.md +++ b/docs/exec-plans/agentui-implementation-progress.md @@ -2355,3 +2355,50 @@ GUI / E2E 状态: 1. 继续 Phase 2:抽 `sessionPostFinalizePersistenceController`,把 workspace 保存、topic workspace upsert、provider preference apply 从 `finalizeResolvedTopicDetail` 主体继续移出。 2. 恢复 GUI 环境后按 `conversation-projection-acceptance.md` 采集旧会话 A/B 打开、切换与首字指标,决定是否进入 MessageList idle / worker 化。 + +### 2026-05-05:P3 第十三刀,Session post-finalize persistence controller + +已完成: + +- 新增 `src/components/agent/chat/hooks/sessionPostFinalizePersistenceController.ts`: + - `resolveSessionDetailTopicWorkspaceId` + - `resolvePersistedSessionWorkspaceId` + - `buildSessionPostFinalizePersistencePlan` +- `useAgentSession.ts` 中 `finalizeResolvedTopicDetail` 的 post-finalize 后处理决策改为委托 controller: + - `mapSessionDetailToTopic` 使用的 topic workspace 来源。 + - `agent_session_workspace` 映射持久化 workspace 来源。 + - runtime workspace 回写 topic 字段的条件和值。 + - provider preference apply 的目标 preference。 +- 新增 `sessionPostFinalizePersistenceController.test.ts`,覆盖 topic workspace 优先级、持久化 workspace 来源和完整 post-finalize plan。 + +主线收益: + +- Phase 2 继续瘦 `finalizeResolvedTopicDetail`:会话详情 apply 后的 workspace / provider 后处理不再散落在 hook 主体里。 +- workspace 相关恢复规则进一步可单测,降低旧会话恢复慢问题排查时“到底是 runtime workspace、topic snapshot 还是 shadow cache 生效”的定位成本。 +- provider preference apply 的决策进入同一个 post-finalize plan,为后续继续拆 `finalizeResolvedTopicDetail` 或把 post-apply side effects 降优先级打基础。 + +已验证: + +```bash +npm exec -- vitest run "src/components/agent/chat/hooks/sessionPostFinalizePersistenceController.test.ts" "src/components/agent/chat/hooks/sessionMetadataSyncScheduler.test.ts" "src/components/agent/chat/hooks/sessionMetadataSyncController.test.ts" "src/components/agent/chat/hooks/sessionFinalizeController.test.ts" "src/components/agent/chat/hooks/sessionSwitchSnapshotController.test.ts" "src/components/agent/chat/hooks/sessionHydrationRetryController.test.ts" "src/components/agent/chat/hooks/sessionDetailFetchController.test.ts" "src/components/agent/chat/hooks/sessionHydrationController.test.ts" +npm exec -- vitest run "src/components/agent/chat/hooks/useAsterAgentChat.test.tsx" -t "模型|权限|执行策略|metadata|stale 快照|预取|workspace|跨工作区" --hookTimeout 180000 --testTimeout 120000 +npx eslint "src/components/agent/chat/hooks/sessionPostFinalizePersistenceController.ts" "src/components/agent/chat/hooks/sessionPostFinalizePersistenceController.test.ts" "src/components/agent/chat/hooks/sessionMetadataSyncScheduler.ts" "src/components/agent/chat/hooks/sessionMetadataSyncScheduler.test.ts" "src/components/agent/chat/hooks/sessionMetadataSyncController.ts" "src/components/agent/chat/hooks/sessionFinalizeController.ts" "src/components/agent/chat/hooks/sessionSwitchSnapshotController.ts" "src/components/agent/chat/hooks/sessionHydrationRetryController.ts" "src/components/agent/chat/hooks/sessionDetailFetchController.ts" "src/components/agent/chat/hooks/sessionHydrationController.ts" "src/components/agent/chat/hooks/useAgentSession.ts" --max-warnings 0 +npm run typecheck -- --pretty false +``` + +结果: + +- Post-finalize / scheduler / finalize / metadata / snapshot / retry / fetch / hydration controller:通过,`36` 个测试通过。 +- `useAsterAgentChat` 模型、权限、metadata、stale 快照、预取、workspace 定向:通过,`29` 个测试通过。 +- ESLint touched files:通过。 +- TypeScript `tsc --noEmit --pretty false`:通过。 + +GUI / E2E 状态: + +- 本刀未复跑 `verify:gui-smoke`,原因同前:当前 smoke 会切到独立 Rust target 全量重编,容易造成 CPU 和鼠标繁忙;本刀是纯前端 controller 抽取,先用定向行为测试收口。 +- Playwright MCP 仍等待 profile 释放;不使用 isolated profile 绕过仓库规则。 + +下一刀: + +1. 继续 Phase 2:抽 `sessionSwitchErrorController`,把 session not found、preserve current snapshot、toast/error metric 等错误恢复判断从 `useAgentSession` 中移出。 +2. 或抽 `sessionHistoryPaginationController`,把完整历史分页窗口计算、stale guard 与 merge 计划从主 hook 中移出。 diff --git a/docs/roadmap/agentui/conversation-projection-implementation-plan.md b/docs/roadmap/agentui/conversation-projection-implementation-plan.md index d4891b2a6..21a76db5c 100644 --- a/docs/roadmap/agentui/conversation-projection-implementation-plan.md +++ b/docs/roadmap/agentui/conversation-projection-implementation-plan.md @@ -250,4 +250,5 @@ AgentChatWorkspace - Phase 2 已继续抽出 `sessionMetadataSyncController`,统一 finalize 后 accessMode / provider / executionStrategy fallback patch、switch success metric source 与批量/分散 metadata sync。 - Phase 2 已继续抽出 `sessionFinalizeController`,统一 finalize 阶段 workspace restore guard、runtime/topic/shadow workspace 汇总、shadow execution strategy fallback 与最终 execution strategy override。 - Phase 2 已继续抽出 `sessionMetadataSyncScheduler`,统一 finalize 后 metadata patch 的 invoke capability guard、旧调度取消、idle 调度、stale guard、成功回写与失败回调。 -- 下一刀建议继续 Phase 2:抽 `sessionPostFinalizePersistenceController`,把保存 workspace、同步 topic 字段、provider preference apply 继续从 `finalizeResolvedTopicDetail` 主体中移出;只有 E2E 指标显示 `messageListTimelineBuildMs` 仍高时才进入 worker 化。 +- Phase 2 已继续抽出 `sessionPostFinalizePersistenceController`,统一 finalize 后 topic workspace、workspace 映射持久化、runtime workspace topic 回写与 provider preference apply 的决策。 +- 下一刀建议继续 Phase 2:抽 `sessionSwitchErrorController` 或 `sessionHistoryPaginationController`,把错误恢复与完整历史分页状态继续从 `useAgentSession` 主体中移出;只有 E2E 指标显示 `messageListTimelineBuildMs` 仍高时才进入 worker 化。