hyperframes 0.8.151 → 0.8.153

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 (169) hide show
  1. package/dist/{add-QKZZG7A2.js → add-D7GZM6ZS.js} +14 -14
  2. package/dist/{animatedGifPrep-YQDPYGOD.js → animatedGifPrep-IBLDIJXC.js} +9 -9
  3. package/dist/api.js +15 -15
  4. package/dist/{asset-3Q737Y4H.js → asset-ACZRQU2Z.js} +2 -2
  5. package/dist/{assetCataloger-BTHEBJJB.js → assetCataloger-Y3OELLLW.js} +4 -4
  6. package/dist/{auth-XL7EU3SO.js → auth-LFWML3XJ.js} +1 -1
  7. package/dist/{autoUpdate-PJFLTQ3U.js → autoUpdate-7IUGQXOV.js} +2 -2
  8. package/dist/{backgroundChecks-T5TIR5WK.js → backgroundChecks-XI364BNX.js} +3 -3
  9. package/dist/backgroundChecksWorker.js +3 -3
  10. package/dist/{batchRender-NFLVIDB4.js → batchRender-6TD4XSIP.js} +5 -5
  11. package/dist/{beats-JU4GZ26R.js → beats-FZGQ3HLR.js} +14 -14
  12. package/dist/{benchmark-7U2YWLTW.js → benchmark-3YEKSYMP.js} +10 -10
  13. package/dist/{browser-D57UPYDA.js → browser-R5PKLYZD.js} +3 -3
  14. package/dist/{bundleWithLocalizedFonts-26MXQOZG.js → bundleWithLocalizedFonts-QX5HV7LC.js} +2 -2
  15. package/dist/{capture-LT252COQ.js → capture-MTHXUEC2.js} +19 -19
  16. package/dist/{capture-47BV25G3.js → capture-R7QSBEPW.js} +2 -2
  17. package/dist/{catalog-BEZXOV4O.js → catalog-K2TRGCXO.js} +14 -14
  18. package/dist/{catch-up-KVV5X6BF.js → catch-up-WCSN4K4A.js} +4 -4
  19. package/dist/{check-6KQ433E6.js → check-N4EFKWC3.js} +294 -66
  20. package/dist/{checkBrowser-PRDR6XBY.js → checkBrowser-73SOMDG3.js} +75 -45
  21. package/dist/{chunk-IZPN423R.js → chunk-2F6LWCSF.js} +11 -6
  22. package/dist/{chunk-TCWMDCBX.js → chunk-2X3UJ4Q3.js} +2 -2
  23. package/dist/{chunk-YZTVHRJ2.js → chunk-2XEBNYG5.js} +1 -1
  24. package/dist/chunk-3DMR7RF6.js +24 -0
  25. package/dist/{chunk-APDLWWFG.js → chunk-3VGU2SH7.js} +1 -1
  26. package/dist/{chunk-OZ4K46OV.js → chunk-4IRCZWND.js} +2 -2
  27. package/dist/{chunk-4PKQEKAI.js → chunk-4OVLWS2K.js} +2 -2
  28. package/dist/{chunk-DHPFXAUF.js → chunk-57GN6KWT.js} +17 -3
  29. package/dist/{chunk-374QQGBQ.js → chunk-5CS4T6C6.js} +63 -12
  30. package/dist/{chunk-FLVI7FHU.js → chunk-5DD45SJZ.js} +1 -1
  31. package/dist/{chunk-BRF3O35X.js → chunk-5FS4HCHN.js} +109 -31
  32. package/dist/{chunk-DIOBKUBV.js → chunk-5OKZRXLT.js} +2 -2
  33. package/dist/{chunk-POEEDPJI.js → chunk-5ZGSN5YK.js} +1 -1
  34. package/dist/{chunk-FJWEYVEM.js → chunk-7FYFEXD2.js} +658 -198
  35. package/dist/{chunk-L3N7RJHS.js → chunk-7NKLNOHW.js} +3 -3
  36. package/dist/{chunk-O3DUX6P2.js → chunk-AA67UBB2.js} +4 -4
  37. package/dist/{chunk-IZ7L6V76.js → chunk-AUK5QCRH.js} +1 -1
  38. package/dist/{chunk-YEBKEWKB.js → chunk-BD3XH4A7.js} +1 -1
  39. package/dist/{chunk-XXPYZBZ3.js → chunk-C6TPGUWD.js} +2 -2
  40. package/dist/{chunk-ZD3RDNZI.js → chunk-CBMZYOWC.js} +1 -1
  41. package/dist/{chunk-ZGCRVM5M.js → chunk-DAKXCEE3.js} +4 -4
  42. package/dist/{chunk-AIJS74LG.js → chunk-FFDC5OWV.js} +8 -2
  43. package/dist/{chunk-DMKI64EZ.js → chunk-FSZAFCU7.js} +1 -1
  44. package/dist/{chunk-OSAH7S5M.js → chunk-FZC4UM4G.js} +1 -1
  45. package/dist/{chunk-QBYHNRHU.js → chunk-GV7I3ZSQ.js} +2 -2
  46. package/dist/{chunk-N3I6RAOR.js → chunk-GXPD7J53.js} +11 -11
  47. package/dist/{chunk-N4IXP3MY.js → chunk-HGAOO43L.js} +3 -3
  48. package/dist/{chunk-QF7AE3DB.js → chunk-J5LEAKUA.js} +1 -1
  49. package/dist/{chunk-PUIELIFA.js → chunk-JBUIS5DN.js} +1 -1
  50. package/dist/{chunk-KXX6NLOT.js → chunk-JQ57FAYN.js} +1 -1
  51. package/dist/{chunk-RRBKEHST.js → chunk-KFBEMIMD.js} +54 -6
  52. package/dist/{chunk-RYL6ZIJP.js → chunk-OIONMNWN.js} +18 -11
  53. package/dist/{chunk-KQGWP4KH.js → chunk-OSASJLU4.js} +1 -1
  54. package/dist/{chunk-3ZPFRDEJ.js → chunk-PVGDU7SE.js} +4 -4
  55. package/dist/{chunk-XGLNQDLN.js → chunk-PXOFFSO3.js} +1 -1
  56. package/dist/{chunk-IP73NMQT.js → chunk-QBFHVMOI.js} +10 -10
  57. package/dist/{chunk-IPDS2SWI.js → chunk-R6WCSVCE.js} +1 -1
  58. package/dist/{chunk-XYHBVSWD.js → chunk-RCWSM7IQ.js} +2 -2
  59. package/dist/{chunk-4YZYYP7V.js → chunk-SUVIGBHS.js} +3 -3
  60. package/dist/{chunk-L6RIMCMG.js → chunk-T2Y2WC5I.js} +3 -3
  61. package/dist/{chunk-QLGBNGXC.js → chunk-TCJM3KF2.js} +2 -2
  62. package/dist/{chunk-XKKBIFE5.js → chunk-TQUTAWUR.js} +7 -7
  63. package/dist/{chunk-HVXRYMGQ.js → chunk-TXWPPBIW.js} +1 -1
  64. package/dist/{chunk-2PSPARWP.js → chunk-TYXH3EKP.js} +4 -0
  65. package/dist/{chunk-FMNVTKX2.js → chunk-U3BCDVZO.js} +1 -1
  66. package/dist/{chunk-RJRGR5KF.js → chunk-UNOALNYO.js} +9 -9
  67. package/dist/{chunk-3SVC7SW4.js → chunk-V6UUZGP6.js} +7 -3
  68. package/dist/{chunk-LFNQDTSH.js → chunk-VYKPBRCB.js} +63 -12
  69. package/dist/{chunk-S22FKF6G.js → chunk-WNCGJFTZ.js} +2 -2
  70. package/dist/{chunk-XNDXENJQ.js → chunk-WQMTHPTK.js} +3 -3
  71. package/dist/{chunk-4LE27ST4.js → chunk-XQYLUY2F.js} +2 -2
  72. package/dist/chunk-XSEGMQYA.js +30 -0
  73. package/dist/{chunk-35PWWBGZ.js → chunk-YI6OBVWQ.js} +1 -1
  74. package/dist/{chunk-GNTVYF7E.js → chunk-YOEGUBBY.js} +5 -5
  75. package/dist/{chunk-FAIYEIZ4.js → chunk-YYMJEQ4D.js} +1 -1
  76. package/dist/{chunk-LKQS72D5.js → chunk-Z6CSYA7U.js} +1 -1
  77. package/dist/{chunk-XQKVEQNY.js → chunk-ZDEEHQ2Y.js} +2 -2
  78. package/dist/chunk-ZQMYD22O.js +215 -0
  79. package/dist/{clean-RLTHFTQA.js → clean-TLMZ6GVY.js} +52 -31
  80. package/dist/cli.js +53 -53
  81. package/dist/{cloud-Q5TGBTW3.js → cloud-XFIRM6YE.js} +4 -4
  82. package/dist/{cloudrun-4UZF74MV.js → cloudrun-OUGI5NN4.js} +6 -6
  83. package/dist/{compare-Q5UNR2V4.js → compare-OKSXYO3L.js} +30 -30
  84. package/dist/{compiler-ZXT27Z62.js → compiler-WHUQZITN.js} +6 -6
  85. package/dist/{component-H734P32V.js → component-3II4YXAD.js} +3 -3
  86. package/dist/{compositions-YEHDSTDR.js → compositions-RL75WQS6.js} +13 -13
  87. package/dist/{delete-LDBMPWRT.js → delete-4FM24SJ2.js} +2 -2
  88. package/dist/{deterministicFonts-C5JQLCTS.js → deterministicFonts-EOMDR6ZF.js} +3 -3
  89. package/dist/{dist-RGE4QASU.js → dist-2YYJYYPY.js} +3 -3
  90. package/dist/{dist-7JXLFD6U.js → dist-NUSNSGME.js} +4 -4
  91. package/dist/{doctor-XNJFIWJ7.js → doctor-Q5WYRIVP.js} +11 -11
  92. package/dist/{events-G6UFLNXR.js → events-CPZTSXAX.js} +2 -2
  93. package/dist/{events-UKCPUWMH.js → events-J5VJAKGT.js} +3 -3
  94. package/dist/{feedback-CK3KZ7DE.js → feedback-U64DIKAF.js} +8 -8
  95. package/dist/{figma-3D5C737B.js → figma-GUHWRHJO.js} +3 -3
  96. package/dist/fontLocalizeCli.js +12 -12
  97. package/dist/{get-QGTQUWFT.js → get-XDQJPF7G.js} +2 -2
  98. package/dist/{gpuPolicy-G5QAQDYF.js → gpuPolicy-7SIPG5BM.js} +9 -9
  99. package/dist/{grade-compare-XIHOM62P.js → grade-compare-WWW2F3NY.js} +30 -30
  100. package/dist/{gsapParserAcorn-VXZ3ZIF2.js → gsapParserAcorn-7NCK2LVT.js} +2 -2
  101. package/dist/{help-U5UBXT52.js → help-3UJYI7LC.js} +1 -1
  102. package/dist/{history-5J73QZSA.js → history-VQSM5L6N.js} +77 -205
  103. package/dist/hyperframe-runtime.js +4 -0
  104. package/dist/hyperframe.manifest.json +1 -1
  105. package/dist/hyperframe.runtime.iife.js +4 -0
  106. package/dist/hyperframes-player.global.js +1 -1
  107. package/dist/{info-RJHQQQUP.js → info-NMDUH7N5.js} +9 -9
  108. package/dist/{init-M6UQOYYC.js → init-D753VPPZ.js} +24 -24
  109. package/dist/{inspect-PRQWDBTP.js → inspect-KEE27DQN.js} +31 -31
  110. package/dist/{installer-ZL7UKYK5.js → installer-QCHUXV6E.js} +7 -7
  111. package/dist/{keyframes-VMUJYTCQ.js → keyframes-EP44YDZW.js} +227 -82
  112. package/dist/{lambda-ON42DRQD.js → lambda-Q5FTNY4J.js} +7 -7
  113. package/dist/{layout-QKBFVDVY.js → layout-LATG5CZV.js} +31 -31
  114. package/dist/{lint-ZQHHL2SV.js → lint-TQDQFJKW.js} +9 -9
  115. package/dist/{lintProject-3Z6OJCSO.js → lintProject-XQWXJYSC.js} +3 -3
  116. package/dist/{list-YBRKIWGF.js → list-O44ENRGS.js} +2 -2
  117. package/dist/{login-4B2YXGLB.js → login-EKFN5PZP.js} +4 -4
  118. package/dist/{media-treatment-5C5EJAAP.js → media-treatment-LPT4GYAE.js} +12 -12
  119. package/dist/{models-R7ZDWBJ6.js → models-CRYHY4KH.js} +12 -12
  120. package/dist/{motionShot-ZHESZNUL.js → motionShot-BS3DB666.js} +28 -15
  121. package/dist/{normalize-audio-EVWZVTBM.js → normalize-audio-7X445LLJ.js} +6 -6
  122. package/dist/{open-TV6HT4UT.js → open-JA7FN5F5.js} +4 -4
  123. package/dist/{parakeetRunner-YVVF4CG6.js → parakeetRunner-AFUTDANA.js} +12 -12
  124. package/dist/{pipeline-ETR5SEBS.js → pipeline-3TQHAQOJ.js} +9 -9
  125. package/dist/{play-C6WONRZV.js → play-UUJAXFCJ.js} +24 -24
  126. package/dist/{present-RANXTVPA.js → present-EBP6YMCJ.js} +20 -20
  127. package/dist/{preview-KF6UMBT2.js → preview-PVJDLZDU.js} +19 -19
  128. package/dist/{producer-CY2GXBWN.js → producer-HE23BPEU.js} +1 -1
  129. package/dist/{projectConfig-KPXCNMBM.js → projectConfig-EX35BZLA.js} +9 -9
  130. package/dist/{publication-Y36N4A7E.js → publication-OUGS3P7W.js} +4 -4
  131. package/dist/{publish-RCQJO35C.js → publish-UUFZR6QT.js} +12 -12
  132. package/dist/{remove-background-3ZMXVWLB.js → remove-background-P5M42CA5.js} +10 -10
  133. package/dist/{render-WUSTRMUD.js → render-AWFQGD4T.js} +5 -5
  134. package/dist/{render-PTNEFO5U.js → render-BJMONGDL.js} +10 -10
  135. package/dist/{render-FKVRCDT2.js → render-YSD2SRBL.js} +57 -22
  136. package/dist/{render-batch-AQHU2JWZ.js → render-batch-6UN3HT5A.js} +5 -5
  137. package/dist/renderSetupWorker.js +3 -3
  138. package/dist/{resolver-L5BDZJKU.js → resolver-O6ZENVYP.js} +6 -6
  139. package/dist/{sherpa-3S3ISG7G.js → sherpa-RWHRDO53.js} +11 -11
  140. package/dist/skills/hyperframes-cli/SKILL.md +3 -0
  141. package/dist/skills/hyperframes-cli/references/lint-validate-inspect.md +5 -1
  142. package/dist/{skills-X4WQEKNF.js → skills-KC6IGXDU.js} +5 -5
  143. package/dist/{skillsUpdateCheck-UYCVHDZ6.js → skillsUpdateCheck-7C4TD7EL.js} +3 -3
  144. package/dist/{snapshot-YEYHQEZQ.js → snapshot-SNZL5GPC.js} +118 -41
  145. package/dist/{src-OLBDPEG6.js → src-KKS6QEHB.js} +11 -11
  146. package/dist/{src-2NN2WB6X.js → src-YMUDUVXQ.js} +8 -8
  147. package/dist/{staticProjectServer-7H35NMWB.js → staticProjectServer-XOCIQ3FV.js} +20 -20
  148. package/dist/studio/assets/{hyperframes-player-DJt8E7k4.js → hyperframes-player-Cn6V2ZaK.js} +1 -1
  149. package/dist/studio/assets/{index-DgbLblGR.js → index-CEGNvZnK.js} +1 -1
  150. package/dist/studio/assets/{index-DWIHrAY2.js → index-CaaXbGyk.js} +1 -1
  151. package/dist/studio/assets/{index-BGks9KLI.js → index-Cwpnr4DV.js} +132 -132
  152. package/dist/studio/index.html +1 -1
  153. package/dist/{studio-api-HGM2A5I3.js → studio-api-NUNUZQ5I.js} +30 -16
  154. package/dist/{studioServer-M6XFL7N6.js → studioServer-FBY3YWZH.js} +43 -43
  155. package/dist/{synthesize-22B7L5GX.js → synthesize-W2M7QGDV.js} +6 -5
  156. package/dist/{telemetry-KVCZKVTE.js → telemetry-KNSTX3E2.js} +3 -3
  157. package/dist/{timeline-VYYKZR4V.js → timeline-6I5LGPP6.js} +20 -20
  158. package/dist/{tokens-B5NFFL55.js → tokens-MY4GOQ53.js} +2 -2
  159. package/dist/{transcribe-SBETOIWI.js → transcribe-56WECC4Y.js} +10 -10
  160. package/dist/{transcribe-WNFRYZAC.js → transcribe-ISCPZLQZ.js} +16 -16
  161. package/dist/{tts-QSAQZVEZ.js → tts-RE227GFP.js} +1 -1
  162. package/dist/{updateCheck-5MM2DFUC.js → updateCheck-FAG4T4AV.js} +2 -2
  163. package/dist/{upgrade-LWID54R3.js → upgrade-5QCPW55B.js} +2 -2
  164. package/dist/{urlDownloader-CVLNXFDG.js → urlDownloader-FGSJGUM7.js} +8 -8
  165. package/dist/{validate-V4CGQ6OF.js → validate-WC3FUSUF.js} +25 -25
  166. package/dist/{video-VJB2KRSS.js → video-DOFSWSSR.js} +9 -9
  167. package/package.json +1 -1
  168. package/dist/chunk-WBLXWOYK.js +0 -15
  169. package/dist/{screenshotCapture-TEUIWXWN.js → screenshotCapture-3JXXUZND.js} +3 -3
@@ -6,7 +6,7 @@ var __filename = __hf_fileURLToPath(import.meta.url);
6
6
  var __dirname = __hf_dirname(__filename);
7
7
  import {
8
8
  resolveProject
9
- } from "./chunk-KXX6NLOT.js";
9
+ } from "./chunk-JQ57FAYN.js";
10
10
  import "./chunk-K2FLNJVB.js";
11
11
  import {
12
12
  filesChangedSince,
@@ -14,8 +14,8 @@ import {
14
14
  readSeen,
15
15
  unseenTurns
16
16
  } from "./chunk-DCAI5DBR.js";
17
- import "./chunk-ZD3RDNZI.js";
18
- import "./chunk-IZ7L6V76.js";
17
+ import "./chunk-CBMZYOWC.js";
18
+ import "./chunk-AUK5QCRH.js";
19
19
  import "./chunk-VWG7OQKU.js";
20
20
  import "./chunk-XBSPQ52S.js";
21
21
  import {
@@ -30,7 +30,7 @@ import "./chunk-K4WIOZFP.js";
30
30
  import "./chunk-XUXGIA7H.js";
31
31
  import "./chunk-WERLJGIC.js";
32
32
  import "./chunk-ISN5GRYI.js";
33
- import "./chunk-TCWMDCBX.js";
33
+ import "./chunk-2X3UJ4Q3.js";
34
34
  import "./chunk-EOVYQ3IG.js";
35
35
  import "./chunk-AMKC3AXA.js";
36
36
  import "./chunk-JYVGYKXG.js";
@@ -5,18 +5,27 @@ var require = __hf_createRequire(import.meta.url);
5
5
  var __filename = __hf_fileURLToPath(import.meta.url);
6
6
  var __dirname = __hf_dirname(__filename);
7
7
  import {
8
+ pngDimensions,
8
9
  reportArtifacts,
9
10
  withProjectLock
10
- } from "./chunk-DHPFXAUF.js";
11
+ } from "./chunk-57GN6KWT.js";
11
12
  import {
13
+ withRemainingBudget
14
+ } from "./chunk-AWNBM3MZ.js";
15
+ import {
16
+ checkSnapshotDirectory,
12
17
  rectToBbox
13
- } from "./chunk-WBLXWOYK.js";
18
+ } from "./chunk-XSEGMQYA.js";
19
+ import {
20
+ captureArtifactRevision
21
+ } from "./chunk-3DMR7RF6.js";
22
+ import "./chunk-ZQMYD22O.js";
14
23
  import {
15
24
  loadProducer
16
- } from "./chunk-POEEDPJI.js";
25
+ } from "./chunk-5ZGSN5YK.js";
17
26
  import {
18
27
  trackLintRun
19
- } from "./chunk-L6RIMCMG.js";
28
+ } from "./chunk-T2Y2WC5I.js";
20
29
  import {
21
30
  assertionTargets,
22
31
  buildLayoutSampleTimes,
@@ -35,46 +44,52 @@ import {
35
44
  mergeSampleTimes,
36
45
  parseAt,
37
46
  readMotionSpec
38
- } from "./chunk-RJRGR5KF.js";
39
- import "./chunk-L3N7RJHS.js";
47
+ } from "./chunk-UNOALNYO.js";
48
+ import "./chunk-7NKLNOHW.js";
40
49
  import "./chunk-XUHOIDKG.js";
41
- import "./chunk-QLGBNGXC.js";
50
+ import "./chunk-TCJM3KF2.js";
42
51
  import "./chunk-X7MTZ4T2.js";
43
- import "./chunk-RYL6ZIJP.js";
52
+ import "./chunk-OIONMNWN.js";
44
53
  import "./chunk-FH7WODJH.js";
45
- import "./chunk-RRBKEHST.js";
46
- import "./chunk-HVXRYMGQ.js";
54
+ import {
55
+ BrowserCleanupError,
56
+ closeManagedBrowser
57
+ } from "./chunk-KFBEMIMD.js";
58
+ import "./chunk-TXWPPBIW.js";
47
59
  import "./chunk-WPNE5NEP.js";
48
- import "./chunk-BRF3O35X.js";
49
- import "./chunk-XNDXENJQ.js";
50
- import "./chunk-FJWEYVEM.js";
51
- import "./chunk-XXPYZBZ3.js";
52
- import "./chunk-3ZPFRDEJ.js";
53
- import "./chunk-AIJS74LG.js";
60
+ import "./chunk-5FS4HCHN.js";
61
+ import "./chunk-WQMTHPTK.js";
62
+ import "./chunk-C6TPGUWD.js";
63
+ import {
64
+ recordArtifacts
65
+ } from "./chunk-7FYFEXD2.js";
66
+ import "./chunk-PVGDU7SE.js";
67
+ import "./chunk-FFDC5OWV.js";
54
68
  import {
55
69
  resolveProject
56
- } from "./chunk-KXX6NLOT.js";
70
+ } from "./chunk-JQ57FAYN.js";
57
71
  import "./chunk-K2FLNJVB.js";
72
+ import "./chunk-DQBY7FRR.js";
58
73
  import {
59
74
  resolveLocalBrowserGpuMode
60
- } from "./chunk-ZGCRVM5M.js";
75
+ } from "./chunk-DAKXCEE3.js";
61
76
  import "./chunk-442JNXRM.js";
62
- import "./chunk-FAIYEIZ4.js";
77
+ import "./chunk-YYMJEQ4D.js";
63
78
  import "./chunk-XT7X6QCP.js";
64
79
  import "./chunk-4YYJOFKS.js";
65
80
  import "./chunk-HVW7ABXD.js";
66
- import "./chunk-XGLNQDLN.js";
67
- import "./chunk-N4IXP3MY.js";
68
- import "./chunk-YZTVHRJ2.js";
81
+ import "./chunk-PXOFFSO3.js";
82
+ import "./chunk-HGAOO43L.js";
83
+ import "./chunk-2XEBNYG5.js";
69
84
  import "./chunk-AWDFDFI3.js";
70
85
  import "./chunk-P6LJ4Y32.js";
71
86
  import "./chunk-GMECXFAN.js";
72
- import "./chunk-374QQGBQ.js";
87
+ import "./chunk-5CS4T6C6.js";
73
88
  import {
74
89
  trackCheckReport,
75
90
  trackCommandFailure
76
- } from "./chunk-ZD3RDNZI.js";
77
- import "./chunk-IZ7L6V76.js";
91
+ } from "./chunk-CBMZYOWC.js";
92
+ import "./chunk-AUK5QCRH.js";
78
93
  import "./chunk-VWG7OQKU.js";
79
94
  import "./chunk-XBSPQ52S.js";
80
95
  import {
@@ -98,26 +113,26 @@ import "./chunk-TJSTGSAW.js";
98
113
  import "./chunk-Q5X2B5WT.js";
99
114
  import {
100
115
  withMeta
101
- } from "./chunk-35PWWBGZ.js";
116
+ } from "./chunk-YI6OBVWQ.js";
102
117
  import "./chunk-K4WIOZFP.js";
103
118
  import "./chunk-XUXGIA7H.js";
104
119
  import "./chunk-WERLJGIC.js";
105
120
  import "./chunk-ISN5GRYI.js";
106
- import "./chunk-TCWMDCBX.js";
121
+ import "./chunk-2X3UJ4Q3.js";
107
122
  import "./chunk-EOVYQ3IG.js";
108
123
  import "./chunk-AMKC3AXA.js";
109
124
  import {
110
125
  extractMediaMetadata,
111
126
  findHdrAutoPromotion
112
- } from "./chunk-IZPN423R.js";
113
- import "./chunk-3SVC7SW4.js";
127
+ } from "./chunk-2F6LWCSF.js";
128
+ import "./chunk-V6UUZGP6.js";
114
129
  import "./chunk-NE55C6S5.js";
115
130
  import "./chunk-JYVGYKXG.js";
116
- import "./chunk-XQKVEQNY.js";
117
- import "./chunk-QBYHNRHU.js";
131
+ import "./chunk-ZDEEHQ2Y.js";
132
+ import "./chunk-GV7I3ZSQ.js";
118
133
  import "./chunk-VC76R6W2.js";
119
134
  import "./chunk-UJKQWGFF.js";
120
- import "./chunk-LFNQDTSH.js";
135
+ import "./chunk-VYKPBRCB.js";
121
136
  import "./chunk-OFQWTKPW.js";
122
137
  import "./chunk-DPVXBVLL.js";
123
138
  import "./chunk-T76PLPD6.js";
@@ -127,16 +142,16 @@ import "./chunk-TWWSYAKJ.js";
127
142
  import {
128
143
  lintProject,
129
144
  shouldBlockRender
130
- } from "./chunk-GNTVYF7E.js";
145
+ } from "./chunk-YOEGUBBY.js";
131
146
  import {
132
147
  resolveProjectRelativeSrc
133
148
  } from "./chunk-IWFLMU2N.js";
134
- import "./chunk-APDLWWFG.js";
149
+ import "./chunk-3VGU2SH7.js";
135
150
  import "./chunk-VAS6HQX3.js";
136
151
  import "./chunk-3RM2ETQT.js";
137
152
  import "./chunk-BSQ7XANM.js";
138
153
  import "./chunk-SDYDNHEE.js";
139
- import "./chunk-2PSPARWP.js";
154
+ import "./chunk-TYXH3EKP.js";
140
155
  import "./chunk-IXLUTE6N.js";
141
156
  import {
142
157
  normalizeErrorMessage
@@ -145,7 +160,100 @@ import "./chunk-3GXQPCJC.js";
145
160
  import "./chunk-M2WBOQ2Q.js";
146
161
 
147
162
  // src/commands/check.ts
148
- import { resolve } from "path";
163
+ import { randomUUID } from "crypto";
164
+ import { mkdirSync as mkdirSync2, writeFileSync as writeFileSync2 } from "fs";
165
+ import { join as join2, resolve } from "path";
166
+
167
+ // src/utils/checkDeadline.ts
168
+ var CHECK_DEADLINE_MS = 12e4;
169
+ var SCRIPT_START = "[hyperframes:script:start] ";
170
+ var SCRIPT_FINISH = "[hyperframes:script:finish] ";
171
+ var CheckDeadlineError = class extends Error {
172
+ constructor(sourceFile) {
173
+ super(
174
+ sourceFile === void 0 ? "Check did not finish within its deadline." : `${sourceFile}: its script did not finish within the check deadline.`
175
+ );
176
+ this.sourceFile = sourceFile;
177
+ }
178
+ sourceFile;
179
+ };
180
+ var CheckDeadline = class {
181
+ abort = new AbortController();
182
+ operations = /* @__PURE__ */ new Set();
183
+ signal = this.abort.signal;
184
+ browsers = /* @__PURE__ */ new Set();
185
+ scripts = [];
186
+ expired;
187
+ timer;
188
+ expiry;
189
+ rejectExpiry;
190
+ phase = "waiting";
191
+ constructor() {
192
+ this.expiry = new Promise((_, reject) => {
193
+ this.rejectExpiry = reject;
194
+ });
195
+ }
196
+ start = () => {
197
+ if (this.phase !== "waiting") return;
198
+ this.phase = "started";
199
+ this.timer = setTimeout(() => {
200
+ this.expired = new CheckDeadlineError(this.scripts.at(-1));
201
+ this.rejectExpiry(this.expired);
202
+ this.abort.abort(this.expired);
203
+ }, CHECK_DEADLINE_MS);
204
+ };
205
+ ownBrowser = (browser) => {
206
+ if (this.expired) throw this.expired;
207
+ if (this.phase === "closed") throw new Error("Check has already finished.");
208
+ this.browsers.add(browser);
209
+ };
210
+ async preparePage(page) {
211
+ page.on("console", (message) => {
212
+ const text = message.text();
213
+ if (text.startsWith(SCRIPT_START)) this.scripts.push(text.slice(SCRIPT_START.length));
214
+ if (text.startsWith(SCRIPT_FINISH)) {
215
+ const index = this.scripts.lastIndexOf(text.slice(SCRIPT_FINISH.length));
216
+ if (index !== -1) this.scripts.splice(index, 1);
217
+ }
218
+ });
219
+ await page.evaluateOnNewDocument(
220
+ (start, finish) => {
221
+ Reflect.set(window, "__hfScriptState", (phase, source) => {
222
+ console.debug((phase === "start" ? start : finish) + source);
223
+ });
224
+ },
225
+ SCRIPT_START,
226
+ SCRIPT_FINISH
227
+ );
228
+ }
229
+ run(operation) {
230
+ if (this.expired) return Promise.reject(this.expired);
231
+ const pending = operation();
232
+ this.operations.add(pending);
233
+ return Promise.race([pending, this.expiry]);
234
+ }
235
+ async close() {
236
+ this.phase = "closed";
237
+ clearTimeout(this.timer);
238
+ const closes = await Promise.allSettled([...this.browsers].map(closeManagedBrowser));
239
+ const errors = closes.filter((entry) => entry.status === "rejected").map((entry) => entry.reason);
240
+ try {
241
+ const drained = await withRemainingBudget(
242
+ Promise.allSettled(this.operations),
243
+ 1e3,
244
+ "draining check cleanup"
245
+ );
246
+ for (const entry of drained) {
247
+ if (entry.status === "rejected" && entry.reason instanceof BrowserCleanupError)
248
+ errors.push(entry.reason);
249
+ }
250
+ } catch (error) {
251
+ errors.push(error);
252
+ }
253
+ if (errors.length > 0)
254
+ throw new BrowserCleanupError(errors, errors.map(normalizeErrorMessage).join("; "));
255
+ }
256
+ };
149
257
 
150
258
  // src/utils/checkPipeline.ts
151
259
  import { mkdirSync, writeFileSync } from "fs";
@@ -153,7 +261,7 @@ import { join, relative } from "path";
153
261
 
154
262
  // src/utils/hdrPromotion.ts
155
263
  async function bundleProjectHtml(projectDir) {
156
- const { bundleToSingleHtml } = await import("./compiler-ZXT27Z62.js");
264
+ const { bundleToSingleHtml } = await import("./compiler-WHUQZITN.js");
157
265
  return bundleToSingleHtml(projectDir);
158
266
  }
159
267
  async function collectBundledRenderMedia(html) {
@@ -1034,25 +1142,57 @@ async function runCheckPipeline(project, options, dependencies = DEFAULT_DEPENDE
1034
1142
  relative(project.dir, motion.path) || "index.motion.json"
1035
1143
  )
1036
1144
  ] : [];
1037
- let browser;
1145
+ const deadline = new CheckDeadline();
1146
+ let outcome;
1038
1147
  try {
1039
- browser = await dependencies.runBrowserCheck(project, options, motion);
1148
+ let browser;
1149
+ try {
1150
+ browser = await deadline.run(
1151
+ () => dependencies.runBrowserCheck(project, options, motion, deadline)
1152
+ );
1153
+ } catch (error) {
1154
+ browser = emptyBrowserResult();
1155
+ browser.runtimeFindings.push(runtimeFailure(error));
1156
+ }
1157
+ const snapshotFiles = options.snapshots ? await writeContrastSnapshots(dependencies, project.dir, browser) : [];
1158
+ const report = buildReport(
1159
+ options,
1160
+ lint,
1161
+ browser,
1162
+ motion,
1163
+ specFindings,
1164
+ snapshotFiles,
1165
+ hdrPromotion,
1166
+ hdrInspection
1167
+ );
1168
+ outcome = {
1169
+ kind: "report",
1170
+ report: options.snapshots ? await withFindingCrops(dependencies, project, options, report, deadline) : report
1171
+ };
1040
1172
  } catch (error) {
1041
- browser = emptyBrowserResult();
1042
- browser.runtimeFindings.push(runtimeFailure(error));
1173
+ outcome = { kind: "failed", error };
1043
1174
  }
1044
- const snapshotFiles = options.snapshots ? await writeContrastSnapshots(dependencies, project.dir, browser) : [];
1045
- const report = buildReport(
1046
- options,
1047
- lint,
1048
- browser,
1049
- motion,
1050
- specFindings,
1051
- snapshotFiles,
1052
- hdrPromotion,
1053
- hdrInspection
1054
- );
1055
- return options.snapshots ? await withFindingCrops(dependencies, project, options, report) : report;
1175
+ try {
1176
+ await deadline.close();
1177
+ } catch (error) {
1178
+ if (outcome.kind === "failed") {
1179
+ throw new BrowserCleanupError(
1180
+ [outcome.error, error],
1181
+ `${normalizeErrorMessage(outcome.error)}; ${normalizeErrorMessage(error)}`
1182
+ );
1183
+ }
1184
+ const report = outcome.report;
1185
+ return {
1186
+ ...report,
1187
+ ok: false,
1188
+ runtime: section([
1189
+ ...report.runtime.findings,
1190
+ runtimeFailure(error, "check_cleanup_failure")
1191
+ ])
1192
+ };
1193
+ }
1194
+ if (outcome.kind === "failed") throw outcome.error;
1195
+ return outcome.report;
1056
1196
  }
1057
1197
  async function writeContrastSnapshots(dependencies, projectDir, browser) {
1058
1198
  const files = [];
@@ -1067,13 +1207,19 @@ async function writeContrastSnapshots(dependencies, projectDir, browser) {
1067
1207
  }
1068
1208
  return files;
1069
1209
  }
1070
- async function withFindingCrops(dependencies, project, options, report) {
1210
+ async function withFindingCrops(dependencies, project, options, report, deadline) {
1071
1211
  const cropRequests = selectFindingCropRequests(report);
1072
1212
  if (cropRequests.length === 0) return report;
1073
1213
  try {
1074
- const findingFiles = await dependencies.captureFindingCrops(project, options, cropRequests);
1214
+ const findingFiles = await deadline.run(
1215
+ () => dependencies.captureFindingCrops(project, options, cropRequests, deadline)
1216
+ );
1075
1217
  return { ...report, snapshots: { ...report.snapshots, findingFiles } };
1076
1218
  } catch (error) {
1219
+ if (error instanceof CheckDeadlineError) {
1220
+ const finding = runtimeFailure(error);
1221
+ return { ...report, ok: false, runtime: section([...report.runtime.findings, finding]) };
1222
+ }
1077
1223
  console.error(" finding crops skipped: " + normalizeErrorMessage(error));
1078
1224
  trackCommandFailure("check-finding-crops", error);
1079
1225
  return report;
@@ -1351,7 +1497,12 @@ function emptyBrowserResult() {
1351
1497
  };
1352
1498
  }
1353
1499
  function runtimeFailure(error, code = "check_runtime_failure") {
1354
- return findingAtRoot(code, "error", normalizeErrorMessage(error), "index.html");
1500
+ return findingAtRoot(
1501
+ code,
1502
+ "error",
1503
+ normalizeErrorMessage(error),
1504
+ error instanceof CheckDeadlineError ? error.sourceFile ?? "index.html" : "index.html"
1505
+ );
1355
1506
  }
1356
1507
  function findingAtRoot(code, severity, message, sourceFile) {
1357
1508
  return {
@@ -1389,21 +1540,21 @@ function resolveMotionSpec(projectDir) {
1389
1540
  message: `Invalid motion spec ${path}: ${result.errors.join("; ")}`
1390
1541
  };
1391
1542
  }
1392
- async function runBrowserCheck(project, options, motion) {
1393
- const module = await import("./checkBrowser-PRDR6XBY.js");
1394
- return module.runBrowserCheck(project, options, motion, runAuditGrid);
1543
+ async function runBrowserCheck(project, options, motion, deadline) {
1544
+ const module = await import("./checkBrowser-73SOMDG3.js");
1545
+ return module.runBrowserCheck(project, options, motion, runAuditGrid, deadline);
1395
1546
  }
1396
1547
  async function writeSnapshot(projectDir, index, time, pngBase64) {
1397
- const snapshotDir = join(projectDir, "snapshots");
1548
+ const snapshotDir = checkSnapshotDirectory(projectDir);
1398
1549
  mkdirSync(snapshotDir, { recursive: true });
1399
1550
  const filename = `frame-${String(index).padStart(2, "0")}-at-${time.toFixed(1)}s.png`;
1400
1551
  const path = join(snapshotDir, filename);
1401
1552
  writeFileSync(path, Buffer.from(pngBase64, "base64"));
1402
- return join("snapshots", filename);
1553
+ return relative(projectDir, path);
1403
1554
  }
1404
- async function captureFindingCrops(project, options, requests) {
1405
- const module = await import("./checkBrowser-PRDR6XBY.js");
1406
- return module.captureFindingCrops(project, options, requests);
1555
+ async function captureFindingCrops(project, options, requests, deadline) {
1556
+ const module = await import("./checkBrowser-73SOMDG3.js");
1557
+ return module.captureFindingCrops(project, options, requests, deadline);
1407
1558
  }
1408
1559
  var DEFAULT_DEPENDENCIES2 = {
1409
1560
  lintProject,
@@ -1424,14 +1575,85 @@ var examples = [
1424
1575
  var DEFAULT_COMMAND_DEPENDENCIES = {
1425
1576
  resolveProject,
1426
1577
  async runPipeline(project, options) {
1578
+ const capture = await captureArtifactRevision(project.dir).catch(warnNotRecorded);
1427
1579
  const report = await runCheckPipeline(project, options);
1428
1580
  const images = (files) => files.map((file) => resolve(project.dir, file));
1429
1581
  reportArtifacts("check", "frame", images(report.snapshots.files));
1430
1582
  reportArtifacts("check", "finding", images(report.snapshots.findingFiles));
1431
- return report;
1583
+ if (!capture) return report;
1584
+ try {
1585
+ return { ...report, saved: await saveCheckReport(project, options, report, capture) };
1586
+ } catch (error) {
1587
+ warnNotRecorded(error);
1588
+ return report;
1589
+ }
1432
1590
  },
1433
1591
  withMeta
1434
1592
  };
1593
+ function warnNotRecorded(error) {
1594
+ console.warn(`${c.warn("\u26A0")} Check report was not recorded: ${normalizeErrorMessage(error)}`);
1595
+ return void 0;
1596
+ }
1597
+ async function saveCheckReport(project, options, report, capture) {
1598
+ const id = randomUUID();
1599
+ const directory = join2(project.dir, ".hyperframes", "artifacts", "checks");
1600
+ mkdirSync2(directory, { recursive: true });
1601
+ const path = join2(directory, `${id}.json`);
1602
+ writeFileSync2(path, JSON.stringify(report, null, 2) + "\n", { flag: "wx" });
1603
+ const reportScope = "scope" in report && typeof report.scope === "object" && report.scope !== null ? report.scope : void 0;
1604
+ const artifacts = [
1605
+ {
1606
+ kind: "check",
1607
+ id,
1608
+ scope: reportScope ? "scoped" : "project",
1609
+ report: resolve(path),
1610
+ metadata: {
1611
+ ok: report.ok,
1612
+ browserSkipped: report.browserSkipped,
1613
+ scope: reportScope,
1614
+ options
1615
+ }
1616
+ }
1617
+ ];
1618
+ for (const [index, image] of report.snapshots.files.entries()) {
1619
+ artifacts.push({
1620
+ kind: "snapshot",
1621
+ id: `${id}-${index}`,
1622
+ scope: "full",
1623
+ image: resolve(project.dir, image),
1624
+ time: report.snapshots.times[index],
1625
+ metadata: {
1626
+ checkId: id,
1627
+ ...pngDimensions(resolve(project.dir, image))
1628
+ }
1629
+ });
1630
+ }
1631
+ const crops = selectFindingCropRequests(report);
1632
+ for (const [index, image] of report.snapshots.findingFiles.entries()) {
1633
+ const crop = crops.find((request) => image.endsWith(request.filename));
1634
+ artifacts.push({
1635
+ kind: "snapshot",
1636
+ id: `${id}-crop-${index}`,
1637
+ scope: "finding",
1638
+ image: resolve(project.dir, image),
1639
+ time: crop?.time,
1640
+ metadata: {
1641
+ checkId: id,
1642
+ finding: crop,
1643
+ ...pngDimensions(resolve(project.dir, image))
1644
+ }
1645
+ });
1646
+ }
1647
+ const [saved] = await recordArtifacts(project.dir, capture, artifacts);
1648
+ if (!saved) throw new Error("no history record was written");
1649
+ reportArtifacts("check", "check-report", [resolve(path)]);
1650
+ return {
1651
+ id: saved.id,
1652
+ revision: saved.revision,
1653
+ report: saved.report,
1654
+ attribution: saved.attribution
1655
+ };
1656
+ }
1435
1657
  var CHECK_COMMAND_ARGS = {
1436
1658
  dir: { type: "positional", description: "Project directory", required: false },
1437
1659
  json: { type: "boolean", description: "Output agent-readable JSON", default: false },
@@ -1503,7 +1725,7 @@ var CHECK_COMMAND_ARGS = {
1503
1725
  },
1504
1726
  snapshots: {
1505
1727
  type: "boolean",
1506
- description: "Save the five contrast-pass PNGs under snapshots/",
1728
+ description: "Save contrast-pass PNGs under .hyperframes/artifacts/snapshots/",
1507
1729
  default: false
1508
1730
  },
1509
1731
  "caption-zone": {
@@ -1544,6 +1766,12 @@ function createCheckCommand(dependencies = DEFAULT_COMMAND_DEPENDENCIES) {
1544
1766
  console.log(JSON.stringify(dependencies.withMeta(report), null, 2));
1545
1767
  } else {
1546
1768
  printHumanReport(report);
1769
+ if (report.saved) {
1770
+ console.log(`Report: ${report.saved.report}`);
1771
+ console.log(
1772
+ `Revision: ${report.saved.revision ?? "none"} (${report.saved.attribution})`
1773
+ );
1774
+ }
1547
1775
  }
1548
1776
  setCommandExitCode(checkExitCode(report));
1549
1777
  } catch (error) {