# 01 · 模块、依赖与部署 ## 项目目录 ```text Tessera/ ├── Cargo.toml / Cargo.lock Rust 依赖和固定解析结果 ├── src/ │ ├── main.rs 组合入口、事件循环和共享发布状态 │ ├── shell/ 原生窗口、标签、开发工具、管理控件 │ ├── runtime/ 本机 API、VM worker、执行、事件与异步任务 │ ├── model/ 托管对象、挂载、绑定、依赖和发布数据 │ ├── render/ 布局、绘制、命中、字体与软件光栅化 │ └── bridge/ Endor 与宿主 UI 类型及行为的连接 ├── examples/ Endor 示例程序,保留原文件名与入口 ├── docs/ │ ├── architecture/ 本套架构说明和 UML 源文件 │ └── media/ 已有建模视频与字幕 ├── scripts/ 本地原生打包及 UML 文档渲染 └── vendor/aster/ 独立 Git 子模块:语言、编译器、VM ``` `target/` 是忽略的构建产物,不是源码目录。示例与媒体保留原位置,避免破坏已有引用。完整源码职责见 [逐文件清单](file-map.md)。 ## 组件关系 箭头表示主要运行时调用/数据流,不宣称是无环的 Rust import 图。 ![组件与主要数据流](uml/rendered/components.png) [放大 SVG](uml/rendered/components.svg) · [编辑 UML 源码](uml/components.puml) 标准 UML 组件表示见 [components.puml](uml/components.puml)。`System UI` 只依赖低层几何、文本和画图,不导入 Endor VM 或 guest bridge;开发工具的执行逻辑由外层提供。 ## 线程与进程 | 执行位置 | 核心所有物 | 交互方式 | | --- | --- | --- | | GUI / winit 主线程 | TesseraApp、原生 Window、Surface、标签动画、工具交互 | 读已发布快照;发 viewport、输入和窗口命令 | | `tessera-agent-api` | tiny_http 接收循环、请求观察 | 对写入做校验并进入最多 8 条的构建队列;读取当前发布状态 | | `tessera-endor-worker` | 活跃 ReplSession、候选 VM、托管对象图 | 串行执行程序、回调、布局/绘制协议及任务完成交付 | | 输入发送线程 | 有界输入客户端 | 把原生输入转为本机 HTTP 请求;不执行 VM | | 按需 I/O 池 | 文件/HTTP 工作及取消控制 | 不持有托管根;通过 mailbox 回传文本/错误 | | 系统 curl 子进程 | `fetchText` 的实际 HTTP 传输 | 有超时、大小和协议限制;不是业务服务 | ![进程与线程部署](uml/rendered/deployment.png) [放大 SVG](uml/rendered/deployment.svg) · [编辑 UML 源码](uml/deployment.puml) 可编辑部署图:[deployment.puml](uml/deployment.puml)。Aster 作为 Cargo path dependency 编译到同一应用,不是额外 VM 服务;Lyra 和 Hestia 不在应用依赖链中。 ## 入口定位 - 启动:`src/main.rs` → `runtime/api::start` → `shell/app::TesseraApp`。 - 请求路由和有界队列:`runtime/api.rs`;VM 所有权与发布:`runtime/api/worker.rs`。 - 启动 Endor 主程序/Console:`runtime/endor_host.rs`。 - 类型安装:`bridge/ui_bridge/bootstrap.rs`;原生 Block 方法:`calls.rs`。 - 组合最终画面:`render/scene.rs`;写入像素:`render/software_renderer.rs`。