<!-- 来源: https://hostanagent.com/docs/reference/events/ | 协议: 1.0 | 更新: 2026-09-30 -->

# 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](/docs/reference/openapi.json)为准。只读回放或刷新页面不得自动执行 ToolRunner handler 或新建 Run。旧客户端对未知可选事件类型应忽略，并仍用快照保证最终状态。

页面 UI 中的流式片段、首段标记和结束分类是展示信息；只有服务端持久状态决定是否已完成及是否产生费用。`completion_reason=needs_user_input` 的 Run 已结束，用户输入会在同一 Session 中开启下一轮。[Client Core](/docs/integration/javascript/)与[运行诊断](/docs/console/runs-diagnostics/)。
