def prompt_choice(prompt: str, options: list) -> int: print(prompt) for i, opt in enumerate(options, 1): print(f" {i}. {opt}") while True: try: s = input(f"Enter choice (1-{len(options)}): ").strip() idx = int(s) - 1 if 0 <= idx < len(options): return idx except Exception: pass print(f"Invalid. Enter a number between 1-{len(options)}.") def prompt_confirmation(question: str, default="y"): s = input(f"{question} (y/n) [{default}]: ").strip().lower() if not s: s = default return s.startswith("y") def search_programs(): base = Path(__file__).parent / "triplaprograms" if not base.exists(): return [] return sorted([f for f in base.glob("*.tripla")])