import click from rich import print as rprint from rich.panel import Panel from rich.table import Table from ..config import Config from ..database import Database from ..suggestions import SuggestionEngine @click.group() def suggest(): """Get smart command suggestions.""" pass @suggest.command() @click.argument("prefix") @click.option("--project", "-p", help="Project ID") @click.option("--limit", "-l", default=5, help="Maximum suggestions") def next(prefix, project, limit): """Get suggestions for next command.""" db = Database() engine = SuggestionEngine(db=db) project_id = int(project) if project else None suggestions = engine.get_suggestions(prefix, project_id=project_id, limit=limit) db.close() if not suggestions: rprint(f"[yellow]No suggestions for: {prefix}[/yellow]") return table = Table(title=f"Suggestions for: {prefix}") table.add_column("Command", style="cyan") table.add_column("Confidence", style="magenta") table.add_column("Frequency", style="green") for s in suggestions: table.add_row( s.command, f"{s.confidence:.2%}", str(s.frequency), ) rprint(Panel(table, title="Suggestions")) @suggest.command() @click.argument("prefix") @click.option("--project", "-p", help="Project ID") def autocomplete(prefix, project): """Get autocomplete candidates.""" db = Database() engine = SuggestionEngine(db=db) project_id = int(project) if project else None candidates = engine.get_autocomplete_candidates(prefix, project_id) db.close() if candidates: rprint("[cyan]Autocomplete candidates:[/cyan]") for c in candidates: rprint(f" {c}") else: rprint(f"[yellow]No autocomplete candidates for: {prefix}[/yellow]") @suggest.command() def train(): """Train suggestion engine.""" db = Database() engine = SuggestionEngine(db=db) engine.train() db.close() rprint("[green]Suggestion engine trained successfully![/green]") @suggest.command() @click.option("--project", "-p", help="Project ID") def patterns(project): """Show detected patterns.""" db = Database() engine = SuggestionEngine(db=db) project_id = int(project) if project else None patterns = engine.get_pattern_suggestions(project_id) db.close() if not patterns: rprint("[yellow]No patterns detected yet[/yellow]") return table = Table(title="Detected Patterns") table.add_column("Name", style="cyan") table.add_column("Commands", style="magenta") table.add_column("Occurrences", style="green") table.add_column("Confidence", style="yellow") for p in patterns[:20]: cmds = " | ".join(p.command_sequence[:3]) if len(p.command_sequence) > 3: cmds += " | ..." table.add_row(p.name, cmds, str(p.occurrences), f"{p.confidence:.2%}") rprint(Panel(table, title="Patterns"))