From a28afd81bc5311c0c5cc8b0c8692d482b4354792 Mon Sep 17 00:00:00 2001 From: Giulio Eulisse <10544+ktf@users.noreply.github.com> Date: Fri, 3 Apr 2026 12:12:10 +0200 Subject: [PATCH 1/2] DPL MCP: add ability to start a stopped topology --- Framework/Core/src/StatusWebSocketHandler.cxx | 13 +++++++++++++ Framework/Core/src/StatusWebSocketHandler.h | 1 + 2 files changed, 14 insertions(+) diff --git a/Framework/Core/src/StatusWebSocketHandler.cxx b/Framework/Core/src/StatusWebSocketHandler.cxx index cdf08c4f2f349..065a6f4b05b4a 100644 --- a/Framework/Core/src/StatusWebSocketHandler.cxx +++ b/Framework/Core/src/StatusWebSocketHandler.cxx @@ -13,6 +13,8 @@ #include "DPLWebSocket.h" #include "DriverServerContext.h" #include "Framework/DeviceControl.h" +#include +#include #include "Framework/DeviceController.h" #include "Framework/DeviceInfo.h" #include "Framework/DeviceMetricsInfo.h" @@ -254,6 +256,8 @@ void StatusWebSocketHandler::frame(char const* data, size_t s) handleSubscribeLogs(deviceName); } else if (cmd == "unsubscribe_logs") { handleUnsubscribeLogs(deviceName); + } else if (cmd == "start_devices") { + handleStartDevices(); } else if (cmd == "enable_signpost") { handleEnableSignpost(deviceName, extractArrayField(msg, "streams")); } else if (cmd == "disable_signpost") { @@ -441,6 +445,15 @@ size_t StatusWebSocketHandler::findDeviceIndex(std::string_view name) const return SIZE_MAX; } +void StatusWebSocketHandler::handleStartDevices() +{ + for (auto const& info : *mContext.infos) { + if (info.active) { + kill(info.pid, SIGCONT); + } + } +} + void StatusWebSocketHandler::handleEnableSignpost(std::string_view deviceName, std::string_view streamsArr) { if (streamsArr.empty()) { diff --git a/Framework/Core/src/StatusWebSocketHandler.h b/Framework/Core/src/StatusWebSocketHandler.h index 3b040d68e26f0..fb2f0beebbec2 100644 --- a/Framework/Core/src/StatusWebSocketHandler.h +++ b/Framework/Core/src/StatusWebSocketHandler.h @@ -95,6 +95,7 @@ struct StatusWebSocketHandler : public WebSocketHandler { void handleUnsubscribe(std::string_view deviceName, std::string_view metricsJson); void handleSubscribeLogs(std::string_view deviceName); void handleUnsubscribeLogs(std::string_view deviceName); + void handleStartDevices(); void handleEnableSignpost(std::string_view deviceName, std::string_view streamsArr); void handleDisableSignpost(std::string_view deviceName, std::string_view streamsArr); size_t findDeviceIndex(std::string_view name) const; From b63488a3b1aae84d54411fd428699bb793d1c26e Mon Sep 17 00:00:00 2001 From: Giulio Eulisse <10544+ktf@users.noreply.github.com> Date: Fri, 3 Apr 2026 12:12:10 +0200 Subject: [PATCH 2/2] DPL MCP: add tool to resume a stopped topology --- .../Core/scripts/dpl-mcp-server/dpl_mcp_server.py | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/Framework/Core/scripts/dpl-mcp-server/dpl_mcp_server.py b/Framework/Core/scripts/dpl-mcp-server/dpl_mcp_server.py index febb1278f6045..3900a646632a1 100644 --- a/Framework/Core/scripts/dpl-mcp-server/dpl_mcp_server.py +++ b/Framework/Core/scripts/dpl-mcp-server/dpl_mcp_server.py @@ -237,6 +237,16 @@ async def get_logs(max_lines: int = 100) -> str: return "\n".join(lines) +@mcp.tool() +async def start_devices() -> str: + """Resume all stopped DPL devices (send SIGCONT). + + Use this when the workflow was started with -s (all devices paused). + """ + await _send({"cmd": "start_devices"}) + return "Sent SIGCONT to all active devices." + + @mcp.tool() async def enable_signpost(device: str, streams: list[str]) -> str: """Enable one or more signpost log streams for a DPL device.