# 统一运行时流式与多轮产物设计

## 目标

创建 Skill、评测 Skill 和运行 Skill 使用同一套运行时协议、事件流、会话续接和产物管理。无论用户从 AIPROS 网页、本地 Codex/QODER 运行时还是原有应用入口发起请求，都应获得一致的流式输出、多轮对话和可下载产物体验。

平台不伪造“打字效果”，也不等运行时结束后再分块。只要上游产生事件，页面就立即可见。

## 统一数据流

1. 任意入口提交 `mode=create|evaluate|run`、对话消息、Skill/流程文件上下文和已有会话标识。
2. 后端根据 mode 选择对应的智能体与运行时，但对所有运行时输出同一套事件。
3. 运行时适配器边读边解析上游原生事件，即时写入会话事件日志并通过 SSE 转发。
4. 前端按统一事件渲染进度、可见推理摘要、工具、文本和文件。断线后从最后一个 event id 续传。
5. 运行完成后，后端统一登记产物清单。创建模式可将当前结果一键发布；评测和运行模式直接提供对应的报告、文档或其他生成文件。

## 统一事件协议

对外稳定事件为：

- `session`：AIPROS 会话、上游运行时会话、智能体和运行时元数据。
- `status`：连接、排队、调用、恢复、完成等真实状态。
- `reasoning_summary`：上游明确对用户可见的推理摘要、计划或 thinking 摘要；不伪造、不反推隐藏思维链。
- `delta`：用户可见的正文增量。
- `tool_call` / `tool_result`：真实工具动作及结果。
- `artifact`：新增或更新的产物，含名称、类型、大小、预览/下载地址与来源。
- `heartbeat`：运行存活与已用时，不再被前端清空。
- `warning` / `error` / `done`：可恢复告警、终止错误与终态。

所有事件包含递增 `eventId`、AIPROS `sessionId`、时间戳和 mode。适配器可保留 `providerEvent` 作为调试信息，但前端不依赖供应商私有字段。

## 运行时适配

### 本地 Codex

- 默认使用 `codex exec --json`。
- 逐行解析 JSONL，在 stdout 产生时立即转换为统一事件，不再累积整个 stdout 后返回。
- 线程、turn、agent message、工具、文件和错误事件都保留顺序。
- 多轮优先续接 Codex thread；不能续接时才携带完整对话重建上下文。
- 兼容非 JSON 的自定义本地 CLI，其 stdout 作为真实 `delta`、stderr 作为 `warning`流式转发。

### QODER Cloud Agent

- 使用 Cloud Session SSE，保留上游 session id、turn id 和 event id。
- 转发 agent message、运行状态、上游可见推理摘要、工具事件和文件事件，不再只处理最终 `agent.message`。
- 后续用户消息续接同一 Cloud Session，不再每轮新建云会话。
- 使用 event id 做 replay 隔离和断线恢复，避免历史 turn 重复结束当前 turn。

### AgentRun 与原有应用

- 保留 OpenAI 兼容的 token/tool-call 流，映射到同一事件协议。
- 原有应用可直接消费 SSE；如需原始 OpenAI 兼容响应，由边界适配器生成，不改变内部语义。
- 同一 session 可从网页续到本地或原应用，只要传入同一 AIPROS session id 和合法用户身份。

## 多轮追问与发布

- 删除“不要澄清”和“只输出最终结果”的提示。
- 由运行时根据任务信息判断是否追问：信息足够可直接执行，信息不足时输出自然问题。
- 任意模式都保留输入框，用户可续答或追加要求。
- 创建模式不再在每个回合强制插入发布卡。最新已完成结果始终提供“一键创建并立即发布 Skill”，由用户确认当前结果已可用。
- 平台不以固定文件、评分或文本启发式阻断生成。发布边界只校验数据库必需的名称、流程节点和创建人。

## 产物一致性

- 产物不限于 Skill 包；可为评测报告、Markdown、JSON、HTML、Word、PDF、Excel、PPT、图片或运行时生成的其他文件。
- 本地文件、QODER 云文件和 AgentRun 工具产物统一登记为 artifact manifest。
- 任意入口都可列表、预览和下载同一产物；会话恢复后产物仍可用。
- 创建模式发布时优先使用产物文件，只有无文件时才使用运行时文本组装包。

## 前端体验

- 用一个通用的运行时时间线组件渲染 create/evaluate/run，避免三处行为分叉。
- 每秒更新已用时，并始终保留最后一个真实状态；心跳只刷新存活时间，不清空状态。
- 正文 delta 以小于 100ms 的节流刷新 UI，避免每 token 导致 React 过度渲染。
- 推理摘要、工具和产物可折叠，默认展示当前进度和最新动作。
- 用户可在结束后查看完整时间线，也可通过历史会话恢复。

## 错误与性能

- 设置首事件、首文本、完成耗时指标，但不为了“显得快”生成虚假输出。
- 上游长时间无文本时仍显示连接、任务、工具或心跳状态。
- 上游断线时使用最后 event id 重连，只补发缺失事件。
- 会话可恢复错误与终止错误分开呈现；已生成的文本和产物不因错误丢失。
- 流式日志按事件上限与大小上限修剪，产物文件不嵌入 SSE 正文。

## 验收

- 本地 Codex 在进程结束前就出现事件；不得在 close 后再循环伪分块。
- QODER 保留 Cloud Session 并在第二轮使用同一 session id；能显示正文以外的可见状态/工具事件。
- 创建、评测、运行三种 mode 通过同一 SSE 消费器和时间线组件。
- 三种 mode 都能显示、恢复并下载至少一种实际生成产物。
- 第一轮信息不足时运行时可追问，用户续答后继续同一会话；平台不插入质量 harness 或固定澄清表单。
- 真实 Chrome 验收覆盖本地 Codex 和 QODER Cloud Agent，并对 create/evaluate/run 各执行一条有产物的链路。
