跳到主要内容

打包与发布(Web / Desktop / Engine)

这一页解决什么​

  • MiraUI 怎么打 Web 静态站 / 桌面安装包?
  • MIRA 引擎怎么发到 PyPI?怎么打成平台运行载荷?
  • 团队 release 流程怎么保证 UI 与 Agent 版本兼容?

核对日期 2026-10-12:稳定版引擎 0.3.4 / UI 0.4.4;当前 RC 为 0.3.5rc1 / 0.4.5rc1。版本与新功能要求见 本次更新。

制品类型一览​

制品发布工作流触发
UI 静态站(任意静态托管,一次 npm run build:web)手动 / CI
UI 桌面安装包(standalone + bundle)mira-ui 仓库 desktop-release.yml推 tag v*
mira-engine PyPImira 仓库 agent-release.yml推 tag v*
mira-engine 平台运行载荷同上,agent-release.yml 里 PyInstaller 步骤推 tag v*
联合 release 校验release-train.yml (workflow_dispatch)手动指定 agent_tag + ui_tag

我该下载哪个桌面包​

GitHub Release 现在会在同一个 release 条目里同时放出 MIRA-standalone 和 MIRA-bundle 两类桌面资产。

你要做什么应选桌面包
连接远程服务器上的 mira gatewayMIRA-standalone
你已经自己装好了本机 mira / mira-engineMIRA-standalone
想在同一台电脑上本地开箱即用MIRA-bundle
想把安装包交给不熟悉 Python / CLI 的同事MIRA-bundle

一句话判断:

  • standalone = 只有 UI,适合远程连接或你自己管理 engine
  • bundle = UI + 内置本地 engine,适合同机本地使用

UI 构建命令​

cd mira-ui

# Web 静态站(产物:dist/)
npm run build:web

# Electron 渲染端构建(产物:dist-electron/)
npm run build:electron

# Web + Electron 一把
npm run build:desktop

# 出当前平台 standalone 安装包(产物:release/)
npm run dist

# 出本地整合包(产物:release-bundle/)
npm run dist:bundle:mac
npm run dist:bundle:win

standalone 命名约定:

平台安装包文件名(约定)
macOSMIRA-standalone-<ver>-mac-<arch>.dmg
WindowsMIRA-standalone-<ver>-win-<arch>-setup.zip
Linuxstandalone .AppImage(当前 Linux 仅提供 standalone)

bundle 命名约定:

平台安装包文件名(约定)
macOSMIRA-bundle-<ver>-mac-<arch>.dmg
WindowsMIRA-bundle-<ver>-win-<arch>-setup.zip

每个平台只发布一个安装包:macOS 为 .dmg,Windows 为压缩后的 NSIS 安装程序 -setup.zip(解压后运行 setup.exe)。不再发布 macOS .zip、Windows .exe、.blockmap 和 electron-updater 清单(*.yml)——应用的更新检查只跳转到 Release 页面,不读这些文件。

MIRA-bundle 会把平台对应的 mira-engine 运行载荷一起打包(Windows 为完整 one-dir 目录)进 Electron 安装包,并在首启时自动注册/拉起本地 service;MIRA-standalone 则不会代替你安装本地 engine。

Electron 元数据在 mira-ui/package.json:name = "mira-ui"、productName = "MIRA"、appId = "com.projectmira.miraui"。改了这些会影响安装包标识,请慎重。

Engine 发布到 PyPI​

pyproject.toml 已配置 name = "mira-engine"、hatch-vcs 从 git tag 读版本。

发布配置​

当前工作流使用 PyPI Trusted Publishing。维护者需按仓库的 release checklist 检查 Publisher、环境、权限与标签,不再使用旧文档的“在 Manage 中创建项目”步骤。

日常发版​

# 1) 拉到要发的 commit
git tag <engine-tag>
git push origin <engine-tag>

agent-release.yml 会自动:

  1. Linux/macOS/Windows 三平台跑测试。
  2. python -m build 出 wheel + sdist。
  3. pypa/gh-action-pypi-publish 用 OIDC trusted publishing 发到 PyPI。
  4. PyInstaller 出 macOS/Linux 可执行与 Windows one-dir 目录载荷(含 SHA256 校验和),上传到 GitHub Release。文件命名约定:
平台二进制文件名
Windows (x86_64)mira-engine-windows-x86_64.zip(含 exe 与依赖)
macOS (Apple Silicon)mira-engine-macos-arm64
macOS (Intel)mira-engine-macos-x86_64
Linux (x86_64)mira-engine-linux-x86_64

当前发布流程生成统一的 SHA256SUMS.txt,按文件名核对哈希。普通用户通过 快速开始 → CLI + 桌面 UI · 安装 mira-engine 场景下载这份产物(也是 MIRA-bundle 桌面安装包里随附的同一份二进制)。

Trusted publishing 不需要存任何 API token;只要 OIDC 配对正确就行。

校验本地版本​

pip install "mira-engine==<engine-version>"
mira --version

兼容性矩阵​

UI ↔ Agent 的“契约表”由 MiraUI 仓库根目录的 compatibility.json 维护。这个映射由 UI 侧持有,因为依赖方向是 mira-ui → mira(UI 调 agent),按惯例由消费者声明跟哪些上游版本兼容。

引擎通过 /version 暴露 api_contract;模块功能还通过 /api/workflow/v1/contract 发现。UI 使用配对清单和实际协议检查是否可用。

当前清单为 release_train: 2026.10、ui: 0.4.5rc1、agent: 0.3.5rc1、min_agent_for_ui: 0.3.5rc1、api_contract: v1。仓库 package.json 的占位版本不是安装包的 release 版本;构建脚本通过发布元数据注入实际版本。

字段含义​

字段含义何时改
release_trainrelease 窗口标识,如 2026.10每次开新 release window
ui当前 UI tag(0.4.5rc1)或清单支持的版本范围打 mira-ui tag 前
agent当前 agent tag 或 minor rangeagent 发新版后
api_contractwire format 的大版本(v\d+)仅当 wire format 破坏性变更
min_agent_for_uiUI 拒绝连的最低 agent patchminor 跳变 / 协议要求升级时

min_agent_for_ui 是运行时真正会拦版本的那条线——MiraUI 启动时打 /version 拿到 agent 版本后,会跟这个值比对,低于这条线直接判 incompatible,弹"引擎需要升级"提示。

双层 CI guard(mira-ui 仓库)​

Workflow触发干什么
compatibility-check.ymlpush 到 main/dev/release 或 PR,且 paths 命中 compatibility.json / 校验脚本schema 校验,阻止格式错乱
desktop-release.yml#verify-compatibility每次触发本 workflow(包括 tag push)schema + tag push 时额外跑 --require-ui ${TAG#v},要求 compatibility.json#ui 跟 tag 一致或落在 minor 范围内

build-standalone / build-bundle / publish-release 都 needs: verify-compatibility——文件没改 / 改错就发不出来。

本地校验​

cd mira-ui

# 仅 schema 校验
node scripts/validate-compatibility.mjs --file compatibility.json

# 打 tag 之前预演 tag 校验(接受精确 pin 和 minor range 两种写法)
node scripts/validate-compatibility.mjs \
--file compatibility.json \
--require-ui <ui-version> # 填即将发布的版本,不含 v 前缀

发布前核对​

  1. 选择实际要发布的两仓提交,更新 UI compatibility.json 的配对和最低引擎要求。
  2. 用 validate-compatibility.mjs --require-ui <ui-version> 校验将发布的版本。
  3. 按两仓 release checklist 运行测试、平台构建、签名与安装 smoke,再发布对应标签。
  4. release-train.yml 校验已发布的 agent/UI 配对;用真实标签指定输入。

此处不再保留 2026.04 的旧版本号和固定分支切换命令。源码标签、GitHub 资产、PyPI 包与可用 Docker 镜像需要分别检查。

Wire format 破坏性变更的特殊流程​

如果当次 release 改了 wire format(删字段 / 改 enum / 改 endpoint shape),需要协调两仓:

  1. mira:改 mira_engine/channels/ui.py 里的 _API_CONTRACT_VERSION = "v1" → "v2",agent 打 tag,独立发版
  2. mira-ui:改 engine.ts 里检查的常量来源(compatibility.json#api_contract "v1" → "v2"),回测兼容旧 agent 不再连得上(这正是 api_contract 大版本要做到的事),打 tag

旧 UI 连新 agent / 新 UI 连旧 agent,会被 engine.ts 的 probeEngineCompatibility 直接判 incompatible,弹"API 契约不兼容"。

预发布与 Windows 载荷​

桌面设置默认不接收预发布;启用后才检查 RC/Beta。需要当前新增功能时,从指定 RC release 下载成对的 UI 与引擎,不用 /releases/latest 推断 RC。

Windows bundle 需要完整 one-dir 目录和 WinSW,不能只拷一个 mira-engine.exe。ARM64 本地测试需使用对应架构的依赖与构建工具,不能代替 x64 发布验收。构建参数与预演步骤以 UI 仓库脚本为准。

Docker 镜像与发布的区别​

compose 的 self-hosted profile 引用了 ghcr.io/mira-intelligence/mira-engine 与 mira-ui,但当前两仓 release 工作流没有自动构建/推送这两个镜像的步骤。推 v* 标签不能证明这些镜像已发布。

部署前确认目标镜像与标签可拉取;没有可用镜像时使用 自托管页的源码构建路径。

验收检查(每次发版)​

  • CI 三平台测试全绿,检查警告是否来自本次代码,不把警告一概当作噪声。
  • pip install mira-engine==<ver> 可装;mira --version 显示新版本。
  • 桌面安装包在 macOS/Windows/Linux 三种系统上至少抽查能启动。
  • mira-ui/compatibility.json 已更新到本次 release,node scripts/validate-compatibility.mjs --file compatibility.json --require-ui <tag> 在本地通过;mira-ui 仓库的 verify-compatibility job 在 tag push 上也是绿。
  • GitHub Release 页面有:wheel、sdist、各平台引擎载荷与校验和。