- ollama_attack: convert generation-mode menu to interactive_menu with
dynamic items list (option 3 only present when cracked file exists);
cancel via 99 or Escape; re-prompts in a while loop
- omen_attack: convert existing-model menu to interactive_menu; cancel
via 99 or Escape (replaces hard-coded "3. Cancel"); re-prompts in loop
- _omen_pick_training_wordlist: replace abort-on-invalid with re-prompt
loop; add explicit 'q' cancel key so users can exit without being
trapped; callers already handle None correctly
- _markov_pick_training_source: same re-prompt-loop + 'q' cancel fix;
callers already handle None correctly
- Update all affected tests to patch interactive_menu at
hate_crack.attacks.interactive_menu (module-level import path) and
drive follow-up prompts via builtins.input
- Add new tests: arrow-menu reach, Escape/99 cancel, re-prompt loop
coverage for both pickers, and conditional option-3 key presence
Co-Authored-By: Claude <noreply@anthropic.com>