声明(Disclaimer)
- MiMo-Code 是小米(Xiaomi)MiMo 团队的开源项目,但 MiMoCodeUI 是第三方社区项目,与小米公司及其团队没有任何隶属、合作或背书关系,非官方出品。
- "MiMo"、"MiMo Code" 是小米公司(Xiaomi Corporation)的产品名称/商标,本项目对 "MiMo" 的引用仅用于描述与
mimo serve的互操作性,不暗示任何从属或授权关系。- 本项目是作者个人纯 VibeCoding 的产物,由 DeepSeek-Harness + DeepSeek-V4-Flash 组合制作完成,仅供学习交流使用,不对任何用途作担保。
MiMoCodeUI 是一个第三方的、为 MiMo-Code 制作的 Tauri 2 桌面 GUI 客户端。项目代码以 MIT 许可证 发布。
MiMo-Code 自带终端 TUI,但缺少图形界面。MiMoCodeUI 直连其无头服务 mimo serve,提供会话工作台、流式消息、工具调用、权限审批、计划模式、文件浏览与 PTY 终端。
┌─────────────── MiMoCodeUI(Tauri 2 桌面) ───────────────┐
│ Rust (src-tauri) │
│ └─ serve 管理器:探测/拉起/停止本地 `mimo serve` 子进程 │
│ (spawn --port 0 + 随机 MIMOCODE_SERVER_PASSWORD, │
│ 解析 stdout "listening on" 行获得 URL) │
│ │
│ WebView 前端(Vite + SolidJS + TS + Tailwind v4) │
│ ├─ lib/protocol/ 手写 v1 协议客户端(REST + SSE) │
│ ├─ lib/store/ 事件驱动 Solid 全局 store(SSE 驱动) │
│ ├─ routes/ 连接页 / 会话工作台 / 文件 / 终端 │
│ └─ components/ 消息流、工具卡片、权限/提问、文件树、终端 │
└──────────────────────────────────────────────────────────┘
REST + SSE + WS(Basic Auth / 一次性 ticket)
▼
mimo serve(sidecar 或外部实例)
前置要求:
- Node.js 20+ 与 Rust 工具链(cargo)
mimoCLI:npm install -g @mimo-ai/cli
开发模式:
npm install
npx tauri dev打包:
npm run build # 前端 tsc + vite build
npx tauri build # 产出 NSIS 安装包安卓版(APK):
# 前置:Android SDK + NDK、JDK 17+(或用 Android Studio 自带 JBR)、
# Rust 目标 rustup target add aarch64-linux-android armv7-linux-androideabi x86_64-linux-android
npx tauri android init # 首次生成 src-tauri/gen/android 工程
npx tauri android build # 产出 APK(默认全部 ABI;--target aarch64 只打 arm64)安卓版行为与桌面的差异:
- 不启动本地服务器:安卓端无法运行桌面端
mimo serve,本地模式被禁用; 启动后直接连接云端服务器(连接页有快捷表单,也可在设置中管理多个云端配置)。 - 自适应界面:平板(≥640px)与桌面一致的三栏布局;手机为抽屉式布局 (任务栏/右侧栏通过顶栏按钮滑出),顶栏不显示窗口控制按钮。
- 支持 http/https 明文连接(
usesCleartextTraffic开启);mimo.exe(仅 Windows 用)不会打进 APK(见src-tauri/tauri.android.conf.json)。 - release APK 默认使用调试密钥签名(侧载安装);配置正式 keystore 后使用正式签名。
推送 v* tag(如 v0.1.0)自动触发 .github/workflows/release.yml:
- 更新版本号(
package.json与src-tauri/tauri.conf.json的version保持一致); - 提交并推送代码;
- 打 tag 并推送:
git tag v0.1.0
git push origin v0.1.0Actions 会在 Windows runner 构建 NSIS 安装包、在 Ubuntu runner 构建 Android
APK/AAB(全部 ABI),随后发布到 GitHub Releases。也可以在 Actions 页面
手动运行(workflow_dispatch,需填写与版本一致的 tag)。
可选:配置正式 Android 签名(不配置则使用调试密钥签名):
- 生成 keystore:
keytool -genkey -v -keystore release.jks -alias release -keyalg RSA -keysize 2048 -validity 10000 - 在仓库 Settings → Secrets and variables → Actions 添加:
ANDROID_KEYSTORE_BASE64:release.jks的 base64(base64 -w0 release.jks)ANDROID_KEYSTORE_PASSWORD/ANDROID_KEY_ALIAS/ANDROID_KEY_PASSWORD
- 本地模式(默认):Rust 侧启动
mimo serve --port 0,注入每次启动随机生成的MIMOCODE_SERVER_PASSWORD,前端用Authorization: Basic连接。 - 外部模式:连接页手动填写
http://host:port与密码,对接远程mimo serve。
MiMo-Code 的 mimo serve 与上游 opencode 协议不通用:
- 认证环境变量为
MIMOCODE_SERVER_PASSWORD/MIMOCODE_SERVER_USERNAME(默认用户mimocode), 不识别OPENCODE_*。 - 事件流为 v1 命名(
message.part.delta、message.part.updated、session.status、permission.asked等),没有session.next.*v2 事件族;SSE 信封 payload 无id。 - 路由挂在根路径(无
/api前缀):/session/*、/global/event(SSE)、/global/health、/permission/:id/reply、/question/:id/reply|reject、/pty/*、/file、/find等。 POST /session/:id/message为长连接(10s 心跳,客户端断连会取消运行),因此发消息 优先使用POST /session/:id/prompt_async。
注:npm 上的
@mimo-ai/sdk(0.1.11)发布包不包含dist(broken package),且其 v2 事件族与mimo serve实际事件不匹配,故客户端为手写实现(见src/lib/protocol/)。
MiMo 的 PTY WebSocket 与上游 opencode 不同(已对照 0.1.11 源码与实测确认):
POST /pty创建;POST /pty/:id/connect-token需带x-mimocode-ticket: 1header 换取一次性 ticket(上游无此要求)。- WebSocket
/pty/:id/connect?ticket=为裸字节流:客户端直接发终端输入(字符串/二进制), 服务端流式回传输出;首个控制帧为0x00 + UTF-8 JSON(如{"cursor":n}),输出无帧包装。 - 尺寸调整走 REST
PATCH /pty/:id,body{ size: { cols, rows } }。