Feat/UI自动识别和布局编辑器简化版 #170

Merged
kdletters merged 131 commits from feat/agc-ui-editor into master 2026-08-20 19:07:26 +08:00
Member
  • 支持从项目, 本地电脑, 主站导入/引用素材.
  • 页面复杂, 需要足够空间, 作为资源打开时会占满右侧
  • 编辑结果作为一种新的美术资源.
  • 新增素材按钮现在是空的实现, 临时在旁边加了一个新增UI设计的按钮

临时入口:
shotmd-1787128060.jpg

简化:

  • 组件实现了最基本的图片和文本
  • 容器式布局未接入llm编辑
  • 不同阶段统一维护一个状态State, 任何阶段都可以人工调整, 不设单独的步骤
  • 多图的UI合并功能暂时不要求, 隐藏入口
  • 因为生成工具尚未从主站迁移, 主站地图子画布未实现, 以tab栏的形式容纳素材的子画布需求搁置
  • 未实现llm绑定字体功能
  • 识别会替换现有UI树, 暂时不是增量的
* 支持从项目, 本地电脑, 主站导入/引用素材. * 页面复杂, 需要足够空间, 作为资源打开时会占满右侧 * 编辑结果作为一种新的美术资源. * 新增素材按钮现在是空的实现, 临时在旁边加了一个新增UI设计的按钮 临时入口: ![shotmd-1787128060.jpg](/attachments/349a4fa8-7abe-4bbb-80e0-73b1717b6488) 简化: * 组件实现了最基本的图片和文本 * 容器式布局未接入llm编辑 * 不同阶段统一维护一个状态State, 任何阶段都可以人工调整, 不设单独的步骤 * 多图的UI合并功能暂时不要求, 隐藏入口 * 因为生成工具尚未从主站迁移, 主站地图子画布未实现, 以tab栏的形式容纳素材的子画布需求搁置 * 未实现llm绑定字体功能 * 识别会替换现有UI树, 暂时不是增量的
k88936 self-assigned this 2026-08-14 20:27:40 +08:00
k88936 added this to the 陶泥儿gameAgent project 2026-08-14 20:27:40 +08:00
k88936 force-pushed feat/agc-ui-editor from de966ead19 to 1a6958ce31 2026-08-17 18:49:19 +08:00 Compare
k88936 force-pushed feat/agc-ui-editor from a6e79e4c59 to 585ce73a80 2026-08-17 20:03:33 +08:00 Compare
k88936 force-pushed feat/agc-ui-editor from ec384fc68f to 9a15785b7a 2026-08-18 12:29:25 +08:00 Compare
k88936 started working 2026-08-19 13:51:47 +08:00
k88936 canceled time tracking 2026-08-19 13:51:53 +08:00
k88936 added 89 commits 2026-08-19 14:17:48 +08:00
参考godot和ugui的api拆分布局, 资源, 样式
实现ts type binding
新增 tf2css 函数及其单元测试
新增 Unity 风格锚点预设与自定义锚点编辑

始终展示并编辑 Offset Min 与 Offset Max

支持按父级尺寸保持解析矩形不变
支持从本地或云端导入图片素材,包含预览, 限制检查。
- 重构导入的 UI 数据结构,移除过时的 `ui_editor/import` 模块
- 引入和扩展 `serde` 序列化支持,为大部分核心组件添加 `Deserialize` 和 `Serialize`
- 增加新模块 `state`,设计 UI 状态管理,包括 UI Tree 和素材管理
- 拓展现有类型(如 `SpriteAsset`, `Node`, `ImageComponent` 等),添加更多元数据字段
重构Transform类型路径
- 修改资源模块的类型定义和导入路径,使结构更清晰
- 为数据模型扩展更多元数据字段(如 `NodeStatus`, `NodeSource`, 等)以及类型支持
- 引入命令模块,增加 `UIDesignSuggestion` 实体
- 更新 `SpriteBorder` 和相关组件实现,优化错误校验逻辑
- 引入 UI 设计图片和精灵素材批处理准备功能
- 新增界面图和组件前置条件校验逻辑
- 添加与 SpriteBorder 相关的验证和字段编辑组件
- 支持 UI 状态管理,包括设计图和精灵素材的增删改功能
更新资源上传路径以适配新目录结构
- 引入 `react-arborist`、`@cubone/react-file-manager` 等新依赖,支持文件管理和树形结构操作
- 更新相关的锁文件,确保依赖版本一致性
新增 Rust 参考图语义建议命令与严格 DTO 校验

支持名称、描述、角色和归属页面建议的前端合并

允许界面图与独立素材名称为空并增强导入错误详情

在 Inspector 暴露界面图描述编辑并保留调试入口
新增边框dragger
新增 `ImportOverview` 组件
集成至 `InputSidebar`,展示导入资源和组件概览
- 为 `Node` 添加 `id` 字段,支持更全面的节点标识。
- 在 `NodeMetadata` 中新增 `status` 和 `source` 字段,增强元数据定义。
- 调整模块定义路径,优化类型序列化支持。
- 更新 Rust 结构体的字段为 `pub`,提升数据访问灵活性。
- 整理导入路径,移除或调整重复声明。
- 实现 Rust 中的 `recognize_ui_impl` 函数,支持基于多图的 UI 树识别。
- 增加 TypeScript 定义的 `RecognitionDTO` 数据结构,集成到前端。
- 支持通过 Tauri 命令调用 `recognize_ui`。
- 引入 `utils` 模块,提供严格 JSON Schema 支持。
- 更新依赖添加 `schemars` 和其衍生模块,支持 JSON Schema 生成和验证。
- 扩展 Cargo 配置和锁文件适配新依赖。
- 添加选中节点状态管理,支持节点选择和预览交互。
- 优化 `PreviewWorkspace`,引入缩放逻辑和节点层级渲染。
- 更新 `UiTreePanel`,支持节点选中状态的 UI 表现。
- 集成节点选择状态到 `InputSidebar` 和数据模型。
- 添加 `recognizeUi` 方法,支持界面树识别响应逻辑。
- 替换 `UIDesignSuggestion` 为树型结构 `UIDesignSuggestionTreeNode`,统一描述界面图语义。
- 更新 UI 树 `UITree` 数据结构,新增 `root` 字段取代 `children`。
- 调整 `NodeSource` 枚举,添加新值 `System`。
- 修改语义建议逻辑:移除 `oneOf` 节点限制,强制所有字段不可省略。
- 增强验证和测试覆盖率,确保数据模型和树结构一致性。
- 更新 UI 树遍历逻辑,改用 `root` 替代 `children`。
- 添加资源预览作用域和请求 ID,防止并发冲突。
- 调整资源导入模块以支持作用域级预览管理。
- 优化界面设计建议合并逻辑,新增节点继承规则。
- 添加页面树同步逻辑,确保 `Page` 节点与 UI 树一致。
- 实现节点的新增、删除、移动和元数据更新功能。
- 扩展节点 Inspector,支持查看和修改选中节点的名称、描述和变换属性。
- 重构相关测试,覆盖新的页面树和节点操作功能。
- 引入嵌套节点坐标计算逻辑,确保节点相对位置一致性。
- 调整输入框样式以提升可读性。
- 新增上下按钮与键盘上下箭头支持,用于调整数值变换。
- 修复数值格式化逻辑,提升输入精度控制。
- 增强只读模式的视觉提示与操作不可用状态。
- 合并 InspectorContent 逻辑到 InspectorSidebar。
- 优化 Inspector 内容渲染,移除重复代码,支持组件统一删除操作。
- 添加节点交互逻辑接口 (`useNodeTransformInteraction`),提升 PreviewWorkspace 的可维护性。
- 本地化锚点、偏移及相关 UI 文本。
- 添加字段提示说明,提升编辑体验。
- 改进输入框布局和样式,增强可读性和交互性。
- 引入 `FieldLabel` 组件,支持带提示的字段标签渲染。
- 改进页面树同步逻辑,统一设计图像树管理。
- 引入节点组件操作接口,支持新增、删除、移动与更新组件。
- 增加组件和节点验证逻辑,提升数据一致性。
- 优化合并 UI 树相关功能,支持界面树合并状态跟踪和操作。
- 调整 UI 布局细节,增强交互体验。
- 实现多图片输入的 UI 树分离与独立验证。
- 引入 `RecognitionTree` 数据结构,支持每张输入图片一棵独立树。
- 重构节点转换逻辑,统一 pixels_per_unit 坐标系统。
- 添加逻辑以验证树与上下文图片的一一对应关系。
- 优化节点转换函数和 UI 树生成流程,提高结构一致性。
- 补充测试用例,验证树结构生成和转换正确性。
- 实现 `ComponentPanel`,支持组件的新增、删除、移动和更新操作。
- 添加组件字段编辑表单 (`ComponentField`) 及组件类型编辑接口。
- 引入支持图片和文本组件的渲染逻辑 (`ImagePanel`, `TextPanel`)。
- 添加组件到 CSS 转换的工具函数 (`componentToCss.ts`),支持图片和文本样式生成。
- 优化 Inspector,支持多层级组件的编辑和操作。
新增 Rust 组件绑定命令,向 LLM 提供真实界面与素材像素并接受完整 Component 参数。

拆分节点布局与组件状态及 LLM 编辑权限,允许根节点承载组件并保持 Transform 只读。

接入五个素材一批的前端绑定循环、增量结果合并和调试入口。

生成更新后的 TypeScript 契约,并补齐 UI Editor 状态测试。
新增 UI 设计资源的 manifest 登记与资源画布入口

将 UI 编辑器接入项目工作台并提供保存返回交互

补充 UI State mock 存储、资源投影与定向测试
将只读视觉状态提升至 Inspector 容器

移除矩形变换卡片内的局部状态徽标
选择独立素材时清除当前节点选择,确保检查器切换到素材面板。

补充节点选择后切换素材检查器的回归测试。
最终预览新增 Show frame 开关并显示框线与拖拽控件

编辑叠加模式仅显示参考图与节点编辑框,不渲染组件内容
将组件绑定调试按钮与状态提示移入左侧输入面板

移除右下角重复的调试浮层
调整 UI 编辑器资源视图的工作台网格行

让编辑器占满工具栏下方的可伸展区域
递归统计布局识别状态并显示识别概览。
支持待检查和阻塞节点的循环跨界面聚焦。
抽取通用状态查询与一次性聚焦请求并补充测试和约定。
统计图像和文本组件的素材槽位绑定状态。
新增绑定待处理、待检查和必须修复的循环定位。
复用识别概览的前序候选查询与导航逻辑。
新增 SystemFont 与 Bound 字体来源领域枚举并生成 TypeScript 契约

将系统字体统计为已绑定并保留字体资源校验

更新文本编辑器、预览与绑定概览回归测试
新增 UI State 严格文件契约、CAS 保存与恢复副本

接入 Tauri 加载保存与项目资源创建事务

完善编辑器加载失败、保存冲突和预览恢复行为

补充持久化测试与工程约定文档
恢复安装与项目保存共用写锁并在持锁后复查主文件

新增恢复写锁竞争回归测试

同步 UI State 持久化技术方案
拒绝 Text 组件引用不存在的 font_assets 条目

新增无效字体引用持久化回归测试

同步 UI State 内部引用校验技术方案
将四个平级工具调整为三步软进度导航

增加步骤切换和保存时的非阻塞检查确认

保持画布、资源和组件树在所有步骤可编辑

将实验性UI树合并标记为非正式流程能力
在进入视觉素材绑定步骤时检查独立素材

复用素材前置校验避免下游重复提示
新增 Rust 字体校验、复制登记与安全读取链路

新增项目字体面板、Text 字体绑定和预览回退

清理废弃 UI 设计持久化入口并补齐测试文档
- 在失败路径释放 URL.revokeObjectURL(url)。
- 若已注册字体面,也会从 document.fonts 移除。
恢复检查前置数据、绑定组件、合并 UI 树、识别 UI 结构和识别参考图语义按钮

在左侧输入面板显示对应操作状态
要求 UI 编辑器从项目工作区显式接收 projectPath

将旧 agent-chat 演示入口恢复为开发 Agent 面板

删除无效的 projectId 参数传递
注册 create_ui_design_resource Tauri handler

将字体字形覆盖检查列入原生调用白名单
按 FontSource::Bound 显式校验字体素材引用

保留系统字体不参与项目字体资产校验
支持项目字体导入、预览、引用计数和删除

补齐字体资源校验与字体引用回退系统字体

恢复 UI 编辑器前置检查操作
移除预览底部重复的前置检查按钮

让编辑器三列容器和空预览区域填满可用高度
将 AI 操作按钮和继续按钮对齐到操作卡右侧

保留当前步骤标题与运行状态在左侧
增加 UI-only 虚拟超级节点统一展示多个界面树。

支持跨界面移动完整子树并保留原 transform。

补充跨树移动状态测试与技术方案记录。
同步 UI Editor 左侧节点树跨界面移动的长期行为约定。

记录虚拟超级节点仅用于视图、跨树移动保留 transform 且不切换 active image。
新增按界面图隔离的临时节点显示状态
接入 UI Tree 眼睛按钮与 Inspector 显示复选框
让两种预览模式按子树隐藏节点并清理失效状态
补充可见性测试与技术方案记录
允许节点可见性按指定界面树查询。

避免虚拟超级节点下未初始化隐藏集合导致运行时异常。
移除仅 Page 角色自动创建 UITree 的限制

保持每张界面图与最多一棵 UI 树同步
调整样式以支持更好的内容适配,包括最小宽度限制和溢出隐藏设置,确保界面在复杂布局中表现一致。
补充粒度要求、
响应式布局 Anchor 配置说明,
优化坐标系描述。
允许非 Page 界面图作为独立识别上下文并生成 UI 树

保留 Page 与直接 slave 的同组识别关系

将语义建议的 LLM 校验失败统一包装为无效响应详情
将 LLM 缺少工具调用、参数解析和结果校验失败统一标记为响应无效

保留详细校验原因供排障
UI 资源路由接入真实 Tauri State store

传递项目身份并修复保存命令调用

增加合并后加载保存回归测试
在左侧输入面板恢复项目字体列表与字体导入入口。

保留字体加载状态、引用计数和当前选中字体交互。
将隐藏状态收束为页面会话级 Set<NodeId》。

抽取节点移动请求 DTO 与树遍历 helper。

恢复同树重挂的页面位置稳定换算并补充回归测试。
明确跨树移动仅保留局部 transform,不承诺页面位置稳定。

记录同树重挂的位置换算语义与全局 NodeId 隐藏集合。
新增 Stack / Exclusive 子节点显示模式及 Rust/TypeScript DTO。

Merged 物化自动使用 Exclusive,识别和手动节点默认使用 Stack。

拆分预览可见性 hook 与互斥子节点 Tab 组件,统一 Tree Panel 和最终预览状态。

补充 Inspector 模式选择、渲染规则、同步测试和技术方案文档。
提取 AnchorPresetIcon SVG 图标组件并区分定位与拉伸方向。

将 AnchorMode 统一为轴向无关的 start、center、end、stretch。

保留现有 4×4 锚点预设交互与数值语义。
抽取按来源配置的 AssetImporter settings、候选过滤和提交约束

统一本地与远端 UI Editor Tauri 导入请求并保留字体本地限制

更新 UI Editor 技术方案中的 importer 契约
统一文件管理器根路径并修复导入标题图标布局

修复 Tauri 导入请求字段映射并覆盖 camelCase 反序列化
在Inspector根层提供共享只读状态与锁定视觉

禁用节点、素材、组件和九宫格的锁定态修改入口

同步更新UI Editor Inspector锁定态实施约定
修正文件管理器 Home 根路径并恢复本地来源入口

为字体候选增加受 manifest 约束的临时 FontFace 预览

同步字体预览读取约束
抽取工作流步骤的前置与后置校验逻辑至独立模块 `WorkflowChecks`,替换原有冗余实现并优化状态传递。
统一图片与字体导入器的本地项目根目录

将导入器预览作为 settings 组件传入,导入器不判断资产类型

复用 Inspector 字体加载链路和精灵图片呈现

在字体预览中展示黑色多字号中英文数字标点样张
复用字体导入器和检查器的样张组件并固定各行字号

切换界面图、节点或精灵时清除字体资源选择

补充资源选择互斥回归测试
前端新建页面根和人工节点默认组件状态设为通过

识别与合并新建节点默认组件状态设为通过

保留组件绑定结果对已触碰节点的状态回写

补充新建节点状态测试与技术方案说明
在最终预览恢复 Show frame 控件

开关启用后显示节点框线、标签和调整控件

补充最终预览框线回归测试
允许文本组件绑定项目字体资源

修正字体引用计数与删除回退

补充字体绑定状态回归测试
将 Show frame 按钮改为紧凑复选框

保留最终预览框线显示状态与交互行为
为节点 Inspector 增加删除节点及子节点按钮。
将节点布局统一收敛到 ControlLayout 并校验 Container 参数

支持 HBox、VBox、Grid、Margin、Center 的 Inspector 与 Preview

补齐布局类型、状态和预览测试及技术文档
仅在画布尺寸或像素单位变化时重新计算预览尺寸

避免节点拖拽的状态深拷贝触发全画布适配
按阶段展示导入、识别和绑定概览

在Inspector显示状态原因并单独高亮对应状态字段

为阻塞状态保留识别失败原因并移除待处理定位行为
接入 focus-trap-react 统一管理弹窗焦点生命周期

覆盖初始焦点、Tab 循环及关闭后焦点归还

更新 AI 游戏创作弹窗无障碍契约
将本地与远端素材导入的同步校验和文件事务移入 Tokio blocking worker
保持项目写锁只覆盖 worker 内的连续同步临界区
补充异步导入命令的本地图片导入回归测试
概览重复定位时重新触发状态提示动画

为待审与阻塞状态提供差异化呼吸高亮

补充状态高亮令牌的回归测试
抽取等比缩放主轴与尺寸推导算法

锁定单次拖拽的主导轴并保持对角锚点

补充比例缩放回归测试与交互规则文档
抽取页面级节点右键菜单并接入 UI Tree

在编辑叠加预览中支持节点右键操作

补充菜单交互测试与技术方案约定
统一 UI State 写入与严格回读的浮点序列化表示

补充拖拽 Transform 与灵体素材保存回归测试

记录 UI State 浮点 JSON 校验排障经验
删除已失效的根节点组件预览限制说明
绑定字体加载成功后应用私有 font-family,并回退系统字体

新增字形映射和浏览器真实文本测量的 BestFit 算法

补充文本渲染回归测试及字体跨运行时一致性待评估文档

更新UI编辑器字体预览权威实施合同
移除TODO
Project CI / Backend tests (pull_request) Failing after 14s
Project CI / Repository checks (pull_request) Failing after 14s
Project CI / Frontend tests (pull_request) Failing after 1m20s
Project CI / Native shell tests (pull_request) Failing after 1m57s
4f99070a83
移除多处已解决或过时TODO
k88936 force-pushed feat/agc-ui-editor from c73e535ad2 to 4f99070a83 2026-08-19 14:17:48 +08:00 Compare
k88936 added 16 commits 2026-08-19 15:33:34 +08:00
修复严格 JSON Schema 的 Rust 借用冲突并校正识别枚举命名

补充 UI 语义、素材库、Sprite、字体和前置检查的输入安全校验

修复弹窗 Escape、Minimap ref、保存状态和编辑器错误提示行为

让 UI 编辑器 mock store 按资源维护 revision 并覆盖冲突测试
补充结构识别、语义合并和增量导入的正式行为说明

为 Rust 与前端实现添加对应内联注释

删除已撤销计划文档的技术文档引用
为图片和远程素材导入增加服务端数量、单文件及批次总量上限

改为提交成功后推进项目 revision,并保留 reconciliation-required 结果

远程 IPC 改传签名地址并流式限量下载,UI State 使用稳定 previous 恢复副本
新增字段级 amount 反序列化校验,拒绝非有限和越界值

保持现有 JSON 形状与 schema 版本,不引入迁移

增加非法填充量回归测试
通过自定义反序列化恢复 min 不大于 max 的构造不变量

保持现有 JSON 形状、生成绑定和 schema 版本,不引入迁移

增加无效字体范围回归测试
持久化 State 校验拒绝 anchor_min 大于 anchor_max

tf2css 在转换边界拒绝倒置 anchor 并更新回归测试
补充持久化代码注释,区分可解析候选与严格恢复校验

同步技术方案文档中的 previous 恢复边界和并发行为
仅将 Bound 字体计入素材槽并视为已绑定

SystemFont 不再计入素材槽、待绑定或组件素材需求

同步 binding overview 回归测试
状态层和持久化层拒绝 slave_to 循环,Inspector 过滤后代候选

统一节点拖拽缩放手势状态机并校验几何值

保存失败改为页面级安全提示并支持稳定重试

补充回归测试及 UI Editor 决策文档
补充 UI 编辑命令的输入限制检查 TODO
将远端素材导入改为异步下载后加锁提交,消除 await 同步函数编译错误。

更新字体素材导入测试以使用当前筛选器与配置契约。
移除 InputSidebar 中未使用的调试按钮和状态显示组件
先校验锚点能否转换为 CSS 百分比,再校验 min/max 排序。

保留极端有限锚点的具体溢出错误,避免被通用排序错误覆盖。
新增唯一节点几何模块并统一页面坐标、节点上下文与 offset 反算

迁移状态层重挂载、子节点保位、Inspector 与预览 resize 适配器

补充纯几何回归测试、更新 UI Editor 技术方案
将载入、revision、选择、预览、步骤门禁、异步操作和保存意图收敛到 UI 编辑会话

按输入、画布、检查器、工作流、弹窗和保存用途拆分视图 projection

补充 UI 编辑会话模块边界文档
收敛 UI Editor 节点状态
Project CI / Repository checks (pull_request) Failing after 14s
Project CI / Backend tests (pull_request) Failing after 14s
Project CI / Native shell tests (pull_request) Failing after 1m49s
Project CI / Frontend tests (pull_request) Failing after 57s
995db645e2
统一 StageStatus 为 NoProblem、NeedReview 和 Blocked

移除 Pending 与 Passed 的前后端、LLM 草稿及持久化夹具用法

补充旧状态拒绝测试并更新 UI Editor 技术方案
k88936 added 1 commit 2026-08-19 15:54:18 +08:00
合并 AGC 平台编辑器运行时改动
Project CI / Frontend tests (pull_request) Failing after 1m0s
Project CI / Repository checks (pull_request) Failing after 1m2s
Project CI / Native shell tests (pull_request) Failing after 2m12s
Project CI / Backend tests (pull_request) Successful in 3m47s
044c6b6baf
保留 UI 编辑器资源工作台入口与保存身份传递

整合直连运行时、平台会话刷新与资源预览更新

合并预览部署、契约、测试与运维改动
k88936 marked the pull request as ready for review 2026-08-19 16:27:19 +08:00
k88936 requested review from kdletters 2026-08-19 16:28:59 +08:00
k88936 removed review request for kdletters 2026-08-19 16:29:06 +08:00
k88936 added 3 commits 2026-08-19 17:19:34 +08:00
排序 FillMethod 类型文件的导入声明。

排序 UI 设计建议测试的导入声明。
将步骤概览移动到检查器上方并贴合右栏边缘

将左侧输入区拆为可折叠且独立滚动的伸缩面板

使 UI Tree 随面板高度稳定伸缩,避免展开尺寸反馈循环

补充可折叠侧栏 flex 布局回归测试
修复 AI 游戏创作壳测试解析
Project CI / Repository checks (pull_request) Failing after 13s
Project CI / Backend tests (pull_request) Failing after 13s
Project CI / Frontend tests (pull_request) Failing after 2m1s
Project CI / Native shell tests (pull_request) Failing after 2m40s
10d5bcf713
显式解析文件管理器已发布的 ESM 入口

迁移 UI 编辑器测试到会话投影与几何模块

修正节点交互测试的画布接口契约
k88936 added 2 commits 2026-08-19 17:25:28 +08:00
优化侧栏组件结构
调整 TransformEditor 渲染位置,
改进预览模式切换交互。
合并主分支
Project CI / Frontend tests (pull_request) Failing after 2m15s
Project CI / Repository checks (pull_request) Failing after 2m21s
Project CI / Backend tests (pull_request) Successful in 3m45s
Project CI / Native shell tests (pull_request) Failing after 3m11s
b8a9dce74f
解决合并冲突
k88936 added 2 commits 2026-08-19 17:40:53 +08:00
修正文案中按钮提示的空格多余问题
新增“保存并复制 JSON 结构”
Project CI / Repository checks (pull_request) Successful in 2m59s
Project CI / Frontend tests (pull_request) Successful in 3m54s
Project CI / Backend tests (pull_request) Successful in 4m19s
Project CI / Native shell tests (pull_request) Failing after 11m20s
109bd00338
支持保存 UI 状态后复制其格式化 JSON 到剪贴板,成功与失败均提供清晰反馈。
k88936 requested review from kdletters 2026-08-19 17:46:04 +08:00
k88936 added 3 commits 2026-08-19 19:32:19 +08:00
增加自定义尺寸与排列模式支持,调整字体属性结构以适应绑定格式
高亮状态绑定到具体节点与状态字段

循环定位时重建状态提示并滚入Inspector可视区

补充多节点连续定位的回归测试
更新 UI 编辑器类型定义格式和引号风格
Project CI / Repository checks (pull_request) Failing after 15s
Project CI / Backend tests (pull_request) Failing after 15s
Project CI / Native shell tests (pull_request) Has been cancelled
Project CI / Frontend tests (pull_request) Has been cancelled
ba131d5775
- 使用ts-rs重新生成绑定
- 调整 `.eslintrc.cjs` 和 `.prettierignore` 配置忽略生成文件
k88936 added 1 commit 2026-08-19 19:33:58 +08:00
合并主分支
Project CI / Repository checks (pull_request) Successful in 2m32s
Project CI / Frontend tests (pull_request) Successful in 3m9s
Project CI / Backend tests (pull_request) Successful in 3m49s
Project CI / Native shell tests (pull_request) Successful in 14m35s
2da982e3fd
解决合并冲突
Member

复查当前 head 2da982e3f 后仍确认以下阻断:\n\n1. 组件绑定按 5 个素材分批执行,但后端仍拒绝完整组件栈中引用前一批已登记的素材;超过 5 个素材时第二批可稳定失败。\n2. UI 结构识别仍在大小、节点数和深度限制之前递归反序列化和转换 Provider 返回值,异常深树可耗尽资源或递归栈。\n\n已附对应行内评论。请修复并补覆盖跨批绑定及 Provider 超限返回的回归测试后重新请求评审。

复查当前 head `2da982e3f` 后仍确认以下阻断:\n\n1. 组件绑定按 5 个素材分批执行,但后端仍拒绝完整组件栈中引用前一批已登记的素材;超过 5 个素材时第二批可稳定失败。\n2. UI 结构识别仍在大小、节点数和深度限制之前递归反序列化和转换 Provider 返回值,异常深树可耗尽资源或递归栈。\n\n已附对应行内评论。请修复并补覆盖跨批绑定及 Provider 超限返回的回归测试后重新请求评审。
kdletters requested changes 2026-08-20 10:18:35 +08:00
Dismissed
kdletters left a comment
Member

当前 head 仍有已确认阻断:跨批组件绑定会拒绝前一批已登记素材;UI 识别未在递归解析 Provider 返回前实施大小、节点数和深度限制。详见行内评论。

当前 head 仍有已确认阻断:跨批组件绑定会拒绝前一批已登记素材;UI 识别未在递归解析 Provider 返回前实施大小、节点数和深度限制。详见行内评论。
kdletters requested changes 2026-08-20 10:19:00 +08:00
Dismissed
kdletters left a comment
Member

请修复跨批组件绑定和 Provider 返回边界问题,详见刚发布的审查评论。

请修复跨批组件绑定和 Provider 返回边界问题,详见刚发布的审查评论。
Author
Member

关于回滚了导出
shotmd-1787197883.jpg

关于回滚了导出 ![shotmd-1787197883.jpg](/attachments/58288ff8-f4af-4f30-9bd8-5fb893760267)
k88936 added 5 commits 2026-08-20 13:11:57 +08:00
- 调整验证逻辑以支持引用项目中已存在的素材,同时拒绝不存在的素材
- 补充相关测试,验证未知素材与跨批次素材引用行为
将互斥子节点切换条定位到所选节点上方

避免等值文本配置克隆重启 BestFit 测量

补充最终预览重测量回归测试并更新实施合同
This reverts commit 109bd00338.
从互斥模式切回叠加模式时恢复全部直接子节点可见

补充模式切换回归测试并同步实施合同
限制 UI 编辑器 LLM 树与参考图资源
Project CI / Repository checks (pull_request) Successful in 3m15s
Project CI / Frontend tests (pull_request) Successful in 3m46s
Project CI / Backend tests (pull_request) Successful in 4m15s
Project CI / Native shell tests (pull_request) Successful in 15m50s
3ed63349a3
LLM 工具参数限制为 1 MiB,识别与合并按每棵树 512 节点、32 层拒绝超限。

参考图只限制单张 5 MiB,并将有限读取与 base64 编码移入 blocking worker。

补充定向测试和权威文档,移除已完成 TODO。
k88936 requested review from kdletters 2026-08-20 13:29:11 +08:00
k88936 added 3 commits 2026-08-20 14:11:23 +08:00
统一互斥子节点选择、渲染与有效可见性计算
无显式可见子节点时仅回退显示第一个直接子节点
补充回归测试并同步更新技术方案

Co-authored-by: Junie <junie@jetbrains.com>
为原始稳定素材 ID 添加确定性摘要文件名
写入前拒绝批次内重复目标路径
补充碰撞与重复路径测试并同步更新技术方案

Co-authored-by: Junie <junie@jetbrains.com>
修正互斥子节点手动隐藏语义
Project CI / Repository checks (pull_request) Successful in 2m59s
Project CI / Frontend tests (pull_request) Successful in 3m14s
Project CI / Backend tests (pull_request) Successful in 4m18s
Project CI / Native shell tests (pull_request) Successful in 15m43s
6ba55cbaa6
仅在初始空隐藏状态下默认选择第一个直接子节点
手动隐藏全部子节点后保持全部隐藏并渲染为空
补充边界回归测试并同步修正技术方案

Co-authored-by: Junie <junie@jetbrains.com>
kdletters requested changes 2026-08-20 15:14:32 +08:00
kdletters left a comment
Member

当前 head 6ba55cbaa 已修复此前的跨批素材引用与识别树边界问题,但组件绑定链路仍未采用同一套资源预算,可能由异常 Provider 响应或大素材耗尽桌面端资源。请按两条行内评论修复,并补覆盖超限 tool arguments 与输入素材大小/读取边界的回归测试后重新请求评审。

当前 head `6ba55cbaa` 已修复此前的跨批素材引用与识别树边界问题,但组件绑定链路仍未采用同一套资源预算,可能由异常 Provider 响应或大素材耗尽桌面端资源。请按两条行内评论修复,并补覆盖超限 tool arguments 与输入素材大小/读取边界的回归测试后重新请求评审。
@@ -0,0 +200,4 @@
});
for (id, image) in &state.ui_design_images {
let absolute = crate::project::resolve_local_project_path(root, &image.path)?;
let bytes = std::fs::read(&absolute).map_err(|error| format!("读取界面图失败:{error}"))?;
Member

这里直接在 async command 中读取并 Base64 编码参考图;下面对 sprite 也有同样的问题。该入口最多会读取 4 张参考图和 5 个独立素材,但没有 metadata/流式大小上限,也没有移到 blocking worker。持久化 State 只校验路径和像素尺寸,无法约束文件字节数,因此一个异常大文件会阻塞 Tokio worker 并放大内存占用。请复用 read_ui_reference_image_data_url 的受限 blocking reader,或为 binding 建立等价的单文件/总量预算,并补超限回归测试。

这里直接在 async command 中读取并 Base64 编码参考图;下面对 sprite 也有同样的问题。该入口最多会读取 4 张参考图和 5 个独立素材,但没有 metadata/流式大小上限,也没有移到 blocking worker。持久化 State 只校验路径和像素尺寸,无法约束文件字节数,因此一个异常大文件会阻塞 Tokio worker 并放大内存占用。请复用 `read_ui_reference_image_data_url` 的受限 blocking reader,或为 binding 建立等价的单文件/总量预算,并补超限回归测试。
k88936 marked this conversation as resolved
@@ -0,0 +256,4 @@
.iter()
.find(|call| call.name == "bind_ui_components")
.ok_or_else(|| "LLM 未返回 bind_ui_components 工具调用".to_string())?;
let parsed = serde_json::from_str::<BindingResponse>(&call.arguments)
Member

此前 recognition、merge 和 suggestion 都已先用 parse_limited_llm_tool_arguments 限制 1 MiB,再做结构校验后反序列化;binding 仍直接反序列化不可信 Provider arguments。异常超大 JSON 可在命令处理时耗尽内存。请复用统一的字节限制,并为 changes(以及每个组件栈)增加有界校验后再转 DTO;补超限 tool-call 参数测试。

此前 recognition、merge 和 suggestion 都已先用 `parse_limited_llm_tool_arguments` 限制 1 MiB,再做结构校验后反序列化;binding 仍直接反序列化不可信 Provider arguments。异常超大 JSON 可在命令处理时耗尽内存。请复用统一的字节限制,并为 `changes`(以及每个组件栈)增加有界校验后再转 DTO;补超限 tool-call 参数测试。
k88936 marked this conversation as resolved
k88936 added 2 commits 2026-08-20 15:14:47 +08:00
- 在资源切换和卸载时取消原生图片预览作用域
- 增加作用域切换、卸载和加载前清理回归测试
- 更新UI编辑器预览生命周期技术文档

Co-authored-by: Junie <junie@jetbrains.com>
合并主分支
Project CI / Repository checks (pull_request) Successful in 3m4s
Project CI / Frontend tests (pull_request) Successful in 3m22s
Project CI / Backend tests (pull_request) Successful in 4m17s
Project CI / Native shell tests (pull_request) Successful in 14m55s
95a879e0a0
解决合并冲突
k88936 added 4 commits 2026-08-20 16:00:25 +08:00
普通保存异常统一显示固定安全摘要
保留保存冲突专用提示并补充回归测试

Co-authored-by: Junie <junie@jetbrains.com>
本地与远端导入失败后重新读取项目 manifest
保留原导入错误提示并覆盖已提交资源恢复场景

Co-authored-by: Junie <junie@jetbrains.com>
组件绑定图片改用五MiB有界阻塞读取
工具参数增加一MiB及组件栈数量预检
补充超限回归测试并同步技术契约
重构 UI 编辑器状态存储类型
Project CI / Repository checks (pull_request) Successful in 2m52s
Project CI / Frontend tests (pull_request) Successful in 3m20s
Project CI / Backend tests (pull_request) Successful in 3m59s
Project CI / Native shell tests (pull_request) Successful in 14m50s
086ebd0248
- 将 `UiDesignStateStore` 重命名为 `IUiDesignStateStore`,统一命名规范。
- 替换所有引用,移除 `mockUiDesignStateStore`,改用 `uiDesignStateStore`。
- 更新相关测试和技术文档以匹配重命名与实现更改。
k88936 requested review from kdletters 2026-08-20 16:17:42 +08:00
kdletters merged commit 0797410eef into master 2026-08-20 19:07:26 +08:00
kdletters deleted branch feat/agc-ui-editor 2026-08-20 19:07:26 +08:00
lhk229 referenced this issue from a commit 2026-08-21 10:42:24 +08:00
Sign in to join this conversation.