Skip to content

[优化建议] 国产化/老旧环境(麒麟 Kylin ARM64 + 老 glibc + VTE)系统性适配 #273

Description

@qiaoshi-dot

背景

麒麟 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

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions