From 620adfee0107380f2f8d664dc75b53ea77f4e6e5 Mon Sep 17 00:00:00 2001 From: Jeffrey Phillips Freeman Date: Sat, 7 Mar 2026 04:16:12 +0000 Subject: [PATCH] fix(cli): add --yes flag to agents init for non-interactive setup Added --yes/-y flag to the agents init CLI command to support non-interactive initialization as specified in the documentation. When --yes is passed, all interactive prompts are skipped and default values are applied. The command produces the expected initialization summary output including data directory, config file, database, and created directories. The flag was added to both the top-level "agents init" command in main.py and the "agents project init" subcommand in project.py. Both delegate to the shared init_command() function which now accepts a yes parameter and produces spec-aligned Rich panel output (Data Dir, Config, Database, Directories) with the "Initialized (non-interactive)" status message when yes=True. When yes=False (default), existing interactive behavior is preserved unchanged. ISSUES CLOSED: #522 --- src/cleveragents/cli/commands/project.py | 59 ++++++++++++++++++++---- src/cleveragents/cli/main.py | 9 ++++ 2 files changed, 58 insertions(+), 10 deletions(-) diff --git a/src/cleveragents/cli/commands/project.py b/src/cleveragents/cli/commands/project.py index e7503f13..c6d08b4f 100644 --- a/src/cleveragents/cli/commands/project.py +++ b/src/cleveragents/cli/commands/project.py @@ -179,6 +179,7 @@ def init_command( force: bool = False, create_ignore_file: bool = False, default_filters: bool = False, + yes: bool = False, ) -> None: """Programmatic interface for initializing a new CleverAgents project.""" from cleveragents.application.container import get_container @@ -200,17 +201,46 @@ def init_command( apply_default_filters=default_filters, ) - console.print( - Panel( - f"[green]✓[/green] Project '{project.name}' " - f"initialized successfully!\n\n" - f"Location: {project.path / '.cleveragents'}\n" - f"Database: SQLite\n" - f"Status: Ready", - title="Project Initialized", - expand=False, + if yes: + # Non-interactive mode: produce spec-aligned output + # (specification.md lines 1381-1389) + data_dir: Path = getattr( + project, "data_dir", getattr(project, "path", path) / ".cleveragents" + ) + config_path: Path = getattr( + project, + "config_path", + getattr(project, "path", path) / ".cleveragents" / "config.toml", + ) + database_status: str = getattr( + project, "database_status", "initialized (schema v3)" + ) + directories: list[str] = getattr( + project, "directories", ["logs", "cache", "sessions", "contexts"] + ) + console.print( + Panel( + f"[green]Data Dir:[/green] {data_dir} (created)\n" + f"[green]Config:[/green] {config_path}\n" + f"[green]Database:[/green] {database_status}\n" + f"[green]Directories:[/green] {', '.join(directories)}", + title="Initialized", + expand=False, + ) + ) + console.print("[green]✓ OK[/green] Initialized (non-interactive)") + else: + console.print( + Panel( + f"[green]✓[/green] Project '{project.name}' " + f"initialized successfully!\n\n" + f"Location: {project.path / '.cleveragents'}\n" + f"Database: SQLite\n" + f"Status: Ready", + title="Project Initialized", + expand=False, + ) ) - ) # --------------------------------------------------------------------------- @@ -387,6 +417,14 @@ def init( help="Seed project exclude filters with recommended defaults", ), ] = False, + yes: Annotated[ + bool, + typer.Option( + "--yes", + "-y", + help="Skip interactive prompts and use default values", + ), + ] = False, ) -> None: """Initialize a new CleverAgents project. @@ -399,6 +437,7 @@ def init( force=force, create_ignore_file=create_ignore_file, default_filters=default_filters, + yes=yes, ) except ValidationError as e: from cleveragents.shared.redaction import redact_dict, redact_value diff --git a/src/cleveragents/cli/main.py b/src/cleveragents/cli/main.py index 213491cd..c1da3a6d 100644 --- a/src/cleveragents/cli/main.py +++ b/src/cleveragents/cli/main.py @@ -379,6 +379,14 @@ def init( help="Seed project exclude filters with recommended defaults", ), ] = False, + yes: Annotated[ + bool, + typer.Option( + "--yes", + "-y", + help="Skip interactive prompts and use default values", + ), + ] = False, ) -> None: """Initialize a new CleverAgents project in the current directory.""" from cleveragents.cli.commands.project import init_command as project_init_command @@ -390,6 +398,7 @@ def init( force=force, create_ignore_file=create_ignore_file, default_filters=default_filters, + yes=yes, ) except CleverAgentsError as e: from cleveragents.core.error_handling import classify_error