Session、资源、事件和线程的共享结构。
Session 对象
创建、获取、列出、更新和归档接口都会返回该对象。
| 字段 | 类型 | 说明 |
|---|---|---|
id | string | sess_ 前缀的 Session ID |
type | string | 固定为 "session" |
agent | object | 本 Session 使用的 Agent 快照,字段裁剪规则见 Session 嵌入 agent |
environment_id | string | Session 使用的 Environment ID |
status | string | 生命周期状态:rescheduling、running、idle 或 terminated。Cancel 端点响应中的 canceling 是固定确认值,不是 Session 对象的持久化状态 |
title | string | null | Session 标题 |
metadata | object | Session 元数据 |
environment_variables | object | Session 级环境变量,以字符串 key 到字符串 value 的 map({"NAME":"value"})注入到 agent 运行时;无配置时返回 {}。详见 创建 Session |
resources | Session resource 数组 | 挂载到 Session 的 file、GitHub、通用 Git 或 Memory Store 资源 |
vault_ids | string 数组 | 挂载到 Session 的 Vault ID |
deployment_id | string | null | 由 Deployment 创建时的 Deployment ID,否则为 null |
outcome_evaluations | array | Outcome 评估结果;新 Session 返回 [] |
stats | Session stats | Session 统计信息 |
usage | Session usage | Session 的模型、沙箱运行时与总 credits 累计快照;usage 数据不可用时省略该字段 |
archived_at | string | null | 归档时间,未归档时为 null |
created_at | string | 创建时间 |
updated_at | string | 最近更新时间 |
agent_id、turn_status 或 memory_store_ids。
Agent 引用
创建 Session 时的 agent 可以是 Agent ID 字符串,也可以是如下对象:
| 字段 | 类型 | 必填 | 说明 |
|---|---|---|---|
id | string | 是 | agent_ 前缀的 Agent ID |
type | string | 是(仅对象形式) | 必须固定为 "agent",对象形式下缺失或为其他值返回 400。直接传字符串 Agent ID 时不校验该字段 |
version | integer | 否 | 要固定的 Agent 版本;省略或传 0 表示使用最新活跃版本 |
Session 嵌入 agent
Session 对象 中返回的 agent 是该 Session 固定的 Agent 快照,与原始 Agent 相比有以下字段会被裁剪:
发布更新的源 Agent 配置不会替换这份快照。更新 Session时提交 agent 字段,可以只为当前 Session 修改受支持的运行配置,但不会推进内嵌的 agent.version;链接文档也说明了 Skill version 的生效规则。
created_at、updated_at:嵌入 Agent 中始终不返回。archived、archived_at:嵌入 Agent 中始终不返回;Session 不受 Agent 归档状态影响。metadata:Agent 自身的 metadata 被裁剪;只暴露 Session 级别的metadata。instructions:被替换为system。
agent.multiagent.agents[] 的返回结构见 Multiagent 阵列元素,单个线程的 Agent 结构见 Session Thread 对象。
agent.model.effective_context_window
Session 响应在 agent.model 中额外返回只读字段 effective_context_window(int64,单位 token),表示当前 Session 实际生效的上下文窗口(已考虑 Environment 级 override)。值为非正或缺失时不返回;客户端将该字段视为参考即可。
Session resource
resources[] 通过 type 区分资源类型。
File resource
| 字段 | 类型 | 必填 | 说明 |
|---|---|---|---|
id | string | 仅响应 | Resource ID |
type | string | 是 | "file" |
file_id | string | 是 | file_ 前缀的 File ID,文件必须已 ready |
mount_path | string | 否 | 容器内挂载路径。省略时默认 /mnt/session/uploads/<file_id> |
created_at | string | 仅响应 | 资源创建时间 |
updated_at | string | 仅响应 | 资源更新时间 |
GitHub repository resource
| 字段 | 类型 | 必填 | 说明 |
|---|---|---|---|
id | string | 仅响应 | Resource ID |
type | string | 是 | "github_repository" |
url | string | 是 | 仓库 URL |
authorization_token | string | 否(仅写入) | 访问私有仓库或 push 使用的 GitHub token;响应中不会返回 |
mount_path | string | 否 | 容器内 clone 目标路径;省略时根据仓库名生成 |
checkout | object | 否 | Git checkout 目标,例如 {"type":"branch","name":"main"} |
created_at | string | 仅响应 | 资源创建时间 |
updated_at | string | 仅响应 | 资源更新时间 |
通用 Git repository resource
GitLab、Gitee、Bitbucket 以及其他 HTTP(S) Git 服务使用该资源类型。
| 字段 | 类型 | 必填 | 说明 |
|---|---|---|---|
id | string | 仅响应 | Resource ID |
type | string | 是 | "git_repository" |
url | string | 是 | HTTP(S) Clone URL。公开仓库无需用户名;需要鉴权时在 URL 中包含平台用户名,例如 https://username@gitlab.com/group/repo.git |
password | string | 否(仅写入) | 私有仓库或需要推送时,与 URL 中的用户名同时提供;可填写账号密码或平台要求的 Access Token/PAT。响应中不会返回 |
mount_path | string | 否 | 容器内 clone 目标路径;省略时根据仓库名生成 |
checkout | object | 否 | Git checkout 目标,例如 {"type":"branch","name":"main"} |
created_at | string | 仅响应 | 资源创建时间 |
updated_at | string | 仅响应 | 资源更新时间 |
Memory Store resource
| 字段 | 类型 | 必填 | 说明 |
|---|---|---|---|
type | string | 是 | "memory_store" |
memory_store_id | string | 是 | memstore_ 前缀的 Memory Store ID |
access | string | null | 否 | 可选访问模式。允许值:"read_write"、"read_only"。空字符串或省略表示采用默认值(不覆盖) |
instructions | string | null | 否 | 可选指令,存在 Session resource 上。最大长度 4096 字符 |
name | string | null | 仅响应 | 可查询到时返回当前 Memory Store 名称 |
description | string | 仅响应 | 可查询到时返回当前 Memory Store 描述 |
mount_path | string | null | 仅响应 | 当前实现除已有快照值外返回 null |
id、created_at 或 updated_at 字段。
Session stats
| 字段 | 类型 | 说明 |
|---|---|---|
active_seconds | number | 活跃处理时长;新 Session 为 0 |
duration_seconds | number | Session 持续时长;新 Session 为 0 |
Session usage
usage 是 Session 级累计快照:
| 字段 | 类型 | 说明 |
|---|---|---|
model_credits | number | Session 中已记录模型调用累计消耗的 credits |
sandbox_runtime_credits | number | Session 使用可计费云端沙箱运行时累计消耗的 credits |
total_credits | number | Session 各 usage 分项累计消耗的 credits 总和 |
usage 字段。三个 credits 数值都向下取整而不是四舍五入,最多保留 2 位小数;例如 7.6681 返回为 7.66。JSON number 不保证补齐末尾的 0,因此 1.20 可能返回为 1.2。这三个字段共同组成一次快照,重复查询时应按 Session ID 覆盖本地记录,不要再次累加。
Multiagent 阵列元素
Session 响应的 agent.multiagent.agents[] 中,普通 Agent 和 self 条目返回对应的 Agent 定义,字段如下;不包含条目自身的 multiagent 字段。
Advisor 仅返回 type 和 model,例如 {"type":"advisor","model":"ultimate"},见 Advisor 对象。
| 字段 | 类型 | 说明 |
|---|---|---|
type | string | 兄弟 Agent 取 "agent";表示协调器自身时取 "self" |
id | string | Agent ID。type = "agent" 时存在;type = "self" 时与协调器自身 ID 相同 |
version | integer | 固定的 Agent 版本号;type = "agent" 时存在 |
name | string | 展开后的 Agent 名称 |
description | string | null | 展开后的 Agent 描述 |
system | string | 展开后的 Agent 系统提示词(替代 instructions) |
model | string | object | 与嵌入 Agent 一致;包含 effective_context_window |
| 其他 Agent 字段 | 各异 | tools、MCP servers、skills 等字段,遵循与嵌入 Agent 相同的裁剪规则 |
Event 对象
send、list 和 stream 接口返回的事件是按事件类型变化的 JSON 对象。公开响应只暴露文档中定义的公开字段。
| 字段 | 类型 | 说明 |
|---|---|---|
id | string | 以 evt_ 为前缀的 Event ID |
type | string | Event 类型 |
processed_at | string | 事件被处理后出现。许多 agent 生成的事件不包含此字段。 |
content、input、name、tool_use_id、mcp_tool_use_id、custom_tool_use_id、result、deny_message、rubric、outcome_id、session_thread_id、stop_reason、error、usage 或 model_usage 等字段。
客户端可发送事件类型
POST /api/v1/cloud/sessions/{session_id}/events 只接受以下事件类型:
| 类型 | 必填字段 | 说明 |
|---|---|---|
user.message | content | content 必须是非空 content block 数组 |
user.interrupt | 无 | session_thread_id 可选;省略时响应回显 null |
user.tool_confirmation | tool_use_id, result | result 为 allow 或 deny;deny_message 可选 |
user.tool_result | tool_use_id | self-hosted worker 返回内置工具结果。content 可选;传入时必须是 content block 数组。is_error 可选 |
user.custom_tool_result | custom_tool_use_id | 返回客户端自定义工具结果。content 可选;传入时必须是 content block 数组。is_error 可选 |
user.define_outcome | description, rubric | rubric 是对象,例如 {"type":"text","content":"..."} 或 {"type":"file","file_id":"file_..."};max_iterations 可选 |
公开事件类型
list 和 stream 接口可能暴露以下事件类型:
user.message、user.interrupt、user.tool_confirmation、user.custom_tool_result、user.define_outcome、user.tool_result、system.message、agent.custom_tool_use、agent.mcp_tool_result、agent.mcp_tool_use、agent.message、agent.thinking、agent.thread_context_compacted、agent.thread_message_received、agent.thread_message_sent、agent.tool_result、agent.tool_use、session.deleted、session.error、session.status_idle、session.status_rescheduled、session.status_running、session.status_terminated、session.thread_created、session.thread_status_idle、session.thread_status_rescheduled、session.thread_status_running、session.thread_status_terminated、session.updated、span.model_request_start、span.model_request_end、span.outcome_evaluation_start、span.outcome_evaluation_ongoing 和 span.outcome_evaluation_end。
session.updated 事件
Session 更新成功后会发出 session.updated。事件固定包含 id、type 和 processed_at,并根据请求选择性包含以下字段:
| 字段 | 类型 | 说明 |
|---|---|---|
title | string | null | 请求提交 title 时返回 |
metadata | object | 请求提交 metadata 且更新后的 Metadata 非空时返回 |
agent | object | 通过更新 Session动态更新运行配置后返回的内嵌运行配置快照 |
environment_variables,事件只包含固定字段。事件始终不会包含环境变量名称和值。
session.error 事件
session.error 表示 Session 执行过程中出现错误。事件包含 id、type、processed_at 和 error。
error 对象包含以下字段:
| 字段 | 类型 | 说明 |
|---|---|---|
type | string | 错误分类。客户端应兼容 unknown_error 和以后新增的类型 |
message | string | 可读的错误说明 |
retry_status | object | 重试状态;type 为 retrying、exhausted 或 terminal |
qoder_error_code | string | 可选诊断码。客户端不应据此判断是否重试 |
retry_status.type 的语义:
| 值 | 说明 |
|---|---|
retrying | 服务端正在自动重试,客户端继续等待 |
exhausted | 自动重试次数或恢复时限已用尽,或者错误不可重试而直接失败;本轮不再自动恢复。客户端等待后续状态事件,再决定是否发送新消息 |
terminal | 当前错误不可恢复,服务端不再自动重试;最终状态以后续 Session/Thread 状态事件为准 |
Advisor 事件
Advisor 的生命周期事件通过 agent_name: "qoder.advisor" 标识,session_thread_id 用于区分每次咨询。
| 事件 | 获取位置 | 关键字段 |
|---|---|---|
agent.thread_message_received | 主线程事件流 | from_session_thread_id 为咨询线程 ID,from_agent_name 为 qoder.advisor,content 为建议内容 |
agent.thread_message_sent | Advisor Thread 事件流 | to_session_thread_id 和 to_agent_name 标识主线程,content 为建议内容 |
session.error | Advisor Thread 事件流 | error 包含错误原因和重试状态,见 session.error 事件 |
session.thread_status_idle | Session 事件流 | stop_reason.type 为 end_turn 时咨询结束(含中断),为 retries_exhausted 时咨询失败,具体原因见该线程的 session.error |
Event delta stream 帧
buffered 事件是内容生成完成后输出并写入 Session 事件历史的完整公开 Event 对象,也是客户端应采用的权威结果。
event_start 和 event_delta 是用于增量输出的 stream-only SSE payload,不属于公开 Event 对象,也不会出现在事件 list/history 响应中。它们的 JSON payload 不包含顶层 id 或 processed_at;SSE id: 字段携带正在增量输出的事件 ID,并可用于 Last-Event-ID。
Event start 帧
event_start 帧用于标识已经开始增量输出的公开事件。
| 字段 | 类型 | 说明 |
|---|---|---|
type | string | 固定为 "event_start" |
event | object | 增量事件引用 |
event 对象包含以下字段:
| 字段 | 类型 | 说明 |
|---|---|---|
id | string | 以 evt_ 为前缀的 Event ID;SSE id:、相关 delta 和 buffered 事件使用同一个 ID |
type | string | "agent.message" 或 "agent.thinking" |
agent.message 的 start 之后会输出文本 event_delta。agent.thinking 只有 start,不会输出 delta;如果本轮产生 thinking,则使用相同 ID 的 buffered agent.thinking 事件表示该 thinking 阶段结束。
Event delta 帧
event_delta 帧用于向增量输出的 agent.message 追加文本。
| 字段 | 类型 | 说明 |
|---|---|---|
type | string | 固定为 "event_delta" |
event_id | string | 与对应 event_start.event.id 和 SSE id: 相同的 Event ID |
delta | object | 内容增量 |
delta 对象包含以下字段:
| 字段 | 类型 | 说明 |
|---|---|---|
type | string | 固定为 "content_delta" |
index | integer | 被更新 content block 的从零开始的索引 |
content | object | 文本片段,包含 type: "text" 和字符串字段 text |
Model request span 事件
span.model_request_start 表示一次模型请求开始。
| 字段 | 类型 | 说明 |
|---|---|---|
id | string | 以 evt_ 为前缀的 Event ID |
processed_at | string | RFC 3339 时间戳 |
type | string | 固定为 "span.model_request_start" |
span.model_request_end 表示该模型请求结束,本次调用有 credits 数据时包含 model_usage。model_usage.credits 向下取整,最多保留 2 位小数。
| 字段 | 类型 | 说明 |
|---|---|---|
id | string | 以 evt_ 为前缀的 Event ID |
is_error | boolean | 模型请求是否因错误或取消而结束 |
model_request_start_id | string | 对应 span.model_request_start 事件的 ID |
model_usage | object | 可选。本次模型调用的 usage;credits 数据不可用时省略 |
processed_at | string | RFC 3339 时间戳 |
type | string | 固定为 "span.model_request_end" |
model_usage 只包含:
| 字段 | 类型 | 说明 |
|---|---|---|
credits | number | 本次模型调用消耗的 credits。值可以为 0;向下取整,最多保留 2 位小数 |
Session Thread 对象
Managed-agent 场景下,Session 内的每个线程使用如下结构。
| 字段 | 类型 | 说明 |
|---|---|---|
id | string | sthr_ 前缀的 Thread ID |
type | string | 固定为 "session_thread" |
session_id | string | 所属 Session ID |
parent_thread_id | string | null | 父线程 ID;协调器主线程为 null |
agent | object | 普通线程使用的 Agent 快照,结构同 Session 嵌入 agent,并额外去掉 multiagent 字段;Advisor Thread 使用 {"type":"advisor","model":"..."} |
status | string | 生命周期状态:running、idle、rescheduling 或 terminated |
stats | object | null | 线程统计信息;当前实现返回 null |
archived_at | string | null | 归档时间,未归档时为 null |
created_at | string | 创建时间 |
updated_at | string | 最近更新时间 |
agent_id、agent_version、name、role、stop_reason、created_by_tool_use_id 或 usage。
