stagehand 3.19.3 → 3.21.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 +4 -4
- data/CHANGELOG.md +41 -0
- data/README.md +2 -3
- data/lib/stagehand/client.rb +25 -13
- data/lib/stagehand/internal/transport/base_client.rb +2 -0
- data/lib/stagehand/internal/type/union.rb +11 -0
- data/lib/stagehand/internal/util.rb +3 -1
- data/lib/stagehand/local.rb +3 -12
- data/lib/stagehand/models/model_config.rb +326 -56
- data/lib/stagehand/models/session_act_params.rb +331 -4
- data/lib/stagehand/models/session_execute_params.rb +719 -9
- data/lib/stagehand/models/session_extract_params.rb +352 -5
- data/lib/stagehand/models/session_observe_params.rb +340 -5
- data/lib/stagehand/models/session_start_params.rb +56 -2
- data/lib/stagehand/resources/sessions.rb +16 -4
- data/lib/stagehand/version.rb +1 -1
- data/rbi/stagehand/client.rbi +6 -6
- data/rbi/stagehand/models/model_config.rbi +644 -69
- data/rbi/stagehand/models/session_act_params.rbi +707 -5
- data/rbi/stagehand/models/session_execute_params.rbi +1556 -13
- data/rbi/stagehand/models/session_extract_params.rbi +731 -5
- data/rbi/stagehand/models/session_observe_params.rbi +718 -5
- data/rbi/stagehand/models/session_start_params.rbi +102 -0
- data/sig/stagehand/models/model_config.rbs +310 -42
- data/sig/stagehand/models/session_act_params.rbs +324 -1
- data/sig/stagehand/models/session_execute_params.rbs +704 -5
- data/sig/stagehand/models/session_extract_params.rbs +338 -1
- data/sig/stagehand/models/session_observe_params.rbs +331 -1
- data/sig/stagehand/models/session_start_params.rbs +44 -0
- data/sig/stagehand/models.rbs +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 6323bad966eabb92ea6461cf51513992a9a5ab53a20c2c59a3c926a09db69f58
|
|
4
|
+
data.tar.gz: 93e96e355f774540da45305016f480d525d8efd500fa7f72d997591db6460d92
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 2f7d789b0cb10ef1cec433e586e00612c8c2597ee9061369214d116277ad0cac52ff35e0cebb13b96e91398e2e6380354c713479f07384ad64cdd581b8a4e8c2
|
|
7
|
+
data.tar.gz: ccb32a0e15484d6ccdd7142cd711734d386a42ee68eaa02f69225f5541df166fcb7e79682dd4c47933de4407588e9688027adb2ce3644daa599305a89ed4146b
|
data/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,46 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## 3.21.0 (2026-05-27)
|
|
4
|
+
|
|
5
|
+
Full Changelog: [v3.20.0...v3.21.0](https://github.com/browserbase/stagehand-ruby/compare/v3.20.0...v3.21.0)
|
|
6
|
+
|
|
7
|
+
### Features
|
|
8
|
+
|
|
9
|
+
* [feat]: add `ignoreSelectors` to `observe()` ([0acc093](https://github.com/browserbase/stagehand-ruby/commit/0acc093944e72ee488393ec1fb73dc16450cc825))
|
|
10
|
+
* [STG-1756] forward Vertex model config ([f9752bc](https://github.com/browserbase/stagehand-ruby/commit/f9752bc3297bb9feef4d4b46d7faeac2a5e73335))
|
|
11
|
+
* Add `screenshot` option to Extract ([7b65ca7](https://github.com/browserbase/stagehand-ruby/commit/7b65ca776e1e13c489f13991b012fa24aecc60e6))
|
|
12
|
+
* STG-1756 add Vertex auth params to Stagehand spec ([4b65f22](https://github.com/browserbase/stagehand-ruby/commit/4b65f221055c7d0d3d7426845fbd0e49ba13d2df))
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
### Bug Fixes
|
|
16
|
+
|
|
17
|
+
* **client:** elide content type header on requests without body ([6149c11](https://github.com/browserbase/stagehand-ruby/commit/6149c11d9ab60a0cac69f1e26e3a2f42425ad616))
|
|
18
|
+
|
|
19
|
+
## 3.20.0 (2026-05-06)
|
|
20
|
+
|
|
21
|
+
Full Changelog: [v3.19.3...v3.20.0](https://github.com/browserbase/stagehand-ruby/compare/v3.19.3...v3.20.0)
|
|
22
|
+
|
|
23
|
+
### Features
|
|
24
|
+
|
|
25
|
+
* [feat]: add `ignoreSelectors` to `extract()` ([db24a9a](https://github.com/browserbase/stagehand-ruby/commit/db24a9ab45dc464d2ad88f9b50d39952c4c76801))
|
|
26
|
+
* [STG-1798] feat: support Browserbase verified sessions ([9647eb3](https://github.com/browserbase/stagehand-ruby/commit/9647eb3a4df86cc9d7aedb2f0a9ddd0babd39565))
|
|
27
|
+
* [STG-1808] Deprecate Browserbase project ID ([7af1c21](https://github.com/browserbase/stagehand-ruby/commit/7af1c21a07e7163ffb0b86f6c199989b750e0365))
|
|
28
|
+
* Bedrock auth passthrough ([5cb6ecb](https://github.com/browserbase/stagehand-ruby/commit/5cb6ecbe621e894dc6c5aec379fdca1183eec4fc))
|
|
29
|
+
* remove experimental requirement on agent variables ([#2079](https://github.com/browserbase/stagehand-ruby/issues/2079)) ([6f106d7](https://github.com/browserbase/stagehand-ruby/commit/6f106d74feb1b3f036433ec67dda5e4c395f434e))
|
|
30
|
+
* 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))
|
|
31
|
+
* support setting headers via env ([5515959](https://github.com/browserbase/stagehand-ruby/commit/5515959505685e62f9324aebf470a295dd6d8292))
|
|
32
|
+
|
|
33
|
+
|
|
34
|
+
### Bug Fixes
|
|
35
|
+
|
|
36
|
+
* avoid gzip buffering during streaming ([23c3eef](https://github.com/browserbase/stagehand-ruby/commit/23c3eef17497edbf3ec03049d12c548607112c8d))
|
|
37
|
+
* multipart encoding for file arrays ([149b303](https://github.com/browserbase/stagehand-ruby/commit/149b303eb54f4c9af037a5e073a2d6c92d959b44))
|
|
38
|
+
|
|
39
|
+
|
|
40
|
+
### Chores
|
|
41
|
+
|
|
42
|
+
* **internal:** more robust bootstrap script ([69c050a](https://github.com/browserbase/stagehand-ruby/commit/69c050a467b5fcab904331bd30bd18d46cee8cae))
|
|
43
|
+
|
|
3
44
|
## 3.19.3 (2026-04-03)
|
|
4
45
|
|
|
5
46
|
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
|
-
|
|
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
|
data/lib/stagehand/client.rb
CHANGED
|
@@ -19,7 +19,8 @@ module Stagehand
|
|
|
19
19
|
# @return [String]
|
|
20
20
|
attr_reader :browserbase_api_key
|
|
21
21
|
|
|
22
|
-
#
|
|
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, **
|
|
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
|
-
{
|
|
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]
|
|
67
|
-
#
|
|
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["
|
|
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:
|
|
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)
|
|
@@ -306,6 +306,8 @@ module Stagehand
|
|
|
306
306
|
Stagehand::Internal::Util.deep_merge(*[req[:body], opts[:extra_body]].compact)
|
|
307
307
|
end
|
|
308
308
|
|
|
309
|
+
headers.delete("content-type") if body.nil?
|
|
310
|
+
|
|
309
311
|
url = Stagehand::Internal::Util.join_parsed_uri(
|
|
310
312
|
@base_url_components,
|
|
311
313
|
{**req, path: path, query: query}
|
|
@@ -4,6 +4,17 @@ module Stagehand
|
|
|
4
4
|
module Internal
|
|
5
5
|
module Type
|
|
6
6
|
# @api private
|
|
7
|
+
#
|
|
8
|
+
# @example
|
|
9
|
+
# # `model_config` is a `Stagehand::ModelConfig`
|
|
10
|
+
# case model_config
|
|
11
|
+
# when Stagehand::ModelConfig::VertexModelConfigObject
|
|
12
|
+
# puts(model_config.auth)
|
|
13
|
+
# when Stagehand::ModelConfig::GenericModelConfigObject
|
|
14
|
+
# puts(model_config.model_name)
|
|
15
|
+
# else
|
|
16
|
+
# puts(model_config)
|
|
17
|
+
# end
|
|
7
18
|
module Union
|
|
8
19
|
include Stagehand::Internal::Type::Converter
|
|
9
20
|
include Stagehand::Internal::Util::SorbetRuntimeSupport
|
|
@@ -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
|
data/lib/stagehand/local.rb
CHANGED
|
@@ -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
|
|
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
|
-
|
|
425
|
-
super
|
|
416
|
+
{}
|
|
426
417
|
end
|
|
427
418
|
end
|
|
428
419
|
|