"""Reinstall myclaude from the local repo.""" import subprocess import sys from pathlib import Path import click from rich.console import Console from bin.project_root import get_myclaude_project_root console = Console() stderr_console = Console(stderr=True) def _run_make_install(root: Path) -> int: return subprocess.run( ["make", "install"], cwd=str(root), check=False, ).returncode def _run_pip_editable(root: Path) -> int: cmd = [sys.executable, "-m", "pip", "install", "-e", str(root)] return subprocess.run(cmd, check=False).returncode @click.command("update") def update_cmd() -> None: """Reinstall myclaude from this repository (make install, or pip install -e).""" root = get_myclaude_project_root() fallback = Path.home() / ".myclaude" if root == fallback: stderr_console.print( "[red]Not inside myclaude repo.[/red] Set [cyan]MYCLAUDE_PROJECT_ROOT[/cyan] " "or run from the clone.", ) raise SystemExit(1) console.print("[bold cyan]Updating myclaude…[/bold cyan]") makefile = root / "Makefile" if makefile.is_file(): rc = _run_make_install(root) if rc != 0: console.print( "[yellow]make install failed, trying pip -e…[/yellow]" ) rc = _run_pip_editable(root) else: rc = _run_pip_editable(root) if rc != 0: stderr_console.print("[red]Update failed.[/red]") raise SystemExit(rc) console.print("[green]myclaude updated.[/green]")