Current
web端计划内容不显示或显示异常,无法让用户指导计划内容
Summary
修复 web 端 Plan 模式计划内容显示链路:后端保留现有 CurrentPlan 持久化能力,新增结构化计划事件/会话字段;前端不再把 plan JSON 当普通 assistant 文本展示,而是用专门的计划卡片展示 goal / steps / constraints / open_questions。
Key Changes
- Runtime 在成功解析
plan_spec + summary_candidate 并更新 session.CurrentPlan 后,额外发出 plan_updated runtime event,payload 包含 current_plan 和 display_text。
- Gateway 透传
plan_updated,并在 gateway.loadSession 的 payload 中增加 current_plan,保证刷新、切会话、恢复 checkpoint 后仍能还原计划卡片。
- Web 协议类型补齐
PlanArtifact / PlanSpec / SummaryView / PlanUpdatedPayload,EventType 增加 PlanUpdated。
- Web 聊天 store 增加
plan 消息类型与 planData,MessageItem 新增 PlanMessage 卡片组件。
- Web
eventBridge 处理:
- Plan 模式下缓存/抑制原始
agent_chunk JSON,避免流式阶段露出结构化 JSON。
- 收到
plan_updated 后插入或更新本轮计划卡片。
- 收到同一 run 的
agent_done 时不再生成重复普通 Markdown;若没有 plan_updated,保持普通回答显示。
- 修正当前
agent_done 在没有 streamingMessageId 时不会创建消息的问题,覆盖非流式 provider。
- 会话历史加载时优先用
current_plan 还原计划卡片;历史 assistant 文本仍保留普通消息映射,但避免重复展示同一个最新计划。
Public Interfaces
gateway.Session 新增:
current_plan?: PlanArtifact
- Runtime/Gateway event 新增:
runtime_event_type: "plan_updated"
- payload:
{ current_plan: PlanArtifact, display_text?: string }
- Web
ChatMessage.type 新增:
"plan",并携带 planData: PlanArtifact
Test Plan
- Go:
internal/runtime:验证 Plan 模式成功解析后同时持久化 CurrentPlan 并发出 plan_updated。
internal/cli / internal/gateway:验证 loadSession 返回 current_plan,事件透传字段稳定。
- 回归现有 Plan 模式测试,确保 build 模式不会误发计划事件。
- Web:
eventBridge:覆盖 plan chunk 被抑制、plan_updated 插入卡片、agent_done 不重复、非流式 agent_done 自动创建消息。
useSessionStore:覆盖加载带 current_plan 的历史会话会恢复计划卡片。
MessageItem:覆盖计划卡片渲染目标、步骤、约束、未决问题。
- Manual:
- 浏览器端切到 Plan,发起一次计划请求,确认流式阶段不显示 JSON,结束后显示计划卡片。
- 刷新页面/切换会话后计划卡片仍存在。
- Build 模式普通回答、工具调用、acceptance 卡片不受影响。
Assumptions
- 计划卡片只展示最新
CurrentPlan,不做多版本历史卡片。
- 计划批准/审批按钮不在本次修复内,因为当前 gateway 尚未暴露 approve plan 控制面 API。
plan_spec.todos 继续按现有规则作为 legacy 数据展示来源,不创建执行态 todos。
Current
web端计划内容不显示或显示异常,无法让用户指导计划内容
Summary
修复 web 端 Plan 模式计划内容显示链路:后端保留现有
CurrentPlan持久化能力,新增结构化计划事件/会话字段;前端不再把 plan JSON 当普通 assistant 文本展示,而是用专门的计划卡片展示goal / steps / constraints / open_questions。Key Changes
plan_spec + summary_candidate并更新session.CurrentPlan后,额外发出plan_updatedruntime event,payload 包含current_plan和display_text。plan_updated,并在gateway.loadSession的payload中增加current_plan,保证刷新、切会话、恢复 checkpoint 后仍能还原计划卡片。PlanArtifact / PlanSpec / SummaryView / PlanUpdatedPayload,EventType增加PlanUpdated。plan消息类型与planData,MessageItem新增PlanMessage卡片组件。eventBridge处理:agent_chunkJSON,避免流式阶段露出结构化 JSON。plan_updated后插入或更新本轮计划卡片。agent_done时不再生成重复普通 Markdown;若没有plan_updated,保持普通回答显示。agent_done在没有streamingMessageId时不会创建消息的问题,覆盖非流式 provider。current_plan还原计划卡片;历史 assistant 文本仍保留普通消息映射,但避免重复展示同一个最新计划。Public Interfaces
gateway.Session新增:current_plan?: PlanArtifactruntime_event_type: "plan_updated"{ current_plan: PlanArtifact, display_text?: string }ChatMessage.type新增:"plan",并携带planData: PlanArtifactTest Plan
internal/runtime:验证 Plan 模式成功解析后同时持久化CurrentPlan并发出plan_updated。internal/cli/internal/gateway:验证loadSession返回current_plan,事件透传字段稳定。eventBridge:覆盖 plan chunk 被抑制、plan_updated插入卡片、agent_done不重复、非流式agent_done自动创建消息。useSessionStore:覆盖加载带current_plan的历史会话会恢复计划卡片。MessageItem:覆盖计划卡片渲染目标、步骤、约束、未决问题。Assumptions
CurrentPlan,不做多版本历史卡片。plan_spec.todos继续按现有规则作为 legacy 数据展示来源,不创建执行态 todos。