77from uipath .runtime .debug import UiPathBreakpointResult , UiPathDebugQuitError
88from uipath .runtime .events import UiPathRuntimeStateEvent
99from uipath .runtime .result import UiPathRuntimeResult
10+ from uipath .runtime .resumable import UiPathResumeTriggerType
1011
1112logger = logging .getLogger (__name__ )
1213
@@ -18,6 +19,7 @@ def __init__(self):
1819 """Initialize the debug bridge."""
1920 self ._connected = False
2021 self ._resume_event = asyncio .Event ()
22+ self ._resume_data : dict [str , Any ] | None = None
2123 self ._terminate_event = asyncio .Event ()
2224 self ._breakpoints : list [str ] | Literal ["*" ] = "*" # Default: step mode
2325
@@ -60,6 +62,29 @@ async def emit_breakpoint_hit(
6062 if self .on_breakpoint_hit :
6163 self .on_breakpoint_hit (breakpoint_result )
6264
65+ async def emit_execution_suspended (
66+ self , runtime_result : UiPathRuntimeResult
67+ ) -> None :
68+ """Notify debugger that execution is suspended."""
69+ logger .debug ("Execution suspended" )
70+ if runtime_result .trigger is None :
71+ return
72+
73+ if runtime_result .trigger .trigger_type == UiPathResumeTriggerType .API :
74+ if self .on_breakpoint_hit :
75+ self .on_breakpoint_hit (
76+ UiPathBreakpointResult (
77+ breakpoint_node = "<suspended>" ,
78+ breakpoint_type = "before" ,
79+ current_state = runtime_result .output ,
80+ next_nodes = [],
81+ )
82+ )
83+
84+ async def emit_execution_resumed (self , resume_data : Any ) -> None :
85+ """Notify debugger that execution resumed."""
86+ logger .debug ("Execution resumed" )
87+
6388 async def emit_execution_completed (
6489 self , runtime_result : UiPathRuntimeResult
6590 ) -> None :
@@ -86,12 +111,15 @@ async def wait_for_resume(self) -> Any:
86111 if self ._terminate_event .is_set ():
87112 raise UiPathDebugQuitError ("Debug session quit requested" )
88113
114+ return self ._resume_data
115+
89116 async def wait_for_terminate (self ) -> None :
90117 """Wait for terminate command from debugger."""
91118 await self ._terminate_event .wait ()
92119
93- def resume (self ) -> None :
120+ def resume (self , resume_data : dict [ str , Any ] | str | None = None ) -> None :
94121 """Signal that execution should resume (called from UI buttons)."""
122+ self ._resume_data = resume_data or {}
95123 self ._resume_event .set ()
96124
97125 def quit (self ) -> None :
0 commit comments