Skip to content
Open
Show file tree
Hide file tree
Changes from 5 commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
35 changes: 34 additions & 1 deletion cortex/cli.py
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,7 @@
print_all_preferences,
format_preference_value
)
from cortex.preflight_checker import PreflightChecker, format_report, export_report
from cortex.branding import (
console,
cx_print,
Expand Down Expand Up @@ -111,7 +112,12 @@
def _clear_line(self):
sys.stdout.write('\r\033[K')
sys.stdout.flush()


def install(self, software: str, execute: bool = False, dry_run: bool = False, simulate: bool = False):

Check warning on line 116 in cortex/cli.py

View check run for this annotation

SonarQubeCloud / SonarCloud Code Analysis

Remove the unused function parameter "dry_run".

See more on https://sonarcloud.io/project/issues?id=cortexlinux_cortex&issues=AZr9it4TOHUXk6syDWSt&open=AZr9it4TOHUXk6syDWSt&pullRequest=264

Check warning on line 116 in cortex/cli.py

View check run for this annotation

SonarQubeCloud / SonarCloud Code Analysis

Remove the unused function parameter "execute".

See more on https://sonarcloud.io/project/issues?id=cortexlinux_cortex&issues=AZr9it4TOHUXk6syDWSs&open=AZr9it4TOHUXk6syDWSs&pullRequest=264
# Handle simulation mode first - no API key needed
if simulate:
return self._run_simulation(software)

# --- New Notification Method ---
def notify(self, args):
"""Handle notification commands"""
Expand Down Expand Up @@ -310,6 +316,30 @@
history.update_installation(install_id, InstallationStatus.FAILED, str(e))
self._print_error(f"Unexpected error: {str(e)}")
return 1

def _run_simulation(self, software: str) -> int:
"""Run preflight simulation check for installation"""
try:
# Get API key for LLM-powered package info (optional).
api_key = os.environ.get('OPENAI_API_KEY') or os.environ.get('ANTHROPIC_API_KEY')
provider = self._get_provider() if api_key else 'openai'

# Create checker with optional API key for enhanced accuracy
checker = PreflightChecker(api_key=api_key, provider=provider)
report = checker.run_all_checks(software)

# Print formatted report
output = format_report(report, software)
print(output)

# Return error code if blocking issues found
if report.errors:
return 1
return 0

except Exception as e:
self._print_error(f"Simulation failed: {str(e)}")
return 1

def history(self, limit: int = 20, status: Optional[str] = None, show_id: Optional[str] = None):
"""Show installation history"""
Expand Down Expand Up @@ -577,6 +607,7 @@
install_parser.add_argument('software', type=str, help='Software to install')
install_parser.add_argument('--execute', action='store_true', help='Execute commands')
install_parser.add_argument('--dry-run', action='store_true', help='Show commands only')
install_parser.add_argument('--simulate', action='store_true', help='Simulate installation without making changes')

# History command
history_parser = subparsers.add_parser('history', help='View history')
Expand Down Expand Up @@ -626,6 +657,8 @@
cli = CortexCLI(verbose=args.verbose)

try:
if args.command == 'install':
return cli.install(args.software, execute=args.execute, dry_run=args.dry_run, simulate=args.simulate)
if args.command == 'demo':
return cli.demo()
elif args.command == 'wizard':
Expand Down
Loading
Loading