背景
麒麟 Kylin / 统信 UOS + 较老 glibc(Ubuntu 16.04 时代底子)+ MATE/GNOME Terminal(VTE 内核)是国内不少开发者的真实开发环境。#162 报告了该环境下 mimo TUI 花屏与 mimo web 崩溃。
深入排查后发现,这类环境其实有一组系统性的适配点 ,而非单一 bug。现汇总如下,并附已提交的 PR,便于统一评估与跟进。
已定位并提交 PR
1. TUI 花屏:OSC 66 不被 VTE 支持 — PR #246
opentui 渲染器用 OSC 66 显式宽度协议 (ESC]66;w=…)做字符宽度处理。VTE 不支持该协议,会把转义序列当普通文本打印 ,光标随之移动,opentui 进而误判终端"支持 explicit_width",于是对每个字形都内联发 OSC 66 → 持续 ]66;w=1; 乱码。
修复:检测 VTE(VTE_VERSION)后,在创建渲染器前设 OPENTUI_FORCE_EXPLICIT_WIDTH=0 + OPENTUI_FORCE_WCWIDTH=1;并提供 MIMOCODE_DISABLE_TEXT_SIZING 手动开关。
已在 Linux 容器 + 伪终端实测 :相同 @opentui/core@0.1.101,模拟 VTE_VERSION 下,修复前抓到 ESC]66;w=1;,修复后该序列完全消失。
2. 安装脚本缺 glibc 预检 — PR #269
mimocode 二进制由 bun 编译,需 glibc ≥ 2.27 。更老的国产化系统上,install 会照常下载安装,用户直到首次运行才撞上动态链接器天书:version 'GLIBC_2.27' not found。
修复:安装前对 Linux(非 musl)解析 ldd --version 做 glibc 预检,过低时提前 中止并给可操作指引;MIMOCODE_SKIP_GLIBC_CHECK=1 可绕过。保守策略,解析失败则不动作,绝不误伤。
3. mimo web provider 空值崩溃 — PR #272
web 前端 useProviders() 的 getter 直接对 provider 数据 .map()/.filter(),数据为 undefined 时在初始化阶段抛 Cannot read property 'map' of undefined,整个 web UI 崩溃且不可恢复(对应 #162 的 web 现象)。
在 provider 取值入口做边界防御(空值回退到空列表,数据到达后响应式恢复)。
诚实说明 :当前源码里 store 的 provider 有初始空 shape,我未能从该树复现发布版的精确崩溃 ,故此 PR 定性为防御性加固 而非确证修复,详见 PR 描述。
仍建议跟进(暂未提 PR)
mimo web 崩溃根因 :需用发布版 + source map 在国产化/离线网络下复现,定位 provider 数据为何变 undefined(疑似 provider/模型列表拉取失败或境外资源不可达)。fix(web): harden provider getters against unsynced/missing provider data #272 仅做边界防御,未触及根因。
老 VTE 更彻底降级 :目前仅 macOS Apple Terminal 走 plain 渲染模式;建议把 VTE(或老版本)也纳入更保守的渲染路径(降低 fps、关闭老 VTE 上无效的 OSC 52 剪贴板等增强)。
CJK 字体缺失提示 :中文显示为方块的本质是系统缺等宽 CJK 字体;可在检测到中文 locale 但渲染异常时,提示安装 Noto Sans Mono CJK 之类字体。
环境信息(来自 #162 )
系统:麒麟 Kylin Linux ARM64;glibc ~2.23
终端:MATE Terminal(VTE 内核)
版本:MiMo Code V0.1.0;安装方式 curl -fsSL https://mimo.xiaomi.com/install | bash
愿意继续就以上各点提 PR,也欢迎维护者评估优先级与方向。Related to #162 。
背景
麒麟 Kylin / 统信 UOS + 较老 glibc(Ubuntu 16.04 时代底子)+ MATE/GNOME Terminal(VTE 内核)是国内不少开发者的真实开发环境。#162 报告了该环境下
mimoTUI 花屏与mimo web崩溃。深入排查后发现,这类环境其实有一组系统性的适配点,而非单一 bug。现汇总如下,并附已提交的 PR,便于统一评估与跟进。
已定位并提交 PR
1. TUI 花屏:OSC 66 不被 VTE 支持 — PR #246
opentui 渲染器用 OSC 66 显式宽度协议(
ESC]66;w=…)做字符宽度处理。VTE 不支持该协议,会把转义序列当普通文本打印,光标随之移动,opentui 进而误判终端"支持 explicit_width",于是对每个字形都内联发 OSC 66 → 持续]66;w=1;乱码。VTE_VERSION)后,在创建渲染器前设OPENTUI_FORCE_EXPLICIT_WIDTH=0+OPENTUI_FORCE_WCWIDTH=1;并提供MIMOCODE_DISABLE_TEXT_SIZING手动开关。@opentui/core@0.1.101,模拟VTE_VERSION下,修复前抓到ESC]66;w=1;,修复后该序列完全消失。2. 安装脚本缺 glibc 预检 — PR #269
mimocode 二进制由 bun 编译,需 glibc ≥ 2.27。更老的国产化系统上,
install会照常下载安装,用户直到首次运行才撞上动态链接器天书:version 'GLIBC_2.27' not found。ldd --version做 glibc 预检,过低时提前中止并给可操作指引;MIMOCODE_SKIP_GLIBC_CHECK=1可绕过。保守策略,解析失败则不动作,绝不误伤。3.
mimo webprovider 空值崩溃 — PR #272web 前端
useProviders()的 getter 直接对 provider 数据.map()/.filter(),数据为 undefined 时在初始化阶段抛Cannot read property 'map' of undefined,整个 web UI 崩溃且不可恢复(对应 #162 的 web 现象)。仍建议跟进(暂未提 PR)
mimo web崩溃根因:需用发布版 + source map 在国产化/离线网络下复现,定位 provider 数据为何变 undefined(疑似 provider/模型列表拉取失败或境外资源不可达)。fix(web): harden provider getters against unsynced/missing provider data #272 仅做边界防御,未触及根因。环境信息(来自 #162)
curl -fsSL https://mimo.xiaomi.com/install | bash愿意继续就以上各点提 PR,也欢迎维护者评估优先级与方向。Related to #162。