context.dev 1.35.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 (171) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +35 -0
  3. data/README.md +24 -17
  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_extract_styleguide_params.rb +22 -1
  32. data/lib/context_dev/models/web_screenshot_params.rb +245 -1
  33. data/lib/context_dev/models/web_search_params.rb +270 -3
  34. data/lib/context_dev/models/web_web_crawl_md_params.rb +236 -1
  35. data/lib/context_dev/models/web_web_scrape_html_params.rb +234 -1
  36. data/lib/context_dev/models/web_web_scrape_html_response.rb +10 -2
  37. data/lib/context_dev/models/web_web_scrape_images_params.rb +12 -1
  38. data/lib/context_dev/models/web_web_scrape_md_params.rb +234 -1
  39. data/lib/context_dev/models.rb +20 -12
  40. data/lib/context_dev/resources/ai.rb +0 -33
  41. data/lib/context_dev/resources/brand.rb +7 -204
  42. data/lib/context_dev/resources/monitors.rb +352 -0
  43. data/lib/context_dev/resources/utility.rb +9 -35
  44. data/lib/context_dev/resources/web.rb +36 -8
  45. data/lib/context_dev/version.rb +1 -1
  46. data/lib/context_dev.rb +23 -14
  47. data/rbi/context_dev/client.rbi +6 -0
  48. data/rbi/context_dev/models/brand_retrieve_params.rbi +3792 -679
  49. data/rbi/context_dev/models/monitor_create_params.rbi +640 -0
  50. data/rbi/context_dev/models/monitor_create_response.rbi +820 -0
  51. data/rbi/context_dev/models/monitor_delete_params.rbi +35 -0
  52. data/rbi/context_dev/models/monitor_delete_response.rbi +29 -0
  53. data/rbi/context_dev/models/monitor_list_account_changes_params.rbi +211 -0
  54. data/rbi/context_dev/models/monitor_list_account_changes_response.rbi +376 -0
  55. data/rbi/context_dev/models/monitor_list_account_runs_params.rbi +125 -0
  56. data/rbi/context_dev/models/monitor_list_account_runs_response.rbi +464 -0
  57. data/rbi/context_dev/models/monitor_list_changes_params.rbi +91 -0
  58. data/rbi/context_dev/models/monitor_list_changes_response.rbi +372 -0
  59. data/rbi/context_dev/models/monitor_list_params.rbi +332 -0
  60. data/rbi/context_dev/models/monitor_list_response.rbi +885 -0
  61. data/rbi/context_dev/models/monitor_list_runs_params.rbi +125 -0
  62. data/rbi/context_dev/models/monitor_list_runs_response.rbi +455 -0
  63. data/rbi/context_dev/models/monitor_retrieve_change_params.rbi +38 -0
  64. data/rbi/context_dev/models/monitor_retrieve_change_response.rbi +478 -0
  65. data/rbi/context_dev/models/monitor_retrieve_params.rbi +38 -0
  66. data/rbi/context_dev/models/monitor_retrieve_response.rbi +828 -0
  67. data/rbi/context_dev/models/monitor_run_params.rbi +35 -0
  68. data/rbi/context_dev/models/monitor_run_response.rbi +48 -0
  69. data/rbi/context_dev/models/monitor_update_params.rbi +680 -0
  70. data/rbi/context_dev/models/monitor_update_response.rbi +820 -0
  71. data/rbi/context_dev/models/utility_prefetch_params.rbi +129 -7
  72. data/rbi/context_dev/models/utility_prefetch_response.rbi +55 -3
  73. data/rbi/context_dev/models/web_extract_response.rbi +10 -0
  74. data/rbi/context_dev/models/web_extract_styleguide_params.rbi +59 -0
  75. data/rbi/context_dev/models/web_screenshot_params.rbi +295 -0
  76. data/rbi/context_dev/models/web_search_params.rbi +288 -2
  77. data/rbi/context_dev/models/web_web_crawl_md_params.rbi +260 -0
  78. data/rbi/context_dev/models/web_web_scrape_html_params.rbi +465 -0
  79. data/rbi/context_dev/models/web_web_scrape_html_response.rbi +29 -3
  80. data/rbi/context_dev/models/web_web_scrape_images_params.rbi +17 -0
  81. data/rbi/context_dev/models/web_web_scrape_md_params.rbi +259 -0
  82. data/rbi/context_dev/models.rbi +23 -15
  83. data/rbi/context_dev/resources/ai.rbi +0 -28
  84. data/rbi/context_dev/resources/brand.rbi +13 -228
  85. data/rbi/context_dev/resources/monitors.rbi +286 -0
  86. data/rbi/context_dev/resources/utility.rbi +14 -29
  87. data/rbi/context_dev/resources/web.rbi +56 -1
  88. data/sig/context_dev/client.rbs +2 -0
  89. data/sig/context_dev/models/brand_retrieve_params.rbs +1560 -281
  90. data/sig/context_dev/models/monitor_create_params.rbs +311 -0
  91. data/sig/context_dev/models/monitor_create_response.rbs +369 -0
  92. data/sig/context_dev/models/monitor_delete_params.rbs +23 -0
  93. data/sig/context_dev/models/monitor_delete_response.rbs +15 -0
  94. data/sig/context_dev/models/monitor_list_account_changes_params.rbs +104 -0
  95. data/sig/context_dev/models/monitor_list_account_changes_response.rbs +176 -0
  96. data/sig/context_dev/models/monitor_list_account_runs_params.rbs +58 -0
  97. data/sig/context_dev/models/monitor_list_account_runs_response.rbs +184 -0
  98. data/sig/context_dev/models/monitor_list_changes_params.rbs +61 -0
  99. data/sig/context_dev/models/monitor_list_changes_response.rbs +176 -0
  100. data/sig/context_dev/models/monitor_list_params.rbs +160 -0
  101. data/sig/context_dev/models/monitor_list_response.rbs +396 -0
  102. data/sig/context_dev/models/monitor_list_runs_params.rbs +63 -0
  103. data/sig/context_dev/models/monitor_list_runs_response.rbs +184 -0
  104. data/sig/context_dev/models/monitor_retrieve_change_params.rbs +23 -0
  105. data/sig/context_dev/models/monitor_retrieve_change_response.rbs +228 -0
  106. data/sig/context_dev/models/monitor_retrieve_params.rbs +23 -0
  107. data/sig/context_dev/models/monitor_retrieve_response.rbs +369 -0
  108. data/sig/context_dev/models/monitor_run_params.rbs +23 -0
  109. data/sig/context_dev/models/monitor_run_response.rbs +18 -0
  110. data/sig/context_dev/models/monitor_update_params.rbs +331 -0
  111. data/sig/context_dev/models/monitor_update_response.rbs +369 -0
  112. data/sig/context_dev/models/utility_prefetch_params.rbs +52 -4
  113. data/sig/context_dev/models/utility_prefetch_response.rbs +22 -3
  114. data/sig/context_dev/models/web_extract_response.rbs +5 -0
  115. data/sig/context_dev/models/web_extract_styleguide_params.rbs +20 -0
  116. data/sig/context_dev/models/web_screenshot_params.rbs +446 -0
  117. data/sig/context_dev/models/web_search_params.rbs +503 -0
  118. data/sig/context_dev/models/web_web_crawl_md_params.rbs +433 -0
  119. data/sig/context_dev/models/web_web_scrape_html_params.rbs +433 -0
  120. data/sig/context_dev/models/web_web_scrape_html_response.rbs +8 -0
  121. data/sig/context_dev/models/web_web_scrape_images_params.rbs +7 -0
  122. data/sig/context_dev/models/web_web_scrape_md_params.rbs +433 -0
  123. data/sig/context_dev/models.rbs +20 -12
  124. data/sig/context_dev/resources/ai.rbs +0 -8
  125. data/sig/context_dev/resources/brand.rbs +1 -56
  126. data/sig/context_dev/resources/monitors.rbs +101 -0
  127. data/sig/context_dev/resources/utility.rbs +2 -7
  128. data/sig/context_dev/resources/web.rbs +12 -0
  129. metadata +71 -44
  130. data/lib/context_dev/models/ai_ai_query_params.rb +0 -235
  131. data/lib/context_dev/models/ai_ai_query_response.rb +0 -133
  132. data/lib/context_dev/models/brand_identify_from_transaction_params.rb +0 -474
  133. data/lib/context_dev/models/brand_identify_from_transaction_response.rb +0 -1074
  134. data/lib/context_dev/models/brand_retrieve_by_email_params.rb +0 -195
  135. data/lib/context_dev/models/brand_retrieve_by_email_response.rb +0 -1071
  136. data/lib/context_dev/models/brand_retrieve_by_isin_params.rb +0 -195
  137. data/lib/context_dev/models/brand_retrieve_by_isin_response.rb +0 -1070
  138. data/lib/context_dev/models/brand_retrieve_by_name_params.rb +0 -452
  139. data/lib/context_dev/models/brand_retrieve_by_name_response.rb +0 -1070
  140. data/lib/context_dev/models/brand_retrieve_by_ticker_params.rb +0 -283
  141. data/lib/context_dev/models/brand_retrieve_by_ticker_response.rb +0 -1072
  142. data/lib/context_dev/models/utility_prefetch_by_email_params.rb +0 -37
  143. data/lib/context_dev/models/utility_prefetch_by_email_response.rb +0 -68
  144. data/rbi/context_dev/models/ai_ai_query_params.rbi +0 -504
  145. data/rbi/context_dev/models/ai_ai_query_response.rbi +0 -267
  146. data/rbi/context_dev/models/brand_identify_from_transaction_params.rbi +0 -2020
  147. data/rbi/context_dev/models/brand_identify_from_transaction_response.rbi +0 -3515
  148. data/rbi/context_dev/models/brand_retrieve_by_email_params.rbi +0 -743
  149. data/rbi/context_dev/models/brand_retrieve_by_email_response.rbi +0 -3511
  150. data/rbi/context_dev/models/brand_retrieve_by_isin_params.rbi +0 -743
  151. data/rbi/context_dev/models/brand_retrieve_by_isin_response.rbi +0 -3510
  152. data/rbi/context_dev/models/brand_retrieve_by_name_params.rbi +0 -1982
  153. data/rbi/context_dev/models/brand_retrieve_by_name_response.rbi +0 -3510
  154. data/rbi/context_dev/models/brand_retrieve_by_ticker_params.rbi +0 -1153
  155. data/rbi/context_dev/models/brand_retrieve_by_ticker_response.rbi +0 -3512
  156. data/rbi/context_dev/models/utility_prefetch_by_email_params.rbi +0 -65
  157. data/rbi/context_dev/models/utility_prefetch_by_email_response.rbi +0 -132
  158. data/sig/context_dev/models/ai_ai_query_params.rbs +0 -218
  159. data/sig/context_dev/models/ai_ai_query_response.rbs +0 -121
  160. data/sig/context_dev/models/brand_identify_from_transaction_params.rbs +0 -822
  161. data/sig/context_dev/models/brand_identify_from_transaction_response.rbs +0 -1441
  162. data/sig/context_dev/models/brand_retrieve_by_email_params.rbs +0 -305
  163. data/sig/context_dev/models/brand_retrieve_by_email_response.rbs +0 -1441
  164. data/sig/context_dev/models/brand_retrieve_by_isin_params.rbs +0 -305
  165. data/sig/context_dev/models/brand_retrieve_by_isin_response.rbs +0 -1441
  166. data/sig/context_dev/models/brand_retrieve_by_name_params.rbs +0 -801
  167. data/sig/context_dev/models/brand_retrieve_by_name_response.rbs +0 -1441
  168. data/sig/context_dev/models/brand_retrieve_by_ticker_params.rbs +0 -467
  169. data/sig/context_dev/models/brand_retrieve_by_ticker_response.rbs +0 -1441
  170. data/sig/context_dev/models/utility_prefetch_by_email_params.rbs +0 -30
  171. data/sig/context_dev/models/utility_prefetch_by_email_response.rbs +0 -64
@@ -0,0 +1,640 @@
1
+ # typed: strong
2
+
3
+ module ContextDev
4
+ module Models
5
+ class MonitorCreateParams < ContextDev::Internal::Type::BaseModel
6
+ extend ContextDev::Internal::Type::RequestParameters::Converter
7
+ include ContextDev::Internal::Type::RequestParameters
8
+
9
+ OrHash =
10
+ T.type_alias do
11
+ T.any(ContextDev::MonitorCreateParams, ContextDev::Internal::AnyHash)
12
+ end
13
+
14
+ # Discriminated union describing how changes are detected.
15
+ sig do
16
+ returns(
17
+ T.any(
18
+ ContextDev::MonitorCreateParams::ChangeDetection::Exact,
19
+ ContextDev::MonitorCreateParams::ChangeDetection::Semantic
20
+ )
21
+ )
22
+ end
23
+ attr_accessor :change_detection
24
+
25
+ sig { returns(String) }
26
+ attr_accessor :name
27
+
28
+ # Run the monitor on a fixed interval defined by a frequency and a unit, e.g.
29
+ # every 6 hours or every 2 days. The total interval (frequency × unit) must be
30
+ # between 10 minutes and 1 year.
31
+ sig { returns(ContextDev::MonitorCreateParams::Schedule) }
32
+ attr_reader :schedule
33
+
34
+ sig do
35
+ params(schedule: ContextDev::MonitorCreateParams::Schedule::OrHash).void
36
+ end
37
+ attr_writer :schedule
38
+
39
+ # Discriminated union describing what the monitor watches.
40
+ sig do
41
+ returns(
42
+ T.any(
43
+ ContextDev::MonitorCreateParams::Target::Page,
44
+ ContextDev::MonitorCreateParams::Target::Sitemap,
45
+ ContextDev::MonitorCreateParams::Target::Extract
46
+ )
47
+ )
48
+ end
49
+ attr_accessor :target
50
+
51
+ # Top-level monitor category. Always `web` today; the concrete behavior is
52
+ # described by `target` and `change_detection`.
53
+ sig do
54
+ returns(T.nilable(ContextDev::MonitorCreateParams::Mode::OrSymbol))
55
+ end
56
+ attr_reader :mode
57
+
58
+ sig { params(mode: ContextDev::MonitorCreateParams::Mode::OrSymbol).void }
59
+ attr_writer :mode
60
+
61
+ # User-defined tags for grouping and filtering monitors and their changes.
62
+ sig { returns(T.nilable(T::Array[String])) }
63
+ attr_reader :tags
64
+
65
+ sig { params(tags: T::Array[String]).void }
66
+ attr_writer :tags
67
+
68
+ sig { returns(T.nilable(ContextDev::MonitorCreateParams::Webhook)) }
69
+ attr_reader :webhook
70
+
71
+ sig do
72
+ params(
73
+ webhook: T.nilable(ContextDev::MonitorCreateParams::Webhook::OrHash)
74
+ ).void
75
+ end
76
+ attr_writer :webhook
77
+
78
+ sig do
79
+ params(
80
+ change_detection:
81
+ T.any(
82
+ ContextDev::MonitorCreateParams::ChangeDetection::Exact::OrHash,
83
+ ContextDev::MonitorCreateParams::ChangeDetection::Semantic::OrHash
84
+ ),
85
+ name: String,
86
+ schedule: ContextDev::MonitorCreateParams::Schedule::OrHash,
87
+ target:
88
+ T.any(
89
+ ContextDev::MonitorCreateParams::Target::Page::OrHash,
90
+ ContextDev::MonitorCreateParams::Target::Sitemap::OrHash,
91
+ ContextDev::MonitorCreateParams::Target::Extract::OrHash
92
+ ),
93
+ mode: ContextDev::MonitorCreateParams::Mode::OrSymbol,
94
+ tags: T::Array[String],
95
+ webhook: T.nilable(ContextDev::MonitorCreateParams::Webhook::OrHash),
96
+ request_options: ContextDev::RequestOptions::OrHash
97
+ ).returns(T.attached_class)
98
+ end
99
+ def self.new(
100
+ # Discriminated union describing how changes are detected.
101
+ change_detection:,
102
+ name:,
103
+ # Run the monitor on a fixed interval defined by a frequency and a unit, e.g.
104
+ # every 6 hours or every 2 days. The total interval (frequency × unit) must be
105
+ # between 10 minutes and 1 year.
106
+ schedule:,
107
+ # Discriminated union describing what the monitor watches.
108
+ target:,
109
+ # Top-level monitor category. Always `web` today; the concrete behavior is
110
+ # described by `target` and `change_detection`.
111
+ mode: nil,
112
+ # User-defined tags for grouping and filtering monitors and their changes.
113
+ tags: nil,
114
+ webhook: nil,
115
+ request_options: {}
116
+ )
117
+ end
118
+
119
+ sig do
120
+ override.returns(
121
+ {
122
+ change_detection:
123
+ T.any(
124
+ ContextDev::MonitorCreateParams::ChangeDetection::Exact,
125
+ ContextDev::MonitorCreateParams::ChangeDetection::Semantic
126
+ ),
127
+ name: String,
128
+ schedule: ContextDev::MonitorCreateParams::Schedule,
129
+ target:
130
+ T.any(
131
+ ContextDev::MonitorCreateParams::Target::Page,
132
+ ContextDev::MonitorCreateParams::Target::Sitemap,
133
+ ContextDev::MonitorCreateParams::Target::Extract
134
+ ),
135
+ mode: ContextDev::MonitorCreateParams::Mode::OrSymbol,
136
+ tags: T::Array[String],
137
+ webhook: T.nilable(ContextDev::MonitorCreateParams::Webhook),
138
+ request_options: ContextDev::RequestOptions
139
+ }
140
+ )
141
+ end
142
+ def to_hash
143
+ end
144
+
145
+ # Discriminated union describing how changes are detected.
146
+ module ChangeDetection
147
+ extend ContextDev::Internal::Type::Union
148
+
149
+ Variants =
150
+ T.type_alias do
151
+ T.any(
152
+ ContextDev::MonitorCreateParams::ChangeDetection::Exact,
153
+ ContextDev::MonitorCreateParams::ChangeDetection::Semantic
154
+ )
155
+ end
156
+
157
+ class Exact < ContextDev::Internal::Type::BaseModel
158
+ OrHash =
159
+ T.type_alias do
160
+ T.any(
161
+ ContextDev::MonitorCreateParams::ChangeDetection::Exact,
162
+ ContextDev::Internal::AnyHash
163
+ )
164
+ end
165
+
166
+ sig { returns(Symbol) }
167
+ attr_accessor :type
168
+
169
+ # Detect exact changes. For page targets, this means visible text diffs. For
170
+ # sitemap targets, this means URL additions and removals.
171
+ sig { params(type: Symbol).returns(T.attached_class) }
172
+ def self.new(type: :exact)
173
+ end
174
+
175
+ sig { override.returns({ type: Symbol }) }
176
+ def to_hash
177
+ end
178
+ end
179
+
180
+ class Semantic < ContextDev::Internal::Type::BaseModel
181
+ OrHash =
182
+ T.type_alias do
183
+ T.any(
184
+ ContextDev::MonitorCreateParams::ChangeDetection::Semantic,
185
+ ContextDev::Internal::AnyHash
186
+ )
187
+ end
188
+
189
+ sig { returns(String) }
190
+ attr_accessor :query
191
+
192
+ sig { returns(Symbol) }
193
+ attr_accessor :type
194
+
195
+ sig { returns(T.nilable(Float)) }
196
+ attr_reader :confidence_threshold
197
+
198
+ sig { params(confidence_threshold: Float).void }
199
+ attr_writer :confidence_threshold
200
+
201
+ # Detect meaning-level changes that match a natural language query.
202
+ sig do
203
+ params(
204
+ query: String,
205
+ confidence_threshold: Float,
206
+ type: Symbol
207
+ ).returns(T.attached_class)
208
+ end
209
+ def self.new(query:, confidence_threshold: nil, type: :semantic)
210
+ end
211
+
212
+ sig do
213
+ override.returns(
214
+ { query: String, type: Symbol, confidence_threshold: Float }
215
+ )
216
+ end
217
+ def to_hash
218
+ end
219
+ end
220
+
221
+ sig do
222
+ override.returns(
223
+ T::Array[ContextDev::MonitorCreateParams::ChangeDetection::Variants]
224
+ )
225
+ end
226
+ def self.variants
227
+ end
228
+ end
229
+
230
+ class Schedule < ContextDev::Internal::Type::BaseModel
231
+ OrHash =
232
+ T.type_alias do
233
+ T.any(
234
+ ContextDev::MonitorCreateParams::Schedule,
235
+ ContextDev::Internal::AnyHash
236
+ )
237
+ end
238
+
239
+ # Number of units between runs. The resulting interval (frequency × unit) must be
240
+ # at least 10 minutes and at most 1 year (e.g. minimum 10 when unit is minutes;
241
+ # maximum 365 when unit is days).
242
+ sig { returns(Integer) }
243
+ attr_accessor :frequency
244
+
245
+ sig do
246
+ returns(ContextDev::MonitorCreateParams::Schedule::Type::OrSymbol)
247
+ end
248
+ attr_accessor :type
249
+
250
+ sig do
251
+ returns(ContextDev::MonitorCreateParams::Schedule::Unit::OrSymbol)
252
+ end
253
+ attr_accessor :unit
254
+
255
+ # Run the monitor on a fixed interval defined by a frequency and a unit, e.g.
256
+ # every 6 hours or every 2 days. The total interval (frequency × unit) must be
257
+ # between 10 minutes and 1 year.
258
+ sig do
259
+ params(
260
+ frequency: Integer,
261
+ type: ContextDev::MonitorCreateParams::Schedule::Type::OrSymbol,
262
+ unit: ContextDev::MonitorCreateParams::Schedule::Unit::OrSymbol
263
+ ).returns(T.attached_class)
264
+ end
265
+ def self.new(
266
+ # Number of units between runs. The resulting interval (frequency × unit) must be
267
+ # at least 10 minutes and at most 1 year (e.g. minimum 10 when unit is minutes;
268
+ # maximum 365 when unit is days).
269
+ frequency:,
270
+ type:,
271
+ unit:
272
+ )
273
+ end
274
+
275
+ sig do
276
+ override.returns(
277
+ {
278
+ frequency: Integer,
279
+ type: ContextDev::MonitorCreateParams::Schedule::Type::OrSymbol,
280
+ unit: ContextDev::MonitorCreateParams::Schedule::Unit::OrSymbol
281
+ }
282
+ )
283
+ end
284
+ def to_hash
285
+ end
286
+
287
+ module Type
288
+ extend ContextDev::Internal::Type::Enum
289
+
290
+ TaggedSymbol =
291
+ T.type_alias do
292
+ T.all(Symbol, ContextDev::MonitorCreateParams::Schedule::Type)
293
+ end
294
+ OrSymbol = T.type_alias { T.any(Symbol, String) }
295
+
296
+ INTERVAL =
297
+ T.let(
298
+ :interval,
299
+ ContextDev::MonitorCreateParams::Schedule::Type::TaggedSymbol
300
+ )
301
+
302
+ sig do
303
+ override.returns(
304
+ T::Array[
305
+ ContextDev::MonitorCreateParams::Schedule::Type::TaggedSymbol
306
+ ]
307
+ )
308
+ end
309
+ def self.values
310
+ end
311
+ end
312
+
313
+ module Unit
314
+ extend ContextDev::Internal::Type::Enum
315
+
316
+ TaggedSymbol =
317
+ T.type_alias do
318
+ T.all(Symbol, ContextDev::MonitorCreateParams::Schedule::Unit)
319
+ end
320
+ OrSymbol = T.type_alias { T.any(Symbol, String) }
321
+
322
+ MINUTES =
323
+ T.let(
324
+ :minutes,
325
+ ContextDev::MonitorCreateParams::Schedule::Unit::TaggedSymbol
326
+ )
327
+ HOURS =
328
+ T.let(
329
+ :hours,
330
+ ContextDev::MonitorCreateParams::Schedule::Unit::TaggedSymbol
331
+ )
332
+ DAYS =
333
+ T.let(
334
+ :days,
335
+ ContextDev::MonitorCreateParams::Schedule::Unit::TaggedSymbol
336
+ )
337
+
338
+ sig do
339
+ override.returns(
340
+ T::Array[
341
+ ContextDev::MonitorCreateParams::Schedule::Unit::TaggedSymbol
342
+ ]
343
+ )
344
+ end
345
+ def self.values
346
+ end
347
+ end
348
+ end
349
+
350
+ # Discriminated union describing what the monitor watches.
351
+ module Target
352
+ extend ContextDev::Internal::Type::Union
353
+
354
+ Variants =
355
+ T.type_alias do
356
+ T.any(
357
+ ContextDev::MonitorCreateParams::Target::Page,
358
+ ContextDev::MonitorCreateParams::Target::Sitemap,
359
+ ContextDev::MonitorCreateParams::Target::Extract
360
+ )
361
+ end
362
+
363
+ class Page < ContextDev::Internal::Type::BaseModel
364
+ OrHash =
365
+ T.type_alias do
366
+ T.any(
367
+ ContextDev::MonitorCreateParams::Target::Page,
368
+ ContextDev::Internal::AnyHash
369
+ )
370
+ end
371
+
372
+ sig { returns(Symbol) }
373
+ attr_accessor :type
374
+
375
+ sig { returns(String) }
376
+ attr_accessor :url
377
+
378
+ # Normalize whitespace before comparing or analyzing text.
379
+ sig { returns(T.nilable(T::Boolean)) }
380
+ attr_reader :normalize_whitespace
381
+
382
+ sig { params(normalize_whitespace: T::Boolean).void }
383
+ attr_writer :normalize_whitespace
384
+
385
+ # Watch a single web page.
386
+ sig do
387
+ params(
388
+ url: String,
389
+ normalize_whitespace: T::Boolean,
390
+ type: Symbol
391
+ ).returns(T.attached_class)
392
+ end
393
+ def self.new(
394
+ url:,
395
+ # Normalize whitespace before comparing or analyzing text.
396
+ normalize_whitespace: nil,
397
+ type: :page
398
+ )
399
+ end
400
+
401
+ sig do
402
+ override.returns(
403
+ { type: Symbol, url: String, normalize_whitespace: T::Boolean }
404
+ )
405
+ end
406
+ def to_hash
407
+ end
408
+ end
409
+
410
+ class Sitemap < ContextDev::Internal::Type::BaseModel
411
+ OrHash =
412
+ T.type_alias do
413
+ T.any(
414
+ ContextDev::MonitorCreateParams::Target::Sitemap,
415
+ ContextDev::Internal::AnyHash
416
+ )
417
+ end
418
+
419
+ sig { returns(Symbol) }
420
+ attr_accessor :type
421
+
422
+ # Sitemap URL to monitor.
423
+ sig { returns(String) }
424
+ attr_accessor :url
425
+
426
+ # URL path patterns to exclude.
427
+ sig { returns(T.nilable(T::Array[String])) }
428
+ attr_reader :exclude
429
+
430
+ sig { params(exclude: T::Array[String]).void }
431
+ attr_writer :exclude
432
+
433
+ # URL path patterns to include.
434
+ sig { returns(T.nilable(T::Array[String])) }
435
+ attr_reader :include
436
+
437
+ sig { params(include: T::Array[String]).void }
438
+ attr_writer :include
439
+
440
+ # Maximum number of sitemap URLs to track (capped at 10,000).
441
+ sig { returns(T.nilable(Integer)) }
442
+ attr_reader :max_urls
443
+
444
+ sig { params(max_urls: Integer).void }
445
+ attr_writer :max_urls
446
+
447
+ # Watch a sitemap for URL additions and removals. Crawled URLs are normalized
448
+ # (lowercased host, no trailing slash/fragment) and scoped to the monitored site
449
+ # and its subdomains before comparison. A new URL set must be observed on two
450
+ # consecutive runs before a change is reported, suppressing one-run crawl flaps.
451
+ sig do
452
+ params(
453
+ url: String,
454
+ exclude: T::Array[String],
455
+ include: T::Array[String],
456
+ max_urls: Integer,
457
+ type: Symbol
458
+ ).returns(T.attached_class)
459
+ end
460
+ def self.new(
461
+ # Sitemap URL to monitor.
462
+ url:,
463
+ # URL path patterns to exclude.
464
+ exclude: nil,
465
+ # URL path patterns to include.
466
+ include: nil,
467
+ # Maximum number of sitemap URLs to track (capped at 10,000).
468
+ max_urls: nil,
469
+ type: :sitemap
470
+ )
471
+ end
472
+
473
+ sig do
474
+ override.returns(
475
+ {
476
+ type: Symbol,
477
+ url: String,
478
+ exclude: T::Array[String],
479
+ include: T::Array[String],
480
+ max_urls: Integer
481
+ }
482
+ )
483
+ end
484
+ def to_hash
485
+ end
486
+ end
487
+
488
+ class Extract < ContextDev::Internal::Type::BaseModel
489
+ OrHash =
490
+ T.type_alias do
491
+ T.any(
492
+ ContextDev::MonitorCreateParams::Target::Extract,
493
+ ContextDev::Internal::AnyHash
494
+ )
495
+ end
496
+
497
+ sig { returns(Symbol) }
498
+ attr_accessor :type
499
+
500
+ # Root URL to extract structured data from.
501
+ sig { returns(String) }
502
+ attr_accessor :url
503
+
504
+ sig { returns(T.nilable(T::Boolean)) }
505
+ attr_reader :follow_subdomains
506
+
507
+ sig { params(follow_subdomains: T::Boolean).void }
508
+ attr_writer :follow_subdomains
509
+
510
+ # Optional natural-language instructions guiding what to extract.
511
+ sig { returns(T.nilable(String)) }
512
+ attr_reader :instructions
513
+
514
+ sig { params(instructions: String).void }
515
+ attr_writer :instructions
516
+
517
+ # Optional maximum link depth from the starting URL (0 = only the starting page).
518
+ sig { returns(T.nilable(Integer)) }
519
+ attr_reader :max_depth
520
+
521
+ sig { params(max_depth: Integer).void }
522
+ attr_writer :max_depth
523
+
524
+ # Maximum number of pages to analyze during extraction.
525
+ sig { returns(T.nilable(Integer)) }
526
+ attr_reader :max_pages
527
+
528
+ sig { params(max_pages: Integer).void }
529
+ attr_writer :max_pages
530
+
531
+ # JSON Schema describing the structured data to extract and watch for changes. If
532
+ # omitted, a default summary + key-points schema is used.
533
+ sig { returns(T.nilable(T::Hash[Symbol, T.anything])) }
534
+ attr_reader :schema
535
+
536
+ sig { params(schema: T::Hash[Symbol, T.anything]).void }
537
+ attr_writer :schema
538
+
539
+ # Watch a site's extracted structured data.
540
+ sig do
541
+ params(
542
+ url: String,
543
+ follow_subdomains: T::Boolean,
544
+ instructions: String,
545
+ max_depth: Integer,
546
+ max_pages: Integer,
547
+ schema: T::Hash[Symbol, T.anything],
548
+ type: Symbol
549
+ ).returns(T.attached_class)
550
+ end
551
+ def self.new(
552
+ # Root URL to extract structured data from.
553
+ url:,
554
+ follow_subdomains: nil,
555
+ # Optional natural-language instructions guiding what to extract.
556
+ instructions: nil,
557
+ # Optional maximum link depth from the starting URL (0 = only the starting page).
558
+ max_depth: nil,
559
+ # Maximum number of pages to analyze during extraction.
560
+ max_pages: nil,
561
+ # JSON Schema describing the structured data to extract and watch for changes. If
562
+ # omitted, a default summary + key-points schema is used.
563
+ schema: nil,
564
+ type: :extract
565
+ )
566
+ end
567
+
568
+ sig do
569
+ override.returns(
570
+ {
571
+ type: Symbol,
572
+ url: String,
573
+ follow_subdomains: T::Boolean,
574
+ instructions: String,
575
+ max_depth: Integer,
576
+ max_pages: Integer,
577
+ schema: T::Hash[Symbol, T.anything]
578
+ }
579
+ )
580
+ end
581
+ def to_hash
582
+ end
583
+ end
584
+
585
+ sig do
586
+ override.returns(
587
+ T::Array[ContextDev::MonitorCreateParams::Target::Variants]
588
+ )
589
+ end
590
+ def self.variants
591
+ end
592
+ end
593
+
594
+ # Top-level monitor category. Always `web` today; the concrete behavior is
595
+ # described by `target` and `change_detection`.
596
+ module Mode
597
+ extend ContextDev::Internal::Type::Enum
598
+
599
+ TaggedSymbol =
600
+ T.type_alias { T.all(Symbol, ContextDev::MonitorCreateParams::Mode) }
601
+ OrSymbol = T.type_alias { T.any(Symbol, String) }
602
+
603
+ WEB = T.let(:web, ContextDev::MonitorCreateParams::Mode::TaggedSymbol)
604
+
605
+ sig do
606
+ override.returns(
607
+ T::Array[ContextDev::MonitorCreateParams::Mode::TaggedSymbol]
608
+ )
609
+ end
610
+ def self.values
611
+ end
612
+ end
613
+
614
+ class Webhook < ContextDev::Internal::Type::BaseModel
615
+ OrHash =
616
+ T.type_alias do
617
+ T.any(
618
+ ContextDev::MonitorCreateParams::Webhook,
619
+ ContextDev::Internal::AnyHash
620
+ )
621
+ end
622
+
623
+ # Webhook URL called when a change is detected.
624
+ sig { returns(String) }
625
+ attr_accessor :url
626
+
627
+ sig { params(url: String).returns(T.attached_class) }
628
+ def self.new(
629
+ # Webhook URL called when a change is detected.
630
+ url:
631
+ )
632
+ end
633
+
634
+ sig { override.returns({ url: String, secret: String }) }
635
+ def to_hash
636
+ end
637
+ end
638
+ end
639
+ end
640
+ end