实时监控页面(Runtime)

📎 引用文件

本文引用的文件 - frontend/src/pages/Runtime.tsx - frontend/src/lib/api.ts - agent/src/live/runtime/runner.py - agent/src/live/runtime/liveness.py - agent/src/live/order_guard.py - agent/src/live/enforcement.py - agent/src/live/runtime/reconcile.py - agent/src/live/audit.py

目录

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

简介

本文件为 Vibe-Trading 的“实时监控页面(Runtime)”提供系统化文档,覆盖实盘交易监控能力:持仓与订单状态、实时盈亏与风险指标、风险控制警报、数据更新机制、连接管理、事件处理流程、异常处理、告警通知、性能优化、数据同步策略、用户体验优化,以及与交易连接器集成、安全控制、审计日志记录。同时给出操作指南、故障诊断方法与最佳实践建议。

项目结构

前端通过轮询后端 /live/status 获取运行时状态,渲染全局停机、授权账户、运行器存活等概览卡片,并按经纪商维度展示授权、指令(mandate)、风险状态、SDK 连接器诊断等信息。后端由持久化 Runner 驱动,按 tick 执行“停机检查 → 指令过期检查 → 对账 → 自主决策 → 审计”的固定顺序,并通过心跳文件维持可观测性;订单前置拦截在 order_guard 中完成,强制遵循指令限制;reconcile 负责崩溃恢复与状态对齐;audit 模块将关键动作写入不可变审计账本并可选地推送到 SSE 事件总线。

graph TB UI["前端 Runtime 页面"] --> API["HTTP 接口 /live/status"] API --> Runner["LiveRunner(定时tick)"] Runner --> Reconcile["Reconcile(对账)"] Runner --> Guard["OrderGuard(前置拦截)"] Guard --> Broker["交易连接器(读/写)"] Runner --> Liveness["心跳文件(heartbeats)"] Guard --> Audit["审计账本(audit.jsonl)"] Runner --> Audit

图表来源 - frontend/src/pages/Runtime.tsx:40-81 - frontend/src/lib/api.ts:273-295 - agent/src/live/runtime/runner.py:407-441 - agent/src/live/runtime/liveness.py:79-100 - agent/src/live/order_guard.py:130-214 - agent/src/live/audit.py:248-351

章节来源 - frontend/src/pages/Runtime.tsx:24-181 - frontend/src/lib/api.ts:273-295

核心组件

章节来源 - frontend/src/pages/Runtime.tsx:40-181 - agent/src/live/runtime/runner.py:288-441 - agent/src/live/order_guard.py:97-214 - agent/src/live/enforcement.py:455-617 - agent/src/live/runtime/reconcile.py:275-366 - agent/src/live/runtime/liveness.py:79-150 - agent/src/live/audit.py:172-351

架构总览

下图展示了从前端到后端的完整调用链与数据流:前端轮询获取状态,后端 Runner 周期性执行,结合 Reconcile 保证一致性,OrderGuard 确保合规,Audit 记录全链路事件,Liveness 提供存活信号。

sequenceDiagram participant FE as "前端Runtime" participant API as "后端API" participant R as "LiveRunner" participant RC as "Reconcile" participant G as "OrderGuard" participant B as "交易连接器" participant A as "审计(Audit)" participant H as "心跳(Liveness)" FE->>API : GET /live/status API-->>FE : 全局状态+各经纪商详情 Note over FE,API : 每15秒轮询一次 loop 每个tick R->>H : 写入心跳 R->>R : 检查停机标志 R->>R : 加载指令并检查过期 R->>RC : 读取持仓/余额/挂单并对账 alt 对账不安全 R-->>FE : 显示风险/停机 else 安全 R->>G : 前置拦截(指令/限额/杠杆/日频/资金) G->>B : 允许时转发下单 G->>A : 记录审计(成功/失败) R->>A : 记录审计(tick结果) end end

图表来源 - frontend/src/pages/Runtime.tsx:40-81 - frontend/src/lib/api.ts:273-295 - agent/src/live/runtime/runner.py:407-441 - agent/src/live/runtime/reconcile.py:275-366 - agent/src/live/order_guard.py:130-214 - agent/src/live/audit.py:248-351 - agent/src/live/runtime/liveness.py:79-100

详细组件分析

前端 Runtime 页面

flowchart TD Start(["页面挂载"]) --> Load["发起GET /live/status"] Load --> Ok{"响应成功?"} Ok -- 否 --> Err["设置错误并展示提示"] Ok -- 是 --> Render["渲染概览与经纪商卡片"] Render --> Timer["启动15s轮询定时器"] Timer --> Load Err --> Timer

图表来源 - frontend/src/pages/Runtime.tsx:40-81 - frontend/src/pages/Runtime.tsx:132-177 - frontend/src/pages/Runtime.tsx:225-297 - frontend/src/pages/Runtime.tsx:299-374

章节来源 - frontend/src/pages/Runtime.tsx:24-181 - frontend/src/pages/Runtime.tsx:183-590 - frontend/src/lib/api.ts:273-295

LiveRunner(持久化交易循环)

flowchart TD T0(["进入run_once"]) --> HB["写入心跳"] HB --> Halt{"是否停机?"} Halt -- 是 --> Sweep["预占式清仓(最多一次)"] --> A1["审计halt_tripped"] --> End Halt -- 否 --> Mandate["加载指令并检查过期"] Mandate --> |无或过期| A2["审计并返回no_mandate/expired"] --> End Mandate --> |有效| Rec["对账(read positions/balance/orders)"] Rec --> |不安全| A3["审计breach并返回reconcile_unsafe/error"] --> End Rec --> |安全| Invoke["构造prompt并调用Agent"] Invoke --> A4["审计order_placed或error"] --> End(["结束"])

图表来源 - agent/src/live/runtime/runner.py:407-441 - agent/src/live/runtime/runner.py:528-595 - agent/src/live/runtime/runner.py:675-798

章节来源 - agent/src/live/runtime/runner.py:288-441 - agent/src/live/runtime/runner.py:528-636 - agent/src/live/runtime/runner.py:675-798

OrderGuard(订单前置拦截)

flowchart TD S(["execute()"]) --> M["加载指令"] M --> Exp{"过期?"} Exp -- 是 --> D1["拒绝并重授权提示"] Exp -- 否 --> H{"停机?"} H -- 是 --> D2["拒绝"] H -- 否 --> P["解析意图并归一化notional"] P --> Q{"可定价?"} Q -- 否 --> D3["拒绝(无法定价)"] Q -- 是 --> C["读取持仓/余额"] C --> Check["check_mandate(限额/暴露/杠杆/日频/资金)"] Check --> |通过| Allow["转发下单并审计"] Check --> |违反| Deny["拒绝或暂停重授权并审计"]

图表来源 - agent/src/live/order_guard.py:130-214 - agent/src/live/order_guard.py:216-317 - agent/src/live/order_guard.py:321-389

章节来源 - agent/src/live/order_guard.py:97-214 - agent/src/live/order_guard.py:216-389

Enforcement(指令校验)

章节来源 - agent/src/live/enforcement.py:455-617 - agent/src/live/enforcement.py:620-798

Reconcile(崩溃恢复与对账)

章节来源 - agent/src/live/runtime/reconcile.py:275-366 - agent/src/live/runtime/reconcile.py:369-529 - agent/src/live/runtime/reconcile.py:532-609

Liveness(心跳与存活判定)

章节来源 - agent/src/live/runtime/liveness.py:79-150 - agent/src/live/runtime/liveness.py:153-191

Audit(审计账本)

章节来源 - agent/src/live/audit.py:172-351

依赖关系分析

graph LR FE["前端Runtime"] --> API["/live/status"] API --> R["LiveRunner"] R --> RC["Reconcile"] R --> LG["Liveness"] R --> AU["Audit"] R --> OG["OrderGuard"] OG --> ENF["Enforcement"] OG --> BR["Broker(读/写)"] OG --> AU

图表来源 - frontend/src/lib/api.ts:273-295 - agent/src/live/runtime/runner.py:288-441 - agent/src/live/order_guard.py:97-214 - agent/src/live/enforcement.py:455-617 - agent/src/live/runtime/reconcile.py:275-366 - agent/src/live/runtime/liveness.py:79-150 - agent/src/live/audit.py:248-351

性能考虑

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

故障诊断指南

章节来源 - frontend/src/pages/Runtime.tsx:121-130 - frontend/src/pages/Runtime.tsx:299-374 - agent/src/live/runtime/reconcile.py:275-366 - agent/src/live/runtime/liveness.py:127-191 - agent/src/live/audit.py:248-351

结论

实时监控页面通过稳定的轮询机制与清晰的状态分层,提供了对实盘交易的全局可视性。后端以 Runner 为核心,结合 Reconcile、OrderGuard、Enforcement、Liveness 与 Audit 构建了强一致、强安全、可审计的交易闭环。建议在生产环境中合理配置指令限额、启用审计链式副本、关注心跳与对账报告,并结合前端告警与操作指引快速定位问题。

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

附录

实时数据更新机制与事件处理

章节来源 - frontend/src/pages/Runtime.tsx:40-81 - agent/src/live/runtime/runner.py:528-543 - agent/src/live/audit.py:248-351

交易执行状态监控与异常处理

章节来源 - agent/src/live/runtime/runner.py:407-441 - agent/src/live/order_guard.py:321-389 - agent/src/live/runtime/liveness.py:127-150 - frontend/src/pages/Runtime.tsx:299-374

与交易连接器的集成方式与安全控制

章节来源 - agent/src/live/order_guard.py:216-317 - agent/src/live/enforcement.py:455-617 - agent/src/live/runtime/reconcile.py:275-366

操作指南与最佳实践

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