refactor(admin): A2UI 双轨收敛,统一 artifact 协议
- mergeArtifactIntoMessage 不再派发 legacy 列表,只维护 uiArtifacts - 渲染层从 uiArtifacts 派生 forms/reviews/charts,为空时回退 legacy (历史消息兼容,老 metadata 仅 a2uiForm/a2uiReview/a2uiChart) - sseReducer 删除 ui.form/ui.review/ui.chart 旧事件分支,只消费 ui.artifact(后端过渡期双发,旧事件将被忽略) - types.ts legacy 字段标注 deprecated;契约文档同步现状 - 测试更新:旧事件忽略 + uiArtifacts 合并/恢复断言 aislop scan: 5 引擎 0 issues
This commit is contained in:
@@ -148,14 +148,15 @@ interface AiUiForm {
|
||||
|
||||
- **统一类型**:`types.ts` 以 `AiArtifactSchema`(`message.uiArtifacts`)为唯一事实源,
|
||||
`artifact.type` ∈ `form | review | chart | import_wizard`,`payload` 携带各类型 schema。
|
||||
- **合并逻辑**:`uiArtifacts.ts` 的 `mergeArtifactIntoMessage` 将新 artifact upsert 进
|
||||
`uiArtifacts`,并**向后兼容**地派发到 legacy 字段(`forms`/`reviews`/`charts`)供老消息渲染。
|
||||
- **渲染层**:`AiMessageContent.tsx` 消费 legacy 列表渲染 `DynamicForm`/`DynamicReview`/
|
||||
`DynamicChart`;每个制品用 `ArtifactErrorBoundary` 包裹(单个渲染失败不影响整条气泡)。
|
||||
- **合并逻辑**:`uiArtifacts.ts` 的 `mergeArtifactIntoMessage` 只维护 `uiArtifacts`
|
||||
(不再派发 legacy);渲染层经 `deriveForms/deriveReviews/deriveCharts` 从 artifact 派生。
|
||||
- **SSE 事件**:后端过渡期仍双发 `ui.form/ui.review/ui.chart` 与 `ui.artifact`,
|
||||
前端**只消费 `ui.artifact`**,旧事件分支已删除(后端后续可移除旧发射)。
|
||||
- **历史兼容**:老消息 metadata 中只有 `a2uiForm/a2uiReview/a2uiChart`(无 uiArtifacts)时,
|
||||
`sseReducer`/`message-mappers` 恢复为 legacy 字段(`message.forms/reviews/charts`,
|
||||
已在 `types.ts` 标注 deprecated),渲染层在 uiArtifacts 为空时回退使用;
|
||||
新数据一律只写 `uiArtifacts`。
|
||||
- **A2UI 组件实现**:`DynamicForm`/`DynamicReview`/`DynamicChart` 共享
|
||||
`useSubmissionState`(提交状态:防重复提交 + 失败可重试)与 `useXCardSurface`
|
||||
(XCard commands 增量更新 + createSurface 自动去重)。
|
||||
- **SSE 事件 / 提交与确认接口**:与上文契约一致,未变更。
|
||||
|
||||
后续若彻底移除 legacy 字段,需保证历史消息(持久化 metadata 中的 `forms`/`reviews`/`charts`)
|
||||
仍可渲染——建议先迁移历史数据或保留兼容读取。
|
||||
- **提交与确认接口**:与上文契约一致,未变更。
|
||||
|
||||
Reference in New Issue
Block a user