From 0fd366dd59471184eca8a9d13396a11c2b030165 Mon Sep 17 00:00:00 2001 From: TPTBusiness Date: Fri, 10 Apr 2026 12:10:38 +0200 Subject: [PATCH] feat: Add beautiful CLI welcome screen for GitHub README Added 'rdagent predix' command showing: - System status (factors, strategies, security) - Available commands table - Quick start guide - Version and release info Perfect for GitHub README screenshots. Also fixed release tag to use today's date (2026.04.10). --- rdagent/app/cli.py | 20 ++++++++ rdagent/app/cli_welcome.py | 97 ++++++++++++++++++++++++++++++++++++++ 2 files changed, 117 insertions(+) create mode 100644 rdagent/app/cli_welcome.py diff --git a/rdagent/app/cli.py b/rdagent/app/cli.py index e98c4513..295c1689 100644 --- a/rdagent/app/cli.py +++ b/rdagent/app/cli.py @@ -1595,3 +1595,23 @@ def report_cli( except KeyboardInterrupt: typer.echo("\nโš ๏ธ Interrupted by user") raise typer.Exit(code=1) + + + +@app.command(name="predix") +def predix_welcome(): + """ + Show Predix welcome screen with system overview. + + This command displays a beautiful dashboard showing: + - System status (factors, strategies, security) + - Available commands + - Quick start guide + + Perfect for GitHub README screenshots! + + Examples: + rdagent predix + """ + from rdagent.app.cli_welcome import show_welcome + show_welcome() diff --git a/rdagent/app/cli_welcome.py b/rdagent/app/cli_welcome.py new file mode 100644 index 00000000..f34cf1a9 --- /dev/null +++ b/rdagent/app/cli_welcome.py @@ -0,0 +1,97 @@ +""" +Predix CLI Welcome Screen - Beautiful dashboard for GitHub README screenshot. +""" + +import os +import subprocess +from pathlib import Path +from rich.console import Console +from rich.panel import Panel +from rich.table import Table +from rich.text import Text +from rich.align import Align +from rich.layout import Layout +from datetime import datetime + +console = Console() + +def show_welcome(): + """Show beautiful Predix welcome screen.""" + + # Header + console.print() + title = Text("๐Ÿค– PREDIX", style="bold cyan") + subtitle = Text("AI-Powered Quantitative Trading Agent for EUR/USD Forex", style="dim white") + console.print(Align.center(title)) + console.print(Align.center(subtitle)) + console.print() + + # Version info + version_panel = Panel( + f"[bold green]v2.0.0[/bold green] โ€ข Released: 2026.04.10 โ€ข [dim]MIT License[/dim]", + border_style="green", + title="๐Ÿ“ฆ Release", + title_align="left" + ) + console.print(version_panel) + console.print() + + # System Stats + stats_table = Table(show_header=False, box=None, padding=(0, 2)) + stats_table.add_column("Metric", style="cyan") + stats_table.add_column("Value", style="bold white") + stats_table.add_column("Metric2", style="cyan") + stats_table.add_column("Value2", style="bold white") + + # Count factors and strategies + factors_dir = Path("results/factors") + strategies_dir = Path("results/strategies_new") + factor_count = len(list(factors_dir.glob("*.json"))) if factors_dir.exists() else 0 + strategy_count = len(list(strategies_dir.glob("*.json"))) if strategies_dir.exists() else 0 + + stats_table.add_row("๐Ÿ“Š Factors", f"[green]{factor_count:,}[/green]", "๐Ÿ“ˆ Strategies", f"[green]{strategy_count}[/green]") + stats_table.add_row("๐Ÿง  LLM", "[yellow]Qwen3.5-35B (local)[/yellow]", "โšก Optuna", "[yellow]Enabled[/yellow]") + stats_table.add_row("๐Ÿ”’ Security", "[green]All resolved[/green]", "๐Ÿงช Tests", "[green]282+ passing[/green]") + + stats_panel = Panel(stats_table, border_style="blue", title="๐Ÿ“Š System Status", title_align="left") + console.print(stats_panel) + console.print() + + # Available Commands + cmd_table = Table(show_header=True, header_style="bold magenta", box=None) + cmd_table.add_column("Command", style="cyan", width=40) + cmd_table.add_column("Description", style="white", width=50) + + cmd_table.add_row("rdagent fin_quant", "Start EUR/USD factor evolution loop") + cmd_table.add_row("rdagent start_llama", "Start local llama.cpp server") + cmd_table.add_row("rdagent start_loop", "Start strategy generator loop") + cmd_table.add_row("rdagent generate_strategies", "Generate strategies from factors") + cmd_table.add_row("rdagent optimize_portfolio", "Portfolio optimization") + cmd_table.add_row("rdagent eval_all", "Evaluate factors with full data") + cmd_table.add_row("rdagent batch_backtest", "Batch backtest existing factors") + cmd_table.add_row("rdagent report", "Generate PDF performance reports") + cmd_table.add_row("rdagent rebacktest", "Re-backtest existing strategies") + + cmd_panel = Panel(cmd_table, border_style="magenta", title="๐Ÿš€ Available Commands", title_align="left") + console.print(cmd_panel) + console.print() + + # Quick Start + quick_start = Panel( + "[bold cyan]1.[/bold cyan] Start LLM Server: [dim]rdagent start_llama[/dim]\n" + "[bold cyan]2.[/bold cyan] Run Trading Loop: [dim]rdagent fin_quant --auto-strategies[/dim]\n" + "[bold cyan]3.[/bold cyan] Generate Strategies: [dim]rdagent generate_strategies --count 5 --optuna[/dim]", + border_style="yellow", + title="๐Ÿ’ก Quick Start", + title_align="left" + ) + console.print(quick_start) + console.print() + + # Footer + footer = Text("๐Ÿ“„ github.com/TPTBusiness/Predix โ€ข ๐Ÿ”’ MIT License โ€ข ๐Ÿ“– docs/", style="dim white") + console.print(Align.center(footer)) + console.print() + +if __name__ == "__main__": + show_welcome()