diff --git a/confsync/cli/main.py b/confsync/cli/main.py new file mode 100644 index 0000000..23fd948 --- /dev/null +++ b/confsync/cli/main.py @@ -0,0 +1,60 @@ +"""Main CLI entry point for ConfSync.""" + +import typer +from rich.console import Console +from rich.panel import Panel + +from confsync import __version__ +from confsync.cli.detect import detect_cmd +from confsync.cli.manifest import manifest_cmd +from confsync.cli.validate import validate_cmd +from confsync.cli.sync import sync_cmd +from confsync.cli.merge import merge_cmd +from confsync.cli.history import history_cmd + +app = typer.Typer( + name="confsync", + help="Intelligent Developer Configuration Sync CLI", + add_completion=False, + no_args_is_help=True, +) + +console = Console() + +app.add_typer(detect_cmd, name="detect", help="Detect and catalog configuration files") +app.add_typer(manifest_cmd, name="manifest", help="Manage configuration manifests") +app.add_typer(validate_cmd, name="validate", help="Validate configuration files") +app.add_typer(sync_cmd, name="sync", help="Synchronize configurations between machines") +app.add_typer(merge_cmd, name="merge", help="Merge configuration files") +app.add_typer(history_cmd, name="history", help="View and manage configuration change history") + + +@app.command("version") +def show_version(): + """Show the ConfSync version.""" + console.print(f"[bold]ConfSync[/bold] version {__version__}") + + +@app.callback(invoke_without_command=True) +def main_callback( + ctx: typer.Context, + verbose: bool = typer.Option(False, "--verbose", "-v", help="Enable verbose output"), +): + """Configure global options.""" + if verbose: + import logging + logging.basicConfig(level=logging.DEBUG) + + +def main(): + """Main entry point.""" + console.print(Panel.fit( + "[bold]ConfSync[/bold] - Intelligent Developer Configuration Sync CLI", + style="blue", + subtitle=f"Version {__version__}", + )) + app() + + +if __name__ == "__main__": + main()