import typer from resonance_engine.tasks.enums import FanoutSource from resonance_engine.tasks.handlers import RunFanoutRequest, run_fanout app = typer.Typer(no_args_is_help=True) @app.command() def fanout( force: bool = typer.Option( False, "--force", help="Re-collect every resource even if data is fresh.", ), ) -> None: """Run a default fanout and print the results.""" response = run_fanout(RunFanoutRequest(source=FanoutSource.manual, force=force)) if response.task is None: typer.echo("No fans to dispatch.") return total_fans = sum(len(r.fans) for r in response.results) typer.echo(f"Fanout task: {response.task.id}") typer.echo(f"Fans planned: {total_fans}") for result in response.results: typer.echo(f" {result.client_name}: {len(result.fans)} fan(s)")