* fix(cli): non-interactive-safe prompts + singular `context` alias
Two CLI-polish follow-ups (the third — an async-warn refactor for #2807 — is moot:
#4373 replaced the Gemini remote-URL drop+warn with fileData pass-through, so no
async warn remains).
1) createPrompt (io.mjs) — the shared interactive helper used rl.question with no
EOF guard, so a non-interactive stdin (pipe, CI, `< /dev/null`) left the await
pending and Node warned about an 'unsettled top-level await' while the command
hung. ask/askSecret now resolve on the readline `close` event (fired on EOF)
with the default / empty string. A genuinely piped line still arrives via the
question callback first, so `echo value | omniroute …` keeps working — only the
no-input EOF case falls back. This fixes every command that prompts, centrally
(mirrors the contexts `confirm()` fix from #4397).
2) `contexts` gains a singular `context` alias — the connect output and older docs
said `omniroute context current`; the alias keeps that muscle-memory working.
Tests: cli-io.test.ts (ask default/empty + askSecret resolve on EOF, no hang) and a
cli-contexts.test.ts case asserting the `context` alias is registered. 11/11.
* test(cli): mock .alias() in the fake program for the contexts subcommand test
The existing 'registers a current subcommand' test uses a minimal fake commander
program; registerContexts now calls .alias("context"), so the fake needs an alias()
stub (returns this) or the chain throws. Add it. (Self-introduced by the alias in
this branch; my 4 new tests already pass in CI.)