Files
term-flow/.termflow/commands/compare.py
7000pctAUTO 3dc310b932
Some checks failed
CI / lint (push) Has been cancelled
CI / test (push) Has been cancelled
Add commands and parsers modules
2026-01-30 05:29:50 +00:00

86 lines
2.2 KiB
Python

"""Compare command for CLI."""
from typing import List, Optional
import click
from rich.console import Console
from rich.panel import Panel
from rich.table import Table
from ..core.database import SessionDatabase
from ..core.team_comparison import TeamComparisonAnalyzer
console = Console()
@click.command(name="compare")
@click.option(
"--sessions",
"-s",
multiple=True,
type=int,
help="Session IDs to compare",
)
@click.option(
"--all",
is_flag=True,
default=False,
help="Compare all sessions",
)
@click.pass_context
def compare_cmd(
ctx: click.Context,
sessions: tuple,
all_sessions: bool,
) -> None:
"""Compare terminal sessions."""
db_path = ctx.obj.get("db")
db = SessionDatabase(db_path)
if all_sessions:
all_sessions_data = db.get_all_sessions()
session_ids = [s["id"] for s in all_sessions_data]
else:
session_ids = list(sessions)
if len(session_ids) < 2:
console.print("[yellow]Please provide at least 2 session IDs to compare[/yellow]")
return
sessions_data = []
for sid in session_ids:
session = db.get_session(sid)
if session:
commands = db.get_session_commands(sid)
session["commands"] = commands
sessions_data.append(session)
if not sessions_data:
console.print("[yellow]No valid sessions found[/yellow]")
return
analyzer = TeamComparisonAnalyzer()
patterns = analyzer.analyze_sessions(sessions_data)
table = Table(title="Session Comparison")
table.add_column("Session")
table.add_column("Commands", justify="right")
table.add_column("Common Patterns", justify="right")
for session in sessions_data:
session_patterns = [p for p in patterns if session["name"] in p.users]
table.add_row(
session["name"],
str(session["command_count"]),
str(len(session_patterns)),
)
console.print(table)
if patterns:
pattern_text = click.style("Top Common Patterns:\n", bold=True)
for i, pattern in enumerate(patterns[:5], 1):
pattern_text += f"{i}. {pattern.commands} (used {pattern.frequency} times)\n"
console.print(Panel(pattern_text, title="Patterns"))