SSE 事件与恢复
GET /v1/runs/{run_id}/events 以 Server-Sent Events 观察已授权 Run。客户端维护事件 sequence 并按序去重;事件流可能因网络断开而停止,服务端 Run 不因此取消。
事件类别
| 阶段 | 可见事件举例 | 使用方式 |
|---|---|---|
| 准入与调度 | run.queued、run.running、run.waiting |
展示服务端状态,不从客户端推断还会运行多久 |
| 模型 | step.started、step.dispatched、step.first_token、step.first_reasoning、step.output_completed |
流式正文和公开推理;最终输出仍按快照/终态核对 |
| 上下文/费用 | context.compacted、billing.updated |
只用当前 Run 费用和核对状态,不把摘要正文暴露给 UI |
| 审批与工具 | approval.requested、approval.resolved、tool.requested、tool.claimed、tool.receipt、tool.executor_state |
展示当前任务和产品执行器状态;事件自身不授予执行权 |
| 终态 | run.completed、run.failed、run.cancelled、run.expired |
到终态后停止观察,保留 Run ID 供查询 |
断线后先 GET /v1/runs/{run_id} 获得完整快照,用其 resume_cursor 补读事件;发现事件缺口再次取快照。不同客户端 API 的 cursor/after 参数以 SDK 和OpenAPI为准。只读回放或刷新页面不得自动执行 ToolRunner handler 或新建 Run。旧客户端对未知可选事件类型应忽略,并仍用快照保证最终状态。
页面 UI 中的流式片段、首段标记和结束分类是展示信息;只有服务端持久状态决定是否已完成及是否产生费用。completion_reason=needs_user_input 的 Run 已结束,用户输入会在同一 Session 中开启下一轮。Client Core与运行诊断。