stagehand 0.0.4 → 3.5.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (148) hide show
  1. checksums.yaml +7 -0
  2. data/.ignore +2 -0
  3. data/CHANGELOG.md +185 -0
  4. data/README.md +394 -31
  5. data/SECURITY.md +23 -0
  6. data/lib/stagehand/client.rb +123 -4
  7. data/lib/stagehand/errors.rb +228 -0
  8. data/lib/stagehand/file_part.rb +58 -0
  9. data/lib/stagehand/internal/stream.rb +56 -0
  10. data/lib/stagehand/internal/transport/base_client.rb +575 -0
  11. data/lib/stagehand/internal/transport/pooled_net_requester.rb +210 -0
  12. data/lib/stagehand/internal/type/array_of.rb +168 -0
  13. data/lib/stagehand/internal/type/base_model.rb +531 -0
  14. data/lib/stagehand/internal/type/base_page.rb +55 -0
  15. data/lib/stagehand/internal/type/base_stream.rb +83 -0
  16. data/lib/stagehand/internal/type/boolean.rb +77 -0
  17. data/lib/stagehand/internal/type/converter.rb +327 -0
  18. data/lib/stagehand/internal/type/enum.rb +131 -0
  19. data/lib/stagehand/internal/type/file_input.rb +111 -0
  20. data/lib/stagehand/internal/type/hash_of.rb +188 -0
  21. data/lib/stagehand/internal/type/request_parameters.rb +42 -0
  22. data/lib/stagehand/internal/type/union.rb +237 -0
  23. data/lib/stagehand/internal/type/unknown.rb +81 -0
  24. data/lib/stagehand/internal/util.rb +920 -0
  25. data/lib/stagehand/internal.rb +20 -0
  26. data/lib/stagehand/local.rb +439 -0
  27. data/lib/stagehand/models/action.rb +50 -0
  28. data/lib/stagehand/models/model_config.rb +55 -0
  29. data/lib/stagehand/models/session_act_params.rb +112 -0
  30. data/lib/stagehand/models/session_act_response.rb +127 -0
  31. data/lib/stagehand/models/session_end_params.rb +33 -0
  32. data/lib/stagehand/models/session_end_response.rb +17 -0
  33. data/lib/stagehand/models/session_execute_params.rb +212 -0
  34. data/lib/stagehand/models/session_execute_response.rb +212 -0
  35. data/lib/stagehand/models/session_extract_params.rb +107 -0
  36. data/lib/stagehand/models/session_extract_response.rb +46 -0
  37. data/lib/stagehand/models/session_navigate_params.rb +107 -0
  38. data/lib/stagehand/models/session_navigate_response.rb +44 -0
  39. data/lib/stagehand/models/session_observe_params.rb +99 -0
  40. data/lib/stagehand/models/session_observe_response.rb +91 -0
  41. data/lib/stagehand/models/session_replay_params.rb +33 -0
  42. data/lib/stagehand/models/session_replay_response.rb +100 -0
  43. data/lib/stagehand/models/session_start_params.rb +762 -0
  44. data/lib/stagehand/models/session_start_response.rb +55 -0
  45. data/lib/stagehand/models/stream_event.rb +120 -0
  46. data/lib/stagehand/models.rb +63 -0
  47. data/lib/stagehand/request_options.rb +77 -0
  48. data/lib/stagehand/resources/sessions.rb +488 -0
  49. data/lib/stagehand/version.rb +3 -1
  50. data/lib/stagehand.rb +74 -29
  51. data/manifest.yaml +17 -0
  52. data/rbi/stagehand/client.rbi +89 -0
  53. data/rbi/stagehand/errors.rbi +205 -0
  54. data/rbi/stagehand/file_part.rbi +37 -0
  55. data/rbi/stagehand/internal/stream.rbi +20 -0
  56. data/rbi/stagehand/internal/transport/base_client.rbi +314 -0
  57. data/rbi/stagehand/internal/transport/pooled_net_requester.rbi +83 -0
  58. data/rbi/stagehand/internal/type/array_of.rbi +104 -0
  59. data/rbi/stagehand/internal/type/base_model.rbi +308 -0
  60. data/rbi/stagehand/internal/type/base_page.rbi +42 -0
  61. data/rbi/stagehand/internal/type/base_stream.rbi +75 -0
  62. data/rbi/stagehand/internal/type/boolean.rbi +58 -0
  63. data/rbi/stagehand/internal/type/converter.rbi +216 -0
  64. data/rbi/stagehand/internal/type/enum.rbi +82 -0
  65. data/rbi/stagehand/internal/type/file_input.rbi +59 -0
  66. data/rbi/stagehand/internal/type/hash_of.rbi +104 -0
  67. data/rbi/stagehand/internal/type/request_parameters.rbi +29 -0
  68. data/rbi/stagehand/internal/type/union.rbi +128 -0
  69. data/rbi/stagehand/internal/type/unknown.rbi +58 -0
  70. data/rbi/stagehand/internal/util.rbi +487 -0
  71. data/rbi/stagehand/internal.rbi +18 -0
  72. data/rbi/stagehand/models/action.rbi +77 -0
  73. data/rbi/stagehand/models/model_config.rbi +94 -0
  74. data/rbi/stagehand/models/session_act_params.rbi +204 -0
  75. data/rbi/stagehand/models/session_act_response.rbi +250 -0
  76. data/rbi/stagehand/models/session_end_params.rbi +87 -0
  77. data/rbi/stagehand/models/session_end_response.rbi +30 -0
  78. data/rbi/stagehand/models/session_execute_params.rbi +440 -0
  79. data/rbi/stagehand/models/session_execute_response.rbi +414 -0
  80. data/rbi/stagehand/models/session_extract_params.rbi +209 -0
  81. data/rbi/stagehand/models/session_extract_response.rbi +91 -0
  82. data/rbi/stagehand/models/session_navigate_params.rbi +240 -0
  83. data/rbi/stagehand/models/session_navigate_response.rbi +91 -0
  84. data/rbi/stagehand/models/session_observe_params.rbi +198 -0
  85. data/rbi/stagehand/models/session_observe_response.rbi +184 -0
  86. data/rbi/stagehand/models/session_replay_params.rbi +89 -0
  87. data/rbi/stagehand/models/session_replay_response.rbi +286 -0
  88. data/rbi/stagehand/models/session_start_params.rbi +1703 -0
  89. data/rbi/stagehand/models/session_start_response.rbi +102 -0
  90. data/rbi/stagehand/models/stream_event.rbi +237 -0
  91. data/rbi/stagehand/models.rbi +25 -0
  92. data/rbi/stagehand/request_options.rbi +59 -0
  93. data/rbi/stagehand/resources/sessions.rbi +421 -0
  94. data/rbi/stagehand/version.rbi +5 -0
  95. data/sig/stagehand/client.rbs +41 -0
  96. data/sig/stagehand/errors.rbs +117 -0
  97. data/sig/stagehand/file_part.rbs +21 -0
  98. data/sig/stagehand/internal/stream.rbs +9 -0
  99. data/sig/stagehand/internal/transport/base_client.rbs +133 -0
  100. data/sig/stagehand/internal/transport/pooled_net_requester.rbs +48 -0
  101. data/sig/stagehand/internal/type/array_of.rbs +48 -0
  102. data/sig/stagehand/internal/type/base_model.rbs +102 -0
  103. data/sig/stagehand/internal/type/base_page.rbs +24 -0
  104. data/sig/stagehand/internal/type/base_stream.rbs +38 -0
  105. data/sig/stagehand/internal/type/boolean.rbs +26 -0
  106. data/sig/stagehand/internal/type/converter.rbs +79 -0
  107. data/sig/stagehand/internal/type/enum.rbs +32 -0
  108. data/sig/stagehand/internal/type/file_input.rbs +25 -0
  109. data/sig/stagehand/internal/type/hash_of.rbs +48 -0
  110. data/sig/stagehand/internal/type/request_parameters.rbs +19 -0
  111. data/sig/stagehand/internal/type/union.rbs +52 -0
  112. data/sig/stagehand/internal/type/unknown.rbs +26 -0
  113. data/sig/stagehand/internal/util.rbs +185 -0
  114. data/sig/stagehand/internal.rbs +9 -0
  115. data/sig/stagehand/models/action.rbs +46 -0
  116. data/sig/stagehand/models/model_config.rbs +56 -0
  117. data/sig/stagehand/models/session_act_params.rbs +111 -0
  118. data/sig/stagehand/models/session_act_response.rbs +121 -0
  119. data/sig/stagehand/models/session_end_params.rbs +41 -0
  120. data/sig/stagehand/models/session_end_response.rbs +13 -0
  121. data/sig/stagehand/models/session_execute_params.rbs +193 -0
  122. data/sig/stagehand/models/session_execute_response.rbs +215 -0
  123. data/sig/stagehand/models/session_extract_params.rbs +112 -0
  124. data/sig/stagehand/models/session_extract_response.rbs +36 -0
  125. data/sig/stagehand/models/session_navigate_params.rbs +114 -0
  126. data/sig/stagehand/models/session_navigate_response.rbs +36 -0
  127. data/sig/stagehand/models/session_observe_params.rbs +105 -0
  128. data/sig/stagehand/models/session_observe_response.rbs +89 -0
  129. data/sig/stagehand/models/session_replay_params.rbs +41 -0
  130. data/sig/stagehand/models/session_replay_response.rbs +137 -0
  131. data/sig/stagehand/models/session_start_params.rbs +866 -0
  132. data/sig/stagehand/models/session_start_response.rbs +44 -0
  133. data/sig/stagehand/models/stream_event.rbs +109 -0
  134. data/sig/stagehand/models.rbs +23 -0
  135. data/sig/stagehand/request_options.rbs +34 -0
  136. data/sig/stagehand/resources/sessions.rbs +121 -0
  137. data/sig/stagehand/version.rbs +3 -0
  138. metadata +170 -54
  139. data/.gitignore +0 -16
  140. data/Gemfile +0 -4
  141. data/Rakefile +0 -10
  142. data/lib/stagehand/client/oauth.rb +0 -32
  143. data/lib/stagehand/client/user.rb +0 -10
  144. data/lib/stagehand/rack/middleware.rb +0 -33
  145. data/lib/stagehand/railtie.rb +0 -19
  146. data/spec/spec_helper.rb +0 -7
  147. data/spec/stagehand_spec.rb +0 -44
  148. data/stagehand.gemspec +0 -25
@@ -0,0 +1,240 @@
1
+ # typed: strong
2
+
3
+ module Stagehand
4
+ module Models
5
+ class SessionNavigateParams < 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::SessionNavigateParams, Stagehand::Internal::AnyHash)
12
+ end
13
+
14
+ # URL to navigate to
15
+ sig { returns(String) }
16
+ attr_accessor :url
17
+
18
+ # Target frame ID for the navigation
19
+ sig { returns(T.nilable(String)) }
20
+ attr_accessor :frame_id
21
+
22
+ sig { returns(T.nilable(Stagehand::SessionNavigateParams::Options)) }
23
+ attr_reader :options
24
+
25
+ sig do
26
+ params(options: Stagehand::SessionNavigateParams::Options::OrHash).void
27
+ end
28
+ attr_writer :options
29
+
30
+ # Whether to stream the response via SSE
31
+ sig { returns(T.nilable(T::Boolean)) }
32
+ attr_reader :stream_response
33
+
34
+ sig { params(stream_response: T::Boolean).void }
35
+ attr_writer :stream_response
36
+
37
+ # Whether to stream the response via SSE
38
+ sig do
39
+ returns(
40
+ T.nilable(Stagehand::SessionNavigateParams::XStreamResponse::OrSymbol)
41
+ )
42
+ end
43
+ attr_reader :x_stream_response
44
+
45
+ sig do
46
+ params(
47
+ x_stream_response:
48
+ Stagehand::SessionNavigateParams::XStreamResponse::OrSymbol
49
+ ).void
50
+ end
51
+ attr_writer :x_stream_response
52
+
53
+ sig do
54
+ params(
55
+ url: String,
56
+ frame_id: T.nilable(String),
57
+ options: Stagehand::SessionNavigateParams::Options::OrHash,
58
+ stream_response: T::Boolean,
59
+ x_stream_response:
60
+ Stagehand::SessionNavigateParams::XStreamResponse::OrSymbol,
61
+ request_options: Stagehand::RequestOptions::OrHash
62
+ ).returns(T.attached_class)
63
+ end
64
+ def self.new(
65
+ # URL to navigate to
66
+ url:,
67
+ # Target frame ID for the navigation
68
+ frame_id: nil,
69
+ options: nil,
70
+ # Whether to stream the response via SSE
71
+ stream_response: nil,
72
+ # Whether to stream the response via SSE
73
+ x_stream_response: nil,
74
+ request_options: {}
75
+ )
76
+ end
77
+
78
+ sig do
79
+ override.returns(
80
+ {
81
+ url: String,
82
+ frame_id: T.nilable(String),
83
+ options: Stagehand::SessionNavigateParams::Options,
84
+ stream_response: T::Boolean,
85
+ x_stream_response:
86
+ Stagehand::SessionNavigateParams::XStreamResponse::OrSymbol,
87
+ request_options: Stagehand::RequestOptions
88
+ }
89
+ )
90
+ end
91
+ def to_hash
92
+ end
93
+
94
+ class Options < Stagehand::Internal::Type::BaseModel
95
+ OrHash =
96
+ T.type_alias do
97
+ T.any(
98
+ Stagehand::SessionNavigateParams::Options,
99
+ Stagehand::Internal::AnyHash
100
+ )
101
+ end
102
+
103
+ # Referer header to send with the request
104
+ sig { returns(T.nilable(String)) }
105
+ attr_reader :referer
106
+
107
+ sig { params(referer: String).void }
108
+ attr_writer :referer
109
+
110
+ # Timeout in ms for the navigation
111
+ sig { returns(T.nilable(Float)) }
112
+ attr_reader :timeout
113
+
114
+ sig { params(timeout: Float).void }
115
+ attr_writer :timeout
116
+
117
+ # When to consider navigation complete
118
+ sig do
119
+ returns(
120
+ T.nilable(
121
+ Stagehand::SessionNavigateParams::Options::WaitUntil::OrSymbol
122
+ )
123
+ )
124
+ end
125
+ attr_reader :wait_until
126
+
127
+ sig do
128
+ params(
129
+ wait_until:
130
+ Stagehand::SessionNavigateParams::Options::WaitUntil::OrSymbol
131
+ ).void
132
+ end
133
+ attr_writer :wait_until
134
+
135
+ sig do
136
+ params(
137
+ referer: String,
138
+ timeout: Float,
139
+ wait_until:
140
+ Stagehand::SessionNavigateParams::Options::WaitUntil::OrSymbol
141
+ ).returns(T.attached_class)
142
+ end
143
+ def self.new(
144
+ # Referer header to send with the request
145
+ referer: nil,
146
+ # Timeout in ms for the navigation
147
+ timeout: nil,
148
+ # When to consider navigation complete
149
+ wait_until: nil
150
+ )
151
+ end
152
+
153
+ sig do
154
+ override.returns(
155
+ {
156
+ referer: String,
157
+ timeout: Float,
158
+ wait_until:
159
+ Stagehand::SessionNavigateParams::Options::WaitUntil::OrSymbol
160
+ }
161
+ )
162
+ end
163
+ def to_hash
164
+ end
165
+
166
+ # When to consider navigation complete
167
+ module WaitUntil
168
+ extend Stagehand::Internal::Type::Enum
169
+
170
+ TaggedSymbol =
171
+ T.type_alias do
172
+ T.all(
173
+ Symbol,
174
+ Stagehand::SessionNavigateParams::Options::WaitUntil
175
+ )
176
+ end
177
+ OrSymbol = T.type_alias { T.any(Symbol, String) }
178
+
179
+ LOAD =
180
+ T.let(
181
+ :load,
182
+ Stagehand::SessionNavigateParams::Options::WaitUntil::TaggedSymbol
183
+ )
184
+ DOMCONTENTLOADED =
185
+ T.let(
186
+ :domcontentloaded,
187
+ Stagehand::SessionNavigateParams::Options::WaitUntil::TaggedSymbol
188
+ )
189
+ NETWORKIDLE =
190
+ T.let(
191
+ :networkidle,
192
+ Stagehand::SessionNavigateParams::Options::WaitUntil::TaggedSymbol
193
+ )
194
+
195
+ sig do
196
+ override.returns(
197
+ T::Array[
198
+ Stagehand::SessionNavigateParams::Options::WaitUntil::TaggedSymbol
199
+ ]
200
+ )
201
+ end
202
+ def self.values
203
+ end
204
+ end
205
+ end
206
+
207
+ # Whether to stream the response via SSE
208
+ module XStreamResponse
209
+ extend Stagehand::Internal::Type::Enum
210
+
211
+ TaggedSymbol =
212
+ T.type_alias do
213
+ T.all(Symbol, Stagehand::SessionNavigateParams::XStreamResponse)
214
+ end
215
+ OrSymbol = T.type_alias { T.any(Symbol, String) }
216
+
217
+ TRUE =
218
+ T.let(
219
+ :true,
220
+ Stagehand::SessionNavigateParams::XStreamResponse::TaggedSymbol
221
+ )
222
+ FALSE =
223
+ T.let(
224
+ :false,
225
+ Stagehand::SessionNavigateParams::XStreamResponse::TaggedSymbol
226
+ )
227
+
228
+ sig do
229
+ override.returns(
230
+ T::Array[
231
+ Stagehand::SessionNavigateParams::XStreamResponse::TaggedSymbol
232
+ ]
233
+ )
234
+ end
235
+ def self.values
236
+ end
237
+ end
238
+ end
239
+ end
240
+ end
@@ -0,0 +1,91 @@
1
+ # typed: strong
2
+
3
+ module Stagehand
4
+ module Models
5
+ class SessionNavigateResponse < Stagehand::Internal::Type::BaseModel
6
+ OrHash =
7
+ T.type_alias do
8
+ T.any(
9
+ Stagehand::Models::SessionNavigateResponse,
10
+ Stagehand::Internal::AnyHash
11
+ )
12
+ end
13
+
14
+ sig { returns(Stagehand::Models::SessionNavigateResponse::Data) }
15
+ attr_reader :data
16
+
17
+ sig do
18
+ params(
19
+ data: Stagehand::Models::SessionNavigateResponse::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::SessionNavigateResponse::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::SessionNavigateResponse::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::SessionNavigateResponse::Data,
57
+ Stagehand::Internal::AnyHash
58
+ )
59
+ end
60
+
61
+ # Navigation response (Playwright Response object or null)
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
+ # Navigation response (Playwright Response object or null)
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
@@ -0,0 +1,198 @@
1
+ # typed: strong
2
+
3
+ module Stagehand
4
+ module Models
5
+ class SessionObserveParams < 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::SessionObserveParams, Stagehand::Internal::AnyHash)
12
+ end
13
+
14
+ # Target frame ID for the observation
15
+ sig { returns(T.nilable(String)) }
16
+ attr_accessor :frame_id
17
+
18
+ # Natural language instruction for what actions to find
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::SessionObserveParams::Options)) }
26
+ attr_reader :options
27
+
28
+ sig do
29
+ params(options: Stagehand::SessionObserveParams::Options::OrHash).void
30
+ end
31
+ attr_writer :options
32
+
33
+ # Whether to stream the response via SSE
34
+ sig do
35
+ returns(
36
+ T.nilable(Stagehand::SessionObserveParams::XStreamResponse::OrSymbol)
37
+ )
38
+ end
39
+ attr_reader :x_stream_response
40
+
41
+ sig do
42
+ params(
43
+ x_stream_response:
44
+ Stagehand::SessionObserveParams::XStreamResponse::OrSymbol
45
+ ).void
46
+ end
47
+ attr_writer :x_stream_response
48
+
49
+ sig do
50
+ params(
51
+ frame_id: T.nilable(String),
52
+ instruction: String,
53
+ options: Stagehand::SessionObserveParams::Options::OrHash,
54
+ x_stream_response:
55
+ Stagehand::SessionObserveParams::XStreamResponse::OrSymbol,
56
+ request_options: Stagehand::RequestOptions::OrHash
57
+ ).returns(T.attached_class)
58
+ end
59
+ def self.new(
60
+ # Target frame ID for the observation
61
+ frame_id: nil,
62
+ # Natural language instruction for what actions to find
63
+ instruction: nil,
64
+ options: nil,
65
+ # Whether to stream the response via SSE
66
+ x_stream_response: nil,
67
+ request_options: {}
68
+ )
69
+ end
70
+
71
+ sig do
72
+ override.returns(
73
+ {
74
+ frame_id: T.nilable(String),
75
+ instruction: String,
76
+ options: Stagehand::SessionObserveParams::Options,
77
+ x_stream_response:
78
+ Stagehand::SessionObserveParams::XStreamResponse::OrSymbol,
79
+ request_options: Stagehand::RequestOptions
80
+ }
81
+ )
82
+ end
83
+ def to_hash
84
+ end
85
+
86
+ class Options < Stagehand::Internal::Type::BaseModel
87
+ OrHash =
88
+ T.type_alias do
89
+ T.any(
90
+ Stagehand::SessionObserveParams::Options,
91
+ Stagehand::Internal::AnyHash
92
+ )
93
+ end
94
+
95
+ # Model configuration object or model name string (e.g., 'openai/gpt-5-nano')
96
+ sig { returns(T.nilable(T.any(Stagehand::ModelConfig, String))) }
97
+ attr_reader :model
98
+
99
+ sig do
100
+ params(model: T.any(Stagehand::ModelConfig::OrHash, String)).void
101
+ end
102
+ attr_writer :model
103
+
104
+ # CSS selector to scope observation to a specific element
105
+ sig { returns(T.nilable(String)) }
106
+ attr_reader :selector
107
+
108
+ sig { params(selector: String).void }
109
+ attr_writer :selector
110
+
111
+ # Timeout in ms for the observation
112
+ sig { returns(T.nilable(Float)) }
113
+ attr_reader :timeout
114
+
115
+ sig { params(timeout: Float).void }
116
+ attr_writer :timeout
117
+
118
+ sig do
119
+ params(
120
+ model: T.any(Stagehand::ModelConfig::OrHash, String),
121
+ selector: String,
122
+ timeout: Float
123
+ ).returns(T.attached_class)
124
+ end
125
+ def self.new(
126
+ # Model configuration object or model name string (e.g., 'openai/gpt-5-nano')
127
+ model: nil,
128
+ # CSS selector to scope observation to a specific element
129
+ selector: nil,
130
+ # Timeout in ms for the observation
131
+ timeout: nil
132
+ )
133
+ end
134
+
135
+ sig do
136
+ override.returns(
137
+ {
138
+ model: T.any(Stagehand::ModelConfig, String),
139
+ selector: String,
140
+ timeout: Float
141
+ }
142
+ )
143
+ end
144
+ def to_hash
145
+ end
146
+
147
+ # Model configuration object or model name string (e.g., 'openai/gpt-5-nano')
148
+ module Model
149
+ extend Stagehand::Internal::Type::Union
150
+
151
+ Variants = T.type_alias { T.any(Stagehand::ModelConfig, String) }
152
+
153
+ sig do
154
+ override.returns(
155
+ T::Array[
156
+ Stagehand::SessionObserveParams::Options::Model::Variants
157
+ ]
158
+ )
159
+ end
160
+ def self.variants
161
+ end
162
+ end
163
+ end
164
+
165
+ # Whether to stream the response via SSE
166
+ module XStreamResponse
167
+ extend Stagehand::Internal::Type::Enum
168
+
169
+ TaggedSymbol =
170
+ T.type_alias do
171
+ T.all(Symbol, Stagehand::SessionObserveParams::XStreamResponse)
172
+ end
173
+ OrSymbol = T.type_alias { T.any(Symbol, String) }
174
+
175
+ TRUE =
176
+ T.let(
177
+ :true,
178
+ Stagehand::SessionObserveParams::XStreamResponse::TaggedSymbol
179
+ )
180
+ FALSE =
181
+ T.let(
182
+ :false,
183
+ Stagehand::SessionObserveParams::XStreamResponse::TaggedSymbol
184
+ )
185
+
186
+ sig do
187
+ override.returns(
188
+ T::Array[
189
+ Stagehand::SessionObserveParams::XStreamResponse::TaggedSymbol
190
+ ]
191
+ )
192
+ end
193
+ def self.values
194
+ end
195
+ end
196
+ end
197
+ end
198
+ end
@@ -0,0 +1,184 @@
1
+ # typed: strong
2
+
3
+ module Stagehand
4
+ module Models
5
+ class SessionObserveResponse < Stagehand::Internal::Type::BaseModel
6
+ OrHash =
7
+ T.type_alias do
8
+ T.any(
9
+ Stagehand::Models::SessionObserveResponse,
10
+ Stagehand::Internal::AnyHash
11
+ )
12
+ end
13
+
14
+ sig { returns(Stagehand::Models::SessionObserveResponse::Data) }
15
+ attr_reader :data
16
+
17
+ sig do
18
+ params(
19
+ data: Stagehand::Models::SessionObserveResponse::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::SessionObserveResponse::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::SessionObserveResponse::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::SessionObserveResponse::Data,
57
+ Stagehand::Internal::AnyHash
58
+ )
59
+ end
60
+
61
+ sig do
62
+ returns(
63
+ T::Array[Stagehand::Models::SessionObserveResponse::Data::Result]
64
+ )
65
+ end
66
+ attr_accessor :result
67
+
68
+ # Action ID for tracking
69
+ sig { returns(T.nilable(String)) }
70
+ attr_reader :action_id
71
+
72
+ sig { params(action_id: String).void }
73
+ attr_writer :action_id
74
+
75
+ sig do
76
+ params(
77
+ result:
78
+ T::Array[
79
+ Stagehand::Models::SessionObserveResponse::Data::Result::OrHash
80
+ ],
81
+ action_id: String
82
+ ).returns(T.attached_class)
83
+ end
84
+ def self.new(
85
+ result:,
86
+ # Action ID for tracking
87
+ action_id: nil
88
+ )
89
+ end
90
+
91
+ sig do
92
+ override.returns(
93
+ {
94
+ result:
95
+ T::Array[
96
+ Stagehand::Models::SessionObserveResponse::Data::Result
97
+ ],
98
+ action_id: String
99
+ }
100
+ )
101
+ end
102
+ def to_hash
103
+ end
104
+
105
+ class Result < Stagehand::Internal::Type::BaseModel
106
+ OrHash =
107
+ T.type_alias do
108
+ T.any(
109
+ Stagehand::Models::SessionObserveResponse::Data::Result,
110
+ Stagehand::Internal::AnyHash
111
+ )
112
+ end
113
+
114
+ # Human-readable description of the action
115
+ sig { returns(String) }
116
+ attr_accessor :description
117
+
118
+ # CSS selector or XPath for the element
119
+ sig { returns(String) }
120
+ attr_accessor :selector
121
+
122
+ # Arguments to pass to the method
123
+ sig { returns(T.nilable(T::Array[String])) }
124
+ attr_reader :arguments
125
+
126
+ sig { params(arguments: T::Array[String]).void }
127
+ attr_writer :arguments
128
+
129
+ # Backend node ID for the element
130
+ sig { returns(T.nilable(Float)) }
131
+ attr_reader :backend_node_id
132
+
133
+ sig { params(backend_node_id: Float).void }
134
+ attr_writer :backend_node_id
135
+
136
+ # The method to execute (click, fill, etc.)
137
+ sig { returns(T.nilable(String)) }
138
+ attr_reader :method_
139
+
140
+ sig { params(method_: String).void }
141
+ attr_writer :method_
142
+
143
+ # Action object returned by observe and used by act
144
+ sig do
145
+ params(
146
+ description: String,
147
+ selector: String,
148
+ arguments: T::Array[String],
149
+ backend_node_id: Float,
150
+ method_: String
151
+ ).returns(T.attached_class)
152
+ end
153
+ def self.new(
154
+ # Human-readable description of the action
155
+ description:,
156
+ # CSS selector or XPath for the element
157
+ selector:,
158
+ # Arguments to pass to the method
159
+ arguments: nil,
160
+ # Backend node ID for the element
161
+ backend_node_id: nil,
162
+ # The method to execute (click, fill, etc.)
163
+ method_: nil
164
+ )
165
+ end
166
+
167
+ sig do
168
+ override.returns(
169
+ {
170
+ description: String,
171
+ selector: String,
172
+ arguments: T::Array[String],
173
+ backend_node_id: Float,
174
+ method_: String
175
+ }
176
+ )
177
+ end
178
+ def to_hash
179
+ end
180
+ end
181
+ end
182
+ end
183
+ end
184
+ end