context.dev 1.36.0 → 2.0.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 (162) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +24 -0
  3. data/README.md +16 -9
  4. data/lib/context_dev/client.rb +7 -0
  5. data/lib/context_dev/models/brand_retrieve_params.rb +1036 -174
  6. data/lib/context_dev/models/monitor_create_params.rb +361 -0
  7. data/lib/context_dev/models/monitor_create_response.rb +484 -0
  8. data/lib/context_dev/models/monitor_delete_params.rb +20 -0
  9. data/lib/context_dev/models/monitor_delete_response.rb +22 -0
  10. data/lib/context_dev/models/monitor_list_account_changes_params.rb +93 -0
  11. data/lib/context_dev/models/monitor_list_account_changes_response.rb +199 -0
  12. data/lib/context_dev/models/monitor_list_account_runs_params.rb +55 -0
  13. data/lib/context_dev/models/monitor_list_account_runs_response.rb +227 -0
  14. data/lib/context_dev/models/monitor_list_changes_params.rb +57 -0
  15. data/lib/context_dev/models/monitor_list_changes_response.rb +198 -0
  16. data/lib/context_dev/models/monitor_list_params.rb +161 -0
  17. data/lib/context_dev/models/monitor_list_response.rb +507 -0
  18. data/lib/context_dev/models/monitor_list_runs_params.rb +62 -0
  19. data/lib/context_dev/models/monitor_list_runs_response.rb +227 -0
  20. data/lib/context_dev/models/monitor_retrieve_change_params.rb +20 -0
  21. data/lib/context_dev/models/monitor_retrieve_change_response.rb +271 -0
  22. data/lib/context_dev/models/monitor_retrieve_params.rb +20 -0
  23. data/lib/context_dev/models/monitor_retrieve_response.rb +484 -0
  24. data/lib/context_dev/models/monitor_run_params.rb +20 -0
  25. data/lib/context_dev/models/monitor_run_response.rb +35 -0
  26. data/lib/context_dev/models/monitor_update_params.rb +368 -0
  27. data/lib/context_dev/models/monitor_update_response.rb +484 -0
  28. data/lib/context_dev/models/utility_prefetch_params.rb +70 -6
  29. data/lib/context_dev/models/utility_prefetch_response.rb +23 -1
  30. data/lib/context_dev/models/web_extract_response.rb +17 -1
  31. data/lib/context_dev/models/web_web_crawl_md_params.rb +11 -1
  32. data/lib/context_dev/models/web_web_scrape_html_params.rb +11 -1
  33. data/lib/context_dev/models/web_web_scrape_html_response.rb +10 -2
  34. data/lib/context_dev/models/web_web_scrape_images_params.rb +12 -1
  35. data/lib/context_dev/models/web_web_scrape_md_params.rb +11 -1
  36. data/lib/context_dev/models.rb +20 -12
  37. data/lib/context_dev/resources/ai.rb +0 -33
  38. data/lib/context_dev/resources/brand.rb +7 -204
  39. data/lib/context_dev/resources/monitors.rb +352 -0
  40. data/lib/context_dev/resources/utility.rb +9 -35
  41. data/lib/context_dev/resources/web.rb +14 -4
  42. data/lib/context_dev/version.rb +1 -1
  43. data/lib/context_dev.rb +23 -14
  44. data/rbi/context_dev/client.rbi +6 -0
  45. data/rbi/context_dev/models/brand_retrieve_params.rbi +3792 -679
  46. data/rbi/context_dev/models/monitor_create_params.rbi +640 -0
  47. data/rbi/context_dev/models/monitor_create_response.rbi +820 -0
  48. data/rbi/context_dev/models/monitor_delete_params.rbi +35 -0
  49. data/rbi/context_dev/models/monitor_delete_response.rbi +29 -0
  50. data/rbi/context_dev/models/monitor_list_account_changes_params.rbi +211 -0
  51. data/rbi/context_dev/models/monitor_list_account_changes_response.rbi +376 -0
  52. data/rbi/context_dev/models/monitor_list_account_runs_params.rbi +125 -0
  53. data/rbi/context_dev/models/monitor_list_account_runs_response.rbi +464 -0
  54. data/rbi/context_dev/models/monitor_list_changes_params.rbi +91 -0
  55. data/rbi/context_dev/models/monitor_list_changes_response.rbi +372 -0
  56. data/rbi/context_dev/models/monitor_list_params.rbi +332 -0
  57. data/rbi/context_dev/models/monitor_list_response.rbi +885 -0
  58. data/rbi/context_dev/models/monitor_list_runs_params.rbi +125 -0
  59. data/rbi/context_dev/models/monitor_list_runs_response.rbi +455 -0
  60. data/rbi/context_dev/models/monitor_retrieve_change_params.rbi +38 -0
  61. data/rbi/context_dev/models/monitor_retrieve_change_response.rbi +478 -0
  62. data/rbi/context_dev/models/monitor_retrieve_params.rbi +38 -0
  63. data/rbi/context_dev/models/monitor_retrieve_response.rbi +828 -0
  64. data/rbi/context_dev/models/monitor_run_params.rbi +35 -0
  65. data/rbi/context_dev/models/monitor_run_response.rbi +48 -0
  66. data/rbi/context_dev/models/monitor_update_params.rbi +680 -0
  67. data/rbi/context_dev/models/monitor_update_response.rbi +820 -0
  68. data/rbi/context_dev/models/utility_prefetch_params.rbi +129 -7
  69. data/rbi/context_dev/models/utility_prefetch_response.rbi +55 -3
  70. data/rbi/context_dev/models/web_extract_response.rbi +10 -0
  71. data/rbi/context_dev/models/web_web_crawl_md_params.rbi +15 -0
  72. data/rbi/context_dev/models/web_web_scrape_html_params.rbi +15 -0
  73. data/rbi/context_dev/models/web_web_scrape_html_response.rbi +29 -3
  74. data/rbi/context_dev/models/web_web_scrape_images_params.rbi +17 -0
  75. data/rbi/context_dev/models/web_web_scrape_md_params.rbi +15 -0
  76. data/rbi/context_dev/models.rbi +23 -15
  77. data/rbi/context_dev/resources/ai.rbi +0 -28
  78. data/rbi/context_dev/resources/brand.rbi +13 -228
  79. data/rbi/context_dev/resources/monitors.rbi +286 -0
  80. data/rbi/context_dev/resources/utility.rbi +14 -29
  81. data/rbi/context_dev/resources/web.rbi +21 -0
  82. data/sig/context_dev/client.rbs +2 -0
  83. data/sig/context_dev/models/brand_retrieve_params.rbs +1560 -281
  84. data/sig/context_dev/models/monitor_create_params.rbs +311 -0
  85. data/sig/context_dev/models/monitor_create_response.rbs +369 -0
  86. data/sig/context_dev/models/monitor_delete_params.rbs +23 -0
  87. data/sig/context_dev/models/monitor_delete_response.rbs +15 -0
  88. data/sig/context_dev/models/monitor_list_account_changes_params.rbs +104 -0
  89. data/sig/context_dev/models/monitor_list_account_changes_response.rbs +176 -0
  90. data/sig/context_dev/models/monitor_list_account_runs_params.rbs +58 -0
  91. data/sig/context_dev/models/monitor_list_account_runs_response.rbs +184 -0
  92. data/sig/context_dev/models/monitor_list_changes_params.rbs +61 -0
  93. data/sig/context_dev/models/monitor_list_changes_response.rbs +176 -0
  94. data/sig/context_dev/models/monitor_list_params.rbs +160 -0
  95. data/sig/context_dev/models/monitor_list_response.rbs +396 -0
  96. data/sig/context_dev/models/monitor_list_runs_params.rbs +63 -0
  97. data/sig/context_dev/models/monitor_list_runs_response.rbs +184 -0
  98. data/sig/context_dev/models/monitor_retrieve_change_params.rbs +23 -0
  99. data/sig/context_dev/models/monitor_retrieve_change_response.rbs +228 -0
  100. data/sig/context_dev/models/monitor_retrieve_params.rbs +23 -0
  101. data/sig/context_dev/models/monitor_retrieve_response.rbs +369 -0
  102. data/sig/context_dev/models/monitor_run_params.rbs +23 -0
  103. data/sig/context_dev/models/monitor_run_response.rbs +18 -0
  104. data/sig/context_dev/models/monitor_update_params.rbs +331 -0
  105. data/sig/context_dev/models/monitor_update_response.rbs +369 -0
  106. data/sig/context_dev/models/utility_prefetch_params.rbs +52 -4
  107. data/sig/context_dev/models/utility_prefetch_response.rbs +22 -3
  108. data/sig/context_dev/models/web_extract_response.rbs +5 -0
  109. data/sig/context_dev/models/web_web_crawl_md_params.rbs +7 -0
  110. data/sig/context_dev/models/web_web_scrape_html_params.rbs +7 -0
  111. data/sig/context_dev/models/web_web_scrape_html_response.rbs +8 -0
  112. data/sig/context_dev/models/web_web_scrape_images_params.rbs +7 -0
  113. data/sig/context_dev/models/web_web_scrape_md_params.rbs +7 -0
  114. data/sig/context_dev/models.rbs +20 -12
  115. data/sig/context_dev/resources/ai.rbs +0 -8
  116. data/sig/context_dev/resources/brand.rbs +1 -56
  117. data/sig/context_dev/resources/monitors.rbs +101 -0
  118. data/sig/context_dev/resources/utility.rbs +2 -7
  119. data/sig/context_dev/resources/web.rbs +4 -0
  120. metadata +71 -44
  121. data/lib/context_dev/models/ai_ai_query_params.rb +0 -235
  122. data/lib/context_dev/models/ai_ai_query_response.rb +0 -133
  123. data/lib/context_dev/models/brand_identify_from_transaction_params.rb +0 -474
  124. data/lib/context_dev/models/brand_identify_from_transaction_response.rb +0 -1074
  125. data/lib/context_dev/models/brand_retrieve_by_email_params.rb +0 -195
  126. data/lib/context_dev/models/brand_retrieve_by_email_response.rb +0 -1071
  127. data/lib/context_dev/models/brand_retrieve_by_isin_params.rb +0 -195
  128. data/lib/context_dev/models/brand_retrieve_by_isin_response.rb +0 -1070
  129. data/lib/context_dev/models/brand_retrieve_by_name_params.rb +0 -452
  130. data/lib/context_dev/models/brand_retrieve_by_name_response.rb +0 -1070
  131. data/lib/context_dev/models/brand_retrieve_by_ticker_params.rb +0 -283
  132. data/lib/context_dev/models/brand_retrieve_by_ticker_response.rb +0 -1072
  133. data/lib/context_dev/models/utility_prefetch_by_email_params.rb +0 -37
  134. data/lib/context_dev/models/utility_prefetch_by_email_response.rb +0 -68
  135. data/rbi/context_dev/models/ai_ai_query_params.rbi +0 -504
  136. data/rbi/context_dev/models/ai_ai_query_response.rbi +0 -267
  137. data/rbi/context_dev/models/brand_identify_from_transaction_params.rbi +0 -2020
  138. data/rbi/context_dev/models/brand_identify_from_transaction_response.rbi +0 -3515
  139. data/rbi/context_dev/models/brand_retrieve_by_email_params.rbi +0 -743
  140. data/rbi/context_dev/models/brand_retrieve_by_email_response.rbi +0 -3511
  141. data/rbi/context_dev/models/brand_retrieve_by_isin_params.rbi +0 -743
  142. data/rbi/context_dev/models/brand_retrieve_by_isin_response.rbi +0 -3510
  143. data/rbi/context_dev/models/brand_retrieve_by_name_params.rbi +0 -1982
  144. data/rbi/context_dev/models/brand_retrieve_by_name_response.rbi +0 -3510
  145. data/rbi/context_dev/models/brand_retrieve_by_ticker_params.rbi +0 -1153
  146. data/rbi/context_dev/models/brand_retrieve_by_ticker_response.rbi +0 -3512
  147. data/rbi/context_dev/models/utility_prefetch_by_email_params.rbi +0 -65
  148. data/rbi/context_dev/models/utility_prefetch_by_email_response.rbi +0 -132
  149. data/sig/context_dev/models/ai_ai_query_params.rbs +0 -218
  150. data/sig/context_dev/models/ai_ai_query_response.rbs +0 -121
  151. data/sig/context_dev/models/brand_identify_from_transaction_params.rbs +0 -822
  152. data/sig/context_dev/models/brand_identify_from_transaction_response.rbs +0 -1441
  153. data/sig/context_dev/models/brand_retrieve_by_email_params.rbs +0 -305
  154. data/sig/context_dev/models/brand_retrieve_by_email_response.rbs +0 -1441
  155. data/sig/context_dev/models/brand_retrieve_by_isin_params.rbs +0 -305
  156. data/sig/context_dev/models/brand_retrieve_by_isin_response.rbs +0 -1441
  157. data/sig/context_dev/models/brand_retrieve_by_name_params.rbs +0 -801
  158. data/sig/context_dev/models/brand_retrieve_by_name_response.rbs +0 -1441
  159. data/sig/context_dev/models/brand_retrieve_by_ticker_params.rbs +0 -467
  160. data/sig/context_dev/models/brand_retrieve_by_ticker_response.rbs +0 -1441
  161. data/sig/context_dev/models/utility_prefetch_by_email_params.rbs +0 -30
  162. data/sig/context_dev/models/utility_prefetch_by_email_response.rbs +0 -64
@@ -0,0 +1,885 @@
1
+ # typed: strong
2
+
3
+ module ContextDev
4
+ module Models
5
+ class MonitorListResponse < ContextDev::Internal::Type::BaseModel
6
+ OrHash =
7
+ T.type_alias do
8
+ T.any(
9
+ ContextDev::Models::MonitorListResponse,
10
+ ContextDev::Internal::AnyHash
11
+ )
12
+ end
13
+
14
+ sig { returns(T::Array[ContextDev::Models::MonitorListResponse::Data]) }
15
+ attr_accessor :data
16
+
17
+ sig { returns(T::Boolean) }
18
+ attr_accessor :has_more
19
+
20
+ sig { returns(T.nilable(String)) }
21
+ attr_accessor :next_cursor
22
+
23
+ sig do
24
+ params(
25
+ data: T::Array[ContextDev::Models::MonitorListResponse::Data::OrHash],
26
+ has_more: T::Boolean,
27
+ next_cursor: T.nilable(String)
28
+ ).returns(T.attached_class)
29
+ end
30
+ def self.new(data:, has_more:, next_cursor:)
31
+ end
32
+
33
+ sig do
34
+ override.returns(
35
+ {
36
+ data: T::Array[ContextDev::Models::MonitorListResponse::Data],
37
+ has_more: T::Boolean,
38
+ next_cursor: T.nilable(String)
39
+ }
40
+ )
41
+ end
42
+ def to_hash
43
+ end
44
+
45
+ class Data < ContextDev::Internal::Type::BaseModel
46
+ OrHash =
47
+ T.type_alias do
48
+ T.any(
49
+ ContextDev::Models::MonitorListResponse::Data,
50
+ ContextDev::Internal::AnyHash
51
+ )
52
+ end
53
+
54
+ sig { returns(String) }
55
+ attr_accessor :id
56
+
57
+ # Discriminated union describing how changes are detected.
58
+ sig do
59
+ returns(
60
+ ContextDev::Models::MonitorListResponse::Data::ChangeDetection::Variants
61
+ )
62
+ end
63
+ attr_accessor :change_detection
64
+
65
+ sig { returns(Time) }
66
+ attr_accessor :created_at
67
+
68
+ # Top-level monitor category. Always `web` today; the concrete behavior is
69
+ # described by `target` and `change_detection`.
70
+ sig do
71
+ returns(
72
+ ContextDev::Models::MonitorListResponse::Data::Mode::TaggedSymbol
73
+ )
74
+ end
75
+ attr_accessor :mode
76
+
77
+ sig { returns(String) }
78
+ attr_accessor :name
79
+
80
+ # Run the monitor on a fixed interval defined by a frequency and a unit, e.g.
81
+ # every 6 hours or every 2 days. The total interval (frequency × unit) must be
82
+ # between 10 minutes and 1 year.
83
+ sig { returns(ContextDev::Models::MonitorListResponse::Data::Schedule) }
84
+ attr_reader :schedule
85
+
86
+ sig do
87
+ params(
88
+ schedule:
89
+ ContextDev::Models::MonitorListResponse::Data::Schedule::OrHash
90
+ ).void
91
+ end
92
+ attr_writer :schedule
93
+
94
+ # Monitor lifecycle status. `failed` means the most recent run failed (see the
95
+ # monitor's `last_error`); failed monitors keep running on schedule and flip back
96
+ # to `active` on the next successful run. Monitors are auto-`paused` after
97
+ # repeated consecutive failures or insufficient-credit skips; resume by PATCHing
98
+ # status to `active`.
99
+ sig do
100
+ returns(
101
+ ContextDev::Models::MonitorListResponse::Data::Status::TaggedSymbol
102
+ )
103
+ end
104
+ attr_accessor :status
105
+
106
+ # Discriminated union describing what the monitor watches.
107
+ sig do
108
+ returns(
109
+ ContextDev::Models::MonitorListResponse::Data::Target::Variants
110
+ )
111
+ end
112
+ attr_accessor :target
113
+
114
+ sig { returns(Time) }
115
+ attr_accessor :updated_at
116
+
117
+ sig { returns(T.nilable(Time)) }
118
+ attr_accessor :last_change_at
119
+
120
+ # Error from the most recent failed run; null when the last run succeeded.
121
+ sig do
122
+ returns(
123
+ T.nilable(ContextDev::Models::MonitorListResponse::Data::LastError)
124
+ )
125
+ end
126
+ attr_reader :last_error
127
+
128
+ sig do
129
+ params(
130
+ last_error:
131
+ T.nilable(
132
+ ContextDev::Models::MonitorListResponse::Data::LastError::OrHash
133
+ )
134
+ ).void
135
+ end
136
+ attr_writer :last_error
137
+
138
+ sig { returns(T.nilable(Time)) }
139
+ attr_accessor :last_run_at
140
+
141
+ # When the next scheduled run is due.
142
+ sig { returns(T.nilable(Time)) }
143
+ attr_accessor :next_run_at
144
+
145
+ # User-defined tags for grouping and filtering monitors and their changes.
146
+ sig { returns(T.nilable(T::Array[String])) }
147
+ attr_reader :tags
148
+
149
+ sig { params(tags: T::Array[String]).void }
150
+ attr_writer :tags
151
+
152
+ sig do
153
+ returns(
154
+ T.nilable(ContextDev::Models::MonitorListResponse::Data::Webhook)
155
+ )
156
+ end
157
+ attr_reader :webhook
158
+
159
+ sig do
160
+ params(
161
+ webhook:
162
+ T.nilable(
163
+ ContextDev::Models::MonitorListResponse::Data::Webhook::OrHash
164
+ )
165
+ ).void
166
+ end
167
+ attr_writer :webhook
168
+
169
+ # A web monitor. `mode` is the constant `web`; behavior is described by `target`
170
+ # (page/sitemap/extract) and `change_detection` (exact/semantic).
171
+ sig do
172
+ params(
173
+ id: String,
174
+ change_detection:
175
+ T.any(
176
+ ContextDev::Models::MonitorListResponse::Data::ChangeDetection::Exact::OrHash,
177
+ ContextDev::Models::MonitorListResponse::Data::ChangeDetection::Semantic::OrHash
178
+ ),
179
+ created_at: Time,
180
+ mode: ContextDev::Models::MonitorListResponse::Data::Mode::OrSymbol,
181
+ name: String,
182
+ schedule:
183
+ ContextDev::Models::MonitorListResponse::Data::Schedule::OrHash,
184
+ status:
185
+ ContextDev::Models::MonitorListResponse::Data::Status::OrSymbol,
186
+ target:
187
+ T.any(
188
+ ContextDev::Models::MonitorListResponse::Data::Target::Page::OrHash,
189
+ ContextDev::Models::MonitorListResponse::Data::Target::Sitemap::OrHash,
190
+ ContextDev::Models::MonitorListResponse::Data::Target::Extract::OrHash
191
+ ),
192
+ updated_at: Time,
193
+ last_change_at: T.nilable(Time),
194
+ last_error:
195
+ T.nilable(
196
+ ContextDev::Models::MonitorListResponse::Data::LastError::OrHash
197
+ ),
198
+ last_run_at: T.nilable(Time),
199
+ next_run_at: T.nilable(Time),
200
+ tags: T::Array[String],
201
+ webhook:
202
+ T.nilable(
203
+ ContextDev::Models::MonitorListResponse::Data::Webhook::OrHash
204
+ )
205
+ ).returns(T.attached_class)
206
+ end
207
+ def self.new(
208
+ id:,
209
+ # Discriminated union describing how changes are detected.
210
+ change_detection:,
211
+ created_at:,
212
+ # Top-level monitor category. Always `web` today; the concrete behavior is
213
+ # described by `target` and `change_detection`.
214
+ mode:,
215
+ name:,
216
+ # Run the monitor on a fixed interval defined by a frequency and a unit, e.g.
217
+ # every 6 hours or every 2 days. The total interval (frequency × unit) must be
218
+ # between 10 minutes and 1 year.
219
+ schedule:,
220
+ # Monitor lifecycle status. `failed` means the most recent run failed (see the
221
+ # monitor's `last_error`); failed monitors keep running on schedule and flip back
222
+ # to `active` on the next successful run. Monitors are auto-`paused` after
223
+ # repeated consecutive failures or insufficient-credit skips; resume by PATCHing
224
+ # status to `active`.
225
+ status:,
226
+ # Discriminated union describing what the monitor watches.
227
+ target:,
228
+ updated_at:,
229
+ last_change_at: nil,
230
+ # Error from the most recent failed run; null when the last run succeeded.
231
+ last_error: nil,
232
+ last_run_at: nil,
233
+ # When the next scheduled run is due.
234
+ next_run_at: nil,
235
+ # User-defined tags for grouping and filtering monitors and their changes.
236
+ tags: nil,
237
+ webhook: nil
238
+ )
239
+ end
240
+
241
+ sig do
242
+ override.returns(
243
+ {
244
+ id: String,
245
+ change_detection:
246
+ ContextDev::Models::MonitorListResponse::Data::ChangeDetection::Variants,
247
+ created_at: Time,
248
+ mode:
249
+ ContextDev::Models::MonitorListResponse::Data::Mode::TaggedSymbol,
250
+ name: String,
251
+ schedule: ContextDev::Models::MonitorListResponse::Data::Schedule,
252
+ status:
253
+ ContextDev::Models::MonitorListResponse::Data::Status::TaggedSymbol,
254
+ target:
255
+ ContextDev::Models::MonitorListResponse::Data::Target::Variants,
256
+ updated_at: Time,
257
+ last_change_at: T.nilable(Time),
258
+ last_error:
259
+ T.nilable(
260
+ ContextDev::Models::MonitorListResponse::Data::LastError
261
+ ),
262
+ last_run_at: T.nilable(Time),
263
+ next_run_at: T.nilable(Time),
264
+ tags: T::Array[String],
265
+ webhook:
266
+ T.nilable(
267
+ ContextDev::Models::MonitorListResponse::Data::Webhook
268
+ )
269
+ }
270
+ )
271
+ end
272
+ def to_hash
273
+ end
274
+
275
+ # Discriminated union describing how changes are detected.
276
+ module ChangeDetection
277
+ extend ContextDev::Internal::Type::Union
278
+
279
+ Variants =
280
+ T.type_alias do
281
+ T.any(
282
+ ContextDev::Models::MonitorListResponse::Data::ChangeDetection::Exact,
283
+ ContextDev::Models::MonitorListResponse::Data::ChangeDetection::Semantic
284
+ )
285
+ end
286
+
287
+ class Exact < ContextDev::Internal::Type::BaseModel
288
+ OrHash =
289
+ T.type_alias do
290
+ T.any(
291
+ ContextDev::Models::MonitorListResponse::Data::ChangeDetection::Exact,
292
+ ContextDev::Internal::AnyHash
293
+ )
294
+ end
295
+
296
+ sig { returns(Symbol) }
297
+ attr_accessor :type
298
+
299
+ # Detect exact changes. For page targets, this means visible text diffs. For
300
+ # sitemap targets, this means URL additions and removals.
301
+ sig { params(type: Symbol).returns(T.attached_class) }
302
+ def self.new(type: :exact)
303
+ end
304
+
305
+ sig { override.returns({ type: Symbol }) }
306
+ def to_hash
307
+ end
308
+ end
309
+
310
+ class Semantic < ContextDev::Internal::Type::BaseModel
311
+ OrHash =
312
+ T.type_alias do
313
+ T.any(
314
+ ContextDev::Models::MonitorListResponse::Data::ChangeDetection::Semantic,
315
+ ContextDev::Internal::AnyHash
316
+ )
317
+ end
318
+
319
+ sig { returns(String) }
320
+ attr_accessor :query
321
+
322
+ sig { returns(Symbol) }
323
+ attr_accessor :type
324
+
325
+ sig { returns(T.nilable(Float)) }
326
+ attr_reader :confidence_threshold
327
+
328
+ sig { params(confidence_threshold: Float).void }
329
+ attr_writer :confidence_threshold
330
+
331
+ # Detect meaning-level changes that match a natural language query.
332
+ sig do
333
+ params(
334
+ query: String,
335
+ confidence_threshold: Float,
336
+ type: Symbol
337
+ ).returns(T.attached_class)
338
+ end
339
+ def self.new(query:, confidence_threshold: nil, type: :semantic)
340
+ end
341
+
342
+ sig do
343
+ override.returns(
344
+ { query: String, type: Symbol, confidence_threshold: Float }
345
+ )
346
+ end
347
+ def to_hash
348
+ end
349
+ end
350
+
351
+ sig do
352
+ override.returns(
353
+ T::Array[
354
+ ContextDev::Models::MonitorListResponse::Data::ChangeDetection::Variants
355
+ ]
356
+ )
357
+ end
358
+ def self.variants
359
+ end
360
+ end
361
+
362
+ # Top-level monitor category. Always `web` today; the concrete behavior is
363
+ # described by `target` and `change_detection`.
364
+ module Mode
365
+ extend ContextDev::Internal::Type::Enum
366
+
367
+ TaggedSymbol =
368
+ T.type_alias do
369
+ T.all(Symbol, ContextDev::Models::MonitorListResponse::Data::Mode)
370
+ end
371
+ OrSymbol = T.type_alias { T.any(Symbol, String) }
372
+
373
+ WEB =
374
+ T.let(
375
+ :web,
376
+ ContextDev::Models::MonitorListResponse::Data::Mode::TaggedSymbol
377
+ )
378
+
379
+ sig do
380
+ override.returns(
381
+ T::Array[
382
+ ContextDev::Models::MonitorListResponse::Data::Mode::TaggedSymbol
383
+ ]
384
+ )
385
+ end
386
+ def self.values
387
+ end
388
+ end
389
+
390
+ class Schedule < ContextDev::Internal::Type::BaseModel
391
+ OrHash =
392
+ T.type_alias do
393
+ T.any(
394
+ ContextDev::Models::MonitorListResponse::Data::Schedule,
395
+ ContextDev::Internal::AnyHash
396
+ )
397
+ end
398
+
399
+ # Number of units between runs. The resulting interval (frequency × unit) must be
400
+ # at least 10 minutes and at most 1 year (e.g. minimum 10 when unit is minutes;
401
+ # maximum 365 when unit is days).
402
+ sig { returns(Integer) }
403
+ attr_accessor :frequency
404
+
405
+ sig do
406
+ returns(
407
+ ContextDev::Models::MonitorListResponse::Data::Schedule::Type::TaggedSymbol
408
+ )
409
+ end
410
+ attr_accessor :type
411
+
412
+ sig do
413
+ returns(
414
+ ContextDev::Models::MonitorListResponse::Data::Schedule::Unit::TaggedSymbol
415
+ )
416
+ end
417
+ attr_accessor :unit
418
+
419
+ # Run the monitor on a fixed interval defined by a frequency and a unit, e.g.
420
+ # every 6 hours or every 2 days. The total interval (frequency × unit) must be
421
+ # between 10 minutes and 1 year.
422
+ sig do
423
+ params(
424
+ frequency: Integer,
425
+ type:
426
+ ContextDev::Models::MonitorListResponse::Data::Schedule::Type::OrSymbol,
427
+ unit:
428
+ ContextDev::Models::MonitorListResponse::Data::Schedule::Unit::OrSymbol
429
+ ).returns(T.attached_class)
430
+ end
431
+ def self.new(
432
+ # Number of units between runs. The resulting interval (frequency × unit) must be
433
+ # at least 10 minutes and at most 1 year (e.g. minimum 10 when unit is minutes;
434
+ # maximum 365 when unit is days).
435
+ frequency:,
436
+ type:,
437
+ unit:
438
+ )
439
+ end
440
+
441
+ sig do
442
+ override.returns(
443
+ {
444
+ frequency: Integer,
445
+ type:
446
+ ContextDev::Models::MonitorListResponse::Data::Schedule::Type::TaggedSymbol,
447
+ unit:
448
+ ContextDev::Models::MonitorListResponse::Data::Schedule::Unit::TaggedSymbol
449
+ }
450
+ )
451
+ end
452
+ def to_hash
453
+ end
454
+
455
+ module Type
456
+ extend ContextDev::Internal::Type::Enum
457
+
458
+ TaggedSymbol =
459
+ T.type_alias do
460
+ T.all(
461
+ Symbol,
462
+ ContextDev::Models::MonitorListResponse::Data::Schedule::Type
463
+ )
464
+ end
465
+ OrSymbol = T.type_alias { T.any(Symbol, String) }
466
+
467
+ INTERVAL =
468
+ T.let(
469
+ :interval,
470
+ ContextDev::Models::MonitorListResponse::Data::Schedule::Type::TaggedSymbol
471
+ )
472
+
473
+ sig do
474
+ override.returns(
475
+ T::Array[
476
+ ContextDev::Models::MonitorListResponse::Data::Schedule::Type::TaggedSymbol
477
+ ]
478
+ )
479
+ end
480
+ def self.values
481
+ end
482
+ end
483
+
484
+ module Unit
485
+ extend ContextDev::Internal::Type::Enum
486
+
487
+ TaggedSymbol =
488
+ T.type_alias do
489
+ T.all(
490
+ Symbol,
491
+ ContextDev::Models::MonitorListResponse::Data::Schedule::Unit
492
+ )
493
+ end
494
+ OrSymbol = T.type_alias { T.any(Symbol, String) }
495
+
496
+ MINUTES =
497
+ T.let(
498
+ :minutes,
499
+ ContextDev::Models::MonitorListResponse::Data::Schedule::Unit::TaggedSymbol
500
+ )
501
+ HOURS =
502
+ T.let(
503
+ :hours,
504
+ ContextDev::Models::MonitorListResponse::Data::Schedule::Unit::TaggedSymbol
505
+ )
506
+ DAYS =
507
+ T.let(
508
+ :days,
509
+ ContextDev::Models::MonitorListResponse::Data::Schedule::Unit::TaggedSymbol
510
+ )
511
+
512
+ sig do
513
+ override.returns(
514
+ T::Array[
515
+ ContextDev::Models::MonitorListResponse::Data::Schedule::Unit::TaggedSymbol
516
+ ]
517
+ )
518
+ end
519
+ def self.values
520
+ end
521
+ end
522
+ end
523
+
524
+ # Monitor lifecycle status. `failed` means the most recent run failed (see the
525
+ # monitor's `last_error`); failed monitors keep running on schedule and flip back
526
+ # to `active` on the next successful run. Monitors are auto-`paused` after
527
+ # repeated consecutive failures or insufficient-credit skips; resume by PATCHing
528
+ # status to `active`.
529
+ module Status
530
+ extend ContextDev::Internal::Type::Enum
531
+
532
+ TaggedSymbol =
533
+ T.type_alias do
534
+ T.all(
535
+ Symbol,
536
+ ContextDev::Models::MonitorListResponse::Data::Status
537
+ )
538
+ end
539
+ OrSymbol = T.type_alias { T.any(Symbol, String) }
540
+
541
+ ACTIVE =
542
+ T.let(
543
+ :active,
544
+ ContextDev::Models::MonitorListResponse::Data::Status::TaggedSymbol
545
+ )
546
+ PAUSED =
547
+ T.let(
548
+ :paused,
549
+ ContextDev::Models::MonitorListResponse::Data::Status::TaggedSymbol
550
+ )
551
+ FAILED =
552
+ T.let(
553
+ :failed,
554
+ ContextDev::Models::MonitorListResponse::Data::Status::TaggedSymbol
555
+ )
556
+
557
+ sig do
558
+ override.returns(
559
+ T::Array[
560
+ ContextDev::Models::MonitorListResponse::Data::Status::TaggedSymbol
561
+ ]
562
+ )
563
+ end
564
+ def self.values
565
+ end
566
+ end
567
+
568
+ # Discriminated union describing what the monitor watches.
569
+ module Target
570
+ extend ContextDev::Internal::Type::Union
571
+
572
+ Variants =
573
+ T.type_alias do
574
+ T.any(
575
+ ContextDev::Models::MonitorListResponse::Data::Target::Page,
576
+ ContextDev::Models::MonitorListResponse::Data::Target::Sitemap,
577
+ ContextDev::Models::MonitorListResponse::Data::Target::Extract
578
+ )
579
+ end
580
+
581
+ class Page < ContextDev::Internal::Type::BaseModel
582
+ OrHash =
583
+ T.type_alias do
584
+ T.any(
585
+ ContextDev::Models::MonitorListResponse::Data::Target::Page,
586
+ ContextDev::Internal::AnyHash
587
+ )
588
+ end
589
+
590
+ sig { returns(Symbol) }
591
+ attr_accessor :type
592
+
593
+ sig { returns(String) }
594
+ attr_accessor :url
595
+
596
+ # Normalize whitespace before comparing or analyzing text.
597
+ sig { returns(T.nilable(T::Boolean)) }
598
+ attr_reader :normalize_whitespace
599
+
600
+ sig { params(normalize_whitespace: T::Boolean).void }
601
+ attr_writer :normalize_whitespace
602
+
603
+ # Watch a single web page.
604
+ sig do
605
+ params(
606
+ url: String,
607
+ normalize_whitespace: T::Boolean,
608
+ type: Symbol
609
+ ).returns(T.attached_class)
610
+ end
611
+ def self.new(
612
+ url:,
613
+ # Normalize whitespace before comparing or analyzing text.
614
+ normalize_whitespace: nil,
615
+ type: :page
616
+ )
617
+ end
618
+
619
+ sig do
620
+ override.returns(
621
+ { type: Symbol, url: String, normalize_whitespace: T::Boolean }
622
+ )
623
+ end
624
+ def to_hash
625
+ end
626
+ end
627
+
628
+ class Sitemap < ContextDev::Internal::Type::BaseModel
629
+ OrHash =
630
+ T.type_alias do
631
+ T.any(
632
+ ContextDev::Models::MonitorListResponse::Data::Target::Sitemap,
633
+ ContextDev::Internal::AnyHash
634
+ )
635
+ end
636
+
637
+ sig { returns(Symbol) }
638
+ attr_accessor :type
639
+
640
+ # Sitemap URL to monitor.
641
+ sig { returns(String) }
642
+ attr_accessor :url
643
+
644
+ # URL path patterns to exclude.
645
+ sig { returns(T.nilable(T::Array[String])) }
646
+ attr_reader :exclude
647
+
648
+ sig { params(exclude: T::Array[String]).void }
649
+ attr_writer :exclude
650
+
651
+ # URL path patterns to include.
652
+ sig { returns(T.nilable(T::Array[String])) }
653
+ attr_reader :include
654
+
655
+ sig { params(include: T::Array[String]).void }
656
+ attr_writer :include
657
+
658
+ # Maximum number of sitemap URLs to track (capped at 10,000).
659
+ sig { returns(T.nilable(Integer)) }
660
+ attr_reader :max_urls
661
+
662
+ sig { params(max_urls: Integer).void }
663
+ attr_writer :max_urls
664
+
665
+ # Watch a sitemap for URL additions and removals. Crawled URLs are normalized
666
+ # (lowercased host, no trailing slash/fragment) and scoped to the monitored site
667
+ # and its subdomains before comparison. A new URL set must be observed on two
668
+ # consecutive runs before a change is reported, suppressing one-run crawl flaps.
669
+ sig do
670
+ params(
671
+ url: String,
672
+ exclude: T::Array[String],
673
+ include: T::Array[String],
674
+ max_urls: Integer,
675
+ type: Symbol
676
+ ).returns(T.attached_class)
677
+ end
678
+ def self.new(
679
+ # Sitemap URL to monitor.
680
+ url:,
681
+ # URL path patterns to exclude.
682
+ exclude: nil,
683
+ # URL path patterns to include.
684
+ include: nil,
685
+ # Maximum number of sitemap URLs to track (capped at 10,000).
686
+ max_urls: nil,
687
+ type: :sitemap
688
+ )
689
+ end
690
+
691
+ sig do
692
+ override.returns(
693
+ {
694
+ type: Symbol,
695
+ url: String,
696
+ exclude: T::Array[String],
697
+ include: T::Array[String],
698
+ max_urls: Integer
699
+ }
700
+ )
701
+ end
702
+ def to_hash
703
+ end
704
+ end
705
+
706
+ class Extract < ContextDev::Internal::Type::BaseModel
707
+ OrHash =
708
+ T.type_alias do
709
+ T.any(
710
+ ContextDev::Models::MonitorListResponse::Data::Target::Extract,
711
+ ContextDev::Internal::AnyHash
712
+ )
713
+ end
714
+
715
+ sig { returns(Symbol) }
716
+ attr_accessor :type
717
+
718
+ # Root URL to extract structured data from.
719
+ sig { returns(String) }
720
+ attr_accessor :url
721
+
722
+ sig { returns(T.nilable(T::Boolean)) }
723
+ attr_reader :follow_subdomains
724
+
725
+ sig { params(follow_subdomains: T::Boolean).void }
726
+ attr_writer :follow_subdomains
727
+
728
+ # Optional natural-language instructions guiding what to extract.
729
+ sig { returns(T.nilable(String)) }
730
+ attr_reader :instructions
731
+
732
+ sig { params(instructions: String).void }
733
+ attr_writer :instructions
734
+
735
+ # Optional maximum link depth from the starting URL (0 = only the starting page).
736
+ sig { returns(T.nilable(Integer)) }
737
+ attr_reader :max_depth
738
+
739
+ sig { params(max_depth: Integer).void }
740
+ attr_writer :max_depth
741
+
742
+ # Maximum number of pages to analyze during extraction.
743
+ sig { returns(T.nilable(Integer)) }
744
+ attr_reader :max_pages
745
+
746
+ sig { params(max_pages: Integer).void }
747
+ attr_writer :max_pages
748
+
749
+ # JSON Schema describing the structured data to extract and watch for changes. If
750
+ # omitted, a default summary + key-points schema is used.
751
+ sig { returns(T.nilable(T::Hash[Symbol, T.anything])) }
752
+ attr_reader :schema
753
+
754
+ sig { params(schema: T::Hash[Symbol, T.anything]).void }
755
+ attr_writer :schema
756
+
757
+ # Watch a site's extracted structured data.
758
+ sig do
759
+ params(
760
+ url: String,
761
+ follow_subdomains: T::Boolean,
762
+ instructions: String,
763
+ max_depth: Integer,
764
+ max_pages: Integer,
765
+ schema: T::Hash[Symbol, T.anything],
766
+ type: Symbol
767
+ ).returns(T.attached_class)
768
+ end
769
+ def self.new(
770
+ # Root URL to extract structured data from.
771
+ url:,
772
+ follow_subdomains: nil,
773
+ # Optional natural-language instructions guiding what to extract.
774
+ instructions: nil,
775
+ # Optional maximum link depth from the starting URL (0 = only the starting page).
776
+ max_depth: nil,
777
+ # Maximum number of pages to analyze during extraction.
778
+ max_pages: nil,
779
+ # JSON Schema describing the structured data to extract and watch for changes. If
780
+ # omitted, a default summary + key-points schema is used.
781
+ schema: nil,
782
+ type: :extract
783
+ )
784
+ end
785
+
786
+ sig do
787
+ override.returns(
788
+ {
789
+ type: Symbol,
790
+ url: String,
791
+ follow_subdomains: T::Boolean,
792
+ instructions: String,
793
+ max_depth: Integer,
794
+ max_pages: Integer,
795
+ schema: T::Hash[Symbol, T.anything]
796
+ }
797
+ )
798
+ end
799
+ def to_hash
800
+ end
801
+ end
802
+
803
+ sig do
804
+ override.returns(
805
+ T::Array[
806
+ ContextDev::Models::MonitorListResponse::Data::Target::Variants
807
+ ]
808
+ )
809
+ end
810
+ def self.variants
811
+ end
812
+ end
813
+
814
+ class LastError < ContextDev::Internal::Type::BaseModel
815
+ OrHash =
816
+ T.type_alias do
817
+ T.any(
818
+ ContextDev::Models::MonitorListResponse::Data::LastError,
819
+ ContextDev::Internal::AnyHash
820
+ )
821
+ end
822
+
823
+ sig { returns(String) }
824
+ attr_accessor :code
825
+
826
+ sig { returns(String) }
827
+ attr_accessor :message
828
+
829
+ # Error from the most recent failed run; null when the last run succeeded.
830
+ sig do
831
+ params(code: String, message: String).returns(T.attached_class)
832
+ end
833
+ def self.new(code:, message:)
834
+ end
835
+
836
+ sig { override.returns({ code: String, message: String }) }
837
+ def to_hash
838
+ end
839
+ end
840
+
841
+ class Webhook < ContextDev::Internal::Type::BaseModel
842
+ OrHash =
843
+ T.type_alias do
844
+ T.any(
845
+ ContextDev::Models::MonitorListResponse::Data::Webhook,
846
+ ContextDev::Internal::AnyHash
847
+ )
848
+ end
849
+
850
+ # Webhook URL called when a change is detected.
851
+ sig { returns(String) }
852
+ attr_accessor :url
853
+
854
+ # Signing secret used to verify webhook authenticity. Each delivery includes an
855
+ # `X-Context-Signature: t=<unix>,v1=<hmac>` header, where the HMAC is SHA-256 over
856
+ # `"{t}.{rawRequestBody}"` keyed by this secret. Recompute it with a constant-time
857
+ # compare and reject stale timestamps to prevent replay. Generated by the API;
858
+ # cannot be set by clients.
859
+ sig { returns(T.nilable(String)) }
860
+ attr_reader :secret
861
+
862
+ sig { params(secret: String).void }
863
+ attr_writer :secret
864
+
865
+ sig { params(url: String, secret: String).returns(T.attached_class) }
866
+ def self.new(
867
+ # Webhook URL called when a change is detected.
868
+ url:,
869
+ # Signing secret used to verify webhook authenticity. Each delivery includes an
870
+ # `X-Context-Signature: t=<unix>,v1=<hmac>` header, where the HMAC is SHA-256 over
871
+ # `"{t}.{rawRequestBody}"` keyed by this secret. Recompute it with a constant-time
872
+ # compare and reject stale timestamps to prevent replay. Generated by the API;
873
+ # cannot be set by clients.
874
+ secret: nil
875
+ )
876
+ end
877
+
878
+ sig { override.returns({ url: String, secret: String }) }
879
+ def to_hash
880
+ end
881
+ end
882
+ end
883
+ end
884
+ end
885
+ end