context.dev 1.36.0 → 2.1.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 +35 -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 +1079 -174
  6. data/lib/context_dev/models/monitor_create_params.rb +364 -0
  7. data/lib/context_dev/models/monitor_create_response.rb +608 -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 +631 -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 +264 -0
  22. data/lib/context_dev/models/monitor_retrieve_params.rb +20 -0
  23. data/lib/context_dev/models/monitor_retrieve_response.rb +608 -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 +371 -0
  27. data/lib/context_dev/models/monitor_update_response.rb +608 -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 +9 -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 +3858 -678
  46. data/rbi/context_dev/models/monitor_create_params.rbi +641 -0
  47. data/rbi/context_dev/models/monitor_create_response.rbi +1020 -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 +335 -0
  57. data/rbi/context_dev/models/monitor_list_response.rbi +1089 -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 +469 -0
  62. data/rbi/context_dev/models/monitor_retrieve_params.rbi +38 -0
  63. data/rbi/context_dev/models/monitor_retrieve_response.rbi +1028 -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 +681 -0
  67. data/rbi/context_dev/models/monitor_update_response.rbi +1020 -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 +16 -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 +1586 -281
  84. data/sig/context_dev/models/monitor_create_params.rbs +301 -0
  85. data/sig/context_dev/models/monitor_create_response.rbs +433 -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 +460 -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 +221 -0
  100. data/sig/context_dev/models/monitor_retrieve_params.rbs +23 -0
  101. data/sig/context_dev/models/monitor_retrieve_response.rbs +433 -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 +321 -0
  105. data/sig/context_dev/models/monitor_update_response.rbs +433 -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,641 @@
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(Symbol) }
190
+ attr_accessor :type
191
+
192
+ sig { returns(T.nilable(Float)) }
193
+ attr_reader :confidence_threshold
194
+
195
+ sig { params(confidence_threshold: Float).void }
196
+ attr_writer :confidence_threshold
197
+
198
+ # Detect meaning-level changes to the extracted data, ignoring cosmetic or
199
+ # paraphrase-only differences. What is watched is determined by the extract
200
+ # target's `schema` and `instructions`.
201
+ sig do
202
+ params(confidence_threshold: Float, type: Symbol).returns(
203
+ T.attached_class
204
+ )
205
+ end
206
+ def self.new(confidence_threshold: nil, type: :semantic)
207
+ end
208
+
209
+ sig do
210
+ override.returns({ type: Symbol, confidence_threshold: Float })
211
+ end
212
+ def to_hash
213
+ end
214
+ end
215
+
216
+ sig do
217
+ override.returns(
218
+ T::Array[ContextDev::MonitorCreateParams::ChangeDetection::Variants]
219
+ )
220
+ end
221
+ def self.variants
222
+ end
223
+ end
224
+
225
+ class Schedule < ContextDev::Internal::Type::BaseModel
226
+ OrHash =
227
+ T.type_alias do
228
+ T.any(
229
+ ContextDev::MonitorCreateParams::Schedule,
230
+ ContextDev::Internal::AnyHash
231
+ )
232
+ end
233
+
234
+ # Number of units between runs. The resulting interval (frequency × unit) must be
235
+ # at least 10 minutes and at most 1 year (e.g. minimum 10 when unit is minutes;
236
+ # maximum 365 when unit is days).
237
+ sig { returns(Integer) }
238
+ attr_accessor :frequency
239
+
240
+ sig do
241
+ returns(ContextDev::MonitorCreateParams::Schedule::Type::OrSymbol)
242
+ end
243
+ attr_accessor :type
244
+
245
+ sig do
246
+ returns(ContextDev::MonitorCreateParams::Schedule::Unit::OrSymbol)
247
+ end
248
+ attr_accessor :unit
249
+
250
+ # Run the monitor on a fixed interval defined by a frequency and a unit, e.g.
251
+ # every 6 hours or every 2 days. The total interval (frequency × unit) must be
252
+ # between 10 minutes and 1 year.
253
+ sig do
254
+ params(
255
+ frequency: Integer,
256
+ type: ContextDev::MonitorCreateParams::Schedule::Type::OrSymbol,
257
+ unit: ContextDev::MonitorCreateParams::Schedule::Unit::OrSymbol
258
+ ).returns(T.attached_class)
259
+ end
260
+ def self.new(
261
+ # Number of units between runs. The resulting interval (frequency × unit) must be
262
+ # at least 10 minutes and at most 1 year (e.g. minimum 10 when unit is minutes;
263
+ # maximum 365 when unit is days).
264
+ frequency:,
265
+ type:,
266
+ unit:
267
+ )
268
+ end
269
+
270
+ sig do
271
+ override.returns(
272
+ {
273
+ frequency: Integer,
274
+ type: ContextDev::MonitorCreateParams::Schedule::Type::OrSymbol,
275
+ unit: ContextDev::MonitorCreateParams::Schedule::Unit::OrSymbol
276
+ }
277
+ )
278
+ end
279
+ def to_hash
280
+ end
281
+
282
+ module Type
283
+ extend ContextDev::Internal::Type::Enum
284
+
285
+ TaggedSymbol =
286
+ T.type_alias do
287
+ T.all(Symbol, ContextDev::MonitorCreateParams::Schedule::Type)
288
+ end
289
+ OrSymbol = T.type_alias { T.any(Symbol, String) }
290
+
291
+ INTERVAL =
292
+ T.let(
293
+ :interval,
294
+ ContextDev::MonitorCreateParams::Schedule::Type::TaggedSymbol
295
+ )
296
+
297
+ sig do
298
+ override.returns(
299
+ T::Array[
300
+ ContextDev::MonitorCreateParams::Schedule::Type::TaggedSymbol
301
+ ]
302
+ )
303
+ end
304
+ def self.values
305
+ end
306
+ end
307
+
308
+ module Unit
309
+ extend ContextDev::Internal::Type::Enum
310
+
311
+ TaggedSymbol =
312
+ T.type_alias do
313
+ T.all(Symbol, ContextDev::MonitorCreateParams::Schedule::Unit)
314
+ end
315
+ OrSymbol = T.type_alias { T.any(Symbol, String) }
316
+
317
+ MINUTES =
318
+ T.let(
319
+ :minutes,
320
+ ContextDev::MonitorCreateParams::Schedule::Unit::TaggedSymbol
321
+ )
322
+ HOURS =
323
+ T.let(
324
+ :hours,
325
+ ContextDev::MonitorCreateParams::Schedule::Unit::TaggedSymbol
326
+ )
327
+ DAYS =
328
+ T.let(
329
+ :days,
330
+ ContextDev::MonitorCreateParams::Schedule::Unit::TaggedSymbol
331
+ )
332
+
333
+ sig do
334
+ override.returns(
335
+ T::Array[
336
+ ContextDev::MonitorCreateParams::Schedule::Unit::TaggedSymbol
337
+ ]
338
+ )
339
+ end
340
+ def self.values
341
+ end
342
+ end
343
+ end
344
+
345
+ # Discriminated union describing what the monitor watches.
346
+ module Target
347
+ extend ContextDev::Internal::Type::Union
348
+
349
+ Variants =
350
+ T.type_alias do
351
+ T.any(
352
+ ContextDev::MonitorCreateParams::Target::Page,
353
+ ContextDev::MonitorCreateParams::Target::Sitemap,
354
+ ContextDev::MonitorCreateParams::Target::Extract
355
+ )
356
+ end
357
+
358
+ class Page < ContextDev::Internal::Type::BaseModel
359
+ OrHash =
360
+ T.type_alias do
361
+ T.any(
362
+ ContextDev::MonitorCreateParams::Target::Page,
363
+ ContextDev::Internal::AnyHash
364
+ )
365
+ end
366
+
367
+ sig { returns(Symbol) }
368
+ attr_accessor :type
369
+
370
+ sig { returns(String) }
371
+ attr_accessor :url
372
+
373
+ # Normalize whitespace before comparing or analyzing text.
374
+ sig { returns(T.nilable(T::Boolean)) }
375
+ attr_reader :normalize_whitespace
376
+
377
+ sig { params(normalize_whitespace: T::Boolean).void }
378
+ attr_writer :normalize_whitespace
379
+
380
+ # Watch a single web page.
381
+ sig do
382
+ params(
383
+ url: String,
384
+ normalize_whitespace: T::Boolean,
385
+ type: Symbol
386
+ ).returns(T.attached_class)
387
+ end
388
+ def self.new(
389
+ url:,
390
+ # Normalize whitespace before comparing or analyzing text.
391
+ normalize_whitespace: nil,
392
+ type: :page
393
+ )
394
+ end
395
+
396
+ sig do
397
+ override.returns(
398
+ { type: Symbol, url: String, normalize_whitespace: T::Boolean }
399
+ )
400
+ end
401
+ def to_hash
402
+ end
403
+ end
404
+
405
+ class Sitemap < ContextDev::Internal::Type::BaseModel
406
+ OrHash =
407
+ T.type_alias do
408
+ T.any(
409
+ ContextDev::MonitorCreateParams::Target::Sitemap,
410
+ ContextDev::Internal::AnyHash
411
+ )
412
+ end
413
+
414
+ sig { returns(Symbol) }
415
+ attr_accessor :type
416
+
417
+ # Sitemap URL to monitor.
418
+ sig { returns(String) }
419
+ attr_accessor :url
420
+
421
+ # URL path patterns to exclude.
422
+ sig { returns(T.nilable(T::Array[String])) }
423
+ attr_reader :exclude
424
+
425
+ sig { params(exclude: T::Array[String]).void }
426
+ attr_writer :exclude
427
+
428
+ # URL path patterns to include.
429
+ sig { returns(T.nilable(T::Array[String])) }
430
+ attr_reader :include
431
+
432
+ sig { params(include: T::Array[String]).void }
433
+ attr_writer :include
434
+
435
+ # Maximum number of sitemap URLs to track (capped at 10,000).
436
+ sig { returns(T.nilable(Integer)) }
437
+ attr_reader :max_urls
438
+
439
+ sig { params(max_urls: Integer).void }
440
+ attr_writer :max_urls
441
+
442
+ # Watch a sitemap for URL additions and removals. Crawled URLs are normalized
443
+ # (lowercased host, no trailing slash/fragment) and scoped to the monitored site
444
+ # and its subdomains before comparison. On a detected difference the sitemap is
445
+ # re-fetched within the same run and only URLs both observations agree on are
446
+ # reported, suppressing transient crawl flaps.
447
+ sig do
448
+ params(
449
+ url: String,
450
+ exclude: T::Array[String],
451
+ include: T::Array[String],
452
+ max_urls: Integer,
453
+ type: Symbol
454
+ ).returns(T.attached_class)
455
+ end
456
+ def self.new(
457
+ # Sitemap URL to monitor.
458
+ url:,
459
+ # URL path patterns to exclude.
460
+ exclude: nil,
461
+ # URL path patterns to include.
462
+ include: nil,
463
+ # Maximum number of sitemap URLs to track (capped at 10,000).
464
+ max_urls: nil,
465
+ type: :sitemap
466
+ )
467
+ end
468
+
469
+ sig do
470
+ override.returns(
471
+ {
472
+ type: Symbol,
473
+ url: String,
474
+ exclude: T::Array[String],
475
+ include: T::Array[String],
476
+ max_urls: Integer
477
+ }
478
+ )
479
+ end
480
+ def to_hash
481
+ end
482
+ end
483
+
484
+ class Extract < ContextDev::Internal::Type::BaseModel
485
+ OrHash =
486
+ T.type_alias do
487
+ T.any(
488
+ ContextDev::MonitorCreateParams::Target::Extract,
489
+ ContextDev::Internal::AnyHash
490
+ )
491
+ end
492
+
493
+ # Natural-language instructions guiding which pages and facts to track and which
494
+ # changes to report.
495
+ sig { returns(String) }
496
+ attr_accessor :instructions
497
+
498
+ sig { returns(Symbol) }
499
+ attr_accessor :type
500
+
501
+ # Root URL to extract structured data from.
502
+ sig { returns(String) }
503
+ attr_accessor :url
504
+
505
+ sig { returns(T.nilable(T::Boolean)) }
506
+ attr_reader :follow_subdomains
507
+
508
+ sig { params(follow_subdomains: T::Boolean).void }
509
+ attr_writer :follow_subdomains
510
+
511
+ # Optional maximum link depth from the starting URL (0 = only the starting page).
512
+ sig { returns(T.nilable(Integer)) }
513
+ attr_reader :max_depth
514
+
515
+ sig { params(max_depth: Integer).void }
516
+ attr_writer :max_depth
517
+
518
+ # Maximum number of pages to track.
519
+ sig { returns(T.nilable(Integer)) }
520
+ attr_reader :max_pages
521
+
522
+ sig { params(max_pages: Integer).void }
523
+ attr_writer :max_pages
524
+
525
+ # JSON Schema describing the data you care about. It guides which pages are
526
+ # selected for tracking and gives the change judge context on what matters. If
527
+ # omitted, a default summary + key-points schema is used.
528
+ sig { returns(T.nilable(T::Hash[Symbol, T.anything])) }
529
+ attr_reader :schema
530
+
531
+ sig { params(schema: T::Hash[Symbol, T.anything]).void }
532
+ attr_writer :schema
533
+
534
+ # Watch the monitor-relevant pages of a site for meaningful changes. A crawl
535
+ # guided by `schema`/`instructions` selects up to `max_pages` relevant pages to
536
+ # track; each run re-checks exactly those pages, and confirmed content changes are
537
+ # judged against the monitor's instructions. The tracked page set is refreshed by
538
+ # a periodic re-discovery crawl.
539
+ sig do
540
+ params(
541
+ instructions: String,
542
+ url: String,
543
+ follow_subdomains: T::Boolean,
544
+ max_depth: Integer,
545
+ max_pages: Integer,
546
+ schema: T::Hash[Symbol, T.anything],
547
+ type: Symbol
548
+ ).returns(T.attached_class)
549
+ end
550
+ def self.new(
551
+ # Natural-language instructions guiding which pages and facts to track and which
552
+ # changes to report.
553
+ instructions:,
554
+ # Root URL to extract structured data from.
555
+ url:,
556
+ follow_subdomains: 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 track.
560
+ max_pages: nil,
561
+ # JSON Schema describing the data you care about. It guides which pages are
562
+ # selected for tracking and gives the change judge context on what matters. If
563
+ # omitted, a default summary + key-points schema is used.
564
+ schema: nil,
565
+ type: :extract
566
+ )
567
+ end
568
+
569
+ sig do
570
+ override.returns(
571
+ {
572
+ instructions: String,
573
+ type: Symbol,
574
+ url: String,
575
+ follow_subdomains: T::Boolean,
576
+ max_depth: Integer,
577
+ max_pages: Integer,
578
+ schema: T::Hash[Symbol, T.anything]
579
+ }
580
+ )
581
+ end
582
+ def to_hash
583
+ end
584
+ end
585
+
586
+ sig do
587
+ override.returns(
588
+ T::Array[ContextDev::MonitorCreateParams::Target::Variants]
589
+ )
590
+ end
591
+ def self.variants
592
+ end
593
+ end
594
+
595
+ # Top-level monitor category. Always `web` today; the concrete behavior is
596
+ # described by `target` and `change_detection`.
597
+ module Mode
598
+ extend ContextDev::Internal::Type::Enum
599
+
600
+ TaggedSymbol =
601
+ T.type_alias { T.all(Symbol, ContextDev::MonitorCreateParams::Mode) }
602
+ OrSymbol = T.type_alias { T.any(Symbol, String) }
603
+
604
+ WEB = T.let(:web, ContextDev::MonitorCreateParams::Mode::TaggedSymbol)
605
+
606
+ sig do
607
+ override.returns(
608
+ T::Array[ContextDev::MonitorCreateParams::Mode::TaggedSymbol]
609
+ )
610
+ end
611
+ def self.values
612
+ end
613
+ end
614
+
615
+ class Webhook < ContextDev::Internal::Type::BaseModel
616
+ OrHash =
617
+ T.type_alias do
618
+ T.any(
619
+ ContextDev::MonitorCreateParams::Webhook,
620
+ ContextDev::Internal::AnyHash
621
+ )
622
+ end
623
+
624
+ # Webhook URL called when a change is detected.
625
+ sig { returns(String) }
626
+ attr_accessor :url
627
+
628
+ sig { params(url: String).returns(T.attached_class) }
629
+ def self.new(
630
+ # Webhook URL called when a change is detected.
631
+ url:
632
+ )
633
+ end
634
+
635
+ sig { override.returns({ url: String, secret: String }) }
636
+ def to_hash
637
+ end
638
+ end
639
+ end
640
+ end
641
+ end