waldiez 0.5.8__py3-none-any.whl → 0.5.10__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of waldiez might be problematic. Click here for more details.
- waldiez/_version.py +1 -1
- waldiez/cli.py +112 -24
- waldiez/exporting/agent/exporter.py +3 -0
- waldiez/exporting/agent/extras/captain_agent_extras.py +44 -7
- waldiez/exporting/agent/extras/handoffs/condition.py +3 -1
- waldiez/exporting/chats/utils/common.py +25 -23
- waldiez/exporting/core/__init__.py +0 -2
- waldiez/exporting/core/context.py +13 -13
- waldiez/exporting/core/protocols.py +0 -141
- waldiez/exporting/core/result.py +5 -5
- waldiez/exporting/flow/merger.py +2 -2
- waldiez/exporting/flow/orchestrator.py +1 -0
- waldiez/exporting/flow/utils/common.py +2 -2
- waldiez/exporting/flow/utils/importing.py +1 -0
- waldiez/exporting/flow/utils/logging.py +6 -7
- waldiez/exporting/tools/exporter.py +5 -0
- waldiez/exporting/tools/factory.py +4 -0
- waldiez/exporting/tools/processor.py +5 -1
- waldiez/io/_ws.py +13 -5
- waldiez/io/models/content/image.py +1 -0
- waldiez/io/models/user_input.py +4 -4
- waldiez/io/models/user_response.py +1 -0
- waldiez/io/mqtt.py +1 -1
- waldiez/io/structured.py +17 -17
- waldiez/io/utils.py +1 -1
- waldiez/io/ws.py +9 -11
- waldiez/logger.py +180 -63
- waldiez/models/agents/agent/update_system_message.py +0 -2
- waldiez/models/agents/doc_agent/doc_agent.py +8 -1
- waldiez/models/common/dict_utils.py +169 -40
- waldiez/models/flow/flow.py +6 -6
- waldiez/models/flow/info.py +5 -1
- waldiez/models/model/_llm.py +28 -14
- waldiez/models/model/model.py +4 -1
- waldiez/models/model/model_data.py +18 -5
- waldiez/models/tool/predefined/_config.py +5 -1
- waldiez/models/tool/predefined/_duckduckgo.py +4 -0
- waldiez/models/tool/predefined/_email.py +474 -0
- waldiez/models/tool/predefined/_google.py +8 -6
- waldiez/models/tool/predefined/_perplexity.py +3 -0
- waldiez/models/tool/predefined/_searxng.py +3 -0
- waldiez/models/tool/predefined/_tavily.py +4 -1
- waldiez/models/tool/predefined/_wikipedia.py +4 -1
- waldiez/models/tool/predefined/_youtube.py +4 -1
- waldiez/models/tool/predefined/protocol.py +3 -0
- waldiez/models/tool/tool.py +22 -4
- waldiez/models/waldiez.py +12 -0
- waldiez/runner.py +37 -54
- waldiez/running/__init__.py +6 -0
- waldiez/running/base_runner.py +310 -353
- waldiez/running/environment.py +1 -0
- waldiez/running/exceptions.py +9 -0
- waldiez/running/post_run.py +4 -4
- waldiez/running/pre_run.py +51 -40
- waldiez/running/protocol.py +21 -101
- waldiez/running/run_results.py +1 -1
- waldiez/running/standard_runner.py +84 -277
- waldiez/running/step_by_step/__init__.py +46 -0
- waldiez/running/step_by_step/breakpoints_mixin.py +188 -0
- waldiez/running/step_by_step/step_by_step_models.py +224 -0
- waldiez/running/step_by_step/step_by_step_runner.py +745 -0
- waldiez/running/subprocess_runner/__base__.py +282 -0
- waldiez/running/subprocess_runner/__init__.py +16 -0
- waldiez/running/subprocess_runner/_async_runner.py +362 -0
- waldiez/running/subprocess_runner/_sync_runner.py +455 -0
- waldiez/running/subprocess_runner/runner.py +561 -0
- waldiez/running/timeline_processor.py +1 -1
- waldiez/running/utils.py +376 -1
- waldiez/utils/version.py +2 -6
- waldiez/ws/__init__.py +70 -0
- waldiez/ws/__main__.py +15 -0
- waldiez/ws/_file_handler.py +201 -0
- waldiez/ws/cli.py +211 -0
- waldiez/ws/client_manager.py +835 -0
- waldiez/ws/errors.py +416 -0
- waldiez/ws/models.py +971 -0
- waldiez/ws/reloader.py +342 -0
- waldiez/ws/server.py +469 -0
- waldiez/ws/session_manager.py +393 -0
- waldiez/ws/session_stats.py +83 -0
- waldiez/ws/utils.py +385 -0
- {waldiez-0.5.8.dist-info → waldiez-0.5.10.dist-info}/METADATA +74 -74
- {waldiez-0.5.8.dist-info → waldiez-0.5.10.dist-info}/RECORD +87 -65
- waldiez/running/patch_io_stream.py +0 -210
- {waldiez-0.5.8.dist-info → waldiez-0.5.10.dist-info}/WHEEL +0 -0
- {waldiez-0.5.8.dist-info → waldiez-0.5.10.dist-info}/entry_points.txt +0 -0
- {waldiez-0.5.8.dist-info → waldiez-0.5.10.dist-info}/licenses/LICENSE +0 -0
- {waldiez-0.5.8.dist-info → waldiez-0.5.10.dist-info}/licenses/NOTICE.md +0 -0
|
@@ -0,0 +1,188 @@
|
|
|
1
|
+
# SPDX-License-Identifier: Apache-2.0.
|
|
2
|
+
# Copyright (c) 2024 - 2025 Waldiez and contributors.
|
|
3
|
+
# pylint: disable=unused-argument
|
|
4
|
+
"""Breakpoints management mixin for step-by-step debugging."""
|
|
5
|
+
|
|
6
|
+
from typing import TYPE_CHECKING, Any, Iterable, Union
|
|
7
|
+
|
|
8
|
+
from .step_by_step_models import (
|
|
9
|
+
WaldiezDebugBreakpointAdded,
|
|
10
|
+
WaldiezDebugBreakpointCleared,
|
|
11
|
+
WaldiezDebugBreakpointRemoved,
|
|
12
|
+
WaldiezDebugBreakpointsList,
|
|
13
|
+
WaldiezDebugError,
|
|
14
|
+
WaldiezDebugMessage,
|
|
15
|
+
)
|
|
16
|
+
|
|
17
|
+
if TYPE_CHECKING:
|
|
18
|
+
from autogen.events import BaseEvent # type: ignore
|
|
19
|
+
from autogen.messages import BaseMessage # type: ignore
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
class BreakpointsMixin:
|
|
23
|
+
"""Mixin class for managing breakpoints in step-by-step debugging."""
|
|
24
|
+
|
|
25
|
+
def __init__(self, *args: Any, **kwargs: Any) -> None:
|
|
26
|
+
"""Initialize breakpoints storage."""
|
|
27
|
+
self._breakpoints: set[str] = set()
|
|
28
|
+
|
|
29
|
+
def emit(self, message: WaldiezDebugMessage) -> None:
|
|
30
|
+
"""Emit a debug message. Implemented by the class using this mixin.
|
|
31
|
+
|
|
32
|
+
Parameters
|
|
33
|
+
----------
|
|
34
|
+
message : WaldiezDebugMessage
|
|
35
|
+
The debug message to emit.
|
|
36
|
+
"""
|
|
37
|
+
raise NotImplementedError("emit method must be implemented")
|
|
38
|
+
|
|
39
|
+
def add_breakpoint(self, event_type: str) -> None:
|
|
40
|
+
"""Add a breakpoint for an event type.
|
|
41
|
+
|
|
42
|
+
Parameters
|
|
43
|
+
----------
|
|
44
|
+
event_type : str
|
|
45
|
+
The event type to add a breakpoint for.
|
|
46
|
+
"""
|
|
47
|
+
if not event_type or not isinstance(event_type, str): # pyright: ignore
|
|
48
|
+
self.emit(
|
|
49
|
+
WaldiezDebugError(
|
|
50
|
+
error="Invalid event type: must be a non-empty string"
|
|
51
|
+
)
|
|
52
|
+
)
|
|
53
|
+
return
|
|
54
|
+
|
|
55
|
+
self._breakpoints.add(event_type)
|
|
56
|
+
self.emit(WaldiezDebugBreakpointAdded(breakpoint=event_type))
|
|
57
|
+
|
|
58
|
+
def remove_breakpoint(self, event_type: str) -> bool:
|
|
59
|
+
"""Remove a breakpoint for an event type.
|
|
60
|
+
|
|
61
|
+
Parameters
|
|
62
|
+
----------
|
|
63
|
+
event_type : str
|
|
64
|
+
The event type to remove the breakpoint for.
|
|
65
|
+
|
|
66
|
+
Returns
|
|
67
|
+
-------
|
|
68
|
+
bool
|
|
69
|
+
True if the breakpoint was removed, False if it didn't exist.
|
|
70
|
+
"""
|
|
71
|
+
if not event_type or not isinstance(event_type, str): # pyright: ignore
|
|
72
|
+
self.emit(
|
|
73
|
+
WaldiezDebugError(
|
|
74
|
+
error="Invalid event type: must be a non-empty string"
|
|
75
|
+
)
|
|
76
|
+
)
|
|
77
|
+
return False
|
|
78
|
+
|
|
79
|
+
if event_type in self._breakpoints:
|
|
80
|
+
self._breakpoints.remove(event_type)
|
|
81
|
+
self.emit(WaldiezDebugBreakpointRemoved(breakpoint=event_type))
|
|
82
|
+
return True
|
|
83
|
+
self.emit(
|
|
84
|
+
WaldiezDebugError(
|
|
85
|
+
error=f"Breakpoint for '{event_type}' does not exist"
|
|
86
|
+
)
|
|
87
|
+
)
|
|
88
|
+
return False
|
|
89
|
+
|
|
90
|
+
def list_breakpoints(self) -> None:
|
|
91
|
+
"""List all current breakpoints."""
|
|
92
|
+
self.emit(
|
|
93
|
+
WaldiezDebugBreakpointsList(breakpoints=sorted(self._breakpoints))
|
|
94
|
+
)
|
|
95
|
+
|
|
96
|
+
def clear_breakpoints(self) -> None:
|
|
97
|
+
"""Clear all breakpoints."""
|
|
98
|
+
count = len(self._breakpoints)
|
|
99
|
+
self._breakpoints.clear()
|
|
100
|
+
if count > 0:
|
|
101
|
+
self.emit(
|
|
102
|
+
WaldiezDebugBreakpointCleared(
|
|
103
|
+
message=f"Cleared {count} breakpoint(s)"
|
|
104
|
+
)
|
|
105
|
+
)
|
|
106
|
+
|
|
107
|
+
def set_breakpoints(self, event_types: Iterable[str]) -> None:
|
|
108
|
+
"""Set which event types to break on.
|
|
109
|
+
|
|
110
|
+
Parameters
|
|
111
|
+
----------
|
|
112
|
+
event_types : Iterable[str]
|
|
113
|
+
Iterable of event types to break on. Empty means break on all.
|
|
114
|
+
"""
|
|
115
|
+
self._breakpoints = set(event_types)
|
|
116
|
+
|
|
117
|
+
def get_breakpoints(self) -> set[str]:
|
|
118
|
+
"""Get current breakpoints.
|
|
119
|
+
|
|
120
|
+
Returns
|
|
121
|
+
-------
|
|
122
|
+
set[str]
|
|
123
|
+
Set of current breakpoint event types.
|
|
124
|
+
"""
|
|
125
|
+
return self._breakpoints.copy()
|
|
126
|
+
|
|
127
|
+
def has_breakpoint(self, event_type: str) -> bool:
|
|
128
|
+
"""Check if a breakpoint exists for an event type.
|
|
129
|
+
|
|
130
|
+
Parameters
|
|
131
|
+
----------
|
|
132
|
+
event_type : str
|
|
133
|
+
The event type to check.
|
|
134
|
+
|
|
135
|
+
Returns
|
|
136
|
+
-------
|
|
137
|
+
bool
|
|
138
|
+
True if a breakpoint exists for this event type.
|
|
139
|
+
"""
|
|
140
|
+
return event_type in self._breakpoints
|
|
141
|
+
|
|
142
|
+
def should_break_on_event(
|
|
143
|
+
self, event: Union["BaseEvent", "BaseMessage"], step_mode: bool = True
|
|
144
|
+
) -> bool:
|
|
145
|
+
"""Determine if we should break on this event.
|
|
146
|
+
|
|
147
|
+
Parameters
|
|
148
|
+
----------
|
|
149
|
+
event : Union[BaseEvent, BaseMessage]
|
|
150
|
+
The event to check.
|
|
151
|
+
step_mode : bool, optional
|
|
152
|
+
Whether step mode is enabled, by default True.
|
|
153
|
+
|
|
154
|
+
Returns
|
|
155
|
+
-------
|
|
156
|
+
bool
|
|
157
|
+
True if we should break, False otherwise.
|
|
158
|
+
"""
|
|
159
|
+
if not step_mode:
|
|
160
|
+
return False
|
|
161
|
+
|
|
162
|
+
# Get event type
|
|
163
|
+
event_type = getattr(event, "type", "unknown")
|
|
164
|
+
|
|
165
|
+
# Don't break on input requests - they're handled separately
|
|
166
|
+
if event_type == "input_request":
|
|
167
|
+
return False
|
|
168
|
+
|
|
169
|
+
# If no specific breakpoints set, break on all events
|
|
170
|
+
if not self._breakpoints:
|
|
171
|
+
return True
|
|
172
|
+
|
|
173
|
+
# Check if this event type has a breakpoint
|
|
174
|
+
return event_type in self._breakpoints
|
|
175
|
+
|
|
176
|
+
def get_breakpoint_stats(self) -> dict[str, Any]:
|
|
177
|
+
"""Get breakpoint statistics.
|
|
178
|
+
|
|
179
|
+
Returns
|
|
180
|
+
-------
|
|
181
|
+
dict[str, Any]
|
|
182
|
+
Dictionary containing breakpoint statistics.
|
|
183
|
+
"""
|
|
184
|
+
return {
|
|
185
|
+
"total_breakpoints": len(self._breakpoints),
|
|
186
|
+
"breakpoints": sorted(self._breakpoints),
|
|
187
|
+
"has_breakpoints": len(self._breakpoints) > 0,
|
|
188
|
+
}
|
|
@@ -0,0 +1,224 @@
|
|
|
1
|
+
# SPDX-License-Identifier: Apache-2.0.
|
|
2
|
+
# Copyright (c) 2024 - 2025 Waldiez and contributors.
|
|
3
|
+
"""Step-by-step execution models for Waldiez."""
|
|
4
|
+
|
|
5
|
+
from enum import Enum
|
|
6
|
+
from typing import Annotated, Any, Dict, Literal, Union
|
|
7
|
+
|
|
8
|
+
from pydantic import BaseModel, Field
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
class WaldiezDebugStepAction(Enum):
|
|
12
|
+
"""Available actions during step-by-step execution."""
|
|
13
|
+
|
|
14
|
+
CONTINUE = "c" # Continue to next event
|
|
15
|
+
STEP = "s" # Step through (same as continue, but explicit)
|
|
16
|
+
RUN = "r" # Run without stopping (disable step mode)
|
|
17
|
+
QUIT = "q" # Quit execution
|
|
18
|
+
INFO = "i" # Show detailed event information
|
|
19
|
+
HELP = "h" # Show help
|
|
20
|
+
STATS = "st" # Show execution statistics
|
|
21
|
+
ADD_BREAKPOINT = "ab" # Add a breakpoint
|
|
22
|
+
REMOVE_BREAKPOINT = "rb" # Remove a breakpoint
|
|
23
|
+
LIST_BREAKPOINTS = "lb" # List all breakpoints
|
|
24
|
+
CLEAR_BREAKPOINTS = "cb" # Clear all breakpoints
|
|
25
|
+
UNKNOWN = "unknown" # Unknown command
|
|
26
|
+
|
|
27
|
+
|
|
28
|
+
VALID_CONTROL_COMMANDS = {
|
|
29
|
+
"", # continue/step (allow empty input)
|
|
30
|
+
"c", # continue
|
|
31
|
+
"r", # run
|
|
32
|
+
"s", # step
|
|
33
|
+
"h", # help
|
|
34
|
+
"q", # quit
|
|
35
|
+
"i", # info
|
|
36
|
+
"st", # stats
|
|
37
|
+
"ab", # add_breakpoint
|
|
38
|
+
"rb", # remove_breakpoint
|
|
39
|
+
"lb", # list_breakpoints
|
|
40
|
+
"cb", # clear_breakpoints
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
|
|
44
|
+
class WaldiezDebugHelpCommand(BaseModel):
|
|
45
|
+
"""Help command information."""
|
|
46
|
+
|
|
47
|
+
cmds: list[str] = Field(
|
|
48
|
+
default_factory=list, description="List of command aliases"
|
|
49
|
+
)
|
|
50
|
+
desc: str
|
|
51
|
+
|
|
52
|
+
|
|
53
|
+
class WaldiezDebugHelpCommandGroup(BaseModel):
|
|
54
|
+
"""Help command group information."""
|
|
55
|
+
|
|
56
|
+
title: str
|
|
57
|
+
commands: list[WaldiezDebugHelpCommand]
|
|
58
|
+
|
|
59
|
+
|
|
60
|
+
class WaldiezDebugPrint(BaseModel):
|
|
61
|
+
"""Debug print message."""
|
|
62
|
+
|
|
63
|
+
type: Literal["debug_print"] = "debug_print"
|
|
64
|
+
content: str
|
|
65
|
+
|
|
66
|
+
|
|
67
|
+
class WaldiezDebugInputRequest(BaseModel):
|
|
68
|
+
"""Debug input request message."""
|
|
69
|
+
|
|
70
|
+
type: Literal["debug_input_request"] = "debug_input_request"
|
|
71
|
+
prompt: str
|
|
72
|
+
request_id: str
|
|
73
|
+
|
|
74
|
+
|
|
75
|
+
class WaldiezDebugInputResponse(BaseModel):
|
|
76
|
+
"""Debug input response message."""
|
|
77
|
+
|
|
78
|
+
type: Literal["debug_input_response"] = "debug_input_response"
|
|
79
|
+
request_id: str
|
|
80
|
+
data: str
|
|
81
|
+
|
|
82
|
+
|
|
83
|
+
class WaldiezDebugEventInfo(BaseModel):
|
|
84
|
+
"""Debug event info message."""
|
|
85
|
+
|
|
86
|
+
type: Literal["debug_event_info"] = "debug_event_info"
|
|
87
|
+
event: Dict[str, Any]
|
|
88
|
+
|
|
89
|
+
|
|
90
|
+
class WaldiezDebugStats(BaseModel):
|
|
91
|
+
"""Debug stats message."""
|
|
92
|
+
|
|
93
|
+
type: Literal["debug_stats"] = "debug_stats"
|
|
94
|
+
stats: Dict[str, Any]
|
|
95
|
+
|
|
96
|
+
|
|
97
|
+
class WaldiezDebugHelp(BaseModel):
|
|
98
|
+
"""Debug help message."""
|
|
99
|
+
|
|
100
|
+
type: Literal["debug_help"] = "debug_help"
|
|
101
|
+
help: list[WaldiezDebugHelpCommandGroup]
|
|
102
|
+
|
|
103
|
+
|
|
104
|
+
class WaldiezDebugError(BaseModel):
|
|
105
|
+
"""Debug error message."""
|
|
106
|
+
|
|
107
|
+
type: Literal["debug_error"] = "debug_error"
|
|
108
|
+
error: str
|
|
109
|
+
|
|
110
|
+
|
|
111
|
+
class WaldiezDebugBreakpointsList(BaseModel):
|
|
112
|
+
"""Debug breakpoints message."""
|
|
113
|
+
|
|
114
|
+
type: Literal["debug_breakpoints_list"] = "debug_breakpoints_list"
|
|
115
|
+
breakpoints: list[str] # Event types
|
|
116
|
+
# Optional: Could extend to include agent+event combinations
|
|
117
|
+
|
|
118
|
+
|
|
119
|
+
class WaldiezDebugBreakpointAdded(BaseModel):
|
|
120
|
+
"""Debug breakpoint added message."""
|
|
121
|
+
|
|
122
|
+
type: Literal["debug_breakpoint_added"] = "debug_breakpoint_added"
|
|
123
|
+
breakpoint: str
|
|
124
|
+
|
|
125
|
+
|
|
126
|
+
class WaldiezDebugBreakpointRemoved(BaseModel):
|
|
127
|
+
"""Debug breakpoint removed message."""
|
|
128
|
+
|
|
129
|
+
type: Literal["debug_breakpoint_removed"] = "debug_breakpoint_removed"
|
|
130
|
+
breakpoint: str
|
|
131
|
+
|
|
132
|
+
|
|
133
|
+
class WaldiezDebugBreakpointCleared(BaseModel):
|
|
134
|
+
"""Debug breakpoint cleared message."""
|
|
135
|
+
|
|
136
|
+
type: Literal["debug_breakpoint_cleared"] = "debug_breakpoint_cleared"
|
|
137
|
+
message: str
|
|
138
|
+
|
|
139
|
+
|
|
140
|
+
WaldiezDebugMessage = Annotated[
|
|
141
|
+
Union[
|
|
142
|
+
WaldiezDebugPrint,
|
|
143
|
+
WaldiezDebugInputRequest,
|
|
144
|
+
WaldiezDebugInputResponse,
|
|
145
|
+
WaldiezDebugEventInfo,
|
|
146
|
+
WaldiezDebugStats,
|
|
147
|
+
WaldiezDebugHelp,
|
|
148
|
+
WaldiezDebugError,
|
|
149
|
+
WaldiezDebugBreakpointsList,
|
|
150
|
+
WaldiezDebugBreakpointAdded,
|
|
151
|
+
WaldiezDebugBreakpointRemoved,
|
|
152
|
+
WaldiezDebugBreakpointCleared,
|
|
153
|
+
],
|
|
154
|
+
Field(discriminator="type"),
|
|
155
|
+
]
|
|
156
|
+
|
|
157
|
+
|
|
158
|
+
class WaldiezDebugMessageWrapper(BaseModel):
|
|
159
|
+
"""Wrapper for debug messages."""
|
|
160
|
+
|
|
161
|
+
# noinspection PyTypeHints
|
|
162
|
+
message: WaldiezDebugMessage
|
|
163
|
+
|
|
164
|
+
|
|
165
|
+
HELP_MESSAGE = WaldiezDebugHelp(
|
|
166
|
+
help=[
|
|
167
|
+
WaldiezDebugHelpCommandGroup(
|
|
168
|
+
title="Commands",
|
|
169
|
+
commands=[
|
|
170
|
+
WaldiezDebugHelpCommand(
|
|
171
|
+
cmds=["continue", "c"], desc="Continue to the next step."
|
|
172
|
+
),
|
|
173
|
+
WaldiezDebugHelpCommand(
|
|
174
|
+
cmds=["step", "s"], desc="Step through the next event."
|
|
175
|
+
),
|
|
176
|
+
WaldiezDebugHelpCommand(
|
|
177
|
+
cmds=["run", "r"], desc="Run without stopping."
|
|
178
|
+
),
|
|
179
|
+
WaldiezDebugHelpCommand(
|
|
180
|
+
cmds=["quit", "q"], desc="Quit the debugger."
|
|
181
|
+
),
|
|
182
|
+
WaldiezDebugHelpCommand(
|
|
183
|
+
cmds=["info", "i"], desc="Show detailed event information."
|
|
184
|
+
),
|
|
185
|
+
WaldiezDebugHelpCommand(
|
|
186
|
+
cmds=["help", "h"], desc="Show this help message."
|
|
187
|
+
),
|
|
188
|
+
WaldiezDebugHelpCommand(
|
|
189
|
+
cmds=["stats", "st"], desc="Show execution statistics."
|
|
190
|
+
),
|
|
191
|
+
WaldiezDebugHelpCommand(
|
|
192
|
+
cmds=["add_breakpoint", "ab"],
|
|
193
|
+
desc="Add breakpoint for event type.",
|
|
194
|
+
),
|
|
195
|
+
WaldiezDebugHelpCommand(
|
|
196
|
+
cmds=["remove_breakpoint", "rb"],
|
|
197
|
+
desc="Remove breakpoint for event type.",
|
|
198
|
+
),
|
|
199
|
+
WaldiezDebugHelpCommand(
|
|
200
|
+
cmds=["list_breakpoints", "lb"],
|
|
201
|
+
desc="List all breakpoints.",
|
|
202
|
+
),
|
|
203
|
+
WaldiezDebugHelpCommand(
|
|
204
|
+
cmds=["clear_breakpoints", "cb"],
|
|
205
|
+
desc="Clear all breakpoints.",
|
|
206
|
+
),
|
|
207
|
+
],
|
|
208
|
+
),
|
|
209
|
+
WaldiezDebugHelpCommandGroup(
|
|
210
|
+
title="Tips",
|
|
211
|
+
commands=[
|
|
212
|
+
WaldiezDebugHelpCommand(
|
|
213
|
+
desc="Press Enter alone to continue (same as 'c')"
|
|
214
|
+
),
|
|
215
|
+
WaldiezDebugHelpCommand(
|
|
216
|
+
desc="Use (s)tep to go through events one by one."
|
|
217
|
+
),
|
|
218
|
+
WaldiezDebugHelpCommand(
|
|
219
|
+
desc="Use (r)un to continue without stopping."
|
|
220
|
+
),
|
|
221
|
+
],
|
|
222
|
+
),
|
|
223
|
+
]
|
|
224
|
+
)
|