Subcommands invoked from main.rs argv parsing. Kept separate
from the library surface in lib.rs so the TUI code path doesn’t
pull in HTTP / archive-extraction deps unless bosun update is
actually invoked.
Runtime configuration. Values are read once at startup and passed
around by value, so the rest of the code never touches std::env
or the config file on disk.
Local SQLite store for per-user metadata that survives across
bosun runs. Right now this holds just one thing — the recents
list for the new-session modal — but the schema is versioned so
later phases can add tables (user prefs, session-specific
metadata, detector rules, etc) without surgery.