3.4 KiB
UI Schema File Split Implementation Plan
For agentic workers: REQUIRED SUB-SKILL: Use superpowers:subagent-driven-development (recommended) or superpowers:executing-plans to implement this plan task-by-task. Steps use checkbox (
- [ ]) syntax for tracking.
Goal: 将 apps/lib/core/schemas/ui_schema.dart 从超大单文件拆分为同库的多个 part 文件,在不改变协议行为的前提下提升可维护性。
Architecture: 保留 ui_schema.dart 作为唯一对外入口和 single source of truth;通过 part 把 enums、common types、actions、nodes、document、builder 按职责拆分到 core/schemas/ui_schema/ 子目录。所有类型名、JSON 字段、默认值与工厂方法逻辑保持完全一致,避免协议漂移。
Tech Stack: Dart library/part、Flutter analyze、Flutter test
Task 1: 建立拆分骨架并保留外部接口
Files:
-
Modify:
apps/lib/core/schemas/ui_schema.dart -
Create:
apps/lib/core/schemas/ui_schema/enums.dart -
Create:
apps/lib/core/schemas/ui_schema/common_types.dart -
Create:
apps/lib/core/schemas/ui_schema/actions.dart -
Create:
apps/lib/core/schemas/ui_schema/nodes.dart -
Create:
apps/lib/core/schemas/ui_schema/document.dart -
Create:
apps/lib/core/schemas/ui_schema/builders.dart -
Step 1: 在主文件添加
part声明并保留文件头注释 -
Step 1.1: 所有子文件统一使用
part of '../ui_schema.dart';,避免子目录相对路径错误 -
Step 2: 将 enum 定义迁移到
enums.dart,语义不变 -
Step 3: 将基础 DTO 迁移到
common_types.dart,语义不变 -
Step 4: 将 Action 协议与解析逻辑迁移到
actions.dart,语义不变 -
Step 5: 将 UiNode 与各 node 实现迁移到
nodes.dart,语义不变 -
Step 6: 将文档配置/文档模型迁移到
document.dart,语义不变 -
Step 7: 将
buildSuccessDocument/buildErrorDocument迁移到builders.dart
Task 2: 进行协议稳定性验证
Files:
-
Create:
apps/test/core/schemas/ui_schema_test.dart -
Test:
apps/test/features/chat/ui_schema_renderer_test.dart -
Test:
apps/test/features/chat/ui_schema_navigation_test.dart -
Test:
apps/test/features/chat/ag_ui_event_test.dart -
Step 1: 新增
ui_schema.dart直连回归测试- 覆盖 enum fallback、
actionSpecFromJson分支、UiNode.fromJson分支、Document/builder 默认值、round-trip 稳定性。
- 覆盖 enum fallback、
-
Step 2: 在
apps/目录运行 analyze,确认part结构无编译错误- Run (
apps/):flutter analyze
- Run (
-
Step 3: 在
apps/目录运行 UI Schema 渲染与导航相关测试- Run:
flutter test test/features/chat/ui_schema_renderer_test.dart - Run:
flutter test test/features/chat/ui_schema_navigation_test.dart
- Run:
-
Step 4: 在
apps/目录运行 AG-UI 事件模型回归测试- Run:
flutter test test/features/chat/ag_ui_event_test.dart
- Run:
-
Step 5: 在
apps/目录运行新增 schema 回归测试- Run:
flutter test test/core/schemas/ui_schema_test.dart
- Run:
Task 3: 完成收尾与风险核对
Files:
-
Modify:
apps/lib/core/schemas/ui_schema.dart -
Modify:
apps/lib/core/schemas/ui_schema/*.dart -
Step 1: 检查 public API 未变化(类型名/函数名不变)
-
Step 2: 检查 JSON 键、默认值、fallback 分支未变化
-
Step 3: 确认
ui_schema.dart行数显著下降并保留 single source 入口定位