context.dev 2.11.0 → 2.13.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 (70) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +18 -0
  3. data/README.md +4 -4
  4. data/lib/context_dev/models/ai_extract_product_response.rb +102 -2
  5. data/lib/context_dev/models/ai_extract_products_response.rb +102 -2
  6. data/lib/context_dev/models/batch_get_results_response.rb +56 -1
  7. data/lib/context_dev/models/batch_submit_response.rb +54 -1
  8. data/lib/context_dev/models/brand_retrieve_response.rb +58 -3
  9. data/lib/context_dev/models/brand_retrieve_simplified_response.rb +55 -1
  10. data/lib/context_dev/models/news_search_params.rb +1 -0
  11. data/lib/context_dev/models/web_extract_fonts_response.rb +54 -1
  12. data/lib/context_dev/models/web_extract_params.rb +169 -6
  13. data/lib/context_dev/models/web_extract_response.rb +139 -2
  14. data/lib/context_dev/models/web_extract_styleguide_response.rb +55 -1
  15. data/lib/context_dev/models/web_screenshot_response.rb +54 -1
  16. data/lib/context_dev/models/web_search_response.rb +54 -1
  17. data/lib/context_dev/models/web_web_crawl_md_params.rb +7 -5
  18. data/lib/context_dev/models/web_web_crawl_md_response.rb +54 -1
  19. data/lib/context_dev/models/web_web_scrape_html_params.rb +99 -3
  20. data/lib/context_dev/models/web_web_scrape_html_response.rb +54 -1
  21. data/lib/context_dev/models/web_web_scrape_images_params.rb +99 -3
  22. data/lib/context_dev/models/web_web_scrape_images_response.rb +139 -1
  23. data/lib/context_dev/models/web_web_scrape_md_params.rb +99 -3
  24. data/lib/context_dev/models/web_web_scrape_md_response.rb +54 -1
  25. data/lib/context_dev/resources/web.rb +9 -7
  26. data/lib/context_dev/version.rb +1 -1
  27. data/rbi/context_dev/models/ai_extract_product_response.rbi +218 -0
  28. data/rbi/context_dev/models/ai_extract_products_response.rbi +218 -0
  29. data/rbi/context_dev/models/batch_get_results_response.rbi +121 -0
  30. data/rbi/context_dev/models/batch_submit_response.rbi +117 -0
  31. data/rbi/context_dev/models/brand_retrieve_response.rbi +123 -2
  32. data/rbi/context_dev/models/brand_retrieve_simplified_response.rbi +121 -0
  33. data/rbi/context_dev/models/news_search_params.rbi +5 -0
  34. data/rbi/context_dev/models/web_extract_fonts_response.rbi +119 -0
  35. data/rbi/context_dev/models/web_extract_params.rbi +353 -8
  36. data/rbi/context_dev/models/web_extract_response.rbi +289 -3
  37. data/rbi/context_dev/models/web_extract_styleguide_response.rbi +119 -0
  38. data/rbi/context_dev/models/web_screenshot_response.rbi +117 -0
  39. data/rbi/context_dev/models/web_search_response.rbi +117 -0
  40. data/rbi/context_dev/models/web_web_crawl_md_params.rbi +10 -6
  41. data/rbi/context_dev/models/web_web_crawl_md_response.rbi +117 -0
  42. data/rbi/context_dev/models/web_web_scrape_html_params.rbi +218 -4
  43. data/rbi/context_dev/models/web_web_scrape_html_response.rbi +119 -0
  44. data/rbi/context_dev/models/web_web_scrape_images_params.rbi +218 -4
  45. data/rbi/context_dev/models/web_web_scrape_images_response.rbi +288 -0
  46. data/rbi/context_dev/models/web_web_scrape_md_params.rbi +218 -4
  47. data/rbi/context_dev/models/web_web_scrape_md_response.rbi +117 -0
  48. data/rbi/context_dev/resources/web.rbi +31 -10
  49. data/sig/context_dev/models/ai_extract_product_response.rbs +79 -0
  50. data/sig/context_dev/models/ai_extract_products_response.rbs +79 -0
  51. data/sig/context_dev/models/batch_get_results_response.rbs +39 -0
  52. data/sig/context_dev/models/batch_submit_response.rbs +39 -0
  53. data/sig/context_dev/models/brand_retrieve_response.rbs +39 -0
  54. data/sig/context_dev/models/brand_retrieve_simplified_response.rbs +39 -0
  55. data/sig/context_dev/models/news_search_params.rbs +2 -0
  56. data/sig/context_dev/models/web_extract_fonts_response.rbs +39 -0
  57. data/sig/context_dev/models/web_extract_params.rbs +117 -0
  58. data/sig/context_dev/models/web_extract_response.rbs +120 -3
  59. data/sig/context_dev/models/web_extract_styleguide_response.rbs +39 -0
  60. data/sig/context_dev/models/web_screenshot_response.rbs +39 -0
  61. data/sig/context_dev/models/web_search_response.rbs +39 -0
  62. data/sig/context_dev/models/web_web_crawl_md_response.rbs +39 -0
  63. data/sig/context_dev/models/web_web_scrape_html_params.rbs +74 -0
  64. data/sig/context_dev/models/web_web_scrape_html_response.rbs +39 -0
  65. data/sig/context_dev/models/web_web_scrape_images_params.rbs +74 -0
  66. data/sig/context_dev/models/web_web_scrape_images_response.rbs +117 -0
  67. data/sig/context_dev/models/web_web_scrape_md_params.rbs +74 -0
  68. data/sig/context_dev/models/web_web_scrape_md_response.rbs +39 -0
  69. data/sig/context_dev/resources/web.rbs +1 -0
  70. metadata +2 -2
@@ -11,6 +11,20 @@ module ContextDev
11
11
  )
12
12
  end
13
13
 
14
+ # Cache outcome for this response. Composite responses are hits only when every
15
+ # cache-controlled fetch contributing to the output was a hit; age_ms is the
16
+ # oldest contributing hit.
17
+ sig { returns(ContextDev::Models::WebExtractResponse::CacheMetadata) }
18
+ attr_reader :cache_metadata
19
+
20
+ sig do
21
+ params(
22
+ cache_metadata:
23
+ ContextDev::Models::WebExtractResponse::CacheMetadata::OrHash
24
+ ).void
25
+ end
26
+ attr_writer :cache_metadata
27
+
14
28
  # Extracted data matching the request schema
15
29
  sig { returns(T::Hash[Symbol, T.anything]) }
16
30
  attr_accessor :data
@@ -54,6 +68,8 @@ module ContextDev
54
68
 
55
69
  sig do
56
70
  params(
71
+ cache_metadata:
72
+ ContextDev::Models::WebExtractResponse::CacheMetadata::OrHash,
57
73
  data: T::Hash[Symbol, T.anything],
58
74
  metadata: ContextDev::Models::WebExtractResponse::Metadata::OrHash,
59
75
  status: String,
@@ -64,6 +80,10 @@ module ContextDev
64
80
  ).returns(T.attached_class)
65
81
  end
66
82
  def self.new(
83
+ # Cache outcome for this response. Composite responses are hits only when every
84
+ # cache-controlled fetch contributing to the output was a hit; age_ms is the
85
+ # oldest contributing hit.
86
+ cache_metadata:,
67
87
  # Extracted data matching the request schema
68
88
  data:,
69
89
  metadata:,
@@ -82,6 +102,8 @@ module ContextDev
82
102
  sig do
83
103
  override.returns(
84
104
  {
105
+ cache_metadata:
106
+ ContextDev::Models::WebExtractResponse::CacheMetadata,
85
107
  data: T::Hash[Symbol, T.anything],
86
108
  metadata: ContextDev::Models::WebExtractResponse::Metadata,
87
109
  status: String,
@@ -94,6 +116,101 @@ module ContextDev
94
116
  def to_hash
95
117
  end
96
118
 
119
+ class CacheMetadata < ContextDev::Internal::Type::BaseModel
120
+ OrHash =
121
+ T.type_alias do
122
+ T.any(
123
+ ContextDev::Models::WebExtractResponse::CacheMetadata,
124
+ ContextDev::Internal::AnyHash
125
+ )
126
+ end
127
+
128
+ # Age of the cached data in milliseconds. Zero for miss and zdr responses.
129
+ sig { returns(Integer) }
130
+ attr_accessor :age_ms
131
+
132
+ # Whether the response was served from cache, required fresh work, or honored
133
+ # zero-data-retention cache bypass.
134
+ sig do
135
+ returns(
136
+ ContextDev::Models::WebExtractResponse::CacheMetadata::Status::TaggedSymbol
137
+ )
138
+ end
139
+ attr_accessor :status
140
+
141
+ # Cache outcome for this response. Composite responses are hits only when every
142
+ # cache-controlled fetch contributing to the output was a hit; age_ms is the
143
+ # oldest contributing hit.
144
+ sig do
145
+ params(
146
+ age_ms: Integer,
147
+ status:
148
+ ContextDev::Models::WebExtractResponse::CacheMetadata::Status::OrSymbol
149
+ ).returns(T.attached_class)
150
+ end
151
+ def self.new(
152
+ # Age of the cached data in milliseconds. Zero for miss and zdr responses.
153
+ age_ms:,
154
+ # Whether the response was served from cache, required fresh work, or honored
155
+ # zero-data-retention cache bypass.
156
+ status:
157
+ )
158
+ end
159
+
160
+ sig do
161
+ override.returns(
162
+ {
163
+ age_ms: Integer,
164
+ status:
165
+ ContextDev::Models::WebExtractResponse::CacheMetadata::Status::TaggedSymbol
166
+ }
167
+ )
168
+ end
169
+ def to_hash
170
+ end
171
+
172
+ # Whether the response was served from cache, required fresh work, or honored
173
+ # zero-data-retention cache bypass.
174
+ module Status
175
+ extend ContextDev::Internal::Type::Enum
176
+
177
+ TaggedSymbol =
178
+ T.type_alias do
179
+ T.all(
180
+ Symbol,
181
+ ContextDev::Models::WebExtractResponse::CacheMetadata::Status
182
+ )
183
+ end
184
+ OrSymbol = T.type_alias { T.any(Symbol, String) }
185
+
186
+ HIT =
187
+ T.let(
188
+ :hit,
189
+ ContextDev::Models::WebExtractResponse::CacheMetadata::Status::TaggedSymbol
190
+ )
191
+ MISS =
192
+ T.let(
193
+ :miss,
194
+ ContextDev::Models::WebExtractResponse::CacheMetadata::Status::TaggedSymbol
195
+ )
196
+ ZDR =
197
+ T.let(
198
+ :zdr,
199
+ ContextDev::Models::WebExtractResponse::CacheMetadata::Status::TaggedSymbol
200
+ )
201
+
202
+ sig do
203
+ override.returns(
204
+ T::Array[
205
+ ContextDev::Models::WebExtractResponse::CacheMetadata::Status::TaggedSymbol
206
+ ]
207
+ )
208
+ end
209
+ def self.values
210
+ end
211
+ end
212
+ end
213
+
97
214
  class Metadata < ContextDev::Internal::Type::BaseModel
98
215
  OrHash =
99
216
  T.type_alias do
@@ -123,6 +240,28 @@ module ContextDev
123
240
  sig { returns(Integer) }
124
241
  attr_accessor :num_urls
125
242
 
243
+ # One verified outcome per requested browser action, in request order.
244
+ sig do
245
+ returns(
246
+ T.nilable(
247
+ T::Array[
248
+ ContextDev::Models::WebExtractResponse::Metadata::ActionsApplied
249
+ ]
250
+ )
251
+ )
252
+ end
253
+ attr_reader :actions_applied
254
+
255
+ sig do
256
+ params(
257
+ actions_applied:
258
+ T::Array[
259
+ ContextDev::Models::WebExtractResponse::Metadata::ActionsApplied::OrHash
260
+ ]
261
+ ).void
262
+ end
263
+ attr_writer :actions_applied
264
+
126
265
  sig do
127
266
  params(
128
267
  max_crawl_depth: Integer,
@@ -130,7 +269,11 @@ module ContextDev
130
269
  num_failed: Integer,
131
270
  num_skipped: Integer,
132
271
  num_succeeded: Integer,
133
- num_urls: Integer
272
+ num_urls: Integer,
273
+ actions_applied:
274
+ T::Array[
275
+ ContextDev::Models::WebExtractResponse::Metadata::ActionsApplied::OrHash
276
+ ]
134
277
  ).returns(T.attached_class)
135
278
  end
136
279
  def self.new(
@@ -141,7 +284,9 @@ module ContextDev
141
284
  num_failed:,
142
285
  num_skipped:,
143
286
  num_succeeded:,
144
- num_urls:
287
+ num_urls:,
288
+ # One verified outcome per requested browser action, in request order.
289
+ actions_applied: nil
145
290
  )
146
291
  end
147
292
 
@@ -153,12 +298,153 @@ module ContextDev
153
298
  num_failed: Integer,
154
299
  num_skipped: Integer,
155
300
  num_succeeded: Integer,
156
- num_urls: Integer
301
+ num_urls: Integer,
302
+ actions_applied:
303
+ T::Array[
304
+ ContextDev::Models::WebExtractResponse::Metadata::ActionsApplied
305
+ ]
157
306
  }
158
307
  )
159
308
  end
160
309
  def to_hash
161
310
  end
311
+
312
+ class ActionsApplied < ContextDev::Internal::Type::BaseModel
313
+ OrHash =
314
+ T.type_alias do
315
+ T.any(
316
+ ContextDev::Models::WebExtractResponse::Metadata::ActionsApplied,
317
+ ContextDev::Internal::AnyHash
318
+ )
319
+ end
320
+
321
+ sig { returns(String) }
322
+ attr_accessor :instruction
323
+
324
+ # Applied means the requested page state was visibly verified. Failed means it was
325
+ # not verified. Skipped means it was not attempted.
326
+ sig do
327
+ returns(
328
+ ContextDev::Models::WebExtractResponse::Metadata::ActionsApplied::Status::TaggedSymbol
329
+ )
330
+ end
331
+ attr_accessor :status
332
+
333
+ # Visible page evidence used to verify an applied action.
334
+ sig { returns(T.nilable(String)) }
335
+ attr_reader :completion_evidence
336
+
337
+ sig { params(completion_evidence: String).void }
338
+ attr_writer :completion_evidence
339
+
340
+ sig { returns(T.nilable(Float)) }
341
+ attr_reader :duration_ms
342
+
343
+ sig { params(duration_ms: Float).void }
344
+ attr_writer :duration_ms
345
+
346
+ sig { returns(T.nilable(String)) }
347
+ attr_reader :error
348
+
349
+ sig { params(error: String).void }
350
+ attr_writer :error
351
+
352
+ sig { returns(T.nilable(String)) }
353
+ attr_reader :method_
354
+
355
+ sig { params(method_: String).void }
356
+ attr_writer :method_
357
+
358
+ sig { returns(T.nilable(String)) }
359
+ attr_reader :target_description
360
+
361
+ sig { params(target_description: String).void }
362
+ attr_writer :target_description
363
+
364
+ sig do
365
+ params(
366
+ instruction: String,
367
+ status:
368
+ ContextDev::Models::WebExtractResponse::Metadata::ActionsApplied::Status::OrSymbol,
369
+ completion_evidence: String,
370
+ duration_ms: Float,
371
+ error: String,
372
+ method_: String,
373
+ target_description: String
374
+ ).returns(T.attached_class)
375
+ end
376
+ def self.new(
377
+ instruction:,
378
+ # Applied means the requested page state was visibly verified. Failed means it was
379
+ # not verified. Skipped means it was not attempted.
380
+ status:,
381
+ # Visible page evidence used to verify an applied action.
382
+ completion_evidence: nil,
383
+ duration_ms: nil,
384
+ error: nil,
385
+ method_: nil,
386
+ target_description: nil
387
+ )
388
+ end
389
+
390
+ sig do
391
+ override.returns(
392
+ {
393
+ instruction: String,
394
+ status:
395
+ ContextDev::Models::WebExtractResponse::Metadata::ActionsApplied::Status::TaggedSymbol,
396
+ completion_evidence: String,
397
+ duration_ms: Float,
398
+ error: String,
399
+ method_: String,
400
+ target_description: String
401
+ }
402
+ )
403
+ end
404
+ def to_hash
405
+ end
406
+
407
+ # Applied means the requested page state was visibly verified. Failed means it was
408
+ # not verified. Skipped means it was not attempted.
409
+ module Status
410
+ extend ContextDev::Internal::Type::Enum
411
+
412
+ TaggedSymbol =
413
+ T.type_alias do
414
+ T.all(
415
+ Symbol,
416
+ ContextDev::Models::WebExtractResponse::Metadata::ActionsApplied::Status
417
+ )
418
+ end
419
+ OrSymbol = T.type_alias { T.any(Symbol, String) }
420
+
421
+ APPLIED =
422
+ T.let(
423
+ :applied,
424
+ ContextDev::Models::WebExtractResponse::Metadata::ActionsApplied::Status::TaggedSymbol
425
+ )
426
+ FAILED =
427
+ T.let(
428
+ :failed,
429
+ ContextDev::Models::WebExtractResponse::Metadata::ActionsApplied::Status::TaggedSymbol
430
+ )
431
+ SKIPPED =
432
+ T.let(
433
+ :skipped,
434
+ ContextDev::Models::WebExtractResponse::Metadata::ActionsApplied::Status::TaggedSymbol
435
+ )
436
+
437
+ sig do
438
+ override.returns(
439
+ T::Array[
440
+ ContextDev::Models::WebExtractResponse::Metadata::ActionsApplied::Status::TaggedSymbol
441
+ ]
442
+ )
443
+ end
444
+ def self.values
445
+ end
446
+ end
447
+ end
162
448
  end
163
449
 
164
450
  class KeyMetadata < ContextDev::Internal::Type::BaseModel
@@ -11,6 +11,22 @@ module ContextDev
11
11
  )
12
12
  end
13
13
 
14
+ # Cache outcome for this response. Composite responses are hits only when every
15
+ # cache-controlled fetch contributing to the output was a hit; age_ms is the
16
+ # oldest contributing hit.
17
+ sig do
18
+ returns(ContextDev::Models::WebExtractStyleguideResponse::CacheMetadata)
19
+ end
20
+ attr_reader :cache_metadata
21
+
22
+ sig do
23
+ params(
24
+ cache_metadata:
25
+ ContextDev::Models::WebExtractStyleguideResponse::CacheMetadata::OrHash
26
+ ).void
27
+ end
28
+ attr_writer :cache_metadata
29
+
14
30
  # HTTP status code
15
31
  sig { returns(T.nilable(Integer)) }
16
32
  attr_reader :code
@@ -71,6 +87,8 @@ module ContextDev
71
87
 
72
88
  sig do
73
89
  params(
90
+ cache_metadata:
91
+ ContextDev::Models::WebExtractStyleguideResponse::CacheMetadata::OrHash,
74
92
  code: Integer,
75
93
  domain: String,
76
94
  key_metadata:
@@ -81,6 +99,10 @@ module ContextDev
81
99
  ).returns(T.attached_class)
82
100
  end
83
101
  def self.new(
102
+ # Cache outcome for this response. Composite responses are hits only when every
103
+ # cache-controlled fetch contributing to the output was a hit; age_ms is the
104
+ # oldest contributing hit.
105
+ cache_metadata:,
84
106
  # HTTP status code
85
107
  code: nil,
86
108
  # The normalized domain that was processed
@@ -98,6 +120,8 @@ module ContextDev
98
120
  sig do
99
121
  override.returns(
100
122
  {
123
+ cache_metadata:
124
+ ContextDev::Models::WebExtractStyleguideResponse::CacheMetadata,
101
125
  code: Integer,
102
126
  domain: String,
103
127
  key_metadata:
@@ -111,6 +135,101 @@ module ContextDev
111
135
  def to_hash
112
136
  end
113
137
 
138
+ class CacheMetadata < ContextDev::Internal::Type::BaseModel
139
+ OrHash =
140
+ T.type_alias do
141
+ T.any(
142
+ ContextDev::Models::WebExtractStyleguideResponse::CacheMetadata,
143
+ ContextDev::Internal::AnyHash
144
+ )
145
+ end
146
+
147
+ # Age of the cached data in milliseconds. Zero for miss and zdr responses.
148
+ sig { returns(Integer) }
149
+ attr_accessor :age_ms
150
+
151
+ # Whether the response was served from cache, required fresh work, or honored
152
+ # zero-data-retention cache bypass.
153
+ sig do
154
+ returns(
155
+ ContextDev::Models::WebExtractStyleguideResponse::CacheMetadata::Status::TaggedSymbol
156
+ )
157
+ end
158
+ attr_accessor :status
159
+
160
+ # Cache outcome for this response. Composite responses are hits only when every
161
+ # cache-controlled fetch contributing to the output was a hit; age_ms is the
162
+ # oldest contributing hit.
163
+ sig do
164
+ params(
165
+ age_ms: Integer,
166
+ status:
167
+ ContextDev::Models::WebExtractStyleguideResponse::CacheMetadata::Status::OrSymbol
168
+ ).returns(T.attached_class)
169
+ end
170
+ def self.new(
171
+ # Age of the cached data in milliseconds. Zero for miss and zdr responses.
172
+ age_ms:,
173
+ # Whether the response was served from cache, required fresh work, or honored
174
+ # zero-data-retention cache bypass.
175
+ status:
176
+ )
177
+ end
178
+
179
+ sig do
180
+ override.returns(
181
+ {
182
+ age_ms: Integer,
183
+ status:
184
+ ContextDev::Models::WebExtractStyleguideResponse::CacheMetadata::Status::TaggedSymbol
185
+ }
186
+ )
187
+ end
188
+ def to_hash
189
+ end
190
+
191
+ # Whether the response was served from cache, required fresh work, or honored
192
+ # zero-data-retention cache bypass.
193
+ module Status
194
+ extend ContextDev::Internal::Type::Enum
195
+
196
+ TaggedSymbol =
197
+ T.type_alias do
198
+ T.all(
199
+ Symbol,
200
+ ContextDev::Models::WebExtractStyleguideResponse::CacheMetadata::Status
201
+ )
202
+ end
203
+ OrSymbol = T.type_alias { T.any(Symbol, String) }
204
+
205
+ HIT =
206
+ T.let(
207
+ :hit,
208
+ ContextDev::Models::WebExtractStyleguideResponse::CacheMetadata::Status::TaggedSymbol
209
+ )
210
+ MISS =
211
+ T.let(
212
+ :miss,
213
+ ContextDev::Models::WebExtractStyleguideResponse::CacheMetadata::Status::TaggedSymbol
214
+ )
215
+ ZDR =
216
+ T.let(
217
+ :zdr,
218
+ ContextDev::Models::WebExtractStyleguideResponse::CacheMetadata::Status::TaggedSymbol
219
+ )
220
+
221
+ sig do
222
+ override.returns(
223
+ T::Array[
224
+ ContextDev::Models::WebExtractStyleguideResponse::CacheMetadata::Status::TaggedSymbol
225
+ ]
226
+ )
227
+ end
228
+ def self.values
229
+ end
230
+ end
231
+ end
232
+
114
233
  class KeyMetadata < ContextDev::Internal::Type::BaseModel
115
234
  OrHash =
116
235
  T.type_alias do
@@ -11,6 +11,20 @@ module ContextDev
11
11
  )
12
12
  end
13
13
 
14
+ # Cache outcome for this response. Composite responses are hits only when every
15
+ # cache-controlled fetch contributing to the output was a hit; age_ms is the
16
+ # oldest contributing hit.
17
+ sig { returns(ContextDev::Models::WebScreenshotResponse::CacheMetadata) }
18
+ attr_reader :cache_metadata
19
+
20
+ sig do
21
+ params(
22
+ cache_metadata:
23
+ ContextDev::Models::WebScreenshotResponse::CacheMetadata::OrHash
24
+ ).void
25
+ end
26
+ attr_writer :cache_metadata
27
+
14
28
  # HTTP status code
15
29
  sig { returns(T.nilable(Integer)) }
16
30
  attr_reader :code
@@ -91,6 +105,8 @@ module ContextDev
91
105
 
92
106
  sig do
93
107
  params(
108
+ cache_metadata:
109
+ ContextDev::Models::WebScreenshotResponse::CacheMetadata::OrHash,
94
110
  code: Integer,
95
111
  domain: String,
96
112
  height: Integer,
@@ -104,6 +120,10 @@ module ContextDev
104
120
  ).returns(T.attached_class)
105
121
  end
106
122
  def self.new(
123
+ # Cache outcome for this response. Composite responses are hits only when every
124
+ # cache-controlled fetch contributing to the output was a hit; age_ms is the
125
+ # oldest contributing hit.
126
+ cache_metadata:,
107
127
  # HTTP status code
108
128
  code: nil,
109
129
  # The normalized domain that was processed
@@ -128,6 +148,8 @@ module ContextDev
128
148
  sig do
129
149
  override.returns(
130
150
  {
151
+ cache_metadata:
152
+ ContextDev::Models::WebScreenshotResponse::CacheMetadata,
131
153
  code: Integer,
132
154
  domain: String,
133
155
  height: Integer,
@@ -144,6 +166,101 @@ module ContextDev
144
166
  def to_hash
145
167
  end
146
168
 
169
+ class CacheMetadata < ContextDev::Internal::Type::BaseModel
170
+ OrHash =
171
+ T.type_alias do
172
+ T.any(
173
+ ContextDev::Models::WebScreenshotResponse::CacheMetadata,
174
+ ContextDev::Internal::AnyHash
175
+ )
176
+ end
177
+
178
+ # Age of the cached data in milliseconds. Zero for miss and zdr responses.
179
+ sig { returns(Integer) }
180
+ attr_accessor :age_ms
181
+
182
+ # Whether the response was served from cache, required fresh work, or honored
183
+ # zero-data-retention cache bypass.
184
+ sig do
185
+ returns(
186
+ ContextDev::Models::WebScreenshotResponse::CacheMetadata::Status::TaggedSymbol
187
+ )
188
+ end
189
+ attr_accessor :status
190
+
191
+ # Cache outcome for this response. Composite responses are hits only when every
192
+ # cache-controlled fetch contributing to the output was a hit; age_ms is the
193
+ # oldest contributing hit.
194
+ sig do
195
+ params(
196
+ age_ms: Integer,
197
+ status:
198
+ ContextDev::Models::WebScreenshotResponse::CacheMetadata::Status::OrSymbol
199
+ ).returns(T.attached_class)
200
+ end
201
+ def self.new(
202
+ # Age of the cached data in milliseconds. Zero for miss and zdr responses.
203
+ age_ms:,
204
+ # Whether the response was served from cache, required fresh work, or honored
205
+ # zero-data-retention cache bypass.
206
+ status:
207
+ )
208
+ end
209
+
210
+ sig do
211
+ override.returns(
212
+ {
213
+ age_ms: Integer,
214
+ status:
215
+ ContextDev::Models::WebScreenshotResponse::CacheMetadata::Status::TaggedSymbol
216
+ }
217
+ )
218
+ end
219
+ def to_hash
220
+ end
221
+
222
+ # Whether the response was served from cache, required fresh work, or honored
223
+ # zero-data-retention cache bypass.
224
+ module Status
225
+ extend ContextDev::Internal::Type::Enum
226
+
227
+ TaggedSymbol =
228
+ T.type_alias do
229
+ T.all(
230
+ Symbol,
231
+ ContextDev::Models::WebScreenshotResponse::CacheMetadata::Status
232
+ )
233
+ end
234
+ OrSymbol = T.type_alias { T.any(Symbol, String) }
235
+
236
+ HIT =
237
+ T.let(
238
+ :hit,
239
+ ContextDev::Models::WebScreenshotResponse::CacheMetadata::Status::TaggedSymbol
240
+ )
241
+ MISS =
242
+ T.let(
243
+ :miss,
244
+ ContextDev::Models::WebScreenshotResponse::CacheMetadata::Status::TaggedSymbol
245
+ )
246
+ ZDR =
247
+ T.let(
248
+ :zdr,
249
+ ContextDev::Models::WebScreenshotResponse::CacheMetadata::Status::TaggedSymbol
250
+ )
251
+
252
+ sig do
253
+ override.returns(
254
+ T::Array[
255
+ ContextDev::Models::WebScreenshotResponse::CacheMetadata::Status::TaggedSymbol
256
+ ]
257
+ )
258
+ end
259
+ def self.values
260
+ end
261
+ end
262
+ end
263
+
147
264
  class KeyMetadata < ContextDev::Internal::Type::BaseModel
148
265
  OrHash =
149
266
  T.type_alias do