终端运行时¶
环境服务器负责管理 PTY、会话生命周期和保留的输出。每个客户端,包括桌面渲染器,都通过环境连接进行挂接。这使得客户端可以重新连接或共享正在运行的会话。渲染器选择保留在各自客户端本地,不会改变终端契约。
输出与保留¶
终端历史是增量式的。PTY 回调会追加新的数据块;实时事件仅携带这些数据块。如果在每次回调时物化或复制完整的回滚缓冲区,输出成本会随保留的历史量增长,因此快照和合并式持久化构成了物化的边界。持久化会将可变的历史缓冲区排入队列,并在写入执行时读取其最新值。清空、重启和关闭操作必须在完成其生命周期边界之前排空所有写入。
服务器端历史记录限制为每个终端 5,000 行和 8 MiB 的 UTF-8 文本,因此超长的未终止行无法绕过保留限制。逐出会移除最旧的输出,且不会拆分 Unicode 码点;实时输出不会被截断。即使数组压缩稍后才发生,也要立即释放被丢弃的块引用。客户端缓冲区有独立的 512 KiB 上限。在修改此路径时,请使用完整的回滚缓冲区来测量吞吐量。
恢复时只能读取当前或旧版历史文件的受限尾部,跳过任何不完整的 UTF-8 前缀,并应用行数限制。在重写被截断后的文件之前,先关闭读取句柄。在启动时读取整个旧日志将使内存上限失效。
渲染器所有权¶
Android 和 Web 使用相同的 libghostty-vt C ABI 来实现终端行为。平台适配器负责绘图和输入集成,React 不参与终端帧的渲染。Web 适配器在每个浏览器标签页中共享一个 WebAssembly 实例,而每个终端则拥有并自行释放其句柄。上游的规范锁定版本是 native/libghostty-vt/VERSION;当它发生变化时,native 和 web 的构建产物都必须重新构建。Web 将修订版本嵌入其构建信息中,这样 ABI 检查无需第二个锁定版本即可检测漂移。
恢复回滚时,不得向当前 shell 发送终端回复。否则,历史设备查询可能会诱发新的回复,这些回复会像乱码一样出现在提示符处。服务器会从保留的历史记录中剔除查询/响应流量,并且 web 渲染器 会在重放期间分离其 PTY 写入器。在修改保留策略或渲染器代码时,请同时保留这两项保护。
本页原文 Markdown:在 AtomGit 查看·内容源自开源项目 t3/t3code