页面功能

📎 引用文件

本文引用的文件 - router.tsx - main.tsx - Agent.tsx - RunDetail.tsx - Runtime.tsx - Settings.tsx - agent.ts - useSSE.ts - api.ts

目录

  1. 简介
  2. 项目结构
  3. 核心组件
  4. 架构总览
  5. 详细组件分析
  6. 依赖关系分析
  7. 性能考虑
  8. 故障排查指南
  9. 结论

简介

本文件聚焦 Vibe-Trading 前端应用的页面功能,覆盖研究页面(Agent)、运行详情(RunDetail)、实时监控(Runtime)、设置页面(Settings)等关键页面的实现细节。文档说明路由配置、导航逻辑、数据获取策略、页面间通信与状态同步机制,并重点阐述实时数据更新、流式响应处理与用户体验优化方案。

项目结构

前端采用 React + React Router 的 SPA 架构,通过懒加载拆分页面模块,统一使用 Layout 包裹并提供全局错误边界与通知。路由层集中管理页面挂载与懒加载,主入口负责初始化 i18n、错误边界、路由与全局提示。

graph TB A["main.tsx<br/>应用入口"] --> B["router.tsx<br/>路由配置"] B --> C["Layout<br/>布局容器"] C --> D["Agent<br/>研究会话"] C --> E["RunDetail<br/>运行详情"] C --> F["Runtime<br/>实时监控"] C --> G["Settings<br/>系统设置"] A --> H["ErrorBoundary<br/>全局错误边界"] A --> I["Toaster<br/>全局通知"]

图表来源 - main.tsx:28-35 - router.tsx:48-68

章节来源 - main.tsx:1-36 - router.tsx:1-69

核心组件

章节来源 - Agent.tsx:208-800 - RunDetail.tsx:98-397 - Runtime.tsx:24-181 - Settings.tsx:37-120

架构总览

页面通过统一的 API 层与后端交互,Agent 使用 SSE 进行双向流式通信;其他页面使用 REST 轮询或一次性请求。状态管理集中在 Zustand store(Agent),各页面通过 hooks 订阅最小化重渲染。

sequenceDiagram participant U as "用户" participant P as "页面(如 Agent)" participant R as "路由(router.tsx)" participant S as "Store(agent.ts)" participant A as "API(api.ts)" participant H as "SSE(useSSE.ts)" participant B as "后端" U->>R : 访问 /agent R-->>P : 懒加载并渲染 Agent P->>A : 创建/恢复会话, 获取历史消息 P->>H : connect(sseUrl(sid)) H->>B : 建立 EventSource B-->>H : text_delta/reasoning_delta/tool_* 等事件 H-->>P : 回调分发 P->>S : appendDelta/updateRunningToolCall/upsertSwarmStatus P-->>U : 实时更新消息/进度/状态

图表来源 - router.tsx:48-68 - useSSE.ts:71-134 - api.ts:181-188 - agent.ts:119-165

详细组件分析

研究页面(Agent)

flowchart TD Start(["进入 Agent"]) --> LoadHist["加载历史消息"] LoadHist --> ConnectSSE["建立 SSE 连接"] ConnectSSE --> OnText["接收 text_delta<br/>追加流式文本"] ConnectSSE --> OnReason["接收 reasoning_delta<br/>更新推理尾段"] ConnectSSE --> OnTool["接收 tool_call/progress/result/heartbeat"] OnTool --> UpdateAct["更新 activity 与 toolCalls"] OnText --> Scroll["智能滚动到底部"] OnReason --> Scroll UpdateAct --> Render["渲染活动/进度/卡片"] Render --> Done{"是否完成?"} Done -- 否 --> ConnectSSE Done -- 是 --> Archive["归档活动并清理流式状态"] Archive --> End(["结束"])

图表来源 - Agent.tsx:642-800 - useSSE.ts:71-134 - agent.ts:167-250

章节来源 - Agent.tsx:1-800 - agent.ts:1-336 - useSSE.ts:1-216 - api.ts:123-200

运行详情(RunDetail)

sequenceDiagram participant U as "用户" participant RD as "RunDetail" participant API as "api.getRun" participant CH as "图表组件" U->>RD : 选择标的/点击“全部加载” RD->>API : getRun(id, {chart_symbol}) API-->>RD : 返回 price/indicator/markers RD->>RD : 合并到缓存并更新选中列表 RD->>CH : 传入数据渲染K线/权益曲线 U->>RD : 下载CSV(交易/指标) RD-->>U : 触发下载

图表来源 - RunDetail.tsx:129-176 - RunDetail.tsx:205-286 - api.ts:134-142

章节来源 - RunDetail.tsx:1-397

实时监控(Runtime)

flowchart TD Enter(["进入 Runtime"]) --> Init["初始加载 status"] Init --> Poll["每15s轮询 /live/status"] Poll --> Summarize["计算摘要(券商/授权/运行器)"] Summarize --> Render["渲染概览与券商卡片"] Render --> UserAction{"用户操作?"} UserAction -- 刷新 --> Poll UserAction -- 离开 --> Cleanup["清理定时器/中止请求"]

图表来源 - Runtime.tsx:40-81 - Runtime.tsx:487-496

章节来源 - Runtime.tsx:1-590

设置页面(Settings)

sequenceDiagram participant U as "用户" participant S as "Settings" participant API as "api.*" participant DESK as "vibeDesktop" U->>S : 修改LLM/数据源/通道 S->>API : getLLMSettings/getDataSourceSettings/getChannelStatus API-->>S : 返回配置与状态 U->>S : 提交保存 S->>API : updateLLMSettings/updateDataSourceSettings alt 桌面端 S->>DESK : setCredential(...) DESK-->>S : 成功 S->>DESK : restartBackend() end S-->>U : 成功/失败提示

图表来源 - Settings.tsx:62-120 - Settings.tsx:217-252 - Settings.tsx:254-286

章节来源 - Settings.tsx:1-777

依赖关系分析

graph LR RT["router.tsx"] --> AG["Agent.tsx"] RT --> RD["RunDetail.tsx"] RT --> RTM["Runtime.tsx"] RT --> ST["Settings.tsx"] AG --> STOR["stores/agent.ts"] AG --> SSE["hooks/useSSE.ts"] RD --> API["lib/api.ts"] RTM --> API ST --> API MAIN["main.tsx"] --> RT

图表来源 - router.tsx:48-68 - main.tsx:28-35 - api.ts:123-200 - useSSE.ts:176-214 - agent.ts:119-165

章节来源 - router.tsx:1-69 - main.tsx:1-36 - api.ts:1-200 - useSSE.ts:1-216 - agent.ts:1-336

性能考虑

[本节为通用性能建议,不直接分析具体文件]

故障排查指南

章节来源 - api.ts:60-100 - useSSE.ts:122-174 - Settings.tsx:217-252 - Runtime.tsx:40-81

结论

Vibe-Trading 前端通过清晰的路由与懒加载、统一的 API 层与 SSE 流式通信、以及 Zustand 状态管理,实现了研究、运行详情、实时监控与设置等核心页面的高效交互与稳定体验。Agent 页面以流式事件驱动为核心,结合进度合并与智能滚动提升用户体验;RunDetail 支持按需与批量图表加载;Runtime 提供稳定的轮询监控;Settings 集中管理配置与通道状态。整体架构具备良好的可扩展性与可维护性,适合持续迭代与扩展更多页面与功能。