From 61a81662542ddc0a734a98b2f682920db9813b94 Mon Sep 17 00:00:00 2001 From: AIOSAI Date: Wed, 15 Apr 2026 15:16:49 -0700 Subject: [PATCH] =?UTF-8?q?feat(drone):=20add=20watchdog=20to=20INTERACTIV?= =?UTF-8?q?E=5FCOMMANDS=20=E2=80=94=20bypass=2030s=20capture=20timeout=20f?= =?UTF-8?q?or=20long-running=20poller?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-Authored-By: @drone --- src/aipass/drone/apps/drone.py | 2 +- src/aipass/drone/tests/test_activation.py | 14 ++++++++++++++ 2 files changed, 15 insertions(+), 1 deletion(-) diff --git a/src/aipass/drone/apps/drone.py b/src/aipass/drone/apps/drone.py index 2ff9ad36..35da5a32 100644 --- a/src/aipass/drone/apps/drone.py +++ b/src/aipass/drone/apps/drone.py @@ -41,7 +41,7 @@ MODULES_DIR = Path(__file__).parent / "modules" # Interactive mode — commands/branches that bypass capture + timeout for live terminal output. -INTERACTIVE_COMMANDS = ("monitor", "audit") +INTERACTIVE_COMMANDS = ("monitor", "audit", "watchdog") INTERACTIVE_BRANCHES = ("cli",) diff --git a/src/aipass/drone/tests/test_activation.py b/src/aipass/drone/tests/test_activation.py index 7e12f0b8..2fd64895 100644 --- a/src/aipass/drone/tests/test_activation.py +++ b/src/aipass/drone/tests/test_activation.py @@ -407,6 +407,20 @@ def test_interactive_detection_for_branch(self, mock_route: MagicMock) -> None: call_kwargs = mock_route.call_args.kwargs assert call_kwargs["interactive"] is True + @patch("aipass.drone.apps.drone.route_command") + def test_watchdog_routes_interactive(self, mock_route: MagicMock) -> None: + """watchdog command should route with interactive=True (long-running poller).""" + from aipass.drone.apps.drone import _handle_target + + mock_route.return_value = CommandResult( + stdout="", stderr="", exit_code=0, branch="devpulse", command="watchdog", + ) + + _handle_target(["@devpulse", "watchdog", "--help"]) + + call_kwargs = mock_route.call_args.kwargs + assert call_kwargs["interactive"] is True + @patch("aipass.drone.apps.drone.route_command") def test_propagates_exit_code(self, mock_route: MagicMock) -> None: """Should return the route_command exit code."""