checkly 9.5.0 → 10.0.0-prerelease-4f88d60

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 (575) hide show
  1. package/README.md +10 -0
  2. package/bin/launch.cjs +12 -0
  3. package/dist/ai-context/context.js +1 -0
  4. package/dist/ai-context/context.js.map +1 -1
  5. package/dist/ai-context/onboarding-boilerplate/checkly-config-template.ts +2 -2
  6. package/dist/ai-context/public-skills/checkly/SKILL.md +34 -5
  7. package/dist/ai-context/skills-command/references/communicate.md +8 -5
  8. package/dist/ai-context/skills-command/references/configure-api-checks.md +1 -9
  9. package/dist/ai-context/skills-command/references/configure-browser-checks.md +1 -8
  10. package/dist/ai-context/skills-command/references/configure-check-groups.md +1 -0
  11. package/dist/ai-context/skills-command/references/configure-dns-monitors.md +1 -9
  12. package/dist/ai-context/skills-command/references/configure-grpc-monitors.md +24 -0
  13. package/dist/ai-context/skills-command/references/configure-heartbeat-monitors.md +1 -9
  14. package/dist/ai-context/skills-command/references/configure-icmp-monitors.md +1 -9
  15. package/dist/ai-context/skills-command/references/configure-multistep-checks.md +1 -9
  16. package/dist/ai-context/skills-command/references/configure-playwright-checks.md +2 -2
  17. package/dist/ai-context/skills-command/references/configure-supporting-constructs.md +6 -2
  18. package/dist/ai-context/skills-command/references/configure-tcp-monitors.md +1 -10
  19. package/dist/ai-context/skills-command/references/configure-url-monitors.md +1 -10
  20. package/dist/ai-context/skills-command/references/configure.md +17 -5
  21. package/dist/ai-context/skills-command/references/initialize.md +11 -3
  22. package/dist/ai-context/skills-command/references/investigate-checks.md +1 -1
  23. package/dist/auth/api-key.d.ts +24 -0
  24. package/dist/auth/api-key.js +104 -0
  25. package/dist/auth/api-key.js.map +1 -0
  26. package/dist/auth/device-flow.d.ts +58 -0
  27. package/dist/auth/device-flow.js +228 -0
  28. package/dist/auth/device-flow.js.map +1 -0
  29. package/dist/auth/index.d.ts +6 -6
  30. package/dist/auth/index.js +64 -64
  31. package/dist/auth/index.js.map +1 -1
  32. package/dist/commands/account/plan.js +1 -1
  33. package/dist/commands/account/plan.js.map +1 -1
  34. package/dist/commands/account/usage/projections.d.ts +16 -0
  35. package/dist/commands/account/usage/projections.js +40 -0
  36. package/dist/commands/account/usage/projections.js.map +1 -0
  37. package/dist/commands/account/usage/series.d.ts +7 -3
  38. package/dist/commands/account/usage/series.js +30 -87
  39. package/dist/commands/account/usage/series.js.map +1 -1
  40. package/dist/commands/account/usage/summary.d.ts +4 -1
  41. package/dist/commands/account/usage/summary.js +19 -27
  42. package/dist/commands/account/usage/summary.js.map +1 -1
  43. package/dist/commands/account/usage/term.d.ts +15 -0
  44. package/dist/commands/account/usage/term.js +32 -0
  45. package/dist/commands/account/usage/term.js.map +1 -0
  46. package/dist/commands/account/usage/terms.d.ts +4 -0
  47. package/dist/commands/account/usage/terms.js +19 -27
  48. package/dist/commands/account/usage/terms.js.map +1 -1
  49. package/dist/commands/alert-channels/get.js +2 -1
  50. package/dist/commands/alert-channels/get.js.map +1 -1
  51. package/dist/commands/alert-channels/list.js +2 -1
  52. package/dist/commands/alert-channels/list.js.map +1 -1
  53. package/dist/commands/alert-channels/logs.js +2 -1
  54. package/dist/commands/alert-channels/logs.js.map +1 -1
  55. package/dist/commands/api.js +53 -10
  56. package/dist/commands/api.js.map +1 -1
  57. package/dist/commands/assets/download.js +11 -7
  58. package/dist/commands/assets/download.js.map +1 -1
  59. package/dist/commands/assets/list.js +2 -3
  60. package/dist/commands/assets/list.js.map +1 -1
  61. package/dist/commands/authCommand.d.ts +19 -0
  62. package/dist/commands/authCommand.js +118 -12
  63. package/dist/commands/authCommand.js.map +1 -1
  64. package/dist/commands/baseCommand.d.ts +12 -1
  65. package/dist/commands/baseCommand.js +24 -5
  66. package/dist/commands/baseCommand.js.map +1 -1
  67. package/dist/commands/checks/delete.js +1 -1
  68. package/dist/commands/checks/delete.js.map +1 -1
  69. package/dist/commands/checks/run.js +3 -1
  70. package/dist/commands/checks/run.js.map +1 -1
  71. package/dist/commands/debug/parse-project.d.ts +1 -0
  72. package/dist/commands/debug/parse-project.js +5 -2
  73. package/dist/commands/debug/parse-project.js.map +1 -1
  74. package/dist/commands/deploy.d.ts +8 -2
  75. package/dist/commands/deploy.js +735 -274
  76. package/dist/commands/deploy.js.map +1 -1
  77. package/dist/commands/destroy.js +3 -3
  78. package/dist/commands/destroy.js.map +1 -1
  79. package/dist/commands/env/add.js +2 -2
  80. package/dist/commands/env/add.js.map +1 -1
  81. package/dist/commands/env/ls.js +2 -1
  82. package/dist/commands/env/ls.js.map +1 -1
  83. package/dist/commands/env/pull.js +3 -3
  84. package/dist/commands/env/pull.js.map +1 -1
  85. package/dist/commands/env/update.js +2 -2
  86. package/dist/commands/env/update.js.map +1 -1
  87. package/dist/commands/import/apply.js +12 -10
  88. package/dist/commands/import/apply.js.map +1 -1
  89. package/dist/commands/import/cancel.js +4 -4
  90. package/dist/commands/import/cancel.js.map +1 -1
  91. package/dist/commands/import/commit.js +11 -9
  92. package/dist/commands/import/commit.js.map +1 -1
  93. package/dist/commands/import/plan.js +82 -62
  94. package/dist/commands/import/plan.js.map +1 -1
  95. package/dist/commands/init.d.ts +2 -0
  96. package/dist/commands/init.js +62 -41
  97. package/dist/commands/init.js.map +1 -1
  98. package/dist/commands/login.d.ts +38 -2
  99. package/dist/commands/login.js +848 -52
  100. package/dist/commands/login.js.map +1 -1
  101. package/dist/commands/logout.js +10 -4
  102. package/dist/commands/logout.js.map +1 -1
  103. package/dist/commands/pw-test.js +6 -3
  104. package/dist/commands/pw-test.js.map +1 -1
  105. package/dist/commands/rca/get.js +1 -1
  106. package/dist/commands/rca/get.js.map +1 -1
  107. package/dist/commands/rca/run.js +1 -1
  108. package/dist/commands/rca/run.js.map +1 -1
  109. package/dist/commands/skills/index.js +1 -1
  110. package/dist/commands/skills/index.js.map +1 -1
  111. package/dist/commands/skills/install.js +12 -12
  112. package/dist/commands/skills/install.js.map +1 -1
  113. package/dist/commands/switch.d.ts +10 -1
  114. package/dist/commands/switch.js +75 -13
  115. package/dist/commands/switch.js.map +1 -1
  116. package/dist/commands/sync-playwright.js +5 -10
  117. package/dist/commands/sync-playwright.js.map +1 -1
  118. package/dist/commands/test.d.ts +2 -0
  119. package/dist/commands/test.js +58 -29
  120. package/dist/commands/test.js.map +1 -1
  121. package/dist/commands/trigger.d.ts +1 -2
  122. package/dist/commands/trigger.js +27 -20
  123. package/dist/commands/trigger.js.map +1 -1
  124. package/dist/commands/validate.js +1 -0
  125. package/dist/commands/validate.js.map +1 -1
  126. package/dist/commands/whoami.d.ts +8 -0
  127. package/dist/commands/whoami.js +57 -6
  128. package/dist/commands/whoami.js.map +1 -1
  129. package/dist/constants.d.ts +3 -2
  130. package/dist/constants.js +8 -1
  131. package/dist/constants.js.map +1 -1
  132. package/dist/constructs/alert-channel-codegen.d.ts +6 -1
  133. package/dist/constructs/alert-channel-codegen.js +12 -6
  134. package/dist/constructs/alert-channel-codegen.js.map +1 -1
  135. package/dist/constructs/alert-channel-subscription.d.ts +1 -0
  136. package/dist/constructs/alert-channel-subscription.js +4 -0
  137. package/dist/constructs/alert-channel-subscription.js.map +1 -1
  138. package/dist/constructs/alert-channel.js +8 -5
  139. package/dist/constructs/alert-channel.js.map +1 -1
  140. package/dist/constructs/alert-escalation-policy-codegen.d.ts +7 -0
  141. package/dist/constructs/alert-escalation-policy-codegen.js +25 -8
  142. package/dist/constructs/alert-escalation-policy-codegen.js.map +1 -1
  143. package/dist/constructs/api-assertion.d.ts +0 -2
  144. package/dist/constructs/api-assertion.js +0 -4
  145. package/dist/constructs/api-assertion.js.map +1 -1
  146. package/dist/constructs/api-check-bundle.d.ts +4 -124
  147. package/dist/constructs/api-check-codegen.js +1 -1
  148. package/dist/constructs/api-check-codegen.js.map +1 -1
  149. package/dist/constructs/api-check.d.ts +8 -128
  150. package/dist/constructs/api-check.js +15 -17
  151. package/dist/constructs/api-check.js.map +1 -1
  152. package/dist/constructs/api-request-codegen.js +10 -8
  153. package/dist/constructs/api-request-codegen.js.map +1 -1
  154. package/dist/constructs/browser-check-bundle.d.ts +11 -125
  155. package/dist/constructs/browser-check-bundle.js +5 -1
  156. package/dist/constructs/browser-check-bundle.js.map +1 -1
  157. package/dist/constructs/browser-check.d.ts +5 -107
  158. package/dist/constructs/browser-check.js +1 -1
  159. package/dist/constructs/browser-check.js.map +1 -1
  160. package/dist/constructs/check-codegen.d.ts +46 -14
  161. package/dist/constructs/check-codegen.js +118 -34
  162. package/dist/constructs/check-codegen.js.map +1 -1
  163. package/dist/constructs/check-group-codegen.js +23 -9
  164. package/dist/constructs/check-group-codegen.js.map +1 -1
  165. package/dist/constructs/check-group-v1.d.ts +28 -16
  166. package/dist/constructs/check-group-v1.js +48 -17
  167. package/dist/constructs/check-group-v1.js.map +1 -1
  168. package/dist/constructs/check-group-v2.d.ts +2 -21
  169. package/dist/constructs/check-group-v2.js +4 -4
  170. package/dist/constructs/check-group-v2.js.map +1 -1
  171. package/dist/constructs/check.d.ts +68 -220
  172. package/dist/constructs/check.js +106 -37
  173. package/dist/constructs/check.js.map +1 -1
  174. package/dist/constructs/construct-codegen.d.ts +1 -2
  175. package/dist/constructs/construct-diagnostics.d.ts +3 -0
  176. package/dist/constructs/construct-diagnostics.js +11 -0
  177. package/dist/constructs/construct-diagnostics.js.map +1 -1
  178. package/dist/constructs/construct.d.ts +30 -4
  179. package/dist/constructs/construct.js +52 -6
  180. package/dist/constructs/construct.js.map +1 -1
  181. package/dist/constructs/dashboard.js +11 -7
  182. package/dist/constructs/dashboard.js.map +1 -1
  183. package/dist/constructs/dns-monitor.d.ts +4 -100
  184. package/dist/constructs/dns-request-codegen.js +1 -1
  185. package/dist/constructs/dns-request-codegen.js.map +1 -1
  186. package/dist/constructs/email-alert-channel-codegen.js +1 -1
  187. package/dist/constructs/email-alert-channel-codegen.js.map +1 -1
  188. package/dist/constructs/engine.d.ts +4 -2
  189. package/dist/constructs/engine.js +3 -1
  190. package/dist/constructs/engine.js.map +1 -1
  191. package/dist/constructs/frequency-codegen.js +10 -2
  192. package/dist/constructs/frequency-codegen.js.map +1 -1
  193. package/dist/constructs/frequency.d.ts +8 -3
  194. package/dist/constructs/frequency.js +7 -2
  195. package/dist/constructs/frequency.js.map +1 -1
  196. package/dist/constructs/grpc-monitor.d.ts +4 -100
  197. package/dist/constructs/grpc-monitor.js +19 -0
  198. package/dist/constructs/grpc-monitor.js.map +1 -1
  199. package/dist/constructs/grpc-request-codegen.js +13 -4
  200. package/dist/constructs/grpc-request-codegen.js.map +1 -1
  201. package/dist/constructs/grpc-request.d.ts +23 -0
  202. package/dist/constructs/heartbeat-monitor.d.ts +2 -1
  203. package/dist/constructs/heartbeat-monitor.js +2 -2
  204. package/dist/constructs/heartbeat-monitor.js.map +1 -1
  205. package/dist/constructs/icmp-monitor.d.ts +4 -100
  206. package/dist/constructs/icmp-request-codegen.js +1 -1
  207. package/dist/constructs/icmp-request-codegen.js.map +1 -1
  208. package/dist/constructs/incidentio-alert-channel-codegen.d.ts +1 -1
  209. package/dist/constructs/incidentio-alert-channel-codegen.js +14 -8
  210. package/dist/constructs/incidentio-alert-channel-codegen.js.map +1 -1
  211. package/dist/constructs/index.d.ts +1 -1
  212. package/dist/constructs/index.js +1 -1
  213. package/dist/constructs/index.js.map +1 -1
  214. package/dist/constructs/internal/assertion-validation.js +1 -2
  215. package/dist/constructs/internal/assertion-validation.js.map +1 -1
  216. package/dist/constructs/internal/codegen/context.d.ts +73 -6
  217. package/dist/constructs/internal/codegen/context.js +78 -6
  218. package/dist/constructs/internal/codegen/context.js.map +1 -1
  219. package/dist/constructs/internal/codegen/index.d.ts +3 -1
  220. package/dist/constructs/internal/codegen/index.js +2 -1
  221. package/dist/constructs/internal/codegen/index.js.map +1 -1
  222. package/dist/constructs/internal/codegen/render.d.ts +68 -0
  223. package/dist/constructs/internal/codegen/render.js +75 -0
  224. package/dist/constructs/internal/codegen/render.js.map +1 -0
  225. package/dist/constructs/internal/common-diagnostics.d.ts +1 -2
  226. package/dist/constructs/internal/common-diagnostics.js +7 -17
  227. package/dist/constructs/internal/common-diagnostics.js.map +1 -1
  228. package/dist/constructs/internal/declaring-file.d.ts +39 -0
  229. package/dist/constructs/internal/declaring-file.js +139 -0
  230. package/dist/constructs/internal/declaring-file.js.map +1 -0
  231. package/dist/constructs/internal/default-retry-strategy.d.ts +9 -0
  232. package/dist/constructs/internal/default-retry-strategy.js +13 -0
  233. package/dist/constructs/internal/default-retry-strategy.js.map +1 -0
  234. package/dist/constructs/internal/retry-strategy-defaults.d.ts +13 -0
  235. package/dist/constructs/internal/retry-strategy-defaults.js +14 -0
  236. package/dist/constructs/internal/retry-strategy-defaults.js.map +1 -0
  237. package/dist/constructs/key-value-pair-codegen.d.ts +6 -1
  238. package/dist/constructs/key-value-pair-codegen.js +24 -3
  239. package/dist/constructs/key-value-pair-codegen.js.map +1 -1
  240. package/dist/constructs/maintenance-window-codegen.d.ts +7 -0
  241. package/dist/constructs/maintenance-window-codegen.js +36 -19
  242. package/dist/constructs/maintenance-window-codegen.js.map +1 -1
  243. package/dist/constructs/maintenance-window.d.ts +37 -3
  244. package/dist/constructs/maintenance-window.js +34 -1
  245. package/dist/constructs/maintenance-window.js.map +1 -1
  246. package/dist/constructs/monitor.d.ts +6 -119
  247. package/dist/constructs/monitor.js +3 -5
  248. package/dist/constructs/monitor.js.map +1 -1
  249. package/dist/constructs/msteams-alert-channel-codegen.d.ts +1 -1
  250. package/dist/constructs/msteams-alert-channel-codegen.js +8 -18
  251. package/dist/constructs/msteams-alert-channel-codegen.js.map +1 -1
  252. package/dist/constructs/multi-step-check-bundle.d.ts +4 -109
  253. package/dist/constructs/multi-step-check.d.ts +4 -100
  254. package/dist/constructs/opsgenie-alert-channel-codegen.js +1 -1
  255. package/dist/constructs/opsgenie-alert-channel-codegen.js.map +1 -1
  256. package/dist/constructs/pagerduty-alert-channel-codegen.js +1 -1
  257. package/dist/constructs/pagerduty-alert-channel-codegen.js.map +1 -1
  258. package/dist/constructs/phone-call-alert-channel-codegen.js +1 -1
  259. package/dist/constructs/phone-call-alert-channel-codegen.js.map +1 -1
  260. package/dist/constructs/playwright-check-bundle.d.ts +10 -130
  261. package/dist/constructs/playwright-check-bundle.js +3 -3
  262. package/dist/constructs/playwright-check-bundle.js.map +1 -1
  263. package/dist/constructs/playwright-check-codegen.d.ts +85 -0
  264. package/dist/constructs/playwright-check-codegen.js +212 -0
  265. package/dist/constructs/playwright-check-codegen.js.map +1 -0
  266. package/dist/constructs/playwright-check.d.ts +14 -122
  267. package/dist/constructs/playwright-check.js +17 -51
  268. package/dist/constructs/playwright-check.js.map +1 -1
  269. package/dist/constructs/private-location-check-assignment.d.ts +1 -0
  270. package/dist/constructs/private-location-check-assignment.js +4 -0
  271. package/dist/constructs/private-location-check-assignment.js.map +1 -1
  272. package/dist/constructs/private-location-group-assignment.d.ts +1 -0
  273. package/dist/constructs/private-location-group-assignment.js +4 -0
  274. package/dist/constructs/private-location-group-assignment.js.map +1 -1
  275. package/dist/constructs/private-location.js +3 -1
  276. package/dist/constructs/private-location.js.map +1 -1
  277. package/dist/constructs/retry-strategy-codegen.d.ts +7 -1
  278. package/dist/constructs/retry-strategy-codegen.js +41 -32
  279. package/dist/constructs/retry-strategy-codegen.js.map +1 -1
  280. package/dist/constructs/retry-strategy.d.ts +0 -4
  281. package/dist/constructs/retry-strategy.js +5 -8
  282. package/dist/constructs/retry-strategy.js.map +1 -1
  283. package/dist/constructs/session.d.ts +38 -1
  284. package/dist/constructs/session.js +73 -3
  285. package/dist/constructs/session.js.map +1 -1
  286. package/dist/constructs/slack-alert-channel-codegen.js +1 -1
  287. package/dist/constructs/slack-alert-channel-codegen.js.map +1 -1
  288. package/dist/constructs/slack-app-alert-channel-codegen.js +1 -1
  289. package/dist/constructs/slack-app-alert-channel-codegen.js.map +1 -1
  290. package/dist/constructs/sms-alert-channel-codegen.js +1 -1
  291. package/dist/constructs/sms-alert-channel-codegen.js.map +1 -1
  292. package/dist/constructs/ssl-monitor.d.ts +4 -142
  293. package/dist/constructs/ssl-request-codegen.js +4 -3
  294. package/dist/constructs/ssl-request-codegen.js.map +1 -1
  295. package/dist/constructs/status-page-v3-automation-rule-codegen.js +5 -4
  296. package/dist/constructs/status-page-v3-automation-rule-codegen.js.map +1 -1
  297. package/dist/constructs/status-page-v3-codegen.js +3 -2
  298. package/dist/constructs/status-page-v3-codegen.js.map +1 -1
  299. package/dist/constructs/status-page-v3-component-codegen.js +8 -7
  300. package/dist/constructs/status-page-v3-component-codegen.js.map +1 -1
  301. package/dist/constructs/tcp-monitor-codegen.js +3 -2
  302. package/dist/constructs/tcp-monitor-codegen.js.map +1 -1
  303. package/dist/constructs/tcp-monitor.d.ts +8 -103
  304. package/dist/constructs/tcp-monitor.js +3 -2
  305. package/dist/constructs/tcp-monitor.js.map +1 -1
  306. package/dist/constructs/telegram-alert-channel-codegen.d.ts +1 -1
  307. package/dist/constructs/telegram-alert-channel-codegen.js +14 -8
  308. package/dist/constructs/telegram-alert-channel-codegen.js.map +1 -1
  309. package/dist/constructs/time-zone.d.ts +24 -0
  310. package/dist/constructs/time-zone.js +455 -0
  311. package/dist/constructs/time-zone.js.map +1 -0
  312. package/dist/constructs/traceroute-monitor.d.ts +4 -100
  313. package/dist/constructs/traceroute-request-codegen.js +2 -2
  314. package/dist/constructs/traceroute-request-codegen.js.map +1 -1
  315. package/dist/constructs/url-monitor-codegen.js +1 -1
  316. package/dist/constructs/url-monitor-codegen.js.map +1 -1
  317. package/dist/constructs/url-monitor.d.ts +7 -123
  318. package/dist/constructs/url-monitor.js +3 -0
  319. package/dist/constructs/url-monitor.js.map +1 -1
  320. package/dist/constructs/url-request-codegen.js +4 -3
  321. package/dist/constructs/url-request-codegen.js.map +1 -1
  322. package/dist/constructs/webhook-alert-channel-codegen.js +3 -3
  323. package/dist/constructs/webhook-alert-channel-codegen.js.map +1 -1
  324. package/dist/formatters/check-result-detail.js +0 -185
  325. package/dist/formatters/check-result-detail.js.map +1 -1
  326. package/dist/formatters/render.d.ts +2 -1
  327. package/dist/formatters/render.js +2 -2
  328. package/dist/formatters/render.js.map +1 -1
  329. package/dist/formatters/usage.d.ts +18 -12
  330. package/dist/formatters/usage.js +285 -245
  331. package/dist/formatters/usage.js.map +1 -1
  332. package/dist/help/help-extension.js +2 -1
  333. package/dist/help/help-extension.js.map +1 -1
  334. package/dist/helpers/accounts.d.ts +28 -0
  335. package/dist/helpers/accounts.js +50 -0
  336. package/dist/helpers/accounts.js.map +1 -0
  337. package/dist/helpers/activate-account.d.ts +13 -0
  338. package/dist/helpers/activate-account.js +24 -0
  339. package/dist/helpers/activate-account.js.map +1 -0
  340. package/dist/helpers/api-fields.js +3 -2
  341. package/dist/helpers/api-fields.js.map +1 -1
  342. package/dist/helpers/cli-mode.d.ts +24 -0
  343. package/dist/helpers/cli-mode.js +64 -8
  344. package/dist/helpers/cli-mode.js.map +1 -1
  345. package/dist/helpers/command-preview.d.ts +44 -0
  346. package/dist/helpers/command-preview.js +29 -9
  347. package/dist/helpers/command-preview.js.map +1 -1
  348. package/dist/helpers/command-style.d.ts +1 -0
  349. package/dist/helpers/command-style.js +51 -37
  350. package/dist/helpers/command-style.js.map +1 -1
  351. package/dist/helpers/flags.d.ts +10 -0
  352. package/dist/helpers/flags.js +18 -0
  353. package/dist/helpers/flags.js.map +1 -1
  354. package/dist/helpers/import-plan-selection.d.ts +1 -1
  355. package/dist/helpers/import-plan-selection.js +8 -20
  356. package/dist/helpers/import-plan-selection.js.map +1 -1
  357. package/dist/helpers/invalid-input-error.d.ts +15 -0
  358. package/dist/helpers/invalid-input-error.js +17 -0
  359. package/dist/helpers/invalid-input-error.js.map +1 -0
  360. package/dist/helpers/number.js +4 -3
  361. package/dist/helpers/number.js.map +1 -1
  362. package/dist/helpers/onboarding/boilerplate.js +15 -3
  363. package/dist/helpers/onboarding/boilerplate.js.map +1 -1
  364. package/dist/helpers/onboarding/index.d.ts +1 -1
  365. package/dist/helpers/onboarding/index.js +1 -1
  366. package/dist/helpers/onboarding/index.js.map +1 -1
  367. package/dist/helpers/onboarding/messages.d.ts +7 -0
  368. package/dist/helpers/onboarding/messages.js +14 -0
  369. package/dist/helpers/onboarding/messages.js.map +1 -1
  370. package/dist/helpers/onboarding/prompt-display.js +2 -2
  371. package/dist/helpers/onboarding/prompt-display.js.map +1 -1
  372. package/dist/helpers/onboarding/prompts-helpers.js +3 -1
  373. package/dist/helpers/onboarding/prompts-helpers.js.map +1 -1
  374. package/dist/helpers/onboarding/skill-install.js +4 -4
  375. package/dist/helpers/onboarding/skill-install.js.map +1 -1
  376. package/dist/helpers/prompts.d.ts +7 -0
  377. package/dist/helpers/prompts.js +10 -0
  378. package/dist/helpers/prompts.js.map +1 -0
  379. package/dist/helpers/result-assets.js +4 -3
  380. package/dist/helpers/result-assets.js.map +1 -1
  381. package/dist/helpers/test-helper.d.ts +14 -0
  382. package/dist/helpers/test-helper.js +33 -3
  383. package/dist/helpers/test-helper.js.map +1 -1
  384. package/dist/helpers/usage.d.ts +51 -14
  385. package/dist/helpers/usage.js +193 -53
  386. package/dist/helpers/usage.js.map +1 -1
  387. package/dist/helpers/wrap.js +1 -1
  388. package/dist/helpers/wrap.js.map +1 -1
  389. package/dist/messages/common-messages.d.ts +1 -0
  390. package/dist/messages/common-messages.js +4 -2
  391. package/dist/messages/common-messages.js.map +1 -1
  392. package/dist/reporters/abstract-list.d.ts +9 -2
  393. package/dist/reporters/abstract-list.js +105 -32
  394. package/dist/reporters/abstract-list.js.map +1 -1
  395. package/dist/reporters/ci.js +7 -4
  396. package/dist/reporters/ci.js.map +1 -1
  397. package/dist/reporters/dot.d.ts +1 -0
  398. package/dist/reporters/dot.js +19 -7
  399. package/dist/reporters/dot.js.map +1 -1
  400. package/dist/reporters/github.d.ts +2 -0
  401. package/dist/reporters/github.js +29 -4
  402. package/dist/reporters/github.js.map +1 -1
  403. package/dist/reporters/json.d.ts +2 -0
  404. package/dist/reporters/json.js +27 -4
  405. package/dist/reporters/json.js.map +1 -1
  406. package/dist/reporters/list.js +10 -8
  407. package/dist/reporters/list.js.map +1 -1
  408. package/dist/reporters/reporter.d.ts +1 -0
  409. package/dist/reporters/reporter.js.map +1 -1
  410. package/dist/reporters/util.d.ts +5 -2
  411. package/dist/reporters/util.js +25 -61
  412. package/dist/reporters/util.js.map +1 -1
  413. package/dist/rest/analytics.js +0 -4
  414. package/dist/rest/analytics.js.map +1 -1
  415. package/dist/rest/api.d.ts +10 -1
  416. package/dist/rest/api.js +44 -9
  417. package/dist/rest/api.js.map +1 -1
  418. package/dist/rest/check-results.d.ts +1 -50
  419. package/dist/rest/check-results.js.map +1 -1
  420. package/dist/rest/checkly-storage.d.ts +6 -1
  421. package/dist/rest/checkly-storage.js +13 -2
  422. package/dist/rest/checkly-storage.js.map +1 -1
  423. package/dist/rest/errors.d.ts +19 -0
  424. package/dist/rest/errors.js +20 -1
  425. package/dist/rest/errors.js.map +1 -1
  426. package/dist/rest/projects.d.ts +254 -4
  427. package/dist/rest/projects.js +208 -17
  428. package/dist/rest/projects.js.map +1 -1
  429. package/dist/rest/usage.d.ts +164 -73
  430. package/dist/rest/usage.js +21 -10
  431. package/dist/rest/usage.js.map +1 -1
  432. package/dist/services/abstract-check-runner.d.ts +34 -2
  433. package/dist/services/abstract-check-runner.js +183 -56
  434. package/dist/services/abstract-check-runner.js.map +1 -1
  435. package/dist/services/check-parser/bundler.d.ts +26 -0
  436. package/dist/services/check-parser/bundler.js +81 -7
  437. package/dist/services/check-parser/bundler.js.map +1 -1
  438. package/dist/services/check-parser/cache-hash.d.ts +1 -4
  439. package/dist/services/check-parser/cache-hash.js.map +1 -1
  440. package/dist/services/check-parser/package-files/json-text-source-file.d.ts +0 -2
  441. package/dist/services/check-parser/package-files/json-text-source-file.js +6 -6
  442. package/dist/services/check-parser/package-files/json-text-source-file.js.map +1 -1
  443. package/dist/services/check-parser/parser.d.ts +3 -2
  444. package/dist/services/check-parser/parser.js +31 -40
  445. package/dist/services/check-parser/parser.js.map +1 -1
  446. package/dist/services/checkly-config-codegen.js +4 -4
  447. package/dist/services/checkly-config-codegen.js.map +1 -1
  448. package/dist/services/checkly-config-loader.d.ts +18 -33
  449. package/dist/services/checkly-config-loader.js +50 -47
  450. package/dist/services/checkly-config-loader.js.map +1 -1
  451. package/dist/services/config.d.ts +42 -1
  452. package/dist/services/config.js +93 -9
  453. package/dist/services/config.js.map +1 -1
  454. package/dist/services/content-hash.d.ts +14 -0
  455. package/dist/services/content-hash.js +22 -0
  456. package/dist/services/content-hash.js.map +1 -0
  457. package/dist/services/deploy-diff/diff-lines.d.ts +52 -0
  458. package/dist/services/deploy-diff/diff-lines.js +327 -0
  459. package/dist/services/deploy-diff/diff-lines.js.map +1 -0
  460. package/dist/services/deploy-diff/double-check.d.ts +9 -0
  461. package/dist/services/deploy-diff/double-check.js +21 -0
  462. package/dist/services/deploy-diff/double-check.js.map +1 -0
  463. package/dist/services/deploy-diff/import-shape.d.ts +171 -0
  464. package/dist/services/deploy-diff/import-shape.js +633 -0
  465. package/dist/services/deploy-diff/import-shape.js.map +1 -0
  466. package/dist/services/deploy-diff/legacy-payload.d.ts +22 -0
  467. package/dist/services/deploy-diff/legacy-payload.js +51 -0
  468. package/dist/services/deploy-diff/legacy-payload.js.map +1 -0
  469. package/dist/services/deploy-diff/plan-summary.d.ts +81 -0
  470. package/dist/services/deploy-diff/plan-summary.js +262 -0
  471. package/dist/services/deploy-diff/plan-summary.js.map +1 -0
  472. package/dist/services/deploy-diff/preview-output.d.ts +63 -0
  473. package/dist/services/deploy-diff/preview-output.js +403 -0
  474. package/dist/services/deploy-diff/preview-output.js.map +1 -0
  475. package/dist/services/deploy-diff/render.d.ts +59 -0
  476. package/dist/services/deploy-diff/render.js +326 -0
  477. package/dist/services/deploy-diff/render.js.map +1 -0
  478. package/dist/services/deploy-diff/shape-changes.d.ts +2 -0
  479. package/dist/services/deploy-diff/shape-changes.js +48 -0
  480. package/dist/services/deploy-diff/shape-changes.js.map +1 -0
  481. package/dist/services/deploy-diff/source-index.d.ts +18 -0
  482. package/dist/services/deploy-diff/source-index.js +48 -0
  483. package/dist/services/deploy-diff/source-index.js.map +1 -0
  484. package/dist/services/deploy-diff/variable-names.d.ts +30 -0
  485. package/dist/services/deploy-diff/variable-names.js +64 -0
  486. package/dist/services/deploy-diff/variable-names.js.map +1 -0
  487. package/dist/services/engine-resolver.js +3 -0
  488. package/dist/services/engine-resolver.js.map +1 -1
  489. package/dist/services/engine-rules-loader.d.ts +6 -0
  490. package/dist/services/engine-rules-loader.js +12 -3
  491. package/dist/services/engine-rules-loader.js.map +1 -1
  492. package/dist/services/oxc-parser.d.ts +26 -0
  493. package/dist/services/oxc-parser.js +70 -0
  494. package/dist/services/oxc-parser.js.map +1 -0
  495. package/dist/services/project-cli.d.ts +75 -0
  496. package/dist/services/project-cli.js +302 -0
  497. package/dist/services/project-cli.js.map +1 -0
  498. package/dist/services/project-parser.d.ts +5 -0
  499. package/dist/services/project-parser.js +25 -13
  500. package/dist/services/project-parser.js.map +1 -1
  501. package/dist/services/skills.js +3 -3
  502. package/dist/services/skills.js.map +1 -1
  503. package/dist/services/snapshot-service.d.ts +25 -8
  504. package/dist/services/snapshot-service.js +46 -4
  505. package/dist/services/snapshot-service.js.map +1 -1
  506. package/dist/services/socket-client.js +1 -1
  507. package/dist/services/socket-client.js.map +1 -1
  508. package/dist/services/test-filters.d.ts +18 -0
  509. package/dist/services/test-filters.js +10 -0
  510. package/dist/services/test-filters.js.map +1 -1
  511. package/dist/services/test-runner.d.ts +1 -1
  512. package/dist/services/test-runner.js +10 -11
  513. package/dist/services/test-runner.js.map +1 -1
  514. package/dist/services/test-session-cancel.d.ts +5 -0
  515. package/dist/services/test-session-cancel.js +28 -3
  516. package/dist/services/test-session-cancel.js.map +1 -1
  517. package/dist/services/trigger-runner.d.ts +1 -1
  518. package/dist/services/trigger-runner.js +2 -2
  519. package/dist/services/trigger-runner.js.map +1 -1
  520. package/dist/services/two-installs.d.ts +39 -0
  521. package/dist/services/two-installs.js +155 -0
  522. package/dist/services/two-installs.js.map +1 -0
  523. package/dist/services/util.d.ts +17 -2
  524. package/dist/services/util.js +118 -11
  525. package/dist/services/util.js.map +1 -1
  526. package/dist/services/write-back/apply-edits.d.ts +29 -0
  527. package/dist/services/write-back/apply-edits.js +255 -0
  528. package/dist/services/write-back/apply-edits.js.map +1 -0
  529. package/dist/services/write-back/helper-edit.d.ts +135 -0
  530. package/dist/services/write-back/helper-edit.js +343 -0
  531. package/dist/services/write-back/helper-edit.js.map +1 -0
  532. package/dist/services/write-back/imports.d.ts +30 -0
  533. package/dist/services/write-back/imports.js +88 -0
  534. package/dist/services/write-back/imports.js.map +1 -0
  535. package/dist/services/write-back/literal-edit.d.ts +183 -0
  536. package/dist/services/write-back/literal-edit.js +359 -0
  537. package/dist/services/write-back/literal-edit.js.map +1 -0
  538. package/dist/services/write-back/output.d.ts +26 -0
  539. package/dist/services/write-back/output.js +110 -0
  540. package/dist/services/write-back/output.js.map +1 -0
  541. package/dist/services/write-back/plan.d.ts +180 -0
  542. package/dist/services/write-back/plan.js +1046 -0
  543. package/dist/services/write-back/plan.js.map +1 -0
  544. package/dist/services/write-back/source-file.d.ts +133 -0
  545. package/dist/services/write-back/source-file.js +460 -0
  546. package/dist/services/write-back/source-file.js.map +1 -0
  547. package/dist/sourcegen/index.d.ts +1 -1
  548. package/dist/sourcegen/index.js +1 -1
  549. package/dist/sourcegen/index.js.map +1 -1
  550. package/dist/sourcegen/program.d.ts +19 -1
  551. package/dist/sourcegen/program.js +32 -7
  552. package/dist/sourcegen/program.js.map +1 -1
  553. package/dist/testing/clear-git-env.d.ts +1 -0
  554. package/dist/testing/clear-git-env.js +25 -0
  555. package/dist/testing/clear-git-env.js.map +1 -0
  556. package/dist/testing/global-setup.d.ts +1 -0
  557. package/dist/testing/global-setup.js +3 -0
  558. package/dist/testing/global-setup.js.map +1 -1
  559. package/oclif.manifest.json +1113 -884
  560. package/package.json +21 -19
  561. package/dist/commands/rules.d.ts +0 -9
  562. package/dist/commands/rules.js +0 -13
  563. package/dist/commands/rules.js.map +0 -1
  564. package/dist/constructs/agentic-check-codegen.d.ts +0 -22
  565. package/dist/constructs/agentic-check-codegen.js +0 -59
  566. package/dist/constructs/agentic-check-codegen.js.map +0 -1
  567. package/dist/constructs/agentic-check.d.ts +0 -237
  568. package/dist/constructs/agentic-check.js +0 -100
  569. package/dist/constructs/agentic-check.js.map +0 -1
  570. package/dist/services/check-parser/package-files/json-text-source-file-parser.d.ts +0 -7
  571. package/dist/services/check-parser/package-files/json-text-source-file-parser.js +0 -47
  572. package/dist/services/check-parser/package-files/json-text-source-file-parser.js.map +0 -1
  573. package/dist/services/check-parser/package-files/source-file-parser.d.ts +0 -10
  574. package/dist/services/check-parser/package-files/source-file-parser.js +0 -13
  575. package/dist/services/check-parser/package-files/source-file-parser.js.map +0 -1
@@ -21,10 +21,23 @@ export var Events;
21
21
  Events["STREAM_LOGS"] = "STREAM_LOGS";
22
22
  Events["CANCEL"] = "CANCEL";
23
23
  Events["DETACH"] = "DETACH";
24
+ Events["MAX_FAILURES_REACHED"] = "MAX_FAILURES_REACHED";
24
25
  })(Events || (Events = {}));
25
26
  export const DEFAULT_CHECK_RUN_TIMEOUT_SECONDS = 600;
26
27
  export const DEFAULT_PLAYWRIGHT_CHECK_RUN_TIMEOUT_SECONDS = 1200;
27
28
  const DEFAULT_SCHEDULING_DELAY_EXCEEDED_MS = 20000;
29
+ // The backend staggers large sessions with SQS DelaySeconds and widens its
30
+ // batches so no check is ever delayed beyond SQS's 15-minute ceiling. Until a
31
+ // check's run-start message arrives, its timer must allow for that worst-case
32
+ // queue delay on top of the execution timeout — otherwise the timer expires
33
+ // for checks the server has not started yet. Once the check starts, the timer
34
+ // is re-armed to the plain execution timeout.
35
+ //
36
+ // The 900s ceiling is a backend contract (the dispatch stagger is capped at
37
+ // SQS's DelaySeconds maximum; RED-814 records where the backend enforces
38
+ // it). If the backend's stagger ceiling ever changes, this constant must
39
+ // follow.
40
+ export const MAX_SCHEDULING_DELAY_SECONDS = 900;
28
41
  function schedulingFailedError(operation) {
29
42
  return new TestSessionSchedulingFailedError(operation.error?.message ?? 'The test session could not be scheduled.', { code: operation.error?.code });
30
43
  }
@@ -40,7 +53,11 @@ export default class AbstractCheckRunner extends EventEmitter {
40
53
  verbose;
41
54
  detach;
42
55
  queue;
43
- constructor(accountId, timeout, verbose, detach = false) {
56
+ // Stop waiting for the remaining checks once this many checks have failed.
57
+ maxFailures;
58
+ // Set when the run stopped early; results that arrive afterwards are dropped.
59
+ _maxFailuresReached = false;
60
+ constructor(accountId, timeout, verbose, detach = false, maxFailures) {
44
61
  super();
45
62
  this.checks = new Map();
46
63
  this.timeouts = new Map();
@@ -49,11 +66,27 @@ export default class AbstractCheckRunner extends EventEmitter {
49
66
  this.verbose = verbose;
50
67
  this.accountId = accountId;
51
68
  this.detach = detach;
69
+ this.maxFailures = maxFailures;
70
+ }
71
+ get maxFailuresReached() {
72
+ return this._maxFailuresReached;
52
73
  }
53
74
  async run() {
54
75
  let socketClient = null;
55
76
  let sigintHandler = null;
56
77
  let previousSigintListeners = [];
78
+ // Puts back the SIGINT listeners that were in place before the run.
79
+ const restoreSigintListeners = () => {
80
+ if (!sigintHandler) {
81
+ return;
82
+ }
83
+ process.off('SIGINT', sigintHandler);
84
+ sigintHandler = null;
85
+ for (const listener of previousSigintListeners) {
86
+ process.on('SIGINT', listener);
87
+ }
88
+ previousSigintListeners = [];
89
+ };
57
90
  const schedulingWatchAbort = new AbortController();
58
91
  try {
59
92
  const checkRunSuiteId = uuid.v4();
@@ -80,7 +113,7 @@ export default class AbstractCheckRunner extends EventEmitter {
80
113
  // Remove pre-existing SIGINT listeners (e.g. from `when-exit`, a transitive
81
114
  // dependency via conf → atomically) that would re-raise the signal and
82
115
  // terminate the process — especially on Windows where process.kill(pid, 'SIGINT')
83
- // is a hard kill. The listeners are restored in the finally block.
116
+ // is a hard kill. `restoreSigintListeners` puts them back.
84
117
  previousSigintListeners = process.rawListeners('SIGINT');
85
118
  process.removeAllListeners('SIGINT');
86
119
  sigintHandler = () => {
@@ -92,7 +125,11 @@ export default class AbstractCheckRunner extends EventEmitter {
92
125
  }
93
126
  lastSigintAt = now;
94
127
  if (hasCancelled) {
95
- process.exit(1);
128
+ // Second Ctrl+C: re-raise SIGINT to the listeners from before the run
129
+ // (or Node's default), so they get to clean up. On Windows this
130
+ // terminates the process immediately, without running any handlers.
131
+ restoreSigintListeners();
132
+ process.kill(process.pid, 'SIGINT');
96
133
  }
97
134
  else {
98
135
  hasCancelled = true;
@@ -111,6 +148,7 @@ export default class AbstractCheckRunner extends EventEmitter {
111
148
  // `allChecksFinished` should be started before processing check results in `queue.start()`.
112
149
  // Otherwise, there could be a race condition causing check results to be missed by `allChecksFinished()`.
113
150
  const allChecksFinished = this.allChecksFinished();
151
+ const maxFailuresReached = this.maxFailuresReachedOrNever();
114
152
  // The server dispatches the check runs in the background after the 202;
115
153
  // watch the scheduling operation so a dispatch failure fails the run
116
154
  // immediately with the real error instead of waiting out the per-check
@@ -126,7 +164,10 @@ export default class AbstractCheckRunner extends EventEmitter {
126
164
  this.emit(Events.RUN_STARTED, checks, testSessionId);
127
165
  // Start the queue after the test session run rest call is completed to avoid race conditions
128
166
  this.queue.start();
129
- await Promise.race([allChecksFinished, schedulingFailed]);
167
+ await Promise.race([allChecksFinished, maxFailuresReached, schedulingFailed]);
168
+ if (this.maxFailuresReached) {
169
+ this.emit(Events.MAX_FAILURES_REACHED, this.maxFailures);
170
+ }
130
171
  this.emit(Events.RUN_FINISHED, testSessionId);
131
172
  }
132
173
  catch (err) {
@@ -137,12 +178,7 @@ export default class AbstractCheckRunner extends EventEmitter {
137
178
  // Stop any in-flight scheduling long-poll so it doesn't hold the
138
179
  // process open after the run has settled.
139
180
  schedulingWatchAbort.abort();
140
- if (sigintHandler) {
141
- process.off('SIGINT', sigintHandler);
142
- for (const listener of previousSigintListeners) {
143
- process.on('SIGINT', listener);
144
- }
145
- }
181
+ restoreSigintListeners();
146
182
  if (socketClient) {
147
183
  await socketClient.endAsync();
148
184
  }
@@ -210,7 +246,8 @@ export default class AbstractCheckRunner extends EventEmitter {
210
246
  return;
211
247
  }
212
248
  if (!this.timeouts.has(sequenceId)) {
213
- // The check has already timed out. We return early to avoid reporting a duplicate result.
249
+ // The check has already timed out (or the run stopped at its max failures limit, which clears every
250
+ // timeout). We return early to avoid reporting a duplicate or late result.
214
251
  return;
215
252
  }
216
253
  if (!this.checks.get(sequenceId)) {
@@ -218,18 +255,66 @@ export default class AbstractCheckRunner extends EventEmitter {
218
255
  }
219
256
  const { check } = this.checks.get(sequenceId);
220
257
  if (subtopic === 'run-start') {
258
+ // The check is executing now: drop the scheduling-delay headroom and
259
+ // give this attempt a full execution timeout.
260
+ this.resetTimeout(sequenceId, check);
221
261
  this.emit(Events.CHECK_INPROGRESS, check, sequenceId);
222
262
  }
223
263
  else if (subtopic === 'result') {
224
264
  const { result, testResultId, resultType } = message;
225
- await this.processCheckResult(result);
226
- const links = testResultId && result.hasFailures && await this.getShortLinks(testResultId);
227
265
  if (resultType === 'FINAL') {
266
+ // Claim the check before awaiting. The timeout timer runs outside this
267
+ // queue, so it could otherwise fire while we fetch logs or snapshots and
268
+ // report the check a second time, which also lets `allChecksFinished()`
269
+ // resolve while other checks are still running.
228
270
  this.disableTimeout(sequenceId);
271
+ let links;
272
+ try {
273
+ await this.processCheckResult(result);
274
+ links = testResultId && result.hasFailures && await this.getShortLinks(testResultId);
275
+ }
276
+ catch (err) {
277
+ if (this._maxFailuresReached) {
278
+ // The run stopped while this result was being fetched.
279
+ return;
280
+ }
281
+ // Fail loudly, unlike for an ATTEMPT: for the final result this also
282
+ // covers pulling snapshots with --update-snapshots, which must not be
283
+ // skipped silently.
284
+ this.emit(Events.CHECK_FAILED, sequenceId, check, `Failed to process the check result: ${err?.message ?? err}`);
285
+ this.emit(Events.CHECK_FINISHED, check);
286
+ return;
287
+ }
288
+ if (this._maxFailuresReached) {
289
+ // The run stopped while this result was being fetched.
290
+ return;
291
+ }
292
+ // Emitted outside the try: an exception from a listener is a reporter
293
+ // bug, not a failure of the check, and must not report it a second time.
229
294
  this.emit(Events.CHECK_SUCCESSFUL, sequenceId, check, result, testResultId, links);
230
295
  this.emit(Events.CHECK_FINISHED, check);
231
296
  }
232
297
  else if (resultType === 'ATTEMPT') {
298
+ // The backend publishes ATTEMPT when it has decided to retry, so the
299
+ // check is alive: restart its timeout instead of counting the whole
300
+ // retry sequence against a single timeout. Restart it before awaiting,
301
+ // so the old deadline cannot expire while we fetch this attempt's logs.
302
+ // The retry is scheduled after the ATTEMPT is published and can still
303
+ // fail to start; the restarted timeout is what ends the wait in that case.
304
+ this.resetTimeout(sequenceId, check);
305
+ try {
306
+ await this.processCheckResult(result);
307
+ }
308
+ catch {
309
+ // Logs are a nice-to-have for an intermediate attempt; the FINAL
310
+ // result decides the outcome. Report the attempt without them.
311
+ }
312
+ const links = testResultId && result.hasFailures && await this.getShortLinks(testResultId);
313
+ if (!this.timeouts.has(sequenceId)) {
314
+ // The check timed out (or finished) while we were fetching; it has
315
+ // already been reported as terminal, so don't report an attempt after it.
316
+ return;
317
+ }
233
318
  this.emit(Events.CHECK_ATTEMPT_RESULT, sequenceId, check, result, links);
234
319
  }
235
320
  }
@@ -248,29 +333,6 @@ export default class AbstractCheckRunner extends EventEmitter {
248
333
  result.logs = await assets.getLogs(result.assets);
249
334
  result.checkRunData = await assets.getCheckRunData(result.assets);
250
335
  }
251
- // Agentic checks carry their structured data on `result.metadata`
252
- // (assertions, suggestions, steps, summary, etc.) since the runner-ng
253
- // family never writes a side-car `check-run-data.json`. Mirror the
254
- // backend's REST serializer by lifting that metadata into
255
- // `result.agenticCheckResult` so downstream rendering code can branch
256
- // on the same typed field whether the data arrived via MQTT (live
257
- // path) or via the REST API (stored path).
258
- //
259
- // `model`, `costUsd`, and `tokensUsed` are intentionally NOT mapped —
260
- // they exist in the raw metadata but the backend strips them from the
261
- // public response shape and the CLI should mirror that policy. See the
262
- // companion backend change for why.
263
- if (result.checkType === 'AGENTIC' && result.metadata) {
264
- result.agenticCheckResult = {
265
- summary: result.metadata.summary ?? null,
266
- prompt: result.metadata.prompt ?? null,
267
- assertions: result.metadata.assertions ?? [],
268
- suggestions: result.metadata.suggestions ?? [],
269
- steps: result.metadata.steps ?? [],
270
- errors: result.metadata.errors ?? [],
271
- artifactManifest: result.metadata.artifactManifest ?? null,
272
- };
273
- }
274
336
  }
275
337
  allChecksFinished() {
276
338
  let finishedCheckCount = 0;
@@ -286,29 +348,94 @@ export default class AbstractCheckRunner extends EventEmitter {
286
348
  });
287
349
  });
288
350
  }
289
- setAllTimeouts() {
290
- Array.from(this.checks.entries()).forEach(([sequenceId, { check }]) => {
291
- const checkTimeout = (check instanceof PlaywrightCheck && this.timeout === DEFAULT_CHECK_RUN_TIMEOUT_SECONDS)
292
- ? DEFAULT_PLAYWRIGHT_CHECK_RUN_TIMEOUT_SECONDS
293
- : this.timeout;
294
- this.timeouts.set(sequenceId, setTimeout(() => {
295
- this.timeouts.delete(sequenceId);
296
- let errorMessage = `Reached timeout of ${checkTimeout} seconds waiting for check result.`;
297
- // Playwright checks can take longer.
298
- // We should point the user to the --timeout flag in that case.
299
- if (check instanceof PlaywrightCheck) {
300
- errorMessage += ' Use a custom timeout with --timeout';
301
- }
302
- else if (this.timeout === DEFAULT_CHECK_RUN_TIMEOUT_SECONDS) {
303
- // Checkly should always report a result within 240s.
304
- // If the default timeout was used, we should point the user to the status page and support email.
305
- errorMessage += ' Checkly may be experiencing problems. Please check https://is.checkly.online or reach out to support@checklyhq.com.';
351
+ /**
352
+ * Resolves once `maxFailures` checks have failed while other checks are
353
+ * still unfinished; never resolves otherwise (including when the failure
354
+ * that reaches the limit is the last check, which finishes the run
355
+ * normally). A failure is a check's final outcome: failed retry attempts
356
+ * and cancelled results do not count, so a check that passes on retry never
357
+ * stops the run.
358
+ *
359
+ * The stop happens synchronously in the CHECK_FINISHED listener, which every
360
+ * terminal path emits right after the outcome event. Stopping before the
361
+ * promise resolves keeps any result processed in the meantime from being
362
+ * reported.
363
+ */
364
+ maxFailuresReachedOrNever() {
365
+ const maxFailures = this.maxFailures;
366
+ if (!maxFailures || maxFailures < 1) {
367
+ return new Promise(() => { });
368
+ }
369
+ const numChecks = this.checks.size;
370
+ let numFailed = 0;
371
+ let numFinished = 0;
372
+ return new Promise(resolve => {
373
+ this.on(Events.CHECK_SUCCESSFUL, (_sequenceId, _check, result) => {
374
+ // Matches how reporters classify results: a cancelled result is not a failure.
375
+ if (result?.hasFailures && !result.isCancelled)
376
+ numFailed++;
377
+ });
378
+ this.on(Events.CHECK_FAILED, () => {
379
+ numFailed++;
380
+ });
381
+ this.on(Events.CHECK_FINISHED, () => {
382
+ numFinished++;
383
+ if (this._maxFailuresReached || numFailed < maxFailures || numFinished === numChecks) {
384
+ return;
306
385
  }
307
- this.emit(Events.CHECK_FAILED, sequenceId, check, errorMessage);
308
- this.emit(Events.CHECK_FINISHED, check);
309
- }, checkTimeout * 1000));
386
+ this._maxFailuresReached = true;
387
+ this.disableAllTimeouts();
388
+ this.queue.clear();
389
+ resolve();
390
+ });
310
391
  });
311
392
  }
393
+ setAllTimeouts() {
394
+ // Pre-start timers carry scheduling-delay headroom: a check at the tail
395
+ // of a large staggered session may legitimately sit in a delay slot for
396
+ // up to MAX_SCHEDULING_DELAY_SECONDS before it runs. The timer is
397
+ // re-armed to the plain execution timeout when run-start arrives (see
398
+ // processMessage).
399
+ Array.from(this.checks.entries()).forEach(([sequenceId, { check }]) => this.armTimeout(sequenceId, check, { started: false }));
400
+ }
401
+ /**
402
+ * Restart the result timeout for a check that is still running, without
403
+ * the scheduling-delay headroom. Called when the run starts and on every
404
+ * retry attempt. The timeout guards against a
405
+ * result that never arrives, not against a long but progressing retry
406
+ * sequence; the backend caps retries by count and cumulative time, so the
407
+ * total wait stays bounded. Only call this while the check is not terminal.
408
+ */
409
+ resetTimeout(sequenceId, check) {
410
+ this.disableTimeout(sequenceId);
411
+ this.armTimeout(sequenceId, check, { started: true });
412
+ }
413
+ armTimeout(sequenceId, check, { started }) {
414
+ const executionTimeout = (check instanceof PlaywrightCheck && this.timeout === DEFAULT_CHECK_RUN_TIMEOUT_SECONDS)
415
+ ? DEFAULT_PLAYWRIGHT_CHECK_RUN_TIMEOUT_SECONDS
416
+ : this.timeout;
417
+ const checkTimeout = started ? executionTimeout : executionTimeout + MAX_SCHEDULING_DELAY_SECONDS;
418
+ this.timeouts.set(sequenceId, setTimeout(() => {
419
+ this.timeouts.delete(sequenceId);
420
+ let errorMessage = started
421
+ ? `Reached timeout of ${checkTimeout} seconds waiting for check result.`
422
+ : `Check did not start within ${checkTimeout} seconds (execution timeout plus the maximum scheduling delay).`;
423
+ // A running Playwright check can legitimately take longer, so point the
424
+ // user to the --timeout flag. A check that never started is a
425
+ // Checkly-side problem whatever its type or --timeout, and so is a
426
+ // check that ran past the default timeout: Checkly should always report
427
+ // a result within 240s of a check starting. Point the user to the
428
+ // status page and support email in those cases.
429
+ if (started && check instanceof PlaywrightCheck) {
430
+ errorMessage += ' Use a custom timeout with --timeout';
431
+ }
432
+ else if (!started || this.timeout === DEFAULT_CHECK_RUN_TIMEOUT_SECONDS) {
433
+ errorMessage += ' Checkly may be experiencing problems. Please check https://is.checkly.online or reach out to support@checklyhq.com.';
434
+ }
435
+ this.emit(Events.CHECK_FAILED, sequenceId, check, errorMessage, { timedOut: true });
436
+ this.emit(Events.CHECK_FINISHED, check);
437
+ }, checkTimeout * 1000));
438
+ }
312
439
  disableAllTimeouts() {
313
440
  if (!this.checks) {
314
441
  return;
@@ -1 +1 @@
1
- {"version":3,"file":"abstract-check-runner.js","sourceRoot":"","sources":["../../src/services/abstract-check-runner.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"abstract-check-runner.js","sourceRoot":"","sources":["../../src/services/abstract-check-runner.ts"],"names":[],"mappings":"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"}
@@ -39,6 +39,7 @@ export declare class BundleTooLargeError extends Error {
39
39
  }
40
40
  export interface CreateFinalizedBundleArchiveOptions {
41
41
  archiveFile: string;
42
+ sha256: string;
42
43
  containsEmbeddedPackages?: boolean;
43
44
  }
44
45
  export declare class FinalizedBundleArchive {
@@ -46,6 +47,8 @@ export declare class FinalizedBundleArchive {
46
47
  private constructor();
47
48
  static create(options: CreateFinalizedBundleArchiveOptions): Promise<FinalizedBundleArchive>;
48
49
  get archiveFile(): string;
50
+ /** Lowercase hex SHA-256 of the archive's bytes. */
51
+ get sha256(): string;
49
52
  store(): Promise<RemoteBundleArchive>;
50
53
  }
51
54
  export interface CreateRemoteBundleArchiveOptions {
@@ -133,6 +136,11 @@ export declare class Bundler {
133
136
  * {@link BundlePathMarker} solves for the archive path.
134
137
  */
135
138
  get cacheHash(): CacheHashMarker;
139
+ /**
140
+ * The code bundle's content hash, filled in by finalize(). See
141
+ * {@link CodeBundleChecksumMarker} for why it is a holder.
142
+ */
143
+ get codeBundleSha256(): CodeBundleChecksumMarker;
136
144
  /**
137
145
  * Whether any files have been registered for bundling. Only Playwright check
138
146
  * suites register files (see playwright-check.ts), so an empty bundler means the
@@ -163,3 +171,21 @@ export declare class CacheHashMarker {
163
171
  updateValue(newValue: string): void;
164
172
  toJSON(): string;
165
173
  }
174
+ /**
175
+ * Mutable holder for the code bundle's SHA-256, serialized as a plain string.
176
+ * Checks copy it into their payloads during bundle(), but the archive it
177
+ * describes only exists once finalize() has run — the same ordering problem
178
+ * {@link BundlePathMarker} solves for the archive path.
179
+ *
180
+ * Starts empty and serializes to `undefined` until finalize() fills it in, so
181
+ * a payload synthesized without a finalized archive simply omits the key
182
+ * instead of claiming a hash of nothing.
183
+ *
184
+ * Deliberately a standalone class rather than a subclass of
185
+ * {@link BundlePathMarker}, for the reason given on {@link CacheHashMarker}.
186
+ */
187
+ export declare class CodeBundleChecksumMarker {
188
+ #private;
189
+ updateValue(newValue: string): void;
190
+ toJSON(): string | undefined;
191
+ }
@@ -15,6 +15,7 @@ import { lockfileArchivePath, manifestArchivePath, pruneBundledLockfile } from '
15
15
  import { MemberPruneDiagnostics, normalizePackagePrune, prunePackageJson, resolveManifestPrune, } from './package-prune.js';
16
16
  import { findUnrepairedPatchKeys, isRemovablePatchPath, planPatchFilter, } from './patched-dependencies.js';
17
17
  import { REGISTRIES_ARCHIVE_PATH, serializeRegistries, validateRegistries } from '../runner/registries.js';
18
+ import { sha256OfFile } from '../content-hash.js';
18
19
  import { pathToPosix } from '../util.js';
19
20
  const debug = Debug('checkly:cli:services:check-parser:bundler');
20
21
  /**
@@ -89,6 +90,12 @@ function dropSymlinksWithChildren(entries) {
89
90
  })
90
91
  .map(([, file]) => file);
91
92
  }
93
+ /**
94
+ * Timestamp stamped on every archive entry, in place of the file's own mtime or
95
+ * the clock. Fixed so the archive's content hash describes the content and
96
+ * nothing else; see {@link BundleArchive.add}.
97
+ */
98
+ const ARCHIVE_ENTRY_DATE = new Date(0);
92
99
  export class BundleArchive {
93
100
  static TMPDIR_PREFIX = 'cli-';
94
101
  static DEFAULT_FILENAME = 'playwright-project.tar.gz';
@@ -161,13 +168,33 @@ export class BundleArchive {
161
168
  const entry = {
162
169
  mode: 0o755, // Default mode for files in the archive
163
170
  name,
171
+ // Every entry's timestamp is pinned, because the archive's SHA-256 is
172
+ // what tells Checkly whether the code bundle changed and it has to
173
+ // describe the content alone. Left alone, a tar entry carries the
174
+ // file's mtime — or, for an entry the bundler generates in memory (a
175
+ // faux workspace manifest, a pruned lockfile, the runner's registries
176
+ // file), the current time. Either makes two archives of identical
177
+ // content differ: a CI pipeline that clones fresh per run would report
178
+ // every Playwright suite as changed on every deploy.
179
+ date: ARCHIVE_ENTRY_DATE,
164
180
  };
165
181
  if (!file.physical) {
166
182
  this.#archive.append(file.content, entry);
167
183
  continue;
168
184
  }
169
185
  if (file.symlinkTarget !== undefined) {
170
- this.#archive.symlink(name, file.symlinkTarget, entry.mode);
186
+ // Appended rather than added through archiver's symlink(), which takes
187
+ // no date and would stamp the entry with the current time — the same
188
+ // reproducibility problem as any other entry, and one that hits every
189
+ // pnpm or npm workspace bundle, since those are symlink farms.
190
+ // `linkname` is the field archiver's tar sink reads for a symlink
191
+ // entry — the same one its own symlink() fills in; the published types
192
+ // do not list it.
193
+ this.#archive.append(Buffer.alloc(0), {
194
+ ...entry,
195
+ type: 'symlink',
196
+ linkname: file.symlinkTarget,
197
+ });
171
198
  continue;
172
199
  }
173
200
  const fileStats = stats[index];
@@ -185,6 +212,10 @@ export class BundleArchive {
185
212
  });
186
213
  return await FinalizedBundleArchive.create({
187
214
  archiveFile: this.#archiveFile,
215
+ // Hashed here, where the archive is complete on disk and has not been
216
+ // uploaded yet: the deploy sends the hash, and a preview of that deploy
217
+ // describes the bundle by hash alone.
218
+ sha256: await sha256OfFile(this.#archiveFile),
188
219
  containsEmbeddedPackages: this.#containsEmbeddedPackages,
189
220
  });
190
221
  }
@@ -248,10 +279,12 @@ function parseMaxBytes(message) {
248
279
  }
249
280
  export class FinalizedBundleArchive {
250
281
  #archiveFile;
282
+ #sha256;
251
283
  #containsEmbeddedPackages;
252
284
  constructor(options) {
253
- const { archiveFile, containsEmbeddedPackages, } = options;
285
+ const { archiveFile, sha256, containsEmbeddedPackages, } = options;
254
286
  this.#archiveFile = archiveFile;
287
+ this.#sha256 = sha256;
255
288
  this.#containsEmbeddedPackages = containsEmbeddedPackages ?? false;
256
289
  }
257
290
  // eslint-disable-next-line require-await
@@ -261,10 +294,14 @@ export class FinalizedBundleArchive {
261
294
  get archiveFile() {
262
295
  return this.#archiveFile;
263
296
  }
297
+ /** Lowercase hex SHA-256 of the archive's bytes. */
298
+ get sha256() {
299
+ return this.#sha256;
300
+ }
264
301
  async store() {
265
302
  const { size } = await fs.stat(this.#archiveFile);
266
303
  try {
267
- const { data: { key, }, } = await this.#uploadCodeBundle(this.#archiveFile, size);
304
+ const { data: { key, }, } = await this.#uploadCodeBundle(this.#archiveFile, size, this.#sha256);
268
305
  return await RemoteBundleArchive.create({
269
306
  key,
270
307
  });
@@ -281,13 +318,13 @@ export class FinalizedBundleArchive {
281
318
  throw err;
282
319
  }
283
320
  }
284
- async #uploadCodeBundle(filePath, size) {
321
+ async #uploadCodeBundle(filePath, size, sha256) {
285
322
  const stream = createReadStream(filePath);
286
323
  stream.on('error', err => {
287
324
  throw new Error(`Failed to read Playwright project file: ${err.message}`);
288
325
  });
289
326
  try {
290
- return await checklyStorage.uploadCodeBundle(stream, size);
327
+ return await checklyStorage.uploadCodeBundle(stream, size, sha256);
291
328
  }
292
329
  finally {
293
330
  // A failed upload leaves the stream unconsumed and its file handle
@@ -337,6 +374,7 @@ export class Bundler {
337
374
  #id;
338
375
  #marker;
339
376
  #cacheHashMarker;
377
+ #codeBundleChecksumMarker;
340
378
  #tempDir;
341
379
  #stripPrefix;
342
380
  #workspaceContext;
@@ -355,6 +393,7 @@ export class Bundler {
355
393
  this.#id = uuid.v4();
356
394
  this.#marker = new BundlePathMarker(`bundle:${this.#id}`);
357
395
  this.#cacheHashMarker = new CacheHashMarker(cacheHash);
396
+ this.#codeBundleChecksumMarker = new CodeBundleChecksumMarker();
358
397
  this.#stripPrefix = stripPrefix;
359
398
  this.#tempDir = tempDir;
360
399
  this.#workspaceContext = workspaceContext;
@@ -429,6 +468,13 @@ export class Bundler {
429
468
  get cacheHash() {
430
469
  return this.#cacheHashMarker;
431
470
  }
471
+ /**
472
+ * The code bundle's content hash, filled in by finalize(). See
473
+ * {@link CodeBundleChecksumMarker} for why it is a holder.
474
+ */
475
+ get codeBundleSha256() {
476
+ return this.#codeBundleChecksumMarker;
477
+ }
432
478
  /**
433
479
  * Whether any files have been registered for bundling. Only Playwright check
434
480
  * suites register files (see playwright-check.ts), so an empty bundler means the
@@ -956,9 +1002,15 @@ export class Bundler {
956
1002
  tempDir: this.#tempDir,
957
1003
  stripPrefix: this.#stripPrefix,
958
1004
  });
959
- const files = dropSymlinksWithChildren(Array.from(this.#files.entries()).sort(([a], [b]) => a.localeCompare(b)));
1005
+ const files = dropSymlinksWithChildren(
1006
+ // Ordered by code point, not `localeCompare`: the order decides the
1007
+ // archive's bytes and therefore its hash, and a locale-sensitive
1008
+ // comparison would make that hash depend on the machine that built it.
1009
+ Array.from(this.#files.entries()).sort(([a], [b]) => (a < b ? -1 : a > b ? 1 : 0)));
960
1010
  await archive.add(...files);
961
- return await archive.finalize();
1011
+ const finalized = await archive.finalize();
1012
+ this.#codeBundleChecksumMarker.updateValue(finalized.sha256);
1013
+ return finalized;
962
1014
  }
963
1015
  }
964
1016
  async function createArchiver() {
@@ -1010,4 +1062,26 @@ export class CacheHashMarker {
1010
1062
  return this.#value;
1011
1063
  }
1012
1064
  }
1065
+ /**
1066
+ * Mutable holder for the code bundle's SHA-256, serialized as a plain string.
1067
+ * Checks copy it into their payloads during bundle(), but the archive it
1068
+ * describes only exists once finalize() has run — the same ordering problem
1069
+ * {@link BundlePathMarker} solves for the archive path.
1070
+ *
1071
+ * Starts empty and serializes to `undefined` until finalize() fills it in, so
1072
+ * a payload synthesized without a finalized archive simply omits the key
1073
+ * instead of claiming a hash of nothing.
1074
+ *
1075
+ * Deliberately a standalone class rather than a subclass of
1076
+ * {@link BundlePathMarker}, for the reason given on {@link CacheHashMarker}.
1077
+ */
1078
+ export class CodeBundleChecksumMarker {
1079
+ #value;
1080
+ updateValue(newValue) {
1081
+ this.#value = newValue;
1082
+ }
1083
+ toJSON() {
1084
+ return this.#value;
1085
+ }
1086
+ }
1013
1087
  //# sourceMappingURL=bundler.js.map