跳到正文

错误码与重试 ​

错误响应通常包含:

json
{
  "code": "rate_limit_exceeded",
  "detail": "...",
  "extra": {}
}

按 code 编程,不要依赖 detail 文案。

类别处理
400 / 422修正请求字段;不要重试原请求
401 / 403检查 key、delegation token、project 和 scope
404检查 project、run、monitor 或 profile ID
409重新读取资源状态后再决定下一步
429遵守 Retry-After 并退避
5xx / 网络断开有边界地退避重试;创建类请求优先使用幂等策略

当前 Node SDK 不会对普通请求自动重试;SSE 会尝试重连,并通过连接信息暴露可重试信号。业务代码仍需决定 POST 是否可以安全重试。

Run 执行失败 ​

run 进入 failed 时,读取 run envelope 的 failure_reason、failure_detail 和 terminal_reason。DoAnything 的 awaiting_input 表示需要人工交互,不是网络错误;应消费 interaction 事件并用句柄动作回应。

当前后端的 DoAnything 时长错误使用 max_duration_exceeded;不要写旧的 duration_exceeded,也不要把内部 workflow 名称当作公共错误码。

SSE 断线 ​

保存最后一个事件 ID,使用 Last-Event-ID 重连:

http
GET /api/v1/projects/{pid}/do_anything/runs/{run_id}/events
Last-Event-ID: 142

客户端应按事件 ID 去重,因为重连可能收到重复事件。