专用功能组件

📎 引用文件

本文引用的文件 - GoalPanel.tsx - MandateProposalCard.tsx - PineScriptViewer.tsx - Agent.tsx - api.ts - models.py - store.py - _legacy.py

目录

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

简介

本章节聚焦 Vibe-Trading 的三项专用前端能力:目标面板(GoalPanel)、授权提案卡片(MandateProposalCard)与 Pine 脚本查看器(PineScriptViewer)。文档从业务逻辑、数据模型、用户交互、错误处理与扩展点五个维度,系统阐述其设计思路与实现要点,并提供可操作的扩展与集成示例。

项目结构

graph TB subgraph "前端" A["Agent.tsx"] --> B["GoalPanel.tsx"] A --> C["MandateProposalCard.tsx"] A --> D["PineScriptViewer.tsx"] B --> E["api.ts"] C --> E end subgraph "后端" F["goal/models.py"] G["goal/store.py"] H["cli/_legacy.py"] end E --> F E --> G H -.-> D

图表来源 - Agent.tsx:1755-1795 - GoalPanel.tsx:1-286 - MandateProposalCard.tsx:1-386 - PineScriptViewer.tsx:1-111 - api.ts:678-743 - models.py:1-162 - store.py:103-200 - _legacy.py:2424-2435

章节来源 - Agent.tsx:1755-1795 - api.ts:678-743

核心组件

章节来源 - GoalPanel.tsx:1-286 - MandateProposalCard.tsx:1-386 - PineScriptViewer.tsx:1-111

架构总览

sequenceDiagram participant U as "用户" participant P as "Agent.tsx" participant GP as "GoalPanel.tsx" participant API as "api.ts" participant S as "后端(会话/SSE)" U->>P : 打开会话 P->>S : 订阅 goal.updated / mandate.* 事件 S-->>P : goal.updated(snapshot) P->>GP : 传入 snapshot 渲染 U->>GP : 编辑/继续/取消 GP->>API : updateGoal/updateGoalStatus API-->>GP : 返回新快照/提示 P->>S : 接收 mandate.proposal S-->>P : 渲染 MandateProposalCard U->>P : 选择并确认授权 P->>API : commitMandate API-->>P : 成功/失败 S-->>P : mandate.committed (折叠卡片)

图表来源 - Agent.tsx:1060-1103 - GoalPanel.tsx:79-116 - MandateProposalCard.tsx:203-229 - api.ts:976-1029

详细组件分析

GoalPanel 目标面板

flowchart TD Start(["进入 GoalPanel"]) --> ShowSummary["显示目标摘要与进度"] ShowSummary --> Toggle{"展开详情?"} Toggle -- 否 --> End(["保持折叠"]) Toggle -- 是 --> EditMode{"是否编辑模式?"} EditMode -- 否 --> CriteriaList["列出标准项与证据"] CriteriaList --> Actions{"继续/编辑/取消"} Actions --> Continue["继续推进(触发后端)"] Actions --> Edit["进入编辑模式"] Actions --> Cancel["取消目标(触发后端)"] EditMode -- 是 --> SaveEdit["保存编辑(校验+更新)"] SaveEdit --> CriteriaList Continue --> End Cancel --> End

图表来源 - GoalPanel.tsx:19-50 - GoalPanel.tsx:79-116 - GoalPanel.tsx:208-280

章节来源 - GoalPanel.tsx:1-286 - models.py:10-34 - store.py:286-379

MandateProposalCard 授权提案卡片

sequenceDiagram participant U as "用户" participant M as "MandateProposalCard.tsx" participant A as "api.ts" participant S as "SSE" S-->>M : mandate.proposal(profiles...) U->>M : 点击“确认” M->>A : commitMandate({broker, proposal_id, selected_ordinal}) A-->>M : 成功/失败 S-->>M : mandate.committed(selected_ordinal,...) M-->>U : 折叠为活跃授权徽章

图表来源 - MandateProposalCard.tsx:203-229 - api.ts:976-1029 - Agent.tsx:1080-1103

章节来源 - MandateProposalCard.tsx:1-386 - api.ts:976-1029

PineScriptViewer Pine 脚本查看器

flowchart TD Open["打开查看器"] --> Render["渲染代码块"] Render --> UserAction{"用户操作"} UserAction --> Copy["复制代码"] UserAction --> Docs["打开文档链接"] UserAction --> Close["Esc/点击关闭"] Copy --> Feedback["显示“已复制”反馈"] Docs --> Open Close --> Open

图表来源 - PineScriptViewer.tsx:16-47 - PineScriptViewer.tsx:49-110 - _legacy.py:2424-2435

章节来源 - PineScriptViewer.tsx:1-111 - _legacy.py:2424-2435

依赖关系分析

classDiagram class GoalRecord { +goal_id +session_id +status +objective +risk_tier +tokens_used +turns_used } class EvidenceRecord { +evidence_id +criterion_id +verification_status +confidence } class GoalStore { +replace_goal() +update_status() +account_usage() } GoalStore --> GoalRecord : "读写" GoalStore --> EvidenceRecord : "追加证据"

图表来源 - models.py:40-162 - store.py:103-200

章节来源 - models.py:1-162 - store.py:103-200

性能考虑

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

故障排查指南

章节来源 - GoalPanel.tsx:79-116 - MandateProposalCard.tsx:203-229 - _legacy.py:2424-2435

结论

GoalPanel、MandateProposalCard 与 PineScriptViewer 分别覆盖了研究目标管理、交易授权与策略脚本查看三大关键场景。它们在前端以清晰的交互与稳健的状态管理实现,在后端依托明确的数据模型与持久化保障,形成端到端的闭环。建议在后续迭代中增强 Pine 脚本的语法高亮与更多可视化指标,同时完善错误提示与可观测性。

[本节为总结性内容,不直接分析具体文件]

附录

[本节为概念性扩展建议,不直接分析具体文件]