Files
codex-bot 21439d4c4d
Verify Tessera GUI / verify (push) Failing after 1m30s
docs: render UML diagrams and embed portable previews
2026-10-25 22:09:47 +08:00

3.1 KiB

Tessera 架构与进展导览

核对日期:2026-10-25。范围:本仓库当前实现;Aster 子模块固定在 f3e1670,本次不更新其代码或版本。

Tessera 目前是运行 Endor 对象程序的原生桌面宿主。Endor 程序创建和共享对象,Page 把对象组织成可交互界面;Tessera 负责窗口、输入、布局、绘制、调试入口和本机 API。它已经能运行多页面示例,但还不是带持久化、权限和业务后端的完整应用平台。

建议按下面顺序阅读。图表示真实结构或经过标注的简化流程,不把后续计划画成已经存在的组件。

文档 回答的问题
01 模块与部署 目录为什么这样分?有哪些线程与外部依赖?
02 对象模型与所有权 Block、Page、Window、Mount 分别是什么?谁保留对象?
03 执行与发布 Endor 如何变成界面?错误和过期请求怎么处理?
04 布局、绘制与输入 修改对象后如何刷新?点击如何回到同一个 VM?
05 桌面工作区 标签、原生窗口、默认页、开发工具如何配合?
06 当前进展 已经做到什么?还有哪些限制?怎样复现?
07 设计决策 为什么使用这些边界?整理还没有解决什么?
逐文件整理清单 每个文件迁移到哪里、负责什么,本次拆出了什么?

UML 已渲染为普通 PNG 图片,直接嵌入各篇说明,不依赖 Mermaid 或 PlantUML 插件。需要放大可打开 SVG;八张图的图片、SVG 和可编辑源码集中在 UML 图册。图像由本地脚本从 .puml 生成,不使用在线渲染服务。

组件与主要数据流

放大组件图 SVG

先抓住四个概念

  1. 对象是程序状态:共享内容留在 Aster 管理的对象堆内;切换标签不靠重放源码恢复对象。
  2. Mount 是一次展示位置:同一个 Block 可以在不同位置出现,每个位置有自己的几何、滚动和焦点上下文。
  3. Frame 是发布给窗口的值:窗口收到命令、文本、标量 ID 等原生数据,不拿到 VM 堆引用。
  4. Page 和标签不是两套页面系统:标签是托管 Page 的窗口侧投影;默认页也是 Endor Page。

本轮整理结果

src 的实现收进 shell / runtime / model / render / bridge 五个目录,根目录保留启动入口和源码导航。api.rs 从约 1800 行拆成请求处理、worker 与在线指南;ui_bridge.rs 从约 3450 行拆出画面树、签名、原生方法调用和类型初始化,主文件保留会话与展示刷新协调。

这些目录是职责分组,不是已经隔离的五个 crate。目前 model、bridge、render 仍有协作依赖,主窗口事件与 worker 之间也有协议耦合。根目录保留 crate 私有模块别名,让本次迁移不同时改写全部调用路径;详见设计决策。