架构大拆分:前端四大模块独立 + 开源镜像全面加固
这天是一次大规模的架构拆分。Studio 前端最大的四个包——聊天、工作台、设置、仪表盘——被独立为子模块(R4 计划);CLI 的依赖闭包也拆成了独立仓库;公开的开源镜像拿到了真正的构建 CI、PR 推送流程和管理员绕过保护;同时发布了一份视口 2×2 重设计方案,自动夜间发布 v0.3.3 也顺利产出。
R4:把前端拆成真正独立的模块
Studio 的前端代码到现在已经足够庞大,四个最重的包——聊天(chat)、工作台(workbench)、设置(settings)、仪表盘(dashboard)——一直嵌在主仓里一起编译、一起发版。对开发者来说,改一行聊天的代码要等整个前端重新构建;对架构来说,四个大块之间的依赖纠缠越来越难理清。这天的 R4 计划就是把这四个包各自注册为独立子模块,拥有自己的仓库、自己的版本、自己的 CI。好处立竿见影:每个模块可以独立迭代、独立测试,修改聊天不必重编工作台;坏处也很明确——子模块管理变多了。但对一个正在从"快速原型"走向"长期可维护"的项目来说,这一步迟早要迈,越早越好。
CLI 依赖闭包也独立了
不只是前端。这天还把 CLI(命令行工具)的依赖闭包——contracts、agent-host、platform-io、core 这几个包——从主仓抽出来成为独立的子模块仓库。之前它们作为主仓的子目录存在,共享一份 node_modules、共享一条构建管线;但 CLI 本质上是一个独立产品,它需要在不同版本的 Studio 间保持兼容,嵌在大仓里反而限制了它的灵活度。抽出后,CLI 可以单独版本发布、单独跑测试,也让开源镜像只需同步这几个仓库就能完整构建——之前缺了这些依赖,公开镜像的 bun install 一直失败。
开源镜像:从"能看"到"能构建"
这天对公开的开源镜像(ForgeaX-Games/forgeax-studio)做了一次全面加固。最大的变化是:往公开仓库推代码不再是直接 push 到 main,而是必须走 PR + 自动合并的流程——这意味着每次同步都有 CI 检查,有 review 记录,有回滚点。同时,公开仓库第一次拿到了真正的构建 CI:类型检查、bun fx setup、smoke 测试,完整跑一遍,确保开源用户拿到的代码真的能编译通过。还堵上了一个安全漏洞:之前管理员可以绕过分支保护直接 push,现在 enforce_admins=true 把这条路也关了。另外修掉了 MIRROR_TOKEN 泄漏问题,并加了 PR 阶段的镜像 dry-run 检查。一句话:镜像从"代码能看但不一定能跑"变成了"CI 保证能构建,流程保证可追溯"。
视口 2×2 重设计:运行×显示正交模式
这天还落地了一份重要的设计规格文档:视口 2×2 重设计。核心思路是把"运行模式"(Edit / Play)和"显示模式"(Scene / Game)解耦成两个正交维度,形成 2×2 矩阵。之前编辑器的 Edit 和 Play 是两种互斥状态,切换时整个视口重建;新方案让你可以同时看到场景视图和游戏视图,用不同的运行状态驱动。这是对标 UE5 编辑器体验的一步——在一个屏幕上同时编辑和预览,不用来回切换。
v0.3.3 自动夜间发布 + 修了一堆构建问题
夜间发布流水线这天成功自动产出了 v0.3.3。但过程中也暴露并修掉了不少问题:桌面端构建缺少 Bun sidecar 二进制文件、子模块递归 checkout 偶发失败需要重试机制、Vite 别名路径在包名重构后没跟上、Tauri 构建时找不到从 contracts 移走的类型定义等等。还修掉了 server 端的工作台 GUID 重映射 bug 和 platform-io 的资产根路径偏移问题。这些修复单个看都不大,但加在一起,是让整条自动发布管线从"能跑"走向"稳定跑"的关键一步。
这一天意味着什么
这一天的关键词是"边界"。当一个项目从快速原型期走向成熟,最重要的事情之一就是给代码画清楚边界:哪些是独立模块、谁依赖谁、哪些可以单独发布。R4 拆分和 CLI 依赖闭包独立,是在主仓内部画边界;开源镜像加固,是在内部仓库和公开仓库之间画边界;分支保护和 PR 流程,是在"人"和"代码变更"之间画边界。边界画清了,每个部分才能独立进化、独立测试、独立发布,项目才能从"一个人推着一个大泥球跑"变成"一组清晰的模块各自往前走"。