澄清策划V2流式事件契约
Project CI / Repository checks (pull_request) Has been cancelled
Project CI / Frontend tests (pull_request) Has been cancelled
Project CI / Backend tests (pull_request) Has been cancelled
Project CI / Native shell tests (pull_request) Has been cancelled

明确 Provider 流式传输属于底层实现能力

明确 text_delta 是 Runtime 内部事件而非前端业务事件

明确用户可见结果以结构化工具调用为准

补充文档措辞约束避免误读
This commit is contained in:
2026-09-05 11:59:47 +00:00
parent d3a7070bb4
commit 267c085b57
2 changed files with 6 additions and 5 deletions
@@ -8092,3 +8092,4 @@ CI 上 `background_agent_runtime_recovers_stale_running_before_pending_task` 在
- Planning V2 不要求把 Provider 的文本 stream delta 逐条投影为用户可见对话。V2 的用户交互是结构化工具调用结果:`plan_ask_question` 渲染澄清选项卡,`plan_submit_gdd` 渲染 GDD 输出和审批卡;中间纯文本不是用户对话内容。
- `planning-session-v2-stream` 若继续存在,只能作为内部状态/兼容事件能力,不构成实时逐 delta 的功能契约;Provider 是否使用流式传输不影响 V2 的业务验收。
- 文档措辞约束:凡出现“流式响应”“流式事件”或 `text_delta`,均须注明其属于 Provider adapter/Runtime 内部实现能力;不得将其描述为前端必须逐条接收的用户可见消息。V2 的唯一用户交互结果是 `plan_ask_question``plan_submit_gdd` 的结构化工具结果,Provider 完成前是否产生多个 delta 不参与验收。
@@ -22,7 +22,7 @@
V2 复用底层能力,但不复用旧策划编排身份:
- 复用 Provider 连接、流式响应、超时/瞬态重试、会话消息持久化、项目路径边界、单项目并发控制和原子文件写入。
- 复用 Provider 连接、Provider 流式传输能力、超时/瞬态重试、会话消息持久化、项目路径边界、单项目并发控制和原子文件写入。这里的“Provider 流式传输能力”只描述底层请求实现,不承诺把每个文本 delta 投影给前端或用户。
- 不经过 Project Supervisor,不创建 `project-planning` 子 Run,不使用 `agent.delegate`、delivery、continuation、Acceptance Graph 或 acceptance evidence。
- 当前只启用 `mode=gdd`、最多展示 8 个有效问题、GDD 审批和用户修改。
- 问询和出稿通过两个协议 function tools`plan_ask_question` / `plan_submit_gdd`)输出,`tool_choice=auto`;Runtime 解析工具参数后归一为 Question/Artifact,不执行工具、不把 `tool_call` 写入会话消息。
@@ -406,11 +406,11 @@ P0 冻结适配器的四个边界对象:
| 对象 | Runtime 可见字段 | 约束 |
| ------------------------------- | -------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------- |
| `PlanningProviderRequestV2` | `sessionId``turnIndex``mode``policyHint``messages``capabilities` | 不携带 Supervisor/child/delegation 身份;具体 API kind、URL 和凭据由 Provider substrate 持有 |
| `PlanningProviderStreamEventV2` | `type=text_delta\|completed\|failed`、可选 `text`/`result`/`error` | Provider 原始协议在 adapter 内归一Runtime 不解析 OpenAI/Anthropic 私有字段 |
| `PlanningProviderStreamEventV2` | `type=text_delta\|completed\|failed`、可选 `text`/`result`/`error` | 仅为 adapter/Runtime 内部的 Provider-neutral 事件;Provider 原始协议在 adapter 内归一Runtime 不解析 OpenAI/Anthropic 私有字段,也不把 `text_delta` 视为前端业务事件 |
| `ContextBuildResultV2` | `messages``estimatedTokens``overflow` | 完整会话记录不等于请求上下文;`overflow=true` 时显式失败,不静默丢历史 |
| `CapabilitySnapshotV2` | `tools``skills` | 稳定排序、去重;当前必须为空,由宿主注入,模型不能修改 |
Provider adapter 只负责“请求、流式事件、稳定错误、用量/耗时”;是否接受 question/GDD、是否计入问题数和是否生成审批由 `PlanningPolicy` 决定。
Provider adapter 只负责“请求、内部流式事件归一、稳定错误、用量/耗时”;是否接受 question/GDD、是否计入问题数和是否生成审批由 `PlanningPolicy` 决定。Adapter 的 `text_delta` 可以被 Runtime 收集、丢弃或作为诊断/兼容状态使用,不构成前端逐 delta 推送义务。
### 5.2 完整会话与请求上下文分离
@@ -650,14 +650,14 @@ hydrate_planning_session_v2
当前 P1 的恢复语义是轻量且显式的:进程退出时若快照仍为 `planning`hydrate 将其投影为 `provider_failed/RECOVERY_REQUIRED`,要求用户重新提交当前意图;不会伪造成功或自动制造 GDD。`clientTurnId` 命中已有成功 assistant 记录时直接等值重放;若只有 error 记录,则沿用原用户意图重试且不重复追加用户消息。
目标:在不包含 GDD 业务规则的情况下,跑通单 Agent 会话、流式响应、持久化和恢复
目标:在不包含 GDD 业务规则的情况下,跑通单 Agent 会话、Provider 调用(兼容流式或普通模式)、持久化和恢复。用户可见的完成标准是结构化工具结果,不是中间文本 delta 的到达频率
任务:
| ID | 任务 | 产出 |
| ---- | ------------------------------------------ | --------------------------------------- |
| P1-1 | 新建 V2 Session 生命周期与单项目并发控制 | `planning_session_v2` Rust 模块 |
| P1-2 | 接入现有 Provider substrate 和流式事件归一 | provider-neutral request/stream adapter |
| P1-2 | 接入现有 Provider substrate 和内部流式事件归一 | provider-neutral request/stream adapter;不产生前端逐 delta 契约 |
| P1-3 | 实现消息 JSONL、回合身份和幂等写入 | `conversation.jsonl` 及 turn identity |
| P1-4 | 实现 ContextBuilder 初版 | 有界历史构建;超限显式失败 |
| P1-5 | 实现 Provider 失败/中断/重启恢复 | Session 不丢消息、不伪造成功 |