1.3 The four surfaces
The same sixty-one modules are reachable through four surfaces. They are not four implementations; they are four views over one command line, and the command line is the truth.
The module CLI — modules/NN_name.sh --verb. Authoritative. Every verb,
every store and every exit code is defined here, and nothing about a module's
behaviour is decided anywhere else. If a GUI button and a module disagree, the
module is right and the button is a bug.
The launcher — ./imsisting.sh. A menu over a table of
CATEGORY|KEY|LABEL|MENU_FUNCTION|MODULE_ID rows, useful for finding the
number of a module you have heard of but not memorised.
The TUI — tools/imsisting_tui.py, or ./imsisting.sh --tui. A
full-screen terminal interface that reads the same table and the same module
index, offering categories, search, a module detail pane (description, needs,
verbs grouped by the same views the GUI uses) and one-click actions. Useful
over SSH, on a machine with no display, and while a capture is running in
another pane.
The GUI — native/builddir/imsisting-gui, built with meson and GTK 4. Ten
pages in a left drawer, a module catalogue on the dashboard, a per-module page
with the same views the TUI lists, and a header strip that reports the bench:
radio present, transmit capability, current frequency, cell count, GPS.
Two supporting agents belong with the surfaces rather than under a module,
because every surface may call them: tools/node_agent.sh (what runs on a
remote node) and tools/ue_agent.sh (what runs against a handset over adb).
Both are read-only by construction, and both refuse rather than guess when the
device they were pointed at answers with something unexpected.