R4 前端落地收官 + 视口 2×2 重设计
这天 Studio 侧交付了几块能直接改变编辑体验的改动:R4 四大前端模块(聊天、工作台、设置、仪表盘)真正接上启动链并完成 interface 瘦身;视口从互斥的 Edit/Play 切换升级为运行模式 × 显示模式的 2×2 矩阵;编辑器不再自己写死游戏路径,改由 Studio 注入游戏目录布局。另外,bun fx update 加上了彩色结构化更新报告,桌面端打包脚本也做了跨平台加固。
R4 前端:从独立子模块到真正跑起来
6 月 30 日把聊天、工作台、设置、仪表盘拆成独立子模块后,这天做的是"接上电"。interface 包瘦身成纯 AppKit 层(总线、广播、深链、浮层),四个 L2 应用各自接管 agent 偏好和文件预览,通过 bus 通信而不是挤在一个大 store 里。Studio 的 main.tsx 启动时初始化 initAgentPrefs、initFilePreview、bootBroadcast 和 daemon tick 订阅——四大模块不再是"挂在那里的子目录",而是编辑器的正式组成部分。R4 从计划变成了能日常开发的结构。
视口 2×2:运行模式 × 显示模式
编辑器视口这天完成了 2×2 重设计。之前 Edit 和 Play 是两种互斥状态,一切换就要重建整个视口。新方案把"运行模式"(Edit / Play)和"显示模式"(Scene / Game)拆成两个正交维度,合成 2×2 矩阵——你可以同时看到场景视图和游戏视图,用不同的运行状态驱动。AppMode 成为单一数据源,interface 和 editor 子模块都对齐到这套 viewport 语义。这是朝 UE5 式编辑体验迈的一步:在一个屏幕上同时编辑和预览,不用来回切。
编辑器解耦游戏目录,Studio 注入布局
编辑器子模块这天去掉了对游戏目录的硬编码依赖,变成布局无关的独立包。游戏文件该放哪、URL 前缀是什么,不再由编辑器自己"烘焙",而是由宿主(Studio)注入:主视口 iframe 通过 EditSurfaceProps.gameRoot 拿到路径,localStorage 让各面板 iframe 指向同一游戏;启动引擎时传入磁盘扫描目录和客户端 URL 前缀;桌面打包也会烘焙 URL 前缀,让冻结的应用能正确提供游戏资源。编辑器可以独立演进,Studio 掌控项目布局——职责边界更清晰了。
bun fx update:拉完代码一目了然
开发者每天早上做的第一件事通常是拉最新代码。之前 bun fx update 就是安静地跑一遍 git pull 加子模块同步,成功了就什么也不说,失败了就丢一段难懂的报错。这天给它加上了结构化的更新报告:用彩色的表格显示每个子模块的拉取结果(成功、跳过、冲突)、当前分支、最新 commit 摘要。如果某个子模块有本地修改需要 stash,也会明确告诉你。一次 update 结束后,你对整个项目现在什么状态心里有数——不用再挨个子模块去 git status。
桌面端打包:跨平台脚本 + 版本烘焙
桌面端构建这天也做了加固:build-desktop.ts 改成跨平台脚本并补上测试;打包时把 platform-io 和 agent-host 打进 sidecar,版本号通过 lib/version.ts 烘焙进产物,不再依赖运行时拼凑;bun fx start 还新增了端口占用检查,启动前会探测常用端口是否已被占用,避免起了半个栈却不知道。这些改动单个看都不 flashy,但决定了 Windows 和 macOS 上能不能顺畅打包、启动。
这一天意味着什么
这一天的主题是"边界落地"。R4 拆分昨天定了方向,今天四大模块真正接上启动链;视口 2×2 把编辑和预览从互斥变成可组合;编辑器把游戏目录的所有权交还给 Studio。每一块都在回答同一个问题:这个编辑器里,谁该管什么?边界画清了,模块才能各自迭代——改聊天不必重编工作台,换编辑器不必动 Studio 的项目布局。Studio 正在从一个大泥球变成一组职责清晰的模块。