架构
Terminality 建立在纯 Rust MVVM 核心 libszt 之上,界面客户端可以替换。桌面端使用 Tauri 2 + React;移动端使用 React Native,并通过 UniFFI 生成 Swift / Kotlin 绑定。
进程模型
┌─ 一个桌面进程 ───────────────────────────────┐
│ libszt Context(共享) │
│ ├─ WorkspaceModel │
│ ├─ HostCatalogModel │
│ ├─ SessionRegistry │
│ ├─ Vault │
│ ├─ SettingsModel │
│ ├─ QuickCommandModel │
│ └─ AsyncExecutor (Tokio) │
│ │
│ ┌─ 窗口 A ───────┐ ┌─ 窗口 B ───────┐ │
│ │ 标签页与分屏树 │ │ 标签页与分屏树 │ │
│ └────────────────┘ └────────────────┘ │
│ │
│ 设置 | 连接库 | 新建主机 | tmux | 开源许可 │
└───────────────────────────────────────────────┘一个进程、一个 libszt Context、多个原生窗口。对话窗口共享状态,但不拥有主窗口的标签页或窗格。
分层架构
React / React Native 展示层
↓
@szt/libszt 手写 TypeScript 门面
↓
Tauri Commands / UniFFI IPC 边界
↓
libszt(纯 Rust) 行为核心
├─ ViewModels 界面状态、命令、事件
├─ Models 领域状态与校验
├─ Services I/O、PTY、SSH、网络
├─ Binding Interface 类型化外语契约
└─ Vault / Crypto 加密与持久化
↓
Platform Adapters PTY、Keychain、废纸篓、字体MVVM 组件模型
| 层 | 作用 | 示例 |
|---|---|---|
| Model | 领域状态、校验、可序列化命令参数 | HostCatalogModel、WorkspaceModel |
| Service | I/O、编排、依赖注册 | Tmux Module、FileService、OminiService |
| ViewModel | 面向界面的状态、命令、事件,并拥有键控子项 | WorkspaceViewModel、SettingsViewModel |
Rust 通过 TypeId 校验组件查找;外部客户端使用稳定、版本化的契约。ViewModel 门面手写完成,不依赖反射扫描或语法解析。
状态、命令与事件
rust
State<T> // 可观察、有序投递、panic 隔离
ReadonlyState<T> // 只读订阅
Command<T> // 可取消意图与类型化参数
Task<T> // 可等待取消的异步执行
Event<T> // 双向或只读事件,明确订阅所有权异步运行时
生产异步命令通过通用 AsyncExecutor 在 Context 拥有的 Tokio reactor 上执行:
- 任务协作响应可等待取消。
CancellationToken::try_commit线性化不可逆副作用,任务不能先报告取消再在后台修改状态。- 即使最后一个所有者由工作任务释放,运行时也能安全关闭。
终端字节数据流
PTY reader
→ 有界队列(64 × 8 KiB)
→ 16 ms 或 32 KiB 批次
→ 原始 Tauri 二进制 Channel
→ xterm TerminalSurface(WebGL)终端字节使用专用原始通道,而不是 JSON 或普通绑定协议。控制状态与意图使用不透明句柄和版本化 JSON 槽位。
绑定协议数据流
React Component
→ useViewModel("workspace")
→ WorkspaceViewModel(手写类型门面)
→ Tauri invoke / UniFFI
→ BindingRuntime
→ ViewModel.commands.handle(...)
→ 状态更新 → UI 重渲染useViewModel("workspace") 通过手写 ViewModelMap 推导完整类型,原生契约通过校验后才会暴露。
运行时与持久状态
| 运行时(临时) | 持久化(SQLite 加密) |
|---|---|
| 窗口、标签页、分屏、窗格 | 主机档案 |
| 会话注册表与 PTY 子进程 | 设置 |
| 滚动缓冲 | 快捷命令 |
| 机器发现快照 | QCS 最近历史 |
| 命令编排器草稿 | 凭据记录 |
关闭应用会销毁 Rust 会话注册表与 PTY 子进程;下次启动创建新的运行时布局。只有保险库继续存在。
支持目标
macOS 13+(Intel 与 Apple Silicon)· Windows 11 x64 · Ubuntu 22.04 / 24.04 x64(X11 与 Wayland)· iOS 16+ · Android 10+ ARM64
仅通过 CI 编译并不代表平台认证;正式发布仍需要在真实或虚拟设备上完成验收。