Files
7000pctAUTO 51e6aeacba
Some checks failed
CI / test (push) Has been cancelled
Add commands subpackage
2026-01-31 08:29:58 +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"))