T3 Code 非官方中文翻译不是官方产品,也不是 T3 Tools 官方文档。源提交 d2c25950b4d9英文原文GitHub 源文件
Skip to content

T3 移动终端原生模块 ​

这个本地 Expo 模块负责移动应用的原生终端表面。

JavaScript 契约有意保持很小:

  • 来自原生表面的输入以 { data: string } 发出
  • 来自原生表面的尺寸变化以 { cols: number, rows: number } 发出
  • 远程 PTY 输出由现有的 WsRpcClient.terminal RPC 流交付

iOS 实现使用随仓库提供的 GhosttyKit.xcframework,它由 VVTerm 的 Ghostty custom-I/O 与 live-padding 分支构建。T3TerminalView 拥有一个 libghostty 表面,并使用这一回调 I/O 模型:

  1. 为该进程初始化 libghostty 一次
  2. 每个原生视图创建一个 Ghostty 应用和一个表面
  3. 用 ghostty_surface_feed_data 把远程输出送入该表面
  4. 用写入回调把用户输入送回 JS
  5. 通过 onResize 发出 Ghostty 测得的终端尺寸

Android 用上游的 libghostty-vt 实现同一视图契约,负责终端状态、解析、重排和回滚缓冲。Android Canvas 视图渲染 JNI 桥产生的紧凑快照,因此 React Native 界面和 RPC 代码保持平台中立。

随仓库提供的 Ghostty 修订和许可详情见 THIRD_PARTY_NOTICES.md。

重新构建 GhosttyKit ​

已签入的 GhosttyKit.xcframework 由 Yash Singh 的 Ghostty 分叉在修订 cf8edc23f3a6a87a96e41a90013e89e987d34980 上构建。把 GHOSTTY_SOURCE_DIR 设为 https://github.com/Yash-Singh1/ghostty 的一份克隆,并检出该修订(纳入仓库时为 t3code/custom-io-ordered-feed 分支,基于 VVTerm 的 vvterm/custom-io-padding 分支)。

bash
apps/mobile/modules/t3-terminal/scripts/build-libghostty-ios16.sh

该脚本用 Zig 0.16.0 构建 Ghostty,对 iOS 归档执行 strip,并只替换 ios-arm64 和 ios-arm64-simulator 切片。必须安装 Xcode 的 Metal 工具链;如果 metal 失败,请运行 xcodebuild -downloadComponent MetalToolchain。

为 Android 重新构建 libghostty-vt ​

已签入的 Android 共享库和头文件,钉选到仓库根目录 native/libghostty-vt/VERSION 中记录的修订。设置 ANDROID_NDK_HOME 后运行:

bash
apps/mobile/modules/t3-terminal/scripts/build-libghostty-android.sh

该脚本会在需要时下载 Zig 0.15.2,检出已钉选的上游 Ghostty 修订,并以 16 KB 页大小支持重新构建全部四个 Android ABI。

非官方译文 · 源提交 d2c25950b4d9 · 不代表 T3 Tools