Skip to content

Web Plan Mode Display Fix #674

@Yumiue

Description

@Yumiue

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_plandisplay_text
  • Gateway 透传 plan_updated,并在 gateway.loadSessionpayload 中增加 current_plan,保证刷新、切会话、恢复 checkpoint 后仍能还原计划卡片。
  • Web 协议类型补齐 PlanArtifact / PlanSpec / SummaryView / PlanUpdatedPayloadEventType 增加 PlanUpdated
  • Web 聊天 store 增加 plan 消息类型与 planDataMessageItem 新增 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。

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions