本页介绍正式版已提供的 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、端口鉴权和发布排错。