From 964d3b6e136fe27fb113eae9eebbdda7e0385b9f Mon Sep 17 00:00:00 2001 From: cillin Date: Sun, 15 Mar 2026 22:42:01 +0800 Subject: [PATCH] Localize agent labels and harden frontend connection status --- .gitignore | 12 +++++++++++- backend/config/constants.py | 24 ++++++++++++------------ env.template | 2 +- frontend/src/App.jsx | 19 +++++++++++++++++-- 4 files changed, 41 insertions(+), 16 deletions(-) diff --git a/.gitignore b/.gitignore index 3fea7b9..af840e7 100644 --- a/.gitignore +++ b/.gitignore @@ -44,9 +44,19 @@ ENV/ # Frontend node_modules +/package.json +/package-lock.json # Outputs outputs/ +/production/ +/smoke_test/ +/smoke_live_mock/ + +# Local tooling state +/.omc/ +/.pydeps/ +/referance/ # Data files backend/data/ret_data/ @@ -60,4 +70,4 @@ backend/data/ret_data/ *.sqlite3 *.ipynb -*.log \ No newline at end of file +*.log diff --git a/backend/config/constants.py b/backend/config/constants.py index 7a85742..72d9007 100644 --- a/backend/config/constants.py +++ b/backend/config/constants.py @@ -5,38 +5,38 @@ # Agent configuration for dashboard display AGENT_CONFIG = { "portfolio_manager": { - "name": "Portfolio Manager", - "role": "Portfolio Manager", + "name": "投资经理", + "role": "投资经理", "avatar": "pm", "is_team_role": True, }, "risk_manager": { - "name": "Risk Manager", - "role": "Risk Manager", + "name": "风控经理", + "role": "风控经理", "avatar": "risk", "is_team_role": True, }, "sentiment_analyst": { - "name": "Sentiment Analyst", - "role": "Sentiment Analyst", + "name": "情绪分析师", + "role": "情绪分析师", "avatar": "sentiment", "is_team_role": False, }, "technical_analyst": { - "name": "Technical Analyst", - "role": "Technical Analyst", + "name": "技术分析师", + "role": "技术分析师", "avatar": "technical", "is_team_role": False, }, "fundamentals_analyst": { - "name": "Fundamentals Analyst", - "role": "Fundamentals Analyst", + "name": "基本面分析师", + "role": "基本面分析师", "avatar": "fundamentals", "is_team_role": False, }, "valuation_analyst": { - "name": "Valuation Analyst", - "role": "Valuation Analyst", + "name": "估值分析师", + "role": "估值分析师", "avatar": "valuation", "is_team_role": False, }, diff --git a/env.template b/env.template index 4b04296..f24f23d 100644 --- a/env.template +++ b/env.template @@ -10,7 +10,7 @@ TICKERS=AAPL,MSFT,GOOGL,NVDA,TSLA,META,AMZN # financial datasets: https://www.financialdatasets.ai/ FIN_DATA_SOURCE = # Preferred source: finnhub / financial_datasets / yfinance / local_csv | 首选数据源 -ENABLED_DATA_SOURCES = # Optional allowlist, comma-separated, e.g. yfinance,finnhub,financial_datasets,local_csv | 可启用数据源列表 +ENABLED_DATA_SOURCES = # Optional allowlist, comma-separated, e.g. financial_datasets,finnhub,yfinance,local_csv | 可启用数据源列表 FINANCIAL_DATASETS_API_KEY= #required | 必填 FINNHUB_API_KEY= #optional | 可选 diff --git a/frontend/src/App.jsx b/frontend/src/App.jsx index a0583c3..046d604 100644 --- a/frontend/src/App.jsx +++ b/frontend/src/App.jsx @@ -217,6 +217,11 @@ export default function LiveTradingApp() { }; const handleEventInternal = (evt) => { + if (evt?.type && evt.type !== 'pong') { + setConnectionStatus('connected'); + setIsConnected(true); + } + // Helper: Update tickers from realtime prices const updateTickersFromPrices = (realtimePrices) => { try { @@ -263,10 +268,16 @@ export default function LiveTradingApp() { // Connection events system: (e) => { console.log('[System]', e.content); - if (e.content.includes('Connected')) { + if ( + e.content.includes('Connected') + || e.content.includes('已连接') + ) { setConnectionStatus('connected'); setIsConnected(true); - } else if (e.content.includes('Disconnected')) { + } else if ( + e.content.includes('Disconnected') + || e.content.includes('断开') + ) { setConnectionStatus('disconnected'); setIsConnected(false); } @@ -284,6 +295,8 @@ export default function LiveTradingApp() { const state = e.state; if (!state) return; + setConnectionStatus('connected'); + setIsConnected(true); setSystemStatus(state.status || 'initializing'); setCurrentDate(state.current_date); @@ -385,6 +398,8 @@ export default function LiveTradingApp() { return; } + setConnectionStatus('connected'); + setIsConnected(true); console.log(`[Price Update] ${symbol}: $${price} (ret: ${ret !== undefined ? ret.toFixed(2) : 'N/A'}%)`); // Update ticker price with animation