import.completed,再调用发布接口并等待 release.completed。Meoo 导出的 Web 项目保留原有运行方式;普通外部源码按 mise.toml 安装环境、执行工程任务和部署。如果需要补齐配置或修复运行问题,可启用本文末尾的 AI 适配与修复能力。
源码导入发布与静态直传怎么选
主要区别是上传源码还是构建产物,以及由谁执行构建。
导入本身不等于构建。 默认流程先保存源码,单独调用发布接口后才按项目配置构建和部署。没有构建步骤的工程可以省略
tasks.build;静态项目直接发布 output 目录,HTTP 服务按 tasks.start 启动。
同一个静态工程可以走两条路径:上传源码和构建脚本,让 Meoo 构建;或者在自己的 CI 中完成构建,只将产物目录中的文件打成 ZIP 后静态直传。直传 ZIP 的根目录必须有 index.html,不要再包一层 dist/。静态直传不会运行 Python、Java、Go 等后端程序,也不会把产物还原成可编辑源码;两种发布方式都会按各自流程进行内容安全检查。
Meoo 导出项目如何导入
直接上传 Meoo 导出的 Web 项目 ZIP,默认ai_adapt=false,等待 import.completed 后调用发布接口。平台与首页使用相同的导出包识别规则,保留项目原有运行方式:旧 Meoo 项目无需补 mise.toml,原本使用 mise 的项目继续使用原配置。请保留导出包中的 manifest;无法验证导出标识的包会按普通外部源码处理。
导入只创建新项目,不覆盖原项目,也不自动恢复数据库、云函数等云资源。环境变量和外部服务仍需按新项目配置。
普通外部源码通过 mise 发布的要求
导入成功只表示源码已提交和持久化,不会提前验证构建或生产服务启动一定成功。普通外部源码缺少
mise.toml 时也可导入,但发布前需要补齐;可识别的旧 Meoo 导出包沿用原有配置。不要把 API 返回 HTTP 200 当作导入或发布成功;必须读取对应的 SSE 终态。
首期自测基线是无依赖静态 HTML 和 Node.js HTTP 服务。其他框架可通过相同任务协议接入,但能否部署取决于其工具、系统依赖与运行环境兼容性;本接口不提供任意工程的兼容性保证,也不提供 App 安装包、小程序渠道发布或多服务编排。
静态站点的最小例子
工程包含index.html 和以下 mise.toml:
output 是工程内的相对目录,不能使用绝对路径或越过工程根目录。构建结束后该目录必须包含可访问的站点文件(本例为 dist/index.html)。如果产物已经随源码放在该目录,可以省略构建任务。涉及 npm 等依赖的项目还需自行声明工具版本和安装任务。
HTTP 服务的最小例子
工程包含以下server.cjs:
mise.toml:
tasks.start.run,启动命令保持前台运行,并在 0.0.0.0 上监听与 meoo.deploy.port 一致的端口(整数 1–65535)。服务端模式不要声明静态 output;若声明了 install 或 build 任务,也必须提供非空 run。需要编译的服务应在构建任务里生成产物,再由启动任务运行生产入口。
仅做正式发布不要求 tasks.dev。如果还需要 Meoo 沙箱预览,另行提供 tasks.dev.run,让预览服务监听 0.0.0.0:3015;生产端口仍以 meoo.deploy.port 为准。预览页面需要允许 Meoo 跨域 iframe 嵌入,不能返回阻止嵌入的响应头。
非 JavaScript 项目示例:Python
项目不要求使用 JavaScript。部署方式由最终需要静态文件还是 HTTP 服务决定,工具和执行命令在mise.toml 中声明。下面两个示例都使用前文同一套导入、发布 API。
示例一:用 Python 构建静态页面
工程包含build.py 和 mise.toml。build.py 读取数据并生成站点文件:
mise.toml:
python build.py,再托管生成的 dist/index.html;网站访问时不运行 Python。本例只用标准库,不需要安装依赖,也不需要 tasks.start。
若改走静态直传,先在自己的环境运行 python build.py,再将 dist 里的文件打包,使 ZIP 根目录直接包含 index.html。这时无需上传 build.py 和 mise.toml,平台也不会再次构建。
示例二:Python HTTP 服务(Flask + Gunicorn)
工程根目录包含app.py、requirements.txt 和 mise.toml。app.py:
requirements.txt(示例固定依赖版本):
mise.toml:
.venv。发布时平台安装 Python 和依赖,再使用 Gunicorn 启动 HTTP 服务;访问 / 返回页面,访问 /api/hello 返回 JSON。本例不需要编译,所以省略 tasks.build;如果项目需要生成代码或编译资源,再声明对应的 build 命令。Gunicorn 的 app:app 表示加载 app.py 中的 app 对象,写法见 Flask 部署说明。
如需沙箱预览,可另外配置 tasks.dev.run 为 .venv/bin/gunicorn --bind 0.0.0.0:3015 --workers 1 app:app。预览和生产启动分别使用 3015、3000 端口。
这个示例需要持续运行 Python 服务,因此应使用源码导入后发布,不能把 .py 文件通过静态直传当作后端运行。示例说明的是协议和工程组织方式;实际部署仍取决于目标环境的工具安装、依赖源和服务运行结果。
调用顺序
先导入;Token 需要project.write source.write:
import.completed 且 ai.status=skipped 后,保存其 project_id。再发布;Token 需要 release.write:
release.completed 后访问 access_url 验证站点或服务。发布使用项目当前源码,无需传 Git 提交 ID。导入期间请勿从其他入口编辑、启动 Agent、发布或删除项目,必须等到 import.completed 再继续;服务端不额外加锁。发布失败时保留当前项目,按 release.failed.message 修复配置或源码,再用新的发布 Key 发起新的发布尝试,无需重复导入。
网络断开时先使用同一有效凭证、同一请求和原 Key 重连确认结果,不要把断线当成失败而立即换 Key。完整字段、ZIP 限制、凭证续期限制及错误处理见源码导入 API和发布 API。
可选:AI 适配与修复
在导入表单中设置ai_adapt=true,其余字段和 ZIP 要求不变。除 project.write source.write 外,还需 agent.run;查看 AI 状态和输出需 agent.read,最后发布需 release.write。
AI 能做什么
导入完成后,平台通过已有 Agent 能力处理项目。旧 Meoo 项目沿用原框架和构建发布方式,按需修复依赖、源码和运行配置;使用 mise 的项目通过mise-import 补齐配置并验证预览。按工程情况尝试:
- 识别项目结构、技术栈、依赖和启动方式。
- 使用 mise 的项目补齐或调整
mise.toml;旧 Meoo 项目修复原有构建和运行配置。 - 在验证过程中定位配置或源码问题,并尝试修改相关文件,使工程能够运行。
- 验证沙箱预览,并通过 Agent 事件输出处理过程和结果。
如何知道 AI 完成了
导入接口的完成事件只返回 AI 的启动结果,不在导入 SSE 中转发 AI 输出:project_id、conversation_id 和 ai.run_id,继续使用已有 Agent API:
ai.status=started 不代表修复完成,Run 完成也不代表已经正式发布;检查结果后再调用本文的发布接口,等待 release.completed。
AI 或发布失败后怎么办
ai.status=failed表示源码已导入,但未确认 AI 启动成功。先查询当前 Run,避免重复启动;确认没有任务运行后,再通过原有 Agent 接口继续处理这个项目。- AI Run 失败或修复不完整时,保留该项目,使用
POST /open/v1/projects/{project_id}/agent/runs,传入导入返回的conversation_id和明确的修复要求继续会话。请求格式、幂等和事件处理沿用 Agent API。 - 发布构建失败时,可以把
release.failed.message中的错误交给后续 Agent Run 修复。修复完成并确认没有任务运行后,用新的发布 Key 重试发布;这一步需要接入方发起,不会由导入接口自动循环修复和发布。 - 后续自行发起的 Agent Run 不等于导入自带的适配任务,请按 Agent 协议明确任务范围;不要在提示词中提交 Secret 或 Token。

