(args: argparse.Namespace)
| 625 | |
| 626 | |
| 627 | def _handle_history(args: argparse.Namespace) -> None: |
| 628 | import sys as _sys |
| 629 | |
| 630 | from rich.console import Console as _Console |
| 631 | |
| 632 | from openosint.session_history import ( |
| 633 | clear_sessions, |
| 634 | display_history_table, |
| 635 | display_session_detail, |
| 636 | load_sessions, |
| 637 | ) |
| 638 | |
| 639 | _console = _Console() |
| 640 | action = getattr(args, "history_action", None) |
| 641 | |
| 642 | if action == "open": |
| 643 | sessions = load_sessions() |
| 644 | n = args.n |
| 645 | if n < 1 or n > len(sessions): |
| 646 | _console.print( |
| 647 | f"[bold red]Error:[/] Session {n} not found (total saved: {len(sessions)})" |
| 648 | ) |
| 649 | _sys.exit(1) |
| 650 | display_session_detail(sessions[n - 1], n, _console) |
| 651 | |
| 652 | elif action == "clear": |
| 653 | confirm = input("Delete all session history? [y/N] ").strip().lower() |
| 654 | if confirm == "y": |
| 655 | deleted = clear_sessions() |
| 656 | noun = "file" if deleted == 1 else "files" |
| 657 | _console.print(f" [dim]✓ Deleted {deleted} session {noun}.[/]\n") |
| 658 | else: |
| 659 | _console.print(" [dim]Aborted.[/]\n") |
| 660 | |
| 661 | else: |
| 662 | if getattr(args, "history_all", False): |
| 663 | sessions = load_sessions() |
| 664 | elif getattr(args, "history_last", None): |
| 665 | sessions = load_sessions(limit=args.history_last) |
| 666 | else: |
| 667 | sessions = load_sessions(limit=10) |
| 668 | display_history_table(sessions, _console) |
| 669 | |
| 670 | |
| 671 | # --------------------------------------------------------------------------- |
no test coverage detected