ContestTrade显示管理器
| 64 | |
| 65 | return agent_status |
| 66 | class ContestTradeDisplay: |
| 67 | """ContestTrade显示管理器""" |
| 68 | |
| 69 | def __init__(self): |
| 70 | self.market_type = os.environ.get('CONTEST_TRADE_MARKET', 'CN-Stock') |
| 71 | self.messages = deque(maxlen=200) # 增加消息队列容量 |
| 72 | self.agent_status = _get_agent_config() |
| 73 | self.current_task = get_text("初始化系统...", "Initializing system...") |
| 74 | self.progress_info = "" |
| 75 | self.final_state = None |
| 76 | self.analysis_completed = False |
| 77 | self.step_counts = {"data": 0, "research": 0, "contest": 0, "finalize": 0} |
| 78 | self._last_update_hash = None # 用于检测内容是否真正发生变化 |
| 79 | self._last_console_size = None # 用于检测控制台大小变化 |
| 80 | |
| 81 | # 日志监控相关 - Import PROJECT_ROOT when needed |
| 82 | from contest_trade.config.config import PROJECT_ROOT |
| 83 | self.logs_dir = Path(PROJECT_ROOT) / "agents_workspace" / "logs" |
| 84 | self.logs_dir.mkdir(parents=True, exist_ok=True) |
| 85 | |
| 86 | def create_log_file(self, trigger_time: str): |
| 87 | """创建本次运行的日志文件""" |
| 88 | timestamp = trigger_time.replace(":", "-").replace(" ", "_") |
| 89 | self.log_file = self.logs_dir / f"run_{timestamp}.log" |
| 90 | with open(self.log_file, "w", encoding="utf-8") as f: |
| 91 | f.write(f"ContestTrade Run Log - {trigger_time}\n") |
| 92 | f.write("=" * 50 + "\n") |
| 93 | |
| 94 | def check_agent_status_from_events_and_files(self, trigger_time: str): |
| 95 | """基于事件和文件系统更新agent状态""" |
| 96 | # Import PROJECT_ROOT when needed |
| 97 | from contest_trade.config.config import PROJECT_ROOT |
| 98 | |
| 99 | # 格式化时间戳用于文件匹配 |
| 100 | timestamp_str = trigger_time.replace("-", "-").replace(":", "-").replace(" ", "_") |
| 101 | |
| 102 | # 检查factors目录(Data Analysis Agent结果) |
| 103 | factors_dir = Path(PROJECT_ROOT) / "agents_workspace" / "factors" |
| 104 | if factors_dir.exists(): |
| 105 | for agent_name in self.agent_status: |
| 106 | if not agent_name.startswith("agent_"): # Data agents |
| 107 | agent_dir = factors_dir / agent_name |
| 108 | if agent_dir.exists(): |
| 109 | # 查找对应时间戳的文件 |
| 110 | pattern = f"{timestamp_str}*.json" |
| 111 | files = list(agent_dir.glob(pattern)) |
| 112 | if files and self.agent_status[agent_name] != "completed": |
| 113 | self.update_agent_status(agent_name, "completed") |
| 114 | self.add_message(get_text("Data Analysis Agent", "Data Analysis Agent"), get_text(f"✅ {agent_name} 完成数据分析", f"✅ {agent_name} completed data analysis")) |
| 115 | |
| 116 | # 检查reports目录(Research Agent结果) |
| 117 | reports_dir = Path(PROJECT_ROOT) / "agents_workspace" / "reports" |
| 118 | if reports_dir.exists(): |
| 119 | for agent_name in self.agent_status: |
| 120 | if agent_name.startswith("agent_"): # Research agents |
| 121 | agent_dir = reports_dir / agent_name |
| 122 | if agent_dir.exists(): |
| 123 | # 查找对应时间戳的文件 |
no outgoing calls
no test coverage detected