server: strip terminal controls from hook decision prompts and labels (#93)

* server: strip terminal controls from hook decision prompts and labels

Decision prompts and option labels from hook-event payloads were stored
verbatim and printed raw by `signaltty pane get`, so an escape sequence
in a hook payload could drive the reader's terminal (title, clipboard,
screen clear). Clean them like notification text before validation, and
refuse decision IDs with control characters since they are echoed back
to answer.

* server: strip terminal controls from hook lifecycle messages

The adapter's lifecycle message is copied from the hook payload (Claude
prompt/message, Codex prompt/tool_name/description, last_assistant_message
on Stop) and stored as the pane's last_message, which `signaltty attention
pending` prints. A notification usually rewrites it with sanitized text,
but not when the text is only controls (empty notification body) or the
hook passes an explicit empty `message` (no notification). Clean it like
other hook text right after classification, dropping it when empty.

---------

Co-authored-by: Lucenx9 <185146821+Lucenx9@users.noreply.github.com>
e04c08d451Simone committed on 10/11/2026, 7:26:14 AM· committed by GitHubparentfc1a517
2 files changedLine totals unavailable