Files
7000pctAUTO faedaa2370
Some checks failed
CI / lint (push) Has been cancelled
CI / build (push) Has been cancelled
CI / test (push) Has been cancelled
feat: add CLI commands for export and suggestions
2026-01-31 10:28:09 +00:00

113 lines
2.9 KiB
Python

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"))