Feat/UI自动识别和布局编辑器简化版 #170
Reference in New Issue
Block a user
Delete Branch "feat/agc-ui-editor"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
临时入口:

简化:
de966ead19to1a6958ce31a6e79e4c59to585ce73a80ec384fc68fto9a15785b7aSpriteBorder编辑器样式 66881c8e9fImportOverview组件 0c9216b91dc73e535ad2to4f99070a83复查当前 head
2da982e3f后仍确认以下阻断:\n\n1. 组件绑定按 5 个素材分批执行,但后端仍拒绝完整组件栈中引用前一批已登记的素材;超过 5 个素材时第二批可稳定失败。\n2. UI 结构识别仍在大小、节点数和深度限制之前递归反序列化和转换 Provider 返回值,异常深树可耗尽资源或递归栈。\n\n已附对应行内评论。请修复并补覆盖跨批绑定及 Provider 超限返回的回归测试后重新请求评审。当前 head 仍有已确认阻断:跨批组件绑定会拒绝前一批已登记素材;UI 识别未在递归解析 Provider 返回前实施大小、节点数和深度限制。详见行内评论。
请修复跨批组件绑定和 Provider 返回边界问题,详见刚发布的审查评论。
关于回滚了导出

当前 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}"))?;这里直接在 async command 中读取并 Base64 编码参考图;下面对 sprite 也有同样的问题。该入口最多会读取 4 张参考图和 5 个独立素材,但没有 metadata/流式大小上限,也没有移到 blocking worker。持久化 State 只校验路径和像素尺寸,无法约束文件字节数,因此一个异常大文件会阻塞 Tokio worker 并放大内存占用。请复用
read_ui_reference_image_data_url的受限 blocking reader,或为 binding 建立等价的单文件/总量预算,并补超限回归测试。@@ -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)此前 recognition、merge 和 suggestion 都已先用
parse_limited_llm_tool_arguments限制 1 MiB,再做结构校验后反序列化;binding 仍直接反序列化不可信 Provider arguments。异常超大 JSON 可在命令处理时耗尽内存。请复用统一的字节限制,并为changes(以及每个组件栈)增加有界校验后再转 DTO;补超限 tool-call 参数测试。