import click from browser_cli.client import send_command, BrowserNotConnected from rich.console import Console from rich.table import Table console = Console() def _handle(command, args=None): try: return send_command(command, args or {}) except BrowserNotConnected as e: console.print(f"[red]Error:[/red] {e}") raise SystemExit(1) except RuntimeError as e: console.print(f"[red]Browser error:[/red] {e}") raise SystemExit(1) def _print_windows(windows: list[dict]) -> None: if not windows: console.print("[yellow]No windows found[/yellow]") return table = Table(show_header=True, header_style="bold cyan") table.add_column("ID", style="dim", no_wrap=True) table.add_column("Alias", width=20) table.add_column("Focused", width=8) table.add_column("Tabs", width=6) table.add_column("State", width=12) for w in windows: focused = "[green]✓[/green]" if w.get("focused") else "" table.add_row( str(w.get("id", "")), w.get("alias") or "", focused, str(w.get("tabCount", "")), w.get("state") or "", ) console.print(table) @click.group("windows") def windows_group(): """Manage browser windows.""" @windows_group.command("list") def windows_list(): """List all browser windows.""" windows = _handle("windows.list") _print_windows(windows or []) @windows_group.command("rename") @click.argument("window_id", type=int) @click.argument("name") def windows_rename(window_id, name): """Give a window a local alias NAME (stored in native host).""" _handle("windows.rename", {"windowId": window_id, "name": name}) console.print(f"[green]Window {window_id} aliased as '{name}'[/green]") @windows_group.command("close") @click.argument("window_id", type=int) def windows_close(window_id): """Close a browser window.""" _handle("windows.close", {"windowId": window_id}) console.print(f"[green]Window {window_id} closed[/green]") @windows_group.command("open") @click.option("--profile", default=None, help="Open with a specific Chrome profile name") def windows_open(profile): """Open a new browser window.""" result = _handle("windows.open", {"profile": profile}) wid = result.get("id") if isinstance(result, dict) else result console.print(f"[green]Opened new window[/green] (id: {wid})" + (f" with profile '{profile}'" if profile else ""))