消息展示组件

📎 引用文件

本文引用的文件 - MessageBubble.tsx - AgentAvatar.tsx - RunCompleteCard.tsx - MetricsCard.tsx - markdown.ts - MessageBubble.test.tsx - AgentAvatar.test.tsx

目录

  1. 简介
  2. 项目结构
  3. 核心组件
  4. 架构总览
  5. 详细组件分析
  6. 依赖关系分析
  7. 性能考量
  8. 故障排查指南
  9. 结论
  10. 附录:使用示例与扩展方法

简介

本文件面向 Vibe-Trading 前端的消息展示子系统,聚焦以下三个关键组件: - MessageBubble:统一的消息气泡容器,负责区分用户消息、AI 回答、错误消息与运行完成消息,并渲染富文本、代码高亮、数学公式与 Markdown。 - AgentAvatar:统一的 AI 头像占位,基于品牌标识进行样式化显示。 - RunCompleteCard:回测运行完成后的摘要卡片,展示关键指标、收益曲线缩略图以及报告入口(含 Pine Script 查看)。

文档将深入说明各组件的职责边界、数据流、渲染策略、错误处理与用户体验优化点,并提供可操作的扩展建议。

项目结构

消息展示相关的前端代码位于 frontend/src/components/chat 目录下,配合 lib/markdown.ts 的数学公式归一化工具,形成“内容预处理 → Markdown 渲染 → 业务卡片”的分层结构。

graph TB A["MessageBubble.tsx"] --> B["AgentAvatar.tsx"] A --> C["RunCompleteCard.tsx"] A --> D["MarkdownContent(内联)"] D --> E["react-markdown + remark/rehype 插件"] D --> F["markdown.ts<br/>数学分隔符归一化"] C --> G["MetricsCard.tsx"] C --> H["MiniEquityChart(懒加载)"]

图表来源 - MessageBubble.tsx:1-289 - AgentAvatar.tsx:1-10 - RunCompleteCard.tsx:1-141 - markdown.ts:1-24

章节来源 - MessageBubble.tsx:1-289 - RunCompleteCard.tsx:1-141 - markdown.ts:1-24

核心组件

章节来源 - MessageBubble.tsx:174-289 - AgentAvatar.tsx:1-10 - RunCompleteCard.tsx:21-141

架构总览

消息从上层状态进入 MessageBubble,按类型分发到不同渲染路径;答案类消息经 markdown.ts 预处理后交由 react-markdown 渲染;运行完成消息由 RunCompleteCard 聚合指标与可视化;错误消息提供可操作的重试入口。

sequenceDiagram participant UI as "聊天界面" participant MB as "MessageBubble" participant MD as "MarkdownContent" participant RC as "RunCompleteCard" participant API as "后端API" UI->>MB : 传入 StoredAgentMessage alt type === "user" MB-->>UI : 渲染用户气泡+元信息标签 else type === "answer" MB->>MD : 渲染 Markdown(含GFM/数学/高亮) MD-->>UI : 富文本输出 else type === "run_complete" MB->>RC : 传入 runId/metrics/shadowId RC->>API : 获取 equity_curve / Pine Script API-->>RC : 返回数据 RC-->>UI : 指标卡+曲线+报告入口 else type === "error" MB-->>UI : 错误样式+重试提示+重试按钮 end

图表来源 - MessageBubble.tsx:187-289 - RunCompleteCard.tsx:35-86

详细组件分析

MessageBubble:消息路由与富文本渲染

flowchart TD Start(["进入 MessageBubble"]) --> Type{"msg.type"} Type --> |user| User["渲染用户气泡<br/>显示附件/模式标签"] Type --> |answer| Answer["MarkdownContent<br/>归一化数学分隔符<br/>渲染GFM/高亮/公式"] Type --> |run_complete| Run["渲染 RunCompleteCard"] Type --> |error| Err["渲染错误卡片<br/>生成重试提示<br/>可选 onRetry"] Type --> |其他| Fallback["兜底显示内容或空"] Answer --> End(["结束"]) User --> End Run --> End Err --> End Fallback --> End

图表来源 - MessageBubble.tsx:187-289 - markdown.ts:10-23

章节来源 - MessageBubble.tsx:17-104 - MessageBubble.tsx:106-172 - MessageBubble.tsx:174-289 - markdown.ts:1-24

AgentAvatar:头像样式与语义

章节来源 - AgentAvatar.tsx:1-10 - AgentAvatar.test.tsx:1-16

RunCompleteCard:回测结果摘要与关键指标

sequenceDiagram participant RC as "RunCompleteCard" participant API as "后端API" participant Chart as "MiniEquityChart" participant View as "PineScriptViewer" RC->>API : 获取 equity_curve (如缺失) API-->>RC : 返回曲线数据 RC->>Chart : 渲染缩略图(懒加载) RC->>API : 检查/获取 Pine Script API-->>RC : 返回内容(可能为空) RC->>View : 点击后展示脚本(可选)

图表来源 - RunCompleteCard.tsx:21-141 - MetricsCard.tsx:1-65

章节来源 - RunCompleteCard.tsx:21-141 - MetricsCard.tsx:1-65

依赖关系分析

graph LR MB["MessageBubble.tsx"] --> MD["react-markdown + plugins"] MB --> MK["markdown.ts"] MB --> AV["AgentAvatar.tsx"] MB --> RC["RunCompleteCard.tsx"] RC --> MC["MetricsCard.tsx"] RC --> CH["MiniEquityChart(懒加载)"] RC --> PS["PineScriptViewer"] RC --> API["api 模块"]

图表来源 - MessageBubble.tsx:1-289 - RunCompleteCard.tsx:1-141 - markdown.ts:1-24

章节来源 - MessageBubble.test.tsx:1-184 - AgentAvatar.test.tsx:1-16

性能考量

[本节为通用性能指导,无需特定文件引用]

故障排查指南

章节来源 - MessageBubble.tsx:49-68 - MessageBubble.tsx:106-143 - MessageBubble.tsx:249-275 - RunCompleteCard.tsx:35-86

结论

MessageBubble、AgentAvatar 与 RunCompleteCard 共同构成了 Vibe-Trading 的消息展示核心。MessageBubble 通过类型路由与富文本能力,统一承载多形态消息;AgentAvatar 提供一致的品牌化视觉锚点;RunCompleteCard 将回测结果以指标、曲线与报告入口的形式直观呈现。结合错误边界、懒加载与本地化提示,系统在可用性、性能与可维护性之间取得良好平衡。

[本节为总结性内容,无需特定文件引用]

附录:使用示例与扩展方法

章节来源 - MessageBubble.test.tsx:22-30 - MessageBubble.test.tsx:124-162 - AgentAvatar.tsx:1-10 - MessageBubble.tsx:19-23 - MessageBubble.tsx:163-172 - RunCompleteCard.tsx:88-139