From b75940e90125ab87d8a20d822071542117712caf Mon Sep 17 00:00:00 2001 From: Yijia Xiao Date: Mon, 2 Feb 2026 04:53:03 +0000 Subject: [PATCH] feat: add announcements panel fetching from api.tauric.ai/v1/announcements --- cli/announcements.py | 51 ++++++++++++++++++++++++++++++++++++++++++++ cli/config.py | 6 ++++++ cli/main.py | 8 ++++++- 3 files changed, 64 insertions(+), 1 deletion(-) create mode 100644 cli/announcements.py create mode 100644 cli/config.py diff --git a/cli/announcements.py b/cli/announcements.py new file mode 100644 index 00000000..5947cee5 --- /dev/null +++ b/cli/announcements.py @@ -0,0 +1,51 @@ +import getpass +import requests +from rich.console import Console +from rich.panel import Panel + +from cli.config import CLI_CONFIG + + +def fetch_announcements(url: str = None, timeout: float = None) -> dict: + """Fetch announcements from endpoint. Returns dict with announcements and settings.""" + endpoint = url or CLI_CONFIG["announcements_url"] + timeout = timeout or CLI_CONFIG["announcements_timeout"] + fallback = CLI_CONFIG["announcements_fallback"] + + try: + response = requests.get(endpoint, timeout=timeout) + response.raise_for_status() + data = response.json() + return { + "announcements": data.get("announcements", [fallback]), + "require_attention": data.get("require_attention", False), + } + except Exception: + return { + "announcements": [fallback], + "require_attention": False, + } + + +def display_announcements(console: Console, data: dict) -> None: + """Display announcements panel. Prompts for Enter if require_attention is True.""" + announcements = data.get("announcements", []) + require_attention = data.get("require_attention", False) + + if not announcements: + return + + content = "\n".join(announcements) + + panel = Panel( + content, + border_style="cyan", + padding=(1, 2), + title="Announcements", + ) + console.print(panel) + + if require_attention: + getpass.getpass("Press Enter to continue...") + else: + console.print() diff --git a/cli/config.py b/cli/config.py new file mode 100644 index 00000000..08483f42 --- /dev/null +++ b/cli/config.py @@ -0,0 +1,6 @@ +CLI_CONFIG = { + # Announcements + "announcements_url": "https://api.tauric.ai/v1/announcements", + "announcements_timeout": 1.0, + "announcements_fallback": "[cyan]For more information, please visit[/cyan] [link=https://github.com/TauricResearch]https://github.com/TauricResearch[/link]", +} diff --git a/cli/main.py b/cli/main.py index 334dffd6..f555a81f 100644 --- a/cli/main.py +++ b/cli/main.py @@ -28,6 +28,7 @@ from tradingagents.graph.trading_graph import TradingAgentsGraph from tradingagents.default_config import DEFAULT_CONFIG from cli.models import AnalystType from cli.utils import * +from cli.announcements import fetch_announcements, display_announcements console = Console() @@ -419,7 +420,12 @@ def get_user_selections(): subtitle="Multi-Agents LLM Financial Trading Framework", ) console.print(Align.center(welcome_box)) - console.print() # Add a blank line after the welcome box + console.print() + console.print() # Add vertical space before announcements + + # Fetch and display announcements (silent on failure) + announcements = fetch_announcements() + display_announcements(console, announcements) # Create a boxed questionnaire for each step def create_question_box(title, prompt, default=None):