Repository navigation
Termexo v0.8.7
V0.8.7:更换屏幕解析器,终端不会再被永久卡死
- 终端不会再被永久卡死:用于重放的屏幕此前由一个「断言而非修复」自身不变量的库解析,而调整尺寸就足以打破其中一条——一个宽字符留在了变窄后的网格容不下它后半格的位置上。这一次 panic 会毒化屏幕所在的互斥锁,而被毒化的锁永不恢复:此后每次读取都失败,于是终端显示为空白并标记「已停止」,而它的 agent 仍在运行,只是再没有任何东西能够到它。在一个客户端里激活 agent、再到另一个客户端激活它,是稳定复现的路径,因为宽字符和尺寸变化这两个条件同时具备。
- 解析器改用 avt:即 asciinema 的录制器、播放器和服务端所使用的终端模型。用同样的 30000 段贴近真实的 agent 输出(中英文混排、颜色、光标移动、滚动区域、备用屏幕和尺寸变化)测试,旧解析器失败 1169 次,新解析器一次都没有。
- 解析器出错只损失滚动历史,不再损失终端:屏幕会按相同网格重建、终端继续可用;已经被 panic 毒化的锁也会被恢复而不是拒绝,因此单次故障不再能让它背后的一切在整个进程生命周期内失效。
- 迟迟不返回的重绘不再让终端沉默:重绘进行期间,终端产生的一切都要等它结束才会写出,所以一个永不答复的后端不只是重绘失败——它会让终端什么都不再显示。画面落后可以靠 agent 的下一帧恢复,沉默不能。
- 读取某个终端的屏幕不再阻塞其它所有终端:此前生成快照时一直持有着每个终端的输入、输出、尺寸调整和启动都必须经过的那把锁,于是一个终端的重绘会拖住全部终端;现在它在锁外进行,每块输出的编码与发布也一样。
- 鼠标上报、bracketed paste 和小键盘模式能在刷新后保留:新解析器只建模屏幕,不建模输入如何上报,因此这些状态改为从输出流中读取并一并恢复——丢掉鼠标上报,手机就无法滚动 agent 的界面。
环境要求不变:Windows 10 build 17763(2018 年 10 月)或更高,WebView2 运行时 Chromium 111 或更高。