Skip to main content
本页介绍正式版已提供的 Mini App 接口及其错误处理,版本差异在对应章节注明。方法签名分别见 Client API、Node API 和 Agent API。

先区分错误形状

跨进程调用时,不要依赖 instanceof 或具体 Error 子类名称。message 用来展示或诊断;Node 业务分支按 code 判断。

miniapp 工具

本节列出 Agent 执行 init、publish、open、inspect、restart 和 stop 时的工具错误,与 Node context.tool 的错误不同。error.retryable 是宿主给出的恢复提示。capacity_busy 不会因为原样重试而释放名额;PREPARATION_FAILED 即使恢复动作为 retry,也要先完成其提示的条件。

发布诊断

error.diagnostic 的形状为 { stage, reasonCode, recovery, hint }。stage 为 workspace、runtime、mcp、connector 或 host;recovery 为 edit_workspace、retry 或 user_action。下面列的是公开发布诊断的 reasonCode,不能把它们当作同层的 error.code。

Node 调用的结果与重试

Host Connector 和统一工具入口共享以下错误字段:
  • not_dispatched:没有发给目标;修正原因后再考虑重试。
  • provider_reported:服务已经返回失败。依据该服务的业务结果处理,不能因此推断写操作绝对没有发生。
  • unknown_after_dispatch:调用可能已执行。先读取业务状态核对,不能仅因 retryable 或错误名称而重复写入。
  • invocationId 用于关联同一次调用,可能缺省。diagnostic.issues 只提供安全的字段路径、约束和上限,不包含用户参数值。

Host Connector

接口与返回结构见 Node API。

Node 统一工具入口

context.tool 的错误也采用上述 Node 调用错误形状。调用 Connector 工具时还可能保留 Host Connector 错误码。Node request(names) 在无人审批时以 TOOL_APPROVAL_REQUIRED 拒绝,并在错误对象附加 permissions 权限快照;这个字段只用于界面提示。仅关闭 tool:call 时,request() 成功返回各名称为 deny 的快照,不弹框;这与 call() 被拒绝不同。MCP 工具正常返回的 isError: true 是工具报告业务失败,不是 Promise 拒绝。接口与结果联合类型见 Node API。

Agent API

Node 读取 error.code、error.retryable,BUSY 还带可能的 error.reason。页面读取 Error.message。下表列出宿主对运行时错误的映射,不能直接将 Node 码值转成小写。Node 的 BUSY.reason 有 session_busy、queue_full、rate_limited、observer_limit 四种。whenBusy 解决目标会话忙时的跟进,不会取消其他限额。页面还可能因重复使用在途 requestId 而收到 busy;不要依赖页面错误上附加 reason,桥接只保证错误消息。页面传输失败时,各方法的错误码也有区别:run、answer、reply、open、models、agents、create 的桥接失败可能返回 result_unknown;observe、sessions、session 的桥接失败返回 runtime_unavailable。因此不能把所有只读方法的传输失败归为同一个码。接口、返回的 error 字段和事件见 Agent API。run() 正常返回的 status: 'error' 与 Promise 拒绝是两条不同路径,不能只写 catch 而忽略结果状态。

页面 API

页面不读取 Node 的 code / retryable / disposition。以下码值通过抛出或 Promise 拒绝时的 Error.message 返回。capabilities.has() 例外:它同步返回布尔值,见能力探测。

message.append

窗口句柄

下表说明 v3.1.10 的窗口行为。v3.1.9 的差异见表后说明。not_found 是宿主内部窗口响应,不作为页面错误码暴露;页面收到 result_unknown。方法和可写字段见 Client API。v3.1.10 中,用户取消需要重建页面的切窗确认时,update() 成功返回当前状态,mode 仍为原值,不会抛出 user_cancelled 或 busy;应检查返回的 mode。活动页面请求或订阅本身不再阻止切窗,用户确认后它们随旧页面结束而取消或清理。旧文档的 Promise 和监听器不会延续,见页面重建与确认。v3.1.9 中,活动请求、观察订阅、权限提示或采集也可能让切窗返回 busy;已获麦克风授权的页面另有切窗确认,用户取消也返回 busy。不要把 v3.1.10 的取消规则用于这些旧宿主。

工具预授权

页面 tool.request() 仅关闭 tool:call 时成功返回全 deny,不会抛 not_permitted。与 Node 的同名方法不同,页面失败只抛码值;即使宿主响应带权限快照,也不要依赖 error.permissions。见 Client API。

语音转写

转写只返回文本,不取消或停止页面自己的采集流。格式、结果与 onPartial 见 Client API。麦克风和摄像头的标准采集错误(例如 NotAllowedError)由浏览器 API 抛出,不使用这张转写码表。

摄像头与系统通知

这两项从 MiniMax Code v3.1.9 起正式提供,使用标准浏览器 API,没有额外的宿主错误码。getUserMedia() 失败时读取浏览器异常的 name,例如 NotAllowedError。通知按标准 Notification API 处理:检查 Notification.permission 和 requestPermission() 的结果,并监听通知对象的 error 事件;实际显示还受系统通知设置影响。不要将这些结果解释为上面的语音转写错误码。声明和用法见页面设备 API。

能力探测

capabilities.has(name) 同步返回 boolean,未知名称为 false,没有宿主错误码或 Promise 拒绝。旧宿主可能没有这个对象,先使用可选链检测;直接调用不存在的对象会产生 JavaScript 错误,不是 Mini App 的权限错误。能力名称和适用端见 Client API。

启动和运行诊断

inspect 的 diagnostics.failure.code、diagnostics.run.failure.code 和日志中的 code 用于定位运行阶段。它们与前面的工具 error.code、diagnostic.reasonCode 属于不同层,不能互换。例如底层 READINESS_TIMEOUT 可帮助判断 Node 监听/就绪问题,对外发布诊断则使用 RUNTIME_NOT_READY。先检查入口是否导出 start(context)、是否用 node:http 监听分配端口、是否在监听和路由安装完成后返回。退出状态、时间或失败信息缺失时,按“未知”处理,不要仅凭诊断名称推断进程已经退出。契约与处理步骤见 Node API、端口鉴权和发布排错。