stagehand 3.19.3 → 3.20.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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: f3995180e65110d8a64695b7be8cb095b24e8d6fb3bc2627f13df4c0acaa15f2
4
- data.tar.gz: a0b8bcd2648d2429b55c13b50d60fb7ec46da97118390900d1acfe0989e728d4
3
+ metadata.gz: d63d07d6d72284d6745a7f938ec12a7153c43a8cc9baba9e6bbf2559fd77b1e3
4
+ data.tar.gz: 8aa6950f119f872fddbb4d047e3ddb17253363c016c4be81bd573cd6a53b7bb0
5
5
  SHA512:
6
- metadata.gz: 83eae8bebac5087cda9551141db3d62bff7a0caa065ff675799610237d3ebf5114b62bb519403a3063e147b9384721d6bc0fdca28ce222c08691326f0a8b5e82
7
- data.tar.gz: 7461914b6798606c6f0a672074ed3eaba504a82794e97becf1974de15cf701ce25ceec987d6969bb833d2ef098a5562da41f7faad6b1e871c75bba3ed4b4cda9
6
+ metadata.gz: f8281b0509afbe153829b60b77e259c98339f348654ed58e216a8d43003cf99aadba760de930518c62e1350ae37cb31fcab4a2e5fe6b5dbbfad07e94fc29ce62
7
+ data.tar.gz: 295b43fd779e909fd5c8b78e42b6a5b6b1f45686a47392136a08e4860c16e7382a203caaa9b8806e341a96dc4ca2789ee5a92e1c3606169516848ac577e2d31d
data/CHANGELOG.md CHANGED
@@ -1,5 +1,30 @@
1
1
  # Changelog
2
2
 
3
+ ## 3.20.0 (2026-05-06)
4
+
5
+ Full Changelog: [v3.19.3...v3.20.0](https://github.com/browserbase/stagehand-ruby/compare/v3.19.3...v3.20.0)
6
+
7
+ ### Features
8
+
9
+ * [feat]: add `ignoreSelectors` to `extract()` ([db24a9a](https://github.com/browserbase/stagehand-ruby/commit/db24a9ab45dc464d2ad88f9b50d39952c4c76801))
10
+ * [STG-1798] feat: support Browserbase verified sessions ([9647eb3](https://github.com/browserbase/stagehand-ruby/commit/9647eb3a4df86cc9d7aedb2f0a9ddd0babd39565))
11
+ * [STG-1808] Deprecate Browserbase project ID ([7af1c21](https://github.com/browserbase/stagehand-ruby/commit/7af1c21a07e7163ffb0b86f6c199989b750e0365))
12
+ * Bedrock auth passthrough ([5cb6ecb](https://github.com/browserbase/stagehand-ruby/commit/5cb6ecbe621e894dc6c5aec379fdca1183eec4fc))
13
+ * remove experimental requirement on agent variables ([#2079](https://github.com/browserbase/stagehand-ruby/issues/2079)) ([6f106d7](https://github.com/browserbase/stagehand-ruby/commit/6f106d74feb1b3f036433ec67dda5e4c395f434e))
14
+ * Revert "[STG-1573] Add providerOptions for extensible model auth ([#1822](https://github.com/browserbase/stagehand-ruby/issues/1822))" ([0c83a09](https://github.com/browserbase/stagehand-ruby/commit/0c83a0978116f8fc11a4edf78586f3d61b8af5e8))
15
+ * support setting headers via env ([5515959](https://github.com/browserbase/stagehand-ruby/commit/5515959505685e62f9324aebf470a295dd6d8292))
16
+
17
+
18
+ ### Bug Fixes
19
+
20
+ * avoid gzip buffering during streaming ([23c3eef](https://github.com/browserbase/stagehand-ruby/commit/23c3eef17497edbf3ec03049d12c548607112c8d))
21
+ * multipart encoding for file arrays ([149b303](https://github.com/browserbase/stagehand-ruby/commit/149b303eb54f4c9af037a5e073a2d6c92d959b44))
22
+
23
+
24
+ ### Chores
25
+
26
+ * **internal:** more robust bootstrap script ([69c050a](https://github.com/browserbase/stagehand-ruby/commit/69c050a467b5fcab904331bd30bd18d46cee8cae))
27
+
3
28
  ## 3.19.3 (2026-04-03)
4
29
 
5
30
  Full Changelog: [v3.18.0...v3.19.3](https://github.com/browserbase/stagehand-ruby/compare/v3.18.0...v3.19.3)
data/README.md CHANGED
@@ -90,7 +90,6 @@ require "playwright"
90
90
 
91
91
  client = Stagehand::Client.new(
92
92
  browserbase_api_key: ENV["BROWSERBASE_API_KEY"],
93
- browserbase_project_id: ENV["BROWSERBASE_PROJECT_ID"],
94
93
  model_api_key: ENV["MODEL_API_KEY"],
95
94
  server: "remote"
96
95
  )
@@ -162,10 +161,10 @@ client.sessions.end_(session_id)
162
161
 
163
162
  Set your environment variables (from `examples/.env.example`):
164
163
 
165
- - `STAGEHAND_API_URL`
166
164
  - `MODEL_API_KEY`
167
165
  - `BROWSERBASE_API_KEY`
168
- - `BROWSERBASE_PROJECT_ID`
166
+
167
+ `STAGEHAND_API_URL` is optional and defaults to the hosted Stagehand API. `STAGEHAND_BASE_URL` remains supported as a deprecated fallback when `STAGEHAND_API_URL` is unset.
169
168
 
170
169
  ```bash
171
170
  cp examples/.env.example examples/.env
@@ -19,7 +19,8 @@ module Stagehand
19
19
  # @return [String]
20
20
  attr_reader :browserbase_api_key
21
21
 
22
- # Your [Browserbase Project ID](https://www.browserbase.com/settings)
22
+ # Deprecated. Browserbase API keys are now project-scoped, so this value is accepted for
23
+ # backwards compatibility and ignored.
23
24
  # @return [String]
24
25
  attr_reader :browserbase_project_id
25
26
 
@@ -34,7 +35,7 @@ module Stagehand
34
35
  #
35
36
  # @return [Hash{String=>String}]
36
37
  private def auth_headers
37
- {**bb_api_key_auth, **bb_project_id_auth, **llm_model_api_key_auth}
38
+ {**bb_api_key_auth, **llm_model_api_key_auth}
38
39
  end
39
40
 
40
41
  # @api private
@@ -48,7 +49,7 @@ module Stagehand
48
49
  #
49
50
  # @return [Hash{String=>String}]
50
51
  private def bb_project_id_auth
51
- {"x-bb-project-id" => @browserbase_project_id}
52
+ {}
52
53
  end
53
54
 
54
55
  # @api private
@@ -63,8 +64,8 @@ module Stagehand
63
64
  # @param browserbase_api_key [String, nil] Your [Browserbase API Key](https://www.browserbase.com/settings) Defaults to
64
65
  # `ENV["BROWSERBASE_API_KEY"]`
65
66
  #
66
- # @param browserbase_project_id [String, nil] Your [Browserbase Project ID](https://www.browserbase.com/settings) Defaults to
67
- # `ENV["BROWSERBASE_PROJECT_ID"]`
67
+ # @param browserbase_project_id [String, nil] Deprecated. Browserbase API keys are now project-scoped, so
68
+ # this value is accepted for backwards compatibility and ignored.
68
69
  #
69
70
  # @param model_api_key [String, nil] Your LLM provider API key (e.g. OPENAI_API_KEY, ANTHROPIC_API_KEY, etc.)
70
71
  # Defaults to `ENV["MODEL_API_KEY"]`
@@ -72,7 +73,8 @@ module Stagehand
72
73
  # @param server [String] Server mode to use ("remote" or "local"). Defaults to "remote"
73
74
  #
74
75
  # @param base_url [String, nil] Override the default base URL for the API, e.g.,
75
- # `"https://api.example.com/v2/"`. Defaults to `ENV["STAGEHAND_BASE_URL"]`
76
+ # `"https://api.example.com/v2/"`. Defaults to `ENV["STAGEHAND_API_URL"]`,
77
+ # then `ENV["STAGEHAND_BASE_URL"]`
76
78
  #
77
79
  # @param max_retries [Integer] Max number of retries to attempt after a failed retryable request.
78
80
  #
@@ -83,10 +85,10 @@ module Stagehand
83
85
  # @param max_retry_delay [Float]
84
86
  def initialize(
85
87
  browserbase_api_key: ENV["BROWSERBASE_API_KEY"],
86
- browserbase_project_id: ENV["BROWSERBASE_PROJECT_ID"],
88
+ browserbase_project_id: nil,
87
89
  model_api_key: ENV["MODEL_API_KEY"],
88
90
  server: "remote",
89
- base_url: ENV["STAGEHAND_BASE_URL"],
91
+ base_url: ENV["STAGEHAND_API_URL"] || ENV["STAGEHAND_BASE_URL"],
90
92
  max_retries: self.class::DEFAULT_MAX_RETRIES,
91
93
  timeout: self.class::DEFAULT_TIMEOUT_IN_SECONDS,
92
94
  initial_retry_delay: self.class::DEFAULT_INITIAL_RETRY_DELAY,
@@ -99,15 +101,24 @@ module Stagehand
99
101
  raise ArgumentError,
100
102
  "browserbase_api_key is required, and can be set via environ: \"BROWSERBASE_API_KEY\""
101
103
  end
102
- if browserbase_project_id.nil?
103
- raise ArgumentError,
104
- "browserbase_project_id is required, and can be set via environ: \"BROWSERBASE_PROJECT_ID\""
105
- end
106
104
  if model_api_key.nil?
107
105
  raise ArgumentError,
108
106
  "model_api_key is required, and can be set via environ: \"MODEL_API_KEY\""
109
107
  end
110
108
 
109
+ headers = {}
110
+ custom_headers_env = ENV["STAGEHAND_CUSTOM_HEADERS"]
111
+ unless custom_headers_env.nil?
112
+ parsed = {}
113
+ custom_headers_env.split("\n").each do |line|
114
+ colon = line.index(":")
115
+ unless colon.nil?
116
+ parsed[line[0...colon].strip] = line[(colon + 1)..].strip
117
+ end
118
+ end
119
+ headers = parsed.merge(headers)
120
+ end
121
+
111
122
  @browserbase_api_key = browserbase_api_key.to_s
112
123
  @browserbase_project_id = browserbase_project_id.to_s
113
124
  @model_api_key = model_api_key.to_s
@@ -117,7 +128,8 @@ module Stagehand
117
128
  timeout: timeout,
118
129
  max_retries: max_retries,
119
130
  initial_retry_delay: initial_retry_delay,
120
- max_retry_delay: max_retry_delay
131
+ max_retry_delay: max_retry_delay,
132
+ headers: headers
121
133
  )
122
134
 
123
135
  @sessions = Stagehand::Resources::Sessions.new(client: self)
@@ -610,6 +610,7 @@ module Stagehand
610
610
  #
611
611
  # @return [Array(String, Enumerable<String>)]
612
612
  private def encode_multipart_streaming(body)
613
+ # rubocop:disable Style/CaseEquality
613
614
  # RFC 1521 Section 7.2.1 says we should have 70 char maximum for boundary length
614
615
  boundary = SecureRandom.urlsafe_base64(46)
615
616
 
@@ -619,7 +620,7 @@ module Stagehand
619
620
  in Hash
620
621
  body.each do |key, val|
621
622
  case val
622
- in Array if val.all? { primitive?(_1) }
623
+ in Array if val.all? { primitive?(_1) || Stagehand::Internal::Type::FileInput === _1 }
623
624
  val.each do |v|
624
625
  write_multipart_chunk(y, boundary: boundary, key: key, val: v, closing: closing)
625
626
  end
@@ -635,6 +636,7 @@ module Stagehand
635
636
 
636
637
  fused_io = fused_enum(strio) { closing.each(&:call) }
637
638
  [boundary, fused_io]
639
+ # rubocop:enable Style/CaseEquality
638
640
  end
639
641
 
640
642
  # @api private
@@ -50,7 +50,6 @@ module Stagehand
50
50
 
51
51
  missing = []
52
52
  missing << "browserbase_api_key" if client.browserbase_api_key.to_s.empty?
53
- missing << "browserbase_project_id" if client.browserbase_project_id.to_s.empty?
54
53
  return if missing.empty?
55
54
 
56
55
  message =
@@ -213,10 +212,9 @@ module Stagehand
213
212
  end
214
213
 
215
214
  class ServerManager
216
- def initialize(model_api_key:, browserbase_api_key:, browserbase_project_id:)
215
+ def initialize(model_api_key:, browserbase_api_key:)
217
216
  @model_api_key = model_api_key
218
217
  @browserbase_api_key = browserbase_api_key
219
- @browserbase_project_id = browserbase_project_id
220
218
  @host = DEFAULT_HOST
221
219
  @port = 0
222
220
  @mutex = Mutex.new
@@ -335,9 +333,6 @@ module Stagehand
335
333
  if @browserbase_api_key.to_s != ""
336
334
  env["BROWSERBASE_API_KEY"] = @browserbase_api_key
337
335
  end
338
- if @browserbase_project_id.to_s != ""
339
- env["BROWSERBASE_PROJECT_ID"] = @browserbase_project_id
340
- end
341
336
  env
342
337
  end
343
338
 
@@ -376,8 +371,6 @@ module Stagehand
376
371
  kwargs[:base_url] = base_url.nil? ? "http://#{DEFAULT_HOST}" : base_url
377
372
  kwargs[:browserbase_api_key] =
378
373
  kwargs[:browserbase_api_key] || ENV["BROWSERBASE_API_KEY"] || ""
379
- kwargs[:browserbase_project_id] =
380
- kwargs[:browserbase_project_id] || ENV["BROWSERBASE_PROJECT_ID"] || ""
381
374
  end
382
375
 
383
376
  super(**kwargs)
@@ -386,8 +379,7 @@ module Stagehand
386
379
 
387
380
  @local_server_manager = Stagehand::Local::ServerManager.new(
388
381
  model_api_key: @model_api_key,
389
- browserbase_api_key: @browserbase_api_key,
390
- browserbase_project_id: @browserbase_project_id
382
+ browserbase_api_key: @browserbase_api_key
391
383
  )
392
384
  end
393
385
 
@@ -421,8 +413,7 @@ module Stagehand
421
413
  end
422
414
 
423
415
  def bb_project_id_auth
424
- return {} if @browserbase_project_id.to_s.empty?
425
- super
416
+ {}
426
417
  end
427
418
  end
428
419
 
@@ -210,7 +210,14 @@ module Stagehand
210
210
  # @return [Boolean, nil]
211
211
  optional :use_search, Stagehand::Internal::Type::Boolean, api_name: :useSearch
212
212
 
213
- # @!method initialize(instruction:, highlight_cursor: nil, max_steps: nil, tool_timeout: nil, use_search: nil)
213
+ # @!attribute variables
214
+ # Variables available to the agent via %variableName% syntax in supported tools
215
+ #
216
+ # @return [Hash{Symbol=>String, Float, Boolean, Stagehand::Models::SessionExecuteParams::ExecuteOptions::Variable::UnionMember3}, nil]
217
+ optional :variables,
218
+ -> { Stagehand::Internal::Type::HashOf[union: Stagehand::SessionExecuteParams::ExecuteOptions::Variable] }
219
+
220
+ # @!method initialize(instruction:, highlight_cursor: nil, max_steps: nil, tool_timeout: nil, use_search: nil, variables: nil)
214
221
  # @param instruction [String] Natural language instruction for the agent
215
222
  #
216
223
  # @param highlight_cursor [Boolean] Whether to visually highlight the cursor during execution
@@ -220,6 +227,54 @@ module Stagehand
220
227
  # @param tool_timeout [Float] Timeout in milliseconds for each agent tool call
221
228
  #
222
229
  # @param use_search [Boolean] Whether to enable the web search tool powered by Browserbase Search API
230
+ #
231
+ # @param variables [Hash{Symbol=>String, Float, Boolean, Stagehand::Models::SessionExecuteParams::ExecuteOptions::Variable::UnionMember3}] Variables available to the agent via %variableName% syntax in supported tools
232
+
233
+ module Variable
234
+ extend Stagehand::Internal::Type::Union
235
+
236
+ variant String
237
+
238
+ variant Float
239
+
240
+ variant Stagehand::Internal::Type::Boolean
241
+
242
+ variant -> { Stagehand::SessionExecuteParams::ExecuteOptions::Variable::UnionMember3 }
243
+
244
+ class UnionMember3 < Stagehand::Internal::Type::BaseModel
245
+ # @!attribute value
246
+ #
247
+ # @return [String, Float, Boolean]
248
+ required :value,
249
+ union: -> { Stagehand::SessionExecuteParams::ExecuteOptions::Variable::UnionMember3::Value }
250
+
251
+ # @!attribute description
252
+ #
253
+ # @return [String, nil]
254
+ optional :description, String
255
+
256
+ # @!method initialize(value:, description: nil)
257
+ # @param value [String, Float, Boolean]
258
+ # @param description [String]
259
+
260
+ # @see Stagehand::Models::SessionExecuteParams::ExecuteOptions::Variable::UnionMember3#value
261
+ module Value
262
+ extend Stagehand::Internal::Type::Union
263
+
264
+ variant String
265
+
266
+ variant Float
267
+
268
+ variant Stagehand::Internal::Type::Boolean
269
+
270
+ # @!method self.variants
271
+ # @return [Array(String, Float, Boolean)]
272
+ end
273
+ end
274
+
275
+ # @!method self.variants
276
+ # @return [Array(String, Float, Boolean, Stagehand::Models::SessionExecuteParams::ExecuteOptions::Variable::UnionMember3)]
277
+ end
223
278
  end
224
279
 
225
280
  # Whether to stream the response via SSE
@@ -60,6 +60,12 @@ module Stagehand
60
60
  # @param request_options [Stagehand::RequestOptions, Hash{Symbol=>Object}]
61
61
 
62
62
  class Options < Stagehand::Internal::Type::BaseModel
63
+ # @!attribute ignore_selectors
64
+ # Selectors for elements and subtrees that should be excluded from extraction
65
+ #
66
+ # @return [Array<String>, nil]
67
+ optional :ignore_selectors, Stagehand::Internal::Type::ArrayOf[String], api_name: :ignoreSelectors
68
+
63
69
  # @!attribute model
64
70
  # Model configuration object or model name string (e.g., 'openai/gpt-5-nano')
65
71
  #
@@ -78,7 +84,9 @@ module Stagehand
78
84
  # @return [Float, nil]
79
85
  optional :timeout, Float
80
86
 
81
- # @!method initialize(model: nil, selector: nil, timeout: nil)
87
+ # @!method initialize(ignore_selectors: nil, model: nil, selector: nil, timeout: nil)
88
+ # @param ignore_selectors [Array<String>] Selectors for elements and subtrees that should be excluded from extraction
89
+ #
82
90
  # @param model [Stagehand::Models::ModelConfig, String] Model configuration object or model name string (e.g., 'openai/gpt-5-nano')
83
91
  #
84
92
  # @param selector [String] CSS selector to scope extraction to a specific element
@@ -353,6 +353,10 @@ module Stagehand
353
353
  optional :keep_alive, Stagehand::Internal::Type::Boolean, api_name: :keepAlive
354
354
 
355
355
  # @!attribute project_id
356
+ # @deprecated
357
+ #
358
+ # Deprecated. Browserbase API keys are now project-scoped, so this field is no
359
+ # longer required.
356
360
  #
357
361
  # @return [String, nil]
358
362
  optional :project_id, String, api_name: :projectId
@@ -380,13 +384,24 @@ module Stagehand
380
384
  api_name: :userMetadata
381
385
 
382
386
  # @!method initialize(browser_settings: nil, extension_id: nil, keep_alive: nil, project_id: nil, proxies: nil, region: nil, timeout: nil, user_metadata: nil)
387
+ # Some parameter documentations has been truncated, see
388
+ # {Stagehand::Models::SessionStartParams::BrowserbaseSessionCreateParams} for more
389
+ # details.
390
+ #
383
391
  # @param browser_settings [Stagehand::Models::SessionStartParams::BrowserbaseSessionCreateParams::BrowserSettings]
392
+ #
384
393
  # @param extension_id [String]
394
+ #
385
395
  # @param keep_alive [Boolean]
386
- # @param project_id [String]
396
+ #
397
+ # @param project_id [String] Deprecated. Browserbase API keys are now project-scoped, so this field is no lon
398
+ #
387
399
  # @param proxies [Boolean, Array<Stagehand::Models::SessionStartParams::BrowserbaseSessionCreateParams::Proxies::ProxyConfigList::Browserbase, Stagehand::Models::SessionStartParams::BrowserbaseSessionCreateParams::Proxies::ProxyConfigList::External>]
400
+ #
388
401
  # @param region [Symbol, Stagehand::Models::SessionStartParams::BrowserbaseSessionCreateParams::Region]
402
+ #
389
403
  # @param timeout [Float]
404
+ #
390
405
  # @param user_metadata [Hash{Symbol=>Object}]
391
406
 
392
407
  # @see Stagehand::Models::SessionStartParams::BrowserbaseSessionCreateParams#browser_settings
@@ -401,6 +416,16 @@ module Stagehand
401
416
  # @return [Boolean, nil]
402
417
  optional :block_ads, Stagehand::Internal::Type::Boolean, api_name: :blockAds
403
418
 
419
+ # @!attribute captcha_image_selector
420
+ #
421
+ # @return [String, nil]
422
+ optional :captcha_image_selector, String, api_name: :captchaImageSelector
423
+
424
+ # @!attribute captcha_input_selector
425
+ #
426
+ # @return [String, nil]
427
+ optional :captcha_input_selector, String, api_name: :captchaInputSelector
428
+
404
429
  # @!attribute context
405
430
  #
406
431
  # @return [Stagehand::Models::SessionStartParams::BrowserbaseSessionCreateParams::BrowserSettings::Context, nil]
@@ -423,6 +448,12 @@ module Stagehand
423
448
  # @return [Boolean, nil]
424
449
  optional :log_session, Stagehand::Internal::Type::Boolean, api_name: :logSession
425
450
 
451
+ # @!attribute os
452
+ #
453
+ # @return [Symbol, Stagehand::Models::SessionStartParams::BrowserbaseSessionCreateParams::BrowserSettings::Os, nil]
454
+ optional :os,
455
+ enum: -> { Stagehand::SessionStartParams::BrowserbaseSessionCreateParams::BrowserSettings::Os }
456
+
426
457
  # @!attribute record_session
427
458
  #
428
459
  # @return [Boolean, nil]
@@ -433,21 +464,30 @@ module Stagehand
433
464
  # @return [Boolean, nil]
434
465
  optional :solve_captchas, Stagehand::Internal::Type::Boolean, api_name: :solveCaptchas
435
466
 
467
+ # @!attribute verified
468
+ #
469
+ # @return [Boolean, nil]
470
+ optional :verified, Stagehand::Internal::Type::Boolean
471
+
436
472
  # @!attribute viewport
437
473
  #
438
474
  # @return [Stagehand::Models::SessionStartParams::BrowserbaseSessionCreateParams::BrowserSettings::Viewport, nil]
439
475
  optional :viewport,
440
476
  -> { Stagehand::SessionStartParams::BrowserbaseSessionCreateParams::BrowserSettings::Viewport }
441
477
 
442
- # @!method initialize(advanced_stealth: nil, block_ads: nil, context: nil, extension_id: nil, fingerprint: nil, log_session: nil, record_session: nil, solve_captchas: nil, viewport: nil)
478
+ # @!method initialize(advanced_stealth: nil, block_ads: nil, captcha_image_selector: nil, captcha_input_selector: nil, context: nil, extension_id: nil, fingerprint: nil, log_session: nil, os: nil, record_session: nil, solve_captchas: nil, verified: nil, viewport: nil)
443
479
  # @param advanced_stealth [Boolean]
444
480
  # @param block_ads [Boolean]
481
+ # @param captcha_image_selector [String]
482
+ # @param captcha_input_selector [String]
445
483
  # @param context [Stagehand::Models::SessionStartParams::BrowserbaseSessionCreateParams::BrowserSettings::Context]
446
484
  # @param extension_id [String]
447
485
  # @param fingerprint [Stagehand::Models::SessionStartParams::BrowserbaseSessionCreateParams::BrowserSettings::Fingerprint]
448
486
  # @param log_session [Boolean]
487
+ # @param os [Symbol, Stagehand::Models::SessionStartParams::BrowserbaseSessionCreateParams::BrowserSettings::Os]
449
488
  # @param record_session [Boolean]
450
489
  # @param solve_captchas [Boolean]
490
+ # @param verified [Boolean]
451
491
  # @param viewport [Stagehand::Models::SessionStartParams::BrowserbaseSessionCreateParams::BrowserSettings::Viewport]
452
492
 
453
493
  # @see Stagehand::Models::SessionStartParams::BrowserbaseSessionCreateParams::BrowserSettings#context
@@ -596,6 +636,20 @@ module Stagehand
596
636
  end
597
637
  end
598
638
 
639
+ # @see Stagehand::Models::SessionStartParams::BrowserbaseSessionCreateParams::BrowserSettings#os
640
+ module Os
641
+ extend Stagehand::Internal::Type::Enum
642
+
643
+ WINDOWS = :windows
644
+ MAC = :mac
645
+ LINUX = :linux
646
+ MOBILE = :mobile
647
+ TABLET = :tablet
648
+
649
+ # @!method self.values
650
+ # @return [Array<Symbol>]
651
+ end
652
+
599
653
  # @see Stagehand::Models::SessionStartParams::BrowserbaseSessionCreateParams::BrowserSettings#viewport
600
654
  class Viewport < Stagehand::Internal::Type::BaseModel
601
655
  # @!attribute height
@@ -77,8 +77,11 @@ module Stagehand
77
77
  path: ["v1/sessions/%1$s/act", id],
78
78
  headers: {
79
79
  "accept" => "text/event-stream",
80
+ "accept-encoding" => "identity",
80
81
  **parsed.slice(*header_params.keys)
81
- }.transform_keys(header_params),
82
+ }.transform_keys(
83
+ header_params
84
+ ),
82
85
  body: parsed.except(*header_params.keys),
83
86
  stream: Stagehand::Internal::Stream,
84
87
  model: Stagehand::StreamEvent,
@@ -193,8 +196,11 @@ module Stagehand
193
196
  path: ["v1/sessions/%1$s/agentExecute", id],
194
197
  headers: {
195
198
  "accept" => "text/event-stream",
199
+ "accept-encoding" => "identity",
196
200
  **parsed.slice(*header_params.keys)
197
- }.transform_keys(header_params),
201
+ }.transform_keys(
202
+ header_params
203
+ ),
198
204
  body: parsed.except(*header_params.keys),
199
205
  stream: Stagehand::Internal::Stream,
200
206
  model: Stagehand::StreamEvent,
@@ -279,8 +285,11 @@ module Stagehand
279
285
  path: ["v1/sessions/%1$s/extract", id],
280
286
  headers: {
281
287
  "accept" => "text/event-stream",
288
+ "accept-encoding" => "identity",
282
289
  **parsed.slice(*header_params.keys)
283
- }.transform_keys(header_params),
290
+ }.transform_keys(
291
+ header_params
292
+ ),
284
293
  body: parsed.except(*header_params.keys),
285
294
  stream: Stagehand::Internal::Stream,
286
295
  model: Stagehand::StreamEvent,
@@ -397,8 +406,11 @@ module Stagehand
397
406
  path: ["v1/sessions/%1$s/observe", id],
398
407
  headers: {
399
408
  "accept" => "text/event-stream",
409
+ "accept-encoding" => "identity",
400
410
  **parsed.slice(*header_params.keys)
401
- }.transform_keys(header_params),
411
+ }.transform_keys(
412
+ header_params
413
+ ),
402
414
  body: parsed.except(*header_params.keys),
403
415
  stream: Stagehand::Internal::Stream,
404
416
  model: Stagehand::StreamEvent,
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Stagehand
4
- VERSION = "3.19.3"
4
+ VERSION = "3.20.0"
5
5
  end
@@ -14,7 +14,7 @@ module Stagehand
14
14
  sig { returns(String) }
15
15
  attr_reader :browserbase_api_key
16
16
 
17
- # Your [Browserbase Project ID](https://www.browserbase.com/settings)
17
+ # Deprecated. Browserbase API keys are now project-scoped, so this value is accepted for backwards compatibility and ignored.
18
18
  sig { returns(String) }
19
19
  attr_reader :browserbase_project_id
20
20
 
@@ -63,17 +63,17 @@ module Stagehand
63
63
  # Your [Browserbase API Key](https://www.browserbase.com/settings) Defaults to
64
64
  # `ENV["BROWSERBASE_API_KEY"]`
65
65
  browserbase_api_key: ENV["BROWSERBASE_API_KEY"],
66
- # Your [Browserbase Project ID](https://www.browserbase.com/settings) Defaults to
67
- # `ENV["BROWSERBASE_PROJECT_ID"]`
68
- browserbase_project_id: ENV["BROWSERBASE_PROJECT_ID"],
66
+ # Deprecated. Browserbase API keys are now project-scoped, so this value is accepted for backwards compatibility and ignored.
67
+ browserbase_project_id: nil,
69
68
  # Your LLM provider API key (e.g. OPENAI_API_KEY, ANTHROPIC_API_KEY, etc.)
70
69
  # Defaults to `ENV["MODEL_API_KEY"]`
71
70
  model_api_key: ENV["MODEL_API_KEY"],
72
71
  # Server mode to use ("remote" or "local"). Defaults to "remote"
73
72
  server: "remote",
74
73
  # Override the default base URL for the API, e.g.,
75
- # `"https://api.example.com/v2/"`. Defaults to `ENV["STAGEHAND_BASE_URL"]`
76
- base_url: ENV["STAGEHAND_BASE_URL"],
74
+ # `"https://api.example.com/v2/"`. Defaults to `ENV["STAGEHAND_API_URL"]`,
75
+ # then `ENV["STAGEHAND_BASE_URL"]`
76
+ base_url: ENV["STAGEHAND_API_URL"] || ENV["STAGEHAND_BASE_URL"],
77
77
  # Max number of retries to attempt after a failed retryable request.
78
78
  max_retries: Stagehand::Client::DEFAULT_MAX_RETRIES,
79
79
  timeout: Stagehand::Client::DEFAULT_TIMEOUT_IN_SECONDS,
@@ -401,13 +401,57 @@ module Stagehand
401
401
  sig { params(use_search: T::Boolean).void }
402
402
  attr_writer :use_search
403
403
 
404
+ # Variables available to the agent via %variableName% syntax in supported tools
405
+ sig do
406
+ returns(
407
+ T.nilable(
408
+ T::Hash[
409
+ Symbol,
410
+ T.any(
411
+ String,
412
+ Float,
413
+ T::Boolean,
414
+ Stagehand::SessionExecuteParams::ExecuteOptions::Variable::UnionMember3
415
+ )
416
+ ]
417
+ )
418
+ )
419
+ end
420
+ attr_reader :variables
421
+
422
+ sig do
423
+ params(
424
+ variables:
425
+ T::Hash[
426
+ Symbol,
427
+ T.any(
428
+ String,
429
+ Float,
430
+ T::Boolean,
431
+ Stagehand::SessionExecuteParams::ExecuteOptions::Variable::UnionMember3::OrHash
432
+ )
433
+ ]
434
+ ).void
435
+ end
436
+ attr_writer :variables
437
+
404
438
  sig do
405
439
  params(
406
440
  instruction: String,
407
441
  highlight_cursor: T::Boolean,
408
442
  max_steps: Float,
409
443
  tool_timeout: Float,
410
- use_search: T::Boolean
444
+ use_search: T::Boolean,
445
+ variables:
446
+ T::Hash[
447
+ Symbol,
448
+ T.any(
449
+ String,
450
+ Float,
451
+ T::Boolean,
452
+ Stagehand::SessionExecuteParams::ExecuteOptions::Variable::UnionMember3::OrHash
453
+ )
454
+ ]
411
455
  ).returns(T.attached_class)
412
456
  end
413
457
  def self.new(
@@ -420,7 +464,9 @@ module Stagehand
420
464
  # Timeout in milliseconds for each agent tool call
421
465
  tool_timeout: nil,
422
466
  # Whether to enable the web search tool powered by Browserbase Search API
423
- use_search: nil
467
+ use_search: nil,
468
+ # Variables available to the agent via %variableName% syntax in supported tools
469
+ variables: nil
424
470
  )
425
471
  end
426
472
 
@@ -431,12 +477,107 @@ module Stagehand
431
477
  highlight_cursor: T::Boolean,
432
478
  max_steps: Float,
433
479
  tool_timeout: Float,
434
- use_search: T::Boolean
480
+ use_search: T::Boolean,
481
+ variables:
482
+ T::Hash[
483
+ Symbol,
484
+ T.any(
485
+ String,
486
+ Float,
487
+ T::Boolean,
488
+ Stagehand::SessionExecuteParams::ExecuteOptions::Variable::UnionMember3
489
+ )
490
+ ]
435
491
  }
436
492
  )
437
493
  end
438
494
  def to_hash
439
495
  end
496
+
497
+ module Variable
498
+ extend Stagehand::Internal::Type::Union
499
+
500
+ Variants =
501
+ T.type_alias do
502
+ T.any(
503
+ String,
504
+ Float,
505
+ T::Boolean,
506
+ Stagehand::SessionExecuteParams::ExecuteOptions::Variable::UnionMember3
507
+ )
508
+ end
509
+
510
+ class UnionMember3 < Stagehand::Internal::Type::BaseModel
511
+ OrHash =
512
+ T.type_alias do
513
+ T.any(
514
+ Stagehand::SessionExecuteParams::ExecuteOptions::Variable::UnionMember3,
515
+ Stagehand::Internal::AnyHash
516
+ )
517
+ end
518
+
519
+ sig do
520
+ returns(
521
+ Stagehand::SessionExecuteParams::ExecuteOptions::Variable::UnionMember3::Value::Variants
522
+ )
523
+ end
524
+ attr_accessor :value
525
+
526
+ sig { returns(T.nilable(String)) }
527
+ attr_reader :description
528
+
529
+ sig { params(description: String).void }
530
+ attr_writer :description
531
+
532
+ sig do
533
+ params(
534
+ value:
535
+ Stagehand::SessionExecuteParams::ExecuteOptions::Variable::UnionMember3::Value::Variants,
536
+ description: String
537
+ ).returns(T.attached_class)
538
+ end
539
+ def self.new(value:, description: nil)
540
+ end
541
+
542
+ sig do
543
+ override.returns(
544
+ {
545
+ value:
546
+ Stagehand::SessionExecuteParams::ExecuteOptions::Variable::UnionMember3::Value::Variants,
547
+ description: String
548
+ }
549
+ )
550
+ end
551
+ def to_hash
552
+ end
553
+
554
+ module Value
555
+ extend Stagehand::Internal::Type::Union
556
+
557
+ Variants = T.type_alias { T.any(String, Float, T::Boolean) }
558
+
559
+ sig do
560
+ override.returns(
561
+ T::Array[
562
+ Stagehand::SessionExecuteParams::ExecuteOptions::Variable::UnionMember3::Value::Variants
563
+ ]
564
+ )
565
+ end
566
+ def self.variants
567
+ end
568
+ end
569
+ end
570
+
571
+ sig do
572
+ override.returns(
573
+ T::Array[
574
+ Stagehand::SessionExecuteParams::ExecuteOptions::Variable::Variants
575
+ ]
576
+ )
577
+ end
578
+ def self.variants
579
+ end
580
+ end
440
581
  end
441
582
 
442
583
  # Whether to stream the response via SSE
@@ -111,6 +111,13 @@ module Stagehand
111
111
  )
112
112
  end
113
113
 
114
+ # Selectors for elements and subtrees that should be excluded from extraction
115
+ sig { returns(T.nilable(T::Array[String])) }
116
+ attr_reader :ignore_selectors
117
+
118
+ sig { params(ignore_selectors: T::Array[String]).void }
119
+ attr_writer :ignore_selectors
120
+
114
121
  # Model configuration object or model name string (e.g., 'openai/gpt-5-nano')
115
122
  sig { returns(T.nilable(T.any(Stagehand::ModelConfig, String))) }
116
123
  attr_reader :model
@@ -136,12 +143,15 @@ module Stagehand
136
143
 
137
144
  sig do
138
145
  params(
146
+ ignore_selectors: T::Array[String],
139
147
  model: T.any(Stagehand::ModelConfig::OrHash, String),
140
148
  selector: String,
141
149
  timeout: Float
142
150
  ).returns(T.attached_class)
143
151
  end
144
152
  def self.new(
153
+ # Selectors for elements and subtrees that should be excluded from extraction
154
+ ignore_selectors: nil,
145
155
  # Model configuration object or model name string (e.g., 'openai/gpt-5-nano')
146
156
  model: nil,
147
157
  # CSS selector to scope extraction to a specific element
@@ -154,6 +164,7 @@ module Stagehand
154
164
  sig do
155
165
  override.returns(
156
166
  {
167
+ ignore_selectors: T::Array[String],
157
168
  model: T.any(Stagehand::ModelConfig, String),
158
169
  selector: String,
159
170
  timeout: Float
@@ -680,6 +680,8 @@ module Stagehand
680
680
  sig { params(keep_alive: T::Boolean).void }
681
681
  attr_writer :keep_alive
682
682
 
683
+ # Deprecated. Browserbase API keys are now project-scoped, so this field is no
684
+ # longer required.
683
685
  sig { returns(T.nilable(String)) }
684
686
  attr_reader :project_id
685
687
 
@@ -751,6 +753,8 @@ module Stagehand
751
753
  browser_settings: nil,
752
754
  extension_id: nil,
753
755
  keep_alive: nil,
756
+ # Deprecated. Browserbase API keys are now project-scoped, so this field is no
757
+ # longer required.
754
758
  project_id: nil,
755
759
  proxies: nil,
756
760
  region: nil,
@@ -800,6 +804,18 @@ module Stagehand
800
804
  sig { params(block_ads: T::Boolean).void }
801
805
  attr_writer :block_ads
802
806
 
807
+ sig { returns(T.nilable(String)) }
808
+ attr_reader :captcha_image_selector
809
+
810
+ sig { params(captcha_image_selector: String).void }
811
+ attr_writer :captcha_image_selector
812
+
813
+ sig { returns(T.nilable(String)) }
814
+ attr_reader :captcha_input_selector
815
+
816
+ sig { params(captcha_input_selector: String).void }
817
+ attr_writer :captcha_input_selector
818
+
803
819
  sig do
804
820
  returns(
805
821
  T.nilable(
@@ -846,6 +862,23 @@ module Stagehand
846
862
  sig { params(log_session: T::Boolean).void }
847
863
  attr_writer :log_session
848
864
 
865
+ sig do
866
+ returns(
867
+ T.nilable(
868
+ Stagehand::SessionStartParams::BrowserbaseSessionCreateParams::BrowserSettings::Os::OrSymbol
869
+ )
870
+ )
871
+ end
872
+ attr_reader :os
873
+
874
+ sig do
875
+ params(
876
+ os:
877
+ Stagehand::SessionStartParams::BrowserbaseSessionCreateParams::BrowserSettings::Os::OrSymbol
878
+ ).void
879
+ end
880
+ attr_writer :os
881
+
849
882
  sig { returns(T.nilable(T::Boolean)) }
850
883
  attr_reader :record_session
851
884
 
@@ -858,6 +891,12 @@ module Stagehand
858
891
  sig { params(solve_captchas: T::Boolean).void }
859
892
  attr_writer :solve_captchas
860
893
 
894
+ sig { returns(T.nilable(T::Boolean)) }
895
+ attr_reader :verified
896
+
897
+ sig { params(verified: T::Boolean).void }
898
+ attr_writer :verified
899
+
861
900
  sig do
862
901
  returns(
863
902
  T.nilable(
@@ -879,14 +918,19 @@ module Stagehand
879
918
  params(
880
919
  advanced_stealth: T::Boolean,
881
920
  block_ads: T::Boolean,
921
+ captcha_image_selector: String,
922
+ captcha_input_selector: String,
882
923
  context:
883
924
  Stagehand::SessionStartParams::BrowserbaseSessionCreateParams::BrowserSettings::Context::OrHash,
884
925
  extension_id: String,
885
926
  fingerprint:
886
927
  Stagehand::SessionStartParams::BrowserbaseSessionCreateParams::BrowserSettings::Fingerprint::OrHash,
887
928
  log_session: T::Boolean,
929
+ os:
930
+ Stagehand::SessionStartParams::BrowserbaseSessionCreateParams::BrowserSettings::Os::OrSymbol,
888
931
  record_session: T::Boolean,
889
932
  solve_captchas: T::Boolean,
933
+ verified: T::Boolean,
890
934
  viewport:
891
935
  Stagehand::SessionStartParams::BrowserbaseSessionCreateParams::BrowserSettings::Viewport::OrHash
892
936
  ).returns(T.attached_class)
@@ -894,12 +938,16 @@ module Stagehand
894
938
  def self.new(
895
939
  advanced_stealth: nil,
896
940
  block_ads: nil,
941
+ captcha_image_selector: nil,
942
+ captcha_input_selector: nil,
897
943
  context: nil,
898
944
  extension_id: nil,
899
945
  fingerprint: nil,
900
946
  log_session: nil,
947
+ os: nil,
901
948
  record_session: nil,
902
949
  solve_captchas: nil,
950
+ verified: nil,
903
951
  viewport: nil
904
952
  )
905
953
  end
@@ -909,14 +957,19 @@ module Stagehand
909
957
  {
910
958
  advanced_stealth: T::Boolean,
911
959
  block_ads: T::Boolean,
960
+ captcha_image_selector: String,
961
+ captcha_input_selector: String,
912
962
  context:
913
963
  Stagehand::SessionStartParams::BrowserbaseSessionCreateParams::BrowserSettings::Context,
914
964
  extension_id: String,
915
965
  fingerprint:
916
966
  Stagehand::SessionStartParams::BrowserbaseSessionCreateParams::BrowserSettings::Fingerprint,
917
967
  log_session: T::Boolean,
968
+ os:
969
+ Stagehand::SessionStartParams::BrowserbaseSessionCreateParams::BrowserSettings::Os::OrSymbol,
918
970
  record_session: T::Boolean,
919
971
  solve_captchas: T::Boolean,
972
+ verified: T::Boolean,
920
973
  viewport:
921
974
  Stagehand::SessionStartParams::BrowserbaseSessionCreateParams::BrowserSettings::Viewport
922
975
  }
@@ -1348,6 +1401,55 @@ module Stagehand
1348
1401
  end
1349
1402
  end
1350
1403
 
1404
+ module Os
1405
+ extend Stagehand::Internal::Type::Enum
1406
+
1407
+ TaggedSymbol =
1408
+ T.type_alias do
1409
+ T.all(
1410
+ Symbol,
1411
+ Stagehand::SessionStartParams::BrowserbaseSessionCreateParams::BrowserSettings::Os
1412
+ )
1413
+ end
1414
+ OrSymbol = T.type_alias { T.any(Symbol, String) }
1415
+
1416
+ WINDOWS =
1417
+ T.let(
1418
+ :windows,
1419
+ Stagehand::SessionStartParams::BrowserbaseSessionCreateParams::BrowserSettings::Os::TaggedSymbol
1420
+ )
1421
+ MAC =
1422
+ T.let(
1423
+ :mac,
1424
+ Stagehand::SessionStartParams::BrowserbaseSessionCreateParams::BrowserSettings::Os::TaggedSymbol
1425
+ )
1426
+ LINUX =
1427
+ T.let(
1428
+ :linux,
1429
+ Stagehand::SessionStartParams::BrowserbaseSessionCreateParams::BrowserSettings::Os::TaggedSymbol
1430
+ )
1431
+ MOBILE =
1432
+ T.let(
1433
+ :mobile,
1434
+ Stagehand::SessionStartParams::BrowserbaseSessionCreateParams::BrowserSettings::Os::TaggedSymbol
1435
+ )
1436
+ TABLET =
1437
+ T.let(
1438
+ :tablet,
1439
+ Stagehand::SessionStartParams::BrowserbaseSessionCreateParams::BrowserSettings::Os::TaggedSymbol
1440
+ )
1441
+
1442
+ sig do
1443
+ override.returns(
1444
+ T::Array[
1445
+ Stagehand::SessionStartParams::BrowserbaseSessionCreateParams::BrowserSettings::Os::TaggedSymbol
1446
+ ]
1447
+ )
1448
+ end
1449
+ def self.values
1450
+ end
1451
+ end
1452
+
1351
1453
  class Viewport < Stagehand::Internal::Type::BaseModel
1352
1454
  OrHash =
1353
1455
  T.type_alias do
@@ -163,7 +163,8 @@ module Stagehand
163
163
  highlight_cursor: bool,
164
164
  max_steps: Float,
165
165
  tool_timeout: Float,
166
- use_search: bool
166
+ use_search: bool,
167
+ variables: ::Hash[Symbol, Stagehand::Models::SessionExecuteParams::ExecuteOptions::variable]
167
168
  }
168
169
 
169
170
  class ExecuteOptions < Stagehand::Internal::Type::BaseModel
@@ -185,12 +186,19 @@ module Stagehand
185
186
 
186
187
  def use_search=: (bool) -> bool
187
188
 
189
+ attr_reader variables: ::Hash[Symbol, Stagehand::Models::SessionExecuteParams::ExecuteOptions::variable]?
190
+
191
+ def variables=: (
192
+ ::Hash[Symbol, Stagehand::Models::SessionExecuteParams::ExecuteOptions::variable]
193
+ ) -> ::Hash[Symbol, Stagehand::Models::SessionExecuteParams::ExecuteOptions::variable]
194
+
188
195
  def initialize: (
189
196
  instruction: String,
190
197
  ?highlight_cursor: bool,
191
198
  ?max_steps: Float,
192
199
  ?tool_timeout: Float,
193
- ?use_search: bool
200
+ ?use_search: bool,
201
+ ?variables: ::Hash[Symbol, Stagehand::Models::SessionExecuteParams::ExecuteOptions::variable]
194
202
  ) -> void
195
203
 
196
204
  def to_hash: -> {
@@ -198,8 +206,53 @@ module Stagehand
198
206
  highlight_cursor: bool,
199
207
  max_steps: Float,
200
208
  tool_timeout: Float,
201
- use_search: bool
209
+ use_search: bool,
210
+ variables: ::Hash[Symbol, Stagehand::Models::SessionExecuteParams::ExecuteOptions::variable]
202
211
  }
212
+
213
+ type variable =
214
+ String
215
+ | Float
216
+ | bool
217
+ | Stagehand::SessionExecuteParams::ExecuteOptions::Variable::UnionMember3
218
+
219
+ module Variable
220
+ extend Stagehand::Internal::Type::Union
221
+
222
+ type union_member3 =
223
+ {
224
+ value: Stagehand::Models::SessionExecuteParams::ExecuteOptions::Variable::UnionMember3::value,
225
+ description: String
226
+ }
227
+
228
+ class UnionMember3 < Stagehand::Internal::Type::BaseModel
229
+ attr_accessor value: Stagehand::Models::SessionExecuteParams::ExecuteOptions::Variable::UnionMember3::value
230
+
231
+ attr_reader description: String?
232
+
233
+ def description=: (String) -> String
234
+
235
+ def initialize: (
236
+ value: Stagehand::Models::SessionExecuteParams::ExecuteOptions::Variable::UnionMember3::value,
237
+ ?description: String
238
+ ) -> void
239
+
240
+ def to_hash: -> {
241
+ value: Stagehand::Models::SessionExecuteParams::ExecuteOptions::Variable::UnionMember3::value,
242
+ description: String
243
+ }
244
+
245
+ type value = String | Float | bool
246
+
247
+ module Value
248
+ extend Stagehand::Internal::Type::Union
249
+
250
+ def self?.variants: -> ::Array[Stagehand::Models::SessionExecuteParams::ExecuteOptions::Variable::UnionMember3::value]
251
+ end
252
+ end
253
+
254
+ def self?.variants: -> ::Array[Stagehand::Models::SessionExecuteParams::ExecuteOptions::variable]
255
+ end
203
256
  end
204
257
 
205
258
  type x_stream_response = :true | :false
@@ -61,12 +61,17 @@ module Stagehand
61
61
 
62
62
  type options =
63
63
  {
64
+ ignore_selectors: ::Array[String],
64
65
  model: Stagehand::Models::SessionExtractParams::Options::model,
65
66
  selector: String,
66
67
  timeout: Float
67
68
  }
68
69
 
69
70
  class Options < Stagehand::Internal::Type::BaseModel
71
+ attr_reader ignore_selectors: ::Array[String]?
72
+
73
+ def ignore_selectors=: (::Array[String]) -> ::Array[String]
74
+
70
75
  attr_reader model: Stagehand::Models::SessionExtractParams::Options::model?
71
76
 
72
77
  def model=: (
@@ -82,12 +87,14 @@ module Stagehand
82
87
  def timeout=: (Float) -> Float
83
88
 
84
89
  def initialize: (
90
+ ?ignore_selectors: ::Array[String],
85
91
  ?model: Stagehand::Models::SessionExtractParams::Options::model,
86
92
  ?selector: String,
87
93
  ?timeout: Float
88
94
  ) -> void
89
95
 
90
96
  def to_hash: -> {
97
+ ignore_selectors: ::Array[String],
91
98
  model: Stagehand::Models::SessionExtractParams::Options::model,
92
99
  selector: String,
93
100
  timeout: Float
@@ -450,12 +450,16 @@ module Stagehand
450
450
  {
451
451
  advanced_stealth: bool,
452
452
  block_ads: bool,
453
+ captcha_image_selector: String,
454
+ captcha_input_selector: String,
453
455
  context: Stagehand::SessionStartParams::BrowserbaseSessionCreateParams::BrowserSettings::Context,
454
456
  extension_id: String,
455
457
  fingerprint: Stagehand::SessionStartParams::BrowserbaseSessionCreateParams::BrowserSettings::Fingerprint,
456
458
  log_session: bool,
459
+ os: Stagehand::Models::SessionStartParams::BrowserbaseSessionCreateParams::BrowserSettings::os,
457
460
  record_session: bool,
458
461
  solve_captchas: bool,
462
+ verified: bool,
459
463
  viewport: Stagehand::SessionStartParams::BrowserbaseSessionCreateParams::BrowserSettings::Viewport
460
464
  }
461
465
 
@@ -468,6 +472,14 @@ module Stagehand
468
472
 
469
473
  def block_ads=: (bool) -> bool
470
474
 
475
+ attr_reader captcha_image_selector: String?
476
+
477
+ def captcha_image_selector=: (String) -> String
478
+
479
+ attr_reader captcha_input_selector: String?
480
+
481
+ def captcha_input_selector=: (String) -> String
482
+
471
483
  attr_reader context: Stagehand::SessionStartParams::BrowserbaseSessionCreateParams::BrowserSettings::Context?
472
484
 
473
485
  def context=: (
@@ -488,6 +500,12 @@ module Stagehand
488
500
 
489
501
  def log_session=: (bool) -> bool
490
502
 
503
+ attr_reader os: Stagehand::Models::SessionStartParams::BrowserbaseSessionCreateParams::BrowserSettings::os?
504
+
505
+ def os=: (
506
+ Stagehand::Models::SessionStartParams::BrowserbaseSessionCreateParams::BrowserSettings::os
507
+ ) -> Stagehand::Models::SessionStartParams::BrowserbaseSessionCreateParams::BrowserSettings::os
508
+
491
509
  attr_reader record_session: bool?
492
510
 
493
511
  def record_session=: (bool) -> bool
@@ -496,6 +514,10 @@ module Stagehand
496
514
 
497
515
  def solve_captchas=: (bool) -> bool
498
516
 
517
+ attr_reader verified: bool?
518
+
519
+ def verified=: (bool) -> bool
520
+
499
521
  attr_reader viewport: Stagehand::SessionStartParams::BrowserbaseSessionCreateParams::BrowserSettings::Viewport?
500
522
 
501
523
  def viewport=: (
@@ -505,24 +527,32 @@ module Stagehand
505
527
  def initialize: (
506
528
  ?advanced_stealth: bool,
507
529
  ?block_ads: bool,
530
+ ?captcha_image_selector: String,
531
+ ?captcha_input_selector: String,
508
532
  ?context: Stagehand::SessionStartParams::BrowserbaseSessionCreateParams::BrowserSettings::Context,
509
533
  ?extension_id: String,
510
534
  ?fingerprint: Stagehand::SessionStartParams::BrowserbaseSessionCreateParams::BrowserSettings::Fingerprint,
511
535
  ?log_session: bool,
536
+ ?os: Stagehand::Models::SessionStartParams::BrowserbaseSessionCreateParams::BrowserSettings::os,
512
537
  ?record_session: bool,
513
538
  ?solve_captchas: bool,
539
+ ?verified: bool,
514
540
  ?viewport: Stagehand::SessionStartParams::BrowserbaseSessionCreateParams::BrowserSettings::Viewport
515
541
  ) -> void
516
542
 
517
543
  def to_hash: -> {
518
544
  advanced_stealth: bool,
519
545
  block_ads: bool,
546
+ captcha_image_selector: String,
547
+ captcha_input_selector: String,
520
548
  context: Stagehand::SessionStartParams::BrowserbaseSessionCreateParams::BrowserSettings::Context,
521
549
  extension_id: String,
522
550
  fingerprint: Stagehand::SessionStartParams::BrowserbaseSessionCreateParams::BrowserSettings::Fingerprint,
523
551
  log_session: bool,
552
+ os: Stagehand::Models::SessionStartParams::BrowserbaseSessionCreateParams::BrowserSettings::os,
524
553
  record_session: bool,
525
554
  solve_captchas: bool,
555
+ verified: bool,
526
556
  viewport: Stagehand::SessionStartParams::BrowserbaseSessionCreateParams::BrowserSettings::Viewport
527
557
  }
528
558
 
@@ -693,6 +723,20 @@ module Stagehand
693
723
  end
694
724
  end
695
725
 
726
+ type os = :windows | :mac | :linux | :mobile | :tablet
727
+
728
+ module Os
729
+ extend Stagehand::Internal::Type::Enum
730
+
731
+ WINDOWS: :windows
732
+ MAC: :mac
733
+ LINUX: :linux
734
+ MOBILE: :mobile
735
+ TABLET: :tablet
736
+
737
+ def self?.values: -> ::Array[Stagehand::Models::SessionStartParams::BrowserbaseSessionCreateParams::BrowserSettings::os]
738
+ end
739
+
696
740
  type viewport = { height: Float, width: Float }
697
741
 
698
742
  class Viewport < Stagehand::Internal::Type::BaseModel
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: stagehand
3
3
  version: !ruby/object:Gem::Version
4
- version: 3.19.3
4
+ version: 3.20.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Stagehand
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2026-04-03 00:00:00.000000000 Z
11
+ date: 2026-05-07 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: cgi