stagehand 0.0.3 → 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 (145) 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 +126 -0
  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 -21
  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 +173 -42
  139. data/.gitignore +0 -16
  140. data/Gemfile +0 -4
  141. data/Rakefile +0 -10
  142. data/lib/stagehand/railtie.rb +0 -14
  143. data/spec/spec_helper.rb +0 -7
  144. data/spec/stagehand_spec.rb +0 -15
  145. data/stagehand.gemspec +0 -24
@@ -0,0 +1,414 @@
1
+ # typed: strong
2
+
3
+ module Stagehand
4
+ module Models
5
+ class SessionExecuteResponse < Stagehand::Internal::Type::BaseModel
6
+ OrHash =
7
+ T.type_alias do
8
+ T.any(
9
+ Stagehand::Models::SessionExecuteResponse,
10
+ Stagehand::Internal::AnyHash
11
+ )
12
+ end
13
+
14
+ sig { returns(Stagehand::Models::SessionExecuteResponse::Data) }
15
+ attr_reader :data
16
+
17
+ sig do
18
+ params(
19
+ data: Stagehand::Models::SessionExecuteResponse::Data::OrHash
20
+ ).void
21
+ end
22
+ attr_writer :data
23
+
24
+ # Indicates whether the request was successful
25
+ sig { returns(T::Boolean) }
26
+ attr_accessor :success
27
+
28
+ sig do
29
+ params(
30
+ data: Stagehand::Models::SessionExecuteResponse::Data::OrHash,
31
+ success: T::Boolean
32
+ ).returns(T.attached_class)
33
+ end
34
+ def self.new(
35
+ data:,
36
+ # Indicates whether the request was successful
37
+ success:
38
+ )
39
+ end
40
+
41
+ sig do
42
+ override.returns(
43
+ {
44
+ data: Stagehand::Models::SessionExecuteResponse::Data,
45
+ success: T::Boolean
46
+ }
47
+ )
48
+ end
49
+ def to_hash
50
+ end
51
+
52
+ class Data < Stagehand::Internal::Type::BaseModel
53
+ OrHash =
54
+ T.type_alias do
55
+ T.any(
56
+ Stagehand::Models::SessionExecuteResponse::Data,
57
+ Stagehand::Internal::AnyHash
58
+ )
59
+ end
60
+
61
+ sig { returns(Stagehand::Models::SessionExecuteResponse::Data::Result) }
62
+ attr_reader :result
63
+
64
+ sig do
65
+ params(
66
+ result:
67
+ Stagehand::Models::SessionExecuteResponse::Data::Result::OrHash
68
+ ).void
69
+ end
70
+ attr_writer :result
71
+
72
+ sig do
73
+ returns(
74
+ T.nilable(
75
+ Stagehand::Models::SessionExecuteResponse::Data::CacheEntry
76
+ )
77
+ )
78
+ end
79
+ attr_reader :cache_entry
80
+
81
+ sig do
82
+ params(
83
+ cache_entry:
84
+ Stagehand::Models::SessionExecuteResponse::Data::CacheEntry::OrHash
85
+ ).void
86
+ end
87
+ attr_writer :cache_entry
88
+
89
+ sig do
90
+ params(
91
+ result:
92
+ Stagehand::Models::SessionExecuteResponse::Data::Result::OrHash,
93
+ cache_entry:
94
+ Stagehand::Models::SessionExecuteResponse::Data::CacheEntry::OrHash
95
+ ).returns(T.attached_class)
96
+ end
97
+ def self.new(result:, cache_entry: nil)
98
+ end
99
+
100
+ sig do
101
+ override.returns(
102
+ {
103
+ result: Stagehand::Models::SessionExecuteResponse::Data::Result,
104
+ cache_entry:
105
+ Stagehand::Models::SessionExecuteResponse::Data::CacheEntry
106
+ }
107
+ )
108
+ end
109
+ def to_hash
110
+ end
111
+
112
+ class Result < Stagehand::Internal::Type::BaseModel
113
+ OrHash =
114
+ T.type_alias do
115
+ T.any(
116
+ Stagehand::Models::SessionExecuteResponse::Data::Result,
117
+ Stagehand::Internal::AnyHash
118
+ )
119
+ end
120
+
121
+ sig do
122
+ returns(
123
+ T::Array[
124
+ Stagehand::Models::SessionExecuteResponse::Data::Result::Action
125
+ ]
126
+ )
127
+ end
128
+ attr_accessor :actions
129
+
130
+ # Whether the agent finished its task
131
+ sig { returns(T::Boolean) }
132
+ attr_accessor :completed
133
+
134
+ # Summary of what the agent accomplished
135
+ sig { returns(String) }
136
+ attr_accessor :message
137
+
138
+ # Whether the agent completed successfully
139
+ sig { returns(T::Boolean) }
140
+ attr_accessor :success
141
+
142
+ sig { returns(T.nilable(T::Hash[Symbol, T.anything])) }
143
+ attr_reader :metadata
144
+
145
+ sig { params(metadata: T::Hash[Symbol, T.anything]).void }
146
+ attr_writer :metadata
147
+
148
+ sig do
149
+ returns(
150
+ T.nilable(
151
+ Stagehand::Models::SessionExecuteResponse::Data::Result::Usage
152
+ )
153
+ )
154
+ end
155
+ attr_reader :usage
156
+
157
+ sig do
158
+ params(
159
+ usage:
160
+ Stagehand::Models::SessionExecuteResponse::Data::Result::Usage::OrHash
161
+ ).void
162
+ end
163
+ attr_writer :usage
164
+
165
+ sig do
166
+ params(
167
+ actions:
168
+ T::Array[
169
+ Stagehand::Models::SessionExecuteResponse::Data::Result::Action::OrHash
170
+ ],
171
+ completed: T::Boolean,
172
+ message: String,
173
+ success: T::Boolean,
174
+ metadata: T::Hash[Symbol, T.anything],
175
+ usage:
176
+ Stagehand::Models::SessionExecuteResponse::Data::Result::Usage::OrHash
177
+ ).returns(T.attached_class)
178
+ end
179
+ def self.new(
180
+ actions:,
181
+ # Whether the agent finished its task
182
+ completed:,
183
+ # Summary of what the agent accomplished
184
+ message:,
185
+ # Whether the agent completed successfully
186
+ success:,
187
+ metadata: nil,
188
+ usage: nil
189
+ )
190
+ end
191
+
192
+ sig do
193
+ override.returns(
194
+ {
195
+ actions:
196
+ T::Array[
197
+ Stagehand::Models::SessionExecuteResponse::Data::Result::Action
198
+ ],
199
+ completed: T::Boolean,
200
+ message: String,
201
+ success: T::Boolean,
202
+ metadata: T::Hash[Symbol, T.anything],
203
+ usage:
204
+ Stagehand::Models::SessionExecuteResponse::Data::Result::Usage
205
+ }
206
+ )
207
+ end
208
+ def to_hash
209
+ end
210
+
211
+ class Action < Stagehand::Internal::Type::BaseModel
212
+ OrHash =
213
+ T.type_alias do
214
+ T.any(
215
+ Stagehand::Models::SessionExecuteResponse::Data::Result::Action,
216
+ Stagehand::Internal::AnyHash
217
+ )
218
+ end
219
+
220
+ # Type of action taken
221
+ sig { returns(String) }
222
+ attr_accessor :type
223
+
224
+ sig { returns(T.nilable(String)) }
225
+ attr_reader :action
226
+
227
+ sig { params(action: String).void }
228
+ attr_writer :action
229
+
230
+ sig { returns(T.nilable(String)) }
231
+ attr_reader :instruction
232
+
233
+ sig { params(instruction: String).void }
234
+ attr_writer :instruction
235
+
236
+ sig { returns(T.nilable(String)) }
237
+ attr_reader :page_text
238
+
239
+ sig { params(page_text: String).void }
240
+ attr_writer :page_text
241
+
242
+ sig { returns(T.nilable(String)) }
243
+ attr_reader :page_url
244
+
245
+ sig { params(page_url: String).void }
246
+ attr_writer :page_url
247
+
248
+ # Agent's reasoning for taking this action
249
+ sig { returns(T.nilable(String)) }
250
+ attr_reader :reasoning
251
+
252
+ sig { params(reasoning: String).void }
253
+ attr_writer :reasoning
254
+
255
+ sig { returns(T.nilable(T::Boolean)) }
256
+ attr_reader :task_completed
257
+
258
+ sig { params(task_completed: T::Boolean).void }
259
+ attr_writer :task_completed
260
+
261
+ # Time taken for this action in ms
262
+ sig { returns(T.nilable(Float)) }
263
+ attr_reader :time_ms
264
+
265
+ sig { params(time_ms: Float).void }
266
+ attr_writer :time_ms
267
+
268
+ sig do
269
+ params(
270
+ type: String,
271
+ action: String,
272
+ instruction: String,
273
+ page_text: String,
274
+ page_url: String,
275
+ reasoning: String,
276
+ task_completed: T::Boolean,
277
+ time_ms: Float
278
+ ).returns(T.attached_class)
279
+ end
280
+ def self.new(
281
+ # Type of action taken
282
+ type:,
283
+ action: nil,
284
+ instruction: nil,
285
+ page_text: nil,
286
+ page_url: nil,
287
+ # Agent's reasoning for taking this action
288
+ reasoning: nil,
289
+ task_completed: nil,
290
+ # Time taken for this action in ms
291
+ time_ms: nil
292
+ )
293
+ end
294
+
295
+ sig do
296
+ override.returns(
297
+ {
298
+ type: String,
299
+ action: String,
300
+ instruction: String,
301
+ page_text: String,
302
+ page_url: String,
303
+ reasoning: String,
304
+ task_completed: T::Boolean,
305
+ time_ms: Float
306
+ }
307
+ )
308
+ end
309
+ def to_hash
310
+ end
311
+ end
312
+
313
+ class Usage < Stagehand::Internal::Type::BaseModel
314
+ OrHash =
315
+ T.type_alias do
316
+ T.any(
317
+ Stagehand::Models::SessionExecuteResponse::Data::Result::Usage,
318
+ Stagehand::Internal::AnyHash
319
+ )
320
+ end
321
+
322
+ sig { returns(Float) }
323
+ attr_accessor :inference_time_ms
324
+
325
+ sig { returns(Float) }
326
+ attr_accessor :input_tokens
327
+
328
+ sig { returns(Float) }
329
+ attr_accessor :output_tokens
330
+
331
+ sig { returns(T.nilable(Float)) }
332
+ attr_reader :cached_input_tokens
333
+
334
+ sig { params(cached_input_tokens: Float).void }
335
+ attr_writer :cached_input_tokens
336
+
337
+ sig { returns(T.nilable(Float)) }
338
+ attr_reader :reasoning_tokens
339
+
340
+ sig { params(reasoning_tokens: Float).void }
341
+ attr_writer :reasoning_tokens
342
+
343
+ sig do
344
+ params(
345
+ inference_time_ms: Float,
346
+ input_tokens: Float,
347
+ output_tokens: Float,
348
+ cached_input_tokens: Float,
349
+ reasoning_tokens: Float
350
+ ).returns(T.attached_class)
351
+ end
352
+ def self.new(
353
+ inference_time_ms:,
354
+ input_tokens:,
355
+ output_tokens:,
356
+ cached_input_tokens: nil,
357
+ reasoning_tokens: nil
358
+ )
359
+ end
360
+
361
+ sig do
362
+ override.returns(
363
+ {
364
+ inference_time_ms: Float,
365
+ input_tokens: Float,
366
+ output_tokens: Float,
367
+ cached_input_tokens: Float,
368
+ reasoning_tokens: Float
369
+ }
370
+ )
371
+ end
372
+ def to_hash
373
+ end
374
+ end
375
+ end
376
+
377
+ class CacheEntry < Stagehand::Internal::Type::BaseModel
378
+ OrHash =
379
+ T.type_alias do
380
+ T.any(
381
+ Stagehand::Models::SessionExecuteResponse::Data::CacheEntry,
382
+ Stagehand::Internal::AnyHash
383
+ )
384
+ end
385
+
386
+ # Opaque cache identifier computed from instruction, URL, options, and config
387
+ sig { returns(String) }
388
+ attr_accessor :cache_key
389
+
390
+ # Serialized cache entry that can be written to disk
391
+ sig { returns(T.anything) }
392
+ attr_accessor :entry
393
+
394
+ sig do
395
+ params(cache_key: String, entry: T.anything).returns(
396
+ T.attached_class
397
+ )
398
+ end
399
+ def self.new(
400
+ # Opaque cache identifier computed from instruction, URL, options, and config
401
+ cache_key:,
402
+ # Serialized cache entry that can be written to disk
403
+ entry:
404
+ )
405
+ end
406
+
407
+ sig { override.returns({ cache_key: String, entry: T.anything }) }
408
+ def to_hash
409
+ end
410
+ end
411
+ end
412
+ end
413
+ end
414
+ end
@@ -0,0 +1,209 @@
1
+ # typed: strong
2
+
3
+ module Stagehand
4
+ module Models
5
+ class SessionExtractParams < Stagehand::Internal::Type::BaseModel
6
+ extend Stagehand::Internal::Type::RequestParameters::Converter
7
+ include Stagehand::Internal::Type::RequestParameters
8
+
9
+ OrHash =
10
+ T.type_alias do
11
+ T.any(Stagehand::SessionExtractParams, Stagehand::Internal::AnyHash)
12
+ end
13
+
14
+ # Target frame ID for the extraction
15
+ sig { returns(T.nilable(String)) }
16
+ attr_accessor :frame_id
17
+
18
+ # Natural language instruction for what to extract
19
+ sig { returns(T.nilable(String)) }
20
+ attr_reader :instruction
21
+
22
+ sig { params(instruction: String).void }
23
+ attr_writer :instruction
24
+
25
+ sig { returns(T.nilable(Stagehand::SessionExtractParams::Options)) }
26
+ attr_reader :options
27
+
28
+ sig do
29
+ params(options: Stagehand::SessionExtractParams::Options::OrHash).void
30
+ end
31
+ attr_writer :options
32
+
33
+ # JSON Schema defining the structure of data to extract
34
+ sig { returns(T.nilable(T::Hash[Symbol, T.anything])) }
35
+ attr_reader :schema
36
+
37
+ sig { params(schema: T::Hash[Symbol, T.anything]).void }
38
+ attr_writer :schema
39
+
40
+ # Whether to stream the response via SSE
41
+ sig do
42
+ returns(
43
+ T.nilable(Stagehand::SessionExtractParams::XStreamResponse::OrSymbol)
44
+ )
45
+ end
46
+ attr_reader :x_stream_response
47
+
48
+ sig do
49
+ params(
50
+ x_stream_response:
51
+ Stagehand::SessionExtractParams::XStreamResponse::OrSymbol
52
+ ).void
53
+ end
54
+ attr_writer :x_stream_response
55
+
56
+ sig do
57
+ params(
58
+ frame_id: T.nilable(String),
59
+ instruction: String,
60
+ options: Stagehand::SessionExtractParams::Options::OrHash,
61
+ schema: T::Hash[Symbol, T.anything],
62
+ x_stream_response:
63
+ Stagehand::SessionExtractParams::XStreamResponse::OrSymbol,
64
+ request_options: Stagehand::RequestOptions::OrHash
65
+ ).returns(T.attached_class)
66
+ end
67
+ def self.new(
68
+ # Target frame ID for the extraction
69
+ frame_id: nil,
70
+ # Natural language instruction for what to extract
71
+ instruction: nil,
72
+ options: nil,
73
+ # JSON Schema defining the structure of data to extract
74
+ schema: nil,
75
+ # Whether to stream the response via SSE
76
+ x_stream_response: nil,
77
+ request_options: {}
78
+ )
79
+ end
80
+
81
+ sig do
82
+ override.returns(
83
+ {
84
+ frame_id: T.nilable(String),
85
+ instruction: String,
86
+ options: Stagehand::SessionExtractParams::Options,
87
+ schema: T::Hash[Symbol, T.anything],
88
+ x_stream_response:
89
+ Stagehand::SessionExtractParams::XStreamResponse::OrSymbol,
90
+ request_options: Stagehand::RequestOptions
91
+ }
92
+ )
93
+ end
94
+ def to_hash
95
+ end
96
+
97
+ class Options < Stagehand::Internal::Type::BaseModel
98
+ OrHash =
99
+ T.type_alias do
100
+ T.any(
101
+ Stagehand::SessionExtractParams::Options,
102
+ Stagehand::Internal::AnyHash
103
+ )
104
+ end
105
+
106
+ # Model configuration object or model name string (e.g., 'openai/gpt-5-nano')
107
+ sig { returns(T.nilable(T.any(Stagehand::ModelConfig, String))) }
108
+ attr_reader :model
109
+
110
+ sig do
111
+ params(model: T.any(Stagehand::ModelConfig::OrHash, String)).void
112
+ end
113
+ attr_writer :model
114
+
115
+ # CSS selector to scope extraction to a specific element
116
+ sig { returns(T.nilable(String)) }
117
+ attr_reader :selector
118
+
119
+ sig { params(selector: String).void }
120
+ attr_writer :selector
121
+
122
+ # Timeout in ms for the extraction
123
+ sig { returns(T.nilable(Float)) }
124
+ attr_reader :timeout
125
+
126
+ sig { params(timeout: Float).void }
127
+ attr_writer :timeout
128
+
129
+ sig do
130
+ params(
131
+ model: T.any(Stagehand::ModelConfig::OrHash, String),
132
+ selector: String,
133
+ timeout: Float
134
+ ).returns(T.attached_class)
135
+ end
136
+ def self.new(
137
+ # Model configuration object or model name string (e.g., 'openai/gpt-5-nano')
138
+ model: nil,
139
+ # CSS selector to scope extraction to a specific element
140
+ selector: nil,
141
+ # Timeout in ms for the extraction
142
+ timeout: nil
143
+ )
144
+ end
145
+
146
+ sig do
147
+ override.returns(
148
+ {
149
+ model: T.any(Stagehand::ModelConfig, String),
150
+ selector: String,
151
+ timeout: Float
152
+ }
153
+ )
154
+ end
155
+ def to_hash
156
+ end
157
+
158
+ # Model configuration object or model name string (e.g., 'openai/gpt-5-nano')
159
+ module Model
160
+ extend Stagehand::Internal::Type::Union
161
+
162
+ Variants = T.type_alias { T.any(Stagehand::ModelConfig, String) }
163
+
164
+ sig do
165
+ override.returns(
166
+ T::Array[
167
+ Stagehand::SessionExtractParams::Options::Model::Variants
168
+ ]
169
+ )
170
+ end
171
+ def self.variants
172
+ end
173
+ end
174
+ end
175
+
176
+ # Whether to stream the response via SSE
177
+ module XStreamResponse
178
+ extend Stagehand::Internal::Type::Enum
179
+
180
+ TaggedSymbol =
181
+ T.type_alias do
182
+ T.all(Symbol, Stagehand::SessionExtractParams::XStreamResponse)
183
+ end
184
+ OrSymbol = T.type_alias { T.any(Symbol, String) }
185
+
186
+ TRUE =
187
+ T.let(
188
+ :true,
189
+ Stagehand::SessionExtractParams::XStreamResponse::TaggedSymbol
190
+ )
191
+ FALSE =
192
+ T.let(
193
+ :false,
194
+ Stagehand::SessionExtractParams::XStreamResponse::TaggedSymbol
195
+ )
196
+
197
+ sig do
198
+ override.returns(
199
+ T::Array[
200
+ Stagehand::SessionExtractParams::XStreamResponse::TaggedSymbol
201
+ ]
202
+ )
203
+ end
204
+ def self.values
205
+ end
206
+ end
207
+ end
208
+ end
209
+ end
@@ -0,0 +1,91 @@
1
+ # typed: strong
2
+
3
+ module Stagehand
4
+ module Models
5
+ class SessionExtractResponse < Stagehand::Internal::Type::BaseModel
6
+ OrHash =
7
+ T.type_alias do
8
+ T.any(
9
+ Stagehand::Models::SessionExtractResponse,
10
+ Stagehand::Internal::AnyHash
11
+ )
12
+ end
13
+
14
+ sig { returns(Stagehand::Models::SessionExtractResponse::Data) }
15
+ attr_reader :data
16
+
17
+ sig do
18
+ params(
19
+ data: Stagehand::Models::SessionExtractResponse::Data::OrHash
20
+ ).void
21
+ end
22
+ attr_writer :data
23
+
24
+ # Indicates whether the request was successful
25
+ sig { returns(T::Boolean) }
26
+ attr_accessor :success
27
+
28
+ sig do
29
+ params(
30
+ data: Stagehand::Models::SessionExtractResponse::Data::OrHash,
31
+ success: T::Boolean
32
+ ).returns(T.attached_class)
33
+ end
34
+ def self.new(
35
+ data:,
36
+ # Indicates whether the request was successful
37
+ success:
38
+ )
39
+ end
40
+
41
+ sig do
42
+ override.returns(
43
+ {
44
+ data: Stagehand::Models::SessionExtractResponse::Data,
45
+ success: T::Boolean
46
+ }
47
+ )
48
+ end
49
+ def to_hash
50
+ end
51
+
52
+ class Data < Stagehand::Internal::Type::BaseModel
53
+ OrHash =
54
+ T.type_alias do
55
+ T.any(
56
+ Stagehand::Models::SessionExtractResponse::Data,
57
+ Stagehand::Internal::AnyHash
58
+ )
59
+ end
60
+
61
+ # Extracted data matching the requested schema
62
+ sig { returns(T.anything) }
63
+ attr_accessor :result
64
+
65
+ # Action ID for tracking
66
+ sig { returns(T.nilable(String)) }
67
+ attr_reader :action_id
68
+
69
+ sig { params(action_id: String).void }
70
+ attr_writer :action_id
71
+
72
+ sig do
73
+ params(result: T.anything, action_id: String).returns(
74
+ T.attached_class
75
+ )
76
+ end
77
+ def self.new(
78
+ # Extracted data matching the requested schema
79
+ result:,
80
+ # Action ID for tracking
81
+ action_id: nil
82
+ )
83
+ end
84
+
85
+ sig { override.returns({ result: T.anything, action_id: String }) }
86
+ def to_hash
87
+ end
88
+ end
89
+ end
90
+ end
91
+ end