From 884c5ec5eef5822588581725e2b2176bbde6650b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=8E=8B=E5=BE=B7=E5=AE=87?= Date: Wed, 9 Sep 2026 10:43:38 +0800 Subject: [PATCH] =?UTF-8?q?=E8=A1=A5=E5=85=85=E8=87=AA=E5=8A=A8=E5=88=86?= =?UTF-8?q?=E7=A6=BB=20sidecar=20=E5=B9=B6=E5=8F=91=E8=BE=B9=E7=95=8C?= =?UTF-8?q?=E7=BA=A6=E6=9D=9F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 记录前端单次运行与 runWithStateLocked 的并发前提 明确 sidecar 不参与正式资产写入和项目 revision 补充未来多窗口多进程场景的进程级锁 TODO 记录图像本地处理使用 spawn_blocking 的执行边界 --- .../【技术方案】UI编辑器自动分离工作流-2026-09-08.md | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/docs/technical/【技术方案】UI编辑器自动分离工作流-2026-09-08.md b/docs/technical/【技术方案】UI编辑器自动分离工作流-2026-09-08.md index c21e40e68..e967abc21 100644 --- a/docs/technical/【技术方案】UI编辑器自动分离工作流-2026-09-08.md +++ b/docs/technical/【技术方案】UI编辑器自动分离工作流-2026-09-08.md @@ -29,6 +29,8 @@ - image-edit 使用源 UI design 图片及由 Rust 生成的绿色标记/紫色重建输入。 - 请求尺寸始终使用源 UI design 尺寸;Raw GPT Image 2 API 保证返回相同尺寸,客户端不额外做尺寸拒绝检查。 +- 标记图构建、处理图解码/写入和 cut 裁切属于本地 CPU/文件操作,放入独立的 + `spawn_blocking` 任务;image-edit 与 visual binding 网络请求仍运行在 async future 中。 - 视觉 binding 输入源图与处理图,必须为当前 batch 每个节点恰好返回一次 `Ok` 或 `NeedRework`。 - `Ok` 返回 `NodeId + BindingArea`;Rust 仅校验 NodeId、区域边界和非零尺寸,不检查与原节点框的偏差,也不要求区域不重叠。 - `NeedRework` 携带短问题描述。结构化工具调用失败时使用可复用 repair harness,把错误反馈给模型并额外请求一次;image-edit 不使用该 harness。 @@ -44,6 +46,10 @@ - sidecar 只在 separation 未完成期间存在;完成后删除 state JSON。 - 当前只持久化已经完成的 batch;正在执行 batch 的恢复语义列 TODO。 - 临时图片可跨重启保留。raw image-edit 返回图、绿色/紫色标记图、处理图和 cut 图片当前都保留用于 debug;理论上只应在内存中,清理/归档策略列 TODO。 +- 并发边界:当前由前端 `isSeparating` 与 `runWithStateLocked` 保证同一 UI 编辑会话 + 同时只有一次 separation。sidecar 是临时恢复状态,不是正式 UI 资产真相,不参与 + manifest 或项目 revision,因此当前不额外持有项目写锁;若未来支持多窗口/多进程并发, + 再增加按 UI asset 的 sidecar 进程级锁。 ## bound 与 problematic