Add commands subpackage
Some checks failed
CI / test (push) Has been cancelled

This commit is contained in:
2026-01-31 08:29:58 +00:00
parent fc5ed31b47
commit 51e6aeacba

View File

@@ -0,0 +1,112 @@
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"))