From 0d957a8d48e5f9ada343c8fe41717b7b93b0f318 Mon Sep 17 00:00:00 2001 From: Gille <4317663+helix4u@users.noreply.github.com> Date: Tue, 28 Apr 2026 14:27:43 -0600 Subject: [PATCH] fix(tui): surface mouse slash command (#17126) --- tests/test_tui_gateway_server.py | 21 +++++++++++++++++++++ tui_gateway/server.py | 6 ++++++ 2 files changed, 27 insertions(+) diff --git a/tests/test_tui_gateway_server.py b/tests/test_tui_gateway_server.py index 7acd4bc79..4a7b9e6cc 100644 --- a/tests/test_tui_gateway_server.py +++ b/tests/test_tui_gateway_server.py @@ -980,6 +980,14 @@ def test_complete_slash_includes_tui_details_command(): assert any(item["text"] == "/details" for item in resp["result"]["items"]) +def test_complete_slash_includes_tui_mouse_command(): + resp = server.handle_request( + {"id": "1", "method": "complete.slash", "params": {"text": "/mou"}} + ) + + assert any(item["text"] == "/mouse" for item in resp["result"]["items"]) + + def test_complete_slash_details_args(): resp_root = server.handle_request( {"id": "0", "method": "complete.slash", "params": {"text": "/details"}} @@ -1547,6 +1555,19 @@ def test_commands_catalog_surfaces_quick_commands(monkeypatch): assert resp["result"]["canon"]["/notes"] == "/notes" +def test_commands_catalog_includes_tui_mouse_command(): + resp = server.handle_request( + {"id": "1", "method": "commands.catalog", "params": {}} + ) + + pairs = dict(resp["result"]["pairs"]) + tui_cat = next(c for c in resp["result"]["categories"] if c["name"] == "TUI") + tui_pairs = dict(tui_cat["pairs"]) + + assert "/mouse" in pairs + assert "/mouse" in tui_pairs + + def test_command_dispatch_exec_nonzero_surfaces_error(monkeypatch): monkeypatch.setattr( server, diff --git a/tui_gateway/server.py b/tui_gateway/server.py index 0343cb84b..8a356c9f1 100644 --- a/tui_gateway/server.py +++ b/tui_gateway/server.py @@ -3354,6 +3354,7 @@ _TUI_HIDDEN: frozenset[str] = frozenset( _TUI_EXTRA: list[tuple[str, str, str]] = [ ("/compact", "Toggle compact display mode", "TUI"), ("/logs", "Show recent gateway log lines", "TUI"), + ("/mouse", "Toggle mouse/wheel tracking [on|off|toggle]", "TUI"), ] # Commands that queue messages onto _pending_input in the CLI. @@ -4133,6 +4134,11 @@ def _(rid, params: dict) -> dict: "display": "/logs", "meta": "Show recent gateway log lines", }, + { + "text": "/mouse", + "display": "/mouse", + "meta": "Toggle mouse/wheel tracking [on|off|toggle]", + }, ] for extra in extras: if extra["text"].startswith(text_lower) and not any(