开始前
你需要:- OAuth Access Token 或用户 API Key。
- 一个可访问项目的 url_id,作为 Agent 路径中的 project_id。
- 查询模型与性能档位、启动和交互使用 agent.run;读取状态、SSE(默认包含 Write/Edit 正文)和历史使用 agent.read。 项目不存在时,可以先通过 POST /open/v1/projects 创建,详见 用户与项目 API。
- 调用 GET …/agent/capabilities 获取实时模型目录、性能档位和默认值,不要硬编码模型 ID。
- 为用户消息生成稳定的 Idempotency-Key。
- 调用 POST …/agent/runs,保存返回的 run_id、conversation_id、本次 model 和 speed_tier;需要禁用 Meoo Cloud 时在请求中传 disable_cloud: true。
- 立即订阅该 run_id 的 SSE;Write/Edit 白名单正文默认通过工具事件输出。
- 将 message.delta 追加到回复;将 message.snapshot.content 作为全量文本替换。存在 tool_calls 时整体替换当前轮公开工具状态,缺省时保留已有状态。
- 收到 run.input_required 时,根据 action.kind 和 action.input_schema 收集输入并回复。
- 按 usage_id 去重并累加每条 run.usage.data.credits_used;一条是单次结算值,同一 Run 可多次结算。最终结算事件若有,会先于正常终态。
- 收到终态后停止重连。继续对话时把原 conversation_id 放入新的 Run 请求;需要保持模型、档位或禁云配置时再次显式传入。
- 每次新 Run 的 model、speed_tier 省略时使用当前 capabilities 默认值,disable_cloud 省略为 false;同一 Run 的恢复和压缩保留已保存配置。禁云时不会调用 Meoo Cloud CLI 或生成云确认卡,已有云资源不会被关闭;外部 API 仍可用,缺少后端时使用 mock 并如实说明。
状态模型
Run 的已知状态包括:
遇到未知状态时按非终态处理,避免后续扩展导致客户端提前结束。
run.superseded 是结束旧订阅的事件,不是新的 Run 状态。它携带旧 Run 的真实终态,并可能提供接管任务的 current_run_id。
客户端需要保存什么
不要保存 SSE 帧 id 用于跨连接续传;服务端不支持 Last-Event-ID。断线后重新连接同一事件端点,使用 message.snapshot 恢复文本和可选的 tool_calls,并按 usage_id 去重结算事件。

