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