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.
Files changed (148) hide show
  1. checksums.yaml +7 -0
  2. data/.ignore +2 -0
  3. data/CHANGELOG.md +185 -0
  4. data/README.md +394 -31
  5. data/SECURITY.md +23 -0
  6. data/lib/stagehand/client.rb +123 -4
  7. data/lib/stagehand/errors.rb +228 -0
  8. data/lib/stagehand/file_part.rb +58 -0
  9. data/lib/stagehand/internal/stream.rb +56 -0
  10. data/lib/stagehand/internal/transport/base_client.rb +575 -0
  11. data/lib/stagehand/internal/transport/pooled_net_requester.rb +210 -0
  12. data/lib/stagehand/internal/type/array_of.rb +168 -0
  13. data/lib/stagehand/internal/type/base_model.rb +531 -0
  14. data/lib/stagehand/internal/type/base_page.rb +55 -0
  15. data/lib/stagehand/internal/type/base_stream.rb +83 -0
  16. data/lib/stagehand/internal/type/boolean.rb +77 -0
  17. data/lib/stagehand/internal/type/converter.rb +327 -0
  18. data/lib/stagehand/internal/type/enum.rb +131 -0
  19. data/lib/stagehand/internal/type/file_input.rb +111 -0
  20. data/lib/stagehand/internal/type/hash_of.rb +188 -0
  21. data/lib/stagehand/internal/type/request_parameters.rb +42 -0
  22. data/lib/stagehand/internal/type/union.rb +237 -0
  23. data/lib/stagehand/internal/type/unknown.rb +81 -0
  24. data/lib/stagehand/internal/util.rb +920 -0
  25. data/lib/stagehand/internal.rb +20 -0
  26. data/lib/stagehand/local.rb +439 -0
  27. data/lib/stagehand/models/action.rb +50 -0
  28. data/lib/stagehand/models/model_config.rb +55 -0
  29. data/lib/stagehand/models/session_act_params.rb +112 -0
  30. data/lib/stagehand/models/session_act_response.rb +127 -0
  31. data/lib/stagehand/models/session_end_params.rb +33 -0
  32. data/lib/stagehand/models/session_end_response.rb +17 -0
  33. data/lib/stagehand/models/session_execute_params.rb +212 -0
  34. data/lib/stagehand/models/session_execute_response.rb +212 -0
  35. data/lib/stagehand/models/session_extract_params.rb +107 -0
  36. data/lib/stagehand/models/session_extract_response.rb +46 -0
  37. data/lib/stagehand/models/session_navigate_params.rb +107 -0
  38. data/lib/stagehand/models/session_navigate_response.rb +44 -0
  39. data/lib/stagehand/models/session_observe_params.rb +99 -0
  40. data/lib/stagehand/models/session_observe_response.rb +91 -0
  41. data/lib/stagehand/models/session_replay_params.rb +33 -0
  42. data/lib/stagehand/models/session_replay_response.rb +100 -0
  43. data/lib/stagehand/models/session_start_params.rb +762 -0
  44. data/lib/stagehand/models/session_start_response.rb +55 -0
  45. data/lib/stagehand/models/stream_event.rb +120 -0
  46. data/lib/stagehand/models.rb +63 -0
  47. data/lib/stagehand/request_options.rb +77 -0
  48. data/lib/stagehand/resources/sessions.rb +488 -0
  49. data/lib/stagehand/version.rb +3 -1
  50. data/lib/stagehand.rb +74 -29
  51. data/manifest.yaml +17 -0
  52. data/rbi/stagehand/client.rbi +89 -0
  53. data/rbi/stagehand/errors.rbi +205 -0
  54. data/rbi/stagehand/file_part.rbi +37 -0
  55. data/rbi/stagehand/internal/stream.rbi +20 -0
  56. data/rbi/stagehand/internal/transport/base_client.rbi +314 -0
  57. data/rbi/stagehand/internal/transport/pooled_net_requester.rbi +83 -0
  58. data/rbi/stagehand/internal/type/array_of.rbi +104 -0
  59. data/rbi/stagehand/internal/type/base_model.rbi +308 -0
  60. data/rbi/stagehand/internal/type/base_page.rbi +42 -0
  61. data/rbi/stagehand/internal/type/base_stream.rbi +75 -0
  62. data/rbi/stagehand/internal/type/boolean.rbi +58 -0
  63. data/rbi/stagehand/internal/type/converter.rbi +216 -0
  64. data/rbi/stagehand/internal/type/enum.rbi +82 -0
  65. data/rbi/stagehand/internal/type/file_input.rbi +59 -0
  66. data/rbi/stagehand/internal/type/hash_of.rbi +104 -0
  67. data/rbi/stagehand/internal/type/request_parameters.rbi +29 -0
  68. data/rbi/stagehand/internal/type/union.rbi +128 -0
  69. data/rbi/stagehand/internal/type/unknown.rbi +58 -0
  70. data/rbi/stagehand/internal/util.rbi +487 -0
  71. data/rbi/stagehand/internal.rbi +18 -0
  72. data/rbi/stagehand/models/action.rbi +77 -0
  73. data/rbi/stagehand/models/model_config.rbi +94 -0
  74. data/rbi/stagehand/models/session_act_params.rbi +204 -0
  75. data/rbi/stagehand/models/session_act_response.rbi +250 -0
  76. data/rbi/stagehand/models/session_end_params.rbi +87 -0
  77. data/rbi/stagehand/models/session_end_response.rbi +30 -0
  78. data/rbi/stagehand/models/session_execute_params.rbi +440 -0
  79. data/rbi/stagehand/models/session_execute_response.rbi +414 -0
  80. data/rbi/stagehand/models/session_extract_params.rbi +209 -0
  81. data/rbi/stagehand/models/session_extract_response.rbi +91 -0
  82. data/rbi/stagehand/models/session_navigate_params.rbi +240 -0
  83. data/rbi/stagehand/models/session_navigate_response.rbi +91 -0
  84. data/rbi/stagehand/models/session_observe_params.rbi +198 -0
  85. data/rbi/stagehand/models/session_observe_response.rbi +184 -0
  86. data/rbi/stagehand/models/session_replay_params.rbi +89 -0
  87. data/rbi/stagehand/models/session_replay_response.rbi +286 -0
  88. data/rbi/stagehand/models/session_start_params.rbi +1703 -0
  89. data/rbi/stagehand/models/session_start_response.rbi +102 -0
  90. data/rbi/stagehand/models/stream_event.rbi +237 -0
  91. data/rbi/stagehand/models.rbi +25 -0
  92. data/rbi/stagehand/request_options.rbi +59 -0
  93. data/rbi/stagehand/resources/sessions.rbi +421 -0
  94. data/rbi/stagehand/version.rbi +5 -0
  95. data/sig/stagehand/client.rbs +41 -0
  96. data/sig/stagehand/errors.rbs +117 -0
  97. data/sig/stagehand/file_part.rbs +21 -0
  98. data/sig/stagehand/internal/stream.rbs +9 -0
  99. data/sig/stagehand/internal/transport/base_client.rbs +133 -0
  100. data/sig/stagehand/internal/transport/pooled_net_requester.rbs +48 -0
  101. data/sig/stagehand/internal/type/array_of.rbs +48 -0
  102. data/sig/stagehand/internal/type/base_model.rbs +102 -0
  103. data/sig/stagehand/internal/type/base_page.rbs +24 -0
  104. data/sig/stagehand/internal/type/base_stream.rbs +38 -0
  105. data/sig/stagehand/internal/type/boolean.rbs +26 -0
  106. data/sig/stagehand/internal/type/converter.rbs +79 -0
  107. data/sig/stagehand/internal/type/enum.rbs +32 -0
  108. data/sig/stagehand/internal/type/file_input.rbs +25 -0
  109. data/sig/stagehand/internal/type/hash_of.rbs +48 -0
  110. data/sig/stagehand/internal/type/request_parameters.rbs +19 -0
  111. data/sig/stagehand/internal/type/union.rbs +52 -0
  112. data/sig/stagehand/internal/type/unknown.rbs +26 -0
  113. data/sig/stagehand/internal/util.rbs +185 -0
  114. data/sig/stagehand/internal.rbs +9 -0
  115. data/sig/stagehand/models/action.rbs +46 -0
  116. data/sig/stagehand/models/model_config.rbs +56 -0
  117. data/sig/stagehand/models/session_act_params.rbs +111 -0
  118. data/sig/stagehand/models/session_act_response.rbs +121 -0
  119. data/sig/stagehand/models/session_end_params.rbs +41 -0
  120. data/sig/stagehand/models/session_end_response.rbs +13 -0
  121. data/sig/stagehand/models/session_execute_params.rbs +193 -0
  122. data/sig/stagehand/models/session_execute_response.rbs +215 -0
  123. data/sig/stagehand/models/session_extract_params.rbs +112 -0
  124. data/sig/stagehand/models/session_extract_response.rbs +36 -0
  125. data/sig/stagehand/models/session_navigate_params.rbs +114 -0
  126. data/sig/stagehand/models/session_navigate_response.rbs +36 -0
  127. data/sig/stagehand/models/session_observe_params.rbs +105 -0
  128. data/sig/stagehand/models/session_observe_response.rbs +89 -0
  129. data/sig/stagehand/models/session_replay_params.rbs +41 -0
  130. data/sig/stagehand/models/session_replay_response.rbs +137 -0
  131. data/sig/stagehand/models/session_start_params.rbs +866 -0
  132. data/sig/stagehand/models/session_start_response.rbs +44 -0
  133. data/sig/stagehand/models/stream_event.rbs +109 -0
  134. data/sig/stagehand/models.rbs +23 -0
  135. data/sig/stagehand/request_options.rbs +34 -0
  136. data/sig/stagehand/resources/sessions.rbs +121 -0
  137. data/sig/stagehand/version.rbs +3 -0
  138. metadata +170 -54
  139. data/.gitignore +0 -16
  140. data/Gemfile +0 -4
  141. data/Rakefile +0 -10
  142. data/lib/stagehand/client/oauth.rb +0 -32
  143. data/lib/stagehand/client/user.rb +0 -10
  144. data/lib/stagehand/rack/middleware.rb +0 -33
  145. data/lib/stagehand/railtie.rb +0 -19
  146. data/spec/spec_helper.rb +0 -7
  147. data/spec/stagehand_spec.rb +0 -44
  148. 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,5 @@
1
+ # typed: strong
2
+
3
+ module Stagehand
4
+ VERSION = T.let(T.unsafe(nil), String)
5
+ 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
@@ -0,0 +1,9 @@
1
+ module Stagehand
2
+ module Internal
3
+ class Stream[Elem]
4
+ include Stagehand::Internal::Type::BaseStream[Stagehand::Internal::Util::server_sent_event, Elem]
5
+
6
+ private def iterator: -> Enumerable[Elem]
7
+ end
8
+ end
9
+ end