错误码与重试
错误响应通常包含:
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 去重,因为重连可能收到重复事件。