@autoweb/domain-models 1.0.0
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.
- package/README.md +100 -0
- package/index.d.ts +594 -0
- package/index.js +3 -0
- package/package.json +55 -0
- package/python-models/__init__.py +68 -0
- package/python-models/action-configs.py +1112 -0
- package/python-models/build/lib/floweb_models/__init__.py +194 -0
- package/python-models/build/lib/floweb_models/action_configs.py +783 -0
- package/python-models/build/lib/floweb_models/debug.py +209 -0
- package/python-models/build/lib/floweb_models/debug_models.py +141 -0
- package/python-models/build/lib/floweb_models/environment.py +158 -0
- package/python-models/build/lib/floweb_models/execution_results.py +208 -0
- package/python-models/build/lib/floweb_models/flow.py +345 -0
- package/python-models/build/lib/floweb_models/flow_validation.py +316 -0
- package/python-models/build/lib/floweb_models/parallel_execution.py +258 -0
- package/python-models/build/lib/floweb_models/performance_test.py +605 -0
- package/python-models/build/lib/floweb_models/websocket_communication.py +697 -0
- package/python-models/debug.py +209 -0
- package/python-models/dist/floweb_domain_models-1.0.0-py3-none-any.whl +0 -0
- package/python-models/environment.py +158 -0
- package/python-models/execution-results.py +208 -0
- package/python-models/flow-validation.py +316 -0
- package/python-models/flow.py +369 -0
- package/python-models/floweb_domain_models.egg-info/PKG-INFO +9 -0
- package/python-models/floweb_domain_models.egg-info/SOURCES.txt +16 -0
- package/python-models/floweb_domain_models.egg-info/dependency_links.txt +1 -0
- package/python-models/floweb_domain_models.egg-info/requires.txt +1 -0
- package/python-models/floweb_domain_models.egg-info/top_level.txt +1 -0
- package/python-models/floweb_models/__init__.py +194 -0
- package/python-models/floweb_models/__pycache__/__init__.cpython-312.pyc +0 -0
- package/python-models/floweb_models/__pycache__/action_configs.cpython-312.pyc +0 -0
- package/python-models/floweb_models/__pycache__/debug.cpython-312.pyc +0 -0
- package/python-models/floweb_models/__pycache__/debug_models.cpython-312.pyc +0 -0
- package/python-models/floweb_models/__pycache__/environment.cpython-312.pyc +0 -0
- package/python-models/floweb_models/__pycache__/execution_results.cpython-312.pyc +0 -0
- package/python-models/floweb_models/__pycache__/flow.cpython-312.pyc +0 -0
- package/python-models/floweb_models/__pycache__/flow_validation.cpython-312.pyc +0 -0
- package/python-models/floweb_models/__pycache__/parallel_execution.cpython-312.pyc +0 -0
- package/python-models/floweb_models/__pycache__/performance_test.cpython-312.pyc +0 -0
- package/python-models/floweb_models/__pycache__/websocket_communication.cpython-312.pyc +0 -0
- package/python-models/floweb_models/action_configs.py +1062 -0
- package/python-models/floweb_models/debug.py +209 -0
- package/python-models/floweb_models/debug_models.py +141 -0
- package/python-models/floweb_models/environment.py +158 -0
- package/python-models/floweb_models/execution_results.py +208 -0
- package/python-models/floweb_models/flow.py +345 -0
- package/python-models/floweb_models/flow_validation.py +316 -0
- package/python-models/floweb_models/parallel_execution.py +229 -0
- package/python-models/floweb_models/performance_test.py +605 -0
- package/python-models/floweb_models/websocket_communication.py +697 -0
- package/python-models/floweb_models.egg-info/PKG-INFO +9 -0
- package/python-models/floweb_models.egg-info/SOURCES.txt +16 -0
- package/python-models/floweb_models.egg-info/dependency_links.txt +1 -0
- package/python-models/floweb_models.egg-info/requires.txt +1 -0
- package/python-models/floweb_models.egg-info/top_level.txt +1 -0
- package/python-models/parallel-execution.py +475 -0
- package/python-models/performance-test.py +605 -0
- package/python-models/setup.py +13 -0
- package/python-models/websocket-communication.py +697 -0
- package/schemas/action-configs.json +1501 -0
- package/schemas/debug.json +203 -0
- package/schemas/environment.json +165 -0
- package/schemas/execution-results.json +209 -0
- package/schemas/flow-validation.json +311 -0
- package/schemas/flow.json +381 -0
- package/schemas/parallel-execution.json +219 -0
- package/schemas/performance-test.json +600 -0
- package/schemas/websocket-communication.json +1118 -0
|
@@ -0,0 +1,209 @@
|
|
|
1
|
+
# generated by datamodel-codegen:
|
|
2
|
+
# filename: debug.json
|
|
3
|
+
# timestamp: 2026-02-04T16:19:32+00:00
|
|
4
|
+
|
|
5
|
+
from __future__ import annotations
|
|
6
|
+
|
|
7
|
+
from enum import StrEnum
|
|
8
|
+
from typing import Any
|
|
9
|
+
|
|
10
|
+
from pydantic import BaseModel, ConfigDict
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
class DebugModels(BaseModel):
|
|
14
|
+
"""
|
|
15
|
+
Schema for debug session management, states, and execution control
|
|
16
|
+
"""
|
|
17
|
+
|
|
18
|
+
model_config = ConfigDict(
|
|
19
|
+
populate_by_name=True,
|
|
20
|
+
)
|
|
21
|
+
|
|
22
|
+
|
|
23
|
+
class DebugState(StrEnum):
|
|
24
|
+
"""
|
|
25
|
+
Debug session states following the state machine specification
|
|
26
|
+
"""
|
|
27
|
+
|
|
28
|
+
ready = 'ready'
|
|
29
|
+
running = 'running'
|
|
30
|
+
paused = 'paused'
|
|
31
|
+
stepping = 'stepping'
|
|
32
|
+
completed = 'completed'
|
|
33
|
+
error = 'error'
|
|
34
|
+
stopped = 'stopped'
|
|
35
|
+
|
|
36
|
+
|
|
37
|
+
class PauseReason(StrEnum):
|
|
38
|
+
"""
|
|
39
|
+
Reasons for debug execution pause
|
|
40
|
+
"""
|
|
41
|
+
|
|
42
|
+
breakpoint = 'breakpoint'
|
|
43
|
+
manual = 'manual'
|
|
44
|
+
error = 'error'
|
|
45
|
+
step = 'step'
|
|
46
|
+
|
|
47
|
+
|
|
48
|
+
class Breakpoint(BaseModel):
|
|
49
|
+
"""
|
|
50
|
+
Represents a breakpoint in debug execution
|
|
51
|
+
"""
|
|
52
|
+
|
|
53
|
+
model_config = ConfigDict(
|
|
54
|
+
populate_by_name=True,
|
|
55
|
+
)
|
|
56
|
+
nodeId: str
|
|
57
|
+
"""
|
|
58
|
+
Action/node ID where breakpoint is set
|
|
59
|
+
"""
|
|
60
|
+
enabled: bool
|
|
61
|
+
"""
|
|
62
|
+
Whether the breakpoint is active
|
|
63
|
+
"""
|
|
64
|
+
hitCount: int | None = 0
|
|
65
|
+
"""
|
|
66
|
+
Number of times this breakpoint has been hit
|
|
67
|
+
"""
|
|
68
|
+
|
|
69
|
+
|
|
70
|
+
class DebugExecutionInfo(BaseModel):
|
|
71
|
+
"""
|
|
72
|
+
Information about current debug execution state
|
|
73
|
+
"""
|
|
74
|
+
|
|
75
|
+
model_config = ConfigDict(
|
|
76
|
+
populate_by_name=True,
|
|
77
|
+
)
|
|
78
|
+
currentNodeId: str | None
|
|
79
|
+
"""
|
|
80
|
+
ID of the action currently being executed or about to execute
|
|
81
|
+
"""
|
|
82
|
+
currentActionIndex: int
|
|
83
|
+
"""
|
|
84
|
+
Zero-based index of current action in execution order
|
|
85
|
+
"""
|
|
86
|
+
totalActions: int
|
|
87
|
+
"""
|
|
88
|
+
Total number of actions in the flow
|
|
89
|
+
"""
|
|
90
|
+
executedActions: list[str]
|
|
91
|
+
"""
|
|
92
|
+
List of action IDs that have been executed
|
|
93
|
+
"""
|
|
94
|
+
nextBreakpoint: str | None
|
|
95
|
+
"""
|
|
96
|
+
ID of the next breakpoint that will be hit
|
|
97
|
+
"""
|
|
98
|
+
|
|
99
|
+
|
|
100
|
+
class DebugSession(BaseModel):
|
|
101
|
+
"""
|
|
102
|
+
Represents a single debug execution session
|
|
103
|
+
"""
|
|
104
|
+
|
|
105
|
+
model_config = ConfigDict(
|
|
106
|
+
populate_by_name=True,
|
|
107
|
+
)
|
|
108
|
+
sessionId: str
|
|
109
|
+
"""
|
|
110
|
+
Unique identifier for the debug session
|
|
111
|
+
"""
|
|
112
|
+
flowId: str
|
|
113
|
+
"""
|
|
114
|
+
ID of the flow being debugged
|
|
115
|
+
"""
|
|
116
|
+
breakpoints: list[str]
|
|
117
|
+
"""
|
|
118
|
+
Set of action IDs where execution should pause
|
|
119
|
+
"""
|
|
120
|
+
state: DebugState
|
|
121
|
+
currentActionId: str | None = None
|
|
122
|
+
"""
|
|
123
|
+
ID of the action currently being executed or about to execute
|
|
124
|
+
"""
|
|
125
|
+
currentActionIndex: int | None = 0
|
|
126
|
+
"""
|
|
127
|
+
Zero-based index of current action in execution order
|
|
128
|
+
"""
|
|
129
|
+
executedActions: list[str] | None = []
|
|
130
|
+
"""
|
|
131
|
+
List of action IDs that have been executed
|
|
132
|
+
"""
|
|
133
|
+
pauseRequested: bool | None = False
|
|
134
|
+
"""
|
|
135
|
+
Flag indicating manual pause was requested
|
|
136
|
+
"""
|
|
137
|
+
stopRequested: bool | None = False
|
|
138
|
+
"""
|
|
139
|
+
Flag indicating stop was requested
|
|
140
|
+
"""
|
|
141
|
+
createdAt: float | None = None
|
|
142
|
+
"""
|
|
143
|
+
Timestamp when session was created (Unix timestamp)
|
|
144
|
+
"""
|
|
145
|
+
lastUpdated: float | None = None
|
|
146
|
+
"""
|
|
147
|
+
Timestamp of last state change (Unix timestamp)
|
|
148
|
+
"""
|
|
149
|
+
|
|
150
|
+
|
|
151
|
+
class Type(StrEnum):
|
|
152
|
+
"""
|
|
153
|
+
Type of debug update
|
|
154
|
+
"""
|
|
155
|
+
|
|
156
|
+
debug_action_started = 'debug_action_started'
|
|
157
|
+
debug_action_completed = 'debug_action_completed'
|
|
158
|
+
debug_action_failed = 'debug_action_failed'
|
|
159
|
+
debug_paused = 'debug_paused'
|
|
160
|
+
debug_resumed = 'debug_resumed'
|
|
161
|
+
debug_completed = 'debug_completed'
|
|
162
|
+
debug_stopped = 'debug_stopped'
|
|
163
|
+
debug_error = 'debug_error'
|
|
164
|
+
|
|
165
|
+
|
|
166
|
+
class DebugActionUpdate(BaseModel):
|
|
167
|
+
"""
|
|
168
|
+
Real-time update sent during debug execution
|
|
169
|
+
"""
|
|
170
|
+
|
|
171
|
+
model_config = ConfigDict(
|
|
172
|
+
populate_by_name=True,
|
|
173
|
+
)
|
|
174
|
+
type: Type
|
|
175
|
+
"""
|
|
176
|
+
Type of debug update
|
|
177
|
+
"""
|
|
178
|
+
sessionId: str
|
|
179
|
+
"""
|
|
180
|
+
Debug session ID
|
|
181
|
+
"""
|
|
182
|
+
actionId: str | None = None
|
|
183
|
+
"""
|
|
184
|
+
Action ID related to this update
|
|
185
|
+
"""
|
|
186
|
+
actionIndex: int | None = None
|
|
187
|
+
"""
|
|
188
|
+
Index of the action in execution order
|
|
189
|
+
"""
|
|
190
|
+
state: DebugState
|
|
191
|
+
"""
|
|
192
|
+
Current debug state
|
|
193
|
+
"""
|
|
194
|
+
pauseReason: PauseReason | None = None
|
|
195
|
+
"""
|
|
196
|
+
Reason for pause if state is paused
|
|
197
|
+
"""
|
|
198
|
+
result: dict[str, Any] | None = None
|
|
199
|
+
"""
|
|
200
|
+
Action execution result if available
|
|
201
|
+
"""
|
|
202
|
+
error: str | None = None
|
|
203
|
+
"""
|
|
204
|
+
Error message if action failed
|
|
205
|
+
"""
|
|
206
|
+
variables: dict[str, Any] | None = None
|
|
207
|
+
"""
|
|
208
|
+
Current flow variables state
|
|
209
|
+
"""
|
|
Binary file
|
|
@@ -0,0 +1,158 @@
|
|
|
1
|
+
# generated by datamodel-codegen:
|
|
2
|
+
# filename: environment.json
|
|
3
|
+
# timestamp: 2026-02-04T16:19:28+00:00
|
|
4
|
+
|
|
5
|
+
from __future__ import annotations
|
|
6
|
+
|
|
7
|
+
from enum import StrEnum
|
|
8
|
+
from typing import Annotated
|
|
9
|
+
|
|
10
|
+
from pydantic import AwareDatetime, BaseModel, ConfigDict, Field
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
class Type(StrEnum):
|
|
14
|
+
"""
|
|
15
|
+
Data type of the variable
|
|
16
|
+
"""
|
|
17
|
+
|
|
18
|
+
string = 'string'
|
|
19
|
+
number = 'number'
|
|
20
|
+
boolean = 'boolean'
|
|
21
|
+
url = 'url'
|
|
22
|
+
file = 'file'
|
|
23
|
+
json = 'json'
|
|
24
|
+
array = 'array'
|
|
25
|
+
|
|
26
|
+
|
|
27
|
+
class GlobalVariable(BaseModel):
|
|
28
|
+
"""
|
|
29
|
+
A global variable available across all environments
|
|
30
|
+
"""
|
|
31
|
+
|
|
32
|
+
model_config = ConfigDict(
|
|
33
|
+
populate_by_name=True,
|
|
34
|
+
)
|
|
35
|
+
id: Annotated[str, Field(max_length=50, min_length=1, pattern='^[a-zA-Z0-9_-]+$')]
|
|
36
|
+
"""
|
|
37
|
+
Unique identifier for the global variable
|
|
38
|
+
"""
|
|
39
|
+
name: Annotated[
|
|
40
|
+
str, Field(max_length=50, min_length=1, pattern='^[a-zA-Z_][a-zA-Z0-9_]*$')
|
|
41
|
+
]
|
|
42
|
+
"""
|
|
43
|
+
Variable name used in flows
|
|
44
|
+
"""
|
|
45
|
+
value: Annotated[str, Field(max_length=10000, min_length=0)]
|
|
46
|
+
"""
|
|
47
|
+
The variable's value
|
|
48
|
+
"""
|
|
49
|
+
type: Type
|
|
50
|
+
"""
|
|
51
|
+
Data type of the variable
|
|
52
|
+
"""
|
|
53
|
+
description: Annotated[str | None, Field(max_length=500)] = None
|
|
54
|
+
"""
|
|
55
|
+
Description of the variable's purpose
|
|
56
|
+
"""
|
|
57
|
+
createdAt: AwareDatetime
|
|
58
|
+
"""
|
|
59
|
+
ISO 8601 timestamp when the variable was created
|
|
60
|
+
"""
|
|
61
|
+
updatedAt: AwareDatetime
|
|
62
|
+
"""
|
|
63
|
+
ISO 8601 timestamp when the variable was last updated
|
|
64
|
+
"""
|
|
65
|
+
|
|
66
|
+
|
|
67
|
+
class Variable(BaseModel):
|
|
68
|
+
"""
|
|
69
|
+
An environment-specific variable
|
|
70
|
+
"""
|
|
71
|
+
|
|
72
|
+
model_config = ConfigDict(
|
|
73
|
+
populate_by_name=True,
|
|
74
|
+
)
|
|
75
|
+
id: Annotated[str, Field(max_length=50, min_length=1, pattern='^[a-zA-Z0-9_-]+$')]
|
|
76
|
+
"""
|
|
77
|
+
Unique identifier for the variable within this environment
|
|
78
|
+
"""
|
|
79
|
+
name: Annotated[
|
|
80
|
+
str, Field(max_length=50, min_length=1, pattern='^[a-zA-Z_][a-zA-Z0-9_]*$')
|
|
81
|
+
]
|
|
82
|
+
"""
|
|
83
|
+
Variable name used in flows
|
|
84
|
+
"""
|
|
85
|
+
value: Annotated[str, Field(max_length=10000, min_length=0)]
|
|
86
|
+
"""
|
|
87
|
+
The variable's value
|
|
88
|
+
"""
|
|
89
|
+
type: Type
|
|
90
|
+
"""
|
|
91
|
+
Data type of the variable
|
|
92
|
+
"""
|
|
93
|
+
description: Annotated[str | None, Field(max_length=500)] = None
|
|
94
|
+
"""
|
|
95
|
+
Description of the variable's purpose
|
|
96
|
+
"""
|
|
97
|
+
|
|
98
|
+
|
|
99
|
+
class Environment(BaseModel):
|
|
100
|
+
"""
|
|
101
|
+
An environment configuration with its variables
|
|
102
|
+
"""
|
|
103
|
+
|
|
104
|
+
model_config = ConfigDict(
|
|
105
|
+
populate_by_name=True,
|
|
106
|
+
)
|
|
107
|
+
id: Annotated[str, Field(max_length=50, min_length=1, pattern='^[a-zA-Z0-9_-]+$')]
|
|
108
|
+
"""
|
|
109
|
+
Unique identifier for the environment
|
|
110
|
+
"""
|
|
111
|
+
name: Annotated[str, Field(max_length=100, min_length=1)]
|
|
112
|
+
"""
|
|
113
|
+
Display name for the environment
|
|
114
|
+
"""
|
|
115
|
+
description: Annotated[str | None, Field(max_length=500)] = None
|
|
116
|
+
"""
|
|
117
|
+
Description of the environment's purpose
|
|
118
|
+
"""
|
|
119
|
+
variables: Annotated[list[Variable], Field(min_length=0)]
|
|
120
|
+
"""
|
|
121
|
+
Environment-specific variables
|
|
122
|
+
"""
|
|
123
|
+
isDefault: bool
|
|
124
|
+
"""
|
|
125
|
+
Whether this is the default environment
|
|
126
|
+
"""
|
|
127
|
+
createdAt: AwareDatetime
|
|
128
|
+
"""
|
|
129
|
+
ISO 8601 timestamp when the environment was created
|
|
130
|
+
"""
|
|
131
|
+
updatedAt: AwareDatetime
|
|
132
|
+
"""
|
|
133
|
+
ISO 8601 timestamp when the environment was last updated
|
|
134
|
+
"""
|
|
135
|
+
|
|
136
|
+
|
|
137
|
+
class EnvironmentAndGlobalVariablesConfiguration(BaseModel):
|
|
138
|
+
"""
|
|
139
|
+
Schema for environment configurations and global variables used in Floweb automation flows
|
|
140
|
+
"""
|
|
141
|
+
|
|
142
|
+
model_config = ConfigDict(
|
|
143
|
+
populate_by_name=True,
|
|
144
|
+
)
|
|
145
|
+
environments: Annotated[list[Environment], Field(min_length=0)]
|
|
146
|
+
"""
|
|
147
|
+
List of available environments
|
|
148
|
+
"""
|
|
149
|
+
globalVariables: Annotated[list[GlobalVariable], Field(min_length=0)]
|
|
150
|
+
"""
|
|
151
|
+
List of global variables available across all environments
|
|
152
|
+
"""
|
|
153
|
+
selectedEnvironmentId: Annotated[str | None, Field(pattern='^[a-zA-Z0-9_-]+$')] = (
|
|
154
|
+
None
|
|
155
|
+
)
|
|
156
|
+
"""
|
|
157
|
+
ID of the currently selected environment
|
|
158
|
+
"""
|
|
@@ -0,0 +1,208 @@
|
|
|
1
|
+
# generated by datamodel-codegen:
|
|
2
|
+
# filename: execution-results.json
|
|
3
|
+
# timestamp: 2026-02-04T16:19:31+00:00
|
|
4
|
+
|
|
5
|
+
from __future__ import annotations
|
|
6
|
+
|
|
7
|
+
from typing import Annotated, Any
|
|
8
|
+
|
|
9
|
+
from pydantic import BaseModel, ConfigDict, Field
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
class ActionResult(BaseModel):
|
|
13
|
+
"""
|
|
14
|
+
Result of executing an action
|
|
15
|
+
"""
|
|
16
|
+
|
|
17
|
+
model_config = ConfigDict(
|
|
18
|
+
populate_by_name=True,
|
|
19
|
+
)
|
|
20
|
+
node_id: str
|
|
21
|
+
"""
|
|
22
|
+
Action node ID
|
|
23
|
+
"""
|
|
24
|
+
action_type: str
|
|
25
|
+
"""
|
|
26
|
+
Type of action executed
|
|
27
|
+
"""
|
|
28
|
+
config: dict[str, Any]
|
|
29
|
+
"""
|
|
30
|
+
Action configuration used
|
|
31
|
+
"""
|
|
32
|
+
start_time: int
|
|
33
|
+
"""
|
|
34
|
+
Start timestamp in milliseconds
|
|
35
|
+
"""
|
|
36
|
+
end_time: int
|
|
37
|
+
"""
|
|
38
|
+
End timestamp in milliseconds
|
|
39
|
+
"""
|
|
40
|
+
duration_seconds: Annotated[float, Field(ge=0.0)]
|
|
41
|
+
"""
|
|
42
|
+
Duration in seconds
|
|
43
|
+
"""
|
|
44
|
+
success: bool
|
|
45
|
+
"""
|
|
46
|
+
Whether the action succeeded
|
|
47
|
+
"""
|
|
48
|
+
message: str
|
|
49
|
+
"""
|
|
50
|
+
Result message
|
|
51
|
+
"""
|
|
52
|
+
error: str | None = None
|
|
53
|
+
"""
|
|
54
|
+
Error message if failed
|
|
55
|
+
"""
|
|
56
|
+
screenshot: str | None = None
|
|
57
|
+
"""
|
|
58
|
+
Base64 screenshot if taken
|
|
59
|
+
"""
|
|
60
|
+
data: dict[str, Any] | None = None
|
|
61
|
+
"""
|
|
62
|
+
Additional action-specific data
|
|
63
|
+
"""
|
|
64
|
+
|
|
65
|
+
|
|
66
|
+
class Parameters(BaseModel):
|
|
67
|
+
"""
|
|
68
|
+
Parameters used during execution (input/output)
|
|
69
|
+
"""
|
|
70
|
+
|
|
71
|
+
model_config = ConfigDict(
|
|
72
|
+
populate_by_name=True,
|
|
73
|
+
)
|
|
74
|
+
input: list[dict[str, Any]] | None = []
|
|
75
|
+
output: list[dict[str, Any]] | None = []
|
|
76
|
+
|
|
77
|
+
|
|
78
|
+
class BrowserInfo(BaseModel):
|
|
79
|
+
"""
|
|
80
|
+
Browser information
|
|
81
|
+
"""
|
|
82
|
+
|
|
83
|
+
model_config = ConfigDict(
|
|
84
|
+
populate_by_name=True,
|
|
85
|
+
)
|
|
86
|
+
name: str | None = None
|
|
87
|
+
version: str | None = None
|
|
88
|
+
user_agent: str | None = None
|
|
89
|
+
|
|
90
|
+
|
|
91
|
+
class PerformanceMetrics(BaseModel):
|
|
92
|
+
"""
|
|
93
|
+
Performance metrics collected during execution
|
|
94
|
+
"""
|
|
95
|
+
|
|
96
|
+
model_config = ConfigDict(
|
|
97
|
+
populate_by_name=True,
|
|
98
|
+
)
|
|
99
|
+
total_actions: Annotated[int | None, Field(ge=0)] = None
|
|
100
|
+
successful_actions: Annotated[int | None, Field(ge=0)] = None
|
|
101
|
+
failed_actions: Annotated[int | None, Field(ge=0)] = None
|
|
102
|
+
average_action_time: Annotated[float | None, Field(ge=0.0)] = None
|
|
103
|
+
total_network_requests: Annotated[int | None, Field(ge=0)] = None
|
|
104
|
+
total_data_transferred: Annotated[int | None, Field(ge=0)] = None
|
|
105
|
+
|
|
106
|
+
|
|
107
|
+
class FlowReport(BaseModel):
|
|
108
|
+
"""
|
|
109
|
+
Complete report of flow execution
|
|
110
|
+
"""
|
|
111
|
+
|
|
112
|
+
model_config = ConfigDict(
|
|
113
|
+
populate_by_name=True,
|
|
114
|
+
)
|
|
115
|
+
actions: list[ActionResult]
|
|
116
|
+
"""
|
|
117
|
+
Results of all actions
|
|
118
|
+
"""
|
|
119
|
+
variables: dict[str, list[dict[str, Any]]]
|
|
120
|
+
"""
|
|
121
|
+
Variables used during execution (input/output)
|
|
122
|
+
"""
|
|
123
|
+
parameters: Annotated[
|
|
124
|
+
Parameters,
|
|
125
|
+
Field(
|
|
126
|
+
default_factory=lambda: Parameters.model_validate(
|
|
127
|
+
{'input': [], 'output': []}
|
|
128
|
+
)
|
|
129
|
+
),
|
|
130
|
+
]
|
|
131
|
+
"""
|
|
132
|
+
Parameters used during execution (input/output)
|
|
133
|
+
"""
|
|
134
|
+
output: dict[str, Any]
|
|
135
|
+
"""
|
|
136
|
+
Final output
|
|
137
|
+
"""
|
|
138
|
+
recording: str | None = None
|
|
139
|
+
"""
|
|
140
|
+
Recording data (deprecated, use recording_file instead)
|
|
141
|
+
"""
|
|
142
|
+
recording_file: str | None = None
|
|
143
|
+
"""
|
|
144
|
+
Path to the recording file on the server
|
|
145
|
+
"""
|
|
146
|
+
recording_duration: Annotated[float | None, Field(ge=0.0)] = None
|
|
147
|
+
"""
|
|
148
|
+
Duration of the recording in seconds
|
|
149
|
+
"""
|
|
150
|
+
flow_id: str | None = None
|
|
151
|
+
"""
|
|
152
|
+
ID of the executed flow
|
|
153
|
+
"""
|
|
154
|
+
flow_name: str | None = None
|
|
155
|
+
"""
|
|
156
|
+
Name of the executed flow
|
|
157
|
+
"""
|
|
158
|
+
start_time: int | None = None
|
|
159
|
+
"""
|
|
160
|
+
Flow execution start timestamp
|
|
161
|
+
"""
|
|
162
|
+
end_time: int | None = None
|
|
163
|
+
"""
|
|
164
|
+
Flow execution end timestamp
|
|
165
|
+
"""
|
|
166
|
+
total_duration: Annotated[float | None, Field(ge=0.0)] = None
|
|
167
|
+
"""
|
|
168
|
+
Total execution time in seconds
|
|
169
|
+
"""
|
|
170
|
+
success: bool | None = None
|
|
171
|
+
"""
|
|
172
|
+
Overall flow success status
|
|
173
|
+
"""
|
|
174
|
+
error: str | None = None
|
|
175
|
+
"""
|
|
176
|
+
Error message if flow failed
|
|
177
|
+
"""
|
|
178
|
+
environment: dict[str, Any] | None = None
|
|
179
|
+
"""
|
|
180
|
+
Environment used during execution
|
|
181
|
+
"""
|
|
182
|
+
browser_info: BrowserInfo | None = None
|
|
183
|
+
"""
|
|
184
|
+
Browser information
|
|
185
|
+
"""
|
|
186
|
+
performance_metrics: PerformanceMetrics | None = None
|
|
187
|
+
"""
|
|
188
|
+
Performance metrics collected during execution
|
|
189
|
+
"""
|
|
190
|
+
|
|
191
|
+
|
|
192
|
+
class ExecutionResults(BaseModel):
|
|
193
|
+
model_config = ConfigDict(
|
|
194
|
+
populate_by_name=True,
|
|
195
|
+
)
|
|
196
|
+
actionResults: list[ActionResult] | None = None
|
|
197
|
+
flowReports: list[FlowReport] | None = None
|
|
198
|
+
|
|
199
|
+
|
|
200
|
+
class ExecutionResultsModels(BaseModel):
|
|
201
|
+
"""
|
|
202
|
+
Schema for action execution results and flow reports
|
|
203
|
+
"""
|
|
204
|
+
|
|
205
|
+
model_config = ConfigDict(
|
|
206
|
+
populate_by_name=True,
|
|
207
|
+
)
|
|
208
|
+
executionResults: ExecutionResults | None = None
|