Skip to content
Open
Show file tree
Hide file tree
Changes from 1 commit
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: 33 additions & 2 deletions cortex/cli.py
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@
print_all_preferences,
format_preference_value
)
from cortex.preflight_checker import PreflightChecker, format_report, export_report


class CortexCLI:
Expand Down Expand Up @@ -61,7 +62,11 @@
sys.stdout.write('\r\033[K')
sys.stdout.flush()

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

Check failure on line 65 in cortex/cli.py

View check run for this annotation

SonarQubeCloud / SonarCloud Code Analysis

Refactor this function to reduce its Cognitive Complexity from 45 to the 15 allowed.

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

api_key = self._get_api_key()
if not api_key:
return 1
Expand Down Expand Up @@ -187,6 +192,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 = self._get_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 @@ -496,6 +525,7 @@
Examples:
cortex install docker
cortex install docker --execute
cortex install docker --simulate
cortex install "python 3.11 with pip"
cortex install nginx --dry-run
cortex history
Expand All @@ -520,6 +550,7 @@
install_parser.add_argument('software', type=str, help='Software to install (natural language)')
install_parser.add_argument('--execute', action='store_true', help='Execute the generated commands')
install_parser.add_argument('--dry-run', action='store_true', help='Show commands without executing')
install_parser.add_argument('--simulate', action='store_true', help='Simulate installation without making changes')

# History command
history_parser = subparsers.add_parser('history', help='View installation history')
Expand Down Expand Up @@ -556,7 +587,7 @@

try:
if args.command == 'install':
return cli.install(args.software, execute=args.execute, dry_run=args.dry_run)
return cli.install(args.software, execute=args.execute, dry_run=args.dry_run, simulate=args.simulate)
elif args.command == 'history':
return cli.history(limit=args.limit, status=args.status, show_id=args.show_id)
elif args.command == 'rollback':
Expand Down
Loading
Loading