|  | 
| 23 | 23 | 
 | 
| 24 | 24 | # Update configuration | 
| 25 | 25 | UPDATE_CHECK_FILE = Path.home() / ".codegen" / "update_check.json" | 
| 26 |  | -UPDATE_CHECK_INTERVAL = timedelta(hours=24)  # Check for updates once per day | 
|  | 26 | +UPDATE_CHECK_INTERVAL = timedelta(hours=12)  # Check for updates once per day | 
| 27 | 27 | 
 | 
| 28 | 28 | 
 | 
| 29 | 29 | class InstallMethod(Enum): | 
| @@ -219,7 +219,7 @@ def _save_last_check_time(self) -> None: | 
| 219 | 219 |         with open(UPDATE_CHECK_FILE, "w") as f: | 
| 220 | 220 |             json.dump({"last_check": datetime.now().isoformat()}, f) | 
| 221 | 221 | 
 | 
| 222 |  | -    def perform_update(self, target_version: Optional[str] = None, dry_run: bool = False) -> bool: | 
|  | 222 | +    def perform_update(self, target_version: Optional[str] = None, dry_run: bool = False, skip_confirmation: bool = False) -> bool: | 
| 223 | 223 |         """Perform the update to a specific version or latest.""" | 
| 224 | 224 |         current_version = self._get_current_version() | 
| 225 | 225 | 
 | 
| @@ -248,8 +248,8 @@ def perform_update(self, target_version: Optional[str] = None, dry_run: bool = F | 
| 248 | 248 |         if dry_run: | 
| 249 | 249 |             return True | 
| 250 | 250 | 
 | 
| 251 |  | -        # Confirm update | 
| 252 |  | -        if not self._confirm_update(): | 
|  | 251 | +        # Confirm update (skip if already confirmed) | 
|  | 252 | +        if not skip_confirmation and not self._confirm_update(): | 
| 253 | 253 |             self.console.print("[yellow]Update cancelled[/yellow]") | 
| 254 | 254 |             return False | 
| 255 | 255 | 
 | 
| @@ -382,15 +382,23 @@ def _update_via_homebrew(self, target: Version) -> bool: | 
| 382 | 382 | 
 | 
| 383 | 383 | 
 | 
| 384 | 384 | def check_for_updates_on_startup() -> None: | 
| 385 |  | -    """Check for updates on CLI startup (non-blocking).""" | 
|  | 385 | +    """Check for updates on CLI startup with blocking prompt.""" | 
| 386 | 386 |     try: | 
| 387 | 387 |         # Only check if we haven't checked recently | 
| 388 | 388 |         manager = UpdateManager() | 
| 389 |  | -        result = manager.check_for_updates(force=False) | 
|  | 389 | +        result = manager.check_for_updates(force=True) | 
| 390 | 390 | 
 | 
| 391 | 391 |         if result.update_available: | 
| 392 |  | -            console.print(f"\n[cyan]ℹ️  A new version of Codegen CLI is available: {result.latest_version}[/cyan]") | 
| 393 |  | -            console.print("[dim]Run 'codegen update' to upgrade[/dim]\n") | 
|  | 392 | +            console.print(f"\n[cyan]ℹ️  A new version of Codegen CLI is available: {result.current_version} → {result.latest_version}[/cyan]") | 
|  | 393 | + | 
|  | 394 | +            if manager.perform_update(): | 
|  | 395 | +                console.print("\n[green]✓ Update completed successfully![/green]") | 
|  | 396 | +                console.print("[yellow]Please restart your terminal or run a new codegen command to use the updated version.[/yellow]\n") | 
|  | 397 | +                # Exit after successful update | 
|  | 398 | +                sys.exit(0) | 
|  | 399 | +            else: | 
|  | 400 | +                console.print("\n[red]Update failed. Please try running 'codegen update' manually.[/red]\n") | 
|  | 401 | + | 
| 394 | 402 |     except Exception: | 
| 395 | 403 |         # Silently ignore update check failures on startup | 
| 396 | 404 |         pass | 
0 commit comments