import React, { Suspense, lazy, useEffect, useMemo, useRef, useState, useCallback } from "react"; // Configuration and constants import { AGENTS, INITIAL_TICKERS } from './config/constants'; // Services import { ReadOnlyClient } from './services/websocket'; // Hooks import { useFeedProcessor } from './hooks/useFeedProcessor'; // Styles import GlobalStyles from './styles/GlobalStyles'; // Components import NetValueChart from './components/NetValueChart'; import StockLogo from './components/StockLogo'; import Header from './components/Header.jsx'; import WatchlistPanel from './components/WatchlistPanel.jsx'; import RuntimeSettingsPanel from './components/RuntimeSettingsPanel.jsx'; // Utils import { formatNumber, formatTickerPrice } from './utils/formatters'; const RoomView = lazy(() => import('./components/RoomView')); const AgentFeed = lazy(() => import('./components/AgentFeed')); const StatisticsView = lazy(() => import('./components/StatisticsView')); const StockExplainView = lazy(() => import('./components/StockExplainView.jsx')); const TraderView = lazy(() => import('./components/TraderView.jsx')); const EDITABLE_AGENT_WORKSPACE_FILES = ['SOUL.md', 'PROFILE.md', 'AGENTS.md', 'MEMORY.md', 'POLICY.md', 'HEARTBEAT.md', 'ROLE.md', 'STYLE.md']; function ViewLoadingFallback({ label = '加载中...' }) { return (