stagehand 0.0.4 → 3.5.2
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.
- checksums.yaml +7 -0
- data/.ignore +2 -0
- data/CHANGELOG.md +185 -0
- data/README.md +394 -31
- data/SECURITY.md +23 -0
- data/lib/stagehand/client.rb +123 -4
- data/lib/stagehand/errors.rb +228 -0
- data/lib/stagehand/file_part.rb +58 -0
- data/lib/stagehand/internal/stream.rb +56 -0
- data/lib/stagehand/internal/transport/base_client.rb +575 -0
- data/lib/stagehand/internal/transport/pooled_net_requester.rb +210 -0
- data/lib/stagehand/internal/type/array_of.rb +168 -0
- data/lib/stagehand/internal/type/base_model.rb +531 -0
- data/lib/stagehand/internal/type/base_page.rb +55 -0
- data/lib/stagehand/internal/type/base_stream.rb +83 -0
- data/lib/stagehand/internal/type/boolean.rb +77 -0
- data/lib/stagehand/internal/type/converter.rb +327 -0
- data/lib/stagehand/internal/type/enum.rb +131 -0
- data/lib/stagehand/internal/type/file_input.rb +111 -0
- data/lib/stagehand/internal/type/hash_of.rb +188 -0
- data/lib/stagehand/internal/type/request_parameters.rb +42 -0
- data/lib/stagehand/internal/type/union.rb +237 -0
- data/lib/stagehand/internal/type/unknown.rb +81 -0
- data/lib/stagehand/internal/util.rb +920 -0
- data/lib/stagehand/internal.rb +20 -0
- data/lib/stagehand/local.rb +439 -0
- data/lib/stagehand/models/action.rb +50 -0
- data/lib/stagehand/models/model_config.rb +55 -0
- data/lib/stagehand/models/session_act_params.rb +112 -0
- data/lib/stagehand/models/session_act_response.rb +127 -0
- data/lib/stagehand/models/session_end_params.rb +33 -0
- data/lib/stagehand/models/session_end_response.rb +17 -0
- data/lib/stagehand/models/session_execute_params.rb +212 -0
- data/lib/stagehand/models/session_execute_response.rb +212 -0
- data/lib/stagehand/models/session_extract_params.rb +107 -0
- data/lib/stagehand/models/session_extract_response.rb +46 -0
- data/lib/stagehand/models/session_navigate_params.rb +107 -0
- data/lib/stagehand/models/session_navigate_response.rb +44 -0
- data/lib/stagehand/models/session_observe_params.rb +99 -0
- data/lib/stagehand/models/session_observe_response.rb +91 -0
- data/lib/stagehand/models/session_replay_params.rb +33 -0
- data/lib/stagehand/models/session_replay_response.rb +100 -0
- data/lib/stagehand/models/session_start_params.rb +762 -0
- data/lib/stagehand/models/session_start_response.rb +55 -0
- data/lib/stagehand/models/stream_event.rb +120 -0
- data/lib/stagehand/models.rb +63 -0
- data/lib/stagehand/request_options.rb +77 -0
- data/lib/stagehand/resources/sessions.rb +488 -0
- data/lib/stagehand/version.rb +3 -1
- data/lib/stagehand.rb +74 -29
- data/manifest.yaml +17 -0
- data/rbi/stagehand/client.rbi +89 -0
- data/rbi/stagehand/errors.rbi +205 -0
- data/rbi/stagehand/file_part.rbi +37 -0
- data/rbi/stagehand/internal/stream.rbi +20 -0
- data/rbi/stagehand/internal/transport/base_client.rbi +314 -0
- data/rbi/stagehand/internal/transport/pooled_net_requester.rbi +83 -0
- data/rbi/stagehand/internal/type/array_of.rbi +104 -0
- data/rbi/stagehand/internal/type/base_model.rbi +308 -0
- data/rbi/stagehand/internal/type/base_page.rbi +42 -0
- data/rbi/stagehand/internal/type/base_stream.rbi +75 -0
- data/rbi/stagehand/internal/type/boolean.rbi +58 -0
- data/rbi/stagehand/internal/type/converter.rbi +216 -0
- data/rbi/stagehand/internal/type/enum.rbi +82 -0
- data/rbi/stagehand/internal/type/file_input.rbi +59 -0
- data/rbi/stagehand/internal/type/hash_of.rbi +104 -0
- data/rbi/stagehand/internal/type/request_parameters.rbi +29 -0
- data/rbi/stagehand/internal/type/union.rbi +128 -0
- data/rbi/stagehand/internal/type/unknown.rbi +58 -0
- data/rbi/stagehand/internal/util.rbi +487 -0
- data/rbi/stagehand/internal.rbi +18 -0
- data/rbi/stagehand/models/action.rbi +77 -0
- data/rbi/stagehand/models/model_config.rbi +94 -0
- data/rbi/stagehand/models/session_act_params.rbi +204 -0
- data/rbi/stagehand/models/session_act_response.rbi +250 -0
- data/rbi/stagehand/models/session_end_params.rbi +87 -0
- data/rbi/stagehand/models/session_end_response.rbi +30 -0
- data/rbi/stagehand/models/session_execute_params.rbi +440 -0
- data/rbi/stagehand/models/session_execute_response.rbi +414 -0
- data/rbi/stagehand/models/session_extract_params.rbi +209 -0
- data/rbi/stagehand/models/session_extract_response.rbi +91 -0
- data/rbi/stagehand/models/session_navigate_params.rbi +240 -0
- data/rbi/stagehand/models/session_navigate_response.rbi +91 -0
- data/rbi/stagehand/models/session_observe_params.rbi +198 -0
- data/rbi/stagehand/models/session_observe_response.rbi +184 -0
- data/rbi/stagehand/models/session_replay_params.rbi +89 -0
- data/rbi/stagehand/models/session_replay_response.rbi +286 -0
- data/rbi/stagehand/models/session_start_params.rbi +1703 -0
- data/rbi/stagehand/models/session_start_response.rbi +102 -0
- data/rbi/stagehand/models/stream_event.rbi +237 -0
- data/rbi/stagehand/models.rbi +25 -0
- data/rbi/stagehand/request_options.rbi +59 -0
- data/rbi/stagehand/resources/sessions.rbi +421 -0
- data/rbi/stagehand/version.rbi +5 -0
- data/sig/stagehand/client.rbs +41 -0
- data/sig/stagehand/errors.rbs +117 -0
- data/sig/stagehand/file_part.rbs +21 -0
- data/sig/stagehand/internal/stream.rbs +9 -0
- data/sig/stagehand/internal/transport/base_client.rbs +133 -0
- data/sig/stagehand/internal/transport/pooled_net_requester.rbs +48 -0
- data/sig/stagehand/internal/type/array_of.rbs +48 -0
- data/sig/stagehand/internal/type/base_model.rbs +102 -0
- data/sig/stagehand/internal/type/base_page.rbs +24 -0
- data/sig/stagehand/internal/type/base_stream.rbs +38 -0
- data/sig/stagehand/internal/type/boolean.rbs +26 -0
- data/sig/stagehand/internal/type/converter.rbs +79 -0
- data/sig/stagehand/internal/type/enum.rbs +32 -0
- data/sig/stagehand/internal/type/file_input.rbs +25 -0
- data/sig/stagehand/internal/type/hash_of.rbs +48 -0
- data/sig/stagehand/internal/type/request_parameters.rbs +19 -0
- data/sig/stagehand/internal/type/union.rbs +52 -0
- data/sig/stagehand/internal/type/unknown.rbs +26 -0
- data/sig/stagehand/internal/util.rbs +185 -0
- data/sig/stagehand/internal.rbs +9 -0
- data/sig/stagehand/models/action.rbs +46 -0
- data/sig/stagehand/models/model_config.rbs +56 -0
- data/sig/stagehand/models/session_act_params.rbs +111 -0
- data/sig/stagehand/models/session_act_response.rbs +121 -0
- data/sig/stagehand/models/session_end_params.rbs +41 -0
- data/sig/stagehand/models/session_end_response.rbs +13 -0
- data/sig/stagehand/models/session_execute_params.rbs +193 -0
- data/sig/stagehand/models/session_execute_response.rbs +215 -0
- data/sig/stagehand/models/session_extract_params.rbs +112 -0
- data/sig/stagehand/models/session_extract_response.rbs +36 -0
- data/sig/stagehand/models/session_navigate_params.rbs +114 -0
- data/sig/stagehand/models/session_navigate_response.rbs +36 -0
- data/sig/stagehand/models/session_observe_params.rbs +105 -0
- data/sig/stagehand/models/session_observe_response.rbs +89 -0
- data/sig/stagehand/models/session_replay_params.rbs +41 -0
- data/sig/stagehand/models/session_replay_response.rbs +137 -0
- data/sig/stagehand/models/session_start_params.rbs +866 -0
- data/sig/stagehand/models/session_start_response.rbs +44 -0
- data/sig/stagehand/models/stream_event.rbs +109 -0
- data/sig/stagehand/models.rbs +23 -0
- data/sig/stagehand/request_options.rbs +34 -0
- data/sig/stagehand/resources/sessions.rbs +121 -0
- data/sig/stagehand/version.rbs +3 -0
- metadata +170 -54
- data/.gitignore +0 -16
- data/Gemfile +0 -4
- data/Rakefile +0 -10
- data/lib/stagehand/client/oauth.rb +0 -32
- data/lib/stagehand/client/user.rb +0 -10
- data/lib/stagehand/rack/middleware.rb +0 -33
- data/lib/stagehand/railtie.rb +0 -19
- data/spec/spec_helper.rb +0 -7
- data/spec/stagehand_spec.rb +0 -44
- data/stagehand.gemspec +0 -25
|
@@ -0,0 +1,421 @@
|
|
|
1
|
+
# typed: strong
|
|
2
|
+
|
|
3
|
+
module Stagehand
|
|
4
|
+
module Resources
|
|
5
|
+
class Sessions
|
|
6
|
+
# See {Stagehand::Resources::Sessions#act_streaming} for streaming counterpart.
|
|
7
|
+
#
|
|
8
|
+
# Executes a browser action using natural language instructions or a predefined
|
|
9
|
+
# Action object.
|
|
10
|
+
sig do
|
|
11
|
+
params(
|
|
12
|
+
id: String,
|
|
13
|
+
input: T.any(String, Stagehand::Action::OrHash),
|
|
14
|
+
frame_id: T.nilable(String),
|
|
15
|
+
options: Stagehand::SessionActParams::Options::OrHash,
|
|
16
|
+
x_stream_response:
|
|
17
|
+
Stagehand::SessionActParams::XStreamResponse::OrSymbol,
|
|
18
|
+
stream_response: T.noreturn,
|
|
19
|
+
request_options: Stagehand::RequestOptions::OrHash
|
|
20
|
+
).returns(Stagehand::Models::SessionActResponse)
|
|
21
|
+
end
|
|
22
|
+
def act(
|
|
23
|
+
# Path param: Unique session identifier
|
|
24
|
+
id,
|
|
25
|
+
# Body param: Natural language instruction or Action object
|
|
26
|
+
input:,
|
|
27
|
+
# Body param: Target frame ID for the action
|
|
28
|
+
frame_id: nil,
|
|
29
|
+
# Body param
|
|
30
|
+
options: nil,
|
|
31
|
+
# Header param: Whether to stream the response via SSE
|
|
32
|
+
x_stream_response: nil,
|
|
33
|
+
# There is no need to provide `stream_response:`. Instead, use `#act_streaming` or
|
|
34
|
+
# `#act` for streaming and non-streaming use cases, respectively.
|
|
35
|
+
stream_response: false,
|
|
36
|
+
request_options: {}
|
|
37
|
+
)
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
# See {Stagehand::Resources::Sessions#act} for non-streaming counterpart.
|
|
41
|
+
#
|
|
42
|
+
# Executes a browser action using natural language instructions or a predefined
|
|
43
|
+
# Action object.
|
|
44
|
+
sig do
|
|
45
|
+
params(
|
|
46
|
+
id: String,
|
|
47
|
+
input: T.any(String, Stagehand::Action::OrHash),
|
|
48
|
+
frame_id: T.nilable(String),
|
|
49
|
+
options: Stagehand::SessionActParams::Options::OrHash,
|
|
50
|
+
x_stream_response:
|
|
51
|
+
Stagehand::SessionActParams::XStreamResponse::OrSymbol,
|
|
52
|
+
stream_response: T.noreturn,
|
|
53
|
+
request_options: Stagehand::RequestOptions::OrHash
|
|
54
|
+
).returns(Stagehand::Internal::Stream[Stagehand::StreamEvent])
|
|
55
|
+
end
|
|
56
|
+
def act_streaming(
|
|
57
|
+
# Path param: Unique session identifier
|
|
58
|
+
id,
|
|
59
|
+
# Body param: Natural language instruction or Action object
|
|
60
|
+
input:,
|
|
61
|
+
# Body param: Target frame ID for the action
|
|
62
|
+
frame_id: nil,
|
|
63
|
+
# Body param
|
|
64
|
+
options: nil,
|
|
65
|
+
# Header param: Whether to stream the response via SSE
|
|
66
|
+
x_stream_response: nil,
|
|
67
|
+
# There is no need to provide `stream_response:`. Instead, use `#act_streaming` or
|
|
68
|
+
# `#act` for streaming and non-streaming use cases, respectively.
|
|
69
|
+
stream_response: true,
|
|
70
|
+
request_options: {}
|
|
71
|
+
)
|
|
72
|
+
end
|
|
73
|
+
|
|
74
|
+
# Terminates the browser session and releases all associated resources.
|
|
75
|
+
sig do
|
|
76
|
+
params(
|
|
77
|
+
id: String,
|
|
78
|
+
x_stream_response:
|
|
79
|
+
Stagehand::SessionEndParams::XStreamResponse::OrSymbol,
|
|
80
|
+
request_options: Stagehand::RequestOptions::OrHash
|
|
81
|
+
).returns(Stagehand::Models::SessionEndResponse)
|
|
82
|
+
end
|
|
83
|
+
def end_(
|
|
84
|
+
# Unique session identifier
|
|
85
|
+
id,
|
|
86
|
+
# Whether to stream the response via SSE
|
|
87
|
+
x_stream_response: nil,
|
|
88
|
+
request_options: {}
|
|
89
|
+
)
|
|
90
|
+
end
|
|
91
|
+
|
|
92
|
+
# See {Stagehand::Resources::Sessions#execute_streaming} for streaming
|
|
93
|
+
# counterpart.
|
|
94
|
+
#
|
|
95
|
+
# Runs an autonomous AI agent that can perform complex multi-step browser tasks.
|
|
96
|
+
sig do
|
|
97
|
+
params(
|
|
98
|
+
id: String,
|
|
99
|
+
agent_config: Stagehand::SessionExecuteParams::AgentConfig::OrHash,
|
|
100
|
+
execute_options:
|
|
101
|
+
Stagehand::SessionExecuteParams::ExecuteOptions::OrHash,
|
|
102
|
+
frame_id: T.nilable(String),
|
|
103
|
+
should_cache: T::Boolean,
|
|
104
|
+
x_stream_response:
|
|
105
|
+
Stagehand::SessionExecuteParams::XStreamResponse::OrSymbol,
|
|
106
|
+
stream_response: T.noreturn,
|
|
107
|
+
request_options: Stagehand::RequestOptions::OrHash
|
|
108
|
+
).returns(Stagehand::Models::SessionExecuteResponse)
|
|
109
|
+
end
|
|
110
|
+
def execute(
|
|
111
|
+
# Path param: Unique session identifier
|
|
112
|
+
id,
|
|
113
|
+
# Body param
|
|
114
|
+
agent_config:,
|
|
115
|
+
# Body param
|
|
116
|
+
execute_options:,
|
|
117
|
+
# Body param: Target frame ID for the agent
|
|
118
|
+
frame_id: nil,
|
|
119
|
+
# Body param: If true, the server captures a cache entry and returns it to the
|
|
120
|
+
# client
|
|
121
|
+
should_cache: nil,
|
|
122
|
+
# Header param: Whether to stream the response via SSE
|
|
123
|
+
x_stream_response: nil,
|
|
124
|
+
# There is no need to provide `stream_response:`. Instead, use
|
|
125
|
+
# `#execute_streaming` or `#execute` for streaming and non-streaming use cases,
|
|
126
|
+
# respectively.
|
|
127
|
+
stream_response: false,
|
|
128
|
+
request_options: {}
|
|
129
|
+
)
|
|
130
|
+
end
|
|
131
|
+
|
|
132
|
+
# See {Stagehand::Resources::Sessions#execute} for non-streaming counterpart.
|
|
133
|
+
#
|
|
134
|
+
# Runs an autonomous AI agent that can perform complex multi-step browser tasks.
|
|
135
|
+
sig do
|
|
136
|
+
params(
|
|
137
|
+
id: String,
|
|
138
|
+
agent_config: Stagehand::SessionExecuteParams::AgentConfig::OrHash,
|
|
139
|
+
execute_options:
|
|
140
|
+
Stagehand::SessionExecuteParams::ExecuteOptions::OrHash,
|
|
141
|
+
frame_id: T.nilable(String),
|
|
142
|
+
should_cache: T::Boolean,
|
|
143
|
+
x_stream_response:
|
|
144
|
+
Stagehand::SessionExecuteParams::XStreamResponse::OrSymbol,
|
|
145
|
+
stream_response: T.noreturn,
|
|
146
|
+
request_options: Stagehand::RequestOptions::OrHash
|
|
147
|
+
).returns(Stagehand::Internal::Stream[Stagehand::StreamEvent])
|
|
148
|
+
end
|
|
149
|
+
def execute_streaming(
|
|
150
|
+
# Path param: Unique session identifier
|
|
151
|
+
id,
|
|
152
|
+
# Body param
|
|
153
|
+
agent_config:,
|
|
154
|
+
# Body param
|
|
155
|
+
execute_options:,
|
|
156
|
+
# Body param: Target frame ID for the agent
|
|
157
|
+
frame_id: nil,
|
|
158
|
+
# Body param: If true, the server captures a cache entry and returns it to the
|
|
159
|
+
# client
|
|
160
|
+
should_cache: nil,
|
|
161
|
+
# Header param: Whether to stream the response via SSE
|
|
162
|
+
x_stream_response: nil,
|
|
163
|
+
# There is no need to provide `stream_response:`. Instead, use
|
|
164
|
+
# `#execute_streaming` or `#execute` for streaming and non-streaming use cases,
|
|
165
|
+
# respectively.
|
|
166
|
+
stream_response: true,
|
|
167
|
+
request_options: {}
|
|
168
|
+
)
|
|
169
|
+
end
|
|
170
|
+
|
|
171
|
+
# See {Stagehand::Resources::Sessions#extract_streaming} for streaming
|
|
172
|
+
# counterpart.
|
|
173
|
+
#
|
|
174
|
+
# Extracts structured data from the current page using AI-powered analysis.
|
|
175
|
+
sig do
|
|
176
|
+
params(
|
|
177
|
+
id: String,
|
|
178
|
+
frame_id: T.nilable(String),
|
|
179
|
+
instruction: String,
|
|
180
|
+
options: Stagehand::SessionExtractParams::Options::OrHash,
|
|
181
|
+
schema: T::Hash[Symbol, T.anything],
|
|
182
|
+
x_stream_response:
|
|
183
|
+
Stagehand::SessionExtractParams::XStreamResponse::OrSymbol,
|
|
184
|
+
stream_response: T.noreturn,
|
|
185
|
+
request_options: Stagehand::RequestOptions::OrHash
|
|
186
|
+
).returns(Stagehand::Models::SessionExtractResponse)
|
|
187
|
+
end
|
|
188
|
+
def extract(
|
|
189
|
+
# Path param: Unique session identifier
|
|
190
|
+
id,
|
|
191
|
+
# Body param: Target frame ID for the extraction
|
|
192
|
+
frame_id: nil,
|
|
193
|
+
# Body param: Natural language instruction for what to extract
|
|
194
|
+
instruction: nil,
|
|
195
|
+
# Body param
|
|
196
|
+
options: nil,
|
|
197
|
+
# Body param: JSON Schema defining the structure of data to extract
|
|
198
|
+
schema: nil,
|
|
199
|
+
# Header param: Whether to stream the response via SSE
|
|
200
|
+
x_stream_response: nil,
|
|
201
|
+
# There is no need to provide `stream_response:`. Instead, use
|
|
202
|
+
# `#extract_streaming` or `#extract` for streaming and non-streaming use cases,
|
|
203
|
+
# respectively.
|
|
204
|
+
stream_response: false,
|
|
205
|
+
request_options: {}
|
|
206
|
+
)
|
|
207
|
+
end
|
|
208
|
+
|
|
209
|
+
# See {Stagehand::Resources::Sessions#extract} for non-streaming counterpart.
|
|
210
|
+
#
|
|
211
|
+
# Extracts structured data from the current page using AI-powered analysis.
|
|
212
|
+
sig do
|
|
213
|
+
params(
|
|
214
|
+
id: String,
|
|
215
|
+
frame_id: T.nilable(String),
|
|
216
|
+
instruction: String,
|
|
217
|
+
options: Stagehand::SessionExtractParams::Options::OrHash,
|
|
218
|
+
schema: T::Hash[Symbol, T.anything],
|
|
219
|
+
x_stream_response:
|
|
220
|
+
Stagehand::SessionExtractParams::XStreamResponse::OrSymbol,
|
|
221
|
+
stream_response: T.noreturn,
|
|
222
|
+
request_options: Stagehand::RequestOptions::OrHash
|
|
223
|
+
).returns(Stagehand::Internal::Stream[Stagehand::StreamEvent])
|
|
224
|
+
end
|
|
225
|
+
def extract_streaming(
|
|
226
|
+
# Path param: Unique session identifier
|
|
227
|
+
id,
|
|
228
|
+
# Body param: Target frame ID for the extraction
|
|
229
|
+
frame_id: nil,
|
|
230
|
+
# Body param: Natural language instruction for what to extract
|
|
231
|
+
instruction: nil,
|
|
232
|
+
# Body param
|
|
233
|
+
options: nil,
|
|
234
|
+
# Body param: JSON Schema defining the structure of data to extract
|
|
235
|
+
schema: nil,
|
|
236
|
+
# Header param: Whether to stream the response via SSE
|
|
237
|
+
x_stream_response: nil,
|
|
238
|
+
# There is no need to provide `stream_response:`. Instead, use
|
|
239
|
+
# `#extract_streaming` or `#extract` for streaming and non-streaming use cases,
|
|
240
|
+
# respectively.
|
|
241
|
+
stream_response: true,
|
|
242
|
+
request_options: {}
|
|
243
|
+
)
|
|
244
|
+
end
|
|
245
|
+
|
|
246
|
+
# Navigates the browser to the specified URL.
|
|
247
|
+
sig do
|
|
248
|
+
params(
|
|
249
|
+
id: String,
|
|
250
|
+
url: String,
|
|
251
|
+
frame_id: T.nilable(String),
|
|
252
|
+
options: Stagehand::SessionNavigateParams::Options::OrHash,
|
|
253
|
+
stream_response: T::Boolean,
|
|
254
|
+
x_stream_response:
|
|
255
|
+
Stagehand::SessionNavigateParams::XStreamResponse::OrSymbol,
|
|
256
|
+
request_options: Stagehand::RequestOptions::OrHash
|
|
257
|
+
).returns(Stagehand::Models::SessionNavigateResponse)
|
|
258
|
+
end
|
|
259
|
+
def navigate(
|
|
260
|
+
# Path param: Unique session identifier
|
|
261
|
+
id,
|
|
262
|
+
# Body param: URL to navigate to
|
|
263
|
+
url:,
|
|
264
|
+
# Body param: Target frame ID for the navigation
|
|
265
|
+
frame_id: nil,
|
|
266
|
+
# Body param
|
|
267
|
+
options: nil,
|
|
268
|
+
# Body param: Whether to stream the response via SSE
|
|
269
|
+
stream_response: nil,
|
|
270
|
+
# Header param: Whether to stream the response via SSE
|
|
271
|
+
x_stream_response: nil,
|
|
272
|
+
request_options: {}
|
|
273
|
+
)
|
|
274
|
+
end
|
|
275
|
+
|
|
276
|
+
# See {Stagehand::Resources::Sessions#observe_streaming} for streaming
|
|
277
|
+
# counterpart.
|
|
278
|
+
#
|
|
279
|
+
# Identifies and returns available actions on the current page that match the
|
|
280
|
+
# given instruction.
|
|
281
|
+
sig do
|
|
282
|
+
params(
|
|
283
|
+
id: String,
|
|
284
|
+
frame_id: T.nilable(String),
|
|
285
|
+
instruction: String,
|
|
286
|
+
options: Stagehand::SessionObserveParams::Options::OrHash,
|
|
287
|
+
x_stream_response:
|
|
288
|
+
Stagehand::SessionObserveParams::XStreamResponse::OrSymbol,
|
|
289
|
+
stream_response: T.noreturn,
|
|
290
|
+
request_options: Stagehand::RequestOptions::OrHash
|
|
291
|
+
).returns(Stagehand::Models::SessionObserveResponse)
|
|
292
|
+
end
|
|
293
|
+
def observe(
|
|
294
|
+
# Path param: Unique session identifier
|
|
295
|
+
id,
|
|
296
|
+
# Body param: Target frame ID for the observation
|
|
297
|
+
frame_id: nil,
|
|
298
|
+
# Body param: Natural language instruction for what actions to find
|
|
299
|
+
instruction: nil,
|
|
300
|
+
# Body param
|
|
301
|
+
options: nil,
|
|
302
|
+
# Header param: Whether to stream the response via SSE
|
|
303
|
+
x_stream_response: nil,
|
|
304
|
+
# There is no need to provide `stream_response:`. Instead, use
|
|
305
|
+
# `#observe_streaming` or `#observe` for streaming and non-streaming use cases,
|
|
306
|
+
# respectively.
|
|
307
|
+
stream_response: false,
|
|
308
|
+
request_options: {}
|
|
309
|
+
)
|
|
310
|
+
end
|
|
311
|
+
|
|
312
|
+
# See {Stagehand::Resources::Sessions#observe} for non-streaming counterpart.
|
|
313
|
+
#
|
|
314
|
+
# Identifies and returns available actions on the current page that match the
|
|
315
|
+
# given instruction.
|
|
316
|
+
sig do
|
|
317
|
+
params(
|
|
318
|
+
id: String,
|
|
319
|
+
frame_id: T.nilable(String),
|
|
320
|
+
instruction: String,
|
|
321
|
+
options: Stagehand::SessionObserveParams::Options::OrHash,
|
|
322
|
+
x_stream_response:
|
|
323
|
+
Stagehand::SessionObserveParams::XStreamResponse::OrSymbol,
|
|
324
|
+
stream_response: T.noreturn,
|
|
325
|
+
request_options: Stagehand::RequestOptions::OrHash
|
|
326
|
+
).returns(Stagehand::Internal::Stream[Stagehand::StreamEvent])
|
|
327
|
+
end
|
|
328
|
+
def observe_streaming(
|
|
329
|
+
# Path param: Unique session identifier
|
|
330
|
+
id,
|
|
331
|
+
# Body param: Target frame ID for the observation
|
|
332
|
+
frame_id: nil,
|
|
333
|
+
# Body param: Natural language instruction for what actions to find
|
|
334
|
+
instruction: nil,
|
|
335
|
+
# Body param
|
|
336
|
+
options: nil,
|
|
337
|
+
# Header param: Whether to stream the response via SSE
|
|
338
|
+
x_stream_response: nil,
|
|
339
|
+
# There is no need to provide `stream_response:`. Instead, use
|
|
340
|
+
# `#observe_streaming` or `#observe` for streaming and non-streaming use cases,
|
|
341
|
+
# respectively.
|
|
342
|
+
stream_response: true,
|
|
343
|
+
request_options: {}
|
|
344
|
+
)
|
|
345
|
+
end
|
|
346
|
+
|
|
347
|
+
# Retrieves replay metrics for a session.
|
|
348
|
+
sig do
|
|
349
|
+
params(
|
|
350
|
+
id: String,
|
|
351
|
+
x_stream_response:
|
|
352
|
+
Stagehand::SessionReplayParams::XStreamResponse::OrSymbol,
|
|
353
|
+
request_options: Stagehand::RequestOptions::OrHash
|
|
354
|
+
).returns(Stagehand::Models::SessionReplayResponse)
|
|
355
|
+
end
|
|
356
|
+
def replay(
|
|
357
|
+
# Unique session identifier
|
|
358
|
+
id,
|
|
359
|
+
# Whether to stream the response via SSE
|
|
360
|
+
x_stream_response: nil,
|
|
361
|
+
request_options: {}
|
|
362
|
+
)
|
|
363
|
+
end
|
|
364
|
+
|
|
365
|
+
# Creates a new browser session with the specified configuration. Returns a
|
|
366
|
+
# session ID used for all subsequent operations.
|
|
367
|
+
sig do
|
|
368
|
+
params(
|
|
369
|
+
model_name: String,
|
|
370
|
+
act_timeout_ms: Float,
|
|
371
|
+
browser: Stagehand::SessionStartParams::Browser::OrHash,
|
|
372
|
+
browserbase_session_create_params:
|
|
373
|
+
Stagehand::SessionStartParams::BrowserbaseSessionCreateParams::OrHash,
|
|
374
|
+
browserbase_session_id: String,
|
|
375
|
+
dom_settle_timeout_ms: Float,
|
|
376
|
+
experimental: T::Boolean,
|
|
377
|
+
self_heal: T::Boolean,
|
|
378
|
+
system_prompt: String,
|
|
379
|
+
verbose: Stagehand::SessionStartParams::Verbose::OrFloat,
|
|
380
|
+
wait_for_captcha_solves: T::Boolean,
|
|
381
|
+
x_stream_response:
|
|
382
|
+
Stagehand::SessionStartParams::XStreamResponse::OrSymbol,
|
|
383
|
+
request_options: Stagehand::RequestOptions::OrHash
|
|
384
|
+
).returns(Stagehand::Models::SessionStartResponse)
|
|
385
|
+
end
|
|
386
|
+
def start(
|
|
387
|
+
# Body param: Model name to use for AI operations
|
|
388
|
+
model_name:,
|
|
389
|
+
# Body param: Timeout in ms for act operations (deprecated, v2 only)
|
|
390
|
+
act_timeout_ms: nil,
|
|
391
|
+
# Body param
|
|
392
|
+
browser: nil,
|
|
393
|
+
# Body param
|
|
394
|
+
browserbase_session_create_params: nil,
|
|
395
|
+
# Body param: Existing Browserbase session ID to resume
|
|
396
|
+
browserbase_session_id: nil,
|
|
397
|
+
# Body param: Timeout in ms to wait for DOM to settle
|
|
398
|
+
dom_settle_timeout_ms: nil,
|
|
399
|
+
# Body param
|
|
400
|
+
experimental: nil,
|
|
401
|
+
# Body param: Enable self-healing for failed actions
|
|
402
|
+
self_heal: nil,
|
|
403
|
+
# Body param: Custom system prompt for AI operations
|
|
404
|
+
system_prompt: nil,
|
|
405
|
+
# Body param: Logging verbosity level (0=quiet, 1=normal, 2=debug)
|
|
406
|
+
verbose: nil,
|
|
407
|
+
# Body param: Wait for captcha solves (deprecated, v2 only)
|
|
408
|
+
wait_for_captcha_solves: nil,
|
|
409
|
+
# Header param: Whether to stream the response via SSE
|
|
410
|
+
x_stream_response: nil,
|
|
411
|
+
request_options: {}
|
|
412
|
+
)
|
|
413
|
+
end
|
|
414
|
+
|
|
415
|
+
# @api private
|
|
416
|
+
sig { params(client: Stagehand::Client).returns(T.attached_class) }
|
|
417
|
+
def self.new(client:)
|
|
418
|
+
end
|
|
419
|
+
end
|
|
420
|
+
end
|
|
421
|
+
end
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
module Stagehand
|
|
2
|
+
class Client < Stagehand::Internal::Transport::BaseClient
|
|
3
|
+
DEFAULT_MAX_RETRIES: 2
|
|
4
|
+
|
|
5
|
+
DEFAULT_TIMEOUT_IN_SECONDS: Float
|
|
6
|
+
|
|
7
|
+
DEFAULT_INITIAL_RETRY_DELAY: Float
|
|
8
|
+
|
|
9
|
+
DEFAULT_MAX_RETRY_DELAY: Float
|
|
10
|
+
|
|
11
|
+
attr_reader browserbase_api_key: String
|
|
12
|
+
|
|
13
|
+
attr_reader browserbase_project_id: String
|
|
14
|
+
|
|
15
|
+
attr_reader model_api_key: String
|
|
16
|
+
|
|
17
|
+
attr_reader sessions: Stagehand::Resources::Sessions
|
|
18
|
+
|
|
19
|
+
private def auth_headers: -> ::Hash[String, String]
|
|
20
|
+
|
|
21
|
+
private def bb_api_key_auth: -> ::Hash[String, String]
|
|
22
|
+
|
|
23
|
+
private def bb_project_id_auth: -> ::Hash[String, String]
|
|
24
|
+
|
|
25
|
+
private def llm_model_api_key_auth: -> ::Hash[String, String]
|
|
26
|
+
|
|
27
|
+
def initialize: (
|
|
28
|
+
?browserbase_api_key: String?,
|
|
29
|
+
?browserbase_project_id: String?,
|
|
30
|
+
?model_api_key: String?,
|
|
31
|
+
?server: String,
|
|
32
|
+
?base_url: String?,
|
|
33
|
+
?max_retries: Integer,
|
|
34
|
+
?timeout: Float,
|
|
35
|
+
?initial_retry_delay: Float,
|
|
36
|
+
?max_retry_delay: Float
|
|
37
|
+
) -> void
|
|
38
|
+
|
|
39
|
+
def close: -> void
|
|
40
|
+
end
|
|
41
|
+
end
|
|
@@ -0,0 +1,117 @@
|
|
|
1
|
+
module Stagehand
|
|
2
|
+
module Errors
|
|
3
|
+
class Error < StandardError
|
|
4
|
+
attr_accessor cause: StandardError?
|
|
5
|
+
end
|
|
6
|
+
|
|
7
|
+
class ConversionError < Stagehand::Errors::Error
|
|
8
|
+
def cause: -> StandardError?
|
|
9
|
+
|
|
10
|
+
def initialize: (
|
|
11
|
+
on: Class,
|
|
12
|
+
method: Symbol,
|
|
13
|
+
target: top,
|
|
14
|
+
value: top,
|
|
15
|
+
?cause: StandardError?
|
|
16
|
+
) -> void
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
class APIError < Stagehand::Errors::Error
|
|
20
|
+
attr_accessor url: URI::Generic
|
|
21
|
+
|
|
22
|
+
attr_accessor status: Integer?
|
|
23
|
+
|
|
24
|
+
attr_accessor headers: ::Hash[String, String]?
|
|
25
|
+
|
|
26
|
+
attr_accessor body: top?
|
|
27
|
+
|
|
28
|
+
def initialize: (
|
|
29
|
+
url: URI::Generic,
|
|
30
|
+
?status: Integer?,
|
|
31
|
+
?headers: ::Hash[String, String]?,
|
|
32
|
+
?body: Object?,
|
|
33
|
+
?request: nil,
|
|
34
|
+
?response: nil,
|
|
35
|
+
?message: String?
|
|
36
|
+
) -> void
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
class APIConnectionError < Stagehand::Errors::APIError
|
|
40
|
+
def initialize: (
|
|
41
|
+
url: URI::Generic,
|
|
42
|
+
?status: nil,
|
|
43
|
+
?headers: ::Hash[String, String]?,
|
|
44
|
+
?body: nil,
|
|
45
|
+
?request: nil,
|
|
46
|
+
?response: nil,
|
|
47
|
+
?message: String?
|
|
48
|
+
) -> void
|
|
49
|
+
end
|
|
50
|
+
|
|
51
|
+
class APITimeoutError < Stagehand::Errors::APIConnectionError
|
|
52
|
+
def initialize: (
|
|
53
|
+
url: URI::Generic,
|
|
54
|
+
?status: nil,
|
|
55
|
+
?headers: ::Hash[String, String]?,
|
|
56
|
+
?body: nil,
|
|
57
|
+
?request: nil,
|
|
58
|
+
?response: nil,
|
|
59
|
+
?message: String?
|
|
60
|
+
) -> void
|
|
61
|
+
end
|
|
62
|
+
|
|
63
|
+
class APIStatusError < Stagehand::Errors::APIError
|
|
64
|
+
def self.for: (
|
|
65
|
+
url: URI::Generic,
|
|
66
|
+
status: Integer,
|
|
67
|
+
headers: ::Hash[String, String]?,
|
|
68
|
+
body: Object?,
|
|
69
|
+
request: nil,
|
|
70
|
+
response: nil,
|
|
71
|
+
?message: String?
|
|
72
|
+
) -> instance
|
|
73
|
+
|
|
74
|
+
def initialize: (
|
|
75
|
+
url: URI::Generic,
|
|
76
|
+
status: Integer,
|
|
77
|
+
headers: ::Hash[String, String]?,
|
|
78
|
+
body: Object?,
|
|
79
|
+
request: nil,
|
|
80
|
+
response: nil,
|
|
81
|
+
?message: String?
|
|
82
|
+
) -> void
|
|
83
|
+
end
|
|
84
|
+
|
|
85
|
+
class BadRequestError < Stagehand::Errors::APIStatusError
|
|
86
|
+
HTTP_STATUS: 400
|
|
87
|
+
end
|
|
88
|
+
|
|
89
|
+
class AuthenticationError < Stagehand::Errors::APIStatusError
|
|
90
|
+
HTTP_STATUS: 401
|
|
91
|
+
end
|
|
92
|
+
|
|
93
|
+
class PermissionDeniedError < Stagehand::Errors::APIStatusError
|
|
94
|
+
HTTP_STATUS: 403
|
|
95
|
+
end
|
|
96
|
+
|
|
97
|
+
class NotFoundError < Stagehand::Errors::APIStatusError
|
|
98
|
+
HTTP_STATUS: 404
|
|
99
|
+
end
|
|
100
|
+
|
|
101
|
+
class ConflictError < Stagehand::Errors::APIStatusError
|
|
102
|
+
HTTP_STATUS: 409
|
|
103
|
+
end
|
|
104
|
+
|
|
105
|
+
class UnprocessableEntityError < Stagehand::Errors::APIStatusError
|
|
106
|
+
HTTP_STATUS: 422
|
|
107
|
+
end
|
|
108
|
+
|
|
109
|
+
class RateLimitError < Stagehand::Errors::APIStatusError
|
|
110
|
+
HTTP_STATUS: 429
|
|
111
|
+
end
|
|
112
|
+
|
|
113
|
+
class InternalServerError < Stagehand::Errors::APIStatusError
|
|
114
|
+
HTTP_STATUS: Range[Integer]
|
|
115
|
+
end
|
|
116
|
+
end
|
|
117
|
+
end
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
module Stagehand
|
|
2
|
+
class FilePart
|
|
3
|
+
attr_reader content: Pathname | StringIO | IO | String
|
|
4
|
+
|
|
5
|
+
attr_reader content_type: String?
|
|
6
|
+
|
|
7
|
+
attr_reader filename: String?
|
|
8
|
+
|
|
9
|
+
private def read: -> String
|
|
10
|
+
|
|
11
|
+
def to_json: (*top a) -> String
|
|
12
|
+
|
|
13
|
+
def to_yaml: (*top a) -> String
|
|
14
|
+
|
|
15
|
+
def initialize: (
|
|
16
|
+
Pathname | StringIO | IO | String content,
|
|
17
|
+
?filename: (Pathname | String)?,
|
|
18
|
+
?content_type: String?
|
|
19
|
+
) -> void
|
|
20
|
+
end
|
|
21
|
+
end
|