context.dev 2.21.0 → 2.22.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 (229) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +24 -0
  3. data/README.md +1 -1
  4. data/lib/context_dev/client.rb +4 -9
  5. data/lib/context_dev/models/batch_cancel_params.rb +2 -2
  6. data/lib/context_dev/models/batch_cancel_response.rb +16 -21
  7. data/lib/context_dev/models/batch_delete_params.rb +2 -2
  8. data/lib/context_dev/models/batch_delete_response.rb +8 -8
  9. data/lib/context_dev/models/batch_get_results_params.rb +2 -2
  10. data/lib/context_dev/models/batch_get_results_response.rb +17 -22
  11. data/lib/context_dev/models/batch_list_response.rb +38 -47
  12. data/lib/context_dev/models/batch_retrieve_params.rb +2 -2
  13. data/lib/context_dev/models/batch_retrieve_response.rb +37 -46
  14. data/lib/context_dev/models/batch_submit_params.rb +80 -109
  15. data/lib/context_dev/models/batch_submit_response.rb +18 -28
  16. data/lib/context_dev/models/brand_retrieve_params.rb +90 -149
  17. data/lib/context_dev/models/brand_retrieve_response.rb +18 -22
  18. data/lib/context_dev/models/brand_search_params.rb +2 -3
  19. data/lib/context_dev/models/brand_search_response.rb +8 -8
  20. data/lib/context_dev/models/crawl_controls.rb +1 -2
  21. data/lib/context_dev/models/feedback_submit_params.rb +2 -2
  22. data/lib/context_dev/models/feedback_submit_response.rb +8 -8
  23. data/lib/context_dev/models/industry_retrieve_naics_params.rb +17 -32
  24. data/lib/context_dev/models/industry_retrieve_naics_response.rb +10 -10
  25. data/lib/context_dev/models/industry_retrieve_sic_params.rb +20 -39
  26. data/lib/context_dev/models/industry_retrieve_sic_response.rb +10 -10
  27. data/lib/context_dev/models/intake.rb +7 -13
  28. data/lib/context_dev/models/log_list_response.rb +14 -10
  29. data/lib/context_dev/models/log_retrieve_response.rb +15 -41
  30. data/lib/context_dev/models/monitor_create_params.rb +238 -72
  31. data/lib/context_dev/models/monitor_create_response.rb +364 -175
  32. data/lib/context_dev/models/monitor_delete_params.rb +3 -1
  33. data/lib/context_dev/models/monitor_delete_response.rb +44 -1
  34. data/lib/context_dev/models/monitor_get_credit_usage_response.rb +43 -1
  35. data/lib/context_dev/models/monitor_get_limits_response.rb +47 -7
  36. data/lib/context_dev/models/monitor_list_account_changes_response.rb +143 -20
  37. data/lib/context_dev/models/monitor_list_account_runs_response.rb +50 -8
  38. data/lib/context_dev/models/monitor_list_changes_params.rb +2 -1
  39. data/lib/context_dev/models/monitor_list_changes_response.rb +143 -20
  40. data/lib/context_dev/models/monitor_list_params.rb +3 -3
  41. data/lib/context_dev/models/monitor_list_response.rb +304 -106
  42. data/lib/context_dev/models/monitor_list_runs_params.rb +2 -1
  43. data/lib/context_dev/models/monitor_list_runs_response.rb +50 -8
  44. data/lib/context_dev/models/monitor_retrieve_change_params.rb +3 -1
  45. data/lib/context_dev/models/monitor_retrieve_change_response.rb +45 -15
  46. data/lib/context_dev/models/monitor_retrieve_params.rb +3 -1
  47. data/lib/context_dev/models/monitor_retrieve_response.rb +361 -171
  48. data/lib/context_dev/models/monitor_retrieve_run_params.rb +6 -2
  49. data/lib/context_dev/models/monitor_retrieve_run_response.rb +45 -8
  50. data/lib/context_dev/models/monitor_rotate_webhook_secret_params.rb +3 -1
  51. data/lib/context_dev/models/monitor_rotate_webhook_secret_response.rb +364 -172
  52. data/lib/context_dev/models/monitor_run_params.rb +3 -1
  53. data/lib/context_dev/models/monitor_run_response.rb +42 -4
  54. data/lib/context_dev/models/monitor_update_params.rb +239 -71
  55. data/lib/context_dev/models/monitor_update_response.rb +361 -171
  56. data/lib/context_dev/models/news_search_params.rb +10 -6
  57. data/lib/context_dev/models/news_search_response.rb +8 -8
  58. data/lib/context_dev/models/parse_handle_params.rb +9 -20
  59. data/lib/context_dev/models/parse_handle_response.rb +8 -8
  60. data/lib/context_dev/models/person_enrich_params.rb +76 -50
  61. data/lib/context_dev/models/person_enrich_response.rb +8 -8
  62. data/lib/context_dev/models/utility_prefetch_params.rb +15 -29
  63. data/lib/context_dev/models/utility_prefetch_response.rb +10 -10
  64. data/lib/context_dev/models/web_answers_params.rb +28 -47
  65. data/lib/context_dev/models/web_answers_response.rb +9 -8
  66. data/lib/context_dev/models/web_extract_competitors_params.rb +17 -32
  67. data/lib/context_dev/models/web_extract_competitors_response.rb +8 -8
  68. data/lib/context_dev/models/web_extract_styleguide_params.rb +22 -44
  69. data/lib/context_dev/models/web_extract_styleguide_response.rb +34 -44
  70. data/lib/context_dev/models/web_map_urls_params.rb +30 -51
  71. data/lib/context_dev/models/web_map_urls_response.rb +8 -8
  72. data/lib/context_dev/models/web_scrape_params.rb +193 -191
  73. data/lib/context_dev/models/web_scrape_response.rb +219 -95
  74. data/lib/context_dev/models/web_screenshot_params.rb +20 -39
  75. data/lib/context_dev/models/web_screenshot_response.rb +18 -28
  76. data/lib/context_dev/models/web_search_params.rb +76 -65
  77. data/lib/context_dev/models/web_search_response.rb +68 -27
  78. data/lib/context_dev/models/web_web_crawl_md_params.rb +41 -70
  79. data/lib/context_dev/models/web_web_crawl_md_response.rb +11 -15
  80. data/lib/context_dev/models/webhook_delivery.rb +3 -7
  81. data/lib/context_dev/models/webhooks/attempt.rb +3 -3
  82. data/lib/context_dev/models/webhooks/delivery.rb +16 -11
  83. data/lib/context_dev/models/webhooks/delivery_list_attempts_params.rb +2 -6
  84. data/lib/context_dev/models/webhooks/delivery_list_attempts_response.rb +8 -8
  85. data/lib/context_dev/models/webhooks/delivery_list_params.rb +4 -4
  86. data/lib/context_dev/models/webhooks/delivery_list_response.rb +8 -8
  87. data/lib/context_dev/models/webhooks/delivery_retrieve_params.rb +2 -6
  88. data/lib/context_dev/models/webhooks/delivery_retrieve_response.rb +8 -8
  89. data/lib/context_dev/models/webhooks/delivery_retry_params.rb +4 -4
  90. data/lib/context_dev/models/webhooks/delivery_retry_response.rb +8 -8
  91. data/lib/context_dev/models/webhooks/delivery_summary.rb +16 -11
  92. data/lib/context_dev/resources/batch.rb +17 -16
  93. data/lib/context_dev/resources/brand.rb +6 -8
  94. data/lib/context_dev/resources/feedback.rb +4 -5
  95. data/lib/context_dev/resources/industry.rb +9 -11
  96. data/lib/context_dev/resources/logs.rb +4 -5
  97. data/lib/context_dev/resources/monitors.rb +50 -53
  98. data/lib/context_dev/resources/news.rb +4 -8
  99. data/lib/context_dev/resources/parse.rb +4 -5
  100. data/lib/context_dev/resources/people.rb +11 -13
  101. data/lib/context_dev/resources/utility.rb +4 -11
  102. data/lib/context_dev/resources/web.rb +69 -94
  103. data/lib/context_dev/resources/webhooks/deliveries.rb +10 -18
  104. data/lib/context_dev/resources/webhooks.rb +1 -1
  105. data/lib/context_dev/version.rb +1 -1
  106. data/rbi/context_dev/client.rbi +4 -9
  107. data/rbi/context_dev/models/batch_cancel_params.rbi +2 -2
  108. data/rbi/context_dev/models/batch_cancel_response.rbi +17 -21
  109. data/rbi/context_dev/models/batch_delete_params.rbi +2 -2
  110. data/rbi/context_dev/models/batch_delete_response.rbi +9 -9
  111. data/rbi/context_dev/models/batch_get_results_params.rbi +2 -2
  112. data/rbi/context_dev/models/batch_get_results_response.rbi +18 -26
  113. data/rbi/context_dev/models/batch_list_response.rbi +41 -53
  114. data/rbi/context_dev/models/batch_retrieve_params.rbi +2 -2
  115. data/rbi/context_dev/models/batch_retrieve_response.rbi +40 -52
  116. data/rbi/context_dev/models/batch_submit_params.rbi +87 -147
  117. data/rbi/context_dev/models/batch_submit_response.rbi +19 -31
  118. data/rbi/context_dev/models/brand_retrieve_params.rbi +99 -190
  119. data/rbi/context_dev/models/brand_retrieve_response.rbi +19 -25
  120. data/rbi/context_dev/models/brand_search_params.rbi +2 -4
  121. data/rbi/context_dev/models/brand_search_response.rbi +9 -9
  122. data/rbi/context_dev/models/crawl_controls.rbi +1 -2
  123. data/rbi/context_dev/models/feedback_submit_params.rbi +2 -2
  124. data/rbi/context_dev/models/feedback_submit_response.rbi +9 -9
  125. data/rbi/context_dev/models/industry_retrieve_naics_params.rbi +19 -42
  126. data/rbi/context_dev/models/industry_retrieve_naics_response.rbi +11 -11
  127. data/rbi/context_dev/models/industry_retrieve_sic_params.rbi +22 -51
  128. data/rbi/context_dev/models/industry_retrieve_sic_response.rbi +11 -11
  129. data/rbi/context_dev/models/intake.rbi +7 -19
  130. data/rbi/context_dev/models/log_list_response.rbi +13 -11
  131. data/rbi/context_dev/models/log_retrieve_response.rbi +13 -76
  132. data/rbi/context_dev/models/monitor_create_params.rbi +418 -78
  133. data/rbi/context_dev/models/monitor_create_response.rbi +654 -287
  134. data/rbi/context_dev/models/monitor_delete_params.rbi +6 -1
  135. data/rbi/context_dev/models/monitor_delete_response.rbi +89 -3
  136. data/rbi/context_dev/models/monitor_get_credit_usage_response.rbi +77 -3
  137. data/rbi/context_dev/models/monitor_get_limits_response.rbi +83 -10
  138. data/rbi/context_dev/models/monitor_list_account_changes_response.rbi +236 -24
  139. data/rbi/context_dev/models/monitor_list_account_runs_response.rbi +86 -12
  140. data/rbi/context_dev/models/monitor_list_changes_params.rbi +2 -0
  141. data/rbi/context_dev/models/monitor_list_changes_response.rbi +234 -24
  142. data/rbi/context_dev/models/monitor_list_params.rbi +4 -4
  143. data/rbi/context_dev/models/monitor_list_response.rbi +502 -130
  144. data/rbi/context_dev/models/monitor_list_runs_params.rbi +2 -0
  145. data/rbi/context_dev/models/monitor_list_runs_response.rbi +84 -12
  146. data/rbi/context_dev/models/monitor_retrieve_change_params.rbi +6 -1
  147. data/rbi/context_dev/models/monitor_retrieve_change_response.rbi +79 -15
  148. data/rbi/context_dev/models/monitor_retrieve_params.rbi +6 -1
  149. data/rbi/context_dev/models/monitor_retrieve_response.rbi +654 -283
  150. data/rbi/context_dev/models/monitor_retrieve_run_params.rbi +9 -1
  151. data/rbi/context_dev/models/monitor_retrieve_run_response.rbi +77 -9
  152. data/rbi/context_dev/models/monitor_rotate_webhook_secret_params.rbi +6 -1
  153. data/rbi/context_dev/models/monitor_rotate_webhook_secret_response.rbi +659 -288
  154. data/rbi/context_dev/models/monitor_run_params.rbi +6 -1
  155. data/rbi/context_dev/models/monitor_run_response.rbi +82 -9
  156. data/rbi/context_dev/models/monitor_update_params.rbi +420 -75
  157. data/rbi/context_dev/models/monitor_update_response.rbi +650 -281
  158. data/rbi/context_dev/models/news_search_params.rbi +10 -2
  159. data/rbi/context_dev/models/news_search_response.rbi +9 -9
  160. data/rbi/context_dev/models/parse_handle_params.rbi +10 -29
  161. data/rbi/context_dev/models/parse_handle_response.rbi +9 -9
  162. data/rbi/context_dev/models/person_enrich_params.rbi +86 -44
  163. data/rbi/context_dev/models/person_enrich_response.rbi +9 -9
  164. data/rbi/context_dev/models/utility_prefetch_params.rbi +15 -27
  165. data/rbi/context_dev/models/utility_prefetch_response.rbi +11 -11
  166. data/rbi/context_dev/models/web_answers_params.rbi +33 -63
  167. data/rbi/context_dev/models/web_answers_response.rbi +11 -9
  168. data/rbi/context_dev/models/web_extract_competitors_params.rbi +19 -42
  169. data/rbi/context_dev/models/web_extract_competitors_response.rbi +9 -9
  170. data/rbi/context_dev/models/web_extract_styleguide_params.rbi +25 -61
  171. data/rbi/context_dev/models/web_extract_styleguide_response.rbi +36 -51
  172. data/rbi/context_dev/models/web_map_urls_params.rbi +33 -68
  173. data/rbi/context_dev/models/web_map_urls_response.rbi +9 -9
  174. data/rbi/context_dev/models/web_scrape_params.rbi +212 -206
  175. data/rbi/context_dev/models/web_scrape_response.rbi +296 -120
  176. data/rbi/context_dev/models/web_screenshot_params.rbi +22 -51
  177. data/rbi/context_dev/models/web_screenshot_response.rbi +20 -35
  178. data/rbi/context_dev/models/web_search_params.rbi +114 -82
  179. data/rbi/context_dev/models/web_search_response.rbi +145 -33
  180. data/rbi/context_dev/models/web_web_crawl_md_params.rbi +45 -95
  181. data/rbi/context_dev/models/web_web_crawl_md_response.rbi +12 -18
  182. data/rbi/context_dev/models/webhook_delivery.rbi +3 -9
  183. data/rbi/context_dev/models/webhooks/attempt.rbi +3 -3
  184. data/rbi/context_dev/models/webhooks/delivery.rbi +14 -11
  185. data/rbi/context_dev/models/webhooks/delivery_list_attempts_params.rbi +2 -4
  186. data/rbi/context_dev/models/webhooks/delivery_list_attempts_response.rbi +9 -9
  187. data/rbi/context_dev/models/webhooks/delivery_list_params.rbi +4 -4
  188. data/rbi/context_dev/models/webhooks/delivery_list_response.rbi +9 -9
  189. data/rbi/context_dev/models/webhooks/delivery_retrieve_params.rbi +2 -4
  190. data/rbi/context_dev/models/webhooks/delivery_retrieve_response.rbi +9 -9
  191. data/rbi/context_dev/models/webhooks/delivery_retry_params.rbi +4 -4
  192. data/rbi/context_dev/models/webhooks/delivery_retry_response.rbi +9 -9
  193. data/rbi/context_dev/models/webhooks/delivery_summary.rbi +14 -11
  194. data/rbi/context_dev/resources/batch.rbi +19 -18
  195. data/rbi/context_dev/resources/brand.rbi +6 -9
  196. data/rbi/context_dev/resources/feedback.rbi +4 -5
  197. data/rbi/context_dev/resources/industry.rbi +11 -27
  198. data/rbi/context_dev/resources/logs.rbi +4 -5
  199. data/rbi/context_dev/resources/monitors.rbi +71 -49
  200. data/rbi/context_dev/resources/news.rbi +4 -8
  201. data/rbi/context_dev/resources/parse.rbi +7 -14
  202. data/rbi/context_dev/resources/people.rbi +15 -13
  203. data/rbi/context_dev/resources/utility.rbi +4 -11
  204. data/rbi/context_dev/resources/web.rbi +89 -190
  205. data/rbi/context_dev/resources/webhooks/deliveries.rbi +10 -12
  206. data/rbi/context_dev/resources/webhooks.rbi +1 -1
  207. data/sig/context_dev/models/log_retrieve_response.rbs +0 -28
  208. data/sig/context_dev/models/monitor_create_params.rbs +113 -0
  209. data/sig/context_dev/models/monitor_create_response.rbs +203 -53
  210. data/sig/context_dev/models/monitor_delete_response.rbs +46 -3
  211. data/sig/context_dev/models/monitor_get_credit_usage_response.rbs +36 -3
  212. data/sig/context_dev/models/monitor_get_limits_response.rbs +36 -3
  213. data/sig/context_dev/models/monitor_list_account_changes_response.rbs +111 -8
  214. data/sig/context_dev/models/monitor_list_account_runs_response.rbs +36 -3
  215. data/sig/context_dev/models/monitor_list_changes_response.rbs +111 -8
  216. data/sig/context_dev/models/monitor_list_response.rbs +149 -3
  217. data/sig/context_dev/models/monitor_list_runs_response.rbs +36 -3
  218. data/sig/context_dev/models/monitor_retrieve_change_response.rbs +33 -0
  219. data/sig/context_dev/models/monitor_retrieve_response.rbs +203 -53
  220. data/sig/context_dev/models/monitor_retrieve_run_response.rbs +33 -0
  221. data/sig/context_dev/models/monitor_rotate_webhook_secret_response.rbs +203 -53
  222. data/sig/context_dev/models/monitor_run_response.rbs +48 -3
  223. data/sig/context_dev/models/monitor_update_params.rbs +113 -0
  224. data/sig/context_dev/models/monitor_update_response.rbs +203 -53
  225. data/sig/context_dev/models/web_scrape_response.rbs +204 -27
  226. data/sig/context_dev/models/web_search_params.rbs +25 -0
  227. data/sig/context_dev/models/web_search_response.rbs +48 -0
  228. data/sig/context_dev/resources/web.rbs +1 -0
  229. metadata +2 -2
@@ -14,7 +14,8 @@ module ContextDev
14
14
  sig { returns(String) }
15
15
  attr_accessor :id
16
16
 
17
- # Discriminated union describing how changes are detected.
17
+ # How changes are judged. Defaults to `semantic` for extract targets and page
18
+ # targets with `instructions`, otherwise `exact`.
18
19
  sig do
19
20
  returns(
20
21
  ContextDev::Models::MonitorUpdateResponse::ChangeDetection::Variants
@@ -25,8 +26,7 @@ module ContextDev
25
26
  sig { returns(Time) }
26
27
  attr_accessor :created_at
27
28
 
28
- # Top-level monitor category. Always `web` today; the concrete behavior is
29
- # described by `target` and `change_detection`.
29
+ # Always `web`. Optional.
30
30
  sig do
31
31
  returns(ContextDev::Models::MonitorUpdateResponse::Mode::TaggedSymbol)
32
32
  end
@@ -35,30 +35,19 @@ module ContextDev
35
35
  sig { returns(String) }
36
36
  attr_accessor :name
37
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::MonitorUpdateResponse::Schedule) }
42
- attr_reader :schedule
43
-
44
- sig do
45
- params(
46
- schedule: ContextDev::Models::MonitorUpdateResponse::Schedule::OrHash
47
- ).void
48
- end
49
- attr_writer :schedule
38
+ # Unique ID of this request, also in `X-Request-Id`. Include it when contacting
39
+ # support.
40
+ sig { returns(String) }
41
+ attr_accessor :request_id
50
42
 
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`.
43
+ # Current state. Failed monitors keep running; paused monitors must be resumed
44
+ # with `status: "active"`.
56
45
  sig do
57
46
  returns(ContextDev::Models::MonitorUpdateResponse::Status::TaggedSymbol)
58
47
  end
59
48
  attr_accessor :status
60
49
 
61
- # Discriminated union describing what the monitor watches.
50
+ # What to watch: a page, a sitemap, or data extracted from a site.
62
51
  sig do
63
52
  returns(ContextDev::Models::MonitorUpdateResponse::Target::Variants)
64
53
  end
@@ -67,10 +56,8 @@ module ContextDev
67
56
  sig { returns(Time) }
68
57
  attr_accessor :updated_at
69
58
 
70
- # Current baseline: the last observed value the monitor compares new snapshots
71
- # against. Its shape follows `target.type` (page/sitemap/extract). Only populated
72
- # on GET /monitors/{monitor_id}; null until the first baseline run completes (and
73
- # after a target or change_detection update, which resets the baseline).
59
+ # Comparison baseline, included on Retrieve. Null until capture completes or after
60
+ # target changes.
74
61
  sig do
75
62
  returns(
76
63
  T.nilable(
@@ -80,6 +67,22 @@ module ContextDev
80
67
  end
81
68
  attr_accessor :baseline
82
69
 
70
+ # Credits this request used and your remaining balance.
71
+ sig do
72
+ returns(
73
+ T.nilable(ContextDev::Models::MonitorUpdateResponse::KeyMetadata)
74
+ )
75
+ end
76
+ attr_reader :key_metadata
77
+
78
+ sig do
79
+ params(
80
+ key_metadata:
81
+ ContextDev::Models::MonitorUpdateResponse::KeyMetadata::OrHash
82
+ ).void
83
+ end
84
+ attr_writer :key_metadata
85
+
83
86
  sig { returns(T.nilable(Time)) }
84
87
  attr_accessor :last_change_at
85
88
 
@@ -102,18 +105,33 @@ module ContextDev
102
105
  sig { returns(T.nilable(Time)) }
103
106
  attr_accessor :last_run_at
104
107
 
105
- # When the next scheduled run is due.
108
+ # When the next scheduled run is due; null while paused.
106
109
  sig { returns(T.nilable(Time)) }
107
110
  attr_accessor :next_run_at
108
111
 
109
- # User-defined tags for grouping and filtering monitors and their changes.
110
- # Duplicates are removed.
112
+ # Run the monitor on a fixed interval defined by a frequency and a unit, e.g.
113
+ # every 6 hours or every 2 days. The total interval (frequency × unit) must be
114
+ # between 10 minutes and 1 year.
115
+ sig do
116
+ returns(T.nilable(ContextDev::Models::MonitorUpdateResponse::Schedule))
117
+ end
118
+ attr_reader :schedule
119
+
120
+ sig do
121
+ params(
122
+ schedule: ContextDev::Models::MonitorUpdateResponse::Schedule::OrHash
123
+ ).void
124
+ end
125
+ attr_writer :schedule
126
+
127
+ # Labels for filtering monitors, their changes, and their usage.
111
128
  sig { returns(T.nilable(T::Array[String])) }
112
129
  attr_reader :tags
113
130
 
114
131
  sig { params(tags: T::Array[String]).void }
115
132
  attr_writer :tags
116
133
 
134
+ # Webhook destination and delivery settings. Null means no webhook is configured.
117
135
  sig do
118
136
  returns(T.nilable(ContextDev::Models::MonitorUpdateResponse::Webhook))
119
137
  end
@@ -149,8 +167,6 @@ module ContextDev
149
167
  end
150
168
  attr_writer :webhook_failure
151
169
 
152
- # A web monitor. `mode` is the constant `web`; behavior is described by `target`
153
- # (page/sitemap/extract) and `change_detection` (exact/semantic).
154
170
  sig do
155
171
  params(
156
172
  id: String,
@@ -162,7 +178,7 @@ module ContextDev
162
178
  created_at: Time,
163
179
  mode: ContextDev::Models::MonitorUpdateResponse::Mode::OrSymbol,
164
180
  name: String,
165
- schedule: ContextDev::Models::MonitorUpdateResponse::Schedule::OrHash,
181
+ request_id: String,
166
182
  status: ContextDev::Models::MonitorUpdateResponse::Status::OrSymbol,
167
183
  target:
168
184
  T.any(
@@ -179,6 +195,8 @@ module ContextDev
179
195
  ContextDev::Models::MonitorUpdateResponse::Baseline::MonitorsExtractBaseline::OrHash
180
196
  )
181
197
  ),
198
+ key_metadata:
199
+ ContextDev::Models::MonitorUpdateResponse::KeyMetadata::OrHash,
182
200
  last_change_at: T.nilable(Time),
183
201
  last_error:
184
202
  T.nilable(
@@ -186,6 +204,7 @@ module ContextDev
186
204
  ),
187
205
  last_run_at: T.nilable(Time),
188
206
  next_run_at: T.nilable(Time),
207
+ schedule: ContextDev::Models::MonitorUpdateResponse::Schedule::OrHash,
189
208
  tags: T::Array[String],
190
209
  webhook:
191
210
  T.nilable(
@@ -199,40 +218,40 @@ module ContextDev
199
218
  end
200
219
  def self.new(
201
220
  id:,
202
- # Discriminated union describing how changes are detected.
221
+ # How changes are judged. Defaults to `semantic` for extract targets and page
222
+ # targets with `instructions`, otherwise `exact`.
203
223
  change_detection:,
204
224
  created_at:,
205
- # Top-level monitor category. Always `web` today; the concrete behavior is
206
- # described by `target` and `change_detection`.
225
+ # Always `web`. Optional.
207
226
  mode:,
208
227
  name:,
209
- # Run the monitor on a fixed interval defined by a frequency and a unit, e.g.
210
- # every 6 hours or every 2 days. The total interval (frequency × unit) must be
211
- # between 10 minutes and 1 year.
212
- schedule:,
213
- # Monitor lifecycle status. `failed` means the most recent run failed (see the
214
- # monitor's `last_error`); failed monitors keep running on schedule and flip back
215
- # to `active` on the next successful run. Monitors are auto-`paused` after
216
- # repeated consecutive failures or insufficient-credit skips; resume by PATCHing
217
- # status to `active`.
228
+ # Unique ID of this request, also in `X-Request-Id`. Include it when contacting
229
+ # support.
230
+ request_id:,
231
+ # Current state. Failed monitors keep running; paused monitors must be resumed
232
+ # with `status: "active"`.
218
233
  status:,
219
- # Discriminated union describing what the monitor watches.
234
+ # What to watch: a page, a sitemap, or data extracted from a site.
220
235
  target:,
221
236
  updated_at:,
222
- # Current baseline: the last observed value the monitor compares new snapshots
223
- # against. Its shape follows `target.type` (page/sitemap/extract). Only populated
224
- # on GET /monitors/{monitor_id}; null until the first baseline run completes (and
225
- # after a target or change_detection update, which resets the baseline).
237
+ # Comparison baseline, included on Retrieve. Null until capture completes or after
238
+ # target changes.
226
239
  baseline: nil,
240
+ # Credits this request used and your remaining balance.
241
+ key_metadata: nil,
227
242
  last_change_at: nil,
228
243
  # Error from the most recent failed run; null when the last run succeeded.
229
244
  last_error: nil,
230
245
  last_run_at: nil,
231
- # When the next scheduled run is due.
246
+ # When the next scheduled run is due; null while paused.
232
247
  next_run_at: nil,
233
- # User-defined tags for grouping and filtering monitors and their changes.
234
- # Duplicates are removed.
248
+ # Run the monitor on a fixed interval defined by a frequency and a unit, e.g.
249
+ # every 6 hours or every 2 days. The total interval (frequency × unit) must be
250
+ # between 10 minutes and 1 year.
251
+ schedule: nil,
252
+ # Labels for filtering monitors, their changes, and their usage.
235
253
  tags: nil,
254
+ # Webhook destination and delivery settings. Null means no webhook is configured.
236
255
  webhook: nil,
237
256
  # Present while webhook deliveries are failing consecutively; null when deliveries
238
257
  # are healthy or no webhook is configured. Cleared on the next successful delivery
@@ -250,7 +269,7 @@ module ContextDev
250
269
  created_at: Time,
251
270
  mode: ContextDev::Models::MonitorUpdateResponse::Mode::TaggedSymbol,
252
271
  name: String,
253
- schedule: ContextDev::Models::MonitorUpdateResponse::Schedule,
272
+ request_id: String,
254
273
  status:
255
274
  ContextDev::Models::MonitorUpdateResponse::Status::TaggedSymbol,
256
275
  target: ContextDev::Models::MonitorUpdateResponse::Target::Variants,
@@ -259,11 +278,14 @@ module ContextDev
259
278
  T.nilable(
260
279
  ContextDev::Models::MonitorUpdateResponse::Baseline::Variants
261
280
  ),
281
+ key_metadata:
282
+ ContextDev::Models::MonitorUpdateResponse::KeyMetadata,
262
283
  last_change_at: T.nilable(Time),
263
284
  last_error:
264
285
  T.nilable(ContextDev::Models::MonitorUpdateResponse::LastError),
265
286
  last_run_at: T.nilable(Time),
266
287
  next_run_at: T.nilable(Time),
288
+ schedule: ContextDev::Models::MonitorUpdateResponse::Schedule,
267
289
  tags: T::Array[String],
268
290
  webhook:
269
291
  T.nilable(ContextDev::Models::MonitorUpdateResponse::Webhook),
@@ -277,7 +299,8 @@ module ContextDev
277
299
  def to_hash
278
300
  end
279
301
 
280
- # Discriminated union describing how changes are detected.
302
+ # How changes are judged. Defaults to `semantic` for extract targets and page
303
+ # targets with `instructions`, otherwise `exact`.
281
304
  module ChangeDetection
282
305
  extend ContextDev::Internal::Type::Union
283
306
 
@@ -298,13 +321,17 @@ module ContextDev
298
321
  )
299
322
  end
300
323
 
324
+ # Use `exact` to compare visible text or sitemap URLs.
301
325
  sig { returns(Symbol) }
302
326
  attr_accessor :type
303
327
 
304
328
  # Detect exact changes. For page targets, this means visible text diffs. For
305
329
  # sitemap targets, this means URL additions and removals.
306
330
  sig { params(type: Symbol).returns(T.attached_class) }
307
- def self.new(type: :exact)
331
+ def self.new(
332
+ # Use `exact` to compare visible text or sitemap URLs.
333
+ type: :exact
334
+ )
308
335
  end
309
336
 
310
337
  sig { override.returns({ type: Symbol }) }
@@ -321,25 +348,30 @@ module ContextDev
321
348
  )
322
349
  end
323
350
 
351
+ # Use `semantic` to judge changes against the target instructions.
324
352
  sig { returns(Symbol) }
325
353
  attr_accessor :type
326
354
 
355
+ # Minimum confidence required to report a meaningful change, from 0 to 1.
327
356
  sig { returns(T.nilable(Float)) }
328
357
  attr_reader :confidence_threshold
329
358
 
330
359
  sig { params(confidence_threshold: Float).void }
331
360
  attr_writer :confidence_threshold
332
361
 
333
- # Detect meaning-level changes to page content, ignoring cosmetic or
334
- # instruction-irrelevant differences. Which changes are meaningful is judged
335
- # against the page or extract target's `instructions` (and an extract target's
336
- # `schema`, when provided).
362
+ # Detect meaningful content changes using the target’s instructions and optional
363
+ # schema.
337
364
  sig do
338
365
  params(confidence_threshold: Float, type: Symbol).returns(
339
366
  T.attached_class
340
367
  )
341
368
  end
342
- def self.new(confidence_threshold: nil, type: :semantic)
369
+ def self.new(
370
+ # Minimum confidence required to report a meaningful change, from 0 to 1.
371
+ confidence_threshold: nil,
372
+ # Use `semantic` to judge changes against the target instructions.
373
+ type: :semantic
374
+ )
343
375
  end
344
376
 
345
377
  sig do
@@ -360,8 +392,7 @@ module ContextDev
360
392
  end
361
393
  end
362
394
 
363
- # Top-level monitor category. Always `web` today; the concrete behavior is
364
- # described by `target` and `change_detection`.
395
+ # Always `web`. Optional.
365
396
  module Mode
366
397
  extend ContextDev::Internal::Type::Enum
367
398
 
@@ -388,145 +419,8 @@ module ContextDev
388
419
  end
389
420
  end
390
421
 
391
- class Schedule < ContextDev::Internal::Type::BaseModel
392
- OrHash =
393
- T.type_alias do
394
- T.any(
395
- ContextDev::Models::MonitorUpdateResponse::Schedule,
396
- ContextDev::Internal::AnyHash
397
- )
398
- end
399
-
400
- # Number of units between runs. The resulting interval (frequency × unit) must be
401
- # at least 10 minutes and at most 1 year (e.g. minimum 10 when unit is minutes;
402
- # maximum 365 when unit is days).
403
- sig { returns(Integer) }
404
- attr_accessor :frequency
405
-
406
- sig do
407
- returns(
408
- ContextDev::Models::MonitorUpdateResponse::Schedule::Type::TaggedSymbol
409
- )
410
- end
411
- attr_accessor :type
412
-
413
- sig do
414
- returns(
415
- ContextDev::Models::MonitorUpdateResponse::Schedule::Unit::TaggedSymbol
416
- )
417
- end
418
- attr_accessor :unit
419
-
420
- # Run the monitor on a fixed interval defined by a frequency and a unit, e.g.
421
- # every 6 hours or every 2 days. The total interval (frequency × unit) must be
422
- # between 10 minutes and 1 year.
423
- sig do
424
- params(
425
- frequency: Integer,
426
- type:
427
- ContextDev::Models::MonitorUpdateResponse::Schedule::Type::OrSymbol,
428
- unit:
429
- ContextDev::Models::MonitorUpdateResponse::Schedule::Unit::OrSymbol
430
- ).returns(T.attached_class)
431
- end
432
- def self.new(
433
- # Number of units between runs. The resulting interval (frequency × unit) must be
434
- # at least 10 minutes and at most 1 year (e.g. minimum 10 when unit is minutes;
435
- # maximum 365 when unit is days).
436
- frequency:,
437
- type:,
438
- unit:
439
- )
440
- end
441
-
442
- sig do
443
- override.returns(
444
- {
445
- frequency: Integer,
446
- type:
447
- ContextDev::Models::MonitorUpdateResponse::Schedule::Type::TaggedSymbol,
448
- unit:
449
- ContextDev::Models::MonitorUpdateResponse::Schedule::Unit::TaggedSymbol
450
- }
451
- )
452
- end
453
- def to_hash
454
- end
455
-
456
- module Type
457
- extend ContextDev::Internal::Type::Enum
458
-
459
- TaggedSymbol =
460
- T.type_alias do
461
- T.all(
462
- Symbol,
463
- ContextDev::Models::MonitorUpdateResponse::Schedule::Type
464
- )
465
- end
466
- OrSymbol = T.type_alias { T.any(Symbol, String) }
467
-
468
- INTERVAL =
469
- T.let(
470
- :interval,
471
- ContextDev::Models::MonitorUpdateResponse::Schedule::Type::TaggedSymbol
472
- )
473
-
474
- sig do
475
- override.returns(
476
- T::Array[
477
- ContextDev::Models::MonitorUpdateResponse::Schedule::Type::TaggedSymbol
478
- ]
479
- )
480
- end
481
- def self.values
482
- end
483
- end
484
-
485
- module Unit
486
- extend ContextDev::Internal::Type::Enum
487
-
488
- TaggedSymbol =
489
- T.type_alias do
490
- T.all(
491
- Symbol,
492
- ContextDev::Models::MonitorUpdateResponse::Schedule::Unit
493
- )
494
- end
495
- OrSymbol = T.type_alias { T.any(Symbol, String) }
496
-
497
- MINUTES =
498
- T.let(
499
- :minutes,
500
- ContextDev::Models::MonitorUpdateResponse::Schedule::Unit::TaggedSymbol
501
- )
502
- HOURS =
503
- T.let(
504
- :hours,
505
- ContextDev::Models::MonitorUpdateResponse::Schedule::Unit::TaggedSymbol
506
- )
507
- DAYS =
508
- T.let(
509
- :days,
510
- ContextDev::Models::MonitorUpdateResponse::Schedule::Unit::TaggedSymbol
511
- )
512
-
513
- sig do
514
- override.returns(
515
- T::Array[
516
- ContextDev::Models::MonitorUpdateResponse::Schedule::Unit::TaggedSymbol
517
- ]
518
- )
519
- end
520
- def self.values
521
- end
522
- end
523
- end
524
-
525
- # Monitor lifecycle status. `failed` means the most recent run failed (see the
526
- # monitor's `last_error`); failed monitors keep running on schedule and flip back
527
- # to `active` on the next successful run. Monitors are auto-`paused` after
528
- # repeated consecutive failures or insufficient-credit skips; resume by PATCHing
529
- # status to `active`.
422
+ # Current state. Failed monitors keep running; paused monitors must be resumed
423
+ # with `status: "active"`.
530
424
  module Status
531
425
  extend ContextDev::Internal::Type::Enum
532
426
 
@@ -563,7 +457,7 @@ module ContextDev
563
457
  end
564
458
  end
565
459
 
566
- # Discriminated union describing what the monitor watches.
460
+ # What to watch: a page, a sitemap, or data extracted from a site.
567
461
  module Target
568
462
  extend ContextDev::Internal::Type::Union
569
463
 
@@ -585,27 +479,37 @@ module ContextDev
585
479
  )
586
480
  end
587
481
 
482
+ # Use `page` to watch one web page.
588
483
  sig { returns(Symbol) }
589
484
  attr_accessor :type
590
485
 
486
+ # Public HTTP(S) page URL to monitor.
591
487
  sig { returns(String) }
592
488
  attr_accessor :url
593
489
 
594
- # CSS selectors for HTML regions to remove before text extraction. Applied after
595
- # include_selectors; exclusion takes precedence when an element matches both. Omit
596
- # or pass an empty array to apply no explicit exclusions. Changing these selectors
597
- # creates a new baseline.
490
+ # Optional browser actions executed in array order after the page loads, before
491
+ # content is captured, on every run. Requires a paid plan. Maximum: 5 actions.
492
+ # Changes create a new baseline.
493
+ sig do
494
+ returns(
495
+ T.nilable(
496
+ T::Array[
497
+ ContextDev::Models::MonitorUpdateResponse::Target::Page::Action::Variants
498
+ ]
499
+ )
500
+ )
501
+ end
502
+ attr_accessor :actions
503
+
504
+ # Remove matching regions after inclusions. Changes create a new baseline.
598
505
  sig { returns(T.nilable(T::Array[String])) }
599
506
  attr_reader :exclude_selectors
600
507
 
601
508
  sig { params(exclude_selectors: T::Array[String]).void }
602
509
  attr_writer :exclude_selectors
603
510
 
604
- # CSS selectors defining the HTML regions to monitor. Matching subtrees are
605
- # combined in document order before text extraction, instead of automatic
606
- # main-content selection. Omit or pass an empty array to use automatic
607
- # main-content extraction. If the filtered page has no usable text, the run fails
608
- # without replacing the baseline. Changing these selectors creates a new baseline.
511
+ # Monitor these CSS-selected regions. Empty or omitted uses main content. Changes
512
+ # create a new baseline.
609
513
  sig { returns(T.nilable(T::Array[String])) }
610
514
  attr_reader :include_selectors
611
515
 
@@ -632,6 +536,16 @@ module ContextDev
632
536
  sig do
633
537
  params(
634
538
  url: String,
539
+ actions:
540
+ T.nilable(
541
+ T::Array[
542
+ T.any(
543
+ ContextDev::Models::MonitorUpdateResponse::Target::Page::Action::Wait::OrHash,
544
+ ContextDev::Models::MonitorUpdateResponse::Target::Page::Action::Perform::OrHash,
545
+ ContextDev::Models::MonitorUpdateResponse::Target::Page::Action::Scroll::OrHash
546
+ )
547
+ ]
548
+ ),
635
549
  exclude_selectors: T::Array[String],
636
550
  include_selectors: T::Array[String],
637
551
  instructions: String,
@@ -640,23 +554,23 @@ module ContextDev
640
554
  ).returns(T.attached_class)
641
555
  end
642
556
  def self.new(
557
+ # Public HTTP(S) page URL to monitor.
643
558
  url:,
644
- # CSS selectors for HTML regions to remove before text extraction. Applied after
645
- # include_selectors; exclusion takes precedence when an element matches both. Omit
646
- # or pass an empty array to apply no explicit exclusions. Changing these selectors
647
- # creates a new baseline.
559
+ # Optional browser actions executed in array order after the page loads, before
560
+ # content is captured, on every run. Requires a paid plan. Maximum: 5 actions.
561
+ # Changes create a new baseline.
562
+ actions: nil,
563
+ # Remove matching regions after inclusions. Changes create a new baseline.
648
564
  exclude_selectors: nil,
649
- # CSS selectors defining the HTML regions to monitor. Matching subtrees are
650
- # combined in document order before text extraction, instead of automatic
651
- # main-content selection. Omit or pass an empty array to use automatic
652
- # main-content extraction. If the filtered page has no usable text, the run fails
653
- # without replacing the baseline. Changing these selectors creates a new baseline.
565
+ # Monitor these CSS-selected regions. Empty or omitted uses main content. Changes
566
+ # create a new baseline.
654
567
  include_selectors: nil,
655
568
  # Plain-language goal describing which page changes matter. When provided without
656
569
  # change_detection, semantic detection is inferred.
657
570
  instructions: nil,
658
571
  # Normalize whitespace before comparing or analyzing text.
659
572
  normalize_whitespace: nil,
573
+ # Use `page` to watch one web page.
660
574
  type: :page
661
575
  )
662
576
  end
@@ -666,6 +580,12 @@ module ContextDev
666
580
  {
667
581
  type: Symbol,
668
582
  url: String,
583
+ actions:
584
+ T.nilable(
585
+ T::Array[
586
+ ContextDev::Models::MonitorUpdateResponse::Target::Page::Action::Variants
587
+ ]
588
+ ),
669
589
  exclude_selectors: T::Array[String],
670
590
  include_selectors: T::Array[String],
671
591
  instructions: String,
@@ -675,6 +595,305 @@ module ContextDev
675
595
  end
676
596
  def to_hash
677
597
  end
598
+
599
+ # Browser action discriminated by `do`. Each variant exposes only its applicable
600
+ # fields.
601
+ module Action
602
+ extend ContextDev::Internal::Type::Union
603
+
604
+ Variants =
605
+ T.type_alias do
606
+ T.any(
607
+ ContextDev::Models::MonitorUpdateResponse::Target::Page::Action::Wait,
608
+ ContextDev::Models::MonitorUpdateResponse::Target::Page::Action::Perform,
609
+ ContextDev::Models::MonitorUpdateResponse::Target::Page::Action::Scroll
610
+ )
611
+ end
612
+
613
+ class Wait < ContextDev::Internal::Type::BaseModel
614
+ OrHash =
615
+ T.type_alias do
616
+ T.any(
617
+ ContextDev::Models::MonitorUpdateResponse::Target::Page::Action::Wait,
618
+ ContextDev::Internal::AnyHash
619
+ )
620
+ end
621
+
622
+ # Use `wait` to pause for a fixed duration.
623
+ sig { returns(Symbol) }
624
+ attr_accessor :do_
625
+
626
+ # Time to pause in milliseconds before the next action.
627
+ sig { returns(Integer) }
628
+ attr_accessor :time_ms
629
+
630
+ # Pause for a fixed number of milliseconds before continuing to the next action.
631
+ sig do
632
+ params(time_ms: Integer, do_: Symbol).returns(T.attached_class)
633
+ end
634
+ def self.new(
635
+ # Time to pause in milliseconds before the next action.
636
+ time_ms:,
637
+ # Use `wait` to pause for a fixed duration.
638
+ do_: :wait
639
+ )
640
+ end
641
+
642
+ sig { override.returns({ do_: Symbol, time_ms: Integer }) }
643
+ def to_hash
644
+ end
645
+ end
646
+
647
+ class Perform < ContextDev::Internal::Type::BaseModel
648
+ OrHash =
649
+ T.type_alias do
650
+ T.any(
651
+ ContextDev::Models::MonitorUpdateResponse::Target::Page::Action::Perform,
652
+ ContextDev::Internal::AnyHash
653
+ )
654
+ end
655
+
656
+ # One browser instruction, such as clicking a button or entering text.
657
+ sig { returns(String) }
658
+ attr_accessor :action
659
+
660
+ # Use `perform` for a plain-language browser instruction.
661
+ sig { returns(Symbol) }
662
+ attr_accessor :do_
663
+
664
+ # Resolve and perform one natural-language browser action.
665
+ sig do
666
+ params(action: String, do_: Symbol).returns(T.attached_class)
667
+ end
668
+ def self.new(
669
+ # One browser instruction, such as clicking a button or entering text.
670
+ action:,
671
+ # Use `perform` for a plain-language browser instruction.
672
+ do_: :perform
673
+ )
674
+ end
675
+
676
+ sig { override.returns({ action: String, do_: Symbol }) }
677
+ def to_hash
678
+ end
679
+ end
680
+
681
+ class Scroll < ContextDev::Internal::Type::BaseModel
682
+ OrHash =
683
+ T.type_alias do
684
+ T.any(
685
+ ContextDev::Models::MonitorUpdateResponse::Target::Page::Action::Scroll,
686
+ ContextDev::Internal::AnyHash
687
+ )
688
+ end
689
+
690
+ # Use `scroll` to move through the page or a container.
691
+ sig { returns(Symbol) }
692
+ attr_accessor :do_
693
+
694
+ # Pixels per scroll, one visible viewport, or the current scroll boundary.
695
+ # Defaults to viewport.
696
+ sig do
697
+ returns(
698
+ T.nilable(
699
+ ContextDev::Models::MonitorUpdateResponse::Target::Page::Action::Scroll::Amount::Variants
700
+ )
701
+ )
702
+ end
703
+ attr_reader :amount
704
+
705
+ sig do
706
+ params(
707
+ amount:
708
+ T.any(
709
+ Integer,
710
+ ContextDev::Models::MonitorUpdateResponse::Target::Page::Action::Scroll::Amount::OrSymbol
711
+ )
712
+ ).void
713
+ end
714
+ attr_writer :amount
715
+
716
+ # CSS selector for the first matching scroll container. Defaults to the page.
717
+ sig { returns(T.nilable(String)) }
718
+ attr_reader :container
719
+
720
+ sig { params(container: String).void }
721
+ attr_writer :container
722
+
723
+ # Direction to scroll. Defaults to down.
724
+ sig do
725
+ returns(
726
+ T.nilable(
727
+ ContextDev::Models::MonitorUpdateResponse::Target::Page::Action::Scroll::Direction::TaggedSymbol
728
+ )
729
+ )
730
+ end
731
+ attr_reader :direction
732
+
733
+ sig do
734
+ params(
735
+ direction:
736
+ ContextDev::Models::MonitorUpdateResponse::Target::Page::Action::Scroll::Direction::OrSymbol
737
+ ).void
738
+ end
739
+ attr_writer :direction
740
+
741
+ # Maximum scroll iterations. Stops early when scrolling and scrollable extent stop
742
+ # changing. Defaults to 1.
743
+ sig { returns(T.nilable(Integer)) }
744
+ attr_reader :max_scrolls
745
+
746
+ sig { params(max_scrolls: Integer).void }
747
+ attr_writer :max_scrolls
748
+
749
+ # Scroll the page or a selected scrollable container, waiting adaptively for
750
+ # content and dimensions to settle after each iteration.
751
+ sig do
752
+ params(
753
+ amount:
754
+ T.any(
755
+ Integer,
756
+ ContextDev::Models::MonitorUpdateResponse::Target::Page::Action::Scroll::Amount::OrSymbol
757
+ ),
758
+ container: String,
759
+ direction:
760
+ ContextDev::Models::MonitorUpdateResponse::Target::Page::Action::Scroll::Direction::OrSymbol,
761
+ max_scrolls: Integer,
762
+ do_: Symbol
763
+ ).returns(T.attached_class)
764
+ end
765
+ def self.new(
766
+ # Pixels per scroll, one visible viewport, or the current scroll boundary.
767
+ # Defaults to viewport.
768
+ amount: nil,
769
+ # CSS selector for the first matching scroll container. Defaults to the page.
770
+ container: nil,
771
+ # Direction to scroll. Defaults to down.
772
+ direction: nil,
773
+ # Maximum scroll iterations. Stops early when scrolling and scrollable extent stop
774
+ # changing. Defaults to 1.
775
+ max_scrolls: nil,
776
+ # Use `scroll` to move through the page or a container.
777
+ do_: :scroll
778
+ )
779
+ end
780
+
781
+ sig do
782
+ override.returns(
783
+ {
784
+ do_: Symbol,
785
+ amount:
786
+ ContextDev::Models::MonitorUpdateResponse::Target::Page::Action::Scroll::Amount::Variants,
787
+ container: String,
788
+ direction:
789
+ ContextDev::Models::MonitorUpdateResponse::Target::Page::Action::Scroll::Direction::TaggedSymbol,
790
+ max_scrolls: Integer
791
+ }
792
+ )
793
+ end
794
+ def to_hash
795
+ end
796
+
797
+ # Pixels per scroll, one visible viewport, or the current scroll boundary.
798
+ # Defaults to viewport.
799
+ module Amount
800
+ extend ContextDev::Internal::Type::Union
801
+
802
+ Variants =
803
+ T.type_alias do
804
+ T.any(
805
+ Integer,
806
+ ContextDev::Models::MonitorUpdateResponse::Target::Page::Action::Scroll::Amount::TaggedSymbol
807
+ )
808
+ end
809
+
810
+ sig do
811
+ override.returns(
812
+ T::Array[
813
+ ContextDev::Models::MonitorUpdateResponse::Target::Page::Action::Scroll::Amount::Variants
814
+ ]
815
+ )
816
+ end
817
+ def self.variants
818
+ end
819
+
820
+ TaggedSymbol =
821
+ T.type_alias do
822
+ T.all(
823
+ Symbol,
824
+ ContextDev::Models::MonitorUpdateResponse::Target::Page::Action::Scroll::Amount
825
+ )
826
+ end
827
+ OrSymbol = T.type_alias { T.any(Symbol, String) }
828
+
829
+ VIEWPORT =
830
+ T.let(
831
+ :viewport,
832
+ ContextDev::Models::MonitorUpdateResponse::Target::Page::Action::Scroll::Amount::TaggedSymbol
833
+ )
834
+ MAX =
835
+ T.let(
836
+ :max,
837
+ ContextDev::Models::MonitorUpdateResponse::Target::Page::Action::Scroll::Amount::TaggedSymbol
838
+ )
839
+ end
840
+
841
+ # Direction to scroll. Defaults to down.
842
+ module Direction
843
+ extend ContextDev::Internal::Type::Enum
844
+
845
+ TaggedSymbol =
846
+ T.type_alias do
847
+ T.all(
848
+ Symbol,
849
+ ContextDev::Models::MonitorUpdateResponse::Target::Page::Action::Scroll::Direction
850
+ )
851
+ end
852
+ OrSymbol = T.type_alias { T.any(Symbol, String) }
853
+
854
+ UP =
855
+ T.let(
856
+ :up,
857
+ ContextDev::Models::MonitorUpdateResponse::Target::Page::Action::Scroll::Direction::TaggedSymbol
858
+ )
859
+ DOWN =
860
+ T.let(
861
+ :down,
862
+ ContextDev::Models::MonitorUpdateResponse::Target::Page::Action::Scroll::Direction::TaggedSymbol
863
+ )
864
+ LEFT =
865
+ T.let(
866
+ :left,
867
+ ContextDev::Models::MonitorUpdateResponse::Target::Page::Action::Scroll::Direction::TaggedSymbol
868
+ )
869
+ RIGHT =
870
+ T.let(
871
+ :right,
872
+ ContextDev::Models::MonitorUpdateResponse::Target::Page::Action::Scroll::Direction::TaggedSymbol
873
+ )
874
+
875
+ sig do
876
+ override.returns(
877
+ T::Array[
878
+ ContextDev::Models::MonitorUpdateResponse::Target::Page::Action::Scroll::Direction::TaggedSymbol
879
+ ]
880
+ )
881
+ end
882
+ def self.values
883
+ end
884
+ end
885
+ end
886
+
887
+ sig do
888
+ override.returns(
889
+ T::Array[
890
+ ContextDev::Models::MonitorUpdateResponse::Target::Page::Action::Variants
891
+ ]
892
+ )
893
+ end
894
+ def self.variants
895
+ end
896
+ end
678
897
  end
679
898
 
680
899
  class Sitemap < ContextDev::Internal::Type::BaseModel
@@ -686,6 +905,7 @@ module ContextDev
686
905
  )
687
906
  end
688
907
 
908
+ # Use `sitemap` to watch a site for added or removed URLs.
689
909
  sig { returns(Symbol) }
690
910
  attr_accessor :type
691
911
 
@@ -714,11 +934,7 @@ module ContextDev
714
934
  sig { params(max_urls: Integer).void }
715
935
  attr_writer :max_urls
716
936
 
717
- # Watch a sitemap for URL additions and removals. Crawled URLs are normalized
718
- # (lowercased host, no trailing slash/fragment) and scoped to the monitored site
719
- # and its subdomains before comparison. On a detected difference the sitemap is
720
- # re-fetched within the same run and only URLs both observations agree on are
721
- # reported, suppressing transient crawl flaps.
937
+ # Watch a site’s URL inventory for confirmed additions and removals.
722
938
  sig do
723
939
  params(
724
940
  url: String,
@@ -737,6 +953,7 @@ module ContextDev
737
953
  include: nil,
738
954
  # Maximum number of sitemap URLs to track (capped at 10,000).
739
955
  max_urls: nil,
956
+ # Use `sitemap` to watch a site for added or removed URLs.
740
957
  type: :sitemap
741
958
  )
742
959
  end
@@ -770,6 +987,7 @@ module ContextDev
770
987
  sig { returns(String) }
771
988
  attr_accessor :instructions
772
989
 
990
+ # Use `extract` to watch structured data across selected pages.
773
991
  sig { returns(Symbol) }
774
992
  attr_accessor :type
775
993
 
@@ -777,6 +995,7 @@ module ContextDev
777
995
  sig { returns(String) }
778
996
  attr_accessor :url
779
997
 
998
+ # Allow page discovery on subdomains of the target site.
780
999
  sig { returns(T.nilable(T::Boolean)) }
781
1000
  attr_reader :follow_subdomains
782
1001
 
@@ -797,25 +1016,16 @@ module ContextDev
797
1016
  sig { params(max_pages: Integer).void }
798
1017
  attr_writer :max_pages
799
1018
 
800
- # JSON Schema describing the data you care about. It is used three ways: it guides
801
- # which pages are selected for tracking, it gives the change judge extra context
802
- # on which changes matter (alongside `instructions`), and it defines the shape of
803
- # the baseline `data` snapshot on GET /monitors/{monitor_id} (refreshed at most
804
- # about once a day). It is not a response format for changes: change events and
805
- # webhook payloads always contain diffs, summaries, and evidence excerpts — never
806
- # data in this schema's shape. If omitted, a default summary + key-points schema
807
- # is used.
1019
+ # JSON Schema for page selection and the baseline snapshot. Changes return diffs
1020
+ # and evidence.
808
1021
  sig { returns(T.nilable(T::Hash[Symbol, T.anything])) }
809
1022
  attr_reader :schema
810
1023
 
811
1024
  sig { params(schema: T::Hash[Symbol, T.anything]).void }
812
1025
  attr_writer :schema
813
1026
 
814
- # Watch the monitor-relevant pages of a site for meaningful changes. A crawl
815
- # guided by `schema`/`instructions` selects up to `max_pages` relevant pages to
816
- # track; each run re-checks exactly those pages, and confirmed content changes are
817
- # judged for relevance against the monitor's `instructions` (and `schema`, when
818
- # provided). The tracked page set is refreshed by a periodic re-discovery crawl.
1027
+ # Track relevant pages selected by `schema` and `instructions`; refresh the page
1028
+ # set periodically.
819
1029
  sig do
820
1030
  params(
821
1031
  instructions: String,
@@ -833,20 +1043,16 @@ module ContextDev
833
1043
  instructions:,
834
1044
  # Root URL to extract structured data from.
835
1045
  url:,
1046
+ # Allow page discovery on subdomains of the target site.
836
1047
  follow_subdomains: nil,
837
1048
  # Optional maximum link depth from the starting URL (0 = only the starting page).
838
1049
  max_depth: nil,
839
1050
  # Maximum number of pages to track.
840
1051
  max_pages: nil,
841
- # JSON Schema describing the data you care about. It is used three ways: it guides
842
- # which pages are selected for tracking, it gives the change judge extra context
843
- # on which changes matter (alongside `instructions`), and it defines the shape of
844
- # the baseline `data` snapshot on GET /monitors/{monitor_id} (refreshed at most
845
- # about once a day). It is not a response format for changes: change events and
846
- # webhook payloads always contain diffs, summaries, and evidence excerpts — never
847
- # data in this schema's shape. If omitted, a default summary + key-points schema
848
- # is used.
1052
+ # JSON Schema for page selection and the baseline snapshot. Changes return diffs
1053
+ # and evidence.
849
1054
  schema: nil,
1055
+ # Use `extract` to watch structured data across selected pages.
850
1056
  type: :extract
851
1057
  )
852
1058
  end
@@ -879,10 +1085,8 @@ module ContextDev
879
1085
  end
880
1086
  end
881
1087
 
882
- # Current baseline: the last observed value the monitor compares new snapshots
883
- # against. Its shape follows `target.type` (page/sitemap/extract). Only populated
884
- # on GET /monitors/{monitor_id}; null until the first baseline run completes (and
885
- # after a target or change_detection update, which resets the baseline).
1088
+ # Comparison baseline, included on Retrieve. Null until capture completes or after
1089
+ # target changes.
886
1090
  module Baseline
887
1091
  extend ContextDev::Internal::Type::Union
888
1092
 
@@ -991,10 +1195,8 @@ module ContextDev
991
1195
  sig { returns(Time) }
992
1196
  attr_accessor :captured_at
993
1197
 
994
- # The extracted structured data, matching the monitor's extraction schema (same
995
- # shape as the /web/extract endpoint's `data`). Refreshed when the monitor
996
- # re-discovers its page set (at most about once a day); `null` when no extraction
997
- # has been captured yet.
1198
+ # Latest structured snapshot matching the extraction schema, refreshed at most
1199
+ # daily; `null` before capture.
998
1200
  sig { returns(T.anything) }
999
1201
  attr_accessor :data
1000
1202
 
@@ -1014,10 +1216,8 @@ module ContextDev
1014
1216
  def self.new(
1015
1217
  # When this baseline was last captured or replaced.
1016
1218
  captured_at:,
1017
- # The extracted structured data, matching the monitor's extraction schema (same
1018
- # shape as the /web/extract endpoint's `data`). Refreshed when the monitor
1019
- # re-discovers its page set (at most about once a day); `null` when no extraction
1020
- # has been captured yet.
1219
+ # Latest structured snapshot matching the extraction schema, refreshed at most
1220
+ # daily; `null` before capture.
1021
1221
  data:,
1022
1222
  # The page URLs the monitor tracks and analyzes for changes.
1023
1223
  urls_analyzed:
@@ -1048,6 +1248,46 @@ module ContextDev
1048
1248
  end
1049
1249
  end
1050
1250
 
1251
+ class KeyMetadata < ContextDev::Internal::Type::BaseModel
1252
+ OrHash =
1253
+ T.type_alias do
1254
+ T.any(
1255
+ ContextDev::Models::MonitorUpdateResponse::KeyMetadata,
1256
+ ContextDev::Internal::AnyHash
1257
+ )
1258
+ end
1259
+
1260
+ # Credits charged for this request.
1261
+ sig { returns(Integer) }
1262
+ attr_accessor :credits_consumed
1263
+
1264
+ # Credits remaining for your organization.
1265
+ sig { returns(Integer) }
1266
+ attr_accessor :credits_remaining
1267
+
1268
+ # Credits this request used and your remaining balance.
1269
+ sig do
1270
+ params(credits_consumed: Integer, credits_remaining: Integer).returns(
1271
+ T.attached_class
1272
+ )
1273
+ end
1274
+ def self.new(
1275
+ # Credits charged for this request.
1276
+ credits_consumed:,
1277
+ # Credits remaining for your organization.
1278
+ credits_remaining:
1279
+ )
1280
+ end
1281
+
1282
+ sig do
1283
+ override.returns(
1284
+ { credits_consumed: Integer, credits_remaining: Integer }
1285
+ )
1286
+ end
1287
+ def to_hash
1288
+ end
1289
+ end
1290
+
1051
1291
  class LastError < ContextDev::Internal::Type::BaseModel
1052
1292
  OrHash =
1053
1293
  T.type_alias do
@@ -1073,6 +1313,146 @@ module ContextDev
1073
1313
  end
1074
1314
  end
1075
1315
 
1316
+ class Schedule < ContextDev::Internal::Type::BaseModel
1317
+ OrHash =
1318
+ T.type_alias do
1319
+ T.any(
1320
+ ContextDev::Models::MonitorUpdateResponse::Schedule,
1321
+ ContextDev::Internal::AnyHash
1322
+ )
1323
+ end
1324
+
1325
+ # Number of units between runs. The resulting interval (frequency × unit) must be
1326
+ # at least 10 minutes and at most 1 year (e.g. minimum 10 when unit is minutes;
1327
+ # maximum 365 when unit is days).
1328
+ sig { returns(Integer) }
1329
+ attr_accessor :frequency
1330
+
1331
+ # Use `interval` to run on a repeating schedule.
1332
+ sig do
1333
+ returns(
1334
+ ContextDev::Models::MonitorUpdateResponse::Schedule::Type::TaggedSymbol
1335
+ )
1336
+ end
1337
+ attr_accessor :type
1338
+
1339
+ # Time unit used with `frequency` to set the run interval.
1340
+ sig do
1341
+ returns(
1342
+ ContextDev::Models::MonitorUpdateResponse::Schedule::Unit::TaggedSymbol
1343
+ )
1344
+ end
1345
+ attr_accessor :unit
1346
+
1347
+ # Run the monitor on a fixed interval defined by a frequency and a unit, e.g.
1348
+ # every 6 hours or every 2 days. The total interval (frequency × unit) must be
1349
+ # between 10 minutes and 1 year.
1350
+ sig do
1351
+ params(
1352
+ frequency: Integer,
1353
+ type:
1354
+ ContextDev::Models::MonitorUpdateResponse::Schedule::Type::OrSymbol,
1355
+ unit:
1356
+ ContextDev::Models::MonitorUpdateResponse::Schedule::Unit::OrSymbol
1357
+ ).returns(T.attached_class)
1358
+ end
1359
+ def self.new(
1360
+ # Number of units between runs. The resulting interval (frequency × unit) must be
1361
+ # at least 10 minutes and at most 1 year (e.g. minimum 10 when unit is minutes;
1362
+ # maximum 365 when unit is days).
1363
+ frequency:,
1364
+ # Use `interval` to run on a repeating schedule.
1365
+ type:,
1366
+ # Time unit used with `frequency` to set the run interval.
1367
+ unit:
1368
+ )
1369
+ end
1370
+
1371
+ sig do
1372
+ override.returns(
1373
+ {
1374
+ frequency: Integer,
1375
+ type:
1376
+ ContextDev::Models::MonitorUpdateResponse::Schedule::Type::TaggedSymbol,
1377
+ unit:
1378
+ ContextDev::Models::MonitorUpdateResponse::Schedule::Unit::TaggedSymbol
1379
+ }
1380
+ )
1381
+ end
1382
+ def to_hash
1383
+ end
1384
+
1385
+ # Use `interval` to run on a repeating schedule.
1386
+ module Type
1387
+ extend ContextDev::Internal::Type::Enum
1388
+
1389
+ TaggedSymbol =
1390
+ T.type_alias do
1391
+ T.all(
1392
+ Symbol,
1393
+ ContextDev::Models::MonitorUpdateResponse::Schedule::Type
1394
+ )
1395
+ end
1396
+ OrSymbol = T.type_alias { T.any(Symbol, String) }
1397
+
1398
+ INTERVAL =
1399
+ T.let(
1400
+ :interval,
1401
+ ContextDev::Models::MonitorUpdateResponse::Schedule::Type::TaggedSymbol
1402
+ )
1403
+
1404
+ sig do
1405
+ override.returns(
1406
+ T::Array[
1407
+ ContextDev::Models::MonitorUpdateResponse::Schedule::Type::TaggedSymbol
1408
+ ]
1409
+ )
1410
+ end
1411
+ def self.values
1412
+ end
1413
+ end
1414
+
1415
+ # Time unit used with `frequency` to set the run interval.
1416
+ module Unit
1417
+ extend ContextDev::Internal::Type::Enum
1418
+
1419
+ TaggedSymbol =
1420
+ T.type_alias do
1421
+ T.all(
1422
+ Symbol,
1423
+ ContextDev::Models::MonitorUpdateResponse::Schedule::Unit
1424
+ )
1425
+ end
1426
+ OrSymbol = T.type_alias { T.any(Symbol, String) }
1427
+
1428
+ MINUTES =
1429
+ T.let(
1430
+ :minutes,
1431
+ ContextDev::Models::MonitorUpdateResponse::Schedule::Unit::TaggedSymbol
1432
+ )
1433
+ HOURS =
1434
+ T.let(
1435
+ :hours,
1436
+ ContextDev::Models::MonitorUpdateResponse::Schedule::Unit::TaggedSymbol
1437
+ )
1438
+ DAYS =
1439
+ T.let(
1440
+ :days,
1441
+ ContextDev::Models::MonitorUpdateResponse::Schedule::Unit::TaggedSymbol
1442
+ )
1443
+
1444
+ sig do
1445
+ override.returns(
1446
+ T::Array[
1447
+ ContextDev::Models::MonitorUpdateResponse::Schedule::Unit::TaggedSymbol
1448
+ ]
1449
+ )
1450
+ end
1451
+ def self.values
1452
+ end
1453
+ end
1454
+ end
1455
+
1076
1456
  class Webhook < ContextDev::Internal::Type::BaseModel
1077
1457
  OrHash =
1078
1458
  T.type_alias do
@@ -1082,15 +1462,13 @@ module ContextDev
1082
1462
  )
1083
1463
  end
1084
1464
 
1085
- # Webhook URL events are delivered to. Slack incoming webhook URLs are
1086
- # automatically formatted as Slack messages.
1465
+ # Public HTTP(S) URL that receives events. Slack and GovSlack URLs get formatted
1466
+ # messages.
1087
1467
  sig { returns(String) }
1088
1468
  attr_accessor :url
1089
1469
 
1090
- # Events delivered to this endpoint. `change.detected` fires only when a run
1091
- # detects a change; `run.completed` fires on every completed run — including runs
1092
- # that detected no change — and embeds the change when one was detected. Defaults
1093
- # to `["change.detected"]` when omitted.
1470
+ # Events to deliver. Defaults to `change.detected`; `run.completed` also includes
1471
+ # unchanged runs.
1094
1472
  sig do
1095
1473
  returns(
1096
1474
  T.nilable(
@@ -1119,18 +1497,15 @@ module ContextDev
1119
1497
  sig { params(retry_: ContextDev::RetryConfig::OrHash).void }
1120
1498
  attr_writer :retry_
1121
1499
 
1122
- # Signing secret used to verify webhook authenticity. Omitted unless the API key
1123
- # has monitors:write permission or full access. Each delivery includes an
1124
- # `X-Context-Signature: t=<unix>,v1=<hmac>` header, where the HMAC is SHA-256 over
1125
- # `"{t}.{rawRequestBody}"` keyed by this secret. Recompute it with a constant-time
1126
- # compare and reject stale timestamps to prevent replay. Generated by the API;
1127
- # cannot be set by clients.
1500
+ # API-generated signing secret. Visible only with full access or `monitors:write`
1501
+ # permission.
1128
1502
  sig { returns(T.nilable(String)) }
1129
1503
  attr_reader :secret
1130
1504
 
1131
1505
  sig { params(secret: String).void }
1132
1506
  attr_writer :secret
1133
1507
 
1508
+ # Webhook destination and delivery settings. Null means no webhook is configured.
1134
1509
  sig do
1135
1510
  params(
1136
1511
  url: String,
@@ -1143,22 +1518,16 @@ module ContextDev
1143
1518
  ).returns(T.attached_class)
1144
1519
  end
1145
1520
  def self.new(
1146
- # Webhook URL events are delivered to. Slack incoming webhook URLs are
1147
- # automatically formatted as Slack messages.
1521
+ # Public HTTP(S) URL that receives events. Slack and GovSlack URLs get formatted
1522
+ # messages.
1148
1523
  url:,
1149
- # Events delivered to this endpoint. `change.detected` fires only when a run
1150
- # detects a change; `run.completed` fires on every completed run — including runs
1151
- # that detected no change — and embeds the change when one was detected. Defaults
1152
- # to `["change.detected"]` when omitted.
1524
+ # Events to deliver. Defaults to `change.detected`; `run.completed` also includes
1525
+ # unchanged runs.
1153
1526
  events: nil,
1154
1527
  # Webhook retry settings. Use {} for the default schedule.
1155
1528
  retry_: nil,
1156
- # Signing secret used to verify webhook authenticity. Omitted unless the API key
1157
- # has monitors:write permission or full access. Each delivery includes an
1158
- # `X-Context-Signature: t=<unix>,v1=<hmac>` header, where the HMAC is SHA-256 over
1159
- # `"{t}.{rawRequestBody}"` keyed by this secret. Recompute it with a constant-time
1160
- # compare and reject stale timestamps to prevent replay. Generated by the API;
1161
- # cannot be set by clients.
1529
+ # API-generated signing secret. Visible only with full access or `monitors:write`
1530
+ # permission.
1162
1531
  secret: nil
1163
1532
  )
1164
1533
  end