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