stagehand 3.7.0 → 3.18.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.
Files changed (39) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +33 -0
  3. data/README.md +2 -0
  4. data/lib/stagehand/internal/stream.rb +2 -11
  5. data/lib/stagehand/internal/util.rb +31 -0
  6. data/lib/stagehand/local.rb +5 -5
  7. data/lib/stagehand/models/model_config.rb +9 -1
  8. data/lib/stagehand/models/session_act_params.rb +63 -5
  9. data/lib/stagehand/models/session_end_params.rb +9 -1
  10. data/lib/stagehand/models/session_execute_params.rb +26 -2
  11. data/lib/stagehand/models/session_extract_params.rb +9 -1
  12. data/lib/stagehand/models/session_navigate_params.rb +9 -1
  13. data/lib/stagehand/models/session_observe_params.rb +69 -2
  14. data/lib/stagehand/models/session_replay_params.rb +9 -1
  15. data/lib/stagehand/models/session_start_params.rb +7 -1
  16. data/lib/stagehand/models/stream_event.rb +2 -1
  17. data/lib/stagehand/version.rb +1 -1
  18. data/rbi/stagehand/internal/util.rbi +20 -0
  19. data/rbi/stagehand/models/model_config.rbi +11 -0
  20. data/rbi/stagehand/models/session_act_params.rbi +144 -6
  21. data/rbi/stagehand/models/session_end_params.rbi +8 -0
  22. data/rbi/stagehand/models/session_execute_params.rbi +33 -3
  23. data/rbi/stagehand/models/session_extract_params.rbi +8 -0
  24. data/rbi/stagehand/models/session_navigate_params.rbi +8 -0
  25. data/rbi/stagehand/models/session_observe_params.rbi +156 -3
  26. data/rbi/stagehand/models/session_replay_params.rbi +8 -0
  27. data/rbi/stagehand/models/session_start_params.rbi +9 -0
  28. data/rbi/stagehand/models/stream_event.rbi +2 -1
  29. data/sig/stagehand/internal/util.rbs +10 -0
  30. data/sig/stagehand/models/model_config.rbs +7 -0
  31. data/sig/stagehand/models/session_act_params.rbs +56 -5
  32. data/sig/stagehand/models/session_end_params.rbs +5 -0
  33. data/sig/stagehand/models/session_execute_params.rbs +26 -3
  34. data/sig/stagehand/models/session_extract_params.rbs +5 -0
  35. data/sig/stagehand/models/session_navigate_params.rbs +5 -0
  36. data/sig/stagehand/models/session_observe_params.rbs +61 -3
  37. data/sig/stagehand/models/session_replay_params.rbs +5 -0
  38. data/sig/stagehand/models/session_start_params.rbs +7 -0
  39. metadata +2 -2
@@ -11,6 +11,10 @@ module Stagehand
11
11
  T.any(Stagehand::SessionActParams, Stagehand::Internal::AnyHash)
12
12
  end
13
13
 
14
+ # Unique session identifier
15
+ sig { returns(String) }
16
+ attr_accessor :id
17
+
14
18
  # Natural language instruction or Action object
15
19
  sig { returns(T.any(String, Stagehand::Action)) }
16
20
  attr_accessor :input
@@ -43,6 +47,7 @@ module Stagehand
43
47
 
44
48
  sig do
45
49
  params(
50
+ id: String,
46
51
  input: T.any(String, Stagehand::Action::OrHash),
47
52
  frame_id: T.nilable(String),
48
53
  options: Stagehand::SessionActParams::Options::OrHash,
@@ -52,6 +57,8 @@ module Stagehand
52
57
  ).returns(T.attached_class)
53
58
  end
54
59
  def self.new(
60
+ # Unique session identifier
61
+ id:,
55
62
  # Natural language instruction or Action object
56
63
  input:,
57
64
  # Target frame ID for the action
@@ -66,6 +73,7 @@ module Stagehand
66
73
  sig do
67
74
  override.returns(
68
75
  {
76
+ id: String,
69
77
  input: T.any(String, Stagehand::Action),
70
78
  frame_id: T.nilable(String),
71
79
  options: Stagehand::SessionActParams::Options,
@@ -118,18 +126,55 @@ module Stagehand
118
126
  sig { params(timeout: Float).void }
119
127
  attr_writer :timeout
120
128
 
121
- # Variables to substitute in the action instruction
122
- sig { returns(T.nilable(T::Hash[Symbol, String])) }
129
+ # Variables to substitute in the action instruction. Accepts flat primitives or {
130
+ # value, description? } objects.
131
+ sig do
132
+ returns(
133
+ T.nilable(
134
+ T::Hash[
135
+ Symbol,
136
+ T.any(
137
+ String,
138
+ Float,
139
+ T::Boolean,
140
+ Stagehand::SessionActParams::Options::Variable::UnionMember3
141
+ )
142
+ ]
143
+ )
144
+ )
145
+ end
123
146
  attr_reader :variables
124
147
 
125
- sig { params(variables: T::Hash[Symbol, String]).void }
148
+ sig do
149
+ params(
150
+ variables:
151
+ T::Hash[
152
+ Symbol,
153
+ T.any(
154
+ String,
155
+ Float,
156
+ T::Boolean,
157
+ Stagehand::SessionActParams::Options::Variable::UnionMember3::OrHash
158
+ )
159
+ ]
160
+ ).void
161
+ end
126
162
  attr_writer :variables
127
163
 
128
164
  sig do
129
165
  params(
130
166
  model: T.any(Stagehand::ModelConfig::OrHash, String),
131
167
  timeout: Float,
132
- variables: T::Hash[Symbol, String]
168
+ variables:
169
+ T::Hash[
170
+ Symbol,
171
+ T.any(
172
+ String,
173
+ Float,
174
+ T::Boolean,
175
+ Stagehand::SessionActParams::Options::Variable::UnionMember3::OrHash
176
+ )
177
+ ]
133
178
  ).returns(T.attached_class)
134
179
  end
135
180
  def self.new(
@@ -137,7 +182,8 @@ module Stagehand
137
182
  model: nil,
138
183
  # Timeout in ms for the action
139
184
  timeout: nil,
140
- # Variables to substitute in the action instruction
185
+ # Variables to substitute in the action instruction. Accepts flat primitives or {
186
+ # value, description? } objects.
141
187
  variables: nil
142
188
  )
143
189
  end
@@ -147,7 +193,16 @@ module Stagehand
147
193
  {
148
194
  model: T.any(Stagehand::ModelConfig, String),
149
195
  timeout: Float,
150
- variables: T::Hash[Symbol, String]
196
+ variables:
197
+ T::Hash[
198
+ Symbol,
199
+ T.any(
200
+ String,
201
+ Float,
202
+ T::Boolean,
203
+ Stagehand::SessionActParams::Options::Variable::UnionMember3
204
+ )
205
+ ]
151
206
  }
152
207
  )
153
208
  end
@@ -168,6 +223,89 @@ module Stagehand
168
223
  def self.variants
169
224
  end
170
225
  end
226
+
227
+ module Variable
228
+ extend Stagehand::Internal::Type::Union
229
+
230
+ Variants =
231
+ T.type_alias do
232
+ T.any(
233
+ String,
234
+ Float,
235
+ T::Boolean,
236
+ Stagehand::SessionActParams::Options::Variable::UnionMember3
237
+ )
238
+ end
239
+
240
+ class UnionMember3 < Stagehand::Internal::Type::BaseModel
241
+ OrHash =
242
+ T.type_alias do
243
+ T.any(
244
+ Stagehand::SessionActParams::Options::Variable::UnionMember3,
245
+ Stagehand::Internal::AnyHash
246
+ )
247
+ end
248
+
249
+ sig do
250
+ returns(
251
+ Stagehand::SessionActParams::Options::Variable::UnionMember3::Value::Variants
252
+ )
253
+ end
254
+ attr_accessor :value
255
+
256
+ sig { returns(T.nilable(String)) }
257
+ attr_reader :description
258
+
259
+ sig { params(description: String).void }
260
+ attr_writer :description
261
+
262
+ sig do
263
+ params(
264
+ value:
265
+ Stagehand::SessionActParams::Options::Variable::UnionMember3::Value::Variants,
266
+ description: String
267
+ ).returns(T.attached_class)
268
+ end
269
+ def self.new(value:, description: nil)
270
+ end
271
+
272
+ sig do
273
+ override.returns(
274
+ {
275
+ value:
276
+ Stagehand::SessionActParams::Options::Variable::UnionMember3::Value::Variants,
277
+ description: String
278
+ }
279
+ )
280
+ end
281
+ def to_hash
282
+ end
283
+
284
+ module Value
285
+ extend Stagehand::Internal::Type::Union
286
+
287
+ Variants = T.type_alias { T.any(String, Float, T::Boolean) }
288
+
289
+ sig do
290
+ override.returns(
291
+ T::Array[
292
+ Stagehand::SessionActParams::Options::Variable::UnionMember3::Value::Variants
293
+ ]
294
+ )
295
+ end
296
+ def self.variants
297
+ end
298
+ end
299
+ end
300
+
301
+ sig do
302
+ override.returns(
303
+ T::Array[Stagehand::SessionActParams::Options::Variable::Variants]
304
+ )
305
+ end
306
+ def self.variants
307
+ end
308
+ end
171
309
  end
172
310
 
173
311
  # Whether to stream the response via SSE
@@ -11,6 +11,10 @@ module Stagehand
11
11
  T.any(Stagehand::SessionEndParams, Stagehand::Internal::AnyHash)
12
12
  end
13
13
 
14
+ # Unique session identifier
15
+ sig { returns(String) }
16
+ attr_accessor :id
17
+
14
18
  # Whether to stream the response via SSE
15
19
  sig do
16
20
  returns(
@@ -29,12 +33,15 @@ module Stagehand
29
33
 
30
34
  sig do
31
35
  params(
36
+ id: String,
32
37
  x_stream_response:
33
38
  Stagehand::SessionEndParams::XStreamResponse::OrSymbol,
34
39
  request_options: Stagehand::RequestOptions::OrHash
35
40
  ).returns(T.attached_class)
36
41
  end
37
42
  def self.new(
43
+ # Unique session identifier
44
+ id:,
38
45
  # Whether to stream the response via SSE
39
46
  x_stream_response: nil,
40
47
  request_options: {}
@@ -44,6 +51,7 @@ module Stagehand
44
51
  sig do
45
52
  override.returns(
46
53
  {
54
+ id: String,
47
55
  x_stream_response:
48
56
  Stagehand::SessionEndParams::XStreamResponse::OrSymbol,
49
57
  request_options: Stagehand::RequestOptions
@@ -11,6 +11,10 @@ module Stagehand
11
11
  T.any(Stagehand::SessionExecuteParams, Stagehand::Internal::AnyHash)
12
12
  end
13
13
 
14
+ # Unique session identifier
15
+ sig { returns(String) }
16
+ attr_accessor :id
17
+
14
18
  sig { returns(Stagehand::SessionExecuteParams::AgentConfig) }
15
19
  attr_reader :agent_config
16
20
 
@@ -61,6 +65,7 @@ module Stagehand
61
65
 
62
66
  sig do
63
67
  params(
68
+ id: String,
64
69
  agent_config: Stagehand::SessionExecuteParams::AgentConfig::OrHash,
65
70
  execute_options:
66
71
  Stagehand::SessionExecuteParams::ExecuteOptions::OrHash,
@@ -72,6 +77,8 @@ module Stagehand
72
77
  ).returns(T.attached_class)
73
78
  end
74
79
  def self.new(
80
+ # Unique session identifier
81
+ id:,
75
82
  agent_config:,
76
83
  execute_options:,
77
84
  # Target frame ID for the agent
@@ -87,6 +94,7 @@ module Stagehand
87
94
  sig do
88
95
  override.returns(
89
96
  {
97
+ id: String,
90
98
  agent_config: Stagehand::SessionExecuteParams::AgentConfig,
91
99
  execute_options: Stagehand::SessionExecuteParams::ExecuteOptions,
92
100
  frame_id: T.nilable(String),
@@ -379,11 +387,27 @@ module Stagehand
379
387
  sig { params(max_steps: Float).void }
380
388
  attr_writer :max_steps
381
389
 
390
+ # Timeout in milliseconds for each agent tool call
391
+ sig { returns(T.nilable(Float)) }
392
+ attr_reader :tool_timeout
393
+
394
+ sig { params(tool_timeout: Float).void }
395
+ attr_writer :tool_timeout
396
+
397
+ # Whether to enable the web search tool powered by Browserbase Search API
398
+ sig { returns(T.nilable(T::Boolean)) }
399
+ attr_reader :use_search
400
+
401
+ sig { params(use_search: T::Boolean).void }
402
+ attr_writer :use_search
403
+
382
404
  sig do
383
405
  params(
384
406
  instruction: String,
385
407
  highlight_cursor: T::Boolean,
386
- max_steps: Float
408
+ max_steps: Float,
409
+ tool_timeout: Float,
410
+ use_search: T::Boolean
387
411
  ).returns(T.attached_class)
388
412
  end
389
413
  def self.new(
@@ -392,7 +416,11 @@ module Stagehand
392
416
  # Whether to visually highlight the cursor during execution
393
417
  highlight_cursor: nil,
394
418
  # Maximum number of steps the agent can take
395
- max_steps: nil
419
+ max_steps: nil,
420
+ # Timeout in milliseconds for each agent tool call
421
+ tool_timeout: nil,
422
+ # Whether to enable the web search tool powered by Browserbase Search API
423
+ use_search: nil
396
424
  )
397
425
  end
398
426
 
@@ -401,7 +429,9 @@ module Stagehand
401
429
  {
402
430
  instruction: String,
403
431
  highlight_cursor: T::Boolean,
404
- max_steps: Float
432
+ max_steps: Float,
433
+ tool_timeout: Float,
434
+ use_search: T::Boolean
405
435
  }
406
436
  )
407
437
  end
@@ -11,6 +11,10 @@ module Stagehand
11
11
  T.any(Stagehand::SessionExtractParams, Stagehand::Internal::AnyHash)
12
12
  end
13
13
 
14
+ # Unique session identifier
15
+ sig { returns(String) }
16
+ attr_accessor :id
17
+
14
18
  # Target frame ID for the extraction
15
19
  sig { returns(T.nilable(String)) }
16
20
  attr_accessor :frame_id
@@ -55,6 +59,7 @@ module Stagehand
55
59
 
56
60
  sig do
57
61
  params(
62
+ id: String,
58
63
  frame_id: T.nilable(String),
59
64
  instruction: String,
60
65
  options: Stagehand::SessionExtractParams::Options::OrHash,
@@ -65,6 +70,8 @@ module Stagehand
65
70
  ).returns(T.attached_class)
66
71
  end
67
72
  def self.new(
73
+ # Unique session identifier
74
+ id:,
68
75
  # Target frame ID for the extraction
69
76
  frame_id: nil,
70
77
  # Natural language instruction for what to extract
@@ -81,6 +88,7 @@ module Stagehand
81
88
  sig do
82
89
  override.returns(
83
90
  {
91
+ id: String,
84
92
  frame_id: T.nilable(String),
85
93
  instruction: String,
86
94
  options: Stagehand::SessionExtractParams::Options,
@@ -11,6 +11,10 @@ module Stagehand
11
11
  T.any(Stagehand::SessionNavigateParams, Stagehand::Internal::AnyHash)
12
12
  end
13
13
 
14
+ # Unique session identifier
15
+ sig { returns(String) }
16
+ attr_accessor :id
17
+
14
18
  # URL to navigate to
15
19
  sig { returns(String) }
16
20
  attr_accessor :url
@@ -52,6 +56,7 @@ module Stagehand
52
56
 
53
57
  sig do
54
58
  params(
59
+ id: String,
55
60
  url: String,
56
61
  frame_id: T.nilable(String),
57
62
  options: Stagehand::SessionNavigateParams::Options::OrHash,
@@ -62,6 +67,8 @@ module Stagehand
62
67
  ).returns(T.attached_class)
63
68
  end
64
69
  def self.new(
70
+ # Unique session identifier
71
+ id:,
65
72
  # URL to navigate to
66
73
  url:,
67
74
  # Target frame ID for the navigation
@@ -78,6 +85,7 @@ module Stagehand
78
85
  sig do
79
86
  override.returns(
80
87
  {
88
+ id: String,
81
89
  url: String,
82
90
  frame_id: T.nilable(String),
83
91
  options: Stagehand::SessionNavigateParams::Options,
@@ -11,6 +11,10 @@ module Stagehand
11
11
  T.any(Stagehand::SessionObserveParams, Stagehand::Internal::AnyHash)
12
12
  end
13
13
 
14
+ # Unique session identifier
15
+ sig { returns(String) }
16
+ attr_accessor :id
17
+
14
18
  # Target frame ID for the observation
15
19
  sig { returns(T.nilable(String)) }
16
20
  attr_accessor :frame_id
@@ -48,6 +52,7 @@ module Stagehand
48
52
 
49
53
  sig do
50
54
  params(
55
+ id: String,
51
56
  frame_id: T.nilable(String),
52
57
  instruction: String,
53
58
  options: Stagehand::SessionObserveParams::Options::OrHash,
@@ -57,6 +62,8 @@ module Stagehand
57
62
  ).returns(T.attached_class)
58
63
  end
59
64
  def self.new(
65
+ # Unique session identifier
66
+ id:,
60
67
  # Target frame ID for the observation
61
68
  frame_id: nil,
62
69
  # Natural language instruction for what actions to find
@@ -71,6 +78,7 @@ module Stagehand
71
78
  sig do
72
79
  override.returns(
73
80
  {
81
+ id: String,
74
82
  frame_id: T.nilable(String),
75
83
  instruction: String,
76
84
  options: Stagehand::SessionObserveParams::Options,
@@ -115,11 +123,57 @@ module Stagehand
115
123
  sig { params(timeout: Float).void }
116
124
  attr_writer :timeout
117
125
 
126
+ # Variables whose names are exposed to the model so observe() returns
127
+ # %variableName% placeholders in suggested action arguments instead of literal
128
+ # values. Accepts flat primitives or { value, description? } objects.
129
+ sig do
130
+ returns(
131
+ T.nilable(
132
+ T::Hash[
133
+ Symbol,
134
+ T.any(
135
+ String,
136
+ Float,
137
+ T::Boolean,
138
+ Stagehand::SessionObserveParams::Options::Variable::UnionMember3
139
+ )
140
+ ]
141
+ )
142
+ )
143
+ end
144
+ attr_reader :variables
145
+
146
+ sig do
147
+ params(
148
+ variables:
149
+ T::Hash[
150
+ Symbol,
151
+ T.any(
152
+ String,
153
+ Float,
154
+ T::Boolean,
155
+ Stagehand::SessionObserveParams::Options::Variable::UnionMember3::OrHash
156
+ )
157
+ ]
158
+ ).void
159
+ end
160
+ attr_writer :variables
161
+
118
162
  sig do
119
163
  params(
120
164
  model: T.any(Stagehand::ModelConfig::OrHash, String),
121
165
  selector: String,
122
- timeout: Float
166
+ timeout: Float,
167
+ variables:
168
+ T::Hash[
169
+ Symbol,
170
+ T.any(
171
+ String,
172
+ Float,
173
+ T::Boolean,
174
+ Stagehand::SessionObserveParams::Options::Variable::UnionMember3::OrHash
175
+ )
176
+ ]
123
177
  ).returns(T.attached_class)
124
178
  end
125
179
  def self.new(
@@ -128,7 +182,11 @@ module Stagehand
128
182
  # CSS selector to scope observation to a specific element
129
183
  selector: nil,
130
184
  # Timeout in ms for the observation
131
- timeout: nil
185
+ timeout: nil,
186
+ # Variables whose names are exposed to the model so observe() returns
187
+ # %variableName% placeholders in suggested action arguments instead of literal
188
+ # values. Accepts flat primitives or { value, description? } objects.
189
+ variables: nil
132
190
  )
133
191
  end
134
192
 
@@ -137,7 +195,17 @@ module Stagehand
137
195
  {
138
196
  model: T.any(Stagehand::ModelConfig, String),
139
197
  selector: String,
140
- timeout: Float
198
+ timeout: Float,
199
+ variables:
200
+ T::Hash[
201
+ Symbol,
202
+ T.any(
203
+ String,
204
+ Float,
205
+ T::Boolean,
206
+ Stagehand::SessionObserveParams::Options::Variable::UnionMember3
207
+ )
208
+ ]
141
209
  }
142
210
  )
143
211
  end
@@ -160,6 +228,91 @@ module Stagehand
160
228
  def self.variants
161
229
  end
162
230
  end
231
+
232
+ module Variable
233
+ extend Stagehand::Internal::Type::Union
234
+
235
+ Variants =
236
+ T.type_alias do
237
+ T.any(
238
+ String,
239
+ Float,
240
+ T::Boolean,
241
+ Stagehand::SessionObserveParams::Options::Variable::UnionMember3
242
+ )
243
+ end
244
+
245
+ class UnionMember3 < Stagehand::Internal::Type::BaseModel
246
+ OrHash =
247
+ T.type_alias do
248
+ T.any(
249
+ Stagehand::SessionObserveParams::Options::Variable::UnionMember3,
250
+ Stagehand::Internal::AnyHash
251
+ )
252
+ end
253
+
254
+ sig do
255
+ returns(
256
+ Stagehand::SessionObserveParams::Options::Variable::UnionMember3::Value::Variants
257
+ )
258
+ end
259
+ attr_accessor :value
260
+
261
+ sig { returns(T.nilable(String)) }
262
+ attr_reader :description
263
+
264
+ sig { params(description: String).void }
265
+ attr_writer :description
266
+
267
+ sig do
268
+ params(
269
+ value:
270
+ Stagehand::SessionObserveParams::Options::Variable::UnionMember3::Value::Variants,
271
+ description: String
272
+ ).returns(T.attached_class)
273
+ end
274
+ def self.new(value:, description: nil)
275
+ end
276
+
277
+ sig do
278
+ override.returns(
279
+ {
280
+ value:
281
+ Stagehand::SessionObserveParams::Options::Variable::UnionMember3::Value::Variants,
282
+ description: String
283
+ }
284
+ )
285
+ end
286
+ def to_hash
287
+ end
288
+
289
+ module Value
290
+ extend Stagehand::Internal::Type::Union
291
+
292
+ Variants = T.type_alias { T.any(String, Float, T::Boolean) }
293
+
294
+ sig do
295
+ override.returns(
296
+ T::Array[
297
+ Stagehand::SessionObserveParams::Options::Variable::UnionMember3::Value::Variants
298
+ ]
299
+ )
300
+ end
301
+ def self.variants
302
+ end
303
+ end
304
+ end
305
+
306
+ sig do
307
+ override.returns(
308
+ T::Array[
309
+ Stagehand::SessionObserveParams::Options::Variable::Variants
310
+ ]
311
+ )
312
+ end
313
+ def self.variants
314
+ end
315
+ end
163
316
  end
164
317
 
165
318
  # Whether to stream the response via SSE
@@ -11,6 +11,10 @@ module Stagehand
11
11
  T.any(Stagehand::SessionReplayParams, Stagehand::Internal::AnyHash)
12
12
  end
13
13
 
14
+ # Unique session identifier
15
+ sig { returns(String) }
16
+ attr_accessor :id
17
+
14
18
  # Whether to stream the response via SSE
15
19
  sig do
16
20
  returns(
@@ -29,12 +33,15 @@ module Stagehand
29
33
 
30
34
  sig do
31
35
  params(
36
+ id: String,
32
37
  x_stream_response:
33
38
  Stagehand::SessionReplayParams::XStreamResponse::OrSymbol,
34
39
  request_options: Stagehand::RequestOptions::OrHash
35
40
  ).returns(T.attached_class)
36
41
  end
37
42
  def self.new(
43
+ # Unique session identifier
44
+ id:,
38
45
  # Whether to stream the response via SSE
39
46
  x_stream_response: nil,
40
47
  request_options: {}
@@ -44,6 +51,7 @@ module Stagehand
44
51
  sig do
45
52
  override.returns(
46
53
  {
54
+ id: String,
47
55
  x_stream_response:
48
56
  Stagehand::SessionReplayParams::XStreamResponse::OrSymbol,
49
57
  request_options: Stagehand::RequestOptions
@@ -281,6 +281,12 @@ module Stagehand
281
281
  sig { params(args: T::Array[String]).void }
282
282
  attr_writer :args
283
283
 
284
+ sig { returns(T.nilable(T::Hash[Symbol, String])) }
285
+ attr_reader :cdp_headers
286
+
287
+ sig { params(cdp_headers: T::Hash[Symbol, String]).void }
288
+ attr_writer :cdp_headers
289
+
284
290
  sig { returns(T.nilable(String)) }
285
291
  attr_reader :cdp_url
286
292
 
@@ -420,6 +426,7 @@ module Stagehand
420
426
  params(
421
427
  accept_downloads: T::Boolean,
422
428
  args: T::Array[String],
429
+ cdp_headers: T::Hash[Symbol, String],
423
430
  cdp_url: String,
424
431
  chromium_sandbox: T::Boolean,
425
432
  connect_timeout_ms: Float,
@@ -445,6 +452,7 @@ module Stagehand
445
452
  def self.new(
446
453
  accept_downloads: nil,
447
454
  args: nil,
455
+ cdp_headers: nil,
448
456
  cdp_url: nil,
449
457
  chromium_sandbox: nil,
450
458
  connect_timeout_ms: nil,
@@ -470,6 +478,7 @@ module Stagehand
470
478
  {
471
479
  accept_downloads: T::Boolean,
472
480
  args: T::Array[String],
481
+ cdp_headers: T::Hash[Symbol, String],
473
482
  cdp_url: String,
474
483
  chromium_sandbox: T::Boolean,
475
484
  connect_timeout_ms: Float,
@@ -20,7 +20,8 @@ module Stagehand
20
20
  attr_accessor :type
21
21
 
22
22
  # Server-Sent Event emitted during streaming responses. Events are sent as
23
- # `data: <JSON>\n\n`. Key order: data (with status first), type, id.
23
+ # `event: <status>\ndata: <JSON>\n\n`, where the JSON payload has the shape
24
+ # `{ data, type, id }`.
24
25
  sig do
25
26
  params(
26
27
  id: String,