跳到正文
FunCoding

搜索

搜索文档、Skill 和 MCP

SSE 事件与断线续接

消费单轮流事件,避免重复渲染,并正确处理断开、过期与工具截断。

GET /v1/agents/{id}/runs/{runId}/stream 返回指定 Run 的 Server-Sent Events,不重放其他轮。用它展示实时输出,最终状态仍可用 Get A Run 查询。

curl --request GET \
  --url https://api.cursor.com/v1/agents/bc-00000000-0000-0000-0000-000000000001/runs/run-00000000-0000-0000-0000-000000000001/stream \
  -u YOUR_API_KEY: \
  --header 'Accept: text/event-stream'

事件类型

事件处理方式
status读取 runId 和执行状态
assistant / thinking按 text delta 追加对应文本
tool_call按 callId 关联调用开始与完成
interaction_updateSDK InteractionUpdate 形状的丰富事件
heartbeat空对象保活
result最终状态,可带 text、durationMs 和 git
errorcode/message 描述流错误
done流结束

简单事件与 interaction_update 可能同时发出。仅展示文本和工具时处理简单事件;需要 SDK 形状时处理 interaction_update,忽略相应简单事件,避免同一内容显示两遍。

工具参数与截断

tool_call 包含 callId、name、status,status 为 running 或 completed;args、result 是工具特定 JSON。字段过大时可能被省略,同时出现 truncated.args: true 或 truncated.result: true。缺失的工具结果不能按空结果推断。

result 中的 git 同样是 Agent 当前推送分支快照,不限于当前 Run。归因限制见Runs 与状态。

恢复连接

多数事件带 id,将其作为不透明字符串保存,不解析内部格式。断线后在 Last-Event-ID header 中发送最后接收的 ID;ID 必须属于当前请求的 Run,否则返回 400 invalid_last_event_id。

开头的 status 事件不带 id,每次重连都会再次出现。成功恢复后先处理这一状态,再继续恢复范围,不能因为重复 status 就丢掉整个连接。

保留窗口

响应 X-Cursor-Stream-Retention-Seconds 给出流保留时间。过期可能返回 410 stream_expired,此时停止重试流,改查 GET /v1/agents/{id}/runs/{runId} 读取最终状态。不要把断线或流过期当作任务失败。